diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..164a66eff --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 89662b2e0db9cba9a8215120b330bf59 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index f98a2c9b6..000000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -pisa/_version.py export-subst -*.d linguist-detectable=false diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml deleted file mode 100644 index 849ea9b5e..000000000 --- a/.github/workflows/pythonpackage.yml +++ /dev/null @@ -1,48 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: Python package - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.8', '3.10'] - - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install "pip<21.3" - pip install . - - name: Lint with flake8 - run: | - pip install flake8 - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test PISA example pipelines - run: | - pip install pytest - PISA_FTYPE=fp32 PISA_TARGET=cpu MPLBACKEND=agg ./pisa_tests/test_example_pipelines.py -v - - name: Test PISA imports and unit tests, double precision - run: | - pip install pytest - PISA_FTYPE=fp64 PISA_TARGET=cpu MPLBACKEND=agg ./pisa_tests/run_unit_tests.py -v - - name: Test PISA imports and unit tests, single precision - run: | - pip install pytest - PISA_FTYPE=fp32 PISA_TARGET=cpu MPLBACKEND=agg ./pisa_tests/run_unit_tests.py -v diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d1e7880cf..000000000 --- a/.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# Ignore precompiled packages -*.py[cod] - -# Ignore cached - -# OSX finder files -.DS_Store - -# Ignore auto-generated libraries and files -_*.so -*_wrap.cxx -*_wrap.cpp -BargerPropagator.py -GridPropagator.py -*.o -gaussians.c -gaussians.so -__pycache__ -.eggs - -# Packages -dist -build -pisa.egg-info - -# Common editor remnants -*~ -*.swp - -# Unison backups -.backup - -# Plots -*.pdf -*.png - -# IPython notebook backups -.ipynb_checkpoints -pisa/utils/llh_defs/poisson_gamma_mixtures.c diff --git a/pisa/analysis/__init__.py b/.nojekyll similarity index 100% rename from pisa/analysis/__init__.py rename to .nojekyll diff --git a/.style.yapf b/.style.yapf deleted file mode 100644 index c859ee831..000000000 --- a/.style.yapf +++ /dev/null @@ -1,217 +0,0 @@ -[style] -# Align closing bracket with visual indentation. -align_closing_bracket_with_visual_indent=False - -# Allow dictionary keys to exist on multiple lines. For example: -# -# x = { -# ('this is the first element of a tuple', -# 'this is the second element of a tuple'): -# value, -# } -allow_multiline_dictionary_keys=True - -# Allow lambdas to be formatted on more than one line. -allow_multiline_lambdas=False - -# Allow splits before the dictionary value. -allow_split_before_dict_value=True - -# Insert a blank line before a class-level docstring. -blank_line_before_class_docstring=False - -# Insert a blank line before a 'def' or 'class' immediately nested -# within another 'def' or 'class'. For example: -# -# class Foo: -# # <------ this blank line -# def method(): -# ... -blank_line_before_nested_class_or_def=False - -# Do not split consecutive brackets. Only relevant when -# dedent_closing_brackets is set. For example: -# -# call_func_that_takes_a_dict( -# { -# 'key1': 'value1', -# 'key2': 'value2', -# } -# ) -# -# would reformat to: -# -# call_func_that_takes_a_dict({ -# 'key1': 'value1', -# 'key2': 'value2', -# }) -coalesce_brackets=True - -# The column limit. -column_limit=79 - -# Indent width used for line continuations. -continuation_indent_width=4 - -# Put closing brackets on a separate line, dedented, if the bracketed -# expression can't fit in a single line. Applies to all kinds of brackets, -# including function definitions and calls. For example: -# -# config = { -# 'key1': 'value1', -# 'key2': 'value2', -# } # <--- this bracket is dedented and on a separate line -# -# time_series = self.remote_client.query_entity_counters( -# entity='dev3246.region1', -# key='dns.query_latency_tcp', -# transform=Transformation.AVERAGE(window=timedelta(seconds=60)), -# start_ts=now()-timedelta(days=3), -# end_ts=now(), -# ) # <--- this bracket is dedented and on a separate line -dedent_closing_brackets=True - -# Place each dictionary entry onto its own line. -each_dict_entry_on_separate_line=False - -# The regex for an i18n comment. The presence of this comment stops -# reformatting of that line, because the comments are required to be -# next to the string they translate. -i18n_comment= - -# The i18n function call names. The presence of this function stops -# reformattting on that line, because the string it has cannot be moved -# away from the i18n comment. -i18n_function_call= - -# Indent the dictionary value if it cannot fit on the same line as the -# dictionary key. For example: -# -# config = { -# 'key1': -# 'value1', -# 'key2': value1 + -# value2, -# } -indent_dictionary_value=True - -# The number of columns to use for indentation. -indent_width=4 - -# Join short lines into one line. E.g., single line 'if' statements. -join_multiple_lines=False - -# Do not include spaces around selected binary operators. For example: -# -# 1 + 2 * 3 - 4 / 5 -# -# will be formatted as follows when configured with a value "*,/": -# -# 1 + 2*3 - 4/5 -# -no_spaces_around_selected_binary_operators=set(["*", "/"]) - -# Use spaces around default or named assigns. -spaces_around_default_or_named_assign=False - -# Use spaces around the power operator. -spaces_around_power_operator=False - -# The number of spaces required before a trailing comment. -spaces_before_comment=1 - -# Insert a space between the ending comma and closing bracket of a list, -# etc. -space_between_ending_comma_and_closing_bracket=True - -# Split before arguments if the argument list is terminated by a -# comma. -split_arguments_when_comma_terminated=False - -# Set to True to prefer splitting before '&', '|' or '^' rather than -# after. -split_before_bitwise_operator=True - -# Split before a dictionary or set generator (comp_for). For example, note -# the split before the 'for': -# -# foo = { -# variable: 'Hello world, have a nice day!' -# for variable in bar if variable != 42 -# } -split_before_dict_set_generator=True - -# Split after the opening paren which surrounds an expression if it doesn't -# fit on a single line. -split_before_expression_after_opening_paren=False - -# If an argument / parameter list is going to be split, then split before -# the first argument. -split_before_first_argument=False - -# Set to True to prefer splitting before 'and' or 'or' rather than -# after. -split_before_logical_operator=True - -# Split named assignments onto individual lines. -split_before_named_assigns=True - -# Set to True to split list comprehensions and generators that have -# non-trivial expressions and multiple clauses before each of these -# clauses. For example: -# -# result = [ -# a_long_var + 100 for a_long_var in xrange(1000) -# if a_long_var % 10] -# -# would reformat to something like: -# -# result = [ -# a_long_var + 100 -# for a_long_var in xrange(1000) -# if a_long_var % 10] -split_complex_comprehension=True - -# The penalty for splitting right after the opening bracket. -split_penalty_after_opening_bracket=30 - -# The penalty for splitting the line after a unary operator. -split_penalty_after_unary_operator=10000 - -# The penalty for splitting right before an if expression. -split_penalty_before_if_expr=0 - -# The penalty of splitting the line around the '&', '|', and '^' -# operators. -split_penalty_bitwise_operator=300 - -# The penalty for splitting a list comprehension or generator -# expression. -split_penalty_comprehension=80 - -# The penalty for characters over the column limit. -split_penalty_excess_character=4500 - -# The penalty incurred by adding a line split to the unwrapped line. The -# more line splits added the higher the penalty. -split_penalty_for_added_line_split=30 - -# The penalty of splitting a list of "import as" names. For example: -# -# from a_very_long_or_indented_module_name_yada_yad import (long_argument_1, -# long_argument_2, -# long_argument_3) -# -# would reformat to something like: -# -# from a_very_long_or_indented_module_name_yada_yad import ( -# long_argument_1, long_argument_2, long_argument_3) -split_penalty_import_names=0 - -# The penalty of splitting the line around the 'and' and 'or' -# operators. -split_penalty_logical_operator=300 - -# Use the Tab character for indentation. -use_tabs=False - diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md deleted file mode 100644 index bb2e76052..000000000 --- a/CONTRIBUTORS.md +++ /dev/null @@ -1,34 +0,0 @@ -# Contributors - -PISA was originally developed by members of The IceCube Collaboration, http://icecube.wisc.edu. -Development by The IceCube Collaboration on PISA continues, PISA is being shared with the public in hopes that others can use and contribute back as well. - -Individual contributors, whether or not from The IceCube Collaboration, are listed below, in alphabetical order. - -* Thimothy Arlen -* Summer Blott -* Sebastian Böser -* Étienne Bourbeau -* Melanie Day -* Thomas Ehrhardt -* Philipp Eller -* Aaron Fienberg -* Leander Fischer -* Maicon Hieronymus -* Feifei Huang -* Justin L. Lanfranchi -* Elisa Lohfink -* Wing Yan Ma -* Shivesh Mandalia -* Joakim Sandroos -* Austin Schneider -* Lukas Schulte -* Tom Stuttart -* Ahnaf Tahmid -* Alexander Trettin -* Mathhew J. Weiss -* Jan Weldert -* Steven Wren - -Anyone who has contributed to the PISA project can file an issue, open a PR to request to be listed here. -See also [EXTERNAL_ATTRIBUTION.md](EXTERNAL_ATTRIBUTION.md). diff --git a/EXTERNAL_ATTRIBUTION.md b/EXTERNAL_ATTRIBUTION.md deleted file mode 100644 index 55f9a3df4..000000000 --- a/EXTERNAL_ATTRIBUTION.md +++ /dev/null @@ -1,90 +0,0 @@ -# External software and data in PISA - -PISA is distributed with some software and data obtained from outside the IceCube Collaboration. -The authors and any pertinent copyrights are listed below. -If you identify any mistakes in the below or find any other such components being distributed with PISA that are not listed here, please [email](jll1062+pisa@phys.psu.edu) or [file an issue](http://github.com/icecubeopensource/pisa). - -Unless noted below or in the contents of an individual file, all files distributed with PISA are Copyright (c) 2014-2017, The IceCube Collaboration, and are licensed under the Apache 2.0 license. -See the LICENSE file for details. - -## MCEq - -The service `flux.mceq` does not reproduce but does call upon the MCEq software. -> https://github.com/afedynitch/MCEq - -The authors of that software / the paper that it is based upon (A. Fedynitch, R. Engel, T. K. Gaisser, F. Riehn, T. Stanev) request that anyone who uses their work to produce results cite their work, so please do so if you make use the `flux.mceq` service. -The form of the citation that they request is found in their documentation at -> http://mceq.readthedocs.io/en/latest/citations.html - -## prob3numba - -Files in the directory `pisa/pisa/stages/osc/prob3numba` were adapted from the CUDA re-implementation of Prob3++ called prob3GPU -> https://github.com/rcalland/probGPU - -which is cited by the paper -> R. G. Calland, A. C. Kaboth, and D. Payne, Journal of Instrumentation 9, P04016 (2014). - -## Honda et al. flux models - -Files in the directory `example_resources/flux` containing the name *honda* are from -> http://www.icrr.u-tokyo.ac.jp/~mhonda - -with associated paper -> M. Honda, M. S. Athar, T. Kajita, K. Kasahara, and S. Midorikawa, Phys. Rev. D 92, 023004 (2015). - -## Barr et al. flux models - -Files in the directory `example_resources/flux` containing the name *bartol* are modified slightly (to have similar format to the work by Honda et al. cited above) from -> http://www-pnp.physics.ox.ac.uk/~barr/fluxfiles - -with associated paper -> G. D. Barr, T. K. Gaisser, P. Lipari, S. Robbins, and T. Stanev, Phys. Rev. D 70, 023006 (2004). - -## PREM - -The preliminary reference Earth model data in the `example_resources/osc` directory (named `PREM*`) come from the paper -> A. M. Dziewonski and D. L. Anderson, Physics of the Earth and Planetary Interiors 25, 297 (1981) - -## KDE - -The file `pisa/pisa/utils/vbwkde.py` contains an implementation of (part of) the paper -> Z. I. Botev, J. F. Grotowski, and D. P. Kroese, Ann. Statist. 38, 2916 (2010). - -The functions `isj_bandwidth` and `fixed_point` therein are adapted directly from the Matlab implementation by Zdravko Botev at -> https://www.mathworks.com/matlabcentral/fileexchange/14034-kernel-density-estimator - -and are therefore subject to the following copyright: -``` - Copyright (c) 2007, Zdravko Botev - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -## Versioneer - -Automatic versioning is provided by public-domain sofware The Versioneer, written by Brian Warner (files `versioneer.py` and `pisa/_version.py`). -This project can be found at -> https://github.com/warner/python-versioneer - diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 351c0291b..000000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2014-2017 The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 225bede59..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -include versioneer.py -include pisa/_version.py diff --git a/README_files/README_10_0.png b/README_files/README_10_0.png deleted file mode 100644 index 05e350730..000000000 Binary files a/README_files/README_10_0.png and /dev/null differ diff --git a/_modules/collections.html b/_modules/collections.html new file mode 100644 index 000000000..c5d2da7e0 --- /dev/null +++ b/_modules/collections.html @@ -0,0 +1,1667 @@ + + + + + + collections — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for collections

+'''This module implements specialized container datatypes providing
+alternatives to Python's general purpose built-in containers, dict,
+list, set, and tuple.
+
+* namedtuple   factory function for creating tuple subclasses with named fields
+* deque        list-like container with fast appends and pops on either end
+* ChainMap     dict-like class for creating a single view of multiple mappings
+* Counter      dict subclass for counting hashable objects
+* OrderedDict  dict subclass that remembers the order entries were added
+* defaultdict  dict subclass that calls a factory function to supply missing values
+* UserDict     wrapper around dictionary objects for easier dict subclassing
+* UserList     wrapper around list objects for easier list subclassing
+* UserString   wrapper around string objects for easier string subclassing
+
+'''
+
+__all__ = [
+    'ChainMap',
+    'Counter',
+    'OrderedDict',
+    'UserDict',
+    'UserList',
+    'UserString',
+    'defaultdict',
+    'deque',
+    'namedtuple',
+]
+
+import _collections_abc
+import sys as _sys
+
+from itertools import chain as _chain
+from itertools import repeat as _repeat
+from itertools import starmap as _starmap
+from keyword import iskeyword as _iskeyword
+from operator import eq as _eq
+from operator import itemgetter as _itemgetter
+from reprlib import recursive_repr as _recursive_repr
+from _weakref import proxy as _proxy
+
+try:
+    from _collections import deque
+except ImportError:
+    pass
+else:
+    _collections_abc.MutableSequence.register(deque)
+
+try:
+    from _collections import defaultdict
+except ImportError:
+    pass
+
+
+################################################################################
+### OrderedDict
+################################################################################
+
+class _OrderedDictKeysView(_collections_abc.KeysView):
+
+    def __reversed__(self):
+        yield from reversed(self._mapping)
+
+class _OrderedDictItemsView(_collections_abc.ItemsView):
+
+    def __reversed__(self):
+        for key in reversed(self._mapping):
+            yield (key, self._mapping[key])
+
+class _OrderedDictValuesView(_collections_abc.ValuesView):
+
+    def __reversed__(self):
+        for key in reversed(self._mapping):
+            yield self._mapping[key]
+
+class _Link(object):
+    __slots__ = 'prev', 'next', 'key', '__weakref__'
+
+
+[docs] +class OrderedDict(dict): + 'Dictionary that remembers insertion order' + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as regular dictionaries. + + # The internal self.__map dict maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # The sentinel is in self.__hardroot with a weakref proxy in self.__root. + # The prev links are weakref proxies (to prevent circular references). + # Individual links are kept alive by the hard reference in self.__map. + # Those hard references disappear when a key is deleted from an OrderedDict. + + def __init__(self, other=(), /, **kwds): + '''Initialize an ordered dictionary. The signature is the same as + regular dictionaries. Keyword argument order is preserved. + ''' + try: + self.__root + except AttributeError: + self.__hardroot = _Link() + self.__root = root = _proxy(self.__hardroot) + root.prev = root.next = root + self.__map = {} + self.__update(other, **kwds) + + def __setitem__(self, key, value, + dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link at the end of the linked list, + # and the inherited dictionary is updated with the new key/value pair. + if key not in self: + self.__map[key] = link = Link() + root = self.__root + last = root.prev + link.prev, link.next, link.key = last, root, key + last.next = link + root.prev = proxy(link) + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which gets + # removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link = self.__map.pop(key) + link_prev = link.prev + link_next = link.next + link_prev.next = link_next + link_next.prev = link_prev + link.prev = None + link.next = None + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + # Traverse the linked list in order. + root = self.__root + curr = root.next + while curr is not root: + yield curr.key + curr = curr.next + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + # Traverse the linked list in reverse order. + root = self.__root + curr = root.prev + while curr is not root: + yield curr.key + curr = curr.prev + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + root = self.__root + root.prev = root.next = root + self.__map.clear() + dict.clear(self) + + def popitem(self, last=True): + '''Remove and return a (key, value) pair from the dictionary. + + Pairs are returned in LIFO order if last is true or FIFO order if false. + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root.prev + link_prev = link.prev + link_prev.next = root + root.prev = link_prev + else: + link = root.next + link_next = link.next + root.next = link_next + link_next.prev = root + key = link.key + del self.__map[key] + value = dict.pop(self, key) + return key, value + + def move_to_end(self, key, last=True): + '''Move an existing element to the end (or beginning if last is false). + + Raise KeyError if the element does not exist. + ''' + link = self.__map[key] + link_prev = link.prev + link_next = link.next + soft_link = link_next.prev + link_prev.next = link_next + link_next.prev = link_prev + root = self.__root + if last: + last = root.prev + link.prev = last + link.next = root + root.prev = soft_link + last.next = link + else: + first = root.next + link.prev = root + link.next = first + first.prev = soft_link + root.next = link + + def __sizeof__(self): + sizeof = _sys.getsizeof + n = len(self) + 1 # number of links including root + size = sizeof(self.__dict__) # instance dictionary + size += sizeof(self.__map) * 2 # internal dict and inherited dict + size += sizeof(self.__hardroot) * n # link objects + size += sizeof(self.__root) * n # proxy objects + return size + + update = __update = _collections_abc.MutableMapping.update + + def keys(self): + "D.keys() -> a set-like object providing a view on D's keys" + return _OrderedDictKeysView(self) + + def items(self): + "D.items() -> a set-like object providing a view on D's items" + return _OrderedDictItemsView(self) + + def values(self): + "D.values() -> an object providing a view on D's values" + return _OrderedDictValuesView(self) + + __ne__ = _collections_abc.MutableMapping.__ne__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding + value. If key is not found, d is returned if given, otherwise KeyError + is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + '''Insert key with a value of default if key is not in the dictionary. + + Return the value for key if key is in the dictionary, else default. + ''' + if key in self: + return self[key] + self[key] = default + return default + + @_recursive_repr() + def __repr__(self): + 'od.__repr__() <==> repr(od)' + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, list(self.items())) + + def __reduce__(self): + 'Return state information for pickling' + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + return self.__class__, (), inst_dict or None, None, iter(self.items()) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''Create a new ordered dictionary with keys from iterable and values set to value. + ''' + self = cls() + for key in iterable: + self[key] = value + return self + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return dict.__eq__(self, other) and all(map(_eq, self, other)) + return dict.__eq__(self, other) + + def __ior__(self, other): + self.update(other) + return self + + def __or__(self, other): + if not isinstance(other, dict): + return NotImplemented + new = self.__class__(self) + new.update(other) + return new + + def __ror__(self, other): + if not isinstance(other, dict): + return NotImplemented + new = self.__class__(other) + new.update(self) + return new
+ + + +try: + from _collections import OrderedDict +except ImportError: + # Leave the pure Python version in place. + pass + + +################################################################################ +### namedtuple +################################################################################ + +try: + from _collections import _tuplegetter +except ImportError: + _tuplegetter = lambda index, doc: property(_itemgetter(index), doc=doc) + +
+[docs] +def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): + """Returns a new subclass of tuple with named fields. + + >>> Point = namedtuple('Point', ['x', 'y']) + >>> Point.__doc__ # docstring for the new class + 'Point(x, y)' + >>> p = Point(11, y=22) # instantiate with positional args or keywords + >>> p[0] + p[1] # indexable like a plain tuple + 33 + >>> x, y = p # unpack like a regular tuple + >>> x, y + (11, 22) + >>> p.x + p.y # fields also accessible by name + 33 + >>> d = p._asdict() # convert to a dictionary + >>> d['x'] + 11 + >>> Point(**d) # convert from a dictionary + Point(x=11, y=22) + >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields + Point(x=100, y=22) + + """ + + # Validate the field names. At the user's option, either generate an error + # message or automatically replace the field name with a valid name. + if isinstance(field_names, str): + field_names = field_names.replace(',', ' ').split() + field_names = list(map(str, field_names)) + typename = _sys.intern(str(typename)) + + if rename: + seen = set() + for index, name in enumerate(field_names): + if (not name.isidentifier() + or _iskeyword(name) + or name.startswith('_') + or name in seen): + field_names[index] = f'_{index}' + seen.add(name) + + for name in [typename] + field_names: + if type(name) is not str: + raise TypeError('Type names and field names must be strings') + if not name.isidentifier(): + raise ValueError('Type names and field names must be valid ' + f'identifiers: {name!r}') + if _iskeyword(name): + raise ValueError('Type names and field names cannot be a ' + f'keyword: {name!r}') + + seen = set() + for name in field_names: + if name.startswith('_') and not rename: + raise ValueError('Field names cannot start with an underscore: ' + f'{name!r}') + if name in seen: + raise ValueError(f'Encountered duplicate field name: {name!r}') + seen.add(name) + + field_defaults = {} + if defaults is not None: + defaults = tuple(defaults) + if len(defaults) > len(field_names): + raise TypeError('Got more default values than field names') + field_defaults = dict(reversed(list(zip(reversed(field_names), + reversed(defaults))))) + + # Variables used in the methods and docstrings + field_names = tuple(map(_sys.intern, field_names)) + num_fields = len(field_names) + arg_list = ', '.join(field_names) + if num_fields == 1: + arg_list += ',' + repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')' + tuple_new = tuple.__new__ + _dict, _tuple, _len, _map, _zip = dict, tuple, len, map, zip + + # Create all the named tuple methods to be added to the class namespace + + namespace = { + '_tuple_new': tuple_new, + '__builtins__': {}, + '__name__': f'namedtuple_{typename}', + } + code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))' + __new__ = eval(code, namespace) + __new__.__name__ = '__new__' + __new__.__doc__ = f'Create new instance of {typename}({arg_list})' + if defaults is not None: + __new__.__defaults__ = defaults + + @classmethod + def _make(cls, iterable): + result = tuple_new(cls, iterable) + if _len(result) != num_fields: + raise TypeError(f'Expected {num_fields} arguments, got {len(result)}') + return result + + _make.__func__.__doc__ = (f'Make a new {typename} object from a sequence ' + 'or iterable') + + def _replace(self, /, **kwds): + result = self._make(_map(kwds.pop, field_names, self)) + if kwds: + raise ValueError(f'Got unexpected field names: {list(kwds)!r}') + return result + + _replace.__doc__ = (f'Return a new {typename} object replacing specified ' + 'fields with new values') + + def __repr__(self): + 'Return a nicely formatted representation string' + return self.__class__.__name__ + repr_fmt % self + + def _asdict(self): + 'Return a new dict which maps field names to their values.' + return _dict(_zip(self._fields, self)) + + def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' + return _tuple(self) + + # Modify function metadata to help with introspection and debugging + for method in ( + __new__, + _make.__func__, + _replace, + __repr__, + _asdict, + __getnewargs__, + ): + method.__qualname__ = f'{typename}.{method.__name__}' + + # Build-up the class namespace dictionary + # and use type() to build the result class + class_namespace = { + '__doc__': f'{typename}({arg_list})', + '__slots__': (), + '_fields': field_names, + '_field_defaults': field_defaults, + '__new__': __new__, + '_make': _make, + '_replace': _replace, + '__repr__': __repr__, + '_asdict': _asdict, + '__getnewargs__': __getnewargs__, + '__match_args__': field_names, + } + for index, name in enumerate(field_names): + doc = _sys.intern(f'Alias for field number {index}') + class_namespace[name] = _tuplegetter(index, doc) + + result = type(typename, (tuple,), class_namespace) + + # For pickling to work, the __module__ variable needs to be set to the frame + # where the named tuple is created. Bypass this step in environments where + # sys._getframe is not defined (Jython for example) or sys._getframe is not + # defined for arguments greater than 0 (IronPython), or where the user has + # specified a particular module. + if module is None: + try: + module = _sys._getframe(1).f_globals.get('__name__', '__main__') + except (AttributeError, ValueError): + pass + if module is not None: + result.__module__ = module + + return result
+ + + +######################################################################## +### Counter +######################################################################## + +def _count_elements(mapping, iterable): + 'Tally elements from the iterable.' + mapping_get = mapping.get + for elem in iterable: + mapping[elem] = mapping_get(elem, 0) + 1 + +try: # Load C helper function if available + from _collections import _count_elements +except ImportError: + pass + +class Counter(dict): + '''Dict subclass for counting hashable items. Sometimes called a bag + or multiset. Elements are stored as dictionary keys and their counts + are stored as dictionary values. + + >>> c = Counter('abcdeabcdabcaba') # count elements from a string + + >>> c.most_common(3) # three most common elements + [('a', 5), ('b', 4), ('c', 3)] + >>> sorted(c) # list all unique elements + ['a', 'b', 'c', 'd', 'e'] + >>> ''.join(sorted(c.elements())) # list elements with repetitions + 'aaaaabbbbcccdde' + >>> sum(c.values()) # total of all counts + 15 + + >>> c['a'] # count of letter 'a' + 5 + >>> for elem in 'shazam': # update counts from an iterable + ... c[elem] += 1 # by adding 1 to each element's count + >>> c['a'] # now there are seven 'a' + 7 + >>> del c['b'] # remove all 'b' + >>> c['b'] # now there are zero 'b' + 0 + + >>> d = Counter('simsalabim') # make another counter + >>> c.update(d) # add in the second counter + >>> c['a'] # now there are nine 'a' + 9 + + >>> c.clear() # empty the counter + >>> c + Counter() + + Note: If a count is set to zero or reduced to zero, it will remain + in the counter until the entry is deleted or the counter is cleared: + + >>> c = Counter('aaabbc') + >>> c['b'] -= 2 # reduce the count of 'b' by two + >>> c.most_common() # 'b' is still in, but its count is zero + [('a', 3), ('c', 1), ('b', 0)] + + ''' + # References: + # http://en.wikipedia.org/wiki/Multiset + # http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html + # http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm + # http://code.activestate.com/recipes/259174/ + # Knuth, TAOCP Vol. II section 4.6.3 + + def __init__(self, iterable=None, /, **kwds): + '''Create a new, empty Counter object. And if given, count elements + from an input iterable. Or, initialize the count from another mapping + of elements to their counts. + + >>> c = Counter() # a new, empty counter + >>> c = Counter('gallahad') # a new counter from an iterable + >>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping + >>> c = Counter(a=4, b=2) # a new counter from keyword args + + ''' + super().__init__() + self.update(iterable, **kwds) + + def __missing__(self, key): + 'The count of elements not in the Counter is zero.' + # Needed so that self[missing_item] does not raise KeyError + return 0 + + def total(self): + 'Sum of the counts' + return sum(self.values()) + + def most_common(self, n=None): + '''List the n most common elements and their counts from the most + common to the least. If n is None, then list all element counts. + + >>> Counter('abracadabra').most_common(3) + [('a', 5), ('b', 2), ('r', 2)] + + ''' + # Emulate Bag.sortedByCount from Smalltalk + if n is None: + return sorted(self.items(), key=_itemgetter(1), reverse=True) + + # Lazy import to speedup Python startup time + import heapq + return heapq.nlargest(n, self.items(), key=_itemgetter(1)) + + def elements(self): + '''Iterator over elements repeating each as many times as its count. + + >>> c = Counter('ABCABC') + >>> sorted(c.elements()) + ['A', 'A', 'B', 'B', 'C', 'C'] + + # Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 + >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) + >>> product = 1 + >>> for factor in prime_factors.elements(): # loop over factors + ... product *= factor # and multiply them + >>> product + 1836 + + Note, if an element's count has been set to zero or is a negative + number, elements() will ignore it. + + ''' + # Emulate Bag.do from Smalltalk and Multiset.begin from C++. + return _chain.from_iterable(_starmap(_repeat, self.items())) + + # Override dict methods where necessary + + @classmethod + def fromkeys(cls, iterable, v=None): + # There is no equivalent method for counters because the semantics + # would be ambiguous in cases such as Counter.fromkeys('aaabbc', v=2). + # Initializing counters to zero values isn't necessary because zero + # is already the default value for counter lookups. Initializing + # to one is easily accomplished with Counter(set(iterable)). For + # more exotic cases, create a dictionary first using a dictionary + # comprehension or dict.fromkeys(). + raise NotImplementedError( + 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') + + def update(self, iterable=None, /, **kwds): + '''Like dict.update() but add counts instead of replacing them. + + Source can be an iterable, a dictionary, or another Counter instance. + + >>> c = Counter('which') + >>> c.update('witch') # add elements from another iterable + >>> d = Counter('watch') + >>> c.update(d) # add elements from another counter + >>> c['h'] # four 'h' in which, witch, and watch + 4 + + ''' + # The regular dict.update() operation makes no sense here because the + # replace behavior results in the some of original untouched counts + # being mixed-in with all of the other counts for a mismash that + # doesn't have a straight-forward interpretation in most counting + # contexts. Instead, we implement straight-addition. Both the inputs + # and outputs are allowed to contain zero and negative counts. + + if iterable is not None: + if isinstance(iterable, _collections_abc.Mapping): + if self: + self_get = self.get + for elem, count in iterable.items(): + self[elem] = count + self_get(elem, 0) + else: + # fast path when counter is empty + super().update(iterable) + else: + _count_elements(self, iterable) + if kwds: + self.update(kwds) + + def subtract(self, iterable=None, /, **kwds): + '''Like dict.update() but subtracts counts instead of replacing them. + Counts can be reduced below zero. Both the inputs and outputs are + allowed to contain zero and negative counts. + + Source can be an iterable, a dictionary, or another Counter instance. + + >>> c = Counter('which') + >>> c.subtract('witch') # subtract elements from another iterable + >>> c.subtract(Counter('watch')) # subtract elements from another counter + >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch + 0 + >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch + -1 + + ''' + if iterable is not None: + self_get = self.get + if isinstance(iterable, _collections_abc.Mapping): + for elem, count in iterable.items(): + self[elem] = self_get(elem, 0) - count + else: + for elem in iterable: + self[elem] = self_get(elem, 0) - 1 + if kwds: + self.subtract(kwds) + + def copy(self): + 'Return a shallow copy.' + return self.__class__(self) + + def __reduce__(self): + return self.__class__, (dict(self),) + + def __delitem__(self, elem): + 'Like dict.__delitem__() but does not raise KeyError for missing values.' + if elem in self: + super().__delitem__(elem) + + def __eq__(self, other): + 'True if all counts agree. Missing counts are treated as zero.' + if not isinstance(other, Counter): + return NotImplemented + return all(self[e] == other[e] for c in (self, other) for e in c) + + def __ne__(self, other): + 'True if any counts disagree. Missing counts are treated as zero.' + if not isinstance(other, Counter): + return NotImplemented + return not self == other + + def __le__(self, other): + 'True if all counts in self are a subset of those in other.' + if not isinstance(other, Counter): + return NotImplemented + return all(self[e] <= other[e] for c in (self, other) for e in c) + + def __lt__(self, other): + 'True if all counts in self are a proper subset of those in other.' + if not isinstance(other, Counter): + return NotImplemented + return self <= other and self != other + + def __ge__(self, other): + 'True if all counts in self are a superset of those in other.' + if not isinstance(other, Counter): + return NotImplemented + return all(self[e] >= other[e] for c in (self, other) for e in c) + + def __gt__(self, other): + 'True if all counts in self are a proper superset of those in other.' + if not isinstance(other, Counter): + return NotImplemented + return self >= other and self != other + + def __repr__(self): + if not self: + return f'{self.__class__.__name__}()' + try: + # dict() preserves the ordering returned by most_common() + d = dict(self.most_common()) + except TypeError: + # handle case where values are not orderable + d = dict(self) + return f'{self.__class__.__name__}({d!r})' + + # Multiset-style mathematical operations discussed in: + # Knuth TAOCP Volume II section 4.6.3 exercise 19 + # and at http://en.wikipedia.org/wiki/Multiset + # + # Outputs guaranteed to only include positive counts. + # + # To strip negative and zero counts, add-in an empty counter: + # c += Counter() + # + # Results are ordered according to when an element is first + # encountered in the left operand and then by the order + # encountered in the right operand. + # + # When the multiplicities are all zero or one, multiset operations + # are guaranteed to be equivalent to the corresponding operations + # for regular sets. + # Given counter multisets such as: + # cp = Counter(a=1, b=0, c=1) + # cq = Counter(c=1, d=0, e=1) + # The corresponding regular sets would be: + # sp = {'a', 'c'} + # sq = {'c', 'e'} + # All of the following relations would hold: + # set(cp + cq) == sp | sq + # set(cp - cq) == sp - sq + # set(cp | cq) == sp | sq + # set(cp & cq) == sp & sq + # (cp == cq) == (sp == sq) + # (cp != cq) == (sp != sq) + # (cp <= cq) == (sp <= sq) + # (cp < cq) == (sp < sq) + # (cp >= cq) == (sp >= sq) + # (cp > cq) == (sp > sq) + + def __add__(self, other): + '''Add counts from two counters. + + >>> Counter('abbb') + Counter('bcc') + Counter({'b': 4, 'c': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + newcount = count + other[elem] + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count > 0: + result[elem] = count + return result + + def __sub__(self, other): + ''' Subtract count, but keep only results with positive counts. + + >>> Counter('abbbc') - Counter('bccd') + Counter({'b': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + newcount = count - other[elem] + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count < 0: + result[elem] = 0 - count + return result + + def __or__(self, other): + '''Union is the maximum of value in either of the input counters. + + >>> Counter('abbb') | Counter('bcc') + Counter({'b': 3, 'c': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + other_count = other[elem] + newcount = other_count if count < other_count else count + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count > 0: + result[elem] = count + return result + + def __and__(self, other): + ''' Intersection is the minimum of corresponding counts. + + >>> Counter('abbb') & Counter('bcc') + Counter({'b': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + other_count = other[elem] + newcount = count if count < other_count else other_count + if newcount > 0: + result[elem] = newcount + return result + + def __pos__(self): + 'Adds an empty counter, effectively stripping negative and zero counts' + result = Counter() + for elem, count in self.items(): + if count > 0: + result[elem] = count + return result + + def __neg__(self): + '''Subtracts from an empty counter. Strips positive and zero counts, + and flips the sign on negative counts. + + ''' + result = Counter() + for elem, count in self.items(): + if count < 0: + result[elem] = 0 - count + return result + + def _keep_positive(self): + '''Internal method to strip elements with a negative or zero count''' + nonpositive = [elem for elem, count in self.items() if not count > 0] + for elem in nonpositive: + del self[elem] + return self + + def __iadd__(self, other): + '''Inplace add from another counter, keeping only positive counts. + + >>> c = Counter('abbb') + >>> c += Counter('bcc') + >>> c + Counter({'b': 4, 'c': 2, 'a': 1}) + + ''' + for elem, count in other.items(): + self[elem] += count + return self._keep_positive() + + def __isub__(self, other): + '''Inplace subtract counter, but keep only results with positive counts. + + >>> c = Counter('abbbc') + >>> c -= Counter('bccd') + >>> c + Counter({'b': 2, 'a': 1}) + + ''' + for elem, count in other.items(): + self[elem] -= count + return self._keep_positive() + + def __ior__(self, other): + '''Inplace union is the maximum of value from either counter. + + >>> c = Counter('abbb') + >>> c |= Counter('bcc') + >>> c + Counter({'b': 3, 'c': 2, 'a': 1}) + + ''' + for elem, other_count in other.items(): + count = self[elem] + if other_count > count: + self[elem] = other_count + return self._keep_positive() + + def __iand__(self, other): + '''Inplace intersection is the minimum of corresponding counts. + + >>> c = Counter('abbb') + >>> c &= Counter('bcc') + >>> c + Counter({'b': 1}) + + ''' + for elem, count in self.items(): + other_count = other[elem] + if other_count < count: + self[elem] = other_count + return self._keep_positive() + + +######################################################################## +### ChainMap +######################################################################## + +class ChainMap(_collections_abc.MutableMapping): + ''' A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + be accessed or updated using the *maps* attribute. There is no other + state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__(key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union(*self.maps)) # reuses stored hash values if possible + + def __iter__(self): + d = {} + for mapping in reversed(self.maps): + d.update(dict.fromkeys(mapping)) # reuses stored hash values if possible + return iter(d) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return f'{self.__class__.__name__}({", ".join(map(repr, self.maps))})' + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self, m=None, **kwargs): # like Django's Context.push() + '''New ChainMap with a new map followed by all previous maps. + If no map is provided, an empty dict is used. + Keyword arguments update the map or new empty dict. + ''' + if m is None: + m = kwargs + elif kwargs: + m.update(kwargs) + return self.__class__(m, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError(f'Key not found in the first mapping: {key!r}') + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError(f'Key not found in the first mapping: {key!r}') + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + + def __ior__(self, other): + self.maps[0].update(other) + return self + + def __or__(self, other): + if not isinstance(other, _collections_abc.Mapping): + return NotImplemented + m = self.copy() + m.maps[0].update(other) + return m + + def __ror__(self, other): + if not isinstance(other, _collections_abc.Mapping): + return NotImplemented + m = dict(other) + for child in reversed(self.maps): + m.update(child) + return self.__class__(m) + + +################################################################################ +### UserDict +################################################################################ + +class UserDict(_collections_abc.MutableMapping): + + # Start by filling-out the abstract methods + def __init__(self, dict=None, /, **kwargs): + self.data = {} + if dict is not None: + self.update(dict) + if kwargs: + self.update(kwargs) + + def __len__(self): + return len(self.data) + + def __getitem__(self, key): + if key in self.data: + return self.data[key] + if hasattr(self.__class__, "__missing__"): + return self.__class__.__missing__(self, key) + raise KeyError(key) + + def __setitem__(self, key, item): + self.data[key] = item + + def __delitem__(self, key): + del self.data[key] + + def __iter__(self): + return iter(self.data) + + # Modify __contains__ to work correctly when __missing__ is present + def __contains__(self, key): + return key in self.data + + # Now, add the methods in dicts but not in MutableMapping + def __repr__(self): + return repr(self.data) + + def __or__(self, other): + if isinstance(other, UserDict): + return self.__class__(self.data | other.data) + if isinstance(other, dict): + return self.__class__(self.data | other) + return NotImplemented + + def __ror__(self, other): + if isinstance(other, UserDict): + return self.__class__(other.data | self.data) + if isinstance(other, dict): + return self.__class__(other | self.data) + return NotImplemented + + def __ior__(self, other): + if isinstance(other, UserDict): + self.data |= other.data + else: + self.data |= other + return self + + def __copy__(self): + inst = self.__class__.__new__(self.__class__) + inst.__dict__.update(self.__dict__) + # Create a copy and avoid triggering descriptors + inst.__dict__["data"] = self.__dict__["data"].copy() + return inst + + def copy(self): + if self.__class__ is UserDict: + return UserDict(self.data.copy()) + import copy + data = self.data + try: + self.data = {} + c = copy.copy(self) + finally: + self.data = data + c.update(self) + return c + + @classmethod + def fromkeys(cls, iterable, value=None): + d = cls() + for key in iterable: + d[key] = value + return d + + +################################################################################ +### UserList +################################################################################ + +class UserList(_collections_abc.MutableSequence): + """A more or less complete user-defined wrapper around list objects.""" + + def __init__(self, initlist=None): + self.data = [] + if initlist is not None: + # XXX should this accept an arbitrary sequence? + if type(initlist) == type(self.data): + self.data[:] = initlist + elif isinstance(initlist, UserList): + self.data[:] = initlist.data[:] + else: + self.data = list(initlist) + + def __repr__(self): + return repr(self.data) + + def __lt__(self, other): + return self.data < self.__cast(other) + + def __le__(self, other): + return self.data <= self.__cast(other) + + def __eq__(self, other): + return self.data == self.__cast(other) + + def __gt__(self, other): + return self.data > self.__cast(other) + + def __ge__(self, other): + return self.data >= self.__cast(other) + + def __cast(self, other): + return other.data if isinstance(other, UserList) else other + + def __contains__(self, item): + return item in self.data + + def __len__(self): + return len(self.data) + + def __getitem__(self, i): + if isinstance(i, slice): + return self.__class__(self.data[i]) + else: + return self.data[i] + + def __setitem__(self, i, item): + self.data[i] = item + + def __delitem__(self, i): + del self.data[i] + + def __add__(self, other): + if isinstance(other, UserList): + return self.__class__(self.data + other.data) + elif isinstance(other, type(self.data)): + return self.__class__(self.data + other) + return self.__class__(self.data + list(other)) + + def __radd__(self, other): + if isinstance(other, UserList): + return self.__class__(other.data + self.data) + elif isinstance(other, type(self.data)): + return self.__class__(other + self.data) + return self.__class__(list(other) + self.data) + + def __iadd__(self, other): + if isinstance(other, UserList): + self.data += other.data + elif isinstance(other, type(self.data)): + self.data += other + else: + self.data += list(other) + return self + + def __mul__(self, n): + return self.__class__(self.data * n) + + __rmul__ = __mul__ + + def __imul__(self, n): + self.data *= n + return self + + def __copy__(self): + inst = self.__class__.__new__(self.__class__) + inst.__dict__.update(self.__dict__) + # Create a copy and avoid triggering descriptors + inst.__dict__["data"] = self.__dict__["data"][:] + return inst + + def append(self, item): + self.data.append(item) + + def insert(self, i, item): + self.data.insert(i, item) + + def pop(self, i=-1): + return self.data.pop(i) + + def remove(self, item): + self.data.remove(item) + + def clear(self): + self.data.clear() + + def copy(self): + return self.__class__(self) + + def count(self, item): + return self.data.count(item) + + def index(self, item, *args): + return self.data.index(item, *args) + + def reverse(self): + self.data.reverse() + + def sort(self, /, *args, **kwds): + self.data.sort(*args, **kwds) + + def extend(self, other): + if isinstance(other, UserList): + self.data.extend(other.data) + else: + self.data.extend(other) + + +################################################################################ +### UserString +################################################################################ + +class UserString(_collections_abc.Sequence): + + def __init__(self, seq): + if isinstance(seq, str): + self.data = seq + elif isinstance(seq, UserString): + self.data = seq.data[:] + else: + self.data = str(seq) + + def __str__(self): + return str(self.data) + + def __repr__(self): + return repr(self.data) + + def __int__(self): + return int(self.data) + + def __float__(self): + return float(self.data) + + def __complex__(self): + return complex(self.data) + + def __hash__(self): + return hash(self.data) + + def __getnewargs__(self): + return (self.data[:],) + + def __eq__(self, string): + if isinstance(string, UserString): + return self.data == string.data + return self.data == string + + def __lt__(self, string): + if isinstance(string, UserString): + return self.data < string.data + return self.data < string + + def __le__(self, string): + if isinstance(string, UserString): + return self.data <= string.data + return self.data <= string + + def __gt__(self, string): + if isinstance(string, UserString): + return self.data > string.data + return self.data > string + + def __ge__(self, string): + if isinstance(string, UserString): + return self.data >= string.data + return self.data >= string + + def __contains__(self, char): + if isinstance(char, UserString): + char = char.data + return char in self.data + + def __len__(self): + return len(self.data) + + def __getitem__(self, index): + return self.__class__(self.data[index]) + + def __add__(self, other): + if isinstance(other, UserString): + return self.__class__(self.data + other.data) + elif isinstance(other, str): + return self.__class__(self.data + other) + return self.__class__(self.data + str(other)) + + def __radd__(self, other): + if isinstance(other, str): + return self.__class__(other + self.data) + return self.__class__(str(other) + self.data) + + def __mul__(self, n): + return self.__class__(self.data * n) + + __rmul__ = __mul__ + + def __mod__(self, args): + return self.__class__(self.data % args) + + def __rmod__(self, template): + return self.__class__(str(template) % self) + + # the following methods are defined in alphabetical order: + def capitalize(self): + return self.__class__(self.data.capitalize()) + + def casefold(self): + return self.__class__(self.data.casefold()) + + def center(self, width, *args): + return self.__class__(self.data.center(width, *args)) + + def count(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.count(sub, start, end) + + def removeprefix(self, prefix, /): + if isinstance(prefix, UserString): + prefix = prefix.data + return self.__class__(self.data.removeprefix(prefix)) + + def removesuffix(self, suffix, /): + if isinstance(suffix, UserString): + suffix = suffix.data + return self.__class__(self.data.removesuffix(suffix)) + + def encode(self, encoding='utf-8', errors='strict'): + encoding = 'utf-8' if encoding is None else encoding + errors = 'strict' if errors is None else errors + return self.data.encode(encoding, errors) + + def endswith(self, suffix, start=0, end=_sys.maxsize): + return self.data.endswith(suffix, start, end) + + def expandtabs(self, tabsize=8): + return self.__class__(self.data.expandtabs(tabsize)) + + def find(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.find(sub, start, end) + + def format(self, /, *args, **kwds): + return self.data.format(*args, **kwds) + + def format_map(self, mapping): + return self.data.format_map(mapping) + + def index(self, sub, start=0, end=_sys.maxsize): + return self.data.index(sub, start, end) + + def isalpha(self): + return self.data.isalpha() + + def isalnum(self): + return self.data.isalnum() + + def isascii(self): + return self.data.isascii() + + def isdecimal(self): + return self.data.isdecimal() + + def isdigit(self): + return self.data.isdigit() + + def isidentifier(self): + return self.data.isidentifier() + + def islower(self): + return self.data.islower() + + def isnumeric(self): + return self.data.isnumeric() + + def isprintable(self): + return self.data.isprintable() + + def isspace(self): + return self.data.isspace() + + def istitle(self): + return self.data.istitle() + + def isupper(self): + return self.data.isupper() + + def join(self, seq): + return self.data.join(seq) + + def ljust(self, width, *args): + return self.__class__(self.data.ljust(width, *args)) + + def lower(self): + return self.__class__(self.data.lower()) + + def lstrip(self, chars=None): + return self.__class__(self.data.lstrip(chars)) + + maketrans = str.maketrans + + def partition(self, sep): + return self.data.partition(sep) + + def replace(self, old, new, maxsplit=-1): + if isinstance(old, UserString): + old = old.data + if isinstance(new, UserString): + new = new.data + return self.__class__(self.data.replace(old, new, maxsplit)) + + def rfind(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.rfind(sub, start, end) + + def rindex(self, sub, start=0, end=_sys.maxsize): + return self.data.rindex(sub, start, end) + + def rjust(self, width, *args): + return self.__class__(self.data.rjust(width, *args)) + + def rpartition(self, sep): + return self.data.rpartition(sep) + + def rstrip(self, chars=None): + return self.__class__(self.data.rstrip(chars)) + + def split(self, sep=None, maxsplit=-1): + return self.data.split(sep, maxsplit) + + def rsplit(self, sep=None, maxsplit=-1): + return self.data.rsplit(sep, maxsplit) + + def splitlines(self, keepends=False): + return self.data.splitlines(keepends) + + def startswith(self, prefix, start=0, end=_sys.maxsize): + return self.data.startswith(prefix, start, end) + + def strip(self, chars=None): + return self.__class__(self.data.strip(chars)) + + def swapcase(self): + return self.__class__(self.data.swapcase()) + + def title(self): + return self.__class__(self.data.title()) + + def translate(self, *args): + return self.__class__(self.data.translate(*args)) + + def upper(self): + return self.__class__(self.data.upper()) + + def zfill(self, width): + return self.__class__(self.data.zfill(width)) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 000000000..53ee69133 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,213 @@ + + + + + + Overview: module code — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +

All modules for which code is available

+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/analysis/analysis.html b/_modules/pisa/analysis/analysis.html new file mode 100644 index 000000000..30b6d790a --- /dev/null +++ b/_modules/pisa/analysis/analysis.html @@ -0,0 +1,3709 @@ + + + + + + pisa.analysis.analysis — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.analysis.analysis

+"""
+Common tools for performing an analysis collected into a single class
+`Analysis` that can be subclassed by specific analyses.
+"""
+
+
+from collections.abc import Sequence, Mapping
+from collections import OrderedDict
+from copy import deepcopy
+from operator import setitem
+from itertools import product
+import re
+import sys
+import time
+import warnings
+
+import numpy as np
+import scipy.optimize as optimize
+# this is needed for the take_step option in basinhopping
+from scipy._lib._util import check_random_state
+from iminuit import Minuit
+import nlopt
+
+import pisa
+from pisa import EPSILON, FTYPE, ureg
+from pisa.core.map import Map, MapSet
+from pisa.core.param import ParamSet, Param
+from pisa.core.pipeline import Pipeline
+from pisa.utils.comparisons import recursiveEquality, FTYPE_PREC, ALLCLOSE_KW
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.fileio import to_file
+from pisa.utils.stats import (METRICS_TO_MAXIMIZE, METRICS_TO_MINIMIZE,
+                              LLH_METRICS, CHI2_METRICS, weighted_chi2,
+                              it_got_better, is_metric_to_maximize)
+
+__all__ = ['MINIMIZERS_USING_SYMM_GRAD', 'MINIMIZERS_USING_CONSTRAINTS',
+           'set_minimizer_defaults', 'validate_minimizer_settings',
+           'Counter', 'Analysis', 'BasicAnalysis']
+
+__author__ = 'J.L. Lanfranchi, P. Eller, S. Wren, E. Bourbeau, A. Trettin'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+MINIMIZERS_USING_SYMM_GRAD = ('l-bfgs-b', 'slsqp')
+"""Minimizers that use symmetrical steps on either side of a point to compute
+gradients. See https://github.com/scipy/scipy/issues/4916"""
+
+MINIMIZERS_USING_CONSTRAINTS = ('cobyla')
+"""Minimizers that cannot use the 'bounds' argument and instead need bounds to
+be formulated in terms of constraints."""
+
+def merge_mapsets_together(mapset_list=None):
+    '''Handle merging of multiple MapSets, when they come in
+    the shape of a dict
+
+    '''
+
+    if isinstance(mapset_list[0], Mapping):
+        new_dict = OrderedDict()
+        for S in mapset_list:
+            for k,v in S.items():
+
+                if k not in new_dict.keys():
+                    new_dict[k] = [m for m in v.maps]
+                else:
+                    new_dict[k] += [m for m in v.maps]
+
+        for k,v in new_dict.items():
+            new_dict[k] = MapSet(v)
+
+    else:
+        raise TypeError('This function only works when mapsets are provided as dicts')
+
+    return new_dict
+
+
+# TODO: add Nelder-Mead, as it was used previously...
+
+[docs] +def set_minimizer_defaults(minimizer_settings): + """Fill in default values for minimizer settings. + + Parameters + ---------- + minimizer_settings : dict + + Returns + ------- + new_minimizer_settings : dict + + """ + new_minimizer_settings = dict( + method=dict(value='', desc=''), + options=dict(value=dict(), desc=dict()) + ) + new_minimizer_settings.update(minimizer_settings) + + sqrt_ftype_eps = np.sqrt(np.finfo(FTYPE).eps) + opt_defaults = {} + method = minimizer_settings['method']['value'].lower() + + if method == 'l-bfgs-b' and FTYPE == np.float64: + # From `scipy.optimize.lbfgsb._minimize_lbfgsb` + opt_defaults.update(dict( + maxcor=10, ftol=2.2204460492503131e-09, gtol=1e-5, eps=1e-8, + maxfun=15000, maxiter=15000, iprint=-1, maxls=20 + )) + elif method == 'l-bfgs-b' and FTYPE == np.float32: + # Adapted to lower precision + opt_defaults.update(dict( + maxcor=10, ftol=sqrt_ftype_eps, gtol=1e-3, eps=1e-5, + maxfun=15000, maxiter=15000, iprint=-1, maxls=20 + )) + elif method == 'slsqp' and FTYPE == np.float64: + opt_defaults.update(dict( + maxiter=100, ftol=1e-6, iprint=0, eps=sqrt_ftype_eps, + )) + elif method == 'slsqp' and FTYPE == np.float32: + opt_defaults.update(dict( + maxiter=100, ftol=1e-4, iprint=0, eps=sqrt_ftype_eps + )) + elif method == 'cobyla': + opt_defaults.update(dict( + rhobeg=0.1, maxiter=1000, tol=1e-4, + )) + else: + raise ValueError('Unhandled minimizer "%s" / FTYPE=%s' + % (method, FTYPE)) + + opt_defaults.update(new_minimizer_settings['options']['value']) + + new_minimizer_settings['options']['value'] = opt_defaults + + # Populate the descriptions with something + for opt_name in new_minimizer_settings['options']['value']: + if opt_name not in new_minimizer_settings['options']['desc']: + new_minimizer_settings['options']['desc'] = 'no desc' + + return new_minimizer_settings
+ + + +# TODO: add Nelder-Mead, as it was used previously... +
+[docs] +def validate_minimizer_settings(minimizer_settings): + """Validate minimizer settings. + + See source for specific thresholds set. + + Parameters + ---------- + minimizer_settings : dict + + Raises + ------ + ValueError + If any minimizer settings are deemed to be invalid. + + """ + ftype_eps = np.finfo(FTYPE).eps + method = minimizer_settings['method']['value'].lower() + options = minimizer_settings['options']['value'] + if method == 'l-bfgs-b': + must_have = ('maxcor', 'ftol', 'gtol', 'eps', 'maxfun', 'maxiter', + 'maxls') + may_have = must_have + ('args', 'jac', 'bounds', 'disp', 'iprint', + 'callback') + elif method == 'slsqp': + must_have = ('maxiter', 'ftol', 'eps') + may_have = must_have + ('args', 'jac', 'bounds', 'constraints', + 'iprint', 'disp', 'callback') + elif method == 'cobyla': + must_have = ('maxiter', 'rhobeg', 'tol') + may_have = must_have + ('disp', 'catol') + + missing = set(must_have).difference(set(options)) + excess = set(options).difference(set(may_have)) + if missing: + raise ValueError('Missing the following options for %s minimizer: %s' + % (method, missing)) + if excess: + raise ValueError('Excess options for %s minimizer: %s' + % (method, excess)) + + eps_msg = '%s minimizer option %s(=%e) is < %d * %s_EPS(=%e)' + eps_gt_msg = '%s minimizer option %s(=%e) is > %e' + fp64_eps = np.finfo(np.float64).eps + + if method == 'l-bfgs-b': + err_lim, warn_lim = 2, 10 + for s in ['ftol', 'gtol']: + val = options[s] + if val < err_lim * ftype_eps: + raise ValueError(eps_msg % (method, s, val, err_lim, 'FTYPE', + ftype_eps)) + if val < warn_lim * ftype_eps: + logging.warning(eps_msg, method, s, val, warn_lim, 'FTYPE', ftype_eps) + + val = options['eps'] + err_lim, warn_lim = 1, 10 + if val < err_lim * fp64_eps: + raise ValueError(eps_msg % (method, 'eps', val, err_lim, 'FP64', + fp64_eps)) + if val < warn_lim * ftype_eps: + logging.warning(eps_msg, method, 'eps', val, warn_lim, 'FTYPE', ftype_eps) + + err_lim, warn_lim = 0.25, 0.1 + if val > err_lim: + raise ValueError(eps_gt_msg % (method, 'eps', val, err_lim)) + if val > warn_lim: + logging.warning(eps_gt_msg, method, 'eps', val, warn_lim) + + if method == 'slsqp': + err_lim, warn_lim = 2, 10 + val = options['ftol'] + if val < err_lim * ftype_eps: + raise ValueError(eps_msg % (method, 'ftol', val, err_lim, 'FTYPE', + ftype_eps)) + if val < warn_lim * ftype_eps: + logging.warning(eps_msg, method, 'ftol', val, warn_lim, 'FTYPE', ftype_eps) + + val = options['eps'] + err_lim, warn_lim = 1, 10 + if val < err_lim * fp64_eps: + raise ValueError(eps_msg % (method, 'eps', val, 1, 'FP64', + fp64_eps)) + if val < warn_lim * ftype_eps: + logging.warning(eps_msg, method, 'eps', val, warn_lim, 'FP64', fp64_eps) + + err_lim, warn_lim = 0.25, 0.1 + if val > err_lim: + raise ValueError(eps_gt_msg % (method, 'eps', val, err_lim)) + if val > warn_lim: + logging.warning(eps_gt_msg, method, 'eps', val, warn_lim) + + if method == 'cobyla': + if options['rhobeg'] > 0.5: + raise ValueError('starting step-size > 0.5 will overstep boundary') + if options['rhobeg'] < 1e-2: + logging.warning('starting step-size is very low, convergence will be slow')
+ + + + +def get_separate_octant_params( + hypo_maker, angle_name, inflection_point, tolerance=None +): + ''' + This function creates versions of the angle param that are confined to + a single octant. It does this for both octant cases. This is used to allow + fits to be done where only one of the octants is allowed. The fit can then + be done for the two octant cases and compared to find the best fit. + + Parameters + ---------- + hypo_maker : DistributionMaker or Detector + The hypothesis maker being used by the fitter + angle_name : string + Name of the angle for which to create separate octant params. + inflection_point : quantity + Point distinguishing between the two octants, e.g. 45 degrees + tolerance : quantity + If the starting value is closer to the inflection point than the value of the + tolerance, it is offset away from the inflection point by this amount. + + Returns + ------- + angle_orig : Param + angle param as it was before applying the octant separation + angle_case1 : Param + angle param confined to first octant + angle_case2 : Param + angle param confined to second octant + ''' + + # Reset angle before starting + angle = hypo_maker.params[angle_name] + angle.reset() + + # Store the original theta23 param before we mess with it + # WARNING: Do not copy here, you want the original object (since this relates to the underlying + # ParamSelector from which theta23 is extracted). Otherwise end up with an incosistent state + # later (e.g. after a new call to ParamSelector.select_params, this copied, and potentially + # modified param will be overwtiten by the original). + angle_orig = angle + + # Get the octant definition + octants = ( + (angle.range[0], inflection_point) , + (inflection_point, angle.range[1]) + ) + + # If angle is maximal (e.g. the transition between octants) or very close + # to it, offset it slightly to be clearly in one octant (note that fit can + # still move the value back to maximal). The reason for this is that + # otherwise checks on the parameter bounds (which include a margin for + # minimizer tolerance) can an throw exception. + if tolerance is None: + tolerance = 0.1 * ureg.degree + dist_from_inflection = angle.value - inflection_point + if np.abs(dist_from_inflection) < tolerance : + sign = -1. if dist_from_inflection < 0. else +1. # Note this creates +ve shift also for theta == 45 (arbitary) + angle.value = inflection_point + (sign * tolerance) + + # Store the cases + angle_case1 = deepcopy(angle) + angle_case2 = deepcopy(angle) + + # Get case 1, e.g. the current octant + case1_octant_index = 0 if angle_case1.value < inflection_point else 1 + angle_case1.range = octants[case1_octant_index] + angle_case1.nominal_value = angle_case1.value + + # Also get case 2, e.g. the other octant + case2_octant_index = 0 if case1_octant_index == 1 else 1 + angle_case2.value = 2*inflection_point - angle_case2.value + # Also setting nominal value so that `reset_free` won't try to set it out of bounds + angle_case2.nominal_value = angle_case2.value + angle_case2.range = octants[case2_octant_index] + + return angle_orig, angle_case1, angle_case2 + +def update_param_values( + hypo_maker, + params, + update_nominal_values=False, + update_range=False, + update_is_fixed=False +): + """ + Update just the values of parameters of a DistributionMaker *without* replacing + the memory references inside. + + This should be used in place of `hypo_maker.update_params(params)` unless one + explicitly wants to replace the memory references to which the parameters in + the DistributionMaker are pointing. + """ + + # it is possible that only a single param is given + if isinstance(params, Param): + params = [params] + + if isinstance(hypo_maker, Pipeline): + hypo_maker = [hypo_maker] + + for p in params: + for pipeline in hypo_maker: + if p.name not in pipeline.params.names: continue + # it is crucial that we update the range first because the value + # of the parameter in params might lie outside the range of those in + # hypo_maker. + if update_range: + pipeline.params[p.name].range = p.range + pipeline.params[p.name].value = p.value + if update_nominal_values: + pipeline.params[p.name].nominal_value = p.nominal_value + if update_is_fixed: + pipeline.params[p.name].is_fixed = p.is_fixed + +def update_param_values_detector( + hypo_maker, + params, + update_nominal_values=False, + update_range=False, + update_is_fixed=False +): + """ + Modification of the update_param_values function to use with the Detectors class. + """ + assert hypo_maker.__class__.__name__ == "Detectors", "hypo_maker is not Detectors class" + + if isinstance(params, Param): params = ParamSet(params) + + for distribution_maker in hypo_maker: + ps = deepcopy(params) + for p in ps.names: + if distribution_maker.detector_name in p: + p_name = p.replace('_'+distribution_maker.detector_name, "") + if p_name in ps.names: + ps.remove(p_name) + ps[p].name = p_name + update_param_values(distribution_maker, ps, + update_nominal_values, update_range, update_is_fixed) + hypo_maker.init_params() + +# TODO: move this to a central location prob. in utils +
+[docs] +class Counter(object): + """Simple counter object for use as a minimizer callback.""" + def __init__(self, i=0): + self._count = i + + def __str__(self): + return str(self._count) + + def __repr__(self): + return str(self) + + def __iadd__(self, inc): + self._count += inc + +
+[docs] + def reset(self): + """Reset counter""" + self._count = 0
+ + + @property + def count(self): + """int : Current count""" + return self._count
+ + +class BoundedRandomDisplacement(object): + """ + Add a bounded random displacement of maximum size `stepsize` to each coordinate + Calling this updates `x` in-place. + + Parameters + ---------- + stepsize : float, optional + Maximum stepsize in any dimension + bounds : pair of float or sequence of pairs of float + Bounds on x + random_gen : {None, `np.random.RandomState`, `np.random.Generator`} + The random number generator that generates the displacements + """ + def __init__(self, stepsize=0.5, bounds=(0, 1), random_gen=None): + self.stepsize = stepsize + self.random_gen = check_random_state(random_gen) + self.bounds = np.array(bounds).T + + def __call__(self, x): + x += self.random_gen.uniform(-self.stepsize, self.stepsize, + np.shape(x)) + x = np.clip(x, *self.bounds) # bounds are automatically broadcast + return x + +class HypoFitResult(object): + """Holds all relevant information about a fit result.""" + + + _state_attrs = ["metric", "metric_val", "params", "param_selections", + "hypo_asimov_dist", "detailed_metric_info", "minimizer_time", + "num_distributions_generated", "minimizer_metadata", "fit_history"] + + # TODO: initialize from serialized state + def __init__( + self, + metric=None, + metric_val=None, + data_dist=None, + hypo_maker=None, + minimizer_time=None, + num_distributions_generated=None, + minimizer_metadata=None, + fit_history=None, + other_metrics=None, + counter=None, + include_detailed_metric_info=False, + ): + self.metric = metric + self.metric_val = metric_val + # deepcopy done in setter function + self.params = None + self.hypo_asimov_dist = None + if hypo_maker is not None: + self.params = hypo_maker.params + self.param_selections = hypo_maker.param_selections + # Record the distribution with the optimal param values + self.hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) + self.detailed_metric_info = None + if minimizer_time is not None: + self.minimizer_time = minimizer_time * ureg.sec + self.num_distributions_generated = num_distributions_generated + self.minimizer_metadata = minimizer_metadata + self.fit_history = fit_history + + if include_detailed_metric_info: + msg = "missing input to calculate detailed metric info" + assert hypo_maker is not None, msg + assert data_dist is not None, msg + assert metric is not None, msg + if hypo_maker.__class__.__name__ == "Detectors": + # this passes through the setter method, but it should just pass through + # without actually doing anything + self.detailed_metric_info = [self.get_detailed_metric_info( + data_dist=data_dist[i], hypo_asimov_dist=self.hypo_asimov_dist[i], + params=hypo_maker.distribution_makers[i].params, metric=metric[i], + other_metrics=other_metrics, detector_name=hypo_maker.det_names[i], hypo_maker=hypo_maker + ) for i in range(len(data_dist))] + else: # DistributionMaker object + if 'generalized_poisson_llh' == metric[0]: + generalized_poisson_dist = hypo_maker.get_outputs(return_sum=False, force_standard_output=False) + generalized_poisson_dist = merge_mapsets_together(mapset_list=generalized_poisson_dist) + else: + generalized_poisson_dist = None + + self.detailed_metric_info = self.get_detailed_metric_info( + data_dist=data_dist, hypo_asimov_dist=self.hypo_asimov_dist, generalized_poisson_hypo=generalized_poisson_dist, + params=hypo_maker.params, metric=metric[0], other_metrics=other_metrics, + detector_name=hypo_maker.detector_name, hypo_maker=hypo_maker + ) + + def __getitem__(self, i): + if i in self._state_attrs: + return getattr(self, i) + else: + raise ValueError(f"Unknown property {i}") + + def _rehash(self): + self._param_hash = self._params.hash + + @property + def params(self): + if self._params is None: + return None + # Safety feature: Because we pass this object as a record of the best fit + # through several function, we need to make sure the parameters are not + # corrupted on the way. + if self._params.hash != self._param_hash: + raise RuntimeError("The parameter hash doesn't match, parameters might have" + " been changed accidentally. This can happen if the parameters from" + " this object have been used to update the params inside a" + " DistributionMaker. Do not access private _params unless you are " + " certain that you want to change the parameters and then _rehash.") + # We MUST ensure that we don't hand out references to the internal params here + # because they could otherwise be manipulated inadvertently. + return deepcopy(self._params) + + @params.setter + def params(self, newpars): + if newpars is None: + self._params = None + self._param_hash = None + return + elif isinstance(newpars, list): + # Comparing to `list`, not `Sequence`, because if `newpars` are a `ParamSet` + # the test for membership of `Sequence` would return `True`. + self._params = ParamSet(newpars) + else: + # The constructor of ParamSet is *not* a copy-constructor! The parameters + # making up the ParamSet are instead taken over by reference only. This is + # why we must use `deepcopy` here and can't just use ParamSet(newpars) for + # everything. + self._params = deepcopy(newpars) + self._rehash() + + @property + def detailed_metric_info(self): + return self._detailed_metric_info + + @detailed_metric_info.setter + def detailed_metric_info(self, new_info): + if new_info is None: + self._detailed_metric_info = None + elif isinstance(new_info, list): + self._detailed_metric_info = [ + self.deserialize_detailed_metric_info(i) for i in new_info + ] + else: + self._detailed_metric_info = self.deserialize_detailed_metric_info(new_info) + + @property + def hypo_asimov_dist(self): + return self._hypo_asimov_dist + + @hypo_asimov_dist.setter + def hypo_asimov_dist(self, new_had): + if isinstance(new_had, MapSet) or new_had is None: + self._hypo_asimov_dist = new_had + elif isinstance(new_had, Mapping): + # instantiating from serializable state + self._hypo_asimov_dist = MapSet(**new_had) + elif isinstance(new_had, list) and all(isinstance(item, MapSet) for item in new_had): + # for detector class output + self._hypo_asimov_dist = new_had + else: + raise ValueError("invalid format for hypo_asimov_dist") + + @property + def state(self): + state = OrderedDict() + for attr in self._state_attrs: + val = getattr(self, attr) + if hasattr(val, 'state'): + val = val.state + setitem(state, attr, val) + return state + + @property + def serializable_state(self): + return self.state + + @classmethod + def from_state(cls, state): + assert set(state.keys()) == set(cls._state_attrs), "ill-formed state dict" + new_obj = cls() + for attr in cls._state_attrs: + setattr(new_obj, attr, state[attr]) + return new_obj + + @staticmethod + def get_detailed_metric_info(data_dist, hypo_maker, hypo_asimov_dist, params, metric, + generalized_poisson_hypo=None, other_metrics=None, detector_name=None): + """Get detailed fit information, including e.g. maps that yielded the + metric. + + Parameters + ---------- + data_dist + hypo_asimov_dist + params + metric + other_metrics + + Returns + ------- + detailed_metric_info : OrderedDict + + """ + if other_metrics is None: + other_metrics = [] + elif isinstance(other_metrics, str): + other_metrics = [other_metrics] + all_metrics = sorted(set([metric] + other_metrics)) + detailed_metric_info = OrderedDict() + if detector_name is not None: + detailed_metric_info['detector_name'] = detector_name + for m in all_metrics: + name_vals_d = OrderedDict() + + # if the metric is not generalized poisson, but the distribution is a dict, + # retrieve the 'weights' mapset from the distribution output + if m == 'generalized_poisson_llh': + name_vals_d['maps'] = data_dist.maps[0].generalized_poisson_llh(expected_values=generalized_poisson_hypo) + llh_binned = data_dist.maps[0].generalized_poisson_llh(expected_values=generalized_poisson_hypo, binned=True) + map_binned = Map(name=metric, + hist=np.reshape(llh_binned, data_dist.maps[0].shape), + binning=data_dist.maps[0].binning + ) + name_vals_d['maps_binned'] = MapSet(map_binned) + name_vals_d['priors'] = params.priors_penalties(metric=metric) + detailed_metric_info[m] = name_vals_d + + else: + if isinstance(hypo_asimov_dist, OrderedDict): + hypo_asimov_dist = hypo_asimov_dist['weights'] + + if m == 'weighted_chi2': + actual_values = data_dist.hist['total'] + expected_values = hypo_asimov_dist.hist['total'] + d = {'output_binning': hypo_maker.pipelines[0].output_binning, + 'output_key': 'bin_unc2'} + bin_unc2 = hypo_maker.get_outputs(return_sum=True, **d).hist['total'] + metric_hists = weighted_chi2(actual_values, expected_values, bin_unc2) + name_vals_d['maps'] = OrderedDict(total=np.sum(metric_hists)) + metric_hists = OrderedDict(total=metric_hists) + else: + name_vals_d['maps'] = data_dist.metric_per_map( + expected_values=hypo_asimov_dist, metric=m + ) + metric_hists = data_dist.metric_per_map( + expected_values=hypo_asimov_dist, metric='binned_'+m + ) + + maps_binned = [] + for asimov_map, metric_hist in zip(hypo_asimov_dist, metric_hists): + map_binned = Map( + name=asimov_map.name, + hist=np.reshape(metric_hists[metric_hist], + asimov_map.shape), + binning=asimov_map.binning + ) + maps_binned.append(map_binned) + name_vals_d['maps_binned'] = MapSet(maps_binned) + name_vals_d['priors'] = params.priors_penalties(metric=metric) + detailed_metric_info[m] = name_vals_d + return detailed_metric_info + + @staticmethod + def deserialize_detailed_metric_info(info_dict): + """Re-instantiate all PISA objects that used to be in the dictionary.""" + + detailed_metric_info = OrderedDict() + if "detector_name" in info_dict.keys(): + detailed_metric_info['detector_name'] = info_dict["detector_name"] + all_metrics = sorted(set(info_dict.keys()) - {"detector_name"}) + for m in all_metrics: + name_vals_d = OrderedDict() + name_vals_d['maps'] = info_dict[m]["maps"] + if isinstance(info_dict[m]["maps_binned"], MapSet): + # If this has already been deserialized or never serialized in the + # first place, just pass through. + name_vals_d["maps_binned"] = info_dict[m]["maps_binned"] + else: + # Deserialize if necessary + name_vals_d['maps_binned'] = MapSet(**info_dict[m]["maps_binned"]) + name_vals_d['priors'] = info_dict[m]["priors"] + detailed_metric_info[m] = name_vals_d + return detailed_metric_info + + +
+[docs] +class BasicAnalysis(object): + """A bare-bones analysis that only fits a hypothesis to data. + + Full analyses with functionality beyond just fitting (doing scans, for example) + should sub-class this class. + + Every fit is run with the `fit_recursively` method, where the fit strategy is + defined by the three arguments `method`, `method_kwargs` and + `local_fit_kwargs` (see documentation of :py:meth:`fit_recursively` below for + other arguments.) The `method` argument determines which sub-routine should be + run, `method_kwargs` is a dictionary with any keyword arguments of that + sub-routine, and `local_fit_kwargs` is a dictionary (or list thereof) defining any + nested sub-routines that are run within the outer sub-routine. A sub-sub-routine + defined in `local_fit_kwargs` should again be a dictionary with the three keywords + `method`, `method_kwargs` and `local_fit_kwargs`. In this way, sub-routines + can be arbitrarily stacked to define complex fit strategies. + + Examples + -------- + + A canonical standard oscillation fit fits octants in `theta23` separately and then + runs a scipy minimizer to optimize locally in each octant. The arguments that would + produce that result when passed to `fit_recursively` are: + :: + method = "octants" + method_kwargs = { + "angle": "theta23" + "inflection_point": 45 * ureg.deg + } + local_fit_kwargs = { + "method": "scipy", + "method_kwargs": minimizer_settings, + "local_fit_kwargs": None + } + + Let's say we also have a CP violating phase `deltacp24` that we want to fit + separately per quadrant split at 90 degrees. We want this done within each + quadrant fit for `theta23`, making 4 fits in total. Then we would nest the + quadrant fit for `deltacp24` inside the octant fit like so: + :: + method = "octants" + method_kwargs = { + "angle": "theta23" + "inflection_point": 45 * ureg.deg + } + local_fit_kwargs = { + "method": "octants", + "method_kwargs": { + "angle": "deltacp24", + "inflection_point": 90 * ureg.deg, + } + "local_fit_kwargs": { + "method": "scipy", + "method_kwargs": minimizer_settings, + "local_fit_kwargs": None + } + } + + Let's suppose we want to apply a grid-scan global fit method to sterile mixing + parameters `theta24` and `deltam41`, but we want to marginalize over all other + parameters with a usual 3-flavor fit configuration. That could be achieved as + follows: + :: + method = "grid_scan" + method_kwargs = { + "grid": { + "theta24": np.geomspace(1, 20, 3) * ureg.deg, + "deltam41": np.geomspace(0.01, 0.5, 4) * ureg["eV^2"], + }, + "fix_grid_params": False, + } + local_fit_kwargs = { + "method": "octants", + "method_kwargs": { + "angle": "theta23", + "inflection_point": 45 * ureg.deg, + } + "local_fit_kwargs": { + "method": "scipy", + "method_kwargs": minimizer_settings, + "local_fit_kwargs": None + } + } + + Instead of `scipy`, we can also use `iminuit` and `nlopt` for local minimization or + global searches by writing a dictionary with ``"method": "iminuit"`` or ``"method": + "nlopt"``, respectively. + + **NLOPT Options** + + NLOPT can be dropped in place of `scipy` and `iminuit` by writing a dictionary with + ``"method": "nlopt"`` and choosing the algorithm by its name of the form + ``NLOPT_{G,L}{N}_XXXX``. PISA supports all of the derivative-free global + (https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#global-optimization) and + local + (https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#local-derivative-free-optimization) + algorithms. Algorithms requiring gradients such as BFGS are not supported. To use + the Nelder-Mead algorithm, for example, the following settings could be used: + :: + nlopt_settings = { + "method": "nlopt", + "method_kwargs": { + "algorithm": "NLOPT_LN_NELDERMEAD", + "ftol_abs": 1e-5, + "ftol_rel": 1e-5, + # other options that can be set here: + # xtol_abs, xtol_rel, stopval, maxeval, maxtime + # after maxtime seconds, stop and return best result so far + "maxtime": 60 + }, + "local_fit_kwargs": None # no further nesting available + } + + and then run the fit with + :: + best_fit_info = ana.fit_recursively( + data_dist, + dm, + "chi2", + None, + **nlopt_settings + ) + + . Of course, you can also nest the `nlopt_settings` dictionary in any of the + `octants`, `ranges` and so on by passing it as `local_fit_kwargs`. + + *Adding constraints* + + Adding inequality constraints to algorithms that support it is possible by writing a + lambda function in a string that expects to get the current parameters as a + `ParamSet` and returns a float. The result will satisfy that the passed function + stays `negative` (to be consistent with scipy). The string will be passed to + `eval` to build the callable function. For example, a silly way to bound + `delta_index` > 0.1 would be: + :: + "method_kwargs": { + "algorithm": "NLOPT_LN_COBYLA", + "ftol_abs": 1e-5, + "ftol_rel": 1e-5, + "maxtime": 30, + "ineq_constraints": [ + # be sure to convert parameters to their magnitude + "lambda params: params.delta_index.m - 0.1" + ] + } + + Adding inequality constraints to algorithms that don't support it can be done by + either nesting the local fit in the `constrained_fit` method or to use NLOPT's + AUGLAG method that adds a penalty for constraint violations internally. For example, + we could do this to fulfill the same constraint with the PRAXIS algorithm: + :: + "method_kwargs": { + "algorithm": "NLOPT_AUGLAG", + "ineq_constraints":[ + "lambda params: params.delta_index.m - 0.1" + ], + "local_optimizer": { + # supports all the same options as above + "algorithm": "NLOPT_LN_PRAXIS", + "ftol_abs": 1e-5, + "ftol_rel": 1e-5, + } + } + + *Using global searches with local subsidiary minimizers* + + Some global searches, like evolutionary strategies, use local subsidiary minimizers. + These can be defined just as above by passing a dictionary with the settings to the + `local_optimizer` keyword. Note that, again, only gradient-free methods are + supported. Here is an example for the "Multi-Level single linkage" (MLSL) algorithm, + using PRAXIS as the local optimizer: + :: + "method_kwargs": { + "algorithm": "NLOPT_G_MLSL_LDS", + "local_optimizer": { + "algorithm": "NLOPT_LN_PRAXIS", + "ftol_abs": 1e-5, + "ftol_rel": 1e-5, + } + } + For some evolutionary strategies such as ISRES, the `population` option can also + be set. + :: + "method_kwargs": { + "algorithm": "NLOPT_GN_ISRES", + "population": 100, + } + + **Custom fitting methods** + + Custom fitting methods are added by subclassing the analysis. The fit function + name has to follow the scheme `_fit_{method}` where `method` is the name of the + fit method. For instance, the function for `scipy` is called `_fit_scipy` and can + be called by setting `"method": "scipy"` in the fit strategy dict. + + The function has to accept the parameters `data_dist`, `hypo_maker`, `metric`, + `external_priors_penalty`, `method_kwargs`, and `local_fit_kwargs`. See docstring + of `fit_recursively` for descriptions of these arguments. The return value + of the function must be a `HypoFitResult` object. As an example, the following + sub-class of the BasicAnalysis has a custom fit method that, nonsensically, + always sets 42 degrees as the starting value for theta23: + :: + class SubclassedAnalysis(BasicAnalysis): + + def _fit_nonsense( + self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs + ): + logging.info("Starting nonsense fit (setting theta23 to 42 deg)...") + + for pipeline in hypo_maker: + if "theta23" in pipeline.params.free.names: + pipeline.params.theta23.value = 42 * ureg["deg"] + + best_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + return best_fit_info + + Now, the `nonsense` fit method can be used and nested with any other fit method + like so: + :: + ana = SubclassedAnalysis() + local_minuit = OrderedDict( + method="iminuit", + method_kwargs={ + "tol": 10, + }, + local_fit_kwargs=None + ) + + local_nonsense_minuit = OrderedDict( + method="nonsense", + method_kwargs=None, + local_fit_kwargs=local_minuit + ) + + fit_result = ana.fit_recursively( + data_dist, + distribution_maker, + "chi2", + None, + **local_nonsense_minuit + ) + """ + + def __init__(self): + self._nit = 0 + self.pprint = True + self.blindness = False + + # TODO: Defer sub-fits to cluster +
+[docs] + def fit_recursively( + self, data_dist, hypo_maker, metric, external_priors_penalty, + method, method_kwargs=None, local_fit_kwargs=None + ): + """Recursively apply global search strategies with local sub-fits. + + Parameters + ---------- + + data_dist : Sequence of MapSets or MapSet + Data distribution to be fit. Can be an actual-, Asimov-, or pseudo-data + distribution (where the latter two are derived from simulation and so aren't + technically "data"). + + hypo_maker : Detectors or DistributionMaker + Creates the per-bin expectation values per map based on its param values. + Free params in the `hypo_maker` are modified by the minimizer to achieve a + "best" fit. + + metric : string or iterable of strings + Metric by which to evaluate the fit. See documentation of Map. + + external_priors_penalty : func + User defined prior penalty function, which takes `hypo_maker` and + `metric` as arguments and returns numerical value of penalty to the metric + value. It is expected sign of the penalty is correctly specified inside the + `external_priors_penalty` (e.g. negative for llh or positive for chi2). + + method : str + Name of the sub-routine to be run. Currently, the options are `scipy`, + `octants`, `best_of`, `grid_scan`, `constrained`, + `ranges`, `condition`, `iminuit`, and `nlopt`. + + method_kwargs : dict + Any keyword arguments taken by the sub-routine. May be `None` if the + sub-routine takes no additional arguments. + + local_fit_kwargs : dict or list thereof + A dictionary defining subsidiary sub-routines with the keywords `method`, + `method_kwargs` and `local_fit_kwargs`. May be `None` if the + sub-routine is itself a local or global fit that runs no further subsidiary + fits. + + """ + + if isinstance(metric, str): + metric = [metric] + + # Before starting any fit, check if we already have a perfect match between data and template + # This can happen if using pseudodata that was generated with the nominal values for parameters + # (which will also be the initial values in the fit) and blah... + # If this is the case, don't both to fit and return results right away. + + if isinstance(metric, str): + metric = [metric] + + # Grab the hypo map + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) + + if isinstance(metric, str): + metric = [metric] + # Check number of used metrics + if hypo_maker.__class__.__name__ == "Detectors": + if len(metric) == 1: # One metric for all detectors + metric = list(metric) * len(hypo_maker.distribution_makers) + elif len(metric) != len(hypo_maker.distribution_makers): + raise IndexError('Number of defined metrics does not match with number of detectors.') + else: # DistributionMaker object + assert len(metric) == 1 + + # Check if the hypo matches data + if hypo_maker.__class__.__name__ != "Detectors" and data_dist.allclose(hypo_asimov_dist) : + + msg = 'Initial hypo matches data, no need for fit' + logging.info(msg) + + # Get the metric value at this initial point + # This is for returning as part of the "fit" results + initial_metric_val = ( + data_dist.metric_total(expected_values=hypo_asimov_dist, metric=metric[0]) + + hypo_maker.params.priors_penalty(metric=metric[0]) + ) + + # Return fit results, even though didn't technically fit + return HypoFitResult( + metric, + initial_metric_val, + data_dist, + hypo_maker, + minimizer_time=0., + minimizer_metadata={"success":True, "nit":0, "message":msg}, # Add some metadata in the format returned by `scipy.optimize.minimize` + fit_history=None, + other_metrics=None, + num_distributions_generated=0, + include_detailed_metric_info=True, + ) + + if method in ["fit_octants", "fit_ranges"]: + method = method.split("_")[1] + logging.warn(f"fit method 'fit_{method}' has been re-named to '{method}'") + + # If made it here, we have a fit to do... + fit_function = getattr(self, f"_fit_{method}") + # Run the fit function + return fit_function(data_dist, hypo_maker, metric, external_priors_penalty, + method_kwargs, local_fit_kwargs)
+ + + def _fit_octants(self, data_dist, hypo_maker, metric, external_priors_penalty, + method_kwargs, local_fit_kwargs): + """ + A simple global optimization scheme that searches mixing angle octants. + """ + angle_name = method_kwargs["angle"] + if angle_name not in hypo_maker.params.free.names: + logging.info(f"{angle_name} is not a free parameter, skipping octant check") + return self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + inflection_point = method_kwargs["inflection_point"] + + logging.info(f"Entering octant fit for angle {angle_name} with inflection " + f"point at {inflection_point}") + #### Removed, fitting always separately. + # Is there a reason not to fit separately, ever? + # fit_octants_separately = True + # if "fit_octants_separately" in method_kwargs.keys(): + # fit_octants_separately = method_kwargs["fit_octants_separately"] + + reset_free = True + if "reset_free" in method_kwargs.keys(): + reset_free = method_kwargs["reset_free"] + + if not reset_free: + # store so we can reset to the values we currently have rather than + # resetting free parameters back to their nominal value after the octant + # check + minimizer_start_params = deepcopy(hypo_maker.params) + + tolerance = method_kwargs["tolerance"] if "tolerance" in method_kwargs else None + # Get new angle parameters each limited to one octant + ang_orig, ang_case1, ang_case2 = get_separate_octant_params( + hypo_maker, angle_name, inflection_point, tolerance=tolerance + ) + + # Fit the first octant + # In this case it is OK to replace the memory reference, we will reinstate it + # later. + hypo_maker.update_params(ang_case1) + best_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + if not self.blindness: + logging.info(f"found best fit at angle {best_fit_info.params[angle_name].value}") + logging.info(f'checking other octant of {angle_name}') + + if reset_free: + hypo_maker.reset_free() + else: + for param in minimizer_start_params: + hypo_maker.params[param.name].value = param.value + + # Fit the second octant + hypo_maker.update_params(ang_case2) + new_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + if not self.blindness: + logging.info(f"found best fit at angle {new_fit_info.params[angle_name].value}") + + + # We must not forget to reset the range of the angle to its original value! + # Otherwise, the parameter returned by this function will have a different + # range, which can cause failures further down the line! + # This is one rare instance where we directly manipulate the parameters, so + # we re-hash. + best_fit_info._params[angle_name].range = deepcopy(ang_orig.range) + best_fit_info._rehash() + new_fit_info._params[angle_name].range = deepcopy(ang_orig.range) + new_fit_info._rehash() + + # Take the one with the best fit + got_better = it_got_better(new_fit_info.metric_val, best_fit_info.metric_val, metric) + + # TODO: Pass alternative fits up the chain + if got_better: + # alternate_fits.append(best_fit_info) + best_fit_info = new_fit_info + if not self.blindness: + logging.info('Accepting other-octant fit') + else: + # alternate_fits.append(new_fit_info) + if not self.blindness: + logging.info('Accepting initial-octant fit') + + # Put the original angle parameter (as in, the actual object from memory) + # back into the hypo maker + hypo_maker.update_params(ang_orig) + + # Copy the fitted parameter values from the best fit case into the hypo maker's + # parameter values. + # Also reinstate the original parameter range for the angle + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, best_fit_info.params.free, update_range=True) + else: + update_param_values(hypo_maker, best_fit_info.params.free, update_range=True) + + return best_fit_info + + def _fit_best_of(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run several manually configured fits and take the best one. + + The specialty here is that `local_fit_kwargs` is a list, where each element + defines one fit. + """ + + logging.info(f"running several manually configured fits to choose optimum") + + reset_free = True + if method_kwargs is not None and "reset_free" in method_kwargs.keys(): + reset_free = method_kwargs["reset_free"] + + all_fit_results = [] + for i, fit_kwargs in enumerate(local_fit_kwargs): + if reset_free: + hypo_maker.reset_free() + logging.info(f"Beginning fit {i+1} / {len(local_fit_kwargs)}") + new_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + fit_kwargs["method"], fit_kwargs["method_kwargs"], + fit_kwargs["local_fit_kwargs"] + ) + all_fit_results.append(new_fit_info) + + all_fit_metric_vals = [fit_info.metric_val for fit_info in all_fit_results] + # Take the one with the best fit + if is_metric_to_maximize(metric): + best_idx = np.argmax(all_fit_metric_vals) + else: + best_idx = np.argmin(all_fit_metric_vals) + + logging.info(f"Found best fit being index {best_idx} with metric " + f"{all_fit_metric_vals[best_idx]}") + return all_fit_results[best_idx] + + def _fit_condition(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run one fit strategy or the other depending on a condition being true. + + As in the constrained fit, the condition can be a callable or a string that + can be evaluated to a callable via `eval()`. + + `local_fit_kwargs` has to be a list of length 2. The first fit runs if the + condition is true, the second one runs if the condition is false. + """ + + assert "condition_func" in method_kwargs.keys() + assert len(local_fit_kwargs) == 2, ("need to fit specs, first runs if True, " + "second runs if false") + if type(method_kwargs["condition_func"]) is str: + logging.warn( + "Using eval() is potentially dangerous as it can execute " + "arbitrary code! Do not store your config file in a place" + "where others have writing access!" + ) + condition_func = eval(method_kwargs["condition_func"]) + assert callable(condition_func), "evaluated object is not a valid function" + elif callable(method_kwargs["condition_func"]): + condition_func = method_kwargs["condition_func"] + else: + raise ValueError("Condition function is neither a callable nor a " + "string that can be evaluated to a callable.") + + if condition_func(hypo_maker): + logging.info("condition was TRUE, running first fit") + fit_kwargs = local_fit_kwargs[0] + else: + logging.info("condition was FALSE, running second fit") + fit_kwargs = local_fit_kwargs[1] + return self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + fit_kwargs["method"], fit_kwargs["method_kwargs"], + fit_kwargs["local_fit_kwargs"] + ) + + def _fit_grid_scan(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """ + Do a grid scan over starting positions and choose the best fit from the grid. + + Alternatively, the parameters used for the grid can be fixed in the fit at each + grid point, and only the very best fit is then freed up to be refined. + """ + + assert "grid" in method_kwargs.keys() + reset_free = True + if "reset_free" in method_kwargs.keys(): + reset_free = method_kwargs["reset_free"] + fix_grid_params = False + if "fix_grid_params" in method_kwargs.keys(): + fix_grid_params = method_kwargs["fix_grid_params"] + grid_params = list(method_kwargs["grid"].keys()) + logging.info(f"Starting grid scan over parameters {grid_params}") + grid_1d_arrs = [] + grid_units = [] + for p in grid_params: + d_spec = method_kwargs["grid"][p] + logging.info(f"{p}: {d_spec}") + grid_1d_arrs.append(d_spec.m) + grid_units.append(d_spec.u) + scan_mesh = np.meshgrid(*grid_1d_arrs) + scan_mesh = [m * u for m, u in zip(scan_mesh, grid_units)] + + if not fix_grid_params: + logging.info("This grid only defines the starting value of each fit, " + "all parameters that are free will stay free.") + else: + logging.info("The grid parameters will be fixed at each grid point.") + + do_refined_fit = False + if ("refined_fit" in method_kwargs.keys() + and method_kwargs["refined_fit"] is not None): + do_refined_fit = True + logging.info("The best fit on the grid will be refined using " + f"{method_kwargs['refined_fit']['method']}") + + if reset_free: + hypo_maker.reset_free() + # when we return from the scan, we want to set all parameters free again that + # were free to begin with + originally_free = hypo_maker.params.free.names + all_fit_results = [] + grid_shape = scan_mesh[0].shape + for grid_idx in np.ndindex(grid_shape): + point = {name: mesh[grid_idx] for name, mesh in zip(grid_params, scan_mesh)} + logging.info(f"working on grid point {point}") + if reset_free: + hypo_maker.reset_free() + for param, value in point.items(): + mod_param = deepcopy(hypo_maker.params[param]) + mod_param.value = value + if fix_grid_params: + # it is possible to do a scan over fixed parameters as well as + # free ones; fixed ones always stay fixed, free ones are fixed + # if requested + mod_param.is_fixed = True + # It is important not to use hypo_maker.update_params(mod_param) here + # because we don't want to overwrite the memory reference! + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, mod_param, update_is_fixed=True) + else: + update_param_values(hypo_maker, mod_param, update_is_fixed=True) + new_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + all_fit_results.append(new_fit_info) + for param in originally_free: + hypo_maker.params[param].is_fixed = False + + all_fit_metric_vals = np.array([fit_info.metric_val for fit_info in all_fit_results]) + all_fit_metric_vals = all_fit_metric_vals.reshape(grid_shape) + if not self.blindness: + logging.info(f"Grid scan metrics:\n{all_fit_metric_vals}") + # Take the one with the best fit + if is_metric_to_maximize(metric): + best_idx = np.argmax(all_fit_metric_vals) + best_idx_grid = np.unravel_index(best_idx, all_fit_metric_vals.shape) + else: + best_idx = np.argmin(all_fit_metric_vals) + best_idx_grid = np.unravel_index(best_idx, all_fit_metric_vals.shape) + + logging.info(f"Found best fit being index {best_idx_grid} with metric " + f"{all_fit_metric_vals[best_idx_grid]}") + + best_fit_result = all_fit_results[best_idx] + + if do_refined_fit: + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, best_fit_result.params.free) + else: + update_param_values(hypo_maker, best_fit_result.params.free) + # the params stored in the best fit may come from a grid point where + # parameters were fixed, so we free them up again + for param in originally_free: + hypo_maker.params[param].is_fixed = False + logging.info("Refining best fit result...") + # definitely don't want to reset the parameters here, that would defeate + # the entire purpose... + method_kwargs["refined_fit"]["reset_free"] = False + best_fit_result = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + method_kwargs["refined_fit"]["method"], + method_kwargs["refined_fit"]["method_kwargs"], + method_kwargs["refined_fit"]["local_fit_kwargs"] + ) + + return best_fit_result + + def _fit_constrained(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run a fit subject to an arbitrary inequality constraint. + + The constraint is given as a function that must stay positive. The value of + this function is scaled by a pre-factor and applied as a penalty to the test + statistic, where the initial scaling factor is not too large to avoid + minimizer problems. Should the fit converge to a point violating the + constraint, the penalty scale is doubled. + + The constraining function should calculate the distance of the constraint + over-stepping in *rescaled* parameter space to make the over-all scale + uniform. + """ + + assert "ineq_func" in method_kwargs.keys() + # If certain parameters aren't free, it will be impossible to satisfy the + # constraint and we would end up in an infinite loop! If we detect that + # these parameters aren't free, we just pass through the inner fit without + # adding a constraining penalty. + assert "necessary_free_params" in method_kwargs.keys() + if not set(method_kwargs["necessary_free_params"]).issubset( + set(hypo_maker.params.free.names)): + logging.info("Necessary parameters to satisfy the constraints aren't " + "free, running inner fit without constraint...") + return self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + if "starting_values" in method_kwargs.keys(): + assert set( + method_kwargs["starting_values"].keys() + ).issubset(set(method_kwargs["necessary_free_params"])) + + logging.info("entering constrained fit...") + if type(method_kwargs["ineq_func"]) is str: + logging.warn( + "Using eval() is potentially dangerous as it can execute " + "arbitrary code! Do not store your config file in a place" + "where others have writing access!" + ) + ineq_func = eval(method_kwargs["ineq_func"]) + assert callable(ineq_func), "evaluated object is not a valid function" + elif callable(method_kwargs["ineq_func"]): + ineq_func = method_kwargs["ineq_func"] + else: + raise ValueError("Inequality function is neither a callable nor a " + "string that can be evaluated to a callable.") + + def constraint_func(params): + value = ineq_func(params) + # inequality function must stay positive, so there is no penalty if + # it is positive, but otherwise we want to return a *positive* penalty + return 0. if value > 0. else -value + + penalty = 1000. + if "minimum_penalty" in method_kwargs.keys(): + penalty = method_kwargs["minimum_penalty"] + tol = 1e-4 + if "constraint_tol" in method_kwargs.keys(): + tol = method_kwargs["constraint_tol"] + penalty_sign = -1 if is_metric_to_maximize(metric) else 1 + # It would be very inefficient to reset all free values each time when + # the penalty is doubled. However, we might still want to reset just once + # at the beginning of the constrained fit. We could still, if we wanted + # to, reset in the inner loop via the local_fit_kwargs. + reset_free = False + if "reset_free" in method_kwargs.keys(): + reset_free = method_kwargs["reset_free"] + if reset_free: + hypo_maker.reset_free() + + if external_priors_penalty is None: + penalty_func = lambda hypo_maker, metric: ( + penalty_sign * penalty * constraint_func(params=hypo_maker.params) + ) + else: + penalty_func = lambda hypo_maker, metric: ( + penalty_sign * penalty * constraint_func(params=hypo_maker.params) + + external_priors_penalty(hypo_maker=hypo_maker, metric=metric) + ) + # emulating do-while loop + while True: + if "starting_values" in method_kwargs.keys(): + for param, value in method_kwargs["starting_values"].items(): + for pipeline in hypo_maker.pipelines: + if param in pipeline.params.names: + pipeline.params[param].value = value + fit_result = self.fit_recursively( + data_dist, hypo_maker, metric, penalty_func, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + penalty *= 2 + if constraint_func(fit_result.params) <= tol: + break + elif not self.blindness: + logging.info("Fit result violates constraint condition, re-running " + f"with new penalty multiplier: {penalty}") + return fit_result + + def _fit_ranges(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Fit given ranges of a parameter separately.""" + + assert "param_name" in method_kwargs.keys() + assert "ranges" in method_kwargs.keys() + if not method_kwargs["param_name"] in hypo_maker.params.free.names: + logging.info(f"parameter {method_kwargs['param_name']} not free, " + "skipping fit over ranges...") + return self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + logging.info(f"entering fit over separate ranges in {method_kwargs['param_name']}") + + reset_free = False + if "reset_free" in method_kwargs.keys(): + reset_free = method_kwargs["reset_free"] + + # Store a copy of the original parameter such that we can reset the ranges + # and nominal values after the fit is done. + original_param = deepcopy(hypo_maker.params[method_kwargs["param_name"]]) + if not self.blindness: + logging.info(f"original parameter:\n{original_param}") + # this is the param we play around with (NOT same object in memory) + mod_param = deepcopy(original_param) + # The way this works is that we change the range and the set the rescaled + # value of the parameter to the same number it originally had. This means + # that, if the parameter was originally set at the lower end of the original + # range, it will now always start at the lower end of each interval to be + # fit separately. If it was in the middle, it will start in the middle of + # each interval. + original_rescaled_value = original_param._rescaled_value + all_fit_results = [] + for i, interval in enumerate(method_kwargs["ranges"]): + mod_param.range = interval + mod_param._rescaled_value = original_rescaled_value + # to make sure that a `reset_free` command will not try to reset the + # parameter to a place outside of the modified range we also set the + # nominal value + mod_param.nominal_value = mod_param.value + logging.info(f"now fitting on interval {i+1}/{len(method_kwargs['ranges'])}") + if not self.blindness: + logging.info(f"parameter with modified range:\n{mod_param}") + # use update_param_values instead of hypo_maker.update_params so that we + # don't overwrite the internal memory reference + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector( + hypo_maker, mod_param, update_range=True, update_nominal_values=True + ) + else: + update_param_values( + hypo_maker, mod_param, update_range=True, update_nominal_values=True + ) + fit_result = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + all_fit_results.append(fit_result) + + all_fit_metric_vals = [fit_info.metric_val for fit_info in all_fit_results] + # Take the one with the best fit + if is_metric_to_maximize(metric): + best_idx = np.argmax(all_fit_metric_vals) + else: + best_idx = np.argmin(all_fit_metric_vals) + + if not self.blindness: + logging.info(f"Found best fit being in interval {best_idx+1} with metric " + f"{all_fit_metric_vals[best_idx]}") + best_fit_result = all_fit_results[best_idx] + # resetting the range of the parameter we played with + # This is one rare instance where we manipulate the parameters of a fit result. + best_fit_result._params[original_param.name].range = original_param.range + best_fit_result._params[original_param.name].nominal_value = original_param.nominal_value + best_fit_result._rehash() + # set the values of all parameters in the hypo_maker to the best fit values + # without overwriting the memory reference. + # Also reset ranges and nominal values that we might have changed above! + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector( + hypo_maker, best_fit_result.params.free, + update_range=True, update_nominal_values=True + ) + else: + update_param_values( + hypo_maker, best_fit_result.params.free, + update_range=True, update_nominal_values=True + ) + return best_fit_result + + def _fit_staged(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run a staged fit of one or more sub-fits where later fits start where the + earlier fits finished. + + The subsidiary fits are passed as a list of dicts to `local_fit_kwargs` and + are worked on in order of the list. Internally, the `nominal_values` of the + parameters are set to the best fit values of the previous fit, such that + calls to `reset_free` do not destroy the progress of previous stages. + """ + assert local_fit_kwargs is not None + assert isinstance(local_fit_kwargs, list) and len(local_fit_kwargs) > 1 + + logging.info("Starting staged fit...") + best_fit_params = None + best_fit_info = None + # storing original nominal values + original_nominal_values = dict( + [(p.name, p.nominal_value) for p in hypo_maker.params.free] + ) + for i, fit_kwargs in enumerate(local_fit_kwargs): + logging.info(f"Beginning fit {i+1} / {len(local_fit_kwargs)}") + if best_fit_params is not None: + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector( + hypo_maker, best_fit_params.free, update_nominal_values=True + ) + else: + update_param_values( + hypo_maker, best_fit_params.free, update_nominal_values=True + ) + best_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + fit_kwargs["method"], fit_kwargs["method_kwargs"], + fit_kwargs["local_fit_kwargs"] + ) + best_fit_params = best_fit_info.params # makes a deepcopy anyway + # We set the nominal values to the best fit values, so that a `reset_free` + # call does not destroy the progress of the previous fit. + for p in best_fit_params.free: + p.nominal_value = p.value + # reset the nominal values to their original values as if nothing happened + # note that we manipulate the internal `_params` object directly, circumventing + # the getter method! + for p in best_fit_info._params.free: + p.nominal_value = original_nominal_values[p.name] + # Because we directly manipulated the internal parameters, we need to update + # the hash. + best_fit_info._rehash() + # Make sure that the hypo_maker has its params also at the best fit point + # with the original nominal parameter values. + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector( + hypo_maker, best_fit_info.params.free, update_nominal_values=True + ) + else: + update_param_values( + hypo_maker, best_fit_info.params.free, update_nominal_values=True + ) + return best_fit_info + + def _fit_scipy(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run an arbitrary scipy minimizer to modify hypo dist maker's free params + until the data_dist is most likely to have come from this hypothesis. + + This function uses only local optimization and does not attempt to find + a global optimum among several local optima. + + Parameters + ---------- + data_dist : MapSet or List of MapSets + Data distribution(s) + + hypo_maker : Detectors, DistributionMaker or convertible thereto + + metric : string or iterable of strings + + minimizer_settings : dict + + external_priors_penalty : func + User defined prior penalty function + + + Returns + ------- + fit_info : HypoFitResult + """ + + global_scipy_methods = ["differential_evolution", "basinhopping", + "dual_annealing", "shgo"] + methods_using_local_fits = ["basinhopping", "dual_annealing", "shgo"] + + global_method = None + if "global_method" in method_kwargs.keys(): + global_method = method_kwargs["global_method"] + + if local_fit_kwargs is not None and global_method not in methods_using_local_fits: + logging.warn(f"local_fit_kwargs are ignored by global method {global_method}") + + if global_method is None: + logging.info(f"entering local scipy fit using {method_kwargs['method']['value']}") + else: + assert global_method in global_scipy_methods, "unsupported global fit method" + logging.info(f"entering global scipy fit using {global_method}") + if not self.blindness: + logging.debug("free parameters:") + logging.debug(hypo_maker.params.free) + + if global_method in methods_using_local_fits: + minimizer_settings = set_minimizer_defaults(local_fit_kwargs) + validate_minimizer_settings(minimizer_settings) + elif global_method == "differential_evolution": + # Unfortunately we are not allowed to pass these, DE with polish=True always + # uses L-BFGS-B with default settings. + if ("polish" in method_kwargs["options"].keys() + and method_kwargs["options"]["polish"]): + logging.info("Differential Evolution result will be polished using L-BFGS-B") + # We need to put the method here so that the bounds will be adjusted + # below, otherwise the polishing fit can cause crashes if it hits the + # bounds. + minimizer_settings = { + "method": {"value": "L-BFGS-B"}, + "options": {"value": {"eps": 1e-8}} + } + else: + # We put this here such that the checks farther down don't crash + minimizer_settings = {"method": {"value": "None"}} + elif global_method == "dual_annealing": + minimizer_settings = { + "method": {"value": "L-BFGS-B"}, + "options": {"value": {"eps": 1e-8}} + } + logging.info("Due to a scipy bug, local minimization can only use default" + "L-BFGS-B settings. The given settings are ignored.") + else: + minimizer_settings = set_minimizer_defaults(method_kwargs) + validate_minimizer_settings(minimizer_settings) + + if isinstance(metric, str): + metric = [metric] + sign = 0 + for m in metric: + if m in METRICS_TO_MAXIMIZE and sign != +1: + sign = -1 + elif m in METRICS_TO_MINIMIZE and sign != -1: + sign = +1 + else: + raise ValueError("Defined metrics are not compatible") + # Get starting free parameter values + x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access + + # Indicate indices where x0 should be reflected around the mid-point at 0.5. + # This is only used for the COBYLA minimizer. + flip_x0 = np.zeros(len(x0), dtype=bool) + + minimizer_method = minimizer_settings["method"]["value"].lower() + cons = () + if minimizer_method in MINIMIZERS_USING_CONSTRAINTS: + logging.warning( + 'Minimizer %s requires bounds to be formulated in terms of constraints.' + ' Constraining functions are auto-generated now.', + minimizer_method + ) + cons = [] + for idx in range(len(x0)): + l = {'type': 'ineq', + 'fun': lambda x, i=idx: x[i] - FTYPE_PREC} # lower bound at zero + u = {'type': 'ineq', + 'fun': lambda x, i=idx: 1. - x[i]} # upper bound at 1 + cons.append(l) + cons.append(u) + # The minimizer begins with a step of size `rhobeg` in the positive + # direction. Flipping around 0.5 ensures that this initial step will not + # overstep boundaries if `rhobeg` is 0.5. + flip_x0 = np.array(x0) > 0.5 + # The minimizer can't handle bounds, but they still need to be passed for + # the interface to be uniform even though they are not used. + bounds = [(0, 1)]*len(x0) + else: + bounds = [(0, 1)]*len(x0) + + x0 = np.where(flip_x0, 1 - x0, x0) + + if global_method is None: + logging.debug('Running the %s minimizer...', minimizer_method) + else: + logging.debug(f"Running the {global_method} global fit method...") + # Using scipy.optimize.minimize allows a whole host of minimizers to be + # used. + counter = Counter() + + fit_history = [] + fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) + + start_t = time.time() + + if self.pprint and not self.blindness: + free_p = hypo_maker.params.free + self._pprint_header(free_p, external_priors_penalty, metric) + + # reset number of iterations before each minimization + self._nit = 0 + + + # Before starting minimization, check if we already have a perfect match between data and template + # This can happen if using pseudodata that was generated with the nominal values for parameters + # (which will also be the initial values in the fit) and blah... + # If this is the case, don't both to fit and return results right away. + + # Grab the hypo map + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) + + # Check if the hypo matches data + matches = False + if isinstance(data_dist, list): + matches = all( entry.allclose(hypo_asimov_dist[ie]) for ie, entry in enumerate(data_dist) ) + else: + matches = data_dist.allclose(hypo_asimov_dist) + + if matches: + + msg = 'Initial hypo matches data, no need for fit' + logging.info(msg) + + # Get the metric value at this initial point (for the returned data) + initial_metric_val = ( + data_dist.metric_total(expected_values=hypo_asimov_dist, metric=metric[0]) + + hypo_maker.params.priors_penalty(metric=metric[0]) + ) + + # Return fit results, even though didn't technically fit + return HypoFitResult( + metric, + initial_metric_val, + data_dist, + hypo_maker, + minimizer_time=0., + minimizer_metadata={"success":True, "nit":0, "message":msg}, # Add some metadata in the format returned by `scipy.optimize.minimize` + fit_history=None, + other_metrics=None, + num_distributions_generated=0, + include_detailed_metric_info=True, + ) + + + # + # From that point on, optimize starts using the metric and + # iterates, no matter what you do + # + if global_method is None: + optimize_result = optimize.minimize( + fun=self._minimizer_callable, + x0=x0, + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty), + bounds=bounds, + constraints=cons, + method=minimizer_settings['method']['value'], + options=minimizer_settings['options']['value'], + callback=self._minimizer_callback + ) + elif global_method == "differential_evolution": + optimize_result = optimize.differential_evolution( + func=self._minimizer_callable, + bounds=bounds, + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty), + callback=self._minimizer_callback, + **method_kwargs["options"] + ) + elif global_method == "basinhopping": + if "seed" in method_kwargs["options"]: + seed = method_kwargs["options"]["seed"] + else: + seed = None + rng = check_random_state(seed) + + if "step_size" in method_kwargs["options"]: + step_size = method_kwargs["options"]["step_size"] + else: + step_size = 0.5 + + take_step = BoundedRandomDisplacement(step_size, bounds, rng) + minimizer_kwargs = deepcopy(local_fit_kwargs) + minimizer_kwargs["args"] = ( + hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty + ) + if "reset_free" in minimizer_kwargs: + del minimizer_kwargs["reset_free"] + minimizer_kwargs["method"] = local_fit_kwargs["method"]["value"] + minimizer_kwargs["options"] = local_fit_kwargs["options"]["value"] + minimizer_kwargs["bounds"] = bounds + def basinhopping_callback(x, f, accept): + self._nit += 1 + optimize_result = optimize.basinhopping( + func=self._minimizer_callable, + x0=x0, + take_step=take_step, + callback=basinhopping_callback, + minimizer_kwargs=minimizer_kwargs, + **method_kwargs["options"] + ) + optimize_result.success = True # basinhopping doesn't set this property + elif global_method == "dual_annealing": + def annealing_callback(x, f, context): + self._nit += 1 + # TODO: Enable use of custom minimization if scipy is fixed + # The scipy implementation is buggy insofar as it doesn't apply bounds to + # the inner minimization and there is no way to pass bounds through that + # doesn't crash. This leads to evaluations outside of the bounds. + optimize_result = optimize.dual_annealing( + func=self._minimizer_callable, + bounds=bounds, + x0=x0, + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty), + callback=annealing_callback, + **method_kwargs["options"] + ) + elif global_method == "shgo": + minimizer_kwargs = deepcopy(local_fit_kwargs) + minimizer_kwargs["args"] = ( + hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty + ) + if "reset_free" in minimizer_kwargs: + del minimizer_kwargs["reset_free"] + minimizer_kwargs["method"] = local_fit_kwargs["method"]["value"] + minimizer_kwargs["options"] = local_fit_kwargs["options"]["value"] + optimize_result = optimize.shgo( + func=self._minimizer_callable, + bounds=bounds, + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty), + callback=self._minimizer_callback, + minimizer_kwargs=minimizer_kwargs, + **method_kwargs["options"] + ) + else: + raise ValueError("Unsupported global fit method") + + end_t = time.time() + if self.pprint: + # clear the line + sys.stdout.write('\n\n') + sys.stdout.flush() + + minimizer_time = end_t - start_t + + # Check for minimization failure + if not optimize_result.success: + if self.blindness: + msg = '' + else: + msg = ' ' + str(optimize_result.message) + logging.warn('Optimization failed.' + msg) + # Instead of crashing completely, return a fit result with an infinite + # test statistic value. + metadata = {"success":optimize_result.success, "message":optimize_result.message,} + return HypoFitResult( + metric, + sign * np.inf, + data_dist, + hypo_maker, + minimizer_time=minimizer_time, + minimizer_metadata=metadata, + fit_history=fit_history, + other_metrics=None, + num_distributions_generated=counter.count, + include_detailed_metric_info=False, + ) + + logging.info( + 'Total time to optimize: %8.4f s; # of dists generated: %6d;' + ' avg dist gen time: %10.4f ms', + minimizer_time, counter.count, minimizer_time*1000./counter.count + ) + + # Will not assume that the minimizer left the hypo maker in the + # minimized state, so set the values now (also does conversion of + # values from [0,1] back to physical range) + rescaled_pvals = optimize_result.pop('x') + rescaled_pvals = np.where(flip_x0, 1 - rescaled_pvals, rescaled_pvals) + hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # Get the best-fit metric value + metric_val = sign * optimize_result.pop('fun') + + # Record minimizer metadata (all info besides 'x' and 'fun'; also do + # not record some attributes if performing blinded analysis) + metadata = OrderedDict() + for k in sorted(optimize_result.keys()): + if self.blindness and k in ['jac', 'hess', 'hess_inv']: + continue + if k=='hess_inv': + continue + if k=="message" and isinstance(optimize_result[k], bytes): + # A little fix for deserialization: After serialization and + # deserialization, the string would be decoded anyway and then the + # recovered object would look different. + metadata[k] = optimize_result[k].decode('utf-8') + continue + metadata[k] = optimize_result[k] + + if self.blindness > 1: # only at stricter blindness level + # undo flip + x0 = np.where(flip_x0, 1 - x0, x0) + # Reset to starting value of the fit, rather than nominal values because + # the nominal value might be out of range if this is inside an octant check. + hypo_maker._set_rescaled_free_params(x0) + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # TODO: other metrics + fit_info = HypoFitResult( + metric, + metric_val, + data_dist, + hypo_maker, + minimizer_time=minimizer_time, + minimizer_metadata=metadata, + fit_history=fit_history, + other_metrics=None, + num_distributions_generated=counter.count, + include_detailed_metric_info=True, + ) + + if not self.blindness: + logging.info(f"found best fit: {fit_info.params.free}") + return fit_info + + def _fit_iminuit(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run the Minuit minimizer to modify hypo dist maker's free params + until the data_dist is most likely to have come from this hypothesis. + + This function uses only local optimization and does not attempt to find + a global optimum among several local optima. + + Parameters + ---------- + data_dist : MapSet or List of MapSets + Data distribution(s) + + hypo_maker : Detectors, DistributionMaker or convertible thereto + + metric : string or iterable of strings + + external_priors_penalty : func + User defined prior penalty function + + method_kwargs : dict + Options passed on for Minuit + + local_fit_kwargs : dict + Ignored since no local fit happens inside this fit + + Returns + ------- + fit_info : HypoFitResult + """ + + logging.info("Entering local fit using Minuit") + + if local_fit_kwargs is not None: + logging.warn("Local fit kwargs are ignored by 'fit_minuit'." + "Use 'method_kwargs' to set Minuit options.") + + if method_kwargs is None: + method_kwargs = {} # use all defaults + if not self.blindness: + logging.debug("free parameters:") + logging.debug(hypo_maker.params.free) + + if isinstance(metric, str): + metric = [metric] + sign = 0 + for m in metric: + if m in METRICS_TO_MAXIMIZE and sign != +1: + sign = -1 + elif m in METRICS_TO_MINIMIZE and sign != -1: + sign = +1 + else: + raise ValueError("Defined metrics are not compatible") + # Get starting free parameter values + x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access + + bounds = [(0, 1)]*len(x0) + + counter = Counter() + + fit_history = [] + fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) + + start_t = time.time() + + if self.pprint and not self.blindness: + free_p = hypo_maker.params.free + self._pprint_header(free_p, external_priors_penalty, metric) + + # reset number of iterations before each minimization + self._nit = 0 + # we never flip in minuit, but we still need to set it + flip_x0 = np.zeros(len(x0), dtype=bool) + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty) + + def loss_func(x): + # In rare circumstances, minuit will try setting one of the parameters + # to NaN. Minuit might be able to recover when we return NaN. + if np.any(~np.isfinite(x)): + logging.warn(f"Minuit tried evaluating at invalid parameters: {x}") + return np.nan + return self._minimizer_callable(x, *args) + + m = Minuit(loss_func, x0) + m.limits = bounds + # only initial step size, not very important + if "errors" in method_kwargs.keys(): + m.errors = method_kwargs["errors"] + # Precision with which the likelihood is calculated + if "precision" in method_kwargs.keys(): + m.precision = method_kwargs["precision"] + else: + # Documentation states that this value should be set to "some multiple of + # the smallest relative change of a parameter that still changes the + # function". + m.precision = 5 * FTYPE_PREC + if "tol" in method_kwargs.keys(): + m.tol = method_kwargs["tol"] + simplex = False + if "run_simplex" in method_kwargs.keys(): + simplex = method_kwargs["run_simplex"] + migrad = True + if "run_migrad" in method_kwargs.keys(): + migrad = method_kwargs["run_migrad"] + if not (migrad or simplex): + raise ValueError("Must select at least one of MIGRAD or SIMPLEX to run") + # Minuit needs to know if the loss function is interpretable as a likelihood + # or as a least-squares loss. It influences the stopping condition where the + # estimated uncertainty on parameters is small compared to their covariance. + if metric[0] in LLH_METRICS: + m.errordef = Minuit.LIKELIHOOD + elif metric[0] in CHI2_METRICS: + m.errordef = Minuit.LEAST_SQUARES + else: + raise ValueError("Metric neither LLH or CHI2, unknown error definition.") + # Minuit can sometimes try to evaluate at NaN parameters if the liklihood + # is badly behaved. We don't want to completely crash in that case. + m.throw_nan = False + # actually run the minimization! + if simplex: + logging.info("Running SIMPLEX") + m.simplex() + + if migrad: + logging.info("Running MIGRAD") + m.migrad() + + end_t = time.time() + if self.pprint: + # clear the line + sys.stdout.write('\n\n') + sys.stdout.flush() + + minimizer_time = end_t - start_t + + logging.info( + 'Total time to optimize: %8.4f s; # of dists generated: %6d;' + ' avg dist gen time: %10.4f ms', + minimizer_time, counter.count, minimizer_time*1000./counter.count + ) + + if not m.accurate: + logging.warn("Covariance matrix invalid.") + if not m.valid: + logging.warn("Minimum not valid according to Minuit's criteria.") + + # Will not assume that the minimizer left the hypo maker in the + # minimized state, so set the values now (also does conversion of + # values from [0,1] back to physical range) + rescaled_pvals = np.array(m.values) + hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # Get the best-fit metric value + metric_val = sign * m.fval + + # Record minimizer metadata (all info besides 'x' and 'fun'; also do + # not record some attributes if performing blinded analysis) + metadata = OrderedDict() + # param names are relevant because they allow one to reconstruct which + # parameter corresponds to which entry in the covariance matrix + metadata["param_names"] = hypo_maker.params.free.names + # The criteria to deem a minimum "valid" are too strict for our purposes, so + # we accept the value even if m.valid is False. + metadata["success"] = np.isfinite(metric_val) + metadata["valid"] = m.valid + metadata["accurate"] = m.accurate + metadata["edm"] = m.fmin.edm + metadata["edm_goal"] = m.fmin.edm_goal + metadata["has_reached_call_limit"] = m.fmin.has_reached_call_limit + metadata["has_parameters_at_limit"] = m.fmin.has_parameters_at_limit + metadata["nit"] = m.nfcn + metadata["message"] = "Minuit finished." + + if not self.blindness: + if self.blindness < 2: + metadata["rescaled_values"] = np.array(m.values) + else: + metadata["rescaled_values"] = np.full(len(m.values), np.nan) + if m.accurate: + metadata["hess_inv"] = np.array(m.covariance) + else: + metadata["hess_inv"] = np.full((len(x0), len(x0)), np.nan) + + if self.blindness > 1: # only at stricter blindness level + # undo flip + x0 = np.where(flip_x0, 1 - x0, x0) + # Reset to starting value of the fit, rather than nominal values because + # the nominal value might be out of range if this is inside an octant check. + hypo_maker._set_rescaled_free_params(x0) + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # TODO: other metrics + fit_info = HypoFitResult( + metric, + metric_val, + data_dist, + hypo_maker, + minimizer_time=minimizer_time, + minimizer_metadata=metadata, + fit_history=fit_history, + other_metrics=None, + num_distributions_generated=counter.count, + include_detailed_metric_info=True, + ) + + if not self.blindness: + logging.info(f"found best fit: {fit_info.params.free}") + return fit_info + + def _fit_nlopt(self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs): + """Run any of the (gradient-free) NLOPT optimizers to modify hypo dist maker's + free params until the data_dist is most likely to have come from this + hypothesis. + + Parameters + ---------- + data_dist : MapSet or List of MapSets + Data distribution(s) + + hypo_maker : Detectors, DistributionMaker or convertible thereto + + metric : string or iterable of strings + + external_priors_penalty : func + User defined prior penalty function + + method_kwargs : dict + Options passed on for NLOPT + + local_fit_kwargs : dict + Ignored since no local fit happens inside this fit + + Returns + ------- + fit_info : HypoFitResult + """ + + logging.info("Entering fit using NLOPT") + + if local_fit_kwargs is not None: + logging.warn("`local_fit_kwargs` are ignored by 'fit_nlopt'." + "Use `method_kwargs` to set nlopt options and use " + "`method_kwargs['local_optimizer']` to define the settings of " + "a subsidiary NLOPT optimizer.") + + if method_kwargs is None: + raise ValueError("Need to specify at least the algorithm to run.") + if not self.blindness: + logging.debug("free parameters:") + logging.debug(hypo_maker.params.free) + + if isinstance(metric, str): + metric = [metric] + sign = 0 + for m in metric: + if m in METRICS_TO_MAXIMIZE and sign != +1: + sign = -1 + elif m in METRICS_TO_MINIMIZE and sign != -1: + sign = +1 + else: + raise ValueError("Defined metrics are not compatible") + # Get starting free parameter values + x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access + + counter = Counter() + + fit_history = [] + fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) + + start_t = time.time() + + if self.pprint and not self.blindness: + free_p = hypo_maker.params.free + self._pprint_header(free_p, external_priors_penalty, metric) + + # reset number of iterations before each minimization + self._nit = 0 + # we never flip in nlopt, but we still need to set it + flip_x0 = np.zeros(len(x0), dtype=bool) + args=(hypo_maker, data_dist, metric, counter, fit_history, + flip_x0, external_priors_penalty) + + def loss_func(x, grad): + if np.any(~np.isfinite(x)): + logging.warn(f"NLOPT tried evaluating at invalid parameters: {x}") + return np.nan + if grad.size > 0: + raise RuntimeError("Gradients cannot be calculated, use a gradient-free" + " optimization routine instead.") + return self._minimizer_callable(x, *args) + + opt = self._define_nlopt_opt(method_kwargs, loss_func, hypo_maker) + + # For some stochastic optimization methods such as CRS2, a seed parameter may + # be used to make the optimization deterministic. Otherwise, nlopt will use a + # random seed based on the current system time. + if "seed" in method_kwargs: + nlopt.srand(method_kwargs["seed"]) + + logging.info(f"Starting optimization using {opt.get_algorithm_name()}") + + xopt = opt.optimize(x0) + + end_t = time.time() + if self.pprint: + # clear the line + sys.stdout.write('\n\n') + sys.stdout.flush() + + minimizer_time = end_t - start_t + + logging.info( + 'Total time to optimize: %8.4f s; # of dists generated: %6d;' + ' avg dist gen time: %10.4f ms', + minimizer_time, counter.count, minimizer_time*1000./counter.count + ) + + # Will not assume that the minimizer left the hypo maker in the + # minimized state, so set the values now (also does conversion of + # values from [0,1] back to physical range) + rescaled_pvals = xopt + hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # Get the best-fit metric value + metric_val = sign * opt.last_optimum_value() + + # Record minimizer metadata (all info besides 'x' and 'fun'; also do + # not record some attributes if performing blinded analysis) + metadata = OrderedDict() + nlopt_result = opt.last_optimize_result() + # Positive return values are successes, negative return values are failures. + # see https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#return-values + metadata["success"] = nlopt_result > 0 + metadata["nlopt_result"] = nlopt_result + metadata["nit"] = opt.get_numevals() + metadata["message"] = { + 1: "NLOPT_SUCCESS", + 2: "NLOPT_STOPVAL_REACHED", + 3: "NLOPT_FTOL_REACHED", + 4: "NLOPT_XTOL_REACHED", + 5: "NLOPT_MAXEVAL_REACHED", + 6: "NLOPT_MAXTIME_REACHED", + -1: "NLOPT_FAILURE", + -2: "NLOPT_INVALID_ARGS", + -3: "NLOPT_OUT_OF_MEMORY", + -4: "NLOPT_ROUNDOFF_LIMITED", + -5: "NLOPT_FORCED_STOP" + }[nlopt_result] + + if self.blindness < 2: + metadata["rescaled_values"] = rescaled_pvals + else: + metadata["rescaled_values"] = np.full(len(m.values), np.nan) + # we don't get a Hessian from nlopt + metadata["hess_inv"] = np.full((len(x0), len(x0)), np.nan) + + if self.blindness > 1: # only at stricter blindness level + hypo_maker._set_rescaled_free_params(x0) + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # TODO: other metrics + fit_info = HypoFitResult( + metric, + metric_val, + data_dist, + hypo_maker, + minimizer_time=minimizer_time, + minimizer_metadata=metadata, + fit_history=fit_history, + other_metrics=None, + num_distributions_generated=counter.count, + include_detailed_metric_info=True, + ) + + if not self.blindness: + logging.info(f"found best fit: {fit_info.params.free}") + return fit_info + + def _define_nlopt_opt(self, method_kwargs, loss_func, hypo_maker): + """ + Helper function that reads the options from a dictionary and configures + an nlopt.opt object with all the options applied. Some global search algorithms + also need a local/subsidiary optimizer. Its options can be specified in + `method_kwargs['local_optimizer']` as a dictionary of the same form that is + passed to this function again to build the nlopt.opt object. + """ + + if not "algorithm" in method_kwargs.keys(): + raise ValueError("Need to specify the algorithm to use.") + alg_name_splits = method_kwargs["algorithm"].split("_") + if not alg_name_splits[0] == "NLOPT": + raise ValueError("Algorithm name should be specified as `NLOPT_{G,L}N_XXX`") + if len(alg_name_splits[1]) > 1 and alg_name_splits[1][1] == "D": + raise ValueError("Only gradient-free algorithms (NLOPT_GN or NLOPT_LN) are " + "supported.") + + algorithm = getattr(nlopt, "_".join(alg_name_splits[1:])) + x0 = np.array(hypo_maker.params.free._rescaled_values) + opt = nlopt.opt(algorithm, len(x0)) + opt.set_min_objective(loss_func) + + if "ftol_abs" in method_kwargs.keys(): + opt.set_ftol_abs(method_kwargs["ftol_abs"]) + if "ftol_rel" in method_kwargs.keys(): + opt.set_ftol_rel(method_kwargs["ftol_rel"]) + if "xtol_abs" in method_kwargs.keys(): + opt.set_xtol_abs(method_kwargs["xtol_abs"]) + if "xtol_rel" in method_kwargs.keys(): + opt.set_xtol_rel(method_kwargs["xtol_rel"]) + if "stopval" in method_kwargs.keys(): + opt.set_stopval(method_kwargs["stopval"]) + if "maxeval" in method_kwargs.keys(): + opt.set_maxeval(method_kwargs["maxeval"]) + # Maximum runtime in seconds + if "maxtime" in method_kwargs.keys(): + opt.set_maxtime(method_kwargs["maxtime"]) + # set algorithm-specific parameters (see + # https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#algorithm-specific-parameters) + if "algorithm_params" in method_kwargs.keys(): + for k, v in method_kwargs["algorithm_params"].items(): + opt.set_param(k, v) + if "ineq_constraints" in method_kwargs.keys(): + logging.warn( + "Using eval() is potentially dangerous as it can execute " + "arbitrary code! Do not store your config file in a place" + "where others have writing access!" + ) + constr_list = method_kwargs["ineq_constraints"] + if isinstance(constr_list, str): + constr_list = [constr_list] + for constr in constr_list: + # the inequality function is specified as a function that takes a + # ParamSet as its input + logging.info(f"adding constraint (must stay positive): {constr}") + ineq_func_params = eval(constr) + assert callable(ineq_func_params), "evaluated object is not a valid function" + def ineq_func(x, grad): + if grad.size > 0: + raise RuntimeError("gradients not supported") + hypo_maker._set_rescaled_free_params(x) + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + # In NLOPT, the inequality function must stay negative, while in + # scipy, the inequality function must stay positive. We keep with + # the scipy convention by flipping the sign. + return -ineq_func_params(hypo_maker.params) + opt.add_inequality_constraint(ineq_func) + + # Population size for stochastic search algorithms, see + # https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#stochastic-population + if "population" in method_kwargs.keys(): + opt.set_population(method_kwargs["population"]) + if "initial_step" in method_kwargs.keys(): + opt.set_initial_step(method_kwargs["initial_step"]) + + opt.set_lower_bounds(0.) + opt.set_upper_bounds(1.) + + if "local_optimizer" in method_kwargs.keys(): + local_opt = self._define_nlopt_opt(method_kwargs["local_optimizer"], + loss_func, hypo_maker) + opt.set_local_optimizer(local_opt) + + return opt + + def _pprint_header(self, free_p, external_priors_penalty, metric): + # Display any units on top + r = re.compile(r'(^[+0-9.eE-]* )|(^[+0-9.eE-]*$)') + hdr = ' '*(6+1+10+1+12+3) + unt = [] + for p in free_p: + u = r.sub('', format(p.value, '~')).replace(' ', '')[0:10] + if u: + u = '(' + u + ')' + unt.append(u.center(12)) + hdr += ' '.join(unt) + hdr += '\n' + + # Header names + hdr += ('iter'.center(6) + ' ' + 'funcalls'.center(10) + ' ' + + metric[0][0:12].center(12) + ' | ') + hdr += ' '.join([p.name[0:12].center(12) for p in free_p]) + if external_priors_penalty is not None: + hdr += " | penalty " + hdr += '\n' + + # Underscores + hdr += ' '.join(['-'*6, '-'*10, '-'*12, '+'] + ['-'*12]*len(free_p)) + if external_priors_penalty is not None: + hdr += " + -----------" + hdr += '\n' + + sys.stdout.write(hdr) + + def _minimizer_callable(self, scaled_param_vals, hypo_maker, data_dist, + metric, counter, fit_history, flip_x0, + external_priors_penalty=None): + """Simple callback for use by scipy.optimize minimizers. + + This should *not* in general be called by users, as `scaled_param_vals` + are stripped of their units and scaled to the range [0, 1], and hence + some validation of inputs is bypassed by this method. + + Parameters + ---------- + scaled_param_vals : sequence of floats + If called from a scipy.optimize minimizer, this sequence is + provieded by the minimizer itself. These values are all expected to + be in the range [0, 1] and be simple floats (no units or + uncertainties attached, etc.). Rescaling the parameter values to + their original (physical) ranges (including units) is handled + within this method. + + hypo_maker : Detectors or DistributionMaker + Creates the per-bin expectation values per map + based on its param values. Free params in the + `hypo_maker` are modified by the minimizer to achieve a "best" fit. + + data_dist : Sequence of MapSets or MapSet + Data distribution to be fit. Can be an actual-, Asimov-, or + pseudo-data distribution (where the latter two are derived from + simulation and so aren't technically "data"). + + metric : string or iterable of strings + Metric by which to evaluate the fit. See Map + + counter : Counter + Mutable object to keep track--outside this method--of the number of + times this method is called. + + flip_x0 : ndarray of type bool + Indicates which indices of x0 should be flipped around 0.5. + + external_priors_penalty : func + User defined prior penalty function, which takes `hypo_maker` and + `metric` as arguments and returns numerical value of penalty to + the metric value. It is expected sign of the penalty is correctly + specified inside the `external_priors_penalty` (e.g. negative for + llh or positive for chi2). + + """ + # Want to *maximize* e.g. log-likelihood but we're using a minimizer, + # so flip sign of metric in those cases. + if isinstance(metric, str): + metric = [metric] + sign = 0 + for m in metric: + if m in METRICS_TO_MAXIMIZE and sign != +1: + sign = -1 + elif m in METRICS_TO_MINIMIZE and sign != -1: + sign = +1 + else: + raise ValueError('Defined metrics are not compatible') + + scaled_param_vals = np.where(flip_x0, 1 - scaled_param_vals, scaled_param_vals) + # Set param values from the scaled versions the minimizer works with + hypo_maker._set_rescaled_free_params(scaled_param_vals) # pylint: disable=protected-access + if hypo_maker.__class__.__name__ == "Detectors": + update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors + + # Get the map set + try: + if metric[0] == 'generalized_poisson_llh': + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=False, output_mode='binned', force_standard_output=False) + hypo_asimov_dist = merge_mapsets_together(mapset_list=hypo_asimov_dist) + data_dist = data_dist.maps[0] # Extract the map from the MapSet + metric_kwargs = {'empty_bins':hypo_maker.empty_bin_indices} + else: + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) + if isinstance(hypo_asimov_dist, OrderedDict): + hypo_asimov_dist = hypo_asimov_dist['weights'] + metric_kwargs = {} + + except Exception as e: + if self.blindness: + logging.error('Minimizer failed') + else: + logging.error( + 'Failed to generate distribution with free' + ' params %s', hypo_maker.params.free + ) + logging.error(str(e)) + raise + + # + # Assess the fit: whether the data came from the hypo_asimov_dist + # + try: + if hypo_maker.__class__.__name__ == "Detectors": + metric_val = 0 + for i in range(len(hypo_maker.distribution_makers)): + data = data_dist[i].metric_total(expected_values=hypo_asimov_dist[i], + metric=metric[i], metric_kwargs=metric_kwargs) + metric_val += data + priors = hypo_maker.params.priors_penalty(metric=metric[0]) # uses just the "first" metric for prior + metric_val += priors + else: # DistributionMaker object + if metric[0] == 'weighted_chi2': + actual_values = data_dist.hist['total'] + expected_values = hypo_asimov_dist.hist['total'] + d = {'output_binning': hypo_maker.pipelines[0].output_binning, + 'output_key': 'bin_unc2'} + bin_unc2 = hypo_maker.get_outputs(return_sum=True, **d).hist['total'] + metric_val = ( + np.sum(weighted_chi2(actual_values, expected_values, bin_unc2)) + + hypo_maker.params.priors_penalty(metric=metric[0]) + ) + else: + metric_val = ( + data_dist.metric_total(expected_values=hypo_asimov_dist, + metric=metric[0], metric_kwargs=metric_kwargs) + + hypo_maker.params.priors_penalty(metric=metric[0]) + ) + except Exception as e: + if self.blindness: + logging.error('Minimizer failed') + else : + logging.error( + 'Failed when computing metric with free params %s', + hypo_maker.params.free + ) + logging.error(str(e)) + raise + + penalty = 0 + if external_priors_penalty is not None: + penalty = external_priors_penalty(hypo_maker=hypo_maker,metric=metric) + + # Report status of metric & params (except if blinded) + if self.blindness: + msg = ('minimizer iteration: #%6d | function call: #%6d' + %(self._nit, counter.count)) + else: + #msg = '%s=%.6e | %s' %(metric, metric_val, hypo_maker.params.free) + msg = '%s %s %s | ' %(('%d'%self._nit).center(6), + ('%d'%counter.count).center(10), + format(metric_val, '0.5e').rjust(12)) + msg += ' '.join([('%0.5e'%p.value.m).rjust(12) + for p in hypo_maker.params.free]) + if external_priors_penalty is not None: + msg += f" | {penalty:11.4e}" + + if self.pprint: + sys.stdout.write(msg + '\n') + sys.stdout.flush() + else: + logging.trace(msg) + + counter += 1 + + if not self.blindness: + fit_history.append( + [metric_val] + [v.value.m for v in hypo_maker.params.free] + ) + + if external_priors_penalty is not None: + metric_val += external_priors_penalty(hypo_maker=hypo_maker,metric=metric) + + return sign*metric_val + + def _minimizer_callback(self, xk, **unused_kwargs): # pylint: disable=unused-argument + """Passed as `callback` parameter to `optimize.minimize`, and is called + after each iteration. Keeps track of number of iterations. + + Parameters + ---------- + xk : list + Parameter vector + + """ + self._nit += 1
+ + +
+[docs] +class Analysis(BasicAnalysis): + """Analysis class for "canonical" IceCube/DeepCore/PINGU analyses. + + * "Data" distribution creation (via passed `data_maker` object) + * "Expected" distribution creation (via passed `distribution_maker` object) + * Minimizer Interface (via method `_minimizer_callable`) + Interfaces to a minimizer for modifying the free parameters of the + `distribution_maker` to fit its output (as closely as possible) to the + data distribution is provided. See [minimizer_settings] for + + """ + + def __init__(self): + self._nit = 0 + self.pprint = True + self.blindness = False + +
+[docs] + def fit_hypo(self, data_dist, hypo_maker, metric, minimizer_settings, + hypo_param_selections=None, reset_free=True, + check_octant=True, fit_octants_separately=None, + check_ordering=False, other_metrics=None, + blind=False, pprint=True, external_priors_penalty=None): + """Fitter "outer" loop: If `check_octant` is True, run + `fit_hypo_inner` starting in each octant of theta23 (assuming that + is a param in the `hypo_maker`). Otherwise, just run the inner + method once. + + Note that prior to running the fit, the `hypo_maker` has + `hypo_param_selections` applied and its free parameters are reset to + their nominal values. + + Parameters + ---------- + data_dist : MapSet or List of MapSets + Data distribution(s). These are what the hypothesis is tasked to + best describe during the optimization process. + + hypo_maker : Detectors, DistributionMaker or instantiable thereto + Generates the expectation distribution under a particular + hypothesis. This typically has (but is not required to have) some + free parameters which can be modified by the minimizer to optimize + the `metric`. + + hypo_param_selections : None, string, or sequence of strings + A pipeline configuration can have param selectors that allow + switching a parameter among two or more values by specifying the + corresponding param selector(s) here. This also allows for a single + instance of a DistributionMaker to generate distributions from + different hypotheses. + + metric : string or iterable of strings + The metric to use for optimization. Valid metrics are found in + `VALID_METRICS`. Note that the optimized hypothesis also has this + metric evaluated and reported for each of its output maps. + + minimizer_settings : string or dict + + check_octant : bool + If theta23 is a parameter to be used in the optimization (i.e., + free), the fit will be re-run in the second (first) octant if + theta23 is initialized in the first (second) octant. + + reset_free : bool + Resets all free parameters to values defined in stages when starting a fit + + fit_octants_separately : bool + If 'check_octant' is set so that the two octants of theta23 are + individually checked, this flag enforces that each theta23 can + only vary within the octant currently being checked (e.g. the + minimizer cannot swap octants). Deprecated. + + check_ordering : bool + If the ordering is not in the hypotheses already being tested, the + fit will be run in both orderings. + + other_metrics : None, string, or list of strings + After finding the best fit, these other metrics will be evaluated + for each output that contributes to the overall fit. All strings + must be valid metrics, as per `VALID_METRICS`, or the + special string 'all' can be specified to evaluate all + VALID_METRICS.. + + pprint : bool + Whether to show live-update of minimizer progress. + + blind : bool or int + Whether to carry out a blind analysis. If True or 1, this hides actual + parameter values from display and disallows these (as well as Jacobian, + Hessian, etc.) from ending up in logfiles. If given an integer > 1, the + fitted parameters are also prevented from being stored in fit info + dictionaries. + + external_priors_penalty : func + User defined prior penalty function. Adds an extra penalty + to the metric that is minimized, depending on the input function. + + + Returns + ------- + best_fit_info : HypoFitResult (see fit_hypo_inner method for details of + `fit_info` dict) + alternate_fits : list of `fit_info` from other fits run + + """ + + if fit_octants_separately is not None: + warnings.warn("fit_octants_separately is deprecated and will be ignored, " + "octants are always fit separately now.", DeprecationWarning) + + self.blindness = blind + self.pprint = pprint + + if hypo_param_selections is None: + hypo_param_selections = hypo_maker.param_selections + + if isinstance(metric, str): + metric = [metric] + # Check number of used metrics + if hypo_maker.__class__.__name__ == "Detectors": + if len(metric) == 1: # One metric for all detectors + metric = list(metric) * len(hypo_maker.distribution_makers) + elif len(metric) != len(hypo_maker.distribution_makers): + raise IndexError('Number of defined metrics does not match with number of detectors.') + else: # DistributionMaker object + assert len(metric) == 1 + + if check_ordering: + if 'nh' in hypo_param_selections or 'ih' in hypo_param_selections: + raise ValueError('One of the orderings has already been ' + 'specified as one of the hypotheses but the ' + 'fit has been requested to check both. These ' + 'are incompatible.') + + logging.info('Performing fits in both orderings.') + extra_param_selections = ['nh', 'ih'] + else: + extra_param_selections = [None] + + alternate_fits = [] + # TODO: Pass alternative fits up the chain + for extra_param_selection in extra_param_selections: + if extra_param_selection is not None: + full_param_selections = hypo_param_selections + full_param_selections.append(extra_param_selection) + else: + full_param_selections = hypo_param_selections + # Select the version of the parameters used for this hypothesis + hypo_maker.select_params(full_param_selections) + + # Reset free parameters to nominal values + if reset_free: + hypo_maker.reset_free() + if check_octant: + method = "octants" + method_kwargs = { + "angle": "theta23", + "inflection_point": 45 * ureg.deg, + "reset_free": reset_free, + } + local_fit_kwargs = { + "method": "scipy", + "method_kwargs": minimizer_settings, + "local_fit_kwargs": None, + } + else: + method = "scipy" + method_kwargs = minimizer_settings + local_fit_kwargs = None + + # Perform the fit + best_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + method, method_kwargs, local_fit_kwargs + ) + + return best_fit_info, alternate_fits
+ + +
+[docs] + def nofit_hypo(self, data_dist, hypo_maker, hypo_param_selections, + hypo_asimov_dist, metric, other_metrics=None, blind=False, external_priors_penalty=None): + """Fitting a hypo to a distribution generated by its own + distribution maker is unnecessary. In such a case, use this method + (instead of `fit_hypo`) to still retrieve meaningful information for + e.g. the match metrics. + + Parameters + ---------- + data_dist : MapSet or List of MapSets + hypo_maker : Detectors or DistributionMaker + hypo_param_selections : None, string, or sequence of strings + hypo_asimov_dist : MapSet or List of MapSets + metric : string or iterable of strings + other_metrics : None, string, or sequence of strings + blind : bool + external_priors_penalty : func + + + """ + fit_info = HypoFitResult() + + # NOTE: Select params but *do not* reset to nominal values to record + # the current (presumably already optimal) param values + hypo_maker.select_params(hypo_param_selections) + + if isinstance(metric, str): + metric = [metric] + # Check number of used metrics + if hypo_maker.__class__.__name__ == "Detectors": + if len(metric) == 1: # One metric for all detectors + metric = list(metric) * len(hypo_maker.distribution_makers) + elif len(metric) != len(hypo_maker.distribution_makers): + raise IndexError('Number of defined metrics does not match with number of detectors.') + else: # DistributionMaker object + assert len(metric) == 1 + fit_info.metric = metric + + # Assess the fit: whether the data came from the hypo_asimov_dist + try: + if hypo_maker.__class__.__name__ == "Detectors": + metric_val = 0 + for i in range(len(hypo_maker.distribution_makers)): + data = data_dist[i].metric_total(expected_values=hypo_asimov_dist[i], metric=metric[i]) + metric_val += data + priors = hypo_maker.params.priors_penalty(metric=metric[0]) # uses just the "first" metric for prior + metric_val += priors + else: # DistributionMaker object + + if 'generalized_poisson_llh' == metric[0]: + + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=False, output_mode='binned', force_standard_output=False) + hypo_asimov_dist = merge_mapsets_together(mapset_list=hypo_asimov_dist) + data_dist = data_dist.maps[0] # Extract the map from the MapSet + metric_kwargs = {'empty_bins':hypo_maker.empty_bin_indices} + else: + hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) + if isinstance(hypo_asimov_dist, HypoFitResult): + hypo_asimov_dist = hypo_asimov_dist['weights'] + metric_kwargs = {} + + metric_val = ( + data_dist.metric_total(expected_values=hypo_asimov_dist, + metric=metric[0], metric_kwargs=metric_kwargs) + + hypo_maker.params.priors_penalty(metric=metric[0]) + ) + if external_priors_penalty is not None: + metric_val += external_priors_penalty(hypo_maker=hypo_maker,metric=metric[0]) + + except Exception as e: + if self.blindness: + logging.error('Minimizer failed') + else : + logging.error( + 'Failed when computing metric with free params %s', + hypo_maker.params.free + ) + logging.error(str(e)) + raise + + fit_info.metric_val = metric_val + + if self.blindness: + # Okay, if blind analysis is being performed, reset the values so + # the user can't find them in the object + hypo_maker.reset_free() + fit_info.metric_val = ParamSet() + else: + fit_info.metric_val = deepcopy(hypo_maker.params) + if hypo_maker.__class__.__name__ == "Detectors": + fit_info.detailed_metric_info = [fit_info.get_detailed_metric_info( + data_dist=data_dist[i], hypo_asimov_dist=hypo_asimov_dist[i], + params=hypo_maker.distribution_makers[i].params, metric=metric[i], + other_metrics=other_metrics, detector_name=hypo_maker.det_names[i] + ) for i in range(len(data_dist))] + else: # DistributionMaker object + + if 'generalized_poisson_llh' == metric[0]: + generalized_poisson_dist = hypo_maker.get_outputs(return_sum=False, force_standard_output=False) + generalized_poisson_dist = merge_mapsets_together(mapset_list=generalized_poisson_dist) + else: + generalized_poisson_dist = None + + fit_info.detailed_metric_info = fit_info.get_detailed_metric_info( + data_dist=data_dist, hypo_asimov_dist=hypo_asimov_dist, generalized_poisson_hypo=generalized_poisson_dist, + params=hypo_maker.params, metric=metric[0], other_metrics=other_metrics, + detector_name=hypo_maker.detector_name + ) + + fit_info.minimizer_time = 0 * ureg.sec + fit_info.num_distributions_generated = 0 + fit_info.minimizer_metadata = OrderedDict() + fit_info.hypo_asimov_dist = hypo_asimov_dist + return fit_info
+ + + + + # TODO: move the complexity of defining a scan into a class with various + # factory methods, and just pass that class to the scan method; we will + # surely want to use scanning over parameters in more general ways, too: + # * set (some) fixed params, then run (minimizer, scan, etc.) on free + # params + # * set (some free or fixed) params, then check metric + # where the setting of the params is done for some number of values. +
+[docs] + def scan(self, data_dist, hypo_maker, metric, hypo_param_selections=None, + param_names=None, steps=None, values=None, only_points=None, + outer=True, profile=True, minimizer_settings=None, outfile=None, + debug_mode=1, **kwargs): + """Set hypo maker parameters named by `param_names` according to + either values specified by `values` or number of steps specified by + `steps`, and return the `metric` indicating how well the data + distribution is described by each distribution. + + Some flexibility in how the user can specify `values` is allowed, based + upon the shapes of `param_names` and `values` and how the `outer` flag + is set. + + Either `values` or `steps` must be specified, but not both. + + Parameters + ---------- + data_dist : Sequence of MapSets or MapSet + Data distribution(s). These are what the hypothesis is tasked to + best describe during the optimization/comparison process. + + hypo_maker : Detectors, DistributionMaker or instantiable thereto + Generates the expectation distribution under a particular + hypothesis. This typically has (but is not required to have) some + free parameters which will be modified by the minimizer to optimize + the `metric` in case `profile` is set to True. + + hypo_param_selections : None, string, or sequence of strings + A pipeline configuration can have param selectors that allow + switching a parameter among two or more values by specifying the + corresponding param selector(s) here. This also allows for a single + instance of a DistributionMaker to generate distributions from + different hypotheses. + + metric : string or iterable of strings + The metric to use for optimization/comparison. Note that the + optimized hypothesis also has this metric evaluated and reported for + each of its output maps. Confer `pisa.core.map` for valid metrics. + + param_names : None, string, or sequence of strings + If None, assume all parameters are to be scanned; otherwise, + specifies only the name or names of parameters to be scanned. + + steps : None, integer, or sequence of integers + Number of steps to take within the allowed range of the parameter + (or parameters). Value(s) specified for `steps` must be >= 2. Note + that the endpoints of the range are always included, and numbers of + steps higher than 2 fill in between the endpoints. + + * If integer... + Take this many steps for each specified parameter. + * If sequence of integers... + Take the coresponding number of steps within the allowed range + for each specified parameter. + + values : None, scalar, sequence of scalars, or sequence-of-sequences + * If scalar... + Set this value for the (one) param name in `param_names`. + * If sequence of scalars... + * if len(param_names) is 1, set its value to each number in the + sequence. + * otherwise, set each param in param_names to the corresponding + value in `values`. There must be the same number of param names + as values. + * If sequence of (sequences or iterables)... + * Each param name corresponds to one of the inner sequences, in + the order that the param names are specified. + * If `outer` is False, all inner sequences must have the same + length, and there will be one distribution generated for + each set of values across the inner sequences. In other words, + there will be a total of len(inner sequence) distribution generated. + * If `outer` is True, the lengths of inner sequences needn't be + the same. This takes the outer product of the passed sequences + to arrive at the permutations of the parameter values that will + be used to produce the distributions (essentially nested + loops over each parameter). E.g., if two params are scanned, + for each value of the first param's inner sequence, a + distribution is produced for every value of the second param's + inner sequence. In total, there will be + ``len(inner seq0) * len(inner seq1) * ...`` + distributions produced. + + only_points : None, integer, or even-length sequence of integers + Only select subset of points to be analysed by specifying their + range of positions within the whole set (0-indexed, incremental). + For the lazy amongst us... + + outer : bool + If set to True and a sequence of sequences is passed for `values`, + the points scanned are the *outer product* of the inner sequences. + See `values` for a more detailed explanation. + + profile : bool + If set to True, minimizes specified metric over all free parameters + at each scanned point. Otherwise keeps them at their nominal values + and only performs grid scan of the parameters specified in + `param_names`. + + minimizer_settings : dict + Dictionary containing the settings for minimization, which are + only needed if `profile` is set to True. Hint: it has proven useful + to sprinkle with a healthy dose of scepticism. + + outfile : string + Outfile to store results to. Will be updated at each scan step to + write out intermediate results to prevent loss of data in case + the apocalypse strikes after all. + + debug_mode : int, either one of [0, 1, 2] + If set to 2, will add a wealth of minimisation history and physics + information to the output file. Otherwise, the output will contain + the essentials to perform an analysis (0), or will hopefully be + detailed enough for some simple debugging (1). Any other value for + `debug_mode` will be set to 2. + + """ + + if debug_mode not in (0, 1, 2): + debug_mode = 2 + + # Either `steps` or `values` must be specified, but not both (xor) + assert (steps is None) != (values is None) + + if isinstance(param_names, str): + param_names = [param_names] + + nparams = len(param_names) + hypo_maker.select_params(hypo_param_selections) + + if values is not None: + if np.isscalar(values): + values = np.array([values]) + assert nparams == 1 + for i, val in enumerate(values): + if not np.isscalar(val): + # no scalar here, need a corresponding parameter name + assert nparams >= i+1 + else: + # a scalar, can either have only one parameter or at least + # this many + assert nparams == 1 or nparams >= i+1 + if nparams > 1: + values[i] = np.array([val]) + + else: + ranges = [hypo_maker.params[pname].range for pname in param_names] + if np.issubdtype(type(steps), int): + assert steps >= 2 + values = [np.linspace(r[0], r[1], steps)*r[0].units + for r in ranges] + else: + assert len(steps) == nparams + assert np.all(np.array(steps) >= 2) + values = [np.linspace(r[0], r[1], steps[i])*r[0].units + for i, r in enumerate(ranges)] + + if nparams > 1: + steplist = [[(pname, val) for val in values[i]] + for (i, pname) in enumerate(param_names)] + else: + steplist = [[(param_names[0], val) for val in values[0]]] + + #Number of steps must be > 0 + assert len(steplist) > 0 + + points_acc = [] + if only_points is not None: + assert len(only_points) == 1 or len(only_points) % 2 == 0 + if len(only_points) == 1: + points_acc = only_points + for i in range(0, len(only_points)-1, 2): + points_acc.extend( + list(range(only_points[i], 1 + only_points[i + 1])) + ) + + # Instead of introducing another multitude of tests above, check here + # whether the lists of steps all have the same length in case `outer` + # is set to False + if nparams > 1 and not outer: + assert np.all(len(steps) == len(steplist[0]) for steps in steplist) + loopfunc = zip + else: + # With single parameter, can use either `zip` or `product` + loopfunc = product + + params = hypo_maker.params + + # Fix the parameters to be scanned if `profile` is set to True + params.fix(param_names) + + results = {'steps': {}, 'results': []} + results['steps'] = {pname: [] for pname in param_names} + for i, pos in enumerate(loopfunc(*steplist)): + if points_acc and i not in points_acc: + continue + + msg = '' + for (pname, val) in pos: + params[pname].value = val + results['steps'][pname].append(val) + if isinstance(val, float): + msg += '%s = %.2f '%(pname, val) + elif isinstance(val, ureg.Quantity): + msg += '%s = %.2f '%(pname, val.magnitude) + else: + raise TypeError("val is of type %s which I don't know " + "how to deal with in the output " + "messages."% type(val)) + logging.info('Working on point ' + msg) + hypo_maker.update_params(params) + + # TODO: consistent treatment of hypo_param_selections and scanning + if not profile or not hypo_maker.params.free: + logging.info('Not optimizing since `profile` set to False or' + ' no free parameters found...') + best_fit = self.nofit_hypo( + data_dist=data_dist, + hypo_maker=hypo_maker, + hypo_param_selections=hypo_param_selections, + hypo_asimov_dist=hypo_maker.get_outputs(return_sum=True), + metric=metric, + **{k: v for k,v in kwargs.items() if k not in ["pprint","reset_free","check_octant"]} + ) + else: + logging.info('Starting optimization since `profile` requested.') + best_fit, _ = self.fit_hypo( + data_dist=data_dist, + hypo_maker=hypo_maker, + hypo_param_selections=hypo_param_selections, + metric=metric, + minimizer_settings=minimizer_settings, + **kwargs + ) + # TODO: serialisation! + for k in best_fit.minimizer_metadata: + if k in ['hess', 'hess_inv']: + logging.debug("deleting %s", k) + del best_fit.minimizer_metadata[k] + + best_fit.metric_val = deepcopy( + best_fit.metric_val.serializable_state + ) + if isinstance(best_fit.hypo_asimov_dist, Sequence): + best_fit.hypo_asimov_dist = [deepcopy( + best_fit.hypo_asimov_dist[i].serializable_state + ) for i in range(len(best_fit.hypo_asimov_dist))] + else: + best_fit.hypo_asimov_dist = deepcopy( + best_fit.hypo_asimov_dist.serializable_state + ) + + # decide which information to retain based on chosen debug mode + if debug_mode == 0 or debug_mode == 1: + try: + del best_fit['fit_history'] + del best_fit.hypo_asimov_dist + except KeyError: + pass + + if debug_mode == 0: + # torch the woods! + try: + del best_fit.minimizer_metadata + del best_fit.minimizer_time + except KeyError: + pass + + results['results'].append(best_fit) + if outfile is not None: + # store intermediate results + to_file(results, outfile) + + return results
+
+ + +def test_basic_analysis(pprint=False): + """Test recursive fit strategies with BasicAnalysis.""" + + + from pisa.core.distribution_maker import DistributionMaker + from pisa.utils.config_parser import parse_pipeline_config + + ###### Make Pipeline Configuration ######### + # We make a configuration of two pipelines where some, but not all, parameters + # are shared between them. This checks for memory inconsistencies. + config = parse_pipeline_config('settings/pipeline/fast_example.cfg') + config2 = deepcopy(config) + # Remove one stage to remove some parameters from only one pipeline + del config2[("aeff", "aeff")] + + dm = DistributionMaker([config, config2]) + dm.select_params('nh') + + dm.pipelines[0].params["aeff_scale"].value = 1.5 + # make data distribution to fit against + data_dist = dm.get_outputs(return_sum=True).fluctuate( + method="poisson", random_state=0 + ) + + #### Test subclassing + # It should be trivial to add a fit method to the BasicAnalysis class and use + # it by passing its name (without the "_fit_" prefix) to the dictionary. + class SubclassedAnalysis(BasicAnalysis): + + def _fit_nonsense( + self, data_dist, hypo_maker, metric, + external_priors_penalty, method_kwargs, local_fit_kwargs + ): + """A custom, nonsensical fit method. + + This method does nothing except to set theta23 to 42 deg for no reason. + """ + logging.info("Starting nonsense fit (setting theta23 to 42 deg)...") + + for pipeline in hypo_maker: + if "theta23" in pipeline.params.free.names: + pipeline.params.theta23.value = 42 * ureg["deg"] + + best_fit_info = self.fit_recursively( + data_dist, hypo_maker, metric, external_priors_penalty, + local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], + local_fit_kwargs["local_fit_kwargs"] + ) + + return best_fit_info + + ana = SubclassedAnalysis() + + ana.pprint = pprint + + # Test that global optimization with CRS2 is deterministic as long as a seed + # is provided. + + fit_nlopt_crs2 = OrderedDict( + method="nlopt", + method_kwargs={ + "algorithm": "NLOPT_GN_CRS2_LM", + "ftol_rel": 1e-1, + "ftol_abs": 1e-1, + "population": 5, + "maxeval": 20, + "seed": 0, + }, + local_fit_kwargs=None, + ) + + dm.reset_free() + best_fit_info_seed_0 = ana.fit_recursively( + data_dist, + dm, + "chi2", + None, + **fit_nlopt_crs2 + ) + logging.info("Best fit params with seed 0:") + logging.info(repr(best_fit_info_seed_0.params.free)) + + fit_nlopt_crs2["method_kwargs"]["seed"] = 1 + + dm.reset_free() + best_fit_info_seed_1 = ana.fit_recursively( + data_dist, + dm, + "chi2", + None, + **fit_nlopt_crs2 + ) + logging.info("Best fit params with seed 1:") + logging.info(repr(best_fit_info_seed_1.params.free)) + + fit_nlopt_crs2["method_kwargs"]["seed"] = 0 + + dm.reset_free() + best_fit_info_seed_0_reprod = ana.fit_recursively( + data_dist, + dm, + "chi2", + None, + **fit_nlopt_crs2 + ) + logging.info("Best fit params with seed 0, reproduced:") + logging.info(repr(best_fit_info_seed_0_reprod.params.free)) + + assert best_fit_info_seed_0.params == best_fit_info_seed_0_reprod.params + assert not (best_fit_info_seed_0.params == best_fit_info_seed_1.params) + + scipy_settings = { + "method": { + "value": "L-BFGS-B", + "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" + }, + "options":{ + "value": { + "disp" : 0, + "ftol" : 1.0e-1, + "eps" : 1.0e-6, + # we set a very low number of iterations so that this test exits early + # WILL CAUSE WARNINGS SAYING THAT THE OPTIMIZATION FAILED, BUT THAT IS OK! + #"maxiter": 2 + }, + "desc": { + "disp" : "Set to True to print convergence messages", + "ftol" : "Precision goal for the value of f in the stopping criterion", + "eps" : "Step size used for numerical approximation of the jacobian.", + "maxiter": "Maximum number of iteration" + } + }, + } + + ###### Fit strategy to test ######## + # This is a ridiculously complex fit strategy for a simple std. osc. fit + # that no one would use in real life, just to test the fit functions. + # Staged fit in two stages: + # 1. Best of: + # --> local fit using Simplex from NLOPT on a 2x1 grid + # --> local fit using Migrad from Minuit + # 2. --> for each range in deltam31: + # |--> starting from the best fit point found by local fit, shifted to range + # |--> fit with octant reflection, where internal fit is scipy + + local_simplex = OrderedDict( + method="nlopt", + method_kwargs={ + "algorithm": "NLOPT_LN_NELDERMEAD", + "ftol_rel": 1e-1, + "ftol_abs": 1e-1, + "maxeval": 10, + "initial_step": 0.2 # as a fraction of the total range + }, + local_fit_kwargs=None + ) + + grid_scan = OrderedDict( + method="grid_scan", + method_kwargs={ + "grid": { + "deltam31": np.array([3e-3, 5e-3]) * ureg["eV^2"], + "theta23": np.array([30]) * ureg["deg"] + }, + "refined_fit": local_simplex + }, + local_fit_kwargs=local_simplex + ) + + local_minuit = OrderedDict( + method="iminuit", + method_kwargs={ + "tol": 10, + }, + local_fit_kwargs=None + ) + + local_nonsense_minuit = OrderedDict( + method="nonsense", + method_kwargs=None, + local_fit_kwargs=local_minuit + ) + + best_of = OrderedDict( + method="best_of", + method_kwargs=None, + local_fit_kwargs=[ + local_nonsense_minuit, + grid_scan + ] + ) + + # a standard analysis strategy with an octant flip at 45 deg in theta23 + standard_analysis = OrderedDict( + method="fit_octants", + method_kwargs={ + "angle": "theta23", + "inflection_point": 45 * ureg.deg, + }, + local_fit_kwargs={ + "method": "scipy", + "method_kwargs": scipy_settings, + "local_fit_kwargs": None + } + ) + + # fit different ranges in mass splitting, and to the octant fits in each range + fit_in_ranges = OrderedDict( + method="fit_ranges", + method_kwargs={ + "param_name": "deltam31", + "ranges": np.array([[0.001, 0.004], [0.004, 0.007]]) * ureg["eV^2"], + "reset_free": True + }, + local_fit_kwargs=standard_analysis + ) + + # put together the full fit strategy + staged_fit = OrderedDict( + method="staged", + method_kwargs=None, + local_fit_kwargs=[ + best_of, + fit_in_ranges + ] + ) + # changing the parameter values in theta23 such that the fits starts offset from + # the truth + # use this opportunity to test the update_param_values function as well + for p in dm.pipelines: + p.params.deltam31.is_fixed = False + mod_th23 = deepcopy(dm.params.theta23) + mod_th23.range = (0 * ureg.deg, 90 *ureg.deg) + mod_th23.value = 30 * ureg.deg + mod_th23.nominal_value = 30 * ureg.deg + + update_param_values(dm, mod_th23, update_nominal_values=True, update_range=True) + # make sure that the parameter values inside the ParamSelector were changed and + # will not be overwritten by a call to `select_params` + mod_params = deepcopy(dm.params) + dm.select_params('nh') + assert mod_params == dm.params + # test alternative input to `update_param_values` where `hypo_maker` is just a + # single Pipeline + for pipeline in dm: + update_param_values(pipeline, mod_th23) + # the call above should just have no effect at all since we set everything to the + # same value + assert mod_params == dm.params + + # resetting free parameters should now set theta23 to 30 degrees since that is + # the new nominal value + dm.reset_free() + assert dm.params.theta23.value.m_as("deg") == 30 + + # store all the original ranges and nominal values + # --> The fits should never return results where these have changed, even though + # they are sometimes changed within them. + original_ranges = dict((p.name, p.range) for p in dm.params) + original_nom_vals = dict((p.name, p.nominal_value) for p in dm.params) + + # ACTUALLY RUN THE FIT + best_fit_info = ana.fit_recursively( + data_dist, + dm, + "chi2", + None, + **staged_fit + ) + + assert dm.params == best_fit_info.params + # there had been problems in the past where the range of the parameter that is + # changed by the octant flip was not reversed properly + for p in dm.params: + msg = f"mismatch in param {p.name}:\n" + msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" + msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" + if p.range is not None: + assert p.range[0] == original_ranges[p.name][0], msg + assert p.range[0] == original_ranges[p.name][0], msg + if p.nominal_value is not None: + assert p.nominal_value == original_nom_vals[p.name], msg + + # Here we make sure that making a param selection doesn't overwrite the fitted + # parameters. The Analysis should have changed the parameters inside the + # ParamSelector. + dm.select_params('nh') + assert dm.params == best_fit_info.params + for p in dm.params: + msg = f"mismatch in param {p.name}:\n" + msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" + msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" + if p.range is not None: + assert p.range[0] == original_ranges[p.name][0], msg + assert p.range[0] == original_ranges[p.name][0], msg + if p.nominal_value is not None: + assert p.nominal_value == original_nom_vals[p.name], msg + + dm.select_params('ih') + dm.select_params('nh') + assert dm.params == best_fit_info.params + for p in dm.params: + msg = f"mismatch in param {p.name}:\n" + msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" + msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" + if p.range is not None: + assert p.range[0] == original_ranges[p.name][0], msg + assert p.range[0] == original_ranges[p.name][0], msg + if p.nominal_value is not None: + assert p.nominal_value == original_nom_vals[p.name], msg + + logging.info('<< PASS : test_basic_analysis >>') + +if __name__ == "__main__": + set_verbosity(1) + test_basic_analysis(pprint=True) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/bin_indexing.html b/_modules/pisa/core/bin_indexing.html new file mode 100644 index 000000000..ceebc45fd --- /dev/null +++ b/_modules/pisa/core/bin_indexing.html @@ -0,0 +1,355 @@ + + + + + + pisa.core.bin_indexing — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.bin_indexing

+"""
+Functions to retrieve the bin index for a 1- to 3-dimensional sample.
+
+Functions were adapted from translation.py
+
+
+Notes
+-----
+The binning convention in PISA (from numpy.histogramdd) is that the lower edge
+is inclusive and upper edge is exclusive for a given bin, except for the
+upper-most bin whose upper edge is also inclusive. Visually, for 1D:
+
+    [ bin 0 ) [ bin 1 ) ... [ bin num_bins - 1 ]
+
+First bin is index = 0 and last bin is index = (num_bins - 1)
+
+* Values below the lowermost-edge of any dimension's binning return index = -1
+* NaN values return index = -1
+* Otherwise, values above the uppermost-edge of any dimension's binning return
+  index = num_bins
+
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.core.translation import find_index
+from pisa.utils.log import logging, set_verbosity
+
+
+__all__ = ["lookup_indices", "test_lookup_indices"]
+
+
+FX = "f4" if FTYPE == np.float32 else "f8"
+
+
+@guvectorize(
+    [f"({FX}[:], {FX}[:], i8[:])"],
+    "(), (j) -> ()",
+    target=TARGET,
+)
+def lookup_indices_vectorized_1d(sample_x, bin_edges_x, out):
+    """Lookup bin indices for sample_x values, where binning is defined by
+    `bin_edges_x`."""
+    out[0] = find_index(sample_x[0], bin_edges_x)
+
+
+@guvectorize(
+    [f"({FX}[:], {FX}[:], {FX}[:], {FX}[:], i8[:])"],
+    "(), (), (a), (b) -> ()",
+    target=TARGET,
+)
+def lookup_indices_vectorized_2d(sample_x, sample_y, bin_edges_x, bin_edges_y, out):
+    """Same as above, except we get back the index"""
+    idx_x = find_index(sample_x[0], bin_edges_x)
+    idx_y = find_index(sample_y[0], bin_edges_y)
+
+    n_x_bins = len(bin_edges_x) - 1
+    n_y_bins = len(bin_edges_y) - 1
+    n_bins = n_x_bins * n_y_bins
+
+    if idx_x == -1 or idx_y == -1:
+        # any dim underflowed
+        out[0] = -1
+    elif idx_x == n_x_bins or idx_y == n_y_bins:
+        # any dim overflowed
+        out[0] = n_bins
+    else:
+        out[0] = idx_x * n_y_bins + idx_y
+
+
+@guvectorize(
+    [f"({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], i8[:])"],
+    "(), (), (), (a), (b), (c) -> ()",
+    target=TARGET,
+)
+def lookup_indices_vectorized_3d(
+    sample_x, sample_y, sample_z, bin_edges_x, bin_edges_y, bin_edges_z, out
+):
+    """Vectorized gufunc to perform the lookup"""
+    idx_x = find_index(sample_x[0], bin_edges_x)
+    idx_y = find_index(sample_y[0], bin_edges_y)
+    idx_z = find_index(sample_z[0], bin_edges_z)
+
+    n_x_bins = len(bin_edges_x) - 1
+    n_y_bins = len(bin_edges_y) - 1
+    n_z_bins = len(bin_edges_z) - 1
+    n_bins = n_x_bins * n_y_bins * n_z_bins
+
+    if idx_x == -1 or idx_y == -1 or idx_z == -1:
+        # any dim underflowed
+        out[0] = -1
+    elif idx_x == n_x_bins or idx_y == n_y_bins or idx_z == n_z_bins:
+        # any dim overflowed
+        out[0] = n_bins
+    else:
+        out[0] = (idx_x * n_y_bins + idx_y) * n_z_bins + idx_z
+
+
+
+[docs] +def lookup_indices(sample, binning): + """Lookup (flattened) bin index for sample points. + + Parameters + ---------- + sample : length-M_dimensions sequence of length-N_events arrays + All smart arrays must have the same lengths; corresponding elements of + the arrays are the coordinates of an event in the dimensions each array + represents. + + binning : pisa.core.binning.MultiDimBinning or convertible thereto + `binning` is passed to instantiate ``MultiDimBinning``, so e.g., a + pisa.core.binning.OneDimBinning is valid to pass as `binning` + + Returns + ------- + indices : length-N_events arrays + One for each event the index of the histogram in which it falls into + + Notes + ----- + this method works for 1d, 2d and 3d histogram only + + """ + # Convert non-MultiDimBinning objects into MultiDimBinning if possible; + # if this fails, an error will result, as it should + binning = MultiDimBinning(binning) + + if len(sample) != binning.num_dims: + raise ValueError( + f"`binning` has {binning.num_dims} dimension(s), but `sample`" + f"contains {len(sample)} arrays (so represents {len(sample)}" + f" dimensions)" + ) + + lookup_funcs = { + 1: lookup_indices_vectorized_1d, + 2: lookup_indices_vectorized_2d, + 3: lookup_indices_vectorized_3d, + } + + if binning.num_dims not in lookup_funcs: + raise NotImplementedError( + "binning must have num_dims in {}; got {}".format( + sorted(lookup_funcs.keys()), binning.num_dims + ) + ) + + lookup_func = lookup_funcs[binning.num_dims] + + lookup_func_args = ( + [a for a in sample] + + [dim.edge_magnitudes.astype(FTYPE) for dim in binning] + ) + logging.trace("lookup_func_args = {}".format(lookup_func_args)) + + # Create an array to store the results + indices = np.empty_like(sample[0], dtype=np.int64) + + # Perform the lookup + lookup_func(*lookup_func_args, out=indices) + + return indices
+ + + +
+[docs] +def test_lookup_indices(): + """Unit tests for `lookup_indices` function""" + + # + # Test a variety of points. + # Points falling exactly on the bound are included in the + # + n_evts = 100 + + x = np.array([-5, 0.5, 1.5, 7.0, 6.5, 8.0, 6.5], dtype=FTYPE) + y = np.array([-5, 0.5, 1.5, 1.5, 3.0, 1.5, 2.5], dtype=FTYPE) + z = np.array([-5, 0.5, 1.5, 1.5, 0.5, 6.0, 0.5], dtype=FTYPE) + + w = np.ones(n_evts, dtype=FTYPE) + + binning_x = OneDimBinning(name="x", num_bins=7, is_lin=True, domain=[0, 7]) + binning_y = OneDimBinning(name="y", num_bins=4, is_lin=True, domain=[0, 4]) + binning_z = OneDimBinning(name="z", num_bins=2, is_lin=True, domain=[0, 2]) + + binning_1d = binning_x + binning_2d = binning_x * binning_y + binning_3d = binning_x * binning_y * binning_z + + # 1D case: check that each event falls into its predicted bin + # + # All values higher or equal to the last bin edges are assigned an index of zero + # + logging.trace("TEST 1D:") + logging.trace("Total number of bins: {}".format(7)) + logging.trace("array in 1D: {}".format(x)) + logging.trace("Binning: {}".format(binning_1d.bin_edges[0])) + indices = lookup_indices([x], binning_1d) + logging.trace("indices of each array element: {}".format(indices)) + logging.trace("*********************************") + test = indices + ref = np.array([-1, 0, 1, 6, 6, 7, 6]) + assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) + + # 2D case: + # + # The binning edges are flattened as follows: + # [(x=0, y=0), (x=0, y=1), (x=1, y=0), ...] + # + logging.trace("TEST 2D:") + logging.trace("Total number of bins: {}".format(7 * 4)) + logging.trace("array in 2D: {}".format(list(zip(x, y)))) + logging.trace("Binning: {}".format(binning_2d.bin_edges)) + indices = lookup_indices([x, y], binning_2d) + logging.trace("indices of each array element: {}".format(indices)) + logging.trace("*********************************") + test = indices + ref = np.array([-1, 0, 5, 25, 27, 28, 26]) + assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) + + # 3D case: + # + # the binning edges are flattened as follows: + # [(x=0, y=0, z=0), (x=0, y=0, z=1), (x=0, y=1, z=0)...] + # + logging.trace("TEST 3D:") + logging.trace("Total number of bins: {}".format(7 * 4 * 2)) + logging.trace("array in 3D: {}".format(list(zip(x, y, z)))) + logging.trace("Binning: {}".format(binning_3d.bin_edges)) + indices = lookup_indices([x, y, z], binning_3d) + logging.trace("indices of each array element: {}".format(indices)) + logging.trace("*********************************") + test = indices + ref = np.array([-1, 0, 11, 51, 54, 56, 52]) + assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) + + logging.info("<< PASS : test_lookup_indices >>")
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_lookup_indices() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/binning.html b/_modules/pisa/core/binning.html new file mode 100644 index 000000000..24c5441d8 --- /dev/null +++ b/_modules/pisa/core/binning.html @@ -0,0 +1,3760 @@ + + + + + + pisa.core.binning — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.binning

+"""
+Class to define binning in one dimension (OneDimBinning) and then a container
+class (MultiDimBinning) for arbitrarily many of dimensions (one or more). These
+classes have many useful methods for working with binning.
+"""
+
+# TODO: include Iterables where only Sequence is allowed now?
+# TODO: iterbins, itercoords are _*slow*_. Figure out how to speed these up, if
+#       that is possible in pure-Python loops... E.g.
+#           `indices = [i for i in range(mdb.size)]`
+#       takes 70 ms while
+#           `coords = [c for c in mdb.itercoords()]`
+#       takes 10 seconds.
+# TODO: Create non-validated version of OneDimBinning.__init__ to make
+#       iterbins() fast
+# TODO: explicitly set is_bin_spacing_log_uniform and
+#       is_bin_spacing_lin_uniform to FP32 precision (since binning can be
+#       defined/saved in FP32 but want code able to run in FP64
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Iterable, Mapping, Sequence
+from collections import OrderedDict, namedtuple
+from copy import copy, deepcopy
+from functools import reduce, wraps
+from itertools import chain, product
+from operator import mul
+import re
+
+import numpy as np
+
+from pisa import FTYPE, HASH_SIGFIGS, ureg
+from pisa.utils.comparisons import interpret_quantity, normQuant, recursiveEquality
+from pisa.utils.comparisons import ALLCLOSE_KW
+from pisa.utils.format import (make_valid_python_name, text2tex,
+                               strip_outer_dollars)
+from pisa.utils.hash import hash_obj
+from pisa.utils import jsons
+from pisa.utils.log import logging, set_verbosity, tprofile
+
+
+__all__ = ['NAME_FIXES', 'NAME_SEPCHARS', 'NAME_FIXES_REGEXES',
+           'basename', '_new_obj', 'is_binning',
+           'OneDimBinning', 'MultiDimBinning',
+           'test_OneDimBinning', 'test_MultiDimBinning']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+NAME_FIXES = ('tru(e|th)', 'reco(nstruct(ed)?)?')
+NAME_SEPCHARS = r'[_\s-]+'
+NAME_FIXES_REGEXES = tuple(
+    [re.compile(NAME_SEPCHARS + p, re.IGNORECASE) for p in NAME_FIXES]
+    + [re.compile(p + NAME_SEPCHARS, re.IGNORECASE) for p in NAME_FIXES]
+    + [re.compile(p, re.IGNORECASE) for p in NAME_FIXES]
+)
+
+
+# TODO: move this to a centralized utils location
+
+[docs] +def basename(n): + """Remove "true" or "reco" prefix(es) and/or suffix(es) from binning + name `n` along with any number of possible separator characters. + + * Valid (pre/suf)fix(es): "true", "reco" + * Valid separator characters: "<whitespace>", "_", "-" (any number) + + Parameters + ---------- + n : string or OneDimBinning + Name from which to have pre/suffixes stripped. + + Returns + ------- + basename : string + + Examples + -------- + >>> print(basename('true_energy')) + energy + >>> print(basename('Reconstructed coszen')) + coszen + >>> print(basename('coszen reco')) + coszen + >>> print(basename('energy___truth')) + energy + >>> print(basename('trueenergy')) + energy + >>> print(basename('energytruth')) + energy + + """ + # Type checkingn and conversion + orig_type = type(n) + if isinstance(n, OneDimBinning): + n = n.name + if not isinstance(n, str): + raise ValueError('Unhandled type %s' %orig_type) + # Remove all (pre/suf)fixes and any separator chars + for regex in NAME_FIXES_REGEXES: + n = regex.sub('', n) + return n.strip()
+ + + +
+[docs] +def is_binning(something): + """Return True if argument is a PISA binning (of any dimension), False + otherwise""" + return isinstance(something, (OneDimBinning, MultiDimBinning))
+ + + +# TODO: generalize to any object and move this to a centralized utils location +def _new_obj(original_function): + """Decorator to deepcopy unaltered states into new OneDimBinning object.""" + @wraps(original_function) + def new_function(cls, *args, **kwargs): + """<< docstring will be inherited from wrapped function >>""" + new_state = OrderedDict() + state_updates = original_function(cls, *args, **kwargs) + for attr in cls._attrs_to_create_new: # pylint: disable=protected-access + if attr in state_updates: + new_state[attr] = state_updates[attr] + else: + new_state[attr] = deepcopy(getattr(cls, attr)) + return OneDimBinning(**new_state) + return new_function + + +
+[docs] +class OneDimBinning(object): + # pylint: disable=line-too-long + """Histogram-oriented binning specialized to a single dimension. + + If neither `is_lin` nor `is_log` is specified, linear behavior + is assumed (i.e., `is_lin` is set to True). + + Parameters + ---------- + name : str, of length > 0 + Name for this dimension. Must be valid Python name (since it will be + accessed with the dot operator). If not, name will be converted to a + valid Python name. + + tex : str or None + TeX label for this dimension. + + bin_edges : sequence of scalars, or None + Numerical values (optionally including Pint units) that represent the + *edges* of the bins. `bin_edges` needn't be specified if `domain`, + `num_bins`, and optionally `is_log` is specified. Pint units can be + attached to `bin_edges`, but will be converted to `units` if this + argument is specified. + + units : Pint unit or object convertible to Pint unit, or None + If None, units will be read from either `bin_edges` or `domain`, and if + none of these have units, the binning has unit 'dimensionless' + attached. + + is_lin : bool or None + Binning behavior is linear for purposes of resampling, plotting, etc. + Mutually exclusive with `is_log`. If neither `is_lin` or `is_log` is + True (i.e., both are None), default behavior is linear (`is_lin` is set + to True internally). + + is_log : bool or None + Binning behavior is logarithmic for purposes of resampling, plotting, + etc. Mutually exclusive with `is_lin`. If neither `is_lin` or `is_log` + is True (i.e., both are None), default behavior is linear (`is_lin` is + set to True internally). + + domain : length-2 sequence of scalars, or None + Units may be specified. Required along with `num_bins` if `bin_edges` + is not specified (optionally specify `is_log=True` to define the + `bin_edges` to be log-uniform). + + num_bins : int or None + Number of bins. Required along with `domain` if `bin_edges` is not + specified (optionally specify `is_log=True` to define the `bin_edges` + to be log-uniform). + + bin_names : sequence of nonzero-length strings, or None + Strings by which each bin can be identified. This is expected to be + useful when one needs to easily identify bins by name where the actual + numerical values can be non-obvious e.g. the PID dimension. + None is also acceptable if there is no reason to name the bins. + + + Notes + ----- + Consistency is enforced for all redundant parameters passed to the + constructor. + + You can avoid passing `bin_edges` if `num_bins` and `domain` are specified. + Specify `is_lin=True` or `is_log=True` to define the binning to be linear + or logarithmic (but note that if neither is specified as True, linear + behavior is the default). + + Be careful, though, since bin edges will be defined slightly differently + depending on the ``pisa.FTYPE`` defined (PISA_FTYPE environment variable). + + + Examples + -------- + >>> from pisa import ureg + >>> from pisa.core.binning import OneDimBinning + >>> ebins = OneDimBinning(name='energy', is_log=True, + ... num_bins=40, domain=[1, 100]*ureg.GeV) + >>> print(ebins) + OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)) + >>> ebins2 = ebins.to('joule') + >>> print(ebins2) + OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.6021766339999998e-10, 1.602176634e-08] J (behavior is logarithmic)) + >>> czbins = OneDimBinning(name='coszen', + ... is_lin=True, num_bins=4, domain=[-1, 0]) + >>> print(czbins) + OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) + >>> czbins2 = OneDimBinning(name='coszen', + ... bin_edges=[-1, -0.75, -0.5, -0.25, 0]) + >>> czbins == czbins2 + True + + """ + # pylint: enable=line-too-long + + # NOTE: Only one of `is_log` or `is_lin` is technically required for state, + # since it's either one or the other, but these used to imply + # log-_uniform_ and linear-_uniform_ behavior. As nothing fundamnetally + # in the behavior is changed by assuming uniformity, and to keep + # backwards compatibility (including for state / hashes), both are kept + # (for now) as "state" variables. -JLL, April, 2020 + + _attrs_to_create_new = ('name', 'tex', 'bin_edges', 'is_log', 'is_lin', 'bin_names') + + def __init__(self, name, tex=None, bin_edges=None, units=None, domain=None, + num_bins=None, is_lin=None, is_log=None, bin_names=None): + # Basic validation and translation of args; note that iterables are + # converted to sequences later on + if not isinstance(name, str): + raise TypeError('`name` must be a string; got "%s".' %type(name)) + if domain is not None: + assert ( + isinstance(domain, Iterable) + or (isinstance(domain, ureg.Quantity) and domain.size > 1) + ) + if bin_names is not None: + if isinstance(bin_names, str): + bin_names = (bin_names,) + if (isinstance(bin_names, Iterable) + and all(isinstance(n, str) and n + for n in bin_names)): + bin_names = tuple(bin_names) + else: + raise ValueError( + '`bin_names` must either be None or an iterable of' + ' nonzero-length strings.' + ) + if bin_edges is not None: + assert ( + isinstance(bin_edges, Iterable) + or (isinstance(bin_edges, ureg.Quantity) and bin_edges.size > 1) + ) + if domain is not None: + raise ValueError( + 'Both `domain` and `bin_edges` are specified.' + ) + + # Type checking + assert is_lin is None or isinstance(is_lin, bool), str(type(is_lin)) + assert is_log is None or isinstance(is_log, bool), str(type(is_log)) + + if is_lin is None and is_log is None: # neither specified: default to linear + is_lin = True + is_log = not is_lin + + elif is_lin is not None: # is_lin is specified but not is_log + is_log = not is_lin + + elif is_log is not None: # is_log is specified but not is_lin + is_lin = not is_log + + else: # both specified: check consistency + if is_log == is_lin: + raise ValueError( + '`is_log=%s` contradicts `is_lin=%s`' % (is_log, is_lin) + ) + + self._normalize_values = True + self._name = make_valid_python_name(name) + if self._name != name: + logging.warning('Converted `name` "%s" to valid Python: "%s"', + name, self._name) + self._tex = tex + self._basename = None + self._bin_names = bin_names + self._hashable_state = None + self._serializable_state = None + self._normalized_state = None + self._midpoints = None + self._weighted_centers = None + self._edge_magnitudes = None + self._bin_widths = None + self._weighted_bin_widths = None + self._inbounds_criteria = None + + # TODO: define hash based upon conversion of things to base units (such + # that a valid comparison can be made between indentical binnings but + # that use different units). Be careful to round to just less than + # double-precision limits after conversion so that hashes will work out + # to be the same after conversion to the base units. + + self._hash = None + self._edges_hash = None + + # Figure out the units (if any) for each quantity passed in. Precedence + # for units is: + # 1. `units` + # 2. `bin_edges` + # 3. `domain` + # 4. default to units of `ureg.dimensionless` + + if units is not None: + if isinstance(units, ureg.Quantity): + units = units.units + elif not isinstance(units, ureg.Unit): + units = ureg.Unit(units) + units_dimensionality = units.dimensionality + + dimensionless_bin_edges = None + + if bin_edges is not None: + if isinstance(bin_edges, ureg.Quantity): + be_units = bin_edges.units + if units is None: + units = be_units + else: + if be_units.dimensionality != units_dimensionality: + raise ValueError( + '`bin_edges` units %s are incompatible with units' + ' %s.' % (be_units, units) + ) + if be_units != units: + logging.warning( + '`bin_edges` are specified in units of %s' + ' but `units` is specified as %s.' + ' Converting `bin_edges` to the latter.', + be_units, units + ) + bin_edges.ito(units) + dimensionless_bin_edges = bin_edges.magnitude + + elif bin_edges is not None: + dimensionless_bin_edges = np.asarray(bin_edges, dtype=FTYPE) + bin_edges = None + + dimensionless_domain = None + + if domain is not None: + if isinstance(domain, ureg.Quantity): + domain_units = domain.units + if units is None: + units = domain_units + else: + if domain_units.dimensionality != units_dimensionality: + raise ValueError( + '`domain` units %s are incmompatible with units' + ' %s.' % (domain_units, units) + ) + if domain_units != units: + logging.warning( + '`domain` units %s will be converted to' ' %s.', + domain_units, + units, + ) + domain.ito(units) + dimensionless_domain = domain.magnitude + + else: + domain_lower_is_quant = isinstance(domain[0], ureg.Quantity) + domain_upper_is_quant = isinstance(domain[1], ureg.Quantity) + assert domain_lower_is_quant == domain_upper_is_quant + if domain_lower_is_quant: + assert domain[0].dimensionality == domain[1].dimensionality + if domain[1].units != domain[0].units: + domain[1] = domain[1].to(domain[0].units) + dimensionless_domain = (domain[0].magnitude, + domain[1].magnitude) + else: + dimensionless_domain = tuple(domain) + domain = None + + # If no units have been discovered from the input args, assign default + # units + if units is None: + units = ureg.dimensionless + + if dimensionless_bin_edges is None: + if num_bins is None or dimensionless_domain is None: + raise ValueError( + 'If not specifying bin edges explicitly, `domain` and' + ' `num_bins` must be specified (and optionally set' + ' `is_log=True`).' + ) + if is_log: + dimensionless_bin_edges = np.logspace( + np.log10(dimensionless_domain[0]), + np.log10(dimensionless_domain[1]), + num_bins + 1, + dtype=FTYPE, + ) + else: # is_lin + dimensionless_bin_edges = np.linspace( + dimensionless_domain[0], + dimensionless_domain[1], + num_bins + 1, + dtype=FTYPE, + ) + elif dimensionless_domain is not None: + assert dimensionless_domain[0] == dimensionless_bin_edges[0] + assert dimensionless_domain[1] == dimensionless_bin_edges[-1] + + # TODO: should we warn a user if logarithmically- or linearly-uniform + # bin_edges are passed while is_log, is_lin, or the default (is_lin) + # "contradict" this? + + # if not (is_lin or is_log): # infer is_log/is_lin from spacing if not set + # is_lin = self.is_bin_spacing_lin_uniform(dimensionless_bin_edges) + # try: + # is_log = self.is_bin_spacing_log_uniform(dimensionless_bin_edges) + # except ValueError: + # is_log = False + + if dimensionless_domain is None: + dimensionless_domain = (dimensionless_bin_edges[0], + dimensionless_bin_edges[-1]) + + if bin_edges is None: + self._bin_edges = dimensionless_bin_edges * units + else: + self._bin_edges = bin_edges + + if domain is None: + self._domain = dimensionless_domain * units + else: + self._domain = domain + + self._units = units + + # Derive rest of unspecified parameters from bin_edges or enforce + # them if they were specified as arguments to init + if num_bins is None: + num_bins = len(self.bin_edges) - 1 + else: + assert num_bins == len(self.bin_edges) - 1, \ + '%s, %s' %(num_bins, self.bin_edges) + self._num_bins = num_bins + + if (self._bin_names is not None + and len(self._bin_names) != self._num_bins): + raise ValueError( + 'There are %d bins, so there must be %d `bin_names` (or None)' + ' provided; got %d bin name instead: %s.' + % (self._num_bins, self._num_bins, len(self._bin_names), + self._bin_names) + ) + + self._is_log = is_log + self._is_lin = not self._is_log + self._is_irregular = None + + def __repr__(self): + previous_precision = np.get_printoptions()['precision'] + np.set_printoptions(precision=18) + try: + argstrs = [('%s=%r' %item) for item in + self.serializable_state.items()] + r = '%s(%s)' %(self.__class__.__name__, ',\n '.join(argstrs)) + finally: + np.set_printoptions(precision=previous_precision) + return r + + def __str__(self): + lin_reg = "linearly-regular " + log_reg = "logarithmically-regular " + + regularity = None + if self.is_irregular: + # Test for regularity in the other domain + if self.is_lin and self.is_bin_spacing_log_uniform(self.bin_edges): + regularity = log_reg + elif self.is_log and self.is_bin_spacing_lin_uniform(self.bin_edges): + regularity = lin_reg + else: + regularity = log_reg if self.is_log else lin_reg + + if regularity is None or self.num_bins == 1: + edges = 'with edges at [{}]{}'.format( + ', '.join(str(e) for e in self.bin_edges.m), + format(self.bin_edges.u, '~'), + ).strip() + regularity = "" + else: + edges = 'spanning [{}, {}] {:s}'.format( + self.bin_edges[0].magnitude, + self.bin_edges[-1].magnitude, + format(self.units, '~'), + ).strip() + + plural = '' if self.num_bins == 1 else 's' + linlog = 'logarithmic' if self.is_log else 'linear' + + if self.bin_names is None: + bnames = "" + else: + bnames = ', bin_names=[{}]'.format( + ', '.join(f"'{n:s}'" for n in self.bin_names) + ) + + descr = ( + f'{self.num_bins:d} {regularity:s}bin{plural:s} {edges:s}' + f' (behavior is {linlog:s}){bnames:s}' + ) + + return f"{self.__class__.__name__:s}('{self.name:s}', {descr:s})" + + def __pretty__(self, p, cycle): + """Method used by the `pretty` library for formatting""" + if cycle: + p.text('%s(...)' % self.__class__.__name__) + else: + p.begin_group(4, '%s' % self) + p.end_group(4, ')') + + def _repr_pretty_(self, p, cycle): + """Method used by e.g. ipython/Jupyter for formatting""" + return self.__pretty__(p, cycle) + + def __getstate__(self): + """Method invoked during pickling""" + return self.serializable_state + + def __setstate__(self, state): + """Method invoked during unpickling""" + self.__init__(**state) + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + + Parameters + ---------- + filename : str + Filename; must be either a relative or absolute path (*not + interpreted as a PISA resource specification*) + **kwargs + Further keyword args are sent to `pisa.utils.jsons.to_json()` + + See Also + -------- + from_json : Instantiate new OneDimBinning object from the file written + by this method + + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, resource): + """Instantiate a new object from the contents of a JSON file as + formatted by the `to_json` method. + + Parameters + ---------- + resource : str + A PISA resource specification (see pisa.utils.resources) + + See Also + -------- + to_json + + """ + state = jsons.from_json(resource) + return cls(**state)
+ + + def __contains__(self, x): + try: + self.index(x) + except ValueError: + return False + return True + +
+[docs] + def index(self, x): + """Return integer index of bin identified by `x`. + + Parameters + ---------- + x : int, string + If int, ensure it is a valid index and return; if string, look for + bin with corresponding name. + + Returns + ------- + idx: int + index of bin corresponding to `x` + + Raises + ------ + ValueError if `x` cannot identify a valid bin + + """ + try: + if isinstance(x, str): + assert self.bin_names is not None + return self.bin_names.index(x) + if isinstance(x, int): + assert 0 <= x < len(self) + return x + raise TypeError('`x` must be either int or string; got %s instead.' + % type(x)) + except (AssertionError, ValueError): + valid_range = [0, len(self)-1] + if self.bin_names is None: + valid_names = '' + else: + valid_names = ' or a valid bin name in %s' % (self.bin_names,) + raise ValueError('Bin corresponding to "%s" could not be located.' + ' Specify an int in %s%s.' + % (x, valid_range, valid_names))
+ + +
+[docs] + def iterbins(self): + """Return an iterator over each bin. The elments returned by the + iterator are each a OneDimBinning object, just containing a single bin. + + Note that for one test, `iterbins` is about 500x slower than + `iteredgetuples`. + + Returns + ------- + bin_iterator + + See Also + -------- + iteredgetuples + Faster but only returns edges of bins, not OneDimBinning objects. + + """ + return (self[i] for i in range(len(self)))
+ + +
+[docs] + def iteredgetuples(self): + """Return an iterator over each bin's edges. The elments returned by + the iterator are each a tuple, containing the edges of the bin. Units + are stripped prior to iteration for purposes of speed. + + Returns + ------- + edges_iterator + + See Also + -------- + iterbins + Similar, but returns a OneDimBinning object for each bin; slower + than this method (by as much as 500x in one test) but easier to + work with. + + """ + mags = self.edge_magnitudes + return ((e0, e1) for e0, e1 in zip(mags[:-1], mags[1:]))
+ + + @property + def serializable_state(self): + """OrderedDict containing savable state attributes""" + if self._serializable_state is None: + state = OrderedDict() + state['name'] = self.name + state['bin_edges'] = self.edge_magnitudes + state['units'] = str(self.units) + state['is_log'] = self.is_log + state['is_lin'] = self.is_lin + state['bin_names'] = self.bin_names + self._serializable_state = state + # Since the tex property can be modified, must set every time this + # property is called + self._serializable_state['tex'] = self.tex + return self._serializable_state + + @property + def hashable_state(self): + """OrderedDict containing simplified state attributes (i.e. some state + attributes are represented by their hashes) used for testing equality + between two objects. + + Use `hashable_state` for faster equality checks and `normalized_state` + for inspecting the contents of each state attribute pre-hashing + """ + if self._hashable_state is None: + state = OrderedDict() + state['name'] = self.name + state['edges_hash'] = self.edges_hash + state['is_log'] = self.is_log + state['is_lin'] = self.is_lin + state['bin_names'] = self.bin_names + self._hashable_state = state + return self._hashable_state + + @property + def normalized_state(self): + """OrderedDict containing normalized (base units, and rounded to + appropriate precision) state attributes used for testing equality + between two objects. + + Use `hashable_state` for faster equality checks and `normalized_state` + for inspecting the contents of each state attribute pre-hashing + """ + if self._normalized_state is None: + state = OrderedDict() + state['name'] = self.name + bin_edges = normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS) + state['bin_edges'] = bin_edges + state['is_log'] = self.is_log + state['is_lin'] = self.is_lin + state['bin_names'] = self.bin_names + self._normalized_state = state + return self._normalized_state + + @property + def edge_magnitudes(self): + """Bin edges' magnitudes""" + if self._edge_magnitudes is None: + self._edge_magnitudes = self.bin_edges.magnitude + return self._edge_magnitudes + + @property + def name(self): + """Name of the dimension""" + return self._name + + @property + def basename(self): + """Basename of the dimension, stripping "true", "reco", underscores, + whitespace, etc. from the `name` attribute.""" + if self._basename is None: + self._basename = basename(self.name) + return self._basename + + # TODO: reimplement just the translate-on-input (or not?), but is this a + # performance hit for e.g. iterbins()? That could argue for + # translate-on-output... + + @property + def tex(self): + """string : TeX label""" + if self._tex is None: + return text2tex(self.name) + return self._tex + + @tex.setter + def tex(self, val): + """None or TeX string for dimension; surrounding dollars-signs ($) are + stripped off (and must be added prior to e.g. plotting)""" + assert val is None or isinstance(val, str) + if val is not None: + val = strip_outer_dollars(val) + self._tex = val + + @property + def label(self): + """TeX-formatted axis label, including units (if not dimensionless)""" + if self.tex is None: + name_tex = r'{\rm %s}' % text2tex(self.name) + else: + name_tex = self.tex + + if self.units == ureg.dimensionless: + units_tex = '' + else: + units_tex = r' \; \left( {:~L} \right)'.format(self.units) + + return name_tex + units_tex + + @property + def shape(self): + """tuple : shape of binning, akin to `nump.ndarray.shape`""" + return (self.num_bins,) + + @property + def size(self): + """int : total number of bins""" + return self.num_bins + + @property + def bin_edges(self): + """array : Edges of the bins.""" + return self._bin_edges + + @property + def bin_names(self): + """list of strings or None : Bin names""" + return self._bin_names + + @property + def domain(self): + """array : domain of the binning, (min, max) bin edges""" + if self._domain is None: + bin_edges = self.edge_magnitudes + self._domain = np.array([np.min(bin_edges), + np.max(bin_edges)]) * self.units + return self._domain + + @property + def range(self): + """float : range of the binning, (max-min) bin edges""" + domain = self.domain + return domain[1] - domain[0] + + @property + def units(self): + """pint.Unit : units of the bins' edges""" + return self._units + + @units.setter + def units(self, u): + """str or pint.Unit : units of the bins' edges""" + self.ito(u) + + @property + def num_bins(self): + """int : Number of bins""" + return self._num_bins + + @property + def is_lin(self): + """bool : Whether binning is to be treated in a linear space""" + return self._is_lin + + @is_lin.setter + def is_lin(self, b): + """bool""" + assert isinstance(b, bool) + if b != self._is_lin: + # NOTE: use tuple unpacking to help ensure state is consistent + ( + self._is_lin, + self._is_log, + self._is_irregular, + self._weighted_centers, + self._weighted_bin_widths, + ) = (b, not b, None, None, None) + + @property + def is_log(self): + """bool : Whether binning is to be treated in a log space""" + return self._is_log + + @is_log.setter + def is_log(self, b): + """bool""" + assert isinstance(b, bool) + if b != self._is_log: + # NOTE: use tuple unpacking to help ensure state is consistent + ( + self._is_log, + self._is_lin, + self._is_irregular, + self._weighted_centers, + self._weighted_bin_widths, + ) = (b, not b, None, None, None) + + @property + def is_irregular(self): + """bool : True if bin spacing is not unform in the space defined (i.e., + NOT linearly-uniform if `is_lin` or NOT logarithmically-uniform if + `is_log`).""" + if self._is_irregular is None: + if self.num_bins == 1: + self._is_irregular = False + elif self.is_log: + self._is_irregular = not self.is_bin_spacing_log_uniform(self.bin_edges) + else: # self.is_lin + self._is_irregular = not self.is_bin_spacing_lin_uniform(self.bin_edges) + return self._is_irregular + + @property + def midpoints(self): + """array : Midpoints of the bins: linear average of each bin's + edges.""" + if self._midpoints is None: + self._midpoints = (self.bin_edges[:-1] + self.bin_edges[1:])/2.0 + return self._midpoints + + @property + def weighted_centers(self): + """array : Centers of the bins taking e.g. logarithmic behavior + into account. I.e., if binning is logarithmic, this is **not** + the same `midpoints`, whereas in all other cases, it is identical.""" + if self._weighted_centers is None: + if self.is_log: + self._weighted_centers = np.sqrt(self.bin_edges[:-1] * + self.bin_edges[1:]) + else: + self._weighted_centers = self.midpoints + return self._weighted_centers + + @property + def hash(self): + """int : Hash value based upon less-than-double-precision-rounded + numerical values and any other state (includes name, tex, is_log, and + is_lin attributes). Rounding is done to `HASH_SIGFIGS` significant + figures. + + Set this class attribute to None to keep full numerical precision in + the values hashed (but be aware that this can cause equal things + defined using different unit orders-of-magnitude to hash differently). + + """ + if self._hash is None: + s = self.hashable_state + self._hash = hash_obj(s) + return self._hash + +
+[docs] + def rehash(self): + """Force `hash` and `edges_hash` attributes to be recomputed""" + self._hash = None + self._edges_hash = None + _ = self.hash + _ = self.edges_hash
+ + + def __hash__(self): + return self.hash + + @property + def normalize_values(self): + """bool : Whether to normalize quantities' units prior to hashing""" + return self._normalize_values + + @normalize_values.setter + def normalize_values(self, b): + assert isinstance(b, bool) + if b == self._normalize_values: + return + # Invalidate the hash, since the hashing behavior has changed + self._hash = None + self._edges_hash = None + self._normalize_values = b + + @property + def edges_hash(self): + """Hash value based *solely* upon bin edges' values. + + The hash value is obtained on the edges after "normalizing" their + values if `self.normalize_values` is True; see + `pisa.utils.comparsions.normQuant` for details of the normalization + process. + + """ + if self._edges_hash is None: + if self.normalize_values: + bin_edges = normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS) + else: + bin_edges = self.bin_edges + self._edges_hash = hash_obj(bin_edges) + return self._edges_hash + + + @property + def bin_widths(self): + """Absolute widths of bins.""" + if self._bin_widths is None: + self._bin_widths = np.abs(np.diff(self.bin_edges.m)) * self.units + return self._bin_widths + + @property + def weighted_bin_widths(self): + """Absolute widths of bins.""" + if self._weighted_bin_widths is None: + if self.is_log: + self._weighted_bin_widths = ( + np.log(self.edge_magnitudes[1:] / self.edge_magnitudes[:-1]) + ) * ureg.dimensionless + else: + self._weighted_bin_widths = self.bin_widths + return self._weighted_bin_widths + + @property + def inbounds_criteria(self): + """Return string boolean criteria indicating e.g. an event falls within + the limits of the defined binning. + + This can be used for e.g. applying cuts to events. + + See Also + -------- + pisa.core.events.keepInbounds + + """ + if self._inbounds_criteria is None: + be = self.edge_magnitudes + crit = '(%s >= %.15e) & (%s <= %.15e)' % (self.name, min(be), + self.name, max(be)) + self._inbounds_criteria = crit + return self._inbounds_criteria + + def __len__(self): + """Number of bins (*not* number of bin edges).""" + return self.num_bins + + def __mul__(self, other): + if isinstance(other, OneDimBinning): + return MultiDimBinning([self, other]) + if isinstance(other, MultiDimBinning): + return MultiDimBinning(chain([self], other)) + return OneDimBinning(name=self.name, tex=self.tex, + bin_edges=self.bin_edges * other) + + # TODO: if same or contained dimension, modify the current binning OR + # create a smarter MultiDimBinning object that allows for multiple + # disconnected binning regions with arbitrary binning within each + # region + def __add__(self, other): + if isinstance(other, OneDimBinning): + return MultiDimBinning([self, other]) + + if isinstance(other, MultiDimBinning): + return MultiDimBinning(chain([self], other)) + + other = interpret_quantity(other, expect_sequence=True) + + new_bin_edges = self.bin_edges + other + + return OneDimBinning(name=self.name, tex=self.tex, bin_edges=new_bin_edges) + + @_new_obj + def __deepcopy__(self, memo): + """Explicit deepcopy constructor""" + return {} + +
+[docs] + @staticmethod + def is_bin_spacing_log_uniform(bin_edges): + """Check if `bin_edges` define a logarithmically-uniform bin spacing. + + Parameters + ---------- + bin_edges : sequence + Fewer than 2 `bin_edges` - raises ValueError + Two `bin_edges` - returns False as a reasonable guess (spacing is + assumed to be linear) + More than two `bin_edges` - whether spacing is linear is computed + + Returns + ------- + bool + + """ + if hasattr(bin_edges, 'magnitude'): + bin_edges = bin_edges.magnitude + bin_edges = np.asarray(bin_edges) + if len(bin_edges) < 3: + raise ValueError('%d bin edge(s) passed; require at least 3 to' + ' determine nature of bin spacing.' + % len(bin_edges)) + with np.errstate(divide='raise', over='raise', under='raise', + invalid='raise'): + try: + log_spacing = bin_edges[1:] / bin_edges[:-1] + except (AssertionError, FloatingPointError, ZeroDivisionError): + return False + if np.allclose(log_spacing, log_spacing[0], **ALLCLOSE_KW): + return True + return False
+ + +
+[docs] + @staticmethod + def is_bin_spacing_lin_uniform(bin_edges): + """Check if `bin_edges` define a linearly-uniform bin spacing. + + Parameters + ---------- + bin_edges : sequence + Fewer than 2 `bin_edges` - raises ValueError + Two `bin_edges` - returns True as a reasonable guess + More than two `bin_edges` - whether spacing is linear is computed + + Returns + ------- + bool + + Raises + ------ + ValueError if fewer than 2 `bin_edges` are specified. + + """ + if hasattr(bin_edges, 'magnitude'): + bin_edges = bin_edges.magnitude + bin_edges = np.array(bin_edges) + if len(bin_edges) == 1: + raise ValueError('Single bin edge passed; require at least 2 to' + ' determine nature of bin spacing.') + if not np.all(np.isfinite(bin_edges)): + return False + # Default is to assume linear behavior if only two bin edges are given + if len(bin_edges) == 2: + return True + lin_spacing = np.diff(bin_edges) + if np.allclose(lin_spacing, lin_spacing[0], **ALLCLOSE_KW): + return True + return False
+ + +
+[docs] + @staticmethod + def is_binning_ok(bin_edges): + """Check that there are 2 or more bin edges, and that they are + monotonically increasing. + + Parameters + ---------- + bin_edges : sequence + Bin edges to check the validity of + + Returns + ------- + bool, True if binning is OK, False if not + + """ + # Must be at least two edges to define a single bin + if len(bin_edges) < 2: + return False + # Bin edges must be monotonic and strictly increasing + if np.any(np.diff(bin_edges) <= 0): + return False + return True
+ + + # TODO: as of now, only downsampling is allowed. Is this reasonable? +
+[docs] + def is_compat(self, other): + """Compatibility -- for now -- is defined by all of self's bin + edges form a subset of other's bin edges (i.e. you can downsample to + get from the other binning to this binning), and the units must be + compatible. + + Note that this might bear revisiting, or redefining just for special + circumstances. + + Parameters + ---------- + other : OneDimBinning + + Returns + ------- + bool + + """ + if self.name != other.name: + logging.trace('Dimension names do not match') + return False + + if self.units.dimensionality != other.units.dimensionality: + logging.trace('Incompatible units') + return False + + # TODO: should we force normalization? + # TODO: Should we use FTYPE_SIGFIGS or # HASH_SIGFIGS? + if self.normalize_values: + my_normed_bin_edges = set( + normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS).magnitude + ) + other_normed_bin_edges = set( + normQuant(other.bin_edges, sigfigs=HASH_SIGFIGS).magnitude + ) + else: + my_normed_bin_edges = set(self.bin_edges.magnitude) + other_normed_bin_edges = set(other.bin_edges.magnitude) + + if my_normed_bin_edges.issubset(other_normed_bin_edges): + return True + + logging.trace('self.bin_edges not a subset of other.bin_edges') + logging.trace('Bins in this map not found in other = %s', + my_normed_bin_edges.difference(other_normed_bin_edges)) + + return False
+ + +
+[docs] + def assert_compat(self, other): + """Assert that this binning is compatible with `other`.""" + + if not self.is_compat(other): + raise AssertionError(f"incompatible {self.name} binning")
+ + + @property + @_new_obj + def basename_binning(self): + """Identical binning but named as the basename of this binning. Note + that the `tex` property is not carried over into the new binning.""" + return {'name': self.basename, 'tex': None} + + @property + @_new_obj + def finite_binning(self): + """Identical binning but with infinities in bin edges replaced by + largest/smallest floating-point numbers representable with the current + pisa.FTYPE.""" + float_info = np.finfo(FTYPE) + finite_edges = np.clip(self.edge_magnitudes, a_min=float_info.min, + a_max=float_info.max) + return {'bin_edges': finite_edges} + +
+[docs] + @_new_obj + def oversample(self, factor): + """Return a OneDimBinning object oversampled relative to this object's + binning. + + Parameters + ---------- + factor : integer + Factor by which to oversample the binning, with `factor`-times + as many bins (*not* bin edges) as this object has. + + Returns + ------- + new_binning : OneDimBinning + New binning, oversampled from the current binning. + + Raises + ------ + ValueError if illegal value is specified for `factor` + + Notes + ----- + Bin names are _not_ preserved for any `factor` except 1 since it is + ambiguous how names should be propagated. If you wish to have bin + names after oversampling, assign them afterwards. + + """ + if factor < 1 or factor != int(factor): + raise ValueError('`factor` must be integer >= 1; got %s' %factor) + + factor = int(factor) + + if factor == 1: + return self + + if self.is_log: + spacing_func = np.geomspace + else: # is_lin + spacing_func = np.linspace + + old_bin_edges = self.edge_magnitudes + new_bin_edges = [] + for old_lower, old_upper in zip(old_bin_edges[:-1], old_bin_edges[1:]): + thisbin_new_edges = spacing_func(old_lower, old_upper, factor + 1) + + # Use the original lower bin edge to avoid precision issues with + # its version created by `spacing_func` + new_bin_edges.append(old_lower) + + # Add the new bin edges we created in between lower and upper; we + # omit the upper bin edge because it is the first bin edge of the + # next bin + new_bin_edges.extend(thisbin_new_edges[1:-1]) + + # Include the uppermost bin edge from original binning + new_bin_edges.append(old_upper) + + return {'bin_edges': new_bin_edges * self.units, 'bin_names': None}
+ + + # TODO: do something cute with bin names, if they exist? +
+[docs] + @_new_obj + def downsample(self, factor): + """Downsample the binning by an integer factor that evenly divides the + current number of bins. + + Parameters + ---------- + factor : int >= 1 + Downsampling factor that evenly divides the current number of + bins. E.g., if the current number of bins is 4, `factor` can be + one of 1, 2, or 4. Note that floats are converted into integers + if `float(factor) == int(factor)`. + + Returns + ------- + new_binning : OneDimBinning + New binning, downsampled from the current binning. + + Raises + ------ + ValueError if illegal value is specified for `factor` + + Notes + ----- + Bin names are _not_ preserved for any `factor` except 1 since it is + ambiguous how names should be propagated. If you wish to have bin + names after downsampling, assign them afterwards. + + """ + if int(factor) != float(factor): + raise ValueError('Floating point `factor` is non-integral.') + factor = int(factor) + + if factor == 1: + return self + + if factor < 1 or factor > self.num_bins: + raise ValueError( + '`factor` %d is out of range; must be >= 1 and <= number of' + ' bins (%d).' % (factor, self.num_bins) + ) + + if self.num_bins % factor != 0: + raise ValueError( + '`factor` %d does not evenly divide number of bins (%d).' + % (factor, self.num_bins) + ) + + return {'bin_edges': self.bin_edges[::factor], + 'bin_names': None}
+ + +
+[docs] + def ito(self, units): + """Convert units in-place. Cf. Pint's `ito` method.""" + if units is None: + units = '' + + units = ureg.Unit(units) + if units == self._units: + return + self._units = units + + # Invalidate (expensive) derived properties that rely on units + for attr in ['_inbounds_criteria']: + setattr(self, attr, None) + + # Convert already-defined quantities + attrs = [ + '_bin_edges', + '_domain', + '_midpoints', + '_weighted_centers', + '_bin_widths', + '_edge_magnitudes', + ] + for attr in attrs: + val = getattr(self, attr) + if val is None: + continue + val.ito(units)
+ + +
+[docs] + @_new_obj + def to(self, units): # pylint: disable=invalid-name + """Convert bin edges' units to `units`. + + Parameters + ---------- + units : None, string, or pint.Unit + + Returns + ------- + new_binning : OneDimBinning + New binning object whose edges have units `units` + + """ + if units is None: + units = 'dimensionless' + return {'bin_edges': self.bin_edges.to(ureg(str(units)))}
+ + + def __getattr__(self, attr): + return super().__getattribute__(attr) + + # TODO: make this actually grab the bins specified (and be able to grab + # disparate bins, whether or not they are adjacent)... i.e., fill in all + # upper bin edges, and handle the case that it goes from linear or log + # to uneven (or if it stays lin or log, keep that attribute for the + # subselection). Granted, a OneDimBinning object right now requires + # monotonically-increasing and adjacent bins. + + # TODO: make indexing allow for sequence containing a single ellipsis + # TODO: for some reason, this is crazy, crazy slow when indexing with + # ellipsis... why? + # NOTE: mabye we don't care, since using ellipsis (or even an isolated, + # single colon) in a one-dimensional object is a "violation of the + # contract": http://stackoverflow.com/a/118508 + @_new_obj + def __getitem__(self, index): + """Return a new OneDimBinning, sub-selected by `index`. + + Parameters + ---------- + index : int, slice, ellipsis, str, or length-one Sequence + The *bin indices* (not bin-edge indices) to return. Generated + OneDimBinning object must obey the usual rules (monotonic, etc.). + If a str is supplied it must match a name in bin_names + + Returns + ------- + A new OneDimBinning but only with bins selected by `index`. + + """ + # Ellipsis: binninng[...] returns everything + if index is Ellipsis: + return {} + + magnitude = self.edge_magnitudes + units = self.units + orig_index = index + mylen = len(magnitude) - 1 + bin_names = self.bin_names + + # Deal with indexing by name first so as to not break anything else + if isinstance(index, str): + assert bin_names is not None + index = bin_names.index(index) + + # Simple to get all but final bin edge + bin_edges = magnitude[index].tolist() + + if np.isscalar(bin_edges): + bin_edges = [bin_edges] + else: + bin_edges = list(bin_edges) + + # Convert index/indices to positive-number sequence + if isinstance(index, slice): + index = list(range(*index.indices(mylen))) + if isinstance(index, int): + index = [index] + + if isinstance(index, Iterable): + if not isinstance(index, Sequence): + index = list(index) + for bin_index in index: + if isinstance(bin_index, str): + raise ValueError('Slicing by seq of names currently not' + ' supported') + if not index: + raise ValueError('`index` "%s" results in no bins being' + ' specified.' %orig_index) + if len(index) > 1 and not np.all(np.diff(index) == 1): + raise ValueError('Bin indices must be monotonically' + ' increasing and adjacent.') + new_edges = set() + new_names = [] + for bin_index in index: + if bin_index < -mylen or bin_index >= mylen: + raise ValueError( + "Dimension '%s': bin index %s is invalid. Bin index" + " must be >= %+d and <= %+d" + %(self.name, bin_index, -mylen, mylen-1) + ) + edge_ind0 = bin_index % mylen + edge_ind1 = edge_ind0 + 1 + if bin_names is not None: + new_names.append(bin_names[edge_ind0]) + mag0 = magnitude[edge_ind0] + mag1 = magnitude[edge_ind1] + new_edges = new_edges.union((mag0, mag1)) + else: + raise TypeError('Unhandled index type %s' %type(orig_index)) + + if new_names == []: + new_names = None + # Retrieve current state; only bin_edges and bin_names need to be + # updated + new_edges = sorted(new_edges) + new_edges = np.array(new_edges) + new_edges = new_edges * units + return {'bin_edges': new_edges, 'bin_names': new_names} + + def __iter__(self): + return self.iterbins() + + def __eq__(self, other): + if not isinstance(other, OneDimBinning): + return False + return recursiveEquality(self.hashable_state, other.hashable_state) + + def __ne__(self, other): + return not self.__eq__(other)
+ + + +
+[docs] +class MultiDimBinning(object): + # pylint: disable=line-too-long + r""" + Multi-dimensional binning object. This can contain one or more + OneDimBinning objects, and all subsequent operations (e.g. slicing) will + act on these in the order they are supplied. + + Note that it is convenient to construct MultiDimBinning objects via the * + operator (which implementes the outer product) from multiple OneDimBinning + objects. See Examples below for details. + + + Parameters + ---------- + dimensions : OneDimBinning or sequence convertible thereto + Dimensions for the binning object. Indexing into the MultiDimBinning + object follows the order in which dimensions are provided. + + + See Also + -------- + OneDimBinning : each item that is not a OneDimBinning object is passed to + this class to be instantiated as such. + + + Examples + -------- + >>> from pisa import ureg + >>> from pisa.core.binning import MultiDimBinning, OneDimBinning + >>> ebins = OneDimBinning(name='energy', is_log=True, + ... num_bins=40, domain=[1, 100]*ureg.GeV) + >>> czbins = OneDimBinning(name='coszen', + ... is_lin=True, num_bins=4, domain=[-1, 0]) + >>> mdb = ebins * czbins + >>> print(mdb) + MultiDimBinning( + OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)), + OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) + ) + + >>> print(mdb.energy) + OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)) + >>> print(mdb[0, 0]) + MultiDimBinning( + OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.0, 1.1220184543019633]GeV (behavior is logarithmic)), + OneDimBinning('coszen', 1 linearly-regular bin with edges at [-1.0, -0.75] (behavior is linear)) + ) + >>> print(mdb.slice(energy=2)) + MultiDimBinning( + OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.2589254117941673, 1.4125375446227544]GeV (behavior is logarithmic)), + OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) + ) + >>> smaller_binning = mdb[0:2, 0:3] + >>> map = smaller_binning.ones(name='my_map') + >>> print(map) + Map(name='my_map', + tex='{\\rm my\\_map}', + full_comparison=False, + hash=None, + parent_indexer=None, + binning=MultiDimBinning( + OneDimBinning('energy', 2 logarithmically-regular bins spanning [1.0, 1.2589254117941673] GeV (behavior is logarithmic)), + OneDimBinning('coszen', 3 linearly-regular bins spanning [-1.0, -0.25] (behavior is linear)) + ), + hist=array([[1., 1., 1.], + [1., 1., 1.]])) + + """ + # pylint: enable=line-too-long + def __init__(self, dimensions, name=None, mask=None): + self.__map_class = None + + if isinstance(dimensions, OneDimBinning): + dimensions = [dimensions] + if not isinstance(dimensions, Sequence): + if isinstance(dimensions, Mapping): + if len(dimensions) == 1 and hasattr(dimensions, 'dimensions'): + dimensions = dimensions['dimensions'] + dimensions = [dimensions] + elif isinstance(dimensions, Iterable): + pass + else: + raise TypeError('`dimensions` unhandled type: %s' + % type(dimensions)) + tmp_dimensions = [] + for obj_num, obj in enumerate(dimensions): + if isinstance(obj, OneDimBinning): + one_dim_binning = obj + elif isinstance(obj, Mapping): + one_dim_binning = OneDimBinning(**obj) + else: + raise TypeError('Argument/object #%d unhandled type: %s' + %(obj_num, type(obj))) + tmp_dimensions.append(one_dim_binning) + self._dimensions = tuple(tmp_dimensions) + self._names = None + self._basenames = None + self._hash = None + self._num_dims = None + self._size = None + self._shape = None + self._hashable_state = None + self._mask_hash = None + self._coord = None + self._name = name + + # Handle masking + self._init_mask(mask) + + + def _init_mask(self, mask) : + ''' + Initialize the bin mask. This can either be specified as: + (1) an array matching the bin dimensions with values True/False (e.g. a `mask`), where False means "masked off" + (2) A list of bin indices to mask off + ''' + + #TODO helper functions: get coords of masked bins, etc + + # Bail out if no mask provided + if mask is None : + self._mask = None + return + + # Check format of input `mask` arg + if isinstance(mask, np.ndarray) and (mask.dtype == bool) : # Is it a boolean array (e.g. a mask)? + + # + # "Mask" case + # + + # Just use the mask as provided + # Do some checks first + assert self.shape == mask.shape + + + else : + + # + # "List of indices" case + # + + # Get the indices + indices = mask + + # Init a mask with all True + mask = np.full(self.shape, True, dtype=bool) + + # Loop over indices and set those mask elements to False + for idx in indices : + try: # Handle index formatting and checks + mask[idx] = False + except ValueError: + raise ValueError(f"Bin mask index {idx} not valid for binning shape {self.shape}") + + # Done, store the mask + self._mask = mask + + + @property + def name(self): + """Name of the dimension""" + return self._name + + + def __repr__(self): + previous_precision = np.get_printoptions()['precision'] + np.set_printoptions(precision=18) + try: + argstrs = [('%s=%r' %item) for item in + self.serializable_state.items()] + r = '%s(%s)' %(self.__class__.__name__, ',\n '.join(argstrs)) + finally: + np.set_printoptions(precision=previous_precision) + return r + + def __str__(self): + b = ' x '.join(['%i (%s)'%(dim.num_bins, dim.name) for dim in self._dimensions]) + return '"%s":\n%s'%(self.name, b) + + def __pretty__(self, p, cycle): + """Method used by the `pretty` library for formatting""" + if cycle: + p.text('%s(...)' % self.__class__.__name__) + else: + p.begin_group(4, '%s([' % self.__class__.__name__) + for n, dim in enumerate(self): + p.breakable() + p.pretty(dim) + if n < len(self)-1: + p.text(',') + p.end_group(4, '])') + + def _repr_pretty_(self, p, cycle): + """Method used by e.g. ipython/Jupyter for formatting""" + return self.__pretty__(p, cycle) + + def __getstate__(self): + """Method invoked during pickling""" + return self.serializable_state + + def __setstate__(self, state): + """Method invoked during unpickling""" + self.__init__(**state) + + @property + def _map_class(self): + if self.__map_class is None: + from pisa.core.map import Map # pylint: disable=wrong-import-position + self.__map_class = Map + return self.__map_class + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + + + Parameters + ---------- + filename : str + Filename; must be either a relative or absolute path (*not + interpreted as a PISA resource specification*) + + **kwargs + Further keyword args are sent to `pisa.utils.jsons.to_json()` + + + See Also + -------- + from_json + Instantiate new object from the file written by this method + pisa.utils.jsons.to_json + + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, resource): + """Instantiate a new MultiDimBinning object from a JSON file. + + The format of the JSON is generated by the `MultiDimBinning.to_json` + method, which converts a MultiDimBinning object to basic types and + numpy arrays are converted in a call to `pisa.utils.jsons.to_json`. + + Parameters + ---------- + resource : str + A PISA resource specification (see pisa.utils.resources) + + See Also + -------- + to_json + pisa.utils.jsons.to_json + + """ + state = jsons.from_json(resource) + return cls(**state)
+ + + @property + def names(self): + """list of strings : names of each dimension contained""" + if self._names is None: + self._names = [dim.name for dim in self] + return self._names + + @property + def basenames(self): + """List of binning names with prefixes and/or suffixes along with any + number of possible separator characters removed. See function + `basename` for detailed specifications.""" + if self._basenames is None: + self._basenames = [b.basename for b in self] + return self._basenames + + @property + def basename_binning(self): + """Identical binning but with dimensions named by their basenames. + Note that the `tex` properties for the dimensions are not carried over + into the new binning.""" + return MultiDimBinning(d.basename_binning for d in self) + + @property + def finite_binning(self): + """Identical binning but with infinities in bin edges replaced by + largest/smallest floating-point numbers representable with the current + pisa.FTYPE.""" + return MultiDimBinning(d.finite_binning for d in self) + + @property + def dimensions(self): + """tuple of OneDimBinning : each dimension's binning in a list""" + return self._dimensions + + @property + def dims(self): + """tuple of OneDimBinning : shortcut for `dimensions`""" + return self._dimensions + +
+[docs] + def iterdims(self): + """Iterator over contained `dimensions`, each a OneDimBinning""" + return iter(self._dimensions)
+ + + @property + def num_dims(self): + """int : number of dimensions""" + if self._num_dims is None: + self._num_dims = len(self._dimensions) + return self._num_dims + + @property + def mask(self): + """array : return the bin mask""" + return self._mask + + @property + def shape(self): + """tuple : shape of binning, akin to `nump.ndarray.shape`""" + if self._shape is None: + self._shape = tuple(b.num_bins for b in self._dimensions) + return self._shape + + @property + def size(self): + """int : total number of bins""" + if self._size is None: + self._size = reduce(mul, self.shape) + return self._size + + @property + def coord(self): + """namedtuple : coordinate for indexing into binning by dim names""" + if self._coord is None: + self._coord = namedtuple('coord', self.names) + return self._coord + + @property + def normalize_values(self): + """bool : Normalize quantities' units prior to hashing""" + nv = [dim.normalize_values for dim in self] + if not all(x == nv[0] for x in nv): + raise ValueError( + 'Contained dimensions have `normalize_values` both True and' + ' False. Set `normalize_values` to either True or False on' + ' this MultiDimBinning object to force consistency among' + ' contained OneDimBinning objects.' + ) + + @normalize_values.setter + def normalize_values(self, b): + for dim in self: + dim.normalize_values = b + + @property + def mask_hash(self): + """Hash value based *solely* upon the mask. + """ + if self._mask_hash is None: + self._mask_hash = hash_obj(self.mask) + return self._mask_hash + + @property + def serializable_state(self): + """Attributes of the object that are stored to disk. Note that + attributes may be returned as references to other objects, so to + prevent external modification of those objects, the user must call + deepcopy() separately on the returned OrderedDict. + + Returns + ------- + state dict : OrderedDict + can be passed to instantiate a new MultiDimBinning via + `MultiDimBinning(**state)` + + """ + + d = OrderedDict({'dimensions': [d.serializable_state for d in self]}) + d['name'] = self.name + d['mask'] = self.mask + return d + + @property + def hashable_state(self): + """Everything necessary to fully describe this object's state. Note + that objects may be returned by reference, so to prevent external + modification, the user must call deepcopy() separately on the returned + OrderedDict. + + Returns + ------- + state : OrderedDict that can be passed to instantiate a new + MultiDimBinning via MultiDimBinning(**state) + + """ + if self._hashable_state is None: + + state = OrderedDict() + # TODO: Shouldn't order matter? + #state['dimensions'] = [self[name]._hashable_state + # for name in sorted(self.names)] + state['dimensions'] = [d.hashable_state for d in self] + state['name'] = self.name + + mask_hash = self.mask_hash + if mask_hash is not None : + state['mask_hash'] = mask_hash + + self._hashable_state = state + + return self._hashable_state + + @property + def normalized_state(self): + """OrderedDict containing normalized (base units, and rounded to + appropriate precision) state attributes used for testing equality + between two objects. + + Use `hashable_state` for faster equality checks and `normalized_state` + for inspecting the contents of each state attribute pre-hashing + """ + state = OrderedDict() + state['dimensions'] = [d.normalized_state for d in self] + state['mask'] = self.mask + return state + + @property + def hash(self): + """Unique hash value for this object""" + if self._hash is None: + self._hash = hash_obj(self.hashable_state) + return self._hash + + def __hash__(self): + return self.hash + + @property + def edges_hash(self): + """int : hash on the list of hashes for each dimension's edge values""" + return hash_obj([d.edges_hash for d in self]) + + @property + def bin_edges(self): + """Return a list of the contained dimensions' bin_edges that is + compatible with the numpy.histogramdd `hist` argument.""" + return [d.bin_edges for d in self] + + @property + def is_irregular(self): + """Returns `True` if any of the 1D binnings is irregular.""" + return np.any([d.is_irregular for d in self]) + + @property + def is_lin(self): + """Returns `True` iff all dimensions are linear.""" + return np.all([d.is_lin for d in self]) + + @property + def is_log(self): + """Returns `True` iff all dimensions are log.""" + return np.all([d.is_log for d in self]) + + @property + def domains(self): + """Return a list of the contained dimensions' domains""" + return [d.domain for d in self] + + @property + def midpoints(self): + """Return a list of the contained dimensions' midpoints""" + return [d.midpoints for d in self] + + @property + def weighted_centers(self): + """Return a list of the contained dimensions' weighted_centers (e.g. + equidistant from bin edges on logarithmic scale, if the binning is + logarithmic; otherwise linear). Access `midpoints` attribute for + always-linear alternative.""" + return [d.weighted_centers for d in self] + + @property + def num_bins(self): + """ + Return a list of the contained dimensions' num_bins. + Note that this does not accpunt for any bin mask (since it is computed per dimension) + """ + return [d.num_bins for d in self] + + @property + def tot_num_bins(self): + """ + Return total number of bins. + If a bin mask is used, this will only count bins that are not masked off + """ + if self.mask is None : + return np.product(self.shape) + else : + return np.sum(self.mask.astype(int)) + + @property + def units(self): + """list : Return a list of the contained dimensions' units""" + return [d.units for d in self] + + @units.setter + def units(self, *args): + """sequence or *args containing units for each contained dim""" + self.ito(*args[0]) + + @property + def inbounds_criteria(self): + """Return string boolean criteria indicating e.g. an event falls within + the limits of the defined binning. + + This can be used for e.g. applying cuts to events. + + See Also + -------- + pisa.core.events.keepEventsInBins + + """ + crit = '(%s)' %(' & '.join(dim.inbounds_criteria for dim in self)) + return crit + +
+[docs] + def index(self, dim, use_basenames=False): + """Find dimension implied by `dim` and return its integer index. + + Parameters + ---------- + dim : int, string, OneDimBinning + An integer index, dimesion name, or identical OneDimBinning object + to locate within the contained dimensions + + use_basenames : bool + Dimension names are only compared after pre/suffixes are stripped, + allowing for e.g. `dim`='true_energy' to find 'reco_energy'. + + Returns + ------- + idx : integer + index of the dimension corresponding to `dim` + + Raises + ------ + ValueError if `dim` cannot be found + + """ + names = self.basenames if use_basenames else self.names + if isinstance(dim, OneDimBinning): + d = dim.basename if use_basenames else dim.name + try: + idx = names.index(d) + except ValueError: + what = 'index' + raise ValueError( + 'Dimension %s not present. Valid dimensions are in range %s' + %(d, [0, len(self)-1]) + ) + elif isinstance(dim, str): + d = basename(dim) if use_basenames else dim + try: + idx = names.index(d) + except ValueError: + what = 'basename' if use_basenames else 'name' + raise ValueError( + "Dimension %s '%s' not present. Valid dimension %ss are %s" + %(what, d, what, names) + ) + elif isinstance(dim, int): + if dim < 0 or dim >= len(self): + raise ValueError( + 'Dimension %d does not exist. Valid dimensions indices' + ' are in the range %s.' %(dim, [0, len(self)-1]) + ) + idx = dim + else: + raise TypeError('Unhandled type for `dim`: "%s"' %type(dim)) + return idx
+ + +
+[docs] + def remove(self, dims): + """Remove dimensions. + + Parameters + ---------- + dims : str, int, or sequence thereof + Dimensions to be removed + + Returns + ------- + binning : MultiDimBinning + Identical binning as this but with `dims` removed. + + """ + if isinstance(dims, (str, int)): + dims = [dims] + + keep_idx = list(range(len(self))) + for dim in dims: + idx = self.index(dim) + keep_idx.remove(idx) + + keep_dims = [deepcopy(self.dimensions[idx]) for idx in keep_idx] + return MultiDimBinning(keep_dims)
+ + + # TODO: add *args to handle positional indexing (?) (also would need to + # add this to `slice` method if implemented. +
+[docs] + def indexer(self, **kwargs): + """Any dimension index/slice not specified by name in kwargs will + default to ":" (all elements). + + Parameters + --------- + **kwargs + kwargs are names of dimension(s) and assigned to these are either + an integer index into that dimension or a Python `slice` object for + that dimension. See examples below for details. + + Returns + ------- + indexer : tuple + + See Also + -------- + broadcast + Assignment of a one-dimensional array to a higher-dimensional array + is simplified greatly by using `broadcast` in conjunction with + `indexer` or `pisa.core.map.Map.slice`. See examples in + docs for `broadcast`. + broadcaster + Similar to `broadcast`, but returns a tuple that can be applied to + broadcast any one-dimensional array. + slice + Apply the `indexer` returned by this method to this MultiDimBinning + object, returning a new MultiDimBinning object. + pisa.core.map.Map.slice + Same operation, but slices a Map object by dimension-name + (internally, calls `indexer`). + + Examples + -------- + >>> from pisa import ureg + >>> from pisa.core.binning import MultiDimBinning, OneDimBinning + >>> ebins = OneDimBinning(name='energy', is_log=True, + ... num_bins=40, domain=[1, 80]*ureg.GeV) + >>> czbins = OneDimBinning(name='coszen', + ... is_lin=True, num_bins=4, domain=[-1, 0]) + >>> mdb = ebins * czbins + >>> print(mdb.indexer(energy=0)) + (0, slice(None, None, None)) + + Omitting a dimension (coszen in the above) is equivalent to slicing + with a colon (i.e., `(0, slice(None))`): + + >>> print(mdb.indexer(energy=0, coszen=slice(None))) + (0, slice(None, None, None)) + + >>> print(mdb.indexer(energy=slice(None), coszen=1)) + (slice(None, None, None), 1) + + Now create an indexer to use on a Numpy array: + + >>> x = np.random.RandomState(0).uniform(size=mdb.shape) + >>> indexer = mdb.indexer(energy=slice(0, 5), coszen=1) + >>> print(x[indexer]) + [0.71518937 0.64589411 0.38344152 0.92559664 0.83261985] + + """ + indexer = [] + for dim in self.dims: + if dim.name in kwargs: + val = kwargs[dim.name] + if isinstance(val, str): + val = dim.index(val) + indexer.append(val) + else: + indexer.append(slice(None)) + return tuple(indexer)
+ + +
+[docs] + def slice(self, **kwargs): + """Slice the binning by dimension name. Any dimension/index not + specified by name in kwargs will default to ":" (all bins). + + Uses `indexer` internally to define the indexing tuple. + + Returns + ------- + sliced_binning : MultiDimBinning + + """ + return self[self.indexer(**kwargs)]
+ + +
+[docs] + def broadcast(self, a, from_dim, to_dims): + """Take a one-dimensional array representing one input dimension and + broadcast it across some number of output dimensions. + + Parameters + ---------- + a : 1D array + Data from the `from_dim` dimension. `a` must have same length as + the dimension it comes from (or Numpy must be able to automatically + cast it into this dimension). + + from_dim : string + Name of dimension that the data in `a` comes from. + + to_dims : string or iterable of strings + Dimension(s) to cast `a` into. + + Returns + ------- + a_broadcast : array + Broadcast version of `a` + + See Also + -------- + broadcaster + The method used internally to derive the tuple used to broadcast + the array. This can be used directly to return the broadcaster for + use on other Maps or Numpy arrays. + + """ + assert isinstance(a, np.ndarray) + a_shape = a.shape + assert len(a_shape) == 1 + return a[self.broadcaster(from_dim=from_dim, to_dims=to_dims)]
+ + +
+[docs] + def broadcaster(self, from_dim, to_dims): + """Generate an indexder that, if applied to a one-dimensional array + representing data from one dimension, broadcasts that array into some + number of other dimensions. + + Parameters + ---------- + from_dim : string + Name of dimension that the data in comes from. + + to_dims : string or iterable of strings + Dimension(s) to cast into. + + Returns + ------- + bcast : tuple + Tuple that can be applied to a Numpy array for purposes of + broadcasting it. E.g. use as `np.array([0,1,2])[bcast]`. + + """ + if isinstance(to_dims, str): + to_dims = [to_dims] + + bcast = [] + for name in self.names: + if name == from_dim: + bcast.append(slice(None)) + elif name in to_dims: + bcast.append(np.newaxis) + + return tuple(bcast)
+ + +
+[docs] + def iterbins(self): + """Return an iterator over each N-dimensional bin. The elments returned + by the iterator are each a MultiDimBinning, just containing a single + bin. + + Returns + ------- + bin_iterator + + See Also + -------- + index2coord + convert the (flat) index to multi-dimensional coordinate, which is + useful when using e.g. `enumerate(iterbins)` + + """ + return (MultiDimBinning(dims) for dims in product(*self.dims))
+ + +
+[docs] + def iteredgetuples(self): + """Return an iterator over each bin's edges. The elments returned by + the iterator are a tuple of tuples, where the innermost tuples + correspond to each dimension (in the order they're defined here). + + Units are stripped prior to iteration for purposes of speed. + + Note that this method is, according to one simple test, about 5000x + faster than `iterbins`. + + Returns + ------- + edges_iterator + + See Also + -------- + iterbins + Similar, but returns a OneDimBinning object for each bin. This is + slower that `iteredgetuples` but easier to work with. + + """ + return product(*(dim.iteredgetuples() for dim in self.dims))
+ + +
+[docs] + def itercoords(self): + """Return an iterator over each N-dimensional coordinate into the + binning. The elments returned by the iterator are each a namedtuple, + which can be used to directly index into the binning. + + Returns + ------- + coord_iterator + + See Also + -------- + iterbins + Iterator over each bin + index2coord + convert the (flat) index to multi-dimensional coordinate, which is + useful when using e.g. `enumerate(iterbins)` + + """ + return (self.index2coord(i) for i in range(self.size))
+ + +
+[docs] + def index2coord(self, index): + """Convert a flat index into an N-dimensional bin coordinate. + + Useful in conjunction with `enumerate(iterbins)` + + Parameters + ---------- + index : integer + The flat index + + Returns + ------- + coord : self.coord namedtuple + Coordinates are in the same order as the binning is here defined + and each coordinate is named by its corresponding dimension. + Therefore integer indexing into `coord` as well as named indexing + are possible. + + """ + coord = [] + quot = index + for dim_length in self.shape[::-1]: + quot, rem = divmod(quot, dim_length) + coord.append(rem) + return self.coord(*coord[::-1]) # pylint: disable=not-callable
+ + + # TODO: examples! +
+[docs] + def reorder_dimensions(self, order, use_deepcopy=False, + use_basenames=False): + """Return a new MultiDimBinning object with dimensions ordered + according to `order`. + + Parameters + ---------- + order : MultiDimBinning or sequence of string, int, or OneDimBinning + Order of dimensions to use. Strings are interpreted as dimension + basenames, integers are interpreted as dimension indices, and + OneDimBinning objects are interpreted by their `basename` + attributes (so e.g. the exact binnings in `order` do not have to + match this object's exact binnings; only their basenames). Note + that a MultiDimBinning object is a valid sequence type to use for + `order`. + + Notes + ----- + Dimensions specified in `order` that are not in this object are + ignored, but dimensions in this object that are missing in `order` + result in an error. + + Returns + ------- + MultiDimBinning object with reordred dimensions. + + Raises + ------ + ValueError if dimensions present in this object are missing from + `order`. + + Examples + -------- + >>> b0 = MultiDimBinning(...) + >>> b1 = MultiDimBinning(...) + >>> b2 = b0.reorder_dimensions(b1) + >>> print(b2.binning.names) + + """ + if hasattr(order, 'binning') and isinstance(order.binning, + MultiDimBinning): + order = order.binning.dims + elif isinstance(order, MultiDimBinning): + order = order.dims + + indices = [] + for dim in order: + try: + idx = self.index(dim, use_basenames=use_basenames) + except ValueError: + continue + indices.append(idx) + if set(indices) != set(range(len(self))): + raise ValueError( + 'Invalid `order`: Only a subset of the dimensions present' + ' were specified. `order`=%s, but dimensions=%s' + %(order, self.names) + ) + if use_deepcopy: + new_dimensions = [deepcopy(self._dimensions[n]) for n in indices] + else: + new_dimensions = [self._dimensions[n] for n in indices] + new_binning = MultiDimBinning(new_dimensions) + return new_binning
+ + +
+[docs] + def is_compat(self, other): + """Check if another binning is compatible with this binning. + + Note that for now, only downsampling is allowed from other to this, and + not vice versa. + + Parameters + ---------- + other : MultiDimBinning + + Returns + ------- + is_compat : bool + + """ + if not set(self.names) == set(other.names): + logging.trace('dimension names do not match') + return False + + for name in self.names: + if not self[name].is_compat(other[name]): + return False + + return True
+ + +
+[docs] + def oversample(self, *args, **kwargs): + """Return a MultiDimBinning object oversampled relative to this one. + + Parameters + ---------- + *args : each factor an int + Factors by which to oversample the binnings. There must either be + one factor (one arg)--which will be broadcast to all dimensions--or + there must be as many factors (args) as there are dimensions. + If positional args are specified (i.e., non-kwargs), then kwargs + are forbidden. For more detailed control, use keyword arguments to + specify the dimension(s) to be oversampled and their factors. + + **kwargs : name=factor pairs + Dimensions not specified default to oversample factor of 1 (i.e., + no oversampling) + + Returns + ------- + new_binning : MultiDimBinning + New binning, oversampled from the current binning. + + Notes + ----- + You can either specify oversmapling by passing in args (ordered values, + no keywords) or kwargs (order doesn't matter, but uses keywords), but + not both. + + Specifying simple args (no keywords) requires either a single scalar + (in which case all dimensions will be oversampled by the same factor) + or one scalar per dimension (which oversamples the dimensions in the + order specified). + + Specifying keyword args is far more explicit (and general), where each + dimension's oversampling can be specified by name=factor pairs, but not + every dimension must be specified (where no oversampling is applied to + unspecified dimensions). + + See Also + -------- + downsample + Similar to this, but downsample the MultiDimBinning + + OneDimBinning.oversample + Oversample a OneDimBinning object; this method is called to + actually perform the oversampling for each dimension within this + MultiDimBinning object + + OneDimBinning.downsample + Same but downsample for OneDimBinning + + Examples + -------- + >>> x = OneDimBinning('x', bin_edges=[0, 1, 2]) + >>> y = OneDimBinning('y', bin_edges=[0, 20]) + >>> mdb = x * y + + The following are all equivalent: + + >>> print(mdb.oversample(2)) + MultiDimBinning( + OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), + OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) + ) + >>> print(mdb.oversample(2, 2)) + MultiDimBinning( + OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), + OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) + ) + >>> print(mdb.oversample(x=2, y=2)) + MultiDimBinning( + OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), + OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) + ) + + But with kwargs, you can specify only the dimensions you want to + oversample, and the other dimension(s) remain unchanged: + + >>> print(mdb.oversample(y=5)) + MultiDimBinning( + OneDimBinning('x', 2 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), + OneDimBinning('y', 5 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) + ) + + """ + + assert self.mask is None, "`oversample` function does not currenty support bin masking" + + if args: + assert len(args) in [1, len(self)] + elif kwargs: + for name in self.names: + if name not in kwargs: + kwargs[name] = 1 + factors = self._args_kwargs_to_list(*args, **kwargs) + new_binning = [dim.oversample(f) + for dim, f in zip(self._dimensions, factors)] + return MultiDimBinning(new_binning)
+ + +
+[docs] + def downsample(self, *args, **kwargs): + """Return a Binning object downsampled relative to this binning. + + Parameters + ---------- + *args : each factor an int + Factors by which to downsample the binnings. There must either be + one factor (one arg)--which will be broadcast to all dimensions--or + there must be as many factors (args) as there are dimensions. + If positional args are specified (i.e., non-kwargs), then kwargs + are forbidden. + + **kwargs : name=factor pairs + + Returns + ------- + new_binning : MultiDimBinning + New binning, downsampled from the current binning. + + Notes + ----- + Can either specify downsampling by passing in args (ordered values, no + keywords) or kwargs (order doesn't matter, but uses keywords), but not + both. + + See Also + -------- + oversample + Oversample (upsample) a the MultiDimBinning + + OneDimBinning.downsample + The method actually called to perform the downsampling for each + OneDimBinning within this MultiDimBinning object. + + OneDimBinning.oversample + Same, but oversample (upsample) a OneDimBinning object + + """ + + assert self.mask is None, "`downsample` function does not currenty support bin masking" + + if args: + assert len(args) in [1, len(self)] + elif kwargs: + for name in self.names: + if name not in kwargs: + kwargs[name] = 1 + factors = self._args_kwargs_to_list(*args, **kwargs) + new_binning = [dim.downsample(f) + for dim, f in zip(self._dimensions, factors)] + return MultiDimBinning(new_binning)
+ + +
+[docs] + def assert_array_fits(self, array): + """Check if a 2D array of values fits into the defined bins (i.e., has + the exact shape defined by this binning). + + Parameters + ---------- + array : 2D array (or sequence-of-sequences) + + Returns + ------- + fits : bool, True if array fits or False otherwise + + Raises + ------ + ValueError if array shape does not match the binning shape + + """ + if array.shape != self.shape: + raise ValueError( + 'Array shape %s does not match binning shape %s' + % (array.shape, self.shape) + )
+ + +
+[docs] + def assert_compat(self, other): + """Check if a (possibly different) binning can map onto the defined + binning. Allows for simple re-binning schemes (but no interpolation). + + Parameters + ---------- + other : Binning or container with attribute "binning" + + Returns + ------- + compat : bool + + """ + if not isinstance(other, MultiDimBinning): + for val in other.__dict__.values(): + if isinstance(val, MultiDimBinning): + other = val + break + assert isinstance(other, MultiDimBinning), str(type(other)) + if other == self: + return True + for my_dim, other_dim in zip(self, other): + if not my_dim.assert_compat(other_dim): + return False + return True
+ + +
+[docs] + def squeeze(self): + """Remove any singleton dimensions (i.e. that have only a single bin). + Analagous to `numpy.squeeze`. + + Returns + ------- + MultiDimBinning with only non-singleton dimensions + + """ + + assert self.mask is None, "`squeeze` function does not currenty support bin masking" + + return MultiDimBinning(d for d in self if len(d) > 1)
+ + + def _args_kwargs_to_list(self, *args, **kwargs): + """Take either args or kwargs (but not both) and convert into a simple + sequence of values. Broadcasts a single arg to all dimensions.""" + if not np.logical_xor(len(args), len(kwargs)): + raise ValueError('Either args (values specified by order and not' + ' specified by name) or kwargs (values specified' + ' by name=value pairs) can be used, but not' + ' both.') + + if len(args) == 1: + return [args[0]]*self.num_dims + + if len(args) > 1: + if len(args) != self.num_dims: + raise ValueError('Specified %s args, but binning is' + ' %s-dim.' %(len(args), self.num_dims)) + return args + + if set(kwargs.keys()) != set(self.names): + raise ValueError('Specified dimensions "%s" but this has' + ' dimensions "%s"' %(sorted(kwargs.keys()), + self.names)) + return [kwargs[name] for name in self.names] + +
+[docs] + def ito(self, *args, **kwargs): + """Convert units in-place. Cf. Pint's `ito` method.""" + units_list = self._args_kwargs_to_list(*args, **kwargs) + for dim, units in zip(self.iterdims(), units_list): + dim.ito(units)
+ + +
+[docs] + def to(self, *args, **kwargs): # pylint: disable=invalid-name + """Convert the contained dimensions to the passed units. Unspecified + dimensions will be omitted. + + """ + units_list = self._args_kwargs_to_list(*args, **kwargs) + new_binnings = [dim.to(units) + for dim, units in zip(self.iterdims(), units_list)] + return MultiDimBinning(new_binnings)
+ + +
+[docs] + def meshgrid(self, entity, attach_units=True): + """Apply NumPy's meshgrid method on various entities of interest. + + Parameters + ---------- + entity : string + Can be any attribute of OneDimBinning that returns a 1D array with + units. E.g., one of 'midpoints', 'weighted_centers', 'bin_edges', + 'bin_widths', or 'weighted_bin_widths' + + attach_units : bool + Whether to attach units to the result (can save computation time by + not doing so). + + Returns + ------- + [X1, X2,..., XN] : list of numpy ndarray or Pint quantities of the same + One ndarray or quantity is returned per dimension; see docs for + `numpy.meshgrid` for details + + See Also + -------- + numpy.meshgrid + + """ + entity = entity.lower().strip() + + arrays = [] + units = [] + for dim in self.iterdims(): + try: + quantity_array = getattr(dim, entity) + except AttributeError: + logging.error( + "Dimension %s does not contain entity '%s'", dim.name, entity + ) + raise + if attach_units: + units.append(quantity_array.units) + arrays.append(quantity_array.magnitude) + + # NOTE: numpy versions prior to 1.13.0, meshgrid returned float64 even + # if inputs are float32 to mesghrid. Use `astype` as a fix. Note that + # since `astype` already creates a copy of the array even if dtype of + # input is the same, setting `copy` to False is ok in the argument to + # meshgrid; i.e., if a user modifies an element of the returned array, + # it should not affect the original `entity` from which the meshgrid + # was generated. + mg = [a.astype(FTYPE) for a in np.meshgrid(*arrays, indexing='ij', copy=False)] + + if attach_units: + return [m*u for m, u in zip(mg, units)] + + return mg
+ + + # TODO: modify technique depending upon grid size for memory concerns, or + # even take a `method` argument to force method manually. +
+[docs] + def bin_volumes(self, attach_units=True): + """Bin "volumes" defined in `num_dims`-dimensions + + Parameters + ---------- + attach_units : bool + Whether to attach pint units to the resulting array + + Returns + ------- + volumes : array + Bin volumes + + """ + meshgrid = self.meshgrid(entity='bin_widths', attach_units=False) + volumes = reduce(mul, meshgrid) + if attach_units: + volumes *= reduce(mul, (ureg(str(d.units)) for d in self.iterdims())) + return volumes
+ + +
+[docs] + def weighted_bin_volumes(self, attach_units=True): + """Bin "volumes" defined in `num_dims`-dimensions, but unlike + `bin_volumes`, the volume is evaluated in the space of the binning. + E.g., logarithmic bins have `weighted_bin_volumes` of equal size in + log-space. + + Parameters + ---------- + attach_units : bool + Whether to attach pint units to the resulting array + + Returns + ------- + volumes : array + Bin volumes + + """ + meshgrid = self.meshgrid(entity='weighted_bin_widths', attach_units=False) + volumes = reduce(mul, meshgrid) + if attach_units: + # NOTE we use the units from `weighted_bin_widths` because these + # can be different from those of the dimension + volumes *= reduce( + mul, + (ureg(str(d.weighted_bin_widths.units)) for d in self.iterdims()), + ) + return volumes
+ + +
+[docs] + def empty(self, name, map_kw=None, **kwargs): + """Return a Map whose hist is an "empty" numpy ndarray with same + dimensions as this binning. + + The contents are not _actually_ empty, just undefined. Therefore be + careful to populate the array prior to using its contents. + + Parameters + ---------- + name : string + Name of the Map + + map_kw : None or dict + keyword arguments sent to instantiate the new Map (except `name` + which is specified above) + + **kwargs + keyword arguments passed on to numpy.empty() (except `shape` which + must be omitted) + + Returns + ------- + map : Map + + """ + assert 'shape' not in kwargs + if map_kw is None: + map_kw = {} + if 'dtype' not in kwargs: + kwargs['dtype'] = FTYPE + hist = np.empty(self.shape, **kwargs) + return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable
+ + +
+[docs] + def zeros(self, name, map_kw=None, **kwargs): + """Return a numpy ndarray filled with 0's with same dimensions as this + binning. + + Parameters + ---------- + name : string + Name of the map + + map_kw : None or dict + keyword arguments sent to instantiate the new Map (except `name` + which is specified above) + + **kwargs + keyword arguments passed on to numpy.zeros() (except `shape` which + must be omitted) + + Returns + ------- + map : Map + + """ + assert 'shape' not in kwargs + if map_kw is None: + map_kw = {} + if 'dtype' not in kwargs: + kwargs['dtype'] = FTYPE + hist = np.zeros(self.shape, **kwargs) + return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable
+ + +
+[docs] + def ones(self, name, map_kw=None, **kwargs): + """Return a numpy ndarray filled with 1's with same dimensions as this + binning. + + Parameters + ---------- + name : string + Name of the map + + map_kw : None or dict + keyword arguments sent to instantiate the new Map (except `name` + which is specified above) + + **kwargs + keyword arguments passed on to numpy.ones() (except `shape` which + must be omitted) + + Returns + ------- + map : Map + + """ + assert 'shape' not in kwargs + if map_kw is None: + map_kw = {} + if 'dtype' not in kwargs: + kwargs['dtype'] = FTYPE + hist = np.ones(self.shape, **kwargs) + return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable
+ + +
+[docs] + def full(self, fill_value, name, map_kw=None, **kwargs): + """Return a map whose `hist` is filled with `fill_value` of same + dimensions as this binning. + + Parameters + ---------- + fill_value + Value with which to fill the map + + name : string + Name of the map + + map_kw : None or dict + keyword arguments sent to instantiate the new Map (except `name` + which is specified above) + + **kwargs + keyword arguments passed on to numpy.fill_value() (except `shape`, + which must be omitted) + + Returns + ------- + map : Map + + """ + assert 'shape' not in kwargs + if map_kw is None: + map_kw = {} + if 'dtype' not in kwargs: + kwargs['dtype'] = FTYPE + hist = np.full(self.shape, fill_value, **kwargs) + return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable
+ + + def __contains__(self, x): + if isinstance(x, OneDimBinning): + return x in self.dims + if isinstance(x, str): + return x in self.names + return False + + def __eq__(self, other): + if not isinstance(other, MultiDimBinning): + return False + return recursiveEquality(self.hashable_state, other.hashable_state) + + # TODO: remove this method, as it should just be considered an outer + # product to increase dimensionality (i.e. the "*" operator, or __mul__ + # makes more sense than "+" or __add__)? + def __add__(self, other): + other = MultiDimBinning(other) + return MultiDimBinning(chain(self, other)) + + def __mul__(self, other): + if isinstance(other, (Mapping, OneDimBinning)): + other = [other] + other = MultiDimBinning(other) + return MultiDimBinning(chain(self, other)) + + # TODO: should __getattr__ raise its own exception if the attr is not found + # as a dimension rather than call parent's __getattribute__ method, since + # presumably that already failed? + def __getattr__(self, attr): + # If youve gotten here, __getattribute__ has failed. Try to get the + # attr as a contained dimension: + try: + return self.__getitem__(attr) + except (KeyError, ValueError): + # If that failed, re-run parent's __getattribute__ which will raise + # an appropriate exception + return super().__getattribute__(attr) + + # TODO: refine handling of ellipsis such that the following work as in + # Numpy: + # * ['dim0', 'dim3', ...] + # * ['dim0', 3, ...] + # * [...] + # * [0, ...] + # * [..., 2] + # * [..., 2, 1, 4] + def __getitem__(self, index): + """Interpret indices as indexing bins and *not* bin edges. + Indices refer to dimensions in same order they were specified at + instantiation, and all dimensions must be present. + + Parameters + ---------- + index : str, int, len-N-sequence of ints, or len-N-sequence of slices + If str is passed: Return the binning corresponding to the named + dimension + + If an integer is passed: + * If num_dims is 4, `index` indexes into the bins of the sole + OneDimBinning. The bin is returned. + * If num_dims > 1, `index` indexes which contained OneDimBinning + object to return. + If a len-N-sequence of integers or slices is passed, dimensions are + indexed by these in the order in which dimensions are stored + internally. + + Returns + ------- + A MultiDimBinning object new Binning object but with the bins specified + by `index`. Whether or not behavior is logarithmic is unchanged. + + """ + + # If ellipsis, return everything + if index is Ellipsis: + return self + + # If arg is a string, it should specify a dimension + # Check if it doesn, and if so return that OneDimBinning for that dimension + if isinstance(index, str): + + # Check there is no mask defined (a mask does not make sense on a per dimension basis, + # so cannot apply this operation when masking is involved) + #TODO Removed for now as causes issues, need to come back to think about this... + # if self.mask is not None : + # raise ValueError("Cannot extract a single binning dimension when a mask is used") #TODO This gets called duign deepcopy with index==__deppcopy__??!?!? If I assert instead of using ValueError theneverything fails. Not sure what is going on here... + + # Find the dimension + for d in self.iterdims(): + if d.name == index: + return d + raise ValueError(f"index '{index}' not in {self.names}") + + # TODO: implement a "linearization" like np.flatten() to iterate + # through each bin individually without hassle for the user... + #if self.num_dims == 1 and np.isscalar(index): + # return self._dimensions[0] + + # If here, the index is a numerical, numpy-comaptible index + # Do some pre-processing on it to get it in the right format... + if isinstance(index, Iterable) and not isinstance(index, Sequence): + index = list(index) + + if not isinstance(index, Sequence): + index = [index] + + # Turn any inetger indices into an equivalent single element slice + # This ensures the array dimensionality is maintained + + if isinstance(index, tuple): + index = list(index) + + for i, idx in enumerate(index): + if isinstance(idx, int) and idx >= 0 : index[i] = slice(idx, idx+1, None) + elif isinstance(idx, int) and idx < 0 : index[i] = slice(idx+1, idx, None) + elif isinstance(idx, slice): index[i] = idx + else: raise ValueError('Binning idx is %s, int or slice is needed'%idx) + + # Get the new binning, based on the index + input_dim = len(index) + if input_dim != self.num_dims: + raise ValueError('Binning is %dD, but %dD indexing was passed' + %(self.num_dims, input_dim)) + + new_binning = {'dimensions': [dim[idx] for dim, idx in + zip(self.iterdims(), index)]} + + # Also update mask, if there is one + new_mask = None if self.mask is None else self.mask[index] + + return MultiDimBinning(**new_binning, mask=new_mask) + + def __iter__(self): + """Iterate over dimensions. Use `iterbins` to iterate over bins.""" + return iter(self._dimensions) + + def __len__(self): + return self.num_dims + + def __ne__(self, other): + return not self.__eq__(other)
+ + + +
+[docs] +def test_OneDimBinning(): + """Unit tests for OneDimBinning class""" + # pylint: disable=line-too-long, wrong-import-position + import pickle + import os + import shutil + import tempfile + # needed so that eval(repr(b)) works + from numpy import array, float32, float64 # pylint: disable=unused-variable + + b1 = OneDimBinning(name='true_energy', num_bins=40, is_log=True, + domain=[1, 80]*ureg.GeV, tex=r'E_{\rm true}', + bin_names=[str(i) for i in range(40)]) + b2 = OneDimBinning(name='coszen', num_bins=40, is_lin=True, + domain=[-1, 1], bin_names=None, + tex=r'\cos\theta') + b3 = OneDimBinning(name='reco_energy', num_bins=40, is_log=True, + domain=[1, 80]*ureg.GeV, tex=r'E_{\rm reco}', + bin_names=[str(i) for i in range(40)]) + + # Test label + _ = b1.label + _ = b1.label + + assert b1.basename_binning == b1.basename_binning + assert b1.basename_binning == b3.basename_binning + assert b1.basename_binning != b2.basename_binning + + # Oversampling/downsampling + b1_over = b1.oversample(2) + assert b1_over.is_bin_spacing_log_uniform(b1_over.bin_edges) + b1_down = b1.downsample(2) + assert b1_down.is_bin_spacing_log_uniform(b1_down.bin_edges) + assert b1_down.is_compat(b1) + assert b1.is_compat(b1_over) + assert b1_down.is_compat(b1_over) + + # Bin width consistency + assert np.isclose( + np.sum(b1_over.bin_widths.m), + np.sum(b1.bin_widths.m), + **ALLCLOSE_KW, + ) + assert np.isclose( + np.sum(b1_down.bin_widths.m), + np.sum(b1.bin_widths.m), + **ALLCLOSE_KW, + ) + assert np.isclose( + np.sum(b1_over.bin_widths.m), + np.sum(b1_down.bin_widths.m), + **ALLCLOSE_KW, + ) + # Weighted bin widths must also sum up to the same total width + assert np.isclose( + np.sum(b1_over.weighted_bin_widths.m), + np.sum(b1.weighted_bin_widths.m), + **ALLCLOSE_KW, + ) + assert np.isclose( + np.sum(b1_down.weighted_bin_widths.m), + np.sum(b1.weighted_bin_widths.m), + **ALLCLOSE_KW, + ) + assert np.isclose( + np.sum(b1_over.weighted_bin_widths.m), + np.sum(b1_down.weighted_bin_widths.m), + **ALLCLOSE_KW, + ) + + logging.debug('len(b1): %s', len(b1)) + logging.debug('b1: %s', b1) + logging.debug('b2: %s', b2) + logging.debug('b1.oversample(10): %s', b1.oversample(10)) + logging.debug('b1.oversample(1): %s', b1.oversample(1)) + # Slicing + logging.debug('b1[1:5]: %s', b1[1:5]) + logging.debug('b1[:]: %s', b1[:]) + logging.debug('b1[-1]: %s', b1[-1]) + logging.debug('b1[:-1]: %s', b1[:-1]) + logging.debug('copy(b1): %s', copy(b1)) + logging.debug('deepcopy(b1): %s', deepcopy(b1)) + # Indexing by Ellipsis + assert b1[...] == b1 + # Pickling + s = pickle.dumps(b1, pickle.HIGHEST_PROTOCOL) + b1_loaded = pickle.loads(s) + s = pickle.dumps(b1[0], pickle.HIGHEST_PROTOCOL) + b1_loaded = pickle.loads(s) + assert b1_loaded == b1[0] + + try: + b1[-1:-3] + except ValueError: + pass + else: + assert False + + b3 = OneDimBinning(name='distance', num_bins=10, is_log=True, + domain=[0.1, 10]*ureg.m) + b4 = OneDimBinning(name='distance', num_bins=10, is_log=True, + domain=[1e5, 1e7]*ureg.um) + _ = hash_obj(b3) + _ = b3.hash + _ = hash(b3) + _ = hash_obj(b3[0]) + _ = b3[0].hash # pylint: disable=no-member + _ = hash(b3[0]) + + b3.normalize_values = True + b4.normalize_values = True + + _ = hash_obj(b3) + _ = b3.hash + _ = hash(b3) + _ = hash_obj(b3[0]) + _ = b3[0].hash # pylint: disable=no-member + _ = hash(b3[0]) + + # Without rounding, converting bin edges to base units yields different + # results due to finite precision effects + assert np.any(normQuant(b3.bin_edges, sigfigs=None) + != normQuant(b4.bin_edges, sigfigs=None)) + + # Normalize function should take care of this + assert np.all(normQuant(b3.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True) + == normQuant(b4.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True)), \ + 'normQuant(b3.bin_edges)=\n%s\nnormQuant(b4.bin_edges)=\n%s' \ + %(normQuant(b3.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True), + normQuant(b4.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True)) + + # And the hashes should be equal, reflecting the latter result + assert b3.hash == b4.hash, \ + '\nb3=%s\nb4=%s' % (b3.hashable_state, b4.hashable_state) + assert b3.hash == b4.hash, 'b3.hash=%s; b4.hash=%s' %(b3.hash, b4.hash) + + s = pickle.dumps(b3, pickle.HIGHEST_PROTOCOL) + b3_loaded = pickle.loads(s) + assert b3_loaded == b3 + + testdir = tempfile.mkdtemp() + try: + for b in [b1, b2, b3, b4]: + assert eval(repr(b)) == b, repr(b) # pylint: disable=eval-used + b_file = os.path.join(testdir, 'one_dim_binning.json') + b.to_json(b_file, warn=False) + b_ = OneDimBinning.from_json(b_file) + assert b_ == b, 'b=\n%s\nb_=\n%s' %(b, b_) + jsons.to_json(b, b_file, warn=False) + b_ = OneDimBinning.from_json(b_file) + assert b_ == b, 'b=\n%s\nb_=\n%s' %(b, b_) + + # Had bug where datastruct containing MultiDimBinning failed to be + # saved. # Test tuple containing list containing OrderedDict + # containing OneDimBinning here. + struct = ([OrderedDict(odb=b)],) + jsons.to_json(struct, b_file, warn=False) + loaded = jsons.from_json(b_file) + b_ = OneDimBinning(**loaded[0][0]['odb']) + assert b_ == b + + # Now try with pickle + b_file = os.path.join(testdir, 'one_dim_binning.pkl') + with open(b_file, 'wb') as fobj: + pickle.dump(struct, fobj, protocol=pickle.HIGHEST_PROTOCOL) + with open(b_file, 'rb') as fobj: + loaded = pickle.load(fobj) + b_ = loaded[0][0]['odb'] + assert b_ == b + + except: + logging.error('b that failed: %s', b) + raise + finally: + shutil.rmtree(testdir, ignore_errors=True) + + logging.info('<< PASS : test_OneDimBinning >>')
+ + + +
+[docs] +def test_MultiDimBinning(): + """Unit tests for MultiDimBinning class""" + # pylint: disable=wrong-import-position + import pickle + import os + import shutil + import tempfile + import time + import pytest + # needed so that eval(repr(mdb)) works + from numpy import array, float32, float64 # pylint: disable=unused-variable + + b1 = OneDimBinning(name='energy', num_bins=40, is_log=True, + domain=[1, 80]*ureg.GeV) + b2 = OneDimBinning(name='coszen', num_bins=40, is_lin=True, + domain=[-1, 1]) + mdb = MultiDimBinning([b1, b2]) + + assert eval(repr(mdb)) == mdb # pylint: disable=eval-used + + _ = hash_obj(mdb) + _ = mdb.hash + _ = hash(mdb) + _ = hash_obj(mdb[0, 0]) + _ = mdb[0, 0].hash + _ = hash(mdb[0, 0]) + _ = mdb[0, 0] + _ = mdb[0:, 0] + _ = mdb[0:, 0:] + _ = mdb[0, 0:] + _ = mdb[-1, -1] + # TODO: following should work as in Numpy: + # assert mdb[:] == mdb + # assert mdb[0] == b1 + # assert mdb[1] == b2 + assert mdb[:, :] == mdb + + # Index by dim names + assert mdb["energy"] == b1 + assert mdb["coszen"] == b2 + try: + mdb["nonexistent"] + except Exception: + pass + else: + raise Exception('non-existent name should raise exception') + + # Index by dim number + assert MultiDimBinning([b1])[0] == MultiDimBinning([b1[0]]) + + logging.debug('%s', mdb.energy) + logging.debug('copy(mdb): %s', copy(mdb)) + logging.debug('deepcopy(mdb): %s', deepcopy(mdb)) + assert deepcopy(mdb) == mdb + + s = pickle.dumps(mdb, pickle.HIGHEST_PROTOCOL) + mdb2 = pickle.loads(s) + assert mdb2 == mdb + + s = pickle.dumps(mdb[0, 0], pickle.HIGHEST_PROTOCOL) + mdb2 = pickle.loads(s) + assert mdb2 == mdb[0, 0] + + binning = MultiDimBinning([ + dict(name='energy', is_log=True, domain=[1, 80]*ureg.GeV, num_bins=40), + dict(name='coszen', is_lin=True, domain=[-1, 0], num_bins=20) + ]) + + ord_dict_of_binnings = OrderedDict([('x', mdb), ('y', binning)]) + _ = hash_obj(ord_dict_of_binnings) + _ = normQuant(ord_dict_of_binnings) + + for flatindex, this_bin in enumerate(binning.iterbins()): + coord = binning.index2coord(flatindex) + assert this_bin == binning[coord] + + assert binning.num_bins == [40, 20] + assert binning.tot_num_bins == 40 * 20 + + assert binning.oversample(10).shape == (400, 200) + + assert binning.oversample(10, 1).shape == (400, 20) + assert binning.oversample(1, 3).shape == (40, 60) + assert binning.downsample(4, 2).shape == (10, 10) + + assert binning.oversample(coszen=10, energy=2).shape == (80, 200) + assert binning.oversample(1, 1) == binning + + assert binning.to('MeV', '')['energy'].units == ureg.MeV + assert binning.to('MeV', '') == binning, 'converted=%s\norig=%s' \ + %(binning.to('MeV', ''), binning) + assert binning.to('MeV', '').hash == binning.hash + + _ = binning.meshgrid(entity='bin_edges') + _ = binning.meshgrid(entity='weighted_centers') + _ = binning.meshgrid(entity='midpoints') + _ = binning.meshgrid(entity='bin_widths') + _ = binning.meshgrid(entity='weighted_bin_widths') + _ = binning.bin_volumes(attach_units=False) + _ = binning.bin_volumes(attach_units=True) + _ = binning.weighted_bin_volumes(attach_units=False) + _ = binning.weighted_bin_volumes(attach_units=True) + binning.to('MeV', None) + binning.to('MeV', '') + binning.to(ureg.joule, '') + + oversampled = binning.oversample(10, 3) + assert oversampled.shape == (400, 60) + downsampled = binning.downsample(4, 2) + assert downsampled.shape == (10, 10) + + over_vols = oversampled.bin_volumes(attach_units=False) + down_vols = downsampled.bin_volumes(attach_units=False) + norm_vols = binning.bin_volumes(attach_units=False) + assert np.isclose(np.sum(over_vols), np.sum(norm_vols), **ALLCLOSE_KW) + assert np.isclose(np.sum(down_vols), np.sum(norm_vols), **ALLCLOSE_KW) + assert np.isclose(np.sum(down_vols), np.sum(over_vols), **ALLCLOSE_KW) + + over_vols = oversampled.weighted_bin_volumes(attach_units=False) + down_vols = downsampled.weighted_bin_volumes(attach_units=False) + norm_vols = binning.weighted_bin_volumes(attach_units=False) + assert np.isclose(np.sum(over_vols), np.sum(norm_vols), **ALLCLOSE_KW) + assert np.isclose(np.sum(down_vols), np.sum(norm_vols), **ALLCLOSE_KW) + assert np.isclose(np.sum(down_vols), np.sum(over_vols), **ALLCLOSE_KW) + + testdir = tempfile.mkdtemp() + try: + b_file = os.path.join(testdir, 'multi_dim_binning.json') + binning.to_json(b_file, warn=False) + b_ = MultiDimBinning.from_json(b_file) + assert b_ == binning, 'binning=\n%s\nb_=\n%s' %(binning, b_) + jsons.to_json(binning, b_file, warn=False) + b_ = MultiDimBinning.from_json(b_file) + assert b_ == binning, 'binning=\n%s\nb_=\n%s' %(binning, b_) + + # Had bug where datastruct containing MultiDimBinning failed to be + # saved. Test tuple containing list containing OrderedDict + # containing MultiDimBinning here, just to make sure MultiDimBinning + # can be written inside a nested structure. + b = binning + struct = ([OrderedDict(mdb=b)],) + jsons.to_json(struct, b_file, warn=False) + loaded = jsons.from_json(b_file) + b_ = MultiDimBinning(**loaded[0][0]['mdb']) + assert b_ == b + + # Now try with pickle + b_file = os.path.join(testdir, 'multi_dim_binning.pkl') + with open(b_file, 'wb') as fobj: + pickle.dump(struct, fobj, protocol=pickle.HIGHEST_PROTOCOL) + with open(b_file, 'rb') as fobj: + loaded = pickle.load(fobj) + b_ = loaded[0][0]['mdb'] + assert b_ == b + + finally: + shutil.rmtree(testdir, ignore_errors=True) + + # Test that reordering dimensions works correctly + e_binning = OneDimBinning( + name='true_energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV + ) + reco_e_binning = OneDimBinning( + name='reco_energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV + ) + cz_binning = OneDimBinning( + name='true_coszen', num_bins=40, is_lin=True, domain=[-1, 1] + ) + reco_cz_binning = OneDimBinning( + name='reco_coszen', num_bins=40, is_lin=True, domain=[-1, 1] + ) + az_binning = OneDimBinning( + name='true_azimuth', num_bins=10, is_lin=True, + domain=[0*ureg.rad, 2*np.pi*ureg.rad] + ) + reco_az_binning = OneDimBinning( + name='true_azimuth', num_bins=10, is_lin=True, + domain=[0*ureg.rad, 2*np.pi*ureg.rad] + ) + + mdb_2d_orig = MultiDimBinning([e_binning, cz_binning]) + orig_order = mdb_2d_orig.names + + # Reverse ordering; reorder by dimension names + new_order = orig_order[::-1] + mdb_2d_new = MultiDimBinning(mdb_2d_orig) + mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) + + assert mdb_2d_new.names == new_order + new_order = ['true_azimuth', 'true_energy', 'true_coszen'] + mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) + assert mdb_2d_new == mdb_2d_orig + _ = MultiDimBinning([e_binning, cz_binning]) + + mdb_3d_orig = MultiDimBinning([e_binning, cz_binning, az_binning]) + orig_order = mdb_3d_orig.names + new_order = [orig_order[2], orig_order[0], orig_order[1]] + + mdb_3d_new = MultiDimBinning(mdb_3d_orig) + mdb_3d_new = mdb_3d_new.reorder_dimensions(new_order) + assert mdb_3d_new.names == new_order + # Reorder by MultiDimBinning object + mdb_3d_new = mdb_3d_new.reorder_dimensions(mdb_3d_orig) + assert mdb_3d_new.names == orig_order + + # Reorder by indices + mdb_3d_new = MultiDimBinning(mdb_3d_orig) + mdb_3d_new = mdb_3d_new.reorder_dimensions([2, 0, 1]) + assert mdb_3d_new.names == new_order + + # Reorder by combination of index, OneDimBinning, and name + mdb_3d_new = MultiDimBinning(mdb_3d_orig) + mdb_3d_new = mdb_3d_new.reorder_dimensions( + [2, 'true_energy', mdb_2d_orig.dimensions[1]] + ) + assert mdb_3d_new.names == new_order + + # Reorder by superset + mdb_2d_new = MultiDimBinning(mdb_3d_orig.dimensions[0:2]) + mdb_2d_new = mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) + assert mdb_2d_new.names == [o for o in new_order if o in mdb_2d_new] + + # Reorder by subset + mdb_3d_new = MultiDimBinning(mdb_3d_orig) + try: + mdb_3d_new = mdb_3d_new.reorder_dimensions(new_order[0:2]) + except Exception: + pass + else: + raise Exception('Should not be able to reorder by subset.') + + # Create a basename-equivalent binning + mdb_3d_reco = MultiDimBinning([reco_e_binning, reco_cz_binning, + reco_az_binning]) + assert mdb_3d_reco.basename_binning == mdb_3d_orig.basename_binning + + t0 = time.time() + _ = [tup for tup in mdb_3d_reco.iteredgetuples()] + tprofile.info('Time to iterate over %d edge tuples: %.6f sec', + mdb_3d_reco.size, time.time() - t0) + + t0 = time.time() + _ = [b for b in mdb_3d_reco.iterbins()] + tprofile.info('Time to iterate over %d bins: %.6f sec', + mdb_3d_reco.size, time.time() - t0) + + # Test compatibility test + mdb1 = MultiDimBinning([ + OneDimBinning(name='energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV), + OneDimBinning(name='coszen', num_bins=40, is_lin=True, domain=[-1, 1]) + ]) + mdb2 = MultiDimBinning([ + OneDimBinning(name='energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV), + OneDimBinning(name='coszen', num_bins=40, is_lin=True, domain=[-1, 1]) + ]) + # These should be compatible + assert mdb1.is_compat(mdb2) + mdb1.assert_compat(mdb2) + assert mdb2.is_compat(mdb1) + mdb2.assert_compat(mdb1) + + mdb2 = MultiDimBinning([ + OneDimBinning(name='energy', num_bins=20, is_log=True, domain=[1, 80]*ureg.GeV), + OneDimBinning(name='coszen', num_bins=20, is_lin=True, domain=[-1, 1]) + ]) + + # In this direction, they should *not* be compatible + assert not mdb1.is_compat(mdb2) + with pytest.raises(AssertionError) as ae: + mdb1.assert_compat(mdb2) + # In this direction, they *should* be compatible (downsampling) + assert mdb2.is_compat(mdb1) + mdb2.assert_compat(mdb1) + + logging.info('<< PASS : test_MultiDimBinning >>')
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_OneDimBinning() + test_MultiDimBinning() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/container.html b/_modules/pisa/core/container.html new file mode 100644 index 000000000..d22ab4711 --- /dev/null +++ b/_modules/pisa/core/container.html @@ -0,0 +1,938 @@ + + + + + + pisa.core.container — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.container

+"""
+Class to hold generic data in container.
+he data can be unbinned or binned or scalar, while
+translation methods between such different representations
+are provided.
+"""
+
+from __future__ import absolute_import, print_function
+
+from collections.abc import Sequence
+from collections import OrderedDict, defaultdict
+import copy
+from itertools import chain
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.core.map import Map, MapSet
+from pisa.core.translation import histogram, lookup, resample
+from pisa.utils.comparisons import ALLCLOSE_KW
+from pisa.utils.log import logging
+from pisa.utils.profiler import line_profile, profile
+
+
+
+[docs] +class ContainerSet(object): + """ + Class to hold a set of container objects + + Parameters + ---------- + name : str + + containers : list or None + + data_specs : MultiDimBinning, "events" or None + + """ + def __init__(self, name, containers=None, data_specs=None): + self.name = name + self.linked_containers = [] + self.containers = [] + if containers is None: + containers = [] + for container in containers: + self.add_container(container) + + def __repr__(self): + return f'ContainerSet containing {[c.name for c in self]}' + + @property + def is_map(self): + if len(self.containers): + return self.containers[0].is_map + +
+[docs] + def add_container(self, container): + if container.name in self.names: + raise ValueError('container with name %s already exists'%container.name) + self.containers.append(container)
+ + + @property + def representation(self): + return self._representation + + @representation.setter + def representation(self, representation): + """ + Parameters + ---------- + representation : str, MultiDimBinning or any hashable object + Data specs should be set to retreive the right representation + i.e. the representation one is working in at the moment + + This property is meant to be changed while working with a ContainerSet + """ + self._representation = representation + for container in self: + container.representation = representation + + @property + def names(self): + return [c.name for c in self.containers] + + + + + + + + + def __getitem__(self, key): + if key in self.names: + return self.containers[self.names.index(key)] + if len(self.linked_containers) > 0: + linked_names = [c.name for c in self.linked_containers] + if key in linked_names: + return self.linked_containers[linked_names.index(key)] + raise KeyError(f"No name `{key}` in container") + + def __iter__(self): + """Iterate over individual non-linked containers and virtual containers + for the ones that are linked together + """ + containers_to_be_iterated = [c for c in self.containers if not c.linked] + self.linked_containers + return iter(containers_to_be_iterated) + +
+[docs] + def get_mapset(self, key, error=None): + """For a given key, get a PISA MapSet + + Parameters + ---------- + key : str + + error : None or str + specify a key that errors are read from + + Returns + ------- + map_set : MapSet + + """ + maps = [] + for container in self: + maps.append(container.get_map(key, error=error)) + return MapSet(name=self.name, maps=maps)
+
+ + + +
+[docs] +class VirtualContainer(object): + """ + Class providing a virtual container for linked individual containers + + It should just behave like a normal container + + For reading, it just uses one container as a representative (no checkng at the mment + if the others actually contain the same data) + + For writting, it creates one object that is added to all containers + + Parameters + ---------- + name : str + + containers : list + + """ + + def __init__(self, name, containers): + self.name = name + # check and set link flag + for container in containers: + if container.linked: + raise ValueError('Cannot link container %s since it is already linked'%container.name) + container.linked = True + self.containers = containers + + def __repr__(self): + return f'VirtualContainer containing {[c.name for c in self]}' + + + + + def __iter__(self): + return iter(self.containers) + + def __getitem__(self, key): + # should we check they're all the same? + return self.containers[0][key] + + def __setitem__(self, key, value): + for container in self: + container[key] = value + +
+[docs] + def set_aux_data(self, key, val): + for container in self: + container.set_aux_data(key, val)
+ + +
+[docs] + def mark_changed(self, key): + # copy all + for container in self.containers[1:]: + container[key] = np.copy(self.containers[0][key]) + for container in self: + container.mark_changed(key)
+ + +
+[docs] + def mark_valid(self, key): + for container in self: + container.mark_valid(key)
+ + @property + def representation(self): + return self.containers[0].representation + + @representation.setter + def representation(self, representation): + for container in self: + container.representation = representation + + @property + def shape(self): + return self.containers[0].shape + + @property + def size(self): + return np.product(self.shape)
+ + +
+[docs] +class Container(): + + default_translation_mode = "average" + translation_modes = ("average", "sum", None) + array_representations = ("events", "log_events") + + + def __init__(self, name, representation='events'): + + ''' + Container to hold data in multiple representations + + Parameters: + ----------- + + name : str + name of container + representation : hashable object, e.g. str or MultiDimBinning + Representation in which to initialize the container + + ''' + + self.name = name + self._representation = None + + self.linked = False + + # ToDo: simple auxillary data like scalars + # dict of form [variable] + self._aux_data = {} + + # validity bit + # dict of form [variable][representation_hash] + self.validity = defaultdict(dict) + + # translation mode + # dict of form [variable] + self.tranlation_modes = {} + + # Actual data + # dict of form [representation_hash][variable] + self.data = defaultdict(dict) + + # Representation objects + # dict of form [representation_hash] + self._representations = {} + + # Precedence of representation (lower number = higher precedence) + # dict of form [representation_hash] + self.precedence = defaultdict(int) + + self.representation = representation + + def __repr__(self): + return f'Container containing keys {self.all_keys}' + + @property + def representation(self): + return self._representation + + +
+[docs] + def set_aux_data(self, key, val): + '''Add any auxillary data, which will not be translated or tied to a specific representation''' + if key in self.all_keys: + raise KeyError(f'Key {key} already exsits') + + self._aux_data[key] = val
+ + + @representation.setter + def representation(self, representation): + key = hash(representation) + if not key in self.representation_keys: + self._representations[key] = representation + if isinstance(representation, MultiDimBinning): + for name in representation.names: + self.validity[name][key] = True + elif isinstance(representation, str): + if representation not in self.array_representations: + raise ValueError(f"Unknown representation '{representation}'") + + self._representation = representation + self.current_data = self.data[key] + + @property + def shape(self): + if self.is_map: + return self.representation.shape + if len(self.keys) == 0: + return None + key = self.keys[0] + return self[key].shape[0:1] + + @property + def size(self): + return np.product(self.shape) + + @property + def num_dims(self): + if self.is_map: + return self.representation.num_dims + else: + return 1 + + @property + def representations(self): + return tuple(self._representations.values()) + + @property + def representation_keys(self): + return tuple(self._representations.keys()) + + @property + def keys(self): + keys = tuple(self.current_data.keys()) + if self.is_map: + keys += tuple(self.representation.names) + return keys + + @property + def all_keys(self): + '''return all available keys, regardless of representation''' + return list(self.validity.keys()) + + @property + def is_map(self): + '''Is current representation a map/grid''' + return isinstance(self.representation, MultiDimBinning) + +
+[docs] + def mark_changed(self, key): + '''mark a key as changed and only what is in the current representation is valid''' + # invalidate all + for rep in self.validity[key]: + self.validity[key][rep] = False + + if key in self.current_data.keys(): + self.mark_valid(key)
+ + +
+[docs] + def mark_valid(self, key): + '''validate data as is in current representation, regardless''' + self.validity[key][hash(self.representation)] = True
+ + + def __getitem__(self, key): + data = self.__get_data(key) + return data + + def __setitem__(self, key, data): + + if self.is_map: + if key in self.representation.names: + raise Exception('Cannot add variable {key}, as it is a binning dimension') + + self.__add_data(key, data) + if not key in self.tranlation_modes.keys(): + self.tranlation_modes[key] = self.default_translation_mode + + self.mark_changed(key) + + def __add_data(self, key, data): + """ + Parameters + ---------- + key : string + identifier + data : ndarray, PISA Map or (array, binning)-tuple + is_flat : bool + is the data already flattened (i.e. the binning dimensions unrolled) + """ + if isinstance(data, np.ndarray): + + if self.is_map: + self.__add_data(key, (self.representation, data)) + + else: + shape = self.shape + if shape is not None: + assert data.shape[:self.num_dims] == shape, 'Incompatible dimensions' + + self.current_data[key] = data + + elif isinstance(data, Map): + assert hash(self.representation) == hash(data.binning) + flat_array = data.hist.ravel() + self.current_data[key] = flat_array + + elif isinstance(data, Sequence) and len(data) == 2: + binning, array = data + assert isinstance(binning, MultiDimBinning) + + assert hash(self.representation) == hash(binning) + + is_flat = array.shape[0] == binning.size + + if is_flat: + flat_array = array + else: + # first dimesnions must match + assert array.shape[:binning.num_dims] == binning.shape + + + if array.ndim > binning.num_dims: + flat_shape = (binning.size, -1) + else: + flat_shape = (binning.size, ) + flat_array = array.reshape(flat_shape) + self.current_data[key] = flat_array + else: + raise TypeError('unknown dataformat') + + + def __get_data(self, key): + if self.is_map: + binning = self.representation + # check if key is binning dimension + if key in binning.names: + return self.unroll_binning(key, binning) + # check validity + if not key in self.keys: + if key in self.all_keys: + self.auto_translate(key) + #raise KeyError(f'Data {key} not present in chosen representation') + else: + if key in self._aux_data.keys(): + return self._aux_data[key] + else: + raise KeyError(f'Data {key} not present in Container') + + valid = self.validity[key][hash(self.representation)] + if not valid: + self.auto_translate(key) + #raise ValueError('Invalid data as it was changed in a different representation!') + + + return self.current_data[key] + +
+[docs] + @staticmethod + def unroll_binning(key, binning): + '''Get an Array containing the unrolled binning''' + grid = binning.meshgrid(entity='weighted_centers', attach_units=False) + return grid[binning.index(key)].ravel()
+ + + +
+[docs] + def get_hist(self, key): + """Return reshaped data as normal n-dimensional histogram""" + assert self.is_map, 'Cannot retrieve hists from non-map data' + + # retrieve in case needs translation + self[key] + + binning = self.representation + data = self[key] + if data.ndim > binning.num_dims: + full_shape = list(binning.shape) + [-1] + else: + full_shape = list(binning.shape) + + return data.reshape(full_shape), binning
+ + +
+[docs] + def get_map(self, key, error=None): + """Return binned data in the form of a PISA map""" + hist, binning = self.get_hist(key) + if error is not None: + error_hist = np.abs(self.get_hist(error)[0]) + else: + error_hist = None + assert hist.ndim == binning.num_dims + return Map(name=self.name, hist=hist, error_hist=error_hist, binning=binning)
+ + + def __iter__(self): + """iterate over all keys in container""" + return self.keys() + +
+[docs] + def translate(self, key, src_representation): + '''translate variable from source representation + + key : str + src_representation : representation present in container + + ''' + + assert hash(src_representation) in self.representation_keys + + dest_representation = self.representation + + if hash(src_representation) == hash(dest_representation): + # nothing to do + return + + from_map = isinstance(src_representation, MultiDimBinning) + to_map = isinstance(dest_representation, MultiDimBinning) + + if self.tranlation_modes[key] == 'average': + if from_map and to_map: + out = self.resample(key, src_representation, dest_representation) + self.representation = dest_representation + self[key] = out + + elif to_map: + out = self.array_to_binned(key, src_representation, dest_representation) + self.representation = dest_representation + self[key] = out + + elif from_map: + out = self.binned_to_array(key, src_representation, dest_representation) + self.representation = dest_representation + self[key] = out + + elif src_representation == "events" and dest_representation == "log_events": + self.representation = "events" + logging.trace(f"Container `{self.name}`: taking log of {key}") + sample = np.log(self[key]) + self.representation = dest_representation + self[key] = sample + + elif src_representation == "log_events" and dest_representation == "events": + self.representation = "log_events" + sample = np.exp(self[key]) + self.representation = dest_representation + self[key] = sample + + else: + raise NotImplementedError(f"translating {src_representation} to {dest_representation}") + + else: + raise NotImplementedError() + + # validate source! + self.validity[key][hash(src_representation)] = True
+ + + +
+[docs] + def auto_translate(self, key): + src_representation = self.find_valid_representation(key) + if src_representation is None: + raise Exception(f'No valid representation for {key} in container') + # logging.debug(f'Auto-translating variable `{key}` from {src_representation}') + self.translate(key, src_representation)
+ + + +
+[docs] + def find_valid_representation(self, key): + ''' Find valid, and best representation for key''' + validity = self.validity[key] + + precedence = np.inf + representation = None + + for h in validity.keys(): + if validity[h]: + if self.precedence[h] < precedence: + precedence = self.precedence[h] + representation = self._representations[h] + + return representation
+ + +
+[docs] + def resample(self, key, src_representation, dest_representation): + """Resample a binned key into a different binning + Parameters + ---------- + key : str + src_representation : MultiDimBinning + dest_representation : MultiDimBinning + """ + + logging.debug('Resampling %s'%(key)) + + self.representation = src_representation + sample = [self[name] for name in src_representation.names] + weights = self[key] + + self.representation = dest_representation + new_sample = [self[name] for name in dest_representation.names] + new_hist = resample(weights, sample, src_representation, new_sample, dest_representation) + return new_hist
+ + +
+[docs] + def array_to_binned(self, key, src_representation, dest_representation, averaged=True): + """Histogram data array into binned data + Parameters + ---------- + key : str + src_representation : str + dest_representation : MultiDimBinning + #averaged : bool + # if True, the histogram entries are averages of the numbers that + # end up in a given bin. This for example must be used when oscillation + # probabilities are translated.....otherwise we end up with probability*count + # per bin + Notes + ----- + right now, CPU-only + """ + # TODO: make work for n-dim + logging.trace('Transforming %s array to binned data'%(key)) + + assert src_representation in self.array_representations + assert isinstance(dest_representation, MultiDimBinning) + + if not dest_representation.is_irregular: + sample = [] + dimensions = [] + for d in dest_representation: + if d.is_log: + self.representation = "log_events" + sample.append(self[d.name]) + dimensions.append(OneDimBinning( + d.name, + domain=np.log(d.domain.m), + num_bins=d.num_bins + )) + else: + self.representation = "events" + sample.append(self[d.name]) + dimensions.append(d) + hist_binning = MultiDimBinning(dimensions) + else: + self.representation = src_representation + sample = [self[name] for name in dest_representation.names] + hist_binning = dest_representation + + self.representation = src_representation + weights = self[key] + self.representation = dest_representation + hist = histogram(sample, weights, hist_binning, averaged=averaged) + return hist
+ + +
+[docs] + def binned_to_array(self, key, src_representation, dest_representation): + """Augmented binned data to array data""" + + logging.trace('Transforming %s binned to array data'%(key)) + + self.representation = src_representation + weights = self[key] + + if not src_representation.is_irregular: + logging.trace(f"Container `{self.name}`: regularized lookup for {key}") + sample = [] + dimensions = [] + for d in src_representation: + if d.is_log: + self.representation = "log_events" + sample.append(self[d.name]) + dimensions.append(OneDimBinning( + d.name, + domain=np.log(d.domain.m), + num_bins=d.num_bins + )) + else: + self.representation = "events" + sample.append(self[d.name]) + dimensions.append(d) + hist_binning = MultiDimBinning(dimensions) + else: + logging.trace(f"Container `{self.name}`: irregular lookup for {key}") + self.representation = dest_representation + sample = [self[name] for name in src_representation.names] + hist_binning = src_representation + + return lookup(sample, weights, hist_binning)
+
+ + + + +
+[docs] +def test_container(): + """Unit tests for Container class.""" + + # NOTE: Right now the numbers are tuned so that the weights are identical + # per bin. If you change binning that's likely not the case anymore and you + # inevitably end up with averaged values over bins, which are then not + # equal to the individual weights anymore when those are not identical per + # bin + + n_evts = 10000 + x = np.linspace(0, 100, n_evts, dtype=FTYPE) + y = np.linspace(0, 100, n_evts, dtype=FTYPE) + w = np.tile(np.arange(100, dtype=FTYPE) + 0.5, (100, 1)).T.ravel() + + container = Container('test', 'events') + container['x'] = x + container['y'] = y + container['w'] = w + + binning_x = OneDimBinning(name='x', num_bins=100, is_lin=True, domain=[0, 100]) + binning_y = OneDimBinning(name='y', num_bins=100, is_lin=True, domain=[0, 100]) + binning = MultiDimBinning([binning_x, binning_y]) + + logging.trace('Testing container and translation methods') + + container.representation = binning + bx = container['x'] + m = np.meshgrid(binning.midpoints[0].m, binning.midpoints[1].m)[1].ravel() + assert np.allclose(bx, m, **ALLCLOSE_KW), f'test:\n{bx}\n!= ref:\n{m}' + + # array repr + container.representation = 'events' + array_weights = container['w'] + assert np.allclose(array_weights, w, **ALLCLOSE_KW), f'test:\n{array_weights}\n!= ref:\n{w}' + + # binned repr + container.representation = binning + diag = np.diag(np.arange(100) + 0.5) + bd = container['w'] + h = container.get_hist('w') + + assert np.allclose(bd, diag.ravel(), **ALLCLOSE_KW), f'test:\n{bd}\n!= ref:\n{diag.ravel()}' + assert np.allclose(h[0], diag, **ALLCLOSE_KW), f'test:\n{h[0]}\n!= ref:\n{diag}' + assert h[1] == binning, f'test:\n{h[1]}\n!= ref:\n{binning}' + + # augment to array repr again + container.representation = 'events' + a = container['w'] + + assert np.allclose(a, w, **ALLCLOSE_KW), f'test:\n{a}\n!= ref:\n{w}'
+ + + +
+[docs] +def test_container_set(): + container1 = Container('test1') + container2 = Container('test2') + + data = ContainerSet('data', [container1, container2]) + + try: + data.add_container(container1) + except ValueError: + pass + else: + raise Exception('identical containers added to a containerset, this should not be possible')
+ + + +if __name__ == '__main__': + test_container() + test_container_set() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/detectors.html b/_modules/pisa/core/detectors.html new file mode 100644 index 000000000..a4be14d2e --- /dev/null +++ b/_modules/pisa/core/detectors.html @@ -0,0 +1,735 @@ + + + + + + pisa.core.detectors — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.detectors

+#! /usr/bin/env python
+"""
+Detector class definition and a simple script to generate, save, and
+plot distributions for different detectors from pipeline config file(s).
+A detector is represented by a DistributionMaker.
+
+DistributionMaker: A single detector
+Detectors: A sequence of detectors
+"""
+
+from __future__ import absolute_import
+
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
+from collections import OrderedDict
+import inspect
+from itertools import product
+import os
+from tabulate import tabulate
+from copy import deepcopy
+
+import numpy as np
+
+from pisa import ureg
+from pisa.core.map import MapSet
+from pisa.core.pipeline import Pipeline
+from pisa.core.distribution_maker import DistributionMaker
+from pisa.core.param import ParamSet, Param
+from pisa.utils.config_parser import PISAConfigParser
+from pisa.utils.fileio import expand, mkdir, to_file
+from pisa.utils.hash import hash_obj
+from pisa.utils.log import set_verbosity, logging, Levels
+from pisa.utils.random_numbers import get_random_state
+
+
+__all__ = ['Detectors', 'test_Detectors', 'parse_args', 'main']
+
+
+
+[docs] +class Detectors(object): + """Container for one or more distribution makers, that represent different detectors. + + Parameters + ---------- + pipelines : Pipeline or convertible thereto, or iterable thereof + A new pipline is instantiated with each object passed. Legal objects + are already-instantiated Pipelines and anything interpret-able by the + Pipeline init method. + + shared_params : Parameter to be treated the same way in all the + distribution_makers that contain them. + """ + def __init__(self, pipelines, label=None, set_livetime_from_data=True, profile=False, shared_params=None): + self.label = label + self._source_code_hash = None + + self._profile = profile + + if shared_params == None: + self.shared_params = [] + else: + self.shared_params = shared_params + + if isinstance(pipelines, (str, PISAConfigParser, OrderedDict, + Pipeline)): + pipelines = [pipelines] + + self._distribution_makers , self.det_names = [] , [] + for pipeline in pipelines: + if not isinstance(pipeline, Pipeline): + pipeline = Pipeline(pipeline) + + name = pipeline.detector_name + if name in self.det_names: + self._distribution_makers[self.det_names.index(name)].append(pipeline) + else: + self._distribution_makers.append([pipeline]) + self.det_names.append(name) + + if None in self.det_names and len(self.det_names) > 1: + raise NameError('At least one of the used pipelines has no detector_name.') + + for i, pipelines in enumerate(self._distribution_makers): + self._distribution_makers[i] = DistributionMaker(pipelines=pipelines, + set_livetime_from_data=set_livetime_from_data, + profile=profile + ) + + for sp in self.shared_params: + n = 0 + for distribution_maker in self._distribution_makers: + if sp in distribution_maker.params.free.names: + n += 1 + if n < 2: + raise NameError('Shared param %s only a free param in less than 2 detectors.' % sp) + + self.init_params() + + def __repr__(self): + return self.tabulate(tablefmt="presto") + + def _repr_html_(self): + return self.tabulate(tablefmt="html") + +
+[docs] + def tabulate(self, tablefmt="plain"): + headers = ['DistributionMaker number', 'detector name', 'output_binning', 'output_key', 'profile'] + colalign=["right"] + ["center"] * (len(headers) -1 ) + table = [] + for i, d in enumerate(self.distribution_makers): + p = d.pipelines[0] #assuming binning and key are the same for all pipelines in DistributionMaker + table.append([i, d.detector_name, p.output_binning, p.output_key, d.profile]) + return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign)
+ + + def __iter__(self): + return iter(self._distribution_makers) + + @property + def profile(self): + return self._profile + + @profile.setter + def profile(self, value): + for d in self.distribution_makers: + d.profile = value + self._profile = value + + +
+[docs] + def run(self): + for distribution_maker in self: + distribution_maker.run()
+ + +
+[docs] + def setup(self): + """Setup (reset) all distribution makers""" + for d in self: + d.setup()
+ + +
+[docs] + def get_outputs(self, **kwargs): + """Compute and return the outputs. + + Parameters + ---------- + **kwargs + Passed on to each distribution_maker's `get_outputs` method. + + Returns + ------- + List of MapSets if `return_sum=True` or list of lists of MapSets if `return_sum=False` + + """ + outputs = [distribution_maker.get_outputs(**kwargs) for distribution_maker in self] + return outputs
+ + +
+[docs] + def update_params(self, params): + if isinstance(params,Param): params = ParamSet(params) + + for distribution_maker in self.distribution_makers: + ps = deepcopy(params) + for p in ps.names: + if distribution_maker.detector_name in p: + p_name = p.replace('_'+distribution_maker.detector_name, "") + if p_name in ps.names: + ps.remove(p_name) + ps[p].name = p_name + distribution_maker.update_params(ps) + self.init_params()
+ + +
+[docs] + def select_params(self, selections, error_on_missing=True): + for distribution_maker in self: + distribution_maker.select_params(selections=selections, error_on_missing=error_on_missing) + self.init_params()
+ + + @property + def distribution_makers(self): + return self._distribution_makers + + @property + def params(self): + return self._params + +
+[docs] + def init_params(self): + """Returns a ParamSet including all params of all detectors. First the shared params + (if there are some), then all the "single detector" params. If two detectors use a + parameter with the same name (but not shared), the name of the detector is added to the + parameter name (except for the first detector). + """ + params = ParamSet() + for p_name in self.shared_params: + for distribution_maker in self: + try: + params.extend(distribution_maker.params[p_name]) + break # shared param found, can continue with the next shared param + except: + continue # shared param was not in this DistributionMaker, so search in the next one + + for distribution_maker in self: + for param in distribution_maker.params: + if param.name in self.shared_params: + continue # shared param is already in param set, can continue with the next param + elif param.name in params.names: # two parameters with the same name but not shared + # add detector name to the parameter name + changed_param = deepcopy(param) + changed_param.name = param.name + '_' + distribution_maker.detector_name + params.extend(changed_param) + else: + params.extend(param) + self._params = params
+ + + @property + def shared_param_ind_list(self): + """ A list of lists (one for each detector) containing the position of the shared + params in the free params of the DistributionMaker (that belongs to the detector) + together with their position in the shared parameter list. + """ + if not self.shared_params: return [] + + shared_param_ind_list = [] + for distribution_maker in self: + free_names = distribution_maker.params.free.names + spi = [] + for p_name in free_names: + if p_name in self.shared_params: + spi.append((free_names.index(p_name),self.shared_params.index(p_name))) + shared_param_ind_list.append(spi) + return shared_param_ind_list + + @property + def param_selections(self): + selections = None + for distribution_maker in self: + if selections != None and sorted(distribution_maker.param_selections) != selections: + raise AssertionError('Different param_selections for different detectors.') + selections = sorted(distribution_maker.param_selections) + return selections + + @property + def source_code_hash(self): + """Hash for the source code of this object's class. + + Not meant to be perfect, but should suffice for tracking provenance of + an object stored to disk that were produced by a Stage. + """ + if self._source_code_hash is None: + self._source_code_hash = hash_obj(inspect.getsource(self.__class__)) + return self._source_code_hash + + @property + def hash(self): + return hash_obj([self.source_code_hash] + [d.hash for d in self]) + + @property + def num_events_per_bin(self): + ''' + returns list of arrays of bin indices where none of the + pipelines in the respective distribution maker have MC events + ''' + num_events_per_bin = [] + for d in self.distribution_makers: + num_events_per_bin.append(d.num_events_per_bin) + + return num_events_per_bin + + + @property + def empty_bin_indices(self): + '''Find indices where there are no events present + ''' + num_events_per_bin = self.num_events_per_bin + + indices = [] + for i, d in enumerate(self.distribution_makers): + empty_counts = num_events_per_bin[i] == 0 + indices.append(np.where(empty_counts)[0]) + return indices + + +
+[docs] + def set_free_params(self, values): + """Set free parameters' values. + + Parameters + ---------- + values : a list of quantities + + """ + for dist_maker in self: + dist_values = [] + for dist_name in dist_maker.params.free.names: + for name, value in zip(self.params.free.names, values): + if name == dist_name: + v = value + if name == dist_name + '_' + dist_maker.detector_name: + v = value + dist_values.append(v) + dist_maker.set_free_params(dist_values)
+ + +
+[docs] + def randomize_free_params(self, random_state=None): + if random_state is None: + random = np.random + else: + random = get_random_state(random_state) + n = len(self.params.free) + rand = random.rand(n) + self._set_rescaled_free_params(rand)
+ + +
+[docs] + def reset_all(self): + """Reset both free and fixed parameters to their nominal values.""" + for d in self: + d.reset_all()
+ + +
+[docs] + def reset_free(self): + """Reset only free parameters to their nominal values.""" + for d in self: + d.reset_free()
+ + +
+[docs] + def set_nominal_by_current_values(self): + """Define the nominal values as the parameters' current values.""" + for d in self: + d.set_nominal_by_current_values()
+ + + def _set_rescaled_free_params(self, rvalues): + """Set free param values given a simple list of [0,1]-rescaled, + dimensionless values + """ + if not isinstance(rvalues,list): + rvalues = list(rvalues) + + if self.shared_params == []: + for d in self: + rp = [] + for j in range(len(d.params.free)): + rp.append(rvalues.pop(0)) + d._set_rescaled_free_params(rp) + + else: + sp = [] # first get the shared params + for i in range(len(self.shared_params)): + sp.append(rvalues.pop(0)) + spi = self.shared_param_ind_list + + for i in range(len(self._distribution_makers)): + rp = [] + for j in range(len(self._distribution_makers[i].params.free) - len(spi[i])): + rp.append(rvalues.pop(0)) + for j in range(len(spi[i])): + rp.insert(spi[i][j][0],sp[spi[i][j][1]]) + self._distribution_makers[i]._set_rescaled_free_params(rp)
+ + + +
+[docs] +def test_Detectors(verbosity=Levels.WARN): + from pisa.analysis.analysis import update_param_values_detector + + """Run a combination of two DeepCore detectors.""" + p1_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") + p1_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") + p1_nu.detector_name, p1_mu.detector_name = 'detector1', 'detector1' + + p2_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") + p2_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") + p2_nu.detector_name, p2_mu.detector_name = 'detector2', 'detector2' + + # Initializing + try: + set_verbosity(Levels.INFO) + logging.info(f'Initializing Detectors') + + set_verbosity(Levels.WARN) + model = Detectors([p1_nu, p1_mu, p2_nu, p2_mu], shared_params=['deltam31', 'theta13', 'theta23', 'nue_numu_ratio', 'Barr_uphor_ratio', 'Barr_nu_nubar_ratio', 'delta_index', 'nutau_norm', 'nu_nc_norm', 'opt_eff_overall', 'opt_eff_lateral', 'opt_eff_headon', 'ice_scattering', 'ice_absorption', 'atm_muon_scale']) + + except Exception as err: + msg = f"<< Error when initializing the Detectors >>" + set_verbosity(verbosity) + logging.error("=" * len(msg)) + logging.error(msg) + logging.error("=" * len(msg)) + + set_verbosity(Levels.TRACE) + logging.exception(err) + + set_verbosity(verbosity) + logging.error("#" * len(msg)) + + else: + set_verbosity(verbosity) + logging.info("<< Successfully initialized Detectors >>") + + finally: + set_verbosity(verbosity) + + # Get outputs + try: + set_verbosity(Levels.INFO) + logging.info(f'Running Detectors (takes a bit)') + + set_verbosity(Levels.WARN) + model.get_outputs() + + except Exception as err: + msg = f"<< Error when running the Detectors >>" + set_verbosity(verbosity) + logging.error("=" * len(msg)) + logging.error(msg) + logging.error("=" * len(msg)) + + set_verbosity(Levels.TRACE) + logging.exception(err) + + set_verbosity(verbosity) + logging.error("#" * len(msg)) + + else: + set_verbosity(verbosity) + logging.info("<< Successfully ran Detectors >>") + + finally: + set_verbosity(verbosity) + + # Change parameters + set_verbosity(Levels.INFO) + logging.info(f'Change parameters') + + set_verbosity(Levels.WARN) + model.reset_free() + model.params.opt_eff_lateral.value = 20 # shared parameter + model.params.aeff_scale.value = 2 # only changes value for detector1 + + update_param_values_detector(model, model.params) + + o0 = model.distribution_makers[0].params.opt_eff_lateral.value.magnitude + o1 = model.distribution_makers[1].params.opt_eff_lateral.value.magnitude + a0 = model.distribution_makers[0].params.aeff_scale.value.magnitude + a1 = model.distribution_makers[1].params.aeff_scale.value.magnitude + + if not o0 == 20 or not o1 == 20: + msg = f"<< Error when changing shared parameter >>" + set_verbosity(verbosity) + logging.error("=" * len(msg)) + logging.error(msg) + logging.error("=" * len(msg)) + + elif not a0 == 2 or not a1 == 1: + msg = f"<< Error when changing non-shared parameter >>" + set_verbosity(verbosity) + logging.error("=" * len(msg)) + logging.error(msg) + logging.error("=" * len(msg)) + + else: + set_verbosity(verbosity) + logging.info("<< Successfully changed parameters >>") + + # Unit test + set_verbosity(Levels.INFO) + logging.info(f'Unit test') + + set_verbosity(Levels.WARN) + hierarchies = ['nh', 'ih'] + t23 = dict( + ih=49.5 * ureg.deg, + nh=42.3 * ureg.deg + ) + current_hier = 'nh' + + for new_hier in hierarchies: + #assert model.param_selections == [current_hier], str(model.param_selections) + assert model.params.theta23.value == t23[current_hier], str(model.params.theta23) + + # Select the hierarchy + model.select_params(new_hier) + #assert model.param_selections == [new_hier], str(model.param_selections) + assert model.params.theta23.value == t23[new_hier], str(model.params.theta23) + + # Reset to "current" + model.select_params(current_hier) + #assert model.param_selections == [current_hier], str(model.param_selections) + assert model.params.theta23.value == t23[current_hier], str(model.params.theta23) + + set_verbosity(verbosity) + logging.info("<< Successfully ran unit test >>") + + # Done + logging.info(f'Detectors class test done')
+ + + +
+[docs] +def parse_args(): + """Get command line arguments""" + parser = ArgumentParser( + description='''Generate, store, and plot distributions from different + pipeline configuration file(s) for one or more detectors.''', + formatter_class=ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + '-p', '--pipeline', type=str, required=True, + metavar='CONFIGFILE', action='append', + help='''Settings file for each pipeline (repeat for multiple).''' + ) + parser.add_argument( + '--shared_params', type=str, default=None, + action='append', + help='''Shared parameters for multi det analysis (repeat for multiple).''' + ) + parser.add_argument( + '--select', metavar='PARAM_SELECTIONS', nargs='+', default=None, + help='''Param selectors (separated by spaces) to use to override any + defaults in the config file.''' + ) + parser.add_argument( + '--return-sum', action='store_true', + help='''Return a sum of the MapSets output by the distribution maker's + pipelines as a single map (as opposed to a list of MapSets, one per + pipeline)''' + ) + parser.add_argument( + '--outdir', type=str, action='store', + help='Directory into which to store the output' + ) + parser.add_argument( + '--pdf', action='store_true', + help='''Produce pdf plot(s).''' + ) + parser.add_argument( + '--png', action='store_true', + help='''Produce png plot(s).''' + ) + parser.add_argument( + '-v', action='count', default=None, + help='Set verbosity level' + ) + args = parser.parse_args() + return args
+ + + +
+[docs] +def main(return_outputs=False): + """Main; call as script with `return_outputs=False` or interactively with + `return_outputs=True`""" + from pisa.utils.plotter import Plotter + args = parse_args() + set_verbosity(args.v) + plot_formats = [] + if args.pdf: + plot_formats.append('pdf') + if args.png: + plot_formats.append('png') + + detectors = Detectors(args.pipeline,shared_params=args.shared_params) + Names = detectors.det_names + if args.select is not None: + detectors.select_params(args.select) + + outputs = detectors.get_outputs(return_sum=args.return_sum) + + #outputs = outputs[0].fluctuate( + # method='poisson', random_state=get_random_state([0, 0, 0])) + + if args.outdir: + # TODO: unique filename: append hash (or hash per pipeline config) + fname = 'detectors_outputs.json.bz2' + mkdir(args.outdir) + fpath = expand(os.path.join(args.outdir, fname)) + to_file(outputs, fpath) + + if args.outdir and plot_formats: + my_plotter = Plotter( + outdir=args.outdir, + fmt=plot_formats, log=False, + annotate=False + ) + for num, output in enumerate(outputs): + if args.return_sum: + my_plotter.plot_2d_array( + output, + fname=Names[num] + ) + else: + for out in output: + my_plotter.plot_2d_array( + out, + fname=Names[num] + ) + + if return_outputs: + return detectors, outputs
+ + + +if __name__ == '__main__': + detectors, outputs = main(return_outputs=True) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/distribution_maker.html b/_modules/pisa/core/distribution_maker.html new file mode 100644 index 000000000..e54e839d0 --- /dev/null +++ b/_modules/pisa/core/distribution_maker.html @@ -0,0 +1,782 @@ + + + + + + pisa.core.distribution_maker — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.distribution_maker

+#! /usr/bin/env python
+
+"""
+DistributionMaker class definition and a simple script to generate, save, and
+plot a distribution from pipeline config file(s).
+"""
+
+from __future__ import absolute_import
+
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
+from collections import OrderedDict
+from collections.abc import Mapping
+import inspect
+from itertools import product
+import os
+from tabulate import tabulate
+
+import numpy as np
+
+from pisa import ureg
+from pisa.core.map import MapSet
+from pisa.core.pipeline import Pipeline
+from pisa.core.param import ParamSet
+from pisa.utils.config_parser import PISAConfigParser
+from pisa.utils.fileio import expand, mkdir, to_file
+from pisa.utils.hash import hash_obj
+from pisa.utils.log import set_verbosity, logging
+from pisa.utils.random_numbers import get_random_state
+
+
+__all__ = ['DistributionMaker', 'test_DistributionMaker', 'parse_args', 'main']
+
+__author__ = 'J.L. Lanfranchi, P. Eller'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +class DistributionMaker(object): + """Container for one or more pipelines; the outputs from all contained + pipelines are added together to create the distribution. + + Parameters + ---------- + pipelines : Pipeline or convertible thereto, or iterable thereof + A new pipline is instantiated with each object passed. Legal objects + are already-instantiated Pipelines and anything interpret-able by the + Pipeline init method. + + label : str or None, optional + A label for the DistributionMaker. + + set_livetime_from_data : bool, optional + If a (data) pipeline is found with the attr `metadata` and which has + the contained key "livetime", this livetime is used to set the livetime + on all pipelines which have param `params.livetime`. If multiple such + data pipelines are found and `set_livetime_from_data` is True, all are + checked for consistency (you should use multiple `Detector`s if you + have incompatible data sets). + + profile : bool + timing of inidividual pipelines / stages + + Notes + ----- + Free params with the same name in two pipelines are updated at the same + time so long as you use the `update_params`, `set_free_params`, or + `_set_rescaled_free_params` methods. Also use `select_params` to select + params across all pipelines (if a pipeline does not have one or more of + the param selectors specified, those param selectors have no effect in + that pipeline). + + `_*_rescaled_*` properties and methods are for interfacing with a + minimizer, where values are linearly mapped onto the interval [0, 1] + according to the parameter's allowed range. Avoid interfacing with these + except if using a minimizer, since, e.g., units are stripped and values and + intervals are non-physical. + + """ + def __init__(self, pipelines, label=None, set_livetime_from_data=True, profile=False): + + self.label = label + self._source_code_hash = None + self.metadata = OrderedDict() + + self._profile = profile + + self._pipelines = [] + if isinstance(pipelines, (str, PISAConfigParser, OrderedDict, + Pipeline)): + pipelines = [pipelines] + + for pipeline in pipelines: + if not isinstance(pipeline, Pipeline): + pipeline = Pipeline(pipeline, profile=profile) + self._pipelines.append(pipeline) + + data_run_livetime = None + if set_livetime_from_data: + # + # Get livetime metadata if defined in any stage in any pipeline + # + for pipeline_idx, pipeline in enumerate(self): + for stage_idx, stage in enumerate(pipeline): + if not ( + hasattr(stage, "metadata") + and isinstance(stage.metadata, Mapping) + and "livetime" in stage.metadata + ): + continue + + if data_run_livetime is None: + data_run_livetime = stage.metadata["livetime"] + + if stage.metadata["livetime"] != data_run_livetime: + raise ValueError( + "Pipeline index {}, stage index {} has data" + " livetime = {}, in disagreement with" + " previously-found livetime = {}".format( + pipeline_idx, + stage_idx, + stage.metadata["livetime"], + data_run_livetime, + ) + ) + + # Save the last livetime found inside the pipeline's metadata + # TODO: implement metadata in the pipeline class instead + self.metadata['livetime'] = data_run_livetime + # + # Set param `params.livetime` for any pipelines that have it + # + if data_run_livetime is not None: + + data_run_livetime *= ureg.sec + + for pipeline_idx, pipeline in enumerate(self): + + if "livetime" not in pipeline.params.names: + continue + + pipeline.params.livetime.is_fixed = True + + if pipeline.params.livetime != data_run_livetime: + + logging.warning( + "Pipeline index %d has params.livetime = %s, in" + " disagreement with data livetime = %s defined by" + " data. The pipeline's livetime param will be" + " reset to the latter value and set to be fixed" + " (if it is not alredy).", + pipeline_idx, + pipeline.params.livetime.value, + data_run_livetime, + ) + pipeline.params.livetime = data_run_livetime + + + #for pipeline in self: + # pipeline.select_params(self.param_selections, + # error_on_missing=False) + + # Make sure that all the pipelines have the same detector name (or None) + self.detector_name = 'no_name' + for p in self._pipelines: + name = p.detector_name + if name != self.detector_name and self.detector_name != 'no_name': + raise NameError( + 'Different detector names in distribution_maker pipelines' + ) + + self.detector_name = name + + # set parameters with an identical name to the same object + # otherwise we get inconsistent behaviour when setting repeated params + # See Isues #566 and #648 + # Also, do this for all selections! + original_selection = self.param_selections + all_selections = set() + for pipeline in self: + for stage in pipeline.stages: + all_selections.update(stage._param_selector._selector_params.keys()) + for selection in all_selections: + self.select_params(selection) + all_params = self.params + for pipeline in self: + pipeline.update_params(all_params, existing_must_match=True, extend=False) + self.select_params(original_selection) + + def __repr__(self): + return self.tabulate(tablefmt="presto") + + def _repr_html_(self): + return self.tabulate(tablefmt="html") + +
+[docs] + def tabulate(self, tablefmt="plain"): + headers = ['pipeline number', 'name', 'detector name', 'output_binning', 'output_key', 'profile'] + colalign=["right"] + ["center"] * (len(headers) -1 ) + table = [] + for i, p in enumerate(self.pipelines): + table.append([i, p.name, p.detector_name, p.output_binning, p.output_key, p.profile]) + return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign)
+ + + def __iter__(self): + return iter(self._pipelines) + + @property + def profile(self): + return self._profile + + @profile.setter + def profile(self, value): + for pipeline in self.pipelines: + pipeline.profile = value + self._profile = value + + +
+[docs] + def run(self): + for pipeline in self: + pipeline.run()
+ + +
+[docs] + def setup(self): + """Setup (reset) all pipelines""" + for p in self: + p.setup()
+ + +
+[docs] + def get_outputs(self, return_sum=False, sum_map_name='total', + sum_map_tex_name='Total', **kwargs): + """Compute and return the outputs. + + Parameters + ---------- + return_sum : bool + If True, add up all Maps in all MapSets returned by all pipelines. + The result will be a single Map contained in a MapSet. + If False, return a list where each element is the full MapSet + returned by each pipeline in the DistributionMaker. + + + **kwargs + Passed on to each pipeline's `get_outputs` method. + + Returns + ------- + MapSet if `return_sum=True` or list of MapSets if `return_sum=False` + + """ + + outputs = [pipeline.get_outputs(**kwargs) for pipeline in self] # pylint: disable=redefined-outer-name + + if return_sum: + + # Case where the output of a pipeline is a mapSet + if isinstance(outputs[0], MapSet): + outputs = sum([sum(x) for x in outputs]) # This produces a Map + outputs.name = sum_map_name + outputs.tex = sum_map_tex_name + outputs = MapSet(outputs) # final output must be a MapSet + + # Case where the output of a pipeline is a dict of different MapSets + elif isinstance(outputs[0], OrderedDict): + output_dict = OrderedDict() + for key in outputs[0].keys(): + output_dict[key] = sum([sum(A[key]) for A in outputs]) # This produces a Map objects + output_dict[key].name = sum_map_name + output_dict[key].tex = sum_map_tex_name + output_dict[key] = MapSet(output_dict[key]) + + outputs = output_dict + + return outputs
+ + +
+[docs] + def update_params(self, params): + for pipeline in self: + pipeline.update_params(params)
+ + +
+[docs] + def select_params(self, selections, error_on_missing=True): + successes = 0 + if selections is not None: + for pipeline in self: + try: + pipeline.select_params(selections, error_on_missing=True) + except KeyError: + pass + else: + successes += 1 + + if error_on_missing and successes == 0: + raise KeyError( + 'None of the stages from any pipeline in this distribution' + ' maker has all of the selections %s available.' + %(selections,) + ) + else: + for pipeline in self: + possible_selections = pipeline.param_selections + if possible_selections: + logging.warning( + "Although you didn't make a parameter " + "selection, the following were available: %s." + " This may cause issues.", possible_selections + )
+ + +
+[docs] + def add_covariance(self,covmat): + """ + Incorporates covariance between parameters. + This is done by replacing relevant correlated parameters with "DerivedParams" + that depend on new parameters in an uncorrelated basis + + The parameters are all updated, but this doesn't add the new parameters in + So we go to the first stage we find that has one of the original parameters and manually add this in + + See the docstring in "pisa.core.param.ParamSet" for more + """ + paramset = self.params + + paramset.add_covariance(covmat) + + self.update_params(paramset) + + success = False + for pipeline in self.pipelines: + retval = pipeline._add_rotated(paramset, suppress_warning=True) + success = success or retval + + if not success: + raise ValueError("unsuccessful?")
+ + + @property + def pipelines(self)->'list[Pipeline]': + return self._pipelines + + @property + def params(self): + params = ParamSet() + for pipeline in self: + params.extend(pipeline.params) + return params + + @property + def param_selections(self): + selections = set() + for pipeline in self: + selections.update(pipeline.param_selections) + return sorted(selections) + + @property + def source_code_hash(self): + """Hash for the source code of this object's class. + + Not meant to be perfect, but should suffice for tracking provenance of + an object stored to disk that were produced by a Stage. + """ + if self._source_code_hash is None: + self._source_code_hash = hash_obj(inspect.getsource(self.__class__)) + return self._source_code_hash + + @property + def hash(self): + return hash_obj([self.source_code_hash] + [p.hash for p in self]) + + @property + def num_events_per_bin(self): + ''' + returns an array of bin indices where none of the + pipelines have MC events + + assumes that all pipelines have the same binning output specs + + number of events is taken out of the last stage of the pipeline + ''' + num_bins = self.pipelines[0].stages[-1].output_specs.tot_num_bins + num_events_per_bin = np.zeros(num_bins) + + for p in self.pipelines: + assert p.stages[-1].output_specs.tot_num_bins==num_bins, 'ERROR: different pipelines have different binning' + + for c in p.stages[-1].data: + for index in range(num_bins): + index_mask = c.array_data['bin_{}_mask'.format(index)].get('host') + current_weights = c.array_data['weights'].get('host')[index_mask] + n_weights = current_weights.shape[0] + num_events_per_bin[index] += n_weights + + return num_events_per_bin + + + @property + def empty_bin_indices(self): + '''Find indices where there are no events present + ''' + empty_counts = self.num_events_per_bin == 0 + indices = np.where(empty_counts)[0] + return indices + + +
+[docs] + def set_free_params(self, values): + """Set free parameters' values. + + Parameters + ---------- + values : list of quantities + + """ + for name, value in zip(self.params.free.names, values): + for pipeline in self: + if name in pipeline.params.free.names: + pipeline.params[name] = value + elif name in pipeline.params.names: + raise AttributeError( + 'Trying to set value for "%s", a parameter that is' + ' fixed in at least one pipeline' %name + )
+ + +
+[docs] + def randomize_free_params(self, random_state=None): + if random_state is None: + random = np.random + else: + random = get_random_state(random_state) + n = len(self.params.free) + rand = random.rand(n) + self._set_rescaled_free_params(rand)
+ + +
+[docs] + def reset_all(self): + """Reset both free and fixed parameters to their nominal values.""" + for p in self: + p.params.reset_all()
+ + +
+[docs] + def reset_free(self): + """Reset only free parameters to their nominal values.""" + for p in self: + p.params.reset_free()
+ + +
+[docs] + def set_nominal_by_current_values(self): + """Define the nominal values as the parameters' current values.""" + for p in self: + p.params.set_nominal_by_current_values()
+ + + def _set_rescaled_free_params(self, rvalues): + """Set free param values given a simple list of [0,1]-rescaled, + dimensionless values + + """ + names = self.params.free.names + for pipeline in self: + for name, rvalue in zip(names, rvalues): + if name in pipeline.params.free.names: + pipeline.params[name]._rescaled_value = rvalue # pylint: disable=protected-access + elif name in pipeline.params.names: + raise AttributeError( + 'Trying to set value for "%s", a parameter that is' + ' fixed in at least one pipeline' %name + )
+ + + +
+[docs] +def test_DistributionMaker(): + """Unit tests for DistributionMaker""" + # + # Test: select_params and param_selections + # + + # TODO: make test config file with materials param selector, then uncomment + # removed tests below + + hierarchies = ['nh', 'ih'] + #materials = ['iron', 'pyrolite'] + materials = [] + + t23 = dict( + ih=49.5 * ureg.deg, + nh=42.3 * ureg.deg + ) + YeO = dict( + iron=0.4656, + pyrolite=0.4957 + ) + + # Instantiate with two pipelines: first has both nh/ih and iron/pyrolite + # param selectors, while the second only has nh/ih param selectors. + dm = DistributionMaker( + ['settings/pipeline/example.cfg', 'settings/pipeline/example.cfg'] + ) + + #current_mat = 'iron' + current_hier = 'nh' + + #for new_hier, new_mat in product(hierarchies, materials): + for new_hier in hierarchies: + #assert dm.param_selections == sorted([current_hier, current_mat]), \ + # str(dm.param_selections) + #assert dm.param_selections == sorted([current_hier, 'earth']), str(dm.param_selections) + assert dm.params.theta23.value == t23[current_hier], str(dm.params.theta23) + #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) + + # Select just the hierarchy + dm.select_params(new_hier) + #assert dm.param_selections == sorted([new_hier, current_mat]), \ + # str(dm.param_selections) + #assert dm.param_selections == sorted([new_hier, 'earth']), str(dm.param_selections) + assert dm.params.theta23.value == t23[new_hier], str(dm.params.theta23) + #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) + + ## Select just the material + #dm.select_params(new_mat) + #assert dm.param_selections == sorted([new_hier, new_mat]), \ + # str(dm.param_selections) + #assert dm.params.theta23.value == t23[new_hier], \ + # str(dm.params.theta23) + #assert dm.params.YeO.value == YeO[new_mat], \ + # str(dm.params.YeO) + + # Reset both to "current" + #dm.select_params([current_mat, current_hier]) + dm.select_params(current_hier) + #assert dm.param_selections == sorted([current_hier, current_mat]), \ + # str(dm.param_selections) + #assert dm.param_selections == sorted([current_hier, 'earth']), str(dm.param_selections) + assert dm.params.theta23.value == t23[current_hier], str(dm.params.theta23)
+ + #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) + + ## Select both hierarchy and material + #dm.select_params([new_mat, new_hier]) + #assert dm.param_selections == sorted([new_hier, new_mat]), \ + # str(dm.param_selections) + #assert dm.params.theta23.value == t23[new_hier], \ + # str(dm.params.theta23) + #assert dm.params.YeO.value == YeO[new_mat], \ + # str(dm.params.YeO) + + #current_hier = new_hier + #current_mat = new_mat + + +
+[docs] +def parse_args(): + """Get command line arguments""" + parser = ArgumentParser( + description='''Generate, store, and plot a distribution from pipeline + configuration file(s).''', + formatter_class=ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + '-p', '--pipeline', type=str, required=True, + metavar='CONFIGFILE', action='append', + help='''Settings file for each pipeline (repeat for multiple).''' + ) + parser.add_argument( + '--select', metavar='PARAM_SELECTIONS', nargs='+', default=None, + help='''Param selectors (separated by spaces) to use to override any + defaults in the config file.''' + ) + parser.add_argument( + '--return-sum', action='store_true', + help='''Return a sum of the MapSets output by the distribution maker's + pipelines as a single map (as opposed to a list of MapSets, one per + pipeline)''' + ) + parser.add_argument( + '--outdir', type=str, action='store', + help='Directory into which to store the output' + ) + parser.add_argument( + '--pdf', action='store_true', + help='''Produce pdf plot(s).''' + ) + parser.add_argument( + '--png', action='store_true', + help='''Produce png plot(s).''' + ) + parser.add_argument( + '-v', action='count', default=None, + help='Set verbosity level' + ) + args = parser.parse_args() + return args
+ + + +
+[docs] +def main(return_outputs=False): + """Main; call as script with `return_outputs=False` or interactively with + `return_outputs=True`""" + from pisa.utils.plotter import Plotter + args = parse_args() + set_verbosity(args.v) + plot_formats = [] + if args.pdf: + plot_formats.append('pdf') + if args.png: + plot_formats.append('png') + + distribution_maker = DistributionMaker(pipelines=args.pipeline) # pylint: disable=redefined-outer-name + if args.select is not None: + distribution_maker.select_params(args.select) + + outputs = distribution_maker.get_outputs(return_sum=args.return_sum) # pylint: disable=redefined-outer-name + if args.outdir: + # TODO: unique filename: append hash (or hash per pipeline config) + fname = 'distribution_maker_outputs.json.bz2' + mkdir(args.outdir) + fpath = expand(os.path.join(args.outdir, fname)) + to_file(outputs, fpath) + + if args.outdir and plot_formats: + my_plotter = Plotter( + outdir=args.outdir, + fmt=plot_formats, log=False, + annotate=False + ) + for num, output in enumerate(outputs): + my_plotter.plot_2d_array( + output, + fname='dist_output_%d' % num + ) + + if return_outputs: + return distribution_maker, outputs
+ + + +if __name__ == '__main__': + distribution_maker, outputs = main(return_outputs=True) # pylint: disable=invalid-name +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/events.html b/_modules/pisa/core/events.html new file mode 100644 index 000000000..347f9ca0e --- /dev/null +++ b/_modules/pisa/core/events.html @@ -0,0 +1,1414 @@ + + + + + + pisa.core.events — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.events

+#! /usr/bin/env python
+
+"""
+Events class for working with PISA events files and Data class for working
+with arbitrary Monte Carlo and datasets
+"""
+
+
+from __future__ import absolute_import, division, print_function
+
+from copy import deepcopy
+from collections.abc import Iterable, Mapping, Sequence
+from collections import OrderedDict
+
+import h5py
+import numpy as np
+from numpy import inf, nan # pylint: disable=unused-import
+from uncertainties import unumpy as unp
+
+from pisa import ureg
+from pisa.core.binning import MultiDimBinning, OneDimBinning
+from pisa.core.map import Map, MapSet
+from pisa.utils import resources
+from pisa.utils.comparisons import normQuant, recursiveEquality
+from pisa.utils.flavInt import (FlavIntData, FlavIntDataGroup,
+                                flavintGroupsFromString, NuFlavIntGroup)
+from pisa.utils.format import text2tex
+from pisa.utils.hash import hash_obj
+from pisa.utils.fileio import from_file
+from pisa.utils import hdf
+from pisa.utils.log import logging, set_verbosity
+
+
+__all__ = ['Events', 'Data', 'test_Events']
+
+__author__ = 'J.L. Lanfranchi, S. Mandalia'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: test hash function (attr)
+
+[docs] +class Events(FlavIntData): + """Container for storing events, including metadata about the events. + + Examples + -------- + >>> from pisa.core.binning import OneDimBinning, MultiDimBinning + + >>> # Load events from a PISA HDF5 file + >>> events = Events('events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5') + + >>> # Apply a simple cut + >>> events = events.applyCut('(true_coszen <= 0.5) & (true_energy <= 70)') + >>> np.max(events[fi]['true_coszen']) <= 0.5 + True + + >>> # Apply an "inbounds" cut via a OneDimBinning + >>> true_e_binning = OneDimBinning( + ... name='true_energy', num_bins=80, is_log=True, + ... domain=[10, 60]*ureg.GeV + ... ) + >>> events = events.keepInbounds(true_e_binning) + >>> np.min(events[fi]['true_energy']) >= 10 + True + + >>> print([(k, events.metadata[k]) for k in sorted(events.metadata.keys())]) + [('cuts', ['analysis']), + ('detector', 'pingu'), + ('flavints_joined', + ['nue_cc+nuebar_cc', + 'numu_cc+numubar_cc', + 'nutau_cc+nutaubar_cc', + 'nuall_nc+nuallbar_nc']), + ('geom', 'v39'), + ('proc_ver', '5.1'), + ('runs', [620, 621, 622])] + + """ + def __init__(self, val=None): + self.metadata = OrderedDict([ + ('detector', ''), + ('geom', ''), + ('runs', []), + ('proc_ver', ''), + ('cuts', []), + ('flavints_joined', []), + ]) + + meta = OrderedDict() + data = FlavIntData() + if isinstance(val, (str, h5py.Group)): + data = hdf.from_hdf(val) + meta = getattr(data, 'attrs', OrderedDict()) + elif isinstance(val, Events): + meta = deepcopy(val.metadata) + data = deepcopy(val) + elif isinstance(val, Mapping): + data = deepcopy(val) + if hasattr(val, 'metadata'): + meta = deepcopy(val.metadata) + elif hasattr(val, 'attrs'): + meta = deepcopy(val.attrs) + + for key, val_ in meta.items(): + if hasattr(val_, 'tolist') and callable(val_.tolist): + meta[key] = val_.tolist() + + self.metadata.update(meta) + self.validate(data) + self.update(data) + self.update_hash() + + def __str__(self): + meta = [(str(k) + ' : ' + str(v)) for k, v in self.metadata.items()] + #fields = + return '\n'.join(meta) + + def __repr__(self): + return str(self) + + @property + def hash(self): + """Hash value""" + return self._hash + + def __hash__(self): + return self.hash + +
+[docs] + def update_hash(self): + """Update the cached hash value""" + self._hash = hash_obj(normQuant(self.metadata))
+ + + @property + def flavint_groups(self): + """All flavor/interaction type groups (even singletons) present""" + return sorted(flavintGroupsFromString( + ','.join(self.metadata['flavints_joined']) + )) + + @property + def joined_string(self): + """Concise string identifying _only_ joined flavints""" + joined_groups = sorted( + [NuFlavIntGroup(j) for j in self.metadata['flavints_joined']] + ) + if len(joined_groups) == 0: + return 'unjoined' + return 'joined_G_' + '_G_'.join([str(g) for g in joined_groups]) + +
+[docs] + def meta_eq(self, other): + """Test whether the metadata for this object matches that of `other`""" + return recursiveEquality(self.metadata, other.metadata)
+ + +
+[docs] + def data_eq(self, other): + """Test whether the data for this object matches that of `other`""" + return recursiveEquality(self, other)
+ + + def __eq__(self, other): + return self.meta_eq(other) and self.data_eq(other) + +
+[docs] + def save(self, fname, **kwargs): + hdf.to_hdf(self, fname, attrs=self.metadata, **kwargs)
+ + +
+[docs] + def histogram(self, kinds, binning, binning_cols=None, weights_col=None, + errors=False, name=None, tex=None): + """Histogram the events of all `kinds` specified, with `binning` and + optionally applying `weights`. + + Parameters + ---------- + kinds : string, sequence of NuFlavInt, or NuFlavIntGroup + binning : OneDimBinning, MultiDimBinning or sequence of arrays (one array per binning dimension) + binning_cols : string or sequence of strings + Bin only these dimensions, ignoring other dimensions in `binning` + weights_col : None or string + Column to use for weighting the events + errors : bool + Whether to attach errors to the resulting Map + name : None or string + Name to give to resulting Map. If None, a default is derived from + `kinds` and `weights_col`. + tex : None or string + TeX label to give to the resulting Map. If None, default is + dereived from the `name` specified (or its value derived from + `kinds` and `weights_col`). + + Returns + ------- + Map : numpy ndarray with as many dimensions as specified by `binning` + argument + + """ + # TODO: make able to take integer for `binning` and--in combination + # with units in the Events columns--generate an appropriate + # MultiDimBinning object, attach this and return the package as a Map. + + if not isinstance(kinds, NuFlavIntGroup): + kinds = NuFlavIntGroup(kinds) + if isinstance(binning_cols, str): + binning_cols = [binning_cols] + assert weights_col is None or isinstance(weights_col, str) + + # TODO: units of columns, and convert bin edges if necessary + if isinstance(binning, OneDimBinning): + binning = MultiDimBinning([binning]) + elif isinstance(binning, MultiDimBinning): + pass + elif (isinstance(binning, Iterable) + and not isinstance(binning, Sequence)): + binning = list(binning) + elif isinstance(binning, Sequence): + pass + else: + raise TypeError('Unhandled type %s for `binning`.' %type(binning)) + + if isinstance(binning, Sequence): + raise NotImplementedError( + 'Simle sequences not handled at this time. Please specify a' + ' OneDimBinning or MultiDimBinning object for `binning`.' + ) + #assert len(binning_cols) == len(binning) + #bin_edges = binning + + # TODO: units support for Events will mean we can do `m_as(...)` here! + bin_edges = [edges.magnitude for edges in binning.bin_edges] + if binning_cols is None: + binning_cols = binning.names + else: + assert set(binning_cols).issubset(set(binning.names)) + + # Extract the columns' data into a list of array(s) for histogramming + repr_flavint = kinds[0] + sample = [self[repr_flavint][colname] for colname in binning_cols] + err_weights = None + hist_weights = None + if weights_col is not None: + hist_weights = self[repr_flavint][weights_col] + if errors: + err_weights = np.square(hist_weights) + + hist, edges = np.histogramdd(sample=sample, + weights=hist_weights, + bins=bin_edges) + if errors: + sumw2, edges = np.histogramdd(sample=sample, + weights=err_weights, + bins=bin_edges) + hist = unp.uarray(hist, np.sqrt(sumw2)) + + if name is None: + if tex is None: + tex = kinds.tex + if weights_col is not None: + tex += r', \; {\rm weights=' + text2tex(weights_col) + r'}' + + name = str(kinds) + if weights_col is not None: + name += ', weights=' + weights_col + + if tex is None: + tex = text2tex(name) + + return Map(name=name, hist=hist, binning=binning, tex=tex)
+ + +
+[docs] + def applyCut(self, keep_criteria): + """Apply a cut by specifying criteria for keeping events. The cut must + be successfully applied to all flav/ints in the events object before + the changes are kept, otherwise the cuts are reverted. + + Parameters + ---------- + keep_criteria : string + Any string interpretable as numpy boolean expression. + + Examples + -------- + Keep events with true energies in [1, 80] GeV (note that units are not + recognized, so have to be handled outside this method) + + >>> events = events.applyCut("(true_energy >= 1) & (true_energy <= 80)") + + Do the opposite with "~" inverting the criteria + + >>> events = events.applyCut("~((true_energy >= 1) & (true_energy <= 80))") + + Numpy namespace is available for use via `np` prefix + + >>> events = events.applyCut("np.log10(true_energy) >= 0") + + """ + if keep_criteria in self.metadata['cuts']: + logging.debug("Criteria '%s' have already been applied. Returning" + " events unmodified.", keep_criteria) + return self + + # Nothing to do if no cuts specified + if keep_criteria is None: + return self + + assert isinstance(keep_criteria, str) + + #Only get the flavints for which we have data + flavints_to_process = self.flavints_present + flavints_processed = [] + remaining_data = {} + for flavint in flavints_to_process: + #Get the evets for this flavor/interaction + data_dict = self[flavint] + + field_names = data_dict.keys() + + # TODO: handle unicode: + # * translate crit to unicode (easiest to hack but could be + # problematic elsewhere) + # * translate field names to ascii (probably should be done at + # the from_hdf stage?) + + # Replace simple field names with full paths into the data that + # lives in this object + crit_str = keep_criteria + for field_name in field_names: + crit_str = crit_str.replace( + field_name, 'self["%s"]["%s"]' %(flavint, field_name) + ) + mask = eval(crit_str) + remaining_data[flavint] = ( + {k : v[mask] for k, v in self[flavint].items()} + ) + flavints_processed.append(flavint) + + remaining_events = Events() + remaining_events.metadata.update(deepcopy(self.metadata)) + remaining_events.metadata['cuts'].append(keep_criteria) + + for flavint in flavints_processed: + remaining_events[flavint] = deepcopy(remaining_data[flavint]) + + return remaining_events
+ + +
+[docs] + def keepInbounds(self, binning): + """Cut out any events that fall outside `binning`. Note that events + that fall exactly on an outer edge are kept. + + Parameters + ---------- + binning : OneDimBinning or MultiDimBinning + + Returns + ------- + remaining_events : Events + + """ + try: + binning = OneDimBinning(binning) + except Exception: + pass + if isinstance(binning, OneDimBinning): + binning = [binning] + binning = MultiDimBinning(binning) + + current_cuts = self.metadata['cuts'] + new_cuts = [dim.inbounds_criteria for dim in binning] + unapplied_cuts = [c for c in new_cuts if c not in current_cuts] + if not unapplied_cuts: + logging.debug("All inbounds criteria '%s' have already been" + " applied. Returning events unmodified.", new_cuts) + return self + + all_cuts = deepcopy(current_cuts) + unapplied_cuts + + # Create a single cut from all unapplied cuts + keep_criteria = ' & '.join(['(%s)' % c for c in unapplied_cuts]) + + # Do the cutting + remaining_events = self.applyCut(keep_criteria=keep_criteria) + + # Replace the combined 'cuts' string with individual cut strings + remaining_events.metadata['cuts'] = all_cuts + + return remaining_events
+ + + + @property + def flavints_present(self): + """Returns a tuple of the flavints that are present in the events""" + + flavints_present_list = [] + + #Loop over a tuple of all possible flav/int combinations + for flavint in self.flavints: + + # If a particular flavor/interaction combination is not present in the events, then + # self[flavint] will be set to np.nan + # Check this here, using a try block to catch exceptions throw if the data is actually + # there (in which case it is a dict, and np.isnan will raise an exception as cannot + # take a dit as input) + found_data_for_this_flavint = True + try: + if np.isnan(self[flavint]): + found_data_for_this_flavint = False + except TypeError: + pass + if found_data_for_this_flavint: + flavints_present_list.append(flavint) + + return tuple(flavints_present_list)
+ + + +
+[docs] +class Data(FlavIntDataGroup): + """Container for storing events, including metadata about the events. + + Examples + -------- + [('cuts', ['analysis']), + ('detector', 'pingu'), + ('flavints_joined', + ['nue_cc+nuebar_cc', + 'numu_cc+numubar_cc', + 'nutau_cc+nutaubar_cc', + 'nuall_nc+nuallbar_nc']), + ('geom', 'v39'), + ('proc_ver', '5.1'), + ('runs', [620, 621, 622])] + + """ + def __init__(self, val=None, flavint_groups=None, metadata=None): + # TODO(shivesh): add noise implementation + self.metadata = OrderedDict([ + ('name', ''), + ('detector', ''), + ('geom', ''), + ('runs', []), + ('proc_ver', ''), + ('cuts', []), + ('flavints_joined', []), + ]) + self.contains_neutrinos = False + self.contains_muons = False + self.contains_noise = False + + # Get data and metadata from val + meta = OrderedDict() + if isinstance(val, (str, h5py.Group)): + data = hdf.from_hdf(val) + meta = getattr(data, 'attrs', OrderedDict()) + elif isinstance(val, Data): + data = val + meta = getattr(val, 'metadata', OrderedDict()) + elif isinstance(val, (Mapping, FlavIntDataGroup)): + data = val + if hasattr(data, 'metadata'): + meta = data.metadata + elif hasattr(data, 'attrs'): + meta = data.attrs + else: + raise TypeError('Unrecognized `val` type %s' % type(val)) + + for key, val_ in meta.items(): + if hasattr(val_, 'tolist') and callable(val_.tolist): + meta[key] = val_.tolist() + + # Check consistency of metadata from val and from input + if meta is not None: + if metadata is not None and meta != metadata: + raise AssertionError('Input `metadata` does not match ' + 'metadata inside `val`') + self.metadata.update(meta) + elif metadata is not None: + self.metadata.update(metadata) + + # Find and deal with any muon data if it exists + if self.metadata['flavints_joined'] == list([]): + if 'muons' in data: + self.muons = data.pop('muons') + elif 'muons' in self.metadata['flavints_joined']: + if 'muons' not in data: + raise AssertionError('Metadata has muons specified but ' + 'they are not found in the data') + else: + self.muons = data.pop('muons') + elif 'muons' in data: + raise AssertionError('Found muons in data but not found in ' + 'metadata key `flavints_joined`') + + # Find and deal with any noise data if it exists + if self.metadata['flavints_joined'] == list([]): + if 'noise' in data: + self.noise = data.pop('noise') + elif 'noise' in self.metadata['flavints_joined']: + if 'noise' not in data: + raise AssertionError('Metadata has noise specified but ' + 'they are not found in the data') + else: + self.noise = data.pop('noise') + elif 'noise' in data: + raise AssertionError('Found noise in data but not found in ' + 'metadata key `flavints_joined`') + + # Instantiate a FlavIntDataGroup + if data == dict(): + self._flavint_groups = [] + else: + super().__init__(val=data, flavint_groups=flavint_groups) + self.contains_neutrinos = True + + # Check consistency of flavints_joined + if self.metadata['flavints_joined']: + combined_types = [] + if self.contains_neutrinos: + combined_types += [str(f) for f in self.flavint_groups] + if self.contains_muons: + combined_types += ['muons'] + if self.contains_noise: + combined_types += ['noise'] + if set(self.metadata['flavints_joined']) != \ + set(combined_types): + raise AssertionError( + '`flavint_groups` metadata does not match the ' + 'flavint_groups in the data\n{0} != ' + '{1}'.format(set(self.metadata['flavints_joined']), + set(combined_types)) + ) + else: + self.metadata['flavints_joined'] = [str(f) + for f in self.flavint_groups] + if self.contains_muons: + self.metadata['flavints_joined'] += ['muons'] + if self.contains_noise: + self.metadata['flavints_joined'] += ['noise'] + + self._hash = None + self.update_hash() + + @property + def hash(self): + """Probabilistically unique identifier""" + return self._hash + + @hash.setter + def hash(self, val): + self._hash = val + + def __hash__(self): + return self.hash + +
+[docs] + def update_hash(self): + """Update the cached hash value""" + self._hash = hash_obj(normQuant(self.metadata))
+ + + @property + def muons(self): + """muon data""" + # TODO: it seems more sensible to return None rather than raise + # AttributeError, since the attribute `muons` absolutely exists, just + # it contains no information... hence, `None` value. + # Same for `neutrinos` property. + if not self.contains_muons: + raise AttributeError('No muons loaded in Data') + return self._muons + + @muons.setter + def muons(self, val): + assert isinstance(val, dict) + self.contains_muons = True + self._muons = val + + @property + def noise(self): + if not self.contains_noise: + raise AttributeError('No noise loaded in Data') + return self._noise + + @noise.setter + def noise(self, val): + assert isinstance(val, dict) + self.contains_noise = True + self._noise = val + + @property + def neutrinos(self): + """neutrino data""" + if not self.contains_neutrinos: + raise AttributeError('No neutrinos loaded in Data') + return dict(zip(self.keys(), self.values())) + + # TODO: make sure this returns all flavints, and not just joined (grouped) + # flavints, as is the case for the Events object + @property + def names(self): + """Names of flavints joined""" + return self.metadata['flavints_joined'] + +
+[docs] + def meta_eq(self, other): + """Test whether the metadata for this object matches that of `other`""" + return recursiveEquality(self.metadata, other.metadata)
+ + +
+[docs] + def data_eq(self, other): + """Test whether the data for this object matche that of `other`""" + return recursiveEquality(self, other)
+ + +
+[docs] + def applyCut(self, keep_criteria): + """Apply a cut by specifying criteria for keeping events. The cut must + be successfully applied to all flav/ints in the events object before + the changes are kept, otherwise the cuts are reverted. + + Parameters + ---------- + keep_criteria : string + Any string interpretable as numpy boolean expression. + + Returns + ------- + remaining_events : Events + An Events object with the remaining events (deepcopied) and with + updated cut metadata including `keep_criteria`. + + Examples + -------- + Keep events with true energies in [1, 80] GeV (note that units are not + recognized, so have to be handled outside this method) + + >>> remaining = applyCut("(true_energy >= 1) & (true_energy <= 80)") + + Do the opposite with "~" inverting the criteria + + >>> remaining = applyCut("~((true_energy >= 1) & (true_energy <= 80))") + + Numpy namespace is available for use via `np` prefix + + >>> remaining = applyCut("np.log10(true_energy) >= 0") + + """ + # TODO(shivesh): function does not pass tests + raise NotImplementedError + + if keep_criteria in self.metadata['cuts']: + logging.debug("Criteria '%s' have already been applied. Returning" + " events unmodified.", keep_criteria) + return self + + assert isinstance(keep_criteria, str) + + fig_to_process = [] + if self.contains_neutrinos: + fig_to_process += deepcopy(self.flavint_groups) + if self.contains_muons: + fig_to_process += ['muons'] + if self.contains_noise: + fig_to_process += ['noise'] + + logging.info("Applying cut to %s : %s", fig_to_process, keep_criteria) + + fig_processed = [] + remaining_data = {} + for fig in fig_to_process: + data_dict = self[fig] + field_names = data_dict.keys() + + # TODO: handle unicode: + # * translate crit to unicode (easiest to hack but could be + # problematic elsewhere) + # * translate field names to ascii (probably should be done at + # the from_hdf stage?) + + # Replace simple field names with full paths into the data that + # lives in this object + crit_str = (keep_criteria) + for field_name in field_names: + crit_str = crit_str.replace( + field_name, 'self["%s"]["%s"]' % (fig, field_name) + ) + mask = eval(crit_str) + remaining_data[fig] = {k: v[mask] + for k, v in self[fig].items()} + fig_processed.append(fig) + + remaining_events = Events() + remaining_events.metadata.update(deepcopy(self.metadata)) + remaining_events.metadata['cuts'].append(keep_criteria) + for fig in fig_to_process: + remaining_events[fig] = deepcopy(remaining_data.pop(fig)) + + return remaining_events
+ + +
+[docs] + def keepInbounds(self, binning): + """Cut out any events that fall outside `binning`. Note that events + that fall exactly on the outer edge are kept. + + Parameters + ---------- + binning : OneDimBinning or MultiDimBinning + + """ + if isinstance(binning, OneDimBinning): + binning = [binning] + else: + assert isinstance(binning, MultiDimBinning) + current_cuts = self.metadata['cuts'] + new_cuts = [dim.inbounds_criteria for dim in binning] + unapplied_cuts = [c for c in new_cuts if c not in current_cuts] + for cut in unapplied_cuts: + self.applyCut(keep_criteria=cut)
+ + +
+[docs] + def transform_groups(self, flavint_groups): + """Transform Data into a structure given by the input + flavint_groups. Calls the corresponding inherited function. + + Parameters + ---------- + flavint_groups : string, or sequence of strings or sequence of + NuFlavIntGroups + + Returns + ------- + t_data : Data + """ + t_fidg = super().transform_groups(flavint_groups) + metadata = deepcopy(self.metadata) + metadata['flavints_joined'] = [str(f) for f in t_fidg.flavint_groups] + t_dict = dict(t_fidg) + if self.contains_muons: + metadata['flavints_joined'] += ['muons'] + t_dict['muons'] = deepcopy(self['muons']) + if self.contains_noise: + metadata['flavints_joined'] += ['noise'] + t_dict['noise'] = deepcopy(self['noise']) + t_fidg = t_dict + ret_obj = Data(t_fidg, metadata=metadata) + ret_obj.update_hash() + return ret_obj
+ + +
+[docs] + def digitize(self, kinds, binning, binning_cols=None): + """Wrapper for numpy's digitize function.""" + if isinstance(kinds, str): + kinds = [kinds] + if 'muons' not in kinds and 'noise' not in kinds: + kinds = self._parse_flavint_groups(kinds) + kinds = kinds[0] + + if isinstance(binning_cols, str): + binning_cols = [binning_cols] + + # TODO: units of columns, and convert bin edges if necessary + if isinstance(binning, OneDimBinning): + binning = MultiDimBinning([binning]) + elif isinstance(binning, MultiDimBinning): + pass + elif (isinstance(binning, Iterable) + and not isinstance(binning, Sequence)): + binning = list(binning) + elif isinstance(binning, Sequence): + pass + else: + raise TypeError('Unhandled type %s for `binning`.' % type(binning)) + + if isinstance(binning, Sequence): + raise NotImplementedError( + 'Simle sequences not handled at this time. Please specify a' + ' OneDimBinning or MultiDimBinning object for `binning`.' + ) + # assert len(binning_cols) == len(binning) + # bin_edges = binning + + # TODO: units support for Data will mean we can do `m_as(...)` here! + bin_edges = [edges.magnitude for edges in binning.bin_edges] + if binning_cols is None: + binning_cols = binning.names + else: + assert set(binning_cols).issubset(set(binning.names)) + + hist_idxs = [] + for colname in binning_cols: + sample = self[kinds][colname] + hist_idxs.append(np.digitize( + sample, binning[colname].bin_edges.m + )) + hist_idxs = np.vstack(hist_idxs).T + + return hist_idxs
+ + +
+[docs] + def histogram(self, kinds, binning, binning_cols=None, weights_col=None, + errors=False, name=None, tex=None, **kwargs): + """Histogram the events of all `kinds` specified, with `binning` and + optionally applying `weights`. + + Parameters + ---------- + kinds : string, sequence of NuFlavInt, or NuFlavIntGroup + binning : OneDimBinning, MultiDimBinning or sequence of arrays + (one array per binning dimension) + binning_cols : string or sequence of strings + Bin only these dimensions, ignoring other dimensions in `binning` + weights_col : None or string + Column to use for weighting the events + errors : bool + Whether to attach errors to the resulting Map + name : None or string + Name to give to resulting Map. If None, a default is derived from + `kinds` and `weights_col`. + tex : None or string + TeX label to give to the resulting Map. If None, default is + dereived from the `name` specified or the derived default. + **kwargs : Keyword args passed to Map object + + Returns + ------- + Map : numpy ndarray with as many dimensions as specified by `binning` + argument + + """ + # TODO: make able to take integer for `binning` and--in combination + # with units in the Data columns--generate an appropriate + # MultiDimBinning object, attach this and return the package as a Map. + + if isinstance(kinds, str): + kinds = [kinds] + if 'muons' not in kinds and 'noise' not in kinds: + kinds = self._parse_flavint_groups(kinds) + kinds = kinds[0] + + if isinstance(binning_cols, str): + binning_cols = [binning_cols] + assert weights_col is None or isinstance(weights_col, str) + + # TODO: units of columns, and convert bin edges if necessary + if isinstance(binning, OneDimBinning): + binning = MultiDimBinning([binning]) + elif isinstance(binning, MultiDimBinning): + pass + elif (isinstance(binning, Iterable) + and not isinstance(binning, Sequence)): + binning = list(binning) + elif isinstance(binning, Sequence): + pass + else: + raise TypeError('Unhandled type %s for `binning`.' % type(binning)) + + if isinstance(binning, Sequence): + raise NotImplementedError( + 'Simle sequences not handled at this time. Please specify a' + ' OneDimBinning or MultiDimBinning object for `binning`.' + ) + # assert len(binning_cols) == len(binning) + # bin_edges = binning + + # TODO: units support for Data will mean we can do `m_as(...)` here! + bin_edges = [edges.magnitude for edges in binning.bin_edges] + if binning_cols is None: + binning_cols = binning.names + else: + assert set(binning_cols).issubset(set(binning.names)) + + # Extract the columns' data into a list of array(s) for histogramming + sample = [self[kinds][colname] for colname in binning_cols] + err_weights = None + hist_weights = None + if weights_col is not None: + hist_weights = self[kinds][weights_col] + if errors: + err_weights = np.square(hist_weights) + + hist, edges = np.histogramdd(sample=sample, + weights=hist_weights, + bins=bin_edges) + if errors: + sumw2, edges = np.histogramdd(sample=sample, + weights=err_weights, + bins=bin_edges) + hist = unp.uarray(hist, np.sqrt(sumw2)) + + if name is None: + if tex is None: + try: + tex = kinds.tex + # TODO: specify specific exception(s) + except Exception: + tex = r'{0}'.format(kinds) + if weights_col is not None: + tex += r', \; {\rm weights} =' + text2tex(weights_col) + + name = str(kinds) + if weights_col is not None: + name += ', weights=' + weights_col + + if tex is None: + tex = text2tex(name) + + return Map(name=name, hist=hist, binning=binning, tex=tex, **kwargs)
+ + +
+[docs] + def histogram_set(self, binning, nu_weights_col, mu_weights_col, + noise_weights_col, mapset_name, errors=False): + """Uses the above histogram function but returns the set of all of them + for everything in the Data object. + + Parameters + ---------- + binning : OneDimBinning, MultiDimBinning + The definition of the binning for the histograms. + nu_weights_col : None or string + The column in the Data object by which to weight the neutrino + histograms. Specify None for unweighted histograms. + mu_weights_col : None or string + The column in the Data object by which to weight the muon + histograms. Specify None for unweighted histograms. + noise_weights_col : None or string + The column in the Data object by which to weight the noise + histograms. Specify None for unweighted histograms. + mapset_name : string + The name by which the resulting MapSet will be identified. + errors : boolean + A flag for whether to calculate errors on the histograms or not. + This defaults to False. + + Returns + ------- + MapSet : A MapSet containing all of the Maps for everything in this + Data object. + + """ + if not isinstance(binning, MultiDimBinning): + if not isinstance(binning, OneDimBinning): + raise TypeError('binning should be either MultiDimBinning or ' + 'OneDimBinning object. Got %s.' % type(binning)) + if nu_weights_col is not None: + if not isinstance(nu_weights_col, str): + raise TypeError('nu_weights_col should be a string. Got %s' + % type(nu_weights_col)) + if mu_weights_col is not None: + if not isinstance(mu_weights_col, str): + raise TypeError('mu_weights_col should be a string. Got %s' + % type(mu_weights_col)) + if not isinstance(errors, bool): + raise TypeError('flag for whether to calculate errors or not ' + 'should be a boolean. Got %s.' % type(errors)) + outputs = [] + if self.contains_neutrinos: + for fig in self.keys(): + outputs.append( + self.histogram( + kinds=fig, + binning=binning, + weights_col=nu_weights_col, + errors=errors, + name=str(NuFlavIntGroup(fig)) + ) + ) + if self.contains_muons: + outputs.append( + self.histogram( + kinds='muons', + binning=binning, + weights_col=mu_weights_col, + errors=errors, + name='muons', + tex=r'\rm{muons}' + ) + ) + if self.contains_noise: + outputs.append( + self.histogram( + kinds='noise', + binning=binning, + weights_col=mu_weights_col, + errors=errors, + name='noise', + tex=r'\rm{noise}' + ) + ) + return MapSet(maps=outputs, name=mapset_name)
+ + + def __getitem__(self, arg): + if isinstance(arg, str): + arg = arg.strip().lower() + if arg == 'muons': + return self.muons + if arg == 'noise': + return self.noise + tgt_obj = super().__getitem__(arg) + return tgt_obj + + def __setitem__(self, arg, value): + if isinstance(arg, str): + arg = arg.strip().lower() + if arg == 'muons': + self.muons = value + return + if arg == 'noise': + self.noise = value + return + super().__setitem__(arg, value) + + def __add__(self, other): + muons = None + noise = None + assert isinstance(other, Data) + + metadata = {} + for key in self.metadata: + if key == 'flavints_joined': + continue + if key in other.metadata: + if self.metadata[key] != other.metadata[key]: + raise AssertionError( + 'Metadata mismatch, key {0}, {1} != ' + '{2}'.format(key, self.metadata[key], + other.metadata[key]) + ) + else: + metadata[key] = deepcopy(self.metadata[key]) + else: + metadata[key] = deepcopy(self.metadata[key]) + + for key in other.metadata: + if key == 'flavints_joined': + continue + if key in self.metadata: + if other.metadata[key] != self.metadata[key]: + raise AssertionError( + 'Metadata mismatch, key {0}, {1} != ' + '{2}'.format(key, other.metadata[key], + self.metadata[key]) + ) + else: + metadata[key] = deepcopy(other.metadata[key]) + else: + metadata[key] = deepcopy(other.metadata[key]) + + if self.contains_muons: + if other.contains_muons: + muons = self._merge(deepcopy(self['muons']), other['muons']) + else: + muons = deepcopy(self['muons']) + elif other.contains_muons: + muons = deepcopy(other['muons']) + + if self.contains_noise: + if other.contains_noise: + noise = self._merge(deepcopy(self['noise']), other['noise']) + else: + noise = deepcopy(self['noise']) + elif other.contains_noise: + noise = deepcopy(other['noise']) + + if len(self.flavint_groups) == 0: + if len(other.flavint_groups) == 0: + a_fidg = FlavIntDataGroup(other) + elif len(other.flavint_groups) == 0: + a_fidg = FlavIntDataGroup(self) + else: + a_fidg = super().__add__(other) + metadata['flavints_joined'] = [str(f) for f in a_fidg.flavint_groups] + + if muons is not None: + a_dict = dict(a_fidg) + metadata['flavints_joined'] += ['muons'] + a_dict['muons'] = muons + a_fidg = a_dict + if noise is not None: + a_dict = dict(a_fidg) + metadata['flavints_joined'] += ['noise'] + a_dict['noise'] = noise + a_fidg = a_dict + return Data(a_fidg, metadata=metadata) + + def __str__(self): + meta = [(str(k) + ' : ' + str(v)) for k, v in self.metadata.items()] + return '\n'.join(meta) + + def __repr__(self): + return str(self) + + def __eq__(self, other): + return self.meta_eq(other) and self.data_eq(other)
+ + + +# pylint: disable=line-too-long +
+[docs] +def test_Events(): + """Unit tests for Events class""" + from pisa.utils.flavInt import NuFlavInt + # Instantiate empty object + events = Events() + + # Instantiate from PISA events HDF5 file + events = Events('events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5') + + # Apply a simple cut + events = events.applyCut('(true_coszen <= 0.5) & (true_energy <= 70)') + for fi in events.flavints: + assert np.max(events[fi]['true_coszen']) <= 0.5 + assert np.max(events[fi]['true_energy']) <= 70 + + # Apply an "inbounds" cut via a OneDimBinning + true_e_binning = OneDimBinning( + name='true_energy', num_bins=80, is_log=True, domain=[10, 60]*ureg.GeV + ) + events = events.keepInbounds(true_e_binning) + for fi in events.flavints: + assert np.min(events[fi]['true_energy']) >= 10 + assert np.max(events[fi]['true_energy']) <= 60 + + # Apply an "inbounds" cut via a MultiDimBinning + true_e_binning = OneDimBinning( + name='true_energy', num_bins=80, is_log=True, domain=[20, 50]*ureg.GeV + ) + true_cz_binning = OneDimBinning( + name='true_coszen', num_bins=40, is_lin=True, domain=[-0.8, 0] + ) + mdb = MultiDimBinning([true_e_binning, true_cz_binning]) + events = events.keepInbounds(mdb) + for fi in events.flavints: + assert np.min(events[fi]['true_energy']) >= 20 + assert np.max(events[fi]['true_energy']) <= 50 + assert np.min(events[fi]['true_coszen']) >= -0.8 + assert np.max(events[fi]['true_coszen']) <= 0 + + # Now try to apply a cut that fails on one flav/int (since the field will + # be missing) and make sure that the cut did not get applied anywhere in + # the end (i.e., it is rolled back) + sub_evts = events['nutaunc'] + sub_evts.pop('true_energy') + events['nutaunc'] = sub_evts + try: + events = events.applyCut('(true_energy >= 30) & (true_energy <= 40)') + except Exception: + pass + else: + raise Exception('Should not have been able to apply the cut!') + for fi in events.flavints: + if fi == NuFlavInt('nutaunc'): + continue + assert np.min(events[fi]['true_energy']) < 30 + + logging.info('<< PASS : test_Events >>')
+ + + +# TODO: requires proprietary data; remove dependence on this +def todo_test_Data(): + """Unit tests for Data class""" + # Instantiate from LEESARD file - located in $PISA_RESOURCES + file_loc = 'LEESARD/PRD_extend_finalLevel/12550.pckl' + file_loc2 = 'LEESARD/PRD_extend_finalLevel/14550.pckl' + f = from_file(file_loc) + f2 = from_file(file_loc2) + d = {'nue+nuebar': f} + d2 = {'numu+numubar': f2} + data = Data(d) + data2 = Data(d2) + logging.debug(str((data.keys()))) + + muon_file = 'GRECO/new_style_files/Level7_muongun.12370_15.pckl' + m = {'muons': from_file(muon_file)} + m = Data(val=m) + assert m.contains_muons + assert not m.contains_neutrinos + logging.debug(str((m))) + data = data + m + assert data.contains_neutrinos + logging.debug(str((data))) + if not data.contains_muons: + raise Exception("data doesn't contain muons.") + logging.debug(str((data.neutrinos.keys()))) + + noise_file = 'GRECO/new_style_files/Level7_VuvuzelaPureNoise_V2.990015.pckl' + n = {'noise': from_file(noise_file)} + n = Data(val=n) + assert n.contains_noise + assert not n.contains_neutrinos + logging.debug(str((n))) + data = data + n + assert data.contains_neutrinos + logging.debug(str((data))) + if not data.contains_noise: + raise Exception("data doesn't contain noise.") + logging.debug(str((data.neutrinos.keys()))) + + # Apply a simple cut + # data.applyCut('(zenith <= 1.1) & (energy <= 200)') + # for fi in data.flavint_groups: + # assert np.max(data[fi]['zenith']) <= 1.1 + # assert np.max(data[fi]['energy']) <= 200 + + # Apply an "inbounds" cut via a OneDimBinning + # e_binning = OneDimBinning( + # name='energy', num_bins=80, is_log=True, domain=[10, 200]*ureg.GeV + # ) + # data.keepInbounds(e_binning) + # for fi in data.flavint_groups: + # assert np.min(data[fi]['energy']) >= 10 + # assert np.max(data[fi]['energy']) <= 200 + + # Apply an "inbounds" cut via a MultiDimBinning + # e_binning = OneDimBinning( + # name='energy', num_bins=80, is_log=True, domain=[20, 210]*ureg.GeV + # ) + # cz_binning = OneDimBinning( + # name='zenith', num_bins=40, is_lin=True, domain=[0.1, 1.8*np.pi] + # ) + # mdb = MultiDimBinning([e_binning, cz_binning]) + # data.keepInbounds(mdb) + # for fi in data.flavint_groups: + # assert np.min(data[fi]['energy']) >= 20 + # assert np.max(data[fi]['energy']) <= 210 + # assert np.min(data[fi]['zenith']) >= 0.1 + # assert np.max(data[fi]['zenith']) <= 1.8*np.pi + + # # Now try to apply a cut that fails on one flav/int (since the field will + # # be missing) and make sure that the cut did not get applied anywhere in + # # the end (i.e., it is rolled back) + # sub_evts = data['nue+nuebar'] + # sub_evts.pop('energy') + # data['nue+nuebar'] = sub_evts + # try: + # data.applyCut('(energy >= 30) & (energy <= 40)') + # except Exception: + # pass + # else: + # raise Exception('Should not have been able to apply the cut!') + # for fi in data.flavint_groups: + # if fi == NuFlavIntGroup('nue+nuebar'): + # continue + # assert np.min(data[fi]['energy']) < 30 + + data.save('/tmp/test_FlavIntDataGroup.json') + data.save('/tmp/test_FlavIntDataGroup.hdf5') + data = Data('/tmp/test_FlavIntDataGroup.json') + data = Data(val='/tmp/test_FlavIntDataGroup.hdf5') + + d3 = data + data2 + m + logging.debug(str((d3))) + d3_com = d3.transform_groups(['nue+nuebar+numu+numubar']) + logging.debug(str((d3_com))) + + logging.info('<< PASS : test_Data >>') + + +if __name__ == "__main__": + set_verbosity(1) + test_Events() + # TODO: following is removed until a test dataset can be introduced + #test_Data() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/events_pi.html b/_modules/pisa/core/events_pi.html new file mode 100644 index 000000000..88ee23ed4 --- /dev/null +++ b/_modules/pisa/core/events_pi.html @@ -0,0 +1,883 @@ + + + + + + pisa.core.events_pi — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.events_pi

+"""PISA data container"""
+
+from __future__ import absolute_import, division, print_function
+
+import argparse
+from collections.abc import Mapping, Iterable, Sequence
+from collections import OrderedDict
+import copy
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.utils.fileio import from_file
+from pisa.utils.log import logging
+
+
+__all__ = [
+    "NU_FLAVORS",
+    "NU_INTERACTIONS",
+    "OUTPUT_NUFLAVINT_KEYS",
+    "LEGACY_FLAVKEY_XLATION",
+    "EventsPi",
+    "split_nu_events_by_flavor_and_interaction",
+    "fix_oppo_flux",
+    "main",
+]
+
+__author__ = "T. Stuttard"
+
+__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+# Define the flavors and interactions for neutrino events
+NU_FLAVORS = OrderedDict(
+    nue=12, nuebar=-12, numu=14, numubar=-14, nutau=16, nutaubar=-16
+)
+NU_INTERACTIONS = OrderedDict(cc=1, nc=2)
+OUTPUT_NUFLAVINT_KEYS = tuple(
+    "%s_%s" % (fk, ik)
+    for fk, fc in NU_FLAVORS.items()
+    for ik, ic in NU_INTERACTIONS.items()
+)
+LEGACY_FLAVKEY_XLATION = dict(
+    nue="nue",
+    nuebar="nuebar",
+    nue_bar="nuebar",
+    numu="numu",
+    numubar="numubar",
+    numu_bar="numubar",
+    nutau="nutau",
+    nutaubar="nutaubar",
+    nutau_bar="nutaubar",
+)
+
+
+# Backwards cmpatiblity fixes
+OPPO_FLUX_LEGACY_FIX_MAPPING_NU = {
+    "nominal_nue_flux" : "neutrino_nue_flux",
+    "nominal_numu_flux" : "neutrino_numu_flux",
+    "nominal_nuebar_flux" : "neutrino_oppo_nue_flux",
+    "nominal_numubar_flux" : "neutrino_oppo_numu_flux",
+}
+
+OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR = {
+    "nominal_nue_flux" : "neutrino_oppo_nue_flux",
+    "nominal_numu_flux" : "neutrino_oppo_numu_flux",
+    "nominal_nuebar_flux" : "neutrino_nue_flux",
+    "nominal_numubar_flux" : "neutrino_numu_flux",
+}
+
+def append_arrays_dict(key, val, sdict):
+    '''
+    Helper function for appending multiple dicts of arrays (e.g. from 
+    multiple input files) into a single dict of arrays 
+    '''
+    if isinstance(val, Mapping):
+        # Handle sub-dict
+        for key2, val2 in val.items() :
+            if key not in sdict :
+                sdict[key] = OrderedDict()
+            append_arrays_dict(key2, val2, sdict[key])
+    else :
+        # Have now reached a variable
+        assert isinstance(val, np.ndarray), "'%s' is not an array, is a %s" % (key, type(val)) 
+        if key in sdict :
+            sdict[key] = np.append(sdict[key], val)
+        else :
+            sdict[key] = val
+
+
+
+[docs] +class EventsPi(OrderedDict): + """ + Container for events for use with PISA pi + + Parameters + ---------- + name : string, optional + Name to identify events + + neutrinos : bool, optional + Flag indicating if events represent neutrinos; toggles special + behavior such as splitting into nu/nubar and CC/NC. Default is True. + + fraction_events_to_keep : float + Fraction of loaded events to use (use to downsample). + Must be in range [0.,1.], or disable by setting to `None`. + Default in None. + + *args, **kwargs + Passed on to `__init__` method of OrderedDict + + """ + + def __init__( + self, + *args, + name=None, + neutrinos=True, + fraction_events_to_keep=None, + events_subsample_index=0, + **kwargs + ): + super().__init__(*args, **kwargs) + + self.name = name + self.neutrinos = neutrinos + self.fraction_events_to_keep = fraction_events_to_keep + self.events_subsample_index = events_subsample_index + + # Checks for down-sampling inputs + if self.fraction_events_to_keep is not None: + + # Check `fraction_events_to_keep` value is required range + self.fraction_events_to_keep = float(self.fraction_events_to_keep) + assert (self.fraction_events_to_keep >= 0.) and (self.fraction_events_to_keep <= 1.), "`fraction_events_to_keep` must be in range [0.,1.], or None to disable" + + # Check `fraction_events_to_keep` and `events_subsample_index` values are compatible + assert isinstance(self.events_subsample_index, int), f"`events_subsample_index` must be an integer" + assert self.events_subsample_index >= 0, f"`events_subsample_index` = {self.events_subsample_index}, but must be >= 0" + max_index = int(np.floor( 1. / self.fraction_events_to_keep )) - 1 + assert self.events_subsample_index <= max_index, f"`events_subsample_index` = {self.events_subsample_index} is too large given `fraction_events_to_keep` = {self.fraction_events_to_keep} (max is {max_index})" + + # Define some metadata + #TODO Is this out of date? + self.metadata = OrderedDict( + [ + ("detector", ""), + ("geom", ""), + ("runs", []), + ("proc_ver", ""), + ("cuts", []), + ] + ) + + +
+[docs] + def load_events_file(self, events_file, variable_mapping=None, required_metadata=None, seed=123456): + """Fill this events container from an input HDF5 file filled with event + data Optionally can provide a variable mapping so select a subset of + variables, rename them, etc. + + Parameters + ---------- + events_file : string or mapping + If string, interpret as a path and load file at that path; the + loaded object should be a mapping. If already a mapping, take and + interpret events from that. + + variable_mapping : mapping, optional + If specified, should be a mapping where the keys are the + destination variable names and the items are either the source + variable names or an iterable of source variables names. In the + latter case, each of the specified source variables will become a + column vector in the destination array. + + required_metadata : None, or list of str + Can optionally specify metadata keys to parse from the input file metdata. + ONLY metadata specified here will be parsed. + Anything specified here MUST exist in the files. + """ + + # Validate `events_file` + if not isinstance(events_file, (str, Mapping, Sequence)): + raise TypeError( + "`events_file` must be either string or mapping; got (%s)" + % type(events_file) + ) + + # Validate `variable_mapping` + if variable_mapping is not None: + if not isinstance(variable_mapping, Mapping): + raise TypeError("'variable_mapping' must be a mapping (e.g., dict)") + for dst, src in variable_mapping.items(): + if not isinstance(dst, str): + raise TypeError("`variable_mapping` 'dst' (key) must be a string") + + if isinstance(src, str): + pass # Nothing to do + elif isinstance(src, Iterable): + for v in src: + if not isinstance(v, str): + raise TypeError( + "`variable_mapping` 'src' (value) has at least" + " one element that is not a string" + ) + else: + raise TypeError( + "`variable_mapping` 'src' (value) must be a string or" + " an iterable of strings" + ) + + + # Validate `required_metadata` + if required_metadata is not None : + assert isinstance(required_metadata, Sequence) + assert all([ isinstance(k, str) for k in required_metadata ]) + + # Reporting + if self.fraction_events_to_keep is not None : + logging.info("Down-sampling events (keeping %0.2g%% of the total). Will take sub-sample %i." % (100.*self.fraction_events_to_keep, self.events_subsample_index)) + + + # + # Loop over files + # + + input_data = OrderedDict() + metadata = OrderedDict() + + # Handle list of files vs single file + events_files_list = [] + if isinstance(events_file, str): + events_files_list = [events_file] + elif isinstance(events_file, Mapping): + events_files_list = [events_file] + elif isinstance(events_file, Sequence): + events_files_list = events_file + + # Loop over files + for i_file, infile in enumerate(events_files_list) : + + # + # Parse variables from file + # + + # Read the file + # If `variable_mapping` was specified, only load those variables (saves time/memory) + if isinstance(infile, str): + + # If user provided a variable mapping, only load the requested variables. + # Remember to andle cases where the variable is defined as a list of variables in + # the cfg file. + if variable_mapping is None : + choose = None + else : + choose = [] + for var_name in variable_mapping.values() : + if isinstance(var_name, str) : + choose.append(var_name) + elif isinstance(var_name, Sequence) : + for sub_var_name in var_name : + assert isinstance(sub_var_name, str), "Unknown variable format, must be `str`" + choose.append(sub_var_name) + else : + raise IOError("Unknown variable name format, must be `str` or list of `str`") + + # Handle "oppo" flux backwards compatibility + # This means adding the old variable names into the chosen variable list + # The actual renaming is done later by `fix_oppo_flux` + if variable_mapping is not None : + for var_name in choose : + if var_name in OPPO_FLUX_LEGACY_FIX_MAPPING_NU : + choose.append( OPPO_FLUX_LEGACY_FIX_MAPPING_NU[var_name] ) + if var_name in OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR : + choose.append( OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR[var_name] ) + + # Load the file + file_input_data = from_file(infile, choose=choose) + if not isinstance(file_input_data, Mapping): + raise TypeError( + 'Contents loaded from "%s" must be a mapping; got: %s' + % (infile, type(file_input_data)) + ) + assert len(file_input_data) > 0, "No input data found" + + + # File already loaded + elif isinstance(infile, Mapping) : + file_input_data = infile + + # Add to overall container + for k, v in file_input_data.items() : + append_arrays_dict(k, v, input_data) + + + # + # Parse metadata from file + # + + if required_metadata is not None : + + # Events and EventsPi objects have attr `metadata` + file_metadata = getattr(file_input_data, 'metadata', None) + + # HDF files have attr `attrs` attached, if present (see pisa.utils.hdf) + if not file_metadata: + file_metadata = getattr(file_input_data, 'attrs', None) + + if file_metadata: + + # Check format + if not isinstance(file_metadata, Mapping): + raise TypeError( + "metadata or attrs expected to be a Mapping, but got {}".format( + type(file_metadata) + ) + ) + + # Loop over expected metadata + for k in required_metadata : + + assert k in file_metadata, "Expected metadata '%s' not found" % k + + # For the special case of livetime, append livetiem from each file + # Otherwise, expect identical value in all cases + if k in self.metadata : + if k == "livetime" : + self.metadata[k] += file_metadata[k] + else : + assert self.metadata[k] == file_metadata[k] + else : + self.metadata[k] = file_metadata[k] + + + + # + # Re-format inputs + # + + # The following is intended to re-format input data into the desired + # format. This is required to handle various inout cases and to ensure + # backwards compatibility with older input file formats. + + # Convert to the required event keys, e.g. "numu_cc", "nutaubar_nc", etc. + if self.neutrinos: + input_data = split_nu_events_by_flavor_and_interaction(input_data) + + # The value for each category should itself be a dict of the event + # variables, where each entry is has a variable name as the key and an + # np.array filled once per event as the value. + # + # For backwards compatibility, convert to this format from known older + # formats first + if self.neutrinos: + for key, cat_dict in input_data.items(): + if not isinstance(cat_dict, Mapping): + raise Exception( + "'%s' input data is not a mapping, unknown format (%s)" + % (key, type(cat_dict)) + ) + for var_key, var_data in cat_dict.items(): + if not isinstance(var_data, np.ndarray): + raise Exception( + "'%s/%s' input data is not a numpy array, unknown" + " format (%s)" % (key, var_key, type(var_data)) + ) + + # Ensure backwards compatibility with the old style "oppo" flux + # variables + if self.neutrinos: + fix_oppo_flux(input_data) + + + # + # Load the event data + # + + # Should be organised under a single layer of keys, each representing + # some category of input data + + # Loop over the input types + for data_key in input_data.keys(): + if data_key in self: + raise ValueError( + "Key '%s' has already been added to this data structure" + ) + + self[data_key] = OrderedDict() + + # Loop through variable mapping + # If none provided, just use all variables and keep the input names + if variable_mapping is None: + variable_mapping_to_use = tuple( + zip(input_data[data_key].keys(), input_data[data_key].keys()) + ) + else: + variable_mapping_to_use = variable_mapping.items() + + # Init stuff for down-sampling later + chosen_event_indices = None + rand = np.random.RandomState(seed) # Enforce same sample each time + + # Get the array data (stacking if multiple input variables defined) + # and check the variable exists in the input data + for var_dst, var_src in variable_mapping_to_use: + # TODO What about non-float data? Use dtype... + + # Prepare for the stacking + array_data = None + if isinstance(var_src, str): + var_src = [var_src] + + # Perform the stacking + array_data_to_stack = [] + for var in var_src: + if var in input_data[data_key]: + array_data_to_stack.append( + input_data[data_key][var].astype(FTYPE) + ) + else: + raise KeyError( + "Variable '%s' cannot be found for '%s' events" + % (var, data_key) + ) + + # Note `squeeze` removes the extraneous 2nd dim in case of a + # single `src` + array_data = np.squeeze(np.stack(array_data_to_stack, axis=1)) + + # Check actually have some data + if array_data is None: + raise ValueError( + "Cannot find source variable(s) '%s' for '%s'" + % (var_src, data_key) + ) + + + # + # Event down sampling + # + + # Only if requested by user + if self.fraction_events_to_keep is not None: + + # Define events to keep only once for each species (e.g. same choice for all variables for a given species) + if chosen_event_indices is None : + + # Get intitial conditions + initial_num_events = array_data.size + desired_num_events = int( self.fraction_events_to_keep * float(initial_num_events) ) + + # Start with all events as input + current_event_indices = np.array( range(initial_num_events) ) + + # Loop over subsamples (will break out once reach desired subsample) + i = 0 + while True : + + # Get indices for the events to keep for this current sub-sample + assert current_event_indices.size >= desired_num_events, "Not enough events available" # Earlier checks on `fraction_events_to_keep` and `events_subsample_index` should prevent this error ever happening + chosen_event_indices = np.sort( rand.choice(current_event_indices, replace=False, size=desired_num_events) ) + + # If this is the requested sub-sample, done here + if i == self.events_subsample_index : + break + + # Otherwise have not yet reached our subsample. + # Choose the remaining events as the new input events in the algorithm, + # and on the next iteration of this loop these remaining events will be + # used for extracting the new sub-sample. + # This will result in statistically independent sub-samples + remaining_event_indices = np.sort( np.setxor1d(current_event_indices, chosen_event_indices) ) + current_event_indices = remaining_event_indices + + i += 1 + + # Report + logging.info("Down-sampled %s events : %i -> %i (%0.2g%%)" % ( data_key, array_data.size, chosen_event_indices.size, 100.*(chosen_event_indices.size/array_data.size) )) + + # Extract just the requested events + array_data = array_data[chosen_event_indices] + + # Add to array + self[data_key][var_dst] = array_data
+ + + +
+[docs] + def apply_cut(self, keep_criteria): + """Apply a cut by specifying criteria for keeping events. The cut must + be successfully applied to all flav/ints in the events object before + the changes are kept, otherwise the cuts are reverted. + + Parameters + ---------- + keep_criteria : string + Any string interpretable as numpy boolean expression. + + Examples + -------- + Keep events with true energies in [1, 80] GeV (note that units are not + recognized, so have to be handled outside this method) + + >>> events = events.apply_cut("(true_energy >= 1) & (true_energy <= 80)") + + Do the opposite with "~" inverting the criteria + + >>> events = events.apply_cut("~((true_energy >= 1) & (true_energy <= 80))") + + Numpy namespace is available for use via `np` prefix + + >>> events = events.apply_cut("np.log10(true_energy) >= 0") + + """ + assert isinstance(keep_criteria, str) + + # Check if have already applied these cuts + if keep_criteria in self.metadata["cuts"]: + logging.debug( + "Criteria '%s' have already been applied. Returning" + " events unmodified.", + keep_criteria, + ) + return self + + # TODO Get everything from the GPU first ? + + # Prepare the post-cut data container + cut_data = EventsPi(name=self.name) + cut_data.metadata = copy.deepcopy(self.metadata) + + # Loop over the data containers + for key in self.keys(): + cut_data[key] = {} + + # TODO Need to think about how to handle array, scalar and binned data + # TODO Check for `events` data mode, or should this kind of logic + # already be in the Container class? + variables = self[key].keys() + + # Create the cut expression, and get the resulting mask + crit_str = keep_criteria + for variable_name in variables: + crit_str = crit_str.replace( + variable_name, 'self["%s"]["%s"]' % (key, variable_name) + ) + mask = eval(crit_str) # pylint: disable=eval-used + + # Fill a new container with the post-cut data + for variable_name in variables: + cut_data[key][variable_name] = copy.deepcopy( + self[key][variable_name][mask] + ) + + # TODO update to GPUs? + + # Record the cuts + cut_data.metadata["cuts"].append(keep_criteria) + + return cut_data
+ + +
+[docs] + def keep_inbounds(self, binning): + """Cut out any events that fall outside `binning`. Note that events + that fall exactly on an outer edge are kept. + + Parameters + ---------- + binning : OneDimBinning or MultiDimBinning + + Returns + ------- + cut_data : EventsPi + + """ + # Get the binning instance + try: + binning = OneDimBinning(binning) + except: # pylint: disable=bare-except + pass + if isinstance(binning, OneDimBinning): + binning = [binning] + binning = MultiDimBinning(binning) + + # Define a cut to remove events outside of the binned region + bin_edge_cuts = [dim.inbounds_criteria for dim in binning] + bin_edge_cuts = " & ".join([str(x) for x in bin_edge_cuts]) + + # Apply the cut + return self.apply_cut(bin_edge_cuts)
+ + + def __str__(self): # TODO Handle non-array data cases + string = "-----------------------------\n" + string += "EventsPi container %s :" % self.name + for key, container in self.items(): + string += " %s :\n" % key + for var, array in container.items(): + array_data = array + if len(array_data) <= 4: + array_data_string = str(array_data) + else: + array_data_string = "[%s, %s, ..., %s, %s]" % ( + array_data[0], + array_data[1], + array_data[-2], + array_data[-1], + ) + string += " %s : %i elements : %s\n" % ( + var, + len(array_data), + array_data_string, + ) + string += "-----------------------------" + return string
+ + + +
+[docs] +def split_nu_events_by_flavor_and_interaction(input_data): + """Split neutrino events by nu vs nubar, and CC vs NC. + + Should be compatible with DRAGON and GRECO samples, but this depends on the + contents of the original I3 files and whatever conversion script was used + to produce the HDF5 files from these. + + Parameters + ---------- + input_data : mapping + + Returns + ------- + output_data : OrderedDict + + """ + # TODO Split into one function for nu/nubar and one for CC/NC? + assert isinstance(input_data, Mapping) + assert input_data, "`input_data` has no members" + + output_data = OrderedDict() + + # Loop through subcategories in the input data + for key, data in input_data.items(): + # If key already is one of the desired keys, nothing new to do + # Just move the data to the output container + if key in OUTPUT_NUFLAVINT_KEYS: + if key in output_data: + output_data[key] = np.concatenate(output_data[key], data) + else: + output_data[key] = data + continue + + # Legacy PISA HDF5 files are structured as + # {"<flavor>": {"<int_type>": data}}; + # and `flavor` can have "_" separating "bar". Remove such underscores + # and flatten the nested dicts into + # {"<flavor>_<int_type>": data} + # format + + if key in LEGACY_FLAVKEY_XLATION: + new_flav_key = LEGACY_FLAVKEY_XLATION[key] + for sub_key, sub_data in data.items(): + assert sub_key in ("cc", "nc"), str(sub_key) + output_key = new_flav_key + "_" + sub_key + if output_key in output_data: + output_data[output_key] = np.concatenate( + output_data[output_key], sub_data + ) + else: + output_data[output_key] = sub_data + continue + + assert "pdg_code" in data, "No 'pdg_code' variable found for %s data" % key + # Check these are neutrino events + assert np.all(np.isin(data["pdg_code"], NU_FLAVORS.values())), ( + "%s data does not appear to be a neutrino data" % key + ) + assert "interaction" in data, ( + "No 'interaction' variable found for %s data" % key + ) + + # Define a mask to select the events for each desired output key + key_mask_pairs = [ + ("%s_%s" % (fk, ik), (data["pdg_code"] == fc) & (data["interaction"] == ic)) + for fk, fc in NU_FLAVORS.items() + for ik, ic in NU_INTERACTIONS.items() + ] + + # Loop over the keys/masks and write the data for each class to the + # output container + for mkey, mask in key_mask_pairs: + if np.any(mask): # Only if mask has some data + if mkey in output_data: + output_data[mkey] = np.concatenate(output_data[mkey], data) + else: + output_data[mkey] = data + + if len(output_data) == 0: + raise ValueError("Failed splitting neutrino events by flavor/interaction") + + return output_data
+ + + + +
+[docs] +def fix_oppo_flux(input_data): + """Fix this `oppo` flux insanity + someone added this in the nominal flux calculation that + oppo flux is nue flux if flavour is nuebar, and vice versa + here we revert that, incase these oppo keys are there + """ + for key, val in input_data.items(): + if "neutrino_oppo_nue_flux" not in val: + continue + logging.warning( + 'renaming the outdated "oppo" flux keys in "%s", in the future do' + " not use those anymore", + key, + ) + if "bar" in key: + for new, old in OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR.items() : + val[new] = val.pop(old) + else: + for new, old in OPPO_FLUX_LEGACY_FIX_MAPPING_NU.items() : + val[new] = val.pop(old)
+ + + +
+[docs] +def main(): + """Load an events file and print the contents""" + parser = argparse.ArgumentParser(description="Events parsing") + parser.add_argument( + "--neutrinos", + action="store_true", + help="Treat input file as if it contains neutrino MC", + ) + parser.add_argument( + "-i", "--input-file", type=str, required=True, help="Input HDF5 events file" + ) + args = parser.parse_args() + + events = EventsPi(neutrinos=args.neutrinos) + events.load_events_file(args.input_file) + + logging.info("Loaded events from : %s", args.input_file) + + print("Metadata:") + print(events.metadata) + print(events)
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/map.html b/_modules/pisa/core/map.html new file mode 100644 index 000000000..ba1e6ed96 --- /dev/null +++ b/_modules/pisa/core/map.html @@ -0,0 +1,3848 @@ + + + + + + pisa.core.map — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.map

+"""
+Map class to contain 2D histogram, error, and metadata about the contents.
+MapSet class to contain a set of maps.
+
+Also provide basic mathematical operations that user applies directly to the
+containers but that get passed down to operate on the contained data.
+"""
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Iterable, Mapping, Sequence
+from collections import OrderedDict
+from copy import deepcopy, copy
+from fnmatch import fnmatch
+from functools import reduce
+from itertools import permutations
+from operator import add, getitem, setitem
+import os
+import re
+import shutil
+import tempfile
+
+from decorator import decorate
+import numpy as np
+from scipy.stats import poisson, norm
+from six import string_types
+import uncertainties
+from uncertainties import ufloat
+from uncertainties import unumpy as unp
+
+from pisa import ureg, HASH_SIGFIGS
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.utils.comparisons import normQuant, recursiveEquality, ALLCLOSE_KW
+from pisa.utils.flavInt import NuFlavIntGroup
+from pisa.utils.hash import hash_obj
+from pisa.utils import jsons
+from pisa.utils.fileio import get_valid_filename, mkdir
+from pisa.utils.format import (make_valid_python_name, strip_outer_dollars,
+                               text2tex)
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.random_numbers import get_random_state
+from pisa.utils import stats
+
+
+__all__ = ['FLUCTUATE_METHODS', 'type_error', 'reduceToHist', 'rebin',
+           'valid_nominal_values', 'Map', 'MapSet', 'test_Map', 'test_MapSet']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: inconsistent treatment of metrics in *chi2*, *llh*, and metric* methods
+# (Issue #264: https://github.com/jllanfranchi/pisa/issues/264)
+
+# TODO: make sure logic works for PID-separated-maps as well as
+# PID-as-binning-dimension maps
+
+# TODO: CUDA and numba implementations of rebin if these libs are available
+
+# TODO: move these utilities functions to a generic utils module?
+
+FLUCTUATE_METHODS = ['poisson', 'scaled_poisson', 'gauss', 'gauss+poisson']
+
+
+[docs] +def type_error(value): + """Generic formulation of a TypeError that can be called throughout the + code""" + raise TypeError('Type of argument not supported: "%s"' + % value.__class__.__name__)
+ + + +
+[docs] +def reduceToHist(obj): + """Recursively sum to reduce an object to a single histogram. + + Parameters + ---------- + obj : numpy.ndarray, Map, MapSet, or iterable of MapSets + + Returns + ------- + hist : numpy.ndarray + Single histogram version of `obj` + + Raises + ------ + TypeError if `obj` is an unhandled type + + """ + if isinstance(obj, np.ndarray): + hist = obj + elif isinstance(obj, Map): + hist = obj.hist + elif isinstance(obj, MapSet): + hist = sum(obj).hist + elif isinstance(obj, Iterable): + hist = sum([reduceToHist(x) for x in obj]) + else: + raise TypeError('Unhandled type for `obj`: %s' % type(obj)) + return hist
+ + + +
+[docs] +def rebin(hist, orig_binning, new_binning, normalize_values=True): + """Rebin a histogram. + + Note that the new binning's edges must be a subset of the original + binning's edges (i.e. no sub-division or extrapolation of bins is + implemented). + + Parameters + ---------- + hist : numpy.ndarray + Array containing the (original) histogram's entries + + orig_binning : MultiDimBinning + Original binning + + new_binning : MultiDimBinning + Desired binning, where `new_binning.bin_edges` must be a subset of + `orig_binning.bin_edges`. + + normalize_values : bool + Whether to apply `pisa.utils.comparisons.normQuant` to the bin edges + prior to comparing `new_binning` to `orig_binning`. This is + computationally expensive but ensures similar binnings and eqivalent + units do not cause erroneous results. It is recommended to set + `normalize_values=True` unless you know the two binning specs are + consistently defined. + + Returns + ------- + new_hist : numpy.ndarray + New histogram rebinned from `hist` + + """ + if set(new_binning.basenames) != set(orig_binning.basenames): + raise ValueError( + "`new_binning` dimensions' basenames %s do not have 1:1" + " correspondence (modulo pre/suffixes) to original binning" + " dimensions' basenames %s" + % (new_binning.basenames, orig_binning.basenames) + ) + + if orig_binning.edges_hash == new_binning.edges_hash: + return hist + + orig_dim_indices = [] + new_dim_indices = [] + for new_dim_idx, new_dim in enumerate(new_binning): + orig_dim_idx = orig_binning.index(new_dim.name, use_basenames=False) + + new_dim_indices.append(new_dim_idx) + orig_dim_indices.append(orig_dim_idx) + + orig_dim = orig_binning.dimensions[orig_dim_idx] + + if normalize_values: + orig_edges = normQuant(orig_dim.bin_edges, sigfigs=HASH_SIGFIGS) + new_edges = normQuant(new_dim.bin_edges, sigfigs=HASH_SIGFIGS) + else: + orig_edges = orig_dim.bin_edges + new_edges = new_dim.bin_edges + if not np.all(new_edges == orig_edges): + orig_edge_idx = np.array([np.where(orig_edges == n) + for n in new_edges]).ravel() + hist = np.add.reduceat(hist, orig_edge_idx[:-1], + axis=orig_dim_idx) + + new_hist = np.moveaxis(hist, source=orig_dim_indices, + destination=new_dim_indices) + + return new_hist
+ + + +def _new_obj(original_function): + """Decorator to deepcopy unaltered states into new Map object.""" + def new_function(*args, **kwargs): + """Augmented function to replace `original_function`. Note that this + docstring and the function signature will be overwritten by those from + `original_function` upon the call to `decorate` below.""" + # pylint: disable=protected-access + func = args[0] + self = args[1] + args = args[2:] + new_state = OrderedDict() + state_updates = func(self, *args, **kwargs) + for slot in self._state_attrs: + if state_updates is not None and slot in state_updates: + new_state[slot] = state_updates[slot] + else: + new_state[slot] = deepcopy(getattr(self, slot)) + if len(new_state['binning']) == 0: + return new_state['hist'] + return Map(**new_state) + return decorate(original_function, new_function) + + +
+[docs] +def valid_nominal_values(data_array): + """Get the the nominal values that are valid for an array""" + return np.ma.masked_invalid(unp.nominal_values(data_array))
+ + + +# TODO: implement strategies for decreasing dimensionality (i.e. +# projecting map onto subset of dimensions in the original map) + +# TODO: Should all calls to np.<...> be replaced with unp.<...> as is done for +# unp.sqrt below? + +
+[docs] +class Map(object): + """Class to contain a multi-dimensional histogram, error, and metadata + about the histogram. Also provides basic mathematical operations for the + contained data. See Examples below for how to use a Map object. + + + Parameters + ---------- + name : string + Name for the map. Used to identify the map. + + hist : numpy.ndarray (incl. obj array from uncertainties.unumpy.uarray) + The "data" (counts, etc.) in the map. The shape of `hist` must be + compatible with the `binning` specified. + + binning : MultiDimBinning + Describes the binning of the Map. + + error_hist : numpy ndarray + Must be same shape as `hist`. If specified, sets the error standard + deviations for the contained `hist`, replacing any stddev information + that might be contained in the passed `hist` arg. + + hash : None, or immutable object (typically an integer) + Hash value to attach to the map. + + tex : None or string + TeX string that can be used for e.g. plotting. + + full_comparison : bool + Whether to perform full (recursive) comparisons when testing the + equality of this map with another. See `__eq__` method. + + + Examples + -------- + >>> from pisa.core.binning import MultiDimBinning + >>> binning = MultiDimBinning([dict(name='energy', is_log=True, num_bins=4, + ... domain=[1, 80], units='GeV'), + ... dict(name='coszen', is_lin=True, num_bins=5, + ... domain=[-1, 0])]) + >>> m0 = Map(name='x', binning=binning, hist=np.zeros(binning.shape)) + >>> m0 + array([[ 0., 0., 0., 0., 0.], + [ 0., 0., 0., 0., 0.], + [ 0., 0., 0., 0., 0.], + [ 0., 0., 0., 0., 0.]]) + >>> m0.binning + energy: 4 logarithmically-uniform bins spanning [1.0, 80.0] GeV + coszen: 5 equally-sized bins spanning [-1.0, 0.0] + >>> m0.hist[0:4, 0] = 1 + >>> m0 + array([[ 1., 0., 0., 0., 0.], + [ 1., 0., 0., 0., 0.], + [ 1., 0., 0., 0., 0.], + [ 1., 0., 0., 0., 0.]]) + >>> m1 = m0[0:3, 0:2] + >>> m1.binning + energy: 3 logarithmically-uniform bins spanning [1.0, 26.7496121991] + coszen: 2 equally-sized bins spanning [-1.0, -0.6] + >>> m1 + array([[ 1., 0.], + [ 1., 0.], + [ 1., 0.]]) + >>> for bin in m1.iterbins(): + ... print('({0:~.2f}, {1:~.2f}): {2:0.1f}'.format( + ... bin.binning.energy.midpoints[0], + ... bin.binning.coszen.midpoints[0], + ... bin.hist[0, 0])) + (2.00 GeV, -0.90 ): 1.0 + (2.00 GeV, -0.70 ): 0.0 + (5.97 GeV, -0.90 ): 1.0 + (5.97 GeV, -0.70 ): 0.0 + (17.85 GeV, -0.90 ): 1.0 + (17.85 GeV, -0.70 ): 0.0 + + """ + _slots = ('name', 'hist', 'binning', 'hash', '_hash', 'tex', + 'full_comparison', 'parent_indexer', '_normalize_values') + _state_attrs = ('name', 'hist', 'binning', 'hash', 'tex', + 'full_comparison') + + def __init__(self, name, hist, binning, error_hist=None, hash=None, + tex=None, full_comparison=False): + # Set Read/write attributes via their defined setters + super().__setattr__('_name', name) + super().__setattr__('_tex', tex) + super().__setattr__('_hash', hash) + super().__setattr__('_full_comparison', full_comparison) + + if not isinstance(binning, MultiDimBinning): + if isinstance(binning, Sequence): + binning = MultiDimBinning(dimensions=binning) + elif isinstance(binning, Mapping): + binning = MultiDimBinning(**binning) + else: + raise ValueError('Do not know what to do with `binning`=%s of' + ' type %s' %(binning, type(binning))) + self.parent_indexer = None + + # Do the work here to set read-only attributes + super().__setattr__('_binning', binning) + binning.assert_array_fits(hist) + super().__setattr__( + '_hist', np.ascontiguousarray(hist) + ) + if error_hist is not None: + self.set_errors(error_hist) + self._normalize_values = True + + def __repr__(self): + previous_precision = np.get_printoptions()['precision'] + np.set_printoptions(precision=18) + try: + state = self.serializable_state + state['hist'] = np.array_repr(state['hist']) + if state['error_hist'] is not None: + state['error_hist'] = np.array_repr(state['error_hist']) + argstrs = [('%s=%r' % item) for item in + self.serializable_state.items()] + r = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) + finally: + np.set_printoptions(precision=previous_precision) + return r + + def __str__(self): + attrs = ['name', 'tex', 'full_comparison', 'hash', 'parent_indexer', + 'binning', 'hist'] + state = {a: getattr(self, a) for a in attrs} + state['name'] = repr(state['name']) + state['tex'] = repr(state['tex']) + state['hist'] = np.array_repr(state['hist']) + argstrs = [('%s=%s' % (a, state[a])) for a in attrs] + s = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) + return s + + def __pretty__(self, p, cycle): + """Method used by the `pretty` library for formatting""" + myname = self.__class__.__name__ + if cycle: + p.text('%s(...)' % myname) + else: + p.begin_group(4, '%s(' % myname) + attrs = ['name', 'tex', 'full_comparison', 'hash', + 'parent_indexer', 'binning', 'hist'] + for n, attr in enumerate(attrs): + p.breakable() + p.text(attr + '=') + p.pretty(getattr(self, attr)) + if n < len(attrs)-1: + p.text(',') + p.end_group(4, ')') + + def _repr_pretty_(self, p, cycle): + """Method used by e.g. ipython/Jupyter for formatting""" + return self.__pretty__(p, cycle) + +
+[docs] + def item(self, *args): + """Call ``item(*args)`` method on the contained `hist`, returning a + single Python scalar corresponding to `*args`. See help for + :method:`numpy.ndarray.item` for more info. + + Note that this method is called by :method:`numpy.asscalar`. + + Parameters + ---------- + *args + Passed to :method:`numpy.ndarray.item` + + Returns + ------- + z : Standard Python scalar object + + """ + return self.hist.item(*args)
+ + +
+[docs] + def slice(self, **kwargs): + """Slice the map, where each argument is the name of a dimension. + Dimensions not named are included in full (i.e., via `np.slice(None)`). + + Note that the resulting map maintains the same number of dimensions as + its parent, including the ordering of the dimensions. The size of each + dimension, however, is reduced by slicing. + + Note also that modifications to the returned object's `hist` will + modify the parent's `hist`. + + + Examples + -------- + Indexing can be done as in the following examples: + + >>> mdb = MultiDimBinning([ + ... dict(name='x', domain=[0,1], is_lin=True, num_bins=5), + ... dict(name='y', domain=[1,2], is_lin=True, num_bins=10) + ... ]) + >>> ones = mdb.ones(name='ones') + >>> print(ones.slice(x=0,)) + Map(name='ones', + tex='{\\rm ones}', + full_comparison=False, + hash=None, + parent_indexer=(0, slice(None, None, None)), + binning=MultiDimBinning([ + OneDimBinning(name=OneDimBinning('x', 1 bin with edges at [0.0, 0.2] (behavior is linear))), + OneDimBinning(name=OneDimBinning('y', 10 equally-sized bins spanning [1.0, 2.0]))]), + hist=array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])) + >>> print(ones.slice(x=0, y=slice(None)).hist) + [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] + >>> print(ones.slice(x=0, y=0).hist) + [[ 1.]] + + Modifications to the slice modifies the original: + + >>> mdb = MultiDimBinning([ + ... dict(name='x', domain=[0,1], is_lin=True, num_bins=5), + ... dict(name='y', domain=[1,2], is_lin=True, num_bins=10) + ... ]) + >>> ones = mdb.ones(name='ones') + >>> sl = ones.slice(x=2) + >>> sl.hist[...] = 0 + >>> print(sl.hist) + >>> print(ones.hist) + [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] + [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] + [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] + [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] + [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] + + + See Also + -------- + pisa.core.binning.MultiDimBinning.indexer + Method used to generate a raw indexer (that can be used to + index into a map or a Numpy array of same dimensionality). + This method is accessible from a Map `map_x` object via its + `binning` attribute: `map_x.binning.indexer(...)` + + pisa.core.binning.MultiDimBinning.broadcast + Broadcast a 1D Numpy array to dimensionality with reference to this + object's dimensionality. + + """ + return self[self.binning.indexer(**kwargs)]
+ + +
+[docs] + def set_poisson_errors(self): + """Approximate poisson errors using sqrt(n).""" + nom_values = self.nominal_values + super().__setattr__( + '_hist', + unp.uarray(nom_values, np.sqrt(nom_values)) + )
+ + +
+[docs] + def set_errors(self, error_hist): + """Manually define the error with an array the same shape as the + contained histogram. Can also remove errors by passing None. + + Parameters + ---------- + error_hist : None or ndarray (same shape as hist) + Standard deviations to apply to `self.hist`. + If None is passed, any errors present are removed, making + `self.hist` a bare numpy array. + + """ + if error_hist is None: + super().__setattr__( + '_hist', self.nominal_values + ) + return + self.assert_compat(error_hist) + super().__setattr__( + '_hist', + unp.uarray(self.nominal_values, np.ascontiguousarray(error_hist)) + )
+ + + # TODO: make this return an OrderedDict to organize all of the returned + # objects +
+[docs] + def compare(self, ref): + """Compare this map with another, where the other map is taken to be + the "reference" against which this is compared. + + Parameters + ---------- + ref : Map + Map against with to compare this one. `ref is taken as reference. + Each dimension in `ref.binning` must have the same name and + bin edges as this map, but the order of the dimensions does not + matter. + + Returns + ------- + comparisons : OrderedDict containing the following key/value pairs: + * 'diff' : Map, `self - ref` + * 'fract' : Map, `self / ref` + * 'fractdiff' : Map, `(self - ref) / ref` + * 'max_abs_diff' : float, `max(abs(diff))` + * 'max_abs_fractdiff' : float, `max(abs(fractdiff))` + * 'nanmatch' : bool, whether nan elements match + * 'infmatch' : bool, whether +inf (and separately -inf) entries match + + """ + assert isinstance(ref, Map) + assert ref.binning == self.binning + diff = self - ref + with np.errstate(divide='ignore', invalid='ignore'): + fract = self / ref + fractdiff = diff / ref + + max_abs_fractdiff = np.nanmax(np.abs(fractdiff.nominal_values)) + + # Handle cases where ratio returns infinite + # This isn't necessarily a fail, since all it means is the referene was + # zero; if the new value is sufficiently close to zero then it's still + # fine. + if np.isinf(max_abs_fractdiff): + # First find all the finite elements + finite_mask = np.isfinite(fractdiff.nominal_values) + # Then find the nanmax of this, will be our new test value + max_abs_fractdiff = np.nanmax(np.abs( + fractdiff.nominal_values[finite_mask] + )) + + # TODO(bug): Why is ~finite_mask used to select elements here? + # Shouldn't all elements be considered, regardless if fractdiff is + # inf somewhere? + + # Also find all the infinite elements; compute a second test value + max_abs_diff = np.nanmax(np.abs(diff.nominal_values[~finite_mask])) + else: + # Without any infinite elements we can ignore this second test + max_abs_diff = np.nanmax(np.abs(diff.nominal_values)) + + nanmatch = bool(np.all(np.isnan(self.nominal_values) + == np.isnan(ref.nominal_values))) + infmatch = bool(np.all( + self.nominal_values[np.isinf(self.nominal_values)] + == ref.nominal_values[np.isinf(ref.nominal_values)] + )) + + comparisons = OrderedDict([ + ('diff', diff), + ('fract', fract), + ('fractdiff', fractdiff), + ('max_abs_fractdiff', max_abs_fractdiff), + ('max_abs_diff', max_abs_diff), + ('nanmatch', nanmatch), + ('infmatch', infmatch) + ]) + + return comparisons
+ + +
+[docs] + def plot(self, symm=False, logz=False, vmin=None, vmax=None, backend=None, + ax=None, title=None, cmap=None, clabel=None, clabelsize=None, + xlabelsize=None, ylabelsize=None, titlesize=None, fig_kw=None, + pcolormesh_kw=None, colorbar_kw=None, outdir=None, fname=None, + fmt=None, binlabel_format=None, binlabel_colors=["white", "black"], + binlabel_color_thresh=None, binlabel_stripzeros=True, dpi=300, + bad_color=None): + """Plot a 2D map. + + Parameters + ---------- + symm : bool, optional + Plot with symmetric (about 0) value-range limits. + + logz : bool, optional + Plot logarithmic value-range + + vmin, vmax : float, optional + Minimum and maximum values for the value-range of the plot. If None + specified, these are set according to `symm` and/or the values of + the `hist` in this Map. + + backend : string, optional + Matplotlib backend to use (only takes effect if matplotlib is first + imported by this function). + + ax : matplotlib.axis.Axis, optional + Provide an axis onto which the plot is drawn; if None is specified, + a new figure and axis are created. + + title : string, optional + Set the title to this value; if None is specified, the title is + taken from the name of this Map. + + cmap : string or matplotlib.colors.Colormap, optional + + clabel : string, optional + Label to place on the colorbar + + clabelsize, xlabelsize, ylabelsize, titlesize : float, optional + Size of the colorbar, x-axis label, y-axis label, and title text + + fig_kw : mapping, optional + Keyword arguments passed to call to `matplotlib.pyplot.figure`; + this is only done, however, if `ax` is None and so a new figure + needs to be created. + + pcolormesh_kw : mapping, optional + Keyword arguments to pass to call to `matplotlib.pyplot.pcolormesh` + (if Map is two or more dimensions). + + colorbar_kw : mapping, optional + Keyword arguments to pass to call to `matplotlib.colorbar`. + + fmt : string in ('pdf', 'png') or iterable thereof, optional + File format(s) in which to save the file. If None, then the plot + will not be saved. + + outdir : string, optional + Directory into which to save the plot. If None is provided, the the + default is the current directory. Note that if `fmt` is None, then + this argument is irrelevant. + + fname : string, optional + Custom filename to set for saved figure. If not provided, a name + is derived from the `name` attribute of the Map. Note that if + `fmt` is None, then this argument is irrelevant. + + binlabel_format : :obj:`str`, optional + Format string to label the content in each bin. If None (default), the bins + will not be labeled. Bin labels are generated by calling `.format(zi)` on + the given string, where `zi` is the z-value of bin i. + + binlabel_stripzeros : bool, optional + Strip zeros from bin labels. Default: `True` + + binlabel_colors : :obj:`str` or list of :obj:`str`, optional + Colors to be used below (index 0) and above (index 1) the + `binlabel_color_thresh` value. Default: "white" below and "black" above + threshold. If only one :obj:`str` is given, all labels will have that color. + + binlabel_color_thresh : float or :obj:`str`, optional + Threshold at which to switch color of the bin labels for better contrast. If + `None` (default), all labels will use the last color given in + `binlabel_colors`. If a `float` is given, bins with a value below the given + number use the first color in `binlabel_colors` and bins with a value above + the given number use the second color in `binlabel_colors`. If "auto", set + threshold automatically (basically half way). + dpi : int, optional + Dots per inch for saved figure. Default: 300 + bad_color : string, optional + Can choose the color used for "bad" bins (e.g. NaN) + + Returns + ------- + fig : :class:`matplotlib.figure.Figure` object + ax : :class:`matplotlib.axes.Axes` object + pcmesh : :class:`matplotlib.collections.QuadMesh` + colorbar : :class:`matplotlib.colorbar.Colorbar` + + """ + import matplotlib as mpl + import matplotlib.pyplot as plt + from mpl_toolkits.axes_grid1 import make_axes_locatable + + cmap_seq = mpl.cm.get_cmap("Spectral_r").copy() + cmap_seq.set_bad(color=(0.0, 0.2, 0.0), alpha=1) + + cmap_div = mpl.cm.get_cmap("RdBu_r").copy() + cmap_div.set_bad(color=(0.5, 0.9, 0.5), alpha=1) + + # TODO: use https://matplotlib.org/users/colormapnorms.html + # to allow for both symm and logz (and to implement logz in the first + # place!) + assert not(symm and logz) + + if title is None: + title = '$%s$' % (self.name if self.tex is None else self.tex) + + if fname is None: + fname = get_valid_filename(self.name) + + fig_kw = {} if fig_kw is None else fig_kw + pcolormesh_kw = {} if pcolormesh_kw is None else pcolormesh_kw + colorbar_kw = {} if colorbar_kw is None else colorbar_kw + if fmt is not None: + if isinstance(fmt, string_types): + fmt = [fmt] + fmt = set(f.strip().lower().lstrip('.') for f in fmt) + if outdir is None: + outdir = './' + else: + mkdir(outdir, warn=False) + + if ax is None: + fig = plt.figure(**fig_kw) + ax = fig.add_subplot(111) + else: + fig = ax.figure + + # 2D by arraying them as 1D slices in the smallest dimension(s) + if len(self.binning) == 3: + + smallest_dim = self.binning.names[np.argmin(self.binning.shape)] + + # we need to set the vmin and vmax now by hand: + if vmin is None: + vmin = np.nanmin(unp.nominal_values(self.hist)) + + if vmax is None: + vmax = np.nanmax(unp.nominal_values(self.hist)) + + if symm: + v = np.max([-vmin, vmax]) + vmin = -v + vmax = v + + divider = make_axes_locatable(ax) + + # prepare some smaller axes: + small_axes = [ax] + for bin_idx in range(1, self.binning[smallest_dim].num_bins): + small_axes.append(divider.append_axes("right", size="100%", pad=0.1, sharey=ax)) + small_axes[-1].yaxis.set_visible(False) + + for bin_idx, to_plot in enumerate(self.split(smallest_dim)): + _, _, pcmesh, colorbar = to_plot.plot( + symm=symm, logz=logz, vmin=vmin, vmax=vmax, + ax=small_axes[bin_idx], cmap=cmap, clabel=clabel, + clabelsize=clabelsize, xlabelsize=xlabelsize, + ylabelsize=ylabelsize, titlesize=titlesize, + pcolormesh_kw=pcolormesh_kw, colorbar_kw=colorbar_kw, + binlabel_format=binlabel_format, binlabel_colors=["white", "black"], + binlabel_color_thresh=binlabel_color_thresh, binlabel_stripzeros=binlabel_stripzeros, + ) + + if fmt is not None: + for fmt_ in fmt: + path = os.path.join(outdir, fname + '.' + fmt_) + fig.savefig(path, dpi=dpi) + logging.debug('>>>> Plot for inspection saved at %s', path) + + return fig, ax, pcmesh, colorbar + + + if len(self.binning) == 2: + to_plot = self + else: + to_plot = self.squeeze() + assert len(to_plot.binning) == 2 + + if fmt is not None and fname is None: + fname = get_valid_filename(to_plot.name) + + hist = valid_nominal_values(to_plot.hist) + if symm: + cmap = cmap_div if cmap is None else cmap + if vmin is None and vmax is None: + vmax_ = np.nanmax(np.abs(hist)) + elif vmin is None and vmax is not None: + vmax_ = np.abs(vmax) + elif vmin is not None and vmax is None: + vmax_ = np.abs(vmin) + else: # neither vmax nor vmin are None + assert vmax > vmin and vmax == -vmin + vmax_ = vmax + vmin_ = -vmax_ + elif logz: + cmap = cmap_seq if cmap is None else cmap + vmin_ = vmin if vmin is not None else hist[hist > 0].min() + vmax_ = vmax if vmax is not None else np.nanmax(hist) + else: + cmap = cmap_seq if cmap is None else cmap + vmin_ = vmin if vmin is not None else np.nanmin(hist) + vmax_ = vmax if vmax is not None else np.nanmax(hist) + + x = to_plot.binning.dims[0].bin_edges.magnitude + y = to_plot.binning.dims[1].bin_edges.magnitude + + if to_plot.binning.dims[0].is_log: + xticks = 2**(np.arange(np.ceil(np.log2(min(x))), + np.floor(np.log2(max(x)))+1)) + x = np.log10(x) + if to_plot.binning.dims[1].is_log: + yticks = 2**(np.arange(np.ceil(np.log2(min(y))), + np.floor(np.log2(max(y)))+1)) + y = np.log10(y) + + # If user specified a "bad" color, set this + # Need a cmap object, so if we just have a string name then get the actual cmap object first + if bad_color is not None : + if isinstance(cmap, str) : # Need a cmap + cmap = plt.get_cmap(cmap) + cmap.set_bad(bad_color) + + defaults = dict( + vmin=vmin_, vmax=vmax_, cmap=cmap, + shading='flat', edgecolors='face' + ) + if logz: + defaults['norm'] = mpl.colors.LogNorm( + vmin_, vmax_, clip=True + ) + + for key, dflt_val in defaults.items(): + if key not in pcolormesh_kw: + pcolormesh_kw[key] = dflt_val + + X, Y = np.meshgrid(x, y) + pcmesh = ax.pcolormesh(X, Y, hist.T, **pcolormesh_kw) + if binlabel_format is not None: + X_mid = np.true_divide(X[1:, 1:] + X[1:, :-1], 2) + Y_mid = np.true_divide(Y[1:, 1:] + Y[:-1, 1:], 2) + for xi, yi, zi in zip(np.ravel(X_mid), np.ravel(Y_mid), np.ravel(hist.T)): + if binlabel_color_thresh is not None: + assert len(binlabel_colors) == 2, "must give two colors with thresh" + if binlabel_color_thresh == "auto": + thresh = np.mean([np.nanmax(hist), np.nanmin(hist)]) + else: + thresh = binlabel_color_thresh + txtcolor = binlabel_colors[0] if zi < thresh else binlabel_colors[1] + else: + try: + txtcolor = binlabel_colors[-1] + except: # if binlabel_colors is not a list + txtcolor = binlabel_colors + binlabel = binlabel_format.format(zi) + if binlabel_stripzeros: + binlabel = binlabel.lstrip('0') + ax.text(xi, yi, binlabel, + horizontalalignment='center', + verticalalignment='center', + color=txtcolor, + fontsize=10) + colorbar = plt.colorbar(mappable=pcmesh, ax=ax, **colorbar_kw) + colorbar.ax.tick_params(labelsize='large') + if clabel is not None: + colorbar.set_label(label=clabel, size=clabelsize) + + xlabel = '$%s$' % to_plot.binning.dims[0].label + ylabel = '$%s$' % to_plot.binning.dims[1].label + + ax.set_xlabel(xlabel, size=xlabelsize) + ax.set_ylabel(ylabel, size=ylabelsize) + ax.set_title(title, y=1.03, size=titlesize) + ax.set_xlim(np.min(x), np.max(x)) + ax.set_ylim(np.min(y), np.max(y)) + + if to_plot.binning.dims[0].is_log: + ax.set_xticks(np.log10(xticks)) + ax.set_xticklabels([str(int(xt)) for xt in xticks]) + if to_plot.binning.dims[1].is_log: + ax.set_yticks(np.log10(yticks)) + ax.set_yticklabels([str(int(yt)) for yt in yticks]) + + if fmt is not None: + for fmt_ in fmt: + path = os.path.join(outdir, fname + '.' + fmt_) + fig.savefig(path, dpi=dpi) + logging.debug('>>>> Plot for inspection saved at %s', path) + + return fig, ax, pcmesh, colorbar
+ + + @_new_obj + def __deepcopy__(self, memo): + """ Hook for deepcopy to correctly handle hists """ + return {} + +
+[docs] + @_new_obj + def reorder_dimensions(self, order): + """Rearrange the dimensions in the map. This affects both the binning + and the contained histogram. + + Parameters + ---------- + order : MultiDimBinning or sequence of str, int, or OneDimBinning + Ordering desired for the dimensions of this map. See + `binning.reorder_dimensions` for details on how to specify `order`. + + Returns + ------- + Map : copy of this map but with dimensions reordered + + See Also + -------- + rebin + Modify Map (and its binning) by splitting or combining adjacent + bins + + downsample + Modify Map (and its binning) by combining adjacent bins + + """ + new_binning = self.binning.reorder_dimensions(order) + orig_order = list(range(len(self.binning))) + new_order = [self.binning.index(b, use_basenames=False) + for b in new_binning] + # TODO: should this be a deepcopy rather than a simple veiw of the + # original hist (the result of np.moveaxis)? + new_hist = np.moveaxis(self.hist, source=new_order, + destination=orig_order) + return {'hist': new_hist, 'binning': new_binning}
+ + +
+[docs] + @_new_obj + def squeeze(self): + """Remove any singleton dimensions (i.e. that have only a single bin). + Analagous to `numpy.squeeze`. + + Returns + ------- + Map with equivalent values but singleton dimensions removed + + """ + new_binning = self.binning.squeeze() + new_hist = self.hist.squeeze() + return {'hist': new_hist, 'binning': new_binning}
+ + +
+[docs] + @_new_obj + def round2int(self): + binning = self.binning + nominal_values = np.rint(self.nominal_values) + std_devs = self.std_devs + return {'hist': unp.uarray(nominal_values, std_devs)}
+ + +
+[docs] + @_new_obj + def sum(self, axis=None, keepdims=False): + """Sum over dimensions corresponding to `axis` specification. Similar + in behavior to `numpy.sum` method. + + Parameters + ---------- + axis : None; or str, int, or sequence thereof + Dimension(s) to be summed over. If None, sum over _all_ dimensions. + + keepdims : bool + If True, marginalizes out (removes) the specified dimensions. If + False, the binning in the summed dimension(s) is expanded to the + full range of the binning for each dimension over which the sum is + performed. + + Returns + ------- + s : Map or scalar + If all contained dimensiosn are summed over and `keepdims` is + False, a scalar is returned. Otherwise, a Map is returned with + dimensions marginalized out in the sum removed if `keepdims` is + False. + + """ + + #TODO This function does't work if axis=None, since @_new_obj expects the output to be a map + + if axis is None: + axis = self.binning.names + if isinstance(axis, (string_types, int)): + axis = [axis] + # Note that the tuple is necessary here (I think...) + sum_indices = tuple([self.binning.index(dim) for dim in axis]) + new_hist = np.nansum(self.hist, axis=sum_indices, keepdims=keepdims) + + new_binning = [] + for idx, dim in enumerate(self.binning.dims): + if idx in sum_indices: + if keepdims: + new_binning.append(dim.downsample(len(dim))) + else: + new_binning.append(dim) + return {'hist': new_hist, 'binning': new_binning}
+ + +
+[docs] + def project(self, axis, keepdims=False): + """Project all dimensions onto a single `axis`. + + Parameters + ---------- + axis : string or int + Dimensions to be projected onto. + keepdims : bool + If True, marginalizes out (removes) the _un_specified dimensions. + If False, the binning in the summed dimension(s) includes + the full range of the binning for each dimension in the original + Map. Note that if you want to remove all _singleton_ dimensions + (which could include the `axis` specified here), call the + `squeeze` method on the result of `project`. + + Returns + ------- + projection : Map + + """ + keep_index = self.binning.index(axis) + sum_indices = list(range(len(self.binning.dims))) + sum_indices.remove(keep_index) + + return self.sum(axis=sum_indices, keepdims=keepdims)
+ + +
+[docs] + @_new_obj + def rebin(self, new_binning): + """Rebin the map with bin edge locations and names according to those + specified in `new_binning`. + + Calls the `rebin` function in the pisa.core.map.rebin module to do the + actual work. + + Parameters + ---------- + new_binning : MultiDimBinning + Dimensions specified in `new_binning` must match (modulo + pre/suffixes) the current dimensions. + + Returns + ------- + Map binned according to `new_binning`. + + See Also + --------- + `pisa.core.map.rebin` : function called to do the work + + """ + # TODO: put uncertainties in + + assert self.binning.mask is None, "`rebin` function does not currenty support bin masking" + + new_hist = rebin(hist=self.hist, orig_binning=self.binning, + new_binning=new_binning) + return {'hist': new_hist, 'binning': new_binning}
+ + +
+[docs] + def downsample(self, *args, **kwargs): + """Downsample by integer factor(s), summing together merged bins' + values. + + See pisa.utils.binning.MultiDimBinning.downsample for args/kwargs + details. + + """ + new_binning = self.binning.downsample(*args, **kwargs) + return self.rebin(new_binning)
+ + +
+[docs] + @_new_obj + def fluctuate(self, method, random_state=None, jumpahead=None): + """Apply fluctuations to the map's values. + + Parameters + ---------- + method : None or string + Valid strings are '', 'none', 'poisson', 'scaled_poisson', 'gauss', or + 'gauss+poisson'. Strings are case-insensitive and whitespace is + removed. + The 'scaled_poisson' method implements a Scaled Poisson Process, which is + a better approximation than a normal distribution to the true distribution + of bin counts that are the result of a Poisson process with weighted events[1]. + The fluctuated maps are guaranteed to have the same mean and standard + deviation as the original map. + + random_state : None or type accepted by utils.random_numbers.get_random_state + + Returns + ------- + fluctuated_map : Map + New map with entries fluctuated as compared to this map + + References + ---------- + .. [1] Bohm & Zech, "Statistics of weighted Poisson events and its applications" (2013), + https://arxiv.org/abs/1309.1287 + """ + orig = method + method = str(method).strip().lower().replace(' ', '') + if not method in FLUCTUATE_METHODS: + raise ValueError( + 'Map fluctuation method "%s" not recognized! Valid choices are:' + ' %s.' % (method, FLUCTUATE_METHODS) + ) + if method == 'poisson': + random_state = get_random_state(random_state, jumpahead=jumpahead) + with np.errstate(invalid='ignore'): + orig_hist = self.nominal_values + nan_at = np.isnan(orig_hist) + valid_mask = ~nan_at + + hist_vals = np.empty_like(orig_hist) + hist_vals[valid_mask] = poisson.rvs( + orig_hist[valid_mask], + random_state=random_state + ) + hist_vals[nan_at] = np.nan + + error_vals = np.empty_like(orig_hist) + error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) + error_vals[nan_at] = np.nan + return {'hist': unp.uarray(hist_vals, error_vals)} + + if method == 'scaled_poisson': + random_state = get_random_state(random_state, jumpahead=jumpahead) + with np.errstate(invalid='ignore'): + orig_hist = self.nominal_values + sigma = self.std_devs + + nan_at = np.isnan(orig_hist) + zero_at = orig_hist == 0. + valid_mask = ~nan_at + if np.any(sigma[valid_mask & ~zero_at] == 0.): + logging.warn( + "Some bins have non-zero counts but no assiciated error! " + "All errors will be set to their Poisson expectation now. " + "To avoid this warning, call `set_poisson_errors()` on the " + "map or set non-zero errors manually." + ) + sigma[valid_mask] = np.sqrt(orig_hist[valid_mask]) + variance_valid = sigma[valid_mask]**2 + + if np.allclose(variance_valid, orig_hist[valid_mask], **ALLCLOSE_KW): + scale_factor = 1. + else: + scale_factor = variance_valid/orig_hist[valid_mask] + poisson_lambda = orig_hist[valid_mask]/scale_factor + + hist_vals = np.empty_like(orig_hist) + hist_vals[valid_mask] = poisson.rvs( + poisson_lambda, + random_state=random_state + ) + hist_vals[valid_mask] *= scale_factor + hist_vals[nan_at] = np.nan + hist_vals[zero_at] = 0. + # the standard deviation is unchanged + sigma[nan_at] = np.nan + return {'hist': unp.uarray(hist_vals, sigma)} + + elif method == 'gauss+poisson': + random_state = get_random_state(random_state, jumpahead=jumpahead) + with np.errstate(invalid='ignore'): + orig_hist = self.nominal_values + sigma = self.std_devs + nan_at = np.isnan(orig_hist) + valid_mask = ~nan_at + gauss = np.empty_like(orig_hist, dtype=np.float64) + gauss[valid_mask] = norm.rvs( + loc=orig_hist[valid_mask], scale=sigma[valid_mask], + random_state=random_state + ) + + hist_vals = np.empty_like(orig_hist, dtype=np.float64) + hist_vals[valid_mask] = poisson.rvs( + gauss[valid_mask], + random_state=random_state + ) + hist_vals[nan_at] = np.nan + + error_vals = np.empty_like(orig_hist, dtype=np.float64) + error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) + error_vals[nan_at] = np.nan + return {'hist': unp.uarray(hist_vals, error_vals)} + + elif method == 'gauss': + random_state = get_random_state(random_state, jumpahead=jumpahead) + with np.errstate(invalid='ignore'): + orig_hist = self.nominal_values + sigma = self.std_devs + nan_at = np.isnan(orig_hist) + valid_mask = ~nan_at + hist_vals = np.empty_like(orig_hist, dtype=np.float64) + hist_vals[valid_mask] = norm.rvs( + loc=orig_hist[valid_mask], scale=sigma[valid_mask], + random_state=random_state + ) + + hist_vals[nan_at] = np.nan + error_vals = np.empty_like(orig_hist, dtype=np.float64) + error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) + error_vals[nan_at] = np.nan + return {'hist': unp.uarray(hist_vals, error_vals)} + + elif method in ['', 'none']: + return {}
+ + + @property + def shape(self): + """tuple : shape of the map, akin to `nump.ndarray.shape`""" + return self.hist.shape + + @property + def size(self): + """int : total number of elements""" + return self.hist.size + + @property + def num_entries(self): + """int : total number of weighted entries in all bins""" + return np.sum(valid_nominal_values(self.hist)) + + @property + def serializable_state(self): + state = OrderedDict() + state['name'] = self.name + state['hist'] = self.nominal_values + state['binning'] = self.binning.serializable_state + stddevs = self.std_devs + stddevs = None if np.all(stddevs == 0) else stddevs + state['error_hist'] = stddevs + state['hash'] = self.hash + state['tex'] = self._tex + state['full_comparison'] = self.full_comparison + return state + + @property + def hashable_state(self): + state = OrderedDict() + state['name'] = self.name + if self.normalize_values: + state['hist'] = normQuant(self.nominal_values, + sigfigs=HASH_SIGFIGS) + stddevs = normQuant(self.std_devs, sigfigs=HASH_SIGFIGS) + else: + state['hist'] = self.nominal_values + stddevs = self.std_devs + state['binning'] = self.binning.hashable_state + # TODO: better check here to see if the contained datatype is unp, as + # opposed to 0 stddev (which could be the case but the user wants for + # uncertainties to propagate) + if np.all(stddevs == 0): + stddevs = None + elif self.normalize_values: + stddevs = normQuant(stddevs, sigfigs=HASH_SIGFIGS) + state['error_hist'] = stddevs + state['full_comparison'] = self.full_comparison + return state + + @property + def normalize_values(self): + return self._normalize_values + + @normalize_values.setter + def normalize_values(self, b): + assert isinstance(b, bool) + self._normalize_values = b + + def __getstate__(self): + return self.serializable_state + + def __setstate__(self, state): + self.__init__(**state) + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + + Parameters + ---------- + filename : str + Filename; must be either a relative or absolute path (*not + interpreted as a PISA resource specification*) + **kwargs + Further keyword args are sent to `pisa.utils.jsons.to_json()` + + See Also + -------- + from_json : Intantiate new object from the file written by this method + pisa.utils.jsons.to_json + + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, resource): + """Instantiate a new Map object from a JSON file. + + The format of the JSON is generated by the `Map.to_json` method, which + converts a Map object to basic types and then numpy arrays are + converted in a call to `pisa.utils.jsons.to_json`. + + Parameters + ---------- + resource : str + A PISA resource specification (see pisa.utils.resources) + + See Also + -------- + to_json + pisa.utils.jsons.to_json + + """ + state = jsons.from_json(resource) + # State is a dict with kwargs, so instantiate with double-asterisk + # syntax + return cls(**state)
+ + +
+[docs] + def assert_compat(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + return + elif isinstance(other, np.ndarray): + self.binning.assert_array_fits(other) + elif isinstance(other, Map): + self.binning.assert_compat(other.binning) + else: + raise TypeError('Unhandled type %s' % type(other))
+ + +
+[docs] + def iterbins(self): + """Returns a bin iterator which yields a map containing a single bin + each time. Note that modifications to that single-bin map will be + reflected in this (the parent) map. + + Note that the returned map has the attribute `parent_indexer` for + indexing directly into to the parent map (or to a similar map). + + Yields + ------ + Map object containing one of each bin of this Map + + """ + for i in range(self.size): + idx_coord = self.binning.index2coord(i) + idx_view = tuple(slice(x, x+1) for x in idx_coord) + single_bin_map = Map( + name=self.name, + hist=self.hist[idx_view], + binning=self.binning[idx_coord], + hash=None, + tex=self.tex, + full_comparison=self.full_comparison, + ) + single_bin_map.parent_indexer = idx_coord + yield single_bin_map
+ + + # TODO : example! +
+[docs] + def itercoords(self): + """Iterator that yields the coordinate of each bin in the map.""" + return self.binning.itercoords()
+ + + def __hash__(self): + if self.hash is not None: + return self.hash + raise ValueError('No hash defined.') + + def __setattr__(self, attr, value): + """Only allow setting attributes defined in slots""" + if attr not in self._slots: + raise ValueError('Attribute "%s" not allowed to be set.' % attr) + super().__setattr__(attr, value) + + def __getattr__(self, attr): + return super().__getattribute__(attr) + + def _slice_or_index(self, idx): + """Slice or index into the map. Indexing single element in self.hist + e.g. hist[1,3] returns a 0D array while hist[1,3:8] returns a 1D array, + but we need 2D (in his example)... so reshape after indexing (the + indexed binning obj implements this logic and so knows the shape the + hist should be). + + """ + new_binning = self.binning[idx] + + new_map = Map(name=self.name, + hist=np.reshape(self.hist[idx], new_binning.shape), + binning=self.binning[idx], + hash=self.hash, + tex=self.tex, + full_comparison=self.full_comparison) + new_map.parent_indexer = idx + return new_map + + def __getitem__(self, idx): + return self._slice_or_index(idx) + + # TODO: if no bin name is given (i.e., 1D indexing), then split into maps + # and return a MapSet with a map per bin; append '__%s__%s' %(dim_name, + # bin_name) to this map's name to name each new map, and if no bin names + # are given, use str(int(ind)) instead for bin_name. +
+[docs] + def split(self, dim, bin=None, use_basenames=False): + """Split this map into one or more maps by selecting the `dim` + dimension and optionally the specific bin(s) within that dimension + specified by `bin`. + + If both `dim` and `bin` are specified and this identifies a single bin, + a single Map is returned, while if this locates multiple bins, a MapSet + is returned where each map corresponds to a bin (in the order dictated + by the `bin` specification). + + If only `dim` is specified, _regardless_ if multiple bins meet the + (dim, bin) criteria, the maps corresponding to each `bin` are collected + into a MapSet and returned. + + Resulting maps are ordered according to the binning and are renamed as: + + new_map[j].name = orig_map.name__dim.binning.bin_names[i] + + if the current map has a name, or + + new_map[j].name = dim.binning.bin_names[i] + + if the current map has a zero-length name. + + In the above, j is the index into the new MapSet and i is the index to + the bin in the original binning spec. `map.name` is the current + (pre-split) map's name, and if the bins do not have names, then the + stringified integer index to the bin, str(i), is used instead. + + Parameters + ---------- + dim : string, int + Name or index of a dimension in the map + bin : None or bin indexing object (str, int, slice, ellipsis) + Optionally specify specific bin(s) to split out from the chosen + dimension. + + Returns + ------- + split_maps : Map or MapSet + If only `dim` is passed, returns MapSet regardless of how many maps + are found. If both `dim` and `bin` are specified and this results + in selecting more than one bin, also returns a MapSet. However if + both `dim` and `bin` are specified and this selects a single bin, + just the indexed Map is returned. Naming of the maps and MapSet is + updated to reflect what the map represents, while the hash value is + copied into the new map(s). + + """ + + dim_index = self.binning.index(dim, use_basenames=use_basenames) + spliton_dim = self.binning.dims[dim_index] + + # Move the dimension we're going to split on to be the first dim + new_order = list(range(len(self.binning))) + new_order.pop(dim_index) + new_order = [dim_index] + new_order + rearranged_map = self.reorder_dimensions(new_order) + rearranged_hist = rearranged_map.hist + rearranged_dims = rearranged_map.binning.dims + + # Take all dims except the one being split on + new_binning = rearranged_dims[1:] + + singleton = False + if bin is not None: + if isinstance(bin, (int, string_types)): + bin_indices = [spliton_dim.index(bin)] + elif isinstance(bin, slice): + bin_indices = list(range(len(spliton_dim)))[bin] + elif bin is Ellipsis: + bin_indices = list(range(len(spliton_dim))) + + if len(bin_indices) == 1: + singleton = True + else: + bin_indices = list(range(len(spliton_dim))) + + maps = [] + for bin_index in bin_indices: + bin = spliton_dim[bin_index] + new_hist = rearranged_hist[bin_index, ...] + if bin.bin_names is not None: + bin_name = bin.bin_names[0] + bin_tex = '=' + text2tex(bin_name) + else: + bin_name = 'bin_%d' % bin_index + bin_tex = r'{\;}bin{\;}%d' % bin_index + + name_elements = [] + for s in [self.name, spliton_dim.name, bin_name]: + if s is not None and len(s) > 0: + name_elements.append(s) + new_name = '_'.join(name_elements) + + new_tex = self.tex + ',' + r'{\;}' + spliton_dim.tex + bin_tex + + maps.append( + Map(name=new_name, hist=new_hist, binning=new_binning, + hash=self.hash, tex=new_tex, + full_comparison=self.full_comparison) + ) + + if singleton: + assert len(maps) == 1 + return maps[0] + + if len(self.name) > 0: + mapset_name = '%s__split_on__%s' % (self.name, spliton_dim.name) + else: + mapset_name = 'split_on__%s' % spliton_dim.name + + if self.tex is not None and len(self.tex) > 0: + mapset_tex = r'%s, \; %s' % (self.tex, spliton_dim.tex) + else: + mapset_tex = r'%s' % spliton_dim.tex + + return MapSet(maps=maps, name=mapset_name, tex=mapset_tex)
+ + +
+[docs] + def llh(self, expected_values, binned=False): + """Calculate the total log-likelihood value between this map and the + map described by `expected_values`; self is taken to be the "actual + values" (or (pseudo)data), and `expected_values` are the expectation + values for each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_llh : float or binned_llh if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.llh(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.llh(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def mcllh_mean(self, expected_values, binned=False): + """Calculate the total LMean log-likelihood value between this map and the + map described by `expected_values`; self is taken to be the "actual + values" (or (pseudo)data), and `expected_values` are the expectation + values for each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_llh : float or binned_llh if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.mcllh_mean(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.mcllh_mean(actual_values=self.hist, + expected_values=expected_values))
+ + + +
+[docs] + def mcllh_eff(self, expected_values, binned=False): + """Calculate the total LEff log-likelihood value between this map and the + map described by `expected_values`; self is taken to be the "actual + values" (or (pseudo)data), and `expected_values` are the expectation + values for each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_llh : float or binned_llh if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.mcllh_eff(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.mcllh_eff(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def conv_llh(self, expected_values, binned=False): + """Calculate the total convoluted log-likelihood value between this map + and the map described by `expected_values`; self is taken to be the + "actual values" (or (pseudo)data), and `expected_values` are the + expectation values for each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_conv_llh : float or binned_conv_llh if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.conv_llh(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.conv_llh(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def barlow_llh(self, expected_values, binned=False): + """Calculate the total barlow log-likelihood value between this map and + the map described by `expected_values`; self is taken to be the "actual + values" (or (pseudo)data), and `expected_values` are the expectation + values for each bin. I assumes at the moment some things that are not + true, namely that the weights are uniform + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_barlow_llh : float or binned_barlow_llh if binned=True + + """ + # TODO: should this handle reduceToHist / expected_values as other + # methods do, or should they handle these the way this method does? + if isinstance(expected_values, (np.ndarray, Map, MapSet)): + expected_values = reduceToHist(expected_values) + elif isinstance(expected_values, Iterable): + expected_values = [reduceToHist(x) for x in expected_values] + + if binned: + return stats.barlow_llh(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.barlow_llh(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def mod_chi2(self, expected_values, binned=False): + """Calculate the total modified chi2 value between this map and the map + described by `expected_values`; self is taken to be the "actual values" + (or (pseudo)data), and `expected_values` are the expectation values for + each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this. + + binned : bool + + Returns + ------- + total_mod_chi2 : float or binned_mod_chi2 if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.mod_chi2(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.mod_chi2(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def correct_chi2(self, expected_values, binned=False): + """Calculate the total correct chi2 value between this map and the map + described by `expected_values`; self is taken to be the "actual values" + (or (pseudo)data), and `expected_values` are the expectation values for + each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this. + + binned : bool + + Returns + ------- + total_correct_chi2 : float or binned_correct_chi2 if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.correct_chi2(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.correct_chi2(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def chi2(self, expected_values, binned=False): + """Calculate the total chi-squared value between this map and the map + described by `expected_values`; self is taken to be the "actual values" + (or (pseudo)data), and `expected_values` are the expectation values for + each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this + + binned : bool + + Returns + ------- + total_chi2 : float or binned_chi2 if binned=True + + """ + expected_values = reduceToHist(expected_values) + + if binned: + return stats.chi2(actual_values=self.hist, + expected_values=expected_values) + + return np.sum(stats.chi2(actual_values=self.hist, + expected_values=expected_values))
+ + +
+[docs] + def signed_sqrt_mod_chi2(self, expected_values): + """Calculate the binwise (signed) square-root of the modified chi2 value + between this map and the map described by `expected_values`; self is + taken to be the "actual values" (or (pseudo)data), and `expected_values` + are the expectation values for each bin. + + Parameters + ---------- + expected_values : numpy.ndarray or Map of same dimension as this. + + Returns + ------- + m_pulls : signed_sqrt_mod_chi2 + + """ + expected_values = reduceToHist(expected_values) + + return stats.signed_sqrt_mod_chi2(actual_values=self.hist, + expected_values=expected_values)
+ + + +
+[docs] + def generalized_poisson_llh(self, expected_values=None, empty_bins=None, binned=False): + '''compute the likelihood of this map's count to originate from + + Note that unlike the other likelihood functions, expected_values + is expected to be a ditribution maker + + inputs: + ------ + + expected_values: OrderedDict of MapSets + + empty_bins: None, list or np.ndarray (list the bin indices that are empty) + + binned: bool (return the bin-by-bin llh or the sum over all bins) + + ''' + + llh_per_bin = stats.generalized_poisson_llh(actual_values=self.hist, + expected_values=expected_values, + empty_bins=empty_bins) + + if binned: + return llh_per_bin + else: + return np.sum(llh_per_bin)
+ + + +
+[docs] + def metric_total(self, expected_values, metric, metric_kwargs=None): + ''' Compute the optimization metric on the bins of a Map + + Inputs + ------- + + expected_values: Map (the data/pseudo-data binned counts) + + metric: str (name of the optimization metric) + + metric_kwargs: None or Dict (special arguments to pass to + a special metric - right now just + useful for generalized_poisson_llh) + + Returns: + ------ + float (sum of the metric over all bins of expected_values) + + ''' + # TODO: should this use reduceToHist as in chi2 and llh above? + if metric_kwargs is None: + metric_kwargs={} + if metric in stats.ALL_METRICS: + return getattr(self, metric)(expected_values, **metric_kwargs) + else: + raise ValueError('`metric` "%s" not recognized; use one of %s.' + % (metric, stats.ALL_METRICS))
+ + + def __setitem__(self, idx, val): + return setitem(self.hist, idx, val) + + @property + def name(self): + """string : Map's name""" + return self._name + + @name.setter + def name(self, value): + """map name""" + assert isinstance(value, string_types) + return super().__setattr__('_name', value) + + @property + def tex(self): + """string : TeX label""" + if self._tex is None: + return text2tex(self.name) + return self._tex + + @tex.setter + def tex(self, value): + assert value is None or isinstance(value, string_types) + if value is not None: + value = strip_outer_dollars(value) + return super().__setattr__('_tex', value) + + @property + def hash(self): + """int or None : Hash value""" + return self._hash + + @hash.setter + def hash(self, value): + """Hash must be an immutable type (i.e., have a __hash__ method)""" + assert hasattr(value, '__hash__') + super().__setattr__('_hash', value) + + @property + def hist(self): + """numpy.ndarray : Histogram array underlying the Map""" + + # Get the hist + hist = self._hist + + # Apply bin mask, if one exists + # Set masked off elements to NaN (handling both cases where the hst is either a simple array, or has uncertainties) + if self.binning.mask is not None : + hist[~self.binning.mask] = ufloat(np.NaN, np.NaN) if isinstance(self._hist[np.unravel_index(0, self._hist.shape)], uncertainties.core.Variable) else np.NaN #TODO Is there a better way to check if this is a uarray? + + # Done + return hist + + @property + def nominal_values(self): + """numpy.ndarray : Bin values stripped of uncertainties""" + return unp.nominal_values(self.hist) + + @property + def std_devs(self): + """numpy.ndarray : Uncertainties (standard deviations) per bin""" + return unp.std_devs(self.hist) + + @property + def binning(self): + """pisa.core.binning.MultiDimBinning : Map's binning""" + return self._binning + + @property + def full_comparison(self): + """Compare element-by-element instead of just comparing hashes.""" + return self._full_comparison + + @full_comparison.setter + def full_comparison(self, value): + assert isinstance(value, bool) + super().__setattr__('_full_comparison', value) + + # Common mathematical operators + + @_new_obj + def __abs__(self): + state_updates = { + #'name': "|%s|" % (self.name,), + #'tex': r"{\left| %s \right|}" % strip_outer_parens(self.tex), + 'hist': np.abs(self.hist) + } + return state_updates + + @_new_obj + def __add__(self, other): + """Add `other` to self""" + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "(%s + %s)" % (self.name, other), + #'tex': r"{(%s + %s)}" % (self.tex, other), + 'hist': self.hist + other + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "(%s + array)" % self.name, + #'tex': r"{(%s + X)}" % self.tex, + 'hist': self.hist + other + } + elif isinstance(other, Map): + state_updates = { + #'name': "(%s + %s)" % (self.name, other.name), + #'tex': r"{(%s + %s)}" % (self.tex, other.tex), + 'hist': self.hist + other.hist, + 'full_comparison': (self.full_comparison or + other.full_comparison), + } + else: + type_error(other) + return state_updates + + #def __cmp__(self, other): + + @_new_obj + def __div__(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "(%s / %s)" % (self.name, other), + #'tex': r"{(%s / %s)}" % (self.tex, other), + 'hist': self.hist / other + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "(%s / array)" % self.name, + #'tex': r"{(%s / X)}" % self.tex, + 'hist': self.hist / other + } + elif isinstance(other, Map): + state_updates = { + #'name': "(%s / %s)" % (self.name, other.name), + #'tex': r"{(%s / %s)}" % (self.tex, other.tex), + 'hist': self.hist / other.hist, + 'full_comparison': (self.full_comparison or + other.full_comparison), + } + else: + type_error(other) + return state_updates + + def __truediv__(self, other): + return self.__div__(other) + + def __floordiv__(self, other): + raise NotImplementedError('floordiv not implemented for type Map') + + # TODO: figure out what we actually want to overload "==" with, and how + # to implement all the possible kinds of "==" that might be useful for the + # user, possibly with different methods altogether + def __eq__(self, other): + """Check if full state of maps are equal. *Not* element-by-element + equality as for a numpy array. Call this.hist == other.hist for the + element-by-element nominal value and the error. + + If `full_comparison` is true for either map, or if either map lacks a + hash, performs a full comparison of the contents of each map. + + Otherwise, simply checks that the hashes are equal. + + """ + if np.isscalar(other): + return np.all(self.nominal_values == other) + + if type(other) is uncertainties.core.Variable \ + or isinstance(other, np.ndarray): + return (np.all(self.nominal_values + == unp.nominal_values(other)) + and np.all(self.std_devs + == unp.std_devs(other))) + + if isinstance(other, Map): + if (self.full_comparison or other.full_comparison + or self.hash is None or other.hash is None): + return recursiveEquality(self.hashable_state, + other.hashable_state) + return self.hash == other.hash + + type_error(other) + +
+[docs] + @_new_obj + def log(self): + """Take natural logarithm of map's values, returning a new map. + + Returns + ------- + log_map : Map + + """ + state_updates = { + #'name': "log(%s)" % self.name, + #'tex': r"\ln\left( %s \right)" % self.tex, + 'hist': unp.log(self.hist) + } + return state_updates
+ + +
+[docs] + @_new_obj + def log10(self): + """Take base-10 logarithm of map's values, returning a new map. + + Returns + ------- + log10_map : Map + + """ + state_updates = { + #'name': "log10(%s)" % self.name, + #'tex': r"\log_{10}\left( %s \right)" % self.tex, + 'hist': unp.log10(self.hist) + } + return state_updates
+ + + @_new_obj + def __mul__(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "%s * %s" % (other, self.name), + #'tex': r"%s \cdot %s" % (other, self.tex), + 'hist': self.hist * other + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "array * %s" % self.name, + #'tex': r"X \cdot %s" % self.tex, + 'hist': self.hist * other, + } + elif isinstance(other, Map): + state_updates = { + #'name': "%s * %s" % (self.name, other.name), + #'tex': r"%s \cdot %s" % (self.tex, other.tex), + 'hist': self.hist * other.hist, + 'full_comparison': (self.full_comparison or + other.full_comparison), + } + else: + type_error(other) + return state_updates + + def __ne__(self, other): + return not self.__eq__(other) + + @_new_obj + def __neg__(self): + state_updates = { + #'name': "-%s" % self.name, + #'tex': r"-%s" % self.tex, + 'hist': -self.hist, + } + return state_updates + + @_new_obj + def __pow__(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "%s**%s" % (self.name, other), + #'tex': "%s^{%s}" % (self.tex, other), + 'hist': unp.pow(self.hist, other) + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "%s**(array)" % self.name, + #'tex': r"%s^{X}" % self.tex, + 'hist': unp.pow(self.hist, other), + } + elif isinstance(other, Map): + state_updates = { + #'name': "%s**(%s)" % (self.name, + # strip_outer_parens(other.name)), + #'tex': r"%s^{%s}" % (self.tex, strip_outer_parens(other.tex)), + 'hist': unp.pow(self.hist, other.hist), + 'full_comparison': (self.full_comparison or + other.full_comparison), + } + else: + type_error(other) + return state_updates + + def __radd__(self, other): + return self + other + + def __rdiv__(self, other): + if isinstance(other, Map): + return other / self + return self.__rdiv(other) + + @_new_obj + def __rdiv(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "(%s / %s)" % (other, self.name), + #'tex': "{(%s / %s)}" % (other, self.tex), + 'hist': other / self.hist, + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "array / %s" % self.name, + #'tex': "{(X / %s)}" % self.tex, + 'hist': other / self.hist, + } + else: + type_error(other) + return state_updates + + def __rmul__(self, other): + return self * other + + def __rsub__(self, other): + if isinstance(other, Map): + return other - self + return self.__rsub(other) + + @_new_obj + def __rsub(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "(%s - %s)" % (other, self.name), + #'tex': "{(%s - %s)}" % (other, self.tex), + 'hist': other - self.hist, + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "(array - %s)" % self.name, + #'tex': "{(X - %s)}" % self.tex, + 'hist': other - self.hist, + } + else: + type_error(other) + return state_updates + +
+[docs] + @_new_obj + def sqrt(self): + """Take square root of map's values, returning a new map. + + Returns + ------- + sqrt_map : Map + + """ + state_updates = { + #'name': "sqrt(%s)" % self.name, + #'tex': r"\sqrt{%s}" % self.tex, + #'hist': np.asarray(unp.sqrt(self.hist), dtype='float'), + 'hist': unp.sqrt(self.hist), + } + return state_updates
+ + + @_new_obj + def __sub__(self, other): + if np.isscalar(other) or type(other) is uncertainties.core.Variable: + state_updates = { + #'name': "(%s - %s)" % (self.name, other), + #'tex': "{(%s - %s)}" % (self.tex, other), + 'hist': self.hist - other, + } + elif isinstance(other, np.ndarray): + state_updates = { + #'name': "(%s - array)" % self.name, + #'tex': "{(%s - X)}" % self.tex, + 'hist': self.hist - other, + } + elif isinstance(other, Map): + state_updates = { + #'name': "%s - %s" % (self.name, other.name), + #'tex': "{(%s - %s)}" % (self.tex, other.tex), + 'hist': self.hist - other.hist, + 'full_comparison': (self.full_comparison or + other.full_comparison), + } + else: + type_error(other) + return state_updates + +
+[docs] + def allclose(self, other): + '''Check if this map and another have the same (within machine precision) bin counts''' + self.assert_compat(other) + return np.allclose(self.nominal_values, other.nominal_values, **ALLCLOSE_KW)
+
+ + + +# TODO: instantiate individual maps from dicts if passed as such, so user +# doesn't have to instantiate each map. Also, check for name collisions with +# one another and with attrs (so that __getattr__ can retrieve the map by name) + +# TODO: add docstrings + +
+[docs] +class MapSet(object): + """ + Ordered set of event rate maps (aka histograms) defined over an arbitrary + regluar hyper-rectangular binning. + + + Parameters + ---------- + maps : Map or sequence of Map + + name : string + + tex : string + + hash : immutable + + collate_by_name : bool + If True, when this MapSet is passed alongside another MapSet to a + function that operates on the maps, contained maps in each will be + accessed by name. Hence, only maps with the same names will be operated + on simultaneously. + + If false, the contained maps in each MapSet will be accessed by their + order in each MapSet. This behavior is useful if maps are renamed + through some operation but their order is maintained, and then + comparisons are sought with their progenitors with the original + (different) name. + + """ + __slots = ('_name', '_hash', 'hash') + __state_attrs = ('name', 'maps', 'tex', 'hash', 'collate_by_name') + def __init__(self, maps, name=None, tex=None, hash=None, + collate_by_name=True): + if isinstance(maps, Map): + maps = [maps] + + maps_ = [] + for m in maps: + if isinstance(m, Map): + maps_.append(m) + elif isinstance(m, MapSet): + maps_.extend(m) + else: + maps_.append(Map(**m)) + + super().__setattr__('maps', maps_) + super().__setattr__('name', name) + super().__setattr__('tex', tex) + super().__setattr__( + 'collate_by_name', collate_by_name + ) + super().__setattr__('collate_by_num', not collate_by_name) + self.hash = hash + + def __repr__(self): + previous_precision = np.get_printoptions()['precision'] + np.set_printoptions(precision=18) + try: + argstrs = [('%s=%r' % item) for item in + self.serializable_state.items()] + r = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) + finally: + np.set_printoptions(precision=previous_precision) + return r + + def __str__(self): + state = OrderedDict() + attrs = ['name', 'tex', 'hash', 'maps'] + state['name'] = repr(self.name) + state['tex'] = repr(self.tex) + state['hash'] = repr(self.hash) + state['maps'] = ('[\n' + ' '*8 + '%s \n]' + % ',\n '.join([str(m) for m in self])) + argstrs = [('%s=%s' % (a, state[a])) for a in attrs] + s = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) + return s + + def __pretty__(self, p, cycle): + """Method used by the `pretty` library for formatting""" + myname = self.__class__.__name__ + if cycle: + p.text('%s(...)' % myname) + else: + p.begin_group(4, '%s(' % myname) + attrs = ['name', 'tex', 'hash', 'maps'] + for n, attr in enumerate(attrs): + p.breakable() + p.text(attr + '=') + p.pretty(getattr(self, attr)) + if n < len(attrs)-1: + p.text(',') + p.end_group(4, ')') + + def _repr_pretty_(self, p, cycle): + """Method used by e.g. ipython/Jupyter for formatting""" + return self.__pretty__(p, cycle) + + @property + def serializable_state(self): + """OrderedDict : all state needed to reconstruct object""" + state = OrderedDict() + state['maps'] = [m.serializable_state for m in self] + state['name'] = self.name + state['tex'] = self._tex + state['collate_by_name'] = self.collate_by_name + return state + + def __getstate__(self): + return self.serializable_state + + def __setstate__(self, state): + self.__init__(**state) + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + + Parameters + ---------- + filename : str + Filename; must be either a relative or absolute path (*not + interpreted as a PISA resource specification*) + **kwargs + Further keyword args are sent to `pisa.utils.jsons.to_json()` + + See Also + -------- + from_json : Intantiate new object from the file written by this method + pisa.utils.jsons.to_json + + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, resource): + """Instantiate a new MapSet object from a JSON file. + + The format of the JSON is generated by the `MapSet.to_json` method, + which converts a MapSet object to basic types and then numpy arrays are + converted in a call to `pisa.utils.jsons.to_json`. + + Parameters + ---------- + resource : str + A PISA resource specification (see pisa.utils.resources) + + See Also + -------- + to_json + pisa.utils.jsons.to_json + + """ + state = jsons.from_json(resource) + # State is a dict for Map, so instantiate with double-asterisk syntax + return cls(**state)
+ + +
+[docs] + def index(self, x): + """Find map corresponding to `x` and return its index. Accepts either + an integer index or a map name to make interface consistent. + + Parameters + ---------- + x : int, string, or Map + Map, map name, or integer index of map in this MapSet. If a Map is + passed, only its name is matched to the maps in this set. + + Returns + ------- + integer index to the map + + """ + try: + if isinstance(x, int): + l = len(self) + assert x >= -l and x < l + elif isinstance(x, Map): + x = self.names.index(x.name) + elif isinstance(x, string_types): + x = self.names.index(x) + else: + raise TypeError('Unhandled type "%s" for `x`' % type(x)) + except (AssertionError, ValueError): + raise ValueError( + "A map corresponding to '%s' cannot be found in the set." + " Valid maps are %s" % (x, self.names) + ) + return x
+ + +
+[docs] + def pop(self, *args): #x=None): + """Remove a map and return it. If a value is passed, the map + corresponding to `index(value)` is removed and returned instead. + + Parameters + ---------- + x (optional) : int, string, or Map + Map, map name, or integer index of map in this MapSet. If a Map is + passed, only its name is matched to the maps in this set. + + Returns + ------- + Map removed from this MapSet + + See Also + -------- + list.pop + + """ + if len(args) == 0: + m = self.maps.pop() + elif len(args) == 1: + idx = self.index(args[0]) + m = self.maps.pop(idx) + else: + raise ValueError('`pop` takes 0 or 1 argument; %d passed instead.' + % len(args)) + return m
+ + + # TODO: add different aggregation options OR rename to sum_{wildcard|re} +
+[docs] + def combine_re(self, regexes): + r"""For each regex passed, add together contained maps whose names + match. + + If a string or regex is passed, the corresponding maps are combined and + returned as a Map object. If an iterable of one or more regexes is + passed, each grouping found is combined into a Map separately and the + resulting Maps are populated into a new MapSet to be returned. + + Parameters + ---------- + regexes : compiled regex, str representing a regex, or iterable thereof + See Python module `re` for formatting. + + Returns + ------- + combined + Map if `regexes` is a string or regex; MapSet if `regexes` is an + iterable of one or more strings or regexes + + Raises + ------ + ValueError + If any `regexes` fail to match any map names. + + Notes + ----- + If special characters are used in the regex, like a backslash, be sure + to use a Python raw string (which does not interpret such special + characters) by prefixing the string with an "r". E.g., the regex to + match a period requires passing + `regex=r'\.'` + + Examples + -------- + Get total of trck and cscd maps, which are named with suffixes "trck" + and "cscd", respectively. + + >>> total_trck_map = outputs.combine_re('.*trck') + >>> total_cscd_map = outputs.combine_re('.*cscd') + + Get a MapSet with both of the above maps in it (and a single command) + + >>> total_pid_maps = outputs.combine_re(['.*trck', '.*cscd']) + + Strict name-checking, combine nue_cc + nuebar_cc, including both + cascades and tracks. + + >>> nue_cc_nuebar_cc_map = outputs.combine_re( + ... '^nue(bar){0,1}_cc_(cscd|trck)$') + + Lenient nue_cc + nuebar_cc including both cascades and tracks. + + >>> nue_cc_nuebar_cc_map = outputs.combine_re('nue.*_cc_.*') + + Total of all maps + + >>> total = outputs.combine_re('.*') + + See Also + -------- + combine_wildcard + Similar method but using wildcards (i.e., globbing, like filename + matching in the Unix shell) + + References + ---------- + re : Python module used for parsing regular expressions + https://docs.python.org/2/library/re.html + + """ + is_scalar = False + if isinstance(regexes, string_types) or hasattr(regexes, 'pattern'): + is_scalar = True + regexes = [regexes] + + resulting_maps = [] + for regex in regexes: + if hasattr(regex, 'pattern'): + pattern = regex.pattern + else: + pattern = regex + maps_to_combine = [] + names_to_combine = [] + for m in self: + name = m.name + if re.match(regex, name) is not None: + logging.debug('Map "%s" will be added...', name) + maps_to_combine.append(m) + names_to_combine.append(name) + if len(maps_to_combine) == 0: + raise ValueError('No map names match `regex` "%s"' % pattern) + if len(maps_to_combine) > 1: + m = reduce(add, maps_to_combine) + try: + nufig = NuFlavIntGroup(names_to_combine) + new_name = make_valid_python_name(str(nufig)) + new_tex = nufig.tex + except: + # Reasonable name for giving user an idea of what the map + # represents + new_name = make_valid_python_name(regex) + new_tex = None + if new_name == '': + new_name = 'combined' + m.name = new_name + m.tex = new_tex + else: + m = copy(maps_to_combine[0]) + resulting_maps.append(m) + + if is_scalar: + combined = resulting_maps[0] + else: + combined = MapSet(maps=resulting_maps, + name=self.name, + tex=self.tex, + collate_by_name=self.collate_by_name) + return combined
+ + +
+[docs] + def combine_wildcard(self, expressions): + """For each expression passed, add together contained maps whose names + match. + + Expressions can contain wildcards like those used in the Unix shell. + + Valid wildcards (from fnmatch docs, link below): + "*" : matches everything + "?" : mateches any single character + "[`seq`]" : matches any character in `seq` + "[!`seq`]" : matches any character not in `seq` + + Note that if a string is passed, the matching maps are combined and + returned as a Map object. If an iterable of strings is passed, each + grouping found is combined into a Map separately and the resulting Maps + are populated into a new MapSet to be returned. + + Parameters + ---------- + expressions : string or sequence thereof + See Python module `fnmatch` for more info. + + Returns + ------- + combined + Map if `expressions` is a string; MapSet if `expressions` is an + iterable of one or more strings + + Raises + ------ + ValueError + If any `expressions` fail to match any map names. + + Examples + -------- + >>> total_trck_map = outputs.combine_wildcard('*trck') + >>> total_cscd_map = outputs.combine_wildcard('*cscd') + >>> total_pid_maps = outpubs.combine_wildcard(['*trck', '*cscd']) + >>> nue_cc_nuebar_cc_map = outputs.combine_wildcard('nue*_cc_*') + >>> total = outputs.combine_wildcard('*') + + See Also + -------- + combine_re : similar method but using regular expressions + + References + ---------- + fnmatch : Python module used for parsing the expression with wildcards + https://docs.python.org/2/library/fnmatch.html + + """ + is_scalar = False + if isinstance(expressions, string_types): + is_scalar = True + expressions = [expressions] + + resulting_maps = [] + for expr in expressions: + maps_to_combine = [] + names_to_combine = [] + for mapnum, m in enumerate(self): + name = m.name + if fnmatch(name, expr): + logging.debug('Map %d, "%s", will be added...', + mapnum, name) + maps_to_combine.append(m) + names_to_combine.append(name) + if len(maps_to_combine) == 0: + raise ValueError('No map names match `expr` "%s"' % expr) + if len(maps_to_combine) > 1: + m = reduce(add, maps_to_combine) + try: + nufig = NuFlavIntGroup(names_to_combine) + new_name = make_valid_python_name(str(nufig)) + new_tex = nufig.tex + except: + # Reasonable name for giving user an idea of what the map + # represents + new_name = make_valid_python_name(expr) + new_tex = None + if new_name == '': + new_name = 'combined' + m.name = new_name + m.tex = new_tex + else: + m = copy(maps_to_combine[0]) + resulting_maps.append(m) + + if is_scalar: + combined = resulting_maps[0] + else: + combined = MapSet(maps=resulting_maps, + name=self.name, + tex=self.tex, + collate_by_name=self.collate_by_name) + return combined
+ + +
+[docs] + def compare(self, ref): + """Compare maps in this MapSet against a reference MapSet. + + Parameters + ---------- + ref : MapSet + Maps taken as the reference against which to compare maps + contained within this MapSet. + + Returns + ------- + stats : OrderedDict + Each key is the name of a map, and each value is istelf an + OrderedDict as returned by the `Map.compare` method + + Examples + -------- + >>> stats = map_set_test.compare(map_set_ref) + + """ + assert isinstance(ref, MapSet) and len(self) == len(ref) + rslt = OrderedDict() + for m, r in zip(self, ref): + out = m.compare(r) + rslt[m.name] = out + return rslt
+ + + def __eq__(self, other): + return recursiveEquality(self.hashable_state, other.hashable_state) + + def __deepcopy__(self, memo): + return MapSet([deepcopy(m, memo) for m in self], + name=self.name, tex=self.tex, hash=self.hash, + collate_by_name=self.collate_by_num) + @property + def name(self): + """string : name of the map (legal Python name)""" + return super().__getattribute__('_name') + + @name.setter + def name(self, name): + """string : name of the map (legal Python name)""" + return super().__setattr__('_name', name) + + @property + def hash(self): + """Hash value of the map set is based upon the contained maps. + * If all maps have the same hash value, this value is returned as + the map set's hash + * If one or more maps have different hash values, a list of the + contained maps' hash values is hashed + * If any contained map has None for hash value, the hash value of + the map set is also None (i.e., invalid) + + """ + hashes = self.hashes + if all([(h is not None and h == hashes[0]) for h in hashes]): + return hashes[0] + if all([(h is not None) for h in hashes]): + return hash_obj(hashes) + return None + + @hash.setter + def hash(self, val): + """Setting a hash to `val` for the map set sets the hash values of all + contained maps to `val`.""" + if val is not None: + for m in self: + setattr(m, 'hash', val) + + @property + def names(self): + """list of strings : name of each map""" + return [mp.name for mp in self] + + @property + def hashes(self): + """list of int : hash of each map""" + return [mp.hash for mp in self] + +
+[docs] + def hash_maps(self, map_names=None): + """Generate a hash on the contained maps (i.e. exclude state pertaining + only to the MapSet itself, but include all state pertaining to the + contained Maps). + + Parameters + ---------- + map_names : None or sequence of strings + If sequence of strings, use these as the map names instead of any + names contained. + + Returns + ------- + hash : None or int + If any contained map hashes to None, the resulting hash will also + be None. + + """ + if map_names is None: + map_names = [m.name for m in self] + hashes = [m.hash for m in self if m.name in map_names] + if all([(h != None) for h in hashes]): + return hash_obj(hashes) + return None
+ + +
+[docs] + def collate_with_names(self, vals): + ret_dict = OrderedDict() + for name, val in zip(self.names, vals): + setitem(ret_dict, name, val) + return ret_dict
+ + +
+[docs] + def find_map(self, value): + idx = None + if isinstance(value, Map): + pass + elif isinstance(value, string_types): + try: + idx = self.names.index(value) + except ValueError: + pass + if idx is None: + raise ValueError('Could not find map name "%s" among maps %s' + % (value, self.names)) + return self[idx]
+ + +
+[docs] + def plot(self, *args, **kwargs): + for m in self.maps: + m.plot(*args, **kwargs)
+ + +
+[docs] + def apply_to_maps(self, attr, *args, **kwargs): + if len(kwargs) != 0: + raise NotImplementedError('Keyword arguments are not handled') + if hasattr(attr, '__name__'): + attrname = attr.__name__ + else: + attrname = attr + do_not_have_attr = np.array([(not hasattr(mp, attrname)) + for mp in self.maps]) + if np.any(do_not_have_attr): + missing_in_names = ', '.join( + np.array(self.names)[do_not_have_attr] + ) + num_missing = np.sum(do_not_have_attr) + num_total = len(do_not_have_attr) + raise AttributeError( + 'Maps %s (%d of %d maps in set) do not have attribute "%s"' + % (missing_in_names, num_missing, num_total, attrname) + ) + + # Retrieve the corresponding callables from contained maps + val_per_map = [getattr(mp, attr) for mp in self] + + if not all([hasattr(meth, '__call__') for meth in val_per_map]): + # If all results are maps, populate a new map set & return that + if all([isinstance(r, Map) for r in val_per_map]): + return MapSet(maps=val_per_map, name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name) + + # Otherwise put in an ordered dict with <name>: <val> pairs ordered + # according to the map ordering in this map set + return self.collate_with_names(val_per_map) + + # Rename for clarity + method_per_map = val_per_map + + # Create a set of args for *each* map in this map set: If an arg is a + # MapSet, convert that arg into the map in that set corresponding to + # the same map in this set. + args_per_map = [] + for map_num, mp in enumerate(self): + map_name = mp.name + this_map_args = [] + for arg in args: + if (np.isscalar(arg) or + type(arg) is uncertainties.core.Variable or + isinstance(arg, (string_types, np.ndarray))): + this_map_args.append(arg) + elif isinstance(arg, MapSet): + if self.collate_by_name: + this_map_args.append(arg[map_name]) + elif self.collate_by_num: + this_map_args.append(arg[map_num]) + + # TODO: test to make sure this works for e.g. metric_per_map + elif isinstance(arg, Iterable): + list_arg = [] + for item in arg: + if isinstance(item, MapSet): + if self.collate_by_name: + list_arg.append(item[map_name]) + elif self.collate_by_num: + list_arg.append(item[map_num]) + this_map_args.append(list_arg) + else: + raise TypeError('Unhandled arg %s / type %s' + % (arg, type(arg))) + args_per_map.append(this_map_args) + + # Make the method calls and collect returned values + returned_vals = [meth(*args) + for meth, args in zip(method_per_map, args_per_map)] + + # If all results are maps, put them into a new map set & return + if all([isinstance(r, Map) for r in returned_vals]): + return MapSet(maps=returned_vals, name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name) + + # If None returned by all, return a single None + if all([(r is None) for r in returned_vals]): + return None + + # Otherwise put into an ordered dict with name: val pairs + return self.collate_with_names(returned_vals)
+ + + def __contains__(self, name): + return name in [m.name for m in self] + + #def __setattr__(self, attr, val): + # print('__setattr__ being accessed, attr = %s, val = %s' %(attr, val)) + # if attr in MapSet.__slots: + # print('attr "%s" found in MapSet.slots.' %attr) + # object.__setattr__(self, attr, val) + # else: + # returned_vals = [setattr(mp, attr, val) for mp in self] + # if all([(r is None) for r in returned_vals]): + # return + # return self.collate_with_names(returned_vals) + + def __getattr__(self, attr): + if attr in [m.name for m in self]: + return self[attr] + return self.apply_to_maps(attr) + + def __iter__(self): + return iter(self.maps) + + def __len__(self): + return len(self.maps) + + def __getitem__(self, item): + """Retrieve a map by name or retrieve maps' histogram values by index + or slice. + + If `item` is a string, retrieve map by name. + If `item is an integer or one-dim slice, retrieve maps by index/slice + If `item` is length-2 tuple or two-dim slice, retrieve value(s) of all + contained maps, each indexed by map[`item`]. The output is returned + in an ordered dict with format {<map name>: <values>, ...} + + """ + if isinstance(item, string_types): + return self.find_map(item) + + if isinstance(item, (int, slice)): + rslt = self.maps[item] + if hasattr(rslt, '__len__') and len(rslt) > 1: + return MapSet(maps=rslt, name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name) + return rslt + + if isinstance(item, Iterable): + if not isinstance(item, Sequence): + item = list(item) + + if len(item) == 1: + return self.maps[item] + + if len(item) == 2: + return MapSet(maps=[getitem(m, item) for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name) + + raise IndexError('too many indices for 2D hist') + + raise TypeError('getitem does not support `item` of type %s' + % type(item)) + + def __abs__(self): + return self.apply_to_maps('__abs__') + + def __add__(self, val): + return self.apply_to_maps('__add__', val) + + def __truediv__(self, val): + return self.apply_to_maps('__truediv__', val) + + def __div__(self, val): + return self.apply_to_maps('__div__', val) + +
+[docs] + def log(self): + return self.apply_to_maps('log')
+ + +
+[docs] + def log10(self): + return self.apply_to_maps('log10')
+ + + def __mul__(self, val): + return self.apply_to_maps('__mul__', val) + + def __neg__(self): + return self.apply_to_maps('__neg__') + + def __pow__(self, val): + return self.apply_to_maps('__pow__', val) + + def __radd__(self, val): + return self.apply_to_maps('__radd__', val) + + def __rdiv__(self, val): + return self.apply_to_maps('__rdiv__', val) + + def __rmul__(self, val): + return self.apply_to_maps('__rmul__', val) + + def __rsub__(self, val): + return self.apply_to_maps('__rsub__', val) + +
+[docs] + def sqrt(self): + return self.apply_to_maps('sqrt')
+ + + def __sub__(self, val): + return self.apply_to_maps('__sub__', val) + +
+[docs] + def sum(self, *args, **kwargs): + return MapSet(maps=[m.sum(*args, **kwargs) for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def project(self, axis, keepdims=False): + """Per-map projections onto single axis. See Map.project for more + detailed help. + + Parameters + ---------- + axis : string or int + keepdims : bool + + Returns + ------- + projection : MapSet + Each map in this MapSet projected onto `axis`. + + See Also + -------- + sum + Sum over specified dimension(s) + + Map.project + Method called for each map in this MapSet to perform the actual + projection. + + """ + return MapSet(maps=[m.project(axis=axis, keepdims=keepdims) + for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def reorder_dimensions(self, order): + """Return a new MapSet object with dimensions ordered + according to `order`. + + Parameters + ---------- + order : MultiDimBinning or sequence of string, int, or OneDimBinning + Order of dimensions to use. Strings are interpreted as dimension + basenames, integers are interpreted as dimension indices, and + OneDimBinning objects are interpreted by their `basename` + attributes (so e.g. the exact binnings in `order` do not have to + match this object's exact binnings; only their basenames). Note + that a MultiDimBinning object is a valid sequence type to use for + `order`. + + Notes + ----- + Dimensions specified in `order` that are not in this object are + ignored, but dimensions in this object that are missing in `order` + result in an error. + + Returns + ------- + MapSet object with reordred dimensions. + + Raises + ------ + ValueError if dimensions present in this object are missing from + `order`. + + """ + return MapSet(maps=[m.reorder_dimensions(order=order) for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def squeeze(self): + """Remove any singleton dimensions (i.e. that have only a single bin) + from all contained maps. Analagous to `numpy.squeeze`. + + Returns + ------- + MapSet with equivalent values but singleton Map dimensions removed + + """ + return MapSet(maps=[m.squeeze() for m in self], name=self.name, + tex=self.tex, collate_by_name=self.collate_by_name)
+ + +
+[docs] + def rebin(self, *args, **kwargs): + return MapSet(maps=[m.rebin(*args, **kwargs) for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def downsample(self, *args, **kwargs): + return MapSet(maps=[m.downsample(*args, **kwargs) for m in self], + name=self.name, tex=self.tex, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def metric_per_map(self, expected_values, metric): + if isinstance(metric, string_types): + metric = metric.lower() + if 'binned_' in metric: + metric = metric.replace('binned_', '') + binned = True + else: + binned = False + if metric in stats.ALL_METRICS: + return self.apply_to_maps(metric, expected_values, binned) + else: + raise ValueError('`metric` "%s" not recognized; use one of %s.' + % (metric, stats.ALL_METRICS))
+ + +
+[docs] + def metric_total(self, expected_values, metric, metric_kwargs=None): + '''Compute the binned optimization metric on all maps of a mapset, + then sum it up. + + metric_kwargs allows to pass extra arguments to the metric, like + the number of empty bins for the generalized poisson llh + (Not yet implemented for Mapset) + ''' + return np.sum(list(self.metric_per_map(expected_values, metric).values()))
+ + +
+[docs] + def chi2_per_map(self, expected_values): + return self.apply_to_maps('chi2', expected_values)
+ + +
+[docs] + def chi2_total(self, expected_values): + return np.sum(self.chi2_per_map(expected_values))
+ + +
+[docs] + def fluctuate(self, method, random_state=None, jumpahead=None): + """Add fluctuations to the maps in the set and return as a new MapSet. + + Parameters + ---------- + method : None or string + random_state : None, numpy.random.RandomState, or seed spec + + """ + random_state = get_random_state(random_state=random_state, + jumpahead=jumpahead) + new_maps = [m.fluctuate(method=method, random_state=random_state) + for m in self] + return MapSet(maps=new_maps, name=self.name, tex=self.tex, hash=None, + collate_by_name=self.collate_by_name)
+ + +
+[docs] + def llh_per_map(self, expected_values): + return self.apply_to_maps('llh', expected_values)
+ + +
+[docs] + def llh_total(self, expected_values): + return np.sum(self.llh(expected_values))
+ + +
+[docs] + def set_poisson_errors(self): + return self.apply_to_maps('set_poisson_errors')
+ + +
+[docs] + def allclose(self, other): + '''Check if this mapset and another have the same (within machine precision) bin counts''' + return np.all( list(self.apply_to_maps('allclose', other).values()) )
+
+ + +## Now dynamically add all methods from Map to MapSet that don't already exist +## in MapSet (and make these methods distribute to contained maps) +##for method_name, method in sorted(Map.__dict__.items()): +#add_methods = '''__abs__ __add__ __div__ __mul__ __neg__ __pow__ __radd__ +#__rdiv__ __rmul__ __rsub__ __sub__'''.split() +# +#for method_name in add_methods: +# #if not hasattr(method, '__call__') or method_name in MapSet.__dict__: +# # continue +# disallowed = ('__getattr__', '__setattr__', '__getattribute__', +# '__getitem__', '__eq__', '__ne__', '__str__', '__repr__') +# if method_name in disallowed: +# continue +# print('adding method "%s" to MapSet as an apply func' % method_name) +# arg_str = ', *args' # if len(args) > 0 else '' +# eval(('def {method_name}(self{arg_str}):\n' +# ' return self.apply_to_maps({method_name}{arg_str})') +# .format(method_name=method_name, arg_str=arg_str)) +# #f.__doc__ = 'Apply method %s to all contained maps' % method_name +# #method = getattr(Map, method_name) +# #if method.__doc__: +# # f.__doc__ += '... ' + method.__doc__ +# setattr(MapSet, method_name, MethodType(eval(method_name), None, MapSet)) + + +# TODO: add tests for llh, chi2 methods +
+[docs] +def test_Map(): + """Unit tests for Map class""" + import pickle + n_ebins = 10 + n_czbins = 5 + n_azbins = 2 + e_binning = OneDimBinning(name='energy', tex=r'E_\nu', num_bins=n_ebins, + domain=(1, 80)*ureg.GeV, is_log=True) + cz_binning = OneDimBinning(name='coszen', tex=r'\cos\,\theta', + num_bins=n_czbins, domain=(-1, 0), is_lin=True) + az_binning = OneDimBinning(name='azimuth', tex=r'\phi', + num_bins=n_azbins, domain=(0, 2*np.pi), + is_lin=True) + # set directly unumpy array with errors + shape = (e_binning * cz_binning).shape + m1 = Map(name='x', + hist=unp.uarray(np.ones(shape), np.sqrt(np.ones(shape))), + binning=(e_binning, cz_binning)) + # or call init poisson error afterwards + m1 = Map(name='x', hist=np.ones((n_ebins, n_czbins)), hash=23, + binning=(e_binning, cz_binning)) + + # Test rebin + _ = m1.rebin(m1.binning.downsample(2, 5)) + m_rebinned = m1.rebin(m1.binning.downsample(n_ebins, n_czbins)) + assert m_rebinned.hist[0, 0] == np.sum(m1.hist) + + # Test fluctuate + _ = m1.fluctuate(method="poisson") # just ensure that None random_state is handled + m1_seed0 = m1.fluctuate(method="poisson", random_state=0) + m1_seed1 = m1.fluctuate(method="poisson", random_state=1) + m1_seed0_reprod = m1.fluctuate(method="poisson", random_state=0) + for m in [m1_seed0, m1_seed1, m1_seed0_reprod]: + # The full comparison has to be ON for all maps, otherwise we would only + # compare the hash value, which doesn't change when maps are fluctuated. + # Because the value of full_comparison is included in the comparison, two + # maps will not be considered equal if only one of them has + # `full_comparison=True`. + # TODO: How does this make sense? + m.full_comparison = True + logging.debug("Fluctuated map with seed 0:") + logging.debug(m1_seed0) + logging.debug("Fluctuated map with seed 1:") + logging.debug(m1_seed1) + logging.debug("Fluctuated map with seed 0, reproduced:") + logging.debug(m1_seed0_reprod) + + assert m1_seed0 == m1_seed0_reprod + assert not (m1_seed0 == m1_seed1) + + # Test sum() + m1 = Map( + name='x', + hist=np.arange(0, n_ebins*n_czbins).reshape((n_ebins, n_czbins)), + binning=(e_binning, cz_binning) + ) + s1 = m1.sum('energy', keepdims=True) + assert np.all(s1.hist == np.array([[225, 235, 245, 255, 265]])) + assert s1.shape == (1, 5) + assert 'energy' in s1.binning + assert 'coszen' in s1.binning + s2 = m1.sum('energy', keepdims=False) + assert np.all(s2.hist == np.array([225, 235, 245, 255, 265])) + assert s2.shape == (5,) + assert 'energy' not in s2.binning + assert 'coszen' in s2.binning + + m1 = Map(name='x', hist=np.ones((n_ebins, n_czbins)), hash=23, + binning=(e_binning, cz_binning)) + logging.debug(str(("downsampling ====================="))) + m2 = m1 * 2 + logging.debug(str((m2.downsample(1)))) + logging.debug(str((m2.downsample(5)))) + logging.debug(str((m2.downsample(1, 1)))) + logging.debug(str((m2.downsample(1, 5)))) + logging.debug(str((m2.downsample(5, 5)))) + logging.debug(str((m2.downsample(10, 5)))) + logging.debug(str((m2.downsample(10, 5).binning))) + logging.debug(str(("===================== downsampling"))) + + assert m1.hash == 23 + m1.hash = 42 + assert m1.hash == 42 + m1.set_poisson_errors() + # or no errors at all + m2 = Map(name='y', hist=2*np.ones((n_ebins, n_czbins)), + binning=(e_binning, cz_binning)) + m3 = Map(name='z', hist=4*np.ones((n_ebins, n_czbins, n_azbins)), + binning=(e_binning, cz_binning, az_binning)) + + assert m3[0, 0, 0] == 4, 'm3[0, 0, 0] = %s' % m3[0, 0, 0] + testdir = tempfile.mkdtemp() + try: + for m in [m1, m2, m1+m2, m1-m2, m1/m2, m1*m2]: + m_file = os.path.join(testdir, m.name + '.json') + m.to_json(m_file, warn=False) + m_ = Map.from_json(m_file) + assert m_ == m, 'm=\n%s\nm_=\n%s' % (m, m_) + jsons.to_json(m, m_file, warn=False) + m_ = Map.from_json(m_file) + assert m_ == m, 'm=\n%s\nm_=\n%s' % (m, m_) + # Had bug where datastruct containing MapSet failed to be saved. + # Test tuple containing list containing OrderedDict containing + # Map here. + struct = ([OrderedDict(map=m)],) + jsons.to_json(struct, m_file, warn=False) + loaded = jsons.from_json(m_file) + m_ = Map(**loaded[0][0]['map']) + assert m_ == m + # Now try with pickle + m_file = os.path.join(testdir, m.name + '.pkl') + pickle.dump(struct, open(m_file, 'wb'), + protocol=pickle.HIGHEST_PROTOCOL) + loaded = pickle.load(open(m_file, 'rb')) + m_ = loaded[0][0]['map'] + assert m_ == m + finally: + shutil.rmtree(testdir, ignore_errors=True) + + logging.debug(str((m1, m1.binning))) + logging.debug(str((m2, m2.binning))) + logging.debug(str((m1.nominal_values))) + logging.debug(str((m1.std_devs))) + r = m1 + m2 + # compare only nominal val + assert r == 3 + logging.debug(str((r))) + logging.debug(str(('m1+m2=3:', r, r[0, 0]))) + r = m2 + m1 + # or compare including errors + assert r == ufloat(3, 1) + logging.debug(str(('m2+m1=3:', r, r[0, 0]))) + r = 2*m1 + assert r == ufloat(2, 2), str(r.hist) + logging.debug(str(('2*m1=2:', r, r[0, 0]))) + r = (2*m1 + 8) / m2 + logging.debug(str(('(2*(1+/-1) + 8) / 2:', r, r[0, 0]))) + assert r == ufloat(5, 1), str(r.hist) + logging.debug(str(('(2*m1 + 8) / m2=5:', r, r.hist[0, 0]))) + #r[:, 1] = 1 + #r[2, :] = 2 + logging.debug(str(('r[0:2, 0:5].hist:', r[0:2, 0:5].hist))) + logging.debug(str(('r[0:2, 0:5].binning:', r[0:2, 0:5].binning))) + r = m1 / m2 + assert r == ufloat(0.5, 0.5) + logging.debug(str((r, '=', r[0, 0]))) + logging.debug(str(([b.binning.energy.midpoints[0] + for b in m1.iterbins()][0:2]))) + + # Test reorder_dimensions + e_binning = OneDimBinning( + name='energy', num_bins=2, is_log=True, domain=[1, 80]*ureg.GeV + ) + cz_binning = OneDimBinning( + name='coszen', num_bins=3, is_lin=True, domain=[-1, 1] + ) + az_binning = OneDimBinning( + name='azimuth', num_bins=4, is_lin=True, + domain=[0, 2*np.pi]*ureg.rad + ) + a = [] + for i in range(len(e_binning)): + b = [] + for j in range(len(cz_binning)): + c = [] + for k in range(len(az_binning)): + c.append(i*100 + j*10 + k) + b.append(c) + a.append(b) + a = np.array(a) + m_orig = Map(name='orig', hist=deepcopy(a), + binning=[e_binning, cz_binning, az_binning]) + m_new = m_orig.reorder_dimensions(['azimuth', 'energy', 'coszen']) + + assert np.alltrue(m_orig[:, 0, 0].hist.flatten() == + m_new[0, :, 0].hist.flatten()) + assert np.alltrue(m_orig[0, :, 0].hist.flatten() == + m_new[0, 0, :].hist.flatten()) + assert np.alltrue(m_orig[0, 0, :].hist.flatten() == + m_new[:, 0, 0].hist.flatten()) + + for dim in m_orig.binning.names: + assert m_orig[:, 0, 0].binning[dim] == m_new[0, :, 0].binning[dim] + assert m_orig[0, :, 0].binning[dim] == m_new[0, 0, :].binning[dim] + assert m_orig[0, 0, :].binning[dim] == m_new[:, 0, 0].binning[dim] + + deepcopy(m_orig) + + #FIXME: Add unit test for plot function: + # - test 3D *and* 2D case + # - test saving option works + # - test return types + + # start implementing some + # test_return = xx.plot() + # assert test_return[0] == matplotlib.figure.Figure + # assert test_return[1] == matplotlib.axes._subplots.AxesSubplot + # assert test_return[2] == matplotlib.collections.QuadMesh + # assert test_return[3] == matplotlib.colorbar.Colorbar + + logging.info(str(('<< PASS : test_Map >>')))
+ + + +# TODO: add tests for llh, chi2 methods +# TODO: make tests use assert rather than rely on logging.debug(str((!))) +
+[docs] +def test_MapSet(): + """Unit tests for MapSet class""" + import pickle + n_ebins = 6 + n_czbins = 3 + e_binning = OneDimBinning(name='energy', tex=r'E_\nu', num_bins=n_ebins, + domain=(1, 80)*ureg.GeV, is_log=True) + cz_binning = OneDimBinning(name='coszen', tex=r'\cos\,\theta', + num_bins=n_czbins, domain=(-1, 0), is_lin=True) + binning = MultiDimBinning([e_binning, cz_binning]) + m1 = Map(name='ones', hist=np.ones(binning.shape), binning=binning, + hash='xyz') + m1.set_poisson_errors() + m2 = Map(name='twos', hist=2*np.ones(binning.shape), binning=binning, + hash='xyz') + ms01 = MapSet([m1, m2]) + + # Test fluctuate + _ = ms01.fluctuate(method="poisson") # just ensure that None random_state is handled + ms01_seed0 = ms01.fluctuate(method="poisson", random_state=0) + ms01_seed1 = ms01.fluctuate(method="poisson", random_state=1) + ms01_seed0_reprod = ms01.fluctuate(method="poisson", random_state=0) + logging.debug("Fluctuated map set with seed 0:") + logging.debug(ms01_seed0) + logging.debug("Fluctuated map set with seed 1:") + logging.debug(ms01_seed1) + logging.debug("Fluctuated map set with seed 0, reproduced:") + logging.debug(ms01_seed0_reprod) + + assert ms01_seed0 == ms01_seed0_reprod + assert not (ms01_seed0 == ms01_seed1) + + # Test rebin + _ = ms01.rebin(m1.binning.downsample(3)) + ms01_rebinned = ms01.rebin(m1.binning.downsample(6, 3)) + for m_orig, m_rebinned in zip(ms01, ms01_rebinned): + assert m_rebinned.hist[0, 0] == np.sum(m_orig.hist) + + logging.debug(str(("downsampling ====================="))) + logging.debug(str((ms01.downsample(3)))) + logging.debug(str(("===================== downsampling"))) + ms01 = MapSet((m1, m2), name='ms01') + ms02 = MapSet((m1, m2), name='map set 1') + ms1 = MapSet(maps=(m1, m2), name='map set 1', collate_by_name=True, + hash=None) + assert np.all(ms1.combine_re(r'.*').hist == ms1.combine_wildcard('*').hist) + assert np.all(ms1.combine_re(r'.*').hist == (ms1.ones + ms1.twos).hist) + assert np.all(ms1.combine_re(r'^(one|two)s.*$').hist == + ms1.combine_wildcard('*s').hist) + assert np.all(ms1.combine_re(r'^(one|two)s.*$').hist == (ms1.ones + + ms1.twos).hist) + logging.debug(str((ms1.combine_re(r'^o').hist))) + logging.debug(str((ms1.combine_wildcard(r'o*').hist))) + logging.debug(str((ms1.combine_re(r'^o').hist + - ms1.combine_wildcard(r'o*').hist))) + logging.debug(str(('map sets equal after combining?', + ms1.combine_re(r'^o') == ms1.combine_wildcard(r'o*')))) + logging.debug(str(('hist equal after combining?', + np.all(ms1.combine_re(r'^o').hist == + ms1.combine_wildcard(r'o*').hist)))) + assert np.all(ms1.combine_re(r'^o.*').nominal_values + == ms1.combine_wildcard('o*').nominal_values), \ + '%s\n%s' % (ms1.combine_re(r'^o.*'), ms1.combine_wildcard('o*')) + logging.debug(str(('5', ms1.names))) + assert np.all(ms1.combine_re(r'^o').nominal_values == ms1.ones.nominal_values) + assert np.all(ms1.combine_wildcard(r'o*').nominal_values == ms1.ones.nominal_values) + logging.debug(str(('6', ms1.names))) + try: + ms1.combine_re('three') + except ValueError: + pass + else: + assert False + try: + ms1.combine_wildcard('three') + except ValueError: + pass + else: + assert False + + assert ms1.hash == 'xyz' + assert ms1.name == 'map set 1' + ms1.hash = 10 + assert ms1.hash == 10 + assert m1.hash == 10 + assert m2.hash == 10 + ms1.hash = -10 + assert ms1.hash == -10 + # "Remove" the hash from the MapSet... + ms1.hash = None + # ... but this should not remove hashes from the contained maps + assert m1.hash == -10 + # ... and hashing on the MapSet should see that all contained maps have the + # SAME hash val, and so should just return the hash value shared among them + # all + assert ms1.hash == -10 + # However changing a single map's hash means not all hashes are the same + # for all maps... + m1.hash = 40 + # ... so a hash should be computed from all contained hashes + assert ms1.hash != 40 and ms1.hash != -10 + + assert ms1.maps == [m1, m2] + assert ms1.names == ['ones', 'twos'] + assert ms1.tex is None + # Check the Poisson errors + assert np.all(ms1[0].nominal_values == np.ones(binning.shape)) + assert np.all(ms1[0].std_devs == np.ones(binning.shape)) + assert np.all(ms1[1].hist == 2*np.ones(binning.shape)) + logging.debug(str(('ms1[0:2].hist:', ms1[0:2].hist))) + logging.debug(str(('ms1[0:2, 0:2].hist:', ms1[0:2, 0:2].hist))) + assert np.all(ms1.apply_to_maps('__add__', 1).ones == 2) + + m1 = Map(name='threes', hist=3*np.ones((n_ebins, n_czbins)), + binning=binning) + m2 = Map(name='fours', hist=4*np.ones((n_ebins, n_czbins)), binning=binning) + ms2 = MapSet(maps=(m1, m2), name='map set 2', collate_by_name=False) + + try: + logging.debug(str((ms1.__add__(ms2)))) + except ValueError: + pass + else: + raise Exception('Should have errored out!') + + m1 = Map(name='fives', hist=5*np.ones((n_ebins, n_czbins)), + binning=binning) + m2 = Map(name='sixes', hist=6*np.ones((n_ebins, n_czbins)), + binning=binning) + ms3 = MapSet(maps=(m1, m2), name='map set 3', collate_by_name=False) + ms4 = MapSet(maps=(m1, m2), name='map set 3', collate_by_name=False) + assert ms3 == ms4 + + logging.debug(str(('ms2.maps:', ms2.maps))) + logging.debug(str(("(ms2 + ms3).names", (ms2 + ms3).names))) + logging.debug(str(("(ms2 + ms3)[0, 0].hist", (ms2 + ms3)[0, 0].hist))) + logging.debug(str(("ms1['ones'][0, 0]:", ms1['ones'][0, 0]))) + logging.debug(str(('ms1.__mul__(2)[0, 0]:', ms1.__mul__(2)[0, 0]))) + logging.debug(str(('(ms1 * 2)[0, 0]:', (ms1 * 2)[0, 0]))) + logging.debug(str(('ms1.__add__(ms1)[0, 0]:', ms1.__add__(ms1)[0, 0]))) + logging.debug(str(('(ms1 + ms1)[0, 0]:', (ms1 + ms1)[0, 0]))) + logging.debug(str((ms1.names))) + logging.debug(str(('(ms1/ ms1)[0, 0]:', (ms1 / ms1)[0, 0]))) + logging.debug(str(('(ms1/ms1 - 1)[0, 0]:', (ms1/ms1 - 1)[0, 0]))) + #logging.debug(str(("ms1.log10()['ones']:", ms1.log10()['ones']))) + #logging.debug(str(("ms1.log10()[0, 0]['ones']:", + # ms1.log10()[0, 0]['ones']))) + #logging.debug(str(('np.log10(ms1):', np.log10(ms1)))) + logging.debug(str(('(ms1 * np.e).binning:', (ms1 * np.e).binning))) + #logging.debug(str(('np.log(ms1 * np.e)[0][0, 0]:', + # (np.log(ms1 * np.e))[0][0, 0]))) + #logging.debug(str(('np.sqrt(ms1)[0][0:4, 0:2].hist:', + # np.sqrt(ms1)[0][0:4, 0:2].hist))) + logging.debug(str(('str(ms1)', str(ms1)))) + logging.debug(str(('str(ms4)', str(ms4)))) + logging.debug(str(('ms3', ms3))) + logging.debug(str(('ms4', ms4))) + + testdir = tempfile.mkdtemp() + try: + for ms in [ms01, ms02, ms1, ms2, ms3, ms4]: + ms_file = os.path.join(testdir, ms.name + '.json') + ms.to_json(ms_file, warn=False) + ms_ = MapSet.from_json(ms_file) + assert ms_ == ms, 'ms=\n%s\nms_=\n%s' % (ms, ms_) + jsons.to_json(ms, ms_file, warn=False) + ms_ = MapSet.from_json(ms_file) + assert ms_ == ms, 'ms=\n%s\nms_=\n%s' % (ms, ms_) + + # Had bug where datastruct containing MapSet failed to be saved. + # Test tuple containing list containing OrderedDict containing + # MapSet. + struct = ([OrderedDict(mapset=ms)],) + jsons.to_json(struct, ms_file, warn=False) + loaded = jsons.from_json(ms_file) + ms_ = MapSet(**loaded[0][0]['mapset']) + assert ms_ == ms + + # Now try with pickle + ms_file = os.path.join(testdir, ms.name + '.pkl') + pickle.dump(struct, open(ms_file, 'wb'), + protocol=pickle.HIGHEST_PROTOCOL) + loaded = pickle.load(open(ms_file, 'rb')) + ms_ = loaded[0][0]['mapset'] + assert ms_ == ms + + finally: + shutil.rmtree(testdir, ignore_errors=True) + + ms_copy = deepcopy(ms01) + assert ms_copy == ms01 + ms01 += 1. + # make sure that the copy is indeed decoupled from the original + assert not (ms_copy == ms01) + + # Test reorder_dimensions (this just tests that it succeeds on the map set; + # correctness of the reordering is tested in the unit test for Map) + for ms in [ms01, ms02, ms1, ms2, ms3, ms4]: + for p in permutations(ms[0].binning.dimensions): + ms.reorder_dimensions(p) + + logging.info('<< PASS : test_MapSet >>')
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_Map() + test_MapSet() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/param.html b/_modules/pisa/core/param.html new file mode 100644 index 000000000..108d2edfd --- /dev/null +++ b/_modules/pisa/core/param.html @@ -0,0 +1,2586 @@ + + + + + + pisa.core.param — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.param

+"""
+Define Param, ParamSet, and ParamSelector classes for handling parameters, sets
+of parameters, and being able to discretely switch between sets of parameter
+values.
+"""
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Iterable, Mapping, MutableSequence, Set, Sequence
+from collections import OrderedDict
+from copy import deepcopy
+from functools import total_ordering
+from operator import setitem
+from os.path import join
+from shutil import rmtree
+import sys
+from tabulate import tabulate
+import tempfile
+
+import numpy as np
+import pint
+from six import string_types
+
+from pisa import ureg
+from pisa.core.prior import Prior
+from pisa.utils import callable
+from pisa.utils import jsons
+from pisa.utils.comparisons import (
+    interpret_quantity, isbarenumeric, normQuant, recursiveEquality
+)
+from pisa.utils.hash import hash_obj
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.random_numbers import get_random_state
+from pisa.utils.stats import ALL_METRICS, CHI2_METRICS, LLH_METRICS
+from pisa.utils.comparisons import FTYPE_PREC
+from pisa.utils.callable import Funct
+from pisa.utils.resources import find_resource
+
+__all__ = [
+    'Param',
+    'DerivedParam',
+    'ParamSet',
+    'ParamSelector',
+    'test_Param',
+    'test_ParamSet',
+    'test_ParamSelector',
+]
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: Make property "frozen" or "read_only" so params in param set e.g.
+# returned by a template maker -- which updating the values of will NOT have
+# the effect the user might expect -- will be explicitly forbidden?
+
+# TODO: units: pass in attached to values, or as separate kwarg? If e.g.
+# value hasn't been set yet, then there's no implicit units to reference
+# when setting the prior, range, and possibly other things (which all need to
+# at least have compatible units)
+
+[docs] +@total_ordering +class Param: + """Parameter class to store any kind of parameters + + Parameters + ---------- + name : string + + value : scalar, bool, pint Quantity (value with units), string, or None + + prior : pisa.prior.Prior or instantiable thereto + + range : sequence of two scalars or Pint quantities, or None + + is_fixed : bool + + unique_id : string, optional + If None is provided (default), `unique_id` is set to `name` + + is_discrete : bool, optional + Default is False + + scales_as_log : bool, optional + Rescale the log of the parameter's value between 0 and 1 for minimization, + rather than the value itself. This can help optimizing parameters spanning + several orders of magnitude. + + nominal_value : same type as `value`, optional + If None (default), set to same as `value` + + tex : None or string + + help : string + + Notes + ----- + In the case of a free (`is_fixed`=False) parameter, a valid range for the + parameter should be spicfied and a prior must be assigned to compute llh + and chi2 values. + + Examples + -------- + >>> from pisa import ureg + >>> from pisa.core.prior import Prior + >>> gaussian = Prior(kind='gaussian', mean=10*ureg.meter, + ... stddev=1*ureg.meter) + >>> x = Param(name='x', value=1.5*ureg.foot, prior=gaussian, + ... range=[-10, 60]*ureg.foot, is_fixed=False, is_discrete=False) + >>> x.value + <Quantity(1.5, 'foot')> + >>> print(x.prior_llh) + -45.532515919999994 + >>> print(x.to('m')) + + >>> x.value = 10*ureg.m + >>> print(x.value) + <Quantity(32.8083989501, 'foot')> + >>> x.ito('m') + >>> print(x.value) + + >>> x.prior_llh + -1.5777218104420236e-30 + >>> p.nominal_value + + >>> x.reset() + >>> print(x.value) + + + """ + # pylint: disable=protected-access + _slots = ( + 'name', + 'unique_id', + 'value', + 'prior', + '_prior', + 'range', + 'is_fixed', + 'is_discrete', + 'scales_as_log', + 'nominal_value', + 'tex', + '_rescaled_value', + '_nominal_value', + '_tex', + 'help', + '_value', + '_range', + '_units', + 'normalize_values', + ) + _state_attrs = ( + 'name', + 'unique_id', + 'value', + 'prior', + 'range', + 'is_fixed', + 'is_discrete', + 'scales_as_log', + 'nominal_value', + 'tex', + 'help', + ) + + def __init__( + self, + name, + value, + prior, + range, + is_fixed, + unique_id=None, + is_discrete=False, + scales_as_log=False, + nominal_value=None, + tex=None, + help='', + ): # pylint: disable=redefined-builtin + self._range = None + self._tex = None + self._value = None + self._units = None + self._nominal_value = None + self._prior = None + + self.value = value + self.scales_as_log = scales_as_log + self.name = name + self.unique_id = unique_id if unique_id is not None else name + self._tex = tex + self.help = help + self.range = range + self.prior = prior + self.is_fixed = is_fixed + self.is_discrete = is_discrete + self.nominal_value = value if nominal_value is None else nominal_value + self.normalize_values = False + + if self.scales_as_log and range[0].m * range[1].m <= 0: + raise ValueError("A parameter with log-scaling must have a range that is " + "either entirely negative or entirely positive.") + + + def __repr__(self): + return f"{self.name}, value: {self.value}, nominal_value: {self.nominal_value}, range: {self.range}, prior: {self.prior}, is_fixed: {self.is_fixed}" + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + return recursiveEquality(self.state, other.state) + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + return self.name < other.name + + def __setattr__(self, attr, val): + if attr not in self._slots: + raise AttributeError('Invalid attribute: %s' % (attr,)) + object.__setattr__(self, attr, val) + + def __str__(self): + return '%s=%s; prior=%s, range=%s, is_fixed=%s,' \ + ' is_discrete=%s; help="%s"' \ + % (self.name, self.value, self.prior, self.range, + self.is_fixed, self.is_discrete, self.help) + +
+[docs] + def validate_value(self, value): + if self.range is not None: + if self.is_discrete: + if value not in self.range: + raise ValueError( + 'Param %s has a value %s which is not in the range of ' + '%s'%(self.name, value, self.range) + ) + else: + value_not_big_enough = value.m_as(self._units) < min(self.range).m_as(self._units) + value_not_small_enough = value.m_as(self._units) > max(self.range).m_as(self._units) + if value_not_big_enough or value_not_small_enough: + raise ValueError( + 'Param %s has a value %s which is not in the range of ' + '%s'%(self.name, value, self.range) + )
+ + + @property + def value(self): + return self._value + + @value.setter + def value(self, val): + # Strings, bools, and `None` are simply used as-is; otherwise, enforce + # input have units (or default to units of `dimensionless`) + if not (val is None or isinstance(val, (string_types, bool))): + # A number with no units actually has units of "dimensionless" + val = interpret_quantity(val, expect_sequence=False) + + if self._value is not None: + if hasattr(self._value, 'units'): + assert hasattr(val, 'units'), \ + 'Passed values must have units if the param has units' + val = val.to(self._value.units) + self.validate_value(val) + self._value = val + if hasattr(self._value, 'units'): + self._units = self._value.units + else: + self._units = ureg.Unit('dimensionless') + + @property + def magnitude(self): + return self._value.magnitude + + @property + def m(self): # pylint: disable=invalid-name + return self._value.magnitude + +
+[docs] + def m_as(self, u): + return self._value.m_as(u)
+ + + @property + def dimensionality(self): + return self._value.dimensionality + + @property + def units(self): + return self._units + + @property + def u(self): # pylint: disable=invalid-name + return self._units + + @property + def range(self): + if self._range is None: + return None + return tuple(self._range) + + @range.setter + def range(self, values): + if values is None: + self._range = None + return + + if len(values) != 2: + raise ValueError( + "Must provide a lower and upper bound; got {} value(s)".format( + len(values) + ) + ) + + if values[1] <= values[0]: + raise ValueError( + "The second value of the range must be strictly larger than the first." + ) + if self.scales_as_log and values[0].m * values[1].m <= 0: + raise ValueError("A parameter with log-scaling must have a range that is " + "either entirely negative or entirely positive.") + + new_vals = [] + for val in values: + val = interpret_quantity(val, expect_sequence=False) + + # NOTE: intentionally using type() instead of isinstance() here. + # Not sure if this could be converted to isinstance(), though. + if not type(val) == type(self.value): # pylint: disable=unidiomatic-typecheck + raise TypeError('Value "%s" has type %s but must be of type' + ' %s.' % (val, type(val), type(self.value))) + + if isinstance(self.value, ureg.Quantity): + if self.dimensionality != val.dimensionality: + raise ValueError('Value "%s" units "%s" incompatible with' + ' units "%s".' + % (val, val.units, self.units)) + + new_vals.append(val) + + self._range = new_vals + + # TODO: make discrete values rescale to integers 0, 1, ... + @property + def _rescaled_value(self): + if self.is_discrete: + return self.value + srange = self.range + if srange is None: + raise ValueError('Cannot rescale without a range specified' + ' for parameter %s' % self) + srange = self.range + srange0 = srange[0].m_as(self._units) + srange1 = srange[1].m_as(self._units) + value = self._value.m_as(self._units) + + if self.scales_as_log: + if srange0 < 0: # entire range assumed negative (asserted elsewhere) + srange0 *= -1 + srange1 *= -1 + value *= -1 + return (np.log(value) - np.log(srange0)) / (np.log(srange1) - np.log(srange0)) + else: + return (value - srange0) / (srange1 - srange0) + + @_rescaled_value.setter + def _rescaled_value(self, rval): + srange = self.range + if srange is None: + raise ValueError('Cannot rescale without a range specified' + ' for parameter %s' % self) + if rval < 0 or rval > 1 + FTYPE_PREC: + raise ValueError( + '%s: `rval`=%.15e, but cannot be outside [0, 1]' + % (self.name, rval) + ) + rval = np.min([1., rval]) # make exactly 1. if rounding error occurred + srange0 = srange[0].m_as(self._units) + srange1 = srange[1].m_as(self._units) + if self.scales_as_log: + # it is possible that the entire value range is negative, taking the + # absolute value only inside log() produces the correct sign + self._value = np.exp(rval*(np.log(np.abs(srange1)) - np.log(np.abs(srange0)))) * srange0 * self._units + else: + self._value = (srange0 + (srange1 - srange0)*rval) * self._units + # In some rare cases (one case being rval = 1., range = (-0.5, 0.3)), a rounding + # error can occur that sets the value outside the allowed range. We clip the + # value back to the range if that happens. + # Using the standard setter method instead of writing to _value so that we + # auto-convert in case the range is defined in different units. + if self.value > max(srange): self.value = max(srange) + if self.value < min(srange): self.value = min(srange) + self.validate_value(self.value) + + @property + def tex(self): + return r'{\rm %s}' % self.name.replace("_", r"\;") if self._tex is None else self._tex + + @property + def nominal_value(self): + return self._nominal_value + + @nominal_value.setter + def nominal_value(self, value): + if not (value is None or isinstance(value, (bool, string_types))): + value = interpret_quantity(value, expect_sequence=False) + self.validate_value(value) + self._nominal_value = value + + @property + def prior(self): + return self._prior + + @prior.setter + def prior(self, value): + if value is None: + prior = value + elif isinstance(value, Prior): + prior = value + elif isinstance(value, Mapping): + prior = Prior(**value) + else: + raise TypeError("Unhandled prior type {}".format(type(value))) + self._prior = prior + + @property + def state(self): + state = OrderedDict() + for attr in self._state_attrs: + val = getattr(self, attr) + if hasattr(val, 'state'): + val = val.state + setitem(state, attr, val) + return state + + @property + def serializable_state(self): + return self.state + +
+[docs] + def reset(self): + """Reset the parameter's value to its nominal value.""" + self.value = self.nominal_value
+ + +
+[docs] + def set_nominal_to_current_value(self): + """Define the nominal value to the parameter's current value.""" + self.nominal_value = self.value
+ + +
+[docs] + def randomize(self, random_state=None): + """Randomize the parameter's value according to a uniform random + distribution within the parameter's defined limits. + + Parameters + ---------- + random_state : None, int, or RandomState + Object to use for random state. None defaults to the global random + state (this is discouraged, as results are not reproducible). An + integer acts as a seed to `numpy.random.seed()`, and RandomState is + a `numpy.random.RandomState` object. + + """ + random = get_random_state(random_state) + rand = random.rand() + self._rescaled_value = rand
+ + +
+[docs] + def prior_penalty(self, metric): + """Return the prior penalty according to `metric`. + + Parameters + ---------- + metric : str + Metric to use for evaluating the prior penalty. + + Returns + ------- + penalty : float prior penalty value + + """ + assert isinstance(metric, str) + metric = metric.strip().lower() + if metric not in ALL_METRICS: + raise ValueError('Metric "%s" is invalid; must be one of %s' + %(metric, ALL_METRICS)) + if self.prior is None: + return 0 + if metric in LLH_METRICS: + logging.trace('self.value: %s' %self.value) + logging.trace('self.prior: %s' %self.prior) + return self.prior.llh(self.value) + elif metric in CHI2_METRICS: + return self.prior.chi2(self.value) + else: + raise ValueError('Unrecognized `metric` "%s"' %str(metric))
+ + +
+[docs] + def to(self, units): # pylint: disable=invalid-name + """Return an equivalent copy of param but in units of `units`. + + Parameters + ---------- + units : string or pint.Unit + + Returns + ------- + Param : copy of this param, but in specified `units`. + + See also + -------- + ito + Pint.to + Pint.ito + + """ + new_param = Param(**deepcopy(self.state)) + new_param.ito(units) + return new_param
+ + +
+[docs] + def ito(self, units): + """Convert this param (in place) to have units of `units`. + + Parameters + ---------- + units : string or pint.Unit + + Returns + ------- + None + + See also + -------- + to + Pint.to + Pint.ito + + """ + self._value.ito(units)
+ + + @property + def prior_llh(self): + return self.prior_penalty(metric='llh') + + @property + def prior_chi2(self): + return self.prior_penalty(metric='chi2') + + @property + def hash(self): + """int : hash of full state""" + if self.normalize_values: + return hash_obj(normQuant(self.state)) + return hash_obj(self.state) + + def __hash__(self): + return self.hash + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, filename): + """Instantiate a new Param from a JSON file""" + state = jsons.from_json(filename=filename) + return cls(**state)
+
+ + +
+[docs] +class DerivedParam(Param): + """ + This is a meta-parameter param that implements a param depending on other Params. + """ + _slots = ( + 'name', + 'unique_id', + 'value', + 'prior', + '_prior', + 'range', + 'is_fixed', + 'is_discrete', + 'scales_as_log', + 'nominal_value', + 'tex', + '_rescaled_value', + '_nominal_value', + '_tex', + 'help', + '_value', + '_range', + '_units', + 'normalize_values', + '_depends_names', + '_dependson', + '_configured', + '_callable', + 'dependson', + 'callable', + 'depends_names' + ) + + _state_attrs = ( + 'name', + 'unique_id', + 'value', + 'prior', + 'range', + 'is_fixed', + 'is_discrete', + 'scales_as_log', + 'nominal_value', + 'tex', + 'help', + 'dependson', + 'callable', + 'depends_names' + ) + + def __init__(self, + name, + value, + unique_id=None, + is_discrete=False, + scales_as_log=False, + nominal_value=None, + tex=None, + range=None, + depends_names="", + function_file="", + help=''): + + self._depends_names = depends_names + self._dependson = tuple([]) + self._configured = False + self._callable = None + + self._range = None + self._tex = None + self._units = ureg.dimensionless + self._nominal_value = None + self._prior = None + + self.is_fixed=True + self.scales_as_log = scales_as_log + self.name = name + self.range = range + + self.unique_id = unique_id if unique_id is not None else name + self._tex = tex + self.help = help + self.is_discrete = is_discrete + self.nominal_value = value if nominal_value is None else nominal_value + self.normalize_values = False + + if function_file!="": + self.callable = Funct.from_json(find_resource(function_file)) + + @property + def callable(self)->callable.Funct: + if self._callable is None: + logging.fatal("No set callable for DerivedParam {}".format(self.name)) + return self._callable + + @callable.setter + def callable(self, what:'callable.Funct'): + """ + Note - the callable should take dictionary of parameters + { + paramname:Param, + paramname2:Param + } + + the names are in principle redundant, but by keeping the mapping we can make the lookup of the dependable names quicker + """ + self._callable = what + +
+[docs] + def validate_value(self, value): + return
+ + + @property + def range(self): + # if this is not re-implemented, the setter gets very confused + if self._range is None: + return None + else: + return tuple(self._range) + + @range.setter + def range(self, values): + """ + trust that this is set accurately + """ + self._range = values + + @property + def depends_names(self): + return self._depends_names + + @depends_names.setter + def depends_names(self, *names): + self._depends_names = names + + @property + def dependson(self)->'dict[Param]': + if not self._configured: + logging.fatal("Cannot access unconfigured Derived parameter!") + return self._dependson + +
+[docs] + def prior_penalty(self, metric): + """ + We don't want to double-count the penalty from derived params + """ + return 0.0
+ + + @dependson.setter + def dependson(self, params): + working = [] + for param in params: + if isinstance(param, Mapping): + param = Param(**param) + if isinstance(param, Param): + working.append(param) + else: + raise TypeError("Unhandled type {}: {}".format(type(param), param)) + self._configured = True + self._dependson = {param.name:param for param in working} + self.depends_names = tuple([param.name for param in working]) + + + @property + def _value(self): + """ + The value of this Derived Parameter is determined by calling the configured 'callable' with the parameters it depends on + """ + return self.callable(**self.dependson)*ureg.dimensionless + + @property + def state(self)->dict: + statekind={ + "callable":self.callable.state, + "depends":self.depends_names, + "range":self._range + } + return statekind + + @property + def serializable_state(self): + return self.state + +
+[docs] + @classmethod + def from_state(cls, state)->'DerivedParam': + raise NotImplementedError("")
+ + +
+[docs] + def to_json(self, filename, **kwargs): + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+
+ + +# TODO: temporary modification of parameters via "with" syntax? +# TODO: union, |, intersection, &, difference, -, symmetric_difference, ^, copy +
+[docs] +class ParamSet(MutableSequence, Set): + r"""Container class for a set of parameters. Most methods are passed + through to contained params. + + Interface is a superset of both `MutableSequence` (i.e., behaves like a + Python `list`, so ordering, appending, extending, etc. all work) and `Set` + (i.e., behaves like a Python `set`, so no duplicates (tested by name) are + allowed, you can test set membership like issuperset, issubset, etc.). + See .. :: + + https://docs.python.org/3/library/collections.abc.html + + for the definitions of the `MutableSequence` and `Set` interfaces. + + + Parameters + ---------- + *args : one or more Param objects or sequences thereof + + Examples + -------- + >>> from pisa import ureg + >>> from pisa.core.prior import Prior + + >>> e_prior = Prior(kind='gaussian', mean=10*ureg.GeV, stddev=1*ureg.GeV) + >>> cz_prior = Prior(kind='uniform', llh_offset=-5) + >>> reco_energy = Param(name='reco_energy', value=12*ureg.GeV, + ... prior=e_prior, range=[1, 80]*ureg.GeV, + ... is_fixed=False, is_discrete=False, + ... tex=r'E^{\rm reco}') + >>> reco_coszen = Param(name='reco_coszen', value=-0.2, prior=cz_prior, + ... range=[-1, 1], is_fixed=True, is_discrete=False, + ... tex=r'\cos\,\theta_Z^{\rm reco}') + >>> param_set = ParamSet(reco_energy, reco_coszen) + >>> print(param_set) + reco_coszen=-2.0000e-01 reco_energy=+1.2000e+01 GeV + + >>> print(param_set.free) + reco_energy=+1.2000e+01 GeV + + >>> print(param_set.reco_energy.value) + 12 gigaelectron_volt + + >>> print([p.prior_llh for p in param_set]) + [-5.0, -2] + + >>> print(param_set.priors_llh) + -7.0 + + >>> print(param_set.values_hash) + 3917547535160330856 + + >>> print(param_set.free.values_hash) + -7121742559130813936 + + """ + # pylint: disable=protected-access + def __init__(self, *args): + # Unpack the input args into a flat list of params + param_sequence_ = [] + for arg_num, arg in enumerate(args, start=1): + if isinstance(arg, (Mapping, Param)): + param_sequence_.append(arg) + elif isinstance(arg, Iterable): + param_sequence_.extend(arg) + else: + raise TypeError( + "Unhandled type {}, arg #{}: {}".format(type(arg), arg_num, arg) + ) + + param_sequence = [] + for param in param_sequence_: + if isinstance(param, Mapping): + param = Param(**param) + if isinstance(param, Param): + param_sequence.append(param) + else: + raise TypeError("Unhandled type {}: {}".format(type(param), param)) + + # Disallow duplicated params + all_names = [p.name for p in param_sequence] + unique_names = set(all_names) + if len(unique_names) != len(all_names): + duplicates = set(x for x in all_names if all_names.count(x) > 1) + raise ValueError('Duplicate definitions found for param(s): ' + + ', '.join(str(e) for e in duplicates)) + + # Elements of list must be Param type + assert all([isinstance(x, Param) for x in param_sequence]), \ + 'All params must be of type "Param"' + + self._params = param_sequence + + # if we do not normalize, then the hash will change upon evaluating unit changes + # I think because the changed units are cached in the object (Philipp) + self.normalize_values = True + + @property + def has_derived(self)->bool: + """ + Returns whether or not this set contains a derived parameter + """ + has = False + return any(isinstance(par, DerivedParam) for par in self) + + @property + def serializable_state(self): + return [p.state for p in self] + + @property + def _by_name(self): + return {obj.name: obj for obj in self._params} + + def __repr__(self): + return self.tabulate(tablefmt="presto") + + def _repr_html_(self): + return self.tabulate(tablefmt="html") + +
+[docs] + def tabulate(self, tablefmt="plain"): + headers = ['name', 'value', 'nominal_value', 'range', 'prior', 'units', 'is_fixed'] + colalign=["right"] + ["center"] * (len(headers) -1 ) + table = [] + for p in self: + if (p.value is None or isinstance(p.value, (string_types, bool))): + table.append([p.name, p.value, p.nominal_value, p.range, p.prior, p.units, p.is_fixed]) + else: + if p.range is not None: + range_fmt = [r.m for r in p.range] + else: + range_fmt = None + if p.prior is not None: + if p.prior.kind == "gaussian": + prior_fmt = "+/- %s"%p.prior.stddev.m + elif p.prior.kind == "uniform": + prior_fmt = "uniform" + else: + prior_fmt = p.prior + else: + prior_fmt = p.prior + table.append([p.name, p.value.m, p.nominal_value.m, range_fmt, prior_fmt, p.units, p.is_fixed]) + if len(table) == 0: + return "Empty Params" + return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign)
+ + +
+[docs] + def index(self, value): # pylint: disable=arguments-differ + """Return an integer index to the Param in this ParamSet indexed by + `value`. This does not look up a param's `value` property but looks for + param by name, integer index, or matching object. + + Parameters + ---------- + value : int, str or Param + The object to return an index for. If int, the integer is returned + (so long as it's in the valid range). If str, return index of param + with matching `name` attribute. If Param object, return index of an + equivalent Param in this set. + + Returns + ------- + idx : int index to a corresponding param in this ParamSet + + Raises + ------ + ValueError : if `value` does not correspond to a param in this ParamSet + + """ + idx = -1 + if isinstance(value, int): + idx = value + elif value in self.names: + idx = self.names.index(value) + elif isinstance(value, Param) and value in self._params: + idx = self._params.index(value) + if idx < 0 or idx >= len(self): + raise ValueError('%s not found in ParamSet' % (value,)) + return idx
+ + +
+[docs] + def add_covariance(self, covmat:dict)->None: + """ + Correlates several Params. + It works by taking the existing params, and rotating them into a new, uncorrelated, basis state. + New parameters are added in the new basis, and the old params are replaced with derived params + The fits therefore are done in the uncorrelated basis + + + Parameters + ---------- + covmat : dict + A two-deep nested dictionary for covariances between Params + Note: this is specifically not a 2D array such as to be explicit about which params are used + + ex: + { + Param1:{ + Param1: 0.9, + Param2: 0.1 }, + Param2:{ + Param1:0.1, + Param2:0.8} + } + + Raises + ------ + KeyError if given dict has keys not not shared with Parameter names + TypeError if a given entry in covmat is not the proper type + NotImplementedError if the means of calculating the mean for a given parameters prior isn't there yet + """ + dim = len(covmat.keys()) + if dim==0: + return + + cov = np.zeros(shape=(dim,dim)) + names = self.names + for k_i, key in enumerate(covmat.keys()): + if key not in names: + raise KeyError("Key {} not in Params".format(key)) + if not isinstance(covmat[key],dict): + raise TypeError("Each entry in covmat should be another dict, found {}".format(type(covmat[key]))) + for k_j, subkey in enumerate(covmat[key].keys()): + if subkey not in names: + raise KeyError("Key {} not in Params".format(subkey)) + + cov[k_i][k_j] = covmat[key][subkey] + + if np.linalg.det(cov)<0: + raise ValueError("Covariance matrix *must* be positive definite!") + + params = tuple([self[name] for name in covmat.keys()]) + + # we need the mean values of the paramters + means = [0.0 for i in range(dim)] + for i, param in enumerate(params): + if param.prior.kind == "gaussian": + means[i] = param.prior.mean + elif param.prior.kind=="uniform": + means[i] = (param.range[1] + param.range[0])*0.5 + else: + raise NotImplementedError() + + # diagonalize covariance matrix + evals, inv_t = np.linalg.eig(cov) + new_sigmas = np.sqrt(evals) + + if any([abs(sig)<1e-20 for sig in new_sigmas]): + raise ValueError("Found zero-width param {} - your parameters might be linearly dependent!".format(new_sigmas)) + + """ + Let "x" be in the correlated basis + and "v" be in the uncorrelated basis + + T is the matrix from `inv_t` + + v = (x - mu_x) @ T + x = v@(T^-1) + mu_x + + The new Parameters will have Gaussian priors centered at zero! + """ + + transformation = np.linalg.inv(inv_t) + ranges_x = [param.range for param in params] # ranges in correlated basis + new_parameters = [] + + for i, param in enumerate(params): + new_prior = Prior( + kind="gaussian", + mean = 0.0, + stddev = new_sigmas[i] + ) + + # find max and min for this parameter + """ + This paramter V is a function of \vec{x}=(x1, x2, x3, ...) + + \vec{v}_{i} can be calculated via summing over i + v_i = inv_t[j][i] x_i + + This is a linear transformation using the eivenvectors of the covariance matrix + """ + + v_max = 0 + v_min = 0 + for j in range(dim): # number of paramters, dimensionality + v_max += inv_t[j][i]*(ranges_x[j][1] - means[j]) if inv_t[j][i]>0 else inv_t[j][i]*(ranges_x[j][0] - means[j]) + v_min += inv_t[j][i]*(ranges_x[j][1] - means[j]) if inv_t[j][i]<0 else inv_t[j][i]*(ranges_x[j][0] - means[j]) + + new = Param( + name = param.name + "_rotated", + value = 0.0*ureg.dimensionless, # get the centers. These will be zero since we subtract the mean + prior = new_prior, + range = (v_min, v_max), + is_fixed = False, + is_discrete= False, + scales_as_log=param.scales_as_log, + nominal_value=0.0*ureg.dimensionless, + tex=param.tex+"'" + ) + + new_parameters.append(new) + self.update(new) # add in this new parameter + + def build_func(index): + all_vars = [ callable.Var(new_par.name) for new_par in new_parameters ] + + function = transformation[0][index]*all_vars[0] + for _i in range(dim-1): + i = _i + 1 + function = function + transformation[i][index]*all_vars[i] + + function = function + means[index] + + return function + + # now that we have constructed the new parameters, update the old ones to be DerivedParams + for i, param in enumerate(params): + derived_version = DerivedParam( + name = param.name, + value = param.value, + range=param.range + ) + derived_version.dependson = new_parameters # depends on the parameters we've just set up in the uncorrelated basis + derived_version.callable = build_func(i) + + self.replace(derived_version)
+ + + + + +
+[docs] + def replace(self, new): + """Replace an existing param with `new` param, where the existing param + must have the same `name` attribute as `new`. + + Parameters + ---------- + new : Param + New param to use instead of current param. + + Raises + ------ + ValueError : if `new.name` does not match an existing param's name + + """ + idx = self.index(new.name) + self._params[idx] = new
+ + +
+[docs] + def set_values(self, new_params): + """Set values in current ParamSet to those defined in new ParamSet + + Parameters + ---------- + new_params : ParamSet + ParamSet containing set of values to change current ParamSet to. + """ + if self.names != new_params.names: + raise ValueError('ParamSet names do not match. Currently have %s ' + 'and want to change to a set containing %s.' + % (self.names, new_params.names)) + for new_param in new_params: + self[new_param.name].value = new_param.value
+ + +
+[docs] + def fix(self, x): + """Set param(s) to be fixed in value (and hence not modifiable by e.g. + a minimizer). + + Note that the operation is atomic: If `x` is a sequence of indexing + objects, if _any_ index in `x` cannot be found, _no_ other params + specified in `x` will be set to be fixed. + + Any params specified in `x` that are already fixed simply remain so. + + Parameters + ---------- + x : int, str, Param, or iterable thereof + Object or sequence to index into params to define which to affix. + See `index` method for valid objects to use for indexing into the + ParamSet. + + Raises + ------ + ValueError : if any index cannot be found + + """ + if isinstance(x, (Param, int, str)): + x = [x] + indices = set() + for obj in x: + indices.add(self.index(obj)) + for idx in indices: + self[idx].is_fixed = True
+ + +
+[docs] + def unfix(self, x): + """Set param(s) to be free (and hence modifiable by e.g. a minimizer). + + Note that the operation is atomic: If `x` is a sequence of indexing + objects, if _any_ index in `x` cannot be found, _no_ other params + specified in `x` will be set to be free. + + Any params specified in `x` that are already free simply remain so. + + Parameters + ---------- + x : int, str, Param, or iterable thereof + Object or sequence to index into params to define which to affix. + See `index` method for valid objects to use for indexing into the + ParamSet. + + Raises + ------ + ValueError : if any index cannot be found + + """ + if isinstance(x, (Param, int, str)): + x = [x] + indices = set() + for obj in x: + indices.add(self.index(obj)) + for idx in indices: + self[idx].is_fixed = False
+ + +
+[docs] + def update(self, obj, existing_must_match=False, extend=True): + """Update this param set using `obj`. + + Default behavior is similar to Python's dict.update, but this can be + modified via `existing_must_match` and `extend`. + + Parameters + ---------- + obj : Param, ParamSet, or sequence thereof + Param or container with params to update and/or extend this param + set + existing_must_match : bool + If True, raises ValueError if param values passed in that already + exist in this param set have differing values. + extend : bool + If True, params not in this param set are appended. + + """ + # make sure we're having a new object! + #obj = deepcopy(obj) + if isinstance(obj, (Sequence, ParamSet)): + for param in obj: + self.update(param, existing_must_match=existing_must_match, + extend=extend) + return + if not isinstance(obj, Param): + raise ValueError('`obj`="%s" is not a Param' % (obj)) + param = obj + if param.name in self.names: + if existing_must_match and (param != self[param.name]): + raise ValueError( + 'Param "%s" specified as\n\n%s\n\ncontradicts' + ' internally-stored version:\n\n%s' + %(param.name, param.state, self[param.name].state) + ) + self.replace(param) + elif extend: + self._params.append(param)
+ + +
+[docs] + def insert(self, index, value): + """Insert value before index""" + if not isinstance(value, Param): + raise TypeError(f"`value` must be a Param; got {type(value)} instead") + if value.name in self.names: + raise ValueError(f"Cannot insert an existing param name: '{value.name}'") + idx = self.index(index) + self._params.insert(idx, value)
+ + +
+[docs] + def extend(self, values): + """Append param(s) in `values` to this param set, but ensure params in + `values` that are already in this param set match. Params with same name + attribute are not duplicated. + + (Convenience method or calling `update` method with + existing_must_match=True and extend=True.) + + """ + self.update(values, existing_must_match=True, extend=True)
+ + +
+[docs] + def update_existing(self, obj): + """Only existing params in this set are updated by that(those) param(s) + in obj. + + Convenience method for calling `update` with + existing_must_match=False and extend=False. + + """ + self.update(obj, existing_must_match=False, extend=False)
+ + + def __len__(self): + return len(self._params) + + def __setitem__(self, i, val): + if isinstance(i, int): + self._params[i].value = val + elif isinstance(i, str): + self._by_name[i].value = val + + def __delitem__(self, i): + idx = self.index(i) + del self._params[idx] + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + setattr(result, k, deepcopy(v, memo)) + return result + + def __getitem__(self, i)->Param: + if isinstance(i, int): + return self._params[i] + elif isinstance(i, str): + return self._by_name[i] + raise IndexError( + f'Cannot index into a {self.__class__.__name__} with {type(i)} "{i}"' + ) + + def __getattr__(self, attr): + try: + return super().__getattribute__(attr) + except AttributeError: + t, v, tb = sys.exc_info() + try: + return self[attr] + except KeyError: + raise t(v).with_traceback(tb) + + def __setattr__(self, attr, val): + try: + params = super().__getattribute__('_params') + param_names = [p.name for p in params] + except AttributeError: + params = [] + param_names = [] + try: + idx = param_names.index(attr) + except ValueError: + super().__setattr__(attr, val) + else: + # `attr` (should be) param name + if isinstance(val, Param): + assert val.name == attr + self._params[idx] = val + elif isinstance(val, ureg.Quantity) or isbarenumeric(val): + self._params[idx].value = val + else: + raise ValueError('Cannot set param "%s" to `val`=%s' + %(attr, val)) + + def __iter__(self): + return iter(self._params) + + def __str__(self): + numfmt = '%+.4e' + strings = [] + for p in self: + string = p.name + '=' + if isinstance(p.value, ureg.Quantity): + string += numfmt %p.m + full_unit_str = str(p.u) + if full_unit_str in [str(ureg('electron_volt ** 2').u)]: + unit = ' eV2' + elif full_unit_str in [str(ureg.deg)]: + unit = ' deg' + elif full_unit_str in [str(ureg.rad)]: + unit = ' rad' + else: + unit = ' ' + format(p.u, '~') + string += unit + else: + try: + string += numfmt %p.value + except TypeError: + string += '%s' %p.value + strings.append(string.strip()) + return ' '.join(strings) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + return recursiveEquality(self.state, other.state) + +
+[docs] + def issubset(self, other): + return all(param in other for param in self)
+ + +
+[docs] + def issuperset(self, other): + return all(param in self for param in other)
+ + + def __leq__(self, other): + return self.issubset(other) + + def __lt__(self, other): + return len(other) > len(self) and self.issubset(other) + + def __geq__(self, other): + return self.issuperset(other) + + def __gt__(self, other): + return len(self) > len(other) and self.issuperset(other) + +
+[docs] + def priors_penalty(self, metric): + """Return the aggregate prior penalty for all params at their current + values. + + Parameters + ---------- + metric : str + Metric to use for evaluating the prior. + + Returns + ------- + penalty : float sum of all parameters' prior values + + """ + + # if daemonflux stage is not used use std priors penalty + if not "daemon_chi2" in self.names: + priors_sum = np.sum([obj.prior_penalty(metric=metric) + for obj in self._params]) + + # else switch daemon flux params penalty to the one drom daemonflux + # (which takes into account covariance) + else: + # normal (non-correlated) penalty for non-daemonflux params + priors_sum = np.sum([obj.prior_penalty(metric=metric) + for obj in self._params if "daemon_" not in obj.name]) + + # conversion factor between chi2 and llh + conv_factor = -0.5 if metric in LLH_METRICS else 1 + # add daemonflux calcualted chi2 penalty + priors_sum += conv_factor * self._by_name["daemon_chi2"].value.m_as("dimensionless") + + return priors_sum
+ + +
+[docs] + def priors_penalties(self, metric): + """Return the prior penalties for each param at their current values. + + Parameters + ---------- + metric : str + Metric to use for evaluating the prior. + + Returns + ------- + penalty : list of float prior values, one for each param + + """ + return [obj.prior_penalty(metric=metric) for obj in self._params]
+ + +
+[docs] + def reset_all(self): + """Reset both free and fixed parameters to their nominal values.""" + self.values = self.nominal_values
+ + +
+[docs] + def reset_free(self): + """Reset only free parameters to their nominal values.""" + self.free.reset_all()
+ + +
+[docs] + def set_nominal_by_current_values(self): + """Define the nominal values as the parameters' current values.""" + self.nominal_values = self.values
+ + +
+[docs] + def randomize_free(self, random_state=None): + """Randomize any free parameters with according to a uniform random + distribution within the parameters' defined limits. + + Parameters + ---------- + random_state : None, int, or RandomState + Object to use for random state. None defaults to the global random + state (this is discouraged, as results are not reproducible). An + integer acts as a seed to `numpy.random.seed()`, and RandomState is + a `numpy.random.RandomState` object. + + """ + random = get_random_state(random_state) + n = len(self.free) + rand = random.rand(n) + self.free._rescaled_values = rand
+ + + @property + def _rescaled_values(self): + """Parameter values rescaled to be in the range [0, 1], based upon + their defined range.""" + return tuple(param._rescaled_value for param in self._params) + + @_rescaled_values.setter + def _rescaled_values(self, vals): + assert len(vals) == len(self) + for param, val in zip(self._params, vals): + param._rescaled_value = val + + @property + def tex(self): + return r',\;'.join([obj.tex for obj in self._params]) + + @property + def fixed(self): + return ParamSet([obj for obj in self._params if obj.is_fixed]) + + @property + def free(self): + return ParamSet([obj for obj in self._params if not obj.is_fixed]) + + @property + def continuous(self): + return ParamSet([obj for obj in self._params if not obj.is_discrete]) + + @property + def discrete(self): + return ParamSet([obj for obj in self._params if obj.is_discrete]) + + @property + def are_fixed(self): + return tuple(obj.is_fixed for obj in self._params) + + @property + def are_discrete(self): + return tuple(obj.is_discrete for obj in self._params) + + @property + def names(self): + return tuple(obj.name for obj in self._params) + + @property + def values(self): + return tuple(obj.value for obj in self._params) + + @values.setter + def values(self, values): + assert len(values) == len(self._params) + for i, val in enumerate(values): + setattr(self._params[i], 'value', val) + + @property + def name_val_dict(self): + d = OrderedDict() + for name, val in zip(self.names, self.values): + d[name] = val + return d + + @property + def is_nominal(self): + return np.all([(v0 == v1) + for v0, v1 in zip(self.values, self.nominal_values)]) + + @property + def nominal_values(self): + return [obj.nominal_value for obj in self._params] + + @nominal_values.setter + def nominal_values(self, values): + assert len(values) == len(self._params) + for i, val in enumerate(values): + setattr(self._params[i], 'nominal_value', val) + + @property + def priors(self): + return tuple(obj.prior for obj in self._params) + + @priors.setter + def priors(self, values): + assert len(values) == len(self._params) + for i, val in enumerate(values): + setattr(self._params[i], 'prior', val) + + @property + def priors_llh(self): + return np.sum([obj.prior_llh for obj in self._params]) + + @property + def priors_chi2(self): + return np.sum([obj.prior_chi2 for obj in self._params]) + + @property + def ranges(self): + return tuple(obj.range for obj in self._params) + + @ranges.setter + def ranges(self, values): + assert len(values) == len(self._params) + for i, val in enumerate(values): + setattr(self._params[i], 'range', val) + + @property + def state(self): + return tuple(obj.state for obj in self._params) + + @property + def values_hash(self): + """int : hash only on the current param values (not full state)""" + if self.normalize_values: + return hash_obj(normQuant(self.values)) + return hash_obj(self.values) + + @property + def nominal_values_hash(self): + """int : hash only on the nominal param values""" + if self.normalize_values: + return hash_obj(normQuant(self.nominal_values)) + return hash_obj(self.nominal_values) + + @property + def hash(self): + """int : full state hash""" + if self.normalize_values: + return hash_obj(normQuant(self.state)) + return hash_obj(self.state) + + def __hash__(self): + return self.hash + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, filename): + """Instantiate a new ParamSet from a JSON file""" + state = jsons.from_json(filename=filename) + if isinstance(state, Sequence): + return cls(*state) + if isinstance(state, Mapping): + return cls(*tuple(state.values())) + raise TypeError( + 'Unhandled type loaded from "{}": {}\n{}'.format( + filename, type(state), state + ) + )
+
+ + + +
+[docs] +class ParamSelector: + """ + Parameters + ---------- + regular_params : ParamSet or instantiable thereto + + selector_param_sets : None, dict, or sequence of dict + Dict(s) format: + { + '<name1>': <ParamSet or instantiable thereto>, + '<name2>': <ParamSet or instantiable thereto>, + ... + } + The names are what must be specified in `selections` to select the + corresponding ParamSets. Params specified in any of the ParamSets + within `selector_param_sets cannot be in `regular_params`. + + selections : None, string, or sequence of strings + One string is required per + + Notes + ----- + Params specified in `regular_params` are enforced to be mutually exclusive + with params in the param sets specified by `selector_param_sets`. + + """ + # pylint: disable=protected-access + def __init__(self, regular_params=None, selector_param_sets=None, + selections=None): + self._current_params = ParamSet() + self._regular_params = ParamSet() + self._selector_params = {} + self._selections = [] + + if regular_params is not None: + self.update(regular_params, selector=None) + + if selector_param_sets is not None: + for selector, params in selector_param_sets.items(): + selector = selector.strip().lower() + params = ParamSet(params) + self._selector_params[selector] = params + + self.select_params(selections=selections, error_on_missing=False) + +
+[docs] + def select_params(self, selections=None, error_on_missing=False): + if selections is None: + return self.select_params(selections=self._selections, + error_on_missing=error_on_missing) + + if isinstance(selections, str): + selections = selections.split(',') + + assert isinstance(selections, Sequence) + + distilled_selections = [] + for selection in selections: + if selection is None: + continue + if not isinstance(selection, str): + raise ValueError( + "Selection should be a str. Got %s instead."%( + type(selection)) + ) + selection = selection.strip().lower() + try: + if selection not in self._selector_params: + raise KeyError( + 'No selection "%s" available; valid selections are %s' + ' (case-insensitive).' + %(selection, self._selector_params.keys()) + ) + self._current_params.update(self._selector_params[selection]) + except KeyError: + if error_on_missing: + raise + distilled_selections.append(selection) + + self._selections = sorted(distilled_selections) + + return self._current_params
+ + + @property + def params(self): + return self._current_params + + @property + def param_selections(self): + return deepcopy(self._selections) + + def __iter__(self): + return iter(self._current_params) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if not recursiveEquality(self._selections, other._selections): + return False + if not recursiveEquality(self._regular_params, other._regular_params): + return False + if not recursiveEquality(self._selector_params, other._selector_params): + return False + return True + +
+[docs] + def update(self, p, selector=None, existing_must_match=False, extend=True): + try: + p = ParamSet(p) + except: + logging.error('Could not instantiate a ParamSet with `p` of type' + ' %s, value = %s', type(p), p) + raise + + if selector is None: + self._regular_params.update(p, existing_must_match=existing_must_match, extend=extend) + self._current_params.update(p, existing_must_match=existing_must_match, extend=extend) + for selection in self._selections: + if selection in self._selector_params.keys(): + self._selector_params[selection].update(p, existing_must_match=existing_must_match, extend=extend) + else: + assert isinstance(selector, str) + selector = selector.strip().lower() + if selector not in self._selector_params: + self._selector_params[selector] = ParamSet() + self._selector_params[selector].update(p, existing_must_match=existing_must_match, extend=extend) + + # Re-select current selectiosn in case the update modifies these + self.select_params(error_on_missing=False)
+ + +
+[docs] + def get(self, name, selector=None): + if selector is None: + return self._regular_params[name] + try: + return self._selector_params[selector][name] + except KeyError: + return self._regular_params[name]
+
+ + + +
+[docs] +def test_Param(): + """Unit tests for Param class""" + # pylint: disable=unused-variable + from scipy.interpolate import splrep + from pisa.utils.comparisons import ALLCLOSE_KW + + temp_dir = tempfile.mkdtemp() + + counter = [0] + def check_json(param, name=""): + fpath = join(temp_dir, "foo{}.json".format(counter[0])) + counter[0] += 1 + param.to_json(fpath) + loaded = Param.from_json(fpath) + if not ( + recursiveEquality(param, loaded) + and recursiveEquality(param.serializable_state, loaded.serializable_state) + ): + msg = ( + "{}: failed to save / load identical param:\n" + "original = {:s}\n" + "loaded = {:s}" + .format(name, str(param), str(loaded)) + ) + logging.error(msg) + raise ValueError(msg) + + def check_scaling(p0): + value_prescale = p0.value + # calculate rescaled value that is used by the minimizer, make sure + # the original value can be recovered + rval = p0._rescaled_value + p0._rescaled_value = rval + msg = ( + f"value of param {p0.name} after re-scaling is {p0.value}, " + f"should be {value_prescale}" + ) + assert np.isclose( + p0.value.m_as(p0.u), value_prescale.m_as(p0.u), **ALLCLOSE_KW + ), msg + # check nothing breaks when we go to the edges + p0.value = p0.range[0] + assert p0._rescaled_value == 0. + p0.value = p0.range[1] + assert p0._rescaled_value == 1. + p0.value = value_prescale + p0._rescaled_value = 1. + msg = ( + f"value of param {p0.name} after re-scaling is {p0.value}, " + f"should be {max(p0.range)}" + ) + assert np.isclose( + p0.value.m_as(p0.u), max(p0.range).m_as(p0.u), **ALLCLOSE_KW + ), msg + # We can afford rounding errors within the range, but we *cannot* afford them + # outside of the range, so we test that here explicitly. + assert p0.value.m_as(p0.u) <= max(p0.range).m_as(p0.u), msg + p0._rescaled_value = 0. + msg = ( + f"value of param {p0.name} after re-scaling is {p0.value}, " + f"should be {min(p0.range)}" + ) + assert np.isclose( + p0.value.m_as(p0.u), min(p0.range).m_as(p0.u), **ALLCLOSE_KW + ), msg + assert p0.value.m_as(p0.u) >= min(p0.range).m_as(p0.u), msg + + + try: + uniform = Prior(kind='uniform', llh_offset=1.5) + gaussian = Prior(kind='gaussian', mean=10*ureg.meter, stddev=1*ureg.meter) + param_vals = np.linspace(-10, 10, 100) * ureg.meter + llh_vals = (param_vals.magnitude)**2 + linterp_m = Prior(kind='linterp', param_vals=param_vals, llh_vals=llh_vals) + linterp_nounits = Prior(kind='linterp', param_vals=param_vals.m, + llh_vals=llh_vals) + + param_vals = np.linspace(-10, 10, 100) + llh_vals = param_vals**2 + knots, coeffs, deg = splrep(x=param_vals, y=llh_vals) + + spline = Prior(kind='spline', knots=knots, coeffs=coeffs, deg=deg) + + # Param with units, prior with compatible units + p0 = Param(name='c', value=5000*ureg.foot, prior=gaussian, + range=[-1, 2]*ureg.mile, is_fixed=False, is_discrete=False, + tex=r'\int{\rm c}') + check_scaling(p0) + check_json(p0, "p0") + + # Param with units, prior with compatible units, log-scaling behavior + p0 = Param(name='c', value=5000*ureg.foot, prior=gaussian, + # range entirely positive + range=[0.1, 2]*ureg.mile, is_fixed=False, is_discrete=False, + scales_as_log=True, tex=r'\int{\rm c}') + check_scaling(p0) + check_json(p0, "p0") + + # range entirely negative + p0 = Param(name='c', value=-5000*ureg.foot, prior=gaussian, + # range entirely positive + range=[-2, -0.1]*ureg.mile, is_fixed=False, is_discrete=False, + scales_as_log=True, tex=r'\int{\rm c}') + check_scaling(p0) + check_json(p0, "p0") + + # Test a pathological parameter with a range of (-0.5, 0.3) and try to set the + # rescaled value to the upper boundary. This used to cause an error in the past + # because (-0.5 + (0.3 -(-0.5)) * 1.) = 0.30000000000000004, which is above 0.3. + p0 = Param(name='a', value=0., prior=None, range=[-0.5, 0.3], + is_fixed=False, is_discrete=False) + check_scaling(p0) + check_json(p0, "p0") + + # Param with no units, prior with no units + p1 = Param(name='c', value=1.5, prior=spline, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') + check_json(p1, "p1") + + # Param with no units, prior with units + try: + p2 = Param(name='c', value=1.5, prior=linterp_m, + range=[1, 2], is_fixed=False, is_discrete=False, + tex=r'\int{\rm c}') + _ = p2.prior_llh + logging.debug(str(p2)) + logging.debug(str(linterp_m)) + logging.debug('p2.units: %s', p2.units) + logging.debug('p2.prior.units: %s', p2.prior.units) + except (TypeError, pint.DimensionalityError): + pass + else: + assert False + + # Param with units, prior with no units + try: + p2 = Param(name='c', value=1.5*ureg.meter, prior=spline, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') + _ = p2.prior_llh + except (ValueError, TypeError, AssertionError): + pass + else: + assert False + try: + p2 = Param(name='c', value=1.5*ureg.meter, prior=linterp_nounits, + range=[1, 2], is_fixed=False, is_discrete=False, + tex=r'\int{\rm c}') + _ = p2.prior_llh + except (ValueError, TypeError, AssertionError): + pass + else: + assert False + + # Param, range, prior with no units + p2 = Param(name='c', value=1.5, prior=linterp_nounits, + range=[1, 2], is_fixed=False, is_discrete=False, + tex=r'\int{\rm c}') + _ = p2.prior_llh + + # Param, prior with no units, range with units + try: + p2 = Param(name='c', value=1.5, prior=linterp_nounits, + range=[1, 2]*ureg.m, is_fixed=False, is_discrete=False, + tex=r'\int{\rm c}') + _ = p2.prior_llh + logging.debug(str(p2)) + logging.debug(str(linterp_nounits)) + logging.debug('p2.units: %s', p2.units) + logging.debug('p2.prior.units: %s', p2.prior.units) + except (ValueError, TypeError, AssertionError): + pass + else: + assert False + + nom0 = p2.nominal_value + val0 = p2.value + p2.value = p2.value * 1.01 + val1 = p2.value + assert p2.value != val0 + assert p2.value == val0 * 1.01 + assert p2.value != nom0 + assert p2.nominal_value == nom0 + + p2.reset() + assert p2.value == nom0 + assert p2.nominal_value == nom0 + + p2.value = val1 + p2.set_nominal_to_current_value() + assert p2.nominal_value == p2.value + assert p2.nominal_value == val1, \ + '%s should be %s' %(p2.nominal_value, val1) + + # Test deepcopy + param2 = deepcopy(p2) + assert param2 == p2 + + finally: + rmtree(temp_dir) + + logging.info('<< PASS : test_Param >>')
+ + + +# TODO: add tests for reset() and reset_all() methods +
+[docs] +def test_ParamSet(): + """Unit tests for ParamSet class""" + # pylint: disable=attribute-defined-outside-init + p0 = Param(name='c', value=1.5, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') + p1 = Param(name='a', value=2.5, prior=None, range=[1, 5], + is_fixed=True, is_discrete=False, tex=r'{\rm a}') + p2 = Param(name='b', value=1.5, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p3 = Param(name='deleteme', value=0.1, prior=None, range=[-1, 1], + is_fixed=True, is_discrete=False, tex=r'{\rm dm}') + + proto_param_set = ParamSet(p0, p1, p2) + + # Membership tests + assert p0 in proto_param_set + assert p1 in proto_param_set + assert p2 in proto_param_set + p0_mod = deepcopy(p0) + p0_mod.value = 1.6 + assert p0_mod not in proto_param_set + assert proto_param_set.issubset(proto_param_set) + assert proto_param_set <= proto_param_set + assert proto_param_set.issuperset(proto_param_set) + assert proto_param_set >= proto_param_set + assert not proto_param_set.isdisjoint(proto_param_set) + + param_set = ParamSet(p3, p0, p1, p2) + logging.debug(str((param_set.values))) + assert param_set >= proto_param_set + assert param_set > proto_param_set + assert proto_param_set <= param_set + assert proto_param_set < param_set + assert len(param_set.fixed) == 2 + del param_set['deleteme'] + assert param_set == proto_param_set + assert param_set[0].value == 1.5 + assert len(param_set) == 3 + assert 'deleteme' not in param_set.names + assert len(param_set.fixed) == 1 + logging.debug(str((param_set.values))) + + param_set = ParamSet(p3, p0, p1, p2) + assert len(param_set.fixed) == 2 + logging.debug(str((param_set.values))) + del param_set[0] + assert param_set == proto_param_set + assert param_set[0].value == 1.5 + assert len(param_set) == 3 + assert len(param_set.fixed) == 1 + assert 'deleteme' not in param_set.names + + # Test `remove`, `pop`, and `del` with param in any position + for idx in range(0, 4): + params = [p0, p1, p2] + if idx > len(params) - 1: + params.append(p3) + else: + params.insert(idx, p3) + + param_set = ParamSet(*params) + param_set.remove(p3) + assert param_set == proto_param_set + + param_set = ParamSet(*params) + p = param_set.pop(idx) + assert p == p3 + assert param_set == proto_param_set + + param_set = ParamSet(*params) + del param_set[idx] + assert param_set == proto_param_set + + # Test `insert` + for idx in range(3): + params = [p0, p1, p2] + param_set = ParamSet(*params) + + params.insert(idx, p3) + ref_param_set = ParamSet(*params) + + param_set.insert(idx, p3) + assert param_set == ref_param_set + + logging.debug(str((param_set.values))) + logging.debug(str((param_set[0]))) + param_set[0].value = 1 + logging.debug(str((param_set.values))) + + param_set = deepcopy(proto_param_set) + param_set.values = [1.5, 5, 1] + logging.debug(str((param_set.values))) + logging.debug(str((param_set.values[0]))) + logging.debug(str((param_set[0].value))) + + logging.debug(str(('priors:', param_set.priors))) + logging.debug(str(('names:', param_set.names))) + + logging.debug(str((param_set['a']))) + logging.debug(str((param_set['a'].value))) + logging.debug(str((param_set['a'].range))) + try: + param_set['a'].value = 33 + except Exception: + pass + else: + assert False, 'was able to set value outside of range' + logging.debug(str((param_set['a'].value))) + + logging.debug(str((param_set['c'].is_fixed))) + param_set['c'].is_fixed = True + logging.debug(str((param_set['c'].is_fixed))) + logging.debug(str((param_set.are_fixed))) + param_set.fix('a') + logging.debug(str((param_set.are_fixed))) + param_set.unfix('a') + logging.debug(str((param_set.are_fixed))) + param_set.unfix([0, 1, 2]) + logging.debug(str((param_set.are_fixed))) + + fixed_params = param_set.fixed + logging.debug(str((fixed_params.are_fixed))) + free_params = param_set.free + logging.debug(str((free_params.are_fixed))) + logging.debug(str((param_set.free.values))) + + logging.debug(str((param_set.values_hash))) + logging.debug(str((param_set.fixed.values_hash))) + logging.debug(str((param_set.free.values_hash))) + + logging.debug(str((param_set[0].state))) + logging.debug(str((param_set.hash))) + logging.debug(str((param_set.fixed.hash))) + logging.debug(str((param_set.free.hash))) + + logging.debug(str(('fixed:', param_set.fixed.names))) + logging.debug(str(('fixed, discrete:', param_set.fixed.discrete.names))) + logging.debug(str(('fixed, continuous:', + param_set.fixed.continuous.names))) + logging.debug(str(('free:', param_set.free.names))) + logging.debug(str(('free, discrete:', param_set.free.discrete.names))) + logging.debug(str(('free, continuous:', param_set.free.continuous.names))) + logging.debug(str(('continuous, free:', param_set.continuous.free.names))) + logging.debug(str(('free, continuous hash:', + param_set.free.continuous.values_hash))) + logging.debug(str(('continuous, free hash:', + param_set.continuous.free.values_hash))) + + logging.debug(str((param_set['b'].prior_llh))) + logging.debug(str((param_set.priors_llh))) + logging.debug(str((param_set.free.priors_llh))) + logging.debug(str((param_set.fixed.priors_llh))) + + logging.debug(str((param_set[0].prior_chi2))) + logging.debug(str((param_set.priors_chi2))) + + # Test that setting attributes works + e_prior = Prior(kind='gaussian', mean=10*ureg.GeV, stddev=1*ureg.GeV) + cz_prior = Prior(kind='uniform', llh_offset=-5) + reco_energy = Param(name='reco_energy', value=12*ureg.GeV, + prior=e_prior, range=[1, 80]*ureg.GeV, + is_fixed=False, is_discrete=False, + tex=r'E^{\rm reco}') + reco_coszen = Param(name='reco_coszen', value=-0.2, prior=cz_prior, + range=[-1, 1], is_fixed=True, is_discrete=False, + tex=r'\cos\,\theta_Z^{\rm reco}') + reco_coszen_fail = Param(name='reco_coszen_fail', value=-0.2, + prior=cz_prior, range=[-1, 1], is_fixed=True, + is_discrete=False, + tex=r'\cos\,\theta_Z^{\rm reco}') + reco_coszen2 = Param(name='reco_coszen', value=-0.9, prior=cz_prior, + range=[-1, 1], is_fixed=True, is_discrete=False, + tex=r'\cos\,\theta_Z^{\rm reco}') + param_set = ParamSet([reco_energy, reco_coszen]) + # Try setting a param with a differently-named param + try: + param_set.reco_coszen = reco_coszen_fail + except Exception: + pass + else: + assert False + + try: + param_set.reco_coszen = 30 + except Exception: + pass + else: + assert False + + param_set.reco_coszen = reco_coszen2 + assert param_set.reco_coszen is reco_coszen2 + assert param_set['reco_coszen'] is reco_coszen2 + assert param_set.reco_coszen.value == -0.9 + param_set.reco_coszen = -1.0 + assert param_set.reco_coszen.value == -1.0 + param_set.reco_coszen = -1 + assert param_set.reco_coszen.value == -1.0 + param_set.reco_coszen = ureg.Quantity("0.1 dimensionless") + assert param_set.reco_coszen.value == 0.1 == ureg.Quantity("0.1 dimensionless") + param_set.reco_energy = ureg.Quantity("10.1 GeV") + assert param_set.reco_energy.value == ureg.Quantity("10.1 GeV") + + # Test deepcopy + param_set2 = deepcopy(param_set) + logging.debug(str((param_set))) + logging.debug(str((param_set2))) + assert param_set2 == param_set + + # Test case added as a result of issue #543 + # https://github.com/IceCubeOpenSource/pisa/issues/543 + param_set = ParamSet( + [ + Param( + name="param0", + value=1*ureg.dimensionless, + prior=None, + range=(-1, 2)*ureg.dimensionless, + is_fixed=False, + ), + Param( + name="param1", + value=1, + prior=None, + range=(-1, 2), + is_fixed=False, + ), + Param( + name="param2", + value=1, + prior=None, + range=(-1.1, 1.1), + is_fixed=False, + ), + Param( + name="param3", + value=2.0*ureg.m/ureg.s, + prior=None, + range=(-1, 10)*ureg.cm/ureg.ns, + is_fixed=True, + ), + Param( + name="param4", + value=2.1*ureg.m/ureg.s, + prior=None, + range=(-1.1, 1.1)*ureg.cm/ureg.ns, + is_fixed=True, + ), + ] + ) + temp_dir = tempfile.mkdtemp() + try: + fpath = join(temp_dir, "foo.json") + param_set.to_json(fpath) + param_set2 = ParamSet.from_json(fpath) + finally: + rmtree(temp_dir) + assert recursiveEquality(param_set, param_set2) + assert recursiveEquality( + param_set.serializable_state, param_set2.serializable_state + ) + + logging.info('<< PASS : test_ParamSet >>')
+ + + +
+[docs] +def test_ParamSelector(): + """Unit tests for ParamSelector class""" + # pylint: disable=attribute-defined-outside-init, no-member, invalid-name + + p0 = Param(name='a', value=1.5, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') + p1 = Param(name='b', value=2.5, prior=None, range=[1, 5], + is_fixed=False, is_discrete=False, tex=r'{\rm a}') + p20 = Param(name='c', value=1.5, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p21 = Param(name='c', value=2.0, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p22 = Param(name='c', value=1.0, prior=None, range=[1, 2], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p30 = Param(name='d', value=-1.5, prior=None, range=[-2, -1], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p31 = Param(name='d', value=-2.0, prior=None, range=[-2, -1], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p40 = Param(name='e', value=-15, prior=None, range=[-20, -10], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p41 = Param(name='e', value=-20, prior=None, range=[-20, -10], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + ps30_40 = ParamSet(p30, p40) + param_selector = ParamSelector( + regular_params=[p0, p1], + selector_param_sets={'p20': p20, 'p21': p21, 'p22': p22, + 'p30_40': ps30_40, 'p31_41': [p31, p41]}, + selections=['p20', 'p30_40'] + ) + params = param_selector.params + assert params.a.value == 1.5 + assert params.b.value == 2.5 + assert params.c.value == 1.5 + assert params.d.value == -1.5 + assert params.e.value == -15 + + # Modify a param's value from the selector's params + params.c = 1.8 + # Make sure that took + assert params['c'].value == 1.8 + # Make sure the original param was also modified (i.e., that it's the exact + # object that was populated to the param_selector's params) + assert p20.value == 1.8 + + param_selector.select_params('p21') + # Make sure 'c' is changed using all ways to access 'c' + assert param_selector.params.c.value == 2.0 + assert param_selector.params['c'].value == 2.0 + assert params['c'].value == 2.0 + assert params.c.value == 2.0 + # Make sure original params have values previous to selection + assert p20.value == 1.8 + assert p21.value == 2.0 + + # Change the newly-selected param's value + params.c = 1.9 + # Make sure that took + assert params['c'].value == 1.9 + # Make sure the original param was also modified (i.e., that it's the exact + # object that was populated to the param_selector's params) + assert p21.value == 1.9 + + param_selector.select_params('p31_41') + assert params['d'].value == -2 + assert params['e'].value == -20 + params.e = -19.9 + assert p41.value == -19.9 + + # Test the update method + + p5 = Param(name='f', value=120, prior=None, range=[0, 1000], + is_fixed=True, is_discrete=False, tex=r'{\rm b}') + p60 = Param(name='g', value=-1, prior=None, range=[-10, 10], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p61 = Param(name='g', value=-2, prior=None, range=[-10, 10], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + + # Update with a "regular" param that doesn't exist yet + param_selector.update(p=p5, selector=None) + assert params.f.value == 120 + + # Update with a new "selector" param with selector that's currently + # selected + param_selector.update(p=p61, selector='p31_41') + assert params.g.value == -2 + p = param_selector.get(name='g', selector='p31_41') + assert p.value == -2 + + # Update with a new "selector" param with selector that's _not_ currently + # selected + param_selector.update(p=p60, selector='p30_40') + + # Selected param value shouldn't have changed + assert params.g.value == -2 + + # ... but the param should be in the object + p = param_selector.get(name='g', selector='p30_40') + assert p.value == -1 + + # ... and selecting it should now set current param to its value + param_selector.select_params('p30_40') + assert params.g.value == -1 + + # Double check that the other one didn't change + p = param_selector.get(name='g', selector='p31_41') + assert p.value == -2 + + # Use update to overwrite existing params... + + p402 = Param(name='e', value=-11, prior=None, range=[-20, -0], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + p412 = Param(name='e', value=-22, prior=None, range=[-100, 0], + is_fixed=False, is_discrete=False, tex=r'{\rm b}') + + # Update param that exists already and is selected + param_selector.update(p=p402, selector='p30_40') + assert params.e.value == -11 + + # Make sure original param wasn't overwritten (just not in param_selector) + assert p40.value == -15 + + # Update param that exists already but is not selected + param_selector.update(p=p412, selector='p31_41') + assert params.e.value == -11 + p = param_selector.get('e', selector='p31_41') + assert p.value == -22 + param_selector.select_params('p31_41') + assert params.e.value == -22 + + # Test deepcopy + param_selector2 = deepcopy(param_selector) + assert param_selector2 == param_selector + + logging.info('<< PASS : test_ParamSelector >>')
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_Param() + test_ParamSet() + test_ParamSelector() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/pipeline.html b/_modules/pisa/core/pipeline.html new file mode 100644 index 000000000..f6293ca44 --- /dev/null +++ b/_modules/pisa/core/pipeline.html @@ -0,0 +1,998 @@ + + + + + + pisa.core.pipeline — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.pipeline

+#! /usr/bin/env python
+
+"""
+Implementation of the Pipeline object, and a simple script to instantiate and
+run a pipeline (the outputs of which can be plotted and stored to disk).
+"""
+
+
+from __future__ import absolute_import
+
+from argparse import ArgumentParser
+from collections import OrderedDict
+from configparser import NoSectionError
+from copy import deepcopy
+from importlib import import_module
+from itertools import product
+from inspect import getsource
+import os
+from tabulate import tabulate
+import traceback
+
+import numpy as np
+
+from pisa import ureg
+from pisa.core.events import Data
+from pisa.core.map import Map, MapSet
+from pisa.core.param import ParamSet, DerivedParam
+from pisa.core.stage import Stage
+from pisa.core.container import ContainerSet
+from pisa.core.binning import MultiDimBinning
+from pisa.utils.config_parser import PISAConfigParser, parse_pipeline_config
+from pisa.utils.fileio import mkdir
+from pisa.utils.hash import hash_obj
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.profiler import profile
+
+
+__all__ = ["Pipeline", "test_Pipeline", "parse_args", "main"]
+
+__author__ = "J.L. Lanfranchi, P. Eller"
+
+__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+# TODO: should we check that the output binning of a previous stage produces
+# the inputs required by the current stage, or that the aggregate outputs that
+# got produced by previous stages (less those that got consumed in other
+# previous stages) hold what the current stage requires for inputs... or
+# should we not assume either will check out, since it's possible that the
+# stage requires sideband objects that are to be introduced at the top of the
+# pipeline by the user (and so there's no way to verify that all inputs are
+# present until we see what the user hands the pipeline as its top-level
+# input)? Alternatively, the lack of apparent inputs for a stage could show
+# a warning message. Or we just wait to see if it fails when the user runs the
+# code.
+
+# TODO: return an OrderedDict instead of a list if the user requests
+# intermediate results? Or simply use the `outputs` attribute of each stage to
+# dynamically access this?
+
+
+
+[docs] +class Pipeline(object): + """Instantiate stages according to a parsed config object; excecute + stages. + + Parameters + ---------- + config : string, OrderedDict, or PISAConfigParser + If string, interpret as resource location; send to the + `config_parser.parse_pipeline_config()` method to get a config + OrderedDict. If `OrderedDict`, use directly as pipeline configuration. + + profile : bool + Perform timings + + """ + + def __init__(self, config, profile=False): + if isinstance(config, (str, PISAConfigParser)): + config = parse_pipeline_config(config=config) + elif isinstance(config, OrderedDict): + pass + else: + raise TypeError( + "`config` passed is of type %s but must be string," + " PISAConfigParser, or OrderedDict" % type(config).__name__ + ) + + self.pisa_version = None + + self.name = config['pipeline']['name'] + self.data = ContainerSet(self.name) + self.detector_name = config['pipeline']['detector_name'] + self.output_binning = config['pipeline']['output_binning'] + self.output_key = config['pipeline']['output_key'] + + self._profile = profile + + self._stages = [] + self._config = config + self._init_stages() + self._source_code_hash = None + + # check in case someone decided to add a non-daemonflux parameter with daemon_ + # in it, which would potentially make penalty calculation incorrect + if "daemon_chi2" in self.params.names: + num_daemon_params = len([name for name in self.params.names if "daemon_" in name]) + assert num_daemon_params == self.params["daemon_params_len"].value.m_as("dimensionless"), \ + 'Incorrect number of parameters with "daemon_" in their name detected. Non-daemonflux parameters can not have "daemon_" in their name. Rename your non-daemonflux parameters which do not comly!' + + self._covariance_set = False + + def __repr__(self): + return self.tabulate(tablefmt="presto") + + def _repr_html_(self): + return self.tabulate(tablefmt="html") + +
+[docs] + def tabulate(self, tablefmt="plain"): + headers = ['stage number', 'name', 'calc_mode', 'apply_mode', 'has setup', 'has compute', 'has apply', '# fixed params', '# free params'] + colalign=["right"] + ["center"] * (len(headers) -1 ) + table = [] + for i, s in enumerate(self.stages): + table.append([i, s.__class__.__name__, s.calc_mode, s.apply_mode]) + table[-1].append(s.setup_function.__func__.__module__ == s.__class__.__module__) + table[-1].append(s.compute_function.__func__.__module__ == s.__class__.__module__) + table[-1].append(s.apply_function.__func__.__module__ == s.__class__.__module__) + table[-1] += [len(s.params.fixed), len(s.params.free)] + return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign)
+ + +
+[docs] + def report_profile(self, detailed=False): + for stage in self.stages: + stage.report_profile(detailed=detailed)
+ + + @property + def profile(self): + return self._profile + + @profile.setter + def profile(self, value): + for stage in self.stages: + stage.profile = value + self._profile = value + +
+[docs] + def index(self, stage_id): + """Return the index in the pipeline of `stage_id`. + + Parameters + ---------- + stage_id : string or int + Name of the stage, or stage number (0-indexed) + + Returns + ------- + idx : integer stage number (0-indexed) + + Raises + ------ + ValueError : if `stage_id` not in pipeline. + + """ + assert isinstance(stage_id, (int, str)) + for stage_num, stage in enumerate(self): + if stage_id in [stage_num, stage.stage_name]: + return stage_num + raise ValueError('No stage "%s" found in the pipeline.' % stage_id)
+ + + def __len__(self): + return len(self._stages) + + def __iter__(self): + return iter(self._stages) + + def __getitem__(self, idx): + if isinstance(idx, str): + return self.stages[self.index(idx)] + + if isinstance(idx, (int, slice)): + return self.stages[idx] + + raise ValueError( + 'Cannot locate stage "%s" in pipeline. Stages' + " available are %s." % (idx, self.stage_names) + ) + + def __getattr__(self, attr): + for stage in self: + if stage.stage_name == attr: + return stage + raise AttributeError( + '"%s" is neither a stage in this pipeline nor an attribute/property' + " of the `Pipeline` object." % attr + ) + + def _init_stages(self): + """Stage factory: Instantiate stages specified by self.config. + + Conventions required for this to work: + * Stage and service names must be lower-case + * Service implementations must be found at Python path + `pisa.stages.<stage_name>.<service_name>` + * `service` cannot be an instantiation argument for a service + + """ + stages = [] + for stage_num, item in enumerate( + self.config.items() + ): + try: + name, settings = item + + if isinstance(name, str): + if name == 'pipeline': + continue + + stage_name, service_name = name + + # old cfgs compatibility + if service_name.startswith('pi_'): + logging.warning(f"Old stage name `{service_name}` is automatically renamed to `{service_name.replace('pi_', '')}`. " + + "Please change your config in the future!") + service_name = service_name.replace('pi_', '') + + logging.debug( + "instantiating stage %s / service %s", stage_name, service_name + ) + + # Import service's module + logging.trace(f"Importing service module: {stage_name}.{service_name}") + try: + module_path = f"pisa.stages.{stage_name}.{service_name}" + module = import_module(module_path) + except: + logging.debug( + f"Module {stage_name}.{service_name} not found in PISA, trying " + "to import from external definition." + ) + module_path = f"{stage_name}.{service_name}" + module = import_module(module_path) + + # Get service class from module + service_cls = getattr(module, service_name) + + # Instantiate service + logging.trace( + "initializing stage.service %s.%s with settings %s" + % (stage_name, service_name, settings) + ) + try: + service = service_cls(**settings, profile=self._profile) + except Exception: + logging.error( + "Failed to instantiate stage.service %s.%s with settings %s", + stage_name, + service_name, + settings.keys(), + ) + raise + + if not isinstance(service, Stage): + raise TypeError( + 'Trying to create service "%s" for stage #%d (%s),' + " but object %s instantiated from class %s is not a" + " PISA Stage type but instead is of type %s." + % ( + service_name, + stage_num, + stage_name, + service, + service_cls, + type(service), + ) + ) + + stages.append(service) + + except: + logging.error( + "Failed to initialize stage #%d (stage=%s, service=%s).", + stage_num, + stage_name, + service_name, + ) + raise + + + + # set parameters with an identical name to the same object + # otherwise we get inconsistent behaviour when setting repeated params + # See Isues #566 and #648 + all_parans = self.params + self.update_params(all_parans, existing_must_match=True, extend=False) + + param_selections = set() + for service in stages: + param_selections.update(service.param_selections) + param_selections = sorted(param_selections) + + for stage in stages: + stage.select_params(param_selections, error_on_missing=False) + + self._stages = stages + + self.setup() + +
+[docs] + def get_outputs(self, output_binning=None, output_key=None): + """Get MapSet output""" + + + + self.run() + + if output_binning is None: + output_binning = self.output_binning + output_key = self.output_key + else: + assert(isinstance(output_binning, MultiDimBinning)) + + assert output_binning is not None + + self.data.representation = output_binning + + if isinstance(output_key, tuple): + assert len(output_key) == 2 + outputs = self.data.get_mapset(output_key[0], error=output_key[1]) + else: + outputs = self.data.get_mapset(output_key) + + return outputs
+ + +
+[docs] + def add_covariance(self, covmat): + """ + Incorporates covariance between parameters. + This is done by replacing relevant correlated parameters with "DerivedParams" + that depend on new parameters in an uncorrelated basis + + The parameters are all updated, but this doesn't add the new parameters in + So we go to the first stage we find that has one of the original parameters and manually add this in + + """ + if self._covariance_set: + logging.warn("Tried to add covariance matrix while one is already here.") + logging.fatal("Add larger covariance matrix rather than calling this multiple times") + + paramset = self.params + paramset.add_covariance(covmat) + self._covariance_set = True + + # this should go and replace existing stage parameters with the new ones + self.update_params(paramset) + self._add_rotated(paramset)
+ + + def _add_rotated(self, paramset:ParamSet, suppress_warning=False): + """ + Used to manually add in the new, rotated parameters + """ + # now we need to add in the new, rotated, parameters + # we want to add the new rotated parameters into a stage that had the correlated parameter + # it doesn't really matter where these uncorrelated parameters go, all stages + # that need to are already using those Derived Params + derived_name = "" + for param in paramset: + if isinstance(param, DerivedParam): + derived_name = param.name + depends = param.dependson + break + if len(depends.keys())==0: + if not suppress_warning: + logging.warn("Added covariance matrix but found no Derived Params") + return False + + success = True + # now we find where a derived parameter lives + for stage in self.stages: + included = stage._param_selector.params.names + if derived_name in included: + success = True + # TODO incorporate selector !! + stage._param_selector.update(paramset) + + return success + +
+[docs] + def run(self): + """Run the pipeline to compute""" + for stage in self.stages: + logging.debug(f"Working on stage {stage.stage_name}.{stage.service_name}") + stage.run()
+ + +
+[docs] + def setup(self): + """Setup (reset) all stages""" + self.data = ContainerSet(self.name) + for stage in self.stages: + stage.data = self.data + stage.setup()
+ + +
+[docs] + def update_params(self, params, existing_must_match=False, extend=False): + """Update params for the pipeline. + + Note that any param in `params` in excess of those that already exist + in the pipeline's stages will have no effect. + + Parameters + ---------- + params : ParamSet + Parameters to be updated + + existing_must_match : bool + extend : bool + + """ + for stage in self: + stage._param_selector.update(params, existing_must_match=existing_must_match, extend=extend)
+ + #stage.params.update(params, existing_must_match=existing_must_match, extend=extend) + +
+[docs] + def select_params(self, selections, error_on_missing=False): + """Select a set of alternate param values/specifications. + + Parameters + ----------- + selections : string or iterable of strings + error_on_missing : bool + + Raises + ------ + KeyError if `error_on_missing` is `True` and any of `selections` does + not exist in any stage in the pipeline. + + """ + successes = 0 + for stage in self: + try: + stage.select_params(selections, error_on_missing=True) + except KeyError: + pass + else: + successes += 1 + + if error_on_missing and successes == 0: + raise KeyError( + "None of the stages in this pipeline has all of the" + " selections %s available." % (selections,) + )
+ + + @property + def params(self): + """pisa.core.param.ParamSet : pipeline's parameters""" + params = ParamSet() + for stage in self: + params.extend(stage.params) + return params + + @property + def param_selections(self): + """list of strings : param selections collected from all stages""" + selections = set() + for stage in self: + selections.update(stage.param_selections) + return sorted(selections) + + @property + def stages(self)->'list[Stage]': + """list of Stage : stages in the pipeline""" + return [s for s in self] + + @property + def stage_names(self): + """list of strings : names of stages in the pipeline""" + return [s.stage_name for s in self] + + @property + def config(self): + """Deepcopy of the OrderedDict used to instantiate the pipeline""" + return deepcopy(self._config) + + @property + def source_code_hash(self): + """Hash for the source code of this object's class. + + Not meant to be perfect, but should suffice for tracking provenance of + an object stored to disk that were produced by a Stage. + + """ + if self._source_code_hash is None: + self._source_code_hash = hash_obj(getsource(self.__class__)) + return self._source_code_hash + + @property + def hash(self): + """int : Hash of the state of the pipeline. This hashes together a hash + of the Pipeline class's source code and a hash of the state of each + contained stage.""" + return hash_obj([self.source_code_hash] + [stage.hash for stage in self]) + + def __hash__(self): + return self.hash
+ + + +
+[docs] +def test_Pipeline(): + """Unit tests for Pipeline class""" + # pylint: disable=line-too-long + + # TODO: make a test config file with hierarchy AND material selector, + # uncomment / add in tests commented / removed below + + # + # Test: select_params and param_selections + # + + hierarchies = ["nh", "ih"] + #materials = ["iron", "pyrolite"] + materials = [] + + t23 = dict(ih=49.5 * ureg.deg, nh=42.3 * ureg.deg) + #YeO = dict(iron=0.4656, pyrolite=0.4957) + + # Instantiate with two pipelines: first has both nh/ih and iron/pyrolite + # param selectors, while the second only has nh/ih param selectors. + pipeline = Pipeline("settings/pipeline/example.cfg") # pylint: disable=redefined-outer-name + + #current_mat = "iron" + current_hier = "nh" + + for new_hier, new_mat in product(hierarchies, materials): + #_ = YeO[new_mat] + + assert pipeline.param_selections == sorted([current_hier]), str( + pipeline.param_selections + ) + assert pipeline.params.theta23.value == t23[current_hier], str( + pipeline.params.theta23 + ) + #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) + + # Select just the hierarchy + pipeline.select_params(new_hier) + assert pipeline.param_selections == sorted([new_hier]), str( + pipeline.param_selections + ) + assert pipeline.params.theta23.value == t23[new_hier], str( + pipeline.params.theta23 + ) + #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) + + ## Select just the material + #pipeline.select_params(new_mat) + #assert pipeline.param_selections == sorted([new_hier, new_mat]), str( + # pipeline.param_selections + #) + assert pipeline.params.theta23.value == t23[new_hier], str( + pipeline.params.theta23 + ) + #assert pipeline.params.YeO.value == YeO[new_mat], str(pipeline.params.YeO) + + # Reset both to "current" + pipeline.select_params([current_hier]) + assert pipeline.param_selections == sorted([current_hier]), str( + pipeline.param_selections + ) + assert pipeline.params.theta23.value == t23[current_hier], str( + pipeline.params.theta23 + )
+ + #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) + + ## Select both hierarchy and material + #pipeline.select_params([new_hier]) + #assert pipeline.param_selections == sorted([new_hier, new_mat]), str( + # pipeline.param_selections + #) + #assert pipeline.params.theta23.value == t23[new_hier], str( + # pipeline.params.theta23 + #) + #assert pipeline.params.YeO.value == YeO[new_mat], str(pipeline.params.YeO) + + #current_hier = new_hier + #current_mat = new_mat + + + +# ----- Most of this below cang go (?) --- + +
+[docs] +def parse_args(): + """Parse command line arguments if `pipeline.py` is called as a script.""" + parser = ArgumentParser( + # formatter_class=ArgumentDefaultsHelpFormatter, + description="""Instantiate and run a pipeline from a config file. + Optionally store the resulting distribution(s) and plot(s) to disk.""" + ) + + required = parser.add_argument_group("required arguments") + required.add_argument( + "-p", + "--pipeline", + metavar="CONFIGFILE", + type=str, + required=True, + help="File containing settings for the pipeline.", + ) + + parser.add_argument( + "-a", + "--arg", + metavar="SECTION ARG=VAL", + nargs="+", + action="append", + help="""Set config arg(s) manually. SECTION can be e.g. + "stage:<stage_name>" (like "stage:flux", "stage:reco", etc.), + "pipeline", and so forth. Arg values specified here take precedence + over those in the config file, but note that the sections specified + must already exist in the config file.""", + ) + parser.add_argument( + "--select", + metavar="PARAM_SELECTIONS", + nargs="+", + default=None, + help="""Param selectors (separated by spaces) to use to override any + defaults in the config file.""", + ) + parser.add_argument( + "--inputs", + metavar="FILE", + type=str, + help="""File from which to read inputs to be fed to the pipeline.""", + ) + parser.add_argument( + "--only-stage", + metavar="STAGE", + type=str, + help="""Test stage: Instantiate a single stage in the pipeline + specification and run it in isolation (as the sole stage in a + pipeline). If it is a stage that requires inputs, these can be + specified with the --infile argument, or else dummy stage input maps + (numpy.ones(...), matching the input binning specification) are + generated for testing purposes.""", + ) + parser.add_argument( + "--stop-after-stage", + metavar="STAGE", + help="""Instantiate a pipeline up to and including STAGE, but stop + there. Can specify a stage by index in the pipeline config (e.g., 0, 1, + etc.) or name (e.g., flux, osc, etc.)""", + ) + parser.add_argument( + "--outdir", + metavar="DIR", + type=str, + help="""Store all output files (data and plots) to this directory. + Directory will be created (including missing parent directories) if it + does not exist already. If no dir is provided, no outputs will be + saved.""", + ) + parser.add_argument( + "--intermediate", + action="store_true", + help="""Store all intermediate outputs, not just the final stage's + outputs.""", + ) + parser.add_argument("--pdf", action="store_true", help="""Produce pdf plot(s).""") + parser.add_argument("--png", action="store_true", help="""Produce png plot(s).""") + parser.add_argument( + "--annotate", action="store_true", help="""Annotate plots with counts per bin""" + ) + parser.add_argument( + "-v", + action="count", + default=None, + help="""Set verbosity level. Repeat for increased verbosity. -v is + info-level, -vv is debug-level and -vvv is trace-level output.""", + ) + args = parser.parse_args() + return args
+ + + +
+[docs] +def main(return_outputs=False): + """Run unit tests if `pipeline.py` is called as a script.""" + from pisa.utils.plotter import Plotter + + args = parse_args() + set_verbosity(args.v) + + # Even if user specifies an integer on command line, it comes in as a + # string. Try to convert to int (e.g. if `'1'` is passed to indicate the + # second stage), and -- if successful -- use this as `args.only_stage`. + # Otherwise, the string value passed will be used (e.g. `'osc'` could be + # passed). + try: + only_stage_int = int(args.only_stage) + except (ValueError, TypeError): + pass + else: + args.only_stage = only_stage_int + + if args.outdir: + mkdir(args.outdir) + else: + if args.pdf or args.png: + raise ValueError("No --outdir provided, so cannot save images.") + + # Most basic parsing of the pipeline config (parsing only to this level + # allows for simple strings to be specified as args for updating) + bcp = PISAConfigParser() + bcp.read(args.pipeline) + + # Update the config with any args specified on command line + if args.arg is not None: + for arg_list in args.arg: + if len(arg_list) < 2: + raise ValueError( + 'Args must be formatted as: "section arg=val". Got "%s"' + " instead." % " ".join(arg_list) + ) + section = arg_list[0] + remainder = " ".join(arg_list[1:]) + eq_split = remainder.split("=") + newarg = eq_split[0].strip() + value = ("=".join(eq_split[1:])).strip() + logging.debug( + 'Setting config section "%s" arg "%s" = "%s"', section, newarg, value + ) + try: + bcp.set(section, newarg, value) + except NoSectionError: + logging.error( + 'Invalid section "%s" specified. Must be one of %s', + section, + bcp.sections(), + ) + raise + + # Instantiate the pipeline + pipeline = Pipeline(bcp) # pylint: disable=redefined-outer-name + + if args.select is not None: + pipeline.select_params(args.select, error_on_missing=True) + + if args.only_stage is None: + stop_idx = args.stop_after_stage + try: + stop_idx = int(stop_idx) + except (TypeError, ValueError): + pass + if isinstance(stop_idx, str): + stop_idx = pipeline.index(stop_idx) + outputs = pipeline.get_outputs( + idx=stop_idx + ) # pylint: disable=redefined-outer-name + if stop_idx is not None: + stop_idx += 1 + indices = slice(0, stop_idx) + else: + assert args.stop_after_stage is None + idx = pipeline.index(args.only_stage) + stage = pipeline[idx] + indices = slice(idx, idx + 1) + + # Create dummy inputs if necessary + inputs = None + if hasattr(stage, "input_binning"): + logging.warning( + "Stage requires input, so building dummy" + " inputs of random numbers, with random state set to the input" + " index according to alphabetical ordering of input names and" + " filled in alphabetical ordering of dimension names." + ) + input_maps = [] + tmp = deepcopy(stage.input_binning) + alphabetical_binning = tmp.reorder_dimensions(sorted(tmp.names)) + for input_num, input_name in enumerate(sorted(stage.input_names)): + # Create a new map with all 3's; name according to the input + hist = np.full(shape=alphabetical_binning.shape, fill_value=3.0) + input_map = Map( + name=input_name, binning=alphabetical_binning, hist=hist + ) + + # Apply Poisson fluctuations to randomize the values in the map + input_map.fluctuate(method="poisson", random_state=input_num) + + # Reorder dimensions according to user's original binning spec + input_map.reorder_dimensions(stage.input_binning) + input_maps.append(input_map) + inputs = MapSet(maps=input_maps, name="ones", hash=1) + + outputs = stage.run(inputs=inputs) + + for stage in pipeline[indices]: + if not args.outdir: + break + stg_svc = stage.stage_name + "__" + stage.service_name + fbase = os.path.join(args.outdir, stg_svc) + if args.intermediate or stage == pipeline[indices][-1]: + stage.outputs.to_json(fbase + "__output.json.bz2") + + # also only plot if args intermediate or last stage + if args.intermediate or stage == pipeline[indices][-1]: + formats = OrderedDict(png=args.png, pdf=args.pdf) + if isinstance(stage.outputs, Data): + # TODO(shivesh): plots made here will use the most recent + # "pisa_weight" column and so all stages will have identical plots + # (one workaround is to turn on "memcache_deepcopy") + # TODO(shivesh): intermediate stages have no output binning + if stage.output_binning is None: + logging.debug("Skipping plot of intermediate stage %s", stage) + continue + outputs = stage.outputs.histogram_set( + binning=stage.output_binning, + nu_weights_col="pisa_weight", + mu_weights_col="pisa_weight", + noise_weights_col="pisa_weight", + mapset_name=stg_svc, + errors=True, + ) + + try: + for fmt, enabled in formats.items(): + if not enabled: + continue + my_plotter = Plotter( + stamp="Event rate", + outdir=args.outdir, + fmt=fmt, + log=False, + annotate=args.annotate, + ) + my_plotter.ratio = True + my_plotter.plot_2d_array( + outputs, fname=stg_svc + "__output", cmap="RdBu" + ) + except ValueError as exc: + logging.error( + "Failed to save plot to format %s. See exception" " message below", + fmt, + ) + traceback.format_exc() + logging.exception(exc) + logging.warning("I can't go on, I'll go on.") + + if return_outputs: + return pipeline, outputs
+ + + +if __name__ == "__main__": + pipeline, outputs = main(return_outputs=True) # pylint: disable=invalid-name +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/prior.html b/_modules/pisa/core/prior.html new file mode 100644 index 000000000..0204949b9 --- /dev/null +++ b/_modules/pisa/core/prior.html @@ -0,0 +1,641 @@ + + + + + + pisa.core.prior — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.prior

+"""
+Prior class for use in pisa.core.Param objects
+"""
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Iterable
+from collections import OrderedDict
+from os.path import isfile, join
+import tempfile
+
+import numpy as np
+from scipy.interpolate import splev, splrep, interp1d
+from scipy.optimize import fminbound
+
+import pint
+from pisa import ureg
+from pisa.utils.comparisons import (
+    interpret_quantity, isscalar, isunitless, recursiveEquality
+)
+from pisa.utils.fileio import from_file, to_file
+from pisa.utils.log import logging, set_verbosity
+
+
+__all__ = ['Prior', 'get_prior_bounds', 'test_Prior']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: uniform prior should take a constant, such that e.g. discrete parameter
+# values when run separately will return valid comparisons across the
+# discretely-chosen values (with different uniform priors)
+
+# TODO: use units "natively" (not via strings) internal to the object; only
+# serializing to json should convert to strings (and deserializing should
+# convert from strings to Units objects)
+
+# TODO: add a "to" and/or "ito" method for converting units akin to those
+# methods in Pint quantities.
+
+[docs] +class Prior(object): + """Prior information for a parameter. Defines the penalty (in + log-likelihood (llh)) for a parameter being at a given value (within the + prior's valid parameter range). Chi-squared penalties can also be returned + (but the *definition* of a prior here is always in terms of llh). + + Note that since this is a penalty, the more negative the prior's log + likelihood, the greater the penalty and the less likely the parameter's + value is. + + Valid parameters and properties of the object differ based upon what `kind` + of prior is specified. + + Parameters + ---------- + kind='uniform', llh_offset=... + Uniform prior, no preference for any position relative to the valid + range, which is taken to be [-inf, +inf] [x-units]. + + kind='gaussian', mean=..., stddev=... + Gaussian prior, defining log likelihood penalty for parameter being at + any particular position. Valid range is [-inf, +inf] [x-units]. + + kind='linterp', param_vals=..., llh_vals=... + Linearly-interpolated prior. Note that "corners" in linear + interpolation may cause difficulties for some minimizers. + + kind='spline', knots=..., coeffs=..., deg=... + Smooth spline interpolation. + + Properties + ---------- + kind + max_at + max_at_str + state + valid_range + + Additional properties are defined based on `kind`: + kind='uniform': + llh_offset + + kind='gaussian': + mean + stddev + + kind='linterp': + param_vals + llh_vals + + kind='spline': + knots + coeffs + deg + + Methods + ------- + chi2 + llh + + Notes + ----- + If the parameter the prior is being applied to has units, the prior's + "x"-values specification must have compatible units. + + If you implement a new prior, it ***must*** raise an exception if methods + `llh` or `chi2` are called with a parameter value outside the prior's valid + range, so subtle bugs aren't introduced that appear as an issue in e.g. the + minimizer. + + Examples + -------- + For spline prior: knots, coeffs, and deg can be found by, e.g., + scipy.interpolate.splrep; evaluation of spline priors is carried out + internally by scipy.interpolate.splev, so an exact match to the output of + the spline prior can be produced as follows: + + >>> from scipy.interpolate import splrep, splev + >>> # Generate sample points + >>> param_vals = np.linspace(-10, 10, 100) + >>> llh_vals = param_vals**2 + >>> # Define spline interpolant + >>> knots, coeffs, deg = splrep(param_vals, llh_vals) + >>> # Instantiate spline prior + >>> prior = Prior(kind='spline', knots=knots, coeffs=coeffs, deg=deg) + >>> # Generate sample points for interpolation + >>> param_upsamp = np.linspace(-10, 10, 1000) + >>> # Evaluation of spline using splev + >>> llh_upsamp = splev(param_upsamp, tck=(knots, coeffs, deg), ext=2) + >>> # Check that evaluation of spline matches call to prior.llh() + >>> all(prior.llh(param_upsamp) == llh_upsamp) + True + + """ + def __init__(self, kind, **kwargs): + self._state_attrs = ['kind'] #, 'units', 'valid_range'] + self.units = None + kind = kind.lower() if isinstance(kind, str) else kind + + self.chi2 = lambda x: -2*self.llh(x) + # Dispatch the correct initialization method + if kind in [None, 'none', 'uniform']: + self.__init_uniform(**kwargs) + elif kind == 'gaussian': + self.__init_gaussian(**kwargs) + elif kind == 'linterp': + self.__init_linterp(**kwargs) + elif kind == 'spline': + self.__init_spline(**kwargs) + elif kind == 'jeffreys': + self.__init_jeffreys(**kwargs) + else: + raise TypeError('Unknown Prior kind `' + str(kind) + '`') + + @property + def units_str(self): + if self.units is None: + return '' + return ' ' + format(ureg(self.units).units, '~').strip() + + def __str__(self): + return self._str(self) + + def __repr__(self): + return '<' + str(self.__class__) + ' ' + self.__str__() + '>' + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + return recursiveEquality(self.state, other.state) + + def __ne__(self, other): + return not self.__eq__(other) + + @property + def state(self): + state = OrderedDict() + for attr in self._state_attrs: + state[attr] = getattr(self, attr) + return state + + @property + def serializable_state(self): + return self.state + + def __init_uniform(self, llh_offset=0): + self._state_attrs.append('llh_offset') + self.kind = 'uniform' + self.llh_offset = llh_offset + def llh(x): + return 0.*self.__strip(x) + self.llh_offset + self.llh = llh + self.max_at = np.nan + self.max_at_str = 'no maximum' + self.valid_range = (-np.inf * ureg(self.units), + np.inf * ureg(self.units)) + self._str = lambda s: 'uniform prior, llh_offset=%s' %self.llh_offset + + def __init_jeffreys(self, A, B): + """Calculate jeffreys prior as defined in Sivia p.125""" + self.kind = 'jeffreys' + A = interpret_quantity(A, expect_sequence=False) + B = interpret_quantity(B, expect_sequence=False) + assert A.dimensionality == B.dimensionality + self._state_attrs.extend(['A', 'B']) + self.units = str(A.units) + B = B.to(A.units) + self.A = A + self.B = B + def llh(x): + x = self.__strip(self.__convert(x)) + A = self.__strip(self.A) + B = self.__strip(self.B) + return - np.log(x) + np.log(np.log(B)-np.log(A)) + self.llh = llh + self.max_at = self.A + self.max_at_str = self.__stringify(self.max_at) + self.valid_range = (self.A * ureg(self.units), + self.B * ureg(self.units)) + self._str = lambda s: "jeffreys' prior, range [%s,%s]"%(self.A, self.B) + + def __init_gaussian(self, mean, stddev): + mean = interpret_quantity(mean, expect_sequence=False) + stddev = interpret_quantity(stddev, expect_sequence=False) + assert mean.dimensionality == stddev.dimensionality + self._state_attrs.extend(['mean', 'stddev']) + self.kind = 'gaussian' + if isinstance(mean, ureg.Quantity): + self.units = str(mean.units) + assert isinstance(stddev, ureg.Quantity), \ + str(type(stddev)) + stddev = stddev.to(self.units) + self.mean = mean + self.stddev = stddev + def llh(x): + x = self.__strip(self.__convert(x)) + m = self.__strip(self.mean) + s = self.__strip(self.stddev) + return -(x-m)**2 / (2*s**2) + self.llh = llh + self.max_at = self.mean + self.max_at_str = self.__stringify(self.max_at) + self.valid_range = (-np.inf * ureg(self.units), + np.inf * ureg(self.units)) + self._str = lambda s: 'gaussian prior: stddev=%s%s, maximum at %s%s' \ + %(self.__stringify(self.stddev), self.units_str, + self.__stringify(self.mean), self.units_str) + + def __init_linterp(self, param_vals, llh_vals): + param_vals = interpret_quantity(param_vals, expect_sequence=True) + self._state_attrs.extend(['param_vals', 'llh_vals']) + self.kind = 'linterp' + if isinstance(param_vals, ureg.Quantity): + self.units = str(param_vals.units) + self.interp = interp1d(param_vals.magnitude, llh_vals, kind='linear', copy=True, + bounds_error=True, assume_sorted=False) + self.param_vals = param_vals + self.llh_vals = llh_vals + def llh(x): + x = self.__strip(self.__convert(x)) + return self.interp(x) + self.llh = llh + self.max_at = self.param_vals[self.llh_vals == np.max(self.llh_vals)] + self.max_at_str = ', '.join([self.__stringify(v) for v in self.max_at]) + self.valid_range = (np.min(self.param_vals) * ureg(self.units), + np.max(self.param_vals) * ureg(self.units)) + self._str = lambda s: 'linearly-interpolated prior: valid in [%s, %s]%s, maxima at (%s)%s' \ + %(self.__stringify(np.min(self.param_vals)), + self.__stringify(np.max(self.param_vals)), self.units_str, + self.max_at_str, self.units_str) + + def __init_spline(self, knots, coeffs, deg, units=None): + knots = interpret_quantity(knots, expect_sequence=True) + self._state_attrs.extend(['knots', 'coeffs', 'deg']) + self.kind = 'spline' + if isunitless(knots): + knots = ureg.Quantity(knots, units) + elif units is not None: + units = ureg.Unit(units) + assert knots.dimensionality == units.dimensionality + knots = knots.to(units) + + self.units = str(knots.units) + + self.knots = knots + self.coeffs = coeffs + self.deg = deg + def llh(x): + x = self.__strip(self.__convert(x)) + return splev(x, tck=(self.__strip(self.knots), coeffs, deg), ext=2) + self.llh = llh + self.max_at = fminbound( + func=self.__attach_units_to_args(self.chi2), + x1=np.min(self.__strip(self.knots)), + x2=np.max(self.__strip(self.knots)), + ) + if self.units is not None: + self.max_at = self.max_at * ureg(self.units) + self.max_at_str = self.__stringify(self.max_at) + self.valid_range = (np.min(self.knots) * ureg(self.units), + np.max(self.knots) * ureg(self.units)) + self._str = lambda s: 'spline prior: deg=%d, valid in [%s, %s]%s; max at %s%s' \ + %(self.deg, self.__stringify(np.min(self.knots)), + self.__stringify(np.max(self.knots)), self.units_str, + self.max_at_str, self.units_str) + + def __check_units(self, param_val): + if self.units is None: + if (isinstance(param_val, ureg.Quantity) + and param_val.dimensionality + != ureg.dimensionless.dimensionality): + raise TypeError('Passed a value with units (%s), but this' + ' prior has no units.' %param_val.units) + else: + if not isinstance(param_val, ureg.Quantity): + raise TypeError('Passed a value without units, but this prior' + ' has units (%s).' %self.units) + if param_val.dimensionality != ureg(self.units).dimensionality: + raise TypeError('Passed a value with units (%s);' + ' incompatible with prior units (%s)' + %(param_val.units, self.units)) + + def __convert(self, x): + if self.units is None: + if (isinstance(x, ureg.Quantity) + and x.dimensionality != ureg.dimensionless.dimensionality): + raise TypeError('No units on prior, so cannot understand' + ' passed value (with units): %s' %x) + return x + if not isinstance(x, ureg.Quantity): + raise TypeError('Units %s must be present on param values (got' + ' %s, type %s instead).' + % (self.units, x, type(x))) + return x.to(self.units) + + @staticmethod + def __strip(x): + if isinstance(x, ureg.Quantity): + return x.magnitude + return x + + def __stringify(self, x): + if self.units is not None: + x = x.to(self.units).magnitude + return format(x, '0.4e') + + # TODO: proper function wrapping, including @wraps decorator + def __attach_units_to_args(self, func): + def newfunc(*args): + if self.units is None: + return func(*args) + u = ureg(self.units) + unitized_args = tuple([u*arg for arg in args]) + return func(*unitized_args) + return newfunc
+ + + +
+[docs] +def get_prior_bounds(obj, param=None, stddev=1.0): + """Obtain confidence intervals for given number of + standard deviations from parameter prior. + + Parameters + ---------- + obj : Prior, string, or Mapping + if str, interpret as path from which to load a dict + if dict, can be: + template settings dict; must supply parameter name via `param` + params dict; must supply parameter name via `param` + prior dict + + param : Param + Name of parameter for which to get bounds; + necessary if `obj` is either template settings or params + + stddev : float or Iterable of floats + number of stddevs + + + Returns + ------- + bounds : OrderedDict + A dictionary mapping the passed `stddev` values to the corresponding + bounds + + """ + if isscalar(stddev): + stddev = [stddev] + elif isinstance(stddev, Iterable): + stddev = list(stddev) + + bounds = OrderedDict() + for s in stddev: + bounds[s] = [] + + if isinstance(obj, Prior): + prior = obj + else: + if isinstance(obj, str): + obj = from_file(obj) + if 'params' in obj: + obj = obj['params'] + if param is not None and param in obj: + obj = obj[param] + if 'prior' in obj: + obj = obj['prior'] + + prior = Prior(**obj) + + logging.debug('Getting confidence region from prior: %s', prior) + x0 = prior.valid_range[0] + x1 = prior.valid_range[1] + x = ureg.Quantity(np.linspace(x0, x1, 10000), prior.units) + chi2 = prior.chi2(x) + for (i, xval) in enumerate(x[:-1]): + for s in stddev: + chi2_level = s**2 + if chi2[i] > chi2_level and chi2[i+1] < chi2_level: + bounds[s].append(xval) + elif chi2[i] < chi2_level and chi2[i+1] > chi2_level: + bounds[s].append(x[i+1]) + return bounds
+ + + +# TODO enumerate all the cases rather than picking just a few. + +# pylint: disable=unused-variable +
+[docs] +def test_Prior(): + """Unit tests for Prior class""" + uniform = Prior(kind='uniform', llh_offset=1.5) + jeffreys = Prior(kind='jeffreys', A=2 * ureg.s, B=3 * ureg.ns) + gaussian = Prior(kind='gaussian', mean=10, stddev=1) + x = np.linspace(-10, 10, 100) + y = x**2 + linterp = Prior(kind='linterp', param_vals=x * ureg.meter / ureg.s, llh_vals=y) + param_vals = np.linspace(-10, 10, 100) + llh_vals = x**2 + knots, coeffs, deg = splrep(param_vals, llh_vals) + spline = Prior(kind='spline', knots=knots*ureg.foot, coeffs=coeffs, + deg=deg) + param_upsamp = np.linspace(-10, 10, 1000)*ureg.foot + llh_upsamp = splev(param_upsamp.magnitude, tck=(knots, coeffs, deg), ext=2) + assert all(spline.llh(param_upsamp) == llh_upsamp) + + # Asking for param value outside of range should fail + try: + linterp.llh(-1000*ureg.mile / ureg.s) + except ValueError: + pass + else: + assert False + + # Asking for value at quantity with invalid units + try: + linterp.chi2(-1000*ureg.km) + except pint.DimensionalityError: + pass + else: + assert False + + try: + spline.llh(-1000*ureg.meter) + except ValueError: + pass + else: + assert False + + try: + spline.chi2(+1000*ureg.meter) + except ValueError: + pass + else: + assert False + + # Asking for param value when units were used should fail + try: + spline.llh(10) + except TypeError: + pass + else: + assert False + + # ... or vice versa + try: + gaussian.llh(10*ureg.meter) + except pint.DimensionalityError: + pass + else: + assert False + + # -- Test writing to and reading from JSON files -- # + + with tempfile.TemporaryDirectory() as temp_dir: + for pri in [uniform, jeffreys, gaussian, linterp, spline]: + fpath = join(temp_dir, pri.kind + '.json') + try: + to_file(pri, fpath) + loaded = from_file(fpath, cls=Prior) + assert loaded == pri + except: + logging.error('prior %s failed', pri.kind) + if isfile(fpath): + logging.error( + 'contents of %s:\n%s', + fpath, open(fpath, 'r').read(), + ) + raise + + logging.info('<< PASS : test_Prior >>')
+ + + +if __name__ == '__main__': + set_verbosity(1) + test_Prior() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/stage.html b/_modules/pisa/core/stage.html new file mode 100644 index 000000000..7d1e9445f --- /dev/null +++ b/_modules/pisa/core/stage.html @@ -0,0 +1,525 @@ + + + + + + pisa.core.stage — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.stage

+"""
+Stage class designed to be inherited by PISA services, such that all basic
+functionality is built-in.
+"""
+
+from __future__ import absolute_import, division
+
+from copy import deepcopy
+from collections import OrderedDict
+from collections.abc import Mapping
+import inspect
+import numpy as np
+from tabulate import tabulate
+from time import time
+
+from pisa.core.binning import MultiDimBinning
+from pisa.core.container import ContainerSet
+from pisa.utils.log import logging
+from pisa.utils.format import arg_to_tuple
+from pisa.core.param import ParamSelector
+from pisa.utils.format import arg_str_seq_none
+from pisa.utils.hash import hash_obj
+
+
+__all__ = ["Stage"]
+__author__ = "Philipp Eller, J. Lanfranchi"
+
+
+
+[docs] +class Stage(): + """ + PISA stage base class. Should be used to implement PISA Pi stages + + Specialization should be done via subclasses. + + Parameters + ---------- + data : ContainerSet or None + object to be passed along + + params : ParamSelector, dict of ParamSelector kwargs, ParamSet, or object instantiable to ParamSet + + expected_params : list of strings + List containing required `params` names. + + debug_mode : None, bool, or string + If None, False, or empty string, the stage runs normally. + + Otherwise, the stage runs in debug mode. This disables caching (forcing + recomputation of any nominal transforms, transforms, and outputs). + Services that subclass from the `Stage` class can then implement + further custom behavior when this mode is set by reading the value of + the `self.debug_mode` attribute. + + calc_mode : pisa.core.binning.MultiDimBinning, str, or None + Specify in what to do the calculation + + apply_mode : pisa.core.binning.MultiDimBinning, str, or None + Specify in what to do the application + + """ + + def __init__( + self, + data=None, + params=None, + expected_params=None, + debug_mode=None, + error_method=None, + calc_mode=None, + apply_mode=None, + profile=False, + ): + # Allow for string inputs, but have to populate into lists for + # consistent interfacing to one or multiple of these things + expected_params = arg_str_seq_none(expected_params, "expected_params") + + module_path = self.__module__.split(".") + + self.stage_name = module_path[-2] + """Name of the stage (e.g. flux, osc, aeff, reco, pid, etc.""" + + self.service_name = module_path[-1] + """Name of the specific service implementing the stage.""" + + self.expected_params = expected_params + """The full set of parameters (by name) that must be present in + `params`""" + + self._source_code_hash = None + + """Last-computed outputs; None if no outputs have been computed yet.""" + + self._attrs_to_hash = set([]) + """Attributes of the stage that are to be included in its hash value""" + + self.full_hash = True + """Whether to do full hashing if true, otherwise do fast hashing""" + + param_selector_keys = set( + ["regular_params", "selector_param_sets", "selections"] + ) + if isinstance(params, Mapping) and set(params.keys()) == param_selector_keys: + self._param_selector = ParamSelector(**params) + elif isinstance(params, ParamSelector): + self._param_selector = params + else: + self._param_selector = ParamSelector(regular_params=params) + + # Get the params from the ParamSelector, validate, and set as the + # params object for this stage + p = self._param_selector.params + + self._check_params(p, p.has_derived) + self.validate_params(p) + self._params = p + + if bool(debug_mode): + self._debug_mode = debug_mode + else: + self._debug_mode = None + + + self.calc_mode = calc_mode + self.apply_mode = apply_mode + self.data = data + + self._error_method = error_method + + self.param_hash = None + + self.profile = profile + self.setup_times = [] + self.calc_times = [] + self.apply_times = [] + + + def __repr__(self): + return 'Stage "%s"'%(self.__class__.__name__) + + def report_profile(self, detailed=False): + for stage in self.stages: + stage.report_profile(detailed=detailed) + +
+[docs] + def report_profile(self, detailed=False): + def format(times): + tot = np.sum(times) + n = len(times) + ave = 0. if n == 0 else tot/n + return 'Total time %.5f s, n calls: %i, time/call: %.5f s'%(tot, n, ave) + + print(self.stage_name, self.service_name) + print('- setup: ', format(self.setup_times)) + if detailed: + print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.setup_times)])) + print('- calc: ', format(self.calc_times)) + if detailed: + print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.calc_times)])) + print('- apply: ', format(self.apply_times)) + if detailed: + print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.apply_times)]))
+ + +
+[docs] + def select_params(self, selections, error_on_missing=False): + """Apply the `selections` to contained ParamSet. + + Parameters + ---------- + selections : string or iterable + error_on_missing : bool + + """ + try: + self._param_selector.select_params(selections, error_on_missing=True) + except KeyError: + msg = "Not all of the selections %s found in this stage." % (selections,) + if error_on_missing: + # logging.error(msg) + raise + logging.trace(msg) + else: + logging.trace( + "`selections` = %s yielded `params` = %s" % (selections, self.params) + )
+ + + def _check_params(self, params, ignore_excess = False): + """Make sure that `expected_params` is defined and that exactly the + params specified in self.expected_params are present. + + An exception is made for having excess parameters if `ignore_excess` is True + This is useful for stages with `DerivedParams` that are used, but not explicitly accessed by the stage + """ + assert self.expected_params is not None + exp_p, got_p = set(self.expected_params), set(params.names) + if exp_p == got_p: + return + excess = got_p.difference(exp_p) + missing = exp_p.difference(got_p) + err_strs = [] + if len(missing) > 0: + err_strs.append("Missing params: %s" % ", ".join(sorted(missing))) + + + if len(excess) > 0: + if ignore_excess: #excess isn't a problem + if len(err_strs)==0: # return if there aren't any problems already + return + else: + err_strs.append("Excess params provided: %s" % ", ".join(sorted(excess))) + + raise ValueError( + "Expected parameters: %s;\n" % ", ".join(sorted(exp_p)) + + ";\n".join(err_strs) + ) + + + + @property + def params(self): + """Params""" + return self._params + + @property + def param_selections(self): + """Param selections""" + return sorted(deepcopy(self._param_selector.param_selections)) + + @property + def source_code_hash(self): + """Hash for the source code of this object's class. + + Not meant to be perfect, but should suffice for tracking provenance of + an object stored to disk that were produced by a Stage. + """ + if self._source_code_hash is None: + self._source_code_hash = hash_obj( + inspect.getsource(self.__class__), full_hash=self.full_hash + ) + return self._source_code_hash + + @property + def hash(self): + """Combines source_code_hash and params.hash for checking/tagging + provenance of persisted (on-disk) objects.""" + objects_to_hash = [self.source_code_hash, self.params.hash] + for attr in sorted(self._attrs_to_hash): + objects_to_hash.append( + hash_obj(getattr(self, attr), full_hash=self.full_hash) + ) + return hash_obj(objects_to_hash, full_hash=self.full_hash) + + def __hash__(self): + return self.hash + +
+[docs] + def include_attrs_for_hashes(self, attrs): + """Include a class attribute or attributes to be included when + computing hashes (for all that apply: nominal transforms, transforms, + and/or outputs). + + This is a convenience that allows some customization of hashing (and + hence caching) behavior without having to override the hash-computation + methods (`_derive_nominal_transforms_hash`, `_derive_transforms_hash`, + and `_derive_outputs_hash`). + + Parameters + ---------- + attrs : string or sequence thereof + Name of the attribute(s) to include for hashes. Each must be an + existing attribute of the object at the time this method is + invoked. + + """ + if isinstance(attrs, str): + attrs = [attrs] + + # Validate that all are actually attrs before setting any + for attr in attrs: + assert isinstance(attr, str) + if not hasattr(self, attr): + raise ValueError( + '"%s" not an attribute of the class; not' + " adding *any* of the passed attributes %s to" + " attrs to hash." % (attr, attrs) + ) + + # Include the attribute names + for attr in attrs: + self._attrs_to_hash.add(attr)
+ + + @property + def debug_mode(self): + """Read-only attribute indicating whether or not the stage is being run + in debug mode. None indicates non-debug mode, while non-none value + indicates a debug mode.""" + return self._debug_mode + +
+[docs] + def validate_params(self, params): # pylint: disable=unused-argument, no-self-use + """Override this method to test if params are valid; e.g., check range + and dimensionality. Invalid params should be indicated by raising an + exception; no value should be returned.""" + return
+ + + @property + def error_method(self): + """Read-only attribute indicating whether or not the stage will compute + errors for its transforms and outputs (whichever is applicable). Errors + on inputs are propagated regardless of this setting.""" + return self._error_method + + @property + def is_map(self): + return self.data.is_map + +
+[docs] + def setup(self): + + # check that data is a ContainerSet (downstream modules assume this) + if self.data is not None: + if not isinstance(self.data, ContainerSet): + raise TypeError("`data` must be a `pisa.core.container.ContainerSet`") + + if self.calc_mode is not None: + self.data.representation = self.calc_mode + + # call the user-defined setup function + if self.profile: + start_t = time() + self.setup_function() + end_t = time() + self.setup_times.append(end_t - start_t) + else: + self.setup_function() + + # invalidate param hash: + self.param_hash = -1
+ + +
+[docs] + def setup_function(self): + """Implement in services (subclasses of Stage)""" + pass
+ + +
+[docs] + def compute(self): + + # simplest caching algorithm: don't compute if params didn't change + new_param_hash = self.params.values_hash + if new_param_hash == self.param_hash: + logging.trace("cached output") + return + + if self.calc_mode is not None: + self.data.representation = self.calc_mode + + if self.profile: + start_t = time() + self.compute_function() + end_t = time() + self.calc_times.append(end_t - start_t) + else: + self.compute_function() + self.param_hash = new_param_hash
+ + +
+[docs] + def compute_function(self): + """Implement in services (subclasses of Stage)""" + pass
+ + +
+[docs] + def apply(self): + + if self.apply_mode is not None: + self.data.representation = self.apply_mode + + if self.profile: + start_t = time() + self.apply_function() + end_t = time() + self.apply_times.append(end_t - start_t) + else: + self.apply_function()
+ + + +
+[docs] + def apply_function(self): + """Implement in services (subclasses of Stage)""" + pass
+ + +
+[docs] + def run(self): + self.compute() + self.apply() + return None
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/core/translation.html b/_modules/pisa/core/translation.html new file mode 100644 index 000000000..c62a778eb --- /dev/null +++ b/_modules/pisa/core/translation.html @@ -0,0 +1,1055 @@ + + + + + + pisa.core.translation — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.core.translation

+# pylint: disable=unsubscriptable-object, too-many-function-args, not-callable, unexpected-keyword-arg, no-value-for-parameter, too-many-boolean-expressions
+
+"""
+Module for data representation translation methods
+"""
+
+# TODO:
+#    - right now we distinguish on histogramming/lookup for scalars (normal) or array, which means that instead
+#    of just a single value per e.g. histogram bin, there can be an array of values
+#    This should be made more general that one function can handle everything...since now we have several
+#    functions doing similar things. not very pretty
+
+from __future__ import absolute_import, print_function, division
+
+from copy import deepcopy
+
+import numpy as np
+from numba import guvectorize
+
+import numba
+from numba import njit, prange
+# When binnings are fully regular, we can use this for super speed
+import fast_histogram as fh
+from collections.abc import Iterable
+
+from concurrent.futures import ThreadPoolExecutor
+
+from pisa import FTYPE, TARGET, PISA_NUM_THREADS
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.utils.comparisons import recursiveEquality
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.numba_tools import myjit
+from pisa.utils import vectorizer
+from pisa.utils.profiler import line_profile, profile
+
+__all__ = [
+    'resample',
+    'histogram',
+    'lookup',
+    'find_index',
+    'find_index_unsafe',
+    'test_histogram',
+    'test_find_index',
+]
+
+
+FX = 'f4' if FTYPE == np.float32 else 'f8'
+
+
+# --------- resampling ------------
+
+
+[docs] +def resample(weights, old_sample, old_binning, new_sample, new_binning): + """Resample binned data with a given binning into any arbitrary + `new_binning` + + Parameters + ---------- + weights : np.ndarray + old_sample : list of np.ndarray + old_binning : PISA MultiDimBinning + new_sample : list of np.ndarray + new_binning : PISA MultiDimBinning + + Returns + ------- + new_hist_vals + + """ + if old_binning.names != new_binning.names: + raise ValueError(f'cannot translate betwen {old_binning} and {new_binning}') + + # This is a two step process: first histogram the weights into the new binning + # and keep the flat_hist_counts + flat_hist = histogram_np(old_sample, weights, new_binning, apply_weights=True) + flat_hist_counts = histogram_np(old_sample, weights, new_binning, apply_weights=False) + + with np.errstate(divide='ignore', invalid='ignore'): + flat_hist /= flat_hist_counts + flat_hist = np.nan_to_num(flat_hist) + + # now do the inverse, a lookup of hist vals at `new_sample` points + new_hist_vals = lookup(new_sample, weights, old_binning) + + # Now, for bin we have 1 or less counts, take the lookedup value instead: + mask = flat_hist_counts > 1 + new_hist_vals[mask] = flat_hist[mask] + + return new_hist_vals
+ + + +# --------- histogramming methods --------------- + +
+[docs] +def histogram(sample, weights, binning, averaged, apply_weights=True): + """Histogram `sample` points, weighting by `weights`, according to `binning`. + + Parameters + ---------- + sample : list of np.ndarray + + weights : np.ndarray + + binning : PISA MultiDimBinning + + averaged : bool + If True, the histogram entries are averages of the numbers that end up + in a given bin. This for example must be used when oscillation + probabilities are translated, otherwise we end up with + probability*count per bin + + apply_weights : bool + wether to use weights or not + + """ + if not isinstance(binning, MultiDimBinning): + raise ValueError("Binning should be a PISA MultiDimBinning") + + if binning.is_irregular or not binning.is_lin: + flat_hist = histogram_np(sample, weights, binning, apply_weights=True) + else: + flat_hist = histogram_fh(sample, weights, binning, apply_weights=True) + if averaged: + if binning.is_irregular or not binning.is_lin: + flat_hist_counts = histogram_np(sample, weights, binning, + apply_weights=False) + else: + flat_hist_counts = histogram_fh(sample, weights, binning, + apply_weights=False) + with np.errstate(divide='ignore', invalid='ignore'): + flat_hist /= flat_hist_counts + flat_hist = np.nan_to_num(flat_hist) + + return flat_hist
+ + +def _threaded_fh_histogramdd(sample, weights, bins, bin_range): + if not TARGET == "parallel": + return fh.histogramdd(sample=sample, weights=weights, bins=bins, range=bin_range) + + splits = PISA_NUM_THREADS + + with ThreadPoolExecutor(max_workers=splits) as pool: + chunk = len(sample[0]) // splits + chunked_sample = [] + if weights is not None: + chunked_weights = [] + ndim = len(sample) + for i in range(splits): + one_chunk = tuple(sample[j][i * chunk:(i+1) * chunk] for j in range(ndim)) + chunked_sample.append(one_chunk) + if weights is not None: + chunked_weights.append(weights[i * chunk:(i+1) * chunk]) + if weights is not None: + f = lambda s, w: fh.histogramdd(s, weights=w, bins=bins, range=bin_range) + results = pool.map(f, chunked_sample, chunked_weights) + else: + f = lambda s: fh.histogramdd(s, weights=None, bins=bins, range=bin_range) + results = pool.map(f, chunked_sample) + results = sum(results) + return results + +def histogram_fh(sample, weights, binning, apply_weights=True): # pylint: disable=missing-docstring + """Helper function for fast_histogram historams. + + This requires binnings to be fully regular and linear. + """ + + if binning.is_irregular or not binning.is_lin: + raise ValueError("Binning should be linearly-regular to use the fast_histogram library.") + ranges = [b.domain.m for b in binning] + bins = binning.num_bins + if isinstance(sample, np.ndarray): + if sample.ndim == 1: + _sample = (sample,) + else: + _sample = tuple(s for s in sample.T) + elif isinstance(sample, Iterable): + _sample = tuple(s for s in sample) + else: + raise ValueError("Sample should be either an (N, D) array, or an (N,) array, " + "or a (D, N) array-like.") + + if weights is not None and weights.ndim == 2: + # that means it's 1-dim data instead of scalars + hists = [] + for i in range(weights.shape[1]): + w = weights[:, i] if apply_weights else None + hist = _threaded_fh_histogramdd(sample=_sample, weights=w, bins=bins, bin_range=ranges) + hists.append(hist.ravel()) + flat_hist = np.stack(hists, axis=1) + else: + w = weights if apply_weights else None + + hist = _threaded_fh_histogramdd(sample=_sample, weights=w, bins=bins, bin_range=ranges) + flat_hist = hist.ravel() + return flat_hist.astype(FTYPE) + +def histogram_np(sample, weights, binning, apply_weights=True): # pylint: disable=missing-docstring + """helper function for numpy historams""" + + bin_edges = [edges.magnitude for edges in binning.bin_edges] + if weights is not None and weights.ndim == 2: + # that means it's 1-dim data instead of scalars + hists = [] + for i in range(weights.shape[1]): + w = weights[:, i] if apply_weights else None + hist, _ = np.histogramdd(sample=sample, weights=w, bins=bin_edges) + hists.append(hist.ravel()) + flat_hist = np.stack(hists, axis=1) + else: + w = weights if apply_weights else None + hist, _ = np.histogramdd(sample=sample, weights=w, bins=bin_edges) + flat_hist = hist.ravel() + return flat_hist.astype(FTYPE) + + +# ---------- Lookup methods --------------- + +
+[docs] +def lookup(sample, flat_hist, binning): + """The inverse of histograming: Extract the histogram values at `sample` + points. + + Parameters + ---------- + sample : num_dims list of length-num_samples np.ndarray + Points at which to find histogram's values + flat_hist : np.ndarray + Histogram values + binning : num_dims MultiDimBinning + Histogram's binning + + Returns + ------- + hist_vals : len-num_samples np.ndarray + + Notes + ----- + Handles up to 3D. + + """ + + if not isinstance(binning, MultiDimBinning): + raise ValueError("Binning should be a PISA MultiDimBinning") + + assert binning.num_dims <= 3, 'can only do up to 3D at the moment' + bin_edges = [edges.magnitude for edges in binning.bin_edges] + + if not binning.is_irregular and binning.is_lin: + if flat_hist.ndim == 1: + hist_vals = np.zeros_like(sample[0]) + if binning.num_dims == 1: + lookup_regular_1d( + sample[0], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + out=hist_vals, + ) + elif binning.num_dims == 2: + lookup_regular_2d( + sample[0], + sample[1], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + ymin=bin_edges[1][0], + ymax=bin_edges[1][-1], + ny=len(bin_edges[1]) - 1, + out=hist_vals, + ) + elif binning.num_dims == 3: + lookup_regular_3d( + sample[0], + sample[1], + sample[2], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + ymin=bin_edges[1][0], + ymax=bin_edges[1][-1], + ny=len(bin_edges[1]) - 1, + zmin=bin_edges[2][0], + zmax=bin_edges[2][-1], + nz=len(bin_edges[2]) - 1, + out=hist_vals, + ) + + return hist_vals + elif flat_hist.ndim == 2: + hist_shape = (sample[0].size, flat_hist.shape[1]) + hist_vals = np.zeros(hist_shape, dtype=FTYPE) + if binning.num_dims == 1: + lookup_regular_1d_array( + sample[0], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + out=hist_vals, + ) + elif binning.num_dims == 2: + lookup_regular_2d_array( + sample[0], + sample[1], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + ymin=bin_edges[1][0], + ymax=bin_edges[1][-1], + ny=len(bin_edges[1]) - 1, + out=hist_vals, + ) + elif binning.num_dims == 3: + lookup_regular_3d_array( + sample[0], + sample[1], + sample[2], + flat_hist, + xmin=bin_edges[0][0], + xmax=bin_edges[0][-1], + nx=len(bin_edges[0]) - 1, + ymin=bin_edges[1][0], + ymax=bin_edges[1][-1], + ny=len(bin_edges[1]) - 1, + zmin=bin_edges[2][0], + zmax=bin_edges[2][-1], + nz=len(bin_edges[2]) - 1, + out=hist_vals, + ) + + return hist_vals + else: + raise NotImplementedError() + + if flat_hist.ndim == 1: + #print 'looking up 1D' + + hist_vals = np.zeros_like(sample[0]) + + if binning.num_dims == 1: + lookup_vectorized_1d( + sample[0], + flat_hist, + bin_edges[0], + out=hist_vals, + ) + elif binning.num_dims == 2: + lookup_vectorized_2d( + sample[0], + sample[1], + flat_hist, + bin_edges[0], + bin_edges[1], + out=hist_vals, + ) + elif binning.num_dims == 3: + lookup_vectorized_3d( + sample[0], + sample[1], + sample[2], + flat_hist, + bin_edges[0], + bin_edges[1], + bin_edges[2], + out=hist_vals, + ) + elif flat_hist.ndim == 2: + #print 'looking up ND' + hist_vals = np.zeros((sample[0].size, flat_hist.shape[1]), dtype=FTYPE) + + if binning.num_dims == 1: + lookup_vectorized_1d_arrays( + sample[0], + flat_hist, + bin_edges[0], + out=hist_vals, + ) + elif binning.num_dims == 2: + lookup_vectorized_2d_arrays( + sample[0], + sample[1], + flat_hist, + bin_edges[0], + bin_edges[1], + out=hist_vals, + ) + elif binning.num_dims == 3: + lookup_vectorized_3d_arrays( + sample[0], + sample[1], + sample[2], + flat_hist, + bin_edges[0], + bin_edges[1], + bin_edges[2], + out=hist_vals, + ) + else: + raise NotImplementedError() + + return hist_vals
+ + + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_1d(x, flat_hist, xmin, xmax, nx, out): + normx = nx / (xmax - xmin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + ix = (int)((x[idx] - xmin) * normx) + out[idx] = flat_hist[ix] + continue + out[idx] = 0. + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_2d(x, y, flat_hist, xmin, xmax, nx, ymin, ymax, ny, out): + normx = nx / (xmax - xmin) + normy = ny / (ymax - ymin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + if y[idx] >= ymin and y[idx] < ymax: + ix = (int)((x[idx] - xmin) * normx) + iy = (int)((y[idx] - ymin) * normy) + out[idx] = flat_hist[iy + ny*ix] + continue + out[idx] = 0. + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_3d(x, y, z, flat_hist, xmin, xmax, nx, ymin, ymax, ny, + zmin, zmax, nz, out): + normx = nx / (xmax - xmin) + normy = ny / (ymax - ymin) + normz = nz / (zmax - zmin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + if y[idx] >= ymin and y[idx] < ymax: + if z[idx] >= zmin and z[idx] < zmax: + ix = (int)((x[idx] - xmin) * normx) + iy = (int)((y[idx] - ymin) * normy) + iz = (int)((z[idx] - zmin) * normz) + out[idx] = flat_hist[iz + nz*iy + nz*ny*ix] + continue + out[idx] = 0. + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_1d_array(x, flat_hist, xmin, xmax, nx, out): + normx = nx / (xmax - xmin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + ix = (int)((x[idx] - xmin) * normx) + for d in range(flat_hist.shape[1]): + out[idx][d] = flat_hist[ix][d] + continue + for d in range(flat_hist.shape[1]): + out[idx][d] = 0. + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_2d_array(x, y, flat_hist, xmin, xmax, nx, ymin, ymax, ny, out): + normx = nx / (xmax - xmin) + normy = ny / (ymax - ymin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + if y[idx] >= ymin and y[idx] < ymax: + ix = (int)((x[idx] - xmin) * normx) + iy = (int)((y[idx] - ymin) * normy) + for d in range(flat_hist.shape[1]): + out[idx][d] = flat_hist[iy + ny*ix][d] + continue + for d in range(flat_hist.shape[1]): + out[idx][d] = 0. + +@njit(parallel=True if TARGET == "parallel" else False) +def lookup_regular_3d_array(x, y, z, flat_hist, xmin, xmax, nx, ymin, ymax, ny, + zmin, zmax, nz, out): + normx = nx / (xmax - xmin) + normy = ny / (ymax - ymin) + normz = nz / (zmax - zmin) + for idx in prange(len(out)): + if x[idx] >= xmin and x[idx] < xmax: + if y[idx] >= ymin and y[idx] < ymax: + if z[idx] >= zmin and z[idx] < zmax: + ix = (int)((x[idx] - xmin) * normx) + iy = (int)((y[idx] - ymin) * normy) + iz = (int)((z[idx] - zmin) * normz) + for d in range(flat_hist.shape[1]): + out[idx][d] = flat_hist[iz + nz*iy + nz*ny*ix][d] + continue + for d in range(flat_hist.shape[1]): + out[idx][d] = 0. + +@myjit +def find_index(val, bin_edges): + """Find index in binning for `val`. If `val` is below binning range or is + nan, return -1; if `val` is above binning range, return num_bins. Edge + inclusivity/exclusivity is defined as .. :: + + [ bin 0 ) [ bin 1 ) ... [ bin num_bins-1 ] + + Using these indices to produce histograms should yield identical results + (ignoring underflow and overflow, which `find_index` has) that are + equivalent to those produced by ``numpy.histogramdd``. + + Parameters + ---------- + val : scalar + Value for which to find bin index + + bin_edges : 1d numpy ndarray of 2 or more scalars + Must be monotonically increasing, and all bins are assumed to be + adjacent + + Returns + ------- + bin_idx : int in [-1, num_bins] + -1 is returned for underflow or if `val` is nan. `num_bins` is returned + for overflow. Otherwise, for bin_edges[0] <= `val` <= bin_edges[-1], + 0 <= `bin_idx` <= num_bins - 1 + + """ + + num_edges = len(bin_edges) + num_bins = num_edges - 1 + assert num_bins >= 1, 'bin_edges must define at least one bin' + + underflow_idx = -1 + overflow_idx = num_bins + + if val >= bin_edges[0]: + if val <= bin_edges[-1]: + bin_idx = find_index_unsafe(val, bin_edges) + # Paranoia: In case of unforseen numerical issues, force clipping of + # returned bin index to [0, num_bins - 1] (any `val` outside of binning + # is already handled, so this should be valid) + bin_idx = min(max(0, bin_idx), num_bins - 1) + else: + bin_idx = overflow_idx + else: # either value is below first bin or is NaN + bin_idx = underflow_idx + + return bin_idx + + +@myjit +def find_index_unsafe(val, bin_edges): + """Find bin index of `val` within binning defined by `bin_edges`. + + Validity of `val` and `bin_edges` is not checked. + + Parameters + ---------- + val : scalar + Assumed to be within range of `bin_edges` (including lower and upper + bin edges) + bin_edges : array + + Returns + ------- + index + + See also + -------- + find_index : includes bounds checking and handling of special cases + + """ + # Initialize to point to left-most edge + left_edge_idx = 0 + + # Initialize to point to right-most edge + right_edge_idx = len(bin_edges) - 1 + + while left_edge_idx < right_edge_idx: + # See where value falls w.r.t. an edge ~midway between left and right edges + # ``>> 1``: integer division by 2 (i.e., divide w/ truncation) + test_edge_idx = (left_edge_idx + right_edge_idx) >> 1 + + # ``>=``: bin left edges are inclusive + if val >= bin_edges[test_edge_idx]: + left_edge_idx = test_edge_idx + 1 + else: + right_edge_idx = test_edge_idx + + # break condition of while loop is that left_edge_idx points to the + # right edge of the bin that `val` is inside of; that is one more than + # that _bin's_ index + return left_edge_idx - 1 + + +@guvectorize( + [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:])'], + '(), (j), (k) -> ()', + target='cpu', +) +def lookup_vectorized_1d( + sample, + flat_hist, + bin_edges, + weights, +): + """Vectorized gufunc to perform the lookup""" + x = sample[0] + if (bin_edges[0] <= x <= bin_edges[-1]): + idx = find_index_unsafe(x, bin_edges) + weights[0] = flat_hist[idx] + else: # outside of binning or nan + weights[0] = 0. + +@guvectorize( + [f'({FX}[:], {FX}[:, :], {FX}[:], {FX}[:])'], + '(), (j, d), (k) -> (d)', + target='cpu', +) +def lookup_vectorized_1d_arrays( + sample, + flat_hist, + bin_edges, + weights, +): + """Vectorized gufunc to perform the lookup""" + x = sample[0] + if (bin_edges[0] <= x <= bin_edges[-1]): + idx = find_index_unsafe(x, bin_edges) + for i in range(weights.size): + weights[i] = flat_hist[idx, i] + else: # outside of binning or nan + for i in range(weights.size): + weights[i] = 0. + +@guvectorize( + [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], + '(), (), (j), (k), (l) -> ()', + target='cpu', +) +def lookup_vectorized_2d( + sample_x, + sample_y, + flat_hist, + bin_edges_x, + bin_edges_y, + weights, +): + """Vectorized gufunc to perform the lookup""" + x = sample_x[0] + y = sample_y[0] + if ( + x >= bin_edges_x[0] + and x <= bin_edges_x[-1] + and y >= bin_edges_y[0] + and y <= bin_edges_y[-1] + ): + idx_x = find_index_unsafe(x, bin_edges_x) + idx_y = find_index_unsafe(y, bin_edges_y) + idx = idx_x * (len(bin_edges_y) - 1) + idx_y + weights[0] = flat_hist[idx] + else: # outside of binning or nan + weights[0] = 0. + + +@guvectorize( + [f'({FX}[:], {FX}[:], {FX}[:, :], {FX}[:], {FX}[:], {FX}[:])'], + '(), (), (j, d), (k), (l) -> (d)', + target='cpu', +) +def lookup_vectorized_2d_arrays( + sample_x, + sample_y, + flat_hist, + bin_edges_x, + bin_edges_y, + weights, +): + """Vectorized gufunc to perform the lookup while flat hist and weights have + both a second dimension + """ + x = sample_x[0] + y = sample_y[0] + if ( + x >= bin_edges_x[0] + and x <= bin_edges_x[-1] + and y >= bin_edges_y[0] + and y <= bin_edges_y[-1] + ): + idx_x = find_index_unsafe(x, bin_edges_x) + idx_y = find_index_unsafe(y, bin_edges_y) + idx = idx_x * (len(bin_edges_y) - 1) + idx_y + for i in range(weights.size): + weights[i] = flat_hist[idx, i] + else: # outside of binning or nan + for i in range(weights.size): + weights[i] = 0. + + +@guvectorize( + [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], + '(), (), (), (j), (k), (l), (m) -> ()', + target='cpu', +) +def lookup_vectorized_3d( + sample_x, + sample_y, + sample_z, + flat_hist, + bin_edges_x, + bin_edges_y, + bin_edges_z, + weights, +): + """Vectorized gufunc to perform the lookup""" + x = sample_x[0] + y = sample_y[0] + z = sample_z[0] + if ( + x >= bin_edges_x[0] + and x <= bin_edges_x[-1] + and y >= bin_edges_y[0] + and y <= bin_edges_y[-1] + and z >= bin_edges_z[0] + and z <= bin_edges_z[-1] + ): + idx_x = find_index_unsafe(x, bin_edges_x) + idx_y = find_index_unsafe(y, bin_edges_y) + idx_z = find_index_unsafe(z, bin_edges_z) + idx = (idx_x * (len(bin_edges_y) - 1) + idx_y) * (len(bin_edges_z) - 1) + idx_z + weights[0] = flat_hist[idx] + else: # outside of binning or nan + weights[0] = 0. + + +@guvectorize( + [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:, :], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], + '(), (), (), (j, d), (k), (l), (m) -> (d)', + target='cpu', +) +def lookup_vectorized_3d_arrays( + sample_x, + sample_y, + sample_z, + flat_hist, + bin_edges_x, + bin_edges_y, + bin_edges_z, + weights, +): + """Vectorized gufunc to perform the lookup while flat hist and weights have + both a second dimension""" + x = sample_x[0] + y = sample_y[0] + z = sample_z[0] + if ( + x >= bin_edges_x[0] + and x <= bin_edges_x[-1] + and y >= bin_edges_y[0] + and y <= bin_edges_y[-1] + and z >= bin_edges_z[0] + and z <= bin_edges_z[-1] + ): + idx_x = find_index_unsafe(x, bin_edges_x) + idx_y = find_index_unsafe(y, bin_edges_y) + idx_z = find_index_unsafe(z, bin_edges_z) + idx = (idx_x * (len(bin_edges_y) - 1) + idx_y) * (len(bin_edges_z) - 1) + idx_z + for i in range(weights.size): + weights[i] = flat_hist[idx, i] + else: # outside of binning or nan + for i in range(weights.size): + weights[i] = 0. + + +
+[docs] +def test_histogram(): + """Unit tests for `histogram` function. + + Correctness is defined as matching the histogram produced by + numpy.histogramdd. + """ + all_num_bins = [2, 3, 4] + n_evts = 10000 + rand = np.random.RandomState(seed=0) + + weights = rand.rand(n_evts).astype(FTYPE) + binning = [] + sample = [] + for num_dims, num_bins in enumerate(all_num_bins, start=1): + binning.append( + OneDimBinning( + name=f'dim{num_dims - 1}', + num_bins=num_bins, + is_lin=True, + domain=[0, num_bins], + ) + ) + + s = rand.rand(n_evts).astype(FTYPE) * num_bins + sample.append(s) + + bin_edges = [b.edge_magnitudes for b in binning] + test = histogram(sample, weights, MultiDimBinning(binning), averaged=False) + ref, _ = np.histogramdd(sample=sample, bins=bin_edges, weights=weights) + ref = ref.astype(FTYPE).ravel() + assert recursiveEquality(test, ref), f'\ntest:\n{test}\n\nref:\n{ref}' + + test_avg = histogram(sample, weights, MultiDimBinning(binning), averaged=True) + ref_counts, _ = np.histogramdd(sample=sample, bins=bin_edges, weights=None) + ref_counts = ref_counts.astype(FTYPE).ravel() + ref_avg = (ref / ref_counts).astype(FTYPE) + assert recursiveEquality(test_avg, ref_avg), \ + f'\ntest_avg:\n{test_avg}\n\nref_avg:\n{ref_avg}' + + logging.info('<< PASS : test_histogram >>')
+ + + +
+[docs] +def test_find_index(): + """Unit tests for `find_index` function. + + Correctness is defined as producing the same histogram as numpy.histogramdd + by using the output of `find_index` (ignoring underflow and overflow values). + Additionally, -1 should be returned if a value is below the range + (underflow) or is nan, and num_bins should be returned for a value above + the range (overflow). + """ + # Negative, positive, integer, non-integer, binary-unrepresentable (0.1) edges + basic_bin_edges = [-1, -0.5, -0.1, 0, 0.1, 0.5, 1, 2, 3, 4] + + failures = 0 + for basic_bin_edges in [ + # Negative, positive, integer, non-integer, binary-unrepresentable (0.1) edges + [-1, -0.5, -0.1, 0, 0.1, 0.5, 1, 2, 3, 4], + + # A single infinite bin: [-np.inf, np.inf] + [], + + # Half-infinite bins (lower or upper edge) & [-inf, .1, +inf] + [0.1], + + # Single bin with finite edges & +/-inf-edge(s)-added variants + [-0.1, 0.1], + ]: + # Bin edges from above, w/ and w/o +/-inf as left and/or right edges + for le, re in [ + (None, None), + (-np.inf, None), + (None, np.inf), + (-np.inf, np.inf) + ]: + bin_edges = deepcopy(basic_bin_edges) + if le is not None: + bin_edges = [le] + bin_edges + if re is not None: + bin_edges = bin_edges + [re] + if len(bin_edges) < 2: + continue + logging.debug('bin_edges being tested: %s', bin_edges) + bin_edges = np.array(bin_edges, dtype=FTYPE) + + num_bins = len(bin_edges) - 1 + underflow_idx = -1 + overflow_idx = num_bins + + # + # Construct test values to try out + # + + non_finite_vals = [-np.inf, +np.inf, np.nan] + + # Values within bins (i.e., not on edges) + inbin_vals = [] + for idx in range(len(bin_edges) - 1): + lower_be = bin_edges[idx] + upper_be = bin_edges[idx + 1] + if np.isfinite(lower_be): + if np.isfinite(upper_be): + inbin_val = (lower_be + upper_be) / 2 + else: + inbin_val = lower_be + 10.5 + else: + if np.isfinite(upper_be): + inbin_val = upper_be - 10.5 + else: + inbin_val = 10.5 + inbin_vals.append(inbin_val) + + # Values above/below bin edges by one unit of floating point + # accuracy + eps = np.finfo(FTYPE).eps # pylint: disable=no-member + below_edges_vals = [FTYPE((1 - eps)*be) for be in bin_edges] + above_edges_vals = [FTYPE((1 + eps)*be) for be in bin_edges] + + test_vals = np.concatenate( + [ + non_finite_vals, + bin_edges, + inbin_vals, + below_edges_vals, + above_edges_vals, + ] + ) + logging.trace('test_vals = %s', test_vals) + + # + # Run tests + # + for val in test_vals: + val = FTYPE(val) + + np_histvals, _ = np.histogramdd([val], np.atleast_2d(bin_edges)) + nonzero_indices = np.nonzero(np_histvals)[0] # select first & only dim + if np.isnan(val): + assert len(nonzero_indices) == 0, str(len(nonzero_indices)) + expected_idx = underflow_idx + elif val < bin_edges[0]: + assert len(nonzero_indices) == 0, str(len(nonzero_indices)) + expected_idx = underflow_idx + elif val > bin_edges[-1]: + assert len(nonzero_indices) == 0, str(len(nonzero_indices)) + expected_idx = overflow_idx + else: + assert len(nonzero_indices) == 1, str(len(nonzero_indices)) + expected_idx = nonzero_indices[0] + + found_idx = find_index(val, bin_edges) + + if found_idx != expected_idx: + failures += 1 + msg = 'val={}, edges={}: Expected idx={}, found idx={}'.format( + val, bin_edges, expected_idx, found_idx + ) + logging.error(msg) + + assert failures == 0, f"{failures} failures, inspect ERROR messages above for info" + + logging.info('<< PASS : test_find_index >>')
+ + + +if __name__ == '__main__': + set_verbosity(1) + test_find_index() + test_histogram() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/add_flux_to_events_file.html b/_modules/pisa/scripts/add_flux_to_events_file.html new file mode 100644 index 000000000..50767ea96 --- /dev/null +++ b/_modules/pisa/scripts/add_flux_to_events_file.html @@ -0,0 +1,312 @@ + + + + + + pisa.scripts.add_flux_to_events_file — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.add_flux_to_events_file

+#! /usr/bin/env python
+
+"""
+Add neutrino fluxes (and neutrino weights(osc*flux*sim_weight) if needed) for
+each event.
+"""
+
+
+from __future__ import absolute_import, division, print_function
+
+from argparse import ArgumentParser
+import glob
+from os import listdir
+from os.path import basename, dirname, isdir, isfile, join, splitext
+
+from pisa.utils.fileio import from_file, to_file, mkdir, nsort
+from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights
+from pisa.utils.hdf import HDF5_EXTS
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.resources import find_resource
+
+
+__all__ = ['add_fluxes_to_file', 'main']
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+[docs] +def add_fluxes_to_file(data_file_path, flux_table, flux_name, + outdir=None, label=None, overwrite=False): + """Add fluxes to PISA events file (e.g. for use by an mc stage) + + Parameters + ----------- + data_file_path : string + flux_table + flux_name + outdir : string or None + If None, output is to the same directory as `data_file_path` + overwrite : bool, optional + """ + data, attrs = from_file(find_resource(data_file_path), return_attrs=True) + bname, ext = splitext(basename(data_file_path)) + assert ext.lstrip('.') in HDF5_EXTS + + if outdir is None: + outdir = dirname(data_file_path) + + if label is None: + label = '' + else: + assert isinstance(label, str) + label = '_' + label + + outpath = join(outdir, '{}__with_fluxes{}{}'.format(bname, label, ext)) + + if not overwrite and isfile(outpath): + logging.warning('Output path "%s" already exists, not regenerating', + outpath) + return + + mkdir(outdir, warn=False) + + # Loop over the top-level keys + for primary, primary_node in data.items(): + + # Only handling neutrnio fluxes here, skip past e.g. muon or noise MC events + if primary.startswith("nu") : + + logging.info('Adding fluxes to "%s" events', primary) + + # Input data may have one layer of hierarchy before the event variables (e.g. [numu_cc]), + # or for older files there maybe be a second layer (e.g. [numu][cc]). + # Handling either case here... + if "true_energy" in primary_node : + secondary_nodes = [primary_node] + else : + secondary_nodes = primary_node.values() + + for secondary_node in secondary_nodes : + + true_e = secondary_node['true_energy'] + true_cz = secondary_node['true_coszen'] + + # calculate all 4 fluxes (nue, nuebar, numu and numubar) + for table in ['nue', 'nuebar', 'numu', 'numubar']: + flux = calculate_2d_flux_weights( + true_energies=true_e, + true_coszens=true_cz, + en_splines=flux_table[table] + ) + keyname = flux_name + '_' + table + '_flux' + secondary_node[keyname] = flux + + to_file(data, outpath, attrs=attrs, overwrite=overwrite) + logging.info('--> Wrote file including fluxes to "%s"', outpath)
+ + + +def parse_args(description=__doc__): + """Parse command-line arguments""" + parser = ArgumentParser(description=description) + parser.add_argument( + '--input', metavar='(H5_FILE|DIR)', nargs='+', type=str, required=True, + help='''Path to a PISA events HDF5 file or a directory containing HDF5 + files; output files are copies of this/these, but with flux fields + added.''' + ) + parser.add_argument( + '--flux-file', metavar='FLUX_FILE', type=str, required=True, + help='''Flux file from which to obtain fluxes, e.g. + "flux/honda-2015-spl-solmin-aa.d"''' + ) + parser.add_argument( + '--outdir', metavar='DIR', default=None, + help='''Directory to save the output to; if none is provided, output is + placed in same dir as --input.''' + ) + parser.add_argument( + '--label', type=str, default=None, + help='''Label to give output files. If a label is not specified, + default label is the flux file's basename with extension removed.''' + ) + parser.add_argument( + '-v', action='count', default=1, + help='''Increase verbosity level _beyond_ INFO level by specifying -v + (DEBUG) or -vv (TRACE)''' + ) + return parser.parse_args() + + +
+[docs] +def main(): + """Run `add_fluxes_to_file` function with arguments from command line""" + args = parse_args() + set_verbosity(args.v) + + flux_table = load_2d_table(args.flux_file) + flux_file_bname, ext = splitext(basename(args.flux_file)) + + input_paths = [] + for input_path in args.input: + if isdir(input_path): + for filename in listdir(input_path): + filepath = join(input_path, filename) + input_paths.append(filepath) + + else: + input_paths += glob.glob(input_path) + + input_paths = nsort(input_paths) + + paths_to_process = [] + basenames = [] + for input_path in input_paths: + if isdir(input_path): + logging.debug('Path "%s" is a directory, skipping', input_path) + continue + + firstpart, ext = splitext(input_path) + if ext.lstrip('.') not in HDF5_EXTS: + logging.debug('Path "%s" is not an HDF5 file, skipping', input_path) + continue + + bname = basename(firstpart) + if bname in basenames: + raise ValueError( + 'Found files with duplicate basename "%s" (despite files' + ' having different paths); resolve the ambiguous names and' + ' re-run. Offending files are:\n "%s"\n "%s"' + % (bname, + paths_to_process[basenames.index(bname)], + input_path) + ) + + basenames.append(bname) + paths_to_process.append(input_path) + + logging.info('Will process %d input file(s)...', len(paths_to_process)) + + for filepath in paths_to_process: + logging.info('Working on input file "%s"', filepath) + add_fluxes_to_file( + data_file_path=filepath, + flux_table=flux_table, + flux_name='nominal', + outdir=args.outdir, + label=flux_file_bname + )
+ + + +if __name__ == '__main__': + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/compare.html b/_modules/pisa/scripts/compare.html new file mode 100644 index 000000000..12d379c84 --- /dev/null +++ b/_modules/pisa/scripts/compare.html @@ -0,0 +1,837 @@ + + + + + + pisa.scripts.compare — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.scripts.compare

+#! /usr/bin/env python
+
+"""
+Compare two entities: Maps, map sets, pipelines, or distribution makers. One
+kind can be compared against another, so long as the resulting map(s) have
+equivalent names and binning. The result each entity specification is formatted
+into a MapSet and can be stored to disk so that e.g. re-running a
+DistributionMaker is unnecessary to reproduce the results.
+"""
+
+# TODO: make use of `MapSet.compare()` method (and/or expand that until it is
+# equally useful here)
+
+from argparse import ArgumentParser
+from collections import OrderedDict
+from copy import deepcopy
+import os
+
+import numpy as np
+
+from pisa import EPSILON
+from pisa.core.distribution_maker import DistributionMaker
+from pisa.core.map import Map, MapSet
+from pisa.core.pipeline import Pipeline
+from pisa.utils.fileio import mkdir, to_file
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.plotter import Plotter
+
+
+__all__ = ['DISTRIBUTIONMAKER_SOURCE_STR', 'PIPELINE_SOURCE_STR',
+           'MAP_SOURCE_STR', 'MAPSET_SOURCE_STR',
+           'parse_args', 'compare', 'main']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+DISTRIBUTIONMAKER_SOURCE_STR = (
+    'DistributionMaker instantiated from multiple pipeline config files'
+)
+PIPELINE_SOURCE_STR = 'Pipeline instantiated from a pipeline config file'
+MAP_SOURCE_STR = 'Map stored on disk'
+MAPSET_SOURCE_STR = 'MapSet stored on disk'
+
+
+
+[docs] +def compare(outdir, ref, ref_label, test, test_label, asymm_max=None, + asymm_min=None, combine=None, diff_max=None, diff_min=None, + fract_diff_max=None, fract_diff_min=None, json=False, pdf=False, + png=False, ref_abs=False, ref_param_selections=None, sum=None, + test_abs=False, test_param_selections=None): + """Compare two entities. The result each entity specification is + formatted into a MapSet and stored to disk, so that e.g. re-running + a DistributionMaker is unnecessary to reproduce the results. + + Parameters + ---------- + outdir : string + Store output plots to this directory + + ref : string or array of strings + Pipeline settings config file that generates reference output, + or a stored map or map set. Multiple pipelines, maps, or map sets are + supported + + ref_abs : bool + Use the absolute value of the reference plot for comparisons + + ref_label : string + Label for reference + + ref_param-selections : string + Param selections to apply to ref pipeline config(s). Not + applicable if ref specifies stored map or map sets + + test : string or array of strings + Pipeline settings config file that generates test output, or a + stored map or map set. Multiple pipelines, maps, or map sets are + supported + + test_abs : bool + Use the absolute value of the test plot for comparisons + + test_label : string + Label for test + + test_param_selections : None or string + Param selections to apply to test pipeline config(s). Not + applicable if test specifies stored map or map sets + + combine : None or string or array of strings + Combine by wildcard string, where string globbing (a la command + line) uses asterisk for any number of wildcard characters. Use + single quotes such that asterisks do not get expanded by the + shell. Multiple combine strings supported + + sum : None or int + Sum over (and hence remove) the specified axis or axes. I.e., + project the map onto remaining (unspecified) axis or axes + + json : bool + Save output maps in compressed json (json.bz2) format + + pdf : bool + Save plots in PDF format. If neither this nor png is + specified, no plots are produced + + png : bool + Save plots in PNG format. If neither this nor pdf is specfied, + no plots are produced + + diff_min : None or float + Difference plot vmin; if you specify only one of diff_min or + diff_max, symmetric limits are automatically used (min = -max) + + diff_max : None or float + Difference plot max; if you specify only one of diff_min or + diff_max, symmetric limits are automatically used (min = -max) + + fract_diff_min : None or float + Fractional difference plot vmin; if you specify only one of + fract_diff_min or fract_diff_max, symmetric limits are + automatically used (min = -max) + + fract_diff_max : None or float + Fractional difference plot max; if you specify only one of + fract_diff_min or fract_diff_max, symmetric limits are + automatically used (min = -max) + + asymm_min : None or float + Asymmetry plot vmin; if you specify only one of asymm_min or + asymm_max, symmetric limits are automatically used (min = -max) + + asymm_max : None or float + Fractional difference plot max; if you specify only one of + asymm_min or asymm_max, symmetric limits are automatically used + (min = -max) + + Returns + ------- + summary_stats : dict + Dictionary containing a summary for each h Map processed + + diff : MapSet + MapSet of the difference + - (Test - Ref) + + fract_diff : MapSet + MapSet of the fractional difference + - (Test - Ref) / Ref + + asymm : MapSet + MapSet of the asymmetric fraction difference or pull + - (Test - Ref) / sqrt(Ref) + + """ + ref_plot_label = ref_label + if ref_abs and not ref_label.startswith('abs'): + ref_plot_label = 'abs(%s)' % ref_plot_label + test_plot_label = test_label + if test_abs and not test_label.startswith('abs'): + test_plot_label = 'abs(%s)' % test_plot_label + + plot_formats = [] + if pdf: + plot_formats.append('pdf') + if png: + plot_formats.append('png') + + diff_symm = True + if diff_min is not None and diff_max is None: + diff_max = -diff_min + diff_symm = False + if diff_max is not None and diff_min is None: + diff_min = -diff_max + diff_symm = False + + fract_diff_symm = True + if fract_diff_min is not None and fract_diff_max is None: + fract_diff_max = -fract_diff_min + fract_diff_symm = False + if fract_diff_max is not None and fract_diff_min is None: + fract_diff_min = -fract_diff_max + fract_diff_symm = False + + asymm_symm = True + if asymm_max is not None and asymm_min is None: + asymm_min = -asymm_max + asymm_symm = False + if asymm_min is not None and asymm_max is None: + asymm_max = -asymm_min + asymm_symm = False + + outdir = os.path.expanduser(os.path.expandvars(outdir)) + mkdir(outdir) + + # Get the reference distribution(s) into the form of a test MapSet + p_ref = None + ref_source = None + if isinstance(ref, Map): + p_ref = MapSet(ref) + ref_source = MAP_SOURCE_STR + elif isinstance(ref, MapSet): + p_ref = ref + ref_source = MAPSET_SOURCE_STR + elif isinstance(ref, Pipeline): + if ref_param_selections is not None: + ref.select_params(ref_param_selections) + p_ref = ref.get_outputs() + ref_source = PIPELINE_SOURCE_STR + elif isinstance(ref, DistributionMaker): + if ref_param_selections is not None: + ref.select_params(ref_param_selections) + p_ref = ref.get_outputs() + ref_source = DISTRIBUTIONMAKER_SOURCE_STR + else: + if len(ref) == 1: + try: + ref_pipeline = Pipeline(config=ref[0]) + except: + pass + else: + ref_source = PIPELINE_SOURCE_STR + if ref_param_selections is not None: + ref_pipeline.select_params(ref_param_selections) + p_ref = ref_pipeline.get_outputs() + else: + try: + ref_dmaker = DistributionMaker(pipelines=ref) + except: + pass + else: + ref_source = DISTRIBUTIONMAKER_SOURCE_STR + if ref_param_selections is not None: + ref_dmaker.select_params(ref_param_selections) + p_ref = ref_dmaker.get_outputs() + + if p_ref is None: + try: + p_ref = [Map.from_json(f) for f in ref] + except: + pass + else: + ref_source = MAP_SOURCE_STR + p_ref = MapSet(p_ref) + + if p_ref is None: + assert ref_param_selections is None + assert len(ref) == 1, 'Can only handle one MapSet' + try: + p_ref = MapSet.from_json(ref[0]) + except: + pass + else: + ref_source = MAPSET_SOURCE_STR + + if p_ref is None: + raise ValueError( + 'Could not instantiate the reference Pipeline, DistributionMaker,' + ' Map, or MapSet from ref value(s) %s' % ref + ) + ref = p_ref + + logging.info('Reference map(s) derived from a ' + ref_source) + + # Get the test distribution(s) into the form of a test MapSet + p_test = None + test_source = None + if isinstance(test, Map): + p_test = MapSet(test) + test_source = MAP_SOURCE_STR + elif isinstance(test, MapSet): + p_test = test + test_source = MAPSET_SOURCE_STR + elif isinstance(test, Pipeline): + if test_param_selections is not None: + test.select_params(test_param_selections) + p_test = test.get_outputs() + test_source = PIPELINE_SOURCE_STR + elif isinstance(test, DistributionMaker): + if test_param_selections is not None: + test.select_params(test_param_selections) + p_test = test.get_outputs() + test_source = DISTRIBUTIONMAKER_SOURCE_STR + else: + if len(test) == 1: + try: + test_pipeline = Pipeline(config=test[0]) + except: + pass + else: + test_source = PIPELINE_SOURCE_STR + if test_param_selections is not None: + test_pipeline.select_params(test_param_selections) + p_test = test_pipeline.get_outputs() + else: + try: + test_dmaker = DistributionMaker(pipelines=test) + except: + pass + else: + test_source = DISTRIBUTIONMAKER_SOURCE_STR + if test_param_selections is not None: + test_dmaker.select_params(test_param_selections) + p_test = test_dmaker.get_outputs() + + if p_test is None: + try: + p_test = [Map.from_json(f) for f in test] + except: + pass + else: + test_source = MAP_SOURCE_STR + p_test = MapSet(p_test) + + if p_test is None: + assert test_param_selections is None + assert len(test) == 1, 'Can only handle one MapSet' + try: + p_test = MapSet.from_json(test[0]) + except: + pass + else: + test_source = MAPSET_SOURCE_STR + + if p_test is None: + raise ValueError( + 'Could not instantiate the test Pipeline, DistributionMaker, Map,' + ' or MapSet from test value(s) %s' % test + ) + test = p_test + + logging.info('Test map(s) derived from a ' + test_source) + + if combine is not None: + ref = ref.combine_wildcard(combine) + test = test.combine_wildcard(combine) + if isinstance(ref, Map): + ref = MapSet([ref]) + if isinstance(test, Map): + test = MapSet([test]) + + if sum is not None: + ref = ref.sum(sum) + test = test.sum(sum) + + # Set the MapSet names according to args passed by user + ref.name = ref_label + test.name = test_label + + # Save to disk the maps being plotted (excluding optional aboslute value + # operations) + if json: + refmaps_path = os.path.join( + outdir, 'maps__%s.json.bz2' % ref_label + ) + to_file(ref, refmaps_path) + + testmaps_path = os.path.join( + outdir, 'maps__%s.json.bz2' % test_label + ) + to_file(test, testmaps_path) + + if set(test.names) != set(ref.names): + raise ValueError( + 'Test map names %s do not match ref map names %s.' + % (sorted(test.names), sorted(ref.names)) + ) + + # Aliases to save keystrokes + def masked(x): + return np.ma.masked_invalid(x.nominal_values) + + def zero_to_nan(map): + newmap = deepcopy(map) + mask = np.isclose(newmap.nominal_values, 0, rtol=0, atol=EPSILON) + newmap.hist[mask] = np.nan + return newmap + + reordered_test = [] + new_ref = [] + diff_maps = [] + fract_diff_maps = [] + asymm_maps = [] + summary_stats = {} + for ref_map in ref: + test_map = test[ref_map.name].reorder_dimensions(ref_map.binning) + if ref_abs: + ref_map = abs(ref_map) + if test_abs: + test_map = abs(test_map) + + diff_map = test_map - ref_map + fract_diff_map = (test_map - ref_map)/zero_to_nan(ref_map) + asymm_map = (test_map - ref_map)/zero_to_nan(ref_map**0.5) + abs_fract_diff_map = np.abs(fract_diff_map) + + new_ref.append(ref_map) + reordered_test.append(test_map) + diff_maps.append(diff_map) + fract_diff_maps.append(fract_diff_map) + asymm_maps.append(asymm_map) + + min_ref = np.min(masked(ref_map)) + max_ref = np.max(masked(ref_map)) + + min_test = np.min(masked(test_map)) + max_test = np.max(masked(test_map)) + + total_ref = np.sum(masked(ref_map)) + total_test = np.sum(masked(test_map)) + + mean_ref = np.mean(masked(ref_map)) + mean_test = np.mean(masked(test_map)) + + max_abs_fract_diff = np.max(masked(abs_fract_diff_map)) + mean_abs_fract_diff = np.mean(masked(abs_fract_diff_map)) + median_abs_fract_diff = np.median(masked(abs_fract_diff_map)) + + mean_fract_diff = np.mean(masked(fract_diff_map)) + min_fract_diff = np.min(masked(fract_diff_map)) + max_fract_diff = np.max(masked(fract_diff_map)) + std_fract_diff = np.std(masked(fract_diff_map)) + + mean_diff = np.mean(masked(diff_map)) + min_diff = np.min(masked(diff_map)) + max_diff = np.max(masked(diff_map)) + std_diff = np.std(masked(diff_map)) + + median_diff = np.nanmedian(masked(diff_map)) + mad_diff = np.nanmedian(masked(np.abs(diff_map))) + median_fract_diff = np.nanmedian(masked(fract_diff_map)) + mad_fract_diff = np.nanmedian(masked(np.abs(fract_diff_map))) + + min_asymm = np.min(masked(fract_diff_map)) + max_asymm = np.max(masked(fract_diff_map)) + + total_asymm = np.sqrt(np.sum(masked(asymm_map)**2)) + + summary_stats[test_map.name] = OrderedDict([ + ('min_ref', min_ref), + ('max_ref', max_ref), + ('total_ref', total_ref), + ('mean_ref', mean_ref), + + ('min_test', min_test), + ('max_test', max_test), + ('total_test', total_test), + ('mean_test', mean_test), + + ('max_abs_fract_diff', max_abs_fract_diff), + ('mean_abs_fract_diff', mean_abs_fract_diff), + ('median_abs_fract_diff', median_abs_fract_diff), + + ('min_fract_diff', min_fract_diff), + ('max_fract_diff', max_fract_diff), + ('mean_fract_diff', mean_fract_diff), + ('std_fract_diff', std_fract_diff), + ('median_fract_diff', median_fract_diff), + ('mad_fract_diff', mad_fract_diff), + + ('min_diff', min_diff), + ('max_diff', max_diff), + ('mean_diff', mean_diff), + ('std_diff', std_diff), + ('median_diff', median_diff), + ('mad_diff', mad_diff), + + ('min_asymm', min_asymm), + ('max_asymm', max_asymm), + ('total_asymm', total_asymm), + ]) + + logging.info('Map %s...', ref_map.name) + logging.info(' Ref map(s):') + logging.info(' min :' + ('%.2f' % min_ref).rjust(12)) + logging.info(' max :' + ('%.2f' % max_ref).rjust(12)) + logging.info(' total :' + ('%.2f' % total_ref).rjust(12)) + logging.info(' mean :' + ('%.2f' % mean_ref).rjust(12)) + logging.info(' Test map(s):') + logging.info(' min :' + ('%.2f' % min_test).rjust(12)) + logging.info(' max :' + ('%.2f' % max_test).rjust(12)) + logging.info(' total :' + ('%.2f' % total_test).rjust(12)) + logging.info(' mean :' + ('%.2f' % mean_test).rjust(12)) + logging.info(' Absolute fract. diff., abs((Test - Ref) / Ref):') + logging.info(' max : %.4e', max_abs_fract_diff) + logging.info(' mean : %.4e', mean_abs_fract_diff) + logging.info(' median: %.4e', median_abs_fract_diff) + logging.info(' Fractional difference, (Test - Ref) / Ref:') + logging.info(' min : %.4e', min_fract_diff) + logging.info(' max : %.4e', max_fract_diff) + logging.info(' mean : %.4e +/- %.4e', mean_fract_diff, std_fract_diff) + logging.info(' median: %.4e +/- %.4e', median_fract_diff, mad_fract_diff) + logging.info(' Difference, Test - Ref:') + logging.info(' min : %.4e', min_diff) + logging.info(' max : %.4e', max_diff) + logging.info(' mean : %.4e +/- %.4e', mean_diff, std_diff) + logging.info(' median: %.4e +/- %.4e', median_diff, mad_diff) + logging.info(' Asymmetry, (Test - Ref) / sqrt(Ref)') + logging.info(' min : %.4e', min_asymm) + logging.info(' max : %.4e', max_asymm) + logging.info(' total : %.4e (sum in quadrature)', total_asymm) + logging.info('') + + ref = MapSet(new_ref) + test = MapSet(reordered_test) + diff = MapSet(diff_maps) + fract_diff = MapSet(fract_diff_maps) + asymm = MapSet(asymm_maps) + + if json: + diff.to_json(os.path.join( + outdir, + 'diff__%s__%s.json.bz2' %(test_plot_label, ref_plot_label) + )) + fract_diff.to_json(os.path.join( + outdir, + 'fract_diff__%s___%s.json.bz2' %(test_plot_label, ref_plot_label) + )) + asymm.to_json(os.path.join( + outdir, + 'asymm__%s___%s.json.bz2' %(test_plot_label, ref_plot_label) + )) + to_file( + summary_stats, + os.path.join( + outdir, + 'stats__%s__%s.json.bz2' %(test_plot_label, ref_plot_label) + ) + ) + + for plot_format in plot_formats: + # Plot the raw distributions + plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, + log=False, annotate=False, + symmetric=False, + ratio=False) + plotter.plot_2d_array(ref, fname='distr__%s' + % ref_plot_label) + plotter.plot_2d_array(test, fname='distr__%s' + % test_plot_label) + + # Plot the difference (test - ref) + plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, + log=False, annotate=False, + symmetric=diff_symm, + ratio=False) + plotter.label = '%s - %s' % (test_plot_label, ref_plot_label) + plotter.plot_2d_array( + test - ref, + fname='diff__%s__%s' % (test_plot_label, ref_plot_label), + #vmin=diff_min, vmax=diff_max + ) + + # Plot the fractional difference (test - ref)/ref + plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, + log=False, + annotate=False, + symmetric=fract_diff_symm, + ratio=True) + plotter.label = ('(%s-%s)/%s' + % (test_plot_label, ref_plot_label, ref_plot_label)) + plotter.plot_2d_array( + (test-ref)/MapSet([zero_to_nan(r) for r in ref]), + fname='fract_diff__%s__%s' % (test_plot_label, ref_plot_label), + #vmin=fract_diff_min, vmax=fract_diff_max + ) + + # Plot the asymmetry (test - ref)/sqrt(ref) + plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, + log=False, + annotate=False, + symmetric=asymm_symm, + ratio=True) + plotter.label = (r'$(%s - %s)/\sqrt{%s}$' + % (test_plot_label, ref_plot_label, ref_plot_label)) + plotter.plot_2d_array( + (test-ref)/MapSet([zero_to_nan(r**0.5) for r in ref]), + fname='asymm__%s__%s' % (test_plot_label, ref_plot_label), + #vmin=asymm_min, vmax=asymm_max + ) + + return summary_stats, diff, fract_diff, asymm
+ + + +
+[docs] +def parse_args(): + """Parse command line arguments""" + parser = ArgumentParser(description=__doc__) + parser.add_argument( + '--outdir', metavar='DIR', type=str, required=True, + help='''Store output plots to this directory.''' + ) + parser.add_argument( + '--ref', type=str, required=True, action='append', + help='''Pipeline settings config file that generates reference + output, or a stored map or map set. Repeat --ref option for multiple + pipelines, maps, or map sets''' + ) + parser.add_argument( + '--ref-abs', action='store_true', + help='''Use the absolute value of the reference plot for + comparisons.''' + ) + parser.add_argument( + '--ref-label', type=str, required=True, + help='''Label for reference''' + ) + parser.add_argument( + '--ref-param-selections', type=str, required=False, + action='append', + help='''Param selections to apply to --ref pipeline config(s). Not + applicable if --ref specifies stored map or map sets''' + ) + parser.add_argument( + '--test', type=str, required=True, action='append', + help='''Pipeline settings config file that generates test + output, or a stored map or map set. Repeat --test option for multiple + pipelines, maps, or map sets''' + ) + parser.add_argument( + '--test-abs', action='store_true', + help='''Use the absolute value of the test plot for + comparisons.''' + ) + parser.add_argument( + '--test-label', type=str, required=True, + help='''Label for test''' + ) + parser.add_argument( + '--test-param-selections', type=str, required=False, + action='append', + help='''Param selections to apply to --test pipeline config(s). Not + applicable if --test specifies stored map or map sets''' + ) + parser.add_argument( + '--combine', type=str, action='append', + help='''Combine by wildcard string, where string globbing (a la command + line) uses asterisk for any number of wildcard characters. Use single + quotes such that asterisks do not get expanded by the shell. Repeat the + --combine option for multiple combine strings.''' + ) + parser.add_argument( + '--sum', nargs='+', + help='''Sum over (and hence remove) the specified axis or axes. I.e., + project the map onto remaining (unspecified) axis or axes.''' + ) + parser.add_argument( + '--json', action='store_true', + help='''Save output maps in compressed json (json.bz2) format.''' + ) + parser.add_argument( + '--pdf', action='store_true', + help='''Save plots in PDF format. If neither this nor --png is + specified, no plots are produced.''' + ) + parser.add_argument( + '--png', action='store_true', + help='''Save plots in PNG format. If neither this nor --pdf is + specfied, no plots are produced.''' + ) + parser.add_argument( + '--diff-min', type=float, required=False, + help='''Difference plot vmin; if you specify only one of --diff-min or + --diff-max, symmetric limits are automatically used (min = -max).''' + ) + parser.add_argument( + '--diff-max', type=float, required=False, + help='''Difference plot max; if you specify only one of --diff-min or + --diff-max, symmetric limits are automatically used (min = -max).''' + ) + parser.add_argument( + '--fract-diff-min', type=float, required=False, + help='''Fractional difference plot vmin; if you specify only one of + --fract-diff-min or --fract-diff-max, symmetric limits are + automatically used (min = -max).''' + ) + parser.add_argument( + '--fract-diff-max', type=float, required=False, + help='''Fractional difference plot max; if you specify only one of + --fract-diff-min or --fract-diff-max, symmetric limits are + automatically used (min = -max).''' + ) + parser.add_argument( + '--asymm-min', type=float, required=False, + help='''Asymmetry plot vmin; if you specify only one of --asymm-min or + --asymm-max, symmetric limits are automatically used (min = -max).''' + ) + parser.add_argument( + '--asymm-max', type=float, required=False, + help='''Fractional difference plot max; if you specify only one of + --asymm-min or --asymm-max, symmetric limits are automatically used + (min = -max).''' + ) + parser.add_argument( + '-v', action='count', + help='Set verbosity level; repeat -v for higher level.' + ) + args = parser.parse_args() + return args
+ + + +
+[docs] +def main(): + """Function used from command-line calls (either `python compare.py` or via + installer's console scripts (see `setup.py`).""" + args = vars(parse_args()) + set_verbosity(args.pop('v')) + compare(**args)
+ + + +if __name__ == '__main__': + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/convert_config_format.html b/_modules/pisa/scripts/convert_config_format.html new file mode 100644 index 000000000..037c02f8b --- /dev/null +++ b/_modules/pisa/scripts/convert_config_format.html @@ -0,0 +1,655 @@ + + + + + + pisa.scripts.convert_config_format — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.convert_config_format

+#!/usr/bin/env python
+
+"""
+Convert PISA config files from format used up until July 2017 to the new config
+file format.
+"""
+
+
+from __future__ import absolute_import
+
+from argparse import ArgumentParser
+import os
+import re
+import sys
+
+from configparser import MissingSectionHeaderError
+
+from pisa.utils.config_parser import PISAConfigParser
+from pisa.utils.resources import find_resource
+
+
+__all__ = ['OLD_SUB_RE', 'parse_args', 'main']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+OLD_SUB_RE = re.compile(
+    r'''
+        <!          # Start with <! delimiter
+          ([^|]+)   # section is characters that are not pipe
+          \|        # pipe as divider
+          (.+?)     # at least one character (non-greedy match)
+        !>          # end with !> delimiter
+    ''', re.VERBOSE
+)
+
+OLD_STAGE_SECTION_RE = re.compile(
+    r'''
+        \[           # Start with [
+            \s*      # optional whitespace
+            stage    # must start with "stage"
+            \s*      # optional whitespace
+            :        # colon as separator
+            \s*      # optional whitespace
+            (\S+)    # non-whitespace key
+            \s*      # optional whitespace
+        \]           # end with ]
+    ''', re.VERBOSE
+)
+
+OLD_STAGE_VARIABLE_RE = re.compile(
+    r'''
+    \${            # Start with ${
+        \s*        # optional whitespace (technically illegal, will remove)
+        stage      # variable must be named "stage"
+        \s*        # optional whitespace (technially illegal, will remove)
+        :          # colon separator
+        \s*        # optional whitespace (technically illegal, will remove)
+        ([^ }]+)   # any character besides space or endbrace
+        \s*        # optional whitespace (technically illegal, will remove)
+    }
+    ''', re.VERBOSE
+)
+
+OLD_ORDER_RE = re.compile(r'order\s*(?:=|:)\s*(\S.*)\s*')
+ORDER_SUBSTRING_RE = re.compile(r'\s*(\S+)\s*(?::|\.)\s*(\S+)\s*')
+JSON_NO_BZ2_RE = re.compile(r'(\.json)(?!\.bz2)')
+
+SECTION_NAME_WITH_COLON_RE = re.compile(
+    r'''
+    ^\s*                  # only possibly whitespace before opening bracket
+    \[                    # open bracket
+        (                 # capture text found within these parens
+            (?:           # do not capture text within these parens
+                [^\]]*:   # non-"]" followed by ":'
+            )+            # stop no-capture group; one or more of this pattern
+            [^\]]*        # any number of non-"]" before closing bracket
+        )                 # stop capturing text;
+    \]                    # closing bracket
+    ''', re.VERBOSE
+)
+NEW_SECTION_RE = re.compile(
+    r'''
+    (
+        ^\s*           # only possibly whitespace before opening bracket
+        \[             # open bracket
+            ([^\]]*)   # capture anything besides "]"
+        \]             # closing bracket
+    )                  # stop capturing text;
+    ''', re.VERBOSE
+)
+NEW_VARIABLE_RE = re.compile(
+    r'''
+    (               # start capturing text
+        \${         # start with ${
+            ([^}]*) # any character besides closing brace
+        }           # closing brace
+    )               # stop capturing text
+    ''', re.VERBOSE
+)
+
+OTHER_SECTION_NAME_SEPARATOR = '|'
+"""If section names (and any corresponding variable names) use colons as
+separators (and we haven't converted the colons to periods), the colons will be
+replaced with this character instead."""
+
+MULTI_COLON_VAR_RE = re.compile(
+    r'''
+    (                # Capture
+    \${              # start with ${
+        (?:          # do not capture this group
+            [^}]*:   # anything besides closing brace
+        ){2,}        # sto non-capturing group; must be 2 or more of these
+        [^}]*        # any amount of non-closing-brace characters
+    }                # closing brace
+    )                # stop capture
+    ''', re.VERBOSE
+)
+
+PARAM_RE_STR = r'''
+    param                             # must start with "param"
+    (\.[_A-Za-z][_a-zA-Z0-9]*){0,1}   # optional param sel. (valid Python name)
+    \.                                # period before param name
+    %s                                # get actual param name from elsewhere
+'''
+NSI_PARAM_RE_MAP = {
+    e_ij: re.compile(PARAM_RE_STR % e_ij, re.VERBOSE)
+    for e_ij in ['eps_ee', 'eps_emu', 'eps_etau', 'eps_mumu', 'eps_mutau',
+                 'eps_tautau']
+}
+
+INCLUDE_AS = {
+    'settings/binning/example.cfg': 'binning',
+    'settings/binning/pingu_nutau.cfg': 'binning',
+    'settings/osc/loiv2.cfg': 'osc',
+    'settings/osc/nufitv20.cfg': 'osc',
+    'settings/osc/nufitv22.cfg': 'osc',
+    'settings/osc/earth.cfg': 'earth',
+}
+
+JSON_TO_JSON_BZ2 = [
+    'PISAV2IPHonda2015SPLSolMaxFlux-atm_delta_index0.05',
+    'PISAV2IPHonda2015SPLSolMaxFlux-atm_delta_index0.05',
+    'PISAV2IPHonda2015SPLSolMaxFlux-nu_nubar_ratio1.10',
+    'PISAV2IPHonda2015SPLSolMaxFlux-nue_numu_ratio1.03',
+    'PISAV2IPHonda2015SPLSolMaxFlux',
+    'PISAV2bisplrepHonda2015SPLSolMaxFlux'
+]
+JSON_NO_BZ2_RE_LIST = [
+    re.compile(r'%s(\.json)(?!\.bz2)' % n) for n in JSON_TO_JSON_BZ2
+]
+
+NAMES_CHANGED_MAP = {
+    'nutau_holice_domeff_fits_mc.ini': 'nutau_holice_domeff_fits_mc.cfg'
+}
+
+
+def replace_substitution(match):
+    """Replace old substitution syntax ``<!section|key!>`` with new syntax
+    ``${section:key}``. Also, convert any colons in `section` or `key` to
+    ``OTHER_SECTION_NAME_SEPARATOR``.
+
+    Parameters
+    ----------
+    match : re._pattern_type
+
+    Returns
+    -------
+    repl : string
+        Replacement text
+
+    """
+    substrs = match.groups()
+    loc = substrs[0].find('stage:')
+    if loc >= 0:
+        postloc = loc + len('stage:')
+        s0 = (
+            substrs[0][:loc]
+            + 'stage:'
+            + substrs[0][postloc:].replace(':', OTHER_SECTION_NAME_SEPARATOR)
+        )
+    else:
+        s0 = substrs[0].replace(':', OTHER_SECTION_NAME_SEPARATOR)
+
+    s1 = substrs[1].replace(':', OTHER_SECTION_NAME_SEPARATOR)
+
+    return '${%s:%s}' % (s0, s1)
+
+
+def replace_order(match):
+    """Replace e.g.
+        ``  order = flux:honda , osc : prob3cpu,aeff :hist, reco : hist``
+    with
+        ``  order = flux.honda, osc.prob3cpu, aeff.hist, reco.hist``
+
+    Parameters
+    ----------
+    match : re._pattern_type
+
+    Returns
+    -------
+    repl : string
+        Replacement text, starting with ``order`` (i.e., retain whitespace
+        preceding the word "order").
+
+    """
+    new_substrings = []
+    for old_substring in match.groups()[0].split(','):
+        new_substrings.append(
+            ORDER_SUBSTRING_RE.sub(
+                repl=lambda m: '%s.%s' % m.groups(),
+                string=old_substring.strip()
+            )
+        )
+    return 'order = %s' % ', '.join(new_substrings)
+
+
+def append_include_as(include_match):
+    """Convert ``#include x`` to ``#include x as y``, where appropriate; also,
+    convert incorrect "as" statements. See INCLUDE_AS dict for mapping from
+    resource to its "as" target.
+
+    Parameters
+    ----------
+    include_match : re._pattern_type
+        Match produced by INCLUDE_RE.match(string)
+
+    Returns
+    -------
+    repl : string
+        Replacement text for whatever comes after the "#include "
+
+    """
+    include_text = include_match.groups()[0]
+    include_as_match = PISAConfigParser.INCLUDE_AS_RE.match(include_text)
+
+    as_section = None
+    if include_as_match:
+        gd = include_as_match.groupdict()
+        resource = gd['file']
+        as_section = gd['as']
+    else:
+        resource = include_text
+        if resource in INCLUDE_AS.keys():
+            as_section = INCLUDE_AS[resource]
+
+    if as_section is None:
+        repl = '#include ' + resource
+    else:
+        repl = '#include %s as %s' % (resource, as_section)
+
+    return repl
+
+
+
+[docs] +def parse_args(description=__doc__): + """Parse command line arguments""" + parser = ArgumentParser(description=description) + parser.add_argument( + 'config', nargs=1, type=str, + help='''Pipeline config file to convert. Note that new file will have + `.new` suffix appended to filename so you can double check the + conversion before overwriting the original file.''' + ) + parser.add_argument( + '--validate-only', action='store_true', + help='''Do not write an output file, but raise an exception if the file + _would_ be modified. I.e., specifying this flag makes the script behave + as a (rough) validator for config files.''' + ) + return parser.parse_args()
+ + + +
+[docs] +def main(): + """Do the conversion.""" + args = parse_args() + in_fpath = os.path.expanduser(os.path.expandvars(args.config[0])) + out_fpath = in_fpath + '.new' + + with open(in_fpath, 'r') as infile: + orig_contents = infile.readlines() + + osc_stage_header_line = None + section_names_with_colons = {} + new_contents = [] + for lineno, orig_line in enumerate(orig_contents, start=1): + # Remove trailing whitespace, including newline character(s) + new_line = orig_line.rstrip() + + # Empty (or whitespace-only) line is trivial + if new_line == '': + new_contents.append(new_line) + continue + + # Replace text substitution ("config file variables") syntax + new_line = OLD_SUB_RE.sub(repl=replace_substitution, string=new_line) + + # Replace stage headers. E.g. + # `` [ stage :stage_name ]`` + # is replaced by + # `` [stage.stage_name]`` + # I.e. retain any whitespace before (and after... though this is + # already removed) the brackets but swap colon for period and remove + # whitespace within the brackets. + new_line = OLD_STAGE_SECTION_RE.sub( + repl=lambda m: '[stage.%s]' % m.groups(), + string=new_line + ) + + # Replace stage:key variables. E.g. what should now look like + # `` ${ stage : key } `` + # should look like + # `` ${stage.key} `` + new_line = OLD_STAGE_VARIABLE_RE.sub( + repl=lambda m: '${stage.%s}' % m.groups(), + string=new_line + ) + + stripped = new_line.strip() + + # Replace order string + if stripped.startswith('order'): + new_line = OLD_ORDER_RE.sub(repl=replace_order, string=new_line) + # Record line on which the [stage.osc] section occurs (if any) + elif stripped == '[stage.osc]': + osc_stage_header_line = lineno - 1 + + # Convert ``#include x`` to ``#include x as y``, where appropriate + new_line = PISAConfigParser.INCLUDE_RE.sub( + repl=append_include_as, + string=new_line + ) + + # Convert JSON filenames to .json.bz2 that are now bzipped + if '.json' in new_line: + for json_re in JSON_NO_BZ2_RE_LIST: + new_line = json_re.sub(repl='.json.bz2', string=new_line) + + # Replace changed names + for orig_name, new_name in NAMES_CHANGED_MAP.items(): + new_line = new_line.replace(orig_name, new_name) + + # Search for any colons used in section names. This is illegal, as a + # section name can be used as a variable where the syntax is + # ``${section_name:key}`` + # so any colons in section_name will make the parser choke. + for match in SECTION_NAME_WITH_COLON_RE.finditer(new_line): + section_name_with_colons = match.groups()[0] + if NEW_VARIABLE_RE.match(section_name_with_colons): + if section_name_with_colons.count(':') > 1: + raise ValueError( + 'Multiple colons in new-style variable, line %d:\n' + '>> Original line:\n%s\n>> New line:\n%s\n' + % (lineno, orig_line, new_line) + ) + else: + continue + section_name_without_colons = section_name_with_colons.replace( + ':', OTHER_SECTION_NAME_SEPARATOR + ) + section_names_with_colons[section_name_with_colons] = ( + section_name_without_colons + ) + + new_contents.append(new_line) + + #for item in section_names_with_colons.items(): + # print '%s --> %s' % item + + # Go back through and replace colon-sparated section names with + # ``OTHER_SECTION_NAME_SEPARATOR``-separated section names + all_names_to_replace = section_names_with_colons.keys() + def replace_var(match): + """Closure to replace variable names""" + whole_string, var_name = match.groups() + if var_name in all_names_to_replace: + return '${%s}' % section_names_with_colons[var_name] + return whole_string + + def replace_section_name(match): + """Closure to replace section names""" + whole_string, section_name = match.groups() + if section_name in all_names_to_replace: + return whole_string.replace( + section_name, section_names_with_colons[section_name] + ) + return whole_string + + for lineno, new_line in enumerate(new_contents, start=1): + if not new_line: + continue + + new_line = NEW_VARIABLE_RE.sub(repl=replace_var, string=new_line) + new_line = NEW_SECTION_RE.sub(repl=replace_section_name, + string=new_line) + + #new_line = NEW_SECTION_RE.sub(repl=replace_colon_names, + # string=new_line) + + #for with_colons, without_colons in section_names_with_colons: + # new_line = new_line.replace(with_colons, without_colons) + + # Check for multiple colons in a variable (which is illegal) + if MULTI_COLON_VAR_RE.findall(new_line): + raise ValueError( + 'Multiple colons in variable, line %d:\n>> Original' + ' line:\n%s\n>> New line:\n%s\n' + % (lineno, orig_contents[lineno - 1], new_line) + ) + + new_contents[lineno - 1] = new_line + + # Parse the new config file with the PISAConfigParser to see if NSI + # parameters are defined in the `stage.osc` section (if the latter is + # present). If needed, insert appropriate #include in the section + pcp = PISAConfigParser() + missing_section_header = False + try: + pcp.read_string(('\n'.join(new_contents) + '\n').decode('utf-8')) + except MissingSectionHeaderError: + missing_section_header = True + pcp.read_string( + ( + '\n'.join(['[dummy section header]'] + new_contents) + '\n' + ).decode('utf-8') + ) + + if 'stage.osc' in pcp: + keys_containing_eps = [k for k in pcp['stage.osc'].keys() + if '.eps_'.encode('utf-8') in k] + + nsi_params_present = [] + nsi_params_missing = [] + for nsi_param, nsi_param_re in NSI_PARAM_RE_MAP.items(): + found = None + for key_idx, key in enumerate(keys_containing_eps): + if nsi_param_re.match(key): + found = key_idx + nsi_params_present.append(nsi_param) + + if found is None: + nsi_params_missing.append(nsi_param) + else: + # No need to search this key again + keys_containing_eps.pop(found) + + if set(nsi_params_present) == set(NSI_PARAM_RE_MAP.keys()): + all_nsi_params_defined = True + elif set(nsi_params_missing) == set(NSI_PARAM_RE_MAP.keys()): + all_nsi_params_defined = False + else: + raise ValueError('Found a subset of NSI params defined; missing %s' + % str(nsi_params_missing)) + + # NOTE: since for now the contents of nsi_null.cfg are commented out + # (until merging NSI branch), the above check will say NSI params are + # missing if the #include statement was made. So check to see if + # settings/osc/nsi_null.cfg _has_ been included (we can't tell what + # section it is in, but we'll have to just accept that). + # + # We will probably want to remove this stanza as soon as NSI brnach is + # merged, since this is imprecise and can introduce other weird corner + # cases. + rsrc_loc = find_resource('settings/osc/nsi_null.cfg') + for file_iter in pcp.file_iterators: + if rsrc_loc in file_iter.fpaths_processed: + all_nsi_params_defined = True + + if not all_nsi_params_defined and osc_stage_header_line is None: + raise ValueError( + "Found a stage.osc section without NSI params defined (using" + " PISAConfigParser) but could not find the line of the" + " `[stage.osc]` header. This could occur if `[stage.osc]` came" + " from an `#include`'d file. You can manually define the NSI" + " parameters in this file or in the included file e.g. as" + " found in `settings/osc/nsi_null.cfg` or simply add the" + " statement ``#include settings/osc/nsi_null.cfg`` to either" + " file (so long as that statement it falls within the" + " stage.osc section)." + ) + + # Add ``#include settings/osc/nsi_null.cfg`` at top of stage.osc + # section if a stage.osc section is present and no NSI params were + # specified in that section + if not all_nsi_params_defined: + # Add an #include to set all NSI parameters to 0 + new_contents.insert( + osc_stage_header_line + 1, + '#include settings/osc/nsi_null.cfg' + ) + # Add an extra blank line after the #include line + new_contents.insert(osc_stage_header_line + 2, '') + + if not new_contents: + raise ValueError('Empty file after conversion; quitting.') + + # Note that newlines are added but no join is performed for comparison + # against `orig_contents` + new_contents = [line + '\n' for line in new_contents] + + # Now for validation, try to parse the new config file with the + # PISAConfigParser + pcp = PISAConfigParser() + if missing_section_header: + pcp.read_string( + ( + ''.join(['[dummy section header]\n'] + new_contents) + '\n' + ).decode('utf-8') + ) + else: + pcp.read_string((''.join(new_contents)).decode('utf-8')) + + if new_contents == orig_contents: + sys.stdout.write('Nothing modified in the original file (ok!).\n') + return + + if args.validate_only: + raise ValueError( + 'Original config file "%s" would be modfied (and so may be' + ' invalid). Re-run this script without the --validate-only flag to' + ' produce an appropriately-converted config file.' + % args.config[0] + ) + + sys.stdout.write('Writing modified config file to "%s"\n' % out_fpath) + with open(out_fpath, 'w') as outfile: + outfile.writelines(new_contents)
+ + + +if __name__ == '__main__': + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/fit_hypersurfaces.html b/_modules/pisa/scripts/fit_hypersurfaces.html new file mode 100644 index 000000000..54b080d22 --- /dev/null +++ b/_modules/pisa/scripts/fit_hypersurfaces.html @@ -0,0 +1,766 @@ + + + + + + pisa.scripts.fit_hypersurfaces — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.fit_hypersurfaces

+#!/usr/bin/env python
+
+"""
+Fit a hypersurface to discrete systematics datasets -- as specified by a fit config
+file -- and produce a fit file usable by, e.g., the `discr_sys.hypersurfaces` service.
+
+For more details, see `pisa/utils/hypersurface.pu`
+
+A script for making plots from the fit results produced by this file can be found in the
+Fridge (private repository) at
+
+  fridge/analysis/common/scripts/plotting/plot_hypersurface_fits.py
+
+See example fit config files in directory `pisa_examples/resources/discr_sys/`.
+
+
+Config file syntax
+==================
+
+"general" section
+-----------------
+You must define a "general" section which must have at least options "sys_list" and 
+"sys_func_list" and can optionally include options "units" and "combine_regex". You 
+can add more options to the "general" section, but they will be ignored by PISA unless
+they are explicitly referenced elsewhere in your config file. E.g., a "general" 
+section with all three required and optional options (and no more) ::
+
+  [general]
+  sys_list = dom_eff, hole_ice, hole_ice_fwd
+  sys_func_list = linear, exponential, linear
+  units = dimensionless, dimensionless, dimensionless
+  combine_regex = ["nue.*_cc", "numu.*_cc", "nutau.*_cc", ".*_nc"]
+
+If "units" is not specified, units default to "dimensionless" for all systematics. If
+specified, there must be the same number of comma-separated units strings
+(interpret-able by the Pint module) as there are options in the "sys_list".
+
+Note that "combine_regex" should be Python-evaulatable to a string or a sequence of
+strings. Old versions of this script allowed values like ::
+
+  combine_regex = nue.*_cc,numu.*_cc,nutau.*_cc,.*_nc
+
+but unambiguously parsing such a single comma-separated string of one or more regexes
+(which themselves can contian commas) is probably impossible, so this syntax is
+deprecated (a warning is emitted if it is detected) and should be avoided.
+
+"apply_to_all_sets" section
+---------------------------
+You can optionally include an "apply_to_all_sets" section in your config that, true to
+its name, defines options applied to all systematic sets sections in the file. E.g., ::
+
+  [apply_to_all_sets]
+  pipeline_cfg = settings/pipeline/nutau_mc_baseline.cfg
+  remove [discr_sys.hypersurfaces] =
+  set [data.simple_data_loader] data_dict = {
+      'true_energy': 'true_energy',
+      'true_coszen': 'true_coszen',
+      'reco_energy': 'reco_energy',
+      'reco_coszen': 'reco_coszen',
+      'pid': 'pid',
+      'weighted_aeff': 'weighted_aeff',
+      'dunkman_L5': 'dunkman_L5',
+      }
+
+The above sets "pipeline_cfg" for all discr sets, removes the "discr_sys.hypersurfaces"
+service, and redefines the "data_dict" in the "data.simple_data_loader" section. Any
+options defined in the discrete set sections of the config will start with this as their
+configuration. Details of the above syntax are described more below.
+
+"nominal_set" and "sys_set" sections
+------------------------------------
+All other required sections in the config file describe the discrete sets and must
+define a "pipeline_cfg" for that systematics set (whether explicitly in the section or
+via the "apply_to_all_sets" section). A systematics set section either starts with
+"nominal_set" (for one and only one set) or "sys_set" (for all remaining sets), followed
+by a colon and magnitudes of the values of each systematic specified in "general"
+section / "sys_list" option (in the same order as defined there). E.g., continuing the
+example config file defined in the above examples, ::
+
+  [nominal_set : 1.00 , 25 , 0.0]
+  set [data.simple_data_loader] events_file = /path/to/nominal_set.hdf5
+
+  [sys_set : 0.88 , 22 , 0.1]
+  set [data.simple_data_loader] events_file = /path/to/sys_set_1.hdf5
+
+  [sys_set : 1.12 , 28 , 0.2]
+  set [data.simple_data_loader] events_file = /path/to/sys_set_2.hdf5
+
+and so forth. Note that all magnitudes must be specified in the same units specified in
+"general" section / "units" option, or if that option is not specified, all magnitudes
+must represent dimensionless quantities. Also note that the "pipeline_cfg" is already
+defined in the above "apply_to_all_sets" section, so each of these sys set sections
+simply swap out the events_file in that pipeline config file for the appropriate events
+file.
+
+Syntax for modifying the specified "pipeline_cfg"
+-------------------------------------------------
+The following syntax is interpreted if specified in "apply_to_all_sets", "sys_set",
+and/or "nominal_set" sections. Note an "apply_to_all_sets" section must specify a
+"pipeline_cfg" for any of the following syntax to be used.
+
+Define or redefine an option via the "set" keyword followed by the section in square
+brackets, the option, either equals (=) or colon (:), and finally the value to set the
+option to. E.g., "events_file" in config section "data.simple_data_loader" is set to
+"settings/pipeline/example.cfg" via ::
+
+  set [data.simple_data_loader] events_file = settings/pipeline/example.cfg
+
+the section is created if it doesn't exist and the option "events_file" is added to that
+section if it doesn't already exist.
+
+You can create a new section (if it doesn't already exist) via the "set" keyword
+followed by the section in square brackets and either equals (=) or colon (:). Anything
+following the equals/colon is ignored. E.g. to add the "data.simple_data_loader" section
+(if it doesn't already exist), ::
+
+  set [data.simple_data_loader] =
+
+Notes on whitespace
+-------------------
+Whitespace is ignored in section names and in lists, so the following are interpreted
+equivalently ::
+
+  [ sys_set : 0.88 , 22 , 0.1 ]
+  [sys_set:0.88,22,0.1]
+
+Likewise, the following are all equivalent ::
+
+  sys_list = aa,bb,cc
+  sys_list = aa , bb , cc
+
+"""
+
+from __future__ import absolute_import, division, print_function
+
+from argparse import ArgumentParser
+from ast import literal_eval
+from collections import OrderedDict
+from collections.abc import Mapping, Sequence
+import copy
+from io import StringIO
+from os.path import join
+import re
+
+import numpy as np
+from scipy.optimize import curve_fit
+from uncertainties import unumpy as unp
+from uncertainties import ufloat
+
+from pisa import ureg
+from pisa.core.distribution_maker import DistributionMaker
+from pisa.core.map import Map, MapSet
+from pisa.utils.fileio import mkdir, from_file, to_file
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.hypersurface import Hypersurface, HypersurfaceParam, get_hypersurface_file_name
+
+
+__all__ = [
+    # constants
+    "GENERAL_SECTION_NAME",
+    "APPLY_ALL_SECTION_NAME",
+    "COMBINE_REGEX_OPTION",
+    "SYS_LIST_OPTION",
+    "SYS_FUNC_LIST_OPTION",
+    "UNITS_OPTION",
+    "UNITS_SPECIFIER",
+    "SYS_SET_OPTION",
+    "SET_OPTION_RE",
+    "REMOVE_OPTION_RE",
+    # functions
+    "parse_args",
+    "parse_fit_config",
+    "load_and_modify_pipeline_cfg",
+    "create_hypersurfaces",
+    "main",
+]
+
+__author__ = "P. Eller, T. Stuttard, T. Ehrhardt, J.L. Lanfranchi"
+
+__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+GENERAL_SECTION_NAME = "general"
+"""general section name"""
+
+APPLY_ALL_SECTION_NAME = "apply_to_all_sets"
+"""section name that defines pipeline config / options for all discr sets"""
+
+COMBINE_REGEX_OPTION = "combine_regex"
+"""Option in general section to specify map(s) to combine before performing fit"""
+
+SYS_LIST_OPTION = "sys_list"
+"""Option in general section to specify discrete systematics"""
+
+SYS_FUNC_LIST_OPTION = "sys_func_list"
+"""Option in general section to specify functional form of the discrete systematics"""
+
+UNITS_OPTION = "units"
+"""Option in general section to specify units of discrete systematics"""
+
+UNITS_SPECIFIER = "units."
+"""User is allowed to use e.g. <UNITS_SPECIFIER>meter or simply meter in UNITS_OPTION"""
+
+NOMINAL_SET_PFX = "nominal_set"
+"""the section name with this followed by a colon indicates the nominal set"""
+
+SYS_SET_PFX = "sys_set"
+"""section names with this followed by a colon indicate non-nominal systematics sets"""
+
+SYS_SET_OPTION = "pipeline_cfg"
+"""systematics set config file is specified by this option"""
+
+SET_OPTION_RE = re.compile(r"\s*set\s*\[(.*)\]\s*(\S*.*)")
+"""defining a section and/or an option within a section in a pipeline configs is
+specified by following this pattern"""
+
+REMOVE_OPTION_RE = re.compile(r"\s*remove\s*\[(.*)\]\s*(\S*.*)")
+"""modifications to pipeline configs are specified by options following this pattern"""
+
+
+
+[docs] +def parse_args(): + """Parse arguments from command line. + + Returns + ------- + args : namespace + + """ + parser = ArgumentParser(description=main.__doc__) + parser.add_argument( + "-f", + "--fit-cfg", + type=str, + metavar="configfile", + required=True, + help="Settings for the hypersurface fit", + ) + parser.add_argument( + "--tag", type=str, default="deepcore", help="Tag for the filename." + ) + parser.add_argument( + "-o", "--outdir", type=str, required=True, help="Set output directory" + ) + parser.add_argument("-v", action="count", default=None, help="set verbosity level") + args = parser.parse_args() + return args
+ + + +
+[docs] +def parse_fit_config(fit_cfg): + """Perform sanity checks on and parse fit configuration file. + + Parameters + ---------- + fit_cfg : str + path to a fit configuration file + + Returns + ------- + fit_cfg : PISAConfigParser + parsed fit configuration + sys_list : list of str + parsed names of systematic parameters + sys_func_list : list of str + parsed names of systematic parameter functional forms + units_list : list of str + units corresponding to each discrete systematic + combine_regex : list of str + each string is a regular expression for combining pipeline outputs; see + :func:`pisa.core.map.MapSet.combine_regex` for details. + + """ + fit_cfg = from_file(fit_cfg) + no_ws_section_map = {s.strip(): s for s in fit_cfg.sections()} + + if GENERAL_SECTION_NAME not in no_ws_section_map.values(): + raise KeyError('Fit config is missing the "%s" section!' % GENERAL_SECTION_NAME) + + general_section = fit_cfg[GENERAL_SECTION_NAME] + + if SYS_LIST_OPTION not in general_section: + raise KeyError( + "Fit config has to specify systematic parameters as" + ' "%s" option in "%s" section (comma-separated list of names).' + % (SYS_LIST_OPTION, GENERAL_SECTION_NAME) + ) + + if SYS_FUNC_LIST_OPTION not in general_section: + raise KeyError( + "Fit config has to specify systematic parameter functional forms as" + ' "%s" option in "%s" section (comma-separated list of names).' + % (SYS_FUNC_LIST_OPTION, GENERAL_SECTION_NAME) + ) + + sys_list = [s.strip() for s in general_section[SYS_LIST_OPTION].split(",")] + + sys_func_list = [s.strip() for s in general_section[SYS_FUNC_LIST_OPTION].split(",")] + + if UNITS_OPTION in general_section: + units_list = [] + units_specs = ( + general_section[UNITS_OPTION].replace(UNITS_SPECIFIER, "").split(",") + ) + for units_spec in units_specs: + # Make sure units are interpret-able by Pint + try: + ureg.Unit(units_spec) + except: + logging.error( + 'Unit "%s" specified by "%s" option in "general" section is not' + "interpret-able by Pint", + units_spec, + UNITS_OPTION, + ) + raise + units_list.append(units_spec) + else: + units_list = ["dimensionless" for s in sys_list] + logging.warning( + "No %s option found in %s section; assuming systematic parameters are" + " dimensionless", + UNITS_OPTION, + GENERAL_SECTION_NAME, + ) + + if len(units_list) != len(sys_list): + raise ValueError( + '{} units specified by "{}" option but {} systematics specified by "{}"' + "option; must be same number of each.".format( + len(units_list), UNITS_OPTION, len(sys_list), SYS_LIST_OPTION + ) + ) + + logging.info( + "Found systematic parameters %s", + ["{} ({})".format(s, u) for s, u in zip(sys_list, units_list)], + ) + + combine_regex = general_section.get(COMBINE_REGEX_OPTION, None) + if combine_regex: + try: + combine_regex = literal_eval(combine_regex) + except (SyntaxError, ValueError): + logging.warning( + 'Deprecated syntax for "combine_re" (make into a Python-evaluatable' + "sequence of strings instead) :: combine_regex = %s", + combine_regex, + ) + combine_regex = [r.strip() for r in combine_regex.split(",")] + + if APPLY_ALL_SECTION_NAME in no_ws_section_map: + apply_all_section = fit_cfg[no_ws_section_map[APPLY_ALL_SECTION_NAME]] + for no_ws_sname, sname in no_ws_section_map.items(): + if not ( + no_ws_sname.startswith(NOMINAL_SET_PFX) + or no_ws_sname.startswith(SYS_SET_PFX) + ): + continue + sys_set_section = fit_cfg[sname] + for option, val in apply_all_section.items(): + sys_set_section[option] = val + + return fit_cfg, sys_list, sys_func_list, units_list, combine_regex
+ + + +
+[docs] +def load_and_modify_pipeline_cfg(fit_cfg, section): + """Load and modify the pipeline config file as specified in that section of the fit + config. + + Parameters + ---------- + fit_cfg : pisa.utils.config_parser.PISAConfigParser + any subclass of :class:`configparser.RawConfigParser` should work as well + + section : str + name of the section to extract from the `fit_cfg` + + Returns + ------- + pipeline_cfg : pisa.utils.config_parser.PISAConfigParser + pipeline config + + pipeline_cfg_path : str + path to the pipeline config as it is specified in the fit config + + """ + pipeline_cfg_path = fit_cfg.get(section, SYS_SET_OPTION) + other_options = fit_cfg.options(section) + other_options.remove(SYS_SET_OPTION) + + pipeline_cfg = from_file(pipeline_cfg_path) + + # Get a no-whitespace version of the section names + section_map = {s.strip(): s for s in pipeline_cfg.sections()} + + for option in other_options: + set_match = SET_OPTION_RE.match(option) + remove_match = REMOVE_OPTION_RE.match(option) if not set_match else None + if set_match: + section_spec, set_option = set_match.groups() + no_ws_section_spec = section_spec.strip() + set_option = set_option.strip() + if no_ws_section_spec not in section_map: + logging.debug( + 'Adding section [%s] to in-memory copy of pipeline config "%s"', + section_spec, + pipeline_cfg_path, + ) + pipeline_cfg.add_section(section_spec) + section_map[no_ws_section_spec] = section_spec + if set_option: + set_value = fit_cfg.get(section, option).strip() + logging.debug( + 'Setting section [%s] option "%s = %s" in in-memory' + ' copy of pipeline config "%s"', + section_spec, + set_option, + set_value, + pipeline_cfg_path, + ) + pipeline_cfg.set(section_map[no_ws_section_spec], set_option, set_value) + elif remove_match: + section_spec, remove_option = remove_match.groups() + no_ws_section_spec = section_spec.strip() + remove_option = remove_option.strip() + if no_ws_section_spec in section_map: + if remove_option: + logging.debug( + 'Removing section [%s] option "%s" from in-memory copy of' + ' pipeline config "%s"', + section_spec, + remove_option, + pipeline_cfg_path, + ) + pipeline_cfg.remove_option( + section_map[no_ws_section_spec], remove_option + ) + else: + logging.debug( + "Removing section [%s] from in-memory copy of pipeline config" + ' "%s"', + section_spec, + pipeline_cfg_path, + ) + pipeline_cfg.remove_section(section_map[no_ws_section_spec]) + else: + logging.warning( + "Told to remove section [%s] but section does not exist in" + ' pipline config "%s"', + section_spec, + pipeline_cfg_path, + ) + else: + raise ValueError("Unhandled option in fit config: {}".format(option)) + + return pipeline_cfg, pipeline_cfg_path
+ + + +
+[docs] +def create_hypersurfaces(fit_cfg): + """Generate and store mapsets for different discrete systematics sets + (with a single set characterised by a dedicated pipeline configuration) + + Parameters + ---------- + fit_cfg : string + Path to a fit config file + + Returns + ------- + hypersurfaces : OrderedDict + Container with the fitted hypersurface for each map type + + """ + + # + # Parse fit config file + # + + parsed_fit_cfg, sys_list, sys_func_list, units_list, combine_regex = parse_fit_config(fit_cfg) + + + # + # Create the hypersurface params + # + + # Loop over the param names and functional forms and create the params + #TODO Add option to support initial param guesses + params = [ HypersurfaceParam(name=param_name, func_name=param_func_name) for param_name, param_func_name in zip(sys_list, sys_func_list) ] + + + # + # Parse defintion of each dataset + # + + fit_cfg_txt_buf = StringIO() + parsed_fit_cfg.write(fit_cfg_txt_buf) + fit_cfg_txt = fit_cfg_txt_buf.getvalue() + + nominal_pipeline_cfg = None + nominal_param_values = None + sys_pipeline_cfgs = [] + sys_param_values = [] + + # Loop over config + for section in parsed_fit_cfg.sections(): + + no_ws_section = section.strip() + + section_prefix = no_ws_section.split(":")[0].strip() + is_nominal = section_prefix == NOMINAL_SET_PFX + is_dataset = is_nominal or section_prefix == SYS_SET_PFX + + if is_dataset: + + # Parse the list of systematics parameter values from the section name + sys_param_point = tuple(float(x) for x in section.split(":")[1].split(",")) + + if len(sys_param_point) != len(sys_list): + raise ValueError( + "Section heading [{}] specifies {:d} systematic" + " parameter values, but there are {:d} systematics".format( + section, len(sys_param_point), len(sys_list) + ) + ) + + # Parse the config file + parsed_pipeline_cfg, pipeline_cfg_path = load_and_modify_pipeline_cfg( + fit_cfg=parsed_fit_cfg, section=section + ) + + # Store + if is_nominal : + assert nominal_pipeline_cfg is None, "Found multiple nominal dataset definitions" + nominal_pipeline_cfg = parsed_pipeline_cfg + nominal_param_values = sys_param_point + else : + sys_pipeline_cfgs.append(parsed_pipeline_cfg) + sys_param_values.append(sys_param_point) + + # In this loop, nothing to do for general & apply_to_all_sets sections + elif no_ws_section in (GENERAL_SECTION_NAME, APPLY_ALL_SECTION_NAME): + pass + + # Do not allow any other sections in the config + else: + raise ValueError("Invalid section in fit config file: [%s]" % section) + + # Check found stuff + assert nominal_pipeline_cfg is not None, "No nominal dataset definition found" + assert len(sys_pipeline_cfgs) > 0, "No systematics dataset definitions found" + + # Re-format params into a dict, including the param names + nominal_param_values = { name:val for name, val in zip(sys_list,nominal_param_values) } + sys_param_values = [ { name:val for name, val in zip(sys_list,s) } for s in sys_param_values ] + + + # + # Create mapsets + # + + # Get the nominal mapset + nominal_dist_maker = DistributionMaker(nominal_pipeline_cfg) + nominal_mapset = nominal_dist_maker.get_outputs(return_sum=False)[0] + + # Get the systematics mapsets + sys_mapsets = [] + for sys_pipeline_cfg in sys_pipeline_cfgs : + sys_dist_maker = DistributionMaker(sys_pipeline_cfg) + sys_mapset = sys_dist_maker.get_outputs(return_sum=False)[0] + sys_mapsets.append(sys_mapset) + + # Combine maps according to the provided regex, if one was provided + if combine_regex: + logging.info( + "Combining maps according to regular expression(s) %s", combine_regex + ) + nominal_mapset = nominal_mapset.combine_re(combine_regex) + sys_mapsets = [ s.combine_re(combine_regex) for s in sys_mapsets ] + + + # + # Fit the hypersurface + # + + hypersurfaces = OrderedDict() + + # Fit one per map, so loop over them + for map_name in nominal_mapset.names : + + # Create the hypersurface + hypersurface = Hypersurface( + params=params, + initial_intercept=1., # Initial value for intercept + ) + + # Get just the requested map + nominal_map = nominal_mapset[map_name] + sys_maps = [ s[map_name] for s in sys_mapsets ] + + # Perform fit + hypersurface.fit( + nominal_map=nominal_map, + nominal_param_values=nominal_param_values, + sys_maps=sys_maps, + sys_param_values=sys_param_values, + norm=True, + ) + + # Store the result + hypersurfaces[map_name] = hypersurface + + # Done + return hypersurfaces
+ + + + +
+[docs] +def main(): + """Perform a hypersurface fit to discrete systematics sets.""" + + # Get args + args = parse_args() + set_verbosity(args.v) + + # Read in data and fit hypersurfaces to it + hypersurfaces = create_hypersurfaces(fit_cfg=args.fit_cfg) + + # Store as JSON + mkdir(args.outdir) + arbitrary_hypersurface = list(hypersurfaces.values())[0] + output_path = join( args.outdir, get_hypersurface_file_name(arbitrary_hypersurface, args.tag) ) + to_file(hypersurfaces, output_path)
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/make_events_file.html b/_modules/pisa/scripts/make_events_file.html new file mode 100644 index 000000000..7cafac064 --- /dev/null +++ b/_modules/pisa/scripts/make_events_file.html @@ -0,0 +1,888 @@ + + + + + + pisa.scripts.make_events_file — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.make_events_file

+#!/usr/bin/env python
+
+"""
+Take simulated (and reconstructed) HDF5 file(s) (as converted from I3 by
+icecube.hdfwriter.I3HDFTableService) as input and writes out a simplified HDF5
+file for use with PISA.
+"""
+
+
+from __future__ import absolute_import, division
+
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
+from collections import OrderedDict
+from copy import deepcopy
+import os
+
+import numpy as np
+
+from pisa.core.events import Events
+from pisa.utils.data_proc_params import DataProcParams
+from pisa.utils.format import list2hrlist
+from pisa.utils.fileio import expand, mkdir, to_file
+from pisa.utils.flavInt import (FlavIntData, NuFlav, NuFlavIntGroup,
+                                ALL_NUFLAVINTS, ALL_NUINT_TYPES, xlateGroupsStr)
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.mcSimRunSettings import DetMCSimRunsSettings
+from pisa.utils.resources import find_resource
+
+
+__all__ = ['EXAMPLE', 'CMSQ_TO_MSQ', 'EXTRACT_FIELDS', 'OUTPUT_FIELDS',
+           'powerLawIntegral', 'makeEventsFile',
+           'parse_args', 'main']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+EXAMPLE = """
+Example command-line usage:
+
+make_events_file.py
+    --det "PINGU"
+    --proc "V5.1"
+    --run 390 ~/data/390/icetray_hdf5/*.hdf5
+    --run 389 ~/data/389/icetray_hdf5/*.hdf5
+    --run 388 ~/data/388/icetray_hdf5/*.hdf5
+    -vv
+    --outdir /tmp/events/
+"""
+
+
+CMSQ_TO_MSQ = 1.0e-4
+"""Conversion factor: convert from centimeters^2 to meters^2"""
+
+# Default fields to extract from source HDF5 files during processing
+# Note that *_coszen is generated from *_zenith
+EXTRACT_FIELDS = (
+    'true_energy',
+    'true_coszen',
+    'reco_energy',
+    'reco_coszen',
+    'one_weight',
+    'interaction_prob',
+    'pid',
+)
+
+# Default fields to output to destination PISA events HDF5 file
+OUTPUT_FIELDS = (
+    'true_energy',
+    'true_coszen',
+    'reco_energy',
+    'reco_coszen',
+    #'mc_weight',
+    #'mc_weight_per_gev_per_sr',
+    'weighted_aeff',
+    'pid',
+)
+
+
+
+[docs] +def powerLawIntegral(E0, E1, gamma): + import sympy as sym + E = sym.Symbol('E') + I = sym.integrate(E**(-gamma), E) + return I.evalf(subs={E: E1}) - I.evalf(subs={E: E0})
+ + + +
+[docs] +def makeEventsFile(data_files, detector, proc_ver, cut, outdir, + run_settings=None, data_proc_params=None, join=None, + cust_cuts=None, extract_fields=EXTRACT_FIELDS, + output_fields=OUTPUT_FIELDS): + r"""Take the simulated and reconstructed HDF5 file(s) (as converted from I3 + by icecube.hdfwriter.I3HDFTableService) as input and write out a simplified + PISA-standard-format HDF5 file for use in aeff, reco, and/or PID stages. + + Parameters + ---------- + data_files : dict + File paths for finding data files for each run, formatted as: + { + <string run>: <list of file paths>, + <string run>: <list of file paths>, + ... + <string run>: <list of file paths>, + } + + detector : string + Name of the detector (e.g. IceCube, DeepCore, PINGU, etc.) as found in + e.g. mc_sim_run_settings.json and data_proc_params.json files. + + proc_ver + Version of processing applied to the events, as found in e.g. + data_proc_params.json. + + cut + Name of a standard cut to use; must be specified in the relevant + detector/processing version node of the data processing parameters + (file from which the data_proc_params object was instantiated) + + outdir + Directory path in which to store resulting files; will be generated if + it does not already exist (including any parent directories that do not + exist) + + run_settings : string or MCSimRunSettings + Resource location of mc_sim_run_settings.json or an MCSimRunSettings + object instantiated therefrom. + + data_proc_params : string or DataProcParams + Resource location of data_proc_params.json or a DataProcParams object + instantiated therefrom. + + join + String specifying any flavor/interaction types (flavInts) to join + together. Separate flavInts with commas (',') and separate groups + with semicolons (';'). E.g. an acceptable string is: + 'numucc+numubarcc; nuall bar NC, nuall NC' + + cust_cuts + dict with a single DataProcParams cut specification or list of same + (see help for DataProcParams for detailed description of cut spec) + + extract_fields : None or iterable of strings + Field names to extract from source HDF5 file. If None, extract all + fields. + + output_fields : None or iterable of strings + Fields to include in the generated PISA-standard-format events HDF5 + file; note that if 'weighted_aeff' is not preent, effective area will + not be computed. If None, all fields will be written. + + Notes + ----- + Compute "weighted_aeff" field: + + Within each int type (CC or NC), ngen should be added together; + events recorded of that int type then get their one_weight divided by the + total *for that int type only* to obtain the "weighted_aeff" for that + event (even if int types are being grouped/joined together). + + This has the effect that within a group, ... + ... and within an interaction type, effective area is a weighted + average of that of the flavors being combined. E.g. for CC, + + \sum_{run x}\sum_{flav y} (Aeff_{x,y} * ngen_{x,y}) + Aeff_CC = ----------------------------------------------------- , + \sum_{run x}\sum_{flav y} (ngen_{x,y}) + + ... and then across interaction types, the results of the above for + each int type need to be summed together, i.e.: + + Aeff_total = Aeff_CC + Aeff_NC + + Note that each grouping of flavors is calculated with the above math + completely independently from other flavor groupings specified. + + See Justin Lanfranchi's presentation on the PINGU Analysis call, + 2015-10-21, for more details: + https://wikispaces.psu.edu/download/attachments/282040606/meff_report_jllanfranchi_v05_2015-10-21.pdf + + """ + if isinstance(run_settings, str): + run_settings = DetMCSimRunsSettings( + find_resource(run_settings), + detector=detector + ) + assert isinstance(run_settings, DetMCSimRunsSettings) + assert run_settings.detector == detector + + if isinstance(data_proc_params, str): + data_proc_params = DataProcParams( + detector=detector, + proc_ver=proc_ver, + data_proc_params=find_resource(data_proc_params) + ) + assert data_proc_params.detector == detector + assert data_proc_params.proc_ver == proc_ver + + runs = sorted(data_files.keys()) + + all_flavs = [] + flavs_by_run = {} + run_norm_factors = {} + bin_edges = set() + + runs_by_flavint = FlavIntData() + for flavint in runs_by_flavint.flavints: + runs_by_flavint[flavint] = [] + + #ngen_flavint_by_run = {run:FlavIntData() for run in runs} + ##ngen_per_flav_by_run = {run:FlavIntData() for run in runs} + #eint_per_flav_by_run = {run:FlavIntData() for run in runs} + #for run in runs: + # flavints_in_run = run_settings.get_flavints(run=run) + # e_range = run_settings.get_energy_range(run) + # gamma = run_settings.get_spectral_index(run) + # for flavint in flavints_in_run: + # runs_by_flavint[flavint].append(run) + # ngen_flav = run_settings.get_num_gen( + # run=run, flav_or_flavint=flavint, include_physical_fract=True + # ) + # #runs_by_flavint[flavint].append(run) + # #this_flav = flavint. + # #xsec_fract_en_wtd_avg[run][flavint] = \ + # ngen_flavint_by_run[run][flavint] = \ + # xsec.get_xs_ratio_integral( + # flavintgrp0=flavint, + # flavintgrp1=flavint.flav, + # e_range=e_range, + # gamma=gamma, + # average=True + # ) + # xsec_ver = run_settings.get_xsec_version(run=run) + # if xsec_ver_ref is None: + # xsec_ver_ref = xsec_ver + # # An assumption of below logic is that all MC is generated using the + # # same cross sections version. + # # + # # TODO / NOTE: + # # It would be possible to combine runs with different cross sections so + # # long as each (flavor, interaction type) cross sections are + # # weighted-averaged together using weights + # # N_gen_{n,flav+inttype} * E_x^{-gamma_n} / + # # ( \int_{E_min_n}^{E_max_n} E^{-\gamma_n} dE ) + # # where E_x are the energy sample points specified in the cross + # # sections (and hence these must also be identical across all cross + # # sections that get combined, unless interpolation is performed). + # assert xsec_ver == xsec_ver_ref + # #ngen_weighted_energy_integral[str(run)] = powerLawIntegral( + # #flavs_by_run[run] = run_settings.flavs(run) + ##flavs_present = + + detector_geom = run_settings[runs[0]]['geom'] + + # Create Events object to store data + evts = Events() + evts.metadata.update({ + 'detector': run_settings.detector, + 'proc_ver': data_proc_params.proc_ver, + 'geom': detector_geom, + 'runs': runs, + }) + + cuts = [] + if isinstance(cust_cuts, dict): + cust_cuts = [cust_cuts] + if cut is not None: + evts.metadata['cuts'].append(cut) + cuts.append(cut) + if cust_cuts is not None: + for ccut in cust_cuts: + evts.metadata['cuts'].append('custom: ' + ccut['pass_if']) + cuts.append(ccut) + + orig_outdir = outdir + outdir = expand(outdir) + logging.info('Output dir spec\'d: %s', orig_outdir) + if outdir != orig_outdir: + logging.info('Output dir expands to: %s', outdir) + mkdir(outdir) + + detector_label = str(data_proc_params.detector) + proc_label = 'proc_' + str(data_proc_params.proc_ver) + + # What flavints to group together + if join is None or join == '': + grouped = [] + ungrouped = [NuFlavIntGroup(k) for k in ALL_NUFLAVINTS] + groups_label = 'unjoined' + logging.info('Events in the following groups will be joined together:' + ' (none)') + else: + grouped, ungrouped = xlateGroupsStr(join) + evts.metadata['flavints_joined'] = [str(g) for g in grouped] + groups_label = 'joined_G_' + '_G_'.join([str(g) for g in grouped]) + logging.info('Events in the following groups will be joined together: ' + + '; '.join([str(g) for g in grouped])) + + # Find any flavints not included in the above groupings + flavint_groupings = grouped + ungrouped + if len(ungrouped) == 0: + ungrouped = ['(none)'] + logging.info('Events of the following flavints will NOT be joined' + 'together: ' + '; '.join([str(k) for k in ungrouped])) + + # Enforce that flavints composing groups are mutually exclusive + for grp_n, flavintgrp0 in enumerate(flavint_groupings[:-1]): + for flavintgrp1 in flavint_groupings[grp_n+1:]: + assert len(set(flavintgrp0).intersection(set(flavintgrp1))) == 0 + + flavintgrp_names = [str(flavintgrp) for flavintgrp in flavint_groupings] + + # Instantiate storage for all intermediate destination fields; + # The data structure looks like: + # extracted_data[group #][interaction type][field name] = list of data + if extract_fields is None: + extracted_data = [ + { + inttype: {} for inttype in ALL_NUINT_TYPES + } + for _ in flavintgrp_names + ] + else: + extracted_data = [ + { + inttype: {field: [] for field in extract_fields} + for inttype in ALL_NUINT_TYPES + } + for _ in flavintgrp_names + ] + + # Instantiate generated-event counts for destination fields; count + # CClseparately from NC because aeff's for CC & NC add, whereas + # aeffs intra-CC should be weighted-averaged (as for intra-NC) + ngen = [ + {inttype: {} for inttype in ALL_NUINT_TYPES} + for _ in flavintgrp_names + ] + + # Loop through all of the files, retrieving the events, filtering, + # and recording the number of generated events pertinent to + # calculating aeff + filecount = {} + detector_geom = None + bad_files = [] + for run, fnames in data_files.items(): + file_count = 0 + for fname in fnames: + # Retrieve data from all nodes specified in the processing + # settings file + logging.trace('Trying to get data from file %s', fname) + try: + data = data_proc_params.get_data( + fname, run_settings=run_settings + ) + except (ValueError, KeyError, IOError): + logging.warning('Bad file encountered: %s', fname) + bad_files.append(fname) + continue + + file_count += 1 + + # Check to make sure only one run is present in the data + runs_in_data = set(data['run']) + assert len(runs_in_data) == 1, 'Must be just one run in data' + + #run = int(data['run'][0]) + if not run in filecount: + filecount[run] = 0 + filecount[run] += 1 + rs_run = run_settings[run] + + # Record geom; check that geom is consistent with other runs + if detector_geom is None: + detector_geom = rs_run['geom'] + assert rs_run['geom'] == detector_geom, \ + 'All runs\' geometries must match!' + + # Loop through all flavints spec'd for run + for run_flavint in rs_run['flavints']: + barnobar = run_flavint.bar_code + int_type = run_flavint.intType + + # Retrieve this-interaction-type- & this-barnobar-only events + # that also pass cuts. (note that cut names are strings) + intonly_cut_data = data_proc_params.apply_cuts( + data, + cuts=cuts+[str(int_type), str(barnobar)], + return_fields=extract_fields + ) + + # Record the generated count and data for this run/flavor for + # each group to which it's applicable + for grp_n, flavint_group in enumerate(flavint_groupings): + if not run_flavint in flavint_group: + continue + + # Instantiate a field for particles and antiparticles, + # keyed by the output of the bar_code property for each + if not run in ngen[grp_n][int_type]: + ngen[grp_n][int_type][run] = { + NuFlav(12).bar_code: 0, + NuFlav(-12).bar_code: 0, + } + + # Record count only if it hasn't already been recorded + if ngen[grp_n][int_type][run][barnobar] == 0: + # Note that one_weight includes cc/nc:total fraction, + # so DO NOT specify the full flavint here, only flav + # (since one_weight does NOT take bar/nobar fraction, + # it must be included here in the ngen computation) + flav_ngen = run_settings.get_num_gen(run=run, + barnobar=barnobar) + ngen[grp_n][int_type][run][barnobar] = flav_ngen + + # Append the data. Note that extracted_data is: + # extracted_data[group n][int_type][extract field name] = + # list + if extract_fields is None: + for f in intonly_cut_data.keys(): + if f not in extracted_data[grp_n][int_type]: + extracted_data[grp_n][int_type][f] = [] + extracted_data[grp_n][int_type][f].extend( + intonly_cut_data[f] + ) + else: + for f in extract_fields: + extracted_data[grp_n][int_type][f].extend( + intonly_cut_data[f] + ) + logging.info('File count for run %s: %d', run, file_count) + to_file(bad_files, '/tmp/bad_files.json') + + if ((output_fields is None + and (extract_fields is None or 'one_weight' in extract_fields)) + or 'weighted_aeff' in output_fields): + fmtfields = (' '*12+'flavint_group', + 'int type', + ' run', + 'part/anti', + 'part/anti count', + 'aggregate count') + fmt_n = [len(f) for f in fmtfields] + fmt = ' '.join([r'%'+str(n)+r's' for n in fmt_n]) + lines = ' '.join(['-'*n for n in fmt_n]) + logging.info(fmt, fmtfields) + logging.info(lines) + for grp_n, flavint_group in enumerate(flavint_groupings): + for int_type in set([fi.intType for fi in + flavint_group.flavints]): + ngen_it_tot = 0 + for run, run_counts in ngen[grp_n][int_type].items(): + for barnobar, barnobar_counts in run_counts.items(): + ngen_it_tot += barnobar_counts + logging.info( + fmt, flavint_group.simple_str(), int_type, + str(run), barnobar, int(barnobar_counts), + int(ngen_it_tot) + ) + # Convert data to numpy array + if extract_fields is None: + for field in extracted_data[grp_n][int_type].keys(): + extracted_data[grp_n][int_type][field] = \ + np.array(extracted_data[grp_n][int_type][field]) + else: + for field in extract_fields: + extracted_data[grp_n][int_type][field] = \ + np.array(extracted_data[grp_n][int_type][field]) + # Generate weighted_aeff field for this group / int type's data + extracted_data[grp_n][int_type]['weighted_aeff'] = \ + extracted_data[grp_n][int_type]['one_weight'] \ + / ngen_it_tot * CMSQ_TO_MSQ + + # Report file count per run + for run, count in filecount.items(): + logging.info('Files read, run %s: %d', run, count) + ref_num_i3_files = run_settings[run]['num_i3_files'] + if count != ref_num_i3_files: + logging.warning( + 'Run %s, Number of files read (%d) != number of ' + 'source I3 files (%d), which may indicate an error.', + run, count, ref_num_i3_files + ) + + # Generate output data + for flavint in ALL_NUFLAVINTS: + int_type = flavint.intType + for grp_n, flavint_group in enumerate(flavint_groupings): + if not flavint in flavint_group: + logging.trace('flavint %s not in flavint_group %s, passing.', + flavint, flavint_group) + continue + else: + logging.trace( + 'flavint %s **IS** in flavint_group %s, storing.', + flavint, flavint_group + ) + if output_fields is None: + evts[flavint] = extracted_data[grp_n][int_type] + else: + evts[flavint] = {f: extracted_data[grp_n][int_type][f] + for f in output_fields} + + # Generate file name + numerical_runs = [] + alphanumerical_runs = [] + for run in runs: + try: + int(run) + numerical_runs.append(int(run)) + except ValueError: + alphanumerical_runs.append(str(run)) + run_labels = [] + if len(numerical_runs) > 0: + run_labels.append(list2hrlist(numerical_runs)) + if len(alphanumerical_runs) > 0: + run_labels += sorted(alphanumerical_runs) + run_label = 'runs_' + ','.join(run_labels) + geom_label = '' + detector_geom + fname = 'events__' + '__'.join([ + detector_label, + geom_label, + run_label, + proc_label, + groups_label, + ]) + '.hdf5' + + outfpath = os.path.join(outdir, fname) + logging.info('Writing events to %s', outfpath) + + # Save data to output file + evts.save(outfpath)
+ + + +
+[docs] +def parse_args(): + """Get command line arguments""" + parser = ArgumentParser( + description=__doc__ + EXAMPLE, + formatter_class=ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + '--det', + metavar='DETECTOR', + type=str, + required=True, + help='''Detector, e.g. "PINGU" or "DeepCore". This is used as the + top-most key in run_settings.json and data_proc_params.json files.''' + ) + parser.add_argument( + '--proc', + metavar='PROC_VER', + type=str, + required=True, + help='''Processing version applied to simulation; processing versions + are defined with respect to each geometry version. See + data_proc_params.json file for definitions (or edit that file to add + more).''' + ) + + parser.add_argument( + '--run', + metavar='RUN_ID H5_FILE0 H5_FILE1 ...', + type=str, + nargs="+", + action='append', + required=True, + help='nue HDF5 file(s)' + ) + + parser.add_argument( + '--outdir', + metavar='DIR', + type=str, + required=True, + help='directory into which to store resulting HDF5 file' + ) + + parser.add_argument( + '--run-settings', + metavar='JSON_FILE', + type=str, + default='events/mc_sim_run_settings.json', + help='JSON file with reference run settings' + ) + + parser.add_argument( + '--data-proc-params', + metavar='JSON_FILE', + type=str, + default='events/data_proc_params.json', + help='JSON file with reference processing settings' + ) + + # NOTE: + # Removed --join in favor of forcing standard events groupings to be output + # all at once, to ensure all files get generated all the time. Also + # need to implement validation for consistent events file usage in PISA for + # template settings file (i.e., if different files are specified for + # different PISA stages, ensure they all come from the same detector, + # geometry, and processing versions and have events groupings that do not + # lead to erroneous conclusions for the stages they're specified for) + + #parser.add_argument( + # '--join', + # const='nuecc,nuebarcc;numucc,numubarcc;nutaucc,nutaubarcc;' + # 'nuallnc,nuallbarnc', + # default='', + # action='store', + # nargs='?', + # type=str, + # help= \ + # '''Optionally join flavors together to increase statistics for Aeff + # and/or resolutions (aeff and reco stages, respectively). Specifying the + # --join option without an argument joins together: nu_x & + # nu_x_bar CC events together (one set for each of x=e, x=mu, and x=tau), + # and joins nuall NC & nuallbar NC events tegether. If a string + # argument is supplied, this specifies custom groups to join together + # instead. The string must be a semicolon-separated list each field of + # which itself a comma-separated list of event "flavints" (flavor and + # interaction type) to grup together. Any event flavint not included in + # that string will be found individually, i.e., not joined together with + # any other flavors''' + #) + + parser.add_argument( + '--cut', + metavar='CUT_NAME', + type=str, + help='''Name of pre-defined cut to apply. See the specified + --data-proc-params file for definitions for the detector and processing + version you're working with (note that the names of cuts and what these + entail varies by detector and processing version)''' + ) + + parser.add_argument( + '--ccut-pass-if', + metavar='CRITERIA', + type=str, + default='', + help= \ + '''Custom cut: String containing criteria for passing a cut, using + field names specified by the --ccut-fields argument. Standard Python- + and numpy-namespace expressions are allowed as well, since this string + is passed to 'eval'. E.g.: + --ccut-fields="z:MCNeutrino/zenith,l6:my_l6/value" \ + --ccut-pass-if="(l6 == 1) & (z > pi/2)" ''' + ) + parser.add_argument( + '--ccut-fields', + metavar='FIELDS', + type=str, + default='', + help='''Custom cut: String of comma-separated fields, each containing + colon-separated (variable name : HDF5 address) tuples. For example, + specifying: + --ccut-fields="l5:my_l5/value,l6:my_l6/value" + allows for a custom cut to be defined via --ccut-pass-if="(l5 == 1) & + (l6 == 1)"''' + ) + + parser.add_argument( + '--no-aeff', + action='store_true', + help='''Do not compute or include the 'weighted_aeff' field in the + generated PISA events HDF5 file, disallowing use of the file for + effective area parameterizations or the Monte Carlo aeff stage''' + ) + + parser.add_argument( + '--no-pid', + action='store_true', + help='''Do not include the 'pid' field in the generated PISA events + HDF5 file, disallowing use of the file for PID parameterizations or the + Monte Carlo PID stage''' + ) + + parser.add_argument( + '-v', '--verbose', + action='count', + default=0, + help='set verbosity level' + ) + + args = parser.parse_args() + return args
+ + + +
+[docs] +def main(): + args = parse_args() + set_verbosity(args.verbose) + + runs_files = OrderedDict() + for run_info in args.run: + runs_files[run_info[0]] = run_info[1:] + + det = args.det.strip() + proc = args.proc.strip() + run_settings = DetMCSimRunsSettings( + find_resource(args.run_settings), + detector=det + ) + data_proc_params = DataProcParams( + detector=det, + proc_ver=proc, + data_proc_params=find_resource(args.data_proc_params) + ) + + logging.info('Using detector %s, processing version %s.', det, proc) + + extract_fields = deepcopy(EXTRACT_FIELDS) + output_fields = deepcopy(OUTPUT_FIELDS) + + if args.no_pid: + extract_fields = [f for f in extract_fields if f != 'pid'] + output_fields = [f for f in output_fields if f != 'pid'] + + if args.no_aeff: + output_fields = [f for f in output_fields if f != 'weighted_aeff'] + + # Add any custom cuts specified on command line + ccut = None + if args.ccut_pass_if: + ccut = { + 'pass_if': args.ccut_pass_if, + 'fields': args.ccut_fields.split(',') + } + + # One events file will be produced for each of The following flavint + # groupings + groupings = [ + # No events joined together + None, + # CC events unjoined; join nuall NC and nuallbar NC separately (used + # for generating aeff param service's aeff parameterizations) + 'nuallnc,nuallbarnc', + # CC events paried by flav--anti-flav; nuallNC+nuallbarNC all joined + # together; used for reco services (MC and vbwkde) + 'nuecc+nuebarcc,numucc+numubarcc,nutaucc+nutaubarcc,nuallnc+nuallbarnc', + ] + + # Create the events files + for grouping in groupings: + makeEventsFile( + data_files=runs_files, + detector=args.det, + proc_ver=args.proc, + cut=args.cut, + outdir=args.outdir, + run_settings=run_settings, + data_proc_params=data_proc_params, + join=grouping, + cust_cuts=ccut, + extract_fields=None, #extract_fields, + output_fields=None, #output_fields, + )
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/make_nufit_theta23_spline_priors.html b/_modules/pisa/scripts/make_nufit_theta23_spline_priors.html new file mode 100644 index 000000000..4c073fe0b --- /dev/null +++ b/_modules/pisa/scripts/make_nufit_theta23_spline_priors.html @@ -0,0 +1,317 @@ + + + + + + pisa.scripts.make_nufit_theta23_spline_priors — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.make_nufit_theta23_spline_priors

+#! /usr/bin/env python
+
+"""
+Create splines to the NuFit delta-chi2 surfaces for theta23 and output them in
+a format that can be read by PISA to use as a prior on this parameter.
+"""
+
+
+from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter
+import gzip
+import os
+import sys
+
+import numpy as np
+import scipy.interpolate
+
+from pisa.utils.fileio import to_file
+
+
+__all__ = ['extract_vals', 'make_prior_dict', 'main']
+
+__author__ = 'S. Wren'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +def extract_vals(infile, string_of_interest): + readout = False + x = [] + y = [] + for line in infile: + if line.strip().startswith('#'): + if line.strip() == string_of_interest: + readout = True + else: + readout = False + else: + if readout: + vals = line.strip().split(' ') + if len(vals) == 2: + x.append(float(vals[0])) + y.append(float(vals[1])) + + return x, y
+ + + +
+[docs] +def make_prior_dict(f_io=None, f_no=None, f=None): + + if f is not None: + priors = {} + priors["theta23"] = {} + priors["theta23"]["coeffs"] = f[1] + priors["theta23"]["deg"] = f[2] + priors["theta23"]["knots"] = f[0] + priors["theta23"]["kind"] = "spline" + priors["theta23"]["units"] = "radian" + + elif f_io is not None and f_no is not None: + priors = {} + priors["theta23_ih"] = {} + priors["theta23_ih"]["coeffs"] = f_io[1] + priors["theta23_ih"]["deg"] = f_io[2] + priors["theta23_ih"]["knots"] = f_io[0] + priors["theta23_ih"]["kind"] = "spline" + priors["theta23_ih"]["units"] = "radian" + priors["theta23_nh"] = {} + priors["theta23_nh"]["coeffs"] = f_no[1] + priors["theta23_nh"]["deg"] = f_no[2] + priors["theta23_nh"]["knots"] = f_no[0] + priors["theta23_nh"]["kind"] = "spline" + priors["theta23_nh"]["units"] = "radian" + + else: + raise ValueError('No functions passed to save!') + + return priors
+ + + +
+[docs] +def main(): + parser = ArgumentParser(description=__doc__, + formatter_class=ArgumentDefaultsHelpFormatter) + parser.add_argument('-io','--io_chi2_file',type=str,required=True, + help="Inverted Ordering Chi2 file from NuFit") + parser.add_argument('-no','--no_chi2_file',type=str,required=True, + help="Inverted Ordering Chi2 file from NuFit") + parser.add_argument('--shifted', action='store_true', default=False, + help='''Flag if wanting prior which attempts to remove + the ordering prior by subtracting the delta chi2.''') + parser.add_argument('--minimised', action='store_true', default=False, + help='''Flag if wanting prior which attempts to remove + the ordering prior by minimising over both surfaces.''') + parser.add_argument('--outdir', metavar='DIR', type=str, required=True, + help='''Store all output files to this directory. It + is recommended you save them in the priors directory + in the PISA resources.''') + + args = parser.parse_args() + + io_filename, io_fileext = os.path.splitext(args.io_chi2_file) + no_filename, no_fileext = os.path.splitext(args.no_chi2_file) + + if io_fileext != '.gz': + raise ValueError('%s file extension not expected. Please use the file ' + 'as downloaded from the Nu-Fit website.'%io_fileext) + if no_fileext != '.gz': + raise ValueError('%s file extension not expected. Please use the file as ' + 'downloaded directly from the Nu-Fit website.'%no_fileext) + + # Get Nu-Fit version from filenames + NuFitVersion = io_filename.split('/')[-1].split('.')[0] + if NuFitVersion[0].lower() != 'v': + raise ValueError('%s%s input file does not allow for discerning the ' + 'Nu-Fit version directly from the filename. Please ' + 'use the file as downloaded directly from the Nu-Fit ' + 'website.'%(io_filename,io_fileext)) + NO_NuFitVersion = no_filename.split('/')[-1].split('.')[0] + if NuFitVersion != NO_NuFitVersion: + raise ValueError('The NuFit version extracted from the NO and IO files ' + 'do not match. i.e. %s is not the same as %s. Please ' + 'use the same NuFit version for each of the NO and IO ' + 'chi2 surfaces.' + %(NuFitVersion,NO_NuFitVersion)) + + # Add special treatment for NuFit 2.1 since it has two releases + if NuFitVersion == 'v21': + NuFitVersion += io_filename.split('/')[-1].split('-')[1] + + io_infile = gzip.open(args.io_chi2_file) + no_infile = gzip.open(args.no_chi2_file) + + io_s2th23, io_dchi2 = extract_vals( + infile=io_infile, + string_of_interest='# T23 projection: sin^2(theta23) Delta_chi^2' + ) + no_s2th23, no_dchi2 = extract_vals( + infile=no_infile, + string_of_interest='# T23 projection: sin^2(theta23) Delta_chi^2' + ) + + io_th23 = np.arcsin(np.sqrt(np.array(io_s2th23))) + no_th23 = np.arcsin(np.sqrt(np.array(no_s2th23))) + + io_dchi2 = np.array(io_dchi2) + no_dchi2 = np.array(no_dchi2) + + f_io = scipy.interpolate.splrep(io_th23,-io_dchi2/2.0,s=0) + f_no = scipy.interpolate.splrep(no_th23,-no_dchi2/2.0,s=0) + + priors = make_prior_dict(f_io=f_io, + f_no=f_no) + + to_file(priors, os.path.join(args.outdir, + 'nufit%sstandardtheta23splines.json'%NuFitVersion)) + + if args.shifted: + # Make priors where the delta chi2 between the orderings is removed. + # The idea is to remove the prior on the ordering. + + io_shifteddchi2 = io_dchi2 - min(io_dchi2) + no_shifteddchi2 = no_dchi2 - min(no_dchi2) + + f_shiftedio = scipy.interpolate.splrep(io_th23,-io_shifteddchi2/2.0,s=0) + f_shiftedno = scipy.interpolate.splrep(no_th23,-no_shifteddchi2/2.0,s=0) + + shiftedpriors = make_prior_dict(f_io=f_shiftedio, + f_no=f_shiftedno) + + to_file(shiftedpriors, + os.path.join(args.outdir, + 'nufit%sshiftedtheta23splines.json'%NuFitVersion)) + + if args.minimised: + # Make one prior that is the minimum of both of the original chi2 + # surfaces. The idea is to remove the prior on the ordering. + + minchi2 = np.minimum(io_dchi2, no_dchi2) + + # Now just one prior. X values should be the same for both. + f_minimised = scipy.interpolate.splrep(io_th23,-minchi2/2.0,s=0) + + minimisedprior = make_prior_dict(f=f_minimised) + + to_file(minimisedprior, + os.path.join(args.outdir, + 'nufit%sminimisedtheta23spline.json'%NuFitVersion))
+ + +main.__doc__ = __doc__ + + +if __name__ == '__main__': + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/scripts/test_flux_weights.html b/_modules/pisa/scripts/test_flux_weights.html new file mode 100644 index 000000000..87f06c997 --- /dev/null +++ b/_modules/pisa/scripts/test_flux_weights.html @@ -0,0 +1,1822 @@ + + + + + + pisa.scripts.test_flux_weights — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.scripts.test_flux_weights

+#! /usr/bin/env python
+
+"""
+A set of tests on the flux weights calculated by PISA.
+"""
+
+
+from __future__ import absolute_import, division
+
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
+import os
+
+import numpy as np
+from matplotlib import pyplot as plt
+plt.rcParams['text.usetex'] = True
+import matplotlib.colors as colors
+
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.flux_weights import (load_2d_table, calculate_2d_flux_weights,
+                                     PRIMARIES, TEXPRIMARIES, load_3d_table,
+                                     calculate_3d_flux_weights)
+
+__author__ = 'S. Wren'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +def plot_1d_slices(xintvals, yintvals, xtabvals, ytabvals, xtabbins, xlabel, + ylabel, xtext, ytext, text, table_name, save_name, log): + """Test function to show interpolation and tables overlaid in 1D slices. + See main function for how to use this function. + + Parameters + ---------- + xintvals : list + A list of the x points where the spline was evaluated. + yintvals : list + A list of the y points which the spline evaluated to. + xtabvals : list + A list of the x points where the table is defined. + ytabvals : list + A list of the y points where the table is defined. + xtabbins : list + A list of the bin edges. Should have xtabvals as the bin centres. + xlabel : string + A label for the x-axis of the plot. + ylabel : string + A label for the y-axis of the plot. + xtext : float + The position for the text label showing the slice along x. + ytext : float + The position for the text label showing the slice along y. + text : string + The text label showing the slice. + table_name : string + The text label naming the tables used + save_name : string + The place and name to save the plot. + log : bool + A boolean to whether the axes should be made logarithmic. + Will do both. + """ + + plt.plot(xintvals, + yintvals, + color='r', + linewidth=2, + label='IP Interpolation') + plt.hist(xtabvals, + weights=ytabvals, + bins=xtabbins, + color='k', + linewidth=2, + histtype='step', + label=table_name) + plt.xlabel(xlabel, fontsize=20) + plt.ylabel(ylabel, fontsize=20) + if log: + plt.xlim(xtabbins[0], xtabbins[-1]) + plt.xscale("log") + plt.yscale("log") + ymin = min(min(np.log10(yintvals)), min(np.log10(ytabvals))) + ymax = max(max(np.log10(yintvals)), max(np.log10(ytabvals))) + ydiff = ymax - ymin + plt.xlim(min(xtabbins), max(xtabbins)) + plt.ylim(np.power(10, ymin-0.1*ydiff), np.power(10, ymax+0.1*ydiff)) + if 'numu' in save_name: + plt.legend(loc='lower right') + elif 'nue' in save_name: + plt.legend(loc='lower left') + else: + ymin = min(min(yintvals), min(ytabvals)) + ymax = max(max(yintvals), max(ytabvals)) + ydiff = ymax-ymin + plt.xlim(min(xtabbins), max(xtabbins)) + if min(xtabbins) == 0.0 and max(xtabbins) == 360.0: + plt.ylim(ymin-0.1*ydiff, ymax+0.8*ydiff) + else: + plt.ylim(ymin-0.1*ydiff, ymax+0.1*ydiff) + plt.legend(loc='upper right') + plt.figtext(xtext, + ytext, + text, + verticalalignment='center', + horizontalalignment='center', + color='k', + fontsize=24) + plt.savefig(save_name) + plt.close()
+ + + +
+[docs] +def logplot(m, title, ax, clabel, cmap=plt.cm.afmhot, logz=True, + largelabels=False, medlabels=False): + """Simple plotting of a 2D histogram (map)""" + hist = np.ma.masked_invalid(m['map']) + if 'ebins' in m.keys(): + y = m['ebins'] + ylabel = r'Energy (GeV)' + logy = True + if 'czbins' in m.keys(): + x = m['czbins'] + xlabel = r'$\cos\theta_Z$' + else: + x = m['azbins'] + xlabel = r'$\phi_{Az}$ (${}^{\circ}$)' + else: + x = m['czbins'] + xlabel = r'$\cos\theta_Z$' + y = m['azbins'] + ylabel = r'$\phi_{Az}$ (${}^{\circ}$)' + logy = False + X, Y = np.meshgrid(x, y) + if logy: + ax.set_yscale('log') + vmin = hist.min() + vmax = hist.max() + if logz: + pcmesh = ax.pcolormesh(X, Y, hist, + norm=colors.LogNorm(vmin=vmin, vmax=vmax), + cmap=cmap) + else: + pcmesh = ax.pcolormesh(X, Y, hist, + norm=colors.Normalize(vmin=vmin, vmax=vmax), + cmap=cmap) + cbar = plt.colorbar(mappable=pcmesh, ax=ax) + if clabel is not None: + if largelabels: + cbar.set_label(clabel, labelpad=-1, fontsize=36) + cbar.ax.tick_params(labelsize=36) + elif medlabels: + cbar.set_label(clabel, labelpad=-1, fontsize=36) + cbar.ax.tick_params(labelsize=36) + else: + cbar.set_label(clabel, labelpad=-1) + cbar.ax.tick_params(labelsize='large') + if largelabels: + ax.set_xlabel(xlabel, fontsize=36) + ax.set_ylabel(ylabel, labelpad=-3, fontsize=36) + ax.set_title(title, y=1.03, fontsize=36) + plt.tick_params(axis='both', which='major', labelsize=36) + elif medlabels: + ax.set_xlabel(xlabel, fontsize=36) + ax.set_ylabel(ylabel, labelpad=-3, fontsize=36) + ax.set_title(title, y=1.03, fontsize=24) + plt.tick_params(axis='both', which='major', labelsize=36) + else: + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel, labelpad=-3) + ax.set_title(title, y=1.03) + ax.set_xlim(np.min(x), np.max(x)) + ax.set_ylim(np.min(y), np.max(y))
+ + + +
+[docs] +def take_average(interp_map, oversampling): + average_map = interp_map.reshape( + [len(interp_map)/oversampling, + oversampling, + len(interp_map[0])/oversampling, + oversampling] + ).mean(3).mean(1) + return average_map
+ + + +
+[docs] +def do_1d_2d_honda_test(spline_dict, flux_dict, legend_filename, + save_name, outdir, enpow=1): + + czs = np.linspace(-1, 1, 81) + low_ens = 5.0119*np.ones_like(czs) + high_ens = 50.119*np.ones_like(czs) + + ens = np.logspace(-1.025, 4.025, 1020) + upgoing = -0.95*np.ones_like(ens) + downgoing = 0.35*np.ones_like(ens) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + low_en_flux_weights = calculate_2d_flux_weights(low_ens, + czs, + spline_dict[flav], + enpow=enpow) + + high_en_flux_weights = calculate_2d_flux_weights(high_ens, + czs, + spline_dict[flav], + enpow=enpow) + + flux5 = flux_dict[flav].T[np.where(flux_dict['energy'] == 5.0119)][0] + flux50 = flux_dict[flav].T[np.where(flux_dict['energy'] == 50.119)][0] + + plot_1d_slices( + xintvals=czs, + yintvals=low_en_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux5, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.7, + text='Slice at \n 5.0119 GeV', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest5GeV.png'%(save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=czs, + yintvals=high_en_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux50, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.7, + text='Slice at \n 50.119 GeV', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest50GeV.png'%(save_name, flav) + ), + log=False + ) + + upgoing_flux_weights = calculate_2d_flux_weights(ens, + upgoing, + spline_dict[flav], + enpow=enpow) + + downgoing_flux_weights = calculate_2d_flux_weights(ens, + downgoing, + spline_dict[flav], + enpow=enpow) + + upgoing_flux_weights *= np.power(ens, 3) + downgoing_flux_weights *= np.power(ens, 3) + + coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] + coszen_strs = np.array(coszen_strs) + + fluxupgoing = flux_dict[flav][np.where(coszen_strs == '-0.95')][0] + fluxdowngoing = flux_dict[flav][np.where(coszen_strs == '0.35')][0] + + fluxupgoing *= np.power(flux_dict['energy'], 3) + fluxdowngoing *= np.power(flux_dict['energy'], 3) + + if 'numu' in flav: + xtext = 0.68 + ytext = 0.25 + elif 'nue' in flav: + xtext = 0.35 + ytext = 0.25 + + plot_1d_slices( + xintvals=ens, + yintvals=upgoing_flux_weights, + xtabvals=flux_dict['energy'], + ytabvals=fluxupgoing, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=-0.95$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest-0.95cz.png'%(save_name, flav) + ), + log=True + ) + + plot_1d_slices( + xintvals=ens, + yintvals=downgoing_flux_weights, + xtabvals=flux_dict['energy'], + ytabvals=fluxdowngoing, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=0.35$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest0.35cz.png'%(save_name, flav) + ), + log=True + )
+ + + +
+[docs] +def do_2d_2d_honda_test(spline_dict, flux_dict, outdir, ip_checks, + oversample, save_name, title_filename, enpow=1): + + all_ens_bins = np.logspace(-1.025, 4.025, 101*oversample+1) + all_log_ens_bins = np.linspace(-1.025, 4.025, 101*oversample+1) + log_en_bin_width = all_log_ens_bins[1] - all_log_ens_bins[0] + all_ens = np.logspace(all_log_ens_bins[0] + log_en_bin_width/2.0, + all_log_ens_bins[-1] - log_en_bin_width/2.0, + 101*oversample) + all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) + cz_bin_width = all_czs_bins[1] - all_czs_bins[0] + all_czs = np.linspace(all_czs_bins[0] + cz_bin_width/2.0, + all_czs_bins[-1] - cz_bin_width/2.0, + 20*oversample) + + all_ens_mg, all_czs_mg = np.meshgrid(all_ens, all_czs) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + logging.info('Doing 2D verification of %s 2D Honda tables', flav) + + all_flux_weights = calculate_2d_flux_weights(all_ens_mg.flatten(), + all_czs_mg.flatten(), + spline_dict[flav], + enpow=enpow) + + all_flux_weights = np.array(np.split(all_flux_weights, + len(all_czs))) + all_flux_weights_map = {} + all_flux_weights_map['map'] = all_flux_weights.T + all_flux_weights_map['ebins'] = all_ens_bins + all_flux_weights_map['czbins'] = all_czs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=all_flux_weights_map, + title='Finely Interpolated %s Flux'%flavtex, + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + largelabels=True) + + fig.savefig( + os.path.join( + outdir, + '%s_%s2dinterpolation.png'%(save_name, flav) + ) + ) + + if ip_checks: + + logging.info('Doing ip verification of %s 2D Honda tables', flav) + + downsampled_flux_map = {} + downsampled_flux_map['map'] = take_average( + all_flux_weights.T, oversample + ) + downsampled_flux_map['ebins'] = np.logspace(-1.025, 4.025, 102) + downsampled_flux_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + honda_tables = {} + honda_tables['map'] = flux_dict[flav].T + honda_tables['ebins'] = np.logspace(-1.025, 4.025, 102) + honda_tables['czbins'] = np.linspace(-1.0, 1.0, 21) + + diff_map = {} + diff_map['map'] = honda_tables['map']-downsampled_flux_map['map'] + diff_map['ebins'] = np.logspace(-1.025, 4.025, 102) + diff_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + diff_ratio_map = {} + diff_ratio_map['map'] = diff_map['map'] / honda_tables['map'] + diff_ratio_map['ebins'] = np.logspace(-1.025, 4.025, 102) + diff_ratio_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=5, + gridspec_kw=gridspec_kw, + sharex=False, sharey=False, + figsize=(20, 5)) + + logplot(m=all_flux_weights_map, + title='Oversampled by %i'%oversample, + ax=axes[0], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=downsampled_flux_map, + title='Downsampled to Honda Binning', + ax=axes[1], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=honda_tables, + title='Honda Tables', + ax=axes[2], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=diff_map, + title='Difference', + ax=axes[3], + clabel=None, + logz=False) + logplot(m=diff_ratio_map, + title='Percentage Difference', + ax=axes[4], + clabel=None, + logz=False) + + plt.suptitle( + 'Integral Preserving Tests for %s %s Flux Tables' + %(flavtex, title_filename), fontsize=36 + ) + plt.subplots_adjust(top=0.8) + fig.savefig( + os.path.join( + outdir, + '%s_%siptest_fullrange.png'%(save_name, flav) + ) + ) + plt.close(fig.number) + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, + figsize=(12, 10)) + + diff_ratio_map['map'] = diff_ratio_map['map'] * 100.0 + logplot( + m=diff_ratio_map, + title='%s Flux Integral Deviation'%flavtex, + ax=axes, + clabel=r'Ratio to Honda Table Value (\%)', + largelabels=True, + logz=False + ) + + fig.savefig( + os.path.join( + outdir, + '%s_%s2dintegraldeviation.png'%(save_name, flav) + ) + )
+ + + + + +
+[docs] +def do_1d_2d_bartol_test(spline_dict, flux_dict, outdir, enpow=1): + + czs = np.linspace(-1, 1, 81) + low_ens = 4.732*np.ones_like(czs) + high_ens = 44.70*np.ones_like(czs) + + ens = np.logspace(-1, 4, 701) + upgoing = -0.95*np.ones_like(ens) + downgoing = 0.35*np.ones_like(ens) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + low_en_flux_weights = calculate_2d_flux_weights(low_ens, + czs, + spline_dict[flav], + enpow=enpow) + + high_en_flux_weights = calculate_2d_flux_weights(high_ens, + czs, + spline_dict[flav], + enpow=enpow) + + flux5 = flux_dict[flav].T[np.where(flux_dict['energy'] == 4.732)][0] + flux50 = flux_dict[flav].T[np.where(flux_dict['energy'] == 44.70)][0] + + plot_1d_slices( + xintvals=czs, + yintvals=low_en_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux5, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.7, + text='Slice at \n 4.732 GeV', + table_name='Bartol SNO 2004', + save_name=os.path.join( + outdir, 'bartol_%sfluxweightstest5GeV.png'%flav + ), + log=False + ) + + plot_1d_slices( + xintvals=czs, + yintvals=high_en_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux50, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.7, + text='Slice at \n 44.70 GeV', + table_name='Bartol SNO 2004', + save_name=os.path.join( + outdir, 'bartol_%sfluxweightstest50GeV.png'%flav + ), + log=False + ) + + upgoing_flux_weights = calculate_2d_flux_weights(ens, + upgoing, + spline_dict[flav], + enpow=enpow) + + downgoing_flux_weights = calculate_2d_flux_weights(ens, + downgoing, + spline_dict[flav], + enpow=enpow) + + upgoing_flux_weights *= np.power(ens, 3) + downgoing_flux_weights *= np.power(ens, 3) + + coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] + coszen_strs = np.array(coszen_strs) + + fluxupgoing = flux_dict[flav][np.where(coszen_strs == '-0.95')][0] + fluxdowngoing = flux_dict[flav][np.where(coszen_strs == '0.35')][0] + + fluxupgoing *= np.power(flux_dict['energy'], 3) + fluxdowngoing *= np.power(flux_dict['energy'], 3) + + low_log_energy = np.logspace(-1, 1, 41) + high_log_energy = np.logspace(1.1, 4, 30) + xtabbins = np.concatenate( + [low_log_energy, high_log_energy] + ) + + if 'numu' in flav: + xtext = 0.68 + ytext = 0.25 + elif 'nue' in flav: + xtext = 0.35 + ytext = 0.25 + + plot_1d_slices( + xintvals=ens, + yintvals=upgoing_flux_weights, + xtabvals=flux_dict['energy'], + ytabvals=fluxupgoing, + xtabbins=xtabbins, + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=-0.95$', + table_name='Bartol SNO 2004', + save_name=os.path.join( + outdir, 'bartol_%sfluxweightstest-0.95cz.png'%flav + ), + log=True + ) + + plot_1d_slices( + xintvals=ens, + yintvals=downgoing_flux_weights, + xtabvals=flux_dict['energy'], + ytabvals=fluxdowngoing, + xtabbins=xtabbins, + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=0.35$', + table_name='Bartol SNO 2004', + save_name=os.path.join( + outdir, 'bartol_%sfluxweightstest0.35cz.png'%flav + ), + log=True + )
+ + + +
+[docs] +def do_2d_2d_bartol_test(spline_dict, flux_dict, outdir, ip_checks, + oversample, enpow=1): + + all_en_bins_low = np.logspace(-1.0, 1.0, 40*oversample+1) + all_log_en_bins_low = np.linspace(-1.0, 1.0, 40*oversample+1) + log_en_bin_width_low = all_log_en_bins_low[1] - all_log_en_bins_low[0] + all_ens_low = np.logspace( + all_log_en_bins_low[0]+log_en_bin_width_low/2.0, + all_log_en_bins_low[-1]-log_en_bin_width_low/2.0, + 40*oversample + ) + + all_en_bins_high = np.logspace(1.0, 4.0, 30*oversample+1) + all_log_en_bins_high = np.linspace(1.0, 4.0, 30*oversample+1) + log_en_bin_width_high = all_log_en_bins_high[1] - all_log_en_bins_high[0] + all_ens_high = np.logspace( + all_log_en_bins_high[0]+log_en_bin_width_high/2.0, + all_log_en_bins_high[-1]-log_en_bin_width_high/2.0, + 30*oversample + ) + + all_en_bins = [all_en_bins_low, all_en_bins_high] + all_ens = [all_ens_low, all_ens_high] + + all_all_ens_bins = np.concatenate( + ( + np.logspace(-1.0, 1.0, 40*oversample+1), + np.logspace(1.0+log_en_bin_width_high, 4.0, 30*oversample) + ) + ) + + all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) + cz_bin_width = all_czs_bins[1] - all_czs_bins[0] + all_czs = np.linspace( + all_czs_bins[0] + cz_bin_width/2.0, + all_czs_bins[-1] - cz_bin_width/2.0, + 20*oversample + ) + + en_labels = ['3DCalc', '1DCalc'] + + all_fluxes = {} + for flav in PRIMARIES: + all_fluxes[flav] = [] + + for all_en, all_ens_bins, en_label in zip(all_ens, + all_en_bins, + en_labels): + all_ens_mg, all_czs_mg = np.meshgrid(all_en, all_czs) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + logging.info('Doing 2D verification of %s 2D Bartol tables', flav) + logging.info('Doing %s segment', en_label) + + all_flux_weights = calculate_2d_flux_weights(all_ens_mg.flatten(), + all_czs_mg.flatten(), + spline_dict[flav], + enpow=enpow) + + all_flux_weights = np.array(np.split(all_flux_weights, + len(all_czs))) + + if len(all_fluxes[flav]) == 0: + all_fluxes[flav] = all_flux_weights.T + else: + all_fluxes[flav] = np.concatenate((all_fluxes[flav], + all_flux_weights.T)) + + + all_flux_weights_map = {} + all_flux_weights_map['map'] = all_flux_weights.T + all_flux_weights_map['ebins'] = all_ens_bins + all_flux_weights_map['czbins'] = all_czs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=all_flux_weights_map, + title='Finely Interpolated %s Flux'%flavtex, + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + largelabels=True) + + fig.savefig(os.path.join(outdir, + 'bartol_%s_%s2dinterpolation.png'%(en_label, flav))) + + if ip_checks: + + logging.info('Doing ip verification of %s 2D Bartol ' + 'tables', flav) + logging.info('Doing %s segment', en_label) + + bartol_tables = {} + if en_label == '3DCalc': + bartol_tables['map'] = flux_dict[flav].T[:40] + bartol_tables['ebins'] = np.logspace(-1.0, 1.0, 41) + elif en_label == '1DCalc': + bartol_tables['map'] = flux_dict[flav].T[40:] + bartol_tables['ebins'] = np.logspace(1.0, 4.0, 31) + bartol_tables['czbins'] = np.linspace(-1.0, 1.0, 21) + + downsampled_flux_map = {} + downsampled_flux_map['map'] = take_average( + all_flux_weights.T, oversample + ) + downsampled_flux_map['ebins'] = bartol_tables['ebins'] + downsampled_flux_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + diff_map = {} + diff_map['map'] = bartol_tables['map']-downsampled_flux_map['map'] + diff_map['ebins'] = bartol_tables['ebins'] + diff_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + diff_ratio_map = {} + diff_ratio_map['map'] = diff_map['map'] / bartol_tables['map'] + diff_ratio_map['ebins'] = bartol_tables['ebins'] + diff_ratio_map['czbins'] = np.linspace(-1.0, 1.0, 21) + + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=5, + gridspec_kw=gridspec_kw, + sharex=False, sharey=False, + figsize=(20, 5)) + + logplot(m=all_flux_weights_map, + title='Oversampled by %i'%oversample, + ax=axes[0], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=downsampled_flux_map, + title='Downsampled to Bartol Binning', + ax=axes[1], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=bartol_tables, + title='Bartol Tables', + ax=axes[2], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) + logplot(m=diff_map, + title='Difference', + ax=axes[3], + clabel=None, + logz=False) + logplot(m=diff_ratio_map, + title='Percentage Difference', + ax=axes[4], + clabel=None, + logz=False) + + plt.suptitle('Integral Preserving Tests for %s Bartol Sudbury 2015 Flux Tables'%flavtex, fontsize=36) + plt.subplots_adjust(top=0.8) + fig.savefig(os.path.join(outdir, 'bartol_%s_%siptest_fullrange.png'%(en_label, flav))) + plt.close(fig.number) + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, + gridspec_kw=gridspec_kw, + sharex=False, sharey=False, + figsize=(12, 10)) + + diff_ratio_map['map'] = diff_ratio_map['map'] * 100.0 + logplot( + m=diff_ratio_map, + title='%s Flux Integral Deviation'%flavtex, + ax=axes, + clabel=r'Ratio to Bartol Table Value (\%)', + largelabels=True, + logz=False + ) + + fig.savefig( + os.path.join( + outdir, + 'bartol_%s_%s2dintegraldeviation_fullrange.png'%( + en_label, flav) + ) + ) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + all_flux_weights_map = {} + all_flux_weights_map['map'] = all_fluxes[flav] + all_flux_weights_map['ebins'] = all_all_ens_bins + all_flux_weights_map['czbins'] = all_czs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=all_flux_weights_map, + title='Finely Interpolated %s Flux'%flavtex, + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + largelabels=True) + + fig.savefig(os.path.join(outdir, + 'bartol_%s2dinterpolation.png'%flav))
+ + + +
+[docs] +def do_2d_2d_comparisons(honda_spline_dict, bartol_spline_dict, + outdir, oversample, enpow=1): + + all_ens_bins = np.logspace(-1.0, 4.0, 100*oversample+1) + all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) + # need log energy bin width for defining evaluation points + log_en_bin_width = np.linspace(-1.0, 4.0, 100*oversample+1)[1]-np.linspace(-1.0, 4.0, 100*oversample+1)[0] + cz_bin_width = all_czs_bins[1]-all_czs_bins[0] + all_ens = np.logspace(-1.0+log_en_bin_width/2.0, + 4.0-log_en_bin_width/2.0, + 100*oversample) + all_czs = np.linspace(-1.0+cz_bin_width/2.0, + 1.0-cz_bin_width/2.0, + 20*oversample) + + all_ens_mg, all_czs_mg = np.meshgrid(all_ens, all_czs) + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + logging.info('Doing 2D comparisons of %s 2D Honda/Bartol tables', flav) + + honda_flux_weights = calculate_2d_flux_weights( + all_ens_mg.flatten(), + all_czs_mg.flatten(), + honda_spline_dict[flav], + enpow=enpow + ) + bartol_flux_weights = calculate_2d_flux_weights( + all_ens_mg.flatten(), + all_czs_mg.flatten(), + bartol_spline_dict[flav], + enpow=enpow + ) + + honda_flux_weights = np.array(np.split(honda_flux_weights, + len(all_czs))) + bartol_flux_weights = np.array(np.split(bartol_flux_weights, + len(all_czs))) + + honda_flux_weights_map = {} + honda_flux_weights_map['map'] = honda_flux_weights.T + honda_flux_weights_map['ebins'] = all_ens_bins + honda_flux_weights_map['czbins'] = all_czs_bins + + bartol_flux_weights_map = {} + bartol_flux_weights_map['map'] = bartol_flux_weights.T + bartol_flux_weights_map['ebins'] = all_ens_bins + bartol_flux_weights_map['czbins'] = all_czs_bins + + diff_map = {} + diff_map['map'] = honda_flux_weights_map['map']-bartol_flux_weights_map['map'] + diff_map['ebins'] = all_ens_bins + diff_map['czbins'] = all_czs_bins + + diff_ratio_map = {} + diff_ratio_map['map'] = diff_map['map'] / honda_flux_weights_map['map'] + diff_ratio_map['ebins'] = all_ens_bins + diff_ratio_map['czbins'] = all_czs_bins + + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=4, + gridspec_kw=gridspec_kw, + sharex=False, sharey=False, + figsize=(16, 5)) + + logplot(m=honda_flux_weights_map, + title='Honda SNO 2015 %s Flux'%flavtex, + ax=axes[0], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex) + logplot(m=bartol_flux_weights_map, + title='Bartol SNO 2004 %s Flux'%flavtex, + ax=axes[1], + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex) + logplot(m=diff_map, + title='Difference', + ax=axes[2], + clabel=None, + logz=False) + logplot(m=diff_ratio_map, + title='Percentage Difference to Honda', + ax=axes[3], + clabel=None, + logz=False) + + plt.suptitle('Comparisons for %s Honda 2015 and Bartol 2004 Sudbury Flux Tables'%flavtex, fontsize=36) + plt.subplots_adjust(top=0.8) + + fig.savefig(os.path.join(outdir, + 'honda_bartol_%s2dcomparisons.png'%flav))
+ + + +
+[docs] +def do_1d_3d_honda_test(spline_dict, flux_dict, legend_filename, + save_name, outdir, enpow=1): + + czs = np.linspace(-1, 1, 81) + low_ens = 5.0119*np.ones_like(czs) + high_ens = 50.119*np.ones_like(czs) + low_azs = 75.0*np.ones_like(czs)*np.pi/180.0 + high_azs = 285.0*np.ones_like(czs)*np.pi/180.0 + + ens = np.logspace(-1.025, 4.025, 1020) + upgoing = -0.95*np.ones_like(ens) + downgoing = 0.35*np.ones_like(ens) + low_azs_two = 75.0*np.ones_like(ens)*np.pi/180.0 + high_azs_two = 285.0*np.ones_like(ens)*np.pi/180.0 + + azs = np.linspace(0.0, 360.0, 121)*np.pi/180.0 + low_ens_two = 5.0119*np.ones_like(azs) + high_ens_two = 50.119*np.ones_like(azs) + upgoing_two = -0.95*np.ones_like(azs) + downgoing_two = 0.35*np.ones_like(azs) + + lin_azs = [True, False] + name_additions = ['lin_az', 'ip_az'] + + for lin_az, name_addition in zip(lin_azs, name_additions): + + new_save_name = save_name + '_%s'%name_addition + + for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): + + low_en_low_az_flux_weights = calculate_3d_flux_weights( + low_ens, + czs, + low_azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + high_en_low_az_flux_weights = calculate_3d_flux_weights( + high_ens, + czs, + low_azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + low_en_high_az_flux_weights = calculate_3d_flux_weights( + low_ens, + czs, + high_azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + high_en_high_az_flux_weights = calculate_3d_flux_weights( + high_ens, + czs, + high_azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + flux5lowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50lowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + flux5highaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50highaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + plot_1d_slices( + xintvals=czs, + yintvals=low_en_low_az_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux5lowaz, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text='Slice at\n5.0119 GeV\n' + r'$\phi_{Az}=75^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest5GeV75Az.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=czs, + yintvals=high_en_low_az_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux50lowaz, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text='Slice at\n50.119 GeV\n' + r'$\phi_{Az}=75^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest50GeV75Az.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=czs, + yintvals=low_en_high_az_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux5highaz, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text='Slice at\n5.0119 GeV\n' + r'$\phi_{Az}=285^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest5GeV285Az.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=czs, + yintvals=high_en_high_az_flux_weights, + xtabvals=flux_dict['coszen'], + ytabvals=flux50highaz, + xtabbins=np.linspace(-1, 1, 21), + xlabel=r'$\cos\theta_Z$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text='Slice at\n50.119 GeV\n' + r'$\phi_{Az}=285^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest50GeV285Az.png'%(new_save_name, flav) + ), + log=False + ) + + upgoing_flux_weights_low_azs = calculate_3d_flux_weights( + ens, + upgoing, + low_azs_two, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + downgoing_flux_weights_low_azs = calculate_3d_flux_weights( + ens, + downgoing, + low_azs_two, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + upgoing_flux_weights_high_azs = calculate_3d_flux_weights( + ens, + upgoing, + high_azs_two, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + downgoing_flux_weights_high_azs = calculate_3d_flux_weights( + ens, + downgoing, + high_azs_two, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + upgoing_flux_weights_low_azs *= np.power(ens, 3) + downgoing_flux_weights_low_azs *= np.power(ens, 3) + upgoing_flux_weights_high_azs *= np.power(ens, 3) + downgoing_flux_weights_high_azs *= np.power(ens, 3) + + coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] + coszen_strs = np.array(coszen_strs) + + flux5lowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50lowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + flux5highaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50highaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + fluxupgoinglowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0].T[ + np.where(coszen_strs == '-0.95')][0] + fluxdowngoinglowaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 75.0)][0].T[ + np.where(coszen_strs == '0.35')][0] + fluxupgoinghighaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0].T[ + np.where(coszen_strs == '-0.95')][0] + fluxdowngoinghighaz = flux_dict[flav][ + np.where(flux_dict['azimuth'] == 285.0)][0].T[ + np.where(coszen_strs == '0.35')][0] + + fluxupgoinglowaz *= np.power(flux_dict['energy'], 3) + fluxdowngoinglowaz *= np.power(flux_dict['energy'], 3) + fluxupgoinghighaz *= np.power(flux_dict['energy'], 3) + fluxdowngoinghighaz *= np.power(flux_dict['energy'], 3) + + if 'numu' in flav: + xtext = 0.68 + ytext = 0.28 + elif 'nue' in flav: + xtext = 0.35 + ytext = 0.28 + + plot_1d_slices( + xintvals=ens, + yintvals=upgoing_flux_weights_low_azs, + xtabvals=flux_dict['energy'], + ytabvals=fluxupgoinglowaz, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=-0.95$'+'\n'+r'$\phi_{Az}=75^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest-0.95cz75Az.png'%(new_save_name, flav) + ), + log=True + ) + + plot_1d_slices( + xintvals=ens, + yintvals=downgoing_flux_weights_low_azs, + xtabvals=flux_dict['energy'], + ytabvals=fluxdowngoinglowaz, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=0.35$'+'\n'+r'$\phi_{Az}=75^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest0.35cz75Az.png'%(new_save_name, flav) + ), + log=True + ) + + plot_1d_slices( + xintvals=ens, + yintvals=upgoing_flux_weights_high_azs, + xtabvals=flux_dict['energy'], + ytabvals=fluxupgoinghighaz, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=-0.95$'+'\n'+r'$\phi_{Az}=285^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest-0.95cz285Az.png'%(new_save_name, flav) + ), + log=True + ) + + plot_1d_slices( + xintvals=ens, + yintvals=downgoing_flux_weights_high_azs, + xtabvals=flux_dict['energy'], + ytabvals=fluxdowngoinghighaz, + xtabbins=np.logspace(-1.025, 4.025, 102), + xlabel='Neutrino Energy (GeV)', + ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, + xtext=xtext, + ytext=ytext, + text=r'Slice at $\cos\theta_Z=0.35$'+'\n'+r'$\phi_{Az}=285^{\circ}$', + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest0.35cz285Az.png'%(new_save_name, flav) + ), + log=True + ) + + low_en_upgoing_flux_weights = calculate_3d_flux_weights( + low_ens_two, + upgoing_two, + azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + high_en_upgoing_flux_weights = calculate_3d_flux_weights( + high_ens_two, + upgoing_two, + azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + low_en_downgoing_flux_weights = calculate_3d_flux_weights( + low_ens_two, + downgoing_two, + azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + high_en_downgoing_flux_weights = calculate_3d_flux_weights( + high_ens_two, + downgoing_two, + azs, + spline_dict[flav], + enpow=enpow, + az_linear=lin_az + ) + + flux5downgoing = flux_dict[flav].T[ + np.where(flux_dict['coszen'] == 0.35)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50downgoing = flux_dict[flav].T[ + np.where(flux_dict['coszen'] == 0.35)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + flux5upgoing = flux_dict[flav].T[ + np.where(flux_dict['coszen'] == -0.95)][0][ + np.where(flux_dict['energy'] == 5.0119)][0] + flux50upgoing = flux_dict[flav].T[ + np.where(flux_dict['coszen'] == -0.95)][0][ + np.where(flux_dict['energy'] == 50.119)][0] + + plot_1d_slices( + xintvals=np.linspace(0.0, 360.0, 121), + yintvals=low_en_upgoing_flux_weights, + xtabvals=flux_dict['azimuth'], + ytabvals=flux5upgoing, + xtabbins=np.linspace(0.0, 360.0, 13), + xlabel=r'$\phi_{Az}$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text="Slice at \n 5.0119 GeV \n"+r" $\cos\theta_Z=-0.95$", + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest5GeV-0.95cz.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=np.linspace(0.0, 360.0, 121), + yintvals=high_en_upgoing_flux_weights, + xtabvals=flux_dict['azimuth'], + ytabvals=flux50upgoing, + xtabbins=np.linspace(0.0, 360.0, 13), + xlabel=r'$\phi_{Az}$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text="Slice at\n50.119 GeV\n"+r"$\cos\theta_Z=-0.95$", + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest50GeV-0.95cz.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=np.linspace(0.0, 360.0, 121), + yintvals=low_en_downgoing_flux_weights, + xtabvals=flux_dict['azimuth'], + ytabvals=flux5downgoing, + xtabbins=np.linspace(0.0, 360.0, 13), + xlabel=r'$\phi_{Az}$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text="Slice at\n5.0119 GeV\n" + r"$\cos\theta_Z=0.35$", + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest5GeV0.35cz.png'%(new_save_name, flav) + ), + log=False + ) + + plot_1d_slices( + xintvals=np.linspace(0.0, 360.0, 121), + yintvals=high_en_downgoing_flux_weights, + xtabvals=flux_dict['azimuth'], + ytabvals=flux50downgoing, + xtabbins=np.linspace(0.0, 360.0, 13), + xlabel=r'$\phi_{Az}$', + ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + xtext=0.75, + ytext=0.68, + text="Slice at \n 50.119 GeV \n"+r"$\cos\theta_Z=0.35$", + table_name=legend_filename, + save_name=os.path.join( + outdir, '%s_%sfluxweightstest50GeV0.35cz.png'%(new_save_name, flav) + ), + log=False + )
+ + + +
+[docs] +def do_2d_3d_honda_test(spline_dict, flux_dict, outdir, oversample, save_name, + title_filename, flav, flavtex, enpow=1): + + all_ens_bins = np.logspace(-1.025, 4.025, 101*oversample+1) + all_log_ens_bins = np.linspace(-1.025, 4.025, 101*oversample+1) + log_en_bin_width = all_log_ens_bins[1] - all_log_ens_bins[0] + all_ens = np.logspace(all_log_ens_bins[0] + log_en_bin_width/2.0, + all_log_ens_bins[-1] - log_en_bin_width/2.0, + 101*oversample) + all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) + cz_bin_width = all_czs_bins[1] - all_czs_bins[0] + all_czs = np.linspace(all_czs_bins[0] + cz_bin_width/2.0, + all_czs_bins[-1] - cz_bin_width/2.0, + 20*oversample) + all_azs_bins = np.linspace(0.0, 360.0, 12*oversample+1) + az_bin_width = all_azs_bins[1] - all_azs_bins[0] + all_azs = np.linspace(all_azs_bins[0] + az_bin_width/2.0, + all_azs_bins[-1] - az_bin_width/2.0, + 12*oversample)*np.pi/180.0 + + all_ens_czs_mg, all_czs_ens_mg = np.meshgrid(all_ens, all_czs) + az_slice = (45.0*np.pi/180.0)*np.ones_like(all_ens_czs_mg) + all_ens_azs_mg, all_azs_ens_mg = np.meshgrid(all_ens, all_azs) + cz_slice = -0.15*np.ones_like(all_ens_azs_mg) + all_czs_azs_mg, all_azs_czs_mg = np.meshgrid(all_czs, all_azs) + en_slice = 5.0119*np.ones_like(all_czs_azs_mg) + + logging.info('Doing 2D verification of %s 3D Honda tables', flav) + + ens_czs_az45_flux_weights = calculate_3d_flux_weights( + all_ens_czs_mg.flatten(), + all_czs_ens_mg.flatten(), + az_slice.flatten(), + spline_dict[flav], + enpow=enpow + ) + + ens_czs_az45_flux_weights = np.array( + np.split( + ens_czs_az45_flux_weights, + len(all_czs) + ) + ) + ens_czs_az45_flux_weights_map = {} + ens_czs_az45_flux_weights_map['map'] = ens_czs_az45_flux_weights.T + ens_czs_az45_flux_weights_map['ebins'] = all_ens_bins + ens_czs_az45_flux_weights_map['czbins'] = all_czs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=ens_czs_az45_flux_weights_map, + title=('Finely Interpolated %s Flux '%flavtex + + r'(slice at $\phi_{Az}=45^{\circ}$)'), + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + medlabels=True) + + fig.savefig( + os.path.join( + outdir, + '%s_az45_%s2dinterpolation.png'%(save_name, flav) + ) + ) + + ens_czm015_azs_flux_weights = calculate_3d_flux_weights( + all_ens_azs_mg.flatten(), + cz_slice.flatten(), + all_azs_ens_mg.flatten(), + spline_dict[flav], + enpow=enpow + ) + + ens_czm015_azs_flux_weights = np.array( + np.split( + ens_czm015_azs_flux_weights, + len(all_azs) + ) + ) + ens_czm015_azs_flux_weights_map = {} + ens_czm015_azs_flux_weights_map['map'] = ens_czm015_azs_flux_weights.T + ens_czm015_azs_flux_weights_map['ebins'] = all_ens_bins + ens_czm015_azs_flux_weights_map['azbins'] = all_azs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=ens_czm015_azs_flux_weights_map, + title=('Finely Interpolated %s Flux '%flavtex + + r'(slice at $\cos\theta_Z=-0.15$)'), + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + medlabels=True) + + fig.savefig( + os.path.join( + outdir, + '%s_cz-0.15_%s2dinterpolation.png'%(save_name, flav) + ) + ) + + en5_czs_azs_flux_weights = calculate_3d_flux_weights( + en_slice.flatten(), + all_czs_azs_mg.flatten(), + all_azs_czs_mg.flatten(), + spline_dict[flav], + enpow=enpow + ) + + en5_czs_azs_flux_weights = np.array( + np.split( + en5_czs_azs_flux_weights, + len(all_azs) + ) + ) + en5_czs_azs_flux_weights_map = {} + en5_czs_azs_flux_weights_map['map'] = en5_czs_azs_flux_weights + en5_czs_azs_flux_weights_map['czbins'] = all_czs_bins + en5_czs_azs_flux_weights_map['azbins'] = all_azs_bins + + gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(12, 10)) + + logplot(m=en5_czs_azs_flux_weights_map, + title=('Finely Interpolated %s Flux '%flavtex + + r'(slice at $E_{\nu}=5.0119$ GeV)'), + ax=axes, + clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, + medlabels=True, + logz=False) + + fig.savefig( + os.path.join( + outdir, + '%s_en5_%s2dinterpolation.png'%(save_name, flav) + ) + )
+ + + +
+[docs] +def main(): + parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) + parser.add_argument('--flux-file-2d', type=str, + default=None, + help='''2D flux file you want to run tests on. If one + is not specified then no 2D tests will be done.''') + parser.add_argument('--flux-file-3d', type=str, + default=None, + help='''3D flux file you want to run tests on. If one + is not specified then no 3D tests will be done.''') + parser.add_argument('--onedim-checks', action='store_true', + help='''Run verifications on 1D slices.''') + parser.add_argument('--twodim-checks', action='store_true', + help='''Make finely interpolated 2D plots. + WARNING - THESE ARE SLOW.''') + parser.add_argument('--ip-checks', action='store_true', + help='''Run checks on integral-preserving nature. + WARNING - THESE ARE VERY SLOW.''') + parser.add_argument('--comparisons', action='store_true', + help='''Run comparisons between a Bartol and Honda + flux file. WARNING - ALSO VERY SLOW.''') + parser.add_argument('--oversample', type=int, default=10, + help='''Integer to oversample for integral-preserving + checks and comparisons between flux files.''') + parser.add_argument('--enpow', type=int, default=1, + help='''Power of energy to use in making the energy + splines i.e. flux * (energy**enpow).''') + parser.add_argument('--ip-az', action='store_true', + help='''Perform the interpolation in the azimuthal + dimension with the integral-preserving algorithm. + NOTE - THIS IS NOT RECOMMENDED.''') + parser.add_argument('--flavor', type=str, default=None, + help='''Choose a flavor to perform the tests on. This + is necessary for the 3D 2D and ip checks since they + take so much memory otherwise...''') + parser.add_argument('--outdir', metavar='DIR', type=str, required=True, + help='''Store all output plots to this directory.''') + parser.add_argument('-v', action='count', default=None, + help='set verbosity level') + + args = parser.parse_args() + set_verbosity(args.v) + + if not os.path.exists(args.outdir): + logging.info("Making output directory %s", args.outdir) + os.makedirs(args.outdir) + + if (args.ip_checks) and (not args.twodim_checks): + logging.info( + "You have requested to perform the integral-preserving checks and" + " so the two dimensional checks will be performed too (this adds" + " nothing extra to the computing time)." + ) + args.twodim_checks = True + + if args.flux_file_2d is not None: + + if ('honda' not in args.flux_file_2d) and \ + ('bartol' not in args.flux_file_2d): + raise ValueError('Type of flux file not recognised.') + + spline_dict_2d, flux_dict_2d = load_2d_table( + args.flux_file_2d, + enpow=args.enpow, + return_table=True + ) + + if 'honda' in args.flux_file_2d: + + flux_file_2d_name = args.flux_file_2d.split('/')[-1] + flux_file_2d_bits = flux_file_2d_name.split('-') + year = flux_file_2d_bits[1] + site = flux_file_2d_bits[2] + + title_filename = 'Honda' + legend_filename = 'Honda' + + if site == 'spl': + title_filename += ' South Pole' + legend_filename += ' SPL' + elif site == 'sno': + title_filename += ' Sudbury' + legend_filename += ' SNO' + else: + logging.warning( + 'Don\'t know what to do with site %s.' + 'Omitting from titles', site + ) + + title_filename += ' %s'%year + legend_filename += ' %s'%year + save_name = 'honda_2d_%s_%s'%(site, year) + + if args.onedim_checks: + do_1d_2d_honda_test( + spline_dict=spline_dict_2d, + flux_dict=flux_dict_2d, + legend_filename=legend_filename, + save_name=save_name, + outdir=args.outdir, + enpow=args.enpow + ) + + if args.twodim_checks: + do_2d_2d_honda_test( + spline_dict=spline_dict_2d, + flux_dict=flux_dict_2d, + outdir=args.outdir, + ip_checks=args.ip_checks, + oversample=args.oversample, + save_name=save_name, + title_filename=title_filename, + enpow=args.enpow + ) + + else: + + if args.onedim_checks: + do_1d_2d_bartol_test( + spline_dict=spline_dict_2d, + flux_dict=flux_dict_2d, + outdir=args.outdir, + enpow=args.enpow + ) + + if args.twodim_checks: + do_2d_2d_bartol_test( + spline_dict=spline_dict_2d, + flux_dict=flux_dict_2d, + outdir=args.outdir, + ip_checks=args.ip_checks, + oversample=args.oversample, + enpow=args.enpow + ) + + if args.flux_file_3d is not None: + + spline_dict_3d, flux_dict_3d = load_3d_table( + args.flux_file_3d, + enpow=args.enpow, + return_table=True + ) + + flux_file_3d_name = args.flux_file_3d.split('/')[-1] + flux_file_3d_bits = flux_file_3d_name.split('-') + year = flux_file_3d_bits[1] + site = flux_file_3d_bits[2] + + title_filename = 'Honda' + legend_filename = 'Honda' + + if site == 'spl': + title_filename += ' South Pole' + legend_filename += ' SPL' + elif site == 'sno': + title_filename += ' Sudbury' + legend_filename += ' SNO' + else: + logging.warning( + 'Don\'t know what to do with site %s.' + 'Omitting from titles', site + ) + + title_filename += ' %s'%year + legend_filename += ' %s'%year + save_name = 'honda_3d_%s_%s'%(site, year) + + if args.onedim_checks: + do_1d_3d_honda_test( + spline_dict=spline_dict_3d, + flux_dict=flux_dict_3d, + legend_filename=legend_filename, + save_name=save_name, + outdir=args.outdir, + enpow=args.enpow + ) + + if args.twodim_checks: + if args.flavor is None: + raise ValueError('You must specify a flavor for these tests!') + if args.flavor not in PRIMARIES: + raise ValueError('Invalid flavor chosen. Please specify one ' + 'from the following: %s'%PRIMARIES) + flavortex = TEXPRIMARIES[PRIMARIES.index(args.flavor)] + do_2d_3d_honda_test( + spline_dict=spline_dict_3d, + flux_dict=flux_dict_3d, + outdir=args.outdir, + oversample=args.oversample, + save_name=save_name, + title_filename=title_filename, + flav=args.flavor, + flavtex=flavortex, + enpow=args.enpow + ) + + if args.comparisons: + + logging.warning('Comparisons will be of Honda 2015 SNO and ' + 'Bartol 2004 SNO 2D tables regardless of what you set ' + 'in the flux_file argument(s).') + + honda_spline_dict_2d = load_2d_table( + 'flux/honda-2015-sno-solmax-aa.d', + enpow=args.enpow + ) + + bartol_spline_dict_2d = load_2d_table( + 'flux/bartol-2004-sno-solmax-aa.d', + enpow=args.enpow + ) + + do_2d_2d_comparisons( + honda_spline_dict=honda_spline_dict_2d, + bartol_spline_dict=bartol_spline_dict_2d, + outdir=args.outdir, + oversample=args.oversample, + enpow=args.enpow + )
+ + + +if __name__ == '__main__': + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/absorption/earth_absorption.html b/_modules/pisa/stages/absorption/earth_absorption.html new file mode 100644 index 000000000..f1d5899b5 --- /dev/null +++ b/_modules/pisa/stages/absorption/earth_absorption.html @@ -0,0 +1,372 @@ + + + + + + pisa.stages.absorption.earth_absorption — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.absorption.earth_absorption

+"""
+PISA pi stage for the calculation of earth layers and survival probabilities.
+
+The stage calculates first the depth of a water column that is mass-equivalent
+to the path traversed by the neutrino through the earth. This is done
+using the same Layers module that is also used for oscillation.
+The survival probability is then calculated from the average cross-section
+with protons and neutrons.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import math
+
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa import ureg
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.stages.osc.layers import Layers
+from pisa.utils.resources import find_resource
+
+__author__ = 'A. Trettin'
+
+__license__ = '''Copyright (c) 2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+FLAV_BAR_STR_MAPPING = {
+    (0, -1): "e_bar",
+    (0, +1): "e",
+    (1, -1): "mu_bar",
+    (1, +1): "mu",
+    (2, -1): "tau_bar",
+    (2, +1): "tau",
+}
+"""
+Mapping from flav and nubar container content to
+the string for this neutrino in the ROOT file.
+"""
+
+
+
+[docs] +class earth_absorption(Stage): + """ + earth absorption PISA Pi class + + Parameters + ---------- + earth_model : str + PREM file path + xsec_file : str + path to ROOT file containing cross-sections + detector_depth : quantity (distance), optional + detector depth + prop_height : quantity (distance), optional + height of neutrino production in the atmosphere + + """ + def __init__( + self, + earth_model, + xsec_file, + detector_depth=2.*ureg.km, + prop_height=20.*ureg.km, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + + self.layers = None + self.xsroot = None + self.earth_model = earth_model + self.xsec_file = xsec_file + self.detector_depth = detector_depth.m_as('km') + self.prop_height = prop_height.m_as('km') + # this does nothing for speed, but makes for convenient numpy style broadcasting + # TODO: Use numba vectorization (not sure how that works with splines) + self.calculate_xsections = np.vectorize(self.calculate_xsections) + +
+[docs] + def setup_function(self): + import ROOT + # setup the layers + earth_model = find_resource(self.earth_model) + self.layers = Layers(earth_model, self.detector_depth, self.prop_height) + # This is a bit hacky, but setting the electron density to 1. + # gives us the total density of matter, which is what we want. + self.layers.setElecFrac(1., 1., 1.) + + # setup cross-sections + self.xsroot = ROOT.TFile(self.xsec_file) + # set the correct data mode + self.data.representation = self.calc_mode + + # --- calculate the layers --- + if self.data.is_map: + # layers don't care about flavor + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + for container in self.data: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) + container['rho_int'] = np.empty((container.size), dtype=FTYPE) + + container.mark_changed('densities') + container.mark_changed('distances') + container.mark_changed('rho_int') + # don't forget to un-link everything again + self.data.unlink_containers() + + # --- setup cross section and survival probability --- + if self.data.is_map: + # The cross-sections do not depend on nc/cc, so we can at least link those containers + self.data.link_containers('nue', ['nue_cc', 'nue_nc']) + self.data.link_containers('nuebar', ['nuebar_cc', 'nuebar_nc']) + self.data.link_containers('numu', ['numu_cc', 'numu_nc']) + self.data.link_containers('numubar', ['numubar_cc', 'numubar_nc']) + self.data.link_containers('nutau', ['nutau_cc', 'nutau_nc']) + self.data.link_containers('nutaubar', ['nutaubar_cc', 'nutaubar_nc']) + for container in self.data: + container['xsection'] = np.empty((container.size), dtype=FTYPE) + container['survival_prob'] = np.empty((container.size), dtype=FTYPE) + self.data.unlink_containers()
+ + +
+[docs] + @profile + def compute_function(self): + # --- calculate the integrated density in the layers --- + if self.data.is_map: + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + for container in self.data: + calculate_integrated_rho(container['distances'], + container['densities'], + out=container['rho_int'] + ) + container.mark_changed('rho_int') + # don't forget to un-link everything again + self.data.unlink_containers() + + # --- calculate survival probability --- + if self.data.is_map: + # The cross-sections do not depend on nc/cc, so we can at least link those containers + self.data.link_containers('nue', ['nue_cc', 'nue_nc']) + self.data.link_containers('nuebar', ['nuebar_cc', 'nuebar_nc']) + self.data.link_containers('numu', ['numu_cc', 'numu_nc']) + self.data.link_containers('numubar', ['numubar_cc', 'numubar_nc']) + self.data.link_containers('nutau', ['nutau_cc', 'nutau_nc']) + self.data.link_containers('nutaubar', ['nutaubar_cc', 'nutaubar_nc']) + + for container in self.data: + container['xsection'] = self.calculate_xsections(container['flav'], + container['nubar'], + container['true_energy'] + ) + container.mark_changed('xsection') + calculate_survivalprob(container['rho_int'], + container['xsection'], + out=container['survival_prob'] + ) + container.mark_changed('survival_prob') + self.data.unlink_containers()
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container['weights'] *= container['survival_prob']
+ + +
+[docs] + def calculate_xsections(self, flav, nubar, energy): + '''Calculates the cross-sections on isoscalar targets. + The result is returned in cm^2. The xsection on one + target is calculated by taking the xsection for O16 + and dividing it by 16. + ''' + flavor = FLAV_BAR_STR_MAPPING[(flav, nubar)] + return (self.xsroot.Get('nu_'+flavor+'_O16').Get('tot_cc').Eval(energy)+ + self.xsroot.Get('nu_'+flavor+'_O16').Get('tot_nc').Eval(energy))*10**(-38)/16. # this gives cm^2
+
+ + + +signatures = [ + '(f4[::1], f4[::1], f4[::1])', + '(f8[::1], f8[::1], f8[::1])' +] + +# TODO: make this work with the 'cuda' target. Right now, it seems like np.dot +# does not work or is used incorrectly. +@guvectorize(signatures, '(n),(n)->()', target=TARGET) +def calculate_integrated_rho(layer_dists, layer_densities, out): + """Calculate density integrated over the path through all layers. + Gives the length of a matter-equivalent water column in cm. + + Parameters + ---------- + layer_dists : vector + distance travelled through each layer + layer_densities : vector + densities of the layers + out : scalar + Result is stored here + + """ + out[0] = 0 + for i in range(len(layer_dists)): + out[0] += layer_dists[i]*layer_densities[i] + out[0] *= 1e5 # distances are converted from km to cm + +
+[docs] +def calculate_survivalprob(int_rho, xsection, out): + """Calculate survival probability given layer distances, + layer densities and (pre-computed) cross-sections. + + Parameters + ---------- + int_rho : scalar + depth of mass equivalent water column in cm + xsection : scalar + cross-section per nucleon in cm^2 + out : scalar + Result is stored here + + """ + Na = 6.022E23 # nuclei per cm^(-3) + # The molar mass is 1 g for pure nuclei, so there is a hidden division + # here by 1 g/mol. Also, int_rho is the depth of a mass equivalent + # water column, where water has the density of 1 g/cm^3. + # So the units work out to: + # int_rho [cm] * 1 [g/cm^3] * xsection [cm^2] * 1 [mol/g] * Na [1/mol] = [ 1 ] (all units cancel) + out = np.exp(-int_rho*xsection*Na)
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/aeff/aeff.html b/_modules/pisa/stages/aeff/aeff.html new file mode 100644 index 000000000..408f39a89 --- /dev/null +++ b/_modules/pisa/stages/aeff/aeff.html @@ -0,0 +1,184 @@ + + + + + + pisa.stages.aeff.aeff — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.aeff.aeff

+"""
+PISA pi stage to apply effective area weights
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.profiler import profile
+
+
+
+[docs] +class aeff(Stage): # pylint: disable=invalid-name + """ + PISA Pi stage to apply aeff weights. + + This combines the detector effective area with the flux weights calculated + in an earlier stage to compute the weights. + + Various scalings can be applied for particular event classes. The weight is + then multiplied by the livetime to get an event count. + + Parameters + ---------- + params + Expected params are .. :: + + livetime : Quantity with time units + aeff_scale : dimensionless Quantity + nutau_cc_norm : dimensionless Quantity + nutau_norm : dimensionless Quantity + nu_nc_norm : dimensionless Quantity + + """ + def __init__( + self, + **std_kwargs, + ): + expected_params = ( + 'livetime', + 'aeff_scale', + 'nutau_cc_norm', + 'nutau_norm', + 'nu_nc_norm', + ) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + @profile + def apply_function(self): + + # read out + aeff_scale = self.params.aeff_scale.m_as('dimensionless') + livetime_s = self.params.livetime.m_as('sec') + nutau_cc_norm = self.params.nutau_cc_norm.m_as('dimensionless') + nutau_norm = self.params.nutau_norm.m_as('dimensionless') + nu_nc_norm = self.params.nu_nc_norm.m_as('dimensionless') + + for container in self.data: + scale = aeff_scale * livetime_s + if container.name in ['nutau_cc', 'nutaubar_cc']: + scale *= nutau_cc_norm + if 'nutau' in container.name: + scale *= nutau_norm + if 'nc' in container.name: + scale *= nu_nc_norm + + container['weights'] *= container['weighted_aeff'] * scale + container.mark_changed('weights')
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/aeff/weight.html b/_modules/pisa/stages/aeff/weight.html new file mode 100644 index 000000000..11b06b6e6 --- /dev/null +++ b/_modules/pisa/stages/aeff/weight.html @@ -0,0 +1,163 @@ + + + + + + pisa.stages.aeff.weight — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.aeff.weight

+"""
+PISA pi stage to apply weights
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.profiler import profile
+
+
+
+[docs] +class weight(Stage): # pylint: disable=invalid-name + """ + PISA Pi stage to apply weights. + This assumes a weight has already been calculated. + The weight is then multiplied by the livetime to get an event count. + + Parameters + ---------- + + params : ParamSet or sequence with which to instantiate a ParamSet. + Expected params are: .. :: + + livetime : Quantity [time] + Detector livetime for scaling template + weight_scale : Quantity [dimensionless] + Overall scaling/normalisation of template + + """ + def __init__( + self, + **std_kwargs, + ): + expected_params = ('livetime', 'weight_scale') + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + @profile + def apply_function(self): + weight_scale = self.params.weight_scale.m_as('dimensionless') + livetime_s = self.params.livetime.m_as('sec') + scale = weight_scale * livetime_s + + for container in self.data: + container['weights'] *= scale + if "errors" in container.keys: + container["errors"] *= scale
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/aeff/weight_hnl.html b/_modules/pisa/stages/aeff/weight_hnl.html new file mode 100644 index 000000000..b9d1d0287 --- /dev/null +++ b/_modules/pisa/stages/aeff/weight_hnl.html @@ -0,0 +1,233 @@ + + + + + + pisa.stages.aeff.weight_hnl — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.aeff.weight_hnl

+"""
+PISA pi stage to apply HNL specific re-weighting
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+
+from pisa import ureg
+
+import numpy as np
+
+# is there a place for constants in PISA, or do they already exist?
+LIGHTSPEED = 299792458.0 * ureg.m / ureg.s
+REDUCEDPLANCK = 6.582119569e-25 * ureg.GeV * ureg.s
+
+
+
+[docs] +def re_weight_hnl( + U_tau4_sq, + mass, + energy, + tau, + distance_min, + distance_max, + hnl_decay_width, + c=LIGHTSPEED, + hbar=REDUCEDPLANCK, +): + """ + Function to re-weight HNL events (from sampling 1/L to target exponential) + + Parameters + ---------- + U_tau4_sq : float + Square of the HNL mixing angle + mass : float + HNL mass in GeV + energy : float + HNL energy in GeV + tau : float + HNL proper lifetime in ns + distance_min : float + Minimum sampling distance of HNL decay in m + distance_max : float + Maximum sampling distance of HNL decay in m + hnl_decay_width : float + HNL decay width in GeV + + Returns + ------- + weight_lifetime : float + Weight to re-weight HNL events + """ + + gamma = np.sqrt(energy**2 + mass**2) / mass # Etot/E0 + speed = c * np.sqrt(1 - np.power(1.0 / gamma, 2)) # c * sqrt(1-1/gamma^2) + + tau_min = distance_min / (gamma * speed) + tau_max = distance_max / (gamma * speed) + + tau_proper = hbar / (hnl_decay_width * U_tau4_sq) # this mixing is from the decay vertex + + pdf_inverse = (1.0 / (np.log(tau_max.magnitude) - np.log(tau_min.magnitude))) * ( + 1.0 / tau.m_as("s") + ) # for 1/L sampling of decay length + + pdf_exp1 = 1.0 / tau_proper + pdf_exp2 = np.exp(-tau / tau_proper) + + pdf_exp = pdf_exp1 * pdf_exp2 + + weight_lifetime = pdf_exp / pdf_inverse + + return U_tau4_sq.magnitude * weight_lifetime.magnitude # includes overall mixing factor of production vertex
+ + + +
+[docs] +class weight_hnl(Stage): # pylint: disable=invalid-name + """ + PISA pi stage to apply HNL specific re-weighting. + + This re-weights HNL events from sampling 1/L to target exponential and applies . + + Parameters + ---------- + params + Expected params are .. :: + U_tau4_sq : dimensionless Quantity + """ + + def __init__( + self, + **std_kwargs, + ): + expected_params = ("U_tau4_sq",) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + @profile + def apply_function(self): + U_tau4_sq = self.params.U_tau4_sq.m_as("dimensionless") + + for container in self.data: + hnl_weight = re_weight_hnl( + U_tau4_sq=U_tau4_sq * ureg.dimensionless, + mass=container["mHNL"] * ureg.GeV, + energy=container["hnl_true_energy"] * ureg.GeV, + tau=container["hnl_proper_lifetime"] * ureg.ns, + distance_min=container["hnl_distance_min"] * ureg.m, + distance_max=container["hnl_distance_max"] * ureg.m, + hnl_decay_width=container["hnl_decay_width"] * ureg.GeV, + ) + + container["weights"] *= hnl_weight + container.mark_changed("weights")
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/background/atm_muons.html b/_modules/pisa/stages/background/atm_muons.html new file mode 100644 index 000000000..d43d511be --- /dev/null +++ b/_modules/pisa/stages/background/atm_muons.html @@ -0,0 +1,288 @@ + + + + + + pisa.stages.background.atm_muons — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.background.atm_muons

+# pylint: disable=not-callable
+
+from __future__ import absolute_import, print_function, division
+
+import math
+import numpy as np
+from scipy.interpolate import interp1d
+from numba import guvectorize, cuda
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.resources import open_resource
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.utils.numba_tools import WHERE, myjit, ftype
+
+__all__ = ["atm_muons"]
+
+__author__ = 'T. Stuttard, S. Wren, S. Mandalia'
+
+
+[docs] +class atm_muons(Stage): + """ + Stage to handle atmospheric muon background systematics. + Typically this is used with muons generated by MuonGun, but should be + generic to other generators. + Note that this stage only modifies an weights based on the systematics, + it does not determine the nominal flux (this is assumed to either already + available in the input files, or written by an upstream stage). + + Parameters + ---------- + params : ParamSet or instantiable thereto + Parameters for steering the stage. The following parameters must be included: .. :: + + atm_muon_scale : quantity (dimensionless) + Normalisation of atmospheric muons + delta_gamma_mu_file : str + Path to file containing spectral index data + delta_gamma_mu_spline_kind : str + 'kind' of spline, as per kwargs in scipy interp1d + delta_gamma_mu_variable : str + Name of variable in which the delta spectral index is splined + Currently only supported variable is 'coszen' + delta_gamma_mu : quantity (dimensionless) + Parameter controlling variation in spectral index + + """ + + def __init__(self, + input_names, + **std_kwargs, + ): + + expected_params = ( + 'atm_muon_scale', + 'delta_gamma_mu_file', + 'delta_gamma_mu_spline_kind', + 'delta_gamma_mu_variable', + 'delta_gamma_mu' + ) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + + self.data.representation = self.calc_mode + + # Create the primary uncertainties spline that will be used for + # re-weighting the muon flux + self.prim_unc_spline = self._make_prim_unc_spline() + + # Get variable that the flux uncertainties are spline w.r.t + rw_variable = self.params['delta_gamma_mu_variable'].value + + for container in self.data: + # Get primary CR systematic spline + container['rw_array'] = self.prim_unc_spline(container[rw_variable]) + + # Reweighting term is positive-only by construction, so normalise + # it by shifting the whole array down by a normalisation factor + norm = container['rw_array'].sum() / container['rw_array'].size + container['cr_rw_array'] = container['rw_array'] - norm
+ + + +
+[docs] + @profile + def apply_function(self): + + #self.data.representation = self.calc_mode + + # Apply muon normalisation/scaling + atm_muon_scale = self.params['atm_muon_scale'].value.m_as("dimensionless") + + # Compute the weight modification due to the muon flux systematic + cr_rw_scale = self.params['delta_gamma_mu'].value.m_as("dimensionless") + + # Write to the output container + for container in self.data: + weight_mod = 1 + (cr_rw_scale * container['cr_rw_array']) + container['weights'] *= np.clip(weight_mod * atm_muon_scale, a_min=0, a_max=np.inf)
+ + + + def _make_prim_unc_spline(self): + """ + Create the spline which will be used to re-weight muons based on the + uncertainties arising from cosmic rays. + Notes + ----- + Details on this work can be found here - + https://wiki.icecube.wisc.edu/index.php/DeepCore_Muon_Background_Systematics + This work was done for the GRECO sample but should be reasonably + generic. It was found to pretty much be a negligible systemtic. Though + you should check both if it seems reasonable and it is still negligible + if you use it with a different event sample. + """ + # TODO(shivesh): "energy"/"coszen" on its own is taken to be the truth + # TODO(shivesh): what does "true" muon correspond to - the deposited muon? + # if 'true' not in self.params['delta_gamma_mu_variable'].value: + # raise ValueError( + # 'Variable to construct spline should be a truth variable. ' + # 'You have put %s in your configuration file.' + # % self.params['delta_gamma_mu_variable'].value + # ) + + + # Get the variable which the atmopsheric muon uncertainty has been splined in + bare_variable = self.params['delta_gamma_mu_variable'].value.split('true_')[-1] # Remove "truth_" part of variable name + if not bare_variable == 'coszen': + raise ValueError( + 'Muon primary cosmic ray systematic is currently only ' + 'implemented as a function of cos(zenith). %s was set in the ' + 'configuration file.' + % self.params['delta_gamma_mu_variable'].value + ) + if bare_variable not in self.params['delta_gamma_mu_file'].value: + raise ValueError( + 'Variable set in configuration file is %s but the file you ' + 'have selected, %s, does not make reference to this in its ' + 'name.' % (self.params['delta_gamma_mu_variable'].value, + self.params['delta_gamma_mu_file'].value) + ) + + # Read the uncertainty data from the file + uncdata = np.genfromtxt( + open_resource(self.params['delta_gamma_mu_file'].value) + ).T + + # Need to deal with zeroes that arise due to a lack of MC. For example, + # in the case of the splines as a function of cosZenith, there are no + # hoirzontal muons. Current solution is just to replace them with their + # nearest non-zero values. + while 0.0 in uncdata[1]: + zero_indices = np.where(uncdata[1] == 0)[0] + for zero_index in zero_indices: + uncdata[1][zero_index] = uncdata[1][zero_index+1] + + # Add dummpy points for the edge of the zenith range + xvals = np.insert(uncdata[0], 0, 0.0) + xvals = np.append(xvals, 1.0) + yvals = np.insert(uncdata[1], 0, uncdata[1][0]) + yvals = np.append(yvals, uncdata[1][-1]) + + # Create the spline, using the 'kind' of interpolation specified by the user + muon_uncf = interp1d( + xvals, + yvals, + kind=self.params['delta_gamma_mu_spline_kind'].value + ) + + return muon_uncf
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/csv_data_hist.html b/_modules/pisa/stages/data/csv_data_hist.html new file mode 100644 index 000000000..fcce45e83 --- /dev/null +++ b/_modules/pisa/stages/data/csv_data_hist.html @@ -0,0 +1,175 @@ + + + + + + pisa.stages.data.csv_data_hist — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.csv_data_hist

+"""
+A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import pandas as pd
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils.resources import find_resource
+from pisa.core.container import Container
+from pisa.core.events_pi import EventsPi
+
+
+
+[docs] +class csv_data_hist(Stage): + """ + CSV file loader PISA Pi class + + Parameters + ---------- + + events_file : csv file path + + """ + def __init__(self, + events_file, + **std_kwargs, + ): + + # instantiation args that should not change + self.events_file = find_resource(events_file) + + expected_params = () + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + + events = pd.read_csv(self.events_file) + + container = Container('total') + container.representation = self.calc_mode + + container['weights'] = events['count'].values.astype(FTYPE) + container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) + container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) + container['pid'] = events['pid'].values.astype(FTYPE) + + self.data.add_container(container) + + # check created at least one container + if len(self.data.names) == 0: + raise ValueError( + 'No containers created during data loading for some reason.' + )
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/csv_icc_hist.html b/_modules/pisa/stages/data/csv_icc_hist.html new file mode 100644 index 000000000..a5c6c5da1 --- /dev/null +++ b/_modules/pisa/stages/data/csv_icc_hist.html @@ -0,0 +1,183 @@ + + + + + + pisa.stages.data.csv_icc_hist — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.csv_icc_hist

+"""
+A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import pandas as pd
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.profiler import profile
+from pisa.utils.resources import find_resource
+from pisa.core.container import Container
+
+
+
+[docs] +class csv_icc_hist(Stage): + """ + CSV file loader PISA class + + Parameters + ---------- + events_file : csv file path + + """ + def __init__( + self, + events_file, + **std_kwargs, + ): + # instantiation args that should not change + self.events_file = find_resource(events_file) + + expected_params = ('atm_muon_scale',) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + events = pd.read_csv(self.events_file) + + container = Container('icc') + container.data_specs = 'events' + + container['count'] = events['count'].values.astype(FTYPE) + container['weights'] = np.ones(container.size, dtype=FTYPE) + container['errors'] = events['abs_uncert'].values.astype(FTYPE) + container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) + container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) + container['pid'] = events['pid'].values.astype(FTYPE) + + self.data.add_container(container) + + # check created at least one container + if len(self.data.names) == 0: + raise ValueError( + 'No containers created during data loading for some reason.' + )
+ + + +
+[docs] + def apply_function(self): + scale = self.params.atm_muon_scale.m_as('dimensionless') + + for container in self.data: + container['weights'] = container['count'] * scale
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/csv_loader.html b/_modules/pisa/stages/data/csv_loader.html new file mode 100644 index 000000000..46d254e9f --- /dev/null +++ b/_modules/pisa/stages/data/csv_loader.html @@ -0,0 +1,211 @@ + + + + + + pisa.stages.data.csv_loader — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.data.csv_loader

+"""
+A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import pandas as pd
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.resources import find_resource
+from pisa.utils.profiler import profile
+from pisa.core.container import Container
+
+
+
+[docs] +class csv_loader(Stage): + """ + CSV file loader PISA Pi class + + Parameters + ---------- + events_file : csv file path + **kwargs + Passed to Stage + + """ + def __init__( + self, + events_file, + output_names, + **std_kwargs, + ): + + # instantiation args that should not change + self.events_file = find_resource(events_file) + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + self.output_names = output_names + + +
+[docs] + def setup_function(self): + + raw_data = pd.read_csv(self.events_file) + + # create containers from the events + for name in self.output_names: + + # make container + container = Container(name) + nubar = -1 if 'bar' in name else 1 + if 'e' in name: + flav = 0 + if 'mu' in name: + flav = 1 + if 'tau' in name: + flav = 2 + + # cut out right part + pdg = nubar * (12 + 2 * flav) + + mask = raw_data['pdg'] == pdg + if 'cc' in name: + mask = np.logical_and(mask, raw_data['type'] > 0) + else: + mask = np.logical_and(mask, raw_data['type'] == 0) + + events = raw_data[mask] + + container['weighted_aeff'] = events['weight'].values.astype(FTYPE) + container['weights'] = np.ones(container.size, dtype=FTYPE) + container['initial_weights'] = np.ones(container.size, dtype=FTYPE) + container['true_energy'] = events['true_energy'].values.astype(FTYPE) + container['true_coszen'] = events['true_coszen'].values.astype(FTYPE) + container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) + container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) + container['pid'] = events['pid'].values.astype(FTYPE) + container.set_aux_data('nubar', nubar) + container.set_aux_data('flav', flav) + + self.data.add_container(container) + + # check created at least one container + if len(self.data.names) == 0: + raise ValueError( + 'No containers created during data loading for some reason.' + )
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container['weights'] = np.copy(container['initial_weights'])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/freedom_hdf5_loader.html b/_modules/pisa/stages/data/freedom_hdf5_loader.html new file mode 100644 index 000000000..5264f990e --- /dev/null +++ b/_modules/pisa/stages/data/freedom_hdf5_loader.html @@ -0,0 +1,360 @@ + + + + + + pisa.stages.data.freedom_hdf5_loader — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.freedom_hdf5_loader

+"""
+A Stage to load data from a FreeDOM hdf5 file (generated using the I3HDFWriter)
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import tables
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.resources import find_resource
+from pisa.core.container import Container
+from pisa.utils.format import split
+
+X_36 = 46.29
+Y_36 = -34.88
+
+FREEDOM_PARNAMES = [
+    "x",
+    "y",
+    "z",
+    "time",
+    "azimuth",
+    "zenith",
+    "cascade_energy",
+    "track_energy",
+]
+
+
+
+[docs] +class freedom_hdf5_loader(Stage): + """ + FreeDOM hdf5 file loader + + Parameters + ---------- + events_file : hdf5 file path + files_per_flavor : list + number of files for each nu flavor + reco : str + which reco to use + keys : list + which keys to unpack + cuts : dict + cuts to apply when loading the data + track_E_cut : float + track energy cut for PID. + If not set, L7_PIDClassifier_ProbTrack will be used + **kwargs + Passed to Stage + + """ + + def __init__( + self, + events_file, + files_per_flavor, + output_names, + reco, + keys, + cuts, + track_E_cut=None, + **std_kwargs, + ): + + # instantiation args that should not change + self.events_file = find_resource(events_file) + + # init base class + super().__init__( + expected_params=(), **std_kwargs, + ) + + self.output_names = output_names + self.reco = reco + self.files_per_flavor = split(files_per_flavor) + self.track_E_cut = track_E_cut + self.keys = split(keys) + self.cuts = eval(cuts) + +
+[docs] + def setup_function(self): + + data = self.load_hdf5_file(self.events_file) + data = self.calc_rho36(data) + if any(key.startswith("unc_est") for key in self.cuts): + data = self.calc_uncertainties(data) + data = self.apply_cuts(data, self.cuts) + + for name in self.output_names: + container = Container(name) + + nubar = -1 if "bar" in name else 1 + if "e" in name: + flav = 0 + n_files = int(self.files_per_flavor[0]) + if "mu" in name: + flav = 1 + n_files = int(self.files_per_flavor[1]) + if "tau" in name: + flav = 2 + n_files = int(self.files_per_flavor[2]) + + pdg = nubar * (12 + 2 * flav) + + mask = data["pdg_id"] == pdg + if "cc" in name: + mask = np.logical_and(mask, data["interaction_type"] == 1) + else: + mask = np.logical_and(mask, data["interaction_type"] == 2) + + events = {key: value[mask] for key, value in data.items()} + weight_dict = events["I3MCWeightDict"] + primary = events["MCInIcePrimary"] + + container["true_energy"] = primary["energy"].astype(FTYPE) + container["true_coszen"] = np.cos(primary["zenith"]).astype(FTYPE) + container["pdg_code"] = primary["pdg_encoding"].astype(FTYPE) + container["interaction"] = weight_dict["InteractionType"].astype(FTYPE) + + CM2_TO_M2 = 1e-4 + derived_weight = ( + CM2_TO_M2 + * weight_dict["OneWeight"] + / n_files + / weight_dict["gen_ratio"] + / weight_dict["NEvents"] + ) + container["weighted_aeff"] = derived_weight.astype(FTYPE) + + reco = self.reco + reco_total_energy = ( + events[f"{reco}_cascade_energy"] + events[f"{reco}_track_energy"] + ) + container["reco_energy"] = reco_total_energy.astype(FTYPE) + container["reco_coszen"] = np.cos(events[f"{reco}_zenith"]).astype(FTYPE) + container["reco_z"] = events[f"{reco}_z"].astype(FTYPE) + container["reco_rho"] = events["rho_36"].astype(FTYPE) + + if self.track_E_cut is None: + container["pid"] = events["L7_PIDClassifier_ProbTrack"].astype(FTYPE) + else: + pid = events[f"{reco}_track_energy"] > float(self.track_E_cut) + container["pid"] = pid.astype(FTYPE) + + container["weights"] = np.ones(container.size, dtype=FTYPE) + container["initial_weights"] = np.ones(container.size, dtype=FTYPE) + + container.set_aux_data("nubar", nubar) + container.set_aux_data("flav", flav) + + self.data.add_container(container) + + if len(self.data.names) == 0: + raise ValueError( + "No containers created during data loading for some reason." + )
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container["weights"] = np.copy(container["initial_weights"])
+ + +
+[docs] + def calc_rho36(self, data): + reco_x = data[f"{self.reco}_x"] + reco_y = data[f"{self.reco}_y"] + + data["rho_36"] = np.sqrt((reco_x - X_36) ** 2 + (reco_y - Y_36) ** 2) + + return data
+ + +
+[docs] + def calc_uncertainties(self, data, epsilon=1e-15): + """add uncertainty estimates to data; return modified data""" + for par in FREEDOM_PARNAMES: + p2s = np.where(data[f"env_p2_{par}"] > 0, data[f"env_p2_{par}"], epsilon) + data[f"unc_est_{par}"] = 1 / np.sqrt(2 * p2s) + + return data
+ + +
+[docs] + def apply_cuts(self, data, cuts): + """apply cuts in place""" + cut_mask = np.array([True], dtype=bool) + for cut_key, [cut_low, cut_high] in cuts.items(): + if "{reco}" in cut_key: + cut_key = cut_key.replace("{reco}", self.reco) + + if cut_low is not None: + cut_mask = cut_mask & (data[cut_key] > cut_low) + if cut_high is not None: + cut_mask = cut_mask & (data[cut_key] < cut_high) + + for key, val in data.items(): + data[key] = val[cut_mask] + + return data
+ + +
+[docs] + def load_hdf5_file(self, f_name): + with tables.File(f_name) as file: + return self.unpack_file_data(file)
+ + +
+[docs] + def unpack_file_data(self, file): + root = file.root + + var_dict = {} + for node in root: + try: + name = node.name.replace("FreeDOM_test_", "").replace("_params", "") + name = name.replace("best_fit", "freedom") + except tables.NoSuchNodeError: + continue + + if not name in self.keys and name != self.reco: + continue + + freedom_hdf5_loader.fill_variable_dict(name, node, var_dict) + + return var_dict
+ + +
+[docs] + @staticmethod + def fill_variable_dict(name, node, var_dict): + if "vector_index" in node.colnames: + for par, parname in zip( + node.cols.item[:].reshape((-1, len(FREEDOM_PARNAMES))).T, + FREEDOM_PARNAMES, + ): + var_dict[f"{name}_{parname}"] = par + elif "value" in node.colnames: + var_dict[name] = node.cols.value[:] + else: + var_dict[name] = node.read()
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/grid.html b/_modules/pisa/stages/data/grid.html new file mode 100644 index 000000000..26b974aa5 --- /dev/null +++ b/_modules/pisa/stages/data/grid.html @@ -0,0 +1,200 @@ + + + + + + pisa.stages.data.grid — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.data.grid

+"""
+Stage to create a grid of data
+"""
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.core.container import Container
+
+
+
+[docs] +class grid(Stage): + """ + Create a grid of events + + Parameters + ---------- + + Binning object defining the grid to be generated + + entity : str + `entity` arg to be passed to `MultiDimBinning.meshgrid` (see that + fucntion docs for details) + + """ + def __init__( + self, + grid_binning, + entity="midpoints", + output_names=None, + **std_kwargs, + ): + expected_params = () + + # store args + self.grid_binning = grid_binning + self.entity = entity + self.output_names = output_names + + # init base class + super(grid, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + assert self.calc_mode == "events" + +
+[docs] + def setup_function(self): + + for name in self.output_names: + + # Create the container + container = Container(name, self.calc_mode) + + # Determine flavor + nubar = -1 if 'bar' in name else 1 + if 'e' in name: + flav = 0 + if 'mu' in name: + flav = 1 + if 'tau' in name: + flav = 2 + + # Create arrays + mesh = self.grid_binning.meshgrid(entity=self.entity, attach_units=False) + size = mesh[0].size + for var_name, var_vals in zip(self.grid_binning.names, mesh): + container[var_name] = var_vals.flatten().astype(FTYPE) + + # Add useful info + container.set_aux_data('nubar', nubar) + container.set_aux_data('flav', flav) + + # Make some initial weights + container['initial_weights'] = np.ones(size, dtype=FTYPE) + container['weights'] = np.ones(size, dtype=FTYPE) + + self.data.add_container(container)
+ + + +
+[docs] + def apply_function(self): + # reset weights + for container in self.data: + container['weights'] = np.copy(container['initial_weights'])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/meows_loader.html b/_modules/pisa/stages/data/meows_loader.html new file mode 100644 index 000000000..e96228cb7 --- /dev/null +++ b/_modules/pisa/stages/data/meows_loader.html @@ -0,0 +1,215 @@ + + + + + + pisa.stages.data.meows_loader — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.meows_loader

+"""
+A class to load in the MEOWS hdf5 files 
+"""
+
+from curses import raw
+
+import numpy as np
+import h5py as h5
+import pandas as pd
+from time import time
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.profiler import profile
+from pisa.core.container import Container
+from pisa.core.events_pi import EventsPi
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class meows_loader(Stage): + """ + Docstring incoming... + """ + + def __init__(self, events_file: str, n_files: int, output_names, **std_kwargs): + self.events_file = events_file + self._n_files = int(n_files) + self.output_names = output_names + super().__init__(expected_params=(), **std_kwargs) + +
+[docs] + def setup_function(self): + """ + Go over all those input files and load them in. + + We load the first data in specifically to setup the containers, and afterwards go through appending to the end of those arrays + """ + + print("Loading data...", end="") + st = time() + raw_data = h5.File(find_resource(self.events_file), "r") + + for name in self.output_names: + # make container + container = Container(name) + + nubar = -1 if "bar" in name else 1 + if "e" in name: + flav = 0 + if "mu" in name: + flav = 1 + if "tau" in name: + flav = 2 + + # cut out right part + pdg = nubar * (12 + 2 * flav) + + mask = raw_data["PrimaryType"][:] == pdg + # there's no interaction key in this MC, so we put this in so only the CC are used + if "cc" in name: + mask = np.logical_and(mask, raw_data["PrimaryType"] != 0) + else: + mask = np.logical_and(mask, raw_data["PrimaryType"] == 0) + + events = raw_data + + container["weighted_aeff"] = ( + events["oneweight"][mask][:].astype(FTYPE) * (1e-4) / (98000 / 5.0) + ) + container["weights"] = np.ones(container.size, dtype=FTYPE) + container["initial_weights"] = np.ones(container.size, dtype=FTYPE) + + container["total_column_depth"] = events["TotalColumnDepth"][mask][ + : + ].astype(FTYPE) + container["true_bjorkenx"] = events["FinalStateX"][mask][:].astype(FTYPE) + container["true_bjorkeny"] = events["FinalStateY"][mask][:].astype(FTYPE) + + container["true_energy"] = events["NuEnergy"][mask][:].astype(FTYPE) + container["true_coszen"] = np.cos(events["NuZenith"][mask][:].astype(FTYPE)) + container["reco_energy"] = events["MuExEnergy"][mask][:].astype(FTYPE) + container["reco_coszen"] = np.cos( + events["MuExZenith"][mask][:].astype(FTYPE) + ) + container["pid"] = events["pid"][mask][:].astype(FTYPE) + container.set_aux_data("nubar", nubar) + container.set_aux_data("flav", flav) + + self.data.add_container(container) + + ed = time() + print(" done! Took {} minutes".format((ed - st) / 60)) + raw_data.close()
+ + +
+[docs] + def apply_function(self): + """ + Resets all the weights to the initial weights + """ + for container in self.data: + container["weights"] = np.copy(container["initial_weights"]) + container["astro_weights"] = np.copy(container["initial_weights"])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/simple_data_loader.html b/_modules/pisa/stages/data/simple_data_loader.html new file mode 100644 index 000000000..7b7777952 --- /dev/null +++ b/_modules/pisa/stages/data/simple_data_loader.html @@ -0,0 +1,356 @@ + + + + + + pisa.stages.data.simple_data_loader — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.simple_data_loader

+"""
+A Stage to load data from a PISA style hdf5 file into a PISA pi ContainerSet
+"""
+
+#TODO This class is become dcereasingly "simple"! Make it into a more specific stage for our purposes and recreate a much more simple HDF5 file loader that is generic for any PISA task
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.profiler import profile
+from pisa.core.container import Container
+from pisa.core.events_pi import EventsPi
+from pisa.utils.format import arg_str_seq_none, split
+
+
+
+[docs] +class simple_data_loader(Stage): + """ + HDF5 file loader PISA Pi class + + Parameters + ---------- + + events_file : hdf5 file path + output from make_events, including flux weights + and Genie systematics coefficients + + mc_cuts : cut expr + e.g. '(true_coszen <= 0.5) & (true_energy <= 70)' + + data_dict : str of a dict + Dictionary to specify what keys from the hdf5 files to be loaded + under what name. Entries can be strings that point to the right + key in the hdf5 file or lists of keys, and the data will be + stacked into a 2d array. + + neutrinos : bool + Flag indicating whether data events represent neutrinos + In this case, special handling for e.g. nu/nubar, CC vs NC, ... + + fraction_events_to_keep : float + Fraction of loaded events to use (use to downsample). + Must be in range [0.,1.], or disable by setting to `None`. + Default in None. + + Notes + ----- + Looks for `initial_weights` fields in events file, which will serve + as nominal weights for all events included. + No fields named `weights` may already be present. + + """ + def __init__(self, + events_file, + mc_cuts, + data_dict, + neutrinos=True, + required_metadata=None, + fraction_events_to_keep=None, + events_subsample_index=0, + seed=123456, + output_names=None, + **std_kwargs, + ): + + # instantiation args that should not change + self.events_file = events_file + self.mc_cuts = mc_cuts + self.data_dict = data_dict + self.neutrinos = neutrinos + self.required_metadata = required_metadata + self.fraction_events_to_keep = fraction_events_to_keep + self.events_subsample_index = int(events_subsample_index) + self.seed = int(seed) + self.output_names = output_names + + # Handle list inputs + self.events_file = split(self.events_file) + if self.required_metadata is not None : + self.required_metadata = split(self.required_metadata) + + # instead of adding params here, consider making them instantiation + # args so nothing external will inadvertently try to change + # their values + expected_params = () + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + # check output names + if len(self.output_names) != len(set(self.output_names)): + raise ValueError( + 'Found duplicates in `output_names`, but each name must be' + ' unique.' + ) + + self.load_events() + self.apply_cuts_to_events() + +
+[docs] + def load_events(self): + '''Loads events from events file''' + + # Create the events structure + self.evts = EventsPi( + name='Events', + neutrinos=self.neutrinos, + fraction_events_to_keep=self.fraction_events_to_keep, + events_subsample_index=self.events_subsample_index, + ) + + # If user provided a variable mapping dict, parse it from the input string (if not already done) + if self.data_dict is not None : + if isinstance(self.data_dict, str): + self.data_dict = eval(self.data_dict) + + # Load the event file into the events structure + self.evts.load_events_file( + events_file=self.events_file, + variable_mapping=self.data_dict, + required_metadata=self.required_metadata, + seed=self.seed, + ) + + if hasattr(self.evts, "metadata"): + self.metadata = self.evts.metadata
+ + + # TODO Add option to define eventual binning here so that can cut events + # now that will be cut later anyway (use EventsPi.keep_inbounds) + +
+[docs] + def apply_cuts_to_events(self): + '''Just apply any cuts that the user defined''' + if self.mc_cuts: + self.evts = self.evts.apply_cut(self.mc_cuts)
+ + +
+[docs] + def record_event_properties(self): + '''Adds fields present in events file and selected in `self.data_dict` + into containers for the specified output names. Also ensures the + presence of a set of nominal weights. + ''' + + # define which categories to include in the data + # user can manually specify what they want using `output_names`, or else just use everything + output_keys = self.output_names if len(self.output_names) > 0 else self.evts.keys() + + # create containers from the events + for name in output_keys: + + # make container + container = Container(name) + container.representation = 'events' + event_groups = self.evts.keys() + if name not in event_groups: + raise ValueError( + 'Output name "%s" not found in events. Only found %s.' + % (name, event_groups) + ) + + # add the events data to the container + for key, val in self.evts[name].items(): + container[key] = val + + # create weights arrays: + # * `initial_weights` as starting point (never modified) + # * `weights` to be initialised from `initial_weights` + # and modified by the stages + # * user can also provide `initial_weights` in input file + #TODO Maybe add this directly into EventsPi + if 'weights' in container.keys: + # raise manually to give user some helpful feedback + raise KeyError( + 'Found an existing `weights` array in "%s"' + ' which would be overwritten. Consider renaming it' + ' to `initial_weights`.' % name + ) + container['weights'] = np.ones(container.size, dtype=FTYPE) + + if 'initial_weights' not in container.keys: + if self.fraction_events_to_keep is None: + container['initial_weights'] = np.ones(container.size, dtype=FTYPE) + else : + if 'nu' in name or 'mu' in name: + # Need to scale weights if using down-sampling + container['initial_weights'] = np.full(container.size, 1. / float(self.fraction_events_to_keep), dtype=FTYPE) + else: + container['initial_weights'] = np.ones(container.size, dtype=FTYPE) + + # add neutrino flavor information for neutrino events + #TODO Maybe add this directly into EventsPi + if self.neutrinos: + # this determination of flavour is the worst possible coding, ToDo + nubar = -1 if 'bar' in name else 1 + if name.startswith('nutau'): + flav = 2 + elif name.startswith('numu'): + flav = 1 + elif name.startswith('nue'): + flav = 0 + else: + raise ValueError('Cannot determine flavour of %s'%name) + container.set_aux_data('nubar', nubar) + container.set_aux_data('flav', flav) + + self.data.add_container(container) + + # check created at least one container + if len(self.data.names) == 0: + raise ValueError( + 'No containers created during data loading for some reason.' + )
+ + + +
+[docs] + def setup_function(self): + '''Store event properties from events file at + service initialisation. Cf. `Stage` docs. + ''' + self.record_event_properties()
+ + + +
+[docs] + def apply_function(self): + + # reset data representation to events + #TODO This should be fixed more generally at the Pipeline level, see XXX + self.data.representation = "events" + + # reset weights to initial weights prior to downstream stages running + for container in self.data: + container['weights'] = np.copy(container['initial_weights'])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/simple_signal.html b/_modules/pisa/stages/data/simple_signal.html new file mode 100644 index 000000000..19aa78766 --- /dev/null +++ b/_modules/pisa/stages/data/simple_signal.html @@ -0,0 +1,312 @@ + + + + + + pisa.stages.data.simple_signal — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.simple_signal

+"""
+Stage to generate simple 1D data consisting 
+of a flat background + gaussian peak with a mean and a width
+
+"""
+from __future__ import absolute_import, print_function, division
+
+__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)"
+
+import numpy as np
+from pisa import FTYPE
+from pisa.core.container import Container
+from pisa.core.stage import Stage
+
+# Load the modified index lookup function
+from pisa.core.bin_indexing import lookup_indices
+
+
+
+[docs] +class simple_signal(Stage): + """ + random toy event generator PISA class + + Parameters + ---------- + params + Expected params .. :: + + n_events : int + Number of events to be generated per output name + random + seed : int + Seed to be used for random + + """ + + def __init__( + self, + **std_kwargs, + ): + expected_params = ( # parameters fixed during fit + 'n_events_data', + 'stats_factor', + 'signal_fraction', + + # minimum + maximum bkg values + 'bkg_min', + 'bkg_max', + + # fitted parameters + 'mu', + 'sigma') + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + ''' + This is where we figure out how many events to generate, + define their weights relative to the data statistics + and initialize the container we will need + + This function is run once when we instantiate the pipeline + ''' + + # + # figure out how many signal and background events to create + # + n_data_events = int(self.params.n_events_data.value.m) + self.stats_factor = float(self.params.stats_factor.value.m) + signal_fraction = float(self.params.signal_fraction.value.m) + + # Number of simulated MC events + self.n_mc = int(n_data_events*self.stats_factor) + # Number of signal MC events + self.nsig = int(self.n_mc*signal_fraction) + self.nbkg = self.n_mc-self.nsig # Number of bkg MC events + + # Go in events mode + self.data.representation = 'events' + + # + # Create a signal container, with equal weights + # + signal_container = Container('signal') + signal_container.representation = 'events' + # Populate the signal physics quantity over a uniform range + signal_initial = np.random.uniform(low=self.params.bkg_min.value.m, + high=self.params.bkg_max.value.m, + size=self.nsig) + + # guys, seriouslsy....?! "stuff"?? + signal_container.add_array_data('stuff', signal_initial) + # Populate its MC weight by equal constant factors + signal_container.add_array_data('weights', np.ones(self.nsig, dtype=FTYPE)*1./self.stats_factor) + # Populate the error on those weights + signal_container.add_array_data('errors',(np.ones(self.nsig, dtype=FTYPE)*1./self.stats_factor)**2. ) + + # + # Compute the bin indices associated with each event + # + sig_indices = lookup_indices(sample=[signal_container['stuff']], binning=self.apply_mode) + signal_container.add_array_data('bin_indices', sig_indices) + + # + # Compute an associated bin mask for each output bin + # + for bin_i in range(self.apply_mode.tot_num_bins): + sig_bin_mask = sig_indices == bin_i + signal_container.add_array_data(key='bin_{}_mask'.format(bin_i), data=sig_bin_mask) + + # + # Add container to the data + # + self.data.add_container(signal_container) + + # + # Create a background container + # + if self.nbkg > 0: + + bkg_container = Container('background') + bkg_container.representation = 'events' + # Create a set of background events + initial_bkg_events = np.random.uniform(low=self.params.bkg_min.value.m, high=self.params.bkg_max.value.m, size=self.nbkg) + bkg_container.add_array_data('stuff', initial_bkg_events) + # create their associated weights + bkg_container.add_array_data('weights', np.ones(self.nbkg)*1./self.stats_factor) + bkg_container.add_array_data('errors',(np.ones(self.nbkg)*1./self.stats_factor)**2. ) + # compute their bin indices + bkg_indices = lookup_indices(sample=[bkg_container['stuff']], binning=self.apply_mode) + bkg_container.add_array_data('bin_indices', bkg_indices) + # Add bin indices mask (used in generalized poisson llh) + for bin_i in range(self.apply_mode.tot_num_bins): + bkg_bin_mask = bkg_indices==bin_i + bkg_container.add_array_data(key='bin_{}_mask'.format(bin_i), data=bkg_bin_mask) + + self.data.add_container(bkg_container) + + + # + # Add the binned counterpart of each events container + # + for container in self.data: + container.array_to_binned('weights', binning=self.apply_mode, averaged=False) + container.array_to_binned('errors', binning=self.apply_mode, averaged=False)
+ + + +
+[docs] + def apply_function(self): + ''' + This is where we re-weight the signal container + based on a model gaussian with tunable parameters + mu and sigma. + + The background is left untouched in this step. + + A possible upgrade to this function would be to make a + small background re-weighting + + This function will be called at every iteration of the minimizer + ''' + + # + # Make sure we are in events mode + # + self.data.representation = 'events' + from scipy.stats import norm + + for container in self.data: + + if container.name == 'signal': + # + # Signal is a gaussian pdf, weighted to account for the MC statistics and the signal fraction + # + reweighting = norm.pdf(container['stuff'], loc=self.params['mu'].value.m, scale=self.params['sigma'].value.m)/self.stats_factor + reweighting/=np.sum(reweighting) + reweighting*=(self.nsig/self.stats_factor) + + reweighting[np.isnan(reweighting)] = 0. + + # + # New MC errors = MCweights squared + # + new_errors = reweighting**2. + + # + # Replace the weight information in the signal container + # + np.copyto(src=reweighting, dst=container["weights"]) + np.copyto(src=new_errors, dst=container['errors']) + container['weights'].mark_changed() + container['errors'].mark_changed() + + # Re-bin the events weight into new histograms + container.array_to_binned('weights', binning=self.apply_mode, averaged=False) + container.array_to_binned('errors', binning=self.apply_mode, averaged=False)
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/sqlite_loader.html b/_modules/pisa/stages/data/sqlite_loader.html new file mode 100644 index 000000000..b3bf992ed --- /dev/null +++ b/_modules/pisa/stages/data/sqlite_loader.html @@ -0,0 +1,272 @@ + + + + + + pisa.stages.data.sqlite_loader — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.sqlite_loader

+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+import pandas as pd
+import sqlite3
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.resources import find_resource
+from pisa.utils.profiler import profile
+from pisa.core.container import Container
+
+
+
+[docs] +class sqlite_loader(Stage): + """ + SQLite loader PISA Pi class + Parameters + ---------- + database : path to sqlite database + **kwargs + Passed to Stage + """ + def __init__( + self, + database, + output_names, + post_fix = '_pred', + **std_kwargs, + ): + + # instantiation args that should not change + self.database = database + self.post_fix = post_fix + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + self.output_names = output_names + +
+[docs] + def get_pid_and_interaction_type(self,name): + '''Sorry''' + if 'bar' in name: + nubar = -1 + else: + nubar = 1 + if 'e' in name: + pid = 12 + flavor = 0 + if 'mu' in name: + pid = 14 + flavor = 1 + if 'tau' in name: + pid = 16 + flavor = 2 + if 'cc' in name: + interaction_type = 1 + if 'nc' in name: + interaction_type = 2 + return nubar*pid, interaction_type, nubar, flavor
+ + +
+[docs] + def query_database(self, interaction_type, pid): + with sqlite3.connect(self.database) as con: + # Get truth + query = 'SELECT * FROM truth WHERE interaction_type = %s and pid = %s'%(interaction_type, pid) + truth = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) + if self.post_fix == '_retro': + # Get retro reco + query = 'SELECT * FROM retro WHERE event_no in %s'%(str(tuple(truth['event_no']))) + reco = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) + else: + # Get GNN reco + query = 'SELECT * FROM reconstruction WHERE event_no in %s'%(str(tuple(truth['event_no']))) + reco = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) + # Get number of i3 files with specified PID by counting unique combinations of RunID and SubrunID + query = 'SELECT DISTINCT RunID, SubrunID FROM truth WHERE pid = %s'%pid + n_files = len(pd.read_sql(query,con)) + return truth, reco, n_files
+ + +
+[docs] + def add_truth(self, container, truth, nubar, flavor): + ''' Adds truth to container''' + container['true_coszen'] = np.cos(truth['zenith']).values.astype(FTYPE) + container['true_energy'] = truth['energy'].values.astype(FTYPE) + container.set_aux_data("nubar", nubar) # This sets true nu/nubar + container.set_aux_data("flav", flavor) # This sets the true flavor + return container
+ + +
+[docs] + def add_reco(self, container, reco): + ''' Adds reconstructed quantities to container''' + + container['reco_coszen'] = np.cos(reco['zenith' + self.post_fix]).values.astype(FTYPE) + container['reco_' + 'energy'] = reco['energy' + self.post_fix].values.astype(FTYPE) + if self.post_fix == '_retro': + container['pid'] = reco['L7_PIDClassifier_FullSky_ProbTrack'].values.astype(FTYPE) + else: + container['pid'] = reco['track' + self.post_fix].values.astype(FTYPE) + return container
+ + +
+[docs] + def add_aeff_weight(self, container, truth, n_files): + CM2_TO_M2 = 1e-4 + weighted_aeff = ( + CM2_TO_M2 + * truth["OneWeight"] + / n_files + / truth["gen_ratio"] + / truth["NEvents"] + ) + container['weighted_aeff'] = weighted_aeff.values.astype(FTYPE) + return container
+ + +
+[docs] + def initialize_weights(self, container): + container['weights'] = np.ones(container.size, dtype=FTYPE) + container['initial_weights'] = np.ones(container.size, dtype=FTYPE) + return container
+ + +
+[docs] + def setup_function(self): + # create containers from the events + for name in self.output_names: + # make container + container = Container(name) + pid, interaction_type, nubar, flavor = self.get_pid_and_interaction_type(name) + truth, reco,n_i3files_with_flavor = self.query_database(interaction_type, pid) + container = self.add_truth(container,truth, nubar, flavor) + container = self.add_reco(container,reco) + container = self.initialize_weights(container) + container = self.add_aeff_weight(container, truth, n_i3files_with_flavor) + + self.data.add_container(container) + + # check created at least one container + if len(self.data.names) == 0: + raise ValueError( + 'No containers created during data loading for some reason.' + )
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container['weights'] = np.copy(container['initial_weights'])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/data/toy_event_generator.html b/_modules/pisa/stages/data/toy_event_generator.html new file mode 100644 index 000000000..1da9eeab4 --- /dev/null +++ b/_modules/pisa/stages/data/toy_event_generator.html @@ -0,0 +1,216 @@ + + + + + + pisa.stages.data.toy_event_generator — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.data.toy_event_generator

+"""
+Stage to generate some random data
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.container import Container
+from pisa.core.binning import MultiDimBinning
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+
+
+
+[docs] +class toy_event_generator(Stage): + """ + random toy event generator PISA Pi class + + Parameters + ---------- + + output_names : str + list of output names + + params + Expected params .. :: + + n_events : int + Number of events to be generated per output name + random + seed : int + Seed to be used for random + + """ + def __init__( + self, + output_names, + **std_kwargs, + ): + + expected_params = ('n_events', 'random', 'seed') + + self.output_names = output_names + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + + n_events = int(self.params.n_events.value.m) + seed = int(self.params.seed.value.m) + self.random_state = np.random.RandomState(seed) + + for name in self.output_names: + + container = Container(name, representation=self.calc_mode) + + nubar = -1 if 'bar' in name else 1 + if 'e' in name: + flav = 0 + if 'mu' in name: + flav = 1 + if 'tau' in name: + flav = 2 + + if not isinstance(self.calc_mode, MultiDimBinning): + # Generate some events in the array representation just to have them + # here we add those explicitly in the array representation + container['true_energy'] = np.power(10, self.random_state.rand(n_events).astype(FTYPE) * 3) + container['true_coszen'] = self.random_state.rand(n_events).astype(FTYPE) * 2 - 1 + + size = container.size + + # make some initial weights + if self.params.random.value: + container['initial_weights'] = self.random_state.rand(size).astype(FTYPE) + else: + container['initial_weights'] = np.ones(size, dtype=FTYPE) + + # other necessary info + container.set_aux_data('nubar', nubar) + container.set_aux_data('flav', flav) + container['weights'] = np.ones(size, dtype=FTYPE) + container['weighted_aeff'] = np.ones(size, dtype=FTYPE) + + flux_nue = np.zeros(size, dtype=FTYPE) + flux_numu = np.ones(size, dtype=FTYPE) + flux = np.stack([flux_nue, flux_numu], axis=1) + + container['nu_flux_nominal'] = flux + container['nubar_flux_nominal'] = flux + + self.data.add_container(container)
+ + +
+[docs] + def apply_function(self): + # reset weights + for container in self.data: + container['weights'] = np.copy(container['initial_weights'])
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/discr_sys/hypersurfaces.html b/_modules/pisa/stages/discr_sys/hypersurfaces.html new file mode 100644 index 000000000..75701b2bd --- /dev/null +++ b/_modules/pisa/stages/discr_sys/hypersurfaces.html @@ -0,0 +1,346 @@ + + + + + + pisa.stages.discr_sys.hypersurfaces — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.discr_sys.hypersurfaces

+"""
+PISA pi stage to apply hypersurface fits from discrete systematics parameterizations
+"""
+
+#TODO Currently have to defined the `links` value in the stage config to match what the `combine_regex` does in
+#     the Hypersurface fitting. The `combine_regex` is stored in the hypersurface instance, so should make the
+#     scontainer linking use this instead of having to manually specify links. To do this, should make a variant
+#     of the container linking function that accepts a regex (using shared code with Map.py).
+
+from __future__ import absolute_import, print_function, division
+
+import ast
+
+from numba import guvectorize
+import numpy as np
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.core.binning import MultiDimBinning
+from pisa.utils.log import logging
+import pisa.utils.hypersurface as hs
+from pisa.utils.log import set_verbosity, Levels
+#set_verbosity(Levels.DEBUG)
+
+__all__ = ["hypersurfaces",]
+
+__author__ = "P. Eller, T. Ehrhardt, T. Stuttard, J.L. Lanfranchi, A. Trettin"
+
+__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+
+[docs] +class hypersurfaces(Stage): # pylint: disable=invalid-name + """ + Service to apply hypersurface parameterisation produced by + `scripts.fit_discrete_sys_nd` + + Parameters + ---------- + fit_results_file : str + Path to hypersurface fit results file, i.e. the JSON file produced by the + `pisa.scripts.fit_discrete_sys_nd.py` script + + propagate_uncertainty : bool, optional + Propagate the uncertainties from the hypersurface to the uncertainty of + the output + + params : ParamSet + Note that the params required to be in `params` are determined from + those listed in the `fit_results_file`. + + interpolated : bool + If `True`, indicates that the hypersurfaces to be loaded are interpolated. + + links : dict + A dictionary defining how containers should be linked. Keys are the names of + the merged containers, values are lists of containers being linked together. + Keys must be a sub-set of the loaded hypersurfaces. + + """ + def __init__( + self, + fit_results_file, + propagate_uncertainty=False, + interpolated=False, + links=None, + fluctuate=False, + fluctuate_seed=12345, + **std_kwargs, + ): + # -- Only allowed/implemented modes -- # + assert isinstance(std_kwargs['calc_mode'], MultiDimBinning) + # -- Load hypersurfaces -- # + + # Store args + self.fit_results_file = fit_results_file + self.propagate_uncertainty = propagate_uncertainty + self.interpolated = interpolated + # Expected parameter names depend on the hypersurface and, if applicable, + # on the parameters in which the hypersurfaces are interpolated. + # For this reason we need to load the hypersurfaces already in the init function + self.inter_params = [] + if self.interpolated: + self.hypersurfaces = hs.load_interpolated_hypersurfaces(self.fit_results_file, expected_binning=std_kwargs['calc_mode']) + self.inter_params = list(self.hypersurfaces.values())[0].interpolation_param_names + else: + self.hypersurfaces = hs.load_hypersurfaces(self.fit_results_file, expected_binning=std_kwargs['calc_mode']) + self.hypersurface_param_names = list(self.hypersurfaces.values())[0].param_names + + # -- Initialize base class -- # + super().__init__( + expected_params=self.hypersurface_param_names + self.inter_params, + **std_kwargs, + ) + + self.links = ast.literal_eval(links) + self.warning_issued = False # don't warn more than once about empty bins + + # Handle fluctuation option + self.fluctuate = fluctuate + if self.fluctuate : + self.fluctuate_seed = fluctuate_seed + logging.info(f"User has selected to fluctuate the hypersurface coefficients (seed is {self.fluctuate_seed})") + assert self.fluctuate_seed is not None + + # pylint: disable=line-too-long +
+[docs] + def setup_function(self): + """Load the fit results from the file and make some check compatibility""" + + self.data.representation = self.calc_mode + + if self.links is not None: + for key, val in self.links.items(): + self.data.link_containers(key, val) + + # create containers for scale factors + for container in self.data: + container["hs_scales"] = np.empty(container.size, dtype=FTYPE) + if self.propagate_uncertainty: + container["hs_scales_uncertainty"] = np.empty(container.size, dtype=FTYPE) + + + # Check map names match between data container and hypersurfaces + for container in self.data: + assert container.name in self.hypersurfaces, f"No match for map {container.name} found in the hypersurfaces" + + self.data.unlink_containers()
+ + + # the linter thinks that "logging" refers to Python's built-in + # pylint: disable=line-too-long, logging-not-lazy, deprecated-method +
+[docs] + def compute_function(self): + + self.data.representation = self.calc_mode + + # Link containers + if self.links is not None: + for key, val in self.links.items(): + self.data.link_containers(key, val) + + # Format the params dict that will be passed to `Hypersurface.evaluate` + #TODO checks on param units + param_values = {sys_param_name: self.params[sys_param_name].m + for sys_param_name in self.hypersurface_param_names} + if self.interpolated: + osc_params = {name: self.params[name] for name in self.inter_params} + + # If fluctuating, seed the flucutations + # Needs to be consistent for each call to this functions + if self.fluctuate : + fluctuate_random_state = np.random.RandomState(self.fluctuate_seed) + + # Loop over types + for container in self.data: + + # Get the hypersurfaces + if self.interpolated: + # in the case of interpolated hypersurfaces, the actual hypersurface + # must be generated for the given oscillation parameters first + container_hs = self.hypersurfaces[container.name].get_hypersurface(**osc_params) + else: + container_hs = self.hypersurfaces[container.name] + + # Fluctute the hypersurfaces, if requested + if self.fluctuate : + container_hs = container_hs.fluctuate(random_state=fluctuate_random_state) #TODO oncely need to do this once if not interpolating + + # Get the hypersurface scale factors (reshape to 1D array) + if self.propagate_uncertainty: + scales, uncertainties = container_hs.evaluate(param_values, return_uncertainty=True) + scales = scales.reshape(container.size) + uncertainties = uncertainties.reshape(container.size) + else: + scales = container_hs.evaluate(param_values).reshape(container.size) + + # Where there are no scales (e.g. empty bins), set scale factor to 1 + empty_bins_mask = ~np.isfinite(scales) + num_empty_bins = np.sum(empty_bins_mask) + if num_empty_bins > 0. and not self.warning_issued: + logging.warn("%i empty bins found in hypersurface" % num_empty_bins) + self.warning_issued = True + scales[empty_bins_mask] = 1. + if self.propagate_uncertainty: + uncertainties[empty_bins_mask] = 0. + + # Add to container + np.copyto(src=scales, dst=container["hs_scales"]) + container.mark_changed("hs_scales") + if self.propagate_uncertainty: + np.copyto(src=uncertainties, dst=container["hs_scales_uncertainty"]) + container.mark_changed("hs_scales_uncertainty") + + # Unlink the containers again + self.data.unlink_containers()
+ + +
+[docs] + def apply_function(self): + + for container in self.data: + # update uncertainty first, before the weights are changed. This step is skipped in event mode + if self.error_method == "sumw2": + + # If computing uncertainties in events mode, warn that + # hs error propagation will be skipped + if self.data.representation=='events': + logging.trace('WARNING: running stage in events mode. Hypersurface error propagation will be IGNORED.') + + elif self.propagate_uncertainty: + container["errors"] = container["weights"] * container["hs_scales_uncertainty"] + + else: + container["errors"] *= container["hs_scales"] + container.mark_changed('errors') + + if "bin_unc2" in container.keys: + container["bin_unc2"] = np.clip(container["bin_unc2"] * container["hs_scales"], a_min=0, a_max=np.inf) + container.mark_changed("bin_unc2") + + # Update weights according to hypersurfaces + container["weights"] = np.clip(container["weights"] * container["hs_scales"], a_min=0, a_max=np.inf)
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/discr_sys/ultrasurfaces.html b/_modules/pisa/stages/discr_sys/ultrasurfaces.html new file mode 100644 index 000000000..aaf4d950a --- /dev/null +++ b/_modules/pisa/stages/discr_sys/ultrasurfaces.html @@ -0,0 +1,406 @@ + + + + + + pisa.stages.discr_sys.ultrasurfaces — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.discr_sys.ultrasurfaces

+"""
+PISA pi stage to apply ultrasurface fits from discrete systematics parameterizations
+"""
+
+import numpy as np
+from numba import njit
+
+import collections
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.core.binning import MultiDimBinning
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils.log import set_verbosity, Levels
+
+from itertools import combinations, chain
+
+__all__ = [
+    "ultrasurfaces",
+]
+
+__author__ = "A. Trettin, L. Fischer"
+
+__license__ = """Copyright (c) 2014-2022, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+
+[docs] +class ultrasurfaces(Stage): + """ + Service to apply ultrasurface parameterisation stored in a feather file. + + Parameters + ---------- + fit_results_file : str + Path to .feather file containing all nominal events with gradients. + nominal_points : str or dict + Dictionary (or str that can be evaluated thereto) of the form + {'parameter_name': <nominal value>} containing the nominal value for each + parameter that was used to fit the gradients with. + varnames : list of str + List of variables to match the pisa events to the pre-fitted events. + approx_exponential : bool + Approximate the exponential using exp(x) = 1 + x. This is appropriate when + gradients have been fit with the purely linear `hardmax` activation function. + (If you don't know what that is, just leave it at `False`.) + support : str or dict + Dictionary (or str that can be evaluated thereto) of the form {'parameter_name': + (lower bound, upper bound)} containing the bounds of the parameter space inside + which the gradients are valid. If a value outside of these bounds is requested, + we have to extrapolate using the strategy defined in the `extrapolation` + parameter. + extrapolation : str + Strategy to use for extrapolating beyond the bounds set by the `bounds` option. + Options are `continue`, `linear` and `constant`. If `continue`, polynomial + features are simply extended at the risk of weights getting out of control. + If `linear`, second order features are extrapolated using their derivative at + the closest bound. If `constant`, the value at the closest boundary is returned. + params : ParamSet + Note that the params required to be in `params` are determined from + those listed in the `systematics`. + """ + + def __init__( + self, + fit_results_file, + nominal_points, + varnames=["pid", "true_coszen", "reco_coszen", "true_energy", "reco_energy"], + approx_exponential=False, + support=None, + extrapolation="continue", + **std_kwargs, + ): + # evaluation only works on event-by-event basis + assert std_kwargs["calc_mode"] == "events" + + # Store args + self.fit_results_file = fit_results_file + self.varnames = varnames + self.approx_exponential = approx_exponential + + if isinstance(nominal_points, str): + self.nominal_points = eval(nominal_points) + else: + self.nominal_points = nominal_points + assert isinstance(self.nominal_points, collections.abc.Mapping) + + if isinstance(support, str): + self.support = eval(support) + assert isinstance(self.support, collections.abc.Mapping) + elif isinstance(support, collections.abc.Mapping): + self.support = support + elif support is None: + self.support = None + else: + raise ValueError("Unknown input format for `support`.") + + self.extrapolation = extrapolation + + param_names = list(self.nominal_points.keys()) + for pname in param_names: + if self.support is not None and pname not in self.support: + raise ValueError( + f"Support range is missing for parameter {pname}" + ) + + # -- Initialize base class -- # + super().__init__( + expected_params=param_names, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + """Load the fit results from the file and make some compatibility checks""" + + # make this an optional dependency + import pandas as pd + from sklearn.neighbors import KDTree + + self.data.representation = self.calc_mode + + # create containers for scale factors + for container in self.data: + container["us_scales"] = np.ones(container.size, dtype=FTYPE) + + # load the feather file and extract gradient names + df = pd.read_feather(self.fit_results_file) + + self.gradient_names = [key for key in df.keys() if key.startswith("grad")] + + # create containers for gradients + for container in self.data: + for gradient_name in self.gradient_names: + container[gradient_name] = np.empty(container.size, dtype=FTYPE) + + # Convert the variable columns to an array + X_pandas = df[self.varnames].to_numpy() + # We will use a nearest-neighbor tree to search for matching events in the + # DataFrame. Ideally, these should actually be the exact same events with a + # distance of zero. We will raise a warning if we had to approximate an + # event by its nearest neighbor with a distance > 0. + + # At least in theory, this should always pick out the one exact event from the + # correct event category. If an event is not exactly matched, however, it's + # possible that the gradient for a numu_cc event might get picked from + # a nu_nc event, for example. We don't have any safeguards against that + # at this time, even though the information is in the DataFrame to do it. + + # TODO: Ensure event category of nearest neighbor matches that of query + tree = KDTree(X_pandas) + for container in self.data: + n_container = len(container["true_energy"]) + # It's important to match the datatype of the loaded DataFrame (single prec.) + # so that matches will be exact. + X_pisa = np.zeros((n_container, len(self.varnames)), dtype=X_pandas.dtype) + for i, vname in enumerate(self.varnames): + X_pisa[:, i] = container[vname] + # Query the tree for the single nearest neighbor + dists, ind = tree.query(X_pisa, k=1) + if np.any(dists > 0): + logging.warn( + f"Could not find exact match for {np.sum(dists > 0)} {container.name} " + f"events ({float(np.sum(dists > 0)) * 100 / n_container:.4f}%) " + "in the loaded DataFrame. Their " + "gradients will be taken from the nearest neighbor." + ) + # TODO: since we read out all gradients we could loop over the + # parameters outside and then over the containers inside + for gradient_name in self.gradient_names: + grads = df[gradient_name].to_numpy() + container[gradient_name] = grads[ind.ravel()]
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + # Calculate the `delta_p` matrix containing the polynomial features. + # If requested, these feature may be extrapolated using the strategy defined + # by `self.extrapolation`. + + delta_p_dict = dict() + + # The gradients may be of arbitrary order and have interaction + # terms. For example, if the gradient's name is + # `grad__dom_eff__hole_ice_p0`, then the corresponding feature is + # (delta dom_eff) * (delta hole_ice_p0). + for count, gradient_name in enumerate(self.gradient_names): + feature = 1.0 + # extract the parameter names from the name of the gradient + param_names = gradient_name.split("grad")[-1].split("__")[1:] + grad_order = len(param_names) + has_interactions = len(set(param_names)) > 1 + + for i, pname in enumerate(param_names): + # If support has been set and a parameter is evaluated outside of those + # bounds, we evaluate it at the nearest bound. + if self.support is None: + bounded_value = self.params[pname].m + else: + bounded_value = np.clip(self.params[pname].m, *self.support[pname]) + + # The bounded value of the parameter shift from nominal + x_b = bounded_value - self.nominal_points[pname] + # The unbounded value + x = self.params[pname].m - self.nominal_points[pname] + + # The extrapolation strategy `continue` is equivalent to just evaluating + # at the unbounded point. + if self.extrapolation == "continue": + # For a squared parameter, this will be done twice, i.e. the feature + # will be (dom_eff)^2 if the gradient is `grad__dom_eff__dom_eff`. + feature *= x + elif self.extrapolation == "constant": + # Constant extrapolation simply means that we evaluate the bounded + # value. + feature *= x_b + elif self.extrapolation == "linear": + # The linear extrapolation of a squared feature is given by + # y = x_b^2 + (2x_b)(x - x_b), + # which can be re-written as + # y = x_b (2x - x_b). + # We see right away that y = x^2 when x is within the bounds. + # We also want to pass through the first order gradients, since + # the linear extrapolation of x is trivially x. + + if grad_order == 1: + feature *= x + continue + + if has_interactions: + raise RuntimeError( + "Cannot calculate linear extrapolation for gradients with " + f"interaction terms: {gradient_name}" + ) + + if i == 0: + feature *= x_b + elif i == 1: + feature *= (2*x - x_b) + else: + raise RuntimeError( + "Cannot use linear extrapolation for orders > 2" + ) + + delta_p_dict[gradient_name] = feature + + for container in self.data: + + # The "gradient shift" is the sum of the gradients times the parameter shifts, + # i.e. grad * delta_p. + # We allocate this array just once and accumulate the sum over all gradients + # into it. + + # Also using zeros_like ensures consistent dtype + grad_shifts = np.zeros_like(container["weights"]) + + for count, gradient_name in enumerate(self.gradient_names): + shift = delta_p_dict[gradient_name] + grad_shift_inplace(container[gradient_name], shift, grad_shifts) + # In the end, the equation for the re-weighting scale is + # exp(grad_p1 * shift_p1 + grad_p2 * shift_p2 + ...) + if self.approx_exponential: + # We can approximate an exponential with exp(x) = 1 + x, + # but this is not recommended unless the gradients have also been fit + # using this approximation. + container["us_scales"] = 1 + grad_shifts + else: + container["us_scales"] = np.exp(grad_shifts)
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container["weights"] *= container["us_scales"]
+
+ + + +@njit +def grad_shift_inplace(grads, shift, out): + for i, g in enumerate(grads): + out[i] += shift * g +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/astrophysical.html b/_modules/pisa/stages/flux/astrophysical.html new file mode 100644 index 000000000..d616b79f6 --- /dev/null +++ b/_modules/pisa/stages/flux/astrophysical.html @@ -0,0 +1,262 @@ + + + + + + pisa.stages.flux.astrophysical — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.flux.astrophysical

+"""
+stage to implement getting the contribution to fluxes from astrophysical neutrino sources
+"""
+import numpy as np
+
+from pisa.utils.profiler import profile
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+
+from pisa.utils.numba_tools import WHERE, myjit
+
+PIVOT = FTYPE(100.0e3)
+
+
+
+[docs] +class astrophysical(Stage): + """ + Stage to apply power law astrophysical fluxes + + Parameters + ---------- + params + Expected params are .. :: + astro_delta : quantity (dimensionless) + astro_norm : quantity (dimensionless) + + TODO: flavor ratio as a parameter? Save for later. + """ + + def __init__(self, **std_kwargs): + self._central_gamma = FTYPE(-2.5) + self._central_norm = FTYPE(0.787e-18) + + self._e_ratio = FTYPE(1.0) + self._mu_ratio = FTYPE(1.0) + self._tau_ratio = FTYPE(1.0) + + expected_params = ("astro_delta", "astro_norm") + + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + """ + Setup the nominal flux + """ + self.data.representation = self.calc_mode + for container in self.data: + container["astro_weights"] = np.ones(container.size, dtype=FTYPE) + container["astro_flux"] = np.ones(container.size, dtype=FTYPE) + container["astro_flux_nominal"] = np.ones(container.size, dtype=FTYPE) + + # Loop over containers + for container in self.data: + + # Grab containers here once to save time + true_energy = container["true_energy"] + + container["astro_flux_nominal"] = self._central_norm * np.power( + (true_energy / PIVOT), self._central_gamma + ) + + # TODO split this up so that we can use flavor ratios + # nu_flux_nominal[:,0] = _precalc*self._e_ratio + # nu_flux_nominal[:,1] = _precalc*self._mu_ratio + # nu_flux_nominal[:,2] = _precalc*self._tau_ratio + + container.mark_changed("astro_flux_nominal")
+ + +
+[docs] + @profile + def compute_function(self): + """ + Tilt it, scale it, bop it + """ + self.data.representation = self.calc_mode + + delta = self.params.astro_delta.value.m_as("dimensionless") + norm = self.params.astro_norm.value + + for container in self.data: + apply_sys_loop( + container["true_energy"], + container["true_coszen"], + FTYPE(delta), + FTYPE(norm), + container["astro_flux_nominal"], + out=container["astro_flux"], + ) + container.mark_changed("astro_flux")
+ + +
+[docs] + @profile + def apply_function(self): + for container in self.data: + container["astro_weights"] = ( + container["initial_weights"] * container["astro_flux"] + )
+
+ + + +
+[docs] +def spectral_index_scale(true_energy, delta_index): + """ + Calculate spectral index scale. + Adjusts the weights for events in an energy dependent way according to a + shift in spectral index, applied about a user-defined energy pivot. + """ + return np.power(true_energy / PIVOT, delta_index)
+ + + +
+[docs] +def apply_sys_loop( + true_energy, + true_coszen, + delta_index, + norm, + astroflux_nominal, + out, +): + """ + Calculation: + 1) Start from nominal flux + 2) Apply spectral index shift + 3) Add contributions from MCEq-computed gradients + + Array dimensions : + true_energy : [A] + true_coszen : [A] + delta_index : scalar float + norm : scalar float + astroflux_nominal : [A,B] + out : [A,B] (sys flux) + where: + A = num events + B = num flavors in flux (=3, e.g. e, mu, tau) + """ + + n_evts = astroflux_nominal.shape[0] + + for event in range(n_evts): + spec_scale = spectral_index_scale(true_energy[event], delta_index) + out[event] = norm * astroflux_nominal[event] * spec_scale
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/barr_simple.html b/_modules/pisa/stages/flux/barr_simple.html new file mode 100644 index 000000000..5ff8bd35c --- /dev/null +++ b/_modules/pisa/stages/flux/barr_simple.html @@ -0,0 +1,339 @@ + + + + + + pisa.stages.flux.barr_simple — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.flux.barr_simple

+# pylint: disable=not-callable, wrong-import-position
+
+"""
+Stage to implement the old PISA/oscfit flux systematics
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import math
+import os
+import sys
+
+import numpy as np
+from numba import guvectorize, cuda
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils.numba_tools import WHERE, myjit, ftype
+from pisa.utils.resources import find_resource
+from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor
+
+
+
+[docs] +class barr_simple(Stage): # pylint: disable=invalid-name + """ + stage to apply Barr style flux uncertainties + uses parameterisations of plots from Barr 2006 paper + + Parameters + ---------- + params + Expected params are .. :: + + nue_numu_ratio : quantity (dimensionless) + nu_nubar_ratio : quantity (dimensionless) + delta_index : quantity (dimensionless) + Barr_uphor_ratio : quantity (dimensionless) + Barr_nu_nubar_ratio : quantity (dimensionless) + + """ + def __init__( + self, + **std_kwargs, + ): + expected_params = ( + "nue_numu_ratio", + "nu_nubar_ratio", + "delta_index", + "Barr_uphor_ratio", + "Barr_nu_nubar_ratio", + ) + + # init base class + super(barr_simple, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + self.data.representation = self.calc_mode + for container in self.data: + container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE)
+ + +
+[docs] + @profile + def compute_function(self): + self.data.representation = self.calc_mode + + nue_numu_ratio = self.params.nue_numu_ratio.value.m_as("dimensionless") + nu_nubar_ratio = self.params.nu_nubar_ratio.value.m_as("dimensionless") + delta_index = self.params.delta_index.value.m_as("dimensionless") + Barr_uphor_ratio = self.params.Barr_uphor_ratio.value.m_as("dimensionless") + Barr_nu_nubar_ratio = self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless") + + for container in self.data: + apply_sys_vectorized( + container["true_energy"], + container["true_coszen"], + container["nu_flux_nominal"], + container["nubar_flux_nominal"], + container["nubar"], + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out=container["nu_flux"], + ) + container.mark_changed('nu_flux')
+
+ + + +@myjit +def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): + """ apply ratio scale to flux values + + Parameters + ---------- + ratio_scale : float + + sum_constant : bool + if Ture, then the sum of the new flux will be identical to the old flux + + in1 : float + + in2 : float + + out : array + + """ + if in1 == 0. and in2 == 0.: + out[0] = 0. + out[1] = 0. + return + + if sum_constant: + orig_ratio = in1 / in2 + orig_sum = in1 + in2 + new = orig_sum / (1. + ratio_scale * orig_ratio) + out[0] = ratio_scale * orig_ratio * new + out[1] = new + else: + out[0] = ratio_scale * in1 + out[1] = in2 + + +@myjit +def spectral_index_scale(true_energy, egy_pivot, delta_index): + """ calculate spectral index scale """ + return math.pow((true_energy / egy_pivot), delta_index) + + +@myjit +def apply_sys_kernel( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + # nue/numu ratio + new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) + new_nubar_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux + ) + apply_ratio_scale( + nue_numu_ratio, + True, + nubar_flux_nominal[0], + nubar_flux_nominal[1], + new_nubar_flux, + ) + + # apply flux systematics + # spectral idx + idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) + new_nu_flux[0] *= idx_scale + new_nu_flux[1] *= idx_scale + new_nubar_flux[0] *= idx_scale + new_nubar_flux[1] *= idx_scale + + # nu/nubar ratio + new_nue_flux = cuda.local.array(2, dtype=ftype) + new_numu_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux + ) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux + ) + if nubar < 0: + out[0] = new_nue_flux[1] + out[1] = new_numu_flux[1] + else: + out[0] = new_nue_flux[0] + out[1] = new_numu_flux[0] + + # Barr flux + out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) + out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) + + out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) + out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) + + +# vectorized function to apply +# must be outside class +if FTYPE == np.float64: + SIGNATURE = "(f8, f8, f8[:], f8[:], i4, f8, f8, f8, f8, f8, f8[:])" +else: + SIGNATURE = "(f4, f4, f4[:], f4[:], i4, f4, f4, f4, f4, f4, f4[:])" + + +@guvectorize([SIGNATURE], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) +def apply_sys_vectorized( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + apply_sys_kernel( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, + ) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/daemon_flux.html b/_modules/pisa/stages/flux/daemon_flux.html new file mode 100644 index 000000000..d441a88bc --- /dev/null +++ b/_modules/pisa/stages/flux/daemon_flux.html @@ -0,0 +1,322 @@ + + + + + + pisa.stages.flux.daemon_flux — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.flux.daemon_flux

+"""
+Implementation of DAEMON flux (https://arxiv.org/abs/2303.00022) 
+by Juan Pablo Yañez and Anatoli Fedynitch for use in PISA.
+
+Maria Liubarska, J.P. Yanez 2023
+"""
+
+import numpy as np
+from daemonflux import Flux
+from daemonflux import __version__ as daemon_version
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.core.param import Param
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from numba import jit
+from scipy import interpolate
+from packaging.version import Version
+
+
+
+[docs] +class daemon_flux(Stage): + """ + DAEMON flux stage + + Parameters + ---------- + + params: ParamSet + Must have parameters: .. :: + + daemon_K_158G : quantity (dimensionless) + + daemon_K_2P : quantity (dimensionless) + + daemon_K_31G : quantity (dimensionless) + + daemon_antiK_158G : quantity (dimensionless) + + daemon_antiK_2P : quantity (dimensionless) + + daemon_antiK_31G : quantity (dimensionless) + + daemon_n_158G : quantity (dimensionless) + + daemon_n_2P : quantity (dimensionless) + + daemon_p_158G : quantity (dimensionless) + + daemon_p_2P : quantity (dimensionless) + + daemon_pi_158G : quantity (dimensionless) + + daemon_pi_20T : quantity (dimensionless) + + daemon_pi_2P : quantity (dimensionless) + + daemon_pi_31G : quantity (dimensionless) + + daemon_antipi_158G : quantity (dimensionless) + + daemon_antipi_20T : quantity (dimensionless) + + daemon_antipi_2P : quantity (dimensionless) + + daemon_antipi_31G : quantity (dimensionless) + + daemon_GSF_1 : quantity (dimensionless) + + daemon_GSF_2 : quantity (dimensionless) + + daemon_GSF_3 : quantity (dimensionless) + + daemon_GSF_4 : quantity (dimensionless) + + daemon_GSF_5 : quantity (dimensionless) + + daemon_GSF_6 : quantity (dimensionless) + + """ + + def __init__( + self, + **std_kwargs, + ): + + # first have to check daemonflux package version is >=0.8.0 + # (have to do this to ensure chi2 prior penalty is calculated correctly) + if Version(daemon_version) < Version("0.8.0"): + logging.fatal("Detected daemonflux version below 0.8.0! This will lead to incorrect penalty calculation. You must update your daemonflux package to use this stage. You can do it by running 'pip install daemonflux --upgrade'") + raise Exception('detected daemonflux version < 0.8.0') + + # create daemonflux Flux object + self.flux_obj = Flux(location='IceCube', use_calibration=True) + + # get parameter names from daemonflux + self.daemon_names = self.flux_obj.params.known_parameters + + # make parameter names pisa config compatible and add prefix + self.daemon_params = ['daemon_'+p.replace('pi+','pi').replace('pi-','antipi').replace('K+','K').replace('K-','antiK') + for p in self.daemon_names] + + # add daemon_chi2 internal parameter to carry on chi2 penalty from daemonflux (using covar. matrix) + daemon_chi2 = Param(name='daemon_chi2', nominal_value=0., + value=0., prior=None, range=None, is_fixed=True) + + # saving number of parameters into a internal param in order to check that we don't have + # non-daemonflux params with 'daemon_' in their name, which will make prior penalty calculation incorrect + daemon_params_len = Param(name='daemon_params_len', nominal_value=len(self.daemon_names)+2, + value=len(self.daemon_names)+2, prior=None, range=None, is_fixed=True) + + std_kwargs['params'].update([daemon_chi2,daemon_params_len]) + + # init base class + super(daemon_flux, self).__init__( + expected_params=tuple(self.daemon_params+['daemon_chi2','daemon_params_len']), + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + + self.data.representation = self.calc_mode + + for container in self.data: + container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE)
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + # get modified parameters (in units of sigma) + modif_param_dict = {} + for i,k in enumerate(self.daemon_params): + modif_param_dict[self.daemon_names[i]] = getattr(self.params, k).value.m_as("dimensionless") + + # update chi2 parameter + self.params['daemon_chi2'].value = self.flux_obj.chi2(modif_param_dict) + + # compute flux maps + flux_map_numu = make_2d_flux_map(self.flux_obj, + particle = 'numu', + params = modif_param_dict) + flux_map_numubar = make_2d_flux_map(self.flux_obj, + particle = 'antinumu', + params = modif_param_dict) + flux_map_nue = make_2d_flux_map(self.flux_obj, + particle = 'nue', + params = modif_param_dict) + flux_map_nuebar = make_2d_flux_map(self.flux_obj, + particle = 'antinue', + params = modif_param_dict) + + + # calc modified flux using provided parameters + for container in self.data: + nubar = container['nubar'] + + nue_flux = evaluate_flux_map(flux_map_nuebar if nubar>0 else flux_map_nue, + container['true_energy'], + container['true_coszen']) + + numu_flux = evaluate_flux_map(flux_map_numubar if nubar>0 else flux_map_numu, + container['true_energy'], + container['true_coszen']) + + + container['nu_flux'][:,0] = nue_flux + container['nu_flux'][:,1] = numu_flux + + container.mark_changed("nu_flux")
+
+ + +
+[docs] +@jit(forceobj=True) +def make_2d_flux_map(flux_obj, + particle = 'numuflux', + egrid = np.logspace(-1,5,500), + params = {}, + ): + + icangles = list(flux_obj.zenith_angles) + icangles_array = np.array(icangles, dtype=float) + mysort = icangles_array.argsort() + icangles = np.array(icangles)[mysort][::-1] + + flux_ref = np.zeros([len(egrid), len(icangles)]) + costheta_angles = np.zeros(len(icangles)) + + for index in range(len(icangles)): + costheta_angles[index] = np.cos(np.deg2rad(float(icangles[index]))) + flux_ref[:,index] = flux_obj.flux(egrid, icangles[index], particle, params) + + fcn = interpolate.RectBivariateSpline(egrid, + costheta_angles, + flux_ref) + return fcn
+ + +
+[docs] +@jit(forceobj=True) +def evaluate_flux_map(flux_map, true_energy, true_coszen): + + uconv = true_energy**-3 * 1e4 + return flux_map.ev(true_energy, true_coszen) * uconv
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/hillasg.html b/_modules/pisa/stages/flux/hillasg.html new file mode 100644 index 000000000..6d66a9cd0 --- /dev/null +++ b/_modules/pisa/stages/flux/hillasg.html @@ -0,0 +1,229 @@ + + + + + + pisa.stages.flux.hillasg — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.flux.hillasg

+"""
+Stage to evaluate the Hillas-Gaisser expectations from precalculated fluxes 
+
+"""
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights
+
+
+
+[docs] +class hillasg(Stage): + """ + stage to generate nominal flux + + Parameters + ---------- + params + Expected params .. :: + flux_table : str + + """ + + def __init__(self, **std_kwargs): + + expected_params = ("flux_table",) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + + self.flux_table = load_2d_table(self.params.flux_table.value) + + self.data.representation = self.calc_mode + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers( + "nu", + [ + "nue_cc", + "numu_cc", + "nutau_cc", + "nue_nc", + "numu_nc", + "nutau_nc", + "nuebar_cc", + "numubar_cc", + "nutaubar_cc", + "nuebar_nc", + "numubar_nc", + "nutaubar_nc", + ], + ) + for container in self.data: + container["nu_flux_nominal"] = np.empty((container.size, 3), dtype=FTYPE) + container["nubar_flux_nominal"] = np.empty((container.size, 3), dtype=FTYPE) + # container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE) + + # don't forget to un-link everything again + self.data.unlink_containers()
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers( + "nu", + [ + "nue_cc", + "numu_cc", + "nutau_cc", + "nue_nc", + "numu_nc", + "nutau_nc", + "nuebar_cc", + "numubar_cc", + "nutaubar_cc", + "nuebar_nc", + "numubar_nc", + "nutaubar_nc", + ], + ) + + # create lists for iteration + out_names = ["nu_flux_nominal"] * 3 + ["nubar_flux_nominal"] * 3 + indices = [0, 1, 2, 0, 1, 2] + tables = ["nue", "numu", "nutau", "nuebar", "numubar", "nutaubar"] + for container in self.data: + for out_name, index, table in zip(out_names, indices, tables): + logging.info( + "Calculating nominal %s flux for %s", table, container.name + ) + calculate_2d_flux_weights( + true_energies=container["true_energy"], + true_coszens=container["true_coszen"], + en_splines=self.flux_table[table], + out=container[out_name][:, index], + ) + container.mark_changed("nu_flux_nominal") + container.mark_changed("nubar_flux_nominal") + + # don't forget to un-link everything again + self.data.unlink_containers()
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/honda_ip.html b/_modules/pisa/stages/flux/honda_ip.html new file mode 100644 index 000000000..29e5ca74d --- /dev/null +++ b/_modules/pisa/stages/flux/honda_ip.html @@ -0,0 +1,217 @@ + + + + + + pisa.stages.flux.honda_ip — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.flux.honda_ip

+# pylint: disable=not-callable
+"""
+Stage to evaluate the Honda flux tables using IP splines
+
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights
+
+
+
+[docs] +class honda_ip(Stage): + """ + stage to generate nominal flux + + Parameters + ---------- + params + Expected params .. :: + flux_table : str + + """ + + def __init__( + self, + **std_kwargs + ): + + expected_params = ('flux_table',) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + + self.flux_table = load_2d_table(self.params.flux_table.value) + + self.data.representation = self.calc_mode + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + for container in self.data: + container['nu_flux_nominal'] = np.empty((container.size, 2), dtype=FTYPE) + container['nubar_flux_nominal'] = np.empty((container.size, 2), dtype=FTYPE) + # container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE) + + # don't forget to un-link everything again + self.data.unlink_containers()
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + # create lists for iteration + out_names = ['nu_flux_nominal']*2 + ['nubar_flux_nominal']*2 + indices = [0, 1, 0, 1] + tables = ['nue', 'numu', 'nuebar', 'numubar'] + for container in self.data: + for out_name, index, table in zip(out_names, indices, tables): + logging.info('Calculating nominal %s flux for %s', table, container.name) + calculate_2d_flux_weights(true_energies=container['true_energy'], + true_coszens=container['true_coszen'], + en_splines=self.flux_table[table], + out=container[out_name][:, index] + ) + container.mark_changed('nu_flux_nominal') + container.mark_changed('nubar_flux_nominal') + + # don't forget to un-link everything again + self.data.unlink_containers()
+
+ + + + # def apply_function(self): + + # self.data.representation = self.apply_mode + + # # Set flux to be the nominal flux (choosing correct nu vs nubar flux for the container) + # # Note that a subsequent systematic flux stage may change this + # for container in self.data: + # np.copyto( src=container["nu%s_flux_nominal"%("" if container["nubar"] > 0 else "bar")].get("host"), dst=container["nu_flux"].get("host") ) + # container.mark_changed('nu_flux') +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/mceq_barr.html b/_modules/pisa/stages/flux/mceq_barr.html new file mode 100644 index 000000000..5b9d5f49b --- /dev/null +++ b/_modules/pisa/stages/flux/mceq_barr.html @@ -0,0 +1,638 @@ + + + + + + pisa.stages.flux.mceq_barr — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.flux.mceq_barr

+"""
+Stage to implement the inclusive neutrino flux as calculated with MCEq,
+and the systematic flux variations based on the Barr scheme.
+
+It requires spline tables created by the `pisa/scripts/create_barr_sys_tables_mceq.py`
+Pre-generated tables can be found at `fridge/analysis/common/data/flux/
+
+Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from bz2 import BZ2File
+import collections
+import pickle
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils.numba_tools import WHERE, myjit
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class mceq_barr(Stage): + """ + Stage that uses gradients calculated with MCEq to handle flux uncertainties. + This stage calculates flux variations relative to a nominal flux that must + be calculated ahead of time. + + Parameters + ---------- + table_file : pickle file containing pre-generated tables from MCEq + + params : ParamSet + Must exclusively have parameters: .. :: + + delta_index : quantity (dimensionless) + Shift in the spectral index of the neutrino flux. Prior with a mean of 0. + + energy_pivot : quantity (GeV) + The spectral index is shifting around a pivot point + + barr_*_Pi : quantity (dimensionless) + * from a to i + Uncertainty on pi+ production in a region of phase space *, + further defined in Barr 2006 + + pion_ratio : quantity (dimensionless) + The uncertainty on pi- production is assumed to be correlated + to the pi+ production uncertainty, + as the pi+/pi- ratio is measured. Thus the uncertainty on pi- + production is defined by pion_ratio and barr_*_pi + + barr_*_K : quantity (dimensionless) + * from w to z + Uncertainty on K+ production in a region of phase space *, + further defined in Barr 2006 + + barr_*_antiK : quantity (dimensionless) + * from w to z + Uncertainty on K- and K+ production is assumed to be + uncorrelated as the ratio is badly determined. + + Notes + ----- + The nominal flux is calculated ahead of time using MCEq, + then multiplied with a shift in spectral index, and then modifications due + to meson production (barr variables) are added. + + The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) + - one solution for meson and one solution for the antimeson production uncertainty. + + Each solution consists of 8 splines: "numu", "numubar", "nue", and "nuebar" + is the nominal flux. + "dnumu", "dnumubar", "dnue", and "dnuebar" is the gradient of the Barr modification + + """ + + def __init__( + self, + table_file, + include_nutau_flux=False, + use_honda_nominal_flux=True, + **std_kwargs, + ): + + # + # Define parameterisation + # + + # Define the Barr parameters + self.barr_param_names = [ # TODO common code with `create_barr_sys_tables_mceq.py` ? + # pions + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + # kaons + "w", + "x", + "y", + "z", + ] + + # Define signs for Barr params + # + -> meson production + # - -> antimeson production + self.barr_param_signs = ["+", "-"] + + # Atmopshere model params + # TODO + + # Get the overall list of params for which we have gradients stored + # Define a mapping to index values, will be useful later + self.gradient_param_names = [ + n + s for n in self.barr_param_names for s in self.barr_param_signs + ] + self.gradient_param_indices = collections.OrderedDict( + [(n, i) for i, n in enumerate(self.gradient_param_names)] + ) + + # + # Call stage base class constructor + # + + # Define stage parameters + expected_params = ( + # pion + "pion_ratio", + "barr_a_Pi", + "barr_b_Pi", + "barr_c_Pi", + "barr_d_Pi", + "barr_e_Pi", + "barr_f_Pi", + "barr_g_Pi", + "barr_h_Pi", + "barr_i_Pi", + # kaon + "barr_w_K", + "barr_x_K", + "barr_y_K", + "barr_z_K", + "barr_w_antiK", + "barr_x_antiK", + "barr_y_antiK", + "barr_z_antiK", + # CR + "delta_index", + "energy_pivot", + ) + + # store args + self.table_file = table_file + self.include_nutau_flux = include_nutau_flux + self.use_honda_nominal_flux = use_honda_nominal_flux + + # init base class + super(mceq_barr, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + + self.data.representation = self.calc_mode + + # + # Init arrays + # + + # Prepare some array shapes + gradient_params_shape = (len(self.gradient_param_names),) + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', + 'nutaubar_cc', 'nuebar_nc', + 'numubar_nc', 'nutaubar_nc']) + + # Loop over containers + for container in self.data: + + #TODO Toggles for including both nu and nubar flux (required for CPT violating oscillations) + + # Flux container shape : [ N events, N flavors in primary flux ] + num_events = container.size + num_flux_flavs = 3 if self.include_nutau_flux else 2 + flux_container_shape = (num_events, num_flux_flavs) + + # Gradients container shape + gradients_shape = tuple( + list(flux_container_shape) + list(gradient_params_shape) + ) + + # Create arrays that will be populated in the stage + # Note that the flux arrays will be chosen as nu or nubar depending + # on the container (e.g. not simultaneously storing nu and nubar) + # Would rather use multi-dim arrays here but limited by fact that + # numba only supports 1/2D versions of numpy functions + container["nu_flux_nominal"] = np.full( + flux_container_shape, np.NaN, dtype=FTYPE + ) + container["nu_flux"] = np.full(flux_container_shape, np.NaN, dtype=FTYPE) + container["gradients"] = np.full(gradients_shape, np.NaN, dtype=FTYPE) + + # Also create an array container to hold the gradient parameter values + # Only want this once, e.g. not once per container + self.gradient_params = np.empty(gradient_params_shape, dtype=FTYPE) + + # + # Load MCEq splines + # + + # Have splined both nominal fluxes and gradients in flux w.r.t. + # Barr parameters, using MCEQ. + + # Have splines for each Barr parameter, plus +/- versions of each + # Barr parameter corresponding to mesons/antimesons. + + # For a given Barr parameter, an underlying dictionary have the following + # keywords: + # "numu", "numubar", "nue", "nuebar" + # derivatives: "dnumu", "dnumubar", "dnue", dnuebar" + # Units are changed to m^-2 in creates_splines.., rather than cm^2 which + # is the unit of calculation in MCEq + + # Note that doing this all on CPUs, since the splines reside on the CPUs + # The actual `compute_function` computation can be done on GPUs though + + # Load the MCEq splines + spline_file = find_resource(self.table_file) + logging.info("Loading MCEq spline tables from : %s", spline_file) + # Encoding is to support pickle files created with python v2 + self.spline_tables_dict = pickle.load(BZ2File(spline_file), encoding="latin1") + + # Ensure that the user is not loading an incompatible spline + for bp in self.barr_param_names: + bp_p = bp+'+' # meson + bp_m = bp+'-' # antimeson + assert bp_p in self.spline_tables_dict.keys(), ( + "Gradient parameter '%s' missing from table" % bp_p + ) + assert bp_m in self.spline_tables_dict.keys(), ( + "Gradient parameter '%s' missing from table" % bp_m + ) + + + # Loop over containers + for container in self.data: + + # Grab containers here once to save time + # TODO make spline generation script store splines directly in + # terms of energy, not ln(energy) + true_log_energy = np.log(container["true_energy"]) + true_abs_coszen = np.abs(container["true_coszen"]) + nu_flux_nominal = container["nu_flux_nominal"] + gradients = container["gradients"] + nubar = container["nubar"] + + # + # Nominal flux + # + + if not self.use_honda_nominal_flux : + + # Evaluate splines to get nominal flux + # Need to correctly map nu/nubar and flavor to the output arrays + + # Note that nominal flux is stored multiple times (once per Barr parameter) + # Choose an arbitrary one to get the nominal fluxes + arb_gradient_param_key = self.gradient_param_names[0] + + # nue(bar) + nu_flux_nominal[:, 0] = self.spline_tables_dict[arb_gradient_param_key]["nue" if nubar > 0 else "nuebar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # numu(bar) + nu_flux_nominal[:, 1] = self.spline_tables_dict[arb_gradient_param_key]["numu" if nubar > 0 else "numubar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # nutau(bar) + # Currently setting to 0 #TODO include nutau flux (e.g. prompt) in splines + if self.include_nutau_flux : + nu_flux_nominal[:, 2] = self.spline_tables_dict[arb_gradient_param_key]["nutau" if nubar > 0 else "nutaubar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # Tell the smart arrays we've changed the nominal flux values on the host + container.mark_changed("nu_flux_nominal") + + + # + # Flux gradients + # + + # Evaluate splines to get the flux graidents w.r.t the Barr parameter values + # Need to correctly map nu/nubar and flavor to the output arrays + + # Loop over parameters + for ( + gradient_param_name, + gradient_param_idx, + ) in self.gradient_param_indices.items(): + + # nue(bar) + gradients[:, 0, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnue" if nubar > 0 else "dnuebar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # numu(bar) + gradients[:, 1, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnumu" if nubar > 0 else "dnumubar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # nutau(bar) + if self.include_nutau_flux : + gradients[:, 2, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnutau" if nubar > 0 else "dnutaubar"]( + true_abs_coszen, + true_log_energy, + grid=False, + ) + + # Tell the smart arrays we've changed the flux gradient values on the host + container.mark_changed("gradients") + + # don't forget to un-link everything again + self.data.unlink_containers()
+ + +
+[docs] + def antipion_production(self, barr_var, pion_ratio): + """ + Combine pi+ barr param and pi+/pi- ratio to get pi- barr param + Definitions: + pion ratio = (1 + barr_var+) / (1 + barr_var-) + delta pion ratio = pion ratio - 1 (e.g. deviation from nominal ratio value, which is 1) + Note that the `pion_ratio` param really represents the "delta pion ratio", so is defined + similarly to the barr variables themselves . + """ + return ((1 + barr_var) / (1 + pion_ratio)) - 1
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', + 'nutaubar_cc', 'nuebar_nc', + 'numubar_nc', 'nutaubar_nc']) + + # + # Get params + # + + # Spectral index (and required energy pivot) + delta_index = self.params.delta_index.value.m_as("dimensionless") + energy_pivot = self.params.energy_pivot.value.m_as("GeV") + + # Grab the pion ratio + pion_ratio = self.params.pion_ratio.value.m_as("dimensionless") + + # Map the user parameters into the Barr +/- params + # pi- production rates is restricted by the pi-ratio, just as in arXiv:0611266 + # TODO might want dedicated priors for pi- params (but without corresponding free params) + gradient_params_mapping = collections.OrderedDict() + gradient_params_mapping["a+"] = self.params.barr_a_Pi.value.m_as("dimensionless") + gradient_params_mapping["b+"] = self.params.barr_b_Pi.value.m_as("dimensionless") + gradient_params_mapping["c+"] = self.params.barr_c_Pi.value.m_as("dimensionless") + gradient_params_mapping["d+"] = self.params.barr_d_Pi.value.m_as("dimensionless") + gradient_params_mapping["e+"] = self.params.barr_e_Pi.value.m_as("dimensionless") + gradient_params_mapping["f+"] = self.params.barr_f_Pi.value.m_as("dimensionless") + gradient_params_mapping["g+"] = self.params.barr_g_Pi.value.m_as("dimensionless") + gradient_params_mapping["h+"] = self.params.barr_h_Pi.value.m_as("dimensionless") + gradient_params_mapping["i+"] = self.params.barr_i_Pi.value.m_as("dimensionless") + for k in list(gradient_params_mapping.keys()): + gradient_params_mapping[k.replace("+", "-")] = self.antipion_production( + gradient_params_mapping[k], pion_ratio + ) + + # kaons + # as the kaon ratio is unknown, K- production is not restricted + gradient_params_mapping["w+"] = self.params.barr_w_K.value.m_as("dimensionless") + gradient_params_mapping["w-"] = self.params.barr_w_antiK.value.m_as("dimensionless") + gradient_params_mapping["x+"] = self.params.barr_x_K.value.m_as("dimensionless") + gradient_params_mapping["x-"] = self.params.barr_x_antiK.value.m_as("dimensionless") + gradient_params_mapping["y+"] = self.params.barr_y_K.value.m_as("dimensionless") + gradient_params_mapping["y-"] = self.params.barr_y_antiK.value.m_as("dimensionless") + gradient_params_mapping["z+"] = self.params.barr_z_K.value.m_as("dimensionless") + gradient_params_mapping["z-"] = self.params.barr_z_antiK.value.m_as("dimensionless") + + # Populate array Barr param array + for ( + gradient_param_name, + gradient_param_idx, + ) in self.gradient_param_indices.items(): + self.gradient_params[gradient_param_idx] = gradient_params_mapping[ + gradient_param_name + ] + + # + # Loop over containers + # + + for container in self.data: + + # + # Apply the systematics to the flux + # + + # Figure out which key to use for the nominal flux + if self.use_honda_nominal_flux : + if container["nubar"] > 0: nominal_flux_key = "nu_flux_nominal" + elif container["nubar"] < 0: nominal_flux_key = "nubar_flux_nominal" + else : + nominal_flux_key = "nu_flux_nominal" + + apply_sys_loop( + container["true_energy"], + container["true_coszen"], + FTYPE(delta_index), + FTYPE(energy_pivot), + container[nominal_flux_key], + container["gradients"], + self.gradient_params, + out=container["nu_flux"], + ) + container.mark_changed("nu_flux") + + # Check for negative results from spline + # TODO - add more spline error/misusage handling + # e.g. if events have energy outside spline range throw ERROR + negative_mask = container["nu_flux"] < 0 + if np.any(negative_mask): + container["nu_flux"][negative_mask] = 0.0 + + container.mark_changed("nu_flux") + + # don't forget to un-link everything again + self.data.unlink_containers()
+
+ + +@myjit +def spectral_index_scale(true_energy, energy_pivot, delta_index): + """ + Calculate spectral index scale. + Adjusts the weights for events in an energy dependent way according to a + shift in spectral index, applied about a user-defined energy pivot. + """ + return np.power((true_energy / energy_pivot), delta_index) + +@myjit +def apply_sys_loop( + true_energy, + true_coszen, + delta_index, + energy_pivot, + nu_flux_nominal, + gradients, + gradient_params, + out, +): + """ + Calculation: + 1) Start from nominal flux + 2) Apply spectral index shift + 3) Add contributions from MCEq-computed gradients + + Array dimensions : + true_energy : [A] + true_coszen : [A] + nubar : scalar integer + delta_index : scalar float + energy_pivot : scalar float + nu_flux_nominal : [A,B] + gradients : [A,B,C] + gradient_params : [C] + out : [A,B] (sys flux) + where: + A = num events + B = num flavors in flux (=3, e.g. e, mu, tau) + C = num gradients + """ + + n_evts, n_flavs = nu_flux_nominal.shape + + for event in range(n_evts): + spec_scale = spectral_index_scale(true_energy[event], energy_pivot, delta_index) + for flav in range(n_flavs): + out[event, flav] = nu_flux_nominal[event, flav] * spec_scale + for i in range(len(gradient_params)): + out[event, flav] += gradients[event, flav, i] * gradient_params[i] +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/flux/mceq_barr_red.html b/_modules/pisa/stages/flux/mceq_barr_red.html new file mode 100644 index 000000000..b1facb86a --- /dev/null +++ b/_modules/pisa/stages/flux/mceq_barr_red.html @@ -0,0 +1,590 @@ + + + + + + pisa.stages.flux.mceq_barr_red — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.flux.mceq_barr_red

+"""
+Stage to implement the inclusive neutrino flux as calculated with MCEq,
+and the systematic flux variations based on the Barr scheme.
+
+It requires spline tables created by the `pisa/scripts/create_barr_sys_tables_mceq.py`
+Pre-generated tables can be found at `fridge/analysis/common/data/flux/
+
+Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from bz2 import BZ2File
+import collections
+import pickle
+
+import numpy as np
+from numba import njit, prange  # trivially parallelize for-loops
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils.numba_tools import WHERE, myjit
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class mceq_barr_red(Stage): + """ + Stage that uses gradients calculated with MCEq to handle flux uncertainties. + This stage calculates flux variations relative to a nominal flux that must + be calculated ahead of time. Parameters to control pion and kaon production + are reduced from the full Barr scheme, by forcing many of them to scale in a + fully correlated way. + + Parameters + ---------- + table_file : pickle file containing pre-generated tables from MCEq + + params : ParamSet + Must exclusively have parameters: .. :: + + delta_index : quantity (dimensionless) + Shift in the spectral index of the neutrino flux. Prior with a mean of 0. + + energy_pivot : quantity (GeV) + The spectral index is shifting around a pivot point + + barr_*_Pi : quantity (dimensionless) + * from a to i + Uncertainty on pi+ production in a region of phase space *, + further defined in Barr 2006 + + pion_ratio : quantity (dimensionless) + The uncertainty on pi- production is assumed to be correlated + to the pi+ production uncertainty, + as the pi+/pi- ratio is measured. Thus the uncertainty on pi- + production is defined by pion_ratio and barr_*_pi + + barr_*_K : quantity (dimensionless) + * from w to z + Uncertainty on K+ production in a region of phase space *, + further defined in Barr 2006 + + barr_*_antiK : quantity (dimensionless) + * from w to z + Uncertainty on K- and K+ production is assumed to be + uncorrelated as the ratio is badly determined. + + Notes + ----- + The nominal flux is calculated ahead of time using the honda_ip stage, + then multiplied with a shift in spectral index, and then modifications due + to meson production (barr variables) are added. + + The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) + - one solution for meson and one solution for the antimeson production uncertainty. + + Each solution consists of 4 splines: "dnumu", "dnumubar", "dnue", and + "dnuebar". These are the gradients that govern how the neutrino fluxes vary + depending on modifications to the Barr params. + + """ + + def __init__( + self, + table_file, + **std_kwargs, + ): + # + # Define parameterisation + # + + # Define the Barr parameters + # TODO Barr block definition could change - need to make this more flexible + # Perhaps let user define the blocks, and then table is generated on the + # fly as a first step? Could take up to 1 hour to produce table though... + self.barr_param_names = [ + # pions + "af", + "g", + "h", + "i", + # kaons + "w", + "x", + "y", + "z", + ] + + # Define signs for Barr params + # + -> meson production + # - -> antimeson production + self.barr_param_signs = ["+", "-"] + + # Atmopshere model params + # TODO + + # Get the overall list of params for which we have gradients stored + # Define a mapping to index values, will be useful later + self.gradient_param_names = [ + n + s for n in self.barr_param_names for s in self.barr_param_signs + ] + self.gradient_param_indices = collections.OrderedDict( + [(n, i) for i, n in enumerate(self.gradient_param_names)] + ) + + # + # Call stage base class constructor + # + + # Define stage parameters + expected_params = ( + # pion + "pion_ratio", + "barr_af_Pi", + "barr_g_Pi", + "barr_h_Pi", + "barr_i_Pi", + # kaon + "barr_w_K", + "barr_x_K", + "barr_y_K", + "barr_z_K", + "barr_w_antiK", + "barr_x_antiK", + "barr_y_antiK", + "barr_z_antiK", + # CR + "delta_index", + "energy_pivot", + ) + + # Using Honda for nominal flux. Keys should already exist + # what are keys added or altered in the calculation used during apply + # what keys are added or altered for the outputs during apply + + # store args + self.table_file = table_file + + # init base class + super(mceq_barr_red, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + + self.data.representation = self.calc_mode + + # + # Init arrays + # + + # Prepare some array shapes + gradient_params_shape = (len(self.gradient_param_names),) + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', + 'nutaubar_cc', 'nuebar_nc', + 'numubar_nc', 'nutaubar_nc']) + + # Loop over containers + for container in self.data: + + # Define shapes for containers + + # TODO maybe include toggles for nutau (only needed if prompt + # considered) and for nu+nubar (only needed if nu->nubar + # oscillations included) for better speed/memory performance + + # [ N events, 2 flavors in flux, nu vs nubar ] + # SDB - reduced flavours to 2 (nue, numu) since nutau flux not + # stored in MCEq splines + flux_container_shape = (container.size, 2) + gradients_shape = tuple( + list(flux_container_shape) + list(gradient_params_shape) + ) + + container["nu_flux"] = np.full(flux_container_shape, np.NaN, dtype=FTYPE) + container["gradients"] = np.full(gradients_shape, np.NaN, dtype=FTYPE) + + # Also create an array container to hold the gradient parameter values + # Only want this once, e.g. not once per container + self.gradient_params = np.empty(gradient_params_shape, dtype=FTYPE) + + # + # Load MCEq splines + # + + # Have splines for each Barr parameter, plus +/- versions of each + # Barr parameter corresponding to mesons/antimesons. + + # For a given Barr parameter, an underlying dictionary have the following + # keywords: "dnumu", "dnumubar", "dnue", dnuebar" + + # Units are changed to m^-2 in creates_splines.., rather than cm^2 which + # is the unit of calculation in MCEq!!!! + + # Note that doing this all on CPUs, since the splines reside on the CPUs + # The actual `compute_function` computation can be done on GPUs though + + # Load the MCEq splines + spline_file = find_resource(self.table_file) + logging.info("Loading MCEq spline tables from : %s", spline_file) + # Encoding is to support pickle files created with python v2 + self.spline_tables_dict = pickle.load(BZ2File(spline_file), encoding="latin1") + + # Ensure that the user is not loading an incompatible spline + for bp in self.barr_param_names: + bp_p = bp+'+' # meson + bp_m = bp+'-' # antimeson + assert bp_p in self.spline_tables_dict.keys(), ( + "Gradient parameter '%s' missing from table" % bp_p + ) + assert bp_m in self.spline_tables_dict.keys(), ( + "Gradient parameter '%s' missing from table" % bp_m + ) + + + # Loop over containers + for container in self.data: + + # Grab containers here once to save time + # TODO make spline generation script store splines directly in + # terms of energy, not ln(energy) + true_log_energy = np.log(container["true_energy"]) + true_abs_coszen = np.abs(container["true_coszen"]) + gradients = container["gradients"] + nubar = container["nubar"] + + # + # Flux gradients + # + + # Evaluate splines to get the flux graidents w.r.t the Barr parameter values + # Need to correctly map nu/nubar and flavor to the output arrays + + # Loop over parameters + for ( + gradient_param_name, + gradient_param_idx, + ) in self.gradient_param_indices.items(): + + # nue(bar) + self._eval_spline( + true_log_energy=true_log_energy, + true_abs_coszen=true_abs_coszen, + spline=self.spline_tables_dict[gradient_param_name][ + "dnue" if nubar > 0 else "dnuebar" + ], + out=gradients[:, 0, gradient_param_idx], + ) + + # numu(bar) + self._eval_spline( + true_log_energy=true_log_energy, + true_abs_coszen=true_abs_coszen, + spline=self.spline_tables_dict[gradient_param_name][ + "dnumu" if nubar > 0 else "dnumubar" + ], + out=gradients[:, 1, gradient_param_idx], + ) + + # nutau(bar) + # TODO include nutau flux in splines + # SDB - there is no nutau flux in splines + ## gradients[:, 2, gradient_param_idx].fill(0.0) + + # Tell the smart arrays we've changed the flux gradient values on the host + container.mark_changed("gradients") + + # don't forget to un-link everything again + self.data.unlink_containers()
+ + + def _eval_spline(self, true_log_energy, true_abs_coszen, spline, out): + """ + Evaluate the spline for the full arrays of [ ln(energy), abs(coszen) ] values + """ + + # Evalate the spine + result = spline(true_abs_coszen, true_log_energy, grid=False) + + # Copy to output array + # TODO Can I directly write to the original array, will be faster + np.copyto(src=result, dst=out) + +
+[docs] + def antipion_production(self, barr_var, pion_ratio): + """ + Combine pi+ param and pi+/pi- ratio to get pi- param + """ + return ((1 + barr_var) / (1 + pion_ratio)) - 1
+ + +
+[docs] + @profile + def compute_function(self): + + self.data.representation = self.calc_mode + + if self.data.is_map: + # speed up calculation by adding links + # as nominal flux doesn't depend on the (outgoing) flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', + 'nutaubar_cc', 'nuebar_nc', + 'numubar_nc', 'nutaubar_nc']) + + # + # Get params + # + + # Spectral index (and required energy pivot) + delta_index = self.params.delta_index.value.m_as("dimensionless") + energy_pivot = self.params.energy_pivot.value.m_as("GeV") + + # Grab the pion ratio + pion_ratio = self.params.pion_ratio.value.m_as("dimensionless") + + # Map the user parameters into the Barr +/- params + # pi- production rates is restricted by the pi-ratio, just as in arXiv:0611266 + # TODO might want dedicated priors for pi- params (but without corresponding free params) + gradient_params_mapping = collections.OrderedDict() + gradient_params_mapping["af+"] = self.params.barr_af_Pi.value.m_as("dimensionless") + gradient_params_mapping["g+"] = self.params.barr_g_Pi.value.m_as("dimensionless") + gradient_params_mapping["h+"] = self.params.barr_h_Pi.value.m_as("dimensionless") + gradient_params_mapping["i+"] = self.params.barr_i_Pi.value.m_as("dimensionless") + for k in list(gradient_params_mapping.keys()): + gradient_params_mapping[k.replace("+", "-")] = self.antipion_production( + gradient_params_mapping[k], pion_ratio + ) + + # kaons + # as the kaon ratio is unknown, K- production is not restricted + gradient_params_mapping["w+"] = self.params.barr_w_K.value.m_as("dimensionless") + gradient_params_mapping["w-"] = self.params.barr_w_antiK.value.m_as("dimensionless") + gradient_params_mapping["x+"] = self.params.barr_x_K.value.m_as("dimensionless") + gradient_params_mapping["x-"] = self.params.barr_x_antiK.value.m_as("dimensionless") + gradient_params_mapping["y+"] = self.params.barr_y_K.value.m_as("dimensionless") + gradient_params_mapping["y-"] = self.params.barr_y_antiK.value.m_as("dimensionless") + gradient_params_mapping["z+"] = self.params.barr_z_K.value.m_as("dimensionless") + gradient_params_mapping["z-"] = self.params.barr_z_antiK.value.m_as("dimensionless") + + # Populate array Barr param array + for ( + gradient_param_name, + gradient_param_idx, + ) in self.gradient_param_indices.items(): + self.gradient_params[gradient_param_idx] = gradient_params_mapping[ + gradient_param_name + ] + + # + # Loop over containers + # + + for container in self.data: + + # + # Apply the systematics to the flux + # + + nubar = container["nubar"] + if nubar > 0: flux_key = "nu_flux_nominal" + elif nubar < 0: flux_key = "nubar_flux_nominal" + + apply_sys_loop( + container["true_energy"], + container["true_coszen"], + FTYPE(delta_index), + FTYPE(energy_pivot), + container[flux_key], + container["gradients"], + self.gradient_params, + out=container["nu_flux"], + ) + container.mark_changed("nu_flux") + + # Check for negative results from spline + # TODO - add more spline error/misusage handling + # e.g. if events have energy outside spline range throw ERROR + negative_mask = container["nu_flux"] < 0 + if np.any(negative_mask): + container["nu_flux"][negative_mask] = 0.0 + + container.mark_changed("nu_flux") + + # don't forget to un-link everything again + self.data.unlink_containers()
+
+ + +
+[docs] +@njit +def spectral_index_scale(true_energy, energy_pivot, delta_index): + """ + Calculate spectral index scale. + Adjusts the weights for events in an energy dependent way according to a + shift in spectral index, applied about a user-defined energy pivot. + """ + return np.power((true_energy / energy_pivot), delta_index)
+ + +
+[docs] +@njit(parallel=True if TARGET == "parallel" else False) +def apply_sys_loop( + true_energy, + true_coszen, + delta_index, + energy_pivot, + nu_flux_nominal, + gradients, + gradient_params, + out, +): + """ + Calculation: + 1) Start from nominal flux + 2) Apply spectral index shift + 3) Add contributions from MCEq-computed gradients + + Array dimensions : + true_energy : [A] + true_coszen : [A] + nubar : scalar integer + delta_index : scalar float + energy_pivot : scalar float + nu_flux_nominal : [A,B] + gradients : [A,B,C] + gradient_params : [C] + out : [A,B] (sys flux) + where: + A = num events + B = num flavors in flux (=3, e.g. e, mu, tau) + C = num gradients + Not that first dimension (of length A) is vectorized out + """ + + n_evts, n_flavs = nu_flux_nominal.shape + + for event in prange(n_evts): + spec_scale = spectral_index_scale(true_energy[event], energy_pivot, delta_index) + for flav in range(n_flavs): + out[event, flav] = nu_flux_nominal[event, flav] * spec_scale + for i in range(len(gradient_params)): + out[event, flav] += gradients[event, flav, i] * gradient_params[i]
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/likelihood/generalized_llh_params.html b/_modules/pisa/stages/likelihood/generalized_llh_params.html new file mode 100644 index 000000000..9fbc20014 --- /dev/null +++ b/_modules/pisa/stages/likelihood/generalized_llh_params.html @@ -0,0 +1,356 @@ + + + + + + pisa.stages.likelihood.generalized_llh_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.likelihood.generalized_llh_params

+'''
+Pisa stage that pre-computes some quantities
+needed for the generalized likelihood, and applies
+small adjustments to the weight distributions in cases
+where the number of mc event per bin is low.
+
+The code does the following, in order:
+
+- Calculate the number of MC events per bin once,
+  at the setup time
+
+- Calculate, at setup time, a mean adjustment, based
+  on the average number of MC events per bin. If the
+  latter is less than one, adjustment is applied, else
+  that quantity is equal to zero
+
+- Populate ANY empty mc bin with a pseudo-weight with a
+  value equal to the maximal weight value of a given 
+  dataset. This correspond to the empty bin strategy #2 
+  described in (1902.08831). Note that empty bin strategy #1
+  can still be applied later on, if one provides the bin
+  indices where no datasets have any MC events. This step 
+  runs in the apply function because the value of the pseudo
+  weight will change during minimization.
+
+
+- Once this is done, computes the alpha and beta
+  parameters that are fed into the likelihood
+
+The stage appends / modifies the following:
+
+        weights: changes the individual weight distribution
+                           based on the empty bin filling outcome
+
+        llh_alphas: Map (alpha parameters of the generalized likelihood)
+
+        llh_betas: Map (beta parameters of the generalized likelihood)
+
+        n_mc_events: Map (number of MC events in each bin
+
+        new_sum: Map (Sum of the weights in each bin (ie MC expectation),
+                         corrected for the empty bin filling and the mean 
+                         adjustment
+'''
+from __future__ import absolute_import, print_function, division
+
+__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)"
+
+import numpy as np
+import copy
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+
+
+# uncomment this to debug stuff
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils.log import set_verbosity, Levels
+#set_verbosity(Levels.DEBUG)
+
+PSEUDO_WEIGHT = 0.001
+
+
+
+[docs] +class generalized_llh_params(Stage): + """ + Pisa stage that applies mean adjustment and + empty bin filling. Also computes alphas and betas + that are needed by the generalized poisson likelihood + + """ + + # this is the constructor with default arguments + def __init__(self, + **std_kwargs, + ): + + # init base class + super(generalized_llh_params, self).__init__(expected_params=(), + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + """ + Declare empty containers, determine the number + of MC events in each bin of each dataset and + compute mean adjustment + """ + + N_bins = self.apply_mode.tot_num_bins + + self.data.representation = self.apply_mode + + for container in self.data: + + # + # Generate a new container called bin_indices + # + container['llh_alphas'] = np.empty((container.size), dtype=FTYPE) + container['llh_betas'] = np.empty((container.size), dtype=FTYPE) + container['n_mc_events'] = np.empty((container.size), dtype=FTYPE) + container['old_sum'] = np.empty((container.size), dtype=FTYPE) + + # + # Step 1: assert the number of MC events in each bin, + # for each container + self.data.representation = 'events' + nevents_sim = np.zeros(N_bins) + + for index in range(N_bins): + index_mask = container['bin_{}_mask'.format(index)] + if 'kfold_mask' in container: + index_mask*=container['kfold_mask'] + # Number of MC events in each bin + nevents_sim[index] = np.sum(index_mask) + + self.data.representation = self.apply_mode + np.copyto(src=nevents_sim, + dst=container["n_mc_events"]) + container.mark_changed('n_mc_events') + + # + # Step 2: Calculate the mean adjustment for each container + # + mean_number_of_mc_events = np.mean(nevents_sim) + if mean_number_of_mc_events < 1.0: + mean_adjustment = -(1.0-mean_number_of_mc_events) + 1.e-3 + else: + mean_adjustment = 0.0 + container.set_aux_data(key='mean_adjustment', data=mean_adjustment) + + + # + # Add hypersurface containers if they don't exist + # (to avoid errors in get_outputs, if we want ) + # these to be returned when you call get_output + # + if 'hs_scales' not in container.keys(): + container['hs_scales'] = np.empty((container.size), dtype=FTYPE) + container['errors'] = np.empty((container.size), dtype=FTYPE)
+ + + +
+[docs] + def apply_function(self): + ''' + Computes the main inputs to the generalized likelihood + function on every iteration of the minimizer + + ''' + N_bins = self.apply_mode.tot_num_bins + + # + # Step 4: Apply the empty bin strategy and mean adjustment + # Compute the alphas and betas that go into the + # poisson-gamma mixture of the llh + # + for container in self.data: + + self.data.representation = 'events' + + # + # Step 3: Find the maximum weight accross all events + # of each MC set. The value of that weight defines + # the value of the pseudo-weight that will be included + # in empty bins + + # for this part we are in events mode + # Find the minimum weight of an entire MC set + pseudo_weight = 0.001 + container.set_aux_data(key='pseudo_weight', data=pseudo_weight) + + old_weight_sum = np.zeros(N_bins) + new_weight_sum = np.zeros(N_bins) + alphas_vector = np.zeros(N_bins) + betas_vector = np.zeros(N_bins) + + # + # Load the pseudo_weight and mean displacement values + # + mean_adjustment = container.scalar_data['mean_adjustment'] + pseudo_weight = container.scalar_data['pseudo_weight'] + + for index in range(N_bins): + + index_mask = container['bin_{}_mask'.format(index)] + if 'kfold_mask' in container: + index_mask*=container['kfold_mask'] + current_weights = container['weights'][index_mask] + + old_weight_sum[index] += np.sum(current_weights) + + assert np.all(current_weights>=0),'SOME WEIGHTS BELOW ZERO' + n_weights = current_weights.shape[0] + + # If no weights and other datasets have some, include a pseudo weight + # Bins with no mc event in all set will be ignore in the likelihood later + # + # make the whole bin treatment here + if n_weights <= 0: + current_weights = np.array([pseudo_weight]) + n_weights = 1 + + # write the new weight distribution down + new_weight_sum[index] += np.sum(current_weights) + + # Mean of the current weight distribution + mean_w = np.mean(current_weights) + + # variance of the current weight + var_of_weights = ((current_weights-mean_w)**2).sum()/(float(n_weights)) + + # Variance of the poisson-gamma distributed variable + var_z = (var_of_weights + mean_w**2) + + if var_z < 0: + logging.warn('warning: var_z is less than zero') + logging.warn(container.name, var_z) + raise Exception + + # if the weights presents have a mean of zero, + # default to alphas values of PSEUDO_WEIGHT and + # of beta = 1.0, which mimicks a narrow PDF + # close to 0.0 + beta = np.divide(mean_w, var_z, out=np.ones(1), where=var_z!=0) + trad_alpha = np.divide(mean_w**2, var_z, out=np.ones(1)*PSEUDO_WEIGHT, where=var_z!=0) + alpha = (n_weights + mean_adjustment)*trad_alpha + + alphas_vector[index] = alpha + betas_vector[index] = beta + + # Calculate alphas and betas + self.data.representation = self.apply_mode + np.copyto(src=alphas_vector, dst=container['llh_alphas']) + np.copyto(src=betas_vector, dst=container['llh_betas']) + np.copyto(src=new_weight_sum, dst=container['weights']) + np.copyto(src=old_weight_sum, dst=container['old_sum']) + container.mark_changed('llh_alphas') + container.mark_changed('llh_betas') + container.mark_changed('old_sum') + container.mark_changed('weights')
+
+ + + + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/decay_params.html b/_modules/pisa/stages/osc/decay_params.html new file mode 100644 index 000000000..56ebb9665 --- /dev/null +++ b/_modules/pisa/stages/osc/decay_params.html @@ -0,0 +1,178 @@ + + + + + + pisa.stages.osc.decay_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.decay_params

+# author: Anil Kumar (anil.kumar@desy.de)
+# date:   2023
+
+"""
+DecayParams: Characterize neutrino decay parameters 
+           (alpha3)
+"""
+
+from __future__ import division
+
+import numpy as np
+
+from pisa import FTYPE, CTYPE
+
+__all__ = ['DecayParams']
+
+
+[docs] +class DecayParams(object): + """ + Holds neutrino decay parameters, i.e., alpha + + Parameters + ---------- + decay_alpha3: float + expected to be given in [eV^2] + + + Attributes + ---------- + decay_alpha3 : float + Cf. parameters + decay_matrix : 3d complex array + + """ + def __init__(self): + + self._decay_alpha3 = 0. + self._decay_matrix = np.zeros((3, 3), dtype=CTYPE) + + # --- theta12 --- + @property + def decay_alpha3(self): + """alpha3""" + return self._decay_alpha3 + + @decay_alpha3.setter + def decay_alpha3(self, value): + self._decay_alpha3 = value + + @property + def decay_matrix(self): + """Neutrino decay matrix""" + decay_mat = np.zeros((3, 3), dtype=CTYPE) + + decay_mat[2, 2] = 0 -self.decay_alpha3*1j + + return decay_mat
+ + +def test_decay_params(): + """ + # TODO: implement me! + """ + pass + + +if __name__=='__main__': + from pisa import TARGET + from pisa.utils.log import set_verbosity, logging + assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" + set_verbosity(1) + test_decay_params() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/decoherence.html b/_modules/pisa/stages/osc/decoherence.html new file mode 100644 index 000000000..005ab213e --- /dev/null +++ b/_modules/pisa/stages/osc/decoherence.html @@ -0,0 +1,597 @@ + + + + + + pisa.stages.osc.decoherence — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.decoherence

+'''
+Implementing an environmentally-induced decoherence model for neutrino oscillations
+Based on reference [1], which uses an energy-indepedence deocherence matrix in vacuum
+
+References:
+  [1] arxiv:1702.04738
+'''
+
+
+
+from __future__ import absolute_import, print_function, division
+
+import math
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.stages.osc.osc_params import OscParams
+from pisa.stages.osc.layers import Layers
+from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import fill_probs
+from pisa.utils.numba_tools import WHERE
+from pisa.utils.resources import find_resource
+from pisa import ureg
+
+
+__all__ = ['DecoherenceParams', 'calc_decoherence_probs', "decoherence"]
+
+__author__ = 'T. Stuttard, M. Jensen'
+
+
+
+[docs] +class DecoherenceParams(OscParams): #TODO Start using osc_params instead... + ''' + Container for decoherence oscillation params + This includes standard oscillation params plus additional 'Gamma' terms parameterising decoherence + gamma21,31,32 params have units of energy + ''' + + def __init__(self, deltam21, deltam31, theta12, theta13, theta23, deltacp, gamma21, gamma31, gamma32): + + # Call base class constructor + super().__init__() + + # Store args + # Note that keeping them as quantities here + self.dm21 = deltam21 + self.dm31 = deltam31 + self.theta12 = theta12 + self.theta13 = theta13 + self.theta23 = theta23 + self.deltacp = deltacp + self.gamma21 = gamma21 + self.gamma31 = gamma31 + self.gamma32 = gamma32 + + # Get deltam32 (this is what is used in [1]) + self.dm32 = self.dm31 - self.dm21
+ + + +
+[docs] +def calc_decoherence_probs(decoh_params, flav, energy, baseline, prob_e, prob_mu, prob_tau, two_flavor=False): + ''' + Oscillation probability calculator function, with decoherence included + + Parameters + ---------- + decoh_params : + DecoherenceParams instance + + flav : + str : Neutrino flavor + + energy : + Neutrino true energy values as float(s), either a single value or an array + If no units attached, must be [GeV] + + baseline : + Neutrino true propagation distance values as float(s), either a single value or an array + If no units attached, must be [km] + + prob_e : + Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a nue + + prob_mu : + Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a numu + + prob_tau : + Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a nutau + + two_flavor : + bool : Flag indicating whether a two- or 3-flavor model should be used + ''' + + # Electron neutrino case + # For nu_e case, in this approiximation we are essential neglecting nu_e oscillations + # If a particle starts as a nu_e, it stays as a nu_e + if flav.startswith("nue"): + prob_e.fill(1.) + prob_mu.fill(0.) + + # Muon neutrino case + # For nu_mu case, in this approximation there is 0. probability of becoming a nu_e + # Use numu disappearance calculation to get numu/tau probs + elif flav.startswith("numu"): + prob_e.fill(0.) + numu_disappearance_func = _calc_numu_disappearance_prob_2flav if two_flavor else _calc_numu_disappearance_prob_3flav + numu_survival_prob = 1. - numu_disappearance_func( decoh_params=decoh_params, E=energy, L=baseline ) + np.copyto(src=numu_survival_prob,dst=prob_mu) #TODO avoid this wasted data copy + + else: + raise ValueError( "Input flavor '%s' not supported" % flav) + + # Assume unitarity + np.copyto(src=1.-prob_e-prob_mu,dst=prob_tau)
+ + + +def _calc_numu_disappearance_prob_2flav(decoh_params,E,L): + """ + Calculate numu disppearance in 2-flavor model + User should no call this directly, instead use `calc_decoherence_probs` + Define two-flavor decoherence approximation according to Eqn 2 from [1] + + Parameters + ---------- + decoh_params : + DecoherenceParams instance + + E : + Neutrino true energy values as float(s), either a single value or an array + If no units attached, must be [GeV] + + L : + Neutrino true propagation distance values as float(s), either a single value or an array + If no units attached, must be [km] + """ + + # This line is a standard oscillations (no decoherence) 2 flavour approximation, can use for debugging + #return np.sin(2.*decoh_params.theta23.m_as("rad"))**2 * np.square(np.sin(1.27*decoh_params.dm32.m_as("eV**2")*L/E)) + + # Assume units if none provided for main input arrays + # Would prefer to get units but is not always the case + E = E if isinstance(E,ureg.Quantity) else E * ureg["GeV"] + L = L if isinstance(L,ureg.Quantity) else L * ureg["km"] + + # Calculate normalisation term + norm_term = 0.5 * ( np.sin( 2. * decoh_params.theta23.m_as("rad") )**2 ) + + # Calculate decoherence term + decoh_term = np.exp( -decoh_params.gamma32.m_as("eV") * ( L.m_as("m")/1.97e-7 ) ) #Convert L from [m] to natural units + + # Calculate oscillation term + osc_term = np.cos( ( 2. * 1.27 * decoh_params.dm32.m_as("eV**2") * L.m_as("km") ) / ( E.m_as("GeV") ) ) + + return norm_term * ( 1. - (decoh_term*osc_term) ) + + +def _update_pmns_matrix(theta12, theta13, theta23): + """ + Helper function used by _calc_numu_disappearance_prob_3flav + Updates the PMNS matrix and its complex conjugate. + Must be called by the class each time one of the PMNS matrix parameters are changed. + """ + + # TODO Mikkel needs to reference code he used as inspiration here + + c12 = math.cos( theta12.m_as("rad") ) + c13 = math.cos( theta13.m_as("rad") ) + c23 = math.cos( theta23.m_as("rad") ) + s12 = math.sin( theta12.m_as("rad") ) + s13 = math.sin( theta13.m_as("rad") ) + s23 = math.sin( theta23.m_as("rad") ) + eid = 0.0 # e^( i * delta_cp) + emid = 0.0 # e^(-i * delta_cp) + + matrix = np.zeros((3,3)) + anti_matrix = np.zeros((3,3)) + + matrix[0,0] = c12 * c13 + matrix[0,1] = s12 * c13 + matrix[0,2] = s13 * emid + + matrix[1,0] = (0. - s12*c23 ) - ( c12*s23*s13*eid ) + matrix[1,1] = ( c12*c23 ) - ( s12*s23*s13*eid ) + matrix[1,2] = s23*c13 + + matrix[2,0] = ( s12*s23 ) - ( c12*c23*s13*eid) + matrix[2,1] = ( 0. - c12*s23 ) - ( s12*c23*s13*eid ) + matrix[2,2] = c23*c13 + + anti_matrix = matrix.conjugate() + + return matrix, anti_matrix + + +def _calc_numu_disappearance_prob_3flav(decoh_params, E, L): + """ + Calculate numu disppearance in 3-flavor model + + User should no call this directly, instead use `calc_decoherence_probs` + + Define three-flavor decoherence approximation according to the equation that is not numbered but can be + found between equations 2 and 3 in [1],with the notable difference that we are using the vacuum case + (e.g. not substituting in the effeective matter values for parameters) + + Parameters + ---------- + decoh_params : + DecoherenceParams instance + + E : + Neutrino true energy values as float(s), either a single value or an array + If no units attached, must be [GeV] + + L : + Neutrino true propagation distance values as float(s), either a single value or an array + If no units attached, must be [km] + """ + E = E if isinstance(E,ureg.Quantity) else E * ureg["GeV"] + L = L if isinstance(L,ureg.Quantity) else L * ureg["km"] + + # Get PMNS matrix + U,_ = _update_pmns_matrix(decoh_params.theta12, decoh_params.theta13, decoh_params.theta23) + + # Decoherence matrix + Gamma = np.zeros([3,3]) + Gamma[1][0] = decoh_params.gamma21.m_as("GeV") + Gamma[2][0] = decoh_params.gamma31.m_as("GeV") + Gamma[2][1] = decoh_params.gamma32.m_as("GeV") + + # Mass splitting matrix + delta_jk = np.zeros([3,3]) + delta_jk[1][0] = decoh_params.dm21.m_as("eV**2") + delta_jk[2][0] = decoh_params.dm31.m_as("eV**2") + delta_jk[2][1] = decoh_params.dm32.m_as("eV**2") + + prob_dec = np.zeros(np.shape(E)) + + for i_j in range(3): + for i_k in range(3): + if i_j > i_k: + prob_dec += abs(U[2][i_j])**2 * abs(U[2][i_k])**2 * (1.0 - np.exp( - Gamma[i_j][i_k] * L.m_as("km") * 5.07e+18) * np.cos(delta_jk[i_j][i_k] * 1.0e-18 / (2.0 * E.m_as("GeV")) * L.m_as("km") * 5.07e+18)) + prob_array = 2.0 * prob_dec.real + + return prob_array + + + + +
+[docs] +class decoherence(Stage): + """ + PISA Pi stage representing oscillations in the presence of decoherence + + Parameters + ---------- + params + Expected contents of `params` ParamSet: .. :: + + detector_depth : float + earth_model : PREM file path + prop_height : quantity (dimensionless) + YeI : quantity (dimensionless) + YeO : quantity (dimensionless) + YeM : quantity (dimensionless) + theta12 : quantity (angle) + theta13 : quantity (angle) + theta23 : quantity (angle) + deltam21 : quantity (mass^2) + deltam31 : quantity (mass^2) + deltacp : quantity (angle) + gamma12 : quantity (energy) + gamma13 : quantity (energy) + gamma23 : quantity (energy) + + """ + def __init__(self, + **std_kwargs, + ): + + expected_params = ('detector_depth', + 'earth_model', + 'prop_height', + 'YeI', + 'YeO', + 'YeM', + 'theta12', + 'theta13', + 'theta23', + 'deltam21', + 'deltam31', + 'deltacp', + 'gamma21', + 'gamma31', + 'gamma32', + ) + + # init base class + super(decoherence, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + #Have not yet implemented matter effects + if self.params.earth_model.value is not None: + raise ValueError("Matter effects not yet implemented for decoherence, must set 'earth_model' to None") + + + self.layers = None + + #Toggle between 2-flavor and 3-flavor models + self.two_flavor = False + + +
+[docs] + def setup_function(self): + + # setup Earth model + if self.params.earth_model.value is not None: + earth_model = find_resource(self.params.earth_model.value) + YeI = self.params.YeI.value.m_as('dimensionless') + YeO = self.params.YeO.value.m_as('dimensionless') + YeM = self.params.YeM.value.m_as('dimensionless') + else: + earth_model = None + + # setup the layers + prop_height = self.params.prop_height.value.m_as('km') + detector_depth = self.params.detector_depth.value.m_as('km') + self.layers = Layers(earth_model, detector_depth, prop_height) + if earth_model is not None: + self.layers.setElecFrac(YeI, YeO, YeM) + + # set the correct data mode + self.data.representation = self.calc_mode + + # --- calculate the layers --- + if self.data.is_map: + # speed up calculation by adding links + # as layers don't care about flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + for container in self.data: + if self.params.earth_model.value is not None: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) + else: + self.layers.calcPathLength(container['true_coszen']) + container['distances'] = self.layers.distance + + # don't forget to un-link everything again + self.data.unlink_containers() + + # --- setup empty arrays --- + if self.data.is_map: + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + for container in self.data: + container['probability'] = np.empty((container.size, 3, 3), dtype=FTYPE) + self.data.unlink_containers() + + # setup more empty arrays + for container in self.data: + container['prob_e'] = np.empty((container.size), dtype=FTYPE) + container['prob_mu'] = np.empty((container.size), dtype=FTYPE)
+ + + +
+[docs] + @profile + def compute_function(self): + + # set the correct data mode + self.data.representation = self.calc_mode + + if self.data.is_map: + # speed up calculation by adding links + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + # --- update params --- + self.decoh_params = DecoherenceParams(deltam21=self.params.deltam21.value, + deltam31=self.params.deltam31.value, + theta12=self.params.theta12.value, + theta13=self.params.theta13.value, + theta23=self.params.theta23.value, + deltacp=self.params.deltacp.value, + gamma21=self.params.gamma21.value, + gamma31=self.params.gamma31.value, + gamma32=self.params.gamma32.value) + + # Calculate oscillation probabilities + for container in self.data: + self.calc_probs(container['nubar'], + container['true_energy'], + #container['densities'], + container['distances'], + out=container['probability'], + ) + + # the following is flavour specific, hence unlink + self.data.unlink_containers() + + for container in self.data: + # initial electrons (0) + fill_probs(container['probability'], + 0, # electron + container['flav'], + out=container['prob_e'], + ) + # initial muons (1) + fill_probs(container['probability'], + 1, # muon + container['flav'], + out=container['prob_mu'], + ) + + container.mark_changed('prob_e') + container.mark_changed('prob_mu')
+ + + + +
+[docs] + @profile + def apply_function(self): + + # update the outputted weights + for container in self.data: + apply_probs(container['sys_flux'], + container['prob_e'], + container['prob_mu'], + out=container['weights']) + container.mark_changed('weights')
+ + + +
+[docs] + def calc_probs(self, nubar, e_array, len_array, out): + + #Get the probability values output array + prob_array = out + + #Attach units + L = len_array * ureg["km"] + E = e_array * ureg["GeV"] + + #nue + calc_decoherence_probs( decoh_params=self.decoh_params, flav="nue", energy=E, baseline=L, prob_e=prob_array[:,0,0], prob_mu=prob_array[:,0,1], prob_tau=prob_array[:,0,2], two_flavor=self.two_flavor ) + + #numu + calc_decoherence_probs( decoh_params=self.decoh_params, flav="numu", energy=E, baseline=L, prob_e=prob_array[:,1,0], prob_mu=prob_array[:,1,1], prob_tau=prob_array[:,1,2], two_flavor=self.two_flavor ) + + #nutau (basically just the inverse of the numu case) + np.copyto(dst=prob_array[:,2,0], src=prob_array[:,1,0]) + np.copyto(dst=prob_array[:,2,1], src=prob_array[:,1,2]) + np.copyto(dst=prob_array[:,2,2], src=prob_array[:,1,1]) + + #Register that arrays have changed + out
+
+ + + + +# vectorized function to apply (flux * prob) +# must be outside class +if FTYPE == np.float64: + signature = '(f8[:], f8, f8, f8[:])' +else: + signature = '(f4[:], f4, f4, f4[:])' +@guvectorize([signature], '(d),(),()->()', target=TARGET) +def apply_probs(flux, prob_e, prob_mu, out): + out[0] *= (flux[0] * prob_e) + (flux[1] * prob_mu) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/globes.html b/_modules/pisa/stages/osc/globes.html new file mode 100644 index 000000000..9890fa843 --- /dev/null +++ b/_modules/pisa/stages/osc/globes.html @@ -0,0 +1,397 @@ + + + + + + pisa.stages.osc.globes — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.globes

+"""
+PISA pi stage wrapping GLoBES for the calculation of neutrino oscillation probabilities.
+
+Allows for the calculation of sterile neutrino oscillation probabilities.
+This needs Andrii's GLoBES wrapper, which has been forked to be
+made compatible with Python3:
+
+https://github.com/atrettin/GLoBES_wrapper
+
+To import, this stage takes as input the path to the GLoBES wrapper. This is necessary
+because GLoBES has to be imported while in the wrapper directory.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import os
+import sys
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET, ureg
+from pisa.core.stage import Stage
+from pisa.stages.osc.layers import Layers
+from pisa.stages.osc.osc_params import OscParams
+from pisa.utils.numba_tools import WHERE
+from pisa.utils.profiler import profile
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class globes(Stage): + """ + GLoBES PISA Pi class + + Parameters + ---------- + earth_model : PREM file path + globes_wrapper : path to globes wrapper + detector_depth : float + prop_height : quantity (dimensionless) + params : ParamSet or sequence with which to instantiate a ParamSet. + Expected params .. :: + + theta12 : quantity (angle) + theta13 : quantity (angle) + theta23 : quantity (angle) + deltam21 : quantity (mass^2) + deltam31 : quantity (mass^2) + deltam41 : quantity (mass^2) + theta24 : quantity (angle) + theta34 : quantity (angle) + deltacp : quantity (angle) + + """ + def __init__( + self, + earth_model, + globes_wrapper, + detector_depth=2.*ureg.km, + prop_height=20.*ureg.km, + **std_kwargs, + ): + + expected_params = ( + 'theta12', + 'theta13', + 'theta23', + 'deltam21', + 'deltam31', + 'deltam41', + 'theta24', + 'theta34', + 'deltacp', + ) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + self.layers = None + self.osc_params = None + self.earth_model = earth_model + self.globes_wrapper = globes_wrapper + self.detector_depth = detector_depth + self.prop_height = prop_height + + self.globes_calc = None + +
+[docs] + @profile + def setup_function(self): + sys.path.append(self.globes_wrapper) + import GLoBES + ### you need to start GLoBES from the folder containing a dummy experiment + # therefore we go to the folder, load GLoBES and then go back + curdir = os.getcwd() + os.chdir(self.globes_wrapper) + self.globes_calc = GLoBES.GLoBESCalculator("calc") + os.chdir(curdir) + self.globes_calc.InitSteriles(2) + # object for oscillation parameters + self.osc_params = OscParams() + earth_model = find_resource(self.earth_model) + prop_height = self.prop_height.m_as('km') + detector_depth = self.detector_depth.m_as('km') + self.layers = Layers(earth_model, detector_depth, prop_height) + # The electron fractions are taken into account internally by GLoBES/SNU. + # See the SNU patch for details. It uses the density to decide + # whether it is in the core or in the mantle. Therefore, we just multiply by + # one to give GLoBES the raw densities. + self.layers.setElecFrac(1., 1., 1.) + + # set the correct data mode + self.data.representation = self.calc_mode + + # --- calculate the layers --- + if self.data.is_map: + # speed up calculation by adding links + # as layers don't care about flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + for container in self.data: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) + + # don't forget to un-link everything again + self.data.unlink_containers() + + # setup probability containers + for container in self.data: + container['prob_e'] = np.empty((container.size), dtype=FTYPE) + container['prob_mu'] = np.empty((container.size), dtype=FTYPE) + container['prob_nonsterile'] = np.empty((container.size), dtype=FTYPE) + if '_cc' in container.name: + container['prob_nonsterile'] = np.ones(container.size) + elif '_nc' in container.name: + if 'nue' in container.name: + container['prob_e'] = np.ones(container.size) + container['prob_mu'] = np.zeros(container.size) + elif 'numu' in container.name: + container['prob_e'] = np.zeros(container.size) + container['prob_mu'] = np.ones(container.size) + elif 'nutau' in container.name: + container['prob_e'] = np.zeros(container.size) + container['prob_mu'] = np.zeros(container.size) + else: + raise Exception('unknown container name: %s' % container.name)
+ + +
+[docs] + def calc_prob_e_mu(self, flav, nubar, energy, rho_array, len_array): + '''Calculates probability for an electron/muon neutrino to oscillate into + the flavour of a given event, including effects from sterile neutrinos. + ''' + # We use the layers module to calculate lengths and densities. + # The output must be converted into a regular python list. + self.globes_calc.SetManualDensities(list(len_array), list(rho_array)) + # this calls the calculator without the calculation of layers + # The flavour convention in GLoBES is that + # e = 1, mu = 2, tau = 3 + # while in PISA it's + # e = 0, mu = 1, tau = 2 + # which is why we add +1 to the flavour. + # Nubar follows the same convention in PISA and GLoBES: + # +1 = particle, -1 = antiparticle + nue_to_nux = self.globes_calc.MatterProbabilityPrevBaseline(1, flav+1, nubar, energy) + numu_to_nux = self.globes_calc.MatterProbabilityPrevBaseline(2, flav+1, nubar, energy) + return (nue_to_nux, numu_to_nux)
+ + +
+[docs] + def calc_prob_nonsterile(self, flav, nubar, energy, rho_array, len_array): + '''Calculates the probability of a given neutrino to oscillate into + another non-sterile flavour. + ''' + # We use the layers module to calculate lengths and densities. + # The output must be converted into a regular python list. + self.globes_calc.SetManualDensities(list(len_array), list(rho_array)) + # this calls the calculator without the calculation of layers + # The flavour convention in GLoBES is that + # e = 1, mu = 2, tau = 3 + # while in PISA it's + # e = 0, mu = 1, tau = 2 + # which is why we add +1 to the flavour. + # Nubar follows the same convention in PISA and GLoBES: + # +1 = particle, -1 = antiparticle + nux_to_nue = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 1, nubar, energy) + nux_to_numu = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 2, nubar, energy) + nux_to_nutau = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 3, nubar, energy) + nux_to_nonsterile = nux_to_nue + nux_to_numu + nux_to_nutau + return nux_to_nonsterile
+ + +
+[docs] + @profile + def compute_function(self): + # --- update mixing params --- + params = [self.params.theta12.value.m_as('rad'), + self.params.theta13.value.m_as('rad'), + self.params.theta23.value.m_as('rad'), + self.params.deltacp.value.m_as('rad'), + self.params.deltam21.value.m_as('eV**2'), + self.params.deltam31.value.m_as('eV**2'), + self.params.deltam41.value.m_as('eV**2'), + 0.0, + self.params.theta24.value.m_as('rad'), + self.params.theta34.value.m_as('rad'), + 0.0, + 0.0 + ] + self.globes_calc.SetParametersArr(params) + # set the correct data mode + self.data.representation = self.calc_mode + + for container in self.data: + # standard oscillations are only applied to charged current events, + # while the loss due to oscillation into sterile neutrinos is only + # applied to neutral current events. + # Accessing single entries from containers is very slow. + # For this reason, we make a copy of the content we need that is + # a simple numpy array. + flav = container['flav'] + nubar = container['nubar'] + energies = np.array(container['true_energy']) + densities = np.array(container['densities']) + distances = np.array(container['distances']) + prob_e = np.zeros(container.size) + prob_mu = np.zeros(container.size) + prob_nonsterile = np.zeros(container.size) + if '_cc' in container.name: + for i in range(container.size): + prob_e[i], prob_mu[i] = self.calc_prob_e_mu(flav, + nubar, + energies[i], + densities[i], + distances[i] + ) + container['prob_e'] = prob_e + container['prob_mu'] = prob_mu + elif '_nc' in container.name: + for i in range(container.size): + prob_nonsterile[i] = self.calc_prob_nonsterile(flav, + nubar, + energies[i], + densities[i], + distances[i] + ) + container['prob_nonsterile'] = prob_nonsterile + else: + raise Exception('unknown container name: %s' % container.name) + container.mark_changed('prob_e') + container.mark_changed('prob_mu') + container.mark_changed('prob_nonsterile')
+ + +
+[docs] + @profile + def apply_function(self): + # update the outputted weights + for container in self.data: + apply_probs(container['nu_flux'], + container['prob_e'], + container['prob_mu'], + container['prob_nonsterile'], + out=container['weights']) + container.mark_changed('weights')
+
+ + + +# vectorized function to apply (flux * prob) +# must be outside class +if FTYPE == np.float64: + signature = '(f8[:], f8, f8, f8, f8[:])' +else: + signature = '(f4[:], f4, f4, f4, f4[:])' +@guvectorize([signature], '(d),(),(),()->()', target=TARGET) +def apply_probs(flux, prob_e, prob_mu, prob_nonsterile, out): + out[0] *= ((flux[0] * prob_e) + (flux[1] * prob_mu))*prob_nonsterile +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/layers.html b/_modules/pisa/stages/osc/layers.html new file mode 100644 index 000000000..fe1b4cdb7 --- /dev/null +++ b/_modules/pisa/stages/osc/layers.html @@ -0,0 +1,740 @@ + + + + + + pisa.stages.osc.layers — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.layers

+"""
+Calculation of Earth layers and electron densities.
+"""
+
+
+from __future__ import division
+
+import numpy as np
+try:
+    import numba
+except ImportError:
+    numba = None
+
+from pisa import FTYPE
+from pisa.utils.fileio import from_file
+from pisa.utils.log import logging, set_verbosity
+
+__all__ = ['extCalcLayers', 'Layers']
+
+__author__ = 'P. Eller','E. Bourbeau'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+if numba is None:
+    class jit(object):
+        """Decorator class to mimic Numba's `jit` when Numba is missing"""
+        def __init__(self, *args, **kwargs):
+            pass
+        def __call__(self, *args):
+            return args[0]
+else:
+    jit = numba.jit
+    ftype = numba.typeof(FTYPE(1))
+
+
+
+
+[docs] +@jit(nopython=True, nogil=True, cache=True) +def extCalcLayers(cz, + r_detector, + prop_height, + detector_depth, + rhos, + coszen_limit, + radii, + max_layers): + """Layer density/distance calculator for each coszen specified. + + Accelerated with Numba if present. + + Parameters + ---------- + cz : coszen values (array of float) + r_detector : radial position of the detector (float) + prop_height : height at which neutrinos are assumed to be produced (float) + detector_depth : depth at which the detector is buried (float) + rhos : densities (already weighted by electron fractions) (ndarray) + radii : radii defining the Earth's layer (ndarray) + coszen : coszen values corresponding to the radii above (ndarray) + max_layers : maximum number of layers it is possible to cross (int) + + Returns + ------- + n_layers : int number of layers + density : array of densities, flattened from (cz, max_layers) + distance : array of distances per layer, flattened from (cz, max_layers) + + """ + + # The densities, distances and number of layers are appended to one long list + # which is later reshaped into containers of size (# of cz values, max_layers) + # in the pi_prob3 module + + densities = np.zeros((len(cz), max_layers), dtype=FTYPE) + distances = np.zeros((len(cz), max_layers), dtype=FTYPE) + number_of_layers = np.zeros(len(cz)) + + # Loop over all CZ values + for i, coszen in enumerate(cz): + + r_prop = r_detector+detector_depth+prop_height + # Compute the full path length + # path_len = -r_detector * coszen + np.sqrt(r_detector**2. * coszen**2 - (r_detector**2. - r_prop**2.)) + + # Determine if there will be a crossing of layer + # idx is the index of the first inner layer + idx = np.where(radii<r_detector)[0][0] + + # Deal with paths that do not have tangeants + if coszen >= coszen_limit[idx]: + cumulative_distances = -r_detector * coszen + np.sqrt(r_detector**2. * coszen**2. - r_detector**2. + radii[:idx]**2.) + # a bit of flippy business is done here to order terms + # such that numpy diff can work + segments_lengths = np.diff(np.concatenate((np.array([0.]), cumulative_distances[::-1]))) + segments_lengths = segments_lengths[::-1] + segments_lengths = np.concatenate((segments_lengths, np.zeros(radii.shape[0] - idx))) + + density = rhos*(segments_lengths > 0.) + + else: + # + # Figure out how many layers are crossed twice + # (meaning we calculate the negative and positive roots for these layers) + # + + calculate_small_root = (coszen < coszen_limit) * (coszen_limit <= coszen_limit[idx]) + calculate_large_root = (coszen_limit>coszen) + + small_roots = - r_detector * coszen * calculate_small_root - np.sqrt(r_detector**2 * coszen**2 - r_detector**2 + radii**2) #, where=calculate_small_root, out=np.zeros_like(radii)) + large_roots = - r_detector * coszen * calculate_large_root + np.sqrt(r_detector**2 * coszen**2 - r_detector**2 + radii**2) #, where=calculate_large_root, out=np.zeros_like(radii)) + + # Remove the negative root numbers, and the initial zeros distances + small_roots = small_roots[small_roots>0] + small_roots = np.concatenate((np.array([0.]), small_roots)) + + # Reverse the order of the large roots + # That should give the segment distances from the furthest layer to + # the middle layer + large_roots = large_roots[::-1] + + # concatenate large and small roots together + # this gives the cumulative distance from the detector outward + full_distances = np.concatenate((np.zeros(1),small_roots[small_roots>0], large_roots[large_roots>0])) + + # Diff the distances and reverse the order + # such that the path starts away from the detector + segments_lengths = np.diff(full_distances) + segments_lengths = segments_lengths[::-1] + + + # The last problem is to match back the densities + # to the proper array elements. + # Densities coming out of the earth core are inverted w.r.t the + # densities of the ones coming in, with the following exception: + # + # - the middle layer and the atmosphere must be counted only once + # + # - densities corresponding to layers that are not crossed must be removed + # + # NOTE: this assumes that the detector is not positioned in the atmosphere + # + # start by removing the layers not crossed from rhos + inner_layer_mask = coszen_limit>coszen + density = np.concatenate((rhos[inner_layer_mask],rhos[inner_layer_mask][1:-1][::-1])) + + # As an extra precaution, set all densities that are not crossed to zero + density*=(segments_lengths>0) + + number_of_layers[i] = np.sum(segments_lengths > 0.) + # append to the large list + for j in range(len(density)): + # index j may not run all the way to max_layers, unreached indices stay zero + densities[i, j] = density[j] + distances[i, j] = segments_lengths[j] + + return number_of_layers, densities, distances
+ + + +
+[docs] +class Layers(object): + """ + Calculate the path through earth for a given layer model with densities + (PREM [1]), the electron fractions (Ye) and an array of coszen values + + Parameters + ---------- + prem_file : str + path to PREM file containing layer radii and densities as white space + separated txt + + detector_depth : float + depth of detector underground in km + + prop_height : float + the production height of the neutrinos in the atmosphere in km (?) + + Attributes + ---------- + max_layers : int + maximum number of layers (this is important for the shape of the + output! if less than maximumm number of layers are crossed, it's + filled up with 0s + + n_layers : 1d int array of length len(cz) + number of layers crossed for every CZ value + + density : 1d float array of length (max_layers * len(cz)) + containing density values and filled up with 0s otherwise + + distance : 1d float array of length (max_layers * len(cz)) + containing distance values and filled up with 0s otherwise + + References + ---------- + [1] A.M. Dziewonski and D.L. Anderson (1981) "Preliminary reference + Earth model," Physics of the Earth and Planetary Interiors, 25(4), + pp. 297 – 356. + http://www.sciencedirect.com/science/article/pii/300031920181900467 + + """ + def __init__(self, prem_file, detector_depth=1., prop_height=2.): + # Load earth model + if prem_file is not None : + self.using_earth_model = True + self.prem = from_file(prem_file, as_array=True) + + # The following radii and densities are extracted in reverse order + # w.r.t the file. The first elements of the arrays below corresponds + # the Earth's surface, and the following numbers go deeper toward the + # planet's core + self.rhos = self.prem[..., 1][::-1].astype(FTYPE) + self.radii = self.prem[..., 0][::-1].astype(FTYPE) + r_earth = self.prem[-1][0] + self.default_elec_frac = 0.5 + + + + # Add an external layer corresponding to the atmosphere / production boundary + self.radii = np.concatenate((np.array([r_earth+prop_height]), self.radii)) + self.rhos = np.concatenate((np.ones(1, dtype=FTYPE), self.rhos)) + self.max_layers = 2 * (len(self.radii)) + + + else : + self.using_earth_model = False + r_earth = 6371.0 #If no Earth model provided, use a standard Earth radius value + + + # + # Make some checks about the input production height and detector depth + # + assert detector_depth > 0, 'ERROR: detector depth must be a positive value' + assert detector_depth <= r_earth, 'ERROR: detector depth is deeper than one Earth radius!' + assert prop_height >= 0, 'ERROR: neutrino production height must be positive' + + # Set some other + self.r_detector = r_earth - detector_depth + self.prop_height = prop_height + self.detector_depth = detector_depth + + if self.using_earth_model: + # Compute the coszen_limits + self.computeMinLengthToLayers() + + + +
+[docs] + def setElecFrac(self, YeI, YeO, YeM): + """Set electron fractions of inner core, outer core, and mantle. + Locations of boundaries between each layer come from PREM. + + Parameters + ---------- + YeI, YeO, YeM : scalars + Three electron fractions (Ye), where I=inner core, O=outer core, + and M=mantle + + """ + if not self.using_earth_model : + raise ValueError("Cannot set electron fraction when not using an Earth model") + + self.YeFrac = np.array([YeI, YeO, YeM], dtype=FTYPE) + + # re-weight the layer densities accordingly + self.weight_density_to_YeFrac()
+ + +
+[docs] + def scaling(self, scaling_array): + """ + Multplies scaling factor with densities from earth model + + Parameters + ---------- + scaling_array : numpy array containing scaling factors for different layers. + """ + + if self.using_earth_model and hasattr(self, 'prem'): + self.rhos = self.prem[..., 1][::-1].astype(FTYPE) + if scaling_array is not None: + self.rhos = self.rhos * scaling_array + self.rhos = np.concatenate((np.ones(1, dtype=FTYPE), self.rhos)) + else: + raise ValueError("Cannot scale densities when not using an Earth model")
+ + +
+[docs] + def computeMinLengthToLayers(self): + ''' + Deterine the coszen values for which a track will + be tangeant to a given layer. + + Given the detector radius and the layer radii: + + - A layer will be tangeant if radii<r_detector + + - Given r_detector and r_i, the limit angle + will be: + + sin(theta) = r_i / r_detector + + that angle can then be expressed back into a cosine using + trigonometric identities + + ''' + coszen_limit = [] + # First element of self.radii is largest radius! + for i, rad in enumerate(self.radii): + # Using a cosine threshold instead! + if rad >= self.r_detector: + x = 1. + else: + x = - np.sqrt(1 - (rad**2 / self.r_detector**2)) + coszen_limit.append(x) + self.coszen_limit = np.array(coszen_limit, dtype=FTYPE)
+ + + + +
+[docs] + def calcLayers(self, cz): + """ + + Parameters + ---------- + cz : 1d float array + Array of coszen values + + """ + + if not self.using_earth_model: + raise ValueError("Cannot calculate layers when not using an Earth model") + + # run external function + self._n_layers, self._density, self._distance = extCalcLayers( + cz=cz, + r_detector=self.r_detector, + prop_height=self.prop_height, + detector_depth=self.detector_depth, + rhos=self.rhos, + coszen_limit=self.coszen_limit, + radii=self.radii, + max_layers=self.max_layers, + )
+ + + @property + def n_layers(self): + if not self.using_earth_model: + raise ValueError("Cannot get layers when not using an Earth model") + return self._n_layers + + @property + def density(self): + if not self.using_earth_model: + raise ValueError("Cannot get density when not using an Earth model") + return self._density + + @property + def distance(self): + return self._distance + + +
+[docs] + def calcPathLength(self, cz) : + """ + + Calculate path length of the neutrino through an Earth-sized sphere, given the + production height, detector depth and zenith angle. + Useful if not considering matter effects. + + Parameters + ---------- + cz : cos(zenith angle), either single float value or an array of float values + + """ + r_prop = self.r_detector + self.detector_depth + self.prop_height + + if not hasattr(cz,"__len__"): + cz = np.array([cz]) + else: + cz = np.array(cz) + + pathlength = - self.r_detector * cz + np.sqrt(self.r_detector**2. * cz**2 - (self.r_detector**2. - r_prop**2.)) + + self._distance = pathlength
+ + +
+[docs] + def weight_density_to_YeFrac(self): + ''' + Adjust the densities of the provided earth model layers + for the different electron fractions in the inner core, + outer core and mantle. + ''' + + # TODO make this generic + R_INNER = 1221.5 + R_OUTER = 3480. + R_MANTLE= 6371. # the crust is assumed to have the same electron fraction as the mantle + + assert isinstance(self.YeFrac, np.ndarray) and self.YeFrac.shape[0] == 3, 'ERROR: YeFrac must be an array of size 3' + # + # TODO: insert extra radii is the electron density boundaries + # don't match the current layer boundaries + + # + # Weight the density properly + # + density_inner = self.rhos * self.YeFrac[0] * (self.radii <= R_INNER) + density_outer = self.rhos * self.YeFrac[1] * (self.radii <= R_OUTER) * (self.radii > R_INNER) + density_mantle = self.rhos * self.YeFrac[2] * (self.radii <= R_MANTLE) * (self.radii > R_OUTER) + + weighted_densities = density_inner + density_outer + density_mantle + + self.rhos = weighted_densities
+
+ + + + +def test_layers_1(): + + logging.info('Test layers calculation:') + layer = Layers('osc/PREM_4layer.dat') + layer.setElecFrac(0.4656, 0.4656, 0.4957) + cz = np.linspace(-1, 1, int(1e5), dtype=FTYPE) + layer.calcLayers(cz) + logging.info('n_layers = %s' %layer.n_layers) + logging.info('density = %s' %layer.density) + logging.info('distance = %s' %layer.distance) + + logging.info('Test path length calculation:') + layer = Layers(None) + cz = np.array([1.,0.,-1.]) + layer.calcPathLength(cz) + logging.info('coszen = %s' %cz) + logging.info('pathlengths = %s' %layer.distance) + + logging.info('<< PASS : test_Layers 1 >>') + +def test_layers_2(): + ''' + Validate the total distance travered, + the number of layers crossed and the distance + travelled in each of these layers, for + neutrinos coming from various zenith angles + + also test separately the calculation of critical + zenith boundaries for any particular layer, as + calculated by computeMinLengthToLayers + ''' + from pisa.utils.comparisons import ALLCLOSE_KW + # + # The test file is a 4-layer PREM Earth model. The + # file contains the following information: + # + # Distance to Earth's core [km] density [] + # ----------------------------- ---------- + # 0. 13.0 + # 1220.0 13.0 + # 3480.0 11.3 + # 5701.0 5.0 + # 6371.0 3.3 + # + # Note that the order of these values is inverted in + # layer.radii, so the first element in this object + # will be 6371 + + # TEST I: critical coszen values + # + # For each layer, the angle at which a neutrino track will + # become tangeant to a layer boundary can be calculated as + # follow: + # + # cos(theta) = -np.sqrt(1-r_n**2/R_detector**2) + # + # where the negative value is taken because the zenith angle + # is larger than pi/2 + # + # Note that if the layer is above the detector depth, + # The critical coszen is set to 0. + # + layer = Layers('osc/PREM_4layer.dat', detector_depth=1., prop_height=20.) + logging.info('detector depth = %s km' %layer.detector_depth) + logging.info('Detector radius = %s km'%layer.r_detector) + logging.info('Neutrino production height = %s km'%layer.prop_height) + layer.computeMinLengthToLayers() + ref_cz_crit = np.array([1., 1., -0.4461133826191877, -0.8375825182106081, -0.9814881717430358, -1.], dtype=FTYPE) + logging.debug('Asserting Critical coszen values...') + assert np.allclose(layer.coszen_limit, ref_cz_crit, **ALLCLOSE_KW), f'test:\n{layer.coszen_limit}\n!= ref:\n{ref_cz_crit}' + + # + # TEST II: Verify total path length (in vacuum) + # + # The total path length is given by: + # + # -r_detector*cz + np.sqrt(r_detector**2.*cz**2 - (r_detector**2. - r_prop**2.)) + # + # where r_detector is the radius distance of + # the detector, and r_prop is the radius + # at which neutrinos are produced + input_cz = np.cos(np.array([0., 36.* np.pi / 180., 63. * np.pi / 180., \ + np.pi/2., 105.* np.pi / 180., 125. * np.pi / 180., \ + 170 * np.pi / 180., np.pi])) + + correct_length = np.array([21., 25.934954968613056, 45.9673929915939, 517.6688130455607,\ + 3376.716060094899, 7343.854310588515, 12567.773643090592, 12761.]) + layer.calcPathLength(input_cz) + computed_length = layer.distance + logging.debug('Testing full path in vacuum calculations...') + assert np.allclose(computed_length, correct_length, **ALLCLOSE_KW), f'test:\n{computed_length}\n!= ref:\n{correct_length}' + logging.info('<< PASS : test_Layers 2 >>') + +def test_layers_3(): + # + # TEST III: check the individual path distances crossed + # for the previous input cosines + # + # For negative values of coszen, the distance crossed in a layer i is: + # + # d_i = R_p*cos(alpha) + sqrt(Rp**2cos(alpha)**2 - (Rp**2-r1**2))) + # + # where Rp is the production radius, r1 is the outer limit of a layer + # and alpha is an angle that relates to the total path D and zenith + # theta via the sine law: + # + # sin(alpha) = sin(pi-theta)*D /Rp + # + from pisa.utils.comparisons import ALLCLOSE_KW + import copy + + logging.debug('Testing Earth layer segments and density computations...') + layer = Layers('osc/PREM_4layer.dat', detector_depth=1., prop_height=20.) + logging.info('detector depth = %s km' %layer.detector_depth) + logging.info('Detector radius = %s km'%layer.r_detector) + logging.info('Neutrino production height = %s km'%layer.prop_height) + layer.computeMinLengthToLayers() + + # Define some electron densities + # (Normally, these would come from some a config + # file in PISA) + YeI = 0.4656 + YeM = 0.4957 + YeO = 0.4656 + + layer.setElecFrac(YeI, YeO, YeM) + + # Define a couple of key coszen directions + # cz = 1 (path above the detector) + # cz = 0 (horizontal path) + # cz = -0.4461133826191877 (tangent to the first inner layer of PREM4) + # cz = -1 (path below the detector) + cz_values = np.array([1., 0, -0.4461133826191877, -1.], dtype=FTYPE) + + # Run the layer calculation + layer.calcLayers(cz=cz_values) + + # Save a copy of the segment information, and reshape them as they + # are reshaped in pi_prob3 + layers_crossed = copy.deepcopy(layer.n_layers) + distance_segments = copy.deepcopy(layer.distance.reshape(4,layer.max_layers)) + density_segments = copy.deepcopy(layer.density.reshape(4,layer.max_layers)) + + # Replace the segmented distances by the total path length in vacuum + # (like in test #2): + layer.calcPathLength(cz_values) + vacuum_distances = copy.deepcopy(layer.distance) + + + # Print out the outcome of the layer calculations + # Compare total segmented lengh with total vacuum path length + logging.info('Down-going neutrino (coszen = 1):\n-------------') + logging.info("number of layers: {}".format(layers_crossed[0])) + logging.info("Densities crossed: {}".format(density_segments[0,:])) + logging.info("Segment lengths: {}\n".format(distance_segments[0,:])) + correct_path = np.array([20., 1.,0,0,0,0,0,0,0,0,0,0]) + assert np.allclose(distance_segments[0,:], correct_path, **ALLCLOSE_KW), 'ERROR in downgoing neutrino path: {0} vs {1}'.format(distance_segments[0,:],correct_path) + + logging.info('Horizontal neutrino (coszen = 0):\n-------------') + logging.info("number of layers: {}".format(layers_crossed[1])) + logging.info("Densities crossed: {}".format(density_segments[1,:])) + logging.info("Segment lengths: {}\n".format(distance_segments[1,:])) + correct_path = np.array([404.79277484435556, 112.87603820120549,0,0,0,0,0,0,0,0,0,0]) + assert np.allclose(distance_segments[1,:], correct_path, **ALLCLOSE_KW), 'ERROR in horizontal neutrino path: {0} vs {1}'.format(distance_segments[1,:],correct_path) + + logging.info('Neutrino tangeant to the first inner layer (coszen = -0.4461133826191877):\n-------------\n') + logging.info("number of layers: {}".format(layer.n_layers[2])) + logging.info("Densities crossed: {}".format(density_segments[2,:])) + logging.info("Segment lengths: {}\n".format(distance_segments[2,:])) + correct_path = np.array([44.525143211129944, 5685.725369597015,0,0,0,0,0,0,0,0,0,0]) + assert np.allclose(distance_segments[2,:], correct_path, **ALLCLOSE_KW), 'ERROR in tangeant neutrino path: {0} vs {1}'.format(distance_segments[2,:],correct_path) + + logging.info('Up-going neutrino (coszen = -1):\n-------------') + logging.info("number of layers: {}".format(layer.n_layers[3])) + logging.info("Densities crossed: {}".format(density_segments[3,:])) + logging.info("Segment lengths: {}\n".format(distance_segments[3,:])) + correct_path = np.array([20., 670., 2221., 2260., 2440., 2260., 2221., 669., 0, 0,0,0], dtype=FTYPE) + assert np.allclose(distance_segments[3,:], correct_path, **ALLCLOSE_KW), 'ERROR in upgoing neutrino path: {0} vs {1}'.format(distance_segments[3,:],correct_path) + + logging.info('Comparing the segments sums with the total path in vacuum...') + assert np.allclose(np.sum(distance_segments, axis=1), vacuum_distances, **ALLCLOSE_KW), 'ERROR: distance mismatch: {0} vs {1}'.format(np.sum(distance_segments, axis=1), vacuum_distances) + + logging.info('<< PASS : test_Layers 3 >>') + + + + +if __name__ == '__main__': + set_verbosity(3) + test_layers_1() + test_layers_2() + test_layers_3() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/lri_params.html b/_modules/pisa/stages/osc/lri_params.html new file mode 100644 index 000000000..756372652 --- /dev/null +++ b/_modules/pisa/stages/osc/lri_params.html @@ -0,0 +1,229 @@ + + + + + + pisa.stages.osc.lri_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.lri_params

+"""
+LRI Params: Charecterize Long Range Interaction mediator
+
+Developed by following osc_params.py and nsi_params.py
+"""
+
+from __future__ import absolute_import, division
+
+import numpy as np
+from pisa import CTYPE, FTYPE
+from pisa.utils.comparisons import ALLCLOSE_KW, isscalar, recursiveEquality
+from pisa.utils.log import Levels, set_verbosity, logging
+
+__all__ = ['LRIParams']
+
+
+[docs] +class LRIParams(object): + """ + Holds the mediator information of long range interaction:z' + Assumed three anamoly free symmetries, Le_mu, Le_tau, Lmu_tau(by mixing z and z')). + + Attributes + ---------- + potential matrix : Three 2d float array of shape (3,3), one for each symmetry + + Potential matrix holding the potential term of three different symmetris, which is a + function of mediator mass, and the coupling constant of the interaction. + + + """ + + def __init__(self): + + self._v_lri = 0. + self._potential_matrix_emu = np.zeros((3, 3), dtype=FTYPE) + self._potential_matrix_etau = np.zeros((3, 3), dtype=FTYPE) + self._potential_matrix_mutau = np.zeros((3, 3), dtype=FTYPE) + + # --- LRI potential --- + + @property + def v_lri(self): + """Potential term of symmetry e mu""" + return self._v_lri + + @v_lri.setter + def v_lri(self, value): + assert value <1. + self._v_lri = value + + @property + def potential_matrix_emu(self): + """LRI matter interaction potential matrix e mu symmetry""" + + v_matrix = np.zeros((3, 3), dtype=FTYPE) + + v_matrix[0, 0] = self.v_lri + v_matrix[0, 1] = 0. + v_matrix[0, 2] = 0. + v_matrix[1, 0] = 0. + v_matrix[1, 1] = - self.v_lri + v_matrix[1, 2] = 0. + v_matrix[2, 0] = 0. + v_matrix[2, 1] = 0. + v_matrix[2, 2] = 0. + + assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) + + return v_matrix + + @property + def potential_matrix_etau(self): + """LRI matter interaction potential matrix e tau symmetry""" + + v_matrix = np.zeros((3, 3), dtype=FTYPE) + + v_matrix[0, 0] = self.v_lri + v_matrix[0, 1] = 0. + v_matrix[0, 2] = 0. + v_matrix[1, 0] = 0. + v_matrix[1, 1] = 0. + v_matrix[1, 2] = 0. + v_matrix[2, 0] = 0. + v_matrix[2, 1] = 0. + v_matrix[2, 2] = - self.v_lri + + assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) + + return v_matrix + + @property + def potential_matrix_mutau(self): + """LRI matter interaction potential matrix mu tau symmetry""" + + v_matrix = np.zeros((3, 3), dtype=FTYPE) + + v_matrix[0, 0] = 0. + v_matrix[0, 1] = 0. + v_matrix[0, 2] = 0. + v_matrix[1, 0] = 0. + v_matrix[1, 1] = self.v_lri + v_matrix[1, 2] = 0. + v_matrix[2, 0] = 0. + v_matrix[2, 1] = 0. + v_matrix[2, 2] = - self.v_lri + + assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) + + return v_matrix
+ + + +def test_lri_params(): + """ + # TODO: implement me! + """ + pass + +if __name__=='__main__': + from pisa import TARGET + from pisa.utils.log import set_verbosity, logging + set_verbosity(1) + test_lri_params() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/nsi_params.html b/_modules/pisa/stages/osc/nsi_params.html new file mode 100644 index 000000000..ab73f8bfa --- /dev/null +++ b/_modules/pisa/stages/osc/nsi_params.html @@ -0,0 +1,819 @@ + + + + + + pisa.stages.osc.nsi_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.nsi_params

+# author: T. Ehrhardt
+# date:   Nov 8, 2018
+"""
+NSIParams: Characterize non-standard neutrino interaction coupling strengths
+
+merged in by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu)
+to include NSI changes made by Thomas Ehrhardt on his branch:
+original version can be found in thehrh/pisa nsi_reparameterisation branch
+"""
+
+from __future__ import absolute_import, division
+
+import numpy as np
+
+from pisa import CTYPE, FTYPE
+from pisa.utils.comparisons import ALLCLOSE_KW, isscalar, recursiveEquality
+from pisa.utils.log import Levels, set_verbosity, logging
+
+__all__ = ['NSIParams', 'StdNSIParams', 'VacuumLikeNSIParams']
+
+
+ARY2STR_KW = dict(
+    precision=np.finfo(FTYPE).precision + 2,
+    floatmode="fixed",
+    sign=" ",
+    max_line_width=200,
+    separator=", ",
+)
+
+
+def _set_magnitude_phase(magn_phase_tuple):
+    try:
+        magnitude, phase = magn_phase_tuple
+    except:
+        raise ValueError(
+            'Pass an iterable with two items (magnitude and phase)!'
+        )
+    if not isscalar(magnitude) or not isscalar(phase):
+        raise TypeError(
+            'Only scalar values for magnitude and phase accepted!'
+        )
+    if magnitude < 0.0 and phase != 0.0:
+        raise ValueError(
+            'Only accepting negative values with a zero phase (real coupling)!'
+        )
+    return magnitude, phase
+
+
+
+[docs] +class NSIParams(object): + """ + Holds non-standard neutrino interaction parameters of neutral current type + for propagating neutrinos, interacting with 1st generation Standard Model + background quarks (u or d) or electrons in the Earth. + + + Attributes + ---------- + eps_matrix : 2d float array of shape (3, 3) + Hermitian NSI matrix holding the effective epsilon parameters describing + strengths of NSI transitions between the two specified neutrino flavors, + via NC-type interaction with 1st generation quarks or electrons in the + Earth. + Flavour-preserving (diagonal) ones are real, while the flavour-changing + (off-diagonal) ones are complex. + Note that these parameters are not the Lagrangian-level couplings but + rather the sums over these weighted by the respective relative number + densities (approx. constant) of each possible scattering partner + in the Earth. + + """ + + def __init__(self): + """Set NSI parameters.""" + self._eps_matrix = np.zeros((3, 3), dtype=CTYPE)
+ + + +
+[docs] +class StdNSIParams(NSIParams): + """ + NSI parameters in the standard parameterization. + + Attributes + ---------- + eps_matrix : 2d float array of shape (3, 3) + Effective NSI coupling matrix. + + eps_ee, eps_emu, eps_etau, eps_mumu, eps_mutau, eps_tautau : float or complex + Effective NSI coupling parameters. + + """ + + def __init__(self): + super().__init__() + self._eps_ee = 0. + self._eps_emu = 0. + self._eps_etau = 0. + self._eps_mumu = 0. + self._eps_mutau = 0. + self._eps_tautau = 0. + + # --- NSI epsilons --- + @property + def eps_ee(self): + """effective nue-nue NSI coupling parameter""" + return self.eps_matrix[0, 0].real + + @eps_ee.setter + def eps_ee(self, value): + if isinstance(value, complex) or not isscalar(value): + raise TypeError("eps_ee must be a real number!") + self._eps_matrix[0, 0] = value + 1.j * self._eps_matrix[0, 0].imag + + @property + def eps_emu(self): + """effective nue-numu NSI coupling parameter""" + return self.eps_matrix[0, 1] + + @eps_emu.setter + def eps_emu(self, value): + magnitude, phase = _set_magnitude_phase(value) + self._eps_matrix[0, 1] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) + self._eps_matrix[1, 0] = np.conjugate(self._eps_matrix[0, 1]) + + @property + def eps_etau(self): + """effective nue-nutau NSI coupling parameter""" + return self.eps_matrix[0, 2] + + @eps_etau.setter + def eps_etau(self, value): + magnitude, phase = _set_magnitude_phase(value) + self._eps_matrix[0, 2] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) + self._eps_matrix[2, 0] = np.conjugate(self._eps_matrix[0, 2]) + + @property + def eps_mumu(self): + """effective numu-numu NSI coupling parameter""" + return self.eps_matrix[1, 1].real + + @eps_mumu.setter + def eps_mumu(self, value): + if isinstance(value, complex) or not isscalar(value): + raise TypeError("eps_mumu must be a real number!") + self._eps_matrix[1, 1] = value + 1.j * self._eps_matrix[1, 1].imag + + @property + def eps_mutau(self): + """effective numu-nutau NSI coupling parameter""" + return self.eps_matrix[1, 2] + + @eps_mutau.setter + def eps_mutau(self, value): + magnitude, phase = _set_magnitude_phase(value) + self._eps_matrix[1, 2] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) + self._eps_matrix[2, 1] = np.conjugate(self._eps_matrix[1, 2]) + + @property + def eps_tautau(self): + """effective nutau-nutau NSI coupling parameter""" + return self.eps_matrix[2, 2].real + + @eps_tautau.setter + def eps_tautau(self, value): + if isinstance(value, complex) or not isscalar(value): + raise TypeError("eps_tautau must be a real number!") + self._eps_matrix[2, 2] = value + 1.j * self._eps_matrix[2, 2].imag + + @property + def eps_matrix(self): + nsi_eps = self._eps_matrix + # subtract mumu entry from diagonal entries (trace irrelevant) + nsi_eps = nsi_eps - nsi_eps[1, 1] * np.eye(3, dtype=FTYPE) + # explicitly nullify imaginary parts of diagonal entries which + # are only there due to numerical inaccuracies + for i in range(3): + nsi_eps[i, i] = nsi_eps[i, i].real + 0 * 1.j + + # make sure this is a valid Hermitian potential matrix + # before returning anything + assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) + + return nsi_eps
+ + + +
+[docs] +class VacuumLikeNSIParams(NSIParams): + """ + NSI parameters using a vacuum Hamiltonian-like parameterization. + + """ + # pylint: disable=invalid-name + def __init__(self): + super().__init__() + self._eps_scale = 1. + self._eps_prime = 0. + self._phi12 = 0. + self._phi13 = 0. + self._phi23 = 0. + self._alpha1 = 0. + self._alpha2 = 0. + self._deltansi = 0. + + # --- overall matter potential strength --- + @property + def eps_scale(self): + """Generalised matter potential strength scale""" + return self._eps_scale + + @eps_scale.setter + def eps_scale(self, value): + if isinstance(value, complex) or not isscalar(value): + raise TypeError("eps_scale must be a real number!") + self._eps_scale = value + + @property + def eps_prime(self): + """Second Hmat eigenvalue (beside eps_scale)""" + return self._eps_prime + + @eps_prime.setter + def eps_prime(self, value): + if isinstance(value, complex) or not isscalar(value): + raise TypeError("eps_prime must be a real number!") + self._eps_prime = value + + # --- projection phases --- + # --- phi12 --- + @property + def phi12(self): + """1-2 angle""" + return self._phi12 + + @phi12.setter + def phi12(self, value): + assert -np.pi <= value <= np.pi + self._phi12 = value + + # --- phi13 --- + @property + def phi13(self): + """1-3 angle""" + return self._phi13 + + @phi13.setter + def phi13(self, value): + assert -np.pi <= value <= np.pi + self._phi13 = value + + # --- phi23 --- + @property + def phi23(self): + """2-3 angle""" + return self._phi23 + + @phi23.setter + def phi23(self, value): + assert -np.pi <= value <= np.pi + self._phi23 = value + + # --- vacuum-matter relative phases --- + # --- alpha1 --- + @property + def alpha1(self): + """1-phase""" + return self._alpha1 + + @alpha1.setter + def alpha1(self, value): + assert 0. <= value <= 2*np.pi + self._alpha1 = value + + # --- alpha2 --- + @property + def alpha2(self): + """2-phase""" + return self._alpha2 + + @alpha2.setter + def alpha2(self, value): + assert 0. <= value <= 2*np.pi + self._alpha2 = value + + # --- nsi phase --- + @property + def deltansi(self): + """NSI phase""" + return self._deltansi + + @deltansi.setter + def deltansi(self, value): + assert 0. <= value <= 2*np.pi + self._deltansi = value + + # getters for the std. coupling parameters + # which are just the coupling matrix entries + @property + def eps_ee(self): + """effective nue-nue NSI coupling parameter""" + return self.eps_matrix[0, 0].real + + @property + def eps_emu(self): + """effective nue-numu NSI coupling parameter""" + return self.eps_matrix[0, 1] + + @property + def eps_etau(self): + """effective nue-nutau NSI coupling parameter""" + return self.eps_matrix[0, 2] + + @property + def eps_mumu(self): + """effective numu-numu NSI coupling parameter""" + return self.eps_matrix[1, 1].real + + @property + def eps_mutau(self): + """effective numu-nutau NSI coupling parameter""" + return self.eps_matrix[1, 2] + + @property + def eps_tautau(self): + """effective nutau-nutau NSI coupling parameter""" + return self.eps_matrix[2, 2].real + + + @property + def eps_matrix(self): + """Effective NSI coupling matrix.""" + # numerical calculation for now... + # relative matter-nsi phases + Qrel = ( + np.array([ + complex(np.cos(self.alpha1), np.sin(self.alpha1)), + complex(np.cos(self.alpha2), np.sin(self.alpha2)), + complex(np.cos(-(self.alpha1 + self.alpha2)), np.sin(-(self.alpha1 + self.alpha2))) + ]) * np.eye(3, dtype=FTYPE) + ) + # rotation matrices (signs as for PMNS matrix, + # also reproduce NSI global fit paper relations) + R12 = np.array( + [[np.cos(self.phi12), np.sin(self.phi12), 0], + [-np.sin(self.phi12), np.cos(self.phi12), 0], + [0, 0, 1]], + dtype=FTYPE + ) + R13 = np.array( + [[np.cos(self.phi13), 0, np.sin(self.phi13)], + [0, 1, 0], + [-np.sin(self.phi13), 0, np.cos(self.phi13)]], + dtype=FTYPE + ) + R23_complex = np.array( + [[1, 0, 0], + [0, np.cos(self.phi23), np.sin(self.phi23) * complex(np.cos(-self.deltansi), np.sin(-self.deltansi))], + [0, -np.sin(self.phi23) * complex(np.cos(self.deltansi), np.sin(self.deltansi)), np.cos(self.phi23)]], + ) + # "matter mixing matrix" + Umat = np.matmul(R12, np.matmul(R13, R23_complex)) + # Hmat eigenvalues + Dmat = np.array([self.eps_scale, self.eps_prime, 0], dtype=FTYPE) * np.eye(3, dtype=FTYPE) + # start from the innermost product, work your way outwards + mat_pot = np.matmul( + Qrel, + np.matmul(Umat, + np.matmul(Dmat, + np.matmul(Umat.conj().T, Qrel.conj().T) + ) + ) + ) + # subtract mumu entry from diagonal entries (trace irrelevant) + mat_pot = mat_pot - mat_pot[1, 1] * np.eye(3, dtype=FTYPE) + # subtract standard matter potential entry for CC coherent + # forward-scattering + mat_pot[0, 0] = mat_pot[0, 0] - 1. + # this is now the actual nsi coupling matrix + nsi_eps = mat_pot + # explicitly nullify imaginary parts of diagonal entries which + # are only there due to numerical inaccuracies + for i in range(3): + nsi_eps[i, i] = nsi_eps[i, i].real + 0 * 1.j + + # make sure this is a valid Hermitian potential matrix + # before returning anything + assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) + + return nsi_eps + + @property + def eps_matrix_analytical(self): + """Effective NSI coupling matrix calculated analytically.""" + # Analytical relations. These are wrong right now! #FIXME + nsi_eps = np.zeros((3, 3, 2), dtype=FTYPE) + + sp12 = np.sin(self.phi12) + sp13 = np.sin(self.phi13) + sp23 = np.sin(self.phi23) + cp12 = np.sqrt(1. - sp12**2) + cp13 = np.sqrt(1. - sp13**2) + cp23 = np.sqrt(1. - sp23**2) + + sdnsi = np.sin(self.deltansi) + cdnsi = np.cos(self.deltansi) + + # eps_ee - eps_mumu (real) + nsi_eps[0, 0, 0] = ( + self.eps_scale * cp13**2 * (cp12**2 - sp12**2) + + self.eps_prime * ( + (cp12**2 - sp12**2) * (sp13**2 * sp23**2 - cp23**2) - + 4 * cp12 * sp12 * sp13 * cp23 * sp23 * cdnsi + ) + ) - 1 + nsi_eps[0, 0, 1] = 0. + # eps_emu (complex) + nsi_eps[0, 1, 0] = ( + self.eps_scale * cp12 * sp12 * cp13**2 * np.cos(self.alpha1 - self.alpha2) + + self.eps_prime * ( + ( + cp12 * sp12 * (sp13**2 * sp23**2 - cp23**2) + + sp13 * cp23 * sp23 * cdnsi * (cp12**2 - sp12**2) + ) * np.cos(self.alpha1 - self.alpha2) - + ( + sp13 * cp23 * sp23 * sdnsi + ) * np.sin(self.alpha1 - self.alpha2) + ) + ) + nsi_eps[0, 1, 1] = ( + self.eps_scale * cp12 * sp12 * cp13**2 * np.sin(self.alpha1 - self.alpha2) + + self.eps_prime * ( + ( + cp12 * sp12 * (sp13**2 * sp23**2 - cp23**2) + + sp13 * cp23* sp23 * cdnsi * (cp12**2 - sp12**2) + ) * np.sin(self.alpha1 - self.alpha2) + + ( + sp13 * cp23 * sp23 * sdnsi + ) * np.cos(self.alpha1 - self.alpha2) + ) + ) + # eps_etau (complex) + nsi_eps[0, 2, 0] = ( + -self.eps_scale * cp12 * sp13 * cp13 * np.cos(2 * self.alpha1 + self.alpha2) + + self.eps_prime * ( + ( + cp13 * sp23 * (cp12 * sp13 * sp23 - sp12 * cp23 * cdnsi) + ) * np.cos(2 * self.alpha1 + self.alpha2) - + ( + cp13 * sp12 * cp23 * sp23 * sdnsi + ) * np.sin(2 * self.alpha1 + self.alpha2) + ) + ) + nsi_eps[0, 2, 1] = ( + -self.eps_scale * cp12* sp13 * cp13 * np.sin(2 * self.alpha1 + self.alpha2) + + self.eps_prime * ( + ( + cp13 * sp23 * (cp12 * sp13 * sp23 - sp12 * cp23 * cdnsi) + ) * np.sin(2 * self.alpha1 + self.alpha2) + + ( + cp13 * sp23 * sp12 * cp23 * sdnsi + ) * np.cos(2 * self.alpha1 + self.alpha2) + ) + ) + # eps_emu* (complex) + nsi_eps[1, 0, 0] = nsi_eps[0, 1, 0] + nsi_eps[1, 0, 1] = -nsi_eps[0, 1, 1] + # eps_etau* (complex) + nsi_eps[2, 0, 0] = nsi_eps[0, 2, 0] + nsi_eps[2, 0, 1] = -nsi_eps[0, 2, 1] + # eps_mumu - eps_mumu (0 by definition) + nsi_eps[1, 1, 0] = 0. + nsi_eps[1, 1, 1] = 0. + # eps_mutau (complex) + nsi_eps[1, 2, 0] = ( + -self.eps_scale * sp12 * cp13 * sp13 * np.cos(self.alpha1 + 2 * self.alpha2) + + self.eps_prime * ( + ( + cp13 * sp23 * (sp12 * sp13 * sp23 + cp12 * cp23 * cdnsi) + ) * np.cos(self.alpha1 + 2 * self.alpha2) + + ( + cp12 * cp13 * cp23 * sp23 * sdnsi + ) * np.sin(self.alpha1 + 2 * self.alpha2) + ) + ) + nsi_eps[1, 2, 1] = ( + -self.eps_scale * sp12 * cp13 * sp13 * np.sin(self.alpha1 + 2 * self.alpha2) + + self.eps_prime * ( + ( + -cp12 * cp13 * cp23 * sp23 * sdnsi + ) * np.cos(self.alpha1 + 2 * self.alpha2) + + ( + cp13 * sp23 * (sp12 * sp13 * sp23 + cp12 * cp23 * cdnsi) + ) * np.sin(self.alpha1 + 2 * self.alpha2) + ) + ) + # eps_mutau* (complex) + nsi_eps[2, 1, 0] = nsi_eps[1, 2, 0] + nsi_eps[2, 1, 1] = -nsi_eps[1, 2, 1] + # eps_tautau - eps_mumu (real) + nsi_eps[2, 2, 0] = ( + self.eps_scale * (sp13**2 - cp13**2 * sp12**2) + + self.eps_prime *( + sp23**2 * (cp13**2 - sp12**2 * sp13**2) - + 2 * cp12 * sp12 * sp13 * cp23 * sp23 * cdnsi - + cp12**2 * cp23**2 + ) + ) + nsi_eps[2, 2, 1] = 0. + + # make this into a complex 2d array + nsi_eps = nsi_eps[:, :, 0] + nsi_eps[:, :, 1] * 1.j + # make sure this is a valid Hermitian potential matrix + # before returning anything + assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) + + return nsi_eps
+ + +def test_nsi_params(): + """Unit tests for subclasses of `NSIParams`.""" + # TODO: these have to be extended + rand = np.random.RandomState(0) + std_nsi = StdNSIParams() + try: + # cannot accept a sequence + std_nsi.eps_ee = [rand.rand()] + except TypeError: + pass + + try: + # must be real + std_nsi.eps_ee = rand.rand() * 1.j + except TypeError: + pass + + try: + # unphysical negative magnitude for nonzero phase + std_nsi.eps_mutau = ((rand.rand() - 1.0), 0.1) + except ValueError: + pass + + std_nsi.eps_ee = 0.5 + std_nsi.eps_mumu = 0.5 + std_nsi.eps_tautau = 0.5 + if not np.allclose( + std_nsi.eps_matrix, np.zeros((3, 3), dtype=CTYPE), **ALLCLOSE_KW + ): + raise ValueError("NSI coupling matrix should be identically zero!") + + vac_like_nsi = VacuumLikeNSIParams() + vac_like_nsi.eps_scale = rand.rand() * 10. + assert recursiveEquality(vac_like_nsi.eps_ee, vac_like_nsi.eps_scale - 1.0) + +def test_nsi_parameterization(): + """Unit test for Hvac-like NSI parameterization.""" + rand = np.random.RandomState(0) + alpha1, alpha2, deltansi = rand.rand(3) * 2. * np.pi + phi12, phi13, phi23 = rand.rand(3) * 2*np.pi - np.pi + eps_max_abs = 10.0 + eps_scale, eps_prime = rand.rand(2) * 2 * eps_max_abs - eps_max_abs + nsi_params = VacuumLikeNSIParams() + nsi_params.eps_scale = eps_scale + nsi_params.eps_prime = eps_prime + nsi_params.phi12 = phi12 + nsi_params.phi13 = phi13 + nsi_params.phi23 = phi23 + nsi_params.alpha1 = alpha1 + nsi_params.alpha2 = alpha2 + nsi_params.deltansi = deltansi + + logging.trace('Checking agreement between numerical & analytical NSI matrix...') + + eps_mat_numerical = nsi_params.eps_matrix + eps_mat_analytical = nsi_params.eps_matrix_analytical + + try: + close = np.isclose(eps_mat_numerical, eps_mat_analytical, **ALLCLOSE_KW) + if not np.all(close): + logging.debug( + "Numerical NSI matrix:\n%s", + np.array2string(eps_mat_numerical, **ARY2STR_KW) + ) + logging.debug( + "Analytical expansion (by hand):\n%s", + np.array2string(eps_mat_analytical, **ARY2STR_KW) + ) + raise ValueError( + 'Evaluating analytical expressions for NSI matrix elements' + ' does not give agreement with numerical calculation!' + ' Elementwise agreement:\n%s' + % close + ) + except ValueError as err: + logging.warning( + "%s\nThis is expected." + " Going ahead with numerical calculation for now.", err + ) + + logging.trace('Now checking agreement with sympy calculation...') + + eps_mat_sympy = nsi_sympy_mat_mult( + eps_scale_val=eps_scale, + eps_prime_val=eps_prime, + phi12_val=phi12, + phi13_val=phi13, + phi23_val=phi23, + alpha1_val=alpha1, + alpha2_val=alpha2, + deltansi_val=deltansi + ) + + logging.trace('ALLCLOSE_KW = {}'.format(ALLCLOSE_KW)) + close = np.isclose(eps_mat_numerical, eps_mat_sympy, **ALLCLOSE_KW) + if not np.all(close): + logging.error( + 'Numerical NSI matrix:\n%s', + np.array2string(eps_mat_numerical, **ARY2STR_KW) + ) + logging.error( + 'Sympy NSI matrix:\n%s', np.array2string(eps_mat_sympy, **ARY2STR_KW) + ) + raise ValueError( + 'Sympy and numerical calculations disagree! Elementwise agreement:\n' + '%s' % close + ) + +def nsi_sympy_mat_mult( + eps_scale_val, + eps_prime_val, + phi12_val, + phi13_val, + phi23_val, + alpha1_val, + alpha2_val, + deltansi_val, +): + """Sympy calculation of generalised matter Hamiltonian.""" + # pylint: disable=invalid-name + from sympy import ( + cos, sin, + Matrix, eye, + I, re, im, + Symbol, symbols, + simplify, + init_printing + ) + from sympy.physics.quantum.dagger import Dagger + init_printing(use_unicode=True) + phi12, phi13, phi23 = symbols('phi12 phi13 phi23', real=True) + alpha1, alpha2 = symbols('alpha1 alpha2', real=True) + eps_scale, eps_prime = symbols('eps_scale eps_prime', real=True) + deltansi = Symbol('deltansi', real=True) + + Dmat = Matrix( + [[eps_scale, 0, 0], [0, eps_prime, 0], [0, 0, 0]] + ) + Qrel = Matrix( + [[cos(alpha1) + I * sin(alpha1), 0, 0], + [0, cos(alpha2) + I * sin(alpha2), 0], + [0, 0, cos(-(alpha1 + alpha2)) + I * sin(-(alpha1 + alpha2))]] + ) + R12 = Matrix( + [[cos(phi12), sin(phi12), 0], + [-sin(phi12), cos(phi12), 0], + [0, 0, 1]] + ) + R13 = Matrix( + [[cos(phi13), 0, sin(phi13)], + [0, 1, 0], + [-sin(phi13), 0, cos(phi13)]] + ) + R23_complex = Matrix( + [[1, 0, 0], + [0, cos(phi23), sin(phi23) * (cos(deltansi) + I * sin(-deltansi))], + [0, -sin(phi23) * (cos(deltansi) + I * sin(deltansi)), cos(phi23)]] + ) + + Umat = R12 * R13 * R23_complex + tmp = Dagger(Umat) * Dagger(Qrel) + tmp2 = Dmat * tmp + tmp3 = Umat * tmp2 + Hmat_sympy = Qrel * tmp3 + # subtract constant * id + Hmat_sympy_minus_mumu = Hmat_sympy - Hmat_sympy[1, 1] * eye(3) + Hmat_sympy_minus_mumu[0, 0] = Hmat_sympy_minus_mumu[0, 0] - 1 + eps_mat_sympy = Hmat_sympy_minus_mumu + # simplify + eps_mat_sympy_simpl = simplify(eps_mat_sympy) + # evaluate + eps_mat_sympy_eval = eps_mat_sympy_simpl.subs( + [(eps_scale, eps_scale_val), (eps_prime, eps_prime_val), + (phi12, phi12_val), (phi13, phi13_val), (phi23, phi23_val), + (alpha1, alpha1_val), (alpha2, alpha2_val), + (deltansi, deltansi_val)] + ) + # real part + eps_mat_sympy_eval_re = re(eps_mat_sympy_eval) + # imaginary part + eps_mat_sympy_eval_im = im(eps_mat_sympy_eval) + + # complex numpy array + return ( + np.array(eps_mat_sympy_eval_re) + np.array(eps_mat_sympy_eval_im) * 1.j + ).astype(CTYPE) + + +if __name__ == '__main__': + set_verbosity(Levels.INFO) + test_nsi_params() + test_nsi_parameterization() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/osc_params.html b/_modules/pisa/stages/osc/osc_params.html new file mode 100644 index 000000000..67084171b --- /dev/null +++ b/_modules/pisa/stages/osc/osc_params.html @@ -0,0 +1,416 @@ + + + + + + pisa.stages.osc.osc_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.osc_params

+# author: T. Ehrhardt
+# date:   2018
+"""
+OscParams: Characterize neutrino oscillation parameters
+           (mixing angles, Dirac-type CP-violating phase, mass splittings)
+
+changed by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu) 
+to include NSI changes made by Thomas Ehrhardt on his branch:  
+original version can be found in thehrh/pisa nsi_reparameterisation branch 
+"""
+
+from __future__ import division
+
+import numpy as np
+
+from pisa import FTYPE
+
+__all__ = ['OscParams']
+
+
+
+[docs] +class OscParams(object): + """ + Holds neutrino oscillation parameters, i.e., mixing angles, squared-mass + differences, and a Dirac-type CPV phase. The neutrino mixing (PMNS) matrix + constructed from these parameters is given in the standard + 3x3 parameterization. Also holds the generalised matter potential matrix + (divided by the matter potential a), i.e. diag(1, 0, 0) for the standard + case. + + Parameters + ---------- + dm21, dm31, dm41 : float + Mass splittings (delta M^2_{21,31,41}) expected to be given in [eV^2] + + sin12, sin13, sin23 : float + 1-2, 1-3 and 2-3 mixing angles, interpreted as sin(theta_{ij}) + + deltacp : float + Value of CPV phase in [rad] + + + Attributes + ---------- + dm21, dm31, dm41 : float + Cf. parameters + + sin12, sin13, sin23, sin14 : float + Cf. parameters + + theta12, theta13, theta23, theta14 : float + Mixing angles (corresponding to sinXY) + + deltacp : float + Cf. parameters + + mix_matrix : 3d float array of shape (3, 3, 2) + Neutrino mixing (PMNS) matrix in standard parameterization. The third + dimension holds the real and imaginary parts of each matrix element. + + mix_matrix_complex : 3d complex array + + mix_matrix_reparam : 3d float array of shape (3, 3, 2) + Reparameterized neutrino mixing matrix, such that CPT invariance + of vacuum propagation implemented by 3 simultaneous osc. param. + transformations. + + mix_matrix_reparam_complex : 3d complex array + + dm_matrix : 2d float array of shape (3, 3) + Antisymmetric matrix of squared-mass differences in vacuum + + """ + def __init__(self): + + self._sin12 = 0. + self._sin13 = 0. + self._sin23 = 0. + self._sin14 = 0. + self._deltacp = 0. + self.dm21 = 0. + self.dm31 = 0. + self.dm41 = 0. + self.gamma21 = 0. # TODO Add full 3x3 matrix option, TODO update docs, TODO getters/setters to enforce values ranges? + self.gamma31 = 0. + self.gamma32 = 0. + + # --- theta12 --- + @property + def sin12(self): + """Sine of 1-2 mixing angle""" + return self._sin12 + + @sin12.setter + def sin12(self, value): + assert (abs(value) <= 1) + self._sin12 = value + + @property + def theta12(self): + return np.arcsin(self.sin12) + + @theta12.setter + def theta12(self, value): + self.sin12 = np.sin(value) + + # --- theta13 --- + @property + def sin13(self): + """Sine of 1-3 mixing angle""" + return self._sin13 + + @sin13.setter + def sin13(self, value): + assert (abs(value) <= 1) + self._sin13 = value + + @property + def theta13(self): + return np.arcsin(self.sin13) + + @theta13.setter + def theta13(self, value): + self.sin13 = np.sin(value) + + # --- theta23 --- + @property + def sin23(self): + """Sine of 2-3 mixing angle""" + return self._sin23 + + @sin23.setter + def sin23(self, value): + assert (abs(value) <= 1) + self._sin23 = value + + @property + def theta23(self): + return np.arcsin(self.sin23) + + @theta23.setter + def theta23(self, value): + self.sin23 = np.sin(value) + + # --- theta14 --- + @property + def sin14(self): + """Sine of 1-4 mixing angle""" + return self._sin14 + + @sin14.setter + def sin14(self, value): + assert (abs(value) <= 1) + self._sin14 = value + + @property + def theta14(self): + return np.arcsin(self.sin14) + + @theta14.setter + def theta14(self, value): + self.sin14 = np.sin(value) + + # --- deltaCP --- + @property + def deltacp(self): + """CPV phase""" + return self._deltacp + + @deltacp.setter + def deltacp(self, value): + assert value >= 0. and value <= 2*np.pi + self._deltacp = value + + @property + def mix_matrix(self): + """Neutrino mixing matrix in its 'standard' form""" + mix = np.zeros((3, 3, 2), dtype=FTYPE) + + sd = np.sin(self.deltacp) + cd = np.cos(self.deltacp) + + c12 = np.sqrt(1. - self.sin12**2) + c23 = np.sqrt(1. - self.sin23**2) + c13 = np.sqrt(1. - self.sin13**2) + + mix[0, 0, 0] = c12 * c13 + mix[0, 0, 1] = 0. + mix[0, 1, 0] = self.sin12 * c13 + mix[0, 1, 1] = 0. + mix[0, 2, 0] = self.sin13 * cd + mix[0, 2, 1] = - self.sin13 * sd + mix[1, 0, 0] = - self.sin12 * c23 - c12 * self.sin23 * self.sin13 * cd + mix[1, 0, 1] = - c12 * self.sin23 * self.sin13 * sd + mix[1, 1, 0] = c12 * c23 - self.sin12 * self.sin23 * self.sin13 * cd + mix[1, 1, 1] = - self.sin12 * self.sin23 * self.sin13 * sd + mix[1, 2, 0] = self.sin23 * c13 + mix[1, 2, 1] = 0. + mix[2, 0, 0] = self.sin12 * self.sin23 - c12 * c23 * self.sin13 * cd + mix[2, 0, 1] = - c12 * c23 * self.sin13 * sd + mix[2, 1, 0] = - c12 * self.sin23 - self.sin12 * c23 * self.sin13 * cd + mix[2, 1, 1] = - self.sin12 * c23 * self.sin13 * sd + mix[2, 2, 0] = c23 * c13 + mix[2, 2, 1] = 0. + + return mix + + @property + def mix_matrix_complex(self): + """Mixing matrix as complex 2-d array""" + mix = self.mix_matrix + return mix[:, :, 0] + mix[:, :, 1] * 1.j + + @property + def mix_matrix_reparam(self): + """ + Neutrino mixing matrix reparameterised in a way + such that the CPT trafo Hvac -> -Hvac* is exactly implemented by + the simultaneous transformations + * deltamsq31 -> -deltamsq32 + * theta12 -> pi/2 - theta12 + * deltacp -> pi - deltacp + + which hence leave vacuum propagation invariant. + + This representation follows from the standard form U + as diag(exp(i*deltacp), 0, 0) * U * diag(exp(-i*deltacp), 0, 0). + + """ + mix = np.zeros((3, 3, 2), dtype=FTYPE) + + sd = np.sin(self.deltacp) + cd = np.cos(self.deltacp) + + c12 = np.sqrt(1. - self.sin12**2) + c23 = np.sqrt(1. - self.sin23**2) + c13 = np.sqrt(1. - self.sin13**2) + + mix[0, 0, 0] = c12 * c13 + mix[0, 0, 1] = 0. + mix[0, 1, 0] = self.sin12 * c13 * cd + mix[0, 1, 1] = self.sin12 * c13 * sd + mix[0, 2, 0] = self.sin13 + mix[0, 2, 1] = 0. + mix[1, 0, 0] = - self.sin12 * c23 * cd - c12 * self.sin23 * self.sin13 + mix[1, 0, 1] = self.sin12 * c23 * sd + mix[1, 1, 0] = c12 * c23 - self.sin12 * self.sin23 * self.sin13 * cd + mix[1, 1, 1] = - self.sin12 * self.sin23 * self.sin13 * sd + mix[1, 2, 0] = self.sin23 * c13 + mix[1, 2, 1] = 0. + mix[2, 0, 0] = self.sin12 * self.sin23 * cd - c12 * c23 * self.sin13 + mix[2, 0, 1] = - self.sin12 * self.sin23 * sd + mix[2, 1, 0] = - c12 * self.sin23 - self.sin12 * c23 * self.sin13 * cd + mix[2, 1, 1] = - self.sin12 * c23 * self.sin13 * sd + mix[2, 2, 0] = c23 * c13 + mix[2, 2, 1] = 0. + + return mix + + @property + def mix_matrix_reparam_complex(self): + """Reparameterised mixing matrix as complex 2-d array""" + mix_reparam = self.mix_matrix_reparam + return mix_reparam[:, :, 0] + mix_reparam[:, :, 1] * 1.j + + @property + def dm_matrix(self): + """Neutrino mass splitting matrix in vacuum""" + dmVacVac = np.zeros((3, 3), dtype=FTYPE) + mVac = np.zeros(3, dtype=FTYPE) + delta = 5.e-9 + + mVac[0] = 0. + mVac[1] = self.dm21 + mVac[2] = self.dm31 + + # Break any degeneracies + if mVac[1] == 0.: + mVac[0] -= delta + if mVac[2] == 0.: + mVac[2] += delta + + dmVacVac[0, 0] = 0. + dmVacVac[1, 1] = 0. + dmVacVac[2, 2] = 0. + dmVacVac[0, 1] = mVac[0] - mVac[1] + dmVacVac[1, 0] = - dmVacVac[0, 1] + dmVacVac[0, 2] = mVac[0] - mVac[2] + dmVacVac[2, 0] = - dmVacVac[0, 2] + dmVacVac[1, 2] = mVac[1] - mVac[2] + dmVacVac[2, 1] = - dmVacVac[1, 2] + + return dmVacVac
+ + + +def test_osc_params(): + """ + # TODO: implement me! + """ + pass + + +if __name__=='__main__': + from pisa import TARGET + from pisa.utils.log import set_verbosity, logging + assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" + set_verbosity(1) + test_osc_params() + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/prob3.html b/_modules/pisa/stages/osc/prob3.html new file mode 100644 index 000000000..edbb94c0c --- /dev/null +++ b/_modules/pisa/stages/osc/prob3.html @@ -0,0 +1,614 @@ + + + + + + pisa.stages.osc.prob3 — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.prob3

+"""
+PISA pi stage for the calculation of earth layers and osc. probabilities
+
+Maybe it would amke sense to split this up into a separate earth layer stage
+and an osc. stage....todo
+
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, CTYPE, TARGET, ureg
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.stages.osc.nsi_params import StdNSIParams, VacuumLikeNSIParams
+from pisa.stages.osc.osc_params import OscParams
+from pisa.stages.osc.decay_params import DecayParams
+from pisa.stages.osc.lri_params import LRIParams
+from pisa.stages.osc.scaling_params import Mass_scaling, Core_scaling_w_constrain, Core_scaling_wo_constrain
+from pisa.stages.osc.layers import Layers
+from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import propagate_array, fill_probs
+from pisa.utils.numba_tools import WHERE
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class prob3(Stage): + """ + Prob3-like oscillation PISA Pi class + + Parameters + ---------- + params + Expected params .. :: + + detector_depth : float + earth_model : PREM file path + prop_height : quantity (dimensionless) + YeI : quantity (dimensionless) + YeO : quantity (dimensionless) + YeM : quantity (dimensionless) + density_scale : quantity (dimensionless) + core_density_scale : quantity (dimensionless) + innermantle_density_scale : quantity (dimensionless) + middlemantle_density_scale : quantity (dimensionless) + theta12 : quantity (angle) + theta13 : quantity (angle) + theta23 : quantity (angle) + deltam21 : quantity (mass^2) + deltam31 : quantity (mass^2) + deltacp : quantity (angle) + eps_scale : quantity(dimensionless) + eps_prime : quantity(dimensionless) + phi12 : quantity(angle) + phi13 : quantity(angle) + phi23 : quantity(angle) + alpha1 : quantity(angle) + alpha2 : quantity(angle) + deltansi : quantity(angle) + eps_ee : quantity (dimensionless) + eps_emu_magn : quantity (dimensionless) + eps_emu_phase : quantity (angle) + eps_etau_magn : quantity (dimensionless) + eps_etau_phase : quantity (angle) + eps_mumu : quantity(dimensionless) + eps_mutau_magn : quantity (dimensionless) + eps_mutau_phase : quantity (angle) + eps_tautau : quantity (dimensionless) + decay_alpha3 : quantity (energy^2) + v_lri : quantity (eV) + + + **kwargs + Other kwargs are handled by Stage + ----- + + """ + + def __init__( + self, + nsi_type=None, + reparam_mix_matrix=False, + neutrino_decay=False, + tomography_type=None, + lri_type=None, + **std_kwargs, + ): + + expected_params = ( + 'detector_depth', + 'earth_model', + 'prop_height', + 'YeI', + 'YeO', + 'YeM', + 'theta12', + 'theta13', + 'theta23', + 'deltam21', + 'deltam31', + 'deltacp' + ) + + + # Check whether and if so with which NSI parameters we are to work. + if nsi_type is not None: + choices = ['standard', 'vacuum-like'] + nsi_type = nsi_type.strip().lower() + if not nsi_type in choices: + raise ValueError( + 'Chosen NSI type "%s" not available! Choose one of %s.' + % (nsi_type, choices) + ) + self.nsi_type = nsi_type + """Type of NSI to assume.""" + self.tomography_type = tomography_type + self.reparam_mix_matrix = reparam_mix_matrix + """Use a PMNS mixing matrix parameterisation that differs from + the standard one by an overall phase matrix + diag(e^(i*delta_CP), 1, 1). This has no impact on + oscillation probabilities in the *absence* of NSI.""" + + self.neutrino_decay = neutrino_decay + + if neutrino_decay: + self.decay_flag = 1 + else : + self.decay_flag = -1 + + """Invoke neutrino decay with neutrino oscillation.""" + + + if self.nsi_type is None: + nsi_params = () + elif self.nsi_type == 'vacuum-like': + nsi_params = ('eps_scale', + 'eps_prime', + 'phi12', + 'phi13', + 'phi23', + 'alpha1', + 'alpha2', + 'deltansi' + ) + elif self.nsi_type == 'standard': + nsi_params = ('eps_ee', + 'eps_emu_magn', + 'eps_emu_phase', + 'eps_etau_magn', + 'eps_etau_phase', + 'eps_mumu', + 'eps_mutau_magn', + 'eps_mutau_phase', + 'eps_tautau' + ) + + if self.neutrino_decay : + decay_params = ('decay_alpha3',) + else: + decay_params = () + + if lri_type is not None: + choices = ['emu-symmetry', 'etau-symmetry', 'mutau-symmetry'] + lri_type = lri_type.strip().lower() + if not lri_type in choices: + raise ValueError( + 'Chosen LRI symmetry type "%s" not available! Choose one of %s.' + % (lri_type, choices) + ) + self.lri_type = lri_type + + if self.lri_type is None: + lri_params = () + else: + lri_params = ('v_lri',) + + + if self.tomography_type == None: + tomography_params = () + elif self.tomography_type == 'mass_of_earth': + tomography_params = ('density_scale',) + elif self.tomography_type == 'mass_of_core_w_constrain': + tomography_params = ('core_density_scale',) + elif self.tomography_type == 'mass_of_core_wo_constrain': + tomography_params = ('core_density_scale', + 'innermantle_density_scale', + 'middlemantle_density_scale' + ) + + + expected_params = expected_params + nsi_params + decay_params + lri_params + tomography_params + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + + self.layers = None + self.osc_params = None + self.nsi_params = None + self.tomography_params = None + self.decay_params = None + self.decay_matrix = None + self.lri_params = None + self.lri_pot = None + # Note that the interaction potential (Hamiltonian) just scales with the + # electron density N_e for propagation through the Earth, + # even(to very good approx.) in the presence of generalised interactions + # (NSI), which is why we can simply treat it as a constant here. + self.gen_mat_pot_matrix_complex = None + """Interaction Hamiltonian without the factor sqrt(2)*G_F*N_e.""" + self.YeI = None + self.YeO = None + self.YeM = None + +
+[docs] + def setup_function(self): + + # object for oscillation parameters + self.osc_params = OscParams() + if self.reparam_mix_matrix: + logging.debug( + 'Working with reparameterizated version of mixing matrix.' + ) + else: + logging.debug( + 'Working with standard parameterization of mixing matrix.' + ) + if self.nsi_type == 'vacuum-like': + logging.debug('Working in vacuum-like NSI parameterization.') + self.nsi_params = VacuumLikeNSIParams() + elif self.nsi_type == 'standard': + logging.debug('Working in standard NSI parameterization.') + self.nsi_params = StdNSIParams() + + + if self.neutrino_decay: + logging.debug('Working with neutrino decay') + self.decay_params = DecayParams() + + if self.lri_type is not None: + logging.debug('Working with LRI') + self.lri_params = LRIParams() + + + if self.tomography_type == "mass_of_earth": + logging.debug('Working with a single density scaling factor.') + self.tomography_params = Mass_scaling() + elif self.tomography_type == "mass_of_core_w_constrain": + logging.debug('Working with different scaling for different layers.') + self.tomography_params = Core_scaling_w_constrain() + elif self.tomography_type == "mass_of_core_wo_constrain": + logging.debug('Working without any external constraints') + self.tomography_params = Core_scaling_wo_constrain() + + + + + + # setup the layers + #if self.params.earth_model.value is not None: + earth_model = find_resource(self.params.earth_model.value) + self.YeI = self.params.YeI.value.m_as('dimensionless') + self.YeO = self.params.YeO.value.m_as('dimensionless') + self.YeM = self.params.YeM.value.m_as('dimensionless') + prop_height = self.params.prop_height.value.m_as('km') + detector_depth = self.params.detector_depth.value.m_as('km') + self.layers = Layers(earth_model, detector_depth, prop_height) + self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) + + + # --- calculate the layers --- + if self.is_map: + # speed up calculation by adding links + # as layers don't care about flavour + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc', + 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + for container in self.data: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) + + # don't forget to un-link everything again + self.data.unlink_containers() + + # --- setup empty arrays --- + if self.is_map: + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + for container in self.data: + container['probability'] = np.empty((container.size, 3, 3), dtype=FTYPE) + self.data.unlink_containers() + + # setup more empty arrays + for container in self.data: + container['prob_e'] = np.empty((container.size), dtype=FTYPE) + container['prob_mu'] = np.empty((container.size), dtype=FTYPE)
+ + +
+[docs] + def calc_probs(self, nubar, e_array, rho_array, len_array, out): + ''' wrapper to execute osc. calc ''' + if self.reparam_mix_matrix: + mix_matrix = self.osc_params.mix_matrix_reparam_complex + else: + mix_matrix = self.osc_params.mix_matrix_complex + + logging.debug('mat pot:\n%s' + % self.gen_mat_pot_matrix_complex) + logging.debug('decay mat:\n%s' + % self.decay_matix) + + propagate_array(self.osc_params.dm_matrix, # pylint: disable = unexpected-keyword-arg, no-value-for-parameter + mix_matrix, + self.gen_mat_pot_matrix_complex, + self.decay_flag, + self.decay_matix, + self.lri_pot, + nubar, + e_array, + rho_array, + len_array, + out=out + )
+ + +
+[docs] + def compute_function(self): + + if self.is_map: + # speed up calculation by adding links + self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', + 'nue_nc', 'numu_nc', 'nutau_nc']) + self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', + 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) + + # this can be done in a more clever way (don't have to recalculate all paths) + YeI = self.params.YeI.value.m_as('dimensionless') + YeO = self.params.YeO.value.m_as('dimensionless') + YeM = self.params.YeM.value.m_as('dimensionless') + + if YeI != self.YeI or YeO != self.YeO or YeM != self.YeM: + self.YeI = YeI; self.YeO = YeO; self.YeM = YeM + self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) + for container in self.data: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) + + + # some safety checks on units + # trying to avoid issue of angles with no dimension being assumed to be radians + # here we enforce the user must speficy a valid angle unit + for angle_param in [self.params.theta12, self.params.theta13, self.params.theta23, self.params.deltacp] : + assert angle_param.value.units != ureg.dimensionless, "Param %s is dimensionless, but should have angle units [rad, degree]" % angle_param.name + + # --- update mixing params --- + self.osc_params.theta12 = self.params.theta12.value.m_as('rad') + self.osc_params.theta13 = self.params.theta13.value.m_as('rad') + self.osc_params.theta23 = self.params.theta23.value.m_as('rad') + self.osc_params.dm21 = self.params.deltam21.value.m_as('eV**2') + self.osc_params.dm31 = self.params.deltam31.value.m_as('eV**2') + self.osc_params.deltacp = self.params.deltacp.value.m_as('rad') + if self.nsi_type == 'vacuum-like': + self.nsi_params.eps_scale = self.params.eps_scale.value.m_as('dimensionless') + self.nsi_params.eps_prime = self.params.eps_prime.value.m_as('dimensionless') + self.nsi_params.phi12 = self.params.phi12.value.m_as('rad') + self.nsi_params.phi13 = self.params.phi13.value.m_as('rad') + self.nsi_params.phi23 = self.params.phi23.value.m_as('rad') + self.nsi_params.alpha1 = self.params.alpha1.value.m_as('rad') + self.nsi_params.alpha2 = self.params.alpha2.value.m_as('rad') + self.nsi_params.deltansi = self.params.deltansi.value.m_as('rad') + elif self.nsi_type == 'standard': + self.nsi_params.eps_ee = self.params.eps_ee.value.m_as('dimensionless') + self.nsi_params.eps_emu = ( + (self.params.eps_emu_magn.value.m_as('dimensionless'), + self.params.eps_emu_phase.value.m_as('rad')) + ) + self.nsi_params.eps_etau = ( + (self.params.eps_etau_magn.value.m_as('dimensionless'), + self.params.eps_etau_phase.value.m_as('rad')) + ) + self.nsi_params.eps_mumu = self.params.eps_mumu.value.m_as('dimensionless') + self.nsi_params.eps_mutau = ( + (self.params.eps_mutau_magn.value.m_as('dimensionless'), + self.params.eps_mutau_phase.value.m_as('rad')) + ) + self.nsi_params.eps_tautau = self.params.eps_tautau.value.m_as('dimensionless') + if self.neutrino_decay: + self.decay_params.decay_alpha3 = self.params.decay_alpha3.value.m_as('eV**2') + + if self.lri_type is not None: + self.lri_params.v_lri = self.params.v_lri.value.m_as('eV') + if self.tomography_type is not None: + if self.tomography_type == "mass_of_earth": + self.tomography_params.density_scale = self.params.density_scale.value.m_as('dimensionless') + self.layers.scaling(scaling_array=self.tomography_params.density_scale) + elif self.tomography_type == "mass_of_core_w_constrain": + self.tomography_params.core_density_scale = self.params.core_density_scale.value.m_as('dimensionless') + self.layers.scaling(scaling_array=self.tomography_params.scaling_array) + elif self.tomography_type == "mass_of_core_wo_constrain": + self.tomography_params.core_density_scale = self.params.core_density_scale.value.m_as('dimensionless') + self.tomography_params.innermantle_density_scale = self.params.innermantle_density_scale.value.m_as('dimensionless') + self.tomography_params.middlemantle_density_scale = self.params.middlemantle_density_scale.value.m_as('dimensionless') + self.layers.scaling(scaling_array=self.tomography_params.scaling_factor_array) + self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) + for container in self.data: + self.layers.calcLayers(container['true_coszen']) + container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) + + + # now we can proceed to calculate the generalised matter potential matrix + std_mat_pot_matrix = np.zeros((3, 3), dtype=FTYPE) + 1.j * np.zeros((3, 3), dtype=FTYPE) + std_mat_pot_matrix[0, 0] += 1.0 + + # add effective nsi coupling matrix + if self.nsi_type is not None: + logging.debug('NSI matrix:\n%s' % self.nsi_params.eps_matrix) + self.gen_mat_pot_matrix_complex = ( + std_mat_pot_matrix + self.nsi_params.eps_matrix + ) + logging.debug('Using generalised matter potential:\n%s' + % self.gen_mat_pot_matrix_complex) + else: + self.gen_mat_pot_matrix_complex = std_mat_pot_matrix + logging.debug('Using standard matter potential:\n%s' + % self.gen_mat_pot_matrix_complex) + + if self.neutrino_decay: + self.decay_matix = self.decay_params.decay_matrix + logging.debug('Decay matrix:\n%s' % self.decay_params.decay_matrix) + else : + self.decay_matix = np.zeros((3, 3), dtype=FTYPE) + 1.j * np.zeros((3, 3), dtype=FTYPE) + + self.lri_pot = np.zeros((3, 3), dtype=FTYPE) + types_lri = ['emu-symmetry', 'etau-symmetry', 'etau-symmetry'] + if self.lri_type is not None: + if self.lri_type == 'emu-symmetry': + self.lri_pot = self.lri_params.potential_matrix_emu + elif self.lri_type == 'etau-symmetry': + self.lri_pot = self.lri_params.potential_matrix_etau + elif self.lri_type == 'mutau-symmetry': + self.lri_pot = self.lri_params.potential_matrix_mutau + else: + raise Exception("Implemented symmetries are" % types_lri) + + + for container in self.data: + self.calc_probs(container['nubar'], + container['true_energy'], + container['densities'], + container['distances'], + out=container['probability'], + ) + container.mark_changed('probability') + + # the following is flavour specific, hence unlink + self.data.unlink_containers() + + for container in self.data: + # initial electrons (0) + fill_probs(container['probability'], + 0, + container['flav'], + out=container['prob_e'], + ) + # initial muons (1) + fill_probs(container['probability'], + 1, + container['flav'], + out=container['prob_mu'], + ) + + container.mark_changed('prob_e') + container.mark_changed('prob_mu')
+ + + +
+[docs] + def apply_function(self): + + # maybe speed up like this? + #self.data.representation = self.calc_mode + #for container in self.data: + # container['oscillated_flux'] = (container['nu_flux'][:,0] * container['prob_e']) + (container['nu_flux'][:,1] * container['prob_mu']) + + #self.data.representation = self.apply_mode + + # update the outputted weights + for container in self.data: + container['weights'] *= (container['nu_flux'][:,0] * container['prob_e']) + (container['nu_flux'][:,1] * container['prob_mu'])
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/prob3numba/numba_osc_tests.html b/_modules/pisa/stages/osc/prob3numba/numba_osc_tests.html new file mode 100644 index 000000000..8d058676c --- /dev/null +++ b/_modules/pisa/stages/osc/prob3numba/numba_osc_tests.html @@ -0,0 +1,971 @@ + + + + + + pisa.stages.osc.prob3numba.numba_osc_tests — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.osc.prob3numba.numba_osc_tests

+#!/usr/bin/env python
+# pylint: disable = invalid-name
+
+
+"""
+Tests for prob3numba code
+"""
+
+
+from __future__ import absolute_import, print_function, division
+
+
+__all__ = [
+    "TEST_DATA_DIR",
+    "FINFO_FTYPE",
+    "AC_KW",
+    "PRINTOPTS",
+    "A2S_KW",
+    "MAT_DOT_MAT_SUBSCR",
+    "DEFAULTS",
+    "TEST_CASES",
+    "auto_populate_test_case",
+    "test_prob3numba",
+    "run_test_case",
+    "stability_test",
+    "execute_func",
+    "compare_numeric",
+    "check",
+    "ary2str",
+    "main",
+]
+
+
+from argparse import ArgumentParser
+from collections import OrderedDict
+from collections.abc import Mapping
+from copy import deepcopy
+from inspect import getmodule, signature
+from os.path import join
+
+import numpy as np
+import os
+# os.environ['PISA_FTYPE'] = 'single' # for checking unit test on single precision
+from pisa import FTYPE
+from pisa.utils.comparisons import ALLCLOSE_KW
+from pisa.utils.fileio import expand, from_file, to_file
+from pisa.utils.log import Levels, logging, set_verbosity
+from pisa.utils.numba_tools import WHERE
+from pisa.utils.resources import find_resource
+from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import (
+    CX,
+    FX,
+    IX,
+    # propagate_scalar_vacuum,
+    propagate_scalar,
+    propagate_array,
+    get_transition_matrix_hostfunc,
+    get_transition_matrix_massbasis_hostfunc,
+    get_H_vac_hostfunc,
+    get_H_decay_hostfunc,
+    get_H_mat_hostfunc,
+    get_dms_hostfunc,
+    get_dms_numerical_hostfunc,
+    get_product_hostfunc,
+    convert_from_mass_eigenstate_hostfunc,
+)
+from pisa.stages.osc.nsi_params import (
+    StdNSIParams,
+    VacuumLikeNSIParams,
+)
+
+from pisa.stages.osc.lri_params import LRIParams
+from pisa.stages.osc.scaling_params import (
+    Mass_scaling,
+    Core_scaling_w_constrain,
+    Core_scaling_wo_constrain,
+)
+
+TEST_DATA_DIR = find_resource("osc/numba_osc_tests_data")
+
+FINFO_FTYPE = np.finfo(FTYPE)
+
+AC_KW = dict(atol=FINFO_FTYPE.resolution * 10, rtol=ALLCLOSE_KW["rtol"] * 100)
+
+PRINTOPTS = dict(
+    precision=FINFO_FTYPE.precision + 2, floatmode="fixed", sign=" ", linewidth=200
+)
+
+A2S_KW = dict(precision=PRINTOPTS["precision"], separator=", ")
+
+MAT_DOT_MAT_SUBSCR = "in,nj->ij"
+"""matrix dot matrix subscripts for use by `numpy.einsum`"""
+
+# ---------------------------------------------------------------------------- #
+# Define relevant values for testing purposes (from nufit3.2, from intermediate
+# calculations performed here, or arbitary values).
+#
+# NOTE: !!DO NOT CHANGE!! (unless a function is incorrect) tests rely on these
+# ---------------------------------------------------------------------------- #
+
+#lri param
+lri_params = LRIParams()
+lri_params.v_lri = 1e-14
+lri_std_mat_pot = lri_params.potential_matrix_emu
+# print(lri_std_mat_pot)
+
+DEFAULTS = dict(
+    energy=1,  # GeV
+    state=1,
+    nubar=1,
+    rho=1,  # moles of electrons / cm^3
+    baseline=1,  # km
+    mat_pot=np.diag([1, 0, 0]).astype(np.complex128),
+    layer_distances=np.logspace(0, 2, 10),  # km
+    layer_densities=np.linspace(0.5, 3, 10),  # g/cm^3
+    # osc params: defaults are nufit 3.2 normal ordering values
+    t12=np.deg2rad(33.62),
+    t23=np.deg2rad(47.2),
+    t13=np.deg2rad(8.54),
+    dcp=np.deg2rad(234),
+    dm21=7.40e-5,
+    dm31=2.494e-3,
+    decay_flag=-1,
+    mat_decay=np.diag([0, 0, -1.0e-4j ]).astype(np.complex128),
+    lri_pot=lri_std_mat_pot,
+)
+
+# define non-0 NSI parameters for non-vacuum NSI
+# roughly based on best fit params from Thomas Ehrhardts 3y DRAGON analysis
+nsi_params = StdNSIParams()
+nsi_params.eps_emu_magn = 0.07
+nsi_params.eps_emu_phase = np.deg2rad(340)
+nsi_params.eps_etau_magn = 0.06
+nsi_params.eps_etau_phase = np.deg2rad(35)
+nsi_params.eps_mutau_magn = 0.003
+nsi_params.eps_mutau_phase = np.deg2rad(175)
+mat_pot_std_nsi_no = np.diag([1, 0, 0]).astype(np.complex128) + nsi_params.eps_matrix
+
+# Vacuum-like NSI parameters
+nsi_params = VacuumLikeNSIParams()
+nsi_params.eps_prime = 0.1
+mat_pot_vac_nsi_no = np.diag([1, 0, 0]).astype(np.complex128) + nsi_params.eps_matrix
+
+#mass of earth
+tomography_params= Mass_scaling()
+tomography_params.density_scale =1.2
+scale = tomography_params.density_scale
+
+#mass of core with constraint
+tomography_params= Core_scaling_w_constrain()
+tomography_params.core_density_scale = 0.9
+scale_array_w_constrain = tomography_params.scaling_array
+
+#mass of core without constraint
+tomography_params= Core_scaling_wo_constrain()
+tomography_params.core_density_scale = 0.8
+tomography_params.middlemantle_density_scale= 0.8
+tomography_params.innermantle_density_scale= 0.8
+scale_array_wo_constrain = tomography_params.scaling_factor_array
+
+TEST_CASES = dict(
+    nufit32_no=dict(),  # nufit 3.2 normal ordering (also overall) best-fit
+    nufit32_no_nubar=dict(nubar=-1),  # NO but anti-neutrinos
+    nufit32_no_E1TeV=dict(energy=1e3),  # NO but e=1 TeV
+    nufit32_no_blearth=dict(
+        baseline=6371e3 * 2,
+        layer_distances=(
+            6371e3
+            * 2
+            * DEFAULTS["layer_distances"]
+            / np.sum(DEFAULTS["layer_distances"])
+        ),
+    ),
+    nufit32_io=dict(  # nufit 3.2 best-fit params for inverted ordering
+        t12=np.deg2rad(33.62),
+        t23=np.deg2rad(48.1),
+        t13=np.deg2rad(8.58),
+        dcp=np.deg2rad(278),
+        dm21=7.40e-5,
+        dm31=-2.465e-3,
+    ),
+    nufit32_std_nsi_no=dict(  # nufit 3.2 normal ordering with non-0 standard NSI parameters
+        mat_pot=mat_pot_std_nsi_no,
+    ),
+    nufit32_vac_nsi_no=dict(  # nufit 3.2 normal ordering with non-0 vacuum NSI parameters
+        mat_pot=mat_pot_vac_nsi_no,
+    ),
+    nufit32_std_decay_no=dict( # nufit 3.2 normal ordering with no neutrino decay
+        decay_flag=-1,
+        mat_decay=DEFAULTS["mat_decay"],
+    ),
+    nufit32_std_decay=dict( # nufit 3.2 normal ordering with neutrino decay
+        decay_flag=1,
+        mat_decay=DEFAULTS["mat_decay"],
+    ),
+    nufit32_lri_std_mat=dict( #nufit 3.2 lri potential with std matter potential
+        lri_pot = lri_std_mat_pot
+    ),
+    nufit32_mass_of_earth_no=dict(
+        layer_densities=scale*DEFAULTS['layer_densities'],
+    ),
+    nufit32_mass_of_core_w_constrain_no=dict(
+        layer_distances=np.array([1221.50, 2258.50, 2221.0, 450.0, 220.0, 0.0])[::-1],
+        layer_densities=scale_array_w_constrain*np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5])[::-1],
+    ),
+    nufit32_mass_of_core_wo_constrain_no=dict(
+        layer_distances=np.array([1221.50, 2258.50, 2221.0, 450.0, 220.0, 0.0])[::-1],
+        layer_densities=scale_array_wo_constrain*np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5])[::-1],
+    ),
+)
+
+
+
+[docs] +def auto_populate_test_case(tc, defaults): + """Populate defaults and construct dm / PMNS matrices if they aren't + present in a test case. + + Parameters + ---------- + test_case : mutable mapping + + defaults : mapping + + """ + for key, val in defaults.items(): + if key not in tc: + tc[key] = val + + # Construct dm and PMNS matrices derived from test case values, if + # these were not already specified + + if "dm" not in tc: # construct Delta m^2 matrix if not present + if "dm32" not in tc: # NO case; Delta m^2_32/eV^2 + tc["dm32"] = tc["dm31"] - tc["dm21"] + + if "dm31" not in tc: # IO case; Delta m^2_32/eV^2 + tc["dm31"] = tc["dm32"] + tc["dm21"] + + tc["dm"] = np.array( + [ + [0, -tc["dm21"], -tc["dm31"]], + [tc["dm21"], 0, -tc["dm32"]], + [tc["dm31"], tc["dm32"], 0], + ] + ) + + if "pmns" not in tc: # construct PMNS matrix if not present + c12, s12 = np.cos(tc["t12"]), np.sin(tc["t12"]) + c23, s23 = np.cos(tc["t23"]), np.sin(tc["t23"]) + c13, s13 = np.cos(tc["t13"]), np.sin(tc["t13"]) + + tc["pmns"] = ( + np.array([[1, 0, 0], [0, c23, s23], [0, -s23, c23]]) +
+[docs] + @ np.array( + [ + [c13, 0, s13 * np.exp(-1j * tc["dcp"])], + [0, 1, 0], + [-s13 * np.exp(1j * tc["dcp"]), 0, c13], + ] + ) + @ np.array([[c12, s12, 0], [-s12, c12, 0], [0, 0, 1]]) + )
+ + + +def test_prob3numba(ignore_fails=False, define_as_ref=False): + """Run all unit test cases for prob3numba code""" + + # Pull first test case to test calling `propagate_array` + tc_name, tc = next(iter(TEST_CASES.items())) + tc_ = deepcopy(tc) + logging.info( + "Testing call and return shape of `propagate_array` with test case '%s'", + tc_name, + ) + + # Test simple broadcasting over `nubars` and `energies` where both have + # same shape, as this is the "typical" use case + input_shape = (4, 5) + + # Without broadcasting, a single probability matrix is 3x3 + prob_array_shape = (3, 3) + + # Broadcasted shape + out_shape = input_shape + prob_array_shape + + nubars = np.full(shape=input_shape, fill_value=tc_["nubar"], dtype=IX) + energies = np.full(shape=input_shape, fill_value=tc_["energy"], dtype=FX) + + # Fill with NaN to ensure all elements are assinged a value + probabilities = np.full(shape=out_shape, fill_value=np.nan, dtype=FX) + + propagate_array( + tc_["dm"].astype(FX), + tc_["pmns"].astype(CX), + tc_["mat_pot"].astype(CX), + tc_["decay_flag"], + tc_["mat_decay"].astype(CX), + tc_["lri_pot"].astype(FX), + nubars, + energies, + tc_["layer_densities"].astype(FX), + tc_["layer_distances"].astype(FX), + # output: + probabilities, + ) + + # Check that all probability matrices have no NaNs and are equal to one + # another + ref_probs = probabilities[0, 0] + for i in range(input_shape[0]): + for j in range(input_shape[1]): + probs = probabilities[i, j] + assert np.all(np.isfinite(probs)) + assert np.all(probs == ref_probs) + + # Run all test cases + for tc_name, tc in TEST_CASES.items(): + run_test_case( + tc_name, tc, ignore_fails=ignore_fails, define_as_ref=define_as_ref + )
+ + + +
+[docs] +def run_test_case(tc_name, tc, ignore_fails=False, define_as_ref=False): + """Run one test case""" + logging.info("== TEST CASE : %s ==", tc_name) + + st_test_kw = dict(ignore_fails=ignore_fails, define_as_ref=define_as_ref) + tf_sfx = f"__{tc_name}__{FX}.pkl" + + # Copy contents of test case, so if a function modifies these + # (accidentally), it doesn't affect the outcome of further tests + tc_ = deepcopy(tc) + test, ref = stability_test( + func=convert_from_mass_eigenstate_hostfunc, + func_kw=dict( + state=tc_["state"], + mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, + # output: + psi=np.ones(shape=3, dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"convert_from_mass_eigenstate_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\npsi = %s", ary2str(test["psi"])) + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=get_H_vac_hostfunc, + func_kw=dict( + mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, + mix_nubar_conj_transp=( + tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] + ), + dm_vac_vac=tc_["dm"], + # output: + H_vac=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_H_vac_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\nH_vac = %s", ary2str(test["H_vac"])) + # keep for use by `get_transition_matrix_hostfunc` + H_vac_ref = ref["H_vac"] + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=get_H_decay_hostfunc, + func_kw=dict( + mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, + mix_nubar_conj_transp=( + tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] + ), + mat_decay=tc_["mat_decay"], + #output; + H_decay=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_H_decay_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\nH_decay = %s", ary2str(test["H_decay"])) + # keep for use by `get_transition_matrix_hostfunc` + H_decay_ref = ref["H_decay"] + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=get_H_mat_hostfunc, + func_kw=dict( + rho=tc_["rho"], + mat_pot=tc_["mat_pot"], + nubar=tc_["nubar"], + # output: + H_mat=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_H_mat_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\nH_mat = %s", ary2str(test["H_mat"])) + # keep for use by `get_dms_hostfunc`, + # `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc`` + H_mat_ref = ref["H_mat"] + + # tc_ = deepcopy(tc) + # test, ref = stability_test( + # func=propagate_scalar_vacuum, + # func_kw=dict( + # dm=tc_["dm"], + # mix=tc_["pmns"], + # nubar=tc_["nubar"], + # energy=tc_["energy"], + # distances=tc_["layer_distances"], + # # output: + # probability=np.ones(shape=(3, 3), dtype=FX), + # ), + # ref_path=join(TEST_DATA_DIR, f"propagate_scalar_vacuum{tf_sfx}"), + # **st_test_kw, + # ) + # logging.debug("\nvac_prob = %s", ary2str(test["probability"])) + # # check unitarity + # # TODO: << BUG? >> these fail even in double precision! + # check( + # test=np.sum(test["probability"], axis=0), + # ref=np.ones(3), + # label=( + # f"{tc_name} :: propagate_scalar_vacuum :: sum(vacuum probability, axis=0)" + # ), + # ignore_fails=True, + # ) + # check( + # test=np.sum(test["probability"], axis=1), + # ref=np.ones(3), + # label=( + # f"{tc_name} :: propagate_scalar_vacuum :: sum(vacuum probability, axis=1)" + # ), + # ignore_fails=True, + # ) + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=propagate_scalar, + func_kw=dict( + dm=tc_["dm"], + mix=tc_["pmns"], + mat_pot=tc_["mat_pot"], + decay_flag=tc_["decay_flag"], + mat_decay=tc_["mat_decay"], + lri_pot=tc_["lri_pot"], + nubar=tc_["nubar"], + energy=tc_["energy"], + densities=tc_["layer_densities"], + distances=tc_["layer_distances"], + # output: + probability=np.ones(shape=(3, 3), dtype=FX), + ), + ref_path=join(TEST_DATA_DIR, f"propagate_scalar{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\nmat_prob = %s", ary2str(test["probability"])) + + if (tc_["decay_flag"] != 1): + # check unitarity + check( + test=np.sum(test["probability"], axis=0), + ref=np.ones(3), + label=f"{tc_name} :: propagate_scalar:: sum(matter probability, axis=0)", + ignore_fails=ignore_fails, + ) + check( + test=np.sum(test["probability"], axis=1), + ref=np.ones(3), + label=f"{tc_name} :: propagate_scalar :: sum(matter probability, axis=1)", + ignore_fails=ignore_fails, + ) + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=get_transition_matrix_hostfunc, + func_kw=dict( + nubar=tc_["nubar"], + energy=tc_["energy"], + rho=tc_["rho"], + baseline=tc_["baseline"], + mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, + mix_nubar_conj_transp=( + tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] + ), + mat_pot=tc_["mat_pot"], + H_vac=H_vac_ref, + decay_flag=tc_["decay_flag"], + H_decay=H_decay_ref, + lri_pot=tc_["lri_pot"], + dm=tc_["dm"], + # output: + transition_matrix=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_transition_matrix_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\ntransition_matrix = %s", ary2str(test["transition_matrix"])) + # check unitarity + check( + test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=0), + ref=np.ones(3), + label=( + f"{tc_name}" + " :: get_transition_matrix_hostfunc" + ":: sum(|transition_matrix|^2, axis=0)" + ), + ignore_fails=ignore_fails, + ) + check( + test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=1), + ref=np.ones(3), + label=( + f"{tc_name}" + " :: get_transition_matrix_hostfunc" + " :: sum(|transition_matrix|^2, axis=1)" + ), + ignore_fails=ignore_fails, + ) + + tc_ = deepcopy(tc) + + # Compute H_full as used in `numba_osc_kernels` to call `get_dms` for SI case + # and det_dms_numnerical for decay case from `get_transition_matrix` + + if (tc_["decay_flag"] == 1): + + H_full_ref = (H_vac_ref + H_decay_ref)/ (2 * tc_["energy"]) + H_mat_ref + + test, ref = stability_test( + func=get_dms_numerical_hostfunc, + func_kw=dict( + energy=tc_["energy"], + H_full=H_full_ref, + # outputs: + dm_mat_mat=np.ones(shape=(3, 3), dtype=CX), + dm_mat=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_dms_numerical_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\ndm_mat_mat = %s", ary2str(test["dm_mat_mat"])) + logging.debug("\ndm_mat = %s", ary2str(test["dm_mat"])) + # keep for use by `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc` + dm_mat_mat_ref = ref["dm_mat_mat"] + dm_mat_ref = ref["dm_mat"] + + else: + H_full_ref = H_vac_ref / (2 * tc_["energy"]) + H_mat_ref + + test, ref = stability_test( + func=get_dms_hostfunc, + func_kw=dict( + energy=tc_["energy"], + H_full=H_full_ref, + dm_vac_vac=tc_["dm"], + # outputs: + dm_mat_mat=np.ones(shape=(3, 3), dtype=CX), + dm_mat=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"get_dms_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\ndm_mat_mat = %s", ary2str(test["dm_mat_mat"])) + logging.debug("\ndm_mat = %s", ary2str(test["dm_mat"])) + # keep for use by `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc` + dm_mat_mat_ref = ref["dm_mat_mat"] + dm_mat_ref = ref["dm_mat"] + + + tc_ = deepcopy(tc) + + # Compute same intermediate result `H_full_mass_eigenstate_basis` as in + # `numba_osc_kernels.get_transition_matrix` which calls + # `get_transition_matrix_massbasis` + mix_nubar = tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T + mix_nubar_conj_transp = tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] + tmp = np.einsum(MAT_DOT_MAT_SUBSCR, H_full_ref, mix_nubar) + H_full_mass_eigenstate_basis = np.einsum( + MAT_DOT_MAT_SUBSCR, mix_nubar_conj_transp, tmp + ) + + test, ref = stability_test( + func=get_transition_matrix_massbasis_hostfunc, + func_kw=dict( + baseline=tc_["baseline"], + energy=tc_["energy"], + dm_mat=dm_mat_ref, + dm_mat_mat=dm_mat_mat_ref, + H_full_mass_eigenstate_basis=H_full_mass_eigenstate_basis, + # output: + transition_matrix=np.ones(shape=(3, 3), dtype=CX), + ), + ref_path=join( + TEST_DATA_DIR, f"get_transition_matrix_massbasis_hostfunc{tf_sfx}" + ), + **st_test_kw, + ) + logging.debug("\ntransition_matrix_mb = %s", ary2str(test["transition_matrix"])) + check( + test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=0), + ref=np.ones(3), + label=( + f"{tc_name}" + " :: get_transition_matrix_massbasis_hostfunc" + " :: sum(|transition_matrix (mass basis)|^2), axis=0)" + ), + ignore_fails=ignore_fails, + ) + check( + test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=1), + ref=np.ones(3), + label=( + f"{tc_name}" + " :: get_transition_matrix_massbasis_hostfunc" + " :: sum(|transition_matrix (mass basis)|^2), axis=1)" + ), + ignore_fails=ignore_fails, + ) + + tc_ = deepcopy(tc) + test, ref = stability_test( + func=get_product_hostfunc, + func_kw=dict( + energy=tc_["energy"], + dm_mat=dm_mat_ref, + dm_mat_mat=dm_mat_mat_ref, + H_full_mass_eigenstate_basis=H_full_ref, + # output: + product=np.ones(shape=(3, 3, 3), dtype=CX), + ), + ref_path=join(TEST_DATA_DIR, f"product_hostfunc{tf_sfx}"), + **st_test_kw, + ) + logging.debug("\nproduct = %s", ary2str(test["product"]))
+ + + +
+[docs] +def stability_test(func, func_kw, ref_path, ignore_fails=False, define_as_ref=False): + """basic stability test of a Numba CPUDispatcher function (i.e., function + compiled via @jit / @njit)""" + func_name = func.py_func.__name__ + logging.info("stability testing `%s`", func_name) + ref_path = expand(ref_path) + + test = execute_func(func=func, func_kw=func_kw) + + if define_as_ref: + to_file(test, ref_path) + + # Even when we define the test case as ref, round-trip to/from file to + # ensure that doesn't corrupt the values + ref = from_file(ref_path) + + check(test=test, ref=ref, label=func_name, ignore_fails=ignore_fails) + + return test, ref
+ + + +
+[docs] +def execute_func(func, func_kw): + """Run `func` with *func_kw.values() where `outputs` specify names in + `func_kw` taken to be outputs of the function; for these, mark changed. + Retrieve both input and output values as Numpy arrays on the host and + aggregate together in a single dict before returning. + + Parameters + ---------- + func : numba CPUDispatcher or CUDADispatcher + func_kw : OrderedDict + + Returns + ------- + ret_dict : OrderedDict + Keys are arg names and vals are type-"correct" values; all arrays are + converted to host Numpy arrays + + """ + py_func = func.py_func + func_name = ".".join([getmodule(py_func).__name__, py_func.__name__]) + arg_names = list(signature(py_func).parameters.keys()) + if hasattr(func, "signatures"): + arg_types = func.signatures[0] + else: + arg_types = func.compiled.argument_types + + missing = set(arg_names).difference(func_kw.keys()) + excess = set(func_kw.keys()).difference(arg_names) + if missing or excess: + msgs = [] + if missing: + msgs.append(f"missing kwargs {missing}") + if excess: + msgs.append(f"excess kwargs {excess}") + raise KeyError(f"{func_name}:" + ", ".join(msgs)) + + typed_args = OrderedDict() + for arg_name, arg_type in zip(arg_names, arg_types): + val = func_kw[arg_name] + if arg_type.name.startswith("array"): + arg_val = val.astype(arg_type.dtype.key) + else: + arg_val = arg_type(val) + typed_args[arg_name] = arg_val + + # Call the host function with typed args + + try: + func(*list(typed_args.values())) + except Exception: + logging.error("Failed running `%s` with args %s", func_name, str(typed_args)) + raise + + # All arrays converted to Numpy host arrays + + ret_dict = OrderedDict() + for key, val in typed_args.items(): + ret_dict[key] = val + + return ret_dict
+ + + +
+[docs] +def compare_numeric(test, ref, label=None, ac_kw=deepcopy(AC_KW), ignore_fails=False): + """Compare scalars or numpy ndarrays. + + Parameters + ---------- + test : scalar or numpy.ndarray + ref : scalar or numpy.ndarray + label : str or None, optional + ac_kw : mapping, optional + Keyword args to pass via **ac_kw to `numpy.isclose` / `numpy.allclose` + ignore_fails : bool, optional + + Returns + ------- + rslt : bool + + """ + pfx = f"{label} :: " if label else "" + with np.printoptions(**PRINTOPTS): + if np.isscalar(test): + if np.isclose(test, ref, **ac_kw): + return True + + msg = f"{pfx}test: {test} != ref: {ref}" + if ignore_fails: + logging.warning(msg) + else: + logging.error(msg) + return False + + # Arrays + if np.allclose(test, ref, **ac_kw): + return True + + diff = test - ref + msg = f"{pfx}test:" f"\n{(test)}\n!= ref:\n{(ref)}" f"\ndiff:\n{(diff)}" + + if not np.all(ref == 1): + nzmask = ref != 0 + zmask = ref == 0 + fdiff = np.empty_like(ref) + fdiff[nzmask] = diff[nzmask] / ref[nzmask] + fdiff[zmask] = np.nan + msg += f"\nfractdiff:\n{(fdiff)}" + + if ignore_fails: + logging.warning(msg) + else: + logging.error(msg) + + return False
+ + + +
+[docs] +def check(test, ref, label=None, ac_kw=deepcopy(AC_KW), ignore_fails=False): + """Check that `test` matches `ref` (closely enough). + + Parameters + ---------- + test + ref + ac_kw : mapping, optional + Kwargs to `np.allclose`, as used by + `pisa.utils.comparisons.recursiveEquality` + ignore_fails : bool, optional + If True and comparison fails, do not raise AssertionError + + Raises + ------ + AssertionError + If `test` is not close enough to `ref` and ignore_fails is False + + """ + same = True + with np.printoptions(**PRINTOPTS): + if isinstance(test, Mapping): + if not label: + label = "" + else: + label = label + ": " + + for key, val in test.items(): + same &= compare_numeric( + test=val, + ref=ref[key], + label=label + f"key: '{key}'", + ac_kw=ac_kw, + ignore_fails=ignore_fails, + ) + else: + same &= compare_numeric( + test=test, ref=ref, label=label, ac_kw=ac_kw, ignore_fails=ignore_fails + ) + if not ignore_fails and not same: + assert False + return same
+ + + +
+[docs] +def ary2str(array): + """Convert a numpy ndarray to string easy to copy back into code""" + return "np.array(" + np.array2string(array, **A2S_KW) + ")"
+ + + +# Augment test cases with defaults / contruct arrays where necessary +for TC in TEST_CASES.values(): + auto_populate_test_case(tc=TC, defaults=DEFAULTS) + + +
+[docs] +def main(description=__doc__): + """Script interface for `test_prob3numba` function""" + parser = ArgumentParser(description=description) + parser.add_argument("--ignore-fails", action="store_true") + parser.add_argument("--define-as-ref", action="store_true") + parser.add_argument("-v", action="count", default=Levels.WARN) + kwargs = vars(parser.parse_args()) + set_verbosity(kwargs.pop("v")) + test_prob3numba(**kwargs)
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/prob3numba/test_numba.html b/_modules/pisa/stages/osc/prob3numba/test_numba.html new file mode 100644 index 000000000..68bf7ee32 --- /dev/null +++ b/_modules/pisa/stages/osc/prob3numba/test_numba.html @@ -0,0 +1,178 @@ + + + + + + pisa.stages.osc.prob3numba.test_numba — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.osc.prob3numba.test_numba

+"""
+Test functions used during developpement of the osc. code
+Please ignore unless you are the author
+"""
+from __future__ import print_function
+
+import time
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import TARGET
+from pisa.utils.numba_tools import (
+    WHERE,
+    cuda,
+    myjit,
+    ftype,
+    ctype,
+    matrix_dot_matrix,
+    matrix_dot_vector,
+)
+
+
+@myjit
+def sum_row_kernel(mix, bla, inp, out):
+    C = cuda.local.array(shape=(3, 3), dtype=ftype)
+    D = cuda.local.array(shape=(3), dtype=ctype)
+    E = cuda.local.array(shape=(3), dtype=ctype)
+    matrix_dot_matrix(mix, mix, C)
+    D[0] = 0.0 + 2.0j
+    D[1] = 1.0 + 2.0j
+    D[2] = 1.0 + 2.0j
+    matrix_dot_vector(C, D, E)
+    bla *= 0.1
+    out[0] += E[1].real * bla.real + inp[0]
+
+
+@guvectorize(
+    ["void(float64[:,:], complex128, int32[:], int32[:])"],
+    "(a,b),(),(f)->()",
+    target=TARGET,
+)
+def sum_row(mix, bla, inp, out):
+    sum_row_kernel(mix, bla, inp, out)
+
+
+
+[docs] +def main(): + print("ftype=", ftype) + + # hist arrays + mix = np.ones((3, 3), dtype=np.float64) + n = 1000000 + inp = np.arange(3 * n, dtype=np.int32).reshape(n, 3) + out = np.ones((n), dtype=np.int32) + + start_t = time.time() + sum_row(mix, 42.0 + 2j, inp, out=out) + end_t = time.time() + print("took %.5f" % (end_t - start_t)) + start_t = time.time() + sum_row(mix, 42.0 + 2j, inp, out=out) + end_t = time.time() + print("took %.5f" % (end_t - start_t)) + out + + print(out)
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/scaling_params.html b/_modules/pisa/stages/osc/scaling_params.html new file mode 100644 index 000000000..d8a1b7535 --- /dev/null +++ b/_modules/pisa/stages/osc/scaling_params.html @@ -0,0 +1,309 @@ + + + + + + pisa.stages.osc.scaling_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.osc.scaling_params

+"""
+Author : Sharmistha Chattopadhyay
+Date : August 10, 2023
+"""
+
+from __future__ import absolute_import,division
+
+import numpy as np
+import os
+from pisa import FTYPE
+import numba
+
+if numba is None:
+    class jit(object):
+        """Decorator class to mimic Numba's `jit` when Numba is missing"""
+        def __init__(self, *args, **kwargs):
+            pass
+        def __call__(self, *args):
+            return args[0]
+else:
+    jit = numba.jit
+    ftype = numba.typeof(FTYPE(1))
+
+
+__all__ = ['Mass_scaling','Core_scaling_w_constrain','Core_scaling_wo_constrain']
+
+
+[docs] +class Mass_scaling(): + """ + Uses a single scaling factor for all the layers. Scaling factor can be only positive. + """ + def __init__(self): + self._density_scale = 0. + + @property + def density_scale(self): + + return self._density_scale + + @density_scale.setter + def density_scale(self, value): + self._density_scale = value
+ + + +
+[docs] +class Core_scaling_w_constrain(object): + """ + Returns scaling factors for inner mantle and middle mantle by taking scaling factor of inner core and outer core as input. + Scaling factor of inner and outer core = core_density_scale (alpha) + Scaling factor of inner mantle = beta + Scaling factor of middle mantle = gamma + Outer mantle not scaled + This function solves the equations for two constraints: mass of earth and moment of inertia, by taking core_density_scale as an independent + parameter, and returns scaling factor factors for inner and middle mantle. + + """ + def __init__(self): + self._core_density_scale = 0. + + @property + def core_density_scale(self): + + return self._core_density_scale + + @core_density_scale.setter + def core_density_scale(self, value): + self._core_density_scale = value + +
+[docs] + def is_positive(self,lst): + for i in range(len(lst)): + if lst[i] < 0: + return False + return True
+ + +
+[docs] + def is_descending(self,lst): + for i in range(len(lst) - 1): + if lst[i] < lst[i + 1]: + return False + return True
+ + + @property + def scaling_array(self): + + radius= np.array([0.0, 1221.50, 3480.00, 5701.00, 6151.0, 6371.00]) + R = radius * 10**5 + + rho = np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5]) + + a1 = (4*np.pi/3)*(rho[1]* R[1]**3) + a2 = (8*np.pi/15)*(rho[1]* R[1]**5) + b1 = (4*np.pi/3)*(rho[2]* (R[2]**3 - R[1]**3)) + b2 = (8*np.pi/15)*(rho[2]* (R[2]**5 - R[1]**5)) + c1 = (4*np.pi/3)*(rho[3]* (R[3]**3 - R[2]**3)) + c2 = (8*np.pi/15)*(rho[3]* (R[3]**5 - R[2]**5)) + d1 = (4*np.pi/3)*(rho[4]* (R[4]**3 - R[3]**3)) + d2 = (8*np.pi/15)*(rho[4]* (R[4]**5 - R[3]**5)) + e1 = (4*np.pi/3)*(rho[5]* (R[5]**3 - R[4]**3)) + e2 = (8*np.pi/15)*(rho[5]* (R[5]**5 - R[4]**5)) + + I = a2 + b2 +c2 + d2 + e2 + M = a1 + b1 +c1 + d1 + e1 + + alpha = self.core_density_scale + + + new_rho = np.zeros(6, dtype=FTYPE) + gamma = ((I*c1-M*c2)-alpha*(c1*a2 - c2*a1)- alpha*(c1*b2-b1*c2)-(c1*e2 - e1*c2))/(c1*d2-d1*c2) + beta = (I - alpha * a2 - alpha * b2 - gamma*d2 - e2)/(c2) + + + new_rho[0] = alpha * rho[0] + new_rho[1] = alpha * rho[1] + new_rho[2] = alpha * rho[2] + new_rho[3] = beta * rho[3] + new_rho[4] = gamma * rho[4] + new_rho[5] = rho[5] + + tmp_array = np.ones(6,dtype=FTYPE) + if self.is_positive(new_rho): # and self.is_descending(new_rho): ##turn this on if you want to put hydrostatic equilibrium condition + tmp_array[1] = gamma + tmp_array[2] = beta + tmp_array[3] = alpha + tmp_array[4] = alpha + tmp_array[5] = alpha + + return tmp_array
+ + +
+[docs] +class Core_scaling_wo_constrain(object): + """ + Takes scaling factors for core, inner mantle and outer mantle from pipeline and stores them in an array + + """ + def __init__(self): + self._core_density_scale = 0. + self._innermantle_density_scale = 0. + self._middlemantle_density_scale = 0. + + @property + def core_density_scale(self): + + return self._core_density_scale + + @core_density_scale.setter + def core_density_scale(self, value): + self._core_density_scale = value + + @property + def innermantle_density_scale(self): + + return self._innermantle_density_scale + + @innermantle_density_scale.setter + def innermantle_density_scale(self, value): + self._innermantle_density_scale = value + + @property + def middlemantle_density_scale(self): + + return self._middlemantle_density_scale + + @middlemantle_density_scale.setter + def middlemantle_density_scale(self, value): + self._middlemantle_density_scale = value + + @property + def scaling_factor_array(self): + + tmp_array = np.ones(6,dtype=FTYPE) + tmp_array[1] = self.middlemantle_density_scale + tmp_array[2] = self.innermantle_density_scale + tmp_array[3] = self.core_density_scale + tmp_array[4] = self.core_density_scale + tmp_array[5] = self.core_density_scale + + return tmp_array
+ + + +def test_scaling_params(): + pass + +if __name__=='__main__': + from pisa import TARGET + from pisa.utils.log import set_verbosity, logging + assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" + set_verbosity(1) + test_scaling_params() + + + + + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/osc/two_nu_osc.html b/_modules/pisa/stages/osc/two_nu_osc.html new file mode 100644 index 000000000..97ab4bfd9 --- /dev/null +++ b/_modules/pisa/stages/osc/two_nu_osc.html @@ -0,0 +1,226 @@ + + + + + + pisa.stages.osc.two_nu_osc — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.osc.two_nu_osc

+"""
+PISA pi stage for the calculation osc. probabilities assuming two-neutrino model
+
+"""
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, ITYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+
+from pisa.utils.numba_tools import WHERE, myjit
+from pisa.utils.resources import find_resource
+
+
+
+[docs] +class two_nu_osc(Stage): + """ + two neutrino osc PISA Pi class + + Parameters + ---------- + theta : quantity (angle) + deltam31 : quantity (mass^2) + + Notes + ----- + For two-neutrino model, there is only one mass-splitting term + Atmospheric mixing angle is aproximated by theta (sin^2(2*theta)) + + """ + def __init__(self, + **std_kwargs, + ): + + expected_params = ( + 'theta', + 'deltam31', + ) + + # init base class + super(two_nu_osc, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + @profile + def apply_function(self): + + theta = self.params.theta.value.m_as('dimensionless') + deltam31 = self.params.deltam31.value.m_as('eV**2') + + for container in self.data: + if 'numu' in container.name: + apply_probs_vectorized(container['nu_flux'], + FTYPE(theta), + FTYPE(deltam31), + container['true_energy'], + container['true_coszen'], + ITYPE(1), + out=container['weights'], + ) + + if 'nutau' in container.name: + apply_probs_vectorized(container['nu_flux'], + FTYPE(theta), + FTYPE(deltam31), + container['true_energy'], + container['true_coszen'], + ITYPE(3), + out=container['weights'], + ) + if 'nue' in container.name: + apply_probs_vectorized(container['nu_flux'], + FTYPE(theta), + FTYPE(deltam31), + container['true_energy'], + container['true_coszen'], + ITYPE(0), + out=container['weights'], + ) + container.mark_changed('weights')
+
+ + +@myjit +def calc_probs(t23, dm31, true_energy, true_coszen): # + ''' calculate osc prob of numu to nutau ''' + L1 = 19. # atmospheric production height + R = 6378.2 + L1 # mean radius of the Earth + L1 + phi = np.arcsin((1-L1/R)*np.sin(np.arccos(true_coszen))) + psi = np.arccos(true_coszen) - phi + propdist = np.sqrt( (R-L1)**2 + R**2 - (2*(R-L1)*R*np.cos(psi))) + + return t23*np.sin(1.267*dm31*propdist/true_energy)**2 # constant arise from conversion of units for L and E + +# vectorized function to apply (flux * prob) +# must be outside class +if FTYPE == np.float64: + FX = 'f8' + IX = 'i8' +else: + FX = 'f4' + IX = 'i4' +signature = f'({FX}[:], {FX}, {FX}, {FX}, {FX}, {IX}, {FX}[:])' +@guvectorize([signature], '(d),(),(),(),(),()->()', target=TARGET) +def apply_probs_vectorized(flux, t23, dm31, true_energy, true_coszen, nuflav, out): + if nuflav==1: # numu receive weights dependent on numu survival prob + out[0] *= flux[1] * (1.0-calc_probs(t23, dm31, true_energy, true_coszen)) + elif nuflav==3: # nutau receive weights dependent on nutau appearance prob + out[0] *= flux[1] * calc_probs(t23, dm31, true_energy, true_coszen) + else: + assert nuflav==0 + out[0] *= flux[0] +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/pid/shift_scale_pid.html b/_modules/pisa/stages/pid/shift_scale_pid.html new file mode 100644 index 000000000..a57e4eb6c --- /dev/null +++ b/_modules/pisa/stages/pid/shift_scale_pid.html @@ -0,0 +1,220 @@ + + + + + + pisa.stages.pid.shift_scale_pid — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.pid.shift_scale_pid

+"""
+The purpose of this stage is shift and/or scale the pid values.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from numba import guvectorize
+import numpy as np
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils import vectorizer
+from pisa.utils.numba_tools import WHERE
+
+__all__ = ['shift_scale_pid']
+
+__author__ = 'L. Fischer'
+
+
+
+[docs] +class shift_scale_pid(Stage): + """ + Shift/scale pid. + + Parameters + ---------- + params + bias : float + shift pid values by given bias + scale : float + scale pid values by given scale factor + """ + + def __init__(self, + **std_kwargs, + ): + + # register expected parameters + expected_params = ('bias', 'scale',) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + assert self.calc_mode == 'events' + +
+[docs] + def setup_function(self): + """Setup the stage""" + + # set the correct data mode + self.data.representation = self.calc_mode + for container in self.data: + container['calculated_pid'] = np.empty((container.size), dtype=FTYPE) + container['original_pid'] = np.empty((container.size), dtype=FTYPE) + vectorizer.assign(vals=container['pid'], out=container['original_pid'])
+ + +
+[docs] + def compute_function(self): + """Perform computation""" + + # bias/scale have no units. + bias = self.params.bias.m_as('dimensionless') + scale = self.params.scale.m_as('dimensionless') + + for container in self.data: + calculate_pid_function(bias, + scale, + container['original_pid'], + out=container['calculated_pid']) + container.mark_changed('calculated_pid')
+ + +
+[docs] + def apply_function(self): + for container in self.data: + # set the pid value to the calculated one + vectorizer.assign(vals=container['calculated_pid'], out=container['pid'])
+
+ + +signatures = [ + '(f4[:], f4[:], f4[:], f4[:])', + '(f8[:], f8[:], f8[:], f8[:])' +] + +layout = '(),(),()->()' + + +@guvectorize(signatures, layout, target=TARGET) +def calculate_pid_function(bias_value, scale_factor, pid, out): + """This function selects a pid cut by shifting the pid variable so + the default cut at 1.0 is at the desired cut position. + + Parameters + ---------- + bias_value : scalar + shift pid values by this bias + scale_factor : scalar + scale pid values with this factor + pid : scalar + pid variable + out : scalar + shifted pid values + + """ + + out[0] = (scale_factor[0] * pid[0]) + bias_value[0] +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/reco/resolutions.html b/_modules/pisa/stages/reco/resolutions.html new file mode 100644 index 000000000..6f12a7db0 --- /dev/null +++ b/_modules/pisa/stages/reco/resolutions.html @@ -0,0 +1,179 @@ + + + + + + pisa.stages.reco.resolutions — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.reco.resolutions

+# pylint: disable=not-callable
+
+"""
+Stage for resolution improvement studies
+
+"""
+
+from __future__ import absolute_import, print_function, division
+
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+
+
+
+[docs] +class resolutions(Stage): + """ + stage to change the reconstructed information by a given amount + This can be used to esimate the impact of improved recosntruction + resolutions for instance + + Parameters + ---------- + params + Expected params .. :: + + energy_improvement : quantity (dimensionless) + scale the reco error down by this fraction + coszen_improvement : quantity (dimensionless) + scale the reco error down by this fraction + pid_improvement : quantity (dimensionless) + applies a shift to the classification parameter + + """ + def __init__( + self, + **std_kwargs + ): + expected_params = ( + 'energy_improvement', + 'coszen_improvement', + 'pid_improvement', + ) + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + + self.data.representation = self.apply_mode + + for container in self.data: + logging.info('Changing energy resolutions') + container['reco_energy'] += (container['true_energy'] - container['reco_energy']) * self.params.energy_improvement.m_as('dimensionless') + container.mark_changed('reco_energy') + + logging.info('Changing coszen resolutions') + container['reco_coszen'] += (container['true_coszen'] - container['reco_coszen']) * self.params.coszen_improvement.m_as('dimensionless') + container.mark_changed('reco_coszen') + # make sure coszen is within -1/1 ? + + logging.info('Changing PID resolutions') + if container.name in ['numu_cc', 'numubar_cc']: + container['pid'] += self.params.pid_improvement.m_as('dimensionless') + else: + container['pid'] -= self.params.pid_improvement.m_as('dimensionless') + container.mark_changed('pid')
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/reco/simple_param.html b/_modules/pisa/stages/reco/simple_param.html new file mode 100644 index 000000000..8005a5d07 --- /dev/null +++ b/_modules/pisa/stages/reco/simple_param.html @@ -0,0 +1,647 @@ + + + + + + pisa.stages.reco.simple_param — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.reco.simple_param

+# pylint: disable=not-callable
+
+"""
+Create reconstructed and PID variables based on truth information 
+for MC events using simple parameterisations.
+"""
+
+#TODO In future this could be integrated with param.py (but, that meed updating from cake to pi first)
+
+
+from __future__ import absolute_import, print_function, division
+
+import math, fnmatch, collections
+import numpy as np
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.utils.numba_tools import WHERE, myjit, ftype
+
+
+
+__all__ = ["simple_param","simple_reco_energy_parameterization","simple_reco_coszen_parameterization","simple_pid_parameterization"]
+
+__author__ = 'T. Stuttard'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+def dict_lookup_wildcard(dict_obj,key) :
+    '''
+    Find the object in a dict specified by a key, where the key may include wildcards
+
+    Parameters
+    ----------
+    dict_obj : dict
+        The dict (or dict-like) object to search 
+    key : str
+        The key to search for in the dict (may include wildcards)
+
+    Returns
+    -------
+    key : str
+        The str found in the dict matching the wildcard
+    value : anything
+        The value found corresponding to the the requested key
+    '''
+
+    assert isinstance(dict_obj,collections.abc.Mapping)
+    assert isinstance(key,str)
+
+    matches = collections.OrderedDict([ (k,v) for k,v in dict_obj.items() if fnmatch.fnmatch(key,k) ])
+
+    assert len(matches) > 0, "No match for '%s' found in dict" % key
+    assert len(matches) < 2, "Multiple matches for '%s' found in dict : %s" % (key,matches.keys())
+
+    return matches.keys()[0], matches.values()[0]
+
+
+def logistic_function(a,b,c,x) :
+    '''
+    Logistic function as defined here: https://en.wikipedia.org/wiki/Logistic_function.
+    Starts off slowly rising, before steeply rising, then plateaus.
+
+    Parameters
+    ----------
+    a : float
+        Normalisation (e.g. plateau height) 
+    b : float
+        Steepness of rise (larger value means steeper rise)
+    c : float 
+        x value at half-height of curve
+    x : array
+        The continuous parameter
+
+    Returns
+    -------
+    f(x) : array
+        The results of applying the logistic function to x
+    '''
+    return a / (1 + np.exp( -b * (x-c) ) )
+
+
+def has_muon(particle_key) :
+    '''
+    Function returning True if the particle type has muons in the final state
+    This is numu CC and atmopsheric muons
+
+    Parameters
+    ----------
+    particle_key : string
+        Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc.
+
+
+    Returns
+    -------
+    has_muon : bool
+        Flag set to try if particle has muon in final state
+    '''
+
+    #TODO consider adding nutau CC where the tau decays to muons
+
+    return ( (particle_key.startswith("numu") and particle_key.endswith("_cc")) or particle_key.startswith("muon") )
+
+
+
+def visible_energy_correction(particle_key) :
+    '''
+    Simple way to estimate the amount of visible energy in the event.
+
+    Right now considering cases with final state neutrinos, such as NC events, 
+    and nutau CC events (where the tau decays to a tau neutrino).
+
+    Neglecting the much lower losses due to muon decay for numu CC.
+    Also neglecting fact that different particle types produce differing photon yields.
+
+    I've tuned these by eye due to the biases seen in GRECO pegleg, which to first 
+    order I'm assuming are due to this missing energy.
+    There is also a bias in numu CC in GRECO, but suspect this is due to containment
+    or stochastics, but either way not reproducing this here.
+
+    Parameters
+    ----------
+    particle_key : string
+        Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc.
+
+    Returns
+    -------
+    visible_energy : array
+        Estimated visible energy in each event
+
+    '''
+
+    #TODO Add some smearing
+
+    # NC events have final state neutrino
+    if particle_key.endswith("_nc") :
+        return 0.4 #TODO tune, consider inelasticity numbers vs energy (including nu vs nubar)
+
+    # nutau CC events have final state neutrino, but from a subsequent tau decay
+    elif particle_key.startswith("nutau") and particle_key.endswith("_cc") :
+        return 0.6 #TODO tune, consider decay spectrum vs energy
+
+    # muons are all over the place since their "true_energy" doesn't reflect any real value in the ice (is energy as surface of generation cylinder)
+    elif particle_key == "muons" :
+        return 0.1 #TODO Should really store deposied energy in the frame instead
+
+    # Everything else deposits full energy as visible energy
+    else :
+        return 1.
+
+
+def energy_dependent_sigma(energy,energy_0,sigma_0,energy_power) :
+    '''
+    Returns an energy dependent sigma (standard deviation) value(s),
+    with energy dependence defined as follows:
+
+        sigma(E) = sigma(E=E0) * (E/E0)^n 
+
+    Parameters
+    ----------
+    energy : array or float
+        Energy value to evaluate sigma at 
+    energy_0 : float
+        Energy at which sigma_0 is defined
+    sigma_0 : float 
+        The value of sigma at energy_0
+    energy_power : float
+        Power/index fo the energy dependence
+
+    Returns
+    -------
+    sigma(energy) : array or float
+        The value of sigma at the specified energy (or energies)
+    '''
+    return sigma_0 * np.power(energy/energy_0,energy_power)
+
+
+
+[docs] +def simple_reco_energy_parameterization(particle_key,true_energy,params,random_state) : + ''' + Function to produce a smeared reconstructed energy distribution. + Resolution is particle- and energy-dependent + Use as a placeholder if real reconstructions are not currently available. + + Parameters + ---------- + particle_key : string + Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. + + true_energy : array + True energy array. + + params : dict + keys : particle key (wilcards accepted) + values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] + (example: params = {'nue*_cc':[10.,0.2,0.2],}) + + random_state : np.random.RandomState + User must provide the random state, meaning that reproducible results + can be obtained when calling multiple times. + + Returns + ------- + reco_energy : array + Reconstructed energy array. + ''' + + #TODO Update docs + + # Default random state with no fixed seed + if random_state is None : + random_state = np.random.RandomState() + + # Get the visible energy + visible_energy = true_energy * visible_energy_correction(particle_key) + + # Grab the params for this particle type + _,energy_dependent_sigma_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) + + # Get the sigma of the "reco error" distribution (energy dependent) + # Easier to use this than the "reco energy" directly + energy_0 = energy_dependent_sigma_params[0] + reco_error_sigma_0 = energy_dependent_sigma_params[1] + energy_power = energy_dependent_sigma_params[2] + reco_error_sigma = energy_dependent_sigma(visible_energy,energy_0,reco_error_sigma_0,energy_power) + + # Get the reco error + reco_error = random_state.normal(np.zeros_like(reco_error_sigma),reco_error_sigma) + + # Compute the corresponding reco energy + # Use visible energy since that is what really matters + reco_energy = visible_energy * ( reco_error + 1. ) + + # Ensure physical values + reco_energy[reco_energy < 0.] = 0. + + return reco_energy
+ + + +
+[docs] +def simple_reco_coszen_parameterization(particle_key,true_energy,true_coszen,params,random_state) : + ''' + Function to produce a smeared reconstructed cos(zenith) distribution. + Resolution is particle- and energy-dependent + Use as a placeholder if real reconstructions are not currently available. + Keep within the rotational bounds + + Parameters + ---------- + true_coszen : array + True cos(zenith angle) array. + + true_energy : array + True energy array. + + params : dict + keys : particle key (wilcards accepted) + values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] + (example: params = {'nue*_cc':[10.,0.2,0.5],}) + + random_state : np.random.RandomState + User must provide the random state, meaning that reproducible results + can be obtained when calling multiple times. + + Returns + ------- + reco_coszen : array + Reconstructed cos(zenith angle) array. + ''' + + # Default random state with no fixed seed + if random_state is None : + random_state = np.random.RandomState() + + # Get the visible energy + visible_energy = true_energy * visible_energy_correction(particle_key) + + # Grab the params for this particle type + _,energy_dependent_sigma_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) + + # Get the sigma of the "reco error" distribution (energy dependent) + # Easier to use this than the "reco coszen" directly + energy_0 = energy_dependent_sigma_params[0] + reco_error_sigma_0 = energy_dependent_sigma_params[1] + energy_power = energy_dependent_sigma_params[2] + reco_error_sigma = energy_dependent_sigma(visible_energy,energy_0,reco_error_sigma_0,energy_power) + + # Get the reco error + reco_error = random_state.normal(np.zeros_like(reco_error_sigma),reco_error_sigma) + + # Compute the corresponding reco coszen + # Use visible energy since that is what really matters + reco_coszen = true_coszen + reco_error + + # Enforce rotational bounds + out_of_bounds_mask = reco_coszen > 1. + reco_coszen[out_of_bounds_mask] = reco_coszen[out_of_bounds_mask] - ( 2. * (reco_coszen[out_of_bounds_mask] - 1.) ) + + out_of_bounds_mask = reco_coszen < -1. + reco_coszen[out_of_bounds_mask] = reco_coszen[out_of_bounds_mask] - ( 2. * (reco_coszen[out_of_bounds_mask] + 1.) ) + + return reco_coszen
+ + + +
+[docs] +def simple_pid_parameterization(particle_key,true_energy,params,track_pid,cascade_pid,random_state,) : + ''' + Function to assign a PID based on truth information. + Is particle-, interaction- and energy-dependent + Approximating energy dependence using a logistic function. + Can use as a placeholder if real reconstructions are not currently available. + + Parameters + ---------- + particle_key : string + Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. + + true_energy : array + True energy array. + + params : dict + keys : particle key (wilcards accepted) + values : Logistic function params for track ID (list) : [ normalisation (plateau height), steepness of rise, true_energy at half-height ] + (example: params = {'nue*_cc':[0.05,0.2,15.],}) + + track_pid : float + A PID value to assign to track-like events + + cascade_pid : float + A PID value to assign to cascade-like events + + random_state : np.random.RandomState + User must provide the random state, meaning that reproducible results + can be obtained when calling multiple times. + + Returns + ------- + pid : array + PID values. + ''' + + # Default random state with no fixed seed + if random_state is None : + random_state = np.random.RandomState() + + # Grab the params for this particle type + _,logistic_func_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) + + # Define whether each particle is a track + track_prob = logistic_function(logistic_func_params[0],logistic_func_params[1],logistic_func_params[2],true_energy) + track_mask = random_state.uniform(0.,1.,size=true_energy.size) < track_prob + + # Assign PID values + pid = np.full_like(true_energy,np.NaN) + pid[track_mask] = track_pid + pid[~track_mask] = cascade_pid + + return pid
+ + + +
+[docs] +class simple_param(Stage): + """ + Stage to generate reconstructed parameters (energy, coszen, pid) using simple parameterizations. + These are not fit to any input data, but are simple and easily understandable and require no + input reconstructed events. + + Can easily be tuned to any desired physics case, rught now repesent a DeepCore/ICU-like detector. + + Parameters + ---------- + params : ParamSet + Must exclusively have parameters: + + perfect_reco : bool + If True, use "perfect reco": reco == true, numu(bar)_cc -> tracks, rest to cascades + If False, use the parametrised reco energy, coszen and pid functions + + reco_energy_params : dict + Dict defining the `params` argument to `simple_reco_energy_parameterization` + See `simple_reco_energy_parameterization` documentatio for more details + + reco_coszen_params : dict + Dict defining the `params` argument to `simple_reco_coszen_parameterization` + See `simple_reco_coszen_parameterization` documentatio for more details + + pid_track_params : dict + Dict defining the `params` argument to `simple_pid_parameterization` + See `simple_pid_parameterization` documentatio for more details + + track_pid : float + The numerical 'pid' variable value to assign for tracks + + cascade_pid : float + The numerical 'pid' variable value to assign for cascades + + """ + + def __init__(self, + **std_kwargs, + ): + + expected_params = ( + "perfect_reco", #TODO move these to constructor args? + "reco_energy_params", + "reco_coszen_params", + "pid_track_params", + "track_pid", + "cascade_pid", + ) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + + #TODO Could add a number of discrete cases here that can be selected betweeen, e.g. ICU baseline (LoI?), DeepCore current best, etc... + + + # Get params + perfect_reco = self.params.perfect_reco.value + reco_energy_params = eval(self.params.reco_energy_params.value) + reco_coszen_params = eval(self.params.reco_coszen_params.value) + pid_track_params = eval(self.params.pid_track_params.value) + track_pid = self.params.track_pid.value.m_as("dimensionless") + cascade_pid = self.params.cascade_pid.value.m_as("dimensionless") + + # If using random numbers, use a random state with a fixed seed to make the + # same smearing for e.g. template and pseudodata (this achieves the same + # as we would normally use if we had reco variales in the file). + # Note that this doesn't affect other random numbers generated by other + # calls to numpy.random throughout the code. + random_state = np.random.RandomState(0) #TODO seed as arg/param + + for container in self.data : + + # Get stuff that is used multiples times + particle_key = container.name + true_energy = container["true_energy"] + true_coszen = container["true_coszen"] + + # Create container if not already present + if "reco_energy" not in container : + container['reco_energy'] = np.full_like(true_energy,np.NaN,dtype=FTYPE) + + # Create the reco energy variable + if perfect_reco : + reco_energy = true_energy + else : + reco_energy = simple_reco_energy_parameterization( + particle_key=particle_key, + true_energy=true_energy, + params=reco_energy_params, + random_state=random_state, + ) + + # Write to the container + container["reco_energy"][:] = reco_energy + container.mark_changed("reco_energy") + + + # + # Get reco coszen + # + + # Create container if not already present + if "reco_coszen" not in container : + container['reco_coszen'] = np.full_like(true_coszen,np.NaN,dtype=FTYPE) + + # Create the reco coszen variable + if perfect_reco : + reco_coszen = true_coszen + else : + reco_coszen = simple_reco_coszen_parameterization( + particle_key=particle_key, + true_energy=true_energy, + true_coszen=true_coszen, + params=reco_coszen_params, + random_state=random_state, + ) + + # Write to the container + container["reco_coszen"][:] = reco_coszen + container.mark_changed("reco_coszen") + + + # + # Create a PID variable + # + + # Create container if not already present + if "pid" not in container : + container['pid'] = np.full_like(true_energy,np.NaN,dtype=FTYPE) + + # Create the PID variable + if perfect_reco : + pid_value = track_pid if has_muon(particle_key) else cascade_pid + pid = np.full_like(true_energy,pid_value) + else : + pid = simple_pid_parameterization( + particle_key=particle_key, + true_energy=true_energy, + params=pid_track_params, + track_pid=track_pid, + cascade_pid=cascade_pid, + random_state=random_state, + ) + + # Write to the container + container["pid"][:] = pid + container.mark_changed("pid")
+
+ + + + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/add_indices.html b/_modules/pisa/stages/utils/add_indices.html new file mode 100644 index 000000000..1ba4b7b38 --- /dev/null +++ b/_modules/pisa/stages/utils/add_indices.html @@ -0,0 +1,198 @@ + + + + + + pisa.stages.utils.add_indices — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.utils.add_indices

+'''
+PISA module to prep incoming data into formats that are
+compatible with the mc_uncertainty likelihood formulation
+
+This module takes in events containers from the pipeline, and
+introduces an additional array giving the indices where each
+event falls into.
+
+module structure imported from bootcamp example
+'''
+
+from __future__ import absolute_import, print_function, division
+
+__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)"
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+#from pisa.utils.log import logging
+
+# Load the modified index lookup function
+from pisa.core.bin_indexing import lookup_indices
+
+
+
+
+[docs] +class add_indices(Stage): + """ + PISA Pi stage to map out the index of the analysis + binning where each event falls into. + + Parameters + ---------- + params + foo : Quantity + bar : Quanitiy with time dimension + + Notes: + ------ + - input and calc specs are predetermined in the module + (inputs from the config files will be disregarded) + + - stage appends an array quantity called bin_indices + - stage also appends an array mask to access events by + bin index later in the pipeline + + """ + + # this is the constructor with default arguments + + def __init__(self, + **std_kwargs, + ): + + + # init base class + super(add_indices, self).__init__( + expected_params=(), + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + ''' + Calculate the bin index where each event falls into + + Create one mask for each analysis bin. + ''' + + assert self.calc_mode == 'events', 'ERROR: calc specs must be set to "events for this module' + + + for container in self.data: + self.data.representation = self.calc_mode + variables_to_bin = [] + for bin_name in self.apply_mode.names: + variables_to_bin.append(container[bin_name]) + + indices = lookup_indices(sample=variables_to_bin, + binning=self.apply_mode) + + container['bin_indices'] = indices + + self.data.representation = self.apply_mode + for bin_i in range(self.apply_mode.tot_num_bins): + container['bin_{}_mask'.format(bin_i)] = container['bin_indices'] == bin_i
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/adhoc_sys.html b/_modules/pisa/stages/utils/adhoc_sys.html new file mode 100644 index 000000000..65684355b --- /dev/null +++ b/_modules/pisa/stages/utils/adhoc_sys.html @@ -0,0 +1,193 @@ + + + + + + pisa.stages.utils.adhoc_sys — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.adhoc_sys

+"""
+Stage to implement an ad-hoc systematic that corrects the discrepancy between data and
+MC in one particular variable. This can be used to check how large the impact of such a
+hypothetical systematic would be on the physics parameters of an analysis.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils import vectorizer
+from pisa.utils.log import logging
+from pisa.utils.resources import find_resource
+from pisa.utils.jsons import from_json
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+
+
+[docs] +class adhoc_sys(Stage): # pylint: disable=invalid-name + """ + Stage to re-weight events according to factors derived from post-fit data/MC + comparisons. The comparisons are produced somewhere externally and stored as a JSON + which encodes the binning that was used to make the comparison and the resulting + scaling factors. + + Parameters + ---------- + + variable_name : str + Name of the variable to correct data/MC agreement for. The variable must be + loaded in the data loading stage and it must be present in the loaded JSON file. + + scale_file : str + Path to the file which contains the binning and the scale factors. The JSON + file must contain a dictionary in which, for each variable, a 1D binning and + an array of factors. This file is produced externally from PISA. + """ + def __init__( + self, + data=None, + params=None, + variable_name=None, + scale_file=None, + **std_kwargs, + ): + + expected_params = () + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + assert self.calc_mode == "events" + assert self.apply_mode == "events" + + self.scale_file = scale_file + self.variable = variable_name + +
+[docs] + def setup_function(self): + scale_file = find_resource(self.scale_file) + logging.info("Loading scaling factors from : %s", scale_file) + + scaling_dict = from_json(scale_file) + scale_binning = MultiDimBinning(**scaling_dict[self.variable]["binning"]) + + scale_factors = np.array(scaling_dict[self.variable]["scales"], dtype=FTYPE) + logging.info(f"Binning for ad-hoc systematic: \n {str(scale_binning)}") + logging.info(f"scaling factors of ad-hoc systematic:\n {str(scale_factors)}") + self.data.representation = scale_binning + for container in self.data: + container["adhoc_scale_factors"] = scale_factors
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container["weights"] *= container["adhoc_scale_factors"]
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/bootstrap.html b/_modules/pisa/stages/utils/bootstrap.html new file mode 100644 index 000000000..434768ba9 --- /dev/null +++ b/_modules/pisa/stages/utils/bootstrap.html @@ -0,0 +1,322 @@ + + + + + + pisa.stages.utils.bootstrap — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.bootstrap

+"""
+Make bootstrap samples of data.
+
+This stage allows one to resample datasets to estimate MC uncertainties without having
+to decrease statistics. Bootstrap samples are produced by random selection with
+replacement, which is implemented in this stage by an equivalent re-weighting of
+events.
+"""
+
+import numpy as np
+from copy import deepcopy
+from collections import OrderedDict
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.numba_tools import WHERE
+from pisa.utils import vectorizer
+
+from pisa.utils.log import logging, set_verbosity
+
+__author__ = "A. Trettin"
+
+__license__ = """Copyright (c) 2022, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+
+[docs] +class bootstrap(Stage): + """ + Stage to make bootstrap samples from input data. + + Parameters + ---------- + seed : int, optional + Seed for the random number generator. + """ + + def __init__( + self, + seed=None, + **std_kwargs, + ): + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + assert self.calc_mode == "events" + + if seed is None: + self.seed = None + else: + self.seed = int(seed) + +
+[docs] + def setup_function(self): + + logging.debug(f"Setting up bootstrap with seed: {self.seed}") + + from numpy.random import default_rng + + rng = default_rng(self.seed) + + for container in self.data: + sample_size = container["weights"].size + # indices of events are randomly chosen from the entire sample until + # we have a new sample of the same size + sample_idx = rng.integers(sample_size, size=sample_size) + # Instead of manipulating all of the data arrays, we count how often each + # index was chosen and take that as a weight, i.e. an event that was selected + # twice will have a weight of 2. + sample_weights = np.bincount(sample_idx, minlength=sample_size) + container["bootstrap_weights"] = sample_weights
+ + +
+[docs] + def apply_function(self): + + for container in self.data: + container["weights"] *= container["bootstrap_weights"]
+
+ + + +
+[docs] +def insert_bootstrap_after_data_loader(cfg_dict, seed=None): + """ + Given a pipeline configuration parsed with `parse_pipeline_config`, insert the + bootstrap stage directly after the `simple_data_loader` stage and return the + modified config dict. + + Parameters + ---------- + cfg_dict : collections.OrderedDict + Pipeline configuration in the form of an ordered dictionary. + seed : int, optional + Seed to be placed into the pipeline configuration. + + Returns + ------- + collections.OrderedDict + A deepcopy of the original input `cfg_dict` with the configuration of the + bootstrap stage inserted after the data loader. + """ + + bootstrap_stage_cfg = OrderedDict() + bootstrap_stage_cfg["apply_mode"] = "events" + bootstrap_stage_cfg["calc_mode"] = "events" + bootstrap_stage_cfg["seed"] = seed + + bootstrap_pipe_cfg = deepcopy(cfg_dict) + + # Important: Cannot mutate dict while iterating over it, instantiate list instead + for k in list(bootstrap_pipe_cfg.keys()): + bootstrap_pipe_cfg.move_to_end(k) + if k == ("data", "simple_data_loader"): + bootstrap_pipe_cfg[("utils", "bootstrap")] = bootstrap_stage_cfg + + return bootstrap_pipe_cfg
+ + + +
+[docs] +def test_bootstrap(): + """Unit test for the bootstrap stage.""" + + from pisa.core.distribution_maker import DistributionMaker + from pisa.core.map import Map + from pisa.utils.config_parser import parse_pipeline_config + from pisa.utils.comparisons import ALLCLOSE_KW + + from numpy.testing import assert_allclose + + example_cfg = parse_pipeline_config("settings/pipeline/example.cfg") + + # We need to insert the bootstrap stage right after the data loading stage + bootstrap_pipe_cfg = insert_bootstrap_after_data_loader(example_cfg, seed=0) + + logging.debug("bootstrapped pipeline stage order:") + logging.debug(list(bootstrap_pipe_cfg.keys())) + + # get a baseline + dmaker = DistributionMaker([example_cfg]) + map_baseline = dmaker.get_outputs(return_sum=True)[0] + + # Make sure that different seeds produce different maps, and that the same seed will + # produce the same map. + dmaker = DistributionMaker([bootstrap_pipe_cfg]) + map_seed0 = dmaker.get_outputs(return_sum=True)[0] + + # find key of bootstrap stage + bootstrap_idx = 0 + for i, stage in enumerate(dmaker.pipelines[0].stages): + if stage.__class__.__name__ == "bootstrap": + bootstrap_idx = i + + # without re-loading the entire pipeline, we set the seed and call the setup function + # to save time for the test + dmaker.pipelines[0].stages[bootstrap_idx].seed = 1 + dmaker.pipelines[0].stages[bootstrap_idx].setup() + + map_seed1 = dmaker.get_outputs(return_sum=True)[0] + + assert not map_seed0 == map_seed1 + + dmaker.pipelines[0].stages[bootstrap_idx].seed = 0 + dmaker.pipelines[0].stages[bootstrap_idx].setup() + map_seed0_reprod = dmaker.get_outputs(return_sum=True)[0] + + assert map_seed0 == map_seed0_reprod + + # Quantify the variance of the resulting maps. They should be about the size of the + # expectation from sum of weights-squared. + + nominal_values = [] + for i in range(100): + dmaker.pipelines[0].stages[bootstrap_idx].seed = i + dmaker.pipelines[0].stages[bootstrap_idx].setup() + map_bootstrap = dmaker.get_outputs(return_sum=True)[0] + nominal_values.append(map_bootstrap.nominal_values) + + nominal_values = np.stack(nominal_values) + with np.errstate(divide="ignore", invalid="ignore"): + # calculate the ratio between the bootstrap nominal and the baseline nominal + bs_nom_ratios = np.mean(nominal_values, axis=0) / map_baseline.nominal_values + # and the standard deviation ratio as well + bs_std_ratios = np.std(nominal_values, axis=0) / map_baseline.std_devs + # assert that both nominal and standard deviation match the expectation from + # baseline up to a small error + assert np.abs(np.nanmean(bs_nom_ratios) - 1.0) < 0.01 + # the standard deviations are a little harder to match in 100 samples + assert np.abs(np.nanmean(bs_std_ratios) - 1.0) < 0.02 + + logging.info("<< PASS : bootstrap >>")
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_bootstrap() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/fix_error.html b/_modules/pisa/stages/utils/fix_error.html new file mode 100644 index 000000000..57ee82f88 --- /dev/null +++ b/_modules/pisa/stages/utils/fix_error.html @@ -0,0 +1,163 @@ + + + + + + pisa.stages.utils.fix_error — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.fix_error

+"""
+Stage to take the initial errors of MC and keep them
+for all minimization.
+
+Needed to allow mod_chi2 to behave correctly
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils import vectorizer
+from pisa.utils.numba_tools import WHERE
+
+
+[docs] +class fix_error(Stage): # pylint: disable=invalid-name + """ + stage to fix the error returned by template_maker. + """ + def __init__( + self, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + +
+[docs] + def setup_function(self): + for container in self.data: + container['frozen_errors'] = np.empty((container.size), dtype=FTYPE)
+ + +
+[docs] + def compute_function(self): + for container in self.data: + container["frozen_errors"][:] = container["errors"] + container.mark_changed('frozen_errors')
+ + +
+[docs] + def apply_function(self): + for container in self.data: + container['errors'][:] = container['frozen_errors'] + container.mark_changed('errors')
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/hist.html b/_modules/pisa/stages/utils/hist.html new file mode 100644 index 000000000..c9c7c4aa4 --- /dev/null +++ b/_modules/pisa/stages/utils/hist.html @@ -0,0 +1,310 @@ + + + + + + pisa.stages.utils.hist — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.hist

+"""
+Stage to transform arrays with weights into actual `histograms`
+that represent event counts
+"""
+
+import numpy as np
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.core.translation import histogram
+from pisa.core.binning import MultiDimBinning, OneDimBinning
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils import vectorizer
+from pisa.utils.log import logging
+
+
+
+[docs] +class hist(Stage): # pylint: disable=invalid-name + + """stage to histogram events + + Parameters + ---------- + unweighted : bool, optional + Return un-weighted event counts in each bin. + """ + def __init__( + self, + apply_unc_weights=False, + unweighted=False, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + assert self.calc_mode is not None + assert self.apply_mode is not None + self.regularized_apply_mode = None + self.apply_unc_weights = apply_unc_weights + self.unweighted = unweighted + +
+[docs] + def setup_function(self): + + assert isinstance(self.apply_mode, MultiDimBinning), ( + "Hist stage needs a binning as `apply_mode`, but is %s" % self.apply_mode + ) + + if isinstance(self.calc_mode, MultiDimBinning): + + # The two binning must be exclusive + assert len(set(self.calc_mode.names) & set(self.apply_mode.names)) == 0 + + transform_binning = self.calc_mode + self.apply_mode + + # go to "events" mode to create the transforms + + for container in self.data: + self.data.representation = "events" + sample = [container[name] for name in transform_binning.names] + hist = histogram(sample, None, transform_binning, averaged=False) + transform = hist.reshape(self.calc_mode.shape + (-1,)) + self.data.representation = self.calc_mode + container["hist_transform"] = transform + + elif self.calc_mode == "events": + # For dimensions where the binning is irregular, we pre-compute the + # index that each sample falls into and then bin regularly in the index. + # For dimensions that are logarithmic, we add a linear binning in + # the logarithm. + dimensions = [] + for dim in self.apply_mode: + if dim.is_irregular: + # create a new axis with digitized variable + varname = dim.name + "__" + self.apply_mode.name + "_idx" + new_dim = OneDimBinning( + varname, domain=[0, dim.num_bins], num_bins=dim.num_bins + ) + dimensions.append(new_dim) + for container in self.data: + container.representation = "events" + x = container[dim.name] * dim.units + # Compute the bin index each sample would fall into, and + # shift by -1 such that samples below the binning range + # get assigned the index -1. + x_idx = np.searchsorted(dim.bin_edges, x, side="right") - 1 + # To be consistent with numpy histogramming, we need to + # shift those values that are exactly at the uppermost edge + # down one index such that they are included in the highest + # bin instead of being treated as an outlier. + on_edge = x == dim.bin_edges[-1] + x_idx[on_edge] -= 1 + container[varname] = x_idx + elif dim.is_log: + # We don't compute the log of the variable just yet, this + # will be done later during `apply_function` using the + # representation mechanism. + new_dim = OneDimBinning( + dim.name, domain=np.log(dim.domain.m), num_bins=dim.num_bins + ) + dimensions.append(new_dim) + else: + dimensions.append(dim) + self.regularized_apply_mode = MultiDimBinning(dimensions) + logging.debug( + "Using regularized binning:\n" + str(self.regularized_apply_mode) + ) + else: + raise ValueError(f"unknown calc mode: {self.calc_mode}")
+ + +
+[docs] + @profile + def apply_function(self): + + if isinstance(self.calc_mode, MultiDimBinning): + + if self.unweighted: + raise NotImplementedError( + "Unweighted hist only implemented in event-wise calculation" + ) + for container in self.data: + + container.representation = self.calc_mode + if "astro_weights" in container.keys: + weights = container["weights"] + container["astro_weights"] + else: + weights = container["weights"] + if self.apply_unc_weights: + unc_weights = container["unc_weights"] + else: + unc_weights = np.ones(weights.shape) + transform = container["hist_transform"] + + hist = (unc_weights*weights) @ transform + if self.error_method == "sumw2": + sumw2 = np.square(unc_weights*weights) @ transform + bin_unc2 = (np.square(unc_weights)*weights) @ transform + + container.representation = self.apply_mode + container["weights"] = hist + + if self.error_method == "sumw2": + container["errors"] = np.sqrt(sumw2) + container["bin_unc2"] = bin_unc2 + + elif self.calc_mode == "events": + for container in self.data: + container.representation = self.calc_mode + sample = [] + dims_log = [d.is_log for d in self.apply_mode] + dims_ire = [d.is_irregular for d in self.apply_mode] + for dim, is_log, is_ire in zip( + self.regularized_apply_mode, dims_log, dims_ire + ): + if is_log and not is_ire: + container.representation = "log_events" + sample.append(container[dim.name]) + else: + container.representation = "events" + sample.append(container[dim.name]) + + if self.unweighted: + if "astro_weights" in container.keys: + weights = np.ones_like(container["weights"] + container["astro_weights"]) + else: + weights = np.ones_like(container["weights"]) + else: + if "astro_weights" in container.keys: + weights = container["weights"] + container["astro_weights"] + else: + weights = container["weights"] + if self.apply_unc_weights: + unc_weights = container["unc_weights"] + else: + unc_weights = np.ones(weights.shape) + + # The hist is now computed using a binning that is completely linear + # and regular + hist = histogram( + sample, + unc_weights*weights, + self.regularized_apply_mode, + averaged=False + ) + + if self.error_method == "sumw2": + sumw2 = histogram(sample, np.square(unc_weights*weights), self.regularized_apply_mode, averaged=False) + bin_unc2 = histogram(sample, np.square(unc_weights)*weights, self.regularized_apply_mode, averaged=False) + + container.representation = self.apply_mode + container["weights"] = hist + + if self.error_method == "sumw2": + container["errors"] = np.sqrt(sumw2) + container["bin_unc2"] = bin_unc2
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/kde.html b/_modules/pisa/stages/utils/kde.html new file mode 100644 index 000000000..ebb29823b --- /dev/null +++ b/_modules/pisa/stages/utils/kde.html @@ -0,0 +1,401 @@ + + + + + + pisa.stages.utils.kde — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.kde

+"""
+Stage to transform arrays with weights into KDE maps
+that represent event counts
+"""
+import numpy as np
+
+
+from copy import deepcopy
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.core.binning import MultiDimBinning, OneDimBinning
+from pisa.utils.log import logging
+from pisa.utils.profiler import profile
+from pisa.utils import vectorizer
+from pisa.utils import kde_hist
+
+
+
+[docs] +class kde(Stage): + """stage to KDE-map events + + Parameters + ---------- + + bw_method: string + 'scott' or 'silverman' (see kde module) + coszen_name : string + Binning name to identify the coszen bin that needs to undergo special + treatment for reflection + oversample : int + Evaluate KDE at more points per bin, takes longer, but is more accurate + stash_hists : bool + Evaluate KDE only once and stash the result. This effectively ignores all changes + from earlier stages, but greatly increases speed. Useful for muons where + only over-all weight and detector systematic variations matter, which can both + be applied on the histograms after this stage. + bootstrap : bool + Use the bootstrapping technique to estimate errors on the KDE histograms. + linearize_log_dims : bool + If True (default), calculate the KDE for a dimension that is binned + logarithmically on the logarithm of the sample values. This generally results + in better agreement of the total normalization of the KDE'd histograms to the + sum of weights. + + Notes + ----- + + Make sure enough events are present with reco energy below and above the + binning range, otherwise events will only "bleed out" + + """ + + def __init__( + self, + bw_method="silverman", + coszen_name="reco_coszen", + oversample=10, + coszen_reflection=0.25, + alpha=0.1, + stack_pid=True, + stash_hists=False, + bootstrap=False, + bootstrap_niter=10, + bootstrap_seed=None, + linearize_log_dims=True, + **std_kargs, + ): + + self.bw_method = bw_method + self.coszen_name = coszen_name + self.oversample = int(oversample) + self.coszen_reflection = float(coszen_reflection) + self.alpha = float(alpha) + self.stack_pid = stack_pid + self.stash_hists = stash_hists + self.stash_valid = False + self.linearize_log_dims = linearize_log_dims + self.bootstrap = bootstrap + self.bootstrap_niter = int(bootstrap_niter) + if bootstrap_seed is not None: + self.bootstrap_seed = int(bootstrap_seed) + else: + self.bootstrap_seed = None + + if stash_hists: + self.stashed_hists = None + if self.bootstrap: + self.stashed_errors = None + + # init base class + super().__init__( + expected_params=(), + **std_kargs, + ) + + assert self.calc_mode == "events" + self.regularized_apply_mode = None + +
+[docs] + def setup_function(self): + + assert isinstance( + self.apply_mode, MultiDimBinning + ), f"KDE stage needs a binning as `apply_mode`, but is {self.apply_mode}" + + # For dimensions that are logarithmic, we add a linear binning in + # the logarithm (but only if this feature is enabled) + + if not self.linearize_log_dims: + self.regularized_apply_mode = self.apply_mode + return + + dimensions = [] + for dim in self.apply_mode: + if dim.is_lin: + new_dim = deepcopy(dim) + # We don't compute the log of the variable just yet, this + # will be done later during `apply_function` using the + # representation mechanism. + # We replace the logarithmic binning with a linear binning in log-space + elif dim.is_irregular: + new_dim = OneDimBinning( + dim.name, + bin_edges=np.log(dim.bin_edges.m), + ) + else: + new_dim = OneDimBinning( + dim.name, domain=np.log(dim.domain.m), num_bins=dim.num_bins + ) + dimensions.append(new_dim) + + self.regularized_apply_mode = MultiDimBinning(dimensions) + logging.debug( + "Using regularized binning:\n" + repr(self.regularized_apply_mode) + )
+ + +
+[docs] + @profile + def apply(self): + # this is special, we want the actual event weights in the kde + # therefor we're overwritting the apply function + # normally in a stage you would implement the `apply_function` method + # and not the `apply` method! + + for container in self.data: + + if self.stash_valid: + self.data.representation = self.apply_mode + # Making a copy of the stash so that subsequent stages will not manipulate + # it. + container["weights"] = self.stashed_hists[container.name].copy() + if self.bootstrap: + container["errors"] = self.stashed_errors[container.name].copy() + continue + + sample = [] + dims_log = [d.is_log for d in self.apply_mode] + for dim, is_log in zip(self.regularized_apply_mode, dims_log): + if is_log and self.linearize_log_dims: + container.representation = "log_events" + sample.append(container[dim.name]) + else: + container.representation = "events" + sample.append(container[dim.name]) + + # Make sure that we revert back to "events" before extracting weights (could + # otherwise end up in "log_events"). + container.representation = "events" + + sample = np.stack(sample).T + weights = container["weights"] + + kde_kwargs = dict( + sample=sample, + binning=self.regularized_apply_mode, + # weights=weights, + bw_method=self.bw_method, + coszen_name=self.coszen_name, + coszen_reflection=self.coszen_reflection, + alpha=self.alpha, + oversample=self.oversample, + use_cuda=False, + stack_pid=self.stack_pid, + # bootstrap=self.bootstrap, + # bootstrap_niter=self.bootstrap_niter, + ) + + if self.bootstrap: + from numpy.random import default_rng + + kde_maps = [] + rng = default_rng(self.bootstrap_seed) + sample_size = container.size + for i in range(self.bootstrap_niter): + # Indices of events are randomly chosen from the entire sample until + # we have a new sample of the same size. + # If we are stacking in PID, we will want to do this independently + # for each PID channel. + + # We accumulate sample weights into one array. + sample_weights = np.zeros(sample_size) + + if self.stack_pid: + binning = self.regularized_apply_mode + bin_edges = [b.bin_edges.m for b in binning] + pid_bin = binning.names.index("pid") + pid_bin_edges = bin_edges[pid_bin] + + n_ch = len(pid_bin_edges) - 1 + + for pid_channel in range(n_ch): + # Get mask of events falling into this PID bin + pid_mask = ( + sample[:, pid_bin] >= pid_bin_edges[pid_channel] + ) & (sample[:, pid_bin] < pid_bin_edges[pid_channel + 1]) + pid_size = np.sum(pid_mask) + # Select indices of the appropriate size for just this PID + # channel + pid_sample_idx = rng.integers(pid_size, size=pid_size) + # Instead of manipulating all of the data arrays, we count + # how often each index was chosen and take that as a weight, + # i.e. an event that was selected twice will have a weight + # of 2. + pid_sample_weights = np.bincount( + pid_sample_idx, minlength=pid_size + ) + sample_weights[pid_mask] += pid_sample_weights + # Ensure that we indeed conserved the number of events in each + # PID channel after all + for pid_channel in range(n_ch): + pid_mask = ( + sample[:, pid_bin] >= pid_bin_edges[pid_channel] + ) & (sample[:, pid_bin] < pid_bin_edges[pid_channel + 1]) + assert sum(sample_weights[pid_mask]) == sum(pid_mask) + else: + sample_idx = rng.integers(sample_size, size=sample_size) + # Instead of manipulating all of the data arrays, we count how + # often each index was chosen and take that as a weight, i.e. an + # event that was selected twice will have a weight of 2. + sample_weights = np.bincount(sample_idx, minlength=sample_size) + + with np.errstate(invalid="raise"): + try: + kde_maps.append( + kde_hist.kde_histogramdd( + weights=weights * sample_weights, **kde_kwargs + ) + ) + except FloatingPointError: + raise RuntimeError( + "Could not calculate KDE with the given sample. This can " + "happen if the bootstrap selects too few distinct events " + "in one of the PID channels." + ) + kde_maps = np.stack(kde_maps) + kde_map = np.mean(kde_maps, axis=0) + kde_errors = np.std(kde_maps, axis=0) + kde_errors = np.ascontiguousarray(kde_errors.ravel()) + else: + kde_map = kde_hist.kde_histogramdd(weights=weights, **kde_kwargs) + kde_map = np.ascontiguousarray(kde_map.ravel()) + + self.data.representation = self.apply_mode + + container["weights"] = kde_map + if self.bootstrap: + container["errors"] = kde_errors + + if self.stash_hists: + if self.stashed_hists is None: + self.stashed_hists = {} + if self.bootstrap: + self.stashed_errors = {} + # Making a copy is required because subsequent stages may change weights + # in-place. + self.stashed_hists[container.name] = kde_map.copy() + if self.bootstrap: + self.stashed_errors[container.name] = kde_errors.copy() + + self.stash_valid = ( + self.stash_hists + ) # valid is true if we are stashing, else not
+
+ + + +# Placing a unit test here creates an import error due to the fact that the class +# defined above has the exact same name as the `kde` module that has to be imported to +# make it work. If this script is __main__, then we import `kde` (the stage) directly +# into the main scope and thus overshadow `kde` (the module). +# The unit test for this stage is therefore instead placed in +# pisa/pisa_tests/test_kde_stage.py +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/kfold.html b/_modules/pisa/stages/utils/kfold.html new file mode 100644 index 000000000..459790d66 --- /dev/null +++ b/_modules/pisa/stages/utils/kfold.html @@ -0,0 +1,223 @@ + + + + + + pisa.stages.utils.kfold — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.kfold

+"""
+Make K-folds of data.
+
+This stage can be used to split MC into chunks of equal size and to select only one 
+chunk to make histograms from. It uses the KFold class from scikit-learn to make
+"test" and "train" indeces for the dataset and sets all weights in the "train" 
+indeces to zero. Optionally, weights can be re-scaled by the number of splits to
+renormalize the total rates.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.numba_tools import WHERE
+from pisa.utils import vectorizer
+
+__author__ = "A. Trettin"
+
+__license__ = """Copyright (c) 2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+
+[docs] +class kfold(Stage): + """ + Stage to make splits of the MC set and select one split to make histograms. + The weight of all indeces not belonging to the selected split are set to + zero. + + Parameters + ---------- + n_splits (int): number of splits + select_split (int, optional): which split to keep + seed (int, optional): seed for the random number generator + renormalize (bool, optional): renormalize weights by multiplying + by the number of splits + shuffle (bool, optional): shuffle indeces before splitting + + """ + + def __init__( + self, + n_splits, + select_split=0, + seed=None, + renormalize=False, + shuffle=False, + save_mask=False, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + assert self.calc_mode == "events" + + self.n_splits = int(n_splits) + self.select_split = int(select_split) + if seed is None: + self.seed = None + else: + self.seed = int(seed) + self.renormalize = bool(renormalize) + self.shuffle = bool(shuffle) + + self.save_mask = save_mask + +
+[docs] + def setup_function(self): + from sklearn.model_selection import KFold + + kf = KFold(n_splits=self.n_splits, shuffle=self.shuffle, random_state=self.seed) + for container in self.data: + index_gen = kf.split(container["weights"]) # a generator + for i, (train_index, test_index) in enumerate(index_gen): + select_idx = test_index + if i == self.select_split: + break + container["fold_weight"] = np.zeros((container.size), dtype=FTYPE) + select_weight = ( + kf.get_n_splits(container["weights"]) if self.renormalize else 1.0 + ) + container["fold_weight"][select_idx] = select_weight + container.mark_changed("fold_weight") + + if self.save_mask: + container['kfold_mask'] = np.zeros((container.size), dtype=bool) + container['kfold_mask'][select_idx] = 1 + container.mark_changed('kfold_mask')
+ + + +
+[docs] + def apply_function(self): + for container in self.data: + container["weights"] *= container["fold_weight"]
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/resample.html b/_modules/pisa/stages/utils/resample.html new file mode 100644 index 000000000..37c624ecc --- /dev/null +++ b/_modules/pisa/stages/utils/resample.html @@ -0,0 +1,394 @@ + + + + + + pisa.stages.utils.resample — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.utils.resample

+"""
+Stage to transform binned data from one binning to another while also dealing with
+uncertainty estimates in a reasonable way. In particular, this allows up-sampling from a
+more coarse binning to a finer binning.
+
+The implementation is similar to that of the hist stage, hence the over-writing of
+the `apply` method.
+"""
+
+from __future__ import absolute_import, print_function, division
+
+import numpy as np
+from enum import Enum, auto
+
+from pisa import FTYPE
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils import vectorizer
+from pisa.core import translation
+from pisa.core.binning import MultiDimBinning
+
+from pisa.utils.log import logging, set_verbosity
+
+
+[docs] +class ResampleMode(Enum): + """Enumerates sampling methods of the `resample` stage.""" + + UP = auto() + DOWN = auto() + ARB = auto()
+ + +
+[docs] +class resample(Stage): # pylint: disable=invalid-name + """ + Stage to resample weighted MC histograms from one binning to another. + + The origin binning is given as `calc_mode` and the output binning is given in + `apply_mode`. + + Parameters + ---------- + + scale_errors : bool, optional + If `True` (default), apply scaling to errors. + """ + + def __init__( + self, + scale_errors=True, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + # This stage only makes sense when going binned to binned. + assert isinstance(self.apply_mode, MultiDimBinning), "stage only produces binned output" + assert isinstance(self.calc_mode, MultiDimBinning), "stage only produces binned output" + + self.scale_errors = scale_errors + + # The following tests whether `apply_mode` is a strict up-sample + + # TODO: Test for ability to resample in two steps + # TODO: Update to new test nomenclature + + # ToDo: check logic after pisa4 upgrade + if self.calc_mode.is_compat(self.apply_mode): + self.rs_mode = ResampleMode.UP + elif self.apply_mode.is_compat(self.calc_mode): + self.rs_mode = ResampleMode.DOWN + else: + raise ValueError("Binnings are not compatible with each other for resample") + + # TODO: Implement downsampling + # TODO: Implement arbitrary resampling + if self.rs_mode == ResampleMode.DOWN: + raise NotImplementedError("Downsampling not yet implemented.") + if self.rs_mode == ResampleMode.ARB: + raise NotImplementedError("Arbitrary resampling not yet implemented.") + +
+[docs] + def setup_function(self): + # Set up a container for intermediate storage of variances in input specs + self.data.representation = self.calc_mode + for container in self.data: + container["variances"] = np.empty((container.size), dtype=FTYPE) + # set up containers for the resampled output in the output specs + self.data.representation = self.apply_mode + for container in self.data: + container["weights_resampled"] = np.empty((container.size), dtype=FTYPE) + if self.scale_errors: + container["vars_resampled"] = np.empty((container.size), dtype=FTYPE) + container["errors_resampled"] = np.empty((container.size), dtype=FTYPE)
+ + +
+[docs] + @profile + def apply(self): + # DO NOT USE THIS STAGE AS YOUR TEMPLATE IF YOU ARE NEW TO PISA! + # -------------------------------------------------------------- + # + # We are overwriting the `apply` method rather than the `apply_function` method + # because we are manipulating the data binning in a delicate way that doesn't + # work with automatic rebinning. + + self.data.representation = self.calc_mode + + if self.scale_errors: + for container in self.data: + vectorizer.pow( + vals=container["errors"], + pwr=2, + out=container["variances"], + ) + + input_binvols = self.calc_mode.weighted_bin_volumes(attach_units=False).ravel() + output_binvols = self.apply_mode.weighted_bin_volumes(attach_units=False).ravel() + + for container in self.data: + + self.data.representation = self.calc_mode + weights_flat_hist = container["weights"] + if self.scale_errors: + vars_flat_hist = container["variances"] + self.data.representation = self.apply_mode + + if self.rs_mode == ResampleMode.UP: + # The `unroll_binning` function returns the midpoints of the bins in the + # dimension `name`. + fine_gridpoints = [ + container.unroll_binning(name, self.apply_mode) + for name in self.apply_mode.names + ] + # We look up at which bin index of the input binning the midpoints of + # the output binning can be found, and assign to each the content of the + # bin of that index. + container["weights_resampled"] = translation.lookup( + fine_gridpoints, + weights_flat_hist, + self.calc_mode + ) + if self.scale_errors: + container["vars_resampled"] = translation.lookup( + fine_gridpoints, + vars_flat_hist, + self.calc_mode + ) + # These are the volumes of the bins we sample *from* + origin_binvols = translation.lookup( + fine_gridpoints, + input_binvols, + self.calc_mode + ) + # Finally, we scale the weights and variances by the ratio of the + # bin volumes in place: + container["weights_resampled"] = ( + container["weights_resampled"] * output_binvols / origin_binvols + ) + if self.scale_errors: + container["vars_resampled"] = ( + container["vars_resampled"] * output_binvols / origin_binvols + ) + elif self.rs_mode == ResampleMode.DOWN: + pass # not yet implemented + + if self.scale_errors: + container["errors_resampled"] = np.sqrt(container["vars_resampled"])
+
+ + +
+[docs] +def test_resample(): + """Unit test for the resampling stage.""" + from pisa.core.distribution_maker import DistributionMaker + from pisa.core.map import Map + from pisa.utils.config_parser import parse_pipeline_config + from pisa.utils.log import set_verbosity, logging + from pisa.utils.comparisons import ALLCLOSE_KW + from collections import OrderedDict + from copy import deepcopy + from numpy.testing import assert_allclose + + example_cfg = parse_pipeline_config('settings/pipeline/example.cfg') + reco_binning = example_cfg[('utils', 'hist')]['apply_mode'] + coarse_binning = reco_binning.downsample(reco_energy=2, reco_coszen=2) + assert coarse_binning.is_compat(reco_binning) + # replace binning of output with coarse binning + example_cfg[('utils', 'hist')]['apply_mode'] = coarse_binning + # New in PISA4: We explicitly tell the pipeline which keys and binning to use for + # the output. We must manually set this to the same binning as the output from the + # hist stage because otherwise it would attempt to automatically rebin everything. + example_cfg['pipeline']['output_key'] = ('weights', 'errors') + example_cfg['pipeline']['output_binning'] = coarse_binning + # make another pipeline with an upsampling stage to the original binning + upsample_cfg = deepcopy(example_cfg) + resample_cfg = OrderedDict() + resample_cfg['apply_mode'] = reco_binning + resample_cfg['calc_mode'] = coarse_binning + resample_cfg['scale_errors'] = True + upsample_cfg[('utils', 'resample')] = resample_cfg + # Here we want to take the resampled output to generate Maps from the pipeline + upsample_cfg['pipeline']['output_key'] = ('weights_resampled', 'errors_resampled') + upsample_cfg['pipeline']['output_binning'] = reco_binning + + example_maker = DistributionMaker([example_cfg]) + upsampled_maker = DistributionMaker([upsample_cfg]) + + example_map = example_maker.get_outputs(return_sum=True)[0] + example_map_upsampled = upsampled_maker.get_outputs(return_sum=True)[0] + + # First check: The upsampled map must have the same total count as the original map + assert np.isclose( + np.sum(example_map.nominal_values), + np.sum(example_map_upsampled.nominal_values), + ) + + # Check consistency of modified chi-square + # ---------------------------------------- + # When the assumption holds that events are uniformly distributed over the coarse + # bins, the modified chi-square should not change from upscaling the maps. We test + # this by making a fluctuated coarse map and then upsampling that map according to + # the assumption by bin volumes. We should find that the modified chi-square between + # the coarse map and the coarse fluctuated map is the same as the upsampled map and + # the upsampled fluctuated map. + + # It doesn't matter precisely how we fluctuate it here, we just want any different + # map... + random_map_coarse = example_map.fluctuate(method='scaled_poisson', random_state=42) + random_map_coarse.set_errors(None) + + # This bit is an entirely independent implementation of the upsampling. The count + # in every bin is scaled according to the reatio of weighted bin volumes. + upsampled_hist = np.zeros_like(example_map_upsampled.nominal_values) + upsampled_errs = np.zeros_like(example_map_upsampled.nominal_values) + up_binning = example_map_upsampled.binning + + coarse_hist = np.array(random_map_coarse.nominal_values) + coarse_errors = np.array(random_map_coarse.std_devs) + coarse_binning = random_map_coarse.binning + + for bin_idx in np.ndindex(upsampled_hist.shape): + one_bin = up_binning[bin_idx] + fine_bin_volume = one_bin.weighted_bin_volumes( + attach_units=False, + ).squeeze().item() + # the following is basically an independent implementation of translate.lookup + coarse_index = [] # index where the upsampled bin came from + for dim in up_binning.names: + x = one_bin[dim].weighted_centers[0].m # middle point of the one bin + bins = coarse_binning[dim].bin_edges.m # coarse bin edges in that dim + coarse_index.append(np.digitize(x, bins) - 1) # index 1 means bin 0 + coarse_index = tuple(coarse_index) + coarse_bin_volume = coarse_binning.weighted_bin_volumes( + attach_units=False, + )[coarse_index].squeeze().item() + + upsampled_hist[bin_idx] = coarse_hist[coarse_index] + upsampled_hist[bin_idx] *= fine_bin_volume + upsampled_hist[bin_idx] /= coarse_bin_volume + + # done, at last! + random_map_upsampled = Map( + name="random_upsampled", + hist=upsampled_hist, + binning=up_binning + ) + random_map_upsampled.set_errors(None) + + # After ALL THIS, we get the same modified chi-square from the coarse and the + # upsampled pair of maps. Neat, huh? + assert_allclose(random_map_coarse.mod_chi2(example_map), + random_map_upsampled.mod_chi2(example_map_upsampled), + **ALLCLOSE_KW) + logging.info('<< PASS : resample >>')
+ + +if __name__ == "__main__": + set_verbosity(2) + test_resample() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/utils/set_variance.html b/_modules/pisa/stages/utils/set_variance.html new file mode 100644 index 000000000..e59a37e78 --- /dev/null +++ b/_modules/pisa/stages/utils/set_variance.html @@ -0,0 +1,219 @@ + + + + + + pisa.stages.utils.set_variance — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.stages.utils.set_variance

+"""
+Override errors and replace with manually chosen error fraction.
+"""
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils.log import logging
+from pisa.utils import vectorizer
+from pisa.core.binning import MultiDimBinning
+
+
+
+[docs] +class set_variance(Stage): # pylint: disable=invalid-name + """ + Override errors and replace with manually chosen variance. + """ + + def __init__( + self, + variance_scale=1.0, + variance_floor=None, + expected_total_mc=None, + divide_total_mc=False, + **std_kwargs, + ): + + # init base class + super().__init__( + expected_params=(), + **std_kwargs, + ) + + assert isinstance(self.calc_mode, MultiDimBinning) + assert isinstance(self.apply_mode, MultiDimBinning) + + self.variance_scale = variance_scale + self.variance_floor = variance_floor + assert self.variance_scale is not None + + self.expected_total_mc = int(expected_total_mc) + self.divide_n = divide_total_mc + if self.divide_n: + assert self.expected_total_mc is not None + self.total_mc = {} + +
+[docs] + def setup_function(self): + if self.divide_n: + self.data.representation = "events" + for container in self.data: + self.total_mc[container.name] = container.size + logging.debug(f"{container.size} mc events in container {container.name}") + self.data.representation = self.calc_mode + for container in self.data: + container["manual_variance"] = np.empty((container.size), dtype=FTYPE) + if "errors" not in container.keys: + container["errors"] = np.empty((container.size), dtype=FTYPE)
+ + +
+[docs] + def apply_function(self): + for container in self.data: + vectorizer.sqrt(vals=container["manual_variance"], out=container["errors"])
+ + +
+[docs] + def compute_function(self): + for container in self.data: + vectorizer.assign(vals=container["weights"], out=container["manual_variance"]) + vectorizer.scale( + vals=container["manual_variance"], + scale=self.variance_scale, + out=container["manual_variance"], + ) + if self.divide_n: + vectorizer.scale( + vals=container["manual_variance"], + scale=self.expected_total_mc/self.total_mc[container.name], + out=container["manual_variance"], + ) + if self.variance_floor is not None: + apply_floor(self.variance_floor, out=container["manual_variance"])
+
+ + +FX = "f4" if FTYPE == np.float32 else "f8" + +
+[docs] +def apply_floor(val, out): + apply_floor_gufunc(FTYPE(val), out=out)
+ + +@guvectorize([f"({FX}, {FX}[:])"], "() -> ()", target=TARGET) +def apply_floor_gufunc(val, out): + out[0] = val if out[0] < val else out[0] + +
+[docs] +def set_constant(val, out): + set_constant_gufunc(FTYPE(val), out=out)
+ + +@guvectorize([f"({FX}, {FX}[:])"], "() -> ()", target=TARGET) +def set_constant_gufunc(val, out): + out[0] = val +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/xsec/dis_sys.html b/_modules/pisa/stages/xsec/dis_sys.html new file mode 100644 index 000000000..3f9f875e4 --- /dev/null +++ b/_modules/pisa/stages/xsec/dis_sys.html @@ -0,0 +1,294 @@ + + + + + + pisa.stages.xsec.dis_sys — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.xsec.dis_sys

+"""
+Stage to apply pre-calculated DIS uncertainties
+Study done by Maria Liubarska & Juan Pablo Yanez, more information available here:
+https://drive.google.com/open?id=1SRBgIyX6kleYqDcvop6m0SInToAVhSX6
+ToDo: tech note being written, link here as soon as available
+"""
+
+from __future__ import absolute_import, print_function, division
+
+__all__ = ["dis_sys", "apply_dis_sys"]
+
+import numpy as np
+from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile
+from pisa.utils.fileio import from_file
+from pisa.utils.numba_tools import WHERE
+from pisa import ureg
+
+
+
+[docs] +class dis_sys(Stage): # pylint: disable=invalid-name + """ + Stage to apply pre-calculated DIS systematics. + + Parameters + ---------- + data + params + Must contain :: + dis_csms : quantity (dimensionless) + + extrapolation_type : string + choice of ['constant', 'linear', 'higher'] + + extrapolation_energy_threshold : float + Below what energy (in GeV) to extrapolate + Defaults to 100. CSMS not considered reliable below 50-100 GeV + + Notes + ----- + Requires the events have the following keys :: + true_energy + Neutrino energy in GeV + bjorken_y + Inelasticity + dis + 1 if event is DIS, else 0 + + """ + def __init__( + self, + extrapolation_type='constant', + extrapolation_energy_threshold=100*ureg["GeV"], + **std_kwargs, + ): + expected_params = ( + 'dis_csms', + ) + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + self.extrapolation_type = extrapolation_type + self.extrapolation_energy_threshold = extrapolation_energy_threshold + +
+[docs] + @profile + def setup_function(self): + + extrap_dict = from_file('cross_sections/tot_xsec_corr_Q2min1_isoscalar.pckl') + + # load splines + wf_nucc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_CC_flat.pckl') + wf_nubarcc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_CC_flat.pckl') + wf_nunc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_NC_flat.pckl') + wf_nubarnc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_NC_flat.pckl') + + # set this to events mode, as we need the per-event info to calculate these weights + self.data.representation = 'events' + + lgE_min = np.log10(self.extrapolation_energy_threshold.m_as("GeV")) + + for container in self.data: + + # creat keys for external dict + + if container.name.endswith('_cc'): + current = 'CC' + elif container.name.endswith('_nc'): + current = 'NC' + else: + raise ValueError('Can not determine whether container with name "%s" is pf type CC or NC based on its name'%container.name) + nu = 'Nu' if container['nubar'] > 0 else 'NuBar' + + lgE = np.log10(container['true_energy']) + bjorken_y = container['bjorken_y'] + dis = container['dis'] + + w_tot = np.ones_like(lgE) + + valid_mask = lgE >= lgE_min + extrapolation_mask = ~valid_mask + + # + # Calculate variation of total cross section + # + + poly_coef = extrap_dict[nu][current]['poly_coef'] + lin_coef = extrap_dict[nu][current]['linear'] + + if self.extrapolation_type == 'higher': + w_tot = np.polyval(poly_coef, lgE) + else: + w_tot[valid_mask] = np.polyval(poly_coef, lgE[valid_mask]) + + if self.extrapolation_type == 'constant': + w_tot[extrapolation_mask] = np.polyval(poly_coef, lgE_min) # note Numpy broadcasts + elif self.extrapolation_type == 'linear': + w_tot[extrapolation_mask] = np.polyval(lin_coef, lgE[extrapolation_mask]) + else: + raise ValueError('Unknown extrapolation type "%s"'%self.extrapolation_type) + + # make centered arround 0, and set to 0 for all non-DIS events + w_tot = (w_tot - 1) * dis + + container["dis_correction_total"] = w_tot + container.mark_changed('dis_correction_total') + + # + # Calculate variation of differential cross section + # + + w_diff = np.ones_like(lgE) + + if current == 'CC' and container['nubar'] > 0: + weight_func = wf_nucc + elif current == 'CC' and container['nubar'] < 0: + weight_func = wf_nubarcc + elif current == 'NC' and container['nubar'] > 0: + weight_func = wf_nunc + elif current == 'NC' and container['nubar'] < 0: + weight_func = wf_nubarnc + + w_diff[valid_mask] = weight_func.ev(lgE[valid_mask], bjorken_y[valid_mask]) + w_diff[extrapolation_mask] = weight_func.ev(lgE_min, bjorken_y[extrapolation_mask]) + + # make centered arround 0, and set to 0 for all non-DIS events + w_diff = (w_diff - 1) * dis + + container["dis_correction_diff"] = w_diff + container.mark_changed('dis_correction_diff')
+ + +
+[docs] + @profile + def apply_function(self): + dis_csms = self.params.dis_csms.m_as('dimensionless') + + for container in self.data: + apply_dis_sys( + container['dis_correction_total'], + container['dis_correction_diff'], + FTYPE(dis_csms), + out=container['weights'], + ) + container.mark_changed('weights')
+
+ + + +FX = 'f8' if FTYPE == np.float64 else 'f4' + +@guvectorize([f'({FX}, {FX}, {FX}, {FX}[:])'], '(),(),()->()', target=TARGET) +def apply_dis_sys( + dis_correction_total, + dis_correction_diff, + dis_csms, + out, +): + out[0] *= max(0, (1. + dis_correction_total * dis_csms) * (1. + dis_correction_diff * dis_csms) ) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/xsec/genie_sys.html b/_modules/pisa/stages/xsec/genie_sys.html new file mode 100644 index 000000000..a0de2661f --- /dev/null +++ b/_modules/pisa/stages/xsec/genie_sys.html @@ -0,0 +1,228 @@ + + + + + + pisa.stages.xsec.genie_sys — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.xsec.genie_sys

+"""
+Stage to apply pre-calculated Genie uncertainties
+"""
+
+from __future__ import absolute_import, print_function, division
+
+__all__ = ["genie_sys", "apply_genie_sys"] #, "SIGNATURE"
+
+import re
+import numpy as np
+#from numba import guvectorize
+
+from pisa import FTYPE, TARGET
+from pisa.core.stage import Stage
+from pisa.utils.profiler import profile, line_profile
+from pisa.utils.numba_tools import WHERE
+from pisa.utils.log import logging
+
+
+[docs] +class genie_sys(Stage): # pylint: disable=invalid-name + """ + Stage to apply pre-calculated Genie systematics. + + Parameters + ---------- + params + Must contain :: + + parameters specified in interactions (dimensionless) + + Notes + ----- + Requires the events have the following keys for each included interaction :: + + linear_fit_{name} + Genie linear coefficient for interaction {name} + quad_fit_{name} + Genie quadratic coefficient for interaction {name} + + """ + def __init__( + self, + interactions="Genie_Ma_QE, Genie_Ma_RES", + names="maccqe, maccres", + **std_kwargs, + ): + interactions = re.split(r'\W+', interactions) + names = re.split(r'\W+', names) + assert len(interactions) == len(names), 'Specify a name for each interaction' + + expected_params = tuple(interactions) + self.interactions = interactions + self.names = names + + # init base class + super().__init__( + expected_params=expected_params, + **std_kwargs, + ) + + +
+[docs] + def setup_function(self): + ''' + Check the range of the parameter in the analysis. Send a warning if these are beyond +- 2sigma + ''' + for I in self.interactions: + if self.params[I].range[0]<-2. or self.params[I].range[1]>2.: + logging.warn(I+' parameter bounds have been set larger than the range used to produce interpolation points ([-2.,2]). This will void the warranty...')
+ + + +
+[docs] + def apply_function(self): + genie_params = [] + for I in self.interactions: + exec("genie_params.append(self.params.%s.m_as('dimensionless'))"%(I)) + + for container in self.data: + linear_fits, quad_fits = [], [] + for i in range(len(self.interactions)): + linear_fits.append(container['linear_fit_'+self.names[i]]) + quad_fits.append(container['quad_fit_'+self.names[i]]) + + apply_genie_sys( + genie_params, + linear_fits, + quad_fits, + out=container['weights'], + ) + + # + # In cases where the axial mass is extrapolated outside + # the range of the points used in the interpolation, some + # weights become negative. These are floored at 0. + # + container.mark_changed('weights')
+
+ + + + +#if FTYPE == np.float64: +# SIGNATURE = '(f8, f8, f8, f8[:])' +#else: +# SIGNATURE = '(f4, f4, f4, f4[:])' +#@guvectorize([SIGNATURE], '(),(),()->()', target=TARGET) +
+[docs] +def apply_genie_sys( + genie_params, + linear_fits, + quad_fits, + out, +): + factor = 1 + for i in range(len(genie_params)): + factor *= 1. + (linear_fits[i] + quad_fits[i] * genie_params[i]) * genie_params[i] + out *= np.maximum(0, factor)
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/stages/xsec/nutau_xsec.html b/_modules/pisa/stages/xsec/nutau_xsec.html new file mode 100644 index 000000000..4e4a037fc --- /dev/null +++ b/_modules/pisa/stages/xsec/nutau_xsec.html @@ -0,0 +1,232 @@ + + + + + + pisa.stages.xsec.nutau_xsec — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.stages.xsec.nutau_xsec

+"""
+A stage to apply nutau cross-section uncertainties as implemented in
+https://github.com/marialiubarska/nutau_xsec
+It interpolates between different nutau CC cross section models as compared in this 
+paper:
+https://arxiv.org/pdf/1008.2984.pdf?fname=cm&font=TypeI
+"""
+
+import numpy as np
+import pickle
+from numba import guvectorize
+
+from pisa.core.stage import Stage
+from pisa.utils.resources import open_resource
+from pisa.utils import vectorizer
+from pisa import FTYPE, TARGET
+from pisa.utils.numba_tools import WHERE
+
+
+
+[docs] +class nutau_xsec(Stage): + """ + Nu_tau cross-section correction to interpolate between different nutau CC + cross-section models. This requires the interpolated file produced by + Maria Liubarska: https://github.com/marialiubarska/nutau_xsec + + Parameters + ---------- + xsec_file : (string) + Path to pickled interpolated function. Default is included in PISA in + `pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl` + + params : ParamSet or sequence with which to instantiate a ParamSet. + Expected params .. :: + + scale : quantity (dimensionless) + Scaling between different cross-section models. The range [-1, 1] + covers all models tested in the paper. + + """ + def __init__( + self, + xsec_file="cross_sections/interp_nutau_xsec_protocol2.pckl", + **std_kwargs, + ): + + expected_params = ("nutau_xsec_scale") + + # init base class + super(nutau_xsec, self).__init__( + expected_params=expected_params, + **std_kwargs, + ) + + self.xsec_file = xsec_file + +
+[docs] + def setup_function(self): + with open_resource(self.xsec_file, mode="rb") as fl: + interp_dict = pickle.load(fl, encoding='latin1') + interp_nutau = interp_dict["NuTau"] + interp_nutaubar = interp_dict["NuTauBar"] + + self.data.representation = self.calc_mode + for container in self.data: + if container.name == "nutau_cc": + energy = container["true_energy"] + func = interp_nutau(energy) + # Invalid values of the function occur below the tau production + # threshold. For those values, we put in negative infinity, which will + # cause them to be clamped to zero when the weights are calculated. + func[~np.isfinite(func)] = -np.inf + container["nutau_xsec_func"] = func + elif container.name == "nutaubar_cc": + energy = container["true_energy"] + func = interp_nutaubar(energy) + func[~np.isfinite(func)] = -np.inf + container["nutau_xsec_func"] = func + + self.data.representation = self.apply_mode + for container in self.data: + if container.name in ["nutau_cc", "nutaubar_cc"]: + container["nutau_xsec_scale"] = np.empty(container.size, dtype=FTYPE)
+ + +
+[docs] + def compute_function(self): + scale = self.params.nutau_xsec_scale.value.m_as('dimensionless') + for container in self.data: + if container.name in ["nutau_cc", "nutaubar_cc"]: + calc_scale_vectorized( + container["nutau_xsec_func"], + FTYPE(scale), + out=container["nutau_xsec_scale"] + )
+ + +
+[docs] + def apply_function(self): + for container in self.data: + if container.name in ["nutau_cc", "nutaubar_cc"]: + container["weights"] *= container["nutau_xsec_scale"]
+
+ + +# vectorized function to calculate 1 + f(E)*scale +# must be outside class +if FTYPE == np.float64: + FX = 'f8' + IX = 'i8' +else: + FX = 'f4' + IX = 'i4' +signature = f'({FX}[:], {FX}, {FX}[:])' +@guvectorize([signature], '(),()->()', target=TARGET) +def calc_scale_vectorized(func, scale, out): + # weights that would come out negative are clamped to zero + if func[0] * scale > -1.: + out[0] = 1. + func[0] * scale + else: + out[0] = 0. + + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/barlow.html b/_modules/pisa/utils/barlow.html new file mode 100644 index 000000000..b4796ff14 --- /dev/null +++ b/_modules/pisa/utils/barlow.html @@ -0,0 +1,443 @@ + + + + + + pisa.utils.barlow — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.barlow

+#!/usr/bin/python
+"""
+`Likelihoods` class for computing Poisson and Barlow likelihoods.
+
+The Poisson likelihood assumes the template being compared against is the
+perfect expectation, while the Barlow likelihood accounts for the template
+being imperfect due to being generated from finite Monte Carlo statistics.
+"""
+
+
+from __future__ import absolute_import, division, print_function
+
+from copy import copy
+import sys
+
+import numpy as np
+from scipy.optimize import minimize
+
+__all__ = ['Likelihoods']
+__author__ = 'Michael Larson'
+__email__ = 'mlarson@nbi.ku.dk'
+__date__ = '2016-03-14'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+#------------------------------------------------------------------------------
+# The following is adapted from user Alfe, https://stackoverflow.com/a/16787722
+def handle_uncaught_exception(exctype, value, trace):
+    """Exception hook that allows for exiting with a specified exit code.
+
+    Replaces sys.exithook; see :class:`ExitCodeException`
+    """
+    OLD_EXCEPTHOOK(exctype, value, trace)
+    if hasattr(value, 'exitcode'):
+        sys.exit(value.exitcode)
+
+sys.excepthook, OLD_EXCEPTHOOK = handle_uncaught_exception, sys.excepthook
+#------------------------------------------------------------------------------
+
+
+class ShapeError(Exception):
+    exitcode = 100
+
+class NaNValueError(Exception):
+    exitcode = 101
+
+class ArgValueError(Exception):
+    exitcode = 102
+
+
+
+[docs] +class Likelihoods(object): + """ +A class to handle the likelihood calculations in OscFit. It can +be used in other poisson binned-likelihood calculators as well. +The class includes two likelihood spaces: the Poisson and the +Barlow LLH. + +The Poisson likelihood is the ideal case and assumes infinite +statistical accuracy on the Monte Carlo distributions. This is +the simple case and has been used in the past for analyses, but +should not be used if there's a significant statistical error on +one of the samples. + +The Barlow likelihood is an implementation of the likelihood model +given in doi:10.1016/0010-4655(93)90005-W ("Fitting using finite +Monte Carlo samples" by Barlow and Beeston). This requires the +unweighted distributions of the MC and involves assuming that each +MC samples is drawn from an underlying "true" expectation distribution +which should be fit. This gives (number of bins)x(number of samples) +new parameters to fit and allows the shape of the distributions to +fluctuate in order to fit both the observed MC and the observed +data. This gives a more informed result and allows one to estimate +the effect of the finite MC samples. + +To use this, you need to run set_data, set_mc, and the set_unweighted +functions. + +.. important:: the `set_mc` function takes a histogram of the average + weight per event for each bin! not the total weighted histogram! + +Simply calling the get_llh function after these will return the +best fit LLH for your chosen likelihood function. The function takes +the name of the likelihood space ("Poisson" or "Barlow"). You can +retrieve the best fit weighted plots using the get_plot (total best-fit +histogram including all samples) and the get_single_plots (the list +of best-fit weighted histograms for each sample). + """ + mc_histograms = None + unweighted_histograms = None + data_histogram = None + shape = None + bestfit_plots = None + current_bin = None + + def __init__(self): + """Instantiate and set all of the defaults""" + self.mc_histograms = None + self.unweighted_histograms = None + self.data_histogram = None + self.shape = None + self.bestfit_plots = None + self.current_bin = None + +
+[docs] + def reset(self): + """Re-instantiate so that we can reuse the object""" + self.__init__()
+ + +
+[docs] + def set_data(self, data_histogram): + """Set up the data histogram. This histogram is flattened in order to + make the looping later on a bit simpler to handle.""" + if not self.shape: + self.shape = data_histogram.shape + + if data_histogram.shape != self.shape: + raise ShapeError( + "Data histogram has shape {} but expected histogram shape {}" + .format(data_histogram.shape, self.shape), + exitcode=100 + ) + + self.data_histogram = data_histogram.flatten()
+ + +
+[docs] + def set_mc(self, mc_histograms): + """Set up the MC histogram. Each histogram is flattened in order to + make the looping later on a bit simpler to handle. The values in each + bin should correspond to the weight-per-event in that bin, NOT the + total weight in that bin! + + Make sure you don't have any nulls here. + + """ + if not self.shape: + self.shape = mc_histograms.values()[0].shape + + if np.any(np.isnan(mc_histograms)): + raise NaNValueError( + "At least one bin in your MC histogram is NaN! Take a look" + " and decide how best to handle this", + exitcode=101 + ) + + flat_histograms = [] + for j in range(mc_histograms.shape[0]): + if not self.shape == mc_histograms[j].shape: + raise ShapeError( + "MC Histogram {} has shape {} but expected shape {}" + .format(j, mc_histograms[j].shape, self.shape) + ) + + flat_histograms.append(mc_histograms[j].flatten()) + + self.mc_histograms = np.array(flat_histograms)
+ + +
+[docs] + def set_unweighted(self, unweighted_histograms): + """Save the unweighted distributions in the MC. These can include 0s.""" + if not self.shape: + self.shape = unweighted_histograms.values()[0].shape + + flat_histograms = [] + for j in range(unweighted_histograms.shape[0]): + if not self.shape == unweighted_histograms[j].shape: + raise ShapeError( + "Unweighted histogram {} has shape {} but expected shape" + " {}" + .format(j, unweighted_histograms[j].shape, self.shape) + ) + flat_histograms.append(unweighted_histograms[j].flatten()) + + self.unweighted_histograms = np.array(flat_histograms)
+ + +
+[docs] + def get_plot(self): + """Get the total weighted best-fit histogram post-fit.""" + if self.bestfit_plots is None: + return + + result = np.sum(self.get_single_plots(), axis=0) + return result
+ + +
+[docs] + def get_single_plots(self): + """Get the individual weighted best-fit histograms post-fit.""" + if self.bestfit_plots is None: + return None + result = np.multiply(self.mc_histograms, self.bestfit_plots) + target_shape = result.shape[0], self.shape[0], self.shape[1] + return np.reshape(result, target_shape)
+ + +
+[docs] + def get_llh(self, llh_type): + """Calculate the likelihood given the data, average weights, and the + unweighted histograms. You can choose between "Poisson" and "Barlow" + likelihoods at the moment. + + If using the "Barlow" LLH, note that the method is picked to be Powell + with 25 iterations maximum per step. This is not optimized at all and + was explicitly chosen simply because it "worked". This doesn't work + with the bounds set in the normal way, so the positive-definiteness of + the rates is enforced in the get_llh_barlow_bin method. + + """ + llh_type = llh_type.lower() + self.bestfit_plots = copy(self.unweighted_histograms) + self.current_bin = 0 + + # The simplest case: the Poisson binned likelihood + if llh_type == "poisson": + poisson_llh = self.get_llh_poisson() + return poisson_llh + + # The more complicated case: The Barlow LLH + # This requires a separate minimization step in each bin to estimate + # the expected rate in each bin from each MC sample using constraints + # from the data and the observed MC distribution. + elif llh_type == "barlow": + llh = 0 + for bin_n in range(len(self.data_histogram)): + self.current_bin = bin_n + bin_result = minimize( + fun=self.get_llh_barlow_bin, + x0=self.bestfit_plots[:, bin_n], + method="Powell", + options={'maxiter': 25, 'disp': False} + ) + self.bestfit_plots[:, bin_n] = bin_result.x + llh += bin_result.fun + + self.current_bin = None + return llh + + raise ArgValueError( + 'Unknown `llh_type` "{}". Choose either "Poisson" (ideal) or' + ' "Barlow" (including MC statistical errors).' + .format(llh_type) + )
+ + +
+[docs] + def get_llh_barlow_bin(self, a_i): + """The Barlow LLH finds the best-fit "expected" MC distribution using + both the data and observed MC as constraints. Each bin is independent + in this calculation, since the assumption is that there are no + correlations between bins. This likely leads to a somewhat worse limit + than you might get otherwise, but at least its conservative. + + If you have a good idea for how to extend this to include bin-to-bin, + let me know and I can help implement it. + + """ + if any([a_i[j] < 0 for j in range(len(a_i))]): + return 1e10 + i = self.current_bin + di = self.data_histogram[i] + fi = np.sum(np.multiply(self.mc_histograms[:, i], a_i)) + ai = self.unweighted_histograms[:, i] + + llh = 0 + + # This is the standard Poisson LLH comparing data to the total weighted + # MC + if fi > 0: + llh += di * np.log(fi) - fi + if di > 0: + llh -= di * np.log(di) - di + + # The heart of the Barlow LLH. Fitting the a_i (expected number of + # events in the MC sample for this bin) using the observed MC events as + # a constraint. + cut = a_i > 0 + #a_i[a_i <= 0] = 10e-10 + #llh += np.sum(np.dot(ai, np.log(a_i)) - np.sum(a_i)) + llh += np.sum(np.dot(ai[cut], np.log(a_i[cut])) - np.sum(a_i[cut])) + + # This is simply a normalization term that helps by centering the LLH + # near 0 + # It's an expansion of Ln(ai!) using the Sterling expansion + cut = ai > 0 + llh -= np.sum(np.dot(ai[cut], np.log(ai[cut])) - np.sum(ai[cut])) + + return -llh
+ + +
+[docs] + def get_llh_poisson(self): + """The standard binned-poisson likelihood comparing the weighted MC + distribution to the data, ignoring MC statistical uncertainties.""" + di = self.data_histogram + fi = np.sum(np.multiply(self.mc_histograms, + self.unweighted_histograms), axis=0) + llh = 0 + + # The normal definition of the LLH, dropping the Ln(di!) constant term + cut = fi > 0 + llh += np.sum(di[cut] * np.log(fi[cut]) - fi[cut]) + + # This is simply a normalization term that helps by centering the LLH + # near 0 + # It's an expansion of Ln(di!) using the Sterling expansion + cut = di > 0 + llh -= np.sum(di[cut] * np.log(di[cut]) - di[cut]) + + return -llh
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/callable.html b/_modules/pisa/utils/callable.html new file mode 100644 index 000000000..ae5efa74a --- /dev/null +++ b/_modules/pisa/utils/callable.html @@ -0,0 +1,443 @@ + + + + + + pisa.utils.callable — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.callable

+"""
+This is used to define a serializable object used for functions assigned to the DerivedParams 
+
+These can be constructed and evaluated symbolically and procedurally. 
+In principle, we may even be able to include a filepath to a seriialized Funct object such that the pipeline configs can include definitions for these therein 
+
+Contains
+    OPS - an Enum listing recognized operations 
+    TrigOps - some definitions for handling some of the trig functions, shared by Vars and Functs 
+    Var - a class for representing variables 
+    Funct - a series of operations done representing the functions 
+
+Uses - quite simple! 
+
+create some vars and do math on them 
+
+x = Var('x')
+y = Var('y')
+
+function = sin(x**2) + 3*cos(y+1)**2 
+
+The object `function` is now callable with keyword arguments passed to the instantiated `Vars`
+"""
+# from typing import Callable
+from pisa.utils import jsons
+from enum import Enum
+
+import math
+import numpy as np
+
+
+[docs] +class OPS(Enum): + """ + Enumerate different operations so that the Funct class can do math + """ + ADD = 0 + MUL = 1 + POW = 2 + SIN = 3 + COS = 4 + TAN = 5 + + @property + def state(self): + return self.serializable_state + + @property + def serializable_state(self): + return {"ops":self.value, "kind":"ops"} + +
+[docs] + @classmethod + def from_state(cls, state): + return cls(state["ops"])
+ + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, filename): + """Instantiate a new Param from a JSON file""" + state = jsons.from_json(filename=filename) + return OPS(state["ops"])
+
+ + + + +
+[docs] +class TrigOps: + """ + These are all used by both the Var and Funct classes, so there's some fun python hierarchy stuff going on instead + """ + @property + def sin(self): + new_op = Funct(self) + new_op.add_opp(OPS.SIN, 0.0) + return new_op + + @property + def cos(self): + new_op = Funct(self) + new_op.add_opp(OPS.COS, 0.0) + return new_op + + @property + def tan(self): + new_op = Funct(self) + new_op.add_opp(OPS.TAN, 0.0) + return new_op
+ + +
+[docs] +class Var(TrigOps): + """ + A variable + + These are a lot like functions in how they are combined, but instead evaluate simply to one of the keyword arguments passed to Functions + """ + # the id is used to assign unique names to each variable in the event that the user does not manually specify a name + _ids = 0 + def __init__(self, name=None): + if name is None: + self._name = "arg"+str(Var._ids) + else: + self._name = name + Var._ids+=1 + + @property + def state(self): + return { + "kind":"var", + "name": self._name + } + + @property + def serializable_state(self): + return self.state + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, filename): + """Instantiate a new Param from a JSON file""" + state = jsons.from_json(filename=filename) + return Var.from_state(state)
+ + +
+[docs] + @classmethod + def from_state(cls, state): + return cls(state["name"])
+ + + @property + def name(self): + return self._name + + def __call__(self, **kwargs): + # NOTE we implicitly down-cast everything to a float/int here! + + value = kwargs[self._name] + if type(value)==list: + raise ValueError("Lists aren't supported. This is probably wrong") + return value.value.m + + def __add__(self, other): + new = Funct(self) + new = new + other + return new + + def __mul__(self, other): + new = Funct(self) + new = new * other + return new + + def __rmul__(self, other): + return self.__mul__(other) + + def __pow__(self, other): + new = Funct(self) + new = new ** other + return new
+ + +
+[docs] +class Funct(TrigOps): + """ + Functions are constructed as a series of operations one to some starting value. + The starting value can be whatever - a value, function or variable + """ + + def __init__(self, first_var): + self._ops = [(OPS.ADD, first_var)] + + def __call__(self,**kwargs): + value = 0.0 + for op in self._ops: + if op[0] == OPS.ADD: + if isinstance(op[1],(Funct, Var)): + value += op[1](**kwargs) + else: + value += op[1] + elif op[0] == OPS.MUL: + if isinstance(op[1], (Funct, Var)): + value *= op[1](**kwargs) + else: + value *= op[1] + elif op[0] == OPS.POW: + if isinstance(op[1], (Funct, Var)): + value **= op[1](**kwargs) + else: + value **= op[1] + elif op[0] == OPS.SIN: + if isinstance(value, np.ndarray): + value = np.sin(value) + else: + value = math.sin(value) # significantly faster for non-arrays + elif op[0] == OPS.COS: + if isinstance(value, np.ndarray): + value = np.cos(value) + else: + value = math.cos(value) + elif op[0] == OPS.TAN: + if isinstance(value, np.ndarray): + value = np.tan(value) + else: + value = math.tan(value) + + return value + +
+[docs] + def add_opp(self, kind:OPS, other): + self._ops.append((kind, other))
+ + + def __add__(self, other): + self.add_opp(OPS.ADD, other) + return self + + def __mul__(self, other): + self.add_opp(OPS.MUL, other) + return self + + def __rmul__(self, other): + return self.__mul__(other) + + def __pow__(self, other): + self.add_opp(OPS.POW, other) + return self + + ############## some functions to handle serializing these objects + @property + def state(self): + statekind = {} + statekind["kind"] ="Funct" + statekind["ops"]=[] + for entry in self._ops: + if isinstance(entry[1], (Funct, Var, OPS)): + sub_state = entry[1].state + else: + sub_state = entry[1] + + statekind["ops"].append([entry[0].serializable_state, sub_state]) + + return statekind + + @property + def serializable_state(self): + return self.state + + +
+[docs] + @classmethod + def from_state(cls, state): + new_op = cls(0.0) + statedict = state["ops"] + for entry in statedict: + op = OPS.from_state(entry[0]) + if isinstance(entry[1], dict): + if entry[1]["kind"]=="Funct": + entry_class = Funct + elif entry[1]["kind"]=="var": + entry_class = Var + elif entry[1]["kind"]=="ops": + entry_class = OPS + else: + raise ValueError("Cannot de-serialzie {}".format(entry[1]["kind"])) + + value = entry_class.from_state(entry[1]) + else: + value = entry[1] + new_op.add_opp(op, value) + return new_op
+ + + +
+[docs] + def to_json(self, filename, **kwargs): + """Serialize the state to a JSON file that can be instantiated as a new + object later. + """ + jsons.to_json(self.serializable_state, filename=filename, **kwargs)
+ + +
+[docs] + @classmethod + def from_json(cls, filename): + """Instantiate a new Param from a JSON file""" + state = jsons.from_json(filename=filename) + return Funct.from_state(state)
+
+ + +# some macros for readability +
+[docs] +def sin(target:Funct): + return target.sin
+ +
+[docs] +def cos(target:Funct): + return target.cos
+ +
+[docs] +def tan(target:Funct): + return target.tan
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/comparisons.html b/_modules/pisa/utils/comparisons.html new file mode 100644 index 000000000..4fd6cf474 --- /dev/null +++ b/_modules/pisa/utils/comparisons.html @@ -0,0 +1,1111 @@ + + + + + + pisa.utils.comparisons — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.comparisons

+"""
+Utilities for comparing things.
+
+`recursiveEquality` and `recursiveAllclose` traverse into potentially nested
+datstructures and compare all elements for equality.
+`normQuant` performs the same kind of traversal, but returns a normalized
+version of the input object whereby "essentially-equal" things are returned as
+"actually-equal" objects.
+
+These functions are at the heart of hashing behaving as one expects, and this
+in turn is essential for caching to work correctly.
+
+.. important:: Read carefully how each function in this module defines
+   "equality" for various datatypes so you understand what two things being
+   "equal" based upon these functions *actually* means.
+
+   E.g., (nan == nan) == True, uncorrelated uncertainties are equal if both
+   their nominal values and standard deviations are equal regardless if they
+   come from independent random variables, etc.
+"""
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Iterable, Iterator, Mapping, Sequence
+from collections import OrderedDict
+from numbers import Number
+import re
+from six import string_types
+
+import numpy as np
+import pint
+from uncertainties.core import AffineScalarFunc, Variable
+from uncertainties import ufloat
+from uncertainties import unumpy as unp
+
+from pisa import ureg, FTYPE, HASH_SIGFIGS
+from pisa.utils.log import logging, set_verbosity
+
+
+__all__ = [
+    'FTYPE_PREC',
+    'EQUALITY_SIGFIGS',
+    'EQUALITY_PREC',
+    'ALLCLOSE_KW',
+    'NP_TYPES',
+    'SEQ_TYPES',
+    'MAP_TYPES',
+    'COMPLEX_TYPES',
+    'isvalidname',
+    'isscalar',
+    'isbarenumeric',
+    'isunitless',
+    'recursiveEquality',
+    'recursiveAllclose',
+    'normQuant',
+    'interpret_quantity',
+    'test_isscalar',
+    'test_isunitless',
+    'test_recursiveEquality',
+    'test_normQuant',
+]
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+FTYPE_PREC = np.finfo(FTYPE).eps
+"""Machine precision ("eps") for PISA's FTYPE (float datatype)"""
+
+FTYPE_SIGFIGS = int(np.abs(np.ceil(np.log10(FTYPE_PREC))))
+"""Significant figures possible given PISA's FTYPE"""
+
+EQUALITY_SIGFIGS = min(HASH_SIGFIGS, FTYPE_SIGFIGS)
+"""Significant figures for performing equality comparisons"""
+
+EQUALITY_PREC = 10**-EQUALITY_SIGFIGS
+"""Precision ("rtol") for performing equality comparisons"""
+
+ALLCLOSE_KW = dict(rtol=EQUALITY_PREC, atol=FTYPE_PREC, equal_nan=True)
+"""Keyword args to pass to all calls to numpy.allclose"""
+
+logging.trace(
+    "HASH_SIGFIGS=%d, FTYPE_SIGFIGS=%d, EQUALITY_PREC=%s, FTYPE_PREC=%s, ALLCLOSE_KW=%s"
+    % (HASH_SIGFIGS, FTYPE_SIGFIGS, EQUALITY_PREC, FTYPE_PREC, ALLCLOSE_KW)
+)
+
+# Derive the following number via:
+# >>> from sympy import log, N
+# >>> str(N(log(2, 10), 40))
+LOG10_2 = FTYPE('0.3010299956639811952137388947244930267682')
+
+NP_TYPES = (np.ndarray, np.matrix)
+SEQ_TYPES = (Sequence, np.ndarray, np.matrix)
+MAP_TYPES = (Mapping,)
+COMPLEX_TYPES = NP_TYPES + SEQ_TYPES + MAP_TYPES
+
+
+
+[docs] +def isvalidname(x): + """Name that is valid to use for a Python variable""" + return re.compile(r'\W|^(?=\d)').match(x) is None
+ + + +
+[docs] +def isscalar(x): + """Check if input is a scalar object. + + Best check found for now as to scalar-ness (works for pint, + uncertainties, lists, tuples, numpy arrays, ...) but not tested against all + things. + + See Also + -------- + numpy.isscalar + + """ + return ( + not (hasattr(x, 'shape') or isinstance(x, (Iterator, Mapping, Sequence))) + or np.isscalar(x) + )
+ + + +
+[docs] +def isbarenumeric(x): + """Check if input is a numerical datatype (including arrays of numbers) but + without units. Note that for these purposes, booleans are *not* considered + numerical datatypes. + + """ + is_bare_numeric = False + if isinstance(x, ureg.Quantity): + is_bare_numeric = False + elif isinstance(x, np.ndarray): + if x.dtype.type not in ( + np.bool_, np.bool8, np.object0, np.object_ + ): + is_bare_numeric = True + elif isinstance(x, Number) and not isinstance(x, bool): + is_bare_numeric = True + return is_bare_numeric
+ + + +
+[docs] +def isunitless(x): + """Check if input is unitless. Only the first scalar element of an Iterable + (or arbitrarily nested Iterables) is checked if it has units. + + Strings and bools are considered to be unit-less. + + Parameters + ---------- + x : object + + Returns + ------- + isunitless : bool + + Raises + ------ + TypeError if a Mapping is encountered + + """ + if isinstance(x, ureg.Quantity): + return False + + if isinstance(x, Mapping): + raise TypeError("Cannot test a Mapping (`x` is of type {})".format(type(x))) + + if not isinstance(x, string_types) and isinstance(x, Iterable): + return isunitless(next(iter(x))) + + return True
+ + + +
+[docs] +def recursiveEquality(x, y, allclose_kw=ALLCLOSE_KW): + """Recursively verify equality between two objects `x` and `y`. + + Parameters + ---------- + x, y + Objects to be compared + + Notes + ----- + Possibly unintuitive behaviors: + * Sequences of any type evaluate equal if their contents are the same. + E.g., a list can equal a tuple. + + * Mappings of any type evaluate equal if their contents are the same. + E.g. a dict can equal an OrderedDict. + + * nan SHOULD equal nan, +inf SHOULD equal +inf, and -inf SHOULD equal -inf + ... but this ***only*** holds true (as of now) if those values are in + numpy arrays! (TODO!) + + * Two pint units with same __repr__ but that were derived from different + unit registries evaluate to be equal. (This is contrary to pint's + implementation of equality comparisons, which is careful in case a + unit is defined differently in different registries. We'll assume this + isn't done here in PISA, until a use case arises where this is no + longer a good assumption.) + + * Two pint units that are compatible but different (even just in + magnitude prefix) evaluate to be unequal. + + This behavior is chosen for the case where numbers are given + independently of their units, and hence the automatic conversion + facility available for comparing pint quantities is not available. + The only reliable way to test equality for these "less intelligent" + objects is to ensure that both the numerical values are exactly equal + and that the units are exactly equal; the latter includes order of + magnitude prefixes (micro, milli, ..., giga, etc.). + + """ + # pylint: disable=protected-access + + # NOTE: The order in which types are compared below matters, so change + # order carefully. + + if hasattr(x, 'hashable_state'): + if not hasattr(y, 'hashable_state'): + return False + return recursiveEquality(x.hashable_state, y.hashable_state) + + # pint units; allow for comparing across different regestries, for + # pragmatic (but possibly not the most correct) reasons... + elif isinstance(x, pint.unit._Unit): + if not isinstance(y, pint.unit._Unit): + logging.trace('type(x)=%s but type(y)=%s', type(x), type(y)) + if repr(x) != repr(y): + logging.trace('x:\n%s', x) + logging.trace('y:\n%s', y) + return False + + # pint quantities + elif isinstance(x, pint.quantity._Quantity): + if not isinstance(y, pint.quantity._Quantity): + logging.trace('type(x)=%s but type(y)=%s', type(x), type(y)) + return False + + # use a string for `x`'s units so we can compare across unit + # registries; this should do what we want in PISA, but note that in + # general this can be problematic since units can be redefined in + # different unit registries + xunit = str(x.units) + try: + converted_y = y.to(xunit) + except pint.DimensionalityError: + logging.trace('Incompatible units: x.units=%s, y.units=%s', + x.units, y.units) + return False + + return recursiveEquality(x.magnitude, converted_y.magnitude) + + # Simple things can be compared directly + elif ( + isinstance(x, str) + or isinstance(y, str) + or not (isinstance(x, COMPLEX_TYPES) or isinstance(y, COMPLEX_TYPES)) + ): + if x != y: + is_eq = False + try: + if np.allclose(x, y, **allclose_kw): + is_eq = True + except TypeError: + pass + if not is_eq: + logging.trace('Simple types (type(x)=%s, type(y)=%s) not equal.', + type(x), type(y)) + logging.trace('x:\n%s', x) + logging.trace('y:\n%s', y) + return False + + # Numpy types + elif isinstance(x, NP_TYPES) or isinstance(y, NP_TYPES): + if np.shape(x) != np.shape(y): + logging.trace('shape(x): %s', np.shape(x)) + logging.trace('shape(y): %s', np.shape(y)) + return False + + if isinstance(x, NP_TYPES): + dtype = x.dtype.type + first_element = next(iter(x.flat)) + else: + dtype = y.dtype.type + first_element = next(iter(y.flat)) + + if issubclass(dtype, np.floating): + if not np.allclose(x, y, **allclose_kw): + logging.trace('x:\n%s', x) + logging.trace('y:\n%s', y) + return False + elif isinstance(first_element, (AffineScalarFunc, Variable)): + if not ( + np.allclose(unp.nominal_values(x), unp.nominal_values(y), **allclose_kw) + and np.allclose(unp.std_devs(x), unp.std_devs(y), **allclose_kw) + ): + return False + else: + if not np.all(x == y): + logging.trace('x:\n%s', x) + logging.trace('y:\n%s', y) + return False + + # dict + elif isinstance(x, Mapping): + if not isinstance(y, Mapping): + return False + xkeys = sorted(x.keys()) + if xkeys != sorted(y.keys()): + logging.trace('xkeys:\n%s', xkeys) + logging.trace('ykeys:\n%s', sorted(y.keys())) + return False + else: + for k in xkeys: + if not recursiveEquality(x[k], y[k]): + logging.trace('not equal found at key: "%s"', k) + return False + + # Non-numpy sequence + elif isinstance(x, Sequence): + if not isinstance(y, Sequence): + return False + if len(x) != len(y): + logging.trace('len(x): %s', len(x)) + logging.trace('len(y): %s', len(y)) + return False + else: + for xs, ys in zip(x, y): + if not recursiveEquality(xs, ys): + logging.trace('xs:\n%s', xs) + logging.trace('ys:\n%s', ys) + return False + + # Unhandled + else: + raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % + (type(x), str(x), str(y))) + + # Returns above only occur if comparisons evaluate to False; therefore, if + # you make it here, everything is equal. + return True
+ + + +# TODO: Get recursiveAllclose working as recursiveEquality does. + +
+[docs] +def recursiveAllclose(x, y, *args, **kwargs): + """Recursively verify close-equality between two objects x and y. If + structure is different between the two objects, returns False + + args and kwargs are passed into numpy.allclose() function + """ + # TODO: until the below has been verified, refuse to run + raise NotImplementedError('recursiveAllclose not implemented yet') + # None + if x is None: + if y is not None: + return False + # Scalar + elif isscalar(x): + if not isscalar(y): + return False + # np.allclose doesn't handle some dtypes + try: + eq = np.allclose(x, y, *args, **kwargs) + except TypeError: + eq = x == y + if not eq: + return False + # Dict + elif isinstance(x, dict): + if not isinstance(y, dict): + return False + xkeys = sorted(x.keys()) + if xkeys != sorted(y.keys()): + return False + for k in xkeys: + if not recursiveAllclose(x[k], y[k], *args, **kwargs): + return False + # Sequence + elif hasattr(x, '__len__'): + if len(x) != len(y): + return False + if isinstance(x, (list, tuple)): + # NOTE: A list is allowed to be allclose to a tuple so long + # as the contents are allclose + if not isinstance(y, list) or isinstance(y, tuple): + return False + for xs, ys in zip(x, y): + if not recursiveAllclose(xs, ys, *args, **kwargs): + return False + elif isinstance(x, np.ndarray): + # NOTE: A numpy array only evalutes to allclose if compared to + # another numpy array + if not isinstance(y, np.ndarray): + return False + # np.allclose doesn't handle arrays of some dtypes + # TODO: this can be rolled into the above clause, I think + try: + eq = np.allclose(x, y, *args, **kwargs) + except TypeError: + eq = np.all(x == y) + if not eq: + return False + else: + raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % + (type(x), str(x), str(y))) + else: + raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % + (type(x), str(x), str(y))) + # If you make it to here, must be close + return True
+ + + +# TODO: add an arg and logic to round to a number of significand *bits* (as +# opposed to digits) (or even a fixed number of bits that align with special +# floating point spec values -- like half, single, double) for more precise +# control (and possibly faster comp), esp. if we decide to move to FP32 or +# (even more critical) FP16? +
+[docs] +def normQuant(obj, sigfigs=None, full_norm=True): + """Normalize quantities such that two things that *should* be equal are + returned as identical objects. + + Handles floating point numbers, pint quantities, uncertainties, and + combinations thereof as standalone objects or in sequences, dicts, or numpy + ndarrays. Numerical precision issues and equal quantities represented in + differently-scaled or different systems of units come out identically. + + Outputs from this function (**not** the inputs) deemed to be equal by the + above logic will compare to be equal (via the `==` operator and via + `pisa.utils.comparisons.recursiveEquality`) and will also hash to equal + values (via `pisa.utils.hash.hash_obj`). + + Parameters + ---------- + obj + Object to be normalized. + + sigfigs : None or int > 0 + Number of digits to which to round numbers' significands; if None, do + not round numbers. + + full_norm : bool + If True, does full translation and normalization which is good across + independent invocations and is careful about normalizing units, etc. + If false, certain assumptions are made that modify the behavior + described below in the Notes section which help speed things up in the + case of e.g. a minimizer run, where we know certain things won't + change: + * Units are not normalized. They are assumed to stay the same from + run to run. + * sigfigs are not respected; full significant figures are returned + (since it takes time to round all values appropriately). + + Returns + ------- + normed_obj : object roughly of same type as input `obj` + Simple types are returned as the same type as at the input, Numpy + ndarrays are returned in the same shape and representation as the + input, Mappings (dicts) are returned as OrderedDict, and all other + sequences or iterables are returned as (possibly nested) lists. + + Notes + ----- + Conversion logic by `obj` type or types found within `obj`: + + * **Sequences and OrderedDicts** (but not numpy arrays) are iterated + through recursively. + * **Mappings without ordering** (e.g. dicts) are iterated through + recursively after sorting their keys, and are returned as + OrderedDicts (such that the output is always consistent when + serialized). + * **Sequences** (not numpy arrays) are iterated through recursively. + * **Numpy ndarrays** are treated as the below data types (according to the + array's dtype). + * **Simple objects** (non-floating point / non-sequence / non-numpy / etc.) + are returned unaltered (e.g. strings). + * **Pint quantities** (numbers with units): Convert to their base units. + * **Floating-point numbers** (including the converted pint quantities): + Round values to `sigfigs` significant figures. + * **Numbers with uncertainties** (via the `uncertainties` module) have + their nominal values rounded as above but their standard deviations are + rounded to the same order of magnitude (*not* number of significant + figures) as the nominal. + Therefore passing obj=10.23+/-0.25 and sigfigs=2 returns 10+/-0.0. + Note that **correlations are lost** in the outputs of this function, so + equality of the output requires merely having equal nomial values and + equal standard deviations. + The calculations leading to these equal numbers might have used + independent random variables to arrive at them, however, and so the + `uncertainties` module would have evaluated them to be unequal. [1] + + To achieve rounding that masks floating point precision issues, set + `sigfigs` to a value *less than* the number of decimal digits used for the + significand of the calculation floating point precision. + + For reference, the IEEE 754 floating point standard [2] uses the following: + + * FP16 (half precision): **3.31** significand decimal digits (11 bits) + * FP32 (single precision): **7.22** significand decimal digits (24 bits) + * FP64 (double precision): **15.95** significand decimal digits (53 bits) + * FP128 (quad precision): **34.02** significand decimal digits (113 bits) + + Logic for rounding the significand for numpy arrays was derived from [3]. + + References + ---------- + [1] https://github.com/lebigot/uncertainties/blob/master/uncertainties/test_uncertainties.py#L436 + + [2] https://en.wikipedia.org/wiki/IEEE_floating_point + + [3] http://stackoverflow.com/questions/18915378, answer by user BlackGriffin. + + Examples + -------- + Pint quantities hash to unequal values if specified in different scales or + different systems of units (even if the underlying physical quantity is + identical). + + >>> from pisa import ureg + >>> from pisa.utils.hash import hash_obj + >>> q0 = 1 * ureg.m + >>> q1 = 100 * ureg.cm + >>> q0 == q1 + True + >>> hash_obj(q0) == hash_obj(q1) + False + + Even the `to_base_units()` method fails for hashing to equal values, as + `q0` is a float and `q1` is an integer. + + >>> hash_obj(q0.to_base_units()) == hash_obj(q1.to_base_units()) + False + + Even if both quantities are floating point numbers, finite precision + effects in the `to_base_units` conversion can still cause two things which + we "know" are equal to evaluate to be unequal. + + >>> q2 = 0.1 * ureg.m + >>> q3 = 1e5 * ureg.um + >>> q2 == q3 + True + >>> q2.to_base_units() == q3.to_base_units() + False + + `normQuant` handles all of these issues given an appropriate `sigfigs` + argument. + + >>> q2_normed = normQuant(q2, sigfigs=12) + >>> q3_normed = normQuant(q3, sigfigs=12) + >>> q2_normed == q3_normed + True + >>> hash_obj(q2_normed) == hash_obj(q3_normed) + True + + """ + #logging.trace('-'*80) + #logging.trace('obj: %s', obj) + #logging.trace('type(obj): %s', type(obj)) + if not full_norm: + return obj + + # Nothing to convert for strings, None, ... + if isinstance(obj, str) or obj is None: + return obj + + round_result = False + if sigfigs is not None: + if not (int(sigfigs) == float(sigfigs) and sigfigs > 0): + raise ValueError('`sigfigs` must be an integer > 0.') + round_result = True + sigfigs = int(sigfigs) + + # Store kwargs for easily passing to recursive calls of this function + kwargs = dict(sigfigs=sigfigs, full_norm=full_norm) + + if hasattr(obj, 'normalized_state'): + return obj.normalized_state + + # Recurse into dict by its (sorted) keys (or into OrderedDict using keys in + # their defined order) and return an OrderedDict in either case. + if isinstance(obj, Mapping): + #logging.trace('Mapping') + if isinstance(obj, OrderedDict): + keys = obj.keys() + else: + keys = sorted(obj.keys()) + normed_obj = OrderedDict() + for key in keys: + normed_obj[key] = normQuant(obj[key], **kwargs) + return normed_obj + + # Sequences, etc. but NOT numpy arrays (or pint quantities, which are + # iterable) get their elements normalized and populated to a new list for + # returning. + # NOTE/TODO: allowing access across unit regestries for pragmatic (if + # incorrect) reasons... may want to revisit this decision. + # pylint: disable=protected-access + misbehaving_sequences = (np.ndarray, pint.quantity._Quantity) + if (isinstance(obj, (Iterable, Iterator, Sequence)) + and not isinstance(obj, misbehaving_sequences)): + #logging.trace('Iterable, Iterator, or Sequence but not ndarray or' + # ' _Qauantity') + return [normQuant(x, **kwargs) for x in obj] + + # Must be a numpy array or scalar if we got here... + + # NOTE: the order in which units (Pint module) and uncertainties + # (uncertainties module) are handled is crucial! Essentially, it appears + # that Pint is aware of uncertainties, but not vice versa. Hence the + # ordering and descriptions used below. + + # The outermost "wrapper" of a number or numpy array is its Pint units. If + # units are present, convert to base units, record the base units, and + # strip the units off of the quantity by replacing it with its magnitude + # (in the base units). + + has_units = False + if isinstance(obj, pint.quantity._Quantity): + #logging.trace('is a Quantity, converting to base units') + has_units = True + if full_norm: + obj = obj.to_base_units() + units = obj.units + obj = obj.magnitude + + # The next layer possible for a number or numpy array to have is + # uncertainties. If uncertainties are attached to `obj`, record a + # "snapshot" (losing correlations) of the standard deviations. Then replace + # the number or array solely with its nominal value(s). + + # NOTE: uncertainties.core.AffineScalarFunc includes such functions *and* + # uncertainties.core.Variable objects + + has_uncertainties = False + if isinstance(obj, AffineScalarFunc): + #logging.trace('type is AffineScalarFunc') + has_uncertainties = True + std_devs = obj.std_dev + obj = obj.nominal_value + elif isinstance(obj, np.ndarray) and np.issubsctype(obj, AffineScalarFunc): + #logging.trace('ndarray with subsctype is AffineScalarFunc') + has_uncertainties = True + std_devs = unp.std_devs(obj) + obj = unp.nominal_values(obj) + + # What is done below will convert scalars into arrays, so get this info + # before it is lost. + is_scalar = isscalar(obj) + + if round_result: + #logging.trace('rounding result') + # frexp returns *binary* fraction (significand) and *binary* exponent + bin_significand, bin_exponent = np.frexp(obj) + exponent = LOG10_2 * bin_exponent + exponent_integ = np.floor(exponent) + exponent_fract = exponent - exponent_integ + significand = bin_significand * 10**(exponent_fract) + obj = np.around(significand, sigfigs-1) * 10**exponent_integ + + # Now work our way *up* through the hierarchy: First, reintroduce + # uncertainties + + if has_uncertainties and round_result: + #logging.trace('uncertainties and rounding') + std_bin_significand, std_bin_exponent = np.frexp(std_devs) + std_exponent = LOG10_2 * std_bin_exponent + std_exponent_integ = np.floor(std_exponent) + std_exponent_fract = std_exponent - std_exponent_integ + # Don't just scale magnitude by the stddev's fractional exponent; also + # shift to be on the same scale (power-of-10) as the nominal value + delta_order_of_mag = std_exponent_integ - exponent_integ + std_significand = ( + std_bin_significand * 10**(std_exponent_fract + delta_order_of_mag) + ) + # Now rounding on the stddev's significand occurs at the same order of + # magnitude as rounding on the nominal value (and so scaling is done + # with `exponent_integ`, NOT `std_exponent_integ`) + std_devs = (np.around(std_significand, sigfigs-1) * 10**exponent_integ) + + if has_uncertainties: + #logging.trace('recreate uncertainties array') + obj = unp.uarray(obj, std_devs) + # If it was a scalar, it has become a len-1 array; extract the scalar + if is_scalar: + #logging.trace('converting to scalar') + obj = obj[0] + + # Finally, attach units if they were present + if has_units: + #logging.trace('reattaching units') + obj = obj * units + + return obj
+ + + +
+[docs] +def interpret_quantity(value, expect_sequence): + """Interpret a value as a pint Quantity via pisa.ureg + + Parameters + ---------- + value : scalar, Quantity, or sequence interpretable as Quantity + expect_sequence : bool + Specify `True` if you expect a sequence of quantities (or a + pint-Quantity containing a numpy array). This allows interpreting each + element of a passed sequence as a quantity. Otherwise, specify `False` + if you expect a scalar. This allows interpreting a pint.Qauntity tuple + as a ascalar (the first element of the tuple is the magnitude and the + second element contains the units). + + Returns + ------- + value : Quantity + + """ + if expect_sequence: + if isscalar(value): + if isunitless(value): + value = [value] * ureg.dimensionless + else: + if isunitless(value): + value = value * ureg.dimensionless + elif isinstance(value, ureg.Quantity): + pass + else: + if len(value) == 2 and isscalar(value[1]): + value = value * ureg.dimensionless + else: + value = ureg.Quantity.from_tuple(value) + else: + if isscalar(value): + if isbarenumeric(value): + value = value * ureg.dimensionless + elif isinstance(value, Sequence): + if len(value) == 2: + value = ureg.Quantity.from_tuple(value) + else: + raise ValueError( + "Expected a scalar, possibly a 2-sequence passable to" + "ureg.Quantity.from_tuple; got len-{} of type {}" + "instead".format(len(value), type(value)) + ) + if not isinstance(value, ureg.Quantity): + raise ValueError(str(value)) + return value
+ + + +
+[docs] +def test_isscalar(): + """Unit test for isscalar function""" + assert isscalar(0) + assert isscalar('xyz') + assert isscalar('') + assert isscalar(np.nan) + assert isscalar(np.inf) + assert not isscalar(iter([])) + assert not isscalar({}) + assert not isscalar(tuple()) + assert not isscalar([np.inf]) + assert not isscalar(np.array([np.inf])) + assert not isscalar(np.array([])) + + a = np.array([-np.inf, np.nan, -1.1, -1, 0, 1, 1.1, np.inf]) + unp_a = unp.uarray(a, np.ones_like(a)) + pint_a = a * ureg.GeV + pint_unp_a = unp_a * ureg.GeV + for x in [a, unp_a, pint_a, pint_unp_a]: + assert not isscalar(x), str(x) + ' should not evalute to scalar' + + u_fl = ufloat(1, 1) + p_fl = 1 * ureg.GeV + p_u_fl = ufloat(1, 1) * ureg.GeV + for x in [u_fl, p_fl, p_u_fl]: + assert isscalar(x), str(x) + ' should evaluate to scalar' + logging.info('<< PASS : test_isscalar >>')
+ + + +
+[docs] +def test_isunitless(): + """Unit tests for `isunitless` function""" + assert isunitless(1) + assert isunitless("xyz") + assert isunitless(True) + assert isunitless([0, 1, 2]) + assert isunitless(np.array([0, 1, 2])) + assert isunitless(np.array([0, 1, 0], dtype=bool)) + assert isunitless(ufloat(1, 2)) + assert isunitless(unp.uarray([1, 2], [0.01, 0.002])) + + assert not isunitless(1 * ureg.m) + assert not isunitless([0, 1, 2] * ureg.s) + assert not isunitless(np.array([0, 1, 2]) * ureg.m) + assert not isunitless(ufloat(1, 2) * ureg.ns) + assert not isunitless(unp.uarray([1, 2], [0.01, 0.002]) * ureg.m) + + logging.info('<< PASS : test_isunitless >>')
+ + + +
+[docs] +def test_recursiveEquality(): + """Unit test for recursiveEquality function""" + # pylint: disable=unused-variable + d1 = {'one': 1, 'two': 2, 'three': None, 'four': 'four'} + d2 = {'one': 1.0, 'two': 2.0, 'three': None, 'four': 'four'} + d3 = {'one': np.arange(0, 100), + 'two': [{'three': {'four': np.arange(1, 2)}}, + np.arange(3, 4)]} + d4 = {'one': np.arange(0, 100), + 'two': [{'three': {'four': np.arange(1, 2)}}, + np.arange(3, 4)]} + d5 = {'one': np.arange(0, 100), + 'two': [{'three': {'four': np.arange(1, 3)}}, + np.arange(3, 4)]} + d6 = {'one': np.arange(0, 100), + 'two': [{'three': {'four': np.arange(1.1, 2.1)}}, + np.arange(3, 4)]} + d7 = OrderedDict() + d7['d1'] = d1 + d7['f'] = 7.2 + d8 = OrderedDict() + d8['d1'] = d1 + d8['f'] = 7.2 + assert recursiveEquality(d1, d2) + assert not recursiveEquality(d1, d3) + assert recursiveEquality(d3, d4) + assert not recursiveEquality(d3, d5) + assert not recursiveEquality(d4, d5) + assert not recursiveEquality(d3, d6) + assert not recursiveEquality(d4, d6) + assert recursiveEquality(d7, d8) + + # Units and quantities (numbers with units) + + ureg0 = pint.UnitRegistry() + ureg1 = pint.UnitRegistry() + u0 = ureg0.GeV + u1 = ureg0.MeV + u2 = ureg1.GeV + u3 = ureg1.gigaelectron_volt + u4 = ureg1.foot + assert not recursiveEquality(u0, u1), 'noneq. of diff. unit, diff. reg' + assert not recursiveEquality(u1, u2), 'noneq. of diff. unit same reg' + assert recursiveEquality(u0, u2), 'eq. of same unit across registries' + assert recursiveEquality(u2, u3), 'eq. of same unit in same registry' + q0 = np.ones(100) * u0 + q1 = np.ones(100) * 1000.0 * u1 + assert recursiveEquality(q0, q1) + q2 = 1e5*np.ones(100) * ureg0.um + q3 = 0.1 * np.ones(100) * ureg0.m + assert recursiveEquality(q2, q3) + q4, q5 = np.ones(10) * 1000. * ureg0.MeV, np.ones(10) * ureg0.GeV + assert recursiveEquality(q4, q5) + + # Special numerical values + assert recursiveEquality(np.nan, np.nan) + assert recursiveEquality(np.inf, np.inf) + assert recursiveEquality(-np.inf, -np.inf) + assert not recursiveEquality(np.inf, -np.inf) + assert not recursiveEquality(np.inf, np.nan) + logging.info('<< PASS : test_recursiveEquality >>')
+ + + +
+[docs] +def test_normQuant(): + """Unit test for normQuant function""" + # pylint: disable=unused-variable + # TODO: test: + # * non-numerical + # * single non-numerical + # * sequence (tuple, list) of non-numirical + # * np.array of non-numerical + # * scalar + # * bare + # * with units only + # * with uncertainties only + # * with uncertanties and units + # * multi-dimensional array + # * integers, bare + # * float32, bare + # * float64, bare + # * float64 with units only + # * float64 with uncertainties only + # * float64 with both units and uncertainties + # * nested objects... ? + assert normQuant('xyz') == normQuant('xyz') + assert normQuant('xyz', sigfigs=12) == normQuant('xyz', sigfigs=12) + assert normQuant(None) == normQuant(None) + assert normQuant(None, sigfigs=12) == normQuant(None, sigfigs=12) + assert normQuant(1) == normQuant(1) + assert normQuant(1, sigfigs=12) == normQuant(1, sigfigs=12) + assert normQuant(1) == normQuant(1.0) + assert normQuant(1, sigfigs=12) == normQuant(1.0, sigfigs=12) + assert normQuant(1.001) != normQuant(1.002) + assert normQuant(1.001, sigfigs=3) == normQuant(1.002, sigfigs=3) + s0 = 1e5*ureg.um + s1 = 1e5*ureg.um + # ... + + q0 = 1e5*np.ones(10)*ureg.um + q1 = 0.1*np.ones(10)*ureg.m + assert not np.any(q0 == q1) + assert not np.any(q0.to_base_units() == q1.to_base_units()) + assert not np.any(normQuant(q0, None) == normQuant(q1, None)) + + # TODO / NOTE: following line was failing, but not sure the point now... + #assert not np.any(normQuant(q0, 18) == normQuant(q1, 18)) + + assert np.all(normQuant(q0, 16) == normQuant(q1, 16)) + assert np.all(normQuant(q0, 15) == normQuant(q1, 15)) + assert np.all(normQuant(q0, 1) == normQuant(q1, 1)) + assert normQuant(np.inf, sigfigs=15) == normQuant(np.inf, sigfigs=15) + assert normQuant(-np.inf, sigfigs=15) == normQuant(-np.inf, sigfigs=15) + assert normQuant(np.inf, sigfigs=15) != normQuant(-np.inf, sigfigs=15) + assert normQuant(np.nan, sigfigs=15) != normQuant(np.nan, sigfigs=15) + + # Dict of dicts + _ = normQuant({'x': {'1': 1, '2': 2}, 'y': {'3': 3, '4': 4}}) + logging.info('<< PASS : test_normQuant >>')
+ + + +def test_interpret_quantity(): + """Unit tests for function `interpret_quantity`""" + + # -- Scalars and vectors that should be interpreted as vectors -- # + + for val, ref in [ + (1, [1] * ureg.dimensionless), + ([1, 2], [1, 2] * ureg.dimensionless), + ( + unp.uarray([1, 2], [0.5, 0.7]), + unp.uarray([1, 2], [0.5, 0.7]) * ureg.dimensionless, + ), + ([1, 2] * ureg.s, [1, 2] * ureg.s), + ( + unp.uarray([1, 2], [0.5, 0.7]) * ureg.cm, + unp.uarray([1, 2], [0.5, 0.7]) * ureg.cm, + ), + ]: + assert recursiveEquality( + interpret_quantity(val, expect_sequence=True), ref + ), "{} != {}".format(val, ref) + + # -- Scalars that should be interpreted as scalars -- # + + for val, ref in [ + (1, 1 * ureg.dimensionless), + ((1, ()), 1 * ureg.dimensionless), + ((1, (("s", -1), )), 1 / ureg.s), + ]: + assert recursiveEquality( + interpret_quantity(val, expect_sequence=False), ref + ), "{} != {}".format(val, ref) + + logging.info('<< PASS : test_interpret_quantity >>') + + +if __name__ == '__main__': + set_verbosity(1) + test_isscalar() + test_isunitless() + test_recursiveEquality() + test_normQuant() + test_interpret_quantity() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/config_parser.html b/_modules/pisa/utils/config_parser.html new file mode 100644 index 000000000..332573bfe --- /dev/null +++ b/_modules/pisa/utils/config_parser.html @@ -0,0 +1,1598 @@ + + + + + + pisa.utils.config_parser — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.config_parser

+"""
+Parse a ConfigFile object into a dict containing an item for every analysis
+stage, that itself contains all necessary instantiation arguments/objects for
+that stage. for en example config file, please consider
+:file:`$PISA/pisa_examples/resources/settings/pipeline/example.cfg`
+
+Config File Structure
+=====================
+
+A pipeline config file is expected to contain something like the following,
+with the sections ``[pipeline]`` and corresponding ``[stage:service]``
+required, in addition to a ``[binning]`` section:
+
+.. code-block:: cfg
+
+    #include file_x.cfg as x
+    #include file_y.cfg as y
+
+    [pipeline]
+
+    order = stageA.serviceA, stageB.serviceB
+
+    output_binning = bining1
+    output_key = ('weights', 'errors')
+
+
+    [binning]
+
+    #include generic_binning.cfg
+
+    binning1.order = axis1, axis2
+    binning1.axis1 = {
+        'num_bins': 40, 'is_log': True, 'domain': [1,80] units.GeV, 'tex': r'A_1'
+        }
+    binning1.axis2 = {
+        'num_bins': 10, 'is_lin': True, 'domain': [1,5], 'tex': r'A_2'
+        }
+
+
+    [stageA.serviceA]
+
+    input_binning = bining1
+    output_binning = binning1
+    error_method = None
+    debug_mode = False
+
+    param.p1 = 0.0 +/- 0.5 units.deg
+    param.p1.fixed = False
+    param.p1.range = nominal + [-2.0, +2.0] * sigma
+
+    param.selector1.p2 = 0.5 +/- 0.5 units.deg
+    param.selector1.p2.fixed = False
+    param.selector1.p2.range = nominal + [-2.0, +2.0] * sigma
+
+    param.selector2.p2 = -0.5 +/- 0.1 units.deg
+    param.selector2.p2.fixed = False
+    param.selector2.p2.range = nominal + [-2.0, +2.0] * sigma
+
+
+    [stageB.serviceB]
+
+    input_binning = bining1
+    output_binning = binning1
+    error_method = None
+    debug_mode = False
+
+    param.p1 = ${stageA.serviceA:param.p1}
+    param.selector1.p2 = ${stageA.serviceA:param.selector1.p2}
+    param.selector2.p2 = ${stageA.serviceA:param.selector2.p2}
+    ...
+
+* ``#include`` statements can be used to include other config files. The
+  #include statement must be the first non-whitespace on a line, and these
+  statements can be used anywhere within a config file.
+* ``#include resource as xyz`` statements behave similarly, but prepend the
+  included file's text with a setion header containing ``xyz`` in this case.
+* ``pipeline`` is the top-most section that defines the hierarchy of stages and
+  what services to be instantiated.
+* ``binning`` can contain different binning definitions, that are then later
+  referred to from within the ``stage.service`` sections.
+* ``stage.service`` one such section per stage.service is necessary. It
+  contains some options that are common for all stages (`binning`,
+  `error_method` and `debug_mode`) as well as all the necessary arguments and
+  parameters for a given stage.
+* Duplicate section headers and duplicate keys within a section are illegal.
+
+
+Param definitions
+-----------------
+
+Every key in a stage section that starts with `param.<name>` is interpreted and
+parsed into a PISA :class:`pisa.core.param.Param` object. These can be strings
+(e.g. a filename--but don't use any quotation marks) or quantities (numbers
+with units).
+
+Quantities expect an expression that can be converted by the
+:func:`parse_quantity` function. The expression for a quantity can optionally
+include a simple Gaussian prior and units. The simplest definition of a
+quantity with neither Gaussian prior nor units would look something like this:
+
+.. code-block:: cfg
+
+    param.p1 = 12.5
+
+Gaussian priors can be included for a quantity using ``+/-`` notation, where
+the number that follows ``+/-`` is the standard deviation. E.g.:
+
+.. code-block:: cfg
+
+    param.p1 = 12.5 +/- 2.3
+
+If no units are explicitly set for a quantity, it is taken to be a quantity
+with special units ``dimensionless``. Units can be set by multiplying (using
+``*``) by ``units.<unit>`` where ``<unit>`` is the short or long name
+(optionally including metric prefix) of a unit. E.g. the following set
+equivalent values for params `p1` and `p2`:
+
+.. code-block:: cfg
+
+    param.p1 = 12.5 * units.GeV
+    param.p2 = 12.5 * units.gigaelectronvolt
+
+and this can be combined with the Gaussian-prior ``+/-`` notation:
+
+.. code-block:: cfg
+
+    param.p1 = 12.5 +/- 2.3 * units.GeV
+
+Additional arguments to a parameter are passed in with the ``.`` notation, for
+example ``param.p1.fixed = False``, which makes p1 a free parameter in the
+fit (by default a parameter is fixed unless specified like this).
+
+Uniform and spline priors can also be set using the ``.prior`` attribute:
+
+.. code-block:: cfg
+
+    param.p1 = 12.5
+    param.p1.prior = uniform
+
+    param.p2 = 12.5
+    param.p2.prior = spline
+    param.p2.prior.data = resource_loc
+
+If no prior is specified, it is taken to have no prior (or, equivalently, a
+uniform prior with no penalty). A uniform prior can be explicitly set or
+arbitrary (Priors (including a Gaussian prior, as an alternative to the above
+notation) can be explicitly set using the ``.prior`` attribute of a ``param``:
+
+A range must be given for a free parameter. Either as absolute range `[x,y]` or
+in conjunction with the keywords `nominal` (= nominal parameter value) and
+`sigma` if the param was specified with the `+/-` notation.
+
+`.prior` is another argument, that can take the values `uniform` or `spline`,
+for the latter case a `.prior.data` will be expected, pointing to the spline
+data file.
+
+N.B.
+++++
+Params that have the same name in multiple stages of the pipeline are
+instantiated as references to a single param in memory, so updating one updates
+all of them.
+
+Note that this mechanism of synchronizing parameters holds only within the
+scope of a single pipeline; synchronization of parameters across pipelines is
+done by adding the pipelines to a single DistributionMaker object and updating
+params through the DistributionMaker's update_params method.
+
+If you DO NOT want parameters to be synchronized, provide a unique_id for them.
+This is imply done by setting `.unique_id`
+
+
+Param selector
+--------------
+
+A special mechanism allows the user to specify multiple, different values for
+the same param via the param selector method. This can be used for example for
+hypothesis testing, there for hypothesis A a param takes a certain value, while
+for hypothesis B a different value.
+
+A given param, say `foo`, then needs two definitions like the following,
+assuming we name our selections `A` and `B`:
+
+.. code-block:: cfg
+
+    param.A.foo = 1
+    param.B.foo = 2
+
+The default param selector needs to be spcified under section `pipeline` as e.g.
+
+.. code-block:: cfg
+
+    param_selections = A
+
+Which will default the value of 1 for param `foo`. An instatiated pipeline can
+dynamically switch to another selection after instantiation.
+
+Multiple different param selectors are allowed in a single config. In the
+default selection they must be separated by commas.
+
+"""
+
+# TODO: consistency, etc.
+# * Order-independent hashing of the PISAConfigParser object (recursively sort
+#   contents?). This is still a worse idea than hashing on instantiated PISA
+#   objects since things like meaningless whitespace will modify the hash of
+#   the config.
+# * Add explicit gaussian prior (should NOT just rely on +/- notation to make
+#   consistent with other priors)
+# * Furthermore, all priors should be able to be defined in one line, e.g.:
+#     p1.prior = guassian: std_dev = 1.2
+#     p2.prior = uniform
+#     p3.prior = spline: data = resource/location/config.cfg
+#     p4.prior = None
+# * Make interoperable with pisa.utils.resources. I.e., able to work with
+#   Python package resources, not just filesystem files.
+# * Docstrings
+# * TODO: add try: except: blocks around class instantiation calls to give
+#   maximally useful error info to the user (spit out a good message, but then
+#   re-raise the exception)
+
+
+from __future__ import absolute_import, division
+
+from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
+from collections.abc import Mapping
+from collections import Counter, OrderedDict
+from io import StringIO
+from os.path import abspath, expanduser, expandvars, isfile, join
+import re
+import sys
+
+from configparser import (
+    RawConfigParser, ExtendedInterpolation, DuplicateOptionError,
+    SectionProxy, MissingSectionHeaderError, DuplicateSectionError,
+    NoSectionError
+)
+import numpy as np
+from uncertainties import ufloat, ufloat_fromstr
+
+from pisa import ureg
+from pisa.utils.fileio import from_file
+from pisa.utils.format import split
+from pisa.utils.hash import hash_obj
+from pisa.utils.log import Levels, logging, set_verbosity
+from pisa.utils.resources import find_resource
+
+
+__all__ = ['PARAM_RE', 'PARAM_ATTRS', 'STAGE_SEP',
+           'parse_quantity', 'parse_string_literal',
+           'interpret_param_subfields', 'parse_param', 'parse_pipeline_config',
+           'MutableMultiFileIterator', 'PISAConfigParser']
+
+__author__ = 'P. Eller, J. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+PARAM_RE = re.compile(
+    r'^param\.(?P<subfields>(([^.\s]+)(\.|$))+)',
+    re.IGNORECASE
+)
+
+PARAM_ATTRS = ['range', 'prior', 'fixed', 'tex', 'scales_as_log']
+
+STAGE_SEP = '.'
+
+# Define names that users can specify in configs such that the eval of those
+# strings works.
+numpy = np # pylint: disable=invalid-name
+inf = np.inf # pylint: disable=invalid-name
+units = ureg # pylint: disable=invalid-name
+
+
+
+[docs] +def parse_quantity(string): + """Parse a string into a pint/uncertainty quantity. + + Parameters + ---------- + string : string + + Returns + ------- + value : pint.quantity of uncertainties.core.AffineScalarFunc + + Examples + -------- + >>> quant = parse_quantity('1.2 +/- 0.7 * units.meter') + >>> print(str(quant)) + 1.2+/-0.7 meter + >>> print('{:~}'.format(quant)) + 1.2+/-0.7 m + >>> print(quant.magnitude) + 1.2+/-0.7 + >>> print(quant.units) + meter + >>> print(quant.nominal_value) + 1.2 + >>> print(quant.std_dev) + 0.7 + + Also note that spaces and the "*" are optional: + + >>> print(parse_quantity('1+/-1units.GeV')) + 1.0+/-1.0 gigaelectron_volt + + """ + value = string.replace(' ', '') + if 'units.' in value: + value, unit = value.split('units.') + else: + unit = None + value = value.rstrip('*') + if '+/-' in value: + value = ufloat_fromstr(value) + else: + value = ufloat(float(value), 0) + value *= ureg(unit) + return value
+ + + +
+[docs] +def parse_string_literal(string): + """Evaluate a string with certain special values, or return the string. Any + further parsing must be done outside this module, as this is as specialized + as we're willing to be in assuming/interpreting what a string is supposed + to mean. + + Parameters + ---------- + string : string + + Returns + ------- + val : bool, None, or str + + Examples + -------- + >>> print(parse_string_literal('true')) + True + + >>> print(parse_string_literal('False')) + False + + >>> print(parse_string_literal('none')) + None + + >>> print(parse_string_literal('something else')) + 'something else' + + """ + if string.strip().lower() == 'true': + return True + if string.strip().lower() == 'false': + return False + if string.strip().lower() == 'none': + return None + return string
+ + + +
+[docs] +def interpret_param_subfields(subfields, selector=None, pname=None, attr=None): + """Recursively interpret and parse parameter subfields. + + Parameters + ---------- + subfields : list of strings + selector : string + pname : string + attr : list of strings + + Returns + ------- + infodict : dict + + Examples + -------- + >>> print(interpret_param_subfields(subfields=['nh', 'deltam31', 'range'])) + {'pname': 'deltam31', 'subfields': [], 'attr': ['range'], 'selector': 'nh'} + + """ + infodict = dict(subfields=subfields, selector=selector, pname=pname, + attr=attr) + + # Everything has been parsed + if not infodict['subfields']: + return infodict + + # If only one field, this must be the param's name, and we're done + if len(infodict['subfields']) == 1: + infodict['pname'] = infodict['subfields'].pop() + return interpret_param_subfields(**infodict) + + # Look for and remove attr field and any subsequent fields + attr_indices = [] + for n, field in enumerate(infodict['subfields']): + if field in PARAM_ATTRS: + attr_indices.append(n) + + # TODO: not clear what's being done here; also, would slicing be more clear + # than iterating & calling pop()? + if len(attr_indices) == 1: + attr_idx = attr_indices[0] + infodict['attr'] = [ + infodict['subfields'].pop(attr_idx) + for _ in range(attr_idx, len(infodict['subfields'])) + ] + return interpret_param_subfields(**infodict) + + elif len(attr_indices) > 1: + raise ValueError('Found multiple attrs in config name "%s"' %pname) + + if len(infodict['subfields']) == 2: + infodict['pname'] = infodict['subfields'].pop() + infodict['selector'] = infodict['subfields'].pop() + return interpret_param_subfields(**infodict) + + raise ValueError('Unable to parse param subfields %s' + %infodict['subfields'])
+ + + +
+[docs] +def parse_param(config, section, selector, fullname, pname, value): + """Parse a param specification from a PISA config file. + + Note that if the param sepcification does not include ``fixed``, + ``prior``, and/or ``range``, the defaults for these are: + ``fixed = True``, ``prior = None``, and ``range = None``. + + If a prior is specified explicitly via ``.prior``, this takes precendence, + but if no ``.prior`` is specified and the param's value is parsed to be a + :class:`uncertainties.AffineScalarFunc` (i.e. have `std_dev` attribute), a + Gaussian prior is constructed from that and then the AffineScalarFunc is + stripped out of the param's value (such that it is just a + :class:`~pint.quantity.Quantity`). + + Parameters + ---------- + config : pisa.utils.config_parser.PISAConfigParser + section : string + selector : string or None + fullname : string + pname : string + value : string + + Returns + ------- + param : pisa.core.param.Param + + """ + # Note: imports placed here to avoid circular imports + from pisa.core.param import Param, DerivedParam + from pisa.core.prior import Prior + kwargs = dict(name=pname, is_fixed=True, prior=None, range=None) + try: + value = parse_quantity(value) + kwargs['value'] = value.nominal_value * value.units + except ValueError: + value = parse_string_literal(value) + kwargs['value'] = value + + # Search for explicit attr specifications + if config.has_option(section, fullname + '.fixed'): + kwargs['is_fixed'] = config.getboolean(section, fullname + '.fixed') + + if config.has_option(section, fullname + '.scales_as_log'): + kwargs['scales_as_log'] = config.getboolean(section, fullname + '.scales_as_log') + + if config.has_option(section, fullname + '.unique_id'): + kwargs['unique_id'] = config.get(section, fullname + '.unique_id') + + if config.has_option(section, fullname + '.tex'): + kwargs['tex'] = config.get(section, fullname + '.tex') + + if config.has_option(section, fullname + '.range'): + range_ = config.get(section, fullname + '.range') + # Note: `nominal` and `sigma` are called out in the `range_` string + if 'nominal' in range_: + nominal = value.n * value.units # pylint: disable=unused-variable + if 'sigma' in range_: + sigma = value.s * value.units # pylint: disable=unused-variable + range_ = range_.replace('[', 'np.array([') + range_ = range_.replace(']', '])') + # Strip out uncertainties from value itself (as we will rely on the + # prior from here on out) + kwargs['range'] = eval(range_).to(value.units) # pylint: disable=eval-used + + if config.has_option(section, fullname+".function_file"): + kwargs["function_file"] = config.get(section, fullname+".function_file") + + if config.has_option(section, fullname+".depends_names"): + # this means this is a derived parameter, so we throw away the default `fixed` and `prior` kwargs + del kwargs['is_fixed'] + del kwargs['prior'] + + depends = config.get(section, fullname+".depends_names") + kwargs["depends_names"] = depends.split(" ") + + if config.has_option(section, fullname + '.prior'): + prior = str(config.get(section, fullname + '.prior')).strip().lower() + if prior == 'uniform': + kwargs['prior'] = Prior(kind='uniform') + elif prior == 'jeffreys': + kwargs['prior'] = Prior( + kind='jeffreys', + A=kwargs['range'][0], # pylint: disable=unsubscriptable-object + B=kwargs['range'][1], # pylint: disable=unsubscriptable-object + ) + elif prior == 'spline': + priorname = pname + if selector is not None: + priorname += '_' + selector + data = config.get(section, fullname + '.prior.data') + data = from_file(data) + data = data[priorname] + knots = ureg.Quantity(np.asarray(data['knots']), data['units']) + knots = knots.to(value.units) + coeffs = np.asarray(data['coeffs']) + deg = data['deg'] + kwargs['prior'] = Prior(kind='spline', knots=knots, coeffs=coeffs, + deg=deg) + elif prior == 'none': + kwargs['prior'] = None + elif 'gauss' in prior: + raise Exception('Please use new style +/- notation for gaussian' + ' priors in config') + else: + raise Exception('Prior type unknown') + + elif hasattr(value, 'std_dev') and value.std_dev != 0: + kwargs['prior'] = Prior(kind='gaussian', + mean=value.nominal_value * value.units, + stddev=value.std_dev * value.units) + + # Strip out any uncertainties from value itself (an explicit ``.prior`` + # specification takes precedence over this) + if hasattr(value, 'std_dev'): + value = value.nominal_value * value.units + try: + if "depends_names" in kwargs: + param = DerivedParam(**kwargs) + else: + param = Param(**kwargs) + except: + logging.error('Failed to instantiate new Param object with kwargs %s', + kwargs) + raise + + return param
+ + + +
+[docs] +def parse_pipeline_config(config): + """Parse pipeline config. + + Parameters + ---------- + config : string or ConfigParser + + Returns + ------- + stage_dicts : OrderedDict + Keys are (stage_name, service_name) tuples and values are OrderedDicts + with keys the argnames and values the arguments' values. Some known arg + values are parsed out fully into Python objects, while the rest remain + as strings that must be used or parsed elsewhere. + + """ + # Note: imports placed here to avoid circular imports + from pisa.core.binning import MultiDimBinning, OneDimBinning + from pisa.core.param import ParamSelector, DerivedParam + + if isinstance(config, str): + config = from_file(config) + elif isinstance(config, PISAConfigParser): + pass + else: + raise TypeError( + '`config` must either be a string or PISAConfigParser. Got %s ' + 'instead.' % type(config) + ) + + if not config.has_section('binning'): + raise NoSectionError( + "Could not find 'binning'. Only found sections: %s" + % config.sections() + ) + + # Create binning objects + binning_dict = {} + # Loop over binning lines + for name, value in config['binning'].items(): + if name.endswith('.order'): + # Found the first line in a new binning, get the individual bin dimension definitions... + order = split(config.get('binning', name)) + binning, _ = split(name, sep='.') + bins = [] + for bin_name in order: + try: + def_raw = config.get('binning', binning + '.' + bin_name) + except: + dims_defined = [ + split(dim, sep='.')[1] for dim in + config['binning'].keys() if + dim.startswith(binning + '.') and not + dim.endswith('.order') + ] + logging.error( + "Failed to find definition of '%s' dimension of '%s'" + " binning entry. Only found definition(s) of: %s", + bin_name, binning, dims_defined + ) + del dims_defined + raise + try: + kwargs = eval(def_raw) # pylint: disable=eval-used + except: + logging.error( + "Failed to evaluate definition of '%s' dimension of" + " '%s' binning entry:\n'%s'", + bin_name, binning, def_raw + ) + raise + try: + bins.append(OneDimBinning(bin_name, **kwargs)) + except: + logging.error( + "Failed to instantiate new `OneDimBinning` from '%s'" + " dimension of '%s' binning entry with definition:\n" + "'%s'\n", bin_name, binning, kwargs + ) + raise + # Get the bin mask, if there is ome + mask = config['binning'].get(binning + '.mask', None) + if mask is not None : + mask = eval(mask) + # Create the binning object + binning_dict[binning] = MultiDimBinning(bins, name=binning, mask=mask) + + + stage_dicts = OrderedDict() + + # Pipeline section + section = 'pipeline' + + stage_dicts[section] = {} + + # Get and parse the order of the stages (and which services implement them) + order = [split(x, STAGE_SEP) for x in split(config.get(section, 'order'))] + + # Name of pipeline + if config.has_option(section, 'name'): + stage_dicts[section]['name'] = config.get(section, 'name') + else: + stage_dicts[section]['name'] = "none" + + if config.has_option(section, 'output_binning'): + stage_dicts[section]['output_binning'] = binning_dict[config.get(section, 'output_binning')] + output_key = split(config.get(section, 'output_key')) + if len(output_key) == 1: + stage_dicts[section]['output_key'] = output_key[0] + elif len(output_key) == 2: + stage_dicts[section]['output_key'] = tuple(output_key) + else: + raise ValueError(f'Output key should be exactly one key, or a tuple (key, error_key), but is {output_key}') + else: + stage_dicts[section]['output_binning'] = None + stage_dicts[section]['output_format'] = None + stage_dicts[section]['output_key'] = None + + param_selections = [] + if config.has_option(section, 'param_selections'): + param_selections = split(config.get(section, 'param_selections')) + + if config.has_option(section, 'detector_name'): + stage_dicts[section]['detector_name'] = config.get(section, 'detector_name') + else: + stage_dicts[section]['detector_name'] = None + + + # Parse [stage.<stage_name>] sections and store to stage_dicts + for stage, service in order: # pylint: disable=too-many-nested-blocks + old_section_header = 'stage%s%s' % (STAGE_SEP, stage) + new_section_header = '%s%s%s' % (stage, STAGE_SEP, service) + if config.has_section(old_section_header): + logging.warning( + '"%s" is an old-style section header, in the future use "%s"', + old_section_header, new_section_header + ) + section = old_section_header + elif config.has_section(new_section_header): + section = new_section_header + else: + raise IOError( + 'missing section in cfg for stage "%s" service "%s"' + % (stage, service) + ) + + # Instantiate dict to store args to pass to this stage + service_kwargs = OrderedDict() + + param_selector = ParamSelector(selections=param_selections) + service_kwargs['params'] = param_selector + + n_params = 0 + n_derived_params = 0 + for fullname in config.options(section): + try: + value = config.get(section, fullname) + except: + logging.error( + 'Unable to obtain value of option "%s" in section "%s".', + fullname, section + ) + raise + # See if this matches a param specification + param_match = PARAM_RE.match(fullname) + if param_match is not None: + n_params += 1 + + param_match_dict = param_match.groupdict() + param_subfields = param_match_dict['subfields'].split('.') + + # Figure out what the dotted fields represent... + infodict = interpret_param_subfields(subfields=param_subfields) + + # If field is an attr, skip since these are located manually + if infodict['attr'] is not None: + continue + + # Check if this param already exists in a previous stage; if + # so, make sure there are no specs for this param, but just a + # link to previous the param object that is already + # instantiated. + for kw in stage_dicts.values(): + # Stage did not get a `params` argument from config + if not 'params' in kw: + continue + + # Retrieve the param from the ParamSelector + try: + param = kw['params'].get( + name=infodict['pname'], + selector=infodict['selector'] + ) + except KeyError: + continue + + # Make sure there are no other specs (in this section) for + # the param defined defined in previous section + for a in PARAM_ATTRS: + if config.has_option(section, '%s.%s' %(fullname, a)): + raise ValueError("Parameter spec. '%s' of '%s' " + "found in section '%s', but " + "parameter exists in previous " + "stage!"%(a, fullname, section)) + + break + + # Param *not* found in a previous stage (i.e., no explicit + # `break` encountered in `for` loop above); therefore must + # instantiate it. + else: + param = parse_param( + config=config, + section=section, + selector=infodict['selector'], + fullname=fullname, + pname=infodict['pname'], + value=value + ) + if isinstance(param, DerivedParam): + n_derived_params += 1 + + param_selector.update(param, selector=infodict['selector']) + + # If it is a binning defined in the "binning" section, use the parsed value + elif value in binning_dict.keys(): + service_kwargs[fullname] = binning_dict[value] + + # If it's not a param spec but contains 'binning', assume it's a + # binning spec for CAKE stages + elif 'binning' in fullname: + service_kwargs[fullname] = binning_dict[value] + + # it's gonna be a PI stage + elif fullname in ['calc_mode', 'apply_mode', 'output_format']: + value = parse_string_literal(value) + # is it None? + if value is None: + service_kwargs[fullname] = value + # is it a binning? + if value in binning_dict.keys(): + service_kwargs[fullname] = binning_dict[value] + # whatever + else: + service_kwargs[fullname] = value + + # it's a list on in/output names list + elif fullname.endswith('_names'): + value = split(value) + service_kwargs[fullname] = value + # Otherwise it's some other stage instantiation argument; identify + # this by its full name and try to interpret and instantiate a + # Python object using the string + else: + if re.search(r'[^a-z_]units\.[a-z]+', value, flags=re.IGNORECASE): + try: + new_value = parse_quantity(value) + new_value = new_value.nominal_value * new_value.units + except ValueError: + new_value = parse_string_literal(value) + else: + new_value = parse_string_literal(value) + service_kwargs[fullname] = new_value + + # If no params actually specified in config, remove 'params' from the + # service's keyword args + if n_params == 0: + service_kwargs.pop('params') + + # finish setting up the derived parameters + if n_derived_params != 0: + for param in param_selector: + if isinstance(param, DerivedParam): + # give the derived parameter references to the parameters it depends on + param.dependson = [param_selector.get(name) for name in param.depends_names] + + + # Store the service's kwargs to the stage_dicts + stage_dicts[(stage, service)] = service_kwargs + + return stage_dicts
+ + +
+[docs] +class MutableMultiFileIterator(object): + """ + Iterate through the lines of an already-open file (`fp`) but then can pause + at any point and open and iterate through another file via the + `switch_to_file` method (and this file can be paused to iterate through + another, etc.). + + This has the effect of in-lining files within files for e.g. parsing + multiple files as if they're a singe file. Which line comes from which file + is also tracked for generating maximally-useful error messages, via the + `location` method. + + Note that circular references are not allowed. + + Parameters + ---------- + fp : file-like object + The (opened) main config to be read. E.g. can be an opened file, + io.StringIO object, etc. + + fpname : string + Identifier for the initially `fp` object + + """ + def __init__(self, fp, fpname, fpath=None): + self._iter_stack = [] + """Stack for storing dicts with 'fp', 'fpname', 'fpath', 'lineno', and + 'line' for keeping track of the hierarchy of master config & included + configs""" + + # It's ok to not find the fpname / fpname to not be a file for the + # *master* config, since this could e.g. be a io.StringIO file-like + # object (`read_string`) which comes from no actual file/resource on + # disk. + if not fpname and hasattr(fp, 'name'): + fpname = fp.name + + if fpath is None: + try: + resource = find_resource(fpname) + except IOError: + pass + else: + if isfile(resource): + fpath = abspath(expanduser(expandvars(fpname))) + + if fpath is None: + try: + resource = find_resource(fpname) + except IOError: + pass + else: + if isfile(resource): + fpath = resource + + if fpath is None: + self.fpaths_processed = [] + else: + self.fpaths_processed = [fpath] + + self.fps_processed = [fp] + + record = dict(fp=fp, fpname=fpname, fpath=fpath, lineno=0, line='') + self._iter_stack.append(record) + self.file_hierarchy = OrderedDict([(fpname, OrderedDict())]) + + def __next__(self): + """Iterate through lines in the file(s). + + Returns + ------- + line : string + The next line from the current file. + + fpname : string + The `fpname` of the file from which the line was gotten. + + lineno : int + The line number in the file. + + """ + if not self._iter_stack: + self._cleanup() + raise StopIteration + try: + record = self._iter_stack[-1] + record['line'] = next(record['fp']) + record['lineno'] += 1 + return record + except StopIteration: + record = self._iter_stack.pop() + logging.trace(('Finished processing "{fpname:s}" with {lineno:d}' + ' line(s)').format(**record)) + return next(self) + except: + self._cleanup() + raise + +
+[docs] + def switch_to_file(self, fp=None, fpname=None): + """Switch iterator to a new resource location to continue processing. + + Parameters + ---------- + fp : None or file-like object + If `fp` is specified, this takes precedence over `fpname`. + + fpname : None or string + Path of the file or resource to read from. This resource will be + located and opened if `fp` is None. + + encoding + Argument is passed to the builtin ``open`` function for opening + the file. + + """ + fpath = None + if fp is None: + assert fpname + resource = find_resource(fpname) + if isfile(resource): + fpath = abspath(expanduser(expandvars(resource))) + if fpath in self.fpaths_processed: + self._cleanup() + raise ValueError( + 'Circular reference; already processed "%s" at path' + ' "%s"' % (fpname, fpath) + ) + else: + self._cleanup() + raise ValueError('`fpname` "%s" is not a file') + fp_ = open(fpath, encoding=None) + else: + fp_ = fp + if fpname is None: + if hasattr(fp_, 'name'): + fpname = fp_.name + else: + fpname = '' + try: + resource = find_resource(fpname) + except IOError: + pass + else: + if isfile(resource): + fpath = resource + if fp in self.fps_processed: + self._cleanup() + raise ValueError( + 'Circular reference; already processed file pointer "%s"' + ' at path "%s"' % (fp_, fpname) + ) + + if fpath is not None: + if fpath in self.fpaths_processed: + self._cleanup() + raise ValueError( + 'Circular reference; already processed "%s" at path' + ' "%s"' % (fpname, fpath) + ) + self.fpaths_processed.append(fpath) + + self.fps_processed.append(fp) + if fpath is not None: + self.fpaths_processed.append(fpath) + + logging.trace('Switching to "%s" at path "%s"' % (fpname, fpath)) + + record = dict(fp=fp_, fpname=fpname, fpath=fpath, lineno=0, line='') + self._iter_stack.append(record)
+ + + @property + def location(self): + """string : Full hierarchical location, formatted for display""" + info = ['File hierarchy (most recent last):\n'] + for record_num, record in enumerate(self._iter_stack): + s = ' Line {lineno:d}, fpname "{fpname:s}"' + if record_num > 0: + s += ' at path "{fpath:s}"' + s += '\n {line:s}' + info.append(s.format(**record)) + return ''.join(info) + + def __iter__(self): + return self + + def __del__(self): + self._cleanup() + + def _cleanup(self): + """Close all file handles opened by this object (i.e. all except the + first file pointer, which is provided as an argument to `__init__`)""" + for record in self._iter_stack[1:]: + record['fp'].close()
+ + + +
+[docs] +class PISAConfigParser(RawConfigParser): # pylint: disable=too-many-ancestors + """ + Parses a PISA config file, extending :class:`configparser.RawConfigParser` + (the backport of RawConfigParser from Python 3.x) by adding the ability to + include external files inline via, for example: + + .. code-block:: cfg + + #include /path/to/file.cfg + #include path/to/resource.cfg + #include path/to/resource2.cfg as section2 + + [section1] + key11 = value1 + key12 = ${section2:key21} + key13 = value3 + + where the files or resources located at "/path/to/file.cfg", + "path/to/resource.cfg", and "path/to/resource2.cfg" are effectively inlined + wherever the #include statements occur. + + The ``#include path/to/resource2.cfg as section_name`` syntax + prefixes the contents of ``resource2.cfg`` by a section header named + "section2", expanding ``resource2.cfg`` as: + + .. code-block:: cfg + + [section2] + line1 of resource2.cfg + line2 of resource2.cfg + ... etc. + + Special parsing rules we have added to make ``#include`` behavior sensible: + + 1. Using an ``#include file`` that contains a sction header + (``[section_name]``) *or* using ``#include file as section_name`` + requires that the next non-blank / non-comment / non-#include line be a + new section header (``[section_name2]``). + 2. Empty sections after fully parsing a config will raise a ``ValueError``. + This is likely never a desired behavior, and should alert the user to + inadvertent use of ``#include``. + + Also note that, unlike the default :class:`~configparser.ConfigParser` + behavior, :class:`~configparser.ExtendedInterpolation` is used, whitespace + surrounding text in a section header is ignored, empty lines are *not* + allowed between multi-line values, and section names, keys, and values are + all case-sensitive. + + All other options are taken as the defaults / default behaviors of + :class:`~configparser.ConfigParser`. + + See help for :class:`configparser.ConfigParser` for further help on valid + config file syntax and parsing behavior. + + """ + + _DEFAULT_INTERPOLATION = ExtendedInterpolation() + INCLUDE_RE = re.compile(r'\s*#include\s+(?P<include>\S.*)') + INCLUDE_AS_RE = re.compile(r'\s*(?P<file>.+)((?:\s+as\s+)(?P<as>\S+))') + SECTCRE = re.compile(r'\[\s*(?P<header>[^]]+?)\s*\]') + + def __init__(self): + #self.default_section = None #DEFAULTSECT + # Instantiate parent class with PISA-specific options + #super().__init__( + RawConfigParser.__init__( + self, + interpolation=ExtendedInterpolation(), + empty_lines_in_values=False, + ) + self.file_iterators = [] + +
+[docs] + def set(self, section, option, value=None): + """Set an option. Extends RawConfigParser.set by validating type and + interpolation syntax on the value.""" + _, option, value = self._validate_value_types(option=option, + value=value) + super().set(section, option, value)
+ + +
+[docs] + def add_section(self, section): + """Create a new section in the configuration. Extends + RawConfigParser.add_section by validating if the section name is + a string.""" + section, _, _ = self._validate_value_types(section=section) + super().add_section(section)
+ + +
+[docs] + def optionxform(self, optionstr): + """Enable case-sensitive options in .cfg files, and force all values to + be ASCII strings.""" + return optionstr #.encode('ascii')
+ + + @property + def hash(self): + """int : Hash value of the contents (does not depend on order of + sections, but does depend on order of keys within each section)""" + return self.__hash__() + + def __hash__(self): + return hash_obj([(sec, (self.items(sec))) + for sec in sorted(self.sections())]) + + @staticmethod + def _get_include_info(line): + match = PISAConfigParser.INCLUDE_RE.match(line) + if not match: + return None + include = match.groupdict()['include'] + match = PISAConfigParser.INCLUDE_AS_RE.match(include) + if match is None: + return {'file': include, 'as': None} + return match.groupdict() + +
+[docs] + def read(self, filenames, encoding=None): + """Override `read` method to interpret `filenames` as PISA resource + locations, then call overridden `read` method. Also, IOError fails + here, whereas it is ignored in RawConfigParser. + + For further help on this method and its arguments, see + :method:`~backports.configparser.configparser.read` + + """ + if isinstance(filenames, str): + filenames = [filenames] + resource_locations = [] + for filename in filenames: + resource_location = find_resource(filename) + if not isfile(resource_location): + raise ValueError( + '"%s" is not a file or could not be located' % filename + ) + resource_locations.append(resource_location) + + filenames = resource_locations + + # NOTE: From here on, most of the `read` method is copied, but + # ignoring IOError exceptions is removed here. Python copyrights apply. + + if isinstance(filenames, str): + filenames = [filenames] + read_ok = [] + for filename in filenames: + with open(filename, encoding=encoding) as fp: + self._read(fp, filename) + read_ok.append(filename) + return read_ok
+ + + # NOTE: the `_read` method is copy-pasted (then modified slightly) from + # Python's backports.configparser (version 3.5.0), and so any copyright + # notices at the top of this file might need modification to be compatible + # with copyrights on that module. + # + # Also, diff this function with future releases in case something needs + # modification. + + # pylint: disable=E,W,C,R + def _read(self, fp, fpname): + """Parse a sectioned configuration file. + + Each section in a configuration file contains a header, indicated by + a name in square brackets (`[]'), plus key/value options, indicated by + `name' and `value' delimited with a specific substring (`=' or `:' by + default). + + Values can span multiple lines, as long as they are indented deeper + than the first line of the value. Depending on the parser's mode, blank + lines may be treated as parts of multiline values or ignored. + + Configuration files may include comments, prefixed by specific + characters (`#' and `;' by default). Comments may appear on their own + in an otherwise empty line or may be entered in lines holding values or + section names. + + This implementation is extended from the original to also accept + + .. code:: ini + + #include <file or pisa_resource> + + or + + .. code:: ini + + #include <file or pisa_resource> as <section_name> + + syntax anywhere in the file, which switches (via + :class:`MutableMultiFileIterator`) to the new file as if it were + in-lined within the original file. The latter syntax also prepends a + section header + + .. code:: ini + + [section_name] + + before the text of the specified file or pisa_resource. + + """ + elements_added = set() + cursect = None # None, or a dictionary + sectname = None + optname = None + lineno = 0 + indent_level = 0 + e = None # None, or an exception + + file_iter = MutableMultiFileIterator(fp=fp, fpname=fpname) + self.file_iterators.append(file_iter) + for record in file_iter: + fpname = record['fpname'] + lineno = record['lineno'] + line = record['line'] + + comment_start = sys.maxsize + # strip inline comments + inline_prefixes = dict( + (p, -1) for p in self._inline_comment_prefixes) + while comment_start == sys.maxsize and inline_prefixes: + next_prefixes = {} + for prefix, index in inline_prefixes.items(): + index = line.find(prefix, index+1) + if index == -1: + continue + next_prefixes[prefix] = index + if index == 0 or (index > 0 and line[index-1].isspace()): + comment_start = min(comment_start, index) + inline_prefixes = next_prefixes + # parse #include statement + include_info = self._get_include_info(line) + if include_info: + file_iter.switch_to_file(fpname=include_info['file']) + if include_info['as']: + as_header = '[%s]\n' % include_info['as'] + file_iter.switch_to_file( + # Aaron Fienberg + # commented out as part of python3 update + # fp=StringIO(as_header.decode('utf-8')) + fp=StringIO(as_header) + ) + continue + # strip full line comments + for prefix in self._comment_prefixes: + if line.strip().startswith(prefix): + comment_start = 0 + break + if comment_start == sys.maxsize: + comment_start = None + value = line[:comment_start].strip() + if not value: + if self._empty_lines_in_values: + # add empty line to the value, but only if there was no + # comment on the line + if (comment_start is None + and cursect is not None + and optname + and cursect[optname] is not None): + cursect[optname].append('') # newlines added at join + else: + # empty line marks end of value + indent_level = sys.maxsize + continue + # continuation line? + first_nonspace = self.NONSPACECRE.search(line) + cur_indent_level = first_nonspace.start() if first_nonspace else 0 + if (cursect is not None + and optname + and cur_indent_level > indent_level): + cursect[optname].append(value) + # a section header or option header? + else: + indent_level = cur_indent_level + # is it a section header? + mo = self.SECTCRE.match(value) + if mo: + sectname = mo.group('header') + if sectname in self._sections: + if self._strict and sectname in elements_added: + raise DuplicateSectionError(sectname, fpname, + lineno) + cursect = self._sections[sectname] + elements_added.add(sectname) + elif sectname == self.default_section: + cursect = self._defaults + else: + cursect = self._dict() + self._sections[sectname] = cursect + self._proxies[sectname] = SectionProxy(self, sectname) + elements_added.add(sectname) + # So sections can't start with a continuation line + optname = None + # no section header in the file? + elif cursect is None: + raise MissingSectionHeaderError(fpname, lineno, line) + # an option line? + else: + mo = self._optcre.match(value) + if mo: + optname, vi, optval = mo.group('option', 'vi', 'value') # pylint: disable=unused-variable + if not optname: + e = self._handle_error(e, fpname, lineno, line) + optname = self.optionxform(optname.rstrip()) + if (self._strict + and (sectname, optname) in elements_added): + raise DuplicateOptionError(sectname, optname, + fpname, lineno) + elements_added.add((sectname, optname)) + # This check is fine because the OPTCRE cannot + # match if it would set optval to None + if optval is not None: + optval = optval.strip() + cursect[optname] = [optval] + else: + # valueless option handling + cursect[optname] = None + else: + # a non-fatal parsing error occurred. set up the + # exception but keep going. the exception will be + # raised at the end of the file and will contain a + # list of all bogus lines + e = self._handle_error(e, fpname, lineno, line) + # if any parsing errors occurred, raise an exception + if e: + raise e + self._join_multiline_values()
+ + + +def test_parse_pipeline_config(config='settings/pipeline/example.cfg'): + """Unit test for function `parse_pipeline_config`""" + # Load via PISAConfigParser + config0 = PISAConfigParser() + config0.read(config) + config0 = parse_pipeline_config(config0) + + # Load directly + config1 = parse_pipeline_config(config) + + logging.info('Keys and values found in config:') + for key, vals in config1.items(): + logging.info('%s: %s', key, vals) + assert vals == config0[key] + +def test_MutableMultiFileIterator(): + """Unit test for class `MutableMultiFileIterator`""" + import shutil + import tempfile + + prefixes = ['a', 'b', 'c'] + file_len = 4 + + reference_lines = [ + # start in file a + 'a0', 'a1', + # switch to file b after second line of a + 'b0', 'b1', + # switch to file c after second line of b + 'c0', 'c1', 'c2', 'c3', + # switch back to b after exhausting c + 'b2', 'b3', + # switch back to a after exhausting b + 'a2', 'a3' + ] + + tempdir = tempfile.mkdtemp() + try: + # Create test files + paths = [join(tempdir, prefix) for prefix in prefixes] + for prefix, path in zip(prefixes, paths): + with open(path, 'w') as f: + for i in range(file_len): + f.write('%s%d\n' % (prefix, i)) + logging.trace(path) + + actual_lines = [] + with open(paths[0]) as fp: + file_iter = MutableMultiFileIterator(fp=fp, fpname=paths[0]) + + remaining_paths = paths[1:] + + for record in file_iter: + actual_lines.append(record['line'].strip()) + logging.trace(str(record)) + if record['line'][1:].strip() == '1': + if remaining_paths: + path = remaining_paths.pop(0) + file_iter.switch_to_file(fpname=path) + else: + for l in str(file_iter.location).split('\n'): + logging.trace(l) + except: + shutil.rmtree(tempdir) + raise + + if actual_lines != reference_lines: + raise ValueError('<< FAIL : test_MutableMultiFileIterator >>') + + logging.info('<< PASS : test_MutableMultiFileIterator >>') + + +def parse_args(): + """Parse command line arguments""" + parser = ArgumentParser( + description='Print contents of a parsed config file', + formatter_class=ArgumentDefaultsHelpFormatter, + ) + parser.add_argument( + 'pipeline', metavar='CONFIGFILE', + nargs='?', + default='settings/pipeline/example.cfg', + help='Pipeline config file to parse', + ) + parser.add_argument( + '-v', + action='count', + default=Levels.WARN, + help='Set verbosity level', + ) + kwargs = vars(parser.parse_args()) + set_verbosity(kwargs.pop('v')) + return kwargs + + +if __name__ == '__main__': + test_parse_pipeline_config(**parse_args()) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/cross_sections.html b/_modules/pisa/utils/cross_sections.html new file mode 100644 index 000000000..f1f81b92a --- /dev/null +++ b/_modules/pisa/utils/cross_sections.html @@ -0,0 +1,818 @@ + + + + + + pisa.utils.cross_sections — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.cross_sections

+#!/usr/bin/env python
+
+"""
+Define CrossSections class for importing, working with, and storing neutrino
+cross sections
+"""
+
+
+from __future__ import absolute_import, division
+
+from copy import deepcopy
+import os
+
+import numpy as np
+from scipy.interpolate import interp1d
+
+from pisa.utils.comparisons import recursiveEquality
+from pisa.utils.fileio import expand, from_file, to_file
+from pisa.utils.flavInt import ALL_NUFLAVINTS, FlavIntData, NuFlavIntGroup
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.resources import find_resource
+
+
+__all__ = ['CrossSections', 'manual_test_CrossSections']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: make class for groups of CX or just a function for finding eisting
+# versions in a json file; eliminate the optional ver parameters in
+# CrossSections class methods
+
+
+
+[docs] +class CrossSections(FlavIntData): + """Cross sections for each neutrino flavor & interaction type ("flavint"). + What is stored are *PER-H2O-MOLECULE* cross sections, in units of [m^2]. + + Be careful when using these; cross sections are often plotted in the + literature as per-nucleon and per-energy with units [10^-38 cm^2 / GeV]. + + ver : string + Version of cross sections to load from file. E.g. 'genie_2.6.4' + + energy : None or array of float + Energies at which cross sections are defined. + + xsec : string, dictonary, or another CrossSections object + If str: provides PISA resource name from which to load cross sections + If dict or CrossSections object: construct cross sections from a + deepcopy of that object + """ + def __init__(self, ver=None, energy=None, + xsec='cross_sections/cross_sections.json'): + super().__init__() + self.energy = energy + self._ver = ver + self._interpolants = {} + if xsec is None: + pass + elif isinstance(xsec, dict): + xsec = deepcopy(xsec) + elif isinstance(xsec, str): + assert self.energy is None + self.energy, xsec = self.load(fpath=xsec, ver=ver) + else: + raise TypeError('Unhandled xsec type passed in arg: ' + + str(type(xsec))) + if xsec is not None: + super().validate(xsec) + self.validate_xsec(self.energy, xsec) + self.update(xsec) + self._define_interpolant() + +
+[docs] + @staticmethod + def load(fpath, ver=None, **kwargs): + """Load cross sections from a file locatable and readable by the PISA + from_file command. If `ver` is provided, it is used to index into the + top level of the loaded dictionary""" + all_xsec = from_file(fpath, **kwargs) + if ver not in all_xsec: + raise ValueError('Version "%s" not found. Valid versions in file' + '"%s" are: %s' % (ver, fpath, all_xsec.keys())) + return all_xsec[ver]['energy'], all_xsec[ver]['xsec']
+ + +
+[docs] + @staticmethod + def load_root_file(fpath, ver, tot_sfx='_tot', o_sfx='_o16', h_sfx='_h1', + plt_sfx='_plot'): + """Load cross sections from root file, where graphs are first-level in + hierarchy. This is yet crude and not very flexible, but at least it's + recorded here for posterity. + + Requires ROOT and ROOT python module be installed + + Parameters + ---------- + fpath : string + Path to ROOT file + ver : string + Necessary to differentaite among different file formats that Ken + has sent out + tot_sfx : string (default = '_tot') + Suffix for finding total cross sections in ROOT file (if these + fields are found, the oxygen/hydrogen fields are skipped) + o_sfx : string (default = '_o16') + Suffix for finding oxygen-16 cross sections in ROOT file + h_sfx : string (default = '_h1') + Suffix for finding hydrogen-1 cross sections in ROOT file + plt_sfx : string (default = '_plt') + Suffix for plots containing cross sections per GeV in ROOT file + + Returns + ------- + xsec : :class:`pisa.utils.flavInt.FlavIntData` + Object containing the loaded cross sections + """ + import ROOT + + def extractData(f, key): + """Extract x and y info from (already-opened) ROOT TFile.""" + try: + g = ROOT.gDirectory.Get(key) + x = np.array(g.GetX()) + y = np.array(g.GetY()) + except AttributeError: + raise ValueError('Possibly missing file "%s" or missing key' + ' "%s" within that file?' % (f, key)) + return x, y + + rfile = ROOT.TFile(fpath) # pylint: disable=no-member + try: + energy = None + xsec = FlavIntData() + for flavint in ALL_NUFLAVINTS: + if ver == 'genie_2.6.4': + # Expected to contain xsect per atom; summing 2*Hydrogen + # and 1*Oxygen yields total cross section for water + # molecule. + # Format as found in, e.g., "genie_2.6.4_simplified.root" + key = str(flavint) + o_sfx + o16_e, o16_xs = extractData(rfile, key) + + key = str(flavint) + h_sfx + h1_e, h1_xs = extractData(rfile, key) + + tot_xs = h1_xs*2 + o16_xs*1 + assert np.alltrue(h1_e == o16_e) + ext_e = o16_e + + elif ver == 'genie_2.8.6': + # Expected to contain xsect-per-nucleon-per-energy, so + # multiplying by energy and by # of nucleons (18) yields + # cross sections per molecule. + # Format as found in, e.g., "genie_2.8.6_simplified.root" + key = str(flavint) + plt_sfx + ext_e, fract_xs = extractData(rfile, key) + tot_xs = fract_xs * ext_e * 18 + + else: + raise ValueError('Invalid or not implemented `ver`: "%s"' + % ver) + if energy is None: + energy = ext_e + + assert np.alltrue(ext_e == energy) + + # Note that units in the ROOT files are [1e-38 cm^2] but PISA + # requires units of [m^2], so this conversion is made here. + xsec[flavint] = tot_xs * 1e-38 * 1e-4 + finally: + rfile.Close() + + CrossSections.validate_xsec(energy, xsec) + + return energy, xsec
+ + +
+[docs] + @classmethod + def new_from_root(cls, fpath, ver, **kwargs): + """Instantiate a new CrossSections object from ROOT file. + + Parameters + ---------- + fpath : string + PISA resource specification for location of ROOT file + ver : string + Specify the version name of the cross sections loaded + **kwargs + Passed to method load_root_file() + + Returns + ------- + Instantiated CrossSections object + """ + energy, xsec = CrossSections.load_root_file(fpath, ver=ver, **kwargs) + return cls(energy=energy, xsec=xsec, ver=ver)
+ + +
+[docs] + @staticmethod + def validate_xsec(energy, xsec): + """Validate cross sections""" + # TODO: different validation based on cross sections version string + + # Make sure the basics are present + xsec = FlavIntData(xsec) + + ## No NaN's + assert not np.any(np.isnan(energy)) + # Energy spans at least 1-100 GeV + assert np.min(energy) <= 1 + assert np.max(energy) >= 100 + + # All event flavints need to be present + for k in ALL_NUFLAVINTS: + # Uses "standard" PISA indexing scheme + x = xsec[k] + # Arrays are same lengths + assert len(x) == len(energy) + # No NaN's + assert np.sum(np.isnan(x)) == 0 + # Max xsec/energy value is in range for units of [m^2/GeV] + assert np.max(x/energy) < 40e-42, np.max(x/energy)
+ + +
+[docs] + def set_version(self, ver): + """Set the cross sections version to the string `ver`.""" + self._ver = ver
+ + +
+[docs] + def get_version(self): + """Return the cross sections version string""" + return self._ver
+ + +
+[docs] + def save(self, fpath, ver=None, **kwargs): # pylint: disable=arguments-differ + """Save cross sections (and the energy specification) to a file at + `fpath`.""" + if ver is None: + if self._ver is None: + raise ValueError( + 'Either a ver must be specified in call to `save` or it ' + 'must have been set prior to the invocation of `save`.' + ) + ver = self._ver + else: + assert ver == self._ver + + try: + fpath = find_resource(fpath) + except IOError: + pass + fpath = os.path.expandvars(os.path.expanduser(fpath)) + all_xs = {} + # Get any existing data from file + if os.path.exists(fpath): + all_xs = from_file(fpath) + # Validate existing data by instantiating objects from each + for v, d in all_xs.items(): + CrossSections(ver=v, energy=d['energy'], xsec=d['xsec']) + if ver in all_xs: + logging.warning('Overwriting existing version "' + ver + + '" in file ' + fpath) + all_xs[ver] = {'xsec':self, 'energy':self.energy} + to_file(all_xs, fpath, **kwargs)
+ + +
+[docs] + def get_xs_value(self, flavintgroup, energy): + """Get (combined) cross section value (in units of m^2) for + `flavintgroup` at `energy` (in units of GeV). + + Parameters + ---------- + flavintgroup : NuFlavIntGroup or convertible thereto + energy : numeric or sequence thereof + Energy (or energies) at which to evaluate total cross section, in + units of GeV + + Returns + ------- + Combined cross section for flavor/interaction types in units of + m^2, evaluated at each energy. Shape of returned value matches that of + passed `energy` parameter. + """ + flavintgroup = NuFlavIntGroup(flavintgroup) + if flavintgroup not in self._interpolants: + self._define_interpolant(flavintgroup=flavintgroup) + return self._interpolants[flavintgroup](energy)
+ + +
+[docs] + def get_xs_ratio_value(self, flavintgroup0, flavintgroup1, energy, + gamma=0): + """Get ratio of combined cross sections for `flavintgroup0` to combined + cross sections for `flavintgroup1`, weighted by E^{-`gamma`}. + + Parameters + ---------- + flavintgroup0, flavintgroup1 : NuFlavIntGroup or convertible thereto + energy : numeric or sequence thereof + Energy (or energies) at which to evaluate total cross section, in + units of GeV + + Returns + ------- + Ratio of combined cross sections flavintgroup0 / flavintgroup1 + evaluated at each energy. Shape of returned value matches that of + passed `energy` parameter. + """ + flavintgroup0 = NuFlavIntGroup(flavintgroup0) + flavintgroup1 = NuFlavIntGroup(flavintgroup1) + + self._define_interpolant(flavintgroup=flavintgroup0) + self._define_interpolant(flavintgroup=flavintgroup1) + + xs_ratio_vals = self._interpolants[flavintgroup0](energy) / \ + self._interpolants[flavintgroup1](energy) + # Special case to avoid multiplying by array of ones + if gamma == 0: + return xs_ratio_vals + return xs_ratio_vals * energy**(-gamma)
+ + + def _define_interpolant(self, flavintgroup=None): + """If `flavintgroup` is None, compute all (separate) flavint + interpolants; otherwise, compute interpolant for specified + `flavintgroup`. Do not re-compute if already present. + """ + if flavintgroup is None: + flavintgroups = [NuFlavIntGroup(fi) for fi in self.flavints] + else: + flavintgroups = [NuFlavIntGroup(flavintgroup)] + + for fig in flavintgroups: + if fig in self._interpolants: + continue + combined_xs = self._combine_xs(fig) + self._interpolants[fig] = interp1d( + x=self.energy, y=combined_xs, kind='linear', copy=False, + bounds_error=True, fill_value=0 + ) + + def _combine_xs(self, flavintgroup): + """Combine all cross sections specified by the flavints in + `flavintgroup`. All CC and NC interactions are separately grouped + together and averaged, then the average of each interaction type + is added to the other. + + If CC and NC interactions are present, they *must* be from the same + flavor(s). I.e., it doesn't make sense (and so causes an exception) if + you combine numu CC with numubar NC. It does make sense if you combine + numu and numubar CC with numu and numubar NC, though, and this is + allowed. + + Notes + ----- + Does not yet implement *Ngen/spectrum-weighted* averages, which are + necessary when combining cross sections of disparate flavor/interaction + types from different Monte Carlo simulation runs. + """ + flavintgroup = NuFlavIntGroup(flavintgroup) + # Trivial case: nothing to combine + if len(flavintgroup.flavints) == 1: + return self[flavintgroup.flavints[0]] + + cc_flavints = flavintgroup.cc_flavints + nc_flavints = flavintgroup.nc_flavints + if cc_flavints and nc_flavints: + assert flavintgroup.cc_flavs == flavintgroup.nc_flavs, \ + 'Combining CC and NC but CC flavors do not match NC flavors' + cc_avg_xs = 0 + if cc_flavints: + logging.trace('cc_flavints = %s' % (cc_flavints,)) + cc_avg_xs = np.sum([self[k] for k in cc_flavints], axis=0) \ + / len(cc_flavints) + nc_avg_xs = 0 + if nc_flavints: + logging.trace('nc_flavints = %s' % (nc_flavints,)) + nc_avg_xs = np.sum([self[k] for k in nc_flavints], axis=0) \ + / len(nc_flavints) + tot_xs = cc_avg_xs + nc_avg_xs + logging.trace('mean(tot_xs) = %s' % (np.mean(tot_xs),)) + return tot_xs + +
+[docs] + def get_xs_ratio_integral(self, flavintgroup0, flavintgroup1, e_range, + gamma=0, average=False): + """Energy-spectrum-weighted integral of (possibly a ratio of) + (possibly-combined) flavor/interaction type cross sections. + + Parameters + ---------- + flavintgroup0 : NuFlavIntGroup or convertible thereto + Flavor(s)/interaction type(s) for which to combine cross sections + for numerator of ratio + flavintgroup1 : None, NuFlavIntGroup or convertible thereto + Flavor(s)/interaction type(s) for which to combine cross sections + for denominator of ratio. If None is passed, the denominator of + the "ratio" is effectively 1. + e_range + Range of energy over which to integrate (GeV) + gamma : float >= 0 + Power law spectral index used for weighting the integral, + E^{-`gamma`}. Note that `gamma` should be >= 0. + average : bool + If True, return the average of the cross section (ratio) + If False, return the integral of the cross section (ratio) + + See also + -------- + See _combine_xs for detals on how flavints are combined. + """ + e_min = min(e_range) + e_max = max(e_range) + + assert e_min > 0, '`e_range` must lie strictly above 0' + assert e_max > e_min, \ + 'max(`e_range`) must be strictly larger than min(`e_range`)' + assert gamma >= 0, '`gamma` must be >= 0' + + if flavintgroup1 is None: + flavintgroups = [NuFlavIntGroup(flavintgroup0)] + else: + flavintgroups = [NuFlavIntGroup(flavintgroup0), + NuFlavIntGroup(flavintgroup1)] + + # Create interpolant(s) (to get xs at energy range's endpoints) + for fg in flavintgroups: + self._define_interpolant(flavintgroup=fg) + + all_energy = self._interpolants[flavintgroups[0]].x + xs_data = [self._interpolants[fg].y for fg in flavintgroups] + + for xd in xs_data: + logging.trace('mean(xs_data) = %e' % np.mean(xd)) + + # Get indices of data points within the specified energy range + idx = (all_energy > e_min) & (all_energy < e_max) + + # Get xsec at endpoints + xs_endpoints = [self._interpolants[fg]((e_min, e_max)) + for fg in flavintgroups] + + for ep in xs_endpoints: + logging.trace('xs_emin = %e, xs_emax = %e' % (ep[0], ep[1])) + + # Attach endpoints + energy = np.concatenate([[e_min], all_energy[idx], [e_max]]) + xs = [np.concatenate([[ep[0]], xsd[idx], [ep[1]]]) + for ep, xsd in zip(xs_endpoints, xs_data)] + + if len(xs) == 1: + xs = xs[0] + else: + xs = xs[0] / xs[1] + + # Weight xsec (or ratio) by energy spectrum + if gamma == 0: + wtd_xs = xs + else: + wtd_xs = xs*energy**(-gamma) + + logging.trace('mean(wtd_xs) = %e' % np.mean(wtd_xs)) + + # Integrate via trapezoidal rule + wtd_xs_integral = np.trapz(y=wtd_xs, x=energy) + + logging.trace('wtd_xs_integral = %e' % wtd_xs_integral) + + # Need to divide by integral of the weight function (over the same + # energy interval as wtd_xs integral was computed) to get the average + if average: + if gamma == 0: + # Trivial case + xs_average = wtd_xs_integral / (e_max - e_min) + else: + # Otherwise use trapezoidal rule to approximate integral + xs_average = wtd_xs_integral / \ + np.trapz(y=energy**(-gamma), x=energy) #* (e_max-e_min) + logging.trace('xs_average = %e' %(xs_average)) + return xs_average + + return wtd_xs_integral
+ + + #def get_xs_integral(self, flavintgroup, e_range, gamma=0, average=False): + # """Energy-spectrum-weighted integral or average of (possibly-combined) + # flavor/interaction type cross section. + + # Parameters + # ---------- + # flavintgroup : NuFlavIntGroup or convertible thereto + # Flavor(s)/interaction type(s) for which to combine cross sections + # e_range + # Range of energy over which to integrate (GeV) + # gamma : float >= 0 + # Power law spectral index used for weighting the integral, + # E^{-`gamma`}. Note that `gamma` should be >= 0. + # average : bool + # True: return the average of the cross section over `e_range` + # False: return the integral of the cross section over `e_range` + + # of flavints specfied in `flavintgroup`; if `gamma` specified, weight + # integral by simulated spectrum with that power-spectral index + # (i.e.: E^{-gamma}). + # + # Specifying `average`=True yields the weighted-average of cross section. + + # See also + # -------- + # See _combine_xs for detals on how flavints are combined. + # """ + # return self.get_xs_ratio_integral( + # flavintgroup0=flavintgroup, flavintgroup1=None, + # e_range=e_range, gamma=gamma, average=average + # ) + +
+[docs] + def plot(self, save=None): + """Plot cross sections per GeV; optionally, save plot to file. Requires + matplotlib and optionally uses seaborn to set "pretty" defaults. + + save : None, str, or dict + If None, figure is not saved (default) + If a string, saves figure as that name + If a dict, calls pyplot.savefig(**save) (i.e., save contains + keyword args to savefig) + """ + import matplotlib.pyplot as plt + + if self._ver is None: + leg_ver = '' + else: + leg_ver = self._ver + '\n' + leg_fs = 11 + figsize = (9, 6) + alpha = 1.0 + f = plt.figure(figsize=figsize) + f.clf() + ax1 = f.add_subplot(121) + ax2 = f.add_subplot(122) + ls = [dict(lw=5, ls='-'), + dict(lw=2, ls='-'), + dict(lw=1, ls='--'), + dict(lw=5, ls='-'), + dict(lw=3, ls='-.'), + dict(lw=1, ls='-')] + + energy = self.energy + nc_n = cc_n = 0 + for flavint in list(ALL_NUFLAVINTS.particles) + \ + list(ALL_NUFLAVINTS.antiparticles): + # Convert from [m^2] to [1e-38 cm^2] + xs = self[flavint] * 1e38 * 1e4 + if flavint.cc: + ax1.plot(energy, xs/energy, + alpha=alpha, + label='$%s$' % flavint.flav.tex, + **ls[cc_n%len(ls)]) + cc_n += 1 + else: + ax2.plot(energy, xs/energy, + alpha=alpha, + label='$%s$' % flavint.flav.tex, + **ls[nc_n%len(ls)]) + nc_n += 1 + + l1 = ax1.legend(title=leg_ver + + r'$\nu+{\rm H_2O}$, total CC', + fontsize=leg_fs, frameon=False, ncol=2) + l2 = ax2.legend(title=leg_ver + + r'$\nu+{\rm H_2O}$, total NC', + fontsize=leg_fs, frameon=False, ncol=2) + + for (ax, leg) in [(ax1, l1), (ax2, l2)]: + ax.set_xlim(0.1, 100) + ax.set_xscale('log') + ax.set_xlabel(r'$E_\nu\,{\rm [GeV]}$') + ax.set_ylabel( + r'$\sigma(E_\nu)/E_\nu\quad ' + + r'\left[10^{-38} \mathrm{cm^2} \mathrm{GeV^{-1}}\right]$' + ) + leg.get_title().set_fontsize(leg_fs) + plt.tight_layout() + + if isinstance(save, str): + logging.info('Saving cross sections plots to file "%s"', save) + f.savefig(save) + elif isinstance(save, dict): + logging.info('Saving cross sections plots via `figure.save(**%s)`', save) + f.savefig(**save)
+
+ + + +
+[docs] +def manual_test_CrossSections(outdir=None): + """Unit tests for CrossSections class""" + from shutil import rmtree + from tempfile import mkdtemp + + remove_dir = False + if outdir is None: + remove_dir = True + outdir = mkdtemp() + + try: + # "Standard" location of cross sections file in PISA; retrieve 2.6.4 for + # testing purposes + pisa_xs_file = 'cross_sections/cross_sections.json' + xs = CrossSections(ver='genie_2.6.4', xsec=pisa_xs_file) + + # Location of the root file to use (not included in PISA at the moment) + #test_dir = expand(os.path.join('/tmp', 'pisa_tests', 'cross_sections')) + #root_xs_file = os.path.join(test_dir, 'genie_2.6.4_simplified.root') + try: + root_xs_file = find_resource( + os.path.join( + #'tests', 'data', 'xsec', 'genie_2.6.4_simplified.root' + 'cross_sections', 'genie_xsec_H2O.root' + ) + ) + except Exception: + root_xs_file = None + + # Make sure that the XS newly-imported from ROOT match those stored in + # PISA + if root_xs_file: + xs_from_root = CrossSections.new_from_root(root_xs_file, ver='genie_2.6.4') + logging.info( + 'Found and loaded ROOT source cross sections file %s', root_xs_file + ) + assert xs_from_root.allclose(xs, rtol=1e-7) + + # Check XS ratio for numu_cc to numu_cc + numu_nc (user must inspect) + kg0 = NuFlavIntGroup('numu_cc') + kg1 = NuFlavIntGroup('numu_nc') + logging.info( + r'\int_1^80 xs(numu_cc) E^{-1} dE = %e', + xs.get_xs_ratio_integral(kg0, None, e_range=[1, 80], gamma=1) + ) + logging.info( + '(int E^{-gamma} * (sigma_numu_cc)/int(sigma_(numu_cc+numu_nc)) dE)' + ' / (int E^{-gamma} dE) = %e', + xs.get_xs_ratio_integral(kg0, kg0+kg1, e_range=[1, 80], gamma=1, + average=True) + ) + # Check that XS ratio for numu_cc+numu_nc to the same is 1.0 + int_val = xs.get_xs_ratio_integral(kg0+kg1, kg0+kg1, e_range=[1, 80], + gamma=1, average=True) + if not recursiveEquality(int_val, 1): + raise ValueError('Integral of nc + cc should be 1.0; get %e' + ' instead.' % int_val) + + # Check via plot that the + + # Plot all cross sections stored in PISA xs file + try: + alldata = from_file(pisa_xs_file) + xs_versions = alldata.keys() + for ver in xs_versions: + xs = CrossSections(ver=ver, xsec=pisa_xs_file) + xs.plot(save=os.path.join( + outdir, 'pisa_' + ver + '_nuxCCNC_H2O_cross_sections.pdf' + )) + except ImportError as exc: + logging.debug('Could not plot; possible that matplotlib not' + 'installed. ImportError: %s', exc) + + finally: + if remove_dir: + rmtree(outdir)
+ + + +if __name__ == "__main__": + set_verbosity(1) + manual_test_CrossSections() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/data_proc_params.html b/_modules/pisa/utils/data_proc_params.html new file mode 100644 index 000000000..89993981e --- /dev/null +++ b/_modules/pisa/utils/data_proc_params.html @@ -0,0 +1,789 @@ + + + + + + pisa.utils.data_proc_params — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.data_proc_params

+#!/usr/bin/env python
+
+"""
+DataProcParams class for importing, working with, and storing data processing
+parameters (e.g., PINGU's V5 processing).
+"""
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import Mapping, Sequence
+from collections import OrderedDict
+from copy import deepcopy
+import os
+import re
+
+import h5py
+# Note that the form of the numpy import is intentional, so that cuts -- which
+# are exectuted with `eval` -- will have access to numpy's namespace without
+# explicit reference to numpy. It's a hack, but it works well.
+from numpy import * # pylint: disable=wildcard-import, unused-wildcard-import, redefined-builtin
+import numpy # pylint: disable=unused-import
+import numpy as np # pylint: disable=reimported
+
+from pisa.utils import jsons
+from pisa.utils.flavInt import NuFlav, IntType, FlavIntData
+from pisa.utils.log import logging
+from pisa.utils import resources
+
+
+__all__ = ['MULTI_PART_FIELDS', 'NU_PDG_CODES', 'DataProcParams']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+MULTI_PART_FIELDS = [
+    'I3MCTree',
+]
+
+NU_PDG_CODES = [-12, 12, -14, 14, -16, 16]
+
+
+
+[docs] +class DataProcParams(dict): + """Class for importing, working with, and storing data processing + parameters. + + Implements cutting and particle identification (PID) functionality that can + be applied to MC/data that have the specified verion of processing applied + to it. + + Parameters + ---------- + data_proc_params : string or dict + If string: looks for the corresponding JSON resource (file) and loads + the contents as a data_proc_params dict + If dict: taken to be data_proc_params dict + The data_proc_params dict must follow the format described below. + detector : string + Converted to lower-case string which must be a detector key in + data_proc_params dict + proc_ver + Converted to lower-case string which must be a proc_ver key in + data_proc_params dict + + Notes + ----- + All information describing the processing version is loaded from a JSON + file with the following defined format: + + Note that the following common cuts are defined in this class and so + needn't be defined in the JSON file: + '1' : Select particles + '-1' : Select anti-particles + 'cc' : Select charged-current (CC) interactions + 'nc' : Select neutral-current (NC) interactions + 'true_upgoing_zen' : Select true-upgoing events by zenith angle + 'true_upgoing_coszen' : Select true-upgoing events by cos(zenith) angle + + data_proc_params dictionary format (and same for corresponding JSON file):: + + { + # Specify the detector name, lower case + + "<lower-case detector name>": { + + + # Specify the processing version, lower case + # Examples in PINGU include "4", "5", and "5.1" + + "<lower-case processing version>": { + + + # Mapping from standard names to path where these can be found in + # source HDF5 file; separate HDF5 path nodes with a forward-slash. + # + # Fields that cuts or particles in the "cuts"/"pid" sections below + # require (e.g., "cuts_step_1" for PINGU v5 processing), must be + # added here so the code knows how to extract the info from the + # source HDF5 file. + # + # Outputting a PID field to the destination PISA HDF5 file will *not* + # be done if the "pid" field is omitted below. + # + # In addition to the below-named fields, "true_coszen" and + # "reco_coszen" are generated from the data from the "true_zenith" + # and "reco_zenith" fields, respectively. So any of those fields can + # be used via the aforementioned names. + + "field_map": { + "run": "<HDF5 path to corresponding node>", + "nu_code": "<HDF5 path to corresponding node>", + "true_energy": "<HDF5 path to corresponding node>", + "true_zenith": "<HDF5 path to corresponding node>", + "reco_energy": "<HDF5 path to corresponding node>", + "reco_zenith": "<HDF5 path to corresponding node>", + "one_weight": "<HDF5 path to corresponding node>", + "generator_volume": "<HDF5 path to corresponding node>", + "generator_radius": "<HDF5 path to corresponding node>", + "detection_length": "<HDF5 path to corresponding node>", + "interaction_type": "<HDF5 path to corresponding node>", + "azimuth_min": "<HDF5 path to corresponding node>", + "azimuth_max": "<HDF5 path to corresponding node>", + "zenith_min": "<HDF5 path to corresponding node>", + "zenith_max": "<HDF5 path to corresponding node>", + "energy_log_min": "<HDF5 path to corresponding node>", + "energy_log_max": "<HDF5 path to corresponding node>", + "num_events_per_file": "<HDF5 path to corresponding node>", + "sim_spectral_index": "<HDF5 path to corresponding node>", + "pid": "<HDF5 path to corresponding node>", + }, + + + # Mapping from file's nu code to PDG nu codes (only necessary if + # nu_code values are not the PDG codes listed below) + + "nu_code_to_pdg_map": { + "<source nue code>": 12, + "<source nue_bar code>": -12, + "<source numu code>": 14, + "<source numu_bar code>": -14, + "<source nutau code>": 16, + "<source nutau_bar code>": -16 + }, + + + # Specify standard cuts + + "cuts": { + + + # Cut name; "bjrej" and "analysis" listed here are just example + # names for cuts one might specify + + "bgrej": { + + # Which of the fields in the field_map (and the derived fields + # such as true_coszen and reco_coszen) are required for this cut? + + "fields": ["<field1>", "<field2>", ... ], + + # Expression for an event to pass the cut (not get thrown away); + # see below for details on specifying an expression + + "pass_if": "<expression>" + }, + + "analysis": { + "fields": ["<field1>", "<field2>", ... ], + "pass_if": "<expression>" + }, + + "<cut name>": { + "fields": ["<field1>", "<field2>", ... ], + "pass_if": "<expression>" + } + }, + + + # Particle identification section + + "pid": { + + + # Name of the particle (case-insensitive); e.g., in PINGU this + # would be "trck" or "cscd" + + "<particle name 1>": { + + + # Which of the fields in the field_map (and the derived fields + # such as true_coszen and reco_coszen) are required for this cut? + + "field": [<field1>, <field2>, ...], + + + # Expression for an event to be classified as this type of + # particle; # see below for details on specifying an expression + + "criteria": "<expression>" + } + + "<particle name 2>": { + "field": [<field1>, <field2>, ...], + "criteria": "<expression>" + } + } + } + } + } + + Note that cuts "pass_if" and pid "criteria" expressions can make use of the + numpy namespace and have access to any columns extracted from the source + HDF5 file, by the standardized names given in the "field_map". For example, + if the following "fields" are specified for a cut in the data_proc_params + dict: + ["cuts_step_1", "cuts_step_2"] + then the following is a valid "pass_if" expression: + "(reco_zenith > pi/2) & (cuts_step_1 == 1) & (cuts_step_2 == 1)" + + """ + def __init__(self, detector, proc_ver, data_proc_params=None): + super().__init__() + if data_proc_params is None: + data_proc_params = 'events/data_proc_params.json' + if isinstance(data_proc_params, str): + ps = jsons.from_json(resources.find_resource(data_proc_params)) + elif isinstance(data_proc_params, dict): + ps = data_proc_params + else: + raise TypeError('Unhandled data_proc_params type passed in arg: ' + + type(data_proc_params)) + self.detector = detector + self.proc_ver = str(proc_ver) + self.det_key = [k for k in ps.keys() + if k.lower() == self.detector.lower()][0] + for key in ps[self.det_key].keys(): + lk = key.lower() + lpv = self.proc_ver.lower() + if lk == lpv or ('v'+lk == lpv) or (lk == 'v'+lpv): + self.procver_key = key + # This works for PINGU + elif ('msu_'+lk == lpv) or (lk == 'msu_'+lpv): + self.procver_key = key + elif ('nbi_'+lk == lpv) or (lk == 'nbi_'+lpv): + self.procver_key = key + # Generalising for DeepCore and different selections + ps = ps[self.det_key][self.procver_key] + self.update(ps) + + self.trans_nu_code = False + if 'nu_code_to_pdg_map' in self: + self.trans_nu_code = True + try: + self.nu_code_to_pdg_map = { + int(code): pdg + for code, pdg in self['nu_code_to_pdg_map'].items() + } + except: + self.nu_code_to_pdg_map = self['nu_code_to_pdg_map'] + + # NOTE: the keys are strings so the particular string formatting is + # important for indexing into the dict! + + # Add generic cuts + self['cuts'].update({ + # Cut for particles only (no anti-particles) + str(NuFlav(12).bar_code).lower(): + {'fields': ['nu_code'], 'pass_if': 'nu_code > 0'}, + # Cut for anti-particles only (no particles) + str(NuFlav(-12).bar_code).lower(): + {'fields': ['nu_code'], 'pass_if': 'nu_code < 0'}, + # Cut for charged-current interactions only + str(IntType('cc')).lower(): + {'fields': ['interaction_type'], + 'pass_if': 'interaction_type == 1'}, + # Cut for neutral-current interactions only + str(IntType('nc')).lower(): + {'fields': ['interaction_type'], + 'pass_if': 'interaction_type == 2'}, + # True-upgoing cut usinng the zenith field + 'true_upgoing_zen': + {'fields': ['true_zenith'], 'pass_if': 'true_zenith > pi/2'}, + # True-upgoing cut usinng the cosine-zenith field + 'true_upgoing_coszen': + {'fields': ['true_coszen'], 'pass_if': 'true_coszen < 0'}, + }) + + # Enforce rules on cuts: + self.validate_cut_spec(self['cuts']) + +
+[docs] + @staticmethod + def validate_cut_spec(cuts): + """Validate a cut specification dictionary""" + for cutname, cutspec in cuts.items(): + # Cut names are lower-case strings with no surrounding whitespace + assert isinstance(cutname, str) + assert cutname == cutname.lower() + assert cutname == cutname.strip() + # Has appropriate keys (and no extra) + assert len(cutspec) == 2 + assert 'fields' in cutspec + assert 'pass_if' in cutspec + assert not isinstance(cutspec['fields'], str) + # 'fields' contains a sequence + assert hasattr(cutspec['fields'], '__iter__') and \ + not isinstance(cutspec['fields'], str) + # 'pass_if' contains a string + assert isinstance(cutspec['pass_if'], str)
+ + +
+[docs] + @staticmethod + def validate_pid_spec(pids): + """Validate a PID specification dictionary""" + for particle_name, pidspec in pids.items(): + # Particle names are lower-case strings with no surrounding + # whitespace + assert isinstance(particle_name, str) + assert particle_name == particle_name.lower() + assert particle_name == particle_name.strip() + # Has appropriate keys (and no extra) + assert len(pidspec) == 2 + assert 'fields' in pidspec + assert 'criteria' in pidspec + assert not isinstance(pidspec['fields'], str) + # 'fields' contains a sequence + assert hasattr(pidspec['fields'], '__iter__') and \ + not isinstance(pidspec['fields'], str) + # 'criteria' contains a string + assert isinstance(pidspec['criteria'], str)
+ + + # TODO: prefix the field names with e.g. "$" such that anything that is + # _not_ prefixed by this is not replaced. This allows for righer + # expresssions (but also dangerous things...). +
+[docs] + @staticmethod + def retrieve_expression(h5group, expression): + """Retrieve data from an HDF5 group `h5group` according to + `expresssion`. This can apply expressions with simple mathematical + operators and numpy functions to multiple fields within the HDF5 file + to derive the output. Python keywords are _not_ allowed, since they + may alias with a name. + + Refer to any numpy functions by prefixing with either "np.<func>" or + "numpy.<func>". In order to specify division, spaces must surround the + forward slash, such that it isn't interpreted as a path. + + Nodes in the HDF5 hierarchy are separated by forward slashes ("/") in a + path spec. We restrict valid HDF5 node names to contain the characters + a-z, A-Z, 0-9, peroids ("."), and underscores ("_"). with the + additional restriction that the node name must not start with a period + or a number, and a path cannot start with a slash. + + + Parameters + ---------- + h5group : h5py Group + expression : string + Expression to evaluate. + + Returns + ------- + result : result of evaluating `expression` + + Examples + -------- + >>> retrieve_expression('np.sqrt(MCneutrino/x**2 + MCneutrino/y**2)') + + Indexing into the data arrays can also be performed, and numpy masks + used as usual: + + >>> expr = 'I3MCTree/energy[I3MCTree/event == I3EventHeader[0] + + """ + h5path_re = re.compile( + r''' + ([a-z_] # First character must be letter or underscore + [a-z0-9_.]* # 0 or more legal chars: letters, numbers, _, . + (?: # (Do not return the following group separately) + [/]{0,1} # Next character CAN be no or 1 front-slash + [a-z0-9_.]+ # But a slash *must* be followed by legal chars + )* # Slash+chars pattern might not occur, or repeat + )''', re.VERBOSE | re.IGNORECASE + ) + numpy_re = re.compile(r'^(np|numpy)\.[a-z_.]+', re.IGNORECASE) + + eval_str = expression + intermediate_data = {} + for h5path in h5path_re.findall(expression): + if numpy_re.match(h5path): + continue + intermediate_data[h5path] = DataProcParams.retrieve_node_data( + h5group, h5path + ) + eval_str = eval_str.replace(h5path, + "intermediate_data['%s']"%h5path) + + try: + result = eval(eval_str) # pylint: disable=eval-used + except: + logging.error('`expression` "%s" was translated into `eval_str`' + ' "%s" and failed to evaluate.', + expression, eval_str) + raise + + return result
+ + +
+[docs] + @staticmethod + def retrieve_node_data(h5group, address, allow_missing=False): + """Retrieve data from an HDF5 group `group` at address `address`. + Levels of hierarchy are separated by forward-slashes ('/'). + + See h5py for further details on specifying a valid `address`. + """ + subgroup = h5group + for sub_addy in address.split('/'): + try: + subgroup = subgroup[sub_addy] + except KeyError: + if allow_missing: + return None + raise + return subgroup
+ + +
+[docs] + @staticmethod + def populate_global_namespace(h5group, field_map, allow_missing=False): + """Populate the Python global namespace with variables named as the + keys in `field_map` and values loaded from the `h5group` at addresses + specified by the corresponding values in `field_map`. + """ + for var, h5path in field_map.items(): + try: + value = DataProcParams.retrieve_node_data( + h5group, h5path, allow_missing=False + ) + except KeyError: + if allow_missing: + return None + raise + globals()[var] = value
+ + + # TODO: make the following behave like `retrieve_expression` method which + # does not rely on populating globals (just a dict, the name of which gets + # substituted in where approprite to the expression) to work. +
+[docs] + @staticmethod + def cut_bool_idx(h5group, cut_fields, keep_criteria): + """Return numpy boolean indexing for data in `h5group` given a cut + specified using `cut_fields` in the `h5group` and evaluation criteria + `keep_criteria` + + Parameters + ---------- + h5group : h5py node/entity + cut_fields : field_map dict + keep_criteria : string + + Returns + ------- + bool_idx : numpy array (1=keep, 0=reject) + + """ + DataProcParams.populate_global_namespace(h5group, cut_fields) + bool_idx = eval(keep_criteria) # pylint: disable=eval-used + return bool_idx
+ + +
+[docs] + def get_data(self, h5, run_settings=None, flav=None): + """Get data attached to an HDF5 node, returned as a dictionary. + + The returned dictionary's keys match those in the field_map and the + dict's values are the data from the HDF5's nodes found at the addresses + specified as values in the field_map + + Parameters + ---------- + file_type : string, one of {'mc', 'data'} + + """ + not_fields_in_data = ['I3MCWeightDict', 'PrimaryNu', 'trueNeutrino'] + myfile = False + try: + if isinstance(h5, str): + myfile = True + h5 = h5py.File(os.path.expandvars(os.path.expanduser(h5)), + mode='r') + data = OrderedDict() + for name, path in self['field_map'].items(): + datum = self.retrieve_expression(h5, path) + path_parts = path.split('/') + if (file_type == 'data' and 'I3MCWeightDict' in path_parts + or 'PrimaryNu' in path_parts or 'trueNeutrino' in path_parts): + continue + + if path_parts[0] == 'I3MCTree' and path_parts[-1] != 'Event': + evts = self.retrieve_node_data( + h5, '/'.join(path_parts[:-1] + ['Event']) + ) + pdgs = self.retrieve_node_data( + h5, '/'.join(path_parts[:-1] + ['pdg_encoding']) + ) + energies = self.retrieve_node_data( + h5, '/'.join(path_parts[:-1] + ['energy']) + ) + + # Looping here is ugly and slow, but people don't make the + # Event field unique, so the only thing you can count on is + # that if the event number changes in sequence, you're in a + # different Event (for now, I think). The actual Event + # number can be repeated elsewhere, though. + # + # This makes for wonderfully reproducible results. + # </sardonic laughter> + new_datum = [] + this_evt = np.nan + this_d = None + for d, evt, pdg, egy in zip(datum, evts, pdgs, energies): + if evt != this_evt: + if this_d is not None: + new_datum.append(this_d) + this_egy = -np.inf + this_d = None + this_evt = evt + if egy > this_egy and pdg in NU_PDG_CODES: + this_egy = egy + this_d = d + if this_d is not None: + new_datum.append(this_d) + datum = new_datum + + data[name] = np.array(datum) + + finally: + if myfile and isinstance(h5, h5py.File): + try: + h5.close() + except: # TODO: specify exception type(s)! + pass + + self.interpret_data(data) + # TODO: enable consistency checks here & implement in run_settings + #if run_settings is not None: + # run_settings.consistency_checks(data, flav=flav) + + # TODO: implement flav filtering (or not? or more advanced filtering?) + return data
+ + +
+[docs] + def interpret_data(self, data): + """Perform mappings from non-standard to standard values (such as + translating non-PDG neutrino flavor codes to PDG codes) and add + fields expected to be useful (such as coszen, derived from zen fields). + + Attach / reattach the translated/new fields to the `data` object passed + into this methd. + + """ + for k, v in data.items(): + if isinstance(v, Sequence): + data[k] = v[0] + + if self.trans_nu_code: + data['nu_code'] = [ + self.nu_code_to_pdg_map[code] for code in data['nu_code'] + ] + if 'true_zenith' in data: + data['true_coszen'] = np.cos(data['true_zenith']) + if 'reco_zenith' in data: + data['reco_coszen'] = np.cos(data['reco_zenith']) + return data
+ + +
+[docs] + @staticmethod + def subselect(data, fields, indices=None): + if isinstance(data, FlavIntData): + outdata = FlavIntData() + for flavint in data.flavints: + outdata[flavint] = DataProcParams.subselect(data[flavint], + fields=fields, + indices=indices) + elif isinstance(data, Mapping): + if indices is None: + return {k:v for k, v in data.items() if k in fields} + return {k:v[indices] for k, v in data.items() if k in fields}
+ + +
+[docs] + def apply_cuts(self, data, cuts, boolean_op='&', return_fields=None): + """Perform `cuts` on `data` and return a dict containing + `return_fields` from events that pass the cuts. + + Parameters + ---------- + data : single-level dict or FlavIntData object + cuts : string or dict, or sequence thereof + boolean_op : string + return_fields : string or sequence thereof + """ + if isinstance(data, FlavIntData): + outdata = FlavIntData() + for flavint in data.flavints: + outdata[flavint] = self.apply_cuts( + data[flavint], cuts=cuts, boolean_op=boolean_op, + return_fields=return_fields + ) + return outdata + + if isinstance(cuts, (str, dict)): + cuts = [cuts] + + # Default is to return all fields + if return_fields is None: + return_fields = data.keys() + + # If no cuts specified, return all data from specified fields + if len(cuts) == 0: + return self.subselect(data, return_fields) + + cut_strings = set() + cut_fields = set() + for cut in cuts: + if isinstance(cut, dict): + self.validate_cut_spec(cut) + elif cut.lower() in self['cuts']: + cut = self['cuts'][cut.lower()] + else: + raise Exception('Unrecognized or invalid cut: "'+str(cut)+'"') + cut_strings.add(cut['pass_if']) + cut_fields.update(cut['fields']) + + # Combine cut criteria strings together with boolean operation + cut_string = boolean_op.join(['('+cs+')' for cs in cut_strings]) + + # Load the fields necessary for the cut into the global namespace + for field in set(cut_fields): + globals()[field] = data[field] + + # Evaluate cuts, returning a boolean array + try: + bool_idx = eval(cut_string) # pylint: disable=eval-used + except: + logging.error('Failed to evaluate `cut_string` "%s"', cut_string) + raise + + # Return specified (or all) fields, indexed by boolean array + return {f:np.array(data[f])[bool_idx] for f in return_fields}
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/fileio.html b/_modules/pisa/utils/fileio.html new file mode 100644 index 000000000..4c220b378 --- /dev/null +++ b/_modules/pisa/utils/fileio.html @@ -0,0 +1,713 @@ + + + + + + pisa.utils.fileio — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.fileio

+"""
+Generic file I/O, dispatching specific file readers/writers as necessary
+"""
+
+
+from __future__ import absolute_import
+
+import errno
+from functools import reduce
+import operator
+import os
+import pickle
+import re
+
+import numpy as np
+
+from pisa.utils import hdf
+from pisa.utils import jsons
+from pisa.utils import log
+from pisa.utils import resources
+
+
+__all__ = [
+    'PKL_EXTS',
+    'CFG_EXTS',
+    'ZIP_EXTS',
+    'TXT_EXTS',
+    'XOR_EXTS',
+    'NSORT_RE',
+    'UNSIGNED_FSORT_RE',
+    'SIGNED_FSORT_RE',
+    'expand',
+    'mkdir',
+    'get_valid_filename',
+    'nsort',
+    'nsort_key_func',
+    'fsort',
+    'find_files',
+    'from_cfg',
+    'from_pickle',
+    'to_pickle',
+    'from_file',
+    'to_file',
+]
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+PKL_EXTS = ['pickle', 'pckl', 'pkl', 'p']
+CFG_EXTS = ['ini', 'cfg']
+ZIP_EXTS = ['bz2']
+TXT_EXTS = ['txt', 'dat']
+XOR_EXTS = ['xor']
+
+NSORT_RE = re.compile(r'(\d+)')
+UNSIGNED_FSORT_RE = re.compile(
+    r'''
+    (
+        (?:\d+(?:\.\d*){0,1}) # Digit(s) followed by opt. "." and opt. digits
+        |(?:\.\d+)            # Or starts with "." and must have digits after
+        (?:e[+-]?\d+){0,1}    # Opt.: followed by exponent: e12, e-12, e+0, etc.
+    )
+    ''',
+    re.IGNORECASE | re.VERBOSE
+)
+SIGNED_FSORT_RE = re.compile(
+    r'''
+    (
+        [+-]{0,1}             # Optional sign
+        (?:\d+(?:\.\d*){0,1}) # Digit(s) followed by opt. "." and opt. digits
+        |(?:\.\d+)            # Or starts with "." but must have digits after
+        (?:e[+-]?\d+){0,1}    # Opt.: exponent: e12, e-12, e+0, etc.
+    )
+    ''',
+    re.IGNORECASE | re.VERBOSE
+)
+
+
+
+[docs] +def expand(path, exp_user=True, exp_vars=True, absolute=False, resolve_symlinks=False): + """Convenience function for expanding a path + + Parameters + ---------- + path : string + Path to be expanded. + + exp_vars : bool + Expand the string using environment variables. E.g. + "$HOME/${vardir}/xyz" will have "$HOME" and "${vardir}$" replaced by + the values stored in "HOME" and "vardir". + + exp_user : bool + Expand special home dir spec character, tilde: "~". + + absolute : bool + Make a relative path (e.g. "../xyz") absolute, referenced from system + root directory, "/dir/sbudir/xyz". + + resolve_symlinks : bool + Resolve symlinks to the paths they refer to + + Returns + ------- + exp_path : string + Expanded path + + """ + if exp_vars: + path = os.path.expandvars(path) + if exp_user: + path = os.path.expanduser(path) + if absolute: + path = os.path.abspath(path) + if resolve_symlinks: + path = os.path.realpath(path) + return path
+ + + +def check_file_exists(fname, overwrite=True, warn=True): + """See if a file exists, warning, raising an exception, or doing neither if + it already exists. + + Note that while this function can warn or raise an exception indicating the + file will be overwritten, this function does not actually overwrite any + files. + + Parameters + ---------- + fname : string + File name or path to try to find. + + overwrite : bool + Whether it's okay for the file to be overwritten if it exists. Note + that this function does not actually overwrite the file. + + warn : bool + Whether to warn the user that the file will be overwritten if it + exists. Note that this function does not actually overwrite the file. + + Returns + ------- + fpath : string + Expanded path of the `fname` passed in. + + """ + fpath = expand(fname) + if os.path.exists(fpath): + if overwrite: + if warn: + log.logging.warning("Overwriting file at '%s'", fpath) + else: + raise Exception("Refusing to overwrite path '%s'" % fpath) + return fpath + + +
+[docs] +def mkdir(d, mode=0o0750, warn=True): + """Simple wrapper around os.makedirs to create a directory but not raise an + exception if the dir already exists + + Parameters + ---------- + d : string + Directory path + mode : integer + Permissions on created directory; see os.makedirs for details. + warn : bool + Whether to warn if directory already exists. + + """ + try: + os.makedirs(d, mode=mode) + except OSError as err: + if err.errno == errno.EEXIST: + if warn: + log.logging.warning('Directory "%s" already exists', d) + else: + raise err + else: + log.logging.info('Created directory "%s"', d)
+ + + +
+[docs] +def get_valid_filename(s): + """Sanitize string to make it reasonable to use as a filename. + + From https://github.com/django/django/blob/master/django/utils/text.py + + Parameters + ---------- + s : string + + Examples + -------- + >>> print(get_valid_filename(r'A,bCd $%#^#*!()"\' .ext ')) + 'a_bcd__.ext' + + """ + s = re.sub(r'[ ,;\t]', '_', s.strip().lower()) + return re.sub(r'(?u)[^-\w.]', '', s)
+ + + +
+[docs] +def nsort(l, reverse=False): + """Sort a sequence of strings containing integer number fields by the + value of those numbers, rather than by simple alpha order. Useful + for sorting e.g. version strings, etc.. + + Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments + + Parameters + ---------- + l : sequence of strings + Sequence of strings to be sorted. + + reverse : bool, optional + Whether to reverse the sort order (True => descending order) + + Returns + ------- + sorted_l : list of strings + Sorted strings + + Examples + -------- + >>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt'] + >>> nsort(l) + ['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt'] + + See Also + -------- + fsort + Sort sequence of strings with floating-point numbers in the strings. + + """ + def _field_splitter(s): + spl = NSORT_RE.split(s) + non_numbers = spl[0::2] + numbers = [int(i) for i in spl[1::2]] + return reduce(operator.concat, zip(non_numbers, numbers)) + + return sorted(l, key=_field_splitter, reverse=reverse)
+ + + +
+[docs] +def nsort_key_func(s): + """Use as the `key` argument to the `sorted` function or `sort` method. + + Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments + + Examples + -------- + >>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt'] + >>> sorted(l, key=nsort_key_func) + ['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt'] + + """ + spl = NSORT_RE.split(s) + key = [] + for non_number, number in zip(spl[::2], spl[1::2]): + key.append(non_number) + key.append(int(number)) + return key
+ + + +
+[docs] +def fsort(l, signed=True, reverse=False): + """Sort a sequence of strings with one or more floating point number fields + in using the floating point value(s) (and intervening strings are treated + as normally done). Note that + and - preceding a number are included in the + floating point value unless `signed=False`. + + Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments + + Parameters + ---------- + l : sequence of strings + Sequence of strings to be sorted. + + signed : bool, optional + Whether to include a "+" or "-" preceeding a number in its value to be + sorted. One might specify False if "-" is used exclusively as a + separator in the string. + + reverse : bool, optional + Whether to reverse the sort order (True => descending order) + + Returns + ------- + sorted_l : list of strings + Sorted strings + + Examples + -------- + >>> l = ['a-0.1.txt', 'a-0.01.txt', 'a-0.05.txt'] + >>> fsort(l, signed=True) + ['a-0.1.txt', 'a-0.05.txt', 'a-0.01.txt'] + + >>> fsort(l, signed=False) + ['a-0.01.txt', 'a-0.05.txt', 'a-0.1.txt'] + + See Also + -------- + nsort + Sort using integer-only values of numbers; good for e.g. version + numbers, where periods are separators rather than decimal points. + + """ + if signed: + fsort_re = SIGNED_FSORT_RE + else: + fsort_re = UNSIGNED_FSORT_RE + + def _field_splitter(s): + spl = fsort_re.split(s) + non_numbers = spl[0::2] + numbers = [float(i) for i in spl[1::2]] + return reduce(operator.concat, zip(non_numbers, numbers)) + + return sorted(l, key=_field_splitter, reverse=reverse)
+ + + + +
+[docs] +def find_files(root, regex=None, fname=None, recurse=True, dir_sorter=nsort, + file_sorter=nsort): + """Find files by re or name recursively w/ ordering. + + Code adapted from + stackoverflow.com/questions/18282370/python-os-walk-what-order + + Parameters + ---------- + root : str + Root directory at which to start searching for files + + regex : str or re.SRE_Pattern + Only yield files matching `regex`. + + fname : str + Only yield files matching `fname` + + recurse : bool + Whether to search recursively down from the root directory + + dir_sorter + Function that takes a list and returns a sorted version of it, for + purposes of sorting directories + + file_sorter + Function as specified for `dir_sorter` but used for sorting file names + + + Yields + ------ + fullfilepath : str + basename : str + match : re.SRE_Match or None + + """ + root = expand(root) + if isinstance(regex, str): + regex = re.compile(regex) + + # Define a function for accepting a filename as a match + if regex is None: + if fname is None: + def _validfilefunc(fn): # pylint: disable=unused-argument + return True, None + else: + def _validfilefunc(fn): + if fn == fname: + return True, None + return False, None + else: + def _validfilefunc(fn): + match = regex.match(fn) + if match and (len(match.groups()) == regex.groups): + return True, match + return False, None + + if recurse: + for rootdir, dirs, files in os.walk(root, followlinks=True): + for basename in file_sorter(files): + fullfilepath = os.path.join(rootdir, basename) + is_valid, match = _validfilefunc(basename) + if is_valid: + yield fullfilepath, basename, match + for dirname in dir_sorter(dirs): + fulldirpath = os.path.join(rootdir, dirname) + for basename in file_sorter(os.listdir(fulldirpath)): + fullfilepath = os.path.join(fulldirpath, basename) + if os.path.isfile(fullfilepath): + is_valid, match = _validfilefunc(basename) + if is_valid: + yield fullfilepath, basename, match + else: + for basename in file_sorter(os.listdir(root)): + fullfilepath = os.path.join(root, basename) + #if os.path.isfile(fullfilepath): + is_valid, match = _validfilefunc(basename) + if is_valid: + yield fullfilepath, basename, match
+ + + +
+[docs] +def from_cfg(fname): + """Load a PISA config file""" + from pisa.utils.config_parser import PISAConfigParser + config = PISAConfigParser() + try: + config.read(fname) + except: + log.logging.error( + 'Failed to read PISA config file, `fname`="%s"', fname + ) + raise + return config
+ + + +
+[docs] +def from_pickle(fname): + """Load from a Python pickle file""" + try: + + # Open the file (binary) + f = open(fname, 'rb') + + # Try standard pickle load + try: + return pickle.load(f) + + # Can get encoding errors when using python3 to open pickle files + # created with python2 Handle this case + except UnicodeDecodeError: + return pickle.load(f, encoding="latin1") + + except: + log.logging.error('Failed to load pickle file, `fname`="%s"', fname) + raise + + finally: + f.close()
+ + + +
+[docs] +def to_pickle(obj, fname, overwrite=True, warn=True): + """Save object to a pickle file""" + check_file_exists(fname=fname, overwrite=overwrite, warn=warn) + return pickle.dump(obj, open(fname, 'wb'), protocol=pickle.HIGHEST_PROTOCOL)
+ + + +def from_txt(fname, as_array=False): + """Load from a text (txt) file""" + try: + if as_array: + with open(fname, 'r') as f: + a = f.readlines() + a = [[float(m) for m in l.strip('\n\r').split()] for l in a] + a = np.array(a) + else: + with open(fname, 'r') as f: + a = f.read() + except: + log.logging.error('Failed to load txt file, `fname`="%s"', fname) + raise + return a + + +def to_txt(obj, fname): + """Save object to a text (txt) file""" + with open(fname, 'w') as f: + f.write(obj) + + +
+[docs] +def from_file(fname, fmt=None, **kwargs): + """Dispatch correct file reader based on `fmt` (if specified) or guess + based on file name's extension. + + Parameters + ---------- + fname : string + File path / name from which to load data. + + fmt : None or string + If string, for interpretation of the file according to this format. If + None, file format is deduced by an extension found in `fname`. + + **kwargs + All other arguments are passed to the function dispatched to read the + file. + + Returns + ------- + Object instantiated from the file (string, dictionary, ...). Each format + is interpreted differently. + + Raises + ------ + ValueError + If extension is not recognized + + """ + if fmt is None: + rootname, ext = os.path.splitext(fname) + ext = ext.replace('.', '').lower() + else: + rootname = fname + ext = fmt.lower() + + if ext in ZIP_EXTS or ext in XOR_EXTS: + rootname, inner_ext = os.path.splitext(rootname) + inner_ext = inner_ext.replace('.', '').lower() + ext = inner_ext + + fname = resources.find_resource(fname) + if ext in jsons.JSON_EXTS: + return jsons.from_json(fname, **kwargs) + if ext in hdf.HDF5_EXTS: + return hdf.from_hdf(fname, **kwargs) + if ext in PKL_EXTS: + return from_pickle(fname, **kwargs) + if ext in CFG_EXTS: + return from_cfg(fname, **kwargs) + if ext in TXT_EXTS: + return from_txt(fname, **kwargs) + errmsg = 'File "%s": unrecognized extension "%s"' % (fname, ext) + log.logging.error(errmsg) + raise ValueError(errmsg)
+ + + +
+[docs] +def to_file(obj, fname, fmt=None, overwrite=True, warn=True, **kwargs): + """Dispatch correct file writer based on fmt (if specified) or guess + based on file name's extension""" + if fmt is None: + rootname, ext = os.path.splitext(fname) + ext = ext.replace('.', '').lower() + else: + rootname = fname + ext = fmt.lower() + + dirname = os.path.dirname(fname) + + os.makedirs(dirname, exist_ok=True) + + if ext in ZIP_EXTS or ext in XOR_EXTS: + rootname, inner_ext = os.path.splitext(rootname) + inner_ext = inner_ext.replace('.', '').lower() + ext = inner_ext + + if ext in jsons.JSON_EXTS: + return jsons.to_json(obj, fname, overwrite=overwrite, warn=warn, + **kwargs) + elif ext in hdf.HDF5_EXTS: + return hdf.to_hdf(obj, fname, overwrite=overwrite, warn=warn, **kwargs) + elif ext in PKL_EXTS: + return to_pickle(obj, fname, overwrite=overwrite, warn=warn, **kwargs) + elif ext in TXT_EXTS: + if kwargs: + raise ValueError('Following additional keyword arguments not' + ' accepted when writing to text file: %s' % + kwargs.keys()) + return to_txt(obj, fname) + else: + errmsg = 'Unrecognized file type/extension: ' + ext + log.logging.error(errmsg) + raise TypeError(errmsg)
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/fisher_matrix.html b/_modules/pisa/utils/fisher_matrix.html new file mode 100644 index 000000000..41551d1b8 --- /dev/null +++ b/_modules/pisa/utils/fisher_matrix.html @@ -0,0 +1,868 @@ + + + + + + pisa.utils.fisher_matrix — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.fisher_matrix

+"""
+A Fisher matrix class definition.
+"""
+#TODO: fix, adapt, clean up
+
+from __future__ import absolute_import, division
+
+import copy
+import itertools
+import json
+import operator
+import sys
+
+import numpy as np
+from scipy.stats import chi2
+
+from pisa import FTYPE
+from pisa.utils.fileio import from_file, to_file
+from pisa.utils.log import logging
+
+
+__all__ = ['FisherMatrix']
+
+__author__ = 'L. Schulte, S. Boeser, T. Ehrhardt'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+def build_fisher_matrix(gradient_hist_flat_d, fiducial_hist, fiducial_params):
+    # fix the ordering of parameters
+    params = sorted(gradient_hist_flat_d.keys())
+
+    # find non-empty bins in flattened map
+    fiducial_hist_flat = fiducial_hist.nominal_values['total'].flatten()
+    nonempty = np.nonzero(fiducial_hist_flat)
+    logging.debug("Using %u non-empty bins of %u" %
+                  (len(nonempty[0]), len(fiducial_hist_flat)))
+
+    # get gradients as calculated above for non-zero bins
+    gradients = np.array(
+        [gradient_hist_flat_d[par][nonempty] for par in params], dtype=FTYPE
+    )
+
+    # get error estimate from best-fit bin count for non-zero bins
+    # TODO: these are not variances
+    variances = fiducial_hist['total'].std_devs.flatten()[nonempty]
+
+    # Loop over all parameters per bin (simple transpose) and calculate Fisher
+    # matrix by getting the outer product of all gradients in a bin.
+    # Result is sum of matrix for all bins.
+    fmatrix = np.zeros((len(params), len(params)), dtype=FTYPE)
+    for bin_gradients, bin_var in zip(gradients.T, variances):
+        fmatrix += np.outer(bin_gradients, bin_gradients)/bin_var
+
+    # construct the fisher matrix object
+    fisher = FisherMatrix(
+        matrix=fmatrix,
+        parameters=params,  #order is important here!
+        best_fits=fiducial_params.nominal_values, # TODO: fix order (in the sense of making it definite?)
+        priors=None, #FIXME: support priors
+    )
+
+    return fisher, nonempty
+
+
+def get_fisher_matrix(hypo_maker, test_vals, counter):
+    """Compute Fisher matrices at fiducial hypothesis given data.
+    """
+    from pisa.utils.pull_method import get_gradients
+    hypo_params = hypo_maker.params.free
+
+    #fisher = {'total': {}}
+    fid_hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True)
+    counter += 1
+
+    pmaps = {'total': {}}
+    gradient_maps = {'total': {}}
+
+    for pname in hypo_params.names:
+        logging.trace("Computing binwise gradients for parameter '%s'." % pname)
+        tpm, gm = get_gradients(
+            param=pname,
+            hypo_maker=hypo_maker,
+            test_vals=test_vals[pname],
+        )
+        counter += len(test_vals[pname])
+        # the maps corresponding to variations of
+        # a single param are not flattened
+        pmaps['total'][pname] = tpm
+        # these are flattened, which is also what the
+        # method below assumes
+        gradient_maps['total'][pname] = gm
+
+    # hypo param values are not at nominal anymore,
+    # but we don't use their values here
+
+    fisher, nonempty = build_fisher_matrix(
+        gradient_hist_flat_d=gradient_maps['total'],
+        fiducial_hist=fid_hypo_asimov_dist,
+        fiducial_params=hypo_params
+    )
+    return fisher, gradient_maps, fid_hypo_asimov_dist, nonempty
+
+
+### FISHER MATRIX CLASS DEFINITION ###
+
+
+[docs] +class FisherMatrix: + + def __init__(self, matrix, parameters, best_fits, priors=None, + labels=None): + """ + Construct a fisher matrix object + Arguments + --------- + matrix : len(parameters) x len(parameters) matrix or 2D array + Matrix values + parameters : sequence of str + Identifiers used for each parameter + best_fits : sequence of numbers + Best-fit values for each parameter + priors : sequence of Prior objects or None + Priors for each parameter; only accepts Gaussian or uniform priors, + otherwise raises TypeError. Note that uniform priors are + functionally equivalent to no prior. If None, uniform priors are + used for all parameters (i.e., sigma=np.inf). + labels : sequence of str or None + Pretty-print labels for the parameters. If None, use `paramaters` + strings as labels. + """ + + self.matrix = np.matrix(matrix) + self.parameters = list(parameters) + self.best_fits = list(best_fits) + if priors is None: + self.priors = [np.inf for p in self.parameters] + else: + self.priors = [self.translatePrior(prior) for prior in priors] + self.labels = list(labels) if labels is not None else parameters + + self.checkConsistency() + self.calculateCovariance() + + +
+[docs] + @classmethod + def fromFile(cls, filename): + """ + Load a Fisher matrix from a json file + """ + + return cls(**from_file(filename))
+ + + +
+[docs] + @classmethod + def fromPaPAFile(cls, filename): + """ + Load Fisher matrix from json file + """ + + loaded_dict = json.load(open(filename, 'r')) + + matrix = np.matrix(loaded_dict.pop('matrix')) + parameters = loaded_dict.pop('parameters') + best_fits = loaded_dict.pop('best_fits') + labels = loaded_dict.pop('labels') + + new_fm = cls(matrix=matrix, parameters=parameters, + best_fits=best_fits, labels=labels) + + while not len(loaded_dict)==0: + + par, prior_dict = loaded_dict.popitem() + + #self.parameters.append(par) + for value in prior_dict.itervalues(): + new_fm.addPrior(par, value) + + new_fm.checkConsistency() + new_fm.calculateCovariance() + + return new_fm
+ + + + def __add__(self, other): + + # merge parameter lists + new_params = list(set(self.parameters+other.parameters)) + + new_best_fits = [] + new_labels = [] + for param in new_params: + try: + value = self.getBestFit(param) + lbl = self.getLabel(param) + except IndexError: + value = other.getBestFit(param) + lbl = other.getLabel(param) + + new_best_fits.append(value) + new_labels.append(lbl) + + # generate blank matrix + new_matrix = np.matrix( np.zeros((len(new_params), len(new_params))) ) + + # fill new matrix + for (i,j) in itertools.product(range(len(new_params)), range(len(new_params))): + + for summand in [self, other]: + try: + i_sum = summand.getParameterIndex(new_params[i]) + j_sum = summand.getParameterIndex(new_params[j]) + except IndexError: + continue + + new_matrix[i,j] += summand.matrix[i_sum, j_sum] + + # create new FisherMatrix object + new_object = FisherMatrix(matrix=new_matrix, parameters=new_params, + best_fits=new_best_fits, labels=new_labels) + new_object.calculateCovariance() + + # fill in priors + for par in new_object.parameters: + + for summand in [self, other]: + + try: + prior_dict = summand.getPriorDict() + except IndexError: + continue + + for par, sigma in prior_dict.items(): + new_object.addPrior(par, sigma) + + # ...and we're done! + return new_object + + +
+[docs] + def checkConsistency(self): + """ + Check whether number of parameters matches dimension of matrix; + matrix is symmetrical; parameter names are unique; and number of + best_fits, labels, and priors all match number of parameters. + """ + + if not len(self.parameters) == np.shape(self.matrix)[1]: + raise IndexError('Number of parameters does not match dimension of Fisher matrix! [%i, %i]' \ + %(len(self.parameters), len(self.matrix)) ) + + if not np.all(self.matrix.T == self.matrix): + raise ValueError('Fisher matrix not symmetric!') + + if not len(self.parameters) == len(set(self.parameters)): + raise ValueError('Parameter names not unique! %s' \ + %(np.array2string(np.array(self.parameters))) ) + + if not len(self.parameters) == len(self.best_fits) == len(self.labels) == len(self.priors): + raise ValueError('Parameters, best_fits, labels, and priors must all have same length! (lengths = %d, %d, %d, %d)' \ + %(len(self.parameters), len(self.best_fits), len(self.labels), len(self.priors)) ) + + return True
+ + + +
+[docs] + def saveFile(self, filename): + """ + Write Fisher matrix to json file + """ + + dict_to_write = {} + dict_to_write['matrix'] = self.matrix + dict_to_write['parameters'] = self.parameters + dict_to_write['best_fits'] = self.best_fits + dict_to_write['labels'] = self.labels + dict_to_write['priors'] = self.priors + + to_file(dict_to_write, filename)
+ + + +
+[docs] + def getParameterIndex(self, par): + """ + Whether par is already existing in parameter list + """ + + if not par in self.parameters: + raise IndexError('%s not found in parameter list %s'\ + %(par, np.array2string(np.array(self.parameters)) ) ) + return self.parameters.index(par)
+ + + + ## -> Why on earth would we ever want to do that? +
+[docs] + def renameParameter(self, fromname, toname): + """ + Rename a parameter + """ + + idx = self.getParameterIndex(fromname) + + if toname in self.parameters[self.parameters!=fromname]: + raise ValueError('%s already in parameter list %s'\ + %(toname, np.array2string(np.array(self.parameters)) ) ) + + self.parameters[idx] = toname
+ + + +
+[docs] + def calculateCovariance(self): + """ + Calculate covariance matrix from Fisher matrix (i.e. invert including priors). + """ + + if np.linalg.det(self.matrix) == 0: + raise ValueError('Fisher Matrix is singular, cannot be inverted!') + + self.covariance = np.linalg.inv( + self.matrix + np.diag([1./self.getPrior(p)**2 for p in self.parameters]) + )
+ + + +
+[docs] + def getBestFit(self, par): + """ + Get best fit value for given parameter + """ + + idx = self.getParameterIndex(par) + + return self.best_fits[idx]
+ + + +
+[docs] + def getLabel(self, par): + """ + Get pretty-print label for given parameter + """ + + idx = self.getParameterIndex(par) + + return self.labels[idx]
+ + + +
+[docs] + def setLabel(self, par, newlabel): + """ + Change the pretty-print label for given parameter + """ + + idx = self.getParameterIndex(par) + + self.labels[idx] = newlabel
+ + + +
+[docs] + def removeParameter(self, par): + """ + Remove par from Fisher matrix and recalculate covariance + """ + + idx = self.getParameterIndex(par) + + # drop from parameter, best fit, and prior list + self.parameters.pop(idx) + self.best_fits.pop(idx) + self.labels.pop(idx) + self.priors.pop(idx) + + # drop from matrix (first row, then column) + self.matrix = np.delete(np.delete(self.matrix, idx, axis=0), idx, axis=1) + + self.checkConsistency() + self.calculateCovariance()
+ + + +
+[docs] + @staticmethod + def translatePrior(prior): + """ + Translates a Prior object, numeric, or None to the simplistic prior + format used internally (a value for sigma). + + Arguments + --------- + prior : Prior object (gaussian or uniform), float, or None + Returns + ------- + sigma : Standard deviation of prior (np.inf for uniform Prior or None) + + """ + if np.isscalar(prior): + return float(prior) + + if prior is None: + return np.inf + + # TODO: debug following check, which fails even when types are "same"; + # multiple import of Prior? + # if not isinstance(prior, Prior): + # raise TypeError('prior must be Prior object, numeric, or None; got `%s` instead' % type(prior)) + + if prior.kind == 'uniform': + return np.inf + elif prior.kind == 'gaussian': + return prior.sigma + else: + raise TypeError('Prior object must be of either gaussian or uniform kind; got kind `'+str(prior.kind)+'` instead')
+ + + +
+[docs] + def setPrior(self, par, sigma): + """ + Set prior for parameter 'par' to value sigma. If sigma is None, no + prior is assumed + """ + + idx = self.getParameterIndex(par) + self.priors[idx] = sigma + self.calculateCovariance()
+ + + +
+[docs] + def addPrior(self, par, sigma): + """ + Add a prior of value sigma to the existing one for par (in quadrature) + """ + + idx = self.getParameterIndex(par) + self.priors[idx] = 1./np.sqrt(1./self.priors[idx]**2 + 1./sigma**2) + self.calculateCovariance()
+ + + +
+[docs] + def removeAllPriors(self): + """ + Remove *all* priors from this Fisher Matrix + """ + + self.priors = [np.inf for p in self.parameters] + self.calculateCovariance()
+ + + +
+[docs] + def getPrior(self, par): + """ + List the prior (sigma value) for par + """ + + idx = self.getParameterIndex(par) + return self.priors[idx]
+ + + +
+[docs] + def getPriorDict(self): + """ + List priors of all parameters (sigma values) + """ + + return dict(zip(self.parameters, self.priors))
+ + + +
+[docs] + def getCovariance(self, par1, par2): + """ + Returns the covariance of par1 and par2 + """ + + # Return the respective element + idx1, idx2 = self.getParameterIndex(par1), self.getParameterIndex(par2) + return self.covariance[idx1, idx2]
+ + + +
+[docs] + def getVariance(self, par): + """ + Returns full variance of par + """ + + return self.getCovariance(par,par)
+ + + +
+[docs] + def getSigma(self, par): + """ + Returns full standard deviation of par, + marginalized over all other parameters + """ + + return np.sqrt(self.getVariance(par))
+ + + +
+[docs] + def getSigmaNoPriors(self, par): + """ + Returns standard deviation of par, marginalized over all other + parameters, but ignoring priors on this parameter + """ + + idx = self.getParameterIndex(par) + + # make temporary priors with the ones corresponding to par removed + temp_priors = copy.deepcopy(self.priors) + temp_priors[idx] = np.inf + + # calculate covariance with these priors + temp_covariance = np.linalg.inv( + self.matrix + np.diag([1./s**2 for s in temp_priors]) + ) + + return np.sqrt(temp_covariance[idx,idx])
+ + + +
+[docs] + def getSigmaStatistical(self, par): + """ + Returns standard deviation of par, + if all other parameters are fixed (i.e. known infinitely well) + """ + + idx = self.getParameterIndex(par) + return 1./np.sqrt(self.matrix[idx,idx])
+ + + +
+[docs] + def getSigmaSystematic(self, par): + """ + Returns standard deviation of par for infinite statistics + (i.e. systematic error) + """ + + return np.sqrt(self.getSigmaNoPriors(par)**2 - + self.getSigmaStatistical(par)**2)
+ + + +
+[docs] + def getErrorEllipse(self, par1, par2, confLevel=0.6827): + """ + Returns a, b, tan(2 theta) of confLevel error ellipse + in par1-par2-plane with: + + a: large half axis + b: small half axis + tan(2 theta): tilt angle, has to be divided by the aspect + ratio of the actual plot before taking arctan + + Formulae taken from arXiv:0906.4123 + """ + + sigma1, sigma2 = self.getSigma(par1), self.getSigma(par2) + cov = self.getCovariance(par1, par2) + + #for this we need sigma1 > sigma2, otherwise just swap parameters + if sigma1 > sigma2: + a_sq = (sigma1**2 + sigma2**2)/2. + np.sqrt((sigma1**2 - sigma2**2)**2/4. + cov**2) + b_sq = (sigma1**2 + sigma2**2)/2. - np.sqrt((sigma1**2 - sigma2**2)**2/4. + cov**2) + else: + a_sq = (sigma2**2 + sigma1**2)/2. - np.sqrt((sigma2**2 - sigma1**2)**2/4. + cov**2) + b_sq = (sigma2**2 + sigma1**2)/2. + np.sqrt((sigma2**2 - sigma1**2)**2/4. + cov**2) + + #Note: this has weird dimensions (actual size of the plot)! + tan_2_th = 2.*cov / (sigma1**2 - sigma2**2) + + # we are dealing with a 2D error ellipse here + scaling = np.sqrt(chi2.ppf(confLevel, 2)) + + return scaling*np.sqrt(a_sq), scaling*np.sqrt(b_sq), tan_2_th
+ + + +
+[docs] + def getCorrelation(self, par1, par2): + """ + Returns correlation coefficient between par1 and par2 + """ + + return self.getCovariance(par1, par2)/(self.getSigma(par1)*self.getSigma(par2))
+ + + +
+[docs] + def printResults(self, parameters=None, file=None): + """ + Prints statistical, systematic errors, priors, best fits + for specified (default: all) parameters + """ + + pars = parameters if parameters is not None else copy.deepcopy(self.parameters) + pars.sort() + + if file is not None: # redirect stdout + orig_stdout = sys.stdout + sys.stdout = open(file, 'w') + + param_width = max([max([len(name) for name in pars]), len('parameters')]) + header = (param_width, 'parameter', 'best fit', 'full', 'stat', 'syst', 'priors') + print('%*s %9s %9s %9s %9s %9s' %header) + print('-'*(70+param_width)) + + for par in pars: + result = (param_width, par, self.getBestFit(par), self.getSigma(par), + self.getSigmaStatistical(par), self.getSigmaSystematic(par), + self.getPrior(par)) + par_str = '%*s %10.3e %.3e %.3e %.3e %.3e'%result + par_str = par_str.replace('inf', 'free') + print(par_str) + + """ + # needed for PINGU only: + if 'hierarchy' in pars: + + # calculate proper significance according to arXiv:1305.5150 + sigma_gauss = 1./self.getSigma('hierarchy') + sigma_bin = conv_sigma_to_bin_sigma(sigma_gauss) + + print '\nSignificance of hierarchy measurement: %.2f sigma' %sigma_bin + """ + + if file is not None: # switch stdout back + sys.stdout = orig_stdout
+ + + +
+[docs] + def printResultsSorted(self, par, file=None, latex=False): + """ + Prints statistical, systematic errors, priors, best fits + sorted by parameter par + """ + + if file is not None: # redirect stdout + orig_stdout = sys.stdout + sys.stdout = open(file, 'w') + + if latex: + # table header + print('\\begin{tabular}{lrrrrrr} \n\\toprule') + print('Parameter & Impact & Best Fit & Full & Stat. & Syst. & Prior \\\\ \n\\midrule') + else: + param_width = max([max([len(name) for name in self.parameters]), len('parameters')]) + header = (param_width, 'parameter', 'impact [%]','best fit', 'full', 'stat', 'syst', 'priors') + + print('%*s %10s %9s %9s %9s %9s %9s' %header) + print('-'*(85+param_width)) + + sortedp = self.sortByParam(par) + + for (par, impact) in sortedp: + + # print the line + if latex: + result = (self.getLabel(par), impact, self.getBestFit(par), self.getSigma(par), + self.getSigmaStatistical(par), self.getSigmaSystematic(par), + self.getPrior(par)) + par_str = '%s & %.1f & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} \\\\'%result + par_str = par_str.replace('\\num{inf}', 'free') + else: + result = (param_width, par, impact, self.getBestFit(par), self.getSigma(par), + self.getSigmaStatistical(par), self.getSigmaSystematic(par), + self.getPrior(par)) + par_str = '%*s %5.1f %10.3e %.3e %.3e %.3e %.3e'%result + par_str = par_str.replace('inf', 'free') + + print(par_str) + + if latex: + # table outro + print('\\bottomrule \n\\end{tabular}') + + if file is not None: # switch stdout back + sys.stdout = orig_stdout
+ + + +
+[docs] + def sortByParam(self, par): + """ + Sorts the parameters by their impact on parameter par. + Relevant quantity is covariance(par,i)/sigma_i. + + Returns sorted list of (parameters, impact), par first, + then ordered descendingly by impact. + """ + + # calculate impact + impact = dict([[p, self.getCorrelation(p, par)**2 * 100] \ + for p in self.parameters]) + + # sort the dict by value + # FIXME + sorted_impact = sorted(impact.iteritems(), + key=operator.itemgetter(1), + reverse=True) + + return sorted_impact
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/flavInt.html b/_modules/pisa/utils/flavInt.html new file mode 100644 index 000000000..116695345 --- /dev/null +++ b/_modules/pisa/utils/flavInt.html @@ -0,0 +1,2355 @@ + + + + + + pisa.utils.flavInt — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.flavInt

+#! /usr/bin/env python
+# pylint: disable=global-statement
+
+"""
+Classes for working with neutrino flavors (NuFlav), interactions types
+(IntType), "flavints" (a flavor and an interaction type) (NuFlavInt), and
+flavint groups (NuFlavIntGroup) in a consistent and convenient manner.
+
+FlavIntData class for working with data stored by flavint (flavor &
+interaction type). This should replace the PISA convention of using raw
+doubly-nested dictionaries indexed as [<flavor>][<interaction type>]. For
+now, FlavIntData objects can be drop-in replacements for such dictionaries
+(they can be accessed and written to in the same way since FlavIntData
+subclasses dict) but this should be deprecated; eventually, all direct access
+of the data structure should be eliminated and disallowed by the FlavIntData
+object.
+
+Define convenience tuples ALL_{x} for easy iteration
+"""
+
+
+# TODO: Make strings convertible to various types less liberal. E.g., I already
+# converted NuFlav to NOT accept 'numucc' such that things like 'numu nue' or
+# 'nu xyz mutation' would also be rejected; this should be true also for
+# interaction type and possibly others I haven't thought about yet. Note that I
+# achieved this using the IGNORE regex that ignores all non-alpha characters
+# but asserts one and only one match to the regex (consult NuFlav for details).
+
+# TODO: make simple_str() method convertible back to NuFlavIntGroup, either by
+# increasing the intelligence of interpret(), by modifying what simple_str()
+# produces, or by adding another function to interpret simple strings. (I'm
+# leaning towards the second option at the moment, since I don't see how to
+# make the first interpret both a simple_str AND nue as nuecc+nuenc, and I
+# don't think there's a way to know "this is a simple str" vs not easily.)
+
+
+from __future__ import absolute_import, division
+
+from collections.abc import MutableSequence, MutableMapping, Mapping, Sequence
+from copy import deepcopy
+from functools import reduce, total_ordering
+from itertools import product, combinations
+from operator import add
+import re
+
+import numpy as np
+
+from pisa import ureg
+from pisa.utils import fileio
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.comparisons import recursiveAllclose, recursiveEquality
+
+
+__all__ = [
+    'NuFlav', 'NuFlavInt', 'NuFlavIntGroup', 'FlavIntData',
+    'FlavIntDataGroup', 'xlateGroupsStr',
+    'flavintGroupsFromString', 'IntType', 'BarSep', 'set_bar_ssep',
+    'get_bar_ssep', 'ALL_NUPARTICLES', 'ALL_NUANTIPARTICLES',
+    'ALL_NUFLAVS', 'ALL_NUINT_TYPES', 'CC', 'NC',
+    'NUE', 'NUEBAR', 'NUMU', 'NUMUBAR', 'NUTAU', 'NUTAUBAR',
+    'ALL_NUFLAVINTS', 'ALL_NUCC', 'ALL_NUNC',
+    'NUECC', 'NUEBARCC', 'NUMUCC', 'NUMUBARCC', 'NUTAUCC', 'NUTAUBARCC',
+    'NUENC', 'NUEBARNC', 'NUMUNC', 'NUMUBARNC', 'NUTAUNC', 'NUTAUBARNC',
+]
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+__BAR_SSEP__ = ''
+
+
+
+[docs] +class BarSep(object): + """ + Context manager to make global __BAR_SSEP__ modification slightly less + error-prone. + + __BAR_SSEP__ defines the separator between a flavor and the string "bar" + (to define the flavor as the antiparticle version; e.g. nuebar). Some + datastructures in PISA 2 used '_' between the two ("nue_bar") while others + did not use this. To make dealing with this (slightly) less painful, this + context manager was introduced to switch between the PISA 3 default (no + '_') and the sometimes-use '_' separator. See Examples for usage. + + Parameters + ---------- + val : string + Separator to use between flavor ("nue", "numu", "nutau") and "bar". + + Examples + -------- + >>> nuebar = NuFlav('nuebar') + >>> print(str(nuebar)) + nuebar + >>> with BarSep('_'): + ... print(nuebar) + nue_bar + >>> print(str(nuebar)) + nuebar + + """ + def __init__(self, val): + global __BAR_SSEP__ + self.old_val = __BAR_SSEP__ + self.new_val = val + + def __enter__(self): + global __BAR_SSEP__ + __BAR_SSEP__ = self.new_val + + def __exit__(self, type, value, traceback): + global __BAR_SSEP__ + __BAR_SSEP__ = self.old_val
+ + + +
+[docs] +def set_bar_ssep(val): + """Set the separator between "base" flavor ("nue", "numu", or "nutau") and + "bar" when converting antineutrino `NuFlav`s or `NuFlavInt`s to strings. + + Parameters + ---------- + val : string + Separator + + """ + global __BAR_SSEP__ + assert isinstance(val, str) + __BAR_SSEP__ = val
+ + + +
+[docs] +def get_bar_ssep(): + """Get the separator that is set to be used between "base" flavor ("nue", + "numu", or "nutau") and "bar" when converting antineutrino `NuFlav`s or + `NuFlavInt`s to strings. + + Returns + ------- + sep : string + Separator + + """ + global __BAR_SSEP__ + return __BAR_SSEP__
+ + + +
+[docs] +@total_ordering +class NuFlav(object): + """Class for handling neutrino flavors (and anti-flavors)""" + PART_CODE = 1 + ANTIPART_CODE = -1 + NUE_CODE = 12 + NUMU_CODE = 14 + NUTAU_CODE = 16 + NUEBAR_CODE = -12 + NUMUBAR_CODE = -14 + NUTAUBAR_CODE = -16 + IGNORE = re.compile(r'[^a-zA-Z]') + FLAV_RE = re.compile( + r'^(?P<fullflav>(?:nue|numu|nutau)(?P<barnobar>bar){0,1})$' + ) + def __init__(self, val): + self.fstr2code = { + 'nue': self.NUE_CODE, + 'numu': self.NUMU_CODE, + 'nutau': self.NUTAU_CODE, + 'nuebar': self.NUEBAR_CODE, + 'numubar': self.NUMUBAR_CODE, + 'nutaubar': self.NUTAUBAR_CODE + } + self.barnobar2code = { + None: self.PART_CODE, + '': self.PART_CODE, + 'bar': self.ANTIPART_CODE, + } + self.f2tex = { + self.NUE_CODE: r'{\nu_e}', + self.NUMU_CODE: r'{\nu_\mu}', + self.NUTAU_CODE: r'{\nu_\tau}', + self.NUEBAR_CODE: r'{\bar\nu_e}', + self.NUMUBAR_CODE: r'{\bar\nu_\mu}', + self.NUTAUBAR_CODE: r'{\bar\nu_\tau}', + } + # Instantiate this neutrino flavor object by interpreting val + orig_val = val + try: + if isinstance(val, str): + # Sanitize the string + sanitized_val = self.IGNORE.sub('', val.lower()) + matches = self.FLAV_RE.findall(sanitized_val) + if len(matches) != 1: + raise ValueError('Invalid NuFlav spec: "%s"' % val) + self.__flav = self.fstr2code[matches[0][0]] + self.__barnobar = self.barnobar2code[matches[0][1]] + elif isinstance(val, self.__class__): + self.__flav = val.code + self.__barnobar = np.sign(self.__flav) + elif hasattr(val, 'flav'): + self.__flav = val.flav.code + self.__barnobar = np.sign(self.__flav) + else: + if val in self.fstr2code.values(): + self.__flav = int(val) + self.__barnobar = np.sign(self.__flav) + else: + raise ValueError('Invalid neutrino flavor/code: "%s"' % + str(val)) + # Double check than flav and barnobar codes are valid + assert self.__flav in self.fstr2code.values() + assert self.__barnobar in self.barnobar2code.values() + except (AssertionError, ValueError, AttributeError): + raise ValueError('Could not interpret `val` = "%s" as %s.' + ' type(val) = %s' + % (orig_val, self.__class__.__name__, + type(orig_val))) + + def __str__(self): + global __BAR_SSEP__ + fstr = [s for s, code in self.fstr2code.items() if code == self.__flav] + fstr = fstr[0] + fstr = fstr.replace('bar', __BAR_SSEP__+'bar') + return fstr + + # TODO: copy, deepcopy, and JSON serialization + #def __copy__(self): + # return self.__str__() + + def __repr__(self): + return self.__str__() + + def __hash__(self): + return hash(self.__flav) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except Exception: + return False + return other.code == self.code + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except: + raise ValueError('Cannot compare %s to %s.' + % (other.__class__.__name__, + self.__class__.__name__)) + + my_abs_code = np.abs(self.code) + other_abs_code = np.abs(other.code) + + # A particle comes before its own antiparticle + if other_abs_code == my_abs_code: + return self.code > other.code + + # nue or nuebar < numu or numubar < nutau or nutaubar + return my_abs_code < other_abs_code + + def __neg__(self): + return NuFlav(self.__flav*-1) + + def __add__(self, other): + return NuFlavIntGroup(self, other) + + @property + def tex(self): + """TeX string""" + return self.f2tex[self.__flav] + + @property + def code(self): + """int : PDG code""" + return self.__flav + + @property + def bar_code(self): + """Return +/-1 for particle/antiparticle""" + return self.__barnobar + + @property + def particle(self): + """Is this a particle (vs. antiparticle) flavor?""" + return self.__barnobar == self.PART_CODE + + @property + def antiparticle(self): + """Is this an antiparticle flavor?""" + return self.__barnobar == self.ANTIPART_CODE + +
+[docs] + def pidx(self, d, *args): + """Extract data from a nested dictionary `d` whose format is commonly + found in PISA + + The dictionary must have the format + d = {"<flavor>": <data object>} + <flavor> is one of "nue", "nue_bar", "numu", "numu_bar", "nutau", + "nutau_bar" + """ + with BarSep('_'): + field = d[str(self)] + for idx in args: + field = field[idx] + return field
+ + + @property + def prob3_codes(self): + """(int,int) : flavor and particle/antiparticle codes, as used by prob3""" + if np.abs(self.code) == self.NUE_CODE : prob3flav = 0 + elif np.abs(self.code) == self.NUMU_CODE : prob3flav = 1 + elif np.abs(self.code) == self.NUTAU_CODE : prob3flav = 2 + prob3bar = self.bar_code + return (prob3flav,prob3bar)
+ + + +NUE = NuFlav('nue') +NUEBAR = NuFlav('nuebar') +NUMU = NuFlav('numu') +NUMUBAR = NuFlav('numubar') +NUTAU = NuFlav('nutau') +NUTAUBAR = NuFlav('nutaubar') + +ALL_NUPARTICLES = (NUE, NUMU, NUTAU) +ALL_NUANTIPARTICLES = (NUEBAR, NUMUBAR, NUTAUBAR) +ALL_NUFLAVS = tuple(sorted(ALL_NUPARTICLES + ALL_NUANTIPARTICLES)) + + +# TODO: are the following two classes redundant now? +class AllNu(object): + def __init__(self): + self.__flav = [p for p in ALL_NUPARTICLES] + + @property + def flav(self): + return self.__flav + + def __str__(self): + return 'nuall' + + @property + def tex(self): + return r'{\nu_{\rm all}}' + + +class AllNuBar(object): + def __init__(self): + self.__flav = [p for p in ALL_NUANTIPARTICLES] + + @property + def flav(self): + return self.__flav + + def __str__(self): + return 'nuallbar' + + @property + def tex(self): + return r'{\bar\nu_{\rm all}}' + + +
+[docs] +@total_ordering +class IntType(object): + """ + Interaction type object. + + Parameters + ---------- + val + See Notes. + + Notes + ----- + Instantiate via a `val` of: + * Numerical code: 1=CC, 2=NC + * String (case-insensitive; all characters besides valid tokens are + ignored) + * Instantiated IntType object (or any method implementing int_type.code + which returns a valid interaction type code) + * Instantiated NuFlavInt object (or any object implementing int_type + which returns a valid IntType object) + + Examples + -------- + The following, e.g., are all interpreted as charged-current IntTypes: + + >>> IntType('cc') + >>> IntType('\n\t _cc \n') + >>> IntType('numubarcc') + >>> IntType(1) + >>> IntType(1.0) + >>> IntType(IntType('cc')) + >>> IntType(NuFlavInt('numubarcc')) + + """ + CC_CODE = 1 + NC_CODE = 2 + IGNORE = re.compile(r'[^a-zA-Z]') + IT_RE = re.compile(r'^(cc|nc)$') + def __init__(self, val): + self.istr2code = { + 'cc': self.CC_CODE, + 'nc': self.NC_CODE, + } + self.i2tex = { + self.CC_CODE: r'{\rm CC}', + self.NC_CODE: r'{\rm NC}' + } + + # Interpret `val` + try: + orig_val = val + if isinstance(val, str): + sanitized_val = self.IGNORE.sub('', val.lower()) + int_type = self.IT_RE.findall(sanitized_val) + if len(int_type) != 1: + raise ValueError('Invalid IntType spec: "%s"' % val) + self.__int_type = self.istr2code[int_type[0]] + elif isinstance(val, self.__class__): + self.__int_type = val.code + elif hasattr(val, 'int_type') and hasattr(val.int_type, 'code'): + self.__int_type = val.int_type.code + else: + if val in self.istr2code.values(): + self.__int_type = int(val) + else: + raise TypeError( + '`val` = "%s" could not be converted to an %s;' + ' type(val) = %s' + % (orig_val, self.__class__.__name__, type(orig_val)) + ) + # Double check that the interaction type code set is valid + assert self.__int_type in self.istr2code.values() + except (AssertionError, TypeError, ValueError, AttributeError): + raise ValueError('Could not interpret `val` = "%s" as %s;' + ' type(val) = %s' + % (orig_val, self.__class__.__name__, + type(orig_val))) + + def __str__(self): + return [s for s, code in self.istr2code.items() + if code == self.__int_type][0] + + def __repr__(self): + return self.__str__() + + def __hash__(self): + return hash(self.__int_type) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except Exception: + return False + return other.cc == self.cc + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except: + raise ValueError('Cannot compare %s to %s.' + % (other.__class__.__name__, + self.__class__.__name__)) + return self.code < other.code + + @property + def cc(self): # pylint: disable=invalid-name + """Is this interaction type charged current (CC)?""" + return self.__int_type == self.CC_CODE + + @property + def nc(self): # pylint: disable=invalid-name + """Is this interaction type neutral current (NC)?""" + return self.__int_type == self.NC_CODE + + @property + def code(self): + """Integer code for this interaction type""" + return self.__int_type + + @property + def tex(self): + """TeX representation of this interaction type""" + return self.i2tex[self.__int_type]
+ + + +CC = IntType('cc') +NC = IntType('nc') +ALL_NUINT_TYPES = (CC, NC) + + +
+[docs] +@total_ordering +class NuFlavInt(object): + """A neutrino "flavint" encompasses both the neutrino flavor and its + interaction type. + + Instantiate via + * String containing a single flavor and a single interaction type + e.g.: 'numucc', 'nu_mu_cc', 'nu mu CC', 'numu_bar CC', etc. + * Another instantiated NuFlavInt object + * Two separate objects that can be converted to a valid NuFlav + and a valid IntType (in that order) + * An iterable of length two which contains such objects + * kwargs `flav` and `int_type` specifying such objects + + String specifications simply ignore all characters not recognized as a + valid token. + + """ + TOKENS = re.compile('(nu|e|mu|tau|bar|nc|cc)') + FINT_RE = re.compile( + r'(?P<fullflav>(?:nue|numu|nutau)' + r'(?P<barnobar>bar){0,1})' + r'(?P<int_type>cc|nc){0,1}' + ) + FINT_SSEP = '_' + FINT_TEXSEP = r' \, ' + # TODO: use multiple inheritance to clean up the below? + def __init__(self, *args, **kwargs): + if kwargs: + if args: + raise TypeError('Either positional or keyword args may be' + ' provided, but not both') + keys = kwargs.keys() + if set(keys).difference(set(('flav', 'int_type'))): + raise TypeError('Invalid kwarg(s) specified: %s' % + kwargs.keys()) + flavint = (kwargs['flav'], kwargs['int_type']) + elif args: + if not args: + raise TypeError('No flavint specification provided') + elif len(args) == 1: + flavint = args[0] + elif len(args) == 2: + flavint = args + elif len(args) > 2: + raise TypeError('More than two args') + + if not isinstance(flavint, str) \ + and hasattr(flavint, '__len__') and len(flavint) == 1: + flavint = flavint[0] + + if isinstance(flavint, str): + orig_flavint = flavint + try: + flavint = ''.join(self.TOKENS.findall(flavint.lower())) + flavint_dict = self.FINT_RE.match(flavint).groupdict() + self.__flav = NuFlav(flavint_dict['fullflav']) + self.__int_type = IntType(flavint_dict['int_type']) + except (TypeError, UnboundLocalError, ValueError, AttributeError): + raise ValueError('Could not interpret `val` = "%s" as %s;' + ' type(val) = %s' + % (orig_flavint, self.__class__.__name__, + type(orig_flavint))) + elif isinstance(flavint, NuFlavInt): + self.__flav = NuFlav(flavint.flav) + self.__int_type = IntType(flavint.int_type.code) + elif hasattr(flavint, '__len__'): + assert len(flavint) == 2, \ + 'Need 2 components to define flavor and interaction type' + self.__flav = NuFlav(flavint[0]) + self.__int_type = IntType(flavint[1]) + else: + raise TypeError('Unhandled type: "' + str(type(flavint)) + + '"; class: "' + str(flavint.__class__) + + '; value: "' + str(flavint) + '"') + + def __str__(self): + return '%s%s%s' % (self.flav, self.FINT_SSEP, self.int_type) + + def __repr__(self): + return self.__str__() + + def __hash__(self): + return hash((self.flav.code, self.int_type.code)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except Exception: + return False + return (other.flav, other.int_type) == (self.flav, self.int_type) + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + if not isinstance(other, self.__class__): + try: + other = self.__class__(other) + except: + raise ValueError('Cannot compare %s to %s.' + % (other.__class__.__name__, + self.__class__.__name__)) + if self.int_type.code < other.int_type.code: + return True + if self.int_type.code == other.int_type.code: + if np.abs(self.flav.code) == np.abs(other.flav.code): + return self.flav.code > other.flav.code + if np.abs(self.flav.code) < np.abs(other.flav.code): + return True + return False + + def __neg__(self): + return NuFlavInt(-self.__flav, self.__int_type) + + def __add__(self, other): + return NuFlavIntGroup(self, other) + +
+[docs] + def pidx(self, d, *args): + """Extract data from a nested dictionary `d` whose format is commonly + found in PISA + + The dictionary must have the format:: + + d = {"<flavor>": {"<interaction type>": <data object>}} + <flavor> is one of "nue", "nue_bar", "numu", "numu_bar", "nutau", + "nutau_bar" + <interaction type> is one of "cc", "nc" + + """ + + with BarSep('_'): + field = d[str(self.flav)][str(self.int_type)] + for idx in args: + field = field[idx] + return field
+ + + @property + def flav(self): + """Return just the NuFlav part of this NuFlavInt""" + return self.__flav + + @property + def particle(self): + """Is this a particle (vs. antiparticle) flavor?""" + return self.__flav.particle + + @property + def antiparticle(self): + """Is this an antiparticle flavor?""" + return self.__flav.antiparticle + + @property + def cc(self): # pylint: disable=invalid-name + """Is this interaction type charged current (CC)?""" + return self.__int_type.cc + + @property + def nc(self): # pylint: disable=invalid-name + """Is this interaction type neutral current (NC)?""" + return self.__int_type.nc + + @property + def int_type(self): + """Return IntType object that composes this NuFlavInt""" + return self.__int_type + + @property + def tex(self): + """TeX string representation of this NuFlavInt""" + return '{%s%s%s}' % (self.flav.tex, + self.FINT_TEXSEP, + self.int_type.tex)
+ + + +NUECC = NuFlavInt('nuecc') +NUEBARCC = NuFlavInt('nuebarcc') +NUMUCC = NuFlavInt('numucc') +NUMUBARCC = NuFlavInt('numubarcc') +NUTAUCC = NuFlavInt('nutaucc') +NUTAUBARCC = NuFlavInt('nutaubarcc') + +NUENC = NuFlavInt('nuenc') +NUEBARNC = NuFlavInt('nuebarnc') +NUMUNC = NuFlavInt('numunc') +NUMUBARNC = NuFlavInt('numubarnc') +NUTAUNC = NuFlavInt('nutaunc') +NUTAUBARNC = NuFlavInt('nutaubarnc') + + +
+[docs] +@total_ordering +class NuFlavIntGroup(MutableSequence): + """Grouping of neutrino flavors+interaction types (flavints) + + Grouping of neutrino flavints. Specification can be via + * A single `NuFlav` object; this gets promoted to include both + interaction types + * A single `NuFlavInt` object + * String: + * Ignores anything besides valid tokens + * A flavor with no interaction type specified will include both CC + and NC interaction types + * Multiple flavor/interaction-type specifications can be made; + use of delimiters is optional + * Interprets "nuall" as nue+numu+nutau and "nuallbar" as + nuebar+numubar+nutaubar + * Iterable containing any of the above (i.e., objects convertible to + `NuFlavInt` objects). Note that a valid iterable is another + `NuFlavIntGroup` object. + """ + TOKENS = re.compile('(nu|e|mu|tau|all|bar|nc|cc)') + IGNORE = re.compile(r'[^a-zA-Z]') + FLAVINT_RE = re.compile( + r'((?:nue|numu|nutau|nuall)(?:bar){0,1}(?:cc|nc){0,2})' + ) + FLAV_RE = re.compile(r'(?P<fullflav>(?:nue|numu|nutau|nuall)(?:bar){0,1})') + IT_RE = re.compile(r'(cc|nc)') + def __init__(self, *args): + self.flavint_ssep = '+' + self.__flavints = [] + # Possibly a special case if len(args) == 2, so send as a single entity + # if this is the case + if len(args) == 2: + args = [args] + for a in args: + self += a + + def __add__(self, val): + flavint_list = sorted(set(self.__flavints + self.interpret(val))) + return NuFlavIntGroup(flavint_list) + + def __iadd__(self, val): + self.__flavints = sorted(set(self.__flavints + self.interpret(val))) + return self + + def __delitem__(self, idx): + self.__flavints.__delitem__(idx) + +
+[docs] + def remove(self, value): + """Remove a flavint from this group. + + Parameters + ---------- + value : anything accepted by `interpret` method + + """ + flavint_list = sorted(set(self.interpret(value))) + for k in flavint_list: + try: + idx = self.__flavints.index(k) + except ValueError: + pass + else: + del self.__flavints[idx]
+ + + def __sub__(self, val): + cp = deepcopy(self) + cp.remove(val) + return cp + + def __isub__(self, val): + self.remove(val) + return self + + def __setitem__(self, idx, val): + self.__flavints[idx] = val + +
+[docs] + def insert(self, index, value): + """Insert flavint `value` before `index`""" + self.__flavints.insert(index, value)
+ + + def __eq__(self, other): + if not isinstance(other, self.__class__): + try: + self.__class__(other) + except Exception: + return False + return set(self) == set(other) + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + if not isinstance(other, self.__class__): + try: + self.__class__(other) + except: + raise ValueError('Cannot compare %s with %s.' + % (other.__class__.__name__, + self.__class__.__name__)) + + if len(other) != len(self): + return len(self) < len(other) + + return sorted(self.flavints)[0] < sorted(other.flavints)[0] + + def __contains__(self, val): + return all([(k in self.__flavints) for k in self.interpret(val)]) + + def __len__(self): + return len(self.__flavints) + + def __getitem__(self, idx): + return self.__flavints[idx] + + def __str__(self): + allkg = set(self.flavints) + + # Check if nuall or nuallbar CC, NC, or both + nuallcc, nuallbarcc, nuallnc, nuallbarnc = False, False, False, False + cc_flavints = NuFlavIntGroup(self.cc_flavints) + nc_flavints = NuFlavIntGroup(self.nc_flavints) + if len(cc_flavints.particles) == 3: + nuallcc = True + if len(cc_flavints.antiparticles) == 3: + nuallbarcc = True + if len(nc_flavints.particles) == 3: + nuallnc = True + if len(nc_flavints.antiparticles) == 3: + nuallbarnc = True + + # Construct nuall(bar) part(s) of string + strs = [] + if nuallcc and nuallnc: + strs.append('nuall') + for k in ALL_NUPARTICLES: + allkg.remove(NuFlavInt(k, 'cc')) + for k in ALL_NUPARTICLES: + allkg.remove(NuFlavInt(k, 'nc')) + elif nuallcc: + strs.append('nuall' + NuFlavInt.FINT_SSEP + str(CC)) + for k in ALL_NUPARTICLES: + allkg.remove(NuFlavInt(k, 'cc')) + elif nuallnc: + strs.append('nuall' + NuFlavInt.FINT_SSEP + str(NC)) + for k in ALL_NUPARTICLES: + allkg.remove(NuFlavInt(k, 'nc')) + + if nuallbarcc and nuallbarnc: + strs.append('nuallbar') + for k in ALL_NUANTIPARTICLES: + allkg.remove(NuFlavInt(k, 'cc')) + for k in ALL_NUANTIPARTICLES: + allkg.remove(NuFlavInt(k, 'nc')) + elif nuallbarcc: + strs.append('nuallbar' + NuFlavInt.FINT_SSEP + str(CC)) + for k in ALL_NUANTIPARTICLES: + allkg.remove(NuFlavInt(k, 'cc')) + elif nuallbarnc: + strs.append('nuallbar' + NuFlavInt.FINT_SSEP + str(NC)) + for k in ALL_NUANTIPARTICLES: + allkg.remove(NuFlavInt(k, 'nc')) + + # Among remaining flavints, group by flavor and combine if both CC and + # NC are present for individual flavors (i.e., eliminate the int_type + # string altogether) + for flav in ALL_NUPARTICLES + ALL_NUANTIPARTICLES: + if flav in [k.flav for k in allkg]: + cc, nc = False, False + if NuFlavInt(flav, 'cc') in allkg: + cc = True + if NuFlavInt(flav, 'nc') in allkg: + nc = True + if cc and nc: + strs.append(str(flav)) + allkg.remove(NuFlavInt(flav, 'cc')) + allkg.remove(NuFlavInt(flav, 'nc')) + elif cc: + strs.append(str(NuFlavInt(flav, 'cc'))) + allkg.remove(NuFlavInt(flav, 'cc')) + elif nc: + strs.append(str(NuFlavInt(flav, 'nc'))) + allkg.remove(NuFlavInt(flav, 'nc')) + return self.flavint_ssep.join(strs) + + def __repr__(self): + return self.__str__() + + # TODO: + # Technically, since this is a mutable type, the __hash__ method shouldn't + # be implemented as this will allow for "illegal" behavior, like using + # a NuFlavIntGroup as a key in a dict. So this should be fixed, maybe. + #__hash__ = None + def __hash__(self): + return hash(tuple(self.__flavints)) + +
+[docs] + @staticmethod + def interpret(val): + """Interpret a NuFlavIntGroup arg""" + if isinstance(val, str): + orig_val = val + try: + flavints = [] + orig_val = val + + # Eliminate anything besides valid tokens + val = NuFlavIntGroup.IGNORE.sub('', val.lower()) + #val = ''.join(NuFlavIntGroup.TOKENS.findall(val)) + + # Find all flavints specified + allflavints_str = NuFlavIntGroup.FLAVINT_RE.findall(val) + # Remove flavints + val = NuFlavIntGroup.FLAVINT_RE.sub('', val) + + for flavint_str in allflavints_str: + match = NuFlavIntGroup.FLAV_RE.match(flavint_str) + flav = match.groupdict()['fullflav'] + + # A flavint found above can include 'all' which is actually + # three different flavors + if 'all' in flav: + flavs = [flav.replace('all', x) + for x in ('e', 'mu', 'tau')] + else: + flavs = [flav] + + ints = sorted(set( + NuFlavIntGroup.IT_RE.findall(flavint_str) + )) + + # If flavint_str does not include 'cc' or 'nc', include both + if not ints: + ints = ['cc', 'nc'] + + # Add all combinations of (flav, int) found in this + # flavint_str + flavints.extend([''.join(fi) + for fi in product(flavs, ints)]) + + except (ValueError, AttributeError): + raise ValueError('Could not interpret `val` = "%s" as %s;' + ' type(val) = %s' + % (orig_val, NuFlavIntGroup, type(orig_val))) + + elif isinstance(val, NuFlav): + flavints = [NuFlavInt((val, 'cc')), NuFlavInt((val, 'nc'))] + elif isinstance(val, NuFlavInt): + flavints = [val] + elif isinstance(val, NuFlavIntGroup): + flavints = list(val.flavints) + elif np.isscalar(val): + flavints = [val] + elif val is None: + flavints = [] + elif hasattr(val, '__len__'): + flavints = [] + # Treat length-2 iterables as special case, in case the two + # elements can form a single NuFlavInt. + if len(val) == 2: + try_again = True + try: + # Start with counter-hypothesis: that the two elements of + # `val` can form two valid, independent NuFlavInts... + k1 = NuFlavIntGroup.interpret(val[0]) + k2 = NuFlavIntGroup.interpret(val[1]) + if k1 and k2: + # Success: Two independent NuFlavInts were created + try_again = False + flavints.extend(k1) + flavints.extend(k2) + except (UnboundLocalError, ValueError, AssertionError, + TypeError): + pass + if try_again: + # If the two elements of the iterable did not form two + # NuFlavInts, try forming a single NuFlavInt with `val` + flavints = [NuFlavInt(val)] + else: + # If 1 or >2 elements in `val`, make a flavint out of each + for x in val: + flavints.extend(NuFlavIntGroup.interpret(x)) + else: + raise Exception('Unhandled val: ' + str(val) + ', class ' + + str(val.__class__) + ' type ' + str(val)) + + flavint_list = [] + for k in flavints: + try: + nk = NuFlavInt(k) + flavint_list.append(nk) + except TypeError: + # If NuFlavInt failed, try NuFlav; if this fails, give up. + flav = NuFlav(k) + flavint_list.append(NuFlavInt((flav, 'cc'))) + flavint_list.append(NuFlavInt((flav, 'nc'))) + return flavint_list
+ + + @property + def flavints(self): + """Return tuple of all NuFlavInts that make up this group""" + return tuple(self.__flavints) + + @property + def flavs(self): + """Return tuple of unique flavors that make up this group""" + return tuple(sorted(set([k.flav for k in self.__flavints]))) + + @property + def cc_flavints(self): + """Return tuple of unique charged-current-interaction NuFlavInts that + make up this group""" + return tuple([k for k in self.__flavints + if k.int_type == CC]) + + @property + def nc_flavints(self): + """Return tuple of unique neutral-current-interaction NuFlavInts that + make up this group""" + return tuple([k for k in self.__flavints + if k.int_type == NC]) + + @property + def particles(self): + """Return tuple of unique particle (vs antiparticle) NuFlavInts that + make up this group""" + return tuple([k for k in self.__flavints if k.particle]) + + @property + def antiparticles(self): + """Return tuple of unique antiparticle NuFlavInts that make up this + group""" + return tuple([k for k in self.__flavints if k.antiparticle]) + + @property + def cc_flavs(self): + """Return tuple of unique charged-current-interaction flavors that + make up this group. Note that only the flavors, and not NuFlavInts, are + returned (cf. method `cc_flavints`""" + return tuple(sorted(set([k.flav for k in self.__flavints + if k.int_type == CC]))) + + @property + def nc_flavs(self): + """Return tuple of unique neutral-current-interaction flavors that + make up this group. Note that only the flavors, and not NuFlavInts, are + returned (cf. method `nc_flavints`""" + return tuple(sorted(set([k.flav for k in self.__flavints + if k.int_type == NC]))) + + #def unique_flavs(self): + # """Return tuple of unique flavors that make up this group""" + # return tuple(sorted(set([k.flav for k in self.__flavints]))) + +
+[docs] + def group_flavs_by_int_type(self): + """Return a dictionary with flavors grouped by the interaction types + represented in this group. + + The returned dictionary has format:: + + { + 'all_int_type_flavs': [<NuFlav object>, <NuFlav object>, ...], + 'cc_only_flavs': [<NuFlav object>, <NuFlav object>, ...], + 'nc_only_flavs': [<NuFlav object>, <NuFlav object>, ...], + } + + where the lists of NuFlav objects are mutually exclusive + """ + uniqueF = self.flavs + fint_d = {f: set() for f in uniqueF} + for k in self.flavints: + fint_d[k.flav].add(k.int_type) + grouped = { + 'all_int_type_flavs': [], + 'cc_only_flavs': [], + 'nc_only_flavs': [] + } + for f in uniqueF: + if len(fint_d[f]) == 2: + grouped['all_int_type_flavs'].append(f) + elif list(fint_d[f])[0] == CC: + grouped['cc_only_flavs'].append(f) + else: + grouped['nc_only_flavs'].append(f) + return grouped
+ + + def __simple_str(self, flavsep, intsep, flavintsep, addsep, func): + grouped = self.group_flavs_by_int_type() + all_nu = AllNu() + all_nubar = AllNuBar() + for k, v in grouped.items(): + if all([f in v for f in all_nubar.flav]): + for f in all_nubar.flav: + grouped[k].remove(f) + grouped[k].insert(0, all_nubar) + if all([f in v for f in all_nu.flav]): + for f in all_nu.flav: + grouped[k].remove(f) + grouped[k].insert(0, all_nu) + all_s = flavsep.join([func(f) for f in grouped['all_int_type_flavs']]) + cc_only_s = flavsep.join([func(f) for f in grouped['cc_only_flavs']]) + nc_only_s = flavsep.join([func(f) for f in grouped['nc_only_flavs']]) + strs = [] + if all_s: + if not cc_only_s and not nc_only_s: + strs.append(all_s) + else: + strs.append(all_s + intsep + func(CC) + addsep + func(NC)) + if cc_only_s: + strs.append(cc_only_s + intsep + func(CC)) + if nc_only_s: + strs.append(nc_only_s + intsep + func(NC)) + return flavintsep.join(strs) + +
+[docs] + def simple_str(self, flavsep='+', intsep=' ', flavintsep=', ', + addsep='+'): + """Simple string representation of this group""" + return self.__simple_str(flavsep=flavsep, intsep=intsep, + flavintsep=flavintsep, addsep=addsep, func=str)
+ + +
+[docs] + def file_str(self, flavsep='_', intsep='_', flavintsep='__', addsep=''): + """String representation for this group useful for file names""" + return self.__simple_str(flavsep=flavsep, intsep=intsep, + flavintsep=flavintsep, addsep=addsep, func=str)
+ + +
+[docs] + def simple_tex(self, flavsep=r' + ', intsep=r' \, ', + flavintsep=r'; \; ', addsep=r'+'): + """Simplified TeX string reperesentation of this group""" + return self.__simple_str( + flavsep=flavsep, intsep=intsep, + flavintsep=flavintsep, addsep=addsep, func=lambda x: x.tex + )
+ + + @property + def tex(self): + """TeX string representation for this group""" + return self.simple_tex() + + @property + def unique_flavs_tex(self): + """TeX string representation of the unique flavors present in this + group""" + return ' + '.join([f.tex for f in self.flavs])
+ + + +ALL_NUFLAVINTS = NuFlavIntGroup('nuall,nuallbar') +ALL_NUCC = NuFlavIntGroup('nuall_cc,nuallbar_cc') +ALL_NUNC = NuFlavIntGroup('nuall_nc,nuallbar_nc') + + +
+[docs] +class FlavIntData(dict): + """Container class for storing data for each NuFlavInt. + + Parameters + ---------- + val : string, dict, or None + Data with which to populate the hierarchy. + + If string, interpret as PISA resource and load data from it + If dict, populate data from the dictionary + If None, instantiate with None for all data + + The interpreted version of `val` must be a valid data structure: A + dict with keys 'nue', 'numu', 'nutau', 'nue_bar', 'numu_bar', and + 'nutau_bar'; and each item corresponding to these keys must itself be a + dict with keys 'cc' and 'nc'. + + Notes + ----- + Accessing data (both for getting and setting) is fairly flexible. It uses + dict-like square-brackets syntax, but can accept any object (or two + objects) that are convertible to a NuFlav or NuFlavInt object. In the + former case, the entire flavor dictionary (which includes both 'cc' and + 'nc') is returned, while in the latter case whatever lives at the node is + returned. + + Initializing, setting and getting data in various ways: + + >>> fi_dat = FlavIntData() + >>> fi_dat['nue', 'cc'] = 1 + >>> fi_dat['nuenc'] = 2 + >>> fi_dat['numu'] = {'cc': 'cc data...', 'nc': 'nc data...'} + >>> fi_dat[NuFlav(16), IntType(1)] == 4 + + >>> fi_dat['nuecc'] == 1 + True + >>> fi_dat['NUE_NC'] == 2 + True + >>> fi_dat['nu_e'] == {'cc': 1, 'nc': 2} + True + >>> fi_dat['nu mu cc'] == 'cc data...' + True + >>> fi_dat['nu mu'] == {'cc': 'cc data...', 'nc': 'nc data...'} + True + >>> fi_dat['nutau cc'] == 4 + True + + """ + def __init__(self, val=None): + super().__init__() + if isinstance(val, str): + d = self.__load(val) + elif isinstance(val, dict): + d = val + elif val is None: + # Instantiate empty FlavIntData + with BarSep('_'): + d = {str(f): {str(it): None for it in ALL_NUINT_TYPES} + for f in ALL_NUFLAVS} + else: + raise TypeError('Unrecognized `val` type %s' % type(val)) + self.validate(d) + self.update(d) + + @staticmethod + def _interpret_index(idx): + if not isinstance(idx, str) and hasattr(idx, '__len__') \ + and len(idx) == 1: + idx = idx[0] + with BarSep('_'): + try: + nfi = NuFlavInt(idx) + return [str(nfi.flav), str(nfi.int_type)] + except (AssertionError, ValueError, TypeError): + try: + return [str(NuFlav(idx))] + except: + raise ValueError('Invalid index: %s' %str(idx)) + + def __getitem__(self, *args): + assert len(args) <= 2 + key_list = self._interpret_index(args) + tgt_obj = super().__getitem__(key_list[0]) + if len(key_list) == 2: + tgt_obj = tgt_obj[key_list[1]] + return tgt_obj + + def __setitem__(self, *args): + assert len(args) > 1 + item, value = args[:-1], args[-1] + key_list = self._interpret_index(item) + if len(key_list) == 1: + self.__validate_inttype_dict(value) + value = self.__translate_inttype_dict(value) + tgt_obj = self + for key in key_list[:-1]: + tgt_obj = dict.__getitem__(tgt_obj, key) + dict.__setitem__(tgt_obj, key_list[-1], value) + + def __eq__(self, other): + """Recursive, exact equality""" + return recursiveEquality(self, other) + + @staticmethod + def __basic_validate(fi_container): + for flavint in ALL_NUFLAVINTS: + with BarSep('_'): + f = str(flavint.flav) + it = str(flavint.int_type) + assert isinstance(fi_container, dict), "container must be of" \ + " type 'dict'; instead got %s" % type(fi_container) + assert f in fi_container, "container missing flavor '%s'" % f + assert isinstance(fi_container[f], dict), \ + "Child of flavor '%s': must be type 'dict' but" \ + " got %s instead" % (f, type(fi_container[f])) + assert it in fi_container[f], \ + "Flavor '%s' sub-dict must contain a both interaction" \ + " types, but missing (at least) int_type '%s'" % (f, it) + + @staticmethod + def __validate_inttype_dict(d): + assert isinstance(d, MutableMapping), \ + "Value must be an inttype (sub-) dict if you only specify a" \ + " flavor (and not an int type) as key" + keys = d.keys() + assert (len(keys) == 2) and \ + ([str(k).lower() for k in sorted(keys)] == ['cc', 'nc']), \ + "inttype (sub-) dict must contain exactly 'cc' and 'nc' keys" + + @staticmethod + def __translate_inttype_dict(d): + for key in d.keys(): + if not isinstance(key, str) or key.lower() != key: + val = d.pop(key) + d[str(key).lower()] = val + return d + + def __load(self, fname, **kwargs): + d = fileio.from_file(fname, **kwargs) + self.validate(d) + return d + + @property + def flavs(self): + """tuple of NuFlav : all flavors present""" + return tuple(sorted([NuFlav(k) for k in self.keys()])) + + @property + def flavints(self): + """tuple of NuFlavInt : all flavints present""" + fis = [] + for flav in self.keys(): + for int_type in self[flav].keys(): + fis.append(NuFlavInt(flav, int_type)) + return tuple(sorted(fis)) + +
+[docs] + def allclose(self, other, rtol=1e-05, atol=1e-08): + """Returns True if all data structures are equal and all numerical + values contained are within relative (rtol) and/or absolute (atol) + tolerance of one another. + """ + return recursiveAllclose(self, other, rtol=rtol, atol=atol)
+ + +
+[docs] + def validate(self, fi_container): + """Perform basic validation on the data structure""" + self.__basic_validate(fi_container)
+ + +
+[docs] + def save(self, fname, **kwargs): + """Save data structure to a file; see fileio.to_file for details""" + fileio.to_file(self, fname, **kwargs)
+ + +
+[docs] + def id_dupes(self, rtol=None, atol=None): + """Identify flavints with duplicated data (exactly or within a + specified tolerance), convert these NuFlavInt's into NuFlavIntGroup's + and returning these along with the data associated with each. + + Parameters + ---------- + rtol + Set to positive value to use as rtol argument for numpy allclose + atol + Set to positive value to use as atol argument for numpy allclose + + If either `rtol` or `atol` is 0, exact equality is enforced. + + Returns + ------- + dupe_flavintgroups : list of NuFlavIntGroup + A NuFlavIntGroup object is returned for each group of NuFlavInt's + found with duplicate data + dupe_flavintgroups_data : list of objects + Data associated with each NuFlavIntGroup in dupe_flavintgroups. + Each object in `dupe_flavintgroups_data` corresponds to, and in the + same order as, the objects in `dupe_flavintgroups`. + """ + exact_equality = True + kwargs = {} + if rtol is not None and rtol > 0 and atol != 0: + exact_equality = False + kwargs['rtol'] = rtol + if atol is not None and atol > 0 and rtol != 0: + exact_equality = False + kwargs['atol'] = atol + if exact_equality: + cmpfunc = recursiveEquality + else: + cmpfunc = lambda x, y: recursiveAllclose(x, y, **kwargs) + + dupe_flavintgroups = [] + dupe_flavintgroups_data = [] + for flavint in self.flavints: + this_datum = self[flavint] + match = False + for n, group_datum in enumerate(dupe_flavintgroups_data): + if len(this_datum) != len(group_datum): + continue + if cmpfunc(this_datum, group_datum): + dupe_flavintgroups[n] += flavint + match = True + break + if not match: + dupe_flavintgroups.append(NuFlavIntGroup(flavint)) + dupe_flavintgroups_data.append(this_datum) + + sort_inds = np.argsort(dupe_flavintgroups) + dupe_flavintgroups = [dupe_flavintgroups[i] for i in sort_inds] + dupe_flavintgroups_data = [dupe_flavintgroups_data[i] + for i in sort_inds] + + return dupe_flavintgroups, dupe_flavintgroups_data
+
+ + + +
+[docs] +class FlavIntDataGroup(dict): + """Container class for storing data for some set(s) of NuFlavIntGroups + (cf. FlavIntData, which stores one datum for each NuFlavInt separately) + + Parameters + ---------- + val: None, str, or dict + Data with which to populate the hierarchy + flavint_groups: None, str, or iterable + User-defined groupings of NuFlavIntGroups. These can be specified + in several ways. + + None + If val == None, flavint_groups must be specified + If val != None, flavitn_groups are deduced from the data + string + If val is a string, it is expected to be a comma-separated + list, each field of which describes a NuFlavIntGroup. The + returned list of groups encompasses all possible flavor/int + types, but the groups are mutually exclusive. + iterable of strings or NuFlavIntGroup + If val is an iterable, each member of the iterable is + interpreted as a NuFlavIntGroup. + """ + def __init__(self, val=None, flavint_groups=None): + super().__init__() + self._flavint_groups = None + if flavint_groups is None: + if val is None: + raise ValueError('Error - must input at least one of ' + '`flavint_groups` or `val`.') + else: + self.flavint_groups = flavint_groups + + if val is None: + # Instantiate empty FlavIntDataGroup + d = {str(group): None for group in self.flavint_groups} + else: + if isinstance(val, str): + d = self.__load(val) + elif isinstance(val, dict): + d = val + else: + raise TypeError('Unrecognized `val` type %s' % type(val)) + d = {str(NuFlavIntGroup(key)): d[key] for key in d.keys()} + if d.keys() == ['']: + raise ValueError('NuFlavIntGroups not found in data keys') + + fig = [NuFlavIntGroup(fig) for fig in d.keys()] + if flavint_groups is None: + self.flavint_groups = fig + else: + if set(fig) != set(self.flavint_groups): + raise ValueError( + 'Specified `flavint_groups` does not match `val` ' + 'signature.\n`flavint_groups` - {0}\n`val groups` ' + '- {1}'.format(self.flavint_groups, fig) + ) + + self.validate(d) + self.update(d) + + @property + def flavint_groups(self): + return self._flavint_groups + + @flavint_groups.setter + def flavint_groups(self, value): + assert 'muons' not in value + fig = self._parse_flavint_groups(value) + all_flavints = reduce(add, [f.flavints for f in fig]) + for fi in set(all_flavints): + if all_flavints.count(fi) > 1: + raise ValueError( + 'FlavInt {0} referred to multiple times in flavint_group ' + '{1}'.format(fi, fig) + ) + self._flavint_groups = fig + +
+[docs] + def transform_groups(self, flavint_groups): + """Transform FlavIntDataGroup into a structure given by the input + flavint_groups. + + Parameters + ---------- + flavint_groups : string, or sequence of strings or sequence of + NuFlavIntGroups + + Returns + ------- + transformed_fidg : FlavIntDataGroup + + """ + flavint_groups = self._parse_flavint_groups(flavint_groups) + + original_flavints = reduce(add, [list(f.flavints) for f in + self.flavint_groups]) + inputted_flavints = reduce(add, [list(f.flavints) for f in + flavint_groups]) + if not set(inputted_flavints).issubset(set(original_flavints)): + raise ValueError( + 'Mismatch between underlying group of flavints given as input ' + 'and original flavint_group.\nOriginal {0}\nInputted ' + '{1}'.format(set(original_flavints), set(inputted_flavints)) + ) + + transformed_fidg = FlavIntDataGroup(flavint_groups=flavint_groups) + for in_fig in flavint_groups: + for or_fig in self.flavint_groups: + if or_fig in in_fig: + if transformed_fidg[in_fig] is None: + transformed_fidg[in_fig] = deepcopy(self[or_fig]) + else: + transformed_fidg[in_fig] = \ + self._merge(transformed_fidg[in_fig], + self[or_fig]) + elif in_fig in or_fig: + raise ValueError( + 'Cannot decouple original flavint_group {0} into input' + 'flavint_group {1}'.format(or_fig, in_fig) + ) + logging.trace('Transformed from\n{0}\nto ' + '{1}'.format(self.flavint_groups, flavint_groups)) + return transformed_fidg
+ + +
+[docs] + def allclose(self, other, rtol=1e-05, atol=1e-08): + """Returns True if all data structures are equal and all numerical + values contained are within relative (rtol) and/or absolute (atol) + tolerance of one another. + """ + return recursiveAllclose(self, other, rtol=rtol, atol=atol)
+ + +
+[docs] + def validate(self, fi_container): + """Perform basic validation on the data structure""" + self.__basic_validate(fi_container)
+ + +
+[docs] + def save(self, fname, **kwargs): + """Save data structure to a file; see fileio.to_file for details""" + fileio.to_file(self, fname, **kwargs)
+ + + @staticmethod + def _parse_flavint_groups(flavint_groups): + if isinstance(flavint_groups, str): + return flavintGroupsFromString(flavint_groups) + elif isinstance(flavint_groups, NuFlavIntGroup): + return [flavint_groups] + elif isinstance(flavint_groups, Sequence): + if all(isinstance(f, NuFlavIntGroup) for f in flavint_groups): + return flavint_groups + elif all(isinstance(f, NuFlavInt) for f in flavint_groups): + return [NuFlavIntGroup(f) for f in flavint_groups] + elif all(isinstance(f, str) for f in flavint_groups): + return [NuFlavIntGroup(f) for f in flavint_groups] + else: + raise ValueError( + 'Elements in `flavint_groups` not all type ' + 'NuFlavIntGroup or string: %s' % flavint_groups + ) + else: + raise TypeError('Unrecognized `flavint_groups` type %s' % + type(flavint_groups)) + + @staticmethod + def _merge(a, b, path=None): + """Merge dictionaries `a` and `b` by recursively iterating down + to the lowest level of the dictionary until coincident numpy + arrays are found, after which the appropriate sub-element is + made equal to the concatenation of the two arrays. + """ + if path is None: + path = [] + for key in b: + if key in a: + if isinstance(a[key], dict) and isinstance(b[key], dict): + FlavIntDataGroup._merge(a[key], b[key], path + [str(key)]) + elif isinstance(a[key], np.ndarray) and \ + isinstance(b[key], np.ndarray): + a[key] = np.concatenate((a[key], b[key])) + elif isinstance(a[key], ureg.Quantity) and \ + isinstance(b[key], ureg.Quantity): + if isinstance(a[key].m, np.ndarray) and \ + isinstance(b[key].m, np.ndarray): + units = a[key].units + a[key] = np.concatenate((a[key].m, b[key].m_as(units))) + a[key] = a[key] * units + else: + raise Exception( + 'Conflict at %s' % '.'.join(path + [str(key)]) + ) + else: + raise Exception( + 'Conflict at %s' % '.'.join(path + [str(key)]) + ) + else: + a[key] = b[key] + return a + + @staticmethod + def _interpret_index(idx): + try: + nfi = NuFlavIntGroup(idx) + return str(nfi) + except: + raise ValueError('Invalid index: %s' % str(idx)) + + def __basic_validate(self, fi_container): + for group in self.flavint_groups: + f = str(group) + assert isinstance(fi_container, dict), "container must be of" \ + " type 'dict'; instead got %s" % type(fi_container) + assert f in fi_container, \ + "container missing flavint group '%s'" % f + + @staticmethod + def __load(fname, **kwargs): + d = fileio.from_file(fname, **kwargs) + return d + + def __add__(self, other): + d = deepcopy(self) + d = self._merge(d, other) + combined_flavint_groups = list( + set(self.flavint_groups + other.flavint_groups) + ) + return FlavIntDataGroup(val=d, flavint_groups=combined_flavint_groups) + + def __getitem__(self, arg): + key = self._interpret_index(arg) + tgt_obj = super().__getitem__(key) + return tgt_obj + + def __setitem__(self, arg, value): + key = self._interpret_index(arg) + if NuFlavIntGroup(key) not in self.flavint_groups: + self.flavint_groups += [NuFlavIntGroup(key)] + super().__setitem__(key, value) + + def __eq__(self, other): + """Recursive, exact equality""" + return recursiveEquality(self, other)
+ + + +
+[docs] +def flavintGroupsFromString(groups): + """Interpret `groups` to break into neutrino flavor/interaction type(s) + that are to be grouped together; also form singleton groups as specified + explicitly in `groups` or for any unspecified flavor/interaction type(s). + + The returned list of groups encompasses all possible flavor/int types, but + the groups are mutually exclusive. + + Parameters + ---------- + groups : None, string, or sequence of strings + + Returns + ------- + flavint_groups : list of NuFlavIntGroup + + """ + if groups is None or groups == '': + # None are to be grouped together + grouped = [] + # All will be singleton groups + ungrouped = [NuFlavIntGroup(k) for k in ALL_NUFLAVINTS] + else: + grouped, ungrouped = xlateGroupsStr(groups) + + # Find any flavints not included in the above groupings + flavint_groups = grouped + ungrouped + logging.trace('flav/int in the following group(s) will be joined together:' + + ', '.join([str(k) for k in grouped])) + logging.trace('flav/ints treated individually:' + + ', '.join([str(k) for k in ungrouped])) + + # Enforce that flavints composing groups are mutually exclusive + for grp0, grp1 in combinations(flavint_groups, 2): + if not set(grp0).isdisjoint(grp1): + overlapping = sorted(set(grp0).intersection(grp1)) + raise ValueError( + 'All flavint groups must be disjoint with one another, but' + ' groups %s and %s have overlapping flavint(s): %s' + % (grp0, grp1, ', '.join(str(g) for g in overlapping)) + ) + + return sorted(flavint_groups)
+ + + +
+[docs] +def xlateGroupsStr(val): + """Translate a ","-separated string into separate `NuFlavIntGroup`s. + + val + ","-delimited list of valid NuFlavIntGroup strings, e.g.: + "nuall_nc,nue,numu_cc+numubar_cc" + Note that specifying NO interaction type results in both interaction + types being selected, e.g. "nue" implies "nue_cc+nue_nc". For other + details of how the substrings are interpreted, see docs for + NuFlavIntGroup. + + returns: + grouped, ungrouped + + grouped, ungrouped + lists of NuFlavIntGroups; the first will have more than one flavint + in each NuFlavIntGroup whereas the second will have just one + flavint in each NuFlavIntGroup. Either list can be of 0-length. + + This function does not enforce mutual-exclusion on flavints in the + various flavint groupings, but does list any flavints not grouped + together in the `ungrouped` return arg. Mutual exclusion can be + enforced through set operations upon return. + """ + # What flavints to group together + grouped = [NuFlavIntGroup(s) for s in re.split('[,;]', val)] + + # Find any flavints not included in the above groupings + all_flavints = set(ALL_NUFLAVINTS) + all_grouped_flavints = set(NuFlavIntGroup(grouped)) + ungrouped = [NuFlavIntGroup(k) for k in + sorted(all_flavints.difference(all_grouped_flavints))] + + return grouped, ungrouped
+ + + +# pylint: disable=line-too-long +def test_IntType(): + """IntType unit tests""" + #========================================================================== + # Test IntType + #========================================================================== + ref = CC + assert IntType('\n\t _cc \n') == ref + try: + IntType('numubarcc') + except ValueError: + pass + else: + raise Exception() + assert IntType(1) == ref + assert IntType(1.0) == ref + assert IntType(CC) == ref + assert IntType(NuFlavInt('numubarcc')) == ref + for int_code in [1, 2]: + IntType(int_code) + IntType(float(int_code)) + logging.info('<< PASS : test_IntType >>') + + +# pylint: disable=line-too-long +def test_NuFlav(): + """NuFlav unit tests""" + all_f_codes = [12, -12, 14, -14, 16, -16] + + #========================================================================== + # Test NuFlav + #========================================================================== + ref = NuFlav('numu') + assert ref.code == 14 + assert (-ref).code == -14 + assert ref.bar_code == 1 + assert (-ref).bar_code == -1 + assert ref.particle + assert not (-ref).particle + assert not ref.antiparticle + assert (-ref).antiparticle + + #assert NuFlav('\n\t _ nu_ mu_ cc\n\t\r') == ref + #assert NuFlav('numucc') == ref + assert NuFlav(14) == ref + assert NuFlav(14.0) == ref + assert NuFlav(NuFlav('numu')) == ref + assert NuFlav(NuFlavInt('numucc')) == ref + assert NuFlav(NuFlavInt('numunc')) == ref + + for f in all_f_codes: + NuFlav(f) + NuFlav(float(f)) + for (f, bnb) in product(['e', 'mu', 'tau'], ['', 'bar']): + NuFlav('nu_' + f + '_' + bnb) + + logging.info('<< PASS : test_NuFlav >>') + + +# pylint: disable=line-too-long +def test_NuFlavInt(): + """NuFlavInt unit tests""" + all_f_codes = [12, -12, 14, -14, 16, -16] + all_i_codes = [1, 2] + + #========================================================================== + # Test NuFlavInt + #========================================================================== + try: + NuFlavInt('numu') + except ValueError: + pass + + # Equality + fi_comb = [fic for fic in product(all_f_codes, all_i_codes)] + for (fi0, fi1) in product(fi_comb, fi_comb): + if fi0 == fi1: + assert NuFlavInt(fi0) == NuFlavInt(fi1) + else: + assert NuFlavInt(fi0) != NuFlavInt(fi1) + assert NuFlavInt((12, 1)) != 'xyz' + # Sorting: this is my desired sort order + nfl0 = [NUECC, NUEBARCC, NUMUCC, NUMUBARCC, NUTAUCC, NUTAUBARCC, NUENC, + NUEBARNC, NUMUNC, NUMUBARNC, NUTAUNC, NUTAUBARNC] + nfl1 = deepcopy(nfl0) + np.random.shuffle(nfl1) + nfl_sorted = sorted(nfl1) + assert all([v0 == nfl_sorted[n] for n, v0 in enumerate(nfl0)]), str(nfl_sorted) + assert len(nfl0) == len(nfl_sorted) + + # Test NuFlavInt instantiation + _ = NuFlav('nue') + _ = IntType('cc') + _ = IntType('nc') + _ = NuFlav('nuebar') + flavs = list(ALL_NUFLAVS) + flavs.extend(['nue', 'numu', 'nutau', 'nu_e', 'nu e', 'Nu E', 'nuebar', + 'nu e bar']) + flavs.extend(all_f_codes) + _ = NuFlavInt('nuebarnc') + + # Instantiate with combinations of flavs and int types + for f, i in product(flavs, [1, 2, 'cc', 'nc', CC, NC]): + ref = NuFlavInt(f, i) + assert NuFlavInt((f, i)) == ref + assert NuFlavInt(flav=f, int_type=i) == ref + if isinstance(f, str) and isinstance(i, str): + assert NuFlavInt(f+i) == ref + assert NuFlavInt(f + '_' + i) == ref + assert NuFlavInt(f + ' ' + i) == ref + + # Instantiate with already-instantiated `NuFlavInt`s + assert NuFlavInt(NUECC) == NuFlavInt('nuecc') + assert NuFlavInt(NUEBARNC) == NuFlavInt('nuebarnc') + + # test negating flavint + nk = NuFlavInt('numucc') + assert -nk == NuFlavInt('numubarcc') + + logging.info('<< PASS : test_NuFlavInt >>') + + +# pylint: disable=line-too-long +def test_NuFlavIntGroup(): + """NuFlavIntGroup unit tests""" + all_f_codes = [12, -12, 14, -14, 16, -16] + all_i_codes = [1, 2] + + #========================================================================== + # Test NuFlavIntGroup + #========================================================================== + fi_comb = [fic for fic in product(all_f_codes, all_i_codes)] + nfl0 = [NuFlavInt(fic) for fic in fi_comb] + nfl1 = [NuFlavInt(fic) for fic in fi_comb] + nfl_sorted = sorted(nfl1) + nkg0 = NuFlavIntGroup(nfl0) + nkg1 = NuFlavIntGroup(nfl_sorted) + assert nkg0 == nkg1 + assert nkg0 != 'xyz' + assert nkg0 != 'xyz' + + # Test inputs + assert NuFlavIntGroup('nuall,nuallbar').flavs == tuple([NuFlav(c) for c in all_f_codes]), str(NuFlavIntGroup('nuall,nuallbar').flavs) + + # + # Test NuFlavIntGroup instantiation + # + nue = NuFlav('nue') + numu = NuFlav('numu') + nue_cc = NuFlavInt('nue_cc') + nue_nc = NuFlavInt('nue_nc') + + # Empty args + NuFlavIntGroup() + NuFlavIntGroup([]) + + # String flavor promoted to CC+NC + assert set(NuFlavIntGroup('nue').flavints) == set((nue_cc, nue_nc)) + # NuFlav promoted to CC+NC + assert set(NuFlavIntGroup(nue).flavints) == set((nue_cc, nue_nc)) + # List of single flav str same as above + assert set(NuFlavIntGroup(['nue']).flavints) == set((nue_cc, nue_nc)) + # List of single flav same as above + assert set(NuFlavIntGroup([nue]).flavints) == set((nue_cc, nue_nc)) + + # Single flavint spec + assert set(NuFlavIntGroup(nue_cc).flavints) == set((nue_cc,)) + # Str with single flavint spec + assert set(NuFlavIntGroup('nue_cc').flavints) == set((nue_cc,)) + # List of single str containing single flavint spec + assert set(NuFlavIntGroup(['nue_cc']).flavints) == set((nue_cc,)) + + # Multiple flavints as *args + assert set(NuFlavIntGroup(nue_cc, nue_nc).flavints) == set((nue_cc, nue_nc)) + # List of flavints + assert set(NuFlavIntGroup([nue_cc, nue_nc]).flavints) == set((nue_cc, nue_nc)) + # List of single str containing multiple flavints spec + assert set(NuFlavIntGroup(['nue_cc,nue_nc']).flavints) == set((nue_cc, nue_nc)) + # List of str containing flavints spec + assert set(NuFlavIntGroup(['nue_cc', 'nue_nc']).flavints) == set((nue_cc, nue_nc)) + + # Another NuFlavIntGroup + assert set(NuFlavIntGroup(NuFlavIntGroup(nue_cc, nue_nc)).flavints) == set((nue_cc, nue_nc)) + + # Addition of flavints promoted to NuFlavIntGroup + assert nue_cc + nue_nc == NuFlavIntGroup(nue) + # Addition of flavs promoted to NuFlavIntGroup including both CC & NC + assert nue + numu == NuFlavIntGroup(nue, numu) + + # Test remove + nkg = NuFlavIntGroup('nue_cc+numucc') + nkg.remove(NuFlavInt((12, 1))) + assert nkg == NuFlavIntGroup('numucc') + + # Test del + nkg = NuFlavIntGroup('nue_cc+numucc') + del nkg[0] + assert nkg == NuFlavIntGroup('numucc') + + # Equivalent object when converting to string and back to NuFlavIntGroup from + # that string + for n in range(1, len(ALL_NUFLAVINTS)+1): + logging.debug('NuFlavIntGroup --> str --> NuFlavIntGroup, n = %d', n) + for comb in combinations(ALL_NUFLAVINTS, n): + ref = NuFlavIntGroup(comb) + assert ref == NuFlavIntGroup(str(ref)) + + # Ordering + desired_order = [ + NuFlavIntGroup(s) for s in [ + 'nuecc', 'nuebarcc', 'numucc', 'numubarcc', 'nutaucc', + 'nutaubarcc', 'nuallnc', 'nuallbarnc' + ] + ] + groups = flavintGroupsFromString('nuallnc, nuallbarnc') + assert groups == desired_order, str(groups) + assert sorted(groups) == desired_order, str(sorted(groups)) + + desired_order = [ + NuFlavIntGroup(s) for s in [ + 'nuecc', 'nuebarcc', 'numucc', 'numubarcc', 'nutaucc', + 'nutaubarcc', 'nuallnc', 'nuallbarnc' + ] + ] + groups = flavintGroupsFromString('nuallnc, nuallbarnc') + assert groups == desired_order, str(groups) + assert sorted(groups) == desired_order, str(sorted(groups)) + + # test TeX strings + nkg = NuFlavIntGroup('nuall,nuallbar') + logging.info(str(nkg)) + logging.info(nkg.tex) + logging.info(nkg.simple_str()) + logging.info(nkg.simple_tex()) + logging.info(nkg.unique_flavs_tex) + + logging.info('<< ???? : test_NuFlavIntGroup >> checks pass upon inspection' + ' of above outputs and generated file(s).') + + +# pylint: disable=line-too-long +def test_FlavIntData(): + """FlavIntData unit tests""" + #========================================================================== + # Test FlavIntData + #========================================================================== + # Excercise the "standard" PISA nested-python-dict features, where this + # dict uses an '_' to separate 'bar' in key names, and the nested dict + # levels are [flavor][interaction type]. + + # Force separator to something weird before starting, to ensure everything + # still works and this separator is still set when we're done + oddball_sep = 'xyz' + set_bar_ssep(oddball_sep) + ref_pisa_dict = {f: {it: None for it in ['cc', 'nc']} for f in + ['nue', 'nue_bar', 'numu', 'numu_bar', 'nutau', + 'nutau_bar']} + fi_cont = FlavIntData() + for f in ['nue', 'nue_bar', 'numu', 'numu_bar', 'nutau', 'nutau_bar']: + for it in ['cc', 'nc']: + assert fi_cont[f][it] == ref_pisa_dict[f][it] + flavint = NuFlavInt(f, it) + assert flavint.pidx(ref_pisa_dict) == ref_pisa_dict[f][it] + logging.trace('%s: %s' %('flavint', flavint)) + logging.trace('%s: %s' %('f', f)) + logging.trace('%s: %s' %('it', it)) + logging.trace('%s: %s' %('fi_cont', fi_cont)) + logging.trace('%s: %s' %('fi_cont[f]', fi_cont[f])) + logging.trace('%s: %s' %('fi_cont[f][it]', fi_cont[f][it])) + logging.trace('%s: %s' %('fi_cont[flavint]', fi_cont[flavint])) + logging.trace('%s: %s' %('fi_cont[flavint]', fi_cont[flavint])) + assert fi_cont[flavint] == fi_cont[f][it] + assert fi_cont[flavint] == fi_cont[flavint] + assert get_bar_ssep() == oddball_sep + set_bar_ssep('') + + # These should fail because you're only allowed to access the flav or + # flavint part of the data structure, no longer any sub-items (use + # subsequent [k1][k2]... to do this instead) + fi_cont['numu', 'cc'] = {'sub-key': {'sub-sub-key': None}} + try: + fi_cont['numu', 'cc', 'sub-key'] + except ValueError: + pass + else: + raise Exception('Test failed, exception should have been raised') + + try: + fi_cont['numu', 'cc', 'sub-key'] = 'new sub-val' + except ValueError: + pass + else: + raise Exception('Test failed, exception should have been raised') + + # These should fail because setting flavor-only as a string would + # invalidate the data structure (not a nested dict) + try: + fi_cont[NuFlav('numu')] = 'xyz' + except AssertionError: + pass + else: + raise Exception('Test failed, exception should have been raised') + + try: + fi_cont[NuFlav('numu')] = {'cc': 'cc_xyz'} + except AssertionError: + pass + else: + raise Exception('Test failed, exception should have been raised') + + # The previously-valid fi_cont should *still* be valid, as `set` should + # revert to the original (valid) values rather than keep the invalid values + # that were attempted to be set above + fi_cont.validate(fi_cont) + + # This should be okay because datastructure is still valid if the item + # being set on the flavor (only) is a valid int-type dict + fi_cont[NuFlav('numu')] = {'cc': 'cc_xyz', 'nc': 'nc_xyz'} + + # Test setting, getting, and JSON serialization of FlavIntData + fi_cont['nue', 'cc'] = 'this is a string blah blah blah' + _ = fi_cont[NuFlavInt('nue_cc')] + fi_cont[NuFlavInt('nue_nc')] = np.pi + _ = fi_cont[NuFlavInt('nue_nc')] + fi_cont[NuFlavInt('numu_cc')] = [0, 1, 2, 3] + _ = fi_cont[NuFlavInt('numu_cc')] + fi_cont[NuFlavInt('numu_nc')] = {'new': {'nested': {'dict': 'xyz'}}} + _ = fi_cont[NuFlavInt('numu_nc')] + fi_cont[NuFlavInt('nutau_cc')] = 1 + _ = fi_cont[NuFlavInt('nutau_cc')] + fi_cont[NuFlavInt('nutaubar_cc')] = np.array([0, 1, 2, 3]) + _ = fi_cont[NuFlavInt('nutaubar_cc')] + fname = '/tmp/test_FlavIntData.json' + logging.info('Writing FlavIntData to file %s; inspect.', fname) + fileio.to_file(fi_cont, fname, warn=False) + fi_cont2 = fileio.from_file(fname) + assert recursiveEquality(fi_cont2, fi_cont), \ + 'fi_cont=%s\nfi_cont2=%s' %(fi_cont, fi_cont2) + + logging.info('<< ???? : test_FlavIntData >> checks pass upon inspection of' + ' above outputs and generated file(s).') + + +# pylint: disable=line-too-long +def test_FlavIntDataGroup(): + """FlavIntDataGroup unit tests""" + flavint_group = 'nue, numu_cc+numubar_cc, nutau_cc' + FlavIntDataGroup(flavint_groups=flavint_group) + fidg1 = FlavIntDataGroup( + flavint_groups='nuall, nu all bar CC, nuallbarnc', + val={'nuall': np.arange(0, 100), + 'nu all bar CC': np.arange(100, 200), + 'nuallbarnc': np.arange(200, 300)} + ) + fidg2 = FlavIntDataGroup( + val={'nuall': np.arange(0, 100), + 'nu all bar CC': np.arange(100, 200), + 'nuallbarnc': np.arange(200, 300)} + ) + assert fidg1 == fidg2 + + try: + fidg1 = FlavIntDataGroup( + flavint_groups='nuall, nu all bar, nuallbar', + val={'nuall': np.arange(0, 100), + 'nu all bar CC': np.arange(100, 200), + 'nuallbarnc': np.arange(200, 300)} + ) + except ValueError: + pass + else: + raise Exception + + try: + fidg1 = FlavIntDataGroup(flavint_groups=['nuall', 'nue']) + except (ValueError, AssertionError): + pass + else: + raise Exception + + assert set(fidg1.keys()) == set(('nuall', 'nuallbar_cc', 'nuallbar_nc')) + fidg1.save('/tmp/test_FlavIntDataGroup.json', warn=False) + fidg1.save('/tmp/test_FlavIntDataGroup.hdf5', warn=False) + fidg3 = FlavIntDataGroup(val='/tmp/test_FlavIntDataGroup.json') + fidg4 = FlavIntDataGroup(val='/tmp/test_FlavIntDataGroup.hdf5') + assert fidg3 == fidg1 + assert fidg4 == fidg1 + + figroups = ('nuecc+nuebarcc,numucc+numubarcc,nutaucc+nutaubarcc,' + 'nuallnc,nuallbarnc') + cfidat = FlavIntDataGroup(flavint_groups=figroups) + + for k in cfidat.flavint_groups: + cfidat[k] = np.arange(10) + + cfidat[NuFlavIntGroup('nuecc+nuebarcc')] = np.arange(10) + + logging.debug(str((fidg1 + fidg2))) + assert fidg1 == fidg2 + try: + logging.debug(str((fidg1 + cfidat))) + except (ValueError, AssertionError): + pass + else: + raise Exception + + d1 = { + 'numu+numubar': { + 'energy': np.arange(0, 10) + }, + 'nutau+nutaubar': { + 'energy': np.arange(0, 10) + } + } + d2 = { + 'nue+nuebar': { + 'weights': np.arange(0, 10) + }, + 'nutau+nutaubar': { + 'weights': np.arange(0, 10) + } + } + d1 = FlavIntDataGroup(val=d1) + d2 = FlavIntDataGroup(val=d2) + d3 = d1 + d2 + logging.debug(str((d3))) + + tr_d1 = d1.transform_groups(['numu+numubar+nutau+nutaubar']) + logging.debug(str((tr_d1))) + tr_d3 = d3.transform_groups('nue+nuebar+numu+numubar, nutau+nutaubar') + tr_d3_1 = d3.transform_groups(['nue+nuebar+numu+numubar', 'nutau+nutaubar']) + tr_d3_2 = d3.transform_groups([NuFlavIntGroup('nue+nuebar+numu+numubar'), + NuFlavIntGroup('nutau+nutaubar')]) + logging.debug(str((tr_d3))) + assert tr_d3 == tr_d3_1 and tr_d3 == tr_d3_2 + + try: + tr_d3.transform_groups(['nue+nuebar']) + except (ValueError, AssertionError): + pass + else: + raise Exception + + try: + tr_d3.transform_groups('nue+nuebar, numu+numubar, nutau+nutaubar') + except (ValueError, AssertionError): + pass + else: + raise Exception + + logging.info('<< PASS : test_FlavIntDataGroup >>') + + +if __name__ == "__main__": + set_verbosity(1) + test_IntType() + test_NuFlav() + test_NuFlavInt() + test_NuFlavIntGroup() + test_FlavIntData() + test_FlavIntDataGroup() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/flux_weights.html b/_modules/pisa/utils/flux_weights.html new file mode 100644 index 000000000..d0ab6b1da --- /dev/null +++ b/_modules/pisa/utils/flux_weights.html @@ -0,0 +1,763 @@ + + + + + + pisa.utils.flux_weights — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.flux_weights

+#! /usr/bin/env python
+
+"""
+A set of functions for calculating flux weights given an array of energy and
+cos(zenith) values based on the Honda atmospheric flux tables. A lot of this
+functionality will be copied from honda.py but since I don't want to initialise
+this as a stage it makes sense to copy it in to here so somebody can't
+accidentally do the wrong thing with that script.
+"""
+
+import numpy as np
+import scipy.interpolate as interpolate
+
+from pisa.utils.log import logging
+from pisa.utils.resources import open_resource
+
+
+__all__ = [
+    "load_2d_honda_table",
+    "load_2d_bartol_table",
+    "load_2d_table",
+    "calculate_2d_flux_weights",
+    "load_3d_honda_table",
+    "load_3d_table",
+    "calculate_3d_flux_weights",
+]
+
+__author__ = "S. Wren"
+
+__license__ = """Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+PRIMARIES = ["numu", "numubar", "nue", "nuebar"]
+T_MODE_PRIMARIES = ["numu", "numubar", "nue", "nuebar", "nutau", "nutaubar"]
+TEXPRIMARIES = [r"$\nu_{\mu}$", r"$\bar{\nu}_{\mu}$", r"$\nu_{e}$", r"$\bar{\nu}_{e}$"]
+
+
+
+[docs] +def load_2d_honda_table(flux_file, enpow=1, return_table=False, hg_taumode=False): + """ + Added "hg_taumode" to load in hillas gaisser h3a tables made with tau neutrino contributions. + """ + + logging.debug("Loading atmospheric flux table %s", flux_file) + + # columns in Honda files are in the same order + cols = ["energy"] + cols += T_MODE_PRIMARIES if hg_taumode else PRIMARIES + + # Load the data table + table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) + if hg_taumode: + mask = np.array([all(~np.isnan(table)[i]) for i in range(len(table))]) + table = table[mask].T + else: + mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) + table = table[~mask].T + + flux_dict = dict(zip(cols, table)) + for key in flux_dict.keys(): + # There are 20 lines per zenith range + flux_dict[key] = np.array(np.split(flux_dict[key], 100 if hg_taumode else 20)) + + # Set the zenith and energy range as they are in the tables + # The energy may change, but the zenith should always be + # 20 bins, full sky. + flux_dict["energy"] = flux_dict["energy"][0] + if hg_taumode: + _edges = np.linspace(-1.0, 1.0, 101) + flux_dict["coszen"] = 0.5 * (_edges[:-1] + _edges[1:]) + else: + flux_dict["coszen"] = np.linspace(-0.95, 0.95, 20) + + # Now get a spline representation of the flux table. + logging.debug("Make spline representation of flux") + logging.debug("Doing this integral-preserving.") + + spline_dict = {} + + # Do integral-preserving method as in IceCube's NuFlux + # This one will be based purely on SciPy rather than ROOT + # Stored splines will be 1D in integrated flux over energy + int_flux_dict = {} + # Energy and CosZenith bins needed for integral-preserving + # method must be the edges of those of the normal tables + if hg_taumode: + int_flux_dict["logenergy"] = np.linspace(1.0, 6.0, 101) + int_flux_dict["coszen"] = np.linspace(-1, 1, 101) + else: + int_flux_dict["logenergy"] = np.linspace(-1.025, 4.025, 102) + int_flux_dict["coszen"] = np.linspace(-1, 1, 21) + for nutype in T_MODE_PRIMARIES if hg_taumode else PRIMARIES: + # spline_dict now wants to be a set of splines for + # every table cosZenith value. + splines = {} + cz_iter = 1 + for energyfluxlist in flux_dict[nutype]: + int_flux = [] + tot_flux = 0.0 + int_flux.append(tot_flux) + for energyfluxval, energyval in zip(energyfluxlist, flux_dict["energy"]): + # Spline works best if you integrate flux * energy + tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 + int_flux.append(tot_flux) + + spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) + cz_value = "%.2f" % (1.05 - cz_iter * 0.1) + splines[cz_value] = spline + cz_iter += 1 + + spline_dict[nutype] = splines + + for prim in T_MODE_PRIMARIES if hg_taumode else PRIMARIES: + flux_dict[prim] = flux_dict[prim][::-1] + + if return_table: + return spline_dict, flux_dict + + return spline_dict
+ + + +
+[docs] +def load_2d_bartol_table(flux_file, enpow=1, return_table=False): + + logging.debug("Loading atmospheric flux table %s", flux_file) + + # Bartol tables have been modified to look like Honda tables + cols = ["energy"] + PRIMARIES + + # Load the data table + table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) + mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) + table = table[~mask].T + + flux_dict = dict(zip(cols, table)) + for key in flux_dict.keys(): + # There are 20 lines per zenith range + flux_dict[key] = np.array(np.split(flux_dict[key], 20)) + + # Set the zenith and energy range as they are in the tables + # The energy may change, but the zenith should always be + # 20 bins, full sky. + flux_dict["energy"] = flux_dict["energy"][0] + flux_dict["coszen"] = np.linspace(-0.95, 0.95, 20) + + # Now get a spline representation of the flux table. + logging.debug("Make spline representation of flux") + logging.debug("Doing this integral-preserving.") + + spline_dict = {} + + # Do integral-preserving method as in IceCube's NuFlux + # This one will be based purely on SciPy rather than ROOT + # Stored splines will be 1D in integrated flux over energy + int_flux_dict = {} + # Energy and CosZenith bins needed for integral-preserving + # method must be the edges of those of the normal tables + low_log_energy = np.linspace(-1, 1, 41) + high_log_energy = np.linspace(1.1, 4, 30) + int_flux_dict["logenergy"] = np.concatenate([low_log_energy, high_log_energy]) + int_flux_dict["coszen"] = np.linspace(-1, 1, 21) + for nutype in PRIMARIES: + # spline_dict now wants to be a set of splines for + # every table cosZenith value. + splines = {} + cz_iter = 1 + for energyfluxlist in flux_dict[nutype]: + int_flux = [] + tot_flux = 0.0 + int_flux.append(tot_flux) + for energyfluxval, energyval in zip(energyfluxlist, flux_dict["energy"]): + # Spline works best if you integrate flux * energy + if energyval < 10.0: + tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 + else: + tot_flux += energyfluxval * np.power(energyval, enpow) * 0.1 + int_flux.append(tot_flux) + + spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) + cz_value = "%.2f" % (1.05 - cz_iter * 0.1) + splines[cz_value] = spline + cz_iter += 1 + + spline_dict[nutype] = splines + + for prim in PRIMARIES: + flux_dict[prim] = flux_dict[prim][::-1] + + if return_table: + return spline_dict, flux_dict + + return spline_dict
+ + + +
+[docs] +def load_2d_table(flux_file, enpow=1, return_table=False): + """Manipulate 2 dimensional flux tables. + + 2D is expected to mean energy and cosZenith, where azimuth is averaged + over (before being stored in the table) and the zenith range should + include both hemispheres. + + Parameters + ---------- + flux_file : string + The location of the flux file you want to spline. Should be a honda + azimuth-averaged file. + enpow : integer + The power to which the energy will be raised in the construction of the + splines. If you don't know what this means, leave it as 1. + return_table : boolean + Flag to true if you want the function to also return a dictionary + of the underlying values from the tables. Useful for comparisons. + + """ + if not isinstance(enpow, int): + raise TypeError("Energy power must be an integer") + if not isinstance(return_table, bool): + raise TypeError("return_table must be a boolean") + if not isinstance(flux_file, str): + raise TypeError("Flux file name must be a string") + if "aa" not in flux_file: + raise ValueError("Azimuth-averaged tables are expected") + if ("honda" not in flux_file) and ("hillas" not in flux_file): + if "bartol" in flux_file: + if return_table: + spline_dict, flux_dict = load_2d_bartol_table( + flux_file, enpow=enpow, return_table=True + ) + else: + spline_dict = load_2d_bartol_table(flux_file, enpow=enpow) + spline_dict["name"] = "bartol" + + else: + raise ValueError( + "Flux file must be from the Honda, Hillas, or " "Bartol groups" + ) + else: + if return_table: + spline_dict, flux_dict = load_2d_honda_table( + flux_file, + enpow=enpow, + return_table=True, + hg_taumode="hillas" in flux_file, + ) + else: + spline_dict = load_2d_honda_table( + flux_file, enpow=enpow, hg_taumode="hillas" in flux_file + ) + spline_dict["name"] = "hillas" if "hillas" in flux_file else "honda" + + if return_table: + return spline_dict, flux_dict + + return spline_dict
+ + + +
+[docs] +def calculate_2d_flux_weights( + true_energies, true_coszens, en_splines, enpow=1, out=None +): + """Calculate flux weights for given array of energy and cos(zenith). + Arrays of true energy and zenith are expected to be for MC events, so + they are tested to be of the same length. + `en_splines` should be the spline for the primary of interest. The entire + dictionary is calculated in the previous function. + + Parameters + ---------- + true_energies : list or numpy array + A list of the true energies of your MC events. Pass this in GeV! + true_coszens : list or numpy array + A list of the true coszens of your MC events + en_splines : list of splines + A list of the initialised energy splines from the previous function + for your desired primary. + enpow : integer + The power to which the energy was raised in the construction of the + splines. If you don't know what this means, leave it as 1. + out : np.array + optional array to store results + + Example + ------- + Use the previous function to calculate the spline dict for the South Pole. + + spline_dict = load_2d_table('flux/honda-2015-spl-solmax-aa.d') + + Then you must have some equal length arrays of energy and zenith. + + ens = [3.0, 4.0, 5.0] + czs = [-0.4, 0.7, 0.3] + + These are used in this function, along with whatever primary you are + interested in calculating the flux weights for. + + flux_weights = calculate_2d_flux_weights(ens, czs, spline_dict['numu']) + + Done! + + """ + if not isinstance(true_energies, np.ndarray): + if not isinstance(true_energies, list): + raise TypeError("true_energies must be a list or numpy array") + else: + true_energies = np.array(true_energies) + if not isinstance(true_coszens, np.ndarray): + if not isinstance(true_coszens, list): + raise TypeError("true_coszens must be a list or numpy array") + else: + true_coszens = np.array(true_coszens) + if not ((true_coszens >= -1.0).all() and (true_coszens <= 1.0).all()): + raise ValueError("Not all coszens found between -1 and 1") + if not len(true_energies) == len(true_coszens): + raise ValueError("length of energy and coszen arrays must match") + if not isinstance(enpow, int): + raise TypeError("Energy power must be an integer") + + num_cz_points = 20 + czkeys = ["%.2f" % x for x in np.linspace(-0.95, 0.95, num_cz_points)] + cz_spline_points = np.linspace(-1, 1, num_cz_points + 1) + + if out is None: + out = np.empty_like(true_energies) + + spline_vals = np.zeros(num_cz_points + 1) + for i in range(len(true_energies)): + true_log_energy = np.log10(true_energies[i]) + for j in range(num_cz_points): + spline_vals[j + 1] = interpolate.splev( + true_log_energy, en_splines[czkeys[j]], der=1 + ) + + int_spline_vals = np.cumsum(spline_vals) * 0.1 + spline = interpolate.splrep(cz_spline_points, int_spline_vals, s=0) + + out[i] = interpolate.splev(true_coszens[i], spline, der=1) / np.power( + true_energies[i], enpow + ) + + return out
+ + + +
+[docs] +def load_3d_honda_table(flux_file, enpow=1, return_table=False): + + logging.debug("Loading atmospheric flux table %s", flux_file) + + # columns in Honda files are in the same order + cols = ["energy"] + PRIMARIES + + # Load the data table + table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) + mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) + table = table[~mask].T + + flux_dict = dict(zip(cols, table)) + for key in flux_dict.keys(): + # There are 20 lines per zenith range + coszenith_lists = np.array(np.split(flux_dict[key], 20)) + azimuth_lists = [] + for coszenith_list in coszenith_lists: + azimuth_lists.append(np.array(np.split(coszenith_list, 12)).T) + flux_dict[key] = np.array(azimuth_lists) + if not key == "energy": + flux_dict[key] = flux_dict[key].T + + # Set the zenith and energy range as they are in the tables + # The energy may change, but the zenith should always be + # 20 bins and the azimuth should always be 12 bins, full sky + flux_dict["energy"] = flux_dict["energy"][0].T[0] + flux_dict["coszen"] = np.linspace(0.95, -0.95, 20) + flux_dict["azimuth"] = np.linspace(15, 345, 12) + + # Now get a spline representation of the flux table. + logging.debug("Make spline representation of flux") + logging.debug("Doing this integral-preserving.") + + spline_dict = {} + + # Do integral-preserving method as in IceCube's NuFlux + # This one will be based purely on SciPy rather than ROOT + # Stored splines will be 1D in integrated flux over energy + int_flux_dict = {} + # Energy and CosZenith bins needed for integral-preserving + # method must be the edges of those of the normal tables + int_flux_dict["logenergy"] = np.linspace(-1.025, 4.025, 102) + int_flux_dict["coszen"] = np.linspace(1, -1, 21) + for nutype in PRIMARIES: + # spline_dict now wants to be a set of splines for + # every table cosZenith value. + # In 3D mode we have a set of these sets for every + # table azimuth value. + az_splines = {} + for az, f in zip(flux_dict["azimuth"], flux_dict[nutype]): + splines = {} + cz_iter = 1 + for energyfluxlist in f.T: + int_flux = [] + tot_flux = 0.0 + int_flux.append(tot_flux) + for energyfluxval, energyval in zip( + energyfluxlist, flux_dict["energy"] + ): + # Spline works best if you integrate flux * energy + tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 + int_flux.append(tot_flux) + + spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) + cz_value = "%.2f" % (1.05 - cz_iter * 0.1) + splines[cz_value] = spline + cz_iter += 1 + + az_splines[az] = splines + + spline_dict[nutype] = az_splines + + if return_table: + return spline_dict, flux_dict + + return spline_dict
+ + + +
+[docs] +def load_3d_table(flux_file, enpow=1, return_table=False): + """Manipulate 3 dimensional flux tables. + + 3D is expected to mean energy, cosZenith and azimuth. The angular range + should be fully sky. + + Parameters + ---------- + flux_file : string + The location of the flux file you want to spline. Should be a honda + azimuth-averaged file. + enpow : integer + The power to which the energy will be raised in the construction of the + splines. If you don't know what this means, leave it as 1. + return_table : boolean + Flag to true if you want the function to also return a dictionary + of the underlying values from the tables. Useful for comparisons. + """ + + if not isinstance(enpow, int): + raise TypeError("Energy power must be an integer") + if not isinstance(return_table, bool): + raise TypeError("return_table must be a boolean") + if not isinstance(flux_file, str): + raise ValueError("Flux file name must be a string") + if "aa" in flux_file: + raise ValueError("Azimuth-dependent tables are expected") + if "honda" not in flux_file: + raise ValueError("Flux file must be from the Honda group") + if return_table: + spline_dict, flux_dict = load_3d_honda_table( + flux_file, enpow=enpow, return_table=True + ) + else: + spline_dict = load_3d_honda_table(flux_file, enpow=enpow) + spline_dict["name"] = "honda" + + if return_table: + return spline_dict, flux_dict + + return spline_dict
+ + + +
+[docs] +def calculate_3d_flux_weights( + true_energies, true_coszens, true_azimuths, en_splines, enpow=1, az_linear=True +): + """Calculate flux weights for given array of energy, cos(zenith) and + azimuth. + + Arrays of true energy, zenith and azimuth are expected to be for MC events, + so they are tested to be of the same length. + En_splines should be the spline for the primary of interest. The entire + dictionary is calculated in the previous function. + + Parameters + ---------- + true_energies : list or numpy array + A list of the true energies of your MC events. Pass this in GeV! + true_coszens : list or numpy array + A list of the true coszens of your MC events + true_azimuths : list or numpy array + A list of the true azimuths of your MC events. Pass this in radians! + en_splines : list of splines + A list of the initialised energy splines from the previous function + for your desired primary. + enpow : integer + The power to which the energy was raised in the construction of the + splines. If you don't know what this means, leave it as 1. + az_linear : boolean + Whether or not to linearly interpolate in the azimuthal direction. If + you don't know why this is an option, leave it as true. + + Example + ------- + Use the previous function to calculate the spline dict for the South Pole. + + spline_dict = load_3d_table('flux/honda-2015-spl-solmax.d') + + Then you must have some equal length arrays of energy, zenith and azimuth. + + ens = [3.0, 4.0, 5.0] + czs = [-0.4, 0.7, 0.3] + azs = [0.3, 1.2, 2.1] + + These are used in this function, along with whatever primary you are + interested in calculating the flux weights for. + + flux_weights = calculate_3d_flux_weights(ens, + czs, + azs, + spline_dict['numu']) + + Done! + """ + + if not isinstance(true_energies, np.ndarray): + if not isinstance(true_energies, list): + raise TypeError("true_energies must be a list or numpy array") + else: + true_energies = np.array(true_energies) + if not isinstance(true_coszens, np.ndarray): + if not isinstance(true_coszens, list): + raise TypeError("true_coszens must be a list or numpy array") + else: + true_coszens = np.array(true_coszens) + if not isinstance(true_azimuths, np.ndarray): + if not isinstance(true_azimuths, list): + raise TypeError("true_azimuths must be a list or numpy array") + else: + true_azimuths = np.array(true_azimuths) + if not ((true_coszens >= -1.0).all() and (true_coszens <= 1.0).all()): + raise ValueError("Not all coszens found between -1 and 1") + ensczs_match = len(true_energies) == len(true_coszens) + ensazs_match = len(true_energies) == len(true_azimuths) + if not (ensczs_match and ensazs_match): + raise ValueError("length of energy, coszen and azimuth arrays must " "match") + if not (true_azimuths >= 0.0).all(): + raise ValueError( + "Azimuths should be given as the angle, so should " "all be positive" + ) + + azkeys = np.linspace(15.0, 345.0, 12) + if not az_linear: + az_spline_points = np.linspace(0.0, 360.0, 13) + else: + az_spline_points = np.linspace(15.0, 375.0, 13) + czkeys = ["%.2f" % x for x in np.linspace(-0.95, 0.95, 20)] + cz_spline_points = np.linspace(-1, 1, 21) + + flux_weights = [] + for true_energy, true_coszen, true_azimuth in zip( + true_energies, true_coszens, true_azimuths + ): + true_azimuth *= 180.0 / np.pi + true_log_energy = np.log10(true_energy) + az_spline_vals = [] + for azkey in azkeys: + cz_spline_vals = [0] + for czkey in czkeys: + spval = interpolate.splev( + true_log_energy, en_splines[azkey][czkey], der=1 + ) + + cz_spline_vals.append(spval) + cz_spline_vals = np.array(cz_spline_vals) + cz_int_spline_vals = np.cumsum(cz_spline_vals) * 0.1 + cz_spline = interpolate.splrep(cz_spline_points, cz_int_spline_vals, s=0) + az_spline_vals.append(interpolate.splev(true_coszen, cz_spline, der=1)) + # Treat the azimuthal dimension in an integral-preserving manner. + # This is not recommended. + if not az_linear: + az_spline_vals = np.array(az_spline_vals) + az_spline_vals = np.insert(az_spline_vals, 0, 0) + az_int_spline_vals = np.cumsum(az_spline_vals) * 30.0 + az_spline = interpolate.splrep(az_spline_points, az_int_spline_vals, s=0) + flux_weights.append( + interpolate.splev(true_azimuth, az_spline, der=1) + / np.power(true_energy, enpow) + ) + # Treat the azimuthal dimension with a linear interpolation. + # This is the best treatment. + else: + # Make the azimuthal spline cyclic + az_spline_vals.append(az_spline_vals[0]) + # Account for the energy power that was applied in the first splines + az_spline_vals /= np.power(true_energy, enpow) + az_spline = interpolate.splrep(az_spline_points, az_spline_vals, k=1) + if true_azimuth < 15.0: + true_azimuth += 360.0 + flux_weights.append(interpolate.splev(true_azimuth, az_spline, der=0)) + flux_weights = np.array(flux_weights) + return flux_weights
+ + + +def main(): + """This is a slightly longer example than that given in the docstring of + the calculate_flux_weights function. This will make a quick plot of the + flux at 5.0 GeV and 20.0 GeV across all of cos(zenith) for NuMu just to + make sure everything looks sensible. + + """ + from matplotlib import pyplot as plt + + spline_dict = load_2d_table("flux/honda-2015-spl-solmax-aa.d") + czs = np.linspace(-1, 1, 81) + low_ens = 5.0 * np.ones_like(czs) + high_ens = 20.0 * np.ones_like(czs) + + low_en_flux_weights = calculate_2d_flux_weights(low_ens, czs, spline_dict["numu"]) + + high_en_flux_weights = calculate_2d_flux_weights(high_ens, czs, spline_dict["numu"]) + + plt.plot(czs, low_en_flux_weights) + plt.xlabel("cos(zenith)") + plt.ylabel("NuMu Flux at 5.0 GeV") + plt.savefig("/tmp/fluxweightstest5GeV.pdf") + plt.close() + + plt.plot(czs, high_en_flux_weights) + plt.xlabel("cos(zenith)") + plt.ylabel("NuMu Flux at 20.0 GeV") + plt.savefig("/tmp/fluxweightstest20GeV.pdf") + plt.close() + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/format.html b/_modules/pisa/utils/format.html new file mode 100644 index 000000000..f7da0b63c --- /dev/null +++ b/_modules/pisa/utils/format.html @@ -0,0 +1,1828 @@ + + + + + + pisa.utils.format — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.format

+# -*- coding: utf-8 -*-
+
+"""
+Utilities for interpreting and returning formatted strings.
+"""
+
+
+from __future__ import absolute_import, division, print_function
+
+from collections.abc import Iterable, Sequence
+from collections import OrderedDict
+import decimal
+from numbers import Integral, Number
+import os
+import re
+import time
+
+import numpy as np
+import uncertainties
+
+from pisa import FTYPE, ureg
+from pisa.utils.flavInt import NuFlavIntGroup
+from pisa.utils.log import Levels, logging, set_verbosity
+
+
+__all__ = [
+    'WHITESPACE_RE',
+    'NUMBER_RESTR',
+    'NUMBER_RE',
+    'HRGROUP_RESTR',
+    'HRGROUP_RE',
+    'IGNORE_CHARS_RE',
+    'TEX_BACKSLASH_CHARS',
+    'TEX_SPECIAL_CHARS_MAPPING',
+    'SI_PREFIX_TO_ORDER_OF_MAG',
+    'ORDER_OF_MAG_TO_SI_PREFIX',
+    'BIN_PREFIX_TO_POWER_OF_1024',
+    'POWER_OF_1024_TO_BIN_PREFIX',
+    'split',
+    'arg_str_seq_none',
+    'arg_to_tuple',
+    'hr_range_formatter',
+    'test_hr_range_formatter',
+    'list2hrlist',
+    'test_list2hrlist',
+    'hrlist2list',
+    'hrlol2lol',
+    'hrbool2bool',
+    'engfmt',
+    'text2tex',
+    'tex_join',
+    'tex_dollars',
+    'default_map_tex',
+    'is_tex',
+    'int2hex',
+    'hash2hex',
+    'strip_outer_dollars',
+    'strip_outer_parens',
+    'make_valid_python_name',
+    'sep_three_tens',
+    'format_num',
+    'test_format_num',
+    'timediff',
+    'test_timediff',
+    'timestamp',
+    'test_timestamp',
+]
+
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+WHITESPACE_RE = re.compile(r'\s')
+NUMBER_RESTR = r'((?:-|\+){0,1}[0-9.]+(?:e(?:-|\+)[0-9.]+){0,1})'
+"""RE str for matching signed, unsigned, and sci.-not. ("1e10") numbers."""
+
+NUMBER_RE = re.compile(NUMBER_RESTR, re.IGNORECASE)
+"""Regex for matching signed, unsigned, and sci.-not. ("1e10") numbers."""
+
+# Optional range, e.g., --10 (which means "to negative 10"); in my
+# interpretation, the "to" number should be *INCLUDED* in the list
+# If there's a range, optional stepsize, e.g., --10 (which means
+# "to negative 10")
+HRGROUP_RESTR = (
+    NUMBER_RESTR
+    + r'(?:-' + NUMBER_RESTR
+    + r'(?:\:' + NUMBER_RESTR + r'){0,1}'
+    + r'){0,1}'
+)
+HRGROUP_RE = re.compile(HRGROUP_RESTR, re.IGNORECASE)
+
+# Characters to ignore are anything EXCEPT the characters we use
+# (the caret ^ inverts the set in the character class)
+IGNORE_CHARS_RE = re.compile(r'[^0-9e:.,;+-]', re.IGNORECASE)
+
+TEX_BACKSLASH_CHARS = '%$#_{}'
+TEX_SPECIAL_CHARS_MAPPING = {
+    '~': r'\textasciitilde',
+    '^': r'\textasciicircum',
+    ' ': r'\;',
+    'sin': r'\sin',
+    'cos': r'\cos',
+    'tan': r'\tan',
+    #'sqrt': r'\sqrt{\,}'
+    #'sqrt': r'\surd'
+}
+
+ORDER_OF_MAG_TO_SI_PREFIX = OrderedDict([
+    (-24, 'y'),
+    (-21, 'z'),
+    (-18, 'a'),
+    (-15, 'f'),
+    (-6, 'μ'),
+    (-3, 'm'),
+    (-9, 'n'),
+    (-12, 'p'),
+    (0, ''),
+    (3, 'k'),
+    (6, 'M'),
+    (9, 'G'),
+    (12, 'T'),
+    (15, 'P'),
+    (18, 'E'),
+    (21, 'Z'),
+    (24, 'Y')
+])
+"""Mapping of powers-of-10 to SI prefixes (orders-of-magnitude)"""
+
+SI_PREFIX_TO_ORDER_OF_MAG = OrderedDict()
+"""Mapping of SI prefixes to powers-of-10"""
+for K, V in ORDER_OF_MAG_TO_SI_PREFIX.items():
+    SI_PREFIX_TO_ORDER_OF_MAG[V] = K
+# Allow "u" to map to -6 (micro) as well
+SI_PREFIX_TO_ORDER_OF_MAG['u'] = -6
+
+POWER_OF_1024_TO_BIN_PREFIX = OrderedDict([
+    (0, ''),
+    (1, 'Ki'),
+    (2, 'Mi'),
+    (3, 'Gi'),
+    (4, 'Ti'),
+    (5, 'Pi'),
+    (6, 'Ei'),
+    (7, 'Zi'),
+    (8, 'Yi')
+])
+"""Mapping from powers-of-1024 to binary prefixes"""
+
+BIN_PREFIX_TO_POWER_OF_1024 = OrderedDict()
+"""Mapping from binary prefixes to powerorders-of-1024"""
+for K, V in POWER_OF_1024_TO_BIN_PREFIX.items():
+    BIN_PREFIX_TO_POWER_OF_1024[V] = K
+
+
+
+[docs] +def split(string, sep=',', force_case=None, parse_func=None): + """Parse a string containing a separated list. + + * Before splitting the list, the string has extraneous whitespace removed + from either end. + * The strings that result after the split can have their case forced or be + left alone. + * Whitespace surrounding (but not falling between non-whitespace) in each + resulting string is removed. + * After all of the above, the value can be parsed further by a + user-supplied `parse_func`. + + Note that repeating a separator without intervening values yields + empty-string values. + + + Parameters + ---------- + string : string + The string to be split + + sep : string + Separator to look for + + force_case : None, 'lower', or 'upper' + Whether to force the case of the resulting items: None does not change + the case, while 'lower' or 'upper' change the case. + + parse_func : None or callable + If a callable is supplied, each item in the list, after the basic + parsing, is processed by `parse_func`. + + Returns + ------- + lst : list of objects + The types of the items in the list depend upon `parse_func` if it is + supplied; otherwise, all items are strings. + + Examples + -------- + >>> print(split(' One, TWO, three ', sep=',', force_case='lower')) + ['one', 'two', 'three'] + + >>> print(split('One:TWO:three', sep=':')) + ['One', 'TWO', 'three'] + + >>> print(split('one two three', sep=' ')) + ['one', '', 'two', '' , 'three'] + + >>> print(split('1 2 3', sep=' ', parse_func=int)) + [1, 2, 3] + + >>> from ast import literal_eval + >>> print(split('True; False; None; (1, 2, 3)', sep=',', + >>> parse_func=literal_eval)) + [True, False, None, (1, 2, 3)] + + """ + funcs = [] + if force_case == 'lower': + funcs.append(str.lower) + elif force_case == 'upper': + funcs.append(str.upper) + + if parse_func is not None: + if not callable(parse_func): + raise TypeError('`parse_func` must be callable; got %s instead.' + % type(parse_func)) + funcs.append(parse_func) + + if not funcs: + aggfunc = lambda x: x + elif len(funcs) == 1: + aggfunc = funcs[0] + elif len(funcs) == 2: + aggfunc = lambda x: funcs[1](funcs[0](x)) + + return [aggfunc(x.strip()) for x in str.split(str(string).strip(), sep)]
+ + +
+[docs] +def arg_str_seq_none(inputs, name): + """Simple input handler. + Parameters + ---------- + inputs : None, string, or iterable of strings + Input value(s) provided by caller + name : string + Name of input, used for producing a meaningful error message + Returns + ------- + inputs : None, or list of strings + Raises + ------ + TypeError if unrecognized type + """ + if isinstance(inputs, str): + inputs = [inputs] + elif isinstance(inputs, (Iterable, Sequence)): + inputs = list(inputs) + elif inputs is None: + pass + else: + raise TypeError('Input %s: Unhandled type %s' % (name, type(inputs))) + return inputs
+ + +
+[docs] +def arg_to_tuple(arg): + """Convert `arg` to a tuple: None becomes an empty tuple, an isolated + string becomes a tuple containing that string, and any iterable or sequence + is simply converted into a tuple. + + Parameters + ---------- + arg : str, sequence of str, iterable of str, or None + + Returns + ------- + arg_tup : tuple of str + + """ + if arg is None: + arg = tuple() + elif isinstance(arg, str): + arg = (arg,) + elif isinstance(arg, (Iterable, Sequence)): + arg = tuple(arg) + else: + raise TypeError('Unhandled type {}, arg={}'.format(type(arg), arg)) + return arg
+ + +# TODO: allow for scientific notation input to hr*2list, etc. + +
+[docs] +def hr_range_formatter(start, end, step): + """Format a range (sequence) in a simple and human-readable format by + specifying the range's starting number, ending number (inclusive), and step + size. + + Parameters + ---------- + start, end, step : numeric + + Notes + ----- + If `start` and `end` are integers and `step` is 1, step size is omitted. + + The format does NOT follow Python's slicing syntax, in part because the + interpretation is meant to differ; e.g., + '0-10:2' includes both 0 and 10 with step size of 2 + whereas + 0:10:2 (slicing syntax) excludes 10 + + Numbers are converted to integers if they are equivalent for more compact + display. + + Examples + -------- + >>> hr_range_formatter(start=0, end=10, step=1) + '0-10' + >>> hr_range_formatter(start=0, end=10, step=2) + '0-10:2' + >>> hr_range_formatter(start=0, end=3, step=8) + '0-3:8' + >>> hr_range_formatter(start=0.1, end=3.1, step=1.0) + '0.1-3.1:1' + + """ + if int(start) == start: + start = int(start) + if int(end) == end: + end = int(end) + if int(step) == step: + step = int(step) + if int(start) == start and int(end) == end and step == 1: + return '{}-{}'.format(start, end) + return '{}-{}:{}'.format(start, end, step)
+ + + +
+[docs] +def test_hr_range_formatter(): + """Unit tests for hr_range_formatter""" + logging.debug(str((hr_range_formatter(start=0, end=10, step=1)))) + logging.debug(str((hr_range_formatter(start=0, end=10, step=2)))) + logging.debug(str((hr_range_formatter(start=0, end=3, step=8)))) + logging.debug(str((hr_range_formatter(start=0.1, end=3.1, step=1.0)))) + logging.info('<< PASS : test_hr_range_formatter >>')
+ + + +
+[docs] +def list2hrlist(lst): + """Convert a list of numbers to a compact and human-readable string. + + Parameters + ---------- + lst : sequence + + Notes + ----- + Adapted to make scientific notation work correctly from [1]. + + References + ---------- + [1] http://stackoverflow.com/questions/9847601 user Scott B's adaptation to + Python 2 of Rik Poggi's answer to his question + + Examples + -------- + >>> list2hrlist([0, 1]) + '0,1' + >>> list2hrlist([0, 3]) + '0,3' + >>> list2hrlist([0, 1, 2]) + '0-2' + >>> utils.list2hrlist([0.1, 1.1, 2.1, 3.1]) + '0.1-3.1:1' + >>> list2hrlist([0, 1, 2, 4, 5, 6, 20]) + '0-2,4-6,20' + + """ + if isinstance(lst, Number): + lst = [lst] + lst = sorted(lst) + rtol = np.finfo(FTYPE).resolution + n = len(lst) + result = [] + scan = 0 + while n - scan > 2: + step = lst[scan + 1] - lst[scan] + if not np.isclose(lst[scan + 2] - lst[scan + 1], step, rtol=rtol): + result.append(str(lst[scan])) + scan += 1 + continue + for j in range(scan+2, n-1): + if not np.isclose(lst[j+1] - lst[j], step, rtol=rtol): + result.append(hr_range_formatter(lst[scan], lst[j], step)) + scan = j+1 + break + else: + result.append(hr_range_formatter(lst[scan], lst[-1], step)) + return ','.join(result) + if n - scan == 1: + result.append(str(lst[scan])) + elif n - scan == 2: + result.append(','.join(map(str, lst[scan:]))) + + return ','.join(result)
+ + + +
+[docs] +def test_list2hrlist(): + """Unit tests for list2hrlist""" + logging.debug(str((list2hrlist([0, 1])))) + logging.debug(str((list2hrlist([0, 1, 2])))) + logging.debug(str((list2hrlist([0.1, 1.1, 2.1, 3.1])))) + logging.info('<< PASS : test_list2hrlist >>')
+ + + +def _hrgroup2list(hrgroup): + def isint(num): + """Test whether a number is *functionally* an integer""" + try: + return int(num) == FTYPE(num) + except ValueError: + return False + + def num_to_float_or_int(num): + """Return int if number is effectively int, otherwise return float""" + try: + if isint(num): + return int(num) + except (ValueError, TypeError): + pass + return FTYPE(num) + + # Strip all whitespace, brackets, parens, and other ignored characters from + # the group string + hrgroup = IGNORE_CHARS_RE.sub('', hrgroup) + if (hrgroup is None) or (hrgroup == ''): + return [] + num_str = HRGROUP_RE.match(hrgroup).groups() + range_start = num_to_float_or_int(num_str[0]) + + # If no range is specified, just return the number + if num_str[1] is None: + return [range_start] + + range_stop = num_to_float_or_int(num_str[1]) + if num_str[2] is None: + step_size = 1 if range_stop >= range_start else -1 + else: + step_size = num_to_float_or_int(num_str[2]) + all_ints = isint(range_start) and isint(step_size) + + # Make an *INCLUSIVE* list (as best we can considering floating point mumbo + # jumbo) + n_steps = np.clip( + np.floor(np.around( + (range_stop - range_start)/step_size, + decimals=12, + )), + a_min=0, a_max=np.inf + ) + lst = np.linspace(range_start, range_start + n_steps*step_size, n_steps+1) + if all_ints: + lst = lst.astype(int) + + return lst.tolist() + + +
+[docs] +def hrlist2list(hrlst): + """Convert human-readable string specifying a list of numbers to a Python + list of numbers. + + Parameters + ---------- + hrlist : string + + Returns + ------- + lst : list of numbers + + """ + groups = re.split(r'[,; _]+', WHITESPACE_RE.sub('', hrlst)) + lst = [] + if not groups: + return lst + for group in groups: + lst.extend(_hrgroup2list(group)) + return lst
+ + + +
+[docs] +def hrlol2lol(hrlol): + """Convert a human-readable string specifying a list-of-lists of numbers to + a Python list-of-lists of numbers. + + Parameters + ---------- + hrlol : string + Human-readable list-of-lists-of-numbers string. Each list specification + is separated by a semicolon, and whitespace is ignored. Refer to + `hrlist2list` for list specification. + + Returns + ------- + lol : list-of-lists of numbers + + Examples + -------- + A single number evaluates to a list with a list with a single number. + + >>> hrlol2lol("1") + [[1]] + + A sequence of numbers or ranges can be specified separated by commas. + + >>> hrlol2lol("1, 3.2, 19.8") + [[1, 3.2, 19.8]] + + A range can be specified with a dash; default is a step size of 1 (or -1 if + the end of the range is less than the start of the range); note that the + endpoint is included, unlike slicing in Python. + + >>> hrlol2lol("1-3") + [[1, 2, 3]] + + The range can go from or to a negative number, and can go in a negative + direction. + + >>> hrlol2lol("-1 - -5") + [[-1, -3, -5]] + + Multiple lists are separated by semicolons, and parentheses and brackets + can be used to make it easier to understand the string. + + >>> hrlol2lol("1 ; 8 ; [(-10 - -8:2), 1]") + [[1], [8], [-10, -8, 1]] + + Finally, all of the above can be combined. + + >>> hrlol2lol("1.-3.; 9.5-10.6:0.5,3--1:-1; 12.5-13:0.8") + [[1, 2, 3], [9.5, 10.0, 10.5, 3, 2, 1, 0, -1], [12.5]] + + """ + supergroups = re.split(r'[;]+', hrlol) + return [hrlist2list(group) for group in supergroups]
+ + + +
+[docs] +def hrbool2bool(s): + """Convert a string that a user might input to indicate a boolean value of + either True or False and convert to the appropriate Python bool. + + * Note first that the case used in the string is ignored + * 't', 'true', '1', 'yes', and 'one' all map to True + * 'f', 'false', '0', 'no', and 'zero' all map to False + + Parameters + ---------- + s : string + + Returns + ------- + b : bool + + """ + s = str(s).strip() + if s.lower() in ['t', 'true', '1', 'yes', 'one']: + return True + if s.lower() in ['f', 'false', '0', 'no', 'zero']: + return False + raise ValueError('Could not parse input "%s" to bool.' % s)
+ + + +
+[docs] +def engfmt(n, sigfigs=3, decimals=None, sign_always=False): + """Format number as string in engineering format (10^(multiples-of-three)), + including the most common metric prefixes (from atto to Exa). + + Parameters + ---------- + n : scalar + Number to be formatted + sigfigs : int >= 0 + Number of significant figures to limit the result to; default=3. + decimals : int or None + Number of decimals to display (zeros filled out as necessary). If None, + `decimals` is automatically determined by the magnitude of the + significand and the specified `sigfigs`. + sign_always : bool + Prefix the number with "+" sign if number is positive; otherwise, + only negative numbers are prefixed with a sign ("-") + + """ + if isinstance(n, ureg.Quantity): + units = n.units + n = n.magnitude + else: + units = ureg.dimensionless + + # Logs don't like negative numbers... + sign = np.sign(n) + n *= sign + + mag = int(np.floor(np.log10(n))) + pfx_mag = int(np.floor(np.log10(n)/3.0)*3) + + if decimals is None: + decimals = sigfigs-1 - (mag-pfx_mag) + decimals = int(np.clip(decimals, a_min=0, a_max=np.inf)) + + round_to = decimals + if sigfigs is not None: + round_to = sigfigs-1 - (mag-pfx_mag) + + scaled_rounded = np.round(n/10.0**pfx_mag, round_to) + + sign_str = '' + if sign_always and sign > 0: + sign_str = '+' + num_str = sign_str + format(sign*scaled_rounded, '.'+str(decimals)+'f') + + # Very large or small quantities have their order of magnitude displayed + # by printing the exponent rather than showing a prefix; due to my + # inability to strip off prefix in Pint quantities (and attach my own + # prefix), just use the "e" notation. + if pfx_mag not in ORDER_OF_MAG_TO_SI_PREFIX or not units.dimensionless: + if pfx_mag == 0: + return str.strip('{0:s} {1:~} '.format(num_str, units)) + return str.strip('{0:s}e{1:d} {2:~} '.format(num_str, pfx_mag, units)) + + # Dimensionless quantities are treated separately since Pint apparently + # can't handle prefixed-dimensionless (e.g., simply "1 k", "2.2 M", etc., + # with no units attached). + #if units.dimensionless: + return '{0:s} {1:s}'.format(num_str, ORDER_OF_MAG_TO_SI_PREFIX[pfx_mag])
+ + + +def append_results(results_dict, result_dict): + for key, val in result_dict.items(): + if key in results_dict: + results_dict[key].append(val) + else: + results_dict[key] = [val] + + +def ravel_results(results): + for key, val in results.items(): + if hasattr(val[0], 'm'): + results[key] = np.array([v.m for v in val]) * val[0].u + +# TODO: mathrm vs. rm? +
+[docs] +def text2tex(txt): + """Convert common characters so they show up the same as TeX""" + if txt is None: + return '' + + if is_tex(txt): + return strip_outer_dollars(txt) + + nfig = NuFlavIntGroup(txt) + if nfig: + return nfig.tex + + for c in TEX_BACKSLASH_CHARS: + txt = txt.replace(c, r'\%s'%c) + + for c, v in TEX_SPECIAL_CHARS_MAPPING.items(): + txt = txt.replace(c, '{%s}'%v) + + # A single character is taken to be a variable name, and so do not make + # roman, just wrap in braces (to avoid interference with other characters) + # and return + if len(txt) == 1: + return '%s' % txt + + return r'{\rm %s}' % txt
+ + + +
+[docs] +def tex_join(sep, *args): + """Join TeX-formatted strings together into one, each separated by `sep`. + Also, this strips surrounding '$' from each string before joining.""" + strs = [strip_outer_dollars(text2tex(a)) + for a in args if a is not None and a != ''] + if not strs: + return '' + return str.join(sep, strs)
+ + + +
+[docs] +def tex_dollars(s): + stripped = strip_outer_dollars(s) + out_lines = [] + for line in stripped.split('\n'): + stripped_line = strip_outer_dollars(line) + if stripped_line == '': + out_lines.append('') + else: + out_lines.append('$%s$' % stripped_line) + return '\n'.join(out_lines)
+ + + +
+[docs] +def is_tex(s): + if s is None: + return False + for c in TEX_BACKSLASH_CHARS: + if '\\'+c in s: + return True + for seq in TEX_SPECIAL_CHARS_MAPPING.values(): + if seq in s: + return True + for seq in [r'\rm', r'\mathrm', r'\theta', r'\phi']: + if seq in s: + return True + if strip_outer_dollars(s) != s: + return True + return False
+ + + +
+[docs] +def default_map_tex(map): + if map.tex is None or map.tex == '': + return r'{\rm %s}' % text2tex(map.name) + return strip_outer_dollars(map.tex)
+ + + +
+[docs] +def int2hex(i, bits, signed): + """Convert a signed or unsigned integer `bits` long to hexadecimal + representation. As many hex characters are returned to fully specify any + number `bits` in length regardless of the value of `i`. + + Parameters + ---------- + i : int + The integer to be converted. Signed integers have a range of + -2**(bits-1) to 2**(bits-1)-1), while unsigned integers have a range of + 0 to 2**(bits-1). + + bits : int + Number of bits long the representation is + + signed : bool + Whether the number is a signed integer; this is dependent upon the + representation used for numbers, and _not_ whether the value `i` is + positive or negative. + + Returns + ------- + h : string of length ceil(bits/4.0) since it takes this many hex characters + to represent a number `bits` long. + + """ + if signed: + i = 2**63 + i + assert i >= 0 + h = hex(i)[2:].replace('L', '') + return h.rjust(int(np.ceil(bits/4.0)), '0')
+ + + +
+[docs] +def hash2hex(hash, bits=64): + """Convert a hash value to its string hexadecimal representation. + + Parameters + ---------- + hash : integer or string + bits : integer > 0 + + Returns + ------- + hash : string + + """ + if isinstance(hash, str): + assert len(hash) == int(np.ceil(bits/4.0)) + hex_hash = hash + elif isinstance(hash, int): + hex_hash = int2hex(hash, bits=bits, signed=True) + else: + raise TypeError('Unhandled `hash` type %s' %type(hash)) + return hex_hash
+ + + +
+[docs] +def strip_outer_dollars(value): + """Strip surrounding dollars signs from TeX string, ignoring leading and + trailing whitespace""" + if value is None: + return '{}' + value = value.strip() + m = re.match(r'^\$(.*)\$$', value) + if m is not None: + value = m.groups()[0] + return value
+ + + +
+[docs] +def strip_outer_parens(value): + """Strip parentheses surrounding a string, ignoring leading and trailing + whitespace""" + if value is None: + return '' + value = value.strip() + m = re.match(r'^\{\((.*)\)\}$', value) + if m is not None: + value = m.groups()[0] + m = re.match(r'^\((.*)\)$', value) + if m is not None: + value = m.groups()[0] + return value
+ + + +# TODO: this is relatively slow (and is called in constructors that are used +# frequently, e.g. OneDimBinning, MultiDimBinning); can we speed it up any? +RE_INVALID_CHARS = re.compile('[^0-9a-zA-Z_]') +RE_LEADING_INVALID = re.compile('^[^a-zA-Z_]+') +
+[docs] +def make_valid_python_name(name): + """Make a name a valid Python identifier. + + From user Triptych at http://stackoverflow.com/questions/3303312 + + """ + # Remove invalid characters + name = RE_INVALID_CHARS.sub('', name) + # Remove leading characters until we find a letter or underscore + name = RE_LEADING_INVALID.sub('', name) + return name
+ + + +
+[docs] +def sep_three_tens(strval, direction, sep=None): + """Insert `sep` char into sequence of chars `strval`. + + Parameters + ---------- + strval : sequence of chars or string + Sequence of chars into which to insert the separator + + direction : string, one of {'left', 'right'} + Use 'left' for left of the decimal, and 'right' for right of the + decimal + + sep : None or char + Separator to insert + + Returns + ------- + formatted : list of chars + + """ + if not sep: + return strval + + direction = direction.strip().lower() + assert direction in ('left', 'right'), direction + + formatted = [] + if direction == 'left': + indices = tuple(range(len(strval)-1, -1, -1)) + edge_indices = (indices[0], indices[-1]) + delta = len(strval)-1 + for c_num in indices: + formatted = [strval[c_num]] + formatted + if (((delta-c_num)+1) % 3 == 0) and c_num not in edge_indices: + formatted = [sep] + formatted + return formatted + + indices = tuple(range(len(strval))) + edge_indices = (indices[0], indices[-1]) + for c_num in indices: + formatted = formatted + [strval[c_num]] + if ((c_num+1) % 3 == 0) and (c_num not in edge_indices): + formatted = formatted + [sep] + + return formatted
+ + + +
+[docs] +def format_num( + value, + sigfigs=None, + precision=None, + fmt=None, + sci_thresh=(6, -4), + exponent=None, + inf_thresh=np.infty, + trailing_zeros=False, + always_show_sign=False, + decstr='.', + thousands_sep=None, + thousandths_sep=None, + left_delimiter=None, + right_delimiter=None, + expprefix=None, + exppostfix=None, + nanstr='nan', + infstr='inf', +): + r"""Fine-grained control over formatting a number as a string. + + + Parameters + ---------- + value : numeric + The number to be formatted. + + sigfigs : int > 0, optional + Use up to this many significant figures for displaying a number. You + can use either `sigfigs` or `precision`, but not both. If neither are + specified, default is to set `sigfigs` to 8. See also `trailing_zeros`. + + precision : float, optional + Round `value` to a precision the same as the order of magnitude of + `precision`. You can use either `precision` or `sigfigs`, but not both. + If neither is specified, default is to set `sigfigs` to 8. See also + `trailing_zeros`. + + fmt : None or one of {'sci', 'eng', 'sipre', 'binpre', 'full'}, optional + Force a particular format to be used:: + * None allows the `value` and what is passed for `sci_thresh` and + `exponent` to decide whether or not to use scientific notation + * 'sci' forces scientific notation + * 'eng' uses the engineering convention of powers divisible by 3 + (10e6, 100e-9, etc.) + * 'sipre' uses powers divisible by 3 but uses SI prefixes (e.g. k, + M, G, etc.) instead of displaying the exponent + * 'binpre' uses powers of 1024 and uses IEC prefixes (e.g. Ki, Mi, + Gi, etc.) instead displaying the exponent + * 'full' forces printing all digits left and/or right of the + decimal to display the number (no exponent notation or SI/binary + prefix will be used) + Note that the display of NaN and +/-inf are unaffected by + `fmt`. + + exponent : None, integer, or string, optional + Force the number to be scaled with respect to this exponent. If a + string prefix is passed and `fmt` is None, then the SI prefix + or binary prefix will be used for the number. E.g., ``exponent=3`` + would cause the number 1 to be expressed as ``'0.001e3'`, while + ``exponent='k'`` would cause it to be displayed as ``'1 m'``. Both 'μ' + and 'u' are accepted to mean "micro". A non-``None`` value for + `exponent` forces some form of scientific/engineering notation, so + `fmt` cannot be ``'full'`` in this case. Finally, if + `fmt` is ``'binpre'`` then `exponent` is applied to 1024. + I.e., 1 maps to kibi (Ki), 2 maps to mebi (Mi), etc. + + sci_thresh : sequence of 2 integers + When to switch to scientific notation. The first integer is the order + of magnitude of `value` at or above which scientific notation will be + used. The second integer indicates the order of magnitude at or below + which the most significant digit falls for scientific notation to be + used. E.g., ``sci_thresh=(3, -3)`` means that numbers in the + ones-of-thousands or greater OR numbers in the ones-of-thousandths or + less will be displayed using scientific notation. Note that + `fmt`, if not None, overrides this behavior. Default is + (10,-5). + + inf_thresh : numeric, optional + Numbers whose magnitude is equal to or greater than this threhshold are + considered infinite and therefore displayed using `infstr` (possibly + including a sign, as appropriate). Default is np.inf. + + trailing_zeros : bool, optional + Whether to display all significant figures specified by `sigfigs`, even + if this results in trailing zeros. Default is False. + + always_show_sign : bool, optional + Always show a sign, whether number is positive or negative, and whether + exponent (if present) is positive or negative. Default is False. + + decstr : string, optional + Separator to use for the decimal point. E.g. ``decstr='.'`` or + ``decstr=','`` for mthe most common cases, but this can also be used in + TeX tables for alignment on decimal points via ``decstr='&.&'``. + Default is '.'. + + thousands_sep : None or string, optional + Separator to use between thousands, e.g. ``thousands_sep=','`` to give + results like ``'1,000,000'``, or ```thousands_sep=r'\,'`` for TeX + formatting with small spaces between thousands. Default is None. + + thousandths_sep : None or string, optional + Separator to use between thousandthss. Default is None. + + left_delimiter, right_delimiter : None or string, optional + Strings to delimit the left and right sides of the resulting string. + E.g. ``left_delimiter='${'`` and ``right_delimiter='}$'`` could be used + to delimit TeX-formatted strings, such that a number is displayed, + e.g., as ``r'${1\times10^3}$'``. Defaults are None for both. + + expprefix, exppostfix : None or string, optional + E.g. use `expprefix='e'` for simple "e" scientific notation ("1e3"), + or use `expprefix=r'\times10^{'` and `exppostfix=r'}' for + TeX-formatted scientific notation. Use a space (or tex equivalent) for + binary and SI prefixes. If scientific notation is to be used, + `expprefix` defaults to 'e'. If either SI or binary prefixes are to be + used, `expprefix` defaults to ' ' (space). In any case, `exppostfix` + defaults to None. + + nanstr : string, optional + Not-a-number (NaN) values will be displayed using this string. Default + is 'nan' (following the Numpy convention) + + infstr : string, optional + Infinite values will be displayed using this string (note that the sign + is prepended, as appropriate). Default is 'inf' (following the Numpy + convention). + + + Returns + ------- + formatted : string + + """ + with decimal.localcontext() as context: + # Ensure rounding behavior is same as that of Numpy + context.rounding = decimal.ROUND_HALF_EVEN + # Lots of comp precision to avoid floating point <--> decimal issues + context.prec = 72 + d_10 = decimal.Decimal('10') + d_1024 = decimal.Decimal('1024') + + if sigfigs is None: + if precision is None: + sigfigs = 8 + else: + precision = decimal.Decimal(precision) + order_of_precision = precision.adjusted() + else: + if precision is not None: + raise ValueError('You cannot specify both `sigfigs` and' + ' `precision`') + if not isinstance(sigfigs, Integral): + assert float(sigfigs) == int(sigfigs), \ + '`sigfigs`=%s not an int' % sigfigs + sigfigs = int(sigfigs) + assert sigfigs > 0, '`sigfigs`=%s is not > 0' % sigfigs + + if sci_thresh[0] < sci_thresh[1]: + raise ValueError( + '(`sci_thresh[0]`=%s) must be >= (`sci_thresh[1]`=%s)' + % sci_thresh + ) + assert all(isinstance(s, Integral) for s in sci_thresh), str(sci_thresh) + + if isinstance(fmt, str): + fmt = fmt.strip().lower() + assert fmt is None or fmt in ('sci', 'eng', 'sipre', 'binpre', 'full') + if fmt == 'full': + assert exponent is None + + if exponent is not None: + if fmt in ('eng', 'sipre'): + if (exponent not in SI_PREFIX_TO_ORDER_OF_MAG + and exponent not in ORDER_OF_MAG_TO_SI_PREFIX): + raise ValueError( + 'For `fmt`="{}", `exponent` is {}, but must either be' + ' an SI prefix {} or a power of 10 corresponding to' + ' these {}.'.format(fmt, + exponent, + SI_PREFIX_TO_ORDER_OF_MAG.keys(), + ORDER_OF_MAG_TO_SI_PREFIX.keys()) + ) + elif fmt == 'binpre': + if (exponent not in BIN_PREFIX_TO_POWER_OF_1024 + and exponent not in POWER_OF_1024_TO_BIN_PREFIX): + raise ValueError( + 'For `fmt`="{}", `exponent` is {}, but must either be' + ' an IEC binary prefix {} or a power of 1024' + ' corresponding to these {}.'.format( + fmt, + exponent, + BIN_PREFIX_TO_POWER_OF_1024.keys(), + POWER_OF_1024_TO_BIN_PREFIX.keys() + ) + ) + if (not isinstance(exponent, str) and not + isinstance(exponent, Integral)): + assert float(exponent) == int(exponent) + exponent = int(exponent) + + # TODO: include uncertainties and/or units in final formatted string + # TODO: scale out SI prefix if `value` is a Pint Quantity + + # Strip off units, if present + units = None + quantity_info = None + if isinstance(value, ureg.Quantity): + units = value.units if value.units != ureg.dimensionless else None + quantity_info = value.as_tuple() + value = value.magnitude + + # Strip off uncertainty, if present + stddev = None + if isinstance(value, uncertainties.UFloat): + stddev = value.std_dev + value = value.nominal_value + + # In case `value` is a singleton array + if isinstance(value, np.ndarray): + value = value.item() + + # Fill in empty strings where None might be passed in to mean the same + thousands_sep = '' if thousands_sep is None else thousands_sep + thousandths_sep = '' if thousandths_sep is None else thousandths_sep + left_delimiter = '' if left_delimiter is None else left_delimiter + right_delimiter = '' if right_delimiter is None else right_delimiter + exppostfix = '' if exppostfix is None else exppostfix + # NOTE: expprefix defaults depend on the display mode, so are set later + + if np.isnan(value): + return left_delimiter + nanstr + right_delimiter + + if np.isneginf(value) or value <= -inf_thresh: + return left_delimiter + '-' + infstr + right_delimiter + + # NOTE: ``isinf`` check must come _after_ ``neginf`` check since + # ``isinf`` returns ``True`` for both -inf and +inf + if np.isinf(value) or value >= inf_thresh: + if always_show_sign: + sign = '+' + else: + sign = '' + return left_delimiter + sign + infstr + right_delimiter + + if isinstance(value, Integral): + value = decimal.Decimal(value) + else: + value = decimal.Decimal.from_float(float(value)) + + order_of_mag = value.adjusted() + # Get the sign from the full precision `value`, before rounding + sign = '' + if value < 0: + sign = '-' + elif value > 0: + sign = '+' + + # If no value passed for `fmt`, infer the format from the + # exponent (if it's a binary or SI prefix) OR the order of magnitude of + # the number w.r.t. `sci_thresh`. + if fmt is None: + if isinstance(exponent, str): + if exponent in BIN_PREFIX_TO_POWER_OF_1024: + fmt = 'binpre' + elif exponent in SI_PREFIX_TO_ORDER_OF_MAG: + fmt = 'sipre' + else: + raise ValueError('`exponent`="%s" is not a valid SI or' + ' binary prefix' % exponent) + elif exponent is None: + if (order_of_mag >= sci_thresh[0] + or order_of_mag <= sci_thresh[1]): + fmt = 'sci' + else: + fmt = 'full' + else: + fmt = 'sci' + + # Define `exponent` where appropriate, and calculate `scaled_value` to + # account for the exponent, if there is one. + scale = 1 + if exponent is None: + if fmt == 'sci': + exponent = order_of_mag + scale = 1 / d_10**exponent + elif fmt in ('eng', 'sipre'): + exponent = (order_of_mag // 3) * 3 + scale = 1 / d_10**exponent + if fmt == 'sipre': + exponent = ORDER_OF_MAG_TO_SI_PREFIX[exponent] + elif fmt == 'binpre': + if value < 0: + raise ValueError('Binary prefix valid only for value >= 0') + elif value == 0: + exponent = 0 + scale = 1 + else: + exponent = value.ln() // d_1024.ln() + scale = 1 / d_1024**exponent + exponent = POWER_OF_1024_TO_BIN_PREFIX[exponent] + elif exponent in BIN_PREFIX_TO_POWER_OF_1024: + scale = 1 / d_1024**BIN_PREFIX_TO_POWER_OF_1024[exponent] + elif exponent in SI_PREFIX_TO_ORDER_OF_MAG: + scale = 1 / d_10**SI_PREFIX_TO_ORDER_OF_MAG[exponent] + else: + scale = 1 / d_10**exponent + + scaled_value = scale * value + + if sigfigs is not None: + leastsig_dig = scaled_value.adjusted() - (sigfigs - 1) + quantize_at = decimal.Decimal('1e%d' % leastsig_dig).normalize() + else: # only other case is that precision is specified + quantize_at = (d_10**order_of_precision * scale).normalize() + leastsig_dig = quantize_at.adjusted() + + rounded = scaled_value.quantize(quantize_at) + + # Eliminate trailing zeros in the Decimal representation + if not trailing_zeros: + rounded = rounded.normalize() + + dec_tup = rounded.as_tuple() + mantissa_digits = dec_tup.digits + decimal_position = dec_tup.exponent + + # Does the number underflow, making it effectively 0? + underflow = False + if sigfigs is not None: + if len(mantissa_digits) + decimal_position < -sigfigs: + underflow = True + decimal_position = -(sigfigs - 1) + mantissa_digits = (0,) + else: # `precision` is specified + if order_of_mag < order_of_precision: + underflow = True + mantissa_digits = (0,) + decimal_position = leastsig_dig + + n_digits = len(mantissa_digits) + chars = [str(d) for d in mantissa_digits] + if decimal_position > 0: + chars += ['0']*decimal_position + chars = sep_three_tens(chars, direction='left', sep=thousands_sep) + elif decimal_position < 0: + if abs(decimal_position) >= n_digits: + chars = ( + ['0', decstr] + + sep_three_tens( + ['0']*(-decimal_position - n_digits) + chars, + direction='right', sep=thousandths_sep + ) + ) + else: + chars = ( + sep_three_tens(chars[:decimal_position], direction='left', + sep=thousands_sep) + + [decstr] + + sep_three_tens(chars[decimal_position:], + direction='right', sep=thousandths_sep) + ) + + num_str = ''.join(chars) + + if always_show_sign or sign == '-' or underflow: + num_str = sign + num_str + + if exponent is not None: + if expprefix is None: + if fmt in ('sci', 'eng'): + expprefix = 'e' + elif fmt in ('sipre', 'binpre'): + expprefix = ' ' + else: + expprefix = '' + + if not isinstance(exponent, str): + if fmt == 'sipre': + exponent = ORDER_OF_MAG_TO_SI_PREFIX[exponent] + elif fmt == 'binpre': + exponent = POWER_OF_1024_TO_BIN_PREFIX[exponent] + + if isinstance(exponent, str): + num_str += expprefix + exponent + exppostfix + else: + if exponent < 0: + exp_sign = '' + elif always_show_sign: + exp_sign = '+' + else: + exp_sign = '' + num_str += expprefix + exp_sign + str(exponent) + exppostfix + + return left_delimiter + num_str + right_delimiter
+ + + +
+[docs] +def test_format_num(): + """Unit tests for the `format_num` function""" + # sci_thresh + v = format_num(100, sci_thresh=(3, -3)) + assert v == '100' + v = format_num(1000, sci_thresh=(3, -3)) + assert v == '1e3' + v = format_num(0.01, sci_thresh=(3, -3)) + assert v == '0.01' + v = format_num(0.001, sci_thresh=(3, -3)) + assert v == '1e-3' + + # trailing_zeros + v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=True) + assert v == '1.00010e-4', v + v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=False) + assert v == '1.0001e-4', v + v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=False, + sci_thresh=(7, -8)) + assert v == '0.00010001', v + v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=True, + sci_thresh=(7, -20)) + assert v == '0.000100010', v + + # sigfigs and trailing_zeros + v = format_num(1, sigfigs=5, exponent=None, trailing_zeros=True) + assert v == '1.0000', v + v = format_num(1, sigfigs=5, exponent=None, trailing_zeros=False) + assert v == '1', v + v = format_num(16, sigfigs=5, exponent=None, trailing_zeros=False) + assert v == '16', v + v = format_num(160000, sigfigs=5, exponent=None, trailing_zeros=False) + assert v == '160000', v + v = format_num(123456789, sigfigs=15, exponent=None, trailing_zeros=False, + sci_thresh=(20, -20)) + assert v == '123456789', v + v = format_num(1.6e6, sigfigs=5, exponent=None, trailing_zeros=False) + assert v == '1.6e6', v + + # precision + v = format_num(1.2345, precision=1e0, trailing_zeros=True) + assert v == '1', v + v = format_num(1.2345, precision=1e-1, trailing_zeros=True) + assert v == '1.2', v + + # exponent + v = format_num(1e6, sigfigs=5, exponent='k', trailing_zeros=False) + assert v == '1000 k', v + v = format_num(0.00134, sigfigs=5, exponent='m', trailing_zeros=False) + assert v == '1.34 m', v + v = format_num(1024, exponent='Ki') + assert v == '1 Ki', v + v = format_num(1024*1000, exponent='Ki') + assert v == '1000 Ki', v + v = format_num(1024**2, exponent='Mi') + assert v == '1 Mi', v + + # displaying zero + v = format_num(0, sigfigs=5, exponent=4, trailing_zeros=True) + assert v == '0.0000e4', v + v = format_num(0, sigfigs=5, exponent=4, trailing_zeros=False) + assert v == '0e4', v + v = format_num(0, sigfigs=5, exponent=None, trailing_zeros=True) + assert v == '0.0000', v + v = format_num(0, sigfigs=5, exponent=None, trailing_zeros=False) + assert v == '0' + v = format_num(0, sigfigs=5, fmt='sci') + assert v == '0e0' + v = format_num(0, sigfigs=5, fmt='eng') + assert v == '0e0' + v = format_num(0, sigfigs=5, fmt='sipre') + assert v == '0 ' + v = format_num(0, sigfigs=5, fmt='binpre') + assert v == '0 ' + v = format_num(0, sigfigs=5, fmt='full') + assert v == '0' + + # exponent + sigfigs or precision causes underflow + v = format_num(-0.00010001, sigfigs=6, exponent=4, trailing_zeros=True) + assert v == '-0.00000e4', v + v = format_num(0.00010001, sigfigs=6, exponent=4, trailing_zeros=True) + assert v == '+0.00000e4', v + v = format_num(-0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) + assert v == '-0.0000000e4', v + v = format_num(0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) + assert v == '+0.0000000e4', v + + # exponent + precision, check sigfigs and trailing zeros... + # zeros... + v = format_num(-0.00010001, precision=1e-3, exponent=4, + trailing_zeros=True) + assert v == '-0.0000000e4', v + v = format_num(0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) + assert v == '+0.0000000e4', v + # rounding at least sig digit + v = format_num(-0.00015001, precision=1e-4, exponent=4, trailing_zeros=True) + assert v == '-0.00000002e4', v + v = format_num(0.00015001, precision=1e-4, exponent=4, trailing_zeros=True) + assert v == '0.00000002e4', v + # trailing zeros + v = format_num(-0.015001, precision=1e-4, exponent=4, trailing_zeros=True) + assert v == '-0.00000150e4', v + v = format_num(0.015001, precision=1e-4, exponent=4, trailing_zeros=True) + assert v == '0.00000150e4', v + + # Test thousands_sep and thousandths_sep + v = format_num(1000.0001, sigfigs=10, trailing_zeros=True, + thousands_sep=',', thousandths_sep=' ') + assert v == '1,000.000 100', v + + # Test specials: +/-inf, nan + v = format_num(np.nan, sigfigs=10, trailing_zeros=True, + thousands_sep=',', thousandths_sep=' ') + assert v == 'nan', v + v = format_num(np.inf, infstr='INFINITY', always_show_sign=True) + assert v == '+INFINITY', v + v = format_num(-np.inf, infstr='INFINITY') + assert v == '-INFINITY', v + v = format_num(1000, inf_thresh=100) + assert v == 'inf', v + v = format_num(-1000, inf_thresh=100) + assert v == '-inf', v + + # eng and sipre with exponent + v = format_num(1000, exponent=6, precision=1e3) + assert v == '0.001e6', v + v = format_num(1000, exponent=6, precision=1e3, fmt='sipre') + assert v == '0.001 M', v + v = format_num(115e3, exponent=6, precision=1e5, fmt='sipre', + trailing_zeros=True) + assert v == '0.1 M', v + v = format_num(115e3, exponent=6, precision=1e4, fmt='sipre', + trailing_zeros=True) + assert v == '0.12 M', v + v = format_num(115e3, exponent=6, precision=1e3, fmt='sipre', + trailing_zeros=True) + assert v == '0.115 M', v + v = format_num(115e3, exponent=6, precision=1e2, fmt='sipre', + trailing_zeros=True) + assert v == '0.1150 M', v + v = format_num(115e3, exponent=6, precision=1e1, fmt='sipre', + trailing_zeros=True) + assert v == '0.11500 M', v + + # TeX formatting (use exp{pre,post}fix, {left,right}_delimiter; + # also fmt='eng', 'sipre', and 'binpre' + v = format_num( + value=12.5e3, sigfigs=4, trailing_zeros=True, fmt='eng', + expprefix=r' \, \times 10^{', + exppostfix='}', + left_delimiter='${', + right_delimiter='}$' + ) + assert v == r'${12.50 \, \times 10^{3}}$', v + v = format_num( + value=12.5e3, sigfigs=4, trailing_zeros=False, fmt='sipre', + expprefix=r' \, {\rm ', + exppostfix='}', + left_delimiter='${', + right_delimiter='}$' + ) + assert v == r'${12.5 \, {\rm k}}$', v + v = format_num( + value=12.5e3, sigfigs=4, trailing_zeros=False, fmt='binpre', + expprefix=r' \, {\rm ', + exppostfix='}', + left_delimiter='${', + right_delimiter='}$' + ) + assert v == r'${12.21 \, {\rm Ki}}$', v + + # fmt='full' + v = format_num(12.5e10, sigfigs=4, trailing_zeros=False, + fmt='full',) + assert v == '125000000000', v + + # specify both fmt='full' AND exponent (should raise exception) + try: + v = format_num( + 12.5e3, sigfigs=4, trailing_zeros=False, fmt='full', + exponent=0 + ) + except AssertionError: + pass + else: + assert False, '`fmt`="full" and `exponent` is defined' + + logging.info('<< PASS : test_format_num >>')
+ + + +
+[docs] +def timediff(dt_sec, hms_always=False, sec_decimals=3): + """Smart string formatting for a time difference (in seconds) + + Parameters + ---------- + dt_sec : numeric + Time difference, in seconds + hms_always : bool + * True + Always display hours, minuts, and seconds regardless of the order- + of-magnitude of dt_sec + * False + Display a minimal-length string that is meaningful, by omitting + units that are more significant than those necessary to display + dt_sec; if... + * dt_sec < 1 s + Use engineering formatting for the number. + * dt_sec is an integer in the range 0-59 (inclusive) + `sec_decimals` is ignored and the number is formatted as an + integer + See Notes below for handling of units. + (Default: False) + sec_decimals : int + Round seconds to this number of digits + + Notes + ----- + If colon notation (e.g. HH:MM:SS.xxx, MM:SS.xxx, etc.) is not used, the + number is only seconds, and is appended by a space ' ' followed by units + of 's' (possibly with a metric prefix). + + """ + sign_str = '' + sgn = 1 + if dt_sec < 0: + sgn = -1 + sign_str = '-' + dt_sec = sgn*dt_sec + + h, r = divmod(dt_sec, 3600) + m, s = divmod(r, 60) + h = int(h) + m = int(m) + + strdt = '' + if hms_always or h != 0: + strdt += format(h, '02d') + ':' + if hms_always or h != 0 or m != 0: + strdt += format(m, '02d') + ':' + + if float(s) == int(s): + s = int(s) + s_fmt = 'd' if len(strdt) == 0 else '02d' + else: + # If no hours or minutes, use SI-prefixed fmt for seconds with 3 + # decimal places + if (h == 0) and (m == 0) and not hms_always: + nearest_si_order_of_mag = ( + (decimal.Decimal.from_float(dt_sec).adjusted() // 3) * 3 + ) + sec_str = format_num(dt_sec, + precision=10**(nearest_si_order_of_mag-3), + exponent=nearest_si_order_of_mag, + fmt='sipre') + return sec_str + 's' + # Otherwise, round seconds to sec_decimals decimal digits + s = np.round(s, sec_decimals) + if len(strdt) == 0: + s_fmt = '.%df' %sec_decimals + else: + if sec_decimals == 0: + s_fmt = '02.0f' + else: + s_fmt = '0%d.%df' %(3+sec_decimals, sec_decimals) + if len(strdt) > 0: + strdt += format(s, s_fmt) + else: + strdt += format(s, s_fmt) + ' s' + + return sign_str + strdt
+ + + +
+[docs] +def test_timediff(): + """Unit tests for timediff function""" + v = timediff(1234) + assert v == '20:34', v + v = timediff(1234.5678) + assert v == '20:34.568', v + v = timediff(1, hms_always=True) + assert v == '00:00:01', v + v = timediff(1.1, hms_always=True, sec_decimals=3) + assert v == '00:00:01.100', v + v = timediff(1e6) + assert v == '277:46:40', v + v = timediff(1e6 + 1.5) + assert v == '277:46:41.500', v + logging.info('<< PASS : test_timediff >>')
+ + + +
+[docs] +def timestamp(d=True, t=True, tz=True, utc=False, winsafe=False): + """Simple utility to print out a time, date, or time+date stamp for the + time at which the function is called. + + Calling via defaults (explcitly provided here for reference) .. :: + + timestamp(d=True, t=True, tz=True, utc=False, winsafe=False) + + should be equivalent to the shell command .. :: + + date +'%Y-%m-%dT%H:%M:%S%z' + + + Parameters + ----------: + d : bool + Include date (default: True) + t : bool + Include time (default: True) + tz : bool + Include timezone offset from UTC (default: True) + utc : bool + Include UTC time/date (as opposed to local time/date) (default: False) + winsafe : bool + Omit colons between hours/minutes (default: False) + + """ + if utc: + time_tuple = time.gmtime() + else: + time_tuple = time.localtime() + + dts = '' + if d: + dts += time.strftime('%Y-%m-%d', time_tuple) + if t: + dts += 'T' + if t: + if winsafe: + dts += time.strftime('%H%M%S', time_tuple) + else: + dts += time.strftime('%H:%M:%S', time_tuple) + + if tz: + if utc: + if winsafe: + dts += time.strftime('+0000') + else: + dts += time.strftime('+0000') + else: + offset = time.strftime('%z') + if not winsafe: + offset = offset[:-2:] + '' + offset[-2::] + dts += offset + return dts
+ + + +
+[docs] +def test_timestamp(): + """Unit tests for timestamp function""" + date_cmd = "date +'%Y-%m-%dT%H:%M:%S%z'" + + # In case we call these on either side of a second, repeat a few times if not equal + for _ in range(10): + ref = os.popen(date_cmd).read().strip() + test = timestamp(winsafe=False) + if test == ref: + break + time.sleep(0.05) + + assert test == ref, f'{date_cmd} = "{ref}" but timestamp = "{test}"' + + logging.info('<< PASS : test_timestamp >>')
+ + + +if __name__ == '__main__': + set_verbosity(Levels.INFO) + test_hr_range_formatter() + test_list2hrlist() + test_format_num() + test_timediff() + test_timestamp() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/gaussians.html b/_modules/pisa/utils/gaussians.html new file mode 100644 index 000000000..2d0de8783 --- /dev/null +++ b/_modules/pisa/utils/gaussians.html @@ -0,0 +1,509 @@ + + + + + + pisa.utils.gaussians — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.gaussians

+#!/usr/bin/env python
+
+"""
+Multiple implementations of sum-of-gaussians for compatibility and speed
+"""
+
+
+from __future__ import absolute_import, division
+
+from argparse import ArgumentParser
+from collections.abc import Iterable
+from collections import OrderedDict
+from math import exp, sqrt
+import threading
+from time import time
+
+import numpy as np
+from scipy import stats
+
+from pisa import FTYPE, OMP_NUM_THREADS, NUMBA_CUDA_AVAIL, numba_jit
+from pisa.utils.comparisons import recursiveEquality
+from pisa.utils.log import Levels, logging, set_verbosity, tprofile
+
+
+# TODO: if the Numba CUDA functions are defined, then other CUDA (e.g. pycuda)
+# code doesn't run (possibly only when Nvidia driver is set to
+# process-exclusive or thread-exclusive mode). Need to fix this behavior. (E.g.
+# context that gets destroyed?)
+
+
+__all__ = ['GAUS_IMPLEMENTATIONS', 'gaussians', 'test_gaussians']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+GAUS_IMPLEMENTATIONS = ('singlethreaded', 'multithreaded')
+if NUMBA_CUDA_AVAIL:
+    GAUS_IMPLEMENTATIONS += ('cuda',)
+
+PI = FTYPE(np.pi)
+TWOPI = FTYPE(2*np.pi)
+SQRTPI = FTYPE(sqrt(np.pi))
+SQRT2PI = FTYPE(sqrt(2*np.pi))
+PISQ = FTYPE(np.pi*np.pi)
+
+
+
+[docs] +def gaussians(x, mu, sigma, weights=None, implementation=None, **kwargs): + """Sum of multiple Gaussian curves, normalized to have area of 1. + + Parameters + ---------- + x : array + Points at which to evaluate the sum of Gaussians + + mu : arrays + Means of the Gaussians to accumulate + + sigma : array + Standard deviations of the Gaussians to accumulate + + weights : array or None + Weights given to each Gaussian + + implementation : None or string + One of 'singlethreaded', 'multithreaded', or 'cuda'. Passing None, the + function will try to determine which of the implementations is best to + call. + + kwargs + Passed on to the underlying implementation + + Returns + ------- + outbuf : array + Resulting sum of Gaussians + + Notes + ----- + This function dynamically calls an appropriate implementation depending + upon the problem size, the hardware available (multi-core CPU or a GPU), + and whether the user specifies `implementation`. + + """ + # TODO: figure out which is the roughly the best function to call, if more + # than one function is available to call (i.e., really small problems are + # fastest in single core, really large `x` are probably best on GPU, and + # if/where multithreaded CPU beats GPU is still up in the air + if implementation is not None: + implementation = implementation.strip().lower() + if not implementation in GAUS_IMPLEMENTATIONS: + raise ValueError('`implementation` must be one of %s' + % GAUS_IMPLEMENTATIONS) + + # Extract a 'threads' kwarg if it's present, or default to OMP_NUM_THREADS + if 'threads' in kwargs: + threads = kwargs.pop('threads') + else: + threads = OMP_NUM_THREADS + + # Convert all inputs to arrays of correct datatype + if not isinstance(x, Iterable): + x = [x] + if not isinstance(mu, Iterable): + mu = [mu] + if not isinstance(sigma, Iterable): + sigma = [sigma] + if weights is None: + use_weights = False + weights = [-1] + else: + use_weights = True + if not isinstance(weights, Iterable): + weights = [weights] + x = np.asarray(x, dtype=FTYPE) + mu = np.asarray(mu, dtype=FTYPE) + inv_sigma = 1/np.asarray(sigma, dtype=FTYPE) + inv_sigma_sq = -0.5 * inv_sigma * inv_sigma + weights = np.asarray(weights, dtype=FTYPE) + + n_points = len(x) + n_gaussians = len(mu) + + # Normalization is computed here regardless of implementation + if use_weights: + norm = 1/(SQRT2PI * np.sum(weights)) + else: + norm = 1/(SQRT2PI * n_gaussians) + + # Instantiate an empty output buffer + outbuf = np.empty(shape=n_points, dtype=FTYPE) + + # Default to CUDA since it's generally fastest + if implementation == 'cuda' or (implementation is None + and NUMBA_CUDA_AVAIL): + logging.trace('Using CUDA Gaussians implementation') + _gaussians_cuda(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, + n_gaussians, **kwargs) + + # Use singlethreaded version if `threads` is 1 + elif (implementation == 'singlethreaded' + or implementation is None and threads == 1): + logging.trace('Using single-threaded Gaussians implementation') + _gaussians_singlethreaded( + outbuf=outbuf, x=x, mu=mu, inv_sigma=inv_sigma, + inv_sigma_sq=inv_sigma_sq, weights=weights, + n_gaussians=n_gaussians, start=0, stop=n_points, **kwargs + ) + + # Use multithreaded version otherwise + elif implementation == 'multithreaded' or threads > 1: + logging.trace('Using multi-threaded Gaussians implementation') + _gaussians_multithreaded( + outbuf=outbuf, x=x, mu=mu, inv_sigma=inv_sigma, + inv_sigma_sq=inv_sigma_sq, weights=weights, + n_gaussians=n_gaussians, threads=threads, **kwargs + ) + + else: + raise ValueError( + 'Unhandled value(s): `implementation`="%s"; note: threads="%s"' + ' and NUMBA_CUDA_AVAIL="%s"' + % (implementation, threads, NUMBA_CUDA_AVAIL) + ) + + # Now apply the normalization + return outbuf * norm
+ + + +def _gaussians_multithreaded(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, + n_gaussians, threads=OMP_NUM_THREADS): + """Sum of multiple Gaussians, optimized to be run in multiple threads. This + dispatches the single-kernel threaded """ + n_points = len(x) + chunklen = n_points // OMP_NUM_THREADS + threads = [] + start = 0 + for i in range(OMP_NUM_THREADS): + stop = n_points if i == (OMP_NUM_THREADS - 1) else start + chunklen + thread = threading.Thread( + target=_gaussians_singlethreaded, + args=(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, n_gaussians, + start, stop) + ) + thread.start() + threads.append(thread) + start += chunklen + + for thread in threads: + thread.join() + + +@numba_jit(nopython=True, nogil=True, fastmath=True, cache=True) +def _gaussians_singlethreaded(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, + n_gaussians, start, stop): + """Sum of multiple Gaussians, optimized to be run in a single thread""" + if weights[0] != -1: + assert len(weights) == n_gaussians + for i in range(start, stop): + tot = 0.0 + for j in range(n_gaussians): + xlessmu = x[i] - mu[j] + tot += ( + exp((xlessmu*xlessmu) * inv_sigma_sq[j]) + * weights[j] * inv_sigma[j] + ) + outbuf[i] = tot + else: + assert len(weights) == 1 + for i in range(start, stop): + tot = 0.0 + for j in range(n_gaussians): + xlessmu = x[i] - mu[j] + tot += ( + exp((xlessmu*xlessmu)*inv_sigma_sq[j])*inv_sigma[j] + ) + outbuf[i] = tot + + +if NUMBA_CUDA_AVAIL: + from numba import cuda + + def _gaussians_cuda(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, + n_gaussians): + n_points = len(x) + + use_weights = True + if weights[0] == -1: + assert len(weights) == 1 + use_weights = False + + threads_per_block = 32 + blocks_per_grid = ( + (n_points + (threads_per_block - 1)) // threads_per_block + ) + + # Create empty array on GPU to store result + d_outbuf = cuda.device_array(shape=n_points, dtype=FTYPE, stream=0) + + # Copy argument arrays to GPU + d_x = cuda.to_device(x) + d_mu = cuda.to_device(mu) + d_inv_sigma = cuda.to_device(inv_sigma) + d_inv_sigma_sq = cuda.to_device(inv_sigma_sq) + if use_weights: + assert len(weights) == n_gaussians + d_weights = cuda.to_device(weights) + func = _gaussians_weighted_cuda_kernel[blocks_per_grid, # pylint: disable=unsubscriptable-object + threads_per_block] + func(d_outbuf, d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, d_weights, + n_gaussians) + else: + d_weights = None + func = _gaussians_cuda_kernel[blocks_per_grid, threads_per_block] # pylint: disable=unsubscriptable-object + func(d_outbuf, d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, n_gaussians) + + # Copy contents of GPU result to host's outbuf + d_outbuf.copy_to_host(ary=outbuf, stream=0) + + del d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, d_weights, d_outbuf + + @cuda.jit(inline=True, fastmath=True) + def _gaussians_cuda_kernel(outbuf, x, mu, inv_sigma, inv_sigma_sq, + n_gaussians): + pt_idx = cuda.grid(1) # pylint: disable=not-callable + x_pt = x[pt_idx] + tot = 0.0 + for g_idx in range(n_gaussians): + xlessmu = x_pt - mu[g_idx] + tot += (exp((xlessmu*xlessmu) * inv_sigma_sq[g_idx]) + * inv_sigma[g_idx]) + outbuf[pt_idx] = tot + + @cuda.jit(inline=True, fastmath=True) + def _gaussians_weighted_cuda_kernel(outbuf, x, mu, inv_sigma, inv_sigma_sq, + weights, n_gaussians): + pt_idx = cuda.grid(1) # pylint: disable=not-callable + x_pt = x[pt_idx] + tot = 0.0 + for g_idx in range(n_gaussians): + xlessmu = x_pt - mu[g_idx] + tot += (exp((xlessmu*xlessmu) * inv_sigma_sq[g_idx]) + * weights[g_idx] * inv_sigma[g_idx]) + outbuf[pt_idx] = tot + + +
+[docs] +def test_gaussians(test_perf=False): + """Test `gaussians` function""" + n_gaus = [1, 10, 100, 1000, 10000] if test_perf else [1, 100] + n_eval = int(1e4) if test_perf else int(1e2) + + x = np.linspace(-20, 20, n_eval) + np.random.seed(0) + mu_sigma_weight_sets = [(np.linspace(-50, 50, n), np.linspace(0.5, 100, n), + np.random.rand(n)) for n in n_gaus] + + timings = OrderedDict() + for impl in GAUS_IMPLEMENTATIONS: + timings[impl] = [] + + for mus, sigmas, weights in mu_sigma_weight_sets: + if not isinstance(mus, Iterable): + mus = [mus] + sigmas = [sigmas] + weights = [weights] + ref_unw = np.sum( + [stats.norm.pdf(x, loc=m, scale=s) for m, s in zip(mus, sigmas)], + axis=0 + )/len(mus) + ref_w = np.sum( + [stats.norm.pdf(x, loc=m, scale=s)*w + for m, s, w in zip(mus, sigmas, weights)], + axis=0 + )/np.sum(weights) + for impl in GAUS_IMPLEMENTATIONS: + t0 = time() + test_unw = gaussians(x, mu=mus, sigma=sigmas, weights=None, + implementation=impl) + dt_unw = time() - t0 + t0 = time() + test_w = gaussians(x, mu=mus, sigma=sigmas, weights=weights, + implementation=impl) + dt_w = time() - t0 + timings[impl].append((np.round(dt_unw*1000, decimals=3), + np.round(dt_w*1000, decimals=3))) + err_msgs = [] + if not recursiveEquality(test_unw, ref_unw): + err_msgs.append( + 'BAD RESULT (unweighted), n_gaus=%d, implementation=' + '"%s", max. abs. fract. diff.: %s' + %(len(mus), impl, np.max(np.abs((test_unw/ref_unw - 1)))) + ) + if not recursiveEquality(test_w, ref_w): + err_msgs.append( + 'BAD RESULT (weighted), n_gaus=%d, implementation="%s"' + ', max. abs. fract. diff.: %s' + %(len(mus), impl, np.max(np.abs((test_w/ref_w - 1)))) + ) + if err_msgs: + for err_msg in err_msgs: + logging.error(err_msg) + raise ValueError('\n'.join(err_msgs)) + + tprofile.debug( + 'gaussians() timings (unweighted) (Note:OMP_NUM_THREADS=%d; evaluated' + ' at %.0e points)', OMP_NUM_THREADS, n_eval + ) + timings_str = ' '.join([format(t, '10d') for t in n_gaus]) + tprofile.debug(' '*30 + 'Number of gaussians'.center(59)) + tprofile.debug(' %15s %s', 'impl.', timings_str) + timings_str = ' '.join(['-'*10 for t in n_gaus]) + tprofile.debug(' %15s %s', '-'*15, timings_str) + for impl in GAUS_IMPLEMENTATIONS: + # only report timings for unweighted case + timings_str = ' '.join([format(t[0], '10.3f') for t in timings[impl]]) + tprofile.debug('Timings, %15s (ms): %s', impl, timings_str) + logging.info('<< PASS : test_gaussians >>')
+ + + +def parse_args(): + """Parse command line arguments""" + parser = ArgumentParser() + parser.add_argument( + '--test-perf', + action='store_true', + help="""Instead of unit test, run a performance test""", + ) + parser.add_argument( + '-v', + action='count', + default=Levels.WARN, + help="""Set verbosity level. Repeat for increased verbosity.""", + ) + return vars(parser.parse_args()) + + +def main(): + """Script wrapper for calling `test_gaussians`""" + kwargs = parse_args() + set_verbosity(kwargs.pop('v')) + test_gaussians(**kwargs) + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hash.html b/_modules/pisa/utils/hash.html new file mode 100644 index 000000000..654413610 --- /dev/null +++ b/_modules/pisa/utils/hash.html @@ -0,0 +1,347 @@ + + + + + + pisa.utils.hash — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.hash

+"""
+Utilities for hashing objects.
+"""
+
+
+from __future__ import absolute_import, division
+
+import base64
+from io import IOBase
+import pickle
+from pickle import PickleError, PicklingError
+import hashlib
+import struct
+from collections.abc import Iterable
+from pkg_resources import resource_filename
+
+import numpy as np
+
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.resources import find_resource
+
+
+__all__ = [
+    'FAST_HASH_FILESIZE_BYTES',
+    'FAST_HASH_NDARRAY_ELEMENTS',
+    'FAST_HASH_STR_CHARS',
+    'hash_obj',
+    'hash_file',
+    'test_hash_obj',
+    'test_hash_file',
+]
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+FAST_HASH_FILESIZE_BYTES = int(1e4)
+"""For a fast hash on a file object, this many bytes of the file are used"""
+
+FAST_HASH_NDARRAY_ELEMENTS = int(1e3)
+"""For a fast hash on a numpy array or matrix, this many elements of the array
+or matrix are used"""
+
+FAST_HASH_STR_CHARS = int(1e3)
+"""For a fast hash on a string (or object's pickle string representation), this
+many characters are used"""
+
+
+
+# NOTE: adding @line_profile decorator slows down function to order of 10s of
+# ms even if set_verbosity(0)!
+
+
+[docs] +def hash_obj(obj, hash_to='int', full_hash=True): + """Return hash for an object. Object can be a numpy ndarray or matrix + (which is serialized to a string), an open file (which has its contents + read), or any pickle-able Python object. + + Note that only the first most-significant 8 bytes (64 bits) from the MD5 + sum are used in the hash. + + Parameters + ---------- + obj : object + Object to hash. Note that the larger the object, the longer it takes to + hash. + + hash_to : string + 'i', 'int', or 'integer': First 8 bytes of the MD5 sum are interpreted + as an integer. + 'b', 'bin', or 'binary': MD5 sum digest; returns an 8-character string + 'h', 'x', 'hex': MD5 sum hexdigest, (string of 16 characters) + 'b64', 'base64': first 8 bytes of MD5 sum are base64 encoded (with '+' + and '-' as final two characters of encoding). Returns string of 11 + characters. + + full_hash : bool + If True, hash on the full object's contents (which can be slow) or if + False, hash on a partial object. For example, only a file's first kB is + read, and only 1000 elements (chosen at random) of a numpy ndarray are + hashed on. This mode of operation should suffice for e.g. a + minimization run, but should _not_ be used for storing to/loading from + disk. + + Returns + ------- + hash_val : int or string + + See also + -------- + hash_file : hash a file on disk by filename/path + + """ + if hash_to is None: + hash_to = 'int' + hash_to = hash_to.lower() + + pass_on_kw = dict(hash_to=hash_to, full_hash=full_hash) + + # TODO: convert an existing hash to the desired type, if it isn't already + # in this type + if hasattr(obj, 'hash') and obj.hash is not None and obj.hash == obj.hash: + return obj.hash + + # Handle numpy arrays and matrices specially + if isinstance(obj, (np.ndarray, np.matrix)): + if full_hash: + return hash_obj(obj.tostring(), **pass_on_kw) + len_flat = obj.size + stride = 1 + (len_flat // FAST_HASH_NDARRAY_ELEMENTS) + sub_elements = obj.flat[0::stride] + return hash_obj(sub_elements.tostring(), **pass_on_kw) + + # Handle an open file object as a special case + if isinstance(obj, IOBase): + if full_hash: + return hash_obj(obj.read(), **pass_on_kw) + return hash_obj(obj.read(FAST_HASH_FILESIZE_BYTES), **pass_on_kw) + + # Convert to string (if not one already) in a fast and generic way: pickle; + # this creates a binary string, which is fine for sending to hashlib + if not isinstance(obj, str): + try: + pkl = pickle.dumps(obj, pickle.HIGHEST_PROTOCOL) + except (PickleError, PicklingError, TypeError): + # Recurse into an iterable that couldn't be pickled + if isinstance(obj, Iterable): + return hash_obj([hash_obj(subobj) for subobj in obj], + **pass_on_kw) + else: + logging.error('Failed to pickle `obj` "%s" of type "%s"', + obj, type(obj)) + raise + obj = pkl + + if full_hash: + try: + md5hash = hashlib.md5(obj) + except TypeError: + md5hash = hashlib.md5(obj.encode()) + else: + # Grab just a subset of the string by changing the stride taken in the + # character array (but if the string is less than + # FAST_HASH_FILESIZE_BYTES, use a stride length of 1) + stride = 1 + (len(obj) // FAST_HASH_STR_CHARS) + try: + md5hash = hashlib.md5(obj[0::stride]) + except TypeError: + md5hash = hashlib.md5(obj[0::stride].encode()) + + if hash_to in ['i', 'int', 'integer']: + hash_val, = struct.unpack('<q', md5hash.digest()[:8]) + elif hash_to in ['b', 'bin', 'binary']: + hash_val = md5hash.digest()[:8] + elif hash_to in ['h', 'x', 'hex', 'hexadecimal']: + hash_val = md5hash.hexdigest()[:16] + elif hash_to in ['b64', 'base64']: + hash_val = base64.b64encode(md5hash.digest()[:8], '+-') + else: + raise ValueError('Unrecognized `hash_to`: "%s"' % (hash_to,)) + return hash_val
+ + + +
+[docs] +def hash_file(fname, hash_to=None, full_hash=True): + """Return a hash for a file, passing contents through hash_obj function.""" + resource = find_resource(fname) + with open(resource, 'rb') as f: + return hash_obj(f, hash_to=hash_to, full_hash=full_hash)
+ + + +
+[docs] +def test_hash_obj(): + """Unit tests for `hash_obj` function""" + assert hash_obj('x') == 3783177783470249117 + assert hash_obj('x', full_hash=False) == 3783177783470249117 + assert hash_obj('x', hash_to='hex') == '9dd4e461268c8034' + assert hash_obj(object()) != hash_obj(object) + + for nel in [10, 100, 1000]: + rs = np.random.RandomState(seed=0) + a = rs.rand(nel, nel, 2) + a0_h_full = hash_obj(a) + a0_h_part = hash_obj(a, full_hash=False) + + rs = np.random.RandomState(seed=1) + a = rs.rand(nel, nel, 2) + a1_h_full = hash_obj(a) + a1_h_part = hash_obj(a, full_hash=False) + + rs = np.random.RandomState(seed=2) + a = rs.rand(nel, nel, 2) + a2_h_full = hash_obj(a) + a2_h_part = hash_obj(a, full_hash=False) + + assert a1_h_full != a0_h_full + assert a2_h_full != a0_h_full + assert a2_h_full != a1_h_full + + assert a1_h_part != a0_h_part + assert a2_h_part != a0_h_part + assert a2_h_part != a1_h_part + + logging.info('<< PASS : test_hash_obj >>')
+ + +# TODO: test_hash_file function requires a "standard" file to test on +
+[docs] +def test_hash_file(): + """Unit tests for `hash_file` function""" + file_hash = hash_file(resource_filename('pisa.utils', 'hash.py')) + logging.debug(file_hash) + file_hash = hash_file(resource_filename('pisa.utils', 'hash.py'), + full_hash=False) + logging.debug(file_hash) + logging.info('<< PASS : test_hash_file >>')
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_hash_obj() + test_hash_file() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hdf.html b/_modules/pisa/utils/hdf.html new file mode 100644 index 000000000..93da22048 --- /dev/null +++ b/_modules/pisa/utils/hdf.html @@ -0,0 +1,545 @@ + + + + + + pisa.utils.hdf — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.hdf

+"""Set of utilities for handling HDF5 file I/O"""
+
+
+from __future__ import absolute_import
+
+from collections.abc import Mapping
+from collections import OrderedDict
+import os
+
+import numpy as np
+import h5py
+from six import string_types
+
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.hash import hash_obj
+from pisa.utils.resources import find_resource
+from pisa.utils.comparisons import recursiveEquality
+
+
+__all__ = ['HDF5_EXTS', 'from_hdf', 'to_hdf', 'test_hdf']
+
+__author__ = 'S. Boeser, J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+HDF5_EXTS = ['hdf', 'h5', 'hdf5']
+
+
+# TODO: convert to allow reading of icetray-produced HDF5 files
+
+
+
+[docs] +def from_hdf(val, return_node=None, choose=None): + """Return the contents of an HDF5 file or node as a nested dict; optionally + return a second dict containing any HDF5 attributes attached to the + entry-level HDF5 entity. + + Parameters + ---------- + val : string or h5py.Group + Specifies entry-level entity + * If val is a string, it is interpreted as a filename; file is opened + as an h5py.File + * Otherwise, val must be an h5py.Group in an instantiated object + + return_node : None or string + Not yet implemented + + choose : None or list + Optionally can provide a list of variables names to parse (items not in + this list will be skipped, saving time & memory) + + Returns + ------- + data : OrderedDict with additional attr of type OrderedDict named `attrs` + Nested dictionary; keys are HDF5 node names and values contain the + contents of that node. If the entry-level entity of `val` has "attrs", + these are extracted and attached as an OrderedDict at `data.attrs`; + otherwise, this entity is an empty OrderedDict. + + """ + if return_node is not None: + raise NotImplementedError('`return_node` is not yet implemented.') + + def visit_group(obj, sdict, choose=None): + """Iteratively parse `obj` to create the dictionary `sdict`""" + name = obj.name.split('/')[-1] + + if isinstance(obj, h5py.Dataset): + if (choose is None) or (name in choose) : + sdict[name] = obj[()] + if isinstance(obj, (h5py.Group, h5py.File)): + sdict[name] = OrderedDict() + for sobj in obj.values(): + visit_group(sobj, sdict[name], choose) + + myfile = False + if isinstance(val, str): + try: + root = h5py.File(find_resource(val), 'r') + except Exception: + logging.error('Failed to load HDF5 file, `val`="%s"', val) + raise + myfile = True + else: + root = val + logging.trace('root = %s, root.values() = %s', root, root.values()) + + data = OrderedDict() + attrs = OrderedDict() + try: + # Retrieve attrs if present + if hasattr(root, 'attrs'): + attrs = OrderedDict(root.attrs) + # Run over the whole dataset + for obj in root.values(): + visit_group(obj, data, choose) + finally: + if myfile: + root.close() + + data.attrs = attrs + + return data
+ + + +
+[docs] +def to_hdf(data_dict, tgt, attrs=None, overwrite=True, warn=True): + """Store a (possibly nested) dictionary to an HDF5 file or branch node + within an HDF5 file (an h5py Group). + + This creates hardlinks for duplicate non-trivial leaf nodes (h5py Datasets) + to minimize storage space required for redundant datasets. Duplication is + detected via object hashing. + + NOTE: Branch nodes are sorted before storing (by name) for consistency in + the generated file despite Python dictionaries having no defined ordering + among keys. + + Parameters + ---------- + data_dict : Mapping + Dictionary, OrderedDict, or other Mapping to be stored + + tgt : str or h5py.Group + Target for storing data. If `tgt` is a str, it is interpreted as a + filename; a file is created with that name (overwriting an existing + file, if present). After writing, the file is closed. If `tgt` is an + h5py.Group, the data is simply written to that Group and it is left + open at function return. + + attrs : Mapping + Attributes to apply to the top-level entity being written. See + http://docs.h5py.org/en/latest/high/attr.html + + overwrite : bool + Set to `True` (default) to allow overwriting existing file. Raise + exception and quit otherwise. + + warn : bool + Issue a warning message if a file is being overwritten. Suppress + warning by setting to `False` (e.g. when overwriting is the desired + behaviour). + + """ + if not isinstance(data_dict, Mapping): + raise TypeError('`data_dict` only accepts top-level' + ' dict/OrderedDict/etc.') + + def store_recursively(fhandle, node, path=None, attrs=None, + node_hashes=None): + """Function for iteratively doing the work""" + path = [] if path is None else path + full_path = '/' + '/'.join(path) + node_hashes = OrderedDict() if node_hashes is None else node_hashes + + if attrs is None: + sorted_attr_keys = [] + else: + if isinstance(attrs, OrderedDict): + sorted_attr_keys = attrs.keys() + else: + sorted_attr_keys = sorted(attrs.keys()) + + if isinstance(node, Mapping): + logging.trace(' creating Group "%s"', full_path) + try: + dset = fhandle.create_group(full_path) + for key in sorted_attr_keys: + dset.attrs[key] = attrs[key] + except ValueError: + pass + + for key in sorted(node.keys()): + if isinstance(key, str): + key_str = key + else: + key_str = str(key) + logging.warning( + 'Making string from key "%s", %s for use as' + ' name in HDF5 file', key_str, type(key) + ) + val = node[key] + new_path = path + [key_str] + store_recursively(fhandle=fhandle, node=val, path=new_path, + node_hashes=node_hashes) + else: + # Check for existing node + node_hash = hash_obj(node) + if node_hash in node_hashes: + logging.trace(' creating hardlink for Dataset: "%s" -> "%s"', + full_path, node_hashes[node_hash]) + # Hardlink the matching existing dataset + fhandle[full_path] = fhandle[node_hashes[node_hash]] + return + + # For now, convert None to np.nan since h5py appears to not handle + # None + if node is None: + node = np.nan + logging.warning( + ' encountered `None` at node "%s"; converting to' + ' np.nan', full_path + ) + + # "Scalar datasets don't support chunk/filter options". Shuffling + # is a good idea otherwise since subsequent compression will + # generally benefit; shuffling requires chunking. Compression is + # not done here since it is slow, but can be done by + # post-processing the generated file(s). + if np.isscalar(node): + shuffle = False + chunks = None + else: + shuffle = True + chunks = True + # Store the node_hash for linking to later if this is more than + # a scalar datatype. Assumed that "None" has + node_hashes[node_hash] = full_path + + # -- Handle special types -- # + + # See h5py docs at + # + # https://docs.h5py.org/en/stable/strings.html#how-to-store-text-strings + # + # where using `bytes` objects (i.e., in numpy, np.string_) is + # deemed the most compatible way to encode objects, but apparently + # we don't have pytables compatibility right now. + # + # For boolean support, see + # + # https://docs.h5py.org/en/stable/faq.html#faq + + # TODO: make written hdf5 files compatible with pytables + # see docs at https://www.pytables.org/usersguide/datatypes.html + + if isinstance(node, string_types): + node = np.string_(node) + elif isinstance(node, bool): + node = np.bool_(node) # same as np.bool8 + elif isinstance(node, np.ndarray): + if issubclass(node.dtype.type, string_types): + node = node.astype(np.string_) + elif node.dtype.type is bool: + node = node.astype(np.bool_) + + logging.trace(' creating dataset at path "%s", hash %s', + full_path, node_hash) + try: + dset = fhandle.create_dataset( + name=full_path, data=node, chunks=chunks, compression=None, + shuffle=shuffle, fletcher32=False + ) + except TypeError: + try: + shuffle = False + chunks = None + dset = fhandle.create_dataset( + name=full_path, data=node, chunks=chunks, + compression=None, shuffle=shuffle, fletcher32=False + ) + except Exception: + logging.error(' full_path: "%s"', full_path) + logging.error(' chunks : %s', str(chunks)) + logging.error(' shuffle : %s', str(shuffle)) + logging.error(' node : "%s"', str(node)) + raise + + for key in sorted_attr_keys: + dset.attrs[key] = attrs[key] + + # Perform the actual operation using the dict passed in by user + if isinstance(tgt, str): + from pisa.utils.fileio import check_file_exists + fpath = check_file_exists(fname=tgt, overwrite=overwrite, warn=warn) + h5file = h5py.File(fpath, 'w') + try: + if attrs is not None: + h5file.attrs.update(attrs) + store_recursively(fhandle=h5file, node=data_dict) + finally: + h5file.close() + + elif isinstance(tgt, h5py.Group): + store_recursively(fhandle=tgt, node=data_dict, attrs=attrs) + + else: + raise TypeError('to_hdf: Invalid `tgt` type: %s' % type(tgt))
+ + + +
+[docs] +def test_hdf(): + """Unit tests for hdf module""" + from shutil import rmtree + from tempfile import mkdtemp + + data = OrderedDict([ + ('top', OrderedDict([ + ('secondlvl1', OrderedDict([ + ('thirdlvl11', np.linspace(1, 100, 10000).astype(np.float64)), + ('thirdlvl12', b"this is a string"), + ('thirdlvl13', b"this is another string"), + ('thirdlvl14', 1), + ('thirdlvl15', 1.1), + ('thirdlvl16', np.float32(1.1)), + ('thirdlvl17', np.float64(1.1)), + ('thirdlvl18', np.int8(1)), + ('thirdlvl19', np.int16(1)), + ('thirdlvl110', np.int32(1)), + ('thirdlvl111', np.int64(1)), + ('thirdlvl112', np.uint8(1)), + ('thirdlvl113', np.uint16(1)), + ('thirdlvl114', np.uint32(1)), + ('thirdlvl115', np.uint64(1)), + ])), + ('secondlvl2', OrderedDict([ + ('thirdlvl21', np.linspace(1, 100, 10000).astype(np.float32)), + ('thirdlvl22', b"this is a string"), + ('thirdlvl23', b"this is another string"), + ])), + ('secondlvl3', OrderedDict([ + ('thirdlvl31', np.array(range(1000)).astype(int)), + ('thirdlvl32', b"this is a string"), + ])), + ('secondlvl4', OrderedDict([ + ('thirdlvl41', np.linspace(1, 100, 10000)), + ('thirdlvl42', b"this is a string"), + ])), + ('secondlvl5', OrderedDict([ + ('thirdlvl51', np.linspace(1, 100, 10000)), + ('thirdlvl52', b"this is a string"), + ])), + ('secondlvl6', OrderedDict([ + ('thirdlvl61', np.linspace(100, 1000, 10000)), + ('thirdlvl62', b"this is a string"), + ])), + ])) + ]) + + temp_dir = mkdtemp() + try: + fpath = os.path.join(temp_dir, 'to_hdf_noattrs.hdf5') + to_hdf(data, fpath, overwrite=True, warn=False) + loaded_data1 = from_hdf(fpath) + assert data.keys() == loaded_data1.keys() + assert recursiveEquality(data, loaded_data1), \ + str(data) + "\n" + str(loaded_data1) + + attrs = OrderedDict([ + ('float', 9.98237), + ('float32', np.float32(1.)), + ('float64', np.float64(1.)), + ('pi', np.float64(np.pi)), + + ('string', "string attribute!"), + + ('int', 1), + ('int8', np.int8(1)), + ('int16', np.int16(1)), + ('int32', np.int32(1)), + ('int64', np.int64(1)), + + ('uint8', np.uint8(1)), + ('uint16', np.uint16(1)), + ('uint32', np.uint32(1)), + ('uint64', np.uint64(1)), + + ('bool', True), + ('bool8', np.bool8(True)), + ('bool_', np.bool_(True)), + ]) + + attr_type_checkers = { + "float": lambda x: isinstance(x, float), + "float32": lambda x: x.dtype == np.float32, + "float64": lambda x: x.dtype == np.float64, + "pi": lambda x: x.dtype == np.float64, + + "string": lambda x: isinstance(x, string_types), + + "int": lambda x: isinstance(x, int), + "int8": lambda x: x.dtype == np.int8, + "int16": lambda x: x.dtype == np.int16, + "int32": lambda x: x.dtype == np.int32, + "int64": lambda x: x.dtype == np.int64, + + "uint8": lambda x: x.dtype == np.uint8, + "uint16": lambda x: x.dtype == np.uint16, + "uint32": lambda x: x.dtype == np.uint32, + "uint64": lambda x: x.dtype == np.uint64, + + "bool": lambda x: isinstance(x, bool), + "bool8": lambda x: x.dtype == np.bool8, + "bool_": lambda x: x.dtype == np.bool_, + } + + fpath = os.path.join(temp_dir, 'to_hdf_withattrs.hdf5') + to_hdf(data, fpath, attrs=attrs, overwrite=True, warn=False) + loaded_data2 = from_hdf(fpath) + loaded_attrs = loaded_data2.attrs + assert data.keys() == loaded_data2.keys() + assert attrs.keys() == loaded_attrs.keys(), \ + '\n' + str(attrs.keys()) + '\n' + str(loaded_attrs.keys()) + assert recursiveEquality(data, loaded_data2) + assert recursiveEquality(attrs, loaded_attrs) + + for key, val in attrs.items(): + tgt_type_checker = attr_type_checkers[key] + assert tgt_type_checker(val), \ + "key '%s': val '%s' is type '%s'" % \ + (key, val, type(loaded_attrs[key])) + finally: + rmtree(temp_dir) + + logging.info('<< PASS : test_hdf >>')
+ + + +if __name__ == "__main__": + set_verbosity(1) + test_hdf() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hdfchain.html b/_modules/pisa/utils/hdfchain.html new file mode 100644 index 000000000..1dbe997bb --- /dev/null +++ b/_modules/pisa/utils/hdfchain.html @@ -0,0 +1,275 @@ + + + + + + pisa.utils.hdfchain — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.hdfchain

+"""
+class to access hdf5 files chained together.
+"""
+from __future__ import print_function
+
+
+import numpy as n
+import tables
+from glob import glob
+from collections import defaultdict
+
+
+__all__ = ['HDFTableProxy', 'TableAccessor', 'HDFChain']
+
+
+
+[docs] +class HDFTableProxy(object): + def __init__(self, table, files): + self.path = str(table._v_pathname) + self._v_dtype = table.description._v_dtype + self.files = files + +
+[docs] + def read(self): + # first loop to calculate number of rows + lengths = n.zeros(len(self.files), dtype=int) + for i, file in enumerate(self.files): + try: + lengths[i] = len(file.getNode(self.path)) + except tables.NoSuchNodeError: + print("WARN: node %s does not exist in file %s" % (self.path, file.filename)) + lengths[i] = 0 + + # create result array ... + result = n.zeros(lengths.sum(), dtype=self._v_dtype) + + # .. and fill it + for i, file in enumerate(self.files): + if lengths[i] == 0: + continue + result[lengths[:i].sum():lengths[:i].sum()+lengths[i]] = file.getNode(self.path).read() + + return result
+ + +
+[docs] + def read_iter(self): + for i, file in enumerate(self.files): + yield file.getNode(self.path).read()
+ + +
+[docs] + def col_iter(self, colname): + for i, file in enumerate(self.files): + yield file.getNode(self.path).col(colname)
+ + +
+[docs] + def col(self, colname): + dtype = self._v_dtype[colname] + # first loop to calculate number of rows + lengths = n.zeros(len(self.files), dtype=int) + #print "INFO: counting rows" + for i, file in enumerate(self.files): + try: + lengths[i] = len(file.getNode(self.path)) + except tables.NoSuchNodeError: + print("WARN: node %s does not exist in file %s" % (self.path, file.filename)) + lengths[i] = 0 + + # create result array ... + result = n.zeros(lengths.sum(), dtype=dtype) + + # .. and fill it + for i, file in enumerate(self.files): + #print "INFO: read %d/%d" % (i+1, len(self.files)) + if lengths[i] == 0: + continue + result[lengths[:i].sum():lengths[:i].sum()+lengths[i]] = file.getNode(self.path).col(colname) + + return result
+ + + def __len__(self): + length = 0 + for i, file in enumerate(self.files): + length += len(file.getNode(self.path)) + return length + + def __repr__(self): + return ("chained table with %d files:\n" % len(self.files))+self.files[0].getNode(self.path).__repr__()
+ + +
+[docs] +class TableAccessor(object): + def __init__(self, tabledict): + for tabname, proxy in tabledict.items(): + self.__dict__[tabname] = proxy + + def __repr__(self): + return ", ".join([key for (key,value) in self.__dict__.items() if type(value) is HDFTableProxy])
+ + +
+[docs] +class HDFChain(object): + def __init__(self, files, maxdepth=1, verbose=False, **kwargs): + """ + setup a chain of hdf files. + files is either a list of filenames or a glob string + kwargs are passed to tables.openFile (e.g. NODE_CACHE_SLOTS) + """ + + self.files = list() + self._tables = defaultdict(HDFTableProxy) + self.verbose = verbose + self.pathes = dict() + + if self.verbose: + print("opening files in chain...") + if type(files) is list: + if len(files) == 0: + raise ValueError("provided file list is empty!") + self.files = [tables.openFile(fname, **kwargs) for fname in files ] + elif type(files) is str: + self.files = [tables.openFile(fname, **kwargs) for fname in sorted(glob(files)) ] + if len(self.files) == 0: + raise ValueError("glob string matches no file!") + else: + raise ValueError("parameter files must be either a list of filenames or a globstring") + + + file = self.files[0] + if self.verbose: + print("walking through first file %s" % file.filename) + for table in file.walkNodes(classname="Table"): + if table._v_depth > maxdepth: + continue + if table.name in self._tables: + print("WARN: skipping additional occurence of table %s at %s (using %s)!" % (table.name, + table._v_pathname, self._tables[table.name].path)) + continue + else: + proxy = HDFTableProxy(table, self.files) + self._tables[table.name] = proxy + self.pathes[table._v_pathname] = proxy + + self.root = TableAccessor(self._tables) + + def __del__(self): + for tabname, tabproxy in self._tables.items(): + tabproxy.file = None + + for file in self.files: + file.close() + + +
+[docs] + def getNode(self, path): + return self.pathes[path]
+
+ + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hypersurface/hyper_interpolator.html b/_modules/pisa/utils/hypersurface/hyper_interpolator.html new file mode 100644 index 000000000..081936ad9 --- /dev/null +++ b/_modules/pisa/utils/hypersurface/hyper_interpolator.html @@ -0,0 +1,1174 @@ + + + + + + pisa.utils.hypersurface.hyper_interpolator — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.utils.hypersurface.hyper_interpolator

+"""
+Classes and methods needed to do hypersurface interpolation over arbitrary parameters.
+"""
+
+__all__ = ['HypersurfaceInterpolator', 'run_interpolated_fit', 'prepare_interpolated_fit',
+            'assemble_interpolated_fits', 'load_interpolated_hypersurfaces', 'pipeline_cfg_from_states',
+            'serialize_pipeline_cfg', 'get_incomplete_job_idx']
+
+__author__ = 'T. Stuttard, A. Trettin'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+import os
+import collections
+import copy
+
+import numpy as np
+from scipy import interpolate
+from .hypersurface import Hypersurface, HypersurfaceParam, load_hypersurfaces
+from pisa import FTYPE, ureg
+from pisa.utils import matrix
+from pisa.utils.jsons import from_json, to_json
+from pisa.utils.fileio import from_file, to_file
+from pisa.core.pipeline import Pipeline
+from pisa.core.binning import MultiDimBinning, is_binning
+from pisa.core.map import Map
+from pisa.core.param import Param, ParamSet
+from pisa.utils.resources import find_resource
+from pisa.utils.fileio import mkdir
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.comparisons import ALLCLOSE_KW
+from uncertainties import ufloat, correlated_values
+from uncertainties import unumpy as unp
+
+
+[docs] +class HypersurfaceInterpolator(object): + """Factory for interpolated hypersurfaces. + + After being initialized with a set of hypersurface fits produced at different + parameters, it uses interpolation to produce a Hypersurface object + at a given point in parameter space using scipy's `RegularGridInterpolator`. + + The interpolation is piecewise-linear between points. All points must lie on a + rectilinear ND grid. + + Parameters + ---------- + interpolation_param_spec : dict + Specification of interpolation parameter grid of the form:: + interpolation_param_spec = { + 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} + 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} + ... + 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} + } + where values are given as :obj:`Quantity`. + hs_fits : list of dict + list of dicts with hypersurfacesthat were fit at the points of the parameter mesh + defined by interpolation_param_spec + ignore_nan : bool + Ignore empty bins in hypersurfaces. The intercept in those bins is set to 1 and + all slopes are set to 0. + + Notes + ----- + Be sure to give a support that covers the entire relevant parameter range and a + good distance beyond! To prevent minimization failure from NaNs, extrapolation + is used if hypersurfaces outside the support are requested but needless to say + these numbers are unreliable. + + See Also + -------- + scipy.interpolate.RegularGridInterpolator : + class used for interpolation + """ + + def __init__(self, interpolation_param_spec, hs_fits, ignore_nan=True): + self.ndim = len(interpolation_param_spec.keys()) + # key ordering is important to guarantee that dimensions stay consistent + msg = "interpolation params must be specified as a dict with ordered keys" + assert isinstance(interpolation_param_spec, collections.OrderedDict), msg + for k, v in interpolation_param_spec.items(): + assert set(v.keys()) == {"values", "scales_log"} + assert isinstance(v["values"], collections.abc.Sequence) + self.interp_param_spec = interpolation_param_spec + reference_hs = hs_fits[0]["hs_fit"] + # we are going to produce the hypersurface from a state that is the same + # as the reference, only the coefficients and covariance matrices are + # injected from the interpolation. + self._reference_state = copy.deepcopy(reference_hs.serializable_state) + # for cleanliness we wipe numbers from the original state + self._reference_state["intercept_sigma"] = np.nan + self._reference_state["fit_maps_norm"] = None + self._reference_state["fit_maps_raw"] = None + self._reference_state["fit_chi2"] = np.nan + for param in self._reference_state['params'].values(): + param['fit_coeffts_sigma'] = np.full_like( + param['fit_coeffts_sigma'], np.nan) + # Instead of holding numbers, these coefficients and covariance matrices are + # interpolator objects the produce them at the requested point. + # The shape of fit_coeffts is [binning ..., fit coeffts] + self.coeff_shape = reference_hs.fit_coeffts.shape + self.coefficients = None + # The shape of fit_cov_mat is [binning ..., fit coeffts, fit coeffts] + self.covars_shape = reference_hs.fit_cov_mat.shape + self.covars = None + + # We now need to massage the fit coefficients into the correct shape + # for interpolation. + # The dimensions of the interpolation parameters come first, the dimensions + # of the hypersurface coefficients comes last. + self.interp_shape = tuple(len(v["values"]) for v in self.interp_param_spec.values()) + # dimension is [interp_shape, binning..., fit coeffts] + self._coeff_z = np.zeros(self.interp_shape + self.coeff_shape) + # dimension is [interp_shape, binning..., fit coeffts, fit coeffts] + self._covar_z = np.zeros(self.interp_shape + self.covars_shape) + # Here we use the same indexing as below in `fit_hypersurfaces` + for i, idx in enumerate(np.ndindex(self.interp_shape)): + # As an additional safety measure, we check that the parameters are what + # we expect to find at this index. + expected_params = dict( + (n, self.interp_param_spec[n]["values"][idx[j]]) + for j, n in enumerate(self.interp_param_spec.keys()) + ) + param_values = hs_fits[i]["param_values"] + msg = ("The stored values where hypersurfaces were fit do not match those" + "in the interpolation grid.") + assert np.all([expected_params[n].m == param_values[n].m + for n in self.interp_param_spec.keys()]), msg + self._coeff_z[idx] = hs_fits[i]["hs_fit"].fit_coeffts + self._covar_z[idx] = hs_fits[i]["hs_fit"].fit_cov_mat + + grid_coords = list( + np.array([val.m for val in val_list["values"]]) + for val_list in self.interp_param_spec.values() + ) + self.param_bounds = [(np.min(grid_vals), np.max(grid_vals)) + for grid_vals in grid_coords] + # If a parameter scales as log, we give the log of the parameter to the + # interpolator. We must not forget to do this again when we call the + # interpolator later! + for i, param_name in enumerate(self.interpolation_param_names): + if self.interp_param_spec[param_name]["scales_log"]: + grid_coords[i] = np.log10(grid_coords[i]) + self.coefficients = interpolate.RegularGridInterpolator( + grid_coords, + self._coeff_z, + # We disable extrapolation, but clip parameter values inside the valid + # range. + bounds_error=True, fill_value=None + ) + self.covars = interpolate.RegularGridInterpolator( + grid_coords, + self._covar_z, + bounds_error=True, fill_value=None + ) + # In order not to spam warnings, we only want to warn about non positive + # semi definite covariance matrices once for each bin. We store the bin + # indeces for which the warning has already been issued. + self.covar_bins_warning_issued = [] + self.ignore_nan = ignore_nan + + @property + def interpolation_param_names(self): + return list(self.interp_param_spec.keys()) + + @property + def param_names(self): + return list(self._reference_state["params"].keys()) + + @property + def binning(self): + binning = self._reference_state["binning"] + if not is_binning(binning) : + binning = MultiDimBinning(**binning) + return binning + + @property + def num_interp_params(self): + return len(self.interp_param_spec.keys()) + +
+[docs] + def get_hypersurface(self, **param_kw): + """ + Get a Hypersurface object with interpolated coefficients. + + Parameters + ---------- + **param_kw + Parameters are given as keyword arguments, where the names + of the arguments must match the names of the parameters over + which the hypersurfaces are interpolated. The values + are given as :obj:`Quantity` objects with units. + """ + assert set(param_kw.keys()) == set(self.interp_param_spec.keys()), "invalid parameters" + # getting param magnitudes in the same units as the parameter specification + x = np.array([ + param_kw[p].m_as(self.interp_param_spec[p]["values"][0].u) + # we have checked that this is an OrderedDict so that the order of x is not + # ambiguous here + for p in self.interp_param_spec.keys() + ]) + assert len(x) == len(self.param_bounds) + for i, bounds in enumerate(self.param_bounds): + x[i] = np.clip(x[i], *bounds) + # if a parameter scales as log, we have to take the log here again + for i, param_name in enumerate(self.interpolation_param_names): + if self.interp_param_spec[param_name]["scales_log"]: + # We must be strict with raising errors here, because otherwise + # the Hypersurface will suddenly have NaNs everywhere! This shouldn't + # happen because we clip values into the valid parameter range. + if x[i] <= 0: + raise RuntimeError("A log-scaling parameter cannot become zero " + "or negative!") + x[i] = np.log10(x[i]) + + state = copy.deepcopy(self._reference_state) + # fit covariance matrices are stored directly in the state while fit coeffts + # must be assigned with the setter method... + # need squeeze here because the RegularGridInterpolator always puts another + # dimension around the output + state["fit_cov_mat"] = np.squeeze(self.covars(x)) + assert state["fit_cov_mat"].shape == self.covars_shape + for idx in np.ndindex(state['fit_cov_mat'].shape): + if self.ignore_nan: continue + assert np.isfinite(state['fit_cov_mat'][idx]), ("invalid cov matrix " + f"element encountered at {param_kw} in loc {idx}") + # check covariance matrices for symmetry, positive semi-definiteness + for bin_idx in np.ndindex(state['fit_cov_mat'].shape[:-2]): + m = state['fit_cov_mat'][bin_idx] + if self.ignore_nan and np.any(~np.isfinite(m)): + state['fit_cov_mat'][bin_idx] = np.identity(m.shape[0]) + m = state['fit_cov_mat'][bin_idx] + assert np.allclose( + m, m.T, rtol=ALLCLOSE_KW['rtol']*10.), f'cov matrix not symmetric in bin {bin_idx}' + if not matrix.is_psd(m): + state['fit_cov_mat'][bin_idx] = matrix.fronebius_nearest_psd(m) + if not bin_idx in self.covar_bins_warning_issued: + logging.warn( + f'Invalid covariance matrix fixed in bin: {bin_idx}') + self.covar_bins_warning_issued.append(bin_idx) + hypersurface = Hypersurface.from_state(state) + coeffts = np.squeeze(self.coefficients(x)) # calls interpolator + assert coeffts.shape == self.coeff_shape + # check that coefficients exist and if not replace with default values + for idx in np.ndindex(self.coeff_shape): + if self.ignore_nan and ~np.isfinite(coeffts[idx]): + coeffts[idx] = 1 if idx[-1] == 0 else 0 # set intercept to 1, slopes 0 + assert np.isfinite(coeffts[idx]), ("invalid coeff encountered at " + f"{param_kw} in loc {idx}") + # the setter method defined in the Hypersurface class takes care of + # putting the coefficients in the right place in their respective parameters + hypersurface.fit_coeffts = coeffts + return hypersurface
+ + + def _make_slices(self, *xi): + """Make slices of hypersurfaces for plotting. + + In some covariance matrices, the spline fits are corrected to make + the matrix positive semi-definite. The slices produced by this function + include all of those effects. + + Parameters + ---------- + xi : list of ndarray + Points at which the hypersurfaces are to be evaluated. The length of the + list must equal the number of parameters, each ndarray in the list must have + the same shape (slice_shape). + + Returns + ------- + coeff_slices : numpy.ndarray + slices in fit coefficients. Size: (binning..., number of coeffs) + slice_shape + covar_slices : numpy.ndarray + slices in covariance matrix elements. + Size: (binning..., number of coeffs, number of coeffs) + slice_shape + """ + slice_shape = xi[0].shape + for x in xi: + assert x.shape == slice_shape + assert len(xi) == self.num_interp_params + coeff_slices = np.zeros(self.coeff_shape + slice_shape) + covar_slices = np.zeros(self.covars_shape + slice_shape) + for idx in np.ndindex(slice_shape): + pars = collections.OrderedDict() + for i, name in enumerate(self.interpolation_param_names): + pars[name] = xi[i][idx] + hs = self.get_hypersurface(**pars) + slice_idx = (Ellipsis,) + idx + coeff_slices[slice_idx] = hs.fit_coeffts + covar_slices[slice_idx] = hs.fit_cov_mat + return coeff_slices, covar_slices + +
+[docs] + def plot_fits_in_bin(self, bin_idx, ax=None, n_steps=20, **param_kw): + """ + Plot the coefficients as well as covariance matrix elements as a function + of the interpolation parameters. + + Parameters + ---------- + bin_idx : tuple + index of the bin for which to plot the fits + ax : 2D array of axes, optional + axes into which to place the plots. If None (default), + appropriate axes will be generated. Must have at least + size (n_coeff, n_coeff + 1). + n_steps : int, optional + number of steps to plot between minimum and maximum + **param_kw : + Parameters to be fixed when producing slices. If the interpolation + is in N-D, then (N-2) parameters need to be fixed to produce 2D plots + of the remaining 2 parameters and (N-1) need to be fixed to produce a + 1D slice. + """ + plot_dim = self.ndim - len(param_kw.keys()) + assert plot_dim in [1, 2], "plotting only supported in 1D or 2D" + import matplotlib.pyplot as plt + n_coeff = self.coeff_shape[-1] + hs_param_names = list(self._reference_state['params'].keys()) + hs_param_labels = ["intercept"] + [f"{p} p{i}" for p in hs_param_names + for i in range(self._reference_state['params'][p]['num_fit_coeffts'])] + + fig = None + if ax is None: + fig, ax = plt.subplots(nrows=n_coeff, ncols=n_coeff+1, + squeeze=False, sharex=True, + figsize=(3+(5*(n_coeff+1)), 2+(3*n_coeff)) ) + # remember whether the plots need log scale or not, by default not + x_is_log = False + y_is_log = False + + # names of the variables we are plotting + plot_names = set(self.interpolation_param_names) - set(param_kw.keys()) + if plot_dim == 1: + x_name = list(plot_names)[0] + else: + x_name, y_name = list(plot_names) + + # in both 1D and 2D cases, we always plot at least an x-variable + x_unit = self.interp_param_spec[x_name]["values"][0].u + # we need the magnitudes here so that units are unambiguous when we make + # the linspace/geomspace for plotting + x_mags = [v.m_as(x_unit) for v in self.interp_param_spec[x_name]["values"]] + if self.interp_param_spec[x_name]["scales_log"]: + x_plot = np.geomspace(np.min(x_mags), np.max(x_mags), n_steps) + x_is_log = True + else: + x_plot = np.linspace(np.min(x_mags), np.max(x_mags), n_steps) + # we put the unit back later + if plot_dim == 1: + # To make slices, we need to set any variables we do not plot over to the + # value given in param_kw. + slice_args = [] + # We need to make sure that we give the values in the correct order! + for n in self.interpolation_param_names: + if n == x_name: + slice_args.append(x_plot * x_unit) + elif n in param_kw.keys(): + # again, insure that the same unit is used that went into the + # interpolation + param_unit = self.interp_param_spec[n]["values"][0].u + slice_args.append( + np.full(x_plot.shape, param_kw[n].m_as(param_unit)) * param_unit + ) + else: + raise ValueError("parameter neither specified nor plotted") + coeff_slices, covar_slices = self._make_slices(*slice_args) + else: + # if we are in 2D, we need to do the same procedure again for the y-variable + y_unit = self.interp_param_spec[y_name]["values"][0].u + y_mags = [v.m_as(y_unit) for v in self.interp_param_spec[y_name]["values"]] + if self.interp_param_spec[y_name]["scales_log"]: + # we add one step to the size in y so that transposition is unambiguous + y_plot = np.geomspace(np.min(y_mags), np.max(y_mags), n_steps + 1) + y_is_log = True + else: + y_plot = np.linspace(np.min(y_mags), np.max(y_mags), n_steps + 1) + + x_mesh, y_mesh = np.meshgrid(x_plot, y_plot) + slice_args = [] + for n in self.interpolation_param_names: + if n == x_name: + slice_args.append(x_mesh * x_unit) + elif n == y_name: + slice_args.append(y_mesh * y_unit) + elif n in param_kw.keys(): + # again, insure that the same unit is used that went into the + # interpolation + param_unit = self.interp_param_spec[n]["values"][0].u + slice_args.append( + np.full(x_mesh.shape, param_kw[n].m_as(param_unit)) * param_unit + ) + else: + raise ValueError("parameter neither specified nor plotted") + coeff_slices, covar_slices = self._make_slices(*slice_args) + + # first column plots fit coefficients + for i in range(n_coeff): + z_slice = coeff_slices[bin_idx][i] + if plot_dim == 1: + ax[i, 0].plot(x_plot, z_slice, label='interpolation') + # Plotting the original input points only works if the interpolation + # is in 1D. If we are plotting a 1D slice from a 2D interpolation, this + # does not work. + # The number of fit points is the first dimension in self._coeff_z + if plot_dim == self.ndim: + slice_idx = (Ellipsis,) + bin_idx + (i,) + ax[i, 0].scatter(x_mags, self._coeff_z[slice_idx], + color='k', marker='x', label='fit points') + ax[i, 0].set_ylabel(hs_param_labels[i]) + else: + pc = ax[i, 0].pcolormesh(x_mesh, y_mesh, z_slice) + cbar = plt.colorbar(pc, ax=ax[i, 0]) + cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0)) + ax[i, 0].set_ylabel(y_name) + ax[i, 0].set_xlabel(x_name) + + # later column plots the elements of the covariance matrix + for j in range(0, n_coeff): + z_slice = covar_slices[bin_idx][i, j] + if plot_dim == 1: + ax[i, j+1].plot(x_plot, z_slice, label='interpolation') + # Same problem as above, only in 1D case can this be shown + # the number of points is the first dim in self._covar_z + if plot_dim == self.ndim: + coeff_idx = (Ellipsis,) + bin_idx + (i, j) + ax[i, j+1].scatter(x_mags, self._covar_z[coeff_idx], + color='k', marker='x', label='fit points') + else: + pc = ax[i, j+1].pcolormesh(x_mesh, y_mesh, z_slice) + cbar = plt.colorbar(pc, ax=ax[i, j+1]) + cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0)) + ax[i, j+1].set_ylabel(y_name) + ax[i, j+1].set_xlabel(x_name) + + if plot_dim == 1: + # in the 1D case, labels can be placed on the x and y axes + for j in range(n_coeff+1): + ax[-1, j].set_xlabel(x_name) + ax[0, 0].set_title('coefficient') + for j in range(n_coeff): + ax[0, j+1].set_title(f'cov. {hs_param_labels[j]}') + else: + # in the 2D case, we need separate annotations + rows = hs_param_labels + cols = ["coefficient"] + [f"cov. {hl}" for hl in hs_param_labels] + pad = 20 + for a, col in zip(ax[0], cols): + a.annotate(col, xy=(0.5, 1), xytext=(0, pad), + xycoords='axes fraction', textcoords='offset points', + size='x-large', ha='center', va='baseline') + + for a, row in zip(ax[:, 0], rows): + a.annotate(row, xy=(0, 0.5), xytext=(-a.yaxis.labelpad - pad, 0), + xycoords=a.yaxis.label, textcoords='offset points', + size='x-large', ha='right', va='center') + for i, j in np.ndindex((n_coeff, n_coeff+1)): + if x_is_log: ax[i, j].set_xscale("log") + if y_is_log: ax[i, j].set_yscale("log") + ax[i, j].grid() + if plot_dim == 1: + ax[i, j].legend() + # ax[i, j].relim() + # ax[i, j].autoscale_view() + if not x_is_log: + ax[i, j].ticklabel_format(style='sci', scilimits=(0, 0), axis="x") + if not y_is_log: + ax[i, j].ticklabel_format(style='sci', scilimits=(0, 0), axis="y") + + if fig is not None : + fig.tight_layout() + if plot_dim == 2: + fig.subplots_adjust(left=0.15, top=0.95) + return fig + else : + return
+
+ + + +
+[docs] +def pipeline_cfg_from_states(state_dict): + """Recover a pipeline cfg containing PISA objects from a raw state. + + When a pipeline configuration is stored to JSON, the PISA objects turn into + their serialized states. This function looks through the dictionary returned by + `from_json` and recovers the PISA objects such as `ParamSet` and `MultiDimBinning`. + + It should really become part of PISA file I/O functionality to read and write + PISA objects inside dictionaries/lists into a JSON and be able to recover + them... + """ + + # TODO: Make this a core functionality of PISA + + # This is just a mess... some objects have a `from_state` method, some take the + # unpacked state dict as input, some take the state... + + pipeline_cfg = collections.OrderedDict() + for stage_key in state_dict.keys(): + # need to check all of this manually... no automatic way to do it :( + if stage_key == "pipeline": + pipeline_cfg[stage_key] = copy.deepcopy(state_dict[stage_key]) + pipeline_cfg[stage_key]["output_key"] = tuple( + pipeline_cfg[stage_key]["output_key"]) + binning_state = pipeline_cfg[stage_key]["output_binning"] + pipeline_cfg[stage_key]["output_binning"] = MultiDimBinning(**binning_state) + continue + # undo what we did in `serialize_pipeline_cfg` by splitting the keys into tuples + tuple_key = tuple(stage_key.split("__")) + pipeline_cfg[tuple_key] = copy.deepcopy(state_dict[stage_key]) + for k in ["calc_mode", "apply_mode", "node_mode"]: + if k in pipeline_cfg[tuple_key]: + if isinstance(pipeline_cfg[tuple_key][k], collections.abc.Mapping): + pipeline_cfg[tuple_key][k] = MultiDimBinning( + **pipeline_cfg[tuple_key][k]) + if "params" in pipeline_cfg[tuple_key].keys(): + pipeline_cfg[tuple_key]["params"] = ParamSet( + pipeline_cfg[tuple_key]["params"]) + # if any stage takes any other arguments that we didn't think of here, they + # won't work + return pipeline_cfg
+ + +
+[docs] +def serialize_pipeline_cfg(pipeline_cfg): + """Turn a pipeline configuration into something we can store to JSON. + + It doesn't work by default because tuples are not allowed as keys when storing to + JSON. All we do is to turn the tuples into strings divided by a double underscore. + """ + serializable_state = collections.OrderedDict() + serializable_state["pipeline"] = pipeline_cfg["pipeline"] + for k in pipeline_cfg.keys(): + if k == "pipeline": continue + flat_key = "__".join(k) + serializable_state[flat_key] = pipeline_cfg[k] + # this isn't _really_ a serializable state, the objects are still PISA objects... + # bit it will convert correctly when thrown into `to_json` + return serializable_state
+ + + +
+[docs] +def assemble_interpolated_fits(fit_directory, output_file, drop_fit_maps=False, leftout_param=None, leftout_surface=None): + """After all of the fits on the cluster are done, assemble the results to one JSON. + + The JSON produced by this function is what `load_interpolated_hypersurfaces` + expects. + """ + assert os.path.isdir(fit_directory), "fit directory does not exist" + metadata = from_json(os.path.join(fit_directory, "metadata.json")) + + combined_data = collections.OrderedDict() + combined_data["interpolation_param_spec"] = metadata["interpolation_param_spec"] + + # Loop over grid points + hs_fits = [] + grid_shape = tuple(metadata["grid_shape"]) + for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): + + # Load grid point data + gridpoint_json = os.path.join(fit_directory, f"gridpoint_{job_idx:06d}.json.bz2") + logging.info(f"Reading {gridpoint_json}") + gridpoint_data = from_json(gridpoint_json) + + # Check the loaded data + assert job_idx == gridpoint_data["job_idx"] + assert np.all(grid_idx == gridpoint_data["grid_idx"]) + # TODO: Offer to run incomplete fits locally + assert gridpoint_data["fit_successful"], f"job no. {job_idx} not finished" + + # Drop fit maps if requested (can significantly reduce file size) + if drop_fit_maps : + for key, hs_state in gridpoint_data["hs_fit"].items() : + hs_state["fit_maps_raw"] = None + hs_state["fit_maps_norm"] = None + if leftout_param is not None: + for surface in leftout_surface: + gridpoint_data["hs_fit"][surface]["params"][leftout_param]["fit_coeffts"] *= 0.0 + print(gridpoint_data["hs_fit"][surface]["params"][leftout_param]["fit_coeffts"]) + + # Add grid point data to output file + hs_fits.append(collections.OrderedDict( + param_values=gridpoint_data["param_values"], + hs_fit=gridpoint_data["hs_fit"] + )) + + # Write the output file + combined_data["hs_fits"] = hs_fits + to_file(combined_data, output_file)
+ + + +
+[docs] +def get_incomplete_job_idx(fit_directory): + """Get job indices of fits that are not flagged as successful.""" + + assert os.path.isdir(fit_directory), "fit directory does not exist" + metadata = from_json(os.path.join(fit_directory, "metadata.json")) + grid_shape = tuple(metadata["grid_shape"]) + failed_idx = [] + for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): + try: + gridpoint_json = os.path.join(fit_directory, + f"gridpoint_{job_idx:06d}.json.bz2") + logging.info(f"Reading {gridpoint_json}") + gridpoint_data = from_json(gridpoint_json) + except: + break + if not gridpoint_data["fit_successful"]: + failed_idx.append(job_idx) + job_idx += 1 + return failed_idx
+ + +
+[docs] +def run_interpolated_fit(fit_directory, job_idx, skip_successful=False): + """Run the hypersurface fit for a grid point. + + If `skip_successful` is true, do not run if the `fit_successful` flag is already + True. + """ + + #TODO a lot of this is copied from fit_hypersurfaces in hypersurface.py, would be safer to make more OAOO + #TODO Copy the param value storage stuff from fit_hypersurfaces across in the meantime + + assert os.path.isdir(fit_directory), "fit directory does not exist" + + gridpoint_json = os.path.join(fit_directory, f"gridpoint_{job_idx:06d}.json.bz2") + gridpoint_data = from_json(gridpoint_json) + + if skip_successful and gridpoint_data["fit_successful"]: + logging.info(f"Fit at job index {job_idx} already successful, skipping...") + return + + metadata = from_json(os.path.join(fit_directory, "metadata.json")) + + interpolation_param_spec = metadata["interpolation_param_spec"] + + # this is a pipeline configuration in the form of an OrderedDict + nominal_dataset = metadata["nominal_dataset"] + # Why can we still not load PISA objects from JSON that are inside a dict?! Grrr... + nominal_dataset["pipeline_cfg"] = pipeline_cfg_from_states( + nominal_dataset["pipeline_cfg"] + ) + # this is a list of pipeline configurations + sys_datasets = metadata["sys_datasets"] + for sys_dataset in sys_datasets: + sys_dataset["pipeline_cfg"] = pipeline_cfg_from_states( + sys_dataset["pipeline_cfg"] + ) + # this is a dict of param_name : value pairs + param_values = gridpoint_data["param_values"] + # we do a redundant check to make sure the parameter values at this grid point are + # correct + interpolation_param_names = metadata["interpolation_param_names"] + grid_shape = tuple(metadata["grid_shape"]) + # the grid point index of this job + grid_idx = list(np.ndindex(grid_shape))[job_idx] + for i, n in enumerate(interpolation_param_names): + ms = "Inconsistent parameter values at grid point!" + assert interpolation_param_spec[n]["values"][grid_idx[i]] == param_values[n], ms + + # now we need to adjust the values of the parameter in all pipelines for this point + logging.info(f"updating pipelines with parameter values: {param_values}") + for dataset in [nominal_dataset] + sys_datasets: + for stage_cfg in dataset["pipeline_cfg"].values(): + if "params" not in stage_cfg.keys(): continue + for param in interpolation_param_names: + if param in stage_cfg["params"].names: + stage_cfg["params"][param].value = param_values[param] + + # these are the parameters of the hypersurface, NOT the ones we interpolate them + # over! + hypersurface_params = [] + for param_state in metadata["hypersurface_params"]: + hypersurface_params.append(HypersurfaceParam.from_state(param_state)) + + def find_hist_stage(pipeline): + """Locate the index of the hist stage in a pipeline.""" + hist_idx_found = False + for i, s in enumerate(pipeline.stages): + if s.__class__.__name__ == "hist": + hist_idx = i + hist_idx_found = True + break + if not hist_idx_found: + raise RuntimeError("Could not find histogram stage in pipeline, aborting.") + return hist_idx + + # We create Pipeline objects, get their outputs and then forget about the Pipeline + # object on purpose! The memory requirement to hold all systematic sets at the same + # time is just too large, especially on the cluster. The way we do it below we + # only need enough memory for one dataset at a time. + + for dataset in [nominal_dataset] + sys_datasets: + pipeline = Pipeline(dataset["pipeline_cfg"]) + dataset["mapset"] = pipeline.get_outputs() + # get the un-weighted event counts as well so that we can exclude bins + # with too little statistics + # First, find out which stage is the hist stage + hist_idx = find_hist_stage(pipeline) + pipeline.stages[hist_idx].unweighted = True + dataset["mapset_unweighted"] = pipeline.get_outputs() + del pipeline + + # Merge maps according to the combine regex, if one was provided + combine_regex = metadata["combine_regex"] + if combine_regex is not None: + for dataset in [nominal_dataset] + sys_datasets: + dataset["mapset"] = dataset["mapset"].combine_re(combine_regex) + dataset["mapset_unweighted"] = dataset["mapset_unweighted"].combine_re(combine_regex) + + minimum_mc = metadata["minimum_mc"] + # Remove bins (i.e. set their count to zero) that have too few MC events + for dataset in sys_datasets + [nominal_dataset]: + for map_name in dataset["mapset"].names: + insuff_mc = dataset["mapset_unweighted"][map_name].nominal_values < minimum_mc + # Setting the hist to zero sets both nominal value and std_dev to zero + dataset["mapset"][map_name].hist[insuff_mc] = 0. + + hypersurface_fit_kw = metadata["hypersurface_fit_kw"] + hypersurfaces = collections.OrderedDict() + log = metadata["log"] # flag determining whether hs fit is run in log-space or not + for map_name in nominal_dataset["mapset"].names: + nominal_map = nominal_dataset["mapset"][map_name] + nominal_param_values = nominal_dataset["sys_params"] + + sys_maps = [sys_dataset["mapset"][map_name] for sys_dataset in sys_datasets] + sys_param_values = [sys_dataset["sys_params"] for sys_dataset in sys_datasets] + + hypersurface = Hypersurface( + # Yes, this MUST be a deepcopy! Otherwise weird memory overwrites happen + # and all the numbers get jumbled across the hypersurfaces of different maps + params=copy.deepcopy(hypersurface_params), + initial_intercept=0. if log else 1., # Initial value for intercept + log=log + ) + + hypersurface.fit( + nominal_map=nominal_map, + nominal_param_values=nominal_param_values, + sys_maps=sys_maps, + sys_param_values=sys_param_values, + norm=True, + # Is the space or loading time really a problem? + # keep_maps=False, # it would take a lot more space otherwise + **hypersurface_fit_kw + ) + + logging.debug("\nFitted hypersurface report:\n%s" % hypersurface) + hypersurfaces[map_name] = hypersurface + + gridpoint_data["hs_fit"] = hypersurfaces + gridpoint_data["fit_successful"] = True + + to_json(gridpoint_data, gridpoint_json)
+ + + +
+[docs] +def prepare_interpolated_fit( + nominal_dataset, sys_datasets, params, fit_directory, interpolation_param_spec, + combine_regex=None, log=False, minimum_mc=0, **hypersurface_fit_kw +): + ''' + Writes steering files for fitting hypersurfaces on a grid of arbitrary parameters. + The fits can then be run on a cluster with `run_interpolated_fit`. + + Parameters + ---------- + nominal_dataset : dict + Definition of the nominal dataset. Specifies the pipleline with which the maps + can be created, and the values of all systematic parameters used to produced the + dataset. + Format must be: + nominal_dataset = { + "pipeline_cfg" = <pipeline cfg file (either cfg file path or dict)>), + "sys_params" = { param_0_name : param_0_value_in_dataset, ..., param_N_name : param_N_value_in_dataset } + } + Sys params must correspond to the provided HypersurfaceParam instances provided + in the `params` arg. + + sys_datasets : list of dicts + List of dicts, where each dict defines one of the systematics datasets to be + fitted. The format of each dict is the same as explained for `nominal_dataset` + + params : list of HypersurfaceParams + List of HypersurfaceParams instances that define the hypersurface. Note that + this defined ALL hypersurfaces fitted in this function, e.g. only supports a + single parameterisation for all maps (this is almost always what you want). + + output_directory : str + Directory in which the fits will be run. Steering files for the fits to be run + will be stored here. + + combine_regex : list of str, or None + List of string regex expressions that will be used for merging maps. Used to + combine similar species. Must be something that can be passed to the + `MapSet.combine_re` function (see that functions docs for more details). Choose + `None` is do not want to perform this merging. + + interpolation_param_spec : collections.OrderedDict + Specification of parameter grid that hypersurfaces should be interpolated over. + The dict should have the following form:: + interpolation_param_spec = { + 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} + 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} + ... + 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} + } + The hypersurfaces will be fit on an N-dimensional rectilinear grid over + parameters 1 to N. The flag `scales_log` indicates that the interpolation over + that parameter should happen in log-space. + + minimum_mc : int, optional + Minimum number of un-weighted MC events required in each bin. + + hypersurface_fit_kw : kwargs + kwargs will be passed on to the calls to `Hypersurface.fit` + ''' + + # Take (deep) copies of lists/dicts to avoid modifying the originals + # Useful for cases where this function is called in a loop (e.g. leave-one-out tests) + nominal_dataset = copy.deepcopy(nominal_dataset) + sys_datasets = copy.deepcopy(sys_datasets) + params = copy.deepcopy(params) + + # Check types + assert isinstance(sys_datasets, collections.abc.Sequence) + assert isinstance(params, collections.abc.Sequence) + assert isinstance(fit_directory, str) + # there must not be any ambiguity between fitting the hypersurfaces and + # interpolating them later + msg = "interpolation params must be specified as a dict with ordered keys" + assert isinstance(interpolation_param_spec, collections.OrderedDict), msg + for k, v in interpolation_param_spec.items(): + assert set(v.keys()) == {"values", "scales_log"} + assert isinstance(v["values"], collections.abc.Sequence) + # We need to extract the magnitudes from the Quantities to avoid a + # UnitStrippedWarning. For some reason, doing `np.min(v["values"])` messes up + # the data structure inside the values in a way that can cause a crash when we + # try to serialize the values later. Lesson: Stripping units inadvertently can + # have strange, unforeseen consequences. + mags = [x.m for x in v["values"]] + if v["scales_log"] and np.min(mags) <= 0: + raise ValueError("A log-scaling parameter cannot be equal to or less " + "than zero!") + + # Check output format and path + assert os.path.isdir(fit_directory), "fit directory does not exist" + + # Check formatting of datasets is as expected + all_datasets = [nominal_dataset] + sys_datasets + for dataset in all_datasets: + assert isinstance(dataset, collections.abc.Mapping) + assert "pipeline_cfg" in dataset + assert isinstance(dataset["pipeline_cfg"], (str, collections.abc.Mapping)) + assert "sys_params" in dataset + assert isinstance(dataset["sys_params"], collections.abc.Mapping) + + dataset["pipeline_cfg"] = serialize_pipeline_cfg(dataset["pipeline_cfg"]) + + # Check params + assert len(params) >= 1 + for p in params: + assert isinstance(p, HypersurfaceParam) + + # Report inputs + msg = "Hypersurface fit details :\n" + msg += f" Num params : {len(params)}\n" + msg += f" Num fit coefficients : {sum([p.num_fit_coeffts for p in params])}\n" + msg += f" Num datasets : 1 nominal + {len(sys_datasets)} systematics\n" + msg += f" Nominal values : {nominal_dataset['sys_params']}\n" + msg += "Hypersurface fits are prepared on the following grid:\n" + msg += str(interpolation_param_spec) + logging.info(msg) + + # because we require this to be an OrderedDict, there is no ambiguity in the + # construction of the mesh here + param_names = list(interpolation_param_spec.keys()) + grid_shape = tuple(len(v["values"]) for v in interpolation_param_spec.values()) + + # We store all information needed to run a fit in metadata + metadata = collections.OrderedDict( + interpolation_param_spec=interpolation_param_spec, + interpolation_param_names=param_names, # convenience + grid_shape=grid_shape, # convenience + nominal_dataset=nominal_dataset, + sys_datasets=sys_datasets, + hypersurface_params=params, + combine_regex=combine_regex, + log=log, + minimum_mc=minimum_mc, + hypersurface_fit_kw=hypersurface_fit_kw + ) + + to_json(metadata, os.path.join(fit_directory, "metadata.json")) + + # we write on JSON file for each grid point + for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): + # Although this is technically redundant, we store the parameter values + # explicitly for each grid point. + param_values = {} + for i, n in enumerate(param_names): + param_values[n] = interpolation_param_spec[n]["values"][grid_idx[i]] + + gridpoint_data = { + "param_values": param_values, + "hs_fit": None, + "job_idx": job_idx, + "grid_idx": grid_idx, + "fit_successful": False + } + to_json(gridpoint_data, os.path.join(fit_directory, + f"gridpoint_{job_idx:06d}.json.bz2")) + + logging.info(f"Grid fit preparation complete! Total number of jobs: {job_idx+1}") + return job_idx+1 # zero-indexing
+ + +
+[docs] +def load_interpolated_hypersurfaces(input_file, expected_binning=None): + ''' + Load a set of interpolated hypersurfaces from a file. + + Analogously to "load_hypersurfaces", this function returns a + collection with a HypersurfaceInterpolator object for each Map. + + Parameters + ---------- + input_file : str + A JSON input file as produced by fit_hypersurfaces if interpolation params + were given. It has the form:: + { + interpolation_param_spec = { + 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} + 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} + ... + 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} + }, + 'hs_fits': [ + <list of dicts where keys are map names such as 'nue_cc' and values + are hypersurface states> + ] + } + + Returns + ------- + collections.OrderedDict + dictionary with a :obj:`HypersurfaceInterpolator` for each map + ''' + assert isinstance(input_file, str) + + if expected_binning is not None: + assert is_binning(expected_binning) + + logging.info(f"Loading interpolated hypersurfaces from file: {input_file}") + + # Load the data from the file + input_data = from_file(input_file) + + + # + # Backwards compatibility handling + # + + # For older file formats (for example those used in the oscNext verification sample), some handling is + # reequired to convert the input data format to match the expectation of this function + + # Check for missing data + if "interpolation_param_spec" not in input_data : + + # Confirm the format of what we did find + assert "interp_params" in input_data + assert "hs_fits" in input_data + assert "kind" in input_data + + # The current code only handles linear interpolation + assert input_data["kind"] == "linear", f"Only linear interpolation suppored (input file specifies \'{input_data['kind']}\')" + + # Populate the interpolation param spec + input_data["interpolation_param_spec"] = collections.OrderedDict() + for param_def in input_data["interp_params"] : + param_name = param_def["name"] + input_data["interpolation_param_spec"][param_name] = { + "scales_log" : False, + "values" : [ hs_fit_dict["param_values"][param_name] for hs_fit_dict in input_data["hs_fits"] ], + } + + # Load the individual HS files to get the HS states (as this code now expects for the contents of `hs_fits`) + for hs_fit_dict in input_data["hs_fits"] : + hypersurfaces = load_hypersurfaces(hs_fit_dict["file"], expected_binning=expected_binning) + hs_fit_dict["hs_fit"] = collections.OrderedDict() + for key, hypersurface in hypersurfaces.items() : + hs_fit_dict["hs_fit"][key] = hypersurface + + + # + # Load hypersurface interpolator(s) + # + + # check the file contents + assert set(['interpolation_param_spec', 'hs_fits']).issubset( + set(input_data.keys())), 'missing keys' + + # input_data['hs_fits'] is a list of dicts, each dict contains "param_values" + # and "hs_fit" + map_names = None + logging.info("Reading file complete, generating hypersurfaces...") + for hs_fit_dict in input_data['hs_fits']: + + # this might not be the actual Hypersurface, but a dict with the serialized Hypersurface state + hs_state_maps = hs_fit_dict["hs_fit"] + if map_names is None: + map_names = list(hs_state_maps.keys()) + else: + assert set(map_names) == set(hs_state_maps.keys()), "inconsistent maps" + + # When data is recovered from JSON, the object states are not automatically + # converted to the corresponding objects, so we need to do it manually here + # (unless what we loaded was already a hypersurface instance). + for map_name in map_names: + if isinstance(hs_state_maps[map_name], Hypersurface) : + hs_state_maps[map_name] = hs_state_maps[map_name] + else : + hs_state_maps[map_name] = Hypersurface.from_state(hs_state_maps[map_name]) + logging.info(f"Read hypersurface maps: {map_names}") + + # Check binning + if expected_binning is not None: + for map_name, hypersurface in hs_state_maps.items(): + assert hypersurface.binning.hash == expected_binning.hash, "Binning of loaded hypersurfaces does not match the expected binning" + + # Now we have a list of dicts where the map names are on the lower level. + # We need to convert this into a dict of HypersurfaceInterpolator objects. + output = collections.OrderedDict() + for m in map_names: + hs_fits = [{"param_values": fd["param_values"], "hs_fit": fd['hs_fit'][m]} for fd in input_data['hs_fits']] + output[m] = HypersurfaceInterpolator(input_data['interpolation_param_spec'], hs_fits) + + return output
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hypersurface/hypersurface.html b/_modules/pisa/utils/hypersurface/hypersurface.html new file mode 100644 index 000000000..d79c31e66 --- /dev/null +++ b/_modules/pisa/utils/hypersurface/hypersurface.html @@ -0,0 +1,2664 @@ + + + + + + pisa.utils.hypersurface.hypersurface — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.utils.hypersurface.hypersurface

+"""
+Tools for working with hypersurfaces, which are continuous functions in N-D
+with arbitrary functional forms.
+
+Hypersurfaces can be used to model systematic uncertainties derived from discrete
+simulation datasets, for example for detedctor uncertainties.
+"""
+
+__all__ = ['Hypersurface', 'HypersurfaceParam', 'fit_hypersurfaces',
+           'load_hypersurfaces']
+
+__author__ = 'T. Stuttard, A. Trettin'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+import os
+import collections
+import copy
+
+import numpy as np
+from iminuit import Minuit
+
+from pisa import FTYPE, ureg
+from pisa.utils.jsons import from_json, to_json
+from pisa.core.pipeline import Pipeline
+from pisa.core.binning import OneDimBinning, MultiDimBinning, is_binning
+from pisa.core.map import Map
+from pisa.core.param import Param, ParamSet
+from pisa.utils.resources import find_resource
+from pisa.utils.fileio import mkdir
+from pisa.utils.log import logging, set_verbosity
+from pisa.utils.comparisons import ALLCLOSE_KW
+from uncertainties import ufloat, correlated_values
+from uncertainties import unumpy as unp
+from .hypersurface_plotting import plot_bin_fits, plot_bin_fits_2d
+
+'''
+Hypersurface functional forms
+
+   Define functional forms for HypersurfaceParam instances here.
+
+   Functions defined here MUST:
+     - Support numba guvectorization.
+     - Function arguments must observed this convention:
+         `p`, `<coefficient 0>`, ..., `<coefficient N>`, `out` where `p` is the
+         systematic parameter, `out is the array to write the results to, and there are
+         N coefficients of the parameterisation.
+
+   The format of these arguments depends on the use case, of which there are two:
+     - When fitting the function coefficients. This is done bin-wise using multiple
+     datasets.
+       - Params are then: `p` is array (one value per dataset), coefficients and `out`
+         are scalar (representing a single bin).
+     - Evaluating a fitted hypersurface. This is done for all bins simultaneously, using
+       a single value for p.
+       - Params are then: `p` is scalar (current value of systematic parameter,
+         coefficients and `out` are arrays representing the hypersurfaces of all bins
+         per bin.
+'''
+
+
+class linear_hypersurface_func(object):
+    '''
+    Linear hypersurface functional form
+
+    f(p) = m * p
+    '''
+
+    def __init__(self):
+        self.nargs = 1
+
+    def __call__(self, p, m, out):
+        result = m * p
+        np.copyto(src=result, dst=out)
+
+    def grad(self, p, m, out):
+        # because m itself is not in the actual calculation, we have to broadcast
+        # manually to yield the same shape as if we had done m*p and added one axis
+        foo = m*p
+        result = np.broadcast_to(p, foo.shape)[..., np.newaxis]
+        np.copyto(src=result, dst=out)
+
+
+class quadratic_hypersurface_func(object):
+    '''
+    Quadratic hypersurface functional form
+
+    f(p) = m1*p + m2*p**2
+    '''
+
+    def __init__(self):
+        self.nargs = 2
+
+    def __call__(self, p, m1, m2, out):
+        result = m1*p + m2*p**2
+        np.copyto(src=result, dst=out)
+    # the gradient *must* have all these arguments, even if they are un-used!
+
+    def grad(self, p, m1, m2, out):
+        # because m itself is not in the actual calculation, we have to broadcast
+        # manually to yield the same shape as if we had done m*p and stacked on the last
+        # axis
+        foo = m1*p
+        result = np.stack([np.broadcast_to(p, foo.shape),
+                           np.broadcast_to(p**2, foo.shape)],
+                          axis=-1
+                          )
+        np.copyto(src=result, dst=out)
+
+class exponential_hypersurface_func(object):
+    '''
+    Exponential hypersurface functional form
+
+    f(p) = exp(b*p) - 1
+
+    The functional form ensures that it is zero at the nominal point.
+    '''
+
+    def __init__(self):
+        self.nargs = 1
+
+    def __call__(self, p, b, out):
+        result = np.exp(b*p) - 1.
+        np.copyto(src=result, dst=out)
+
+    def grad(self, p, b, out):
+        # because parameters and coefficients both appear, everything is broadcast
+        # automatically
+        result = np.array([p*np.exp(b*p)])[..., np.newaxis]
+        np.copyto(src=result, dst=out)
+
+class scaled_exponential_hypersurface_func(object):
+    '''
+    Exponential hypersurface functional form
+
+    f(p) = (a + 1) * (exp(b*p) - 1)
+
+    The functional form is chosen such that it is zero at the nominal point.
+    If a strong prior is imposed on a, it becomes equivalent to the un-scaled
+    exponential hypersurface function.
+    '''
+
+    def __init__(self):
+        self.nargs = 2
+
+    def __call__(self, p, a, b, out):
+        result = (a + 1.) * (np.exp(b*p) - 1.)
+        np.copyto(src=result, dst=out)
+
+    def grad(self, p, a, b, out):
+        # because parameters and coefficients both appear, everything is broadcast
+        # automatically
+        result = np.stack([np.exp(b*p) - 1., (a + 1.)*p*np.exp(b*p)], axis=-1)
+        np.copyto(src=result, dst=out)
+
+class logarithmic_hypersurface_func(object):
+    '''
+    Logarithmic hypersurface functional form
+
+    f(p) = log(1 + mp)
+
+    Allows the fit of an effectively linear multiplicative
+    function while in logmode, since:
+    exp(log(1 + mp) + h) = (1 + mp) exp(h)
+    '''
+
+    def __init__(self):
+        self.nargs = 1
+
+    def __call__(self, p, m, out):
+        result = np.log(1 + m*p)
+        np.copyto(src=result, dst=out)
+
+    def grad(self, p, m, out):
+        # because parameters and coefficients both appear, everything is broadcast
+        # automatically
+        result = np.array(p/(1 + m*p))[..., np.newaxis]
+        np.copyto(src=result, dst=out)
+
+
+# Container holding all possible functions
+HYPERSURFACE_PARAM_FUNCTIONS = collections.OrderedDict()
+HYPERSURFACE_PARAM_FUNCTIONS["linear"] = linear_hypersurface_func
+HYPERSURFACE_PARAM_FUNCTIONS["quadratic"] = quadratic_hypersurface_func
+HYPERSURFACE_PARAM_FUNCTIONS["exponential"] = exponential_hypersurface_func
+HYPERSURFACE_PARAM_FUNCTIONS["exponential_scaled"] = scaled_exponential_hypersurface_func
+HYPERSURFACE_PARAM_FUNCTIONS["logarithmic"] = logarithmic_hypersurface_func
+
+
+[docs] +class Hypersurface(object): + ''' + A class defining the hypersurface + + Contains : + - A single common intercept + - N systematic parameters, inside which the functional form is defined + + This class can be configured to hold both the functional form of the hypersurface + and values (likely fitted from simulation datasets) for the free parameters of this + functional form. + + Fitting functionality is provided to fit these free parameters. + + This class can simultaneously hold hypersurfaces for every bin in a histogram (Map). + + The functional form of the systematic parameters can be arbitrarily complex. + + The class has a fit method for fitting the hypersurface to some data (e.g. + discrete systematics sets). + + Serialization functionality is included to allow fitted hypersurfaces to be stored + to a file and re-loaded later (e.g. to be used in analysis). + + The main use cases are: + 1) Fit hypersurfaces + - Define the desired HypersurfaceParams (functional form, intial coefficient guesses). + - Instantiate the `Hypersurface` class, providing the hypersurface params and initial intercept guess. + - Use `Hypersurface.fit` function (or more likely the `fit_hypersurfaces` helper function provided below), + to fit the hypersurface coefficients to some provided datasets. + - Store to file + 2) Evaluate an existing hypersurface + - Load existing fitted Hypersurface from a file (`load_hypersurfaces` helper function) + - Get the resulting hypersurface value for each bin for a given set of systemaic param + values using the `Hypersurface.evaluate` method. + - Use the hypersurface value for each bin to re-weight events + + The class stores information about the datasets used to fit the hypersurfaces, including the Maps + used and nominal and systematic parameter values. + + Parameters + ---------- + params : list + A list of HypersurfaceParam instances defining the hypersurface. + The `initial_fit_coeffts` values in this instances will be used as the starting + point for any fits. + + initial_intercept : float + Starting point for the hypersurface intercept in any fits + + log : bool, optional + Set hypersurface to log mode. The surface is fit to the log of the bin counts. + The fitted surface is exponentiated during evaluation. Default: False + ''' + + def __init__(self, params, initial_intercept=None, log=False): + + # Store args + self.initial_intercept = initial_intercept + # Store params as dict for ease of lookup + self.params = collections.OrderedDict() + for param in params: + assert param.name not in self.params, "Duplicate param name found : %s" % param.name + self.params[param.name] = param + + self.log = log + # Internal state + self._initialized = False + + # Containers for storing fitting information + self.fit_complete = False + self.fit_info_stored = False + self.fit_maps_norm = None + self.fit_maps_smooth = None + self.fit_maps_raw = None + self.fit_chi2 = None + self.fit_cov_mat = None + self.fit_method = None + + # Also add option store the pipeline param values used to generate the + # maps that are the inouts to the fits for these hypersurfaces. They are + # not actually used in the fit and so this variable is generally `None`, + # but a user can set them externally during the fitting process so that + # they can be stored for for future reference + self.fit_pipeline_param_values = None + + # Serialization + self._serializable_state = None + + # Legacy handling + self.using_legacy_data = False + + def _init(self, binning, nominal_param_values): + ''' + Actually initialise the hypersurface. + + Internal function, not to be called by a user. + ''' + + # + # Binning + # + + # Store the binning + self.binning = binning + + # Set a default initial intercept value if none provided + if self.initial_intercept is None: + self.initial_intercept = 0. if self.log else 1. + + # Create the fit coefficient arrays + # Have one fit per bin + self.intercept = np.full( + self.binning.shape, self.initial_intercept, dtype=FTYPE) + self.intercept_sigma = np.full_like(self.intercept, np.NaN) + for param in list(self.params.values()): + param._init_fit_coefft_arrays(self.binning) + + # + # Nominal values + # + + # Store the nominal param values + # TODO better checks, including not already set + for param in list(self.params.values()): + param.nominal_value = nominal_param_values[param.name] + + # + # Done + # + + self._initialized = True + + @property + def initialized(self): + ''' + Return flag indicating if hypersurface has been initialized + Not giving use direct write-access to the variable as they should nt be setting it themselves + ''' + return self._initialized + + @property + def param_names(self): + ''' + Return the (ordered) names of the systematic parameters + ''' + return list(self.params.keys()) + +
+[docs] + def evaluate(self, param_values, bin_idx=None, return_uncertainty=False): + ''' + Evaluate the hypersurface, using the systematic parameter values provided. + Uses the current internal values for all functional form coefficients. + + Parameters + ---------- + param_values : dict + A dict specifying the values of the systematic parameters to use in the evaluation. + Format is : + { sys_param_name_0 : sys_param_0_val, ..., sys_param_name_N : sys_param_N_val }. + The keys must be string and correspond to the HypersurfaceParam instances. + The values must be scalars. + + bin_idx : tuple or None + Optionally can specify a particular bin (using numpy indexing). d + Othewise will evaluate all bins. + + return_uncertainty : bool, optional + return the uncertainty on the output (default: False) + ''' + + assert self._initialized, "Cannot evaluate hypersurface, it haas not been initialized" + + # + # Check inputs + # + + # Determine number of sys param values (per sys param) + # This will be >1 when fitting, and == 1 when evaluating the hypersurface within the stage + num_param_values = np.asarray(list(param_values.values())[0]).size + + # Check same number of values for all sys params + for k, v in list(param_values.items()): + n = np.asarray(v).size + assert n == num_param_values, "All sys params must have the same number of values" + + # Determine whether using single bin or not + single_bin_mode = bin_idx is not None + + # + # Prepare output array + # + + # Determine shape of output array + # Two possible cases, with limitations on both based on how the sys param functional forms are defined + if not single_bin_mode: + # Case 1 : Calculating for all bins simultaneously (e.g. `bin_idx is None`) + # Only support a single scalar value for each systematic parameters + # Use case is evaluating the hypersurfaces during the hypersurface stage + assert num_param_values == 1, "Can only provide one value per sys param when evaluating all bins simultaneously" + for v in list(param_values.values()): + assert np.isscalar( + v), "sys param values must be a scalar when evaluating all bins simultaneously" + out_shape = self.binning.shape + bin_idx = Ellipsis + + else: + # Case 2 : Calculating for multiple sys param values, but only a single bin + # Use case is fitting the hypersurfaces fucntional form fit params + out_shape = (num_param_values,) + + # Create the output array + out = np.full(out_shape, np.NaN, dtype=FTYPE) + + # + # Evaluate the hypersurface + # + + # Start with the intercept + for i in range(num_param_values): + if single_bin_mode: + out[i] = self.intercept[bin_idx] + else: + np.copyto(src=self.intercept[bin_idx], dst=out[bin_idx]) + + # Evaluate each individual parameter + for k, p in list(self.params.items()): + param_val = param_values[k] if self.using_legacy_data else param_values[k] - p.nominal_value + p.evaluate(param_val, out=out, bin_idx=bin_idx) + + output_factors = np.exp(out) if self.log else out + + if return_uncertainty: + # create buffer array for the gradients + n_coeffs = 1 # start with 1 because intercept is an additional coefficient + for param in list(self.params.values()): + n_coeffs += param.num_fit_coeffts + gradient_buffer = np.full( + out_shape + (n_coeffs,), np.NaN, dtype=FTYPE) + # Start with the intercept, its gradient is always 1 + gradient_buffer[..., 0] = 1. + + # Evaluate gradient each individual parameter and store in buffer. + i = 1 # start at one because the intercept was already treated + for k, p in list(self.params.items()): + gbuf = np.full(out_shape + (p.num_fit_coeffts,), + np.NaN, dtype=FTYPE) + param_val = param_values[k] if self.using_legacy_data else param_values[k] - p.nominal_value + p.gradient(param_val, out=gbuf, bin_idx=bin_idx) + for j in range(p.num_fit_coeffts): + gradient_buffer[..., i] = gbuf[..., j] + i += 1 + + # In log-mode, the output is exponentiated. For the gradient this simply means multiplying + # with the output itself. + if self.log: + gradient_buffer = output_factors[..., + np.newaxis]*gradient_buffer + # Calculate uncertainty from gradients and covariance matrix + transformed_jacobian = np.einsum( + '...j,...kj->...k', gradient_buffer, self.fit_cov_mat[bin_idx]) + variance = np.einsum( + '...j,...j', transformed_jacobian, gradient_buffer) + assert np.all(variance[np.isfinite(variance)] >= 0.), "invalid covariance" + + if return_uncertainty: + return output_factors, np.sqrt(variance) + else: + return output_factors
+ + +
+[docs] + def fit(self, nominal_map, nominal_param_values, sys_maps, sys_param_values, + norm=True, method="L-BFGS-B", fix_intercept=False, intercept_bounds=None, + intercept_sigma=None, include_empty=False, keep_maps=True, ref_bin_idx=None, + smooth_method=None, smooth_kw=None): + ''' + Fit the hypersurface coefficients (in every bin) to best match the provided + nominal and systematic datasets. + + Writes the results directly into this data structure. + + Parameters + ---------- + nominal_map : Map + Map from the nominal dataset + + nominal_param_values : dict + Value of each systematic param used to generate the nominal dataset + Format: { param_0_name : param_0_nom_val, ..., param_N_name : param_N_nom_val } + + sys_maps : list of Maps + List containing the Map from each systematic dataset + + sys_param_values : list of dicts + List where each element if a dict containing the values of each systematic + param used to generate the that dataset Each list element specified the + parameters for the corresponding element in `sys_maps` + + norm : bool + Normalise the maps to the nominal map. This is what you want to do when + using the hypersurface to re-weight simulation (which is the main use case). + In principal the hypersurfaces are more general though and could be used for + other tasks too, hence this option. + + method : str + `method` arg to pass to `scipy.optimize.minimiza` + + fix_intercept : bool + Fix intercept to the initial intercept. + + intercept_bounds : 2-tuple, optional + Bounds on the intercept. Default is None (no bounds) + + include_empty : bool + Include empty bins in the fit. If True, empty bins are included with value 0 + and sigma 1. + Default: False + + keep_maps : bool + Keep maps used to make the fit. If False, maps will be set to None after + the fit is complete. This helps to reduce the size of JSONS if the + Hypersurface is to be stored on disk. + + ref_bin_idx : tuple + An index specifying a reference bin that will be used for logging + ''' + + # + # Check inputs + # + + # Check nominal dataset definition + assert isinstance(nominal_map, Map) + assert isinstance(nominal_param_values, collections.abc.Mapping) + assert set(nominal_param_values.keys()) == set(self.param_names), f"Params mismatch : {set(nominal_param_values.keys())} != {set(self.param_names)}" + assert all([isinstance(k, str) for k in nominal_param_values.keys()]) + assert all([np.isscalar(v) for v in nominal_param_values.values()]) + # Check systematic dataset definitions + assert isinstance(sys_maps, collections.abc.Sequence) + assert isinstance(sys_param_values, collections.abc.Sequence) + assert len(sys_maps) == len(sys_param_values) + for sys_map, sys_param_vals in zip(sys_maps, sys_param_values): + assert isinstance(sys_map, Map) + assert isinstance(sys_param_vals, collections.abc.Mapping) + msg = f"self.param_names: {self.param_names}\n sys_param_vals.keys(): {sys_param_vals.keys()}" + assert set(sys_param_vals.keys()) == set(self.param_names), msg + assert all([isinstance(k, str) for k in sys_param_vals.keys()]) + assert all([np.isscalar(v) for v in sys_param_vals.values()]) + assert sys_map.binning == nominal_map.binning + + assert not ( + include_empty and self.log), "empty bins cannot be included in log mode" + # + # Format things before getting started + # + + # Store the fitting method + self.fit_method = method + + # Store smoothing info + self.smooth_method = smooth_method + self.smooth_kw = smooth_kw + + # Initialise hypersurface using nominal dataset + self._init(binning=nominal_map.binning, + nominal_param_values=nominal_param_values) + + # Combine nominal and sys sets + maps = [nominal_map] + sys_maps + param_values = [nominal_param_values] + sys_param_values + + # Store raw maps + self.fit_maps_raw = maps + self.fit_info_stored = True + + # Convert params values from `list of dicts` to `dict of lists` + param_values_dict = {name: np.array([p[name] for p in param_values]) + for name in list(param_values[0].keys())} + + # Save the param values used for fitting in the param objects (useful for plotting later) + for name, values in list(param_values_dict.items()): + self.params[name].fit_param_values = values + + # Format the fit `x` values : [ [sys param 0 values], [sys param 1 values], ... ] + # Order of the params must match the order in `self.params` + x = np.asarray([param_values_dict[param_name] + for param_name in list(self.params.keys())], dtype=FTYPE) + # Prepare covariance matrix array + self.fit_cov_mat = np.full( + list(self.binning.shape)+[self.num_fit_coeffts, self.num_fit_coeffts], np.NaN) + + + # + # Smoothing + # + + self.fit_maps_smooth = None + + if self.smooth_method is not None : + + raise Exception("Hypersurface smoothing needs some fixing") + + fit_maps_smooth = [] + + if self.smooth_method == "gaussian_filter" : + + # + # Perform Gaussian filtering on the input maps + # + + + + #TODO REMOVE + #TODO REMOVE + #TODO REMOVE + #TODO REMOVE + #TODO REMOVE + print(">>>> STARTED gaussian_filter SMOOTHING") + #TODO REMOVE + #TODO REMOVE + #TODO REMOVE + #TODO REMOVE + + if self.smooth_kw is None : + self.smooth_kw = {} + + # Treating each PID bin individually as a 2D hist (E, coszen) + #TODO Make more general + #TODO Can smooth in 3 dims here if desired with gaussian_filter (I think...) + split_dim = "pid" + assert split_dim in self.binning + + # Loop over maps and apply filter + for m in self.fit_maps : + fit_maps_smooth.append( m.gaussian_filter(split_dim=split_dim, **self.smooth_kw) ) + + else : + raise Exception(f"Unknown smooting method : {self.smooth_method}") + + + # Store + self.fit_maps_smooth = fit_maps_smooth + + + + + + # + # Normalisation + # + + # All map values are finite, but if have empty bins the nominal map will end up + # with inf bins in the normalised map (divide by zero). Use a mask to handle + # this. + finite_mask = nominal_map.nominal_values != 0 + + # Also include any binning mask in the finite mask (since these bin will be NaN) + if self.binning.mask is not None : + finite_mask = finite_mask & self.binning.mask + + # Normalise bin values, if requested + if norm: + + # Normalise the maps by dividing the nominal map This means the hypersurface + # results can be interpretted as a re-weighting factor, relative to the + # nominal + + # Formalise, handling inf values + fit_maps_norm = [] + for m in self.fit_maps: + norm_m = copy.deepcopy(m) + norm_m.hist[finite_mask] = norm_m.hist[finite_mask] / \ + unp.nominal_values(nominal_map.hist[finite_mask]) + norm_m.hist[~finite_mask] = ufloat(np.NaN, np.NaN) + fit_maps_norm.append(norm_m) + self.fit_maps_norm = fit_maps_norm + + # + # Some final checks + # + + # Not expecting any bins to have negative values (negative counts doesn't make + # sense) + # TODO hypersurface in general could consider -ve values (not explicitly + # tied to histograms), so maybe can relax this constraint + for m in self.fit_maps: + assert np.all(m.nominal_values[finite_mask] + >= 0.), "Found negative bin counts" + + # + # Loop over bins + # + + for bin_idx in np.ndindex(self.binning.shape): # TODO grab from input map + + # Check if this bin is masked + if (self.binning.mask is not None) and (self.binning.mask[bin_idx] == False) : + + logging.debug("Skipping masked bin {bin_idx}") + + p0_intercept = self.intercept[bin_idx] + p0_param_coeffts = [param.get_fit_coefft(bin_idx=bin_idx, coefft_idx=i_cft) + for param in list(self.params.values()) + for i_cft in range(param.num_fit_coeffts)] + if fix_intercept: + p0 = np.array(p0_param_coeffts, dtype=FTYPE) + else: + p0 = np.array([p0_intercept] + p0_param_coeffts, dtype=FTYPE) + + # Not fitting, add empty variables + popt = np.full_like(p0, np.NaN) + pcov = np.NaN + + + else : + + # Otherwise proceed to fitting... + + # + # Format this bin's data for fitting + # + + # Format the fit `y` values : [ bin value 0, bin_value 1, ... ] + # Also get the corresonding uncertainty + y = np.asarray([m.nominal_values[bin_idx] + for m in self.fit_maps], dtype=FTYPE) + y_sigma = np.asarray([m.std_devs[bin_idx] + for m in self.fit_maps], dtype=FTYPE) + + # Create a mask for keeping all these points + # May remove some points before fitting if find issues + scan_point_mask = np.ones(y.shape, dtype=bool) + + # Cases where we have a y_sigma element = 0 (normally because the + # corresponding y element = 0) screw up the fits (least squares divides by + # sigma, so get infs) By default, we ignore empty bins. If the user wishes + # to include them, it can be done with a value of zero and standard + # deviation of 1. + bad_sigma_mask = y_sigma == 0. + if bad_sigma_mask.sum() > 0: + if include_empty: + y_sigma[bad_sigma_mask] = 1. + else: + scan_point_mask = scan_point_mask & ~bad_sigma_mask + + # Apply the mask to get the values I will actually use + x_to_use = np.array([xx[scan_point_mask] for xx in x]) + y_to_use = y[scan_point_mask] + y_sigma_to_use = y_sigma[scan_point_mask] + + # Checks + assert x_to_use.shape[0] == len(self.params) + assert x_to_use.shape[1] == y_to_use.size + + # Get flat list of the fit param guesses + # The param coefficients are ordered as [ param 0 cft 0, ..., param 0 cft N, + # ..., param M cft 0, ..., param M cft N ] + p0_intercept = self.intercept[bin_idx] + p0_param_coeffts = [param.get_fit_coefft(bin_idx=bin_idx, coefft_idx=i_cft) + for param in list(self.params.values()) + for i_cft in range(param.num_fit_coeffts)] + if fix_intercept: + p0 = np.array(p0_param_coeffts, dtype=FTYPE) + else: + p0 = np.array([p0_intercept] + p0_param_coeffts, dtype=FTYPE) + + # + # Check if have valid data in this bin + # + + # If have empty bins, cannot fit In particular, if the nominal map has an + # empty bin, it cannot be rescaled (x * 0 = 0) If this case, no need to try + # fitting + + # Check if have NaNs/Infs + if np.any(~np.isfinite(y_to_use)): # TODO also handle missing sigma + # Not fitting, add empty variables + popt = np.full_like(p0, np.NaN) + pcov = np.NaN + + # Otherwise, fit... + else: + + # + # Fit + # + + # Must have at least as many sets as free params in fit or else curve_fit will fail + assert y.size >= p0.size, "Number of datasets used for fitting (%i) must be >= num free params (%i)" % ( + y.size, p0.size) + + # Define a callback function for use with `curve_fit` + # x : sys params + # p : func/shape params + def callback(x, *p): + + # Note that this is using the dynamic variable `bin_idx`, which + # cannot be passed as an arg as `curve_fit` cannot handle fixed + # parameters. + # + # Unflatten list of the func/shape params, and write them to the + # hypersurface structure + self.intercept[bin_idx] = self.initial_intercept if fix_intercept else p[0] + i = 0 if fix_intercept else 1 + for param in list(self.params.values()): + for j in range(param.num_fit_coeffts): + bin_fit_idx = tuple(list(bin_idx) + [j]) + param.fit_coeffts[bin_fit_idx] = p[i] + i += 1 + + # Unflatten sys param values + params_unflattened = collections.OrderedDict() + for i in range(len(self.params)): + param_name = list(self.params.keys())[i] + params_unflattened[param_name] = x[i] + + return self.evaluate(params_unflattened, bin_idx=bin_idx) + + inv_param_sigma = [] + if intercept_sigma is not None: + inv_param_sigma.append(1./intercept_sigma) + else: + inv_param_sigma.append(0.) + for param in list(self.params.values()): + if param.coeff_prior_sigma is not None: + for j in range(param.num_fit_coeffts): + inv_param_sigma.append( + 1./param.coeff_prior_sigma[j]) + else: + for j in range(param.num_fit_coeffts): + inv_param_sigma.append(0.) + inv_param_sigma = np.array(inv_param_sigma) + assert np.all(np.isfinite( + inv_param_sigma)), "invalid values found in prior sigma. They must not be zero." + + # coefficient names to pass to Minuit. Not strictly necessary + coeff_names = [] if fix_intercept else ['intercept'] + for name, param in self.params.items(): + for j in range(param.num_fit_coeffts): + coeff_names.append(name + '_p{:d}'.format(j)) + + def loss(p): + ''' + Loss to be minimized during the fit. + ''' + fvals = callback(x_to_use, *p) + return np.sum(((fvals - y_to_use)/y_sigma_to_use)**2) + np.sum((inv_param_sigma*p)**2) + + # Define fit bounds for `minimize`. Bounds are pairs of (min, max) + # values for each parameter in the fit. Use 'None' in place of min/max + # if there is + # no bound in that direction. + fit_bounds = [] + if fix_intercept: + logging.debug("fixed intercept needs no bounds") + elif intercept_bounds is None: + fit_bounds.append(tuple([None, None])) + else: + assert (len(intercept_bounds) == 2) and ( + np.ndim(intercept_bounds) == 1), "intercept bounds must be given as 2-tuple" + fit_bounds.append(intercept_bounds) + + for param in self.params.values(): + if param.bounds is None: + fit_bounds.extend( + ((None, None),)*param.num_fit_coeffts) + else: + if np.ndim(param.bounds) == 1: + assert len( + param.bounds) == 2, "bounds on single coefficients must be given as 2-tuples" + fit_bounds.append(param.bounds) + elif np.ndim(param.bounds) == 2: + assert np.all([len(t) == 2 for t in param.bounds] + ), "bounds must be given as a tuple of 2-tuples" + fit_bounds.extend(param.bounds) + + # Define the EPS (step length) used by the fitter Need to take care with + # floating type precision, don't want to go smaller than the FTYPE being + # used by PISA can handle + eps = np.finfo(FTYPE).eps + + # If no reference bin index was specified, used the first bin index to be fitted + if ref_bin_idx is None : + ref_bin_idx = bin_idx + + # Debug logging + if bin_idx == ref_bin_idx: + msg = ">>>>>>>>>>>>>>>>>>>>>>>\n" + msg += "Curve fit inputs to bin %s :\n" % (bin_idx,) + msg += " x : \n%s\n" % x + msg += " y : \n%s\n" % y + msg += " y sigma : \n%s\n" % y_sigma + msg += " x used : \n%s\n" % x_to_use + msg += " y used : \n%s\n" % y_to_use + msg += " y sigma used: \n%s\n" % y_sigma_to_use + msg += " p0 : %s\n" % p0 + msg += " bounds : \n%s\n" % fit_bounds + msg += " inv sigma : \n%s\n" % inv_param_sigma + msg += " fit method : %s\n" % self.fit_method + msg += "<<<<<<<<<<<<<<<<<<<<<<<" + logging.debug(msg) + + # Perform fit + # errordef =1 for least squares fit and 0.5 for nllh fit + m = Minuit(loss, p0, + # only initial step size, not very important + # error=(0.1)*len(p0), + # limit=fit_bounds, + name=coeff_names) + m.errors = (0.1) * len(p0) + m.limits = fit_bounds + m.errordef = Minuit.LEAST_SQUARES + m.migrad() + m.hesse() + popt = np.array(m.values) + try: + pcov = np.atleast_1d(np.array(m.covariance)) + except: + logging.warn(f"HESSE call failed for bin {bin_idx}, covariance matrix unavailable") + pcov = np.full((len(p0), len(p0)), np.nan) + if bin_idx == ref_bin_idx: + logging.debug(m.fmin) + logging.debug(m.params) + logging.debug(m.covariance) + # + # Re-format fit results + # + + # Use covariance matrix to get uncertainty in fit parameters Using + # uncertainties.correlated_values, and will extract the std dev (including + # correlations) shortly Fit may fail to determine covariance matrix + # (method-dependent), so only do this if have a finite covariance matrix + corr_vals = correlated_values(popt, pcov) if np.all( + np.isfinite(pcov)) else None + + # Write the fitted param results (and sigma, if available) back to the + # hypersurface structure + i = 0 + if not fix_intercept: + self.intercept[bin_idx] = popt[i] + self.intercept_sigma[bin_idx] = np.NaN if corr_vals is None else corr_vals[i].std_dev + i += 1 + for param in list(self.params.values()): + for j in range(param.num_fit_coeffts): + idx = param.get_fit_coefft_idx( + bin_idx=bin_idx, coefft_idx=j) + param.fit_coeffts[idx] = popt[i] + param.fit_coeffts_sigma[idx] = np.NaN if corr_vals is None else corr_vals[i].std_dev + i += 1 + # Store the covariance matrix + if fix_intercept and np.all(np.isfinite(pcov)): + self.fit_cov_mat[bin_idx] = np.pad(pcov, ((1, 0), (1, 0))) + else: + self.fit_cov_mat[bin_idx] = pcov + # + # chi2 + # + + # Compare the result of the fitted hypersurface function with the actual data + # points used for fitting Compute the resulting chi2 to have an estimate of the + # fit quality + + self.fit_chi2 = [] + + # Loop over datasets + for i_set in range(self.num_fit_sets): + + # Get expected bin values according tohypersurface value + predicted = self.evaluate( + {name: values[i_set] for name, values in list(param_values_dict.items())}) + + # Get the observed value + observed = self.fit_maps[i_set].nominal_values + sigma = self.fit_maps[i_set].std_devs + # we have to apply the same condition on which values we include + # as we did during the fit above + with np.errstate(invalid='ignore'): + valid_idx = sigma > 0. # can be NaN + if include_empty: + sigma[~valid_idx] = 1. + + # Compute chi2 + with np.errstate(divide='ignore'): + chi2 = ((predicted - observed) / sigma) ** 2 + + # Add to container + self.fit_chi2.append(chi2) + + # Combine into single array + self.fit_chi2 = np.stack(self.fit_chi2, axis=-1).astype(FTYPE) + + # Drop input maps if not keeping them + if not keep_maps: + self.fit_maps_raw = None + self.fit_maps_smooth = None + self.fit_maps_norm = None + self.fit_info_stored = False + + # Record some provenance info about the fits + self.fit_complete = True
+ + + @property + def nominal_values(self): + ''' + Return the stored nominal parameter for each dataset + Returns: { param_0_name : param_0_nom_val, ..., param_N_name : param_N_nom_val } + ''' + assert self.fit_info_stored, "Cannot get fit dataset nominal values, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + return collections.OrderedDict([(name, param.nominal_value) for name, param in list(self.params.items())]) + + @property + def fit_param_values(self): + ''' + Return the stored systematic parameters from the datasets used for fitting + Returns: { param_0_name : [ param_0_sys_val_0, ..., param_0_sys_val_M ], ..., param_N_name : [ param_N_sys_val_0, ..., param_N_sys_val_M ] } + ''' + assert self.fit_info_stored, "Cannot get fit dataset param values, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + return collections.OrderedDict([(name, param.fit_param_values) for name, param in list(self.params.items())]) + +
+[docs] + def get_nominal_mask(self): + ''' + Return a mask indicating which datasets have nominal values for all parameters + ''' + + assert self.fit_info_stored, "Cannot get nominal mask, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + + nom_mask = np.ones((self.num_fit_sets,), dtype=bool) + + for param in list(self.params.values()): + nom_mask = nom_mask & np.isclose( + param.fit_param_values, param.nominal_value) + + return nom_mask
+ + +
+[docs] + def get_on_axis_mask(self, param_name): + ''' + Return a mask indicating which datasets are "on-axis" for a given parameter. + + "On-axis" means "generated using the nominal value for this parameter". Parameters other + than the one specified can have non-nominal values. + + Parameters + ---------- + param_name : str + The name of systematic parameter for which we want on-axis datasets + ''' + + assert self.fit_info_stored, "Cannot get on-axis mask, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + + assert param_name in self.param_names + + on_axis_mask = np.ones((self.num_fit_sets,), dtype=bool) + + # Loop over sys params + for param in list(self.params.values()): + + # Ignore the chosen param + if param.name != param_name: + + # Define a "nominal" mask + on_axis_mask = on_axis_mask & np.isclose( + param.fit_param_values, param.nominal_value) + + return on_axis_mask
+ + +
+[docs] + def report(self, bin_idx=None): + ''' + Return a string version of the hypersurface contents + + Parameters + ---------- + bin_idx : tuple of None + Specify a particular bin (using numpy indexing). In this case only report on that bin. + ''' + + msg = "" + + # Fit results + msg += ">>>>>> Fit coefficients >>>>>>" + "\n" + bin_indices = np.ndindex( + self.binning.shape) if bin_idx is None else [bin_idx] + for bin_idx in bin_indices: + msg += " Bin %s :" % (bin_idx,) + "\n" + msg += " Intercept : %0.5g" % (self.intercept[bin_idx],) + "\n" + for param in list(self.params.values()): + msg += " %s : %s" % (param.name, ", ".join(["%0.5g" % param.get_fit_coefft( + bin_idx=bin_idx, coefft_idx=cft_idx) for cft_idx in range(param.num_fit_coeffts)])) + "\n" + msg += "<<<<<< Fit coefficients <<<<<<" + "\n" + + return msg
+ + + def __str__(self): + return self.report() + + @property + def fit_maps(self): + ''' + Return the `Map instances used for fitting + These will be normalised if the fit was performend to normalised maps. + ''' + assert self.fit_info_stored, "Cannot get fit maps, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + + # Return whatever the final processed map type was during the fitting process + if self.fit_maps_norm is not None : + return self.fit_maps_norm + + elif self.fit_maps_smooth is not None : + return self.fit_maps_smooth + + elif self.fit_maps_raw is not None : + return self.fit_maps_raw + + else : + raise Exception("Cannot find fit maps") + + @property + def num_fit_sets(self): + ''' + Return number of datasets used for fitting + ''' + assert self.fit_info_stored, "Cannot get fit sets, fit info not stored%s" % ( + " (using legacy data)" if self.using_legacy_data else "") + return len(list(self.fit_param_values.values())[0]) + + @property + def num_fit_coeffts(self): + ''' + Return the total number of coefficients in the hypersurface fit + This is the overall intercept, plus the coefficients for each individual param + ''' + return int(1 + np.sum([param.num_fit_coeffts for param in list(self.params.values())])) + + @property + def fit_coeffts(self): + ''' + Return all coefficients, in all bins, as a single array + This is the overall intercept, plus the coefficients for each individual param + Dimensions are: [binning ..., fit coeffts] + ''' + + array = [self.intercept] + for param in list(self.params.values()): + for i in range(param.num_fit_coeffts): + array.append(param.get_fit_coefft(coefft_idx=i)) + array = np.stack(array, axis=-1) + return array + + @fit_coeffts.setter + def fit_coeffts(self, fit_coeffts): + ''' + Setter to conveniently set the coefficients in the parameters + of the hypersurface in the same order in which they are also + returned by the getter. + ''' + assert fit_coeffts.shape == self.fit_coeffts.shape, "incorrect shape of coefficients" + self.intercept = fit_coeffts[..., 0] + n = 1 + for param in self.params.values(): + for i in range(param.num_fit_coeffts): + idx = param.get_fit_coefft_idx(coefft_idx=i) + param.fit_coeffts[idx] = fit_coeffts[..., n] + n += 1 + + @property + def fit_coefft_labels(self): + ''' + Return labels for each fit coefficient + ''' + return ["intercept"] + ["%s p%i" % (param.name, i) for param in list(self.params.values()) for i in range(param.num_fit_coeffts)] + + @property + def serializable_state(self): + """ + OrderedDict containing savable state attributes + """ + + if self._serializable_state is None: # TODO always redo? + + state = collections.OrderedDict() + + state["_initialized"] = self._initialized + state["binning"] = self.binning.serializable_state + state["initial_intercept"] = self.initial_intercept + state["log"] = self.log + state["intercept"] = self.intercept + state["intercept_sigma"] = self.intercept_sigma + state["fit_complete"] = self.fit_complete + state["fit_info_stored"] = self.fit_info_stored + state["fit_maps_norm"] = self.fit_maps_norm + state["fit_maps_smooth"] = self.fit_maps_smooth + state["fit_maps_raw"] = self.fit_maps_raw + state["fit_chi2"] = self.fit_chi2 + state["fit_cov_mat"] = self.fit_cov_mat + state["fit_method"] = self.fit_method + state["fit_pipeline_param_values"] = self.fit_pipeline_param_values + state["using_legacy_data"] = self.using_legacy_data + + state["params"] = collections.OrderedDict() + for name, param in list(self.params.items()): + state["params"][name] = param.serializable_state + + self._serializable_state = state + + return self._serializable_state + +
+[docs] + @classmethod + def from_state(cls, state): + """ + Instantiate a new object from the contents of a serialized state dict + + Parameters + ---------- + resource : dict + A dict + + See Also + -------- + to_json + """ + + # + # Get the state + # + + # If it is not already a a state, alternativey try to load it in case a JSON + # file was passed + if not isinstance(state, collections.abc.Mapping): + state = from_json(state) + + # + # Create params + # + + params = [] + + # Loop through params in the state + params_state = state.pop("params") + for param_name, param_state in list(params_state.items()): + param = HypersurfaceParam.from_state(param_state) + params.append(param) + + # + # Create hypersurface + # + + # Instantiate + hypersurface = cls( + params=params, + initial_intercept=state.pop("initial_intercept"), + ) + + # Add binning + hypersurface.binning = MultiDimBinning(**state.pop("binning")) + + # Add maps + fit_maps_raw = state.pop("fit_maps_raw") + hypersurface.fit_maps_raw = None if fit_maps_raw is None else [ + Map(**map_state) for map_state in fit_maps_raw] + + fit_maps_norm = state.pop("fit_maps_norm") + hypersurface.fit_maps_norm = None if fit_maps_norm is None else [ + Map(**map_state) for map_state in fit_maps_norm] + + fit_maps_smooth = state.pop("fit_maps_smooth") if "fit_maps_smooth" in state else None # Backwards compatibility + hypersurface.fit_maps_smooth = None if fit_maps_smooth is None else [ + Map(**map_state) for map_state in fit_maps_smooth] + + # Define rest of state + for k in list(state.keys()): + setattr(hypersurface, k, state.pop(k)) + + return hypersurface
+ + + +
+[docs] + def fluctuate(self, random_state=None) : + ''' + Return a new hypersurface object whose coefficients have been randomly fluctuated according + to the fit covariance matrix. + + Used for testing the impact of statistical uncertainty in the hypersurfaces fits on + downstream analyses. + ''' + + #TODO uncorrelated fluctuation option + + # Init random state + if random_state is None : + random_state = np.random.RandomState(12345) #TODO use PISA functions for this + + # Create a copy of this instance + new_hypersurface = copy.deepcopy(self) #TODO Use serialized state instead? + + # Loop over bins + for bin_idx in np.ndindex(self.binning.shape): + + # Skip if this bin has no fits + if np.all(np.isfinite(self.fit_coeffts[bin_idx])) : + + # Perform multivariate random sampling from the covariance matrix + # This gives new coefficients, which are written to the output hyersurface instance + new_fit_coeffts = random_state.multivariate_normal(self.fit_coeffts[bin_idx], self.fit_cov_mat[bin_idx]) + + # Set the values in the output hypersurface + new_hypersurface.intercept[bin_idx] = new_fit_coeffts[0] + n = 1 + for param in new_hypersurface.params.values(): + for i in range(param.num_fit_coeffts): + idx = param.get_fit_coefft_idx(bin_idx=bin_idx, coefft_idx=i) + param.fit_coeffts[idx] = new_fit_coeffts[n] + n += 1 + + return new_hypersurface
+
+ + + +
+[docs] +class HypersurfaceParam(object): + ''' + A class representing one of the parameters (and corresponding functional forms) in + the hypersurface. + + A user creates the initial instances of thse params, before passing the to the + Hypersurface instance. Once this has happened, the user typically does not need to + directly interact woth these HypersurfaceParam instances. + + Parameters + ---------- + name : str + Name of the parameter + + func_name : str + Name of the hypersurface function to use. + See "Hypersurface functional forms" section for more details, including + available functions. + + initial_fit_coeffts : array + Initial values for the coefficients of the functional form + Number and meaning of coefficients depends on functional form + + bounds : 2-tuple of array_like, optional + Lower and upper bounds on independent variables. Defaults to no bounds. Each + element of the tuple must be either an array with the length equal to the number + of parameters, or a scalar (in which case the bound is taken to be the same for + all parameters.) Use ``np.inf`` with an appropriate sign to disable bounds on + all or some parameters. + + coeff_prior_sigma : array, optional + Prior sigma values for the coefficients. If None (default), no regularization + will be applied during the fit. + ''' + + def __init__(self, name, func_name, initial_fit_coeffts=None, bounds=None, coeff_prior_sigma=None): + + # Store basic members + self.name = name + + # Handle functional form fit parameters + self.fit_coeffts = None # Fit params container, not yet populated + self.fit_coeffts_sigma = None # Fit param sigma container, not yet populated + # The initial values for the fit parameters + self.initial_fit_coeffts = initial_fit_coeffts + self.bounds = bounds + self.coeff_prior_sigma = coeff_prior_sigma + + # Record information relating to the fitting + self.fitted = False # Flag indicating whether fit has been performed + # The values of this sys param in each of the fitting datasets + self.fit_param_values = None + + # Placeholder for nominal value + self.nominal_value = None + + # Serialization + self._serializable_state = None + self.binning_shape = None # initialized when used in Hypersurface + # + # Init the functional form + # + + # Get the function + self.func_name = func_name + self._hypersurface_func = self._get_hypersurface_func(self.func_name) + + # Get the number of functional form parameters + self.num_fit_coeffts = self._hypersurface_func.nargs + if self.coeff_prior_sigma is not None: + assert len( + self.coeff_prior_sigma) == self.num_fit_coeffts, "number of prior sigma values must equal the number of parameters." + # Check and init the fit param initial values + # TODO Add support for "per bin" initial values + if initial_fit_coeffts is None: + # No values provided, use 0 for all + self.initial_fit_coeffts = np.zeros( + self.num_fit_coeffts, dtype=FTYPE) + else: + # Use the provided initial values + self.initial_fit_coeffts = np.array(self.initial_fit_coeffts) + assert self.initial_fit_coeffts.size == self.num_fit_coeffts, "'initial_fit_coeffts' should have %i values, found %i" % ( + self.num_fit_coeffts, self.initial_fit_coeffts.size) + + def _get_hypersurface_func(self, func_name): + ''' + Find the function defining the hypersurface functional form. + + User specifies this by it's string name, which must correspond to a pre-defined + function in `HYPERSURFACE_PARAM_FUNCTIONS`. + + Internal function, not to be called by a user. + ''' + + assert isinstance(func_name, str), "'func_name' must be a string" + + assert func_name in HYPERSURFACE_PARAM_FUNCTIONS, "Cannot find hypersurface function '%s', choose from %s" % ( + func_name, list(HYPERSURFACE_PARAM_FUNCTIONS.keys())) + return HYPERSURFACE_PARAM_FUNCTIONS[func_name]() + + def _init_fit_coefft_arrays(self, binning): + ''' + Create the arrays for storing the fit parameters + Have one fit per bin, for each parameter + The shape of the `self.fit_coeffts` arrays is: (binning shape ..., num fit params ) + + Internal function, not to be called by a user. + ''' + + arrays = [] + + self.binning_shape = binning.shape + + for fit_coefft_initial_value in self.initial_fit_coeffts: + + fit_coefft_array = np.full( + self.binning_shape, fit_coefft_initial_value, dtype=FTYPE) + arrays.append(fit_coefft_array) + + self.fit_coeffts = np.stack(arrays, axis=-1) + self.fit_coeffts_sigma = np.full_like(self.fit_coeffts, np.NaN) + +
+[docs] + def evaluate(self, param, out, bin_idx=None): + ''' + Evaluate the functional form for the given `param` values. + Uses the current values of the fit coefficients. + + By default evaluates all bins, but optionally can specify a particular bin (used + when fitting). + ''' + + # Create an array to fill with this contribution + this_out = np.full_like(out, np.NaN, dtype=FTYPE) + + # Form the arguments to pass to the functional form + # Need to be flexible in terms of the number of fit parameters + args = [param] + for cft_idx in range(self.num_fit_coeffts): + args += [self.get_fit_coefft(bin_idx=bin_idx, coefft_idx=cft_idx)] + args += [this_out] + + # Call the function + self._hypersurface_func(*args) + + # Add to overall hypersurface result + out += this_out
+ + +
+[docs] + def gradient(self, param, out, bin_idx=None): + ''' + Evaluate gradient of the functional form for the given `param` values. + Uses the current values of the fit coefficients. + + By default evaluates all bins, but optionally can specify a particular bin (used when fitting). + ''' + # Create an array to fill with the gradient + this_out = np.full_like(out, np.NaN, dtype=FTYPE) + + # Form the arguments to pass to the functional form + # Need to be flexible in terms of the number of fit parameters + args = [param] + for cft_idx in range(self.num_fit_coeffts): + args += [self.get_fit_coefft(bin_idx=bin_idx, coefft_idx=cft_idx)] + args += [this_out] + + # Call the function + self._hypersurface_func.grad(*args) + # Copy to wherever the gradient is to be stored + np.copyto(src=this_out, dst=out)
+ + +
+[docs] + def get_fit_coefft_idx(self, bin_idx=None, coefft_idx=None): + ''' + Indexing the fit_coefft matrix is a bit of a pain + This helper function eases things + ''' + + # TODO can probably do this more cleverly with numpy indexing, but works for now... + + # Indexing based on the bin + if (bin_idx is Ellipsis) or (bin_idx is None): + idx = [Ellipsis] + else: + idx = list(bin_idx) + + # Indexing based on the coefficent + if isinstance(coefft_idx, slice): + idx.append(coefft_idx) + elif coefft_idx is None: + idx.append(slice(0, -1)) + else: + idx.append(coefft_idx) + + # Put it all together + idx = tuple(idx) + return idx
+ + +
+[docs] + def get_fit_coefft(self, *args, **kwargs): + ''' + Get a fit coefficient values from the matrix + Basically just wrapping the indexing function + ''' + idx = self.get_fit_coefft_idx(*args, **kwargs) + return self.fit_coeffts[idx]
+ + + @property + def serializable_state(self): + """ + OrderedDict containing savable state attributes + """ + + if self._serializable_state is None: # TODO always redo? + + state = collections.OrderedDict() + state["name"] = self.name + state["func_name"] = self.func_name + state["num_fit_coeffts"] = self.num_fit_coeffts + state["fit_coeffts"] = self.fit_coeffts + state["fit_coeffts_sigma"] = self.fit_coeffts_sigma + state["initial_fit_coeffts"] = self.initial_fit_coeffts + state["fitted"] = self.fitted + state["fit_param_values"] = self.fit_param_values + state["binning_shape"] = self.binning_shape + state["nominal_value"] = self.nominal_value + state["bounds"] = self.bounds + state["coeff_prior_sigma"] = self.coeff_prior_sigma + self._serializable_state = state + + return self._serializable_state + +
+[docs] + @classmethod + def from_state(cls, state): + + # Define param init kwargs + # Special handling for `coeff_prior_sigma`, which was missing in older + # files (due to a bug in `serializable_state`) so need to handle this + # for backwards compatibility + param_init_kw = dict( + name=state.pop("name"), + func_name=state.pop("func_name"), + initial_fit_coeffts=state.pop("initial_fit_coeffts"), + bounds=state.pop("bounds"), + ) + if "coeff_prior_sigma" in state : + param_init_kw["coeff_prior_sigma"] = state.pop("coeff_prior_sigma") + else : + param_init_kw["coeff_prior_sigma"] = None + + # Create the param + param = cls(**param_init_kw) + + # Define rest of state + for k in list(state.keys()): + setattr(param, k, state.pop(k)) + + return param
+
+ + +''' +Hypersurface fitting and loading helper functions +''' + + +def get_hypersurface_file_name(hypersurface, tag): + ''' + Create a descriptive file name + ''' + + num_dims = len(hypersurface.params) + param_str = "_".join(hypersurface.param_names) + output_file = "%s__hypersurface_fits__%dd__%s.json" % ( + tag, num_dims, param_str) + + return output_file + + +
+[docs] +def fit_hypersurfaces(nominal_dataset, sys_datasets, params, output_dir, tag, combine_regex=None, + log=True, minimum_mc=0, minimum_weight=0, **hypersurface_fit_kw): + ''' + A helper function that a user can use to fit hypersurfaces to a bunch of simulation + datasets, and save the results to a file. Basically a wrapper of Hypersurface.fit, + handling common pre-fitting tasks like producing mapsets from piplelines, merging + maps from similar specifies, etc. + + Note that this supports fitting multiple hypersurfaces to the datasets, e.g. one per + simulated species. Returns a dict with format: { map_0_key : map_0_hypersurface, + ..., map_N_key : map_N_hypersurface, } + + Parameters + ---------- + nominal_dataset : dict + Definition of the nominal dataset. Specifies the pipleline with which the maps + can be created, and the values of all systematic parameters used to produced the + dataset. + Format must be: + nominal_dataset = { + "pipeline_cfg" = <pipeline cfg file (either cfg file path or dict)>), + "sys_params" = { param_0_name : param_0_value_in_dataset, ..., param_N_name : param_N_value_in_dataset } + } + Sys params must correspond to the provided HypersurfaceParam instances provided + in the `params` arg. + + sys_datasets : list of dicts + List of dicts, where each dict defines one of the systematics datasets to be + fitted. The format of each dict is the same as explained for `nominal_dataset` + + params : list of HypersurfaceParams + List of HypersurfaceParams instances that define the hypersurface. Note that + this defined ALL hypersurfaces fitted in this function, e.g. only supports a + single parameterisation for all maps (this is almost almost what you want). + + output_dir : str + Path to directly to write results file in + + tag : str + A string identifier that will be included in the file name to help you make + sense of the file in the future. Note that additional information on the + contents will be added to the file name by this function. + + combine_regex : list of str, or None + List of string regex expressions that will be used for merging maps. Used to + combine similar species. Must be something that can be passed to the + `MapSet.combine_re` function (see that functions docs for more details). Choose + `None` is do not want to perform this merging. + + minimum_mc : int, optional + Minimum number of unweighted MC events required in each bin. If the number + of unweighted MC events in a bin in any MC set is less than this number, the + value is set to exactly zero and will be excluded from the fit. + + minimum_weight : float, optional + Minimum weight per bin. Bins with a total summed weight of less than this + number are excluded from the fit. Intended use is to exclude extremely small + values from KDE histograms that would pull the fit to zero. + + hypersurface_fit_kw : kwargs + kwargs will be passed on to the calls to `Hypersurface.fit` + ''' + + # TODO Current yneed to manually ensure consistency between `combine_regex` here and + # the `links` param in `hypersurface` Need to make `hypersurface` directly use + # the value of `combine_regex` from the Hypersurface instance + + # + # Make copies + # + + # Take (deep) copies of lists/dicts to avoid modifying the originals + # Useful for cases where this function is called in a loop (e.g. leave-one-out tests) + nominal_dataset = copy.deepcopy(nominal_dataset) + sys_datasets = copy.deepcopy(sys_datasets) + params = copy.deepcopy(params) + + + # + # Check inputs + # + + # Check types + assert isinstance(sys_datasets, collections.Sequence) + assert isinstance(params, collections.Sequence) + assert isinstance(output_dir, str) + assert isinstance(tag, str) + + # Check formatting of datasets is as expected + all_datasets = [nominal_dataset] + sys_datasets + for dataset in all_datasets: + assert isinstance(dataset, collections.Mapping) + assert "pipeline_cfg" in dataset + assert isinstance(dataset["pipeline_cfg"], (str, collections.Mapping)) + assert "sys_params" in dataset + assert isinstance(dataset["sys_params"], collections.Mapping) + + # Check params + assert len(params) >= 1 + for p in params: + assert isinstance(p, HypersurfaceParam) + + # Report inputs + msg = "Hypersurface fit details :" + msg += " Num params : %i" % len(params) + msg += " Num fit coefficients : %i" % sum( + [p.num_fit_coeffts for p in params]) + msg += " Num datasets : 1 nominal + %i systematics" % len( + sys_datasets) + msg += " Nominal values : %s" % nominal_dataset["sys_params"] + logging.info(msg) + + # + # Generate MapSets + # + + def find_hist_stage(pipeline): + """Locate the index of the hist stage in a pipeline.""" + hist_idx_found = False + kde_idx_found = False + for i, s in enumerate(pipeline.stages): + if s.__class__.__name__ == "hist": + hist_idx = i + hist_idx_found = True + break + if s.__class__.__name__ == "kde": + hist_idx = i + kde_idx_found = True + break + if not hist_idx_found and not kde_idx_found: + raise RuntimeError("Could not find hist or kde stage in pipeline, aborting.") + return hist_idx, kde_idx_found + + # Get maps and param values from nominal pipeline + nominal_pipeline = Pipeline(nominal_dataset["pipeline_cfg"]) + logging.info("Nominal pipeline parameters:\n" + repr(nominal_pipeline.params)) + pipeline_param_values = { p.name:p.value for p in nominal_pipeline.params } + nominal_dataset["mapset"] = nominal_pipeline.get_outputs() # return_sum=False) + # get the un-weighted event counts as well so that we can exclude bins + # with too little statistics + # First, find out which stage is the hist stage + hist_idx, is_kde = find_hist_stage(nominal_pipeline) + # minimum MC is only applicable to hist stage, not to KDE + if not is_kde: + nominal_pipeline.stages[hist_idx].unweighted = True + nominal_dataset["mapset_unweighted"] = nominal_pipeline.get_outputs() + else: + nominal_dataset["mapset_unweighted"] = None + # Bootstrapping is required to calculate errors on the histograms + assert nominal_pipeline.stages[hist_idx].bootstrap, ( + "Hypersurfaces can only be fit to KDE histograms if bootstrapping is enabled." + ) + del nominal_pipeline # Save memory + + # Loop over sys datasets and grap the maps from them too + # Also make sure the pipeline params match the nominal pipeline (only the input file should differ between them) + for sys_dataset in sys_datasets: + sys_pipeline = Pipeline(sys_dataset["pipeline_cfg"]) + for param in sys_pipeline.params : + assert param.value == pipeline_param_values[param.name], "Mismatch in pipeline param '%s' value between nominal and systematic pipelines : %s != %s" % (param.name, param.value, pipeline_param_values[param.name]) + sys_dataset["mapset"] = sys_pipeline.get_outputs() # return_sum=False) + # get the un-weighted event counts as well so that we can exclude bins + # with too little statistics + # First, find out which stage is the hist stage + hist_idx, is_kde = find_hist_stage(sys_pipeline) + if not is_kde: + sys_pipeline.stages[hist_idx].unweighted = True + sys_dataset["mapset_unweighted"] = sys_pipeline.get_outputs() + else: + sys_dataset["mapset_unweighted"] = None + assert sys_pipeline.stages[hist_idx].bootstrap, ( + "Hypersurfaces can only be fit to KDE histograms if bootstrapping is " + "enabled." + ) + del sys_pipeline + + # Merge maps according to the combine regex, if one was provided + if combine_regex is not None: + nominal_dataset["mapset"] = nominal_dataset["mapset"].combine_re(combine_regex) + if nominal_dataset["mapset_unweighted"] is not None: + nominal_dataset["mapset_unweighted"] = ( + nominal_dataset["mapset_unweighted"].combine_re(combine_regex) + ) + for sys_dataset in sys_datasets: + sys_dataset["mapset"] = sys_dataset["mapset"].combine_re(combine_regex) + if sys_dataset["mapset_unweighted"] is None: continue + sys_dataset["mapset_unweighted"] = ( + sys_dataset["mapset_unweighted"].combine_re(combine_regex) + ) + + # Remove bins (i.e. set their count to zero) that have too few MC events or too little + # total weight + for dataset in sys_datasets + [nominal_dataset]: + for map_name in dataset["mapset"].names: + if dataset["mapset_unweighted"] is not None: + insuff_mc = dataset["mapset_unweighted"][map_name].nominal_values < minimum_mc + else: + insuff_mc = np.zeros(dataset["mapset"][map_name].nominal_values.shape, dtype=bool) + insuff_weight = dataset["mapset"][map_name].nominal_values < minimum_weight + # Setting the hist to zero sets both nominal value and std_dev to zero + dataset["mapset"][map_name].hist[insuff_mc | insuff_weight] = 0. + + # TODO check every mapset has the same elements + + + + # + # Loop over maps + # + + # Create the container to fill + hypersurfaces = collections.OrderedDict() + + # Loop over maps + for map_name in nominal_dataset["mapset"].names: + + # + # Prepare data for fit + # + + nominal_map = nominal_dataset["mapset"][map_name] + nominal_param_values = nominal_dataset["sys_params"] + + sys_maps = [sys_dataset["mapset"][map_name] + for sys_dataset in sys_datasets] + sys_param_values = [sys_dataset["sys_params"] + for sys_dataset in sys_datasets] + + # + # Fit the hypersurface + # + + # Create the hypersurface + hypersurface = Hypersurface( + params=copy.deepcopy(params), # Need the deepcopy, as want one set of params per map + initial_intercept=0. if log else 1., # Initial value for intercept + log=log + ) + + # Perform fit + hypersurface.fit( + nominal_map=nominal_map, + nominal_param_values=nominal_param_values, + sys_maps=sys_maps, + sys_param_values=sys_param_values, + norm=True, + **hypersurface_fit_kw + ) + + # Record the pipeline params used to generate the maps used for + # the fits, for data provenance purposes only + hypersurface.fit_pipeline_param_values = pipeline_param_values + + # Report the results + logging.debug("\nFitted hypersurface report:\n%s" % hypersurface) + + # Store for later write to disk + hypersurfaces[map_name] = hypersurface + + + # + # Store results + # + + # Create a file name + output_path = os.path.join(output_dir, get_hypersurface_file_name( + list(hypersurfaces.values())[0], tag)) + + # Create the output directory + mkdir(output_dir) + + # Write to a json file + to_json(hypersurfaces, output_path) + + logging.info("Fit results written : %s" % output_path) + + return output_path
+ + + +
+[docs] +def load_hypersurfaces(input_file, expected_binning=None): + ''' + User function to load file containing hypersurface fits, as written using `fit_hypersurfaces`. + Can be multiple hypersurfaces assosicated with different maps. + + Returns a dict with the format: { map_0_key : map_0_hypersurface, ..., map_N_key : map_N_hypersurface, } + + Hnadling the following input files cases: + 1) Load files produced using this code (recommended) + 2) Load files producing using older versions of PISA + 3) Load public data releases csv formatted files + + Parameters + ---------- + input_file : str + Path to the file contsaining the hypersurface fits. + For the special case of the datareleases these needs to be the path to all + relevent CSV fles, e.g. "<path/to/datarelease>/hyperplanes_*.csv". + expected_binning : One/MultiDimBinning + (Optional) Expected binning for hypersurface. + It will checked enforced that this mathes the binning found in the parsed + hypersurfaces. For certain legacy cases where binning info is not stored, this + will be assumed to be the actual binning. + ''' + + # + # Check inputs + # + + assert isinstance(input_file, str) + + if expected_binning is not None: + assert is_binning(expected_binning) + + # + # PISA hypersurface files + # + + logging.info(f"Loading non-interpolated hypersurfaces from file: {input_file}") + hypersurfaces = None + if input_file.endswith("json") or input_file.endswith("json.bz2"): + + # Load file + input_data = from_json(input_file) + assert isinstance(input_data, collections.Mapping) + logging.info(f"Reading file complete, generating hypersurfaces...") + + # Testing various cases to support older files as well as modern ones... + if "sys_list" in input_data: + + # Legacy case, create a modern hypersurface instance using old hyperplane fits + hypersurfaces = _load_hypersurfaces_legacy(input_data) + logging.warn("Old fit files detected, loaded via legacy mode") + + else: + + # Otherwise assume file is using the modern format + hypersurfaces = collections.OrderedDict() + for map_name, hypersurface_state in list(input_data.items()): + hypersurfaces[map_name] = Hypersurface.from_state( + hypersurface_state) + + # + # Public data release file + # + + elif input_file.endswith("csv") or input_file.endswith("csv.bz2"): + + hypersurfaces = _load_hypersurfaces_data_release( + input_file, expected_binning) + + # + # Done + # + + else: + raise Exception("Unknown file format : %s" % input_file) + + # Check binning + if expected_binning is not None: + for hypersurface in hypersurfaces.values(): + if not hypersurface.binning.hash == expected_binning.hash: + for a, b, in zip(hypersurface.binning.dims, expected_binning.dims): + assert a == b, "Incompatible binning dimension %s and %s"%(a, b) + + logging.info(f"Generated hypersurfaces") + + return hypersurfaces
+ + + +def _load_hypersurfaces_legacy(input_data): + ''' + Load an old hyperpane (not surface) fit file from older PISA version. + + Put the results into an instance the new `Hypersurface` class so can use the + resulting hypersurface in modern code. + + User should not use this directly, instead call `load_hypersurfaces`. + ''' + + hypersurfaces = collections.OrderedDict() + + # + # Loop over map names + # + + for map_name in input_data["map_names"]: + + # + # Create the params + # + + # Get the param names + param_names = input_data["sys_list"] + + # Create the param instances. + # Using linear functional forms (legacy files only supported linear forms, e.g. + # hyperplanes rather than surfaces). + params = [HypersurfaceParam( + name=name, func_name="linear", initial_fit_coeffts=None, ) for name in param_names] + + # + # Get binning + # + + # This varies depending on how old the file is... + # Note that the hypersurface class really only needs to know the binning + # shape (to create the coefficient arrays). + + # If the (serialized version of the) binning is stored, great! Use it + if "binning" in input_data: + binning = MultiDimBinning(**input_data["binning"]) + + # If no binning is available, can at least get the correct shape (using + # one of the map arrays) and create a dummy binning instance. + # Remember that the final dimension is the sys params, not binning + else: + # Remove last dimension + binning_shape = input_data[map_name][..., 0].shape + binning = MultiDimBinning([OneDimBinning(name="dummy_%i" % i, domain=[ + 0., 1.], is_lin=True, num_bins=dim) for i, dim in enumerate(binning_shape)]) + + # + # Create the hypersurface instance + # + + # Create the hypersurface + hypersurface = Hypersurface( + params=params, # Specify the systematic parameters + initial_intercept=1., # Intercept value (or first guess for fit) + ) + + # Set some internal members that would normally be configured during fitting + # Don't know the nominal values with legacy files, so just stores NaNs + hypersurface._init( + binning=binning, + nominal_param_values={ + name: np.NaN for name in hypersurface.param_names}, + ) + + # Indicate this is legacy data (not all functionality will work) + hypersurface.using_legacy_data = True + + # + # Get the fit values + # + + # Handling two different legacy cases here... + fitted_coefficients = input_data["hyperplanes"][map_name][ + "fit_params"] if "hyperplanes" in input_data else input_data[map_name] + + # Fitted coefficients have following array shape: [ binning dim 0, ..., binning dim N, sys params (inc. intercept) ] + intercept_values = fitted_coefficients[..., 0] + sys_param_gradient_values = { + n: fitted_coefficients[..., i+1] for i, n in enumerate(param_names)} + + # Write the values to the hypersurface + np.copyto(src=intercept_values, dst=hypersurface.intercept) + for param in hypersurface.params.values(): + np.copyto( + src=sys_param_gradient_values[param.name], dst=param.fit_coeffts[..., 0]) + + # Done, store the hypersurface + hypersurfaces[map_name] = hypersurface + + return hypersurfaces + + +def _load_hypersurfaces_data_release(input_file_prototype, binning): + ''' + Load the hypersurface CSV files from an official IceCube data release + + User should not use this directly, instead call `load_hypersurfaces`. + ''' + + # TODO Current only handles DRAGON (analysis B) data release (as was also the case for + # the older hyperplane code) + # TODO Would need to add support for muon hypersurface (including non-linear params) + # as well as a different binning + + import pandas as pd + + hypersurfaces = collections.OrderedDict() + + # + # Check inputs + # + + assert binning is not None, "Must provide binning when loading data release hypersurfaces" + + # + # Load CSV files + # + + fit_results = {} + fit_results['nue_cc+nuebar_cc'] = pd.read_csv(find_resource( + input_file_prototype.replace('*', 'nue_cc'))) + fit_results['numu_cc+numubar_cc'] = pd.read_csv(find_resource( + input_file_prototype.replace('*', 'numu_cc'))) + fit_results['nutau_cc+nutaubar_cc'] = pd.read_csv(find_resource( + input_file_prototype.replace('*', 'nutau_cc'))) + fit_results['nu_nc+nubar_nc'] = pd.read_csv(find_resource( + input_file_prototype.replace('*', 'all_nc'))) + + # + # Get hyperplane info + # + + param_names = None + + for map_name, map_fit_results in fit_results.items(): + + # + # Get hypersurface params + # + + # Remove the bin info from the data frame (only want hyperplane params) + # Check that find the same dimensions as the expected binning + # TODO Also check bin centers are within expected bins + for n in binning.names: + midpoints_found = np.unique(map_fit_results.pop(n).values) + assert midpoints_found.size == binning[n].num_bins, "Mismatch between expected and actual binning dimensions" + + # Also extract the special case of the offset + offset = map_fit_results.pop("offset") + + # Get the param names (everything remaining is a hypersurface param) + if param_names is None: + param_names = map_fit_results.columns.tolist() + else: + assert param_names == map_fit_results.columns.tolist( + ), "Mismatch between hypersurface params in different files" + + # Create the params + params = [HypersurfaceParam( + name=name, func_name="linear", initial_fit_coeffts=None, ) for name in param_names] + + # + # Create the hypersurface instance + # + + # Create the hypersurface + hypersurface = Hypersurface( + params=params, # Specify the systematic parameters + initial_intercept=1., # Intercept value (or first guess for fit) + ) + + # Set some internal members that would normally be configured during fitting + # Don't know the nominal values with legacy files, so just stores NaNs + hypersurface._init( + binning=binning, + nominal_param_values={ + name: np.NaN for name in hypersurface.param_names}, + ) + + # Indicate this is legacy data (not all functionality will work) + hypersurface.using_legacy_data = True + + # + # Get the fit values + # + + # Intercept + intercept_values = offset.values.reshape(binning.shape) + np.copyto(src=intercept_values, dst=hypersurface.intercept) + + # Param gradients + for param in hypersurface.params.values(): + sys_param_gradient_values = map_fit_results[param.name].values.reshape( + binning.shape) + np.copyto(src=sys_param_gradient_values, + dst=param.fit_coeffts[..., 0]) + + # Done, store the hypersurface + hypersurfaces[map_name] = hypersurface + + return hypersurfaces + + +# +# Test/example +# +def generate_asimov_testdata(binning, parameters, true_param_coeffs, + nominal_param_values, sys_param_values, + error_scale=0.1, log=False, intercept=2., + ): + hypersurface = Hypersurface( + params=parameters, # Specify the systematic parameters + # Intercept value (or first guess for fit) + initial_intercept=intercept, + log=log, + ) + assert set(hypersurface.params.keys()) == set(nominal_param_values.keys()) + assert set(hypersurface.params.keys()) == set(true_param_coeffs.keys()) + + hypersurface._init(binning=binning, nominal_param_values=nominal_param_values) + from pisa.core.map import Map, MapSet + for bin_idx in np.ndindex(binning.shape): + for name, coeffs in true_param_coeffs.items(): + assert len(coeffs) == hypersurface.params[name].num_fit_coeffts, ("number " + "of coefficients in the parameter must match") + for j, c in enumerate(coeffs): + idx = hypersurface.params[name].get_fit_coefft_idx(bin_idx=bin_idx, + coefft_idx=j, + ) + hypersurface.params[name].fit_coeffts[idx] = c + logging.debug("Truth hypersurface report:\n%s" % str(hypersurface)) + + # Only consider one particle type for simplicity + particle_key = "nue_cc" + # Create each dataset, e.g. set the systematic parameter values, calculate a bin count + hist = hypersurface.evaluate(nominal_param_values) + assert np.all(hist >= 0.), ("nominal map has negative values! " + "Choose different true parameters.") + nom_map = Map(name=particle_key, binning=binning, + hist=hist, error_hist=np.sqrt(hist)*error_scale, + ) + logging.debug("Nominal hist: \n%s" % str(nom_map.hist)) + sys_maps = [] + for i in range(len(sys_param_values)): + hist = hypersurface.evaluate(sys_param_values[i]) + assert np.all(hist > 0.), ("a systematic map has negative values! values: " + "%s systematics: %s" % (str(hist), str(sys_param_values[i]))) + sys_maps.append(Map(name=particle_key, binning=binning, + hist=hist, error_hist=np.sqrt(hist)*error_scale)) + return nom_map, sys_maps + + +def test_hypersurface_uncertainty(plot=False): + ''' + Simple test of hypersurface fits + uncertainty + 1. Creates some Asimov test data matching a true hypersurface and checks the ability + to fit back the truth. + 2. Fluctuates Asimov test data randomly to check uncertainties of hypersurface + ''' + + # Define systematic parameters in the hypersurface + params = [ + HypersurfaceParam(name="foo", func_name="linear", + initial_fit_coeffts=[1.]), + HypersurfaceParam(name="bar", func_name="quadratic", + initial_fit_coeffts=[1., -1.]), + ] + # Create the hypersurface + hypersurface = Hypersurface( + params=params, # Specify the systematic parameters + initial_intercept=1., # Intercept value (or first guess for fit) + log=False + ) + # Define binning with one dummy bin + binning = MultiDimBinning([OneDimBinning(name="reco_energy", + domain=[0., 10.], + num_bins=1, + units=ureg.GeV, + is_lin=True + )]) + # Define true coefficients + true_coeffs = {'foo': [-0.4], 'bar': [0.5, 1.]} + true_intercept = 5. + nominal_param_values = {'foo': 1., 'bar': 0.} + # making combinations of systematic values + foo_vals = np.linspace(-2., 2., 6) + bar_vals = np.linspace(-2, 1.5, 8) + sys_param_values = [] + for f in foo_vals: + for b in bar_vals: + sys_param_values.append({'foo': f, 'bar': b}) + + nom_map, sys_maps = generate_asimov_testdata(binning, + params, + true_coeffs, + nominal_param_values, + sys_param_values, + intercept=true_intercept, + log=False, + error_scale=0.2, + ) + # Perform fit + hypersurface.fit( + nominal_map=nom_map, + nominal_param_values=nominal_param_values, + sys_maps=sys_maps, + sys_param_values=sys_param_values, + norm=False, + ) + # Report the results + logging.debug("Fitted hypersurface report:\n%s" % hypersurface) + + assert np.allclose(hypersurface.intercept, true_intercept, + rtol=ALLCLOSE_KW['rtol']*10.) + for param_name in hypersurface.param_names: + assert np.allclose(hypersurface.params[param_name].fit_coeffts, + true_coeffs[param_name], rtol=ALLCLOSE_KW['rtol']*10.) + if plot: + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plot_bin_fits(ax, hypersurface, bin_idx=[0], param_name='foo', + label='Asimov test map') + ax.grid() + plt.savefig('test_hypersurface_foo.pdf') + + fig, ax = plt.subplots() + plot_bin_fits(ax, hypersurface, bin_idx=[0], param_name='bar', + label='Asimov test map') + ax.grid() + plt.savefig('test_hypersurface_bar.pdf') + + # Evaluate hypersurface and uncertainties at some points + # that just happen to be the systematic values (but choice could be different) + asimov_true_points = [] + asimov_fit_points = [] + asimov_fit_errs = [] + for i in range(len(sys_param_values)): + hist, errs = hypersurface.evaluate( + sys_param_values[i], return_uncertainty=True) + asimov_fit_points.append(hist) + asimov_fit_errs.append(errs) + asimov_true_points.append(sys_maps[i].nominal_values) + asimov_true_points = np.concatenate(asimov_true_points) + asimov_fit_points = np.concatenate(asimov_fit_points) + asimov_fit_errs = np.concatenate(asimov_fit_errs) + + logging.debug("Asimov true points:\n%s" % str(asimov_true_points)) + logging.debug("Asimov fit points:\n%s" % str(asimov_fit_points)) + logging.debug("Asimov fit error estimates:\n%s" % str(asimov_fit_errs)) + assert np.allclose(asimov_true_points, asimov_fit_points, rtol=ALLCLOSE_KW['rtol']*10.) + logging.debug("Fluctuating maps and re-fitting...") + # do several rounds of fluctuation, re-fit and storage of results + n_rounds = 100 + fluctuated_fit_points = [] + for i in range(n_rounds): + #logging.info("Round %d/%d" % (i+1, n_rounds)) + nom_map_fluct = nom_map.fluctuate(method='gauss') + sys_maps_fluct = [] + for s in sys_maps: + sys_maps_fluct.append(s.fluctuate(method='gauss')) + hypersurface.fit( + nominal_map=nom_map_fluct, + nominal_param_values=nominal_param_values, + sys_maps=sys_maps_fluct, + sys_param_values=sys_param_values, + norm=False, + ) + fluctuated_fit_points.append([]) + for j in range(len(sys_param_values)): + hist = hypersurface.evaluate( + sys_param_values[j], return_uncertainty=False) + fluctuated_fit_points[-1].append(hist) + fluctuated_fit_points[-1] = np.concatenate(fluctuated_fit_points[-1]) + logging.trace("Fluctuated fit points:\n%s" % + str(fluctuated_fit_points[-1])) + # evaluate whether the actual fluctuations match the estimated errors + fluctuated_fit_points = np.array(fluctuated_fit_points) + fit_differences = fluctuated_fit_points - asimov_fit_points + all_pulls = fit_differences / asimov_fit_errs + avg_fit_differences = np.mean(fit_differences, axis=0) + std_pulls = np.std(all_pulls, axis=0) + logging.debug("Average fluctuated fit difference:\n%s" % + str(avg_fit_differences)) + logging.debug("Mean pulls per point:\n%s" % str(std_pulls)) + logging.debug("Mean pull: %.3f" % np.mean(std_pulls)) + assert np.abs(np.mean(std_pulls) - + 1.) < 0.1, "avg. pulls too far from expectation" + + if plot: + plt.figure() + plt.hist(all_pulls.flatten(), bins=50, + density=True, label='fluctuated fits') + x_plot = np.linspace(-4, 4, 100) + plt.plot(x_plot, np.exp(-x_plot**2/2.) / + np.sqrt(2.*np.pi), label='expectation') + plt.title('pull distribution') + plt.xlabel('pull') + plt.ylabel('density') + plt.legend() + plt.savefig('test_hypersurface_pull.pdf') + logging.info('<< PASS : test_hypersurface_uncertainty >>') + + +def test_hypersurface_basics(): + ''' + Test basic fitting, inject/recover, storing and loading + ''' + import tempfile + from pisa.core.map import Map + + params = [HypersurfaceParam(name="foo", func_name="linear", + initial_fit_coeffts=[1.], + ), + # the exponential HS function did not reliably recover injected true + # parameters, probably due to the degeneracy with the intercept. + HypersurfaceParam(name="bar", func_name="quadratic", + initial_fit_coeffts=[.1, .1], + ), + ] + + # Create the hypersurface + hypersurface = Hypersurface(params=params, # Specify the systematic parameters + initial_intercept=1., # Intercept first guess for fit) + log=False, + ) + + binning = MultiDimBinning([OneDimBinning(name="reco_energy", + domain=[0., 10.], + num_bins=3, + units=ureg.GeV, + is_lin=True, + )]) + + # Define the values for the parameters for each dataset + nom_param_values = {} + sys_param_values_dict = {} + + if "foo" in [p.name for p in params]: + nom_param_values["foo"] = 0. + sys_param_values_dict["foo"] = [0., 0., 0., -1., +1., 1.] + + if "bar" in [p.name for p in params]: + nom_param_values["bar"] = 10. + sys_param_values_dict["bar"] = [20., 30., 0., 10., 10., 15.] + + # Get number of datasets + num_sys_datasets = len(list(sys_param_values_dict.values())[0]) + + # Only consider one particle type for simplicity + particle_key = "nue_cc" + + # Create a dummy "true" hypersurface that can be used to generate + # some fake bin values for the dataset + true_hypersurface = copy.deepcopy(hypersurface) + true_hypersurface._init( + binning=binning, nominal_param_values=nom_param_values) + true_hypersurface.intercept.fill(10.) + if "foo" in true_hypersurface.params: + true_hypersurface.params["foo"].fit_coeffts[..., 0].fill(2.) + if "bar" in true_hypersurface.params: + true_hypersurface.params["bar"].fit_coeffts[..., 0].fill(-.1) + true_hypersurface.params["bar"].fit_coeffts[..., 1].fill(0.05) + + logging.debug("Truth hypersurface report:\n%s" % str(true_hypersurface)) + + # Create each dataset, e.g. set the systematic parameter values, calculate bin count + hist = true_hypersurface.evaluate(nom_param_values) + nom_map = Map(name=particle_key, binning=binning, + hist=hist, error_hist=np.sqrt(hist), + ) + sys_maps = [] + sys_param_values = [] + for i in range(num_sys_datasets): + sys_param_values.append({name: sys_param_values_dict[name][i] + for name in list(true_hypersurface.params.keys()) + }) + hist = true_hypersurface.evaluate(sys_param_values[-1]) + sys_maps.append(Map(name=particle_key, binning=binning, + hist=hist, error_hist=np.sqrt(hist), + ) + ) + + # Perform fit + hypersurface.fit(nominal_map=nom_map, + nominal_param_values=nom_param_values, + sys_maps=sys_maps, + sys_param_values=sys_param_values, + norm=False, + ) + + logging.debug("Fitted hypersurface report:\n%s" % hypersurface) + + # Check the fitted parameter values match the truth + # This only works if `norm=False` in the `hypersurface.fit` call just above + logging.debug("Checking fit recovered truth...") + assert np.allclose(hypersurface.intercept, + true_hypersurface.intercept, rtol=ALLCLOSE_KW['rtol']*10.) + for param_name in hypersurface.param_names: + assert np.allclose(hypersurface.params[param_name].fit_coeffts, + true_hypersurface.params[param_name].fit_coeffts, + rtol=ALLCLOSE_KW['rtol']*10. + ) + logging.debug("... fit was successful!") + + # testing save/reload + with tempfile.TemporaryDirectory() as tmpdirname: + file_name = "hypersurface.json.bz2" + file_path = os.path.join(tmpdirname, file_name) + to_json(hypersurface, file_path) + + reloaded_hypersurface = Hypersurface.from_state(file_path) + + logging.debug( + "Checking saved and re-loaded hypersurfaces are identical...") + assert np.allclose(hypersurface.intercept, + reloaded_hypersurface.intercept, + rtol=ALLCLOSE_KW['rtol']*10. + ) + for param_name in hypersurface.param_names: + assert np.allclose(hypersurface.params[param_name].fit_coeffts, + reloaded_hypersurface.params[param_name].fit_coeffts, + rtol=ALLCLOSE_KW['rtol']*10. + ) + logging.debug("... save+re-load was successful!") + + # test getting and setting coefficients + coeffts = hypersurface.fit_coeffts + reloaded_hypersurface.fit_coeffts = coeffts + logging.debug( + "Checking hypersurfaces are identical after getting and setting coeffts...") + assert np.allclose(hypersurface.intercept, reloaded_hypersurface.intercept, + rtol=ALLCLOSE_KW['rtol']*10.) + for param_name in hypersurface.param_names: + assert np.allclose(hypersurface.params[param_name].fit_coeffts, + reloaded_hypersurface.params[param_name].fit_coeffts, + rtol=ALLCLOSE_KW['rtol']*10.) + logging.debug("... setting and getting coefficients was successful!") + logging.info('<< PASS : test_hypersurface_basics >>') + + +# Run the examp'es/tests +if __name__ == "__main__": + set_verbosity(2) + test_hypersurface_basics() + test_hypersurface_uncertainty() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/hypersurface/hypersurface_plotting.html b/_modules/pisa/utils/hypersurface/hypersurface_plotting.html new file mode 100644 index 000000000..1de45da2c --- /dev/null +++ b/_modules/pisa/utils/hypersurface/hypersurface_plotting.html @@ -0,0 +1,361 @@ + + + + + + pisa.utils.hypersurface.hypersurface_plotting — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.utils.hypersurface.hypersurface_plotting

+'''
+Hypersurface Plotting functions
+'''
+
+__all__ = ['plot_bin_fits', 'plot_bin_fits_2d']
+
+__author__ = 'T. Stuttard, A. Trettin'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+import numpy as np
+
+
+[docs] +def plot_bin_fits(ax, hypersurface, bin_idx, param_name, color=None, label=None, hs_label=None, show_nominal=False, show_offaxis=True, show_onaxis=True, show_zero=False, show_uncertainty=True, xlim=None): + ''' + Plot the hypersurface for a given bin, in 1D w.r.t. to a single specified parameter. + Plots the following: + - on-axis data points used in the fit + - hypersurface w.r.t to the specified parameter (1D) + - nominal value of the specified parameter + + Parameters + ---------- + ax : matplotlib.Axes + matplotlib ax to draw the plot on + + hypersurface : Hypersurface + Hypersurface to make the plots from + + bin_idx : tuple + Index (numpy array indexing format) of the bin to plot + + param_name : str + Name of the parameter of interest + + color : str + color to use for hypersurface curve + + label : str + label to use for hypersurface curve + + show_nominal : bool + Indicate the nominal value of the param on the plot + + show_uncertainty : bool + Indicate the hypersurface uncertainty on the plot + + show_onaxis : bool + Plot the "on-axis" input datasets (meaning those whose only + off-nominal parameter is the one being plotter). + + show_offaxis : bool + Plot the "off-axis" input datasets (meaning those with multiple + off-nominal parameter values). + + xlim : tuple or None + Optionally, specify the xlim to span when plotting the hypersurface + If not specified, will span all input datasets + + ''' + + import matplotlib.pyplot as plt + + # Get the param + param = hypersurface.params[param_name] + + # Check bin index + assert len(bin_idx) == len(hypersurface.binning.shape) + + # Get bin values for this bin only + try: + chosen_bin_values = np.squeeze( + [m.nominal_values[bin_idx] for m in hypersurface.fit_maps]) + chosen_bin_sigma = np.squeeze([m.std_devs[bin_idx] + for m in hypersurface.fit_maps]) + except: + # sometimes maps aren't stored, like when we are recovering interpolated + # hypersurfaces + chosen_bin_values = np.full(hypersurface.num_fit_sets, np.nan) + chosen_bin_sigma = np.full(hypersurface.num_fit_sets, np.nan) + + # Define a mask for selecting on-axis points only + on_axis_mask = hypersurface.get_on_axis_mask(param.name) + with np.errstate(invalid='ignore'): # empty bins are a regular occurrence + include_mask = np.ones_like(on_axis_mask) if show_zero else ( + np.asarray(chosen_bin_values) > 0.) + + # Plot the points from the datasets used for fitting + x = np.asarray(param.fit_param_values)[on_axis_mask & include_mask] + y = np.asarray(chosen_bin_values)[on_axis_mask & include_mask] + yerr = np.asarray(chosen_bin_sigma)[on_axis_mask & include_mask] + + if show_onaxis : + ax.errorbar(x=x, y=y, yerr=yerr, marker="o", color=( + "black" if color is None else color), linestyle="None", label=label) + + # Plot off-axis points by projecting them along the fitted surface on the axis. + if show_offaxis: + x = np.asarray(param.fit_param_values) + y = np.asarray(chosen_bin_values) + yerr = np.asarray(chosen_bin_sigma) + prediction = hypersurface.evaluate( + hypersurface.fit_param_values, bin_idx=bin_idx) + params_for_projection = {param.name: x} + for p in list(hypersurface.params.values()): + if p.name != param.name: + params_for_projection[p.name] = np.full_like( + x, hypersurface.nominal_values[p.name]) + prediction_on_axis = hypersurface.evaluate( + params_for_projection, bin_idx=bin_idx) + y_projected = y - prediction + prediction_on_axis + ax.errorbar(x=x[~on_axis_mask & include_mask], + y=y_projected[~on_axis_mask & include_mask], + yerr=yerr[~on_axis_mask & include_mask], + marker="o", color=("black" if color is None else color), linestyle="None", + alpha=0.2, + ) + + # Plot the hypersurface + # Generate as bunch of values along the sys param axis to make the plot + # Then calculate the hypersurface value at each point, using the nominal values for all other sys params + if xlim is None : + xlim = (np.nanmin(param.fit_param_values), np.nanmax(param.fit_param_values)) + x_plot = np.linspace(xlim[0], xlim[1], num=100) + params_for_plot = {param.name: x_plot, } + for p in list(hypersurface.params.values()): + if p.name != param.name: + params_for_plot[p.name] = np.full_like( + x_plot, hypersurface.nominal_values[p.name]) + y_plot, y_sigma = hypersurface.evaluate( + params_for_plot, bin_idx=bin_idx, return_uncertainty=True) + ax.plot(x_plot, y_plot, color=("red" if color is None else color), label=hs_label) + if show_uncertainty: + ax.fill_between(x_plot, y_plot - y_sigma, y_plot + y_sigma, + color=("red" if color is None else color), alpha=0.2) + + # Show the nominal value + if show_nominal: + ax.axvline(x=param.nominal_value, color="blue", + alpha=0.7, linestyle="-", zorder=-1) + + # Format ax + ax.set_xlabel(param.name) + ax.grid(True) + ax.legend() +# ax.set_ylim((-0.1, 4)) + + # Return the hypersurface + return_values = [x_plot, y_plot] + if show_uncertainty : + return_values.append(y_sigma) + return tuple(return_values)
+ + + +
+[docs] +def plot_bin_fits_2d(ax, hypersurface, bin_idx, param_names): + ''' + Plot the hypersurface for a given bin, in 2D w.r.t. to a pair of params + Plots the following: + - All data points used in the fit + - hypersurface w.r.t to the specified parameters (2D) + - nominal value of the specified parameters + + Parameters + ---------- + ax : matplotlib.Axes + matplotlib ax to draw the plot on + + hypersurface : Hypersurface + Hypersurface to make the plots from + + bin_idx : tuple + Index (numpy array indexing format) of the bin to plot + + param_names : list of str + List containing the names of the two parameters of interest + ''' + + import matplotlib.pyplot as plt + + assert len(param_names) == 2 + assert len(bin_idx) == len(hypersurface.binning.shape) + + # Get bin values for this bin only + chosen_bin_values = [m.nominal_values[bin_idx] + for m in hypersurface.fit_maps] + chosen_bin_sigma = [m.std_devs[bin_idx] for m in hypersurface.fit_maps] + + # Shortcuts to the param values and bin values + p0 = hypersurface.params[param_names[0]] + p1 = hypersurface.params[param_names[1]] + z = np.asarray(chosen_bin_values) + # zerr = #TODO error bars + + # Choose categories of points to plot + nominal_mask = hypersurface.get_nominal_mask() + p0_on_axis_mask = hypersurface.get_on_axis_mask(p0.name) & (~nominal_mask) + p1_on_axis_mask = hypersurface.get_on_axis_mask(p1.name) & (~nominal_mask) + + off_axis_mask = np.ones_like(p1_on_axis_mask, dtype=bool) + # Ignore points that are off-axis for other params + for p in list(hypersurface.params.values()): + if p.name not in param_names: + off_axis_mask = off_axis_mask & ( + p.fit_param_values == p.nominal_value) + off_axis_mask = off_axis_mask & ~( + p0_on_axis_mask | p1_on_axis_mask | nominal_mask) + + # Plot data points + ax.scatter(p0.fit_param_values[p0_on_axis_mask], p1.fit_param_values[p0_on_axis_mask], + z[p0_on_axis_mask], marker="o", color="blue", label="%s on-axis" % p0.name) + ax.scatter(p0.fit_param_values[p1_on_axis_mask], p1.fit_param_values[p1_on_axis_mask], + z[p1_on_axis_mask], marker="^", color="red", label="%s on-axis" % p1.name) + ax.scatter(p0.fit_param_values[off_axis_mask], p1.fit_param_values[off_axis_mask], + z[off_axis_mask], marker="s", color="black", label="Off-axis") + ax.scatter(p0.fit_param_values[nominal_mask], p1.fit_param_values[nominal_mask], + z[nominal_mask], marker="*", color="magenta", label="Nominal") + + # Plot hypersurface (as a 2D surface) + x_plot = np.linspace(p0.fit_param_values.min(), + p0.fit_param_values.max(), num=100) + y_plot = np.linspace(p1.fit_param_values.min(), + p1.fit_param_values.max(), num=100) + x_grid, y_grid = np.meshgrid(x_plot, y_plot) + x_grid_flat = x_grid.flatten() + y_grid_flat = y_grid.flatten() + params_for_plot = {p0.name: x_grid_flat, p1.name: y_grid_flat, } + for p in list(hypersurface.params.values()): + if p.name not in list(params_for_plot.keys()): + params_for_plot[p.name] = np.full_like( + x_grid_flat, hypersurface.nominal_values[p.name]) + z_grid_flat = hypersurface.evaluate(params_for_plot, bin_idx=bin_idx) + z_grid = z_grid_flat.reshape(x_grid.shape) + surf = ax.plot_surface(x_grid, y_grid, z_grid, cmap="viridis", linewidth=0, + antialiased=False, alpha=0.2) # , label="Hypersurface" ) + + # Format + ax.set_xlabel(p0.name) + ax.set_ylabel(p1.name) + ax.legend()
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/jsons.html b/_modules/pisa/utils/jsons.html new file mode 100644 index 000000000..b8cc13d66 --- /dev/null +++ b/_modules/pisa/utils/jsons.html @@ -0,0 +1,680 @@ + + + + + + pisa.utils.jsons — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.jsons

+"""
+A set of utilities for reading (and instantiating) objects from and writing
+objects to JSON files.
+"""
+
+
+from __future__ import absolute_import, division
+
+import bz2
+from collections import OrderedDict
+from collections.abc import Iterable, Mapping, Sequence
+from numbers import Integral, Number, Real
+import os
+import tempfile
+
+import numpy as np
+import simplejson as json
+from six import string_types
+
+from pisa import ureg
+from pisa.utils.log import logging, set_verbosity
+
+__all__ = [
+    'JSON_EXTS',
+    'ZIP_EXTS',
+    'XOR_EXTS',
+    'json_string',
+    'dumps',
+    'loads',
+    'from_json',
+    'to_json',
+    'NumpyEncoder',
+    'NumpyDecoder',
+    'test_to_json_from_json',
+]
+
+__author__ = 'S. Boeser, J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+JSON_EXTS = ['json']
+ZIP_EXTS = ['bz2']
+XOR_EXTS = ['xor']
+
+
+
+[docs] +def json_string(string): + """Decode a json string""" + return json.loads(string)
+ + + +
+[docs] +def dumps(content, indent=2): + """Dump object to JSON-encoded string""" + return json.dumps(content, cls=NumpyEncoder, indent=indent, + sort_keys=False)
+ + + +
+[docs] +def loads(s): + """Load (create) object from JSON-encoded string""" + return json.loads(s, cls=NumpyDecoder)
+ + + +
+[docs] +def from_json(filename, cls=None): + """Open a file in JSON format (optionally compressed with bz2 or + xor-scrambled) and parse the content into Python objects. + + Parameters + ---------- + filename : str + cls : class (type) object, optional + If provided, the class is attempted to be instantiated as described in + Notes section. + + Returns + ------- + contents_or_obj : simple Python objects or `cls` instantiated therewith + + Notes + ----- + If `cls` is provided as a class (type) object, this function attempts to + instantiate the class with the data loaded from the JSON file, as follows: + + * if `cls` has a `from_json` method, that is called directly: .. :: + + cls.from_json(filename) + + * if the data loaded from the JSON file is a non-string sequence: .. :: + + cls(*data) + + * if the data loaded is a Mapping (dict, OrderedDict, etc.): .. :: + + cls(**data) + + * for all other types loaded from the JSON: .. :: + + cls(data) + + Note that this currently only recognizes files by their extensions. I.e., + the file must be named .. :: + + myfile.json + myfile.json.bz2 + myfile.json.xor + + represent a bsic JSON file, a bzip-compressed JSON, and an xor-scrambled + JSON, respectively. + + """ + # Import here to avoid circular imports + from pisa.utils.log import logging + from pisa.utils.resources import open_resource + + if cls is not None: + if not isinstance(cls, type): + raise TypeError( + "`cls` should be a class object (type); got {} instead".format( + type(cls) + ) + ) + if hasattr(cls, "from_json"): + return cls.from_json(filename) + + # Otherwise, handle instantiating the class generically (which WILL + # surely fail for many types) based on the type of the object loaded + # from JSON file: Mapping is passed via cls(**data), non-string + # Sequence is passed via cls(*data), and anything else is passed via + # cls(data) + + _, ext = os.path.splitext(filename) + ext = ext.replace('.', '').lower() + assert ext in JSON_EXTS or ext in ZIP_EXTS + XOR_EXTS + try: + if ext == 'bz2': + fobj = open_resource(filename, 'rb') + try: + bz2_content = fobj.read() + finally: + fobj.close() + decompressed = bz2.decompress(bz2_content).decode() + del bz2_content + content = json.loads( + decompressed, + cls=NumpyDecoder, + object_pairs_hook=OrderedDict + ) + del decompressed + elif ext == 'xor': + + with open(filename, 'rb') as infile: + encrypted_bytes = infile.read() + + # decrypt with key 42 + decypted_bytes = bytearray() + for byte in encrypted_bytes: + decypted_bytes.append(byte ^ 42) + + content = json.loads(decypted_bytes.decode(), + cls=NumpyDecoder, + object_pairs_hook=OrderedDict) + else: + fobj = open_resource(filename) + try: + content = json.load( + fobj, + cls=NumpyDecoder, + object_pairs_hook=OrderedDict, + ) + finally: + fobj.close() + except: + logging.error('Failed to load JSON, `filename`="%s"', filename) + raise + + if cls is None: + return content + + if isinstance(content, Mapping): + return cls(**content) + if not isinstance(string_types) and isinstance(content, Sequence): + return cls(*content) + return cls(content)
+ + + +
+[docs] +def to_json(content, filename, indent=2, overwrite=True, warn=True, + sort_keys=False): + """Write `content` to a JSON file at `filename`. + + Uses a custom parser that automatically converts numpy arrays to lists. + + If `filename` has a ".bz2" extension, the contents will be compressed + (using bz2 and highest-level of compression, i.e., -9). + + If `filename` has a ".xor" extension, the contents will be xor-scrambled to + make them human-unreadable (this is useful for, e.g., blind fits). + + + Parameters + ---------- + content : obj + Object to be written to file. Tries making use of the object's own + `to_json` method if it exists. + + filename : str + Name of the file to be written to. Extension has to be 'json' or 'bz2'. + + indent : int + Pretty-printing. Cf. documentation of json.dump() or json.dumps() + + overwrite : bool + Set to `True` (default) to allow overwriting existing file. Raise + exception and quit otherwise. + + warn : bool + Issue a warning message if a file is being overwritten (`True`, + default). Suppress warning by setting to `False` (e.g. when overwriting + is the desired behaviour). + + sort_keys : bool + Output of dictionaries will be sorted by key if set to `True`. + Default is `False`. Cf. json.dump() or json.dumps(). + + """ + # Import here to avoid circular imports + from pisa.utils.fileio import check_file_exists + from pisa.utils.log import logging + + if hasattr(content, 'to_json'): + return content.to_json(filename, indent=indent, overwrite=overwrite, + warn=warn, sort_keys=sort_keys) + + check_file_exists(fname=filename, overwrite=overwrite, warn=warn) + + _, ext = os.path.splitext(filename) + ext = ext.replace('.', '').lower() + assert ext == 'json' or ext in ZIP_EXTS + XOR_EXTS + + with open(filename, 'wb') as outfile: + if ext == 'bz2': + outfile.write( + bz2.compress( + json.dumps( + content, outfile, indent=indent, cls=NumpyEncoder, + sort_keys=sort_keys, allow_nan=True, ignore_nan=False + ).encode() + ) + ) + elif ext == 'xor': + json_bytes = json.dumps( + content, indent=indent, cls=NumpyEncoder, + sort_keys=sort_keys, allow_nan=True, ignore_nan=False + ).encode() + + # encrypt with key 42 + encrypted_bytes = bytearray() + for byte in json_bytes: + encrypted_bytes.append(byte ^ 42) + + outfile.write(encrypted_bytes) + else: + outfile.write( + json.dumps( + content, indent=indent, cls=NumpyEncoder, + sort_keys=sort_keys, allow_nan=True, ignore_nan=False + ).encode() + ) + logging.debug('Wrote %.2f kiB to %s', outfile.tell()/1024., filename)
+ + + +# TODO: figure out how to serialize / deserialize scalars and arrays with +# uncertainties + +
+[docs] +class NumpyEncoder(json.JSONEncoder): + """ + Subclass of ::class::`json.JSONEncoder` that overrides `default` method to + allow writing numpy arrays and other special objects PISA uses to JSON + files. + """ +
+[docs] + def default(self, obj): # pylint: disable=method-hidden + """Encode special objects to be representable as JSON.""" + if hasattr(obj, 'serializable_state'): + return obj.serializable_state + + if isinstance(obj, string_types): + return obj + + if isinstance(obj, ureg.Quantity): + converted = [self.default(x) for x in obj.to_tuple()] + return converted + + # must have checked for & handled strings prior to this or infinite + # recursion will result + if isinstance(obj, Iterable): + return [self.default(x) for x in obj] + + if isinstance(obj, np.integer): + return int(obj) + + if isinstance(obj, np.floating): + return float(obj) + + # NOTE: np.bool_ is *Numpy* scalar bool type + if isinstance(obj, np.bool_): + return bool(obj) + + # NOTE: we check for these more generic types _after_ checking for + # np.bool_ since np.bool_ is considered to be both Integral and Real, + # but we want a boolean values (True or False) written out as such + if isinstance(obj, Integral): + return int(obj) + + if isinstance(obj, Real): + return float(obj) + + if isinstance(obj, string_types): + return obj + + # If we get here, we have a type that cannot be serialized. This call + # should simply raise an exception. + return super().default(obj)
+
+ + + +
+[docs] +class NumpyDecoder(json.JSONDecoder): + """Decode JSON array(s) as numpy.ndarray; also returns python strings + instead of unicode.""" + def __init__( + self, + encoding=None, + object_hook=None, + parse_float=None, + parse_int=None, + parse_constant=None, + strict=True, + object_pairs_hook=None, + ): + super().__init__( + encoding=encoding, + object_hook=object_hook, + parse_float=parse_float, + parse_int=parse_int, + parse_constant=parse_constant, + strict=strict, + object_pairs_hook=object_pairs_hook, + ) + # Only need to override the default array handler + self.parse_array = self.json_array_numpy + self.scan_once = json.scanner.py_make_scanner(self) + +
+[docs] + def json_array_numpy(self, s_and_end, scan_once, **kwargs): + """Interpret arrays (lists by default) as numpy arrays where this does + not yield a string or object array; also handle conversion of + particularly-formatted input to pint Quantities.""" + # Use the default array parser to get list-ified version of the data + values, end = json.decoder.JSONArray(s_and_end, scan_once, **kwargs) + + # Assumption for all below logic is the result is a Sequence (i.e., has + # attribute `__len__`) + assert isinstance(values, Sequence), str(type(values)) + "\n" + str(values) + + if len(values) == 0: + return values, end + + try: + # -- Check for pint quantity -- # + + if ( + isinstance(values, ureg.Quantity) + or any(isinstance(val, ureg.Quantity) for val in values) + ): + return values, end + + # Quantity tuple (`quantity.to_tuple()`) with a scalar produces from + # the raw JSON, e.g., + # + # [9.8, [['meter', 1.0], ['second', -2.0]]] + # + # or an ndarray (here of shape (2, 3)) produces from the raw JSON, + # e.g., + # + # [[[0, 1, 2], [2, 3, 4]], [['meter', 1.0], ['second', -2.0]]] + # + if ( + len(values) == 2 + and isinstance(values[1], Sequence) + and all( + isinstance(subval, Sequence) + and len(subval) == 2 + and isinstance(subval[0], string_types) + and isinstance(subval[1], Number) + for subval in values[1] + ) + ): + values = ureg.Quantity.from_tuple(values) + return values, end + + # Units part of quantity tuple (`quantity.to_tuple()[1]`) + # e.g. m / s**2 is represented as .. :: + # + # [['meter', 1.0], ['second', -2.0]] + # + # --> Simply return, don't perform further conversion + if ( + isinstance(values[0], Sequence) + and all( + len(subval) == 2 + and isinstance(subval[0], string_types) + and isinstance(subval[1], Number) + for subval in values + ) + ): + return values, end + + # Individual unit (`quantity.to_tuple()[1][0]`) + # e.g. s^-2 is represented as .. :: + # + # ['second', -2.0] + # + # --> Simply return, don't perform further conversion + if ( + len(values) == 2 + and isinstance(values[0], string_types) + and isinstance(values[1], Number) + ): + return values, end + + try: + ndarray_values = np.asarray(values) + except ValueError: + return values, end + + # Things like lists of dicts, or mixed types, will result in an + # object array; these are handled in PISA as lists, not numpy + # arrays, so return the pre-converted (list) version of `values`. + # + # Similarly, sequences of strings should stay lists of strings, not + # become numpy arrays. + if issubclass(ndarray_values.dtype.type, (np.object0, np.str0, str)): + return values, end + + return ndarray_values, end + + except TypeError: + return values, end
+
+ + +# TODO: include more basic types in testing (strings, etc.) +
+[docs] +def test_to_json_from_json(): + """Unit tests for writing various types of objects to and reading from JSON + files (including bz2-compressed and xor-scrambled files)""" + # pylint: disable=unused-variable + from shutil import rmtree + import sys + from pisa.utils.comparisons import recursiveEquality + + proto_float_array = np.array( + [-np.inf, np.nan, np.inf, -1.1, 0.0, 1.1], dtype=np.float64 + ) + proto_int_array = np.array([-2, -1, 0, 1, 2], dtype=np.int64) + proto_str_array = np.array(['a', 'ab', 'abc', '', ' '], dtype=str) + + floating_types = [float] + sorted( + set(t for _, t in np.sctypeDict.items() if issubclass(t, np.floating)), key=str, + ) + integer_types = [int] + sorted( + set(t for _, t in np.sctypeDict.items() if issubclass(t, np.integer)), key=str, + ) + + test_info = [ + dict( + proto_array=proto_float_array, + dtypes=floating_types, + ), + dict( + proto_array=proto_int_array, + dtypes=integer_types, + ), + # TODO: strings currently do not work + #dict( + # proto_array=proto_str_array, + # dtypes=[str, np.str0, np.str_, np.string_], + #), + ] + + test_data = OrderedDict() + for info in test_info: + proto_array = info['proto_array'] + for dtype in info['dtypes']: + typed_array = proto_array.astype(dtype) + s_dtype = str(np.dtype(dtype)) + test_data["array_" + s_dtype] = typed_array + test_data["scalar_" + s_dtype] = dtype(typed_array[0]) + + temp_dir = tempfile.mkdtemp() + try: + for name, obj in test_data.items(): + # Test that the object can be written / read directly + base_fname = os.path.join(temp_dir, name + '.json') + for ext in ['', '.bz2', '.xor']: + fname = base_fname + ext + to_json(obj, fname) + loaded_data = from_json(fname) + if obj.dtype in floating_types: + assert np.allclose( + loaded_data, obj, rtol=1e-12, atol=0, equal_nan=True + ), '{}=\n{}\nloaded=\n{}\nsee file: {}'.format( + name, obj, loaded_data, fname + ) + else: + assert np.all(loaded_data == obj), \ + '{}=\n{}\nloaded_nda=\n{}\nsee file: {}'.format( + name, obj, loaded_data, fname + ) + + # Test that the same object can be written / read as a value in a + # dictionary + orig = OrderedDict([(name, obj), (name + "x", obj)]) + base_fname = os.path.join(temp_dir, 'd.{}.json'.format(name)) + for ext in ['', '.bz2', '.xor']: + fname = base_fname + ext + to_json(orig, fname) + loaded = from_json(fname) + assert recursiveEquality(loaded, orig), \ + 'orig=\n{}\nloaded=\n{}\nsee file: {}'.format( + orig, loaded, fname + ) + finally: + rmtree(temp_dir) + + logging.info('<< PASS : test_to_json_from_json >>')
+ + + +if __name__ == '__main__': + set_verbosity(1) + test_to_json_from_json() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/kde_hist.html b/_modules/pisa/utils/kde_hist.html new file mode 100644 index 000000000..63254d92f --- /dev/null +++ b/_modules/pisa/utils/kde_hist.html @@ -0,0 +1,594 @@ + + + + + + pisa.utils.kde_hist — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.kde_hist

+"""
+Functions to get KDE smoothed historgams
+"""
+
+
+from __future__ import absolute_import, division
+
+from kde.cudakde import gaussian_kde, bootstrap_kde
+import numpy as np
+from uncertainties import unumpy as unp
+import copy
+
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+
+
+__all__ = ["get_hist", "kde_histogramdd", "test_kde_histogramdd"]
+
+__author__ = "P. Eller"
+
+__license__ = """Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License."""
+
+
+
+[docs] +def get_hist( + sample, + binning, + weights=None, + bw_method="scott", + adaptive=True, + alpha=0.3, + use_cuda=False, + coszen_reflection=0.25, + coszen_name="coszen", + oversample=1, + bootstrap=False, + bootstrap_niter=10, +): + """Helper function for histograms from KDE + + For description of args see kde_histogramdd() + + Handling the reflctions at the coszen edges + + ToDo: + ---- + * Handle zenith like coszen? Or better: Define set of variables to perform + reflection on and reflection parameters (e.g. `reflect_fract` or somesuch + to stand in for for `coszen_reflection` and `reflect_dims` as standin for + `coszen_name`; also need some way to specify whether to reflect about lower + and/or upper edge); each such parameter can either be a single value, or a + sequence with one value per variable. + * Any good reason for 0.25 and 'scott' defaults? If not, don't define a + default and force the user to explicitly set this when function is called. + """ + + if bootstrap and oversample > 1: + # Because the errors within a bin are highly correlated, they could not just + # be added in quadrature to create an oversampled histogram with errors. + raise ValueError("Bootstrapping cannot be combined with oversampling.") + + # the KDE implementation expects an empty weights array instead of `None` + if weights is None: + weights = [] + + # Get the overall normalization here, because the KDE will be normalized + # to one and we'll need to rescale in the end + if len(weights) == 0: + norm = sample.shape[0] + else: + norm = np.sum(np.nan_to_num(weights)) + + binning = binning.oversample(oversample) + + # Flip around to satisfy the kde implementation + x = sample.T + + # Must have same amount of dimensions as binning dimensions + assert x.shape[0] == len(binning) + + # TODO: What if coszen isn't in binning? Does this fail? + # Yes, coszen is expected + cz_bin = binning.index(coszen_name) + + # Swap out cz bin to first place (index 0) + if cz_bin != 0: + # Also swap binning: + new_binning = [binning[coszen_name]] + for b in binning: + if b.name != coszen_name: + new_binning.append(b) + binning = MultiDimBinning(new_binning) + x[[0, cz_bin]] = x[[cz_bin, 0]] + + # Check if edge needs to be reflected + reflect_lower = binning[coszen_name].bin_edges[0] == -1 + reflect_upper = binning[coszen_name].bin_edges[-1] == 1 + + # Get the kernel weights + kde_kwargs = dict( + weights=np.nan_to_num(weights), + bw_method=bw_method, + adaptive=adaptive, + alpha=alpha, + use_cuda=use_cuda, + ) + if bootstrap: + kernel_weights_adaptive = bootstrap_kde(x, niter=bootstrap_niter, **kde_kwargs) + else: + kernel_weights_adaptive = gaussian_kde(x, **kde_kwargs) + + # Get the bin centers, where we're going to evaluate the KDEs, and extend + # the bin range for reflection + bin_points = [] + for b in binning: + c = b.weighted_centers.m + if b.name == coszen_name: + # how many bins to add for reflection + l = int(len(c) * float(coszen_reflection)) + if reflect_lower: + c0 = 2 * c[0] - c[1 : l + 1][::-1] + else: + c0 = [] + if reflect_upper: + c1 = 2 * c[-1] - c[-l - 1 : -1][::-1] + else: + c1 = [] + c = np.concatenate([c0, c, c1]) + bin_points.append(c) + + # Shape including reflection edges + megashape = ( + binning.shape[0] + (int(reflect_upper) + int(reflect_lower)) * l, + binning.shape[1], + ) + + # Shape of the reflection edges alone + minishape = (binning.shape[0] - l, binning.shape[1]) + + # Create a set of points + grid = np.meshgrid(*bin_points, indexing="ij") + points = np.array([g.ravel() for g in grid]) + + # Evaluate KDEs at given points + if bootstrap: + hist, errors = kernel_weights_adaptive(points) + # variances can simply be added together when we apply reflections, we take + # the root afterwards + variances = errors ** 2 + else: + hist = kernel_weights_adaptive(points) + + # Reshape 1d array into nd + hist = hist.reshape(megashape) + if bootstrap: + variances = variances.reshape(megashape) + + def apply_reflection(hist_): + # Cut off the reflection edges, mirror them, fill up remaining space with + # zeros and add to histo + if reflect_lower: + hist0 = hist_[0:l, :] + hist0_0 = np.zeros(minishape) + hist0 = np.flipud(np.concatenate([hist0_0, hist0])) + hist_ = hist_[l:, :] + else: + hist0 = 0 + + if reflect_upper: + hist1 = hist_[-l:, :] + hist1_0 = np.zeros(minishape) + hist1 = np.flipud(np.concatenate([hist1, hist1_0])) + hist_ = hist_[:-l, :] + else: + hist1 = 0 + + hist_ = hist_ + hist1 + hist0 + return hist_ + + hist = apply_reflection(hist) + if bootstrap: + variances = apply_reflection(variances) + errors = np.sqrt(variances) + + # Bin volumes + volume = binning.bin_volumes(attach_units=False) + hist = hist * volume + if bootstrap: + errors = errors * volume + + # Downsample, not applicable when bootstrapping + if oversample != 1: + for i, b in enumerate(binning): + hist = np.add.reduceat( + hist, np.arange(0, len(b.bin_edges) - 1, oversample), axis=i + ) + + # Swap back the axes + if cz_bin != 0: + hist = np.swapaxes(hist, 0, cz_bin) + if bootstrap: + errors = np.swapaxes(errors, 0, cz_bin) + + if bootstrap: + return hist * norm, errors * norm + else: + return hist * norm
+ + + +
+[docs] +def kde_histogramdd( + sample, + binning, + weights=None, + bw_method="scott", + adaptive=True, + alpha=0.3, + use_cuda=False, + coszen_reflection=0.25, + coszen_name="coszen", + oversample=1, + stack_pid=True, + bootstrap=False, + bootstrap_niter=10 +): + """Run kernel density estimation (KDE) for an array of data points, and + then evaluate them on a histogram-like grid to effectively produce a + histogram-like output. + Handles reflection at coszen edges, and will expect coszen to be in the binning + + Based on Sebastian Schoenen's KDE implementation: + http://code.icecube.wisc.edu/svn/sandbox/schoenen/kde + + Parameters + ---------- + sample : array + Shape (N_evts, vars), with vars in the right order corresponding to the + binning order. + + binning : MultiDimBinning + A coszen dimension is expected + + weights : None or array + Same shape as `sample` + + bw_method: string + 'scott' or 'silverman' (see kde module) + + adaptive : bool + (see kde module) + + alpha : float + A parameter for the KDEs (see kde module) + + use_cuda : bool + Run on GPU (only works with <= 2d) + + coszen_reflection : float + Part (number between 0 and 1) of binning that is reflected at the + coszen -1 and 1 edges + + coszen_name : string + Binning name to identify the coszen bin that needs to undergo special + treatment for reflection + + oversample : int + Evaluate KDE at more points per bin, takes longer, but is more accurate + + stack_pid : bool + Treat each pid bin separately, not as another dimension of the KDEs + Only supported for two additional dimensions, pid binning must be named `pid` + + bootstrap : bool + Use the ``bootstrap_kde`` class to produce error estimates on the KDE histograms. + Slow, not recommended during fits. + + bootstrap_niter : int + Number of bootstrap iterations. + + Returns + ------- + histogram : numpy.ndarray + + ToDo: + ----- + + * Maybe return Map with binnings attached insted of nd-array? + * Generalize to handle any dimensions with any reflection criterias + + """ + if weights is not None and len(weights) != sample.shape[0]: + raise ValueError( + "Length of sample (%s) and weights (%s) incompatible" + % (sample.shape[0], len(weights)) + ) + + if not stack_pid: + return get_hist( + sample=sample, + binning=binning, + weights=weights, + bw_method=bw_method, + adaptive=adaptive, + alpha=alpha, + use_cuda=use_cuda, + coszen_reflection=coszen_reflection, + coszen_name=coszen_name, + oversample=oversample, + bootstrap=bootstrap, + bootstrap_niter=bootstrap_niter + ) + + # treat pid bins separately + # asuming we're dealing with 2d apart from PID + bin_names = copy.copy(binning.names) + bin_edges = [b.bin_edges.m for b in binning] + pid_bin = bin_names.index("pid") + other_bins = [0, 1, 2] + other_bins.pop(pid_bin) + bin_names.pop(pid_bin) + assert len(bin_names) == 2 + pid_bin_edges = bin_edges.pop(pid_bin) + d2d_binning = [] + for b in binning: + if b.name != "pid": + d2d_binning.append(b) + d2d_binning = MultiDimBinning(d2d_binning) + pid_stack = [] + if bootstrap: + pid_stack_errors = [] + + for pid in range(len(pid_bin_edges) - 1): + mask_pid = (sample.T[pid_bin] >= pid_bin_edges[pid]) & ( + sample.T[pid_bin] < pid_bin_edges[pid + 1] + ) + data = np.array( + [sample.T[other_bins[0]][mask_pid], sample.T[other_bins[1]][mask_pid]] + ) + + if weights is None: + weights_pid = None + else: + weights_pid = weights[mask_pid] + + hist_kwargs = dict( + sample=data.T, + weights=weights_pid, + binning=d2d_binning, + coszen_name=coszen_name, + use_cuda=use_cuda, + bw_method=bw_method, + alpha=alpha, + oversample=oversample, + coszen_reflection=coszen_reflection, + adaptive=adaptive, + bootstrap=bootstrap, + bootstrap_niter=bootstrap_niter + ) + if bootstrap: + hist, errors = get_hist(**hist_kwargs) + pid_stack.append(hist) + pid_stack_errors.append(errors) + else: + pid_stack.append(get_hist(**hist_kwargs)) + + hist = np.dstack(pid_stack) + if bootstrap: + errors = np.dstack(pid_stack_errors) + + if pid_bin != 2: + hist = np.swapaxes(hist, pid_bin, 2) + if bootstrap: + errors = np.swapaxes(errors, pid_bin, 2) + + if bootstrap: + return hist, errors + else: + return hist
+ + + +# TODO: make the plotting optional but add comparisons against some known +# results. This can be accomplished by seeding before calling random to obtain +# a reference result, and check that the same values are returned when run +# below. + + +
+[docs] +def test_kde_histogramdd(): + """Unit tests for kde_histogramdd""" + from argparse import ArgumentParser + from shutil import rmtree + from tempfile import mkdtemp + from pisa import ureg + from pisa.core.map import Map, MapSet + from pisa.utils.log import logging, set_verbosity + from pisa.utils.plotter import Plotter + + parser = ArgumentParser() + parser.add_argument("-v", action="count", default=None, help="set verbosity level") + args = parser.parse_args() + set_verbosity(args.v) + + temp_dir = mkdtemp() + + try: + my_plotter = Plotter( + stamp="", + outdir=temp_dir, + fmt="pdf", + log=False, + annotate=False, + symmetric=False, + ratio=True, + ) + + b1 = OneDimBinning( + name="coszen", num_bins=20, is_lin=True, domain=[-1, 1], tex=r"\cos(\theta)" + ) + b2 = OneDimBinning( + name="energy", num_bins=10, is_log=True, domain=[1, 80] * ureg.GeV, tex=r"E" + ) + b3 = OneDimBinning(name="pid", num_bins=2, bin_edges=[0, 1, 2], tex=r"pid") + binning = b1 * b2 * b3 + + # now let's generate some toy data + + N = 100000 + cz = np.random.normal(1, 1.2, N) + # cut away coszen outside -1, 1 + cz = cz[(cz >= -1) & (cz <= 1)] + e = np.random.normal(30, 20, len(cz)) + pid = np.random.uniform(0, 2, len(cz)) + data = np.array([cz, e, pid]).T + + # make numpy histogram for validation + bins = [unp.nominal_values(b.bin_edges) for b in binning] + raw_hist, _ = np.histogramdd(data, bins=bins) + + # get KDE'ed histo + hist = kde_histogramdd( + data, + binning, + bw_method="silverman", + coszen_name="coszen", + oversample=10, + use_cuda=True, + stack_pid=True, + ) + + # put into mapsets and plot + m1 = Map(name="KDE", hist=hist, binning=binning) + m2 = Map(name="raw", hist=raw_hist, binning=binning) + with np.errstate(divide="ignore", invalid="ignore"): + m3 = m2 / m1 + m3.name = "hist/KDE" + m3.tex = m3.name + m4 = m1 - m2 + m4.name = "KDE - hist" + m4.tex = m4.name + ms = MapSet([m1, m2, m3, m4]) + my_plotter.plot_2d_array(ms, fname="test_kde", cmap="summer") + except: + rmtree(temp_dir) + raise + else: + logging.warning( + "Inspect and manually clean up output(s) saved to %s" % temp_dir + )
+ + + +if __name__ == "__main__": + test_kde_histogramdd() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/likelihood_functions.html b/_modules/pisa/utils/likelihood_functions.html new file mode 100644 index 000000000..df16202a6 --- /dev/null +++ b/_modules/pisa/utils/likelihood_functions.html @@ -0,0 +1,253 @@ + + + + + + pisa.utils.likelihood_functions — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for pisa.utils.likelihood_functions

+"""
+This script contains functions to compute Barlow-Beeston Likelihood, as well as
+an implementation of the Poisson-Gamma mixture.
+
+These likelihood implementations (except for poissonLLH) take into account uncertainties due to
+finite Monte Carlo statistics.
+
+The functions are called in stats.py to apply them to histograms.
+
+Note that these likelihoods are NOT centered around 0 (i.e. if data == expectation, LLH != 0)
+"""
+from __future__ import print_function
+
+import numpy as np
+from scipy import special
+from scipy import optimize
+
+__author__ = "Ahnaf Tahmid"
+__email__ = "tahmid@ualberta.ca"
+__date__ = "2019-08-15"
+
+
+[docs] +def poisson_gamma(data, sum_w, sum_w2, a=1, b=0): + """ + Log-likelihood based on the poisson-gamma mixture. This is a Poisson likelihood using a Gamma prior. + This implementation is based on the implementation of Austin Schneider (aschneider@icecube.wisc.edu) + -- Input variables -- + data = data histogram + sum_w = MC histogram + sum_w2 = Uncertainty map (sum of weights squared in each bin) + a, b = hyperparameters of gamma prior for MC counts; default values of a = 1 and b = 0 corresponds to LEff (eq 3.16) https://doi.org/10.1007/JHEP06(2019)030 + a = 0 and b = 0 corresponds to LMean (Table 2) https://doi.org/10.1007/JHEP06(2019)030 + + -- Output -- + llh = LLH values in each bin + + -- Notes -- + Shape of data, sum_w, sum_w2 and llh are identical + """ + + llh = np.ones(data.shape) * -np.inf # Binwise LLH values + + bad_bins = np.logical_or(sum_w <= 0, sum_w2 < 0) # Bins where the MC is 0 or less than 0 + + # LLH would be 0 for the bad bins if the data is 0 + zero_llh = np.logical_and(data == 0, bad_bins) + llh[zero_llh] = 0 # Zero LLH for these bins if data is also 0 + + good_bins = ~bad_bins + poisson_bins = np.logical_and(sum_w2 == 0, good_bins) # In the limit that sum_w2 == 0, the llh converges to poisson + + llh[poisson_bins] = poissonLLH(data[poisson_bins], sum_w[poisson_bins]) # Poisson LLH since limiting case + + # Calculate hyperparameters for the gamma posterior for MC counts + regular_bins = np.logical_and(good_bins, ~poisson_bins) # Bins on which the poisson_gamma LLH would be evaluated + alpha = sum_w[regular_bins]**2./sum_w2[regular_bins] + a + beta = sum_w[regular_bins]/sum_w2[regular_bins] + b + + k = data[regular_bins] + # Poisson-gamma LLH + L = alpha*np.log(beta) + special.loggamma(k+alpha).real - special.loggamma(k+1.0).real - (k+alpha)*np.log1p(beta) - special.loggamma(alpha).real + llh[regular_bins] = L + + return llh
+ + +
+[docs] +def poissonLLH(data, mc): + """ + Standard poisson likelihood + -- Input variables -- + data = data histogram + mc = MC histogram + + -- Output -- + LLH values in each bin + + -- Notes -- + Shape of data, mc are identical + """ + return data*np.log(mc) - mc - special.loggamma(data + 1)
+ + +
+[docs] +def barlowLLH(data, unweighted_mc, weights): + """ + Barlow-Beeston log-likelihood (constant terms not omitted) + Link to paper: https://doi.org/10.1016/0010-4655(93)90005-W + -- Input variables -- + data = data histogram + mc = weighted MC histogram + unweighted_mc = unweighted MC histogream + weights = weight of each bin + + -- Output -- + llh = LLH values in each bin + + -- Notes -- + Shape of data, mc, unweighted_mc, weights and llh must be identical + """ + + # The actual barlow LLH + def llh(A_, k, w, a): + SMALL_VAL = 1.e-10 + + f = w*A_ + + # Takes care of log(0) problems + if not len(A_) > 1: + f = max((f, SMALL_VAL)) + A_ = max((A_, SMALL_VAL)) + + # The loggamma() terms takes care of the log(value!) for non-integer values + return -1.*(k*np.log(f) - f + a*np.log(A_) - A_ - special.loggamma(k+1) - special.loggamma(a+1)) + + A = np.array(unweighted_mc) # Expected unweighted counts in a bin + # For each bin the appropriate 'A' will now be found using the current counts as a seed + # This will be done by using a minimiser to ensure that the value of 'A' found minimises the -LLH + + # Find values of A such that llh in each bin is a maximum + for i, val in enumerate(A): + # If the unweighted MC counts in the bin is 0, A = 0 + if val == 0: + continue + # Otherwise, find the value of A + arg = (data[i], weights[i], unweighted_mc[i]) + # Powell works fast and is fine for our purposes + result = optimize.minimize(fun=llh, x0=val, args=arg, method='Powell') + + # Check that the minimisation ran properly + if result.success: + A[i] = result.x + else: + print("Something went wrong...") + print("Minimiser message: ") + print("------------------") + print(result.message) + return -np.inf + + LLH = llh(A, data, weights, unweighted_mc) + + return -1*LLH # Return LLH (not negative LLH)
+ + + +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/llh_server.html b/_modules/pisa/utils/llh_server.html new file mode 100644 index 000000000..c5e2ce5d7 --- /dev/null +++ b/_modules/pisa/utils/llh_server.html @@ -0,0 +1,345 @@ + + + + + + pisa.utils.llh_server — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.llh_server

+#!/usr/bin/env python
+
+"""
+Server(s) for handling llh requests from a client: client passes free param
+values, server sets these on its DistributionMaker, generates outputs, and
+compares the resulting distributions against a reference template, returning
+the llh value.
+
+Code adapted from Dan Krause
+  https://gist.github.com/dankrause/9607475
+see `__license__`.
+"""
+
+from __future__ import absolute_import, division, print_function
+
+__author__ = "Dan Krause, adapted by J.L. Lanfranchi"
+
+__license__ = """
+Copyright 2017 Dan Krause
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License."""
+
+__all__ = [
+    "DFLT_HOST",
+    "DFLT_PORT",
+    "DFLT_NUM_SERVERS",
+    "send_obj",
+    "receive_obj",
+    "serve",
+    "fork_servers",
+    "main",
+]
+
+
+from argparse import ArgumentParser
+from multiprocessing import cpu_count, Process
+import pickle
+import socketserver
+import struct
+
+from pisa.core.distribution_maker import DistributionMaker
+from pisa.core.map import MapSet
+
+
+DFLT_HOST = "localhost"
+DFLT_PORT = "9000"
+DFLT_NUM_SERVERS = cpu_count()
+
+
+class ConnectionClosed(Exception):
+    """Connection closed"""
+
+
+
+[docs] +def send_obj(obj, sock): + """Send a Python object over a socket. Object is pickle-encoded as the + payload and sent preceded by a 4-byte header which indicates the number of + bytes of the payload. + + Parameters + ---------- + sock : socket + obj : pickle-able Python object + Object to send + + """ + # Turn object into a string + payload = pickle.dumps(obj) + + # Create a header that says how large the payload is + header = struct.pack('!i', len(payload)) + + # Send header + sock.sendall(header) + + # Send payload + sock.sendall(payload)
+ + + +
+[docs] +def receive_obj(sock): + """Receive an object from a socket. Payload is a pickle-encoded object, and + header (prefixing payload) is 4-byte int indicating length of the payload. + + Parameters + ---------- + sock : socket + + Returns + ------- + obj + Unpickled Python object + + """ + # Get 4-byte header which tells how large the subsequent payload will be + header = sock.recv(4) + if len(header) == 0: + raise ConnectionClosed() + payload_size = struct.unpack('!i', header)[0] + + # Receive the payload + payload = sock.recv(payload_size) + if len(payload) == 0: + raise ConnectionClosed() + + # Payload was pickled; unpickle to recreate original Python object + obj = pickle.loads(payload) + + return obj
+ + + +
+[docs] +def serve(config, ref, port=DFLT_PORT): + """Instantiate PISA objects and run server for processing requests. + + Parameters + ---------- + config : str or iterable thereof + Resource path(s) to pipeline config(s) + + ref : str + Resource path to reference map + + port : int or str, optional + + """ + # Instantiate the objects here to save having to do this repeatedly + dist_maker = DistributionMaker(config) + ref = MapSet.from_json(ref) + + # Define server as a closure such that it captures the above-instantiated objects + class MyTCPHandler(socketserver.BaseRequestHandler): + """ + The request handler class for our server. + + It is instantiated once per connection to the server, and must override + the handle() method to implement communication to the client. + + See socketserver.BaseRequestHandler for documentation of args. + """ + def handle(self): + try: + param_values = receive_obj(self.request) + except ConnectionClosed: + return + dist_maker._set_rescaled_free_params(param_values) # pylint: disable=protected-access + test_map = dist_maker.get_outputs(return_sum=True)[0] + llh = test_map.llh( + expected_values=ref, + binned=False, # return sum over llh from all bins (not per-bin llh's) + ) + send_obj(llh, self.request) + + server = socketserver.TCPServer((DFLT_HOST, int(port)), MyTCPHandler) + print("llh server started on {}:{}".format(DFLT_HOST, port)) + server.serve_forever()
+ + + +
+[docs] +def fork_servers(config, ref, port=DFLT_PORT, num=DFLT_NUM_SERVERS): + """Fork multiple servers for handling LLH requests. Objects are identically + configured, and ports used are sequential starting from `port`. + + Parameters + ---------- + config : str or iterable thereof + ref : str + port : str or int, optional + num : int, optional + Defaults to number of CPUs returned by `multiple.cpu_count()` + + """ + processes = [] + for port_ in range(int(port), int(port) + int(num)): + kwargs = dict(config=config, ref=ref, port=str(port_)) + process = Process(target=serve, kwargs=kwargs) + processes.append(process) + + # Start all processes + for process in processes: + process.start() + + # Wait for all processes to finish + for process in processes: + process.join()
+ + + +
+[docs] +def main(description=__doc__): + """Parse command line arguments""" + parser = ArgumentParser(description=description) + parser.add_argument( + "--config", + required=True, + nargs="+", + help="""Resource location of one or more pipeline configs""", + ) + parser.add_argument( + "--ref", + required=True, + help="Resource location of reference (truth) map", + ) + parser.add_argument("--port", default=DFLT_PORT) + parser.add_argument( + "--num", + default=1, + type=int, + help="Number of servers to fork (>= 1); if set to 1, no forking occurs", + ) + args = parser.parse_args() + kwargs = vars(args) + num = kwargs.pop("num") + if num == 1: + serve(**kwargs) + else: + fork_servers(num=num, **kwargs)
+ + + +if __name__ == "__main__": + main() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/log.html b/_modules/pisa/utils/log.html new file mode 100644 index 000000000..daae92c45 --- /dev/null +++ b/_modules/pisa/utils/log.html @@ -0,0 +1,254 @@ + + + + + + pisa.utils.log — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.log

+"""
+This module sets up the logging system by looking for a "logging.json"
+configuration file. It will search (in this order) the local directory, $PISA
+and finally the package resources. The loggers found in there will be lifted
+to the module namespace.
+
+Currently, we have three loggers
+* logging: generic for what is going on  (typically: `opening file x` or
+  `doing this now` messages)
+* physics: for any physics output that might be interesting
+  (`have x many events`, `the flux is ...`)
+* tprofile: for how much time it takes to run some step (in the format of
+  `time : start bla`, `time : stop bla`)
+"""
+
+
+from __future__ import absolute_import
+
+import enum
+import json
+import logging as logging_module
+import logging.config as logging_config
+from os import environ
+from os.path import expanduser, expandvars, isfile, join
+from pkg_resources import resource_stream
+
+
+__all__ = ['Levels', 'logging', 'physics', 'tprofile', 'set_verbosity']
+
+__author__ = 'S. Boeser'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +class Levels(enum.IntEnum): + """ + Logging levels / int values we use in PISA in `set_verbosity` (and + typically from the command line, where -v/-vv/-vvv/etc. are used) + """ + FATAL = -2 + ERROR = -1 + WARN = 0 # default if NO "-v(vvv...)" are passed at command line + INFO = 1 # pass "-v" at command line + DEBUG = 2 # pass "-vv" at command line + TRACE = 3 # pass "-vvv" at command line
+ + + +def initialize_logging(): + """Intializing PISA logging""" + # Add a trace level + logging_module.TRACE = 5 + logging_module.addLevelName(logging_module.TRACE, 'TRACE') + def trace(self, message, *args, **kws): + """Trace-level logging""" + self.log(logging_module.TRACE, message, *args, **kws) + logging_module.Logger.trace = trace + logging_module.RootLogger.trace = trace + logging_module.trace = logging_module.root.trace + + # Get the logging configuration + logf = None + try: + if 'PISA_RESOURCES' in environ: + for path in environ['PISA_RESOURCES'].split(':'): + fpath = join(expanduser(expandvars(path)), + 'settings/logging/logging.json') + if isfile(fpath): + logf = open(fpath, 'r') + break + + if logf is None: + resource_spec = ('pisa_examples', + 'resources/settings/logging/logging.json') + logf = resource_stream(*resource_spec) + + if logf is None: + raise ValueError('Could not find "logging.json" in PISA_RESOURCES' + ' or in pisa_examples/resources.') + logconfig = json.load(logf) + + finally: + if logf is not None: + logf.close() + + # Setup the logging system with this config + logging_config.dictConfig(logconfig) + + thandler = logging_module.StreamHandler() + tformatter = logging_module.Formatter( + fmt=logconfig['formatters']['profile']['format'] + ) + thandler.setFormatter(tformatter) + + # Capture warnings + logging_module.captureWarnings(True) + + _logging = logging_module.getLogger('pisa') + _physics = logging_module.getLogger('pisa.physics') + _tprofile = logging_module.getLogger('pisa.tprofile') + # TODO: removed following line due to duplicate logging messages. Probably + # should fix this in a better manner... + #_tprofile.handlers = [thandler] + + return _logging, _physics, _tprofile + + +
+[docs] +def set_verbosity(verbosity): + """Set the verbosity level for the root logger Verbosity should be an + integer with the levels defined by `pisa.utils.log.Levels` enum.""" + # Ignore if no verbosity is given + if verbosity is None: + return + + # mapping from our verbisoity int Levels to those of logging module + levels_mapping = { + int(Levels[n]): getattr(logging_module, n) for n in [l.name for l in Levels] + } + + if verbosity not in levels_mapping: + raise ValueError( + '`verbosity` specified is %s but must be one of %s.' + %(verbosity, list(levels_mapping.keys())) + ) + + # Overwrite the root logger with the verbosity level + logging.setLevel(levels_mapping[verbosity]) + tprofile.setLevel(levels_mapping[verbosity])
+ + + +# Make the loggers public +logging, physics, tprofile = initialize_logging() # pylint: disable=invalid-name +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/matrix.html b/_modules/pisa/utils/matrix.html new file mode 100644 index 000000000..995bb6e70 --- /dev/null +++ b/_modules/pisa/utils/matrix.html @@ -0,0 +1,260 @@ + + + + + + pisa.utils.matrix — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.matrix

+"""
+Utilities for performing some not-so-common matrix tasks.
+"""
+
+import numpy as np
+import scipy.linalg as lin
+
+from pisa.utils.log import logging, set_verbosity
+
+__all__ = [
+    'is_psd',
+    'fronebius_nearest_psd',
+]
+
+__author__ = 'A. Trettin'
+
+__license__ = '''Copyright (c) 2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+[docs] +def is_psd(A): + """Test whether a matrix is positive semi-definite. + + Test is done via attempted Cholesky decomposition as suggested in [1]_. + + Parameters + ---------- + A : numpy.ndarray + Symmetric matrix + + Returns + ------- + bool + True if `A` is positive semi-definite, else False + + References + ---------- + .. [1] N.J. Higham, "Computing a nearest symmetric positive semidefinite + matrix" (1988): https://doi.org/10.1016/0024-3795(88)90223-6 + """ + # pylint: disable=invalid-name + try: + _ = np.linalg.cholesky(A) + return True + except np.linalg.LinAlgError: + return False
+ + +
+[docs] +def fronebius_nearest_psd(A, return_distance=False): + """Find the positive semi-definite matrix closest to `A`. + + The closeness to `A` is measured by the Fronebius norm. The matrix closest to `A` + by that measure is uniquely defined in [3]_. + + Parameters + ---------- + A : numpy.ndarray + Symmetric matrix + return_distance : bool, optional + Return distance of the input matrix to the approximation as given in + theorem 2.1 in [3]_. + This can be compared to the actual Frobenius norm between the + input and output to verify the calculation. + + Returns + ------- + X : numpy.ndarray + Positive semi-definite matrix approximating `A`. + + Notes + ----- + This function is a modification of [1]_, which is a Python adaption of [2]_, which + credits [3]_. + + References + ---------- + .. [1] https://gist.github.com/fasiha/fdb5cec2054e6f1c6ae35476045a0bbd + .. [2] https://www.mathworks.com/matlabcentral/fileexchange/42885-nearestspd + .. [3] N.J. Higham, "Computing a nearest symmetric positive semidefinite + matrix" (1988): https://doi.org/10.1016/0024-3795(88)90223-6 + """ + # pylint: disable=invalid-name + assert A.ndim == 2, "input is not a 2D matrix" + B = (A + A.T)/2. + _, H = lin.polar(B) + X = (B + H)/2. + # small numerical errors can make matrices that are not exactly + # symmetric, fix that + X = (X + X.T)/2. + # due to numerics, it's possible that the matrix is _still_ not psd. + # We can fix that iteratively by adding small increments of the identity matrix. + # This part comes from [1]. + if not is_psd(X): + spacing = np.spacing(lin.norm(X)) + I = np.eye(X.shape[0]) + k = 1 + while not is_psd(X): + mineig = np.min(np.real(lin.eigvals(X))) + X += I * (-mineig * k**2 + spacing) + k += 1 + if return_distance: + C = (A - A.T)/2. + lam = lin.eigvalsh(B) + # pylint doesn't know that numpy.sum takes the "where" argument + # pylint: disable=unexpected-keyword-arg + dist = np.sqrt(np.sum(lam**2, where=lam < 0.) + lin.norm(C, ord='fro')**2) + return X, dist + return X
+ + +def check_frob_psd(A): + """Check approximation of Frobenius-closest PSD on given matrix. + + This is not a unit test. + + Parameters + ---------- + A : numpy.ndarray + Symmetric matrix + """ + # pylint: disable=invalid-name + X, xdist = fronebius_nearest_psd(A, return_distance=True) + is_psd_after = is_psd(X) + actual_dist = lin.norm(A - X, ord='fro') + assert is_psd_after, "did not produce PSD matrix" + assert np.isclose(xdist, actual_dist), "actual distance differs from expectation" + +def test_matrix_random(): + """Unit test producing a number of random matrices and checking if the + approximated matrix is indeed PSD. + """ + m_test = np.array([[1, -1], [2, 4]]) + check_frob_psd(m_test) + for i in range(100): + m_test = np.random.randn(3, 3) + check_frob_psd(m_test) + logging.info('<< PASS : test_matrix_random >>') + +if __name__ == '__main__': + set_verbosity(1) + test_matrix_random() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/mcSimRunSettings.html b/_modules/pisa/utils/mcSimRunSettings.html new file mode 100644 index 000000000..4698b4d0a --- /dev/null +++ b/_modules/pisa/utils/mcSimRunSettings.html @@ -0,0 +1,556 @@ + + + + + + pisa.utils.mcSimRunSettings — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.mcSimRunSettings

+#!/usr/bin/env python
+
+"""Handle Monte Carlo simulation run settings"""
+
+
+from __future__ import absolute_import, division
+
+import pisa.utils.fileio as fileio
+import pisa.utils.flavInt as flavInt
+from pisa.utils import resources as resources
+from pisa.utils.cross_sections import CrossSections
+
+# Following "import *" is intentionally done so that `eval` called in
+# translate_source_dict will execute with direct access to numpy namespace
+from numpy import * # pylint: disable=wildcard-import, unused-wildcard-import, redefined-builtin
+
+
+__all__ = ['MCSimRunSettings', 'DetMCSimRunsSettings']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: make ability to serialize instantiated MCSimRunSettings and
+# DetMCSimRunsSettings objects back to JSON format from which they were
+# generated
+
+# TODO: put more thought into the MCSimRunSettings class
+
+# TODO: make sure user is forced to choose run & detector here
+
+
+[docs] +class MCSimRunSettings(dict): + """Handle Monte Carlo run settings + + Parameters + ---------- + run_settings : string or dict + run + detector : string or None + + Notes + ----- + run_settings dictionary format (and same for corresponding JSON file, e.g. + resources/events/mc_sim_run_settings.json); example is for PINGU but should + generalize to DeepCore, etc. Note that a JSON file will use null and not + None. + + (Also note that expressions for numerical values utilizing the Python/numpy + namespace are valid, e.g. "2*pi" will be evaluated within the code to its + decimal value.):: + + { + + # Specify the detector name, lower case + "pingu": { + + # Monte Carlo run number for this detector + "388": { + + # Version of geometry, lower-case. E.g., ic86 for IceCube/DeepCore + "geom": "v36", + + # A straightforward way of computing aeff/veff/meff is to keep all + # simulated events and compare the #analysis/#simulated. If all + # simulated events are kept, then the filename containing these is + # recorded here. + "all_gen_events_file": None, + + # Max and min azimuth angle simulated (rad) + "azimuth_max": "2*pi", + "azimuth_min": 0, + + # Max and min energy simulated (GeV) + "energy_max": 80, + "energy_min": 1, + + # GENIE simulates some un-physica events (interactions that will not + # occur in nature). The number below was arrived at by Ken Clark, so + # ask him for more info. + "physical_events_fract": 0.8095, + + # GENIE has a prescale factor (TODO: generalize or eliminate for + # other xsec?) + "genie_prescale_factor": 1.2, + + # Neutrino flavors simulated + "flavints": "nutau,nutaubar", + + # #nu / (#nu + #nubar) simulated + "nu_to_total_fract": 0.5, + + # Number of events simulated per I3 file + "num_events_per_file": 250000, + + # Number of I3 files used + "num_i3_files": 195, + + # Simulated spectral inde gamma; value of 1 => E*{-1} + "sim_spectral_index": 1, + + # Version of neutrino/ice cross sections used for the simulation + "xsec_version": "genie_2.6.4", + + # Max and min zenith angle simulated (rad) + "zenith_max": "pi", + "zenith_min": 0 + } + } + } + + + """ + def __init__(self, run_settings, run=None, detector=None): + super().__init__() + # TODO: clean up this constructor! + #if isinstance(run_settings, str): + # rsd = jsons.from_json(resources.find_resource(run_settings)) + if isinstance(run_settings, dict): + rsd = run_settings + else: + raise TypeError('Unhandled run_settings type passed in arg: %s' + %type(run_settings)) + #if detector is not None: + # try: + # rsd = rsd[detector] + # except: + # pass + rsd = self.translate_source_dict(rsd) + if not detector is None: + detector = str(detector).strip() + self.detector = detector + self.run = run + self.update(rsd) + +
+[docs] + @staticmethod + def translate_source_dict(d): + d['tot_gen'] = d['num_events_per_file'] * d['num_i3_files'] + + # TODO: does the following logic actually work with both old and new + # conventions? + + # NOTE: the ',' --> '+' mapping is necessary since some data files + # were saved prior to the convention that commas exclusively separate + # groups while plus signs indicate flav/ints grouped together + + d['flavints'] = flavInt.NuFlavIntGroup(d['flavints'].replace(',', '+')) + + # Numeric fields are allowed to be expressions that get evaluated + numeric_fields = [ + 'azimuth_max', + 'azimuth_min', + 'energy_max', + 'energy_min', + 'physical_events_fract', + 'genie_prescale_factor', + 'nu_to_total_fract', + 'num_events_per_file', + 'num_i3_files', + 'sim_spectral_index', + 'zenith_max', + 'zenith_min', + ] + for f in numeric_fields: + if isinstance(d[f], str): + d[f] = eval(d[f]) + + return d
+ + +
+[docs] + def consistency_checks(self, data, flav=None): + # TODO: implement! + pass
+ + +
+[docs] + def barnobarfract(self, barnobar=None, is_particle=None, + flav_or_flavint=None): + """Fraction of events generated (either particles or antiparticles). + + Specifying whether you want the fraction for particle or + antiparticle is done by specifying one (and only one) of the three + parameters: + `barnobar`, `is_particle` or `flav_or_flavint` + + Parameters + ---------- + barnobar : None or int + -1 for antiparticle, +1 for particle + is_particle : None or bool + True for particle, false for antiparticle + flav_or_flavint : None or convertible to NuFlav or NuFlavInt + Particle or antiparticles is determined from the flavor or flavint + passed + + """ + nargs = sum([(not barnobar is None), + (not is_particle is None), + (not flav_or_flavint is None)]) + if nargs != 1: + raise ValueError('One and only one of `barnobar`, `is_particle`,' + ' and `flav_or_flavint` must be specified. Got' + ' %d non-None args instead.' % nargs) + + if flav_or_flavint is not None: + is_particle = flavInt.NuFlavInt(flav_or_flavint).particle + elif barnobar is not None: + is_particle = barnobar > 0 + + if is_particle: + return self['nu_to_total_fract'] + return 1 - self['nu_to_total_fract']
+ + +
+[docs] + def get_num_gen(self, barnobar=None, is_particle=None, + flav_or_flavint=None, include_physical_fract=True): + """Return the number of events generated. + + Parameters + ---------- + barnobar : None or int + -1 for antiparticle or +1 for particle + + is_particle : None or bool + + flav_or_flavint : None or convertible to NuFlav or NuFlavInt + If one of `barnobar`, `is_particle`, or `flav_or_flavint` is + specified, returns only the number of particles or antiparticles + generated. Otherwise (if none of those is specified), return the + total number of generated events. + + include_physical_fract : bool + Whether to include the "GENIE physical fraction", which accounts + for events that are generated but are un-physical and therefore + will never be detectable. These are removed to not penalize + detection efficiency. + + """ + nargs = sum([(not barnobar is None), + (not is_particle is None), + (not flav_or_flavint is None)]) + if flav_or_flavint is not None: + if (flav_or_flavint not in self.get_flavs() + and flav_or_flavint not in self.get_flavints()): + return 0 + barnobarfract = 1 + if nargs > 0: + barnobarfract = self.barnobarfract( + barnobar=barnobar, is_particle=is_particle, + flav_or_flavint=flav_or_flavint + ) + physical_fract = 1 + if include_physical_fract: + physical_fract = self['physical_events_fract'] + return self['tot_gen'] * barnobarfract * physical_fract
+ + +
+[docs] + def get_flavints(self): + return self['flavints'].get_flavints()
+ + +
+[docs] + def get_flavs(self): + return self['flavints'].get_flavs()
+ + +
+[docs] + def get_energy_range(self): + """(min, max) energy in GeV""" + return self['energy_min'], self['energy_max']
+ + +
+[docs] + def get_spectral_index(self): + """Spectral index (positive number for negative powers of energy)""" + return self['sim_spectral_index']
+ + +
+[docs] + def get_xsec_version(self): + """Cross sectons version name used in generating the MC""" + return self['xsec_version']
+ + +
+[docs] + def get_xsec(self, xsec=None): + """Instantiated CrossSections object""" + if xsec is None: + return CrossSections(ver=self['xsec_version']) + return CrossSections(ver=self['xsec_version'], xsec=xsec)
+
+ + + +
+[docs] +class DetMCSimRunsSettings(dict): + """Handle Monte Carlo run settings for a detector (i.e., without specifying + which run as is required for the MCSimRunSettings object) + + Since run is not specified at instantiation, method calls require the user + to specify a run ID. + + Parameters + ---------- + run_settings : string or dict + detector : string or None + + See Also + -------- + MCSimRunSettings : Same, but specifies a specific run at instantiation; see + class docstring for specification of run_settings dict / + JSON file + + """ + def __init__(self, run_settings, detector=None): + super().__init__() + if isinstance(run_settings, str): + rsd = fileio.from_file(resources.find_resource(run_settings)) + elif isinstance(run_settings, dict): + rsd = run_settings + else: + raise TypeError('Unhandled run_settings type passed in arg: ' + + type(run_settings)) + + if detector: + detector = str(detector).strip() + self.detector = detector + + # Determine how deeply nested runs are in the dict to allow for + # user to specify a dict that has multiple detectors in it OR + # a dict with just a single detector in it + if 'flavints' in rsd.values()[0]: + runs_d = rsd + elif 'flavints' in rsd.values()[0].values()[0]: + if self.detector is None: + if len(rsd) == 1: + runs_d = rsd.values()[0] + else: + raise ValueError('Must specify which detector; detectors ' + 'found: ' + str(rsd.keys())) + else: + runs_d = rsd[self.detector.strip()] + else: + raise Exception('dict must either be 3 levels: ' + '{DET:{RUN:{...}}}; or 2 levels: {RUN:{...}}') + + # Force run numbers to be strings (JSON files cannot have an int as + # a key, so it is a string upon import, and it's safest to keep it as + # a string considering how non-standardized naming is in IceCube) and + # convert actual run settings dict to MCSimRunSettings instances + runs_d = {str(k): MCSimRunSettings(v) for k, v in runs_d.items()} + + # Save the runs_d to this object instance, which behaves like a dict + self.update(runs_d) + +
+[docs] + def consistency_checks(self, data, run, flav=None): + pass
+ + +
+[docs] + def barnobarfract(self, run, barnobar=None, is_particle=None, + flav_or_flavint=None): + return self[str(run)].barnobarfract(barnobar=barnobar, + is_particle=is_particle, + flav_or_flavint=flav_or_flavint)
+ + +
+[docs] + def get_num_gen(self, run, barnobar=None, is_particle=None, + flav_or_flavint=None, include_physical_fract=True): + """Return the total number of events generated""" + return self[str(run)].get_num_gen( + barnobar=barnobar, is_particle=is_particle, + flav_or_flavint=flav_or_flavint, + include_physical_fract=include_physical_fract + )
+ + +
+[docs] + def get_flavints(self, run): + return self[str(run)].get_flavints()
+ + +
+[docs] + def get_flavs(self, run): + return self[str(run)].get_flavs()
+ + +
+[docs] + def get_energy_range(self, run): + """(min, max) energy in GeV""" + return self[str(run)].get_energy_range()
+ + +
+[docs] + def get_spectral_index(self, run): + """Spectral index (positive number for negative powers of energy)""" + return self[str(run)].get_spectral_index()
+ + +
+[docs] + def get_xsec_version(self, run): + """Cross sectons version name used in generating the MC""" + return self[str(run)].get_xsec_version()
+ + +
+[docs] + def get_xsec(self, run, xsec=None): + """Instantiated CrossSections object""" + return self[str(run)].get_xsec(xsec)
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/numba_tools.html b/_modules/pisa/utils/numba_tools.html new file mode 100644 index 000000000..6419e3fc9 --- /dev/null +++ b/_modules/pisa/utils/numba_tools.html @@ -0,0 +1,581 @@ + + + + + + pisa.utils.numba_tools — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.numba_tools

+# pylint: disable=invalid-name, ungrouped-imports
+
+"""
+Numba tools
+
+This is a colection of functions used for numba functions
+that work for targets cpu as well as cuda
+"""
+
+from __future__ import absolute_import, division, print_function
+
+__all__ = [
+    "cuda",
+    "ctype",
+    "ftype",
+    "WHERE",
+    "myjit",
+    "conjugate_transpose",
+    "conjugate_transpose_guf",
+    "test_conjugate_transpose",
+    "conjugate",
+    "conjugate_guf",
+    "test_conjugate",
+    "matrix_dot_matrix",
+    "matrix_dot_matrix_guf",
+    "test_matrix_dot_matrix",
+    "matrix_dot_vector",
+    "matrix_dot_vector_guf",
+    "test_matrix_dot_vector",
+    "clear_matrix",
+    "clear_matrix_guf",
+    "test_clear_matrix",
+    "copy_matrix",
+    "copy_matrix_guf",
+    "test_copy_matrix",
+    "cuda_copy",
+]
+__version__ = "0.2"
+__author__ = "Philipp Eller (pde3@psu.edu)"
+
+from argparse import ArgumentParser
+import inspect
+
+# NOTE: Following must be imported to be in the namespace for use by `myjit`
+# when re-compiling modified (external) function code
+import cmath  # pylint: disable=unused-import
+import math  # pylint: disable=unused-import
+
+import numpy as np
+
+import numba
+
+from numba import (  # pylint: disable=unused-import
+    complex64,
+    complex128,
+    float32,
+    float64,
+    int32,
+    int64,
+    uint32,
+    uint64,
+    guvectorize,
+    jit,
+)
+
+from pisa import FTYPE, TARGET, PISA_NUM_THREADS
+from pisa.utils.comparisons import ALLCLOSE_KW
+from pisa.utils.log import Levels, logging, set_verbosity
+
+if TARGET == "parallel":
+    numba.set_num_threads(PISA_NUM_THREADS)
+
+if TARGET is None:
+    raise NotImplementedError("Numba not supported.")
+
+# the `WHERE` variable is for usage with smart arrays
+if TARGET == "cuda":
+    from numba import cuda
+
+    if FTYPE == np.float64:
+        ctype = complex128
+        ftype = float64
+    elif FTYPE == np.float32:
+        ctype = complex64
+        ftype = float32
+    WHERE = "gpu"
+else:
+    if FTYPE == np.float64:
+        ctype = np.complex128
+        ftype = np.float64
+    elif FTYPE == np.float32:
+        ctype = np.complex64
+        ftype = np.float32
+    cuda = lambda: None
+    cuda.jit = lambda x: x
+    WHERE = "host"
+
+
+if FTYPE == np.float32:
+    FX = "f4"
+    CX = "c8"
+elif FTYPE == np.float64:
+    FX = "f8"
+    CX = "c16"
+
+
+
+[docs] +def myjit(func): + """ + Decorator to assign the right jit for different targets + In case of non-cuda targets, all instances of `cuda.local.array` + are replaced by `np.empty`. This is a dirty fix, hopefully in the + near future numba will support numpy array allocation and this will + not be necessary anymore + + Parameters + ---------- + func : callable + + Returns + ------- + new_nb_func: numba callable + Refactored version of `func` but with `cuda.local.array` replaced by + `np.empty` if `TARGET == "cpu"`. For either TARGET, the returned + function will be callable within numba code for that target. + + """ + # pylint: disable=exec-used, eval-used + + if TARGET == "cuda": + new_nb_func = cuda.jit(func, device=True) + + else: + source = inspect.getsource(func).splitlines() + assert source[0].strip().startswith("@myjit") + source = "\n".join(source[1:]) + "\n" + source = source.replace("cuda.local.array", "np.empty") + exec(source) + new_py_func = eval(func.__name__) + new_nb_func = jit(new_py_func, nopython=True) + # needs to be exported to globals + globals()[func.__name__] = new_nb_func + + return new_nb_func
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +def cuda_copy(func): + ''' Handle copying back device array''' + def wrapper(*args, **kwargs): + out = kwargs.pop("out") + if TARGET == "cuda" and not isinstance(out, numba.cuda.devicearray.DeviceNDArray): + d_out = numba.cuda.to_device(out) + func(*args, **kwargs, out=d_out) + d_out.copy_to_host(out) + else: + func(*args, **kwargs, out=out) + return wrapper
+ + +
+[docs] +@myjit +def conjugate_transpose(A, B): + """B is the conjugate (Hermitian) transpose of A .. :: + + B[j, i] = A[i, j]* + + A : 2d array of shape (M, N) + B : 2d array of shape (N, M) + + """ + for i in range(A.shape[0]): + for j in range(A.shape[1]): + B[j, i] = A[i, j].conjugate()
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (j, i)", target=TARGET, +) +def conjugate_transpose_guf(A, out): + """gufunc that calls conjugate_transpose""" + conjugate_transpose(A, out) + + +
+[docs] +def test_conjugate_transpose(): + """Unit tests of `conjugate_transpose` and `conjugate_transpose_guf`""" + A = (np.linspace(1, 12, 12) + 1j * np.linspace(21, 32, 12)).reshape(4, 3).astype(CX) + B = np.ones((3, 4), dtype=CX) + + conjugate_transpose_guf(A, B) + + test = B + ref = A.conj().T + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + A = np.linspace(1, 12, 12, dtype=FX).reshape(3, 4) + B = np.ones((4, 3), dtype=FX) + + conjugate_transpose_guf(A, B) + + test = B + ref = A.conj().T + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_conjugate_transpose >>")
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +@myjit +def conjugate(A, B): + """B is the element-by-element conjugate of A .. :: + + B[i, j] = A[i, j]* + + Parameters + ---------- + A : 2d array + B : 2d array + + """ + for i in range(A.shape[0]): + for j in range(A.shape[1]): + B[i, j] = A[i, j].conjugate()
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, +) +def conjugate_guf(A, out): + """gufunc that calls `conjugate`""" + conjugate(A, out) + + +
+[docs] +def test_conjugate(): + """Unit tests of `conjugate` and `conjugate_guf`""" + A = (np.linspace(1, 12, 12) + 1j * np.linspace(21, 32, 12)).reshape(4, 3).astype(CX) + + B = np.ones((4, 3), dtype=CX) + + conjugate_guf(A, B) + + test = B + ref = A.conj() + + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + A = np.linspace(1, 12, 12, dtype=FX).reshape(3, 4) + B = np.ones((3, 4), dtype=FX) + + conjugate_guf(A, B) + + test = B + ref = A.conj() + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_conjugate >>")
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +@myjit +def matrix_dot_matrix(A, B, C): + """Dot-product of two 2d arrays .. :: + + C = A * B + + """ + for j in range(B.shape[1]): + for i in range(A.shape[0]): + C[i, j] = 0.0 + for n in range(B.shape[0]): + C[i, j] += A[i, n] * B[n, j]
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], + "(i, n), (n, j) -> (i, j)", + target=TARGET, +) +def matrix_dot_matrix_guf(A, B, out): + """gufunc that calls matrix_dot_matrix""" + matrix_dot_matrix(A, B, out) + + +
+[docs] +def test_matrix_dot_matrix(): + """Unit tests of `matrix_dot_matrix` and `matrix_dot_matrix_guf`""" + A = np.linspace(1, 12, 12, dtype=FTYPE).reshape(3, 4) + B = np.linspace(1, 12, 12, dtype=FTYPE).reshape(4, 3) + C = np.ones((3, 3), dtype=FTYPE) + + matrix_dot_matrix_guf(A, B, C) + + test = C + ref = np.dot(A, B).astype(FTYPE) + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_matrix_dot_matrix >>")
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +@myjit +def matrix_dot_vector(A, v, w): + """Dot-product of a 2d array and a vector .. :: + + w = A * v + + """ + for i in range(A.shape[0]): + w[i] = 0.0 + for j in range(A.shape[1]): + w[i] += A[i, j] * v[j]
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:], {XX}[:])" for XX in [FX, CX]], + "(i, j), (j) -> (i)", + target=TARGET, +) +def matrix_dot_vector_guf(A, B, out): + """gufunc that calls matrix_dot_vector""" + matrix_dot_vector(A, B, out) + + +
+[docs] +def test_matrix_dot_vector(): + """Unit tests of `matrix_dot_vector` and `matrix_dot_vector_guf`""" + A = np.linspace(1, 12, 12, dtype=FTYPE).reshape(4, 3) + v = np.linspace(1, 3, 3, dtype=FTYPE) + w = np.ones(4, dtype=FTYPE) + + matrix_dot_vector_guf(A, v, w) + + test = w + ref = np.dot(A, v).astype(FTYPE) + assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_matrix_dot_vector >>")
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +@myjit +def clear_matrix(A): + """Zero out 2D matrix .. :: + + A[i, j] = 0 + + """ + for i in range(A.shape[0]): + for j in range(A.shape[1]): + A[i, j] = 0
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, +) +def clear_matrix_guf(dummy, out): # pylint: disable=unused-argument + """gufunc that calls `clear_matrix`""" + clear_matrix(out) + + +
+[docs] +def test_clear_matrix(): + """Unit tests of `clear_matrix` and `clear_matrix_guf`""" + A = np.ones((4, 3), dtype=FTYPE) + + clear_matrix_guf(A, A) + + test = A + ref = np.zeros((4, 3), dtype=FTYPE) + assert np.array_equal(test, ref), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_clear_matrix >>")
+ + + +# --------------------------------------------------------------------------- # + + +
+[docs] +@myjit +def copy_matrix(A, B): + """Copy elemnts of 2d array A to array B .. :: + + B[i, j] = A[i, j] + + """ + for i in range(A.shape[0]): + for j in range(A.shape[1]): + B[i, j] = A[i, j]
+ + + +@guvectorize( + [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, +) +def copy_matrix_guf(A, out): + """gufunc that calls `copy_matrix`""" + copy_matrix(A, out) + + +
+[docs] +def test_copy_matrix(): + """Unit tests of `copy_matrix` and `copy_matrix_guf`""" + A = np.ones((3, 3), dtype=FTYPE) + B = np.zeros((3, 3), dtype=FTYPE) + + copy_matrix_guf(A, B) + + test = B + ref = A + assert np.array_equal(test, ref), f"test:\n{test}\n!= ref:\n{ref}" + + logging.info("<< PASS : test_copy_matrix >>")
+ + + +# --------------------------------------------------------------------------- # + + +def parse_args(): + """parse command line args""" + parser = ArgumentParser() + parser.add_argument("-v", action="count", default=Levels.WARN, help="Verbosity") + args = parser.parse_args() + return vars(args) + + +if __name__ == "__main__": + set_verbosity(parse_args()["v"]) + test_conjugate_transpose() + test_conjugate() + test_matrix_dot_matrix() + test_matrix_dot_vector() + test_clear_matrix() + test_copy_matrix() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/plotter.html b/_modules/pisa/utils/plotter.html new file mode 100644 index 000000000..f95fbc9cd --- /dev/null +++ b/_modules/pisa/utils/plotter.html @@ -0,0 +1,799 @@ + + + + + + pisa.utils.plotter — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.plotter

+# pylint: disable=wrong-import-position, redefined-builtin
+"""
+Plotter class for doing plots easily
+"""
+
+
+from __future__ import absolute_import, division, print_function
+
+import itertools
+import os
+
+import numpy as np
+from uncertainties import unumpy as unp
+
+import matplotlib as mpl
+from matplotlib import pyplot as plt
+from matplotlib.offsetbox import AnchoredText
+
+from pisa import FTYPE
+from pisa.core.map import Map, MapSet
+from pisa.utils.format import tex_dollars, text2tex, tex_join
+from pisa.utils.log import logging
+
+
+__all__ = ['CMAP_SEQ', 'CMAP_DIV', 'Plotter']
+
+__author__ = 'P. Eller'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+CMAP_SEQ = plt.cm.inferno
+CMAP_SEQ.set_bad(color=(0.0, 0.2, 0.0), alpha=1)
+
+CMAP_DIV = plt.cm.RdBu_r
+CMAP_DIV.set_bad(color=(0.5, 0.9, 0.5), alpha=1)
+
+# set fonts
+mpl.rcParams['mathtext.fontset'] = 'custom'
+mpl.rcParams['mathtext.rm'] = 'Bitstream Vera Sans'
+mpl.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic'
+mpl.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold'
+mpl.rcParams['font.size'] = 14
+
+
+def inf2finite(x):
+    return np.clip(x, a_min=np.finfo(FTYPE).min, a_max=np.finfo(FTYPE).max)
+
+
+
+[docs] +class Plotter(object): + """ + Plotting library for PISA `Map`s and `MapSet`s + + Parameters + ---------- + outdir : str + output directory path + + stamp : str + stamp to be put on every subplot, e.g. 'Preliminary', + 'DeepCore nutau', etc. + + fmt : str or iterable of str + formats to be plotted, e.g. ['pdf', 'png'] + + size : (int, int) + canvas size (inches) + + log : bool + logarithmic z-axis + + label : str + z-axis label + + grid : bool + plot grid + + ratio : bool + add ratio plots in 1-d histos + + annotate : bool + annotate counts per bin in 2-d histos + + symmetric : bool + force symmetric extent of z-axis + + loc : str + either 'inside' or 'outside', defining where to put axis titles + + """ + def __init__(self, outdir='.', stamp=None, size=(8, 8), fmt='pdf', + log=True, label='# events', grid=True, ratio=False, + annotate=False, symmetric=False, loc='outside'): + self.fig = None + self.axes = None + + self.outdir = outdir + self.stamp = stamp + if isinstance(fmt, str): + fmt = [fmt] + self.fmt = fmt + self.size = size + self.fig = None + self.log = log + self.label = label + self.grid = grid + self.ratio = ratio + self.annotate = annotate + if symmetric: + assert(not self.log), 'cannot do log and symmetric at the same time' + self.symmetric = symmetric + self.reset_colors() + self.color = 'b' + self.loc = loc + +
+[docs] + def reset_colors(self): + self.colors = itertools.cycle('C%d' % n for n in range(10))
+ + +
+[docs] + def next_color(self): + self.color = next(self.colors)
+ + + # --- helper functions --- + +
+[docs] + def init_fig(self, figsize=None): + """clear/initialize figure""" + if figsize is not None: + size = figsize + else: + size = self.size + if self.fig is not None: + plt.clf() + plt.close(self.fig) + self.fig, self.axes = plt.subplots(1, 1, figsize=size) + self.fig.patch.set_facecolor('none')
+ + +
+[docs] + def add_stamp(self, text=None, **kwargs): + """Add common stamp with text. + + NOTE add_stamp cannot be used on a subplot that has been de-selected + and then re-selected. It will write over existing text. + + """ + if self.stamp != '': + stamp = tex_join('\n', self.stamp, text) + else: + stamp = text + if self.loc == 'inside': + a_text = AnchoredText(tex_dollars(stamp), loc=2, frameon=False, + **kwargs) + plt.gca().add_artist(a_text) + elif self.loc == 'outside': + plt.gca().set_title(tex_dollars(stamp))
+ + +
+[docs] + def add_leg(self): + """initialize legend """ + plt.gca().legend(loc='upper right', ncol=2, frameon=False, numpoints=1)
+ + +
+[docs] + def dump(self, fname): + """dump figure to file""" + basepath = os.path.join(self.outdir, fname) + for fmt in self.fmt: + filepath = basepath + '.' + fmt + logging.info('Writing plot %s to file %s', + fname, os.path.abspath(filepath)) + plt.savefig(filepath, dpi=150, + edgecolor='none', facecolor=self.fig.get_facecolor())
+ + + # --- 2d plots --- + +
+[docs] + def plot_2d_single(self, map_set, **kwargs): + """plot all maps in individual plots""" + if isinstance(map_set, Map): + map_set = [map_set] + for map in map_set: + self.init_fig() + self.plot_2d_map(map, **kwargs) + self.add_stamp(map.tex) + self.dump(map.name)
+ + +
+[docs] + def plot_2d_array(self, map_set, n_rows=None, n_cols=None, fname=None, + **kwargs): + """plot all maps in a single plot""" + if fname is None: + fname = map_set.name + # if dimensionality is 3, then still define a spli_axis automatically + new_maps = [] + split_axis = kwargs.pop('split_axis', None) + for map in map_set: + if len(map.binning) == 3: + if split_axis is None: + # Find shortest dimension + l = map.binning.num_bins + idx = l.index(min(l)) + split_axis_ = map.binning.names[idx] + logging.warning( + 'Plotter automatically splitting map %s along %s axis', + map.name, split_axis_ + ) + new_maps.extend(map.split(split_axis_)) + elif len(map.binning) == 2: + new_maps.append(map) + else: + raise Exception('Cannot plot %i dimensional map in 2d' + %len(map)) + map_set = MapSet(new_maps) + self.plot_array(map_set, 'plot_2d_map', n_rows=n_rows, n_cols=n_cols, + **kwargs) + self.dump(fname)
+ + + # --- 1d plots --- + +
+[docs] + def plot_1d_single(self, map_set, plot_axis, **kwargs): + """plot all maps in individual plots""" + for map in map_set: + self.init_fig() + self.plot_1d_projection(map, plot_axis, **kwargs) + self.add_stamp(map.tex) + self.dump(map.name)
+ + +
+[docs] + def plot_1d_array(self, map_set, plot_axis, n_rows=None, n_cols=None, + fname=None, **kwargs): + """plot 1d projections as an array""" + self.plot_array(map_set, 'plot_1d_projection', plot_axis, n_rows=n_rows, + n_cols=n_cols, **kwargs) + self.dump(fname)
+ + +
+[docs] + def plot_1d_slices_array(self, map_sets, plot_axis, fname=None, **kwargs): + """plot 1d projections as an array""" + self.slices_array(map_sets, plot_axis, **kwargs) + self.dump(fname)
+ + +
+[docs] + def plot_1d_all(self, map_set, plot_axis, **kwargs): + """all one one canvas""" + self.init_fig() + for map in map_set: + self.plot_1d_projection(map, plot_axis, **kwargs) + self.add_stamp() + self.add_leg() + self.dump('all')
+ + +
+[docs] + def plot_1d_stack(self, map_set, plot_axis, **kwargs): + """all maps stacked on top of each other""" + self.init_fig() + for i, map in enumerate(map_set): + for j in range(i): + map += map_set[j] + self.plot_1d_projection(map, plot_axis, **kwargs) + self.add_stamp() + self.add_leg() + self.dump('stack')
+ + +
+[docs] + def plot_1d_cmp(self, map_sets, plot_axis, fname=None, **kwargs): + """1d comparisons for two map_sets as projections""" + for i in range(len(map_sets[0])): + maps = [map_set[i] for map_set in map_sets] + self.stamp = maps[0].tex + for k, map_set in enumerate(map_sets): + maps[k].tex = map_set.tex + self.init_fig() + if self.ratio: + ax1 = plt.subplot2grid((4, 1), (0, 0), rowspan=3) + plt.setp(ax1.get_xticklabels(), visible=False) + self.reset_colors() + for map in maps: + self.next_color() + self.plot_1d_projection(map, plot_axis, **kwargs) + self.add_stamp() + self.add_leg() + if self.ratio: + plt.subplot2grid((4, 1), (3, 0), sharex=ax1) + #self.plot_1d_ratio(maps, plot_axis, r_vmin=0.1, r_vmax=0.1, **kwargs) + self.plot_1d_ratio(maps, plot_axis, **kwargs) + self.dump('%s_%s'%(fname, maps[0].name))
+ + + # --- plotting core functions --- + +
+[docs] + def plot_array(self, map_set, fun, *args, **kwargs): + """wrapper funtion to exccute plotting function fun for every map in a + set distributed over a grid""" + n_rows = kwargs.pop('n_rows', None) + n_cols = kwargs.pop('n_cols', None) + if isinstance(map_set, Map): + map_set = MapSet([map_set]) + if isinstance(map_set, MapSet): + n = len(map_set) + else: + raise TypeError('Expecting to plot a MapSet but ' + 'got %s'%type(map_set)) + if n_rows is None and n_cols is None: + # TODO: auto row/cols + n_rows = np.floor(np.sqrt(n)) + while n % n_rows != 0: + n_rows -= 1 + n_cols = n // n_rows + if n > n_cols * n_rows: + raise ValueError( + 'trying to plot %s subplots on a grid with %s x %s cells' + % (n, n_cols, n_rows) + ) + size = (n_cols*self.size[0], n_rows*self.size[1]) + self.init_fig(size) + plt.tight_layout() + h_margin = 1. / size[0] + v_margin = 1. / size[1] + self.fig.subplots_adjust(hspace=0.2, wspace=0.2, top=1-v_margin, + bottom=v_margin, left=h_margin, + right=1-h_margin) + for i, map in enumerate(map_set): + plt.subplot(n_rows, n_cols, i+1) + getattr(self, fun)(map, *args, **kwargs) + self.add_stamp(map.tex)
+ + +
+[docs] + def slices_array(self, map_sets, plot_axis, *args, **kwargs): + """plot map_set in array using a function fun""" + n_cols = len(map_sets[0]) + plt_axis_n = map_sets[0][0].binning.names.index(plot_axis) + # determine how many slices we need accoring to map_set[0] + n_rows = 0 + if len(map_sets[0][0].binning) != 2: + raise NotImplementedError('only supported for 2d maps right now') + slice_axis_n = int(not plt_axis_n) + slice_axis = map_sets[0][0].binning.names[slice_axis_n] + n_rows = map_sets[0][0].binning[slice_axis].num_bins + size = (n_cols*self.size[0], self.size[1]) + self.init_fig(size) + plt.tight_layout() + h_margin = 1. / size[0] + v_margin = 1. / size[1] + # big one + self.fig.subplots_adjust(hspace=0., wspace=0.2, top=1-v_margin, + bottom=v_margin, left=h_margin, + right=1-h_margin) + stamp = self.stamp + for i in range(len(map_sets[0])): + for j in range(n_rows): + plt.subplot(n_rows, n_cols, i + (n_rows - j -1)*n_cols + 1) + self.reset_colors() + for map_set in map_sets: + self.next_color() + map = map_set[i] + if slice_axis_n == 0: + map_slice = map[j, :] + else: + map_slice = map[:, j] + a_text = ( + map_slice.binning[slice_axis].label + + ' [%.2f, %.2f]' + %(map_slice.binning[slice_axis].bin_edges[0].m, + map_slice.binning[slice_axis].bin_edges[-1].m) + ) + self.plot_1d_projection(map_slice, plot_axis, + *args, **kwargs) + if j != 0: + plt.gca().get_xaxis().set_visible(False) + if j == n_rows - 1: + if map.name == 'cscd': + title = 'cascades channel' + if map.name == 'trck': + title = 'tracks channel' + plt.gca().set_title(title) + plt.gca().set_ylabel('') + plt.gca().yaxis.set_tick_params(labelsize=8) + self.stamp = a_text + self.add_stamp(prop=dict(size=8)) + self.stamp = stamp
+ + +
+[docs] + def plot_2d_map(self, map, cmap=None, **kwargs): + """plot map on current axis in 2d""" + vmin = kwargs.pop('vmin', None) + vmax = kwargs.pop('vmax', None) + axis = plt.gca() + + if isinstance(map, Map): + binning = map.binning + else: + raise TypeError('Unhandled `map` type %s' % map.__class__.__name__) + + dims = binning.dims + bin_centers = binning.weighted_centers + bin_edges = binning.bin_edges + linlog = all([(d.is_log or d.is_lin) for d in binning]) + + zmap = map.nominal_values + if self.log: + zmap = np.log10(zmap) + + if self.symmetric: + vmax = np.max(np.abs(np.ma.masked_invalid(zmap))) + vmin = -vmax + if cmap is None: + cmap = CMAP_DIV + else: + if vmax is None: + vmax = np.max(zmap[np.isfinite(zmap)]) + if vmin is None: + vmin = np.min(zmap[np.isfinite(zmap)]) + if cmap is None: + cmap = CMAP_SEQ + extent = [np.min(bin_edges[0].m), np.max(bin_edges[0].m), + np.min(bin_edges[1].m), np.max(bin_edges[1].m)] + + # Only lin or log can be handled by imshow...otherise use colormesh + + # TODO: fix imshow for log-scaled energy vs. lin-scaled coszen, or + # remove this code altogether + if False: #linlog: + # Needs to be transposed for imshow + _ = plt.imshow( + zmap.T, origin='lower', interpolation='nearest', extent=extent, + aspect='auto', cmap=cmap, vmin=vmin, vmax=vmax, **kwargs + ) + else: + x, y = np.meshgrid(bin_edges[0], bin_edges[1]) + pcol = plt.pcolormesh( + x, y, np.ma.masked_invalid(zmap.T), + vmin=vmin, vmax=vmax, cmap=cmap, linewidth=0, rasterized=True, + **kwargs + ) + pcol.set_edgecolor('face') + + if self.annotate: + for i in range(len(bin_centers[0])): + for j in range(len(bin_centers[1])): + bin_x = bin_centers[0][i].m + bin_y = bin_centers[1][j].m + plt.annotate( + '%.1f'%(zmap[i, j]), + xy=(bin_x, bin_y), + xycoords=('data', 'data'), + xytext=(bin_x, bin_y), + textcoords='data', + va='top', + ha='center', + size=7 + ) + + axis.set_xlabel(tex_dollars(dims[0].label)) + axis.set_ylabel(tex_dollars(dims[1].label)) + axis.set_xlim(extent[0:2]) + axis.set_ylim(extent[2:4]) + + # TODO: use log2 scale & integer tick labels if too few major gridlines + # result from default log10 scale + if dims[0].is_log: + axis.set_xscale('log') + if dims[1].is_log: + axis.set_yscale('log') + + if self.log: + col_bar = plt.colorbar(format=r'$10^{%.1f}$') + else: + col_bar = plt.colorbar() + + if self.label: + col_bar.set_label(tex_dollars(text2tex(self.label)))
+ + +
+[docs] + def plot_1d_projection(self, map, plot_axis, **kwargs): + """plot map projected on plot_axis""" + r_vmin = kwargs.pop('r_vmin', None) + r_vmax = kwargs.pop('r_vmax', None) + axis = plt.gca() + plt_binning = map.binning[plot_axis] + hist = self.project_1d(map, plot_axis) + if map.tex == 'data': + axis.errorbar( + plt_binning.weighted_centers.m, unp.nominal_values(hist), + yerr=unp.std_devs(hist), + fmt='o', markersize='4', label=tex_dollars(text2tex('data')), + color='k', ecolor='k', mec='k', **kwargs + ) + else: + axis.hist( + inf2finite(plt_binning.weighted_centers.m), + weights=unp.nominal_values(hist), + bins=inf2finite(plt_binning.bin_edges.m), histtype='step', + lw=1.5, + label=tex_dollars(text2tex(map.tex)), color=self.color, **kwargs + ) + axis.bar( + plt_binning.bin_edges.m[:-1], 2*unp.std_devs(hist), + bottom=unp.nominal_values(hist)-unp.std_devs(hist), + width=plt_binning.bin_widths.m, alpha=0.25, linewidth=0, + color=self.color, **kwargs + ) + axis.set_xlabel(tex_dollars(plt_binning.label)) + if self.label: + axis.set_ylabel(tex_dollars(text2tex(self.label))) + if plt_binning.is_log: + axis.set_xscale('log') + if self.log: + axis.set_yscale('log') + else: + axis.set_ylim(0, np.nanmax(unp.nominal_values(hist))*1.4) + axis.set_xlim(inf2finite(plt_binning.bin_edges.m)[0], + inf2finite(plt_binning.bin_edges.m)[-1]) + if self.grid: + plt.grid(True, which="both", ls='-', alpha=0.2)
+ + +
+[docs] + def project_1d(self, map, plot_axis): + """sum up a map along all axes except plot_axis""" + hist = map.hist + plt_axis_n = map.binning.names.index(plot_axis) + hist = np.swapaxes(hist, plt_axis_n, 0) + for _ in range(1, len(map.binning)): + hist = np.sum(hist, 1) + return hist
+ + +
+[docs] + def plot_1d_ratio(self, maps, plot_axis, **kwargs): + """make a ratio plot for a 1d projection""" + r_vmin = kwargs.pop('r_vmin', None) + r_vmax = kwargs.pop('r_vmax', None) + axis = plt.gca() + map0 = maps[0] + plt_binning = map0.binning[plot_axis] + hist = self.project_1d(map0, plot_axis) + hist0 = unp.nominal_values(hist) + # TODO: should this be used somewhere? + err0 = unp.std_devs(hist) + + axis.set_xlim(inf2finite(plt_binning.bin_edges.m)[0], + inf2finite(plt_binning.bin_edges.m)[-1]) + maximum = 1.0 + minimum = 1.0 + self.reset_colors() + for map in maps: + self.next_color() + hist = self.project_1d(map, plot_axis) + hist1 = unp.nominal_values(hist) + err1 = unp.std_devs(hist) + ratio = np.zeros_like(hist0) + ratio_error = np.zeros_like(hist0) + for i, hist0i in enumerate(hist0): + if hist1[i] == 0 and hist0i == 0: + ratio[i] = 1. + ratio_error[i] = 1. + elif hist1[i] != 0 and hist0i == 0: + logging.warning('deviding non 0 by 0 for ratio') + ratio[i] = 0. + ratio_error[i] = 1. + else: + ratio[i] = hist1[i] / hist0i + ratio_error[i] = err1[i] / hist0i + minimum = min(minimum, ratio[i]) + maximum = max(maximum, ratio[i]) + + if map.tex == 'data': + axis.errorbar( + plt_binning.weighted_centers.m, ratio, yerr=ratio_error, + fmt='o', markersize='4', + label=tex_dollars(text2tex('data')), + color='k', ecolor='k', mec='k' + ) + else: + _ = axis.hist( + inf2finite(plt_binning.weighted_centers.m), + weights=ratio, + bins=inf2finite(plt_binning.bin_edges.m), + histtype='step', lw=1.5, + label=tex_dollars(text2tex(map.tex)), color=self.color + ) + + axis.bar( + plt_binning.bin_edges.m[:-1], 2*ratio_error, + bottom=ratio-ratio_error, width=plt_binning.bin_widths.m, + alpha=0.25, linewidth=0, color=self.color + ) + + if self.grid: + plt.grid(True, which="both", ls='-', alpha=0.2) + self.fig.subplots_adjust(hspace=0) + axis.set_ylabel(tex_dollars(text2tex('ratio'))) + axis.set_xlabel(tex_dollars(plt_binning.label)) + # Calculate nice scale: + if r_vmin is not None and r_vmax is not None: + axis.set_ylim(1 - r_vmin, 1 + r_vmax) + else: + off = max(maximum-1, 1-minimum) + axis.set_ylim(1 - 1.2 * off, 1 + 1.2 * off)
+ + +
+[docs] + def plot_xsec(self, map_set, ylim=None, logx=True): + from pisa.utils import fileio + + zero_np_element = np.array([0]) + for map in map_set: + binning = map.binning + if 'true_energy' in binning.names: + energy_binning = binning.true_energy + elif 'reco_energy' in binning.names: + energy_binning = binning.reco_energy + else: + dim_idx = binning.index('energy', use_basenames=True) + energy_binning = binning.dims[dim_idx] + + fig = plt.figure(figsize=self.size) + fig.suptitle(map.name, y=0.95) + ax = fig.add_subplot(111) + ax.grid(b=True, which='major') + ax.grid(b=True, which='minor', linestyle=':') + plt.xlabel(tex_dollars(energy_binning.label), size=18) + plt.ylabel(tex_dollars(text2tex(self.label)), size=18) + if self.log: + ax.set_yscale('log') + if logx: + ax.set_xscale('log') + if ylim: + ax.set_ylim(ylim) + ax.set_xlim(np.min(energy_binning.bin_edges.m), + np.max(energy_binning.bin_edges.m)) + + hist = map.hist + array_element = np.hstack((hist, zero_np_element)) + ax.step(energy_binning.bin_edges.m, array_element, where='post') + + fileio.mkdir(self.outdir) + fig.savefig(self.outdir+'/'+map.name+'.png', bbox_inches='tight', + dpi=150)
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/profiler.html b/_modules/pisa/utils/profiler.html new file mode 100644 index 000000000..8a19c7272 --- /dev/null +++ b/_modules/pisa/utils/profiler.html @@ -0,0 +1,274 @@ + + + + + + pisa.utils.profiler — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.profiler

+"""
+Tools for profiling code
+"""
+
+
+from __future__ import absolute_import
+
+from functools import wraps
+from time import time
+
+from line_profiler import LineProfiler
+
+# Note this relative import (might be) necessary to avoid circular imports
+from pisa.utils import log
+
+
+__all__ = ['line_profile', 'test_line_profile', 'profile', 'test_profile']
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+class Log(object):
+    """Class to redirect output into our logging stream."""
+    def write(self, string):
+        string = string.rstrip('\n')
+        if string:
+            log.tprofile.debug(string)
+    def flush(self):
+        pass
+
+
+TLOG = Log()
+"""Instance of a global timing logger"""
+
+LINE_PROFILER = LineProfiler()
+"""Instance of a global LineProfiler"""
+
+
+
+[docs] +def line_profile(func): + """Use as `@line_profile` decorator for a function or class method to log + how long each line in the function/method takes to run. + + Note that timings can be skewed by overhead from the line_profiler module, + which is used as the core timing mechanism for this function. + + Parameters + ---------- + func : callable + Function or method to be profiled + + Returns + ------- + new_func : callable + New version of `func` that is callable just like `func` but that logs + the time spent in each line of code in `func`. + + """ + @wraps(func) + def profiled_func(*args, **kwargs): + """<< docstring will be inherited from wrapped `func` >>""" + try: + LINE_PROFILER.enable_by_count() + LINE_PROFILER.add_function(func) + return func(*args, **kwargs) + finally: + LINE_PROFILER.disable_by_count() + # Only print if it is the outermost function + if LINE_PROFILER.functions[0] == func: + LINE_PROFILER.print_stats(stream=TLOG) + return profiled_func
+ + + +
+[docs] +def test_line_profile(): + """Unit tests for `line_profile` functional (decorator)""" + @line_profile + def get_number(): + log.logging.trace('hello, i am get_number') + for x in range(500000): + yield x + + @line_profile + def expensive_function(): + log.logging.trace('hello, i am expensive fun') + for x in get_number(): + _ = x ^ x ^ x + return 'some result!' + + _ = expensive_function() + log.logging.info('<< ??? : test_line_profile >> Inspect above outputs')
+ + + +
+[docs] +def profile(func): + """Use as `@profile` decorator for a function or class method to log the + time that it takes to complete. + + Parameters + ---------- + func : callable + Function or method to profile + + Returns + ------- + new_func : callable + New version of `func` that is callable just like `func` but that logs + the total time spent in `func`. + + """ + @wraps(func) + def profiled_func(*args, **kwargs): + """<< docstring will be inherited from wrapped `func` >>""" + try: + start_t = time() + return func(*args, **kwargs) + finally: + end_t = time() + log.tprofile.debug( + 'module %s, function %s: %.4f ms', + func.__module__, func.__name__, (end_t - start_t)*1000 + ) + return profiled_func
+ + + +
+[docs] +def test_profile(): + """Unit tests for `profile` functional (decorator)""" + @profile + def get_number(): + log.logging.trace('hello, i am get_number') + for x in range(500000): + yield x + + @profile + def expensive_function(): + log.logging.trace('hello, i am expensive fun') + for x in get_number(): + _ = x ^ x ^ x + return 'some result!' + + _ = expensive_function() + log.logging.info('<< ??? : test_profile >> inspect above outputs')
+ + + +if __name__ == '__main__': + log.set_verbosity(2) + test_line_profile() + test_profile() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/random_numbers.html b/_modules/pisa/utils/random_numbers.html new file mode 100644 index 000000000..4eb9f5a6e --- /dev/null +++ b/_modules/pisa/utils/random_numbers.html @@ -0,0 +1,337 @@ + + + + + + pisa.utils.random_numbers — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.random_numbers

+#! /usr/bin/env python
+
+"""
+Utilities to handle random numbers needed by PISA in a consistent and
+reproducible manner.
+
+"""
+
+
+from __future__ import division
+
+from collections.abc import Sequence
+
+import numpy as np
+
+from pisa.utils.log import Levels, logging, set_verbosity
+
+
+__all__ = ['get_random_state',
+           'test_get_random_state']
+
+__author__ = 'J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +def get_random_state(random_state, jumpahead=None): + """Derive a `numpy.random.RandomState` object (usable to generate random + numbers and distributions) from a flexible specification.. + + Parameters + ---------- + random_state : None, RandomState, string, int, state vector, or seq of int + * If instantiated RandomState object is passed, it is used directly + * If string : must be either 'rand' or 'random'; random state is + instantiated at random from either /dev/urandom or (if that is not + present) the clock. This creates an irreproducibly-random number. + * If int or sequence of lenth one: This is used as the `seed` value; + must be in [0, 2**32). + * If sequence of two integers: first must be in [0, 32768): 15 + most-significant bits. Second must be in [0, 131072): 17 + least-significant bits. + * If sequence of three integers: first must be in [0, 4): 2 + most-significant bits. Second must be in [0, 8192): next 13 + (less-significant) bits. Third must be in [0, 131072): 17 + least-significant bits. + * If a "state vector" (sequence of length five usable by + `numpy.random.RandomState.set_state`), set the random state using + this method. + + Returns + ------- + random_state : numpy.random.RandomState + Object callable like `numpy.random` (e.g. `random_state.rand((10,10))`), + but with __exclusively local__ state (whereas `numpy.random` has global + state). + + """ + if jumpahead is not None: + raise DeprecationWarning( + '`jumpahead` is deprecated since it does not result in an independent random sequence, simply use a different seed' + ) + + if random_state is None: + new_random_state = np.random.RandomState() + + elif isinstance(random_state, np.random.RandomState): + new_random_state = random_state + + elif isinstance(random_state, str): + allowed_strings = ['rand', 'random'] + rs = random_state.lower().strip() + if rs not in allowed_strings: + raise ValueError( + '`random_state`=%s not a valid string. Must be one of %s.' + %(random_state, allowed_strings) + ) + new_random_state = np.random.RandomState() + + elif isinstance(random_state, int): + new_random_state = np.random.RandomState(seed=random_state) + + elif isinstance(random_state, Sequence): + new_random_state = np.random.RandomState() + if all([isinstance(x, int) for x in random_state]): + if len(random_state) == 1: + seed = random_state[0] + assert seed >= 0 and seed < 2**32 + elif len(random_state) == 2: + b0, b1 = 15, 17 + assert b0 + b1 == 32 + s0, s1 = random_state + assert s0 >= 0 and s0 < 2**b0 + assert s1 >= 0 and s1 < 2**b1 + seed = (s0 << b1) + s1 + elif len(random_state) == 3: + b0, b1, b2 = 1, 12, 19 + assert b0 + b1 + b2 == 32 + s0, s1, s2 = random_state + assert s0 >= 0 and s0 < 2**b0 + assert s1 >= 0 and s1 < 2**b1 + assert s2 >= 0 and s2 < 2**b2 + seed = (s0 << b1+b2) + (s1 << b2) + s2 + else: + raise ValueError( + '`random_state` sequence of int must be length 1-3' + ) + new_random_state.seed(seed) + elif len(random_state) == 5: + new_random_state.set_state(random_state) + else: + raise ValueError( + 'Do not know what to do with `random_state` Sequence %s' + %(random_state,) + ) + return new_random_state + + else: + raise TypeError( + 'Unhandled `random_state` of type %s: %s' + %(type(random_state), random_state) + ) + + return new_random_state
+ + + +
+[docs] +def test_get_random_state(): + """Unit tests for get_random_state function""" + # Instantiate random states in all legal ways + rstates = { + 0: get_random_state(None), + 1: get_random_state('rand'), + 2: get_random_state('random'), + 3: get_random_state(np.random.RandomState(0)), + 4: get_random_state(0), + 5: get_random_state([0,]), + 6: get_random_state([0, 0]), + 7: get_random_state([0, 0, 0]), + } + rstates[8] = get_random_state(rstates[4].get_state()) + + # rs 4-8 should be identical + ref_id, ref = None, None + for rs_id, rs in rstates.items(): + if rs_id < 3: + continue + if ref is None: + ref_id = rs_id + ref = rs.rand(1000) + else: + test = rs.rand(1000) + assert np.array_equal(test, ref), f'rs{rs_id} != rs{ref_id}' + + # Already generated 1k, so generating 2k more gets us 3k; pick off last 1k + ref = rstates[ref_id].rand(2000)[1000:] + test = get_random_state(random_state=0).rand(3000)[2000:3000] + assert np.array_equal(test, ref), f'rsrand(3000)[2000:3000] != rs{ref_id}rand(2000)[1000:][2000:3000]' + + # Test stability of random number generator over time; following were + # retrieved on 2020-03-19 using numpy 1.18.1 via .. :: + # + # np.array2string( + # np.random.RandomState(0).rand(100), precision=20, separator=', ' + # ) + # + + # pylint: disable=bad-whitespace + ref = np.array( + [ + 0.5488135039273248 , 0.7151893663724195 , 0.6027633760716439 , + 0.5448831829968969 , 0.4236547993389047 , 0.6458941130666561 , + 0.4375872112626925 , 0.8917730007820798 , 0.9636627605010293 , + 0.3834415188257777 , 0.7917250380826646 , 0.5288949197529045 , + 0.5680445610939323 , 0.925596638292661 , 0.07103605819788694 , + 0.08712929970154071 , 0.02021839744032572 , 0.832619845547938 , + 0.7781567509498505 , 0.8700121482468192 , 0.978618342232764 , + 0.7991585642167236 , 0.46147936225293185 , 0.7805291762864555 , + 0.11827442586893322 , 0.6399210213275238 , 0.1433532874090464 , + 0.9446689170495839 , 0.5218483217500717 , 0.4146619399905236 , + 0.26455561210462697 , 0.7742336894342167 , 0.45615033221654855 , + 0.5684339488686485 , 0.018789800436355142, 0.6176354970758771 , + 0.6120957227224214 , 0.6169339968747569 , 0.9437480785146242 , + 0.6818202991034834 , 0.359507900573786 , 0.43703195379934145 , + 0.6976311959272649 , 0.06022547162926983 , 0.6667667154456677 , + 0.6706378696181594 , 0.2103825610738409 , 0.1289262976548533 , + 0.31542835092418386 , 0.3637107709426226 , 0.5701967704178796 , + 0.43860151346232035 , 0.9883738380592262 , 0.10204481074802807 , + 0.2088767560948347 , 0.16130951788499626 , 0.6531083254653984 , + 0.2532916025397821 , 0.4663107728563063 , 0.24442559200160274 , + 0.15896958364551972 , 0.11037514116430513 , 0.6563295894652734 , + 0.1381829513486138 , 0.1965823616800535 , 0.3687251706609641 , + 0.8209932298479351 , 0.09710127579306127 , 0.8379449074988039 , + 0.09609840789396307 , 0.9764594650133958 , 0.4686512016477016 , + 0.9767610881903371 , 0.604845519745046 , 0.7392635793983017 , + 0.039187792254320675, 0.2828069625764096 , 0.1201965612131689 , + 0.29614019752214493 , 0.11872771895424405 , 0.317983179393976 , + 0.41426299451466997 , 0.06414749634878436 , 0.6924721193700198 , + 0.5666014542065752 , 0.2653894909394454 , 0.5232480534666997 , + 0.09394051075844168 , 0.5759464955561793 , 0.9292961975762141 , + 0.31856895245132366 , 0.6674103799636817 , 0.13179786240439217 , + 0.7163272041185655 , 0.2894060929472011 , 0.18319136200711683 , + 0.5865129348100832 , 0.020107546187493552, 0.8289400292173631 , + 0.004695476192547066, + ] + ) + test = np.random.RandomState(0).rand(100) + assert np.array_equal(test, ref), 'random number generator changed!' + + logging.info('<< PASS : test_get_random_state >>')
+ + + +if __name__ == '__main__': + set_verbosity(Levels.INFO) + test_get_random_state() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/resources.html b/_modules/pisa/utils/resources.html new file mode 100644 index 000000000..bab514802 --- /dev/null +++ b/_modules/pisa/utils/resources.html @@ -0,0 +1,395 @@ + + + + + + pisa.utils.resources — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.resources

+"""
+Tools to obtain resource files needed for PISA, whether the resource is located
+in the filesystem or with the installed PISA package.
+"""
+
+
+from __future__ import absolute_import
+
+from os import environ
+from os.path import exists, expanduser, expandvars, join
+import sys
+
+import pkg_resources
+
+
+__all__ = ['RESOURCES_SUBDIRS', 'find_resource', 'open_resource', 'find_path']
+
+__author__ = 'S. Boeser, J.L. Lanfranchi'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+RESOURCES_SUBDIRS = ['data', 'scripts', 'settings']
+
+
+
+[docs] +def find_resource(resource, fail=True): + """Try to find a resource (file or directory). + + First check if `resource` is an absolute path, then check relative to + the paths specified by the PISA_RESOURCES environment variable (if it is + defined). Otherwise, look in the resources directory of the PISA + installation. + + Note that the PISA_RESOURCES environment variable can contain multiple + paths, each separated by a colon. Due to using colons as separators, + however, the paths themselves can *not* contain colons. + + Note also if PISA is packaged as archive distribution (e.g. zipped egg), + this method extracts the resource (if directory, the entire contents are + extracted) to a temporary cache directory. Therefore, it is preferable to + use the `open_resource` method directly, and avoid this method if possible. + + + Parameters + ---------- + resource : str + Resource path; can be path relative to CWD, path relative to + PISA_RESOURCES environment variable (if defined), or a package resource + location relative to the `pisa_examples/resources` sub-directory. Within + each path specified in PISA_RESOURCES and within the + `pisa_examples/resources` dir, the sub-directories 'data', 'scripts', + and 'settings' are checked for `resource` _before_ the base directories + are checked. Note that the **first** result found is returned. + + fail : bool + If True, raise IOError if resource not found + If False, return None if resource not found + + + Returns + ------- + String if `resource` is found (relative path to the file or directory); if + not found and `fail` is False, returns None. + + + Raises + ------ + IOError if `resource` is not found and `fail` is True. + + """ + # NOTE: this import needs to be here -- and not at top -- to avoid circular + # imports + import pisa.utils.log as log + + log.logging.trace('Attempting to find resource "%s"', resource) + + # 1) Check for file in filesystem at absolute path or relative to + # PISA_RESOURCES environment var + resource_path = find_path(resource, fail=False) + if resource_path is not None: + return resource_path + + # TODO: use resource_string or resource_stream instead, so that this works + # with egg distributions + + # 2) Look inside the installed pisa package + log.logging.trace('Searching package resources...') + resource_spec = ('pisa_examples', 'resources/' + resource) + if pkg_resources.resource_exists(*resource_spec): + resource_path = pkg_resources.resource_filename(*resource_spec) + log.logging.debug('Found resource "%s" in PISA package at "%s"', + resource, resource_path) + return resource_path + + for subdir in RESOURCES_SUBDIRS + [None]: + if subdir is None: + augmented_path = resource + else: + augmented_path = '/'.join([subdir, resource]) + + resource_spec = ('pisa_examples', 'resources/' + augmented_path) + if pkg_resources.resource_exists(*resource_spec): + resource_path = pkg_resources.resource_filename(*resource_spec) + log.logging.debug('Found resource "%s" in PISA package at "%s"', + resource, resource_path) + return resource_path + + # 3) If you get here, the resource is nowhere to be found + msg = ('Could not find resource "%s" in filesystem OR in PISA package.' + % resource) + if fail: + raise IOError(msg) + log.logging.debug(msg)
+ + + +
+[docs] +def open_resource(resource, mode='r'): + """Find the resource file (see find_resource), open it, and return a file + handle. + + + Parameters + ---------- + resource : str + Resource path; can be path relative to CWD, path relative to + PISA_RESOURCES environment variable (if defined), or a package resource + location relative to PISA's `pisa_examples/resources` sub-directory. + Within each path specified in PISA_RESOURCES and within the + `pisa_examples/resources` dir, the sub-directories 'data', 'scripts', + and 'settings' are checked for `resource` _before_ the base directories + are checked. Note that the **first** result found is returned. + + mode : str + 'r', 'w', or 'rw'; only 'r' is valid for package resources (as these + cannot be written) + + + Returns + ------- + binary stream object (which behaves identically to a file object) + + + See Also + -------- + find_resource + Locate a file or directory (in fileystem) or a package + resource + + find_path + Locate a file or directory in the filesystem + + Open a (file) package resource and return stream object. + + Notes + ----- + See help for pkg_resources module / resource_stream method for more details + on handling of package resources. + + """ + # NOTE: this import needs to be here -- and not at top -- to avoid circular + # imports + import pisa.utils.log as log + + log.logging.trace('Attempting to open resource "%s"', resource) + + # 1) Check for file in filesystem at absolute path or relative to + # PISA_RESOURCES environment var + fs_exc_info = None + try: + resource_path = find_path(resource, fail=True) + except IOError: + fs_exc_info = sys.exc_info() + else: + log.logging.debug('Opening resource "%s" from filesystem at "%s"', + resource, resource_path) + return open(resource_path, mode=mode) + + # 2) Look inside the installed pisa package; this should error out if not + # found + log.logging.trace('Searching package resources...') + pkg_exc_info = None + for subdir in RESOURCES_SUBDIRS + [None]: + if subdir is None: + augmented_path = resource + else: + augmented_path = '/'.join([subdir, resource]) + try: + resource_spec = ('pisa_examples', 'resources/' + augmented_path) + stream = pkg_resources.resource_stream(*resource_spec) + # TODO: better way to check if read mode (i.e. will 'r' miss + # anything that can be specified to also mean "read mode")? + if mode.strip().lower() != 'r': + del stream + raise IOError( + 'Illegal mode "%s" specified. Cannot open a PISA package' + ' resource in anything besides "r" (read-only) mode.' %mode + ) + except IOError: + pkg_exc_info = sys.exc_info() + else: + log.logging.debug('Opening resource "%s" from PISA package.', + resource) + return stream + + if fs_exc_info is not None: + if pkg_exc_info is not None: + msg = ('Could not locate resource "%s" in filesystem OR in' + ' installed PISA package.' %resource) + raise IOError(msg) + raise fs_exc_info[0](fs_exc_info[1]).with_traceback(fs_exc_info[2]) + raise pkg_exc_info[0](pkg_exc_info[1]).with_traceback(pkg_exc_info[2])
+ + + +
+[docs] +def find_path(pathspec, fail=True): + """Find a file or directory in the filesystem (i.e., something that the + operating system can locate, as opposed to Python package resources, which + can be located within a package and therefore hidden from the filesystem). + + Parameters + ---------- + pathspec : string + fail : bool + + Returns + ------- + None (if not found) or string (absolute path to file or dir if found) + + """ + # NOTE: this import needs to be here -- and not at top -- to avoid circular + # imports + import pisa.utils.log as log + + # 1) Check for absolute path or path relative to current working + # directory + log.logging.trace('Checking absolute or path relative to cwd...') + resource_path = expandvars(expanduser(pathspec)) + if exists(resource_path): + log.logging.debug('Found "%s" at "%s"', pathspec, resource_path) + return resource_path + + # 2) Check if $PISA_RESOURCES is set in environment; if so, look relative + # to that + log.logging.trace('Checking environment for $PISA_RESOURCES...') + if 'PISA_RESOURCES' in environ: + pisa_resources = environ['PISA_RESOURCES'] + log.logging.trace('Searching resource path PISA_RESOURCES=%s', + pisa_resources) + resource_paths = pisa_resources.split(':') + for resource_path in resource_paths: + if not resource_path: + continue + resource_path = expandvars(expanduser(resource_path)) + # Look in all default sub-dirs for the pathspec + augmented_paths = [join(resource_path, subdir, pathspec) + for subdir in RESOURCES_SUBDIRS] + # Also look in the base dir specified for the pathspec + augmented_paths.append(join(resource_path, pathspec)) + + for augmented_path in augmented_paths: + if exists(augmented_path): + log.logging.debug('Found path "%s" at %s', + pathspec, augmented_path) + return augmented_path + + # 3) If you get here, the file is nowhere to be found + msg = 'Could not find path "%s"' % pathspec + if fail: + raise IOError(msg) + log.logging.trace(msg) + return None
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/spline.html b/_modules/pisa/utils/spline.html new file mode 100644 index 000000000..ae10b023c --- /dev/null +++ b/_modules/pisa/utils/spline.html @@ -0,0 +1,510 @@ + + + + + + pisa.utils.spline — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.spline

+"""
+Classes to store and handle the evaluation of splines.
+"""
+
+
+from __future__ import division
+
+import inspect
+from collections.abc import Mapping, Sequence
+
+from pisa.core.map import Map, MapSet
+from pisa.core.binning import MultiDimBinning
+from pisa.utils import flavInt
+from pisa.utils.profiler import profile
+
+
+__all__ = ['Spline', 'CombinedSpline']
+
+__author__ = 'S. Mandalia'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +class Spline(object): + """Encapsulation of spline evaluation and other operations. + + Provides methods to evaluate the spline object over a given binning. + + Parameters + ---------- + name : string + Name for the spline object. Used to identify the object. + + tex : None or string + TeX string that can be used for e.g. plotting. + + spline: + Splines used for evaluation. + + eval_spl: function + Function prescribing how to obtain values for the input spline object + from a given binning. + + validate_spl: function + Function performing validation test on a given binning used to evaluate + the spline. + + hash : None, or immutable object (typically an integer) + Hash value to attach to the spline. + """ + # TODO(shivesh): required? + # TODO(shivesh): hashing? + _state_attrs = ('name', 'tex', 'spline', 'hash') + + def __init__(self, name, spline, eval_spl, tex=None, validate_spl=None, + hash=None): + # Set Read/write attributes via their defined setters + self.name = name + self._spline = spline + self._hash = hash + + if tex is None: + tex = flavInt.NuFlavIntGroup(name).tex + + # Ensure eval_spl has correct structure + eval_args = inspect.getargspec(eval_spl).args + if len(eval_args) < 2: + raise ValueError('Evaluation function does not contain the ' + 'minimum number of input parameters (2)\n' + 'Input function keywords: {0}'.format(eval_args)) + if 'spline' not in eval_args[0]: + raise ValueError('Evaluation function does not contain the ' + + "'spline'" + ' keyword as its first argument\n' + 'Input function keywords: {0}'.format(eval_args)) + if 'binning' not in eval_args[1]: + raise ValueError('Evaluation function does not contain the ' + + "'binning'" + ' keyword as its second ' + 'argument\nInput function keywords: ' + '{0}'.format(eval_args)) + self._eval_spl = eval_spl + + # Ensure validate_spl has correct structure + validate_args = inspect.getargspec(validate_spl).args + if len(validate_args) != 1: + raise ValueError('Binning validation function contains more than ' + 'the maximum number of input parameters (1)\n' + 'Input function keywords: ' + '{0}'.format(validate_args)) + if'binning' not in validate_args[0]: + raise ValueError('Binning validation function does not contain ' + 'the ' + "'binning'" + ' keyword argument\n' + 'Input function keywords: {0}'.format(eval_args)) + self._validate_spl = validate_spl + + @property + def name(self): + return self._name + + @name.setter + def name(self, value): + assert isinstance(value, str) + self._name = value + + @property + def tex(self): + return self._tex + + @tex.setter + def tex(self, value): + assert isinstance(value, str) + self._tex = value + + @property + def spline(self): + return self._spline + + @property + def hash(self): + return self._hash + + @hash.setter + def hash(self, value): + """Hash must be an immutable type (i.e., have a __hash__ method)""" + assert hasattr(value, '__hash__') + self._hash = value + +
+[docs] + def get_map(self, binning, **kwargs): + """Return a map of the spline evaluated at the centers of the + given binning. + """ + if not isinstance(binning, MultiDimBinning): + if isinstance(binning, Sequence): + binning = MultiDimBinning(dimensions=binning) + elif isinstance(binning, Mapping): + binning = MultiDimBinning(**binning) + else: + raise ValueError('Do not know what to do with `binning`=%s of' + ' type %s' % (binning, type(binning))) + if self._validate_spl is not None: + self._validate_spl(binning) + return self._eval_spl(self.spline, binning, name=self.name, **kwargs)
+ + +
+[docs] + @profile + def get_integrated_map(self, binning, bw_units=None, **kwargs): + """Get the spline map integrated over the input binning values + in output units specified by `bw_units`. + """ + spline_map = self.get_map(binning, **kwargs) + + binning = binning.to(**bw_units) + bin_widths = binning.bin_volumes(attach_units=False) + + return spline_map * bin_widths
+ + + def __hash__(self): + if self.hash is not None: + return self.hash + raise ValueError('No hash defined.')
+ + + +
+[docs] +class CombinedSpline(flavInt.FlavIntData): + """Contained class for operating on Spline objects for various neutrino + flavours. + + Inherits from FlavIntData object. Provides methods to allow + evaluation of the splines for all neutrino flavours. + + Parameters + -------- + inSpline : Spline or tuple of Spline + Spline objects with `name` entry corresponding to a neutrino flavour + `nue`, `numu`, `nuebar`, `numubar` and also corresponding to an + interaction type `cc` and `nc` if the flag `interactions` is True. + + interactions: Bool + Default = True + Flag to specifiy whether to store flavours or flavour+interaction + signatures. + + """ + def __init__(self, inSpline, interactions=True, ver=None): + super().__init__() + self.interactions = interactions + + if isinstance(inSpline, Spline): + inSpline = [inSpline] + if not all(isinstance(x, Spline) for x in inSpline): + raise TypeError('Argument/object unhandled type: ' + '{0}'.format(type(inSpline))) + + if interactions: + self._spline_dict = {flavInt.NuFlavInt(flavint.name): flavint + for flavint in inSpline} + self._spline_data = {flavInt.NuFlavInt(flavint.name): None + for flavint in inSpline} + else: + self._spline_dict = {flavInt.NuFlav(flav.name): flav + for flav in inSpline} + self._spline_data = {flavInt.NuFlav(flav.name): None + for flav in inSpline} + self._update_data_dict() + +
+[docs] + def return_mapset(self, **kwargs): + """Return a MapSet of stored spline maps.""" + for signature in self._spline_data.keys(): + if not isinstance(self._spline_data[signature], Map): + raise ValueError('Error: map {0} has not yet been ' + 'computed'.format(signature)) + maps = [self._spline_data[signature] + for signature in self._spline_data.keys()] + return MapSet(maps=maps, **kwargs)
+ + +
+[docs] + def get_spline(self, signature, centers, **kwargs): + """Return the spline of a given signature and bins.""" + signature = self._validate_NuFlav(signature) + return self._spline_dict[signature].get_spline(centers, **kwargs)
+ + +
+[docs] + def get_map(self, signature, binning, **kwargs): + """Return a map of spline values for a given signature and + binning. + """ + signature = self._validate_NuFlav(signature) + return self._spline_dict[signature].get_map(binning, **kwargs)
+ + +
+[docs] + def get_integrated_map(self, signature, binning, **kwargs): + """Return a map of spline values for a given signature integrated + over the input binning. + """ + signature = self._validate_NuFlav(signature) + return self._spline_dict[signature].get_integrated_map( + binning, **kwargs + )
+ + +
+[docs] + def compute_maps(self, binning, **kwargs): + """Compute the map of spline values for a given signature and binning, + then store it internally. + """ + for signature in self._spline_data.keys(): + self._spline_data[signature] = self.get_map( + signature, binning, **kwargs + ) + self._update_data_dict()
+ + +
+[docs] + def compute_integrated_maps(self, binning, **kwargs): + """Compute the map of spline values for a given signature integrated + over the input binning, then store it internally. + """ + for signature in self._spline_data.keys(): + self._spline_data[signature] = self.get_integrated_map( + signature, binning, **kwargs + ) + self._update_data_dict()
+ + +
+[docs] + def scale_map(self, signature, value): + """Scale a specific spline map by an input value.""" + signature = self._validate_signature(signature) + if not isinstance(self._spline_data[signature], Map): + raise ValueError('Error: maps have not yet been computed') + self._spline_data[signature] *= value + self._update_data_dict()
+ + +
+[docs] + def scale_maps(self, value): + """Scale the stored spline maps by an input value.""" + for signature in self._spline_data.keys(): + self._spline_data[signature] *= value + self._update_data_dict()
+ + +
+[docs] + def reset(self): + """Reset the flux maps to the original input maps.""" + for signature in self._spline_data.keys(): + self._spline_data[signature] = None + self._update_data_dict()
+ + + # TODO(shivesh): too slow! +
+[docs] + @staticmethod + def validate_spline(spline): + """Validate spline data.""" + return
+ + # spline = flavInt.FlavIntData(spline) + # for k in flavInt.ALL_NUFLAVINTS: + # f = spline[k] + # if f is not None: + # assert np.sum(np.isnan(f.hist)) == 0 + # for k in flavInt.ALL_NUFLAVS: + # f = spline[k] + # if f is not None: + # assert np.all(f['nc'] == f['cc']) + + def _update_data_dict(self): + assert set(self._spline_dict.keys()) == set(self._spline_data.keys()) + with flavInt.BarSep('_'): + spline = {str(f): {str(it): None for it in flavInt.ALL_NUINT_TYPES} + for f in flavInt.ALL_NUFLAVS} + for x in self._spline_data.keys(): + for y in flavInt.ALL_NUINT_TYPES: + if self.interactions: + spline[str(flavInt.NuFlav(x))][str(y)] = \ + self._spline_data[x] + else: + spline[str(x)][str(y)] = self._spline_data[x] + super().validate(spline) + self.validate_spline(spline) + self.update(spline) + + def __getattr__(self, attr): + try: + if self.interactions: + sign = str(flavInt.NuFlavInt(attr)) + else: + sign = str(flavInt.NuFlav(attr)) + except: + raise ValueError('{0} is not a value signature'.format(attr)) + for signature in self._spline_data.keys(): + if self._spline_data[signature].name == sign: + return self._spline_data[signature] + return super().__getattribute__(sign) + + def _validate_NuFlav(self, signature): + if self.interactions: + if not isinstance(signature, flavInt.NuFlavInt): + signature = flavInt.NuFlavInt(signature) + else: + if not isinstance(signature, flavInt.NuFlav): + signature = flavInt.NuFlav(signature) + if signature not in self._spline_dict: + raise ValueError('signature {0} not loaded, choices are: ' + '{1}'.format(signature, self._spline_dict.keys())) + return signature + + def __add__(self, spline): + if isinstance(spline, Spline): + inSpline = self._spline_dict.values() + [spline] + return CombinedSpline(inSpline) + elif isinstance(spline, CombinedSpline): + inSpline = self._spline_dict.values() + \ + spline._spline_dict.values() + return CombinedSpline(inSpline) + else: + raise TypeError('Argument/object unhandled type: ' + '{0}'.format(type(spline)))
+ + + +def test_Spline(): + # TODO(shivesh): tests + pass + + +if __name__ == '__main__': + from pisa.utils.log import set_verbosity + set_verbosity(3) + test_Spline() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/spline_smooth.html b/_modules/pisa/utils/spline_smooth.html new file mode 100644 index 000000000..214b23eea --- /dev/null +++ b/_modules/pisa/utils/spline_smooth.html @@ -0,0 +1,222 @@ + + + + + + pisa.utils.spline_smooth — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.spline_smooth

+"""
+Smooth an array by splining it and resampling from the spline
+"""
+
+
+from __future__ import absolute_import
+
+import numpy as np
+from pisa.utils.log import logging
+from scipy.interpolate import splrep, splev, interp1d
+
+
+__author__ = 'P. Eller'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+
+[docs] +def spline_smooth(array, spline_binning, eval_binning, axis=0, smooth_factor=5, k=3, errors=None): + """Fuction for spline-smoothing arrays + + It is smoothing in slices along one axis, assuming 2d arrays + The smoothing is done by splines + + Parameters + ---------- + + array : 2d-array + array to be smoothed + spline_binning : OneDimBinning + Binning of axis on which to construct the spline + Must corrspond to the array dimension + axis : int + Index of the axis along which to smooth + eval_binning : OneDimBinning + Binning on which to evaluate the constructed spline + smooth_factor : float + smoothing factor for spline + k : int + spline degree + errors : 2d-array or None + uncertainties on the array + + Notes + ----- + could be expanded to nd arrays to generalize it + """ + # only working for 2d right now! + if array.ndim != 2: + raise ValueError('cannot do other dimensions than 2 right now, sorry') + # points at which to evaluate splines + spline_points = spline_binning.midpoints + if axis == 1: + # always smooth along axis=0 + array = array.T + if errors is not None: + errors = errors.T + + smoothed_slices = [] + interp_errors = None if errors is None else [] + for index in range(array.shape[1]): + # take slice + h_slice = array[:, index] + if errors is None: + weights = None + else: + h_errors = errors[:, index] + #replace zeros errors minimum avrage value along other axis + for i in range(len(h_errors)): + if h_errors[i] == 0: + if np.sum(errors[i, :]) == 0: + h_errors[i] = 0 + logging.warning('Detected row in array with all zero values, this can be problematic for spline smoothing!') + else: + h_errors[i] = np.min(errors[i, :][errors[i, :] != 0]) + weights = 1./h_errors + # Fit spline to slices + slice_spline = splrep( + spline_points, h_slice, weights, + k=k, s=smooth_factor, + ) + # eval spline over midpoints + smoothed_slice = splev(eval_binning.midpoints, slice_spline) + # Assert that there are no nan or inf values in smoothed cz-slice + assert np.all(np.isfinite(smoothed_slice)) + smoothed_slices.append(smoothed_slice) + + if errors is not None: + erf = interp1d(spline_points, 1./weights, fill_value="extrapolate") + new_errors = erf(eval_binning.midpoints) + interp_errors.append(new_errors) + + # Convert list of slices to array + smoothed_array = np.array(smoothed_slices) + if errors is not None: + interp_errors = np.array(interp_errors) + # swap axes back if necessary + if axis == 0: + smoothed_array = smoothed_array.T + if errors is not None: + interp_errors = interp_errors.T + + return smoothed_array, interp_errors
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/stats.html b/_modules/pisa/utils/stats.html new file mode 100644 index 000000000..7b40a8843 --- /dev/null +++ b/_modules/pisa/utils/stats.html @@ -0,0 +1,981 @@ + + + + + + pisa.utils.stats — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.stats

+"""
+Statistical functions
+"""
+
+
+from __future__ import absolute_import, division
+
+import numpy as np
+from scipy.special import gammaln
+from uncertainties import unumpy as unp
+
+from pisa import FTYPE
+from pisa.utils.comparisons import FTYPE_PREC, isbarenumeric
+from pisa.utils.log import logging
+from pisa.utils import likelihood_functions
+
+__all__ = ['SMALL_POS', 'CHI2_METRICS', 'LLH_METRICS', 'ALL_METRICS',
+           'maperror_logmsg',
+           'chi2', 'llh', 'log_poisson', 'log_smear', 'conv_poisson',
+           'norm_conv_poisson', 'conv_llh', 'barlow_llh', 'mod_chi2', 'correct_chi2',
+           'mcllh_mean', 'mcllh_eff', 'signed_sqrt_mod_chi2', 'generalized_poisson_llh']
+
+__author__ = 'P. Eller, T. Ehrhardt, J.L. Lanfranchi, E. Bourbeau'
+
+__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+SMALL_POS = 1e-10 #if FTYPE == np.float64 else FTYPE_PREC
+"""A small positive number with which to replace numbers smaller than it"""
+
+CHI2_METRICS = ['chi2', 'mod_chi2', 'correct_chi2', 'weighted_chi2']
+"""Metrics defined that result in measures of chi squared"""
+
+LLH_METRICS = ['llh', 'conv_llh', 'barlow_llh', 'mcllh_mean', 
+'mcllh_eff', 'generalized_poisson_llh']
+"""Metrics defined that result in measures of log likelihood"""
+
+ALL_METRICS = LLH_METRICS + CHI2_METRICS
+"""All metrics defined"""
+
+METRICS_TO_MAXIMIZE = LLH_METRICS
+"""Metrics that must be maximized to obtain a better fit"""
+
+METRICS_TO_MINIMIZE = CHI2_METRICS
+"""Metrics that must be minimized to obtain a better fit"""
+
+
+# TODO(philippeller):
+# * unit tests to ensure these don't break
+
+def it_got_better(new_metric_val, old_metric_val, metric):
+    """Compare metric values and report whether improvement found.
+    """
+    to_maximize = is_metric_to_maximize(metric)
+    if to_maximize:
+        got_better = new_metric_val > old_metric_val
+    else:
+        got_better = new_metric_val < old_metric_val
+    return got_better
+
+def is_metric_to_maximize(metric):
+    """Check whether the resulting metric has to be maximized or minimized.
+    """
+    if isinstance(metric, str):
+        metric = [metric]
+    if all(m in METRICS_TO_MAXIMIZE for m in metric):
+        return True
+    if all(m in METRICS_TO_MINIMIZE for m in metric):
+        return False
+    raise ValueError('Defined metrics %s are not compatible' % metric)
+
+
+[docs] +def maperror_logmsg(m): + """Create message with thorough info about a map for logging purposes""" + with np.errstate(invalid='ignore'): + msg = '' + msg += ' min val : %s\n' %np.nanmin(m) + msg += ' max val : %s\n' %np.nanmax(m) + msg += ' mean val: %s\n' %np.nanmean(m) + msg += ' num < 0 : %s\n' %np.sum(m < 0) + msg += ' num == 0: %s\n' %np.sum(m == 0) + msg += ' num > 0 : %s\n' %np.sum(m > 0) + msg += ' num nan : %s\n' %np.sum(np.isnan(m)) + return msg
+ + + +
+[docs] +def chi2(actual_values, expected_values): + """Compute the chi-square between each value in `actual_values` and + `expected_values`. + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + chi2 : numpy.ndarray of same shape as inputs + chi-squared values corresponding to each pair of elements in the inputs + + Notes + ----- + * Uncertainties are not propagated through this calculation. + * Values in expectation are clipped to the range [SMALL_POS, inf] prior to + the calculation to avoid infinities due to the divide function. + * actual_values are allowed to be = 0, since they don't com up in the denominator + """ + if actual_values.shape != expected_values.shape: + raise ValueError( + 'Shape mismatch: actual_values.shape = %s,' + ' expected_values.shape = %s' + % (actual_values.shape, expected_values.shape) + ) + + # Convert to simple numpy arrays containing floats + if not isbarenumeric(actual_values): + actual_values = unp.nominal_values(actual_values) + if not isbarenumeric(expected_values): + expected_values = unp.nominal_values(expected_values) + + with np.errstate(invalid='ignore'): + # Mask off any nan expected values (these are assumed to be ok) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + + # TODO: this check (and the same for `actual_values`) should probably + # be done elsewhere... maybe? + if np.any(actual_values < 0): + msg = ('`actual_values` must all be >= 0...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + if np.any(expected_values < 0): + msg = ('`expected_values` must all be >= 0...\n' + + maperror_logmsg(expected_values)) + raise ValueError(msg) + + # TODO: Is this okay to do? Mathematically suspect at best, and can + # still destroy a minimizer's hopes and dreams... + + # Replace 0's with small positive numbers to avoid inf in division + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + + + delta = actual_values - expected_values + + if np.all(np.abs(delta) < 5*FTYPE_PREC): + return np.zeros_like(delta, dtype=FTYPE) + + chi2_val = np.square(delta) / expected_values + assert np.all(chi2_val >= 0), str(chi2_val[chi2_val < 0]) + return chi2_val
+ + + +
+[docs] +def llh(actual_values, expected_values): + """Compute the log-likelihoods (llh) that each count in `actual_values` + came from the the corresponding expected value in `expected_values`. + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + llh : numpy.ndarray of same shape as the inputs + llh corresponding to each pair of elements in `actual_values` and + `expected_values`. + + Notes + ----- + * Uncertainties are not propagated through this calculation. + * Values in `expected_values` are clipped to the range [SMALL_POS, inf] + prior to the calculation to avoid infinities due to the log function. + + """ + assert actual_values.shape == expected_values.shape + + # Convert to simple numpy arrays containing floats + if not isbarenumeric(actual_values): + actual_values = unp.nominal_values(actual_values) + if not isbarenumeric(expected_values): + expected_values = unp.nominal_values(expected_values) + + with np.errstate(invalid='ignore'): + + # Mask off any nan expected values (these can result from bin masking) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + + # TODO: How should we handle nan / masked values in the "data" + # (actual_values) distribution? How about negative numbers? + + # Make sure actual values (aka "data") are valid -- no infs, no nans, + # etc. + if np.any((actual_values < 0) | ~np.isfinite(actual_values)): + msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + # Check that new array contains all valid entries + if np.any(expected_values < 0.0): + msg = ('`expected_values` must all be >= 0...\n' + + maperror_logmsg(expected_values)) + raise ValueError(msg) + + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + + # + # natural logarith m of the Poisson probability + # (uses Stirling's approximation to estimate ln(k!) ~ kln(k)-k) + # + llh_val = actual_values*np.log(expected_values) - expected_values + llh_val -= actual_values*np.log(actual_values) - actual_values + + return llh_val
+ + +
+[docs] +def mcllh_mean(actual_values, expected_values): + """Compute the log-likelihood (llh) based on LMean in table 2 - https://doi.org/10.1007/JHEP06(2019)030 + accounting for finite MC statistics. + This is the second most recommended likelihood in the paper. + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + llh : numpy.ndarray of same shape as the inputs + llh corresponding to each pair of elements in `actual_values` and + `expected_values`. + + Notes + ----- + * + """ + assert actual_values.shape == expected_values.shape + + # Convert to simple numpy arrays containing floats + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + + with np.errstate(invalid='ignore'): + + # Mask off any NaN bin/sigma values (resulting from bin masking) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + sigma = np.ma.masked_invalid(sigma) + + # TODO: How should we handle nan / masked values in the "data" + # (actual_values) distribution? How about negative numbers? + + # Make sure actual values (aka "data") are valid -- no infs, no nans, + # etc. + if np.any((actual_values < 0) | ~np.isfinite(actual_values)): + msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + # Check that new array contains all valid entries + if np.any(expected_values < 0.0): + msg = ('`expected_values` must all be >= 0...\n' + + maperror_logmsg(expected_values)) + raise ValueError(msg) + + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + + llh_val = likelihood_functions.poisson_gamma( + data=actual_values, sum_w=expected_values, sum_w2=sigma**2, a=0, b=0 + ) + + return llh_val
+ + + +
+[docs] +def mcllh_eff(actual_values, expected_values): + """Compute the log-likelihood (llh) based on eq. 3.16 - https://doi.org/10.1007/JHEP06(2019)030 + accounting for finite MC statistics. + This is the most recommended likelihood in the paper. + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + llh : numpy.ndarray of same shape as the inputs + llh corresponding to each pair of elements in `actual_values` and + `expected_values`. + + Notes + ----- + * + """ + assert actual_values.shape == expected_values.shape + + # Convert to simple numpy arrays containing floats + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + + with np.errstate(invalid='ignore'): + + # Mask off any NaN bin/sigma values (resulting from bin masking) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + sigma = np.ma.masked_invalid(sigma) + + # TODO: How should we handle nan / masked values in the "data" + # (actual_values) distribution? How about negative numbers? + + # Make sure actual values (aka "data") are valid -- no infs, no nans, + # etc. + if np.any((actual_values < 0) | ~np.isfinite(actual_values)): + msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + # Check that new array contains all valid entries + if np.any(expected_values < 0.0): + msg = ('`expected_values` must all be >= 0...\n' + + maperror_logmsg(expected_values)) + raise ValueError(msg) + + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + + llh_val = likelihood_functions.poisson_gamma( + data=actual_values, sum_w=expected_values, sum_w2=sigma**2, a=1, b=0 + ) + return llh_val
+ + + + +
+[docs] +def log_poisson(k, l): + r"""Calculate the log of a poisson pdf + + .. math:: + p(k,l) = \log\left( l^k \cdot e^{-l}/k! \right) + + Parameters + ---------- + k : float + l : float + + Returns + ------- + + log of poisson + + """ + return k*np.log(l) -l - gammaln(k+1)
+ + + +
+[docs] +def log_smear(x, sigma): + r"""Calculate the log of a normal pdf + + .. math:: + p(x, \sigma) = \log\left( (\sigma \sqrt{2\pi})^{-1} \exp( -x^2 / 2\sigma^2 ) \right) + + Parameters + ---------- + x : float + sigma : float + + Returns + ------- + log of gaussian + + """ + return ( + -np.log(sigma) - 0.5*np.log(2*np.pi) - x**2 / (2*sigma**2) + )
+ + + +
+[docs] +def conv_poisson(k, l, s, nsigma=3, steps=50): + r"""Poisson pdf + + .. math:: + p(k,l) = l^k \cdot e^{-l}/k! + + Parameters + ---------- + k : float + l : float + s : float + sigma for smearing term (= the uncertainty to be accounted for) + nsigma : int + The ange in sigmas over which to do the convolution, 3 sigmas is > 99%, + so should be enough + steps : int + Number of steps to do the intergration in (actual steps are 2*steps + 1, + so this is the steps to each side of the gaussian smearing term) + + Returns + ------- + float + convoluted poissson likelihood + + """ + # Replace 0's with small positive numbers to avoid inf in log + l = max(SMALL_POS, l) + k = max(SMALL_POS,k) #To avoid the zero values and nan values , added on 20/10/2022 + s = max(SMALL_POS,s) #To avoid the zero values and nan values , added on 20/10/2022 + st = 2*(steps + 1) + conv_x = np.linspace(-nsigma*s, +nsigma*s, st)[:-1]+nsigma*s/(st-1.) + conv_y = log_smear(conv_x, s) + f_x = conv_x + l + #f_x = conv_x + k + # Avoid zero values for lambda + idx = np.argmax(f_x > 0) + f_y = log_poisson(k, f_x[idx:]) + #f_y = log_poisson(f_x[idx:], l) + if np.isnan(f_y).any(): + logging.error('`NaN values`:') + logging.error('idx = %d', idx) + logging.error('s = %s', s) + logging.error('l = %s', l) + logging.error('f_x = %s', f_x) + logging.error('f_y = %s', f_y) + f_y = np.nan_to_num(f_y) + conv = np.exp(conv_y[idx:] + f_y) + norm = np.sum(np.exp(conv_y)) + return conv.sum()/norm
+ + + +
+[docs] +def norm_conv_poisson(k, l, s, nsigma=3, steps=50): + """Convoluted poisson likelihood normalized so that the value at k=l + (asimov) does not change + + Parameters + ---------- + k : float + l : float + s : float + sigma for smearing term (= the uncertainty to be accounted for) + nsigma : int + The range in sigmas over which to do the convolution, 3 sigmas is > + 99%, so should be enough + steps : int + Number of steps to do the intergration in (actual steps are 2*steps + 1, + so this is the steps to each side of the gaussian smearing term) + + Returns + ------- + likelihood + Convoluted poisson likelihood normalized so that the value at k=l + (asimov) does not change + + """ + cp = conv_poisson(k, l, s, nsigma=nsigma, steps=steps) + n1 = np.exp(log_poisson(l, l)) + n2 = conv_poisson(l, l, s, nsigma=nsigma, steps=steps) + return cp*n1/n2
+ + + +
+[docs] +def conv_llh(actual_values, expected_values): + """Compute the convolution llh using the uncertainty on the expected values + to smear out the poisson PDFs + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + conv_llh : numpy.ndarray of same shape as the inputs + conv_llh corresponding to each pair of elements in `actual_values` and + `expected_values`. + + """ + in_array_shape = np.shape(actual_values) + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + triplets = np.array([actual_values, expected_values, sigma]).T + norm_triplets = np.array([actual_values, actual_values, sigma]).T + total = 0 + bin_wise_conv_llh =[] + for i in range(len(triplets)): + total += np.log(max(SMALL_POS, norm_conv_poisson(*triplets[i]))) # FIXME? (cf. pylint) + total -= np.log(max(SMALL_POS, norm_conv_poisson(*norm_triplets[i]))) # FIXME? (cf. pylint) + bin_wise_conv_llh.append(total) + total =0 + bin_wise_conv_llh_np = np.array(bin_wise_conv_llh) #21/10/2022 + bin_wise_conv_llh_np = bin_wise_conv_llh_np.reshape(in_array_shape) # reshaping the array to match inputs #21/10/2022 + return bin_wise_conv_llh_np
+ + +
+[docs] +def barlow_llh(actual_values, expected_values): + """Compute the Barlow LLH taking into account finite statistics. + The likelihood is described in this paper: https://doi.org/10.1016/0010-4655(93)90005-W + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + barlow_llh: numpy.ndarray + + """ + + actual_values = unp.nominal_values(actual_values).ravel() + sigmas = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + + with np.errstate(invalid='ignore'): + # Mask off any nan expected values (these are assumed to be ok) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + + # Check that new array contains all valid entries + if np.any(actual_values < 0): + msg = ('`actual_values` must all be >= 0...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + # TODO: How should we handle nan / masked values in the "data" + # (actual_values) distribution? How about negative numbers? + + # Make sure actual values (aka "data") are valid -- no infs, no nans, + # etc. + if np.any((actual_values < 0) | ~np.isfinite(actual_values)): + msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' + + maperror_logmsg(actual_values)) + raise ValueError(msg) + + # Check that new array contains all valid entries + if np.any(expected_values < 0.0): + msg = ('`expected_values` must all be >= 0...\n' + + maperror_logmsg(expected_values)) + raise ValueError(msg) + + # TODO(tahmid): Run checks in case expected_values and/or corresponding sigma == 0 + # and handle these appropriately. If sigma/ev == 0 the code below will fail. + unweighted = np.array([(ev/s)**2 for ev, s in zip(expected_values, sigmas)]) + weights = np.array([s**2/ev for ev, s in zip(expected_values, sigmas)]) + + llh_val = likelihood_functions.barlowLLH(actual_values, unweighted, weights) + return llh_val
+ + +
+[docs] +def mod_chi2(actual_values, expected_values): + """Compute the chi-square value taking into account uncertainty terms + (incl. e.g. finite stats) + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + m_chi2 : numpy.ndarray of same shape as inputs + Modified chi-squared values corresponding to each pair of elements in + the inputs + + """ + in_array_shape = np.shape(actual_values) + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + + with np.errstate(invalid='ignore'): + + # Mask off any NaN bin/sigma values (resulting from bin masking) + actual_values = np.ma.masked_invalid(actual_values) + expected_values = np.ma.masked_invalid(expected_values) + sigma = np.ma.masked_invalid(sigma) + + # Replace 0's with small positive numbers to avoid inf when denominator is zero + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + + m_chi2 = ( + (actual_values - expected_values)**2 / (sigma**2 + expected_values) + ) + + m_chi2 = m_chi2.reshape(in_array_shape) + return m_chi2
+ + +
+[docs] +def correct_chi2(actual_values, expected_values): + """Compute the chi-square value taking into account uncertainty terms + (incl. e.g. finite stats) and their changes + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + m_chi2 : numpy.ndarray of same shape as inputs + Modified chi-squared values corresponding to each pair of elements in + the inputs + + """ + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + total_variance = sigma**2 + expected_values + m_chi2 = ( + (actual_values - expected_values)**2 / total_variance + np.log(total_variance) + ) + return m_chi2
+ + +def weighted_chi2(actual_values, expected_values, bin_unc2): + """Compute the chi-square value for weighted events taking into account + uncertainty terms (incl. e.g. finite stats) + + Parameters + ---------- + actual_values, expected_values, bin_unc2 : numpy.ndarrays of same shape + + Returns + ------- + m_chi2 : numpy.ndarray of same shape as inputs + Modified chi-squared values corresponding to each trio of elements in + the inputs + + """ + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, out=expected_values) + np.clip(bin_unc2, a_min=SMALL_POS, a_max=np.inf, out=bin_unc2) + + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + bin_unc2 = unp.nominal_values(bin_unc2).ravel() + total_variance = sigma**2 + bin_unc2 + + m_chi2 = ( + (actual_values - expected_values)**2 / total_variance #+ np.log(total_variance) + ) + return m_chi2 + +
+[docs] +def signed_sqrt_mod_chi2(actual_values, expected_values): + """Compute a (signed) pull value taking into account uncertainty terms. + + Parameters + ---------- + actual_values, expected_values : numpy.ndarrays of same shape + + Returns + ------- + m_pull : numpy.ndarray of same shape as inputs + Pull values corresponding to each pair of elements in + the inputs + + """ + # Replace 0's with small positive numbers to avoid inf in log + np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, + out=expected_values) + actual_values = unp.nominal_values(actual_values).ravel() + sigma = unp.std_devs(expected_values).ravel() + expected_values = unp.nominal_values(expected_values).ravel() + m_pull = ( + (actual_values - expected_values) / np.sqrt(sigma**2 + expected_values) + ) + return m_pull
+ + +# +# Generalized Poisson-gamma llh from 1902.08831 +# +
+[docs] +def generalized_poisson_llh(actual_values, expected_values=None, empty_bins=None): + '''Compute the generalized Poisson likelihood as formulated in https://arxiv.org/abs/1902.08831 + + + Note that unlike the other likelihood functions, expected_values + is expected to be a ditribution maker + + inputs: + ------ + + actual_values: flattened hist of a Map object + + expected_values: OrderedDict of MapSets + + empty_bins: None, list or np.ndarray (list the bin indices that are empty) + + returns: + -------- + llh_per_bin : bin-wise llh values, in a numpy array + + ''' + from collections import OrderedDict + + + assert isinstance(expected_values, OrderedDict), 'ERROR: expected_values must be an OrderedDict of MapSet objects' + assert 'weights' in expected_values.keys(), 'ERROR: expected_values need a key named "weights"' + assert 'llh_alphas' in expected_values.keys(), 'ERROR: expected_values need a key named "llh_alphas"' + assert 'llh_betas' in expected_values.keys(), 'ERROR: expected_values need a key named "llh_betas"' + + num_bins = actual_values.flatten().shape[0] + llh_per_bin = np.zeros(num_bins) + actual_values = unp.nominal_values(actual_values).ravel() + + # If no empty bins are specified, we assume that all of them should be included + if empty_bins is None: + empty_bins = [] + + for bin_i in range(num_bins): + + # TODO: sometimes the histogram spits out uncertainty objects, sometimes not. + # Not sure why. + data_count = actual_values.astype(np.int64)[bin_i] + + # Automatically add a huge number if a bin has non zero data count + # but completely empty MC + if bin_i in empty_bins: + if data_count > 0: + llh_per_bin[bin_i] = np.log(SMALL_POS) + continue + + # Make sure that no weight sum is negative. Crash if there are + weight_sum = np.array([m.hist.flatten()[bin_i] for m in expected_values['weights'].maps]) + if (weight_sum<0).sum()>0: + logging.debug('\n\n\n') + logging.debug('weights that are causing problem: ') + logging.debug(weight_sum[weight_sum<0]) + logging.debug((weight_sum<0).sum()) + logging.debug('\n\n\n') + assert np.all(weight_sum >= 0), 'ERROR: negative weights detected' + + # + # If the number of MC events is high, compute a normal poisson probability + # + n_mc_events = np.array([m.hist.flatten()[bin_i] for m in expected_values['n_mc_events'].maps]) + if np.all(n_mc_events>100): + + logP = data_count*np.log(weight_sum.sum())-weight_sum.sum()-(data_count*np.log(data_count)-data_count) + llh_per_bin[bin_i] = logP + + else: + from pisa.utils.llh_defs.poisson import fast_pgmix + + alphas = np.array([m.hist.flatten()[bin_i] for m in expected_values['llh_alphas'].maps]) + betas = np.array([m.hist.flatten()[bin_i] for m in expected_values['llh_betas'].maps]) + + # Remove the NaN's + mask = np.isfinite(alphas)*np.isfinite(betas) + + # Check that the alpha and betas make sense + assert np.all(alphas[mask] > 0), 'ERROR: detected alpha values <=0' + assert np.all(betas[mask] > 0 ), 'ERROR: detected beta values <=0' + + + llh_of_bin = fast_pgmix(data_count, alphas[mask], betas[mask]) + llh_per_bin[bin_i] = llh_of_bin + + return llh_per_bin
+ + + +def approximate_poisson_normal(data_count, alphas=None, betas=None, use_c=False): + ''' + Compute the likelihood of a marginalized poisson-gamma + function, using a single normal distribution instead of + the convolution of gamma function + + This formula can be used when the MC counts are really + high, and where the gamma function throws infinite values + + ''' + from scipy.integrate import quad + import numpy as np + + gamma_mean = np.sum(alphas/betas) + gamma_sigma = np.sqrt(np.sum(alphas/betas**2.)) + + # + # Define integration range as +- 5 sigma + # + lower = max(0,gamma_mean-5*gamma_sigma) + upper = gamma_mean+5*gamma_sigma + + # + # integrate over the boundaries + # + if use_c: + + import os, ctypes + import numpy as np + from scipy import integrate, LowLevelCallable + + lib = ctypes.CDLL(os.path.abspath('/groups/icecube/bourdeet/pisa/pisa/utils/poisson_normal.so')) + lib.approximate_gamma_poisson_integrand.restype = ctypes.c_double + lib.approximate_gamma_poisson_integrand.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_double), ctypes.c_void_p) + + # Define the parameters + params = (ctypes.c_double*3)() + + params[0] = data_count + params[1] = gamma_mean + params[2] = gamma_sigma + + user_data = ctypes.cast(params, ctypes.c_void_p) + func = LowLevelCallable(lib.approximate_gamma_poisson_integrand, user_data) + LH = quad(func, lower, upper)[0] + #print('lower ',lower,' upper: ',upper,' LH: ',LH) + else: + + LH = quad(approximate_poisson_normal_python, lower, upper, args=(data_count, gamma_mean, gamma_sigma))[0] + #print('lower ',lower,' upper: ',upper,' data_count: ',data_count,' mean: ', gamma_mean, ' sigma: ',gamma_sigma, ' LH: ',LH) + + LH = max(SMALL_POS,LH) + return np.log(LH) + + + +def approximate_poisson_normal_python(lamb, k, A, B): + + from scipy.stats import norm + + normal_term = norm.pdf(lamb, loc=A, scale=B) + normal_poisson = norm.pdf(k, loc=lamb, scale=np.sqrt(lamb)) + + return normal_term*normal_poisson +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/tests.html b/_modules/pisa/utils/tests.html new file mode 100644 index 000000000..56c27ccd3 --- /dev/null +++ b/_modules/pisa/utils/tests.html @@ -0,0 +1,891 @@ + + + + + + pisa.utils.tests — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.tests

+"""
+Functions to help compare and plot differences between PISA 2 and PISA 3 maps
+"""
+
+
+from __future__ import absolute_import, division
+
+import os
+import numpy as np
+
+import matplotlib.pyplot as plt
+
+from pisa import ureg
+from pisa.core.binning import OneDimBinning, MultiDimBinning
+from pisa.core.map import Map
+from pisa.utils.fileio import get_valid_filename, mkdir
+from pisa.utils.log import logging
+
+
+__all__ = ['order', 'order_str', 'check_agreement', 'print_agreement',
+           'print_event_rates', 'validate_maps',
+           'make_delta_map', 'make_ratio_map',
+           'validate_map_objs',
+           'baseplot', 'baseplot2',
+           'plot_comparisons', 'plot_map_comparisons', 'plot_cmp',
+           'pisa2_map_to_pisa3_map']
+
+__author__ = 'S. Wren'
+
+__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# TODO: make functions work transparently (i.e. autodetect) whether it's a
+# PISA 2 or PISA 3 style map object, convert to PISA 3 maps, and go from
+# there.
+
+
+
+[docs] +def order(x): + with np.errstate(divide='ignore', invalid='ignore'): + o = np.ceil(np.log10(np.abs(x))) + return o
+ + + +
+[docs] +def order_str(x): + order_float = order(x) + try: + return str(int(order_float)).rjust(4) + except OverflowError: + pass + return str(order_float)
+ + + +
+[docs] +def check_agreement(testname, thresh_ratio, ratio, thresh_diff, diff): + ratio_pass = np.abs(ratio) <= np.abs(thresh_ratio) + diff_pass = np.abs(diff) <= np.abs(thresh_diff) + + thresh_ratio_str = order_str(thresh_ratio) + ratio_ord_str = order_str(ratio) + ratio_pass_str = 'PASS' if ratio_pass else 'FAIL' + + thresh_diff_str = order_str(thresh_diff) + diff_ord_str = order_str(diff) + diff_pass_str = 'PASS' if diff_pass else 'FAIL' + + headline = '<< {pass_str:s} : {testname:s}, {kind:s} >>' + detail_str = ('... agree to (( 10^{level:s} )) ; ' + 'thresh = (( 10^{thresh:s} ))') + + ratio_headline = headline.format( + testname=testname, kind='fract diff', pass_str=ratio_pass_str + ) + ratio_detail = detail_str.format( + level=ratio_ord_str, thresh=thresh_ratio_str + ) + + diff_headline = headline.format( + testname=testname, kind='diff', pass_str=diff_pass_str, + ) + diff_detail = detail_str.format( + level=diff_ord_str, thresh=thresh_diff_str + ) + + err_messages = [] + if ratio_pass: + logging.info(ratio_headline) + logging.info(ratio_detail) + else: + err_messages += [ratio_headline, ratio_detail] + + if diff_pass: + logging.info(diff_headline) + logging.info(diff_detail) + else: + err_messages += [diff_headline, diff_detail] + + if not (ratio_pass and diff_pass): + for m in err_messages: + logging.error(m) + raise ValueError('\n '.join(err_messages))
+ + + + + + + + + + + +# TODO: specify `allclose` parameters `rtol` and `atol` excplicitly +
+[docs] +def validate_maps(amap, bmap): + """Validate that two PISA 2 style maps are compatible binning.""" + if not (np.allclose(amap['ebins'], bmap['ebins']) and + np.allclose(amap['czbins'], bmap['czbins'])): + raise ValueError("Maps' binnings do not match!")
+ + + +# TODO: specify `allclose` parameters `rtol` and `atol` excplicitly +
+[docs] +def validate_map_objs(amap, bmap): + """Validate that two PISA 3 style maps are compatible binning.""" + if not all([np.allclose(ae, be) for ae, be + in zip(amap.binning.bin_edges, bmap.binning.bin_edges)]): + raise ValueError( + "Maps' binnings do not match! Got first map as \n%s \nand second " + " map as \n%s" + % (amap.binning.hashable_state, bmap.binning.hashable_state) + )
+ + + +
+[docs] +def make_delta_map(amap, bmap): + """Get the difference between two PISA 2 style maps (amap-bmap) and return + as another PISA 2 style map.""" + validate_maps(amap, bmap) + return {'ebins': amap['ebins'], + 'czbins': amap['czbins'], + 'map': amap['map'] - bmap['map']}
+ + + +
+[docs] +def make_ratio_map(amap, bmap): + """Get the ratio of two PISA 2 style maps (amap/bmap) and return as another + PISA 2 style map.""" + validate_maps(amap, bmap) + with np.errstate(divide='ignore', invalid='ignore'): + result = {'ebins': amap['ebins'], + 'czbins': amap['czbins'], + 'map': amap['map']/bmap['map']} + return result
+ + + +
+[docs] +def baseplot(m, title, ax, clabel=None, symm=False, evtrate=False, + vmax=None, cmap=plt.cm.afmhot): + """Simple plotting of a 2D histogram (map)""" + hist = np.ma.masked_invalid(m['map']) + energy = m['ebins'] + coszen = m['czbins'] + if symm: + cmap = plt.cm.seismic + extr = np.nanmax(np.abs(hist)) + if vmax is None: + vmax = extr + vmin = -extr + else: + if evtrate: + vmin = 0 + else: + vmin = np.nanmin(hist) + if vmax is None: + vmax = np.nanmax(hist) + cmap.set_bad(color=(0, 1, 0), alpha=1) + x = coszen + y = np.log10(energy) + X, Y = np.meshgrid(x, y) + pcmesh = ax.pcolormesh(X, Y, hist, vmin=vmin, vmax=vmax, cmap=cmap) + cbar = plt.colorbar(mappable=pcmesh, ax=ax) + if clabel is not None: + cbar.set_label(clabel) + cbar.ax.tick_params(labelsize='large') + ax.set_xlabel(r'$\cos\theta_Z$') + ax.set_ylabel(r'Energy (GeV)') + ax.set_title(title, y=1.03) + min_e = np.min(energy) + max_e = np.max(energy) + ax.set_xlim(np.min(x), np.max(x)) + ax.set_ylim(np.min(y), np.max(y)) + lin_yticks = 2**(np.arange(np.ceil(np.log2(min_e)), + np.floor(np.log2(max_e))+1)) + ax.set_yticks(np.log10(lin_yticks)) + ax.set_yticklabels([str(int(yt)) for yt in lin_yticks])
+ + + +
+[docs] +def baseplot2(map, title, ax, vmax=None, symm=False, evtrate=False): + """Simple plotting of a 2D map. + + Parameters + ---------- + map : Map + title : str + ax : axis + symm : bool + evtrate : bool + + Returns + ------- + ax, pcmesh, cbar + + """ + assert len(map.binning) == 2 + hist = np.ma.masked_invalid(map.hist) + if symm: + cmap = plt.cm.seismic + extr = np.nanmax(np.abs(hist)) + vmax = extr + vmin = -extr + else: + cmap = plt.cm.afmhot + if evtrate: + vmin = 0 + else: + vmin = np.nanmin(hist) + if vmax is None: + vmax = np.nanmax(hist) + cmap.set_bad(color=(0, 1, 0), alpha=1) + + x = map.binning.dims[0].bin_edges.magnitude + y = map.binning.dims[1].bin_edges.magnitude + + if map.binning.dims[0].is_log: + xticks = 2**(np.arange(np.ceil(np.log2(min(x))), + np.floor(np.log2(max(x)))+1)) + x = np.log10(x) + if map.binning.dims[1].is_log: + yticks = 2**(np.arange(np.ceil(np.log2(min(y))), + np.floor(np.log2(max(y)))+1)) + y = np.log10(y) + + X, Y = np.meshgrid(x, y) + pcmesh = ax.pcolormesh(X, Y, hist.T, vmin=vmin, vmax=vmax, cmap=cmap) + cbar = plt.colorbar(mappable=pcmesh, ax=ax) + cbar.ax.tick_params(labelsize='large') + ax.set_xlabel(map.binning.dims[0].tex) + ax.set_ylabel(map.binning.dims[1].tex) + ax.set_title(title, y=1.03) + ax.set_xlim(np.min(x), np.max(x)) + ax.set_ylim(np.min(y), np.max(y)) + + if map.binning.dims[0].is_log: + ax.set_xticks(np.log10(xticks)) + ax.set_xticklabels([str(int(xt)) for xt in xticks]) + if map.binning.dims[1].is_log: + ax.set_yticks(np.log10(yticks)) + ax.set_yticklabels([str(int(yt)) for yt in yticks]) + + return ax, pcmesh, cbar
+ + + +
+[docs] +def plot_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, name, + texname, stagename, servicename, shorttitles=False, + ftype='png'): + """Plot comparisons between two identically-binned PISA 2 style maps""" + path = [outdir] + + if subdir is None: + subdir = stagename.lower() + path.append(subdir) + + if outdir is not None: + mkdir(os.path.join(*path), warn=False) + + if stagename is not None: + fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower()), + 'stage_'+stagename] + else: + fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower())] + if servicename is not None: + fname.append('service_'+servicename) + if name is not None: + fname.append(name.lower()) + fname = '__'.join(fname) + '.' + ftype + + path.append(fname) + + basetitle = [] + if stagename is not None: + basetitle.append('%s' % stagename) + if texname is not None: + basetitle.append(r'$%s$' % texname) + basetitle = ' '.join(basetitle) + + ratio_map = make_ratio_map(new_map, ref_map) + diff_map = make_delta_map(new_map, ref_map) + diff_ratio_map = make_ratio_map(diff_map, ref_map) + + max_diff_ratio = np.nanmax(np.abs(diff_ratio_map['map'])) + + # Handle cases where ratio returns infinite + # This isn't necessarily a fail, since all it means is the referene was + # zero If the new value is sufficiently close to zero then it's still fine + if max_diff_ratio == float('inf'): + logging.warning( + 'Infinite value found in ratio tests. Difference tests ' + 'now also being calculated' + ) + # First find all the finite elements + finite_map = np.isfinite(diff_ratio_map['map']) + # Then find the nanmax of this, will be our new test value + max_diff_ratio = np.nanmax(np.abs(diff_ratio_map['map'][finite_map])) + # Also find all the infinite elements + infinite_map = np.logical_not(finite_map) + # This will be a second test value + max_diff = np.nanmax(np.abs(diff_map['map'][infinite_map])) + else: + # Without any infinite elements we can ignore this second test + max_diff = 0.0 + + if outdir is not None: + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=5, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(20, 5)) + if shorttitles: + baseplot(m=ref_map, + title=basetitle+' '+ref_abv+' (A)', + evtrate=True, + ax=axes[0]) + baseplot(m=new_map, + title=basetitle+' '+new_abv+' (B)', + evtrate=True, + ax=axes[1]) + baseplot(m=ratio_map, + title='A/B', + ax=axes[2]) + baseplot(m=diff_map, + title='A-B', + symm=True, ax=axes[3]) + baseplot(m=diff_ratio_map, + title='(A-B)/A', + symm=True, + ax=axes[4]) + else: + baseplot(m=ref_map, + title=basetitle+' '+ref_abv, + evtrate=True, + ax=axes[0]) + baseplot(m=new_map, + title=basetitle+' '+new_abv, + evtrate=True, + ax=axes[1]) + baseplot(m=ratio_map, + title=basetitle+' %s/%s' %(new_abv, ref_abv), + ax=axes[2]) + baseplot(m=diff_map, + title=basetitle+' %s-%s' %(new_abv, ref_abv), + symm=True, ax=axes[3]) + baseplot(m=diff_ratio_map, + title=basetitle+' (%s-%s)/%s' %(new_abv, ref_abv, ref_abv), + symm=True, + ax=axes[4]) + logging.debug('>>>> Plot for inspection saved at %s' + %os.path.join(*path)) + fig.savefig(os.path.join(*path)) + plt.close(fig.number) + + return max_diff_ratio, max_diff
+ + + +
+[docs] +def plot_map_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, + name, texname, stagename, servicename, + shorttitles=False, ftype='png'): + """Plot comparisons between two identically-binned PISA 3 style maps""" + path = [outdir] + + if subdir is None: + subdir = stagename.lower() + path.append(subdir) + + if outdir is not None: + mkdir(os.path.join(*path), warn=False) + + if stagename is not None: + fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower()), + 'stage_'+stagename] + else: + fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower())] + if servicename is not None: + fname.append('service_'+servicename) + if name is not None: + fname.append(name.lower()) + fname = '__'.join(fname) + '.' + ftype + + path.append(fname) + + basetitle = [] + if stagename is not None: + basetitle.append('%s' % stagename) + if texname is not None: + basetitle.append(r'$%s$' % texname) + basetitle = ' '.join(basetitle) + + validate_map_objs(new_map, ref_map) + with np.errstate(divide='ignore', invalid='ignore'): + ratio_map = new_map/ref_map + diff_map = new_map - ref_map + with np.errstate(divide='ignore', invalid='ignore'): + diff_ratio_map = diff_map/ref_map + + max_diff_ratio = np.nanmax(np.abs(diff_ratio_map.hist)) + + # Handle cases where ratio returns infinite + # This isn't necessarily a fail, since all it means is the referene was + # zero If the new value is sufficiently close to zero then it's still fine + if max_diff_ratio == float('inf'): + logging.warning( + 'Infinite value found in ratio tests. Difference tests ' + 'now also being calculated' + ) + # First find all the finite elements + finite_map = np.isfinite(diff_ratio_map.hist) + # Then find the nanmax of this, will be our new test value + max_diff_ratio = np.nanmax(np.abs(diff_ratio_map.hist[finite_map])) + # Also find all the infinite elements + infinite_map = np.logical_not(finite_map) + # This will be a second test value + max_diff = np.nanmax(np.abs(diff_map.hist[infinite_map])) + else: + # Without any infinite elements we can ignore this second test + max_diff = 0.0 + + if outdir is not None: + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=1, ncols=5, gridspec_kw=gridspec_kw, + sharex=False, sharey=False, figsize=(20, 5)) + if shorttitles: + ref_map.plot( + fig=fig, + ax=axes[0], + title=basetitle+' '+ref_abv+' (A)', + cmap=plt.cm.afmhot + ) + new_map.plot( + fig=fig, + ax=axes[1], + title=basetitle+' '+new_abv+' (B)', + cmap=plt.cm.afmhot + ) + ratio_map.plot( + fig=fig, + ax=axes[2], + title='A/B', + cmap=plt.cm.afmhot + ) + diff_map.plot( + fig=fig, + ax=axes[3], + title='A-B', + symm=True, + cmap=plt.cm.seismic + ) + diff_ratio_map.plot( + fig=fig, + ax=axes[4], + title='(A-B)/A', + symm=True, + cmap=plt.cm.seismic + ) + else: + ref_map.plot( + fig=fig, + ax=axes[0], + title=basetitle+' '+ref_abv, + cmap=plt.cm.afmhot + ) + new_map.plot( + fig=fig, + ax=axes[1], + title=basetitle+' '+new_abv, + cmap=plt.cm.afmhot + ) + ratio_map.plot( + fig=fig, + ax=axes[2], + title=basetitle+' %s/%s' %(new_abv, ref_abv), + cmap=plt.cm.afmhot + ) + diff_map.plot( + fig=fig, + ax=axes[3], + title=basetitle+' %s-%s' %(new_abv, ref_abv), + symm=True, + cmap=plt.cm.seismic + ) + diff_ratio_map.plot( + fig=fig, + ax=axes[4], + title=basetitle+' (%s-%s)/%s' %(new_abv, ref_abv, ref_abv), + symm=True, + cmap=plt.cm.seismic + ) + logging.debug('>>>> Plot for inspection saved at %s' + %os.path.join(*path)) + fig.savefig(os.path.join(*path)) + plt.close(fig.number) + + return max_diff_ratio, max_diff
+ + + +
+[docs] +def plot_cmp(new, ref, new_label, ref_label, plot_label, file_label, outdir, + ftype='png'): + """Plot comparisons between two (identically-binned) maps or map sets. + + Parameters + ---------- + new : Map or MapSet + ref : Map or MapSet + new_label : str + ref_label : str + plot_label : str + file_label : str + outdir : str + ftype : str + + """ + path = [outdir] + + if isinstance(ref, Map): + assert isinstance(new, Map) + ref_maps = [ref] + new_maps = [new] + + if outdir is not None: + mkdir(os.path.join(*path), warn=False) + + for ref, new in zip(ref_maps, new_maps): + assert ref.binning == new.binning + fname = get_valid_filename( + '__'.join([ + get_valid_filename(file_label), + '%s_vs_%s' %(get_valid_filename(new_label.lower()), + get_valid_filename(ref_label.lower())) + ]) + '.' + ftype + ) + path.append(fname) + + ratio = new / ref + diff = new - ref + fract_diff = diff / ref + + finite_ratio = ratio.hist[np.isfinite(ratio.hist)] + ratio_mean = np.mean(finite_ratio) + ratio_median = np.median(finite_ratio) + + finite_diff = diff.hist[np.isfinite(diff.hist)] + diff_mean = np.mean(finite_diff) + diff_median = np.median(finite_diff) + + finite_fract_diff = fract_diff.hist[np.isfinite(fract_diff.hist)] + fract_diff_mean = np.mean(finite_fract_diff) + fract_diff_median = np.median(finite_fract_diff) + + max_diff_ratio = np.nanmax(fract_diff.hist) + + # Handle cases where ratio returns infinite + # This isn't necessarily a fail, since all it means is the referene was + # zero. If the new value is sufficiently close to zero then it's stil + # fine. + if max_diff_ratio == np.inf: + logging.warning( + 'Infinite value found in ratio tests. Difference tests' + ' now also being calculated' + ) + # First find all the finite elements + finite_mask = np.isfinite(fract_diff.hist) + # Then find the nanmax of this, will be our new test value + max_diff_ratio = np.nanmax(fract_diff.hist[finite_mask]) + # Also find all the infinite elements; compute a second test value + max_diff = np.nanmax(diff.hist[~finite_mask]) + else: + # Without any infinite elements we can ignore this second test + max_diff = 0.0 + + if outdir is not None: + if new.binning.num_dims == 2: + n_dims = 2 + n_third_dim_bins = 1 + elif new.binning.num_dims == 3: + n_dims = 3 + odd_dim_idx = new.binning.shape.index(np.min(new.binning.shape)) + logging.debug('odd_dim_idx: %s', odd_dim_idx) + n_third_dim_bins = new.binning.shape[odd_dim_idx] + + gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) + fig, axes = plt.subplots(nrows=n_third_dim_bins, ncols=5, + gridspec_kw=gridspec_kw, + squeeze=False, sharex=False, sharey=False, + figsize=(20, 5)) + + refslice = ref + newslice = new + bin_names = None + if n_dims == 3: + if odd_dim_idx != 0: + refslice = np.moveaxis(ref, source=odd_dim_idx, + destination=0) + newslice = np.moveaxis(new, source=odd_dim_idx, + destination=0) + bin_names = new.binning.dims[odd_dim_idx].bin_names + + for odd_bin_idx in range(n_third_dim_bins): + if n_dims == 2: + thisbin_ref = refslice + thisbin_new = newslice + tmp_ref_label = ref_label + tmp_new_label = new_label + + elif n_dims == 3: + thisbin_ref = refslice[odd_bin_idx, ...].squeeze() + thisbin_new = newslice[odd_bin_idx, ...].squeeze() + + if bin_names is not None: + suffix = bin_names[odd_bin_idx] + else: + suffix = format(odd_bin_idx, 'd') + tmp_new_label = new_label + ' ' + suffix + tmp_ref_label = ref_label + ' ' + suffix + + ratio = thisbin_new / thisbin_ref + diff = thisbin_new - thisbin_ref + fract_diff = diff / thisbin_ref + + refmax = np.nanmax(thisbin_ref.hist) + newmax = np.nanmax(thisbin_new.hist) + vmax = refmax if refmax > newmax else newmax + + baseplot2(map=thisbin_new, + title=tmp_new_label, + vmax=vmax, + evtrate=True, + ax=axes[odd_bin_idx][0]) + + baseplot2(map=thisbin_ref, + title=tmp_ref_label, + vmax=vmax, + evtrate=True, + ax=axes[odd_bin_idx][1]) + + ax, _, _ = baseplot2(map=ratio, + title='%s/%s' %(tmp_new_label, + tmp_ref_label), + ax=axes[odd_bin_idx][2]) + ax.text(0.95, 0.95, "Mean: %.6f"%ratio_mean, + horizontalalignment='right', + transform=ax.transAxes, color=(0, 0.8, 0.8)) + ax.text(0.95, 0.91, "Median: %.6f"%ratio_median, + horizontalalignment='right', + transform=ax.transAxes, color=(0, 0.8, 0.8)) + + ax, _, _ = baseplot2(map=diff, + title='%s-%s' %(tmp_new_label, + tmp_ref_label), + symm=True, ax=axes[odd_bin_idx][3]) + ax.text(0.95, 0.95, "Mean: %.6f"%diff_mean, + horizontalalignment='right', + transform=ax.transAxes) + ax.text(0.95, 0.91, "Median: %.6f"%diff_median, + horizontalalignment='right', + transform=ax.transAxes) + + ax, _, _ = baseplot2(map=fract_diff, + title='(%s-%s)/%s' %(tmp_new_label, + tmp_ref_label, + tmp_ref_label), + symm=True, + ax=axes[odd_bin_idx][4]) + ax.text(0.95, 0.95, "Mean: %.6f"%fract_diff_mean, + horizontalalignment='right', + transform=ax.transAxes) + ax.text(0.95, 0.91, "Median: %.6f"%fract_diff_median, + horizontalalignment='right', + transform=ax.transAxes) + + logging.debug('>>>> Plot for inspection saved at %s' + %os.path.join(*path)) + fig.savefig(os.path.join(*path)) + plt.close(fig.number) + + return max_diff_ratio, max_diff
+ + + +
+[docs] +def pisa2_map_to_pisa3_map(pisa2_map, ebins_name='ebins', czbins_name='czbins', + is_log=True, is_lin=True): + expected_keys = ['map', 'ebins', 'czbins'] + if sorted(pisa2_map.keys()) != sorted(expected_keys): + raise ValueError('PISA 2 map should be a dict containining entries: %s' + %expected_keys) + ebins = OneDimBinning( + name=ebins_name, + bin_edges=pisa2_map['ebins'] * ureg.GeV, + is_log=is_log, + tex=r'E_{\nu}' + ) + czbins = OneDimBinning( + name=czbins_name, + bin_edges=pisa2_map['czbins'], + is_lin=is_lin, + tex=r'\cos\theta_Z' + ) + bins = MultiDimBinning([ebins, czbins]) + return Map( + name='pisa2equivalent', + hist=pisa2_map['map'], + binning=bins + )
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pisa/utils/vbwkde.html b/_modules/pisa/utils/vbwkde.html new file mode 100644 index 000000000..1899d5b70 --- /dev/null +++ b/_modules/pisa/utils/vbwkde.html @@ -0,0 +1,816 @@ + + + + + + pisa.utils.vbwkde — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pisa.utils.vbwkde

+"""
+Implementation of the Improved Sheather Jones (ISJ) KDE bandwidth selection
+method outlined in:
+
+  Z. I. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density
+    estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010.
+
+and extension to use this in varaible bandwidth KDE via
+
+  I.S. Abramson, On bandwidth variation in kernel estimates - A
+    square root law, Annals of Stat. Vol. 10, No. 4, 1217-1223 1982
+
+See also
+
+  P. Hall, T. C. Hu, J. S. Marron, Improved Variable Window Kernel
+    Estimates of Probability Densities, Annals of Statistics
+    Vol. 23, No. 1, 1-10, 1995
+
+Some code in this module is Copyright (c) 2007 Zdravko Botev. See __license__
+for details.
+"""
+
+
+# TODO: Make normalization use a relative density value normalized after ISJ
+# bandwidth to take into consideration really-high densities (which can have
+# narrower bandwidths than ISJ dictates) or really-low densities (which should
+# have very wide bandwidths, wider than ISJ dictates)
+
+# TODO : accuracy tests for fbwkde and vbwkde
+
+
+from __future__ import absolute_import, division
+
+from math import exp, sqrt
+from time import time
+
+import numpy as np
+from scipy import fftpack, interpolate, optimize
+
+from pisa import FTYPE, numba_jit
+from pisa.utils.gaussians import gaussians
+from pisa.utils.log import logging, set_verbosity, tprofile
+
+
+__all__ = ['OPT_TYPE', 'FIXED_POINT_IMPL',
+           'fbwkde', 'vbwkde', 'isj_bandwidth', 'test_fbwkde', 'test_vbwkde']
+
+__author__ = 'Z. Botev, J.L. Lanfranchi'
+
+__license__ = '''Original BSD license, applicable *ONLY* to functions
+"isj_bandwidth" and "fixed_point" since these were derived from Botev's
+original work (this license applies to any future code derived from those
+functions as well):
+
+  Copyright (c) 2007, Zdravko Botev
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in
+        the documentation and/or other materials provided with the
+        distribution
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+  IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+============================================================================
+
+All other code in this module is under the following copyright/license:
+
+Copyright (c) 2014-2017, The IceCube Collaboration
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.'''
+
+
+# NOTE: 'minimum' is giving very rough overfit results. Switching to 'root' for
+# now.
+OPT_TYPE = 'root'
+FIXED_POINT_IMPL = 'numba_loops'
+
+_PI = np.pi
+_TWOPI = 2*np.pi
+_SQRTPI = np.sqrt(np.pi)
+_SQRT2PI = np.sqrt(2*np.pi)
+_PISQ = np.pi*np.pi
+
+
+
+[docs] +def fbwkde(data, weights=None, n_dct=None, min=None, max=None, + evaluate_dens=True, evaluate_at=None): + """Fixed-bandwidth (standard) Gaussian KDE using the Improved + Sheather-Jones bandwidth. + + Code adapted for Python from the implementation in Matlab by Zdravko Botev. + + Ref: Z. I. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density + estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010. + + Parameters + ---------- + data : array + weights : array or None + n_dct : None or int + Number of points with which to form a regular grid, from `min` to + `max`; histogram values at these points are sent through a discrete + Cosine Transform (DCT), so `n_dct` should be an integer power of 2 for + speed purposes. If None, uses next-highest-power-of-2 above + len(data)*10. + min : float or None + max : float or None + evaluate_dens : bool + evaluate_at : None or array + + Returns + ------- + bandwidth : float + evaluate_at : array of float + density : None or array of float + + """ + if n_dct is None: + n_dct = int(2**np.ceil(np.log2(len(data)*10))) + assert int(n_dct) == n_dct + n_dct = int(n_dct) + n_datapoints = len(data) + + # Parameters to set up the points on which to evaluate the density + if min is None or max is None: + minimum = data.min() + maximum = data.max() + data_range = maximum - minimum + min = minimum - data_range/2 if min is None else min + max = maximum + data_range/2 if max is None else max + + hist_range = max - min + + # Histogram the data to get a crude first approximation of the density + data_hist, bins = np.histogram( + data, bins=n_dct, range=(min, max), density=False, weights=weights + ) + + # Make into a probability mass function + if weights is None: + data_hist = data_hist / n_datapoints + else: + data_hist = data_hist / np.sum(weights) + + # Define a minimum bandwidth relative to mean of distances between points + distances = np.diff(np.sort(data)) + min_bandwidth = 2*np.pi*np.mean(distances) + logging.trace('min_bandwidth, 2pi*mean: %.5e', min_bandwidth) + + # Solve for the ISJ fixed point to obtain the "optimal" bandwidth + isj_bw, t_star, dct_data = isj_bandwidth( + y=data_hist, n_datapoints=n_datapoints, x_range=hist_range, + min_bandwidth=min_bandwidth + ) + + # TODO: Detect numerical instability issues here, prior to returning! + + if not evaluate_dens: + return isj_bw, evaluate_at, None + + if evaluate_at is None: + # Smooth the discrete-cosine-transformed data using t_star + sm_dct_data = dct_data*np.exp(-np.arange(n_dct)**2 * _PISQ*t_star/2) + + # Inverse DCT to get density + density = fftpack.idct(sm_dct_data, norm=None)*n_dct/hist_range + if np.any(density < 0): + logging.trace( + 'ISJ encountered numerical instability in IDCT (resulting in a' + ' negative density). Result will be computed without the IDCT.' + ) + evaluate_at = (bins[0:-1] + bins[1:]) / 2 + else: + evaluate_at = (bins[0:-1] + bins[1:]) / 2 + density = density/np.trapz(density, evaluate_at) + return isj_bw, evaluate_at, density + else: + evaluate_at = np.asarray(evaluate_at, dtype=FTYPE) + + density = gaussians( + x=evaluate_at, + mu=data.astype(FTYPE), + sigma=np.full(shape=n_datapoints, fill_value=isj_bw, dtype=FTYPE), + weights=weights + ) + + return isj_bw, evaluate_at, density
+ + + +
+[docs] +def vbwkde(data, weights=None, n_dct=None, min=None, max=None, n_addl_iter=0, + evaluate_dens=True, evaluate_at=None): + """Variable-bandwidth (standard) Gaussian KDE that uses the function + `fbwkde` for a pilot density estimate. + + Parameters + ---------- + data : array + The data points for which the density estimate is sought + + weights : array or None + Weight for each point in `data` + + n_dct : None or int + Number of points with which to form a regular grid, from `min` to + `max`; histogram values at these points are sent through a discrete + Cosine Transform (DCT), so `n_dct` should be an integer power of 2 for + speed purposes. If None, uses next-highest-power-of-2 above + len(data)*10. + + min : None or float + Minimum of range over which to compute density. + If None, defaults to min(data) - range(data)/2 + + max : None or float + Maximum of range over which to compute density. + If None: max(data) + range(data)/2 + + n_addl_iter : int >= 0 + Number of additional iterations on the Abramson VBW density *after* + the initial VBW estimate. This can help smooth the tails of the + distribution, at the expense of additional computational cost. + + evaluate_dens : bool + Whether to evaluate and return the density estimate on the points + defined by `evaluate_at` + + evaluate_at : None, float, or array of float + Point(s) at which to evaluate the density estimate. If None, + evaluate_at = np.linspace(min + dx/2, max - dx/2, n_dct) + where + dx = (max - min) / n_dct + + Returns + ------- + kernel_bandwidths : array + + evaluate_at : array + Locations at which the density estimates would be evaluated + + density : array + Density estimates + + Notes + ----- + Specifying the range: + + The specification of min and max are critical for obtaining a + reasonable density estimate. If the true underlying density slowly + decays to zero on one side or the other, like a gaussian, specifying + too-small a range will distort the edge the VBW-KDE finds. On the + other hand, an abrupt cut-off in the distribution should be + accompanied by a similar cutoff in the computational range (min and/or + max). The algorithm here will approximate such a sharp cut-off with + roughly the same performance to the reflection method for standard + KDE's (as the fixed-BW portion uses a DCT of the data), but note that + this will not perform as well as polynomial-edges or other + modifications that have been proposed in the literature. + + """ + if n_dct is None: + n_dct = int(2**np.ceil(np.log2(len(data)*10))) + assert n_addl_iter >= 0 and int(n_addl_iter) == n_addl_iter + n_addl_iter = int(n_addl_iter) + + # Parameters to set up the points on which to evaluate the density + if min is None or max is None: + minimum = data.min() + maximum = data.max() + data_range = maximum - minimum + min = minimum - data_range/2 if min is None else min + max = maximum + data_range/2 if max is None else max + + # Pilot density estimate for the VBW KDE comes from fixed bandwidth KDE + # using the Improved Sheather-Jones algorithm. By specifying + # `evaluate_at` to be None, `fbwkde` derives a regular grid at which to + # evaluate the points and does so without needing to do a sum of Gaussians + # (only a freq.-domain multiply and inverse DCT) + isj_bw, grid, pilot_dens_on_grid = fbwkde( + data=data, weights=weights, n_dct=n_dct, min=min, max=max, + evaluate_dens=True, evaluate_at=None + ) + if np.any(pilot_dens_on_grid < 0): + raise ValueError('ISJ') + + # Include edges (min, max) in the grid and extend the densities to the + # left/right, respectively. (Make the profile constant out to the edge). + all_gridpoints = [] + all_dens = [] + if grid[0] != min: + all_gridpoints.append([min]) + all_dens.append([pilot_dens_on_grid[0]]) + + all_gridpoints.append(grid) + all_dens.append(pilot_dens_on_grid) + + if grid[-1] != max: + all_gridpoints.append([max]) + all_dens.append([pilot_dens_on_grid[-1]]) + + grid = np.concatenate(all_gridpoints) + pilot_dens_on_grid = np.concatenate(all_dens) + + # Use linear interpolation to get density at the data points + interp = interpolate.interp1d( + x=grid, + y=pilot_dens_on_grid, + kind='linear', + copy=False, + bounds_error=True, + fill_value=np.nan + ) + # TODO: For some reason this gets translated into an object array, so the + # `astype` call is necessary + pilot_dens_at_datapoints = interp(data).astype(FTYPE) + + n_iter = 1 + n_addl_iter + for n in range(n_iter): + # Note below diverges from the published Abramson method, by forcing + # the bandwidth at the max of the density distribution to be exactly + # the bandwidth found above with the improved Sheather-Jones BW + # selection technique. Refs: + # I.S. Abramson, On bandwidth variation in kernel estimates - A + # square root law, Annals of Stat. Vol. 10, No. 4, 1217-1223 1982 + # P. Hall, T. C. Hu, J. S. Marron, Improved Variable Window Kernel + # Estimates of Probability Densities, Annals of Statistics + # Vol. 23, No. 1, 1-10, 1995 + kernel_bandwidths = ( + isj_bw * np.sqrt(np.max(pilot_dens_at_datapoints)) + / np.sqrt(pilot_dens_at_datapoints) + ) + + if n < n_addl_iter: + pilot_dens_at_datapoints = gaussians( + x=data, + mu=data, + sigma=kernel_bandwidths, + weights=weights + ) + + else: # final iteration + if evaluate_at is None: + evaluate_at = grid + if evaluate_dens: + density = gaussians( + x=evaluate_at, + mu=data, + sigma=kernel_bandwidths, + weights=weights + ) + else: + density = None + + return kernel_bandwidths, evaluate_at, density
+ + + +
+[docs] +def isj_bandwidth(y, n_datapoints, x_range, min_bandwidth): + """ + Parameters + ---------- + y : array of float + n_datapoints : int + x_range : float + + Returns + ------- + bandwidth : float + t_star : float + dct_data : array of float + + """ + # Ensure double-precision datatypes are used + y = np.asarray(y, dtype=np.float64) + x_range = np.float64(x_range) + + n_dct = len(y) + + min_t_star = (min_bandwidth/x_range)**2 + + i_range = np.arange(1, n_dct, dtype=np.float64)**2 + log_i_range = np.log(i_range) + + dct_data = fftpack.dct(y, norm=None) + dct_data_sq = 0.25 * (dct_data * dct_data)[1:] + + logging.trace('Fixed point implementation = %s', FIXED_POINT_IMPL) + logging.trace('Optimization type = %s', OPT_TYPE) + if FIXED_POINT_IMPL == 'numba_np': + func = fixed_point_numba_np + args = n_datapoints, i_range, log_i_range, dct_data_sq + elif FIXED_POINT_IMPL == 'numba_loops': + func = fixed_point_numba_loops + args = n_datapoints, i_range, log_i_range, dct_data_sq + elif FIXED_POINT_IMPL == 'numba_orig': + func = fixed_point_numba_orig + args = n_datapoints, i_range, dct_data_sq + else: + raise ValueError('Unknown FIXED_POINT_IMPL "%s"' % FIXED_POINT_IMPL) + + try: + if OPT_TYPE == 'root': + t_star = optimize.brentq( + f=func, + a=min_t_star/1000, + b=0.5, + rtol=np.finfo(np.float64).eps*1e2, + args=args, + full_output=True, + disp=True + )[0] + elif OPT_TYPE == 'minimum': + t_star = optimize.minimize_scalar( + fun=func, + bounds=(min_t_star/1000, 0.5), + method='Bounded', + args=args, + options=dict(maxiter=1e6, xatol=1e-22), + ).x + else: + raise ValueError('Unknown OPT_TYPE "%s"' % OPT_TYPE) + + if t_star < min_t_star: + logging.trace('t_star = %.4e < min_t_star = %.4e;' + ' setting to min_t_star', t_star, min_t_star) + t_star = min_t_star + + # NOTE: Use `math.sqrt` _not_ `numpy.sqrt` to ensure failures raise + # exceptions (numpy might be coaxed to do so, but it'd probably be + # slow) + bandwidth = sqrt(t_star)*x_range + + except ValueError: + logging.error('Improved Sheather-Jones bandwidth %s-finding failed.', + OPT_TYPE) + if min_bandwidth is not None: + logging.error('Using supplied `min_bandwidth` instead.') + bandwidth = min_bandwidth + t_star = min_t_star + else: + raise + + return bandwidth, t_star, dct_data
+ + + +if OPT_TYPE == 'root': + def optfunc(f): + """No-op decorator""" + return f + +elif OPT_TYPE == 'minimum': + def optfunc(f): + """Decorator for returning abs of function output""" + def func(*args, **kw): + """Return absolute value of function""" + return np.abs(f(*args, **kw)) + return func + + +_ELL = 7 +_TWOPI2ELL = 2 * _PI**(2*_ELL) +_K0 = np.array([ + (1 + 0.5**(_S + 0.5)) * np.prod(np.arange(1, 2*_S, 2)) * 2/(3*_SQRT2PI) + for _S in range(_ELL-1, 1, -1) +]) + +@optfunc +@numba_jit(nopython=True, nogil=True, cache=True, fastmath=False) +def fixed_point_numba_np(t, n_datapoints, i_range, log_i_range, a2): + """ISJ fixed-point calculation as per Botev et al.. + + In this implementation, Numba makes calls to Numpy routines. + + Parameters + ---------- + t + n_datapoints + i_range + log_i_range + a2 + + Returns + ------- + t_star + + """ + exparg = _ELL*log_i_range - i_range*(_PISQ*t) + ex = np.exp(exparg) + eff = _TWOPI2ELL * np.dot(a2, ex) + + for s in range(_ELL-1, 1, -1): + t_elap = (_K0[s] / (n_datapoints * eff))**(2 / (3 + 2*s)) + exparg = s*log_i_range - i_range*(_PISQ*t_elap) + ex = np.exp(exparg) + dp = np.dot(a2, ex) + eff = 2*_PI**(2*s) * dp + + return t - (2.0 * n_datapoints * _SQRTPI * eff)**-0.4 + + +@optfunc +@numba_jit('{f}({f}, int64, {f}[:], {f}[:], {f}[:])'.format(f='float64'), + nopython=True, nogil=True, cache=True, fastmath=False) +def fixed_point_numba_loops(t, n_datapoints, i_range, log_i_range, a2): + """ISJ fixed-point calculation as per Botev et al.. + + In this implementation, Numba explicitly loops over arrays. + + Parameters + ---------- + t + n_datapoints + i_range + log_i_range + a2 + + Returns + ------- + t_star + + """ + len_i = len(i_range) + + tot = 0.0 + for idx in range(len_i): + a2_el = a2[idx] + log_i_range_el = log_i_range[idx] + i_range_el = i_range[idx] + + exparg = _ELL*log_i_range_el - i_range_el * _PISQ * t + tot += a2_el * exp(exparg) + eff = _TWOPI2ELL * tot + + for s in range(_ELL-1, 1, -1): + k0 = _K0[s] + t_elap = (k0 / (n_datapoints * eff))**(2 / (3 + 2*s)) + + tot = 0.0 + for idx in range(len_i): + a2_el = a2[idx] + log_i_range_el = log_i_range[idx] + i_range_el = i_range[idx] + + exparg = s*log_i_range_el - i_range_el*_PISQ*t_elap + tot += a2_el * exp(exparg) + eff = 2 * _PI**(2*s) * tot + + return t - (2*n_datapoints*_SQRTPI*eff)**-0.4 + + +@optfunc +@numba_jit('{f}({f}, int64, {f}[:], {f}[:])'.format(f='float64'), + nopython=True, nogil=True, cache=True, fastmath=False) +def fixed_point_numba_orig(t, n_datapoints, i_range, a2): + """Fixed point algorithm for Improved Sheather Jones bandwidth + selection. + + Implements the fixed-point finding for the function + ``t - zeta * gamma^{[l]}(t)`` + + See The Annals of Statistics, 38(5):2916-2957, 2010. + + Parameters + ---------- + t : float64 + n_datapoints : int64 + i_range : array of float64 + a2 : array of float64 + + Returns + ------- + t_star : float64 + + NOTES + ----- + Original implementation by Botev et al. is quad-precision, whereas this is + double precision only. This might cause discrepancies from the reference + implementation. + + """ + len_i = len(i_range) + + tot = 0.0 + for idx in range(len_i): + tot += i_range[idx]**_ELL * a2[idx] * exp(-i_range[idx] * _PISQ * t) + eff = 2 * _PI**(2*_ELL) * tot + + for s in range(_ELL-1, 1, -1): + k0 = np.prod(np.arange(1, 2*s, 2)) / _SQRT2PI + const = (1 + (0.5)**(s+0.5)) / 3.0 + t_elap = (2 * const * k0 / (n_datapoints * eff))**(2.0 / (3.0 + 2.0*s)) + + tot = 0.0 + for idx in range(len_i): + tot += ( + i_range[idx]**s * a2[idx] * exp(-i_range[idx] * _PISQ * t_elap) + ) + eff = 2 * _PI**(2*s) * tot + + return t - (2.0 * n_datapoints * _SQRTPI * eff)**-0.4 + + +
+[docs] +def test_fbwkde(): + """Test speed of fbwkde implementation""" + n_samp = int(1e4) + n_dct = int(2**12) + n_eval = int(1e4) + x = np.linspace(0, 20, n_eval) + np.random.seed(0) + times = [] + for _ in range(3): + enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_samp) + t0 = time() + fbwkde(data=enuerr, n_dct=n_dct, evaluate_at=x) + times.append(time() - t0) + tprofile.debug( + 'median time to run fbwkde, %d samples %d dct, eval. at %d points: %f' + ' ms', n_samp, n_dct, n_eval, np.median(times)*1000 + ) + logging.info('<< PASS : test_fbwkde >>')
+ + + +
+[docs] +def test_vbwkde(): + """Test speed of unweighted vbwkde implementation""" + n_samp = int(1e4) + n_dct = int(2**12) + n_eval = int(5e3) + n_addl = 0 + x = np.linspace(0, 20, n_samp) + np.random.seed(0) + times = [] + for _ in range(3): + enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_eval) + t0 = time() + vbwkde(data=enuerr, n_dct=n_dct, evaluate_at=x, n_addl_iter=n_addl) + times.append(time() - t0) + tprofile.debug( + 'median time to run vbwkde, %d samples %d dct %d addl iter, eval. at' + ' %d points: %f ms', n_samp, n_dct, n_addl, n_eval, np.median(times)*1e3 + ) + logging.info('<< PASS : test_vbwkde >>')
+ + + +def test_weighted_vbwkde(): + """Test speed of vbwkde implementation using weights""" + n_samp = int(1e4) + n_dct = int(2**12) + n_eval = int(5e3) + n_addl = 0 + x = np.linspace(0, 20, n_samp) + np.random.seed(0) + times = [] + for _ in range(3): + enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_eval) + weights = np.random.rand(n_eval) + t0 = time() + vbwkde(data=enuerr, weights=weights, + n_dct=n_dct, evaluate_at=x, n_addl_iter=n_addl) + times.append(time() - t0) + tprofile.debug( + 'median time to run weighted vbwkde, %d samples %d dct %d addl iter,' + ' eval. at %d points: %f ms', + n_samp, n_dct, n_addl, n_eval, np.median(times)*1e3 + ) + logging.info('<< PASS : test_weighted_vbwkde >>') + + +if __name__ == "__main__": + set_verbosity(2) + test_fbwkde() + test_vbwkde() + test_weighted_vbwkde() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/source/index.rst b/_sources/index.rst.txt similarity index 100% rename from docs/source/index.rst rename to _sources/index.rst.txt diff --git a/docs/source/modules.rst b/_sources/modules.rst.txt similarity index 100% rename from docs/source/modules.rst rename to _sources/modules.rst.txt diff --git a/docs/source/pisa.analysis.rst b/_sources/pisa.analysis.rst.txt similarity index 100% rename from docs/source/pisa.analysis.rst rename to _sources/pisa.analysis.rst.txt diff --git a/docs/source/pisa.core.rst b/_sources/pisa.core.rst.txt similarity index 100% rename from docs/source/pisa.core.rst rename to _sources/pisa.core.rst.txt diff --git a/docs/source/pisa.rst b/_sources/pisa.rst.txt similarity index 100% rename from docs/source/pisa.rst rename to _sources/pisa.rst.txt diff --git a/docs/source/pisa.scripts.rst b/_sources/pisa.scripts.rst.txt similarity index 100% rename from docs/source/pisa.scripts.rst rename to _sources/pisa.scripts.rst.txt diff --git a/docs/source/pisa.stages.absorption.rst b/_sources/pisa.stages.absorption.rst.txt similarity index 100% rename from docs/source/pisa.stages.absorption.rst rename to _sources/pisa.stages.absorption.rst.txt diff --git a/docs/source/pisa.stages.aeff.rst b/_sources/pisa.stages.aeff.rst.txt similarity index 74% rename from docs/source/pisa.stages.aeff.rst rename to _sources/pisa.stages.aeff.rst.txt index f99954628..312f1807b 100644 --- a/docs/source/pisa.stages.aeff.rst +++ b/_sources/pisa.stages.aeff.rst.txt @@ -20,6 +20,14 @@ pisa.stages.aeff.weight module :undoc-members: :show-inheritance: +pisa.stages.aeff.weight\_hnl module +----------------------------------- + +.. automodule:: pisa.stages.aeff.weight_hnl + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs/source/pisa.stages.background.rst b/_sources/pisa.stages.background.rst.txt similarity index 100% rename from docs/source/pisa.stages.background.rst rename to _sources/pisa.stages.background.rst.txt diff --git a/docs/source/pisa.stages.combine.rst b/_sources/pisa.stages.combine.rst.txt similarity index 100% rename from docs/source/pisa.stages.combine.rst rename to _sources/pisa.stages.combine.rst.txt diff --git a/docs/source/pisa.stages.data.rst b/_sources/pisa.stages.data.rst.txt similarity index 74% rename from docs/source/pisa.stages.data.rst rename to _sources/pisa.stages.data.rst.txt index b6a082596..58adf17f3 100644 --- a/docs/source/pisa.stages.data.rst +++ b/_sources/pisa.stages.data.rst.txt @@ -44,6 +44,22 @@ pisa.stages.data.grid module :undoc-members: :show-inheritance: +pisa.stages.data.licloader\_weighter module +------------------------------------------- + +.. automodule:: pisa.stages.data.licloader_weighter + :members: + :undoc-members: + :show-inheritance: + +pisa.stages.data.meows\_loader module +------------------------------------- + +.. automodule:: pisa.stages.data.meows_loader + :members: + :undoc-members: + :show-inheritance: + pisa.stages.data.simple\_data\_loader module -------------------------------------------- @@ -60,6 +76,14 @@ pisa.stages.data.simple\_signal module :undoc-members: :show-inheritance: +pisa.stages.data.sqlite\_loader module +-------------------------------------- + +.. automodule:: pisa.stages.data.sqlite_loader + :members: + :undoc-members: + :show-inheritance: + pisa.stages.data.toy\_event\_generator module --------------------------------------------- diff --git a/docs/source/pisa.stages.discr_sys.rst b/_sources/pisa.stages.discr_sys.rst.txt similarity index 67% rename from docs/source/pisa.stages.discr_sys.rst rename to _sources/pisa.stages.discr_sys.rst.txt index 50681144a..c94aab6c0 100644 --- a/docs/source/pisa.stages.discr_sys.rst +++ b/_sources/pisa.stages.discr_sys.rst.txt @@ -12,6 +12,14 @@ pisa.stages.discr\_sys.hypersurfaces module :undoc-members: :show-inheritance: +pisa.stages.discr\_sys.ultrasurfaces module +------------------------------------------- + +.. automodule:: pisa.stages.discr_sys.ultrasurfaces + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs/source/pisa.stages.flux.rst b/_sources/pisa.stages.flux.rst.txt similarity index 57% rename from docs/source/pisa.stages.flux.rst rename to _sources/pisa.stages.flux.rst.txt index 51d514390..f56545863 100644 --- a/docs/source/pisa.stages.flux.rst +++ b/_sources/pisa.stages.flux.rst.txt @@ -4,6 +4,22 @@ pisa.stages.flux package Submodules ---------- +pisa.stages.flux.airs module +---------------------------- + +.. automodule:: pisa.stages.flux.airs + :members: + :undoc-members: + :show-inheritance: + +pisa.stages.flux.astrophysical module +------------------------------------- + +.. automodule:: pisa.stages.flux.astrophysical + :members: + :undoc-members: + :show-inheritance: + pisa.stages.flux.barr\_simple module ------------------------------------ @@ -12,6 +28,22 @@ pisa.stages.flux.barr\_simple module :undoc-members: :show-inheritance: +pisa.stages.flux.daemon\_flux module +------------------------------------ + +.. automodule:: pisa.stages.flux.daemon_flux + :members: + :undoc-members: + :show-inheritance: + +pisa.stages.flux.hillasg module +------------------------------- + +.. automodule:: pisa.stages.flux.hillasg + :members: + :undoc-members: + :show-inheritance: + pisa.stages.flux.honda\_ip module --------------------------------- diff --git a/docs/source/pisa.stages.likelihood.rst b/_sources/pisa.stages.likelihood.rst.txt similarity index 100% rename from docs/source/pisa.stages.likelihood.rst rename to _sources/pisa.stages.likelihood.rst.txt diff --git a/docs/source/pisa.stages.osc.nusquids.rst b/_sources/pisa.stages.osc.nusquids.rst.txt similarity index 100% rename from docs/source/pisa.stages.osc.nusquids.rst rename to _sources/pisa.stages.osc.nusquids.rst.txt diff --git a/docs/source/pisa.stages.osc.prob3numba.rst b/_sources/pisa.stages.osc.prob3numba.rst.txt similarity index 100% rename from docs/source/pisa.stages.osc.prob3numba.rst rename to _sources/pisa.stages.osc.prob3numba.rst.txt diff --git a/docs/source/pisa.stages.osc.rst b/_sources/pisa.stages.osc.rst.txt similarity index 75% rename from docs/source/pisa.stages.osc.rst rename to _sources/pisa.stages.osc.rst.txt index bb628b171..d1eb341b1 100644 --- a/docs/source/pisa.stages.osc.rst +++ b/_sources/pisa.stages.osc.rst.txt @@ -12,6 +12,14 @@ Subpackages Submodules ---------- +pisa.stages.osc.decay\_params module +------------------------------------ + +.. automodule:: pisa.stages.osc.decay_params + :members: + :undoc-members: + :show-inheritance: + pisa.stages.osc.decoherence module ---------------------------------- @@ -36,6 +44,14 @@ pisa.stages.osc.layers module :undoc-members: :show-inheritance: +pisa.stages.osc.lri\_params module +---------------------------------- + +.. automodule:: pisa.stages.osc.lri_params + :members: + :undoc-members: + :show-inheritance: + pisa.stages.osc.nsi\_params module ---------------------------------- @@ -68,6 +84,14 @@ pisa.stages.osc.prob3 module :undoc-members: :show-inheritance: +pisa.stages.osc.scaling\_params module +-------------------------------------- + +.. automodule:: pisa.stages.osc.scaling_params + :members: + :undoc-members: + :show-inheritance: + pisa.stages.osc.two\_nu\_osc module ----------------------------------- diff --git a/docs/source/pisa.stages.pid.rst b/_sources/pisa.stages.pid.rst.txt similarity index 100% rename from docs/source/pisa.stages.pid.rst rename to _sources/pisa.stages.pid.rst.txt diff --git a/docs/source/pisa.stages.reco.rst b/_sources/pisa.stages.reco.rst.txt similarity index 100% rename from docs/source/pisa.stages.reco.rst rename to _sources/pisa.stages.reco.rst.txt diff --git a/docs/source/pisa.stages.rst b/_sources/pisa.stages.rst.txt similarity index 72% rename from docs/source/pisa.stages.rst rename to _sources/pisa.stages.rst.txt index c511be504..8b78e44f3 100644 --- a/docs/source/pisa.stages.rst +++ b/_sources/pisa.stages.rst.txt @@ -20,17 +20,6 @@ Subpackages pisa.stages.utils pisa.stages.xsec -Submodules ----------- - -pisa.stages.empty\_stage module -------------------------------- - -.. automodule:: pisa.stages.empty_stage - :members: - :undoc-members: - :show-inheritance: - Module contents --------------- diff --git a/docs/source/pisa.stages.unfold.rst b/_sources/pisa.stages.unfold.rst.txt similarity index 100% rename from docs/source/pisa.stages.unfold.rst rename to _sources/pisa.stages.unfold.rst.txt diff --git a/docs/source/pisa.stages.utils.rst b/_sources/pisa.stages.utils.rst.txt similarity index 90% rename from docs/source/pisa.stages.utils.rst rename to _sources/pisa.stages.utils.rst.txt index c79626db3..7effbfbcf 100644 --- a/docs/source/pisa.stages.utils.rst +++ b/_sources/pisa.stages.utils.rst.txt @@ -20,6 +20,14 @@ pisa.stages.utils.adhoc\_sys module :undoc-members: :show-inheritance: +pisa.stages.utils.bootstrap module +---------------------------------- + +.. automodule:: pisa.stages.utils.bootstrap + :members: + :undoc-members: + :show-inheritance: + pisa.stages.utils.fix\_error module ----------------------------------- diff --git a/docs/source/pisa.stages.xsec.rst b/_sources/pisa.stages.xsec.rst.txt similarity index 100% rename from docs/source/pisa.stages.xsec.rst rename to _sources/pisa.stages.xsec.rst.txt diff --git a/docs/source/pisa.utils.hypersurface.rst b/_sources/pisa.utils.hypersurface.rst.txt similarity index 100% rename from docs/source/pisa.utils.hypersurface.rst rename to _sources/pisa.utils.hypersurface.rst.txt diff --git a/docs/source/pisa.utils.llh_defs.rst b/_sources/pisa.utils.llh_defs.rst.txt similarity index 57% rename from docs/source/pisa.utils.llh_defs.rst rename to _sources/pisa.utils.llh_defs.rst.txt index c6e4f0efd..728e8ee70 100644 --- a/docs/source/pisa.utils.llh_defs.rst +++ b/_sources/pisa.utils.llh_defs.rst.txt @@ -15,22 +15,6 @@ pisa.utils.llh\_defs.poisson module pisa.utils.llh\_defs.poisson\_gamma\_mixtures module ---------------------------------------------------- -.. automodule:: pisa.utils.llh_defs.poisson_gamma_mixtures - :members: - :undoc-members: - :show-inheritance: - -pisa.utils.llh\_defs.poisson\_gamma\_mixtures module ----------------------------------------------------- - -.. automodule:: pisa.utils.llh_defs.poisson_gamma_mixtures - :members: - :undoc-members: - :show-inheritance: - -pisa.utils.llh\_defs.poisson\_gamma\_mixtures module ----------------------------------------------------- - .. automodule:: pisa.utils.llh_defs.poisson_gamma_mixtures :members: :undoc-members: diff --git a/docs/source/pisa.utils.rst b/_sources/pisa.utils.rst.txt similarity index 97% rename from docs/source/pisa.utils.rst rename to _sources/pisa.utils.rst.txt index 30d234e45..56accbc5f 100644 --- a/docs/source/pisa.utils.rst +++ b/_sources/pisa.utils.rst.txt @@ -29,6 +29,14 @@ pisa.utils.barr\_parameterization module :undoc-members: :show-inheritance: +pisa.utils.callable module +-------------------------- + +.. automodule:: pisa.utils.callable + :members: + :undoc-members: + :show-inheritance: + pisa.utils.comparisons module ----------------------------- diff --git a/pisa/stages/aeff/README.md b/_sources/readmes/aeff.md.txt similarity index 100% rename from pisa/stages/aeff/README.md rename to _sources/readmes/aeff.md.txt diff --git a/pisa/core/README.md b/_sources/readmes/core.md.txt similarity index 100% rename from pisa/core/README.md rename to _sources/readmes/core.md.txt diff --git a/pisa/utils/cross_sections.md b/_sources/readmes/cross_sections.md.txt similarity index 100% rename from pisa/utils/cross_sections.md rename to _sources/readmes/cross_sections.md.txt diff --git a/pisa/stages/data/README.md b/_sources/readmes/data.md.txt similarity index 100% rename from pisa/stages/data/README.md rename to _sources/readmes/data.md.txt diff --git a/docs/source/readmes/devel_guide.rst b/_sources/readmes/devel_guide.rst.txt similarity index 100% rename from docs/source/readmes/devel_guide.rst rename to _sources/readmes/devel_guide.rst.txt diff --git a/pisa/stages/discr_sys/README.md b/_sources/readmes/discr_sys.md.txt similarity index 100% rename from pisa/stages/discr_sys/README.md rename to _sources/readmes/discr_sys.md.txt diff --git a/pisa/utils/flavor_interaction_types.md b/_sources/readmes/flavor_interaction_types.md.txt similarity index 100% rename from pisa/utils/flavor_interaction_types.md rename to _sources/readmes/flavor_interaction_types.md.txt diff --git a/pisa/stages/flux/README.md b/_sources/readmes/flux.md.txt similarity index 100% rename from pisa/stages/flux/README.md rename to _sources/readmes/flux.md.txt diff --git a/pisa/general_conventions.md b/_sources/readmes/general_conventions.md.txt similarity index 100% rename from pisa/general_conventions.md rename to _sources/readmes/general_conventions.md.txt diff --git a/pisa/glossary.md b/_sources/readmes/glossary.md.txt similarity index 100% rename from pisa/glossary.md rename to _sources/readmes/glossary.md.txt diff --git a/INSTALL.md b/_sources/readmes/install.md.txt similarity index 100% rename from INSTALL.md rename to _sources/readmes/install.md.txt diff --git a/pisa/stages/osc/README.md b/_sources/readmes/osc.md.txt similarity index 100% rename from pisa/stages/osc/README.md rename to _sources/readmes/osc.md.txt diff --git a/pisa/stages/pid/README.md b/_sources/readmes/pid.md.txt similarity index 100% rename from pisa/stages/pid/README.md rename to _sources/readmes/pid.md.txt diff --git a/pisa/README.md b/_sources/readmes/pisa.md.txt similarity index 100% rename from pisa/README.md rename to _sources/readmes/pisa.md.txt diff --git a/docs/source/readmes/pisa_index.rst b/_sources/readmes/pisa_index.rst.txt similarity index 100% rename from docs/source/readmes/pisa_index.rst rename to _sources/readmes/pisa_index.rst.txt diff --git a/README.md b/_sources/readmes/readme.md.txt old mode 100755 new mode 100644 similarity index 97% rename from README.md rename to _sources/readmes/readme.md.txt index 0e713a5b3..3ed82d6a4 --- a/README.md +++ b/_sources/readmes/readme.md.txt @@ -6,7 +6,7 @@ [Introduction](pisa/README.md) | [Installation](INSTALL.md) | -[Documentation](http://icecube.wisc.edu/%7Epeller/pisa_docs/index.html) | +[Documentation](https://icecube.github.io/pisa/) | [Terminology](pisa/glossary.md) | [License](LICENSE) | [Contributors](CONTRIBUTORS.md) | diff --git a/pisa/stages/reco/README.md b/_sources/readmes/reco.md.txt similarity index 100% rename from pisa/stages/reco/README.md rename to _sources/readmes/reco.md.txt diff --git a/docs/source/readmes/stages_index.rst b/_sources/readmes/stages_index.rst.txt similarity index 100% rename from docs/source/readmes/stages_index.rst rename to _sources/readmes/stages_index.rst.txt diff --git a/pisa/utils/stats.md b/_sources/readmes/stats.md.txt similarity index 100% rename from pisa/utils/stats.md rename to _sources/readmes/stats.md.txt diff --git a/pisa/units_and_uncertainties.md b/_sources/readmes/units_and_uncertainties.md.txt similarity index 100% rename from pisa/units_and_uncertainties.md rename to _sources/readmes/units_and_uncertainties.md.txt diff --git a/docs/source/readmes/utils_index.rst b/_sources/readmes/utils_index.rst.txt similarity index 100% rename from docs/source/readmes/utils_index.rst rename to _sources/readmes/utils_index.rst.txt diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..81415803e --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.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": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 000000000..f316efcb4 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- 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: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +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/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 000000000..c718cee44 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 000000000..6cb600001 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 000000000..7059e2314 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 000000000..f815f63f9 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 000000000..f2c76e5bd Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..e9f60ca95 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..855c845e5 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..400014a4b Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 000000000..88ad05b9f Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 000000000..c4e3d804b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 000000000..c6dff51f0 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 000000000..bb195043c Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 000000000..76114bc03 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 000000000..3404f37e2 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 000000000..ae1307ff5 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 000000000..3bf984332 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 000000000..19a446a0e --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..4d67807d1 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"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 000000000..309874c17 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '4.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/file.png b/_static/file.png new file mode 100644 index 000000000..a858a410e Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 000000000..c4c6022f2 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 000000000..cd1c674f5 --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 000000000..1fddb6ee4 --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + 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 000000000..d96755fda Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 000000000..7107cec93 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 000000000..0d49244ed --- /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 000000000..92da3f8b2 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"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] = 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, + }; +} + +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] = item; + + let listItem = document.createElement("li"); + 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 = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).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]. +// 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 [".headerlinks", "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.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]. + 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) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // 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], + ]; + 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]], + ]); + }; + 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], + ]); + } + 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 000000000..8a96c69a1 --- /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/docs/Makefile b/docs/Makefile deleted file mode 100644 index b996129cc..000000000 --- a/docs/Makefile +++ /dev/null @@ -1,216 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PISA.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PISA.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/PISA" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PISA" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index 8c034f88f..000000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,312 +0,0 @@ -# -*- coding: utf-8 -*- -# -# PISA documentation build configuration file, created by -# sphinx-quickstart on Tue May 10 16:57:16 2016. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import recommonmark -from recommonmark.parser import CommonMarkParser -from recommonmark.transform import AutoStructify - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('../..')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.mathjax', - 'sphinx.ext.ifconfig', - 'sphinx.ext.viewcode', - 'sphinx.ext.napoleon', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -source_parsers = { - '.md': CommonMarkParser, -} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = ['.rst', '.md'] -#source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'PISA' -copyright = u'2021, The IceCube/PINGU Collaboration' -author = u'The IceCube/PINGU Collaboration' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'4.0' -# The full version, including alpha/beta/rc tags. -release = u'4.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -#todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - 'collapse_navigation': True -} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'PISAdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'PISA.tex', u'PISA Documentation', - u'IceCube/PINGU', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'pisa', u'PISA Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'PISA', u'PISA Documentation', - author, 'PISA', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - -# At the bottom of conf.py -github_doc_root = 'https://github.com/icecube/pisa' -def setup(app): - app.add_config_value('recommonmark_config', { - 'url_resolver': lambda url: github_doc_root + url, - 'auto_toc_tree_section': 'Contents', - 'enable_math': True, - 'enable_inline_math': True, - }, True) - app.add_transform(AutoStructify) diff --git a/docs/source/readmes/aeff.md b/docs/source/readmes/aeff.md deleted file mode 120000 index 733e2995e..000000000 --- a/docs/source/readmes/aeff.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/aeff/README.md \ No newline at end of file diff --git a/docs/source/readmes/core.md b/docs/source/readmes/core.md deleted file mode 120000 index a7cbd1a1c..000000000 --- a/docs/source/readmes/core.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/core/README.md \ No newline at end of file diff --git a/docs/source/readmes/cross_sections.md b/docs/source/readmes/cross_sections.md deleted file mode 120000 index dd99782e0..000000000 --- a/docs/source/readmes/cross_sections.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/utils/cross_sections.md \ No newline at end of file diff --git a/docs/source/readmes/data.md b/docs/source/readmes/data.md deleted file mode 120000 index 495a34823..000000000 --- a/docs/source/readmes/data.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/data/README.md \ No newline at end of file diff --git a/docs/source/readmes/discr_sys.md b/docs/source/readmes/discr_sys.md deleted file mode 120000 index 629377b1e..000000000 --- a/docs/source/readmes/discr_sys.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/discr_sys/README.md \ No newline at end of file diff --git a/docs/source/readmes/flavor_interaction_types.md b/docs/source/readmes/flavor_interaction_types.md deleted file mode 120000 index e3b339291..000000000 --- a/docs/source/readmes/flavor_interaction_types.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/utils/flavor_interaction_types.md \ No newline at end of file diff --git a/docs/source/readmes/flux.md b/docs/source/readmes/flux.md deleted file mode 120000 index 9c414b37c..000000000 --- a/docs/source/readmes/flux.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/flux/README.md \ No newline at end of file diff --git a/docs/source/readmes/general_conventions.md b/docs/source/readmes/general_conventions.md deleted file mode 120000 index 9c1618b8c..000000000 --- a/docs/source/readmes/general_conventions.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/general_conventions.md \ No newline at end of file diff --git a/docs/source/readmes/glossary.md b/docs/source/readmes/glossary.md deleted file mode 120000 index 58f6cfc26..000000000 --- a/docs/source/readmes/glossary.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/glossary.md \ No newline at end of file diff --git a/docs/source/readmes/install.md b/docs/source/readmes/install.md deleted file mode 120000 index 95b6037c7..000000000 --- a/docs/source/readmes/install.md +++ /dev/null @@ -1 +0,0 @@ -../../../INSTALL.md \ No newline at end of file diff --git a/docs/source/readmes/osc.md b/docs/source/readmes/osc.md deleted file mode 120000 index 00a2914d3..000000000 --- a/docs/source/readmes/osc.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/osc/README.md \ No newline at end of file diff --git a/docs/source/readmes/pid.md b/docs/source/readmes/pid.md deleted file mode 120000 index aaf5ee407..000000000 --- a/docs/source/readmes/pid.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/pid/README.md \ No newline at end of file diff --git a/docs/source/readmes/pisa.md b/docs/source/readmes/pisa.md deleted file mode 120000 index 6b90b0a1a..000000000 --- a/docs/source/readmes/pisa.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/README.md \ No newline at end of file diff --git a/docs/source/readmes/readme.md b/docs/source/readmes/readme.md deleted file mode 120000 index 8a33348c7..000000000 --- a/docs/source/readmes/readme.md +++ /dev/null @@ -1 +0,0 @@ -../../../README.md \ No newline at end of file diff --git a/docs/source/readmes/reco.md b/docs/source/readmes/reco.md deleted file mode 120000 index 3c07ead10..000000000 --- a/docs/source/readmes/reco.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/stages/reco/README.md \ No newline at end of file diff --git a/docs/source/readmes/stats.md b/docs/source/readmes/stats.md deleted file mode 120000 index 3d52da297..000000000 --- a/docs/source/readmes/stats.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/utils/stats.md \ No newline at end of file diff --git a/docs/source/readmes/units_and_uncertainties.md b/docs/source/readmes/units_and_uncertainties.md deleted file mode 120000 index c433b2614..000000000 --- a/docs/source/readmes/units_and_uncertainties.md +++ /dev/null @@ -1 +0,0 @@ -../../../pisa/units_and_uncertainties.md \ No newline at end of file diff --git a/docs/upload.sh b/docs/upload.sh deleted file mode 100755 index 10c2e2d56..000000000 --- a/docs/upload.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -LOCALDIR=$(dirname "$0") -HOST=pub2.icecube.wisc.edu -HTML_DIR=~peller/public_html/pisa_docs - -echo "Creating remote HTML directory if it doesn't already exist" -ssh $HOST "test -d $HTML_DIR/ || mkdir $HTML_DIR/" - -echo "Removing contents of remote HTML folder" -ssh $HOST "find $HTML_DIR/ -mindepth 1 -print0 | xargs -0 rm -rf" - -echo "Uploading new documentation" -scp -r $LOCALDIR/build/html/* $HOST:$HTML_DIR/ - -echo "Changing permissions on uploaded files" -ssh $HOST "find $HTML_DIR/ -mindepth 1 -print0 | xargs -0 chmod a=u" - -#RSYNC=/usr/bin/rsync -#$RSYNC \ -# --protocol=30 \ -# --delete --force \ -# --recursive \ -# --compress --compress-level=9 \ -# --human-readable --progress --stats \ -# -vvv \ -# $THISDIR/build/html/ $HOST:$HTML_DIR/ \ -# && \ -# ssh $HOST "find $HTML_DIR/ -print0 | xargs -0 chmod a=u" diff --git a/generate_readme.sh b/generate_readme.sh deleted file mode 100755 index 503372683..000000000 --- a/generate_readme.sh +++ /dev/null @@ -1,4 +0,0 @@ -git rm README_files/* -jupyter nbconvert --to markdown --output-dir . pisa_examples/README.ipynb -git add -f README_files/*.png -git add README.md diff --git a/genindex.html b/genindex.html new file mode 100644 index 000000000..5ba3bc2b6 --- /dev/null +++ b/genindex.html @@ -0,0 +1,4617 @@ + + + + + + Index — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Z + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + +
+ +

Z

+ + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/images/pisa4_logo_transparent.png b/images/pisa4_logo_transparent.png deleted file mode 100644 index 042241c62..000000000 Binary files a/images/pisa4_logo_transparent.png and /dev/null differ diff --git a/images/pisa4_logo_white.png b/images/pisa4_logo_white.png deleted file mode 100644 index d67f07355..000000000 Binary files a/images/pisa4_logo_white.png and /dev/null differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..243feda8d --- /dev/null +++ b/index.html @@ -0,0 +1,130 @@ + + + + + + + Welcome to PISA’s documentation! — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Welcome to PISA’s documentation!

+
+

Contents

+ +
+
+

Index

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/modules.html b/modules.html new file mode 100644 index 000000000..d896a276f --- /dev/null +++ b/modules.html @@ -0,0 +1,288 @@ + + + + + + + pisa — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 000000000..0a6c754a7 Binary files /dev/null and b/objects.inv differ diff --git a/pisa.analysis.html b/pisa.analysis.html new file mode 100644 index 000000000..f029cc600 --- /dev/null +++ b/pisa.analysis.html @@ -0,0 +1,703 @@ + + + + + + + pisa.analysis package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.analysis package

+
+

Submodules

+
+
+

pisa.analysis.analysis module

+

Common tools for performing an analysis collected into a single class +Analysis that can be subclassed by specific analyses.

+
+
+class pisa.analysis.analysis.Analysis[source]
+

Bases: BasicAnalysis

+

Analysis class for “canonical” IceCube/DeepCore/PINGU analyses.

+
    +
  • “Data” distribution creation (via passed data_maker object)

  • +
  • “Expected” distribution creation (via passed distribution_maker object)

  • +
  • +
    Minimizer Interface (via method _minimizer_callable)

    Interfaces to a minimizer for modifying the free parameters of the +distribution_maker to fit its output (as closely as possible) to the +data distribution is provided. See [minimizer_settings] for

    +
    +
    +
  • +
+
+
+fit_hypo(data_dist, hypo_maker, metric, minimizer_settings, hypo_param_selections=None, reset_free=True, check_octant=True, fit_octants_separately=None, check_ordering=False, other_metrics=None, blind=False, pprint=True, external_priors_penalty=None)[source]
+

Fitter “outer” loop: If check_octant is True, run +fit_hypo_inner starting in each octant of theta23 (assuming that +is a param in the hypo_maker). Otherwise, just run the inner +method once.

+

Note that prior to running the fit, the hypo_maker has +hypo_param_selections applied and its free parameters are reset to +their nominal values.

+
+
Parameters:
+
    +
  • data_dist (MapSet or List of MapSets) – Data distribution(s). These are what the hypothesis is tasked to +best describe during the optimization process.

  • +
  • hypo_maker (Detectors, DistributionMaker or instantiable thereto) – Generates the expectation distribution under a particular +hypothesis. This typically has (but is not required to have) some +free parameters which can be modified by the minimizer to optimize +the metric.

  • +
  • hypo_param_selections (None, string, or sequence of strings) – A pipeline configuration can have param selectors that allow +switching a parameter among two or more values by specifying the +corresponding param selector(s) here. This also allows for a single +instance of a DistributionMaker to generate distributions from +different hypotheses.

  • +
  • metric (string or iterable of strings) – The metric to use for optimization. Valid metrics are found in +VALID_METRICS. Note that the optimized hypothesis also has this +metric evaluated and reported for each of its output maps.

  • +
  • minimizer_settings (string or dict)

  • +
  • check_octant (bool) – If theta23 is a parameter to be used in the optimization (i.e., +free), the fit will be re-run in the second (first) octant if +theta23 is initialized in the first (second) octant.

  • +
  • reset_free (bool) – Resets all free parameters to values defined in stages when starting a fit

  • +
  • fit_octants_separately (bool) – If ‘check_octant’ is set so that the two octants of theta23 are +individually checked, this flag enforces that each theta23 can +only vary within the octant currently being checked (e.g. the +minimizer cannot swap octants). Deprecated.

  • +
  • check_ordering (bool) – If the ordering is not in the hypotheses already being tested, the +fit will be run in both orderings.

  • +
  • other_metrics (None, string, or list of strings) – After finding the best fit, these other metrics will be evaluated +for each output that contributes to the overall fit. All strings +must be valid metrics, as per VALID_METRICS, or the +special string ‘all’ can be specified to evaluate all +VALID_METRICS..

  • +
  • pprint (bool) – Whether to show live-update of minimizer progress.

  • +
  • blind (bool or int) – Whether to carry out a blind analysis. If True or 1, this hides actual +parameter values from display and disallows these (as well as Jacobian, +Hessian, etc.) from ending up in logfiles. If given an integer > 1, the +fitted parameters are also prevented from being stored in fit info +dictionaries.

  • +
  • external_priors_penalty (func) – User defined prior penalty function. Adds an extra penalty +to the metric that is minimized, depending on the input function.

  • +
+
+
Returns:
+

    +
  • best_fit_info (HypoFitResult (see fit_hypo_inner method for details of) – fit_info dict)

  • +
  • alternate_fits (list of fit_info from other fits run)

  • +
+

+
+
+
+ +
+
+nofit_hypo(data_dist, hypo_maker, hypo_param_selections, hypo_asimov_dist, metric, other_metrics=None, blind=False, external_priors_penalty=None)[source]
+

Fitting a hypo to a distribution generated by its own +distribution maker is unnecessary. In such a case, use this method +(instead of fit_hypo) to still retrieve meaningful information for +e.g. the match metrics.

+
+
Parameters:
+
    +
  • data_dist (MapSet or List of MapSets)

  • +
  • hypo_maker (Detectors or DistributionMaker)

  • +
  • hypo_param_selections (None, string, or sequence of strings)

  • +
  • hypo_asimov_dist (MapSet or List of MapSets)

  • +
  • metric (string or iterable of strings)

  • +
  • other_metrics (None, string, or sequence of strings)

  • +
  • blind (bool)

  • +
  • external_priors_penalty (func)

  • +
+
+
+
+ +
+
+scan(data_dist, hypo_maker, metric, hypo_param_selections=None, param_names=None, steps=None, values=None, only_points=None, outer=True, profile=True, minimizer_settings=None, outfile=None, debug_mode=1, **kwargs)[source]
+

Set hypo maker parameters named by param_names according to +either values specified by values or number of steps specified by +steps, and return the metric indicating how well the data +distribution is described by each distribution.

+

Some flexibility in how the user can specify values is allowed, based +upon the shapes of param_names and values and how the outer flag +is set.

+

Either values or steps must be specified, but not both.

+
+
Parameters:
+
    +
  • data_dist (Sequence of MapSets or MapSet) – Data distribution(s). These are what the hypothesis is tasked to +best describe during the optimization/comparison process.

  • +
  • hypo_maker (Detectors, DistributionMaker or instantiable thereto) – Generates the expectation distribution under a particular +hypothesis. This typically has (but is not required to have) some +free parameters which will be modified by the minimizer to optimize +the metric in case profile is set to True.

  • +
  • hypo_param_selections (None, string, or sequence of strings) – A pipeline configuration can have param selectors that allow +switching a parameter among two or more values by specifying the +corresponding param selector(s) here. This also allows for a single +instance of a DistributionMaker to generate distributions from +different hypotheses.

  • +
  • metric (string or iterable of strings) – The metric to use for optimization/comparison. Note that the +optimized hypothesis also has this metric evaluated and reported for +each of its output maps. Confer pisa.core.map for valid metrics.

  • +
  • param_names (None, string, or sequence of strings) – If None, assume all parameters are to be scanned; otherwise, +specifies only the name or names of parameters to be scanned.

  • +
  • steps (None, integer, or sequence of integers) –

    Number of steps to take within the allowed range of the parameter +(or parameters). Value(s) specified for steps must be >= 2. Note +that the endpoints of the range are always included, and numbers of +steps higher than 2 fill in between the endpoints.

    +
      +
    • +
      If integer…

      Take this many steps for each specified parameter.

      +
      +
      +
    • +
    • +
      If sequence of integers…

      Take the coresponding number of steps within the allowed range +for each specified parameter.

      +
      +
      +
    • +
    +

  • +
  • values (None, scalar, sequence of scalars, or sequence-of-sequences) –

      +
    • +
      If scalar…

      Set this value for the (one) param name in param_names.

      +
      +
      +
    • +
    • +
      If sequence of scalars…
        +
      • if len(param_names) is 1, set its value to each number in the +sequence.

      • +
      • otherwise, set each param in param_names to the corresponding +value in values. There must be the same number of param names +as values.

      • +
      +
      +
      +
    • +
    • +
      If sequence of (sequences or iterables)…
        +
      • Each param name corresponds to one of the inner sequences, in +the order that the param names are specified.

      • +
      • If outer is False, all inner sequences must have the same +length, and there will be one distribution generated for +each set of values across the inner sequences. In other words, +there will be a total of len(inner sequence) distribution generated.

      • +
      • If outer is True, the lengths of inner sequences needn’t be +the same. This takes the outer product of the passed sequences +to arrive at the permutations of the parameter values that will +be used to produce the distributions (essentially nested +loops over each parameter). E.g., if two params are scanned, +for each value of the first param’s inner sequence, a +distribution is produced for every value of the second param’s +inner sequence. In total, there will be +len(inner seq0) * len(inner seq1) * ... +distributions produced.

      • +
      +
      +
      +
    • +
    +

  • +
  • only_points (None, integer, or even-length sequence of integers) – Only select subset of points to be analysed by specifying their +range of positions within the whole set (0-indexed, incremental). +For the lazy amongst us…

  • +
  • outer (bool) – If set to True and a sequence of sequences is passed for values, +the points scanned are the outer product of the inner sequences. +See values for a more detailed explanation.

  • +
  • profile (bool) – If set to True, minimizes specified metric over all free parameters +at each scanned point. Otherwise keeps them at their nominal values +and only performs grid scan of the parameters specified in +param_names.

  • +
  • minimizer_settings (dict) – Dictionary containing the settings for minimization, which are +only needed if profile is set to True. Hint: it has proven useful +to sprinkle with a healthy dose of scepticism.

  • +
  • outfile (string) – Outfile to store results to. Will be updated at each scan step to +write out intermediate results to prevent loss of data in case +the apocalypse strikes after all.

  • +
  • debug_mode (int, either one of [0, 1, 2]) – If set to 2, will add a wealth of minimisation history and physics +information to the output file. Otherwise, the output will contain +the essentials to perform an analysis (0), or will hopefully be +detailed enough for some simple debugging (1). Any other value for +debug_mode will be set to 2.

  • +
+
+
+
+ +
+ +
+
+class pisa.analysis.analysis.BasicAnalysis[source]
+

Bases: object

+

A bare-bones analysis that only fits a hypothesis to data.

+

Full analyses with functionality beyond just fitting (doing scans, for example) +should sub-class this class.

+

Every fit is run with the fit_recursively method, where the fit strategy is +defined by the three arguments method, method_kwargs and +local_fit_kwargs (see documentation of fit_recursively() below for +other arguments.) The method argument determines which sub-routine should be +run, method_kwargs is a dictionary with any keyword arguments of that +sub-routine, and local_fit_kwargs is a dictionary (or list thereof) defining any +nested sub-routines that are run within the outer sub-routine. A sub-sub-routine +defined in local_fit_kwargs should again be a dictionary with the three keywords +method, method_kwargs and local_fit_kwargs. In this way, sub-routines +can be arbitrarily stacked to define complex fit strategies.

+

Examples

+

A canonical standard oscillation fit fits octants in theta23 separately and then +runs a scipy minimizer to optimize locally in each octant. The arguments that would +produce that result when passed to fit_recursively are:

+
method = "octants"
+method_kwargs = {
+    "angle": "theta23"
+    "inflection_point": 45 * ureg.deg
+}
+local_fit_kwargs = {
+    "method": "scipy",
+    "method_kwargs": minimizer_settings,
+    "local_fit_kwargs": None
+}
+
+
+

Let’s say we also have a CP violating phase deltacp24 that we want to fit +separately per quadrant split at 90 degrees. We want this done within each +quadrant fit for theta23, making 4 fits in total. Then we would nest the +quadrant fit for deltacp24 inside the octant fit like so:

+
method = "octants"
+method_kwargs = {
+    "angle": "theta23"
+    "inflection_point": 45 * ureg.deg
+}
+local_fit_kwargs = {
+    "method": "octants",
+    "method_kwargs": {
+        "angle": "deltacp24",
+        "inflection_point": 90 * ureg.deg,
+    }
+    "local_fit_kwargs": {
+        "method": "scipy",
+        "method_kwargs": minimizer_settings,
+        "local_fit_kwargs": None
+    }
+}
+
+
+

Let’s suppose we want to apply a grid-scan global fit method to sterile mixing +parameters theta24 and deltam41, but we want to marginalize over all other +parameters with a usual 3-flavor fit configuration. That could be achieved as +follows:

+
method = "grid_scan"
+method_kwargs = {
+    "grid": {
+        "theta24": np.geomspace(1, 20, 3) * ureg.deg,
+        "deltam41": np.geomspace(0.01, 0.5, 4) * ureg["eV^2"],
+    },
+    "fix_grid_params": False,
+}
+local_fit_kwargs = {
+    "method": "octants",
+    "method_kwargs": {
+        "angle": "theta23",
+        "inflection_point": 45 * ureg.deg,
+    }
+    "local_fit_kwargs": {
+        "method": "scipy",
+        "method_kwargs": minimizer_settings,
+        "local_fit_kwargs": None
+    }
+}
+
+
+

Instead of scipy, we can also use iminuit and nlopt for local minimization or +global searches by writing a dictionary with "method": "iminuit" or "method": +"nlopt", respectively.

+

NLOPT Options

+

NLOPT can be dropped in place of scipy and iminuit by writing a dictionary with +"method": "nlopt" and choosing the algorithm by its name of the form +NLOPT_{G,L}{N}_XXXX. PISA supports all of the derivative-free global +(https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#global-optimization) and +local +(https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#local-derivative-free-optimization) +algorithms. Algorithms requiring gradients such as BFGS are not supported. To use +the Nelder-Mead algorithm, for example, the following settings could be used:

+
nlopt_settings = {
+    "method": "nlopt",
+    "method_kwargs": {
+        "algorithm": "NLOPT_LN_NELDERMEAD",
+        "ftol_abs": 1e-5,
+        "ftol_rel": 1e-5,
+        # other options that can be set here:
+        # xtol_abs, xtol_rel, stopval, maxeval, maxtime
+        # after maxtime seconds, stop and return best result so far
+        "maxtime": 60
+    },
+    "local_fit_kwargs": None  # no further nesting available
+}
+
+
+

and then run the fit with

+
best_fit_info = ana.fit_recursively(
+    data_dist,
+    dm,
+    "chi2",
+    None,
+    **nlopt_settings
+)
+
+
+

. Of course, you can also nest the nlopt_settings dictionary in any of the +octants, ranges and so on by passing it as local_fit_kwargs.

+

Adding constraints

+

Adding inequality constraints to algorithms that support it is possible by writing a +lambda function in a string that expects to get the current parameters as a +ParamSet and returns a float. The result will satisfy that the passed function +stays negative (to be consistent with scipy). The string will be passed to +eval to build the callable function. For example, a silly way to bound +delta_index > 0.1 would be:

+
"method_kwargs": {
+    "algorithm": "NLOPT_LN_COBYLA",
+    "ftol_abs": 1e-5,
+    "ftol_rel": 1e-5,
+    "maxtime": 30,
+    "ineq_constraints": [
+        # be sure to convert parameters to their magnitude
+        "lambda params: params.delta_index.m - 0.1"
+    ]
+}
+
+
+

Adding inequality constraints to algorithms that don’t support it can be done by +either nesting the local fit in the constrained_fit method or to use NLOPT’s +AUGLAG method that adds a penalty for constraint violations internally. For example, +we could do this to fulfill the same constraint with the PRAXIS algorithm:

+
"method_kwargs": {
+    "algorithm": "NLOPT_AUGLAG",
+    "ineq_constraints":[
+        "lambda params: params.delta_index.m - 0.1"
+    ],
+    "local_optimizer": {
+        # supports all the same options as above
+        "algorithm": "NLOPT_LN_PRAXIS",
+        "ftol_abs": 1e-5,
+        "ftol_rel": 1e-5,
+    }
+}
+
+
+

Using global searches with local subsidiary minimizers

+

Some global searches, like evolutionary strategies, use local subsidiary minimizers. +These can be defined just as above by passing a dictionary with the settings to the +local_optimizer keyword. Note that, again, only gradient-free methods are +supported. Here is an example for the “Multi-Level single linkage” (MLSL) algorithm, +using PRAXIS as the local optimizer:

+
"method_kwargs": {
+    "algorithm": "NLOPT_G_MLSL_LDS",
+    "local_optimizer": {
+        "algorithm": "NLOPT_LN_PRAXIS",
+        "ftol_abs": 1e-5,
+        "ftol_rel": 1e-5,
+    }
+}
+
+
+

For some evolutionary strategies such as ISRES, the population option can also +be set.

+
"method_kwargs": {
+    "algorithm": "NLOPT_GN_ISRES",
+    "population": 100,
+}
+
+
+

Custom fitting methods

+

Custom fitting methods are added by subclassing the analysis. The fit function +name has to follow the scheme _fit_{method} where method is the name of the +fit method. For instance, the function for scipy is called _fit_scipy and can +be called by setting “method”: “scipy” in the fit strategy dict.

+

The function has to accept the parameters data_dist, hypo_maker, metric, +external_priors_penalty, method_kwargs, and local_fit_kwargs. See docstring +of fit_recursively for descriptions of these arguments. The return value +of the function must be a HypoFitResult object. As an example, the following +sub-class of the BasicAnalysis has a custom fit method that, nonsensically, +always sets 42 degrees as the starting value for theta23:

+
class SubclassedAnalysis(BasicAnalysis):
+
+    def _fit_nonsense(
+        self, data_dist, hypo_maker, metric,
+        external_priors_penalty, method_kwargs, local_fit_kwargs
+    ):
+        logging.info("Starting nonsense fit (setting theta23 to 42 deg)...")
+
+        for pipeline in hypo_maker:
+            if "theta23" in pipeline.params.free.names:
+                pipeline.params.theta23.value = 42 * ureg["deg"]
+
+        best_fit_info = self.fit_recursively(
+            data_dist, hypo_maker, metric, external_priors_penalty,
+            local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"],
+            local_fit_kwargs["local_fit_kwargs"]
+        )
+
+        return best_fit_info
+
+
+

Now, the nonsense fit method can be used and nested with any other fit method +like so:

+
ana = SubclassedAnalysis()
+local_minuit = OrderedDict(
+    method="iminuit",
+    method_kwargs={
+        "tol": 10,
+    },
+    local_fit_kwargs=None
+)
+
+local_nonsense_minuit = OrderedDict(
+    method="nonsense",
+    method_kwargs=None,
+    local_fit_kwargs=local_minuit
+)
+
+fit_result = ana.fit_recursively(
+    data_dist,
+    distribution_maker,
+    "chi2",
+    None,
+    **local_nonsense_minuit
+)
+
+
+
+
+fit_recursively(data_dist, hypo_maker, metric, external_priors_penalty, method, method_kwargs=None, local_fit_kwargs=None)[source]
+

Recursively apply global search strategies with local sub-fits.

+
+
Parameters:
+
    +
  • data_dist (Sequence of MapSets or MapSet) – Data distribution to be fit. Can be an actual-, Asimov-, or pseudo-data +distribution (where the latter two are derived from simulation and so aren’t +technically “data”).

  • +
  • hypo_maker (Detectors or DistributionMaker) – Creates the per-bin expectation values per map based on its param values. +Free params in the hypo_maker are modified by the minimizer to achieve a +“best” fit.

  • +
  • metric (string or iterable of strings) – Metric by which to evaluate the fit. See documentation of Map.

  • +
  • external_priors_penalty (func) – User defined prior penalty function, which takes hypo_maker and +metric as arguments and returns numerical value of penalty to the metric +value. It is expected sign of the penalty is correctly specified inside the +external_priors_penalty (e.g. negative for llh or positive for chi2).

  • +
  • method (str) – Name of the sub-routine to be run. Currently, the options are scipy, +octants, best_of, grid_scan, constrained, +ranges, condition, iminuit, and nlopt.

  • +
  • method_kwargs (dict) – Any keyword arguments taken by the sub-routine. May be None if the +sub-routine takes no additional arguments.

  • +
  • local_fit_kwargs (dict or list thereof) – A dictionary defining subsidiary sub-routines with the keywords method, +method_kwargs and local_fit_kwargs. May be None if the +sub-routine is itself a local or global fit that runs no further subsidiary +fits.

  • +
+
+
+
+ +
+ +
+
+class pisa.analysis.analysis.Counter(i=0)[source]
+

Bases: object

+

Simple counter object for use as a minimizer callback.

+
+
+property count
+

Current count

+
+
Type:
+

int

+
+
+
+ +
+
+reset()[source]
+

Reset counter

+
+ +
+ +
+
+pisa.analysis.analysis.MINIMIZERS_USING_CONSTRAINTS = 'cobyla'
+

Minimizers that cannot use the ‘bounds’ argument and instead need bounds to +be formulated in terms of constraints.

+
+ +
+
+pisa.analysis.analysis.MINIMIZERS_USING_SYMM_GRAD = ('l-bfgs-b', 'slsqp')
+

Minimizers that use symmetrical steps on either side of a point to compute +gradients. See https://github.com/scipy/scipy/issues/4916

+
+ +
+
+pisa.analysis.analysis.set_minimizer_defaults(minimizer_settings)[source]
+

Fill in default values for minimizer settings.

+
+
Parameters:
+

minimizer_settings (dict)

+
+
Returns:
+

new_minimizer_settings

+
+
Return type:
+

dict

+
+
+
+ +
+
+pisa.analysis.analysis.validate_minimizer_settings(minimizer_settings)[source]
+

Validate minimizer settings.

+

See source for specific thresholds set.

+
+
Parameters:
+

minimizer_settings (dict)

+
+
Raises:
+

ValueError – If any minimizer settings are deemed to be invalid.

+
+
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.core.html b/pisa.core.html new file mode 100644 index 000000000..1735caa17 --- /dev/null +++ b/pisa.core.html @@ -0,0 +1,6251 @@ + + + + + + + pisa.core package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.core package

+
+

Submodules

+
+
+

pisa.core.bin_indexing module

+

Functions to retrieve the bin index for a 1- to 3-dimensional sample.

+

Functions were adapted from translation.py

+

Notes

+

The binning convention in PISA (from numpy.histogramdd) is that the lower edge +is inclusive and upper edge is exclusive for a given bin, except for the +upper-most bin whose upper edge is also inclusive. Visually, for 1D:

+
+

[ bin 0 ) [ bin 1 ) … [ bin num_bins - 1 ]

+
+

First bin is index = 0 and last bin is index = (num_bins - 1)

+
    +
  • Values below the lowermost-edge of any dimension’s binning return index = -1

  • +
  • NaN values return index = -1

  • +
  • Otherwise, values above the uppermost-edge of any dimension’s binning return +index = num_bins

  • +
+
+
+pisa.core.bin_indexing.lookup_indices(sample, binning)[source]
+

Lookup (flattened) bin index for sample points.

+
+
Parameters:
+
    +
  • sample (length-M_dimensions sequence of length-N_events arrays) – All smart arrays must have the same lengths; corresponding elements of +the arrays are the coordinates of an event in the dimensions each array +represents.

  • +
  • binning (pisa.core.binning.MultiDimBinning or convertible thereto) – binning is passed to instantiate MultiDimBinning, so e.g., a +pisa.core.binning.OneDimBinning is valid to pass as binning

  • +
+
+
Returns:
+

indices – One for each event the index of the histogram in which it falls into

+
+
Return type:
+

length-N_events arrays

+
+
+

Notes

+

this method works for 1d, 2d and 3d histogram only

+
+ +
+
+pisa.core.bin_indexing.test_lookup_indices()[source]
+

Unit tests for lookup_indices function

+
+ +
+
+

pisa.core.binning module

+

Class to define binning in one dimension (OneDimBinning) and then a container +class (MultiDimBinning) for arbitrarily many of dimensions (one or more). These +classes have many useful methods for working with binning.

+
+
+class pisa.core.binning.MultiDimBinning(dimensions, name=None, mask=None)[source]
+

Bases: object

+

Multi-dimensional binning object. This can contain one or more +OneDimBinning objects, and all subsequent operations (e.g. slicing) will +act on these in the order they are supplied.

+

Note that it is convenient to construct MultiDimBinning objects via the * +operator (which implementes the outer product) from multiple OneDimBinning +objects. See Examples below for details.

+
+
Parameters:
+

dimensions (OneDimBinning or sequence convertible thereto) – Dimensions for the binning object. Indexing into the MultiDimBinning +object follows the order in which dimensions are provided.

+
+
+
+

See also

+
+
OneDimBinning

each item that is not a OneDimBinning object is passed to this class to be instantiated as such.

+
+
+
+

Examples

+
>>> from pisa import ureg
+>>> from pisa.core.binning import MultiDimBinning, OneDimBinning
+>>> ebins = OneDimBinning(name='energy', is_log=True,
+...                       num_bins=40, domain=[1, 100]*ureg.GeV)
+>>> czbins = OneDimBinning(name='coszen',
+...                        is_lin=True, num_bins=4, domain=[-1, 0])
+>>> mdb = ebins * czbins
+>>> print(mdb)
+MultiDimBinning(
+    OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)),
+    OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear))
+)
+
+
+
>>> print(mdb.energy)
+OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic))
+>>> print(mdb[0, 0])
+MultiDimBinning(
+    OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.0, 1.1220184543019633]GeV (behavior is logarithmic)),
+    OneDimBinning('coszen', 1 linearly-regular bin with edges at [-1.0, -0.75] (behavior is linear))
+)
+>>> print(mdb.slice(energy=2))
+MultiDimBinning(
+    OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.2589254117941673, 1.4125375446227544]GeV (behavior is logarithmic)),
+    OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear))
+)
+>>> smaller_binning = mdb[0:2, 0:3]
+>>> map = smaller_binning.ones(name='my_map')
+>>> print(map)
+Map(name='my_map',
+    tex='{\\rm my\\_map}',
+    full_comparison=False,
+    hash=None,
+    parent_indexer=None,
+    binning=MultiDimBinning(
+    OneDimBinning('energy', 2 logarithmically-regular bins spanning [1.0, 1.2589254117941673] GeV (behavior is logarithmic)),
+    OneDimBinning('coszen', 3 linearly-regular bins spanning [-1.0, -0.25] (behavior is linear))
+),
+    hist=array([[1., 1., 1.],
+       [1., 1., 1.]]))
+
+
+
+
+assert_array_fits(array)[source]
+

Check if a 2D array of values fits into the defined bins (i.e., has +the exact shape defined by this binning).

+
+
Parameters:
+

array (2D array (or sequence-of-sequences))

+
+
Returns:
+

fits

+
+
Return type:
+

bool, True if array fits or False otherwise

+
+
Raises:
+

ValueError if array shape does not match the binning shape

+
+
+
+ +
+
+assert_compat(other)[source]
+

Check if a (possibly different) binning can map onto the defined +binning. Allows for simple re-binning schemes (but no interpolation).

+
+
Parameters:
+

other (Binning or container with attribute "binning")

+
+
Returns:
+

compat

+
+
Return type:
+

bool

+
+
+
+ +
+
+property basename_binning
+

Identical binning but with dimensions named by their basenames. +Note that the tex properties for the dimensions are not carried over +into the new binning.

+
+ +
+
+property basenames
+

List of binning names with prefixes and/or suffixes along with any +number of possible separator characters removed. See function +basename for detailed specifications.

+
+ +
+
+property bin_edges
+

Return a list of the contained dimensions’ bin_edges that is +compatible with the numpy.histogramdd hist argument.

+
+ +
+
+bin_volumes(attach_units=True)[source]
+

Bin “volumes” defined in num_dims-dimensions

+
+
Parameters:
+

attach_units (bool) – Whether to attach pint units to the resulting array

+
+
Returns:
+

volumes – Bin volumes

+
+
Return type:
+

array

+
+
+
+ +
+
+broadcast(a, from_dim, to_dims)[source]
+

Take a one-dimensional array representing one input dimension and +broadcast it across some number of output dimensions.

+
+
Parameters:
+
    +
  • a (1D array) – Data from the from_dim dimension. a must have same length as +the dimension it comes from (or Numpy must be able to automatically +cast it into this dimension).

  • +
  • from_dim (string) – Name of dimension that the data in a comes from.

  • +
  • to_dims (string or iterable of strings) – Dimension(s) to cast a into.

  • +
+
+
Returns:
+

a_broadcast – Broadcast version of a

+
+
Return type:
+

array

+
+
+
+

See also

+
+
broadcaster

The method used internally to derive the tuple used to broadcast the array. This can be used directly to return the broadcaster for use on other Maps or Numpy arrays.

+
+
+
+
+ +
+
+broadcaster(from_dim, to_dims)[source]
+

Generate an indexder that, if applied to a one-dimensional array +representing data from one dimension, broadcasts that array into some +number of other dimensions.

+
+
Parameters:
+
    +
  • from_dim (string) – Name of dimension that the data in comes from.

  • +
  • to_dims (string or iterable of strings) – Dimension(s) to cast into.

  • +
+
+
Returns:
+

bcast – Tuple that can be applied to a Numpy array for purposes of +broadcasting it. E.g. use as np.array([0,1,2])[bcast].

+
+
Return type:
+

tuple

+
+
+
+ +
+
+property coord
+

coordinate for indexing into binning by dim names

+
+
Type:
+

namedtuple

+
+
+
+ +
+
+property dimensions
+

each dimension’s binning in a list

+
+
Type:
+

tuple of OneDimBinning

+
+
+
+ +
+
+property dims
+

shortcut for dimensions

+
+
Type:
+

tuple of OneDimBinning

+
+
+
+ +
+
+property domains
+

Return a list of the contained dimensions’ domains

+
+ +
+
+downsample(*args, **kwargs)[source]
+

Return a Binning object downsampled relative to this binning.

+
+
Parameters:
+
    +
  • *args (each factor an int) – Factors by which to downsample the binnings. There must either be +one factor (one arg)–which will be broadcast to all dimensions–or +there must be as many factors (args) as there are dimensions. +If positional args are specified (i.e., non-kwargs), then kwargs +are forbidden.

  • +
  • **kwargs (name=factor pairs)

  • +
+
+
Returns:
+

new_binning – New binning, downsampled from the current binning.

+
+
Return type:
+

MultiDimBinning

+
+
+

Notes

+

Can either specify downsampling by passing in args (ordered values, no +keywords) or kwargs (order doesn’t matter, but uses keywords), but not +both.

+
+

See also

+
+
oversample

Oversample (upsample) a the MultiDimBinning

+
+
OneDimBinning.downsample

The method actually called to perform the downsampling for each OneDimBinning within this MultiDimBinning object.

+
+
OneDimBinning.oversample

Same, but oversample (upsample) a OneDimBinning object

+
+
+
+
+ +
+
+property edges_hash
+

hash on the list of hashes for each dimension’s edge values

+
+
Type:
+

int

+
+
+
+ +
+
+empty(name, map_kw=None, **kwargs)[source]
+

Return a Map whose hist is an “empty” numpy ndarray with same +dimensions as this binning.

+

The contents are not _actually_ empty, just undefined. Therefore be +careful to populate the array prior to using its contents.

+
+
Parameters:
+
    +
  • name (string) – Name of the Map

  • +
  • map_kw (None or dict) – keyword arguments sent to instantiate the new Map (except name +which is specified above)

  • +
  • **kwargs – keyword arguments passed on to numpy.empty() (except shape which +must be omitted)

  • +
+
+
Returns:
+

map

+
+
Return type:
+

Map

+
+
+
+ +
+
+property finite_binning
+

Identical binning but with infinities in bin edges replaced by +largest/smallest floating-point numbers representable with the current +pisa.FTYPE.

+
+ +
+
+classmethod from_json(resource)[source]
+

Instantiate a new MultiDimBinning object from a JSON file.

+

The format of the JSON is generated by the MultiDimBinning.to_json +method, which converts a MultiDimBinning object to basic types and +numpy arrays are converted in a call to pisa.utils.jsons.to_json.

+
+
Parameters:
+

resource (str) – A PISA resource specification (see pisa.utils.resources)

+
+
+ +
+ +
+
+full(fill_value, name, map_kw=None, **kwargs)[source]
+

Return a map whose hist is filled with fill_value of same +dimensions as this binning.

+
+
Parameters:
+
    +
  • fill_value – Value with which to fill the map

  • +
  • name (string) – Name of the map

  • +
  • map_kw (None or dict) – keyword arguments sent to instantiate the new Map (except name +which is specified above)

  • +
  • **kwargs – keyword arguments passed on to numpy.fill_value() (except shape, +which must be omitted)

  • +
+
+
Returns:
+

map

+
+
Return type:
+

Map

+
+
+
+ +
+
+property hash
+

Unique hash value for this object

+
+ +
+
+property hashable_state
+

Everything necessary to fully describe this object’s state. Note +that objects may be returned by reference, so to prevent external +modification, the user must call deepcopy() separately on the returned +OrderedDict.

+
+
Returns:
+

state – MultiDimBinning via MultiDimBinning(**state)

+
+
Return type:
+

OrderedDict that can be passed to instantiate a new

+
+
+
+ +
+
+property inbounds_criteria
+

Return string boolean criteria indicating e.g. an event falls within +the limits of the defined binning.

+

This can be used for e.g. applying cuts to events.

+
+

See also

+

pisa.core.events.keepEventsInBins

+
+
+ +
+
+index(dim, use_basenames=False)[source]
+

Find dimension implied by dim and return its integer index.

+
+
Parameters:
+
    +
  • dim (int, string, OneDimBinning) – An integer index, dimesion name, or identical OneDimBinning object +to locate within the contained dimensions

  • +
  • use_basenames (bool) – Dimension names are only compared after pre/suffixes are stripped, +allowing for e.g. `dim`=’true_energy’ to find ‘reco_energy’.

  • +
+
+
Returns:
+

idx – index of the dimension corresponding to dim

+
+
Return type:
+

integer

+
+
Raises:
+

ValueError if dim cannot be found

+
+
+
+ +
+
+index2coord(index)[source]
+

Convert a flat index into an N-dimensional bin coordinate.

+

Useful in conjunction with enumerate(iterbins)

+
+
Parameters:
+

index (integer) – The flat index

+
+
Returns:
+

coord – Coordinates are in the same order as the binning is here defined +and each coordinate is named by its corresponding dimension. +Therefore integer indexing into coord as well as named indexing +are possible.

+
+
Return type:
+

self.coord namedtuple

+
+
+
+ +
+
+indexer(**kwargs)[source]
+

Any dimension index/slice not specified by name in kwargs will +default to “:” (all elements).

+
+
Parameters:
+

**kwargs – kwargs are names of dimension(s) and assigned to these are either +an integer index into that dimension or a Python slice object for +that dimension. See examples below for details.

+
+
Returns:
+

indexer

+
+
Return type:
+

tuple

+
+
+
+

See also

+
+
broadcast

Assignment of a one-dimensional array to a higher-dimensional array is simplified greatly by using broadcast in conjunction with indexer or pisa.core.map.Map.slice. See examples in docs for broadcast.

+
+
broadcaster

Similar to broadcast, but returns a tuple that can be applied to broadcast any one-dimensional array.

+
+
slice

Apply the indexer returned by this method to this MultiDimBinning object, returning a new MultiDimBinning object.

+
+
pisa.core.map.Map.slice

Same operation, but slices a Map object by dimension-name (internally, calls indexer).

+
+
+
+

Examples

+
>>> from pisa import ureg
+>>> from pisa.core.binning import MultiDimBinning, OneDimBinning
+>>> ebins = OneDimBinning(name='energy', is_log=True,
+...                       num_bins=40, domain=[1, 80]*ureg.GeV)
+>>> czbins = OneDimBinning(name='coszen',
+...                        is_lin=True, num_bins=4, domain=[-1, 0])
+>>> mdb = ebins * czbins
+>>> print(mdb.indexer(energy=0))
+(0, slice(None, None, None))
+
+
+

Omitting a dimension (coszen in the above) is equivalent to slicing +with a colon (i.e., (0, slice(None))):

+
>>> print(mdb.indexer(energy=0, coszen=slice(None)))
+(0, slice(None, None, None))
+
+
+
>>> print(mdb.indexer(energy=slice(None), coszen=1))
+(slice(None, None, None), 1)
+
+
+

Now create an indexer to use on a Numpy array:

+
>>> x = np.random.RandomState(0).uniform(size=mdb.shape)
+>>> indexer = mdb.indexer(energy=slice(0, 5), coszen=1)
+>>> print(x[indexer])
+[0.71518937 0.64589411 0.38344152 0.92559664 0.83261985]
+
+
+
+ +
+
+is_compat(other)[source]
+

Check if another binning is compatible with this binning.

+

Note that for now, only downsampling is allowed from other to this, and +not vice versa.

+
+
Parameters:
+

other (MultiDimBinning)

+
+
Returns:
+

is_compat

+
+
Return type:
+

bool

+
+
+
+ +
+
+property is_irregular
+

Returns True if any of the 1D binnings is irregular.

+
+ +
+
+property is_lin
+

Returns True iff all dimensions are linear.

+
+ +
+
+property is_log
+

Returns True iff all dimensions are log.

+
+ +
+
+iterbins()[source]
+

Return an iterator over each N-dimensional bin. The elments returned +by the iterator are each a MultiDimBinning, just containing a single +bin.

+
+
Return type:
+

bin_iterator

+
+
+
+

See also

+
+
index2coord

convert the (flat) index to multi-dimensional coordinate, which is useful when using e.g. enumerate(iterbins)

+
+
+
+
+ +
+
+itercoords()[source]
+

Return an iterator over each N-dimensional coordinate into the +binning. The elments returned by the iterator are each a namedtuple, +which can be used to directly index into the binning.

+
+
Return type:
+

coord_iterator

+
+
+
+

See also

+
+
iterbins

Iterator over each bin

+
+
index2coord

convert the (flat) index to multi-dimensional coordinate, which is useful when using e.g. enumerate(iterbins)

+
+
+
+
+ +
+
+iterdims()[source]
+

Iterator over contained dimensions, each a OneDimBinning

+
+ +
+
+iteredgetuples()[source]
+

Return an iterator over each bin’s edges. The elments returned by +the iterator are a tuple of tuples, where the innermost tuples +correspond to each dimension (in the order they’re defined here).

+

Units are stripped prior to iteration for purposes of speed.

+

Note that this method is, according to one simple test, about 5000x +faster than iterbins.

+
+
Return type:
+

edges_iterator

+
+
+
+

See also

+
+
iterbins

Similar, but returns a OneDimBinning object for each bin. This is slower that iteredgetuples but easier to work with.

+
+
+
+
+ +
+
+ito(*args, **kwargs)[source]
+

Convert units in-place. Cf. Pint’s ito method.

+
+ +
+
+property mask
+

return the bin mask

+
+
Type:
+

array

+
+
+
+ +
+
+property mask_hash
+

Hash value based solely upon the mask.

+
+ +
+
+meshgrid(entity, attach_units=True)[source]
+

Apply NumPy’s meshgrid method on various entities of interest.

+
+
Parameters:
+
    +
  • entity (string) – Can be any attribute of OneDimBinning that returns a 1D array with +units. E.g., one of ‘midpoints’, ‘weighted_centers’, ‘bin_edges’, +‘bin_widths’, or ‘weighted_bin_widths’

  • +
  • attach_units (bool) – Whether to attach units to the result (can save computation time by +not doing so).

  • +
+
+
Returns:
+

[X1, X2,…, XN] – One ndarray or quantity is returned per dimension; see docs for +numpy.meshgrid for details

+
+
Return type:
+

list of numpy ndarray or Pint quantities of the same

+
+
+
+

See also

+

numpy.meshgrid

+
+
+ +
+
+property midpoints
+

Return a list of the contained dimensions’ midpoints

+
+ +
+
+property name
+

Name of the dimension

+
+ +
+
+property names
+

names of each dimension contained

+
+
Type:
+

list of strings

+
+
+
+ +
+
+property normalize_values
+

Normalize quantities’ units prior to hashing

+
+
Type:
+

bool

+
+
+
+ +
+
+property normalized_state
+

OrderedDict containing normalized (base units, and rounded to +appropriate precision) state attributes used for testing equality +between two objects.

+

Use hashable_state for faster equality checks and normalized_state +for inspecting the contents of each state attribute pre-hashing

+
+ +
+
+property num_bins
+

Return a list of the contained dimensions’ num_bins. +Note that this does not accpunt for any bin mask (since it is computed per dimension)

+
+ +
+
+property num_dims
+

number of dimensions

+
+
Type:
+

int

+
+
+
+ +
+
+ones(name, map_kw=None, **kwargs)[source]
+

Return a numpy ndarray filled with 1’s with same dimensions as this +binning.

+
+
Parameters:
+
    +
  • name (string) – Name of the map

  • +
  • map_kw (None or dict) – keyword arguments sent to instantiate the new Map (except name +which is specified above)

  • +
  • **kwargs – keyword arguments passed on to numpy.ones() (except shape which +must be omitted)

  • +
+
+
Returns:
+

map

+
+
Return type:
+

Map

+
+
+
+ +
+
+oversample(*args, **kwargs)[source]
+

Return a MultiDimBinning object oversampled relative to this one.

+
+
Parameters:
+
    +
  • *args (each factor an int) – Factors by which to oversample the binnings. There must either be +one factor (one arg)–which will be broadcast to all dimensions–or +there must be as many factors (args) as there are dimensions. +If positional args are specified (i.e., non-kwargs), then kwargs +are forbidden. For more detailed control, use keyword arguments to +specify the dimension(s) to be oversampled and their factors.

  • +
  • **kwargs (name=factor pairs) – Dimensions not specified default to oversample factor of 1 (i.e., +no oversampling)

  • +
+
+
Returns:
+

new_binning – New binning, oversampled from the current binning.

+
+
Return type:
+

MultiDimBinning

+
+
+

Notes

+

You can either specify oversmapling by passing in args (ordered values, +no keywords) or kwargs (order doesn’t matter, but uses keywords), but +not both.

+

Specifying simple args (no keywords) requires either a single scalar +(in which case all dimensions will be oversampled by the same factor) +or one scalar per dimension (which oversamples the dimensions in the +order specified).

+

Specifying keyword args is far more explicit (and general), where each +dimension’s oversampling can be specified by name=factor pairs, but not +every dimension must be specified (where no oversampling is applied to +unspecified dimensions).

+
+

See also

+
+
downsample

Similar to this, but downsample the MultiDimBinning

+
+
OneDimBinning.oversample

Oversample a OneDimBinning object; this method is called to actually perform the oversampling for each dimension within this MultiDimBinning object

+
+
OneDimBinning.downsample

Same but downsample for OneDimBinning

+
+
+
+

Examples

+
>>> x = OneDimBinning('x', bin_edges=[0, 1, 2])
+>>> y = OneDimBinning('y', bin_edges=[0, 20])
+>>> mdb = x * y
+
+
+

The following are all equivalent:

+
>>> print(mdb.oversample(2))
+MultiDimBinning(
+    OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)),
+    OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear))
+)
+>>> print(mdb.oversample(2, 2))
+MultiDimBinning(
+    OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)),
+    OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear))
+)
+>>> print(mdb.oversample(x=2, y=2))
+MultiDimBinning(
+    OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)),
+    OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear))
+)
+
+
+

But with kwargs, you can specify only the dimensions you want to +oversample, and the other dimension(s) remain unchanged:

+
>>> print(mdb.oversample(y=5))
+MultiDimBinning(
+    OneDimBinning('x', 2 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)),
+    OneDimBinning('y', 5 linearly-regular bins spanning [0.0, 20.0] (behavior is linear))
+)
+
+
+
+ +
+
+remove(dims)[source]
+

Remove dimensions.

+
+
Parameters:
+

dims (str, int, or sequence thereof) – Dimensions to be removed

+
+
Returns:
+

binning – Identical binning as this but with dims removed.

+
+
Return type:
+

MultiDimBinning

+
+
+
+ +
+
+reorder_dimensions(order, use_deepcopy=False, use_basenames=False)[source]
+

Return a new MultiDimBinning object with dimensions ordered +according to order.

+
+
Parameters:
+

order (MultiDimBinning or sequence of string, int, or OneDimBinning) – Order of dimensions to use. Strings are interpreted as dimension +basenames, integers are interpreted as dimension indices, and +OneDimBinning objects are interpreted by their basename +attributes (so e.g. the exact binnings in order do not have to +match this object’s exact binnings; only their basenames). Note +that a MultiDimBinning object is a valid sequence type to use for +order.

+
+
+

Notes

+

Dimensions specified in order that are not in this object are +ignored, but dimensions in this object that are missing in order +result in an error.

+
+
Return type:
+

MultiDimBinning object with reordred dimensions.

+
+
Raises:
+
    +
  • ValueError if dimensions present in this object are missing from

  • +
  • order

  • +
+
+
+

Examples

+
>>> b0 = MultiDimBinning(...)
+>>> b1 = MultiDimBinning(...)
+>>> b2 = b0.reorder_dimensions(b1)
+>>> print(b2.binning.names)
+
+
+
+ +
+
+property serializable_state
+

Attributes of the object that are stored to disk. Note that +attributes may be returned as references to other objects, so to +prevent external modification of those objects, the user must call +deepcopy() separately on the returned OrderedDict.

+
+
Returns:
+

state dict – can be passed to instantiate a new MultiDimBinning via +MultiDimBinning(**state)

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+property shape
+

shape of binning, akin to nump.ndarray.shape

+
+
Type:
+

tuple

+
+
+
+ +
+
+property size
+

total number of bins

+
+
Type:
+

int

+
+
+
+ +
+
+slice(**kwargs)[source]
+

Slice the binning by dimension name. Any dimension/index not +specified by name in kwargs will default to “:” (all bins).

+

Uses indexer internally to define the indexing tuple.

+
+
Returns:
+

sliced_binning

+
+
Return type:
+

MultiDimBinning

+
+
+
+ +
+
+squeeze()[source]
+

Remove any singleton dimensions (i.e. that have only a single bin). +Analagous to numpy.squeeze.

+
+
Return type:
+

MultiDimBinning with only non-singleton dimensions

+
+
+
+ +
+
+to(*args, **kwargs)[source]
+

Convert the contained dimensions to the passed units. Unspecified +dimensions will be omitted.

+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+
Parameters:
+
    +
  • filename (str) – Filename; must be either a relative or absolute path (not +interpreted as a PISA resource specification)

  • +
  • **kwargs – Further keyword args are sent to pisa.utils.jsons.to_json()

  • +
+
+
+
+

See also

+
+
from_json

Instantiate new object from the file written by this method

+
+
+

pisa.utils.jsons.to_json

+
+
+ +
+
+property tot_num_bins
+

Return total number of bins. +If a bin mask is used, this will only count bins that are not masked off

+
+ +
+
+property units
+

Return a list of the contained dimensions’ units

+
+
Type:
+

list

+
+
+
+ +
+
+weighted_bin_volumes(attach_units=True)[source]
+

Bin “volumes” defined in num_dims-dimensions, but unlike +bin_volumes, the volume is evaluated in the space of the binning. +E.g., logarithmic bins have weighted_bin_volumes of equal size in +log-space.

+
+
Parameters:
+

attach_units (bool) – Whether to attach pint units to the resulting array

+
+
Returns:
+

volumes – Bin volumes

+
+
Return type:
+

array

+
+
+
+ +
+
+property weighted_centers
+

Return a list of the contained dimensions’ weighted_centers (e.g. +equidistant from bin edges on logarithmic scale, if the binning is +logarithmic; otherwise linear). Access midpoints attribute for +always-linear alternative.

+
+ +
+
+zeros(name, map_kw=None, **kwargs)[source]
+

Return a numpy ndarray filled with 0’s with same dimensions as this +binning.

+
+
Parameters:
+
    +
  • name (string) – Name of the map

  • +
  • map_kw (None or dict) – keyword arguments sent to instantiate the new Map (except name +which is specified above)

  • +
  • **kwargs – keyword arguments passed on to numpy.zeros() (except shape which +must be omitted)

  • +
+
+
Returns:
+

map

+
+
Return type:
+

Map

+
+
+
+ +
+ +
+
+class pisa.core.binning.OneDimBinning(name, tex=None, bin_edges=None, units=None, domain=None, num_bins=None, is_lin=None, is_log=None, bin_names=None)[source]
+

Bases: object

+

Histogram-oriented binning specialized to a single dimension.

+

If neither is_lin nor is_log is specified, linear behavior +is assumed (i.e., is_lin is set to True).

+
+
Parameters:
+
    +
  • name (str, of length > 0) – Name for this dimension. Must be valid Python name (since it will be +accessed with the dot operator). If not, name will be converted to a +valid Python name.

  • +
  • tex (str or None) – TeX label for this dimension.

  • +
  • bin_edges (sequence of scalars, or None) – Numerical values (optionally including Pint units) that represent the +edges of the bins. bin_edges needn’t be specified if domain, +num_bins, and optionally is_log is specified. Pint units can be +attached to bin_edges, but will be converted to units if this +argument is specified.

  • +
  • units (Pint unit or object convertible to Pint unit, or None) – If None, units will be read from either bin_edges or domain, and if +none of these have units, the binning has unit ‘dimensionless’ +attached.

  • +
  • is_lin (bool or None) – Binning behavior is linear for purposes of resampling, plotting, etc. +Mutually exclusive with is_log. If neither is_lin or is_log is +True (i.e., both are None), default behavior is linear (is_lin is set +to True internally).

  • +
  • is_log (bool or None) – Binning behavior is logarithmic for purposes of resampling, plotting, +etc. Mutually exclusive with is_lin. If neither is_lin or is_log +is True (i.e., both are None), default behavior is linear (is_lin is +set to True internally).

  • +
  • domain (length-2 sequence of scalars, or None) – Units may be specified. Required along with num_bins if bin_edges +is not specified (optionally specify is_log=True to define the +bin_edges to be log-uniform).

  • +
  • num_bins (int or None) – Number of bins. Required along with domain if bin_edges is not +specified (optionally specify is_log=True to define the bin_edges +to be log-uniform).

  • +
  • bin_names (sequence of nonzero-length strings, or None) – Strings by which each bin can be identified. This is expected to be +useful when one needs to easily identify bins by name where the actual +numerical values can be non-obvious e.g. the PID dimension. +None is also acceptable if there is no reason to name the bins.

  • +
+
+
+

Notes

+

Consistency is enforced for all redundant parameters passed to the +constructor.

+

You can avoid passing bin_edges if num_bins and domain are specified. +Specify is_lin=True or is_log=True to define the binning to be linear +or logarithmic (but note that if neither is specified as True, linear +behavior is the default).

+

Be careful, though, since bin edges will be defined slightly differently +depending on the pisa.FTYPE defined (PISA_FTYPE environment variable).

+

Examples

+
>>> from pisa import ureg
+>>> from pisa.core.binning import OneDimBinning
+>>> ebins = OneDimBinning(name='energy', is_log=True,
+...                       num_bins=40, domain=[1, 100]*ureg.GeV)
+>>> print(ebins)
+OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic))
+>>> ebins2 = ebins.to('joule')
+>>> print(ebins2)
+OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.6021766339999998e-10, 1.602176634e-08] J (behavior is logarithmic))
+>>> czbins = OneDimBinning(name='coszen',
+...                        is_lin=True, num_bins=4, domain=[-1, 0])
+>>> print(czbins)
+OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear))
+>>> czbins2 = OneDimBinning(name='coszen',
+...                         bin_edges=[-1, -0.75, -0.5, -0.25, 0])
+>>> czbins == czbins2
+True
+
+
+
+
+assert_compat(other)[source]
+

Assert that this binning is compatible with other.

+
+ +
+
+property basename
+

Basename of the dimension, stripping “true”, “reco”, underscores, +whitespace, etc. from the name attribute.

+
+ +
+
+property basename_binning
+

Identical binning but named as the basename of this binning. Note +that the tex property is not carried over into the new binning.

+
+ +
+
+property bin_edges
+

Edges of the bins.

+
+
Type:
+

array

+
+
+
+ +
+
+property bin_names
+

Bin names

+
+
Type:
+

list of strings or None

+
+
+
+ +
+
+property bin_widths
+

Absolute widths of bins.

+
+ +
+
+property domain
+

domain of the binning, (min, max) bin edges

+
+
Type:
+

array

+
+
+
+ +
+
+downsample(factor)[source]
+

Downsample the binning by an integer factor that evenly divides the +current number of bins.

+
+
Parameters:
+

factor (int >= 1) – Downsampling factor that evenly divides the current number of +bins. E.g., if the current number of bins is 4, factor can be +one of 1, 2, or 4. Note that floats are converted into integers +if float(factor) == int(factor).

+
+
Returns:
+

new_binning – New binning, downsampled from the current binning.

+
+
Return type:
+

OneDimBinning

+
+
Raises:
+

ValueError if illegal value is specified for factor

+
+
+

Notes

+

Bin names are _not_ preserved for any factor except 1 since it is +ambiguous how names should be propagated. If you wish to have bin +names after downsampling, assign them afterwards.

+
+ +
+
+property edge_magnitudes
+

Bin edges’ magnitudes

+
+ +
+
+property edges_hash
+

Hash value based solely upon bin edges’ values.

+

The hash value is obtained on the edges after “normalizing” their +values if self.normalize_values is True; see +pisa.utils.comparsions.normQuant for details of the normalization +process.

+
+ +
+
+property finite_binning
+

Identical binning but with infinities in bin edges replaced by +largest/smallest floating-point numbers representable with the current +pisa.FTYPE.

+
+ +
+
+classmethod from_json(resource)[source]
+

Instantiate a new object from the contents of a JSON file as +formatted by the to_json method.

+
+
Parameters:
+

resource (str) – A PISA resource specification (see pisa.utils.resources)

+
+
+
+

See also

+

to_json

+
+
+ +
+
+property hash
+

Hash value based upon less-than-double-precision-rounded +numerical values and any other state (includes name, tex, is_log, and +is_lin attributes). Rounding is done to HASH_SIGFIGS significant +figures.

+

Set this class attribute to None to keep full numerical precision in +the values hashed (but be aware that this can cause equal things +defined using different unit orders-of-magnitude to hash differently).

+
+
Type:
+

int

+
+
+
+ +
+
+property hashable_state
+

OrderedDict containing simplified state attributes (i.e. some state +attributes are represented by their hashes) used for testing equality +between two objects.

+

Use hashable_state for faster equality checks and normalized_state +for inspecting the contents of each state attribute pre-hashing

+
+ +
+
+property inbounds_criteria
+

Return string boolean criteria indicating e.g. an event falls within +the limits of the defined binning.

+

This can be used for e.g. applying cuts to events.

+
+

See also

+

pisa.core.events.keepInbounds

+
+
+ +
+
+index(x)[source]
+

Return integer index of bin identified by x.

+
+
Parameters:
+

x (int, string) – If int, ensure it is a valid index and return; if string, look for +bin with corresponding name.

+
+
Returns:
+

idx – index of bin corresponding to x

+
+
Return type:
+

int

+
+
Raises:
+

ValueError if x cannot identify a valid bin

+
+
+
+ +
+
+static is_bin_spacing_lin_uniform(bin_edges)[source]
+

Check if bin_edges define a linearly-uniform bin spacing.

+
+
Parameters:
+

bin_edges (sequence) – Fewer than 2 bin_edges - raises ValueError +Two bin_edges - returns True as a reasonable guess +More than two bin_edges - whether spacing is linear is computed

+
+
Return type:
+

bool

+
+
Raises:
+

ValueError if fewer than 2 bin_edges are specified.

+
+
+
+ +
+
+static is_bin_spacing_log_uniform(bin_edges)[source]
+

Check if bin_edges define a logarithmically-uniform bin spacing.

+
+
Parameters:
+

bin_edges (sequence) –

Fewer than 2 bin_edges - raises ValueError +Two bin_edges - returns False as a reasonable guess (spacing is

+
+

assumed to be linear)

+
+

More than two bin_edges - whether spacing is linear is computed

+

+
+
Return type:
+

bool

+
+
+
+ +
+
+static is_binning_ok(bin_edges)[source]
+

Check that there are 2 or more bin edges, and that they are +monotonically increasing.

+
+
Parameters:
+

bin_edges (sequence) – Bin edges to check the validity of

+
+
Return type:
+

bool, True if binning is OK, False if not

+
+
+
+ +
+
+is_compat(other)[source]
+

Compatibility – for now – is defined by all of self’s bin +edges form a subset of other’s bin edges (i.e. you can downsample to +get from the other binning to this binning), and the units must be +compatible.

+

Note that this might bear revisiting, or redefining just for special +circumstances.

+
+
Parameters:
+

other (OneDimBinning)

+
+
Return type:
+

bool

+
+
+
+ +
+
+property is_irregular
+

True if bin spacing is not unform in the space defined (i.e., +NOT linearly-uniform if is_lin or NOT logarithmically-uniform if +is_log).

+
+
Type:
+

bool

+
+
+
+ +
+
+property is_lin
+

Whether binning is to be treated in a linear space

+
+
Type:
+

bool

+
+
+
+ +
+
+property is_log
+

Whether binning is to be treated in a log space

+
+
Type:
+

bool

+
+
+
+ +
+
+iterbins()[source]
+

Return an iterator over each bin. The elments returned by the +iterator are each a OneDimBinning object, just containing a single bin.

+

Note that for one test, iterbins is about 500x slower than +iteredgetuples.

+
+
Return type:
+

bin_iterator

+
+
+
+

See also

+
+
iteredgetuples

Faster but only returns edges of bins, not OneDimBinning objects.

+
+
+
+
+ +
+
+iteredgetuples()[source]
+

Return an iterator over each bin’s edges. The elments returned by +the iterator are each a tuple, containing the edges of the bin. Units +are stripped prior to iteration for purposes of speed.

+
+
Return type:
+

edges_iterator

+
+
+
+

See also

+
+
iterbins

Similar, but returns a OneDimBinning object for each bin; slower than this method (by as much as 500x in one test) but easier to work with.

+
+
+
+
+ +
+
+ito(units)[source]
+

Convert units in-place. Cf. Pint’s ito method.

+
+ +
+
+property label
+

TeX-formatted axis label, including units (if not dimensionless)

+
+ +
+
+property midpoints
+

linear average of each bin’s +edges.

+
+
Type:
+

array

+
+
Type:
+

Midpoints of the bins

+
+
+
+ +
+
+property name
+

Name of the dimension

+
+ +
+
+property normalize_values
+

Whether to normalize quantities’ units prior to hashing

+
+
Type:
+

bool

+
+
+
+ +
+
+property normalized_state
+

OrderedDict containing normalized (base units, and rounded to +appropriate precision) state attributes used for testing equality +between two objects.

+

Use hashable_state for faster equality checks and normalized_state +for inspecting the contents of each state attribute pre-hashing

+
+ +
+
+property num_bins
+

Number of bins

+
+
Type:
+

int

+
+
+
+ +
+
+oversample(factor)[source]
+

Return a OneDimBinning object oversampled relative to this object’s +binning.

+
+
Parameters:
+

factor (integer) – Factor by which to oversample the binning, with factor-times +as many bins (not bin edges) as this object has.

+
+
Returns:
+

new_binning – New binning, oversampled from the current binning.

+
+
Return type:
+

OneDimBinning

+
+
Raises:
+

ValueError if illegal value is specified for factor

+
+
+

Notes

+

Bin names are _not_ preserved for any factor except 1 since it is +ambiguous how names should be propagated. If you wish to have bin +names after oversampling, assign them afterwards.

+
+ +
+
+property range
+

range of the binning, (max-min) bin edges

+
+
Type:
+

float

+
+
+
+ +
+
+rehash()[source]
+

Force hash and edges_hash attributes to be recomputed

+
+ +
+
+property serializable_state
+

OrderedDict containing savable state attributes

+
+ +
+
+property shape
+

shape of binning, akin to nump.ndarray.shape

+
+
Type:
+

tuple

+
+
+
+ +
+
+property size
+

total number of bins

+
+
Type:
+

int

+
+
+
+ +
+
+property tex
+

TeX label

+
+
Type:
+

string

+
+
+
+ +
+
+to(units)[source]
+

Convert bin edges’ units to units.

+
+
Parameters:
+

units (None, string, or pint.Unit)

+
+
Returns:
+

new_binning – New binning object whose edges have units units

+
+
Return type:
+

OneDimBinning

+
+
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+
Parameters:
+
    +
  • filename (str) – Filename; must be either a relative or absolute path (not +interpreted as a PISA resource specification)

  • +
  • **kwargs – Further keyword args are sent to pisa.utils.jsons.to_json()

  • +
+
+
+
+

See also

+
+
from_json

Instantiate new OneDimBinning object from the file written by this method

+
+
+
+
+ +
+
+property units
+

units of the bins’ edges

+
+
Type:
+

pint.Unit

+
+
+
+ +
+
+property weighted_bin_widths
+

Absolute widths of bins.

+
+ +
+
+property weighted_centers
+

Centers of the bins taking e.g. logarithmic behavior +into account. I.e., if binning is logarithmic, this is not +the same midpoints, whereas in all other cases, it is identical.

+
+
Type:
+

array

+
+
+
+ +
+ +
+
+pisa.core.binning.basename(n)[source]
+

Remove “true” or “reco” prefix(es) and/or suffix(es) from binning +name n along with any number of possible separator characters.

+
    +
  • Valid (pre/suf)fix(es): “true”, “reco”

  • +
  • Valid separator characters: “<whitespace>”, “_”, “-” (any number)

  • +
+
+
Parameters:
+

n (string or OneDimBinning) – Name from which to have pre/suffixes stripped.

+
+
Returns:
+

basename

+
+
Return type:
+

string

+
+
+

Examples

+
>>> print(basename('true_energy'))
+energy
+>>> print(basename('Reconstructed coszen'))
+coszen
+>>> print(basename('coszen  reco'))
+coszen
+>>> print(basename('energy___truth'))
+energy
+>>> print(basename('trueenergy'))
+energy
+>>> print(basename('energytruth'))
+energy
+
+
+
+ +
+
+pisa.core.binning.is_binning(something)[source]
+

Return True if argument is a PISA binning (of any dimension), False +otherwise

+
+ +
+
+pisa.core.binning.test_MultiDimBinning()[source]
+

Unit tests for MultiDimBinning class

+
+ +
+
+pisa.core.binning.test_OneDimBinning()[source]
+

Unit tests for OneDimBinning class

+
+ +
+
+

pisa.core.container module

+

Class to hold generic data in container. +he data can be unbinned or binned or scalar, while +translation methods between such different representations +are provided.

+
+
+class pisa.core.container.Container(name, representation='events')[source]
+

Bases: object

+
+
+property all_keys
+

return all available keys, regardless of representation

+
+ +
+
+array_representations = ('events', 'log_events')
+
+ +
+
+array_to_binned(key, src_representation, dest_representation, averaged=True)[source]
+

Histogram data array into binned data +:param key: +:type key: str +:param src_representation: +:type src_representation: str +:param dest_representation: +:type dest_representation: MultiDimBinning +:param #averaged: +:type #averaged: bool +:param # if True: +:param the histogram entries are averages of the numbers that: +:param # end up in a given bin. This for example must be used when oscillation: +:param # probabilities are translated…..otherwise we end up with probability*count: +:param # per bin:

+

Notes

+

right now, CPU-only

+
+ +
+
+auto_translate(key)[source]
+
+ +
+
+binned_to_array(key, src_representation, dest_representation)[source]
+

Augmented binned data to array data

+
+ +
+
+default_translation_mode = 'average'
+
+ +
+
+find_valid_representation(key)[source]
+

Find valid, and best representation for key

+
+ +
+
+get_hist(key)[source]
+

Return reshaped data as normal n-dimensional histogram

+
+ +
+
+get_map(key, error=None)[source]
+

Return binned data in the form of a PISA map

+
+ +
+
+property is_map
+

Is current representation a map/grid

+
+ +
+
+property keys
+
+ +
+
+mark_changed(key)[source]
+

mark a key as changed and only what is in the current representation is valid

+
+ +
+
+mark_valid(key)[source]
+

validate data as is in current representation, regardless

+
+ +
+
+property num_dims
+
+ +
+
+property representation
+
+ +
+
+property representation_keys
+
+ +
+
+property representations
+
+ +
+
+resample(key, src_representation, dest_representation)[source]
+

Resample a binned key into a different binning +:param key: +:type key: str +:param src_representation: +:type src_representation: MultiDimBinning +:param dest_representation: +:type dest_representation: MultiDimBinning

+
+ +
+
+set_aux_data(key, val)[source]
+

Add any auxillary data, which will not be translated or tied to a specific representation

+
+ +
+
+property shape
+
+ +
+
+property size
+
+ +
+
+translate(key, src_representation)[source]
+

translate variable from source representation

+

key : str +src_representation : representation present in container

+
+ +
+
+translation_modes = ('average', 'sum', None)
+
+ +
+
+static unroll_binning(key, binning)[source]
+

Get an Array containing the unrolled binning

+
+ +
+ +
+
+class pisa.core.container.ContainerSet(name, containers=None, data_specs=None)[source]
+

Bases: object

+

Class to hold a set of container objects

+
+
Parameters:
+
    +
  • name (str)

  • +
  • containers (list or None)

  • +
  • data_specs (MultiDimBinning, "events" or None)

  • +
+
+
+
+
+add_container(container)[source]
+
+ +
+
+get_mapset(key, error=None)[source]
+

For a given key, get a PISA MapSet

+
+
Parameters:
+
    +
  • key (str)

  • +
  • error (None or str) – specify a key that errors are read from

  • +
+
+
Returns:
+

map_set

+
+
Return type:
+

MapSet

+
+
+
+ +
+
+property is_map
+
+ +
+ +

Link containers together. When containers are linked, they are +treated as a single (virtual) container for binned data

+
+
Parameters:
+
    +
  • key (str) – name of linked object

  • +
  • names (list) – name of containers to be linked under the given key

  • +
+
+
+
+ +
+
+property names
+
+ +
+
+property representation
+
+ +
+ +

Unlink all container

+
+ +
+ +
+
+class pisa.core.container.VirtualContainer(name, containers)[source]
+

Bases: object

+

Class providing a virtual container for linked individual containers

+

It should just behave like a normal container

+

For reading, it just uses one container as a representative (no checkng at the mment +if the others actually contain the same data)

+

For writting, it creates one object that is added to all containers

+
+
Parameters:
+
    +
  • name (str)

  • +
  • containers (list)

  • +
+
+
+
+
+mark_changed(key)[source]
+
+ +
+
+mark_valid(key)[source]
+
+ +
+
+property representation
+
+ +
+
+set_aux_data(key, val)[source]
+
+ +
+
+property shape
+
+ +
+
+property size
+
+ +
+ +

Reset flag and copy all accessed keys

+
+ +
+ +
+
+pisa.core.container.test_container()[source]
+

Unit tests for Container class.

+
+ +
+
+pisa.core.container.test_container_set()[source]
+
+ +
+
+

pisa.core.detectors module

+

Detector class definition and a simple script to generate, save, and +plot distributions for different detectors from pipeline config file(s). +A detector is represented by a DistributionMaker.

+

DistributionMaker: A single detector +Detectors: A sequence of detectors

+
+
+class pisa.core.detectors.Detectors(pipelines, label=None, set_livetime_from_data=True, profile=False, shared_params=None)[source]
+

Bases: object

+

Container for one or more distribution makers, that represent different detectors.

+
+
Parameters:
+
    +
  • pipelines (Pipeline or convertible thereto, or iterable thereof) – A new pipline is instantiated with each object passed. Legal objects +are already-instantiated Pipelines and anything interpret-able by the +Pipeline init method.

  • +
  • shared_params (Parameter to be treated the same way in all the) – distribution_makers that contain them.

  • +
+
+
+
+
+property distribution_makers
+
+ +
+
+property empty_bin_indices
+

Find indices where there are no events present

+
+ +
+
+get_outputs(**kwargs)[source]
+

Compute and return the outputs.

+
+
Parameters:
+

**kwargs – Passed on to each distribution_maker’s get_outputs method.

+
+
Return type:
+

List of MapSets if return_sum=True or list of lists of MapSets if return_sum=False

+
+
+
+ +
+
+property hash
+
+ +
+
+init_params()[source]
+

Returns a ParamSet including all params of all detectors. First the shared params +(if there are some), then all the “single detector” params. If two detectors use a +parameter with the same name (but not shared), the name of the detector is added to the +parameter name (except for the first detector).

+
+ +
+
+property num_events_per_bin
+

returns list of arrays of bin indices where none of the +pipelines in the respective distribution maker have MC events

+
+ +
+
+property param_selections
+
+ +
+
+property params
+
+ +
+
+property profile
+
+ +
+
+randomize_free_params(random_state=None)[source]
+
+ +
+
+reset_all()[source]
+

Reset both free and fixed parameters to their nominal values.

+
+ +
+
+reset_free()[source]
+

Reset only free parameters to their nominal values.

+
+ +
+
+run()[source]
+
+ +
+
+select_params(selections, error_on_missing=True)[source]
+
+ +
+
+set_free_params(values)[source]
+

Set free parameters’ values.

+
+
Parameters:
+

values (a list of quantities)

+
+
+
+ +
+
+set_nominal_by_current_values()[source]
+

Define the nominal values as the parameters’ current values.

+
+ +
+
+setup()[source]
+

Setup (reset) all distribution makers

+
+ +
+
+property shared_param_ind_list
+

A list of lists (one for each detector) containing the position of the shared +params in the free params of the DistributionMaker (that belongs to the detector) +together with their position in the shared parameter list.

+
+ +
+
+property source_code_hash
+

Hash for the source code of this object’s class.

+

Not meant to be perfect, but should suffice for tracking provenance of +an object stored to disk that were produced by a Stage.

+
+ +
+
+tabulate(tablefmt='plain')[source]
+
+ +
+
+update_params(params)[source]
+
+ +
+ +
+
+pisa.core.detectors.main(return_outputs=False)[source]
+

Main; call as script with return_outputs=False or interactively with +return_outputs=True

+
+ +
+
+pisa.core.detectors.parse_args()[source]
+

Get command line arguments

+
+ +
+
+pisa.core.detectors.test_Detectors(verbosity=Levels.WARN)[source]
+
+ +
+
+

pisa.core.distribution_maker module

+

DistributionMaker class definition and a simple script to generate, save, and +plot a distribution from pipeline config file(s).

+
+
+class pisa.core.distribution_maker.DistributionMaker(pipelines, label=None, set_livetime_from_data=True, profile=False)[source]
+

Bases: object

+

Container for one or more pipelines; the outputs from all contained +pipelines are added together to create the distribution.

+
+
Parameters:
+
    +
  • pipelines (Pipeline or convertible thereto, or iterable thereof) – A new pipline is instantiated with each object passed. Legal objects +are already-instantiated Pipelines and anything interpret-able by the +Pipeline init method.

  • +
  • label (str or None, optional) – A label for the DistributionMaker.

  • +
  • set_livetime_from_data (bool, optional) – If a (data) pipeline is found with the attr metadata and which has +the contained key “livetime”, this livetime is used to set the livetime +on all pipelines which have param params.livetime. If multiple such +data pipelines are found and set_livetime_from_data is True, all are +checked for consistency (you should use multiple `Detector`s if you +have incompatible data sets).

  • +
  • profile (bool) – timing of inidividual pipelines / stages

  • +
+
+
+

Notes

+

Free params with the same name in two pipelines are updated at the same +time so long as you use the update_params, set_free_params, or +_set_rescaled_free_params methods. Also use select_params to select +params across all pipelines (if a pipeline does not have one or more of +the param selectors specified, those param selectors have no effect in +that pipeline).

+

_*_rescaled_* properties and methods are for interfacing with a +minimizer, where values are linearly mapped onto the interval [0, 1] +according to the parameter’s allowed range. Avoid interfacing with these +except if using a minimizer, since, e.g., units are stripped and values and +intervals are non-physical.

+
+
+add_covariance(covmat)[source]
+

Incorporates covariance between parameters. +This is done by replacing relevant correlated parameters with “DerivedParams”

+
+

that depend on new parameters in an uncorrelated basis

+
+

The parameters are all updated, but this doesn’t add the new parameters in +So we go to the first stage we find that has one of the original parameters and manually add this in

+

See the docstring in “pisa.core.param.ParamSet” for more

+
+ +
+
+property empty_bin_indices
+

Find indices where there are no events present

+
+ +
+
+get_outputs(return_sum=False, sum_map_name='total', sum_map_tex_name='Total', **kwargs)[source]
+

Compute and return the outputs.

+
+
Parameters:
+

return_sum (bool) – If True, add up all Maps in all MapSets returned by all pipelines. +The result will be a single Map contained in a MapSet. +If False, return a list where each element is the full MapSet +returned by each pipeline in the DistributionMaker.

+
+
+
+
**kwargs

Passed on to each pipeline’s get_outputs method.

+
+
+
+
Return type:
+

MapSet if return_sum=True or list of MapSets if return_sum=False

+
+
+
+ +
+
+property hash
+
+ +
+
+property num_events_per_bin
+

returns an array of bin indices where none of the +pipelines have MC events

+

assumes that all pipelines have the same binning output specs

+

number of events is taken out of the last stage of the pipeline

+
+ +
+
+property param_selections
+
+ +
+
+property params
+
+ +
+
+property pipelines: list[Pipeline]
+
+ +
+
+property profile
+
+ +
+
+randomize_free_params(random_state=None)[source]
+
+ +
+
+reset_all()[source]
+

Reset both free and fixed parameters to their nominal values.

+
+ +
+
+reset_free()[source]
+

Reset only free parameters to their nominal values.

+
+ +
+
+run()[source]
+
+ +
+
+select_params(selections, error_on_missing=True)[source]
+
+ +
+
+set_free_params(values)[source]
+

Set free parameters’ values.

+
+
Parameters:
+

values (list of quantities)

+
+
+
+ +
+
+set_nominal_by_current_values()[source]
+

Define the nominal values as the parameters’ current values.

+
+ +
+
+setup()[source]
+

Setup (reset) all pipelines

+
+ +
+
+property source_code_hash
+

Hash for the source code of this object’s class.

+

Not meant to be perfect, but should suffice for tracking provenance of +an object stored to disk that were produced by a Stage.

+
+ +
+
+tabulate(tablefmt='plain')[source]
+
+ +
+
+update_params(params)[source]
+
+ +
+ +
+
+pisa.core.distribution_maker.main(return_outputs=False)[source]
+

Main; call as script with return_outputs=False or interactively with +return_outputs=True

+
+ +
+
+pisa.core.distribution_maker.parse_args()[source]
+

Get command line arguments

+
+ +
+
+pisa.core.distribution_maker.test_DistributionMaker()[source]
+

Unit tests for DistributionMaker

+
+ +
+
+

pisa.core.events module

+

Events class for working with PISA events files and Data class for working +with arbitrary Monte Carlo and datasets

+
+
+class pisa.core.events.Data(val=None, flavint_groups=None, metadata=None)[source]
+

Bases: FlavIntDataGroup

+

Container for storing events, including metadata about the events.

+

Examples

+
+
[(‘cuts’, [‘analysis’]),

(‘detector’, ‘pingu’), +(‘flavints_joined’,

+
+
+
[‘nue_cc+nuebar_cc’,

‘numu_cc+numubar_cc’, +‘nutau_cc+nutaubar_cc’, +‘nuall_nc+nuallbar_nc’]),

+
+
+
+

(‘geom’, ‘v39’), +(‘proc_ver’, ‘5.1’), +(‘runs’, [620, 621, 622])]

+
+
+
+
+applyCut(keep_criteria)[source]
+

Apply a cut by specifying criteria for keeping events. The cut must +be successfully applied to all flav/ints in the events object before +the changes are kept, otherwise the cuts are reverted.

+
+
Parameters:
+

keep_criteria (string) – Any string interpretable as numpy boolean expression.

+
+
Returns:
+

remaining_events – An Events object with the remaining events (deepcopied) and with +updated cut metadata including keep_criteria.

+
+
Return type:
+

Events

+
+
+

Examples

+

Keep events with true energies in [1, 80] GeV (note that units are not +recognized, so have to be handled outside this method)

+
>>> remaining = applyCut("(true_energy >= 1) & (true_energy <= 80)")
+
+
+

Do the opposite with “~” inverting the criteria

+
>>> remaining = applyCut("~((true_energy >= 1) & (true_energy <= 80))")
+
+
+

Numpy namespace is available for use via np prefix

+
>>> remaining = applyCut("np.log10(true_energy) >= 0")
+
+
+
+ +
+
+data_eq(other)[source]
+

Test whether the data for this object matche that of other

+
+ +
+
+digitize(kinds, binning, binning_cols=None)[source]
+

Wrapper for numpy’s digitize function.

+
+ +
+
+property hash
+

Probabilistically unique identifier

+
+ +
+
+histogram(kinds, binning, binning_cols=None, weights_col=None, errors=False, name=None, tex=None, **kwargs)[source]
+

Histogram the events of all kinds specified, with binning and +optionally applying weights.

+
+
Parameters:
+
    +
  • kinds (string, sequence of NuFlavInt, or NuFlavIntGroup)

  • +
  • binning (OneDimBinning, MultiDimBinning or sequence of arrays) – (one array per binning dimension)

  • +
  • binning_cols (string or sequence of strings) – Bin only these dimensions, ignoring other dimensions in binning

  • +
  • weights_col (None or string) – Column to use for weighting the events

  • +
  • errors (bool) – Whether to attach errors to the resulting Map

  • +
  • name (None or string) – Name to give to resulting Map. If None, a default is derived from +kinds and weights_col.

  • +
  • tex (None or string) – TeX label to give to the resulting Map. If None, default is +dereived from the name specified or the derived default.

  • +
  • **kwargs (Keyword args passed to Map object)

  • +
+
+
Returns:
+

Map – argument

+
+
Return type:
+

numpy ndarray with as many dimensions as specified by binning

+
+
+
+ +
+
+histogram_set(binning, nu_weights_col, mu_weights_col, noise_weights_col, mapset_name, errors=False)[source]
+

Uses the above histogram function but returns the set of all of them +for everything in the Data object.

+
+
Parameters:
+
    +
  • binning (OneDimBinning, MultiDimBinning) – The definition of the binning for the histograms.

  • +
  • nu_weights_col (None or string) – The column in the Data object by which to weight the neutrino +histograms. Specify None for unweighted histograms.

  • +
  • mu_weights_col (None or string) – The column in the Data object by which to weight the muon +histograms. Specify None for unweighted histograms.

  • +
  • noise_weights_col (None or string) – The column in the Data object by which to weight the noise +histograms. Specify None for unweighted histograms.

  • +
  • mapset_name (string) – The name by which the resulting MapSet will be identified.

  • +
  • errors (boolean) – A flag for whether to calculate errors on the histograms or not. +This defaults to False.

  • +
+
+
Returns:
+

MapSet – Data object.

+
+
Return type:
+

A MapSet containing all of the Maps for everything in this

+
+
+
+ +
+
+keepInbounds(binning)[source]
+

Cut out any events that fall outside binning. Note that events +that fall exactly on the outer edge are kept.

+
+
Parameters:
+

binning (OneDimBinning or MultiDimBinning)

+
+
+
+ +
+
+meta_eq(other)[source]
+

Test whether the metadata for this object matches that of other

+
+ +
+
+property muons
+

muon data

+
+ +
+
+property names
+

Names of flavints joined

+
+ +
+
+property neutrinos
+

neutrino data

+
+ +
+
+property noise
+
+ +
+
+transform_groups(flavint_groups)[source]
+

Transform Data into a structure given by the input +flavint_groups. Calls the corresponding inherited function.

+
+
Parameters:
+

flavint_groups (string, or sequence of strings or sequence of) – NuFlavIntGroups

+
+
Returns:
+

t_data

+
+
Return type:
+

Data

+
+
+
+ +
+
+update_hash()[source]
+

Update the cached hash value

+
+ +
+ +
+
+class pisa.core.events.Events(val=None)[source]
+

Bases: FlavIntData

+

Container for storing events, including metadata about the events.

+

Examples

+
>>> from pisa.core.binning import OneDimBinning, MultiDimBinning
+
+
+
>>> # Load events from a PISA HDF5 file
+>>> events = Events('events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5')
+
+
+
>>> # Apply a simple cut
+>>> events = events.applyCut('(true_coszen <= 0.5) & (true_energy <= 70)')
+>>> np.max(events[fi]['true_coszen']) <= 0.5
+True
+
+
+
>>> # Apply an "inbounds" cut via a OneDimBinning
+>>> true_e_binning = OneDimBinning(
+...    name='true_energy', num_bins=80, is_log=True,
+...    domain=[10, 60]*ureg.GeV
+... )
+>>> events = events.keepInbounds(true_e_binning)
+>>> np.min(events[fi]['true_energy']) >= 10
+True
+
+
+
>>> print([(k, events.metadata[k]) for k in sorted(events.metadata.keys())])
+[('cuts', ['analysis']),
+  ('detector', 'pingu'),
+  ('flavints_joined',
+     ['nue_cc+nuebar_cc',
+         'numu_cc+numubar_cc',
+         'nutau_cc+nutaubar_cc',
+         'nuall_nc+nuallbar_nc']),
+  ('geom', 'v39'),
+  ('proc_ver', '5.1'),
+  ('runs', [620, 621, 622])]
+
+
+
+
+applyCut(keep_criteria)[source]
+

Apply a cut by specifying criteria for keeping events. The cut must +be successfully applied to all flav/ints in the events object before +the changes are kept, otherwise the cuts are reverted.

+
+
Parameters:
+

keep_criteria (string) – Any string interpretable as numpy boolean expression.

+
+
+

Examples

+

Keep events with true energies in [1, 80] GeV (note that units are not +recognized, so have to be handled outside this method)

+
>>> events = events.applyCut("(true_energy >= 1) & (true_energy <= 80)")
+
+
+

Do the opposite with “~” inverting the criteria

+
>>> events = events.applyCut("~((true_energy >= 1) & (true_energy <= 80))")
+
+
+

Numpy namespace is available for use via np prefix

+
>>> events = events.applyCut("np.log10(true_energy) >= 0")
+
+
+
+ +
+
+data_eq(other)[source]
+

Test whether the data for this object matches that of other

+
+ +
+
+property flavint_groups
+

All flavor/interaction type groups (even singletons) present

+
+ +
+
+property flavints_present
+

Returns a tuple of the flavints that are present in the events

+
+ +
+
+property hash
+

Hash value

+
+ +
+
+histogram(kinds, binning, binning_cols=None, weights_col=None, errors=False, name=None, tex=None)[source]
+

Histogram the events of all kinds specified, with binning and +optionally applying weights.

+
+
Parameters:
+
    +
  • kinds (string, sequence of NuFlavInt, or NuFlavIntGroup)

  • +
  • binning (OneDimBinning, MultiDimBinning or sequence of arrays (one array per binning dimension))

  • +
  • binning_cols (string or sequence of strings) – Bin only these dimensions, ignoring other dimensions in binning

  • +
  • weights_col (None or string) – Column to use for weighting the events

  • +
  • errors (bool) – Whether to attach errors to the resulting Map

  • +
  • name (None or string) – Name to give to resulting Map. If None, a default is derived from +kinds and weights_col.

  • +
  • tex (None or string) – TeX label to give to the resulting Map. If None, default is +dereived from the name specified (or its value derived from +kinds and weights_col).

  • +
+
+
Returns:
+

Map – argument

+
+
Return type:
+

numpy ndarray with as many dimensions as specified by binning

+
+
+
+ +
+
+property joined_string
+

Concise string identifying _only_ joined flavints

+
+ +
+
+keepInbounds(binning)[source]
+

Cut out any events that fall outside binning. Note that events +that fall exactly on an outer edge are kept.

+
+
Parameters:
+

binning (OneDimBinning or MultiDimBinning)

+
+
Returns:
+

remaining_events

+
+
Return type:
+

Events

+
+
+
+ +
+
+meta_eq(other)[source]
+

Test whether the metadata for this object matches that of other

+
+ +
+
+save(fname, **kwargs)[source]
+

Save data structure to a file; see fileio.to_file for details

+
+ +
+
+update_hash()[source]
+

Update the cached hash value

+
+ +
+ +
+
+pisa.core.events.test_Events()[source]
+

Unit tests for Events class

+
+ +
+
+

pisa.core.events_pi module

+

PISA data container

+
+
+class pisa.core.events_pi.EventsPi(*args, name=None, neutrinos=True, fraction_events_to_keep=None, events_subsample_index=0, **kwargs)[source]
+

Bases: OrderedDict

+

Container for events for use with PISA pi

+
+
Parameters:
+
    +
  • name (string, optional) – Name to identify events

  • +
  • neutrinos (bool, optional) – Flag indicating if events represent neutrinos; toggles special +behavior such as splitting into nu/nubar and CC/NC. Default is True.

  • +
  • fraction_events_to_keep (float) – Fraction of loaded events to use (use to downsample). +Must be in range [0.,1.], or disable by setting to None. +Default in None.

  • +
  • *args – Passed on to __init__ method of OrderedDict

  • +
  • **kwargs – Passed on to __init__ method of OrderedDict

  • +
+
+
+
+
+apply_cut(keep_criteria)[source]
+

Apply a cut by specifying criteria for keeping events. The cut must +be successfully applied to all flav/ints in the events object before +the changes are kept, otherwise the cuts are reverted.

+
+
Parameters:
+

keep_criteria (string) – Any string interpretable as numpy boolean expression.

+
+
+

Examples

+

Keep events with true energies in [1, 80] GeV (note that units are not +recognized, so have to be handled outside this method)

+
>>> events = events.apply_cut("(true_energy >= 1) & (true_energy <= 80)")
+
+
+

Do the opposite with “~” inverting the criteria

+
>>> events = events.apply_cut("~((true_energy >= 1) & (true_energy <= 80))")
+
+
+

Numpy namespace is available for use via np prefix

+
>>> events = events.apply_cut("np.log10(true_energy) >= 0")
+
+
+
+ +
+
+keep_inbounds(binning)[source]
+

Cut out any events that fall outside binning. Note that events +that fall exactly on an outer edge are kept.

+
+
Parameters:
+

binning (OneDimBinning or MultiDimBinning)

+
+
Returns:
+

cut_data

+
+
Return type:
+

EventsPi

+
+
+
+ +
+
+load_events_file(events_file, variable_mapping=None, required_metadata=None, seed=123456)[source]
+

Fill this events container from an input HDF5 file filled with event +data Optionally can provide a variable mapping so select a subset of +variables, rename them, etc.

+
+
Parameters:
+
    +
  • events_file (string or mapping) – If string, interpret as a path and load file at that path; the +loaded object should be a mapping. If already a mapping, take and +interpret events from that.

  • +
  • variable_mapping (mapping, optional) – If specified, should be a mapping where the keys are the +destination variable names and the items are either the source +variable names or an iterable of source variables names. In the +latter case, each of the specified source variables will become a +column vector in the destination array.

  • +
  • required_metadata (None, or list of str) – Can optionally specify metadata keys to parse from the input file metdata. +ONLY metadata specified here will be parsed. +Anything specified here MUST exist in the files.

  • +
+
+
+
+ +
+ +
+
+pisa.core.events_pi.fix_oppo_flux(input_data)[source]
+

Fix this oppo flux insanity +someone added this in the nominal flux calculation that +oppo flux is nue flux if flavour is nuebar, and vice versa +here we revert that, incase these oppo keys are there

+
+ +
+
+pisa.core.events_pi.main()[source]
+

Load an events file and print the contents

+
+ +
+
+pisa.core.events_pi.split_nu_events_by_flavor_and_interaction(input_data)[source]
+

Split neutrino events by nu vs nubar, and CC vs NC.

+

Should be compatible with DRAGON and GRECO samples, but this depends on the +contents of the original I3 files and whatever conversion script was used +to produce the HDF5 files from these.

+
+
Parameters:
+

input_data (mapping)

+
+
Returns:
+

output_data

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+

pisa.core.map module

+

Map class to contain 2D histogram, error, and metadata about the contents. +MapSet class to contain a set of maps.

+

Also provide basic mathematical operations that user applies directly to the +containers but that get passed down to operate on the contained data.

+
+
+class pisa.core.map.Map(name, hist, binning, error_hist=None, hash=None, tex=None, full_comparison=False)[source]
+

Bases: object

+

Class to contain a multi-dimensional histogram, error, and metadata +about the histogram. Also provides basic mathematical operations for the +contained data. See Examples below for how to use a Map object.

+
+
Parameters:
+
    +
  • name (string) – Name for the map. Used to identify the map.

  • +
  • hist (numpy.ndarray (incl. obj array from uncertainties.unumpy.uarray)) – The “data” (counts, etc.) in the map. The shape of hist must be +compatible with the binning specified.

  • +
  • binning (MultiDimBinning) – Describes the binning of the Map.

  • +
  • error_hist (numpy ndarray) – Must be same shape as hist. If specified, sets the error standard +deviations for the contained hist, replacing any stddev information +that might be contained in the passed hist arg.

  • +
  • hash (None, or immutable object (typically an integer)) – Hash value to attach to the map.

  • +
  • tex (None or string) – TeX string that can be used for e.g. plotting.

  • +
  • full_comparison (bool) – Whether to perform full (recursive) comparisons when testing the +equality of this map with another. See __eq__ method.

  • +
+
+
+

Examples

+
>>> from pisa.core.binning import MultiDimBinning
+>>> binning = MultiDimBinning([dict(name='energy', is_log=True, num_bins=4,
+...                                 domain=[1, 80], units='GeV'),
+...                            dict(name='coszen', is_lin=True, num_bins=5,
+...                                 domain=[-1, 0])])
+>>> m0 = Map(name='x', binning=binning, hist=np.zeros(binning.shape))
+>>> m0
+array([[ 0.,  0.,  0.,  0.,  0.],
+       [ 0.,  0.,  0.,  0.,  0.],
+       [ 0.,  0.,  0.,  0.,  0.],
+       [ 0.,  0.,  0.,  0.,  0.]])
+>>> m0.binning
+energy: 4 logarithmically-uniform bins spanning [1.0, 80.0] GeV
+coszen: 5 equally-sized bins spanning [-1.0, 0.0]
+>>> m0.hist[0:4, 0] = 1
+>>> m0
+array([[ 1.,  0.,  0.,  0.,  0.],
+       [ 1.,  0.,  0.,  0.,  0.],
+       [ 1.,  0.,  0.,  0.,  0.],
+       [ 1.,  0.,  0.,  0.,  0.]])
+>>> m1 = m0[0:3, 0:2]
+>>> m1.binning
+energy: 3 logarithmically-uniform bins spanning [1.0, 26.7496121991]
+coszen: 2 equally-sized bins spanning [-1.0, -0.6]
+>>> m1
+array([[ 1.,  0.],
+       [ 1.,  0.],
+       [ 1.,  0.]])
+>>> for bin in m1.iterbins():
+...     print('({0:~.2f}, {1:~.2f}): {2:0.1f}'.format(
+...             bin.binning.energy.midpoints[0],
+...             bin.binning.coszen.midpoints[0],
+...             bin.hist[0, 0]))
+(2.00 GeV, -0.90 ): 1.0
+(2.00 GeV, -0.70 ): 0.0
+(5.97 GeV, -0.90 ): 1.0
+(5.97 GeV, -0.70 ): 0.0
+(17.85 GeV, -0.90 ): 1.0
+(17.85 GeV, -0.70 ): 0.0
+
+
+
+
+allclose(other)[source]
+

Check if this map and another have the same (within machine precision) bin counts

+
+ +
+
+assert_compat(other)[source]
+
+ +
+
+barlow_llh(expected_values, binned=False)[source]
+

Calculate the total barlow log-likelihood value between this map and +the map described by expected_values; self is taken to be the “actual +values” (or (pseudo)data), and expected_values are the expectation +values for each bin. I assumes at the moment some things that are not +true, namely that the weights are uniform

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_barlow_llh

+
+
Return type:
+

float or binned_barlow_llh if binned=True

+
+
+
+ +
+
+property binning
+

Map’s binning

+
+
Type:
+

pisa.core.binning.MultiDimBinning

+
+
+
+ +
+
+chi2(expected_values, binned=False)[source]
+

Calculate the total chi-squared value between this map and the map +described by expected_values; self is taken to be the “actual values” +(or (pseudo)data), and expected_values are the expectation values for +each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_chi2

+
+
Return type:
+

float or binned_chi2 if binned=True

+
+
+
+ +
+
+compare(ref)[source]
+

Compare this map with another, where the other map is taken to be +the “reference” against which this is compared.

+
+
Parameters:
+

ref (Map) – Map against with to compare this one. ref is taken as reference. +Each dimension in `ref.binning must have the same name and +bin edges as this map, but the order of the dimensions does not +matter.

+
+
Returns:
+

comparisons

+
    +
  • ‘diff’ : Map, self - ref

  • +
  • ’fract’ : Map, self / ref

  • +
  • ’fractdiff’ : Map, (self - ref) / ref

  • +
  • ’max_abs_diff’ : float, max(abs(diff))

  • +
  • ’max_abs_fractdiff’ : float, max(abs(fractdiff))

  • +
  • ’nanmatch’ : bool, whether nan elements match

  • +
  • ’infmatch’ : bool, whether +inf (and separately -inf) entries match

  • +
+

+
+
Return type:
+

OrderedDict containing the following key/value pairs:

+
+
+
+ +
+
+conv_llh(expected_values, binned=False)[source]
+

Calculate the total convoluted log-likelihood value between this map +and the map described by expected_values; self is taken to be the +“actual values” (or (pseudo)data), and expected_values are the +expectation values for each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_conv_llh

+
+
Return type:
+

float or binned_conv_llh if binned=True

+
+
+
+ +
+
+correct_chi2(expected_values, binned=False)[source]
+

Calculate the total correct chi2 value between this map and the map +described by expected_values; self is taken to be the “actual values” +(or (pseudo)data), and expected_values are the expectation values for +each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this.)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_correct_chi2

+
+
Return type:
+

float or binned_correct_chi2 if binned=True

+
+
+
+ +
+
+downsample(*args, **kwargs)[source]
+

Downsample by integer factor(s), summing together merged bins’ +values.

+

See pisa.utils.binning.MultiDimBinning.downsample for args/kwargs +details.

+
+ +
+
+fluctuate(method, random_state=None, jumpahead=None)[source]
+

Apply fluctuations to the map’s values.

+
+
Parameters:
+
    +
  • method (None or string) – Valid strings are ‘’, ‘none’, ‘poisson’, ‘scaled_poisson’, ‘gauss’, or +‘gauss+poisson’. Strings are case-insensitive and whitespace is +removed. +The ‘scaled_poisson’ method implements a Scaled Poisson Process, which is +a better approximation than a normal distribution to the true distribution +of bin counts that are the result of a Poisson process with weighted events[1]. +The fluctuated maps are guaranteed to have the same mean and standard +deviation as the original map.

  • +
  • random_state (None or type accepted by utils.random_numbers.get_random_state)

  • +
+
+
Returns:
+

fluctuated_map – New map with entries fluctuated as compared to this map

+
+
Return type:
+

Map

+
+
+

References

+ +
+ +
+
+classmethod from_json(resource)[source]
+

Instantiate a new Map object from a JSON file.

+

The format of the JSON is generated by the Map.to_json method, which +converts a Map object to basic types and then numpy arrays are +converted in a call to pisa.utils.jsons.to_json.

+
+
Parameters:
+

resource (str) – A PISA resource specification (see pisa.utils.resources)

+
+
+ +
+ +
+
+property full_comparison
+

Compare element-by-element instead of just comparing hashes.

+
+ +
+
+generalized_poisson_llh(expected_values=None, empty_bins=None, binned=False)[source]
+

compute the likelihood of this map’s count to originate from

+

Note that unlike the other likelihood functions, expected_values +is expected to be a ditribution maker

+
+

inputs:

+
+

expected_values: OrderedDict of MapSets

+

empty_bins: None, list or np.ndarray (list the bin indices that are empty)

+

binned: bool (return the bin-by-bin llh or the sum over all bins)

+
+
+
+ +
+
+property hash
+

Hash value

+
+
Type:
+

int or None

+
+
+
+ +
+
+property hashable_state
+
+ +
+
+property hist
+

Histogram array underlying the Map

+
+
Type:
+

numpy.ndarray

+
+
+
+ +
+
+item(*args)[source]
+

Call item(*args) method on the contained hist, returning a +single Python scalar corresponding to *args. See help for +:method:`numpy.ndarray.item` for more info.

+

Note that this method is called by :method:`numpy.asscalar`.

+
+
Parameters:
+

*args – Passed to :method:`numpy.ndarray.item`

+
+
Returns:
+

z

+
+
Return type:
+

Standard Python scalar object

+
+
+
+ +
+
+iterbins()[source]
+

Returns a bin iterator which yields a map containing a single bin +each time. Note that modifications to that single-bin map will be +reflected in this (the parent) map.

+

Note that the returned map has the attribute parent_indexer for +indexing directly into to the parent map (or to a similar map).

+
+
Yields:
+

Map object containing one of each bin of this Map

+
+
+
+ +
+
+itercoords()[source]
+

Iterator that yields the coordinate of each bin in the map.

+
+ +
+
+llh(expected_values, binned=False)[source]
+

Calculate the total log-likelihood value between this map and the +map described by expected_values; self is taken to be the “actual +values” (or (pseudo)data), and expected_values are the expectation +values for each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_llh

+
+
Return type:
+

float or binned_llh if binned=True

+
+
+
+ +
+
+log()[source]
+

Take natural logarithm of map’s values, returning a new map.

+
+
Returns:
+

log_map

+
+
Return type:
+

Map

+
+
+
+ +
+
+log10()[source]
+

Take base-10 logarithm of map’s values, returning a new map.

+
+
Returns:
+

log10_map

+
+
Return type:
+

Map

+
+
+
+ +
+
+mcllh_eff(expected_values, binned=False)[source]
+

Calculate the total LEff log-likelihood value between this map and the +map described by expected_values; self is taken to be the “actual +values” (or (pseudo)data), and expected_values are the expectation +values for each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_llh

+
+
Return type:
+

float or binned_llh if binned=True

+
+
+
+ +
+
+mcllh_mean(expected_values, binned=False)[source]
+

Calculate the total LMean log-likelihood value between this map and the +map described by expected_values; self is taken to be the “actual +values” (or (pseudo)data), and expected_values are the expectation +values for each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_llh

+
+
Return type:
+

float or binned_llh if binned=True

+
+
+
+ +
+
+metric_total(expected_values, metric, metric_kwargs=None)[source]
+

Compute the optimization metric on the bins of a Map

+
+

Inputs

+

expected_values: Map (the data/pseudo-data binned counts)

+

metric: str (name of the optimization metric)

+
+
metric_kwargs: None or Dict (special arguments to pass to

a special metric - right now just +useful for generalized_poisson_llh)

+
+
+
+
+

Returns:

+

float (sum of the metric over all bins of expected_values)

+
+
+ +
+
+mod_chi2(expected_values, binned=False)[source]
+

Calculate the total modified chi2 value between this map and the map +described by expected_values; self is taken to be the “actual values” +(or (pseudo)data), and expected_values are the expectation values for +each bin.

+
+
Parameters:
+
    +
  • expected_values (numpy.ndarray or Map of same dimension as this.)

  • +
  • binned (bool)

  • +
+
+
Returns:
+

total_mod_chi2

+
+
Return type:
+

float or binned_mod_chi2 if binned=True

+
+
+
+ +
+
+property name
+

Map’s name

+
+
Type:
+

string

+
+
+
+ +
+
+property nominal_values
+

Bin values stripped of uncertainties

+
+
Type:
+

numpy.ndarray

+
+
+
+ +
+
+property normalize_values
+
+ +
+
+property num_entries
+

total number of weighted entries in all bins

+
+
Type:
+

int

+
+
+
+ +
+
+plot(symm=False, logz=False, vmin=None, vmax=None, backend=None, ax=None, title=None, cmap=None, clabel=None, clabelsize=None, xlabelsize=None, ylabelsize=None, titlesize=None, fig_kw=None, pcolormesh_kw=None, colorbar_kw=None, outdir=None, fname=None, fmt=None, binlabel_format=None, binlabel_colors=['white', 'black'], binlabel_color_thresh=None, binlabel_stripzeros=True, dpi=300, bad_color=None)[source]
+

Plot a 2D map.

+
+
Parameters:
+
    +
  • symm (bool, optional) – Plot with symmetric (about 0) value-range limits.

  • +
  • logz (bool, optional) – Plot logarithmic value-range

  • +
  • vmin (float, optional) – Minimum and maximum values for the value-range of the plot. If None +specified, these are set according to symm and/or the values of +the hist in this Map.

  • +
  • vmax (float, optional) – Minimum and maximum values for the value-range of the plot. If None +specified, these are set according to symm and/or the values of +the hist in this Map.

  • +
  • backend (string, optional) – Matplotlib backend to use (only takes effect if matplotlib is first +imported by this function).

  • +
  • ax (matplotlib.axis.Axis, optional) – Provide an axis onto which the plot is drawn; if None is specified, +a new figure and axis are created.

  • +
  • title (string, optional) – Set the title to this value; if None is specified, the title is +taken from the name of this Map.

  • +
  • cmap (string or matplotlib.colors.Colormap, optional)

  • +
  • clabel (string, optional) – Label to place on the colorbar

  • +
  • clabelsize (float, optional) – Size of the colorbar, x-axis label, y-axis label, and title text

  • +
  • xlabelsize (float, optional) – Size of the colorbar, x-axis label, y-axis label, and title text

  • +
  • ylabelsize (float, optional) – Size of the colorbar, x-axis label, y-axis label, and title text

  • +
  • titlesize (float, optional) – Size of the colorbar, x-axis label, y-axis label, and title text

  • +
  • fig_kw (mapping, optional) – Keyword arguments passed to call to matplotlib.pyplot.figure; +this is only done, however, if ax is None and so a new figure +needs to be created.

  • +
  • pcolormesh_kw (mapping, optional) – Keyword arguments to pass to call to matplotlib.pyplot.pcolormesh +(if Map is two or more dimensions).

  • +
  • colorbar_kw (mapping, optional) – Keyword arguments to pass to call to matplotlib.colorbar.

  • +
  • fmt (string in ('pdf', 'png') or iterable thereof, optional) – File format(s) in which to save the file. If None, then the plot +will not be saved.

  • +
  • outdir (string, optional) – Directory into which to save the plot. If None is provided, the the +default is the current directory. Note that if fmt is None, then +this argument is irrelevant.

  • +
  • fname (string, optional) – Custom filename to set for saved figure. If not provided, a name +is derived from the name attribute of the Map. Note that if +fmt is None, then this argument is irrelevant.

  • +
  • binlabel_format (str, optional) – Format string to label the content in each bin. If None (default), the bins +will not be labeled. Bin labels are generated by calling .format(zi) on +the given string, where zi is the z-value of bin i.

  • +
  • binlabel_stripzeros (bool, optional) – Strip zeros from bin labels. Default: True

  • +
  • binlabel_colors (str or list of str, optional) – Colors to be used below (index 0) and above (index 1) the +binlabel_color_thresh value. Default: “white” below and “black” above +threshold. If only one str is given, all labels will have that color.

  • +
  • binlabel_color_thresh (float or str, optional) – Threshold at which to switch color of the bin labels for better contrast. If +None (default), all labels will use the last color given in +binlabel_colors. If a float is given, bins with a value below the given +number use the first color in binlabel_colors and bins with a value above +the given number use the second color in binlabel_colors. If “auto”, set +threshold automatically (basically half way).

  • +
  • dpi (int, optional) – Dots per inch for saved figure. Default: 300

  • +
  • bad_color (string, optional) – Can choose the color used for “bad” bins (e.g. NaN)

  • +
+
+
Returns:
+

    +
  • fig (matplotlib.figure.Figure object)

  • +
  • ax (matplotlib.axes.Axes object)

  • +
  • pcmesh (matplotlib.collections.QuadMesh)

  • +
  • colorbar (matplotlib.colorbar.Colorbar)

  • +
+

+
+
+
+ +
+
+project(axis, keepdims=False)[source]
+

Project all dimensions onto a single axis.

+
+
Parameters:
+
    +
  • axis (string or int) – Dimensions to be projected onto.

  • +
  • keepdims (bool) – If True, marginalizes out (removes) the _un_specified dimensions. +If False, the binning in the summed dimension(s) includes +the full range of the binning for each dimension in the original +Map. Note that if you want to remove all _singleton_ dimensions +(which could include the axis specified here), call the +squeeze method on the result of project.

  • +
+
+
Returns:
+

projection

+
+
Return type:
+

Map

+
+
+
+ +
+
+rebin(new_binning)[source]
+

Rebin the map with bin edge locations and names according to those +specified in new_binning.

+

Calls the rebin function in the pisa.core.map.rebin module to do the +actual work.

+
+
Parameters:
+

new_binning (MultiDimBinning) – Dimensions specified in new_binning must match (modulo +pre/suffixes) the current dimensions.

+
+
Return type:
+

Map binned according to new_binning.

+
+
+
+

See also

+
+
None

function called to do the work

+
+
+
+
+ +
+
+reorder_dimensions(order)[source]
+

Rearrange the dimensions in the map. This affects both the binning +and the contained histogram.

+
+
Parameters:
+

order (MultiDimBinning or sequence of str, int, or OneDimBinning) – Ordering desired for the dimensions of this map. See +binning.reorder_dimensions for details on how to specify order.

+
+
Returns:
+

Map

+
+
Return type:
+

copy of this map but with dimensions reordered

+
+
+
+

See also

+
+
rebin

Modify Map (and its binning) by splitting or combining adjacent bins

+
+
downsample

Modify Map (and its binning) by combining adjacent bins

+
+
+
+
+ +
+
+round2int()[source]
+
+ +
+
+property serializable_state
+
+ +
+
+set_errors(error_hist)[source]
+

Manually define the error with an array the same shape as the +contained histogram. Can also remove errors by passing None.

+
+
Parameters:
+

error_hist (None or ndarray (same shape as hist)) – Standard deviations to apply to self.hist. +If None is passed, any errors present are removed, making +self.hist a bare numpy array.

+
+
+
+ +
+
+set_poisson_errors()[source]
+

Approximate poisson errors using sqrt(n).

+
+ +
+
+property shape
+

shape of the map, akin to nump.ndarray.shape

+
+
Type:
+

tuple

+
+
+
+ +
+
+signed_sqrt_mod_chi2(expected_values)[source]
+

Calculate the binwise (signed) square-root of the modified chi2 value +between this map and the map described by expected_values; self is +taken to be the “actual values” (or (pseudo)data), and expected_values +are the expectation values for each bin.

+
+
Parameters:
+

expected_values (numpy.ndarray or Map of same dimension as this.)

+
+
Returns:
+

m_pulls

+
+
Return type:
+

signed_sqrt_mod_chi2

+
+
+
+ +
+
+property size
+

total number of elements

+
+
Type:
+

int

+
+
+
+ +
+
+slice(**kwargs)[source]
+

Slice the map, where each argument is the name of a dimension. +Dimensions not named are included in full (i.e., via np.slice(None)).

+

Note that the resulting map maintains the same number of dimensions as +its parent, including the ordering of the dimensions. The size of each +dimension, however, is reduced by slicing.

+

Note also that modifications to the returned object’s hist will +modify the parent’s hist.

+

Examples

+

Indexing can be done as in the following examples:

+
>>> mdb = MultiDimBinning([
+...     dict(name='x', domain=[0,1], is_lin=True, num_bins=5),
+...     dict(name='y', domain=[1,2], is_lin=True, num_bins=10)
+... ])
+>>> ones = mdb.ones(name='ones')
+>>> print(ones.slice(x=0,))
+Map(name='ones',
+        tex='{\rm ones}',
+        full_comparison=False,
+        hash=None,
+        parent_indexer=(0, slice(None, None, None)),
+        binning=MultiDimBinning([
+                    OneDimBinning(name=OneDimBinning('x', 1 bin with edges at [0.0, 0.2] (behavior is linear))),
+                    OneDimBinning(name=OneDimBinning('y', 10 equally-sized bins spanning [1.0, 2.0]))]),
+        hist=array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]]))
+>>> print(ones.slice(x=0, y=slice(None)).hist)
+[[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]]
+>>> print(ones.slice(x=0, y=0).hist)
+[[ 1.]]
+
+
+

Modifications to the slice modifies the original:

+
>>> mdb = MultiDimBinning([
+...     dict(name='x', domain=[0,1], is_lin=True, num_bins=5),
+...     dict(name='y', domain=[1,2], is_lin=True, num_bins=10)
+... ])
+>>> ones = mdb.ones(name='ones')
+>>> sl = ones.slice(x=2)
+>>> sl.hist[...] = 0
+>>> print(sl.hist)
+>>> print(ones.hist)
+[[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
+ [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
+ [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
+ [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
+ [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]]
+
+
+
+

See also

+
+
pisa.core.binning.MultiDimBinning.indexer

Method used to generate a raw indexer (that can be used to index into a map or a Numpy array of same dimensionality). This method is accessible from a Map map_x object via its binning attribute: map_x.binning.indexer(…)

+
+
pisa.core.binning.MultiDimBinning.broadcast

Broadcast a 1D Numpy array to dimensionality with reference to this object’s dimensionality.

+
+
+
+
+ +
+
+split(dim, bin=None, use_basenames=False)[source]
+

Split this map into one or more maps by selecting the dim +dimension and optionally the specific bin(s) within that dimension +specified by bin.

+

If both dim and bin are specified and this identifies a single bin, +a single Map is returned, while if this locates multiple bins, a MapSet +is returned where each map corresponds to a bin (in the order dictated +by the bin specification).

+

If only dim is specified, _regardless_ if multiple bins meet the +(dim, bin) criteria, the maps corresponding to each bin are collected +into a MapSet and returned.

+

Resulting maps are ordered according to the binning and are renamed as:

+
+

new_map[j].name = orig_map.name__dim.binning.bin_names[i]

+
+

if the current map has a name, or

+
+

new_map[j].name = dim.binning.bin_names[i]

+
+

if the current map has a zero-length name.

+

In the above, j is the index into the new MapSet and i is the index to +the bin in the original binning spec. map.name is the current +(pre-split) map’s name, and if the bins do not have names, then the +stringified integer index to the bin, str(i), is used instead.

+
+
Parameters:
+
    +
  • dim (string, int) – Name or index of a dimension in the map

  • +
  • bin (None or bin indexing object (str, int, slice, ellipsis)) – Optionally specify specific bin(s) to split out from the chosen +dimension.

  • +
+
+
Returns:
+

split_maps – If only dim is passed, returns MapSet regardless of how many maps +are found. If both dim and bin are specified and this results +in selecting more than one bin, also returns a MapSet. However if +both dim and bin are specified and this selects a single bin, +just the indexed Map is returned. Naming of the maps and MapSet is +updated to reflect what the map represents, while the hash value is +copied into the new map(s).

+
+
Return type:
+

Map or MapSet

+
+
+
+ +
+
+sqrt()[source]
+

Take square root of map’s values, returning a new map.

+
+
Returns:
+

sqrt_map

+
+
Return type:
+

Map

+
+
+
+ +
+
+squeeze()[source]
+

Remove any singleton dimensions (i.e. that have only a single bin). +Analagous to numpy.squeeze.

+
+
Return type:
+

Map with equivalent values but singleton dimensions removed

+
+
+
+ +
+
+property std_devs
+

Uncertainties (standard deviations) per bin

+
+
Type:
+

numpy.ndarray

+
+
+
+ +
+
+sum(axis=None, keepdims=False)[source]
+

Sum over dimensions corresponding to axis specification. Similar +in behavior to numpy.sum method.

+
+
Parameters:
+
    +
  • axis (None; or str, int, or sequence thereof) – Dimension(s) to be summed over. If None, sum over _all_ dimensions.

  • +
  • keepdims (bool) – If True, marginalizes out (removes) the specified dimensions. If +False, the binning in the summed dimension(s) is expanded to the +full range of the binning for each dimension over which the sum is +performed.

  • +
+
+
Returns:
+

s – If all contained dimensiosn are summed over and keepdims is +False, a scalar is returned. Otherwise, a Map is returned with +dimensions marginalized out in the sum removed if keepdims is +False.

+
+
Return type:
+

Map or scalar

+
+
+
+ +
+
+property tex
+

TeX label

+
+
Type:
+

string

+
+
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+
Parameters:
+
    +
  • filename (str) – Filename; must be either a relative or absolute path (not +interpreted as a PISA resource specification)

  • +
  • **kwargs – Further keyword args are sent to pisa.utils.jsons.to_json()

  • +
+
+
+
+

See also

+
+
from_json

Intantiate new object from the file written by this method

+
+
+

pisa.utils.jsons.to_json

+
+
+ +
+ +
+
+class pisa.core.map.MapSet(maps, name=None, tex=None, hash=None, collate_by_name=True)[source]
+

Bases: object

+

Ordered set of event rate maps (aka histograms) defined over an arbitrary +regluar hyper-rectangular binning.

+
+
Parameters:
+
    +
  • maps (Map or sequence of Map)

  • +
  • name (string)

  • +
  • tex (string)

  • +
  • hash (immutable)

  • +
  • collate_by_name (bool) –

    If True, when this MapSet is passed alongside another MapSet to a +function that operates on the maps, contained maps in each will be +accessed by name. Hence, only maps with the same names will be operated +on simultaneously.

    +

    If false, the contained maps in each MapSet will be accessed by their +order in each MapSet. This behavior is useful if maps are renamed +through some operation but their order is maintained, and then +comparisons are sought with their progenitors with the original +(different) name.

    +

  • +
+
+
+
+
+allclose(other)[source]
+

Check if this mapset and another have the same (within machine precision) bin counts

+
+ +
+
+apply_to_maps(attr, *args, **kwargs)[source]
+
+ +
+
+chi2_per_map(expected_values)[source]
+
+ +
+
+chi2_total(expected_values)[source]
+
+ +
+
+collate_with_names(vals)[source]
+
+ +
+
+combine_re(regexes)[source]
+

For each regex passed, add together contained maps whose names +match.

+

If a string or regex is passed, the corresponding maps are combined and +returned as a Map object. If an iterable of one or more regexes is +passed, each grouping found is combined into a Map separately and the +resulting Maps are populated into a new MapSet to be returned.

+
+
Parameters:
+

regexes (compiled regex, str representing a regex, or iterable thereof) – See Python module re for formatting.

+
+
Returns:
+

Map if regexes is a string or regex; MapSet if regexes is an +iterable of one or more strings or regexes

+
+
Return type:
+

combined

+
+
Raises:
+

ValueError – If any regexes fail to match any map names.

+
+
+

Notes

+

If special characters are used in the regex, like a backslash, be sure +to use a Python raw string (which does not interpret such special +characters) by prefixing the string with an “r”. E.g., the regex to +match a period requires passing

+
+

regex=r’.’

+
+

Examples

+

Get total of trck and cscd maps, which are named with suffixes “trck” +and “cscd”, respectively.

+
>>> total_trck_map = outputs.combine_re('.*trck')
+>>> total_cscd_map = outputs.combine_re('.*cscd')
+
+
+

Get a MapSet with both of the above maps in it (and a single command)

+
>>> total_pid_maps = outputs.combine_re(['.*trck', '.*cscd'])
+
+
+

Strict name-checking, combine nue_cc + nuebar_cc, including both +cascades and tracks.

+
>>> nue_cc_nuebar_cc_map = outputs.combine_re(
+...     '^nue(bar){0,1}_cc_(cscd|trck)$')
+
+
+

Lenient nue_cc + nuebar_cc including both cascades and tracks.

+
>>> nue_cc_nuebar_cc_map = outputs.combine_re('nue.*_cc_.*')
+
+
+

Total of all maps

+
>>> total = outputs.combine_re('.*')
+
+
+
+

See also

+
+
combine_wildcard

Similar method but using wildcards (i.e., globbing, like filename matching in the Unix shell)

+
+
+
+

References

+
+
rePython module used for parsing regular expressions

https://docs.python.org/2/library/re.html

+
+
+
+ +
+
+combine_wildcard(expressions)[source]
+

For each expression passed, add together contained maps whose names +match.

+

Expressions can contain wildcards like those used in the Unix shell.

+
+
Valid wildcards (from fnmatch docs, link below):

“*” : matches everything +“?” : mateches any single character +“[seq]” : matches any character in seq +“[!`seq`]” : matches any character not in seq

+
+
+

Note that if a string is passed, the matching maps are combined and +returned as a Map object. If an iterable of strings is passed, each +grouping found is combined into a Map separately and the resulting Maps +are populated into a new MapSet to be returned.

+
+
Parameters:
+

expressions (string or sequence thereof) – See Python module fnmatch for more info.

+
+
Returns:
+

Map if expressions is a string; MapSet if expressions is an +iterable of one or more strings

+
+
Return type:
+

combined

+
+
Raises:
+

ValueError – If any expressions fail to match any map names.

+
+
+

Examples

+
>>> total_trck_map = outputs.combine_wildcard('*trck')
+>>> total_cscd_map = outputs.combine_wildcard('*cscd')
+>>> total_pid_maps = outpubs.combine_wildcard(['*trck', '*cscd'])
+>>> nue_cc_nuebar_cc_map = outputs.combine_wildcard('nue*_cc_*')
+>>> total = outputs.combine_wildcard('*')
+
+
+
+

See also

+
+
combine_re

similar method but using regular expressions

+
+
+
+

References

+
+
fnmatchPython module used for parsing the expression with wildcards

https://docs.python.org/2/library/fnmatch.html

+
+
+
+ +
+
+compare(ref)[source]
+

Compare maps in this MapSet against a reference MapSet.

+
+
Parameters:
+

ref (MapSet) – Maps taken as the reference against which to compare maps +contained within this MapSet.

+
+
Returns:
+

stats – Each key is the name of a map, and each value is istelf an +OrderedDict as returned by the Map.compare method

+
+
Return type:
+

OrderedDict

+
+
+

Examples

+
>>> stats = map_set_test.compare(map_set_ref)
+
+
+
+ +
+
+downsample(*args, **kwargs)[source]
+
+ +
+
+find_map(value)[source]
+
+ +
+
+fluctuate(method, random_state=None, jumpahead=None)[source]
+

Add fluctuations to the maps in the set and return as a new MapSet.

+
+
Parameters:
+
    +
  • method (None or string)

  • +
  • random_state (None, numpy.random.RandomState, or seed spec)

  • +
+
+
+
+ +
+
+classmethod from_json(resource)[source]
+

Instantiate a new MapSet object from a JSON file.

+

The format of the JSON is generated by the MapSet.to_json method, +which converts a MapSet object to basic types and then numpy arrays are +converted in a call to pisa.utils.jsons.to_json.

+
+
Parameters:
+

resource (str) – A PISA resource specification (see pisa.utils.resources)

+
+
+ +
+ +
+
+property hash
+

Hash value of the map set is based upon the contained maps. +* If all maps have the same hash value, this value is returned as

+
+

the map set’s hash

+
+
    +
  • If one or more maps have different hash values, a list of the +contained maps’ hash values is hashed

  • +
  • If any contained map has None for hash value, the hash value of +the map set is also None (i.e., invalid)

  • +
+
+ +
+
+hash_maps(map_names=None)[source]
+

Generate a hash on the contained maps (i.e. exclude state pertaining +only to the MapSet itself, but include all state pertaining to the +contained Maps).

+
+
Parameters:
+

map_names (None or sequence of strings) – If sequence of strings, use these as the map names instead of any +names contained.

+
+
Returns:
+

hash – If any contained map hashes to None, the resulting hash will also +be None.

+
+
Return type:
+

None or int

+
+
+
+ +
+
+property hashes
+

hash of each map

+
+
Type:
+

list of int

+
+
+
+ +
+
+index(x)[source]
+

Find map corresponding to x and return its index. Accepts either +an integer index or a map name to make interface consistent.

+
+
Parameters:
+

x (int, string, or Map) – Map, map name, or integer index of map in this MapSet. If a Map is +passed, only its name is matched to the maps in this set.

+
+
Return type:
+

integer index to the map

+
+
+
+ +
+
+llh_per_map(expected_values)[source]
+
+ +
+
+llh_total(expected_values)[source]
+
+ +
+
+log()[source]
+
+ +
+
+log10()[source]
+
+ +
+
+metric_per_map(expected_values, metric)[source]
+
+ +
+
+metric_total(expected_values, metric, metric_kwargs=None)[source]
+

Compute the binned optimization metric on all maps of a mapset, +then sum it up.

+
+
metric_kwargs allows to pass extra arguments to the metric, like

the number of empty bins for the generalized poisson llh +(Not yet implemented for Mapset)

+
+
+
+ +
+
+property name
+

name of the map (legal Python name)

+
+
Type:
+

string

+
+
+
+ +
+
+property names
+

name of each map

+
+
Type:
+

list of strings

+
+
+
+ +
+
+plot(*args, **kwargs)[source]
+
+ +
+
+pop(*args)[source]
+

Remove a map and return it. If a value is passed, the map +corresponding to index(value) is removed and returned instead.

+
+
Parameters:
+

(optional) (x) – Map, map name, or integer index of map in this MapSet. If a Map is +passed, only its name is matched to the maps in this set.

+
+
Return type:
+

Map removed from this MapSet

+
+
+
+

See also

+

list.pop

+
+
+ +
+
+project(axis, keepdims=False)[source]
+

Per-map projections onto single axis. See Map.project for more +detailed help.

+
+
Parameters:
+
    +
  • axis (string or int)

  • +
  • keepdims (bool)

  • +
+
+
Returns:
+

projection – Each map in this MapSet projected onto axis.

+
+
Return type:
+

MapSet

+
+
+
+

See also

+
+
sum

Sum over specified dimension(s)

+
+
Map.project

Method called for each map in this MapSet to perform the actual projection.

+
+
+
+
+ +
+
+rebin(*args, **kwargs)[source]
+
+ +
+
+reorder_dimensions(order)[source]
+

Return a new MapSet object with dimensions ordered +according to order.

+
+
Parameters:
+

order (MultiDimBinning or sequence of string, int, or OneDimBinning) – Order of dimensions to use. Strings are interpreted as dimension +basenames, integers are interpreted as dimension indices, and +OneDimBinning objects are interpreted by their basename +attributes (so e.g. the exact binnings in order do not have to +match this object’s exact binnings; only their basenames). Note +that a MultiDimBinning object is a valid sequence type to use for +order.

+
+
+

Notes

+

Dimensions specified in order that are not in this object are +ignored, but dimensions in this object that are missing in order +result in an error.

+
+
Return type:
+

MapSet object with reordred dimensions.

+
+
Raises:
+
    +
  • ValueError if dimensions present in this object are missing from

  • +
  • order

  • +
+
+
+
+ +
+
+property serializable_state
+

all state needed to reconstruct object

+
+
Type:
+

OrderedDict

+
+
+
+ +
+
+set_poisson_errors()[source]
+
+ +
+
+sqrt()[source]
+
+ +
+
+squeeze()[source]
+

Remove any singleton dimensions (i.e. that have only a single bin) +from all contained maps. Analagous to numpy.squeeze.

+
+
Return type:
+

MapSet with equivalent values but singleton Map dimensions removed

+
+
+
+ +
+
+sum(*args, **kwargs)[source]
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+
Parameters:
+
    +
  • filename (str) – Filename; must be either a relative or absolute path (not +interpreted as a PISA resource specification)

  • +
  • **kwargs – Further keyword args are sent to pisa.utils.jsons.to_json()

  • +
+
+
+
+

See also

+
+
from_json

Intantiate new object from the file written by this method

+
+
+

pisa.utils.jsons.to_json

+
+
+ +
+ +
+
+pisa.core.map.rebin(hist, orig_binning, new_binning, normalize_values=True)[source]
+

Rebin a histogram.

+

Note that the new binning’s edges must be a subset of the original +binning’s edges (i.e. no sub-division or extrapolation of bins is +implemented).

+
+
Parameters:
+
    +
  • hist (numpy.ndarray) – Array containing the (original) histogram’s entries

  • +
  • orig_binning (MultiDimBinning) – Original binning

  • +
  • new_binning (MultiDimBinning) – Desired binning, where new_binning.bin_edges must be a subset of +orig_binning.bin_edges.

  • +
  • normalize_values (bool) – Whether to apply pisa.utils.comparisons.normQuant to the bin edges +prior to comparing new_binning to orig_binning. This is +computationally expensive but ensures similar binnings and eqivalent +units do not cause erroneous results. It is recommended to set +normalize_values=True unless you know the two binning specs are +consistently defined.

  • +
+
+
Returns:
+

new_hist – New histogram rebinned from hist

+
+
Return type:
+

numpy.ndarray

+
+
+
+ +
+
+pisa.core.map.reduceToHist(obj)[source]
+

Recursively sum to reduce an object to a single histogram.

+
+
Parameters:
+

obj (numpy.ndarray, Map, MapSet, or iterable of MapSets)

+
+
Returns:
+

hist – Single histogram version of obj

+
+
Return type:
+

numpy.ndarray

+
+
Raises:
+

TypeError if obj is an unhandled type

+
+
+
+ +
+
+pisa.core.map.test_Map()[source]
+

Unit tests for Map class

+
+ +
+
+pisa.core.map.test_MapSet()[source]
+

Unit tests for MapSet class

+
+ +
+
+pisa.core.map.type_error(value)[source]
+

Generic formulation of a TypeError that can be called throughout the +code

+
+ +
+
+pisa.core.map.valid_nominal_values(data_array)[source]
+

Get the the nominal values that are valid for an array

+
+ +
+
+

pisa.core.param module

+

Define Param, ParamSet, and ParamSelector classes for handling parameters, sets +of parameters, and being able to discretely switch between sets of parameter +values.

+
+
+class pisa.core.param.DerivedParam(name, value, unique_id=None, is_discrete=False, scales_as_log=False, nominal_value=None, tex=None, range=None, depends_names='', function_file='', help='')[source]
+

Bases: Param

+

This is a meta-parameter param that implements a param depending on other Params.

+
+
+property callable: Funct
+
+ +
+
+property depends_names
+
+ +
+
+property dependson: dict[Param]
+
+ +
+
+classmethod from_state(state) DerivedParam[source]
+
+ +
+
+prior_penalty(metric)[source]
+

We don’t want to double-count the penalty from derived params

+
+ +
+
+property range
+
+ +
+
+property serializable_state
+
+ +
+
+property state: dict
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+
+validate_value(value)[source]
+
+ +
+ +
+
+class pisa.core.param.Param(name, value, prior, range, is_fixed, unique_id=None, is_discrete=False, scales_as_log=False, nominal_value=None, tex=None, help='')[source]
+

Bases: object

+

Parameter class to store any kind of parameters

+
+
Parameters:
+
    +
  • name (string)

  • +
  • value (scalar, bool, pint Quantity (value with units), string, or None)

  • +
  • prior (pisa.prior.Prior or instantiable thereto)

  • +
  • range (sequence of two scalars or Pint quantities, or None)

  • +
  • is_fixed (bool)

  • +
  • unique_id (string, optional) – If None is provided (default), unique_id is set to name

  • +
  • is_discrete (bool, optional) – Default is False

  • +
  • scales_as_log (bool, optional) – Rescale the log of the parameter’s value between 0 and 1 for minimization, +rather than the value itself. This can help optimizing parameters spanning +several orders of magnitude.

  • +
  • nominal_value (same type as value, optional) – If None (default), set to same as value

  • +
  • tex (None or string)

  • +
  • help (string)

  • +
+
+
+

Notes

+

In the case of a free (`is_fixed`=False) parameter, a valid range for the +parameter should be spicfied and a prior must be assigned to compute llh +and chi2 values.

+

Examples

+
>>> from pisa import ureg
+>>> from pisa.core.prior import Prior
+>>> gaussian = Prior(kind='gaussian', mean=10*ureg.meter,
+...                  stddev=1*ureg.meter)
+>>> x = Param(name='x', value=1.5*ureg.foot, prior=gaussian,
+...           range=[-10, 60]*ureg.foot, is_fixed=False, is_discrete=False)
+>>> x.value
+<Quantity(1.5, 'foot')>
+>>> print(x.prior_llh)
+-45.532515919999994
+>>> print(x.to('m'))
+
+
+
>>> x.value = 10*ureg.m
+>>> print(x.value)
+<Quantity(32.8083989501, 'foot')>
+>>> x.ito('m')
+>>> print(x.value)
+
+
+
>>> x.prior_llh
+-1.5777218104420236e-30
+>>> p.nominal_value
+
+
+
>>> x.reset()
+>>> print(x.value)
+
+
+
+
+property dimensionality
+
+ +
+
+classmethod from_json(filename)[source]
+

Instantiate a new Param from a JSON file

+
+ +
+
+property hash
+

hash of full state

+
+
Type:
+

int

+
+
+
+ +
+
+ito(units)[source]
+

Convert this param (in place) to have units of units.

+
+
Parameters:
+

units (string or pint.Unit)

+
+
Return type:
+

None

+
+
+
+

See also

+

to, Pint.to, Pint.ito

+
+
+ +
+
+property m
+
+ +
+
+m_as(u)[source]
+
+ +
+
+property magnitude
+
+ +
+
+property nominal_value
+
+ +
+
+property prior
+
+ +
+
+property prior_chi2
+
+ +
+
+property prior_llh
+
+ +
+
+prior_penalty(metric)[source]
+

Return the prior penalty according to metric.

+
+
Parameters:
+

metric (str) – Metric to use for evaluating the prior penalty.

+
+
Returns:
+

penalty

+
+
Return type:
+

float prior penalty value

+
+
+
+ +
+
+randomize(random_state=None)[source]
+

Randomize the parameter’s value according to a uniform random +distribution within the parameter’s defined limits.

+
+
Parameters:
+

random_state (None, int, or RandomState) – Object to use for random state. None defaults to the global random +state (this is discouraged, as results are not reproducible). An +integer acts as a seed to numpy.random.seed(), and RandomState is +a numpy.random.RandomState object.

+
+
+
+ +
+
+property range
+
+ +
+
+reset()[source]
+

Reset the parameter’s value to its nominal value.

+
+ +
+
+property serializable_state
+
+ +
+
+set_nominal_to_current_value()[source]
+

Define the nominal value to the parameter’s current value.

+
+ +
+
+property state
+
+ +
+
+property tex
+
+ +
+
+to(units)[source]
+

Return an equivalent copy of param but in units of units.

+
+
Parameters:
+

units (string or pint.Unit)

+
+
Returns:
+

Param

+
+
Return type:
+

copy of this param, but in specified units.

+
+
+
+

See also

+

ito, Pint.to, Pint.ito

+
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+
+property u
+
+ +
+
+property units
+
+ +
+
+validate_value(value)[source]
+
+ +
+
+property value
+
+ +
+ +
+
+class pisa.core.param.ParamSelector(regular_params=None, selector_param_sets=None, selections=None)[source]
+

Bases: object

+
+
Parameters:
+
    +
  • regular_params (ParamSet or instantiable thereto)

  • +
  • selector_param_sets (None, dict, or sequence of dict) –

    +
    Dict(s) format:
    +
    {

    ‘<name1>’: <ParamSet or instantiable thereto>, +‘<name2>’: <ParamSet or instantiable thereto>, +…

    +
    +
    +

    }

    +
    +
    +

    The names are what must be specified in selections to select the +corresponding ParamSets. Params specified in any of the ParamSets +within selector_param_sets cannot be in `regular_params.

    +

  • +
  • selections (None, string, or sequence of strings) – One string is required per

  • +
+
+
+

Notes

+

Params specified in regular_params are enforced to be mutually exclusive +with params in the param sets specified by selector_param_sets.

+
+
+get(name, selector=None)[source]
+
+ +
+
+property param_selections
+
+ +
+
+property params
+
+ +
+
+select_params(selections=None, error_on_missing=False)[source]
+
+ +
+
+update(p, selector=None, existing_must_match=False, extend=True)[source]
+
+ +
+ +
+
+class pisa.core.param.ParamSet(*args)[source]
+

Bases: MutableSequence, Set

+

Container class for a set of parameters. Most methods are passed +through to contained params.

+

Interface is a superset of both MutableSequence (i.e., behaves like a +Python list, so ordering, appending, extending, etc. all work) and Set +(i.e., behaves like a Python set, so no duplicates (tested by name) are +allowed, you can test set membership like issuperset, issubset, etc.). +See ..

+
https://docs.python.org/3/library/collections.abc.html
+
+
+

for the definitions of the MutableSequence and Set interfaces.

+
+
Parameters:
+

*args (one or more Param objects or sequences thereof)

+
+
+

Examples

+
>>> from pisa import ureg
+>>> from pisa.core.prior import Prior
+
+
+
>>> e_prior = Prior(kind='gaussian', mean=10*ureg.GeV, stddev=1*ureg.GeV)
+>>> cz_prior = Prior(kind='uniform', llh_offset=-5)
+>>> reco_energy = Param(name='reco_energy', value=12*ureg.GeV,
+...                     prior=e_prior, range=[1, 80]*ureg.GeV,
+...                     is_fixed=False, is_discrete=False,
+...                     tex=r'E^{\rm reco}')
+>>> reco_coszen = Param(name='reco_coszen', value=-0.2, prior=cz_prior,
+...                     range=[-1, 1], is_fixed=True, is_discrete=False,
+...                     tex=r'\cos\,\theta_Z^{\rm reco}')
+>>> param_set = ParamSet(reco_energy, reco_coszen)
+>>> print(param_set)
+reco_coszen=-2.0000e-01 reco_energy=+1.2000e+01 GeV
+
+
+
>>> print(param_set.free)
+reco_energy=+1.2000e+01 GeV
+
+
+
>>> print(param_set.reco_energy.value)
+12 gigaelectron_volt
+
+
+
>>> print([p.prior_llh for p in param_set])
+[-5.0, -2]
+
+
+
>>> print(param_set.priors_llh)
+-7.0
+
+
+
>>> print(param_set.values_hash)
+3917547535160330856
+
+
+
>>> print(param_set.free.values_hash)
+-7121742559130813936
+
+
+
+
+add_covariance(covmat: dict) None[source]
+
+
Correlates several Params.

It works by taking the existing params, and rotating them into a new, uncorrelated, basis state. +New parameters are added in the new basis, and the old params are replaced with derived params +The fits therefore are done in the uncorrelated basis

+
+
+
+
Parameters:
+
    +
  • covmat (dict) – A two-deep nested dictionary for covariances between Params +Note: this is specifically not a 2D array such as to be explicit about which params are used

  • +
  • ex

  • +
  • {

  • +
  • Param1 – Param1: 0.9, +Param2: 0.1 },

  • +
  • Param2 – Param1:0.1, +Param2:0.8}

  • +
  • }

  • +
+
+
Raises:
+
    +
  • KeyError if given dict has keys not not shared with Parameter names

  • +
  • TypeError if a given entry in covmat is not the proper type

  • +
  • NotImplementedError if the means of calculating the mean for a given parameters prior isn't there yet

  • +
+
+
+
+ +
+
+property are_discrete
+
+ +
+
+property are_fixed
+
+ +
+
+property continuous
+
+ +
+
+property discrete
+
+ +
+
+extend(values)[source]
+

Append param(s) in values to this param set, but ensure params in +values that are already in this param set match. Params with same name +attribute are not duplicated.

+

(Convenience method or calling update method with +existing_must_match=True and extend=True.)

+
+ +
+
+fix(x)[source]
+

Set param(s) to be fixed in value (and hence not modifiable by e.g. +a minimizer).

+

Note that the operation is atomic: If x is a sequence of indexing +objects, if _any_ index in x cannot be found, _no_ other params +specified in x will be set to be fixed.

+

Any params specified in x that are already fixed simply remain so.

+
+
Parameters:
+

x (int, str, Param, or iterable thereof) – Object or sequence to index into params to define which to affix. +See index method for valid objects to use for indexing into the +ParamSet.

+
+
+

:raises ValueError : if any index cannot be found:

+
+ +
+
+property fixed
+
+ +
+
+property free
+
+ +
+
+classmethod from_json(filename)[source]
+

Instantiate a new ParamSet from a JSON file

+
+ +
+
+property has_derived: bool
+

Returns whether or not this set contains a derived parameter

+
+ +
+
+property hash
+

full state hash

+
+
Type:
+

int

+
+
+
+ +
+
+index(value)[source]
+

Return an integer index to the Param in this ParamSet indexed by +value. This does not look up a param’s value property but looks for +param by name, integer index, or matching object.

+
+
Parameters:
+

value (int, str or Param) – The object to return an index for. If int, the integer is returned +(so long as it’s in the valid range). If str, return index of param +with matching name attribute. If Param object, return index of an +equivalent Param in this set.

+
+
Returns:
+

idx

+
+
Return type:
+

int index to a corresponding param in this ParamSet

+
+
+

:raises ValueError : if value does not correspond to a param in this ParamSet:

+
+ +
+
+insert(index, value)[source]
+

Insert value before index

+
+ +
+
+property is_nominal
+
+ +
+
+issubset(other)[source]
+
+ +
+
+issuperset(other)[source]
+
+ +
+
+property name_val_dict
+
+ +
+
+property names
+
+ +
+
+property nominal_values
+
+ +
+
+property nominal_values_hash
+

hash only on the nominal param values

+
+
Type:
+

int

+
+
+
+ +
+
+property priors
+
+ +
+
+property priors_chi2
+
+ +
+
+property priors_llh
+
+ +
+
+priors_penalties(metric)[source]
+

Return the prior penalties for each param at their current values.

+
+
Parameters:
+

metric (str) – Metric to use for evaluating the prior.

+
+
Returns:
+

penalty

+
+
Return type:
+

list of float prior values, one for each param

+
+
+
+ +
+
+priors_penalty(metric)[source]
+

Return the aggregate prior penalty for all params at their current +values.

+
+
Parameters:
+

metric (str) – Metric to use for evaluating the prior.

+
+
Returns:
+

penalty

+
+
Return type:
+

float sum of all parameters’ prior values

+
+
+
+ +
+
+randomize_free(random_state=None)[source]
+

Randomize any free parameters with according to a uniform random +distribution within the parameters’ defined limits.

+
+
Parameters:
+

random_state (None, int, or RandomState) – Object to use for random state. None defaults to the global random +state (this is discouraged, as results are not reproducible). An +integer acts as a seed to numpy.random.seed(), and RandomState is +a numpy.random.RandomState object.

+
+
+
+ +
+
+property ranges
+
+ +
+
+replace(new)[source]
+

Replace an existing param with new param, where the existing param +must have the same name attribute as new.

+
+
Parameters:
+

new (Param) – New param to use instead of current param.

+
+
+

:raises ValueError : if new.name does not match an existing param’s name:

+
+ +
+
+reset_all()[source]
+

Reset both free and fixed parameters to their nominal values.

+
+ +
+
+reset_free()[source]
+

Reset only free parameters to their nominal values.

+
+ +
+
+property serializable_state
+
+ +
+
+set_nominal_by_current_values()[source]
+

Define the nominal values as the parameters’ current values.

+
+ +
+
+set_values(new_params)[source]
+

Set values in current ParamSet to those defined in new ParamSet

+
+
Parameters:
+

new_params (ParamSet) – ParamSet containing set of values to change current ParamSet to.

+
+
+
+ +
+
+property state
+
+ +
+
+tabulate(tablefmt='plain')[source]
+
+ +
+
+property tex
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+
+unfix(x)[source]
+

Set param(s) to be free (and hence modifiable by e.g. a minimizer).

+

Note that the operation is atomic: If x is a sequence of indexing +objects, if _any_ index in x cannot be found, _no_ other params +specified in x will be set to be free.

+

Any params specified in x that are already free simply remain so.

+
+
Parameters:
+

x (int, str, Param, or iterable thereof) – Object or sequence to index into params to define which to affix. +See index method for valid objects to use for indexing into the +ParamSet.

+
+
+

:raises ValueError : if any index cannot be found:

+
+ +
+
+update(obj, existing_must_match=False, extend=True)[source]
+

Update this param set using obj.

+

Default behavior is similar to Python’s dict.update, but this can be +modified via existing_must_match and extend.

+
+
Parameters:
+
    +
  • obj (Param, ParamSet, or sequence thereof) – Param or container with params to update and/or extend this param +set

  • +
  • existing_must_match (bool) – If True, raises ValueError if param values passed in that already +exist in this param set have differing values.

  • +
  • extend (bool) – If True, params not in this param set are appended.

  • +
+
+
+
+ +
+
+update_existing(obj)[source]
+

Only existing params in this set are updated by that(those) param(s) +in obj.

+

Convenience method for calling update with +existing_must_match=False and extend=False.

+
+ +
+
+property values
+
+ +
+
+property values_hash
+

hash only on the current param values (not full state)

+
+
Type:
+

int

+
+
+
+ +
+ +
+
+pisa.core.param.test_Param()[source]
+

Unit tests for Param class

+
+ +
+
+pisa.core.param.test_ParamSelector()[source]
+

Unit tests for ParamSelector class

+
+ +
+
+pisa.core.param.test_ParamSet()[source]
+

Unit tests for ParamSet class

+
+ +
+
+

pisa.core.pipeline module

+

Implementation of the Pipeline object, and a simple script to instantiate and +run a pipeline (the outputs of which can be plotted and stored to disk).

+
+
+class pisa.core.pipeline.Pipeline(config, profile=False)[source]
+

Bases: object

+

Instantiate stages according to a parsed config object; excecute +stages.

+
+
Parameters:
+
    +
  • config (string, OrderedDict, or PISAConfigParser) – If string, interpret as resource location; send to the +config_parser.parse_pipeline_config() method to get a config +OrderedDict. If OrderedDict, use directly as pipeline configuration.

  • +
  • profile (bool) – Perform timings

  • +
+
+
+
+
+add_covariance(covmat)[source]
+

Incorporates covariance between parameters. +This is done by replacing relevant correlated parameters with “DerivedParams”

+
+

that depend on new parameters in an uncorrelated basis

+
+

The parameters are all updated, but this doesn’t add the new parameters in +So we go to the first stage we find that has one of the original parameters and manually add this in

+
+ +
+
+property config
+

Deepcopy of the OrderedDict used to instantiate the pipeline

+
+ +
+
+get_outputs(output_binning=None, output_key=None)[source]
+

Get MapSet output

+
+ +
+
+property hash
+

Hash of the state of the pipeline. This hashes together a hash +of the Pipeline class’s source code and a hash of the state of each +contained stage.

+
+
Type:
+

int

+
+
+
+ +
+
+index(stage_id)[source]
+

Return the index in the pipeline of stage_id.

+
+
Parameters:
+

stage_id (string or int) – Name of the stage, or stage number (0-indexed)

+
+
Returns:
+

idx

+
+
Return type:
+

integer stage number (0-indexed)

+
+
+

:raises ValueError : if stage_id not in pipeline.:

+
+ +
+
+property param_selections
+

param selections collected from all stages

+
+
Type:
+

list of strings

+
+
+
+ +
+
+property params
+

pipeline’s parameters

+
+
Type:
+

pisa.core.param.ParamSet

+
+
+
+ +
+
+property profile
+
+ +
+
+report_profile(detailed=False)[source]
+
+ +
+
+run()[source]
+

Run the pipeline to compute

+
+ +
+
+select_params(selections, error_on_missing=False)[source]
+

Select a set of alternate param values/specifications.

+
+
Parameters:
+
    +
  • selections (string or iterable of strings)

  • +
  • error_on_missing (bool)

  • +
+
+
Raises:
+

KeyError if error_on_missing is True and any of selections does – not exist in any stage in the pipeline.

+
+
+
+ +
+
+setup()[source]
+

Setup (reset) all stages

+
+ +
+
+property source_code_hash
+

Hash for the source code of this object’s class.

+

Not meant to be perfect, but should suffice for tracking provenance of +an object stored to disk that were produced by a Stage.

+
+ +
+
+property stage_names
+

names of stages in the pipeline

+
+
Type:
+

list of strings

+
+
+
+ +
+
+property stages: list[Stage]
+

stages in the pipeline

+
+
Type:
+

list of Stage

+
+
+
+ +
+
+tabulate(tablefmt='plain')[source]
+
+ +
+
+update_params(params, existing_must_match=False, extend=False)[source]
+

Update params for the pipeline.

+

Note that any param in params in excess of those that already exist +in the pipeline’s stages will have no effect.

+
+
Parameters:
+
    +
  • params (ParamSet) – Parameters to be updated

  • +
  • existing_must_match (bool)

  • +
  • extend (bool)

  • +
+
+
+
+ +
+ +
+
+pisa.core.pipeline.main(return_outputs=False)[source]
+

Run unit tests if pipeline.py is called as a script.

+
+ +
+
+pisa.core.pipeline.parse_args()[source]
+

Parse command line arguments if pipeline.py is called as a script.

+
+ +
+
+pisa.core.pipeline.test_Pipeline()[source]
+

Unit tests for Pipeline class

+
+ +
+
+

pisa.core.prior module

+

Prior class for use in pisa.core.Param objects

+
+
+class pisa.core.prior.Prior(kind, **kwargs)[source]
+

Bases: object

+

Prior information for a parameter. Defines the penalty (in +log-likelihood (llh)) for a parameter being at a given value (within the +prior’s valid parameter range). Chi-squared penalties can also be returned +(but the definition of a prior here is always in terms of llh).

+

Note that since this is a penalty, the more negative the prior’s log +likelihood, the greater the penalty and the less likely the parameter’s +value is.

+

Valid parameters and properties of the object differ based upon what kind +of prior is specified.

+
+
Parameters:
+
    +
  • kind='uniform' – Uniform prior, no preference for any position relative to the valid +range, which is taken to be [-inf, +inf] [x-units].

  • +
  • llh_offset=... – Uniform prior, no preference for any position relative to the valid +range, which is taken to be [-inf, +inf] [x-units].

  • +
  • kind='gaussian' – Gaussian prior, defining log likelihood penalty for parameter being at +any particular position. Valid range is [-inf, +inf] [x-units].

  • +
  • mean=... – Gaussian prior, defining log likelihood penalty for parameter being at +any particular position. Valid range is [-inf, +inf] [x-units].

  • +
  • stddev=... – Gaussian prior, defining log likelihood penalty for parameter being at +any particular position. Valid range is [-inf, +inf] [x-units].

  • +
  • kind='linterp' – Linearly-interpolated prior. Note that “corners” in linear +interpolation may cause difficulties for some minimizers.

  • +
  • param_vals=... – Linearly-interpolated prior. Note that “corners” in linear +interpolation may cause difficulties for some minimizers.

  • +
  • llh_vals=... – Linearly-interpolated prior. Note that “corners” in linear +interpolation may cause difficulties for some minimizers.

  • +
  • kind='spline' – Smooth spline interpolation.

  • +
  • knots=... – Smooth spline interpolation.

  • +
  • coeffs=... – Smooth spline interpolation.

  • +
  • deg=... – Smooth spline interpolation.

  • +
  • Properties

  • +
  • ----------

  • +
  • kind (Additional properties are defined based on)

  • +
  • max_at

  • +
  • max_at_str

  • +
  • state

  • +
  • valid_range

  • +
  • kind

  • +
  • kind='uniform' – llh_offset

  • +
  • kind='gaussian' – mean +stddev

  • +
  • kind='linterp' – param_vals +llh_vals

  • +
  • kind='spline' – knots +coeffs +deg

  • +
+
+
+
+
+chi2()
+
+ +
+
+llh()
+
+ +

Notes

+

If the parameter the prior is being applied to has units, the prior’s +“x”-values specification must have compatible units.

+

If you implement a new prior, it *must* raise an exception if methods +llh or chi2 are called with a parameter value outside the prior’s valid +range, so subtle bugs aren’t introduced that appear as an issue in e.g. the +minimizer.

+

Examples

+

For spline prior: knots, coeffs, and deg can be found by, e.g., +scipy.interpolate.splrep; evaluation of spline priors is carried out +internally by scipy.interpolate.splev, so an exact match to the output of +the spline prior can be produced as follows:

+
>>> from scipy.interpolate import splrep, splev
+>>> # Generate sample points
+>>> param_vals = np.linspace(-10, 10, 100)
+>>> llh_vals = param_vals**2
+>>> # Define spline interpolant
+>>> knots, coeffs, deg = splrep(param_vals, llh_vals)
+>>> # Instantiate spline prior
+>>> prior = Prior(kind='spline', knots=knots, coeffs=coeffs, deg=deg)
+>>> # Generate sample points for interpolation
+>>> param_upsamp = np.linspace(-10, 10, 1000)
+>>> # Evaluation of spline using splev
+>>> llh_upsamp = splev(param_upsamp, tck=(knots, coeffs, deg), ext=2)
+>>> # Check that evaluation of spline matches call to prior.llh()
+>>> all(prior.llh(param_upsamp) == llh_upsamp)
+True
+
+
+
+
+property serializable_state
+
+ +
+
+property state
+
+ +
+
+property units_str
+
+ +
+ +
+
+pisa.core.prior.get_prior_bounds(obj, param=None, stddev=1.0)[source]
+

Obtain confidence intervals for given number of +standard deviations from parameter prior.

+
+
Parameters:
+
    +
  • obj (Prior, string, or Mapping) –

    if str, interpret as path from which to load a dict +if dict, can be:

    +
    +

    template settings dict; must supply parameter name via param +params dict; must supply parameter name via param +prior dict

    +
    +

  • +
  • param (Param) – Name of parameter for which to get bounds; +necessary if obj is either template settings or params

  • +
  • stddev (float or Iterable of floats) – number of stddevs

  • +
+
+
Returns:
+

bounds – A dictionary mapping the passed stddev values to the corresponding +bounds

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+pisa.core.prior.test_Prior()[source]
+

Unit tests for Prior class

+
+ +
+
+

pisa.core.stage module

+

Stage class designed to be inherited by PISA services, such that all basic +functionality is built-in.

+
+
+class pisa.core.stage.Stage(data=None, params=None, expected_params=None, debug_mode=None, error_method=None, calc_mode=None, apply_mode=None, profile=False)[source]
+

Bases: object

+

PISA stage base class. Should be used to implement PISA Pi stages

+

Specialization should be done via subclasses.

+
+
Parameters:
+
    +
  • data (ContainerSet or None) – object to be passed along

  • +
  • params (ParamSelector, dict of ParamSelector kwargs, ParamSet, or object instantiable to ParamSet)

  • +
  • expected_params (list of strings) – List containing required params names.

  • +
  • debug_mode (None, bool, or string) –

    If None, False, or empty string, the stage runs normally.

    +

    Otherwise, the stage runs in debug mode. This disables caching (forcing +recomputation of any nominal transforms, transforms, and outputs). +Services that subclass from the Stage class can then implement +further custom behavior when this mode is set by reading the value of +the self.debug_mode attribute.

    +

  • +
  • calc_mode (pisa.core.binning.MultiDimBinning, str, or None) – Specify in what to do the calculation

  • +
  • apply_mode (pisa.core.binning.MultiDimBinning, str, or None) – Specify in what to do the application

  • +
+
+
+
+
+apply()[source]
+
+ +
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute()[source]
+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+property debug_mode
+

Read-only attribute indicating whether or not the stage is being run +in debug mode. None indicates non-debug mode, while non-none value +indicates a debug mode.

+
+ +
+
+property error_method
+

Read-only attribute indicating whether or not the stage will compute +errors for its transforms and outputs (whichever is applicable). Errors +on inputs are propagated regardless of this setting.

+
+ +
+
+expected_params
+

The full set of parameters (by name) that must be present in +params

+
+ +
+
+full_hash
+

Whether to do full hashing if true, otherwise do fast hashing

+
+ +
+
+property hash
+

Combines source_code_hash and params.hash for checking/tagging +provenance of persisted (on-disk) objects.

+
+ +
+
+include_attrs_for_hashes(attrs)[source]
+

Include a class attribute or attributes to be included when +computing hashes (for all that apply: nominal transforms, transforms, +and/or outputs).

+

This is a convenience that allows some customization of hashing (and +hence caching) behavior without having to override the hash-computation +methods (_derive_nominal_transforms_hash, _derive_transforms_hash, +and _derive_outputs_hash).

+
+
Parameters:
+

attrs (string or sequence thereof) – Name of the attribute(s) to include for hashes. Each must be an +existing attribute of the object at the time this method is +invoked.

+
+
+
+ +
+
+property is_map
+
+ +
+
+property param_selections
+

Param selections

+
+ +
+
+property params
+

Params

+
+ +
+
+report_profile(detailed=False)[source]
+
+ +
+
+run()[source]
+
+ +
+
+select_params(selections, error_on_missing=False)[source]
+

Apply the selections to contained ParamSet.

+
+
Parameters:
+
    +
  • selections (string or iterable)

  • +
  • error_on_missing (bool)

  • +
+
+
+
+ +
+
+service_name
+

Name of the specific service implementing the stage.

+
+ +
+
+setup()[source]
+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+property source_code_hash
+

Hash for the source code of this object’s class.

+

Not meant to be perfect, but should suffice for tracking provenance of +an object stored to disk that were produced by a Stage.

+
+ +
+
+stage_name
+

Name of the stage (e.g. flux, osc, aeff, reco, pid, etc.

+
+ +
+
+validate_params(params)[source]
+

Override this method to test if params are valid; e.g., check range +and dimensionality. Invalid params should be indicated by raising an +exception; no value should be returned.

+
+ +
+ +
+
+

pisa.core.translation module

+

Module for data representation translation methods

+
+
+pisa.core.translation.find_index(val, bin_edges)
+

Find index in binning for val. If val is below binning range or is +nan, return -1; if val is above binning range, return num_bins. Edge +inclusivity/exclusivity is defined as ..

+
[ bin 0 ) [ bin 1 ) ... [ bin num_bins-1 ]
+
+
+

Using these indices to produce histograms should yield identical results +(ignoring underflow and overflow, which find_index has) that are +equivalent to those produced by numpy.histogramdd.

+
+
Parameters:
+
    +
  • val (scalar) – Value for which to find bin index

  • +
  • bin_edges (1d numpy ndarray of 2 or more scalars) – Must be monotonically increasing, and all bins are assumed to be +adjacent

  • +
+
+
Returns:
+

bin_idx – -1 is returned for underflow or if val is nan. num_bins is returned +for overflow. Otherwise, for bin_edges[0] <= val <= bin_edges[-1], +0 <= bin_idx <= num_bins - 1

+
+
Return type:
+

int in [-1, num_bins]

+
+
+
+ +
+
+pisa.core.translation.find_index_unsafe(val, bin_edges)
+

Find bin index of val within binning defined by bin_edges.

+

Validity of val and bin_edges is not checked.

+
+
Parameters:
+
    +
  • val (scalar) – Assumed to be within range of bin_edges (including lower and upper +bin edges)

  • +
  • bin_edges (array)

  • +
+
+
Return type:
+

index

+
+
+
+

See also

+
+
find_index

includes bounds checking and handling of special cases

+
+
+
+
+ +
+
+pisa.core.translation.histogram(sample, weights, binning, averaged, apply_weights=True)[source]
+

Histogram sample points, weighting by weights, according to binning.

+
+
Parameters:
+
    +
  • sample (list of np.ndarray)

  • +
  • weights (np.ndarray)

  • +
  • binning (PISA MultiDimBinning)

  • +
  • averaged (bool) – If True, the histogram entries are averages of the numbers that end up +in a given bin. This for example must be used when oscillation +probabilities are translated, otherwise we end up with +probability*count per bin

  • +
  • apply_weights (bool) – wether to use weights or not

  • +
+
+
+
+ +
+
+pisa.core.translation.lookup(sample, flat_hist, binning)[source]
+

The inverse of histograming: Extract the histogram values at sample +points.

+
+
Parameters:
+
    +
  • sample (num_dims list of length-num_samples np.ndarray) – Points at which to find histogram’s values

  • +
  • flat_hist (np.ndarray) – Histogram values

  • +
  • binning (num_dims MultiDimBinning) – Histogram’s binning

  • +
+
+
Returns:
+

hist_vals

+
+
Return type:
+

len-num_samples np.ndarray

+
+
+

Notes

+

Handles up to 3D.

+
+ +
+
+pisa.core.translation.resample(weights, old_sample, old_binning, new_sample, new_binning)[source]
+

Resample binned data with a given binning into any arbitrary +new_binning

+
+
Parameters:
+
    +
  • weights (np.ndarray)

  • +
  • old_sample (list of np.ndarray)

  • +
  • old_binning (PISA MultiDimBinning)

  • +
  • new_sample (list of np.ndarray)

  • +
  • new_binning (PISA MultiDimBinning)

  • +
+
+
Return type:
+

new_hist_vals

+
+
+
+ +
+
+pisa.core.translation.test_find_index()[source]
+

Unit tests for find_index function.

+

Correctness is defined as producing the same histogram as numpy.histogramdd +by using the output of find_index (ignoring underflow and overflow values). +Additionally, -1 should be returned if a value is below the range +(underflow) or is nan, and num_bins should be returned for a value above +the range (overflow).

+
+ +
+
+pisa.core.translation.test_histogram()[source]
+

Unit tests for histogram function.

+

Correctness is defined as matching the histogram produced by +numpy.histogramdd.

+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.html b/pisa.html new file mode 100644 index 000000000..5fd691002 --- /dev/null +++ b/pisa.html @@ -0,0 +1,2474 @@ + + + + + + + pisa package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa package

+
+

Subpackages

+
+ +
+
+
+

Module contents

+

Define globals available to all modules in PISA

+
+
+pisa.CACHE_DIR = '/home/runner/.cache/pisa'
+

Root directory for storing PISA cache files

+
+ +
+
+pisa.CTYPE
+

Global complex-valued floating-point data type. C, CUDA, and Numba datatype +definitions are derived from this

+
+ +
+
+pisa.EPSILON = 1e-12
+

Best precision considering HASH_SIGFIGS (which is chosen kinda ad-hoc but +based on by FTYPE)

+
+ +
+
+pisa.FTYPE
+

Global floating-point data type. C, CUDA, and Numba datatype definitions are +derived from this

+
+ +
+
+pisa.HASH_SIGFIGS = 12
+

Round to this many significant figures for hashing numbers, such that +machine precision doesn’t cause effectively equivalent numbers to hash +differently.

+
+ +
+
+pisa.ITYPE
+

alias of int64

+
+ +
+
+pisa.OMP_NUM_THREADS = 1
+

Number of threads OpenMP is allocated

+
+ +
+
+class pisa.OrderedDict[source]
+

Bases: dict

+

Dictionary that remembers insertion order

+
+
+clear() None.  Remove all items from od.
+
+ +
+
+copy() a shallow copy of od
+
+ +
+
+fromkeys(value=None)
+

Create a new ordered dictionary with keys from iterable and values set to value.

+
+ +
+
+items() a set-like object providing a view on D's items
+
+ +
+
+keys() a set-like object providing a view on D's keys
+
+ +
+
+move_to_end(key, last=True)
+

Move an existing element to the end (or beginning if last is false).

+

Raise KeyError if the element does not exist.

+
+ +
+
+pop(key[, default]) v, remove specified key and return the corresponding value.
+

If the key is not found, return the default if given; otherwise, +raise a KeyError.

+
+ +
+
+popitem(last=True)
+

Remove and return a (key, value) pair from the dictionary.

+

Pairs are returned in LIFO order if last is true or FIFO order if false.

+
+ +
+
+setdefault(key, default=None)
+

Insert key with a value of default if key is not in the dictionary.

+

Return the value for key if key is in the dictionary, else default.

+
+ +
+
+update([E, ]**F) None.  Update D from dict/iterable E and F.
+

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] +If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v +In either case, this is followed by: for k in F: D[k] = F[k]

+
+ +
+
+values() an object providing a view on D's values
+
+ +
+ +
+
+pisa.PISA_NUM_THREADS = 1
+

Global limit for number of threads

+
+ +
+
+pisa.Q_
+

Shortcut for Quantity that uses central PISA Pint unit regeistry

+
+ +
+
+pisa.array()
+
+
array(object, dtype=None, *, copy=True, order=’K’, subok=False, ndmin=0,

like=None)

+
+
+

Create an array.

+
+
Parameters:
+
    +
  • object (array_like) – An array, any object exposing the array interface, an object whose +__array__ method returns an array, or any (nested) sequence. +If object is a scalar, a 0-dimensional array containing object is +returned.

  • +
  • dtype (data-type, optional) – The desired data-type for the array. If not given, then the type will +be determined as the minimum type required to hold the objects in the +sequence.

  • +
  • copy (bool, optional) – If true (default), then the object is copied. Otherwise, a copy will +only be made if __array__ returns a copy, if obj is a nested sequence, +or if a copy is needed to satisfy any of the other requirements +(dtype, order, etc.).

  • +
  • order ({'K', 'A', 'C', 'F'}, optional) –

    Specify the memory layout of the array. If object is not an array, the +newly created array will be in C order (row major) unless ‘F’ is +specified, in which case it will be in Fortran order (column major). +If object is an array the following holds.

    + + + + + + + + + + + + + + + + + + + + + + + + + +

    order

    no copy

    copy=True

    ’K’

    unchanged

    F & C order preserved, otherwise most similar order

    ’A’

    unchanged

    F order if input is F and not C, otherwise C order

    ’C’

    C order

    C order

    ’F’

    F order

    F order

    +

    When copy=False and a copy is made for other reasons, the result is +the same as if copy=True, with some exceptions for ‘A’, see the +Notes section. The default order is ‘K’.

    +

  • +
  • subok (bool, optional) – If True, then sub-classes will be passed-through, otherwise +the returned array will be forced to be a base-class array (default).

  • +
  • ndmin (int, optional) – Specifies the minimum number of dimensions that the resulting +array should have. Ones will be pre-pended to the shape as +needed to meet this requirement.

  • +
  • like (array_like) –

    Reference object to allow the creation of arrays which are not +NumPy arrays. If an array-like passed in as like supports +the __array_function__ protocol, the result will be defined +by it. In this case, it ensures the creation of an array object +compatible with that passed in via this argument.

    +
    +

    Added in version 1.20.0.

    +
    +

  • +
+
+
Returns:
+

out – An array object satisfying the specified requirements.

+
+
Return type:
+

ndarray

+
+
+
+

See also

+
+
empty_like

Return an empty array with shape and type of input.

+
+
ones_like

Return an array of ones with shape and type of input.

+
+
zeros_like

Return an array of zeros with shape and type of input.

+
+
full_like

Return a new array with shape of input filled with value.

+
+
empty

Return a new uninitialized array.

+
+
ones

Return a new array setting values to one.

+
+
zeros

Return a new array setting values to zero.

+
+
full

Return a new array of given shape filled with value.

+
+
+
+

Notes

+

When order is ‘A’ and object is an array in neither ‘C’ nor ‘F’ order, +and a copy is forced by a change in dtype, then the order of the result is +not necessarily ‘C’ as expected. This is likely a bug.

+

Examples

+
>>> np.array([1, 2, 3])
+array([1, 2, 3])
+
+
+

Upcasting:

+
>>> np.array([1, 2, 3.0])
+array([ 1.,  2.,  3.])
+
+
+

More than one dimension:

+
>>> np.array([[1, 2], [3, 4]])
+array([[1, 2],
+       [3, 4]])
+
+
+

Minimum dimensions 2:

+
>>> np.array([1, 2, 3], ndmin=2)
+array([[1, 2, 3]])
+
+
+

Type provided:

+
>>> np.array([1, 2, 3], dtype=complex)
+array([ 1.+0.j,  2.+0.j,  3.+0.j])
+
+
+

Data-type consisting of more than one element:

+
>>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')])
+>>> x['a']
+array([1, 3])
+
+
+

Creating an array from sub-classes:

+
>>> np.array(np.mat('1 2; 3 4'))
+array([[1, 2],
+       [3, 4]])
+
+
+
>>> np.array(np.mat('1 2; 3 4'), subok=True)
+matrix([[1, 2],
+        [3, 4]])
+
+
+
+ +
+
+class pisa.complex128(real=0, imag=0)
+

Bases: complexfloating, complex

+

Complex number type composed of two double-precision floating-point +numbers, compatible with Python complex.

+
+
Character code:
+

'D'

+
+
Canonical name:
+

numpy.cdouble

+
+
Alias:
+

numpy.cfloat

+
+
Alias:
+

numpy.complex_

+
+
Alias on this platform (Linux x86_64):
+

numpy.complex128: Complex number type composed of 2 64-bit-precision floating-point numbers.

+
+
+
+ +
+
+class pisa.complex256
+

Bases: complexfloating

+

Complex number type composed of two extended-precision floating-point +numbers.

+
+
Character code:
+

'G'

+
+
Canonical name:
+

numpy.clongdouble

+
+
Alias:
+

numpy.clongfloat

+
+
Alias:
+

numpy.longcomplex

+
+
Alias on this platform (Linux x86_64):
+

numpy.complex256: Complex number type composed of 2 128-bit extended-precision floating-point numbers.

+
+
+
+ +
+
+class pisa.complex64
+

Bases: complexfloating

+

Complex number type composed of two single-precision floating-point +numbers.

+
+
Character code:
+

'F'

+
+
Canonical name:
+

numpy.csingle

+
+
Alias:
+

numpy.singlecomplex

+
+
Alias on this platform (Linux x86_64):
+

numpy.complex64: Complex number type composed of 2 32-bit-precision floating-point numbers.

+
+
+
+ +
+
+class pisa.float32
+

Bases: floating

+

Single-precision floating-point number type, compatible with C float.

+
+
Character code:
+

'f'

+
+
Canonical name:
+

numpy.single

+
+
Alias on this platform (Linux x86_64):
+

numpy.float32: 32-bit-precision floating-point number type: sign bit, 8 bits exponent, 23 bits mantissa.

+
+
+
+
+as_integer_ratio()
+

Return a pair of integers, whose ratio is exactly equal to the original +floating point number, and with a positive denominator. +Raise OverflowError on infinities and a ValueError on NaNs.

+
>>> np.single(10.0).as_integer_ratio()
+(10, 1)
+>>> np.single(0.0).as_integer_ratio()
+(0, 1)
+>>> np.single(-.25).as_integer_ratio()
+(-1, 4)
+
+
+
+ +
+
+is_integer() bool
+

Return True if the floating point number is finite with integral +value, and False otherwise.

+
+

Added in version 1.22.

+
+

Examples

+
>>> np.single(-2.0).is_integer()
+True
+>>> np.single(3.2).is_integer()
+False
+
+
+
+ +
+ +
+
+class pisa.float64(x=0, /)
+

Bases: floating, float

+

Double-precision floating-point number type, compatible with Python float +and C double.

+
+
Character code:
+

'd'

+
+
Canonical name:
+

numpy.double

+
+
Alias:
+

numpy.float_

+
+
Alias on this platform (Linux x86_64):
+

numpy.float64: 64-bit precision floating-point number type: sign bit, 11 bits exponent, 52 bits mantissa.

+
+
+
+
+as_integer_ratio()
+

Return a pair of integers, whose ratio is exactly equal to the original +floating point number, and with a positive denominator. +Raise OverflowError on infinities and a ValueError on NaNs.

+
>>> np.double(10.0).as_integer_ratio()
+(10, 1)
+>>> np.double(0.0).as_integer_ratio()
+(0, 1)
+>>> np.double(-.25).as_integer_ratio()
+(-1, 4)
+
+
+
+ +
+
+is_integer() bool
+

Return True if the floating point number is finite with integral +value, and False otherwise.

+
+

Added in version 1.22.

+
+

Examples

+
>>> np.double(-2.0).is_integer()
+True
+>>> np.double(3.2).is_integer()
+False
+
+
+
+ +
+ +
+
+pisa.int0
+

alias of int64

+
+ +
+
+class pisa.int16
+

Bases: signedinteger

+

Signed integer type, compatible with C short.

+
+
Character code:
+

'h'

+
+
Canonical name:
+

numpy.short

+
+
Alias on this platform (Linux x86_64):
+

numpy.int16: 16-bit signed integer (-32_768 to 32_767).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.int16(127).bit_count()
+7
+>>> np.int16(-127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.int32
+

Bases: signedinteger

+

Signed integer type, compatible with C int.

+
+
Character code:
+

'i'

+
+
Canonical name:
+

numpy.intc

+
+
Alias on this platform (Linux x86_64):
+

numpy.int32: 32-bit signed integer (-2_147_483_648 to 2_147_483_647).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.int32(127).bit_count()
+7
+>>> np.int32(-127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.int64
+

Bases: signedinteger

+

Signed integer type, compatible with Python int and C long.

+
+
Character code:
+

'l'

+
+
Canonical name:
+

numpy.int_

+
+
Alias on this platform (Linux x86_64):
+

numpy.int64: 64-bit signed integer (-9_223_372_036_854_775_808 to 9_223_372_036_854_775_807).

+
+
Alias on this platform (Linux x86_64):
+

numpy.intp: Signed integer large enough to fit pointer, compatible with C intptr_t.

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.int64(127).bit_count()
+7
+>>> np.int64(-127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.int8
+

Bases: signedinteger

+

Signed integer type, compatible with C char.

+
+
Character code:
+

'b'

+
+
Canonical name:
+

numpy.byte

+
+
Alias on this platform (Linux x86_64):
+

numpy.int8: 8-bit signed integer (-128 to 127).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.int8(127).bit_count()
+7
+>>> np.int8(-127).bit_count()
+7
+
+
+
+ +
+ +
+
+pisa.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)[source]
+

Returns a new subclass of tuple with named fields.

+
>>> Point = namedtuple('Point', ['x', 'y'])
+>>> Point.__doc__                   # docstring for the new class
+'Point(x, y)'
+>>> p = Point(11, y=22)             # instantiate with positional args or keywords
+>>> p[0] + p[1]                     # indexable like a plain tuple
+33
+>>> x, y = p                        # unpack like a regular tuple
+>>> x, y
+(11, 22)
+>>> p.x + p.y                       # fields also accessible by name
+33
+>>> d = p._asdict()                 # convert to a dictionary
+>>> d['x']
+11
+>>> Point(**d)                      # convert from a dictionary
+Point(x=11, y=22)
+>>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
+Point(x=100, y=22)
+
+
+
+ +
+
+pisa.numba_jit(signature_or_function=None, locals={}, cache=False, pipeline_class=None, boundscheck=None, **options)
+

This decorator is used to compile a Python function into native code.

+
+
Parameters:
+
    +
  • signature_or_function – The (optional) signature or list of signatures to be compiled. +If not passed, required signatures will be compiled when the +decorated function is called, depending on the argument values. +As a convenience, you can directly pass the function to be compiled +instead.

  • +
  • locals (dict) – Mapping of local variable names to Numba types. Used to override the +types deduced by Numba’s type inference engine.

  • +
  • pipeline_class (type numba.compiler.CompilerBase) – The compiler pipeline type for customizing the compilation stages.

  • +
  • options

    +
    For a cpu target, valid options are:
    +
    nopython: bool

    Set to True to disable the use of PyObjects and Python API +calls. The default behavior is to allow the use of PyObjects +and Python API. Default value is True.

    +
    +
    forceobj: bool

    Set to True to force the use of PyObjects for every value. +Default value is False.

    +
    +
    looplift: bool

    Set to True to enable jitting loops in nopython mode while +leaving surrounding code in object mode. This allows functions +to allocate NumPy arrays and use Python objects, while the +tight loops in the function can still be compiled in nopython +mode. Any arrays that the tight loop uses should be created +before the loop is entered. Default value is True.

    +
    +
    error_model: str

    The error-model affects divide-by-zero behavior. +Valid values are ‘python’ and ‘numpy’. The ‘python’ model +raises exception. The ‘numpy’ model sets the result to ++/-inf or nan. Default value is ‘python’.

    +
    +
    inline: str or callable

    The inline option will determine whether a function is inlined +at into its caller if called. String options are ‘never’ +(default) which will never inline, and ‘always’, which will +always inline. If a callable is provided it will be called with +the call expression node that is requesting inlining, the +caller’s IR and callee’s IR as arguments, it is expected to +return Truthy as to whether to inline. +NOTE: This inlining is performed at the Numba IR level and is in +no way related to LLVM inlining.

    +
    +
    boundscheck: bool or None

    Set to True to enable bounds checking for array indices. Out +of bounds accesses will raise IndexError. The default is to +not do bounds checking. If False, bounds checking is disabled, +out of bounds accesses can produce garbage results or segfaults. +However, enabling bounds checking will slow down typical +functions, so it is recommended to only use this flag for +debugging. You can also set the NUMBA_BOUNDSCHECK environment +variable to 0 or 1 to globally override this flag. The default +value is None, which under normal execution equates to False, +but if debug is set to True then bounds checking will be +enabled.

    +
    +
    +
    +
    +

  • +
+
+
Returns:
+

    +
  • A callable usable as a compiled function. Actual compiling will be

  • +
  • done lazily if no explicit signatures are passed.

  • +
+

+
+
+

Examples

+

The function can be used in the following ways:

+
    +
  1. jit(signatures, **targetoptions) -> jit(function)

    +
    +

    Equivalent to:

    +
    +

    d = dispatcher(function, targetoptions) +for signature in signatures:

    +
    +

    d.compile(signature)

    +
    +
    +

    Create a dispatcher object for a python function. Then, compile +the function with the given signature(s).

    +

    Example:

    +
    +

    @jit(“int32(int32, int32)”) +def foo(x, y):

    +
    +

    return x + y

    +
    +

    @jit([“int32(int32, int32)”, “float32(float32, float32)”]) +def bar(x, y):

    +
    +

    return x + y

    +
    +
    +
    +
  2. +
  3. jit(function, **targetoptions) -> dispatcher

    +
    +

    Create a dispatcher function object that specializes at call site.

    +

    Examples:

    +
    +

    @jit +def foo(x, y):

    +
    +

    return x + y

    +
    +

    @jit(nopython=True) +def bar(x, y):

    +
    +

    return x + y

    +
    +
    +
    +
  4. +
+
+ +
+
+pisa.uint0
+

alias of uint64

+
+ +
+
+class pisa.uint16
+

Bases: unsignedinteger

+

Unsigned integer type, compatible with C unsigned short.

+
+
Character code:
+

'H'

+
+
Canonical name:
+

numpy.ushort

+
+
Alias on this platform (Linux x86_64):
+

numpy.uint16: 16-bit unsigned integer (0 to 65_535).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.uint16(127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.uint32
+

Bases: unsignedinteger

+

Unsigned integer type, compatible with C unsigned int.

+
+
Character code:
+

'I'

+
+
Canonical name:
+

numpy.uintc

+
+
Alias on this platform (Linux x86_64):
+

numpy.uint32: 32-bit unsigned integer (0 to 4_294_967_295).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.uint32(127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.uint64
+

Bases: unsignedinteger

+

Unsigned integer type, compatible with C unsigned long.

+
+
Character code:
+

'L'

+
+
Canonical name:
+

numpy.uint

+
+
Alias on this platform (Linux x86_64):
+

numpy.uint64: 64-bit unsigned integer (0 to 18_446_744_073_709_551_615).

+
+
Alias on this platform (Linux x86_64):
+

numpy.uintp: Unsigned integer large enough to fit pointer, compatible with C uintptr_t.

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.uint64(127).bit_count()
+7
+
+
+
+ +
+ +
+
+class pisa.uint8
+

Bases: unsignedinteger

+

Unsigned integer type, compatible with C unsigned char.

+
+
Character code:
+

'B'

+
+
Canonical name:
+

numpy.ubyte

+
+
Alias on this platform (Linux x86_64):
+

numpy.uint8: 8-bit unsigned integer (0 to 255).

+
+
+
+
+bit_count() int
+

Computes the number of 1-bits in the absolute value of the input. +Analogous to the builtin int.bit_count or popcount in C++.

+

Examples

+
>>> np.uint8(127).bit_count()
+7
+
+
+
+ +
+ +
+
+pisa.ureg = <pint.registry.UnitRegistry object>
+

Single Pint unit registry that should be used by all PISA code

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.scripts.html b/pisa.scripts.html new file mode 100644 index 000000000..453c4c0ac --- /dev/null +++ b/pisa.scripts.html @@ -0,0 +1,763 @@ + + + + + + + pisa.scripts package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.scripts package

+
+

Submodules

+
+
+

pisa.scripts.add_flux_to_events_file module

+

Add neutrino fluxes (and neutrino weights(osc*flux*sim_weight) if needed) for +each event.

+
+
+pisa.scripts.add_flux_to_events_file.add_fluxes_to_file(data_file_path, flux_table, flux_name, outdir=None, label=None, overwrite=False)[source]
+

Add fluxes to PISA events file (e.g. for use by an mc stage)

+
+
Parameters:
+
    +
  • data_file_path (string)

  • +
  • flux_table

  • +
  • flux_name

  • +
  • outdir (string or None) – If None, output is to the same directory as data_file_path

  • +
  • overwrite (bool, optional)

  • +
+
+
+
+ +
+
+pisa.scripts.add_flux_to_events_file.main()[source]
+

Run add_fluxes_to_file function with arguments from command line

+
+ +
+
+

pisa.scripts.compare module

+

Compare two entities: Maps, map sets, pipelines, or distribution makers. One +kind can be compared against another, so long as the resulting map(s) have +equivalent names and binning. The result each entity specification is formatted +into a MapSet and can be stored to disk so that e.g. re-running a +DistributionMaker is unnecessary to reproduce the results.

+
+
+pisa.scripts.compare.compare(outdir, ref, ref_label, test, test_label, asymm_max=None, asymm_min=None, combine=None, diff_max=None, diff_min=None, fract_diff_max=None, fract_diff_min=None, json=False, pdf=False, png=False, ref_abs=False, ref_param_selections=None, sum=None, test_abs=False, test_param_selections=None)[source]
+

Compare two entities. The result each entity specification is +formatted into a MapSet and stored to disk, so that e.g. re-running +a DistributionMaker is unnecessary to reproduce the results.

+
+
Parameters:
+
    +
  • outdir (string) – Store output plots to this directory

  • +
  • ref (string or array of strings) – Pipeline settings config file that generates reference output, +or a stored map or map set. Multiple pipelines, maps, or map sets are +supported

  • +
  • ref_abs (bool) – Use the absolute value of the reference plot for comparisons

  • +
  • ref_label (string) – Label for reference

  • +
  • ref_param-selections (string) – Param selections to apply to ref pipeline config(s). Not +applicable if ref specifies stored map or map sets

  • +
  • test (string or array of strings) – Pipeline settings config file that generates test output, or a +stored map or map set. Multiple pipelines, maps, or map sets are +supported

  • +
  • test_abs (bool) – Use the absolute value of the test plot for comparisons

  • +
  • test_label (string) – Label for test

  • +
  • test_param_selections (None or string) – Param selections to apply to test pipeline config(s). Not +applicable if test specifies stored map or map sets

  • +
  • combine (None or string or array of strings) – Combine by wildcard string, where string globbing (a la command +line) uses asterisk for any number of wildcard characters. Use +single quotes such that asterisks do not get expanded by the +shell. Multiple combine strings supported

  • +
  • sum (None or int) – Sum over (and hence remove) the specified axis or axes. I.e., +project the map onto remaining (unspecified) axis or axes

  • +
  • json (bool) – Save output maps in compressed json (json.bz2) format

  • +
  • pdf (bool) – Save plots in PDF format. If neither this nor png is +specified, no plots are produced

  • +
  • png (bool) – Save plots in PNG format. If neither this nor pdf is specfied, +no plots are produced

  • +
  • diff_min (None or float) – Difference plot vmin; if you specify only one of diff_min or +diff_max, symmetric limits are automatically used (min = -max)

  • +
  • diff_max (None or float) – Difference plot max; if you specify only one of diff_min or +diff_max, symmetric limits are automatically used (min = -max)

  • +
  • fract_diff_min (None or float) – Fractional difference plot vmin; if you specify only one of +fract_diff_min or fract_diff_max, symmetric limits are +automatically used (min = -max)

  • +
  • fract_diff_max (None or float) – Fractional difference plot max; if you specify only one of +fract_diff_min or fract_diff_max, symmetric limits are +automatically used (min = -max)

  • +
  • asymm_min (None or float) – Asymmetry plot vmin; if you specify only one of asymm_min or +asymm_max, symmetric limits are automatically used (min = -max)

  • +
  • asymm_max (None or float) – Fractional difference plot max; if you specify only one of +asymm_min or asymm_max, symmetric limits are automatically used +(min = -max)

  • +
+
+
Returns:
+

    +
  • summary_stats (dict) – Dictionary containing a summary for each h Map processed

  • +
  • diff (MapSet) – MapSet of the difference +- (Test - Ref)

  • +
  • fract_diff (MapSet) – MapSet of the fractional difference +- (Test - Ref) / Ref

  • +
  • asymm (MapSet) – MapSet of the asymmetric fraction difference or pull +- (Test - Ref) / sqrt(Ref)

  • +
+

+
+
+
+ +
+
+pisa.scripts.compare.main()[source]
+

Function used from command-line calls (either python compare.py or via +installer’s console scripts (see setup.py).

+
+ +
+
+pisa.scripts.compare.parse_args()[source]
+

Parse command line arguments

+
+ +
+
+

pisa.scripts.convert_config_format module

+

Convert PISA config files from format used up until July 2017 to the new config +file format.

+
+
+pisa.scripts.convert_config_format.main()[source]
+

Do the conversion.

+
+ +
+
+pisa.scripts.convert_config_format.parse_args(description='\nConvert PISA config files from format used up until July 2017 to the new config\nfile format.\n')[source]
+

Parse command line arguments

+
+ +
+
+

pisa.scripts.create_barr_sys_tables_mceq module

+
+
+

pisa.scripts.fit_hypersurfaces module

+

Fit a hypersurface to discrete systematics datasets – as specified by a fit config +file – and produce a fit file usable by, e.g., the discr_sys.hypersurfaces service.

+

For more details, see pisa/utils/hypersurface.pu

+

A script for making plots from the fit results produced by this file can be found in the +Fridge (private repository) at

+
+

fridge/analysis/common/scripts/plotting/plot_hypersurface_fits.py

+
+

See example fit config files in directory pisa_examples/resources/discr_sys/.

+
+

Config file syntax

+
+

“general” section

+

You must define a “general” section which must have at least options “sys_list” and +“sys_func_list” and can optionally include options “units” and “combine_regex”. You +can add more options to the “general” section, but they will be ignored by PISA unless +they are explicitly referenced elsewhere in your config file. E.g., a “general” +section with all three required and optional options (and no more)

+
[general]
+sys_list = dom_eff, hole_ice, hole_ice_fwd
+sys_func_list = linear, exponential, linear
+units = dimensionless, dimensionless, dimensionless
+combine_regex = ["nue.*_cc", "numu.*_cc", "nutau.*_cc", ".*_nc"]
+
+
+

If “units” is not specified, units default to “dimensionless” for all systematics. If +specified, there must be the same number of comma-separated units strings +(interpret-able by the Pint module) as there are options in the “sys_list”.

+

Note that “combine_regex” should be Python-evaulatable to a string or a sequence of +strings. Old versions of this script allowed values like

+
combine_regex = nue.*_cc,numu.*_cc,nutau.*_cc,.*_nc
+
+
+

but unambiguously parsing such a single comma-separated string of one or more regexes +(which themselves can contian commas) is probably impossible, so this syntax is +deprecated (a warning is emitted if it is detected) and should be avoided.

+
+
+

“apply_to_all_sets” section

+

You can optionally include an “apply_to_all_sets” section in your config that, true to +its name, defines options applied to all systematic sets sections in the file. E.g.,

+
[apply_to_all_sets]
+pipeline_cfg = settings/pipeline/nutau_mc_baseline.cfg
+remove [discr_sys.hypersurfaces] =
+set [data.simple_data_loader] data_dict = {
+    'true_energy': 'true_energy',
+    'true_coszen': 'true_coszen',
+    'reco_energy': 'reco_energy',
+    'reco_coszen': 'reco_coszen',
+    'pid': 'pid',
+    'weighted_aeff': 'weighted_aeff',
+    'dunkman_L5': 'dunkman_L5',
+    }
+
+
+

The above sets “pipeline_cfg” for all discr sets, removes the “discr_sys.hypersurfaces” +service, and redefines the “data_dict” in the “data.simple_data_loader” section. Any +options defined in the discrete set sections of the config will start with this as their +configuration. Details of the above syntax are described more below.

+
+
+

“nominal_set” and “sys_set” sections

+

All other required sections in the config file describe the discrete sets and must +define a “pipeline_cfg” for that systematics set (whether explicitly in the section or +via the “apply_to_all_sets” section). A systematics set section either starts with +“nominal_set” (for one and only one set) or “sys_set” (for all remaining sets), followed +by a colon and magnitudes of the values of each systematic specified in “general” +section / “sys_list” option (in the same order as defined there). E.g., continuing the +example config file defined in the above examples,

+
[nominal_set : 1.00 , 25 , 0.0]
+set [data.simple_data_loader] events_file = /path/to/nominal_set.hdf5
+
+[sys_set : 0.88 , 22 , 0.1]
+set [data.simple_data_loader] events_file = /path/to/sys_set_1.hdf5
+
+[sys_set : 1.12 , 28 , 0.2]
+set [data.simple_data_loader] events_file = /path/to/sys_set_2.hdf5
+
+
+

and so forth. Note that all magnitudes must be specified in the same units specified in +“general” section / “units” option, or if that option is not specified, all magnitudes +must represent dimensionless quantities. Also note that the “pipeline_cfg” is already +defined in the above “apply_to_all_sets” section, so each of these sys set sections +simply swap out the events_file in that pipeline config file for the appropriate events +file.

+
+
+

Syntax for modifying the specified “pipeline_cfg”

+

The following syntax is interpreted if specified in “apply_to_all_sets”, “sys_set”, +and/or “nominal_set” sections. Note an “apply_to_all_sets” section must specify a +“pipeline_cfg” for any of the following syntax to be used.

+

Define or redefine an option via the “set” keyword followed by the section in square +brackets, the option, either equals (=) or colon (:), and finally the value to set the +option to. E.g., “events_file” in config section “data.simple_data_loader” is set to +“settings/pipeline/example.cfg” via

+
set [data.simple_data_loader] events_file = settings/pipeline/example.cfg
+
+
+

the section is created if it doesn’t exist and the option “events_file” is added to that +section if it doesn’t already exist.

+

You can create a new section (if it doesn’t already exist) via the “set” keyword +followed by the section in square brackets and either equals (=) or colon (:). Anything +following the equals/colon is ignored. E.g. to add the “data.simple_data_loader” section +(if it doesn’t already exist),

+
set [data.simple_data_loader] =
+
+
+
+
+

Notes on whitespace

+

Whitespace is ignored in section names and in lists, so the following are interpreted +equivalently

+
[ sys_set : 0.88 , 22 , 0.1 ]
+[sys_set:0.88,22,0.1]
+
+
+

Likewise, the following are all equivalent

+
sys_list = aa,bb,cc
+sys_list = aa , bb , cc
+
+
+
+
+
+
+pisa.scripts.fit_hypersurfaces.APPLY_ALL_SECTION_NAME = 'apply_to_all_sets'
+

section name that defines pipeline config / options for all discr sets

+
+ +
+
+pisa.scripts.fit_hypersurfaces.COMBINE_REGEX_OPTION = 'combine_regex'
+

Option in general section to specify map(s) to combine before performing fit

+
+ +
+
+pisa.scripts.fit_hypersurfaces.GENERAL_SECTION_NAME = 'general'
+

general section name

+
+ +
+
+pisa.scripts.fit_hypersurfaces.REMOVE_OPTION_RE = re.compile('\\s*remove\\s*\\[(.*)\\]\\s*(\\S*.*)')
+

modifications to pipeline configs are specified by options following this pattern

+
+ +
+
+pisa.scripts.fit_hypersurfaces.SET_OPTION_RE = re.compile('\\s*set\\s*\\[(.*)\\]\\s*(\\S*.*)')
+

defining a section and/or an option within a section in a pipeline configs is +specified by following this pattern

+
+ +
+
+pisa.scripts.fit_hypersurfaces.SYS_FUNC_LIST_OPTION = 'sys_func_list'
+

Option in general section to specify functional form of the discrete systematics

+
+ +
+
+pisa.scripts.fit_hypersurfaces.SYS_LIST_OPTION = 'sys_list'
+

Option in general section to specify discrete systematics

+
+ +
+
+pisa.scripts.fit_hypersurfaces.SYS_SET_OPTION = 'pipeline_cfg'
+

systematics set config file is specified by this option

+
+ +
+
+pisa.scripts.fit_hypersurfaces.UNITS_OPTION = 'units'
+

Option in general section to specify units of discrete systematics

+
+ +
+
+pisa.scripts.fit_hypersurfaces.UNITS_SPECIFIER = 'units.'
+

User is allowed to use e.g. <UNITS_SPECIFIER>meter or simply meter in UNITS_OPTION

+
+ +
+
+pisa.scripts.fit_hypersurfaces.create_hypersurfaces(fit_cfg)[source]
+

Generate and store mapsets for different discrete systematics sets +(with a single set characterised by a dedicated pipeline configuration)

+
+
Parameters:
+

fit_cfg (string) – Path to a fit config file

+
+
Returns:
+

hypersurfaces – Container with the fitted hypersurface for each map type

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+pisa.scripts.fit_hypersurfaces.load_and_modify_pipeline_cfg(fit_cfg, section)[source]
+

Load and modify the pipeline config file as specified in that section of the fit +config.

+
+
Parameters:
+
+
+
Returns:
+

    +
  • pipeline_cfg (pisa.utils.config_parser.PISAConfigParser) – pipeline config

  • +
  • pipeline_cfg_path (str) – path to the pipeline config as it is specified in the fit config

  • +
+

+
+
+
+ +
+
+pisa.scripts.fit_hypersurfaces.main()[source]
+

Perform a hypersurface fit to discrete systematics sets.

+
+ +
+
+pisa.scripts.fit_hypersurfaces.parse_args()[source]
+

Parse arguments from command line.

+
+
Returns:
+

args

+
+
Return type:
+

namespace

+
+
+
+ +
+
+pisa.scripts.fit_hypersurfaces.parse_fit_config(fit_cfg)[source]
+

Perform sanity checks on and parse fit configuration file.

+
+
Parameters:
+

fit_cfg (str) – path to a fit configuration file

+
+
Returns:
+

    +
  • fit_cfg (PISAConfigParser) – parsed fit configuration

  • +
  • sys_list (list of str) – parsed names of systematic parameters

  • +
  • sys_func_list (list of str) – parsed names of systematic parameter functional forms

  • +
  • units_list (list of str) – units corresponding to each discrete systematic

  • +
  • combine_regex (list of str) – each string is a regular expression for combining pipeline outputs; see +pisa.core.map.MapSet.combine_regex() for details.

  • +
+

+
+
+
+ +
+
+

pisa.scripts.make_events_file module

+

Take simulated (and reconstructed) HDF5 file(s) (as converted from I3 by +icecube.hdfwriter.I3HDFTableService) as input and writes out a simplified HDF5 +file for use with PISA.

+
+
+pisa.scripts.make_events_file.CMSQ_TO_MSQ = 0.0001
+

convert from centimeters^2 to meters^2

+
+
Type:
+

Conversion factor

+
+
+
+ +
+
+pisa.scripts.make_events_file.main()[source]
+
+ +
+
+pisa.scripts.make_events_file.makeEventsFile(data_files, detector, proc_ver, cut, outdir, run_settings=None, data_proc_params=None, join=None, cust_cuts=None, extract_fields=('true_energy', 'true_coszen', 'reco_energy', 'reco_coszen', 'one_weight', 'interaction_prob', 'pid'), output_fields=('true_energy', 'true_coszen', 'reco_energy', 'reco_coszen', 'weighted_aeff', 'pid'))[source]
+

Take the simulated and reconstructed HDF5 file(s) (as converted from I3 +by icecube.hdfwriter.I3HDFTableService) as input and write out a simplified +PISA-standard-format HDF5 file for use in aeff, reco, and/or PID stages.

+
+
Parameters:
+
    +
  • data_files (dict) –

    +
    File paths for finding data files for each run, formatted as:
    +
    {

    <string run>: <list of file paths>, +<string run>: <list of file paths>, +… +<string run>: <list of file paths>,

    +
    +
    +

    }

    +
    +
    +

  • +
  • detector (string) – Name of the detector (e.g. IceCube, DeepCore, PINGU, etc.) as found in +e.g. mc_sim_run_settings.json and data_proc_params.json files.

  • +
  • proc_ver – Version of processing applied to the events, as found in e.g. +data_proc_params.json.

  • +
  • cut – Name of a standard cut to use; must be specified in the relevant +detector/processing version node of the data processing parameters +(file from which the data_proc_params object was instantiated)

  • +
  • outdir – Directory path in which to store resulting files; will be generated if +it does not already exist (including any parent directories that do not +exist)

  • +
  • run_settings (string or MCSimRunSettings) – Resource location of mc_sim_run_settings.json or an MCSimRunSettings +object instantiated therefrom.

  • +
  • data_proc_params (string or DataProcParams) – Resource location of data_proc_params.json or a DataProcParams object +instantiated therefrom.

  • +
  • join

    String specifying any flavor/interaction types (flavInts) to join +together. Separate flavInts with commas (‘,’) and separate groups +with semicolons (‘;’). E.g. an acceptable string is:

    +
    +

    ’numucc+numubarcc; nuall bar NC, nuall NC’

    +
    +

  • +
  • cust_cuts – dict with a single DataProcParams cut specification or list of same +(see help for DataProcParams for detailed description of cut spec)

  • +
  • extract_fields (None or iterable of strings) – Field names to extract from source HDF5 file. If None, extract all +fields.

  • +
  • output_fields (None or iterable of strings) – Fields to include in the generated PISA-standard-format events HDF5 +file; note that if ‘weighted_aeff’ is not preent, effective area will +not be computed. If None, all fields will be written.

  • +
+
+
+

Notes

+

Compute “weighted_aeff” field:

+

Within each int type (CC or NC), ngen should be added together; +events recorded of that int type then get their one_weight divided by the +total for that int type only to obtain the “weighted_aeff” for that +event (even if int types are being grouped/joined together).

+
+
This has the effect that within a group, …

… and within an interaction type, effective area is a weighted +average of that of the flavors being combined. E.g. for CC,

+
+
+

sum_{run x}sum_{flav y} (Aeff_{x,y} * ngen_{x,y})

+
+
+
Aeff_CC = —————————————————– ,

sum_{run x}sum_{flav y} (ngen_{x,y})

+
+
+
+

… and then across interaction types, the results of the above for +each int type need to be summed together, i.e.:

+
+

Aeff_total = Aeff_CC + Aeff_NC

+
+
+
+

Note that each grouping of flavors is calculated with the above math +completely independently from other flavor groupings specified.

+

See Justin Lanfranchi’s presentation on the PINGU Analysis call, +2015-10-21, for more details:

+
+
+
+ +
+
+pisa.scripts.make_events_file.parse_args()[source]
+

Get command line arguments

+
+ +
+
+pisa.scripts.make_events_file.powerLawIntegral(E0, E1, gamma)[source]
+
+ +
+
+

pisa.scripts.make_nufit_theta23_spline_priors module

+

Create splines to the NuFit delta-chi2 surfaces for theta23 and output them in +a format that can be read by PISA to use as a prior on this parameter.

+
+
+pisa.scripts.make_nufit_theta23_spline_priors.extract_vals(infile, string_of_interest)[source]
+
+ +
+
+pisa.scripts.make_nufit_theta23_spline_priors.main()[source]
+

Create splines to the NuFit delta-chi2 surfaces for theta23 and output them in +a format that can be read by PISA to use as a prior on this parameter.

+
+ +
+
+pisa.scripts.make_nufit_theta23_spline_priors.make_prior_dict(f_io=None, f_no=None, f=None)[source]
+
+ +
+
+

pisa.scripts.test_flux_weights module

+

A set of tests on the flux weights calculated by PISA.

+
+
+pisa.scripts.test_flux_weights.do_1d_2d_bartol_test(spline_dict, flux_dict, outdir, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_1d_2d_honda_test(spline_dict, flux_dict, legend_filename, save_name, outdir, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_1d_3d_honda_test(spline_dict, flux_dict, legend_filename, save_name, outdir, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_2d_2d_bartol_test(spline_dict, flux_dict, outdir, ip_checks, oversample, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_2d_2d_comparisons(honda_spline_dict, bartol_spline_dict, outdir, oversample, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_2d_2d_honda_test(spline_dict, flux_dict, outdir, ip_checks, oversample, save_name, title_filename, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.do_2d_3d_honda_test(spline_dict, flux_dict, outdir, oversample, save_name, title_filename, flav, flavtex, enpow=1)[source]
+
+ +
+
+pisa.scripts.test_flux_weights.logplot(m, title, ax, clabel, cmap=<matplotlib.colors.LinearSegmentedColormap object>, logz=True, largelabels=False, medlabels=False)[source]
+

Simple plotting of a 2D histogram (map)

+
+ +
+
+pisa.scripts.test_flux_weights.main()[source]
+
+ +
+
+pisa.scripts.test_flux_weights.plot_1d_slices(xintvals, yintvals, xtabvals, ytabvals, xtabbins, xlabel, ylabel, xtext, ytext, text, table_name, save_name, log)[source]
+

Test function to show interpolation and tables overlaid in 1D slices. +See main function for how to use this function.

+
+
Parameters:
+
    +
  • xintvals (list) – A list of the x points where the spline was evaluated.

  • +
  • yintvals (list) – A list of the y points which the spline evaluated to.

  • +
  • xtabvals (list) – A list of the x points where the table is defined.

  • +
  • ytabvals (list) – A list of the y points where the table is defined.

  • +
  • xtabbins (list) – A list of the bin edges. Should have xtabvals as the bin centres.

  • +
  • xlabel (string) – A label for the x-axis of the plot.

  • +
  • ylabel (string) – A label for the y-axis of the plot.

  • +
  • xtext (float) – The position for the text label showing the slice along x.

  • +
  • ytext (float) – The position for the text label showing the slice along y.

  • +
  • text (string) – The text label showing the slice.

  • +
  • table_name (string) – The text label naming the tables used

  • +
  • save_name (string) – The place and name to save the plot.

  • +
  • log (bool) – A boolean to whether the axes should be made logarithmic. +Will do both.

  • +
+
+
+
+ +
+
+pisa.scripts.test_flux_weights.take_average(interp_map, oversampling)[source]
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.absorption.html b/pisa.stages.absorption.html new file mode 100644 index 000000000..48d0fba19 --- /dev/null +++ b/pisa.stages.absorption.html @@ -0,0 +1,212 @@ + + + + + + + pisa.stages.absorption package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.absorption package

+
+

Submodules

+
+
+

pisa.stages.absorption.earth_absorption module

+

PISA pi stage for the calculation of earth layers and survival probabilities.

+

The stage calculates first the depth of a water column that is mass-equivalent +to the path traversed by the neutrino through the earth. This is done +using the same Layers module that is also used for oscillation. +The survival probability is then calculated from the average cross-section +with protons and neutrons.

+
+
+pisa.stages.absorption.earth_absorption.FLAV_BAR_STR_MAPPING = {(0, -1): 'e_bar', (0, 1): 'e', (1, -1): 'mu_bar', (1, 1): 'mu', (2, -1): 'tau_bar', (2, 1): 'tau'}
+

Mapping from flav and nubar container content to +the string for this neutrino in the ROOT file.

+
+ +
+
+pisa.stages.absorption.earth_absorption.calculate_survivalprob(int_rho, xsection, out)[source]
+

Calculate survival probability given layer distances, +layer densities and (pre-computed) cross-sections.

+
+
Parameters:
+
    +
  • int_rho (scalar) – depth of mass equivalent water column in cm

  • +
  • xsection (scalar) – cross-section per nucleon in cm^2

  • +
  • out (scalar) – Result is stored here

  • +
+
+
+
+ +
+
+class pisa.stages.absorption.earth_absorption.earth_absorption(earth_model, xsec_file, detector_depth=<Quantity(2.0, 'kilometer')>, prop_height=<Quantity(20.0, 'kilometer')>, **std_kwargs)[source]
+

Bases: Stage

+

earth absorption PISA Pi class

+
+
Parameters:
+
    +
  • earth_model (str) – PREM file path

  • +
  • xsec_file (str) – path to ROOT file containing cross-sections

  • +
  • detector_depth (quantity (distance), optional) – detector depth

  • +
  • prop_height (quantity (distance), optional) – height of neutrino production in the atmosphere

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+calculate_xsections(flav, nubar, energy)[source]
+

Calculates the cross-sections on isoscalar targets. +The result is returned in cm^2. The xsection on one +target is calculated by taking the xsection for O16 +and dividing it by 16.

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.aeff.html b/pisa.stages.aeff.html new file mode 100644 index 000000000..5f4119971 --- /dev/null +++ b/pisa.stages.aeff.html @@ -0,0 +1,253 @@ + + + + + + + pisa.stages.aeff package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.aeff package

+
+

Submodules

+
+
+

pisa.stages.aeff.aeff module

+

PISA pi stage to apply effective area weights

+
+
+class pisa.stages.aeff.aeff.aeff(**std_kwargs)[source]
+

Bases: Stage

+

PISA Pi stage to apply aeff weights.

+

This combines the detector effective area with the flux weights calculated +in an earlier stage to compute the weights.

+

Various scalings can be applied for particular event classes. The weight is +then multiplied by the livetime to get an event count.

+
+
Parameters:
+

params

Expected params are ..

+
livetime : Quantity with time units
+aeff_scale : dimensionless Quantity
+nutau_cc_norm : dimensionless Quantity
+nutau_norm : dimensionless Quantity
+nu_nc_norm : dimensionless Quantity
+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.aeff.weight module

+

PISA pi stage to apply weights

+
+
+class pisa.stages.aeff.weight.weight(**std_kwargs)[source]
+

Bases: Stage

+

PISA Pi stage to apply weights. +This assumes a weight has already been calculated. +The weight is then multiplied by the livetime to get an event count.

+
+
Parameters:
+

params (ParamSet or sequence with which to instantiate a ParamSet.) –

Expected params are: ..

+
livetime : Quantity [time]
+    Detector livetime for scaling template
+weight_scale : Quantity [dimensionless]
+    Overall scaling/normalisation of template
+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.aeff.weight_hnl module

+

PISA pi stage to apply HNL specific re-weighting

+
+
+pisa.stages.aeff.weight_hnl.re_weight_hnl(U_tau4_sq, mass, energy, tau, distance_min, distance_max, hnl_decay_width, c=<Quantity(2.99792458e+08, 'meter / second')>, hbar=<Quantity(6.58211957e-25, 'gigaelectron_volt * second')>)[source]
+

Function to re-weight HNL events (from sampling 1/L to target exponential)

+
+
Parameters:
+
    +
  • U_tau4_sq (float) – Square of the HNL mixing angle

  • +
  • mass (float) – HNL mass in GeV

  • +
  • energy (float) – HNL energy in GeV

  • +
  • tau (float) – HNL proper lifetime in ns

  • +
  • distance_min (float) – Minimum sampling distance of HNL decay in m

  • +
  • distance_max (float) – Maximum sampling distance of HNL decay in m

  • +
  • hnl_decay_width (float) – HNL decay width in GeV

  • +
+
+
Returns:
+

weight_lifetime – Weight to re-weight HNL events

+
+
Return type:
+

float

+
+
+
+ +
+
+class pisa.stages.aeff.weight_hnl.weight_hnl(**std_kwargs)[source]
+

Bases: Stage

+

PISA pi stage to apply HNL specific re-weighting.

+

This re-weights HNL events from sampling 1/L to target exponential and applies .

+
+
Parameters:
+

params

+
Expected params are .. ::

U_tau4_sq : dimensionless Quantity

+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.background.html b/pisa.stages.background.html new file mode 100644 index 000000000..3503a4691 --- /dev/null +++ b/pisa.stages.background.html @@ -0,0 +1,182 @@ + + + + + + + pisa.stages.background package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.background package

+
+

Submodules

+
+
+

pisa.stages.background.atm_muons module

+
+
+class pisa.stages.background.atm_muons.atm_muons(input_names, **std_kwargs)[source]
+

Bases: Stage

+

Stage to handle atmospheric muon background systematics. +Typically this is used with muons generated by MuonGun, but should be +generic to other generators. +Note that this stage only modifies an weights based on the systematics, +it does not determine the nominal flux (this is assumed to either already +available in the input files, or written by an upstream stage).

+
+
Parameters:
+

params (ParamSet or instantiable thereto) –

Parameters for steering the stage. The following parameters must be included: ..

+
atm_muon_scale : quantity (dimensionless)
+    Normalisation of atmospheric muons
+delta_gamma_mu_file : str
+    Path to file containing spectral index data
+delta_gamma_mu_spline_kind : str
+    'kind' of spline, as per kwargs in scipy interp1d
+delta_gamma_mu_variable : str
+    Name of variable in which the delta spectral index is splined
+    Currently only supported variable is 'coszen'
+delta_gamma_mu : quantity (dimensionless)
+    Parameter controlling variation in spectral index
+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.combine.html b/pisa.stages.combine.html new file mode 100644 index 000000000..e51e56107 --- /dev/null +++ b/pisa.stages.combine.html @@ -0,0 +1,117 @@ + + + + + + + pisa.stages.combine package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.combine package

+
+

Submodules

+
+
+

pisa.stages.combine.nutau module

+
+
+

Module contents

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.data.html b/pisa.stages.data.html new file mode 100644 index 000000000..e9962c091 --- /dev/null +++ b/pisa.stages.data.html @@ -0,0 +1,555 @@ + + + + + + + pisa.stages.data package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.data package

+
+

Submodules

+
+
+

pisa.stages.data.csv_data_hist module

+

A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet

+
+
+class pisa.stages.data.csv_data_hist.csv_data_hist(events_file, **std_kwargs)[source]
+

Bases: Stage

+

CSV file loader PISA Pi class

+
+
Parameters:
+

events_file (csv file path)

+
+
+
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.data.csv_icc_hist module

+

A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet

+
+
+class pisa.stages.data.csv_icc_hist.csv_icc_hist(events_file, **std_kwargs)[source]
+

Bases: Stage

+

CSV file loader PISA class

+
+
Parameters:
+

events_file (csv file path)

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.data.csv_loader module

+

A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet

+
+
+class pisa.stages.data.csv_loader.csv_loader(events_file, output_names, **std_kwargs)[source]
+

Bases: Stage

+

CSV file loader PISA Pi class

+
+
Parameters:
+
    +
  • events_file (csv file path)

  • +
  • **kwargs – Passed to Stage

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.data.freedom_hdf5_loader module

+

A Stage to load data from a FreeDOM hdf5 file (generated using the I3HDFWriter)

+
+
+class pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader(events_file, files_per_flavor, output_names, reco, keys, cuts, track_E_cut=None, **std_kwargs)[source]
+

Bases: Stage

+

FreeDOM hdf5 file loader

+
+
Parameters:
+
    +
  • events_file (hdf5 file path)

  • +
  • files_per_flavor (list) – number of files for each nu flavor

  • +
  • reco (str) – which reco to use

  • +
  • keys (list) – which keys to unpack

  • +
  • cuts (dict) – cuts to apply when loading the data

  • +
  • track_E_cut (float) – track energy cut for PID. +If not set, L7_PIDClassifier_ProbTrack will be used

  • +
  • **kwargs – Passed to Stage

  • +
+
+
+
+
+apply_cuts(data, cuts)[source]
+

apply cuts in place

+
+ +
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+calc_rho36(data)[source]
+
+ +
+
+calc_uncertainties(data, epsilon=1e-15)[source]
+

add uncertainty estimates to data; return modified data

+
+ +
+
+static fill_variable_dict(name, node, var_dict)[source]
+
+ +
+
+load_hdf5_file(f_name)[source]
+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+unpack_file_data(file)[source]
+
+ +
+ +
+
+

pisa.stages.data.grid module

+

Stage to create a grid of data

+
+
+class pisa.stages.data.grid.grid(grid_binning, entity='midpoints', output_names=None, **std_kwargs)[source]
+

Bases: Stage

+

Create a grid of events

+
+
Parameters:
+

generated (Binning object defining the grid to be)

+
+
+
+
entitystr

entity arg to be passed to MultiDimBinning.meshgrid (see that +fucntion docs for details)

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.data.licloader_weighter module

+
+
+

pisa.stages.data.meows_loader module

+

A class to load in the MEOWS hdf5 files

+
+
+class pisa.stages.data.meows_loader.meows_loader(events_file: str, n_files: int, output_names, **std_kwargs)[source]
+

Bases: Stage

+

Docstring incoming…

+
+
+apply_function()[source]
+

Resets all the weights to the initial weights

+
+ +
+
+setup_function()[source]
+

Go over all those input files and load them in.

+

We load the first data in specifically to setup the containers, and afterwards go through appending to the end of those arrays

+
+ +
+ +
+
+

pisa.stages.data.simple_data_loader module

+

A Stage to load data from a PISA style hdf5 file into a PISA pi ContainerSet

+
+
+class pisa.stages.data.simple_data_loader.simple_data_loader(events_file, mc_cuts, data_dict, neutrinos=True, required_metadata=None, fraction_events_to_keep=None, events_subsample_index=0, seed=123456, output_names=None, **std_kwargs)[source]
+

Bases: Stage

+

HDF5 file loader PISA Pi class

+
+
Parameters:
+
    +
  • events_file (hdf5 file path) – output from make_events, including flux weights +and Genie systematics coefficients

  • +
  • mc_cuts (cut expr) – e.g. ‘(true_coszen <= 0.5) & (true_energy <= 70)’

  • +
  • data_dict (str of a dict) – Dictionary to specify what keys from the hdf5 files to be loaded +under what name. Entries can be strings that point to the right +key in the hdf5 file or lists of keys, and the data will be +stacked into a 2d array.

  • +
  • neutrinos (bool) – Flag indicating whether data events represent neutrinos +In this case, special handling for e.g. nu/nubar, CC vs NC, …

  • +
  • fraction_events_to_keep (float) – Fraction of loaded events to use (use to downsample). +Must be in range [0.,1.], or disable by setting to None. +Default in None.

  • +
+
+
+

Notes

+

Looks for initial_weights fields in events file, which will serve +as nominal weights for all events included. +No fields named weights may already be present.

+
+
+apply_cuts_to_events()[source]
+

Just apply any cuts that the user defined

+
+ +
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+load_events()[source]
+

Loads events from events file

+
+ +
+
+record_event_properties()[source]
+

Adds fields present in events file and selected in self.data_dict +into containers for the specified output names. Also ensures the +presence of a set of nominal weights.

+
+ +
+
+setup_function()[source]
+

Store event properties from events file at +service initialisation. Cf. Stage docs.

+
+ +
+ +
+
+

pisa.stages.data.simple_signal module

+

Stage to generate simple 1D data consisting +of a flat background + gaussian peak with a mean and a width

+
+
+class pisa.stages.data.simple_signal.simple_signal(**std_kwargs)[source]
+

Bases: Stage

+

random toy event generator PISA class

+
+
Parameters:
+

params

Expected params ..

+
n_events : int
+    Number of events to be generated per output name
+random
+seed : int
+    Seed to be used for random
+
+
+

+
+
+
+
+apply_function()[source]
+

This is where we re-weight the signal container +based on a model gaussian with tunable parameters +mu and sigma.

+

The background is left untouched in this step.

+

A possible upgrade to this function would be to make a +small background re-weighting

+

This function will be called at every iteration of the minimizer

+
+ +
+
+setup_function()[source]
+

This is where we figure out how many events to generate, +define their weights relative to the data statistics +and initialize the container we will need

+

This function is run once when we instantiate the pipeline

+
+ +
+ +
+
+

pisa.stages.data.sqlite_loader module

+
+
+class pisa.stages.data.sqlite_loader.sqlite_loader(database, output_names, post_fix='_pred', **std_kwargs)[source]
+

Bases: Stage

+

SQLite loader PISA Pi class +:param database: +:type database: path to sqlite database +:param **kwargs: Passed to Stage

+
+
+add_aeff_weight(container, truth, n_files)[source]
+
+ +
+
+add_reco(container, reco)[source]
+

Adds reconstructed quantities to container

+
+ +
+
+add_truth(container, truth, nubar, flavor)[source]
+

Adds truth to container

+
+ +
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+get_pid_and_interaction_type(name)[source]
+

Sorry

+
+ +
+
+initialize_weights(container)[source]
+
+ +
+
+query_database(interaction_type, pid)[source]
+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.data.toy_event_generator module

+

Stage to generate some random data

+
+
+class pisa.stages.data.toy_event_generator.toy_event_generator(output_names, **std_kwargs)[source]
+

Bases: Stage

+

random toy event generator PISA Pi class

+
+
Parameters:
+
    +
  • output_names (str) – list of output names

  • +
  • params

    Expected params ..

    +
    n_events : int
    +    Number of events to be generated per output name
    +random
    +seed : int
    +    Seed to be used for random
    +
    +
    +

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.discr_sys.html b/pisa.stages.discr_sys.html new file mode 100644 index 000000000..f6829ddbc --- /dev/null +++ b/pisa.stages.discr_sys.html @@ -0,0 +1,237 @@ + + + + + + + pisa.stages.discr_sys package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.discr_sys package

+
+

Submodules

+
+
+

pisa.stages.discr_sys.hypersurfaces module

+

PISA pi stage to apply hypersurface fits from discrete systematics parameterizations

+
+
+class pisa.stages.discr_sys.hypersurfaces.hypersurfaces(fit_results_file, propagate_uncertainty=False, interpolated=False, links=None, fluctuate=False, fluctuate_seed=12345, **std_kwargs)[source]
+

Bases: Stage

+

Service to apply hypersurface parameterisation produced by +scripts.fit_discrete_sys_nd

+
+
Parameters:
+
    +
  • fit_results_file (str) – Path to hypersurface fit results file, i.e. the JSON file produced by the +pisa.scripts.fit_discrete_sys_nd.py script

  • +
  • propagate_uncertainty (bool, optional) – Propagate the uncertainties from the hypersurface to the uncertainty of +the output

  • +
  • params (ParamSet) – Note that the params required to be in params are determined from +those listed in the fit_results_file.

  • +
  • interpolated (bool) – If True, indicates that the hypersurfaces to be loaded are interpolated.

  • +
  • links (dict) – A dictionary defining how containers should be linked. Keys are the names of +the merged containers, values are lists of containers being linked together. +Keys must be a sub-set of the loaded hypersurfaces.

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Load the fit results from the file and make some check compatibility

+
+ +
+ +
+
+

pisa.stages.discr_sys.ultrasurfaces module

+

PISA pi stage to apply ultrasurface fits from discrete systematics parameterizations

+
+
+class pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces(fit_results_file, nominal_points, varnames=['pid', 'true_coszen', 'reco_coszen', 'true_energy', 'reco_energy'], approx_exponential=False, support=None, extrapolation='continue', **std_kwargs)[source]
+

Bases: Stage

+

Service to apply ultrasurface parameterisation stored in a feather file.

+
+
Parameters:
+
    +
  • fit_results_file (str) – Path to .feather file containing all nominal events with gradients.

  • +
  • nominal_points (str or dict) – Dictionary (or str that can be evaluated thereto) of the form +{‘parameter_name’: <nominal value>} containing the nominal value for each +parameter that was used to fit the gradients with.

  • +
  • varnames (list of str) – List of variables to match the pisa events to the pre-fitted events.

  • +
  • approx_exponential (bool) – Approximate the exponential using exp(x) = 1 + x. This is appropriate when +gradients have been fit with the purely linear hardmax activation function. +(If you don’t know what that is, just leave it at False.)

  • +
  • support (str or dict) – Dictionary (or str that can be evaluated thereto) of the form {‘parameter_name’: +(lower bound, upper bound)} containing the bounds of the parameter space inside +which the gradients are valid. If a value outside of these bounds is requested, +we have to extrapolate using the strategy defined in the extrapolation +parameter.

  • +
  • extrapolation (str) – Strategy to use for extrapolating beyond the bounds set by the bounds option. +Options are continue, linear and constant. If continue, polynomial +features are simply extended at the risk of weights getting out of control. +If linear, second order features are extrapolated using their derivative at +the closest bound. If constant, the value at the closest boundary is returned.

  • +
  • params (ParamSet) – Note that the params required to be in params are determined from +those listed in the systematics.

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Load the fit results from the file and make some compatibility checks

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.flux.html b/pisa.stages.flux.html new file mode 100644 index 000000000..ad4ac3eb2 --- /dev/null +++ b/pisa.stages.flux.html @@ -0,0 +1,610 @@ + + + + + + + pisa.stages.flux package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.flux package

+
+

Submodules

+
+
+

pisa.stages.flux.airs module

+
+
+

pisa.stages.flux.astrophysical module

+

stage to implement getting the contribution to fluxes from astrophysical neutrino sources

+
+
+pisa.stages.flux.astrophysical.apply_sys_loop(true_energy, true_coszen, delta_index, norm, astroflux_nominal, out)[source]
+
+
Calculation:
    +
  1. Start from nominal flux

  2. +
  3. Apply spectral index shift

  4. +
  5. Add contributions from MCEq-computed gradients

  6. +
+
+
Array dimensions :

true_energy : [A] +true_coszen : [A] +delta_index : scalar float +norm : scalar float +astroflux_nominal : [A,B] +out : [A,B] (sys flux)

+
+
where:

A = num events +B = num flavors in flux (=3, e.g. e, mu, tau)

+
+
+
+ +
+
+class pisa.stages.flux.astrophysical.astrophysical(**std_kwargs)[source]
+

Bases: Stage

+

Stage to apply power law astrophysical fluxes

+
+
Parameters:
+
    +
  • params

    +
    Expected params are .. ::

    astro_delta : quantity (dimensionless) +astro_norm : quantity (dimensionless)

    +
    +
    +

  • +
  • TODO (flavor ratio as a parameter? Save for later.)

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Tilt it, scale it, bop it

+
+ +
+
+setup_function()[source]
+

Setup the nominal flux

+
+ +
+ +
+
+pisa.stages.flux.astrophysical.spectral_index_scale(true_energy, delta_index)[source]
+

Calculate spectral index scale. +Adjusts the weights for events in an energy dependent way according to a +shift in spectral index, applied about a user-defined energy pivot.

+
+ +
+
+

pisa.stages.flux.barr_simple module

+

Stage to implement the old PISA/oscfit flux systematics

+
+
+class pisa.stages.flux.barr_simple.barr_simple(**std_kwargs)[source]
+

Bases: Stage

+

stage to apply Barr style flux uncertainties +uses parameterisations of plots from Barr 2006 paper

+
+
Parameters:
+

params

Expected params are ..

+
nue_numu_ratio : quantity (dimensionless)
+nu_nubar_ratio : quantity (dimensionless)
+delta_index : quantity (dimensionless)
+Barr_uphor_ratio : quantity (dimensionless)
+Barr_nu_nubar_ratio : quantity (dimensionless)
+
+
+

+
+
+
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.flux.daemon_flux module

+

Implementation of DAEMON flux (https://arxiv.org/abs/2303.00022) +by Juan Pablo Yañez and Anatoli Fedynitch for use in PISA.

+

Maria Liubarska, J.P. Yanez 2023

+
+
+class pisa.stages.flux.daemon_flux.daemon_flux(**std_kwargs)[source]
+

Bases: Stage

+

DAEMON flux stage

+
+
Parameters:
+

params (ParamSet) –

Must have parameters: ..

+
daemon_K_158G : quantity (dimensionless)
+
+daemon_K_2P : quantity (dimensionless)
+
+daemon_K_31G : quantity (dimensionless)
+
+daemon_antiK_158G : quantity (dimensionless)
+
+daemon_antiK_2P : quantity (dimensionless)
+
+daemon_antiK_31G : quantity (dimensionless)
+
+daemon_n_158G : quantity (dimensionless)
+
+daemon_n_2P : quantity (dimensionless)
+
+daemon_p_158G : quantity (dimensionless)
+
+daemon_p_2P : quantity (dimensionless)
+
+daemon_pi_158G : quantity (dimensionless)
+
+daemon_pi_20T : quantity (dimensionless)
+
+daemon_pi_2P : quantity (dimensionless)
+
+daemon_pi_31G : quantity (dimensionless)
+
+daemon_antipi_158G : quantity (dimensionless)
+
+daemon_antipi_20T : quantity (dimensionless)
+
+daemon_antipi_2P : quantity (dimensionless)
+
+daemon_antipi_31G : quantity (dimensionless)
+
+daemon_GSF_1 : quantity (dimensionless)
+
+daemon_GSF_2 : quantity (dimensionless)
+
+daemon_GSF_3 : quantity (dimensionless)
+
+daemon_GSF_4 : quantity (dimensionless)
+
+daemon_GSF_5 : quantity (dimensionless)
+
+daemon_GSF_6 : quantity (dimensionless)
+
+
+

+
+
+
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+pisa.stages.flux.daemon_flux.evaluate_flux_map(flux_map, true_energy, true_coszen)[source]
+
+ +
+
+pisa.stages.flux.daemon_flux.make_2d_flux_map(flux_obj, particle='numuflux', egrid=array([1.00000000e-01, 1.02807322e-01, 1.05693455e-01, 1.08660611e-01, 1.11711065e-01, 1.14847155e-01, 1.18071285e-01, 1.21385926e-01, 1.24793621e-01, 1.28296980e-01, 1.31898690e-01, 1.35601511e-01, 1.39408283e-01, 1.43321923e-01, 1.47345431e-01, 1.51481892e-01, 1.55734477e-01, 1.60106446e-01, 1.64601150e-01, 1.69222035e-01, 1.73972643e-01, 1.78856616e-01, 1.83877698e-01, 1.89039738e-01, 1.94346693e-01, 1.99802631e-01, 2.05411735e-01, 2.11178304e-01, 2.17106760e-01, 2.23201647e-01, 2.29467637e-01, 2.35909533e-01, 2.42532274e-01, 2.49340937e-01, 2.56340741e-01, 2.63537052e-01, 2.70935387e-01, 2.78541416e-01, 2.86360972e-01, 2.94400048e-01, 3.02664806e-01, 3.11161583e-01, 3.19896892e-01, 3.28877429e-01, 3.38110078e-01, 3.47601918e-01, 3.57360225e-01, 3.67392478e-01, 3.77706369e-01, 3.88309805e-01, 3.99210913e-01, 4.10418050e-01, 4.21939808e-01, 4.33785019e-01, 4.45962763e-01, 4.58482375e-01, 4.71353453e-01, 4.84585864e-01, 4.98189752e-01, 5.12175544e-01, 5.26553963e-01, 5.41336030e-01, 5.56533078e-01, 5.72156756e-01, 5.88219040e-01, 6.04732245e-01, 6.21709029e-01, 6.39162405e-01, 6.57105755e-01, 6.75552832e-01, 6.94517777e-01, 7.14015130e-01, 7.34059837e-01, 7.54667263e-01, 7.75853206e-01, 7.97633907e-01, 8.20026062e-01, 8.43046837e-01, 8.66713880e-01, 8.91045332e-01, 9.16059848e-01, 9.41776601e-01, 9.68215306e-01, 9.95396231e-01, 1.02334021e+00, 1.05206867e+00, 1.08160363e+00, 1.11196773e+00, 1.14318425e+00, 1.17527712e+00, 1.20827094e+00, 1.24219100e+00, 1.27706330e+00, 1.31291459e+00, 1.34977233e+00, 1.38766479e+00, 1.42662102e+00, 1.46667087e+00, 1.50784505e+00, 1.55017512e+00, 1.59369353e+00, 1.63843365e+00, 1.68442976e+00, 1.73171713e+00, 1.78033202e+00, 1.83031168e+00, 1.88169442e+00, 1.93451965e+00, 1.98882786e+00, 2.04466067e+00, 2.10206088e+00, 2.16107251e+00, 2.22174078e+00, 2.28411221e+00, 2.34823460e+00, 2.41415712e+00, 2.48193029e+00, 2.55160607e+00, 2.62323788e+00, 2.69688063e+00, 2.77259076e+00, 2.85042632e+00, 2.93044698e+00, 3.01271407e+00, 3.09729067e+00, 3.18424160e+00, 3.27363353e+00, 3.36553498e+00, 3.46001639e+00, 3.55715021e+00, 3.65701088e+00, 3.75967497e+00, 3.86522116e+00, 3.97373038e+00, 4.08528580e+00, 4.19997295e+00, 4.31787973e+00, 4.43909653e+00, 4.56371628e+00, 4.69183451e+00, 4.82354943e+00, 4.95896201e+00, 5.09817606e+00, 5.24129830e+00, 5.38843844e+00, 5.53970928e+00, 5.69522678e+00, 5.85511016e+00, 6.01948197e+00, 6.18846824e+00, 6.36219849e+00, 6.54080591e+00, 6.72442742e+00, 6.91320378e+00, 7.10727970e+00, 7.30680395e+00, 7.51192949e+00, 7.72281357e+00, 7.93961785e+00, 8.16250851e+00, 8.39165644e+00, 8.62723729e+00, 8.86943166e+00, 9.11842520e+00, 9.37440879e+00, 9.63757866e+00, 9.90813657e+00, 1.01862899e+01, 1.04722519e+01, 1.07662418e+01, 1.10684849e+01, 1.13792129e+01, 1.16986641e+01, 1.20270833e+01, 1.23647224e+01, 1.27118400e+01, 1.30687023e+01, 1.34355829e+01, 1.38127630e+01, 1.42005318e+01, 1.45991865e+01, 1.50090328e+01, 1.54303847e+01, 1.58635653e+01, 1.63089068e+01, 1.67667503e+01, 1.72374471e+01, 1.77213578e+01, 1.82188534e+01, 1.87303154e+01, 1.92561357e+01, 1.97967175e+01, 2.03524752e+01, 2.09238348e+01, 2.15112343e+01, 2.21151240e+01, 2.27359668e+01, 2.33742387e+01, 2.40304289e+01, 2.47050406e+01, 2.53985907e+01, 2.61116110e+01, 2.68446481e+01, 2.75982639e+01, 2.83730362e+01, 2.91695588e+01, 2.99884423e+01, 3.08303146e+01, 3.16958209e+01, 3.25856248e+01, 3.35004083e+01, 3.44408728e+01, 3.54077391e+01, 3.64017485e+01, 3.74236629e+01, 3.84742658e+01, 3.95543624e+01, 4.06647809e+01, 4.18063724e+01, 4.29800121e+01, 4.41865996e+01, 4.54270599e+01, 4.67023439e+01, 4.80134292e+01, 4.93613210e+01, 5.07470524e+01, 5.21716858e+01, 5.36363132e+01, 5.51420574e+01, 5.66900727e+01, 5.82815458e+01, 5.99176967e+01, 6.15997796e+01, 6.33290840e+01, 6.51069356e+01, 6.69346971e+01, 6.88137699e+01, 7.07455942e+01, 7.27316511e+01, 7.47734631e+01, 7.68725952e+01, 7.90306568e+01, 8.12493021e+01, 8.35302320e+01, 8.58751948e+01, 8.82859884e+01, 9.07644607e+01, 9.33125118e+01, 9.59320948e+01, 9.86252179e+01, 1.01393946e+02, 1.04240401e+02, 1.07166765e+02, 1.10175281e+02, 1.13268257e+02, 1.16448062e+02, 1.19717134e+02, 1.23077980e+02, 1.26533176e+02, 1.30085370e+02, 1.33737286e+02, 1.37491723e+02, 1.41351558e+02, 1.45319752e+02, 1.49399346e+02, 1.53593468e+02, 1.57905331e+02, 1.62338243e+02, 1.66895601e+02, 1.71580899e+02, 1.76397728e+02, 1.81349780e+02, 1.86440853e+02, 1.91674849e+02, 1.97055780e+02, 2.02587771e+02, 2.08275063e+02, 2.14122015e+02, 2.20133111e+02, 2.26312957e+02, 2.32666291e+02, 2.39197984e+02, 2.45913043e+02, 2.52816614e+02, 2.59913992e+02, 2.67210616e+02, 2.74712079e+02, 2.82424133e+02, 2.90352688e+02, 2.98503825e+02, 3.06883789e+02, 3.15499006e+02, 3.24356081e+02, 3.33461802e+02, 3.42823149e+02, 3.52447300e+02, 3.62341632e+02, 3.72513730e+02, 3.82971391e+02, 3.93722633e+02, 4.04775697e+02, 4.16139055e+02, 4.27821420e+02, 4.39831747e+02, 4.52179242e+02, 4.64873371e+02, 4.77923865e+02, 4.91340729e+02, 5.05134247e+02, 5.19314994e+02, 5.33893840e+02, 5.48881961e+02, 5.64290847e+02, 5.80132310e+02, 5.96418495e+02, 6.13161884e+02, 6.30375315e+02, 6.48071983e+02, 6.66265452e+02, 6.84969672e+02, 7.04198979e+02, 7.23968114e+02, 7.44292233e+02, 7.65186915e+02, 7.86668179e+02, 8.08752491e+02, 8.31456781e+02, 8.54798453e+02, 8.78795401e+02, 9.03466021e+02, 9.28829225e+02, 9.54904456e+02, 9.81711702e+02, 1.00927151e+03, 1.03760502e+03, 1.06673394e+03, 1.09668060e+03, 1.12746796e+03, 1.15911962e+03, 1.19165984e+03, 1.22511358e+03, 1.25950646e+03, 1.29486487e+03, 1.33121590e+03, 1.36858742e+03, 1.40700809e+03, 1.44650734e+03, 1.48711546e+03, 1.52886359e+03, 1.57178372e+03, 1.61590875e+03, 1.66127252e+03, 1.70790980e+03, 1.75585633e+03, 1.80514888e+03, 1.85582523e+03, 1.90792422e+03, 1.96148581e+03, 2.01655104e+03, 2.07316213e+03, 2.13136247e+03, 2.19119669e+03, 2.25271064e+03, 2.31595149e+03, 2.38096772e+03, 2.44780916e+03, 2.51652705e+03, 2.58717408e+03, 2.65980440e+03, 2.73447368e+03, 2.81123917e+03, 2.89015972e+03, 2.97129582e+03, 3.05470967e+03, 3.14046522e+03, 3.22862820e+03, 3.31926620e+03, 3.41244871e+03, 3.50824714e+03, 3.60673495e+03, 3.70798763e+03, 3.81208280e+03, 3.91910025e+03, 4.02912203e+03, 4.14223247e+03, 4.25851829e+03, 4.37806863e+03, 4.50097513e+03, 4.62733201e+03, 4.75723614e+03, 4.89078709e+03, 5.02808725e+03, 5.16924187e+03, 5.31435916e+03, 5.46355035e+03, 5.61692982e+03, 5.77461515e+03, 5.93672722e+03, 6.10339029e+03, 6.27473213e+03, 6.45088409e+03, 6.63198120e+03, 6.81816229e+03, 7.00957009e+03, 7.20635132e+03, 7.40865683e+03, 7.61664172e+03, 7.83046540e+03, 8.05029181e+03, 8.27628946e+03, 8.50863158e+03, 8.74749630e+03, 8.99306672e+03, 9.24553110e+03, 9.50508296e+03, 9.77192128e+03, 1.00462506e+04, 1.03282813e+04, 1.06182294e+04, 1.09163173e+04, 1.12227736e+04, 1.15378330e+04, 1.18617372e+04, 1.21947344e+04, 1.25370799e+04, 1.28890361e+04, 1.32508729e+04, 1.36228676e+04, 1.40053055e+04, 1.43984795e+04, 1.48026913e+04, 1.52182505e+04, 1.56454759e+04, 1.60846948e+04, 1.65362441e+04, 1.70004698e+04, 1.74777277e+04, 1.79683839e+04, 1.84728144e+04, 1.89914058e+04, 1.95245558e+04, 2.00726730e+04, 2.06361777e+04, 2.12155017e+04, 2.18110892e+04, 2.24233968e+04, 2.30528939e+04, 2.37000629e+04, 2.43654001e+04, 2.50494154e+04, 2.57526333e+04, 2.64755927e+04, 2.72188479e+04, 2.79829688e+04, 2.87685409e+04, 2.95761666e+04, 3.04064649e+04, 3.12600724e+04, 3.21376434e+04, 3.30398507e+04, 3.39673858e+04, 3.49209598e+04, 3.59013038e+04, 3.69091691e+04, 3.79453285e+04, 3.90105762e+04, 4.01057288e+04, 4.12316259e+04, 4.23891306e+04, 4.35791301e+04, 4.48025368e+04, 4.60602884e+04, 4.73533492e+04, 4.86827104e+04, 5.00493910e+04, 5.14544388e+04, 5.28989308e+04, 5.43839743e+04, 5.59107078e+04, 5.74803016e+04, 5.90939590e+04, 6.07529169e+04, 6.24584471e+04, 6.42118571e+04, 6.60144909e+04, 6.78677305e+04, 6.97729965e+04, 7.17317494e+04, 7.37454909e+04, 7.58157646e+04, 7.79441575e+04, 8.01323013e+04, 8.23818733e+04, 8.46945981e+04, 8.70722485e+04, 8.95166472e+04, 9.20296681e+04, 9.46132376e+04, 9.72693362e+04, 1.00000000e+05]), params={})[source]
+
+ +
+
+

pisa.stages.flux.hillasg module

+

Stage to evaluate the Hillas-Gaisser expectations from precalculated fluxes

+
+
+class pisa.stages.flux.hillasg.hillasg(**std_kwargs)[source]
+

Bases: Stage

+

stage to generate nominal flux

+
+
Parameters:
+

params

+
Expected params .. ::

flux_table : str

+
+
+

+
+
+
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.flux.honda_ip module

+

Stage to evaluate the Honda flux tables using IP splines

+
+
+class pisa.stages.flux.honda_ip.honda_ip(**std_kwargs)[source]
+

Bases: Stage

+

stage to generate nominal flux

+
+
Parameters:
+

params

+
Expected params .. ::

flux_table : str

+
+
+

+
+
+
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.flux.mceq_barr module

+

Stage to implement the inclusive neutrino flux as calculated with MCEq, +and the systematic flux variations based on the Barr scheme.

+

It requires spline tables created by the pisa/scripts/create_barr_sys_tables_mceq.py +Pre-generated tables can be found at `fridge/analysis/common/data/flux/

+

Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot

+
+
+class pisa.stages.flux.mceq_barr.mceq_barr(table_file, include_nutau_flux=False, use_honda_nominal_flux=True, **std_kwargs)[source]
+

Bases: Stage

+

Stage that uses gradients calculated with MCEq to handle flux uncertainties. +This stage calculates flux variations relative to a nominal flux that must +be calculated ahead of time.

+
+
Parameters:
+
    +
  • table_file (pickle file containing pre-generated tables from MCEq)

  • +
  • params (ParamSet) –

    Must exclusively have parameters: ..

    +
    delta_index : quantity (dimensionless)
    +    Shift in the spectral index of the neutrino flux. Prior with a mean of 0.
    +
    +energy_pivot : quantity (GeV)
    +    The spectral index is shifting around a pivot point
    +
    +barr_*_Pi : quantity (dimensionless)
    +    * from a to i
    +    Uncertainty on pi+ production in a region of phase space *,
    +    further defined in Barr 2006
    +
    +pion_ratio : quantity (dimensionless)
    +    The uncertainty on pi- production is assumed to be correlated
    +    to the pi+ production uncertainty,
    +    as the pi+/pi- ratio is measured. Thus the uncertainty on pi-
    +    production is defined by pion_ratio and barr_*_pi
    +
    +barr_*_K : quantity (dimensionless)
    +    * from w to z
    +    Uncertainty on K+ production in a region of phase space *,
    +    further defined in Barr 2006
    +
    +barr_*_antiK : quantity (dimensionless)
    +    * from w to z
    +    Uncertainty on K- and K+ production is assumed to be
    +    uncorrelated as the ratio is badly determined.
    +
    +
    +

  • +
+
+
+

Notes

+

The nominal flux is calculated ahead of time using MCEq, +then multiplied with a shift in spectral index, and then modifications due +to meson production (barr variables) are added.

+

The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) +- one solution for meson and one solution for the antimeson production uncertainty.

+

Each solution consists of 8 splines: “numu”, “numubar”, “nue”, and “nuebar” +is the nominal flux. +“dnumu”, “dnumubar”, “dnue”, and “dnuebar” is the gradient of the Barr modification

+
+
+antipion_production(barr_var, pion_ratio)[source]
+

Combine pi+ barr param and pi+/pi- ratio to get pi- barr param +Definitions:

+
+

pion ratio = (1 + barr_var+) / (1 + barr_var-) +delta pion ratio = pion ratio - 1 (e.g. deviation from nominal ratio value, which is 1)

+
+

Note that the pion_ratio param really represents the “delta pion ratio”, so is defined +similarly to the barr variables themselves .

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.flux.mceq_barr_red module

+

Stage to implement the inclusive neutrino flux as calculated with MCEq, +and the systematic flux variations based on the Barr scheme.

+

It requires spline tables created by the pisa/scripts/create_barr_sys_tables_mceq.py +Pre-generated tables can be found at `fridge/analysis/common/data/flux/

+

Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot

+
+
+pisa.stages.flux.mceq_barr_red.apply_sys_loop(true_energy, true_coszen, delta_index, energy_pivot, nu_flux_nominal, gradients, gradient_params, out)[source]
+
+
Calculation:
    +
  1. Start from nominal flux

  2. +
  3. Apply spectral index shift

  4. +
  5. Add contributions from MCEq-computed gradients

  6. +
+
+
Array dimensions :

true_energy : [A] +true_coszen : [A] +nubar : scalar integer +delta_index : scalar float +energy_pivot : scalar float +nu_flux_nominal : [A,B] +gradients : [A,B,C] +gradient_params : [C] +out : [A,B] (sys flux)

+
+
where:

A = num events +B = num flavors in flux (=3, e.g. e, mu, tau) +C = num gradients

+
+
+

Not that first dimension (of length A) is vectorized out

+
+ +
+
+class pisa.stages.flux.mceq_barr_red.mceq_barr_red(table_file, **std_kwargs)[source]
+

Bases: Stage

+

Stage that uses gradients calculated with MCEq to handle flux uncertainties. +This stage calculates flux variations relative to a nominal flux that must +be calculated ahead of time. Parameters to control pion and kaon production +are reduced from the full Barr scheme, by forcing many of them to scale in a +fully correlated way.

+
+
Parameters:
+
    +
  • table_file (pickle file containing pre-generated tables from MCEq)

  • +
  • params (ParamSet) –

    Must exclusively have parameters: ..

    +
    delta_index : quantity (dimensionless)
    +    Shift in the spectral index of the neutrino flux. Prior with a mean of 0.
    +
    +energy_pivot : quantity (GeV)
    +    The spectral index is shifting around a pivot point
    +
    +barr_*_Pi : quantity (dimensionless)
    +    * from a to i
    +    Uncertainty on pi+ production in a region of phase space *,
    +    further defined in Barr 2006
    +
    +pion_ratio : quantity (dimensionless)
    +    The uncertainty on pi- production is assumed to be correlated
    +    to the pi+ production uncertainty,
    +    as the pi+/pi- ratio is measured. Thus the uncertainty on pi-
    +    production is defined by pion_ratio and barr_*_pi
    +
    +barr_*_K : quantity (dimensionless)
    +    * from w to z
    +    Uncertainty on K+ production in a region of phase space *,
    +    further defined in Barr 2006
    +
    +barr_*_antiK : quantity (dimensionless)
    +    * from w to z
    +    Uncertainty on K- and K+ production is assumed to be
    +    uncorrelated as the ratio is badly determined.
    +
    +
    +

  • +
+
+
+

Notes

+

The nominal flux is calculated ahead of time using the honda_ip stage, +then multiplied with a shift in spectral index, and then modifications due +to meson production (barr variables) are added.

+

The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) +- one solution for meson and one solution for the antimeson production uncertainty.

+

Each solution consists of 4 splines: “dnumu”, “dnumubar”, “dnue”, and +“dnuebar”. These are the gradients that govern how the neutrino fluxes vary +depending on modifications to the Barr params.

+
+
+antipion_production(barr_var, pion_ratio)[source]
+

Combine pi+ param and pi+/pi- ratio to get pi- param

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+pisa.stages.flux.mceq_barr_red.spectral_index_scale(true_energy, energy_pivot, delta_index)[source]
+

Calculate spectral index scale. +Adjusts the weights for events in an energy dependent way according to a +shift in spectral index, applied about a user-defined energy pivot.

+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.html b/pisa.stages.html new file mode 100644 index 000000000..876a0f42c --- /dev/null +++ b/pisa.stages.html @@ -0,0 +1,744 @@ + + + + + + + pisa.stages package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages package

+
+

Subpackages

+
+ +
+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.likelihood.html b/pisa.stages.likelihood.html new file mode 100644 index 000000000..137aa6d71 --- /dev/null +++ b/pisa.stages.likelihood.html @@ -0,0 +1,201 @@ + + + + + + + pisa.stages.likelihood package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.likelihood package

+
+

Submodules

+
+
+

pisa.stages.likelihood.generalized_llh_params module

+

Pisa stage that pre-computes some quantities +needed for the generalized likelihood, and applies +small adjustments to the weight distributions in cases +where the number of mc event per bin is low.

+

The code does the following, in order:

+
    +
  • Calculate the number of MC events per bin once, +at the setup time

  • +
  • Calculate, at setup time, a mean adjustment, based +on the average number of MC events per bin. If the +latter is less than one, adjustment is applied, else +that quantity is equal to zero

  • +
  • Populate ANY empty mc bin with a pseudo-weight with a +value equal to the maximal weight value of a given +dataset. This correspond to the empty bin strategy #2 +described in (1902.08831). Note that empty bin strategy #1 +can still be applied later on, if one provides the bin +indices where no datasets have any MC events. This step +runs in the apply function because the value of the pseudo +weight will change during minimization.

  • +
  • Once this is done, computes the alpha and beta +parameters that are fed into the likelihood

  • +
+

The stage appends / modifies the following:

+
+
+
weights: changes the individual weight distribution

based on the empty bin filling outcome

+
+
+

llh_alphas: Map (alpha parameters of the generalized likelihood)

+

llh_betas: Map (beta parameters of the generalized likelihood)

+

n_mc_events: Map (number of MC events in each bin

+
+
new_sum: Map (Sum of the weights in each bin (ie MC expectation),

corrected for the empty bin filling and the mean +adjustment

+
+
+
+
+
+class pisa.stages.likelihood.generalized_llh_params.generalized_llh_params(**std_kwargs)[source]
+

Bases: Stage

+

Pisa stage that applies mean adjustment and +empty bin filling. Also computes alphas and betas +that are needed by the generalized poisson likelihood

+
+
+apply_function()[source]
+

Computes the main inputs to the generalized likelihood +function on every iteration of the minimizer

+
+ +
+
+setup_function()[source]
+

Declare empty containers, determine the number +of MC events in each bin of each dataset and +compute mean adjustment

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.osc.html b/pisa.stages.osc.html new file mode 100644 index 000000000..fdbacd81e --- /dev/null +++ b/pisa.stages.osc.html @@ -0,0 +1,1297 @@ + + + + + + + pisa.stages.osc package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.osc package

+
+

Subpackages

+ +
+
+

Submodules

+
+
+

pisa.stages.osc.decay_params module

+
+
DecayParams: Characterize neutrino decay parameters

(alpha3)

+
+
+
+
+class pisa.stages.osc.decay_params.DecayParams[source]
+

Bases: object

+

Holds neutrino decay parameters, i.e., alpha

+
+
Parameters:
+

decay_alpha3 (float) – expected to be given in [eV^2]

+
+
+
+
+decay_alpha3
+

Cf. parameters

+
+
Type:
+

float

+
+
+
+ +
+
+decay_matrix
+
+
Type:
+

3d complex array

+
+
+
+ +
+
+property decay_alpha3
+

alpha3

+
+ +
+
+property decay_matrix
+

Neutrino decay matrix

+
+ +
+ +
+
+

pisa.stages.osc.decoherence module

+

Implementing an environmentally-induced decoherence model for neutrino oscillations +Based on reference [1], which uses an energy-indepedence deocherence matrix in vacuum

+

References

+

[1] arxiv:1702.04738

+
+
+class pisa.stages.osc.decoherence.DecoherenceParams(deltam21, deltam31, theta12, theta13, theta23, deltacp, gamma21, gamma31, gamma32)[source]
+

Bases: OscParams

+

Container for decoherence oscillation params +This includes standard oscillation params plus additional ‘Gamma’ terms parameterising decoherence +gamma21,31,32 params have units of energy

+
+ +
+
+pisa.stages.osc.decoherence.calc_decoherence_probs(decoh_params, flav, energy, baseline, prob_e, prob_mu, prob_tau, two_flavor=False)[source]
+

Oscillation probability calculator function, with decoherence included

+
+
Parameters:
+
    +
  • decoh_params – DecoherenceParams instance

  • +
  • flav – str : Neutrino flavor

  • +
  • energy – Neutrino true energy values as float(s), either a single value or an array +If no units attached, must be [GeV]

  • +
  • baseline – Neutrino true propagation distance values as float(s), either a single value or an array +If no units attached, must be [km]

  • +
  • prob_e – Array of floats of same dimensions as energy and baseline. Will be filled with probabilities to oscillate to a nue

  • +
  • prob_mu – Array of floats of same dimensions as energy and baseline. Will be filled with probabilities to oscillate to a numu

  • +
  • prob_tau – Array of floats of same dimensions as energy and baseline. Will be filled with probabilities to oscillate to a nutau

  • +
  • two_flavor – bool : Flag indicating whether a two- or 3-flavor model should be used

  • +
+
+
+
+ +
+
+class pisa.stages.osc.decoherence.decoherence(**std_kwargs)[source]
+

Bases: Stage

+

PISA Pi stage representing oscillations in the presence of decoherence

+
+
Parameters:
+

params

Expected contents of params ParamSet: ..

+
detector_depth : float
+earth_model : PREM file path
+prop_height : quantity (dimensionless)
+YeI : quantity (dimensionless)
+YeO : quantity (dimensionless)
+YeM : quantity (dimensionless)
+theta12 : quantity (angle)
+theta13 : quantity (angle)
+theta23 : quantity (angle)
+deltam21 : quantity (mass^2)
+deltam31 : quantity (mass^2)
+deltacp : quantity (angle)
+gamma12 : quantity (energy)
+gamma13 : quantity (energy)
+gamma23 : quantity (energy)
+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+calc_probs(nubar, e_array, len_array, out)[source]
+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.osc.globes module

+

PISA pi stage wrapping GLoBES for the calculation of neutrino oscillation probabilities.

+

Allows for the calculation of sterile neutrino oscillation probabilities. +This needs Andrii’s GLoBES wrapper, which has been forked to be +made compatible with Python3:

+

https://github.com/atrettin/GLoBES_wrapper

+

To import, this stage takes as input the path to the GLoBES wrapper. This is necessary +because GLoBES has to be imported while in the wrapper directory.

+
+
+class pisa.stages.osc.globes.globes(earth_model, globes_wrapper, detector_depth=<Quantity(2.0, 'kilometer')>, prop_height=<Quantity(20.0, 'kilometer')>, **std_kwargs)[source]
+

Bases: Stage

+

GLoBES PISA Pi class

+
+
Parameters:
+
    +
  • earth_model (PREM file path)

  • +
  • globes_wrapper (path to globes wrapper)

  • +
  • detector_depth (float)

  • +
  • prop_height (quantity (dimensionless))

  • +
  • params (ParamSet or sequence with which to instantiate a ParamSet.) –

    Expected params ..

    +
    theta12 : quantity (angle)
    +theta13 : quantity (angle)
    +theta23 : quantity (angle)
    +deltam21 : quantity (mass^2)
    +deltam31 : quantity (mass^2)
    +deltam41 : quantity (mass^2)
    +theta24 : quantity (angle)
    +theta34 : quantity (angle)
    +deltacp : quantity (angle)
    +
    +
    +

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+calc_prob_e_mu(flav, nubar, energy, rho_array, len_array)[source]
+

Calculates probability for an electron/muon neutrino to oscillate into +the flavour of a given event, including effects from sterile neutrinos.

+
+ +
+
+calc_prob_nonsterile(flav, nubar, energy, rho_array, len_array)[source]
+

Calculates the probability of a given neutrino to oscillate into +another non-sterile flavour.

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.osc.layers module

+

Calculation of Earth layers and electron densities.

+
+
+class pisa.stages.osc.layers.Layers(prem_file, detector_depth=1.0, prop_height=2.0)[source]
+

Bases: object

+

Calculate the path through earth for a given layer model with densities +(PREM [1]), the electron fractions (Ye) and an array of coszen values

+
+
Parameters:
+
    +
  • prem_file (str) – path to PREM file containing layer radii and densities as white space +separated txt

  • +
  • detector_depth (float) – depth of detector underground in km

  • +
  • prop_height (float) – the production height of the neutrinos in the atmosphere in km (?)

  • +
+
+
+
+
+max_layers
+

maximum number of layers (this is important for the shape of the +output! if less than maximumm number of layers are crossed, it’s +filled up with 0s

+
+
Type:
+

int

+
+
+
+ +
+
+n_layers
+

number of layers crossed for every CZ value

+
+
Type:
+

1d int array of length len(cz)

+
+
+
+ +
+
+density
+

containing density values and filled up with 0s otherwise

+
+
Type:
+

1d float array of length (max_layers * len(cz))

+
+
+
+ +
+
+distance
+

containing distance values and filled up with 0s otherwise

+
+
Type:
+

1d float array of length (max_layers * len(cz))

+
+
+
+ +

References

+
+
[1] A.M. Dziewonski and D.L. Anderson (1981) “Preliminary reference

Earth model,” Physics of the Earth and Planetary Interiors, 25(4), +pp. 297 – 356. +http://www.sciencedirect.com/science/article/pii/300031920181900467

+
+
+
+
+calcLayers(cz)[source]
+
+
Parameters:
+

cz (1d float array) – Array of coszen values

+
+
+
+ +
+
+calcPathLength(cz)[source]
+

Calculate path length of the neutrino through an Earth-sized sphere, given the +production height, detector depth and zenith angle. +Useful if not considering matter effects.

+
+
Parameters:
+

cz (cos(zenith angle), either single float value or an array of float values)

+
+
+
+ +
+
+computeMinLengthToLayers()[source]
+

Deterine the coszen values for which a track will +be tangeant to a given layer.

+

Given the detector radius and the layer radii:

+
    +
  • A layer will be tangeant if radii<r_detector

  • +
  • Given r_detector and r_i, the limit angle +will be:

    +
    +

    sin(theta) = r_i / r_detector

    +
    +
  • +
+

that angle can then be expressed back into a cosine using +trigonometric identities

+
+ +
+
+property density
+
+ +
+
+property distance
+
+ +
+
+property n_layers
+
+ +
+
+scaling(scaling_array)[source]
+

Multplies scaling factor with densities from earth model

+
+
Parameters:
+

scaling_array (numpy array containing scaling factors for different layers.)

+
+
+
+ +
+
+setElecFrac(YeI, YeO, YeM)[source]
+

Set electron fractions of inner core, outer core, and mantle. +Locations of boundaries between each layer come from PREM.

+
+
Parameters:
+
    +
  • YeI (scalars) – Three electron fractions (Ye), where I=inner core, O=outer core, +and M=mantle

  • +
  • YeO (scalars) – Three electron fractions (Ye), where I=inner core, O=outer core, +and M=mantle

  • +
  • YeM (scalars) – Three electron fractions (Ye), where I=inner core, O=outer core, +and M=mantle

  • +
+
+
+
+ +
+
+weight_density_to_YeFrac()[source]
+

Adjust the densities of the provided earth model layers +for the different electron fractions in the inner core, +outer core and mantle.

+
+ +
+ +
+
+pisa.stages.osc.layers.extCalcLayers(cz, r_detector, prop_height, detector_depth, rhos, coszen_limit, radii, max_layers)[source]
+

Layer density/distance calculator for each coszen specified.

+

Accelerated with Numba if present.

+
+
Parameters:
+
    +
  • cz (coszen values (array of float))

  • +
  • r_detector (radial position of the detector (float))

  • +
  • prop_height (height at which neutrinos are assumed to be produced (float))

  • +
  • detector_depth (depth at which the detector is buried (float))

  • +
  • rhos (densities (already weighted by electron fractions) (ndarray))

  • +
  • radii (radii defining the Earth's layer (ndarray))

  • +
  • coszen (coszen values corresponding to the radii above (ndarray))

  • +
  • max_layers (maximum number of layers it is possible to cross (int))

  • +
+
+
Returns:
+

    +
  • n_layers (int number of layers)

  • +
  • density (array of densities, flattened from (cz, max_layers))

  • +
  • distance (array of distances per layer, flattened from (cz, max_layers))

  • +
+

+
+
+
+ +
+
+

pisa.stages.osc.lri_params module

+

LRI Params: Charecterize Long Range Interaction mediator

+

Developed by following osc_params.py and nsi_params.py

+
+
+class pisa.stages.osc.lri_params.LRIParams[source]
+

Bases: object

+

Holds the mediator information of long range interaction:z’ +Assumed three anamoly free symmetries, Le_mu, Le_tau, Lmu_tau(by mixing z and z’)).

+
+
+potential matrix
+
+
Type:
+

Three 2d float array of shape (3,3), one for each symmetry

+
+
+
+ +
+
+Potential matrix holding the potential term of three different symmetris, which is a
+
+ +
+
+function of mediator mass, and the coupling constant of the interaction.
+
+ +
+
+property potential_matrix_emu
+

LRI matter interaction potential matrix e mu symmetry

+
+ +
+
+property potential_matrix_etau
+

LRI matter interaction potential matrix e tau symmetry

+
+ +
+
+property potential_matrix_mutau
+

LRI matter interaction potential matrix mu tau symmetry

+
+ +
+
+property v_lri
+

Potential term of symmetry e mu

+
+ +
+ +
+
+

pisa.stages.osc.nsi_params module

+

NSIParams: Characterize non-standard neutrino interaction coupling strengths

+

merged in by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu) +to include NSI changes made by Thomas Ehrhardt on his branch: +original version can be found in thehrh/pisa nsi_reparameterisation branch

+
+
+class pisa.stages.osc.nsi_params.NSIParams[source]
+

Bases: object

+

Holds non-standard neutrino interaction parameters of neutral current type +for propagating neutrinos, interacting with 1st generation Standard Model +background quarks (u or d) or electrons in the Earth.

+
+
+eps_matrix
+

Hermitian NSI matrix holding the effective epsilon parameters describing +strengths of NSI transitions between the two specified neutrino flavors, +via NC-type interaction with 1st generation quarks or electrons in the +Earth. +Flavour-preserving (diagonal) ones are real, while the flavour-changing +(off-diagonal) ones are complex. +Note that these parameters are not the Lagrangian-level couplings but +rather the sums over these weighted by the respective relative number +densities (approx. constant) of each possible scattering partner +in the Earth.

+
+
Type:
+

2d float array of shape (3, 3)

+
+
+
+ +
+ +
+
+class pisa.stages.osc.nsi_params.StdNSIParams[source]
+

Bases: NSIParams

+

NSI parameters in the standard parameterization.

+
+
+eps_matrix
+

Effective NSI coupling matrix.

+
+
Type:
+

2d float array of shape (3, 3)

+
+
+
+ +
+
+eps_ee, eps_emu, eps_etau, eps_mumu, eps_mutau, eps_tautau
+

Effective NSI coupling parameters.

+
+
Type:
+

float or complex

+
+
+
+ +
+
+property eps_ee
+

effective nue-nue NSI coupling parameter

+
+ +
+
+property eps_emu
+

effective nue-numu NSI coupling parameter

+
+ +
+
+property eps_etau
+

effective nue-nutau NSI coupling parameter

+
+ +
+
+property eps_matrix
+
+ +
+
+property eps_mumu
+

effective numu-numu NSI coupling parameter

+
+ +
+
+property eps_mutau
+

effective numu-nutau NSI coupling parameter

+
+ +
+
+property eps_tautau
+

effective nutau-nutau NSI coupling parameter

+
+ +
+ +
+
+class pisa.stages.osc.nsi_params.VacuumLikeNSIParams[source]
+

Bases: NSIParams

+

NSI parameters using a vacuum Hamiltonian-like parameterization.

+
+
+property alpha1
+

1-phase

+
+ +
+
+property alpha2
+

2-phase

+
+ +
+
+property deltansi
+

NSI phase

+
+ +
+
+property eps_ee
+

effective nue-nue NSI coupling parameter

+
+ +
+
+property eps_emu
+

effective nue-numu NSI coupling parameter

+
+ +
+
+property eps_etau
+

effective nue-nutau NSI coupling parameter

+
+ +
+
+property eps_matrix
+

Effective NSI coupling matrix.

+
+ +
+
+property eps_matrix_analytical
+

Effective NSI coupling matrix calculated analytically.

+
+ +
+
+property eps_mumu
+

effective numu-numu NSI coupling parameter

+
+ +
+
+property eps_mutau
+

effective numu-nutau NSI coupling parameter

+
+ +
+
+property eps_prime
+

Second Hmat eigenvalue (beside eps_scale)

+
+ +
+
+property eps_scale
+

Generalised matter potential strength scale

+
+ +
+
+property eps_tautau
+

effective nutau-nutau NSI coupling parameter

+
+ +
+
+property phi12
+

1-2 angle

+
+ +
+
+property phi13
+

1-3 angle

+
+ +
+
+property phi23
+

2-3 angle

+
+ +
+ +
+
+

pisa.stages.osc.nusquids module

+
+
+

pisa.stages.osc.osc_params module

+
+
OscParams: Characterize neutrino oscillation parameters

(mixing angles, Dirac-type CP-violating phase, mass splittings)

+
+
+

changed by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu) +to include NSI changes made by Thomas Ehrhardt on his branch: +original version can be found in thehrh/pisa nsi_reparameterisation branch

+
+
+class pisa.stages.osc.osc_params.OscParams[source]
+

Bases: object

+

Holds neutrino oscillation parameters, i.e., mixing angles, squared-mass +differences, and a Dirac-type CPV phase. The neutrino mixing (PMNS) matrix +constructed from these parameters is given in the standard +3x3 parameterization. Also holds the generalised matter potential matrix +(divided by the matter potential a), i.e. diag(1, 0, 0) for the standard +case.

+
+
Parameters:
+
    +
  • dm21 (float) – Mass splittings (delta M^2_{21,31,41}) expected to be given in [eV^2]

  • +
  • dm31 (float) – Mass splittings (delta M^2_{21,31,41}) expected to be given in [eV^2]

  • +
  • dm41 (float) – Mass splittings (delta M^2_{21,31,41}) expected to be given in [eV^2]

  • +
  • sin12 (float) – 1-2, 1-3 and 2-3 mixing angles, interpreted as sin(theta_{ij})

  • +
  • sin13 (float) – 1-2, 1-3 and 2-3 mixing angles, interpreted as sin(theta_{ij})

  • +
  • sin23 (float) – 1-2, 1-3 and 2-3 mixing angles, interpreted as sin(theta_{ij})

  • +
  • deltacp (float) – Value of CPV phase in [rad]

  • +
+
+
+
+
+dm21, dm31, dm41
+

Cf. parameters

+
+
Type:
+

float

+
+
+
+ +
+
+sin12, sin13, sin23, sin14
+

Cf. parameters

+
+
Type:
+

float

+
+
+
+ +
+
+theta12, theta13, theta23, theta14
+

Mixing angles (corresponding to sinXY)

+
+
Type:
+

float

+
+
+
+ +
+
+deltacp
+

Cf. parameters

+
+
Type:
+

float

+
+
+
+ +
+
+mix_matrix
+

Neutrino mixing (PMNS) matrix in standard parameterization. The third +dimension holds the real and imaginary parts of each matrix element.

+
+
Type:
+

3d float array of shape (3, 3, 2)

+
+
+
+ +
+
+mix_matrix_complex
+
+
Type:
+

3d complex array

+
+
+
+ +
+
+mix_matrix_reparam
+

Reparameterized neutrino mixing matrix, such that CPT invariance +of vacuum propagation implemented by 3 simultaneous osc. param. +transformations.

+
+
Type:
+

3d float array of shape (3, 3, 2)

+
+
+
+ +
+
+mix_matrix_reparam_complex
+
+
Type:
+

3d complex array

+
+
+
+ +
+
+dm_matrix
+

Antisymmetric matrix of squared-mass differences in vacuum

+
+
Type:
+

2d float array of shape (3, 3)

+
+
+
+ +
+
+property deltacp
+

CPV phase

+
+ +
+
+property dm_matrix
+

Neutrino mass splitting matrix in vacuum

+
+ +
+
+property mix_matrix
+

Neutrino mixing matrix in its ‘standard’ form

+
+ +
+
+property mix_matrix_complex
+

Mixing matrix as complex 2-d array

+
+ +
+
+property mix_matrix_reparam
+

Neutrino mixing matrix reparameterised in a way +such that the CPT trafo Hvac -> -Hvac* is exactly implemented by +the simultaneous transformations

+
+
    +
  • deltamsq31 -> -deltamsq32

  • +
  • theta12 -> pi/2 - theta12

  • +
  • deltacp -> pi - deltacp

  • +
+
+

which hence leave vacuum propagation invariant.

+

This representation follows from the standard form U +as diag(exp(i*deltacp), 0, 0) * U * diag(exp(-i*deltacp), 0, 0).

+
+ +
+
+property mix_matrix_reparam_complex
+

Reparameterised mixing matrix as complex 2-d array

+
+ +
+
+property sin12
+

Sine of 1-2 mixing angle

+
+ +
+
+property sin13
+

Sine of 1-3 mixing angle

+
+ +
+
+property sin14
+

Sine of 1-4 mixing angle

+
+ +
+
+property sin23
+

Sine of 2-3 mixing angle

+
+ +
+
+property theta12
+
+ +
+
+property theta13
+
+ +
+
+property theta14
+
+ +
+
+property theta23
+
+ +
+ +
+
+

pisa.stages.osc.prob3 module

+

PISA pi stage for the calculation of earth layers and osc. probabilities

+

Maybe it would amke sense to split this up into a separate earth layer stage +and an osc. stage….todo

+
+
+class pisa.stages.osc.prob3.prob3(nsi_type=None, reparam_mix_matrix=False, neutrino_decay=False, tomography_type=None, lri_type=None, **std_kwargs)[source]
+

Bases: Stage

+

Prob3-like oscillation PISA Pi class

+
+
Parameters:
+

params

Expected params ..

+
detector_depth : float
+earth_model : PREM file path
+prop_height : quantity (dimensionless)
+YeI : quantity (dimensionless)
+YeO : quantity (dimensionless)
+YeM : quantity (dimensionless)
+density_scale : quantity (dimensionless)
+core_density_scale : quantity (dimensionless)
+innermantle_density_scale : quantity (dimensionless)
+middlemantle_density_scale : quantity (dimensionless)
+theta12 : quantity (angle)
+theta13 : quantity (angle)
+theta23 : quantity (angle)
+deltam21 : quantity (mass^2)
+deltam31 : quantity (mass^2)
+deltacp : quantity (angle)
+eps_scale : quantity(dimensionless)
+eps_prime : quantity(dimensionless)
+phi12 : quantity(angle)
+phi13 : quantity(angle)
+phi23 : quantity(angle)
+alpha1 : quantity(angle)
+alpha2 : quantity(angle)
+deltansi : quantity(angle)
+eps_ee : quantity (dimensionless)
+eps_emu_magn : quantity (dimensionless)
+eps_emu_phase : quantity (angle)
+eps_etau_magn : quantity (dimensionless)
+eps_etau_phase : quantity (angle)
+eps_mumu : quantity(dimensionless)
+eps_mutau_magn : quantity (dimensionless)
+eps_mutau_phase : quantity (angle)
+eps_tautau : quantity (dimensionless)
+decay_alpha3 : quantity (energy^2)
+v_lri : quantity (eV)
+
+
+

+
+
+
+
**kwargs

Other kwargs are handled by Stage

+
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+calc_probs(nubar, e_array, rho_array, len_array, out)[source]
+

wrapper to execute osc. calc

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+gen_mat_pot_matrix_complex
+

Interaction Hamiltonian without the factor sqrt(2)*G_F*N_e.

+
+ +
+
+nsi_type
+

Type of NSI to assume.

+
+ +
+
+reparam_mix_matrix
+

Use a PMNS mixing matrix parameterisation that differs from +the standard one by an overall phase matrix +diag(e^(i*delta_CP), 1, 1). This has no impact on +oscillation probabilities in the absence of NSI.

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.osc.scaling_params module

+

Author : Sharmistha Chattopadhyay +Date : August 10, 2023

+
+
+class pisa.stages.osc.scaling_params.Core_scaling_w_constrain[source]
+

Bases: object

+

Returns scaling factors for inner mantle and middle mantle by taking scaling factor of inner core and outer core as input. +Scaling factor of inner and outer core = core_density_scale (alpha) +Scaling factor of inner mantle = beta +Scaling factor of middle mantle = gamma +Outer mantle not scaled +This function solves the equations for two constraints: mass of earth and moment of inertia, by taking core_density_scale as an independent +parameter, and returns scaling factor factors for inner and middle mantle.

+
+
+property core_density_scale
+
+ +
+
+is_descending(lst)[source]
+
+ +
+
+is_positive(lst)[source]
+
+ +
+
+property scaling_array
+
+ +
+ +
+
+class pisa.stages.osc.scaling_params.Core_scaling_wo_constrain[source]
+

Bases: object

+

Takes scaling factors for core, inner mantle and outer mantle from pipeline and stores them in an array

+
+
+property core_density_scale
+
+ +
+
+property innermantle_density_scale
+
+ +
+
+property middlemantle_density_scale
+
+ +
+
+property scaling_factor_array
+
+ +
+ +
+
+class pisa.stages.osc.scaling_params.Mass_scaling[source]
+

Bases: object

+

Uses a single scaling factor for all the layers. Scaling factor can be only positive.

+
+
+property density_scale
+
+ +
+ +
+
+

pisa.stages.osc.two_nu_osc module

+

PISA pi stage for the calculation osc. probabilities assuming two-neutrino model

+
+
+class pisa.stages.osc.two_nu_osc.two_nu_osc(**std_kwargs)[source]
+

Bases: Stage

+

two neutrino osc PISA Pi class

+
+
Parameters:
+
    +
  • theta (quantity (angle))

  • +
  • deltam31 (quantity (mass^2))

  • +
+
+
+

Notes

+

For two-neutrino model, there is only one mass-splitting term +Atmospheric mixing angle is aproximated by theta (sin^2(2*theta))

+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.osc.nusquids.html b/pisa.stages.osc.nusquids.html new file mode 100644 index 000000000..f93f2d2c4 --- /dev/null +++ b/pisa.stages.osc.nusquids.html @@ -0,0 +1,117 @@ + + + + + + + pisa.stages.osc.nusquids package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.osc.nusquids package

+
+

Submodules

+
+
+

pisa.stages.osc.nusquids.nusquids_osc module

+
+
+

Module contents

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.osc.prob3numba.html b/pisa.stages.osc.prob3numba.html new file mode 100644 index 000000000..fe4c6bb59 --- /dev/null +++ b/pisa.stages.osc.prob3numba.html @@ -0,0 +1,370 @@ + + + + + + + pisa.stages.osc.prob3numba package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.osc.prob3numba package

+
+

Submodules

+
+
+

pisa.stages.osc.prob3numba.numba_osc_hostfuncs module

+

Host function wrappers for numba_osc_kernels.

+
+
+pisa.stages.osc.prob3numba.numba_osc_hostfuncs.CX = 'c16'
+

Complex string code to use, understood by both Numba and Numpy

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_hostfuncs.FX = 'f8'
+

Float string code to use, understood by both Numba and Numpy

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_hostfuncs.IX = 'i8'
+

Signed integer string code to use, understood by both Numba and Numpy

+
+ +
+
+

pisa.stages.osc.prob3numba.numba_osc_kernels module

+

Neutrino flavour oscillation in matter calculation +Based on the original prob3++ implementation of Roger Wendell +http://www.phy.duke.edu/~raw22/public/Prob3++/ (2012)

+

See numba_osc_tests.py for unit tests of functions in this module.

+
+
+pisa.stages.osc.prob3numba.numba_osc_kernels.get_transition_matrix(nubar, energy, rho, baseline, mix_nubar, mix_nubar_conj_transp, mat_pot, H_vac, decay_flag, H_decay, lri_pot, dm, transition_matrix)
+

Calculate neutrino flavour transition amplitude matrix

+
+
Parameters:
+
    +
  • nubar (int) – +1 for neutrinos, -1 for antineutrinos

  • +
  • energy (real float) – Neutrino energy, GeV

  • +
  • rho (real float) – Electron number density (in moles/cm^3) (numerically, this is just the +product of electron fraction and mass density in g/cm^3, since the +number of grams per cm^3 corresponds to the number of moles of nucleons +per cm^3)

  • +
  • baseline (real float) – Baseline, km

  • +
  • mix_nubar (complex 2d array) – Mixing matrix, already conjugated if antineutrino

  • +
  • mix_nubar_conj_transp (complex conjugate 2d array) – Conjugate transpose of mix_nubar

  • +
  • mat_pot (complex 2d array) – Generalised matter potential matrix without “a” factor (will be +multiplied with “a” factor); set to diag([1, 0, 0]) for only standard +oscillations

  • +
  • H_vac (complex 2d array) – Hamiltonian in vacuum, without the 1/2E term

  • +
  • H_decay (complex 2d array) – Decay matrix, without the 1/2E term

  • +
  • decay_flag (int) – +1 forstandard oscillations + decay, -1 for standard oscillations

  • +
  • lri_pot (real 2d array) – Potential contribution due to matter with the consideration of +Long Range Interaction. this potential not a generalised one, so +it passed as a separate matrix.

  • +
  • dm (real 2d array) – Mass splitting matrix, eV^2

  • +
  • transition_matrix (complex 2d array (empty)) – Transition matrix in mass eigenstate basis

  • +
+
+
+

Notes

+

For neutrino (nubar > 0) or antineutrino (nubar < 0) with energy energy +traversing layer of matter of uniform density rho with thickness baseline

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_kernels.osc_probs_layers_kernel(dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, density_in_layer, distance_in_layer, osc_probs)
+

Calculate oscillation probabilities

+

given layers of length and density

+
+
Parameters:
+
    +
  • dm (real 2d array) – Mass splitting matrix, eV^2

  • +
  • mix (complex 2d array) – PMNS mixing matrix

  • +
  • mat_pot (complex 2d array) – Generalised matter potential matrix without “a” factor (will be +multiplied with “a” factor); set to diag([1, 0, 0]) for only standard +oscillations

  • +
  • decay_flag (int) – +1 forstandard oscillations + decay, -1 for standard oscillations

  • +
  • mat_decay (complex 2d array) – decay matrix with -j*alpha3 = [2,2] element

  • +
  • lri_pot (real 2d array) – Potential contribution due to matter with the consideration of +Long Range Interaction. this potential not a generalised one, so +it passed as a separate matrix.

  • +
  • nubar (real int, scalar or Nd array (broadcast dim)) – 1 for neutrinos, -1 for antineutrinos

  • +
  • energy (real float, scalar or Nd array (broadcast dim)) – Neutrino energy, GeV

  • +
  • density_in_layer (real 1d array) – Density of each layer, moles of electrons / cm^2

  • +
  • distance_in_layer (real 1d array) – Distance of each layer traversed, km

  • +
  • osc_probs (real (N+2)-d array (empty)) – Returned oscillation probabilities in the form: +osc_prob[i,j] = probability of flavor i to oscillate into flavor j +with 0 = electron, 1 = muon, 3 = tau

  • +
+
+
+

Notes

+

!!! Right now, because of CUDA, the maximum number of layers +is hard coded and set to 120 (59Layer PREM + Atmosphere). +This is used for cached layer computation, where earth layer, which +are typically traversed twice (it’s symmetric) are not recalculated +but rather cached..

+
+ +
+
+

pisa.stages.osc.prob3numba.numba_osc_tests module

+

Tests for prob3numba code

+
+
+pisa.stages.osc.prob3numba.numba_osc_tests.MAT_DOT_MAT_SUBSCR = 'in,nj->ij'
+

matrix dot matrix subscripts for use by numpy.einsum

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.ary2str(array)[source]
+

Convert a numpy ndarray to string easy to copy back into code

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.auto_populate_test_case(tc, defaults)[source]
+

Populate defaults and construct dm / PMNS matrices if they aren’t +present in a test case.

+
+
Parameters:
+
    +
  • test_case (mutable mapping)

  • +
  • defaults (mapping)

  • +
+
+
+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.check(test, ref, label=None, ac_kw={'atol': 1.0000000000000002e-14, 'rtol': 1e-10}, ignore_fails=False)[source]
+

Check that test matches ref (closely enough).

+
+
Parameters:
+
    +
  • test

  • +
  • ref

  • +
  • ac_kw (mapping, optional) – Kwargs to np.allclose, as used by +pisa.utils.comparisons.recursiveEquality

  • +
  • ignore_fails (bool, optional) – If True and comparison fails, do not raise AssertionError

  • +
+
+
Raises:
+

AssertionError – If test is not close enough to ref and ignore_fails is False

+
+
+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.compare_numeric(test, ref, label=None, ac_kw={'atol': 1.0000000000000002e-14, 'rtol': 1e-10}, ignore_fails=False)[source]
+

Compare scalars or numpy ndarrays.

+
+
Parameters:
+
    +
  • test (scalar or numpy.ndarray)

  • +
  • ref (scalar or numpy.ndarray)

  • +
  • label (str or None, optional)

  • +
  • ac_kw (mapping, optional) – Keyword args to pass via **ac_kw to numpy.isclose / numpy.allclose

  • +
  • ignore_fails (bool, optional)

  • +
+
+
Returns:
+

rslt

+
+
Return type:
+

bool

+
+
+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.execute_func(func, func_kw)[source]
+

Run func with *func_kw.values() where outputs specify names in +func_kw taken to be outputs of the function; for these, mark changed. +Retrieve both input and output values as Numpy arrays on the host and +aggregate together in a single dict before returning.

+
+
Parameters:
+
    +
  • func (numba CPUDispatcher or CUDADispatcher)

  • +
  • func_kw (OrderedDict)

  • +
+
+
Returns:
+

ret_dict – Keys are arg names and vals are type-“correct” values; all arrays are +converted to host Numpy arrays

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.main(description='\nTests for prob3numba code\n')[source]
+

Script interface for test_prob3numba function

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.run_test_case(tc_name, tc, ignore_fails=False, define_as_ref=False)[source]
+

Run one test case

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.stability_test(func, func_kw, ref_path, ignore_fails=False, define_as_ref=False)[source]
+

basic stability test of a Numba CPUDispatcher function (i.e., function +compiled via @jit / @njit)

+
+ +
+
+pisa.stages.osc.prob3numba.numba_osc_tests.test_prob3numba(ignore_fails=False, define_as_ref=False)[source]
+

Run all unit test cases for prob3numba code

+
+ +
+
+

pisa.stages.osc.prob3numba.test_numba module

+

Test functions used during developpement of the osc. code +Please ignore unless you are the author

+
+
+pisa.stages.osc.prob3numba.test_numba.main()[source]
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.pid.html b/pisa.stages.pid.html new file mode 100644 index 000000000..cd2c02c9a --- /dev/null +++ b/pisa.stages.pid.html @@ -0,0 +1,176 @@ + + + + + + + pisa.stages.pid package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.pid package

+
+

Submodules

+
+
+

pisa.stages.pid.shift_scale_pid module

+

The purpose of this stage is shift and/or scale the pid values.

+
+
+class pisa.stages.pid.shift_scale_pid.shift_scale_pid(**std_kwargs)[source]
+

Bases: Stage

+

Shift/scale pid.

+
+
Parameters:
+

params

+
biasfloat

shift pid values by given bias

+
+
scalefloat

scale pid values by given scale factor

+
+
+

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Perform computation

+
+ +
+
+setup_function()[source]
+

Setup the stage

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.reco.html b/pisa.stages.reco.html new file mode 100644 index 000000000..16c5e6e3e --- /dev/null +++ b/pisa.stages.reco.html @@ -0,0 +1,299 @@ + + + + + + + pisa.stages.reco package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.reco package

+
+

Submodules

+
+
+

pisa.stages.reco.resolutions module

+

Stage for resolution improvement studies

+
+
+class pisa.stages.reco.resolutions.resolutions(**std_kwargs)[source]
+

Bases: Stage

+

stage to change the reconstructed information by a given amount +This can be used to esimate the impact of improved recosntruction +resolutions for instance

+
+
Parameters:
+

params

Expected params ..

+
energy_improvement : quantity (dimensionless)
+   scale the reco error down by this fraction
+coszen_improvement : quantity (dimensionless)
+    scale the reco error down by this fraction
+pid_improvement : quantity (dimensionless)
+    applies a shift to the classification parameter
+
+
+

+
+
+
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.reco.simple_param module

+

Create reconstructed and PID variables based on truth information +for MC events using simple parameterisations.

+
+
+class pisa.stages.reco.simple_param.simple_param(**std_kwargs)[source]
+

Bases: Stage

+

Stage to generate reconstructed parameters (energy, coszen, pid) using simple parameterizations. +These are not fit to any input data, but are simple and easily understandable and require no +input reconstructed events.

+

Can easily be tuned to any desired physics case, rught now repesent a DeepCore/ICU-like detector.

+
+
Parameters:
+

params (ParamSet) –

Must exclusively have parameters:

+
+
perfect_recobool

If True, use “perfect reco”: reco == true, numu(bar)_cc -> tracks, rest to cascades +If False, use the parametrised reco energy, coszen and pid functions

+
+
reco_energy_paramsdict

Dict defining the params argument to simple_reco_energy_parameterization +See simple_reco_energy_parameterization documentatio for more details

+
+
reco_coszen_paramsdict

Dict defining the params argument to simple_reco_coszen_parameterization +See simple_reco_coszen_parameterization documentatio for more details

+
+
pid_track_paramsdict

Dict defining the params argument to simple_pid_parameterization +See simple_pid_parameterization documentatio for more details

+
+
track_pidfloat

The numerical ‘pid’ variable value to assign for tracks

+
+
cascade_pidfloat

The numerical ‘pid’ variable value to assign for cascades

+
+
+

+
+
+
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+pisa.stages.reco.simple_param.simple_pid_parameterization(particle_key, true_energy, params, track_pid, cascade_pid, random_state)[source]
+

Function to assign a PID based on truth information. +Is particle-, interaction- and energy-dependent +Approximating energy dependence using a logistic function. +Can use as a placeholder if real reconstructions are not currently available.

+
+
Parameters:
+
    +
  • particle_key (string) – Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc.

  • +
  • true_energy (array) – True energy array.

  • +
  • params (dict) – keys : particle key (wilcards accepted) +values : Logistic function params for track ID (list) : [ normalisation (plateau height), steepness of rise, true_energy at half-height ] +(example: params = {‘nue*_cc’:[0.05,0.2,15.],})

  • +
  • track_pid (float) – A PID value to assign to track-like events

  • +
  • cascade_pid (float) – A PID value to assign to cascade-like events

  • +
  • random_state (np.random.RandomState) – User must provide the random state, meaning that reproducible results +can be obtained when calling multiple times.

  • +
+
+
Returns:
+

pid – PID values.

+
+
Return type:
+

array

+
+
+
+ +
+
+pisa.stages.reco.simple_param.simple_reco_coszen_parameterization(particle_key, true_energy, true_coszen, params, random_state)[source]
+

Function to produce a smeared reconstructed cos(zenith) distribution. +Resolution is particle- and energy-dependent +Use as a placeholder if real reconstructions are not currently available. +Keep within the rotational bounds

+
+
Parameters:
+
    +
  • true_coszen (array) – True cos(zenith angle) array.

  • +
  • true_energy (array) – True energy array.

  • +
  • params (dict) – keys : particle key (wilcards accepted) +values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] +(example: params = {‘nue*_cc’:[10.,0.2,0.5],})

  • +
  • random_state (np.random.RandomState) – User must provide the random state, meaning that reproducible results +can be obtained when calling multiple times.

  • +
+
+
Returns:
+

reco_coszen – Reconstructed cos(zenith angle) array.

+
+
Return type:
+

array

+
+
+
+ +
+
+pisa.stages.reco.simple_param.simple_reco_energy_parameterization(particle_key, true_energy, params, random_state)[source]
+

Function to produce a smeared reconstructed energy distribution. +Resolution is particle- and energy-dependent +Use as a placeholder if real reconstructions are not currently available.

+
+
Parameters:
+
    +
  • particle_key (string) – Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc.

  • +
  • true_energy (array) – True energy array.

  • +
  • params (dict) – keys : particle key (wilcards accepted) +values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] +(example: params = {‘nue*_cc’:[10.,0.2,0.2],})

  • +
  • random_state (np.random.RandomState) – User must provide the random state, meaning that reproducible results +can be obtained when calling multiple times.

  • +
+
+
Returns:
+

reco_energy – Reconstructed energy array.

+
+
Return type:
+

array

+
+
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.unfold.html b/pisa.stages.unfold.html new file mode 100644 index 000000000..501f16556 --- /dev/null +++ b/pisa.stages.unfold.html @@ -0,0 +1,117 @@ + + + + + + + pisa.stages.unfold package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.unfold package

+
+

Submodules

+
+
+

pisa.stages.unfold.roounfold module

+
+
+

Module contents

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.utils.html b/pisa.stages.utils.html new file mode 100644 index 000000000..f60dcd502 --- /dev/null +++ b/pisa.stages.utils.html @@ -0,0 +1,523 @@ + + + + + + + pisa.stages.utils package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.utils package

+
+

Submodules

+
+
+

pisa.stages.utils.add_indices module

+

PISA module to prep incoming data into formats that are +compatible with the mc_uncertainty likelihood formulation

+

This module takes in events containers from the pipeline, and +introduces an additional array giving the indices where each +event falls into.

+

module structure imported from bootcamp example

+
+
+class pisa.stages.utils.add_indices.add_indices(**std_kwargs)[source]
+

Bases: Stage

+

PISA Pi stage to map out the index of the analysis +binning where each event falls into.

+
+
Parameters:
+
    +
  • params – foo : Quantity +bar : Quanitiy with time dimension

  • +
  • Notes

  • +
  • ------

  • +
  • module (- input and calc specs are predetermined in the) – (inputs from the config files will be disregarded)

  • +
  • bin_indices (- stage appends an array quantity called)

  • +
  • by (- stage also appends an array mask to access events) – bin index later in the pipeline

  • +
+
+
+
+
+setup_function()[source]
+

Calculate the bin index where each event falls into

+

Create one mask for each analysis bin.

+
+ +
+ +
+
+

pisa.stages.utils.adhoc_sys module

+

Stage to implement an ad-hoc systematic that corrects the discrepancy between data and +MC in one particular variable. This can be used to check how large the impact of such a +hypothetical systematic would be on the physics parameters of an analysis.

+
+
+class pisa.stages.utils.adhoc_sys.adhoc_sys(data=None, params=None, variable_name=None, scale_file=None, **std_kwargs)[source]
+

Bases: Stage

+

Stage to re-weight events according to factors derived from post-fit data/MC +comparisons. The comparisons are produced somewhere externally and stored as a JSON +which encodes the binning that was used to make the comparison and the resulting +scaling factors.

+
+
Parameters:
+
    +
  • variable_name (str) – Name of the variable to correct data/MC agreement for. The variable must be +loaded in the data loading stage and it must be present in the loaded JSON file.

  • +
  • scale_file (str) – Path to the file which contains the binning and the scale factors. The JSON +file must contain a dictionary in which, for each variable, a 1D binning and +an array of factors. This file is produced externally from PISA.

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.utils.bootstrap module

+

Make bootstrap samples of data.

+

This stage allows one to resample datasets to estimate MC uncertainties without having +to decrease statistics. Bootstrap samples are produced by random selection with +replacement, which is implemented in this stage by an equivalent re-weighting of +events.

+
+
+class pisa.stages.utils.bootstrap.bootstrap(seed=None, **std_kwargs)[source]
+

Bases: Stage

+

Stage to make bootstrap samples from input data.

+
+
Parameters:
+

seed (int, optional) – Seed for the random number generator.

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+pisa.stages.utils.bootstrap.insert_bootstrap_after_data_loader(cfg_dict, seed=None)[source]
+

Given a pipeline configuration parsed with parse_pipeline_config, insert the +bootstrap stage directly after the simple_data_loader stage and return the +modified config dict.

+
+
Parameters:
+
    +
  • cfg_dict (collections.OrderedDict) – Pipeline configuration in the form of an ordered dictionary.

  • +
  • seed (int, optional) – Seed to be placed into the pipeline configuration.

  • +
+
+
Returns:
+

A deepcopy of the original input cfg_dict with the configuration of the +bootstrap stage inserted after the data loader.

+
+
Return type:
+

collections.OrderedDict

+
+
+
+ +
+
+pisa.stages.utils.bootstrap.test_bootstrap()[source]
+

Unit test for the bootstrap stage.

+
+ +
+
+

pisa.stages.utils.fix_error module

+

Stage to take the initial errors of MC and keep them +for all minimization.

+

Needed to allow mod_chi2 to behave correctly

+
+
+class pisa.stages.utils.fix_error.fix_error(**std_kwargs)[source]
+

Bases: Stage

+

stage to fix the error returned by template_maker.

+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.utils.hist module

+

Stage to transform arrays with weights into actual histograms +that represent event counts

+
+
+class pisa.stages.utils.hist.hist(apply_unc_weights=False, unweighted=False, **std_kwargs)[source]
+

Bases: Stage

+

stage to histogram events

+
+
Parameters:
+

unweighted (bool, optional) – Return un-weighted event counts in each bin.

+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.utils.kde module

+

Stage to transform arrays with weights into KDE maps +that represent event counts

+
+
+class pisa.stages.utils.kde.kde(bw_method='silverman', coszen_name='reco_coszen', oversample=10, coszen_reflection=0.25, alpha=0.1, stack_pid=True, stash_hists=False, bootstrap=False, bootstrap_niter=10, bootstrap_seed=None, linearize_log_dims=True, **std_kargs)[source]
+

Bases: Stage

+

stage to KDE-map events

+
+
Parameters:
+
    +
  • bw_method (string) – ‘scott’ or ‘silverman’ (see kde module)

  • +
  • coszen_name (string) – Binning name to identify the coszen bin that needs to undergo special +treatment for reflection

  • +
  • oversample (int) – Evaluate KDE at more points per bin, takes longer, but is more accurate

  • +
  • stash_hists (bool) – Evaluate KDE only once and stash the result. This effectively ignores all changes +from earlier stages, but greatly increases speed. Useful for muons where +only over-all weight and detector systematic variations matter, which can both +be applied on the histograms after this stage.

  • +
  • bootstrap (bool) – Use the bootstrapping technique to estimate errors on the KDE histograms.

  • +
  • linearize_log_dims (bool) – If True (default), calculate the KDE for a dimension that is binned +logarithmically on the logarithm of the sample values. This generally results +in better agreement of the total normalization of the KDE’d histograms to the +sum of weights.

  • +
+
+
+

Notes

+

Make sure enough events are present with reco energy below and above the +binning range, otherwise events will only “bleed out”

+
+
+apply()[source]
+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.utils.kfold module

+

Make K-folds of data.

+

This stage can be used to split MC into chunks of equal size and to select only one +chunk to make histograms from. It uses the KFold class from scikit-learn to make +“test” and “train” indeces for the dataset and sets all weights in the “train” +indeces to zero. Optionally, weights can be re-scaled by the number of splits to +renormalize the total rates.

+
+
+class pisa.stages.utils.kfold.kfold(n_splits, select_split=0, seed=None, renormalize=False, shuffle=False, save_mask=False, **std_kwargs)[source]
+

Bases: Stage

+

Stage to make splits of the MC set and select one split to make histograms. +The weight of all indeces not belonging to the selected split are set to +zero.

+
+
Parameters:
+
    +
  • (int) (n_splits)

  • +
  • (int (seed)

  • +
  • optional) (shuffle indeces before splitting)

  • +
  • (int

  • +
  • optional)

  • +
  • (bool (shuffle) – by the number of splits

  • +
  • optional) – by the number of splits

  • +
  • (bool

  • +
  • optional)

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.utils.resample module

+

Stage to transform binned data from one binning to another while also dealing with +uncertainty estimates in a reasonable way. In particular, this allows up-sampling from a +more coarse binning to a finer binning.

+

The implementation is similar to that of the hist stage, hence the over-writing of +the apply method.

+
+
+class pisa.stages.utils.resample.ResampleMode(value)[source]
+

Bases: Enum

+

Enumerates sampling methods of the resample stage.

+
+
+ARB = 3
+
+ +
+
+DOWN = 2
+
+ +
+
+UP = 1
+
+ +
+ +
+
+class pisa.stages.utils.resample.resample(scale_errors=True, **std_kwargs)[source]
+

Bases: Stage

+

Stage to resample weighted MC histograms from one binning to another.

+

The origin binning is given as calc_mode and the output binning is given in +apply_mode.

+
+
Parameters:
+

scale_errors (bool, optional) – If True (default), apply scaling to errors.

+
+
+
+
+apply()[source]
+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+pisa.stages.utils.resample.test_resample()[source]
+

Unit test for the resampling stage.

+
+ +
+
+

pisa.stages.utils.set_variance module

+

Override errors and replace with manually chosen error fraction.

+
+
+pisa.stages.utils.set_variance.apply_floor(val, out)[source]
+
+ +
+
+pisa.stages.utils.set_variance.set_constant(val, out)[source]
+
+ +
+
+class pisa.stages.utils.set_variance.set_variance(variance_scale=1.0, variance_floor=None, expected_total_mc=None, divide_total_mc=False, **std_kwargs)[source]
+

Bases: Stage

+

Override errors and replace with manually chosen variance.

+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.stages.xsec.html b/pisa.stages.xsec.html new file mode 100644 index 000000000..2cc634a75 --- /dev/null +++ b/pisa.stages.xsec.html @@ -0,0 +1,284 @@ + + + + + + + pisa.stages.xsec package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.stages.xsec package

+
+

Submodules

+
+
+

pisa.stages.xsec.dis_sys module

+

Stage to apply pre-calculated DIS uncertainties +Study done by Maria Liubarska & Juan Pablo Yanez, more information available here: +https://drive.google.com/open?id=1SRBgIyX6kleYqDcvop6m0SInToAVhSX6 +ToDo: tech note being written, link here as soon as available

+
+
+class pisa.stages.xsec.dis_sys.dis_sys(extrapolation_type='constant', extrapolation_energy_threshold=<Quantity(100, 'gigaelectron_volt')>, **std_kwargs)[source]
+

Bases: Stage

+

Stage to apply pre-calculated DIS systematics.

+
+
Parameters:
+
    +
  • data

  • +
  • params

    +
    Must contain ::

    dis_csms : quantity (dimensionless)

    +
    +
    +

  • +
  • extrapolation_type (string) – choice of [‘constant’, ‘linear’, ‘higher’]

  • +
  • extrapolation_energy_threshold (float) – Below what energy (in GeV) to extrapolate +Defaults to 100. CSMS not considered reliable below 50-100 GeV

  • +
+
+
+

Notes

+
+
Requires the events have the following keys ::
+
true_energy

Neutrino energy in GeV

+
+
bjorken_y

Inelasticity

+
+
dis

1 if event is DIS, else 0

+
+
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

pisa.stages.xsec.genie_sys module

+

Stage to apply pre-calculated Genie uncertainties

+
+
+pisa.stages.xsec.genie_sys.apply_genie_sys(genie_params, linear_fits, quad_fits, out)[source]
+
+ +
+
+class pisa.stages.xsec.genie_sys.genie_sys(interactions='Genie_Ma_QE, Genie_Ma_RES', names='maccqe, maccres', **std_kwargs)[source]
+

Bases: Stage

+

Stage to apply pre-calculated Genie systematics.

+
+
Parameters:
+

params

Must contain

+
parameters specified in interactions (dimensionless)
+
+
+

+
+
+

Notes

+

Requires the events have the following keys for each included interaction

+
linear_fit_{name}
+    Genie linear coefficient for interaction {name}
+quad_fit_{name}
+    Genie quadratic coefficient for interaction {name}
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Check the range of the parameter in the analysis. Send a warning if these are beyond +- 2sigma

+
+ +
+ +
+
+

pisa.stages.xsec.nutau_xsec module

+

A stage to apply nutau cross-section uncertainties as implemented in +https://github.com/marialiubarska/nutau_xsec +It interpolates between different nutau CC cross section models as compared in this +paper: +https://arxiv.org/pdf/1008.2984.pdf?fname=cm&font=TypeI

+
+
+class pisa.stages.xsec.nutau_xsec.nutau_xsec(xsec_file='cross_sections/interp_nutau_xsec_protocol2.pckl', **std_kwargs)[source]
+

Bases: Stage

+

Nu_tau cross-section correction to interpolate between different nutau CC +cross-section models. This requires the interpolated file produced by +Maria Liubarska: https://github.com/marialiubarska/nutau_xsec

+
+
Parameters:
+
    +
  • xsec_file ((string)) – Path to pickled interpolated function. Default is included in PISA in +pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl

  • +
  • params (ParamSet or sequence with which to instantiate a ParamSet.) –

    Expected params ..

    +
    scale : quantity (dimensionless)
    +    Scaling between different cross-section models. The range [-1, 1]
    +    covers all models tested in the paper.
    +
    +
    +

  • +
+
+
+
+
+apply_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+compute_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+
+setup_function()[source]
+

Implement in services (subclasses of Stage)

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.utils.html b/pisa.utils.html new file mode 100644 index 000000000..0f7ca3fde --- /dev/null +++ b/pisa.utils.html @@ -0,0 +1,6358 @@ + + + + + + + pisa.utils package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.utils package

+
+

Subpackages

+
+ +
+
+
+

Submodules

+
+
+

pisa.utils.barlow module

+

Likelihoods class for computing Poisson and Barlow likelihoods.

+

The Poisson likelihood assumes the template being compared against is the +perfect expectation, while the Barlow likelihood accounts for the template +being imperfect due to being generated from finite Monte Carlo statistics.

+
+
+class pisa.utils.barlow.Likelihoods[source]
+

Bases: object

+

A class to handle the likelihood calculations in OscFit. It can +be used in other poisson binned-likelihood calculators as well. +The class includes two likelihood spaces: the Poisson and the +Barlow LLH.

+

The Poisson likelihood is the ideal case and assumes infinite +statistical accuracy on the Monte Carlo distributions. This is +the simple case and has been used in the past for analyses, but +should not be used if there’s a significant statistical error on +one of the samples.

+

The Barlow likelihood is an implementation of the likelihood model +given in doi:10.1016/0010-4655(93)90005-W (“Fitting using finite +Monte Carlo samples” by Barlow and Beeston). This requires the +unweighted distributions of the MC and involves assuming that each +MC samples is drawn from an underlying “true” expectation distribution +which should be fit. This gives (number of bins)x(number of samples) +new parameters to fit and allows the shape of the distributions to +fluctuate in order to fit both the observed MC and the observed +data. This gives a more informed result and allows one to estimate +the effect of the finite MC samples.

+

To use this, you need to run set_data, set_mc, and the set_unweighted +functions.

+
+

Important

+

the set_mc function takes a histogram of the average +weight per event for each bin! not the total weighted histogram!

+
+

Simply calling the get_llh function after these will return the +best fit LLH for your chosen likelihood function. The function takes +the name of the likelihood space (“Poisson” or “Barlow”). You can +retrieve the best fit weighted plots using the get_plot (total best-fit +histogram including all samples) and the get_single_plots (the list +of best-fit weighted histograms for each sample).

+
+
+bestfit_plots = None
+
+ +
+
+current_bin = None
+
+ +
+
+data_histogram = None
+
+ +
+
+get_llh(llh_type)[source]
+

Calculate the likelihood given the data, average weights, and the +unweighted histograms. You can choose between “Poisson” and “Barlow” +likelihoods at the moment.

+

If using the “Barlow” LLH, note that the method is picked to be Powell +with 25 iterations maximum per step. This is not optimized at all and +was explicitly chosen simply because it “worked”. This doesn’t work +with the bounds set in the normal way, so the positive-definiteness of +the rates is enforced in the get_llh_barlow_bin method.

+
+ +
+
+get_llh_barlow_bin(a_i)[source]
+

The Barlow LLH finds the best-fit “expected” MC distribution using +both the data and observed MC as constraints. Each bin is independent +in this calculation, since the assumption is that there are no +correlations between bins. This likely leads to a somewhat worse limit +than you might get otherwise, but at least its conservative.

+

If you have a good idea for how to extend this to include bin-to-bin, +let me know and I can help implement it.

+
+ +
+
+get_llh_poisson()[source]
+

The standard binned-poisson likelihood comparing the weighted MC +distribution to the data, ignoring MC statistical uncertainties.

+
+ +
+
+get_plot()[source]
+

Get the total weighted best-fit histogram post-fit.

+
+ +
+
+get_single_plots()[source]
+

Get the individual weighted best-fit histograms post-fit.

+
+ +
+
+mc_histograms = None
+
+ +
+
+reset()[source]
+

Re-instantiate so that we can reuse the object

+
+ +
+
+set_data(data_histogram)[source]
+

Set up the data histogram. This histogram is flattened in order to +make the looping later on a bit simpler to handle.

+
+ +
+
+set_mc(mc_histograms)[source]
+

Set up the MC histogram. Each histogram is flattened in order to +make the looping later on a bit simpler to handle. The values in each +bin should correspond to the weight-per-event in that bin, NOT the +total weight in that bin!

+

Make sure you don’t have any nulls here.

+
+ +
+
+set_unweighted(unweighted_histograms)[source]
+

Save the unweighted distributions in the MC. These can include 0s.

+
+ +
+
+shape = None
+
+ +
+
+unweighted_histograms = None
+
+ +
+ +
+
+

pisa.utils.barr_parameterization module

+

External PISA file to be kept in private location +Containing the Barr parameterizations for flux modifications

+

originaly developped by Juan Pablo Yanez

+
+
+

pisa.utils.callable module

+

This is used to define a serializable object used for functions assigned to the DerivedParams

+

These can be constructed and evaluated symbolically and procedurally. +In principle, we may even be able to include a filepath to a seriialized Funct object such that the pipeline configs can include definitions for these therein

+
+
Contains

OPS - an Enum listing recognized operations +TrigOps - some definitions for handling some of the trig functions, shared by Vars and Functs +Var - a class for representing variables +Funct - a series of operations done representing the functions

+
+
+

Uses - quite simple!

+

create some vars and do math on them

+

x = Var(‘x’) +y = Var(‘y’)

+

function = sin(x**2) + 3*cos(y+1)**2

+

The object function is now callable with keyword arguments passed to the instantiated Vars

+
+
+class pisa.utils.callable.Funct(first_var)[source]
+

Bases: TrigOps

+

Functions are constructed as a series of operations one to some starting value. +The starting value can be whatever - a value, function or variable

+
+
+add_opp(kind: OPS, other)[source]
+
+ +
+
+classmethod from_json(filename)[source]
+

Instantiate a new Param from a JSON file

+
+ +
+
+classmethod from_state(state)[source]
+
+ +
+
+property serializable_state
+
+ +
+
+property state
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+ +
+
+class pisa.utils.callable.OPS(value)[source]
+

Bases: Enum

+

Enumerate different operations so that the Funct class can do math

+
+
+ADD = 0
+
+ +
+
+COS = 4
+
+ +
+
+MUL = 1
+
+ +
+
+POW = 2
+
+ +
+
+SIN = 3
+
+ +
+
+TAN = 5
+
+ +
+
+classmethod from_json(filename)[source]
+

Instantiate a new Param from a JSON file

+
+ +
+
+classmethod from_state(state)[source]
+
+ +
+
+property serializable_state
+
+ +
+
+property state
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+ +
+
+class pisa.utils.callable.TrigOps[source]
+

Bases: object

+

These are all used by both the Var and Funct classes, so there’s some fun python hierarchy stuff going on instead

+
+
+property cos
+
+ +
+
+property sin
+
+ +
+
+property tan
+
+ +
+ +
+
+class pisa.utils.callable.Var(name=None)[source]
+

Bases: TrigOps

+

A variable

+

These are a lot like functions in how they are combined, but instead evaluate simply to one of the keyword arguments passed to Functions

+
+
+classmethod from_json(filename)[source]
+

Instantiate a new Param from a JSON file

+
+ +
+
+classmethod from_state(state)[source]
+
+ +
+
+property name
+
+ +
+
+property serializable_state
+
+ +
+
+property state
+
+ +
+
+to_json(filename, **kwargs)[source]
+

Serialize the state to a JSON file that can be instantiated as a new +object later.

+
+ +
+ +
+
+pisa.utils.callable.cos(target: Funct)[source]
+
+ +
+
+pisa.utils.callable.sin(target: Funct)[source]
+
+ +
+
+pisa.utils.callable.tan(target: Funct)[source]
+
+ +
+
+

pisa.utils.comparisons module

+

Utilities for comparing things.

+

recursiveEquality and recursiveAllclose traverse into potentially nested +datstructures and compare all elements for equality. +normQuant performs the same kind of traversal, but returns a normalized +version of the input object whereby “essentially-equal” things are returned as +“actually-equal” objects.

+

These functions are at the heart of hashing behaving as one expects, and this +in turn is essential for caching to work correctly.

+
+

Important

+

Read carefully how each function in this module defines +“equality” for various datatypes so you understand what two things being +“equal” based upon these functions actually means.

+

E.g., (nan == nan) == True, uncorrelated uncertainties are equal if both +their nominal values and standard deviations are equal regardless if they +come from independent random variables, etc.

+
+
+
+pisa.utils.comparisons.ALLCLOSE_KW = {'atol': 2.220446049250313e-16, 'equal_nan': True, 'rtol': 1e-12}
+

Keyword args to pass to all calls to numpy.allclose

+
+ +
+
+pisa.utils.comparisons.EQUALITY_PREC = 1e-12
+

Precision (“rtol”) for performing equality comparisons

+
+ +
+
+pisa.utils.comparisons.EQUALITY_SIGFIGS = 12
+

Significant figures for performing equality comparisons

+
+ +
+
+pisa.utils.comparisons.FTYPE_PREC = 2.220446049250313e-16
+

Machine precision (“eps”) for PISA’s FTYPE (float datatype)

+
+ +
+
+pisa.utils.comparisons.interpret_quantity(value, expect_sequence)[source]
+

Interpret a value as a pint Quantity via pisa.ureg

+
+
Parameters:
+
    +
  • value (scalar, Quantity, or sequence interpretable as Quantity)

  • +
  • expect_sequence (bool) – Specify True if you expect a sequence of quantities (or a +pint-Quantity containing a numpy array). This allows interpreting each +element of a passed sequence as a quantity. Otherwise, specify False +if you expect a scalar. This allows interpreting a pint.Qauntity tuple +as a ascalar (the first element of the tuple is the magnitude and the +second element contains the units).

  • +
+
+
Returns:
+

value

+
+
Return type:
+

Quantity

+
+
+
+ +
+
+pisa.utils.comparisons.isbarenumeric(x)[source]
+

Check if input is a numerical datatype (including arrays of numbers) but +without units. Note that for these purposes, booleans are not considered +numerical datatypes.

+
+ +
+
+pisa.utils.comparisons.isscalar(x)[source]
+

Check if input is a scalar object.

+

Best check found for now as to scalar-ness (works for pint, +uncertainties, lists, tuples, numpy arrays, …) but not tested against all +things.

+
+

See also

+

numpy.isscalar

+
+
+ +
+
+pisa.utils.comparisons.isunitless(x)[source]
+

Check if input is unitless. Only the first scalar element of an Iterable +(or arbitrarily nested Iterables) is checked if it has units.

+

Strings and bools are considered to be unit-less.

+
+
Parameters:
+

x (object)

+
+
Returns:
+

isunitless

+
+
Return type:
+

bool

+
+
Raises:
+

TypeError if a Mapping is encountered

+
+
+
+ +
+
+pisa.utils.comparisons.isvalidname(x)[source]
+

Name that is valid to use for a Python variable

+
+ +
+
+pisa.utils.comparisons.normQuant(obj, sigfigs=None, full_norm=True)[source]
+

Normalize quantities such that two things that should be equal are +returned as identical objects.

+

Handles floating point numbers, pint quantities, uncertainties, and +combinations thereof as standalone objects or in sequences, dicts, or numpy +ndarrays. Numerical precision issues and equal quantities represented in +differently-scaled or different systems of units come out identically.

+

Outputs from this function (not the inputs) deemed to be equal by the +above logic will compare to be equal (via the == operator and via +pisa.utils.comparisons.recursiveEquality) and will also hash to equal +values (via pisa.utils.hash.hash_obj).

+
+
Parameters:
+
    +
  • obj – Object to be normalized.

  • +
  • sigfigs (None or int > 0) – Number of digits to which to round numbers’ significands; if None, do +not round numbers.

  • +
  • full_norm (bool) –

    If True, does full translation and normalization which is good across +independent invocations and is careful about normalizing units, etc. +If false, certain assumptions are made that modify the behavior +described below in the Notes section which help speed things up in the +case of e.g. a minimizer run, where we know certain things won’t +change: +* Units are not normalized. They are assumed to stay the same from

    +
    +

    run to run.

    +
    +
      +
    • sigfigs are not respected; full significant figures are returned +(since it takes time to round all values appropriately).

    • +
    +

  • +
+
+
Returns:
+

normed_obj – Simple types are returned as the same type as at the input, Numpy +ndarrays are returned in the same shape and representation as the +input, Mappings (dicts) are returned as OrderedDict, and all other +sequences or iterables are returned as (possibly nested) lists.

+
+
Return type:
+

object roughly of same type as input obj

+
+
+

Notes

+

Conversion logic by obj type or types found within obj:

+
    +
  • Sequences and OrderedDicts (but not numpy arrays) are iterated +through recursively.

  • +
  • Mappings without ordering (e.g. dicts) are iterated through +recursively after sorting their keys, and are returned as +OrderedDicts (such that the output is always consistent when +serialized).

  • +
  • Sequences (not numpy arrays) are iterated through recursively.

  • +
  • Numpy ndarrays are treated as the below data types (according to the +array’s dtype).

  • +
  • Simple objects (non-floating point / non-sequence / non-numpy / etc.) +are returned unaltered (e.g. strings).

  • +
  • Pint quantities (numbers with units): Convert to their base units.

  • +
  • Floating-point numbers (including the converted pint quantities): +Round values to sigfigs significant figures.

  • +
  • Numbers with uncertainties (via the uncertainties module) have +their nominal values rounded as above but their standard deviations are +rounded to the same order of magnitude (not number of significant +figures) as the nominal. +Therefore passing obj=10.23+/-0.25 and sigfigs=2 returns 10+/-0.0. +Note that correlations are lost in the outputs of this function, so +equality of the output requires merely having equal nomial values and +equal standard deviations. +The calculations leading to these equal numbers might have used +independent random variables to arrive at them, however, and so the +uncertainties module would have evaluated them to be unequal. [1]

  • +
+

To achieve rounding that masks floating point precision issues, set +sigfigs to a value less than the number of decimal digits used for the +significand of the calculation floating point precision.

+

For reference, the IEEE 754 floating point standard [2] uses the following:

+
    +
  • FP16 (half precision): 3.31 significand decimal digits (11 bits)

  • +
  • FP32 (single precision): 7.22 significand decimal digits (24 bits)

  • +
  • FP64 (double precision): 15.95 significand decimal digits (53 bits)

  • +
  • FP128 (quad precision): 34.02 significand decimal digits (113 bits)

  • +
+

Logic for rounding the significand for numpy arrays was derived from [3].

+

References

+

[1] https://github.com/lebigot/uncertainties/blob/master/uncertainties/test_uncertainties.py#L436

+

[2] https://en.wikipedia.org/wiki/IEEE_floating_point

+

[3] http://stackoverflow.com/questions/18915378, answer by user BlackGriffin.

+

Examples

+

Pint quantities hash to unequal values if specified in different scales or +different systems of units (even if the underlying physical quantity is +identical).

+
>>> from pisa import ureg
+>>> from pisa.utils.hash import hash_obj
+>>> q0 = 1 * ureg.m
+>>> q1 = 100 * ureg.cm
+>>> q0 == q1
+True
+>>> hash_obj(q0) == hash_obj(q1)
+False
+
+
+

Even the to_base_units() method fails for hashing to equal values, as +q0 is a float and q1 is an integer.

+
>>> hash_obj(q0.to_base_units()) == hash_obj(q1.to_base_units())
+False
+
+
+

Even if both quantities are floating point numbers, finite precision +effects in the to_base_units conversion can still cause two things which +we “know” are equal to evaluate to be unequal.

+
>>> q2 = 0.1 * ureg.m
+>>> q3 = 1e5 * ureg.um
+>>> q2 == q3
+True
+>>> q2.to_base_units() == q3.to_base_units()
+False
+
+
+

normQuant handles all of these issues given an appropriate sigfigs +argument.

+
>>> q2_normed = normQuant(q2, sigfigs=12)
+>>> q3_normed = normQuant(q3, sigfigs=12)
+>>> q2_normed == q3_normed
+True
+>>> hash_obj(q2_normed) == hash_obj(q3_normed)
+True
+
+
+
+ +
+
+pisa.utils.comparisons.recursiveAllclose(x, y, *args, **kwargs)[source]
+

Recursively verify close-equality between two objects x and y. If +structure is different between the two objects, returns False

+

args and kwargs are passed into numpy.allclose() function

+
+ +
+
+pisa.utils.comparisons.recursiveEquality(x, y, allclose_kw={'atol': 2.220446049250313e-16, 'equal_nan': True, 'rtol': 1e-12})[source]
+

Recursively verify equality between two objects x and y.

+
+
Parameters:
+
    +
  • x – Objects to be compared

  • +
  • y – Objects to be compared

  • +
+
+
+

Notes

+
+
Possibly unintuitive behaviors:
    +
  • Sequences of any type evaluate equal if their contents are the same. +E.g., a list can equal a tuple.

  • +
  • Mappings of any type evaluate equal if their contents are the same. +E.g. a dict can equal an OrderedDict.

  • +
  • nan SHOULD equal nan, +inf SHOULD equal +inf, and -inf SHOULD equal -inf +… but this *only* holds true (as of now) if those values are in +numpy arrays! (TODO!)

  • +
  • Two pint units with same __repr__ but that were derived from different +unit registries evaluate to be equal. (This is contrary to pint’s +implementation of equality comparisons, which is careful in case a +unit is defined differently in different registries. We’ll assume this +isn’t done here in PISA, until a use case arises where this is no +longer a good assumption.)

  • +
  • Two pint units that are compatible but different (even just in +magnitude prefix) evaluate to be unequal.

    +

    This behavior is chosen for the case where numbers are given +independently of their units, and hence the automatic conversion +facility available for comparing pint quantities is not available. +The only reliable way to test equality for these “less intelligent” +objects is to ensure that both the numerical values are exactly equal +and that the units are exactly equal; the latter includes order of +magnitude prefixes (micro, milli, …, giga, etc.).

    +
  • +
+
+
+
+ +
+
+pisa.utils.comparisons.test_isscalar()[source]
+

Unit test for isscalar function

+
+ +
+
+pisa.utils.comparisons.test_isunitless()[source]
+

Unit tests for isunitless function

+
+ +
+
+pisa.utils.comparisons.test_normQuant()[source]
+

Unit test for normQuant function

+
+ +
+
+pisa.utils.comparisons.test_recursiveEquality()[source]
+

Unit test for recursiveEquality function

+
+ +
+
+

pisa.utils.config_parser module

+

Parse a ConfigFile object into a dict containing an item for every analysis +stage, that itself contains all necessary instantiation arguments/objects for +that stage. for en example config file, please consider +$PISA/pisa_examples/resources/settings/pipeline/example.cfg

+
+

Config File Structure

+

A pipeline config file is expected to contain something like the following, +with the sections [pipeline] and corresponding [stage:service] +required, in addition to a [binning] section:

+
#include file_x.cfg as x
+#include file_y.cfg as y
+
+[pipeline]
+
+order = stageA.serviceA, stageB.serviceB
+
+output_binning = bining1
+output_key = ('weights', 'errors')
+
+
+[binning]
+
+#include generic_binning.cfg
+
+binning1.order = axis1, axis2
+binning1.axis1 = {
+    'num_bins': 40, 'is_log': True, 'domain': [1,80] units.GeV, 'tex': r'A_1'
+    }
+binning1.axis2 = {
+    'num_bins': 10, 'is_lin': True, 'domain': [1,5], 'tex': r'A_2'
+    }
+
+
+[stageA.serviceA]
+
+input_binning = bining1
+output_binning = binning1
+error_method = None
+debug_mode = False
+
+param.p1 = 0.0 +/- 0.5 units.deg
+param.p1.fixed = False
+param.p1.range = nominal + [-2.0, +2.0] * sigma
+
+param.selector1.p2 = 0.5 +/- 0.5 units.deg
+param.selector1.p2.fixed = False
+param.selector1.p2.range = nominal + [-2.0, +2.0] * sigma
+
+param.selector2.p2 = -0.5 +/- 0.1 units.deg
+param.selector2.p2.fixed = False
+param.selector2.p2.range = nominal + [-2.0, +2.0] * sigma
+
+
+[stageB.serviceB]
+
+input_binning = bining1
+output_binning = binning1
+error_method = None
+debug_mode = False
+
+param.p1 = ${stageA.serviceA:param.p1}
+param.selector1.p2 = ${stageA.serviceA:param.selector1.p2}
+param.selector2.p2 = ${stageA.serviceA:param.selector2.p2}
+...
+
+
+
    +
  • #include statements can be used to include other config files. The +#include statement must be the first non-whitespace on a line, and these +statements can be used anywhere within a config file.

  • +
  • #include resource as xyz statements behave similarly, but prepend the +included file’s text with a setion header containing xyz in this case.

  • +
  • pipeline is the top-most section that defines the hierarchy of stages and +what services to be instantiated.

  • +
  • binning can contain different binning definitions, that are then later +referred to from within the stage.service sections.

  • +
  • stage.service one such section per stage.service is necessary. It +contains some options that are common for all stages (binning, +error_method and debug_mode) as well as all the necessary arguments and +parameters for a given stage.

  • +
  • Duplicate section headers and duplicate keys within a section are illegal.

  • +
+
+

Param definitions

+

Every key in a stage section that starts with param.<name> is interpreted and +parsed into a PISA pisa.core.param.Param object. These can be strings +(e.g. a filename–but don’t use any quotation marks) or quantities (numbers +with units).

+

Quantities expect an expression that can be converted by the +parse_quantity() function. The expression for a quantity can optionally +include a simple Gaussian prior and units. The simplest definition of a +quantity with neither Gaussian prior nor units would look something like this:

+
param.p1 = 12.5
+
+
+

Gaussian priors can be included for a quantity using +/- notation, where +the number that follows +/- is the standard deviation. E.g.:

+
param.p1 = 12.5 +/- 2.3
+
+
+

If no units are explicitly set for a quantity, it is taken to be a quantity +with special units dimensionless. Units can be set by multiplying (using +*) by units.<unit> where <unit> is the short or long name +(optionally including metric prefix) of a unit. E.g. the following set +equivalent values for params p1 and p2:

+
param.p1 = 12.5 * units.GeV
+param.p2 = 12.5 * units.gigaelectronvolt
+
+
+

and this can be combined with the Gaussian-prior +/- notation:

+
param.p1 = 12.5 +/- 2.3 * units.GeV
+
+
+

Additional arguments to a parameter are passed in with the . notation, for +example param.p1.fixed = False, which makes p1 a free parameter in the +fit (by default a parameter is fixed unless specified like this).

+

Uniform and spline priors can also be set using the .prior attribute:

+
param.p1 = 12.5
+param.p1.prior = uniform
+
+param.p2 = 12.5
+param.p2.prior = spline
+param.p2.prior.data = resource_loc
+
+
+

If no prior is specified, it is taken to have no prior (or, equivalently, a +uniform prior with no penalty). A uniform prior can be explicitly set or +arbitrary (Priors (including a Gaussian prior, as an alternative to the above +notation) can be explicitly set using the .prior attribute of a param:

+

A range must be given for a free parameter. Either as absolute range [x,y] or +in conjunction with the keywords nominal (= nominal parameter value) and +sigma if the param was specified with the +/- notation.

+

.prior is another argument, that can take the values uniform or spline, +for the latter case a .prior.data will be expected, pointing to the spline +data file.

+
+
N.B.
+

Params that have the same name in multiple stages of the pipeline are +instantiated as references to a single param in memory, so updating one updates +all of them.

+

Note that this mechanism of synchronizing parameters holds only within the +scope of a single pipeline; synchronization of parameters across pipelines is +done by adding the pipelines to a single DistributionMaker object and updating +params through the DistributionMaker’s update_params method.

+

If you DO NOT want parameters to be synchronized, provide a unique_id for them. +This is imply done by setting .unique_id

+
+
+
+

Param selector

+

A special mechanism allows the user to specify multiple, different values for +the same param via the param selector method. This can be used for example for +hypothesis testing, there for hypothesis A a param takes a certain value, while +for hypothesis B a different value.

+

A given param, say foo, then needs two definitions like the following, +assuming we name our selections A and B:

+
param.A.foo = 1
+param.B.foo = 2
+
+
+

The default param selector needs to be spcified under section pipeline as e.g.

+
param_selections = A
+
+
+

Which will default the value of 1 for param foo. An instatiated pipeline can +dynamically switch to another selection after instantiation.

+

Multiple different param selectors are allowed in a single config. In the +default selection they must be separated by commas.

+
+
+
+
+class pisa.utils.config_parser.MutableMultiFileIterator(fp, fpname, fpath=None)[source]
+

Bases: object

+

Iterate through the lines of an already-open file (fp) but then can pause +at any point and open and iterate through another file via the +switch_to_file method (and this file can be paused to iterate through +another, etc.).

+

This has the effect of in-lining files within files for e.g. parsing +multiple files as if they’re a singe file. Which line comes from which file +is also tracked for generating maximally-useful error messages, via the +location method.

+

Note that circular references are not allowed.

+
+
Parameters:
+
    +
  • fp (file-like object) – The (opened) main config to be read. E.g. can be an opened file, +io.StringIO object, etc.

  • +
  • fpname (string) – Identifier for the initially fp object

  • +
+
+
+
+
+property location
+

Full hierarchical location, formatted for display

+
+
Type:
+

string

+
+
+
+ +
+
+switch_to_file(fp=None, fpname=None)[source]
+

Switch iterator to a new resource location to continue processing.

+
+
Parameters:
+
    +
  • fp (None or file-like object) – If fp is specified, this takes precedence over fpname.

  • +
  • fpname (None or string) – Path of the file or resource to read from. This resource will be +located and opened if fp is None.

  • +
  • encoding – Argument is passed to the builtin open function for opening +the file.

  • +
+
+
+
+ +
+ +
+
+class pisa.utils.config_parser.PISAConfigParser[source]
+

Bases: RawConfigParser

+

Parses a PISA config file, extending configparser.RawConfigParser +(the backport of RawConfigParser from Python 3.x) by adding the ability to +include external files inline via, for example:

+
#include /path/to/file.cfg
+#include path/to/resource.cfg
+#include path/to/resource2.cfg as section2
+
+[section1]
+key11 = value1
+key12 = ${section2:key21}
+key13 = value3
+
+
+

where the files or resources located at “/path/to/file.cfg”, +“path/to/resource.cfg”, and “path/to/resource2.cfg” are effectively inlined +wherever the #include statements occur.

+

The #include path/to/resource2.cfg as section_name syntax +prefixes the contents of resource2.cfg by a section header named +“section2”, expanding resource2.cfg as:

+
[section2]
+line1 of resource2.cfg
+line2 of resource2.cfg
+... etc.
+
+
+

Special parsing rules we have added to make #include behavior sensible:

+
    +
  1. Using an #include file that contains a sction header +([section_name]) or using #include file as section_name +requires that the next non-blank / non-comment / non-#include line be a +new section header ([section_name2]).

  2. +
  3. Empty sections after fully parsing a config will raise a ValueError. +This is likely never a desired behavior, and should alert the user to +inadvertent use of #include.

  4. +
+

Also note that, unlike the default ConfigParser +behavior, ExtendedInterpolation is used, whitespace +surrounding text in a section header is ignored, empty lines are not +allowed between multi-line values, and section names, keys, and values are +all case-sensitive.

+

All other options are taken as the defaults / default behaviors of +ConfigParser.

+

See help for configparser.ConfigParser for further help on valid +config file syntax and parsing behavior.

+
+
+INCLUDE_AS_RE = re.compile('\\s*(?P<file>.+)((?:\\s+as\\s+)(?P<as>\\S+))')
+
+ +
+
+INCLUDE_RE = re.compile('\\s*#include\\s+(?P<include>\\S.*)')
+
+ +
+
+SECTCRE = re.compile('\\[\\s*(?P<header>[^]]+?)\\s*\\]')
+
+ +
+
+add_section(section)[source]
+

Create a new section in the configuration. Extends +RawConfigParser.add_section by validating if the section name is +a string.

+
+ +
+
+property hash
+

Hash value of the contents (does not depend on order of +sections, but does depend on order of keys within each section)

+
+
Type:
+

int

+
+
+
+ +
+
+optionxform(optionstr)[source]
+

Enable case-sensitive options in .cfg files, and force all values to +be ASCII strings.

+
+ +
+
+read(filenames, encoding=None)[source]
+

Override read method to interpret filenames as PISA resource +locations, then call overridden read method. Also, IOError fails +here, whereas it is ignored in RawConfigParser.

+

For further help on this method and its arguments, see +:method:`~backports.configparser.configparser.read`

+
+ +
+
+set(section, option, value=None)[source]
+

Set an option. Extends RawConfigParser.set by validating type and +interpolation syntax on the value.

+
+ +
+ +
+
+pisa.utils.config_parser.interpret_param_subfields(subfields, selector=None, pname=None, attr=None)[source]
+

Recursively interpret and parse parameter subfields.

+
+
Parameters:
+
    +
  • subfields (list of strings)

  • +
  • selector (string)

  • +
  • pname (string)

  • +
  • attr (list of strings)

  • +
+
+
Returns:
+

infodict

+
+
Return type:
+

dict

+
+
+

Examples

+
>>> print(interpret_param_subfields(subfields=['nh', 'deltam31', 'range']))
+{'pname': 'deltam31', 'subfields': [], 'attr': ['range'], 'selector': 'nh'}
+
+
+
+ +
+
+pisa.utils.config_parser.parse_param(config, section, selector, fullname, pname, value)[source]
+

Parse a param specification from a PISA config file.

+

Note that if the param sepcification does not include fixed, +prior, and/or range, the defaults for these are: +fixed = True, prior = None, and range = None.

+

If a prior is specified explicitly via .prior, this takes precendence, +but if no .prior is specified and the param’s value is parsed to be a +uncertainties.AffineScalarFunc (i.e. have std_dev attribute), a +Gaussian prior is constructed from that and then the AffineScalarFunc is +stripped out of the param’s value (such that it is just a +Quantity).

+
+
Parameters:
+
+
+
Returns:
+

param

+
+
Return type:
+

pisa.core.param.Param

+
+
+
+ +
+
+pisa.utils.config_parser.parse_pipeline_config(config)[source]
+

Parse pipeline config.

+
+
Parameters:
+

config (string or ConfigParser)

+
+
Returns:
+

stage_dicts – Keys are (stage_name, service_name) tuples and values are OrderedDicts +with keys the argnames and values the arguments’ values. Some known arg +values are parsed out fully into Python objects, while the rest remain +as strings that must be used or parsed elsewhere.

+
+
Return type:
+

OrderedDict

+
+
+
+ +
+
+pisa.utils.config_parser.parse_quantity(string)[source]
+

Parse a string into a pint/uncertainty quantity.

+
+
Parameters:
+

string (string)

+
+
Returns:
+

value

+
+
Return type:
+

pint.quantity of uncertainties.core.AffineScalarFunc

+
+
+

Examples

+
>>> quant = parse_quantity('1.2 +/- 0.7 * units.meter')
+>>> print(str(quant))
+1.2+/-0.7 meter
+>>> print('{:~}'.format(quant))
+1.2+/-0.7 m
+>>> print(quant.magnitude)
+1.2+/-0.7
+>>> print(quant.units)
+meter
+>>> print(quant.nominal_value)
+1.2
+>>> print(quant.std_dev)
+0.7
+
+
+

Also note that spaces and the “*” are optional:

+
>>> print(parse_quantity('1+/-1units.GeV'))
+1.0+/-1.0 gigaelectron_volt
+
+
+
+ +
+
+pisa.utils.config_parser.parse_string_literal(string)[source]
+

Evaluate a string with certain special values, or return the string. Any +further parsing must be done outside this module, as this is as specialized +as we’re willing to be in assuming/interpreting what a string is supposed +to mean.

+
+
Parameters:
+

string (string)

+
+
Returns:
+

val

+
+
Return type:
+

bool, None, or str

+
+
+

Examples

+
>>> print(parse_string_literal('true'))
+True
+
+
+
>>> print(parse_string_literal('False'))
+False
+
+
+
>>> print(parse_string_literal('none'))
+None
+
+
+
>>> print(parse_string_literal('something else'))
+'something else'
+
+
+
+ +
+
+

pisa.utils.cross_sections module

+

Define CrossSections class for importing, working with, and storing neutrino +cross sections

+
+
+class pisa.utils.cross_sections.CrossSections(ver=None, energy=None, xsec='cross_sections/cross_sections.json')[source]
+

Bases: FlavIntData

+

Cross sections for each neutrino flavor & interaction type (“flavint”). +What is stored are PER-H2O-MOLECULE cross sections, in units of [m^2].

+

Be careful when using these; cross sections are often plotted in the +literature as per-nucleon and per-energy with units [10^-38 cm^2 / GeV].

+
+
verstring

Version of cross sections to load from file. E.g. ‘genie_2.6.4’

+
+
energyNone or array of float

Energies at which cross sections are defined.

+
+
xsecstring, dictonary, or another CrossSections object

If str: provides PISA resource name from which to load cross sections +If dict or CrossSections object: construct cross sections from a

+
+

deepcopy of that object

+
+
+
+
+
+get_version()[source]
+

Return the cross sections version string

+
+ +
+
+get_xs_ratio_integral(flavintgroup0, flavintgroup1, e_range, gamma=0, average=False)[source]
+

Energy-spectrum-weighted integral of (possibly a ratio of) +(possibly-combined) flavor/interaction type cross sections.

+
+
Parameters:
+
    +
  • flavintgroup0 (NuFlavIntGroup or convertible thereto) – Flavor(s)/interaction type(s) for which to combine cross sections +for numerator of ratio

  • +
  • flavintgroup1 (None, NuFlavIntGroup or convertible thereto) – Flavor(s)/interaction type(s) for which to combine cross sections +for denominator of ratio. If None is passed, the denominator of +the “ratio” is effectively 1.

  • +
  • e_range – Range of energy over which to integrate (GeV)

  • +
  • gamma (float >= 0) – Power law spectral index used for weighting the integral, +E^{-gamma}. Note that gamma should be >= 0.

  • +
  • average (bool) – If True, return the average of the cross section (ratio) +If False, return the integral of the cross section (ratio)

  • +
+
+
+
+

See also

+

See

+
+
+ +
+
+get_xs_ratio_value(flavintgroup0, flavintgroup1, energy, gamma=0)[source]
+

Get ratio of combined cross sections for flavintgroup0 to combined +cross sections for flavintgroup1, weighted by E^{-gamma}.

+
+
Parameters:
+
    +
  • flavintgroup0 (NuFlavIntGroup or convertible thereto)

  • +
  • flavintgroup1 (NuFlavIntGroup or convertible thereto)

  • +
  • energy (numeric or sequence thereof) – Energy (or energies) at which to evaluate total cross section, in +units of GeV

  • +
+
+
Returns:
+

    +
  • Ratio of combined cross sections flavintgroup0 / flavintgroup1

  • +
  • evaluated at each energy. Shape of returned value matches that of

  • +
  • passed energy parameter.

  • +
+

+
+
+
+ +
+
+get_xs_value(flavintgroup, energy)[source]
+

Get (combined) cross section value (in units of m^2) for +flavintgroup at energy (in units of GeV).

+
+
Parameters:
+
    +
  • flavintgroup (NuFlavIntGroup or convertible thereto)

  • +
  • energy (numeric or sequence thereof) – Energy (or energies) at which to evaluate total cross section, in +units of GeV

  • +
+
+
Returns:
+

    +
  • Combined cross section for flavor/interaction types in units of

  • +
  • m^2, evaluated at each energy. Shape of returned value matches that of

  • +
  • passed energy parameter.

  • +
+

+
+
+
+ +
+
+static load(fpath, ver=None, **kwargs)[source]
+

Load cross sections from a file locatable and readable by the PISA +from_file command. If ver is provided, it is used to index into the +top level of the loaded dictionary

+
+ +
+
+static load_root_file(fpath, ver, tot_sfx='_tot', o_sfx='_o16', h_sfx='_h1', plt_sfx='_plot')[source]
+

Load cross sections from root file, where graphs are first-level in +hierarchy. This is yet crude and not very flexible, but at least it’s +recorded here for posterity.

+

Requires ROOT and ROOT python module be installed

+
+
Parameters:
+
    +
  • fpath (string) – Path to ROOT file

  • +
  • ver (string) – Necessary to differentaite among different file formats that Ken +has sent out

  • +
  • tot_sfx (string (default = '_tot')) – Suffix for finding total cross sections in ROOT file (if these +fields are found, the oxygen/hydrogen fields are skipped)

  • +
  • o_sfx (string (default = '_o16')) – Suffix for finding oxygen-16 cross sections in ROOT file

  • +
  • h_sfx (string (default = '_h1')) – Suffix for finding hydrogen-1 cross sections in ROOT file

  • +
  • plt_sfx (string (default = '_plt')) – Suffix for plots containing cross sections per GeV in ROOT file

  • +
+
+
Returns:
+

xsec – Object containing the loaded cross sections

+
+
Return type:
+

pisa.utils.flavInt.FlavIntData

+
+
+
+ +
+
+classmethod new_from_root(fpath, ver, **kwargs)[source]
+

Instantiate a new CrossSections object from ROOT file.

+
+
Parameters:
+
    +
  • fpath (string) – PISA resource specification for location of ROOT file

  • +
  • ver (string) – Specify the version name of the cross sections loaded

  • +
  • **kwargs – Passed to method load_root_file()

  • +
+
+
Return type:
+

Instantiated CrossSections object

+
+
+
+ +
+
+plot(save=None)[source]
+

Plot cross sections per GeV; optionally, save plot to file. Requires +matplotlib and optionally uses seaborn to set “pretty” defaults.

+
+
saveNone, str, or dict

If None, figure is not saved (default) +If a string, saves figure as that name +If a dict, calls pyplot.savefig(**save) (i.e., save contains +keyword args to savefig)

+
+
+
+ +
+
+save(fpath, ver=None, **kwargs)[source]
+

Save cross sections (and the energy specification) to a file at +fpath.

+
+ +
+
+set_version(ver)[source]
+

Set the cross sections version to the string ver.

+
+ +
+
+static validate_xsec(energy, xsec)[source]
+

Validate cross sections

+
+ +
+ +
+
+pisa.utils.cross_sections.manual_test_CrossSections(outdir=None)[source]
+

Unit tests for CrossSections class

+
+ +
+
+

pisa.utils.data_proc_params module

+

DataProcParams class for importing, working with, and storing data processing +parameters (e.g., PINGU’s V5 processing).

+
+
+class pisa.utils.data_proc_params.DataProcParams(detector, proc_ver, data_proc_params=None)[source]
+

Bases: dict

+

Class for importing, working with, and storing data processing +parameters.

+

Implements cutting and particle identification (PID) functionality that can +be applied to MC/data that have the specified verion of processing applied +to it.

+
+
Parameters:
+
    +
  • data_proc_params (string or dict) –

    +
    If string: looks for the corresponding JSON resource (file) and loads

    the contents as a data_proc_params dict

    +
    +
    +

    If dict: taken to be data_proc_params dict +The data_proc_params dict must follow the format described below.

    +

  • +
  • detector (string) – Converted to lower-case string which must be a detector key in +data_proc_params dict

  • +
  • proc_ver – Converted to lower-case string which must be a proc_ver key in +data_proc_params dict

  • +
+
+
+

Notes

+

All information describing the processing version is loaded from a JSON +file with the following defined format:

+

Note that the following common cuts are defined in this class and so +needn’t be defined in the JSON file:

+
+
+
+

‘1’ : Select particles

+
+

‘-1’ : Select anti-particles +‘cc’ : Select charged-current (CC) interactions +‘nc’ : Select neutral-current (NC) interactions

+
+

‘true_upgoing_zen’ : Select true-upgoing events by zenith angle

+
+

‘true_upgoing_coszen’ : Select true-upgoing events by cos(zenith) angle

+

data_proc_params dictionary format (and same for corresponding JSON file):

+
{
+  # Specify the detector name, lower case
+
+  "<lower-case detector name>": {
+
+    # Specify the processing version, lower case
+    # Examples in PINGU include "4", "5", and "5.1"
+
+    "<lower-case processing version>": {
+
+
+      # Mapping from standard names to path where these can be found in
+      # source HDF5 file; separate HDF5 path nodes with a forward-slash.
+      #
+      # Fields that cuts or particles in the "cuts"/"pid" sections below
+      # require (e.g., "cuts_step_1" for PINGU v5 processing), must be
+      # added here so the code knows how to extract the info from the
+      # source HDF5 file.
+      #
+      # Outputting a PID field to the destination PISA HDF5 file will *not*
+      # be done if the "pid" field is omitted below.
+      #
+      # In addition to the below-named fields, "true_coszen" and
+      # "reco_coszen" are generated from the data from the "true_zenith"
+      # and "reco_zenith" fields, respectively. So any of those fields can
+      # be used via the aforementioned names.
+
+      "field_map": {
+        "run": "<HDF5 path to corresponding node>",
+        "nu_code": "<HDF5 path to corresponding node>",
+        "true_energy": "<HDF5 path to corresponding node>",
+        "true_zenith": "<HDF5 path to corresponding node>",
+        "reco_energy": "<HDF5 path to corresponding node>",
+        "reco_zenith": "<HDF5 path to corresponding node>",
+        "one_weight": "<HDF5 path to corresponding node>",
+        "generator_volume": "<HDF5 path to corresponding node>",
+        "generator_radius": "<HDF5 path to corresponding node>",
+        "detection_length": "<HDF5 path to corresponding node>",
+        "interaction_type": "<HDF5 path to corresponding node>",
+        "azimuth_min": "<HDF5 path to corresponding node>",
+        "azimuth_max": "<HDF5 path to corresponding node>",
+        "zenith_min": "<HDF5 path to corresponding node>",
+        "zenith_max": "<HDF5 path to corresponding node>",
+        "energy_log_min": "<HDF5 path to corresponding node>",
+        "energy_log_max": "<HDF5 path to corresponding node>",
+        "num_events_per_file": "<HDF5 path to corresponding node>",
+        "sim_spectral_index": "<HDF5 path to corresponding node>",
+        "pid": "<HDF5 path to corresponding node>",
+      },
+
+
+      # Mapping from file's nu code to PDG nu codes (only necessary if
+      # nu_code values are not the PDG codes listed below)
+
+      "nu_code_to_pdg_map": {
+        "<source nue code>":        12,
+        "<source nue_bar code>":   -12,
+        "<source numu code>":       14,
+        "<source numu_bar code>":  -14,
+        "<source nutau code>":      16,
+        "<source nutau_bar code>": -16
+      },
+
+
+      # Specify standard cuts
+
+      "cuts": {
+
+
+        # Cut name; "bjrej" and "analysis" listed here are just example
+        # names for cuts one might specify
+
+        "bgrej": {
+
+          # Which of the fields in the field_map (and the derived fields
+          # such as true_coszen and reco_coszen) are required for this cut?
+
+          "fields": ["<field1>", "<field2>", ... ],
+
+          # Expression for an event to pass the cut (not get thrown away);
+          # see below for details on specifying an expression
+
+          "pass_if": "<expression>"
+        },
+
+        "analysis": {
+          "fields": ["<field1>", "<field2>", ... ],
+          "pass_if": "<expression>"
+        },
+
+        "<cut name>": {
+          "fields": ["<field1>", "<field2>", ... ],
+          "pass_if": "<expression>"
+        }
+      },
+
+
+      # Particle identification section
+
+      "pid": {
+
+
+        # Name of the particle (case-insensitive); e.g., in PINGU this
+        # would be "trck" or "cscd"
+
+        "<particle name 1>": {
+
+
+          # Which of the fields in the field_map (and the derived fields
+          # such as true_coszen and reco_coszen) are required for this cut?
+
+          "field": [<field1>, <field2>, ...],
+
+
+          # Expression for an event to be classified as this type of
+          # particle; # see below for details on specifying an expression
+
+          "criteria": "<expression>"
+        }
+
+        "<particle name 2>": {
+          "field": [<field1>, <field2>, ...],
+          "criteria": "<expression>"
+        }
+      }
+    }
+  }
+}
+
+
+

Note that cuts “pass_if” and pid “criteria” expressions can make use of the +numpy namespace and have access to any columns extracted from the source +HDF5 file, by the standardized names given in the “field_map”. For example, +if the following “fields” are specified for a cut in the data_proc_params +dict:

+
+

[“cuts_step_1”, “cuts_step_2”]

+
+
+
then the following is a valid “pass_if” expression:

“(reco_zenith > pi/2) & (cuts_step_1 == 1) & (cuts_step_2 == 1)”

+
+
+
+
+apply_cuts(data, cuts, boolean_op='&', return_fields=None)[source]
+

Perform cuts on data and return a dict containing +return_fields from events that pass the cuts.

+
+
Parameters:
+
    +
  • data (single-level dict or FlavIntData object)

  • +
  • cuts (string or dict, or sequence thereof)

  • +
  • boolean_op (string)

  • +
  • return_fields (string or sequence thereof)

  • +
+
+
+
+ +
+
+static cut_bool_idx(h5group, cut_fields, keep_criteria)[source]
+

Return numpy boolean indexing for data in h5group given a cut +specified using cut_fields in the h5group and evaluation criteria +keep_criteria

+
+
Parameters:
+
    +
  • h5group (h5py node/entity)

  • +
  • cut_fields (field_map dict)

  • +
  • keep_criteria (string)

  • +
+
+
Returns:
+

bool_idx

+
+
Return type:
+

numpy array (1=keep, 0=reject)

+
+
+
+ +
+
+get_data(h5, run_settings=None, flav=None)[source]
+

Get data attached to an HDF5 node, returned as a dictionary.

+

The returned dictionary’s keys match those in the field_map and the +dict’s values are the data from the HDF5’s nodes found at the addresses +specified as values in the field_map

+
+
Parameters:
+

file_type (string, one of {'mc', 'data'})

+
+
+
+ +
+
+interpret_data(data)[source]
+

Perform mappings from non-standard to standard values (such as +translating non-PDG neutrino flavor codes to PDG codes) and add +fields expected to be useful (such as coszen, derived from zen fields).

+

Attach / reattach the translated/new fields to the data object passed +into this methd.

+
+ +
+
+static populate_global_namespace(h5group, field_map, allow_missing=False)[source]
+

Populate the Python global namespace with variables named as the +keys in field_map and values loaded from the h5group at addresses +specified by the corresponding values in field_map.

+
+ +
+
+static retrieve_expression(h5group, expression)[source]
+

Retrieve data from an HDF5 group h5group according to +expresssion. This can apply expressions with simple mathematical +operators and numpy functions to multiple fields within the HDF5 file +to derive the output. Python keywords are _not_ allowed, since they +may alias with a name.

+

Refer to any numpy functions by prefixing with either “np.<func>” or +“numpy.<func>”. In order to specify division, spaces must surround the +forward slash, such that it isn’t interpreted as a path.

+

Nodes in the HDF5 hierarchy are separated by forward slashes (“/”) in a +path spec. We restrict valid HDF5 node names to contain the characters +a-z, A-Z, 0-9, peroids (“.”), and underscores (“_”). with the +additional restriction that the node name must not start with a period +or a number, and a path cannot start with a slash.

+
+
Parameters:
+
    +
  • h5group (h5py Group)

  • +
  • expression (string) – Expression to evaluate.

  • +
+
+
Returns:
+

result

+
+
Return type:
+

result of evaluating expression

+
+
+

Examples

+
>>> retrieve_expression('np.sqrt(MCneutrino/x**2 + MCneutrino/y**2)')
+
+
+

Indexing into the data arrays can also be performed, and numpy masks +used as usual:

+
>>> expr = 'I3MCTree/energy[I3MCTree/event == I3EventHeader[0]
+
+
+
+ +
+
+static retrieve_node_data(h5group, address, allow_missing=False)[source]
+

Retrieve data from an HDF5 group group at address address. +Levels of hierarchy are separated by forward-slashes (‘/’).

+

See h5py for further details on specifying a valid address.

+
+ +
+
+static subselect(data, fields, indices=None)[source]
+
+ +
+
+static validate_cut_spec(cuts)[source]
+

Validate a cut specification dictionary

+
+ +
+
+static validate_pid_spec(pids)[source]
+

Validate a PID specification dictionary

+
+ +
+ +
+
+

pisa.utils.fileio module

+

Generic file I/O, dispatching specific file readers/writers as necessary

+
+
+pisa.utils.fileio.expand(path, exp_user=True, exp_vars=True, absolute=False, resolve_symlinks=False)[source]
+

Convenience function for expanding a path

+
+
Parameters:
+
    +
  • path (string) – Path to be expanded.

  • +
  • exp_vars (bool) – Expand the string using environment variables. E.g. +“$HOME/${vardir}/xyz” will have “$HOME” and “${vardir}$” replaced by +the values stored in “HOME” and “vardir”.

  • +
  • exp_user (bool) – Expand special home dir spec character, tilde: “~”.

  • +
  • absolute (bool) – Make a relative path (e.g. “../xyz”) absolute, referenced from system +root directory, “/dir/sbudir/xyz”.

  • +
  • resolve_symlinks (bool) – Resolve symlinks to the paths they refer to

  • +
+
+
Returns:
+

exp_path – Expanded path

+
+
Return type:
+

string

+
+
+
+ +
+
+pisa.utils.fileio.find_files(root, regex=None, fname=None, recurse=True, dir_sorter=<function nsort>, file_sorter=<function nsort>)[source]
+

Find files by re or name recursively w/ ordering.

+

Code adapted from +stackoverflow.com/questions/18282370/python-os-walk-what-order

+
+
Parameters:
+
    +
  • root (str) – Root directory at which to start searching for files

  • +
  • regex (str or re.SRE_Pattern) – Only yield files matching regex.

  • +
  • fname (str) – Only yield files matching fname

  • +
  • recurse (bool) – Whether to search recursively down from the root directory

  • +
  • dir_sorter – Function that takes a list and returns a sorted version of it, for +purposes of sorting directories

  • +
  • file_sorter – Function as specified for dir_sorter but used for sorting file names

  • +
+
+
Yields:
+
    +
  • fullfilepath (str)

  • +
  • basename (str)

  • +
  • match (re.SRE_Match or None)

  • +
+
+
+
+ +
+
+pisa.utils.fileio.from_cfg(fname)[source]
+

Load a PISA config file

+
+ +
+
+pisa.utils.fileio.from_file(fname, fmt=None, **kwargs)[source]
+

Dispatch correct file reader based on fmt (if specified) or guess +based on file name’s extension.

+
+
Parameters:
+
    +
  • fname (string) – File path / name from which to load data.

  • +
  • fmt (None or string) – If string, for interpretation of the file according to this format. If +None, file format is deduced by an extension found in fname.

  • +
  • **kwargs – All other arguments are passed to the function dispatched to read the +file.

  • +
+
+
Returns:
+

    +
  • Object instantiated from the file (string, dictionary, …). Each format

  • +
  • is interpreted differently.

  • +
+

+
+
Raises:
+

ValueError – If extension is not recognized

+
+
+
+ +
+
+pisa.utils.fileio.from_pickle(fname)[source]
+

Load from a Python pickle file

+
+ +
+
+pisa.utils.fileio.fsort(l, signed=True, reverse=False)[source]
+

Sort a sequence of strings with one or more floating point number fields +in using the floating point value(s) (and intervening strings are treated +as normally done). Note that + and - preceding a number are included in the +floating point value unless signed=False.

+

Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments

+
+
Parameters:
+
    +
  • l (sequence of strings) – Sequence of strings to be sorted.

  • +
  • signed (bool, optional) – Whether to include a “+” or “-” preceeding a number in its value to be +sorted. One might specify False if “-” is used exclusively as a +separator in the string.

  • +
  • reverse (bool, optional) – Whether to reverse the sort order (True => descending order)

  • +
+
+
Returns:
+

sorted_l – Sorted strings

+
+
Return type:
+

list of strings

+
+
+

Examples

+
>>> l = ['a-0.1.txt', 'a-0.01.txt', 'a-0.05.txt']
+>>> fsort(l, signed=True)
+['a-0.1.txt', 'a-0.05.txt', 'a-0.01.txt']
+
+
+
>>> fsort(l, signed=False)
+['a-0.01.txt', 'a-0.05.txt', 'a-0.1.txt']
+
+
+
+

See also

+
+
nsort

Sort using integer-only values of numbers; good for e.g. version numbers, where periods are separators rather than decimal points.

+
+
+
+
+ +
+
+pisa.utils.fileio.get_valid_filename(s)[source]
+

Sanitize string to make it reasonable to use as a filename.

+

From https://github.com/django/django/blob/master/django/utils/text.py

+
+
Parameters:
+

s (string)

+
+
+

Examples

+
>>> print(get_valid_filename(r'A,bCd $%#^#*!()"' .ext '))
+'a_bcd__.ext'
+
+
+
+ +
+
+pisa.utils.fileio.mkdir(d, mode=488, warn=True)[source]
+

Simple wrapper around os.makedirs to create a directory but not raise an +exception if the dir already exists

+
+
Parameters:
+
    +
  • d (string) – Directory path

  • +
  • mode (integer) – Permissions on created directory; see os.makedirs for details.

  • +
  • warn (bool) – Whether to warn if directory already exists.

  • +
+
+
+
+ +
+
+pisa.utils.fileio.nsort(l, reverse=False)[source]
+

Sort a sequence of strings containing integer number fields by the +value of those numbers, rather than by simple alpha order. Useful +for sorting e.g. version strings, etc..

+

Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments

+
+
Parameters:
+
    +
  • l (sequence of strings) – Sequence of strings to be sorted.

  • +
  • reverse (bool, optional) – Whether to reverse the sort order (True => descending order)

  • +
+
+
Returns:
+

sorted_l – Sorted strings

+
+
Return type:
+

list of strings

+
+
+

Examples

+
>>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt']
+>>> nsort(l)
+['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt']
+
+
+
+

See also

+
+
fsort

Sort sequence of strings with floating-point numbers in the strings.

+
+
+
+
+ +
+
+pisa.utils.fileio.nsort_key_func(s)[source]
+

Use as the key argument to the sorted function or sort method.

+

Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments

+

Examples

+
>>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt']
+>>> sorted(l, key=nsort_key_func)
+['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt']
+
+
+
+ +
+
+pisa.utils.fileio.to_file(obj, fname, fmt=None, overwrite=True, warn=True, **kwargs)[source]
+

Dispatch correct file writer based on fmt (if specified) or guess +based on file name’s extension

+
+ +
+
+pisa.utils.fileio.to_pickle(obj, fname, overwrite=True, warn=True)[source]
+

Save object to a pickle file

+
+ +
+
+

pisa.utils.fisher_matrix module

+

A Fisher matrix class definition.

+
+
+class pisa.utils.fisher_matrix.FisherMatrix(matrix, parameters, best_fits, priors=None, labels=None)[source]
+

Bases: object

+
+
+addPrior(par, sigma)[source]
+

Add a prior of value sigma to the existing one for par (in quadrature)

+
+ +
+
+calculateCovariance()[source]
+

Calculate covariance matrix from Fisher matrix (i.e. invert including priors).

+
+ +
+
+checkConsistency()[source]
+

Check whether number of parameters matches dimension of matrix; +matrix is symmetrical; parameter names are unique; and number of +best_fits, labels, and priors all match number of parameters.

+
+ +
+
+classmethod fromFile(filename)[source]
+

Load a Fisher matrix from a json file

+
+ +
+
+classmethod fromPaPAFile(filename)[source]
+

Load Fisher matrix from json file

+
+ +
+
+getBestFit(par)[source]
+

Get best fit value for given parameter

+
+ +
+
+getCorrelation(par1, par2)[source]
+

Returns correlation coefficient between par1 and par2

+
+ +
+
+getCovariance(par1, par2)[source]
+

Returns the covariance of par1 and par2

+
+ +
+
+getErrorEllipse(par1, par2, confLevel=0.6827)[source]
+

Returns a, b, tan(2 theta) of confLevel error ellipse +in par1-par2-plane with:

+

a: large half axis +b: small half axis +tan(2 theta): tilt angle, has to be divided by the aspect

+
+

ratio of the actual plot before taking arctan

+
+

Formulae taken from arXiv:0906.4123

+
+ +
+
+getLabel(par)[source]
+

Get pretty-print label for given parameter

+
+ +
+
+getParameterIndex(par)[source]
+

Whether par is already existing in parameter list

+
+ +
+
+getPrior(par)[source]
+

List the prior (sigma value) for par

+
+ +
+
+getPriorDict()[source]
+

List priors of all parameters (sigma values)

+
+ +
+
+getSigma(par)[source]
+

Returns full standard deviation of par, +marginalized over all other parameters

+
+ +
+
+getSigmaNoPriors(par)[source]
+

Returns standard deviation of par, marginalized over all other +parameters, but ignoring priors on this parameter

+
+ +
+
+getSigmaStatistical(par)[source]
+

Returns standard deviation of par, +if all other parameters are fixed (i.e. known infinitely well)

+
+ +
+
+getSigmaSystematic(par)[source]
+

Returns standard deviation of par for infinite statistics +(i.e. systematic error)

+
+ +
+
+getVariance(par)[source]
+

Returns full variance of par

+
+ +
+
+printResults(parameters=None, file=None)[source]
+

Prints statistical, systematic errors, priors, best fits +for specified (default: all) parameters

+
+ +
+
+printResultsSorted(par, file=None, latex=False)[source]
+

Prints statistical, systematic errors, priors, best fits +sorted by parameter par

+
+ +
+
+removeAllPriors()[source]
+

Remove all priors from this Fisher Matrix

+
+ +
+
+removeParameter(par)[source]
+

Remove par from Fisher matrix and recalculate covariance

+
+ +
+
+renameParameter(fromname, toname)[source]
+

Rename a parameter

+
+ +
+
+saveFile(filename)[source]
+

Write Fisher matrix to json file

+
+ +
+
+setLabel(par, newlabel)[source]
+

Change the pretty-print label for given parameter

+
+ +
+
+setPrior(par, sigma)[source]
+

Set prior for parameter ‘par’ to value sigma. If sigma is None, no +prior is assumed

+
+ +
+
+sortByParam(par)[source]
+

Sorts the parameters by their impact on parameter par. +Relevant quantity is covariance(par,i)/sigma_i.

+

Returns sorted list of (parameters, impact), par first, +then ordered descendingly by impact.

+
+ +
+
+static translatePrior(prior)[source]
+

Translates a Prior object, numeric, or None to the simplistic prior +format used internally (a value for sigma).

+
+
Parameters:
+

prior (Prior object (gaussian or uniform), float, or None)

+
+
Returns:
+

sigma

+
+
Return type:
+

Standard deviation of prior (np.inf for uniform Prior or None)

+
+
+
+ +
+ +
+
+

pisa.utils.flavInt module

+

Classes for working with neutrino flavors (NuFlav), interactions types +(IntType), “flavints” (a flavor and an interaction type) (NuFlavInt), and +flavint groups (NuFlavIntGroup) in a consistent and convenient manner.

+

FlavIntData class for working with data stored by flavint (flavor & +interaction type). This should replace the PISA convention of using raw +doubly-nested dictionaries indexed as [<flavor>][<interaction type>]. For +now, FlavIntData objects can be drop-in replacements for such dictionaries +(they can be accessed and written to in the same way since FlavIntData +subclasses dict) but this should be deprecated; eventually, all direct access +of the data structure should be eliminated and disallowed by the FlavIntData +object.

+

Define convenience tuples ALL_{x} for easy iteration

+
+
+class pisa.utils.flavInt.BarSep(val)[source]
+

Bases: object

+

Context manager to make global __BAR_SSEP__ modification slightly less +error-prone.

+

__BAR_SSEP__ defines the separator between a flavor and the string “bar” +(to define the flavor as the antiparticle version; e.g. nuebar). Some +datastructures in PISA 2 used ‘_’ between the two (“nue_bar”) while others +did not use this. To make dealing with this (slightly) less painful, this +context manager was introduced to switch between the PISA 3 default (no +‘_’) and the sometimes-use ‘_’ separator. See Examples for usage.

+
+
Parameters:
+

val (string) – Separator to use between flavor (“nue”, “numu”, “nutau”) and “bar”.

+
+
+

Examples

+
>>> nuebar = NuFlav('nuebar')
+>>> print(str(nuebar))
+nuebar
+>>> with BarSep('_'):
+...     print(nuebar)
+nue_bar
+>>> print(str(nuebar))
+nuebar
+
+
+
+ +
+
+class pisa.utils.flavInt.FlavIntData(val=None)[source]
+

Bases: dict

+

Container class for storing data for each NuFlavInt.

+
+
Parameters:
+

val (string, dict, or None) –

Data with which to populate the hierarchy.

+

If string, interpret as PISA resource and load data from it +If dict, populate data from the dictionary +If None, instantiate with None for all data

+

The interpreted version of val must be a valid data structure: A +dict with keys ‘nue’, ‘numu’, ‘nutau’, ‘nue_bar’, ‘numu_bar’, and +‘nutau_bar’; and each item corresponding to these keys must itself be a +dict with keys ‘cc’ and ‘nc’.

+

+
+
+

Notes

+

Accessing data (both for getting and setting) is fairly flexible. It uses +dict-like square-brackets syntax, but can accept any object (or two +objects) that are convertible to a NuFlav or NuFlavInt object. In the +former case, the entire flavor dictionary (which includes both ‘cc’ and +‘nc’) is returned, while in the latter case whatever lives at the node is +returned.

+

Initializing, setting and getting data in various ways:

+
>>> fi_dat = FlavIntData()
+>>> fi_dat['nue', 'cc'] = 1
+>>> fi_dat['nuenc'] = 2
+>>> fi_dat['numu'] = {'cc': 'cc data...', 'nc': 'nc data...'}
+>>> fi_dat[NuFlav(16), IntType(1)] == 4
+
+
+
>>> fi_dat['nuecc'] == 1
+True
+>>> fi_dat['NUE_NC'] == 2
+True
+>>> fi_dat['nu_e'] == {'cc': 1, 'nc': 2}
+True
+>>> fi_dat['nu mu cc'] == 'cc data...'
+True
+>>> fi_dat['nu mu'] == {'cc': 'cc data...', 'nc': 'nc data...'}
+True
+>>> fi_dat['nutau cc'] == 4
+True
+
+
+
+
+allclose(other, rtol=1e-05, atol=1e-08)[source]
+

Returns True if all data structures are equal and all numerical +values contained are within relative (rtol) and/or absolute (atol) +tolerance of one another.

+
+ +
+
+property flavints
+

all flavints present

+
+
Type:
+

tuple of NuFlavInt

+
+
+
+ +
+
+property flavs
+

all flavors present

+
+
Type:
+

tuple of NuFlav

+
+
+
+ +
+
+id_dupes(rtol=None, atol=None)[source]
+

Identify flavints with duplicated data (exactly or within a +specified tolerance), convert these NuFlavInt’s into NuFlavIntGroup’s +and returning these along with the data associated with each.

+
+
Parameters:
+
    +
  • rtol – Set to positive value to use as rtol argument for numpy allclose

  • +
  • atol – Set to positive value to use as atol argument for numpy allclose

  • +
  • 0 (If either rtol or atol is)

  • +
  • enforced. (exact equality is)

  • +
+
+
Returns:
+

    +
  • dupe_flavintgroups (list of NuFlavIntGroup) – A NuFlavIntGroup object is returned for each group of NuFlavInt’s +found with duplicate data

  • +
  • dupe_flavintgroups_data (list of objects) – Data associated with each NuFlavIntGroup in dupe_flavintgroups. +Each object in dupe_flavintgroups_data corresponds to, and in the +same order as, the objects in dupe_flavintgroups.

  • +
+

+
+
+
+ +
+
+save(fname, **kwargs)[source]
+

Save data structure to a file; see fileio.to_file for details

+
+ +
+
+validate(fi_container)[source]
+

Perform basic validation on the data structure

+
+ +
+ +
+
+class pisa.utils.flavInt.FlavIntDataGroup(val=None, flavint_groups=None)[source]
+

Bases: dict

+

Container class for storing data for some set(s) of NuFlavIntGroups +(cf. FlavIntData, which stores one datum for each NuFlavInt separately)

+
+
Parameters:
+
    +
  • val (None, str, or dict) – Data with which to populate the hierarchy

  • +
  • flavint_groups (None, str, or iterable) –

    User-defined groupings of NuFlavIntGroups. These can be specified +in several ways.

    +
    +
    None

    If val == None, flavint_groups must be specified +If val != None, flavitn_groups are deduced from the data

    +
    +
    string

    If val is a string, it is expected to be a comma-separated +list, each field of which describes a NuFlavIntGroup. The +returned list of groups encompasses all possible flavor/int +types, but the groups are mutually exclusive.

    +
    +
    iterable of strings or NuFlavIntGroup

    If val is an iterable, each member of the iterable is +interpreted as a NuFlavIntGroup.

    +
    +
    +

  • +
+
+
+
+
+allclose(other, rtol=1e-05, atol=1e-08)[source]
+

Returns True if all data structures are equal and all numerical +values contained are within relative (rtol) and/or absolute (atol) +tolerance of one another.

+
+ +
+
+property flavint_groups
+
+ +
+
+save(fname, **kwargs)[source]
+

Save data structure to a file; see fileio.to_file for details

+
+ +
+
+transform_groups(flavint_groups)[source]
+

Transform FlavIntDataGroup into a structure given by the input +flavint_groups.

+
+
Parameters:
+

flavint_groups (string, or sequence of strings or sequence of) – NuFlavIntGroups

+
+
Returns:
+

transformed_fidg

+
+
Return type:
+

FlavIntDataGroup

+
+
+
+ +
+
+validate(fi_container)[source]
+

Perform basic validation on the data structure

+
+ +
+ +
+
+class pisa.utils.flavInt.IntType(val)[source]
+

Bases: object

+
+

Interaction type object.

+
+
val

See Notes.

+
+
+
+
Instantiate via a val of:
    +
  • Numerical code: 1=CC, 2=NC

  • +
  • String (case-insensitive; all characters besides valid tokens are +ignored)

  • +
  • Instantiated IntType object (or any method implementing int_type.code +which returns a valid interaction type code)

  • +
  • Instantiated NuFlavInt object (or any object implementing int_type +which returns a valid IntType object)

  • +
+
+
+

The following, e.g., are all interpreted as charged-current IntTypes:

+
>>> IntType('cc')
+>>> IntType('
+     _cc
+
+
+
+
+
‘)
>>> IntType('numubarcc')
+>>> IntType(1)
+>>> IntType(1.0)
+>>> IntType(IntType('cc'))
+>>> IntType(NuFlavInt('numubarcc'))
+
+
+
+
+
+
+CC_CODE = 1
+
+ +
+
+IGNORE = re.compile('[^a-zA-Z]')
+
+ +
+
+IT_RE = re.compile('^(cc|nc)$')
+
+ +
+
+NC_CODE = 2
+
+ +
+
+property cc
+

Is this interaction type charged current (CC)?

+
+ +
+
+property code
+

Integer code for this interaction type

+
+ +
+
+property nc
+

Is this interaction type neutral current (NC)?

+
+ +
+
+property tex
+

TeX representation of this interaction type

+
+ +
+ +
+
+class pisa.utils.flavInt.NuFlav(val)[source]
+

Bases: object

+

Class for handling neutrino flavors (and anti-flavors)

+
+
+ANTIPART_CODE = -1
+
+ +
+
+FLAV_RE = re.compile('^(?P<fullflav>(?:nue|numu|nutau)(?P<barnobar>bar){0,1})$')
+
+ +
+
+IGNORE = re.compile('[^a-zA-Z]')
+
+ +
+
+NUEBAR_CODE = -12
+
+ +
+
+NUE_CODE = 12
+
+ +
+
+NUMUBAR_CODE = -14
+
+ +
+
+NUMU_CODE = 14
+
+ +
+
+NUTAUBAR_CODE = -16
+
+ +
+
+NUTAU_CODE = 16
+
+ +
+
+PART_CODE = 1
+
+ +
+
+property antiparticle
+

Is this an antiparticle flavor?

+
+ +
+
+property bar_code
+

Return +/-1 for particle/antiparticle

+
+ +
+
+property code
+

PDG code

+
+
Type:
+

int

+
+
+
+ +
+
+property particle
+

Is this a particle (vs. antiparticle) flavor?

+
+ +
+
+pidx(d, *args)[source]
+

Extract data from a nested dictionary d whose format is commonly +found in PISA

+
+
The dictionary must have the format

d = {“<flavor>”: <data object>} +<flavor> is one of “nue”, “nue_bar”, “numu”, “numu_bar”, “nutau”,

+
+

“nutau_bar”

+
+
+
+
+ +
+
+property prob3_codes
+

flavor and particle/antiparticle codes, as used by prob3

+
+
Type:
+

(int,int)

+
+
+
+ +
+
+property tex
+

TeX string

+
+ +
+ +
+
+class pisa.utils.flavInt.NuFlavInt(*args, **kwargs)[source]
+

Bases: object

+

A neutrino “flavint” encompasses both the neutrino flavor and its +interaction type.

+
+
Instantiate via
    +
  • String containing a single flavor and a single interaction type +e.g.: ‘numucc’, ‘nu_mu_cc’, ‘nu mu CC’, ‘numu_bar CC’, etc.

  • +
  • Another instantiated NuFlavInt object

  • +
  • Two separate objects that can be converted to a valid NuFlav +and a valid IntType (in that order)

  • +
  • An iterable of length two which contains such objects

  • +
  • kwargs flav and int_type specifying such objects

  • +
+
+
+

String specifications simply ignore all characters not recognized as a +valid token.

+
+
+FINT_RE = re.compile('(?P<fullflav>(?:nue|numu|nutau)(?P<barnobar>bar){0,1})(?P<int_type>cc|nc){0,1}')
+
+ +
+
+FINT_SSEP = '_'
+
+ +
+
+FINT_TEXSEP = ' \\, '
+
+ +
+
+TOKENS = re.compile('(nu|e|mu|tau|bar|nc|cc)')
+
+ +
+
+property antiparticle
+

Is this an antiparticle flavor?

+
+ +
+
+property cc
+

Is this interaction type charged current (CC)?

+
+ +
+
+property flav
+

Return just the NuFlav part of this NuFlavInt

+
+ +
+
+property int_type
+

Return IntType object that composes this NuFlavInt

+
+ +
+
+property nc
+

Is this interaction type neutral current (NC)?

+
+ +
+
+property particle
+

Is this a particle (vs. antiparticle) flavor?

+
+ +
+
+pidx(d, *args)[source]
+

Extract data from a nested dictionary d whose format is commonly +found in PISA

+

The dictionary must have the format:

+
d = {"<flavor>": {"<interaction type>": <data object>}}
+<flavor> is one of "nue", "nue_bar", "numu", "numu_bar", "nutau",
+    "nutau_bar"
+<interaction type> is one of "cc", "nc"
+
+
+
+ +
+
+property tex
+

TeX string representation of this NuFlavInt

+
+ +
+ +
+
+class pisa.utils.flavInt.NuFlavIntGroup(*args)[source]
+

Bases: MutableSequence

+

Grouping of neutrino flavors+interaction types (flavints)

+
+
Grouping of neutrino flavints. Specification can be via
    +
  • A single NuFlav object; this gets promoted to include both +interaction types

  • +
  • A single NuFlavInt object

  • +
  • String: +* Ignores anything besides valid tokens +* A flavor with no interaction type specified will include both CC

    +
    +

    and NC interaction types

    +
    +
      +
    • Multiple flavor/interaction-type specifications can be made; +use of delimiters is optional

    • +
    • Interprets “nuall” as nue+numu+nutau and “nuallbar” as +nuebar+numubar+nutaubar

    • +
    +
  • +
  • Iterable containing any of the above (i.e., objects convertible to +NuFlavInt objects). Note that a valid iterable is another +NuFlavIntGroup object.

  • +
+
+
+
+
+FLAVINT_RE = re.compile('((?:nue|numu|nutau|nuall)(?:bar){0,1}(?:cc|nc){0,2})')
+
+ +
+
+FLAV_RE = re.compile('(?P<fullflav>(?:nue|numu|nutau|nuall)(?:bar){0,1})')
+
+ +
+
+IGNORE = re.compile('[^a-zA-Z]')
+
+ +
+
+IT_RE = re.compile('(cc|nc)')
+
+ +
+
+TOKENS = re.compile('(nu|e|mu|tau|all|bar|nc|cc)')
+
+ +
+
+property antiparticles
+

Return tuple of unique antiparticle NuFlavInts that make up this +group

+
+ +
+
+property cc_flavints
+

Return tuple of unique charged-current-interaction NuFlavInts that +make up this group

+
+ +
+
+property cc_flavs
+

Return tuple of unique charged-current-interaction flavors that +make up this group. Note that only the flavors, and not NuFlavInts, are +returned (cf. method cc_flavints

+
+ +
+
+file_str(flavsep='_', intsep='_', flavintsep='__', addsep='')[source]
+

String representation for this group useful for file names

+
+ +
+
+property flavints
+

Return tuple of all NuFlavInts that make up this group

+
+ +
+
+property flavs
+

Return tuple of unique flavors that make up this group

+
+ +
+
+group_flavs_by_int_type()[source]
+

Return a dictionary with flavors grouped by the interaction types +represented in this group.

+

The returned dictionary has format:

+
{
+    'all_int_type_flavs': [<NuFlav object>, <NuFlav object>, ...],
+    'cc_only_flavs':      [<NuFlav object>, <NuFlav object>, ...],
+    'nc_only_flavs':      [<NuFlav object>, <NuFlav object>, ...],
+}
+
+
+

where the lists of NuFlav objects are mutually exclusive

+
+ +
+
+insert(index, value)[source]
+

Insert flavint value before index

+
+ +
+
+static interpret(val)[source]
+

Interpret a NuFlavIntGroup arg

+
+ +
+
+property nc_flavints
+

Return tuple of unique neutral-current-interaction NuFlavInts that +make up this group

+
+ +
+
+property nc_flavs
+

Return tuple of unique neutral-current-interaction flavors that +make up this group. Note that only the flavors, and not NuFlavInts, are +returned (cf. method nc_flavints

+
+ +
+
+property particles
+

Return tuple of unique particle (vs antiparticle) NuFlavInts that +make up this group

+
+ +
+
+remove(value)[source]
+

Remove a flavint from this group.

+
+
Parameters:
+

value (anything accepted by interpret method)

+
+
+
+ +
+
+simple_str(flavsep='+', intsep=' ', flavintsep=', ', addsep='+')[source]
+

Simple string representation of this group

+
+ +
+
+simple_tex(flavsep=' + ', intsep=' \\, ', flavintsep='; \\; ', addsep='+')[source]
+

Simplified TeX string reperesentation of this group

+
+ +
+
+property tex
+

TeX string representation for this group

+
+ +
+
+property unique_flavs_tex
+

TeX string representation of the unique flavors present in this +group

+
+ +
+ +
+
+pisa.utils.flavInt.flavintGroupsFromString(groups)[source]
+

Interpret groups to break into neutrino flavor/interaction type(s) +that are to be grouped together; also form singleton groups as specified +explicitly in groups or for any unspecified flavor/interaction type(s).

+

The returned list of groups encompasses all possible flavor/int types, but +the groups are mutually exclusive.

+
+
Parameters:
+

groups (None, string, or sequence of strings)

+
+
Returns:
+

flavint_groups

+
+
Return type:
+

list of NuFlavIntGroup

+
+
+
+ +
+
+pisa.utils.flavInt.get_bar_ssep()[source]
+

Get the separator that is set to be used between “base” flavor (“nue”, +“numu”, or “nutau”) and “bar” when converting antineutrino `NuFlav`s or +`NuFlavInt`s to strings.

+
+
Returns:
+

sep – Separator

+
+
Return type:
+

string

+
+
+
+ +
+
+pisa.utils.flavInt.set_bar_ssep(val)[source]
+

Set the separator between “base” flavor (“nue”, “numu”, or “nutau”) and +“bar” when converting antineutrino `NuFlav`s or `NuFlavInt`s to strings.

+
+
Parameters:
+

val (string) – Separator

+
+
+
+ +
+
+pisa.utils.flavInt.xlateGroupsStr(val)[source]
+

Translate a “,”-separated string into separate `NuFlavIntGroup`s.

+
+
val
+
“,”-delimited list of valid NuFlavIntGroup strings, e.g.:

“nuall_nc,nue,numu_cc+numubar_cc”

+
+
+

Note that specifying NO interaction type results in both interaction +types being selected, e.g. “nue” implies “nue_cc+nue_nc”. For other +details of how the substrings are interpreted, see docs for +NuFlavIntGroup.

+
+
+
+
Returns:
+

grouped, ungrouped

+
+
+
+
grouped, ungrouped

lists of NuFlavIntGroups; the first will have more than one flavint +in each NuFlavIntGroup whereas the second will have just one +flavint in each NuFlavIntGroup. Either list can be of 0-length.

+
+
+

This function does not enforce mutual-exclusion on flavints in the +various flavint groupings, but does list any flavints not grouped +together in the ungrouped return arg. Mutual exclusion can be +enforced through set operations upon return.

+
+ +
+
+

pisa.utils.flux_weights module

+

A set of functions for calculating flux weights given an array of energy and +cos(zenith) values based on the Honda atmospheric flux tables. A lot of this +functionality will be copied from honda.py but since I don’t want to initialise +this as a stage it makes sense to copy it in to here so somebody can’t +accidentally do the wrong thing with that script.

+
+
+pisa.utils.flux_weights.calculate_2d_flux_weights(true_energies, true_coszens, en_splines, enpow=1, out=None)[source]
+

Calculate flux weights for given array of energy and cos(zenith). +Arrays of true energy and zenith are expected to be for MC events, so +they are tested to be of the same length. +en_splines should be the spline for the primary of interest. The entire +dictionary is calculated in the previous function.

+
+
Parameters:
+
    +
  • true_energies (list or numpy array) – A list of the true energies of your MC events. Pass this in GeV!

  • +
  • true_coszens (list or numpy array) – A list of the true coszens of your MC events

  • +
  • en_splines (list of splines) – A list of the initialised energy splines from the previous function +for your desired primary.

  • +
  • enpow (integer) – The power to which the energy was raised in the construction of the +splines. If you don’t know what this means, leave it as 1.

  • +
  • out (np.array) – optional array to store results

  • +
+
+
+

Example

+

Use the previous function to calculate the spline dict for the South Pole.

+
+

spline_dict = load_2d_table(‘flux/honda-2015-spl-solmax-aa.d’)

+
+

Then you must have some equal length arrays of energy and zenith.

+
+

ens = [3.0, 4.0, 5.0] +czs = [-0.4, 0.7, 0.3]

+
+

These are used in this function, along with whatever primary you are +interested in calculating the flux weights for.

+
+

flux_weights = calculate_2d_flux_weights(ens, czs, spline_dict[‘numu’])

+
+

Done!

+
+ +
+
+pisa.utils.flux_weights.calculate_3d_flux_weights(true_energies, true_coszens, true_azimuths, en_splines, enpow=1, az_linear=True)[source]
+

Calculate flux weights for given array of energy, cos(zenith) and +azimuth.

+

Arrays of true energy, zenith and azimuth are expected to be for MC events, +so they are tested to be of the same length. +En_splines should be the spline for the primary of interest. The entire +dictionary is calculated in the previous function.

+
+
Parameters:
+
    +
  • true_energies (list or numpy array) – A list of the true energies of your MC events. Pass this in GeV!

  • +
  • true_coszens (list or numpy array) – A list of the true coszens of your MC events

  • +
  • true_azimuths (list or numpy array) – A list of the true azimuths of your MC events. Pass this in radians!

  • +
  • en_splines (list of splines) – A list of the initialised energy splines from the previous function +for your desired primary.

  • +
  • enpow (integer) – The power to which the energy was raised in the construction of the +splines. If you don’t know what this means, leave it as 1.

  • +
  • az_linear (boolean) – Whether or not to linearly interpolate in the azimuthal direction. If +you don’t know why this is an option, leave it as true.

  • +
+
+
+

Example

+

Use the previous function to calculate the spline dict for the South Pole.

+
+

spline_dict = load_3d_table(‘flux/honda-2015-spl-solmax.d’)

+
+

Then you must have some equal length arrays of energy, zenith and azimuth.

+
+

ens = [3.0, 4.0, 5.0] +czs = [-0.4, 0.7, 0.3] +azs = [0.3, 1.2, 2.1]

+
+

These are used in this function, along with whatever primary you are +interested in calculating the flux weights for.

+
+
+
flux_weights = calculate_3d_flux_weights(ens,

czs, +azs, +spline_dict[‘numu’])

+
+
+
+

Done!

+
+ +
+
+pisa.utils.flux_weights.load_2d_bartol_table(flux_file, enpow=1, return_table=False)[source]
+
+ +
+
+pisa.utils.flux_weights.load_2d_honda_table(flux_file, enpow=1, return_table=False, hg_taumode=False)[source]
+

Added “hg_taumode” to load in hillas gaisser h3a tables made with tau neutrino contributions.

+
+ +
+
+pisa.utils.flux_weights.load_2d_table(flux_file, enpow=1, return_table=False)[source]
+

Manipulate 2 dimensional flux tables.

+

2D is expected to mean energy and cosZenith, where azimuth is averaged +over (before being stored in the table) and the zenith range should +include both hemispheres.

+
+
Parameters:
+
    +
  • flux_file (string) – The location of the flux file you want to spline. Should be a honda +azimuth-averaged file.

  • +
  • enpow (integer) – The power to which the energy will be raised in the construction of the +splines. If you don’t know what this means, leave it as 1.

  • +
  • return_table (boolean) – Flag to true if you want the function to also return a dictionary +of the underlying values from the tables. Useful for comparisons.

  • +
+
+
+
+ +
+
+pisa.utils.flux_weights.load_3d_honda_table(flux_file, enpow=1, return_table=False)[source]
+
+ +
+
+pisa.utils.flux_weights.load_3d_table(flux_file, enpow=1, return_table=False)[source]
+

Manipulate 3 dimensional flux tables.

+

3D is expected to mean energy, cosZenith and azimuth. The angular range +should be fully sky.

+
+
Parameters:
+
    +
  • flux_file (string) – The location of the flux file you want to spline. Should be a honda +azimuth-averaged file.

  • +
  • enpow (integer) – The power to which the energy will be raised in the construction of the +splines. If you don’t know what this means, leave it as 1.

  • +
  • return_table (boolean) – Flag to true if you want the function to also return a dictionary +of the underlying values from the tables. Useful for comparisons.

  • +
+
+
+
+ +
+
+

pisa.utils.format module

+

Utilities for interpreting and returning formatted strings.

+
+
+pisa.utils.format.BIN_PREFIX_TO_POWER_OF_1024 = {'': 0, 'Ei': 6, 'Gi': 3, 'Ki': 1, 'Mi': 2, 'Pi': 5, 'Ti': 4, 'Yi': 8, 'Zi': 7}
+

Mapping from binary prefixes to powerorders-of-1024

+
+ +
+
+pisa.utils.format.NUMBER_RE = re.compile('((?:-|\\+){0,1}[0-9.]+(?:e(?:-|\\+)[0-9.]+){0,1})', re.IGNORECASE)
+

Regex for matching signed, unsigned, and sci.-not. (“1e10”) numbers.

+
+ +
+
+pisa.utils.format.NUMBER_RESTR = '((?:-|\\+){0,1}[0-9.]+(?:e(?:-|\\+)[0-9.]+){0,1})'
+

RE str for matching signed, unsigned, and sci.-not. (“1e10”) numbers.

+
+ +
+
+pisa.utils.format.ORDER_OF_MAG_TO_SI_PREFIX = {-24: 'y', -21: 'z', -18: 'a', -15: 'f', -12: 'p', -9: 'n', -6: 'μ', -3: 'm', 0: '', 3: 'k', 6: 'M', 9: 'G', 12: 'T', 15: 'P', 18: 'E', 21: 'Z', 24: 'Y'}
+

Mapping of powers-of-10 to SI prefixes (orders-of-magnitude)

+
+ +
+
+pisa.utils.format.POWER_OF_1024_TO_BIN_PREFIX = {0: '', 1: 'Ki', 2: 'Mi', 3: 'Gi', 4: 'Ti', 5: 'Pi', 6: 'Ei', 7: 'Zi', 8: 'Yi'}
+

Mapping from powers-of-1024 to binary prefixes

+
+ +
+
+pisa.utils.format.SI_PREFIX_TO_ORDER_OF_MAG = {'': 0, 'E': 18, 'G': 9, 'M': 6, 'P': 15, 'T': 12, 'Y': 24, 'Z': 21, 'a': -18, 'f': -15, 'k': 3, 'm': -3, 'n': -9, 'p': -12, 'u': -6, 'y': -24, 'z': -21, 'μ': -6}
+

Mapping of SI prefixes to powers-of-10

+
+ +
+
+pisa.utils.format.arg_str_seq_none(inputs, name)[source]
+

Simple input handler. +:param inputs: Input value(s) provided by caller +:type inputs: None, string, or iterable of strings +:param name: Name of input, used for producing a meaningful error message +:type name: string

+
+
Returns:
+

inputs

+
+
Return type:
+

None, or list of strings

+
+
Raises:
+

TypeError if unrecognized type

+
+
+
+ +
+
+pisa.utils.format.arg_to_tuple(arg)[source]
+

Convert arg to a tuple: None becomes an empty tuple, an isolated +string becomes a tuple containing that string, and any iterable or sequence +is simply converted into a tuple.

+
+
Parameters:
+

arg (str, sequence of str, iterable of str, or None)

+
+
Returns:
+

arg_tup

+
+
Return type:
+

tuple of str

+
+
+
+ +
+
+pisa.utils.format.default_map_tex(map)[source]
+
+ +
+
+pisa.utils.format.engfmt(n, sigfigs=3, decimals=None, sign_always=False)[source]
+

Format number as string in engineering format (10^(multiples-of-three)), +including the most common metric prefixes (from atto to Exa).

+
+
Parameters:
+
    +
  • n (scalar) – Number to be formatted

  • +
  • sigfigs (int >= 0) – Number of significant figures to limit the result to; default=3.

  • +
  • decimals (int or None) – Number of decimals to display (zeros filled out as necessary). If None, +decimals is automatically determined by the magnitude of the +significand and the specified sigfigs.

  • +
  • sign_always (bool) – Prefix the number with “+” sign if number is positive; otherwise, +only negative numbers are prefixed with a sign (“-“)

  • +
+
+
+
+ +
+
+pisa.utils.format.format_num(value, sigfigs=None, precision=None, fmt=None, sci_thresh=(6, -4), exponent=None, inf_thresh=inf, trailing_zeros=False, always_show_sign=False, decstr='.', thousands_sep=None, thousandths_sep=None, left_delimiter=None, right_delimiter=None, expprefix=None, exppostfix=None, nanstr='nan', infstr='inf')[source]
+

Fine-grained control over formatting a number as a string.

+
+
Parameters:
+
    +
  • value (numeric) – The number to be formatted.

  • +
  • sigfigs (int > 0, optional) – Use up to this many significant figures for displaying a number. You +can use either sigfigs or precision, but not both. If neither are +specified, default is to set sigfigs to 8. See also trailing_zeros.

  • +
  • precision (float, optional) – Round value to a precision the same as the order of magnitude of +precision. You can use either precision or sigfigs, but not both. +If neither is specified, default is to set sigfigs to 8. See also +trailing_zeros.

  • +
  • fmt (None or one of {'sci', 'eng', 'sipre', 'binpre', 'full'}, optional) –

    +
    Force a particular format to be used::
      +
    • None allows the value and what is passed for sci_thresh and +exponent to decide whether or not to use scientific notation

    • +
    • ’sci’ forces scientific notation

    • +
    • ’eng’ uses the engineering convention of powers divisible by 3 +(10e6, 100e-9, etc.)

    • +
    • ’sipre’ uses powers divisible by 3 but uses SI prefixes (e.g. k, +M, G, etc.) instead of displaying the exponent

    • +
    • ’binpre’ uses powers of 1024 and uses IEC prefixes (e.g. Ki, Mi, +Gi, etc.) instead displaying the exponent

    • +
    • ’full’ forces printing all digits left and/or right of the +decimal to display the number (no exponent notation or SI/binary +prefix will be used)

    • +
    +
    +
    +

    Note that the display of NaN and +/-inf are unaffected by +fmt.

    +

  • +
  • exponent (None, integer, or string, optional) – Force the number to be scaled with respect to this exponent. If a +string prefix is passed and fmt is None, then the SI prefix +or binary prefix will be used for the number. E.g., exponent=3 +would cause the number 1 to be expressed as '0.001e3'`, while +``exponent='k' would cause it to be displayed as '1 m'. Both ‘μ’ +and ‘u’ are accepted to mean “micro”. A non-None value for +exponent forces some form of scientific/engineering notation, so +fmt cannot be 'full' in this case. Finally, if +fmt is 'binpre' then exponent is applied to 1024. +I.e., 1 maps to kibi (Ki), 2 maps to mebi (Mi), etc.

  • +
  • sci_thresh (sequence of 2 integers) – When to switch to scientific notation. The first integer is the order +of magnitude of value at or above which scientific notation will be +used. The second integer indicates the order of magnitude at or below +which the most significant digit falls for scientific notation to be +used. E.g., sci_thresh=(3, -3) means that numbers in the +ones-of-thousands or greater OR numbers in the ones-of-thousandths or +less will be displayed using scientific notation. Note that +fmt, if not None, overrides this behavior. Default is +(10,-5).

  • +
  • inf_thresh (numeric, optional) – Numbers whose magnitude is equal to or greater than this threhshold are +considered infinite and therefore displayed using infstr (possibly +including a sign, as appropriate). Default is np.inf.

  • +
  • trailing_zeros (bool, optional) – Whether to display all significant figures specified by sigfigs, even +if this results in trailing zeros. Default is False.

  • +
  • always_show_sign (bool, optional) – Always show a sign, whether number is positive or negative, and whether +exponent (if present) is positive or negative. Default is False.

  • +
  • decstr (string, optional) – Separator to use for the decimal point. E.g. decstr='.' or +decstr=',' for mthe most common cases, but this can also be used in +TeX tables for alignment on decimal points via decstr='&.&'. +Default is ‘.’.

  • +
  • thousands_sep (None or string, optional) – Separator to use between thousands, e.g. thousands_sep=',' to give +results like '1,000,000', or `thousands_sep=r'\,' for TeX +formatting with small spaces between thousands. Default is None.

  • +
  • thousandths_sep (None or string, optional) – Separator to use between thousandthss. Default is None.

  • +
  • left_delimiter (None or string, optional) – Strings to delimit the left and right sides of the resulting string. +E.g. left_delimiter='${' and right_delimiter='}$' could be used +to delimit TeX-formatted strings, such that a number is displayed, +e.g., as r'${1\times10^3}$'. Defaults are None for both.

  • +
  • right_delimiter (None or string, optional) – Strings to delimit the left and right sides of the resulting string. +E.g. left_delimiter='${' and right_delimiter='}$' could be used +to delimit TeX-formatted strings, such that a number is displayed, +e.g., as r'${1\times10^3}$'. Defaults are None for both.

  • +
  • expprefix (None or string, optional) – E.g. use expprefix=’e’ for simple “e” scientific notation (“1e3”), +or use expprefix=r’times10^{’ and exppostfix=r’}’ for +TeX-formatted scientific notation. Use a space (or tex equivalent) for +binary and SI prefixes. If scientific notation is to be used, +`expprefix defaults to ‘e’. If either SI or binary prefixes are to be +used, expprefix defaults to ‘ ‘ (space). In any case, exppostfix +defaults to None.

  • +
  • exppostfix (None or string, optional) – E.g. use expprefix=’e’ for simple “e” scientific notation (“1e3”), +or use expprefix=r’times10^{’ and exppostfix=r’}’ for +TeX-formatted scientific notation. Use a space (or tex equivalent) for +binary and SI prefixes. If scientific notation is to be used, +`expprefix defaults to ‘e’. If either SI or binary prefixes are to be +used, expprefix defaults to ‘ ‘ (space). In any case, exppostfix +defaults to None.

  • +
  • nanstr (string, optional) – Not-a-number (NaN) values will be displayed using this string. Default +is ‘nan’ (following the Numpy convention)

  • +
  • infstr (string, optional) – Infinite values will be displayed using this string (note that the sign +is prepended, as appropriate). Default is ‘inf’ (following the Numpy +convention).

  • +
+
+
Returns:
+

formatted

+
+
Return type:
+

string

+
+
+
+ +
+
+pisa.utils.format.hash2hex(hash, bits=64)[source]
+

Convert a hash value to its string hexadecimal representation.

+
+
Parameters:
+
    +
  • hash (integer or string)

  • +
  • bits (integer > 0)

  • +
+
+
Returns:
+

hash

+
+
Return type:
+

string

+
+
+
+ +
+
+pisa.utils.format.hr_range_formatter(start, end, step)[source]
+

Format a range (sequence) in a simple and human-readable format by +specifying the range’s starting number, ending number (inclusive), and step +size.

+
+
Parameters:
+
    +
  • start (numeric)

  • +
  • end (numeric)

  • +
  • step (numeric)

  • +
+
+
+

Notes

+

If start and end are integers and step is 1, step size is omitted.

+

The format does NOT follow Python’s slicing syntax, in part because the +interpretation is meant to differ; e.g.,

+
+

‘0-10:2’ includes both 0 and 10 with step size of 2

+
+
+
whereas

0:10:2 (slicing syntax) excludes 10

+
+
+

Numbers are converted to integers if they are equivalent for more compact +display.

+

Examples

+
>>> hr_range_formatter(start=0, end=10, step=1)
+'0-10'
+>>> hr_range_formatter(start=0, end=10, step=2)
+'0-10:2'
+>>> hr_range_formatter(start=0, end=3, step=8)
+'0-3:8'
+>>> hr_range_formatter(start=0.1, end=3.1, step=1.0)
+'0.1-3.1:1'
+
+
+
+ +
+
+pisa.utils.format.hrbool2bool(s)[source]
+

Convert a string that a user might input to indicate a boolean value of +either True or False and convert to the appropriate Python bool.

+
    +
  • Note first that the case used in the string is ignored

  • +
  • ‘t’, ‘true’, ‘1’, ‘yes’, and ‘one’ all map to True

  • +
  • ‘f’, ‘false’, ‘0’, ‘no’, and ‘zero’ all map to False

  • +
+
+
Parameters:
+

s (string)

+
+
Returns:
+

b

+
+
Return type:
+

bool

+
+
+
+ +
+
+pisa.utils.format.hrlist2list(hrlst)[source]
+

Convert human-readable string specifying a list of numbers to a Python +list of numbers.

+
+
Parameters:
+

hrlist (string)

+
+
Returns:
+

lst

+
+
Return type:
+

list of numbers

+
+
+
+ +
+
+pisa.utils.format.hrlol2lol(hrlol)[source]
+

Convert a human-readable string specifying a list-of-lists of numbers to +a Python list-of-lists of numbers.

+
+
Parameters:
+

hrlol (string) – Human-readable list-of-lists-of-numbers string. Each list specification +is separated by a semicolon, and whitespace is ignored. Refer to +hrlist2list for list specification.

+
+
Returns:
+

lol

+
+
Return type:
+

list-of-lists of numbers

+
+
+

Examples

+

A single number evaluates to a list with a list with a single number.

+
>>>  hrlol2lol("1")
+[[1]]
+
+
+

A sequence of numbers or ranges can be specified separated by commas.

+
>>>  hrlol2lol("1, 3.2, 19.8")
+[[1, 3.2, 19.8]]
+
+
+

A range can be specified with a dash; default is a step size of 1 (or -1 if +the end of the range is less than the start of the range); note that the +endpoint is included, unlike slicing in Python.

+
>>>  hrlol2lol("1-3")
+[[1, 2, 3]]
+
+
+

The range can go from or to a negative number, and can go in a negative +direction.

+
>>>  hrlol2lol("-1 - -5")
+[[-1, -3, -5]]
+
+
+

Multiple lists are separated by semicolons, and parentheses and brackets +can be used to make it easier to understand the string.

+
>>>  hrlol2lol("1 ; 8 ; [(-10 - -8:2), 1]")
+[[1], [8], [-10, -8, 1]]
+
+
+

Finally, all of the above can be combined.

+
>>>  hrlol2lol("1.-3.; 9.5-10.6:0.5,3--1:-1; 12.5-13:0.8")
+[[1, 2, 3], [9.5, 10.0, 10.5, 3, 2, 1, 0, -1], [12.5]]
+
+
+
+ +
+
+pisa.utils.format.int2hex(i, bits, signed)[source]
+

Convert a signed or unsigned integer bits long to hexadecimal +representation. As many hex characters are returned to fully specify any +number bits in length regardless of the value of i.

+
+
Parameters:
+
    +
  • i (int) – The integer to be converted. Signed integers have a range of +-2**(bits-1) to 2**(bits-1)-1), while unsigned integers have a range of +0 to 2**(bits-1).

  • +
  • bits (int) – Number of bits long the representation is

  • +
  • signed (bool) – Whether the number is a signed integer; this is dependent upon the +representation used for numbers, and _not_ whether the value i is +positive or negative.

  • +
+
+
Returns:
+

    +
  • h (string of length ceil(bits/4.0) since it takes this many hex characters)

  • +
  • to represent a number bits long.

  • +
+

+
+
+
+ +
+
+pisa.utils.format.is_tex(s)[source]
+
+ +
+
+pisa.utils.format.list2hrlist(lst)[source]
+

Convert a list of numbers to a compact and human-readable string.

+
+
Parameters:
+

lst (sequence)

+
+
+

Notes

+

Adapted to make scientific notation work correctly from [1].

+

References

+
+
[1] http://stackoverflow.com/questions/9847601 user Scott B’s adaptation to

Python 2 of Rik Poggi’s answer to his question

+
+
+

Examples

+
>>> list2hrlist([0, 1])
+'0,1'
+>>> list2hrlist([0, 3])
+'0,3'
+>>> list2hrlist([0, 1, 2])
+'0-2'
+>>> utils.list2hrlist([0.1, 1.1, 2.1, 3.1])
+'0.1-3.1:1'
+>>> list2hrlist([0, 1, 2, 4, 5, 6, 20])
+'0-2,4-6,20'
+
+
+
+ +
+
+pisa.utils.format.make_valid_python_name(name)[source]
+

Make a name a valid Python identifier.

+

From user Triptych at http://stackoverflow.com/questions/3303312

+
+ +
+
+pisa.utils.format.sep_three_tens(strval, direction, sep=None)[source]
+

Insert sep char into sequence of chars strval.

+
+
Parameters:
+
    +
  • strval (sequence of chars or string) – Sequence of chars into which to insert the separator

  • +
  • direction (string, one of {'left', 'right'}) – Use ‘left’ for left of the decimal, and ‘right’ for right of the +decimal

  • +
  • sep (None or char) – Separator to insert

  • +
+
+
Returns:
+

formatted

+
+
Return type:
+

list of chars

+
+
+
+ +
+
+pisa.utils.format.split(string, sep=',', force_case=None, parse_func=None)[source]
+

Parse a string containing a separated list.

+
    +
  • Before splitting the list, the string has extraneous whitespace removed +from either end.

  • +
  • The strings that result after the split can have their case forced or be +left alone.

  • +
  • Whitespace surrounding (but not falling between non-whitespace) in each +resulting string is removed.

  • +
  • After all of the above, the value can be parsed further by a +user-supplied parse_func.

  • +
+

Note that repeating a separator without intervening values yields +empty-string values.

+
+
Parameters:
+
    +
  • string (string) – The string to be split

  • +
  • sep (string) – Separator to look for

  • +
  • force_case (None, 'lower', or 'upper') – Whether to force the case of the resulting items: None does not change +the case, while ‘lower’ or ‘upper’ change the case.

  • +
  • parse_func (None or callable) – If a callable is supplied, each item in the list, after the basic +parsing, is processed by parse_func.

  • +
+
+
Returns:
+

lst – The types of the items in the list depend upon parse_func if it is +supplied; otherwise, all items are strings.

+
+
Return type:
+

list of objects

+
+
+

Examples

+
>>> print(split(' One, TWO, three ', sep=',', force_case='lower'))
+['one', 'two', 'three']
+
+
+
>>> print(split('One:TWO:three', sep=':'))
+['One', 'TWO', 'three']
+
+
+
>>> print(split('one  two  three', sep=' '))
+['one', '', 'two', '' , 'three']
+
+
+
>>> print(split('1 2 3', sep=' ', parse_func=int))
+[1, 2, 3]
+
+
+
>>> from ast import literal_eval
+>>> print(split('True; False; None; (1, 2, 3)', sep=',',
+>>>             parse_func=literal_eval))
+[True, False, None, (1, 2, 3)]
+
+
+
+ +
+
+pisa.utils.format.strip_outer_dollars(value)[source]
+

Strip surrounding dollars signs from TeX string, ignoring leading and +trailing whitespace

+
+ +
+
+pisa.utils.format.strip_outer_parens(value)[source]
+

Strip parentheses surrounding a string, ignoring leading and trailing +whitespace

+
+ +
+
+pisa.utils.format.test_format_num()[source]
+

Unit tests for the format_num function

+
+ +
+
+pisa.utils.format.test_hr_range_formatter()[source]
+

Unit tests for hr_range_formatter

+
+ +
+
+pisa.utils.format.test_list2hrlist()[source]
+

Unit tests for list2hrlist

+
+ +
+
+pisa.utils.format.test_timediff()[source]
+

Unit tests for timediff function

+
+ +
+
+pisa.utils.format.test_timestamp()[source]
+

Unit tests for timestamp function

+
+ +
+
+pisa.utils.format.tex_dollars(s)[source]
+
+ +
+
+pisa.utils.format.tex_join(sep, *args)[source]
+

Join TeX-formatted strings together into one, each separated by sep. +Also, this strips surrounding ‘$’ from each string before joining.

+
+ +
+
+pisa.utils.format.text2tex(txt)[source]
+

Convert common characters so they show up the same as TeX

+
+ +
+
+pisa.utils.format.timediff(dt_sec, hms_always=False, sec_decimals=3)[source]
+

Smart string formatting for a time difference (in seconds)

+
+
Parameters:
+
    +
  • dt_sec (numeric) – Time difference, in seconds

  • +
  • hms_always (bool) –

      +
    • +
      True

      Always display hours, minuts, and seconds regardless of the order- +of-magnitude of dt_sec

      +
      +
      +
    • +
    • +
      False

      Display a minimal-length string that is meaningful, by omitting +units that are more significant than those necessary to display +dt_sec; if… +* dt_sec < 1 s

      +
      +

      Use engineering formatting for the number.

      +
      +
        +
      • +
        dt_sec is an integer in the range 0-59 (inclusive)

        sec_decimals is ignored and the number is formatted as an +integer

        +
        +
        +
      • +
      +

      See Notes below for handling of units.

      +
      +
      +
    • +
    +

    (Default: False)

    +

  • +
  • sec_decimals (int) – Round seconds to this number of digits

  • +
+
+
+

Notes

+

If colon notation (e.g. HH:MM:SS.xxx, MM:SS.xxx, etc.) is not used, the +number is only seconds, and is appended by a space ‘ ‘ followed by units +of ‘s’ (possibly with a metric prefix).

+
+ +
+
+pisa.utils.format.timestamp(d=True, t=True, tz=True, utc=False, winsafe=False)[source]
+

Simple utility to print out a time, date, or time+date stamp for the +time at which the function is called.

+

Calling via defaults (explcitly provided here for reference) ..

+
timestamp(d=True, t=True, tz=True, utc=False, winsafe=False)
+
+
+

should be equivalent to the shell command ..

+
date +'%Y-%m-%dT%H:%M:%S%z'
+
+
+
+
Parameters:
+
    +
  • d (bool) – Include date (default: True)

  • +
  • t (bool) – Include time (default: True)

  • +
  • tz (bool) – Include timezone offset from UTC (default: True)

  • +
  • utc (bool) – Include UTC time/date (as opposed to local time/date) (default: False)

  • +
  • winsafe (bool) – Omit colons between hours/minutes (default: False)

  • +
+
+
+
+ +
+
+

pisa.utils.gaussians module

+

Multiple implementations of sum-of-gaussians for compatibility and speed

+
+
+pisa.utils.gaussians.gaussians(x, mu, sigma, weights=None, implementation=None, **kwargs)[source]
+

Sum of multiple Gaussian curves, normalized to have area of 1.

+
+
Parameters:
+
    +
  • x (array) – Points at which to evaluate the sum of Gaussians

  • +
  • mu (arrays) – Means of the Gaussians to accumulate

  • +
  • sigma (array) – Standard deviations of the Gaussians to accumulate

  • +
  • weights (array or None) – Weights given to each Gaussian

  • +
  • implementation (None or string) – One of ‘singlethreaded’, ‘multithreaded’, or ‘cuda’. Passing None, the +function will try to determine which of the implementations is best to +call.

  • +
  • kwargs – Passed on to the underlying implementation

  • +
+
+
Returns:
+

outbuf – Resulting sum of Gaussians

+
+
Return type:
+

array

+
+
+

Notes

+

This function dynamically calls an appropriate implementation depending +upon the problem size, the hardware available (multi-core CPU or a GPU), +and whether the user specifies implementation.

+
+ +
+
+pisa.utils.gaussians.test_gaussians(test_perf=False)[source]
+

Test gaussians function

+
+ +
+
+

pisa.utils.hash module

+

Utilities for hashing objects.

+
+
+pisa.utils.hash.FAST_HASH_FILESIZE_BYTES = 10000
+

For a fast hash on a file object, this many bytes of the file are used

+
+ +
+
+pisa.utils.hash.FAST_HASH_NDARRAY_ELEMENTS = 1000
+

For a fast hash on a numpy array or matrix, this many elements of the array +or matrix are used

+
+ +
+
+pisa.utils.hash.FAST_HASH_STR_CHARS = 1000
+

For a fast hash on a string (or object’s pickle string representation), this +many characters are used

+
+ +
+
+pisa.utils.hash.hash_file(fname, hash_to=None, full_hash=True)[source]
+

Return a hash for a file, passing contents through hash_obj function.

+
+ +
+
+pisa.utils.hash.hash_obj(obj, hash_to='int', full_hash=True)[source]
+

Return hash for an object. Object can be a numpy ndarray or matrix +(which is serialized to a string), an open file (which has its contents +read), or any pickle-able Python object.

+

Note that only the first most-significant 8 bytes (64 bits) from the MD5 +sum are used in the hash.

+
+
Parameters:
+
    +
  • obj (object) – Object to hash. Note that the larger the object, the longer it takes to +hash.

  • +
  • hash_to (string) –

    +
    ‘i’, ‘int’, or ‘integer’: First 8 bytes of the MD5 sum are interpreted

    as an integer.

    +
    +
    +

    ’b’, ‘bin’, or ‘binary’: MD5 sum digest; returns an 8-character string +‘h’, ‘x’, ‘hex’: MD5 sum hexdigest, (string of 16 characters) +‘b64’, ‘base64’: first 8 bytes of MD5 sum are base64 encoded (with ‘+’

    +
    +

    and ‘-’ as final two characters of encoding). Returns string of 11 +characters.

    +
    +

  • +
  • full_hash (bool) – If True, hash on the full object’s contents (which can be slow) or if +False, hash on a partial object. For example, only a file’s first kB is +read, and only 1000 elements (chosen at random) of a numpy ndarray are +hashed on. This mode of operation should suffice for e.g. a +minimization run, but should _not_ be used for storing to/loading from +disk.

  • +
+
+
Returns:
+

hash_val

+
+
Return type:
+

int or string

+
+
+
+

See also

+
+
hash_file

hash a file on disk by filename/path

+
+
+
+
+ +
+
+pisa.utils.hash.test_hash_file()[source]
+

Unit tests for hash_file function

+
+ +
+
+pisa.utils.hash.test_hash_obj()[source]
+

Unit tests for hash_obj function

+
+ +
+
+

pisa.utils.hdf module

+

Set of utilities for handling HDF5 file I/O

+
+
+pisa.utils.hdf.from_hdf(val, return_node=None, choose=None)[source]
+

Return the contents of an HDF5 file or node as a nested dict; optionally +return a second dict containing any HDF5 attributes attached to the +entry-level HDF5 entity.

+
+
Parameters:
+
    +
  • val (string or h5py.Group) –

    Specifies entry-level entity +* If val is a string, it is interpreted as a filename; file is opened

    +
    +

    as an h5py.File

    +
    +
      +
    • Otherwise, val must be an h5py.Group in an instantiated object

    • +
    +

  • +
  • return_node (None or string) – Not yet implemented

  • +
  • choose (None or list) – Optionally can provide a list of variables names to parse (items not in +this list will be skipped, saving time & memory)

  • +
+
+
Returns:
+

data – Nested dictionary; keys are HDF5 node names and values contain the +contents of that node. If the entry-level entity of val has “attrs”, +these are extracted and attached as an OrderedDict at data.attrs; +otherwise, this entity is an empty OrderedDict.

+
+
Return type:
+

OrderedDict with additional attr of type OrderedDict named attrs

+
+
+
+ +
+
+pisa.utils.hdf.test_hdf()[source]
+

Unit tests for hdf module

+
+ +
+
+pisa.utils.hdf.to_hdf(data_dict, tgt, attrs=None, overwrite=True, warn=True)[source]
+

Store a (possibly nested) dictionary to an HDF5 file or branch node +within an HDF5 file (an h5py Group).

+

This creates hardlinks for duplicate non-trivial leaf nodes (h5py Datasets) +to minimize storage space required for redundant datasets. Duplication is +detected via object hashing.

+

NOTE: Branch nodes are sorted before storing (by name) for consistency in +the generated file despite Python dictionaries having no defined ordering +among keys.

+
+
Parameters:
+
    +
  • data_dict (Mapping) – Dictionary, OrderedDict, or other Mapping to be stored

  • +
  • tgt (str or h5py.Group) – Target for storing data. If tgt is a str, it is interpreted as a +filename; a file is created with that name (overwriting an existing +file, if present). After writing, the file is closed. If tgt is an +h5py.Group, the data is simply written to that Group and it is left +open at function return.

  • +
  • attrs (Mapping) – Attributes to apply to the top-level entity being written. See +http://docs.h5py.org/en/latest/high/attr.html

  • +
  • overwrite (bool) – Set to True (default) to allow overwriting existing file. Raise +exception and quit otherwise.

  • +
  • warn (bool) – Issue a warning message if a file is being overwritten. Suppress +warning by setting to False (e.g. when overwriting is the desired +behaviour).

  • +
+
+
+
+ +
+
+

pisa.utils.hdfchain module

+

class to access hdf5 files chained together.

+
+
+class pisa.utils.hdfchain.HDFChain(files, maxdepth=1, verbose=False, **kwargs)[source]
+

Bases: object

+
+
+getNode(path)[source]
+
+ +
+ +
+
+class pisa.utils.hdfchain.HDFTableProxy(table, files)[source]
+

Bases: object

+
+
+col(colname)[source]
+
+ +
+
+col_iter(colname)[source]
+
+ +
+
+read()[source]
+
+ +
+
+read_iter()[source]
+
+ +
+ +
+
+class pisa.utils.hdfchain.TableAccessor(tabledict)[source]
+

Bases: object

+
+ +
+
+

pisa.utils.jsons module

+

A set of utilities for reading (and instantiating) objects from and writing +objects to JSON files.

+
+
+class pisa.utils.jsons.NumpyDecoder(encoding=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)[source]
+

Bases: JSONDecoder

+

Decode JSON array(s) as numpy.ndarray; also returns python strings +instead of unicode.

+
+
+json_array_numpy(s_and_end, scan_once, **kwargs)[source]
+

Interpret arrays (lists by default) as numpy arrays where this does +not yield a string or object array; also handle conversion of +particularly-formatted input to pint Quantities.

+
+ +
+ +
+
+class pisa.utils.jsons.NumpyEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, item_sort_key=None, for_json=False, ignore_nan=False, int_as_string_bitcount=None, iterable_as_array=False)[source]
+

Bases: JSONEncoder

+

Subclass of ::class::json.JSONEncoder that overrides default method to +allow writing numpy arrays and other special objects PISA uses to JSON +files.

+
+
+default(obj)[source]
+

Encode special objects to be representable as JSON.

+
+ +
+ +
+
+pisa.utils.jsons.dumps(content, indent=2)[source]
+

Dump object to JSON-encoded string

+
+ +
+
+pisa.utils.jsons.from_json(filename, cls=None)[source]
+

Open a file in JSON format (optionally compressed with bz2 or +xor-scrambled) and parse the content into Python objects.

+
+
Parameters:
+
    +
  • filename (str)

  • +
  • cls (class (type) object, optional) – If provided, the class is attempted to be instantiated as described in +Notes section.

  • +
+
+
Returns:
+

contents_or_obj

+
+
Return type:
+

simple Python objects or cls instantiated therewith

+
+
+

Notes

+

If cls is provided as a class (type) object, this function attempts to +instantiate the class with the data loaded from the JSON file, as follows:

+
+
    +
  • if cls has a from_json method, that is called directly: ..

    +
    cls.from_json(filename)
    +
    +
    +
  • +
  • if the data loaded from the JSON file is a non-string sequence: ..

    +
    cls(*data)
    +
    +
    +
  • +
  • if the data loaded is a Mapping (dict, OrderedDict, etc.): ..

    +
    cls(**data)
    +
    +
    +
  • +
  • for all other types loaded from the JSON: ..

    +
    cls(data)
    +
    +
    +
  • +
+
+

Note that this currently only recognizes files by their extensions. I.e., +the file must be named ..

+
myfile.json
+myfile.json.bz2
+myfile.json.xor
+
+
+

represent a bsic JSON file, a bzip-compressed JSON, and an xor-scrambled +JSON, respectively.

+
+ +
+
+pisa.utils.jsons.json_string(string)[source]
+

Decode a json string

+
+ +
+
+pisa.utils.jsons.loads(s)[source]
+

Load (create) object from JSON-encoded string

+
+ +
+
+pisa.utils.jsons.test_to_json_from_json()[source]
+

Unit tests for writing various types of objects to and reading from JSON +files (including bz2-compressed and xor-scrambled files)

+
+ +
+
+pisa.utils.jsons.to_json(content, filename, indent=2, overwrite=True, warn=True, sort_keys=False)[source]
+

Write content to a JSON file at filename.

+

Uses a custom parser that automatically converts numpy arrays to lists.

+

If filename has a “.bz2” extension, the contents will be compressed +(using bz2 and highest-level of compression, i.e., -9).

+

If filename has a “.xor” extension, the contents will be xor-scrambled to +make them human-unreadable (this is useful for, e.g., blind fits).

+
+
Parameters:
+
    +
  • content (obj) – Object to be written to file. Tries making use of the object’s own +to_json method if it exists.

  • +
  • filename (str) – Name of the file to be written to. Extension has to be ‘json’ or ‘bz2’.

  • +
  • indent (int) – Pretty-printing. Cf. documentation of json.dump() or json.dumps()

  • +
  • overwrite (bool) – Set to True (default) to allow overwriting existing file. Raise +exception and quit otherwise.

  • +
  • warn (bool) – Issue a warning message if a file is being overwritten (True, +default). Suppress warning by setting to False (e.g. when overwriting +is the desired behaviour).

  • +
  • sort_keys (bool) – Output of dictionaries will be sorted by key if set to True. +Default is False. Cf. json.dump() or json.dumps().

  • +
+
+
+
+ +
+
+

pisa.utils.kde_hist module

+

Functions to get KDE smoothed historgams

+
+
+pisa.utils.kde_hist.get_hist(sample, binning, weights=None, bw_method='scott', adaptive=True, alpha=0.3, use_cuda=False, coszen_reflection=0.25, coszen_name='coszen', oversample=1, bootstrap=False, bootstrap_niter=10)[source]
+

Helper function for histograms from KDE

+

For description of args see kde_histogramdd()

+

Handling the reflctions at the coszen edges

+
+

ToDo:

+
    +
  • Handle zenith like coszen? Or better: Define set of variables to perform +reflection on and reflection parameters (e.g. reflect_fract or somesuch +to stand in for for coszen_reflection and reflect_dims as standin for +coszen_name; also need some way to specify whether to reflect about lower +and/or upper edge); each such parameter can either be a single value, or a +sequence with one value per variable.

  • +
  • Any good reason for 0.25 and ‘scott’ defaults? If not, don’t define a +default and force the user to explicitly set this when function is called.

  • +
+
+
+ +
+
+pisa.utils.kde_hist.kde_histogramdd(sample, binning, weights=None, bw_method='scott', adaptive=True, alpha=0.3, use_cuda=False, coszen_reflection=0.25, coszen_name='coszen', oversample=1, stack_pid=True, bootstrap=False, bootstrap_niter=10)[source]
+

Run kernel density estimation (KDE) for an array of data points, and +then evaluate them on a histogram-like grid to effectively produce a +histogram-like output. +Handles reflection at coszen edges, and will expect coszen to be in the binning

+

Based on Sebastian Schoenen’s KDE implementation: +http://code.icecube.wisc.edu/svn/sandbox/schoenen/kde

+
+
Parameters:
+
    +
  • sample (array) – Shape (N_evts, vars), with vars in the right order corresponding to the +binning order.

  • +
  • binning (MultiDimBinning) – A coszen dimension is expected

  • +
  • weights (None or array) – Same shape as sample

  • +
  • bw_method (string) – ‘scott’ or ‘silverman’ (see kde module)

  • +
  • adaptive (bool) – (see kde module)

  • +
  • alpha (float) – A parameter for the KDEs (see kde module)

  • +
  • use_cuda (bool) – Run on GPU (only works with <= 2d)

  • +
  • coszen_reflection (float) – Part (number between 0 and 1) of binning that is reflected at the +coszen -1 and 1 edges

  • +
  • coszen_name (string) – Binning name to identify the coszen bin that needs to undergo special +treatment for reflection

  • +
  • oversample (int) – Evaluate KDE at more points per bin, takes longer, but is more accurate

  • +
  • stack_pid (bool) – Treat each pid bin separately, not as another dimension of the KDEs +Only supported for two additional dimensions, pid binning must be named pid

  • +
  • bootstrap (bool) – Use the bootstrap_kde class to produce error estimates on the KDE histograms. +Slow, not recommended during fits.

  • +
  • bootstrap_niter (int) – Number of bootstrap iterations.

  • +
+
+
Returns:
+

    +
  • histogram (numpy.ndarray)

  • +
  • ToDo

  • +
  • —–

  • +
  • * Maybe return Map with binnings attached insted of nd-array?

  • +
  • * Generalize to handle any dimensions with any reflection criterias

  • +
+

+
+
+
+ +
+
+pisa.utils.kde_hist.test_kde_histogramdd()[source]
+

Unit tests for kde_histogramdd

+
+ +
+
+

pisa.utils.likelihood_functions module

+

This script contains functions to compute Barlow-Beeston Likelihood, as well as +an implementation of the Poisson-Gamma mixture.

+

These likelihood implementations (except for poissonLLH) take into account uncertainties due to +finite Monte Carlo statistics.

+

The functions are called in stats.py to apply them to histograms.

+

Note that these likelihoods are NOT centered around 0 (i.e. if data == expectation, LLH != 0)

+
+
+pisa.utils.likelihood_functions.barlowLLH(data, unweighted_mc, weights)[source]
+

Barlow-Beeston log-likelihood (constant terms not omitted) +Link to paper: https://doi.org/10.1016/0010-4655(93)90005-W +– Input variables – +data = data histogram +mc = weighted MC histogram +unweighted_mc = unweighted MC histogream +weights = weight of each bin

+

– Output – +llh = LLH values in each bin

+

– Notes – +Shape of data, mc, unweighted_mc, weights and llh must be identical

+
+ +
+
+pisa.utils.likelihood_functions.poissonLLH(data, mc)[source]
+

Standard poisson likelihood +– Input variables – +data = data histogram +mc = MC histogram

+

– Output – +LLH values in each bin

+

– Notes – +Shape of data, mc are identical

+
+ +
+
+pisa.utils.likelihood_functions.poisson_gamma(data, sum_w, sum_w2, a=1, b=0)[source]
+

Log-likelihood based on the poisson-gamma mixture. This is a Poisson likelihood using a Gamma prior. +This implementation is based on the implementation of Austin Schneider (aschneider@icecube.wisc.edu) +– Input variables – +data = data histogram +sum_w = MC histogram +sum_w2 = Uncertainty map (sum of weights squared in each bin) +a, b = hyperparameters of gamma prior for MC counts; default values of a = 1 and b = 0 corresponds to LEff (eq 3.16) https://doi.org/10.1007/JHEP06(2019)030

+
+

a = 0 and b = 0 corresponds to LMean (Table 2) https://doi.org/10.1007/JHEP06(2019)030

+
+

– Output – +llh = LLH values in each bin

+

– Notes – +Shape of data, sum_w, sum_w2 and llh are identical

+
+ +
+
+

pisa.utils.llh_client module

+
+
+

pisa.utils.llh_server module

+

Server(s) for handling llh requests from a client: client passes free param +values, server sets these on its DistributionMaker, generates outputs, and +compares the resulting distributions against a reference template, returning +the llh value.

+
+
Code adapted from Dan Krause

https://gist.github.com/dankrause/9607475

+
+
+

see __license__.

+
+
+pisa.utils.llh_server.fork_servers(config, ref, port='9000', num=4)[source]
+

Fork multiple servers for handling LLH requests. Objects are identically +configured, and ports used are sequential starting from port.

+
+
Parameters:
+
    +
  • config (str or iterable thereof)

  • +
  • ref (str)

  • +
  • port (str or int, optional)

  • +
  • num (int, optional) – Defaults to number of CPUs returned by multiple.cpu_count()

  • +
+
+
+
+ +
+
+pisa.utils.llh_server.main(description='\nServer(s) for handling llh requests from a client: client passes free param\nvalues, server sets these on its DistributionMaker, generates outputs, and\ncompares the resulting distributions against a reference template, returning\nthe llh value.\n\nCode adapted from Dan Krause\n  https://gist.github.com/dankrause/9607475\nsee `__license__`.\n')[source]
+

Parse command line arguments

+
+ +
+
+pisa.utils.llh_server.receive_obj(sock)[source]
+

Receive an object from a socket. Payload is a pickle-encoded object, and +header (prefixing payload) is 4-byte int indicating length of the payload.

+
+
Parameters:
+

sock (socket)

+
+
Returns:
+

Unpickled Python object

+
+
Return type:
+

obj

+
+
+
+ +
+
+pisa.utils.llh_server.send_obj(obj, sock)[source]
+

Send a Python object over a socket. Object is pickle-encoded as the +payload and sent preceded by a 4-byte header which indicates the number of +bytes of the payload.

+
+
Parameters:
+
    +
  • sock (socket)

  • +
  • obj (pickle-able Python object) – Object to send

  • +
+
+
+
+ +
+
+pisa.utils.llh_server.serve(config, ref, port='9000')[source]
+

Instantiate PISA objects and run server for processing requests.

+
+
Parameters:
+
    +
  • config (str or iterable thereof) – Resource path(s) to pipeline config(s)

  • +
  • ref (str) – Resource path to reference map

  • +
  • port (int or str, optional)

  • +
+
+
+
+ +
+
+

pisa.utils.log module

+

This module sets up the logging system by looking for a “logging.json” +configuration file. It will search (in this order) the local directory, $PISA +and finally the package resources. The loggers found in there will be lifted +to the module namespace.

+

Currently, we have three loggers +* logging: generic for what is going on (typically: opening file x or

+
+

doing this now messages)

+
+
    +
  • physics: for any physics output that might be interesting +(have x many events, the flux is …)

  • +
  • tprofile: for how much time it takes to run some step (in the format of +time : start bla, time : stop bla)

  • +
+
+
+class pisa.utils.log.Levels(value)[source]
+

Bases: IntEnum

+

Logging levels / int values we use in PISA in set_verbosity (and +typically from the command line, where -v/-vv/-vvv/etc. are used)

+
+
+DEBUG = 2
+
+ +
+
+ERROR = -1
+
+ +
+
+FATAL = -2
+
+ +
+
+INFO = 1
+
+ +
+
+TRACE = 3
+
+ +
+
+WARN = 0
+
+ +
+ +
+
+pisa.utils.log.set_verbosity(verbosity)[source]
+

Set the verbosity level for the root logger Verbosity should be an +integer with the levels defined by pisa.utils.log.Levels enum.

+
+ +
+
+

pisa.utils.matrix module

+

Utilities for performing some not-so-common matrix tasks.

+
+
+pisa.utils.matrix.fronebius_nearest_psd(A, return_distance=False)[source]
+

Find the positive semi-definite matrix closest to A.

+

The closeness to A is measured by the Fronebius norm. The matrix closest to A +by that measure is uniquely defined in [3].

+
+
Parameters:
+
    +
  • A (numpy.ndarray) – Symmetric matrix

  • +
  • return_distance (bool, optional) – Return distance of the input matrix to the approximation as given in +theorem 2.1 in [3]. +This can be compared to the actual Frobenius norm between the +input and output to verify the calculation.

  • +
+
+
Returns:
+

X – Positive semi-definite matrix approximating A.

+
+
Return type:
+

numpy.ndarray

+
+
+

Notes

+

This function is a modification of [1]_, which is a Python adaption of [2], which +credits [3].

+

References

+ +
+ +
+
+pisa.utils.matrix.is_psd(A)[source]
+

Test whether a matrix is positive semi-definite.

+

Test is done via attempted Cholesky decomposition as suggested in [1]_.

+
+
Parameters:
+

A (numpy.ndarray) – Symmetric matrix

+
+
Returns:
+

True if A is positive semi-definite, else False

+
+
Return type:
+

bool

+
+
+

References

+ +
+ +
+
+

pisa.utils.mcSimRunSettings module

+

Handle Monte Carlo simulation run settings

+
+
+class pisa.utils.mcSimRunSettings.DetMCSimRunsSettings(run_settings, detector=None)[source]
+

Bases: dict

+

Handle Monte Carlo run settings for a detector (i.e., without specifying +which run as is required for the MCSimRunSettings object)

+

Since run is not specified at instantiation, method calls require the user +to specify a run ID.

+
+
Parameters:
+
    +
  • run_settings (string or dict)

  • +
  • detector (string or None)

  • +
+
+
+
+

See also

+
+
MCSimRunSettings

Same, but specifies a specific run at instantiation; see class docstring for specification of run_settings dict / JSON file

+
+
+
+
+
+barnobarfract(run, barnobar=None, is_particle=None, flav_or_flavint=None)[source]
+
+ +
+
+consistency_checks(data, run, flav=None)[source]
+
+ +
+
+get_energy_range(run)[source]
+

(min, max) energy in GeV

+
+ +
+
+get_flavints(run)[source]
+
+ +
+
+get_flavs(run)[source]
+
+ +
+
+get_num_gen(run, barnobar=None, is_particle=None, flav_or_flavint=None, include_physical_fract=True)[source]
+

Return the total number of events generated

+
+ +
+
+get_spectral_index(run)[source]
+

Spectral index (positive number for negative powers of energy)

+
+ +
+
+get_xsec(run, xsec=None)[source]
+

Instantiated CrossSections object

+
+ +
+
+get_xsec_version(run)[source]
+

Cross sectons version name used in generating the MC

+
+ +
+ +
+
+class pisa.utils.mcSimRunSettings.MCSimRunSettings(run_settings, run=None, detector=None)[source]
+

Bases: dict

+

Handle Monte Carlo run settings

+
+
Parameters:
+
    +
  • run_settings (string or dict)

  • +
  • run

  • +
  • detector (string or None)

  • +
+
+
+

Notes

+

run_settings dictionary format (and same for corresponding JSON file, e.g. +resources/events/mc_sim_run_settings.json); example is for PINGU but should +generalize to DeepCore, etc. Note that a JSON file will use null and not +None.

+

(Also note that expressions for numerical values utilizing the Python/numpy +namespace are valid, e.g. “2*pi” will be evaluated within the code to its +decimal value.):

+
{
+
+  # Specify the detector name, lower case
+  "pingu": {
+
+    # Monte Carlo run number for this detector
+    "388": {
+
+      # Version of geometry, lower-case. E.g., ic86 for IceCube/DeepCore
+      "geom": "v36",
+
+      # A straightforward way of computing aeff/veff/meff is to keep all
+      # simulated events and compare the #analysis/#simulated. If all
+      # simulated events are kept, then the filename containing these is
+      # recorded here.
+      "all_gen_events_file": None,
+
+      # Max and min azimuth angle simulated (rad)
+      "azimuth_max": "2*pi",
+      "azimuth_min": 0,
+
+      # Max and min energy simulated (GeV)
+      "energy_max": 80,
+      "energy_min": 1,
+
+      # GENIE simulates some un-physica events (interactions that will not
+      # occur in nature). The number below was arrived at by Ken Clark, so
+      # ask him for more info.
+      "physical_events_fract": 0.8095,
+
+      # GENIE has a prescale factor (TODO: generalize or eliminate for
+      # other xsec?)
+      "genie_prescale_factor": 1.2,
+
+      # Neutrino flavors simulated
+      "flavints": "nutau,nutaubar",
+
+      # #nu / (#nu + #nubar) simulated
+      "nu_to_total_fract": 0.5,
+
+      # Number of events simulated per I3 file
+      "num_events_per_file": 250000,
+
+      # Number of I3 files used
+      "num_i3_files": 195,
+
+      # Simulated spectral inde gamma; value of 1 => E*{-1}
+      "sim_spectral_index": 1,
+
+      # Version of neutrino/ice cross sections used for the simulation
+      "xsec_version": "genie_2.6.4",
+
+      # Max and min zenith angle simulated (rad)
+      "zenith_max": "pi",
+      "zenith_min": 0
+    }
+  }
+}
+
+
+
+
+barnobarfract(barnobar=None, is_particle=None, flav_or_flavint=None)[source]
+

Fraction of events generated (either particles or antiparticles).

+

Specifying whether you want the fraction for particle or +antiparticle is done by specifying one (and only one) of the three +:param barnobar: +:param is_particle or flav_or_flavint:

+
+
Parameters:
+
    +
  • barnobar (None or int) – -1 for antiparticle, +1 for particle

  • +
  • is_particle (None or bool) – True for particle, false for antiparticle

  • +
  • flav_or_flavint (None or convertible to NuFlav or NuFlavInt) – Particle or antiparticles is determined from the flavor or flavint +passed

  • +
+
+
+
+ +
+
+consistency_checks(data, flav=None)[source]
+
+ +
+
+get_energy_range()[source]
+

(min, max) energy in GeV

+
+ +
+
+get_flavints()[source]
+
+ +
+
+get_flavs()[source]
+
+ +
+
+get_num_gen(barnobar=None, is_particle=None, flav_or_flavint=None, include_physical_fract=True)[source]
+

Return the number of events generated.

+
+
Parameters:
+
    +
  • barnobar (None or int) – -1 for antiparticle or +1 for particle

  • +
  • is_particle (None or bool)

  • +
  • flav_or_flavint (None or convertible to NuFlav or NuFlavInt) – If one of barnobar, is_particle, or flav_or_flavint is +specified, returns only the number of particles or antiparticles +generated. Otherwise (if none of those is specified), return the +total number of generated events.

  • +
  • include_physical_fract (bool) – Whether to include the “GENIE physical fraction”, which accounts +for events that are generated but are un-physical and therefore +will never be detectable. These are removed to not penalize +detection efficiency.

  • +
+
+
+
+ +
+
+get_spectral_index()[source]
+

Spectral index (positive number for negative powers of energy)

+
+ +
+
+get_xsec(xsec=None)[source]
+

Instantiated CrossSections object

+
+ +
+
+get_xsec_version()[source]
+

Cross sectons version name used in generating the MC

+
+ +
+
+static translate_source_dict(d)[source]
+
+ +
+ +
+
+

pisa.utils.numba_tools module

+

Numba tools

+

This is a colection of functions used for numba functions +that work for targets cpu as well as cuda

+
+
+pisa.utils.numba_tools.clear_matrix(A)[source]
+

Zero out 2D matrix ..

+

A[i, j] = 0

+
+ +
+
+pisa.utils.numba_tools.conjugate(A, B)[source]
+

B is the element-by-element conjugate of A ..

+
B[i, j] = A[i, j]*
+
+
+
+
Parameters:
+
    +
  • A (2d array)

  • +
  • B (2d array)

  • +
+
+
+
+ +
+
+pisa.utils.numba_tools.conjugate_transpose(A, B)[source]
+

B is the conjugate (Hermitian) transpose of A ..

+
B[j, i] = A[i, j]*
+
+
+

A : 2d array of shape (M, N) +B : 2d array of shape (N, M)

+
+ +
+
+pisa.utils.numba_tools.copy_matrix(A, B)[source]
+

Copy elemnts of 2d array A to array B ..

+

B[i, j] = A[i, j]

+
+ +
+
+pisa.utils.numba_tools.ctype
+

alias of complex128

+
+ +
+
+pisa.utils.numba_tools.cuda()
+
+ +
+
+pisa.utils.numba_tools.cuda_copy(func)[source]
+

Handle copying back device array

+
+ +
+
+pisa.utils.numba_tools.ftype
+

alias of float64

+
+ +
+
+pisa.utils.numba_tools.matrix_dot_matrix(A, B, C)[source]
+

Dot-product of two 2d arrays ..

+

C = A * B

+
+ +
+
+pisa.utils.numba_tools.matrix_dot_vector(A, v, w)[source]
+

Dot-product of a 2d array and a vector ..

+

w = A * v

+
+ +
+
+pisa.utils.numba_tools.myjit(func)[source]
+

Decorator to assign the right jit for different targets +In case of non-cuda targets, all instances of cuda.local.array +are replaced by np.empty. This is a dirty fix, hopefully in the +near future numba will support numpy array allocation and this will +not be necessary anymore

+
+
Parameters:
+

func (callable)

+
+
Returns:
+

new_nb_func – Refactored version of func but with cuda.local.array replaced by +np.empty if TARGET == “cpu”. For either TARGET, the returned +function will be callable within numba code for that target.

+
+
Return type:
+

numba callable

+
+
+
+ +
+
+pisa.utils.numba_tools.test_clear_matrix()[source]
+

Unit tests of clear_matrix and clear_matrix_guf

+
+ +
+
+pisa.utils.numba_tools.test_conjugate()[source]
+

Unit tests of conjugate and conjugate_guf

+
+ +
+
+pisa.utils.numba_tools.test_conjugate_transpose()[source]
+

Unit tests of conjugate_transpose and conjugate_transpose_guf

+
+ +
+
+pisa.utils.numba_tools.test_copy_matrix()[source]
+

Unit tests of copy_matrix and copy_matrix_guf

+
+ +
+
+pisa.utils.numba_tools.test_matrix_dot_matrix()[source]
+

Unit tests of matrix_dot_matrix and matrix_dot_matrix_guf

+
+ +
+
+pisa.utils.numba_tools.test_matrix_dot_vector()[source]
+

Unit tests of matrix_dot_vector and matrix_dot_vector_guf

+
+ +
+
+

pisa.utils.plotter module

+

Plotter class for doing plots easily

+
+
+class pisa.utils.plotter.Plotter(outdir='.', stamp=None, size=(8, 8), fmt='pdf', log=True, label='# events', grid=True, ratio=False, annotate=False, symmetric=False, loc='outside')[source]
+

Bases: object

+

Plotting library for PISA `Map`s and `MapSet`s

+
+
Parameters:
+
    +
  • outdir (str) – output directory path

  • +
  • stamp (str) – stamp to be put on every subplot, e.g. ‘Preliminary’, +‘DeepCore nutau’, etc.

  • +
  • fmt (str or iterable of str) – formats to be plotted, e.g. [‘pdf’, ‘png’]

  • +
  • size ((int, int)) – canvas size (inches)

  • +
  • log (bool) – logarithmic z-axis

  • +
  • label (str) – z-axis label

  • +
  • grid (bool) – plot grid

  • +
  • ratio (bool) – add ratio plots in 1-d histos

  • +
  • annotate (bool) – annotate counts per bin in 2-d histos

  • +
  • symmetric (bool) – force symmetric extent of z-axis

  • +
  • loc (str) – either ‘inside’ or ‘outside’, defining where to put axis titles

  • +
+
+
+
+
+add_leg()[source]
+

initialize legend

+
+ +
+
+add_stamp(text=None, **kwargs)[source]
+

Add common stamp with text.

+

NOTE add_stamp cannot be used on a subplot that has been de-selected +and then re-selected. It will write over existing text.

+
+ +
+
+dump(fname)[source]
+

dump figure to file

+
+ +
+
+init_fig(figsize=None)[source]
+

clear/initialize figure

+
+ +
+
+next_color()[source]
+
+ +
+
+plot_1d_all(map_set, plot_axis, **kwargs)[source]
+

all one one canvas

+
+ +
+
+plot_1d_array(map_set, plot_axis, n_rows=None, n_cols=None, fname=None, **kwargs)[source]
+

plot 1d projections as an array

+
+ +
+
+plot_1d_cmp(map_sets, plot_axis, fname=None, **kwargs)[source]
+

1d comparisons for two map_sets as projections

+
+ +
+
+plot_1d_projection(map, plot_axis, **kwargs)[source]
+

plot map projected on plot_axis

+
+ +
+
+plot_1d_ratio(maps, plot_axis, **kwargs)[source]
+

make a ratio plot for a 1d projection

+
+ +
+
+plot_1d_single(map_set, plot_axis, **kwargs)[source]
+

plot all maps in individual plots

+
+ +
+
+plot_1d_slices_array(map_sets, plot_axis, fname=None, **kwargs)[source]
+

plot 1d projections as an array

+
+ +
+
+plot_1d_stack(map_set, plot_axis, **kwargs)[source]
+

all maps stacked on top of each other

+
+ +
+
+plot_2d_array(map_set, n_rows=None, n_cols=None, fname=None, **kwargs)[source]
+

plot all maps in a single plot

+
+ +
+
+plot_2d_map(map, cmap=None, **kwargs)[source]
+

plot map on current axis in 2d

+
+ +
+
+plot_2d_single(map_set, **kwargs)[source]
+

plot all maps in individual plots

+
+ +
+
+plot_array(map_set, fun, *args, **kwargs)[source]
+

wrapper funtion to exccute plotting function fun for every map in a +set distributed over a grid

+
+ +
+
+plot_xsec(map_set, ylim=None, logx=True)[source]
+
+ +
+
+project_1d(map, plot_axis)[source]
+

sum up a map along all axes except plot_axis

+
+ +
+
+reset_colors()[source]
+
+ +
+
+slices_array(map_sets, plot_axis, *args, **kwargs)[source]
+

plot map_set in array using a function fun

+
+ +
+ +
+
+

pisa.utils.profiler module

+

Tools for profiling code

+
+
+pisa.utils.profiler.line_profile(func)[source]
+

Use as @line_profile decorator for a function or class method to log +how long each line in the function/method takes to run.

+

Note that timings can be skewed by overhead from the line_profiler module, +which is used as the core timing mechanism for this function.

+
+
Parameters:
+

func (callable) – Function or method to be profiled

+
+
Returns:
+

new_func – New version of func that is callable just like func but that logs +the time spent in each line of code in func.

+
+
Return type:
+

callable

+
+
+
+ +
+
+pisa.utils.profiler.profile(func)[source]
+

Use as @profile decorator for a function or class method to log the +time that it takes to complete.

+
+
Parameters:
+

func (callable) – Function or method to profile

+
+
Returns:
+

new_func – New version of func that is callable just like func but that logs +the total time spent in func.

+
+
Return type:
+

callable

+
+
+
+ +
+
+pisa.utils.profiler.test_line_profile()[source]
+

Unit tests for line_profile functional (decorator)

+
+ +
+
+pisa.utils.profiler.test_profile()[source]
+

Unit tests for profile functional (decorator)

+
+ +
+
+

pisa.utils.pull_method module

+

Pull method tools.

+
+
+

pisa.utils.random_numbers module

+

Utilities to handle random numbers needed by PISA in a consistent and +reproducible manner.

+
+
+pisa.utils.random_numbers.get_random_state(random_state, jumpahead=None)[source]
+

Derive a numpy.random.RandomState object (usable to generate random +numbers and distributions) from a flexible specification..

+
+
Parameters:
+

random_state (None, RandomState, string, int, state vector, or seq of int) –

    +
  • If instantiated RandomState object is passed, it is used directly

  • +
  • If string : must be either ‘rand’ or ‘random’; random state is +instantiated at random from either /dev/urandom or (if that is not +present) the clock. This creates an irreproducibly-random number.

  • +
  • If int or sequence of lenth one: This is used as the seed value; +must be in [0, 2**32).

  • +
  • If sequence of two integers: first must be in [0, 32768): 15 +most-significant bits. Second must be in [0, 131072): 17 +least-significant bits.

  • +
  • If sequence of three integers: first must be in [0, 4): 2 +most-significant bits. Second must be in [0, 8192): next 13 +(less-significant) bits. Third must be in [0, 131072): 17 +least-significant bits.

  • +
  • If a “state vector” (sequence of length five usable by +numpy.random.RandomState.set_state), set the random state using +this method.

  • +
+

+
+
Returns:
+

random_state – Object callable like numpy.random (e.g. random_state.rand((10,10))), +but with __exclusively local__ state (whereas numpy.random has global +state).

+
+
Return type:
+

numpy.random.RandomState

+
+
+
+ +
+
+pisa.utils.random_numbers.test_get_random_state()[source]
+

Unit tests for get_random_state function

+
+ +
+
+

pisa.utils.resources module

+

Tools to obtain resource files needed for PISA, whether the resource is located +in the filesystem or with the installed PISA package.

+
+
+pisa.utils.resources.find_path(pathspec, fail=True)[source]
+

Find a file or directory in the filesystem (i.e., something that the +operating system can locate, as opposed to Python package resources, which +can be located within a package and therefore hidden from the filesystem).

+
+
Parameters:
+
    +
  • pathspec (string)

  • +
  • fail (bool)

  • +
+
+
Return type:
+

None (if not found) or string (absolute path to file or dir if found)

+
+
+
+ +
+
+pisa.utils.resources.find_resource(resource, fail=True)[source]
+

Try to find a resource (file or directory).

+

First check if resource is an absolute path, then check relative to +the paths specified by the PISA_RESOURCES environment variable (if it is +defined). Otherwise, look in the resources directory of the PISA +installation.

+

Note that the PISA_RESOURCES environment variable can contain multiple +paths, each separated by a colon. Due to using colons as separators, +however, the paths themselves can not contain colons.

+

Note also if PISA is packaged as archive distribution (e.g. zipped egg), +this method extracts the resource (if directory, the entire contents are +extracted) to a temporary cache directory. Therefore, it is preferable to +use the open_resource method directly, and avoid this method if possible.

+
+
Parameters:
+
    +
  • resource (str) – Resource path; can be path relative to CWD, path relative to +PISA_RESOURCES environment variable (if defined), or a package resource +location relative to the pisa_examples/resources sub-directory. Within +each path specified in PISA_RESOURCES and within the +pisa_examples/resources dir, the sub-directories ‘data’, ‘scripts’, +and ‘settings’ are checked for resource _before_ the base directories +are checked. Note that the first result found is returned.

  • +
  • fail (bool) – If True, raise IOError if resource not found +If False, return None if resource not found

  • +
+
+
Returns:
+

    +
  • String if resource is found (relative path to the file or directory); if

  • +
  • not found and fail is False, returns None.

  • +
+

+
+
Raises:
+

IOError if resource is not found and fail is True.

+
+
+
+ +
+
+pisa.utils.resources.open_resource(resource, mode='r')[source]
+

Find the resource file (see find_resource), open it, and return a file +handle.

+
+
Parameters:
+
    +
  • resource (str) – Resource path; can be path relative to CWD, path relative to +PISA_RESOURCES environment variable (if defined), or a package resource +location relative to PISA’s pisa_examples/resources sub-directory. +Within each path specified in PISA_RESOURCES and within the +pisa_examples/resources dir, the sub-directories ‘data’, ‘scripts’, +and ‘settings’ are checked for resource _before_ the base directories +are checked. Note that the first result found is returned.

  • +
  • mode (str) – ‘r’, ‘w’, or ‘rw’; only ‘r’ is valid for package resources (as these +cannot be written)

  • +
+
+
Return type:
+

binary stream object (which behaves identically to a file object)

+
+
+
+

See also

+
+
find_resource

Locate a file or directory (in fileystem) or a package resource

+
+
find_path

Locate a file or directory in the filesystem Open a (file) package resource and return stream object.

+
+
+
+

Notes

+

See help for pkg_resources module / resource_stream method for more details +on handling of package resources.

+
+ +
+
+

pisa.utils.spline module

+

Classes to store and handle the evaluation of splines.

+
+
+class pisa.utils.spline.CombinedSpline(inSpline, interactions=True, ver=None)[source]
+

Bases: FlavIntData

+

Contained class for operating on Spline objects for various neutrino +flavours.

+

Inherits from FlavIntData object. Provides methods to allow +evaluation of the splines for all neutrino flavours.

+
+
Parameters:
+
    +
  • inSpline (Spline or tuple of Spline) – Spline objects with name entry corresponding to a neutrino flavour +nue, numu, nuebar, numubar and also corresponding to an +interaction type cc and nc if the flag interactions is True.

  • +
  • interactions (Bool) – Default = True +Flag to specifiy whether to store flavours or flavour+interaction +signatures.

  • +
+
+
+
+
+compute_integrated_maps(binning, **kwargs)[source]
+

Compute the map of spline values for a given signature integrated +over the input binning, then store it internally.

+
+ +
+
+compute_maps(binning, **kwargs)[source]
+

Compute the map of spline values for a given signature and binning, +then store it internally.

+
+ +
+
+get_integrated_map(signature, binning, **kwargs)[source]
+

Return a map of spline values for a given signature integrated +over the input binning.

+
+ +
+
+get_map(signature, binning, **kwargs)[source]
+

Return a map of spline values for a given signature and +binning.

+
+ +
+
+get_spline(signature, centers, **kwargs)[source]
+

Return the spline of a given signature and bins.

+
+ +
+
+reset()[source]
+

Reset the flux maps to the original input maps.

+
+ +
+
+return_mapset(**kwargs)[source]
+

Return a MapSet of stored spline maps.

+
+ +
+
+scale_map(signature, value)[source]
+

Scale a specific spline map by an input value.

+
+ +
+
+scale_maps(value)[source]
+

Scale the stored spline maps by an input value.

+
+ +
+
+static validate_spline(spline)[source]
+

Validate spline data.

+
+ +
+ +
+
+class pisa.utils.spline.Spline(name, spline, eval_spl, tex=None, validate_spl=None, hash=None)[source]
+

Bases: object

+

Encapsulation of spline evaluation and other operations.

+

Provides methods to evaluate the spline object over a given binning.

+
+
Parameters:
+
    +
  • name (string) – Name for the spline object. Used to identify the object.

  • +
  • tex (None or string) – TeX string that can be used for e.g. plotting.

  • +
  • spline – Splines used for evaluation.

  • +
  • eval_spl (function) – Function prescribing how to obtain values for the input spline object +from a given binning.

  • +
  • validate_spl (function) – Function performing validation test on a given binning used to evaluate +the spline.

  • +
  • hash (None, or immutable object (typically an integer)) – Hash value to attach to the spline.

  • +
+
+
+
+
+get_integrated_map(binning, bw_units=None, **kwargs)[source]
+

Get the spline map integrated over the input binning values +in output units specified by bw_units.

+
+ +
+
+get_map(binning, **kwargs)[source]
+

Return a map of the spline evaluated at the centers of the +given binning.

+
+ +
+
+property hash
+
+ +
+
+property name
+
+ +
+
+property spline
+
+ +
+
+property tex
+
+ +
+ +
+
+

pisa.utils.spline_smooth module

+

Smooth an array by splining it and resampling from the spline

+
+
+pisa.utils.spline_smooth.spline_smooth(array, spline_binning, eval_binning, axis=0, smooth_factor=5, k=3, errors=None)[source]
+

Fuction for spline-smoothing arrays

+

It is smoothing in slices along one axis, assuming 2d arrays +The smoothing is done by splines

+
+
Parameters:
+
    +
  • array (2d-array) – array to be smoothed

  • +
  • spline_binning (OneDimBinning) – Binning of axis on which to construct the spline +Must corrspond to the array dimension

  • +
  • axis (int) – Index of the axis along which to smooth

  • +
  • eval_binning (OneDimBinning) – Binning on which to evaluate the constructed spline

  • +
  • smooth_factor (float) – smoothing factor for spline

  • +
  • k (int) – spline degree

  • +
  • errors (2d-array or None) – uncertainties on the array

  • +
+
+
+

Notes

+

could be expanded to nd arrays to generalize it

+
+ +
+
+

pisa.utils.stats module

+

Statistical functions

+
+
+pisa.utils.stats.ALL_METRICS = ['llh', 'conv_llh', 'barlow_llh', 'mcllh_mean', 'mcllh_eff', 'generalized_poisson_llh', 'chi2', 'mod_chi2', 'correct_chi2', 'weighted_chi2']
+

All metrics defined

+
+ +
+
+pisa.utils.stats.CHI2_METRICS = ['chi2', 'mod_chi2', 'correct_chi2', 'weighted_chi2']
+

Metrics defined that result in measures of chi squared

+
+ +
+
+pisa.utils.stats.LLH_METRICS = ['llh', 'conv_llh', 'barlow_llh', 'mcllh_mean', 'mcllh_eff', 'generalized_poisson_llh']
+

Metrics defined that result in measures of log likelihood

+
+ +
+
+pisa.utils.stats.SMALL_POS = 1e-10
+

A small positive number with which to replace numbers smaller than it

+
+ +
+
+pisa.utils.stats.barlow_llh(actual_values, expected_values)[source]
+

Compute the Barlow LLH taking into account finite statistics. +The likelihood is described in this paper: https://doi.org/10.1016/0010-4655(93)90005-W +:param actual_values: +:type actual_values: numpy.ndarrays of same shape +:param expected_values: +:type expected_values: numpy.ndarrays of same shape

+
+
Returns:
+

barlow_llh

+
+
Return type:
+

numpy.ndarray

+
+
+
+ +
+
+pisa.utils.stats.chi2(actual_values, expected_values)[source]
+

Compute the chi-square between each value in actual_values and +expected_values.

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

chi2 – chi-squared values corresponding to each pair of elements in the inputs

+
+
Return type:
+

numpy.ndarray of same shape as inputs

+
+
+

Notes

+
    +
  • Uncertainties are not propagated through this calculation.

  • +
  • Values in expectation are clipped to the range [SMALL_POS, inf] prior to +the calculation to avoid infinities due to the divide function.

  • +
  • actual_values are allowed to be = 0, since they don’t com up in the denominator

  • +
+
+ +
+
+pisa.utils.stats.conv_llh(actual_values, expected_values)[source]
+

Compute the convolution llh using the uncertainty on the expected values +to smear out the poisson PDFs

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

    +
  • conv_llh (numpy.ndarray of same shape as the inputs)

  • +
  • conv_llh corresponding to each pair of elements in actual_values and

  • +
  • expected_values.

  • +
+

+
+
+
+ +
+
+pisa.utils.stats.conv_poisson(k, l, s, nsigma=3, steps=50)[source]
+

Poisson pdf

+
+\[p(k,l) = l^k \cdot e^{-l}/k!\]
+
+
Parameters:
+
    +
  • k (float)

  • +
  • l (float)

  • +
  • s (float) – sigma for smearing term (= the uncertainty to be accounted for)

  • +
  • nsigma (int) – The ange in sigmas over which to do the convolution, 3 sigmas is > 99%, +so should be enough

  • +
  • steps (int) – Number of steps to do the intergration in (actual steps are 2*steps + 1, +so this is the steps to each side of the gaussian smearing term)

  • +
+
+
Returns:
+

convoluted poissson likelihood

+
+
Return type:
+

float

+
+
+
+ +
+
+pisa.utils.stats.correct_chi2(actual_values, expected_values)[source]
+

Compute the chi-square value taking into account uncertainty terms +(incl. e.g. finite stats) and their changes

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

m_chi2 – Modified chi-squared values corresponding to each pair of elements in +the inputs

+
+
Return type:
+

numpy.ndarray of same shape as inputs

+
+
+
+ +
+
+pisa.utils.stats.generalized_poisson_llh(actual_values, expected_values=None, empty_bins=None)[source]
+

Compute the generalized Poisson likelihood as formulated in https://arxiv.org/abs/1902.08831

+

Note that unlike the other likelihood functions, expected_values +is expected to be a ditribution maker

+
+

inputs:

+

actual_values: flattened hist of a Map object

+

expected_values: OrderedDict of MapSets

+

empty_bins: None, list or np.ndarray (list the bin indices that are empty)

+
+
+

returns:

+

llh_per_bin : bin-wise llh values, in a numpy array

+
+
+ +
+
+pisa.utils.stats.llh(actual_values, expected_values)[source]
+

Compute the log-likelihoods (llh) that each count in actual_values +came from the the corresponding expected value in expected_values.

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

llh – llh corresponding to each pair of elements in actual_values and +expected_values.

+
+
Return type:
+

numpy.ndarray of same shape as the inputs

+
+
+

Notes

+
    +
  • Uncertainties are not propagated through this calculation.

  • +
  • Values in expected_values are clipped to the range [SMALL_POS, inf] +prior to the calculation to avoid infinities due to the log function.

  • +
+
+ +
+
+pisa.utils.stats.log_poisson(k, l)[source]
+

Calculate the log of a poisson pdf

+
+\[p(k,l) = \log\left( l^k \cdot e^{-l}/k! \right)\]
+
+
Parameters:
+
    +
  • k (float)

  • +
  • l (float)

  • +
+
+
Return type:
+

log of poisson

+
+
+
+ +
+
+pisa.utils.stats.log_smear(x, sigma)[source]
+

Calculate the log of a normal pdf

+
+\[p(x, \sigma) = \log\left( (\sigma \sqrt{2\pi})^{-1} \exp( -x^2 / 2\sigma^2 ) \right)\]
+
+
Parameters:
+
    +
  • x (float)

  • +
  • sigma (float)

  • +
+
+
Return type:
+

log of gaussian

+
+
+
+ +
+
+pisa.utils.stats.maperror_logmsg(m)[source]
+

Create message with thorough info about a map for logging purposes

+
+ +
+
+pisa.utils.stats.mcllh_eff(actual_values, expected_values)[source]
+

Compute the log-likelihood (llh) based on eq. 3.16 - https://doi.org/10.1007/JHEP06(2019)030 +accounting for finite MC statistics. +This is the most recommended likelihood in the paper.

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

llh – llh corresponding to each pair of elements in actual_values and +expected_values.

+
+
Return type:
+

numpy.ndarray of same shape as the inputs

+
+
+

Notes

+
    +
  • +
+
+ +
+
+pisa.utils.stats.mcllh_mean(actual_values, expected_values)[source]
+

Compute the log-likelihood (llh) based on LMean in table 2 - https://doi.org/10.1007/JHEP06(2019)030 +accounting for finite MC statistics. +This is the second most recommended likelihood in the paper.

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

llh – llh corresponding to each pair of elements in actual_values and +expected_values.

+
+
Return type:
+

numpy.ndarray of same shape as the inputs

+
+
+

Notes

+
    +
  • +
+
+ +
+
+pisa.utils.stats.mod_chi2(actual_values, expected_values)[source]
+

Compute the chi-square value taking into account uncertainty terms +(incl. e.g. finite stats)

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

m_chi2 – Modified chi-squared values corresponding to each pair of elements in +the inputs

+
+
Return type:
+

numpy.ndarray of same shape as inputs

+
+
+
+ +
+
+pisa.utils.stats.norm_conv_poisson(k, l, s, nsigma=3, steps=50)[source]
+

Convoluted poisson likelihood normalized so that the value at k=l +(asimov) does not change

+
+
Parameters:
+
    +
  • k (float)

  • +
  • l (float)

  • +
  • s (float) – sigma for smearing term (= the uncertainty to be accounted for)

  • +
  • nsigma (int) – The range in sigmas over which to do the convolution, 3 sigmas is > +99%, so should be enough

  • +
  • steps (int) – Number of steps to do the intergration in (actual steps are 2*steps + 1, +so this is the steps to each side of the gaussian smearing term)

  • +
+
+
Returns:
+

Convoluted poisson likelihood normalized so that the value at k=l +(asimov) does not change

+
+
Return type:
+

likelihood

+
+
+
+ +
+
+pisa.utils.stats.signed_sqrt_mod_chi2(actual_values, expected_values)[source]
+

Compute a (signed) pull value taking into account uncertainty terms.

+
+
Parameters:
+
    +
  • actual_values (numpy.ndarrays of same shape)

  • +
  • expected_values (numpy.ndarrays of same shape)

  • +
+
+
Returns:
+

m_pull – Pull values corresponding to each pair of elements in +the inputs

+
+
Return type:
+

numpy.ndarray of same shape as inputs

+
+
+
+ +
+
+

pisa.utils.tests module

+

Functions to help compare and plot differences between PISA 2 and PISA 3 maps

+
+
+pisa.utils.tests.baseplot(m, title, ax, clabel=None, symm=False, evtrate=False, vmax=None, cmap=<matplotlib.colors.LinearSegmentedColormap object>)[source]
+

Simple plotting of a 2D histogram (map)

+
+ +
+
+pisa.utils.tests.baseplot2(map, title, ax, vmax=None, symm=False, evtrate=False)[source]
+

Simple plotting of a 2D map.

+
+
Parameters:
+
    +
  • map (Map)

  • +
  • title (str)

  • +
  • ax (axis)

  • +
  • symm (bool)

  • +
  • evtrate (bool)

  • +
+
+
Return type:
+

ax, pcmesh, cbar

+
+
+
+ +
+
+pisa.utils.tests.check_agreement(testname, thresh_ratio, ratio, thresh_diff, diff)[source]
+
+ +
+
+pisa.utils.tests.make_delta_map(amap, bmap)[source]
+

Get the difference between two PISA 2 style maps (amap-bmap) and return +as another PISA 2 style map.

+
+ +
+
+pisa.utils.tests.make_ratio_map(amap, bmap)[source]
+

Get the ratio of two PISA 2 style maps (amap/bmap) and return as another +PISA 2 style map.

+
+ +
+
+pisa.utils.tests.order(x)[source]
+
+ +
+
+pisa.utils.tests.order_str(x)[source]
+
+ +
+
+pisa.utils.tests.pisa2_map_to_pisa3_map(pisa2_map, ebins_name='ebins', czbins_name='czbins', is_log=True, is_lin=True)[source]
+
+ +
+
+pisa.utils.tests.plot_cmp(new, ref, new_label, ref_label, plot_label, file_label, outdir, ftype='png')[source]
+

Plot comparisons between two (identically-binned) maps or map sets.

+
+
Parameters:
+
    +
  • new (Map or MapSet)

  • +
  • ref (Map or MapSet)

  • +
  • new_label (str)

  • +
  • ref_label (str)

  • +
  • plot_label (str)

  • +
  • file_label (str)

  • +
  • outdir (str)

  • +
  • ftype (str)

  • +
+
+
+
+ +
+
+pisa.utils.tests.plot_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, name, texname, stagename, servicename, shorttitles=False, ftype='png')[source]
+

Plot comparisons between two identically-binned PISA 2 style maps

+
+ +
+
+pisa.utils.tests.plot_map_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, name, texname, stagename, servicename, shorttitles=False, ftype='png')[source]
+

Plot comparisons between two identically-binned PISA 3 style maps

+
+ +
+
+pisa.utils.tests.print_agreement(testname, ratio)[source]
+
+ +
+
+pisa.utils.tests.print_event_rates(testname1, testname2, kind, map1_events, map2_events)[source]
+
+ +
+
+pisa.utils.tests.validate_map_objs(amap, bmap)[source]
+

Validate that two PISA 3 style maps are compatible binning.

+
+ +
+
+pisa.utils.tests.validate_maps(amap, bmap)[source]
+

Validate that two PISA 2 style maps are compatible binning.

+
+ +
+
+

pisa.utils.vbwkde module

+

Implementation of the Improved Sheather Jones (ISJ) KDE bandwidth selection +method outlined in:

+
+
    +
    1. +
    2. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density

    3. +
    +
  1. +
+
+

estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010.

+
+
+

and extension to use this in varaible bandwidth KDE via

+
+
+
I.S. Abramson, On bandwidth variation in kernel estimates - A

square root law, Annals of Stat. Vol. 10, No. 4, 1217-1223 1982

+
+
+
+

See also

+
+
    +
  1. Hall, T. C. Hu, J. S. Marron, Improved Variable Window Kernel

  2. +
+
+

Estimates of Probability Densities, Annals of Statistics +Vol. 23, No. 1, 1-10, 1995

+
+
+

Some code in this module is Copyright (c) 2007 Zdravko Botev. See __license__ +for details.

+
+
+pisa.utils.vbwkde.fbwkde(data, weights=None, n_dct=None, min=None, max=None, evaluate_dens=True, evaluate_at=None)[source]
+

Fixed-bandwidth (standard) Gaussian KDE using the Improved +Sheather-Jones bandwidth.

+

Code adapted for Python from the implementation in Matlab by Zdravko Botev.

+

Ref: Z. I. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density +estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010.

+
+
Parameters:
+
    +
  • data (array)

  • +
  • weights (array or None)

  • +
  • n_dct (None or int) – Number of points with which to form a regular grid, from min to +max; histogram values at these points are sent through a discrete +Cosine Transform (DCT), so n_dct should be an integer power of 2 for +speed purposes. If None, uses next-highest-power-of-2 above +len(data)*10.

  • +
  • min (float or None)

  • +
  • max (float or None)

  • +
  • evaluate_dens (bool)

  • +
  • evaluate_at (None or array)

  • +
+
+
Returns:
+

    +
  • bandwidth (float)

  • +
  • evaluate_at (array of float)

  • +
  • density (None or array of float)

  • +
+

+
+
+
+ +
+
+pisa.utils.vbwkde.isj_bandwidth(y, n_datapoints, x_range, min_bandwidth)[source]
+
+
Parameters:
+
    +
  • y (array of float)

  • +
  • n_datapoints (int)

  • +
  • x_range (float)

  • +
+
+
Returns:
+

    +
  • bandwidth (float)

  • +
  • t_star (float)

  • +
  • dct_data (array of float)

  • +
+

+
+
+
+ +
+
+pisa.utils.vbwkde.test_fbwkde()[source]
+

Test speed of fbwkde implementation

+
+ +
+
+pisa.utils.vbwkde.test_vbwkde()[source]
+

Test speed of unweighted vbwkde implementation

+
+ +
+
+pisa.utils.vbwkde.vbwkde(data, weights=None, n_dct=None, min=None, max=None, n_addl_iter=0, evaluate_dens=True, evaluate_at=None)[source]
+

Variable-bandwidth (standard) Gaussian KDE that uses the function +fbwkde for a pilot density estimate.

+
+
Parameters:
+
    +
  • data (array) – The data points for which the density estimate is sought

  • +
  • weights (array or None) – Weight for each point in data

  • +
  • n_dct (None or int) – Number of points with which to form a regular grid, from min to +max; histogram values at these points are sent through a discrete +Cosine Transform (DCT), so n_dct should be an integer power of 2 for +speed purposes. If None, uses next-highest-power-of-2 above +len(data)*10.

  • +
  • min (None or float) – Minimum of range over which to compute density. +If None, defaults to min(data) - range(data)/2

  • +
  • max (None or float) – Maximum of range over which to compute density. +If None: max(data) + range(data)/2

  • +
  • n_addl_iter (int >= 0) – Number of additional iterations on the Abramson VBW density after +the initial VBW estimate. This can help smooth the tails of the +distribution, at the expense of additional computational cost.

  • +
  • evaluate_dens (bool) – Whether to evaluate and return the density estimate on the points +defined by evaluate_at

  • +
  • evaluate_at (None, float, or array of float) –

    +
    Point(s) at which to evaluate the density estimate. If None,

    evaluate_at = np.linspace(min + dx/2, max - dx/2, n_dct)

    +
    +
    where

    dx = (max - min) / n_dct

    +
    +
    +

  • +
+
+
Returns:
+

    +
  • kernel_bandwidths (array)

  • +
  • evaluate_at (array) – Locations at which the density estimates would be evaluated

  • +
  • density (array) – Density estimates

  • +
+

+
+
+

Notes

+

Specifying the range:

+
+

The specification of min and max are critical for obtaining a +reasonable density estimate. If the true underlying density slowly +decays to zero on one side or the other, like a gaussian, specifying +too-small a range will distort the edge the VBW-KDE finds. On the +other hand, an abrupt cut-off in the distribution should be +accompanied by a similar cutoff in the computational range (min and/or +max). The algorithm here will approximate such a sharp cut-off with +roughly the same performance to the reflection method for standard +KDE’s (as the fixed-BW portion uses a DCT of the data), but note that +this will not perform as well as polynomial-edges or other +modifications that have been proposed in the literature.

+
+
+ +
+
+

pisa.utils.vectorizer module

+

Collection of useful vectorized functions

+
+
+pisa.utils.vectorizer.assign(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.imul(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.imul_and_scale(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.itruediv(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.mul(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.pow(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.replace_where_counts_gt(*args, **kwargs)
+
+ +
+
+pisa.utils.vectorizer.sqrt(*args, **kwargs)
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.utils.hypersurface.html b/pisa.utils.hypersurface.html new file mode 100644 index 000000000..79ccde26d --- /dev/null +++ b/pisa.utils.hypersurface.html @@ -0,0 +1,842 @@ + + + + + + + pisa.utils.hypersurface package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.utils.hypersurface package

+
+

Submodules

+
+
+

pisa.utils.hypersurface.hyper_interpolator module

+

Classes and methods needed to do hypersurface interpolation over arbitrary parameters.

+
+
+class pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator(interpolation_param_spec, hs_fits, ignore_nan=True)[source]
+

Bases: object

+

Factory for interpolated hypersurfaces.

+

After being initialized with a set of hypersurface fits produced at different +parameters, it uses interpolation to produce a Hypersurface object +at a given point in parameter space using scipy’s RegularGridInterpolator.

+

The interpolation is piecewise-linear between points. All points must lie on a +rectilinear ND grid.

+
+
Parameters:
+
    +
  • interpolation_param_spec (dict) –

    +
    Specification of interpolation parameter grid of the form::
    +
    interpolation_param_spec = {

    ‘param1’: {“values”: [val1_1, val1_2, …], “scales_log”: True/False} +‘param2’: {“values”: [val2_1, val2_2, …], “scales_log”: True/False} +… +‘paramN’: {“values”: [valN_1, valN_2, …], “scales_log”: True/False}

    +
    +
    +

    }

    +
    +
    +

    where values are given as Quantity.

    +

  • +
  • hs_fits (list of dict) – list of dicts with hypersurfacesthat were fit at the points of the parameter mesh +defined by interpolation_param_spec

  • +
  • ignore_nan (bool) – Ignore empty bins in hypersurfaces. The intercept in those bins is set to 1 and +all slopes are set to 0.

  • +
+
+
+

Notes

+

Be sure to give a support that covers the entire relevant parameter range and a +good distance beyond! To prevent minimization failure from NaNs, extrapolation +is used if hypersurfaces outside the support are requested but needless to say +these numbers are unreliable.

+
+

See also

+
+
scipy.interpolate.RegularGridInterpolator

class used for interpolation

+
+
+
+
+
+property binning
+
+ +
+
+get_hypersurface(**param_kw)[source]
+

Get a Hypersurface object with interpolated coefficients.

+
+
Parameters:
+

**param_kw – Parameters are given as keyword arguments, where the names +of the arguments must match the names of the parameters over +which the hypersurfaces are interpolated. The values +are given as Quantity objects with units.

+
+
+
+ +
+
+property interpolation_param_names
+
+ +
+
+property num_interp_params
+
+ +
+
+property param_names
+
+ +
+
+plot_fits_in_bin(bin_idx, ax=None, n_steps=20, **param_kw)[source]
+

Plot the coefficients as well as covariance matrix elements as a function +of the interpolation parameters.

+
+
Parameters:
+
    +
  • bin_idx (tuple) – index of the bin for which to plot the fits

  • +
  • ax (2D array of axes, optional) – axes into which to place the plots. If None (default), +appropriate axes will be generated. Must have at least +size (n_coeff, n_coeff + 1).

  • +
  • n_steps (int, optional) – number of steps to plot between minimum and maximum

  • +
  • **param_kw – Parameters to be fixed when producing slices. If the interpolation +is in N-D, then (N-2) parameters need to be fixed to produce 2D plots +of the remaining 2 parameters and (N-1) need to be fixed to produce a +1D slice.

  • +
+
+
+
+ +
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.assemble_interpolated_fits(fit_directory, output_file, drop_fit_maps=False, leftout_param=None, leftout_surface=None)[source]
+

After all of the fits on the cluster are done, assemble the results to one JSON.

+

The JSON produced by this function is what load_interpolated_hypersurfaces +expects.

+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.get_incomplete_job_idx(fit_directory)[source]
+

Get job indices of fits that are not flagged as successful.

+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.load_interpolated_hypersurfaces(input_file, expected_binning=None)[source]
+

Load a set of interpolated hypersurfaces from a file.

+

Analogously to “load_hypersurfaces”, this function returns a +collection with a HypersurfaceInterpolator object for each Map.

+
+
Parameters:
+

input_file (str) –

A JSON input file as produced by fit_hypersurfaces if interpolation params +were given. It has the form:

+
{
+    interpolation_param_spec = {
+        'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False}
+        'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False}
+        ...
+        'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False}
+    },
+    'hs_fits': [
+        <list of dicts where keys are map names such as 'nue_cc' and values
+        are hypersurface states>
+    ]
+}
+
+
+

+
+
Returns:
+

dictionary with a HypersurfaceInterpolator for each map

+
+
Return type:
+

collections.OrderedDict

+
+
+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.pipeline_cfg_from_states(state_dict)[source]
+

Recover a pipeline cfg containing PISA objects from a raw state.

+

When a pipeline configuration is stored to JSON, the PISA objects turn into +their serialized states. This function looks through the dictionary returned by +from_json and recovers the PISA objects such as ParamSet and MultiDimBinning.

+

It should really become part of PISA file I/O functionality to read and write +PISA objects inside dictionaries/lists into a JSON and be able to recover +them…

+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.prepare_interpolated_fit(nominal_dataset, sys_datasets, params, fit_directory, interpolation_param_spec, combine_regex=None, log=False, minimum_mc=0, **hypersurface_fit_kw)[source]
+

Writes steering files for fitting hypersurfaces on a grid of arbitrary parameters. +The fits can then be run on a cluster with run_interpolated_fit.

+
+
Parameters:
+
    +
  • nominal_dataset (dict) –

    Definition of the nominal dataset. Specifies the pipleline with which the maps +can be created, and the values of all systematic parameters used to produced the +dataset. +Format must be:

    +
    +
    +
    nominal_dataset = {

    “pipeline_cfg” = <pipeline cfg file (either cfg file path or dict)>), +“sys_params” = { param_0_name : param_0_value_in_dataset, …, param_N_name : param_N_value_in_dataset }

    +
    +
    +

    }

    +
    +

    Sys params must correspond to the provided HypersurfaceParam instances provided +in the params arg.

    +

  • +
  • sys_datasets (list of dicts) – List of dicts, where each dict defines one of the systematics datasets to be +fitted. The format of each dict is the same as explained for nominal_dataset

  • +
  • params (list of HypersurfaceParams) – List of HypersurfaceParams instances that define the hypersurface. Note that +this defined ALL hypersurfaces fitted in this function, e.g. only supports a +single parameterisation for all maps (this is almost always what you want).

  • +
  • output_directory (str) – Directory in which the fits will be run. Steering files for the fits to be run +will be stored here.

  • +
  • combine_regex (list of str, or None) – List of string regex expressions that will be used for merging maps. Used to +combine similar species. Must be something that can be passed to the +MapSet.combine_re function (see that functions docs for more details). Choose +None is do not want to perform this merging.

  • +
  • interpolation_param_spec (collections.OrderedDict) –

    Specification of parameter grid that hypersurfaces should be interpolated over. +The dict should have the following form:

    +
    interpolation_param_spec = {
    +    'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False}
    +    'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False}
    +    ...
    +    'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False}
    +}
    +
    +
    +

    The hypersurfaces will be fit on an N-dimensional rectilinear grid over +parameters 1 to N. The flag scales_log indicates that the interpolation over +that parameter should happen in log-space.

    +

  • +
  • minimum_mc (int, optional) – Minimum number of un-weighted MC events required in each bin.

  • +
  • hypersurface_fit_kw (kwargs) – kwargs will be passed on to the calls to Hypersurface.fit

  • +
+
+
+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.run_interpolated_fit(fit_directory, job_idx, skip_successful=False)[source]
+

Run the hypersurface fit for a grid point.

+

If skip_successful is true, do not run if the fit_successful flag is already +True.

+
+ +
+
+pisa.utils.hypersurface.hyper_interpolator.serialize_pipeline_cfg(pipeline_cfg)[source]
+

Turn a pipeline configuration into something we can store to JSON.

+

It doesn’t work by default because tuples are not allowed as keys when storing to +JSON. All we do is to turn the tuples into strings divided by a double underscore.

+
+ +
+
+

pisa.utils.hypersurface.hypersurface module

+

Tools for working with hypersurfaces, which are continuous functions in N-D +with arbitrary functional forms.

+

Hypersurfaces can be used to model systematic uncertainties derived from discrete +simulation datasets, for example for detedctor uncertainties.

+
+
+class pisa.utils.hypersurface.hypersurface.Hypersurface(params, initial_intercept=None, log=False)[source]
+

Bases: object

+

A class defining the hypersurface

+
+
Contains :
    +
  • A single common intercept

  • +
  • N systematic parameters, inside which the functional form is defined

  • +
+
+
+

This class can be configured to hold both the functional form of the hypersurface +and values (likely fitted from simulation datasets) for the free parameters of this +functional form.

+

Fitting functionality is provided to fit these free parameters.

+

This class can simultaneously hold hypersurfaces for every bin in a histogram (Map).

+

The functional form of the systematic parameters can be arbitrarily complex.

+

The class has a fit method for fitting the hypersurface to some data (e.g. +discrete systematics sets).

+

Serialization functionality is included to allow fitted hypersurfaces to be stored +to a file and re-loaded later (e.g. to be used in analysis).

+
+
The main use cases are:
    +
  1. +
    Fit hypersurfaces
      +
    • Define the desired HypersurfaceParams (functional form, intial coefficient guesses).

    • +
    • Instantiate the Hypersurface class, providing the hypersurface params and initial intercept guess.

    • +
    • Use Hypersurface.fit function (or more likely the fit_hypersurfaces helper function provided below), +to fit the hypersurface coefficients to some provided datasets.

    • +
    • Store to file

    • +
    +
    +
    +
  2. +
  3. +
    Evaluate an existing hypersurface
      +
    • Load existing fitted Hypersurface from a file (load_hypersurfaces helper function)

    • +
    • Get the resulting hypersurface value for each bin for a given set of systemaic param +values using the Hypersurface.evaluate method.

    • +
    • Use the hypersurface value for each bin to re-weight events

    • +
    +
    +
    +
  4. +
+
+
+

The class stores information about the datasets used to fit the hypersurfaces, including the Maps +used and nominal and systematic parameter values.

+
+
Parameters:
+
    +
  • params (list) – A list of HypersurfaceParam instances defining the hypersurface. +The initial_fit_coeffts values in this instances will be used as the starting +point for any fits.

  • +
  • initial_intercept (float) – Starting point for the hypersurface intercept in any fits

  • +
  • log (bool, optional) – Set hypersurface to log mode. The surface is fit to the log of the bin counts. +The fitted surface is exponentiated during evaluation. Default: False

  • +
+
+
+
+
+evaluate(param_values, bin_idx=None, return_uncertainty=False)[source]
+

Evaluate the hypersurface, using the systematic parameter values provided. +Uses the current internal values for all functional form coefficients.

+
+
Parameters:
+
    +
  • param_values (dict) –

    A dict specifying the values of the systematic parameters to use in the evaluation. +Format is :

    +
    +

    { sys_param_name_0 : sys_param_0_val, …, sys_param_name_N : sys_param_N_val }. +The keys must be string and correspond to the HypersurfaceParam instances. +The values must be scalars.

    +
    +

  • +
  • bin_idx (tuple or None) – Optionally can specify a particular bin (using numpy indexing). d +Othewise will evaluate all bins.

  • +
  • return_uncertainty (bool, optional) – return the uncertainty on the output (default: False)

  • +
+
+
+
+ +
+
+fit(nominal_map, nominal_param_values, sys_maps, sys_param_values, norm=True, method='L-BFGS-B', fix_intercept=False, intercept_bounds=None, intercept_sigma=None, include_empty=False, keep_maps=True, ref_bin_idx=None, smooth_method=None, smooth_kw=None)[source]
+

Fit the hypersurface coefficients (in every bin) to best match the provided +nominal and systematic datasets.

+

Writes the results directly into this data structure.

+
+
Parameters:
+
    +
  • nominal_map (Map) – Map from the nominal dataset

  • +
  • nominal_param_values (dict) – Value of each systematic param used to generate the nominal dataset +Format: { param_0_name : param_0_nom_val, …, param_N_name : param_N_nom_val }

  • +
  • sys_maps (list of Maps) – List containing the Map from each systematic dataset

  • +
  • sys_param_values (list of dicts) – List where each element if a dict containing the values of each systematic +param used to generate the that dataset Each list element specified the +parameters for the corresponding element in sys_maps

  • +
  • norm (bool) – Normalise the maps to the nominal map. This is what you want to do when +using the hypersurface to re-weight simulation (which is the main use case). +In principal the hypersurfaces are more general though and could be used for +other tasks too, hence this option.

  • +
  • method (str) – method arg to pass to scipy.optimize.minimiza

  • +
  • fix_intercept (bool) – Fix intercept to the initial intercept.

  • +
  • intercept_bounds (2-tuple, optional) – Bounds on the intercept. Default is None (no bounds)

  • +
  • include_empty (bool) – Include empty bins in the fit. If True, empty bins are included with value 0 +and sigma 1. +Default: False

  • +
  • keep_maps (bool) – Keep maps used to make the fit. If False, maps will be set to None after +the fit is complete. This helps to reduce the size of JSONS if the +Hypersurface is to be stored on disk.

  • +
  • ref_bin_idx (tuple) – An index specifying a reference bin that will be used for logging

  • +
+
+
+
+ +
+
+property fit_coefft_labels
+

Return labels for each fit coefficient

+
+ +
+
+property fit_coeffts
+

Return all coefficients, in all bins, as a single array +This is the overall intercept, plus the coefficients for each individual param +Dimensions are: [binning …, fit coeffts]

+
+ +
+
+property fit_maps
+

Return the `Map instances used for fitting +These will be normalised if the fit was performend to normalised maps.

+
+ +
+
+property fit_param_values
+

Return the stored systematic parameters from the datasets used for fitting +Returns: { param_0_name : [ param_0_sys_val_0, …, param_0_sys_val_M ], …, param_N_name : [ param_N_sys_val_0, …, param_N_sys_val_M ] }

+
+ +
+
+fluctuate(random_state=None)[source]
+

Return a new hypersurface object whose coefficients have been randomly fluctuated according +to the fit covariance matrix.

+

Used for testing the impact of statistical uncertainty in the hypersurfaces fits on +downstream analyses.

+
+ +
+
+classmethod from_state(state)[source]
+

Instantiate a new object from the contents of a serialized state dict

+
+
Parameters:
+

resource (dict) – A dict

+
+
+
+

See also

+

to_json

+
+
+ +
+
+get_nominal_mask()[source]
+

Return a mask indicating which datasets have nominal values for all parameters

+
+ +
+
+get_on_axis_mask(param_name)[source]
+

Return a mask indicating which datasets are “on-axis” for a given parameter.

+

“On-axis” means “generated using the nominal value for this parameter”. Parameters other +than the one specified can have non-nominal values.

+
+
Parameters:
+

param_name (str) – The name of systematic parameter for which we want on-axis datasets

+
+
+
+ +
+
+property initialized
+

Return flag indicating if hypersurface has been initialized +Not giving use direct write-access to the variable as they should nt be setting it themselves

+
+ +
+
+property nominal_values
+

Return the stored nominal parameter for each dataset +Returns: { param_0_name : param_0_nom_val, …, param_N_name : param_N_nom_val }

+
+ +
+
+property num_fit_coeffts
+

Return the total number of coefficients in the hypersurface fit +This is the overall intercept, plus the coefficients for each individual param

+
+ +
+
+property num_fit_sets
+

Return number of datasets used for fitting

+
+ +
+
+property param_names
+

Return the (ordered) names of the systematic parameters

+
+ +
+
+report(bin_idx=None)[source]
+

Return a string version of the hypersurface contents

+
+
Parameters:
+

bin_idx (tuple of None) – Specify a particular bin (using numpy indexing). In this case only report on that bin.

+
+
+
+ +
+
+property serializable_state
+

OrderedDict containing savable state attributes

+
+ +
+ +
+
+class pisa.utils.hypersurface.hypersurface.HypersurfaceParam(name, func_name, initial_fit_coeffts=None, bounds=None, coeff_prior_sigma=None)[source]
+

Bases: object

+

A class representing one of the parameters (and corresponding functional forms) in +the hypersurface.

+

A user creates the initial instances of thse params, before passing the to the +Hypersurface instance. Once this has happened, the user typically does not need to +directly interact woth these HypersurfaceParam instances.

+
+
Parameters:
+
    +
  • name (str) – Name of the parameter

  • +
  • func_name (str) – Name of the hypersurface function to use. +See “Hypersurface functional forms” section for more details, including +available functions.

  • +
  • initial_fit_coeffts (array) – Initial values for the coefficients of the functional form +Number and meaning of coefficients depends on functional form

  • +
  • bounds (2-tuple of array_like, optional) – Lower and upper bounds on independent variables. Defaults to no bounds. Each +element of the tuple must be either an array with the length equal to the number +of parameters, or a scalar (in which case the bound is taken to be the same for +all parameters.) Use np.inf with an appropriate sign to disable bounds on +all or some parameters.

  • +
  • coeff_prior_sigma (array, optional) – Prior sigma values for the coefficients. If None (default), no regularization +will be applied during the fit.

  • +
+
+
+
+
+evaluate(param, out, bin_idx=None)[source]
+

Evaluate the functional form for the given param values. +Uses the current values of the fit coefficients.

+

By default evaluates all bins, but optionally can specify a particular bin (used +when fitting).

+
+ +
+
+classmethod from_state(state)[source]
+
+ +
+
+get_fit_coefft(*args, **kwargs)[source]
+

Get a fit coefficient values from the matrix +Basically just wrapping the indexing function

+
+ +
+
+get_fit_coefft_idx(bin_idx=None, coefft_idx=None)[source]
+

Indexing the fit_coefft matrix is a bit of a pain +This helper function eases things

+
+ +
+
+gradient(param, out, bin_idx=None)[source]
+

Evaluate gradient of the functional form for the given param values. +Uses the current values of the fit coefficients.

+

By default evaluates all bins, but optionally can specify a particular bin (used when fitting).

+
+ +
+
+property serializable_state
+

OrderedDict containing savable state attributes

+
+ +
+ +
+
+pisa.utils.hypersurface.hypersurface.fit_hypersurfaces(nominal_dataset, sys_datasets, params, output_dir, tag, combine_regex=None, log=True, minimum_mc=0, minimum_weight=0, **hypersurface_fit_kw)[source]
+

A helper function that a user can use to fit hypersurfaces to a bunch of simulation +datasets, and save the results to a file. Basically a wrapper of Hypersurface.fit, +handling common pre-fitting tasks like producing mapsets from piplelines, merging +maps from similar specifies, etc.

+

Note that this supports fitting multiple hypersurfaces to the datasets, e.g. one per +simulated species. Returns a dict with format: { map_0_key : map_0_hypersurface, +…, map_N_key : map_N_hypersurface, }

+
+
Parameters:
+
    +
  • nominal_dataset (dict) –

    Definition of the nominal dataset. Specifies the pipleline with which the maps +can be created, and the values of all systematic parameters used to produced the +dataset. +Format must be:

    +
    +
    +
    nominal_dataset = {

    “pipeline_cfg” = <pipeline cfg file (either cfg file path or dict)>), +“sys_params” = { param_0_name : param_0_value_in_dataset, …, param_N_name : param_N_value_in_dataset }

    +
    +
    +

    }

    +
    +

    Sys params must correspond to the provided HypersurfaceParam instances provided +in the params arg.

    +

  • +
  • sys_datasets (list of dicts) – List of dicts, where each dict defines one of the systematics datasets to be +fitted. The format of each dict is the same as explained for nominal_dataset

  • +
  • params (list of HypersurfaceParams) – List of HypersurfaceParams instances that define the hypersurface. Note that +this defined ALL hypersurfaces fitted in this function, e.g. only supports a +single parameterisation for all maps (this is almost almost what you want).

  • +
  • output_dir (str) – Path to directly to write results file in

  • +
  • tag (str) – A string identifier that will be included in the file name to help you make +sense of the file in the future. Note that additional information on the +contents will be added to the file name by this function.

  • +
  • combine_regex (list of str, or None) – List of string regex expressions that will be used for merging maps. Used to +combine similar species. Must be something that can be passed to the +MapSet.combine_re function (see that functions docs for more details). Choose +None is do not want to perform this merging.

  • +
  • minimum_mc (int, optional) – Minimum number of unweighted MC events required in each bin. If the number +of unweighted MC events in a bin in any MC set is less than this number, the +value is set to exactly zero and will be excluded from the fit.

  • +
  • minimum_weight (float, optional) – Minimum weight per bin. Bins with a total summed weight of less than this +number are excluded from the fit. Intended use is to exclude extremely small +values from KDE histograms that would pull the fit to zero.

  • +
  • hypersurface_fit_kw (kwargs) – kwargs will be passed on to the calls to Hypersurface.fit

  • +
+
+
+
+ +
+
+pisa.utils.hypersurface.hypersurface.load_hypersurfaces(input_file, expected_binning=None)[source]
+

User function to load file containing hypersurface fits, as written using fit_hypersurfaces. +Can be multiple hypersurfaces assosicated with different maps.

+

Returns a dict with the format: { map_0_key : map_0_hypersurface, …, map_N_key : map_N_hypersurface, }

+
+
Hnadling the following input files cases:
    +
  1. Load files produced using this code (recommended)

  2. +
  3. Load files producing using older versions of PISA

  4. +
  5. Load public data releases csv formatted files

  6. +
+
+
+
+
Parameters:
+
    +
  • input_file (str) – Path to the file contsaining the hypersurface fits. +For the special case of the datareleases these needs to be the path to all +relevent CSV fles, e.g. “<path/to/datarelease>/hyperplanes_*.csv”.

  • +
  • expected_binning (One/MultiDimBinning) – (Optional) Expected binning for hypersurface. +It will checked enforced that this mathes the binning found in the parsed +hypersurfaces. For certain legacy cases where binning info is not stored, this +will be assumed to be the actual binning.

  • +
+
+
+
+ +
+
+

pisa.utils.hypersurface.hypersurface_plotting module

+

Hypersurface Plotting functions

+
+
+pisa.utils.hypersurface.hypersurface_plotting.plot_bin_fits(ax, hypersurface, bin_idx, param_name, color=None, label=None, hs_label=None, show_nominal=False, show_offaxis=True, show_onaxis=True, show_zero=False, show_uncertainty=True, xlim=None)[source]
+

Plot the hypersurface for a given bin, in 1D w.r.t. to a single specified parameter. +Plots the following:

+
+
    +
  • on-axis data points used in the fit

  • +
  • hypersurface w.r.t to the specified parameter (1D)

  • +
  • nominal value of the specified parameter

  • +
+
+
+
Parameters:
+
    +
  • ax (matplotlib.Axes) – matplotlib ax to draw the plot on

  • +
  • hypersurface (Hypersurface) – Hypersurface to make the plots from

  • +
  • bin_idx (tuple) – Index (numpy array indexing format) of the bin to plot

  • +
  • param_name (str) – Name of the parameter of interest

  • +
  • color (str) – color to use for hypersurface curve

  • +
  • label (str) – label to use for hypersurface curve

  • +
  • show_nominal (bool) – Indicate the nominal value of the param on the plot

  • +
  • show_uncertainty (bool) – Indicate the hypersurface uncertainty on the plot

  • +
  • show_onaxis (bool) – Plot the “on-axis” input datasets (meaning those whose only +off-nominal parameter is the one being plotter).

  • +
  • show_offaxis (bool) – Plot the “off-axis” input datasets (meaning those with multiple +off-nominal parameter values).

  • +
  • xlim (tuple or None) – Optionally, specify the xlim to span when plotting the hypersurface +If not specified, will span all input datasets

  • +
+
+
+
+ +
+
+pisa.utils.hypersurface.hypersurface_plotting.plot_bin_fits_2d(ax, hypersurface, bin_idx, param_names)[source]
+

Plot the hypersurface for a given bin, in 2D w.r.t. to a pair of params +Plots the following:

+
+
    +
  • All data points used in the fit

  • +
  • hypersurface w.r.t to the specified parameters (2D)

  • +
  • nominal value of the specified parameters

  • +
+
+
+
Parameters:
+
    +
  • ax (matplotlib.Axes) – matplotlib ax to draw the plot on

  • +
  • hypersurface (Hypersurface) – Hypersurface to make the plots from

  • +
  • bin_idx (tuple) – Index (numpy array indexing format) of the bin to plot

  • +
  • param_names (list of str) – List containing the names of the two parameters of interest

  • +
+
+
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa.utils.llh_defs.html b/pisa.utils.llh_defs.html new file mode 100644 index 000000000..6cd563061 --- /dev/null +++ b/pisa.utils.llh_defs.html @@ -0,0 +1,140 @@ + + + + + + + pisa.utils.llh_defs package — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pisa.utils.llh_defs package

+
+

Submodules

+
+
+

pisa.utils.llh_defs.poisson module

+
+
+

pisa.utils.llh_defs.poisson_gamma_mixtures module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/pisa/__init__.py b/pisa/__init__.py deleted file mode 100644 index 9e533493e..000000000 --- a/pisa/__init__.py +++ /dev/null @@ -1,301 +0,0 @@ -""" -Define globals available to all modules in PISA -""" - - -from __future__ import absolute_import - -from collections import namedtuple, OrderedDict -import os -import sys -import warnings - -import numba -from numba import jit as numba_jit - -from numpy import ( - array, inf, nan, - float32, float64, - int0, int8, int16, int32, int64, - uint0, uint8, uint16, uint32, uint64, - complex64, complex128 -) -# The alias only exists on Linux x86_64, see -# https://numpy.org/devdocs/reference/arrays.scalars.html#numpy.clongdouble -from numpy import clongdouble as complex256 -import numpy as np -from pint import UnitRegistry - -from ._version import get_versions - - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: pisa.core names are _not_ included here, but possibly should be...? -__all__ = [ - # Versioneer needs this - '__version__', - - # Utilities that must be accessed centrally for consistency - 'ureg', 'Q_', - - # Utilities that should be accessed centrally to avoid hassle - 'numba_jit', - - # Python standard library and Numpy names so that `eval(repr(x)) == x` for - # all types defined in PISA (i.e. passes round trip test) - 'array', 'inf', 'nan', 'namedtuple', 'OrderedDict', - 'float32', 'float64', - 'int0', 'int8', 'int16', 'int32', 'int64', - 'uint0', 'uint8', 'uint16', 'uint32', 'uint64', - 'complex64', 'complex128', 'complex256', - - # Constants - 'NUMBA_CUDA_AVAIL', - 'TARGET', - 'OMP_NUM_THREADS', - 'PISA_NUM_THREADS', - 'FTYPE', - 'CTYPE', - 'ITYPE', - 'HASH_SIGFIGS', - 'EPSILON', - 'C_FTYPE', - 'C_PRECISION_DEF', - 'CACHE_DIR', -] - - -__version__ = get_versions()['version'] -"""PISA version is automatically constructed from versioneer/git info""" - - -ureg = UnitRegistry() # pylint: disable=invalid-name -"""Single Pint unit registry that should be used by all PISA code""" - -Q_ = ureg.Quantity # pylint: disable=invalid-name -"""Shortcut for Quantity that uses central PISA Pint unit regeistry""" - - -# Default value for CACHE_DIR -CACHE_DIR = '~/.cache/pisa' -"""Root directory for storing PISA cache files""" - -# message later on written to stderr for user convenience -ini_msgs = [] # pylint: disable=invalid-name - -# PISA users can define cache directory directly via PISA_CACHE_DIR env var; -# PISA_CACHE_DIR has priority over XDG_CACHE_HOME, so it is checked first -if 'PISA_CACHE_DIR' in os.environ: - CACHE_DIR = os.environ['PISA_CACHE_DIR'] - -# Free Standards Group (freedesktop.org) defines the standard override for -# '~/.cache' to be set by XDG_CACHE_HOME env var; more info at -# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html -elif 'XDG_CACHE_HOME' in os.environ: - CACHE_DIR = os.path.join(os.environ['XDG_CACHE_HOME'], 'pisa') - -CACHE_DIR = os.path.expanduser(os.path.expandvars(CACHE_DIR)) - - -# If `NUMBA_CACHE_DIR` env var is not set and `PISA_CACHE_DIR` is, then use -# `PISA_CACHE_DIR/numba` for caching Numba's compiled objects -if 'NUMBA_CACHE_DIR' not in os.environ: - os.environ['NUMBA_CACHE_DIR'] = os.path.join(CACHE_DIR, 'numba') - - -# Default to single thread, then try to read from env -OMP_NUM_THREADS = 1 -"""Number of threads OpenMP is allocated""" - -if 'OMP_NUM_THREADS' in os.environ: - OMP_NUM_THREADS = int(os.environ['OMP_NUM_THREADS']) - assert OMP_NUM_THREADS >= 1 - -NUMBA_CUDA_AVAIL = False -def dummy_func(x): - """Decorate to to see if Numba actually works""" - x += 1 - -try: - from numba import cuda - assert cuda.gpus, 'No GPUs detected' - cuda.jit('void(float64)')(dummy_func) -except Exception: - pass -else: - NUMBA_CUDA_AVAIL = True -finally: - if 'cuda' in globals() or 'cuda' in locals(): - #if NUMBA_CUDA_AVAIL: - # cuda.close() - del cuda -del dummy_func - -# Default values for float, complex types -FTYPE = np.float64 -"""Global floating-point data type. C, CUDA, and Numba datatype definitions are -derived from this""" - -CTYPE = np.complex128 -"""Global complex-valued floating-point data type. C, CUDA, and Numba datatype -definitions are derived from this""" - -# Set FTYPE from environment variable PISA_FTYPE, if it is defined -FLOAT32_STRINGS = ['single', 'float32', 'fp32', '32', 'f4'] -FLOAT64_STRINGS = ['double', 'float64', 'fp64', '64', 'f8'] -if 'PISA_FTYPE' in os.environ: - PISA_FTYPE = os.environ['PISA_FTYPE'] - #ini_msgs.append('PISA_FTYPE env var is defined as: "%s"' % PISA_FTYPE) - if PISA_FTYPE.strip().lower() in FLOAT32_STRINGS: - FTYPE = np.float32 - CTYPE = np.complex64 - elif PISA_FTYPE.strip().lower() in FLOAT64_STRINGS: - FTYPE = np.float64 - CTYPE = np.complex128 - else: - raise ValueError( - 'Environment var PISA_FTYPE="%s" is unrecognized.\n' - '--> For single precision set PISA_FTYPE to one of %s\n' - '--> For double precision set PISA_FTYPE to one of %s\n' - %(PISA_FTYPE, FLOAT32_STRINGS, FLOAT64_STRINGS) - ) -ITYPE = np.int32 if FTYPE == np.float32 else np.int64 -del FLOAT32_STRINGS, FLOAT64_STRINGS - -# set default target -TARGET = 'cpu' - -cpu_targets = ['cpu', 'numba'] # pylint: disable=invalid-name -parallel_targets = ['parallel', 'multicore'] # pylint: disable=invalid-name -gpu_targets = ['cuda', 'gpu', 'numba-cuda'] # pylint: disable=invalid-name - -# ignore PISA_TARGET env var if no numba support at all available -if TARGET is not None and 'PISA_TARGET' in os.environ: - PISA_TARGET = os.environ['PISA_TARGET'] - ini_msgs.append('PISA_TARGET env var is defined as: "%s"' % PISA_TARGET) - try_target = PISA_TARGET.strip().lower() # pylint: disable=invalid-name - if try_target in gpu_targets: - if NUMBA_CUDA_AVAIL: - TARGET = 'cuda' - else: - raise ValueError( - 'Environment var PISA_TARGET="%s" set, even though numba-cuda' - ' is not available\n'%(PISA_TARGET) - ) - elif try_target in cpu_targets or try_target in parallel_targets: - if try_target in cpu_targets: - TARGET = 'cpu' - elif try_target in parallel_targets: - TARGET = 'parallel' - else: - raise ValueError( - 'Environment var PISA_TARGET="%s" is unrecognized.\n' - '--> For cpu set PISA_TARGET to one of %s\n' - '--> For parallel set PISA_TARGET to one of %s\n' - '--> For gpu set PISA_TARGET to one of %s\n' - %(PISA_TARGET, cpu_targets, parallel_targets, gpu_targets) - ) - del try_target - -del cpu_targets, gpu_targets, parallel_targets - -# Default to single thread, then try to read from env -PISA_NUM_THREADS = 1 -"""Global limit for number of threads""" - -if 'PISA_NUM_THREADS' in os.environ: - PISA_NUM_THREADS = int(os.environ['PISA_NUM_THREADS']) - assert PISA_NUM_THREADS >= 1 - if TARGET == 'cpu' and PISA_NUM_THREADS > 1: - sys.stderr.write("[WARNING] PISA_NUM_THREADS > 1 will be ignored when " - "PISA_TARGET is not `parallel`.\n") - PISA_NUM_THREADS = 1 -elif TARGET == 'parallel': - PISA_NUM_THREADS = numba.config.NUMBA_NUM_THREADS - -if TARGET == 'cpu': - # making sure that we can definitely rely on the fact that the number of threads - # will be 1 if the TARGET is `cpu` (some stages might do that) - assert PISA_NUM_THREADS == 1 - -OMP_NUM_THREADS = min(PISA_NUM_THREADS, OMP_NUM_THREADS) - -# Define HASH_SIGFIGS to set hashing precision based on FTYPE above; value here -# is default (i.e. for FTYPE == np.float64) -HASH_SIGFIGS = 12 -"""Round to this many significant figures for hashing numbers, such that -machine precision doesn't cause effectively equivalent numbers to hash -differently.""" - -if FTYPE == np.float32: - HASH_SIGFIGS = 5 - -EPSILON = 10**(-HASH_SIGFIGS) -"""Best precision considering HASH_SIGFIGS (which is chosen kinda ad-hoc but -based on by FTYPE)""" - - -# Derive #define consts for dynamically-compiled C (and also C++ and CUDA) code -# to use. -# -# To use these in code, put in the C/C++/CUDA the following at the TOP of your -# code: -# -# from pisa import FTYPE, C_FTYPE, C_PRECISION_DEF -# -# ... -# -# dynamic_source_code = ''' -# #define fType %(C_FTYPE)s -# #define %(C_PRECISION_DEF)s -# -# ... -# -# ''' % dict(C_FTYPE=C_FTYPE, C_PRECISION_DEF=C_PRECISION_DEF) -# -if FTYPE == np.float32: - C_FTYPE = 'float' - C_PRECISION_DEF = 'SINGLE_PRECISION' - ftype_msg = 'PISA is running in single precision (FP32) mode' # pylint: disable=invalid-name -elif FTYPE == np.float64: - C_FTYPE = 'double' - C_PRECISION_DEF = 'DOUBLE_PRECISION' - ftype_msg = 'PISA is running in double precision (FP64) mode' # pylint: disable=invalid-name -else: - raise ValueError('FTYPE must be one of `np.float32` or `np.float64`. Got' - ' %s instead.' %FTYPE) -ini_msgs.append(ftype_msg) -del ftype_msg - -if TARGET is None: - target_msg = 'numba is not present' # pylint: disable=invalid-name -elif TARGET == 'cpu': - target_msg = 'numba is running on CPU (single core)' # pylint: disable=invalid-name -elif TARGET == 'parallel': - target_msg = f'numba is running on CPU (multicore) with {PISA_NUM_THREADS} cores' # pylint: disable=invalid-name -elif TARGET == 'cuda': - target_msg = 'numba is running on GPU' # pylint: disable=invalid-name -ini_msgs.append(target_msg) -del target_msg - -sys.stderr.write("<< "+"; ".join(ini_msgs)+" >>\n") -del ini_msgs - -# Clean up imported names -del os, sys, np, UnitRegistry, get_versions diff --git a/pisa/_version.py b/pisa/_version.py deleted file mode 100644 index a9fb432cc..000000000 --- a/pisa/_version.py +++ /dev/null @@ -1,484 +0,0 @@ - -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.16 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - keywords = {"refnames": git_refnames, "full": git_full} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440" - cfg.tag_prefix = "" - cfg.parentdir_prefix = "pisa-[versioneer]" - cfg.versionfile_source = "pisa/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - return None - return stdout - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes - both the project name and a version string. - """ - dirname = os.path.basename(root) - if not dirname.startswith(parentdir_prefix): - if verbose: - print("guessing rootdir is '%s', but '%s' doesn't start with " - "prefix '%s'" % (root, dirname, parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None} - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs-tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags"} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - if not os.path.exists(os.path.join(root, ".git")): - if verbose: - print("no .git in %s" % root) - raise NotThisMethod("no .git directory") - - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"]} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None} - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree"} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version"} diff --git a/pisa/analysis/README.md b/pisa/analysis/README.md deleted file mode 100644 index 804bee6de..000000000 --- a/pisa/analysis/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# pisa.analysis - -Primary tools for performing analyses in PISA. - -recent changes in `analysis.py` see https://nbviewer.jupyter.org/urls/seafile.rlp.net/f/c156d1fc084f4bd8af63//%3Fdl%3D1 diff --git a/pisa/analysis/analysis.py b/pisa/analysis/analysis.py deleted file mode 100644 index 30637c2de..000000000 --- a/pisa/analysis/analysis.py +++ /dev/null @@ -1,3574 +0,0 @@ -""" -Common tools for performing an analysis collected into a single class -`Analysis` that can be subclassed by specific analyses. -""" - - -from collections.abc import Sequence, Mapping -from collections import OrderedDict -from copy import deepcopy -from operator import setitem -from itertools import product -import re -import sys -import time -import warnings - -import numpy as np -import scipy.optimize as optimize -# this is needed for the take_step option in basinhopping -from scipy._lib._util import check_random_state -from iminuit import Minuit -import nlopt - -import pisa -from pisa import EPSILON, FTYPE, ureg -from pisa.core.map import Map, MapSet -from pisa.core.param import ParamSet, Param -from pisa.core.pipeline import Pipeline -from pisa.utils.comparisons import recursiveEquality, FTYPE_PREC, ALLCLOSE_KW -from pisa.utils.log import logging, set_verbosity -from pisa.utils.fileio import to_file -from pisa.utils.stats import (METRICS_TO_MAXIMIZE, METRICS_TO_MINIMIZE, - LLH_METRICS, CHI2_METRICS, weighted_chi2, - it_got_better, is_metric_to_maximize) - -__all__ = ['MINIMIZERS_USING_SYMM_GRAD', 'MINIMIZERS_USING_CONSTRAINTS', - 'set_minimizer_defaults', 'validate_minimizer_settings', - 'Counter', 'Analysis', 'BasicAnalysis'] - -__author__ = 'J.L. Lanfranchi, P. Eller, S. Wren, E. Bourbeau, A. Trettin' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -MINIMIZERS_USING_SYMM_GRAD = ('l-bfgs-b', 'slsqp') -"""Minimizers that use symmetrical steps on either side of a point to compute -gradients. See https://github.com/scipy/scipy/issues/4916""" - -MINIMIZERS_USING_CONSTRAINTS = ('cobyla') -"""Minimizers that cannot use the 'bounds' argument and instead need bounds to -be formulated in terms of constraints.""" - -def merge_mapsets_together(mapset_list=None): - '''Handle merging of multiple MapSets, when they come in - the shape of a dict - - ''' - - if isinstance(mapset_list[0], Mapping): - new_dict = OrderedDict() - for S in mapset_list: - for k,v in S.items(): - - if k not in new_dict.keys(): - new_dict[k] = [m for m in v.maps] - else: - new_dict[k] += [m for m in v.maps] - - for k,v in new_dict.items(): - new_dict[k] = MapSet(v) - - else: - raise TypeError('This function only works when mapsets are provided as dicts') - - return new_dict - - -# TODO: add Nelder-Mead, as it was used previously... -def set_minimizer_defaults(minimizer_settings): - """Fill in default values for minimizer settings. - - Parameters - ---------- - minimizer_settings : dict - - Returns - ------- - new_minimizer_settings : dict - - """ - new_minimizer_settings = dict( - method=dict(value='', desc=''), - options=dict(value=dict(), desc=dict()) - ) - new_minimizer_settings.update(minimizer_settings) - - sqrt_ftype_eps = np.sqrt(np.finfo(FTYPE).eps) - opt_defaults = {} - method = minimizer_settings['method']['value'].lower() - - if method == 'l-bfgs-b' and FTYPE == np.float64: - # From `scipy.optimize.lbfgsb._minimize_lbfgsb` - opt_defaults.update(dict( - maxcor=10, ftol=2.2204460492503131e-09, gtol=1e-5, eps=1e-8, - maxfun=15000, maxiter=15000, iprint=-1, maxls=20 - )) - elif method == 'l-bfgs-b' and FTYPE == np.float32: - # Adapted to lower precision - opt_defaults.update(dict( - maxcor=10, ftol=sqrt_ftype_eps, gtol=1e-3, eps=1e-5, - maxfun=15000, maxiter=15000, iprint=-1, maxls=20 - )) - elif method == 'slsqp' and FTYPE == np.float64: - opt_defaults.update(dict( - maxiter=100, ftol=1e-6, iprint=0, eps=sqrt_ftype_eps, - )) - elif method == 'slsqp' and FTYPE == np.float32: - opt_defaults.update(dict( - maxiter=100, ftol=1e-4, iprint=0, eps=sqrt_ftype_eps - )) - elif method == 'cobyla': - opt_defaults.update(dict( - rhobeg=0.1, maxiter=1000, tol=1e-4, - )) - else: - raise ValueError('Unhandled minimizer "%s" / FTYPE=%s' - % (method, FTYPE)) - - opt_defaults.update(new_minimizer_settings['options']['value']) - - new_minimizer_settings['options']['value'] = opt_defaults - - # Populate the descriptions with something - for opt_name in new_minimizer_settings['options']['value']: - if opt_name not in new_minimizer_settings['options']['desc']: - new_minimizer_settings['options']['desc'] = 'no desc' - - return new_minimizer_settings - - -# TODO: add Nelder-Mead, as it was used previously... -def validate_minimizer_settings(minimizer_settings): - """Validate minimizer settings. - - See source for specific thresholds set. - - Parameters - ---------- - minimizer_settings : dict - - Raises - ------ - ValueError - If any minimizer settings are deemed to be invalid. - - """ - ftype_eps = np.finfo(FTYPE).eps - method = minimizer_settings['method']['value'].lower() - options = minimizer_settings['options']['value'] - if method == 'l-bfgs-b': - must_have = ('maxcor', 'ftol', 'gtol', 'eps', 'maxfun', 'maxiter', - 'maxls') - may_have = must_have + ('args', 'jac', 'bounds', 'disp', 'iprint', - 'callback') - elif method == 'slsqp': - must_have = ('maxiter', 'ftol', 'eps') - may_have = must_have + ('args', 'jac', 'bounds', 'constraints', - 'iprint', 'disp', 'callback') - elif method == 'cobyla': - must_have = ('maxiter', 'rhobeg', 'tol') - may_have = must_have + ('disp', 'catol') - - missing = set(must_have).difference(set(options)) - excess = set(options).difference(set(may_have)) - if missing: - raise ValueError('Missing the following options for %s minimizer: %s' - % (method, missing)) - if excess: - raise ValueError('Excess options for %s minimizer: %s' - % (method, excess)) - - eps_msg = '%s minimizer option %s(=%e) is < %d * %s_EPS(=%e)' - eps_gt_msg = '%s minimizer option %s(=%e) is > %e' - fp64_eps = np.finfo(np.float64).eps - - if method == 'l-bfgs-b': - err_lim, warn_lim = 2, 10 - for s in ['ftol', 'gtol']: - val = options[s] - if val < err_lim * ftype_eps: - raise ValueError(eps_msg % (method, s, val, err_lim, 'FTYPE', - ftype_eps)) - if val < warn_lim * ftype_eps: - logging.warning(eps_msg, method, s, val, warn_lim, 'FTYPE', ftype_eps) - - val = options['eps'] - err_lim, warn_lim = 1, 10 - if val < err_lim * fp64_eps: - raise ValueError(eps_msg % (method, 'eps', val, err_lim, 'FP64', - fp64_eps)) - if val < warn_lim * ftype_eps: - logging.warning(eps_msg, method, 'eps', val, warn_lim, 'FTYPE', ftype_eps) - - err_lim, warn_lim = 0.25, 0.1 - if val > err_lim: - raise ValueError(eps_gt_msg % (method, 'eps', val, err_lim)) - if val > warn_lim: - logging.warning(eps_gt_msg, method, 'eps', val, warn_lim) - - if method == 'slsqp': - err_lim, warn_lim = 2, 10 - val = options['ftol'] - if val < err_lim * ftype_eps: - raise ValueError(eps_msg % (method, 'ftol', val, err_lim, 'FTYPE', - ftype_eps)) - if val < warn_lim * ftype_eps: - logging.warning(eps_msg, method, 'ftol', val, warn_lim, 'FTYPE', ftype_eps) - - val = options['eps'] - err_lim, warn_lim = 1, 10 - if val < err_lim * fp64_eps: - raise ValueError(eps_msg % (method, 'eps', val, 1, 'FP64', - fp64_eps)) - if val < warn_lim * ftype_eps: - logging.warning(eps_msg, method, 'eps', val, warn_lim, 'FP64', fp64_eps) - - err_lim, warn_lim = 0.25, 0.1 - if val > err_lim: - raise ValueError(eps_gt_msg % (method, 'eps', val, err_lim)) - if val > warn_lim: - logging.warning(eps_gt_msg, method, 'eps', val, warn_lim) - - if method == 'cobyla': - if options['rhobeg'] > 0.5: - raise ValueError('starting step-size > 0.5 will overstep boundary') - if options['rhobeg'] < 1e-2: - logging.warning('starting step-size is very low, convergence will be slow') - - - -def get_separate_octant_params( - hypo_maker, angle_name, inflection_point, tolerance=None -): - ''' - This function creates versions of the angle param that are confined to - a single octant. It does this for both octant cases. This is used to allow - fits to be done where only one of the octants is allowed. The fit can then - be done for the two octant cases and compared to find the best fit. - - Parameters - ---------- - hypo_maker : DistributionMaker or Detector - The hypothesis maker being used by the fitter - angle_name : string - Name of the angle for which to create separate octant params. - inflection_point : quantity - Point distinguishing between the two octants, e.g. 45 degrees - tolerance : quantity - If the starting value is closer to the inflection point than the value of the - tolerance, it is offset away from the inflection point by this amount. - - Returns - ------- - angle_orig : Param - angle param as it was before applying the octant separation - angle_case1 : Param - angle param confined to first octant - angle_case2 : Param - angle param confined to second octant - ''' - - # Reset angle before starting - angle = hypo_maker.params[angle_name] - angle.reset() - - # Store the original theta23 param before we mess with it - # WARNING: Do not copy here, you want the original object (since this relates to the underlying - # ParamSelector from which theta23 is extracted). Otherwise end up with an incosistent state - # later (e.g. after a new call to ParamSelector.select_params, this copied, and potentially - # modified param will be overwtiten by the original). - angle_orig = angle - - # Get the octant definition - octants = ( - (angle.range[0], inflection_point) , - (inflection_point, angle.range[1]) - ) - - # If angle is maximal (e.g. the transition between octants) or very close - # to it, offset it slightly to be clearly in one octant (note that fit can - # still move the value back to maximal). The reason for this is that - # otherwise checks on the parameter bounds (which include a margin for - # minimizer tolerance) can an throw exception. - if tolerance is None: - tolerance = 0.1 * ureg.degree - dist_from_inflection = angle.value - inflection_point - if np.abs(dist_from_inflection) < tolerance : - sign = -1. if dist_from_inflection < 0. else +1. # Note this creates +ve shift also for theta == 45 (arbitary) - angle.value = inflection_point + (sign * tolerance) - - # Store the cases - angle_case1 = deepcopy(angle) - angle_case2 = deepcopy(angle) - - # Get case 1, e.g. the current octant - case1_octant_index = 0 if angle_case1.value < inflection_point else 1 - angle_case1.range = octants[case1_octant_index] - angle_case1.nominal_value = angle_case1.value - - # Also get case 2, e.g. the other octant - case2_octant_index = 0 if case1_octant_index == 1 else 1 - angle_case2.value = 2*inflection_point - angle_case2.value - # Also setting nominal value so that `reset_free` won't try to set it out of bounds - angle_case2.nominal_value = angle_case2.value - angle_case2.range = octants[case2_octant_index] - - return angle_orig, angle_case1, angle_case2 - -def update_param_values( - hypo_maker, - params, - update_nominal_values=False, - update_range=False, - update_is_fixed=False -): - """ - Update just the values of parameters of a DistributionMaker *without* replacing - the memory references inside. - - This should be used in place of `hypo_maker.update_params(params)` unless one - explicitly wants to replace the memory references to which the parameters in - the DistributionMaker are pointing. - """ - - # it is possible that only a single param is given - if isinstance(params, Param): - params = [params] - - if isinstance(hypo_maker, Pipeline): - hypo_maker = [hypo_maker] - - for p in params: - for pipeline in hypo_maker: - if p.name not in pipeline.params.names: continue - # it is crucial that we update the range first because the value - # of the parameter in params might lie outside the range of those in - # hypo_maker. - if update_range: - pipeline.params[p.name].range = p.range - pipeline.params[p.name].value = p.value - if update_nominal_values: - pipeline.params[p.name].nominal_value = p.nominal_value - if update_is_fixed: - pipeline.params[p.name].is_fixed = p.is_fixed - -def update_param_values_detector( - hypo_maker, - params, - update_nominal_values=False, - update_range=False, - update_is_fixed=False -): - """ - Modification of the update_param_values function to use with the Detectors class. - """ - assert hypo_maker.__class__.__name__ == "Detectors", "hypo_maker is not Detectors class" - - if isinstance(params, Param): params = ParamSet(params) - - for distribution_maker in hypo_maker: - ps = deepcopy(params) - for p in ps.names: - if distribution_maker.detector_name in p: - p_name = p.replace('_'+distribution_maker.detector_name, "") - if p_name in ps.names: - ps.remove(p_name) - ps[p].name = p_name - update_param_values(distribution_maker, ps, - update_nominal_values, update_range, update_is_fixed) - hypo_maker.init_params() - -# TODO: move this to a central location prob. in utils -class Counter(object): - """Simple counter object for use as a minimizer callback.""" - def __init__(self, i=0): - self._count = i - - def __str__(self): - return str(self._count) - - def __repr__(self): - return str(self) - - def __iadd__(self, inc): - self._count += inc - - def reset(self): - """Reset counter""" - self._count = 0 - - @property - def count(self): - """int : Current count""" - return self._count - -class BoundedRandomDisplacement(object): - """ - Add a bounded random displacement of maximum size `stepsize` to each coordinate - Calling this updates `x` in-place. - - Parameters - ---------- - stepsize : float, optional - Maximum stepsize in any dimension - bounds : pair of float or sequence of pairs of float - Bounds on x - random_gen : {None, `np.random.RandomState`, `np.random.Generator`} - The random number generator that generates the displacements - """ - def __init__(self, stepsize=0.5, bounds=(0, 1), random_gen=None): - self.stepsize = stepsize - self.random_gen = check_random_state(random_gen) - self.bounds = np.array(bounds).T - - def __call__(self, x): - x += self.random_gen.uniform(-self.stepsize, self.stepsize, - np.shape(x)) - x = np.clip(x, *self.bounds) # bounds are automatically broadcast - return x - -class HypoFitResult(object): - """Holds all relevant information about a fit result.""" - - - _state_attrs = ["metric", "metric_val", "params", "param_selections", - "hypo_asimov_dist", "detailed_metric_info", "minimizer_time", - "num_distributions_generated", "minimizer_metadata", "fit_history"] - - # TODO: initialize from serialized state - def __init__( - self, - metric=None, - metric_val=None, - data_dist=None, - hypo_maker=None, - minimizer_time=None, - num_distributions_generated=None, - minimizer_metadata=None, - fit_history=None, - other_metrics=None, - counter=None, - include_detailed_metric_info=False, - ): - self.metric = metric - self.metric_val = metric_val - # deepcopy done in setter function - self.params = None - self.hypo_asimov_dist = None - if hypo_maker is not None: - self.params = hypo_maker.params - self.param_selections = hypo_maker.param_selections - # Record the distribution with the optimal param values - self.hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - self.detailed_metric_info = None - if minimizer_time is not None: - self.minimizer_time = minimizer_time * ureg.sec - self.num_distributions_generated = num_distributions_generated - self.minimizer_metadata = minimizer_metadata - self.fit_history = fit_history - - if include_detailed_metric_info: - msg = "missing input to calculate detailed metric info" - assert hypo_maker is not None, msg - assert data_dist is not None, msg - assert metric is not None, msg - if hypo_maker.__class__.__name__ == "Detectors": - # this passes through the setter method, but it should just pass through - # without actually doing anything - self.detailed_metric_info = [self.get_detailed_metric_info( - data_dist=data_dist[i], hypo_asimov_dist=self.hypo_asimov_dist[i], - params=hypo_maker.distribution_makers[i].params, metric=metric[i], - other_metrics=other_metrics, detector_name=hypo_maker.det_names[i], hypo_maker=hypo_maker - ) for i in range(len(data_dist))] - else: # DistributionMaker object - if 'generalized_poisson_llh' == metric[0]: - generalized_poisson_dist = hypo_maker.get_outputs(return_sum=False, force_standard_output=False) - generalized_poisson_dist = merge_mapsets_together(mapset_list=generalized_poisson_dist) - else: - generalized_poisson_dist = None - - self.detailed_metric_info = self.get_detailed_metric_info( - data_dist=data_dist, hypo_asimov_dist=self.hypo_asimov_dist, generalized_poisson_hypo=generalized_poisson_dist, - params=hypo_maker.params, metric=metric[0], other_metrics=other_metrics, - detector_name=hypo_maker.detector_name, hypo_maker=hypo_maker - ) - - def __getitem__(self, i): - if i in self._state_attrs: - return getattr(self, i) - else: - raise ValueError(f"Unknown property {i}") - - def _rehash(self): - self._param_hash = self._params.hash - - @property - def params(self): - if self._params is None: - return None - # Safety feature: Because we pass this object as a record of the best fit - # through several function, we need to make sure the parameters are not - # corrupted on the way. - if self._params.hash != self._param_hash: - raise RuntimeError("The parameter hash doesn't match, parameters might have" - " been changed accidentally. This can happen if the parameters from" - " this object have been used to update the params inside a" - " DistributionMaker. Do not access private _params unless you are " - " certain that you want to change the parameters and then _rehash.") - # We MUST ensure that we don't hand out references to the internal params here - # because they could otherwise be manipulated inadvertently. - return deepcopy(self._params) - - @params.setter - def params(self, newpars): - if newpars is None: - self._params = None - self._param_hash = None - return - elif isinstance(newpars, list): - # Comparing to `list`, not `Sequence`, because if `newpars` are a `ParamSet` - # the test for membership of `Sequence` would return `True`. - self._params = ParamSet(newpars) - else: - # The constructor of ParamSet is *not* a copy-constructor! The parameters - # making up the ParamSet are instead taken over by reference only. This is - # why we must use `deepcopy` here and can't just use ParamSet(newpars) for - # everything. - self._params = deepcopy(newpars) - self._rehash() - - @property - def detailed_metric_info(self): - return self._detailed_metric_info - - @detailed_metric_info.setter - def detailed_metric_info(self, new_info): - if new_info is None: - self._detailed_metric_info = None - elif isinstance(new_info, list): - self._detailed_metric_info = [ - self.deserialize_detailed_metric_info(i) for i in new_info - ] - else: - self._detailed_metric_info = self.deserialize_detailed_metric_info(new_info) - - @property - def hypo_asimov_dist(self): - return self._hypo_asimov_dist - - @hypo_asimov_dist.setter - def hypo_asimov_dist(self, new_had): - if isinstance(new_had, MapSet) or new_had is None: - self._hypo_asimov_dist = new_had - elif isinstance(new_had, Mapping): - # instantiating from serializable state - self._hypo_asimov_dist = MapSet(**new_had) - elif isinstance(new_had, list) and all(isinstance(item, MapSet) for item in new_had): - # for detector class output - self._hypo_asimov_dist = new_had - else: - raise ValueError("invalid format for hypo_asimov_dist") - - @property - def state(self): - state = OrderedDict() - for attr in self._state_attrs: - val = getattr(self, attr) - if hasattr(val, 'state'): - val = val.state - setitem(state, attr, val) - return state - - @property - def serializable_state(self): - return self.state - - @classmethod - def from_state(cls, state): - assert set(state.keys()) == set(cls._state_attrs), "ill-formed state dict" - new_obj = cls() - for attr in cls._state_attrs: - setattr(new_obj, attr, state[attr]) - return new_obj - - @staticmethod - def get_detailed_metric_info(data_dist, hypo_maker, hypo_asimov_dist, params, metric, - generalized_poisson_hypo=None, other_metrics=None, detector_name=None): - """Get detailed fit information, including e.g. maps that yielded the - metric. - - Parameters - ---------- - data_dist - hypo_asimov_dist - params - metric - other_metrics - - Returns - ------- - detailed_metric_info : OrderedDict - - """ - if other_metrics is None: - other_metrics = [] - elif isinstance(other_metrics, str): - other_metrics = [other_metrics] - all_metrics = sorted(set([metric] + other_metrics)) - detailed_metric_info = OrderedDict() - if detector_name is not None: - detailed_metric_info['detector_name'] = detector_name - for m in all_metrics: - name_vals_d = OrderedDict() - - # if the metric is not generalized poisson, but the distribution is a dict, - # retrieve the 'weights' mapset from the distribution output - if m == 'generalized_poisson_llh': - name_vals_d['maps'] = data_dist.maps[0].generalized_poisson_llh(expected_values=generalized_poisson_hypo) - llh_binned = data_dist.maps[0].generalized_poisson_llh(expected_values=generalized_poisson_hypo, binned=True) - map_binned = Map(name=metric, - hist=np.reshape(llh_binned, data_dist.maps[0].shape), - binning=data_dist.maps[0].binning - ) - name_vals_d['maps_binned'] = MapSet(map_binned) - name_vals_d['priors'] = params.priors_penalties(metric=metric) - detailed_metric_info[m] = name_vals_d - - else: - if isinstance(hypo_asimov_dist, OrderedDict): - hypo_asimov_dist = hypo_asimov_dist['weights'] - - if m == 'weighted_chi2': - actual_values = data_dist.hist['total'] - expected_values = hypo_asimov_dist.hist['total'] - d = {'output_binning': hypo_maker.pipelines[0].output_binning, - 'output_key': 'bin_unc2'} - bin_unc2 = hypo_maker.get_outputs(return_sum=True, **d).hist['total'] - metric_hists = weighted_chi2(actual_values, expected_values, bin_unc2) - name_vals_d['maps'] = OrderedDict(total=np.sum(metric_hists)) - metric_hists = OrderedDict(total=metric_hists) - else: - name_vals_d['maps'] = data_dist.metric_per_map( - expected_values=hypo_asimov_dist, metric=m - ) - metric_hists = data_dist.metric_per_map( - expected_values=hypo_asimov_dist, metric='binned_'+m - ) - - maps_binned = [] - for asimov_map, metric_hist in zip(hypo_asimov_dist, metric_hists): - map_binned = Map( - name=asimov_map.name, - hist=np.reshape(metric_hists[metric_hist], - asimov_map.shape), - binning=asimov_map.binning - ) - maps_binned.append(map_binned) - name_vals_d['maps_binned'] = MapSet(maps_binned) - name_vals_d['priors'] = params.priors_penalties(metric=metric) - detailed_metric_info[m] = name_vals_d - return detailed_metric_info - - @staticmethod - def deserialize_detailed_metric_info(info_dict): - """Re-instantiate all PISA objects that used to be in the dictionary.""" - - detailed_metric_info = OrderedDict() - if "detector_name" in info_dict.keys(): - detailed_metric_info['detector_name'] = info_dict["detector_name"] - all_metrics = sorted(set(info_dict.keys()) - {"detector_name"}) - for m in all_metrics: - name_vals_d = OrderedDict() - name_vals_d['maps'] = info_dict[m]["maps"] - if isinstance(info_dict[m]["maps_binned"], MapSet): - # If this has already been deserialized or never serialized in the - # first place, just pass through. - name_vals_d["maps_binned"] = info_dict[m]["maps_binned"] - else: - # Deserialize if necessary - name_vals_d['maps_binned'] = MapSet(**info_dict[m]["maps_binned"]) - name_vals_d['priors'] = info_dict[m]["priors"] - detailed_metric_info[m] = name_vals_d - return detailed_metric_info - - -class BasicAnalysis(object): - """A bare-bones analysis that only fits a hypothesis to data. - - Full analyses with functionality beyond just fitting (doing scans, for example) - should sub-class this class. - - Every fit is run with the `fit_recursively` method, where the fit strategy is - defined by the three arguments `method`, `method_kwargs` and - `local_fit_kwargs` (see documentation of :py:meth:`fit_recursively` below for - other arguments.) The `method` argument determines which sub-routine should be - run, `method_kwargs` is a dictionary with any keyword arguments of that - sub-routine, and `local_fit_kwargs` is a dictionary (or list thereof) defining any - nested sub-routines that are run within the outer sub-routine. A sub-sub-routine - defined in `local_fit_kwargs` should again be a dictionary with the three keywords - `method`, `method_kwargs` and `local_fit_kwargs`. In this way, sub-routines - can be arbitrarily stacked to define complex fit strategies. - - Examples - -------- - - A canonical standard oscillation fit fits octants in `theta23` separately and then - runs a scipy minimizer to optimize locally in each octant. The arguments that would - produce that result when passed to `fit_recursively` are: - :: - method = "octants" - method_kwargs = { - "angle": "theta23" - "inflection_point": 45 * ureg.deg - } - local_fit_kwargs = { - "method": "scipy", - "method_kwargs": minimizer_settings, - "local_fit_kwargs": None - } - - Let's say we also have a CP violating phase `deltacp24` that we want to fit - separately per quadrant split at 90 degrees. We want this done within each - quadrant fit for `theta23`, making 4 fits in total. Then we would nest the - quadrant fit for `deltacp24` inside the octant fit like so: - :: - method = "octants" - method_kwargs = { - "angle": "theta23" - "inflection_point": 45 * ureg.deg - } - local_fit_kwargs = { - "method": "octants", - "method_kwargs": { - "angle": "deltacp24", - "inflection_point": 90 * ureg.deg, - } - "local_fit_kwargs": { - "method": "scipy", - "method_kwargs": minimizer_settings, - "local_fit_kwargs": None - } - } - - Let's suppose we want to apply a grid-scan global fit method to sterile mixing - parameters `theta24` and `deltam41`, but we want to marginalize over all other - parameters with a usual 3-flavor fit configuration. That could be achieved as - follows: - :: - method = "grid_scan" - method_kwargs = { - "grid": { - "theta24": np.geomspace(1, 20, 3) * ureg.deg, - "deltam41": np.geomspace(0.01, 0.5, 4) * ureg["eV^2"], - }, - "fix_grid_params": False, - } - local_fit_kwargs = { - "method": "octants", - "method_kwargs": { - "angle": "theta23", - "inflection_point": 45 * ureg.deg, - } - "local_fit_kwargs": { - "method": "scipy", - "method_kwargs": minimizer_settings, - "local_fit_kwargs": None - } - } - - Instead of `scipy`, we can also use `iminuit` and `nlopt` for local minimization or - global searches by writing a dictionary with ``"method": "iminuit"`` or ``"method": - "nlopt"``, respectively. - - **NLOPT Options** - - NLOPT can be dropped in place of `scipy` and `iminuit` by writing a dictionary with - ``"method": "nlopt"`` and choosing the algorithm by its name of the form - ``NLOPT_{G,L}{N}_XXXX``. PISA supports all of the derivative-free global - (https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#global-optimization) and - local - (https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/#local-derivative-free-optimization) - algorithms. Algorithms requiring gradients such as BFGS are not supported. To use - the Nelder-Mead algorithm, for example, the following settings could be used: - :: - nlopt_settings = { - "method": "nlopt", - "method_kwargs": { - "algorithm": "NLOPT_LN_NELDERMEAD", - "ftol_abs": 1e-5, - "ftol_rel": 1e-5, - # other options that can be set here: - # xtol_abs, xtol_rel, stopval, maxeval, maxtime - # after maxtime seconds, stop and return best result so far - "maxtime": 60 - }, - "local_fit_kwargs": None # no further nesting available - } - - and then run the fit with - :: - best_fit_info = ana.fit_recursively( - data_dist, - dm, - "chi2", - None, - **nlopt_settings - ) - - . Of course, you can also nest the `nlopt_settings` dictionary in any of the - `octants`, `ranges` and so on by passing it as `local_fit_kwargs`. - - *Adding constraints* - - Adding inequality constraints to algorithms that support it is possible by writing a - lambda function in a string that expects to get the current parameters as a - `ParamSet` and returns a float. The result will satisfy that the passed function - stays `negative` (to be consistent with scipy). The string will be passed to - `eval` to build the callable function. For example, a silly way to bound - `delta_index` > 0.1 would be: - :: - "method_kwargs": { - "algorithm": "NLOPT_LN_COBYLA", - "ftol_abs": 1e-5, - "ftol_rel": 1e-5, - "maxtime": 30, - "ineq_constraints": [ - # be sure to convert parameters to their magnitude - "lambda params: params.delta_index.m - 0.1" - ] - } - - Adding inequality constraints to algorithms that don't support it can be done by - either nesting the local fit in the `constrained_fit` method or to use NLOPT's - AUGLAG method that adds a penalty for constraint violations internally. For example, - we could do this to fulfill the same constraint with the PRAXIS algorithm: - :: - "method_kwargs": { - "algorithm": "NLOPT_AUGLAG", - "ineq_constraints":[ - "lambda params: params.delta_index.m - 0.1" - ], - "local_optimizer": { - # supports all the same options as above - "algorithm": "NLOPT_LN_PRAXIS", - "ftol_abs": 1e-5, - "ftol_rel": 1e-5, - } - } - - *Using global searches with local subsidiary minimizers* - - Some global searches, like evolutionary strategies, use local subsidiary minimizers. - These can be defined just as above by passing a dictionary with the settings to the - `local_optimizer` keyword. Note that, again, only gradient-free methods are - supported. Here is an example for the "Multi-Level single linkage" (MLSL) algorithm, - using PRAXIS as the local optimizer: - :: - "method_kwargs": { - "algorithm": "NLOPT_G_MLSL_LDS", - "local_optimizer": { - "algorithm": "NLOPT_LN_PRAXIS", - "ftol_abs": 1e-5, - "ftol_rel": 1e-5, - } - } - For some evolutionary strategies such as ISRES, the `population` option can also - be set. - :: - "method_kwargs": { - "algorithm": "NLOPT_GN_ISRES", - "population": 100, - } - - **Custom fitting methods** - - Custom fitting methods are added by subclassing the analysis. The fit function - name has to follow the scheme `_fit_{method}` where `method` is the name of the - fit method. For instance, the function for `scipy` is called `_fit_scipy` and can - be called by setting `"method": "scipy"` in the fit strategy dict. - - The function has to accept the parameters `data_dist`, `hypo_maker`, `metric`, - `external_priors_penalty`, `method_kwargs`, and `local_fit_kwargs`. See docstring - of `fit_recursively` for descriptions of these arguments. The return value - of the function must be a `HypoFitResult` object. As an example, the following - sub-class of the BasicAnalysis has a custom fit method that, nonsensically, - always sets 42 degrees as the starting value for theta23: - :: - class SubclassedAnalysis(BasicAnalysis): - - def _fit_nonsense( - self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs - ): - logging.info("Starting nonsense fit (setting theta23 to 42 deg)...") - - for pipeline in hypo_maker: - if "theta23" in pipeline.params.free.names: - pipeline.params.theta23.value = 42 * ureg["deg"] - - best_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - return best_fit_info - - Now, the `nonsense` fit method can be used and nested with any other fit method - like so: - :: - ana = SubclassedAnalysis() - local_minuit = OrderedDict( - method="iminuit", - method_kwargs={ - "tol": 10, - }, - local_fit_kwargs=None - ) - - local_nonsense_minuit = OrderedDict( - method="nonsense", - method_kwargs=None, - local_fit_kwargs=local_minuit - ) - - fit_result = ana.fit_recursively( - data_dist, - distribution_maker, - "chi2", - None, - **local_nonsense_minuit - ) - """ - - def __init__(self): - self._nit = 0 - self.pprint = True - self.blindness = False - - # TODO: Defer sub-fits to cluster - def fit_recursively( - self, data_dist, hypo_maker, metric, external_priors_penalty, - method, method_kwargs=None, local_fit_kwargs=None - ): - """Recursively apply global search strategies with local sub-fits. - - Parameters - ---------- - - data_dist : Sequence of MapSets or MapSet - Data distribution to be fit. Can be an actual-, Asimov-, or pseudo-data - distribution (where the latter two are derived from simulation and so aren't - technically "data"). - - hypo_maker : Detectors or DistributionMaker - Creates the per-bin expectation values per map based on its param values. - Free params in the `hypo_maker` are modified by the minimizer to achieve a - "best" fit. - - metric : string or iterable of strings - Metric by which to evaluate the fit. See documentation of Map. - - external_priors_penalty : func - User defined prior penalty function, which takes `hypo_maker` and - `metric` as arguments and returns numerical value of penalty to the metric - value. It is expected sign of the penalty is correctly specified inside the - `external_priors_penalty` (e.g. negative for llh or positive for chi2). - - method : str - Name of the sub-routine to be run. Currently, the options are `scipy`, - `octants`, `best_of`, `grid_scan`, `constrained`, - `ranges`, `condition`, `iminuit`, and `nlopt`. - - method_kwargs : dict - Any keyword arguments taken by the sub-routine. May be `None` if the - sub-routine takes no additional arguments. - - local_fit_kwargs : dict or list thereof - A dictionary defining subsidiary sub-routines with the keywords `method`, - `method_kwargs` and `local_fit_kwargs`. May be `None` if the - sub-routine is itself a local or global fit that runs no further subsidiary - fits. - - """ - - if isinstance(metric, str): - metric = [metric] - - # Before starting any fit, check if we already have a perfect match between data and template - # This can happen if using pseudodata that was generated with the nominal values for parameters - # (which will also be the initial values in the fit) and blah... - # If this is the case, don't both to fit and return results right away. - - if isinstance(metric, str): - metric = [metric] - - # Grab the hypo map - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - - if isinstance(metric, str): - metric = [metric] - # Check number of used metrics - if hypo_maker.__class__.__name__ == "Detectors": - if len(metric) == 1: # One metric for all detectors - metric = list(metric) * len(hypo_maker.distribution_makers) - elif len(metric) != len(hypo_maker.distribution_makers): - raise IndexError('Number of defined metrics does not match with number of detectors.') - else: # DistributionMaker object - assert len(metric) == 1 - - # Check if the hypo matches data - if hypo_maker.__class__.__name__ != "Detectors" and data_dist.allclose(hypo_asimov_dist) : - - msg = 'Initial hypo matches data, no need for fit' - logging.info(msg) - - # Get the metric value at this initial point - # This is for returning as part of the "fit" results - initial_metric_val = ( - data_dist.metric_total(expected_values=hypo_asimov_dist, metric=metric[0]) - + hypo_maker.params.priors_penalty(metric=metric[0]) - ) - - # Return fit results, even though didn't technically fit - return HypoFitResult( - metric, - initial_metric_val, - data_dist, - hypo_maker, - minimizer_time=0., - minimizer_metadata={"success":True, "nit":0, "message":msg}, # Add some metadata in the format returned by `scipy.optimize.minimize` - fit_history=None, - other_metrics=None, - num_distributions_generated=0, - include_detailed_metric_info=True, - ) - - if method in ["fit_octants", "fit_ranges"]: - method = method.split("_")[1] - logging.warn(f"fit method 'fit_{method}' has been re-named to '{method}'") - - # If made it here, we have a fit to do... - fit_function = getattr(self, f"_fit_{method}") - # Run the fit function - return fit_function(data_dist, hypo_maker, metric, external_priors_penalty, - method_kwargs, local_fit_kwargs) - - def _fit_octants(self, data_dist, hypo_maker, metric, external_priors_penalty, - method_kwargs, local_fit_kwargs): - """ - A simple global optimization scheme that searches mixing angle octants. - """ - angle_name = method_kwargs["angle"] - if angle_name not in hypo_maker.params.free.names: - logging.info(f"{angle_name} is not a free parameter, skipping octant check") - return self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - inflection_point = method_kwargs["inflection_point"] - - logging.info(f"Entering octant fit for angle {angle_name} with inflection " - f"point at {inflection_point}") - #### Removed, fitting always separately. - # Is there a reason not to fit separately, ever? - # fit_octants_separately = True - # if "fit_octants_separately" in method_kwargs.keys(): - # fit_octants_separately = method_kwargs["fit_octants_separately"] - - reset_free = True - if "reset_free" in method_kwargs.keys(): - reset_free = method_kwargs["reset_free"] - - if not reset_free: - # store so we can reset to the values we currently have rather than - # resetting free parameters back to their nominal value after the octant - # check - minimizer_start_params = deepcopy(hypo_maker.params) - - tolerance = method_kwargs["tolerance"] if "tolerance" in method_kwargs else None - # Get new angle parameters each limited to one octant - ang_orig, ang_case1, ang_case2 = get_separate_octant_params( - hypo_maker, angle_name, inflection_point, tolerance=tolerance - ) - - # Fit the first octant - # In this case it is OK to replace the memory reference, we will reinstate it - # later. - hypo_maker.update_params(ang_case1) - best_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - if not self.blindness: - logging.info(f"found best fit at angle {best_fit_info.params[angle_name].value}") - logging.info(f'checking other octant of {angle_name}') - - if reset_free: - hypo_maker.reset_free() - else: - for param in minimizer_start_params: - hypo_maker.params[param.name].value = param.value - - # Fit the second octant - hypo_maker.update_params(ang_case2) - new_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - if not self.blindness: - logging.info(f"found best fit at angle {new_fit_info.params[angle_name].value}") - - - # We must not forget to reset the range of the angle to its original value! - # Otherwise, the parameter returned by this function will have a different - # range, which can cause failures further down the line! - # This is one rare instance where we directly manipulate the parameters, so - # we re-hash. - best_fit_info._params[angle_name].range = deepcopy(ang_orig.range) - best_fit_info._rehash() - new_fit_info._params[angle_name].range = deepcopy(ang_orig.range) - new_fit_info._rehash() - - # Take the one with the best fit - got_better = it_got_better(new_fit_info.metric_val, best_fit_info.metric_val, metric) - - # TODO: Pass alternative fits up the chain - if got_better: - # alternate_fits.append(best_fit_info) - best_fit_info = new_fit_info - if not self.blindness: - logging.info('Accepting other-octant fit') - else: - # alternate_fits.append(new_fit_info) - if not self.blindness: - logging.info('Accepting initial-octant fit') - - # Put the original angle parameter (as in, the actual object from memory) - # back into the hypo maker - hypo_maker.update_params(ang_orig) - - # Copy the fitted parameter values from the best fit case into the hypo maker's - # parameter values. - # Also reinstate the original parameter range for the angle - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, best_fit_info.params.free, update_range=True) - else: - update_param_values(hypo_maker, best_fit_info.params.free, update_range=True) - - return best_fit_info - - def _fit_best_of(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run several manually configured fits and take the best one. - - The specialty here is that `local_fit_kwargs` is a list, where each element - defines one fit. - """ - - logging.info(f"running several manually configured fits to choose optimum") - - reset_free = True - if method_kwargs is not None and "reset_free" in method_kwargs.keys(): - reset_free = method_kwargs["reset_free"] - - all_fit_results = [] - for i, fit_kwargs in enumerate(local_fit_kwargs): - if reset_free: - hypo_maker.reset_free() - logging.info(f"Beginning fit {i+1} / {len(local_fit_kwargs)}") - new_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - fit_kwargs["method"], fit_kwargs["method_kwargs"], - fit_kwargs["local_fit_kwargs"] - ) - all_fit_results.append(new_fit_info) - - all_fit_metric_vals = [fit_info.metric_val for fit_info in all_fit_results] - # Take the one with the best fit - if is_metric_to_maximize(metric): - best_idx = np.argmax(all_fit_metric_vals) - else: - best_idx = np.argmin(all_fit_metric_vals) - - logging.info(f"Found best fit being index {best_idx} with metric " - f"{all_fit_metric_vals[best_idx]}") - return all_fit_results[best_idx] - - def _fit_condition(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run one fit strategy or the other depending on a condition being true. - - As in the constrained fit, the condition can be a callable or a string that - can be evaluated to a callable via `eval()`. - - `local_fit_kwargs` has to be a list of length 2. The first fit runs if the - condition is true, the second one runs if the condition is false. - """ - - assert "condition_func" in method_kwargs.keys() - assert len(local_fit_kwargs) == 2, ("need to fit specs, first runs if True, " - "second runs if false") - if type(method_kwargs["condition_func"]) is str: - logging.warn( - "Using eval() is potentially dangerous as it can execute " - "arbitrary code! Do not store your config file in a place" - "where others have writing access!" - ) - condition_func = eval(method_kwargs["condition_func"]) - assert callable(condition_func), "evaluated object is not a valid function" - elif callable(method_kwargs["condition_func"]): - condition_func = method_kwargs["condition_func"] - else: - raise ValueError("Condition function is neither a callable nor a " - "string that can be evaluated to a callable.") - - if condition_func(hypo_maker): - logging.info("condition was TRUE, running first fit") - fit_kwargs = local_fit_kwargs[0] - else: - logging.info("condition was FALSE, running second fit") - fit_kwargs = local_fit_kwargs[1] - return self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - fit_kwargs["method"], fit_kwargs["method_kwargs"], - fit_kwargs["local_fit_kwargs"] - ) - - def _fit_grid_scan(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """ - Do a grid scan over starting positions and choose the best fit from the grid. - - Alternatively, the parameters used for the grid can be fixed in the fit at each - grid point, and only the very best fit is then freed up to be refined. - """ - - assert "grid" in method_kwargs.keys() - reset_free = True - if "reset_free" in method_kwargs.keys(): - reset_free = method_kwargs["reset_free"] - fix_grid_params = False - if "fix_grid_params" in method_kwargs.keys(): - fix_grid_params = method_kwargs["fix_grid_params"] - grid_params = list(method_kwargs["grid"].keys()) - logging.info(f"Starting grid scan over parameters {grid_params}") - grid_1d_arrs = [] - grid_units = [] - for p in grid_params: - d_spec = method_kwargs["grid"][p] - logging.info(f"{p}: {d_spec}") - grid_1d_arrs.append(d_spec.m) - grid_units.append(d_spec.u) - scan_mesh = np.meshgrid(*grid_1d_arrs) - scan_mesh = [m * u for m, u in zip(scan_mesh, grid_units)] - - if not fix_grid_params: - logging.info("This grid only defines the starting value of each fit, " - "all parameters that are free will stay free.") - else: - logging.info("The grid parameters will be fixed at each grid point.") - - do_refined_fit = False - if ("refined_fit" in method_kwargs.keys() - and method_kwargs["refined_fit"] is not None): - do_refined_fit = True - logging.info("The best fit on the grid will be refined using " - f"{method_kwargs['refined_fit']['method']}") - - if reset_free: - hypo_maker.reset_free() - # when we return from the scan, we want to set all parameters free again that - # were free to begin with - originally_free = hypo_maker.params.free.names - all_fit_results = [] - grid_shape = scan_mesh[0].shape - for grid_idx in np.ndindex(grid_shape): - point = {name: mesh[grid_idx] for name, mesh in zip(grid_params, scan_mesh)} - logging.info(f"working on grid point {point}") - if reset_free: - hypo_maker.reset_free() - for param, value in point.items(): - mod_param = deepcopy(hypo_maker.params[param]) - mod_param.value = value - if fix_grid_params: - # it is possible to do a scan over fixed parameters as well as - # free ones; fixed ones always stay fixed, free ones are fixed - # if requested - mod_param.is_fixed = True - # It is important not to use hypo_maker.update_params(mod_param) here - # because we don't want to overwrite the memory reference! - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, mod_param, update_is_fixed=True) - else: - update_param_values(hypo_maker, mod_param, update_is_fixed=True) - new_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - all_fit_results.append(new_fit_info) - for param in originally_free: - hypo_maker.params[param].is_fixed = False - - all_fit_metric_vals = np.array([fit_info.metric_val for fit_info in all_fit_results]) - all_fit_metric_vals = all_fit_metric_vals.reshape(grid_shape) - if not self.blindness: - logging.info(f"Grid scan metrics:\n{all_fit_metric_vals}") - # Take the one with the best fit - if is_metric_to_maximize(metric): - best_idx = np.argmax(all_fit_metric_vals) - best_idx_grid = np.unravel_index(best_idx, all_fit_metric_vals.shape) - else: - best_idx = np.argmin(all_fit_metric_vals) - best_idx_grid = np.unravel_index(best_idx, all_fit_metric_vals.shape) - - logging.info(f"Found best fit being index {best_idx_grid} with metric " - f"{all_fit_metric_vals[best_idx_grid]}") - - best_fit_result = all_fit_results[best_idx] - - if do_refined_fit: - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, best_fit_result.params.free) - else: - update_param_values(hypo_maker, best_fit_result.params.free) - # the params stored in the best fit may come from a grid point where - # parameters were fixed, so we free them up again - for param in originally_free: - hypo_maker.params[param].is_fixed = False - logging.info("Refining best fit result...") - # definitely don't want to reset the parameters here, that would defeate - # the entire purpose... - method_kwargs["refined_fit"]["reset_free"] = False - best_fit_result = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - method_kwargs["refined_fit"]["method"], - method_kwargs["refined_fit"]["method_kwargs"], - method_kwargs["refined_fit"]["local_fit_kwargs"] - ) - - return best_fit_result - - def _fit_constrained(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run a fit subject to an arbitrary inequality constraint. - - The constraint is given as a function that must stay positive. The value of - this function is scaled by a pre-factor and applied as a penalty to the test - statistic, where the initial scaling factor is not too large to avoid - minimizer problems. Should the fit converge to a point violating the - constraint, the penalty scale is doubled. - - The constraining function should calculate the distance of the constraint - over-stepping in *rescaled* parameter space to make the over-all scale - uniform. - """ - - assert "ineq_func" in method_kwargs.keys() - # If certain parameters aren't free, it will be impossible to satisfy the - # constraint and we would end up in an infinite loop! If we detect that - # these parameters aren't free, we just pass through the inner fit without - # adding a constraining penalty. - assert "necessary_free_params" in method_kwargs.keys() - if not set(method_kwargs["necessary_free_params"]).issubset( - set(hypo_maker.params.free.names)): - logging.info("Necessary parameters to satisfy the constraints aren't " - "free, running inner fit without constraint...") - return self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - if "starting_values" in method_kwargs.keys(): - assert set( - method_kwargs["starting_values"].keys() - ).issubset(set(method_kwargs["necessary_free_params"])) - - logging.info("entering constrained fit...") - if type(method_kwargs["ineq_func"]) is str: - logging.warn( - "Using eval() is potentially dangerous as it can execute " - "arbitrary code! Do not store your config file in a place" - "where others have writing access!" - ) - ineq_func = eval(method_kwargs["ineq_func"]) - assert callable(ineq_func), "evaluated object is not a valid function" - elif callable(method_kwargs["ineq_func"]): - ineq_func = method_kwargs["ineq_func"] - else: - raise ValueError("Inequality function is neither a callable nor a " - "string that can be evaluated to a callable.") - - def constraint_func(params): - value = ineq_func(params) - # inequality function must stay positive, so there is no penalty if - # it is positive, but otherwise we want to return a *positive* penalty - return 0. if value > 0. else -value - - penalty = 1000. - if "minimum_penalty" in method_kwargs.keys(): - penalty = method_kwargs["minimum_penalty"] - tol = 1e-4 - if "constraint_tol" in method_kwargs.keys(): - tol = method_kwargs["constraint_tol"] - penalty_sign = -1 if is_metric_to_maximize(metric) else 1 - # It would be very inefficient to reset all free values each time when - # the penalty is doubled. However, we might still want to reset just once - # at the beginning of the constrained fit. We could still, if we wanted - # to, reset in the inner loop via the local_fit_kwargs. - reset_free = False - if "reset_free" in method_kwargs.keys(): - reset_free = method_kwargs["reset_free"] - if reset_free: - hypo_maker.reset_free() - - if external_priors_penalty is None: - penalty_func = lambda hypo_maker, metric: ( - penalty_sign * penalty * constraint_func(params=hypo_maker.params) - ) - else: - penalty_func = lambda hypo_maker, metric: ( - penalty_sign * penalty * constraint_func(params=hypo_maker.params) - + external_priors_penalty(hypo_maker=hypo_maker, metric=metric) - ) - # emulating do-while loop - while True: - if "starting_values" in method_kwargs.keys(): - for param, value in method_kwargs["starting_values"].items(): - for pipeline in hypo_maker.pipelines: - if param in pipeline.params.names: - pipeline.params[param].value = value - fit_result = self.fit_recursively( - data_dist, hypo_maker, metric, penalty_func, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - penalty *= 2 - if constraint_func(fit_result.params) <= tol: - break - elif not self.blindness: - logging.info("Fit result violates constraint condition, re-running " - f"with new penalty multiplier: {penalty}") - return fit_result - - def _fit_ranges(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Fit given ranges of a parameter separately.""" - - assert "param_name" in method_kwargs.keys() - assert "ranges" in method_kwargs.keys() - if not method_kwargs["param_name"] in hypo_maker.params.free.names: - logging.info(f"parameter {method_kwargs['param_name']} not free, " - "skipping fit over ranges...") - return self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - logging.info(f"entering fit over separate ranges in {method_kwargs['param_name']}") - - reset_free = False - if "reset_free" in method_kwargs.keys(): - reset_free = method_kwargs["reset_free"] - - # Store a copy of the original parameter such that we can reset the ranges - # and nominal values after the fit is done. - original_param = deepcopy(hypo_maker.params[method_kwargs["param_name"]]) - if not self.blindness: - logging.info(f"original parameter:\n{original_param}") - # this is the param we play around with (NOT same object in memory) - mod_param = deepcopy(original_param) - # The way this works is that we change the range and the set the rescaled - # value of the parameter to the same number it originally had. This means - # that, if the parameter was originally set at the lower end of the original - # range, it will now always start at the lower end of each interval to be - # fit separately. If it was in the middle, it will start in the middle of - # each interval. - original_rescaled_value = original_param._rescaled_value - all_fit_results = [] - for i, interval in enumerate(method_kwargs["ranges"]): - mod_param.range = interval - mod_param._rescaled_value = original_rescaled_value - # to make sure that a `reset_free` command will not try to reset the - # parameter to a place outside of the modified range we also set the - # nominal value - mod_param.nominal_value = mod_param.value - logging.info(f"now fitting on interval {i+1}/{len(method_kwargs['ranges'])}") - if not self.blindness: - logging.info(f"parameter with modified range:\n{mod_param}") - # use update_param_values instead of hypo_maker.update_params so that we - # don't overwrite the internal memory reference - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector( - hypo_maker, mod_param, update_range=True, update_nominal_values=True - ) - else: - update_param_values( - hypo_maker, mod_param, update_range=True, update_nominal_values=True - ) - fit_result = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - all_fit_results.append(fit_result) - - all_fit_metric_vals = [fit_info.metric_val for fit_info in all_fit_results] - # Take the one with the best fit - if is_metric_to_maximize(metric): - best_idx = np.argmax(all_fit_metric_vals) - else: - best_idx = np.argmin(all_fit_metric_vals) - - if not self.blindness: - logging.info(f"Found best fit being in interval {best_idx+1} with metric " - f"{all_fit_metric_vals[best_idx]}") - best_fit_result = all_fit_results[best_idx] - # resetting the range of the parameter we played with - # This is one rare instance where we manipulate the parameters of a fit result. - best_fit_result._params[original_param.name].range = original_param.range - best_fit_result._params[original_param.name].nominal_value = original_param.nominal_value - best_fit_result._rehash() - # set the values of all parameters in the hypo_maker to the best fit values - # without overwriting the memory reference. - # Also reset ranges and nominal values that we might have changed above! - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector( - hypo_maker, best_fit_result.params.free, - update_range=True, update_nominal_values=True - ) - else: - update_param_values( - hypo_maker, best_fit_result.params.free, - update_range=True, update_nominal_values=True - ) - return best_fit_result - - def _fit_staged(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run a staged fit of one or more sub-fits where later fits start where the - earlier fits finished. - - The subsidiary fits are passed as a list of dicts to `local_fit_kwargs` and - are worked on in order of the list. Internally, the `nominal_values` of the - parameters are set to the best fit values of the previous fit, such that - calls to `reset_free` do not destroy the progress of previous stages. - """ - assert local_fit_kwargs is not None - assert isinstance(local_fit_kwargs, list) and len(local_fit_kwargs) > 1 - - logging.info("Starting staged fit...") - best_fit_params = None - best_fit_info = None - # storing original nominal values - original_nominal_values = dict( - [(p.name, p.nominal_value) for p in hypo_maker.params.free] - ) - for i, fit_kwargs in enumerate(local_fit_kwargs): - logging.info(f"Beginning fit {i+1} / {len(local_fit_kwargs)}") - if best_fit_params is not None: - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector( - hypo_maker, best_fit_params.free, update_nominal_values=True - ) - else: - update_param_values( - hypo_maker, best_fit_params.free, update_nominal_values=True - ) - best_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - fit_kwargs["method"], fit_kwargs["method_kwargs"], - fit_kwargs["local_fit_kwargs"] - ) - best_fit_params = best_fit_info.params # makes a deepcopy anyway - # We set the nominal values to the best fit values, so that a `reset_free` - # call does not destroy the progress of the previous fit. - for p in best_fit_params.free: - p.nominal_value = p.value - # reset the nominal values to their original values as if nothing happened - # note that we manipulate the internal `_params` object directly, circumventing - # the getter method! - for p in best_fit_info._params.free: - p.nominal_value = original_nominal_values[p.name] - # Because we directly manipulated the internal parameters, we need to update - # the hash. - best_fit_info._rehash() - # Make sure that the hypo_maker has its params also at the best fit point - # with the original nominal parameter values. - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector( - hypo_maker, best_fit_info.params.free, update_nominal_values=True - ) - else: - update_param_values( - hypo_maker, best_fit_info.params.free, update_nominal_values=True - ) - return best_fit_info - - def _fit_scipy(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run an arbitrary scipy minimizer to modify hypo dist maker's free params - until the data_dist is most likely to have come from this hypothesis. - - This function uses only local optimization and does not attempt to find - a global optimum among several local optima. - - Parameters - ---------- - data_dist : MapSet or List of MapSets - Data distribution(s) - - hypo_maker : Detectors, DistributionMaker or convertible thereto - - metric : string or iterable of strings - - minimizer_settings : dict - - external_priors_penalty : func - User defined prior penalty function - - - Returns - ------- - fit_info : HypoFitResult - """ - - global_scipy_methods = ["differential_evolution", "basinhopping", - "dual_annealing", "shgo"] - methods_using_local_fits = ["basinhopping", "dual_annealing", "shgo"] - - global_method = None - if "global_method" in method_kwargs.keys(): - global_method = method_kwargs["global_method"] - - if local_fit_kwargs is not None and global_method not in methods_using_local_fits: - logging.warn(f"local_fit_kwargs are ignored by global method {global_method}") - - if global_method is None: - logging.info(f"entering local scipy fit using {method_kwargs['method']['value']}") - else: - assert global_method in global_scipy_methods, "unsupported global fit method" - logging.info(f"entering global scipy fit using {global_method}") - if not self.blindness: - logging.debug("free parameters:") - logging.debug(hypo_maker.params.free) - - if global_method in methods_using_local_fits: - minimizer_settings = set_minimizer_defaults(local_fit_kwargs) - validate_minimizer_settings(minimizer_settings) - elif global_method == "differential_evolution": - # Unfortunately we are not allowed to pass these, DE with polish=True always - # uses L-BFGS-B with default settings. - if ("polish" in method_kwargs["options"].keys() - and method_kwargs["options"]["polish"]): - logging.info("Differential Evolution result will be polished using L-BFGS-B") - # We need to put the method here so that the bounds will be adjusted - # below, otherwise the polishing fit can cause crashes if it hits the - # bounds. - minimizer_settings = { - "method": {"value": "L-BFGS-B"}, - "options": {"value": {"eps": 1e-8}} - } - else: - # We put this here such that the checks farther down don't crash - minimizer_settings = {"method": {"value": "None"}} - elif global_method == "dual_annealing": - minimizer_settings = { - "method": {"value": "L-BFGS-B"}, - "options": {"value": {"eps": 1e-8}} - } - logging.info("Due to a scipy bug, local minimization can only use default" - "L-BFGS-B settings. The given settings are ignored.") - else: - minimizer_settings = set_minimizer_defaults(method_kwargs) - validate_minimizer_settings(minimizer_settings) - - if isinstance(metric, str): - metric = [metric] - sign = 0 - for m in metric: - if m in METRICS_TO_MAXIMIZE and sign != +1: - sign = -1 - elif m in METRICS_TO_MINIMIZE and sign != -1: - sign = +1 - else: - raise ValueError("Defined metrics are not compatible") - # Get starting free parameter values - x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access - - # Indicate indices where x0 should be reflected around the mid-point at 0.5. - # This is only used for the COBYLA minimizer. - flip_x0 = np.zeros(len(x0), dtype=bool) - - minimizer_method = minimizer_settings["method"]["value"].lower() - cons = () - if minimizer_method in MINIMIZERS_USING_CONSTRAINTS: - logging.warning( - 'Minimizer %s requires bounds to be formulated in terms of constraints.' - ' Constraining functions are auto-generated now.', - minimizer_method - ) - cons = [] - for idx in range(len(x0)): - l = {'type': 'ineq', - 'fun': lambda x, i=idx: x[i] - FTYPE_PREC} # lower bound at zero - u = {'type': 'ineq', - 'fun': lambda x, i=idx: 1. - x[i]} # upper bound at 1 - cons.append(l) - cons.append(u) - # The minimizer begins with a step of size `rhobeg` in the positive - # direction. Flipping around 0.5 ensures that this initial step will not - # overstep boundaries if `rhobeg` is 0.5. - flip_x0 = np.array(x0) > 0.5 - # The minimizer can't handle bounds, but they still need to be passed for - # the interface to be uniform even though they are not used. - bounds = [(0, 1)]*len(x0) - else: - bounds = [(0, 1)]*len(x0) - - x0 = np.where(flip_x0, 1 - x0, x0) - - if global_method is None: - logging.debug('Running the %s minimizer...', minimizer_method) - else: - logging.debug(f"Running the {global_method} global fit method...") - # Using scipy.optimize.minimize allows a whole host of minimizers to be - # used. - counter = Counter() - - fit_history = [] - fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) - - start_t = time.time() - - if self.pprint and not self.blindness: - free_p = hypo_maker.params.free - self._pprint_header(free_p, external_priors_penalty, metric) - - # reset number of iterations before each minimization - self._nit = 0 - - - # Before starting minimization, check if we already have a perfect match between data and template - # This can happen if using pseudodata that was generated with the nominal values for parameters - # (which will also be the initial values in the fit) and blah... - # If this is the case, don't both to fit and return results right away. - - # Grab the hypo map - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - - # Check if the hypo matches data - matches = False - if isinstance(data_dist, list): - matches = all( entry.allclose(hypo_asimov_dist[ie]) for ie, entry in enumerate(data_dist) ) - else: - matches = data_dist.allclose(hypo_asimov_dist) - - if matches: - - msg = 'Initial hypo matches data, no need for fit' - logging.info(msg) - - # Get the metric value at this initial point (for the returned data) - initial_metric_val = ( - data_dist.metric_total(expected_values=hypo_asimov_dist, metric=metric[0]) - + hypo_maker.params.priors_penalty(metric=metric[0]) - ) - - # Return fit results, even though didn't technically fit - return HypoFitResult( - metric, - initial_metric_val, - data_dist, - hypo_maker, - minimizer_time=0., - minimizer_metadata={"success":True, "nit":0, "message":msg}, # Add some metadata in the format returned by `scipy.optimize.minimize` - fit_history=None, - other_metrics=None, - num_distributions_generated=0, - include_detailed_metric_info=True, - ) - - - # - # From that point on, optimize starts using the metric and - # iterates, no matter what you do - # - if global_method is None: - optimize_result = optimize.minimize( - fun=self._minimizer_callable, - x0=x0, - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty), - bounds=bounds, - constraints=cons, - method=minimizer_settings['method']['value'], - options=minimizer_settings['options']['value'], - callback=self._minimizer_callback - ) - elif global_method == "differential_evolution": - optimize_result = optimize.differential_evolution( - func=self._minimizer_callable, - bounds=bounds, - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty), - callback=self._minimizer_callback, - **method_kwargs["options"] - ) - elif global_method == "basinhopping": - if "seed" in method_kwargs["options"]: - seed = method_kwargs["options"]["seed"] - else: - seed = None - rng = check_random_state(seed) - - if "step_size" in method_kwargs["options"]: - step_size = method_kwargs["options"]["step_size"] - else: - step_size = 0.5 - - take_step = BoundedRandomDisplacement(step_size, bounds, rng) - minimizer_kwargs = deepcopy(local_fit_kwargs) - minimizer_kwargs["args"] = ( - hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty - ) - if "reset_free" in minimizer_kwargs: - del minimizer_kwargs["reset_free"] - minimizer_kwargs["method"] = local_fit_kwargs["method"]["value"] - minimizer_kwargs["options"] = local_fit_kwargs["options"]["value"] - minimizer_kwargs["bounds"] = bounds - def basinhopping_callback(x, f, accept): - self._nit += 1 - optimize_result = optimize.basinhopping( - func=self._minimizer_callable, - x0=x0, - take_step=take_step, - callback=basinhopping_callback, - minimizer_kwargs=minimizer_kwargs, - **method_kwargs["options"] - ) - optimize_result.success = True # basinhopping doesn't set this property - elif global_method == "dual_annealing": - def annealing_callback(x, f, context): - self._nit += 1 - # TODO: Enable use of custom minimization if scipy is fixed - # The scipy implementation is buggy insofar as it doesn't apply bounds to - # the inner minimization and there is no way to pass bounds through that - # doesn't crash. This leads to evaluations outside of the bounds. - optimize_result = optimize.dual_annealing( - func=self._minimizer_callable, - bounds=bounds, - x0=x0, - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty), - callback=annealing_callback, - **method_kwargs["options"] - ) - elif global_method == "shgo": - minimizer_kwargs = deepcopy(local_fit_kwargs) - minimizer_kwargs["args"] = ( - hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty - ) - if "reset_free" in minimizer_kwargs: - del minimizer_kwargs["reset_free"] - minimizer_kwargs["method"] = local_fit_kwargs["method"]["value"] - minimizer_kwargs["options"] = local_fit_kwargs["options"]["value"] - optimize_result = optimize.shgo( - func=self._minimizer_callable, - bounds=bounds, - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty), - callback=self._minimizer_callback, - minimizer_kwargs=minimizer_kwargs, - **method_kwargs["options"] - ) - else: - raise ValueError("Unsupported global fit method") - - end_t = time.time() - if self.pprint: - # clear the line - sys.stdout.write('\n\n') - sys.stdout.flush() - - minimizer_time = end_t - start_t - - # Check for minimization failure - if not optimize_result.success: - if self.blindness: - msg = '' - else: - msg = ' ' + str(optimize_result.message) - logging.warn('Optimization failed.' + msg) - # Instead of crashing completely, return a fit result with an infinite - # test statistic value. - metadata = {"success":optimize_result.success, "message":optimize_result.message,} - return HypoFitResult( - metric, - sign * np.inf, - data_dist, - hypo_maker, - minimizer_time=minimizer_time, - minimizer_metadata=metadata, - fit_history=fit_history, - other_metrics=None, - num_distributions_generated=counter.count, - include_detailed_metric_info=False, - ) - - logging.info( - 'Total time to optimize: %8.4f s; # of dists generated: %6d;' - ' avg dist gen time: %10.4f ms', - minimizer_time, counter.count, minimizer_time*1000./counter.count - ) - - # Will not assume that the minimizer left the hypo maker in the - # minimized state, so set the values now (also does conversion of - # values from [0,1] back to physical range) - rescaled_pvals = optimize_result.pop('x') - rescaled_pvals = np.where(flip_x0, 1 - rescaled_pvals, rescaled_pvals) - hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # Get the best-fit metric value - metric_val = sign * optimize_result.pop('fun') - - # Record minimizer metadata (all info besides 'x' and 'fun'; also do - # not record some attributes if performing blinded analysis) - metadata = OrderedDict() - for k in sorted(optimize_result.keys()): - if self.blindness and k in ['jac', 'hess', 'hess_inv']: - continue - if k=='hess_inv': - continue - if k=="message" and isinstance(optimize_result[k], bytes): - # A little fix for deserialization: After serialization and - # deserialization, the string would be decoded anyway and then the - # recovered object would look different. - metadata[k] = optimize_result[k].decode('utf-8') - continue - metadata[k] = optimize_result[k] - - if self.blindness > 1: # only at stricter blindness level - # undo flip - x0 = np.where(flip_x0, 1 - x0, x0) - # Reset to starting value of the fit, rather than nominal values because - # the nominal value might be out of range if this is inside an octant check. - hypo_maker._set_rescaled_free_params(x0) - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # TODO: other metrics - fit_info = HypoFitResult( - metric, - metric_val, - data_dist, - hypo_maker, - minimizer_time=minimizer_time, - minimizer_metadata=metadata, - fit_history=fit_history, - other_metrics=None, - num_distributions_generated=counter.count, - include_detailed_metric_info=True, - ) - - if not self.blindness: - logging.info(f"found best fit: {fit_info.params.free}") - return fit_info - - def _fit_iminuit(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run the Minuit minimizer to modify hypo dist maker's free params - until the data_dist is most likely to have come from this hypothesis. - - This function uses only local optimization and does not attempt to find - a global optimum among several local optima. - - Parameters - ---------- - data_dist : MapSet or List of MapSets - Data distribution(s) - - hypo_maker : Detectors, DistributionMaker or convertible thereto - - metric : string or iterable of strings - - external_priors_penalty : func - User defined prior penalty function - - method_kwargs : dict - Options passed on for Minuit - - local_fit_kwargs : dict - Ignored since no local fit happens inside this fit - - Returns - ------- - fit_info : HypoFitResult - """ - - logging.info("Entering local fit using Minuit") - - if local_fit_kwargs is not None: - logging.warn("Local fit kwargs are ignored by 'fit_minuit'." - "Use 'method_kwargs' to set Minuit options.") - - if method_kwargs is None: - method_kwargs = {} # use all defaults - if not self.blindness: - logging.debug("free parameters:") - logging.debug(hypo_maker.params.free) - - if isinstance(metric, str): - metric = [metric] - sign = 0 - for m in metric: - if m in METRICS_TO_MAXIMIZE and sign != +1: - sign = -1 - elif m in METRICS_TO_MINIMIZE and sign != -1: - sign = +1 - else: - raise ValueError("Defined metrics are not compatible") - # Get starting free parameter values - x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access - - bounds = [(0, 1)]*len(x0) - - counter = Counter() - - fit_history = [] - fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) - - start_t = time.time() - - if self.pprint and not self.blindness: - free_p = hypo_maker.params.free - self._pprint_header(free_p, external_priors_penalty, metric) - - # reset number of iterations before each minimization - self._nit = 0 - # we never flip in minuit, but we still need to set it - flip_x0 = np.zeros(len(x0), dtype=bool) - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty) - - def loss_func(x): - # In rare circumstances, minuit will try setting one of the parameters - # to NaN. Minuit might be able to recover when we return NaN. - if np.any(~np.isfinite(x)): - logging.warn(f"Minuit tried evaluating at invalid parameters: {x}") - return np.nan - return self._minimizer_callable(x, *args) - - m = Minuit(loss_func, x0) - m.limits = bounds - # only initial step size, not very important - if "errors" in method_kwargs.keys(): - m.errors = method_kwargs["errors"] - # Precision with which the likelihood is calculated - if "precision" in method_kwargs.keys(): - m.precision = method_kwargs["precision"] - else: - # Documentation states that this value should be set to "some multiple of - # the smallest relative change of a parameter that still changes the - # function". - m.precision = 5 * FTYPE_PREC - if "tol" in method_kwargs.keys(): - m.tol = method_kwargs["tol"] - simplex = False - if "run_simplex" in method_kwargs.keys(): - simplex = method_kwargs["run_simplex"] - migrad = True - if "run_migrad" in method_kwargs.keys(): - migrad = method_kwargs["run_migrad"] - if not (migrad or simplex): - raise ValueError("Must select at least one of MIGRAD or SIMPLEX to run") - # Minuit needs to know if the loss function is interpretable as a likelihood - # or as a least-squares loss. It influences the stopping condition where the - # estimated uncertainty on parameters is small compared to their covariance. - if metric[0] in LLH_METRICS: - m.errordef = Minuit.LIKELIHOOD - elif metric[0] in CHI2_METRICS: - m.errordef = Minuit.LEAST_SQUARES - else: - raise ValueError("Metric neither LLH or CHI2, unknown error definition.") - # Minuit can sometimes try to evaluate at NaN parameters if the liklihood - # is badly behaved. We don't want to completely crash in that case. - m.throw_nan = False - # actually run the minimization! - if simplex: - logging.info("Running SIMPLEX") - m.simplex() - - if migrad: - logging.info("Running MIGRAD") - m.migrad() - - end_t = time.time() - if self.pprint: - # clear the line - sys.stdout.write('\n\n') - sys.stdout.flush() - - minimizer_time = end_t - start_t - - logging.info( - 'Total time to optimize: %8.4f s; # of dists generated: %6d;' - ' avg dist gen time: %10.4f ms', - minimizer_time, counter.count, minimizer_time*1000./counter.count - ) - - if not m.accurate: - logging.warn("Covariance matrix invalid.") - if not m.valid: - logging.warn("Minimum not valid according to Minuit's criteria.") - - # Will not assume that the minimizer left the hypo maker in the - # minimized state, so set the values now (also does conversion of - # values from [0,1] back to physical range) - rescaled_pvals = np.array(m.values) - hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # Get the best-fit metric value - metric_val = sign * m.fval - - # Record minimizer metadata (all info besides 'x' and 'fun'; also do - # not record some attributes if performing blinded analysis) - metadata = OrderedDict() - # param names are relevant because they allow one to reconstruct which - # parameter corresponds to which entry in the covariance matrix - metadata["param_names"] = hypo_maker.params.free.names - # The criteria to deem a minimum "valid" are too strict for our purposes, so - # we accept the value even if m.valid is False. - metadata["success"] = np.isfinite(metric_val) - metadata["valid"] = m.valid - metadata["accurate"] = m.accurate - metadata["edm"] = m.fmin.edm - metadata["edm_goal"] = m.fmin.edm_goal - metadata["has_reached_call_limit"] = m.fmin.has_reached_call_limit - metadata["has_parameters_at_limit"] = m.fmin.has_parameters_at_limit - metadata["nit"] = m.nfcn - metadata["message"] = "Minuit finished." - - if not self.blindness: - if self.blindness < 2: - metadata["rescaled_values"] = np.array(m.values) - else: - metadata["rescaled_values"] = np.full(len(m.values), np.nan) - if m.accurate: - metadata["hess_inv"] = np.array(m.covariance) - else: - metadata["hess_inv"] = np.full((len(x0), len(x0)), np.nan) - - if self.blindness > 1: # only at stricter blindness level - # undo flip - x0 = np.where(flip_x0, 1 - x0, x0) - # Reset to starting value of the fit, rather than nominal values because - # the nominal value might be out of range if this is inside an octant check. - hypo_maker._set_rescaled_free_params(x0) - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # TODO: other metrics - fit_info = HypoFitResult( - metric, - metric_val, - data_dist, - hypo_maker, - minimizer_time=minimizer_time, - minimizer_metadata=metadata, - fit_history=fit_history, - other_metrics=None, - num_distributions_generated=counter.count, - include_detailed_metric_info=True, - ) - - if not self.blindness: - logging.info(f"found best fit: {fit_info.params.free}") - return fit_info - - def _fit_nlopt(self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs): - """Run any of the (gradient-free) NLOPT optimizers to modify hypo dist maker's - free params until the data_dist is most likely to have come from this - hypothesis. - - Parameters - ---------- - data_dist : MapSet or List of MapSets - Data distribution(s) - - hypo_maker : Detectors, DistributionMaker or convertible thereto - - metric : string or iterable of strings - - external_priors_penalty : func - User defined prior penalty function - - method_kwargs : dict - Options passed on for NLOPT - - local_fit_kwargs : dict - Ignored since no local fit happens inside this fit - - Returns - ------- - fit_info : HypoFitResult - """ - - logging.info("Entering fit using NLOPT") - - if local_fit_kwargs is not None: - logging.warn("`local_fit_kwargs` are ignored by 'fit_nlopt'." - "Use `method_kwargs` to set nlopt options and use " - "`method_kwargs['local_optimizer']` to define the settings of " - "a subsidiary NLOPT optimizer.") - - if method_kwargs is None: - raise ValueError("Need to specify at least the algorithm to run.") - if not self.blindness: - logging.debug("free parameters:") - logging.debug(hypo_maker.params.free) - - if isinstance(metric, str): - metric = [metric] - sign = 0 - for m in metric: - if m in METRICS_TO_MAXIMIZE and sign != +1: - sign = -1 - elif m in METRICS_TO_MINIMIZE and sign != -1: - sign = +1 - else: - raise ValueError("Defined metrics are not compatible") - # Get starting free parameter values - x0 = np.array(hypo_maker.params.free._rescaled_values) # pylint: disable=protected-access - - counter = Counter() - - fit_history = [] - fit_history.append(list(metric) + [v.name for v in hypo_maker.params.free]) - - start_t = time.time() - - if self.pprint and not self.blindness: - free_p = hypo_maker.params.free - self._pprint_header(free_p, external_priors_penalty, metric) - - # reset number of iterations before each minimization - self._nit = 0 - # we never flip in nlopt, but we still need to set it - flip_x0 = np.zeros(len(x0), dtype=bool) - args=(hypo_maker, data_dist, metric, counter, fit_history, - flip_x0, external_priors_penalty) - - def loss_func(x, grad): - if np.any(~np.isfinite(x)): - logging.warn(f"NLOPT tried evaluating at invalid parameters: {x}") - return np.nan - if grad.size > 0: - raise RuntimeError("Gradients cannot be calculated, use a gradient-free" - " optimization routine instead.") - return self._minimizer_callable(x, *args) - - opt = self._define_nlopt_opt(method_kwargs, loss_func, hypo_maker) - - # For some stochastic optimization methods such as CRS2, a seed parameter may - # be used to make the optimization deterministic. Otherwise, nlopt will use a - # random seed based on the current system time. - if "seed" in method_kwargs: - nlopt.srand(method_kwargs["seed"]) - - logging.info(f"Starting optimization using {opt.get_algorithm_name()}") - - xopt = opt.optimize(x0) - - end_t = time.time() - if self.pprint: - # clear the line - sys.stdout.write('\n\n') - sys.stdout.flush() - - minimizer_time = end_t - start_t - - logging.info( - 'Total time to optimize: %8.4f s; # of dists generated: %6d;' - ' avg dist gen time: %10.4f ms', - minimizer_time, counter.count, minimizer_time*1000./counter.count - ) - - # Will not assume that the minimizer left the hypo maker in the - # minimized state, so set the values now (also does conversion of - # values from [0,1] back to physical range) - rescaled_pvals = xopt - hypo_maker._set_rescaled_free_params(rescaled_pvals) # pylint: disable=protected-access - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # Get the best-fit metric value - metric_val = sign * opt.last_optimum_value() - - # Record minimizer metadata (all info besides 'x' and 'fun'; also do - # not record some attributes if performing blinded analysis) - metadata = OrderedDict() - nlopt_result = opt.last_optimize_result() - # Positive return values are successes, negative return values are failures. - # see https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#return-values - metadata["success"] = nlopt_result > 0 - metadata["nlopt_result"] = nlopt_result - metadata["nit"] = opt.get_numevals() - metadata["message"] = { - 1: "NLOPT_SUCCESS", - 2: "NLOPT_STOPVAL_REACHED", - 3: "NLOPT_FTOL_REACHED", - 4: "NLOPT_XTOL_REACHED", - 5: "NLOPT_MAXEVAL_REACHED", - 6: "NLOPT_MAXTIME_REACHED", - -1: "NLOPT_FAILURE", - -2: "NLOPT_INVALID_ARGS", - -3: "NLOPT_OUT_OF_MEMORY", - -4: "NLOPT_ROUNDOFF_LIMITED", - -5: "NLOPT_FORCED_STOP" - }[nlopt_result] - - if self.blindness < 2: - metadata["rescaled_values"] = rescaled_pvals - else: - metadata["rescaled_values"] = np.full(len(m.values), np.nan) - # we don't get a Hessian from nlopt - metadata["hess_inv"] = np.full((len(x0), len(x0)), np.nan) - - if self.blindness > 1: # only at stricter blindness level - hypo_maker._set_rescaled_free_params(x0) - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # TODO: other metrics - fit_info = HypoFitResult( - metric, - metric_val, - data_dist, - hypo_maker, - minimizer_time=minimizer_time, - minimizer_metadata=metadata, - fit_history=fit_history, - other_metrics=None, - num_distributions_generated=counter.count, - include_detailed_metric_info=True, - ) - - if not self.blindness: - logging.info(f"found best fit: {fit_info.params.free}") - return fit_info - - def _define_nlopt_opt(self, method_kwargs, loss_func, hypo_maker): - """ - Helper function that reads the options from a dictionary and configures - an nlopt.opt object with all the options applied. Some global search algorithms - also need a local/subsidiary optimizer. Its options can be specified in - `method_kwargs['local_optimizer']` as a dictionary of the same form that is - passed to this function again to build the nlopt.opt object. - """ - - if not "algorithm" in method_kwargs.keys(): - raise ValueError("Need to specify the algorithm to use.") - alg_name_splits = method_kwargs["algorithm"].split("_") - if not alg_name_splits[0] == "NLOPT": - raise ValueError("Algorithm name should be specified as `NLOPT_{G,L}N_XXX`") - if len(alg_name_splits[1]) > 1 and alg_name_splits[1][1] == "D": - raise ValueError("Only gradient-free algorithms (NLOPT_GN or NLOPT_LN) are " - "supported.") - - algorithm = getattr(nlopt, "_".join(alg_name_splits[1:])) - x0 = np.array(hypo_maker.params.free._rescaled_values) - opt = nlopt.opt(algorithm, len(x0)) - opt.set_min_objective(loss_func) - - if "ftol_abs" in method_kwargs.keys(): - opt.set_ftol_abs(method_kwargs["ftol_abs"]) - if "ftol_rel" in method_kwargs.keys(): - opt.set_ftol_rel(method_kwargs["ftol_rel"]) - if "xtol_abs" in method_kwargs.keys(): - opt.set_xtol_abs(method_kwargs["xtol_abs"]) - if "xtol_rel" in method_kwargs.keys(): - opt.set_xtol_rel(method_kwargs["xtol_rel"]) - if "stopval" in method_kwargs.keys(): - opt.set_stopval(method_kwargs["stopval"]) - if "maxeval" in method_kwargs.keys(): - opt.set_maxeval(method_kwargs["maxeval"]) - # Maximum runtime in seconds - if "maxtime" in method_kwargs.keys(): - opt.set_maxtime(method_kwargs["maxtime"]) - # set algorithm-specific parameters (see - # https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#algorithm-specific-parameters) - if "algorithm_params" in method_kwargs.keys(): - for k, v in method_kwargs["algorithm_params"].items(): - opt.set_param(k, v) - if "ineq_constraints" in method_kwargs.keys(): - logging.warn( - "Using eval() is potentially dangerous as it can execute " - "arbitrary code! Do not store your config file in a place" - "where others have writing access!" - ) - constr_list = method_kwargs["ineq_constraints"] - if isinstance(constr_list, str): - constr_list = [constr_list] - for constr in constr_list: - # the inequality function is specified as a function that takes a - # ParamSet as its input - logging.info(f"adding constraint (must stay positive): {constr}") - ineq_func_params = eval(constr) - assert callable(ineq_func_params), "evaluated object is not a valid function" - def ineq_func(x, grad): - if grad.size > 0: - raise RuntimeError("gradients not supported") - hypo_maker._set_rescaled_free_params(x) - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - # In NLOPT, the inequality function must stay negative, while in - # scipy, the inequality function must stay positive. We keep with - # the scipy convention by flipping the sign. - return -ineq_func_params(hypo_maker.params) - opt.add_inequality_constraint(ineq_func) - - # Population size for stochastic search algorithms, see - # https://nlopt.readthedocs.io/en/latest/NLopt_Reference/#stochastic-population - if "population" in method_kwargs.keys(): - opt.set_population(method_kwargs["population"]) - if "initial_step" in method_kwargs.keys(): - opt.set_initial_step(method_kwargs["initial_step"]) - - opt.set_lower_bounds(0.) - opt.set_upper_bounds(1.) - - if "local_optimizer" in method_kwargs.keys(): - local_opt = self._define_nlopt_opt(method_kwargs["local_optimizer"], - loss_func, hypo_maker) - opt.set_local_optimizer(local_opt) - - return opt - - def _pprint_header(self, free_p, external_priors_penalty, metric): - # Display any units on top - r = re.compile(r'(^[+0-9.eE-]* )|(^[+0-9.eE-]*$)') - hdr = ' '*(6+1+10+1+12+3) - unt = [] - for p in free_p: - u = r.sub('', format(p.value, '~')).replace(' ', '')[0:10] - if u: - u = '(' + u + ')' - unt.append(u.center(12)) - hdr += ' '.join(unt) - hdr += '\n' - - # Header names - hdr += ('iter'.center(6) + ' ' + 'funcalls'.center(10) + ' ' + - metric[0][0:12].center(12) + ' | ') - hdr += ' '.join([p.name[0:12].center(12) for p in free_p]) - if external_priors_penalty is not None: - hdr += " | penalty " - hdr += '\n' - - # Underscores - hdr += ' '.join(['-'*6, '-'*10, '-'*12, '+'] + ['-'*12]*len(free_p)) - if external_priors_penalty is not None: - hdr += " + -----------" - hdr += '\n' - - sys.stdout.write(hdr) - - def _minimizer_callable(self, scaled_param_vals, hypo_maker, data_dist, - metric, counter, fit_history, flip_x0, - external_priors_penalty=None): - """Simple callback for use by scipy.optimize minimizers. - - This should *not* in general be called by users, as `scaled_param_vals` - are stripped of their units and scaled to the range [0, 1], and hence - some validation of inputs is bypassed by this method. - - Parameters - ---------- - scaled_param_vals : sequence of floats - If called from a scipy.optimize minimizer, this sequence is - provieded by the minimizer itself. These values are all expected to - be in the range [0, 1] and be simple floats (no units or - uncertainties attached, etc.). Rescaling the parameter values to - their original (physical) ranges (including units) is handled - within this method. - - hypo_maker : Detectors or DistributionMaker - Creates the per-bin expectation values per map - based on its param values. Free params in the - `hypo_maker` are modified by the minimizer to achieve a "best" fit. - - data_dist : Sequence of MapSets or MapSet - Data distribution to be fit. Can be an actual-, Asimov-, or - pseudo-data distribution (where the latter two are derived from - simulation and so aren't technically "data"). - - metric : string or iterable of strings - Metric by which to evaluate the fit. See Map - - counter : Counter - Mutable object to keep track--outside this method--of the number of - times this method is called. - - flip_x0 : ndarray of type bool - Indicates which indices of x0 should be flipped around 0.5. - - external_priors_penalty : func - User defined prior penalty function, which takes `hypo_maker` and - `metric` as arguments and returns numerical value of penalty to - the metric value. It is expected sign of the penalty is correctly - specified inside the `external_priors_penalty` (e.g. negative for - llh or positive for chi2). - - """ - # Want to *maximize* e.g. log-likelihood but we're using a minimizer, - # so flip sign of metric in those cases. - if isinstance(metric, str): - metric = [metric] - sign = 0 - for m in metric: - if m in METRICS_TO_MAXIMIZE and sign != +1: - sign = -1 - elif m in METRICS_TO_MINIMIZE and sign != -1: - sign = +1 - else: - raise ValueError('Defined metrics are not compatible') - - scaled_param_vals = np.where(flip_x0, 1 - scaled_param_vals, scaled_param_vals) - # Set param values from the scaled versions the minimizer works with - hypo_maker._set_rescaled_free_params(scaled_param_vals) # pylint: disable=protected-access - if hypo_maker.__class__.__name__ == "Detectors": - update_param_values_detector(hypo_maker, hypo_maker.params.free) #updates values for ALL detectors - - # Get the map set - try: - if metric[0] == 'generalized_poisson_llh': - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=False, output_mode='binned', force_standard_output=False) - hypo_asimov_dist = merge_mapsets_together(mapset_list=hypo_asimov_dist) - data_dist = data_dist.maps[0] # Extract the map from the MapSet - metric_kwargs = {'empty_bins':hypo_maker.empty_bin_indices} - else: - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - if isinstance(hypo_asimov_dist, OrderedDict): - hypo_asimov_dist = hypo_asimov_dist['weights'] - metric_kwargs = {} - - except Exception as e: - if self.blindness: - logging.error('Minimizer failed') - else: - logging.error( - 'Failed to generate distribution with free' - ' params %s', hypo_maker.params.free - ) - logging.error(str(e)) - raise - - # - # Assess the fit: whether the data came from the hypo_asimov_dist - # - try: - if hypo_maker.__class__.__name__ == "Detectors": - metric_val = 0 - for i in range(len(hypo_maker.distribution_makers)): - data = data_dist[i].metric_total(expected_values=hypo_asimov_dist[i], - metric=metric[i], metric_kwargs=metric_kwargs) - metric_val += data - priors = hypo_maker.params.priors_penalty(metric=metric[0]) # uses just the "first" metric for prior - metric_val += priors - else: # DistributionMaker object - if metric[0] == 'weighted_chi2': - actual_values = data_dist.hist['total'] - expected_values = hypo_asimov_dist.hist['total'] - d = {'output_binning': hypo_maker.pipelines[0].output_binning, - 'output_key': 'bin_unc2'} - bin_unc2 = hypo_maker.get_outputs(return_sum=True, **d).hist['total'] - metric_val = ( - np.sum(weighted_chi2(actual_values, expected_values, bin_unc2)) - + hypo_maker.params.priors_penalty(metric=metric[0]) - ) - else: - metric_val = ( - data_dist.metric_total(expected_values=hypo_asimov_dist, - metric=metric[0], metric_kwargs=metric_kwargs) - + hypo_maker.params.priors_penalty(metric=metric[0]) - ) - except Exception as e: - if self.blindness: - logging.error('Minimizer failed') - else : - logging.error( - 'Failed when computing metric with free params %s', - hypo_maker.params.free - ) - logging.error(str(e)) - raise - - penalty = 0 - if external_priors_penalty is not None: - penalty = external_priors_penalty(hypo_maker=hypo_maker,metric=metric) - - # Report status of metric & params (except if blinded) - if self.blindness: - msg = ('minimizer iteration: #%6d | function call: #%6d' - %(self._nit, counter.count)) - else: - #msg = '%s=%.6e | %s' %(metric, metric_val, hypo_maker.params.free) - msg = '%s %s %s | ' %(('%d'%self._nit).center(6), - ('%d'%counter.count).center(10), - format(metric_val, '0.5e').rjust(12)) - msg += ' '.join([('%0.5e'%p.value.m).rjust(12) - for p in hypo_maker.params.free]) - if external_priors_penalty is not None: - msg += f" | {penalty:11.4e}" - - if self.pprint: - sys.stdout.write(msg + '\n') - sys.stdout.flush() - else: - logging.trace(msg) - - counter += 1 - - if not self.blindness: - fit_history.append( - [metric_val] + [v.value.m for v in hypo_maker.params.free] - ) - - if external_priors_penalty is not None: - metric_val += external_priors_penalty(hypo_maker=hypo_maker,metric=metric) - - return sign*metric_val - - def _minimizer_callback(self, xk, **unused_kwargs): # pylint: disable=unused-argument - """Passed as `callback` parameter to `optimize.minimize`, and is called - after each iteration. Keeps track of number of iterations. - - Parameters - ---------- - xk : list - Parameter vector - - """ - self._nit += 1 - -class Analysis(BasicAnalysis): - """Analysis class for "canonical" IceCube/DeepCore/PINGU analyses. - - * "Data" distribution creation (via passed `data_maker` object) - * "Expected" distribution creation (via passed `distribution_maker` object) - * Minimizer Interface (via method `_minimizer_callable`) - Interfaces to a minimizer for modifying the free parameters of the - `distribution_maker` to fit its output (as closely as possible) to the - data distribution is provided. See [minimizer_settings] for - - """ - - def __init__(self): - self._nit = 0 - self.pprint = True - self.blindness = False - - def fit_hypo(self, data_dist, hypo_maker, metric, minimizer_settings, - hypo_param_selections=None, reset_free=True, - check_octant=True, fit_octants_separately=None, - check_ordering=False, other_metrics=None, - blind=False, pprint=True, external_priors_penalty=None): - """Fitter "outer" loop: If `check_octant` is True, run - `fit_hypo_inner` starting in each octant of theta23 (assuming that - is a param in the `hypo_maker`). Otherwise, just run the inner - method once. - - Note that prior to running the fit, the `hypo_maker` has - `hypo_param_selections` applied and its free parameters are reset to - their nominal values. - - Parameters - ---------- - data_dist : MapSet or List of MapSets - Data distribution(s). These are what the hypothesis is tasked to - best describe during the optimization process. - - hypo_maker : Detectors, DistributionMaker or instantiable thereto - Generates the expectation distribution under a particular - hypothesis. This typically has (but is not required to have) some - free parameters which can be modified by the minimizer to optimize - the `metric`. - - hypo_param_selections : None, string, or sequence of strings - A pipeline configuration can have param selectors that allow - switching a parameter among two or more values by specifying the - corresponding param selector(s) here. This also allows for a single - instance of a DistributionMaker to generate distributions from - different hypotheses. - - metric : string or iterable of strings - The metric to use for optimization. Valid metrics are found in - `VALID_METRICS`. Note that the optimized hypothesis also has this - metric evaluated and reported for each of its output maps. - - minimizer_settings : string or dict - - check_octant : bool - If theta23 is a parameter to be used in the optimization (i.e., - free), the fit will be re-run in the second (first) octant if - theta23 is initialized in the first (second) octant. - - reset_free : bool - Resets all free parameters to values defined in stages when starting a fit - - fit_octants_separately : bool - If 'check_octant' is set so that the two octants of theta23 are - individually checked, this flag enforces that each theta23 can - only vary within the octant currently being checked (e.g. the - minimizer cannot swap octants). Deprecated. - - check_ordering : bool - If the ordering is not in the hypotheses already being tested, the - fit will be run in both orderings. - - other_metrics : None, string, or list of strings - After finding the best fit, these other metrics will be evaluated - for each output that contributes to the overall fit. All strings - must be valid metrics, as per `VALID_METRICS`, or the - special string 'all' can be specified to evaluate all - VALID_METRICS.. - - pprint : bool - Whether to show live-update of minimizer progress. - - blind : bool or int - Whether to carry out a blind analysis. If True or 1, this hides actual - parameter values from display and disallows these (as well as Jacobian, - Hessian, etc.) from ending up in logfiles. If given an integer > 1, the - fitted parameters are also prevented from being stored in fit info - dictionaries. - - external_priors_penalty : func - User defined prior penalty function. Adds an extra penalty - to the metric that is minimized, depending on the input function. - - - Returns - ------- - best_fit_info : HypoFitResult (see fit_hypo_inner method for details of - `fit_info` dict) - alternate_fits : list of `fit_info` from other fits run - - """ - - if fit_octants_separately is not None: - warnings.warn("fit_octants_separately is deprecated and will be ignored, " - "octants are always fit separately now.", DeprecationWarning) - - self.blindness = blind - self.pprint = pprint - - if hypo_param_selections is None: - hypo_param_selections = hypo_maker.param_selections - - if isinstance(metric, str): - metric = [metric] - # Check number of used metrics - if hypo_maker.__class__.__name__ == "Detectors": - if len(metric) == 1: # One metric for all detectors - metric = list(metric) * len(hypo_maker.distribution_makers) - elif len(metric) != len(hypo_maker.distribution_makers): - raise IndexError('Number of defined metrics does not match with number of detectors.') - else: # DistributionMaker object - assert len(metric) == 1 - - if check_ordering: - if 'nh' in hypo_param_selections or 'ih' in hypo_param_selections: - raise ValueError('One of the orderings has already been ' - 'specified as one of the hypotheses but the ' - 'fit has been requested to check both. These ' - 'are incompatible.') - - logging.info('Performing fits in both orderings.') - extra_param_selections = ['nh', 'ih'] - else: - extra_param_selections = [None] - - alternate_fits = [] - # TODO: Pass alternative fits up the chain - for extra_param_selection in extra_param_selections: - if extra_param_selection is not None: - full_param_selections = hypo_param_selections - full_param_selections.append(extra_param_selection) - else: - full_param_selections = hypo_param_selections - # Select the version of the parameters used for this hypothesis - hypo_maker.select_params(full_param_selections) - - # Reset free parameters to nominal values - if reset_free: - hypo_maker.reset_free() - if check_octant: - method = "octants" - method_kwargs = { - "angle": "theta23", - "inflection_point": 45 * ureg.deg, - "reset_free": reset_free, - } - local_fit_kwargs = { - "method": "scipy", - "method_kwargs": minimizer_settings, - "local_fit_kwargs": None, - } - else: - method = "scipy" - method_kwargs = minimizer_settings - local_fit_kwargs = None - - # Perform the fit - best_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - method, method_kwargs, local_fit_kwargs - ) - - return best_fit_info, alternate_fits - - def nofit_hypo(self, data_dist, hypo_maker, hypo_param_selections, - hypo_asimov_dist, metric, other_metrics=None, blind=False, external_priors_penalty=None): - """Fitting a hypo to a distribution generated by its own - distribution maker is unnecessary. In such a case, use this method - (instead of `fit_hypo`) to still retrieve meaningful information for - e.g. the match metrics. - - Parameters - ---------- - data_dist : MapSet or List of MapSets - hypo_maker : Detectors or DistributionMaker - hypo_param_selections : None, string, or sequence of strings - hypo_asimov_dist : MapSet or List of MapSets - metric : string or iterable of strings - other_metrics : None, string, or sequence of strings - blind : bool - external_priors_penalty : func - - - """ - fit_info = HypoFitResult() - - # NOTE: Select params but *do not* reset to nominal values to record - # the current (presumably already optimal) param values - hypo_maker.select_params(hypo_param_selections) - - if isinstance(metric, str): - metric = [metric] - # Check number of used metrics - if hypo_maker.__class__.__name__ == "Detectors": - if len(metric) == 1: # One metric for all detectors - metric = list(metric) * len(hypo_maker.distribution_makers) - elif len(metric) != len(hypo_maker.distribution_makers): - raise IndexError('Number of defined metrics does not match with number of detectors.') - else: # DistributionMaker object - assert len(metric) == 1 - fit_info.metric = metric - - # Assess the fit: whether the data came from the hypo_asimov_dist - try: - if hypo_maker.__class__.__name__ == "Detectors": - metric_val = 0 - for i in range(len(hypo_maker.distribution_makers)): - data = data_dist[i].metric_total(expected_values=hypo_asimov_dist[i], metric=metric[i]) - metric_val += data - priors = hypo_maker.params.priors_penalty(metric=metric[0]) # uses just the "first" metric for prior - metric_val += priors - else: # DistributionMaker object - - if 'generalized_poisson_llh' == metric[0]: - - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=False, output_mode='binned', force_standard_output=False) - hypo_asimov_dist = merge_mapsets_together(mapset_list=hypo_asimov_dist) - data_dist = data_dist.maps[0] # Extract the map from the MapSet - metric_kwargs = {'empty_bins':hypo_maker.empty_bin_indices} - else: - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - if isinstance(hypo_asimov_dist, HypoFitResult): - hypo_asimov_dist = hypo_asimov_dist['weights'] - metric_kwargs = {} - - metric_val = ( - data_dist.metric_total(expected_values=hypo_asimov_dist, - metric=metric[0], metric_kwargs=metric_kwargs) - + hypo_maker.params.priors_penalty(metric=metric[0]) - ) - if external_priors_penalty is not None: - metric_val += external_priors_penalty(hypo_maker=hypo_maker,metric=metric[0]) - - except Exception as e: - if self.blindness: - logging.error('Minimizer failed') - else : - logging.error( - 'Failed when computing metric with free params %s', - hypo_maker.params.free - ) - logging.error(str(e)) - raise - - fit_info.metric_val = metric_val - - if self.blindness: - # Okay, if blind analysis is being performed, reset the values so - # the user can't find them in the object - hypo_maker.reset_free() - fit_info.metric_val = ParamSet() - else: - fit_info.metric_val = deepcopy(hypo_maker.params) - if hypo_maker.__class__.__name__ == "Detectors": - fit_info.detailed_metric_info = [fit_info.get_detailed_metric_info( - data_dist=data_dist[i], hypo_asimov_dist=hypo_asimov_dist[i], - params=hypo_maker.distribution_makers[i].params, metric=metric[i], - other_metrics=other_metrics, detector_name=hypo_maker.det_names[i] - ) for i in range(len(data_dist))] - else: # DistributionMaker object - - if 'generalized_poisson_llh' == metric[0]: - generalized_poisson_dist = hypo_maker.get_outputs(return_sum=False, force_standard_output=False) - generalized_poisson_dist = merge_mapsets_together(mapset_list=generalized_poisson_dist) - else: - generalized_poisson_dist = None - - fit_info.detailed_metric_info = fit_info.get_detailed_metric_info( - data_dist=data_dist, hypo_asimov_dist=hypo_asimov_dist, generalized_poisson_hypo=generalized_poisson_dist, - params=hypo_maker.params, metric=metric[0], other_metrics=other_metrics, - detector_name=hypo_maker.detector_name - ) - - fit_info.minimizer_time = 0 * ureg.sec - fit_info.num_distributions_generated = 0 - fit_info.minimizer_metadata = OrderedDict() - fit_info.hypo_asimov_dist = hypo_asimov_dist - return fit_info - - - - # TODO: move the complexity of defining a scan into a class with various - # factory methods, and just pass that class to the scan method; we will - # surely want to use scanning over parameters in more general ways, too: - # * set (some) fixed params, then run (minimizer, scan, etc.) on free - # params - # * set (some free or fixed) params, then check metric - # where the setting of the params is done for some number of values. - def scan(self, data_dist, hypo_maker, metric, hypo_param_selections=None, - param_names=None, steps=None, values=None, only_points=None, - outer=True, profile=True, minimizer_settings=None, outfile=None, - debug_mode=1, **kwargs): - """Set hypo maker parameters named by `param_names` according to - either values specified by `values` or number of steps specified by - `steps`, and return the `metric` indicating how well the data - distribution is described by each distribution. - - Some flexibility in how the user can specify `values` is allowed, based - upon the shapes of `param_names` and `values` and how the `outer` flag - is set. - - Either `values` or `steps` must be specified, but not both. - - Parameters - ---------- - data_dist : Sequence of MapSets or MapSet - Data distribution(s). These are what the hypothesis is tasked to - best describe during the optimization/comparison process. - - hypo_maker : Detectors, DistributionMaker or instantiable thereto - Generates the expectation distribution under a particular - hypothesis. This typically has (but is not required to have) some - free parameters which will be modified by the minimizer to optimize - the `metric` in case `profile` is set to True. - - hypo_param_selections : None, string, or sequence of strings - A pipeline configuration can have param selectors that allow - switching a parameter among two or more values by specifying the - corresponding param selector(s) here. This also allows for a single - instance of a DistributionMaker to generate distributions from - different hypotheses. - - metric : string or iterable of strings - The metric to use for optimization/comparison. Note that the - optimized hypothesis also has this metric evaluated and reported for - each of its output maps. Confer `pisa.core.map` for valid metrics. - - param_names : None, string, or sequence of strings - If None, assume all parameters are to be scanned; otherwise, - specifies only the name or names of parameters to be scanned. - - steps : None, integer, or sequence of integers - Number of steps to take within the allowed range of the parameter - (or parameters). Value(s) specified for `steps` must be >= 2. Note - that the endpoints of the range are always included, and numbers of - steps higher than 2 fill in between the endpoints. - - * If integer... - Take this many steps for each specified parameter. - * If sequence of integers... - Take the coresponding number of steps within the allowed range - for each specified parameter. - - values : None, scalar, sequence of scalars, or sequence-of-sequences - * If scalar... - Set this value for the (one) param name in `param_names`. - * If sequence of scalars... - * if len(param_names) is 1, set its value to each number in the - sequence. - * otherwise, set each param in param_names to the corresponding - value in `values`. There must be the same number of param names - as values. - * If sequence of (sequences or iterables)... - * Each param name corresponds to one of the inner sequences, in - the order that the param names are specified. - * If `outer` is False, all inner sequences must have the same - length, and there will be one distribution generated for - each set of values across the inner sequences. In other words, - there will be a total of len(inner sequence) distribution generated. - * If `outer` is True, the lengths of inner sequences needn't be - the same. This takes the outer product of the passed sequences - to arrive at the permutations of the parameter values that will - be used to produce the distributions (essentially nested - loops over each parameter). E.g., if two params are scanned, - for each value of the first param's inner sequence, a - distribution is produced for every value of the second param's - inner sequence. In total, there will be - ``len(inner seq0) * len(inner seq1) * ...`` - distributions produced. - - only_points : None, integer, or even-length sequence of integers - Only select subset of points to be analysed by specifying their - range of positions within the whole set (0-indexed, incremental). - For the lazy amongst us... - - outer : bool - If set to True and a sequence of sequences is passed for `values`, - the points scanned are the *outer product* of the inner sequences. - See `values` for a more detailed explanation. - - profile : bool - If set to True, minimizes specified metric over all free parameters - at each scanned point. Otherwise keeps them at their nominal values - and only performs grid scan of the parameters specified in - `param_names`. - - minimizer_settings : dict - Dictionary containing the settings for minimization, which are - only needed if `profile` is set to True. Hint: it has proven useful - to sprinkle with a healthy dose of scepticism. - - outfile : string - Outfile to store results to. Will be updated at each scan step to - write out intermediate results to prevent loss of data in case - the apocalypse strikes after all. - - debug_mode : int, either one of [0, 1, 2] - If set to 2, will add a wealth of minimisation history and physics - information to the output file. Otherwise, the output will contain - the essentials to perform an analysis (0), or will hopefully be - detailed enough for some simple debugging (1). Any other value for - `debug_mode` will be set to 2. - - """ - - if debug_mode not in (0, 1, 2): - debug_mode = 2 - - # Either `steps` or `values` must be specified, but not both (xor) - assert (steps is None) != (values is None) - - if isinstance(param_names, str): - param_names = [param_names] - - nparams = len(param_names) - hypo_maker.select_params(hypo_param_selections) - - if values is not None: - if np.isscalar(values): - values = np.array([values]) - assert nparams == 1 - for i, val in enumerate(values): - if not np.isscalar(val): - # no scalar here, need a corresponding parameter name - assert nparams >= i+1 - else: - # a scalar, can either have only one parameter or at least - # this many - assert nparams == 1 or nparams >= i+1 - if nparams > 1: - values[i] = np.array([val]) - - else: - ranges = [hypo_maker.params[pname].range for pname in param_names] - if np.issubdtype(type(steps), int): - assert steps >= 2 - values = [np.linspace(r[0], r[1], steps)*r[0].units - for r in ranges] - else: - assert len(steps) == nparams - assert np.all(np.array(steps) >= 2) - values = [np.linspace(r[0], r[1], steps[i])*r[0].units - for i, r in enumerate(ranges)] - - if nparams > 1: - steplist = [[(pname, val) for val in values[i]] - for (i, pname) in enumerate(param_names)] - else: - steplist = [[(param_names[0], val) for val in values[0]]] - - #Number of steps must be > 0 - assert len(steplist) > 0 - - points_acc = [] - if only_points is not None: - assert len(only_points) == 1 or len(only_points) % 2 == 0 - if len(only_points) == 1: - points_acc = only_points - for i in range(0, len(only_points)-1, 2): - points_acc.extend( - list(range(only_points[i], 1 + only_points[i + 1])) - ) - - # Instead of introducing another multitude of tests above, check here - # whether the lists of steps all have the same length in case `outer` - # is set to False - if nparams > 1 and not outer: - assert np.all(len(steps) == len(steplist[0]) for steps in steplist) - loopfunc = zip - else: - # With single parameter, can use either `zip` or `product` - loopfunc = product - - params = hypo_maker.params - - # Fix the parameters to be scanned if `profile` is set to True - params.fix(param_names) - - results = {'steps': {}, 'results': []} - results['steps'] = {pname: [] for pname in param_names} - for i, pos in enumerate(loopfunc(*steplist)): - if points_acc and i not in points_acc: - continue - - msg = '' - for (pname, val) in pos: - params[pname].value = val - results['steps'][pname].append(val) - if isinstance(val, float): - msg += '%s = %.2f '%(pname, val) - elif isinstance(val, ureg.Quantity): - msg += '%s = %.2f '%(pname, val.magnitude) - else: - raise TypeError("val is of type %s which I don't know " - "how to deal with in the output " - "messages."% type(val)) - logging.info('Working on point ' + msg) - hypo_maker.update_params(params) - - # TODO: consistent treatment of hypo_param_selections and scanning - if not profile or not hypo_maker.params.free: - logging.info('Not optimizing since `profile` set to False or' - ' no free parameters found...') - best_fit = self.nofit_hypo( - data_dist=data_dist, - hypo_maker=hypo_maker, - hypo_param_selections=hypo_param_selections, - hypo_asimov_dist=hypo_maker.get_outputs(return_sum=True), - metric=metric, - **{k: v for k,v in kwargs.items() if k not in ["pprint","reset_free","check_octant"]} - ) - else: - logging.info('Starting optimization since `profile` requested.') - best_fit, _ = self.fit_hypo( - data_dist=data_dist, - hypo_maker=hypo_maker, - hypo_param_selections=hypo_param_selections, - metric=metric, - minimizer_settings=minimizer_settings, - **kwargs - ) - # TODO: serialisation! - for k in best_fit.minimizer_metadata: - if k in ['hess', 'hess_inv']: - logging.debug("deleting %s", k) - del best_fit.minimizer_metadata[k] - - best_fit.metric_val = deepcopy( - best_fit.metric_val.serializable_state - ) - if isinstance(best_fit.hypo_asimov_dist, Sequence): - best_fit.hypo_asimov_dist = [deepcopy( - best_fit.hypo_asimov_dist[i].serializable_state - ) for i in range(len(best_fit.hypo_asimov_dist))] - else: - best_fit.hypo_asimov_dist = deepcopy( - best_fit.hypo_asimov_dist.serializable_state - ) - - # decide which information to retain based on chosen debug mode - if debug_mode == 0 or debug_mode == 1: - try: - del best_fit['fit_history'] - del best_fit.hypo_asimov_dist - except KeyError: - pass - - if debug_mode == 0: - # torch the woods! - try: - del best_fit.minimizer_metadata - del best_fit.minimizer_time - except KeyError: - pass - - results['results'].append(best_fit) - if outfile is not None: - # store intermediate results - to_file(results, outfile) - - return results - -def test_basic_analysis(pprint=False): - """Test recursive fit strategies with BasicAnalysis.""" - - - from pisa.core.distribution_maker import DistributionMaker - from pisa.utils.config_parser import parse_pipeline_config - - ###### Make Pipeline Configuration ######### - # We make a configuration of two pipelines where some, but not all, parameters - # are shared between them. This checks for memory inconsistencies. - config = parse_pipeline_config('settings/pipeline/fast_example.cfg') - config2 = deepcopy(config) - # Remove one stage to remove some parameters from only one pipeline - del config2[("aeff", "aeff")] - - dm = DistributionMaker([config, config2]) - dm.select_params('nh') - - dm.pipelines[0].params["aeff_scale"].value = 1.5 - # make data distribution to fit against - data_dist = dm.get_outputs(return_sum=True).fluctuate( - method="poisson", random_state=0 - ) - - #### Test subclassing - # It should be trivial to add a fit method to the BasicAnalysis class and use - # it by passing its name (without the "_fit_" prefix) to the dictionary. - class SubclassedAnalysis(BasicAnalysis): - - def _fit_nonsense( - self, data_dist, hypo_maker, metric, - external_priors_penalty, method_kwargs, local_fit_kwargs - ): - """A custom, nonsensical fit method. - - This method does nothing except to set theta23 to 42 deg for no reason. - """ - logging.info("Starting nonsense fit (setting theta23 to 42 deg)...") - - for pipeline in hypo_maker: - if "theta23" in pipeline.params.free.names: - pipeline.params.theta23.value = 42 * ureg["deg"] - - best_fit_info = self.fit_recursively( - data_dist, hypo_maker, metric, external_priors_penalty, - local_fit_kwargs["method"], local_fit_kwargs["method_kwargs"], - local_fit_kwargs["local_fit_kwargs"] - ) - - return best_fit_info - - ana = SubclassedAnalysis() - - ana.pprint = pprint - - # Test that global optimization with CRS2 is deterministic as long as a seed - # is provided. - - fit_nlopt_crs2 = OrderedDict( - method="nlopt", - method_kwargs={ - "algorithm": "NLOPT_GN_CRS2_LM", - "ftol_rel": 1e-1, - "ftol_abs": 1e-1, - "population": 5, - "maxeval": 20, - "seed": 0, - }, - local_fit_kwargs=None, - ) - - dm.reset_free() - best_fit_info_seed_0 = ana.fit_recursively( - data_dist, - dm, - "chi2", - None, - **fit_nlopt_crs2 - ) - logging.info("Best fit params with seed 0:") - logging.info(repr(best_fit_info_seed_0.params.free)) - - fit_nlopt_crs2["method_kwargs"]["seed"] = 1 - - dm.reset_free() - best_fit_info_seed_1 = ana.fit_recursively( - data_dist, - dm, - "chi2", - None, - **fit_nlopt_crs2 - ) - logging.info("Best fit params with seed 1:") - logging.info(repr(best_fit_info_seed_1.params.free)) - - fit_nlopt_crs2["method_kwargs"]["seed"] = 0 - - dm.reset_free() - best_fit_info_seed_0_reprod = ana.fit_recursively( - data_dist, - dm, - "chi2", - None, - **fit_nlopt_crs2 - ) - logging.info("Best fit params with seed 0, reproduced:") - logging.info(repr(best_fit_info_seed_0_reprod.params.free)) - - assert best_fit_info_seed_0.params == best_fit_info_seed_0_reprod.params - assert not (best_fit_info_seed_0.params == best_fit_info_seed_1.params) - - scipy_settings = { - "method": { - "value": "L-BFGS-B", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "disp" : 0, - "ftol" : 1.0e-1, - "eps" : 1.0e-6, - # we set a very low number of iterations so that this test exits early - # WILL CAUSE WARNINGS SAYING THAT THE OPTIMIZATION FAILED, BUT THAT IS OK! - #"maxiter": 2 - }, - "desc": { - "disp" : "Set to True to print convergence messages", - "ftol" : "Precision goal for the value of f in the stopping criterion", - "eps" : "Step size used for numerical approximation of the jacobian.", - "maxiter": "Maximum number of iteration" - } - }, - } - - ###### Fit strategy to test ######## - # This is a ridiculously complex fit strategy for a simple std. osc. fit - # that no one would use in real life, just to test the fit functions. - # Staged fit in two stages: - # 1. Best of: - # --> local fit using Simplex from NLOPT on a 2x1 grid - # --> local fit using Migrad from Minuit - # 2. --> for each range in deltam31: - # |--> starting from the best fit point found by local fit, shifted to range - # |--> fit with octant reflection, where internal fit is scipy - - local_simplex = OrderedDict( - method="nlopt", - method_kwargs={ - "algorithm": "NLOPT_LN_NELDERMEAD", - "ftol_rel": 1e-1, - "ftol_abs": 1e-1, - "maxeval": 10, - "initial_step": 0.2 # as a fraction of the total range - }, - local_fit_kwargs=None - ) - - grid_scan = OrderedDict( - method="grid_scan", - method_kwargs={ - "grid": { - "deltam31": np.array([3e-3, 5e-3]) * ureg["eV^2"], - "theta23": np.array([30]) * ureg["deg"] - }, - "refined_fit": local_simplex - }, - local_fit_kwargs=local_simplex - ) - - local_minuit = OrderedDict( - method="iminuit", - method_kwargs={ - "tol": 10, - }, - local_fit_kwargs=None - ) - - local_nonsense_minuit = OrderedDict( - method="nonsense", - method_kwargs=None, - local_fit_kwargs=local_minuit - ) - - best_of = OrderedDict( - method="best_of", - method_kwargs=None, - local_fit_kwargs=[ - local_nonsense_minuit, - grid_scan - ] - ) - - # a standard analysis strategy with an octant flip at 45 deg in theta23 - standard_analysis = OrderedDict( - method="fit_octants", - method_kwargs={ - "angle": "theta23", - "inflection_point": 45 * ureg.deg, - }, - local_fit_kwargs={ - "method": "scipy", - "method_kwargs": scipy_settings, - "local_fit_kwargs": None - } - ) - - # fit different ranges in mass splitting, and to the octant fits in each range - fit_in_ranges = OrderedDict( - method="fit_ranges", - method_kwargs={ - "param_name": "deltam31", - "ranges": np.array([[0.001, 0.004], [0.004, 0.007]]) * ureg["eV^2"], - "reset_free": True - }, - local_fit_kwargs=standard_analysis - ) - - # put together the full fit strategy - staged_fit = OrderedDict( - method="staged", - method_kwargs=None, - local_fit_kwargs=[ - best_of, - fit_in_ranges - ] - ) - # changing the parameter values in theta23 such that the fits starts offset from - # the truth - # use this opportunity to test the update_param_values function as well - for p in dm.pipelines: - p.params.deltam31.is_fixed = False - mod_th23 = deepcopy(dm.params.theta23) - mod_th23.range = (0 * ureg.deg, 90 *ureg.deg) - mod_th23.value = 30 * ureg.deg - mod_th23.nominal_value = 30 * ureg.deg - - update_param_values(dm, mod_th23, update_nominal_values=True, update_range=True) - # make sure that the parameter values inside the ParamSelector were changed and - # will not be overwritten by a call to `select_params` - mod_params = deepcopy(dm.params) - dm.select_params('nh') - assert mod_params == dm.params - # test alternative input to `update_param_values` where `hypo_maker` is just a - # single Pipeline - for pipeline in dm: - update_param_values(pipeline, mod_th23) - # the call above should just have no effect at all since we set everything to the - # same value - assert mod_params == dm.params - - # resetting free parameters should now set theta23 to 30 degrees since that is - # the new nominal value - dm.reset_free() - assert dm.params.theta23.value.m_as("deg") == 30 - - # store all the original ranges and nominal values - # --> The fits should never return results where these have changed, even though - # they are sometimes changed within them. - original_ranges = dict((p.name, p.range) for p in dm.params) - original_nom_vals = dict((p.name, p.nominal_value) for p in dm.params) - - # ACTUALLY RUN THE FIT - best_fit_info = ana.fit_recursively( - data_dist, - dm, - "chi2", - None, - **staged_fit - ) - - assert dm.params == best_fit_info.params - # there had been problems in the past where the range of the parameter that is - # changed by the octant flip was not reversed properly - for p in dm.params: - msg = f"mismatch in param {p.name}:\n" - msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" - msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" - if p.range is not None: - assert p.range[0] == original_ranges[p.name][0], msg - assert p.range[0] == original_ranges[p.name][0], msg - if p.nominal_value is not None: - assert p.nominal_value == original_nom_vals[p.name], msg - - # Here we make sure that making a param selection doesn't overwrite the fitted - # parameters. The Analysis should have changed the parameters inside the - # ParamSelector. - dm.select_params('nh') - assert dm.params == best_fit_info.params - for p in dm.params: - msg = f"mismatch in param {p.name}:\n" - msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" - msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" - if p.range is not None: - assert p.range[0] == original_ranges[p.name][0], msg - assert p.range[0] == original_ranges[p.name][0], msg - if p.nominal_value is not None: - assert p.nominal_value == original_nom_vals[p.name], msg - - dm.select_params('ih') - dm.select_params('nh') - assert dm.params == best_fit_info.params - for p in dm.params: - msg = f"mismatch in param {p.name}:\n" - msg += f"range is {p.range}, should be {original_ranges[p.name]}\n" - msg += f"nom. value is {p.nominal_value}, should be {original_nom_vals[p.name]}" - if p.range is not None: - assert p.range[0] == original_ranges[p.name][0], msg - assert p.range[0] == original_ranges[p.name][0], msg - if p.nominal_value is not None: - assert p.nominal_value == original_nom_vals[p.name], msg - - logging.info('<< PASS : test_basic_analysis >>') - -if __name__ == "__main__": - set_verbosity(1) - test_basic_analysis(pprint=True) diff --git a/pisa/core/__init__.py b/pisa/core/__init__.py deleted file mode 100644 index 0cd5f9de1..000000000 --- a/pisa/core/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# Useful for interactive sessions to be able to say `from pisa.core import *` -# (though this is discouraged for any script; use instead full, explicit paths -# in imports) -from .binning import * -from .distribution_maker import * -from .events import * -from .map import * -from .param import * -from .pipeline import * -from .prior import * -from .detectors import * diff --git a/pisa/core/bin_indexing.py b/pisa/core/bin_indexing.py deleted file mode 100644 index d4f23b00a..000000000 --- a/pisa/core/bin_indexing.py +++ /dev/null @@ -1,244 +0,0 @@ -""" -Functions to retrieve the bin index for a 1- to 3-dimensional sample. - -Functions were adapted from translation.py - - -Notes ------ -The binning convention in PISA (from numpy.histogramdd) is that the lower edge -is inclusive and upper edge is exclusive for a given bin, except for the -upper-most bin whose upper edge is also inclusive. Visually, for 1D: - - [ bin 0 ) [ bin 1 ) ... [ bin num_bins - 1 ] - -First bin is index = 0 and last bin is index = (num_bins - 1) - -* Values below the lowermost-edge of any dimension's binning return index = -1 -* NaN values return index = -1 -* Otherwise, values above the uppermost-edge of any dimension's binning return - index = num_bins - -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.core.translation import find_index -from pisa.utils.log import logging, set_verbosity - - -__all__ = ["lookup_indices", "test_lookup_indices"] - - -FX = "f4" if FTYPE == np.float32 else "f8" - - -@guvectorize( - [f"({FX}[:], {FX}[:], i8[:])"], - "(), (j) -> ()", - target=TARGET, -) -def lookup_indices_vectorized_1d(sample_x, bin_edges_x, out): - """Lookup bin indices for sample_x values, where binning is defined by - `bin_edges_x`.""" - out[0] = find_index(sample_x[0], bin_edges_x) - - -@guvectorize( - [f"({FX}[:], {FX}[:], {FX}[:], {FX}[:], i8[:])"], - "(), (), (a), (b) -> ()", - target=TARGET, -) -def lookup_indices_vectorized_2d(sample_x, sample_y, bin_edges_x, bin_edges_y, out): - """Same as above, except we get back the index""" - idx_x = find_index(sample_x[0], bin_edges_x) - idx_y = find_index(sample_y[0], bin_edges_y) - - n_x_bins = len(bin_edges_x) - 1 - n_y_bins = len(bin_edges_y) - 1 - n_bins = n_x_bins * n_y_bins - - if idx_x == -1 or idx_y == -1: - # any dim underflowed - out[0] = -1 - elif idx_x == n_x_bins or idx_y == n_y_bins: - # any dim overflowed - out[0] = n_bins - else: - out[0] = idx_x * n_y_bins + idx_y - - -@guvectorize( - [f"({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], i8[:])"], - "(), (), (), (a), (b), (c) -> ()", - target=TARGET, -) -def lookup_indices_vectorized_3d( - sample_x, sample_y, sample_z, bin_edges_x, bin_edges_y, bin_edges_z, out -): - """Vectorized gufunc to perform the lookup""" - idx_x = find_index(sample_x[0], bin_edges_x) - idx_y = find_index(sample_y[0], bin_edges_y) - idx_z = find_index(sample_z[0], bin_edges_z) - - n_x_bins = len(bin_edges_x) - 1 - n_y_bins = len(bin_edges_y) - 1 - n_z_bins = len(bin_edges_z) - 1 - n_bins = n_x_bins * n_y_bins * n_z_bins - - if idx_x == -1 or idx_y == -1 or idx_z == -1: - # any dim underflowed - out[0] = -1 - elif idx_x == n_x_bins or idx_y == n_y_bins or idx_z == n_z_bins: - # any dim overflowed - out[0] = n_bins - else: - out[0] = (idx_x * n_y_bins + idx_y) * n_z_bins + idx_z - - -def lookup_indices(sample, binning): - """Lookup (flattened) bin index for sample points. - - Parameters - ---------- - sample : length-M_dimensions sequence of length-N_events arrays - All smart arrays must have the same lengths; corresponding elements of - the arrays are the coordinates of an event in the dimensions each array - represents. - - binning : pisa.core.binning.MultiDimBinning or convertible thereto - `binning` is passed to instantiate ``MultiDimBinning``, so e.g., a - pisa.core.binning.OneDimBinning is valid to pass as `binning` - - Returns - ------- - indices : length-N_events arrays - One for each event the index of the histogram in which it falls into - - Notes - ----- - this method works for 1d, 2d and 3d histogram only - - """ - # Convert non-MultiDimBinning objects into MultiDimBinning if possible; - # if this fails, an error will result, as it should - binning = MultiDimBinning(binning) - - if len(sample) != binning.num_dims: - raise ValueError( - f"`binning` has {binning.num_dims} dimension(s), but `sample`" - f"contains {len(sample)} arrays (so represents {len(sample)}" - f" dimensions)" - ) - - lookup_funcs = { - 1: lookup_indices_vectorized_1d, - 2: lookup_indices_vectorized_2d, - 3: lookup_indices_vectorized_3d, - } - - if binning.num_dims not in lookup_funcs: - raise NotImplementedError( - "binning must have num_dims in {}; got {}".format( - sorted(lookup_funcs.keys()), binning.num_dims - ) - ) - - lookup_func = lookup_funcs[binning.num_dims] - - lookup_func_args = ( - [a for a in sample] - + [dim.edge_magnitudes.astype(FTYPE) for dim in binning] - ) - logging.trace("lookup_func_args = {}".format(lookup_func_args)) - - # Create an array to store the results - indices = np.empty_like(sample[0], dtype=np.int64) - - # Perform the lookup - lookup_func(*lookup_func_args, out=indices) - - return indices - - -def test_lookup_indices(): - """Unit tests for `lookup_indices` function""" - - # - # Test a variety of points. - # Points falling exactly on the bound are included in the - # - n_evts = 100 - - x = np.array([-5, 0.5, 1.5, 7.0, 6.5, 8.0, 6.5], dtype=FTYPE) - y = np.array([-5, 0.5, 1.5, 1.5, 3.0, 1.5, 2.5], dtype=FTYPE) - z = np.array([-5, 0.5, 1.5, 1.5, 0.5, 6.0, 0.5], dtype=FTYPE) - - w = np.ones(n_evts, dtype=FTYPE) - - binning_x = OneDimBinning(name="x", num_bins=7, is_lin=True, domain=[0, 7]) - binning_y = OneDimBinning(name="y", num_bins=4, is_lin=True, domain=[0, 4]) - binning_z = OneDimBinning(name="z", num_bins=2, is_lin=True, domain=[0, 2]) - - binning_1d = binning_x - binning_2d = binning_x * binning_y - binning_3d = binning_x * binning_y * binning_z - - # 1D case: check that each event falls into its predicted bin - # - # All values higher or equal to the last bin edges are assigned an index of zero - # - logging.trace("TEST 1D:") - logging.trace("Total number of bins: {}".format(7)) - logging.trace("array in 1D: {}".format(x)) - logging.trace("Binning: {}".format(binning_1d.bin_edges[0])) - indices = lookup_indices([x], binning_1d) - logging.trace("indices of each array element: {}".format(indices)) - logging.trace("*********************************") - test = indices - ref = np.array([-1, 0, 1, 6, 6, 7, 6]) - assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) - - # 2D case: - # - # The binning edges are flattened as follows: - # [(x=0, y=0), (x=0, y=1), (x=1, y=0), ...] - # - logging.trace("TEST 2D:") - logging.trace("Total number of bins: {}".format(7 * 4)) - logging.trace("array in 2D: {}".format(list(zip(x, y)))) - logging.trace("Binning: {}".format(binning_2d.bin_edges)) - indices = lookup_indices([x, y], binning_2d) - logging.trace("indices of each array element: {}".format(indices)) - logging.trace("*********************************") - test = indices - ref = np.array([-1, 0, 5, 25, 27, 28, 26]) - assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) - - # 3D case: - # - # the binning edges are flattened as follows: - # [(x=0, y=0, z=0), (x=0, y=0, z=1), (x=0, y=1, z=0)...] - # - logging.trace("TEST 3D:") - logging.trace("Total number of bins: {}".format(7 * 4 * 2)) - logging.trace("array in 3D: {}".format(list(zip(x, y, z)))) - logging.trace("Binning: {}".format(binning_3d.bin_edges)) - indices = lookup_indices([x, y, z], binning_3d) - logging.trace("indices of each array element: {}".format(indices)) - logging.trace("*********************************") - test = indices - ref = np.array([-1, 0, 11, 51, 54, 56, 52]) - assert np.array_equal(test, ref), "test={} != ref={}".format(test, ref) - - logging.info("<< PASS : test_lookup_indices >>") - - -if __name__ == "__main__": - set_verbosity(1) - test_lookup_indices() diff --git a/pisa/core/binning.py b/pisa/core/binning.py deleted file mode 100644 index f2849d055..000000000 --- a/pisa/core/binning.py +++ /dev/null @@ -1,3505 +0,0 @@ -""" -Class to define binning in one dimension (OneDimBinning) and then a container -class (MultiDimBinning) for arbitrarily many of dimensions (one or more). These -classes have many useful methods for working with binning. -""" - -# TODO: include Iterables where only Sequence is allowed now? -# TODO: iterbins, itercoords are _*slow*_. Figure out how to speed these up, if -# that is possible in pure-Python loops... E.g. -# `indices = [i for i in range(mdb.size)]` -# takes 70 ms while -# `coords = [c for c in mdb.itercoords()]` -# takes 10 seconds. -# TODO: Create non-validated version of OneDimBinning.__init__ to make -# iterbins() fast -# TODO: explicitly set is_bin_spacing_log_uniform and -# is_bin_spacing_lin_uniform to FP32 precision (since binning can be -# defined/saved in FP32 but want code able to run in FP64 - - -from __future__ import absolute_import, division - -from collections.abc import Iterable, Mapping, Sequence -from collections import OrderedDict, namedtuple -from copy import copy, deepcopy -from functools import reduce, wraps -from itertools import chain, product -from operator import mul -import re - -import numpy as np - -from pisa import FTYPE, HASH_SIGFIGS, ureg -from pisa.utils.comparisons import interpret_quantity, normQuant, recursiveEquality -from pisa.utils.comparisons import ALLCLOSE_KW -from pisa.utils.format import (make_valid_python_name, text2tex, - strip_outer_dollars) -from pisa.utils.hash import hash_obj -from pisa.utils import jsons -from pisa.utils.log import logging, set_verbosity, tprofile - - -__all__ = ['NAME_FIXES', 'NAME_SEPCHARS', 'NAME_FIXES_REGEXES', - 'basename', '_new_obj', 'is_binning', - 'OneDimBinning', 'MultiDimBinning', - 'test_OneDimBinning', 'test_MultiDimBinning'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -NAME_FIXES = ('tru(e|th)', 'reco(nstruct(ed)?)?') -NAME_SEPCHARS = r'[_\s-]+' -NAME_FIXES_REGEXES = tuple( - [re.compile(NAME_SEPCHARS + p, re.IGNORECASE) for p in NAME_FIXES] - + [re.compile(p + NAME_SEPCHARS, re.IGNORECASE) for p in NAME_FIXES] - + [re.compile(p, re.IGNORECASE) for p in NAME_FIXES] -) - - -# TODO: move this to a centralized utils location -def basename(n): - """Remove "true" or "reco" prefix(es) and/or suffix(es) from binning - name `n` along with any number of possible separator characters. - - * Valid (pre/suf)fix(es): "true", "reco" - * Valid separator characters: "", "_", "-" (any number) - - Parameters - ---------- - n : string or OneDimBinning - Name from which to have pre/suffixes stripped. - - Returns - ------- - basename : string - - Examples - -------- - >>> print(basename('true_energy')) - energy - >>> print(basename('Reconstructed coszen')) - coszen - >>> print(basename('coszen reco')) - coszen - >>> print(basename('energy___truth')) - energy - >>> print(basename('trueenergy')) - energy - >>> print(basename('energytruth')) - energy - - """ - # Type checkingn and conversion - orig_type = type(n) - if isinstance(n, OneDimBinning): - n = n.name - if not isinstance(n, str): - raise ValueError('Unhandled type %s' %orig_type) - # Remove all (pre/suf)fixes and any separator chars - for regex in NAME_FIXES_REGEXES: - n = regex.sub('', n) - return n.strip() - - -def is_binning(something): - """Return True if argument is a PISA binning (of any dimension), False - otherwise""" - return isinstance(something, (OneDimBinning, MultiDimBinning)) - - -# TODO: generalize to any object and move this to a centralized utils location -def _new_obj(original_function): - """Decorator to deepcopy unaltered states into new OneDimBinning object.""" - @wraps(original_function) - def new_function(cls, *args, **kwargs): - """<< docstring will be inherited from wrapped function >>""" - new_state = OrderedDict() - state_updates = original_function(cls, *args, **kwargs) - for attr in cls._attrs_to_create_new: # pylint: disable=protected-access - if attr in state_updates: - new_state[attr] = state_updates[attr] - else: - new_state[attr] = deepcopy(getattr(cls, attr)) - return OneDimBinning(**new_state) - return new_function - - -class OneDimBinning(object): - # pylint: disable=line-too-long - """Histogram-oriented binning specialized to a single dimension. - - If neither `is_lin` nor `is_log` is specified, linear behavior - is assumed (i.e., `is_lin` is set to True). - - Parameters - ---------- - name : str, of length > 0 - Name for this dimension. Must be valid Python name (since it will be - accessed with the dot operator). If not, name will be converted to a - valid Python name. - - tex : str or None - TeX label for this dimension. - - bin_edges : sequence of scalars, or None - Numerical values (optionally including Pint units) that represent the - *edges* of the bins. `bin_edges` needn't be specified if `domain`, - `num_bins`, and optionally `is_log` is specified. Pint units can be - attached to `bin_edges`, but will be converted to `units` if this - argument is specified. - - units : Pint unit or object convertible to Pint unit, or None - If None, units will be read from either `bin_edges` or `domain`, and if - none of these have units, the binning has unit 'dimensionless' - attached. - - is_lin : bool or None - Binning behavior is linear for purposes of resampling, plotting, etc. - Mutually exclusive with `is_log`. If neither `is_lin` or `is_log` is - True (i.e., both are None), default behavior is linear (`is_lin` is set - to True internally). - - is_log : bool or None - Binning behavior is logarithmic for purposes of resampling, plotting, - etc. Mutually exclusive with `is_lin`. If neither `is_lin` or `is_log` - is True (i.e., both are None), default behavior is linear (`is_lin` is - set to True internally). - - domain : length-2 sequence of scalars, or None - Units may be specified. Required along with `num_bins` if `bin_edges` - is not specified (optionally specify `is_log=True` to define the - `bin_edges` to be log-uniform). - - num_bins : int or None - Number of bins. Required along with `domain` if `bin_edges` is not - specified (optionally specify `is_log=True` to define the `bin_edges` - to be log-uniform). - - bin_names : sequence of nonzero-length strings, or None - Strings by which each bin can be identified. This is expected to be - useful when one needs to easily identify bins by name where the actual - numerical values can be non-obvious e.g. the PID dimension. - None is also acceptable if there is no reason to name the bins. - - - Notes - ----- - Consistency is enforced for all redundant parameters passed to the - constructor. - - You can avoid passing `bin_edges` if `num_bins` and `domain` are specified. - Specify `is_lin=True` or `is_log=True` to define the binning to be linear - or logarithmic (but note that if neither is specified as True, linear - behavior is the default). - - Be careful, though, since bin edges will be defined slightly differently - depending on the ``pisa.FTYPE`` defined (PISA_FTYPE environment variable). - - - Examples - -------- - >>> from pisa import ureg - >>> from pisa.core.binning import OneDimBinning - >>> ebins = OneDimBinning(name='energy', is_log=True, - ... num_bins=40, domain=[1, 100]*ureg.GeV) - >>> print(ebins) - OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)) - >>> ebins2 = ebins.to('joule') - >>> print(ebins2) - OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.6021766339999998e-10, 1.602176634e-08] J (behavior is logarithmic)) - >>> czbins = OneDimBinning(name='coszen', - ... is_lin=True, num_bins=4, domain=[-1, 0]) - >>> print(czbins) - OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) - >>> czbins2 = OneDimBinning(name='coszen', - ... bin_edges=[-1, -0.75, -0.5, -0.25, 0]) - >>> czbins == czbins2 - True - - """ - # pylint: enable=line-too-long - - # NOTE: Only one of `is_log` or `is_lin` is technically required for state, - # since it's either one or the other, but these used to imply - # log-_uniform_ and linear-_uniform_ behavior. As nothing fundamnetally - # in the behavior is changed by assuming uniformity, and to keep - # backwards compatibility (including for state / hashes), both are kept - # (for now) as "state" variables. -JLL, April, 2020 - - _attrs_to_create_new = ('name', 'tex', 'bin_edges', 'is_log', 'is_lin', 'bin_names') - - def __init__(self, name, tex=None, bin_edges=None, units=None, domain=None, - num_bins=None, is_lin=None, is_log=None, bin_names=None): - # Basic validation and translation of args; note that iterables are - # converted to sequences later on - if not isinstance(name, str): - raise TypeError('`name` must be a string; got "%s".' %type(name)) - if domain is not None: - assert ( - isinstance(domain, Iterable) - or (isinstance(domain, ureg.Quantity) and domain.size > 1) - ) - if bin_names is not None: - if isinstance(bin_names, str): - bin_names = (bin_names,) - if (isinstance(bin_names, Iterable) - and all(isinstance(n, str) and n - for n in bin_names)): - bin_names = tuple(bin_names) - else: - raise ValueError( - '`bin_names` must either be None or an iterable of' - ' nonzero-length strings.' - ) - if bin_edges is not None: - assert ( - isinstance(bin_edges, Iterable) - or (isinstance(bin_edges, ureg.Quantity) and bin_edges.size > 1) - ) - if domain is not None: - raise ValueError( - 'Both `domain` and `bin_edges` are specified.' - ) - - # Type checking - assert is_lin is None or isinstance(is_lin, bool), str(type(is_lin)) - assert is_log is None or isinstance(is_log, bool), str(type(is_log)) - - if is_lin is None and is_log is None: # neither specified: default to linear - is_lin = True - is_log = not is_lin - - elif is_lin is not None: # is_lin is specified but not is_log - is_log = not is_lin - - elif is_log is not None: # is_log is specified but not is_lin - is_lin = not is_log - - else: # both specified: check consistency - if is_log == is_lin: - raise ValueError( - '`is_log=%s` contradicts `is_lin=%s`' % (is_log, is_lin) - ) - - self._normalize_values = True - self._name = make_valid_python_name(name) - if self._name != name: - logging.warning('Converted `name` "%s" to valid Python: "%s"', - name, self._name) - self._tex = tex - self._basename = None - self._bin_names = bin_names - self._hashable_state = None - self._serializable_state = None - self._normalized_state = None - self._midpoints = None - self._weighted_centers = None - self._edge_magnitudes = None - self._bin_widths = None - self._weighted_bin_widths = None - self._inbounds_criteria = None - - # TODO: define hash based upon conversion of things to base units (such - # that a valid comparison can be made between indentical binnings but - # that use different units). Be careful to round to just less than - # double-precision limits after conversion so that hashes will work out - # to be the same after conversion to the base units. - - self._hash = None - self._edges_hash = None - - # Figure out the units (if any) for each quantity passed in. Precedence - # for units is: - # 1. `units` - # 2. `bin_edges` - # 3. `domain` - # 4. default to units of `ureg.dimensionless` - - if units is not None: - if isinstance(units, ureg.Quantity): - units = units.units - elif not isinstance(units, ureg.Unit): - units = ureg.Unit(units) - units_dimensionality = units.dimensionality - - dimensionless_bin_edges = None - - if bin_edges is not None: - if isinstance(bin_edges, ureg.Quantity): - be_units = bin_edges.units - if units is None: - units = be_units - else: - if be_units.dimensionality != units_dimensionality: - raise ValueError( - '`bin_edges` units %s are incompatible with units' - ' %s.' % (be_units, units) - ) - if be_units != units: - logging.warning( - '`bin_edges` are specified in units of %s' - ' but `units` is specified as %s.' - ' Converting `bin_edges` to the latter.', - be_units, units - ) - bin_edges.ito(units) - dimensionless_bin_edges = bin_edges.magnitude - - elif bin_edges is not None: - dimensionless_bin_edges = np.asarray(bin_edges, dtype=FTYPE) - bin_edges = None - - dimensionless_domain = None - - if domain is not None: - if isinstance(domain, ureg.Quantity): - domain_units = domain.units - if units is None: - units = domain_units - else: - if domain_units.dimensionality != units_dimensionality: - raise ValueError( - '`domain` units %s are incmompatible with units' - ' %s.' % (domain_units, units) - ) - if domain_units != units: - logging.warning( - '`domain` units %s will be converted to' ' %s.', - domain_units, - units, - ) - domain.ito(units) - dimensionless_domain = domain.magnitude - - else: - domain_lower_is_quant = isinstance(domain[0], ureg.Quantity) - domain_upper_is_quant = isinstance(domain[1], ureg.Quantity) - assert domain_lower_is_quant == domain_upper_is_quant - if domain_lower_is_quant: - assert domain[0].dimensionality == domain[1].dimensionality - if domain[1].units != domain[0].units: - domain[1] = domain[1].to(domain[0].units) - dimensionless_domain = (domain[0].magnitude, - domain[1].magnitude) - else: - dimensionless_domain = tuple(domain) - domain = None - - # If no units have been discovered from the input args, assign default - # units - if units is None: - units = ureg.dimensionless - - if dimensionless_bin_edges is None: - if num_bins is None or dimensionless_domain is None: - raise ValueError( - 'If not specifying bin edges explicitly, `domain` and' - ' `num_bins` must be specified (and optionally set' - ' `is_log=True`).' - ) - if is_log: - dimensionless_bin_edges = np.logspace( - np.log10(dimensionless_domain[0]), - np.log10(dimensionless_domain[1]), - num_bins + 1, - dtype=FTYPE, - ) - else: # is_lin - dimensionless_bin_edges = np.linspace( - dimensionless_domain[0], - dimensionless_domain[1], - num_bins + 1, - dtype=FTYPE, - ) - elif dimensionless_domain is not None: - assert dimensionless_domain[0] == dimensionless_bin_edges[0] - assert dimensionless_domain[1] == dimensionless_bin_edges[-1] - - # TODO: should we warn a user if logarithmically- or linearly-uniform - # bin_edges are passed while is_log, is_lin, or the default (is_lin) - # "contradict" this? - - # if not (is_lin or is_log): # infer is_log/is_lin from spacing if not set - # is_lin = self.is_bin_spacing_lin_uniform(dimensionless_bin_edges) - # try: - # is_log = self.is_bin_spacing_log_uniform(dimensionless_bin_edges) - # except ValueError: - # is_log = False - - if dimensionless_domain is None: - dimensionless_domain = (dimensionless_bin_edges[0], - dimensionless_bin_edges[-1]) - - if bin_edges is None: - self._bin_edges = dimensionless_bin_edges * units - else: - self._bin_edges = bin_edges - - if domain is None: - self._domain = dimensionless_domain * units - else: - self._domain = domain - - self._units = units - - # Derive rest of unspecified parameters from bin_edges or enforce - # them if they were specified as arguments to init - if num_bins is None: - num_bins = len(self.bin_edges) - 1 - else: - assert num_bins == len(self.bin_edges) - 1, \ - '%s, %s' %(num_bins, self.bin_edges) - self._num_bins = num_bins - - if (self._bin_names is not None - and len(self._bin_names) != self._num_bins): - raise ValueError( - 'There are %d bins, so there must be %d `bin_names` (or None)' - ' provided; got %d bin name instead: %s.' - % (self._num_bins, self._num_bins, len(self._bin_names), - self._bin_names) - ) - - self._is_log = is_log - self._is_lin = not self._is_log - self._is_irregular = None - - def __repr__(self): - previous_precision = np.get_printoptions()['precision'] - np.set_printoptions(precision=18) - try: - argstrs = [('%s=%r' %item) for item in - self.serializable_state.items()] - r = '%s(%s)' %(self.__class__.__name__, ',\n '.join(argstrs)) - finally: - np.set_printoptions(precision=previous_precision) - return r - - def __str__(self): - lin_reg = "linearly-regular " - log_reg = "logarithmically-regular " - - regularity = None - if self.is_irregular: - # Test for regularity in the other domain - if self.is_lin and self.is_bin_spacing_log_uniform(self.bin_edges): - regularity = log_reg - elif self.is_log and self.is_bin_spacing_lin_uniform(self.bin_edges): - regularity = lin_reg - else: - regularity = log_reg if self.is_log else lin_reg - - if regularity is None or self.num_bins == 1: - edges = 'with edges at [{}]{}'.format( - ', '.join(str(e) for e in self.bin_edges.m), - format(self.bin_edges.u, '~'), - ).strip() - regularity = "" - else: - edges = 'spanning [{}, {}] {:s}'.format( - self.bin_edges[0].magnitude, - self.bin_edges[-1].magnitude, - format(self.units, '~'), - ).strip() - - plural = '' if self.num_bins == 1 else 's' - linlog = 'logarithmic' if self.is_log else 'linear' - - if self.bin_names is None: - bnames = "" - else: - bnames = ', bin_names=[{}]'.format( - ', '.join(f"'{n:s}'" for n in self.bin_names) - ) - - descr = ( - f'{self.num_bins:d} {regularity:s}bin{plural:s} {edges:s}' - f' (behavior is {linlog:s}){bnames:s}' - ) - - return f"{self.__class__.__name__:s}('{self.name:s}', {descr:s})" - - def __pretty__(self, p, cycle): - """Method used by the `pretty` library for formatting""" - if cycle: - p.text('%s(...)' % self.__class__.__name__) - else: - p.begin_group(4, '%s' % self) - p.end_group(4, ')') - - def _repr_pretty_(self, p, cycle): - """Method used by e.g. ipython/Jupyter for formatting""" - return self.__pretty__(p, cycle) - - def __getstate__(self): - """Method invoked during pickling""" - return self.serializable_state - - def __setstate__(self, state): - """Method invoked during unpickling""" - self.__init__(**state) - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - - Parameters - ---------- - filename : str - Filename; must be either a relative or absolute path (*not - interpreted as a PISA resource specification*) - **kwargs - Further keyword args are sent to `pisa.utils.jsons.to_json()` - - See Also - -------- - from_json : Instantiate new OneDimBinning object from the file written - by this method - - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, resource): - """Instantiate a new object from the contents of a JSON file as - formatted by the `to_json` method. - - Parameters - ---------- - resource : str - A PISA resource specification (see pisa.utils.resources) - - See Also - -------- - to_json - - """ - state = jsons.from_json(resource) - return cls(**state) - - def __contains__(self, x): - try: - self.index(x) - except ValueError: - return False - return True - - def index(self, x): - """Return integer index of bin identified by `x`. - - Parameters - ---------- - x : int, string - If int, ensure it is a valid index and return; if string, look for - bin with corresponding name. - - Returns - ------- - idx: int - index of bin corresponding to `x` - - Raises - ------ - ValueError if `x` cannot identify a valid bin - - """ - try: - if isinstance(x, str): - assert self.bin_names is not None - return self.bin_names.index(x) - if isinstance(x, int): - assert 0 <= x < len(self) - return x - raise TypeError('`x` must be either int or string; got %s instead.' - % type(x)) - except (AssertionError, ValueError): - valid_range = [0, len(self)-1] - if self.bin_names is None: - valid_names = '' - else: - valid_names = ' or a valid bin name in %s' % (self.bin_names,) - raise ValueError('Bin corresponding to "%s" could not be located.' - ' Specify an int in %s%s.' - % (x, valid_range, valid_names)) - - def iterbins(self): - """Return an iterator over each bin. The elments returned by the - iterator are each a OneDimBinning object, just containing a single bin. - - Note that for one test, `iterbins` is about 500x slower than - `iteredgetuples`. - - Returns - ------- - bin_iterator - - See Also - -------- - iteredgetuples - Faster but only returns edges of bins, not OneDimBinning objects. - - """ - return (self[i] for i in range(len(self))) - - def iteredgetuples(self): - """Return an iterator over each bin's edges. The elments returned by - the iterator are each a tuple, containing the edges of the bin. Units - are stripped prior to iteration for purposes of speed. - - Returns - ------- - edges_iterator - - See Also - -------- - iterbins - Similar, but returns a OneDimBinning object for each bin; slower - than this method (by as much as 500x in one test) but easier to - work with. - - """ - mags = self.edge_magnitudes - return ((e0, e1) for e0, e1 in zip(mags[:-1], mags[1:])) - - @property - def serializable_state(self): - """OrderedDict containing savable state attributes""" - if self._serializable_state is None: - state = OrderedDict() - state['name'] = self.name - state['bin_edges'] = self.edge_magnitudes - state['units'] = str(self.units) - state['is_log'] = self.is_log - state['is_lin'] = self.is_lin - state['bin_names'] = self.bin_names - self._serializable_state = state - # Since the tex property can be modified, must set every time this - # property is called - self._serializable_state['tex'] = self.tex - return self._serializable_state - - @property - def hashable_state(self): - """OrderedDict containing simplified state attributes (i.e. some state - attributes are represented by their hashes) used for testing equality - between two objects. - - Use `hashable_state` for faster equality checks and `normalized_state` - for inspecting the contents of each state attribute pre-hashing - """ - if self._hashable_state is None: - state = OrderedDict() - state['name'] = self.name - state['edges_hash'] = self.edges_hash - state['is_log'] = self.is_log - state['is_lin'] = self.is_lin - state['bin_names'] = self.bin_names - self._hashable_state = state - return self._hashable_state - - @property - def normalized_state(self): - """OrderedDict containing normalized (base units, and rounded to - appropriate precision) state attributes used for testing equality - between two objects. - - Use `hashable_state` for faster equality checks and `normalized_state` - for inspecting the contents of each state attribute pre-hashing - """ - if self._normalized_state is None: - state = OrderedDict() - state['name'] = self.name - bin_edges = normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS) - state['bin_edges'] = bin_edges - state['is_log'] = self.is_log - state['is_lin'] = self.is_lin - state['bin_names'] = self.bin_names - self._normalized_state = state - return self._normalized_state - - @property - def edge_magnitudes(self): - """Bin edges' magnitudes""" - if self._edge_magnitudes is None: - self._edge_magnitudes = self.bin_edges.magnitude - return self._edge_magnitudes - - @property - def name(self): - """Name of the dimension""" - return self._name - - @property - def basename(self): - """Basename of the dimension, stripping "true", "reco", underscores, - whitespace, etc. from the `name` attribute.""" - if self._basename is None: - self._basename = basename(self.name) - return self._basename - - # TODO: reimplement just the translate-on-input (or not?), but is this a - # performance hit for e.g. iterbins()? That could argue for - # translate-on-output... - - @property - def tex(self): - """string : TeX label""" - if self._tex is None: - return text2tex(self.name) - return self._tex - - @tex.setter - def tex(self, val): - """None or TeX string for dimension; surrounding dollars-signs ($) are - stripped off (and must be added prior to e.g. plotting)""" - assert val is None or isinstance(val, str) - if val is not None: - val = strip_outer_dollars(val) - self._tex = val - - @property - def label(self): - """TeX-formatted axis label, including units (if not dimensionless)""" - if self.tex is None: - name_tex = r'{\rm %s}' % text2tex(self.name) - else: - name_tex = self.tex - - if self.units == ureg.dimensionless: - units_tex = '' - else: - units_tex = r' \; \left( {:~L} \right)'.format(self.units) - - return name_tex + units_tex - - @property - def shape(self): - """tuple : shape of binning, akin to `nump.ndarray.shape`""" - return (self.num_bins,) - - @property - def size(self): - """int : total number of bins""" - return self.num_bins - - @property - def bin_edges(self): - """array : Edges of the bins.""" - return self._bin_edges - - @property - def bin_names(self): - """list of strings or None : Bin names""" - return self._bin_names - - @property - def domain(self): - """array : domain of the binning, (min, max) bin edges""" - if self._domain is None: - bin_edges = self.edge_magnitudes - self._domain = np.array([np.min(bin_edges), - np.max(bin_edges)]) * self.units - return self._domain - - @property - def range(self): - """float : range of the binning, (max-min) bin edges""" - domain = self.domain - return domain[1] - domain[0] - - @property - def units(self): - """pint.Unit : units of the bins' edges""" - return self._units - - @units.setter - def units(self, u): - """str or pint.Unit : units of the bins' edges""" - self.ito(u) - - @property - def num_bins(self): - """int : Number of bins""" - return self._num_bins - - @property - def is_lin(self): - """bool : Whether binning is to be treated in a linear space""" - return self._is_lin - - @is_lin.setter - def is_lin(self, b): - """bool""" - assert isinstance(b, bool) - if b != self._is_lin: - # NOTE: use tuple unpacking to help ensure state is consistent - ( - self._is_lin, - self._is_log, - self._is_irregular, - self._weighted_centers, - self._weighted_bin_widths, - ) = (b, not b, None, None, None) - - @property - def is_log(self): - """bool : Whether binning is to be treated in a log space""" - return self._is_log - - @is_log.setter - def is_log(self, b): - """bool""" - assert isinstance(b, bool) - if b != self._is_log: - # NOTE: use tuple unpacking to help ensure state is consistent - ( - self._is_log, - self._is_lin, - self._is_irregular, - self._weighted_centers, - self._weighted_bin_widths, - ) = (b, not b, None, None, None) - - @property - def is_irregular(self): - """bool : True if bin spacing is not unform in the space defined (i.e., - NOT linearly-uniform if `is_lin` or NOT logarithmically-uniform if - `is_log`).""" - if self._is_irregular is None: - if self.num_bins == 1: - self._is_irregular = False - elif self.is_log: - self._is_irregular = not self.is_bin_spacing_log_uniform(self.bin_edges) - else: # self.is_lin - self._is_irregular = not self.is_bin_spacing_lin_uniform(self.bin_edges) - return self._is_irregular - - @property - def midpoints(self): - """array : Midpoints of the bins: linear average of each bin's - edges.""" - if self._midpoints is None: - self._midpoints = (self.bin_edges[:-1] + self.bin_edges[1:])/2.0 - return self._midpoints - - @property - def weighted_centers(self): - """array : Centers of the bins taking e.g. logarithmic behavior - into account. I.e., if binning is logarithmic, this is **not** - the same `midpoints`, whereas in all other cases, it is identical.""" - if self._weighted_centers is None: - if self.is_log: - self._weighted_centers = np.sqrt(self.bin_edges[:-1] * - self.bin_edges[1:]) - else: - self._weighted_centers = self.midpoints - return self._weighted_centers - - @property - def hash(self): - """int : Hash value based upon less-than-double-precision-rounded - numerical values and any other state (includes name, tex, is_log, and - is_lin attributes). Rounding is done to `HASH_SIGFIGS` significant - figures. - - Set this class attribute to None to keep full numerical precision in - the values hashed (but be aware that this can cause equal things - defined using different unit orders-of-magnitude to hash differently). - - """ - if self._hash is None: - s = self.hashable_state - self._hash = hash_obj(s) - return self._hash - - def rehash(self): - """Force `hash` and `edges_hash` attributes to be recomputed""" - self._hash = None - self._edges_hash = None - _ = self.hash - _ = self.edges_hash - - def __hash__(self): - return self.hash - - @property - def normalize_values(self): - """bool : Whether to normalize quantities' units prior to hashing""" - return self._normalize_values - - @normalize_values.setter - def normalize_values(self, b): - assert isinstance(b, bool) - if b == self._normalize_values: - return - # Invalidate the hash, since the hashing behavior has changed - self._hash = None - self._edges_hash = None - self._normalize_values = b - - @property - def edges_hash(self): - """Hash value based *solely* upon bin edges' values. - - The hash value is obtained on the edges after "normalizing" their - values if `self.normalize_values` is True; see - `pisa.utils.comparsions.normQuant` for details of the normalization - process. - - """ - if self._edges_hash is None: - if self.normalize_values: - bin_edges = normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS) - else: - bin_edges = self.bin_edges - self._edges_hash = hash_obj(bin_edges) - return self._edges_hash - - - @property - def bin_widths(self): - """Absolute widths of bins.""" - if self._bin_widths is None: - self._bin_widths = np.abs(np.diff(self.bin_edges.m)) * self.units - return self._bin_widths - - @property - def weighted_bin_widths(self): - """Absolute widths of bins.""" - if self._weighted_bin_widths is None: - if self.is_log: - self._weighted_bin_widths = ( - np.log(self.edge_magnitudes[1:] / self.edge_magnitudes[:-1]) - ) * ureg.dimensionless - else: - self._weighted_bin_widths = self.bin_widths - return self._weighted_bin_widths - - @property - def inbounds_criteria(self): - """Return string boolean criteria indicating e.g. an event falls within - the limits of the defined binning. - - This can be used for e.g. applying cuts to events. - - See Also - -------- - pisa.core.events.keepInbounds - - """ - if self._inbounds_criteria is None: - be = self.edge_magnitudes - crit = '(%s >= %.15e) & (%s <= %.15e)' % (self.name, min(be), - self.name, max(be)) - self._inbounds_criteria = crit - return self._inbounds_criteria - - def __len__(self): - """Number of bins (*not* number of bin edges).""" - return self.num_bins - - def __mul__(self, other): - if isinstance(other, OneDimBinning): - return MultiDimBinning([self, other]) - if isinstance(other, MultiDimBinning): - return MultiDimBinning(chain([self], other)) - return OneDimBinning(name=self.name, tex=self.tex, - bin_edges=self.bin_edges * other) - - # TODO: if same or contained dimension, modify the current binning OR - # create a smarter MultiDimBinning object that allows for multiple - # disconnected binning regions with arbitrary binning within each - # region - def __add__(self, other): - if isinstance(other, OneDimBinning): - return MultiDimBinning([self, other]) - - if isinstance(other, MultiDimBinning): - return MultiDimBinning(chain([self], other)) - - other = interpret_quantity(other, expect_sequence=True) - - new_bin_edges = self.bin_edges + other - - return OneDimBinning(name=self.name, tex=self.tex, bin_edges=new_bin_edges) - - @_new_obj - def __deepcopy__(self, memo): - """Explicit deepcopy constructor""" - return {} - - @staticmethod - def is_bin_spacing_log_uniform(bin_edges): - """Check if `bin_edges` define a logarithmically-uniform bin spacing. - - Parameters - ---------- - bin_edges : sequence - Fewer than 2 `bin_edges` - raises ValueError - Two `bin_edges` - returns False as a reasonable guess (spacing is - assumed to be linear) - More than two `bin_edges` - whether spacing is linear is computed - - Returns - ------- - bool - - """ - if hasattr(bin_edges, 'magnitude'): - bin_edges = bin_edges.magnitude - bin_edges = np.asarray(bin_edges) - if len(bin_edges) < 3: - raise ValueError('%d bin edge(s) passed; require at least 3 to' - ' determine nature of bin spacing.' - % len(bin_edges)) - with np.errstate(divide='raise', over='raise', under='raise', - invalid='raise'): - try: - log_spacing = bin_edges[1:] / bin_edges[:-1] - except (AssertionError, FloatingPointError, ZeroDivisionError): - return False - if np.allclose(log_spacing, log_spacing[0], **ALLCLOSE_KW): - return True - return False - - @staticmethod - def is_bin_spacing_lin_uniform(bin_edges): - """Check if `bin_edges` define a linearly-uniform bin spacing. - - Parameters - ---------- - bin_edges : sequence - Fewer than 2 `bin_edges` - raises ValueError - Two `bin_edges` - returns True as a reasonable guess - More than two `bin_edges` - whether spacing is linear is computed - - Returns - ------- - bool - - Raises - ------ - ValueError if fewer than 2 `bin_edges` are specified. - - """ - if hasattr(bin_edges, 'magnitude'): - bin_edges = bin_edges.magnitude - bin_edges = np.array(bin_edges) - if len(bin_edges) == 1: - raise ValueError('Single bin edge passed; require at least 2 to' - ' determine nature of bin spacing.') - if not np.all(np.isfinite(bin_edges)): - return False - # Default is to assume linear behavior if only two bin edges are given - if len(bin_edges) == 2: - return True - lin_spacing = np.diff(bin_edges) - if np.allclose(lin_spacing, lin_spacing[0], **ALLCLOSE_KW): - return True - return False - - @staticmethod - def is_binning_ok(bin_edges): - """Check that there are 2 or more bin edges, and that they are - monotonically increasing. - - Parameters - ---------- - bin_edges : sequence - Bin edges to check the validity of - - Returns - ------- - bool, True if binning is OK, False if not - - """ - # Must be at least two edges to define a single bin - if len(bin_edges) < 2: - return False - # Bin edges must be monotonic and strictly increasing - if np.any(np.diff(bin_edges) <= 0): - return False - return True - - # TODO: as of now, only downsampling is allowed. Is this reasonable? - def is_compat(self, other): - """Compatibility -- for now -- is defined by all of self's bin - edges form a subset of other's bin edges (i.e. you can downsample to - get from the other binning to this binning), and the units must be - compatible. - - Note that this might bear revisiting, or redefining just for special - circumstances. - - Parameters - ---------- - other : OneDimBinning - - Returns - ------- - bool - - """ - if self.name != other.name: - logging.trace('Dimension names do not match') - return False - - if self.units.dimensionality != other.units.dimensionality: - logging.trace('Incompatible units') - return False - - # TODO: should we force normalization? - # TODO: Should we use FTYPE_SIGFIGS or # HASH_SIGFIGS? - if self.normalize_values: - my_normed_bin_edges = set( - normQuant(self.bin_edges, sigfigs=HASH_SIGFIGS).magnitude - ) - other_normed_bin_edges = set( - normQuant(other.bin_edges, sigfigs=HASH_SIGFIGS).magnitude - ) - else: - my_normed_bin_edges = set(self.bin_edges.magnitude) - other_normed_bin_edges = set(other.bin_edges.magnitude) - - if my_normed_bin_edges.issubset(other_normed_bin_edges): - return True - - logging.trace('self.bin_edges not a subset of other.bin_edges') - logging.trace('Bins in this map not found in other = %s', - my_normed_bin_edges.difference(other_normed_bin_edges)) - - return False - - def assert_compat(self, other): - """Assert that this binning is compatible with `other`.""" - - if not self.is_compat(other): - raise AssertionError(f"incompatible {self.name} binning") - - @property - @_new_obj - def basename_binning(self): - """Identical binning but named as the basename of this binning. Note - that the `tex` property is not carried over into the new binning.""" - return {'name': self.basename, 'tex': None} - - @property - @_new_obj - def finite_binning(self): - """Identical binning but with infinities in bin edges replaced by - largest/smallest floating-point numbers representable with the current - pisa.FTYPE.""" - float_info = np.finfo(FTYPE) - finite_edges = np.clip(self.edge_magnitudes, a_min=float_info.min, - a_max=float_info.max) - return {'bin_edges': finite_edges} - - @_new_obj - def oversample(self, factor): - """Return a OneDimBinning object oversampled relative to this object's - binning. - - Parameters - ---------- - factor : integer - Factor by which to oversample the binning, with `factor`-times - as many bins (*not* bin edges) as this object has. - - Returns - ------- - new_binning : OneDimBinning - New binning, oversampled from the current binning. - - Raises - ------ - ValueError if illegal value is specified for `factor` - - Notes - ----- - Bin names are _not_ preserved for any `factor` except 1 since it is - ambiguous how names should be propagated. If you wish to have bin - names after oversampling, assign them afterwards. - - """ - if factor < 1 or factor != int(factor): - raise ValueError('`factor` must be integer >= 1; got %s' %factor) - - factor = int(factor) - - if factor == 1: - return self - - if self.is_log: - spacing_func = np.geomspace - else: # is_lin - spacing_func = np.linspace - - old_bin_edges = self.edge_magnitudes - new_bin_edges = [] - for old_lower, old_upper in zip(old_bin_edges[:-1], old_bin_edges[1:]): - thisbin_new_edges = spacing_func(old_lower, old_upper, factor + 1) - - # Use the original lower bin edge to avoid precision issues with - # its version created by `spacing_func` - new_bin_edges.append(old_lower) - - # Add the new bin edges we created in between lower and upper; we - # omit the upper bin edge because it is the first bin edge of the - # next bin - new_bin_edges.extend(thisbin_new_edges[1:-1]) - - # Include the uppermost bin edge from original binning - new_bin_edges.append(old_upper) - - return {'bin_edges': new_bin_edges * self.units, 'bin_names': None} - - # TODO: do something cute with bin names, if they exist? - @_new_obj - def downsample(self, factor): - """Downsample the binning by an integer factor that evenly divides the - current number of bins. - - Parameters - ---------- - factor : int >= 1 - Downsampling factor that evenly divides the current number of - bins. E.g., if the current number of bins is 4, `factor` can be - one of 1, 2, or 4. Note that floats are converted into integers - if `float(factor) == int(factor)`. - - Returns - ------- - new_binning : OneDimBinning - New binning, downsampled from the current binning. - - Raises - ------ - ValueError if illegal value is specified for `factor` - - Notes - ----- - Bin names are _not_ preserved for any `factor` except 1 since it is - ambiguous how names should be propagated. If you wish to have bin - names after downsampling, assign them afterwards. - - """ - if int(factor) != float(factor): - raise ValueError('Floating point `factor` is non-integral.') - factor = int(factor) - - if factor == 1: - return self - - if factor < 1 or factor > self.num_bins: - raise ValueError( - '`factor` %d is out of range; must be >= 1 and <= number of' - ' bins (%d).' % (factor, self.num_bins) - ) - - if self.num_bins % factor != 0: - raise ValueError( - '`factor` %d does not evenly divide number of bins (%d).' - % (factor, self.num_bins) - ) - - return {'bin_edges': self.bin_edges[::factor], - 'bin_names': None} - - def ito(self, units): - """Convert units in-place. Cf. Pint's `ito` method.""" - if units is None: - units = '' - - units = ureg.Unit(units) - if units == self._units: - return - self._units = units - - # Invalidate (expensive) derived properties that rely on units - for attr in ['_inbounds_criteria']: - setattr(self, attr, None) - - # Convert already-defined quantities - attrs = [ - '_bin_edges', - '_domain', - '_midpoints', - '_weighted_centers', - '_bin_widths', - '_edge_magnitudes', - ] - for attr in attrs: - val = getattr(self, attr) - if val is None: - continue - val.ito(units) - - @_new_obj - def to(self, units): # pylint: disable=invalid-name - """Convert bin edges' units to `units`. - - Parameters - ---------- - units : None, string, or pint.Unit - - Returns - ------- - new_binning : OneDimBinning - New binning object whose edges have units `units` - - """ - if units is None: - units = 'dimensionless' - return {'bin_edges': self.bin_edges.to(ureg(str(units)))} - - def __getattr__(self, attr): - return super().__getattribute__(attr) - - # TODO: make this actually grab the bins specified (and be able to grab - # disparate bins, whether or not they are adjacent)... i.e., fill in all - # upper bin edges, and handle the case that it goes from linear or log - # to uneven (or if it stays lin or log, keep that attribute for the - # subselection). Granted, a OneDimBinning object right now requires - # monotonically-increasing and adjacent bins. - - # TODO: make indexing allow for sequence containing a single ellipsis - # TODO: for some reason, this is crazy, crazy slow when indexing with - # ellipsis... why? - # NOTE: mabye we don't care, since using ellipsis (or even an isolated, - # single colon) in a one-dimensional object is a "violation of the - # contract": http://stackoverflow.com/a/118508 - @_new_obj - def __getitem__(self, index): - """Return a new OneDimBinning, sub-selected by `index`. - - Parameters - ---------- - index : int, slice, ellipsis, str, or length-one Sequence - The *bin indices* (not bin-edge indices) to return. Generated - OneDimBinning object must obey the usual rules (monotonic, etc.). - If a str is supplied it must match a name in bin_names - - Returns - ------- - A new OneDimBinning but only with bins selected by `index`. - - """ - # Ellipsis: binninng[...] returns everything - if index is Ellipsis: - return {} - - magnitude = self.edge_magnitudes - units = self.units - orig_index = index - mylen = len(magnitude) - 1 - bin_names = self.bin_names - - # Deal with indexing by name first so as to not break anything else - if isinstance(index, str): - assert bin_names is not None - index = bin_names.index(index) - - # Simple to get all but final bin edge - bin_edges = magnitude[index].tolist() - - if np.isscalar(bin_edges): - bin_edges = [bin_edges] - else: - bin_edges = list(bin_edges) - - # Convert index/indices to positive-number sequence - if isinstance(index, slice): - index = list(range(*index.indices(mylen))) - if isinstance(index, int): - index = [index] - - if isinstance(index, Iterable): - if not isinstance(index, Sequence): - index = list(index) - for bin_index in index: - if isinstance(bin_index, str): - raise ValueError('Slicing by seq of names currently not' - ' supported') - if not index: - raise ValueError('`index` "%s" results in no bins being' - ' specified.' %orig_index) - if len(index) > 1 and not np.all(np.diff(index) == 1): - raise ValueError('Bin indices must be monotonically' - ' increasing and adjacent.') - new_edges = set() - new_names = [] - for bin_index in index: - if bin_index < -mylen or bin_index >= mylen: - raise ValueError( - "Dimension '%s': bin index %s is invalid. Bin index" - " must be >= %+d and <= %+d" - %(self.name, bin_index, -mylen, mylen-1) - ) - edge_ind0 = bin_index % mylen - edge_ind1 = edge_ind0 + 1 - if bin_names is not None: - new_names.append(bin_names[edge_ind0]) - mag0 = magnitude[edge_ind0] - mag1 = magnitude[edge_ind1] - new_edges = new_edges.union((mag0, mag1)) - else: - raise TypeError('Unhandled index type %s' %type(orig_index)) - - if new_names == []: - new_names = None - # Retrieve current state; only bin_edges and bin_names need to be - # updated - new_edges = sorted(new_edges) - new_edges = np.array(new_edges) - new_edges = new_edges * units - return {'bin_edges': new_edges, 'bin_names': new_names} - - def __iter__(self): - return self.iterbins() - - def __eq__(self, other): - if not isinstance(other, OneDimBinning): - return False - return recursiveEquality(self.hashable_state, other.hashable_state) - - def __ne__(self, other): - return not self.__eq__(other) - - -class MultiDimBinning(object): - # pylint: disable=line-too-long - r""" - Multi-dimensional binning object. This can contain one or more - OneDimBinning objects, and all subsequent operations (e.g. slicing) will - act on these in the order they are supplied. - - Note that it is convenient to construct MultiDimBinning objects via the * - operator (which implementes the outer product) from multiple OneDimBinning - objects. See Examples below for details. - - - Parameters - ---------- - dimensions : OneDimBinning or sequence convertible thereto - Dimensions for the binning object. Indexing into the MultiDimBinning - object follows the order in which dimensions are provided. - - - See Also - -------- - OneDimBinning : each item that is not a OneDimBinning object is passed to - this class to be instantiated as such. - - - Examples - -------- - >>> from pisa import ureg - >>> from pisa.core.binning import MultiDimBinning, OneDimBinning - >>> ebins = OneDimBinning(name='energy', is_log=True, - ... num_bins=40, domain=[1, 100]*ureg.GeV) - >>> czbins = OneDimBinning(name='coszen', - ... is_lin=True, num_bins=4, domain=[-1, 0]) - >>> mdb = ebins * czbins - >>> print(mdb) - MultiDimBinning( - OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)), - OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) - ) - - >>> print(mdb.energy) - OneDimBinning('energy', 40 logarithmically-regular bins spanning [1.0, 100.0] GeV (behavior is logarithmic)) - >>> print(mdb[0, 0]) - MultiDimBinning( - OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.0, 1.1220184543019633]GeV (behavior is logarithmic)), - OneDimBinning('coszen', 1 linearly-regular bin with edges at [-1.0, -0.75] (behavior is linear)) - ) - >>> print(mdb.slice(energy=2)) - MultiDimBinning( - OneDimBinning('energy', 1 logarithmically-regular bin with edges at [1.2589254117941673, 1.4125375446227544]GeV (behavior is logarithmic)), - OneDimBinning('coszen', 4 linearly-regular bins spanning [-1.0, 0.0] (behavior is linear)) - ) - >>> smaller_binning = mdb[0:2, 0:3] - >>> map = smaller_binning.ones(name='my_map') - >>> print(map) - Map(name='my_map', - tex='{\\rm my\\_map}', - full_comparison=False, - hash=None, - parent_indexer=None, - binning=MultiDimBinning( - OneDimBinning('energy', 2 logarithmically-regular bins spanning [1.0, 1.2589254117941673] GeV (behavior is logarithmic)), - OneDimBinning('coszen', 3 linearly-regular bins spanning [-1.0, -0.25] (behavior is linear)) - ), - hist=array([[1., 1., 1.], - [1., 1., 1.]])) - - """ - # pylint: enable=line-too-long - def __init__(self, dimensions, name=None, mask=None): - self.__map_class = None - - if isinstance(dimensions, OneDimBinning): - dimensions = [dimensions] - if not isinstance(dimensions, Sequence): - if isinstance(dimensions, Mapping): - if len(dimensions) == 1 and hasattr(dimensions, 'dimensions'): - dimensions = dimensions['dimensions'] - dimensions = [dimensions] - elif isinstance(dimensions, Iterable): - pass - else: - raise TypeError('`dimensions` unhandled type: %s' - % type(dimensions)) - tmp_dimensions = [] - for obj_num, obj in enumerate(dimensions): - if isinstance(obj, OneDimBinning): - one_dim_binning = obj - elif isinstance(obj, Mapping): - one_dim_binning = OneDimBinning(**obj) - else: - raise TypeError('Argument/object #%d unhandled type: %s' - %(obj_num, type(obj))) - tmp_dimensions.append(one_dim_binning) - self._dimensions = tuple(tmp_dimensions) - self._names = None - self._basenames = None - self._hash = None - self._num_dims = None - self._size = None - self._shape = None - self._hashable_state = None - self._mask_hash = None - self._coord = None - self._name = name - - # Handle masking - self._init_mask(mask) - - - def _init_mask(self, mask) : - ''' - Initialize the bin mask. This can either be specified as: - (1) an array matching the bin dimensions with values True/False (e.g. a `mask`), where False means "masked off" - (2) A list of bin indices to mask off - ''' - - #TODO helper functions: get coords of masked bins, etc - - # Bail out if no mask provided - if mask is None : - self._mask = None - return - - # Check format of input `mask` arg - if isinstance(mask, np.ndarray) and (mask.dtype == bool) : # Is it a boolean array (e.g. a mask)? - - # - # "Mask" case - # - - # Just use the mask as provided - # Do some checks first - assert self.shape == mask.shape - - - else : - - # - # "List of indices" case - # - - # Get the indices - indices = mask - - # Init a mask with all True - mask = np.full(self.shape, True, dtype=bool) - - # Loop over indices and set those mask elements to False - for idx in indices : - try: # Handle index formatting and checks - mask[idx] = False - except ValueError: - raise ValueError(f"Bin mask index {idx} not valid for binning shape {self.shape}") - - # Done, store the mask - self._mask = mask - - - @property - def name(self): - """Name of the dimension""" - return self._name - - - def __repr__(self): - previous_precision = np.get_printoptions()['precision'] - np.set_printoptions(precision=18) - try: - argstrs = [('%s=%r' %item) for item in - self.serializable_state.items()] - r = '%s(%s)' %(self.__class__.__name__, ',\n '.join(argstrs)) - finally: - np.set_printoptions(precision=previous_precision) - return r - - def __str__(self): - b = ' x '.join(['%i (%s)'%(dim.num_bins, dim.name) for dim in self._dimensions]) - return '"%s":\n%s'%(self.name, b) - - def __pretty__(self, p, cycle): - """Method used by the `pretty` library for formatting""" - if cycle: - p.text('%s(...)' % self.__class__.__name__) - else: - p.begin_group(4, '%s([' % self.__class__.__name__) - for n, dim in enumerate(self): - p.breakable() - p.pretty(dim) - if n < len(self)-1: - p.text(',') - p.end_group(4, '])') - - def _repr_pretty_(self, p, cycle): - """Method used by e.g. ipython/Jupyter for formatting""" - return self.__pretty__(p, cycle) - - def __getstate__(self): - """Method invoked during pickling""" - return self.serializable_state - - def __setstate__(self, state): - """Method invoked during unpickling""" - self.__init__(**state) - - @property - def _map_class(self): - if self.__map_class is None: - from pisa.core.map import Map # pylint: disable=wrong-import-position - self.__map_class = Map - return self.__map_class - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - - - Parameters - ---------- - filename : str - Filename; must be either a relative or absolute path (*not - interpreted as a PISA resource specification*) - - **kwargs - Further keyword args are sent to `pisa.utils.jsons.to_json()` - - - See Also - -------- - from_json - Instantiate new object from the file written by this method - pisa.utils.jsons.to_json - - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, resource): - """Instantiate a new MultiDimBinning object from a JSON file. - - The format of the JSON is generated by the `MultiDimBinning.to_json` - method, which converts a MultiDimBinning object to basic types and - numpy arrays are converted in a call to `pisa.utils.jsons.to_json`. - - Parameters - ---------- - resource : str - A PISA resource specification (see pisa.utils.resources) - - See Also - -------- - to_json - pisa.utils.jsons.to_json - - """ - state = jsons.from_json(resource) - return cls(**state) - - @property - def names(self): - """list of strings : names of each dimension contained""" - if self._names is None: - self._names = [dim.name for dim in self] - return self._names - - @property - def basenames(self): - """List of binning names with prefixes and/or suffixes along with any - number of possible separator characters removed. See function - `basename` for detailed specifications.""" - if self._basenames is None: - self._basenames = [b.basename for b in self] - return self._basenames - - @property - def basename_binning(self): - """Identical binning but with dimensions named by their basenames. - Note that the `tex` properties for the dimensions are not carried over - into the new binning.""" - return MultiDimBinning(d.basename_binning for d in self) - - @property - def finite_binning(self): - """Identical binning but with infinities in bin edges replaced by - largest/smallest floating-point numbers representable with the current - pisa.FTYPE.""" - return MultiDimBinning(d.finite_binning for d in self) - - @property - def dimensions(self): - """tuple of OneDimBinning : each dimension's binning in a list""" - return self._dimensions - - @property - def dims(self): - """tuple of OneDimBinning : shortcut for `dimensions`""" - return self._dimensions - - def iterdims(self): - """Iterator over contained `dimensions`, each a OneDimBinning""" - return iter(self._dimensions) - - @property - def num_dims(self): - """int : number of dimensions""" - if self._num_dims is None: - self._num_dims = len(self._dimensions) - return self._num_dims - - @property - def mask(self): - """array : return the bin mask""" - return self._mask - - @property - def shape(self): - """tuple : shape of binning, akin to `nump.ndarray.shape`""" - if self._shape is None: - self._shape = tuple(b.num_bins for b in self._dimensions) - return self._shape - - @property - def size(self): - """int : total number of bins""" - if self._size is None: - self._size = reduce(mul, self.shape) - return self._size - - @property - def coord(self): - """namedtuple : coordinate for indexing into binning by dim names""" - if self._coord is None: - self._coord = namedtuple('coord', self.names) - return self._coord - - @property - def normalize_values(self): - """bool : Normalize quantities' units prior to hashing""" - nv = [dim.normalize_values for dim in self] - if not all(x == nv[0] for x in nv): - raise ValueError( - 'Contained dimensions have `normalize_values` both True and' - ' False. Set `normalize_values` to either True or False on' - ' this MultiDimBinning object to force consistency among' - ' contained OneDimBinning objects.' - ) - - @normalize_values.setter - def normalize_values(self, b): - for dim in self: - dim.normalize_values = b - - @property - def mask_hash(self): - """Hash value based *solely* upon the mask. - """ - if self._mask_hash is None: - self._mask_hash = hash_obj(self.mask) - return self._mask_hash - - @property - def serializable_state(self): - """Attributes of the object that are stored to disk. Note that - attributes may be returned as references to other objects, so to - prevent external modification of those objects, the user must call - deepcopy() separately on the returned OrderedDict. - - Returns - ------- - state dict : OrderedDict - can be passed to instantiate a new MultiDimBinning via - `MultiDimBinning(**state)` - - """ - - d = OrderedDict({'dimensions': [d.serializable_state for d in self]}) - d['name'] = self.name - d['mask'] = self.mask - return d - - @property - def hashable_state(self): - """Everything necessary to fully describe this object's state. Note - that objects may be returned by reference, so to prevent external - modification, the user must call deepcopy() separately on the returned - OrderedDict. - - Returns - ------- - state : OrderedDict that can be passed to instantiate a new - MultiDimBinning via MultiDimBinning(**state) - - """ - if self._hashable_state is None: - - state = OrderedDict() - # TODO: Shouldn't order matter? - #state['dimensions'] = [self[name]._hashable_state - # for name in sorted(self.names)] - state['dimensions'] = [d.hashable_state for d in self] - state['name'] = self.name - - mask_hash = self.mask_hash - if mask_hash is not None : - state['mask_hash'] = mask_hash - - self._hashable_state = state - - return self._hashable_state - - @property - def normalized_state(self): - """OrderedDict containing normalized (base units, and rounded to - appropriate precision) state attributes used for testing equality - between two objects. - - Use `hashable_state` for faster equality checks and `normalized_state` - for inspecting the contents of each state attribute pre-hashing - """ - state = OrderedDict() - state['dimensions'] = [d.normalized_state for d in self] - state['mask'] = self.mask - return state - - @property - def hash(self): - """Unique hash value for this object""" - if self._hash is None: - self._hash = hash_obj(self.hashable_state) - return self._hash - - def __hash__(self): - return self.hash - - @property - def edges_hash(self): - """int : hash on the list of hashes for each dimension's edge values""" - return hash_obj([d.edges_hash for d in self]) - - @property - def bin_edges(self): - """Return a list of the contained dimensions' bin_edges that is - compatible with the numpy.histogramdd `hist` argument.""" - return [d.bin_edges for d in self] - - @property - def is_irregular(self): - """Returns `True` if any of the 1D binnings is irregular.""" - return np.any([d.is_irregular for d in self]) - - @property - def is_lin(self): - """Returns `True` iff all dimensions are linear.""" - return np.all([d.is_lin for d in self]) - - @property - def is_log(self): - """Returns `True` iff all dimensions are log.""" - return np.all([d.is_log for d in self]) - - @property - def domains(self): - """Return a list of the contained dimensions' domains""" - return [d.domain for d in self] - - @property - def midpoints(self): - """Return a list of the contained dimensions' midpoints""" - return [d.midpoints for d in self] - - @property - def weighted_centers(self): - """Return a list of the contained dimensions' weighted_centers (e.g. - equidistant from bin edges on logarithmic scale, if the binning is - logarithmic; otherwise linear). Access `midpoints` attribute for - always-linear alternative.""" - return [d.weighted_centers for d in self] - - @property - def num_bins(self): - """ - Return a list of the contained dimensions' num_bins. - Note that this does not accpunt for any bin mask (since it is computed per dimension) - """ - return [d.num_bins for d in self] - - @property - def tot_num_bins(self): - """ - Return total number of bins. - If a bin mask is used, this will only count bins that are not masked off - """ - if self.mask is None : - return np.product(self.shape) - else : - return np.sum(self.mask.astype(int)) - - @property - def units(self): - """list : Return a list of the contained dimensions' units""" - return [d.units for d in self] - - @units.setter - def units(self, *args): - """sequence or *args containing units for each contained dim""" - self.ito(*args[0]) - - @property - def inbounds_criteria(self): - """Return string boolean criteria indicating e.g. an event falls within - the limits of the defined binning. - - This can be used for e.g. applying cuts to events. - - See Also - -------- - pisa.core.events.keepEventsInBins - - """ - crit = '(%s)' %(' & '.join(dim.inbounds_criteria for dim in self)) - return crit - - def index(self, dim, use_basenames=False): - """Find dimension implied by `dim` and return its integer index. - - Parameters - ---------- - dim : int, string, OneDimBinning - An integer index, dimesion name, or identical OneDimBinning object - to locate within the contained dimensions - - use_basenames : bool - Dimension names are only compared after pre/suffixes are stripped, - allowing for e.g. `dim`='true_energy' to find 'reco_energy'. - - Returns - ------- - idx : integer - index of the dimension corresponding to `dim` - - Raises - ------ - ValueError if `dim` cannot be found - - """ - names = self.basenames if use_basenames else self.names - if isinstance(dim, OneDimBinning): - d = dim.basename if use_basenames else dim.name - try: - idx = names.index(d) - except ValueError: - what = 'index' - raise ValueError( - 'Dimension %s not present. Valid dimensions are in range %s' - %(d, [0, len(self)-1]) - ) - elif isinstance(dim, str): - d = basename(dim) if use_basenames else dim - try: - idx = names.index(d) - except ValueError: - what = 'basename' if use_basenames else 'name' - raise ValueError( - "Dimension %s '%s' not present. Valid dimension %ss are %s" - %(what, d, what, names) - ) - elif isinstance(dim, int): - if dim < 0 or dim >= len(self): - raise ValueError( - 'Dimension %d does not exist. Valid dimensions indices' - ' are in the range %s.' %(dim, [0, len(self)-1]) - ) - idx = dim - else: - raise TypeError('Unhandled type for `dim`: "%s"' %type(dim)) - return idx - - def remove(self, dims): - """Remove dimensions. - - Parameters - ---------- - dims : str, int, or sequence thereof - Dimensions to be removed - - Returns - ------- - binning : MultiDimBinning - Identical binning as this but with `dims` removed. - - """ - if isinstance(dims, (str, int)): - dims = [dims] - - keep_idx = list(range(len(self))) - for dim in dims: - idx = self.index(dim) - keep_idx.remove(idx) - - keep_dims = [deepcopy(self.dimensions[idx]) for idx in keep_idx] - return MultiDimBinning(keep_dims) - - # TODO: add *args to handle positional indexing (?) (also would need to - # add this to `slice` method if implemented. - def indexer(self, **kwargs): - """Any dimension index/slice not specified by name in kwargs will - default to ":" (all elements). - - Parameters - --------- - **kwargs - kwargs are names of dimension(s) and assigned to these are either - an integer index into that dimension or a Python `slice` object for - that dimension. See examples below for details. - - Returns - ------- - indexer : tuple - - See Also - -------- - broadcast - Assignment of a one-dimensional array to a higher-dimensional array - is simplified greatly by using `broadcast` in conjunction with - `indexer` or `pisa.core.map.Map.slice`. See examples in - docs for `broadcast`. - broadcaster - Similar to `broadcast`, but returns a tuple that can be applied to - broadcast any one-dimensional array. - slice - Apply the `indexer` returned by this method to this MultiDimBinning - object, returning a new MultiDimBinning object. - pisa.core.map.Map.slice - Same operation, but slices a Map object by dimension-name - (internally, calls `indexer`). - - Examples - -------- - >>> from pisa import ureg - >>> from pisa.core.binning import MultiDimBinning, OneDimBinning - >>> ebins = OneDimBinning(name='energy', is_log=True, - ... num_bins=40, domain=[1, 80]*ureg.GeV) - >>> czbins = OneDimBinning(name='coszen', - ... is_lin=True, num_bins=4, domain=[-1, 0]) - >>> mdb = ebins * czbins - >>> print(mdb.indexer(energy=0)) - (0, slice(None, None, None)) - - Omitting a dimension (coszen in the above) is equivalent to slicing - with a colon (i.e., `(0, slice(None))`): - - >>> print(mdb.indexer(energy=0, coszen=slice(None))) - (0, slice(None, None, None)) - - >>> print(mdb.indexer(energy=slice(None), coszen=1)) - (slice(None, None, None), 1) - - Now create an indexer to use on a Numpy array: - - >>> x = np.random.RandomState(0).uniform(size=mdb.shape) - >>> indexer = mdb.indexer(energy=slice(0, 5), coszen=1) - >>> print(x[indexer]) - [0.71518937 0.64589411 0.38344152 0.92559664 0.83261985] - - """ - indexer = [] - for dim in self.dims: - if dim.name in kwargs: - val = kwargs[dim.name] - if isinstance(val, str): - val = dim.index(val) - indexer.append(val) - else: - indexer.append(slice(None)) - return tuple(indexer) - - def slice(self, **kwargs): - """Slice the binning by dimension name. Any dimension/index not - specified by name in kwargs will default to ":" (all bins). - - Uses `indexer` internally to define the indexing tuple. - - Returns - ------- - sliced_binning : MultiDimBinning - - """ - return self[self.indexer(**kwargs)] - - def broadcast(self, a, from_dim, to_dims): - """Take a one-dimensional array representing one input dimension and - broadcast it across some number of output dimensions. - - Parameters - ---------- - a : 1D array - Data from the `from_dim` dimension. `a` must have same length as - the dimension it comes from (or Numpy must be able to automatically - cast it into this dimension). - - from_dim : string - Name of dimension that the data in `a` comes from. - - to_dims : string or iterable of strings - Dimension(s) to cast `a` into. - - Returns - ------- - a_broadcast : array - Broadcast version of `a` - - See Also - -------- - broadcaster - The method used internally to derive the tuple used to broadcast - the array. This can be used directly to return the broadcaster for - use on other Maps or Numpy arrays. - - """ - assert isinstance(a, np.ndarray) - a_shape = a.shape - assert len(a_shape) == 1 - return a[self.broadcaster(from_dim=from_dim, to_dims=to_dims)] - - def broadcaster(self, from_dim, to_dims): - """Generate an indexder that, if applied to a one-dimensional array - representing data from one dimension, broadcasts that array into some - number of other dimensions. - - Parameters - ---------- - from_dim : string - Name of dimension that the data in comes from. - - to_dims : string or iterable of strings - Dimension(s) to cast into. - - Returns - ------- - bcast : tuple - Tuple that can be applied to a Numpy array for purposes of - broadcasting it. E.g. use as `np.array([0,1,2])[bcast]`. - - """ - if isinstance(to_dims, str): - to_dims = [to_dims] - - bcast = [] - for name in self.names: - if name == from_dim: - bcast.append(slice(None)) - elif name in to_dims: - bcast.append(np.newaxis) - - return tuple(bcast) - - def iterbins(self): - """Return an iterator over each N-dimensional bin. The elments returned - by the iterator are each a MultiDimBinning, just containing a single - bin. - - Returns - ------- - bin_iterator - - See Also - -------- - index2coord - convert the (flat) index to multi-dimensional coordinate, which is - useful when using e.g. `enumerate(iterbins)` - - """ - return (MultiDimBinning(dims) for dims in product(*self.dims)) - - def iteredgetuples(self): - """Return an iterator over each bin's edges. The elments returned by - the iterator are a tuple of tuples, where the innermost tuples - correspond to each dimension (in the order they're defined here). - - Units are stripped prior to iteration for purposes of speed. - - Note that this method is, according to one simple test, about 5000x - faster than `iterbins`. - - Returns - ------- - edges_iterator - - See Also - -------- - iterbins - Similar, but returns a OneDimBinning object for each bin. This is - slower that `iteredgetuples` but easier to work with. - - """ - return product(*(dim.iteredgetuples() for dim in self.dims)) - - def itercoords(self): - """Return an iterator over each N-dimensional coordinate into the - binning. The elments returned by the iterator are each a namedtuple, - which can be used to directly index into the binning. - - Returns - ------- - coord_iterator - - See Also - -------- - iterbins - Iterator over each bin - index2coord - convert the (flat) index to multi-dimensional coordinate, which is - useful when using e.g. `enumerate(iterbins)` - - """ - return (self.index2coord(i) for i in range(self.size)) - - def index2coord(self, index): - """Convert a flat index into an N-dimensional bin coordinate. - - Useful in conjunction with `enumerate(iterbins)` - - Parameters - ---------- - index : integer - The flat index - - Returns - ------- - coord : self.coord namedtuple - Coordinates are in the same order as the binning is here defined - and each coordinate is named by its corresponding dimension. - Therefore integer indexing into `coord` as well as named indexing - are possible. - - """ - coord = [] - quot = index - for dim_length in self.shape[::-1]: - quot, rem = divmod(quot, dim_length) - coord.append(rem) - return self.coord(*coord[::-1]) # pylint: disable=not-callable - - # TODO: examples! - def reorder_dimensions(self, order, use_deepcopy=False, - use_basenames=False): - """Return a new MultiDimBinning object with dimensions ordered - according to `order`. - - Parameters - ---------- - order : MultiDimBinning or sequence of string, int, or OneDimBinning - Order of dimensions to use. Strings are interpreted as dimension - basenames, integers are interpreted as dimension indices, and - OneDimBinning objects are interpreted by their `basename` - attributes (so e.g. the exact binnings in `order` do not have to - match this object's exact binnings; only their basenames). Note - that a MultiDimBinning object is a valid sequence type to use for - `order`. - - Notes - ----- - Dimensions specified in `order` that are not in this object are - ignored, but dimensions in this object that are missing in `order` - result in an error. - - Returns - ------- - MultiDimBinning object with reordred dimensions. - - Raises - ------ - ValueError if dimensions present in this object are missing from - `order`. - - Examples - -------- - >>> b0 = MultiDimBinning(...) - >>> b1 = MultiDimBinning(...) - >>> b2 = b0.reorder_dimensions(b1) - >>> print(b2.binning.names) - - """ - if hasattr(order, 'binning') and isinstance(order.binning, - MultiDimBinning): - order = order.binning.dims - elif isinstance(order, MultiDimBinning): - order = order.dims - - indices = [] - for dim in order: - try: - idx = self.index(dim, use_basenames=use_basenames) - except ValueError: - continue - indices.append(idx) - if set(indices) != set(range(len(self))): - raise ValueError( - 'Invalid `order`: Only a subset of the dimensions present' - ' were specified. `order`=%s, but dimensions=%s' - %(order, self.names) - ) - if use_deepcopy: - new_dimensions = [deepcopy(self._dimensions[n]) for n in indices] - else: - new_dimensions = [self._dimensions[n] for n in indices] - new_binning = MultiDimBinning(new_dimensions) - return new_binning - - def is_compat(self, other): - """Check if another binning is compatible with this binning. - - Note that for now, only downsampling is allowed from other to this, and - not vice versa. - - Parameters - ---------- - other : MultiDimBinning - - Returns - ------- - is_compat : bool - - """ - if not set(self.names) == set(other.names): - logging.trace('dimension names do not match') - return False - - for name in self.names: - if not self[name].is_compat(other[name]): - return False - - return True - - def oversample(self, *args, **kwargs): - """Return a MultiDimBinning object oversampled relative to this one. - - Parameters - ---------- - *args : each factor an int - Factors by which to oversample the binnings. There must either be - one factor (one arg)--which will be broadcast to all dimensions--or - there must be as many factors (args) as there are dimensions. - If positional args are specified (i.e., non-kwargs), then kwargs - are forbidden. For more detailed control, use keyword arguments to - specify the dimension(s) to be oversampled and their factors. - - **kwargs : name=factor pairs - Dimensions not specified default to oversample factor of 1 (i.e., - no oversampling) - - Returns - ------- - new_binning : MultiDimBinning - New binning, oversampled from the current binning. - - Notes - ----- - You can either specify oversmapling by passing in args (ordered values, - no keywords) or kwargs (order doesn't matter, but uses keywords), but - not both. - - Specifying simple args (no keywords) requires either a single scalar - (in which case all dimensions will be oversampled by the same factor) - or one scalar per dimension (which oversamples the dimensions in the - order specified). - - Specifying keyword args is far more explicit (and general), where each - dimension's oversampling can be specified by name=factor pairs, but not - every dimension must be specified (where no oversampling is applied to - unspecified dimensions). - - See Also - -------- - downsample - Similar to this, but downsample the MultiDimBinning - - OneDimBinning.oversample - Oversample a OneDimBinning object; this method is called to - actually perform the oversampling for each dimension within this - MultiDimBinning object - - OneDimBinning.downsample - Same but downsample for OneDimBinning - - Examples - -------- - >>> x = OneDimBinning('x', bin_edges=[0, 1, 2]) - >>> y = OneDimBinning('y', bin_edges=[0, 20]) - >>> mdb = x * y - - The following are all equivalent: - - >>> print(mdb.oversample(2)) - MultiDimBinning( - OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), - OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) - ) - >>> print(mdb.oversample(2, 2)) - MultiDimBinning( - OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), - OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) - ) - >>> print(mdb.oversample(x=2, y=2)) - MultiDimBinning( - OneDimBinning('x', 4 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), - OneDimBinning('y', 2 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) - ) - - But with kwargs, you can specify only the dimensions you want to - oversample, and the other dimension(s) remain unchanged: - - >>> print(mdb.oversample(y=5)) - MultiDimBinning( - OneDimBinning('x', 2 linearly-regular bins spanning [0.0, 2.0] (behavior is linear)), - OneDimBinning('y', 5 linearly-regular bins spanning [0.0, 20.0] (behavior is linear)) - ) - - """ - - assert self.mask is None, "`oversample` function does not currenty support bin masking" - - if args: - assert len(args) in [1, len(self)] - elif kwargs: - for name in self.names: - if name not in kwargs: - kwargs[name] = 1 - factors = self._args_kwargs_to_list(*args, **kwargs) - new_binning = [dim.oversample(f) - for dim, f in zip(self._dimensions, factors)] - return MultiDimBinning(new_binning) - - def downsample(self, *args, **kwargs): - """Return a Binning object downsampled relative to this binning. - - Parameters - ---------- - *args : each factor an int - Factors by which to downsample the binnings. There must either be - one factor (one arg)--which will be broadcast to all dimensions--or - there must be as many factors (args) as there are dimensions. - If positional args are specified (i.e., non-kwargs), then kwargs - are forbidden. - - **kwargs : name=factor pairs - - Returns - ------- - new_binning : MultiDimBinning - New binning, downsampled from the current binning. - - Notes - ----- - Can either specify downsampling by passing in args (ordered values, no - keywords) or kwargs (order doesn't matter, but uses keywords), but not - both. - - See Also - -------- - oversample - Oversample (upsample) a the MultiDimBinning - - OneDimBinning.downsample - The method actually called to perform the downsampling for each - OneDimBinning within this MultiDimBinning object. - - OneDimBinning.oversample - Same, but oversample (upsample) a OneDimBinning object - - """ - - assert self.mask is None, "`downsample` function does not currenty support bin masking" - - if args: - assert len(args) in [1, len(self)] - elif kwargs: - for name in self.names: - if name not in kwargs: - kwargs[name] = 1 - factors = self._args_kwargs_to_list(*args, **kwargs) - new_binning = [dim.downsample(f) - for dim, f in zip(self._dimensions, factors)] - return MultiDimBinning(new_binning) - - def assert_array_fits(self, array): - """Check if a 2D array of values fits into the defined bins (i.e., has - the exact shape defined by this binning). - - Parameters - ---------- - array : 2D array (or sequence-of-sequences) - - Returns - ------- - fits : bool, True if array fits or False otherwise - - Raises - ------ - ValueError if array shape does not match the binning shape - - """ - if array.shape != self.shape: - raise ValueError( - 'Array shape %s does not match binning shape %s' - % (array.shape, self.shape) - ) - - def assert_compat(self, other): - """Check if a (possibly different) binning can map onto the defined - binning. Allows for simple re-binning schemes (but no interpolation). - - Parameters - ---------- - other : Binning or container with attribute "binning" - - Returns - ------- - compat : bool - - """ - if not isinstance(other, MultiDimBinning): - for val in other.__dict__.values(): - if isinstance(val, MultiDimBinning): - other = val - break - assert isinstance(other, MultiDimBinning), str(type(other)) - if other == self: - return True - for my_dim, other_dim in zip(self, other): - if not my_dim.assert_compat(other_dim): - return False - return True - - def squeeze(self): - """Remove any singleton dimensions (i.e. that have only a single bin). - Analagous to `numpy.squeeze`. - - Returns - ------- - MultiDimBinning with only non-singleton dimensions - - """ - - assert self.mask is None, "`squeeze` function does not currenty support bin masking" - - return MultiDimBinning(d for d in self if len(d) > 1) - - def _args_kwargs_to_list(self, *args, **kwargs): - """Take either args or kwargs (but not both) and convert into a simple - sequence of values. Broadcasts a single arg to all dimensions.""" - if not np.logical_xor(len(args), len(kwargs)): - raise ValueError('Either args (values specified by order and not' - ' specified by name) or kwargs (values specified' - ' by name=value pairs) can be used, but not' - ' both.') - - if len(args) == 1: - return [args[0]]*self.num_dims - - if len(args) > 1: - if len(args) != self.num_dims: - raise ValueError('Specified %s args, but binning is' - ' %s-dim.' %(len(args), self.num_dims)) - return args - - if set(kwargs.keys()) != set(self.names): - raise ValueError('Specified dimensions "%s" but this has' - ' dimensions "%s"' %(sorted(kwargs.keys()), - self.names)) - return [kwargs[name] for name in self.names] - - def ito(self, *args, **kwargs): - """Convert units in-place. Cf. Pint's `ito` method.""" - units_list = self._args_kwargs_to_list(*args, **kwargs) - for dim, units in zip(self.iterdims(), units_list): - dim.ito(units) - - def to(self, *args, **kwargs): # pylint: disable=invalid-name - """Convert the contained dimensions to the passed units. Unspecified - dimensions will be omitted. - - """ - units_list = self._args_kwargs_to_list(*args, **kwargs) - new_binnings = [dim.to(units) - for dim, units in zip(self.iterdims(), units_list)] - return MultiDimBinning(new_binnings) - - def meshgrid(self, entity, attach_units=True): - """Apply NumPy's meshgrid method on various entities of interest. - - Parameters - ---------- - entity : string - Can be any attribute of OneDimBinning that returns a 1D array with - units. E.g., one of 'midpoints', 'weighted_centers', 'bin_edges', - 'bin_widths', or 'weighted_bin_widths' - - attach_units : bool - Whether to attach units to the result (can save computation time by - not doing so). - - Returns - ------- - [X1, X2,..., XN] : list of numpy ndarray or Pint quantities of the same - One ndarray or quantity is returned per dimension; see docs for - `numpy.meshgrid` for details - - See Also - -------- - numpy.meshgrid - - """ - entity = entity.lower().strip() - - arrays = [] - units = [] - for dim in self.iterdims(): - try: - quantity_array = getattr(dim, entity) - except AttributeError: - logging.error( - "Dimension %s does not contain entity '%s'", dim.name, entity - ) - raise - if attach_units: - units.append(quantity_array.units) - arrays.append(quantity_array.magnitude) - - # NOTE: numpy versions prior to 1.13.0, meshgrid returned float64 even - # if inputs are float32 to mesghrid. Use `astype` as a fix. Note that - # since `astype` already creates a copy of the array even if dtype of - # input is the same, setting `copy` to False is ok in the argument to - # meshgrid; i.e., if a user modifies an element of the returned array, - # it should not affect the original `entity` from which the meshgrid - # was generated. - mg = [a.astype(FTYPE) for a in np.meshgrid(*arrays, indexing='ij', copy=False)] - - if attach_units: - return [m*u for m, u in zip(mg, units)] - - return mg - - # TODO: modify technique depending upon grid size for memory concerns, or - # even take a `method` argument to force method manually. - def bin_volumes(self, attach_units=True): - """Bin "volumes" defined in `num_dims`-dimensions - - Parameters - ---------- - attach_units : bool - Whether to attach pint units to the resulting array - - Returns - ------- - volumes : array - Bin volumes - - """ - meshgrid = self.meshgrid(entity='bin_widths', attach_units=False) - volumes = reduce(mul, meshgrid) - if attach_units: - volumes *= reduce(mul, (ureg(str(d.units)) for d in self.iterdims())) - return volumes - - def weighted_bin_volumes(self, attach_units=True): - """Bin "volumes" defined in `num_dims`-dimensions, but unlike - `bin_volumes`, the volume is evaluated in the space of the binning. - E.g., logarithmic bins have `weighted_bin_volumes` of equal size in - log-space. - - Parameters - ---------- - attach_units : bool - Whether to attach pint units to the resulting array - - Returns - ------- - volumes : array - Bin volumes - - """ - meshgrid = self.meshgrid(entity='weighted_bin_widths', attach_units=False) - volumes = reduce(mul, meshgrid) - if attach_units: - # NOTE we use the units from `weighted_bin_widths` because these - # can be different from those of the dimension - volumes *= reduce( - mul, - (ureg(str(d.weighted_bin_widths.units)) for d in self.iterdims()), - ) - return volumes - - def empty(self, name, map_kw=None, **kwargs): - """Return a Map whose hist is an "empty" numpy ndarray with same - dimensions as this binning. - - The contents are not _actually_ empty, just undefined. Therefore be - careful to populate the array prior to using its contents. - - Parameters - ---------- - name : string - Name of the Map - - map_kw : None or dict - keyword arguments sent to instantiate the new Map (except `name` - which is specified above) - - **kwargs - keyword arguments passed on to numpy.empty() (except `shape` which - must be omitted) - - Returns - ------- - map : Map - - """ - assert 'shape' not in kwargs - if map_kw is None: - map_kw = {} - if 'dtype' not in kwargs: - kwargs['dtype'] = FTYPE - hist = np.empty(self.shape, **kwargs) - return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable - - def zeros(self, name, map_kw=None, **kwargs): - """Return a numpy ndarray filled with 0's with same dimensions as this - binning. - - Parameters - ---------- - name : string - Name of the map - - map_kw : None or dict - keyword arguments sent to instantiate the new Map (except `name` - which is specified above) - - **kwargs - keyword arguments passed on to numpy.zeros() (except `shape` which - must be omitted) - - Returns - ------- - map : Map - - """ - assert 'shape' not in kwargs - if map_kw is None: - map_kw = {} - if 'dtype' not in kwargs: - kwargs['dtype'] = FTYPE - hist = np.zeros(self.shape, **kwargs) - return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable - - def ones(self, name, map_kw=None, **kwargs): - """Return a numpy ndarray filled with 1's with same dimensions as this - binning. - - Parameters - ---------- - name : string - Name of the map - - map_kw : None or dict - keyword arguments sent to instantiate the new Map (except `name` - which is specified above) - - **kwargs - keyword arguments passed on to numpy.ones() (except `shape` which - must be omitted) - - Returns - ------- - map : Map - - """ - assert 'shape' not in kwargs - if map_kw is None: - map_kw = {} - if 'dtype' not in kwargs: - kwargs['dtype'] = FTYPE - hist = np.ones(self.shape, **kwargs) - return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable - - def full(self, fill_value, name, map_kw=None, **kwargs): - """Return a map whose `hist` is filled with `fill_value` of same - dimensions as this binning. - - Parameters - ---------- - fill_value - Value with which to fill the map - - name : string - Name of the map - - map_kw : None or dict - keyword arguments sent to instantiate the new Map (except `name` - which is specified above) - - **kwargs - keyword arguments passed on to numpy.fill_value() (except `shape`, - which must be omitted) - - Returns - ------- - map : Map - - """ - assert 'shape' not in kwargs - if map_kw is None: - map_kw = {} - if 'dtype' not in kwargs: - kwargs['dtype'] = FTYPE - hist = np.full(self.shape, fill_value, **kwargs) - return self._map_class(name=name, hist=hist, binning=self, **map_kw) # pylint: disable=not-callable - - def __contains__(self, x): - if isinstance(x, OneDimBinning): - return x in self.dims - if isinstance(x, str): - return x in self.names - return False - - def __eq__(self, other): - if not isinstance(other, MultiDimBinning): - return False - return recursiveEquality(self.hashable_state, other.hashable_state) - - # TODO: remove this method, as it should just be considered an outer - # product to increase dimensionality (i.e. the "*" operator, or __mul__ - # makes more sense than "+" or __add__)? - def __add__(self, other): - other = MultiDimBinning(other) - return MultiDimBinning(chain(self, other)) - - def __mul__(self, other): - if isinstance(other, (Mapping, OneDimBinning)): - other = [other] - other = MultiDimBinning(other) - return MultiDimBinning(chain(self, other)) - - # TODO: should __getattr__ raise its own exception if the attr is not found - # as a dimension rather than call parent's __getattribute__ method, since - # presumably that already failed? - def __getattr__(self, attr): - # If youve gotten here, __getattribute__ has failed. Try to get the - # attr as a contained dimension: - try: - return self.__getitem__(attr) - except (KeyError, ValueError): - # If that failed, re-run parent's __getattribute__ which will raise - # an appropriate exception - return super().__getattribute__(attr) - - # TODO: refine handling of ellipsis such that the following work as in - # Numpy: - # * ['dim0', 'dim3', ...] - # * ['dim0', 3, ...] - # * [...] - # * [0, ...] - # * [..., 2] - # * [..., 2, 1, 4] - def __getitem__(self, index): - """Interpret indices as indexing bins and *not* bin edges. - Indices refer to dimensions in same order they were specified at - instantiation, and all dimensions must be present. - - Parameters - ---------- - index : str, int, len-N-sequence of ints, or len-N-sequence of slices - If str is passed: Return the binning corresponding to the named - dimension - - If an integer is passed: - * If num_dims is 4, `index` indexes into the bins of the sole - OneDimBinning. The bin is returned. - * If num_dims > 1, `index` indexes which contained OneDimBinning - object to return. - If a len-N-sequence of integers or slices is passed, dimensions are - indexed by these in the order in which dimensions are stored - internally. - - Returns - ------- - A MultiDimBinning object new Binning object but with the bins specified - by `index`. Whether or not behavior is logarithmic is unchanged. - - """ - - # If ellipsis, return everything - if index is Ellipsis: - return self - - # If arg is a string, it should specify a dimension - # Check if it doesn, and if so return that OneDimBinning for that dimension - if isinstance(index, str): - - # Check there is no mask defined (a mask does not make sense on a per dimension basis, - # so cannot apply this operation when masking is involved) - #TODO Removed for now as causes issues, need to come back to think about this... - # if self.mask is not None : - # raise ValueError("Cannot extract a single binning dimension when a mask is used") #TODO This gets called duign deepcopy with index==__deppcopy__??!?!? If I assert instead of using ValueError theneverything fails. Not sure what is going on here... - - # Find the dimension - for d in self.iterdims(): - if d.name == index: - return d - raise ValueError(f"index '{index}' not in {self.names}") - - # TODO: implement a "linearization" like np.flatten() to iterate - # through each bin individually without hassle for the user... - #if self.num_dims == 1 and np.isscalar(index): - # return self._dimensions[0] - - # If here, the index is a numerical, numpy-comaptible index - # Do some pre-processing on it to get it in the right format... - if isinstance(index, Iterable) and not isinstance(index, Sequence): - index = list(index) - - if not isinstance(index, Sequence): - index = [index] - - # Turn any inetger indices into an equivalent single element slice - # This ensures the array dimensionality is maintained - - if isinstance(index, tuple): - index = list(index) - - for i, idx in enumerate(index): - if isinstance(idx, int) and idx >= 0 : index[i] = slice(idx, idx+1, None) - elif isinstance(idx, int) and idx < 0 : index[i] = slice(idx+1, idx, None) - elif isinstance(idx, slice): index[i] = idx - else: raise ValueError('Binning idx is %s, int or slice is needed'%idx) - - # Get the new binning, based on the index - input_dim = len(index) - if input_dim != self.num_dims: - raise ValueError('Binning is %dD, but %dD indexing was passed' - %(self.num_dims, input_dim)) - - new_binning = {'dimensions': [dim[idx] for dim, idx in - zip(self.iterdims(), index)]} - - # Also update mask, if there is one - new_mask = None if self.mask is None else self.mask[index] - - return MultiDimBinning(**new_binning, mask=new_mask) - - def __iter__(self): - """Iterate over dimensions. Use `iterbins` to iterate over bins.""" - return iter(self._dimensions) - - def __len__(self): - return self.num_dims - - def __ne__(self, other): - return not self.__eq__(other) - - -def test_OneDimBinning(): - """Unit tests for OneDimBinning class""" - # pylint: disable=line-too-long, wrong-import-position - import pickle - import os - import shutil - import tempfile - # needed so that eval(repr(b)) works - from numpy import array, float32, float64 # pylint: disable=unused-variable - - b1 = OneDimBinning(name='true_energy', num_bins=40, is_log=True, - domain=[1, 80]*ureg.GeV, tex=r'E_{\rm true}', - bin_names=[str(i) for i in range(40)]) - b2 = OneDimBinning(name='coszen', num_bins=40, is_lin=True, - domain=[-1, 1], bin_names=None, - tex=r'\cos\theta') - b3 = OneDimBinning(name='reco_energy', num_bins=40, is_log=True, - domain=[1, 80]*ureg.GeV, tex=r'E_{\rm reco}', - bin_names=[str(i) for i in range(40)]) - - # Test label - _ = b1.label - _ = b1.label - - assert b1.basename_binning == b1.basename_binning - assert b1.basename_binning == b3.basename_binning - assert b1.basename_binning != b2.basename_binning - - # Oversampling/downsampling - b1_over = b1.oversample(2) - assert b1_over.is_bin_spacing_log_uniform(b1_over.bin_edges) - b1_down = b1.downsample(2) - assert b1_down.is_bin_spacing_log_uniform(b1_down.bin_edges) - assert b1_down.is_compat(b1) - assert b1.is_compat(b1_over) - assert b1_down.is_compat(b1_over) - - # Bin width consistency - assert np.isclose( - np.sum(b1_over.bin_widths.m), - np.sum(b1.bin_widths.m), - **ALLCLOSE_KW, - ) - assert np.isclose( - np.sum(b1_down.bin_widths.m), - np.sum(b1.bin_widths.m), - **ALLCLOSE_KW, - ) - assert np.isclose( - np.sum(b1_over.bin_widths.m), - np.sum(b1_down.bin_widths.m), - **ALLCLOSE_KW, - ) - # Weighted bin widths must also sum up to the same total width - assert np.isclose( - np.sum(b1_over.weighted_bin_widths.m), - np.sum(b1.weighted_bin_widths.m), - **ALLCLOSE_KW, - ) - assert np.isclose( - np.sum(b1_down.weighted_bin_widths.m), - np.sum(b1.weighted_bin_widths.m), - **ALLCLOSE_KW, - ) - assert np.isclose( - np.sum(b1_over.weighted_bin_widths.m), - np.sum(b1_down.weighted_bin_widths.m), - **ALLCLOSE_KW, - ) - - logging.debug('len(b1): %s', len(b1)) - logging.debug('b1: %s', b1) - logging.debug('b2: %s', b2) - logging.debug('b1.oversample(10): %s', b1.oversample(10)) - logging.debug('b1.oversample(1): %s', b1.oversample(1)) - # Slicing - logging.debug('b1[1:5]: %s', b1[1:5]) - logging.debug('b1[:]: %s', b1[:]) - logging.debug('b1[-1]: %s', b1[-1]) - logging.debug('b1[:-1]: %s', b1[:-1]) - logging.debug('copy(b1): %s', copy(b1)) - logging.debug('deepcopy(b1): %s', deepcopy(b1)) - # Indexing by Ellipsis - assert b1[...] == b1 - # Pickling - s = pickle.dumps(b1, pickle.HIGHEST_PROTOCOL) - b1_loaded = pickle.loads(s) - s = pickle.dumps(b1[0], pickle.HIGHEST_PROTOCOL) - b1_loaded = pickle.loads(s) - assert b1_loaded == b1[0] - - try: - b1[-1:-3] - except ValueError: - pass - else: - assert False - - b3 = OneDimBinning(name='distance', num_bins=10, is_log=True, - domain=[0.1, 10]*ureg.m) - b4 = OneDimBinning(name='distance', num_bins=10, is_log=True, - domain=[1e5, 1e7]*ureg.um) - _ = hash_obj(b3) - _ = b3.hash - _ = hash(b3) - _ = hash_obj(b3[0]) - _ = b3[0].hash # pylint: disable=no-member - _ = hash(b3[0]) - - b3.normalize_values = True - b4.normalize_values = True - - _ = hash_obj(b3) - _ = b3.hash - _ = hash(b3) - _ = hash_obj(b3[0]) - _ = b3[0].hash # pylint: disable=no-member - _ = hash(b3[0]) - - # Without rounding, converting bin edges to base units yields different - # results due to finite precision effects - assert np.any(normQuant(b3.bin_edges, sigfigs=None) - != normQuant(b4.bin_edges, sigfigs=None)) - - # Normalize function should take care of this - assert np.all(normQuant(b3.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True) - == normQuant(b4.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True)), \ - 'normQuant(b3.bin_edges)=\n%s\nnormQuant(b4.bin_edges)=\n%s' \ - %(normQuant(b3.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True), - normQuant(b4.bin_edges, sigfigs=HASH_SIGFIGS, full_norm=True)) - - # And the hashes should be equal, reflecting the latter result - assert b3.hash == b4.hash, \ - '\nb3=%s\nb4=%s' % (b3.hashable_state, b4.hashable_state) - assert b3.hash == b4.hash, 'b3.hash=%s; b4.hash=%s' %(b3.hash, b4.hash) - - s = pickle.dumps(b3, pickle.HIGHEST_PROTOCOL) - b3_loaded = pickle.loads(s) - assert b3_loaded == b3 - - testdir = tempfile.mkdtemp() - try: - for b in [b1, b2, b3, b4]: - assert eval(repr(b)) == b, repr(b) # pylint: disable=eval-used - b_file = os.path.join(testdir, 'one_dim_binning.json') - b.to_json(b_file, warn=False) - b_ = OneDimBinning.from_json(b_file) - assert b_ == b, 'b=\n%s\nb_=\n%s' %(b, b_) - jsons.to_json(b, b_file, warn=False) - b_ = OneDimBinning.from_json(b_file) - assert b_ == b, 'b=\n%s\nb_=\n%s' %(b, b_) - - # Had bug where datastruct containing MultiDimBinning failed to be - # saved. # Test tuple containing list containing OrderedDict - # containing OneDimBinning here. - struct = ([OrderedDict(odb=b)],) - jsons.to_json(struct, b_file, warn=False) - loaded = jsons.from_json(b_file) - b_ = OneDimBinning(**loaded[0][0]['odb']) - assert b_ == b - - # Now try with pickle - b_file = os.path.join(testdir, 'one_dim_binning.pkl') - with open(b_file, 'wb') as fobj: - pickle.dump(struct, fobj, protocol=pickle.HIGHEST_PROTOCOL) - with open(b_file, 'rb') as fobj: - loaded = pickle.load(fobj) - b_ = loaded[0][0]['odb'] - assert b_ == b - - except: - logging.error('b that failed: %s', b) - raise - finally: - shutil.rmtree(testdir, ignore_errors=True) - - logging.info('<< PASS : test_OneDimBinning >>') - - -def test_MultiDimBinning(): - """Unit tests for MultiDimBinning class""" - # pylint: disable=wrong-import-position - import pickle - import os - import shutil - import tempfile - import time - import pytest - # needed so that eval(repr(mdb)) works - from numpy import array, float32, float64 # pylint: disable=unused-variable - - b1 = OneDimBinning(name='energy', num_bins=40, is_log=True, - domain=[1, 80]*ureg.GeV) - b2 = OneDimBinning(name='coszen', num_bins=40, is_lin=True, - domain=[-1, 1]) - mdb = MultiDimBinning([b1, b2]) - - assert eval(repr(mdb)) == mdb # pylint: disable=eval-used - - _ = hash_obj(mdb) - _ = mdb.hash - _ = hash(mdb) - _ = hash_obj(mdb[0, 0]) - _ = mdb[0, 0].hash - _ = hash(mdb[0, 0]) - _ = mdb[0, 0] - _ = mdb[0:, 0] - _ = mdb[0:, 0:] - _ = mdb[0, 0:] - _ = mdb[-1, -1] - # TODO: following should work as in Numpy: - # assert mdb[:] == mdb - # assert mdb[0] == b1 - # assert mdb[1] == b2 - assert mdb[:, :] == mdb - - # Index by dim names - assert mdb["energy"] == b1 - assert mdb["coszen"] == b2 - try: - mdb["nonexistent"] - except Exception: - pass - else: - raise Exception('non-existent name should raise exception') - - # Index by dim number - assert MultiDimBinning([b1])[0] == MultiDimBinning([b1[0]]) - - logging.debug('%s', mdb.energy) - logging.debug('copy(mdb): %s', copy(mdb)) - logging.debug('deepcopy(mdb): %s', deepcopy(mdb)) - assert deepcopy(mdb) == mdb - - s = pickle.dumps(mdb, pickle.HIGHEST_PROTOCOL) - mdb2 = pickle.loads(s) - assert mdb2 == mdb - - s = pickle.dumps(mdb[0, 0], pickle.HIGHEST_PROTOCOL) - mdb2 = pickle.loads(s) - assert mdb2 == mdb[0, 0] - - binning = MultiDimBinning([ - dict(name='energy', is_log=True, domain=[1, 80]*ureg.GeV, num_bins=40), - dict(name='coszen', is_lin=True, domain=[-1, 0], num_bins=20) - ]) - - ord_dict_of_binnings = OrderedDict([('x', mdb), ('y', binning)]) - _ = hash_obj(ord_dict_of_binnings) - _ = normQuant(ord_dict_of_binnings) - - for flatindex, this_bin in enumerate(binning.iterbins()): - coord = binning.index2coord(flatindex) - assert this_bin == binning[coord] - - assert binning.num_bins == [40, 20] - assert binning.tot_num_bins == 40 * 20 - - assert binning.oversample(10).shape == (400, 200) - - assert binning.oversample(10, 1).shape == (400, 20) - assert binning.oversample(1, 3).shape == (40, 60) - assert binning.downsample(4, 2).shape == (10, 10) - - assert binning.oversample(coszen=10, energy=2).shape == (80, 200) - assert binning.oversample(1, 1) == binning - - assert binning.to('MeV', '')['energy'].units == ureg.MeV - assert binning.to('MeV', '') == binning, 'converted=%s\norig=%s' \ - %(binning.to('MeV', ''), binning) - assert binning.to('MeV', '').hash == binning.hash - - _ = binning.meshgrid(entity='bin_edges') - _ = binning.meshgrid(entity='weighted_centers') - _ = binning.meshgrid(entity='midpoints') - _ = binning.meshgrid(entity='bin_widths') - _ = binning.meshgrid(entity='weighted_bin_widths') - _ = binning.bin_volumes(attach_units=False) - _ = binning.bin_volumes(attach_units=True) - _ = binning.weighted_bin_volumes(attach_units=False) - _ = binning.weighted_bin_volumes(attach_units=True) - binning.to('MeV', None) - binning.to('MeV', '') - binning.to(ureg.joule, '') - - oversampled = binning.oversample(10, 3) - assert oversampled.shape == (400, 60) - downsampled = binning.downsample(4, 2) - assert downsampled.shape == (10, 10) - - over_vols = oversampled.bin_volumes(attach_units=False) - down_vols = downsampled.bin_volumes(attach_units=False) - norm_vols = binning.bin_volumes(attach_units=False) - assert np.isclose(np.sum(over_vols), np.sum(norm_vols), **ALLCLOSE_KW) - assert np.isclose(np.sum(down_vols), np.sum(norm_vols), **ALLCLOSE_KW) - assert np.isclose(np.sum(down_vols), np.sum(over_vols), **ALLCLOSE_KW) - - over_vols = oversampled.weighted_bin_volumes(attach_units=False) - down_vols = downsampled.weighted_bin_volumes(attach_units=False) - norm_vols = binning.weighted_bin_volumes(attach_units=False) - assert np.isclose(np.sum(over_vols), np.sum(norm_vols), **ALLCLOSE_KW) - assert np.isclose(np.sum(down_vols), np.sum(norm_vols), **ALLCLOSE_KW) - assert np.isclose(np.sum(down_vols), np.sum(over_vols), **ALLCLOSE_KW) - - testdir = tempfile.mkdtemp() - try: - b_file = os.path.join(testdir, 'multi_dim_binning.json') - binning.to_json(b_file, warn=False) - b_ = MultiDimBinning.from_json(b_file) - assert b_ == binning, 'binning=\n%s\nb_=\n%s' %(binning, b_) - jsons.to_json(binning, b_file, warn=False) - b_ = MultiDimBinning.from_json(b_file) - assert b_ == binning, 'binning=\n%s\nb_=\n%s' %(binning, b_) - - # Had bug where datastruct containing MultiDimBinning failed to be - # saved. Test tuple containing list containing OrderedDict - # containing MultiDimBinning here, just to make sure MultiDimBinning - # can be written inside a nested structure. - b = binning - struct = ([OrderedDict(mdb=b)],) - jsons.to_json(struct, b_file, warn=False) - loaded = jsons.from_json(b_file) - b_ = MultiDimBinning(**loaded[0][0]['mdb']) - assert b_ == b - - # Now try with pickle - b_file = os.path.join(testdir, 'multi_dim_binning.pkl') - with open(b_file, 'wb') as fobj: - pickle.dump(struct, fobj, protocol=pickle.HIGHEST_PROTOCOL) - with open(b_file, 'rb') as fobj: - loaded = pickle.load(fobj) - b_ = loaded[0][0]['mdb'] - assert b_ == b - - finally: - shutil.rmtree(testdir, ignore_errors=True) - - # Test that reordering dimensions works correctly - e_binning = OneDimBinning( - name='true_energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV - ) - reco_e_binning = OneDimBinning( - name='reco_energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV - ) - cz_binning = OneDimBinning( - name='true_coszen', num_bins=40, is_lin=True, domain=[-1, 1] - ) - reco_cz_binning = OneDimBinning( - name='reco_coszen', num_bins=40, is_lin=True, domain=[-1, 1] - ) - az_binning = OneDimBinning( - name='true_azimuth', num_bins=10, is_lin=True, - domain=[0*ureg.rad, 2*np.pi*ureg.rad] - ) - reco_az_binning = OneDimBinning( - name='true_azimuth', num_bins=10, is_lin=True, - domain=[0*ureg.rad, 2*np.pi*ureg.rad] - ) - - mdb_2d_orig = MultiDimBinning([e_binning, cz_binning]) - orig_order = mdb_2d_orig.names - - # Reverse ordering; reorder by dimension names - new_order = orig_order[::-1] - mdb_2d_new = MultiDimBinning(mdb_2d_orig) - mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) - - assert mdb_2d_new.names == new_order - new_order = ['true_azimuth', 'true_energy', 'true_coszen'] - mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) - assert mdb_2d_new == mdb_2d_orig - _ = MultiDimBinning([e_binning, cz_binning]) - - mdb_3d_orig = MultiDimBinning([e_binning, cz_binning, az_binning]) - orig_order = mdb_3d_orig.names - new_order = [orig_order[2], orig_order[0], orig_order[1]] - - mdb_3d_new = MultiDimBinning(mdb_3d_orig) - mdb_3d_new = mdb_3d_new.reorder_dimensions(new_order) - assert mdb_3d_new.names == new_order - # Reorder by MultiDimBinning object - mdb_3d_new = mdb_3d_new.reorder_dimensions(mdb_3d_orig) - assert mdb_3d_new.names == orig_order - - # Reorder by indices - mdb_3d_new = MultiDimBinning(mdb_3d_orig) - mdb_3d_new = mdb_3d_new.reorder_dimensions([2, 0, 1]) - assert mdb_3d_new.names == new_order - - # Reorder by combination of index, OneDimBinning, and name - mdb_3d_new = MultiDimBinning(mdb_3d_orig) - mdb_3d_new = mdb_3d_new.reorder_dimensions( - [2, 'true_energy', mdb_2d_orig.dimensions[1]] - ) - assert mdb_3d_new.names == new_order - - # Reorder by superset - mdb_2d_new = MultiDimBinning(mdb_3d_orig.dimensions[0:2]) - mdb_2d_new = mdb_2d_new = mdb_2d_new.reorder_dimensions(new_order) - assert mdb_2d_new.names == [o for o in new_order if o in mdb_2d_new] - - # Reorder by subset - mdb_3d_new = MultiDimBinning(mdb_3d_orig) - try: - mdb_3d_new = mdb_3d_new.reorder_dimensions(new_order[0:2]) - except Exception: - pass - else: - raise Exception('Should not be able to reorder by subset.') - - # Create a basename-equivalent binning - mdb_3d_reco = MultiDimBinning([reco_e_binning, reco_cz_binning, - reco_az_binning]) - assert mdb_3d_reco.basename_binning == mdb_3d_orig.basename_binning - - t0 = time.time() - _ = [tup for tup in mdb_3d_reco.iteredgetuples()] - tprofile.info('Time to iterate over %d edge tuples: %.6f sec', - mdb_3d_reco.size, time.time() - t0) - - t0 = time.time() - _ = [b for b in mdb_3d_reco.iterbins()] - tprofile.info('Time to iterate over %d bins: %.6f sec', - mdb_3d_reco.size, time.time() - t0) - - # Test compatibility test - mdb1 = MultiDimBinning([ - OneDimBinning(name='energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV), - OneDimBinning(name='coszen', num_bins=40, is_lin=True, domain=[-1, 1]) - ]) - mdb2 = MultiDimBinning([ - OneDimBinning(name='energy', num_bins=40, is_log=True, domain=[1, 80]*ureg.GeV), - OneDimBinning(name='coszen', num_bins=40, is_lin=True, domain=[-1, 1]) - ]) - # These should be compatible - assert mdb1.is_compat(mdb2) - mdb1.assert_compat(mdb2) - assert mdb2.is_compat(mdb1) - mdb2.assert_compat(mdb1) - - mdb2 = MultiDimBinning([ - OneDimBinning(name='energy', num_bins=20, is_log=True, domain=[1, 80]*ureg.GeV), - OneDimBinning(name='coszen', num_bins=20, is_lin=True, domain=[-1, 1]) - ]) - - # In this direction, they should *not* be compatible - assert not mdb1.is_compat(mdb2) - with pytest.raises(AssertionError) as ae: - mdb1.assert_compat(mdb2) - # In this direction, they *should* be compatible (downsampling) - assert mdb2.is_compat(mdb1) - mdb2.assert_compat(mdb1) - - logging.info('<< PASS : test_MultiDimBinning >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_OneDimBinning() - test_MultiDimBinning() diff --git a/pisa/core/container.py b/pisa/core/container.py deleted file mode 100644 index a98895167..000000000 --- a/pisa/core/container.py +++ /dev/null @@ -1,758 +0,0 @@ -""" -Class to hold generic data in container. -he data can be unbinned or binned or scalar, while -translation methods between such different representations -are provided. -""" - -from __future__ import absolute_import, print_function - -from collections.abc import Sequence -from collections import OrderedDict, defaultdict -import copy -from itertools import chain - -import numpy as np - -from pisa import FTYPE -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.core.map import Map, MapSet -from pisa.core.translation import histogram, lookup, resample -from pisa.utils.comparisons import ALLCLOSE_KW -from pisa.utils.log import logging -from pisa.utils.profiler import line_profile, profile - - -class ContainerSet(object): - """ - Class to hold a set of container objects - - Parameters - ---------- - name : str - - containers : list or None - - data_specs : MultiDimBinning, "events" or None - - """ - def __init__(self, name, containers=None, data_specs=None): - self.name = name - self.linked_containers = [] - self.containers = [] - if containers is None: - containers = [] - for container in containers: - self.add_container(container) - - def __repr__(self): - return f'ContainerSet containing {[c.name for c in self]}' - - @property - def is_map(self): - if len(self.containers): - return self.containers[0].is_map - - def add_container(self, container): - if container.name in self.names: - raise ValueError('container with name %s already exists'%container.name) - self.containers.append(container) - - @property - def representation(self): - return self._representation - - @representation.setter - def representation(self, representation): - """ - Parameters - ---------- - representation : str, MultiDimBinning or any hashable object - Data specs should be set to retreive the right representation - i.e. the representation one is working in at the moment - - This property is meant to be changed while working with a ContainerSet - """ - self._representation = representation - for container in self: - container.representation = representation - - @property - def names(self): - return [c.name for c in self.containers] - - def link_containers(self, key, names): - """Link containers together. When containers are linked, they are - treated as a single (virtual) container for binned data - - Parameters - ---------- - key : str - name of linked object - - names : list - name of containers to be linked under the given key - - """ - # intersection of names for linking and available names - - link_names = set(names) & set(self.names) - if len(link_names) < len(names): - logging.warning("Skipping containers %s in linking, as those are not present"%(set(names) - set(self.names))) - - containers = [self.__getitem__(name) for name in link_names] - logging.trace('Linking containers %s into %s'%(link_names, key)) - new_container = VirtualContainer(key, containers) - self.linked_containers.append(new_container) - - - def unlink_containers(self): - """Unlink all container""" - logging.trace('Unlinking all containers') - for c in self.linked_containers: - c.unlink() - self.linked_containers = [] - - def __getitem__(self, key): - if key in self.names: - return self.containers[self.names.index(key)] - if len(self.linked_containers) > 0: - linked_names = [c.name for c in self.linked_containers] - if key in linked_names: - return self.linked_containers[linked_names.index(key)] - raise KeyError(f"No name `{key}` in container") - - def __iter__(self): - """Iterate over individual non-linked containers and virtual containers - for the ones that are linked together - """ - containers_to_be_iterated = [c for c in self.containers if not c.linked] + self.linked_containers - return iter(containers_to_be_iterated) - - def get_mapset(self, key, error=None): - """For a given key, get a PISA MapSet - - Parameters - ---------- - key : str - - error : None or str - specify a key that errors are read from - - Returns - ------- - map_set : MapSet - - """ - maps = [] - for container in self: - maps.append(container.get_map(key, error=error)) - return MapSet(name=self.name, maps=maps) - - -class VirtualContainer(object): - """ - Class providing a virtual container for linked individual containers - - It should just behave like a normal container - - For reading, it just uses one container as a representative (no checkng at the mment - if the others actually contain the same data) - - For writting, it creates one object that is added to all containers - - Parameters - ---------- - name : str - - containers : list - - """ - - def __init__(self, name, containers): - self.name = name - # check and set link flag - for container in containers: - if container.linked: - raise ValueError('Cannot link container %s since it is already linked'%container.name) - container.linked = True - self.containers = containers - - def __repr__(self): - return f'VirtualContainer containing {[c.name for c in self]}' - - def unlink(self): - '''Reset flag and copy all accessed keys''' - # reset flag - for container in self: - container.linked = False - - def __iter__(self): - return iter(self.containers) - - def __getitem__(self, key): - # should we check they're all the same? - return self.containers[0][key] - - def __setitem__(self, key, value): - for container in self: - container[key] = value - - def set_aux_data(self, key, val): - for container in self: - container.set_aux_data(key, val) - - def mark_changed(self, key): - # copy all - for container in self.containers[1:]: - container[key] = np.copy(self.containers[0][key]) - for container in self: - container.mark_changed(key) - - def mark_valid(self, key): - for container in self: - container.mark_valid(key) - @property - def representation(self): - return self.containers[0].representation - - @representation.setter - def representation(self, representation): - for container in self: - container.representation = representation - - @property - def shape(self): - return self.containers[0].shape - - @property - def size(self): - return np.product(self.shape) - -class Container(): - - default_translation_mode = "average" - translation_modes = ("average", "sum", None) - array_representations = ("events", "log_events") - - - def __init__(self, name, representation='events'): - - ''' - Container to hold data in multiple representations - - Parameters: - ----------- - - name : str - name of container - representation : hashable object, e.g. str or MultiDimBinning - Representation in which to initialize the container - - ''' - - self.name = name - self._representation = None - - self.linked = False - - # ToDo: simple auxillary data like scalars - # dict of form [variable] - self._aux_data = {} - - # validity bit - # dict of form [variable][representation_hash] - self.validity = defaultdict(dict) - - # translation mode - # dict of form [variable] - self.tranlation_modes = {} - - # Actual data - # dict of form [representation_hash][variable] - self.data = defaultdict(dict) - - # Representation objects - # dict of form [representation_hash] - self._representations = {} - - # Precedence of representation (lower number = higher precedence) - # dict of form [representation_hash] - self.precedence = defaultdict(int) - - self.representation = representation - - def __repr__(self): - return f'Container containing keys {self.all_keys}' - - @property - def representation(self): - return self._representation - - - def set_aux_data(self, key, val): - '''Add any auxillary data, which will not be translated or tied to a specific representation''' - if key in self.all_keys: - raise KeyError(f'Key {key} already exsits') - - self._aux_data[key] = val - - @representation.setter - def representation(self, representation): - key = hash(representation) - if not key in self.representation_keys: - self._representations[key] = representation - if isinstance(representation, MultiDimBinning): - for name in representation.names: - self.validity[name][key] = True - elif isinstance(representation, str): - if representation not in self.array_representations: - raise ValueError(f"Unknown representation '{representation}'") - - self._representation = representation - self.current_data = self.data[key] - - @property - def shape(self): - if self.is_map: - return self.representation.shape - if len(self.keys) == 0: - return None - key = self.keys[0] - return self[key].shape[0:1] - - @property - def size(self): - return np.product(self.shape) - - @property - def num_dims(self): - if self.is_map: - return self.representation.num_dims - else: - return 1 - - @property - def representations(self): - return tuple(self._representations.values()) - - @property - def representation_keys(self): - return tuple(self._representations.keys()) - - @property - def keys(self): - keys = tuple(self.current_data.keys()) - if self.is_map: - keys += tuple(self.representation.names) - return keys - - @property - def all_keys(self): - '''return all available keys, regardless of representation''' - return list(self.validity.keys()) - - @property - def is_map(self): - '''Is current representation a map/grid''' - return isinstance(self.representation, MultiDimBinning) - - def mark_changed(self, key): - '''mark a key as changed and only what is in the current representation is valid''' - # invalidate all - for rep in self.validity[key]: - self.validity[key][rep] = False - - if key in self.current_data.keys(): - self.mark_valid(key) - - def mark_valid(self, key): - '''validate data as is in current representation, regardless''' - self.validity[key][hash(self.representation)] = True - - def __getitem__(self, key): - data = self.__get_data(key) - return data - - def __setitem__(self, key, data): - - if self.is_map: - if key in self.representation.names: - raise Exception('Cannot add variable {key}, as it is a binning dimension') - - self.__add_data(key, data) - if not key in self.tranlation_modes.keys(): - self.tranlation_modes[key] = self.default_translation_mode - - self.mark_changed(key) - - def __add_data(self, key, data): - """ - Parameters - ---------- - key : string - identifier - data : ndarray, PISA Map or (array, binning)-tuple - is_flat : bool - is the data already flattened (i.e. the binning dimensions unrolled) - """ - if isinstance(data, np.ndarray): - - if self.is_map: - self.__add_data(key, (self.representation, data)) - - else: - shape = self.shape - if shape is not None: - assert data.shape[:self.num_dims] == shape, 'Incompatible dimensions' - - self.current_data[key] = data - - elif isinstance(data, Map): - assert hash(self.representation) == hash(data.binning) - flat_array = data.hist.ravel() - self.current_data[key] = flat_array - - elif isinstance(data, Sequence) and len(data) == 2: - binning, array = data - assert isinstance(binning, MultiDimBinning) - - assert hash(self.representation) == hash(binning) - - is_flat = array.shape[0] == binning.size - - if is_flat: - flat_array = array - else: - # first dimesnions must match - assert array.shape[:binning.num_dims] == binning.shape - - - if array.ndim > binning.num_dims: - flat_shape = (binning.size, -1) - else: - flat_shape = (binning.size, ) - flat_array = array.reshape(flat_shape) - self.current_data[key] = flat_array - else: - raise TypeError('unknown dataformat') - - - def __get_data(self, key): - if self.is_map: - binning = self.representation - # check if key is binning dimension - if key in binning.names: - return self.unroll_binning(key, binning) - # check validity - if not key in self.keys: - if key in self.all_keys: - self.auto_translate(key) - #raise KeyError(f'Data {key} not present in chosen representation') - else: - if key in self._aux_data.keys(): - return self._aux_data[key] - else: - raise KeyError(f'Data {key} not present in Container') - - valid = self.validity[key][hash(self.representation)] - if not valid: - self.auto_translate(key) - #raise ValueError('Invalid data as it was changed in a different representation!') - - - return self.current_data[key] - - @staticmethod - def unroll_binning(key, binning): - '''Get an Array containing the unrolled binning''' - grid = binning.meshgrid(entity='weighted_centers', attach_units=False) - return grid[binning.index(key)].ravel() - - - def get_hist(self, key): - """Return reshaped data as normal n-dimensional histogram""" - assert self.is_map, 'Cannot retrieve hists from non-map data' - - # retrieve in case needs translation - self[key] - - binning = self.representation - data = self[key] - if data.ndim > binning.num_dims: - full_shape = list(binning.shape) + [-1] - else: - full_shape = list(binning.shape) - - return data.reshape(full_shape), binning - - def get_map(self, key, error=None): - """Return binned data in the form of a PISA map""" - hist, binning = self.get_hist(key) - if error is not None: - error_hist = np.abs(self.get_hist(error)[0]) - else: - error_hist = None - assert hist.ndim == binning.num_dims - return Map(name=self.name, hist=hist, error_hist=error_hist, binning=binning) - - def __iter__(self): - """iterate over all keys in container""" - return self.keys() - - def translate(self, key, src_representation): - '''translate variable from source representation - - key : str - src_representation : representation present in container - - ''' - - assert hash(src_representation) in self.representation_keys - - dest_representation = self.representation - - if hash(src_representation) == hash(dest_representation): - # nothing to do - return - - from_map = isinstance(src_representation, MultiDimBinning) - to_map = isinstance(dest_representation, MultiDimBinning) - - if self.tranlation_modes[key] == 'average': - if from_map and to_map: - out = self.resample(key, src_representation, dest_representation) - self.representation = dest_representation - self[key] = out - - elif to_map: - out = self.array_to_binned(key, src_representation, dest_representation) - self.representation = dest_representation - self[key] = out - - elif from_map: - out = self.binned_to_array(key, src_representation, dest_representation) - self.representation = dest_representation - self[key] = out - - elif src_representation == "events" and dest_representation == "log_events": - self.representation = "events" - logging.trace(f"Container `{self.name}`: taking log of {key}") - sample = np.log(self[key]) - self.representation = dest_representation - self[key] = sample - - elif src_representation == "log_events" and dest_representation == "events": - self.representation = "log_events" - sample = np.exp(self[key]) - self.representation = dest_representation - self[key] = sample - - else: - raise NotImplementedError(f"translating {src_representation} to {dest_representation}") - - else: - raise NotImplementedError() - - # validate source! - self.validity[key][hash(src_representation)] = True - - - def auto_translate(self, key): - src_representation = self.find_valid_representation(key) - if src_representation is None: - raise Exception(f'No valid representation for {key} in container') - # logging.debug(f'Auto-translating variable `{key}` from {src_representation}') - self.translate(key, src_representation) - - - def find_valid_representation(self, key): - ''' Find valid, and best representation for key''' - validity = self.validity[key] - - precedence = np.inf - representation = None - - for h in validity.keys(): - if validity[h]: - if self.precedence[h] < precedence: - precedence = self.precedence[h] - representation = self._representations[h] - - return representation - - def resample(self, key, src_representation, dest_representation): - """Resample a binned key into a different binning - Parameters - ---------- - key : str - src_representation : MultiDimBinning - dest_representation : MultiDimBinning - """ - - logging.debug('Resampling %s'%(key)) - - self.representation = src_representation - sample = [self[name] for name in src_representation.names] - weights = self[key] - - self.representation = dest_representation - new_sample = [self[name] for name in dest_representation.names] - new_hist = resample(weights, sample, src_representation, new_sample, dest_representation) - return new_hist - - def array_to_binned(self, key, src_representation, dest_representation, averaged=True): - """Histogram data array into binned data - Parameters - ---------- - key : str - src_representation : str - dest_representation : MultiDimBinning - #averaged : bool - # if True, the histogram entries are averages of the numbers that - # end up in a given bin. This for example must be used when oscillation - # probabilities are translated.....otherwise we end up with probability*count - # per bin - Notes - ----- - right now, CPU-only - """ - # TODO: make work for n-dim - logging.trace('Transforming %s array to binned data'%(key)) - - assert src_representation in self.array_representations - assert isinstance(dest_representation, MultiDimBinning) - - if not dest_representation.is_irregular: - sample = [] - dimensions = [] - for d in dest_representation: - if d.is_log: - self.representation = "log_events" - sample.append(self[d.name]) - dimensions.append(OneDimBinning( - d.name, - domain=np.log(d.domain.m), - num_bins=d.num_bins - )) - else: - self.representation = "events" - sample.append(self[d.name]) - dimensions.append(d) - hist_binning = MultiDimBinning(dimensions) - else: - self.representation = src_representation - sample = [self[name] for name in dest_representation.names] - hist_binning = dest_representation - - self.representation = src_representation - weights = self[key] - self.representation = dest_representation - hist = histogram(sample, weights, hist_binning, averaged=averaged) - return hist - - def binned_to_array(self, key, src_representation, dest_representation): - """Augmented binned data to array data""" - - logging.trace('Transforming %s binned to array data'%(key)) - - self.representation = src_representation - weights = self[key] - - if not src_representation.is_irregular: - logging.trace(f"Container `{self.name}`: regularized lookup for {key}") - sample = [] - dimensions = [] - for d in src_representation: - if d.is_log: - self.representation = "log_events" - sample.append(self[d.name]) - dimensions.append(OneDimBinning( - d.name, - domain=np.log(d.domain.m), - num_bins=d.num_bins - )) - else: - self.representation = "events" - sample.append(self[d.name]) - dimensions.append(d) - hist_binning = MultiDimBinning(dimensions) - else: - logging.trace(f"Container `{self.name}`: irregular lookup for {key}") - self.representation = dest_representation - sample = [self[name] for name in src_representation.names] - hist_binning = src_representation - - return lookup(sample, weights, hist_binning) - - - -def test_container(): - """Unit tests for Container class.""" - - # NOTE: Right now the numbers are tuned so that the weights are identical - # per bin. If you change binning that's likely not the case anymore and you - # inevitably end up with averaged values over bins, which are then not - # equal to the individual weights anymore when those are not identical per - # bin - - n_evts = 10000 - x = np.linspace(0, 100, n_evts, dtype=FTYPE) - y = np.linspace(0, 100, n_evts, dtype=FTYPE) - w = np.tile(np.arange(100, dtype=FTYPE) + 0.5, (100, 1)).T.ravel() - - container = Container('test', 'events') - container['x'] = x - container['y'] = y - container['w'] = w - - binning_x = OneDimBinning(name='x', num_bins=100, is_lin=True, domain=[0, 100]) - binning_y = OneDimBinning(name='y', num_bins=100, is_lin=True, domain=[0, 100]) - binning = MultiDimBinning([binning_x, binning_y]) - - logging.trace('Testing container and translation methods') - - container.representation = binning - bx = container['x'] - m = np.meshgrid(binning.midpoints[0].m, binning.midpoints[1].m)[1].ravel() - assert np.allclose(bx, m, **ALLCLOSE_KW), f'test:\n{bx}\n!= ref:\n{m}' - - # array repr - container.representation = 'events' - array_weights = container['w'] - assert np.allclose(array_weights, w, **ALLCLOSE_KW), f'test:\n{array_weights}\n!= ref:\n{w}' - - # binned repr - container.representation = binning - diag = np.diag(np.arange(100) + 0.5) - bd = container['w'] - h = container.get_hist('w') - - assert np.allclose(bd, diag.ravel(), **ALLCLOSE_KW), f'test:\n{bd}\n!= ref:\n{diag.ravel()}' - assert np.allclose(h[0], diag, **ALLCLOSE_KW), f'test:\n{h[0]}\n!= ref:\n{diag}' - assert h[1] == binning, f'test:\n{h[1]}\n!= ref:\n{binning}' - - # augment to array repr again - container.representation = 'events' - a = container['w'] - - assert np.allclose(a, w, **ALLCLOSE_KW), f'test:\n{a}\n!= ref:\n{w}' - - -def test_container_set(): - container1 = Container('test1') - container2 = Container('test2') - - data = ContainerSet('data', [container1, container2]) - - try: - data.add_container(container1) - except ValueError: - pass - else: - raise Exception('identical containers added to a containerset, this should not be possible') - - -if __name__ == '__main__': - test_container() - test_container_set() diff --git a/pisa/core/detectors.py b/pisa/core/detectors.py deleted file mode 100644 index 6819bdb00..000000000 --- a/pisa/core/detectors.py +++ /dev/null @@ -1,582 +0,0 @@ -#! /usr/bin/env python -""" -Detector class definition and a simple script to generate, save, and -plot distributions for different detectors from pipeline config file(s). -A detector is represented by a DistributionMaker. - -DistributionMaker: A single detector -Detectors: A sequence of detectors -""" - -from __future__ import absolute_import - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from collections import OrderedDict -import inspect -from itertools import product -import os -from tabulate import tabulate -from copy import deepcopy - -import numpy as np - -from pisa import ureg -from pisa.core.map import MapSet -from pisa.core.pipeline import Pipeline -from pisa.core.distribution_maker import DistributionMaker -from pisa.core.param import ParamSet, Param -from pisa.utils.config_parser import PISAConfigParser -from pisa.utils.fileio import expand, mkdir, to_file -from pisa.utils.hash import hash_obj -from pisa.utils.log import set_verbosity, logging, Levels -from pisa.utils.random_numbers import get_random_state - - -__all__ = ['Detectors', 'test_Detectors', 'parse_args', 'main'] - - -class Detectors(object): - """Container for one or more distribution makers, that represent different detectors. - - Parameters - ---------- - pipelines : Pipeline or convertible thereto, or iterable thereof - A new pipline is instantiated with each object passed. Legal objects - are already-instantiated Pipelines and anything interpret-able by the - Pipeline init method. - - shared_params : Parameter to be treated the same way in all the - distribution_makers that contain them. - """ - def __init__(self, pipelines, label=None, set_livetime_from_data=True, profile=False, shared_params=None): - self.label = label - self._source_code_hash = None - - self._profile = profile - - if shared_params == None: - self.shared_params = [] - else: - self.shared_params = shared_params - - if isinstance(pipelines, (str, PISAConfigParser, OrderedDict, - Pipeline)): - pipelines = [pipelines] - - self._distribution_makers , self.det_names = [] , [] - for pipeline in pipelines: - if not isinstance(pipeline, Pipeline): - pipeline = Pipeline(pipeline) - - name = pipeline.detector_name - if name in self.det_names: - self._distribution_makers[self.det_names.index(name)].append(pipeline) - else: - self._distribution_makers.append([pipeline]) - self.det_names.append(name) - - if None in self.det_names and len(self.det_names) > 1: - raise NameError('At least one of the used pipelines has no detector_name.') - - for i, pipelines in enumerate(self._distribution_makers): - self._distribution_makers[i] = DistributionMaker(pipelines=pipelines, - set_livetime_from_data=set_livetime_from_data, - profile=profile - ) - - for sp in self.shared_params: - n = 0 - for distribution_maker in self._distribution_makers: - if sp in distribution_maker.params.free.names: - n += 1 - if n < 2: - raise NameError('Shared param %s only a free param in less than 2 detectors.' % sp) - - self.init_params() - - def __repr__(self): - return self.tabulate(tablefmt="presto") - - def _repr_html_(self): - return self.tabulate(tablefmt="html") - - def tabulate(self, tablefmt="plain"): - headers = ['DistributionMaker number', 'detector name', 'output_binning', 'output_key', 'profile'] - colalign=["right"] + ["center"] * (len(headers) -1 ) - table = [] - for i, d in enumerate(self.distribution_makers): - p = d.pipelines[0] #assuming binning and key are the same for all pipelines in DistributionMaker - table.append([i, d.detector_name, p.output_binning, p.output_key, d.profile]) - return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign) - - def __iter__(self): - return iter(self._distribution_makers) - - @property - def profile(self): - return self._profile - - @profile.setter - def profile(self, value): - for d in self.distribution_makers: - d.profile = value - self._profile = value - - - def run(self): - for distribution_maker in self: - distribution_maker.run() - - def setup(self): - """Setup (reset) all distribution makers""" - for d in self: - d.setup() - - def get_outputs(self, **kwargs): - """Compute and return the outputs. - - Parameters - ---------- - **kwargs - Passed on to each distribution_maker's `get_outputs` method. - - Returns - ------- - List of MapSets if `return_sum=True` or list of lists of MapSets if `return_sum=False` - - """ - outputs = [distribution_maker.get_outputs(**kwargs) for distribution_maker in self] - return outputs - - def update_params(self, params): - if isinstance(params,Param): params = ParamSet(params) - - for distribution_maker in self.distribution_makers: - ps = deepcopy(params) - for p in ps.names: - if distribution_maker.detector_name in p: - p_name = p.replace('_'+distribution_maker.detector_name, "") - if p_name in ps.names: - ps.remove(p_name) - ps[p].name = p_name - distribution_maker.update_params(ps) - self.init_params() - - def select_params(self, selections, error_on_missing=True): - for distribution_maker in self: - distribution_maker.select_params(selections=selections, error_on_missing=error_on_missing) - self.init_params() - - @property - def distribution_makers(self): - return self._distribution_makers - - @property - def params(self): - return self._params - - def init_params(self): - """Returns a ParamSet including all params of all detectors. First the shared params - (if there are some), then all the "single detector" params. If two detectors use a - parameter with the same name (but not shared), the name of the detector is added to the - parameter name (except for the first detector). - """ - params = ParamSet() - for p_name in self.shared_params: - for distribution_maker in self: - try: - params.extend(distribution_maker.params[p_name]) - break # shared param found, can continue with the next shared param - except: - continue # shared param was not in this DistributionMaker, so search in the next one - - for distribution_maker in self: - for param in distribution_maker.params: - if param.name in self.shared_params: - continue # shared param is already in param set, can continue with the next param - elif param.name in params.names: # two parameters with the same name but not shared - # add detector name to the parameter name - changed_param = deepcopy(param) - changed_param.name = param.name + '_' + distribution_maker.detector_name - params.extend(changed_param) - else: - params.extend(param) - self._params = params - - @property - def shared_param_ind_list(self): - """ A list of lists (one for each detector) containing the position of the shared - params in the free params of the DistributionMaker (that belongs to the detector) - together with their position in the shared parameter list. - """ - if not self.shared_params: return [] - - shared_param_ind_list = [] - for distribution_maker in self: - free_names = distribution_maker.params.free.names - spi = [] - for p_name in free_names: - if p_name in self.shared_params: - spi.append((free_names.index(p_name),self.shared_params.index(p_name))) - shared_param_ind_list.append(spi) - return shared_param_ind_list - - @property - def param_selections(self): - selections = None - for distribution_maker in self: - if selections != None and sorted(distribution_maker.param_selections) != selections: - raise AssertionError('Different param_selections for different detectors.') - selections = sorted(distribution_maker.param_selections) - return selections - - @property - def source_code_hash(self): - """Hash for the source code of this object's class. - - Not meant to be perfect, but should suffice for tracking provenance of - an object stored to disk that were produced by a Stage. - """ - if self._source_code_hash is None: - self._source_code_hash = hash_obj(inspect.getsource(self.__class__)) - return self._source_code_hash - - @property - def hash(self): - return hash_obj([self.source_code_hash] + [d.hash for d in self]) - - @property - def num_events_per_bin(self): - ''' - returns list of arrays of bin indices where none of the - pipelines in the respective distribution maker have MC events - ''' - num_events_per_bin = [] - for d in self.distribution_makers: - num_events_per_bin.append(d.num_events_per_bin) - - return num_events_per_bin - - - @property - def empty_bin_indices(self): - '''Find indices where there are no events present - ''' - num_events_per_bin = self.num_events_per_bin - - indices = [] - for i, d in enumerate(self.distribution_makers): - empty_counts = num_events_per_bin[i] == 0 - indices.append(np.where(empty_counts)[0]) - return indices - - - def set_free_params(self, values): - """Set free parameters' values. - - Parameters - ---------- - values : a list of quantities - - """ - for dist_maker in self: - dist_values = [] - for dist_name in dist_maker.params.free.names: - for name, value in zip(self.params.free.names, values): - if name == dist_name: - v = value - if name == dist_name + '_' + dist_maker.detector_name: - v = value - dist_values.append(v) - dist_maker.set_free_params(dist_values) - - def randomize_free_params(self, random_state=None): - if random_state is None: - random = np.random - else: - random = get_random_state(random_state) - n = len(self.params.free) - rand = random.rand(n) - self._set_rescaled_free_params(rand) - - def reset_all(self): - """Reset both free and fixed parameters to their nominal values.""" - for d in self: - d.reset_all() - - def reset_free(self): - """Reset only free parameters to their nominal values.""" - for d in self: - d.reset_free() - - def set_nominal_by_current_values(self): - """Define the nominal values as the parameters' current values.""" - for d in self: - d.set_nominal_by_current_values() - - def _set_rescaled_free_params(self, rvalues): - """Set free param values given a simple list of [0,1]-rescaled, - dimensionless values - """ - if not isinstance(rvalues,list): - rvalues = list(rvalues) - - if self.shared_params == []: - for d in self: - rp = [] - for j in range(len(d.params.free)): - rp.append(rvalues.pop(0)) - d._set_rescaled_free_params(rp) - - else: - sp = [] # first get the shared params - for i in range(len(self.shared_params)): - sp.append(rvalues.pop(0)) - spi = self.shared_param_ind_list - - for i in range(len(self._distribution_makers)): - rp = [] - for j in range(len(self._distribution_makers[i].params.free) - len(spi[i])): - rp.append(rvalues.pop(0)) - for j in range(len(spi[i])): - rp.insert(spi[i][j][0],sp[spi[i][j][1]]) - self._distribution_makers[i]._set_rescaled_free_params(rp) - - -def test_Detectors(verbosity=Levels.WARN): - from pisa.analysis.analysis import update_param_values_detector - - """Run a combination of two DeepCore detectors.""" - p1_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") - p1_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") - p1_nu.detector_name, p1_mu.detector_name = 'detector1', 'detector1' - - p2_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") - p2_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") - p2_nu.detector_name, p2_mu.detector_name = 'detector2', 'detector2' - - # Initializing - try: - set_verbosity(Levels.INFO) - logging.info(f'Initializing Detectors') - - set_verbosity(Levels.WARN) - model = Detectors([p1_nu, p1_mu, p2_nu, p2_mu], shared_params=['deltam31', 'theta13', 'theta23', 'nue_numu_ratio', 'Barr_uphor_ratio', 'Barr_nu_nubar_ratio', 'delta_index', 'nutau_norm', 'nu_nc_norm', 'opt_eff_overall', 'opt_eff_lateral', 'opt_eff_headon', 'ice_scattering', 'ice_absorption', 'atm_muon_scale']) - - except Exception as err: - msg = f"<< Error when initializing the Detectors >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error("#" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully initialized Detectors >>") - - finally: - set_verbosity(verbosity) - - # Get outputs - try: - set_verbosity(Levels.INFO) - logging.info(f'Running Detectors (takes a bit)') - - set_verbosity(Levels.WARN) - model.get_outputs() - - except Exception as err: - msg = f"<< Error when running the Detectors >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error("#" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully ran Detectors >>") - - finally: - set_verbosity(verbosity) - - # Change parameters - set_verbosity(Levels.INFO) - logging.info(f'Change parameters') - - set_verbosity(Levels.WARN) - model.reset_free() - model.params.opt_eff_lateral.value = 20 # shared parameter - model.params.aeff_scale.value = 2 # only changes value for detector1 - - update_param_values_detector(model, model.params) - - o0 = model.distribution_makers[0].params.opt_eff_lateral.value.magnitude - o1 = model.distribution_makers[1].params.opt_eff_lateral.value.magnitude - a0 = model.distribution_makers[0].params.aeff_scale.value.magnitude - a1 = model.distribution_makers[1].params.aeff_scale.value.magnitude - - if not o0 == 20 or not o1 == 20: - msg = f"<< Error when changing shared parameter >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - elif not a0 == 2 or not a1 == 1: - msg = f"<< Error when changing non-shared parameter >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully changed parameters >>") - - # Unit test - set_verbosity(Levels.INFO) - logging.info(f'Unit test') - - set_verbosity(Levels.WARN) - hierarchies = ['nh', 'ih'] - t23 = dict( - ih=49.5 * ureg.deg, - nh=42.3 * ureg.deg - ) - current_hier = 'nh' - - for new_hier in hierarchies: - #assert model.param_selections == [current_hier], str(model.param_selections) - assert model.params.theta23.value == t23[current_hier], str(model.params.theta23) - - # Select the hierarchy - model.select_params(new_hier) - #assert model.param_selections == [new_hier], str(model.param_selections) - assert model.params.theta23.value == t23[new_hier], str(model.params.theta23) - - # Reset to "current" - model.select_params(current_hier) - #assert model.param_selections == [current_hier], str(model.param_selections) - assert model.params.theta23.value == t23[current_hier], str(model.params.theta23) - - set_verbosity(verbosity) - logging.info("<< Successfully ran unit test >>") - - # Done - logging.info(f'Detectors class test done') - - -def parse_args(): - """Get command line arguments""" - parser = ArgumentParser( - description='''Generate, store, and plot distributions from different - pipeline configuration file(s) for one or more detectors.''', - formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - '-p', '--pipeline', type=str, required=True, - metavar='CONFIGFILE', action='append', - help='''Settings file for each pipeline (repeat for multiple).''' - ) - parser.add_argument( - '--shared_params', type=str, default=None, - action='append', - help='''Shared parameters for multi det analysis (repeat for multiple).''' - ) - parser.add_argument( - '--select', metavar='PARAM_SELECTIONS', nargs='+', default=None, - help='''Param selectors (separated by spaces) to use to override any - defaults in the config file.''' - ) - parser.add_argument( - '--return-sum', action='store_true', - help='''Return a sum of the MapSets output by the distribution maker's - pipelines as a single map (as opposed to a list of MapSets, one per - pipeline)''' - ) - parser.add_argument( - '--outdir', type=str, action='store', - help='Directory into which to store the output' - ) - parser.add_argument( - '--pdf', action='store_true', - help='''Produce pdf plot(s).''' - ) - parser.add_argument( - '--png', action='store_true', - help='''Produce png plot(s).''' - ) - parser.add_argument( - '-v', action='count', default=None, - help='Set verbosity level' - ) - args = parser.parse_args() - return args - - -def main(return_outputs=False): - """Main; call as script with `return_outputs=False` or interactively with - `return_outputs=True`""" - from pisa.utils.plotter import Plotter - args = parse_args() - set_verbosity(args.v) - plot_formats = [] - if args.pdf: - plot_formats.append('pdf') - if args.png: - plot_formats.append('png') - - detectors = Detectors(args.pipeline,shared_params=args.shared_params) - Names = detectors.det_names - if args.select is not None: - detectors.select_params(args.select) - - outputs = detectors.get_outputs(return_sum=args.return_sum) - - #outputs = outputs[0].fluctuate( - # method='poisson', random_state=get_random_state([0, 0, 0])) - - if args.outdir: - # TODO: unique filename: append hash (or hash per pipeline config) - fname = 'detectors_outputs.json.bz2' - mkdir(args.outdir) - fpath = expand(os.path.join(args.outdir, fname)) - to_file(outputs, fpath) - - if args.outdir and plot_formats: - my_plotter = Plotter( - outdir=args.outdir, - fmt=plot_formats, log=False, - annotate=False - ) - for num, output in enumerate(outputs): - if args.return_sum: - my_plotter.plot_2d_array( - output, - fname=Names[num] - ) - else: - for out in output: - my_plotter.plot_2d_array( - out, - fname=Names[num] - ) - - if return_outputs: - return detectors, outputs - - -if __name__ == '__main__': - detectors, outputs = main(return_outputs=True) diff --git a/pisa/core/distribution_maker.py b/pisa/core/distribution_maker.py deleted file mode 100755 index 69aa1529f..000000000 --- a/pisa/core/distribution_maker.py +++ /dev/null @@ -1,629 +0,0 @@ -#! /usr/bin/env python - -""" -DistributionMaker class definition and a simple script to generate, save, and -plot a distribution from pipeline config file(s). -""" - -from __future__ import absolute_import - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from collections import OrderedDict -from collections.abc import Mapping -import inspect -from itertools import product -import os -from tabulate import tabulate - -import numpy as np - -from pisa import ureg -from pisa.core.map import MapSet -from pisa.core.pipeline import Pipeline -from pisa.core.param import ParamSet -from pisa.utils.config_parser import PISAConfigParser -from pisa.utils.fileio import expand, mkdir, to_file -from pisa.utils.hash import hash_obj -from pisa.utils.log import set_verbosity, logging -from pisa.utils.random_numbers import get_random_state - - -__all__ = ['DistributionMaker', 'test_DistributionMaker', 'parse_args', 'main'] - -__author__ = 'J.L. Lanfranchi, P. Eller' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -class DistributionMaker(object): - """Container for one or more pipelines; the outputs from all contained - pipelines are added together to create the distribution. - - Parameters - ---------- - pipelines : Pipeline or convertible thereto, or iterable thereof - A new pipline is instantiated with each object passed. Legal objects - are already-instantiated Pipelines and anything interpret-able by the - Pipeline init method. - - label : str or None, optional - A label for the DistributionMaker. - - set_livetime_from_data : bool, optional - If a (data) pipeline is found with the attr `metadata` and which has - the contained key "livetime", this livetime is used to set the livetime - on all pipelines which have param `params.livetime`. If multiple such - data pipelines are found and `set_livetime_from_data` is True, all are - checked for consistency (you should use multiple `Detector`s if you - have incompatible data sets). - - profile : bool - timing of inidividual pipelines / stages - - Notes - ----- - Free params with the same name in two pipelines are updated at the same - time so long as you use the `update_params`, `set_free_params`, or - `_set_rescaled_free_params` methods. Also use `select_params` to select - params across all pipelines (if a pipeline does not have one or more of - the param selectors specified, those param selectors have no effect in - that pipeline). - - `_*_rescaled_*` properties and methods are for interfacing with a - minimizer, where values are linearly mapped onto the interval [0, 1] - according to the parameter's allowed range. Avoid interfacing with these - except if using a minimizer, since, e.g., units are stripped and values and - intervals are non-physical. - - """ - def __init__(self, pipelines, label=None, set_livetime_from_data=True, profile=False): - - self.label = label - self._source_code_hash = None - self.metadata = OrderedDict() - - self._profile = profile - - self._pipelines = [] - if isinstance(pipelines, (str, PISAConfigParser, OrderedDict, - Pipeline)): - pipelines = [pipelines] - - for pipeline in pipelines: - if not isinstance(pipeline, Pipeline): - pipeline = Pipeline(pipeline, profile=profile) - self._pipelines.append(pipeline) - - data_run_livetime = None - if set_livetime_from_data: - # - # Get livetime metadata if defined in any stage in any pipeline - # - for pipeline_idx, pipeline in enumerate(self): - for stage_idx, stage in enumerate(pipeline): - if not ( - hasattr(stage, "metadata") - and isinstance(stage.metadata, Mapping) - and "livetime" in stage.metadata - ): - continue - - if data_run_livetime is None: - data_run_livetime = stage.metadata["livetime"] - - if stage.metadata["livetime"] != data_run_livetime: - raise ValueError( - "Pipeline index {}, stage index {} has data" - " livetime = {}, in disagreement with" - " previously-found livetime = {}".format( - pipeline_idx, - stage_idx, - stage.metadata["livetime"], - data_run_livetime, - ) - ) - - # Save the last livetime found inside the pipeline's metadata - # TODO: implement metadata in the pipeline class instead - self.metadata['livetime'] = data_run_livetime - # - # Set param `params.livetime` for any pipelines that have it - # - if data_run_livetime is not None: - - data_run_livetime *= ureg.sec - - for pipeline_idx, pipeline in enumerate(self): - - if "livetime" not in pipeline.params.names: - continue - - pipeline.params.livetime.is_fixed = True - - if pipeline.params.livetime != data_run_livetime: - - logging.warning( - "Pipeline index %d has params.livetime = %s, in" - " disagreement with data livetime = %s defined by" - " data. The pipeline's livetime param will be" - " reset to the latter value and set to be fixed" - " (if it is not alredy).", - pipeline_idx, - pipeline.params.livetime.value, - data_run_livetime, - ) - pipeline.params.livetime = data_run_livetime - - - #for pipeline in self: - # pipeline.select_params(self.param_selections, - # error_on_missing=False) - - # Make sure that all the pipelines have the same detector name (or None) - self.detector_name = 'no_name' - for p in self._pipelines: - name = p.detector_name - if name != self.detector_name and self.detector_name != 'no_name': - raise NameError( - 'Different detector names in distribution_maker pipelines' - ) - - self.detector_name = name - - # set parameters with an identical name to the same object - # otherwise we get inconsistent behaviour when setting repeated params - # See Isues #566 and #648 - # Also, do this for all selections! - original_selection = self.param_selections - all_selections = set() - for pipeline in self: - for stage in pipeline.stages: - all_selections.update(stage._param_selector._selector_params.keys()) - for selection in all_selections: - self.select_params(selection) - all_params = self.params - for pipeline in self: - pipeline.update_params(all_params, existing_must_match=True, extend=False) - self.select_params(original_selection) - - def __repr__(self): - return self.tabulate(tablefmt="presto") - - def _repr_html_(self): - return self.tabulate(tablefmt="html") - - def tabulate(self, tablefmt="plain"): - headers = ['pipeline number', 'name', 'detector name', 'output_binning', 'output_key', 'profile'] - colalign=["right"] + ["center"] * (len(headers) -1 ) - table = [] - for i, p in enumerate(self.pipelines): - table.append([i, p.name, p.detector_name, p.output_binning, p.output_key, p.profile]) - return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign) - - def __iter__(self): - return iter(self._pipelines) - - @property - def profile(self): - return self._profile - - @profile.setter - def profile(self, value): - for pipeline in self.pipelines: - pipeline.profile = value - self._profile = value - - - def run(self): - for pipeline in self: - pipeline.run() - - def setup(self): - """Setup (reset) all pipelines""" - for p in self: - p.setup() - - def get_outputs(self, return_sum=False, sum_map_name='total', - sum_map_tex_name='Total', **kwargs): - """Compute and return the outputs. - - Parameters - ---------- - return_sum : bool - If True, add up all Maps in all MapSets returned by all pipelines. - The result will be a single Map contained in a MapSet. - If False, return a list where each element is the full MapSet - returned by each pipeline in the DistributionMaker. - - - **kwargs - Passed on to each pipeline's `get_outputs` method. - - Returns - ------- - MapSet if `return_sum=True` or list of MapSets if `return_sum=False` - - """ - - outputs = [pipeline.get_outputs(**kwargs) for pipeline in self] # pylint: disable=redefined-outer-name - - if return_sum: - - # Case where the output of a pipeline is a mapSet - if isinstance(outputs[0], MapSet): - outputs = sum([sum(x) for x in outputs]) # This produces a Map - outputs.name = sum_map_name - outputs.tex = sum_map_tex_name - outputs = MapSet(outputs) # final output must be a MapSet - - # Case where the output of a pipeline is a dict of different MapSets - elif isinstance(outputs[0], OrderedDict): - output_dict = OrderedDict() - for key in outputs[0].keys(): - output_dict[key] = sum([sum(A[key]) for A in outputs]) # This produces a Map objects - output_dict[key].name = sum_map_name - output_dict[key].tex = sum_map_tex_name - output_dict[key] = MapSet(output_dict[key]) - - outputs = output_dict - - return outputs - - def update_params(self, params): - for pipeline in self: - pipeline.update_params(params) - - def select_params(self, selections, error_on_missing=True): - successes = 0 - if selections is not None: - for pipeline in self: - try: - pipeline.select_params(selections, error_on_missing=True) - except KeyError: - pass - else: - successes += 1 - - if error_on_missing and successes == 0: - raise KeyError( - 'None of the stages from any pipeline in this distribution' - ' maker has all of the selections %s available.' - %(selections,) - ) - else: - for pipeline in self: - possible_selections = pipeline.param_selections - if possible_selections: - logging.warning( - "Although you didn't make a parameter " - "selection, the following were available: %s." - " This may cause issues.", possible_selections - ) - - def add_covariance(self,covmat): - """ - Incorporates covariance between parameters. - This is done by replacing relevant correlated parameters with "DerivedParams" - that depend on new parameters in an uncorrelated basis - - The parameters are all updated, but this doesn't add the new parameters in - So we go to the first stage we find that has one of the original parameters and manually add this in - - See the docstring in "pisa.core.param.ParamSet" for more - """ - paramset = self.params - - paramset.add_covariance(covmat) - - self.update_params(paramset) - - success = False - for pipeline in self.pipelines: - retval = pipeline._add_rotated(paramset, suppress_warning=True) - success = success or retval - - if not success: - raise ValueError("unsuccessful?") - - @property - def pipelines(self)->'list[Pipeline]': - return self._pipelines - - @property - def params(self): - params = ParamSet() - for pipeline in self: - params.extend(pipeline.params) - return params - - @property - def param_selections(self): - selections = set() - for pipeline in self: - selections.update(pipeline.param_selections) - return sorted(selections) - - @property - def source_code_hash(self): - """Hash for the source code of this object's class. - - Not meant to be perfect, but should suffice for tracking provenance of - an object stored to disk that were produced by a Stage. - """ - if self._source_code_hash is None: - self._source_code_hash = hash_obj(inspect.getsource(self.__class__)) - return self._source_code_hash - - @property - def hash(self): - return hash_obj([self.source_code_hash] + [p.hash for p in self]) - - @property - def num_events_per_bin(self): - ''' - returns an array of bin indices where none of the - pipelines have MC events - - assumes that all pipelines have the same binning output specs - - number of events is taken out of the last stage of the pipeline - ''' - num_bins = self.pipelines[0].stages[-1].output_specs.tot_num_bins - num_events_per_bin = np.zeros(num_bins) - - for p in self.pipelines: - assert p.stages[-1].output_specs.tot_num_bins==num_bins, 'ERROR: different pipelines have different binning' - - for c in p.stages[-1].data: - for index in range(num_bins): - index_mask = c.array_data['bin_{}_mask'.format(index)].get('host') - current_weights = c.array_data['weights'].get('host')[index_mask] - n_weights = current_weights.shape[0] - num_events_per_bin[index] += n_weights - - return num_events_per_bin - - - @property - def empty_bin_indices(self): - '''Find indices where there are no events present - ''' - empty_counts = self.num_events_per_bin == 0 - indices = np.where(empty_counts)[0] - return indices - - - def set_free_params(self, values): - """Set free parameters' values. - - Parameters - ---------- - values : list of quantities - - """ - for name, value in zip(self.params.free.names, values): - for pipeline in self: - if name in pipeline.params.free.names: - pipeline.params[name] = value - elif name in pipeline.params.names: - raise AttributeError( - 'Trying to set value for "%s", a parameter that is' - ' fixed in at least one pipeline' %name - ) - - def randomize_free_params(self, random_state=None): - if random_state is None: - random = np.random - else: - random = get_random_state(random_state) - n = len(self.params.free) - rand = random.rand(n) - self._set_rescaled_free_params(rand) - - def reset_all(self): - """Reset both free and fixed parameters to their nominal values.""" - for p in self: - p.params.reset_all() - - def reset_free(self): - """Reset only free parameters to their nominal values.""" - for p in self: - p.params.reset_free() - - def set_nominal_by_current_values(self): - """Define the nominal values as the parameters' current values.""" - for p in self: - p.params.set_nominal_by_current_values() - - def _set_rescaled_free_params(self, rvalues): - """Set free param values given a simple list of [0,1]-rescaled, - dimensionless values - - """ - names = self.params.free.names - for pipeline in self: - for name, rvalue in zip(names, rvalues): - if name in pipeline.params.free.names: - pipeline.params[name]._rescaled_value = rvalue # pylint: disable=protected-access - elif name in pipeline.params.names: - raise AttributeError( - 'Trying to set value for "%s", a parameter that is' - ' fixed in at least one pipeline' %name - ) - - -def test_DistributionMaker(): - """Unit tests for DistributionMaker""" - # - # Test: select_params and param_selections - # - - # TODO: make test config file with materials param selector, then uncomment - # removed tests below - - hierarchies = ['nh', 'ih'] - #materials = ['iron', 'pyrolite'] - materials = [] - - t23 = dict( - ih=49.5 * ureg.deg, - nh=42.3 * ureg.deg - ) - YeO = dict( - iron=0.4656, - pyrolite=0.4957 - ) - - # Instantiate with two pipelines: first has both nh/ih and iron/pyrolite - # param selectors, while the second only has nh/ih param selectors. - dm = DistributionMaker( - ['settings/pipeline/example.cfg', 'settings/pipeline/example.cfg'] - ) - - #current_mat = 'iron' - current_hier = 'nh' - - #for new_hier, new_mat in product(hierarchies, materials): - for new_hier in hierarchies: - #assert dm.param_selections == sorted([current_hier, current_mat]), \ - # str(dm.param_selections) - #assert dm.param_selections == sorted([current_hier, 'earth']), str(dm.param_selections) - assert dm.params.theta23.value == t23[current_hier], str(dm.params.theta23) - #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) - - # Select just the hierarchy - dm.select_params(new_hier) - #assert dm.param_selections == sorted([new_hier, current_mat]), \ - # str(dm.param_selections) - #assert dm.param_selections == sorted([new_hier, 'earth']), str(dm.param_selections) - assert dm.params.theta23.value == t23[new_hier], str(dm.params.theta23) - #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) - - ## Select just the material - #dm.select_params(new_mat) - #assert dm.param_selections == sorted([new_hier, new_mat]), \ - # str(dm.param_selections) - #assert dm.params.theta23.value == t23[new_hier], \ - # str(dm.params.theta23) - #assert dm.params.YeO.value == YeO[new_mat], \ - # str(dm.params.YeO) - - # Reset both to "current" - #dm.select_params([current_mat, current_hier]) - dm.select_params(current_hier) - #assert dm.param_selections == sorted([current_hier, current_mat]), \ - # str(dm.param_selections) - #assert dm.param_selections == sorted([current_hier, 'earth']), str(dm.param_selections) - assert dm.params.theta23.value == t23[current_hier], str(dm.params.theta23) - #assert dm.params.YeO.value == YeO[current_mat], str(dm.params.YeO) - - ## Select both hierarchy and material - #dm.select_params([new_mat, new_hier]) - #assert dm.param_selections == sorted([new_hier, new_mat]), \ - # str(dm.param_selections) - #assert dm.params.theta23.value == t23[new_hier], \ - # str(dm.params.theta23) - #assert dm.params.YeO.value == YeO[new_mat], \ - # str(dm.params.YeO) - - #current_hier = new_hier - #current_mat = new_mat - - -def parse_args(): - """Get command line arguments""" - parser = ArgumentParser( - description='''Generate, store, and plot a distribution from pipeline - configuration file(s).''', - formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - '-p', '--pipeline', type=str, required=True, - metavar='CONFIGFILE', action='append', - help='''Settings file for each pipeline (repeat for multiple).''' - ) - parser.add_argument( - '--select', metavar='PARAM_SELECTIONS', nargs='+', default=None, - help='''Param selectors (separated by spaces) to use to override any - defaults in the config file.''' - ) - parser.add_argument( - '--return-sum', action='store_true', - help='''Return a sum of the MapSets output by the distribution maker's - pipelines as a single map (as opposed to a list of MapSets, one per - pipeline)''' - ) - parser.add_argument( - '--outdir', type=str, action='store', - help='Directory into which to store the output' - ) - parser.add_argument( - '--pdf', action='store_true', - help='''Produce pdf plot(s).''' - ) - parser.add_argument( - '--png', action='store_true', - help='''Produce png plot(s).''' - ) - parser.add_argument( - '-v', action='count', default=None, - help='Set verbosity level' - ) - args = parser.parse_args() - return args - - -def main(return_outputs=False): - """Main; call as script with `return_outputs=False` or interactively with - `return_outputs=True`""" - from pisa.utils.plotter import Plotter - args = parse_args() - set_verbosity(args.v) - plot_formats = [] - if args.pdf: - plot_formats.append('pdf') - if args.png: - plot_formats.append('png') - - distribution_maker = DistributionMaker(pipelines=args.pipeline) # pylint: disable=redefined-outer-name - if args.select is not None: - distribution_maker.select_params(args.select) - - outputs = distribution_maker.get_outputs(return_sum=args.return_sum) # pylint: disable=redefined-outer-name - if args.outdir: - # TODO: unique filename: append hash (or hash per pipeline config) - fname = 'distribution_maker_outputs.json.bz2' - mkdir(args.outdir) - fpath = expand(os.path.join(args.outdir, fname)) - to_file(outputs, fpath) - - if args.outdir and plot_formats: - my_plotter = Plotter( - outdir=args.outdir, - fmt=plot_formats, log=False, - annotate=False - ) - for num, output in enumerate(outputs): - my_plotter.plot_2d_array( - output, - fname='dist_output_%d' % num - ) - - if return_outputs: - return distribution_maker, outputs - - -if __name__ == '__main__': - distribution_maker, outputs = main(return_outputs=True) # pylint: disable=invalid-name diff --git a/pisa/core/events.py b/pisa/core/events.py deleted file mode 100644 index e0833f005..000000000 --- a/pisa/core/events.py +++ /dev/null @@ -1,1252 +0,0 @@ -#! /usr/bin/env python - -""" -Events class for working with PISA events files and Data class for working -with arbitrary Monte Carlo and datasets -""" - - -from __future__ import absolute_import, division, print_function - -from copy import deepcopy -from collections.abc import Iterable, Mapping, Sequence -from collections import OrderedDict - -import h5py -import numpy as np -from numpy import inf, nan # pylint: disable=unused-import -from uncertainties import unumpy as unp - -from pisa import ureg -from pisa.core.binning import MultiDimBinning, OneDimBinning -from pisa.core.map import Map, MapSet -from pisa.utils import resources -from pisa.utils.comparisons import normQuant, recursiveEquality -from pisa.utils.flavInt import (FlavIntData, FlavIntDataGroup, - flavintGroupsFromString, NuFlavIntGroup) -from pisa.utils.format import text2tex -from pisa.utils.hash import hash_obj -from pisa.utils.fileio import from_file -from pisa.utils import hdf -from pisa.utils.log import logging, set_verbosity - - -__all__ = ['Events', 'Data', 'test_Events'] - -__author__ = 'J.L. Lanfranchi, S. Mandalia' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: test hash function (attr) -class Events(FlavIntData): - """Container for storing events, including metadata about the events. - - Examples - -------- - >>> from pisa.core.binning import OneDimBinning, MultiDimBinning - - >>> # Load events from a PISA HDF5 file - >>> events = Events('events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5') - - >>> # Apply a simple cut - >>> events = events.applyCut('(true_coszen <= 0.5) & (true_energy <= 70)') - >>> np.max(events[fi]['true_coszen']) <= 0.5 - True - - >>> # Apply an "inbounds" cut via a OneDimBinning - >>> true_e_binning = OneDimBinning( - ... name='true_energy', num_bins=80, is_log=True, - ... domain=[10, 60]*ureg.GeV - ... ) - >>> events = events.keepInbounds(true_e_binning) - >>> np.min(events[fi]['true_energy']) >= 10 - True - - >>> print([(k, events.metadata[k]) for k in sorted(events.metadata.keys())]) - [('cuts', ['analysis']), - ('detector', 'pingu'), - ('flavints_joined', - ['nue_cc+nuebar_cc', - 'numu_cc+numubar_cc', - 'nutau_cc+nutaubar_cc', - 'nuall_nc+nuallbar_nc']), - ('geom', 'v39'), - ('proc_ver', '5.1'), - ('runs', [620, 621, 622])] - - """ - def __init__(self, val=None): - self.metadata = OrderedDict([ - ('detector', ''), - ('geom', ''), - ('runs', []), - ('proc_ver', ''), - ('cuts', []), - ('flavints_joined', []), - ]) - - meta = OrderedDict() - data = FlavIntData() - if isinstance(val, (str, h5py.Group)): - data = hdf.from_hdf(val) - meta = getattr(data, 'attrs', OrderedDict()) - elif isinstance(val, Events): - meta = deepcopy(val.metadata) - data = deepcopy(val) - elif isinstance(val, Mapping): - data = deepcopy(val) - if hasattr(val, 'metadata'): - meta = deepcopy(val.metadata) - elif hasattr(val, 'attrs'): - meta = deepcopy(val.attrs) - - for key, val_ in meta.items(): - if hasattr(val_, 'tolist') and callable(val_.tolist): - meta[key] = val_.tolist() - - self.metadata.update(meta) - self.validate(data) - self.update(data) - self.update_hash() - - def __str__(self): - meta = [(str(k) + ' : ' + str(v)) for k, v in self.metadata.items()] - #fields = - return '\n'.join(meta) - - def __repr__(self): - return str(self) - - @property - def hash(self): - """Hash value""" - return self._hash - - def __hash__(self): - return self.hash - - def update_hash(self): - """Update the cached hash value""" - self._hash = hash_obj(normQuant(self.metadata)) - - @property - def flavint_groups(self): - """All flavor/interaction type groups (even singletons) present""" - return sorted(flavintGroupsFromString( - ','.join(self.metadata['flavints_joined']) - )) - - @property - def joined_string(self): - """Concise string identifying _only_ joined flavints""" - joined_groups = sorted( - [NuFlavIntGroup(j) for j in self.metadata['flavints_joined']] - ) - if len(joined_groups) == 0: - return 'unjoined' - return 'joined_G_' + '_G_'.join([str(g) for g in joined_groups]) - - def meta_eq(self, other): - """Test whether the metadata for this object matches that of `other`""" - return recursiveEquality(self.metadata, other.metadata) - - def data_eq(self, other): - """Test whether the data for this object matches that of `other`""" - return recursiveEquality(self, other) - - def __eq__(self, other): - return self.meta_eq(other) and self.data_eq(other) - - def save(self, fname, **kwargs): - hdf.to_hdf(self, fname, attrs=self.metadata, **kwargs) - - def histogram(self, kinds, binning, binning_cols=None, weights_col=None, - errors=False, name=None, tex=None): - """Histogram the events of all `kinds` specified, with `binning` and - optionally applying `weights`. - - Parameters - ---------- - kinds : string, sequence of NuFlavInt, or NuFlavIntGroup - binning : OneDimBinning, MultiDimBinning or sequence of arrays (one array per binning dimension) - binning_cols : string or sequence of strings - Bin only these dimensions, ignoring other dimensions in `binning` - weights_col : None or string - Column to use for weighting the events - errors : bool - Whether to attach errors to the resulting Map - name : None or string - Name to give to resulting Map. If None, a default is derived from - `kinds` and `weights_col`. - tex : None or string - TeX label to give to the resulting Map. If None, default is - dereived from the `name` specified (or its value derived from - `kinds` and `weights_col`). - - Returns - ------- - Map : numpy ndarray with as many dimensions as specified by `binning` - argument - - """ - # TODO: make able to take integer for `binning` and--in combination - # with units in the Events columns--generate an appropriate - # MultiDimBinning object, attach this and return the package as a Map. - - if not isinstance(kinds, NuFlavIntGroup): - kinds = NuFlavIntGroup(kinds) - if isinstance(binning_cols, str): - binning_cols = [binning_cols] - assert weights_col is None or isinstance(weights_col, str) - - # TODO: units of columns, and convert bin edges if necessary - if isinstance(binning, OneDimBinning): - binning = MultiDimBinning([binning]) - elif isinstance(binning, MultiDimBinning): - pass - elif (isinstance(binning, Iterable) - and not isinstance(binning, Sequence)): - binning = list(binning) - elif isinstance(binning, Sequence): - pass - else: - raise TypeError('Unhandled type %s for `binning`.' %type(binning)) - - if isinstance(binning, Sequence): - raise NotImplementedError( - 'Simle sequences not handled at this time. Please specify a' - ' OneDimBinning or MultiDimBinning object for `binning`.' - ) - #assert len(binning_cols) == len(binning) - #bin_edges = binning - - # TODO: units support for Events will mean we can do `m_as(...)` here! - bin_edges = [edges.magnitude for edges in binning.bin_edges] - if binning_cols is None: - binning_cols = binning.names - else: - assert set(binning_cols).issubset(set(binning.names)) - - # Extract the columns' data into a list of array(s) for histogramming - repr_flavint = kinds[0] - sample = [self[repr_flavint][colname] for colname in binning_cols] - err_weights = None - hist_weights = None - if weights_col is not None: - hist_weights = self[repr_flavint][weights_col] - if errors: - err_weights = np.square(hist_weights) - - hist, edges = np.histogramdd(sample=sample, - weights=hist_weights, - bins=bin_edges) - if errors: - sumw2, edges = np.histogramdd(sample=sample, - weights=err_weights, - bins=bin_edges) - hist = unp.uarray(hist, np.sqrt(sumw2)) - - if name is None: - if tex is None: - tex = kinds.tex - if weights_col is not None: - tex += r', \; {\rm weights=' + text2tex(weights_col) + r'}' - - name = str(kinds) - if weights_col is not None: - name += ', weights=' + weights_col - - if tex is None: - tex = text2tex(name) - - return Map(name=name, hist=hist, binning=binning, tex=tex) - - def applyCut(self, keep_criteria): - """Apply a cut by specifying criteria for keeping events. The cut must - be successfully applied to all flav/ints in the events object before - the changes are kept, otherwise the cuts are reverted. - - Parameters - ---------- - keep_criteria : string - Any string interpretable as numpy boolean expression. - - Examples - -------- - Keep events with true energies in [1, 80] GeV (note that units are not - recognized, so have to be handled outside this method) - - >>> events = events.applyCut("(true_energy >= 1) & (true_energy <= 80)") - - Do the opposite with "~" inverting the criteria - - >>> events = events.applyCut("~((true_energy >= 1) & (true_energy <= 80))") - - Numpy namespace is available for use via `np` prefix - - >>> events = events.applyCut("np.log10(true_energy) >= 0") - - """ - if keep_criteria in self.metadata['cuts']: - logging.debug("Criteria '%s' have already been applied. Returning" - " events unmodified.", keep_criteria) - return self - - # Nothing to do if no cuts specified - if keep_criteria is None: - return self - - assert isinstance(keep_criteria, str) - - #Only get the flavints for which we have data - flavints_to_process = self.flavints_present - flavints_processed = [] - remaining_data = {} - for flavint in flavints_to_process: - #Get the evets for this flavor/interaction - data_dict = self[flavint] - - field_names = data_dict.keys() - - # TODO: handle unicode: - # * translate crit to unicode (easiest to hack but could be - # problematic elsewhere) - # * translate field names to ascii (probably should be done at - # the from_hdf stage?) - - # Replace simple field names with full paths into the data that - # lives in this object - crit_str = keep_criteria - for field_name in field_names: - crit_str = crit_str.replace( - field_name, 'self["%s"]["%s"]' %(flavint, field_name) - ) - mask = eval(crit_str) - remaining_data[flavint] = ( - {k : v[mask] for k, v in self[flavint].items()} - ) - flavints_processed.append(flavint) - - remaining_events = Events() - remaining_events.metadata.update(deepcopy(self.metadata)) - remaining_events.metadata['cuts'].append(keep_criteria) - - for flavint in flavints_processed: - remaining_events[flavint] = deepcopy(remaining_data[flavint]) - - return remaining_events - - def keepInbounds(self, binning): - """Cut out any events that fall outside `binning`. Note that events - that fall exactly on an outer edge are kept. - - Parameters - ---------- - binning : OneDimBinning or MultiDimBinning - - Returns - ------- - remaining_events : Events - - """ - try: - binning = OneDimBinning(binning) - except Exception: - pass - if isinstance(binning, OneDimBinning): - binning = [binning] - binning = MultiDimBinning(binning) - - current_cuts = self.metadata['cuts'] - new_cuts = [dim.inbounds_criteria for dim in binning] - unapplied_cuts = [c for c in new_cuts if c not in current_cuts] - if not unapplied_cuts: - logging.debug("All inbounds criteria '%s' have already been" - " applied. Returning events unmodified.", new_cuts) - return self - - all_cuts = deepcopy(current_cuts) + unapplied_cuts - - # Create a single cut from all unapplied cuts - keep_criteria = ' & '.join(['(%s)' % c for c in unapplied_cuts]) - - # Do the cutting - remaining_events = self.applyCut(keep_criteria=keep_criteria) - - # Replace the combined 'cuts' string with individual cut strings - remaining_events.metadata['cuts'] = all_cuts - - return remaining_events - - - @property - def flavints_present(self): - """Returns a tuple of the flavints that are present in the events""" - - flavints_present_list = [] - - #Loop over a tuple of all possible flav/int combinations - for flavint in self.flavints: - - # If a particular flavor/interaction combination is not present in the events, then - # self[flavint] will be set to np.nan - # Check this here, using a try block to catch exceptions throw if the data is actually - # there (in which case it is a dict, and np.isnan will raise an exception as cannot - # take a dit as input) - found_data_for_this_flavint = True - try: - if np.isnan(self[flavint]): - found_data_for_this_flavint = False - except TypeError: - pass - if found_data_for_this_flavint: - flavints_present_list.append(flavint) - - return tuple(flavints_present_list) - - -class Data(FlavIntDataGroup): - """Container for storing events, including metadata about the events. - - Examples - -------- - [('cuts', ['analysis']), - ('detector', 'pingu'), - ('flavints_joined', - ['nue_cc+nuebar_cc', - 'numu_cc+numubar_cc', - 'nutau_cc+nutaubar_cc', - 'nuall_nc+nuallbar_nc']), - ('geom', 'v39'), - ('proc_ver', '5.1'), - ('runs', [620, 621, 622])] - - """ - def __init__(self, val=None, flavint_groups=None, metadata=None): - # TODO(shivesh): add noise implementation - self.metadata = OrderedDict([ - ('name', ''), - ('detector', ''), - ('geom', ''), - ('runs', []), - ('proc_ver', ''), - ('cuts', []), - ('flavints_joined', []), - ]) - self.contains_neutrinos = False - self.contains_muons = False - self.contains_noise = False - - # Get data and metadata from val - meta = OrderedDict() - if isinstance(val, (str, h5py.Group)): - data = hdf.from_hdf(val) - meta = getattr(data, 'attrs', OrderedDict()) - elif isinstance(val, Data): - data = val - meta = getattr(val, 'metadata', OrderedDict()) - elif isinstance(val, (Mapping, FlavIntDataGroup)): - data = val - if hasattr(data, 'metadata'): - meta = data.metadata - elif hasattr(data, 'attrs'): - meta = data.attrs - else: - raise TypeError('Unrecognized `val` type %s' % type(val)) - - for key, val_ in meta.items(): - if hasattr(val_, 'tolist') and callable(val_.tolist): - meta[key] = val_.tolist() - - # Check consistency of metadata from val and from input - if meta is not None: - if metadata is not None and meta != metadata: - raise AssertionError('Input `metadata` does not match ' - 'metadata inside `val`') - self.metadata.update(meta) - elif metadata is not None: - self.metadata.update(metadata) - - # Find and deal with any muon data if it exists - if self.metadata['flavints_joined'] == list([]): - if 'muons' in data: - self.muons = data.pop('muons') - elif 'muons' in self.metadata['flavints_joined']: - if 'muons' not in data: - raise AssertionError('Metadata has muons specified but ' - 'they are not found in the data') - else: - self.muons = data.pop('muons') - elif 'muons' in data: - raise AssertionError('Found muons in data but not found in ' - 'metadata key `flavints_joined`') - - # Find and deal with any noise data if it exists - if self.metadata['flavints_joined'] == list([]): - if 'noise' in data: - self.noise = data.pop('noise') - elif 'noise' in self.metadata['flavints_joined']: - if 'noise' not in data: - raise AssertionError('Metadata has noise specified but ' - 'they are not found in the data') - else: - self.noise = data.pop('noise') - elif 'noise' in data: - raise AssertionError('Found noise in data but not found in ' - 'metadata key `flavints_joined`') - - # Instantiate a FlavIntDataGroup - if data == dict(): - self._flavint_groups = [] - else: - super().__init__(val=data, flavint_groups=flavint_groups) - self.contains_neutrinos = True - - # Check consistency of flavints_joined - if self.metadata['flavints_joined']: - combined_types = [] - if self.contains_neutrinos: - combined_types += [str(f) for f in self.flavint_groups] - if self.contains_muons: - combined_types += ['muons'] - if self.contains_noise: - combined_types += ['noise'] - if set(self.metadata['flavints_joined']) != \ - set(combined_types): - raise AssertionError( - '`flavint_groups` metadata does not match the ' - 'flavint_groups in the data\n{0} != ' - '{1}'.format(set(self.metadata['flavints_joined']), - set(combined_types)) - ) - else: - self.metadata['flavints_joined'] = [str(f) - for f in self.flavint_groups] - if self.contains_muons: - self.metadata['flavints_joined'] += ['muons'] - if self.contains_noise: - self.metadata['flavints_joined'] += ['noise'] - - self._hash = None - self.update_hash() - - @property - def hash(self): - """Probabilistically unique identifier""" - return self._hash - - @hash.setter - def hash(self, val): - self._hash = val - - def __hash__(self): - return self.hash - - def update_hash(self): - """Update the cached hash value""" - self._hash = hash_obj(normQuant(self.metadata)) - - @property - def muons(self): - """muon data""" - # TODO: it seems more sensible to return None rather than raise - # AttributeError, since the attribute `muons` absolutely exists, just - # it contains no information... hence, `None` value. - # Same for `neutrinos` property. - if not self.contains_muons: - raise AttributeError('No muons loaded in Data') - return self._muons - - @muons.setter - def muons(self, val): - assert isinstance(val, dict) - self.contains_muons = True - self._muons = val - - @property - def noise(self): - if not self.contains_noise: - raise AttributeError('No noise loaded in Data') - return self._noise - - @noise.setter - def noise(self, val): - assert isinstance(val, dict) - self.contains_noise = True - self._noise = val - - @property - def neutrinos(self): - """neutrino data""" - if not self.contains_neutrinos: - raise AttributeError('No neutrinos loaded in Data') - return dict(zip(self.keys(), self.values())) - - # TODO: make sure this returns all flavints, and not just joined (grouped) - # flavints, as is the case for the Events object - @property - def names(self): - """Names of flavints joined""" - return self.metadata['flavints_joined'] - - def meta_eq(self, other): - """Test whether the metadata for this object matches that of `other`""" - return recursiveEquality(self.metadata, other.metadata) - - def data_eq(self, other): - """Test whether the data for this object matche that of `other`""" - return recursiveEquality(self, other) - - def applyCut(self, keep_criteria): - """Apply a cut by specifying criteria for keeping events. The cut must - be successfully applied to all flav/ints in the events object before - the changes are kept, otherwise the cuts are reverted. - - Parameters - ---------- - keep_criteria : string - Any string interpretable as numpy boolean expression. - - Returns - ------- - remaining_events : Events - An Events object with the remaining events (deepcopied) and with - updated cut metadata including `keep_criteria`. - - Examples - -------- - Keep events with true energies in [1, 80] GeV (note that units are not - recognized, so have to be handled outside this method) - - >>> remaining = applyCut("(true_energy >= 1) & (true_energy <= 80)") - - Do the opposite with "~" inverting the criteria - - >>> remaining = applyCut("~((true_energy >= 1) & (true_energy <= 80))") - - Numpy namespace is available for use via `np` prefix - - >>> remaining = applyCut("np.log10(true_energy) >= 0") - - """ - # TODO(shivesh): function does not pass tests - raise NotImplementedError - - if keep_criteria in self.metadata['cuts']: - logging.debug("Criteria '%s' have already been applied. Returning" - " events unmodified.", keep_criteria) - return self - - assert isinstance(keep_criteria, str) - - fig_to_process = [] - if self.contains_neutrinos: - fig_to_process += deepcopy(self.flavint_groups) - if self.contains_muons: - fig_to_process += ['muons'] - if self.contains_noise: - fig_to_process += ['noise'] - - logging.info("Applying cut to %s : %s", fig_to_process, keep_criteria) - - fig_processed = [] - remaining_data = {} - for fig in fig_to_process: - data_dict = self[fig] - field_names = data_dict.keys() - - # TODO: handle unicode: - # * translate crit to unicode (easiest to hack but could be - # problematic elsewhere) - # * translate field names to ascii (probably should be done at - # the from_hdf stage?) - - # Replace simple field names with full paths into the data that - # lives in this object - crit_str = (keep_criteria) - for field_name in field_names: - crit_str = crit_str.replace( - field_name, 'self["%s"]["%s"]' % (fig, field_name) - ) - mask = eval(crit_str) - remaining_data[fig] = {k: v[mask] - for k, v in self[fig].items()} - fig_processed.append(fig) - - remaining_events = Events() - remaining_events.metadata.update(deepcopy(self.metadata)) - remaining_events.metadata['cuts'].append(keep_criteria) - for fig in fig_to_process: - remaining_events[fig] = deepcopy(remaining_data.pop(fig)) - - return remaining_events - - def keepInbounds(self, binning): - """Cut out any events that fall outside `binning`. Note that events - that fall exactly on the outer edge are kept. - - Parameters - ---------- - binning : OneDimBinning or MultiDimBinning - - """ - if isinstance(binning, OneDimBinning): - binning = [binning] - else: - assert isinstance(binning, MultiDimBinning) - current_cuts = self.metadata['cuts'] - new_cuts = [dim.inbounds_criteria for dim in binning] - unapplied_cuts = [c for c in new_cuts if c not in current_cuts] - for cut in unapplied_cuts: - self.applyCut(keep_criteria=cut) - - def transform_groups(self, flavint_groups): - """Transform Data into a structure given by the input - flavint_groups. Calls the corresponding inherited function. - - Parameters - ---------- - flavint_groups : string, or sequence of strings or sequence of - NuFlavIntGroups - - Returns - ------- - t_data : Data - """ - t_fidg = super().transform_groups(flavint_groups) - metadata = deepcopy(self.metadata) - metadata['flavints_joined'] = [str(f) for f in t_fidg.flavint_groups] - t_dict = dict(t_fidg) - if self.contains_muons: - metadata['flavints_joined'] += ['muons'] - t_dict['muons'] = deepcopy(self['muons']) - if self.contains_noise: - metadata['flavints_joined'] += ['noise'] - t_dict['noise'] = deepcopy(self['noise']) - t_fidg = t_dict - ret_obj = Data(t_fidg, metadata=metadata) - ret_obj.update_hash() - return ret_obj - - def digitize(self, kinds, binning, binning_cols=None): - """Wrapper for numpy's digitize function.""" - if isinstance(kinds, str): - kinds = [kinds] - if 'muons' not in kinds and 'noise' not in kinds: - kinds = self._parse_flavint_groups(kinds) - kinds = kinds[0] - - if isinstance(binning_cols, str): - binning_cols = [binning_cols] - - # TODO: units of columns, and convert bin edges if necessary - if isinstance(binning, OneDimBinning): - binning = MultiDimBinning([binning]) - elif isinstance(binning, MultiDimBinning): - pass - elif (isinstance(binning, Iterable) - and not isinstance(binning, Sequence)): - binning = list(binning) - elif isinstance(binning, Sequence): - pass - else: - raise TypeError('Unhandled type %s for `binning`.' % type(binning)) - - if isinstance(binning, Sequence): - raise NotImplementedError( - 'Simle sequences not handled at this time. Please specify a' - ' OneDimBinning or MultiDimBinning object for `binning`.' - ) - # assert len(binning_cols) == len(binning) - # bin_edges = binning - - # TODO: units support for Data will mean we can do `m_as(...)` here! - bin_edges = [edges.magnitude for edges in binning.bin_edges] - if binning_cols is None: - binning_cols = binning.names - else: - assert set(binning_cols).issubset(set(binning.names)) - - hist_idxs = [] - for colname in binning_cols: - sample = self[kinds][colname] - hist_idxs.append(np.digitize( - sample, binning[colname].bin_edges.m - )) - hist_idxs = np.vstack(hist_idxs).T - - return hist_idxs - - def histogram(self, kinds, binning, binning_cols=None, weights_col=None, - errors=False, name=None, tex=None, **kwargs): - """Histogram the events of all `kinds` specified, with `binning` and - optionally applying `weights`. - - Parameters - ---------- - kinds : string, sequence of NuFlavInt, or NuFlavIntGroup - binning : OneDimBinning, MultiDimBinning or sequence of arrays - (one array per binning dimension) - binning_cols : string or sequence of strings - Bin only these dimensions, ignoring other dimensions in `binning` - weights_col : None or string - Column to use for weighting the events - errors : bool - Whether to attach errors to the resulting Map - name : None or string - Name to give to resulting Map. If None, a default is derived from - `kinds` and `weights_col`. - tex : None or string - TeX label to give to the resulting Map. If None, default is - dereived from the `name` specified or the derived default. - **kwargs : Keyword args passed to Map object - - Returns - ------- - Map : numpy ndarray with as many dimensions as specified by `binning` - argument - - """ - # TODO: make able to take integer for `binning` and--in combination - # with units in the Data columns--generate an appropriate - # MultiDimBinning object, attach this and return the package as a Map. - - if isinstance(kinds, str): - kinds = [kinds] - if 'muons' not in kinds and 'noise' not in kinds: - kinds = self._parse_flavint_groups(kinds) - kinds = kinds[0] - - if isinstance(binning_cols, str): - binning_cols = [binning_cols] - assert weights_col is None or isinstance(weights_col, str) - - # TODO: units of columns, and convert bin edges if necessary - if isinstance(binning, OneDimBinning): - binning = MultiDimBinning([binning]) - elif isinstance(binning, MultiDimBinning): - pass - elif (isinstance(binning, Iterable) - and not isinstance(binning, Sequence)): - binning = list(binning) - elif isinstance(binning, Sequence): - pass - else: - raise TypeError('Unhandled type %s for `binning`.' % type(binning)) - - if isinstance(binning, Sequence): - raise NotImplementedError( - 'Simle sequences not handled at this time. Please specify a' - ' OneDimBinning or MultiDimBinning object for `binning`.' - ) - # assert len(binning_cols) == len(binning) - # bin_edges = binning - - # TODO: units support for Data will mean we can do `m_as(...)` here! - bin_edges = [edges.magnitude for edges in binning.bin_edges] - if binning_cols is None: - binning_cols = binning.names - else: - assert set(binning_cols).issubset(set(binning.names)) - - # Extract the columns' data into a list of array(s) for histogramming - sample = [self[kinds][colname] for colname in binning_cols] - err_weights = None - hist_weights = None - if weights_col is not None: - hist_weights = self[kinds][weights_col] - if errors: - err_weights = np.square(hist_weights) - - hist, edges = np.histogramdd(sample=sample, - weights=hist_weights, - bins=bin_edges) - if errors: - sumw2, edges = np.histogramdd(sample=sample, - weights=err_weights, - bins=bin_edges) - hist = unp.uarray(hist, np.sqrt(sumw2)) - - if name is None: - if tex is None: - try: - tex = kinds.tex - # TODO: specify specific exception(s) - except Exception: - tex = r'{0}'.format(kinds) - if weights_col is not None: - tex += r', \; {\rm weights} =' + text2tex(weights_col) - - name = str(kinds) - if weights_col is not None: - name += ', weights=' + weights_col - - if tex is None: - tex = text2tex(name) - - return Map(name=name, hist=hist, binning=binning, tex=tex, **kwargs) - - def histogram_set(self, binning, nu_weights_col, mu_weights_col, - noise_weights_col, mapset_name, errors=False): - """Uses the above histogram function but returns the set of all of them - for everything in the Data object. - - Parameters - ---------- - binning : OneDimBinning, MultiDimBinning - The definition of the binning for the histograms. - nu_weights_col : None or string - The column in the Data object by which to weight the neutrino - histograms. Specify None for unweighted histograms. - mu_weights_col : None or string - The column in the Data object by which to weight the muon - histograms. Specify None for unweighted histograms. - noise_weights_col : None or string - The column in the Data object by which to weight the noise - histograms. Specify None for unweighted histograms. - mapset_name : string - The name by which the resulting MapSet will be identified. - errors : boolean - A flag for whether to calculate errors on the histograms or not. - This defaults to False. - - Returns - ------- - MapSet : A MapSet containing all of the Maps for everything in this - Data object. - - """ - if not isinstance(binning, MultiDimBinning): - if not isinstance(binning, OneDimBinning): - raise TypeError('binning should be either MultiDimBinning or ' - 'OneDimBinning object. Got %s.' % type(binning)) - if nu_weights_col is not None: - if not isinstance(nu_weights_col, str): - raise TypeError('nu_weights_col should be a string. Got %s' - % type(nu_weights_col)) - if mu_weights_col is not None: - if not isinstance(mu_weights_col, str): - raise TypeError('mu_weights_col should be a string. Got %s' - % type(mu_weights_col)) - if not isinstance(errors, bool): - raise TypeError('flag for whether to calculate errors or not ' - 'should be a boolean. Got %s.' % type(errors)) - outputs = [] - if self.contains_neutrinos: - for fig in self.keys(): - outputs.append( - self.histogram( - kinds=fig, - binning=binning, - weights_col=nu_weights_col, - errors=errors, - name=str(NuFlavIntGroup(fig)) - ) - ) - if self.contains_muons: - outputs.append( - self.histogram( - kinds='muons', - binning=binning, - weights_col=mu_weights_col, - errors=errors, - name='muons', - tex=r'\rm{muons}' - ) - ) - if self.contains_noise: - outputs.append( - self.histogram( - kinds='noise', - binning=binning, - weights_col=mu_weights_col, - errors=errors, - name='noise', - tex=r'\rm{noise}' - ) - ) - return MapSet(maps=outputs, name=mapset_name) - - def __getitem__(self, arg): - if isinstance(arg, str): - arg = arg.strip().lower() - if arg == 'muons': - return self.muons - if arg == 'noise': - return self.noise - tgt_obj = super().__getitem__(arg) - return tgt_obj - - def __setitem__(self, arg, value): - if isinstance(arg, str): - arg = arg.strip().lower() - if arg == 'muons': - self.muons = value - return - if arg == 'noise': - self.noise = value - return - super().__setitem__(arg, value) - - def __add__(self, other): - muons = None - noise = None - assert isinstance(other, Data) - - metadata = {} - for key in self.metadata: - if key == 'flavints_joined': - continue - if key in other.metadata: - if self.metadata[key] != other.metadata[key]: - raise AssertionError( - 'Metadata mismatch, key {0}, {1} != ' - '{2}'.format(key, self.metadata[key], - other.metadata[key]) - ) - else: - metadata[key] = deepcopy(self.metadata[key]) - else: - metadata[key] = deepcopy(self.metadata[key]) - - for key in other.metadata: - if key == 'flavints_joined': - continue - if key in self.metadata: - if other.metadata[key] != self.metadata[key]: - raise AssertionError( - 'Metadata mismatch, key {0}, {1} != ' - '{2}'.format(key, other.metadata[key], - self.metadata[key]) - ) - else: - metadata[key] = deepcopy(other.metadata[key]) - else: - metadata[key] = deepcopy(other.metadata[key]) - - if self.contains_muons: - if other.contains_muons: - muons = self._merge(deepcopy(self['muons']), other['muons']) - else: - muons = deepcopy(self['muons']) - elif other.contains_muons: - muons = deepcopy(other['muons']) - - if self.contains_noise: - if other.contains_noise: - noise = self._merge(deepcopy(self['noise']), other['noise']) - else: - noise = deepcopy(self['noise']) - elif other.contains_noise: - noise = deepcopy(other['noise']) - - if len(self.flavint_groups) == 0: - if len(other.flavint_groups) == 0: - a_fidg = FlavIntDataGroup(other) - elif len(other.flavint_groups) == 0: - a_fidg = FlavIntDataGroup(self) - else: - a_fidg = super().__add__(other) - metadata['flavints_joined'] = [str(f) for f in a_fidg.flavint_groups] - - if muons is not None: - a_dict = dict(a_fidg) - metadata['flavints_joined'] += ['muons'] - a_dict['muons'] = muons - a_fidg = a_dict - if noise is not None: - a_dict = dict(a_fidg) - metadata['flavints_joined'] += ['noise'] - a_dict['noise'] = noise - a_fidg = a_dict - return Data(a_fidg, metadata=metadata) - - def __str__(self): - meta = [(str(k) + ' : ' + str(v)) for k, v in self.metadata.items()] - return '\n'.join(meta) - - def __repr__(self): - return str(self) - - def __eq__(self, other): - return self.meta_eq(other) and self.data_eq(other) - - -# pylint: disable=line-too-long -def test_Events(): - """Unit tests for Events class""" - from pisa.utils.flavInt import NuFlavInt - # Instantiate empty object - events = Events() - - # Instantiate from PISA events HDF5 file - events = Events('events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5') - - # Apply a simple cut - events = events.applyCut('(true_coszen <= 0.5) & (true_energy <= 70)') - for fi in events.flavints: - assert np.max(events[fi]['true_coszen']) <= 0.5 - assert np.max(events[fi]['true_energy']) <= 70 - - # Apply an "inbounds" cut via a OneDimBinning - true_e_binning = OneDimBinning( - name='true_energy', num_bins=80, is_log=True, domain=[10, 60]*ureg.GeV - ) - events = events.keepInbounds(true_e_binning) - for fi in events.flavints: - assert np.min(events[fi]['true_energy']) >= 10 - assert np.max(events[fi]['true_energy']) <= 60 - - # Apply an "inbounds" cut via a MultiDimBinning - true_e_binning = OneDimBinning( - name='true_energy', num_bins=80, is_log=True, domain=[20, 50]*ureg.GeV - ) - true_cz_binning = OneDimBinning( - name='true_coszen', num_bins=40, is_lin=True, domain=[-0.8, 0] - ) - mdb = MultiDimBinning([true_e_binning, true_cz_binning]) - events = events.keepInbounds(mdb) - for fi in events.flavints: - assert np.min(events[fi]['true_energy']) >= 20 - assert np.max(events[fi]['true_energy']) <= 50 - assert np.min(events[fi]['true_coszen']) >= -0.8 - assert np.max(events[fi]['true_coszen']) <= 0 - - # Now try to apply a cut that fails on one flav/int (since the field will - # be missing) and make sure that the cut did not get applied anywhere in - # the end (i.e., it is rolled back) - sub_evts = events['nutaunc'] - sub_evts.pop('true_energy') - events['nutaunc'] = sub_evts - try: - events = events.applyCut('(true_energy >= 30) & (true_energy <= 40)') - except Exception: - pass - else: - raise Exception('Should not have been able to apply the cut!') - for fi in events.flavints: - if fi == NuFlavInt('nutaunc'): - continue - assert np.min(events[fi]['true_energy']) < 30 - - logging.info('<< PASS : test_Events >>') - - -# TODO: requires proprietary data; remove dependence on this -def todo_test_Data(): - """Unit tests for Data class""" - # Instantiate from LEESARD file - located in $PISA_RESOURCES - file_loc = 'LEESARD/PRD_extend_finalLevel/12550.pckl' - file_loc2 = 'LEESARD/PRD_extend_finalLevel/14550.pckl' - f = from_file(file_loc) - f2 = from_file(file_loc2) - d = {'nue+nuebar': f} - d2 = {'numu+numubar': f2} - data = Data(d) - data2 = Data(d2) - logging.debug(str((data.keys()))) - - muon_file = 'GRECO/new_style_files/Level7_muongun.12370_15.pckl' - m = {'muons': from_file(muon_file)} - m = Data(val=m) - assert m.contains_muons - assert not m.contains_neutrinos - logging.debug(str((m))) - data = data + m - assert data.contains_neutrinos - logging.debug(str((data))) - if not data.contains_muons: - raise Exception("data doesn't contain muons.") - logging.debug(str((data.neutrinos.keys()))) - - noise_file = 'GRECO/new_style_files/Level7_VuvuzelaPureNoise_V2.990015.pckl' - n = {'noise': from_file(noise_file)} - n = Data(val=n) - assert n.contains_noise - assert not n.contains_neutrinos - logging.debug(str((n))) - data = data + n - assert data.contains_neutrinos - logging.debug(str((data))) - if not data.contains_noise: - raise Exception("data doesn't contain noise.") - logging.debug(str((data.neutrinos.keys()))) - - # Apply a simple cut - # data.applyCut('(zenith <= 1.1) & (energy <= 200)') - # for fi in data.flavint_groups: - # assert np.max(data[fi]['zenith']) <= 1.1 - # assert np.max(data[fi]['energy']) <= 200 - - # Apply an "inbounds" cut via a OneDimBinning - # e_binning = OneDimBinning( - # name='energy', num_bins=80, is_log=True, domain=[10, 200]*ureg.GeV - # ) - # data.keepInbounds(e_binning) - # for fi in data.flavint_groups: - # assert np.min(data[fi]['energy']) >= 10 - # assert np.max(data[fi]['energy']) <= 200 - - # Apply an "inbounds" cut via a MultiDimBinning - # e_binning = OneDimBinning( - # name='energy', num_bins=80, is_log=True, domain=[20, 210]*ureg.GeV - # ) - # cz_binning = OneDimBinning( - # name='zenith', num_bins=40, is_lin=True, domain=[0.1, 1.8*np.pi] - # ) - # mdb = MultiDimBinning([e_binning, cz_binning]) - # data.keepInbounds(mdb) - # for fi in data.flavint_groups: - # assert np.min(data[fi]['energy']) >= 20 - # assert np.max(data[fi]['energy']) <= 210 - # assert np.min(data[fi]['zenith']) >= 0.1 - # assert np.max(data[fi]['zenith']) <= 1.8*np.pi - - # # Now try to apply a cut that fails on one flav/int (since the field will - # # be missing) and make sure that the cut did not get applied anywhere in - # # the end (i.e., it is rolled back) - # sub_evts = data['nue+nuebar'] - # sub_evts.pop('energy') - # data['nue+nuebar'] = sub_evts - # try: - # data.applyCut('(energy >= 30) & (energy <= 40)') - # except Exception: - # pass - # else: - # raise Exception('Should not have been able to apply the cut!') - # for fi in data.flavint_groups: - # if fi == NuFlavIntGroup('nue+nuebar'): - # continue - # assert np.min(data[fi]['energy']) < 30 - - data.save('/tmp/test_FlavIntDataGroup.json') - data.save('/tmp/test_FlavIntDataGroup.hdf5') - data = Data('/tmp/test_FlavIntDataGroup.json') - data = Data(val='/tmp/test_FlavIntDataGroup.hdf5') - - d3 = data + data2 + m - logging.debug(str((d3))) - d3_com = d3.transform_groups(['nue+nuebar+numu+numubar']) - logging.debug(str((d3_com))) - - logging.info('<< PASS : test_Data >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_Events() - # TODO: following is removed until a test dataset can be introduced - #test_Data() diff --git a/pisa/core/events_pi.py b/pisa/core/events_pi.py deleted file mode 100644 index a14b0da40..000000000 --- a/pisa/core/events_pi.py +++ /dev/null @@ -1,757 +0,0 @@ -"""PISA data container""" - -from __future__ import absolute_import, division, print_function - -import argparse -from collections.abc import Mapping, Iterable, Sequence -from collections import OrderedDict -import copy - -import numpy as np - -from pisa import FTYPE -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.utils.fileio import from_file -from pisa.utils.log import logging - - -__all__ = [ - "NU_FLAVORS", - "NU_INTERACTIONS", - "OUTPUT_NUFLAVINT_KEYS", - "LEGACY_FLAVKEY_XLATION", - "EventsPi", - "split_nu_events_by_flavor_and_interaction", - "fix_oppo_flux", - "main", -] - -__author__ = "T. Stuttard" - -__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -# Define the flavors and interactions for neutrino events -NU_FLAVORS = OrderedDict( - nue=12, nuebar=-12, numu=14, numubar=-14, nutau=16, nutaubar=-16 -) -NU_INTERACTIONS = OrderedDict(cc=1, nc=2) -OUTPUT_NUFLAVINT_KEYS = tuple( - "%s_%s" % (fk, ik) - for fk, fc in NU_FLAVORS.items() - for ik, ic in NU_INTERACTIONS.items() -) -LEGACY_FLAVKEY_XLATION = dict( - nue="nue", - nuebar="nuebar", - nue_bar="nuebar", - numu="numu", - numubar="numubar", - numu_bar="numubar", - nutau="nutau", - nutaubar="nutaubar", - nutau_bar="nutaubar", -) - - -# Backwards cmpatiblity fixes -OPPO_FLUX_LEGACY_FIX_MAPPING_NU = { - "nominal_nue_flux" : "neutrino_nue_flux", - "nominal_numu_flux" : "neutrino_numu_flux", - "nominal_nuebar_flux" : "neutrino_oppo_nue_flux", - "nominal_numubar_flux" : "neutrino_oppo_numu_flux", -} - -OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR = { - "nominal_nue_flux" : "neutrino_oppo_nue_flux", - "nominal_numu_flux" : "neutrino_oppo_numu_flux", - "nominal_nuebar_flux" : "neutrino_nue_flux", - "nominal_numubar_flux" : "neutrino_numu_flux", -} - -def append_arrays_dict(key, val, sdict): - ''' - Helper function for appending multiple dicts of arrays (e.g. from - multiple input files) into a single dict of arrays - ''' - if isinstance(val, Mapping): - # Handle sub-dict - for key2, val2 in val.items() : - if key not in sdict : - sdict[key] = OrderedDict() - append_arrays_dict(key2, val2, sdict[key]) - else : - # Have now reached a variable - assert isinstance(val, np.ndarray), "'%s' is not an array, is a %s" % (key, type(val)) - if key in sdict : - sdict[key] = np.append(sdict[key], val) - else : - sdict[key] = val - - -class EventsPi(OrderedDict): - """ - Container for events for use with PISA pi - - Parameters - ---------- - name : string, optional - Name to identify events - - neutrinos : bool, optional - Flag indicating if events represent neutrinos; toggles special - behavior such as splitting into nu/nubar and CC/NC. Default is True. - - fraction_events_to_keep : float - Fraction of loaded events to use (use to downsample). - Must be in range [0.,1.], or disable by setting to `None`. - Default in None. - - *args, **kwargs - Passed on to `__init__` method of OrderedDict - - """ - - def __init__( - self, - *args, - name=None, - neutrinos=True, - fraction_events_to_keep=None, - events_subsample_index=0, - **kwargs - ): - super().__init__(*args, **kwargs) - - self.name = name - self.neutrinos = neutrinos - self.fraction_events_to_keep = fraction_events_to_keep - self.events_subsample_index = events_subsample_index - - # Checks for down-sampling inputs - if self.fraction_events_to_keep is not None: - - # Check `fraction_events_to_keep` value is required range - self.fraction_events_to_keep = float(self.fraction_events_to_keep) - assert (self.fraction_events_to_keep >= 0.) and (self.fraction_events_to_keep <= 1.), "`fraction_events_to_keep` must be in range [0.,1.], or None to disable" - - # Check `fraction_events_to_keep` and `events_subsample_index` values are compatible - assert isinstance(self.events_subsample_index, int), f"`events_subsample_index` must be an integer" - assert self.events_subsample_index >= 0, f"`events_subsample_index` = {self.events_subsample_index}, but must be >= 0" - max_index = int(np.floor( 1. / self.fraction_events_to_keep )) - 1 - assert self.events_subsample_index <= max_index, f"`events_subsample_index` = {self.events_subsample_index} is too large given `fraction_events_to_keep` = {self.fraction_events_to_keep} (max is {max_index})" - - # Define some metadata - #TODO Is this out of date? - self.metadata = OrderedDict( - [ - ("detector", ""), - ("geom", ""), - ("runs", []), - ("proc_ver", ""), - ("cuts", []), - ] - ) - - - def load_events_file(self, events_file, variable_mapping=None, required_metadata=None, seed=123456): - """Fill this events container from an input HDF5 file filled with event - data Optionally can provide a variable mapping so select a subset of - variables, rename them, etc. - - Parameters - ---------- - events_file : string or mapping - If string, interpret as a path and load file at that path; the - loaded object should be a mapping. If already a mapping, take and - interpret events from that. - - variable_mapping : mapping, optional - If specified, should be a mapping where the keys are the - destination variable names and the items are either the source - variable names or an iterable of source variables names. In the - latter case, each of the specified source variables will become a - column vector in the destination array. - - required_metadata : None, or list of str - Can optionally specify metadata keys to parse from the input file metdata. - ONLY metadata specified here will be parsed. - Anything specified here MUST exist in the files. - """ - - # Validate `events_file` - if not isinstance(events_file, (str, Mapping, Sequence)): - raise TypeError( - "`events_file` must be either string or mapping; got (%s)" - % type(events_file) - ) - - # Validate `variable_mapping` - if variable_mapping is not None: - if not isinstance(variable_mapping, Mapping): - raise TypeError("'variable_mapping' must be a mapping (e.g., dict)") - for dst, src in variable_mapping.items(): - if not isinstance(dst, str): - raise TypeError("`variable_mapping` 'dst' (key) must be a string") - - if isinstance(src, str): - pass # Nothing to do - elif isinstance(src, Iterable): - for v in src: - if not isinstance(v, str): - raise TypeError( - "`variable_mapping` 'src' (value) has at least" - " one element that is not a string" - ) - else: - raise TypeError( - "`variable_mapping` 'src' (value) must be a string or" - " an iterable of strings" - ) - - - # Validate `required_metadata` - if required_metadata is not None : - assert isinstance(required_metadata, Sequence) - assert all([ isinstance(k, str) for k in required_metadata ]) - - # Reporting - if self.fraction_events_to_keep is not None : - logging.info("Down-sampling events (keeping %0.2g%% of the total). Will take sub-sample %i." % (100.*self.fraction_events_to_keep, self.events_subsample_index)) - - - # - # Loop over files - # - - input_data = OrderedDict() - metadata = OrderedDict() - - # Handle list of files vs single file - events_files_list = [] - if isinstance(events_file, str): - events_files_list = [events_file] - elif isinstance(events_file, Mapping): - events_files_list = [events_file] - elif isinstance(events_file, Sequence): - events_files_list = events_file - - # Loop over files - for i_file, infile in enumerate(events_files_list) : - - # - # Parse variables from file - # - - # Read the file - # If `variable_mapping` was specified, only load those variables (saves time/memory) - if isinstance(infile, str): - - # If user provided a variable mapping, only load the requested variables. - # Remember to andle cases where the variable is defined as a list of variables in - # the cfg file. - if variable_mapping is None : - choose = None - else : - choose = [] - for var_name in variable_mapping.values() : - if isinstance(var_name, str) : - choose.append(var_name) - elif isinstance(var_name, Sequence) : - for sub_var_name in var_name : - assert isinstance(sub_var_name, str), "Unknown variable format, must be `str`" - choose.append(sub_var_name) - else : - raise IOError("Unknown variable name format, must be `str` or list of `str`") - - # Handle "oppo" flux backwards compatibility - # This means adding the old variable names into the chosen variable list - # The actual renaming is done later by `fix_oppo_flux` - if variable_mapping is not None : - for var_name in choose : - if var_name in OPPO_FLUX_LEGACY_FIX_MAPPING_NU : - choose.append( OPPO_FLUX_LEGACY_FIX_MAPPING_NU[var_name] ) - if var_name in OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR : - choose.append( OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR[var_name] ) - - # Load the file - file_input_data = from_file(infile, choose=choose) - if not isinstance(file_input_data, Mapping): - raise TypeError( - 'Contents loaded from "%s" must be a mapping; got: %s' - % (infile, type(file_input_data)) - ) - assert len(file_input_data) > 0, "No input data found" - - - # File already loaded - elif isinstance(infile, Mapping) : - file_input_data = infile - - # Add to overall container - for k, v in file_input_data.items() : - append_arrays_dict(k, v, input_data) - - - # - # Parse metadata from file - # - - if required_metadata is not None : - - # Events and EventsPi objects have attr `metadata` - file_metadata = getattr(file_input_data, 'metadata', None) - - # HDF files have attr `attrs` attached, if present (see pisa.utils.hdf) - if not file_metadata: - file_metadata = getattr(file_input_data, 'attrs', None) - - if file_metadata: - - # Check format - if not isinstance(file_metadata, Mapping): - raise TypeError( - "metadata or attrs expected to be a Mapping, but got {}".format( - type(file_metadata) - ) - ) - - # Loop over expected metadata - for k in required_metadata : - - assert k in file_metadata, "Expected metadata '%s' not found" % k - - # For the special case of livetime, append livetiem from each file - # Otherwise, expect identical value in all cases - if k in self.metadata : - if k == "livetime" : - self.metadata[k] += file_metadata[k] - else : - assert self.metadata[k] == file_metadata[k] - else : - self.metadata[k] = file_metadata[k] - - - - # - # Re-format inputs - # - - # The following is intended to re-format input data into the desired - # format. This is required to handle various inout cases and to ensure - # backwards compatibility with older input file formats. - - # Convert to the required event keys, e.g. "numu_cc", "nutaubar_nc", etc. - if self.neutrinos: - input_data = split_nu_events_by_flavor_and_interaction(input_data) - - # The value for each category should itself be a dict of the event - # variables, where each entry is has a variable name as the key and an - # np.array filled once per event as the value. - # - # For backwards compatibility, convert to this format from known older - # formats first - if self.neutrinos: - for key, cat_dict in input_data.items(): - if not isinstance(cat_dict, Mapping): - raise Exception( - "'%s' input data is not a mapping, unknown format (%s)" - % (key, type(cat_dict)) - ) - for var_key, var_data in cat_dict.items(): - if not isinstance(var_data, np.ndarray): - raise Exception( - "'%s/%s' input data is not a numpy array, unknown" - " format (%s)" % (key, var_key, type(var_data)) - ) - - # Ensure backwards compatibility with the old style "oppo" flux - # variables - if self.neutrinos: - fix_oppo_flux(input_data) - - - # - # Load the event data - # - - # Should be organised under a single layer of keys, each representing - # some category of input data - - # Loop over the input types - for data_key in input_data.keys(): - if data_key in self: - raise ValueError( - "Key '%s' has already been added to this data structure" - ) - - self[data_key] = OrderedDict() - - # Loop through variable mapping - # If none provided, just use all variables and keep the input names - if variable_mapping is None: - variable_mapping_to_use = tuple( - zip(input_data[data_key].keys(), input_data[data_key].keys()) - ) - else: - variable_mapping_to_use = variable_mapping.items() - - # Init stuff for down-sampling later - chosen_event_indices = None - rand = np.random.RandomState(seed) # Enforce same sample each time - - # Get the array data (stacking if multiple input variables defined) - # and check the variable exists in the input data - for var_dst, var_src in variable_mapping_to_use: - # TODO What about non-float data? Use dtype... - - # Prepare for the stacking - array_data = None - if isinstance(var_src, str): - var_src = [var_src] - - # Perform the stacking - array_data_to_stack = [] - for var in var_src: - if var in input_data[data_key]: - array_data_to_stack.append( - input_data[data_key][var].astype(FTYPE) - ) - else: - raise KeyError( - "Variable '%s' cannot be found for '%s' events" - % (var, data_key) - ) - - # Note `squeeze` removes the extraneous 2nd dim in case of a - # single `src` - array_data = np.squeeze(np.stack(array_data_to_stack, axis=1)) - - # Check actually have some data - if array_data is None: - raise ValueError( - "Cannot find source variable(s) '%s' for '%s'" - % (var_src, data_key) - ) - - - # - # Event down sampling - # - - # Only if requested by user - if self.fraction_events_to_keep is not None: - - # Define events to keep only once for each species (e.g. same choice for all variables for a given species) - if chosen_event_indices is None : - - # Get intitial conditions - initial_num_events = array_data.size - desired_num_events = int( self.fraction_events_to_keep * float(initial_num_events) ) - - # Start with all events as input - current_event_indices = np.array( range(initial_num_events) ) - - # Loop over subsamples (will break out once reach desired subsample) - i = 0 - while True : - - # Get indices for the events to keep for this current sub-sample - assert current_event_indices.size >= desired_num_events, "Not enough events available" # Earlier checks on `fraction_events_to_keep` and `events_subsample_index` should prevent this error ever happening - chosen_event_indices = np.sort( rand.choice(current_event_indices, replace=False, size=desired_num_events) ) - - # If this is the requested sub-sample, done here - if i == self.events_subsample_index : - break - - # Otherwise have not yet reached our subsample. - # Choose the remaining events as the new input events in the algorithm, - # and on the next iteration of this loop these remaining events will be - # used for extracting the new sub-sample. - # This will result in statistically independent sub-samples - remaining_event_indices = np.sort( np.setxor1d(current_event_indices, chosen_event_indices) ) - current_event_indices = remaining_event_indices - - i += 1 - - # Report - logging.info("Down-sampled %s events : %i -> %i (%0.2g%%)" % ( data_key, array_data.size, chosen_event_indices.size, 100.*(chosen_event_indices.size/array_data.size) )) - - # Extract just the requested events - array_data = array_data[chosen_event_indices] - - # Add to array - self[data_key][var_dst] = array_data - - - def apply_cut(self, keep_criteria): - """Apply a cut by specifying criteria for keeping events. The cut must - be successfully applied to all flav/ints in the events object before - the changes are kept, otherwise the cuts are reverted. - - Parameters - ---------- - keep_criteria : string - Any string interpretable as numpy boolean expression. - - Examples - -------- - Keep events with true energies in [1, 80] GeV (note that units are not - recognized, so have to be handled outside this method) - - >>> events = events.apply_cut("(true_energy >= 1) & (true_energy <= 80)") - - Do the opposite with "~" inverting the criteria - - >>> events = events.apply_cut("~((true_energy >= 1) & (true_energy <= 80))") - - Numpy namespace is available for use via `np` prefix - - >>> events = events.apply_cut("np.log10(true_energy) >= 0") - - """ - assert isinstance(keep_criteria, str) - - # Check if have already applied these cuts - if keep_criteria in self.metadata["cuts"]: - logging.debug( - "Criteria '%s' have already been applied. Returning" - " events unmodified.", - keep_criteria, - ) - return self - - # TODO Get everything from the GPU first ? - - # Prepare the post-cut data container - cut_data = EventsPi(name=self.name) - cut_data.metadata = copy.deepcopy(self.metadata) - - # Loop over the data containers - for key in self.keys(): - cut_data[key] = {} - - # TODO Need to think about how to handle array, scalar and binned data - # TODO Check for `events` data mode, or should this kind of logic - # already be in the Container class? - variables = self[key].keys() - - # Create the cut expression, and get the resulting mask - crit_str = keep_criteria - for variable_name in variables: - crit_str = crit_str.replace( - variable_name, 'self["%s"]["%s"]' % (key, variable_name) - ) - mask = eval(crit_str) # pylint: disable=eval-used - - # Fill a new container with the post-cut data - for variable_name in variables: - cut_data[key][variable_name] = copy.deepcopy( - self[key][variable_name][mask] - ) - - # TODO update to GPUs? - - # Record the cuts - cut_data.metadata["cuts"].append(keep_criteria) - - return cut_data - - def keep_inbounds(self, binning): - """Cut out any events that fall outside `binning`. Note that events - that fall exactly on an outer edge are kept. - - Parameters - ---------- - binning : OneDimBinning or MultiDimBinning - - Returns - ------- - cut_data : EventsPi - - """ - # Get the binning instance - try: - binning = OneDimBinning(binning) - except: # pylint: disable=bare-except - pass - if isinstance(binning, OneDimBinning): - binning = [binning] - binning = MultiDimBinning(binning) - - # Define a cut to remove events outside of the binned region - bin_edge_cuts = [dim.inbounds_criteria for dim in binning] - bin_edge_cuts = " & ".join([str(x) for x in bin_edge_cuts]) - - # Apply the cut - return self.apply_cut(bin_edge_cuts) - - def __str__(self): # TODO Handle non-array data cases - string = "-----------------------------\n" - string += "EventsPi container %s :" % self.name - for key, container in self.items(): - string += " %s :\n" % key - for var, array in container.items(): - array_data = array - if len(array_data) <= 4: - array_data_string = str(array_data) - else: - array_data_string = "[%s, %s, ..., %s, %s]" % ( - array_data[0], - array_data[1], - array_data[-2], - array_data[-1], - ) - string += " %s : %i elements : %s\n" % ( - var, - len(array_data), - array_data_string, - ) - string += "-----------------------------" - return string - - -def split_nu_events_by_flavor_and_interaction(input_data): - """Split neutrino events by nu vs nubar, and CC vs NC. - - Should be compatible with DRAGON and GRECO samples, but this depends on the - contents of the original I3 files and whatever conversion script was used - to produce the HDF5 files from these. - - Parameters - ---------- - input_data : mapping - - Returns - ------- - output_data : OrderedDict - - """ - # TODO Split into one function for nu/nubar and one for CC/NC? - assert isinstance(input_data, Mapping) - assert input_data, "`input_data` has no members" - - output_data = OrderedDict() - - # Loop through subcategories in the input data - for key, data in input_data.items(): - # If key already is one of the desired keys, nothing new to do - # Just move the data to the output container - if key in OUTPUT_NUFLAVINT_KEYS: - if key in output_data: - output_data[key] = np.concatenate(output_data[key], data) - else: - output_data[key] = data - continue - - # Legacy PISA HDF5 files are structured as - # {"": {"": data}}; - # and `flavor` can have "_" separating "bar". Remove such underscores - # and flatten the nested dicts into - # {"_": data} - # format - - if key in LEGACY_FLAVKEY_XLATION: - new_flav_key = LEGACY_FLAVKEY_XLATION[key] - for sub_key, sub_data in data.items(): - assert sub_key in ("cc", "nc"), str(sub_key) - output_key = new_flav_key + "_" + sub_key - if output_key in output_data: - output_data[output_key] = np.concatenate( - output_data[output_key], sub_data - ) - else: - output_data[output_key] = sub_data - continue - - assert "pdg_code" in data, "No 'pdg_code' variable found for %s data" % key - # Check these are neutrino events - assert np.all(np.isin(data["pdg_code"], NU_FLAVORS.values())), ( - "%s data does not appear to be a neutrino data" % key - ) - assert "interaction" in data, ( - "No 'interaction' variable found for %s data" % key - ) - - # Define a mask to select the events for each desired output key - key_mask_pairs = [ - ("%s_%s" % (fk, ik), (data["pdg_code"] == fc) & (data["interaction"] == ic)) - for fk, fc in NU_FLAVORS.items() - for ik, ic in NU_INTERACTIONS.items() - ] - - # Loop over the keys/masks and write the data for each class to the - # output container - for mkey, mask in key_mask_pairs: - if np.any(mask): # Only if mask has some data - if mkey in output_data: - output_data[mkey] = np.concatenate(output_data[mkey], data) - else: - output_data[mkey] = data - - if len(output_data) == 0: - raise ValueError("Failed splitting neutrino events by flavor/interaction") - - return output_data - - - -def fix_oppo_flux(input_data): - """Fix this `oppo` flux insanity - someone added this in the nominal flux calculation that - oppo flux is nue flux if flavour is nuebar, and vice versa - here we revert that, incase these oppo keys are there - """ - for key, val in input_data.items(): - if "neutrino_oppo_nue_flux" not in val: - continue - logging.warning( - 'renaming the outdated "oppo" flux keys in "%s", in the future do' - " not use those anymore", - key, - ) - if "bar" in key: - for new, old in OPPO_FLUX_LEGACY_FIX_MAPPING_NUBAR.items() : - val[new] = val.pop(old) - else: - for new, old in OPPO_FLUX_LEGACY_FIX_MAPPING_NU.items() : - val[new] = val.pop(old) - - -def main(): - """Load an events file and print the contents""" - parser = argparse.ArgumentParser(description="Events parsing") - parser.add_argument( - "--neutrinos", - action="store_true", - help="Treat input file as if it contains neutrino MC", - ) - parser.add_argument( - "-i", "--input-file", type=str, required=True, help="Input HDF5 events file" - ) - args = parser.parse_args() - - events = EventsPi(neutrinos=args.neutrinos) - events.load_events_file(args.input_file) - - logging.info("Loaded events from : %s", args.input_file) - - print("Metadata:") - print(events.metadata) - print(events) - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/pisa/core/images/stage_architecture.png b/pisa/core/images/stage_architecture.png deleted file mode 100644 index 0c7aadaa2..000000000 Binary files a/pisa/core/images/stage_architecture.png and /dev/null differ diff --git a/pisa/core/images/stage_architecture.svgz b/pisa/core/images/stage_architecture.svgz deleted file mode 100644 index c9a9f552d..000000000 Binary files a/pisa/core/images/stage_architecture.svgz and /dev/null differ diff --git a/pisa/core/map.py b/pisa/core/map.py deleted file mode 100755 index 9e5412882..000000000 --- a/pisa/core/map.py +++ /dev/null @@ -1,3524 +0,0 @@ -""" -Map class to contain 2D histogram, error, and metadata about the contents. -MapSet class to contain a set of maps. - -Also provide basic mathematical operations that user applies directly to the -containers but that get passed down to operate on the contained data. -""" - - -from __future__ import absolute_import, division - -from collections.abc import Iterable, Mapping, Sequence -from collections import OrderedDict -from copy import deepcopy, copy -from fnmatch import fnmatch -from functools import reduce -from itertools import permutations -from operator import add, getitem, setitem -import os -import re -import shutil -import tempfile - -from decorator import decorate -import numpy as np -from scipy.stats import poisson, norm -from six import string_types -import uncertainties -from uncertainties import ufloat -from uncertainties import unumpy as unp - -from pisa import ureg, HASH_SIGFIGS -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.utils.comparisons import normQuant, recursiveEquality, ALLCLOSE_KW -from pisa.utils.flavInt import NuFlavIntGroup -from pisa.utils.hash import hash_obj -from pisa.utils import jsons -from pisa.utils.fileio import get_valid_filename, mkdir -from pisa.utils.format import (make_valid_python_name, strip_outer_dollars, - text2tex) -from pisa.utils.log import logging, set_verbosity -from pisa.utils.random_numbers import get_random_state -from pisa.utils import stats - - -__all__ = ['FLUCTUATE_METHODS', 'type_error', 'reduceToHist', 'rebin', - 'valid_nominal_values', 'Map', 'MapSet', 'test_Map', 'test_MapSet'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: inconsistent treatment of metrics in *chi2*, *llh*, and metric* methods -# (Issue #264: https://github.com/jllanfranchi/pisa/issues/264) - -# TODO: make sure logic works for PID-separated-maps as well as -# PID-as-binning-dimension maps - -# TODO: CUDA and numba implementations of rebin if these libs are available - -# TODO: move these utilities functions to a generic utils module? - -FLUCTUATE_METHODS = ['poisson', 'scaled_poisson', 'gauss', 'gauss+poisson'] - -def type_error(value): - """Generic formulation of a TypeError that can be called throughout the - code""" - raise TypeError('Type of argument not supported: "%s"' - % value.__class__.__name__) - - -def reduceToHist(obj): - """Recursively sum to reduce an object to a single histogram. - - Parameters - ---------- - obj : numpy.ndarray, Map, MapSet, or iterable of MapSets - - Returns - ------- - hist : numpy.ndarray - Single histogram version of `obj` - - Raises - ------ - TypeError if `obj` is an unhandled type - - """ - if isinstance(obj, np.ndarray): - hist = obj - elif isinstance(obj, Map): - hist = obj.hist - elif isinstance(obj, MapSet): - hist = sum(obj).hist - elif isinstance(obj, Iterable): - hist = sum([reduceToHist(x) for x in obj]) - else: - raise TypeError('Unhandled type for `obj`: %s' % type(obj)) - return hist - - -def rebin(hist, orig_binning, new_binning, normalize_values=True): - """Rebin a histogram. - - Note that the new binning's edges must be a subset of the original - binning's edges (i.e. no sub-division or extrapolation of bins is - implemented). - - Parameters - ---------- - hist : numpy.ndarray - Array containing the (original) histogram's entries - - orig_binning : MultiDimBinning - Original binning - - new_binning : MultiDimBinning - Desired binning, where `new_binning.bin_edges` must be a subset of - `orig_binning.bin_edges`. - - normalize_values : bool - Whether to apply `pisa.utils.comparisons.normQuant` to the bin edges - prior to comparing `new_binning` to `orig_binning`. This is - computationally expensive but ensures similar binnings and eqivalent - units do not cause erroneous results. It is recommended to set - `normalize_values=True` unless you know the two binning specs are - consistently defined. - - Returns - ------- - new_hist : numpy.ndarray - New histogram rebinned from `hist` - - """ - if set(new_binning.basenames) != set(orig_binning.basenames): - raise ValueError( - "`new_binning` dimensions' basenames %s do not have 1:1" - " correspondence (modulo pre/suffixes) to original binning" - " dimensions' basenames %s" - % (new_binning.basenames, orig_binning.basenames) - ) - - if orig_binning.edges_hash == new_binning.edges_hash: - return hist - - orig_dim_indices = [] - new_dim_indices = [] - for new_dim_idx, new_dim in enumerate(new_binning): - orig_dim_idx = orig_binning.index(new_dim.name, use_basenames=False) - - new_dim_indices.append(new_dim_idx) - orig_dim_indices.append(orig_dim_idx) - - orig_dim = orig_binning.dimensions[orig_dim_idx] - - if normalize_values: - orig_edges = normQuant(orig_dim.bin_edges, sigfigs=HASH_SIGFIGS) - new_edges = normQuant(new_dim.bin_edges, sigfigs=HASH_SIGFIGS) - else: - orig_edges = orig_dim.bin_edges - new_edges = new_dim.bin_edges - if not np.all(new_edges == orig_edges): - orig_edge_idx = np.array([np.where(orig_edges == n) - for n in new_edges]).ravel() - hist = np.add.reduceat(hist, orig_edge_idx[:-1], - axis=orig_dim_idx) - - new_hist = np.moveaxis(hist, source=orig_dim_indices, - destination=new_dim_indices) - - return new_hist - - -def _new_obj(original_function): - """Decorator to deepcopy unaltered states into new Map object.""" - def new_function(*args, **kwargs): - """Augmented function to replace `original_function`. Note that this - docstring and the function signature will be overwritten by those from - `original_function` upon the call to `decorate` below.""" - # pylint: disable=protected-access - func = args[0] - self = args[1] - args = args[2:] - new_state = OrderedDict() - state_updates = func(self, *args, **kwargs) - for slot in self._state_attrs: - if state_updates is not None and slot in state_updates: - new_state[slot] = state_updates[slot] - else: - new_state[slot] = deepcopy(getattr(self, slot)) - if len(new_state['binning']) == 0: - return new_state['hist'] - return Map(**new_state) - return decorate(original_function, new_function) - - -def valid_nominal_values(data_array): - """Get the the nominal values that are valid for an array""" - return np.ma.masked_invalid(unp.nominal_values(data_array)) - - -# TODO: implement strategies for decreasing dimensionality (i.e. -# projecting map onto subset of dimensions in the original map) - -# TODO: Should all calls to np.<...> be replaced with unp.<...> as is done for -# unp.sqrt below? - -class Map(object): - """Class to contain a multi-dimensional histogram, error, and metadata - about the histogram. Also provides basic mathematical operations for the - contained data. See Examples below for how to use a Map object. - - - Parameters - ---------- - name : string - Name for the map. Used to identify the map. - - hist : numpy.ndarray (incl. obj array from uncertainties.unumpy.uarray) - The "data" (counts, etc.) in the map. The shape of `hist` must be - compatible with the `binning` specified. - - binning : MultiDimBinning - Describes the binning of the Map. - - error_hist : numpy ndarray - Must be same shape as `hist`. If specified, sets the error standard - deviations for the contained `hist`, replacing any stddev information - that might be contained in the passed `hist` arg. - - hash : None, or immutable object (typically an integer) - Hash value to attach to the map. - - tex : None or string - TeX string that can be used for e.g. plotting. - - full_comparison : bool - Whether to perform full (recursive) comparisons when testing the - equality of this map with another. See `__eq__` method. - - - Examples - -------- - >>> from pisa.core.binning import MultiDimBinning - >>> binning = MultiDimBinning([dict(name='energy', is_log=True, num_bins=4, - ... domain=[1, 80], units='GeV'), - ... dict(name='coszen', is_lin=True, num_bins=5, - ... domain=[-1, 0])]) - >>> m0 = Map(name='x', binning=binning, hist=np.zeros(binning.shape)) - >>> m0 - array([[ 0., 0., 0., 0., 0.], - [ 0., 0., 0., 0., 0.], - [ 0., 0., 0., 0., 0.], - [ 0., 0., 0., 0., 0.]]) - >>> m0.binning - energy: 4 logarithmically-uniform bins spanning [1.0, 80.0] GeV - coszen: 5 equally-sized bins spanning [-1.0, 0.0] - >>> m0.hist[0:4, 0] = 1 - >>> m0 - array([[ 1., 0., 0., 0., 0.], - [ 1., 0., 0., 0., 0.], - [ 1., 0., 0., 0., 0.], - [ 1., 0., 0., 0., 0.]]) - >>> m1 = m0[0:3, 0:2] - >>> m1.binning - energy: 3 logarithmically-uniform bins spanning [1.0, 26.7496121991] - coszen: 2 equally-sized bins spanning [-1.0, -0.6] - >>> m1 - array([[ 1., 0.], - [ 1., 0.], - [ 1., 0.]]) - >>> for bin in m1.iterbins(): - ... print('({0:~.2f}, {1:~.2f}): {2:0.1f}'.format( - ... bin.binning.energy.midpoints[0], - ... bin.binning.coszen.midpoints[0], - ... bin.hist[0, 0])) - (2.00 GeV, -0.90 ): 1.0 - (2.00 GeV, -0.70 ): 0.0 - (5.97 GeV, -0.90 ): 1.0 - (5.97 GeV, -0.70 ): 0.0 - (17.85 GeV, -0.90 ): 1.0 - (17.85 GeV, -0.70 ): 0.0 - - """ - _slots = ('name', 'hist', 'binning', 'hash', '_hash', 'tex', - 'full_comparison', 'parent_indexer', '_normalize_values') - _state_attrs = ('name', 'hist', 'binning', 'hash', 'tex', - 'full_comparison') - - def __init__(self, name, hist, binning, error_hist=None, hash=None, - tex=None, full_comparison=False): - # Set Read/write attributes via their defined setters - super().__setattr__('_name', name) - super().__setattr__('_tex', tex) - super().__setattr__('_hash', hash) - super().__setattr__('_full_comparison', full_comparison) - - if not isinstance(binning, MultiDimBinning): - if isinstance(binning, Sequence): - binning = MultiDimBinning(dimensions=binning) - elif isinstance(binning, Mapping): - binning = MultiDimBinning(**binning) - else: - raise ValueError('Do not know what to do with `binning`=%s of' - ' type %s' %(binning, type(binning))) - self.parent_indexer = None - - # Do the work here to set read-only attributes - super().__setattr__('_binning', binning) - binning.assert_array_fits(hist) - super().__setattr__( - '_hist', np.ascontiguousarray(hist) - ) - if error_hist is not None: - self.set_errors(error_hist) - self._normalize_values = True - - def __repr__(self): - previous_precision = np.get_printoptions()['precision'] - np.set_printoptions(precision=18) - try: - state = self.serializable_state - state['hist'] = np.array_repr(state['hist']) - if state['error_hist'] is not None: - state['error_hist'] = np.array_repr(state['error_hist']) - argstrs = [('%s=%r' % item) for item in - self.serializable_state.items()] - r = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) - finally: - np.set_printoptions(precision=previous_precision) - return r - - def __str__(self): - attrs = ['name', 'tex', 'full_comparison', 'hash', 'parent_indexer', - 'binning', 'hist'] - state = {a: getattr(self, a) for a in attrs} - state['name'] = repr(state['name']) - state['tex'] = repr(state['tex']) - state['hist'] = np.array_repr(state['hist']) - argstrs = [('%s=%s' % (a, state[a])) for a in attrs] - s = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) - return s - - def __pretty__(self, p, cycle): - """Method used by the `pretty` library for formatting""" - myname = self.__class__.__name__ - if cycle: - p.text('%s(...)' % myname) - else: - p.begin_group(4, '%s(' % myname) - attrs = ['name', 'tex', 'full_comparison', 'hash', - 'parent_indexer', 'binning', 'hist'] - for n, attr in enumerate(attrs): - p.breakable() - p.text(attr + '=') - p.pretty(getattr(self, attr)) - if n < len(attrs)-1: - p.text(',') - p.end_group(4, ')') - - def _repr_pretty_(self, p, cycle): - """Method used by e.g. ipython/Jupyter for formatting""" - return self.__pretty__(p, cycle) - - def item(self, *args): - """Call ``item(*args)`` method on the contained `hist`, returning a - single Python scalar corresponding to `*args`. See help for - :method:`numpy.ndarray.item` for more info. - - Note that this method is called by :method:`numpy.asscalar`. - - Parameters - ---------- - *args - Passed to :method:`numpy.ndarray.item` - - Returns - ------- - z : Standard Python scalar object - - """ - return self.hist.item(*args) - - def slice(self, **kwargs): - """Slice the map, where each argument is the name of a dimension. - Dimensions not named are included in full (i.e., via `np.slice(None)`). - - Note that the resulting map maintains the same number of dimensions as - its parent, including the ordering of the dimensions. The size of each - dimension, however, is reduced by slicing. - - Note also that modifications to the returned object's `hist` will - modify the parent's `hist`. - - - Examples - -------- - Indexing can be done as in the following examples: - - >>> mdb = MultiDimBinning([ - ... dict(name='x', domain=[0,1], is_lin=True, num_bins=5), - ... dict(name='y', domain=[1,2], is_lin=True, num_bins=10) - ... ]) - >>> ones = mdb.ones(name='ones') - >>> print(ones.slice(x=0,)) - Map(name='ones', - tex='{\\rm ones}', - full_comparison=False, - hash=None, - parent_indexer=(0, slice(None, None, None)), - binning=MultiDimBinning([ - OneDimBinning(name=OneDimBinning('x', 1 bin with edges at [0.0, 0.2] (behavior is linear))), - OneDimBinning(name=OneDimBinning('y', 10 equally-sized bins spanning [1.0, 2.0]))]), - hist=array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])) - >>> print(ones.slice(x=0, y=slice(None)).hist) - [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] - >>> print(ones.slice(x=0, y=0).hist) - [[ 1.]] - - Modifications to the slice modifies the original: - - >>> mdb = MultiDimBinning([ - ... dict(name='x', domain=[0,1], is_lin=True, num_bins=5), - ... dict(name='y', domain=[1,2], is_lin=True, num_bins=10) - ... ]) - >>> ones = mdb.ones(name='ones') - >>> sl = ones.slice(x=2) - >>> sl.hist[...] = 0 - >>> print(sl.hist) - >>> print(ones.hist) - [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] - [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] - [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] - [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] - [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] - - - See Also - -------- - pisa.core.binning.MultiDimBinning.indexer - Method used to generate a raw indexer (that can be used to - index into a map or a Numpy array of same dimensionality). - This method is accessible from a Map `map_x` object via its - `binning` attribute: `map_x.binning.indexer(...)` - - pisa.core.binning.MultiDimBinning.broadcast - Broadcast a 1D Numpy array to dimensionality with reference to this - object's dimensionality. - - """ - return self[self.binning.indexer(**kwargs)] - - def set_poisson_errors(self): - """Approximate poisson errors using sqrt(n).""" - nom_values = self.nominal_values - super().__setattr__( - '_hist', - unp.uarray(nom_values, np.sqrt(nom_values)) - ) - - def set_errors(self, error_hist): - """Manually define the error with an array the same shape as the - contained histogram. Can also remove errors by passing None. - - Parameters - ---------- - error_hist : None or ndarray (same shape as hist) - Standard deviations to apply to `self.hist`. - If None is passed, any errors present are removed, making - `self.hist` a bare numpy array. - - """ - if error_hist is None: - super().__setattr__( - '_hist', self.nominal_values - ) - return - self.assert_compat(error_hist) - super().__setattr__( - '_hist', - unp.uarray(self.nominal_values, np.ascontiguousarray(error_hist)) - ) - - # TODO: make this return an OrderedDict to organize all of the returned - # objects - def compare(self, ref): - """Compare this map with another, where the other map is taken to be - the "reference" against which this is compared. - - Parameters - ---------- - ref : Map - Map against with to compare this one. `ref is taken as reference. - Each dimension in `ref.binning` must have the same name and - bin edges as this map, but the order of the dimensions does not - matter. - - Returns - ------- - comparisons : OrderedDict containing the following key/value pairs: - * 'diff' : Map, `self - ref` - * 'fract' : Map, `self / ref` - * 'fractdiff' : Map, `(self - ref) / ref` - * 'max_abs_diff' : float, `max(abs(diff))` - * 'max_abs_fractdiff' : float, `max(abs(fractdiff))` - * 'nanmatch' : bool, whether nan elements match - * 'infmatch' : bool, whether +inf (and separately -inf) entries match - - """ - assert isinstance(ref, Map) - assert ref.binning == self.binning - diff = self - ref - with np.errstate(divide='ignore', invalid='ignore'): - fract = self / ref - fractdiff = diff / ref - - max_abs_fractdiff = np.nanmax(np.abs(fractdiff.nominal_values)) - - # Handle cases where ratio returns infinite - # This isn't necessarily a fail, since all it means is the referene was - # zero; if the new value is sufficiently close to zero then it's still - # fine. - if np.isinf(max_abs_fractdiff): - # First find all the finite elements - finite_mask = np.isfinite(fractdiff.nominal_values) - # Then find the nanmax of this, will be our new test value - max_abs_fractdiff = np.nanmax(np.abs( - fractdiff.nominal_values[finite_mask] - )) - - # TODO(bug): Why is ~finite_mask used to select elements here? - # Shouldn't all elements be considered, regardless if fractdiff is - # inf somewhere? - - # Also find all the infinite elements; compute a second test value - max_abs_diff = np.nanmax(np.abs(diff.nominal_values[~finite_mask])) - else: - # Without any infinite elements we can ignore this second test - max_abs_diff = np.nanmax(np.abs(diff.nominal_values)) - - nanmatch = bool(np.all(np.isnan(self.nominal_values) - == np.isnan(ref.nominal_values))) - infmatch = bool(np.all( - self.nominal_values[np.isinf(self.nominal_values)] - == ref.nominal_values[np.isinf(ref.nominal_values)] - )) - - comparisons = OrderedDict([ - ('diff', diff), - ('fract', fract), - ('fractdiff', fractdiff), - ('max_abs_fractdiff', max_abs_fractdiff), - ('max_abs_diff', max_abs_diff), - ('nanmatch', nanmatch), - ('infmatch', infmatch) - ]) - - return comparisons - - def plot(self, symm=False, logz=False, vmin=None, vmax=None, backend=None, - ax=None, title=None, cmap=None, clabel=None, clabelsize=None, - xlabelsize=None, ylabelsize=None, titlesize=None, fig_kw=None, - pcolormesh_kw=None, colorbar_kw=None, outdir=None, fname=None, - fmt=None, binlabel_format=None, binlabel_colors=["white", "black"], - binlabel_color_thresh=None, binlabel_stripzeros=True, dpi=300, - bad_color=None): - """Plot a 2D map. - - Parameters - ---------- - symm : bool, optional - Plot with symmetric (about 0) value-range limits. - - logz : bool, optional - Plot logarithmic value-range - - vmin, vmax : float, optional - Minimum and maximum values for the value-range of the plot. If None - specified, these are set according to `symm` and/or the values of - the `hist` in this Map. - - backend : string, optional - Matplotlib backend to use (only takes effect if matplotlib is first - imported by this function). - - ax : matplotlib.axis.Axis, optional - Provide an axis onto which the plot is drawn; if None is specified, - a new figure and axis are created. - - title : string, optional - Set the title to this value; if None is specified, the title is - taken from the name of this Map. - - cmap : string or matplotlib.colors.Colormap, optional - - clabel : string, optional - Label to place on the colorbar - - clabelsize, xlabelsize, ylabelsize, titlesize : float, optional - Size of the colorbar, x-axis label, y-axis label, and title text - - fig_kw : mapping, optional - Keyword arguments passed to call to `matplotlib.pyplot.figure`; - this is only done, however, if `ax` is None and so a new figure - needs to be created. - - pcolormesh_kw : mapping, optional - Keyword arguments to pass to call to `matplotlib.pyplot.pcolormesh` - (if Map is two or more dimensions). - - colorbar_kw : mapping, optional - Keyword arguments to pass to call to `matplotlib.colorbar`. - - fmt : string in ('pdf', 'png') or iterable thereof, optional - File format(s) in which to save the file. If None, then the plot - will not be saved. - - outdir : string, optional - Directory into which to save the plot. If None is provided, the the - default is the current directory. Note that if `fmt` is None, then - this argument is irrelevant. - - fname : string, optional - Custom filename to set for saved figure. If not provided, a name - is derived from the `name` attribute of the Map. Note that if - `fmt` is None, then this argument is irrelevant. - - binlabel_format : :obj:`str`, optional - Format string to label the content in each bin. If None (default), the bins - will not be labeled. Bin labels are generated by calling `.format(zi)` on - the given string, where `zi` is the z-value of bin i. - - binlabel_stripzeros : bool, optional - Strip zeros from bin labels. Default: `True` - - binlabel_colors : :obj:`str` or list of :obj:`str`, optional - Colors to be used below (index 0) and above (index 1) the - `binlabel_color_thresh` value. Default: "white" below and "black" above - threshold. If only one :obj:`str` is given, all labels will have that color. - - binlabel_color_thresh : float or :obj:`str`, optional - Threshold at which to switch color of the bin labels for better contrast. If - `None` (default), all labels will use the last color given in - `binlabel_colors`. If a `float` is given, bins with a value below the given - number use the first color in `binlabel_colors` and bins with a value above - the given number use the second color in `binlabel_colors`. If "auto", set - threshold automatically (basically half way). - dpi : int, optional - Dots per inch for saved figure. Default: 300 - bad_color : string, optional - Can choose the color used for "bad" bins (e.g. NaN) - - Returns - ------- - fig : :class:`matplotlib.figure.Figure` object - ax : :class:`matplotlib.axes.Axes` object - pcmesh : :class:`matplotlib.collections.QuadMesh` - colorbar : :class:`matplotlib.colorbar.Colorbar` - - """ - import matplotlib as mpl - import matplotlib.pyplot as plt - from mpl_toolkits.axes_grid1 import make_axes_locatable - - cmap_seq = mpl.cm.get_cmap("Spectral_r").copy() - cmap_seq.set_bad(color=(0.0, 0.2, 0.0), alpha=1) - - cmap_div = mpl.cm.get_cmap("RdBu_r").copy() - cmap_div.set_bad(color=(0.5, 0.9, 0.5), alpha=1) - - # TODO: use https://matplotlib.org/users/colormapnorms.html - # to allow for both symm and logz (and to implement logz in the first - # place!) - assert not(symm and logz) - - if title is None: - title = '$%s$' % (self.name if self.tex is None else self.tex) - - if fname is None: - fname = get_valid_filename(self.name) - - fig_kw = {} if fig_kw is None else fig_kw - pcolormesh_kw = {} if pcolormesh_kw is None else pcolormesh_kw - colorbar_kw = {} if colorbar_kw is None else colorbar_kw - if fmt is not None: - if isinstance(fmt, string_types): - fmt = [fmt] - fmt = set(f.strip().lower().lstrip('.') for f in fmt) - if outdir is None: - outdir = './' - else: - mkdir(outdir, warn=False) - - if ax is None: - fig = plt.figure(**fig_kw) - ax = fig.add_subplot(111) - else: - fig = ax.figure - - # 2D by arraying them as 1D slices in the smallest dimension(s) - if len(self.binning) == 3: - - smallest_dim = self.binning.names[np.argmin(self.binning.shape)] - - # we need to set the vmin and vmax now by hand: - if vmin is None: - vmin = np.nanmin(unp.nominal_values(self.hist)) - - if vmax is None: - vmax = np.nanmax(unp.nominal_values(self.hist)) - - if symm: - v = np.max([-vmin, vmax]) - vmin = -v - vmax = v - - divider = make_axes_locatable(ax) - - # prepare some smaller axes: - small_axes = [ax] - for bin_idx in range(1, self.binning[smallest_dim].num_bins): - small_axes.append(divider.append_axes("right", size="100%", pad=0.1, sharey=ax)) - small_axes[-1].yaxis.set_visible(False) - - for bin_idx, to_plot in enumerate(self.split(smallest_dim)): - _, _, pcmesh, colorbar = to_plot.plot( - symm=symm, logz=logz, vmin=vmin, vmax=vmax, - ax=small_axes[bin_idx], cmap=cmap, clabel=clabel, - clabelsize=clabelsize, xlabelsize=xlabelsize, - ylabelsize=ylabelsize, titlesize=titlesize, - pcolormesh_kw=pcolormesh_kw, colorbar_kw=colorbar_kw, - binlabel_format=binlabel_format, binlabel_colors=["white", "black"], - binlabel_color_thresh=binlabel_color_thresh, binlabel_stripzeros=binlabel_stripzeros, - ) - - if fmt is not None: - for fmt_ in fmt: - path = os.path.join(outdir, fname + '.' + fmt_) - fig.savefig(path, dpi=dpi) - logging.debug('>>>> Plot for inspection saved at %s', path) - - return fig, ax, pcmesh, colorbar - - - if len(self.binning) == 2: - to_plot = self - else: - to_plot = self.squeeze() - assert len(to_plot.binning) == 2 - - if fmt is not None and fname is None: - fname = get_valid_filename(to_plot.name) - - hist = valid_nominal_values(to_plot.hist) - if symm: - cmap = cmap_div if cmap is None else cmap - if vmin is None and vmax is None: - vmax_ = np.nanmax(np.abs(hist)) - elif vmin is None and vmax is not None: - vmax_ = np.abs(vmax) - elif vmin is not None and vmax is None: - vmax_ = np.abs(vmin) - else: # neither vmax nor vmin are None - assert vmax > vmin and vmax == -vmin - vmax_ = vmax - vmin_ = -vmax_ - elif logz: - cmap = cmap_seq if cmap is None else cmap - vmin_ = vmin if vmin is not None else hist[hist > 0].min() - vmax_ = vmax if vmax is not None else np.nanmax(hist) - else: - cmap = cmap_seq if cmap is None else cmap - vmin_ = vmin if vmin is not None else np.nanmin(hist) - vmax_ = vmax if vmax is not None else np.nanmax(hist) - - x = to_plot.binning.dims[0].bin_edges.magnitude - y = to_plot.binning.dims[1].bin_edges.magnitude - - if to_plot.binning.dims[0].is_log: - xticks = 2**(np.arange(np.ceil(np.log2(min(x))), - np.floor(np.log2(max(x)))+1)) - x = np.log10(x) - if to_plot.binning.dims[1].is_log: - yticks = 2**(np.arange(np.ceil(np.log2(min(y))), - np.floor(np.log2(max(y)))+1)) - y = np.log10(y) - - # If user specified a "bad" color, set this - # Need a cmap object, so if we just have a string name then get the actual cmap object first - if bad_color is not None : - if isinstance(cmap, str) : # Need a cmap - cmap = plt.get_cmap(cmap) - cmap.set_bad(bad_color) - - defaults = dict( - vmin=vmin_, vmax=vmax_, cmap=cmap, - shading='flat', edgecolors='face' - ) - if logz: - defaults['norm'] = mpl.colors.LogNorm( - vmin_, vmax_, clip=True - ) - - for key, dflt_val in defaults.items(): - if key not in pcolormesh_kw: - pcolormesh_kw[key] = dflt_val - - X, Y = np.meshgrid(x, y) - pcmesh = ax.pcolormesh(X, Y, hist.T, **pcolormesh_kw) - if binlabel_format is not None: - X_mid = np.true_divide(X[1:, 1:] + X[1:, :-1], 2) - Y_mid = np.true_divide(Y[1:, 1:] + Y[:-1, 1:], 2) - for xi, yi, zi in zip(np.ravel(X_mid), np.ravel(Y_mid), np.ravel(hist.T)): - if binlabel_color_thresh is not None: - assert len(binlabel_colors) == 2, "must give two colors with thresh" - if binlabel_color_thresh == "auto": - thresh = np.mean([np.nanmax(hist), np.nanmin(hist)]) - else: - thresh = binlabel_color_thresh - txtcolor = binlabel_colors[0] if zi < thresh else binlabel_colors[1] - else: - try: - txtcolor = binlabel_colors[-1] - except: # if binlabel_colors is not a list - txtcolor = binlabel_colors - binlabel = binlabel_format.format(zi) - if binlabel_stripzeros: - binlabel = binlabel.lstrip('0') - ax.text(xi, yi, binlabel, - horizontalalignment='center', - verticalalignment='center', - color=txtcolor, - fontsize=10) - colorbar = plt.colorbar(mappable=pcmesh, ax=ax, **colorbar_kw) - colorbar.ax.tick_params(labelsize='large') - if clabel is not None: - colorbar.set_label(label=clabel, size=clabelsize) - - xlabel = '$%s$' % to_plot.binning.dims[0].label - ylabel = '$%s$' % to_plot.binning.dims[1].label - - ax.set_xlabel(xlabel, size=xlabelsize) - ax.set_ylabel(ylabel, size=ylabelsize) - ax.set_title(title, y=1.03, size=titlesize) - ax.set_xlim(np.min(x), np.max(x)) - ax.set_ylim(np.min(y), np.max(y)) - - if to_plot.binning.dims[0].is_log: - ax.set_xticks(np.log10(xticks)) - ax.set_xticklabels([str(int(xt)) for xt in xticks]) - if to_plot.binning.dims[1].is_log: - ax.set_yticks(np.log10(yticks)) - ax.set_yticklabels([str(int(yt)) for yt in yticks]) - - if fmt is not None: - for fmt_ in fmt: - path = os.path.join(outdir, fname + '.' + fmt_) - fig.savefig(path, dpi=dpi) - logging.debug('>>>> Plot for inspection saved at %s', path) - - return fig, ax, pcmesh, colorbar - - @_new_obj - def __deepcopy__(self, memo): - """ Hook for deepcopy to correctly handle hists """ - return {} - - @_new_obj - def reorder_dimensions(self, order): - """Rearrange the dimensions in the map. This affects both the binning - and the contained histogram. - - Parameters - ---------- - order : MultiDimBinning or sequence of str, int, or OneDimBinning - Ordering desired for the dimensions of this map. See - `binning.reorder_dimensions` for details on how to specify `order`. - - Returns - ------- - Map : copy of this map but with dimensions reordered - - See Also - -------- - rebin - Modify Map (and its binning) by splitting or combining adjacent - bins - - downsample - Modify Map (and its binning) by combining adjacent bins - - """ - new_binning = self.binning.reorder_dimensions(order) - orig_order = list(range(len(self.binning))) - new_order = [self.binning.index(b, use_basenames=False) - for b in new_binning] - # TODO: should this be a deepcopy rather than a simple veiw of the - # original hist (the result of np.moveaxis)? - new_hist = np.moveaxis(self.hist, source=new_order, - destination=orig_order) - return {'hist': new_hist, 'binning': new_binning} - - @_new_obj - def squeeze(self): - """Remove any singleton dimensions (i.e. that have only a single bin). - Analagous to `numpy.squeeze`. - - Returns - ------- - Map with equivalent values but singleton dimensions removed - - """ - new_binning = self.binning.squeeze() - new_hist = self.hist.squeeze() - return {'hist': new_hist, 'binning': new_binning} - - @_new_obj - def round2int(self): - binning = self.binning - nominal_values = np.rint(self.nominal_values) - std_devs = self.std_devs - return {'hist': unp.uarray(nominal_values, std_devs)} - - @_new_obj - def sum(self, axis=None, keepdims=False): - """Sum over dimensions corresponding to `axis` specification. Similar - in behavior to `numpy.sum` method. - - Parameters - ---------- - axis : None; or str, int, or sequence thereof - Dimension(s) to be summed over. If None, sum over _all_ dimensions. - - keepdims : bool - If True, marginalizes out (removes) the specified dimensions. If - False, the binning in the summed dimension(s) is expanded to the - full range of the binning for each dimension over which the sum is - performed. - - Returns - ------- - s : Map or scalar - If all contained dimensiosn are summed over and `keepdims` is - False, a scalar is returned. Otherwise, a Map is returned with - dimensions marginalized out in the sum removed if `keepdims` is - False. - - """ - - #TODO This function does't work if axis=None, since @_new_obj expects the output to be a map - - if axis is None: - axis = self.binning.names - if isinstance(axis, (string_types, int)): - axis = [axis] - # Note that the tuple is necessary here (I think...) - sum_indices = tuple([self.binning.index(dim) for dim in axis]) - new_hist = np.nansum(self.hist, axis=sum_indices, keepdims=keepdims) - - new_binning = [] - for idx, dim in enumerate(self.binning.dims): - if idx in sum_indices: - if keepdims: - new_binning.append(dim.downsample(len(dim))) - else: - new_binning.append(dim) - return {'hist': new_hist, 'binning': new_binning} - - def project(self, axis, keepdims=False): - """Project all dimensions onto a single `axis`. - - Parameters - ---------- - axis : string or int - Dimensions to be projected onto. - keepdims : bool - If True, marginalizes out (removes) the _un_specified dimensions. - If False, the binning in the summed dimension(s) includes - the full range of the binning for each dimension in the original - Map. Note that if you want to remove all _singleton_ dimensions - (which could include the `axis` specified here), call the - `squeeze` method on the result of `project`. - - Returns - ------- - projection : Map - - """ - keep_index = self.binning.index(axis) - sum_indices = list(range(len(self.binning.dims))) - sum_indices.remove(keep_index) - - return self.sum(axis=sum_indices, keepdims=keepdims) - - @_new_obj - def rebin(self, new_binning): - """Rebin the map with bin edge locations and names according to those - specified in `new_binning`. - - Calls the `rebin` function in the pisa.core.map.rebin module to do the - actual work. - - Parameters - ---------- - new_binning : MultiDimBinning - Dimensions specified in `new_binning` must match (modulo - pre/suffixes) the current dimensions. - - Returns - ------- - Map binned according to `new_binning`. - - See Also - --------- - `pisa.core.map.rebin` : function called to do the work - - """ - # TODO: put uncertainties in - - assert self.binning.mask is None, "`rebin` function does not currenty support bin masking" - - new_hist = rebin(hist=self.hist, orig_binning=self.binning, - new_binning=new_binning) - return {'hist': new_hist, 'binning': new_binning} - - def downsample(self, *args, **kwargs): - """Downsample by integer factor(s), summing together merged bins' - values. - - See pisa.utils.binning.MultiDimBinning.downsample for args/kwargs - details. - - """ - new_binning = self.binning.downsample(*args, **kwargs) - return self.rebin(new_binning) - - @_new_obj - def fluctuate(self, method, random_state=None, jumpahead=None): - """Apply fluctuations to the map's values. - - Parameters - ---------- - method : None or string - Valid strings are '', 'none', 'poisson', 'scaled_poisson', 'gauss', or - 'gauss+poisson'. Strings are case-insensitive and whitespace is - removed. - The 'scaled_poisson' method implements a Scaled Poisson Process, which is - a better approximation than a normal distribution to the true distribution - of bin counts that are the result of a Poisson process with weighted events[1]. - The fluctuated maps are guaranteed to have the same mean and standard - deviation as the original map. - - random_state : None or type accepted by utils.random_numbers.get_random_state - - Returns - ------- - fluctuated_map : Map - New map with entries fluctuated as compared to this map - - References - ---------- - .. [1] Bohm & Zech, "Statistics of weighted Poisson events and its applications" (2013), - https://arxiv.org/abs/1309.1287 - """ - orig = method - method = str(method).strip().lower().replace(' ', '') - if not method in FLUCTUATE_METHODS: - raise ValueError( - 'Map fluctuation method "%s" not recognized! Valid choices are:' - ' %s.' % (method, FLUCTUATE_METHODS) - ) - if method == 'poisson': - random_state = get_random_state(random_state, jumpahead=jumpahead) - with np.errstate(invalid='ignore'): - orig_hist = self.nominal_values - nan_at = np.isnan(orig_hist) - valid_mask = ~nan_at - - hist_vals = np.empty_like(orig_hist) - hist_vals[valid_mask] = poisson.rvs( - orig_hist[valid_mask], - random_state=random_state - ) - hist_vals[nan_at] = np.nan - - error_vals = np.empty_like(orig_hist) - error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) - error_vals[nan_at] = np.nan - return {'hist': unp.uarray(hist_vals, error_vals)} - - if method == 'scaled_poisson': - random_state = get_random_state(random_state, jumpahead=jumpahead) - with np.errstate(invalid='ignore'): - orig_hist = self.nominal_values - sigma = self.std_devs - - nan_at = np.isnan(orig_hist) - zero_at = orig_hist == 0. - valid_mask = ~nan_at - if np.any(sigma[valid_mask & ~zero_at] == 0.): - logging.warn( - "Some bins have non-zero counts but no assiciated error! " - "All errors will be set to their Poisson expectation now. " - "To avoid this warning, call `set_poisson_errors()` on the " - "map or set non-zero errors manually." - ) - sigma[valid_mask] = np.sqrt(orig_hist[valid_mask]) - variance_valid = sigma[valid_mask]**2 - - if np.allclose(variance_valid, orig_hist[valid_mask], **ALLCLOSE_KW): - scale_factor = 1. - else: - scale_factor = variance_valid/orig_hist[valid_mask] - poisson_lambda = orig_hist[valid_mask]/scale_factor - - hist_vals = np.empty_like(orig_hist) - hist_vals[valid_mask] = poisson.rvs( - poisson_lambda, - random_state=random_state - ) - hist_vals[valid_mask] *= scale_factor - hist_vals[nan_at] = np.nan - hist_vals[zero_at] = 0. - # the standard deviation is unchanged - sigma[nan_at] = np.nan - return {'hist': unp.uarray(hist_vals, sigma)} - - elif method == 'gauss+poisson': - random_state = get_random_state(random_state, jumpahead=jumpahead) - with np.errstate(invalid='ignore'): - orig_hist = self.nominal_values - sigma = self.std_devs - nan_at = np.isnan(orig_hist) - valid_mask = ~nan_at - gauss = np.empty_like(orig_hist, dtype=np.float64) - gauss[valid_mask] = norm.rvs( - loc=orig_hist[valid_mask], scale=sigma[valid_mask], - random_state=random_state - ) - - hist_vals = np.empty_like(orig_hist, dtype=np.float64) - hist_vals[valid_mask] = poisson.rvs( - gauss[valid_mask], - random_state=random_state - ) - hist_vals[nan_at] = np.nan - - error_vals = np.empty_like(orig_hist, dtype=np.float64) - error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) - error_vals[nan_at] = np.nan - return {'hist': unp.uarray(hist_vals, error_vals)} - - elif method == 'gauss': - random_state = get_random_state(random_state, jumpahead=jumpahead) - with np.errstate(invalid='ignore'): - orig_hist = self.nominal_values - sigma = self.std_devs - nan_at = np.isnan(orig_hist) - valid_mask = ~nan_at - hist_vals = np.empty_like(orig_hist, dtype=np.float64) - hist_vals[valid_mask] = norm.rvs( - loc=orig_hist[valid_mask], scale=sigma[valid_mask], - random_state=random_state - ) - - hist_vals[nan_at] = np.nan - error_vals = np.empty_like(orig_hist, dtype=np.float64) - error_vals[valid_mask] = np.sqrt(orig_hist[valid_mask]) - error_vals[nan_at] = np.nan - return {'hist': unp.uarray(hist_vals, error_vals)} - - elif method in ['', 'none']: - return {} - - @property - def shape(self): - """tuple : shape of the map, akin to `nump.ndarray.shape`""" - return self.hist.shape - - @property - def size(self): - """int : total number of elements""" - return self.hist.size - - @property - def num_entries(self): - """int : total number of weighted entries in all bins""" - return np.sum(valid_nominal_values(self.hist)) - - @property - def serializable_state(self): - state = OrderedDict() - state['name'] = self.name - state['hist'] = self.nominal_values - state['binning'] = self.binning.serializable_state - stddevs = self.std_devs - stddevs = None if np.all(stddevs == 0) else stddevs - state['error_hist'] = stddevs - state['hash'] = self.hash - state['tex'] = self._tex - state['full_comparison'] = self.full_comparison - return state - - @property - def hashable_state(self): - state = OrderedDict() - state['name'] = self.name - if self.normalize_values: - state['hist'] = normQuant(self.nominal_values, - sigfigs=HASH_SIGFIGS) - stddevs = normQuant(self.std_devs, sigfigs=HASH_SIGFIGS) - else: - state['hist'] = self.nominal_values - stddevs = self.std_devs - state['binning'] = self.binning.hashable_state - # TODO: better check here to see if the contained datatype is unp, as - # opposed to 0 stddev (which could be the case but the user wants for - # uncertainties to propagate) - if np.all(stddevs == 0): - stddevs = None - elif self.normalize_values: - stddevs = normQuant(stddevs, sigfigs=HASH_SIGFIGS) - state['error_hist'] = stddevs - state['full_comparison'] = self.full_comparison - return state - - @property - def normalize_values(self): - return self._normalize_values - - @normalize_values.setter - def normalize_values(self, b): - assert isinstance(b, bool) - self._normalize_values = b - - def __getstate__(self): - return self.serializable_state - - def __setstate__(self, state): - self.__init__(**state) - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - - Parameters - ---------- - filename : str - Filename; must be either a relative or absolute path (*not - interpreted as a PISA resource specification*) - **kwargs - Further keyword args are sent to `pisa.utils.jsons.to_json()` - - See Also - -------- - from_json : Intantiate new object from the file written by this method - pisa.utils.jsons.to_json - - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, resource): - """Instantiate a new Map object from a JSON file. - - The format of the JSON is generated by the `Map.to_json` method, which - converts a Map object to basic types and then numpy arrays are - converted in a call to `pisa.utils.jsons.to_json`. - - Parameters - ---------- - resource : str - A PISA resource specification (see pisa.utils.resources) - - See Also - -------- - to_json - pisa.utils.jsons.to_json - - """ - state = jsons.from_json(resource) - # State is a dict with kwargs, so instantiate with double-asterisk - # syntax - return cls(**state) - - def assert_compat(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - return - elif isinstance(other, np.ndarray): - self.binning.assert_array_fits(other) - elif isinstance(other, Map): - self.binning.assert_compat(other.binning) - else: - raise TypeError('Unhandled type %s' % type(other)) - - def iterbins(self): - """Returns a bin iterator which yields a map containing a single bin - each time. Note that modifications to that single-bin map will be - reflected in this (the parent) map. - - Note that the returned map has the attribute `parent_indexer` for - indexing directly into to the parent map (or to a similar map). - - Yields - ------ - Map object containing one of each bin of this Map - - """ - for i in range(self.size): - idx_coord = self.binning.index2coord(i) - idx_view = tuple(slice(x, x+1) for x in idx_coord) - single_bin_map = Map( - name=self.name, - hist=self.hist[idx_view], - binning=self.binning[idx_coord], - hash=None, - tex=self.tex, - full_comparison=self.full_comparison, - ) - single_bin_map.parent_indexer = idx_coord - yield single_bin_map - - # TODO : example! - def itercoords(self): - """Iterator that yields the coordinate of each bin in the map.""" - return self.binning.itercoords() - - def __hash__(self): - if self.hash is not None: - return self.hash - raise ValueError('No hash defined.') - - def __setattr__(self, attr, value): - """Only allow setting attributes defined in slots""" - if attr not in self._slots: - raise ValueError('Attribute "%s" not allowed to be set.' % attr) - super().__setattr__(attr, value) - - def __getattr__(self, attr): - return super().__getattribute__(attr) - - def _slice_or_index(self, idx): - """Slice or index into the map. Indexing single element in self.hist - e.g. hist[1,3] returns a 0D array while hist[1,3:8] returns a 1D array, - but we need 2D (in his example)... so reshape after indexing (the - indexed binning obj implements this logic and so knows the shape the - hist should be). - - """ - new_binning = self.binning[idx] - - new_map = Map(name=self.name, - hist=np.reshape(self.hist[idx], new_binning.shape), - binning=self.binning[idx], - hash=self.hash, - tex=self.tex, - full_comparison=self.full_comparison) - new_map.parent_indexer = idx - return new_map - - def __getitem__(self, idx): - return self._slice_or_index(idx) - - # TODO: if no bin name is given (i.e., 1D indexing), then split into maps - # and return a MapSet with a map per bin; append '__%s__%s' %(dim_name, - # bin_name) to this map's name to name each new map, and if no bin names - # are given, use str(int(ind)) instead for bin_name. - def split(self, dim, bin=None, use_basenames=False): - """Split this map into one or more maps by selecting the `dim` - dimension and optionally the specific bin(s) within that dimension - specified by `bin`. - - If both `dim` and `bin` are specified and this identifies a single bin, - a single Map is returned, while if this locates multiple bins, a MapSet - is returned where each map corresponds to a bin (in the order dictated - by the `bin` specification). - - If only `dim` is specified, _regardless_ if multiple bins meet the - (dim, bin) criteria, the maps corresponding to each `bin` are collected - into a MapSet and returned. - - Resulting maps are ordered according to the binning and are renamed as: - - new_map[j].name = orig_map.name__dim.binning.bin_names[i] - - if the current map has a name, or - - new_map[j].name = dim.binning.bin_names[i] - - if the current map has a zero-length name. - - In the above, j is the index into the new MapSet and i is the index to - the bin in the original binning spec. `map.name` is the current - (pre-split) map's name, and if the bins do not have names, then the - stringified integer index to the bin, str(i), is used instead. - - Parameters - ---------- - dim : string, int - Name or index of a dimension in the map - bin : None or bin indexing object (str, int, slice, ellipsis) - Optionally specify specific bin(s) to split out from the chosen - dimension. - - Returns - ------- - split_maps : Map or MapSet - If only `dim` is passed, returns MapSet regardless of how many maps - are found. If both `dim` and `bin` are specified and this results - in selecting more than one bin, also returns a MapSet. However if - both `dim` and `bin` are specified and this selects a single bin, - just the indexed Map is returned. Naming of the maps and MapSet is - updated to reflect what the map represents, while the hash value is - copied into the new map(s). - - """ - - dim_index = self.binning.index(dim, use_basenames=use_basenames) - spliton_dim = self.binning.dims[dim_index] - - # Move the dimension we're going to split on to be the first dim - new_order = list(range(len(self.binning))) - new_order.pop(dim_index) - new_order = [dim_index] + new_order - rearranged_map = self.reorder_dimensions(new_order) - rearranged_hist = rearranged_map.hist - rearranged_dims = rearranged_map.binning.dims - - # Take all dims except the one being split on - new_binning = rearranged_dims[1:] - - singleton = False - if bin is not None: - if isinstance(bin, (int, string_types)): - bin_indices = [spliton_dim.index(bin)] - elif isinstance(bin, slice): - bin_indices = list(range(len(spliton_dim)))[bin] - elif bin is Ellipsis: - bin_indices = list(range(len(spliton_dim))) - - if len(bin_indices) == 1: - singleton = True - else: - bin_indices = list(range(len(spliton_dim))) - - maps = [] - for bin_index in bin_indices: - bin = spliton_dim[bin_index] - new_hist = rearranged_hist[bin_index, ...] - if bin.bin_names is not None: - bin_name = bin.bin_names[0] - bin_tex = '=' + text2tex(bin_name) - else: - bin_name = 'bin_%d' % bin_index - bin_tex = r'{\;}bin{\;}%d' % bin_index - - name_elements = [] - for s in [self.name, spliton_dim.name, bin_name]: - if s is not None and len(s) > 0: - name_elements.append(s) - new_name = '_'.join(name_elements) - - new_tex = self.tex + ',' + r'{\;}' + spliton_dim.tex + bin_tex - - maps.append( - Map(name=new_name, hist=new_hist, binning=new_binning, - hash=self.hash, tex=new_tex, - full_comparison=self.full_comparison) - ) - - if singleton: - assert len(maps) == 1 - return maps[0] - - if len(self.name) > 0: - mapset_name = '%s__split_on__%s' % (self.name, spliton_dim.name) - else: - mapset_name = 'split_on__%s' % spliton_dim.name - - if self.tex is not None and len(self.tex) > 0: - mapset_tex = r'%s, \; %s' % (self.tex, spliton_dim.tex) - else: - mapset_tex = r'%s' % spliton_dim.tex - - return MapSet(maps=maps, name=mapset_name, tex=mapset_tex) - - def llh(self, expected_values, binned=False): - """Calculate the total log-likelihood value between this map and the - map described by `expected_values`; self is taken to be the "actual - values" (or (pseudo)data), and `expected_values` are the expectation - values for each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_llh : float or binned_llh if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.llh(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.llh(actual_values=self.hist, - expected_values=expected_values)) - - def mcllh_mean(self, expected_values, binned=False): - """Calculate the total LMean log-likelihood value between this map and the - map described by `expected_values`; self is taken to be the "actual - values" (or (pseudo)data), and `expected_values` are the expectation - values for each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_llh : float or binned_llh if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.mcllh_mean(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.mcllh_mean(actual_values=self.hist, - expected_values=expected_values)) - - - def mcllh_eff(self, expected_values, binned=False): - """Calculate the total LEff log-likelihood value between this map and the - map described by `expected_values`; self is taken to be the "actual - values" (or (pseudo)data), and `expected_values` are the expectation - values for each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_llh : float or binned_llh if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.mcllh_eff(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.mcllh_eff(actual_values=self.hist, - expected_values=expected_values)) - - def conv_llh(self, expected_values, binned=False): - """Calculate the total convoluted log-likelihood value between this map - and the map described by `expected_values`; self is taken to be the - "actual values" (or (pseudo)data), and `expected_values` are the - expectation values for each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_conv_llh : float or binned_conv_llh if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.conv_llh(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.conv_llh(actual_values=self.hist, - expected_values=expected_values)) - - def barlow_llh(self, expected_values, binned=False): - """Calculate the total barlow log-likelihood value between this map and - the map described by `expected_values`; self is taken to be the "actual - values" (or (pseudo)data), and `expected_values` are the expectation - values for each bin. I assumes at the moment some things that are not - true, namely that the weights are uniform - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_barlow_llh : float or binned_barlow_llh if binned=True - - """ - # TODO: should this handle reduceToHist / expected_values as other - # methods do, or should they handle these the way this method does? - if isinstance(expected_values, (np.ndarray, Map, MapSet)): - expected_values = reduceToHist(expected_values) - elif isinstance(expected_values, Iterable): - expected_values = [reduceToHist(x) for x in expected_values] - - if binned: - return stats.barlow_llh(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.barlow_llh(actual_values=self.hist, - expected_values=expected_values)) - - def mod_chi2(self, expected_values, binned=False): - """Calculate the total modified chi2 value between this map and the map - described by `expected_values`; self is taken to be the "actual values" - (or (pseudo)data), and `expected_values` are the expectation values for - each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this. - - binned : bool - - Returns - ------- - total_mod_chi2 : float or binned_mod_chi2 if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.mod_chi2(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.mod_chi2(actual_values=self.hist, - expected_values=expected_values)) - - def correct_chi2(self, expected_values, binned=False): - """Calculate the total correct chi2 value between this map and the map - described by `expected_values`; self is taken to be the "actual values" - (or (pseudo)data), and `expected_values` are the expectation values for - each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this. - - binned : bool - - Returns - ------- - total_correct_chi2 : float or binned_correct_chi2 if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.correct_chi2(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.correct_chi2(actual_values=self.hist, - expected_values=expected_values)) - - def chi2(self, expected_values, binned=False): - """Calculate the total chi-squared value between this map and the map - described by `expected_values`; self is taken to be the "actual values" - (or (pseudo)data), and `expected_values` are the expectation values for - each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this - - binned : bool - - Returns - ------- - total_chi2 : float or binned_chi2 if binned=True - - """ - expected_values = reduceToHist(expected_values) - - if binned: - return stats.chi2(actual_values=self.hist, - expected_values=expected_values) - - return np.sum(stats.chi2(actual_values=self.hist, - expected_values=expected_values)) - - def signed_sqrt_mod_chi2(self, expected_values): - """Calculate the binwise (signed) square-root of the modified chi2 value - between this map and the map described by `expected_values`; self is - taken to be the "actual values" (or (pseudo)data), and `expected_values` - are the expectation values for each bin. - - Parameters - ---------- - expected_values : numpy.ndarray or Map of same dimension as this. - - Returns - ------- - m_pulls : signed_sqrt_mod_chi2 - - """ - expected_values = reduceToHist(expected_values) - - return stats.signed_sqrt_mod_chi2(actual_values=self.hist, - expected_values=expected_values) - - - def generalized_poisson_llh(self, expected_values=None, empty_bins=None, binned=False): - '''compute the likelihood of this map's count to originate from - - Note that unlike the other likelihood functions, expected_values - is expected to be a ditribution maker - - inputs: - ------ - - expected_values: OrderedDict of MapSets - - empty_bins: None, list or np.ndarray (list the bin indices that are empty) - - binned: bool (return the bin-by-bin llh or the sum over all bins) - - ''' - - llh_per_bin = stats.generalized_poisson_llh(actual_values=self.hist, - expected_values=expected_values, - empty_bins=empty_bins) - - if binned: - return llh_per_bin - else: - return np.sum(llh_per_bin) - - - def metric_total(self, expected_values, metric, metric_kwargs=None): - ''' Compute the optimization metric on the bins of a Map - - Inputs - ------- - - expected_values: Map (the data/pseudo-data binned counts) - - metric: str (name of the optimization metric) - - metric_kwargs: None or Dict (special arguments to pass to - a special metric - right now just - useful for generalized_poisson_llh) - - Returns: - ------ - float (sum of the metric over all bins of expected_values) - - ''' - # TODO: should this use reduceToHist as in chi2 and llh above? - if metric_kwargs is None: - metric_kwargs={} - if metric in stats.ALL_METRICS: - return getattr(self, metric)(expected_values, **metric_kwargs) - else: - raise ValueError('`metric` "%s" not recognized; use one of %s.' - % (metric, stats.ALL_METRICS)) - - def __setitem__(self, idx, val): - return setitem(self.hist, idx, val) - - @property - def name(self): - """string : Map's name""" - return self._name - - @name.setter - def name(self, value): - """map name""" - assert isinstance(value, string_types) - return super().__setattr__('_name', value) - - @property - def tex(self): - """string : TeX label""" - if self._tex is None: - return text2tex(self.name) - return self._tex - - @tex.setter - def tex(self, value): - assert value is None or isinstance(value, string_types) - if value is not None: - value = strip_outer_dollars(value) - return super().__setattr__('_tex', value) - - @property - def hash(self): - """int or None : Hash value""" - return self._hash - - @hash.setter - def hash(self, value): - """Hash must be an immutable type (i.e., have a __hash__ method)""" - assert hasattr(value, '__hash__') - super().__setattr__('_hash', value) - - @property - def hist(self): - """numpy.ndarray : Histogram array underlying the Map""" - - # Get the hist - hist = self._hist - - # Apply bin mask, if one exists - # Set masked off elements to NaN (handling both cases where the hst is either a simple array, or has uncertainties) - if self.binning.mask is not None : - hist[~self.binning.mask] = ufloat(np.NaN, np.NaN) if isinstance(self._hist[np.unravel_index(0, self._hist.shape)], uncertainties.core.Variable) else np.NaN #TODO Is there a better way to check if this is a uarray? - - # Done - return hist - - @property - def nominal_values(self): - """numpy.ndarray : Bin values stripped of uncertainties""" - return unp.nominal_values(self.hist) - - @property - def std_devs(self): - """numpy.ndarray : Uncertainties (standard deviations) per bin""" - return unp.std_devs(self.hist) - - @property - def binning(self): - """pisa.core.binning.MultiDimBinning : Map's binning""" - return self._binning - - @property - def full_comparison(self): - """Compare element-by-element instead of just comparing hashes.""" - return self._full_comparison - - @full_comparison.setter - def full_comparison(self, value): - assert isinstance(value, bool) - super().__setattr__('_full_comparison', value) - - # Common mathematical operators - - @_new_obj - def __abs__(self): - state_updates = { - #'name': "|%s|" % (self.name,), - #'tex': r"{\left| %s \right|}" % strip_outer_parens(self.tex), - 'hist': np.abs(self.hist) - } - return state_updates - - @_new_obj - def __add__(self, other): - """Add `other` to self""" - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "(%s + %s)" % (self.name, other), - #'tex': r"{(%s + %s)}" % (self.tex, other), - 'hist': self.hist + other - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "(%s + array)" % self.name, - #'tex': r"{(%s + X)}" % self.tex, - 'hist': self.hist + other - } - elif isinstance(other, Map): - state_updates = { - #'name': "(%s + %s)" % (self.name, other.name), - #'tex': r"{(%s + %s)}" % (self.tex, other.tex), - 'hist': self.hist + other.hist, - 'full_comparison': (self.full_comparison or - other.full_comparison), - } - else: - type_error(other) - return state_updates - - #def __cmp__(self, other): - - @_new_obj - def __div__(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "(%s / %s)" % (self.name, other), - #'tex': r"{(%s / %s)}" % (self.tex, other), - 'hist': self.hist / other - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "(%s / array)" % self.name, - #'tex': r"{(%s / X)}" % self.tex, - 'hist': self.hist / other - } - elif isinstance(other, Map): - state_updates = { - #'name': "(%s / %s)" % (self.name, other.name), - #'tex': r"{(%s / %s)}" % (self.tex, other.tex), - 'hist': self.hist / other.hist, - 'full_comparison': (self.full_comparison or - other.full_comparison), - } - else: - type_error(other) - return state_updates - - def __truediv__(self, other): - return self.__div__(other) - - def __floordiv__(self, other): - raise NotImplementedError('floordiv not implemented for type Map') - - # TODO: figure out what we actually want to overload "==" with, and how - # to implement all the possible kinds of "==" that might be useful for the - # user, possibly with different methods altogether - def __eq__(self, other): - """Check if full state of maps are equal. *Not* element-by-element - equality as for a numpy array. Call this.hist == other.hist for the - element-by-element nominal value and the error. - - If `full_comparison` is true for either map, or if either map lacks a - hash, performs a full comparison of the contents of each map. - - Otherwise, simply checks that the hashes are equal. - - """ - if np.isscalar(other): - return np.all(self.nominal_values == other) - - if type(other) is uncertainties.core.Variable \ - or isinstance(other, np.ndarray): - return (np.all(self.nominal_values - == unp.nominal_values(other)) - and np.all(self.std_devs - == unp.std_devs(other))) - - if isinstance(other, Map): - if (self.full_comparison or other.full_comparison - or self.hash is None or other.hash is None): - return recursiveEquality(self.hashable_state, - other.hashable_state) - return self.hash == other.hash - - type_error(other) - - @_new_obj - def log(self): - """Take natural logarithm of map's values, returning a new map. - - Returns - ------- - log_map : Map - - """ - state_updates = { - #'name': "log(%s)" % self.name, - #'tex': r"\ln\left( %s \right)" % self.tex, - 'hist': unp.log(self.hist) - } - return state_updates - - @_new_obj - def log10(self): - """Take base-10 logarithm of map's values, returning a new map. - - Returns - ------- - log10_map : Map - - """ - state_updates = { - #'name': "log10(%s)" % self.name, - #'tex': r"\log_{10}\left( %s \right)" % self.tex, - 'hist': unp.log10(self.hist) - } - return state_updates - - @_new_obj - def __mul__(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "%s * %s" % (other, self.name), - #'tex': r"%s \cdot %s" % (other, self.tex), - 'hist': self.hist * other - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "array * %s" % self.name, - #'tex': r"X \cdot %s" % self.tex, - 'hist': self.hist * other, - } - elif isinstance(other, Map): - state_updates = { - #'name': "%s * %s" % (self.name, other.name), - #'tex': r"%s \cdot %s" % (self.tex, other.tex), - 'hist': self.hist * other.hist, - 'full_comparison': (self.full_comparison or - other.full_comparison), - } - else: - type_error(other) - return state_updates - - def __ne__(self, other): - return not self.__eq__(other) - - @_new_obj - def __neg__(self): - state_updates = { - #'name': "-%s" % self.name, - #'tex': r"-%s" % self.tex, - 'hist': -self.hist, - } - return state_updates - - @_new_obj - def __pow__(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "%s**%s" % (self.name, other), - #'tex': "%s^{%s}" % (self.tex, other), - 'hist': unp.pow(self.hist, other) - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "%s**(array)" % self.name, - #'tex': r"%s^{X}" % self.tex, - 'hist': unp.pow(self.hist, other), - } - elif isinstance(other, Map): - state_updates = { - #'name': "%s**(%s)" % (self.name, - # strip_outer_parens(other.name)), - #'tex': r"%s^{%s}" % (self.tex, strip_outer_parens(other.tex)), - 'hist': unp.pow(self.hist, other.hist), - 'full_comparison': (self.full_comparison or - other.full_comparison), - } - else: - type_error(other) - return state_updates - - def __radd__(self, other): - return self + other - - def __rdiv__(self, other): - if isinstance(other, Map): - return other / self - return self.__rdiv(other) - - @_new_obj - def __rdiv(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "(%s / %s)" % (other, self.name), - #'tex': "{(%s / %s)}" % (other, self.tex), - 'hist': other / self.hist, - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "array / %s" % self.name, - #'tex': "{(X / %s)}" % self.tex, - 'hist': other / self.hist, - } - else: - type_error(other) - return state_updates - - def __rmul__(self, other): - return self * other - - def __rsub__(self, other): - if isinstance(other, Map): - return other - self - return self.__rsub(other) - - @_new_obj - def __rsub(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "(%s - %s)" % (other, self.name), - #'tex': "{(%s - %s)}" % (other, self.tex), - 'hist': other - self.hist, - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "(array - %s)" % self.name, - #'tex': "{(X - %s)}" % self.tex, - 'hist': other - self.hist, - } - else: - type_error(other) - return state_updates - - @_new_obj - def sqrt(self): - """Take square root of map's values, returning a new map. - - Returns - ------- - sqrt_map : Map - - """ - state_updates = { - #'name': "sqrt(%s)" % self.name, - #'tex': r"\sqrt{%s}" % self.tex, - #'hist': np.asarray(unp.sqrt(self.hist), dtype='float'), - 'hist': unp.sqrt(self.hist), - } - return state_updates - - @_new_obj - def __sub__(self, other): - if np.isscalar(other) or type(other) is uncertainties.core.Variable: - state_updates = { - #'name': "(%s - %s)" % (self.name, other), - #'tex': "{(%s - %s)}" % (self.tex, other), - 'hist': self.hist - other, - } - elif isinstance(other, np.ndarray): - state_updates = { - #'name': "(%s - array)" % self.name, - #'tex': "{(%s - X)}" % self.tex, - 'hist': self.hist - other, - } - elif isinstance(other, Map): - state_updates = { - #'name': "%s - %s" % (self.name, other.name), - #'tex': "{(%s - %s)}" % (self.tex, other.tex), - 'hist': self.hist - other.hist, - 'full_comparison': (self.full_comparison or - other.full_comparison), - } - else: - type_error(other) - return state_updates - - def allclose(self, other): - '''Check if this map and another have the same (within machine precision) bin counts''' - self.assert_compat(other) - return np.allclose(self.nominal_values, other.nominal_values, **ALLCLOSE_KW) - - -# TODO: instantiate individual maps from dicts if passed as such, so user -# doesn't have to instantiate each map. Also, check for name collisions with -# one another and with attrs (so that __getattr__ can retrieve the map by name) - -# TODO: add docstrings - -class MapSet(object): - """ - Ordered set of event rate maps (aka histograms) defined over an arbitrary - regluar hyper-rectangular binning. - - - Parameters - ---------- - maps : Map or sequence of Map - - name : string - - tex : string - - hash : immutable - - collate_by_name : bool - If True, when this MapSet is passed alongside another MapSet to a - function that operates on the maps, contained maps in each will be - accessed by name. Hence, only maps with the same names will be operated - on simultaneously. - - If false, the contained maps in each MapSet will be accessed by their - order in each MapSet. This behavior is useful if maps are renamed - through some operation but their order is maintained, and then - comparisons are sought with their progenitors with the original - (different) name. - - """ - __slots = ('_name', '_hash', 'hash') - __state_attrs = ('name', 'maps', 'tex', 'hash', 'collate_by_name') - def __init__(self, maps, name=None, tex=None, hash=None, - collate_by_name=True): - if isinstance(maps, Map): - maps = [maps] - - maps_ = [] - for m in maps: - if isinstance(m, Map): - maps_.append(m) - elif isinstance(m, MapSet): - maps_.extend(m) - else: - maps_.append(Map(**m)) - - super().__setattr__('maps', maps_) - super().__setattr__('name', name) - super().__setattr__('tex', tex) - super().__setattr__( - 'collate_by_name', collate_by_name - ) - super().__setattr__('collate_by_num', not collate_by_name) - self.hash = hash - - def __repr__(self): - previous_precision = np.get_printoptions()['precision'] - np.set_printoptions(precision=18) - try: - argstrs = [('%s=%r' % item) for item in - self.serializable_state.items()] - r = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) - finally: - np.set_printoptions(precision=previous_precision) - return r - - def __str__(self): - state = OrderedDict() - attrs = ['name', 'tex', 'hash', 'maps'] - state['name'] = repr(self.name) - state['tex'] = repr(self.tex) - state['hash'] = repr(self.hash) - state['maps'] = ('[\n' + ' '*8 + '%s \n]' - % ',\n '.join([str(m) for m in self])) - argstrs = [('%s=%s' % (a, state[a])) for a in attrs] - s = '%s(%s)' % (self.__class__.__name__, ',\n '.join(argstrs)) - return s - - def __pretty__(self, p, cycle): - """Method used by the `pretty` library for formatting""" - myname = self.__class__.__name__ - if cycle: - p.text('%s(...)' % myname) - else: - p.begin_group(4, '%s(' % myname) - attrs = ['name', 'tex', 'hash', 'maps'] - for n, attr in enumerate(attrs): - p.breakable() - p.text(attr + '=') - p.pretty(getattr(self, attr)) - if n < len(attrs)-1: - p.text(',') - p.end_group(4, ')') - - def _repr_pretty_(self, p, cycle): - """Method used by e.g. ipython/Jupyter for formatting""" - return self.__pretty__(p, cycle) - - @property - def serializable_state(self): - """OrderedDict : all state needed to reconstruct object""" - state = OrderedDict() - state['maps'] = [m.serializable_state for m in self] - state['name'] = self.name - state['tex'] = self._tex - state['collate_by_name'] = self.collate_by_name - return state - - def __getstate__(self): - return self.serializable_state - - def __setstate__(self, state): - self.__init__(**state) - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - - Parameters - ---------- - filename : str - Filename; must be either a relative or absolute path (*not - interpreted as a PISA resource specification*) - **kwargs - Further keyword args are sent to `pisa.utils.jsons.to_json()` - - See Also - -------- - from_json : Intantiate new object from the file written by this method - pisa.utils.jsons.to_json - - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, resource): - """Instantiate a new MapSet object from a JSON file. - - The format of the JSON is generated by the `MapSet.to_json` method, - which converts a MapSet object to basic types and then numpy arrays are - converted in a call to `pisa.utils.jsons.to_json`. - - Parameters - ---------- - resource : str - A PISA resource specification (see pisa.utils.resources) - - See Also - -------- - to_json - pisa.utils.jsons.to_json - - """ - state = jsons.from_json(resource) - # State is a dict for Map, so instantiate with double-asterisk syntax - return cls(**state) - - def index(self, x): - """Find map corresponding to `x` and return its index. Accepts either - an integer index or a map name to make interface consistent. - - Parameters - ---------- - x : int, string, or Map - Map, map name, or integer index of map in this MapSet. If a Map is - passed, only its name is matched to the maps in this set. - - Returns - ------- - integer index to the map - - """ - try: - if isinstance(x, int): - l = len(self) - assert x >= -l and x < l - elif isinstance(x, Map): - x = self.names.index(x.name) - elif isinstance(x, string_types): - x = self.names.index(x) - else: - raise TypeError('Unhandled type "%s" for `x`' % type(x)) - except (AssertionError, ValueError): - raise ValueError( - "A map corresponding to '%s' cannot be found in the set." - " Valid maps are %s" % (x, self.names) - ) - return x - - def pop(self, *args): #x=None): - """Remove a map and return it. If a value is passed, the map - corresponding to `index(value)` is removed and returned instead. - - Parameters - ---------- - x (optional) : int, string, or Map - Map, map name, or integer index of map in this MapSet. If a Map is - passed, only its name is matched to the maps in this set. - - Returns - ------- - Map removed from this MapSet - - See Also - -------- - list.pop - - """ - if len(args) == 0: - m = self.maps.pop() - elif len(args) == 1: - idx = self.index(args[0]) - m = self.maps.pop(idx) - else: - raise ValueError('`pop` takes 0 or 1 argument; %d passed instead.' - % len(args)) - return m - - # TODO: add different aggregation options OR rename to sum_{wildcard|re} - def combine_re(self, regexes): - r"""For each regex passed, add together contained maps whose names - match. - - If a string or regex is passed, the corresponding maps are combined and - returned as a Map object. If an iterable of one or more regexes is - passed, each grouping found is combined into a Map separately and the - resulting Maps are populated into a new MapSet to be returned. - - Parameters - ---------- - regexes : compiled regex, str representing a regex, or iterable thereof - See Python module `re` for formatting. - - Returns - ------- - combined - Map if `regexes` is a string or regex; MapSet if `regexes` is an - iterable of one or more strings or regexes - - Raises - ------ - ValueError - If any `regexes` fail to match any map names. - - Notes - ----- - If special characters are used in the regex, like a backslash, be sure - to use a Python raw string (which does not interpret such special - characters) by prefixing the string with an "r". E.g., the regex to - match a period requires passing - `regex=r'\.'` - - Examples - -------- - Get total of trck and cscd maps, which are named with suffixes "trck" - and "cscd", respectively. - - >>> total_trck_map = outputs.combine_re('.*trck') - >>> total_cscd_map = outputs.combine_re('.*cscd') - - Get a MapSet with both of the above maps in it (and a single command) - - >>> total_pid_maps = outputs.combine_re(['.*trck', '.*cscd']) - - Strict name-checking, combine nue_cc + nuebar_cc, including both - cascades and tracks. - - >>> nue_cc_nuebar_cc_map = outputs.combine_re( - ... '^nue(bar){0,1}_cc_(cscd|trck)$') - - Lenient nue_cc + nuebar_cc including both cascades and tracks. - - >>> nue_cc_nuebar_cc_map = outputs.combine_re('nue.*_cc_.*') - - Total of all maps - - >>> total = outputs.combine_re('.*') - - See Also - -------- - combine_wildcard - Similar method but using wildcards (i.e., globbing, like filename - matching in the Unix shell) - - References - ---------- - re : Python module used for parsing regular expressions - https://docs.python.org/2/library/re.html - - """ - is_scalar = False - if isinstance(regexes, string_types) or hasattr(regexes, 'pattern'): - is_scalar = True - regexes = [regexes] - - resulting_maps = [] - for regex in regexes: - if hasattr(regex, 'pattern'): - pattern = regex.pattern - else: - pattern = regex - maps_to_combine = [] - names_to_combine = [] - for m in self: - name = m.name - if re.match(regex, name) is not None: - logging.debug('Map "%s" will be added...', name) - maps_to_combine.append(m) - names_to_combine.append(name) - if len(maps_to_combine) == 0: - raise ValueError('No map names match `regex` "%s"' % pattern) - if len(maps_to_combine) > 1: - m = reduce(add, maps_to_combine) - try: - nufig = NuFlavIntGroup(names_to_combine) - new_name = make_valid_python_name(str(nufig)) - new_tex = nufig.tex - except: - # Reasonable name for giving user an idea of what the map - # represents - new_name = make_valid_python_name(regex) - new_tex = None - if new_name == '': - new_name = 'combined' - m.name = new_name - m.tex = new_tex - else: - m = copy(maps_to_combine[0]) - resulting_maps.append(m) - - if is_scalar: - combined = resulting_maps[0] - else: - combined = MapSet(maps=resulting_maps, - name=self.name, - tex=self.tex, - collate_by_name=self.collate_by_name) - return combined - - def combine_wildcard(self, expressions): - """For each expression passed, add together contained maps whose names - match. - - Expressions can contain wildcards like those used in the Unix shell. - - Valid wildcards (from fnmatch docs, link below): - "*" : matches everything - "?" : mateches any single character - "[`seq`]" : matches any character in `seq` - "[!`seq`]" : matches any character not in `seq` - - Note that if a string is passed, the matching maps are combined and - returned as a Map object. If an iterable of strings is passed, each - grouping found is combined into a Map separately and the resulting Maps - are populated into a new MapSet to be returned. - - Parameters - ---------- - expressions : string or sequence thereof - See Python module `fnmatch` for more info. - - Returns - ------- - combined - Map if `expressions` is a string; MapSet if `expressions` is an - iterable of one or more strings - - Raises - ------ - ValueError - If any `expressions` fail to match any map names. - - Examples - -------- - >>> total_trck_map = outputs.combine_wildcard('*trck') - >>> total_cscd_map = outputs.combine_wildcard('*cscd') - >>> total_pid_maps = outpubs.combine_wildcard(['*trck', '*cscd']) - >>> nue_cc_nuebar_cc_map = outputs.combine_wildcard('nue*_cc_*') - >>> total = outputs.combine_wildcard('*') - - See Also - -------- - combine_re : similar method but using regular expressions - - References - ---------- - fnmatch : Python module used for parsing the expression with wildcards - https://docs.python.org/2/library/fnmatch.html - - """ - is_scalar = False - if isinstance(expressions, string_types): - is_scalar = True - expressions = [expressions] - - resulting_maps = [] - for expr in expressions: - maps_to_combine = [] - names_to_combine = [] - for mapnum, m in enumerate(self): - name = m.name - if fnmatch(name, expr): - logging.debug('Map %d, "%s", will be added...', - mapnum, name) - maps_to_combine.append(m) - names_to_combine.append(name) - if len(maps_to_combine) == 0: - raise ValueError('No map names match `expr` "%s"' % expr) - if len(maps_to_combine) > 1: - m = reduce(add, maps_to_combine) - try: - nufig = NuFlavIntGroup(names_to_combine) - new_name = make_valid_python_name(str(nufig)) - new_tex = nufig.tex - except: - # Reasonable name for giving user an idea of what the map - # represents - new_name = make_valid_python_name(expr) - new_tex = None - if new_name == '': - new_name = 'combined' - m.name = new_name - m.tex = new_tex - else: - m = copy(maps_to_combine[0]) - resulting_maps.append(m) - - if is_scalar: - combined = resulting_maps[0] - else: - combined = MapSet(maps=resulting_maps, - name=self.name, - tex=self.tex, - collate_by_name=self.collate_by_name) - return combined - - def compare(self, ref): - """Compare maps in this MapSet against a reference MapSet. - - Parameters - ---------- - ref : MapSet - Maps taken as the reference against which to compare maps - contained within this MapSet. - - Returns - ------- - stats : OrderedDict - Each key is the name of a map, and each value is istelf an - OrderedDict as returned by the `Map.compare` method - - Examples - -------- - >>> stats = map_set_test.compare(map_set_ref) - - """ - assert isinstance(ref, MapSet) and len(self) == len(ref) - rslt = OrderedDict() - for m, r in zip(self, ref): - out = m.compare(r) - rslt[m.name] = out - return rslt - - def __eq__(self, other): - return recursiveEquality(self.hashable_state, other.hashable_state) - - def __deepcopy__(self, memo): - return MapSet([deepcopy(m, memo) for m in self], - name=self.name, tex=self.tex, hash=self.hash, - collate_by_name=self.collate_by_num) - @property - def name(self): - """string : name of the map (legal Python name)""" - return super().__getattribute__('_name') - - @name.setter - def name(self, name): - """string : name of the map (legal Python name)""" - return super().__setattr__('_name', name) - - @property - def hash(self): - """Hash value of the map set is based upon the contained maps. - * If all maps have the same hash value, this value is returned as - the map set's hash - * If one or more maps have different hash values, a list of the - contained maps' hash values is hashed - * If any contained map has None for hash value, the hash value of - the map set is also None (i.e., invalid) - - """ - hashes = self.hashes - if all([(h is not None and h == hashes[0]) for h in hashes]): - return hashes[0] - if all([(h is not None) for h in hashes]): - return hash_obj(hashes) - return None - - @hash.setter - def hash(self, val): - """Setting a hash to `val` for the map set sets the hash values of all - contained maps to `val`.""" - if val is not None: - for m in self: - setattr(m, 'hash', val) - - @property - def names(self): - """list of strings : name of each map""" - return [mp.name for mp in self] - - @property - def hashes(self): - """list of int : hash of each map""" - return [mp.hash for mp in self] - - def hash_maps(self, map_names=None): - """Generate a hash on the contained maps (i.e. exclude state pertaining - only to the MapSet itself, but include all state pertaining to the - contained Maps). - - Parameters - ---------- - map_names : None or sequence of strings - If sequence of strings, use these as the map names instead of any - names contained. - - Returns - ------- - hash : None or int - If any contained map hashes to None, the resulting hash will also - be None. - - """ - if map_names is None: - map_names = [m.name for m in self] - hashes = [m.hash for m in self if m.name in map_names] - if all([(h != None) for h in hashes]): - return hash_obj(hashes) - return None - - def collate_with_names(self, vals): - ret_dict = OrderedDict() - for name, val in zip(self.names, vals): - setitem(ret_dict, name, val) - return ret_dict - - def find_map(self, value): - idx = None - if isinstance(value, Map): - pass - elif isinstance(value, string_types): - try: - idx = self.names.index(value) - except ValueError: - pass - if idx is None: - raise ValueError('Could not find map name "%s" among maps %s' - % (value, self.names)) - return self[idx] - - def plot(self, *args, **kwargs): - for m in self.maps: - m.plot(*args, **kwargs) - - def apply_to_maps(self, attr, *args, **kwargs): - if len(kwargs) != 0: - raise NotImplementedError('Keyword arguments are not handled') - if hasattr(attr, '__name__'): - attrname = attr.__name__ - else: - attrname = attr - do_not_have_attr = np.array([(not hasattr(mp, attrname)) - for mp in self.maps]) - if np.any(do_not_have_attr): - missing_in_names = ', '.join( - np.array(self.names)[do_not_have_attr] - ) - num_missing = np.sum(do_not_have_attr) - num_total = len(do_not_have_attr) - raise AttributeError( - 'Maps %s (%d of %d maps in set) do not have attribute "%s"' - % (missing_in_names, num_missing, num_total, attrname) - ) - - # Retrieve the corresponding callables from contained maps - val_per_map = [getattr(mp, attr) for mp in self] - - if not all([hasattr(meth, '__call__') for meth in val_per_map]): - # If all results are maps, populate a new map set & return that - if all([isinstance(r, Map) for r in val_per_map]): - return MapSet(maps=val_per_map, name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - # Otherwise put in an ordered dict with : pairs ordered - # according to the map ordering in this map set - return self.collate_with_names(val_per_map) - - # Rename for clarity - method_per_map = val_per_map - - # Create a set of args for *each* map in this map set: If an arg is a - # MapSet, convert that arg into the map in that set corresponding to - # the same map in this set. - args_per_map = [] - for map_num, mp in enumerate(self): - map_name = mp.name - this_map_args = [] - for arg in args: - if (np.isscalar(arg) or - type(arg) is uncertainties.core.Variable or - isinstance(arg, (string_types, np.ndarray))): - this_map_args.append(arg) - elif isinstance(arg, MapSet): - if self.collate_by_name: - this_map_args.append(arg[map_name]) - elif self.collate_by_num: - this_map_args.append(arg[map_num]) - - # TODO: test to make sure this works for e.g. metric_per_map - elif isinstance(arg, Iterable): - list_arg = [] - for item in arg: - if isinstance(item, MapSet): - if self.collate_by_name: - list_arg.append(item[map_name]) - elif self.collate_by_num: - list_arg.append(item[map_num]) - this_map_args.append(list_arg) - else: - raise TypeError('Unhandled arg %s / type %s' - % (arg, type(arg))) - args_per_map.append(this_map_args) - - # Make the method calls and collect returned values - returned_vals = [meth(*args) - for meth, args in zip(method_per_map, args_per_map)] - - # If all results are maps, put them into a new map set & return - if all([isinstance(r, Map) for r in returned_vals]): - return MapSet(maps=returned_vals, name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - # If None returned by all, return a single None - if all([(r is None) for r in returned_vals]): - return None - - # Otherwise put into an ordered dict with name: val pairs - return self.collate_with_names(returned_vals) - - def __contains__(self, name): - return name in [m.name for m in self] - - #def __setattr__(self, attr, val): - # print('__setattr__ being accessed, attr = %s, val = %s' %(attr, val)) - # if attr in MapSet.__slots: - # print('attr "%s" found in MapSet.slots.' %attr) - # object.__setattr__(self, attr, val) - # else: - # returned_vals = [setattr(mp, attr, val) for mp in self] - # if all([(r is None) for r in returned_vals]): - # return - # return self.collate_with_names(returned_vals) - - def __getattr__(self, attr): - if attr in [m.name for m in self]: - return self[attr] - return self.apply_to_maps(attr) - - def __iter__(self): - return iter(self.maps) - - def __len__(self): - return len(self.maps) - - def __getitem__(self, item): - """Retrieve a map by name or retrieve maps' histogram values by index - or slice. - - If `item` is a string, retrieve map by name. - If `item is an integer or one-dim slice, retrieve maps by index/slice - If `item` is length-2 tuple or two-dim slice, retrieve value(s) of all - contained maps, each indexed by map[`item`]. The output is returned - in an ordered dict with format {: , ...} - - """ - if isinstance(item, string_types): - return self.find_map(item) - - if isinstance(item, (int, slice)): - rslt = self.maps[item] - if hasattr(rslt, '__len__') and len(rslt) > 1: - return MapSet(maps=rslt, name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - return rslt - - if isinstance(item, Iterable): - if not isinstance(item, Sequence): - item = list(item) - - if len(item) == 1: - return self.maps[item] - - if len(item) == 2: - return MapSet(maps=[getitem(m, item) for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - raise IndexError('too many indices for 2D hist') - - raise TypeError('getitem does not support `item` of type %s' - % type(item)) - - def __abs__(self): - return self.apply_to_maps('__abs__') - - def __add__(self, val): - return self.apply_to_maps('__add__', val) - - def __truediv__(self, val): - return self.apply_to_maps('__truediv__', val) - - def __div__(self, val): - return self.apply_to_maps('__div__', val) - - def log(self): - return self.apply_to_maps('log') - - def log10(self): - return self.apply_to_maps('log10') - - def __mul__(self, val): - return self.apply_to_maps('__mul__', val) - - def __neg__(self): - return self.apply_to_maps('__neg__') - - def __pow__(self, val): - return self.apply_to_maps('__pow__', val) - - def __radd__(self, val): - return self.apply_to_maps('__radd__', val) - - def __rdiv__(self, val): - return self.apply_to_maps('__rdiv__', val) - - def __rmul__(self, val): - return self.apply_to_maps('__rmul__', val) - - def __rsub__(self, val): - return self.apply_to_maps('__rsub__', val) - - def sqrt(self): - return self.apply_to_maps('sqrt') - - def __sub__(self, val): - return self.apply_to_maps('__sub__', val) - - def sum(self, *args, **kwargs): - return MapSet(maps=[m.sum(*args, **kwargs) for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - def project(self, axis, keepdims=False): - """Per-map projections onto single axis. See Map.project for more - detailed help. - - Parameters - ---------- - axis : string or int - keepdims : bool - - Returns - ------- - projection : MapSet - Each map in this MapSet projected onto `axis`. - - See Also - -------- - sum - Sum over specified dimension(s) - - Map.project - Method called for each map in this MapSet to perform the actual - projection. - - """ - return MapSet(maps=[m.project(axis=axis, keepdims=keepdims) - for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - def reorder_dimensions(self, order): - """Return a new MapSet object with dimensions ordered - according to `order`. - - Parameters - ---------- - order : MultiDimBinning or sequence of string, int, or OneDimBinning - Order of dimensions to use. Strings are interpreted as dimension - basenames, integers are interpreted as dimension indices, and - OneDimBinning objects are interpreted by their `basename` - attributes (so e.g. the exact binnings in `order` do not have to - match this object's exact binnings; only their basenames). Note - that a MultiDimBinning object is a valid sequence type to use for - `order`. - - Notes - ----- - Dimensions specified in `order` that are not in this object are - ignored, but dimensions in this object that are missing in `order` - result in an error. - - Returns - ------- - MapSet object with reordred dimensions. - - Raises - ------ - ValueError if dimensions present in this object are missing from - `order`. - - """ - return MapSet(maps=[m.reorder_dimensions(order=order) for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - def squeeze(self): - """Remove any singleton dimensions (i.e. that have only a single bin) - from all contained maps. Analagous to `numpy.squeeze`. - - Returns - ------- - MapSet with equivalent values but singleton Map dimensions removed - - """ - return MapSet(maps=[m.squeeze() for m in self], name=self.name, - tex=self.tex, collate_by_name=self.collate_by_name) - - def rebin(self, *args, **kwargs): - return MapSet(maps=[m.rebin(*args, **kwargs) for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - def downsample(self, *args, **kwargs): - return MapSet(maps=[m.downsample(*args, **kwargs) for m in self], - name=self.name, tex=self.tex, - collate_by_name=self.collate_by_name) - - def metric_per_map(self, expected_values, metric): - if isinstance(metric, string_types): - metric = metric.lower() - if 'binned_' in metric: - metric = metric.replace('binned_', '') - binned = True - else: - binned = False - if metric in stats.ALL_METRICS: - return self.apply_to_maps(metric, expected_values, binned) - else: - raise ValueError('`metric` "%s" not recognized; use one of %s.' - % (metric, stats.ALL_METRICS)) - - def metric_total(self, expected_values, metric, metric_kwargs=None): - '''Compute the binned optimization metric on all maps of a mapset, - then sum it up. - - metric_kwargs allows to pass extra arguments to the metric, like - the number of empty bins for the generalized poisson llh - (Not yet implemented for Mapset) - ''' - return np.sum(list(self.metric_per_map(expected_values, metric).values())) - - def chi2_per_map(self, expected_values): - return self.apply_to_maps('chi2', expected_values) - - def chi2_total(self, expected_values): - return np.sum(self.chi2_per_map(expected_values)) - - def fluctuate(self, method, random_state=None, jumpahead=None): - """Add fluctuations to the maps in the set and return as a new MapSet. - - Parameters - ---------- - method : None or string - random_state : None, numpy.random.RandomState, or seed spec - - """ - random_state = get_random_state(random_state=random_state, - jumpahead=jumpahead) - new_maps = [m.fluctuate(method=method, random_state=random_state) - for m in self] - return MapSet(maps=new_maps, name=self.name, tex=self.tex, hash=None, - collate_by_name=self.collate_by_name) - - def llh_per_map(self, expected_values): - return self.apply_to_maps('llh', expected_values) - - def llh_total(self, expected_values): - return np.sum(self.llh(expected_values)) - - def set_poisson_errors(self): - return self.apply_to_maps('set_poisson_errors') - - def allclose(self, other): - '''Check if this mapset and another have the same (within machine precision) bin counts''' - return np.all( list(self.apply_to_maps('allclose', other).values()) ) - -## Now dynamically add all methods from Map to MapSet that don't already exist -## in MapSet (and make these methods distribute to contained maps) -##for method_name, method in sorted(Map.__dict__.items()): -#add_methods = '''__abs__ __add__ __div__ __mul__ __neg__ __pow__ __radd__ -#__rdiv__ __rmul__ __rsub__ __sub__'''.split() -# -#for method_name in add_methods: -# #if not hasattr(method, '__call__') or method_name in MapSet.__dict__: -# # continue -# disallowed = ('__getattr__', '__setattr__', '__getattribute__', -# '__getitem__', '__eq__', '__ne__', '__str__', '__repr__') -# if method_name in disallowed: -# continue -# print('adding method "%s" to MapSet as an apply func' % method_name) -# arg_str = ', *args' # if len(args) > 0 else '' -# eval(('def {method_name}(self{arg_str}):\n' -# ' return self.apply_to_maps({method_name}{arg_str})') -# .format(method_name=method_name, arg_str=arg_str)) -# #f.__doc__ = 'Apply method %s to all contained maps' % method_name -# #method = getattr(Map, method_name) -# #if method.__doc__: -# # f.__doc__ += '... ' + method.__doc__ -# setattr(MapSet, method_name, MethodType(eval(method_name), None, MapSet)) - - -# TODO: add tests for llh, chi2 methods -def test_Map(): - """Unit tests for Map class""" - import pickle - n_ebins = 10 - n_czbins = 5 - n_azbins = 2 - e_binning = OneDimBinning(name='energy', tex=r'E_\nu', num_bins=n_ebins, - domain=(1, 80)*ureg.GeV, is_log=True) - cz_binning = OneDimBinning(name='coszen', tex=r'\cos\,\theta', - num_bins=n_czbins, domain=(-1, 0), is_lin=True) - az_binning = OneDimBinning(name='azimuth', tex=r'\phi', - num_bins=n_azbins, domain=(0, 2*np.pi), - is_lin=True) - # set directly unumpy array with errors - shape = (e_binning * cz_binning).shape - m1 = Map(name='x', - hist=unp.uarray(np.ones(shape), np.sqrt(np.ones(shape))), - binning=(e_binning, cz_binning)) - # or call init poisson error afterwards - m1 = Map(name='x', hist=np.ones((n_ebins, n_czbins)), hash=23, - binning=(e_binning, cz_binning)) - - # Test rebin - _ = m1.rebin(m1.binning.downsample(2, 5)) - m_rebinned = m1.rebin(m1.binning.downsample(n_ebins, n_czbins)) - assert m_rebinned.hist[0, 0] == np.sum(m1.hist) - - # Test fluctuate - _ = m1.fluctuate(method="poisson") # just ensure that None random_state is handled - m1_seed0 = m1.fluctuate(method="poisson", random_state=0) - m1_seed1 = m1.fluctuate(method="poisson", random_state=1) - m1_seed0_reprod = m1.fluctuate(method="poisson", random_state=0) - for m in [m1_seed0, m1_seed1, m1_seed0_reprod]: - # The full comparison has to be ON for all maps, otherwise we would only - # compare the hash value, which doesn't change when maps are fluctuated. - # Because the value of full_comparison is included in the comparison, two - # maps will not be considered equal if only one of them has - # `full_comparison=True`. - # TODO: How does this make sense? - m.full_comparison = True - logging.debug("Fluctuated map with seed 0:") - logging.debug(m1_seed0) - logging.debug("Fluctuated map with seed 1:") - logging.debug(m1_seed1) - logging.debug("Fluctuated map with seed 0, reproduced:") - logging.debug(m1_seed0_reprod) - - assert m1_seed0 == m1_seed0_reprod - assert not (m1_seed0 == m1_seed1) - - # Test sum() - m1 = Map( - name='x', - hist=np.arange(0, n_ebins*n_czbins).reshape((n_ebins, n_czbins)), - binning=(e_binning, cz_binning) - ) - s1 = m1.sum('energy', keepdims=True) - assert np.all(s1.hist == np.array([[225, 235, 245, 255, 265]])) - assert s1.shape == (1, 5) - assert 'energy' in s1.binning - assert 'coszen' in s1.binning - s2 = m1.sum('energy', keepdims=False) - assert np.all(s2.hist == np.array([225, 235, 245, 255, 265])) - assert s2.shape == (5,) - assert 'energy' not in s2.binning - assert 'coszen' in s2.binning - - m1 = Map(name='x', hist=np.ones((n_ebins, n_czbins)), hash=23, - binning=(e_binning, cz_binning)) - logging.debug(str(("downsampling ====================="))) - m2 = m1 * 2 - logging.debug(str((m2.downsample(1)))) - logging.debug(str((m2.downsample(5)))) - logging.debug(str((m2.downsample(1, 1)))) - logging.debug(str((m2.downsample(1, 5)))) - logging.debug(str((m2.downsample(5, 5)))) - logging.debug(str((m2.downsample(10, 5)))) - logging.debug(str((m2.downsample(10, 5).binning))) - logging.debug(str(("===================== downsampling"))) - - assert m1.hash == 23 - m1.hash = 42 - assert m1.hash == 42 - m1.set_poisson_errors() - # or no errors at all - m2 = Map(name='y', hist=2*np.ones((n_ebins, n_czbins)), - binning=(e_binning, cz_binning)) - m3 = Map(name='z', hist=4*np.ones((n_ebins, n_czbins, n_azbins)), - binning=(e_binning, cz_binning, az_binning)) - - assert m3[0, 0, 0] == 4, 'm3[0, 0, 0] = %s' % m3[0, 0, 0] - testdir = tempfile.mkdtemp() - try: - for m in [m1, m2, m1+m2, m1-m2, m1/m2, m1*m2]: - m_file = os.path.join(testdir, m.name + '.json') - m.to_json(m_file, warn=False) - m_ = Map.from_json(m_file) - assert m_ == m, 'm=\n%s\nm_=\n%s' % (m, m_) - jsons.to_json(m, m_file, warn=False) - m_ = Map.from_json(m_file) - assert m_ == m, 'm=\n%s\nm_=\n%s' % (m, m_) - # Had bug where datastruct containing MapSet failed to be saved. - # Test tuple containing list containing OrderedDict containing - # Map here. - struct = ([OrderedDict(map=m)],) - jsons.to_json(struct, m_file, warn=False) - loaded = jsons.from_json(m_file) - m_ = Map(**loaded[0][0]['map']) - assert m_ == m - # Now try with pickle - m_file = os.path.join(testdir, m.name + '.pkl') - pickle.dump(struct, open(m_file, 'wb'), - protocol=pickle.HIGHEST_PROTOCOL) - loaded = pickle.load(open(m_file, 'rb')) - m_ = loaded[0][0]['map'] - assert m_ == m - finally: - shutil.rmtree(testdir, ignore_errors=True) - - logging.debug(str((m1, m1.binning))) - logging.debug(str((m2, m2.binning))) - logging.debug(str((m1.nominal_values))) - logging.debug(str((m1.std_devs))) - r = m1 + m2 - # compare only nominal val - assert r == 3 - logging.debug(str((r))) - logging.debug(str(('m1+m2=3:', r, r[0, 0]))) - r = m2 + m1 - # or compare including errors - assert r == ufloat(3, 1) - logging.debug(str(('m2+m1=3:', r, r[0, 0]))) - r = 2*m1 - assert r == ufloat(2, 2), str(r.hist) - logging.debug(str(('2*m1=2:', r, r[0, 0]))) - r = (2*m1 + 8) / m2 - logging.debug(str(('(2*(1+/-1) + 8) / 2:', r, r[0, 0]))) - assert r == ufloat(5, 1), str(r.hist) - logging.debug(str(('(2*m1 + 8) / m2=5:', r, r.hist[0, 0]))) - #r[:, 1] = 1 - #r[2, :] = 2 - logging.debug(str(('r[0:2, 0:5].hist:', r[0:2, 0:5].hist))) - logging.debug(str(('r[0:2, 0:5].binning:', r[0:2, 0:5].binning))) - r = m1 / m2 - assert r == ufloat(0.5, 0.5) - logging.debug(str((r, '=', r[0, 0]))) - logging.debug(str(([b.binning.energy.midpoints[0] - for b in m1.iterbins()][0:2]))) - - # Test reorder_dimensions - e_binning = OneDimBinning( - name='energy', num_bins=2, is_log=True, domain=[1, 80]*ureg.GeV - ) - cz_binning = OneDimBinning( - name='coszen', num_bins=3, is_lin=True, domain=[-1, 1] - ) - az_binning = OneDimBinning( - name='azimuth', num_bins=4, is_lin=True, - domain=[0, 2*np.pi]*ureg.rad - ) - a = [] - for i in range(len(e_binning)): - b = [] - for j in range(len(cz_binning)): - c = [] - for k in range(len(az_binning)): - c.append(i*100 + j*10 + k) - b.append(c) - a.append(b) - a = np.array(a) - m_orig = Map(name='orig', hist=deepcopy(a), - binning=[e_binning, cz_binning, az_binning]) - m_new = m_orig.reorder_dimensions(['azimuth', 'energy', 'coszen']) - - assert np.alltrue(m_orig[:, 0, 0].hist.flatten() == - m_new[0, :, 0].hist.flatten()) - assert np.alltrue(m_orig[0, :, 0].hist.flatten() == - m_new[0, 0, :].hist.flatten()) - assert np.alltrue(m_orig[0, 0, :].hist.flatten() == - m_new[:, 0, 0].hist.flatten()) - - for dim in m_orig.binning.names: - assert m_orig[:, 0, 0].binning[dim] == m_new[0, :, 0].binning[dim] - assert m_orig[0, :, 0].binning[dim] == m_new[0, 0, :].binning[dim] - assert m_orig[0, 0, :].binning[dim] == m_new[:, 0, 0].binning[dim] - - deepcopy(m_orig) - - #FIXME: Add unit test for plot function: - # - test 3D *and* 2D case - # - test saving option works - # - test return types - - # start implementing some - # test_return = xx.plot() - # assert test_return[0] == matplotlib.figure.Figure - # assert test_return[1] == matplotlib.axes._subplots.AxesSubplot - # assert test_return[2] == matplotlib.collections.QuadMesh - # assert test_return[3] == matplotlib.colorbar.Colorbar - - logging.info(str(('<< PASS : test_Map >>'))) - - -# TODO: add tests for llh, chi2 methods -# TODO: make tests use assert rather than rely on logging.debug(str((!))) -def test_MapSet(): - """Unit tests for MapSet class""" - import pickle - n_ebins = 6 - n_czbins = 3 - e_binning = OneDimBinning(name='energy', tex=r'E_\nu', num_bins=n_ebins, - domain=(1, 80)*ureg.GeV, is_log=True) - cz_binning = OneDimBinning(name='coszen', tex=r'\cos\,\theta', - num_bins=n_czbins, domain=(-1, 0), is_lin=True) - binning = MultiDimBinning([e_binning, cz_binning]) - m1 = Map(name='ones', hist=np.ones(binning.shape), binning=binning, - hash='xyz') - m1.set_poisson_errors() - m2 = Map(name='twos', hist=2*np.ones(binning.shape), binning=binning, - hash='xyz') - ms01 = MapSet([m1, m2]) - - # Test fluctuate - _ = ms01.fluctuate(method="poisson") # just ensure that None random_state is handled - ms01_seed0 = ms01.fluctuate(method="poisson", random_state=0) - ms01_seed1 = ms01.fluctuate(method="poisson", random_state=1) - ms01_seed0_reprod = ms01.fluctuate(method="poisson", random_state=0) - logging.debug("Fluctuated map set with seed 0:") - logging.debug(ms01_seed0) - logging.debug("Fluctuated map set with seed 1:") - logging.debug(ms01_seed1) - logging.debug("Fluctuated map set with seed 0, reproduced:") - logging.debug(ms01_seed0_reprod) - - assert ms01_seed0 == ms01_seed0_reprod - assert not (ms01_seed0 == ms01_seed1) - - # Test rebin - _ = ms01.rebin(m1.binning.downsample(3)) - ms01_rebinned = ms01.rebin(m1.binning.downsample(6, 3)) - for m_orig, m_rebinned in zip(ms01, ms01_rebinned): - assert m_rebinned.hist[0, 0] == np.sum(m_orig.hist) - - logging.debug(str(("downsampling ====================="))) - logging.debug(str((ms01.downsample(3)))) - logging.debug(str(("===================== downsampling"))) - ms01 = MapSet((m1, m2), name='ms01') - ms02 = MapSet((m1, m2), name='map set 1') - ms1 = MapSet(maps=(m1, m2), name='map set 1', collate_by_name=True, - hash=None) - assert np.all(ms1.combine_re(r'.*').hist == ms1.combine_wildcard('*').hist) - assert np.all(ms1.combine_re(r'.*').hist == (ms1.ones + ms1.twos).hist) - assert np.all(ms1.combine_re(r'^(one|two)s.*$').hist == - ms1.combine_wildcard('*s').hist) - assert np.all(ms1.combine_re(r'^(one|two)s.*$').hist == (ms1.ones + - ms1.twos).hist) - logging.debug(str((ms1.combine_re(r'^o').hist))) - logging.debug(str((ms1.combine_wildcard(r'o*').hist))) - logging.debug(str((ms1.combine_re(r'^o').hist - - ms1.combine_wildcard(r'o*').hist))) - logging.debug(str(('map sets equal after combining?', - ms1.combine_re(r'^o') == ms1.combine_wildcard(r'o*')))) - logging.debug(str(('hist equal after combining?', - np.all(ms1.combine_re(r'^o').hist == - ms1.combine_wildcard(r'o*').hist)))) - assert np.all(ms1.combine_re(r'^o.*').nominal_values - == ms1.combine_wildcard('o*').nominal_values), \ - '%s\n%s' % (ms1.combine_re(r'^o.*'), ms1.combine_wildcard('o*')) - logging.debug(str(('5', ms1.names))) - assert np.all(ms1.combine_re(r'^o').nominal_values == ms1.ones.nominal_values) - assert np.all(ms1.combine_wildcard(r'o*').nominal_values == ms1.ones.nominal_values) - logging.debug(str(('6', ms1.names))) - try: - ms1.combine_re('three') - except ValueError: - pass - else: - assert False - try: - ms1.combine_wildcard('three') - except ValueError: - pass - else: - assert False - - assert ms1.hash == 'xyz' - assert ms1.name == 'map set 1' - ms1.hash = 10 - assert ms1.hash == 10 - assert m1.hash == 10 - assert m2.hash == 10 - ms1.hash = -10 - assert ms1.hash == -10 - # "Remove" the hash from the MapSet... - ms1.hash = None - # ... but this should not remove hashes from the contained maps - assert m1.hash == -10 - # ... and hashing on the MapSet should see that all contained maps have the - # SAME hash val, and so should just return the hash value shared among them - # all - assert ms1.hash == -10 - # However changing a single map's hash means not all hashes are the same - # for all maps... - m1.hash = 40 - # ... so a hash should be computed from all contained hashes - assert ms1.hash != 40 and ms1.hash != -10 - - assert ms1.maps == [m1, m2] - assert ms1.names == ['ones', 'twos'] - assert ms1.tex is None - # Check the Poisson errors - assert np.all(ms1[0].nominal_values == np.ones(binning.shape)) - assert np.all(ms1[0].std_devs == np.ones(binning.shape)) - assert np.all(ms1[1].hist == 2*np.ones(binning.shape)) - logging.debug(str(('ms1[0:2].hist:', ms1[0:2].hist))) - logging.debug(str(('ms1[0:2, 0:2].hist:', ms1[0:2, 0:2].hist))) - assert np.all(ms1.apply_to_maps('__add__', 1).ones == 2) - - m1 = Map(name='threes', hist=3*np.ones((n_ebins, n_czbins)), - binning=binning) - m2 = Map(name='fours', hist=4*np.ones((n_ebins, n_czbins)), binning=binning) - ms2 = MapSet(maps=(m1, m2), name='map set 2', collate_by_name=False) - - try: - logging.debug(str((ms1.__add__(ms2)))) - except ValueError: - pass - else: - raise Exception('Should have errored out!') - - m1 = Map(name='fives', hist=5*np.ones((n_ebins, n_czbins)), - binning=binning) - m2 = Map(name='sixes', hist=6*np.ones((n_ebins, n_czbins)), - binning=binning) - ms3 = MapSet(maps=(m1, m2), name='map set 3', collate_by_name=False) - ms4 = MapSet(maps=(m1, m2), name='map set 3', collate_by_name=False) - assert ms3 == ms4 - - logging.debug(str(('ms2.maps:', ms2.maps))) - logging.debug(str(("(ms2 + ms3).names", (ms2 + ms3).names))) - logging.debug(str(("(ms2 + ms3)[0, 0].hist", (ms2 + ms3)[0, 0].hist))) - logging.debug(str(("ms1['ones'][0, 0]:", ms1['ones'][0, 0]))) - logging.debug(str(('ms1.__mul__(2)[0, 0]:', ms1.__mul__(2)[0, 0]))) - logging.debug(str(('(ms1 * 2)[0, 0]:', (ms1 * 2)[0, 0]))) - logging.debug(str(('ms1.__add__(ms1)[0, 0]:', ms1.__add__(ms1)[0, 0]))) - logging.debug(str(('(ms1 + ms1)[0, 0]:', (ms1 + ms1)[0, 0]))) - logging.debug(str((ms1.names))) - logging.debug(str(('(ms1/ ms1)[0, 0]:', (ms1 / ms1)[0, 0]))) - logging.debug(str(('(ms1/ms1 - 1)[0, 0]:', (ms1/ms1 - 1)[0, 0]))) - #logging.debug(str(("ms1.log10()['ones']:", ms1.log10()['ones']))) - #logging.debug(str(("ms1.log10()[0, 0]['ones']:", - # ms1.log10()[0, 0]['ones']))) - #logging.debug(str(('np.log10(ms1):', np.log10(ms1)))) - logging.debug(str(('(ms1 * np.e).binning:', (ms1 * np.e).binning))) - #logging.debug(str(('np.log(ms1 * np.e)[0][0, 0]:', - # (np.log(ms1 * np.e))[0][0, 0]))) - #logging.debug(str(('np.sqrt(ms1)[0][0:4, 0:2].hist:', - # np.sqrt(ms1)[0][0:4, 0:2].hist))) - logging.debug(str(('str(ms1)', str(ms1)))) - logging.debug(str(('str(ms4)', str(ms4)))) - logging.debug(str(('ms3', ms3))) - logging.debug(str(('ms4', ms4))) - - testdir = tempfile.mkdtemp() - try: - for ms in [ms01, ms02, ms1, ms2, ms3, ms4]: - ms_file = os.path.join(testdir, ms.name + '.json') - ms.to_json(ms_file, warn=False) - ms_ = MapSet.from_json(ms_file) - assert ms_ == ms, 'ms=\n%s\nms_=\n%s' % (ms, ms_) - jsons.to_json(ms, ms_file, warn=False) - ms_ = MapSet.from_json(ms_file) - assert ms_ == ms, 'ms=\n%s\nms_=\n%s' % (ms, ms_) - - # Had bug where datastruct containing MapSet failed to be saved. - # Test tuple containing list containing OrderedDict containing - # MapSet. - struct = ([OrderedDict(mapset=ms)],) - jsons.to_json(struct, ms_file, warn=False) - loaded = jsons.from_json(ms_file) - ms_ = MapSet(**loaded[0][0]['mapset']) - assert ms_ == ms - - # Now try with pickle - ms_file = os.path.join(testdir, ms.name + '.pkl') - pickle.dump(struct, open(ms_file, 'wb'), - protocol=pickle.HIGHEST_PROTOCOL) - loaded = pickle.load(open(ms_file, 'rb')) - ms_ = loaded[0][0]['mapset'] - assert ms_ == ms - - finally: - shutil.rmtree(testdir, ignore_errors=True) - - ms_copy = deepcopy(ms01) - assert ms_copy == ms01 - ms01 += 1. - # make sure that the copy is indeed decoupled from the original - assert not (ms_copy == ms01) - - # Test reorder_dimensions (this just tests that it succeeds on the map set; - # correctness of the reordering is tested in the unit test for Map) - for ms in [ms01, ms02, ms1, ms2, ms3, ms4]: - for p in permutations(ms[0].binning.dimensions): - ms.reorder_dimensions(p) - - logging.info('<< PASS : test_MapSet >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_Map() - test_MapSet() diff --git a/pisa/core/param.py b/pisa/core/param.py deleted file mode 100644 index cc89fde10..000000000 --- a/pisa/core/param.py +++ /dev/null @@ -1,2346 +0,0 @@ -""" -Define Param, ParamSet, and ParamSelector classes for handling parameters, sets -of parameters, and being able to discretely switch between sets of parameter -values. -""" - - -from __future__ import absolute_import, division - -from collections.abc import Iterable, Mapping, MutableSequence, Set, Sequence -from collections import OrderedDict -from copy import deepcopy -from functools import total_ordering -from operator import setitem -from os.path import join -from shutil import rmtree -import sys -from tabulate import tabulate -import tempfile - -import numpy as np -import pint -from six import string_types - -from pisa import ureg -from pisa.core.prior import Prior -from pisa.utils import callable -from pisa.utils import jsons -from pisa.utils.comparisons import ( - interpret_quantity, isbarenumeric, normQuant, recursiveEquality -) -from pisa.utils.hash import hash_obj -from pisa.utils.log import logging, set_verbosity -from pisa.utils.random_numbers import get_random_state -from pisa.utils.stats import ALL_METRICS, CHI2_METRICS, LLH_METRICS -from pisa.utils.comparisons import FTYPE_PREC -from pisa.utils.callable import Funct -from pisa.utils.resources import find_resource - -__all__ = [ - 'Param', - 'DerivedParam', - 'ParamSet', - 'ParamSelector', - 'test_Param', - 'test_ParamSet', - 'test_ParamSelector', -] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: Make property "frozen" or "read_only" so params in param set e.g. -# returned by a template maker -- which updating the values of will NOT have -# the effect the user might expect -- will be explicitly forbidden? - -# TODO: units: pass in attached to values, or as separate kwarg? If e.g. -# value hasn't been set yet, then there's no implicit units to reference -# when setting the prior, range, and possibly other things (which all need to -# at least have compatible units) -@total_ordering -class Param: - """Parameter class to store any kind of parameters - - Parameters - ---------- - name : string - - value : scalar, bool, pint Quantity (value with units), string, or None - - prior : pisa.prior.Prior or instantiable thereto - - range : sequence of two scalars or Pint quantities, or None - - is_fixed : bool - - unique_id : string, optional - If None is provided (default), `unique_id` is set to `name` - - is_discrete : bool, optional - Default is False - - scales_as_log : bool, optional - Rescale the log of the parameter's value between 0 and 1 for minimization, - rather than the value itself. This can help optimizing parameters spanning - several orders of magnitude. - - nominal_value : same type as `value`, optional - If None (default), set to same as `value` - - tex : None or string - - help : string - - Notes - ----- - In the case of a free (`is_fixed`=False) parameter, a valid range for the - parameter should be spicfied and a prior must be assigned to compute llh - and chi2 values. - - Examples - -------- - >>> from pisa import ureg - >>> from pisa.core.prior import Prior - >>> gaussian = Prior(kind='gaussian', mean=10*ureg.meter, - ... stddev=1*ureg.meter) - >>> x = Param(name='x', value=1.5*ureg.foot, prior=gaussian, - ... range=[-10, 60]*ureg.foot, is_fixed=False, is_discrete=False) - >>> x.value - - >>> print(x.prior_llh) - -45.532515919999994 - >>> print(x.to('m')) - - >>> x.value = 10*ureg.m - >>> print(x.value) - - >>> x.ito('m') - >>> print(x.value) - - >>> x.prior_llh - -1.5777218104420236e-30 - >>> p.nominal_value - - >>> x.reset() - >>> print(x.value) - - - """ - # pylint: disable=protected-access - _slots = ( - 'name', - 'unique_id', - 'value', - 'prior', - '_prior', - 'range', - 'is_fixed', - 'is_discrete', - 'scales_as_log', - 'nominal_value', - 'tex', - '_rescaled_value', - '_nominal_value', - '_tex', - 'help', - '_value', - '_range', - '_units', - 'normalize_values', - ) - _state_attrs = ( - 'name', - 'unique_id', - 'value', - 'prior', - 'range', - 'is_fixed', - 'is_discrete', - 'scales_as_log', - 'nominal_value', - 'tex', - 'help', - ) - - def __init__( - self, - name, - value, - prior, - range, - is_fixed, - unique_id=None, - is_discrete=False, - scales_as_log=False, - nominal_value=None, - tex=None, - help='', - ): # pylint: disable=redefined-builtin - self._range = None - self._tex = None - self._value = None - self._units = None - self._nominal_value = None - self._prior = None - - self.value = value - self.scales_as_log = scales_as_log - self.name = name - self.unique_id = unique_id if unique_id is not None else name - self._tex = tex - self.help = help - self.range = range - self.prior = prior - self.is_fixed = is_fixed - self.is_discrete = is_discrete - self.nominal_value = value if nominal_value is None else nominal_value - self.normalize_values = False - - if self.scales_as_log and range[0].m * range[1].m <= 0: - raise ValueError("A parameter with log-scaling must have a range that is " - "either entirely negative or entirely positive.") - - - def __repr__(self): - return f"{self.name}, value: {self.value}, nominal_value: {self.nominal_value}, range: {self.range}, prior: {self.prior}, is_fixed: {self.is_fixed}" - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - return recursiveEquality(self.state, other.state) - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - return self.name < other.name - - def __setattr__(self, attr, val): - if attr not in self._slots: - raise AttributeError('Invalid attribute: %s' % (attr,)) - object.__setattr__(self, attr, val) - - def __str__(self): - return '%s=%s; prior=%s, range=%s, is_fixed=%s,' \ - ' is_discrete=%s; help="%s"' \ - % (self.name, self.value, self.prior, self.range, - self.is_fixed, self.is_discrete, self.help) - - def validate_value(self, value): - if self.range is not None: - if self.is_discrete: - if value not in self.range: - raise ValueError( - 'Param %s has a value %s which is not in the range of ' - '%s'%(self.name, value, self.range) - ) - else: - value_not_big_enough = value.m_as(self._units) < min(self.range).m_as(self._units) - value_not_small_enough = value.m_as(self._units) > max(self.range).m_as(self._units) - if value_not_big_enough or value_not_small_enough: - raise ValueError( - 'Param %s has a value %s which is not in the range of ' - '%s'%(self.name, value, self.range) - ) - - @property - def value(self): - return self._value - - @value.setter - def value(self, val): - # Strings, bools, and `None` are simply used as-is; otherwise, enforce - # input have units (or default to units of `dimensionless`) - if not (val is None or isinstance(val, (string_types, bool))): - # A number with no units actually has units of "dimensionless" - val = interpret_quantity(val, expect_sequence=False) - - if self._value is not None: - if hasattr(self._value, 'units'): - assert hasattr(val, 'units'), \ - 'Passed values must have units if the param has units' - val = val.to(self._value.units) - self.validate_value(val) - self._value = val - if hasattr(self._value, 'units'): - self._units = self._value.units - else: - self._units = ureg.Unit('dimensionless') - - @property - def magnitude(self): - return self._value.magnitude - - @property - def m(self): # pylint: disable=invalid-name - return self._value.magnitude - - def m_as(self, u): - return self._value.m_as(u) - - @property - def dimensionality(self): - return self._value.dimensionality - - @property - def units(self): - return self._units - - @property - def u(self): # pylint: disable=invalid-name - return self._units - - @property - def range(self): - if self._range is None: - return None - return tuple(self._range) - - @range.setter - def range(self, values): - if values is None: - self._range = None - return - - if len(values) != 2: - raise ValueError( - "Must provide a lower and upper bound; got {} value(s)".format( - len(values) - ) - ) - - if values[1] <= values[0]: - raise ValueError( - "The second value of the range must be strictly larger than the first." - ) - if self.scales_as_log and values[0].m * values[1].m <= 0: - raise ValueError("A parameter with log-scaling must have a range that is " - "either entirely negative or entirely positive.") - - new_vals = [] - for val in values: - val = interpret_quantity(val, expect_sequence=False) - - # NOTE: intentionally using type() instead of isinstance() here. - # Not sure if this could be converted to isinstance(), though. - if not type(val) == type(self.value): # pylint: disable=unidiomatic-typecheck - raise TypeError('Value "%s" has type %s but must be of type' - ' %s.' % (val, type(val), type(self.value))) - - if isinstance(self.value, ureg.Quantity): - if self.dimensionality != val.dimensionality: - raise ValueError('Value "%s" units "%s" incompatible with' - ' units "%s".' - % (val, val.units, self.units)) - - new_vals.append(val) - - self._range = new_vals - - # TODO: make discrete values rescale to integers 0, 1, ... - @property - def _rescaled_value(self): - if self.is_discrete: - return self.value - srange = self.range - if srange is None: - raise ValueError('Cannot rescale without a range specified' - ' for parameter %s' % self) - srange = self.range - srange0 = srange[0].m_as(self._units) - srange1 = srange[1].m_as(self._units) - value = self._value.m_as(self._units) - - if self.scales_as_log: - if srange0 < 0: # entire range assumed negative (asserted elsewhere) - srange0 *= -1 - srange1 *= -1 - value *= -1 - return (np.log(value) - np.log(srange0)) / (np.log(srange1) - np.log(srange0)) - else: - return (value - srange0) / (srange1 - srange0) - - @_rescaled_value.setter - def _rescaled_value(self, rval): - srange = self.range - if srange is None: - raise ValueError('Cannot rescale without a range specified' - ' for parameter %s' % self) - if rval < 0 or rval > 1 + FTYPE_PREC: - raise ValueError( - '%s: `rval`=%.15e, but cannot be outside [0, 1]' - % (self.name, rval) - ) - rval = np.min([1., rval]) # make exactly 1. if rounding error occurred - srange0 = srange[0].m_as(self._units) - srange1 = srange[1].m_as(self._units) - if self.scales_as_log: - # it is possible that the entire value range is negative, taking the - # absolute value only inside log() produces the correct sign - self._value = np.exp(rval*(np.log(np.abs(srange1)) - np.log(np.abs(srange0)))) * srange0 * self._units - else: - self._value = (srange0 + (srange1 - srange0)*rval) * self._units - # In some rare cases (one case being rval = 1., range = (-0.5, 0.3)), a rounding - # error can occur that sets the value outside the allowed range. We clip the - # value back to the range if that happens. - # Using the standard setter method instead of writing to _value so that we - # auto-convert in case the range is defined in different units. - if self.value > max(srange): self.value = max(srange) - if self.value < min(srange): self.value = min(srange) - self.validate_value(self.value) - - @property - def tex(self): - return r'{\rm %s}' % self.name.replace("_", r"\;") if self._tex is None else self._tex - - @property - def nominal_value(self): - return self._nominal_value - - @nominal_value.setter - def nominal_value(self, value): - if not (value is None or isinstance(value, (bool, string_types))): - value = interpret_quantity(value, expect_sequence=False) - self.validate_value(value) - self._nominal_value = value - - @property - def prior(self): - return self._prior - - @prior.setter - def prior(self, value): - if value is None: - prior = value - elif isinstance(value, Prior): - prior = value - elif isinstance(value, Mapping): - prior = Prior(**value) - else: - raise TypeError("Unhandled prior type {}".format(type(value))) - self._prior = prior - - @property - def state(self): - state = OrderedDict() - for attr in self._state_attrs: - val = getattr(self, attr) - if hasattr(val, 'state'): - val = val.state - setitem(state, attr, val) - return state - - @property - def serializable_state(self): - return self.state - - def reset(self): - """Reset the parameter's value to its nominal value.""" - self.value = self.nominal_value - - def set_nominal_to_current_value(self): - """Define the nominal value to the parameter's current value.""" - self.nominal_value = self.value - - def randomize(self, random_state=None): - """Randomize the parameter's value according to a uniform random - distribution within the parameter's defined limits. - - Parameters - ---------- - random_state : None, int, or RandomState - Object to use for random state. None defaults to the global random - state (this is discouraged, as results are not reproducible). An - integer acts as a seed to `numpy.random.seed()`, and RandomState is - a `numpy.random.RandomState` object. - - """ - random = get_random_state(random_state) - rand = random.rand() - self._rescaled_value = rand - - def prior_penalty(self, metric): - """Return the prior penalty according to `metric`. - - Parameters - ---------- - metric : str - Metric to use for evaluating the prior penalty. - - Returns - ------- - penalty : float prior penalty value - - """ - assert isinstance(metric, str) - metric = metric.strip().lower() - if metric not in ALL_METRICS: - raise ValueError('Metric "%s" is invalid; must be one of %s' - %(metric, ALL_METRICS)) - if self.prior is None: - return 0 - if metric in LLH_METRICS: - logging.trace('self.value: %s' %self.value) - logging.trace('self.prior: %s' %self.prior) - return self.prior.llh(self.value) - elif metric in CHI2_METRICS: - return self.prior.chi2(self.value) - else: - raise ValueError('Unrecognized `metric` "%s"' %str(metric)) - - def to(self, units): # pylint: disable=invalid-name - """Return an equivalent copy of param but in units of `units`. - - Parameters - ---------- - units : string or pint.Unit - - Returns - ------- - Param : copy of this param, but in specified `units`. - - See also - -------- - ito - Pint.to - Pint.ito - - """ - new_param = Param(**deepcopy(self.state)) - new_param.ito(units) - return new_param - - def ito(self, units): - """Convert this param (in place) to have units of `units`. - - Parameters - ---------- - units : string or pint.Unit - - Returns - ------- - None - - See also - -------- - to - Pint.to - Pint.ito - - """ - self._value.ito(units) - - @property - def prior_llh(self): - return self.prior_penalty(metric='llh') - - @property - def prior_chi2(self): - return self.prior_penalty(metric='chi2') - - @property - def hash(self): - """int : hash of full state""" - if self.normalize_values: - return hash_obj(normQuant(self.state)) - return hash_obj(self.state) - - def __hash__(self): - return self.hash - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, filename): - """Instantiate a new Param from a JSON file""" - state = jsons.from_json(filename=filename) - return cls(**state) - -class DerivedParam(Param): - """ - This is a meta-parameter param that implements a param depending on other Params. - """ - _slots = ( - 'name', - 'unique_id', - 'value', - 'prior', - '_prior', - 'range', - 'is_fixed', - 'is_discrete', - 'scales_as_log', - 'nominal_value', - 'tex', - '_rescaled_value', - '_nominal_value', - '_tex', - 'help', - '_value', - '_range', - '_units', - 'normalize_values', - '_depends_names', - '_dependson', - '_configured', - '_callable', - 'dependson', - 'callable', - 'depends_names' - ) - - _state_attrs = ( - 'name', - 'unique_id', - 'value', - 'prior', - 'range', - 'is_fixed', - 'is_discrete', - 'scales_as_log', - 'nominal_value', - 'tex', - 'help', - 'dependson', - 'callable', - 'depends_names' - ) - - def __init__(self, - name, - value, - unique_id=None, - is_discrete=False, - scales_as_log=False, - nominal_value=None, - tex=None, - range=None, - depends_names="", - function_file="", - help=''): - - self._depends_names = depends_names - self._dependson = tuple([]) - self._configured = False - self._callable = None - - self._range = None - self._tex = None - self._units = ureg.dimensionless - self._nominal_value = None - self._prior = None - - self.is_fixed=True - self.scales_as_log = scales_as_log - self.name = name - self.range = range - - self.unique_id = unique_id if unique_id is not None else name - self._tex = tex - self.help = help - self.is_discrete = is_discrete - self.nominal_value = value if nominal_value is None else nominal_value - self.normalize_values = False - - if function_file!="": - self.callable = Funct.from_json(find_resource(function_file)) - - @property - def callable(self)->callable.Funct: - if self._callable is None: - logging.fatal("No set callable for DerivedParam {}".format(self.name)) - return self._callable - - @callable.setter - def callable(self, what:'callable.Funct'): - """ - Note - the callable should take dictionary of parameters - { - paramname:Param, - paramname2:Param - } - - the names are in principle redundant, but by keeping the mapping we can make the lookup of the dependable names quicker - """ - self._callable = what - - def validate_value(self, value): - return - - @property - def range(self): - # if this is not re-implemented, the setter gets very confused - if self._range is None: - return None - else: - return tuple(self._range) - - @range.setter - def range(self, values): - """ - trust that this is set accurately - """ - self._range = values - - @property - def depends_names(self): - return self._depends_names - - @depends_names.setter - def depends_names(self, *names): - self._depends_names = names - - @property - def dependson(self)->'dict[Param]': - if not self._configured: - logging.fatal("Cannot access unconfigured Derived parameter!") - return self._dependson - - def prior_penalty(self, metric): - """ - We don't want to double-count the penalty from derived params - """ - return 0.0 - - @dependson.setter - def dependson(self, params): - working = [] - for param in params: - if isinstance(param, Mapping): - param = Param(**param) - if isinstance(param, Param): - working.append(param) - else: - raise TypeError("Unhandled type {}: {}".format(type(param), param)) - self._configured = True - self._dependson = {param.name:param for param in working} - self.depends_names = tuple([param.name for param in working]) - - - @property - def _value(self): - """ - The value of this Derived Parameter is determined by calling the configured 'callable' with the parameters it depends on - """ - return self.callable(**self.dependson)*ureg.dimensionless - - @property - def state(self)->dict: - statekind={ - "callable":self.callable.state, - "depends":self.depends_names, - "range":self._range - } - return statekind - - @property - def serializable_state(self): - return self.state - - @classmethod - def from_state(cls, state)->'DerivedParam': - raise NotImplementedError("") - - def to_json(self, filename, **kwargs): - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - -# TODO: temporary modification of parameters via "with" syntax? -# TODO: union, |, intersection, &, difference, -, symmetric_difference, ^, copy -class ParamSet(MutableSequence, Set): - r"""Container class for a set of parameters. Most methods are passed - through to contained params. - - Interface is a superset of both `MutableSequence` (i.e., behaves like a - Python `list`, so ordering, appending, extending, etc. all work) and `Set` - (i.e., behaves like a Python `set`, so no duplicates (tested by name) are - allowed, you can test set membership like issuperset, issubset, etc.). - See .. :: - - https://docs.python.org/3/library/collections.abc.html - - for the definitions of the `MutableSequence` and `Set` interfaces. - - - Parameters - ---------- - *args : one or more Param objects or sequences thereof - - Examples - -------- - >>> from pisa import ureg - >>> from pisa.core.prior import Prior - - >>> e_prior = Prior(kind='gaussian', mean=10*ureg.GeV, stddev=1*ureg.GeV) - >>> cz_prior = Prior(kind='uniform', llh_offset=-5) - >>> reco_energy = Param(name='reco_energy', value=12*ureg.GeV, - ... prior=e_prior, range=[1, 80]*ureg.GeV, - ... is_fixed=False, is_discrete=False, - ... tex=r'E^{\rm reco}') - >>> reco_coszen = Param(name='reco_coszen', value=-0.2, prior=cz_prior, - ... range=[-1, 1], is_fixed=True, is_discrete=False, - ... tex=r'\cos\,\theta_Z^{\rm reco}') - >>> param_set = ParamSet(reco_energy, reco_coszen) - >>> print(param_set) - reco_coszen=-2.0000e-01 reco_energy=+1.2000e+01 GeV - - >>> print(param_set.free) - reco_energy=+1.2000e+01 GeV - - >>> print(param_set.reco_energy.value) - 12 gigaelectron_volt - - >>> print([p.prior_llh for p in param_set]) - [-5.0, -2] - - >>> print(param_set.priors_llh) - -7.0 - - >>> print(param_set.values_hash) - 3917547535160330856 - - >>> print(param_set.free.values_hash) - -7121742559130813936 - - """ - # pylint: disable=protected-access - def __init__(self, *args): - # Unpack the input args into a flat list of params - param_sequence_ = [] - for arg_num, arg in enumerate(args, start=1): - if isinstance(arg, (Mapping, Param)): - param_sequence_.append(arg) - elif isinstance(arg, Iterable): - param_sequence_.extend(arg) - else: - raise TypeError( - "Unhandled type {}, arg #{}: {}".format(type(arg), arg_num, arg) - ) - - param_sequence = [] - for param in param_sequence_: - if isinstance(param, Mapping): - param = Param(**param) - if isinstance(param, Param): - param_sequence.append(param) - else: - raise TypeError("Unhandled type {}: {}".format(type(param), param)) - - # Disallow duplicated params - all_names = [p.name for p in param_sequence] - unique_names = set(all_names) - if len(unique_names) != len(all_names): - duplicates = set(x for x in all_names if all_names.count(x) > 1) - raise ValueError('Duplicate definitions found for param(s): ' + - ', '.join(str(e) for e in duplicates)) - - # Elements of list must be Param type - assert all([isinstance(x, Param) for x in param_sequence]), \ - 'All params must be of type "Param"' - - self._params = param_sequence - - # if we do not normalize, then the hash will change upon evaluating unit changes - # I think because the changed units are cached in the object (Philipp) - self.normalize_values = True - - @property - def has_derived(self)->bool: - """ - Returns whether or not this set contains a derived parameter - """ - has = False - return any(isinstance(par, DerivedParam) for par in self) - - @property - def serializable_state(self): - return [p.state for p in self] - - @property - def _by_name(self): - return {obj.name: obj for obj in self._params} - - def __repr__(self): - return self.tabulate(tablefmt="presto") - - def _repr_html_(self): - return self.tabulate(tablefmt="html") - - def tabulate(self, tablefmt="plain"): - headers = ['name', 'value', 'nominal_value', 'range', 'prior', 'units', 'is_fixed'] - colalign=["right"] + ["center"] * (len(headers) -1 ) - table = [] - for p in self: - if (p.value is None or isinstance(p.value, (string_types, bool))): - table.append([p.name, p.value, p.nominal_value, p.range, p.prior, p.units, p.is_fixed]) - else: - if p.range is not None: - range_fmt = [r.m for r in p.range] - else: - range_fmt = None - if p.prior is not None: - if p.prior.kind == "gaussian": - prior_fmt = "+/- %s"%p.prior.stddev.m - elif p.prior.kind == "uniform": - prior_fmt = "uniform" - else: - prior_fmt = p.prior - else: - prior_fmt = p.prior - table.append([p.name, p.value.m, p.nominal_value.m, range_fmt, prior_fmt, p.units, p.is_fixed]) - if len(table) == 0: - return "Empty Params" - return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign) - - def index(self, value): # pylint: disable=arguments-differ - """Return an integer index to the Param in this ParamSet indexed by - `value`. This does not look up a param's `value` property but looks for - param by name, integer index, or matching object. - - Parameters - ---------- - value : int, str or Param - The object to return an index for. If int, the integer is returned - (so long as it's in the valid range). If str, return index of param - with matching `name` attribute. If Param object, return index of an - equivalent Param in this set. - - Returns - ------- - idx : int index to a corresponding param in this ParamSet - - Raises - ------ - ValueError : if `value` does not correspond to a param in this ParamSet - - """ - idx = -1 - if isinstance(value, int): - idx = value - elif value in self.names: - idx = self.names.index(value) - elif isinstance(value, Param) and value in self._params: - idx = self._params.index(value) - if idx < 0 or idx >= len(self): - raise ValueError('%s not found in ParamSet' % (value,)) - return idx - - def add_covariance(self, covmat:dict)->None: - """ - Correlates several Params. - It works by taking the existing params, and rotating them into a new, uncorrelated, basis state. - New parameters are added in the new basis, and the old params are replaced with derived params - The fits therefore are done in the uncorrelated basis - - - Parameters - ---------- - covmat : dict - A two-deep nested dictionary for covariances between Params - Note: this is specifically not a 2D array such as to be explicit about which params are used - - ex: - { - Param1:{ - Param1: 0.9, - Param2: 0.1 }, - Param2:{ - Param1:0.1, - Param2:0.8} - } - - Raises - ------ - KeyError if given dict has keys not not shared with Parameter names - TypeError if a given entry in covmat is not the proper type - NotImplementedError if the means of calculating the mean for a given parameters prior isn't there yet - """ - dim = len(covmat.keys()) - if dim==0: - return - - cov = np.zeros(shape=(dim,dim)) - names = self.names - for k_i, key in enumerate(covmat.keys()): - if key not in names: - raise KeyError("Key {} not in Params".format(key)) - if not isinstance(covmat[key],dict): - raise TypeError("Each entry in covmat should be another dict, found {}".format(type(covmat[key]))) - for k_j, subkey in enumerate(covmat[key].keys()): - if subkey not in names: - raise KeyError("Key {} not in Params".format(subkey)) - - cov[k_i][k_j] = covmat[key][subkey] - - if np.linalg.det(cov)<0: - raise ValueError("Covariance matrix *must* be positive definite!") - - params = tuple([self[name] for name in covmat.keys()]) - - # we need the mean values of the paramters - means = [0.0 for i in range(dim)] - for i, param in enumerate(params): - if param.prior.kind == "gaussian": - means[i] = param.prior.mean - elif param.prior.kind=="uniform": - means[i] = (param.range[1] + param.range[0])*0.5 - else: - raise NotImplementedError() - - # diagonalize covariance matrix - evals, inv_t = np.linalg.eig(cov) - new_sigmas = np.sqrt(evals) - - if any([abs(sig)<1e-20 for sig in new_sigmas]): - raise ValueError("Found zero-width param {} - your parameters might be linearly dependent!".format(new_sigmas)) - - """ - Let "x" be in the correlated basis - and "v" be in the uncorrelated basis - - T is the matrix from `inv_t` - - v = (x - mu_x) @ T - x = v@(T^-1) + mu_x - - The new Parameters will have Gaussian priors centered at zero! - """ - - transformation = np.linalg.inv(inv_t) - ranges_x = [param.range for param in params] # ranges in correlated basis - new_parameters = [] - - for i, param in enumerate(params): - new_prior = Prior( - kind="gaussian", - mean = 0.0, - stddev = new_sigmas[i] - ) - - # find max and min for this parameter - """ - This paramter V is a function of \vec{x}=(x1, x2, x3, ...) - - \vec{v}_{i} can be calculated via summing over i - v_i = inv_t[j][i] x_i - - This is a linear transformation using the eivenvectors of the covariance matrix - """ - - v_max = 0 - v_min = 0 - for j in range(dim): # number of paramters, dimensionality - v_max += inv_t[j][i]*(ranges_x[j][1] - means[j]) if inv_t[j][i]>0 else inv_t[j][i]*(ranges_x[j][0] - means[j]) - v_min += inv_t[j][i]*(ranges_x[j][1] - means[j]) if inv_t[j][i]<0 else inv_t[j][i]*(ranges_x[j][0] - means[j]) - - new = Param( - name = param.name + "_rotated", - value = 0.0*ureg.dimensionless, # get the centers. These will be zero since we subtract the mean - prior = new_prior, - range = (v_min, v_max), - is_fixed = False, - is_discrete= False, - scales_as_log=param.scales_as_log, - nominal_value=0.0*ureg.dimensionless, - tex=param.tex+"'" - ) - - new_parameters.append(new) - self.update(new) # add in this new parameter - - def build_func(index): - all_vars = [ callable.Var(new_par.name) for new_par in new_parameters ] - - function = transformation[0][index]*all_vars[0] - for _i in range(dim-1): - i = _i + 1 - function = function + transformation[i][index]*all_vars[i] - - function = function + means[index] - - return function - - # now that we have constructed the new parameters, update the old ones to be DerivedParams - for i, param in enumerate(params): - derived_version = DerivedParam( - name = param.name, - value = param.value, - range=param.range - ) - derived_version.dependson = new_parameters # depends on the parameters we've just set up in the uncorrelated basis - derived_version.callable = build_func(i) - - self.replace(derived_version) - - - - - def replace(self, new): - """Replace an existing param with `new` param, where the existing param - must have the same `name` attribute as `new`. - - Parameters - ---------- - new : Param - New param to use instead of current param. - - Raises - ------ - ValueError : if `new.name` does not match an existing param's name - - """ - idx = self.index(new.name) - self._params[idx] = new - - def set_values(self, new_params): - """Set values in current ParamSet to those defined in new ParamSet - - Parameters - ---------- - new_params : ParamSet - ParamSet containing set of values to change current ParamSet to. - """ - if self.names != new_params.names: - raise ValueError('ParamSet names do not match. Currently have %s ' - 'and want to change to a set containing %s.' - % (self.names, new_params.names)) - for new_param in new_params: - self[new_param.name].value = new_param.value - - def fix(self, x): - """Set param(s) to be fixed in value (and hence not modifiable by e.g. - a minimizer). - - Note that the operation is atomic: If `x` is a sequence of indexing - objects, if _any_ index in `x` cannot be found, _no_ other params - specified in `x` will be set to be fixed. - - Any params specified in `x` that are already fixed simply remain so. - - Parameters - ---------- - x : int, str, Param, or iterable thereof - Object or sequence to index into params to define which to affix. - See `index` method for valid objects to use for indexing into the - ParamSet. - - Raises - ------ - ValueError : if any index cannot be found - - """ - if isinstance(x, (Param, int, str)): - x = [x] - indices = set() - for obj in x: - indices.add(self.index(obj)) - for idx in indices: - self[idx].is_fixed = True - - def unfix(self, x): - """Set param(s) to be free (and hence modifiable by e.g. a minimizer). - - Note that the operation is atomic: If `x` is a sequence of indexing - objects, if _any_ index in `x` cannot be found, _no_ other params - specified in `x` will be set to be free. - - Any params specified in `x` that are already free simply remain so. - - Parameters - ---------- - x : int, str, Param, or iterable thereof - Object or sequence to index into params to define which to affix. - See `index` method for valid objects to use for indexing into the - ParamSet. - - Raises - ------ - ValueError : if any index cannot be found - - """ - if isinstance(x, (Param, int, str)): - x = [x] - indices = set() - for obj in x: - indices.add(self.index(obj)) - for idx in indices: - self[idx].is_fixed = False - - def update(self, obj, existing_must_match=False, extend=True): - """Update this param set using `obj`. - - Default behavior is similar to Python's dict.update, but this can be - modified via `existing_must_match` and `extend`. - - Parameters - ---------- - obj : Param, ParamSet, or sequence thereof - Param or container with params to update and/or extend this param - set - existing_must_match : bool - If True, raises ValueError if param values passed in that already - exist in this param set have differing values. - extend : bool - If True, params not in this param set are appended. - - """ - # make sure we're having a new object! - #obj = deepcopy(obj) - if isinstance(obj, (Sequence, ParamSet)): - for param in obj: - self.update(param, existing_must_match=existing_must_match, - extend=extend) - return - if not isinstance(obj, Param): - raise ValueError('`obj`="%s" is not a Param' % (obj)) - param = obj - if param.name in self.names: - if existing_must_match and (param != self[param.name]): - raise ValueError( - 'Param "%s" specified as\n\n%s\n\ncontradicts' - ' internally-stored version:\n\n%s' - %(param.name, param.state, self[param.name].state) - ) - self.replace(param) - elif extend: - self._params.append(param) - - def insert(self, index, value): - """Insert value before index""" - if not isinstance(value, Param): - raise TypeError(f"`value` must be a Param; got {type(value)} instead") - if value.name in self.names: - raise ValueError(f"Cannot insert an existing param name: '{value.name}'") - idx = self.index(index) - self._params.insert(idx, value) - - def extend(self, values): - """Append param(s) in `values` to this param set, but ensure params in - `values` that are already in this param set match. Params with same name - attribute are not duplicated. - - (Convenience method or calling `update` method with - existing_must_match=True and extend=True.) - - """ - self.update(values, existing_must_match=True, extend=True) - - def update_existing(self, obj): - """Only existing params in this set are updated by that(those) param(s) - in obj. - - Convenience method for calling `update` with - existing_must_match=False and extend=False. - - """ - self.update(obj, existing_must_match=False, extend=False) - - def __len__(self): - return len(self._params) - - def __setitem__(self, i, val): - if isinstance(i, int): - self._params[i].value = val - elif isinstance(i, str): - self._by_name[i].value = val - - def __delitem__(self, i): - idx = self.index(i) - del self._params[idx] - - def __deepcopy__(self, memo): - cls = self.__class__ - result = cls.__new__(cls) - memo[id(self)] = result - for k, v in self.__dict__.items(): - setattr(result, k, deepcopy(v, memo)) - return result - - def __getitem__(self, i)->Param: - if isinstance(i, int): - return self._params[i] - elif isinstance(i, str): - return self._by_name[i] - raise IndexError( - f'Cannot index into a {self.__class__.__name__} with {type(i)} "{i}"' - ) - - def __getattr__(self, attr): - try: - return super().__getattribute__(attr) - except AttributeError: - t, v, tb = sys.exc_info() - try: - return self[attr] - except KeyError: - raise t(v).with_traceback(tb) - - def __setattr__(self, attr, val): - try: - params = super().__getattribute__('_params') - param_names = [p.name for p in params] - except AttributeError: - params = [] - param_names = [] - try: - idx = param_names.index(attr) - except ValueError: - super().__setattr__(attr, val) - else: - # `attr` (should be) param name - if isinstance(val, Param): - assert val.name == attr - self._params[idx] = val - elif isinstance(val, ureg.Quantity) or isbarenumeric(val): - self._params[idx].value = val - else: - raise ValueError('Cannot set param "%s" to `val`=%s' - %(attr, val)) - - def __iter__(self): - return iter(self._params) - - def __str__(self): - numfmt = '%+.4e' - strings = [] - for p in self: - string = p.name + '=' - if isinstance(p.value, ureg.Quantity): - string += numfmt %p.m - full_unit_str = str(p.u) - if full_unit_str in [str(ureg('electron_volt ** 2').u)]: - unit = ' eV2' - elif full_unit_str in [str(ureg.deg)]: - unit = ' deg' - elif full_unit_str in [str(ureg.rad)]: - unit = ' rad' - else: - unit = ' ' + format(p.u, '~') - string += unit - else: - try: - string += numfmt %p.value - except TypeError: - string += '%s' %p.value - strings.append(string.strip()) - return ' '.join(strings) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - return recursiveEquality(self.state, other.state) - - def issubset(self, other): - return all(param in other for param in self) - - def issuperset(self, other): - return all(param in self for param in other) - - def __leq__(self, other): - return self.issubset(other) - - def __lt__(self, other): - return len(other) > len(self) and self.issubset(other) - - def __geq__(self, other): - return self.issuperset(other) - - def __gt__(self, other): - return len(self) > len(other) and self.issuperset(other) - - def priors_penalty(self, metric): - """Return the aggregate prior penalty for all params at their current - values. - - Parameters - ---------- - metric : str - Metric to use for evaluating the prior. - - Returns - ------- - penalty : float sum of all parameters' prior values - - """ - - # if daemonflux stage is not used use std priors penalty - if not "daemon_chi2" in self.names: - priors_sum = np.sum([obj.prior_penalty(metric=metric) - for obj in self._params]) - - # else switch daemon flux params penalty to the one drom daemonflux - # (which takes into account covariance) - else: - # normal (non-correlated) penalty for non-daemonflux params - priors_sum = np.sum([obj.prior_penalty(metric=metric) - for obj in self._params if "daemon_" not in obj.name]) - - # conversion factor between chi2 and llh - conv_factor = -0.5 if metric in LLH_METRICS else 1 - # add daemonflux calcualted chi2 penalty - priors_sum += conv_factor * self._by_name["daemon_chi2"].value.m_as("dimensionless") - - return priors_sum - - def priors_penalties(self, metric): - """Return the prior penalties for each param at their current values. - - Parameters - ---------- - metric : str - Metric to use for evaluating the prior. - - Returns - ------- - penalty : list of float prior values, one for each param - - """ - return [obj.prior_penalty(metric=metric) for obj in self._params] - - def reset_all(self): - """Reset both free and fixed parameters to their nominal values.""" - self.values = self.nominal_values - - def reset_free(self): - """Reset only free parameters to their nominal values.""" - self.free.reset_all() - - def set_nominal_by_current_values(self): - """Define the nominal values as the parameters' current values.""" - self.nominal_values = self.values - - def randomize_free(self, random_state=None): - """Randomize any free parameters with according to a uniform random - distribution within the parameters' defined limits. - - Parameters - ---------- - random_state : None, int, or RandomState - Object to use for random state. None defaults to the global random - state (this is discouraged, as results are not reproducible). An - integer acts as a seed to `numpy.random.seed()`, and RandomState is - a `numpy.random.RandomState` object. - - """ - random = get_random_state(random_state) - n = len(self.free) - rand = random.rand(n) - self.free._rescaled_values = rand - - @property - def _rescaled_values(self): - """Parameter values rescaled to be in the range [0, 1], based upon - their defined range.""" - return tuple(param._rescaled_value for param in self._params) - - @_rescaled_values.setter - def _rescaled_values(self, vals): - assert len(vals) == len(self) - for param, val in zip(self._params, vals): - param._rescaled_value = val - - @property - def tex(self): - return r',\;'.join([obj.tex for obj in self._params]) - - @property - def fixed(self): - return ParamSet([obj for obj in self._params if obj.is_fixed]) - - @property - def free(self): - return ParamSet([obj for obj in self._params if not obj.is_fixed]) - - @property - def continuous(self): - return ParamSet([obj for obj in self._params if not obj.is_discrete]) - - @property - def discrete(self): - return ParamSet([obj for obj in self._params if obj.is_discrete]) - - @property - def are_fixed(self): - return tuple(obj.is_fixed for obj in self._params) - - @property - def are_discrete(self): - return tuple(obj.is_discrete for obj in self._params) - - @property - def names(self): - return tuple(obj.name for obj in self._params) - - @property - def values(self): - return tuple(obj.value for obj in self._params) - - @values.setter - def values(self, values): - assert len(values) == len(self._params) - for i, val in enumerate(values): - setattr(self._params[i], 'value', val) - - @property - def name_val_dict(self): - d = OrderedDict() - for name, val in zip(self.names, self.values): - d[name] = val - return d - - @property - def is_nominal(self): - return np.all([(v0 == v1) - for v0, v1 in zip(self.values, self.nominal_values)]) - - @property - def nominal_values(self): - return [obj.nominal_value for obj in self._params] - - @nominal_values.setter - def nominal_values(self, values): - assert len(values) == len(self._params) - for i, val in enumerate(values): - setattr(self._params[i], 'nominal_value', val) - - @property - def priors(self): - return tuple(obj.prior for obj in self._params) - - @priors.setter - def priors(self, values): - assert len(values) == len(self._params) - for i, val in enumerate(values): - setattr(self._params[i], 'prior', val) - - @property - def priors_llh(self): - return np.sum([obj.prior_llh for obj in self._params]) - - @property - def priors_chi2(self): - return np.sum([obj.prior_chi2 for obj in self._params]) - - @property - def ranges(self): - return tuple(obj.range for obj in self._params) - - @ranges.setter - def ranges(self, values): - assert len(values) == len(self._params) - for i, val in enumerate(values): - setattr(self._params[i], 'range', val) - - @property - def state(self): - return tuple(obj.state for obj in self._params) - - @property - def values_hash(self): - """int : hash only on the current param values (not full state)""" - if self.normalize_values: - return hash_obj(normQuant(self.values)) - return hash_obj(self.values) - - @property - def nominal_values_hash(self): - """int : hash only on the nominal param values""" - if self.normalize_values: - return hash_obj(normQuant(self.nominal_values)) - return hash_obj(self.nominal_values) - - @property - def hash(self): - """int : full state hash""" - if self.normalize_values: - return hash_obj(normQuant(self.state)) - return hash_obj(self.state) - - def __hash__(self): - return self.hash - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, filename): - """Instantiate a new ParamSet from a JSON file""" - state = jsons.from_json(filename=filename) - if isinstance(state, Sequence): - return cls(*state) - if isinstance(state, Mapping): - return cls(*tuple(state.values())) - raise TypeError( - 'Unhandled type loaded from "{}": {}\n{}'.format( - filename, type(state), state - ) - ) - - -class ParamSelector: - """ - Parameters - ---------- - regular_params : ParamSet or instantiable thereto - - selector_param_sets : None, dict, or sequence of dict - Dict(s) format: - { - '': , - '': , - ... - } - The names are what must be specified in `selections` to select the - corresponding ParamSets. Params specified in any of the ParamSets - within `selector_param_sets cannot be in `regular_params`. - - selections : None, string, or sequence of strings - One string is required per - - Notes - ----- - Params specified in `regular_params` are enforced to be mutually exclusive - with params in the param sets specified by `selector_param_sets`. - - """ - # pylint: disable=protected-access - def __init__(self, regular_params=None, selector_param_sets=None, - selections=None): - self._current_params = ParamSet() - self._regular_params = ParamSet() - self._selector_params = {} - self._selections = [] - - if regular_params is not None: - self.update(regular_params, selector=None) - - if selector_param_sets is not None: - for selector, params in selector_param_sets.items(): - selector = selector.strip().lower() - params = ParamSet(params) - self._selector_params[selector] = params - - self.select_params(selections=selections, error_on_missing=False) - - def select_params(self, selections=None, error_on_missing=False): - if selections is None: - return self.select_params(selections=self._selections, - error_on_missing=error_on_missing) - - if isinstance(selections, str): - selections = selections.split(',') - - assert isinstance(selections, Sequence) - - distilled_selections = [] - for selection in selections: - if selection is None: - continue - if not isinstance(selection, str): - raise ValueError( - "Selection should be a str. Got %s instead."%( - type(selection)) - ) - selection = selection.strip().lower() - try: - if selection not in self._selector_params: - raise KeyError( - 'No selection "%s" available; valid selections are %s' - ' (case-insensitive).' - %(selection, self._selector_params.keys()) - ) - self._current_params.update(self._selector_params[selection]) - except KeyError: - if error_on_missing: - raise - distilled_selections.append(selection) - - self._selections = sorted(distilled_selections) - - return self._current_params - - @property - def params(self): - return self._current_params - - @property - def param_selections(self): - return deepcopy(self._selections) - - def __iter__(self): - return iter(self._current_params) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if not recursiveEquality(self._selections, other._selections): - return False - if not recursiveEquality(self._regular_params, other._regular_params): - return False - if not recursiveEquality(self._selector_params, other._selector_params): - return False - return True - - def update(self, p, selector=None, existing_must_match=False, extend=True): - try: - p = ParamSet(p) - except: - logging.error('Could not instantiate a ParamSet with `p` of type' - ' %s, value = %s', type(p), p) - raise - - if selector is None: - self._regular_params.update(p, existing_must_match=existing_must_match, extend=extend) - self._current_params.update(p, existing_must_match=existing_must_match, extend=extend) - for selection in self._selections: - if selection in self._selector_params.keys(): - self._selector_params[selection].update(p, existing_must_match=existing_must_match, extend=extend) - else: - assert isinstance(selector, str) - selector = selector.strip().lower() - if selector not in self._selector_params: - self._selector_params[selector] = ParamSet() - self._selector_params[selector].update(p, existing_must_match=existing_must_match, extend=extend) - - # Re-select current selectiosn in case the update modifies these - self.select_params(error_on_missing=False) - - def get(self, name, selector=None): - if selector is None: - return self._regular_params[name] - try: - return self._selector_params[selector][name] - except KeyError: - return self._regular_params[name] - - -def test_Param(): - """Unit tests for Param class""" - # pylint: disable=unused-variable - from scipy.interpolate import splrep - from pisa.utils.comparisons import ALLCLOSE_KW - - temp_dir = tempfile.mkdtemp() - - counter = [0] - def check_json(param, name=""): - fpath = join(temp_dir, "foo{}.json".format(counter[0])) - counter[0] += 1 - param.to_json(fpath) - loaded = Param.from_json(fpath) - if not ( - recursiveEquality(param, loaded) - and recursiveEquality(param.serializable_state, loaded.serializable_state) - ): - msg = ( - "{}: failed to save / load identical param:\n" - "original = {:s}\n" - "loaded = {:s}" - .format(name, str(param), str(loaded)) - ) - logging.error(msg) - raise ValueError(msg) - - def check_scaling(p0): - value_prescale = p0.value - # calculate rescaled value that is used by the minimizer, make sure - # the original value can be recovered - rval = p0._rescaled_value - p0._rescaled_value = rval - msg = ( - f"value of param {p0.name} after re-scaling is {p0.value}, " - f"should be {value_prescale}" - ) - assert np.isclose( - p0.value.m_as(p0.u), value_prescale.m_as(p0.u), **ALLCLOSE_KW - ), msg - # check nothing breaks when we go to the edges - p0.value = p0.range[0] - assert p0._rescaled_value == 0. - p0.value = p0.range[1] - assert p0._rescaled_value == 1. - p0.value = value_prescale - p0._rescaled_value = 1. - msg = ( - f"value of param {p0.name} after re-scaling is {p0.value}, " - f"should be {max(p0.range)}" - ) - assert np.isclose( - p0.value.m_as(p0.u), max(p0.range).m_as(p0.u), **ALLCLOSE_KW - ), msg - # We can afford rounding errors within the range, but we *cannot* afford them - # outside of the range, so we test that here explicitly. - assert p0.value.m_as(p0.u) <= max(p0.range).m_as(p0.u), msg - p0._rescaled_value = 0. - msg = ( - f"value of param {p0.name} after re-scaling is {p0.value}, " - f"should be {min(p0.range)}" - ) - assert np.isclose( - p0.value.m_as(p0.u), min(p0.range).m_as(p0.u), **ALLCLOSE_KW - ), msg - assert p0.value.m_as(p0.u) >= min(p0.range).m_as(p0.u), msg - - - try: - uniform = Prior(kind='uniform', llh_offset=1.5) - gaussian = Prior(kind='gaussian', mean=10*ureg.meter, stddev=1*ureg.meter) - param_vals = np.linspace(-10, 10, 100) * ureg.meter - llh_vals = (param_vals.magnitude)**2 - linterp_m = Prior(kind='linterp', param_vals=param_vals, llh_vals=llh_vals) - linterp_nounits = Prior(kind='linterp', param_vals=param_vals.m, - llh_vals=llh_vals) - - param_vals = np.linspace(-10, 10, 100) - llh_vals = param_vals**2 - knots, coeffs, deg = splrep(x=param_vals, y=llh_vals) - - spline = Prior(kind='spline', knots=knots, coeffs=coeffs, deg=deg) - - # Param with units, prior with compatible units - p0 = Param(name='c', value=5000*ureg.foot, prior=gaussian, - range=[-1, 2]*ureg.mile, is_fixed=False, is_discrete=False, - tex=r'\int{\rm c}') - check_scaling(p0) - check_json(p0, "p0") - - # Param with units, prior with compatible units, log-scaling behavior - p0 = Param(name='c', value=5000*ureg.foot, prior=gaussian, - # range entirely positive - range=[0.1, 2]*ureg.mile, is_fixed=False, is_discrete=False, - scales_as_log=True, tex=r'\int{\rm c}') - check_scaling(p0) - check_json(p0, "p0") - - # range entirely negative - p0 = Param(name='c', value=-5000*ureg.foot, prior=gaussian, - # range entirely positive - range=[-2, -0.1]*ureg.mile, is_fixed=False, is_discrete=False, - scales_as_log=True, tex=r'\int{\rm c}') - check_scaling(p0) - check_json(p0, "p0") - - # Test a pathological parameter with a range of (-0.5, 0.3) and try to set the - # rescaled value to the upper boundary. This used to cause an error in the past - # because (-0.5 + (0.3 -(-0.5)) * 1.) = 0.30000000000000004, which is above 0.3. - p0 = Param(name='a', value=0., prior=None, range=[-0.5, 0.3], - is_fixed=False, is_discrete=False) - check_scaling(p0) - check_json(p0, "p0") - - # Param with no units, prior with no units - p1 = Param(name='c', value=1.5, prior=spline, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') - check_json(p1, "p1") - - # Param with no units, prior with units - try: - p2 = Param(name='c', value=1.5, prior=linterp_m, - range=[1, 2], is_fixed=False, is_discrete=False, - tex=r'\int{\rm c}') - _ = p2.prior_llh - logging.debug(str(p2)) - logging.debug(str(linterp_m)) - logging.debug('p2.units: %s', p2.units) - logging.debug('p2.prior.units: %s', p2.prior.units) - except (TypeError, pint.DimensionalityError): - pass - else: - assert False - - # Param with units, prior with no units - try: - p2 = Param(name='c', value=1.5*ureg.meter, prior=spline, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') - _ = p2.prior_llh - except (ValueError, TypeError, AssertionError): - pass - else: - assert False - try: - p2 = Param(name='c', value=1.5*ureg.meter, prior=linterp_nounits, - range=[1, 2], is_fixed=False, is_discrete=False, - tex=r'\int{\rm c}') - _ = p2.prior_llh - except (ValueError, TypeError, AssertionError): - pass - else: - assert False - - # Param, range, prior with no units - p2 = Param(name='c', value=1.5, prior=linterp_nounits, - range=[1, 2], is_fixed=False, is_discrete=False, - tex=r'\int{\rm c}') - _ = p2.prior_llh - - # Param, prior with no units, range with units - try: - p2 = Param(name='c', value=1.5, prior=linterp_nounits, - range=[1, 2]*ureg.m, is_fixed=False, is_discrete=False, - tex=r'\int{\rm c}') - _ = p2.prior_llh - logging.debug(str(p2)) - logging.debug(str(linterp_nounits)) - logging.debug('p2.units: %s', p2.units) - logging.debug('p2.prior.units: %s', p2.prior.units) - except (ValueError, TypeError, AssertionError): - pass - else: - assert False - - nom0 = p2.nominal_value - val0 = p2.value - p2.value = p2.value * 1.01 - val1 = p2.value - assert p2.value != val0 - assert p2.value == val0 * 1.01 - assert p2.value != nom0 - assert p2.nominal_value == nom0 - - p2.reset() - assert p2.value == nom0 - assert p2.nominal_value == nom0 - - p2.value = val1 - p2.set_nominal_to_current_value() - assert p2.nominal_value == p2.value - assert p2.nominal_value == val1, \ - '%s should be %s' %(p2.nominal_value, val1) - - # Test deepcopy - param2 = deepcopy(p2) - assert param2 == p2 - - finally: - rmtree(temp_dir) - - logging.info('<< PASS : test_Param >>') - - -# TODO: add tests for reset() and reset_all() methods -def test_ParamSet(): - """Unit tests for ParamSet class""" - # pylint: disable=attribute-defined-outside-init - p0 = Param(name='c', value=1.5, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') - p1 = Param(name='a', value=2.5, prior=None, range=[1, 5], - is_fixed=True, is_discrete=False, tex=r'{\rm a}') - p2 = Param(name='b', value=1.5, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p3 = Param(name='deleteme', value=0.1, prior=None, range=[-1, 1], - is_fixed=True, is_discrete=False, tex=r'{\rm dm}') - - proto_param_set = ParamSet(p0, p1, p2) - - # Membership tests - assert p0 in proto_param_set - assert p1 in proto_param_set - assert p2 in proto_param_set - p0_mod = deepcopy(p0) - p0_mod.value = 1.6 - assert p0_mod not in proto_param_set - assert proto_param_set.issubset(proto_param_set) - assert proto_param_set <= proto_param_set - assert proto_param_set.issuperset(proto_param_set) - assert proto_param_set >= proto_param_set - assert not proto_param_set.isdisjoint(proto_param_set) - - param_set = ParamSet(p3, p0, p1, p2) - logging.debug(str((param_set.values))) - assert param_set >= proto_param_set - assert param_set > proto_param_set - assert proto_param_set <= param_set - assert proto_param_set < param_set - assert len(param_set.fixed) == 2 - del param_set['deleteme'] - assert param_set == proto_param_set - assert param_set[0].value == 1.5 - assert len(param_set) == 3 - assert 'deleteme' not in param_set.names - assert len(param_set.fixed) == 1 - logging.debug(str((param_set.values))) - - param_set = ParamSet(p3, p0, p1, p2) - assert len(param_set.fixed) == 2 - logging.debug(str((param_set.values))) - del param_set[0] - assert param_set == proto_param_set - assert param_set[0].value == 1.5 - assert len(param_set) == 3 - assert len(param_set.fixed) == 1 - assert 'deleteme' not in param_set.names - - # Test `remove`, `pop`, and `del` with param in any position - for idx in range(0, 4): - params = [p0, p1, p2] - if idx > len(params) - 1: - params.append(p3) - else: - params.insert(idx, p3) - - param_set = ParamSet(*params) - param_set.remove(p3) - assert param_set == proto_param_set - - param_set = ParamSet(*params) - p = param_set.pop(idx) - assert p == p3 - assert param_set == proto_param_set - - param_set = ParamSet(*params) - del param_set[idx] - assert param_set == proto_param_set - - # Test `insert` - for idx in range(3): - params = [p0, p1, p2] - param_set = ParamSet(*params) - - params.insert(idx, p3) - ref_param_set = ParamSet(*params) - - param_set.insert(idx, p3) - assert param_set == ref_param_set - - logging.debug(str((param_set.values))) - logging.debug(str((param_set[0]))) - param_set[0].value = 1 - logging.debug(str((param_set.values))) - - param_set = deepcopy(proto_param_set) - param_set.values = [1.5, 5, 1] - logging.debug(str((param_set.values))) - logging.debug(str((param_set.values[0]))) - logging.debug(str((param_set[0].value))) - - logging.debug(str(('priors:', param_set.priors))) - logging.debug(str(('names:', param_set.names))) - - logging.debug(str((param_set['a']))) - logging.debug(str((param_set['a'].value))) - logging.debug(str((param_set['a'].range))) - try: - param_set['a'].value = 33 - except Exception: - pass - else: - assert False, 'was able to set value outside of range' - logging.debug(str((param_set['a'].value))) - - logging.debug(str((param_set['c'].is_fixed))) - param_set['c'].is_fixed = True - logging.debug(str((param_set['c'].is_fixed))) - logging.debug(str((param_set.are_fixed))) - param_set.fix('a') - logging.debug(str((param_set.are_fixed))) - param_set.unfix('a') - logging.debug(str((param_set.are_fixed))) - param_set.unfix([0, 1, 2]) - logging.debug(str((param_set.are_fixed))) - - fixed_params = param_set.fixed - logging.debug(str((fixed_params.are_fixed))) - free_params = param_set.free - logging.debug(str((free_params.are_fixed))) - logging.debug(str((param_set.free.values))) - - logging.debug(str((param_set.values_hash))) - logging.debug(str((param_set.fixed.values_hash))) - logging.debug(str((param_set.free.values_hash))) - - logging.debug(str((param_set[0].state))) - logging.debug(str((param_set.hash))) - logging.debug(str((param_set.fixed.hash))) - logging.debug(str((param_set.free.hash))) - - logging.debug(str(('fixed:', param_set.fixed.names))) - logging.debug(str(('fixed, discrete:', param_set.fixed.discrete.names))) - logging.debug(str(('fixed, continuous:', - param_set.fixed.continuous.names))) - logging.debug(str(('free:', param_set.free.names))) - logging.debug(str(('free, discrete:', param_set.free.discrete.names))) - logging.debug(str(('free, continuous:', param_set.free.continuous.names))) - logging.debug(str(('continuous, free:', param_set.continuous.free.names))) - logging.debug(str(('free, continuous hash:', - param_set.free.continuous.values_hash))) - logging.debug(str(('continuous, free hash:', - param_set.continuous.free.values_hash))) - - logging.debug(str((param_set['b'].prior_llh))) - logging.debug(str((param_set.priors_llh))) - logging.debug(str((param_set.free.priors_llh))) - logging.debug(str((param_set.fixed.priors_llh))) - - logging.debug(str((param_set[0].prior_chi2))) - logging.debug(str((param_set.priors_chi2))) - - # Test that setting attributes works - e_prior = Prior(kind='gaussian', mean=10*ureg.GeV, stddev=1*ureg.GeV) - cz_prior = Prior(kind='uniform', llh_offset=-5) - reco_energy = Param(name='reco_energy', value=12*ureg.GeV, - prior=e_prior, range=[1, 80]*ureg.GeV, - is_fixed=False, is_discrete=False, - tex=r'E^{\rm reco}') - reco_coszen = Param(name='reco_coszen', value=-0.2, prior=cz_prior, - range=[-1, 1], is_fixed=True, is_discrete=False, - tex=r'\cos\,\theta_Z^{\rm reco}') - reco_coszen_fail = Param(name='reco_coszen_fail', value=-0.2, - prior=cz_prior, range=[-1, 1], is_fixed=True, - is_discrete=False, - tex=r'\cos\,\theta_Z^{\rm reco}') - reco_coszen2 = Param(name='reco_coszen', value=-0.9, prior=cz_prior, - range=[-1, 1], is_fixed=True, is_discrete=False, - tex=r'\cos\,\theta_Z^{\rm reco}') - param_set = ParamSet([reco_energy, reco_coszen]) - # Try setting a param with a differently-named param - try: - param_set.reco_coszen = reco_coszen_fail - except Exception: - pass - else: - assert False - - try: - param_set.reco_coszen = 30 - except Exception: - pass - else: - assert False - - param_set.reco_coszen = reco_coszen2 - assert param_set.reco_coszen is reco_coszen2 - assert param_set['reco_coszen'] is reco_coszen2 - assert param_set.reco_coszen.value == -0.9 - param_set.reco_coszen = -1.0 - assert param_set.reco_coszen.value == -1.0 - param_set.reco_coszen = -1 - assert param_set.reco_coszen.value == -1.0 - param_set.reco_coszen = ureg.Quantity("0.1 dimensionless") - assert param_set.reco_coszen.value == 0.1 == ureg.Quantity("0.1 dimensionless") - param_set.reco_energy = ureg.Quantity("10.1 GeV") - assert param_set.reco_energy.value == ureg.Quantity("10.1 GeV") - - # Test deepcopy - param_set2 = deepcopy(param_set) - logging.debug(str((param_set))) - logging.debug(str((param_set2))) - assert param_set2 == param_set - - # Test case added as a result of issue #543 - # https://github.com/IceCubeOpenSource/pisa/issues/543 - param_set = ParamSet( - [ - Param( - name="param0", - value=1*ureg.dimensionless, - prior=None, - range=(-1, 2)*ureg.dimensionless, - is_fixed=False, - ), - Param( - name="param1", - value=1, - prior=None, - range=(-1, 2), - is_fixed=False, - ), - Param( - name="param2", - value=1, - prior=None, - range=(-1.1, 1.1), - is_fixed=False, - ), - Param( - name="param3", - value=2.0*ureg.m/ureg.s, - prior=None, - range=(-1, 10)*ureg.cm/ureg.ns, - is_fixed=True, - ), - Param( - name="param4", - value=2.1*ureg.m/ureg.s, - prior=None, - range=(-1.1, 1.1)*ureg.cm/ureg.ns, - is_fixed=True, - ), - ] - ) - temp_dir = tempfile.mkdtemp() - try: - fpath = join(temp_dir, "foo.json") - param_set.to_json(fpath) - param_set2 = ParamSet.from_json(fpath) - finally: - rmtree(temp_dir) - assert recursiveEquality(param_set, param_set2) - assert recursiveEquality( - param_set.serializable_state, param_set2.serializable_state - ) - - logging.info('<< PASS : test_ParamSet >>') - - -def test_ParamSelector(): - """Unit tests for ParamSelector class""" - # pylint: disable=attribute-defined-outside-init, no-member, invalid-name - - p0 = Param(name='a', value=1.5, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'\int{\rm c}') - p1 = Param(name='b', value=2.5, prior=None, range=[1, 5], - is_fixed=False, is_discrete=False, tex=r'{\rm a}') - p20 = Param(name='c', value=1.5, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p21 = Param(name='c', value=2.0, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p22 = Param(name='c', value=1.0, prior=None, range=[1, 2], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p30 = Param(name='d', value=-1.5, prior=None, range=[-2, -1], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p31 = Param(name='d', value=-2.0, prior=None, range=[-2, -1], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p40 = Param(name='e', value=-15, prior=None, range=[-20, -10], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p41 = Param(name='e', value=-20, prior=None, range=[-20, -10], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - ps30_40 = ParamSet(p30, p40) - param_selector = ParamSelector( - regular_params=[p0, p1], - selector_param_sets={'p20': p20, 'p21': p21, 'p22': p22, - 'p30_40': ps30_40, 'p31_41': [p31, p41]}, - selections=['p20', 'p30_40'] - ) - params = param_selector.params - assert params.a.value == 1.5 - assert params.b.value == 2.5 - assert params.c.value == 1.5 - assert params.d.value == -1.5 - assert params.e.value == -15 - - # Modify a param's value from the selector's params - params.c = 1.8 - # Make sure that took - assert params['c'].value == 1.8 - # Make sure the original param was also modified (i.e., that it's the exact - # object that was populated to the param_selector's params) - assert p20.value == 1.8 - - param_selector.select_params('p21') - # Make sure 'c' is changed using all ways to access 'c' - assert param_selector.params.c.value == 2.0 - assert param_selector.params['c'].value == 2.0 - assert params['c'].value == 2.0 - assert params.c.value == 2.0 - # Make sure original params have values previous to selection - assert p20.value == 1.8 - assert p21.value == 2.0 - - # Change the newly-selected param's value - params.c = 1.9 - # Make sure that took - assert params['c'].value == 1.9 - # Make sure the original param was also modified (i.e., that it's the exact - # object that was populated to the param_selector's params) - assert p21.value == 1.9 - - param_selector.select_params('p31_41') - assert params['d'].value == -2 - assert params['e'].value == -20 - params.e = -19.9 - assert p41.value == -19.9 - - # Test the update method - - p5 = Param(name='f', value=120, prior=None, range=[0, 1000], - is_fixed=True, is_discrete=False, tex=r'{\rm b}') - p60 = Param(name='g', value=-1, prior=None, range=[-10, 10], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p61 = Param(name='g', value=-2, prior=None, range=[-10, 10], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - - # Update with a "regular" param that doesn't exist yet - param_selector.update(p=p5, selector=None) - assert params.f.value == 120 - - # Update with a new "selector" param with selector that's currently - # selected - param_selector.update(p=p61, selector='p31_41') - assert params.g.value == -2 - p = param_selector.get(name='g', selector='p31_41') - assert p.value == -2 - - # Update with a new "selector" param with selector that's _not_ currently - # selected - param_selector.update(p=p60, selector='p30_40') - - # Selected param value shouldn't have changed - assert params.g.value == -2 - - # ... but the param should be in the object - p = param_selector.get(name='g', selector='p30_40') - assert p.value == -1 - - # ... and selecting it should now set current param to its value - param_selector.select_params('p30_40') - assert params.g.value == -1 - - # Double check that the other one didn't change - p = param_selector.get(name='g', selector='p31_41') - assert p.value == -2 - - # Use update to overwrite existing params... - - p402 = Param(name='e', value=-11, prior=None, range=[-20, -0], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - p412 = Param(name='e', value=-22, prior=None, range=[-100, 0], - is_fixed=False, is_discrete=False, tex=r'{\rm b}') - - # Update param that exists already and is selected - param_selector.update(p=p402, selector='p30_40') - assert params.e.value == -11 - - # Make sure original param wasn't overwritten (just not in param_selector) - assert p40.value == -15 - - # Update param that exists already but is not selected - param_selector.update(p=p412, selector='p31_41') - assert params.e.value == -11 - p = param_selector.get('e', selector='p31_41') - assert p.value == -22 - param_selector.select_params('p31_41') - assert params.e.value == -22 - - # Test deepcopy - param_selector2 = deepcopy(param_selector) - assert param_selector2 == param_selector - - logging.info('<< PASS : test_ParamSelector >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_Param() - test_ParamSet() - test_ParamSelector() diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py deleted file mode 100755 index b68324111..000000000 --- a/pisa/core/pipeline.py +++ /dev/null @@ -1,854 +0,0 @@ -#! /usr/bin/env python - -""" -Implementation of the Pipeline object, and a simple script to instantiate and -run a pipeline (the outputs of which can be plotted and stored to disk). -""" - - -from __future__ import absolute_import - -from argparse import ArgumentParser -from collections import OrderedDict -from configparser import NoSectionError -from copy import deepcopy -from importlib import import_module -from itertools import product -from inspect import getsource -import os -from tabulate import tabulate -import traceback - -import numpy as np - -from pisa import ureg -from pisa.core.events import Data -from pisa.core.map import Map, MapSet -from pisa.core.param import ParamSet, DerivedParam -from pisa.core.stage import Stage -from pisa.core.container import ContainerSet -from pisa.core.binning import MultiDimBinning -from pisa.utils.config_parser import PISAConfigParser, parse_pipeline_config -from pisa.utils.fileio import mkdir -from pisa.utils.hash import hash_obj -from pisa.utils.log import logging, set_verbosity -from pisa.utils.profiler import profile - - -__all__ = ["Pipeline", "test_Pipeline", "parse_args", "main"] - -__author__ = "J.L. Lanfranchi, P. Eller" - -__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -# TODO: should we check that the output binning of a previous stage produces -# the inputs required by the current stage, or that the aggregate outputs that -# got produced by previous stages (less those that got consumed in other -# previous stages) hold what the current stage requires for inputs... or -# should we not assume either will check out, since it's possible that the -# stage requires sideband objects that are to be introduced at the top of the -# pipeline by the user (and so there's no way to verify that all inputs are -# present until we see what the user hands the pipeline as its top-level -# input)? Alternatively, the lack of apparent inputs for a stage could show -# a warning message. Or we just wait to see if it fails when the user runs the -# code. - -# TODO: return an OrderedDict instead of a list if the user requests -# intermediate results? Or simply use the `outputs` attribute of each stage to -# dynamically access this? - - -class Pipeline(object): - """Instantiate stages according to a parsed config object; excecute - stages. - - Parameters - ---------- - config : string, OrderedDict, or PISAConfigParser - If string, interpret as resource location; send to the - `config_parser.parse_pipeline_config()` method to get a config - OrderedDict. If `OrderedDict`, use directly as pipeline configuration. - - profile : bool - Perform timings - - """ - - def __init__(self, config, profile=False): - if isinstance(config, (str, PISAConfigParser)): - config = parse_pipeline_config(config=config) - elif isinstance(config, OrderedDict): - pass - else: - raise TypeError( - "`config` passed is of type %s but must be string," - " PISAConfigParser, or OrderedDict" % type(config).__name__ - ) - - self.pisa_version = None - - self.name = config['pipeline']['name'] - self.data = ContainerSet(self.name) - self.detector_name = config['pipeline']['detector_name'] - self.output_binning = config['pipeline']['output_binning'] - self.output_key = config['pipeline']['output_key'] - - self._profile = profile - - self._stages = [] - self._config = config - self._init_stages() - self._source_code_hash = None - - # check in case someone decided to add a non-daemonflux parameter with daemon_ - # in it, which would potentially make penalty calculation incorrect - if "daemon_chi2" in self.params.names: - num_daemon_params = len([name for name in self.params.names if "daemon_" in name]) - assert num_daemon_params == self.params["daemon_params_len"].value.m_as("dimensionless"), \ - 'Incorrect number of parameters with "daemon_" in their name detected. Non-daemonflux parameters can not have "daemon_" in their name. Rename your non-daemonflux parameters which do not comly!' - - self._covariance_set = False - - def __repr__(self): - return self.tabulate(tablefmt="presto") - - def _repr_html_(self): - return self.tabulate(tablefmt="html") - - def tabulate(self, tablefmt="plain"): - headers = ['stage number', 'name', 'calc_mode', 'apply_mode', 'has setup', 'has compute', 'has apply', '# fixed params', '# free params'] - colalign=["right"] + ["center"] * (len(headers) -1 ) - table = [] - for i, s in enumerate(self.stages): - table.append([i, s.__class__.__name__, s.calc_mode, s.apply_mode]) - table[-1].append(s.setup_function.__func__.__module__ == s.__class__.__module__) - table[-1].append(s.compute_function.__func__.__module__ == s.__class__.__module__) - table[-1].append(s.apply_function.__func__.__module__ == s.__class__.__module__) - table[-1] += [len(s.params.fixed), len(s.params.free)] - return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign) - - def report_profile(self, detailed=False): - for stage in self.stages: - stage.report_profile(detailed=detailed) - - @property - def profile(self): - return self._profile - - @profile.setter - def profile(self, value): - for stage in self.stages: - stage.profile = value - self._profile = value - - def index(self, stage_id): - """Return the index in the pipeline of `stage_id`. - - Parameters - ---------- - stage_id : string or int - Name of the stage, or stage number (0-indexed) - - Returns - ------- - idx : integer stage number (0-indexed) - - Raises - ------ - ValueError : if `stage_id` not in pipeline. - - """ - assert isinstance(stage_id, (int, str)) - for stage_num, stage in enumerate(self): - if stage_id in [stage_num, stage.stage_name]: - return stage_num - raise ValueError('No stage "%s" found in the pipeline.' % stage_id) - - def __len__(self): - return len(self._stages) - - def __iter__(self): - return iter(self._stages) - - def __getitem__(self, idx): - if isinstance(idx, str): - return self.stages[self.index(idx)] - - if isinstance(idx, (int, slice)): - return self.stages[idx] - - raise ValueError( - 'Cannot locate stage "%s" in pipeline. Stages' - " available are %s." % (idx, self.stage_names) - ) - - def __getattr__(self, attr): - for stage in self: - if stage.stage_name == attr: - return stage - raise AttributeError( - '"%s" is neither a stage in this pipeline nor an attribute/property' - " of the `Pipeline` object." % attr - ) - - def _init_stages(self): - """Stage factory: Instantiate stages specified by self.config. - - Conventions required for this to work: - * Stage and service names must be lower-case - * Service implementations must be found at Python path - `pisa.stages..` - * `service` cannot be an instantiation argument for a service - - """ - stages = [] - for stage_num, item in enumerate( - self.config.items() - ): - try: - name, settings = item - - if isinstance(name, str): - if name == 'pipeline': - continue - - stage_name, service_name = name - - # old cfgs compatibility - if service_name.startswith('pi_'): - logging.warning(f"Old stage name `{service_name}` is automatically renamed to `{service_name.replace('pi_', '')}`. " + - "Please change your config in the future!") - service_name = service_name.replace('pi_', '') - - logging.debug( - "instantiating stage %s / service %s", stage_name, service_name - ) - - # Import service's module - logging.trace(f"Importing service module: {stage_name}.{service_name}") - try: - module_path = f"pisa.stages.{stage_name}.{service_name}" - module = import_module(module_path) - except: - logging.debug( - f"Module {stage_name}.{service_name} not found in PISA, trying " - "to import from external definition." - ) - module_path = f"{stage_name}.{service_name}" - module = import_module(module_path) - - # Get service class from module - service_cls = getattr(module, service_name) - - # Instantiate service - logging.trace( - "initializing stage.service %s.%s with settings %s" - % (stage_name, service_name, settings) - ) - try: - service = service_cls(**settings, profile=self._profile) - except Exception: - logging.error( - "Failed to instantiate stage.service %s.%s with settings %s", - stage_name, - service_name, - settings.keys(), - ) - raise - - if not isinstance(service, Stage): - raise TypeError( - 'Trying to create service "%s" for stage #%d (%s),' - " but object %s instantiated from class %s is not a" - " PISA Stage type but instead is of type %s." - % ( - service_name, - stage_num, - stage_name, - service, - service_cls, - type(service), - ) - ) - - stages.append(service) - - except: - logging.error( - "Failed to initialize stage #%d (stage=%s, service=%s).", - stage_num, - stage_name, - service_name, - ) - raise - - - - # set parameters with an identical name to the same object - # otherwise we get inconsistent behaviour when setting repeated params - # See Isues #566 and #648 - all_parans = self.params - self.update_params(all_parans, existing_must_match=True, extend=False) - - param_selections = set() - for service in stages: - param_selections.update(service.param_selections) - param_selections = sorted(param_selections) - - for stage in stages: - stage.select_params(param_selections, error_on_missing=False) - - self._stages = stages - - self.setup() - - def get_outputs(self, output_binning=None, output_key=None): - """Get MapSet output""" - - - - self.run() - - if output_binning is None: - output_binning = self.output_binning - output_key = self.output_key - else: - assert(isinstance(output_binning, MultiDimBinning)) - - assert output_binning is not None - - self.data.representation = output_binning - - if isinstance(output_key, tuple): - assert len(output_key) == 2 - outputs = self.data.get_mapset(output_key[0], error=output_key[1]) - else: - outputs = self.data.get_mapset(output_key) - - return outputs - - def add_covariance(self, covmat): - """ - Incorporates covariance between parameters. - This is done by replacing relevant correlated parameters with "DerivedParams" - that depend on new parameters in an uncorrelated basis - - The parameters are all updated, but this doesn't add the new parameters in - So we go to the first stage we find that has one of the original parameters and manually add this in - - """ - if self._covariance_set: - logging.warn("Tried to add covariance matrix while one is already here.") - logging.fatal("Add larger covariance matrix rather than calling this multiple times") - - paramset = self.params - paramset.add_covariance(covmat) - self._covariance_set = True - - # this should go and replace existing stage parameters with the new ones - self.update_params(paramset) - self._add_rotated(paramset) - - def _add_rotated(self, paramset:ParamSet, suppress_warning=False): - """ - Used to manually add in the new, rotated parameters - """ - # now we need to add in the new, rotated, parameters - # we want to add the new rotated parameters into a stage that had the correlated parameter - # it doesn't really matter where these uncorrelated parameters go, all stages - # that need to are already using those Derived Params - derived_name = "" - for param in paramset: - if isinstance(param, DerivedParam): - derived_name = param.name - depends = param.dependson - break - if len(depends.keys())==0: - if not suppress_warning: - logging.warn("Added covariance matrix but found no Derived Params") - return False - - success = True - # now we find where a derived parameter lives - for stage in self.stages: - included = stage._param_selector.params.names - if derived_name in included: - success = True - # TODO incorporate selector !! - stage._param_selector.update(paramset) - - return success - - def run(self): - """Run the pipeline to compute""" - for stage in self.stages: - logging.debug(f"Working on stage {stage.stage_name}.{stage.service_name}") - stage.run() - - def setup(self): - """Setup (reset) all stages""" - self.data = ContainerSet(self.name) - for stage in self.stages: - stage.data = self.data - stage.setup() - - def update_params(self, params, existing_must_match=False, extend=False): - """Update params for the pipeline. - - Note that any param in `params` in excess of those that already exist - in the pipeline's stages will have no effect. - - Parameters - ---------- - params : ParamSet - Parameters to be updated - - existing_must_match : bool - extend : bool - - """ - for stage in self: - stage._param_selector.update(params, existing_must_match=existing_must_match, extend=extend) - #stage.params.update(params, existing_must_match=existing_must_match, extend=extend) - - def select_params(self, selections, error_on_missing=False): - """Select a set of alternate param values/specifications. - - Parameters - ----------- - selections : string or iterable of strings - error_on_missing : bool - - Raises - ------ - KeyError if `error_on_missing` is `True` and any of `selections` does - not exist in any stage in the pipeline. - - """ - successes = 0 - for stage in self: - try: - stage.select_params(selections, error_on_missing=True) - except KeyError: - pass - else: - successes += 1 - - if error_on_missing and successes == 0: - raise KeyError( - "None of the stages in this pipeline has all of the" - " selections %s available." % (selections,) - ) - - @property - def params(self): - """pisa.core.param.ParamSet : pipeline's parameters""" - params = ParamSet() - for stage in self: - params.extend(stage.params) - return params - - @property - def param_selections(self): - """list of strings : param selections collected from all stages""" - selections = set() - for stage in self: - selections.update(stage.param_selections) - return sorted(selections) - - @property - def stages(self)->'list[Stage]': - """list of Stage : stages in the pipeline""" - return [s for s in self] - - @property - def stage_names(self): - """list of strings : names of stages in the pipeline""" - return [s.stage_name for s in self] - - @property - def config(self): - """Deepcopy of the OrderedDict used to instantiate the pipeline""" - return deepcopy(self._config) - - @property - def source_code_hash(self): - """Hash for the source code of this object's class. - - Not meant to be perfect, but should suffice for tracking provenance of - an object stored to disk that were produced by a Stage. - - """ - if self._source_code_hash is None: - self._source_code_hash = hash_obj(getsource(self.__class__)) - return self._source_code_hash - - @property - def hash(self): - """int : Hash of the state of the pipeline. This hashes together a hash - of the Pipeline class's source code and a hash of the state of each - contained stage.""" - return hash_obj([self.source_code_hash] + [stage.hash for stage in self]) - - def __hash__(self): - return self.hash - - -def test_Pipeline(): - """Unit tests for Pipeline class""" - # pylint: disable=line-too-long - - # TODO: make a test config file with hierarchy AND material selector, - # uncomment / add in tests commented / removed below - - # - # Test: select_params and param_selections - # - - hierarchies = ["nh", "ih"] - #materials = ["iron", "pyrolite"] - materials = [] - - t23 = dict(ih=49.5 * ureg.deg, nh=42.3 * ureg.deg) - #YeO = dict(iron=0.4656, pyrolite=0.4957) - - # Instantiate with two pipelines: first has both nh/ih and iron/pyrolite - # param selectors, while the second only has nh/ih param selectors. - pipeline = Pipeline("settings/pipeline/example.cfg") # pylint: disable=redefined-outer-name - - #current_mat = "iron" - current_hier = "nh" - - for new_hier, new_mat in product(hierarchies, materials): - #_ = YeO[new_mat] - - assert pipeline.param_selections == sorted([current_hier]), str( - pipeline.param_selections - ) - assert pipeline.params.theta23.value == t23[current_hier], str( - pipeline.params.theta23 - ) - #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) - - # Select just the hierarchy - pipeline.select_params(new_hier) - assert pipeline.param_selections == sorted([new_hier]), str( - pipeline.param_selections - ) - assert pipeline.params.theta23.value == t23[new_hier], str( - pipeline.params.theta23 - ) - #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) - - ## Select just the material - #pipeline.select_params(new_mat) - #assert pipeline.param_selections == sorted([new_hier, new_mat]), str( - # pipeline.param_selections - #) - assert pipeline.params.theta23.value == t23[new_hier], str( - pipeline.params.theta23 - ) - #assert pipeline.params.YeO.value == YeO[new_mat], str(pipeline.params.YeO) - - # Reset both to "current" - pipeline.select_params([current_hier]) - assert pipeline.param_selections == sorted([current_hier]), str( - pipeline.param_selections - ) - assert pipeline.params.theta23.value == t23[current_hier], str( - pipeline.params.theta23 - ) - #assert pipeline.params.YeO.value == YeO[current_mat], str(pipeline.params.YeO) - - ## Select both hierarchy and material - #pipeline.select_params([new_hier]) - #assert pipeline.param_selections == sorted([new_hier, new_mat]), str( - # pipeline.param_selections - #) - #assert pipeline.params.theta23.value == t23[new_hier], str( - # pipeline.params.theta23 - #) - #assert pipeline.params.YeO.value == YeO[new_mat], str(pipeline.params.YeO) - - #current_hier = new_hier - #current_mat = new_mat - - - -# ----- Most of this below cang go (?) --- - -def parse_args(): - """Parse command line arguments if `pipeline.py` is called as a script.""" - parser = ArgumentParser( - # formatter_class=ArgumentDefaultsHelpFormatter, - description="""Instantiate and run a pipeline from a config file. - Optionally store the resulting distribution(s) and plot(s) to disk.""" - ) - - required = parser.add_argument_group("required arguments") - required.add_argument( - "-p", - "--pipeline", - metavar="CONFIGFILE", - type=str, - required=True, - help="File containing settings for the pipeline.", - ) - - parser.add_argument( - "-a", - "--arg", - metavar="SECTION ARG=VAL", - nargs="+", - action="append", - help="""Set config arg(s) manually. SECTION can be e.g. - "stage:" (like "stage:flux", "stage:reco", etc.), - "pipeline", and so forth. Arg values specified here take precedence - over those in the config file, but note that the sections specified - must already exist in the config file.""", - ) - parser.add_argument( - "--select", - metavar="PARAM_SELECTIONS", - nargs="+", - default=None, - help="""Param selectors (separated by spaces) to use to override any - defaults in the config file.""", - ) - parser.add_argument( - "--inputs", - metavar="FILE", - type=str, - help="""File from which to read inputs to be fed to the pipeline.""", - ) - parser.add_argument( - "--only-stage", - metavar="STAGE", - type=str, - help="""Test stage: Instantiate a single stage in the pipeline - specification and run it in isolation (as the sole stage in a - pipeline). If it is a stage that requires inputs, these can be - specified with the --infile argument, or else dummy stage input maps - (numpy.ones(...), matching the input binning specification) are - generated for testing purposes.""", - ) - parser.add_argument( - "--stop-after-stage", - metavar="STAGE", - help="""Instantiate a pipeline up to and including STAGE, but stop - there. Can specify a stage by index in the pipeline config (e.g., 0, 1, - etc.) or name (e.g., flux, osc, etc.)""", - ) - parser.add_argument( - "--outdir", - metavar="DIR", - type=str, - help="""Store all output files (data and plots) to this directory. - Directory will be created (including missing parent directories) if it - does not exist already. If no dir is provided, no outputs will be - saved.""", - ) - parser.add_argument( - "--intermediate", - action="store_true", - help="""Store all intermediate outputs, not just the final stage's - outputs.""", - ) - parser.add_argument("--pdf", action="store_true", help="""Produce pdf plot(s).""") - parser.add_argument("--png", action="store_true", help="""Produce png plot(s).""") - parser.add_argument( - "--annotate", action="store_true", help="""Annotate plots with counts per bin""" - ) - parser.add_argument( - "-v", - action="count", - default=None, - help="""Set verbosity level. Repeat for increased verbosity. -v is - info-level, -vv is debug-level and -vvv is trace-level output.""", - ) - args = parser.parse_args() - return args - - -def main(return_outputs=False): - """Run unit tests if `pipeline.py` is called as a script.""" - from pisa.utils.plotter import Plotter - - args = parse_args() - set_verbosity(args.v) - - # Even if user specifies an integer on command line, it comes in as a - # string. Try to convert to int (e.g. if `'1'` is passed to indicate the - # second stage), and -- if successful -- use this as `args.only_stage`. - # Otherwise, the string value passed will be used (e.g. `'osc'` could be - # passed). - try: - only_stage_int = int(args.only_stage) - except (ValueError, TypeError): - pass - else: - args.only_stage = only_stage_int - - if args.outdir: - mkdir(args.outdir) - else: - if args.pdf or args.png: - raise ValueError("No --outdir provided, so cannot save images.") - - # Most basic parsing of the pipeline config (parsing only to this level - # allows for simple strings to be specified as args for updating) - bcp = PISAConfigParser() - bcp.read(args.pipeline) - - # Update the config with any args specified on command line - if args.arg is not None: - for arg_list in args.arg: - if len(arg_list) < 2: - raise ValueError( - 'Args must be formatted as: "section arg=val". Got "%s"' - " instead." % " ".join(arg_list) - ) - section = arg_list[0] - remainder = " ".join(arg_list[1:]) - eq_split = remainder.split("=") - newarg = eq_split[0].strip() - value = ("=".join(eq_split[1:])).strip() - logging.debug( - 'Setting config section "%s" arg "%s" = "%s"', section, newarg, value - ) - try: - bcp.set(section, newarg, value) - except NoSectionError: - logging.error( - 'Invalid section "%s" specified. Must be one of %s', - section, - bcp.sections(), - ) - raise - - # Instantiate the pipeline - pipeline = Pipeline(bcp) # pylint: disable=redefined-outer-name - - if args.select is not None: - pipeline.select_params(args.select, error_on_missing=True) - - if args.only_stage is None: - stop_idx = args.stop_after_stage - try: - stop_idx = int(stop_idx) - except (TypeError, ValueError): - pass - if isinstance(stop_idx, str): - stop_idx = pipeline.index(stop_idx) - outputs = pipeline.get_outputs( - idx=stop_idx - ) # pylint: disable=redefined-outer-name - if stop_idx is not None: - stop_idx += 1 - indices = slice(0, stop_idx) - else: - assert args.stop_after_stage is None - idx = pipeline.index(args.only_stage) - stage = pipeline[idx] - indices = slice(idx, idx + 1) - - # Create dummy inputs if necessary - inputs = None - if hasattr(stage, "input_binning"): - logging.warning( - "Stage requires input, so building dummy" - " inputs of random numbers, with random state set to the input" - " index according to alphabetical ordering of input names and" - " filled in alphabetical ordering of dimension names." - ) - input_maps = [] - tmp = deepcopy(stage.input_binning) - alphabetical_binning = tmp.reorder_dimensions(sorted(tmp.names)) - for input_num, input_name in enumerate(sorted(stage.input_names)): - # Create a new map with all 3's; name according to the input - hist = np.full(shape=alphabetical_binning.shape, fill_value=3.0) - input_map = Map( - name=input_name, binning=alphabetical_binning, hist=hist - ) - - # Apply Poisson fluctuations to randomize the values in the map - input_map.fluctuate(method="poisson", random_state=input_num) - - # Reorder dimensions according to user's original binning spec - input_map.reorder_dimensions(stage.input_binning) - input_maps.append(input_map) - inputs = MapSet(maps=input_maps, name="ones", hash=1) - - outputs = stage.run(inputs=inputs) - - for stage in pipeline[indices]: - if not args.outdir: - break - stg_svc = stage.stage_name + "__" + stage.service_name - fbase = os.path.join(args.outdir, stg_svc) - if args.intermediate or stage == pipeline[indices][-1]: - stage.outputs.to_json(fbase + "__output.json.bz2") - - # also only plot if args intermediate or last stage - if args.intermediate or stage == pipeline[indices][-1]: - formats = OrderedDict(png=args.png, pdf=args.pdf) - if isinstance(stage.outputs, Data): - # TODO(shivesh): plots made here will use the most recent - # "pisa_weight" column and so all stages will have identical plots - # (one workaround is to turn on "memcache_deepcopy") - # TODO(shivesh): intermediate stages have no output binning - if stage.output_binning is None: - logging.debug("Skipping plot of intermediate stage %s", stage) - continue - outputs = stage.outputs.histogram_set( - binning=stage.output_binning, - nu_weights_col="pisa_weight", - mu_weights_col="pisa_weight", - noise_weights_col="pisa_weight", - mapset_name=stg_svc, - errors=True, - ) - - try: - for fmt, enabled in formats.items(): - if not enabled: - continue - my_plotter = Plotter( - stamp="Event rate", - outdir=args.outdir, - fmt=fmt, - log=False, - annotate=args.annotate, - ) - my_plotter.ratio = True - my_plotter.plot_2d_array( - outputs, fname=stg_svc + "__output", cmap="RdBu" - ) - except ValueError as exc: - logging.error( - "Failed to save plot to format %s. See exception" " message below", - fmt, - ) - traceback.format_exc() - logging.exception(exc) - logging.warning("I can't go on, I'll go on.") - - if return_outputs: - return pipeline, outputs - - -if __name__ == "__main__": - pipeline, outputs = main(return_outputs=True) # pylint: disable=invalid-name diff --git a/pisa/core/prior.py b/pisa/core/prior.py deleted file mode 100644 index 8d4615f42..000000000 --- a/pisa/core/prior.py +++ /dev/null @@ -1,527 +0,0 @@ -""" -Prior class for use in pisa.core.Param objects -""" - - -from __future__ import absolute_import, division - -from collections.abc import Iterable -from collections import OrderedDict -from os.path import isfile, join -import tempfile - -import numpy as np -from scipy.interpolate import splev, splrep, interp1d -from scipy.optimize import fminbound - -import pint -from pisa import ureg -from pisa.utils.comparisons import ( - interpret_quantity, isscalar, isunitless, recursiveEquality -) -from pisa.utils.fileio import from_file, to_file -from pisa.utils.log import logging, set_verbosity - - -__all__ = ['Prior', 'get_prior_bounds', 'test_Prior'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: uniform prior should take a constant, such that e.g. discrete parameter -# values when run separately will return valid comparisons across the -# discretely-chosen values (with different uniform priors) - -# TODO: use units "natively" (not via strings) internal to the object; only -# serializing to json should convert to strings (and deserializing should -# convert from strings to Units objects) - -# TODO: add a "to" and/or "ito" method for converting units akin to those -# methods in Pint quantities. -class Prior(object): - """Prior information for a parameter. Defines the penalty (in - log-likelihood (llh)) for a parameter being at a given value (within the - prior's valid parameter range). Chi-squared penalties can also be returned - (but the *definition* of a prior here is always in terms of llh). - - Note that since this is a penalty, the more negative the prior's log - likelihood, the greater the penalty and the less likely the parameter's - value is. - - Valid parameters and properties of the object differ based upon what `kind` - of prior is specified. - - Parameters - ---------- - kind='uniform', llh_offset=... - Uniform prior, no preference for any position relative to the valid - range, which is taken to be [-inf, +inf] [x-units]. - - kind='gaussian', mean=..., stddev=... - Gaussian prior, defining log likelihood penalty for parameter being at - any particular position. Valid range is [-inf, +inf] [x-units]. - - kind='linterp', param_vals=..., llh_vals=... - Linearly-interpolated prior. Note that "corners" in linear - interpolation may cause difficulties for some minimizers. - - kind='spline', knots=..., coeffs=..., deg=... - Smooth spline interpolation. - - Properties - ---------- - kind - max_at - max_at_str - state - valid_range - - Additional properties are defined based on `kind`: - kind='uniform': - llh_offset - - kind='gaussian': - mean - stddev - - kind='linterp': - param_vals - llh_vals - - kind='spline': - knots - coeffs - deg - - Methods - ------- - chi2 - llh - - Notes - ----- - If the parameter the prior is being applied to has units, the prior's - "x"-values specification must have compatible units. - - If you implement a new prior, it ***must*** raise an exception if methods - `llh` or `chi2` are called with a parameter value outside the prior's valid - range, so subtle bugs aren't introduced that appear as an issue in e.g. the - minimizer. - - Examples - -------- - For spline prior: knots, coeffs, and deg can be found by, e.g., - scipy.interpolate.splrep; evaluation of spline priors is carried out - internally by scipy.interpolate.splev, so an exact match to the output of - the spline prior can be produced as follows: - - >>> from scipy.interpolate import splrep, splev - >>> # Generate sample points - >>> param_vals = np.linspace(-10, 10, 100) - >>> llh_vals = param_vals**2 - >>> # Define spline interpolant - >>> knots, coeffs, deg = splrep(param_vals, llh_vals) - >>> # Instantiate spline prior - >>> prior = Prior(kind='spline', knots=knots, coeffs=coeffs, deg=deg) - >>> # Generate sample points for interpolation - >>> param_upsamp = np.linspace(-10, 10, 1000) - >>> # Evaluation of spline using splev - >>> llh_upsamp = splev(param_upsamp, tck=(knots, coeffs, deg), ext=2) - >>> # Check that evaluation of spline matches call to prior.llh() - >>> all(prior.llh(param_upsamp) == llh_upsamp) - True - - """ - def __init__(self, kind, **kwargs): - self._state_attrs = ['kind'] #, 'units', 'valid_range'] - self.units = None - kind = kind.lower() if isinstance(kind, str) else kind - - self.chi2 = lambda x: -2*self.llh(x) - # Dispatch the correct initialization method - if kind in [None, 'none', 'uniform']: - self.__init_uniform(**kwargs) - elif kind == 'gaussian': - self.__init_gaussian(**kwargs) - elif kind == 'linterp': - self.__init_linterp(**kwargs) - elif kind == 'spline': - self.__init_spline(**kwargs) - elif kind == 'jeffreys': - self.__init_jeffreys(**kwargs) - else: - raise TypeError('Unknown Prior kind `' + str(kind) + '`') - - @property - def units_str(self): - if self.units is None: - return '' - return ' ' + format(ureg(self.units).units, '~').strip() - - def __str__(self): - return self._str(self) - - def __repr__(self): - return '<' + str(self.__class__) + ' ' + self.__str__() + '>' - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - return recursiveEquality(self.state, other.state) - - def __ne__(self, other): - return not self.__eq__(other) - - @property - def state(self): - state = OrderedDict() - for attr in self._state_attrs: - state[attr] = getattr(self, attr) - return state - - @property - def serializable_state(self): - return self.state - - def __init_uniform(self, llh_offset=0): - self._state_attrs.append('llh_offset') - self.kind = 'uniform' - self.llh_offset = llh_offset - def llh(x): - return 0.*self.__strip(x) + self.llh_offset - self.llh = llh - self.max_at = np.nan - self.max_at_str = 'no maximum' - self.valid_range = (-np.inf * ureg(self.units), - np.inf * ureg(self.units)) - self._str = lambda s: 'uniform prior, llh_offset=%s' %self.llh_offset - - def __init_jeffreys(self, A, B): - """Calculate jeffreys prior as defined in Sivia p.125""" - self.kind = 'jeffreys' - A = interpret_quantity(A, expect_sequence=False) - B = interpret_quantity(B, expect_sequence=False) - assert A.dimensionality == B.dimensionality - self._state_attrs.extend(['A', 'B']) - self.units = str(A.units) - B = B.to(A.units) - self.A = A - self.B = B - def llh(x): - x = self.__strip(self.__convert(x)) - A = self.__strip(self.A) - B = self.__strip(self.B) - return - np.log(x) + np.log(np.log(B)-np.log(A)) - self.llh = llh - self.max_at = self.A - self.max_at_str = self.__stringify(self.max_at) - self.valid_range = (self.A * ureg(self.units), - self.B * ureg(self.units)) - self._str = lambda s: "jeffreys' prior, range [%s,%s]"%(self.A, self.B) - - def __init_gaussian(self, mean, stddev): - mean = interpret_quantity(mean, expect_sequence=False) - stddev = interpret_quantity(stddev, expect_sequence=False) - assert mean.dimensionality == stddev.dimensionality - self._state_attrs.extend(['mean', 'stddev']) - self.kind = 'gaussian' - if isinstance(mean, ureg.Quantity): - self.units = str(mean.units) - assert isinstance(stddev, ureg.Quantity), \ - str(type(stddev)) - stddev = stddev.to(self.units) - self.mean = mean - self.stddev = stddev - def llh(x): - x = self.__strip(self.__convert(x)) - m = self.__strip(self.mean) - s = self.__strip(self.stddev) - return -(x-m)**2 / (2*s**2) - self.llh = llh - self.max_at = self.mean - self.max_at_str = self.__stringify(self.max_at) - self.valid_range = (-np.inf * ureg(self.units), - np.inf * ureg(self.units)) - self._str = lambda s: 'gaussian prior: stddev=%s%s, maximum at %s%s' \ - %(self.__stringify(self.stddev), self.units_str, - self.__stringify(self.mean), self.units_str) - - def __init_linterp(self, param_vals, llh_vals): - param_vals = interpret_quantity(param_vals, expect_sequence=True) - self._state_attrs.extend(['param_vals', 'llh_vals']) - self.kind = 'linterp' - if isinstance(param_vals, ureg.Quantity): - self.units = str(param_vals.units) - self.interp = interp1d(param_vals.magnitude, llh_vals, kind='linear', copy=True, - bounds_error=True, assume_sorted=False) - self.param_vals = param_vals - self.llh_vals = llh_vals - def llh(x): - x = self.__strip(self.__convert(x)) - return self.interp(x) - self.llh = llh - self.max_at = self.param_vals[self.llh_vals == np.max(self.llh_vals)] - self.max_at_str = ', '.join([self.__stringify(v) for v in self.max_at]) - self.valid_range = (np.min(self.param_vals) * ureg(self.units), - np.max(self.param_vals) * ureg(self.units)) - self._str = lambda s: 'linearly-interpolated prior: valid in [%s, %s]%s, maxima at (%s)%s' \ - %(self.__stringify(np.min(self.param_vals)), - self.__stringify(np.max(self.param_vals)), self.units_str, - self.max_at_str, self.units_str) - - def __init_spline(self, knots, coeffs, deg, units=None): - knots = interpret_quantity(knots, expect_sequence=True) - self._state_attrs.extend(['knots', 'coeffs', 'deg']) - self.kind = 'spline' - if isunitless(knots): - knots = ureg.Quantity(knots, units) - elif units is not None: - units = ureg.Unit(units) - assert knots.dimensionality == units.dimensionality - knots = knots.to(units) - - self.units = str(knots.units) - - self.knots = knots - self.coeffs = coeffs - self.deg = deg - def llh(x): - x = self.__strip(self.__convert(x)) - return splev(x, tck=(self.__strip(self.knots), coeffs, deg), ext=2) - self.llh = llh - self.max_at = fminbound( - func=self.__attach_units_to_args(self.chi2), - x1=np.min(self.__strip(self.knots)), - x2=np.max(self.__strip(self.knots)), - ) - if self.units is not None: - self.max_at = self.max_at * ureg(self.units) - self.max_at_str = self.__stringify(self.max_at) - self.valid_range = (np.min(self.knots) * ureg(self.units), - np.max(self.knots) * ureg(self.units)) - self._str = lambda s: 'spline prior: deg=%d, valid in [%s, %s]%s; max at %s%s' \ - %(self.deg, self.__stringify(np.min(self.knots)), - self.__stringify(np.max(self.knots)), self.units_str, - self.max_at_str, self.units_str) - - def __check_units(self, param_val): - if self.units is None: - if (isinstance(param_val, ureg.Quantity) - and param_val.dimensionality - != ureg.dimensionless.dimensionality): - raise TypeError('Passed a value with units (%s), but this' - ' prior has no units.' %param_val.units) - else: - if not isinstance(param_val, ureg.Quantity): - raise TypeError('Passed a value without units, but this prior' - ' has units (%s).' %self.units) - if param_val.dimensionality != ureg(self.units).dimensionality: - raise TypeError('Passed a value with units (%s);' - ' incompatible with prior units (%s)' - %(param_val.units, self.units)) - - def __convert(self, x): - if self.units is None: - if (isinstance(x, ureg.Quantity) - and x.dimensionality != ureg.dimensionless.dimensionality): - raise TypeError('No units on prior, so cannot understand' - ' passed value (with units): %s' %x) - return x - if not isinstance(x, ureg.Quantity): - raise TypeError('Units %s must be present on param values (got' - ' %s, type %s instead).' - % (self.units, x, type(x))) - return x.to(self.units) - - @staticmethod - def __strip(x): - if isinstance(x, ureg.Quantity): - return x.magnitude - return x - - def __stringify(self, x): - if self.units is not None: - x = x.to(self.units).magnitude - return format(x, '0.4e') - - # TODO: proper function wrapping, including @wraps decorator - def __attach_units_to_args(self, func): - def newfunc(*args): - if self.units is None: - return func(*args) - u = ureg(self.units) - unitized_args = tuple([u*arg for arg in args]) - return func(*unitized_args) - return newfunc - - -def get_prior_bounds(obj, param=None, stddev=1.0): - """Obtain confidence intervals for given number of - standard deviations from parameter prior. - - Parameters - ---------- - obj : Prior, string, or Mapping - if str, interpret as path from which to load a dict - if dict, can be: - template settings dict; must supply parameter name via `param` - params dict; must supply parameter name via `param` - prior dict - - param : Param - Name of parameter for which to get bounds; - necessary if `obj` is either template settings or params - - stddev : float or Iterable of floats - number of stddevs - - - Returns - ------- - bounds : OrderedDict - A dictionary mapping the passed `stddev` values to the corresponding - bounds - - """ - if isscalar(stddev): - stddev = [stddev] - elif isinstance(stddev, Iterable): - stddev = list(stddev) - - bounds = OrderedDict() - for s in stddev: - bounds[s] = [] - - if isinstance(obj, Prior): - prior = obj - else: - if isinstance(obj, str): - obj = from_file(obj) - if 'params' in obj: - obj = obj['params'] - if param is not None and param in obj: - obj = obj[param] - if 'prior' in obj: - obj = obj['prior'] - - prior = Prior(**obj) - - logging.debug('Getting confidence region from prior: %s', prior) - x0 = prior.valid_range[0] - x1 = prior.valid_range[1] - x = ureg.Quantity(np.linspace(x0, x1, 10000), prior.units) - chi2 = prior.chi2(x) - for (i, xval) in enumerate(x[:-1]): - for s in stddev: - chi2_level = s**2 - if chi2[i] > chi2_level and chi2[i+1] < chi2_level: - bounds[s].append(xval) - elif chi2[i] < chi2_level and chi2[i+1] > chi2_level: - bounds[s].append(x[i+1]) - return bounds - - -# TODO enumerate all the cases rather than picking just a few. - -# pylint: disable=unused-variable -def test_Prior(): - """Unit tests for Prior class""" - uniform = Prior(kind='uniform', llh_offset=1.5) - jeffreys = Prior(kind='jeffreys', A=2 * ureg.s, B=3 * ureg.ns) - gaussian = Prior(kind='gaussian', mean=10, stddev=1) - x = np.linspace(-10, 10, 100) - y = x**2 - linterp = Prior(kind='linterp', param_vals=x * ureg.meter / ureg.s, llh_vals=y) - param_vals = np.linspace(-10, 10, 100) - llh_vals = x**2 - knots, coeffs, deg = splrep(param_vals, llh_vals) - spline = Prior(kind='spline', knots=knots*ureg.foot, coeffs=coeffs, - deg=deg) - param_upsamp = np.linspace(-10, 10, 1000)*ureg.foot - llh_upsamp = splev(param_upsamp.magnitude, tck=(knots, coeffs, deg), ext=2) - assert all(spline.llh(param_upsamp) == llh_upsamp) - - # Asking for param value outside of range should fail - try: - linterp.llh(-1000*ureg.mile / ureg.s) - except ValueError: - pass - else: - assert False - - # Asking for value at quantity with invalid units - try: - linterp.chi2(-1000*ureg.km) - except pint.DimensionalityError: - pass - else: - assert False - - try: - spline.llh(-1000*ureg.meter) - except ValueError: - pass - else: - assert False - - try: - spline.chi2(+1000*ureg.meter) - except ValueError: - pass - else: - assert False - - # Asking for param value when units were used should fail - try: - spline.llh(10) - except TypeError: - pass - else: - assert False - - # ... or vice versa - try: - gaussian.llh(10*ureg.meter) - except pint.DimensionalityError: - pass - else: - assert False - - # -- Test writing to and reading from JSON files -- # - - with tempfile.TemporaryDirectory() as temp_dir: - for pri in [uniform, jeffreys, gaussian, linterp, spline]: - fpath = join(temp_dir, pri.kind + '.json') - try: - to_file(pri, fpath) - loaded = from_file(fpath, cls=Prior) - assert loaded == pri - except: - logging.error('prior %s failed', pri.kind) - if isfile(fpath): - logging.error( - 'contents of %s:\n%s', - fpath, open(fpath, 'r').read(), - ) - raise - - logging.info('<< PASS : test_Prior >>') - - -if __name__ == '__main__': - set_verbosity(1) - test_Prior() diff --git a/pisa/core/stage.py b/pisa/core/stage.py deleted file mode 100644 index 6996ca33a..000000000 --- a/pisa/core/stage.py +++ /dev/null @@ -1,384 +0,0 @@ -""" -Stage class designed to be inherited by PISA services, such that all basic -functionality is built-in. -""" - -from __future__ import absolute_import, division - -from copy import deepcopy -from collections import OrderedDict -from collections.abc import Mapping -import inspect -import numpy as np -from tabulate import tabulate -from time import time - -from pisa.core.binning import MultiDimBinning -from pisa.core.container import ContainerSet -from pisa.utils.log import logging -from pisa.utils.format import arg_to_tuple -from pisa.core.param import ParamSelector -from pisa.utils.format import arg_str_seq_none -from pisa.utils.hash import hash_obj - - -__all__ = ["Stage"] -__author__ = "Philipp Eller, J. Lanfranchi" - - -class Stage(): - """ - PISA stage base class. Should be used to implement PISA Pi stages - - Specialization should be done via subclasses. - - Parameters - ---------- - data : ContainerSet or None - object to be passed along - - params : ParamSelector, dict of ParamSelector kwargs, ParamSet, or object instantiable to ParamSet - - expected_params : list of strings - List containing required `params` names. - - debug_mode : None, bool, or string - If None, False, or empty string, the stage runs normally. - - Otherwise, the stage runs in debug mode. This disables caching (forcing - recomputation of any nominal transforms, transforms, and outputs). - Services that subclass from the `Stage` class can then implement - further custom behavior when this mode is set by reading the value of - the `self.debug_mode` attribute. - - calc_mode : pisa.core.binning.MultiDimBinning, str, or None - Specify in what to do the calculation - - apply_mode : pisa.core.binning.MultiDimBinning, str, or None - Specify in what to do the application - - """ - - def __init__( - self, - data=None, - params=None, - expected_params=None, - debug_mode=None, - error_method=None, - calc_mode=None, - apply_mode=None, - profile=False, - ): - # Allow for string inputs, but have to populate into lists for - # consistent interfacing to one or multiple of these things - expected_params = arg_str_seq_none(expected_params, "expected_params") - - module_path = self.__module__.split(".") - - self.stage_name = module_path[-2] - """Name of the stage (e.g. flux, osc, aeff, reco, pid, etc.""" - - self.service_name = module_path[-1] - """Name of the specific service implementing the stage.""" - - self.expected_params = expected_params - """The full set of parameters (by name) that must be present in - `params`""" - - self._source_code_hash = None - - """Last-computed outputs; None if no outputs have been computed yet.""" - - self._attrs_to_hash = set([]) - """Attributes of the stage that are to be included in its hash value""" - - self.full_hash = True - """Whether to do full hashing if true, otherwise do fast hashing""" - - param_selector_keys = set( - ["regular_params", "selector_param_sets", "selections"] - ) - if isinstance(params, Mapping) and set(params.keys()) == param_selector_keys: - self._param_selector = ParamSelector(**params) - elif isinstance(params, ParamSelector): - self._param_selector = params - else: - self._param_selector = ParamSelector(regular_params=params) - - # Get the params from the ParamSelector, validate, and set as the - # params object for this stage - p = self._param_selector.params - - self._check_params(p, p.has_derived) - self.validate_params(p) - self._params = p - - if bool(debug_mode): - self._debug_mode = debug_mode - else: - self._debug_mode = None - - - self.calc_mode = calc_mode - self.apply_mode = apply_mode - self.data = data - - self._error_method = error_method - - self.param_hash = None - - self.profile = profile - self.setup_times = [] - self.calc_times = [] - self.apply_times = [] - - - def __repr__(self): - return 'Stage "%s"'%(self.__class__.__name__) - - def report_profile(self, detailed=False): - for stage in self.stages: - stage.report_profile(detailed=detailed) - - def report_profile(self, detailed=False): - def format(times): - tot = np.sum(times) - n = len(times) - ave = 0. if n == 0 else tot/n - return 'Total time %.5f s, n calls: %i, time/call: %.5f s'%(tot, n, ave) - - print(self.stage_name, self.service_name) - print('- setup: ', format(self.setup_times)) - if detailed: - print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.setup_times)])) - print('- calc: ', format(self.calc_times)) - if detailed: - print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.calc_times)])) - print('- apply: ', format(self.apply_times)) - if detailed: - print(' Individual runs: ', ', '.join(['%i: %.3f s' % (i, t) for i, t in enumerate(self.apply_times)])) - - def select_params(self, selections, error_on_missing=False): - """Apply the `selections` to contained ParamSet. - - Parameters - ---------- - selections : string or iterable - error_on_missing : bool - - """ - try: - self._param_selector.select_params(selections, error_on_missing=True) - except KeyError: - msg = "Not all of the selections %s found in this stage." % (selections,) - if error_on_missing: - # logging.error(msg) - raise - logging.trace(msg) - else: - logging.trace( - "`selections` = %s yielded `params` = %s" % (selections, self.params) - ) - - def _check_params(self, params, ignore_excess = False): - """Make sure that `expected_params` is defined and that exactly the - params specified in self.expected_params are present. - - An exception is made for having excess parameters if `ignore_excess` is True - This is useful for stages with `DerivedParams` that are used, but not explicitly accessed by the stage - """ - assert self.expected_params is not None - exp_p, got_p = set(self.expected_params), set(params.names) - if exp_p == got_p: - return - excess = got_p.difference(exp_p) - missing = exp_p.difference(got_p) - err_strs = [] - if len(missing) > 0: - err_strs.append("Missing params: %s" % ", ".join(sorted(missing))) - - - if len(excess) > 0: - if ignore_excess: #excess isn't a problem - if len(err_strs)==0: # return if there aren't any problems already - return - else: - err_strs.append("Excess params provided: %s" % ", ".join(sorted(excess))) - - raise ValueError( - "Expected parameters: %s;\n" % ", ".join(sorted(exp_p)) - + ";\n".join(err_strs) - ) - - - - @property - def params(self): - """Params""" - return self._params - - @property - def param_selections(self): - """Param selections""" - return sorted(deepcopy(self._param_selector.param_selections)) - - @property - def source_code_hash(self): - """Hash for the source code of this object's class. - - Not meant to be perfect, but should suffice for tracking provenance of - an object stored to disk that were produced by a Stage. - """ - if self._source_code_hash is None: - self._source_code_hash = hash_obj( - inspect.getsource(self.__class__), full_hash=self.full_hash - ) - return self._source_code_hash - - @property - def hash(self): - """Combines source_code_hash and params.hash for checking/tagging - provenance of persisted (on-disk) objects.""" - objects_to_hash = [self.source_code_hash, self.params.hash] - for attr in sorted(self._attrs_to_hash): - objects_to_hash.append( - hash_obj(getattr(self, attr), full_hash=self.full_hash) - ) - return hash_obj(objects_to_hash, full_hash=self.full_hash) - - def __hash__(self): - return self.hash - - def include_attrs_for_hashes(self, attrs): - """Include a class attribute or attributes to be included when - computing hashes (for all that apply: nominal transforms, transforms, - and/or outputs). - - This is a convenience that allows some customization of hashing (and - hence caching) behavior without having to override the hash-computation - methods (`_derive_nominal_transforms_hash`, `_derive_transforms_hash`, - and `_derive_outputs_hash`). - - Parameters - ---------- - attrs : string or sequence thereof - Name of the attribute(s) to include for hashes. Each must be an - existing attribute of the object at the time this method is - invoked. - - """ - if isinstance(attrs, str): - attrs = [attrs] - - # Validate that all are actually attrs before setting any - for attr in attrs: - assert isinstance(attr, str) - if not hasattr(self, attr): - raise ValueError( - '"%s" not an attribute of the class; not' - " adding *any* of the passed attributes %s to" - " attrs to hash." % (attr, attrs) - ) - - # Include the attribute names - for attr in attrs: - self._attrs_to_hash.add(attr) - - @property - def debug_mode(self): - """Read-only attribute indicating whether or not the stage is being run - in debug mode. None indicates non-debug mode, while non-none value - indicates a debug mode.""" - return self._debug_mode - - def validate_params(self, params): # pylint: disable=unused-argument, no-self-use - """Override this method to test if params are valid; e.g., check range - and dimensionality. Invalid params should be indicated by raising an - exception; no value should be returned.""" - return - - @property - def error_method(self): - """Read-only attribute indicating whether or not the stage will compute - errors for its transforms and outputs (whichever is applicable). Errors - on inputs are propagated regardless of this setting.""" - return self._error_method - - @property - def is_map(self): - return self.data.is_map - - def setup(self): - - # check that data is a ContainerSet (downstream modules assume this) - if self.data is not None: - if not isinstance(self.data, ContainerSet): - raise TypeError("`data` must be a `pisa.core.container.ContainerSet`") - - if self.calc_mode is not None: - self.data.representation = self.calc_mode - - # call the user-defined setup function - if self.profile: - start_t = time() - self.setup_function() - end_t = time() - self.setup_times.append(end_t - start_t) - else: - self.setup_function() - - # invalidate param hash: - self.param_hash = -1 - - def setup_function(self): - """Implement in services (subclasses of Stage)""" - pass - - def compute(self): - - # simplest caching algorithm: don't compute if params didn't change - new_param_hash = self.params.values_hash - if new_param_hash == self.param_hash: - logging.trace("cached output") - return - - if self.calc_mode is not None: - self.data.representation = self.calc_mode - - if self.profile: - start_t = time() - self.compute_function() - end_t = time() - self.calc_times.append(end_t - start_t) - else: - self.compute_function() - self.param_hash = new_param_hash - - def compute_function(self): - """Implement in services (subclasses of Stage)""" - pass - - def apply(self): - - if self.apply_mode is not None: - self.data.representation = self.apply_mode - - if self.profile: - start_t = time() - self.apply_function() - end_t = time() - self.apply_times.append(end_t - start_t) - else: - self.apply_function() - - - def apply_function(self): - """Implement in services (subclasses of Stage)""" - pass - - def run(self): - self.compute() - self.apply() - return None - diff --git a/pisa/core/translation.py b/pisa/core/translation.py deleted file mode 100644 index 17ca72604..000000000 --- a/pisa/core/translation.py +++ /dev/null @@ -1,935 +0,0 @@ -# pylint: disable=unsubscriptable-object, too-many-function-args, not-callable, unexpected-keyword-arg, no-value-for-parameter, too-many-boolean-expressions - -""" -Module for data representation translation methods -""" - -# TODO: -# - right now we distinguish on histogramming/lookup for scalars (normal) or array, which means that instead -# of just a single value per e.g. histogram bin, there can be an array of values -# This should be made more general that one function can handle everything...since now we have several -# functions doing similar things. not very pretty - -from __future__ import absolute_import, print_function, division - -from copy import deepcopy - -import numpy as np -from numba import guvectorize - -import numba -from numba import njit, prange -# When binnings are fully regular, we can use this for super speed -import fast_histogram as fh -from collections.abc import Iterable - -from concurrent.futures import ThreadPoolExecutor - -from pisa import FTYPE, TARGET, PISA_NUM_THREADS -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.utils.comparisons import recursiveEquality -from pisa.utils.log import logging, set_verbosity -from pisa.utils.numba_tools import myjit -from pisa.utils import vectorizer -from pisa.utils.profiler import line_profile, profile - -__all__ = [ - 'resample', - 'histogram', - 'lookup', - 'find_index', - 'find_index_unsafe', - 'test_histogram', - 'test_find_index', -] - - -FX = 'f4' if FTYPE == np.float32 else 'f8' - - -# --------- resampling ------------ - -def resample(weights, old_sample, old_binning, new_sample, new_binning): - """Resample binned data with a given binning into any arbitrary - `new_binning` - - Parameters - ---------- - weights : np.ndarray - old_sample : list of np.ndarray - old_binning : PISA MultiDimBinning - new_sample : list of np.ndarray - new_binning : PISA MultiDimBinning - - Returns - ------- - new_hist_vals - - """ - if old_binning.names != new_binning.names: - raise ValueError(f'cannot translate betwen {old_binning} and {new_binning}') - - # This is a two step process: first histogram the weights into the new binning - # and keep the flat_hist_counts - flat_hist = histogram_np(old_sample, weights, new_binning, apply_weights=True) - flat_hist_counts = histogram_np(old_sample, weights, new_binning, apply_weights=False) - - with np.errstate(divide='ignore', invalid='ignore'): - flat_hist /= flat_hist_counts - flat_hist = np.nan_to_num(flat_hist) - - # now do the inverse, a lookup of hist vals at `new_sample` points - new_hist_vals = lookup(new_sample, weights, old_binning) - - # Now, for bin we have 1 or less counts, take the lookedup value instead: - mask = flat_hist_counts > 1 - new_hist_vals[mask] = flat_hist[mask] - - return new_hist_vals - - -# --------- histogramming methods --------------- - -def histogram(sample, weights, binning, averaged, apply_weights=True): - """Histogram `sample` points, weighting by `weights`, according to `binning`. - - Parameters - ---------- - sample : list of np.ndarray - - weights : np.ndarray - - binning : PISA MultiDimBinning - - averaged : bool - If True, the histogram entries are averages of the numbers that end up - in a given bin. This for example must be used when oscillation - probabilities are translated, otherwise we end up with - probability*count per bin - - apply_weights : bool - wether to use weights or not - - """ - if not isinstance(binning, MultiDimBinning): - raise ValueError("Binning should be a PISA MultiDimBinning") - - if binning.is_irregular or not binning.is_lin: - flat_hist = histogram_np(sample, weights, binning, apply_weights=True) - else: - flat_hist = histogram_fh(sample, weights, binning, apply_weights=True) - if averaged: - if binning.is_irregular or not binning.is_lin: - flat_hist_counts = histogram_np(sample, weights, binning, - apply_weights=False) - else: - flat_hist_counts = histogram_fh(sample, weights, binning, - apply_weights=False) - with np.errstate(divide='ignore', invalid='ignore'): - flat_hist /= flat_hist_counts - flat_hist = np.nan_to_num(flat_hist) - - return flat_hist - -def _threaded_fh_histogramdd(sample, weights, bins, bin_range): - if not TARGET == "parallel": - return fh.histogramdd(sample=sample, weights=weights, bins=bins, range=bin_range) - - splits = PISA_NUM_THREADS - - with ThreadPoolExecutor(max_workers=splits) as pool: - chunk = len(sample[0]) // splits - chunked_sample = [] - if weights is not None: - chunked_weights = [] - ndim = len(sample) - for i in range(splits): - one_chunk = tuple(sample[j][i * chunk:(i+1) * chunk] for j in range(ndim)) - chunked_sample.append(one_chunk) - if weights is not None: - chunked_weights.append(weights[i * chunk:(i+1) * chunk]) - if weights is not None: - f = lambda s, w: fh.histogramdd(s, weights=w, bins=bins, range=bin_range) - results = pool.map(f, chunked_sample, chunked_weights) - else: - f = lambda s: fh.histogramdd(s, weights=None, bins=bins, range=bin_range) - results = pool.map(f, chunked_sample) - results = sum(results) - return results - -def histogram_fh(sample, weights, binning, apply_weights=True): # pylint: disable=missing-docstring - """Helper function for fast_histogram historams. - - This requires binnings to be fully regular and linear. - """ - - if binning.is_irregular or not binning.is_lin: - raise ValueError("Binning should be linearly-regular to use the fast_histogram library.") - ranges = [b.domain.m for b in binning] - bins = binning.num_bins - if isinstance(sample, np.ndarray): - if sample.ndim == 1: - _sample = (sample,) - else: - _sample = tuple(s for s in sample.T) - elif isinstance(sample, Iterable): - _sample = tuple(s for s in sample) - else: - raise ValueError("Sample should be either an (N, D) array, or an (N,) array, " - "or a (D, N) array-like.") - - if weights is not None and weights.ndim == 2: - # that means it's 1-dim data instead of scalars - hists = [] - for i in range(weights.shape[1]): - w = weights[:, i] if apply_weights else None - hist = _threaded_fh_histogramdd(sample=_sample, weights=w, bins=bins, bin_range=ranges) - hists.append(hist.ravel()) - flat_hist = np.stack(hists, axis=1) - else: - w = weights if apply_weights else None - - hist = _threaded_fh_histogramdd(sample=_sample, weights=w, bins=bins, bin_range=ranges) - flat_hist = hist.ravel() - return flat_hist.astype(FTYPE) - -def histogram_np(sample, weights, binning, apply_weights=True): # pylint: disable=missing-docstring - """helper function for numpy historams""" - - bin_edges = [edges.magnitude for edges in binning.bin_edges] - if weights is not None and weights.ndim == 2: - # that means it's 1-dim data instead of scalars - hists = [] - for i in range(weights.shape[1]): - w = weights[:, i] if apply_weights else None - hist, _ = np.histogramdd(sample=sample, weights=w, bins=bin_edges) - hists.append(hist.ravel()) - flat_hist = np.stack(hists, axis=1) - else: - w = weights if apply_weights else None - hist, _ = np.histogramdd(sample=sample, weights=w, bins=bin_edges) - flat_hist = hist.ravel() - return flat_hist.astype(FTYPE) - - -# ---------- Lookup methods --------------- - -def lookup(sample, flat_hist, binning): - """The inverse of histograming: Extract the histogram values at `sample` - points. - - Parameters - ---------- - sample : num_dims list of length-num_samples np.ndarray - Points at which to find histogram's values - flat_hist : np.ndarray - Histogram values - binning : num_dims MultiDimBinning - Histogram's binning - - Returns - ------- - hist_vals : len-num_samples np.ndarray - - Notes - ----- - Handles up to 3D. - - """ - - if not isinstance(binning, MultiDimBinning): - raise ValueError("Binning should be a PISA MultiDimBinning") - - assert binning.num_dims <= 3, 'can only do up to 3D at the moment' - bin_edges = [edges.magnitude for edges in binning.bin_edges] - - if not binning.is_irregular and binning.is_lin: - if flat_hist.ndim == 1: - hist_vals = np.zeros_like(sample[0]) - if binning.num_dims == 1: - lookup_regular_1d( - sample[0], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - out=hist_vals, - ) - elif binning.num_dims == 2: - lookup_regular_2d( - sample[0], - sample[1], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - ymin=bin_edges[1][0], - ymax=bin_edges[1][-1], - ny=len(bin_edges[1]) - 1, - out=hist_vals, - ) - elif binning.num_dims == 3: - lookup_regular_3d( - sample[0], - sample[1], - sample[2], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - ymin=bin_edges[1][0], - ymax=bin_edges[1][-1], - ny=len(bin_edges[1]) - 1, - zmin=bin_edges[2][0], - zmax=bin_edges[2][-1], - nz=len(bin_edges[2]) - 1, - out=hist_vals, - ) - - return hist_vals - elif flat_hist.ndim == 2: - hist_shape = (sample[0].size, flat_hist.shape[1]) - hist_vals = np.zeros(hist_shape, dtype=FTYPE) - if binning.num_dims == 1: - lookup_regular_1d_array( - sample[0], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - out=hist_vals, - ) - elif binning.num_dims == 2: - lookup_regular_2d_array( - sample[0], - sample[1], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - ymin=bin_edges[1][0], - ymax=bin_edges[1][-1], - ny=len(bin_edges[1]) - 1, - out=hist_vals, - ) - elif binning.num_dims == 3: - lookup_regular_3d_array( - sample[0], - sample[1], - sample[2], - flat_hist, - xmin=bin_edges[0][0], - xmax=bin_edges[0][-1], - nx=len(bin_edges[0]) - 1, - ymin=bin_edges[1][0], - ymax=bin_edges[1][-1], - ny=len(bin_edges[1]) - 1, - zmin=bin_edges[2][0], - zmax=bin_edges[2][-1], - nz=len(bin_edges[2]) - 1, - out=hist_vals, - ) - - return hist_vals - else: - raise NotImplementedError() - - if flat_hist.ndim == 1: - #print 'looking up 1D' - - hist_vals = np.zeros_like(sample[0]) - - if binning.num_dims == 1: - lookup_vectorized_1d( - sample[0], - flat_hist, - bin_edges[0], - out=hist_vals, - ) - elif binning.num_dims == 2: - lookup_vectorized_2d( - sample[0], - sample[1], - flat_hist, - bin_edges[0], - bin_edges[1], - out=hist_vals, - ) - elif binning.num_dims == 3: - lookup_vectorized_3d( - sample[0], - sample[1], - sample[2], - flat_hist, - bin_edges[0], - bin_edges[1], - bin_edges[2], - out=hist_vals, - ) - elif flat_hist.ndim == 2: - #print 'looking up ND' - hist_vals = np.zeros((sample[0].size, flat_hist.shape[1]), dtype=FTYPE) - - if binning.num_dims == 1: - lookup_vectorized_1d_arrays( - sample[0], - flat_hist, - bin_edges[0], - out=hist_vals, - ) - elif binning.num_dims == 2: - lookup_vectorized_2d_arrays( - sample[0], - sample[1], - flat_hist, - bin_edges[0], - bin_edges[1], - out=hist_vals, - ) - elif binning.num_dims == 3: - lookup_vectorized_3d_arrays( - sample[0], - sample[1], - sample[2], - flat_hist, - bin_edges[0], - bin_edges[1], - bin_edges[2], - out=hist_vals, - ) - else: - raise NotImplementedError() - - return hist_vals - - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_1d(x, flat_hist, xmin, xmax, nx, out): - normx = nx / (xmax - xmin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - ix = (int)((x[idx] - xmin) * normx) - out[idx] = flat_hist[ix] - continue - out[idx] = 0. - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_2d(x, y, flat_hist, xmin, xmax, nx, ymin, ymax, ny, out): - normx = nx / (xmax - xmin) - normy = ny / (ymax - ymin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - if y[idx] >= ymin and y[idx] < ymax: - ix = (int)((x[idx] - xmin) * normx) - iy = (int)((y[idx] - ymin) * normy) - out[idx] = flat_hist[iy + ny*ix] - continue - out[idx] = 0. - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_3d(x, y, z, flat_hist, xmin, xmax, nx, ymin, ymax, ny, - zmin, zmax, nz, out): - normx = nx / (xmax - xmin) - normy = ny / (ymax - ymin) - normz = nz / (zmax - zmin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - if y[idx] >= ymin and y[idx] < ymax: - if z[idx] >= zmin and z[idx] < zmax: - ix = (int)((x[idx] - xmin) * normx) - iy = (int)((y[idx] - ymin) * normy) - iz = (int)((z[idx] - zmin) * normz) - out[idx] = flat_hist[iz + nz*iy + nz*ny*ix] - continue - out[idx] = 0. - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_1d_array(x, flat_hist, xmin, xmax, nx, out): - normx = nx / (xmax - xmin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - ix = (int)((x[idx] - xmin) * normx) - for d in range(flat_hist.shape[1]): - out[idx][d] = flat_hist[ix][d] - continue - for d in range(flat_hist.shape[1]): - out[idx][d] = 0. - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_2d_array(x, y, flat_hist, xmin, xmax, nx, ymin, ymax, ny, out): - normx = nx / (xmax - xmin) - normy = ny / (ymax - ymin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - if y[idx] >= ymin and y[idx] < ymax: - ix = (int)((x[idx] - xmin) * normx) - iy = (int)((y[idx] - ymin) * normy) - for d in range(flat_hist.shape[1]): - out[idx][d] = flat_hist[iy + ny*ix][d] - continue - for d in range(flat_hist.shape[1]): - out[idx][d] = 0. - -@njit(parallel=True if TARGET == "parallel" else False) -def lookup_regular_3d_array(x, y, z, flat_hist, xmin, xmax, nx, ymin, ymax, ny, - zmin, zmax, nz, out): - normx = nx / (xmax - xmin) - normy = ny / (ymax - ymin) - normz = nz / (zmax - zmin) - for idx in prange(len(out)): - if x[idx] >= xmin and x[idx] < xmax: - if y[idx] >= ymin and y[idx] < ymax: - if z[idx] >= zmin and z[idx] < zmax: - ix = (int)((x[idx] - xmin) * normx) - iy = (int)((y[idx] - ymin) * normy) - iz = (int)((z[idx] - zmin) * normz) - for d in range(flat_hist.shape[1]): - out[idx][d] = flat_hist[iz + nz*iy + nz*ny*ix][d] - continue - for d in range(flat_hist.shape[1]): - out[idx][d] = 0. - -@myjit -def find_index(val, bin_edges): - """Find index in binning for `val`. If `val` is below binning range or is - nan, return -1; if `val` is above binning range, return num_bins. Edge - inclusivity/exclusivity is defined as .. :: - - [ bin 0 ) [ bin 1 ) ... [ bin num_bins-1 ] - - Using these indices to produce histograms should yield identical results - (ignoring underflow and overflow, which `find_index` has) that are - equivalent to those produced by ``numpy.histogramdd``. - - Parameters - ---------- - val : scalar - Value for which to find bin index - - bin_edges : 1d numpy ndarray of 2 or more scalars - Must be monotonically increasing, and all bins are assumed to be - adjacent - - Returns - ------- - bin_idx : int in [-1, num_bins] - -1 is returned for underflow or if `val` is nan. `num_bins` is returned - for overflow. Otherwise, for bin_edges[0] <= `val` <= bin_edges[-1], - 0 <= `bin_idx` <= num_bins - 1 - - """ - - num_edges = len(bin_edges) - num_bins = num_edges - 1 - assert num_bins >= 1, 'bin_edges must define at least one bin' - - underflow_idx = -1 - overflow_idx = num_bins - - if val >= bin_edges[0]: - if val <= bin_edges[-1]: - bin_idx = find_index_unsafe(val, bin_edges) - # Paranoia: In case of unforseen numerical issues, force clipping of - # returned bin index to [0, num_bins - 1] (any `val` outside of binning - # is already handled, so this should be valid) - bin_idx = min(max(0, bin_idx), num_bins - 1) - else: - bin_idx = overflow_idx - else: # either value is below first bin or is NaN - bin_idx = underflow_idx - - return bin_idx - - -@myjit -def find_index_unsafe(val, bin_edges): - """Find bin index of `val` within binning defined by `bin_edges`. - - Validity of `val` and `bin_edges` is not checked. - - Parameters - ---------- - val : scalar - Assumed to be within range of `bin_edges` (including lower and upper - bin edges) - bin_edges : array - - Returns - ------- - index - - See also - -------- - find_index : includes bounds checking and handling of special cases - - """ - # Initialize to point to left-most edge - left_edge_idx = 0 - - # Initialize to point to right-most edge - right_edge_idx = len(bin_edges) - 1 - - while left_edge_idx < right_edge_idx: - # See where value falls w.r.t. an edge ~midway between left and right edges - # ``>> 1``: integer division by 2 (i.e., divide w/ truncation) - test_edge_idx = (left_edge_idx + right_edge_idx) >> 1 - - # ``>=``: bin left edges are inclusive - if val >= bin_edges[test_edge_idx]: - left_edge_idx = test_edge_idx + 1 - else: - right_edge_idx = test_edge_idx - - # break condition of while loop is that left_edge_idx points to the - # right edge of the bin that `val` is inside of; that is one more than - # that _bin's_ index - return left_edge_idx - 1 - - -@guvectorize( - [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:])'], - '(), (j), (k) -> ()', - target='cpu', -) -def lookup_vectorized_1d( - sample, - flat_hist, - bin_edges, - weights, -): - """Vectorized gufunc to perform the lookup""" - x = sample[0] - if (bin_edges[0] <= x <= bin_edges[-1]): - idx = find_index_unsafe(x, bin_edges) - weights[0] = flat_hist[idx] - else: # outside of binning or nan - weights[0] = 0. - -@guvectorize( - [f'({FX}[:], {FX}[:, :], {FX}[:], {FX}[:])'], - '(), (j, d), (k) -> (d)', - target='cpu', -) -def lookup_vectorized_1d_arrays( - sample, - flat_hist, - bin_edges, - weights, -): - """Vectorized gufunc to perform the lookup""" - x = sample[0] - if (bin_edges[0] <= x <= bin_edges[-1]): - idx = find_index_unsafe(x, bin_edges) - for i in range(weights.size): - weights[i] = flat_hist[idx, i] - else: # outside of binning or nan - for i in range(weights.size): - weights[i] = 0. - -@guvectorize( - [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], - '(), (), (j), (k), (l) -> ()', - target='cpu', -) -def lookup_vectorized_2d( - sample_x, - sample_y, - flat_hist, - bin_edges_x, - bin_edges_y, - weights, -): - """Vectorized gufunc to perform the lookup""" - x = sample_x[0] - y = sample_y[0] - if ( - x >= bin_edges_x[0] - and x <= bin_edges_x[-1] - and y >= bin_edges_y[0] - and y <= bin_edges_y[-1] - ): - idx_x = find_index_unsafe(x, bin_edges_x) - idx_y = find_index_unsafe(y, bin_edges_y) - idx = idx_x * (len(bin_edges_y) - 1) + idx_y - weights[0] = flat_hist[idx] - else: # outside of binning or nan - weights[0] = 0. - - -@guvectorize( - [f'({FX}[:], {FX}[:], {FX}[:, :], {FX}[:], {FX}[:], {FX}[:])'], - '(), (), (j, d), (k), (l) -> (d)', - target='cpu', -) -def lookup_vectorized_2d_arrays( - sample_x, - sample_y, - flat_hist, - bin_edges_x, - bin_edges_y, - weights, -): - """Vectorized gufunc to perform the lookup while flat hist and weights have - both a second dimension - """ - x = sample_x[0] - y = sample_y[0] - if ( - x >= bin_edges_x[0] - and x <= bin_edges_x[-1] - and y >= bin_edges_y[0] - and y <= bin_edges_y[-1] - ): - idx_x = find_index_unsafe(x, bin_edges_x) - idx_y = find_index_unsafe(y, bin_edges_y) - idx = idx_x * (len(bin_edges_y) - 1) + idx_y - for i in range(weights.size): - weights[i] = flat_hist[idx, i] - else: # outside of binning or nan - for i in range(weights.size): - weights[i] = 0. - - -@guvectorize( - [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], - '(), (), (), (j), (k), (l), (m) -> ()', - target='cpu', -) -def lookup_vectorized_3d( - sample_x, - sample_y, - sample_z, - flat_hist, - bin_edges_x, - bin_edges_y, - bin_edges_z, - weights, -): - """Vectorized gufunc to perform the lookup""" - x = sample_x[0] - y = sample_y[0] - z = sample_z[0] - if ( - x >= bin_edges_x[0] - and x <= bin_edges_x[-1] - and y >= bin_edges_y[0] - and y <= bin_edges_y[-1] - and z >= bin_edges_z[0] - and z <= bin_edges_z[-1] - ): - idx_x = find_index_unsafe(x, bin_edges_x) - idx_y = find_index_unsafe(y, bin_edges_y) - idx_z = find_index_unsafe(z, bin_edges_z) - idx = (idx_x * (len(bin_edges_y) - 1) + idx_y) * (len(bin_edges_z) - 1) + idx_z - weights[0] = flat_hist[idx] - else: # outside of binning or nan - weights[0] = 0. - - -@guvectorize( - [f'({FX}[:], {FX}[:], {FX}[:], {FX}[:, :], {FX}[:], {FX}[:], {FX}[:], {FX}[:])'], - '(), (), (), (j, d), (k), (l), (m) -> (d)', - target='cpu', -) -def lookup_vectorized_3d_arrays( - sample_x, - sample_y, - sample_z, - flat_hist, - bin_edges_x, - bin_edges_y, - bin_edges_z, - weights, -): - """Vectorized gufunc to perform the lookup while flat hist and weights have - both a second dimension""" - x = sample_x[0] - y = sample_y[0] - z = sample_z[0] - if ( - x >= bin_edges_x[0] - and x <= bin_edges_x[-1] - and y >= bin_edges_y[0] - and y <= bin_edges_y[-1] - and z >= bin_edges_z[0] - and z <= bin_edges_z[-1] - ): - idx_x = find_index_unsafe(x, bin_edges_x) - idx_y = find_index_unsafe(y, bin_edges_y) - idx_z = find_index_unsafe(z, bin_edges_z) - idx = (idx_x * (len(bin_edges_y) - 1) + idx_y) * (len(bin_edges_z) - 1) + idx_z - for i in range(weights.size): - weights[i] = flat_hist[idx, i] - else: # outside of binning or nan - for i in range(weights.size): - weights[i] = 0. - - -def test_histogram(): - """Unit tests for `histogram` function. - - Correctness is defined as matching the histogram produced by - numpy.histogramdd. - """ - all_num_bins = [2, 3, 4] - n_evts = 10000 - rand = np.random.RandomState(seed=0) - - weights = rand.rand(n_evts).astype(FTYPE) - binning = [] - sample = [] - for num_dims, num_bins in enumerate(all_num_bins, start=1): - binning.append( - OneDimBinning( - name=f'dim{num_dims - 1}', - num_bins=num_bins, - is_lin=True, - domain=[0, num_bins], - ) - ) - - s = rand.rand(n_evts).astype(FTYPE) * num_bins - sample.append(s) - - bin_edges = [b.edge_magnitudes for b in binning] - test = histogram(sample, weights, MultiDimBinning(binning), averaged=False) - ref, _ = np.histogramdd(sample=sample, bins=bin_edges, weights=weights) - ref = ref.astype(FTYPE).ravel() - assert recursiveEquality(test, ref), f'\ntest:\n{test}\n\nref:\n{ref}' - - test_avg = histogram(sample, weights, MultiDimBinning(binning), averaged=True) - ref_counts, _ = np.histogramdd(sample=sample, bins=bin_edges, weights=None) - ref_counts = ref_counts.astype(FTYPE).ravel() - ref_avg = (ref / ref_counts).astype(FTYPE) - assert recursiveEquality(test_avg, ref_avg), \ - f'\ntest_avg:\n{test_avg}\n\nref_avg:\n{ref_avg}' - - logging.info('<< PASS : test_histogram >>') - - -def test_find_index(): - """Unit tests for `find_index` function. - - Correctness is defined as producing the same histogram as numpy.histogramdd - by using the output of `find_index` (ignoring underflow and overflow values). - Additionally, -1 should be returned if a value is below the range - (underflow) or is nan, and num_bins should be returned for a value above - the range (overflow). - """ - # Negative, positive, integer, non-integer, binary-unrepresentable (0.1) edges - basic_bin_edges = [-1, -0.5, -0.1, 0, 0.1, 0.5, 1, 2, 3, 4] - - failures = 0 - for basic_bin_edges in [ - # Negative, positive, integer, non-integer, binary-unrepresentable (0.1) edges - [-1, -0.5, -0.1, 0, 0.1, 0.5, 1, 2, 3, 4], - - # A single infinite bin: [-np.inf, np.inf] - [], - - # Half-infinite bins (lower or upper edge) & [-inf, .1, +inf] - [0.1], - - # Single bin with finite edges & +/-inf-edge(s)-added variants - [-0.1, 0.1], - ]: - # Bin edges from above, w/ and w/o +/-inf as left and/or right edges - for le, re in [ - (None, None), - (-np.inf, None), - (None, np.inf), - (-np.inf, np.inf) - ]: - bin_edges = deepcopy(basic_bin_edges) - if le is not None: - bin_edges = [le] + bin_edges - if re is not None: - bin_edges = bin_edges + [re] - if len(bin_edges) < 2: - continue - logging.debug('bin_edges being tested: %s', bin_edges) - bin_edges = np.array(bin_edges, dtype=FTYPE) - - num_bins = len(bin_edges) - 1 - underflow_idx = -1 - overflow_idx = num_bins - - # - # Construct test values to try out - # - - non_finite_vals = [-np.inf, +np.inf, np.nan] - - # Values within bins (i.e., not on edges) - inbin_vals = [] - for idx in range(len(bin_edges) - 1): - lower_be = bin_edges[idx] - upper_be = bin_edges[idx + 1] - if np.isfinite(lower_be): - if np.isfinite(upper_be): - inbin_val = (lower_be + upper_be) / 2 - else: - inbin_val = lower_be + 10.5 - else: - if np.isfinite(upper_be): - inbin_val = upper_be - 10.5 - else: - inbin_val = 10.5 - inbin_vals.append(inbin_val) - - # Values above/below bin edges by one unit of floating point - # accuracy - eps = np.finfo(FTYPE).eps # pylint: disable=no-member - below_edges_vals = [FTYPE((1 - eps)*be) for be in bin_edges] - above_edges_vals = [FTYPE((1 + eps)*be) for be in bin_edges] - - test_vals = np.concatenate( - [ - non_finite_vals, - bin_edges, - inbin_vals, - below_edges_vals, - above_edges_vals, - ] - ) - logging.trace('test_vals = %s', test_vals) - - # - # Run tests - # - for val in test_vals: - val = FTYPE(val) - - np_histvals, _ = np.histogramdd([val], np.atleast_2d(bin_edges)) - nonzero_indices = np.nonzero(np_histvals)[0] # select first & only dim - if np.isnan(val): - assert len(nonzero_indices) == 0, str(len(nonzero_indices)) - expected_idx = underflow_idx - elif val < bin_edges[0]: - assert len(nonzero_indices) == 0, str(len(nonzero_indices)) - expected_idx = underflow_idx - elif val > bin_edges[-1]: - assert len(nonzero_indices) == 0, str(len(nonzero_indices)) - expected_idx = overflow_idx - else: - assert len(nonzero_indices) == 1, str(len(nonzero_indices)) - expected_idx = nonzero_indices[0] - - found_idx = find_index(val, bin_edges) - - if found_idx != expected_idx: - failures += 1 - msg = 'val={}, edges={}: Expected idx={}, found idx={}'.format( - val, bin_edges, expected_idx, found_idx - ) - logging.error(msg) - - assert failures == 0, f"{failures} failures, inspect ERROR messages above for info" - - logging.info('<< PASS : test_find_index >>') - - -if __name__ == '__main__': - set_verbosity(1) - test_find_index() - test_histogram() diff --git a/pisa/images/PINGUSimulationChain.png b/pisa/images/PINGUSimulationChain.png deleted file mode 100644 index 5b817257e..000000000 Binary files a/pisa/images/PINGUSimulationChain.png and /dev/null differ diff --git a/pisa/scripts/README.md b/pisa/scripts/README.md deleted file mode 100644 index 1e03b9c8f..000000000 --- a/pisa/scripts/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# pisa.scripts - -Analysis and helper scripts (executables). diff --git a/pisa/scripts/__init__.py b/pisa/scripts/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/scripts/add_flux_to_events_file.py b/pisa/scripts/add_flux_to_events_file.py deleted file mode 100755 index e00493c8a..000000000 --- a/pisa/scripts/add_flux_to_events_file.py +++ /dev/null @@ -1,201 +0,0 @@ -#! /usr/bin/env python - -""" -Add neutrino fluxes (and neutrino weights(osc*flux*sim_weight) if needed) for -each event. -""" - - -from __future__ import absolute_import, division, print_function - -from argparse import ArgumentParser -import glob -from os import listdir -from os.path import basename, dirname, isdir, isfile, join, splitext - -from pisa.utils.fileio import from_file, to_file, mkdir, nsort -from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights -from pisa.utils.hdf import HDF5_EXTS -from pisa.utils.log import logging, set_verbosity -from pisa.utils.resources import find_resource - - -__all__ = ['add_fluxes_to_file', 'main'] - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - -def add_fluxes_to_file(data_file_path, flux_table, flux_name, - outdir=None, label=None, overwrite=False): - """Add fluxes to PISA events file (e.g. for use by an mc stage) - - Parameters - ----------- - data_file_path : string - flux_table - flux_name - outdir : string or None - If None, output is to the same directory as `data_file_path` - overwrite : bool, optional - """ - data, attrs = from_file(find_resource(data_file_path), return_attrs=True) - bname, ext = splitext(basename(data_file_path)) - assert ext.lstrip('.') in HDF5_EXTS - - if outdir is None: - outdir = dirname(data_file_path) - - if label is None: - label = '' - else: - assert isinstance(label, str) - label = '_' + label - - outpath = join(outdir, '{}__with_fluxes{}{}'.format(bname, label, ext)) - - if not overwrite and isfile(outpath): - logging.warning('Output path "%s" already exists, not regenerating', - outpath) - return - - mkdir(outdir, warn=False) - - # Loop over the top-level keys - for primary, primary_node in data.items(): - - # Only handling neutrnio fluxes here, skip past e.g. muon or noise MC events - if primary.startswith("nu") : - - logging.info('Adding fluxes to "%s" events', primary) - - # Input data may have one layer of hierarchy before the event variables (e.g. [numu_cc]), - # or for older files there maybe be a second layer (e.g. [numu][cc]). - # Handling either case here... - if "true_energy" in primary_node : - secondary_nodes = [primary_node] - else : - secondary_nodes = primary_node.values() - - for secondary_node in secondary_nodes : - - true_e = secondary_node['true_energy'] - true_cz = secondary_node['true_coszen'] - - # calculate all 4 fluxes (nue, nuebar, numu and numubar) - for table in ['nue', 'nuebar', 'numu', 'numubar']: - flux = calculate_2d_flux_weights( - true_energies=true_e, - true_coszens=true_cz, - en_splines=flux_table[table] - ) - keyname = flux_name + '_' + table + '_flux' - secondary_node[keyname] = flux - - to_file(data, outpath, attrs=attrs, overwrite=overwrite) - logging.info('--> Wrote file including fluxes to "%s"', outpath) - - -def parse_args(description=__doc__): - """Parse command-line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - '--input', metavar='(H5_FILE|DIR)', nargs='+', type=str, required=True, - help='''Path to a PISA events HDF5 file or a directory containing HDF5 - files; output files are copies of this/these, but with flux fields - added.''' - ) - parser.add_argument( - '--flux-file', metavar='FLUX_FILE', type=str, required=True, - help='''Flux file from which to obtain fluxes, e.g. - "flux/honda-2015-spl-solmin-aa.d"''' - ) - parser.add_argument( - '--outdir', metavar='DIR', default=None, - help='''Directory to save the output to; if none is provided, output is - placed in same dir as --input.''' - ) - parser.add_argument( - '--label', type=str, default=None, - help='''Label to give output files. If a label is not specified, - default label is the flux file's basename with extension removed.''' - ) - parser.add_argument( - '-v', action='count', default=1, - help='''Increase verbosity level _beyond_ INFO level by specifying -v - (DEBUG) or -vv (TRACE)''' - ) - return parser.parse_args() - - -def main(): - """Run `add_fluxes_to_file` function with arguments from command line""" - args = parse_args() - set_verbosity(args.v) - - flux_table = load_2d_table(args.flux_file) - flux_file_bname, ext = splitext(basename(args.flux_file)) - - input_paths = [] - for input_path in args.input: - if isdir(input_path): - for filename in listdir(input_path): - filepath = join(input_path, filename) - input_paths.append(filepath) - - else: - input_paths += glob.glob(input_path) - - input_paths = nsort(input_paths) - - paths_to_process = [] - basenames = [] - for input_path in input_paths: - if isdir(input_path): - logging.debug('Path "%s" is a directory, skipping', input_path) - continue - - firstpart, ext = splitext(input_path) - if ext.lstrip('.') not in HDF5_EXTS: - logging.debug('Path "%s" is not an HDF5 file, skipping', input_path) - continue - - bname = basename(firstpart) - if bname in basenames: - raise ValueError( - 'Found files with duplicate basename "%s" (despite files' - ' having different paths); resolve the ambiguous names and' - ' re-run. Offending files are:\n "%s"\n "%s"' - % (bname, - paths_to_process[basenames.index(bname)], - input_path) - ) - - basenames.append(bname) - paths_to_process.append(input_path) - - logging.info('Will process %d input file(s)...', len(paths_to_process)) - - for filepath in paths_to_process: - logging.info('Working on input file "%s"', filepath) - add_fluxes_to_file( - data_file_path=filepath, - flux_table=flux_table, - flux_name='nominal', - outdir=args.outdir, - label=flux_file_bname - ) - - -if __name__ == '__main__': - main() diff --git a/pisa/scripts/compare.py b/pisa/scripts/compare.py deleted file mode 100755 index d45522958..000000000 --- a/pisa/scripts/compare.py +++ /dev/null @@ -1,723 +0,0 @@ -#! /usr/bin/env python - -""" -Compare two entities: Maps, map sets, pipelines, or distribution makers. One -kind can be compared against another, so long as the resulting map(s) have -equivalent names and binning. The result each entity specification is formatted -into a MapSet and can be stored to disk so that e.g. re-running a -DistributionMaker is unnecessary to reproduce the results. -""" - -# TODO: make use of `MapSet.compare()` method (and/or expand that until it is -# equally useful here) - -from argparse import ArgumentParser -from collections import OrderedDict -from copy import deepcopy -import os - -import numpy as np - -from pisa import EPSILON -from pisa.core.distribution_maker import DistributionMaker -from pisa.core.map import Map, MapSet -from pisa.core.pipeline import Pipeline -from pisa.utils.fileio import mkdir, to_file -from pisa.utils.log import logging, set_verbosity -from pisa.utils.plotter import Plotter - - -__all__ = ['DISTRIBUTIONMAKER_SOURCE_STR', 'PIPELINE_SOURCE_STR', - 'MAP_SOURCE_STR', 'MAPSET_SOURCE_STR', - 'parse_args', 'compare', 'main'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -DISTRIBUTIONMAKER_SOURCE_STR = ( - 'DistributionMaker instantiated from multiple pipeline config files' -) -PIPELINE_SOURCE_STR = 'Pipeline instantiated from a pipeline config file' -MAP_SOURCE_STR = 'Map stored on disk' -MAPSET_SOURCE_STR = 'MapSet stored on disk' - - -def compare(outdir, ref, ref_label, test, test_label, asymm_max=None, - asymm_min=None, combine=None, diff_max=None, diff_min=None, - fract_diff_max=None, fract_diff_min=None, json=False, pdf=False, - png=False, ref_abs=False, ref_param_selections=None, sum=None, - test_abs=False, test_param_selections=None): - """Compare two entities. The result each entity specification is - formatted into a MapSet and stored to disk, so that e.g. re-running - a DistributionMaker is unnecessary to reproduce the results. - - Parameters - ---------- - outdir : string - Store output plots to this directory - - ref : string or array of strings - Pipeline settings config file that generates reference output, - or a stored map or map set. Multiple pipelines, maps, or map sets are - supported - - ref_abs : bool - Use the absolute value of the reference plot for comparisons - - ref_label : string - Label for reference - - ref_param-selections : string - Param selections to apply to ref pipeline config(s). Not - applicable if ref specifies stored map or map sets - - test : string or array of strings - Pipeline settings config file that generates test output, or a - stored map or map set. Multiple pipelines, maps, or map sets are - supported - - test_abs : bool - Use the absolute value of the test plot for comparisons - - test_label : string - Label for test - - test_param_selections : None or string - Param selections to apply to test pipeline config(s). Not - applicable if test specifies stored map or map sets - - combine : None or string or array of strings - Combine by wildcard string, where string globbing (a la command - line) uses asterisk for any number of wildcard characters. Use - single quotes such that asterisks do not get expanded by the - shell. Multiple combine strings supported - - sum : None or int - Sum over (and hence remove) the specified axis or axes. I.e., - project the map onto remaining (unspecified) axis or axes - - json : bool - Save output maps in compressed json (json.bz2) format - - pdf : bool - Save plots in PDF format. If neither this nor png is - specified, no plots are produced - - png : bool - Save plots in PNG format. If neither this nor pdf is specfied, - no plots are produced - - diff_min : None or float - Difference plot vmin; if you specify only one of diff_min or - diff_max, symmetric limits are automatically used (min = -max) - - diff_max : None or float - Difference plot max; if you specify only one of diff_min or - diff_max, symmetric limits are automatically used (min = -max) - - fract_diff_min : None or float - Fractional difference plot vmin; if you specify only one of - fract_diff_min or fract_diff_max, symmetric limits are - automatically used (min = -max) - - fract_diff_max : None or float - Fractional difference plot max; if you specify only one of - fract_diff_min or fract_diff_max, symmetric limits are - automatically used (min = -max) - - asymm_min : None or float - Asymmetry plot vmin; if you specify only one of asymm_min or - asymm_max, symmetric limits are automatically used (min = -max) - - asymm_max : None or float - Fractional difference plot max; if you specify only one of - asymm_min or asymm_max, symmetric limits are automatically used - (min = -max) - - Returns - ------- - summary_stats : dict - Dictionary containing a summary for each h Map processed - - diff : MapSet - MapSet of the difference - - (Test - Ref) - - fract_diff : MapSet - MapSet of the fractional difference - - (Test - Ref) / Ref - - asymm : MapSet - MapSet of the asymmetric fraction difference or pull - - (Test - Ref) / sqrt(Ref) - - """ - ref_plot_label = ref_label - if ref_abs and not ref_label.startswith('abs'): - ref_plot_label = 'abs(%s)' % ref_plot_label - test_plot_label = test_label - if test_abs and not test_label.startswith('abs'): - test_plot_label = 'abs(%s)' % test_plot_label - - plot_formats = [] - if pdf: - plot_formats.append('pdf') - if png: - plot_formats.append('png') - - diff_symm = True - if diff_min is not None and diff_max is None: - diff_max = -diff_min - diff_symm = False - if diff_max is not None and diff_min is None: - diff_min = -diff_max - diff_symm = False - - fract_diff_symm = True - if fract_diff_min is not None and fract_diff_max is None: - fract_diff_max = -fract_diff_min - fract_diff_symm = False - if fract_diff_max is not None and fract_diff_min is None: - fract_diff_min = -fract_diff_max - fract_diff_symm = False - - asymm_symm = True - if asymm_max is not None and asymm_min is None: - asymm_min = -asymm_max - asymm_symm = False - if asymm_min is not None and asymm_max is None: - asymm_max = -asymm_min - asymm_symm = False - - outdir = os.path.expanduser(os.path.expandvars(outdir)) - mkdir(outdir) - - # Get the reference distribution(s) into the form of a test MapSet - p_ref = None - ref_source = None - if isinstance(ref, Map): - p_ref = MapSet(ref) - ref_source = MAP_SOURCE_STR - elif isinstance(ref, MapSet): - p_ref = ref - ref_source = MAPSET_SOURCE_STR - elif isinstance(ref, Pipeline): - if ref_param_selections is not None: - ref.select_params(ref_param_selections) - p_ref = ref.get_outputs() - ref_source = PIPELINE_SOURCE_STR - elif isinstance(ref, DistributionMaker): - if ref_param_selections is not None: - ref.select_params(ref_param_selections) - p_ref = ref.get_outputs() - ref_source = DISTRIBUTIONMAKER_SOURCE_STR - else: - if len(ref) == 1: - try: - ref_pipeline = Pipeline(config=ref[0]) - except: - pass - else: - ref_source = PIPELINE_SOURCE_STR - if ref_param_selections is not None: - ref_pipeline.select_params(ref_param_selections) - p_ref = ref_pipeline.get_outputs() - else: - try: - ref_dmaker = DistributionMaker(pipelines=ref) - except: - pass - else: - ref_source = DISTRIBUTIONMAKER_SOURCE_STR - if ref_param_selections is not None: - ref_dmaker.select_params(ref_param_selections) - p_ref = ref_dmaker.get_outputs() - - if p_ref is None: - try: - p_ref = [Map.from_json(f) for f in ref] - except: - pass - else: - ref_source = MAP_SOURCE_STR - p_ref = MapSet(p_ref) - - if p_ref is None: - assert ref_param_selections is None - assert len(ref) == 1, 'Can only handle one MapSet' - try: - p_ref = MapSet.from_json(ref[0]) - except: - pass - else: - ref_source = MAPSET_SOURCE_STR - - if p_ref is None: - raise ValueError( - 'Could not instantiate the reference Pipeline, DistributionMaker,' - ' Map, or MapSet from ref value(s) %s' % ref - ) - ref = p_ref - - logging.info('Reference map(s) derived from a ' + ref_source) - - # Get the test distribution(s) into the form of a test MapSet - p_test = None - test_source = None - if isinstance(test, Map): - p_test = MapSet(test) - test_source = MAP_SOURCE_STR - elif isinstance(test, MapSet): - p_test = test - test_source = MAPSET_SOURCE_STR - elif isinstance(test, Pipeline): - if test_param_selections is not None: - test.select_params(test_param_selections) - p_test = test.get_outputs() - test_source = PIPELINE_SOURCE_STR - elif isinstance(test, DistributionMaker): - if test_param_selections is not None: - test.select_params(test_param_selections) - p_test = test.get_outputs() - test_source = DISTRIBUTIONMAKER_SOURCE_STR - else: - if len(test) == 1: - try: - test_pipeline = Pipeline(config=test[0]) - except: - pass - else: - test_source = PIPELINE_SOURCE_STR - if test_param_selections is not None: - test_pipeline.select_params(test_param_selections) - p_test = test_pipeline.get_outputs() - else: - try: - test_dmaker = DistributionMaker(pipelines=test) - except: - pass - else: - test_source = DISTRIBUTIONMAKER_SOURCE_STR - if test_param_selections is not None: - test_dmaker.select_params(test_param_selections) - p_test = test_dmaker.get_outputs() - - if p_test is None: - try: - p_test = [Map.from_json(f) for f in test] - except: - pass - else: - test_source = MAP_SOURCE_STR - p_test = MapSet(p_test) - - if p_test is None: - assert test_param_selections is None - assert len(test) == 1, 'Can only handle one MapSet' - try: - p_test = MapSet.from_json(test[0]) - except: - pass - else: - test_source = MAPSET_SOURCE_STR - - if p_test is None: - raise ValueError( - 'Could not instantiate the test Pipeline, DistributionMaker, Map,' - ' or MapSet from test value(s) %s' % test - ) - test = p_test - - logging.info('Test map(s) derived from a ' + test_source) - - if combine is not None: - ref = ref.combine_wildcard(combine) - test = test.combine_wildcard(combine) - if isinstance(ref, Map): - ref = MapSet([ref]) - if isinstance(test, Map): - test = MapSet([test]) - - if sum is not None: - ref = ref.sum(sum) - test = test.sum(sum) - - # Set the MapSet names according to args passed by user - ref.name = ref_label - test.name = test_label - - # Save to disk the maps being plotted (excluding optional aboslute value - # operations) - if json: - refmaps_path = os.path.join( - outdir, 'maps__%s.json.bz2' % ref_label - ) - to_file(ref, refmaps_path) - - testmaps_path = os.path.join( - outdir, 'maps__%s.json.bz2' % test_label - ) - to_file(test, testmaps_path) - - if set(test.names) != set(ref.names): - raise ValueError( - 'Test map names %s do not match ref map names %s.' - % (sorted(test.names), sorted(ref.names)) - ) - - # Aliases to save keystrokes - def masked(x): - return np.ma.masked_invalid(x.nominal_values) - - def zero_to_nan(map): - newmap = deepcopy(map) - mask = np.isclose(newmap.nominal_values, 0, rtol=0, atol=EPSILON) - newmap.hist[mask] = np.nan - return newmap - - reordered_test = [] - new_ref = [] - diff_maps = [] - fract_diff_maps = [] - asymm_maps = [] - summary_stats = {} - for ref_map in ref: - test_map = test[ref_map.name].reorder_dimensions(ref_map.binning) - if ref_abs: - ref_map = abs(ref_map) - if test_abs: - test_map = abs(test_map) - - diff_map = test_map - ref_map - fract_diff_map = (test_map - ref_map)/zero_to_nan(ref_map) - asymm_map = (test_map - ref_map)/zero_to_nan(ref_map**0.5) - abs_fract_diff_map = np.abs(fract_diff_map) - - new_ref.append(ref_map) - reordered_test.append(test_map) - diff_maps.append(diff_map) - fract_diff_maps.append(fract_diff_map) - asymm_maps.append(asymm_map) - - min_ref = np.min(masked(ref_map)) - max_ref = np.max(masked(ref_map)) - - min_test = np.min(masked(test_map)) - max_test = np.max(masked(test_map)) - - total_ref = np.sum(masked(ref_map)) - total_test = np.sum(masked(test_map)) - - mean_ref = np.mean(masked(ref_map)) - mean_test = np.mean(masked(test_map)) - - max_abs_fract_diff = np.max(masked(abs_fract_diff_map)) - mean_abs_fract_diff = np.mean(masked(abs_fract_diff_map)) - median_abs_fract_diff = np.median(masked(abs_fract_diff_map)) - - mean_fract_diff = np.mean(masked(fract_diff_map)) - min_fract_diff = np.min(masked(fract_diff_map)) - max_fract_diff = np.max(masked(fract_diff_map)) - std_fract_diff = np.std(masked(fract_diff_map)) - - mean_diff = np.mean(masked(diff_map)) - min_diff = np.min(masked(diff_map)) - max_diff = np.max(masked(diff_map)) - std_diff = np.std(masked(diff_map)) - - median_diff = np.nanmedian(masked(diff_map)) - mad_diff = np.nanmedian(masked(np.abs(diff_map))) - median_fract_diff = np.nanmedian(masked(fract_diff_map)) - mad_fract_diff = np.nanmedian(masked(np.abs(fract_diff_map))) - - min_asymm = np.min(masked(fract_diff_map)) - max_asymm = np.max(masked(fract_diff_map)) - - total_asymm = np.sqrt(np.sum(masked(asymm_map)**2)) - - summary_stats[test_map.name] = OrderedDict([ - ('min_ref', min_ref), - ('max_ref', max_ref), - ('total_ref', total_ref), - ('mean_ref', mean_ref), - - ('min_test', min_test), - ('max_test', max_test), - ('total_test', total_test), - ('mean_test', mean_test), - - ('max_abs_fract_diff', max_abs_fract_diff), - ('mean_abs_fract_diff', mean_abs_fract_diff), - ('median_abs_fract_diff', median_abs_fract_diff), - - ('min_fract_diff', min_fract_diff), - ('max_fract_diff', max_fract_diff), - ('mean_fract_diff', mean_fract_diff), - ('std_fract_diff', std_fract_diff), - ('median_fract_diff', median_fract_diff), - ('mad_fract_diff', mad_fract_diff), - - ('min_diff', min_diff), - ('max_diff', max_diff), - ('mean_diff', mean_diff), - ('std_diff', std_diff), - ('median_diff', median_diff), - ('mad_diff', mad_diff), - - ('min_asymm', min_asymm), - ('max_asymm', max_asymm), - ('total_asymm', total_asymm), - ]) - - logging.info('Map %s...', ref_map.name) - logging.info(' Ref map(s):') - logging.info(' min :' + ('%.2f' % min_ref).rjust(12)) - logging.info(' max :' + ('%.2f' % max_ref).rjust(12)) - logging.info(' total :' + ('%.2f' % total_ref).rjust(12)) - logging.info(' mean :' + ('%.2f' % mean_ref).rjust(12)) - logging.info(' Test map(s):') - logging.info(' min :' + ('%.2f' % min_test).rjust(12)) - logging.info(' max :' + ('%.2f' % max_test).rjust(12)) - logging.info(' total :' + ('%.2f' % total_test).rjust(12)) - logging.info(' mean :' + ('%.2f' % mean_test).rjust(12)) - logging.info(' Absolute fract. diff., abs((Test - Ref) / Ref):') - logging.info(' max : %.4e', max_abs_fract_diff) - logging.info(' mean : %.4e', mean_abs_fract_diff) - logging.info(' median: %.4e', median_abs_fract_diff) - logging.info(' Fractional difference, (Test - Ref) / Ref:') - logging.info(' min : %.4e', min_fract_diff) - logging.info(' max : %.4e', max_fract_diff) - logging.info(' mean : %.4e +/- %.4e', mean_fract_diff, std_fract_diff) - logging.info(' median: %.4e +/- %.4e', median_fract_diff, mad_fract_diff) - logging.info(' Difference, Test - Ref:') - logging.info(' min : %.4e', min_diff) - logging.info(' max : %.4e', max_diff) - logging.info(' mean : %.4e +/- %.4e', mean_diff, std_diff) - logging.info(' median: %.4e +/- %.4e', median_diff, mad_diff) - logging.info(' Asymmetry, (Test - Ref) / sqrt(Ref)') - logging.info(' min : %.4e', min_asymm) - logging.info(' max : %.4e', max_asymm) - logging.info(' total : %.4e (sum in quadrature)', total_asymm) - logging.info('') - - ref = MapSet(new_ref) - test = MapSet(reordered_test) - diff = MapSet(diff_maps) - fract_diff = MapSet(fract_diff_maps) - asymm = MapSet(asymm_maps) - - if json: - diff.to_json(os.path.join( - outdir, - 'diff__%s__%s.json.bz2' %(test_plot_label, ref_plot_label) - )) - fract_diff.to_json(os.path.join( - outdir, - 'fract_diff__%s___%s.json.bz2' %(test_plot_label, ref_plot_label) - )) - asymm.to_json(os.path.join( - outdir, - 'asymm__%s___%s.json.bz2' %(test_plot_label, ref_plot_label) - )) - to_file( - summary_stats, - os.path.join( - outdir, - 'stats__%s__%s.json.bz2' %(test_plot_label, ref_plot_label) - ) - ) - - for plot_format in plot_formats: - # Plot the raw distributions - plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, - log=False, annotate=False, - symmetric=False, - ratio=False) - plotter.plot_2d_array(ref, fname='distr__%s' - % ref_plot_label) - plotter.plot_2d_array(test, fname='distr__%s' - % test_plot_label) - - # Plot the difference (test - ref) - plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, - log=False, annotate=False, - symmetric=diff_symm, - ratio=False) - plotter.label = '%s - %s' % (test_plot_label, ref_plot_label) - plotter.plot_2d_array( - test - ref, - fname='diff__%s__%s' % (test_plot_label, ref_plot_label), - #vmin=diff_min, vmax=diff_max - ) - - # Plot the fractional difference (test - ref)/ref - plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, - log=False, - annotate=False, - symmetric=fract_diff_symm, - ratio=True) - plotter.label = ('(%s-%s)/%s' - % (test_plot_label, ref_plot_label, ref_plot_label)) - plotter.plot_2d_array( - (test-ref)/MapSet([zero_to_nan(r) for r in ref]), - fname='fract_diff__%s__%s' % (test_plot_label, ref_plot_label), - #vmin=fract_diff_min, vmax=fract_diff_max - ) - - # Plot the asymmetry (test - ref)/sqrt(ref) - plotter = Plotter(stamp='', outdir=outdir, fmt=plot_format, - log=False, - annotate=False, - symmetric=asymm_symm, - ratio=True) - plotter.label = (r'$(%s - %s)/\sqrt{%s}$' - % (test_plot_label, ref_plot_label, ref_plot_label)) - plotter.plot_2d_array( - (test-ref)/MapSet([zero_to_nan(r**0.5) for r in ref]), - fname='asymm__%s__%s' % (test_plot_label, ref_plot_label), - #vmin=asymm_min, vmax=asymm_max - ) - - return summary_stats, diff, fract_diff, asymm - - -def parse_args(): - """Parse command line arguments""" - parser = ArgumentParser(description=__doc__) - parser.add_argument( - '--outdir', metavar='DIR', type=str, required=True, - help='''Store output plots to this directory.''' - ) - parser.add_argument( - '--ref', type=str, required=True, action='append', - help='''Pipeline settings config file that generates reference - output, or a stored map or map set. Repeat --ref option for multiple - pipelines, maps, or map sets''' - ) - parser.add_argument( - '--ref-abs', action='store_true', - help='''Use the absolute value of the reference plot for - comparisons.''' - ) - parser.add_argument( - '--ref-label', type=str, required=True, - help='''Label for reference''' - ) - parser.add_argument( - '--ref-param-selections', type=str, required=False, - action='append', - help='''Param selections to apply to --ref pipeline config(s). Not - applicable if --ref specifies stored map or map sets''' - ) - parser.add_argument( - '--test', type=str, required=True, action='append', - help='''Pipeline settings config file that generates test - output, or a stored map or map set. Repeat --test option for multiple - pipelines, maps, or map sets''' - ) - parser.add_argument( - '--test-abs', action='store_true', - help='''Use the absolute value of the test plot for - comparisons.''' - ) - parser.add_argument( - '--test-label', type=str, required=True, - help='''Label for test''' - ) - parser.add_argument( - '--test-param-selections', type=str, required=False, - action='append', - help='''Param selections to apply to --test pipeline config(s). Not - applicable if --test specifies stored map or map sets''' - ) - parser.add_argument( - '--combine', type=str, action='append', - help='''Combine by wildcard string, where string globbing (a la command - line) uses asterisk for any number of wildcard characters. Use single - quotes such that asterisks do not get expanded by the shell. Repeat the - --combine option for multiple combine strings.''' - ) - parser.add_argument( - '--sum', nargs='+', - help='''Sum over (and hence remove) the specified axis or axes. I.e., - project the map onto remaining (unspecified) axis or axes.''' - ) - parser.add_argument( - '--json', action='store_true', - help='''Save output maps in compressed json (json.bz2) format.''' - ) - parser.add_argument( - '--pdf', action='store_true', - help='''Save plots in PDF format. If neither this nor --png is - specified, no plots are produced.''' - ) - parser.add_argument( - '--png', action='store_true', - help='''Save plots in PNG format. If neither this nor --pdf is - specfied, no plots are produced.''' - ) - parser.add_argument( - '--diff-min', type=float, required=False, - help='''Difference plot vmin; if you specify only one of --diff-min or - --diff-max, symmetric limits are automatically used (min = -max).''' - ) - parser.add_argument( - '--diff-max', type=float, required=False, - help='''Difference plot max; if you specify only one of --diff-min or - --diff-max, symmetric limits are automatically used (min = -max).''' - ) - parser.add_argument( - '--fract-diff-min', type=float, required=False, - help='''Fractional difference plot vmin; if you specify only one of - --fract-diff-min or --fract-diff-max, symmetric limits are - automatically used (min = -max).''' - ) - parser.add_argument( - '--fract-diff-max', type=float, required=False, - help='''Fractional difference plot max; if you specify only one of - --fract-diff-min or --fract-diff-max, symmetric limits are - automatically used (min = -max).''' - ) - parser.add_argument( - '--asymm-min', type=float, required=False, - help='''Asymmetry plot vmin; if you specify only one of --asymm-min or - --asymm-max, symmetric limits are automatically used (min = -max).''' - ) - parser.add_argument( - '--asymm-max', type=float, required=False, - help='''Fractional difference plot max; if you specify only one of - --asymm-min or --asymm-max, symmetric limits are automatically used - (min = -max).''' - ) - parser.add_argument( - '-v', action='count', - help='Set verbosity level; repeat -v for higher level.' - ) - args = parser.parse_args() - return args - - -def main(): - """Function used from command-line calls (either `python compare.py` or via - installer's console scripts (see `setup.py`).""" - args = vars(parse_args()) - set_verbosity(args.pop('v')) - compare(**args) - - -if __name__ == '__main__': - main() diff --git a/pisa/scripts/convert_config_format.py b/pisa/scripts/convert_config_format.py deleted file mode 100755 index aafac0665..000000000 --- a/pisa/scripts/convert_config_format.py +++ /dev/null @@ -1,544 +0,0 @@ -#!/usr/bin/env python - -""" -Convert PISA config files from format used up until July 2017 to the new config -file format. -""" - - -from __future__ import absolute_import - -from argparse import ArgumentParser -import os -import re -import sys - -from configparser import MissingSectionHeaderError - -from pisa.utils.config_parser import PISAConfigParser -from pisa.utils.resources import find_resource - - -__all__ = ['OLD_SUB_RE', 'parse_args', 'main'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -OLD_SUB_RE = re.compile( - r''' - # end with !> delimiter - ''', re.VERBOSE -) - -OLD_STAGE_SECTION_RE = re.compile( - r''' - \[ # Start with [ - \s* # optional whitespace - stage # must start with "stage" - \s* # optional whitespace - : # colon as separator - \s* # optional whitespace - (\S+) # non-whitespace key - \s* # optional whitespace - \] # end with ] - ''', re.VERBOSE -) - -OLD_STAGE_VARIABLE_RE = re.compile( - r''' - \${ # Start with ${ - \s* # optional whitespace (technically illegal, will remove) - stage # variable must be named "stage" - \s* # optional whitespace (technially illegal, will remove) - : # colon separator - \s* # optional whitespace (technically illegal, will remove) - ([^ }]+) # any character besides space or endbrace - \s* # optional whitespace (technically illegal, will remove) - } - ''', re.VERBOSE -) - -OLD_ORDER_RE = re.compile(r'order\s*(?:=|:)\s*(\S.*)\s*') -ORDER_SUBSTRING_RE = re.compile(r'\s*(\S+)\s*(?::|\.)\s*(\S+)\s*') -JSON_NO_BZ2_RE = re.compile(r'(\.json)(?!\.bz2)') - -SECTION_NAME_WITH_COLON_RE = re.compile( - r''' - ^\s* # only possibly whitespace before opening bracket - \[ # open bracket - ( # capture text found within these parens - (?: # do not capture text within these parens - [^\]]*: # non-"]" followed by ":' - )+ # stop no-capture group; one or more of this pattern - [^\]]* # any number of non-"]" before closing bracket - ) # stop capturing text; - \] # closing bracket - ''', re.VERBOSE -) -NEW_SECTION_RE = re.compile( - r''' - ( - ^\s* # only possibly whitespace before opening bracket - \[ # open bracket - ([^\]]*) # capture anything besides "]" - \] # closing bracket - ) # stop capturing text; - ''', re.VERBOSE -) -NEW_VARIABLE_RE = re.compile( - r''' - ( # start capturing text - \${ # start with ${ - ([^}]*) # any character besides closing brace - } # closing brace - ) # stop capturing text - ''', re.VERBOSE -) - -OTHER_SECTION_NAME_SEPARATOR = '|' -"""If section names (and any corresponding variable names) use colons as -separators (and we haven't converted the colons to periods), the colons will be -replaced with this character instead.""" - -MULTI_COLON_VAR_RE = re.compile( - r''' - ( # Capture - \${ # start with ${ - (?: # do not capture this group - [^}]*: # anything besides closing brace - ){2,} # sto non-capturing group; must be 2 or more of these - [^}]* # any amount of non-closing-brace characters - } # closing brace - ) # stop capture - ''', re.VERBOSE -) - -PARAM_RE_STR = r''' - param # must start with "param" - (\.[_A-Za-z][_a-zA-Z0-9]*){0,1} # optional param sel. (valid Python name) - \. # period before param name - %s # get actual param name from elsewhere -''' -NSI_PARAM_RE_MAP = { - e_ij: re.compile(PARAM_RE_STR % e_ij, re.VERBOSE) - for e_ij in ['eps_ee', 'eps_emu', 'eps_etau', 'eps_mumu', 'eps_mutau', - 'eps_tautau'] -} - -INCLUDE_AS = { - 'settings/binning/example.cfg': 'binning', - 'settings/binning/pingu_nutau.cfg': 'binning', - 'settings/osc/loiv2.cfg': 'osc', - 'settings/osc/nufitv20.cfg': 'osc', - 'settings/osc/nufitv22.cfg': 'osc', - 'settings/osc/earth.cfg': 'earth', -} - -JSON_TO_JSON_BZ2 = [ - 'PISAV2IPHonda2015SPLSolMaxFlux-atm_delta_index0.05', - 'PISAV2IPHonda2015SPLSolMaxFlux-atm_delta_index0.05', - 'PISAV2IPHonda2015SPLSolMaxFlux-nu_nubar_ratio1.10', - 'PISAV2IPHonda2015SPLSolMaxFlux-nue_numu_ratio1.03', - 'PISAV2IPHonda2015SPLSolMaxFlux', - 'PISAV2bisplrepHonda2015SPLSolMaxFlux' -] -JSON_NO_BZ2_RE_LIST = [ - re.compile(r'%s(\.json)(?!\.bz2)' % n) for n in JSON_TO_JSON_BZ2 -] - -NAMES_CHANGED_MAP = { - 'nutau_holice_domeff_fits_mc.ini': 'nutau_holice_domeff_fits_mc.cfg' -} - - -def replace_substitution(match): - """Replace old substitution syntax ```` with new syntax - ``${section:key}``. Also, convert any colons in `section` or `key` to - ``OTHER_SECTION_NAME_SEPARATOR``. - - Parameters - ---------- - match : re._pattern_type - - Returns - ------- - repl : string - Replacement text - - """ - substrs = match.groups() - loc = substrs[0].find('stage:') - if loc >= 0: - postloc = loc + len('stage:') - s0 = ( - substrs[0][:loc] - + 'stage:' - + substrs[0][postloc:].replace(':', OTHER_SECTION_NAME_SEPARATOR) - ) - else: - s0 = substrs[0].replace(':', OTHER_SECTION_NAME_SEPARATOR) - - s1 = substrs[1].replace(':', OTHER_SECTION_NAME_SEPARATOR) - - return '${%s:%s}' % (s0, s1) - - -def replace_order(match): - """Replace e.g. - `` order = flux:honda , osc : prob3cpu,aeff :hist, reco : hist`` - with - `` order = flux.honda, osc.prob3cpu, aeff.hist, reco.hist`` - - Parameters - ---------- - match : re._pattern_type - - Returns - ------- - repl : string - Replacement text, starting with ``order`` (i.e., retain whitespace - preceding the word "order"). - - """ - new_substrings = [] - for old_substring in match.groups()[0].split(','): - new_substrings.append( - ORDER_SUBSTRING_RE.sub( - repl=lambda m: '%s.%s' % m.groups(), - string=old_substring.strip() - ) - ) - return 'order = %s' % ', '.join(new_substrings) - - -def append_include_as(include_match): - """Convert ``#include x`` to ``#include x as y``, where appropriate; also, - convert incorrect "as" statements. See INCLUDE_AS dict for mapping from - resource to its "as" target. - - Parameters - ---------- - include_match : re._pattern_type - Match produced by INCLUDE_RE.match(string) - - Returns - ------- - repl : string - Replacement text for whatever comes after the "#include " - - """ - include_text = include_match.groups()[0] - include_as_match = PISAConfigParser.INCLUDE_AS_RE.match(include_text) - - as_section = None - if include_as_match: - gd = include_as_match.groupdict() - resource = gd['file'] - as_section = gd['as'] - else: - resource = include_text - if resource in INCLUDE_AS.keys(): - as_section = INCLUDE_AS[resource] - - if as_section is None: - repl = '#include ' + resource - else: - repl = '#include %s as %s' % (resource, as_section) - - return repl - - -def parse_args(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - 'config', nargs=1, type=str, - help='''Pipeline config file to convert. Note that new file will have - `.new` suffix appended to filename so you can double check the - conversion before overwriting the original file.''' - ) - parser.add_argument( - '--validate-only', action='store_true', - help='''Do not write an output file, but raise an exception if the file - _would_ be modified. I.e., specifying this flag makes the script behave - as a (rough) validator for config files.''' - ) - return parser.parse_args() - - -def main(): - """Do the conversion.""" - args = parse_args() - in_fpath = os.path.expanduser(os.path.expandvars(args.config[0])) - out_fpath = in_fpath + '.new' - - with open(in_fpath, 'r') as infile: - orig_contents = infile.readlines() - - osc_stage_header_line = None - section_names_with_colons = {} - new_contents = [] - for lineno, orig_line in enumerate(orig_contents, start=1): - # Remove trailing whitespace, including newline character(s) - new_line = orig_line.rstrip() - - # Empty (or whitespace-only) line is trivial - if new_line == '': - new_contents.append(new_line) - continue - - # Replace text substitution ("config file variables") syntax - new_line = OLD_SUB_RE.sub(repl=replace_substitution, string=new_line) - - # Replace stage headers. E.g. - # `` [ stage :stage_name ]`` - # is replaced by - # `` [stage.stage_name]`` - # I.e. retain any whitespace before (and after... though this is - # already removed) the brackets but swap colon for period and remove - # whitespace within the brackets. - new_line = OLD_STAGE_SECTION_RE.sub( - repl=lambda m: '[stage.%s]' % m.groups(), - string=new_line - ) - - # Replace stage:key variables. E.g. what should now look like - # `` ${ stage : key } `` - # should look like - # `` ${stage.key} `` - new_line = OLD_STAGE_VARIABLE_RE.sub( - repl=lambda m: '${stage.%s}' % m.groups(), - string=new_line - ) - - stripped = new_line.strip() - - # Replace order string - if stripped.startswith('order'): - new_line = OLD_ORDER_RE.sub(repl=replace_order, string=new_line) - # Record line on which the [stage.osc] section occurs (if any) - elif stripped == '[stage.osc]': - osc_stage_header_line = lineno - 1 - - # Convert ``#include x`` to ``#include x as y``, where appropriate - new_line = PISAConfigParser.INCLUDE_RE.sub( - repl=append_include_as, - string=new_line - ) - - # Convert JSON filenames to .json.bz2 that are now bzipped - if '.json' in new_line: - for json_re in JSON_NO_BZ2_RE_LIST: - new_line = json_re.sub(repl='.json.bz2', string=new_line) - - # Replace changed names - for orig_name, new_name in NAMES_CHANGED_MAP.items(): - new_line = new_line.replace(orig_name, new_name) - - # Search for any colons used in section names. This is illegal, as a - # section name can be used as a variable where the syntax is - # ``${section_name:key}`` - # so any colons in section_name will make the parser choke. - for match in SECTION_NAME_WITH_COLON_RE.finditer(new_line): - section_name_with_colons = match.groups()[0] - if NEW_VARIABLE_RE.match(section_name_with_colons): - if section_name_with_colons.count(':') > 1: - raise ValueError( - 'Multiple colons in new-style variable, line %d:\n' - '>> Original line:\n%s\n>> New line:\n%s\n' - % (lineno, orig_line, new_line) - ) - else: - continue - section_name_without_colons = section_name_with_colons.replace( - ':', OTHER_SECTION_NAME_SEPARATOR - ) - section_names_with_colons[section_name_with_colons] = ( - section_name_without_colons - ) - - new_contents.append(new_line) - - #for item in section_names_with_colons.items(): - # print '%s --> %s' % item - - # Go back through and replace colon-sparated section names with - # ``OTHER_SECTION_NAME_SEPARATOR``-separated section names - all_names_to_replace = section_names_with_colons.keys() - def replace_var(match): - """Closure to replace variable names""" - whole_string, var_name = match.groups() - if var_name in all_names_to_replace: - return '${%s}' % section_names_with_colons[var_name] - return whole_string - - def replace_section_name(match): - """Closure to replace section names""" - whole_string, section_name = match.groups() - if section_name in all_names_to_replace: - return whole_string.replace( - section_name, section_names_with_colons[section_name] - ) - return whole_string - - for lineno, new_line in enumerate(new_contents, start=1): - if not new_line: - continue - - new_line = NEW_VARIABLE_RE.sub(repl=replace_var, string=new_line) - new_line = NEW_SECTION_RE.sub(repl=replace_section_name, - string=new_line) - - #new_line = NEW_SECTION_RE.sub(repl=replace_colon_names, - # string=new_line) - - #for with_colons, without_colons in section_names_with_colons: - # new_line = new_line.replace(with_colons, without_colons) - - # Check for multiple colons in a variable (which is illegal) - if MULTI_COLON_VAR_RE.findall(new_line): - raise ValueError( - 'Multiple colons in variable, line %d:\n>> Original' - ' line:\n%s\n>> New line:\n%s\n' - % (lineno, orig_contents[lineno - 1], new_line) - ) - - new_contents[lineno - 1] = new_line - - # Parse the new config file with the PISAConfigParser to see if NSI - # parameters are defined in the `stage.osc` section (if the latter is - # present). If needed, insert appropriate #include in the section - pcp = PISAConfigParser() - missing_section_header = False - try: - pcp.read_string(('\n'.join(new_contents) + '\n').decode('utf-8')) - except MissingSectionHeaderError: - missing_section_header = True - pcp.read_string( - ( - '\n'.join(['[dummy section header]'] + new_contents) + '\n' - ).decode('utf-8') - ) - - if 'stage.osc' in pcp: - keys_containing_eps = [k for k in pcp['stage.osc'].keys() - if '.eps_'.encode('utf-8') in k] - - nsi_params_present = [] - nsi_params_missing = [] - for nsi_param, nsi_param_re in NSI_PARAM_RE_MAP.items(): - found = None - for key_idx, key in enumerate(keys_containing_eps): - if nsi_param_re.match(key): - found = key_idx - nsi_params_present.append(nsi_param) - - if found is None: - nsi_params_missing.append(nsi_param) - else: - # No need to search this key again - keys_containing_eps.pop(found) - - if set(nsi_params_present) == set(NSI_PARAM_RE_MAP.keys()): - all_nsi_params_defined = True - elif set(nsi_params_missing) == set(NSI_PARAM_RE_MAP.keys()): - all_nsi_params_defined = False - else: - raise ValueError('Found a subset of NSI params defined; missing %s' - % str(nsi_params_missing)) - - # NOTE: since for now the contents of nsi_null.cfg are commented out - # (until merging NSI branch), the above check will say NSI params are - # missing if the #include statement was made. So check to see if - # settings/osc/nsi_null.cfg _has_ been included (we can't tell what - # section it is in, but we'll have to just accept that). - # - # We will probably want to remove this stanza as soon as NSI brnach is - # merged, since this is imprecise and can introduce other weird corner - # cases. - rsrc_loc = find_resource('settings/osc/nsi_null.cfg') - for file_iter in pcp.file_iterators: - if rsrc_loc in file_iter.fpaths_processed: - all_nsi_params_defined = True - - if not all_nsi_params_defined and osc_stage_header_line is None: - raise ValueError( - "Found a stage.osc section without NSI params defined (using" - " PISAConfigParser) but could not find the line of the" - " `[stage.osc]` header. This could occur if `[stage.osc]` came" - " from an `#include`'d file. You can manually define the NSI" - " parameters in this file or in the included file e.g. as" - " found in `settings/osc/nsi_null.cfg` or simply add the" - " statement ``#include settings/osc/nsi_null.cfg`` to either" - " file (so long as that statement it falls within the" - " stage.osc section)." - ) - - # Add ``#include settings/osc/nsi_null.cfg`` at top of stage.osc - # section if a stage.osc section is present and no NSI params were - # specified in that section - if not all_nsi_params_defined: - # Add an #include to set all NSI parameters to 0 - new_contents.insert( - osc_stage_header_line + 1, - '#include settings/osc/nsi_null.cfg' - ) - # Add an extra blank line after the #include line - new_contents.insert(osc_stage_header_line + 2, '') - - if not new_contents: - raise ValueError('Empty file after conversion; quitting.') - - # Note that newlines are added but no join is performed for comparison - # against `orig_contents` - new_contents = [line + '\n' for line in new_contents] - - # Now for validation, try to parse the new config file with the - # PISAConfigParser - pcp = PISAConfigParser() - if missing_section_header: - pcp.read_string( - ( - ''.join(['[dummy section header]\n'] + new_contents) + '\n' - ).decode('utf-8') - ) - else: - pcp.read_string((''.join(new_contents)).decode('utf-8')) - - if new_contents == orig_contents: - sys.stdout.write('Nothing modified in the original file (ok!).\n') - return - - if args.validate_only: - raise ValueError( - 'Original config file "%s" would be modfied (and so may be' - ' invalid). Re-run this script without the --validate-only flag to' - ' produce an appropriately-converted config file.' - % args.config[0] - ) - - sys.stdout.write('Writing modified config file to "%s"\n' % out_fpath) - with open(out_fpath, 'w') as outfile: - outfile.writelines(new_contents) - - -if __name__ == '__main__': - main() diff --git a/pisa/scripts/create_barr_sys_tables_mceq.py b/pisa/scripts/create_barr_sys_tables_mceq.py deleted file mode 100755 index 331a55d09..000000000 --- a/pisa/scripts/create_barr_sys_tables_mceq.py +++ /dev/null @@ -1,355 +0,0 @@ -#! /usr/bin/env python - -# Calculates the differentials for Jacobian matrix wrt. particle -# production uncertainty. -# -# Author: Anatoli Fedynitch -# August 2017 -# -# Update for IceCube oscillation analyss by Ida Storehaug & Tom Stuttard (2019) -# See https://github.com/afedynitch/MCEq/blob/master/examples/KPi_demonstration.ipynb for a related example -# - -import os, sys, gzip, bz2, collections -import numpy as np -import pickle - -from scipy.interpolate import RectBivariateSpline - -from MCEq.core import MCEqRun -from MCEq.misc import normalize_hadronic_model_name -from mceq_config import config -import crflux.models as crf - -# Global Barr parameter table -# format (x_min, x_max, E_min, E_max) | x is x_lab= E_pi/E, E projectile-air interaction energy -barr = { - "a": [(0.0, 0.5, 0.00, 8.0)], - "b1": [(0.5, 1.0, 0.00, 8.0)], - "b2": [(0.6, 1.0, 8.00, 15.0)], - "c": [(0.2, 0.6, 8.00, 15.0)], - "d1": [(0.0, 0.2, 8.00, 15.0)], - "d2": [(0.0, 0.1, 15.0, 30.0)], - "d3": [(0.1, 0.2, 15.0, 30.0)], - "e": [(0.2, 0.6, 15.0, 30.0)], - "f": [(0.6, 1.0, 15.0, 30.0)], - "g": [(0.0, 0.1, 30.0, 1e11)], - "h1": [(0.1, 1.0, 30.0, 500.0)], - "h2": [(0.1, 1.0, 500.0, 1e11)], - "i": [(0.1, 1.0, 500.0, 1e11)], - "w1": [(0.0, 1.0, 0.00, 8.0)], - "w2": [(0.0, 1.0, 8.00, 15.0)], - "w3": [(0.0, 0.1, 15.0, 30.0)], - "w4": [(0.1, 0.2, 15.0, 30.0)], - "w5": [(0.0, 0.1, 30.0, 500.0)], - "w6": [(0.0, 0.1, 500.0, 1e11)], - "x": [(0.2, 1.0, 15.0, 30.0)], - "y1": [(0.1, 1.0, 30.0, 500.0)], - "y2": [(0.1, 1.0, 500.0, 1e11)], - "z": [(0.1, 1.0, 500.0, 1e11)], - "ch_a": [(0.0, 0.1, 0.0, 1e11)], - "ch_b": [(0.1, 1.0, 0.0, 1e11)], - "ch_e": [(0.1, 1.0, 800.0, 1e11)], -} - - -def barr_unc(xmat, egrid, pname, value): - """Implementation of hadronic uncertainties as in Barr et al. PRD 74 094009 (2006) - - The names of parameters are explained in Fig. 2 and Fig. 3 in the paper.""" - - # Energy dependence - u = ( - lambda E, val, ethr, maxerr, expected_err: val - * min(maxerr / expected_err, 0.122 / expected_err * np.log10(E / ethr)) - if E > ethr - else 0.0 - ) - - modmat = np.ones_like(xmat) - modmat[np.tril_indices(xmat.shape[0], -1)] = 0.0 - - for minx, maxx, mine, maxe in barr[pname]: - eidcs = np.where((mine < egrid) & (egrid <= maxe))[0] - for eidx in eidcs: - xsel = np.where( - (xmat[: eidx + 1, eidx] >= minx) & (xmat[: eidx + 1, eidx] <= maxx) - )[0] - if not np.any(xsel): - continue - if pname in ["i", "z"]: - modmat[xsel, eidx] += u(egrid[eidx], value, 500.0, 0.5, 0.122) - elif pname in ["ch_e"]: - modmat[xsel, eidx] += u(egrid[eidx], value, 800.0, 0.3, 0.25) - else: - modmat[xsel, eidx] += value - - return modmat - - -def compute_abs_derivatives(mceq_run, pid, barr_param, zenith_list): - mceq_run.unset_mod_pprod(dont_fill=False) - - barr_pars = [p for p in barr if p.startswith(barr_param) and "ch" not in p] - print("Parameters corresponding to selection", barr_pars) - dim_res = len(zenith_list), etr.shape[0] - gs = mceq_run.get_solution - unit = 1e4 - - # Solving nominal MCEq flux - numu, anumu, nue, anue, nutau, anutau = ( - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - ) - - for iz, zen_deg in enumerate(zenith_list): - mceq_run.set_theta_deg(zen_deg) - mceq_run.solve() - numu[iz] = gs("total_numu", 0)[tr] * unit - anumu[iz] = gs("total_antinumu", 0)[tr] * unit - nue[iz] = gs("total_nue", 0)[tr] * unit - anue[iz] = gs("total_antinue", 0)[tr] * unit - nutau[iz] = gs("total_nutau", 0)[tr] * unit - anutau[iz] = gs("total_antinutau", 0)[tr] * unit - - # Solving for plus one sigma - mceq_run.unset_mod_pprod(dont_fill=True) - for p in barr_pars: - mceq_run.set_mod_pprod(primary_particle, pid, barr_unc, (p, delta)) - - mceq_run.regenerate_matrices(skip_decay_matrix=True) - - numu_up, anumu_up, nue_up, anue_up, nutau_up, anutau_up = ( - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - ) - for iz, zen_deg in enumerate(zenith_list): - mceq_run.set_theta_deg(zen_deg) - mceq_run.solve() - numu_up[iz] = gs("total_numu", 0)[tr] * unit - anumu_up[iz] = gs("total_antinumu", 0)[tr] * unit - nue_up[iz] = gs("total_nue", 0)[tr] * unit - anue_up[iz] = gs("total_antinue", 0)[tr] * unit - nutau_up[iz] = gs("total_nutau", 0)[tr] * unit - anutau_up[iz] = gs("total_antinutau", 0)[tr] * unit - - # Solving for minus one sigma - mceq_run.unset_mod_pprod(dont_fill=True) - for p in barr_pars: - mceq_run.set_mod_pprod(primary_particle, pid, barr_unc, (p, -delta)) - - mceq_run.regenerate_matrices(skip_decay_matrix=True) - - numu_down, anumu_down, nue_down, anue_down, nutau_down, anutau_down = ( - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - np.zeros(dim_res), - ) - for iz, zen_deg in enumerate(zenith_list): - mceq_run.set_theta_deg(zen_deg) - mceq_run.solve() - numu_down[iz] = gs("total_numu", 0)[tr] * unit - anumu_down[iz] = gs("total_antinumu", 0)[tr] * unit - nue_down[iz] = gs("total_nue", 0)[tr] * unit - anue_down[iz] = gs("total_antinue", 0)[tr] * unit - nutau_down[iz] = gs("total_nutau", 0)[tr] * unit - anutau_down[iz] = gs("total_antinutau", 0)[tr] * unit - - # calculating derivatives - fd_derivative = lambda up, down: (up - down) / (2.0 * delta) - - dnumu = fd_derivative(numu_up, numu_down) - danumu = fd_derivative(anumu_up, anumu_down) - dnue = fd_derivative(nue_up, nue_down) - danue = fd_derivative(anue_up, anue_down) - dnutau = fd_derivative(nutau_up, nutau_down) - danutau = fd_derivative(anutau_up, anutau_down) - - result = collections.OrderedDict() - result_type = [ - "numu", - "dnumu", - "numubar", - "dnumubar", - "nue", - "dnue", - "nuebar", - "dnuebar", - "nutau", - "nutaubar", - "dnutau", - "dnutaubar", - ] - - for dist, sp in zip( - [ - numu, - dnumu, - anumu, - danumu, - nue, - dnue, - anue, - danue, - nutau, - dnutau, - anutau, - danutau, - ], - result_type, - ): - result[sp] = RectBivariateSpline(cos_theta, np.log(etr), dist) - - return result - - -if __name__ == "__main__": - - # Get command line args - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-i", - "--interaction-model", - type=str, - required=False, - default="sibyll23c", - help="Hadronic interaction model", - ) - parser.add_argument( - "-c", - "--cosmic-ray-model", - type=str, - required=False, - default="GlobalSplineFitBeta", - help="Primary cosmic ray spectrum model", - ) - parser.add_argument( - "-o", - "--output-dir", - type=str, - required=False, - default="", - help="Output directory", - ) - args = parser.parse_args() - - # Get interaction model - interaction_model = normalize_hadronic_model_name(args.interaction_model) - - # Get primary cosmic ray spectrum model - assert hasattr( - crf, args.cosmic_ray_model - ), "Unknown primary cosmic ray spectrum model" - CRModel = getattr(crf, args.cosmic_ray_model) # Gettting class (NOT instantiating) - assert issubclass( - CRModel, crf.PrimaryFlux - ), "Unknown primary cosmic ray spectrum model" - - # define CR model parameters - if args.cosmic_ray_model == "HillasGaisser2012": - CR_vers = "H3a" - elif args.cosmic_ray_model == "GaisserStanevTilav": - CR_vers = "4-gen" - else: - CR_vers = None - - mceq_run = MCEqRun( - # provide the string of the interaction model - interaction_model=interaction_model, - # primary cosmic ray flux model - # support a tuple (primary model class (not instance!), arguments) - primary_model=(CRModel, CR_vers), - # Zenith angle in degrees. 0=vertical, 90=horizontal - theta_deg=0.0, - # GPU device id - **config - ) - - # Some global settings. One can play around with them, but there - # is currently no good reason why - - # Primary proton projectile (neutron is included automatically - # vie isospin symmetries) - primary_particle = 2212 - # The parameter delta for finite differences computation - delta = 0.001 - # Energy grid will be truncated below this value (saves some - # memory and interpolation speed, but not really needed, I think) - E_tr = 1e5 - - # Set density/atmosphere model: - # For a yearly average of the global atmosphere, the US Std. - # atmosphere is sufficiently accurate. It would be wrong to - # choose here anything related to South Pole, since stuff - # comes from/from below horizon. - atm_model = "CORSIKA" # TODO Try varying this... - atm_model_config = ("BK_USStd", None) - mceq_run.set_density_model((atm_model, atm_model_config)) - - # Define equidistant grid in cos(theta) for 2D interpolation - # (Can be increased to 20 after debugging is done) - # The flux without propagation effects and atmospheric variations - # is up/down symmetric. - cos_theta = np.linspace(0, 1, 21) - angles = np.arccos(cos_theta) / np.pi * 180.0 - - # Report settings - print("Running with :") - print(" Interaction model : %s" % interaction_model) - print(" Primary cosmic ray spectrum model : %s" % args.cosmic_ray_model) - - # Some technical shortcuts - solution = {} - tr = np.where(mceq_run.e_grid < E_tr) - etr = mceq_run.e_grid[tr] - - # Barr variables related to pions - barr_pivars = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] - - for bp in barr_pivars: - solution[bp + "+"] = compute_abs_derivatives(mceq_run, 211, bp, angles) - solution[bp + "-"] = compute_abs_derivatives(mceq_run, -211, bp, angles) - - # Barr variables related to kaons - barr_kvars = ["w", "x", "y", "z"] - - for bp in barr_kvars: - solution[bp + "+"] = compute_abs_derivatives(mceq_run, 321, bp, angles) - solution[bp + "-"] = compute_abs_derivatives(mceq_run, -321, bp, angles) - - # Store some metadata - solution["metadata"] = { - "primary_particle": primary_particle, - "cosmic_ray_model": args.cosmic_ray_model, - "interaction_model": interaction_model, - "barr_variables": barr_pivars + barr_kvars, - "atmospheric_model": atm_model - # TODO atmosphere - } - - # Write th output file - output_file = "MCEq_flux_gradient_splines_{primary_particle}_{cosmic_ray_model}_{interaction_model}.pckl.bz2".format( # TODO atm model, prod height, etc - cosmic_ray_model=args.cosmic_ray_model, - interaction_model=interaction_model, - primary_particle=primary_particle, - ) - output_file = os.path.join(args.output_dir, output_file) - - pickle.dump(solution, bz2.BZ2File(output_file, "wb"), protocol=-1) - - # TODO store settings used in pickle file too (and make name more explicit) - - print("\nFinished : Output file is %s\n" % output_file) diff --git a/pisa/scripts/fit_hypersurfaces.py b/pisa/scripts/fit_hypersurfaces.py deleted file mode 100755 index a354d3835..000000000 --- a/pisa/scripts/fit_hypersurfaces.py +++ /dev/null @@ -1,646 +0,0 @@ -#!/usr/bin/env python - -""" -Fit a hypersurface to discrete systematics datasets -- as specified by a fit config -file -- and produce a fit file usable by, e.g., the `discr_sys.hypersurfaces` service. - -For more details, see `pisa/utils/hypersurface.pu` - -A script for making plots from the fit results produced by this file can be found in the -Fridge (private repository) at - - fridge/analysis/common/scripts/plotting/plot_hypersurface_fits.py - -See example fit config files in directory `pisa_examples/resources/discr_sys/`. - - -Config file syntax -================== - -"general" section ------------------ -You must define a "general" section which must have at least options "sys_list" and -"sys_func_list" and can optionally include options "units" and "combine_regex". You -can add more options to the "general" section, but they will be ignored by PISA unless -they are explicitly referenced elsewhere in your config file. E.g., a "general" -section with all three required and optional options (and no more) :: - - [general] - sys_list = dom_eff, hole_ice, hole_ice_fwd - sys_func_list = linear, exponential, linear - units = dimensionless, dimensionless, dimensionless - combine_regex = ["nue.*_cc", "numu.*_cc", "nutau.*_cc", ".*_nc"] - -If "units" is not specified, units default to "dimensionless" for all systematics. If -specified, there must be the same number of comma-separated units strings -(interpret-able by the Pint module) as there are options in the "sys_list". - -Note that "combine_regex" should be Python-evaulatable to a string or a sequence of -strings. Old versions of this script allowed values like :: - - combine_regex = nue.*_cc,numu.*_cc,nutau.*_cc,.*_nc - -but unambiguously parsing such a single comma-separated string of one or more regexes -(which themselves can contian commas) is probably impossible, so this syntax is -deprecated (a warning is emitted if it is detected) and should be avoided. - -"apply_to_all_sets" section ---------------------------- -You can optionally include an "apply_to_all_sets" section in your config that, true to -its name, defines options applied to all systematic sets sections in the file. E.g., :: - - [apply_to_all_sets] - pipeline_cfg = settings/pipeline/nutau_mc_baseline.cfg - remove [discr_sys.hypersurfaces] = - set [data.simple_data_loader] data_dict = { - 'true_energy': 'true_energy', - 'true_coszen': 'true_coszen', - 'reco_energy': 'reco_energy', - 'reco_coszen': 'reco_coszen', - 'pid': 'pid', - 'weighted_aeff': 'weighted_aeff', - 'dunkman_L5': 'dunkman_L5', - } - -The above sets "pipeline_cfg" for all discr sets, removes the "discr_sys.hypersurfaces" -service, and redefines the "data_dict" in the "data.simple_data_loader" section. Any -options defined in the discrete set sections of the config will start with this as their -configuration. Details of the above syntax are described more below. - -"nominal_set" and "sys_set" sections ------------------------------------- -All other required sections in the config file describe the discrete sets and must -define a "pipeline_cfg" for that systematics set (whether explicitly in the section or -via the "apply_to_all_sets" section). A systematics set section either starts with -"nominal_set" (for one and only one set) or "sys_set" (for all remaining sets), followed -by a colon and magnitudes of the values of each systematic specified in "general" -section / "sys_list" option (in the same order as defined there). E.g., continuing the -example config file defined in the above examples, :: - - [nominal_set : 1.00 , 25 , 0.0] - set [data.simple_data_loader] events_file = /path/to/nominal_set.hdf5 - - [sys_set : 0.88 , 22 , 0.1] - set [data.simple_data_loader] events_file = /path/to/sys_set_1.hdf5 - - [sys_set : 1.12 , 28 , 0.2] - set [data.simple_data_loader] events_file = /path/to/sys_set_2.hdf5 - -and so forth. Note that all magnitudes must be specified in the same units specified in -"general" section / "units" option, or if that option is not specified, all magnitudes -must represent dimensionless quantities. Also note that the "pipeline_cfg" is already -defined in the above "apply_to_all_sets" section, so each of these sys set sections -simply swap out the events_file in that pipeline config file for the appropriate events -file. - -Syntax for modifying the specified "pipeline_cfg" -------------------------------------------------- -The following syntax is interpreted if specified in "apply_to_all_sets", "sys_set", -and/or "nominal_set" sections. Note an "apply_to_all_sets" section must specify a -"pipeline_cfg" for any of the following syntax to be used. - -Define or redefine an option via the "set" keyword followed by the section in square -brackets, the option, either equals (=) or colon (:), and finally the value to set the -option to. E.g., "events_file" in config section "data.simple_data_loader" is set to -"settings/pipeline/example.cfg" via :: - - set [data.simple_data_loader] events_file = settings/pipeline/example.cfg - -the section is created if it doesn't exist and the option "events_file" is added to that -section if it doesn't already exist. - -You can create a new section (if it doesn't already exist) via the "set" keyword -followed by the section in square brackets and either equals (=) or colon (:). Anything -following the equals/colon is ignored. E.g. to add the "data.simple_data_loader" section -(if it doesn't already exist), :: - - set [data.simple_data_loader] = - -Notes on whitespace -------------------- -Whitespace is ignored in section names and in lists, so the following are interpreted -equivalently :: - - [ sys_set : 0.88 , 22 , 0.1 ] - [sys_set:0.88,22,0.1] - -Likewise, the following are all equivalent :: - - sys_list = aa,bb,cc - sys_list = aa , bb , cc - -""" - -from __future__ import absolute_import, division, print_function - -from argparse import ArgumentParser -from ast import literal_eval -from collections import OrderedDict -from collections.abc import Mapping, Sequence -import copy -from io import StringIO -from os.path import join -import re - -import numpy as np -from scipy.optimize import curve_fit -from uncertainties import unumpy as unp -from uncertainties import ufloat - -from pisa import ureg -from pisa.core.distribution_maker import DistributionMaker -from pisa.core.map import Map, MapSet -from pisa.utils.fileio import mkdir, from_file, to_file -from pisa.utils.log import logging, set_verbosity -from pisa.utils.hypersurface import Hypersurface, HypersurfaceParam, get_hypersurface_file_name - - -__all__ = [ - # constants - "GENERAL_SECTION_NAME", - "APPLY_ALL_SECTION_NAME", - "COMBINE_REGEX_OPTION", - "SYS_LIST_OPTION", - "SYS_FUNC_LIST_OPTION", - "UNITS_OPTION", - "UNITS_SPECIFIER", - "SYS_SET_OPTION", - "SET_OPTION_RE", - "REMOVE_OPTION_RE", - # functions - "parse_args", - "parse_fit_config", - "load_and_modify_pipeline_cfg", - "create_hypersurfaces", - "main", -] - -__author__ = "P. Eller, T. Stuttard, T. Ehrhardt, J.L. Lanfranchi" - -__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -GENERAL_SECTION_NAME = "general" -"""general section name""" - -APPLY_ALL_SECTION_NAME = "apply_to_all_sets" -"""section name that defines pipeline config / options for all discr sets""" - -COMBINE_REGEX_OPTION = "combine_regex" -"""Option in general section to specify map(s) to combine before performing fit""" - -SYS_LIST_OPTION = "sys_list" -"""Option in general section to specify discrete systematics""" - -SYS_FUNC_LIST_OPTION = "sys_func_list" -"""Option in general section to specify functional form of the discrete systematics""" - -UNITS_OPTION = "units" -"""Option in general section to specify units of discrete systematics""" - -UNITS_SPECIFIER = "units." -"""User is allowed to use e.g. meter or simply meter in UNITS_OPTION""" - -NOMINAL_SET_PFX = "nominal_set" -"""the section name with this followed by a colon indicates the nominal set""" - -SYS_SET_PFX = "sys_set" -"""section names with this followed by a colon indicate non-nominal systematics sets""" - -SYS_SET_OPTION = "pipeline_cfg" -"""systematics set config file is specified by this option""" - -SET_OPTION_RE = re.compile(r"\s*set\s*\[(.*)\]\s*(\S*.*)") -"""defining a section and/or an option within a section in a pipeline configs is -specified by following this pattern""" - -REMOVE_OPTION_RE = re.compile(r"\s*remove\s*\[(.*)\]\s*(\S*.*)") -"""modifications to pipeline configs are specified by options following this pattern""" - - -def parse_args(): - """Parse arguments from command line. - - Returns - ------- - args : namespace - - """ - parser = ArgumentParser(description=main.__doc__) - parser.add_argument( - "-f", - "--fit-cfg", - type=str, - metavar="configfile", - required=True, - help="Settings for the hypersurface fit", - ) - parser.add_argument( - "--tag", type=str, default="deepcore", help="Tag for the filename." - ) - parser.add_argument( - "-o", "--outdir", type=str, required=True, help="Set output directory" - ) - parser.add_argument("-v", action="count", default=None, help="set verbosity level") - args = parser.parse_args() - return args - - -def parse_fit_config(fit_cfg): - """Perform sanity checks on and parse fit configuration file. - - Parameters - ---------- - fit_cfg : str - path to a fit configuration file - - Returns - ------- - fit_cfg : PISAConfigParser - parsed fit configuration - sys_list : list of str - parsed names of systematic parameters - sys_func_list : list of str - parsed names of systematic parameter functional forms - units_list : list of str - units corresponding to each discrete systematic - combine_regex : list of str - each string is a regular expression for combining pipeline outputs; see - :func:`pisa.core.map.MapSet.combine_regex` for details. - - """ - fit_cfg = from_file(fit_cfg) - no_ws_section_map = {s.strip(): s for s in fit_cfg.sections()} - - if GENERAL_SECTION_NAME not in no_ws_section_map.values(): - raise KeyError('Fit config is missing the "%s" section!' % GENERAL_SECTION_NAME) - - general_section = fit_cfg[GENERAL_SECTION_NAME] - - if SYS_LIST_OPTION not in general_section: - raise KeyError( - "Fit config has to specify systematic parameters as" - ' "%s" option in "%s" section (comma-separated list of names).' - % (SYS_LIST_OPTION, GENERAL_SECTION_NAME) - ) - - if SYS_FUNC_LIST_OPTION not in general_section: - raise KeyError( - "Fit config has to specify systematic parameter functional forms as" - ' "%s" option in "%s" section (comma-separated list of names).' - % (SYS_FUNC_LIST_OPTION, GENERAL_SECTION_NAME) - ) - - sys_list = [s.strip() for s in general_section[SYS_LIST_OPTION].split(",")] - - sys_func_list = [s.strip() for s in general_section[SYS_FUNC_LIST_OPTION].split(",")] - - if UNITS_OPTION in general_section: - units_list = [] - units_specs = ( - general_section[UNITS_OPTION].replace(UNITS_SPECIFIER, "").split(",") - ) - for units_spec in units_specs: - # Make sure units are interpret-able by Pint - try: - ureg.Unit(units_spec) - except: - logging.error( - 'Unit "%s" specified by "%s" option in "general" section is not' - "interpret-able by Pint", - units_spec, - UNITS_OPTION, - ) - raise - units_list.append(units_spec) - else: - units_list = ["dimensionless" for s in sys_list] - logging.warning( - "No %s option found in %s section; assuming systematic parameters are" - " dimensionless", - UNITS_OPTION, - GENERAL_SECTION_NAME, - ) - - if len(units_list) != len(sys_list): - raise ValueError( - '{} units specified by "{}" option but {} systematics specified by "{}"' - "option; must be same number of each.".format( - len(units_list), UNITS_OPTION, len(sys_list), SYS_LIST_OPTION - ) - ) - - logging.info( - "Found systematic parameters %s", - ["{} ({})".format(s, u) for s, u in zip(sys_list, units_list)], - ) - - combine_regex = general_section.get(COMBINE_REGEX_OPTION, None) - if combine_regex: - try: - combine_regex = literal_eval(combine_regex) - except (SyntaxError, ValueError): - logging.warning( - 'Deprecated syntax for "combine_re" (make into a Python-evaluatable' - "sequence of strings instead) :: combine_regex = %s", - combine_regex, - ) - combine_regex = [r.strip() for r in combine_regex.split(",")] - - if APPLY_ALL_SECTION_NAME in no_ws_section_map: - apply_all_section = fit_cfg[no_ws_section_map[APPLY_ALL_SECTION_NAME]] - for no_ws_sname, sname in no_ws_section_map.items(): - if not ( - no_ws_sname.startswith(NOMINAL_SET_PFX) - or no_ws_sname.startswith(SYS_SET_PFX) - ): - continue - sys_set_section = fit_cfg[sname] - for option, val in apply_all_section.items(): - sys_set_section[option] = val - - return fit_cfg, sys_list, sys_func_list, units_list, combine_regex - - -def load_and_modify_pipeline_cfg(fit_cfg, section): - """Load and modify the pipeline config file as specified in that section of the fit - config. - - Parameters - ---------- - fit_cfg : pisa.utils.config_parser.PISAConfigParser - any subclass of :class:`configparser.RawConfigParser` should work as well - - section : str - name of the section to extract from the `fit_cfg` - - Returns - ------- - pipeline_cfg : pisa.utils.config_parser.PISAConfigParser - pipeline config - - pipeline_cfg_path : str - path to the pipeline config as it is specified in the fit config - - """ - pipeline_cfg_path = fit_cfg.get(section, SYS_SET_OPTION) - other_options = fit_cfg.options(section) - other_options.remove(SYS_SET_OPTION) - - pipeline_cfg = from_file(pipeline_cfg_path) - - # Get a no-whitespace version of the section names - section_map = {s.strip(): s for s in pipeline_cfg.sections()} - - for option in other_options: - set_match = SET_OPTION_RE.match(option) - remove_match = REMOVE_OPTION_RE.match(option) if not set_match else None - if set_match: - section_spec, set_option = set_match.groups() - no_ws_section_spec = section_spec.strip() - set_option = set_option.strip() - if no_ws_section_spec not in section_map: - logging.debug( - 'Adding section [%s] to in-memory copy of pipeline config "%s"', - section_spec, - pipeline_cfg_path, - ) - pipeline_cfg.add_section(section_spec) - section_map[no_ws_section_spec] = section_spec - if set_option: - set_value = fit_cfg.get(section, option).strip() - logging.debug( - 'Setting section [%s] option "%s = %s" in in-memory' - ' copy of pipeline config "%s"', - section_spec, - set_option, - set_value, - pipeline_cfg_path, - ) - pipeline_cfg.set(section_map[no_ws_section_spec], set_option, set_value) - elif remove_match: - section_spec, remove_option = remove_match.groups() - no_ws_section_spec = section_spec.strip() - remove_option = remove_option.strip() - if no_ws_section_spec in section_map: - if remove_option: - logging.debug( - 'Removing section [%s] option "%s" from in-memory copy of' - ' pipeline config "%s"', - section_spec, - remove_option, - pipeline_cfg_path, - ) - pipeline_cfg.remove_option( - section_map[no_ws_section_spec], remove_option - ) - else: - logging.debug( - "Removing section [%s] from in-memory copy of pipeline config" - ' "%s"', - section_spec, - pipeline_cfg_path, - ) - pipeline_cfg.remove_section(section_map[no_ws_section_spec]) - else: - logging.warning( - "Told to remove section [%s] but section does not exist in" - ' pipline config "%s"', - section_spec, - pipeline_cfg_path, - ) - else: - raise ValueError("Unhandled option in fit config: {}".format(option)) - - return pipeline_cfg, pipeline_cfg_path - - -def create_hypersurfaces(fit_cfg): - """Generate and store mapsets for different discrete systematics sets - (with a single set characterised by a dedicated pipeline configuration) - - Parameters - ---------- - fit_cfg : string - Path to a fit config file - - Returns - ------- - hypersurfaces : OrderedDict - Container with the fitted hypersurface for each map type - - """ - - # - # Parse fit config file - # - - parsed_fit_cfg, sys_list, sys_func_list, units_list, combine_regex = parse_fit_config(fit_cfg) - - - # - # Create the hypersurface params - # - - # Loop over the param names and functional forms and create the params - #TODO Add option to support initial param guesses - params = [ HypersurfaceParam(name=param_name, func_name=param_func_name) for param_name, param_func_name in zip(sys_list, sys_func_list) ] - - - # - # Parse defintion of each dataset - # - - fit_cfg_txt_buf = StringIO() - parsed_fit_cfg.write(fit_cfg_txt_buf) - fit_cfg_txt = fit_cfg_txt_buf.getvalue() - - nominal_pipeline_cfg = None - nominal_param_values = None - sys_pipeline_cfgs = [] - sys_param_values = [] - - # Loop over config - for section in parsed_fit_cfg.sections(): - - no_ws_section = section.strip() - - section_prefix = no_ws_section.split(":")[0].strip() - is_nominal = section_prefix == NOMINAL_SET_PFX - is_dataset = is_nominal or section_prefix == SYS_SET_PFX - - if is_dataset: - - # Parse the list of systematics parameter values from the section name - sys_param_point = tuple(float(x) for x in section.split(":")[1].split(",")) - - if len(sys_param_point) != len(sys_list): - raise ValueError( - "Section heading [{}] specifies {:d} systematic" - " parameter values, but there are {:d} systematics".format( - section, len(sys_param_point), len(sys_list) - ) - ) - - # Parse the config file - parsed_pipeline_cfg, pipeline_cfg_path = load_and_modify_pipeline_cfg( - fit_cfg=parsed_fit_cfg, section=section - ) - - # Store - if is_nominal : - assert nominal_pipeline_cfg is None, "Found multiple nominal dataset definitions" - nominal_pipeline_cfg = parsed_pipeline_cfg - nominal_param_values = sys_param_point - else : - sys_pipeline_cfgs.append(parsed_pipeline_cfg) - sys_param_values.append(sys_param_point) - - # In this loop, nothing to do for general & apply_to_all_sets sections - elif no_ws_section in (GENERAL_SECTION_NAME, APPLY_ALL_SECTION_NAME): - pass - - # Do not allow any other sections in the config - else: - raise ValueError("Invalid section in fit config file: [%s]" % section) - - # Check found stuff - assert nominal_pipeline_cfg is not None, "No nominal dataset definition found" - assert len(sys_pipeline_cfgs) > 0, "No systematics dataset definitions found" - - # Re-format params into a dict, including the param names - nominal_param_values = { name:val for name, val in zip(sys_list,nominal_param_values) } - sys_param_values = [ { name:val for name, val in zip(sys_list,s) } for s in sys_param_values ] - - - # - # Create mapsets - # - - # Get the nominal mapset - nominal_dist_maker = DistributionMaker(nominal_pipeline_cfg) - nominal_mapset = nominal_dist_maker.get_outputs(return_sum=False)[0] - - # Get the systematics mapsets - sys_mapsets = [] - for sys_pipeline_cfg in sys_pipeline_cfgs : - sys_dist_maker = DistributionMaker(sys_pipeline_cfg) - sys_mapset = sys_dist_maker.get_outputs(return_sum=False)[0] - sys_mapsets.append(sys_mapset) - - # Combine maps according to the provided regex, if one was provided - if combine_regex: - logging.info( - "Combining maps according to regular expression(s) %s", combine_regex - ) - nominal_mapset = nominal_mapset.combine_re(combine_regex) - sys_mapsets = [ s.combine_re(combine_regex) for s in sys_mapsets ] - - - # - # Fit the hypersurface - # - - hypersurfaces = OrderedDict() - - # Fit one per map, so loop over them - for map_name in nominal_mapset.names : - - # Create the hypersurface - hypersurface = Hypersurface( - params=params, - initial_intercept=1., # Initial value for intercept - ) - - # Get just the requested map - nominal_map = nominal_mapset[map_name] - sys_maps = [ s[map_name] for s in sys_mapsets ] - - # Perform fit - hypersurface.fit( - nominal_map=nominal_map, - nominal_param_values=nominal_param_values, - sys_maps=sys_maps, - sys_param_values=sys_param_values, - norm=True, - ) - - # Store the result - hypersurfaces[map_name] = hypersurface - - # Done - return hypersurfaces - - - -def main(): - """Perform a hypersurface fit to discrete systematics sets.""" - - # Get args - args = parse_args() - set_verbosity(args.v) - - # Read in data and fit hypersurfaces to it - hypersurfaces = create_hypersurfaces(fit_cfg=args.fit_cfg) - - # Store as JSON - mkdir(args.outdir) - arbitrary_hypersurface = list(hypersurfaces.values())[0] - output_path = join( args.outdir, get_hypersurface_file_name(arbitrary_hypersurface, args.tag) ) - to_file(hypersurfaces, output_path) - - -if __name__ == "__main__": - main() diff --git a/pisa/scripts/make_events_file.py b/pisa/scripts/make_events_file.py deleted file mode 100755 index ba52d6171..000000000 --- a/pisa/scripts/make_events_file.py +++ /dev/null @@ -1,771 +0,0 @@ -#!/usr/bin/env python - -""" -Take simulated (and reconstructed) HDF5 file(s) (as converted from I3 by -icecube.hdfwriter.I3HDFTableService) as input and writes out a simplified HDF5 -file for use with PISA. -""" - - -from __future__ import absolute_import, division - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from collections import OrderedDict -from copy import deepcopy -import os - -import numpy as np - -from pisa.core.events import Events -from pisa.utils.data_proc_params import DataProcParams -from pisa.utils.format import list2hrlist -from pisa.utils.fileio import expand, mkdir, to_file -from pisa.utils.flavInt import (FlavIntData, NuFlav, NuFlavIntGroup, - ALL_NUFLAVINTS, ALL_NUINT_TYPES, xlateGroupsStr) -from pisa.utils.log import logging, set_verbosity -from pisa.utils.mcSimRunSettings import DetMCSimRunsSettings -from pisa.utils.resources import find_resource - - -__all__ = ['EXAMPLE', 'CMSQ_TO_MSQ', 'EXTRACT_FIELDS', 'OUTPUT_FIELDS', - 'powerLawIntegral', 'makeEventsFile', - 'parse_args', 'main'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -EXAMPLE = """ -Example command-line usage: - -make_events_file.py - --det "PINGU" - --proc "V5.1" - --run 390 ~/data/390/icetray_hdf5/*.hdf5 - --run 389 ~/data/389/icetray_hdf5/*.hdf5 - --run 388 ~/data/388/icetray_hdf5/*.hdf5 - -vv - --outdir /tmp/events/ -""" - - -CMSQ_TO_MSQ = 1.0e-4 -"""Conversion factor: convert from centimeters^2 to meters^2""" - -# Default fields to extract from source HDF5 files during processing -# Note that *_coszen is generated from *_zenith -EXTRACT_FIELDS = ( - 'true_energy', - 'true_coszen', - 'reco_energy', - 'reco_coszen', - 'one_weight', - 'interaction_prob', - 'pid', -) - -# Default fields to output to destination PISA events HDF5 file -OUTPUT_FIELDS = ( - 'true_energy', - 'true_coszen', - 'reco_energy', - 'reco_coszen', - #'mc_weight', - #'mc_weight_per_gev_per_sr', - 'weighted_aeff', - 'pid', -) - - -def powerLawIntegral(E0, E1, gamma): - import sympy as sym - E = sym.Symbol('E') - I = sym.integrate(E**(-gamma), E) - return I.evalf(subs={E: E1}) - I.evalf(subs={E: E0}) - - -def makeEventsFile(data_files, detector, proc_ver, cut, outdir, - run_settings=None, data_proc_params=None, join=None, - cust_cuts=None, extract_fields=EXTRACT_FIELDS, - output_fields=OUTPUT_FIELDS): - r"""Take the simulated and reconstructed HDF5 file(s) (as converted from I3 - by icecube.hdfwriter.I3HDFTableService) as input and write out a simplified - PISA-standard-format HDF5 file for use in aeff, reco, and/or PID stages. - - Parameters - ---------- - data_files : dict - File paths for finding data files for each run, formatted as: - { - : , - : , - ... - : , - } - - detector : string - Name of the detector (e.g. IceCube, DeepCore, PINGU, etc.) as found in - e.g. mc_sim_run_settings.json and data_proc_params.json files. - - proc_ver - Version of processing applied to the events, as found in e.g. - data_proc_params.json. - - cut - Name of a standard cut to use; must be specified in the relevant - detector/processing version node of the data processing parameters - (file from which the data_proc_params object was instantiated) - - outdir - Directory path in which to store resulting files; will be generated if - it does not already exist (including any parent directories that do not - exist) - - run_settings : string or MCSimRunSettings - Resource location of mc_sim_run_settings.json or an MCSimRunSettings - object instantiated therefrom. - - data_proc_params : string or DataProcParams - Resource location of data_proc_params.json or a DataProcParams object - instantiated therefrom. - - join - String specifying any flavor/interaction types (flavInts) to join - together. Separate flavInts with commas (',') and separate groups - with semicolons (';'). E.g. an acceptable string is: - 'numucc+numubarcc; nuall bar NC, nuall NC' - - cust_cuts - dict with a single DataProcParams cut specification or list of same - (see help for DataProcParams for detailed description of cut spec) - - extract_fields : None or iterable of strings - Field names to extract from source HDF5 file. If None, extract all - fields. - - output_fields : None or iterable of strings - Fields to include in the generated PISA-standard-format events HDF5 - file; note that if 'weighted_aeff' is not preent, effective area will - not be computed. If None, all fields will be written. - - Notes - ----- - Compute "weighted_aeff" field: - - Within each int type (CC or NC), ngen should be added together; - events recorded of that int type then get their one_weight divided by the - total *for that int type only* to obtain the "weighted_aeff" for that - event (even if int types are being grouped/joined together). - - This has the effect that within a group, ... - ... and within an interaction type, effective area is a weighted - average of that of the flavors being combined. E.g. for CC, - - \sum_{run x}\sum_{flav y} (Aeff_{x,y} * ngen_{x,y}) - Aeff_CC = ----------------------------------------------------- , - \sum_{run x}\sum_{flav y} (ngen_{x,y}) - - ... and then across interaction types, the results of the above for - each int type need to be summed together, i.e.: - - Aeff_total = Aeff_CC + Aeff_NC - - Note that each grouping of flavors is calculated with the above math - completely independently from other flavor groupings specified. - - See Justin Lanfranchi's presentation on the PINGU Analysis call, - 2015-10-21, for more details: - https://wikispaces.psu.edu/download/attachments/282040606/meff_report_jllanfranchi_v05_2015-10-21.pdf - - """ - if isinstance(run_settings, str): - run_settings = DetMCSimRunsSettings( - find_resource(run_settings), - detector=detector - ) - assert isinstance(run_settings, DetMCSimRunsSettings) - assert run_settings.detector == detector - - if isinstance(data_proc_params, str): - data_proc_params = DataProcParams( - detector=detector, - proc_ver=proc_ver, - data_proc_params=find_resource(data_proc_params) - ) - assert data_proc_params.detector == detector - assert data_proc_params.proc_ver == proc_ver - - runs = sorted(data_files.keys()) - - all_flavs = [] - flavs_by_run = {} - run_norm_factors = {} - bin_edges = set() - - runs_by_flavint = FlavIntData() - for flavint in runs_by_flavint.flavints: - runs_by_flavint[flavint] = [] - - #ngen_flavint_by_run = {run:FlavIntData() for run in runs} - ##ngen_per_flav_by_run = {run:FlavIntData() for run in runs} - #eint_per_flav_by_run = {run:FlavIntData() for run in runs} - #for run in runs: - # flavints_in_run = run_settings.get_flavints(run=run) - # e_range = run_settings.get_energy_range(run) - # gamma = run_settings.get_spectral_index(run) - # for flavint in flavints_in_run: - # runs_by_flavint[flavint].append(run) - # ngen_flav = run_settings.get_num_gen( - # run=run, flav_or_flavint=flavint, include_physical_fract=True - # ) - # #runs_by_flavint[flavint].append(run) - # #this_flav = flavint. - # #xsec_fract_en_wtd_avg[run][flavint] = \ - # ngen_flavint_by_run[run][flavint] = \ - # xsec.get_xs_ratio_integral( - # flavintgrp0=flavint, - # flavintgrp1=flavint.flav, - # e_range=e_range, - # gamma=gamma, - # average=True - # ) - # xsec_ver = run_settings.get_xsec_version(run=run) - # if xsec_ver_ref is None: - # xsec_ver_ref = xsec_ver - # # An assumption of below logic is that all MC is generated using the - # # same cross sections version. - # # - # # TODO / NOTE: - # # It would be possible to combine runs with different cross sections so - # # long as each (flavor, interaction type) cross sections are - # # weighted-averaged together using weights - # # N_gen_{n,flav+inttype} * E_x^{-gamma_n} / - # # ( \int_{E_min_n}^{E_max_n} E^{-\gamma_n} dE ) - # # where E_x are the energy sample points specified in the cross - # # sections (and hence these must also be identical across all cross - # # sections that get combined, unless interpolation is performed). - # assert xsec_ver == xsec_ver_ref - # #ngen_weighted_energy_integral[str(run)] = powerLawIntegral( - # #flavs_by_run[run] = run_settings.flavs(run) - ##flavs_present = - - detector_geom = run_settings[runs[0]]['geom'] - - # Create Events object to store data - evts = Events() - evts.metadata.update({ - 'detector': run_settings.detector, - 'proc_ver': data_proc_params.proc_ver, - 'geom': detector_geom, - 'runs': runs, - }) - - cuts = [] - if isinstance(cust_cuts, dict): - cust_cuts = [cust_cuts] - if cut is not None: - evts.metadata['cuts'].append(cut) - cuts.append(cut) - if cust_cuts is not None: - for ccut in cust_cuts: - evts.metadata['cuts'].append('custom: ' + ccut['pass_if']) - cuts.append(ccut) - - orig_outdir = outdir - outdir = expand(outdir) - logging.info('Output dir spec\'d: %s', orig_outdir) - if outdir != orig_outdir: - logging.info('Output dir expands to: %s', outdir) - mkdir(outdir) - - detector_label = str(data_proc_params.detector) - proc_label = 'proc_' + str(data_proc_params.proc_ver) - - # What flavints to group together - if join is None or join == '': - grouped = [] - ungrouped = [NuFlavIntGroup(k) for k in ALL_NUFLAVINTS] - groups_label = 'unjoined' - logging.info('Events in the following groups will be joined together:' - ' (none)') - else: - grouped, ungrouped = xlateGroupsStr(join) - evts.metadata['flavints_joined'] = [str(g) for g in grouped] - groups_label = 'joined_G_' + '_G_'.join([str(g) for g in grouped]) - logging.info('Events in the following groups will be joined together: ' - + '; '.join([str(g) for g in grouped])) - - # Find any flavints not included in the above groupings - flavint_groupings = grouped + ungrouped - if len(ungrouped) == 0: - ungrouped = ['(none)'] - logging.info('Events of the following flavints will NOT be joined' - 'together: ' + '; '.join([str(k) for k in ungrouped])) - - # Enforce that flavints composing groups are mutually exclusive - for grp_n, flavintgrp0 in enumerate(flavint_groupings[:-1]): - for flavintgrp1 in flavint_groupings[grp_n+1:]: - assert len(set(flavintgrp0).intersection(set(flavintgrp1))) == 0 - - flavintgrp_names = [str(flavintgrp) for flavintgrp in flavint_groupings] - - # Instantiate storage for all intermediate destination fields; - # The data structure looks like: - # extracted_data[group #][interaction type][field name] = list of data - if extract_fields is None: - extracted_data = [ - { - inttype: {} for inttype in ALL_NUINT_TYPES - } - for _ in flavintgrp_names - ] - else: - extracted_data = [ - { - inttype: {field: [] for field in extract_fields} - for inttype in ALL_NUINT_TYPES - } - for _ in flavintgrp_names - ] - - # Instantiate generated-event counts for destination fields; count - # CClseparately from NC because aeff's for CC & NC add, whereas - # aeffs intra-CC should be weighted-averaged (as for intra-NC) - ngen = [ - {inttype: {} for inttype in ALL_NUINT_TYPES} - for _ in flavintgrp_names - ] - - # Loop through all of the files, retrieving the events, filtering, - # and recording the number of generated events pertinent to - # calculating aeff - filecount = {} - detector_geom = None - bad_files = [] - for run, fnames in data_files.items(): - file_count = 0 - for fname in fnames: - # Retrieve data from all nodes specified in the processing - # settings file - logging.trace('Trying to get data from file %s', fname) - try: - data = data_proc_params.get_data( - fname, run_settings=run_settings - ) - except (ValueError, KeyError, IOError): - logging.warning('Bad file encountered: %s', fname) - bad_files.append(fname) - continue - - file_count += 1 - - # Check to make sure only one run is present in the data - runs_in_data = set(data['run']) - assert len(runs_in_data) == 1, 'Must be just one run in data' - - #run = int(data['run'][0]) - if not run in filecount: - filecount[run] = 0 - filecount[run] += 1 - rs_run = run_settings[run] - - # Record geom; check that geom is consistent with other runs - if detector_geom is None: - detector_geom = rs_run['geom'] - assert rs_run['geom'] == detector_geom, \ - 'All runs\' geometries must match!' - - # Loop through all flavints spec'd for run - for run_flavint in rs_run['flavints']: - barnobar = run_flavint.bar_code - int_type = run_flavint.intType - - # Retrieve this-interaction-type- & this-barnobar-only events - # that also pass cuts. (note that cut names are strings) - intonly_cut_data = data_proc_params.apply_cuts( - data, - cuts=cuts+[str(int_type), str(barnobar)], - return_fields=extract_fields - ) - - # Record the generated count and data for this run/flavor for - # each group to which it's applicable - for grp_n, flavint_group in enumerate(flavint_groupings): - if not run_flavint in flavint_group: - continue - - # Instantiate a field for particles and antiparticles, - # keyed by the output of the bar_code property for each - if not run in ngen[grp_n][int_type]: - ngen[grp_n][int_type][run] = { - NuFlav(12).bar_code: 0, - NuFlav(-12).bar_code: 0, - } - - # Record count only if it hasn't already been recorded - if ngen[grp_n][int_type][run][barnobar] == 0: - # Note that one_weight includes cc/nc:total fraction, - # so DO NOT specify the full flavint here, only flav - # (since one_weight does NOT take bar/nobar fraction, - # it must be included here in the ngen computation) - flav_ngen = run_settings.get_num_gen(run=run, - barnobar=barnobar) - ngen[grp_n][int_type][run][barnobar] = flav_ngen - - # Append the data. Note that extracted_data is: - # extracted_data[group n][int_type][extract field name] = - # list - if extract_fields is None: - for f in intonly_cut_data.keys(): - if f not in extracted_data[grp_n][int_type]: - extracted_data[grp_n][int_type][f] = [] - extracted_data[grp_n][int_type][f].extend( - intonly_cut_data[f] - ) - else: - for f in extract_fields: - extracted_data[grp_n][int_type][f].extend( - intonly_cut_data[f] - ) - logging.info('File count for run %s: %d', run, file_count) - to_file(bad_files, '/tmp/bad_files.json') - - if ((output_fields is None - and (extract_fields is None or 'one_weight' in extract_fields)) - or 'weighted_aeff' in output_fields): - fmtfields = (' '*12+'flavint_group', - 'int type', - ' run', - 'part/anti', - 'part/anti count', - 'aggregate count') - fmt_n = [len(f) for f in fmtfields] - fmt = ' '.join([r'%'+str(n)+r's' for n in fmt_n]) - lines = ' '.join(['-'*n for n in fmt_n]) - logging.info(fmt, fmtfields) - logging.info(lines) - for grp_n, flavint_group in enumerate(flavint_groupings): - for int_type in set([fi.intType for fi in - flavint_group.flavints]): - ngen_it_tot = 0 - for run, run_counts in ngen[grp_n][int_type].items(): - for barnobar, barnobar_counts in run_counts.items(): - ngen_it_tot += barnobar_counts - logging.info( - fmt, flavint_group.simple_str(), int_type, - str(run), barnobar, int(barnobar_counts), - int(ngen_it_tot) - ) - # Convert data to numpy array - if extract_fields is None: - for field in extracted_data[grp_n][int_type].keys(): - extracted_data[grp_n][int_type][field] = \ - np.array(extracted_data[grp_n][int_type][field]) - else: - for field in extract_fields: - extracted_data[grp_n][int_type][field] = \ - np.array(extracted_data[grp_n][int_type][field]) - # Generate weighted_aeff field for this group / int type's data - extracted_data[grp_n][int_type]['weighted_aeff'] = \ - extracted_data[grp_n][int_type]['one_weight'] \ - / ngen_it_tot * CMSQ_TO_MSQ - - # Report file count per run - for run, count in filecount.items(): - logging.info('Files read, run %s: %d', run, count) - ref_num_i3_files = run_settings[run]['num_i3_files'] - if count != ref_num_i3_files: - logging.warning( - 'Run %s, Number of files read (%d) != number of ' - 'source I3 files (%d), which may indicate an error.', - run, count, ref_num_i3_files - ) - - # Generate output data - for flavint in ALL_NUFLAVINTS: - int_type = flavint.intType - for grp_n, flavint_group in enumerate(flavint_groupings): - if not flavint in flavint_group: - logging.trace('flavint %s not in flavint_group %s, passing.', - flavint, flavint_group) - continue - else: - logging.trace( - 'flavint %s **IS** in flavint_group %s, storing.', - flavint, flavint_group - ) - if output_fields is None: - evts[flavint] = extracted_data[grp_n][int_type] - else: - evts[flavint] = {f: extracted_data[grp_n][int_type][f] - for f in output_fields} - - # Generate file name - numerical_runs = [] - alphanumerical_runs = [] - for run in runs: - try: - int(run) - numerical_runs.append(int(run)) - except ValueError: - alphanumerical_runs.append(str(run)) - run_labels = [] - if len(numerical_runs) > 0: - run_labels.append(list2hrlist(numerical_runs)) - if len(alphanumerical_runs) > 0: - run_labels += sorted(alphanumerical_runs) - run_label = 'runs_' + ','.join(run_labels) - geom_label = '' + detector_geom - fname = 'events__' + '__'.join([ - detector_label, - geom_label, - run_label, - proc_label, - groups_label, - ]) + '.hdf5' - - outfpath = os.path.join(outdir, fname) - logging.info('Writing events to %s', outfpath) - - # Save data to output file - evts.save(outfpath) - - -def parse_args(): - """Get command line arguments""" - parser = ArgumentParser( - description=__doc__ + EXAMPLE, - formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - '--det', - metavar='DETECTOR', - type=str, - required=True, - help='''Detector, e.g. "PINGU" or "DeepCore". This is used as the - top-most key in run_settings.json and data_proc_params.json files.''' - ) - parser.add_argument( - '--proc', - metavar='PROC_VER', - type=str, - required=True, - help='''Processing version applied to simulation; processing versions - are defined with respect to each geometry version. See - data_proc_params.json file for definitions (or edit that file to add - more).''' - ) - - parser.add_argument( - '--run', - metavar='RUN_ID H5_FILE0 H5_FILE1 ...', - type=str, - nargs="+", - action='append', - required=True, - help='nue HDF5 file(s)' - ) - - parser.add_argument( - '--outdir', - metavar='DIR', - type=str, - required=True, - help='directory into which to store resulting HDF5 file' - ) - - parser.add_argument( - '--run-settings', - metavar='JSON_FILE', - type=str, - default='events/mc_sim_run_settings.json', - help='JSON file with reference run settings' - ) - - parser.add_argument( - '--data-proc-params', - metavar='JSON_FILE', - type=str, - default='events/data_proc_params.json', - help='JSON file with reference processing settings' - ) - - # NOTE: - # Removed --join in favor of forcing standard events groupings to be output - # all at once, to ensure all files get generated all the time. Also - # need to implement validation for consistent events file usage in PISA for - # template settings file (i.e., if different files are specified for - # different PISA stages, ensure they all come from the same detector, - # geometry, and processing versions and have events groupings that do not - # lead to erroneous conclusions for the stages they're specified for) - - #parser.add_argument( - # '--join', - # const='nuecc,nuebarcc;numucc,numubarcc;nutaucc,nutaubarcc;' - # 'nuallnc,nuallbarnc', - # default='', - # action='store', - # nargs='?', - # type=str, - # help= \ - # '''Optionally join flavors together to increase statistics for Aeff - # and/or resolutions (aeff and reco stages, respectively). Specifying the - # --join option without an argument joins together: nu_x & - # nu_x_bar CC events together (one set for each of x=e, x=mu, and x=tau), - # and joins nuall NC & nuallbar NC events tegether. If a string - # argument is supplied, this specifies custom groups to join together - # instead. The string must be a semicolon-separated list each field of - # which itself a comma-separated list of event "flavints" (flavor and - # interaction type) to grup together. Any event flavint not included in - # that string will be found individually, i.e., not joined together with - # any other flavors''' - #) - - parser.add_argument( - '--cut', - metavar='CUT_NAME', - type=str, - help='''Name of pre-defined cut to apply. See the specified - --data-proc-params file for definitions for the detector and processing - version you're working with (note that the names of cuts and what these - entail varies by detector and processing version)''' - ) - - parser.add_argument( - '--ccut-pass-if', - metavar='CRITERIA', - type=str, - default='', - help= \ - '''Custom cut: String containing criteria for passing a cut, using - field names specified by the --ccut-fields argument. Standard Python- - and numpy-namespace expressions are allowed as well, since this string - is passed to 'eval'. E.g.: - --ccut-fields="z:MCNeutrino/zenith,l6:my_l6/value" \ - --ccut-pass-if="(l6 == 1) & (z > pi/2)" ''' - ) - parser.add_argument( - '--ccut-fields', - metavar='FIELDS', - type=str, - default='', - help='''Custom cut: String of comma-separated fields, each containing - colon-separated (variable name : HDF5 address) tuples. For example, - specifying: - --ccut-fields="l5:my_l5/value,l6:my_l6/value" - allows for a custom cut to be defined via --ccut-pass-if="(l5 == 1) & - (l6 == 1)"''' - ) - - parser.add_argument( - '--no-aeff', - action='store_true', - help='''Do not compute or include the 'weighted_aeff' field in the - generated PISA events HDF5 file, disallowing use of the file for - effective area parameterizations or the Monte Carlo aeff stage''' - ) - - parser.add_argument( - '--no-pid', - action='store_true', - help='''Do not include the 'pid' field in the generated PISA events - HDF5 file, disallowing use of the file for PID parameterizations or the - Monte Carlo PID stage''' - ) - - parser.add_argument( - '-v', '--verbose', - action='count', - default=0, - help='set verbosity level' - ) - - args = parser.parse_args() - return args - - -def main(): - args = parse_args() - set_verbosity(args.verbose) - - runs_files = OrderedDict() - for run_info in args.run: - runs_files[run_info[0]] = run_info[1:] - - det = args.det.strip() - proc = args.proc.strip() - run_settings = DetMCSimRunsSettings( - find_resource(args.run_settings), - detector=det - ) - data_proc_params = DataProcParams( - detector=det, - proc_ver=proc, - data_proc_params=find_resource(args.data_proc_params) - ) - - logging.info('Using detector %s, processing version %s.', det, proc) - - extract_fields = deepcopy(EXTRACT_FIELDS) - output_fields = deepcopy(OUTPUT_FIELDS) - - if args.no_pid: - extract_fields = [f for f in extract_fields if f != 'pid'] - output_fields = [f for f in output_fields if f != 'pid'] - - if args.no_aeff: - output_fields = [f for f in output_fields if f != 'weighted_aeff'] - - # Add any custom cuts specified on command line - ccut = None - if args.ccut_pass_if: - ccut = { - 'pass_if': args.ccut_pass_if, - 'fields': args.ccut_fields.split(',') - } - - # One events file will be produced for each of The following flavint - # groupings - groupings = [ - # No events joined together - None, - # CC events unjoined; join nuall NC and nuallbar NC separately (used - # for generating aeff param service's aeff parameterizations) - 'nuallnc,nuallbarnc', - # CC events paried by flav--anti-flav; nuallNC+nuallbarNC all joined - # together; used for reco services (MC and vbwkde) - 'nuecc+nuebarcc,numucc+numubarcc,nutaucc+nutaubarcc,nuallnc+nuallbarnc', - ] - - # Create the events files - for grouping in groupings: - makeEventsFile( - data_files=runs_files, - detector=args.det, - proc_ver=args.proc, - cut=args.cut, - outdir=args.outdir, - run_settings=run_settings, - data_proc_params=data_proc_params, - join=grouping, - cust_cuts=ccut, - extract_fields=None, #extract_fields, - output_fields=None, #output_fields, - ) - - -if __name__ == "__main__": - main() diff --git a/pisa/scripts/make_nufit_theta23_spline_priors.py b/pisa/scripts/make_nufit_theta23_spline_priors.py deleted file mode 100755 index b0f1040c8..000000000 --- a/pisa/scripts/make_nufit_theta23_spline_priors.py +++ /dev/null @@ -1,203 +0,0 @@ -#! /usr/bin/env python - -""" -Create splines to the NuFit delta-chi2 surfaces for theta23 and output them in -a format that can be read by PISA to use as a prior on this parameter. -""" - - -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -import gzip -import os -import sys - -import numpy as np -import scipy.interpolate - -from pisa.utils.fileio import to_file - - -__all__ = ['extract_vals', 'make_prior_dict', 'main'] - -__author__ = 'S. Wren' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def extract_vals(infile, string_of_interest): - readout = False - x = [] - y = [] - for line in infile: - if line.strip().startswith('#'): - if line.strip() == string_of_interest: - readout = True - else: - readout = False - else: - if readout: - vals = line.strip().split(' ') - if len(vals) == 2: - x.append(float(vals[0])) - y.append(float(vals[1])) - - return x, y - - -def make_prior_dict(f_io=None, f_no=None, f=None): - - if f is not None: - priors = {} - priors["theta23"] = {} - priors["theta23"]["coeffs"] = f[1] - priors["theta23"]["deg"] = f[2] - priors["theta23"]["knots"] = f[0] - priors["theta23"]["kind"] = "spline" - priors["theta23"]["units"] = "radian" - - elif f_io is not None and f_no is not None: - priors = {} - priors["theta23_ih"] = {} - priors["theta23_ih"]["coeffs"] = f_io[1] - priors["theta23_ih"]["deg"] = f_io[2] - priors["theta23_ih"]["knots"] = f_io[0] - priors["theta23_ih"]["kind"] = "spline" - priors["theta23_ih"]["units"] = "radian" - priors["theta23_nh"] = {} - priors["theta23_nh"]["coeffs"] = f_no[1] - priors["theta23_nh"]["deg"] = f_no[2] - priors["theta23_nh"]["knots"] = f_no[0] - priors["theta23_nh"]["kind"] = "spline" - priors["theta23_nh"]["units"] = "radian" - - else: - raise ValueError('No functions passed to save!') - - return priors - - -def main(): - parser = ArgumentParser(description=__doc__, - formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('-io','--io_chi2_file',type=str,required=True, - help="Inverted Ordering Chi2 file from NuFit") - parser.add_argument('-no','--no_chi2_file',type=str,required=True, - help="Inverted Ordering Chi2 file from NuFit") - parser.add_argument('--shifted', action='store_true', default=False, - help='''Flag if wanting prior which attempts to remove - the ordering prior by subtracting the delta chi2.''') - parser.add_argument('--minimised', action='store_true', default=False, - help='''Flag if wanting prior which attempts to remove - the ordering prior by minimising over both surfaces.''') - parser.add_argument('--outdir', metavar='DIR', type=str, required=True, - help='''Store all output files to this directory. It - is recommended you save them in the priors directory - in the PISA resources.''') - - args = parser.parse_args() - - io_filename, io_fileext = os.path.splitext(args.io_chi2_file) - no_filename, no_fileext = os.path.splitext(args.no_chi2_file) - - if io_fileext != '.gz': - raise ValueError('%s file extension not expected. Please use the file ' - 'as downloaded from the Nu-Fit website.'%io_fileext) - if no_fileext != '.gz': - raise ValueError('%s file extension not expected. Please use the file as ' - 'downloaded directly from the Nu-Fit website.'%no_fileext) - - # Get Nu-Fit version from filenames - NuFitVersion = io_filename.split('/')[-1].split('.')[0] - if NuFitVersion[0].lower() != 'v': - raise ValueError('%s%s input file does not allow for discerning the ' - 'Nu-Fit version directly from the filename. Please ' - 'use the file as downloaded directly from the Nu-Fit ' - 'website.'%(io_filename,io_fileext)) - NO_NuFitVersion = no_filename.split('/')[-1].split('.')[0] - if NuFitVersion != NO_NuFitVersion: - raise ValueError('The NuFit version extracted from the NO and IO files ' - 'do not match. i.e. %s is not the same as %s. Please ' - 'use the same NuFit version for each of the NO and IO ' - 'chi2 surfaces.' - %(NuFitVersion,NO_NuFitVersion)) - - # Add special treatment for NuFit 2.1 since it has two releases - if NuFitVersion == 'v21': - NuFitVersion += io_filename.split('/')[-1].split('-')[1] - - io_infile = gzip.open(args.io_chi2_file) - no_infile = gzip.open(args.no_chi2_file) - - io_s2th23, io_dchi2 = extract_vals( - infile=io_infile, - string_of_interest='# T23 projection: sin^2(theta23) Delta_chi^2' - ) - no_s2th23, no_dchi2 = extract_vals( - infile=no_infile, - string_of_interest='# T23 projection: sin^2(theta23) Delta_chi^2' - ) - - io_th23 = np.arcsin(np.sqrt(np.array(io_s2th23))) - no_th23 = np.arcsin(np.sqrt(np.array(no_s2th23))) - - io_dchi2 = np.array(io_dchi2) - no_dchi2 = np.array(no_dchi2) - - f_io = scipy.interpolate.splrep(io_th23,-io_dchi2/2.0,s=0) - f_no = scipy.interpolate.splrep(no_th23,-no_dchi2/2.0,s=0) - - priors = make_prior_dict(f_io=f_io, - f_no=f_no) - - to_file(priors, os.path.join(args.outdir, - 'nufit%sstandardtheta23splines.json'%NuFitVersion)) - - if args.shifted: - # Make priors where the delta chi2 between the orderings is removed. - # The idea is to remove the prior on the ordering. - - io_shifteddchi2 = io_dchi2 - min(io_dchi2) - no_shifteddchi2 = no_dchi2 - min(no_dchi2) - - f_shiftedio = scipy.interpolate.splrep(io_th23,-io_shifteddchi2/2.0,s=0) - f_shiftedno = scipy.interpolate.splrep(no_th23,-no_shifteddchi2/2.0,s=0) - - shiftedpriors = make_prior_dict(f_io=f_shiftedio, - f_no=f_shiftedno) - - to_file(shiftedpriors, - os.path.join(args.outdir, - 'nufit%sshiftedtheta23splines.json'%NuFitVersion)) - - if args.minimised: - # Make one prior that is the minimum of both of the original chi2 - # surfaces. The idea is to remove the prior on the ordering. - - minchi2 = np.minimum(io_dchi2, no_dchi2) - - # Now just one prior. X values should be the same for both. - f_minimised = scipy.interpolate.splrep(io_th23,-minchi2/2.0,s=0) - - minimisedprior = make_prior_dict(f=f_minimised) - - to_file(minimisedprior, - os.path.join(args.outdir, - 'nufit%sminimisedtheta23spline.json'%NuFitVersion)) - -main.__doc__ = __doc__ - - -if __name__ == '__main__': - main() diff --git a/pisa/scripts/test_flux_weights.py b/pisa/scripts/test_flux_weights.py deleted file mode 100755 index 63cda4ac3..000000000 --- a/pisa/scripts/test_flux_weights.py +++ /dev/null @@ -1,1684 +0,0 @@ -#! /usr/bin/env python - -""" -A set of tests on the flux weights calculated by PISA. -""" - - -from __future__ import absolute_import, division - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -import os - -import numpy as np -from matplotlib import pyplot as plt -plt.rcParams['text.usetex'] = True -import matplotlib.colors as colors - -from pisa.utils.log import logging, set_verbosity -from pisa.utils.flux_weights import (load_2d_table, calculate_2d_flux_weights, - PRIMARIES, TEXPRIMARIES, load_3d_table, - calculate_3d_flux_weights) - -__author__ = 'S. Wren' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def plot_1d_slices(xintvals, yintvals, xtabvals, ytabvals, xtabbins, xlabel, - ylabel, xtext, ytext, text, table_name, save_name, log): - """Test function to show interpolation and tables overlaid in 1D slices. - See main function for how to use this function. - - Parameters - ---------- - xintvals : list - A list of the x points where the spline was evaluated. - yintvals : list - A list of the y points which the spline evaluated to. - xtabvals : list - A list of the x points where the table is defined. - ytabvals : list - A list of the y points where the table is defined. - xtabbins : list - A list of the bin edges. Should have xtabvals as the bin centres. - xlabel : string - A label for the x-axis of the plot. - ylabel : string - A label for the y-axis of the plot. - xtext : float - The position for the text label showing the slice along x. - ytext : float - The position for the text label showing the slice along y. - text : string - The text label showing the slice. - table_name : string - The text label naming the tables used - save_name : string - The place and name to save the plot. - log : bool - A boolean to whether the axes should be made logarithmic. - Will do both. - """ - - plt.plot(xintvals, - yintvals, - color='r', - linewidth=2, - label='IP Interpolation') - plt.hist(xtabvals, - weights=ytabvals, - bins=xtabbins, - color='k', - linewidth=2, - histtype='step', - label=table_name) - plt.xlabel(xlabel, fontsize=20) - plt.ylabel(ylabel, fontsize=20) - if log: - plt.xlim(xtabbins[0], xtabbins[-1]) - plt.xscale("log") - plt.yscale("log") - ymin = min(min(np.log10(yintvals)), min(np.log10(ytabvals))) - ymax = max(max(np.log10(yintvals)), max(np.log10(ytabvals))) - ydiff = ymax - ymin - plt.xlim(min(xtabbins), max(xtabbins)) - plt.ylim(np.power(10, ymin-0.1*ydiff), np.power(10, ymax+0.1*ydiff)) - if 'numu' in save_name: - plt.legend(loc='lower right') - elif 'nue' in save_name: - plt.legend(loc='lower left') - else: - ymin = min(min(yintvals), min(ytabvals)) - ymax = max(max(yintvals), max(ytabvals)) - ydiff = ymax-ymin - plt.xlim(min(xtabbins), max(xtabbins)) - if min(xtabbins) == 0.0 and max(xtabbins) == 360.0: - plt.ylim(ymin-0.1*ydiff, ymax+0.8*ydiff) - else: - plt.ylim(ymin-0.1*ydiff, ymax+0.1*ydiff) - plt.legend(loc='upper right') - plt.figtext(xtext, - ytext, - text, - verticalalignment='center', - horizontalalignment='center', - color='k', - fontsize=24) - plt.savefig(save_name) - plt.close() - - -def logplot(m, title, ax, clabel, cmap=plt.cm.afmhot, logz=True, - largelabels=False, medlabels=False): - """Simple plotting of a 2D histogram (map)""" - hist = np.ma.masked_invalid(m['map']) - if 'ebins' in m.keys(): - y = m['ebins'] - ylabel = r'Energy (GeV)' - logy = True - if 'czbins' in m.keys(): - x = m['czbins'] - xlabel = r'$\cos\theta_Z$' - else: - x = m['azbins'] - xlabel = r'$\phi_{Az}$ (${}^{\circ}$)' - else: - x = m['czbins'] - xlabel = r'$\cos\theta_Z$' - y = m['azbins'] - ylabel = r'$\phi_{Az}$ (${}^{\circ}$)' - logy = False - X, Y = np.meshgrid(x, y) - if logy: - ax.set_yscale('log') - vmin = hist.min() - vmax = hist.max() - if logz: - pcmesh = ax.pcolormesh(X, Y, hist, - norm=colors.LogNorm(vmin=vmin, vmax=vmax), - cmap=cmap) - else: - pcmesh = ax.pcolormesh(X, Y, hist, - norm=colors.Normalize(vmin=vmin, vmax=vmax), - cmap=cmap) - cbar = plt.colorbar(mappable=pcmesh, ax=ax) - if clabel is not None: - if largelabels: - cbar.set_label(clabel, labelpad=-1, fontsize=36) - cbar.ax.tick_params(labelsize=36) - elif medlabels: - cbar.set_label(clabel, labelpad=-1, fontsize=36) - cbar.ax.tick_params(labelsize=36) - else: - cbar.set_label(clabel, labelpad=-1) - cbar.ax.tick_params(labelsize='large') - if largelabels: - ax.set_xlabel(xlabel, fontsize=36) - ax.set_ylabel(ylabel, labelpad=-3, fontsize=36) - ax.set_title(title, y=1.03, fontsize=36) - plt.tick_params(axis='both', which='major', labelsize=36) - elif medlabels: - ax.set_xlabel(xlabel, fontsize=36) - ax.set_ylabel(ylabel, labelpad=-3, fontsize=36) - ax.set_title(title, y=1.03, fontsize=24) - plt.tick_params(axis='both', which='major', labelsize=36) - else: - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel, labelpad=-3) - ax.set_title(title, y=1.03) - ax.set_xlim(np.min(x), np.max(x)) - ax.set_ylim(np.min(y), np.max(y)) - - -def take_average(interp_map, oversampling): - average_map = interp_map.reshape( - [len(interp_map)/oversampling, - oversampling, - len(interp_map[0])/oversampling, - oversampling] - ).mean(3).mean(1) - return average_map - - -def do_1d_2d_honda_test(spline_dict, flux_dict, legend_filename, - save_name, outdir, enpow=1): - - czs = np.linspace(-1, 1, 81) - low_ens = 5.0119*np.ones_like(czs) - high_ens = 50.119*np.ones_like(czs) - - ens = np.logspace(-1.025, 4.025, 1020) - upgoing = -0.95*np.ones_like(ens) - downgoing = 0.35*np.ones_like(ens) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - low_en_flux_weights = calculate_2d_flux_weights(low_ens, - czs, - spline_dict[flav], - enpow=enpow) - - high_en_flux_weights = calculate_2d_flux_weights(high_ens, - czs, - spline_dict[flav], - enpow=enpow) - - flux5 = flux_dict[flav].T[np.where(flux_dict['energy'] == 5.0119)][0] - flux50 = flux_dict[flav].T[np.where(flux_dict['energy'] == 50.119)][0] - - plot_1d_slices( - xintvals=czs, - yintvals=low_en_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux5, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.7, - text='Slice at \n 5.0119 GeV', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest5GeV.png'%(save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=czs, - yintvals=high_en_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux50, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.7, - text='Slice at \n 50.119 GeV', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest50GeV.png'%(save_name, flav) - ), - log=False - ) - - upgoing_flux_weights = calculate_2d_flux_weights(ens, - upgoing, - spline_dict[flav], - enpow=enpow) - - downgoing_flux_weights = calculate_2d_flux_weights(ens, - downgoing, - spline_dict[flav], - enpow=enpow) - - upgoing_flux_weights *= np.power(ens, 3) - downgoing_flux_weights *= np.power(ens, 3) - - coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] - coszen_strs = np.array(coszen_strs) - - fluxupgoing = flux_dict[flav][np.where(coszen_strs == '-0.95')][0] - fluxdowngoing = flux_dict[flav][np.where(coszen_strs == '0.35')][0] - - fluxupgoing *= np.power(flux_dict['energy'], 3) - fluxdowngoing *= np.power(flux_dict['energy'], 3) - - if 'numu' in flav: - xtext = 0.68 - ytext = 0.25 - elif 'nue' in flav: - xtext = 0.35 - ytext = 0.25 - - plot_1d_slices( - xintvals=ens, - yintvals=upgoing_flux_weights, - xtabvals=flux_dict['energy'], - ytabvals=fluxupgoing, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=-0.95$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest-0.95cz.png'%(save_name, flav) - ), - log=True - ) - - plot_1d_slices( - xintvals=ens, - yintvals=downgoing_flux_weights, - xtabvals=flux_dict['energy'], - ytabvals=fluxdowngoing, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=0.35$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest0.35cz.png'%(save_name, flav) - ), - log=True - ) - - -def do_2d_2d_honda_test(spline_dict, flux_dict, outdir, ip_checks, - oversample, save_name, title_filename, enpow=1): - - all_ens_bins = np.logspace(-1.025, 4.025, 101*oversample+1) - all_log_ens_bins = np.linspace(-1.025, 4.025, 101*oversample+1) - log_en_bin_width = all_log_ens_bins[1] - all_log_ens_bins[0] - all_ens = np.logspace(all_log_ens_bins[0] + log_en_bin_width/2.0, - all_log_ens_bins[-1] - log_en_bin_width/2.0, - 101*oversample) - all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) - cz_bin_width = all_czs_bins[1] - all_czs_bins[0] - all_czs = np.linspace(all_czs_bins[0] + cz_bin_width/2.0, - all_czs_bins[-1] - cz_bin_width/2.0, - 20*oversample) - - all_ens_mg, all_czs_mg = np.meshgrid(all_ens, all_czs) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - logging.info('Doing 2D verification of %s 2D Honda tables', flav) - - all_flux_weights = calculate_2d_flux_weights(all_ens_mg.flatten(), - all_czs_mg.flatten(), - spline_dict[flav], - enpow=enpow) - - all_flux_weights = np.array(np.split(all_flux_weights, - len(all_czs))) - all_flux_weights_map = {} - all_flux_weights_map['map'] = all_flux_weights.T - all_flux_weights_map['ebins'] = all_ens_bins - all_flux_weights_map['czbins'] = all_czs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=all_flux_weights_map, - title='Finely Interpolated %s Flux'%flavtex, - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - largelabels=True) - - fig.savefig( - os.path.join( - outdir, - '%s_%s2dinterpolation.png'%(save_name, flav) - ) - ) - - if ip_checks: - - logging.info('Doing ip verification of %s 2D Honda tables', flav) - - downsampled_flux_map = {} - downsampled_flux_map['map'] = take_average( - all_flux_weights.T, oversample - ) - downsampled_flux_map['ebins'] = np.logspace(-1.025, 4.025, 102) - downsampled_flux_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - honda_tables = {} - honda_tables['map'] = flux_dict[flav].T - honda_tables['ebins'] = np.logspace(-1.025, 4.025, 102) - honda_tables['czbins'] = np.linspace(-1.0, 1.0, 21) - - diff_map = {} - diff_map['map'] = honda_tables['map']-downsampled_flux_map['map'] - diff_map['ebins'] = np.logspace(-1.025, 4.025, 102) - diff_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - diff_ratio_map = {} - diff_ratio_map['map'] = diff_map['map'] / honda_tables['map'] - diff_ratio_map['ebins'] = np.logspace(-1.025, 4.025, 102) - diff_ratio_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=5, - gridspec_kw=gridspec_kw, - sharex=False, sharey=False, - figsize=(20, 5)) - - logplot(m=all_flux_weights_map, - title='Oversampled by %i'%oversample, - ax=axes[0], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=downsampled_flux_map, - title='Downsampled to Honda Binning', - ax=axes[1], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=honda_tables, - title='Honda Tables', - ax=axes[2], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=diff_map, - title='Difference', - ax=axes[3], - clabel=None, - logz=False) - logplot(m=diff_ratio_map, - title='Percentage Difference', - ax=axes[4], - clabel=None, - logz=False) - - plt.suptitle( - 'Integral Preserving Tests for %s %s Flux Tables' - %(flavtex, title_filename), fontsize=36 - ) - plt.subplots_adjust(top=0.8) - fig.savefig( - os.path.join( - outdir, - '%s_%siptest_fullrange.png'%(save_name, flav) - ) - ) - plt.close(fig.number) - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, - figsize=(12, 10)) - - diff_ratio_map['map'] = diff_ratio_map['map'] * 100.0 - logplot( - m=diff_ratio_map, - title='%s Flux Integral Deviation'%flavtex, - ax=axes, - clabel=r'Ratio to Honda Table Value (\%)', - largelabels=True, - logz=False - ) - - fig.savefig( - os.path.join( - outdir, - '%s_%s2dintegraldeviation.png'%(save_name, flav) - ) - ) - - - - -def do_1d_2d_bartol_test(spline_dict, flux_dict, outdir, enpow=1): - - czs = np.linspace(-1, 1, 81) - low_ens = 4.732*np.ones_like(czs) - high_ens = 44.70*np.ones_like(czs) - - ens = np.logspace(-1, 4, 701) - upgoing = -0.95*np.ones_like(ens) - downgoing = 0.35*np.ones_like(ens) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - low_en_flux_weights = calculate_2d_flux_weights(low_ens, - czs, - spline_dict[flav], - enpow=enpow) - - high_en_flux_weights = calculate_2d_flux_weights(high_ens, - czs, - spline_dict[flav], - enpow=enpow) - - flux5 = flux_dict[flav].T[np.where(flux_dict['energy'] == 4.732)][0] - flux50 = flux_dict[flav].T[np.where(flux_dict['energy'] == 44.70)][0] - - plot_1d_slices( - xintvals=czs, - yintvals=low_en_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux5, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.7, - text='Slice at \n 4.732 GeV', - table_name='Bartol SNO 2004', - save_name=os.path.join( - outdir, 'bartol_%sfluxweightstest5GeV.png'%flav - ), - log=False - ) - - plot_1d_slices( - xintvals=czs, - yintvals=high_en_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux50, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.7, - text='Slice at \n 44.70 GeV', - table_name='Bartol SNO 2004', - save_name=os.path.join( - outdir, 'bartol_%sfluxweightstest50GeV.png'%flav - ), - log=False - ) - - upgoing_flux_weights = calculate_2d_flux_weights(ens, - upgoing, - spline_dict[flav], - enpow=enpow) - - downgoing_flux_weights = calculate_2d_flux_weights(ens, - downgoing, - spline_dict[flav], - enpow=enpow) - - upgoing_flux_weights *= np.power(ens, 3) - downgoing_flux_weights *= np.power(ens, 3) - - coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] - coszen_strs = np.array(coszen_strs) - - fluxupgoing = flux_dict[flav][np.where(coszen_strs == '-0.95')][0] - fluxdowngoing = flux_dict[flav][np.where(coszen_strs == '0.35')][0] - - fluxupgoing *= np.power(flux_dict['energy'], 3) - fluxdowngoing *= np.power(flux_dict['energy'], 3) - - low_log_energy = np.logspace(-1, 1, 41) - high_log_energy = np.logspace(1.1, 4, 30) - xtabbins = np.concatenate( - [low_log_energy, high_log_energy] - ) - - if 'numu' in flav: - xtext = 0.68 - ytext = 0.25 - elif 'nue' in flav: - xtext = 0.35 - ytext = 0.25 - - plot_1d_slices( - xintvals=ens, - yintvals=upgoing_flux_weights, - xtabvals=flux_dict['energy'], - ytabvals=fluxupgoing, - xtabbins=xtabbins, - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=-0.95$', - table_name='Bartol SNO 2004', - save_name=os.path.join( - outdir, 'bartol_%sfluxweightstest-0.95cz.png'%flav - ), - log=True - ) - - plot_1d_slices( - xintvals=ens, - yintvals=downgoing_flux_weights, - xtabvals=flux_dict['energy'], - ytabvals=fluxdowngoing, - xtabbins=xtabbins, - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=0.35$', - table_name='Bartol SNO 2004', - save_name=os.path.join( - outdir, 'bartol_%sfluxweightstest0.35cz.png'%flav - ), - log=True - ) - - -def do_2d_2d_bartol_test(spline_dict, flux_dict, outdir, ip_checks, - oversample, enpow=1): - - all_en_bins_low = np.logspace(-1.0, 1.0, 40*oversample+1) - all_log_en_bins_low = np.linspace(-1.0, 1.0, 40*oversample+1) - log_en_bin_width_low = all_log_en_bins_low[1] - all_log_en_bins_low[0] - all_ens_low = np.logspace( - all_log_en_bins_low[0]+log_en_bin_width_low/2.0, - all_log_en_bins_low[-1]-log_en_bin_width_low/2.0, - 40*oversample - ) - - all_en_bins_high = np.logspace(1.0, 4.0, 30*oversample+1) - all_log_en_bins_high = np.linspace(1.0, 4.0, 30*oversample+1) - log_en_bin_width_high = all_log_en_bins_high[1] - all_log_en_bins_high[0] - all_ens_high = np.logspace( - all_log_en_bins_high[0]+log_en_bin_width_high/2.0, - all_log_en_bins_high[-1]-log_en_bin_width_high/2.0, - 30*oversample - ) - - all_en_bins = [all_en_bins_low, all_en_bins_high] - all_ens = [all_ens_low, all_ens_high] - - all_all_ens_bins = np.concatenate( - ( - np.logspace(-1.0, 1.0, 40*oversample+1), - np.logspace(1.0+log_en_bin_width_high, 4.0, 30*oversample) - ) - ) - - all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) - cz_bin_width = all_czs_bins[1] - all_czs_bins[0] - all_czs = np.linspace( - all_czs_bins[0] + cz_bin_width/2.0, - all_czs_bins[-1] - cz_bin_width/2.0, - 20*oversample - ) - - en_labels = ['3DCalc', '1DCalc'] - - all_fluxes = {} - for flav in PRIMARIES: - all_fluxes[flav] = [] - - for all_en, all_ens_bins, en_label in zip(all_ens, - all_en_bins, - en_labels): - all_ens_mg, all_czs_mg = np.meshgrid(all_en, all_czs) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - logging.info('Doing 2D verification of %s 2D Bartol tables', flav) - logging.info('Doing %s segment', en_label) - - all_flux_weights = calculate_2d_flux_weights(all_ens_mg.flatten(), - all_czs_mg.flatten(), - spline_dict[flav], - enpow=enpow) - - all_flux_weights = np.array(np.split(all_flux_weights, - len(all_czs))) - - if len(all_fluxes[flav]) == 0: - all_fluxes[flav] = all_flux_weights.T - else: - all_fluxes[flav] = np.concatenate((all_fluxes[flav], - all_flux_weights.T)) - - - all_flux_weights_map = {} - all_flux_weights_map['map'] = all_flux_weights.T - all_flux_weights_map['ebins'] = all_ens_bins - all_flux_weights_map['czbins'] = all_czs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=all_flux_weights_map, - title='Finely Interpolated %s Flux'%flavtex, - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - largelabels=True) - - fig.savefig(os.path.join(outdir, - 'bartol_%s_%s2dinterpolation.png'%(en_label, flav))) - - if ip_checks: - - logging.info('Doing ip verification of %s 2D Bartol ' - 'tables', flav) - logging.info('Doing %s segment', en_label) - - bartol_tables = {} - if en_label == '3DCalc': - bartol_tables['map'] = flux_dict[flav].T[:40] - bartol_tables['ebins'] = np.logspace(-1.0, 1.0, 41) - elif en_label == '1DCalc': - bartol_tables['map'] = flux_dict[flav].T[40:] - bartol_tables['ebins'] = np.logspace(1.0, 4.0, 31) - bartol_tables['czbins'] = np.linspace(-1.0, 1.0, 21) - - downsampled_flux_map = {} - downsampled_flux_map['map'] = take_average( - all_flux_weights.T, oversample - ) - downsampled_flux_map['ebins'] = bartol_tables['ebins'] - downsampled_flux_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - diff_map = {} - diff_map['map'] = bartol_tables['map']-downsampled_flux_map['map'] - diff_map['ebins'] = bartol_tables['ebins'] - diff_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - diff_ratio_map = {} - diff_ratio_map['map'] = diff_map['map'] / bartol_tables['map'] - diff_ratio_map['ebins'] = bartol_tables['ebins'] - diff_ratio_map['czbins'] = np.linspace(-1.0, 1.0, 21) - - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=5, - gridspec_kw=gridspec_kw, - sharex=False, sharey=False, - figsize=(20, 5)) - - logplot(m=all_flux_weights_map, - title='Oversampled by %i'%oversample, - ax=axes[0], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=downsampled_flux_map, - title='Downsampled to Bartol Binning', - ax=axes[1], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=bartol_tables, - title='Bartol Tables', - ax=axes[2], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex,) - logplot(m=diff_map, - title='Difference', - ax=axes[3], - clabel=None, - logz=False) - logplot(m=diff_ratio_map, - title='Percentage Difference', - ax=axes[4], - clabel=None, - logz=False) - - plt.suptitle('Integral Preserving Tests for %s Bartol Sudbury 2015 Flux Tables'%flavtex, fontsize=36) - plt.subplots_adjust(top=0.8) - fig.savefig(os.path.join(outdir, 'bartol_%s_%siptest_fullrange.png'%(en_label, flav))) - plt.close(fig.number) - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, - gridspec_kw=gridspec_kw, - sharex=False, sharey=False, - figsize=(12, 10)) - - diff_ratio_map['map'] = diff_ratio_map['map'] * 100.0 - logplot( - m=diff_ratio_map, - title='%s Flux Integral Deviation'%flavtex, - ax=axes, - clabel=r'Ratio to Bartol Table Value (\%)', - largelabels=True, - logz=False - ) - - fig.savefig( - os.path.join( - outdir, - 'bartol_%s_%s2dintegraldeviation_fullrange.png'%( - en_label, flav) - ) - ) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - all_flux_weights_map = {} - all_flux_weights_map['map'] = all_fluxes[flav] - all_flux_weights_map['ebins'] = all_all_ens_bins - all_flux_weights_map['czbins'] = all_czs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=all_flux_weights_map, - title='Finely Interpolated %s Flux'%flavtex, - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - largelabels=True) - - fig.savefig(os.path.join(outdir, - 'bartol_%s2dinterpolation.png'%flav)) - - -def do_2d_2d_comparisons(honda_spline_dict, bartol_spline_dict, - outdir, oversample, enpow=1): - - all_ens_bins = np.logspace(-1.0, 4.0, 100*oversample+1) - all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) - # need log energy bin width for defining evaluation points - log_en_bin_width = np.linspace(-1.0, 4.0, 100*oversample+1)[1]-np.linspace(-1.0, 4.0, 100*oversample+1)[0] - cz_bin_width = all_czs_bins[1]-all_czs_bins[0] - all_ens = np.logspace(-1.0+log_en_bin_width/2.0, - 4.0-log_en_bin_width/2.0, - 100*oversample) - all_czs = np.linspace(-1.0+cz_bin_width/2.0, - 1.0-cz_bin_width/2.0, - 20*oversample) - - all_ens_mg, all_czs_mg = np.meshgrid(all_ens, all_czs) - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - logging.info('Doing 2D comparisons of %s 2D Honda/Bartol tables', flav) - - honda_flux_weights = calculate_2d_flux_weights( - all_ens_mg.flatten(), - all_czs_mg.flatten(), - honda_spline_dict[flav], - enpow=enpow - ) - bartol_flux_weights = calculate_2d_flux_weights( - all_ens_mg.flatten(), - all_czs_mg.flatten(), - bartol_spline_dict[flav], - enpow=enpow - ) - - honda_flux_weights = np.array(np.split(honda_flux_weights, - len(all_czs))) - bartol_flux_weights = np.array(np.split(bartol_flux_weights, - len(all_czs))) - - honda_flux_weights_map = {} - honda_flux_weights_map['map'] = honda_flux_weights.T - honda_flux_weights_map['ebins'] = all_ens_bins - honda_flux_weights_map['czbins'] = all_czs_bins - - bartol_flux_weights_map = {} - bartol_flux_weights_map['map'] = bartol_flux_weights.T - bartol_flux_weights_map['ebins'] = all_ens_bins - bartol_flux_weights_map['czbins'] = all_czs_bins - - diff_map = {} - diff_map['map'] = honda_flux_weights_map['map']-bartol_flux_weights_map['map'] - diff_map['ebins'] = all_ens_bins - diff_map['czbins'] = all_czs_bins - - diff_ratio_map = {} - diff_ratio_map['map'] = diff_map['map'] / honda_flux_weights_map['map'] - diff_ratio_map['ebins'] = all_ens_bins - diff_ratio_map['czbins'] = all_czs_bins - - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=4, - gridspec_kw=gridspec_kw, - sharex=False, sharey=False, - figsize=(16, 5)) - - logplot(m=honda_flux_weights_map, - title='Honda SNO 2015 %s Flux'%flavtex, - ax=axes[0], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex) - logplot(m=bartol_flux_weights_map, - title='Bartol SNO 2004 %s Flux'%flavtex, - ax=axes[1], - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex) - logplot(m=diff_map, - title='Difference', - ax=axes[2], - clabel=None, - logz=False) - logplot(m=diff_ratio_map, - title='Percentage Difference to Honda', - ax=axes[3], - clabel=None, - logz=False) - - plt.suptitle('Comparisons for %s Honda 2015 and Bartol 2004 Sudbury Flux Tables'%flavtex, fontsize=36) - plt.subplots_adjust(top=0.8) - - fig.savefig(os.path.join(outdir, - 'honda_bartol_%s2dcomparisons.png'%flav)) - - -def do_1d_3d_honda_test(spline_dict, flux_dict, legend_filename, - save_name, outdir, enpow=1): - - czs = np.linspace(-1, 1, 81) - low_ens = 5.0119*np.ones_like(czs) - high_ens = 50.119*np.ones_like(czs) - low_azs = 75.0*np.ones_like(czs)*np.pi/180.0 - high_azs = 285.0*np.ones_like(czs)*np.pi/180.0 - - ens = np.logspace(-1.025, 4.025, 1020) - upgoing = -0.95*np.ones_like(ens) - downgoing = 0.35*np.ones_like(ens) - low_azs_two = 75.0*np.ones_like(ens)*np.pi/180.0 - high_azs_two = 285.0*np.ones_like(ens)*np.pi/180.0 - - azs = np.linspace(0.0, 360.0, 121)*np.pi/180.0 - low_ens_two = 5.0119*np.ones_like(azs) - high_ens_two = 50.119*np.ones_like(azs) - upgoing_two = -0.95*np.ones_like(azs) - downgoing_two = 0.35*np.ones_like(azs) - - lin_azs = [True, False] - name_additions = ['lin_az', 'ip_az'] - - for lin_az, name_addition in zip(lin_azs, name_additions): - - new_save_name = save_name + '_%s'%name_addition - - for flav, flavtex in zip(PRIMARIES, TEXPRIMARIES): - - low_en_low_az_flux_weights = calculate_3d_flux_weights( - low_ens, - czs, - low_azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - high_en_low_az_flux_weights = calculate_3d_flux_weights( - high_ens, - czs, - low_azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - low_en_high_az_flux_weights = calculate_3d_flux_weights( - low_ens, - czs, - high_azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - high_en_high_az_flux_weights = calculate_3d_flux_weights( - high_ens, - czs, - high_azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - flux5lowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50lowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - flux5highaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50highaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - plot_1d_slices( - xintvals=czs, - yintvals=low_en_low_az_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux5lowaz, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text='Slice at\n5.0119 GeV\n' + r'$\phi_{Az}=75^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest5GeV75Az.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=czs, - yintvals=high_en_low_az_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux50lowaz, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text='Slice at\n50.119 GeV\n' + r'$\phi_{Az}=75^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest50GeV75Az.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=czs, - yintvals=low_en_high_az_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux5highaz, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text='Slice at\n5.0119 GeV\n' + r'$\phi_{Az}=285^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest5GeV285Az.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=czs, - yintvals=high_en_high_az_flux_weights, - xtabvals=flux_dict['coszen'], - ytabvals=flux50highaz, - xtabbins=np.linspace(-1, 1, 21), - xlabel=r'$\cos\theta_Z$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text='Slice at\n50.119 GeV\n' + r'$\phi_{Az}=285^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest50GeV285Az.png'%(new_save_name, flav) - ), - log=False - ) - - upgoing_flux_weights_low_azs = calculate_3d_flux_weights( - ens, - upgoing, - low_azs_two, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - downgoing_flux_weights_low_azs = calculate_3d_flux_weights( - ens, - downgoing, - low_azs_two, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - upgoing_flux_weights_high_azs = calculate_3d_flux_weights( - ens, - upgoing, - high_azs_two, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - downgoing_flux_weights_high_azs = calculate_3d_flux_weights( - ens, - downgoing, - high_azs_two, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - upgoing_flux_weights_low_azs *= np.power(ens, 3) - downgoing_flux_weights_low_azs *= np.power(ens, 3) - upgoing_flux_weights_high_azs *= np.power(ens, 3) - downgoing_flux_weights_high_azs *= np.power(ens, 3) - - coszen_strs = ['%.2f'%coszen for coszen in flux_dict['coszen']] - coszen_strs = np.array(coszen_strs) - - flux5lowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50lowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - flux5highaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50highaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - fluxupgoinglowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0].T[ - np.where(coszen_strs == '-0.95')][0] - fluxdowngoinglowaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 75.0)][0].T[ - np.where(coszen_strs == '0.35')][0] - fluxupgoinghighaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0].T[ - np.where(coszen_strs == '-0.95')][0] - fluxdowngoinghighaz = flux_dict[flav][ - np.where(flux_dict['azimuth'] == 285.0)][0].T[ - np.where(coszen_strs == '0.35')][0] - - fluxupgoinglowaz *= np.power(flux_dict['energy'], 3) - fluxdowngoinglowaz *= np.power(flux_dict['energy'], 3) - fluxupgoinghighaz *= np.power(flux_dict['energy'], 3) - fluxdowngoinghighaz *= np.power(flux_dict['energy'], 3) - - if 'numu' in flav: - xtext = 0.68 - ytext = 0.28 - elif 'nue' in flav: - xtext = 0.35 - ytext = 0.28 - - plot_1d_slices( - xintvals=ens, - yintvals=upgoing_flux_weights_low_azs, - xtabvals=flux_dict['energy'], - ytabvals=fluxupgoinglowaz, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=-0.95$'+'\n'+r'$\phi_{Az}=75^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest-0.95cz75Az.png'%(new_save_name, flav) - ), - log=True - ) - - plot_1d_slices( - xintvals=ens, - yintvals=downgoing_flux_weights_low_azs, - xtabvals=flux_dict['energy'], - ytabvals=fluxdowngoinglowaz, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=0.35$'+'\n'+r'$\phi_{Az}=75^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest0.35cz75Az.png'%(new_save_name, flav) - ), - log=True - ) - - plot_1d_slices( - xintvals=ens, - yintvals=upgoing_flux_weights_high_azs, - xtabvals=flux_dict['energy'], - ytabvals=fluxupgoinghighaz, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=-0.95$'+'\n'+r'$\phi_{Az}=285^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest-0.95cz285Az.png'%(new_save_name, flav) - ), - log=True - ) - - plot_1d_slices( - xintvals=ens, - yintvals=downgoing_flux_weights_high_azs, - xtabvals=flux_dict['energy'], - ytabvals=fluxdowngoinghighaz, - xtabbins=np.logspace(-1.025, 4.025, 102), - xlabel='Neutrino Energy (GeV)', - ylabel=r'%s Flux $\times E_{\nu}^3$ $\left([m^2\,s\,sr\,GeV]^{-1}[GeV]^3\right)$'%flavtex, - xtext=xtext, - ytext=ytext, - text=r'Slice at $\cos\theta_Z=0.35$'+'\n'+r'$\phi_{Az}=285^{\circ}$', - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest0.35cz285Az.png'%(new_save_name, flav) - ), - log=True - ) - - low_en_upgoing_flux_weights = calculate_3d_flux_weights( - low_ens_two, - upgoing_two, - azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - high_en_upgoing_flux_weights = calculate_3d_flux_weights( - high_ens_two, - upgoing_two, - azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - low_en_downgoing_flux_weights = calculate_3d_flux_weights( - low_ens_two, - downgoing_two, - azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - high_en_downgoing_flux_weights = calculate_3d_flux_weights( - high_ens_two, - downgoing_two, - azs, - spline_dict[flav], - enpow=enpow, - az_linear=lin_az - ) - - flux5downgoing = flux_dict[flav].T[ - np.where(flux_dict['coszen'] == 0.35)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50downgoing = flux_dict[flav].T[ - np.where(flux_dict['coszen'] == 0.35)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - flux5upgoing = flux_dict[flav].T[ - np.where(flux_dict['coszen'] == -0.95)][0][ - np.where(flux_dict['energy'] == 5.0119)][0] - flux50upgoing = flux_dict[flav].T[ - np.where(flux_dict['coszen'] == -0.95)][0][ - np.where(flux_dict['energy'] == 50.119)][0] - - plot_1d_slices( - xintvals=np.linspace(0.0, 360.0, 121), - yintvals=low_en_upgoing_flux_weights, - xtabvals=flux_dict['azimuth'], - ytabvals=flux5upgoing, - xtabbins=np.linspace(0.0, 360.0, 13), - xlabel=r'$\phi_{Az}$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text="Slice at \n 5.0119 GeV \n"+r" $\cos\theta_Z=-0.95$", - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest5GeV-0.95cz.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=np.linspace(0.0, 360.0, 121), - yintvals=high_en_upgoing_flux_weights, - xtabvals=flux_dict['azimuth'], - ytabvals=flux50upgoing, - xtabbins=np.linspace(0.0, 360.0, 13), - xlabel=r'$\phi_{Az}$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text="Slice at\n50.119 GeV\n"+r"$\cos\theta_Z=-0.95$", - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest50GeV-0.95cz.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=np.linspace(0.0, 360.0, 121), - yintvals=low_en_downgoing_flux_weights, - xtabvals=flux_dict['azimuth'], - ytabvals=flux5downgoing, - xtabbins=np.linspace(0.0, 360.0, 13), - xlabel=r'$\phi_{Az}$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text="Slice at\n5.0119 GeV\n" + r"$\cos\theta_Z=0.35$", - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest5GeV0.35cz.png'%(new_save_name, flav) - ), - log=False - ) - - plot_1d_slices( - xintvals=np.linspace(0.0, 360.0, 121), - yintvals=high_en_downgoing_flux_weights, - xtabvals=flux_dict['azimuth'], - ytabvals=flux50downgoing, - xtabbins=np.linspace(0.0, 360.0, 13), - xlabel=r'$\phi_{Az}$', - ylabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - xtext=0.75, - ytext=0.68, - text="Slice at \n 50.119 GeV \n"+r"$\cos\theta_Z=0.35$", - table_name=legend_filename, - save_name=os.path.join( - outdir, '%s_%sfluxweightstest50GeV0.35cz.png'%(new_save_name, flav) - ), - log=False - ) - - -def do_2d_3d_honda_test(spline_dict, flux_dict, outdir, oversample, save_name, - title_filename, flav, flavtex, enpow=1): - - all_ens_bins = np.logspace(-1.025, 4.025, 101*oversample+1) - all_log_ens_bins = np.linspace(-1.025, 4.025, 101*oversample+1) - log_en_bin_width = all_log_ens_bins[1] - all_log_ens_bins[0] - all_ens = np.logspace(all_log_ens_bins[0] + log_en_bin_width/2.0, - all_log_ens_bins[-1] - log_en_bin_width/2.0, - 101*oversample) - all_czs_bins = np.linspace(-1.0, 1.0, 20*oversample+1) - cz_bin_width = all_czs_bins[1] - all_czs_bins[0] - all_czs = np.linspace(all_czs_bins[0] + cz_bin_width/2.0, - all_czs_bins[-1] - cz_bin_width/2.0, - 20*oversample) - all_azs_bins = np.linspace(0.0, 360.0, 12*oversample+1) - az_bin_width = all_azs_bins[1] - all_azs_bins[0] - all_azs = np.linspace(all_azs_bins[0] + az_bin_width/2.0, - all_azs_bins[-1] - az_bin_width/2.0, - 12*oversample)*np.pi/180.0 - - all_ens_czs_mg, all_czs_ens_mg = np.meshgrid(all_ens, all_czs) - az_slice = (45.0*np.pi/180.0)*np.ones_like(all_ens_czs_mg) - all_ens_azs_mg, all_azs_ens_mg = np.meshgrid(all_ens, all_azs) - cz_slice = -0.15*np.ones_like(all_ens_azs_mg) - all_czs_azs_mg, all_azs_czs_mg = np.meshgrid(all_czs, all_azs) - en_slice = 5.0119*np.ones_like(all_czs_azs_mg) - - logging.info('Doing 2D verification of %s 3D Honda tables', flav) - - ens_czs_az45_flux_weights = calculate_3d_flux_weights( - all_ens_czs_mg.flatten(), - all_czs_ens_mg.flatten(), - az_slice.flatten(), - spline_dict[flav], - enpow=enpow - ) - - ens_czs_az45_flux_weights = np.array( - np.split( - ens_czs_az45_flux_weights, - len(all_czs) - ) - ) - ens_czs_az45_flux_weights_map = {} - ens_czs_az45_flux_weights_map['map'] = ens_czs_az45_flux_weights.T - ens_czs_az45_flux_weights_map['ebins'] = all_ens_bins - ens_czs_az45_flux_weights_map['czbins'] = all_czs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=ens_czs_az45_flux_weights_map, - title=('Finely Interpolated %s Flux '%flavtex - + r'(slice at $\phi_{Az}=45^{\circ}$)'), - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - medlabels=True) - - fig.savefig( - os.path.join( - outdir, - '%s_az45_%s2dinterpolation.png'%(save_name, flav) - ) - ) - - ens_czm015_azs_flux_weights = calculate_3d_flux_weights( - all_ens_azs_mg.flatten(), - cz_slice.flatten(), - all_azs_ens_mg.flatten(), - spline_dict[flav], - enpow=enpow - ) - - ens_czm015_azs_flux_weights = np.array( - np.split( - ens_czm015_azs_flux_weights, - len(all_azs) - ) - ) - ens_czm015_azs_flux_weights_map = {} - ens_czm015_azs_flux_weights_map['map'] = ens_czm015_azs_flux_weights.T - ens_czm015_azs_flux_weights_map['ebins'] = all_ens_bins - ens_czm015_azs_flux_weights_map['azbins'] = all_azs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=ens_czm015_azs_flux_weights_map, - title=('Finely Interpolated %s Flux '%flavtex - + r'(slice at $\cos\theta_Z=-0.15$)'), - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - medlabels=True) - - fig.savefig( - os.path.join( - outdir, - '%s_cz-0.15_%s2dinterpolation.png'%(save_name, flav) - ) - ) - - en5_czs_azs_flux_weights = calculate_3d_flux_weights( - en_slice.flatten(), - all_czs_azs_mg.flatten(), - all_azs_czs_mg.flatten(), - spline_dict[flav], - enpow=enpow - ) - - en5_czs_azs_flux_weights = np.array( - np.split( - en5_czs_azs_flux_weights, - len(all_azs) - ) - ) - en5_czs_azs_flux_weights_map = {} - en5_czs_azs_flux_weights_map['map'] = en5_czs_azs_flux_weights - en5_czs_azs_flux_weights_map['czbins'] = all_czs_bins - en5_czs_azs_flux_weights_map['azbins'] = all_azs_bins - - gridspec_kw = dict(left=0.15, right=0.90, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=1, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(12, 10)) - - logplot(m=en5_czs_azs_flux_weights_map, - title=('Finely Interpolated %s Flux '%flavtex - + r'(slice at $E_{\nu}=5.0119$ GeV)'), - ax=axes, - clabel=r'%s Flux $\left([m^2\,s\,sr\,GeV]^{-1}\right)$'%flavtex, - medlabels=True, - logz=False) - - fig.savefig( - os.path.join( - outdir, - '%s_en5_%s2dinterpolation.png'%(save_name, flav) - ) - ) - - -def main(): - parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--flux-file-2d', type=str, - default=None, - help='''2D flux file you want to run tests on. If one - is not specified then no 2D tests will be done.''') - parser.add_argument('--flux-file-3d', type=str, - default=None, - help='''3D flux file you want to run tests on. If one - is not specified then no 3D tests will be done.''') - parser.add_argument('--onedim-checks', action='store_true', - help='''Run verifications on 1D slices.''') - parser.add_argument('--twodim-checks', action='store_true', - help='''Make finely interpolated 2D plots. - WARNING - THESE ARE SLOW.''') - parser.add_argument('--ip-checks', action='store_true', - help='''Run checks on integral-preserving nature. - WARNING - THESE ARE VERY SLOW.''') - parser.add_argument('--comparisons', action='store_true', - help='''Run comparisons between a Bartol and Honda - flux file. WARNING - ALSO VERY SLOW.''') - parser.add_argument('--oversample', type=int, default=10, - help='''Integer to oversample for integral-preserving - checks and comparisons between flux files.''') - parser.add_argument('--enpow', type=int, default=1, - help='''Power of energy to use in making the energy - splines i.e. flux * (energy**enpow).''') - parser.add_argument('--ip-az', action='store_true', - help='''Perform the interpolation in the azimuthal - dimension with the integral-preserving algorithm. - NOTE - THIS IS NOT RECOMMENDED.''') - parser.add_argument('--flavor', type=str, default=None, - help='''Choose a flavor to perform the tests on. This - is necessary for the 3D 2D and ip checks since they - take so much memory otherwise...''') - parser.add_argument('--outdir', metavar='DIR', type=str, required=True, - help='''Store all output plots to this directory.''') - parser.add_argument('-v', action='count', default=None, - help='set verbosity level') - - args = parser.parse_args() - set_verbosity(args.v) - - if not os.path.exists(args.outdir): - logging.info("Making output directory %s", args.outdir) - os.makedirs(args.outdir) - - if (args.ip_checks) and (not args.twodim_checks): - logging.info( - "You have requested to perform the integral-preserving checks and" - " so the two dimensional checks will be performed too (this adds" - " nothing extra to the computing time)." - ) - args.twodim_checks = True - - if args.flux_file_2d is not None: - - if ('honda' not in args.flux_file_2d) and \ - ('bartol' not in args.flux_file_2d): - raise ValueError('Type of flux file not recognised.') - - spline_dict_2d, flux_dict_2d = load_2d_table( - args.flux_file_2d, - enpow=args.enpow, - return_table=True - ) - - if 'honda' in args.flux_file_2d: - - flux_file_2d_name = args.flux_file_2d.split('/')[-1] - flux_file_2d_bits = flux_file_2d_name.split('-') - year = flux_file_2d_bits[1] - site = flux_file_2d_bits[2] - - title_filename = 'Honda' - legend_filename = 'Honda' - - if site == 'spl': - title_filename += ' South Pole' - legend_filename += ' SPL' - elif site == 'sno': - title_filename += ' Sudbury' - legend_filename += ' SNO' - else: - logging.warning( - 'Don\'t know what to do with site %s.' - 'Omitting from titles', site - ) - - title_filename += ' %s'%year - legend_filename += ' %s'%year - save_name = 'honda_2d_%s_%s'%(site, year) - - if args.onedim_checks: - do_1d_2d_honda_test( - spline_dict=spline_dict_2d, - flux_dict=flux_dict_2d, - legend_filename=legend_filename, - save_name=save_name, - outdir=args.outdir, - enpow=args.enpow - ) - - if args.twodim_checks: - do_2d_2d_honda_test( - spline_dict=spline_dict_2d, - flux_dict=flux_dict_2d, - outdir=args.outdir, - ip_checks=args.ip_checks, - oversample=args.oversample, - save_name=save_name, - title_filename=title_filename, - enpow=args.enpow - ) - - else: - - if args.onedim_checks: - do_1d_2d_bartol_test( - spline_dict=spline_dict_2d, - flux_dict=flux_dict_2d, - outdir=args.outdir, - enpow=args.enpow - ) - - if args.twodim_checks: - do_2d_2d_bartol_test( - spline_dict=spline_dict_2d, - flux_dict=flux_dict_2d, - outdir=args.outdir, - ip_checks=args.ip_checks, - oversample=args.oversample, - enpow=args.enpow - ) - - if args.flux_file_3d is not None: - - spline_dict_3d, flux_dict_3d = load_3d_table( - args.flux_file_3d, - enpow=args.enpow, - return_table=True - ) - - flux_file_3d_name = args.flux_file_3d.split('/')[-1] - flux_file_3d_bits = flux_file_3d_name.split('-') - year = flux_file_3d_bits[1] - site = flux_file_3d_bits[2] - - title_filename = 'Honda' - legend_filename = 'Honda' - - if site == 'spl': - title_filename += ' South Pole' - legend_filename += ' SPL' - elif site == 'sno': - title_filename += ' Sudbury' - legend_filename += ' SNO' - else: - logging.warning( - 'Don\'t know what to do with site %s.' - 'Omitting from titles', site - ) - - title_filename += ' %s'%year - legend_filename += ' %s'%year - save_name = 'honda_3d_%s_%s'%(site, year) - - if args.onedim_checks: - do_1d_3d_honda_test( - spline_dict=spline_dict_3d, - flux_dict=flux_dict_3d, - legend_filename=legend_filename, - save_name=save_name, - outdir=args.outdir, - enpow=args.enpow - ) - - if args.twodim_checks: - if args.flavor is None: - raise ValueError('You must specify a flavor for these tests!') - if args.flavor not in PRIMARIES: - raise ValueError('Invalid flavor chosen. Please specify one ' - 'from the following: %s'%PRIMARIES) - flavortex = TEXPRIMARIES[PRIMARIES.index(args.flavor)] - do_2d_3d_honda_test( - spline_dict=spline_dict_3d, - flux_dict=flux_dict_3d, - outdir=args.outdir, - oversample=args.oversample, - save_name=save_name, - title_filename=title_filename, - flav=args.flavor, - flavtex=flavortex, - enpow=args.enpow - ) - - if args.comparisons: - - logging.warning('Comparisons will be of Honda 2015 SNO and ' - 'Bartol 2004 SNO 2D tables regardless of what you set ' - 'in the flux_file argument(s).') - - honda_spline_dict_2d = load_2d_table( - 'flux/honda-2015-sno-solmax-aa.d', - enpow=args.enpow - ) - - bartol_spline_dict_2d = load_2d_table( - 'flux/bartol-2004-sno-solmax-aa.d', - enpow=args.enpow - ) - - do_2d_2d_comparisons( - honda_spline_dict=honda_spline_dict_2d, - bartol_spline_dict=bartol_spline_dict_2d, - outdir=args.outdir, - oversample=args.oversample, - enpow=args.enpow - ) - - -if __name__ == '__main__': - main() diff --git a/pisa/stages/GLOBALS.md b/pisa/stages/GLOBALS.md deleted file mode 100644 index ca78659b6..000000000 --- a/pisa/stages/GLOBALS.md +++ /dev/null @@ -1,65 +0,0 @@ -# Global constants - -Global variables and constants are defined upon initialization of the `pisa` package (`pisa/__init__.py`) and are available to all of its modules. -They can be imported via `from pisa import `. - -Here we keep track of which global constants are available, what their purpose is, and by which stage(s) they are used. - -## Description - -| Constant | Description | Default | Overwritten by environment variables (priority indicated where necessary) | -| ------------------ | ------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| `NUMBA_CUDA_AVAIL` | Availability of Numba's CUDA interface | `False` (unless installed and CUDA-capable GPU available) | | -| `TARGET` | Numba compilation target | `gpu` if `NUMBA_CUDA_AVAIL`, `None` otherwise | `PISA_TARGET` | -| `OMP_NUM_THREADS` | Number of threads allocated to OpenMP | `1` | `OMP_NUM_THREADS` | -| `FTYPE` | Global floating point data type | `np.float64` | `PISA_FTYPE` | -| `HASH_SIGFIGS` | Number of significant digits used for hashing numbers, depends on `FTYPE` | `12(5)` for `FTYPE=np.float64(32)` | | -| `EPSILON` | Best numerical precision, derived from `HASH_SIGFIGS` | `10**(-HASH_SIGFIGS)` | | -| `C_FTYPE` | C floating point type corresponding to `FTYPE` | `'double'('single')` for `FTYPE=np.float64(32)` | | -| `C_PRECISION_DEF` | C precision of floating point calculations, derived from `FTYPE` | `'DOUBLE_PRECISION'('SINGLE_PRECISION')` for `FTYPE=np.float64(32)` | | -| `CACHE_DIR` | Root directory for storing PISA cache files | `'~/.cache/pisa'` | 1.`PISA_CACHE_DIR`, 2.`XDG_CACHE_HOME/pisa` | - -## Usage -The table below depicts which services make use of a select set of global constants. -Note that the table entries are derived from both the module files themselves (where the services are defined) but also from any `pisa.utils` objects they make use of. -Constants which are implicitly used by all services via `pisa.core` objects (e.g. `HASH_SIGFIGS`, `CACHE_DIR`) are not shown. -Also note that where a service implements `FTYPE` and relies on C extension code, the simultaneous implementation of `C_FTYPE` and `C_PRECISION_DEF` is implied. - -**Legend** -- :heavy_check_mark:: implements -- :black_square_button:: does not implement but does not fail (i.e., ignores) -- :heavy_exclamation_mark:: implements and fails if `False` (i.e., depends) - -| | `NUMBA_CUDA_AVAIL` | `OMP_NUM_THREADS` | `FTYPE` | -| :------------------------: | :-------------------: | :-------------------: | :-------------------: | -| `aeff.hist` | :black_square_button: | :black_square_button: | :black_square_button: | -| `aeff.param` | :black_square_button: | :black_square_button: | :black_square_button: | -| `aeff.aeff` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `aeff.smooth` | :black_square_button: | :black_square_button: | :black_square_button: | -| `combine.nutau` | :black_square_button: | :black_square_button: | :black_square_button: | -| `data.data` | :black_square_button: | :black_square_button: | :black_square_button: | -| `data.events_to_data` | :black_square_button: | :black_square_button: | :black_square_button: | -| `data.icc` | :black_square_button: | :black_square_button: | :black_square_button: | -| `data.sample` | :black_square_button: | :black_square_button: | :black_square_button: | -| `data.simple_data_loader` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `data.toy_event_generator` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `discr_sys.fit` | :black_square_button: | :black_square_button: | :black_square_button: | -| `discr_sys.hyperplane` | :black_square_button: | :black_square_button: | :black_square_button: | -| `discr_sys.hyperplanes` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `discr_sys.polyfits` | :black_square_button: | :black_square_button: | :black_square_button: | -| `flux.dummy` | :black_square_button: | :black_square_button: | :black_square_button: | -| `flux.honda` | :black_square_button: | :black_square_button: | :black_square_button: | -| `flux.mceq` | :black_square_button: | :black_square_button: | :black_square_button: | -| `flux.barr_simple` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `osc.prob3` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | -| `pid.hist` | :black_square_button: | :black_square_button: | :black_square_button: | -| `pid.param` | :black_square_button: | :black_square_button: | :black_square_button: | -| `pid.smooth` | :black_square_button: | :black_square_button: | :black_square_button: | -| `reco.hist` | :black_square_button: | :black_square_button: | :black_square_button: | -| `reco.hist` | :black_square_button: | :black_square_button: | :black_square_button: | -| `reco.param` | :black_square_button: | :black_square_button: | :black_square_button: | -| `reco.vbwkde` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `unfold.roounfold` | :black_square_button: | :black_square_button: | :black_square_button: | -| `utils.hist` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark : | -| `xsec.genie` | :black_square_button: | :black_square_button: | :black_square_button: | -| `xsec.genie_sys` | :heavy_check_mark: | :black_square_button: | :heavy_check_mark: | diff --git a/pisa/stages/README.md b/pisa/stages/README.md deleted file mode 100644 index 185ca0924..000000000 --- a/pisa/stages/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# pisa.stages - -Directories are PISA stages, and within each directory can be found the services implementing the respective stage. - -## Anatomy of a typical stage - -### Constructor -The constructor of the stage should look like the following: - -```python -class mystage(Stage): - """ - Docstring (mandatory!) - - What is the purpose of this stage? Short 1-2 sentence description - - Parameters: - ----------- - - params : - Expected params are .. :: - a : dimensionless Quantity - b : dimensionless Quantity - - something_else : float - Description - - Notes: - ------ - - More info, references, etc... - - """ - def __init__(self, something_else, **std_kwargs): - - expected_params = ('a', 'b') - - super().__init__(expected_params=expected_params, **std_kwargs) - - self.foo = something_else -``` - -The constructor arguments are passed in via the satage config file, which in this case would need to look something like: - - ```ini - [stage_dir.mystage] - -calc_mode = ... -apply_mode = ... - -something_else = 42. - -params.a = 13. -params.b = 27.3 +/- 3.2 -``` - -The `std_kwargs` can only contain `data, params, debug_mode, error_mode, calc_mode, apply_mode, profile`, of which `data` and `params` will be autmoatically populated. - - -### Methods - -The stages can implement three standard methods: -* `setup_function` : executed upon instantiation (and in the future potentially for more) -* `compute_function` : executed in a run if parameters changed (and first run) -* `apply_function` : executed in every run - -The data representation is set by default to `calc_mode` for the first two, and `apply_mode` in the latter, but can be changed by the user freely. - -An example of such an above function could look like: - -```python - -def apply_function(self): - b_magnitude = self.params.b.m_as('dimensionless') - - for container in self.data: - container['weights'] *= b_magnitude -``` -**N.B.:** If you use in-place array operations on your containers (e.g. `container['weights'][mask] = 0.0`, you need to mark thses changes via `container.mark_changed('weights')`) - -## Directory Listing - -* `aeff/` - All stages relating to effective area transforms. -* `combine/` - A stage for combining maps together and applying appropriate scaling factors. -* `data/` - All stages relating to the handling of data. -* `discr_sys/` - All stages relating to the handling of discrete systematics. -* `flux/` - All stages relating to the atmospheric neutrino flux. -* `osc/` - All stages relating to neutrino oscillations. -* `pid/` - All stages relating to particle identification. -* `reco/` - All stages relating to applying reconstruction kernels. -* `unfold/` - All stages relating to the unfolding of parameters from data. -* `xsec/` - All stages relating to cross sections. -* `__init__.py` - File that makes the `stages` directory behave as a Python module. diff --git a/pisa/stages/__init__.py b/pisa/stages/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/absorption/__init__.py b/pisa/stages/absorption/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/absorption/earth_absorption.py b/pisa/stages/absorption/earth_absorption.py deleted file mode 100644 index d5b06b780..000000000 --- a/pisa/stages/absorption/earth_absorption.py +++ /dev/null @@ -1,249 +0,0 @@ -""" -PISA pi stage for the calculation of earth layers and survival probabilities. - -The stage calculates first the depth of a water column that is mass-equivalent -to the path traversed by the neutrino through the earth. This is done -using the same Layers module that is also used for oscillation. -The survival probability is then calculated from the average cross-section -with protons and neutrons. -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -import math - -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa import ureg -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.stages.osc.layers import Layers -from pisa.utils.resources import find_resource - -__author__ = 'A. Trettin' - -__license__ = '''Copyright (c) 2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - -FLAV_BAR_STR_MAPPING = { - (0, -1): "e_bar", - (0, +1): "e", - (1, -1): "mu_bar", - (1, +1): "mu", - (2, -1): "tau_bar", - (2, +1): "tau", -} -""" -Mapping from flav and nubar container content to -the string for this neutrino in the ROOT file. -""" - - -class earth_absorption(Stage): - """ - earth absorption PISA Pi class - - Parameters - ---------- - earth_model : str - PREM file path - xsec_file : str - path to ROOT file containing cross-sections - detector_depth : quantity (distance), optional - detector depth - prop_height : quantity (distance), optional - height of neutrino production in the atmosphere - - """ - def __init__( - self, - earth_model, - xsec_file, - detector_depth=2.*ureg.km, - prop_height=20.*ureg.km, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - - self.layers = None - self.xsroot = None - self.earth_model = earth_model - self.xsec_file = xsec_file - self.detector_depth = detector_depth.m_as('km') - self.prop_height = prop_height.m_as('km') - # this does nothing for speed, but makes for convenient numpy style broadcasting - # TODO: Use numba vectorization (not sure how that works with splines) - self.calculate_xsections = np.vectorize(self.calculate_xsections) - - def setup_function(self): - import ROOT - # setup the layers - earth_model = find_resource(self.earth_model) - self.layers = Layers(earth_model, self.detector_depth, self.prop_height) - # This is a bit hacky, but setting the electron density to 1. - # gives us the total density of matter, which is what we want. - self.layers.setElecFrac(1., 1., 1.) - - # setup cross-sections - self.xsroot = ROOT.TFile(self.xsec_file) - # set the correct data mode - self.data.representation = self.calc_mode - - # --- calculate the layers --- - if self.data.is_map: - # layers don't care about flavor - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - for container in self.data: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) - container['rho_int'] = np.empty((container.size), dtype=FTYPE) - - container.mark_changed('densities') - container.mark_changed('distances') - container.mark_changed('rho_int') - # don't forget to un-link everything again - self.data.unlink_containers() - - # --- setup cross section and survival probability --- - if self.data.is_map: - # The cross-sections do not depend on nc/cc, so we can at least link those containers - self.data.link_containers('nue', ['nue_cc', 'nue_nc']) - self.data.link_containers('nuebar', ['nuebar_cc', 'nuebar_nc']) - self.data.link_containers('numu', ['numu_cc', 'numu_nc']) - self.data.link_containers('numubar', ['numubar_cc', 'numubar_nc']) - self.data.link_containers('nutau', ['nutau_cc', 'nutau_nc']) - self.data.link_containers('nutaubar', ['nutaubar_cc', 'nutaubar_nc']) - for container in self.data: - container['xsection'] = np.empty((container.size), dtype=FTYPE) - container['survival_prob'] = np.empty((container.size), dtype=FTYPE) - self.data.unlink_containers() - - @profile - def compute_function(self): - # --- calculate the integrated density in the layers --- - if self.data.is_map: - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - for container in self.data: - calculate_integrated_rho(container['distances'], - container['densities'], - out=container['rho_int'] - ) - container.mark_changed('rho_int') - # don't forget to un-link everything again - self.data.unlink_containers() - - # --- calculate survival probability --- - if self.data.is_map: - # The cross-sections do not depend on nc/cc, so we can at least link those containers - self.data.link_containers('nue', ['nue_cc', 'nue_nc']) - self.data.link_containers('nuebar', ['nuebar_cc', 'nuebar_nc']) - self.data.link_containers('numu', ['numu_cc', 'numu_nc']) - self.data.link_containers('numubar', ['numubar_cc', 'numubar_nc']) - self.data.link_containers('nutau', ['nutau_cc', 'nutau_nc']) - self.data.link_containers('nutaubar', ['nutaubar_cc', 'nutaubar_nc']) - - for container in self.data: - container['xsection'] = self.calculate_xsections(container['flav'], - container['nubar'], - container['true_energy'] - ) - container.mark_changed('xsection') - calculate_survivalprob(container['rho_int'], - container['xsection'], - out=container['survival_prob'] - ) - container.mark_changed('survival_prob') - self.data.unlink_containers() - - def apply_function(self): - for container in self.data: - container['weights'] *= container['survival_prob'] - - def calculate_xsections(self, flav, nubar, energy): - '''Calculates the cross-sections on isoscalar targets. - The result is returned in cm^2. The xsection on one - target is calculated by taking the xsection for O16 - and dividing it by 16. - ''' - flavor = FLAV_BAR_STR_MAPPING[(flav, nubar)] - return (self.xsroot.Get('nu_'+flavor+'_O16').Get('tot_cc').Eval(energy)+ - self.xsroot.Get('nu_'+flavor+'_O16').Get('tot_nc').Eval(energy))*10**(-38)/16. # this gives cm^2 - - -signatures = [ - '(f4[::1], f4[::1], f4[::1])', - '(f8[::1], f8[::1], f8[::1])' -] - -# TODO: make this work with the 'cuda' target. Right now, it seems like np.dot -# does not work or is used incorrectly. -@guvectorize(signatures, '(n),(n)->()', target=TARGET) -def calculate_integrated_rho(layer_dists, layer_densities, out): - """Calculate density integrated over the path through all layers. - Gives the length of a matter-equivalent water column in cm. - - Parameters - ---------- - layer_dists : vector - distance travelled through each layer - layer_densities : vector - densities of the layers - out : scalar - Result is stored here - - """ - out[0] = 0 - for i in range(len(layer_dists)): - out[0] += layer_dists[i]*layer_densities[i] - out[0] *= 1e5 # distances are converted from km to cm - -def calculate_survivalprob(int_rho, xsection, out): - """Calculate survival probability given layer distances, - layer densities and (pre-computed) cross-sections. - - Parameters - ---------- - int_rho : scalar - depth of mass equivalent water column in cm - xsection : scalar - cross-section per nucleon in cm^2 - out : scalar - Result is stored here - - """ - Na = 6.022E23 # nuclei per cm^(-3) - # The molar mass is 1 g for pure nuclei, so there is a hidden division - # here by 1 g/mol. Also, int_rho is the depth of a mass equivalent - # water column, where water has the density of 1 g/cm^3. - # So the units work out to: - # int_rho [cm] * 1 [g/cm^3] * xsection [cm^2] * 1 [mol/g] * Na [1/mol] = [ 1 ] (all units cancel) - out = np.exp(-int_rho*xsection*Na) - diff --git a/pisa/stages/aeff/__init__.py b/pisa/stages/aeff/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/aeff/aeff.py b/pisa/stages/aeff/aeff.py deleted file mode 100644 index 3e0d6a9e3..000000000 --- a/pisa/stages/aeff/aeff.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -PISA pi stage to apply effective area weights -""" - -from __future__ import absolute_import, print_function, division - -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile - - -class aeff(Stage): # pylint: disable=invalid-name - """ - PISA Pi stage to apply aeff weights. - - This combines the detector effective area with the flux weights calculated - in an earlier stage to compute the weights. - - Various scalings can be applied for particular event classes. The weight is - then multiplied by the livetime to get an event count. - - Parameters - ---------- - params - Expected params are .. :: - - livetime : Quantity with time units - aeff_scale : dimensionless Quantity - nutau_cc_norm : dimensionless Quantity - nutau_norm : dimensionless Quantity - nu_nc_norm : dimensionless Quantity - - """ - def __init__( - self, - **std_kwargs, - ): - expected_params = ( - 'livetime', - 'aeff_scale', - 'nutau_cc_norm', - 'nutau_norm', - 'nu_nc_norm', - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - @profile - def apply_function(self): - - # read out - aeff_scale = self.params.aeff_scale.m_as('dimensionless') - livetime_s = self.params.livetime.m_as('sec') - nutau_cc_norm = self.params.nutau_cc_norm.m_as('dimensionless') - nutau_norm = self.params.nutau_norm.m_as('dimensionless') - nu_nc_norm = self.params.nu_nc_norm.m_as('dimensionless') - - for container in self.data: - scale = aeff_scale * livetime_s - if container.name in ['nutau_cc', 'nutaubar_cc']: - scale *= nutau_cc_norm - if 'nutau' in container.name: - scale *= nutau_norm - if 'nc' in container.name: - scale *= nu_nc_norm - - container['weights'] *= container['weighted_aeff'] * scale - container.mark_changed('weights') diff --git a/pisa/stages/aeff/images/aeffmc.png b/pisa/stages/aeff/images/aeffmc.png deleted file mode 100644 index a41b6b5b4..000000000 Binary files a/pisa/stages/aeff/images/aeffmc.png and /dev/null differ diff --git a/pisa/stages/aeff/images/aeffpar.png b/pisa/stages/aeff/images/aeffpar.png deleted file mode 100644 index d9718bbc7..000000000 Binary files a/pisa/stages/aeff/images/aeffpar.png and /dev/null differ diff --git a/pisa/stages/aeff/images/events.png b/pisa/stages/aeff/images/events.png deleted file mode 100644 index 9d41aea16..000000000 Binary files a/pisa/stages/aeff/images/events.png and /dev/null differ diff --git a/pisa/stages/aeff/images/weight.png b/pisa/stages/aeff/images/weight.png deleted file mode 100644 index ca05f8295..000000000 Binary files a/pisa/stages/aeff/images/weight.png and /dev/null differ diff --git a/pisa/stages/aeff/weight.py b/pisa/stages/aeff/weight.py deleted file mode 100644 index 591c0b3ac..000000000 --- a/pisa/stages/aeff/weight.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -PISA pi stage to apply weights -""" - -from __future__ import absolute_import, print_function, division - -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile - - -class weight(Stage): # pylint: disable=invalid-name - """ - PISA Pi stage to apply weights. - This assumes a weight has already been calculated. - The weight is then multiplied by the livetime to get an event count. - - Parameters - ---------- - - params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params are: .. :: - - livetime : Quantity [time] - Detector livetime for scaling template - weight_scale : Quantity [dimensionless] - Overall scaling/normalisation of template - - """ - def __init__( - self, - **std_kwargs, - ): - expected_params = ('livetime', 'weight_scale') - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - @profile - def apply_function(self): - weight_scale = self.params.weight_scale.m_as('dimensionless') - livetime_s = self.params.livetime.m_as('sec') - scale = weight_scale * livetime_s - - for container in self.data: - container['weights'] *= scale - if "errors" in container.keys: - container["errors"] *= scale diff --git a/pisa/stages/aeff/weight_hnl.py b/pisa/stages/aeff/weight_hnl.py deleted file mode 100644 index 84403f59d..000000000 --- a/pisa/stages/aeff/weight_hnl.py +++ /dev/null @@ -1,119 +0,0 @@ -""" -PISA pi stage to apply HNL specific re-weighting -""" - -from __future__ import absolute_import, print_function, division - -from pisa.core.stage import Stage -from pisa.utils.profiler import profile - -from pisa import ureg - -import numpy as np - -# is there a place for constants in PISA, or do they already exist? -LIGHTSPEED = 299792458.0 * ureg.m / ureg.s -REDUCEDPLANCK = 6.582119569e-25 * ureg.GeV * ureg.s - - -def re_weight_hnl( - U_tau4_sq, - mass, - energy, - tau, - distance_min, - distance_max, - hnl_decay_width, - c=LIGHTSPEED, - hbar=REDUCEDPLANCK, -): - """ - Function to re-weight HNL events (from sampling 1/L to target exponential) - - Parameters - ---------- - U_tau4_sq : float - Square of the HNL mixing angle - mass : float - HNL mass in GeV - energy : float - HNL energy in GeV - tau : float - HNL proper lifetime in ns - distance_min : float - Minimum sampling distance of HNL decay in m - distance_max : float - Maximum sampling distance of HNL decay in m - hnl_decay_width : float - HNL decay width in GeV - - Returns - ------- - weight_lifetime : float - Weight to re-weight HNL events - """ - - gamma = np.sqrt(energy**2 + mass**2) / mass # Etot/E0 - speed = c * np.sqrt(1 - np.power(1.0 / gamma, 2)) # c * sqrt(1-1/gamma^2) - - tau_min = distance_min / (gamma * speed) - tau_max = distance_max / (gamma * speed) - - tau_proper = hbar / (hnl_decay_width * U_tau4_sq) # this mixing is from the decay vertex - - pdf_inverse = (1.0 / (np.log(tau_max.magnitude) - np.log(tau_min.magnitude))) * ( - 1.0 / tau.m_as("s") - ) # for 1/L sampling of decay length - - pdf_exp1 = 1.0 / tau_proper - pdf_exp2 = np.exp(-tau / tau_proper) - - pdf_exp = pdf_exp1 * pdf_exp2 - - weight_lifetime = pdf_exp / pdf_inverse - - return U_tau4_sq.magnitude * weight_lifetime.magnitude # includes overall mixing factor of production vertex - - -class weight_hnl(Stage): # pylint: disable=invalid-name - """ - PISA pi stage to apply HNL specific re-weighting. - - This re-weights HNL events from sampling 1/L to target exponential and applies . - - Parameters - ---------- - params - Expected params are .. :: - U_tau4_sq : dimensionless Quantity - """ - - def __init__( - self, - **std_kwargs, - ): - expected_params = ("U_tau4_sq",) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - @profile - def apply_function(self): - U_tau4_sq = self.params.U_tau4_sq.m_as("dimensionless") - - for container in self.data: - hnl_weight = re_weight_hnl( - U_tau4_sq=U_tau4_sq * ureg.dimensionless, - mass=container["mHNL"] * ureg.GeV, - energy=container["hnl_true_energy"] * ureg.GeV, - tau=container["hnl_proper_lifetime"] * ureg.ns, - distance_min=container["hnl_distance_min"] * ureg.m, - distance_max=container["hnl_distance_max"] * ureg.m, - hnl_decay_width=container["hnl_decay_width"] * ureg.GeV, - ) - - container["weights"] *= hnl_weight - container.mark_changed("weights") diff --git a/pisa/stages/background/__init__.py b/pisa/stages/background/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/background/atm_muons.py b/pisa/stages/background/atm_muons.py deleted file mode 100644 index ce2a386e9..000000000 --- a/pisa/stages/background/atm_muons.py +++ /dev/null @@ -1,174 +0,0 @@ -# pylint: disable=not-callable - -from __future__ import absolute_import, print_function, division - -import math -import numpy as np -from scipy.interpolate import interp1d -from numba import guvectorize, cuda - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.resources import open_resource -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import WHERE, myjit, ftype - -__all__ = ["atm_muons"] - -__author__ = 'T. Stuttard, S. Wren, S. Mandalia' - -class atm_muons(Stage): - """ - Stage to handle atmospheric muon background systematics. - Typically this is used with muons generated by MuonGun, but should be - generic to other generators. - Note that this stage only modifies an weights based on the systematics, - it does not determine the nominal flux (this is assumed to either already - available in the input files, or written by an upstream stage). - - Parameters - ---------- - params : ParamSet or instantiable thereto - Parameters for steering the stage. The following parameters must be included: .. :: - - atm_muon_scale : quantity (dimensionless) - Normalisation of atmospheric muons - delta_gamma_mu_file : str - Path to file containing spectral index data - delta_gamma_mu_spline_kind : str - 'kind' of spline, as per kwargs in scipy interp1d - delta_gamma_mu_variable : str - Name of variable in which the delta spectral index is splined - Currently only supported variable is 'coszen' - delta_gamma_mu : quantity (dimensionless) - Parameter controlling variation in spectral index - - """ - - def __init__(self, - input_names, - **std_kwargs, - ): - - expected_params = ( - 'atm_muon_scale', - 'delta_gamma_mu_file', - 'delta_gamma_mu_spline_kind', - 'delta_gamma_mu_variable', - 'delta_gamma_mu' - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - - self.data.representation = self.calc_mode - - # Create the primary uncertainties spline that will be used for - # re-weighting the muon flux - self.prim_unc_spline = self._make_prim_unc_spline() - - # Get variable that the flux uncertainties are spline w.r.t - rw_variable = self.params['delta_gamma_mu_variable'].value - - for container in self.data: - # Get primary CR systematic spline - container['rw_array'] = self.prim_unc_spline(container[rw_variable]) - - # Reweighting term is positive-only by construction, so normalise - # it by shifting the whole array down by a normalisation factor - norm = container['rw_array'].sum() / container['rw_array'].size - container['cr_rw_array'] = container['rw_array'] - norm - - - @profile - def apply_function(self): - - #self.data.representation = self.calc_mode - - # Apply muon normalisation/scaling - atm_muon_scale = self.params['atm_muon_scale'].value.m_as("dimensionless") - - # Compute the weight modification due to the muon flux systematic - cr_rw_scale = self.params['delta_gamma_mu'].value.m_as("dimensionless") - - # Write to the output container - for container in self.data: - weight_mod = 1 + (cr_rw_scale * container['cr_rw_array']) - container['weights'] *= np.clip(weight_mod * atm_muon_scale, a_min=0, a_max=np.inf) - - - def _make_prim_unc_spline(self): - """ - Create the spline which will be used to re-weight muons based on the - uncertainties arising from cosmic rays. - Notes - ----- - Details on this work can be found here - - https://wiki.icecube.wisc.edu/index.php/DeepCore_Muon_Background_Systematics - This work was done for the GRECO sample but should be reasonably - generic. It was found to pretty much be a negligible systemtic. Though - you should check both if it seems reasonable and it is still negligible - if you use it with a different event sample. - """ - # TODO(shivesh): "energy"/"coszen" on its own is taken to be the truth - # TODO(shivesh): what does "true" muon correspond to - the deposited muon? - # if 'true' not in self.params['delta_gamma_mu_variable'].value: - # raise ValueError( - # 'Variable to construct spline should be a truth variable. ' - # 'You have put %s in your configuration file.' - # % self.params['delta_gamma_mu_variable'].value - # ) - - - # Get the variable which the atmopsheric muon uncertainty has been splined in - bare_variable = self.params['delta_gamma_mu_variable'].value.split('true_')[-1] # Remove "truth_" part of variable name - if not bare_variable == 'coszen': - raise ValueError( - 'Muon primary cosmic ray systematic is currently only ' - 'implemented as a function of cos(zenith). %s was set in the ' - 'configuration file.' - % self.params['delta_gamma_mu_variable'].value - ) - if bare_variable not in self.params['delta_gamma_mu_file'].value: - raise ValueError( - 'Variable set in configuration file is %s but the file you ' - 'have selected, %s, does not make reference to this in its ' - 'name.' % (self.params['delta_gamma_mu_variable'].value, - self.params['delta_gamma_mu_file'].value) - ) - - # Read the uncertainty data from the file - uncdata = np.genfromtxt( - open_resource(self.params['delta_gamma_mu_file'].value) - ).T - - # Need to deal with zeroes that arise due to a lack of MC. For example, - # in the case of the splines as a function of cosZenith, there are no - # hoirzontal muons. Current solution is just to replace them with their - # nearest non-zero values. - while 0.0 in uncdata[1]: - zero_indices = np.where(uncdata[1] == 0)[0] - for zero_index in zero_indices: - uncdata[1][zero_index] = uncdata[1][zero_index+1] - - # Add dummpy points for the edge of the zenith range - xvals = np.insert(uncdata[0], 0, 0.0) - xvals = np.append(xvals, 1.0) - yvals = np.insert(uncdata[1], 0, uncdata[1][0]) - yvals = np.append(yvals, uncdata[1][-1]) - - # Create the spline, using the 'kind' of interpolation specified by the user - muon_uncf = interp1d( - xvals, - yvals, - kind=self.params['delta_gamma_mu_spline_kind'].value - ) - - return muon_uncf diff --git a/pisa/stages/data/__init__.py b/pisa/stages/data/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/data/csv_data_hist.py b/pisa/stages/data/csv_data_hist.py deleted file mode 100644 index e10894160..000000000 --- a/pisa/stages/data/csv_data_hist.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -import pandas as pd - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.resources import find_resource -from pisa.core.container import Container -from pisa.core.events_pi import EventsPi - - -class csv_data_hist(Stage): - """ - CSV file loader PISA Pi class - - Parameters - ---------- - - events_file : csv file path - - """ - def __init__(self, - events_file, - **std_kwargs, - ): - - # instantiation args that should not change - self.events_file = find_resource(events_file) - - expected_params = () - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - - events = pd.read_csv(self.events_file) - - container = Container('total') - container.representation = self.calc_mode - - container['weights'] = events['count'].values.astype(FTYPE) - container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) - container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) - container['pid'] = events['pid'].values.astype(FTYPE) - - self.data.add_container(container) - - # check created at least one container - if len(self.data.names) == 0: - raise ValueError( - 'No containers created during data loading for some reason.' - ) - diff --git a/pisa/stages/data/csv_icc_hist.py b/pisa/stages/data/csv_icc_hist.py deleted file mode 100644 index db085b29e..000000000 --- a/pisa/stages/data/csv_icc_hist.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -import pandas as pd - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile -from pisa.utils.resources import find_resource -from pisa.core.container import Container - - -class csv_icc_hist(Stage): - """ - CSV file loader PISA class - - Parameters - ---------- - events_file : csv file path - - """ - def __init__( - self, - events_file, - **std_kwargs, - ): - # instantiation args that should not change - self.events_file = find_resource(events_file) - - expected_params = ('atm_muon_scale',) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - events = pd.read_csv(self.events_file) - - container = Container('icc') - container.data_specs = 'events' - - container['count'] = events['count'].values.astype(FTYPE) - container['weights'] = np.ones(container.size, dtype=FTYPE) - container['errors'] = events['abs_uncert'].values.astype(FTYPE) - container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) - container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) - container['pid'] = events['pid'].values.astype(FTYPE) - - self.data.add_container(container) - - # check created at least one container - if len(self.data.names) == 0: - raise ValueError( - 'No containers created during data loading for some reason.' - ) - - - def apply_function(self): - scale = self.params.atm_muon_scale.m_as('dimensionless') - - for container in self.data: - container['weights'] = container['count'] * scale diff --git a/pisa/stages/data/csv_loader.py b/pisa/stages/data/csv_loader.py deleted file mode 100644 index de03c9895..000000000 --- a/pisa/stages/data/csv_loader.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -import pandas as pd - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.resources import find_resource -from pisa.utils.profiler import profile -from pisa.core.container import Container - - -class csv_loader(Stage): - """ - CSV file loader PISA Pi class - - Parameters - ---------- - events_file : csv file path - **kwargs - Passed to Stage - - """ - def __init__( - self, - events_file, - output_names, - **std_kwargs, - ): - - # instantiation args that should not change - self.events_file = find_resource(events_file) - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - self.output_names = output_names - - - def setup_function(self): - - raw_data = pd.read_csv(self.events_file) - - # create containers from the events - for name in self.output_names: - - # make container - container = Container(name) - nubar = -1 if 'bar' in name else 1 - if 'e' in name: - flav = 0 - if 'mu' in name: - flav = 1 - if 'tau' in name: - flav = 2 - - # cut out right part - pdg = nubar * (12 + 2 * flav) - - mask = raw_data['pdg'] == pdg - if 'cc' in name: - mask = np.logical_and(mask, raw_data['type'] > 0) - else: - mask = np.logical_and(mask, raw_data['type'] == 0) - - events = raw_data[mask] - - container['weighted_aeff'] = events['weight'].values.astype(FTYPE) - container['weights'] = np.ones(container.size, dtype=FTYPE) - container['initial_weights'] = np.ones(container.size, dtype=FTYPE) - container['true_energy'] = events['true_energy'].values.astype(FTYPE) - container['true_coszen'] = events['true_coszen'].values.astype(FTYPE) - container['reco_energy'] = events['reco_energy'].values.astype(FTYPE) - container['reco_coszen'] = events['reco_coszen'].values.astype(FTYPE) - container['pid'] = events['pid'].values.astype(FTYPE) - container.set_aux_data('nubar', nubar) - container.set_aux_data('flav', flav) - - self.data.add_container(container) - - # check created at least one container - if len(self.data.names) == 0: - raise ValueError( - 'No containers created during data loading for some reason.' - ) - - def apply_function(self): - for container in self.data: - container['weights'] = np.copy(container['initial_weights']) diff --git a/pisa/stages/data/freedom_hdf5_loader.py b/pisa/stages/data/freedom_hdf5_loader.py deleted file mode 100644 index f18afe9c7..000000000 --- a/pisa/stages/data/freedom_hdf5_loader.py +++ /dev/null @@ -1,228 +0,0 @@ -""" -A Stage to load data from a FreeDOM hdf5 file (generated using the I3HDFWriter) -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -import tables - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.resources import find_resource -from pisa.core.container import Container -from pisa.utils.format import split - -X_36 = 46.29 -Y_36 = -34.88 - -FREEDOM_PARNAMES = [ - "x", - "y", - "z", - "time", - "azimuth", - "zenith", - "cascade_energy", - "track_energy", -] - - -class freedom_hdf5_loader(Stage): - """ - FreeDOM hdf5 file loader - - Parameters - ---------- - events_file : hdf5 file path - files_per_flavor : list - number of files for each nu flavor - reco : str - which reco to use - keys : list - which keys to unpack - cuts : dict - cuts to apply when loading the data - track_E_cut : float - track energy cut for PID. - If not set, L7_PIDClassifier_ProbTrack will be used - **kwargs - Passed to Stage - - """ - - def __init__( - self, - events_file, - files_per_flavor, - output_names, - reco, - keys, - cuts, - track_E_cut=None, - **std_kwargs, - ): - - # instantiation args that should not change - self.events_file = find_resource(events_file) - - # init base class - super().__init__( - expected_params=(), **std_kwargs, - ) - - self.output_names = output_names - self.reco = reco - self.files_per_flavor = split(files_per_flavor) - self.track_E_cut = track_E_cut - self.keys = split(keys) - self.cuts = eval(cuts) - - def setup_function(self): - - data = self.load_hdf5_file(self.events_file) - data = self.calc_rho36(data) - if any(key.startswith("unc_est") for key in self.cuts): - data = self.calc_uncertainties(data) - data = self.apply_cuts(data, self.cuts) - - for name in self.output_names: - container = Container(name) - - nubar = -1 if "bar" in name else 1 - if "e" in name: - flav = 0 - n_files = int(self.files_per_flavor[0]) - if "mu" in name: - flav = 1 - n_files = int(self.files_per_flavor[1]) - if "tau" in name: - flav = 2 - n_files = int(self.files_per_flavor[2]) - - pdg = nubar * (12 + 2 * flav) - - mask = data["pdg_id"] == pdg - if "cc" in name: - mask = np.logical_and(mask, data["interaction_type"] == 1) - else: - mask = np.logical_and(mask, data["interaction_type"] == 2) - - events = {key: value[mask] for key, value in data.items()} - weight_dict = events["I3MCWeightDict"] - primary = events["MCInIcePrimary"] - - container["true_energy"] = primary["energy"].astype(FTYPE) - container["true_coszen"] = np.cos(primary["zenith"]).astype(FTYPE) - container["pdg_code"] = primary["pdg_encoding"].astype(FTYPE) - container["interaction"] = weight_dict["InteractionType"].astype(FTYPE) - - CM2_TO_M2 = 1e-4 - derived_weight = ( - CM2_TO_M2 - * weight_dict["OneWeight"] - / n_files - / weight_dict["gen_ratio"] - / weight_dict["NEvents"] - ) - container["weighted_aeff"] = derived_weight.astype(FTYPE) - - reco = self.reco - reco_total_energy = ( - events[f"{reco}_cascade_energy"] + events[f"{reco}_track_energy"] - ) - container["reco_energy"] = reco_total_energy.astype(FTYPE) - container["reco_coszen"] = np.cos(events[f"{reco}_zenith"]).astype(FTYPE) - container["reco_z"] = events[f"{reco}_z"].astype(FTYPE) - container["reco_rho"] = events["rho_36"].astype(FTYPE) - - if self.track_E_cut is None: - container["pid"] = events["L7_PIDClassifier_ProbTrack"].astype(FTYPE) - else: - pid = events[f"{reco}_track_energy"] > float(self.track_E_cut) - container["pid"] = pid.astype(FTYPE) - - container["weights"] = np.ones(container.size, dtype=FTYPE) - container["initial_weights"] = np.ones(container.size, dtype=FTYPE) - - container.set_aux_data("nubar", nubar) - container.set_aux_data("flav", flav) - - self.data.add_container(container) - - if len(self.data.names) == 0: - raise ValueError( - "No containers created during data loading for some reason." - ) - - def apply_function(self): - for container in self.data: - container["weights"] = np.copy(container["initial_weights"]) - - def calc_rho36(self, data): - reco_x = data[f"{self.reco}_x"] - reco_y = data[f"{self.reco}_y"] - - data["rho_36"] = np.sqrt((reco_x - X_36) ** 2 + (reco_y - Y_36) ** 2) - - return data - - def calc_uncertainties(self, data, epsilon=1e-15): - """add uncertainty estimates to data; return modified data""" - for par in FREEDOM_PARNAMES: - p2s = np.where(data[f"env_p2_{par}"] > 0, data[f"env_p2_{par}"], epsilon) - data[f"unc_est_{par}"] = 1 / np.sqrt(2 * p2s) - - return data - - def apply_cuts(self, data, cuts): - """apply cuts in place""" - cut_mask = np.array([True], dtype=bool) - for cut_key, [cut_low, cut_high] in cuts.items(): - if "{reco}" in cut_key: - cut_key = cut_key.replace("{reco}", self.reco) - - if cut_low is not None: - cut_mask = cut_mask & (data[cut_key] > cut_low) - if cut_high is not None: - cut_mask = cut_mask & (data[cut_key] < cut_high) - - for key, val in data.items(): - data[key] = val[cut_mask] - - return data - - def load_hdf5_file(self, f_name): - with tables.File(f_name) as file: - return self.unpack_file_data(file) - - def unpack_file_data(self, file): - root = file.root - - var_dict = {} - for node in root: - try: - name = node.name.replace("FreeDOM_test_", "").replace("_params", "") - name = name.replace("best_fit", "freedom") - except tables.NoSuchNodeError: - continue - - if not name in self.keys and name != self.reco: - continue - - freedom_hdf5_loader.fill_variable_dict(name, node, var_dict) - - return var_dict - - @staticmethod - def fill_variable_dict(name, node, var_dict): - if "vector_index" in node.colnames: - for par, parname in zip( - node.cols.item[:].reshape((-1, len(FREEDOM_PARNAMES))).T, - FREEDOM_PARNAMES, - ): - var_dict[f"{name}_{parname}"] = par - elif "value" in node.colnames: - var_dict[name] = node.cols.value[:] - else: - var_dict[name] = node.read() diff --git a/pisa/stages/data/grid.py b/pisa/stages/data/grid.py deleted file mode 100644 index ff011bf0c..000000000 --- a/pisa/stages/data/grid.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Stage to create a grid of data -""" -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.core.container import Container - - -class grid(Stage): - """ - Create a grid of events - - Parameters - ---------- - - Binning object defining the grid to be generated - - entity : str - `entity` arg to be passed to `MultiDimBinning.meshgrid` (see that - fucntion docs for details) - - """ - def __init__( - self, - grid_binning, - entity="midpoints", - output_names=None, - **std_kwargs, - ): - expected_params = () - - # store args - self.grid_binning = grid_binning - self.entity = entity - self.output_names = output_names - - # init base class - super(grid, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - assert self.calc_mode == "events" - - def setup_function(self): - - for name in self.output_names: - - # Create the container - container = Container(name, self.calc_mode) - - # Determine flavor - nubar = -1 if 'bar' in name else 1 - if 'e' in name: - flav = 0 - if 'mu' in name: - flav = 1 - if 'tau' in name: - flav = 2 - - # Create arrays - mesh = self.grid_binning.meshgrid(entity=self.entity, attach_units=False) - size = mesh[0].size - for var_name, var_vals in zip(self.grid_binning.names, mesh): - container[var_name] = var_vals.flatten().astype(FTYPE) - - # Add useful info - container.set_aux_data('nubar', nubar) - container.set_aux_data('flav', flav) - - # Make some initial weights - container['initial_weights'] = np.ones(size, dtype=FTYPE) - container['weights'] = np.ones(size, dtype=FTYPE) - - self.data.add_container(container) - - - def apply_function(self): - # reset weights - for container in self.data: - container['weights'] = np.copy(container['initial_weights']) \ No newline at end of file diff --git a/pisa/stages/data/licloader_weighter.py b/pisa/stages/data/licloader_weighter.py deleted file mode 100644 index 5dfb552f0..000000000 --- a/pisa/stages/data/licloader_weighter.py +++ /dev/null @@ -1,142 +0,0 @@ -""" -A class to load lic files and weight existing events -""" -import numpy as np -import h5py as h5 - -import LeptonWeighter as LW - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile -from pisa.core.container import Container -from pisa.core.events_pi import EventsPi -from pisa.utils.resources import find_resource - - -class licloader_weighter(Stage): - """ - LeptonWeighter LIC file reader and LI event weighter. Sets two weight containers - weights - astro_weights - - plus duplicates holding the initial weights. This way we can reweight - - Parameters - ---------- - in_files : string, or list of strings. Data files - lic_files : string, or list of strings. LeptonInjector configuration files - n_files : int. The number of files produced in each run, share a single LIC file. - """ - - def __init__( - self, - in_files, - lic_files, - output_names, - n_files: int, - diff_nu_cc_xs="dsdxdy_nu_CC_iso.fits", - diff_nubar_cc_xs="dsdxdy_nubar_CC_iso.fits", - diff_nu_nc_xs="dsdxdy_nu_NC_iso.fits", - diff_nubar_nc_xs="dsdxdy_nubar_NC_iso.fits", - **std_kwargs - ): - - if isinstance(lic_files, str): - self._lic_files_paths = [ - find_resource(lic_files), - ] - elif isinstance(lic_files, (list, tuple)): - self._lic_files_paths = [find_resource(lic_file) for lic_file in lic_files] - else: - raise TypeError("Unknown lic_file datatype {}".format(type(lic_files))) - - if isinstance(in_files, str): - self.in_files = [ - find_resource(in_files), - ] - elif isinstance(in_files, (tuple, list)): - self.in_files = [find_resource(in_file) for in_file in in_files] - else: - raise TypeError("Unknown in_files datatype {}".format(type(in_files))) - - # load the lic files! - self.lic_files = [ - LW.MakeGeneratorsFromLICFile(name) for name in self._lic_files_paths - ] - self.xs_obj = LW.CrossSectionFromSpline( - find_resource(diff_nu_cc_xs), - find_resource(diff_nubar_cc_xs), - find_resource(diff_nu_nc_xs), - find_resource(diff_nubar_nc_xs), - ) - - # the target containers! - self.output_names = output_names - # with this, we just need to multiply the weight by the actual flux. Then it'll work! - self._one_weighter = LW.Weighter( - LW.ConstantFlux(1.0 / n_files), self.xs_obj, self.lic_files - ) - - def setup_function(self): - """ - Load in the lic files, build the weighters, and get all the one-weights. To get the true - """ - - raw_data = h5.File(self.in_files[0]) - - # create containers from the events - for name in self.output_names: - - # make container - container = Container(name) - nubar = -1 if "bar" in name else 1 - if "e" in name: - flav = 0 - if "mu" in name: - flav = 1 - if "tau" in name: - flav = 2 - - # cut out right part - pdg = nubar * (12 + 2 * flav) - - mask = raw_data["true_pid"] == pdg - if "cc" in name: - mask = np.logical_and(mask, raw_data["type"] > 0) - else: - mask = np.logical_and(mask, raw_data["type"] == 0) - - events = raw_data[mask] - - # aaahhhh no this format will only work - container["weighted_aeff"] = events["weight"][:].astype(FTYPE) - container["weights"] = np.ones(container.size, dtype=FTYPE) - container["initial_weights"] = np.ones(container.size, dtype=FTYPE) - container["astro_weights"] = np.ones(container.size, dtype=FTYPE) - container["astro_initial_weights"] = np.ones(container.size, dtype=FTYPE) - - container["total_column_depth"] = events["total_column_depth"][:].astype( - FTYPE - ) - container["true_bjorkenx"] = events["true_bjorkenx"][:].astype(FTYPE) - container["true_bjorkeny"] = events["true_bjorkeny"][:].astype(FTYPE) - - container["true_energy"] = events["true_energy"][:].astype(FTYPE) - container["true_coszen"] = events["true_zenith"][:].astype(FTYPE) - container["reco_energy"] = events["reco_energy"][:].astype(FTYPE) - container["reco_coszen"] = events["reco_zenith"][:].astype(FTYPE) - container["pid"] = events["pid"][:].astype(FTYPE) - container.set_aux_data("nubar", nubar) - container.set_aux_data("flav", flav) - - self.data.add_container(container) - - def apply_function(self): - """ - Reset all the weights to the initial weights - """ - for container in self.data: - container["weights"] = np.copy(container["initial_weights"]) - container["astro_weights"] = np.copy(container["initial_astro_weights"]) diff --git a/pisa/stages/data/meows_loader.py b/pisa/stages/data/meows_loader.py deleted file mode 100644 index a640028de..000000000 --- a/pisa/stages/data/meows_loader.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -A class to load in the MEOWS hdf5 files -""" - -from curses import raw - -import numpy as np -import h5py as h5 -import pandas as pd -from time import time - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile -from pisa.core.container import Container -from pisa.core.events_pi import EventsPi -from pisa.utils.resources import find_resource - - -class meows_loader(Stage): - """ - Docstring incoming... - """ - - def __init__(self, events_file: str, n_files: int, output_names, **std_kwargs): - self.events_file = events_file - self._n_files = int(n_files) - self.output_names = output_names - super().__init__(expected_params=(), **std_kwargs) - - def setup_function(self): - """ - Go over all those input files and load them in. - - We load the first data in specifically to setup the containers, and afterwards go through appending to the end of those arrays - """ - - print("Loading data...", end="") - st = time() - raw_data = h5.File(find_resource(self.events_file), "r") - - for name in self.output_names: - # make container - container = Container(name) - - nubar = -1 if "bar" in name else 1 - if "e" in name: - flav = 0 - if "mu" in name: - flav = 1 - if "tau" in name: - flav = 2 - - # cut out right part - pdg = nubar * (12 + 2 * flav) - - mask = raw_data["PrimaryType"][:] == pdg - # there's no interaction key in this MC, so we put this in so only the CC are used - if "cc" in name: - mask = np.logical_and(mask, raw_data["PrimaryType"] != 0) - else: - mask = np.logical_and(mask, raw_data["PrimaryType"] == 0) - - events = raw_data - - container["weighted_aeff"] = ( - events["oneweight"][mask][:].astype(FTYPE) * (1e-4) / (98000 / 5.0) - ) - container["weights"] = np.ones(container.size, dtype=FTYPE) - container["initial_weights"] = np.ones(container.size, dtype=FTYPE) - - container["total_column_depth"] = events["TotalColumnDepth"][mask][ - : - ].astype(FTYPE) - container["true_bjorkenx"] = events["FinalStateX"][mask][:].astype(FTYPE) - container["true_bjorkeny"] = events["FinalStateY"][mask][:].astype(FTYPE) - - container["true_energy"] = events["NuEnergy"][mask][:].astype(FTYPE) - container["true_coszen"] = np.cos(events["NuZenith"][mask][:].astype(FTYPE)) - container["reco_energy"] = events["MuExEnergy"][mask][:].astype(FTYPE) - container["reco_coszen"] = np.cos( - events["MuExZenith"][mask][:].astype(FTYPE) - ) - container["pid"] = events["pid"][mask][:].astype(FTYPE) - container.set_aux_data("nubar", nubar) - container.set_aux_data("flav", flav) - - self.data.add_container(container) - - ed = time() - print(" done! Took {} minutes".format((ed - st) / 60)) - raw_data.close() - - def apply_function(self): - """ - Resets all the weights to the initial weights - """ - for container in self.data: - container["weights"] = np.copy(container["initial_weights"]) - container["astro_weights"] = np.copy(container["initial_weights"]) diff --git a/pisa/stages/data/simple_data_loader.py b/pisa/stages/data/simple_data_loader.py deleted file mode 100644 index 5d51842b3..000000000 --- a/pisa/stages/data/simple_data_loader.py +++ /dev/null @@ -1,233 +0,0 @@ -""" -A Stage to load data from a PISA style hdf5 file into a PISA pi ContainerSet -""" - -#TODO This class is become dcereasingly "simple"! Make it into a more specific stage for our purposes and recreate a much more simple HDF5 file loader that is generic for any PISA task - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.profiler import profile -from pisa.core.container import Container -from pisa.core.events_pi import EventsPi -from pisa.utils.format import arg_str_seq_none, split - - -class simple_data_loader(Stage): - """ - HDF5 file loader PISA Pi class - - Parameters - ---------- - - events_file : hdf5 file path - output from make_events, including flux weights - and Genie systematics coefficients - - mc_cuts : cut expr - e.g. '(true_coszen <= 0.5) & (true_energy <= 70)' - - data_dict : str of a dict - Dictionary to specify what keys from the hdf5 files to be loaded - under what name. Entries can be strings that point to the right - key in the hdf5 file or lists of keys, and the data will be - stacked into a 2d array. - - neutrinos : bool - Flag indicating whether data events represent neutrinos - In this case, special handling for e.g. nu/nubar, CC vs NC, ... - - fraction_events_to_keep : float - Fraction of loaded events to use (use to downsample). - Must be in range [0.,1.], or disable by setting to `None`. - Default in None. - - Notes - ----- - Looks for `initial_weights` fields in events file, which will serve - as nominal weights for all events included. - No fields named `weights` may already be present. - - """ - def __init__(self, - events_file, - mc_cuts, - data_dict, - neutrinos=True, - required_metadata=None, - fraction_events_to_keep=None, - events_subsample_index=0, - seed=123456, - output_names=None, - **std_kwargs, - ): - - # instantiation args that should not change - self.events_file = events_file - self.mc_cuts = mc_cuts - self.data_dict = data_dict - self.neutrinos = neutrinos - self.required_metadata = required_metadata - self.fraction_events_to_keep = fraction_events_to_keep - self.events_subsample_index = int(events_subsample_index) - self.seed = int(seed) - self.output_names = output_names - - # Handle list inputs - self.events_file = split(self.events_file) - if self.required_metadata is not None : - self.required_metadata = split(self.required_metadata) - - # instead of adding params here, consider making them instantiation - # args so nothing external will inadvertently try to change - # their values - expected_params = () - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - # check output names - if len(self.output_names) != len(set(self.output_names)): - raise ValueError( - 'Found duplicates in `output_names`, but each name must be' - ' unique.' - ) - - self.load_events() - self.apply_cuts_to_events() - - def load_events(self): - '''Loads events from events file''' - - # Create the events structure - self.evts = EventsPi( - name='Events', - neutrinos=self.neutrinos, - fraction_events_to_keep=self.fraction_events_to_keep, - events_subsample_index=self.events_subsample_index, - ) - - # If user provided a variable mapping dict, parse it from the input string (if not already done) - if self.data_dict is not None : - if isinstance(self.data_dict, str): - self.data_dict = eval(self.data_dict) - - # Load the event file into the events structure - self.evts.load_events_file( - events_file=self.events_file, - variable_mapping=self.data_dict, - required_metadata=self.required_metadata, - seed=self.seed, - ) - - if hasattr(self.evts, "metadata"): - self.metadata = self.evts.metadata - - # TODO Add option to define eventual binning here so that can cut events - # now that will be cut later anyway (use EventsPi.keep_inbounds) - - def apply_cuts_to_events(self): - '''Just apply any cuts that the user defined''' - if self.mc_cuts: - self.evts = self.evts.apply_cut(self.mc_cuts) - - def record_event_properties(self): - '''Adds fields present in events file and selected in `self.data_dict` - into containers for the specified output names. Also ensures the - presence of a set of nominal weights. - ''' - - # define which categories to include in the data - # user can manually specify what they want using `output_names`, or else just use everything - output_keys = self.output_names if len(self.output_names) > 0 else self.evts.keys() - - # create containers from the events - for name in output_keys: - - # make container - container = Container(name) - container.representation = 'events' - event_groups = self.evts.keys() - if name not in event_groups: - raise ValueError( - 'Output name "%s" not found in events. Only found %s.' - % (name, event_groups) - ) - - # add the events data to the container - for key, val in self.evts[name].items(): - container[key] = val - - # create weights arrays: - # * `initial_weights` as starting point (never modified) - # * `weights` to be initialised from `initial_weights` - # and modified by the stages - # * user can also provide `initial_weights` in input file - #TODO Maybe add this directly into EventsPi - if 'weights' in container.keys: - # raise manually to give user some helpful feedback - raise KeyError( - 'Found an existing `weights` array in "%s"' - ' which would be overwritten. Consider renaming it' - ' to `initial_weights`.' % name - ) - container['weights'] = np.ones(container.size, dtype=FTYPE) - - if 'initial_weights' not in container.keys: - if self.fraction_events_to_keep is None: - container['initial_weights'] = np.ones(container.size, dtype=FTYPE) - else : - if 'nu' in name or 'mu' in name: - # Need to scale weights if using down-sampling - container['initial_weights'] = np.full(container.size, 1. / float(self.fraction_events_to_keep), dtype=FTYPE) - else: - container['initial_weights'] = np.ones(container.size, dtype=FTYPE) - - # add neutrino flavor information for neutrino events - #TODO Maybe add this directly into EventsPi - if self.neutrinos: - # this determination of flavour is the worst possible coding, ToDo - nubar = -1 if 'bar' in name else 1 - if name.startswith('nutau'): - flav = 2 - elif name.startswith('numu'): - flav = 1 - elif name.startswith('nue'): - flav = 0 - else: - raise ValueError('Cannot determine flavour of %s'%name) - container.set_aux_data('nubar', nubar) - container.set_aux_data('flav', flav) - - self.data.add_container(container) - - # check created at least one container - if len(self.data.names) == 0: - raise ValueError( - 'No containers created during data loading for some reason.' - ) - - - def setup_function(self): - '''Store event properties from events file at - service initialisation. Cf. `Stage` docs. - ''' - self.record_event_properties() - - - def apply_function(self): - - # reset data representation to events - #TODO This should be fixed more generally at the Pipeline level, see XXX - self.data.representation = "events" - - # reset weights to initial weights prior to downstream stages running - for container in self.data: - container['weights'] = np.copy(container['initial_weights']) diff --git a/pisa/stages/data/simple_signal.py b/pisa/stages/data/simple_signal.py deleted file mode 100644 index 22d17fa0f..000000000 --- a/pisa/stages/data/simple_signal.py +++ /dev/null @@ -1,198 +0,0 @@ -""" -Stage to generate simple 1D data consisting -of a flat background + gaussian peak with a mean and a width - -""" -from __future__ import absolute_import, print_function, division - -__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)" - -import numpy as np -from pisa import FTYPE -from pisa.core.container import Container -from pisa.core.stage import Stage - -# Load the modified index lookup function -from pisa.core.bin_indexing import lookup_indices - - -class simple_signal(Stage): - """ - random toy event generator PISA class - - Parameters - ---------- - params - Expected params .. :: - - n_events : int - Number of events to be generated per output name - random - seed : int - Seed to be used for random - - """ - - def __init__( - self, - **std_kwargs, - ): - expected_params = ( # parameters fixed during fit - 'n_events_data', - 'stats_factor', - 'signal_fraction', - - # minimum + maximum bkg values - 'bkg_min', - 'bkg_max', - - # fitted parameters - 'mu', - 'sigma') - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - ''' - This is where we figure out how many events to generate, - define their weights relative to the data statistics - and initialize the container we will need - - This function is run once when we instantiate the pipeline - ''' - - # - # figure out how many signal and background events to create - # - n_data_events = int(self.params.n_events_data.value.m) - self.stats_factor = float(self.params.stats_factor.value.m) - signal_fraction = float(self.params.signal_fraction.value.m) - - # Number of simulated MC events - self.n_mc = int(n_data_events*self.stats_factor) - # Number of signal MC events - self.nsig = int(self.n_mc*signal_fraction) - self.nbkg = self.n_mc-self.nsig # Number of bkg MC events - - # Go in events mode - self.data.representation = 'events' - - # - # Create a signal container, with equal weights - # - signal_container = Container('signal') - signal_container.representation = 'events' - # Populate the signal physics quantity over a uniform range - signal_initial = np.random.uniform(low=self.params.bkg_min.value.m, - high=self.params.bkg_max.value.m, - size=self.nsig) - - # guys, seriouslsy....?! "stuff"?? - signal_container.add_array_data('stuff', signal_initial) - # Populate its MC weight by equal constant factors - signal_container.add_array_data('weights', np.ones(self.nsig, dtype=FTYPE)*1./self.stats_factor) - # Populate the error on those weights - signal_container.add_array_data('errors',(np.ones(self.nsig, dtype=FTYPE)*1./self.stats_factor)**2. ) - - # - # Compute the bin indices associated with each event - # - sig_indices = lookup_indices(sample=[signal_container['stuff']], binning=self.apply_mode) - signal_container.add_array_data('bin_indices', sig_indices) - - # - # Compute an associated bin mask for each output bin - # - for bin_i in range(self.apply_mode.tot_num_bins): - sig_bin_mask = sig_indices == bin_i - signal_container.add_array_data(key='bin_{}_mask'.format(bin_i), data=sig_bin_mask) - - # - # Add container to the data - # - self.data.add_container(signal_container) - - # - # Create a background container - # - if self.nbkg > 0: - - bkg_container = Container('background') - bkg_container.representation = 'events' - # Create a set of background events - initial_bkg_events = np.random.uniform(low=self.params.bkg_min.value.m, high=self.params.bkg_max.value.m, size=self.nbkg) - bkg_container.add_array_data('stuff', initial_bkg_events) - # create their associated weights - bkg_container.add_array_data('weights', np.ones(self.nbkg)*1./self.stats_factor) - bkg_container.add_array_data('errors',(np.ones(self.nbkg)*1./self.stats_factor)**2. ) - # compute their bin indices - bkg_indices = lookup_indices(sample=[bkg_container['stuff']], binning=self.apply_mode) - bkg_container.add_array_data('bin_indices', bkg_indices) - # Add bin indices mask (used in generalized poisson llh) - for bin_i in range(self.apply_mode.tot_num_bins): - bkg_bin_mask = bkg_indices==bin_i - bkg_container.add_array_data(key='bin_{}_mask'.format(bin_i), data=bkg_bin_mask) - - self.data.add_container(bkg_container) - - - # - # Add the binned counterpart of each events container - # - for container in self.data: - container.array_to_binned('weights', binning=self.apply_mode, averaged=False) - container.array_to_binned('errors', binning=self.apply_mode, averaged=False) - - - def apply_function(self): - ''' - This is where we re-weight the signal container - based on a model gaussian with tunable parameters - mu and sigma. - - The background is left untouched in this step. - - A possible upgrade to this function would be to make a - small background re-weighting - - This function will be called at every iteration of the minimizer - ''' - - # - # Make sure we are in events mode - # - self.data.representation = 'events' - from scipy.stats import norm - - for container in self.data: - - if container.name == 'signal': - # - # Signal is a gaussian pdf, weighted to account for the MC statistics and the signal fraction - # - reweighting = norm.pdf(container['stuff'], loc=self.params['mu'].value.m, scale=self.params['sigma'].value.m)/self.stats_factor - reweighting/=np.sum(reweighting) - reweighting*=(self.nsig/self.stats_factor) - - reweighting[np.isnan(reweighting)] = 0. - - # - # New MC errors = MCweights squared - # - new_errors = reweighting**2. - - # - # Replace the weight information in the signal container - # - np.copyto(src=reweighting, dst=container["weights"]) - np.copyto(src=new_errors, dst=container['errors']) - container['weights'].mark_changed() - container['errors'].mark_changed() - - # Re-bin the events weight into new histograms - container.array_to_binned('weights', binning=self.apply_mode, averaged=False) - container.array_to_binned('errors', binning=self.apply_mode, averaged=False) diff --git a/pisa/stages/data/sqlite_loader.py b/pisa/stages/data/sqlite_loader.py deleted file mode 100644 index 80819b1df..000000000 --- a/pisa/stages/data/sqlite_loader.py +++ /dev/null @@ -1,140 +0,0 @@ -from __future__ import absolute_import, print_function, division - -import numpy as np -import pandas as pd -import sqlite3 -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.resources import find_resource -from pisa.utils.profiler import profile -from pisa.core.container import Container - - -class sqlite_loader(Stage): - """ - SQLite loader PISA Pi class - Parameters - ---------- - database : path to sqlite database - **kwargs - Passed to Stage - """ - def __init__( - self, - database, - output_names, - post_fix = '_pred', - **std_kwargs, - ): - - # instantiation args that should not change - self.database = database - self.post_fix = post_fix - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - self.output_names = output_names - - def get_pid_and_interaction_type(self,name): - '''Sorry''' - if 'bar' in name: - nubar = -1 - else: - nubar = 1 - if 'e' in name: - pid = 12 - flavor = 0 - if 'mu' in name: - pid = 14 - flavor = 1 - if 'tau' in name: - pid = 16 - flavor = 2 - if 'cc' in name: - interaction_type = 1 - if 'nc' in name: - interaction_type = 2 - return nubar*pid, interaction_type, nubar, flavor - - def query_database(self, interaction_type, pid): - with sqlite3.connect(self.database) as con: - # Get truth - query = 'SELECT * FROM truth WHERE interaction_type = %s and pid = %s'%(interaction_type, pid) - truth = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) - if self.post_fix == '_retro': - # Get retro reco - query = 'SELECT * FROM retro WHERE event_no in %s'%(str(tuple(truth['event_no']))) - reco = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) - else: - # Get GNN reco - query = 'SELECT * FROM reconstruction WHERE event_no in %s'%(str(tuple(truth['event_no']))) - reco = pd.read_sql(query,con).sort_values('event_no').reset_index(drop = True) - # Get number of i3 files with specified PID by counting unique combinations of RunID and SubrunID - query = 'SELECT DISTINCT RunID, SubrunID FROM truth WHERE pid = %s'%pid - n_files = len(pd.read_sql(query,con)) - return truth, reco, n_files - - def add_truth(self, container, truth, nubar, flavor): - ''' Adds truth to container''' - container['true_coszen'] = np.cos(truth['zenith']).values.astype(FTYPE) - container['true_energy'] = truth['energy'].values.astype(FTYPE) - container.set_aux_data("nubar", nubar) # This sets true nu/nubar - container.set_aux_data("flav", flavor) # This sets the true flavor - return container - - def add_reco(self, container, reco): - ''' Adds reconstructed quantities to container''' - - container['reco_coszen'] = np.cos(reco['zenith' + self.post_fix]).values.astype(FTYPE) - container['reco_' + 'energy'] = reco['energy' + self.post_fix].values.astype(FTYPE) - if self.post_fix == '_retro': - container['pid'] = reco['L7_PIDClassifier_FullSky_ProbTrack'].values.astype(FTYPE) - else: - container['pid'] = reco['track' + self.post_fix].values.astype(FTYPE) - return container - - def add_aeff_weight(self, container, truth, n_files): - CM2_TO_M2 = 1e-4 - weighted_aeff = ( - CM2_TO_M2 - * truth["OneWeight"] - / n_files - / truth["gen_ratio"] - / truth["NEvents"] - ) - container['weighted_aeff'] = weighted_aeff.values.astype(FTYPE) - return container - - def initialize_weights(self, container): - container['weights'] = np.ones(container.size, dtype=FTYPE) - container['initial_weights'] = np.ones(container.size, dtype=FTYPE) - return container - - def setup_function(self): - # create containers from the events - for name in self.output_names: - # make container - container = Container(name) - pid, interaction_type, nubar, flavor = self.get_pid_and_interaction_type(name) - truth, reco,n_i3files_with_flavor = self.query_database(interaction_type, pid) - container = self.add_truth(container,truth, nubar, flavor) - container = self.add_reco(container,reco) - container = self.initialize_weights(container) - container = self.add_aeff_weight(container, truth, n_i3files_with_flavor) - - self.data.add_container(container) - - # check created at least one container - if len(self.data.names) == 0: - raise ValueError( - 'No containers created during data loading for some reason.' - ) - - def apply_function(self): - for container in self.data: - container['weights'] = np.copy(container['initial_weights']) \ No newline at end of file diff --git a/pisa/stages/data/super_simple_pipeline.cfg b/pisa/stages/data/super_simple_pipeline.cfg deleted file mode 100644 index e7f337f34..000000000 --- a/pisa/stages/data/super_simple_pipeline.cfg +++ /dev/null @@ -1,41 +0,0 @@ -[binning] - -super_simple_binning.order = stuff -super_simple_binning.stuff = {'bin_edges':np.linspace(0.,40.,51)} - - -[data.simple_signal] - -input_specs = None -calc_specs = None -output_specs = super_simple_binning - - -param.n_events_data = None -param.signal_fraction = None -param.stats_factor = None -param.bkg_min = 0. -param.bkg_max = 40. - -param.mu = 20.0 -param.mu.fixed = False - -param.sigma = 3.1 -param.sigma.fixed = True - - - -[likelihood.generalized_llh_params] - - -input_specs = None -calc_specs = None -output_specs = super_simple_binning - -# Arguments to turn pseudo weight and mean adjustment on and off -with_pseudo_weight = False -with_mean_adjust = False - -[pipeline] - -order = data.simple_signal, likelihood.generalized_llh_params diff --git a/pisa/stages/data/toy_event_generator.py b/pisa/stages/data/toy_event_generator.py deleted file mode 100644 index 881b7dab1..000000000 --- a/pisa/stages/data/toy_event_generator.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -Stage to generate some random data -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.container import Container -from pisa.core.binning import MultiDimBinning -from pisa.core.stage import Stage -from pisa.utils import vectorizer - - -class toy_event_generator(Stage): - """ - random toy event generator PISA Pi class - - Parameters - ---------- - - output_names : str - list of output names - - params - Expected params .. :: - - n_events : int - Number of events to be generated per output name - random - seed : int - Seed to be used for random - - """ - def __init__( - self, - output_names, - **std_kwargs, - ): - - expected_params = ('n_events', 'random', 'seed') - - self.output_names = output_names - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - - n_events = int(self.params.n_events.value.m) - seed = int(self.params.seed.value.m) - self.random_state = np.random.RandomState(seed) - - for name in self.output_names: - - container = Container(name, representation=self.calc_mode) - - nubar = -1 if 'bar' in name else 1 - if 'e' in name: - flav = 0 - if 'mu' in name: - flav = 1 - if 'tau' in name: - flav = 2 - - if not isinstance(self.calc_mode, MultiDimBinning): - # Generate some events in the array representation just to have them - # here we add those explicitly in the array representation - container['true_energy'] = np.power(10, self.random_state.rand(n_events).astype(FTYPE) * 3) - container['true_coszen'] = self.random_state.rand(n_events).astype(FTYPE) * 2 - 1 - - size = container.size - - # make some initial weights - if self.params.random.value: - container['initial_weights'] = self.random_state.rand(size).astype(FTYPE) - else: - container['initial_weights'] = np.ones(size, dtype=FTYPE) - - # other necessary info - container.set_aux_data('nubar', nubar) - container.set_aux_data('flav', flav) - container['weights'] = np.ones(size, dtype=FTYPE) - container['weighted_aeff'] = np.ones(size, dtype=FTYPE) - - flux_nue = np.zeros(size, dtype=FTYPE) - flux_numu = np.ones(size, dtype=FTYPE) - flux = np.stack([flux_nue, flux_numu], axis=1) - - container['nu_flux_nominal'] = flux - container['nubar_flux_nominal'] = flux - - self.data.add_container(container) - - def apply_function(self): - # reset weights - for container in self.data: - container['weights'] = np.copy(container['initial_weights']) diff --git a/pisa/stages/discr_sys/__init__.py b/pisa/stages/discr_sys/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/discr_sys/hypersurfaces.py b/pisa/stages/discr_sys/hypersurfaces.py deleted file mode 100644 index caeaf574f..000000000 --- a/pisa/stages/discr_sys/hypersurfaces.py +++ /dev/null @@ -1,229 +0,0 @@ -""" -PISA pi stage to apply hypersurface fits from discrete systematics parameterizations -""" - -#TODO Currently have to defined the `links` value in the stage config to match what the `combine_regex` does in -# the Hypersurface fitting. The `combine_regex` is stored in the hypersurface instance, so should make the -# scontainer linking use this instead of having to manually specify links. To do this, should make a variant -# of the container linking function that accepts a regex (using shared code with Map.py). - -from __future__ import absolute_import, print_function, division - -import ast - -from numba import guvectorize -import numpy as np - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.core.binning import MultiDimBinning -from pisa.utils.log import logging -import pisa.utils.hypersurface as hs -from pisa.utils.log import set_verbosity, Levels -#set_verbosity(Levels.DEBUG) - -__all__ = ["hypersurfaces",] - -__author__ = "P. Eller, T. Ehrhardt, T. Stuttard, J.L. Lanfranchi, A. Trettin" - -__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -class hypersurfaces(Stage): # pylint: disable=invalid-name - """ - Service to apply hypersurface parameterisation produced by - `scripts.fit_discrete_sys_nd` - - Parameters - ---------- - fit_results_file : str - Path to hypersurface fit results file, i.e. the JSON file produced by the - `pisa.scripts.fit_discrete_sys_nd.py` script - - propagate_uncertainty : bool, optional - Propagate the uncertainties from the hypersurface to the uncertainty of - the output - - params : ParamSet - Note that the params required to be in `params` are determined from - those listed in the `fit_results_file`. - - interpolated : bool - If `True`, indicates that the hypersurfaces to be loaded are interpolated. - - links : dict - A dictionary defining how containers should be linked. Keys are the names of - the merged containers, values are lists of containers being linked together. - Keys must be a sub-set of the loaded hypersurfaces. - - """ - def __init__( - self, - fit_results_file, - propagate_uncertainty=False, - interpolated=False, - links=None, - fluctuate=False, - fluctuate_seed=12345, - **std_kwargs, - ): - # -- Only allowed/implemented modes -- # - assert isinstance(std_kwargs['calc_mode'], MultiDimBinning) - # -- Load hypersurfaces -- # - - # Store args - self.fit_results_file = fit_results_file - self.propagate_uncertainty = propagate_uncertainty - self.interpolated = interpolated - # Expected parameter names depend on the hypersurface and, if applicable, - # on the parameters in which the hypersurfaces are interpolated. - # For this reason we need to load the hypersurfaces already in the init function - self.inter_params = [] - if self.interpolated: - self.hypersurfaces = hs.load_interpolated_hypersurfaces(self.fit_results_file, expected_binning=std_kwargs['calc_mode']) - self.inter_params = list(self.hypersurfaces.values())[0].interpolation_param_names - else: - self.hypersurfaces = hs.load_hypersurfaces(self.fit_results_file, expected_binning=std_kwargs['calc_mode']) - self.hypersurface_param_names = list(self.hypersurfaces.values())[0].param_names - - # -- Initialize base class -- # - super().__init__( - expected_params=self.hypersurface_param_names + self.inter_params, - **std_kwargs, - ) - - self.links = ast.literal_eval(links) - self.warning_issued = False # don't warn more than once about empty bins - - # Handle fluctuation option - self.fluctuate = fluctuate - if self.fluctuate : - self.fluctuate_seed = fluctuate_seed - logging.info(f"User has selected to fluctuate the hypersurface coefficients (seed is {self.fluctuate_seed})") - assert self.fluctuate_seed is not None - - # pylint: disable=line-too-long - def setup_function(self): - """Load the fit results from the file and make some check compatibility""" - - self.data.representation = self.calc_mode - - if self.links is not None: - for key, val in self.links.items(): - self.data.link_containers(key, val) - - # create containers for scale factors - for container in self.data: - container["hs_scales"] = np.empty(container.size, dtype=FTYPE) - if self.propagate_uncertainty: - container["hs_scales_uncertainty"] = np.empty(container.size, dtype=FTYPE) - - - # Check map names match between data container and hypersurfaces - for container in self.data: - assert container.name in self.hypersurfaces, f"No match for map {container.name} found in the hypersurfaces" - - self.data.unlink_containers() - - # the linter thinks that "logging" refers to Python's built-in - # pylint: disable=line-too-long, logging-not-lazy, deprecated-method - def compute_function(self): - - self.data.representation = self.calc_mode - - # Link containers - if self.links is not None: - for key, val in self.links.items(): - self.data.link_containers(key, val) - - # Format the params dict that will be passed to `Hypersurface.evaluate` - #TODO checks on param units - param_values = {sys_param_name: self.params[sys_param_name].m - for sys_param_name in self.hypersurface_param_names} - if self.interpolated: - osc_params = {name: self.params[name] for name in self.inter_params} - - # If fluctuating, seed the flucutations - # Needs to be consistent for each call to this functions - if self.fluctuate : - fluctuate_random_state = np.random.RandomState(self.fluctuate_seed) - - # Loop over types - for container in self.data: - - # Get the hypersurfaces - if self.interpolated: - # in the case of interpolated hypersurfaces, the actual hypersurface - # must be generated for the given oscillation parameters first - container_hs = self.hypersurfaces[container.name].get_hypersurface(**osc_params) - else: - container_hs = self.hypersurfaces[container.name] - - # Fluctute the hypersurfaces, if requested - if self.fluctuate : - container_hs = container_hs.fluctuate(random_state=fluctuate_random_state) #TODO oncely need to do this once if not interpolating - - # Get the hypersurface scale factors (reshape to 1D array) - if self.propagate_uncertainty: - scales, uncertainties = container_hs.evaluate(param_values, return_uncertainty=True) - scales = scales.reshape(container.size) - uncertainties = uncertainties.reshape(container.size) - else: - scales = container_hs.evaluate(param_values).reshape(container.size) - - # Where there are no scales (e.g. empty bins), set scale factor to 1 - empty_bins_mask = ~np.isfinite(scales) - num_empty_bins = np.sum(empty_bins_mask) - if num_empty_bins > 0. and not self.warning_issued: - logging.warn("%i empty bins found in hypersurface" % num_empty_bins) - self.warning_issued = True - scales[empty_bins_mask] = 1. - if self.propagate_uncertainty: - uncertainties[empty_bins_mask] = 0. - - # Add to container - np.copyto(src=scales, dst=container["hs_scales"]) - container.mark_changed("hs_scales") - if self.propagate_uncertainty: - np.copyto(src=uncertainties, dst=container["hs_scales_uncertainty"]) - container.mark_changed("hs_scales_uncertainty") - - # Unlink the containers again - self.data.unlink_containers() - - def apply_function(self): - - for container in self.data: - # update uncertainty first, before the weights are changed. This step is skipped in event mode - if self.error_method == "sumw2": - - # If computing uncertainties in events mode, warn that - # hs error propagation will be skipped - if self.data.representation=='events': - logging.trace('WARNING: running stage in events mode. Hypersurface error propagation will be IGNORED.') - - elif self.propagate_uncertainty: - container["errors"] = container["weights"] * container["hs_scales_uncertainty"] - - else: - container["errors"] *= container["hs_scales"] - container.mark_changed('errors') - - if "bin_unc2" in container.keys: - container["bin_unc2"] = np.clip(container["bin_unc2"] * container["hs_scales"], a_min=0, a_max=np.inf) - container.mark_changed("bin_unc2") - - # Update weights according to hypersurfaces - container["weights"] = np.clip(container["weights"] * container["hs_scales"], a_min=0, a_max=np.inf) diff --git a/pisa/stages/discr_sys/ultrasurfaces.py b/pisa/stages/discr_sys/ultrasurfaces.py deleted file mode 100644 index 0a38f72f2..000000000 --- a/pisa/stages/discr_sys/ultrasurfaces.py +++ /dev/null @@ -1,289 +0,0 @@ -""" -PISA pi stage to apply ultrasurface fits from discrete systematics parameterizations -""" - -import numpy as np -from numba import njit - -import collections -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.core.binning import MultiDimBinning -from pisa.utils.log import logging -from pisa.utils.profiler import profile, line_profile -from pisa.utils.log import set_verbosity, Levels - -from itertools import combinations, chain - -__all__ = [ - "ultrasurfaces", -] - -__author__ = "A. Trettin, L. Fischer" - -__license__ = """Copyright (c) 2014-2022, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -class ultrasurfaces(Stage): - """ - Service to apply ultrasurface parameterisation stored in a feather file. - - Parameters - ---------- - fit_results_file : str - Path to .feather file containing all nominal events with gradients. - nominal_points : str or dict - Dictionary (or str that can be evaluated thereto) of the form - {'parameter_name': } containing the nominal value for each - parameter that was used to fit the gradients with. - varnames : list of str - List of variables to match the pisa events to the pre-fitted events. - approx_exponential : bool - Approximate the exponential using exp(x) = 1 + x. This is appropriate when - gradients have been fit with the purely linear `hardmax` activation function. - (If you don't know what that is, just leave it at `False`.) - support : str or dict - Dictionary (or str that can be evaluated thereto) of the form {'parameter_name': - (lower bound, upper bound)} containing the bounds of the parameter space inside - which the gradients are valid. If a value outside of these bounds is requested, - we have to extrapolate using the strategy defined in the `extrapolation` - parameter. - extrapolation : str - Strategy to use for extrapolating beyond the bounds set by the `bounds` option. - Options are `continue`, `linear` and `constant`. If `continue`, polynomial - features are simply extended at the risk of weights getting out of control. - If `linear`, second order features are extrapolated using their derivative at - the closest bound. If `constant`, the value at the closest boundary is returned. - params : ParamSet - Note that the params required to be in `params` are determined from - those listed in the `systematics`. - """ - - def __init__( - self, - fit_results_file, - nominal_points, - varnames=["pid", "true_coszen", "reco_coszen", "true_energy", "reco_energy"], - approx_exponential=False, - support=None, - extrapolation="continue", - **std_kwargs, - ): - # evaluation only works on event-by-event basis - assert std_kwargs["calc_mode"] == "events" - - # Store args - self.fit_results_file = fit_results_file - self.varnames = varnames - self.approx_exponential = approx_exponential - - if isinstance(nominal_points, str): - self.nominal_points = eval(nominal_points) - else: - self.nominal_points = nominal_points - assert isinstance(self.nominal_points, collections.abc.Mapping) - - if isinstance(support, str): - self.support = eval(support) - assert isinstance(self.support, collections.abc.Mapping) - elif isinstance(support, collections.abc.Mapping): - self.support = support - elif support is None: - self.support = None - else: - raise ValueError("Unknown input format for `support`.") - - self.extrapolation = extrapolation - - param_names = list(self.nominal_points.keys()) - for pname in param_names: - if self.support is not None and pname not in self.support: - raise ValueError( - f"Support range is missing for parameter {pname}" - ) - - # -- Initialize base class -- # - super().__init__( - expected_params=param_names, - **std_kwargs, - ) - - def setup_function(self): - """Load the fit results from the file and make some compatibility checks""" - - # make this an optional dependency - import pandas as pd - from sklearn.neighbors import KDTree - - self.data.representation = self.calc_mode - - # create containers for scale factors - for container in self.data: - container["us_scales"] = np.ones(container.size, dtype=FTYPE) - - # load the feather file and extract gradient names - df = pd.read_feather(self.fit_results_file) - - self.gradient_names = [key for key in df.keys() if key.startswith("grad")] - - # create containers for gradients - for container in self.data: - for gradient_name in self.gradient_names: - container[gradient_name] = np.empty(container.size, dtype=FTYPE) - - # Convert the variable columns to an array - X_pandas = df[self.varnames].to_numpy() - # We will use a nearest-neighbor tree to search for matching events in the - # DataFrame. Ideally, these should actually be the exact same events with a - # distance of zero. We will raise a warning if we had to approximate an - # event by its nearest neighbor with a distance > 0. - - # At least in theory, this should always pick out the one exact event from the - # correct event category. If an event is not exactly matched, however, it's - # possible that the gradient for a numu_cc event might get picked from - # a nu_nc event, for example. We don't have any safeguards against that - # at this time, even though the information is in the DataFrame to do it. - - # TODO: Ensure event category of nearest neighbor matches that of query - tree = KDTree(X_pandas) - for container in self.data: - n_container = len(container["true_energy"]) - # It's important to match the datatype of the loaded DataFrame (single prec.) - # so that matches will be exact. - X_pisa = np.zeros((n_container, len(self.varnames)), dtype=X_pandas.dtype) - for i, vname in enumerate(self.varnames): - X_pisa[:, i] = container[vname] - # Query the tree for the single nearest neighbor - dists, ind = tree.query(X_pisa, k=1) - if np.any(dists > 0): - logging.warn( - f"Could not find exact match for {np.sum(dists > 0)} {container.name} " - f"events ({float(np.sum(dists > 0)) * 100 / n_container:.4f}%) " - "in the loaded DataFrame. Their " - "gradients will be taken from the nearest neighbor." - ) - # TODO: since we read out all gradients we could loop over the - # parameters outside and then over the containers inside - for gradient_name in self.gradient_names: - grads = df[gradient_name].to_numpy() - container[gradient_name] = grads[ind.ravel()] - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - # Calculate the `delta_p` matrix containing the polynomial features. - # If requested, these feature may be extrapolated using the strategy defined - # by `self.extrapolation`. - - delta_p_dict = dict() - - # The gradients may be of arbitrary order and have interaction - # terms. For example, if the gradient's name is - # `grad__dom_eff__hole_ice_p0`, then the corresponding feature is - # (delta dom_eff) * (delta hole_ice_p0). - for count, gradient_name in enumerate(self.gradient_names): - feature = 1.0 - # extract the parameter names from the name of the gradient - param_names = gradient_name.split("grad")[-1].split("__")[1:] - grad_order = len(param_names) - has_interactions = len(set(param_names)) > 1 - - for i, pname in enumerate(param_names): - # If support has been set and a parameter is evaluated outside of those - # bounds, we evaluate it at the nearest bound. - if self.support is None: - bounded_value = self.params[pname].m - else: - bounded_value = np.clip(self.params[pname].m, *self.support[pname]) - - # The bounded value of the parameter shift from nominal - x_b = bounded_value - self.nominal_points[pname] - # The unbounded value - x = self.params[pname].m - self.nominal_points[pname] - - # The extrapolation strategy `continue` is equivalent to just evaluating - # at the unbounded point. - if self.extrapolation == "continue": - # For a squared parameter, this will be done twice, i.e. the feature - # will be (dom_eff)^2 if the gradient is `grad__dom_eff__dom_eff`. - feature *= x - elif self.extrapolation == "constant": - # Constant extrapolation simply means that we evaluate the bounded - # value. - feature *= x_b - elif self.extrapolation == "linear": - # The linear extrapolation of a squared feature is given by - # y = x_b^2 + (2x_b)(x - x_b), - # which can be re-written as - # y = x_b (2x - x_b). - # We see right away that y = x^2 when x is within the bounds. - # We also want to pass through the first order gradients, since - # the linear extrapolation of x is trivially x. - - if grad_order == 1: - feature *= x - continue - - if has_interactions: - raise RuntimeError( - "Cannot calculate linear extrapolation for gradients with " - f"interaction terms: {gradient_name}" - ) - - if i == 0: - feature *= x_b - elif i == 1: - feature *= (2*x - x_b) - else: - raise RuntimeError( - "Cannot use linear extrapolation for orders > 2" - ) - - delta_p_dict[gradient_name] = feature - - for container in self.data: - - # The "gradient shift" is the sum of the gradients times the parameter shifts, - # i.e. grad * delta_p. - # We allocate this array just once and accumulate the sum over all gradients - # into it. - - # Also using zeros_like ensures consistent dtype - grad_shifts = np.zeros_like(container["weights"]) - - for count, gradient_name in enumerate(self.gradient_names): - shift = delta_p_dict[gradient_name] - grad_shift_inplace(container[gradient_name], shift, grad_shifts) - # In the end, the equation for the re-weighting scale is - # exp(grad_p1 * shift_p1 + grad_p2 * shift_p2 + ...) - if self.approx_exponential: - # We can approximate an exponential with exp(x) = 1 + x, - # but this is not recommended unless the gradients have also been fit - # using this approximation. - container["us_scales"] = 1 + grad_shifts - else: - container["us_scales"] = np.exp(grad_shifts) - - def apply_function(self): - for container in self.data: - container["weights"] *= container["us_scales"] - - -@njit -def grad_shift_inplace(grads, shift, out): - for i, g in enumerate(grads): - out[i] += shift * g diff --git a/pisa/stages/flux/__init__.py b/pisa/stages/flux/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/flux/airs.py b/pisa/stages/flux/airs.py deleted file mode 100644 index 2f681c821..000000000 --- a/pisa/stages/flux/airs.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -Stage to implement the atmospheric density uncertainty. -Uses the neutrino fluxes calculated in the mceq_barr stage, and scales the weights - -Ben Smithers -""" - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import WHERE, myjit -from pisa.utils.resources import find_resource - -import photospline - -import numpy as np - - -class airs(Stage): - """ - Parameters - ---------- - airs_spline : spline containing the 1-sigma shifts from AIRS data - - params : ParamSet - Must exclusively have parameters: .. :: - - scale : quantity (dimensionless) - the scale by which the weights are perturbed via the airs 1-sigma shift - """ - - def __init__(self, airs_spline, **std_kwargs): - _airs_spline_loc = find_resource(airs_spline) - self.airs_spline = photospline.SplineTable(_airs_spline_loc) - - expected_params = [ - "airs_scale", - ] - - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - """ - Uses the splines to quickly evaluate the 1-sigma perturbtations at each of the events - """ - - # consider 'true_coszen" and 'true_energy' containers - for container in self.data: - if len(container["true_energy"]) == 0: - container["airs_1s_perturb"] = np.zeros(container.size, dtype=FTYPE) - else: - container["airs_1s_perturb"] = self.airs_spline.evaluate_simple( - (np.log10(container["true_energy"]), container["true_coszen"]) - ) - container.mark_changed("airs_1s_perturb") - - @profile - def apply_function(self): - """ - Modify the weights according to the new scale parameter! - """ - for container in self.data: - container["weights"] *= 1.0 + container[ - "airs_1s_perturb" - ] * self.params.airs_scale.value.m_as("dimensionless") diff --git a/pisa/stages/flux/astrophysical.py b/pisa/stages/flux/astrophysical.py deleted file mode 100644 index 5e236b8d7..000000000 --- a/pisa/stages/flux/astrophysical.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -stage to implement getting the contribution to fluxes from astrophysical neutrino sources -""" -import numpy as np - -from pisa.utils.profiler import profile -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage - -from pisa.utils.numba_tools import WHERE, myjit - -PIVOT = FTYPE(100.0e3) - - -class astrophysical(Stage): - """ - Stage to apply power law astrophysical fluxes - - Parameters - ---------- - params - Expected params are .. :: - astro_delta : quantity (dimensionless) - astro_norm : quantity (dimensionless) - - TODO: flavor ratio as a parameter? Save for later. - """ - - def __init__(self, **std_kwargs): - self._central_gamma = FTYPE(-2.5) - self._central_norm = FTYPE(0.787e-18) - - self._e_ratio = FTYPE(1.0) - self._mu_ratio = FTYPE(1.0) - self._tau_ratio = FTYPE(1.0) - - expected_params = ("astro_delta", "astro_norm") - - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - """ - Setup the nominal flux - """ - self.data.representation = self.calc_mode - for container in self.data: - container["astro_weights"] = np.ones(container.size, dtype=FTYPE) - container["astro_flux"] = np.ones(container.size, dtype=FTYPE) - container["astro_flux_nominal"] = np.ones(container.size, dtype=FTYPE) - - # Loop over containers - for container in self.data: - - # Grab containers here once to save time - true_energy = container["true_energy"] - - container["astro_flux_nominal"] = self._central_norm * np.power( - (true_energy / PIVOT), self._central_gamma - ) - - # TODO split this up so that we can use flavor ratios - # nu_flux_nominal[:,0] = _precalc*self._e_ratio - # nu_flux_nominal[:,1] = _precalc*self._mu_ratio - # nu_flux_nominal[:,2] = _precalc*self._tau_ratio - - container.mark_changed("astro_flux_nominal") - - @profile - def compute_function(self): - """ - Tilt it, scale it, bop it - """ - self.data.representation = self.calc_mode - - delta = self.params.astro_delta.value.m_as("dimensionless") - norm = self.params.astro_norm.value - - for container in self.data: - apply_sys_loop( - container["true_energy"], - container["true_coszen"], - FTYPE(delta), - FTYPE(norm), - container["astro_flux_nominal"], - out=container["astro_flux"], - ) - container.mark_changed("astro_flux") - - @profile - def apply_function(self): - for container in self.data: - container["astro_weights"] = ( - container["initial_weights"] * container["astro_flux"] - ) - - -def spectral_index_scale(true_energy, delta_index): - """ - Calculate spectral index scale. - Adjusts the weights for events in an energy dependent way according to a - shift in spectral index, applied about a user-defined energy pivot. - """ - return np.power(true_energy / PIVOT, delta_index) - - -def apply_sys_loop( - true_energy, - true_coszen, - delta_index, - norm, - astroflux_nominal, - out, -): - """ - Calculation: - 1) Start from nominal flux - 2) Apply spectral index shift - 3) Add contributions from MCEq-computed gradients - - Array dimensions : - true_energy : [A] - true_coszen : [A] - delta_index : scalar float - norm : scalar float - astroflux_nominal : [A,B] - out : [A,B] (sys flux) - where: - A = num events - B = num flavors in flux (=3, e.g. e, mu, tau) - """ - - n_evts = astroflux_nominal.shape[0] - - for event in range(n_evts): - spec_scale = spectral_index_scale(true_energy[event], delta_index) - out[event] = norm * astroflux_nominal[event] * spec_scale diff --git a/pisa/stages/flux/barr_simple.py b/pisa/stages/flux/barr_simple.py deleted file mode 100644 index a7144a6ff..000000000 --- a/pisa/stages/flux/barr_simple.py +++ /dev/null @@ -1,225 +0,0 @@ -# pylint: disable=not-callable, wrong-import-position - -""" -Stage to implement the old PISA/oscfit flux systematics -""" - -from __future__ import absolute_import, print_function, division - -import math -import os -import sys - -import numpy as np -from numba import guvectorize, cuda - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import WHERE, myjit, ftype -from pisa.utils.resources import find_resource -from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor - - -class barr_simple(Stage): # pylint: disable=invalid-name - """ - stage to apply Barr style flux uncertainties - uses parameterisations of plots from Barr 2006 paper - - Parameters - ---------- - params - Expected params are .. :: - - nue_numu_ratio : quantity (dimensionless) - nu_nubar_ratio : quantity (dimensionless) - delta_index : quantity (dimensionless) - Barr_uphor_ratio : quantity (dimensionless) - Barr_nu_nubar_ratio : quantity (dimensionless) - - """ - def __init__( - self, - **std_kwargs, - ): - expected_params = ( - "nue_numu_ratio", - "nu_nubar_ratio", - "delta_index", - "Barr_uphor_ratio", - "Barr_nu_nubar_ratio", - ) - - # init base class - super(barr_simple, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - self.data.representation = self.calc_mode - for container in self.data: - container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) - - @profile - def compute_function(self): - self.data.representation = self.calc_mode - - nue_numu_ratio = self.params.nue_numu_ratio.value.m_as("dimensionless") - nu_nubar_ratio = self.params.nu_nubar_ratio.value.m_as("dimensionless") - delta_index = self.params.delta_index.value.m_as("dimensionless") - Barr_uphor_ratio = self.params.Barr_uphor_ratio.value.m_as("dimensionless") - Barr_nu_nubar_ratio = self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless") - - for container in self.data: - apply_sys_vectorized( - container["true_energy"], - container["true_coszen"], - container["nu_flux_nominal"], - container["nubar_flux_nominal"], - container["nubar"], - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out=container["nu_flux"], - ) - container.mark_changed('nu_flux') - - -@myjit -def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): - """ apply ratio scale to flux values - - Parameters - ---------- - ratio_scale : float - - sum_constant : bool - if Ture, then the sum of the new flux will be identical to the old flux - - in1 : float - - in2 : float - - out : array - - """ - if in1 == 0. and in2 == 0.: - out[0] = 0. - out[1] = 0. - return - - if sum_constant: - orig_ratio = in1 / in2 - orig_sum = in1 + in2 - new = orig_sum / (1. + ratio_scale * orig_ratio) - out[0] = ratio_scale * orig_ratio * new - out[1] = new - else: - out[0] = ratio_scale * in1 - out[1] = in2 - - -@myjit -def spectral_index_scale(true_energy, egy_pivot, delta_index): - """ calculate spectral index scale """ - return math.pow((true_energy / egy_pivot), delta_index) - - -@myjit -def apply_sys_kernel( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - # nue/numu ratio - new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) - new_nubar_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux - ) - apply_ratio_scale( - nue_numu_ratio, - True, - nubar_flux_nominal[0], - nubar_flux_nominal[1], - new_nubar_flux, - ) - - # apply flux systematics - # spectral idx - idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) - new_nu_flux[0] *= idx_scale - new_nu_flux[1] *= idx_scale - new_nubar_flux[0] *= idx_scale - new_nubar_flux[1] *= idx_scale - - # nu/nubar ratio - new_nue_flux = cuda.local.array(2, dtype=ftype) - new_numu_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux - ) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux - ) - if nubar < 0: - out[0] = new_nue_flux[1] - out[1] = new_numu_flux[1] - else: - out[0] = new_nue_flux[0] - out[1] = new_numu_flux[0] - - # Barr flux - out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) - out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) - - out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) - out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) - - -# vectorized function to apply -# must be outside class -if FTYPE == np.float64: - SIGNATURE = "(f8, f8, f8[:], f8[:], i4, f8, f8, f8, f8, f8, f8[:])" -else: - SIGNATURE = "(f4, f4, f4[:], f4[:], i4, f4, f4, f4, f4, f4, f4[:])" - - -@guvectorize([SIGNATURE], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) -def apply_sys_vectorized( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - apply_sys_kernel( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, - ) diff --git a/pisa/stages/flux/daemon_flux.py b/pisa/stages/flux/daemon_flux.py deleted file mode 100644 index b726bfb12..000000000 --- a/pisa/stages/flux/daemon_flux.py +++ /dev/null @@ -1,202 +0,0 @@ -""" -Implementation of DAEMON flux (https://arxiv.org/abs/2303.00022) -by Juan Pablo Yañez and Anatoli Fedynitch for use in PISA. - -Maria Liubarska, J.P. Yanez 2023 -""" - -import numpy as np -from daemonflux import Flux -from daemonflux import __version__ as daemon_version - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.core.param import Param -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from numba import jit -from scipy import interpolate -from packaging.version import Version - - -class daemon_flux(Stage): - """ - DAEMON flux stage - - Parameters - ---------- - - params: ParamSet - Must have parameters: .. :: - - daemon_K_158G : quantity (dimensionless) - - daemon_K_2P : quantity (dimensionless) - - daemon_K_31G : quantity (dimensionless) - - daemon_antiK_158G : quantity (dimensionless) - - daemon_antiK_2P : quantity (dimensionless) - - daemon_antiK_31G : quantity (dimensionless) - - daemon_n_158G : quantity (dimensionless) - - daemon_n_2P : quantity (dimensionless) - - daemon_p_158G : quantity (dimensionless) - - daemon_p_2P : quantity (dimensionless) - - daemon_pi_158G : quantity (dimensionless) - - daemon_pi_20T : quantity (dimensionless) - - daemon_pi_2P : quantity (dimensionless) - - daemon_pi_31G : quantity (dimensionless) - - daemon_antipi_158G : quantity (dimensionless) - - daemon_antipi_20T : quantity (dimensionless) - - daemon_antipi_2P : quantity (dimensionless) - - daemon_antipi_31G : quantity (dimensionless) - - daemon_GSF_1 : quantity (dimensionless) - - daemon_GSF_2 : quantity (dimensionless) - - daemon_GSF_3 : quantity (dimensionless) - - daemon_GSF_4 : quantity (dimensionless) - - daemon_GSF_5 : quantity (dimensionless) - - daemon_GSF_6 : quantity (dimensionless) - - """ - - def __init__( - self, - **std_kwargs, - ): - - # first have to check daemonflux package version is >=0.8.0 - # (have to do this to ensure chi2 prior penalty is calculated correctly) - if Version(daemon_version) < Version("0.8.0"): - logging.fatal("Detected daemonflux version below 0.8.0! This will lead to incorrect penalty calculation. You must update your daemonflux package to use this stage. You can do it by running 'pip install daemonflux --upgrade'") - raise Exception('detected daemonflux version < 0.8.0') - - # create daemonflux Flux object - self.flux_obj = Flux(location='IceCube', use_calibration=True) - - # get parameter names from daemonflux - self.daemon_names = self.flux_obj.params.known_parameters - - # make parameter names pisa config compatible and add prefix - self.daemon_params = ['daemon_'+p.replace('pi+','pi').replace('pi-','antipi').replace('K+','K').replace('K-','antiK') - for p in self.daemon_names] - - # add daemon_chi2 internal parameter to carry on chi2 penalty from daemonflux (using covar. matrix) - daemon_chi2 = Param(name='daemon_chi2', nominal_value=0., - value=0., prior=None, range=None, is_fixed=True) - - # saving number of parameters into a internal param in order to check that we don't have - # non-daemonflux params with 'daemon_' in their name, which will make prior penalty calculation incorrect - daemon_params_len = Param(name='daemon_params_len', nominal_value=len(self.daemon_names)+2, - value=len(self.daemon_names)+2, prior=None, range=None, is_fixed=True) - - std_kwargs['params'].update([daemon_chi2,daemon_params_len]) - - # init base class - super(daemon_flux, self).__init__( - expected_params=tuple(self.daemon_params+['daemon_chi2','daemon_params_len']), - **std_kwargs, - ) - - def setup_function(self): - - self.data.representation = self.calc_mode - - for container in self.data: - container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE) - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - # get modified parameters (in units of sigma) - modif_param_dict = {} - for i,k in enumerate(self.daemon_params): - modif_param_dict[self.daemon_names[i]] = getattr(self.params, k).value.m_as("dimensionless") - - # update chi2 parameter - self.params['daemon_chi2'].value = self.flux_obj.chi2(modif_param_dict) - - # compute flux maps - flux_map_numu = make_2d_flux_map(self.flux_obj, - particle = 'numu', - params = modif_param_dict) - flux_map_numubar = make_2d_flux_map(self.flux_obj, - particle = 'antinumu', - params = modif_param_dict) - flux_map_nue = make_2d_flux_map(self.flux_obj, - particle = 'nue', - params = modif_param_dict) - flux_map_nuebar = make_2d_flux_map(self.flux_obj, - particle = 'antinue', - params = modif_param_dict) - - - # calc modified flux using provided parameters - for container in self.data: - nubar = container['nubar'] - - nue_flux = evaluate_flux_map(flux_map_nuebar if nubar>0 else flux_map_nue, - container['true_energy'], - container['true_coszen']) - - numu_flux = evaluate_flux_map(flux_map_numubar if nubar>0 else flux_map_numu, - container['true_energy'], - container['true_coszen']) - - - container['nu_flux'][:,0] = nue_flux - container['nu_flux'][:,1] = numu_flux - - container.mark_changed("nu_flux") - -@jit(forceobj=True) -def make_2d_flux_map(flux_obj, - particle = 'numuflux', - egrid = np.logspace(-1,5,500), - params = {}, - ): - - icangles = list(flux_obj.zenith_angles) - icangles_array = np.array(icangles, dtype=float) - mysort = icangles_array.argsort() - icangles = np.array(icangles)[mysort][::-1] - - flux_ref = np.zeros([len(egrid), len(icangles)]) - costheta_angles = np.zeros(len(icangles)) - - for index in range(len(icangles)): - costheta_angles[index] = np.cos(np.deg2rad(float(icangles[index]))) - flux_ref[:,index] = flux_obj.flux(egrid, icangles[index], particle, params) - - fcn = interpolate.RectBivariateSpline(egrid, - costheta_angles, - flux_ref) - return fcn - -@jit(forceobj=True) -def evaluate_flux_map(flux_map, true_energy, true_coszen): - - uconv = true_energy**-3 * 1e4 - return flux_map.ev(true_energy, true_coszen) * uconv - diff --git a/pisa/stages/flux/hillasg.py b/pisa/stages/flux/hillasg.py deleted file mode 100644 index 5e82bd80a..000000000 --- a/pisa/stages/flux/hillasg.py +++ /dev/null @@ -1,115 +0,0 @@ -""" -Stage to evaluate the Hillas-Gaisser expectations from precalculated fluxes - -""" - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights - - -class hillasg(Stage): - """ - stage to generate nominal flux - - Parameters - ---------- - params - Expected params .. :: - flux_table : str - - """ - - def __init__(self, **std_kwargs): - - expected_params = ("flux_table",) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - - self.flux_table = load_2d_table(self.params.flux_table.value) - - self.data.representation = self.calc_mode - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers( - "nu", - [ - "nue_cc", - "numu_cc", - "nutau_cc", - "nue_nc", - "numu_nc", - "nutau_nc", - "nuebar_cc", - "numubar_cc", - "nutaubar_cc", - "nuebar_nc", - "numubar_nc", - "nutaubar_nc", - ], - ) - for container in self.data: - container["nu_flux_nominal"] = np.empty((container.size, 3), dtype=FTYPE) - container["nubar_flux_nominal"] = np.empty((container.size, 3), dtype=FTYPE) - # container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE) - - # don't forget to un-link everything again - self.data.unlink_containers() - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers( - "nu", - [ - "nue_cc", - "numu_cc", - "nutau_cc", - "nue_nc", - "numu_nc", - "nutau_nc", - "nuebar_cc", - "numubar_cc", - "nutaubar_cc", - "nuebar_nc", - "numubar_nc", - "nutaubar_nc", - ], - ) - - # create lists for iteration - out_names = ["nu_flux_nominal"] * 3 + ["nubar_flux_nominal"] * 3 - indices = [0, 1, 2, 0, 1, 2] - tables = ["nue", "numu", "nutau", "nuebar", "numubar", "nutaubar"] - for container in self.data: - for out_name, index, table in zip(out_names, indices, tables): - logging.info( - "Calculating nominal %s flux for %s", table, container.name - ) - calculate_2d_flux_weights( - true_energies=container["true_energy"], - true_coszens=container["true_coszen"], - en_splines=self.flux_table[table], - out=container[out_name][:, index], - ) - container.mark_changed("nu_flux_nominal") - container.mark_changed("nubar_flux_nominal") - - # don't forget to un-link everything again - self.data.unlink_containers() diff --git a/pisa/stages/flux/honda_ip.py b/pisa/stages/flux/honda_ip.py deleted file mode 100644 index 85ec423b7..000000000 --- a/pisa/stages/flux/honda_ip.py +++ /dev/null @@ -1,103 +0,0 @@ -# pylint: disable=not-callable -""" -Stage to evaluate the Honda flux tables using IP splines - -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils.flux_weights import load_2d_table, calculate_2d_flux_weights - - -class honda_ip(Stage): - """ - stage to generate nominal flux - - Parameters - ---------- - params - Expected params .. :: - flux_table : str - - """ - - def __init__( - self, - **std_kwargs - ): - - expected_params = ('flux_table',) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - - self.flux_table = load_2d_table(self.params.flux_table.value) - - self.data.representation = self.calc_mode - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - for container in self.data: - container['nu_flux_nominal'] = np.empty((container.size, 2), dtype=FTYPE) - container['nubar_flux_nominal'] = np.empty((container.size, 2), dtype=FTYPE) - # container['nu_flux'] = np.empty((container.size, 2), dtype=FTYPE) - - # don't forget to un-link everything again - self.data.unlink_containers() - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - # create lists for iteration - out_names = ['nu_flux_nominal']*2 + ['nubar_flux_nominal']*2 - indices = [0, 1, 0, 1] - tables = ['nue', 'numu', 'nuebar', 'numubar'] - for container in self.data: - for out_name, index, table in zip(out_names, indices, tables): - logging.info('Calculating nominal %s flux for %s', table, container.name) - calculate_2d_flux_weights(true_energies=container['true_energy'], - true_coszens=container['true_coszen'], - en_splines=self.flux_table[table], - out=container[out_name][:, index] - ) - container.mark_changed('nu_flux_nominal') - container.mark_changed('nubar_flux_nominal') - - # don't forget to un-link everything again - self.data.unlink_containers() - - - # def apply_function(self): - - # self.data.representation = self.apply_mode - - # # Set flux to be the nominal flux (choosing correct nu vs nubar flux for the container) - # # Note that a subsequent systematic flux stage may change this - # for container in self.data: - # np.copyto( src=container["nu%s_flux_nominal"%("" if container["nubar"] > 0 else "bar")].get("host"), dst=container["nu_flux"].get("host") ) - # container.mark_changed('nu_flux') diff --git a/pisa/stages/flux/mceq_barr.py b/pisa/stages/flux/mceq_barr.py deleted file mode 100644 index 60c6ee9ec..000000000 --- a/pisa/stages/flux/mceq_barr.py +++ /dev/null @@ -1,521 +0,0 @@ -""" -Stage to implement the inclusive neutrino flux as calculated with MCEq, -and the systematic flux variations based on the Barr scheme. - -It requires spline tables created by the `pisa/scripts/create_barr_sys_tables_mceq.py` -Pre-generated tables can be found at `fridge/analysis/common/data/flux/ - -Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot -""" - -from __future__ import absolute_import, print_function, division - -from bz2 import BZ2File -import collections -import pickle - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile, line_profile -from pisa.utils.numba_tools import WHERE, myjit -from pisa.utils.resources import find_resource - - -class mceq_barr(Stage): - """ - Stage that uses gradients calculated with MCEq to handle flux uncertainties. - This stage calculates flux variations relative to a nominal flux that must - be calculated ahead of time. - - Parameters - ---------- - table_file : pickle file containing pre-generated tables from MCEq - - params : ParamSet - Must exclusively have parameters: .. :: - - delta_index : quantity (dimensionless) - Shift in the spectral index of the neutrino flux. Prior with a mean of 0. - - energy_pivot : quantity (GeV) - The spectral index is shifting around a pivot point - - barr_*_Pi : quantity (dimensionless) - * from a to i - Uncertainty on pi+ production in a region of phase space *, - further defined in Barr 2006 - - pion_ratio : quantity (dimensionless) - The uncertainty on pi- production is assumed to be correlated - to the pi+ production uncertainty, - as the pi+/pi- ratio is measured. Thus the uncertainty on pi- - production is defined by pion_ratio and barr_*_pi - - barr_*_K : quantity (dimensionless) - * from w to z - Uncertainty on K+ production in a region of phase space *, - further defined in Barr 2006 - - barr_*_antiK : quantity (dimensionless) - * from w to z - Uncertainty on K- and K+ production is assumed to be - uncorrelated as the ratio is badly determined. - - Notes - ----- - The nominal flux is calculated ahead of time using MCEq, - then multiplied with a shift in spectral index, and then modifications due - to meson production (barr variables) are added. - - The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) - - one solution for meson and one solution for the antimeson production uncertainty. - - Each solution consists of 8 splines: "numu", "numubar", "nue", and "nuebar" - is the nominal flux. - "dnumu", "dnumubar", "dnue", and "dnuebar" is the gradient of the Barr modification - - """ - - def __init__( - self, - table_file, - include_nutau_flux=False, - use_honda_nominal_flux=True, - **std_kwargs, - ): - - # - # Define parameterisation - # - - # Define the Barr parameters - self.barr_param_names = [ # TODO common code with `create_barr_sys_tables_mceq.py` ? - # pions - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - # kaons - "w", - "x", - "y", - "z", - ] - - # Define signs for Barr params - # + -> meson production - # - -> antimeson production - self.barr_param_signs = ["+", "-"] - - # Atmopshere model params - # TODO - - # Get the overall list of params for which we have gradients stored - # Define a mapping to index values, will be useful later - self.gradient_param_names = [ - n + s for n in self.barr_param_names for s in self.barr_param_signs - ] - self.gradient_param_indices = collections.OrderedDict( - [(n, i) for i, n in enumerate(self.gradient_param_names)] - ) - - # - # Call stage base class constructor - # - - # Define stage parameters - expected_params = ( - # pion - "pion_ratio", - "barr_a_Pi", - "barr_b_Pi", - "barr_c_Pi", - "barr_d_Pi", - "barr_e_Pi", - "barr_f_Pi", - "barr_g_Pi", - "barr_h_Pi", - "barr_i_Pi", - # kaon - "barr_w_K", - "barr_x_K", - "barr_y_K", - "barr_z_K", - "barr_w_antiK", - "barr_x_antiK", - "barr_y_antiK", - "barr_z_antiK", - # CR - "delta_index", - "energy_pivot", - ) - - # store args - self.table_file = table_file - self.include_nutau_flux = include_nutau_flux - self.use_honda_nominal_flux = use_honda_nominal_flux - - # init base class - super(mceq_barr, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - - self.data.representation = self.calc_mode - - # - # Init arrays - # - - # Prepare some array shapes - gradient_params_shape = (len(self.gradient_param_names),) - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', - 'nutaubar_cc', 'nuebar_nc', - 'numubar_nc', 'nutaubar_nc']) - - # Loop over containers - for container in self.data: - - #TODO Toggles for including both nu and nubar flux (required for CPT violating oscillations) - - # Flux container shape : [ N events, N flavors in primary flux ] - num_events = container.size - num_flux_flavs = 3 if self.include_nutau_flux else 2 - flux_container_shape = (num_events, num_flux_flavs) - - # Gradients container shape - gradients_shape = tuple( - list(flux_container_shape) + list(gradient_params_shape) - ) - - # Create arrays that will be populated in the stage - # Note that the flux arrays will be chosen as nu or nubar depending - # on the container (e.g. not simultaneously storing nu and nubar) - # Would rather use multi-dim arrays here but limited by fact that - # numba only supports 1/2D versions of numpy functions - container["nu_flux_nominal"] = np.full( - flux_container_shape, np.NaN, dtype=FTYPE - ) - container["nu_flux"] = np.full(flux_container_shape, np.NaN, dtype=FTYPE) - container["gradients"] = np.full(gradients_shape, np.NaN, dtype=FTYPE) - - # Also create an array container to hold the gradient parameter values - # Only want this once, e.g. not once per container - self.gradient_params = np.empty(gradient_params_shape, dtype=FTYPE) - - # - # Load MCEq splines - # - - # Have splined both nominal fluxes and gradients in flux w.r.t. - # Barr parameters, using MCEQ. - - # Have splines for each Barr parameter, plus +/- versions of each - # Barr parameter corresponding to mesons/antimesons. - - # For a given Barr parameter, an underlying dictionary have the following - # keywords: - # "numu", "numubar", "nue", "nuebar" - # derivatives: "dnumu", "dnumubar", "dnue", dnuebar" - # Units are changed to m^-2 in creates_splines.., rather than cm^2 which - # is the unit of calculation in MCEq - - # Note that doing this all on CPUs, since the splines reside on the CPUs - # The actual `compute_function` computation can be done on GPUs though - - # Load the MCEq splines - spline_file = find_resource(self.table_file) - logging.info("Loading MCEq spline tables from : %s", spline_file) - # Encoding is to support pickle files created with python v2 - self.spline_tables_dict = pickle.load(BZ2File(spline_file), encoding="latin1") - - # Ensure that the user is not loading an incompatible spline - for bp in self.barr_param_names: - bp_p = bp+'+' # meson - bp_m = bp+'-' # antimeson - assert bp_p in self.spline_tables_dict.keys(), ( - "Gradient parameter '%s' missing from table" % bp_p - ) - assert bp_m in self.spline_tables_dict.keys(), ( - "Gradient parameter '%s' missing from table" % bp_m - ) - - - # Loop over containers - for container in self.data: - - # Grab containers here once to save time - # TODO make spline generation script store splines directly in - # terms of energy, not ln(energy) - true_log_energy = np.log(container["true_energy"]) - true_abs_coszen = np.abs(container["true_coszen"]) - nu_flux_nominal = container["nu_flux_nominal"] - gradients = container["gradients"] - nubar = container["nubar"] - - # - # Nominal flux - # - - if not self.use_honda_nominal_flux : - - # Evaluate splines to get nominal flux - # Need to correctly map nu/nubar and flavor to the output arrays - - # Note that nominal flux is stored multiple times (once per Barr parameter) - # Choose an arbitrary one to get the nominal fluxes - arb_gradient_param_key = self.gradient_param_names[0] - - # nue(bar) - nu_flux_nominal[:, 0] = self.spline_tables_dict[arb_gradient_param_key]["nue" if nubar > 0 else "nuebar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # numu(bar) - nu_flux_nominal[:, 1] = self.spline_tables_dict[arb_gradient_param_key]["numu" if nubar > 0 else "numubar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # nutau(bar) - # Currently setting to 0 #TODO include nutau flux (e.g. prompt) in splines - if self.include_nutau_flux : - nu_flux_nominal[:, 2] = self.spline_tables_dict[arb_gradient_param_key]["nutau" if nubar > 0 else "nutaubar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # Tell the smart arrays we've changed the nominal flux values on the host - container.mark_changed("nu_flux_nominal") - - - # - # Flux gradients - # - - # Evaluate splines to get the flux graidents w.r.t the Barr parameter values - # Need to correctly map nu/nubar and flavor to the output arrays - - # Loop over parameters - for ( - gradient_param_name, - gradient_param_idx, - ) in self.gradient_param_indices.items(): - - # nue(bar) - gradients[:, 0, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnue" if nubar > 0 else "dnuebar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # numu(bar) - gradients[:, 1, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnumu" if nubar > 0 else "dnumubar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # nutau(bar) - if self.include_nutau_flux : - gradients[:, 2, gradient_param_idx] = self.spline_tables_dict[gradient_param_name]["dnutau" if nubar > 0 else "dnutaubar"]( - true_abs_coszen, - true_log_energy, - grid=False, - ) - - # Tell the smart arrays we've changed the flux gradient values on the host - container.mark_changed("gradients") - - # don't forget to un-link everything again - self.data.unlink_containers() - - def antipion_production(self, barr_var, pion_ratio): - """ - Combine pi+ barr param and pi+/pi- ratio to get pi- barr param - Definitions: - pion ratio = (1 + barr_var+) / (1 + barr_var-) - delta pion ratio = pion ratio - 1 (e.g. deviation from nominal ratio value, which is 1) - Note that the `pion_ratio` param really represents the "delta pion ratio", so is defined - similarly to the barr variables themselves . - """ - return ((1 + barr_var) / (1 + pion_ratio)) - 1 - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', - 'nutaubar_cc', 'nuebar_nc', - 'numubar_nc', 'nutaubar_nc']) - - # - # Get params - # - - # Spectral index (and required energy pivot) - delta_index = self.params.delta_index.value.m_as("dimensionless") - energy_pivot = self.params.energy_pivot.value.m_as("GeV") - - # Grab the pion ratio - pion_ratio = self.params.pion_ratio.value.m_as("dimensionless") - - # Map the user parameters into the Barr +/- params - # pi- production rates is restricted by the pi-ratio, just as in arXiv:0611266 - # TODO might want dedicated priors for pi- params (but without corresponding free params) - gradient_params_mapping = collections.OrderedDict() - gradient_params_mapping["a+"] = self.params.barr_a_Pi.value.m_as("dimensionless") - gradient_params_mapping["b+"] = self.params.barr_b_Pi.value.m_as("dimensionless") - gradient_params_mapping["c+"] = self.params.barr_c_Pi.value.m_as("dimensionless") - gradient_params_mapping["d+"] = self.params.barr_d_Pi.value.m_as("dimensionless") - gradient_params_mapping["e+"] = self.params.barr_e_Pi.value.m_as("dimensionless") - gradient_params_mapping["f+"] = self.params.barr_f_Pi.value.m_as("dimensionless") - gradient_params_mapping["g+"] = self.params.barr_g_Pi.value.m_as("dimensionless") - gradient_params_mapping["h+"] = self.params.barr_h_Pi.value.m_as("dimensionless") - gradient_params_mapping["i+"] = self.params.barr_i_Pi.value.m_as("dimensionless") - for k in list(gradient_params_mapping.keys()): - gradient_params_mapping[k.replace("+", "-")] = self.antipion_production( - gradient_params_mapping[k], pion_ratio - ) - - # kaons - # as the kaon ratio is unknown, K- production is not restricted - gradient_params_mapping["w+"] = self.params.barr_w_K.value.m_as("dimensionless") - gradient_params_mapping["w-"] = self.params.barr_w_antiK.value.m_as("dimensionless") - gradient_params_mapping["x+"] = self.params.barr_x_K.value.m_as("dimensionless") - gradient_params_mapping["x-"] = self.params.barr_x_antiK.value.m_as("dimensionless") - gradient_params_mapping["y+"] = self.params.barr_y_K.value.m_as("dimensionless") - gradient_params_mapping["y-"] = self.params.barr_y_antiK.value.m_as("dimensionless") - gradient_params_mapping["z+"] = self.params.barr_z_K.value.m_as("dimensionless") - gradient_params_mapping["z-"] = self.params.barr_z_antiK.value.m_as("dimensionless") - - # Populate array Barr param array - for ( - gradient_param_name, - gradient_param_idx, - ) in self.gradient_param_indices.items(): - self.gradient_params[gradient_param_idx] = gradient_params_mapping[ - gradient_param_name - ] - - # - # Loop over containers - # - - for container in self.data: - - # - # Apply the systematics to the flux - # - - # Figure out which key to use for the nominal flux - if self.use_honda_nominal_flux : - if container["nubar"] > 0: nominal_flux_key = "nu_flux_nominal" - elif container["nubar"] < 0: nominal_flux_key = "nubar_flux_nominal" - else : - nominal_flux_key = "nu_flux_nominal" - - apply_sys_loop( - container["true_energy"], - container["true_coszen"], - FTYPE(delta_index), - FTYPE(energy_pivot), - container[nominal_flux_key], - container["gradients"], - self.gradient_params, - out=container["nu_flux"], - ) - container.mark_changed("nu_flux") - - # Check for negative results from spline - # TODO - add more spline error/misusage handling - # e.g. if events have energy outside spline range throw ERROR - negative_mask = container["nu_flux"] < 0 - if np.any(negative_mask): - container["nu_flux"][negative_mask] = 0.0 - - container.mark_changed("nu_flux") - - # don't forget to un-link everything again - self.data.unlink_containers() - -@myjit -def spectral_index_scale(true_energy, energy_pivot, delta_index): - """ - Calculate spectral index scale. - Adjusts the weights for events in an energy dependent way according to a - shift in spectral index, applied about a user-defined energy pivot. - """ - return np.power((true_energy / energy_pivot), delta_index) - -@myjit -def apply_sys_loop( - true_energy, - true_coszen, - delta_index, - energy_pivot, - nu_flux_nominal, - gradients, - gradient_params, - out, -): - """ - Calculation: - 1) Start from nominal flux - 2) Apply spectral index shift - 3) Add contributions from MCEq-computed gradients - - Array dimensions : - true_energy : [A] - true_coszen : [A] - nubar : scalar integer - delta_index : scalar float - energy_pivot : scalar float - nu_flux_nominal : [A,B] - gradients : [A,B,C] - gradient_params : [C] - out : [A,B] (sys flux) - where: - A = num events - B = num flavors in flux (=3, e.g. e, mu, tau) - C = num gradients - """ - - n_evts, n_flavs = nu_flux_nominal.shape - - for event in range(n_evts): - spec_scale = spectral_index_scale(true_energy[event], energy_pivot, delta_index) - for flav in range(n_flavs): - out[event, flav] = nu_flux_nominal[event, flav] * spec_scale - for i in range(len(gradient_params)): - out[event, flav] += gradients[event, flav, i] * gradient_params[i] \ No newline at end of file diff --git a/pisa/stages/flux/mceq_barr_red.py b/pisa/stages/flux/mceq_barr_red.py deleted file mode 100644 index 190290939..000000000 --- a/pisa/stages/flux/mceq_barr_red.py +++ /dev/null @@ -1,467 +0,0 @@ -""" -Stage to implement the inclusive neutrino flux as calculated with MCEq, -and the systematic flux variations based on the Barr scheme. - -It requires spline tables created by the `pisa/scripts/create_barr_sys_tables_mceq.py` -Pre-generated tables can be found at `fridge/analysis/common/data/flux/ - -Tom Stuttard, Ida Storehaug, Philipp Eller, Summer Blot -""" - -from __future__ import absolute_import, print_function, division - -from bz2 import BZ2File -import collections -import pickle - -import numpy as np -from numba import njit, prange # trivially parallelize for-loops - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile, line_profile -from pisa.utils.numba_tools import WHERE, myjit -from pisa.utils.resources import find_resource - - -class mceq_barr_red(Stage): - """ - Stage that uses gradients calculated with MCEq to handle flux uncertainties. - This stage calculates flux variations relative to a nominal flux that must - be calculated ahead of time. Parameters to control pion and kaon production - are reduced from the full Barr scheme, by forcing many of them to scale in a - fully correlated way. - - Parameters - ---------- - table_file : pickle file containing pre-generated tables from MCEq - - params : ParamSet - Must exclusively have parameters: .. :: - - delta_index : quantity (dimensionless) - Shift in the spectral index of the neutrino flux. Prior with a mean of 0. - - energy_pivot : quantity (GeV) - The spectral index is shifting around a pivot point - - barr_*_Pi : quantity (dimensionless) - * from a to i - Uncertainty on pi+ production in a region of phase space *, - further defined in Barr 2006 - - pion_ratio : quantity (dimensionless) - The uncertainty on pi- production is assumed to be correlated - to the pi+ production uncertainty, - as the pi+/pi- ratio is measured. Thus the uncertainty on pi- - production is defined by pion_ratio and barr_*_pi - - barr_*_K : quantity (dimensionless) - * from w to z - Uncertainty on K+ production in a region of phase space *, - further defined in Barr 2006 - - barr_*_antiK : quantity (dimensionless) - * from w to z - Uncertainty on K- and K+ production is assumed to be - uncorrelated as the ratio is badly determined. - - Notes - ----- - The nominal flux is calculated ahead of time using the honda_ip stage, - then multiplied with a shift in spectral index, and then modifications due - to meson production (barr variables) are added. - - The MCEq-table has 2 solutions of the cascade equation per Barr variable (12) - - one solution for meson and one solution for the antimeson production uncertainty. - - Each solution consists of 4 splines: "dnumu", "dnumubar", "dnue", and - "dnuebar". These are the gradients that govern how the neutrino fluxes vary - depending on modifications to the Barr params. - - """ - - def __init__( - self, - table_file, - **std_kwargs, - ): - # - # Define parameterisation - # - - # Define the Barr parameters - # TODO Barr block definition could change - need to make this more flexible - # Perhaps let user define the blocks, and then table is generated on the - # fly as a first step? Could take up to 1 hour to produce table though... - self.barr_param_names = [ - # pions - "af", - "g", - "h", - "i", - # kaons - "w", - "x", - "y", - "z", - ] - - # Define signs for Barr params - # + -> meson production - # - -> antimeson production - self.barr_param_signs = ["+", "-"] - - # Atmopshere model params - # TODO - - # Get the overall list of params for which we have gradients stored - # Define a mapping to index values, will be useful later - self.gradient_param_names = [ - n + s for n in self.barr_param_names for s in self.barr_param_signs - ] - self.gradient_param_indices = collections.OrderedDict( - [(n, i) for i, n in enumerate(self.gradient_param_names)] - ) - - # - # Call stage base class constructor - # - - # Define stage parameters - expected_params = ( - # pion - "pion_ratio", - "barr_af_Pi", - "barr_g_Pi", - "barr_h_Pi", - "barr_i_Pi", - # kaon - "barr_w_K", - "barr_x_K", - "barr_y_K", - "barr_z_K", - "barr_w_antiK", - "barr_x_antiK", - "barr_y_antiK", - "barr_z_antiK", - # CR - "delta_index", - "energy_pivot", - ) - - # Using Honda for nominal flux. Keys should already exist - # what are keys added or altered in the calculation used during apply - # what keys are added or altered for the outputs during apply - - # store args - self.table_file = table_file - - # init base class - super(mceq_barr_red, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - - self.data.representation = self.calc_mode - - # - # Init arrays - # - - # Prepare some array shapes - gradient_params_shape = (len(self.gradient_param_names),) - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', - 'nutaubar_cc', 'nuebar_nc', - 'numubar_nc', 'nutaubar_nc']) - - # Loop over containers - for container in self.data: - - # Define shapes for containers - - # TODO maybe include toggles for nutau (only needed if prompt - # considered) and for nu+nubar (only needed if nu->nubar - # oscillations included) for better speed/memory performance - - # [ N events, 2 flavors in flux, nu vs nubar ] - # SDB - reduced flavours to 2 (nue, numu) since nutau flux not - # stored in MCEq splines - flux_container_shape = (container.size, 2) - gradients_shape = tuple( - list(flux_container_shape) + list(gradient_params_shape) - ) - - container["nu_flux"] = np.full(flux_container_shape, np.NaN, dtype=FTYPE) - container["gradients"] = np.full(gradients_shape, np.NaN, dtype=FTYPE) - - # Also create an array container to hold the gradient parameter values - # Only want this once, e.g. not once per container - self.gradient_params = np.empty(gradient_params_shape, dtype=FTYPE) - - # - # Load MCEq splines - # - - # Have splines for each Barr parameter, plus +/- versions of each - # Barr parameter corresponding to mesons/antimesons. - - # For a given Barr parameter, an underlying dictionary have the following - # keywords: "dnumu", "dnumubar", "dnue", dnuebar" - - # Units are changed to m^-2 in creates_splines.., rather than cm^2 which - # is the unit of calculation in MCEq!!!! - - # Note that doing this all on CPUs, since the splines reside on the CPUs - # The actual `compute_function` computation can be done on GPUs though - - # Load the MCEq splines - spline_file = find_resource(self.table_file) - logging.info("Loading MCEq spline tables from : %s", spline_file) - # Encoding is to support pickle files created with python v2 - self.spline_tables_dict = pickle.load(BZ2File(spline_file), encoding="latin1") - - # Ensure that the user is not loading an incompatible spline - for bp in self.barr_param_names: - bp_p = bp+'+' # meson - bp_m = bp+'-' # antimeson - assert bp_p in self.spline_tables_dict.keys(), ( - "Gradient parameter '%s' missing from table" % bp_p - ) - assert bp_m in self.spline_tables_dict.keys(), ( - "Gradient parameter '%s' missing from table" % bp_m - ) - - - # Loop over containers - for container in self.data: - - # Grab containers here once to save time - # TODO make spline generation script store splines directly in - # terms of energy, not ln(energy) - true_log_energy = np.log(container["true_energy"]) - true_abs_coszen = np.abs(container["true_coszen"]) - gradients = container["gradients"] - nubar = container["nubar"] - - # - # Flux gradients - # - - # Evaluate splines to get the flux graidents w.r.t the Barr parameter values - # Need to correctly map nu/nubar and flavor to the output arrays - - # Loop over parameters - for ( - gradient_param_name, - gradient_param_idx, - ) in self.gradient_param_indices.items(): - - # nue(bar) - self._eval_spline( - true_log_energy=true_log_energy, - true_abs_coszen=true_abs_coszen, - spline=self.spline_tables_dict[gradient_param_name][ - "dnue" if nubar > 0 else "dnuebar" - ], - out=gradients[:, 0, gradient_param_idx], - ) - - # numu(bar) - self._eval_spline( - true_log_energy=true_log_energy, - true_abs_coszen=true_abs_coszen, - spline=self.spline_tables_dict[gradient_param_name][ - "dnumu" if nubar > 0 else "dnumubar" - ], - out=gradients[:, 1, gradient_param_idx], - ) - - # nutau(bar) - # TODO include nutau flux in splines - # SDB - there is no nutau flux in splines - ## gradients[:, 2, gradient_param_idx].fill(0.0) - - # Tell the smart arrays we've changed the flux gradient values on the host - container.mark_changed("gradients") - - # don't forget to un-link everything again - self.data.unlink_containers() - - def _eval_spline(self, true_log_energy, true_abs_coszen, spline, out): - """ - Evaluate the spline for the full arrays of [ ln(energy), abs(coszen) ] values - """ - - # Evalate the spine - result = spline(true_abs_coszen, true_log_energy, grid=False) - - # Copy to output array - # TODO Can I directly write to the original array, will be faster - np.copyto(src=result, dst=out) - - def antipion_production(self, barr_var, pion_ratio): - """ - Combine pi+ param and pi+/pi- ratio to get pi- param - """ - return ((1 + barr_var) / (1 + pion_ratio)) - 1 - - @profile - def compute_function(self): - - self.data.representation = self.calc_mode - - if self.data.is_map: - # speed up calculation by adding links - # as nominal flux doesn't depend on the (outgoing) flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', - 'nutaubar_cc', 'nuebar_nc', - 'numubar_nc', 'nutaubar_nc']) - - # - # Get params - # - - # Spectral index (and required energy pivot) - delta_index = self.params.delta_index.value.m_as("dimensionless") - energy_pivot = self.params.energy_pivot.value.m_as("GeV") - - # Grab the pion ratio - pion_ratio = self.params.pion_ratio.value.m_as("dimensionless") - - # Map the user parameters into the Barr +/- params - # pi- production rates is restricted by the pi-ratio, just as in arXiv:0611266 - # TODO might want dedicated priors for pi- params (but without corresponding free params) - gradient_params_mapping = collections.OrderedDict() - gradient_params_mapping["af+"] = self.params.barr_af_Pi.value.m_as("dimensionless") - gradient_params_mapping["g+"] = self.params.barr_g_Pi.value.m_as("dimensionless") - gradient_params_mapping["h+"] = self.params.barr_h_Pi.value.m_as("dimensionless") - gradient_params_mapping["i+"] = self.params.barr_i_Pi.value.m_as("dimensionless") - for k in list(gradient_params_mapping.keys()): - gradient_params_mapping[k.replace("+", "-")] = self.antipion_production( - gradient_params_mapping[k], pion_ratio - ) - - # kaons - # as the kaon ratio is unknown, K- production is not restricted - gradient_params_mapping["w+"] = self.params.barr_w_K.value.m_as("dimensionless") - gradient_params_mapping["w-"] = self.params.barr_w_antiK.value.m_as("dimensionless") - gradient_params_mapping["x+"] = self.params.barr_x_K.value.m_as("dimensionless") - gradient_params_mapping["x-"] = self.params.barr_x_antiK.value.m_as("dimensionless") - gradient_params_mapping["y+"] = self.params.barr_y_K.value.m_as("dimensionless") - gradient_params_mapping["y-"] = self.params.barr_y_antiK.value.m_as("dimensionless") - gradient_params_mapping["z+"] = self.params.barr_z_K.value.m_as("dimensionless") - gradient_params_mapping["z-"] = self.params.barr_z_antiK.value.m_as("dimensionless") - - # Populate array Barr param array - for ( - gradient_param_name, - gradient_param_idx, - ) in self.gradient_param_indices.items(): - self.gradient_params[gradient_param_idx] = gradient_params_mapping[ - gradient_param_name - ] - - # - # Loop over containers - # - - for container in self.data: - - # - # Apply the systematics to the flux - # - - nubar = container["nubar"] - if nubar > 0: flux_key = "nu_flux_nominal" - elif nubar < 0: flux_key = "nubar_flux_nominal" - - apply_sys_loop( - container["true_energy"], - container["true_coszen"], - FTYPE(delta_index), - FTYPE(energy_pivot), - container[flux_key], - container["gradients"], - self.gradient_params, - out=container["nu_flux"], - ) - container.mark_changed("nu_flux") - - # Check for negative results from spline - # TODO - add more spline error/misusage handling - # e.g. if events have energy outside spline range throw ERROR - negative_mask = container["nu_flux"] < 0 - if np.any(negative_mask): - container["nu_flux"][negative_mask] = 0.0 - - container.mark_changed("nu_flux") - - # don't forget to un-link everything again - self.data.unlink_containers() - -@njit -def spectral_index_scale(true_energy, energy_pivot, delta_index): - """ - Calculate spectral index scale. - Adjusts the weights for events in an energy dependent way according to a - shift in spectral index, applied about a user-defined energy pivot. - """ - return np.power((true_energy / energy_pivot), delta_index) - -@njit(parallel=True if TARGET == "parallel" else False) -def apply_sys_loop( - true_energy, - true_coszen, - delta_index, - energy_pivot, - nu_flux_nominal, - gradients, - gradient_params, - out, -): - """ - Calculation: - 1) Start from nominal flux - 2) Apply spectral index shift - 3) Add contributions from MCEq-computed gradients - - Array dimensions : - true_energy : [A] - true_coszen : [A] - nubar : scalar integer - delta_index : scalar float - energy_pivot : scalar float - nu_flux_nominal : [A,B] - gradients : [A,B,C] - gradient_params : [C] - out : [A,B] (sys flux) - where: - A = num events - B = num flavors in flux (=3, e.g. e, mu, tau) - C = num gradients - Not that first dimension (of length A) is vectorized out - """ - - n_evts, n_flavs = nu_flux_nominal.shape - - for event in prange(n_evts): - spec_scale = spectral_index_scale(true_energy[event], energy_pivot, delta_index) - for flav in range(n_flavs): - out[event, flav] = nu_flux_nominal[event, flav] * spec_scale - for i in range(len(gradient_params)): - out[event, flav] += gradients[event, flav, i] * gradient_params[i] diff --git a/pisa/stages/likelihood/__init__.py b/pisa/stages/likelihood/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/likelihood/generalized_llh_params.py b/pisa/stages/likelihood/generalized_llh_params.py deleted file mode 100644 index 53049aa91..000000000 --- a/pisa/stages/likelihood/generalized_llh_params.py +++ /dev/null @@ -1,242 +0,0 @@ -''' -Pisa stage that pre-computes some quantities -needed for the generalized likelihood, and applies -small adjustments to the weight distributions in cases -where the number of mc event per bin is low. - -The code does the following, in order: - -- Calculate the number of MC events per bin once, - at the setup time - -- Calculate, at setup time, a mean adjustment, based - on the average number of MC events per bin. If the - latter is less than one, adjustment is applied, else - that quantity is equal to zero - -- Populate ANY empty mc bin with a pseudo-weight with a - value equal to the maximal weight value of a given - dataset. This correspond to the empty bin strategy #2 - described in (1902.08831). Note that empty bin strategy #1 - can still be applied later on, if one provides the bin - indices where no datasets have any MC events. This step - runs in the apply function because the value of the pseudo - weight will change during minimization. - - -- Once this is done, computes the alpha and beta - parameters that are fed into the likelihood - -The stage appends / modifies the following: - - weights: changes the individual weight distribution - based on the empty bin filling outcome - - llh_alphas: Map (alpha parameters of the generalized likelihood) - - llh_betas: Map (beta parameters of the generalized likelihood) - - n_mc_events: Map (number of MC events in each bin - - new_sum: Map (Sum of the weights in each bin (ie MC expectation), - corrected for the empty bin filling and the mean - adjustment -''' -from __future__ import absolute_import, print_function, division - -__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)" - -import numpy as np -import copy - -from pisa import FTYPE -from pisa.core.stage import Stage - - -# uncomment this to debug stuff -from pisa.utils.log import logging -from pisa.utils.profiler import profile, line_profile -from pisa.utils.log import set_verbosity, Levels -#set_verbosity(Levels.DEBUG) - -PSEUDO_WEIGHT = 0.001 - - -class generalized_llh_params(Stage): - """ - Pisa stage that applies mean adjustment and - empty bin filling. Also computes alphas and betas - that are needed by the generalized poisson likelihood - - """ - - # this is the constructor with default arguments - def __init__(self, - **std_kwargs, - ): - - # init base class - super(generalized_llh_params, self).__init__(expected_params=(), - **std_kwargs, - ) - - def setup_function(self): - """ - Declare empty containers, determine the number - of MC events in each bin of each dataset and - compute mean adjustment - """ - - N_bins = self.apply_mode.tot_num_bins - - self.data.representation = self.apply_mode - - for container in self.data: - - # - # Generate a new container called bin_indices - # - container['llh_alphas'] = np.empty((container.size), dtype=FTYPE) - container['llh_betas'] = np.empty((container.size), dtype=FTYPE) - container['n_mc_events'] = np.empty((container.size), dtype=FTYPE) - container['old_sum'] = np.empty((container.size), dtype=FTYPE) - - # - # Step 1: assert the number of MC events in each bin, - # for each container - self.data.representation = 'events' - nevents_sim = np.zeros(N_bins) - - for index in range(N_bins): - index_mask = container['bin_{}_mask'.format(index)] - if 'kfold_mask' in container: - index_mask*=container['kfold_mask'] - # Number of MC events in each bin - nevents_sim[index] = np.sum(index_mask) - - self.data.representation = self.apply_mode - np.copyto(src=nevents_sim, - dst=container["n_mc_events"]) - container.mark_changed('n_mc_events') - - # - # Step 2: Calculate the mean adjustment for each container - # - mean_number_of_mc_events = np.mean(nevents_sim) - if mean_number_of_mc_events < 1.0: - mean_adjustment = -(1.0-mean_number_of_mc_events) + 1.e-3 - else: - mean_adjustment = 0.0 - container.set_aux_data(key='mean_adjustment', data=mean_adjustment) - - - # - # Add hypersurface containers if they don't exist - # (to avoid errors in get_outputs, if we want ) - # these to be returned when you call get_output - # - if 'hs_scales' not in container.keys(): - container['hs_scales'] = np.empty((container.size), dtype=FTYPE) - container['errors'] = np.empty((container.size), dtype=FTYPE) - - - def apply_function(self): - ''' - Computes the main inputs to the generalized likelihood - function on every iteration of the minimizer - - ''' - N_bins = self.apply_mode.tot_num_bins - - # - # Step 4: Apply the empty bin strategy and mean adjustment - # Compute the alphas and betas that go into the - # poisson-gamma mixture of the llh - # - for container in self.data: - - self.data.representation = 'events' - - # - # Step 3: Find the maximum weight accross all events - # of each MC set. The value of that weight defines - # the value of the pseudo-weight that will be included - # in empty bins - - # for this part we are in events mode - # Find the minimum weight of an entire MC set - pseudo_weight = 0.001 - container.set_aux_data(key='pseudo_weight', data=pseudo_weight) - - old_weight_sum = np.zeros(N_bins) - new_weight_sum = np.zeros(N_bins) - alphas_vector = np.zeros(N_bins) - betas_vector = np.zeros(N_bins) - - # - # Load the pseudo_weight and mean displacement values - # - mean_adjustment = container.scalar_data['mean_adjustment'] - pseudo_weight = container.scalar_data['pseudo_weight'] - - for index in range(N_bins): - - index_mask = container['bin_{}_mask'.format(index)] - if 'kfold_mask' in container: - index_mask*=container['kfold_mask'] - current_weights = container['weights'][index_mask] - - old_weight_sum[index] += np.sum(current_weights) - - assert np.all(current_weights>=0),'SOME WEIGHTS BELOW ZERO' - n_weights = current_weights.shape[0] - - # If no weights and other datasets have some, include a pseudo weight - # Bins with no mc event in all set will be ignore in the likelihood later - # - # make the whole bin treatment here - if n_weights <= 0: - current_weights = np.array([pseudo_weight]) - n_weights = 1 - - # write the new weight distribution down - new_weight_sum[index] += np.sum(current_weights) - - # Mean of the current weight distribution - mean_w = np.mean(current_weights) - - # variance of the current weight - var_of_weights = ((current_weights-mean_w)**2).sum()/(float(n_weights)) - - # Variance of the poisson-gamma distributed variable - var_z = (var_of_weights + mean_w**2) - - if var_z < 0: - logging.warn('warning: var_z is less than zero') - logging.warn(container.name, var_z) - raise Exception - - # if the weights presents have a mean of zero, - # default to alphas values of PSEUDO_WEIGHT and - # of beta = 1.0, which mimicks a narrow PDF - # close to 0.0 - beta = np.divide(mean_w, var_z, out=np.ones(1), where=var_z!=0) - trad_alpha = np.divide(mean_w**2, var_z, out=np.ones(1)*PSEUDO_WEIGHT, where=var_z!=0) - alpha = (n_weights + mean_adjustment)*trad_alpha - - alphas_vector[index] = alpha - betas_vector[index] = beta - - # Calculate alphas and betas - self.data.representation = self.apply_mode - np.copyto(src=alphas_vector, dst=container['llh_alphas']) - np.copyto(src=betas_vector, dst=container['llh_betas']) - np.copyto(src=new_weight_sum, dst=container['weights']) - np.copyto(src=old_weight_sum, dst=container['old_sum']) - container.mark_changed('llh_alphas') - container.mark_changed('llh_betas') - container.mark_changed('old_sum') - container.mark_changed('weights') - - - diff --git a/pisa/stages/osc/__init__.py b/pisa/stages/osc/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/osc/decay_params.py b/pisa/stages/osc/decay_params.py deleted file mode 100644 index 170f292c3..000000000 --- a/pisa/stages/osc/decay_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# author: Anil Kumar (anil.kumar@desy.de) -# date: 2023 - -""" -DecayParams: Characterize neutrino decay parameters - (alpha3) -""" - -from __future__ import division - -import numpy as np - -from pisa import FTYPE, CTYPE - -__all__ = ['DecayParams'] - -class DecayParams(object): - """ - Holds neutrino decay parameters, i.e., alpha - - Parameters - ---------- - decay_alpha3: float - expected to be given in [eV^2] - - - Attributes - ---------- - decay_alpha3 : float - Cf. parameters - decay_matrix : 3d complex array - - """ - def __init__(self): - - self._decay_alpha3 = 0. - self._decay_matrix = np.zeros((3, 3), dtype=CTYPE) - - # --- theta12 --- - @property - def decay_alpha3(self): - """alpha3""" - return self._decay_alpha3 - - @decay_alpha3.setter - def decay_alpha3(self, value): - self._decay_alpha3 = value - - @property - def decay_matrix(self): - """Neutrino decay matrix""" - decay_mat = np.zeros((3, 3), dtype=CTYPE) - - decay_mat[2, 2] = 0 -self.decay_alpha3*1j - - return decay_mat - -def test_decay_params(): - """ - # TODO: implement me! - """ - pass - - -if __name__=='__main__': - from pisa import TARGET - from pisa.utils.log import set_verbosity, logging - assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" - set_verbosity(1) - test_decay_params() \ No newline at end of file diff --git a/pisa/stages/osc/decoherence.py b/pisa/stages/osc/decoherence.py deleted file mode 100644 index 2d4951b28..000000000 --- a/pisa/stages/osc/decoherence.py +++ /dev/null @@ -1,471 +0,0 @@ -''' -Implementing an environmentally-induced decoherence model for neutrino oscillations -Based on reference [1], which uses an energy-indepedence deocherence matrix in vacuum - -References: - [1] arxiv:1702.04738 -''' - - - -from __future__ import absolute_import, print_function, division - -import math -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.stages.osc.osc_params import OscParams -from pisa.stages.osc.layers import Layers -from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import fill_probs -from pisa.utils.numba_tools import WHERE -from pisa.utils.resources import find_resource -from pisa import ureg - - -__all__ = ['DecoherenceParams', 'calc_decoherence_probs', "decoherence"] - -__author__ = 'T. Stuttard, M. Jensen' - - -class DecoherenceParams(OscParams): #TODO Start using osc_params instead... - ''' - Container for decoherence oscillation params - This includes standard oscillation params plus additional 'Gamma' terms parameterising decoherence - gamma21,31,32 params have units of energy - ''' - - def __init__(self, deltam21, deltam31, theta12, theta13, theta23, deltacp, gamma21, gamma31, gamma32): - - # Call base class constructor - super().__init__() - - # Store args - # Note that keeping them as quantities here - self.dm21 = deltam21 - self.dm31 = deltam31 - self.theta12 = theta12 - self.theta13 = theta13 - self.theta23 = theta23 - self.deltacp = deltacp - self.gamma21 = gamma21 - self.gamma31 = gamma31 - self.gamma32 = gamma32 - - # Get deltam32 (this is what is used in [1]) - self.dm32 = self.dm31 - self.dm21 - - -def calc_decoherence_probs(decoh_params, flav, energy, baseline, prob_e, prob_mu, prob_tau, two_flavor=False): - ''' - Oscillation probability calculator function, with decoherence included - - Parameters - ---------- - decoh_params : - DecoherenceParams instance - - flav : - str : Neutrino flavor - - energy : - Neutrino true energy values as float(s), either a single value or an array - If no units attached, must be [GeV] - - baseline : - Neutrino true propagation distance values as float(s), either a single value or an array - If no units attached, must be [km] - - prob_e : - Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a nue - - prob_mu : - Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a numu - - prob_tau : - Array of floats of same dimensions as `energy` and `baseline`. Will be filled with probabilities to oscillate to a nutau - - two_flavor : - bool : Flag indicating whether a two- or 3-flavor model should be used - ''' - - # Electron neutrino case - # For nu_e case, in this approiximation we are essential neglecting nu_e oscillations - # If a particle starts as a nu_e, it stays as a nu_e - if flav.startswith("nue"): - prob_e.fill(1.) - prob_mu.fill(0.) - - # Muon neutrino case - # For nu_mu case, in this approximation there is 0. probability of becoming a nu_e - # Use numu disappearance calculation to get numu/tau probs - elif flav.startswith("numu"): - prob_e.fill(0.) - numu_disappearance_func = _calc_numu_disappearance_prob_2flav if two_flavor else _calc_numu_disappearance_prob_3flav - numu_survival_prob = 1. - numu_disappearance_func( decoh_params=decoh_params, E=energy, L=baseline ) - np.copyto(src=numu_survival_prob,dst=prob_mu) #TODO avoid this wasted data copy - - else: - raise ValueError( "Input flavor '%s' not supported" % flav) - - # Assume unitarity - np.copyto(src=1.-prob_e-prob_mu,dst=prob_tau) - - -def _calc_numu_disappearance_prob_2flav(decoh_params,E,L): - """ - Calculate numu disppearance in 2-flavor model - User should no call this directly, instead use `calc_decoherence_probs` - Define two-flavor decoherence approximation according to Eqn 2 from [1] - - Parameters - ---------- - decoh_params : - DecoherenceParams instance - - E : - Neutrino true energy values as float(s), either a single value or an array - If no units attached, must be [GeV] - - L : - Neutrino true propagation distance values as float(s), either a single value or an array - If no units attached, must be [km] - """ - - # This line is a standard oscillations (no decoherence) 2 flavour approximation, can use for debugging - #return np.sin(2.*decoh_params.theta23.m_as("rad"))**2 * np.square(np.sin(1.27*decoh_params.dm32.m_as("eV**2")*L/E)) - - # Assume units if none provided for main input arrays - # Would prefer to get units but is not always the case - E = E if isinstance(E,ureg.Quantity) else E * ureg["GeV"] - L = L if isinstance(L,ureg.Quantity) else L * ureg["km"] - - # Calculate normalisation term - norm_term = 0.5 * ( np.sin( 2. * decoh_params.theta23.m_as("rad") )**2 ) - - # Calculate decoherence term - decoh_term = np.exp( -decoh_params.gamma32.m_as("eV") * ( L.m_as("m")/1.97e-7 ) ) #Convert L from [m] to natural units - - # Calculate oscillation term - osc_term = np.cos( ( 2. * 1.27 * decoh_params.dm32.m_as("eV**2") * L.m_as("km") ) / ( E.m_as("GeV") ) ) - - return norm_term * ( 1. - (decoh_term*osc_term) ) - - -def _update_pmns_matrix(theta12, theta13, theta23): - """ - Helper function used by _calc_numu_disappearance_prob_3flav - Updates the PMNS matrix and its complex conjugate. - Must be called by the class each time one of the PMNS matrix parameters are changed. - """ - - # TODO Mikkel needs to reference code he used as inspiration here - - c12 = math.cos( theta12.m_as("rad") ) - c13 = math.cos( theta13.m_as("rad") ) - c23 = math.cos( theta23.m_as("rad") ) - s12 = math.sin( theta12.m_as("rad") ) - s13 = math.sin( theta13.m_as("rad") ) - s23 = math.sin( theta23.m_as("rad") ) - eid = 0.0 # e^( i * delta_cp) - emid = 0.0 # e^(-i * delta_cp) - - matrix = np.zeros((3,3)) - anti_matrix = np.zeros((3,3)) - - matrix[0,0] = c12 * c13 - matrix[0,1] = s12 * c13 - matrix[0,2] = s13 * emid - - matrix[1,0] = (0. - s12*c23 ) - ( c12*s23*s13*eid ) - matrix[1,1] = ( c12*c23 ) - ( s12*s23*s13*eid ) - matrix[1,2] = s23*c13 - - matrix[2,0] = ( s12*s23 ) - ( c12*c23*s13*eid) - matrix[2,1] = ( 0. - c12*s23 ) - ( s12*c23*s13*eid ) - matrix[2,2] = c23*c13 - - anti_matrix = matrix.conjugate() - - return matrix, anti_matrix - - -def _calc_numu_disappearance_prob_3flav(decoh_params, E, L): - """ - Calculate numu disppearance in 3-flavor model - - User should no call this directly, instead use `calc_decoherence_probs` - - Define three-flavor decoherence approximation according to the equation that is not numbered but can be - found between equations 2 and 3 in [1],with the notable difference that we are using the vacuum case - (e.g. not substituting in the effeective matter values for parameters) - - Parameters - ---------- - decoh_params : - DecoherenceParams instance - - E : - Neutrino true energy values as float(s), either a single value or an array - If no units attached, must be [GeV] - - L : - Neutrino true propagation distance values as float(s), either a single value or an array - If no units attached, must be [km] - """ - E = E if isinstance(E,ureg.Quantity) else E * ureg["GeV"] - L = L if isinstance(L,ureg.Quantity) else L * ureg["km"] - - # Get PMNS matrix - U,_ = _update_pmns_matrix(decoh_params.theta12, decoh_params.theta13, decoh_params.theta23) - - # Decoherence matrix - Gamma = np.zeros([3,3]) - Gamma[1][0] = decoh_params.gamma21.m_as("GeV") - Gamma[2][0] = decoh_params.gamma31.m_as("GeV") - Gamma[2][1] = decoh_params.gamma32.m_as("GeV") - - # Mass splitting matrix - delta_jk = np.zeros([3,3]) - delta_jk[1][0] = decoh_params.dm21.m_as("eV**2") - delta_jk[2][0] = decoh_params.dm31.m_as("eV**2") - delta_jk[2][1] = decoh_params.dm32.m_as("eV**2") - - prob_dec = np.zeros(np.shape(E)) - - for i_j in range(3): - for i_k in range(3): - if i_j > i_k: - prob_dec += abs(U[2][i_j])**2 * abs(U[2][i_k])**2 * (1.0 - np.exp( - Gamma[i_j][i_k] * L.m_as("km") * 5.07e+18) * np.cos(delta_jk[i_j][i_k] * 1.0e-18 / (2.0 * E.m_as("GeV")) * L.m_as("km") * 5.07e+18)) - prob_array = 2.0 * prob_dec.real - - return prob_array - - - - -class decoherence(Stage): - """ - PISA Pi stage representing oscillations in the presence of decoherence - - Parameters - ---------- - params - Expected contents of `params` ParamSet: .. :: - - detector_depth : float - earth_model : PREM file path - prop_height : quantity (dimensionless) - YeI : quantity (dimensionless) - YeO : quantity (dimensionless) - YeM : quantity (dimensionless) - theta12 : quantity (angle) - theta13 : quantity (angle) - theta23 : quantity (angle) - deltam21 : quantity (mass^2) - deltam31 : quantity (mass^2) - deltacp : quantity (angle) - gamma12 : quantity (energy) - gamma13 : quantity (energy) - gamma23 : quantity (energy) - - """ - def __init__(self, - **std_kwargs, - ): - - expected_params = ('detector_depth', - 'earth_model', - 'prop_height', - 'YeI', - 'YeO', - 'YeM', - 'theta12', - 'theta13', - 'theta23', - 'deltam21', - 'deltam31', - 'deltacp', - 'gamma21', - 'gamma31', - 'gamma32', - ) - - # init base class - super(decoherence, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - #Have not yet implemented matter effects - if self.params.earth_model.value is not None: - raise ValueError("Matter effects not yet implemented for decoherence, must set 'earth_model' to None") - - - self.layers = None - - #Toggle between 2-flavor and 3-flavor models - self.two_flavor = False - - - def setup_function(self): - - # setup Earth model - if self.params.earth_model.value is not None: - earth_model = find_resource(self.params.earth_model.value) - YeI = self.params.YeI.value.m_as('dimensionless') - YeO = self.params.YeO.value.m_as('dimensionless') - YeM = self.params.YeM.value.m_as('dimensionless') - else: - earth_model = None - - # setup the layers - prop_height = self.params.prop_height.value.m_as('km') - detector_depth = self.params.detector_depth.value.m_as('km') - self.layers = Layers(earth_model, detector_depth, prop_height) - if earth_model is not None: - self.layers.setElecFrac(YeI, YeO, YeM) - - # set the correct data mode - self.data.representation = self.calc_mode - - # --- calculate the layers --- - if self.data.is_map: - # speed up calculation by adding links - # as layers don't care about flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - for container in self.data: - if self.params.earth_model.value is not None: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) - else: - self.layers.calcPathLength(container['true_coszen']) - container['distances'] = self.layers.distance - - # don't forget to un-link everything again - self.data.unlink_containers() - - # --- setup empty arrays --- - if self.data.is_map: - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - for container in self.data: - container['probability'] = np.empty((container.size, 3, 3), dtype=FTYPE) - self.data.unlink_containers() - - # setup more empty arrays - for container in self.data: - container['prob_e'] = np.empty((container.size), dtype=FTYPE) - container['prob_mu'] = np.empty((container.size), dtype=FTYPE) - - - @profile - def compute_function(self): - - # set the correct data mode - self.data.representation = self.calc_mode - - if self.data.is_map: - # speed up calculation by adding links - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - # --- update params --- - self.decoh_params = DecoherenceParams(deltam21=self.params.deltam21.value, - deltam31=self.params.deltam31.value, - theta12=self.params.theta12.value, - theta13=self.params.theta13.value, - theta23=self.params.theta23.value, - deltacp=self.params.deltacp.value, - gamma21=self.params.gamma21.value, - gamma31=self.params.gamma31.value, - gamma32=self.params.gamma32.value) - - # Calculate oscillation probabilities - for container in self.data: - self.calc_probs(container['nubar'], - container['true_energy'], - #container['densities'], - container['distances'], - out=container['probability'], - ) - - # the following is flavour specific, hence unlink - self.data.unlink_containers() - - for container in self.data: - # initial electrons (0) - fill_probs(container['probability'], - 0, # electron - container['flav'], - out=container['prob_e'], - ) - # initial muons (1) - fill_probs(container['probability'], - 1, # muon - container['flav'], - out=container['prob_mu'], - ) - - container.mark_changed('prob_e') - container.mark_changed('prob_mu') - - - - @profile - def apply_function(self): - - # update the outputted weights - for container in self.data: - apply_probs(container['sys_flux'], - container['prob_e'], - container['prob_mu'], - out=container['weights']) - container.mark_changed('weights') - - - def calc_probs(self, nubar, e_array, len_array, out): - - #Get the probability values output array - prob_array = out - - #Attach units - L = len_array * ureg["km"] - E = e_array * ureg["GeV"] - - #nue - calc_decoherence_probs( decoh_params=self.decoh_params, flav="nue", energy=E, baseline=L, prob_e=prob_array[:,0,0], prob_mu=prob_array[:,0,1], prob_tau=prob_array[:,0,2], two_flavor=self.two_flavor ) - - #numu - calc_decoherence_probs( decoh_params=self.decoh_params, flav="numu", energy=E, baseline=L, prob_e=prob_array[:,1,0], prob_mu=prob_array[:,1,1], prob_tau=prob_array[:,1,2], two_flavor=self.two_flavor ) - - #nutau (basically just the inverse of the numu case) - np.copyto(dst=prob_array[:,2,0], src=prob_array[:,1,0]) - np.copyto(dst=prob_array[:,2,1], src=prob_array[:,1,2]) - np.copyto(dst=prob_array[:,2,2], src=prob_array[:,1,1]) - - #Register that arrays have changed - out - - - -# vectorized function to apply (flux * prob) -# must be outside class -if FTYPE == np.float64: - signature = '(f8[:], f8, f8, f8[:])' -else: - signature = '(f4[:], f4, f4, f4[:])' -@guvectorize([signature], '(d),(),()->()', target=TARGET) -def apply_probs(flux, prob_e, prob_mu, out): - out[0] *= (flux[0] * prob_e) + (flux[1] * prob_mu) diff --git a/pisa/stages/osc/globes.py b/pisa/stages/osc/globes.py deleted file mode 100644 index aa866749a..000000000 --- a/pisa/stages/osc/globes.py +++ /dev/null @@ -1,274 +0,0 @@ -""" -PISA pi stage wrapping GLoBES for the calculation of neutrino oscillation probabilities. - -Allows for the calculation of sterile neutrino oscillation probabilities. -This needs Andrii's GLoBES wrapper, which has been forked to be -made compatible with Python3: - -https://github.com/atrettin/GLoBES_wrapper - -To import, this stage takes as input the path to the GLoBES wrapper. This is necessary -because GLoBES has to be imported while in the wrapper directory. -""" - -from __future__ import absolute_import, print_function, division - -import os -import sys - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET, ureg -from pisa.core.stage import Stage -from pisa.stages.osc.layers import Layers -from pisa.stages.osc.osc_params import OscParams -from pisa.utils.numba_tools import WHERE -from pisa.utils.profiler import profile -from pisa.utils.resources import find_resource - - -class globes(Stage): - """ - GLoBES PISA Pi class - - Parameters - ---------- - earth_model : PREM file path - globes_wrapper : path to globes wrapper - detector_depth : float - prop_height : quantity (dimensionless) - params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: - - theta12 : quantity (angle) - theta13 : quantity (angle) - theta23 : quantity (angle) - deltam21 : quantity (mass^2) - deltam31 : quantity (mass^2) - deltam41 : quantity (mass^2) - theta24 : quantity (angle) - theta34 : quantity (angle) - deltacp : quantity (angle) - - """ - def __init__( - self, - earth_model, - globes_wrapper, - detector_depth=2.*ureg.km, - prop_height=20.*ureg.km, - **std_kwargs, - ): - - expected_params = ( - 'theta12', - 'theta13', - 'theta23', - 'deltam21', - 'deltam31', - 'deltam41', - 'theta24', - 'theta34', - 'deltacp', - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - self.layers = None - self.osc_params = None - self.earth_model = earth_model - self.globes_wrapper = globes_wrapper - self.detector_depth = detector_depth - self.prop_height = prop_height - - self.globes_calc = None - - @profile - def setup_function(self): - sys.path.append(self.globes_wrapper) - import GLoBES - ### you need to start GLoBES from the folder containing a dummy experiment - # therefore we go to the folder, load GLoBES and then go back - curdir = os.getcwd() - os.chdir(self.globes_wrapper) - self.globes_calc = GLoBES.GLoBESCalculator("calc") - os.chdir(curdir) - self.globes_calc.InitSteriles(2) - # object for oscillation parameters - self.osc_params = OscParams() - earth_model = find_resource(self.earth_model) - prop_height = self.prop_height.m_as('km') - detector_depth = self.detector_depth.m_as('km') - self.layers = Layers(earth_model, detector_depth, prop_height) - # The electron fractions are taken into account internally by GLoBES/SNU. - # See the SNU patch for details. It uses the density to decide - # whether it is in the core or in the mantle. Therefore, we just multiply by - # one to give GLoBES the raw densities. - self.layers.setElecFrac(1., 1., 1.) - - # set the correct data mode - self.data.representation = self.calc_mode - - # --- calculate the layers --- - if self.data.is_map: - # speed up calculation by adding links - # as layers don't care about flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - for container in self.data: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) - - # don't forget to un-link everything again - self.data.unlink_containers() - - # setup probability containers - for container in self.data: - container['prob_e'] = np.empty((container.size), dtype=FTYPE) - container['prob_mu'] = np.empty((container.size), dtype=FTYPE) - container['prob_nonsterile'] = np.empty((container.size), dtype=FTYPE) - if '_cc' in container.name: - container['prob_nonsterile'] = np.ones(container.size) - elif '_nc' in container.name: - if 'nue' in container.name: - container['prob_e'] = np.ones(container.size) - container['prob_mu'] = np.zeros(container.size) - elif 'numu' in container.name: - container['prob_e'] = np.zeros(container.size) - container['prob_mu'] = np.ones(container.size) - elif 'nutau' in container.name: - container['prob_e'] = np.zeros(container.size) - container['prob_mu'] = np.zeros(container.size) - else: - raise Exception('unknown container name: %s' % container.name) - - def calc_prob_e_mu(self, flav, nubar, energy, rho_array, len_array): - '''Calculates probability for an electron/muon neutrino to oscillate into - the flavour of a given event, including effects from sterile neutrinos. - ''' - # We use the layers module to calculate lengths and densities. - # The output must be converted into a regular python list. - self.globes_calc.SetManualDensities(list(len_array), list(rho_array)) - # this calls the calculator without the calculation of layers - # The flavour convention in GLoBES is that - # e = 1, mu = 2, tau = 3 - # while in PISA it's - # e = 0, mu = 1, tau = 2 - # which is why we add +1 to the flavour. - # Nubar follows the same convention in PISA and GLoBES: - # +1 = particle, -1 = antiparticle - nue_to_nux = self.globes_calc.MatterProbabilityPrevBaseline(1, flav+1, nubar, energy) - numu_to_nux = self.globes_calc.MatterProbabilityPrevBaseline(2, flav+1, nubar, energy) - return (nue_to_nux, numu_to_nux) - - def calc_prob_nonsterile(self, flav, nubar, energy, rho_array, len_array): - '''Calculates the probability of a given neutrino to oscillate into - another non-sterile flavour. - ''' - # We use the layers module to calculate lengths and densities. - # The output must be converted into a regular python list. - self.globes_calc.SetManualDensities(list(len_array), list(rho_array)) - # this calls the calculator without the calculation of layers - # The flavour convention in GLoBES is that - # e = 1, mu = 2, tau = 3 - # while in PISA it's - # e = 0, mu = 1, tau = 2 - # which is why we add +1 to the flavour. - # Nubar follows the same convention in PISA and GLoBES: - # +1 = particle, -1 = antiparticle - nux_to_nue = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 1, nubar, energy) - nux_to_numu = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 2, nubar, energy) - nux_to_nutau = self.globes_calc.MatterProbabilityPrevBaseline(flav+1, 3, nubar, energy) - nux_to_nonsterile = nux_to_nue + nux_to_numu + nux_to_nutau - return nux_to_nonsterile - - @profile - def compute_function(self): - # --- update mixing params --- - params = [self.params.theta12.value.m_as('rad'), - self.params.theta13.value.m_as('rad'), - self.params.theta23.value.m_as('rad'), - self.params.deltacp.value.m_as('rad'), - self.params.deltam21.value.m_as('eV**2'), - self.params.deltam31.value.m_as('eV**2'), - self.params.deltam41.value.m_as('eV**2'), - 0.0, - self.params.theta24.value.m_as('rad'), - self.params.theta34.value.m_as('rad'), - 0.0, - 0.0 - ] - self.globes_calc.SetParametersArr(params) - # set the correct data mode - self.data.representation = self.calc_mode - - for container in self.data: - # standard oscillations are only applied to charged current events, - # while the loss due to oscillation into sterile neutrinos is only - # applied to neutral current events. - # Accessing single entries from containers is very slow. - # For this reason, we make a copy of the content we need that is - # a simple numpy array. - flav = container['flav'] - nubar = container['nubar'] - energies = np.array(container['true_energy']) - densities = np.array(container['densities']) - distances = np.array(container['distances']) - prob_e = np.zeros(container.size) - prob_mu = np.zeros(container.size) - prob_nonsterile = np.zeros(container.size) - if '_cc' in container.name: - for i in range(container.size): - prob_e[i], prob_mu[i] = self.calc_prob_e_mu(flav, - nubar, - energies[i], - densities[i], - distances[i] - ) - container['prob_e'] = prob_e - container['prob_mu'] = prob_mu - elif '_nc' in container.name: - for i in range(container.size): - prob_nonsterile[i] = self.calc_prob_nonsterile(flav, - nubar, - energies[i], - densities[i], - distances[i] - ) - container['prob_nonsterile'] = prob_nonsterile - else: - raise Exception('unknown container name: %s' % container.name) - container.mark_changed('prob_e') - container.mark_changed('prob_mu') - container.mark_changed('prob_nonsterile') - - @profile - def apply_function(self): - # update the outputted weights - for container in self.data: - apply_probs(container['nu_flux'], - container['prob_e'], - container['prob_mu'], - container['prob_nonsterile'], - out=container['weights']) - container.mark_changed('weights') - - -# vectorized function to apply (flux * prob) -# must be outside class -if FTYPE == np.float64: - signature = '(f8[:], f8, f8, f8, f8[:])' -else: - signature = '(f4[:], f4, f4, f4, f4[:])' -@guvectorize([signature], '(d),(),(),()->()', target=TARGET) -def apply_probs(flux, prob_e, prob_mu, prob_nonsterile, out): - out[0] *= ((flux[0] * prob_e) + (flux[1] * prob_mu))*prob_nonsterile diff --git a/pisa/stages/osc/layers.py b/pisa/stages/osc/layers.py deleted file mode 100644 index 495b727c3..000000000 --- a/pisa/stages/osc/layers.py +++ /dev/null @@ -1,611 +0,0 @@ -""" -Calculation of Earth layers and electron densities. -""" - - -from __future__ import division - -import numpy as np -try: - import numba -except ImportError: - numba = None - -from pisa import FTYPE -from pisa.utils.fileio import from_file -from pisa.utils.log import logging, set_verbosity - -__all__ = ['extCalcLayers', 'Layers'] - -__author__ = 'P. Eller','E. Bourbeau' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -if numba is None: - class jit(object): - """Decorator class to mimic Numba's `jit` when Numba is missing""" - def __init__(self, *args, **kwargs): - pass - def __call__(self, *args): - return args[0] -else: - jit = numba.jit - ftype = numba.typeof(FTYPE(1)) - - - -@jit(nopython=True, nogil=True, cache=True) -def extCalcLayers(cz, - r_detector, - prop_height, - detector_depth, - rhos, - coszen_limit, - radii, - max_layers): - """Layer density/distance calculator for each coszen specified. - - Accelerated with Numba if present. - - Parameters - ---------- - cz : coszen values (array of float) - r_detector : radial position of the detector (float) - prop_height : height at which neutrinos are assumed to be produced (float) - detector_depth : depth at which the detector is buried (float) - rhos : densities (already weighted by electron fractions) (ndarray) - radii : radii defining the Earth's layer (ndarray) - coszen : coszen values corresponding to the radii above (ndarray) - max_layers : maximum number of layers it is possible to cross (int) - - Returns - ------- - n_layers : int number of layers - density : array of densities, flattened from (cz, max_layers) - distance : array of distances per layer, flattened from (cz, max_layers) - - """ - - # The densities, distances and number of layers are appended to one long list - # which is later reshaped into containers of size (# of cz values, max_layers) - # in the pi_prob3 module - - densities = np.zeros((len(cz), max_layers), dtype=FTYPE) - distances = np.zeros((len(cz), max_layers), dtype=FTYPE) - number_of_layers = np.zeros(len(cz)) - - # Loop over all CZ values - for i, coszen in enumerate(cz): - - r_prop = r_detector+detector_depth+prop_height - # Compute the full path length - # path_len = -r_detector * coszen + np.sqrt(r_detector**2. * coszen**2 - (r_detector**2. - r_prop**2.)) - - # Determine if there will be a crossing of layer - # idx is the index of the first inner layer - idx = np.where(radii= coszen_limit[idx]: - cumulative_distances = -r_detector * coszen + np.sqrt(r_detector**2. * coszen**2. - r_detector**2. + radii[:idx]**2.) - # a bit of flippy business is done here to order terms - # such that numpy diff can work - segments_lengths = np.diff(np.concatenate((np.array([0.]), cumulative_distances[::-1]))) - segments_lengths = segments_lengths[::-1] - segments_lengths = np.concatenate((segments_lengths, np.zeros(radii.shape[0] - idx))) - - density = rhos*(segments_lengths > 0.) - - else: - # - # Figure out how many layers are crossed twice - # (meaning we calculate the negative and positive roots for these layers) - # - - calculate_small_root = (coszen < coszen_limit) * (coszen_limit <= coszen_limit[idx]) - calculate_large_root = (coszen_limit>coszen) - - small_roots = - r_detector * coszen * calculate_small_root - np.sqrt(r_detector**2 * coszen**2 - r_detector**2 + radii**2) #, where=calculate_small_root, out=np.zeros_like(radii)) - large_roots = - r_detector * coszen * calculate_large_root + np.sqrt(r_detector**2 * coszen**2 - r_detector**2 + radii**2) #, where=calculate_large_root, out=np.zeros_like(radii)) - - # Remove the negative root numbers, and the initial zeros distances - small_roots = small_roots[small_roots>0] - small_roots = np.concatenate((np.array([0.]), small_roots)) - - # Reverse the order of the large roots - # That should give the segment distances from the furthest layer to - # the middle layer - large_roots = large_roots[::-1] - - # concatenate large and small roots together - # this gives the cumulative distance from the detector outward - full_distances = np.concatenate((np.zeros(1),small_roots[small_roots>0], large_roots[large_roots>0])) - - # Diff the distances and reverse the order - # such that the path starts away from the detector - segments_lengths = np.diff(full_distances) - segments_lengths = segments_lengths[::-1] - - - # The last problem is to match back the densities - # to the proper array elements. - # Densities coming out of the earth core are inverted w.r.t the - # densities of the ones coming in, with the following exception: - # - # - the middle layer and the atmosphere must be counted only once - # - # - densities corresponding to layers that are not crossed must be removed - # - # NOTE: this assumes that the detector is not positioned in the atmosphere - # - # start by removing the layers not crossed from rhos - inner_layer_mask = coszen_limit>coszen - density = np.concatenate((rhos[inner_layer_mask],rhos[inner_layer_mask][1:-1][::-1])) - - # As an extra precaution, set all densities that are not crossed to zero - density*=(segments_lengths>0) - - number_of_layers[i] = np.sum(segments_lengths > 0.) - # append to the large list - for j in range(len(density)): - # index j may not run all the way to max_layers, unreached indices stay zero - densities[i, j] = density[j] - distances[i, j] = segments_lengths[j] - - return number_of_layers, densities, distances - - -class Layers(object): - """ - Calculate the path through earth for a given layer model with densities - (PREM [1]), the electron fractions (Ye) and an array of coszen values - - Parameters - ---------- - prem_file : str - path to PREM file containing layer radii and densities as white space - separated txt - - detector_depth : float - depth of detector underground in km - - prop_height : float - the production height of the neutrinos in the atmosphere in km (?) - - Attributes - ---------- - max_layers : int - maximum number of layers (this is important for the shape of the - output! if less than maximumm number of layers are crossed, it's - filled up with 0s - - n_layers : 1d int array of length len(cz) - number of layers crossed for every CZ value - - density : 1d float array of length (max_layers * len(cz)) - containing density values and filled up with 0s otherwise - - distance : 1d float array of length (max_layers * len(cz)) - containing distance values and filled up with 0s otherwise - - References - ---------- - [1] A.M. Dziewonski and D.L. Anderson (1981) "Preliminary reference - Earth model," Physics of the Earth and Planetary Interiors, 25(4), - pp. 297 – 356. - http://www.sciencedirect.com/science/article/pii/300031920181900467 - - """ - def __init__(self, prem_file, detector_depth=1., prop_height=2.): - # Load earth model - if prem_file is not None : - self.using_earth_model = True - self.prem = from_file(prem_file, as_array=True) - - # The following radii and densities are extracted in reverse order - # w.r.t the file. The first elements of the arrays below corresponds - # the Earth's surface, and the following numbers go deeper toward the - # planet's core - self.rhos = self.prem[..., 1][::-1].astype(FTYPE) - self.radii = self.prem[..., 0][::-1].astype(FTYPE) - r_earth = self.prem[-1][0] - self.default_elec_frac = 0.5 - - - - # Add an external layer corresponding to the atmosphere / production boundary - self.radii = np.concatenate((np.array([r_earth+prop_height]), self.radii)) - self.rhos = np.concatenate((np.ones(1, dtype=FTYPE), self.rhos)) - self.max_layers = 2 * (len(self.radii)) - - - else : - self.using_earth_model = False - r_earth = 6371.0 #If no Earth model provided, use a standard Earth radius value - - - # - # Make some checks about the input production height and detector depth - # - assert detector_depth > 0, 'ERROR: detector depth must be a positive value' - assert detector_depth <= r_earth, 'ERROR: detector depth is deeper than one Earth radius!' - assert prop_height >= 0, 'ERROR: neutrino production height must be positive' - - # Set some other - self.r_detector = r_earth - detector_depth - self.prop_height = prop_height - self.detector_depth = detector_depth - - if self.using_earth_model: - # Compute the coszen_limits - self.computeMinLengthToLayers() - - - - def setElecFrac(self, YeI, YeO, YeM): - """Set electron fractions of inner core, outer core, and mantle. - Locations of boundaries between each layer come from PREM. - - Parameters - ---------- - YeI, YeO, YeM : scalars - Three electron fractions (Ye), where I=inner core, O=outer core, - and M=mantle - - """ - if not self.using_earth_model : - raise ValueError("Cannot set electron fraction when not using an Earth model") - - self.YeFrac = np.array([YeI, YeO, YeM], dtype=FTYPE) - - # re-weight the layer densities accordingly - self.weight_density_to_YeFrac() - - def scaling(self, scaling_array): - """ - Multplies scaling factor with densities from earth model - - Parameters - ---------- - scaling_array : numpy array containing scaling factors for different layers. - """ - - if self.using_earth_model and hasattr(self, 'prem'): - self.rhos = self.prem[..., 1][::-1].astype(FTYPE) - if scaling_array is not None: - self.rhos = self.rhos * scaling_array - self.rhos = np.concatenate((np.ones(1, dtype=FTYPE), self.rhos)) - else: - raise ValueError("Cannot scale densities when not using an Earth model") - - def computeMinLengthToLayers(self): - ''' - Deterine the coszen values for which a track will - be tangeant to a given layer. - - Given the detector radius and the layer radii: - - - A layer will be tangeant if radii= self.r_detector: - x = 1. - else: - x = - np.sqrt(1 - (rad**2 / self.r_detector**2)) - coszen_limit.append(x) - self.coszen_limit = np.array(coszen_limit, dtype=FTYPE) - - - - def calcLayers(self, cz): - """ - - Parameters - ---------- - cz : 1d float array - Array of coszen values - - """ - - if not self.using_earth_model: - raise ValueError("Cannot calculate layers when not using an Earth model") - - # run external function - self._n_layers, self._density, self._distance = extCalcLayers( - cz=cz, - r_detector=self.r_detector, - prop_height=self.prop_height, - detector_depth=self.detector_depth, - rhos=self.rhos, - coszen_limit=self.coszen_limit, - radii=self.radii, - max_layers=self.max_layers, - ) - - @property - def n_layers(self): - if not self.using_earth_model: - raise ValueError("Cannot get layers when not using an Earth model") - return self._n_layers - - @property - def density(self): - if not self.using_earth_model: - raise ValueError("Cannot get density when not using an Earth model") - return self._density - - @property - def distance(self): - return self._distance - - - def calcPathLength(self, cz) : - """ - - Calculate path length of the neutrino through an Earth-sized sphere, given the - production height, detector depth and zenith angle. - Useful if not considering matter effects. - - Parameters - ---------- - cz : cos(zenith angle), either single float value or an array of float values - - """ - r_prop = self.r_detector + self.detector_depth + self.prop_height - - if not hasattr(cz,"__len__"): - cz = np.array([cz]) - else: - cz = np.array(cz) - - pathlength = - self.r_detector * cz + np.sqrt(self.r_detector**2. * cz**2 - (self.r_detector**2. - r_prop**2.)) - - self._distance = pathlength - - def weight_density_to_YeFrac(self): - ''' - Adjust the densities of the provided earth model layers - for the different electron fractions in the inner core, - outer core and mantle. - ''' - - # TODO make this generic - R_INNER = 1221.5 - R_OUTER = 3480. - R_MANTLE= 6371. # the crust is assumed to have the same electron fraction as the mantle - - assert isinstance(self.YeFrac, np.ndarray) and self.YeFrac.shape[0] == 3, 'ERROR: YeFrac must be an array of size 3' - # - # TODO: insert extra radii is the electron density boundaries - # don't match the current layer boundaries - - # - # Weight the density properly - # - density_inner = self.rhos * self.YeFrac[0] * (self.radii <= R_INNER) - density_outer = self.rhos * self.YeFrac[1] * (self.radii <= R_OUTER) * (self.radii > R_INNER) - density_mantle = self.rhos * self.YeFrac[2] * (self.radii <= R_MANTLE) * (self.radii > R_OUTER) - - weighted_densities = density_inner + density_outer + density_mantle - - self.rhos = weighted_densities - - - -def test_layers_1(): - - logging.info('Test layers calculation:') - layer = Layers('osc/PREM_4layer.dat') - layer.setElecFrac(0.4656, 0.4656, 0.4957) - cz = np.linspace(-1, 1, int(1e5), dtype=FTYPE) - layer.calcLayers(cz) - logging.info('n_layers = %s' %layer.n_layers) - logging.info('density = %s' %layer.density) - logging.info('distance = %s' %layer.distance) - - logging.info('Test path length calculation:') - layer = Layers(None) - cz = np.array([1.,0.,-1.]) - layer.calcPathLength(cz) - logging.info('coszen = %s' %cz) - logging.info('pathlengths = %s' %layer.distance) - - logging.info('<< PASS : test_Layers 1 >>') - -def test_layers_2(): - ''' - Validate the total distance travered, - the number of layers crossed and the distance - travelled in each of these layers, for - neutrinos coming from various zenith angles - - also test separately the calculation of critical - zenith boundaries for any particular layer, as - calculated by computeMinLengthToLayers - ''' - from pisa.utils.comparisons import ALLCLOSE_KW - # - # The test file is a 4-layer PREM Earth model. The - # file contains the following information: - # - # Distance to Earth's core [km] density [] - # ----------------------------- ---------- - # 0. 13.0 - # 1220.0 13.0 - # 3480.0 11.3 - # 5701.0 5.0 - # 6371.0 3.3 - # - # Note that the order of these values is inverted in - # layer.radii, so the first element in this object - # will be 6371 - - # TEST I: critical coszen values - # - # For each layer, the angle at which a neutrino track will - # become tangeant to a layer boundary can be calculated as - # follow: - # - # cos(theta) = -np.sqrt(1-r_n**2/R_detector**2) - # - # where the negative value is taken because the zenith angle - # is larger than pi/2 - # - # Note that if the layer is above the detector depth, - # The critical coszen is set to 0. - # - layer = Layers('osc/PREM_4layer.dat', detector_depth=1., prop_height=20.) - logging.info('detector depth = %s km' %layer.detector_depth) - logging.info('Detector radius = %s km'%layer.r_detector) - logging.info('Neutrino production height = %s km'%layer.prop_height) - layer.computeMinLengthToLayers() - ref_cz_crit = np.array([1., 1., -0.4461133826191877, -0.8375825182106081, -0.9814881717430358, -1.], dtype=FTYPE) - logging.debug('Asserting Critical coszen values...') - assert np.allclose(layer.coszen_limit, ref_cz_crit, **ALLCLOSE_KW), f'test:\n{layer.coszen_limit}\n!= ref:\n{ref_cz_crit}' - - # - # TEST II: Verify total path length (in vacuum) - # - # The total path length is given by: - # - # -r_detector*cz + np.sqrt(r_detector**2.*cz**2 - (r_detector**2. - r_prop**2.)) - # - # where r_detector is the radius distance of - # the detector, and r_prop is the radius - # at which neutrinos are produced - input_cz = np.cos(np.array([0., 36.* np.pi / 180., 63. * np.pi / 180., \ - np.pi/2., 105.* np.pi / 180., 125. * np.pi / 180., \ - 170 * np.pi / 180., np.pi])) - - correct_length = np.array([21., 25.934954968613056, 45.9673929915939, 517.6688130455607,\ - 3376.716060094899, 7343.854310588515, 12567.773643090592, 12761.]) - layer.calcPathLength(input_cz) - computed_length = layer.distance - logging.debug('Testing full path in vacuum calculations...') - assert np.allclose(computed_length, correct_length, **ALLCLOSE_KW), f'test:\n{computed_length}\n!= ref:\n{correct_length}' - logging.info('<< PASS : test_Layers 2 >>') - -def test_layers_3(): - # - # TEST III: check the individual path distances crossed - # for the previous input cosines - # - # For negative values of coszen, the distance crossed in a layer i is: - # - # d_i = R_p*cos(alpha) + sqrt(Rp**2cos(alpha)**2 - (Rp**2-r1**2))) - # - # where Rp is the production radius, r1 is the outer limit of a layer - # and alpha is an angle that relates to the total path D and zenith - # theta via the sine law: - # - # sin(alpha) = sin(pi-theta)*D /Rp - # - from pisa.utils.comparisons import ALLCLOSE_KW - import copy - - logging.debug('Testing Earth layer segments and density computations...') - layer = Layers('osc/PREM_4layer.dat', detector_depth=1., prop_height=20.) - logging.info('detector depth = %s km' %layer.detector_depth) - logging.info('Detector radius = %s km'%layer.r_detector) - logging.info('Neutrino production height = %s km'%layer.prop_height) - layer.computeMinLengthToLayers() - - # Define some electron densities - # (Normally, these would come from some a config - # file in PISA) - YeI = 0.4656 - YeM = 0.4957 - YeO = 0.4656 - - layer.setElecFrac(YeI, YeO, YeM) - - # Define a couple of key coszen directions - # cz = 1 (path above the detector) - # cz = 0 (horizontal path) - # cz = -0.4461133826191877 (tangent to the first inner layer of PREM4) - # cz = -1 (path below the detector) - cz_values = np.array([1., 0, -0.4461133826191877, -1.], dtype=FTYPE) - - # Run the layer calculation - layer.calcLayers(cz=cz_values) - - # Save a copy of the segment information, and reshape them as they - # are reshaped in pi_prob3 - layers_crossed = copy.deepcopy(layer.n_layers) - distance_segments = copy.deepcopy(layer.distance.reshape(4,layer.max_layers)) - density_segments = copy.deepcopy(layer.density.reshape(4,layer.max_layers)) - - # Replace the segmented distances by the total path length in vacuum - # (like in test #2): - layer.calcPathLength(cz_values) - vacuum_distances = copy.deepcopy(layer.distance) - - - # Print out the outcome of the layer calculations - # Compare total segmented lengh with total vacuum path length - logging.info('Down-going neutrino (coszen = 1):\n-------------') - logging.info("number of layers: {}".format(layers_crossed[0])) - logging.info("Densities crossed: {}".format(density_segments[0,:])) - logging.info("Segment lengths: {}\n".format(distance_segments[0,:])) - correct_path = np.array([20., 1.,0,0,0,0,0,0,0,0,0,0]) - assert np.allclose(distance_segments[0,:], correct_path, **ALLCLOSE_KW), 'ERROR in downgoing neutrino path: {0} vs {1}'.format(distance_segments[0,:],correct_path) - - logging.info('Horizontal neutrino (coszen = 0):\n-------------') - logging.info("number of layers: {}".format(layers_crossed[1])) - logging.info("Densities crossed: {}".format(density_segments[1,:])) - logging.info("Segment lengths: {}\n".format(distance_segments[1,:])) - correct_path = np.array([404.79277484435556, 112.87603820120549,0,0,0,0,0,0,0,0,0,0]) - assert np.allclose(distance_segments[1,:], correct_path, **ALLCLOSE_KW), 'ERROR in horizontal neutrino path: {0} vs {1}'.format(distance_segments[1,:],correct_path) - - logging.info('Neutrino tangeant to the first inner layer (coszen = -0.4461133826191877):\n-------------\n') - logging.info("number of layers: {}".format(layer.n_layers[2])) - logging.info("Densities crossed: {}".format(density_segments[2,:])) - logging.info("Segment lengths: {}\n".format(distance_segments[2,:])) - correct_path = np.array([44.525143211129944, 5685.725369597015,0,0,0,0,0,0,0,0,0,0]) - assert np.allclose(distance_segments[2,:], correct_path, **ALLCLOSE_KW), 'ERROR in tangeant neutrino path: {0} vs {1}'.format(distance_segments[2,:],correct_path) - - logging.info('Up-going neutrino (coszen = -1):\n-------------') - logging.info("number of layers: {}".format(layer.n_layers[3])) - logging.info("Densities crossed: {}".format(density_segments[3,:])) - logging.info("Segment lengths: {}\n".format(distance_segments[3,:])) - correct_path = np.array([20., 670., 2221., 2260., 2440., 2260., 2221., 669., 0, 0,0,0], dtype=FTYPE) - assert np.allclose(distance_segments[3,:], correct_path, **ALLCLOSE_KW), 'ERROR in upgoing neutrino path: {0} vs {1}'.format(distance_segments[3,:],correct_path) - - logging.info('Comparing the segments sums with the total path in vacuum...') - assert np.allclose(np.sum(distance_segments, axis=1), vacuum_distances, **ALLCLOSE_KW), 'ERROR: distance mismatch: {0} vs {1}'.format(np.sum(distance_segments, axis=1), vacuum_distances) - - logging.info('<< PASS : test_Layers 3 >>') - - - - -if __name__ == '__main__': - set_verbosity(3) - test_layers_1() - test_layers_2() - test_layers_3() diff --git a/pisa/stages/osc/lri_params.py b/pisa/stages/osc/lri_params.py deleted file mode 100644 index 52d3a0c67..000000000 --- a/pisa/stages/osc/lri_params.py +++ /dev/null @@ -1,121 +0,0 @@ -""" -LRI Params: Charecterize Long Range Interaction mediator - -Developed by following osc_params.py and nsi_params.py -""" - -from __future__ import absolute_import, division - -import numpy as np -from pisa import CTYPE, FTYPE -from pisa.utils.comparisons import ALLCLOSE_KW, isscalar, recursiveEquality -from pisa.utils.log import Levels, set_verbosity, logging - -__all__ = ['LRIParams'] - -class LRIParams(object): - """ - Holds the mediator information of long range interaction:z' - Assumed three anamoly free symmetries, Le_mu, Le_tau, Lmu_tau(by mixing z and z')). - - Attributes - ---------- - potential matrix : Three 2d float array of shape (3,3), one for each symmetry - - Potential matrix holding the potential term of three different symmetris, which is a - function of mediator mass, and the coupling constant of the interaction. - - - """ - - def __init__(self): - - self._v_lri = 0. - self._potential_matrix_emu = np.zeros((3, 3), dtype=FTYPE) - self._potential_matrix_etau = np.zeros((3, 3), dtype=FTYPE) - self._potential_matrix_mutau = np.zeros((3, 3), dtype=FTYPE) - - # --- LRI potential --- - - @property - def v_lri(self): - """Potential term of symmetry e mu""" - return self._v_lri - - @v_lri.setter - def v_lri(self, value): - assert value <1. - self._v_lri = value - - @property - def potential_matrix_emu(self): - """LRI matter interaction potential matrix e mu symmetry""" - - v_matrix = np.zeros((3, 3), dtype=FTYPE) - - v_matrix[0, 0] = self.v_lri - v_matrix[0, 1] = 0. - v_matrix[0, 2] = 0. - v_matrix[1, 0] = 0. - v_matrix[1, 1] = - self.v_lri - v_matrix[1, 2] = 0. - v_matrix[2, 0] = 0. - v_matrix[2, 1] = 0. - v_matrix[2, 2] = 0. - - assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) - - return v_matrix - - @property - def potential_matrix_etau(self): - """LRI matter interaction potential matrix e tau symmetry""" - - v_matrix = np.zeros((3, 3), dtype=FTYPE) - - v_matrix[0, 0] = self.v_lri - v_matrix[0, 1] = 0. - v_matrix[0, 2] = 0. - v_matrix[1, 0] = 0. - v_matrix[1, 1] = 0. - v_matrix[1, 2] = 0. - v_matrix[2, 0] = 0. - v_matrix[2, 1] = 0. - v_matrix[2, 2] = - self.v_lri - - assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) - - return v_matrix - - @property - def potential_matrix_mutau(self): - """LRI matter interaction potential matrix mu tau symmetry""" - - v_matrix = np.zeros((3, 3), dtype=FTYPE) - - v_matrix[0, 0] = 0. - v_matrix[0, 1] = 0. - v_matrix[0, 2] = 0. - v_matrix[1, 0] = 0. - v_matrix[1, 1] = self.v_lri - v_matrix[1, 2] = 0. - v_matrix[2, 0] = 0. - v_matrix[2, 1] = 0. - v_matrix[2, 2] = - self.v_lri - - assert np.allclose(v_matrix, v_matrix.conj().T, **ALLCLOSE_KW) - - return v_matrix - - -def test_lri_params(): - """ - # TODO: implement me! - """ - pass - -if __name__=='__main__': - from pisa import TARGET - from pisa.utils.log import set_verbosity, logging - set_verbosity(1) - test_lri_params() diff --git a/pisa/stages/osc/nsi_params.py b/pisa/stages/osc/nsi_params.py deleted file mode 100644 index ad97edbe4..000000000 --- a/pisa/stages/osc/nsi_params.py +++ /dev/null @@ -1,705 +0,0 @@ -# author: T. Ehrhardt -# date: Nov 8, 2018 -""" -NSIParams: Characterize non-standard neutrino interaction coupling strengths - -merged in by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu) -to include NSI changes made by Thomas Ehrhardt on his branch: -original version can be found in thehrh/pisa nsi_reparameterisation branch -""" - -from __future__ import absolute_import, division - -import numpy as np - -from pisa import CTYPE, FTYPE -from pisa.utils.comparisons import ALLCLOSE_KW, isscalar, recursiveEquality -from pisa.utils.log import Levels, set_verbosity, logging - -__all__ = ['NSIParams', 'StdNSIParams', 'VacuumLikeNSIParams'] - - -ARY2STR_KW = dict( - precision=np.finfo(FTYPE).precision + 2, - floatmode="fixed", - sign=" ", - max_line_width=200, - separator=", ", -) - - -def _set_magnitude_phase(magn_phase_tuple): - try: - magnitude, phase = magn_phase_tuple - except: - raise ValueError( - 'Pass an iterable with two items (magnitude and phase)!' - ) - if not isscalar(magnitude) or not isscalar(phase): - raise TypeError( - 'Only scalar values for magnitude and phase accepted!' - ) - if magnitude < 0.0 and phase != 0.0: - raise ValueError( - 'Only accepting negative values with a zero phase (real coupling)!' - ) - return magnitude, phase - - -class NSIParams(object): - """ - Holds non-standard neutrino interaction parameters of neutral current type - for propagating neutrinos, interacting with 1st generation Standard Model - background quarks (u or d) or electrons in the Earth. - - - Attributes - ---------- - eps_matrix : 2d float array of shape (3, 3) - Hermitian NSI matrix holding the effective epsilon parameters describing - strengths of NSI transitions between the two specified neutrino flavors, - via NC-type interaction with 1st generation quarks or electrons in the - Earth. - Flavour-preserving (diagonal) ones are real, while the flavour-changing - (off-diagonal) ones are complex. - Note that these parameters are not the Lagrangian-level couplings but - rather the sums over these weighted by the respective relative number - densities (approx. constant) of each possible scattering partner - in the Earth. - - """ - - def __init__(self): - """Set NSI parameters.""" - self._eps_matrix = np.zeros((3, 3), dtype=CTYPE) - - -class StdNSIParams(NSIParams): - """ - NSI parameters in the standard parameterization. - - Attributes - ---------- - eps_matrix : 2d float array of shape (3, 3) - Effective NSI coupling matrix. - - eps_ee, eps_emu, eps_etau, eps_mumu, eps_mutau, eps_tautau : float or complex - Effective NSI coupling parameters. - - """ - - def __init__(self): - super().__init__() - self._eps_ee = 0. - self._eps_emu = 0. - self._eps_etau = 0. - self._eps_mumu = 0. - self._eps_mutau = 0. - self._eps_tautau = 0. - - # --- NSI epsilons --- - @property - def eps_ee(self): - """effective nue-nue NSI coupling parameter""" - return self.eps_matrix[0, 0].real - - @eps_ee.setter - def eps_ee(self, value): - if isinstance(value, complex) or not isscalar(value): - raise TypeError("eps_ee must be a real number!") - self._eps_matrix[0, 0] = value + 1.j * self._eps_matrix[0, 0].imag - - @property - def eps_emu(self): - """effective nue-numu NSI coupling parameter""" - return self.eps_matrix[0, 1] - - @eps_emu.setter - def eps_emu(self, value): - magnitude, phase = _set_magnitude_phase(value) - self._eps_matrix[0, 1] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) - self._eps_matrix[1, 0] = np.conjugate(self._eps_matrix[0, 1]) - - @property - def eps_etau(self): - """effective nue-nutau NSI coupling parameter""" - return self.eps_matrix[0, 2] - - @eps_etau.setter - def eps_etau(self, value): - magnitude, phase = _set_magnitude_phase(value) - self._eps_matrix[0, 2] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) - self._eps_matrix[2, 0] = np.conjugate(self._eps_matrix[0, 2]) - - @property - def eps_mumu(self): - """effective numu-numu NSI coupling parameter""" - return self.eps_matrix[1, 1].real - - @eps_mumu.setter - def eps_mumu(self, value): - if isinstance(value, complex) or not isscalar(value): - raise TypeError("eps_mumu must be a real number!") - self._eps_matrix[1, 1] = value + 1.j * self._eps_matrix[1, 1].imag - - @property - def eps_mutau(self): - """effective numu-nutau NSI coupling parameter""" - return self.eps_matrix[1, 2] - - @eps_mutau.setter - def eps_mutau(self, value): - magnitude, phase = _set_magnitude_phase(value) - self._eps_matrix[1, 2] = magnitude * (np.cos(phase) + 1.j * np.sin(phase)) - self._eps_matrix[2, 1] = np.conjugate(self._eps_matrix[1, 2]) - - @property - def eps_tautau(self): - """effective nutau-nutau NSI coupling parameter""" - return self.eps_matrix[2, 2].real - - @eps_tautau.setter - def eps_tautau(self, value): - if isinstance(value, complex) or not isscalar(value): - raise TypeError("eps_tautau must be a real number!") - self._eps_matrix[2, 2] = value + 1.j * self._eps_matrix[2, 2].imag - - @property - def eps_matrix(self): - nsi_eps = self._eps_matrix - # subtract mumu entry from diagonal entries (trace irrelevant) - nsi_eps = nsi_eps - nsi_eps[1, 1] * np.eye(3, dtype=FTYPE) - # explicitly nullify imaginary parts of diagonal entries which - # are only there due to numerical inaccuracies - for i in range(3): - nsi_eps[i, i] = nsi_eps[i, i].real + 0 * 1.j - - # make sure this is a valid Hermitian potential matrix - # before returning anything - assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) - - return nsi_eps - - -class VacuumLikeNSIParams(NSIParams): - """ - NSI parameters using a vacuum Hamiltonian-like parameterization. - - """ - # pylint: disable=invalid-name - def __init__(self): - super().__init__() - self._eps_scale = 1. - self._eps_prime = 0. - self._phi12 = 0. - self._phi13 = 0. - self._phi23 = 0. - self._alpha1 = 0. - self._alpha2 = 0. - self._deltansi = 0. - - # --- overall matter potential strength --- - @property - def eps_scale(self): - """Generalised matter potential strength scale""" - return self._eps_scale - - @eps_scale.setter - def eps_scale(self, value): - if isinstance(value, complex) or not isscalar(value): - raise TypeError("eps_scale must be a real number!") - self._eps_scale = value - - @property - def eps_prime(self): - """Second Hmat eigenvalue (beside eps_scale)""" - return self._eps_prime - - @eps_prime.setter - def eps_prime(self, value): - if isinstance(value, complex) or not isscalar(value): - raise TypeError("eps_prime must be a real number!") - self._eps_prime = value - - # --- projection phases --- - # --- phi12 --- - @property - def phi12(self): - """1-2 angle""" - return self._phi12 - - @phi12.setter - def phi12(self, value): - assert -np.pi <= value <= np.pi - self._phi12 = value - - # --- phi13 --- - @property - def phi13(self): - """1-3 angle""" - return self._phi13 - - @phi13.setter - def phi13(self, value): - assert -np.pi <= value <= np.pi - self._phi13 = value - - # --- phi23 --- - @property - def phi23(self): - """2-3 angle""" - return self._phi23 - - @phi23.setter - def phi23(self, value): - assert -np.pi <= value <= np.pi - self._phi23 = value - - # --- vacuum-matter relative phases --- - # --- alpha1 --- - @property - def alpha1(self): - """1-phase""" - return self._alpha1 - - @alpha1.setter - def alpha1(self, value): - assert 0. <= value <= 2*np.pi - self._alpha1 = value - - # --- alpha2 --- - @property - def alpha2(self): - """2-phase""" - return self._alpha2 - - @alpha2.setter - def alpha2(self, value): - assert 0. <= value <= 2*np.pi - self._alpha2 = value - - # --- nsi phase --- - @property - def deltansi(self): - """NSI phase""" - return self._deltansi - - @deltansi.setter - def deltansi(self, value): - assert 0. <= value <= 2*np.pi - self._deltansi = value - - # getters for the std. coupling parameters - # which are just the coupling matrix entries - @property - def eps_ee(self): - """effective nue-nue NSI coupling parameter""" - return self.eps_matrix[0, 0].real - - @property - def eps_emu(self): - """effective nue-numu NSI coupling parameter""" - return self.eps_matrix[0, 1] - - @property - def eps_etau(self): - """effective nue-nutau NSI coupling parameter""" - return self.eps_matrix[0, 2] - - @property - def eps_mumu(self): - """effective numu-numu NSI coupling parameter""" - return self.eps_matrix[1, 1].real - - @property - def eps_mutau(self): - """effective numu-nutau NSI coupling parameter""" - return self.eps_matrix[1, 2] - - @property - def eps_tautau(self): - """effective nutau-nutau NSI coupling parameter""" - return self.eps_matrix[2, 2].real - - - @property - def eps_matrix(self): - """Effective NSI coupling matrix.""" - # numerical calculation for now... - # relative matter-nsi phases - Qrel = ( - np.array([ - complex(np.cos(self.alpha1), np.sin(self.alpha1)), - complex(np.cos(self.alpha2), np.sin(self.alpha2)), - complex(np.cos(-(self.alpha1 + self.alpha2)), np.sin(-(self.alpha1 + self.alpha2))) - ]) * np.eye(3, dtype=FTYPE) - ) - # rotation matrices (signs as for PMNS matrix, - # also reproduce NSI global fit paper relations) - R12 = np.array( - [[np.cos(self.phi12), np.sin(self.phi12), 0], - [-np.sin(self.phi12), np.cos(self.phi12), 0], - [0, 0, 1]], - dtype=FTYPE - ) - R13 = np.array( - [[np.cos(self.phi13), 0, np.sin(self.phi13)], - [0, 1, 0], - [-np.sin(self.phi13), 0, np.cos(self.phi13)]], - dtype=FTYPE - ) - R23_complex = np.array( - [[1, 0, 0], - [0, np.cos(self.phi23), np.sin(self.phi23) * complex(np.cos(-self.deltansi), np.sin(-self.deltansi))], - [0, -np.sin(self.phi23) * complex(np.cos(self.deltansi), np.sin(self.deltansi)), np.cos(self.phi23)]], - ) - # "matter mixing matrix" - Umat = np.matmul(R12, np.matmul(R13, R23_complex)) - # Hmat eigenvalues - Dmat = np.array([self.eps_scale, self.eps_prime, 0], dtype=FTYPE) * np.eye(3, dtype=FTYPE) - # start from the innermost product, work your way outwards - mat_pot = np.matmul( - Qrel, - np.matmul(Umat, - np.matmul(Dmat, - np.matmul(Umat.conj().T, Qrel.conj().T) - ) - ) - ) - # subtract mumu entry from diagonal entries (trace irrelevant) - mat_pot = mat_pot - mat_pot[1, 1] * np.eye(3, dtype=FTYPE) - # subtract standard matter potential entry for CC coherent - # forward-scattering - mat_pot[0, 0] = mat_pot[0, 0] - 1. - # this is now the actual nsi coupling matrix - nsi_eps = mat_pot - # explicitly nullify imaginary parts of diagonal entries which - # are only there due to numerical inaccuracies - for i in range(3): - nsi_eps[i, i] = nsi_eps[i, i].real + 0 * 1.j - - # make sure this is a valid Hermitian potential matrix - # before returning anything - assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) - - return nsi_eps - - @property - def eps_matrix_analytical(self): - """Effective NSI coupling matrix calculated analytically.""" - # Analytical relations. These are wrong right now! #FIXME - nsi_eps = np.zeros((3, 3, 2), dtype=FTYPE) - - sp12 = np.sin(self.phi12) - sp13 = np.sin(self.phi13) - sp23 = np.sin(self.phi23) - cp12 = np.sqrt(1. - sp12**2) - cp13 = np.sqrt(1. - sp13**2) - cp23 = np.sqrt(1. - sp23**2) - - sdnsi = np.sin(self.deltansi) - cdnsi = np.cos(self.deltansi) - - # eps_ee - eps_mumu (real) - nsi_eps[0, 0, 0] = ( - self.eps_scale * cp13**2 * (cp12**2 - sp12**2) + - self.eps_prime * ( - (cp12**2 - sp12**2) * (sp13**2 * sp23**2 - cp23**2) - - 4 * cp12 * sp12 * sp13 * cp23 * sp23 * cdnsi - ) - ) - 1 - nsi_eps[0, 0, 1] = 0. - # eps_emu (complex) - nsi_eps[0, 1, 0] = ( - self.eps_scale * cp12 * sp12 * cp13**2 * np.cos(self.alpha1 - self.alpha2) + - self.eps_prime * ( - ( - cp12 * sp12 * (sp13**2 * sp23**2 - cp23**2) + - sp13 * cp23 * sp23 * cdnsi * (cp12**2 - sp12**2) - ) * np.cos(self.alpha1 - self.alpha2) - - ( - sp13 * cp23 * sp23 * sdnsi - ) * np.sin(self.alpha1 - self.alpha2) - ) - ) - nsi_eps[0, 1, 1] = ( - self.eps_scale * cp12 * sp12 * cp13**2 * np.sin(self.alpha1 - self.alpha2) + - self.eps_prime * ( - ( - cp12 * sp12 * (sp13**2 * sp23**2 - cp23**2) + - sp13 * cp23* sp23 * cdnsi * (cp12**2 - sp12**2) - ) * np.sin(self.alpha1 - self.alpha2) + - ( - sp13 * cp23 * sp23 * sdnsi - ) * np.cos(self.alpha1 - self.alpha2) - ) - ) - # eps_etau (complex) - nsi_eps[0, 2, 0] = ( - -self.eps_scale * cp12 * sp13 * cp13 * np.cos(2 * self.alpha1 + self.alpha2) + - self.eps_prime * ( - ( - cp13 * sp23 * (cp12 * sp13 * sp23 - sp12 * cp23 * cdnsi) - ) * np.cos(2 * self.alpha1 + self.alpha2) - - ( - cp13 * sp12 * cp23 * sp23 * sdnsi - ) * np.sin(2 * self.alpha1 + self.alpha2) - ) - ) - nsi_eps[0, 2, 1] = ( - -self.eps_scale * cp12* sp13 * cp13 * np.sin(2 * self.alpha1 + self.alpha2) + - self.eps_prime * ( - ( - cp13 * sp23 * (cp12 * sp13 * sp23 - sp12 * cp23 * cdnsi) - ) * np.sin(2 * self.alpha1 + self.alpha2) + - ( - cp13 * sp23 * sp12 * cp23 * sdnsi - ) * np.cos(2 * self.alpha1 + self.alpha2) - ) - ) - # eps_emu* (complex) - nsi_eps[1, 0, 0] = nsi_eps[0, 1, 0] - nsi_eps[1, 0, 1] = -nsi_eps[0, 1, 1] - # eps_etau* (complex) - nsi_eps[2, 0, 0] = nsi_eps[0, 2, 0] - nsi_eps[2, 0, 1] = -nsi_eps[0, 2, 1] - # eps_mumu - eps_mumu (0 by definition) - nsi_eps[1, 1, 0] = 0. - nsi_eps[1, 1, 1] = 0. - # eps_mutau (complex) - nsi_eps[1, 2, 0] = ( - -self.eps_scale * sp12 * cp13 * sp13 * np.cos(self.alpha1 + 2 * self.alpha2) + - self.eps_prime * ( - ( - cp13 * sp23 * (sp12 * sp13 * sp23 + cp12 * cp23 * cdnsi) - ) * np.cos(self.alpha1 + 2 * self.alpha2) + - ( - cp12 * cp13 * cp23 * sp23 * sdnsi - ) * np.sin(self.alpha1 + 2 * self.alpha2) - ) - ) - nsi_eps[1, 2, 1] = ( - -self.eps_scale * sp12 * cp13 * sp13 * np.sin(self.alpha1 + 2 * self.alpha2) + - self.eps_prime * ( - ( - -cp12 * cp13 * cp23 * sp23 * sdnsi - ) * np.cos(self.alpha1 + 2 * self.alpha2) + - ( - cp13 * sp23 * (sp12 * sp13 * sp23 + cp12 * cp23 * cdnsi) - ) * np.sin(self.alpha1 + 2 * self.alpha2) - ) - ) - # eps_mutau* (complex) - nsi_eps[2, 1, 0] = nsi_eps[1, 2, 0] - nsi_eps[2, 1, 1] = -nsi_eps[1, 2, 1] - # eps_tautau - eps_mumu (real) - nsi_eps[2, 2, 0] = ( - self.eps_scale * (sp13**2 - cp13**2 * sp12**2) + - self.eps_prime *( - sp23**2 * (cp13**2 - sp12**2 * sp13**2) - - 2 * cp12 * sp12 * sp13 * cp23 * sp23 * cdnsi - - cp12**2 * cp23**2 - ) - ) - nsi_eps[2, 2, 1] = 0. - - # make this into a complex 2d array - nsi_eps = nsi_eps[:, :, 0] + nsi_eps[:, :, 1] * 1.j - # make sure this is a valid Hermitian potential matrix - # before returning anything - assert np.allclose(nsi_eps, nsi_eps.conj().T, **ALLCLOSE_KW) - - return nsi_eps - -def test_nsi_params(): - """Unit tests for subclasses of `NSIParams`.""" - # TODO: these have to be extended - rand = np.random.RandomState(0) - std_nsi = StdNSIParams() - try: - # cannot accept a sequence - std_nsi.eps_ee = [rand.rand()] - except TypeError: - pass - - try: - # must be real - std_nsi.eps_ee = rand.rand() * 1.j - except TypeError: - pass - - try: - # unphysical negative magnitude for nonzero phase - std_nsi.eps_mutau = ((rand.rand() - 1.0), 0.1) - except ValueError: - pass - - std_nsi.eps_ee = 0.5 - std_nsi.eps_mumu = 0.5 - std_nsi.eps_tautau = 0.5 - if not np.allclose( - std_nsi.eps_matrix, np.zeros((3, 3), dtype=CTYPE), **ALLCLOSE_KW - ): - raise ValueError("NSI coupling matrix should be identically zero!") - - vac_like_nsi = VacuumLikeNSIParams() - vac_like_nsi.eps_scale = rand.rand() * 10. - assert recursiveEquality(vac_like_nsi.eps_ee, vac_like_nsi.eps_scale - 1.0) - -def test_nsi_parameterization(): - """Unit test for Hvac-like NSI parameterization.""" - rand = np.random.RandomState(0) - alpha1, alpha2, deltansi = rand.rand(3) * 2. * np.pi - phi12, phi13, phi23 = rand.rand(3) * 2*np.pi - np.pi - eps_max_abs = 10.0 - eps_scale, eps_prime = rand.rand(2) * 2 * eps_max_abs - eps_max_abs - nsi_params = VacuumLikeNSIParams() - nsi_params.eps_scale = eps_scale - nsi_params.eps_prime = eps_prime - nsi_params.phi12 = phi12 - nsi_params.phi13 = phi13 - nsi_params.phi23 = phi23 - nsi_params.alpha1 = alpha1 - nsi_params.alpha2 = alpha2 - nsi_params.deltansi = deltansi - - logging.trace('Checking agreement between numerical & analytical NSI matrix...') - - eps_mat_numerical = nsi_params.eps_matrix - eps_mat_analytical = nsi_params.eps_matrix_analytical - - try: - close = np.isclose(eps_mat_numerical, eps_mat_analytical, **ALLCLOSE_KW) - if not np.all(close): - logging.debug( - "Numerical NSI matrix:\n%s", - np.array2string(eps_mat_numerical, **ARY2STR_KW) - ) - logging.debug( - "Analytical expansion (by hand):\n%s", - np.array2string(eps_mat_analytical, **ARY2STR_KW) - ) - raise ValueError( - 'Evaluating analytical expressions for NSI matrix elements' - ' does not give agreement with numerical calculation!' - ' Elementwise agreement:\n%s' - % close - ) - except ValueError as err: - logging.warning( - "%s\nThis is expected." - " Going ahead with numerical calculation for now.", err - ) - - logging.trace('Now checking agreement with sympy calculation...') - - eps_mat_sympy = nsi_sympy_mat_mult( - eps_scale_val=eps_scale, - eps_prime_val=eps_prime, - phi12_val=phi12, - phi13_val=phi13, - phi23_val=phi23, - alpha1_val=alpha1, - alpha2_val=alpha2, - deltansi_val=deltansi - ) - - logging.trace('ALLCLOSE_KW = {}'.format(ALLCLOSE_KW)) - close = np.isclose(eps_mat_numerical, eps_mat_sympy, **ALLCLOSE_KW) - if not np.all(close): - logging.error( - 'Numerical NSI matrix:\n%s', - np.array2string(eps_mat_numerical, **ARY2STR_KW) - ) - logging.error( - 'Sympy NSI matrix:\n%s', np.array2string(eps_mat_sympy, **ARY2STR_KW) - ) - raise ValueError( - 'Sympy and numerical calculations disagree! Elementwise agreement:\n' - '%s' % close - ) - -def nsi_sympy_mat_mult( - eps_scale_val, - eps_prime_val, - phi12_val, - phi13_val, - phi23_val, - alpha1_val, - alpha2_val, - deltansi_val, -): - """Sympy calculation of generalised matter Hamiltonian.""" - # pylint: disable=invalid-name - from sympy import ( - cos, sin, - Matrix, eye, - I, re, im, - Symbol, symbols, - simplify, - init_printing - ) - from sympy.physics.quantum.dagger import Dagger - init_printing(use_unicode=True) - phi12, phi13, phi23 = symbols('phi12 phi13 phi23', real=True) - alpha1, alpha2 = symbols('alpha1 alpha2', real=True) - eps_scale, eps_prime = symbols('eps_scale eps_prime', real=True) - deltansi = Symbol('deltansi', real=True) - - Dmat = Matrix( - [[eps_scale, 0, 0], [0, eps_prime, 0], [0, 0, 0]] - ) - Qrel = Matrix( - [[cos(alpha1) + I * sin(alpha1), 0, 0], - [0, cos(alpha2) + I * sin(alpha2), 0], - [0, 0, cos(-(alpha1 + alpha2)) + I * sin(-(alpha1 + alpha2))]] - ) - R12 = Matrix( - [[cos(phi12), sin(phi12), 0], - [-sin(phi12), cos(phi12), 0], - [0, 0, 1]] - ) - R13 = Matrix( - [[cos(phi13), 0, sin(phi13)], - [0, 1, 0], - [-sin(phi13), 0, cos(phi13)]] - ) - R23_complex = Matrix( - [[1, 0, 0], - [0, cos(phi23), sin(phi23) * (cos(deltansi) + I * sin(-deltansi))], - [0, -sin(phi23) * (cos(deltansi) + I * sin(deltansi)), cos(phi23)]] - ) - - Umat = R12 * R13 * R23_complex - tmp = Dagger(Umat) * Dagger(Qrel) - tmp2 = Dmat * tmp - tmp3 = Umat * tmp2 - Hmat_sympy = Qrel * tmp3 - # subtract constant * id - Hmat_sympy_minus_mumu = Hmat_sympy - Hmat_sympy[1, 1] * eye(3) - Hmat_sympy_minus_mumu[0, 0] = Hmat_sympy_minus_mumu[0, 0] - 1 - eps_mat_sympy = Hmat_sympy_minus_mumu - # simplify - eps_mat_sympy_simpl = simplify(eps_mat_sympy) - # evaluate - eps_mat_sympy_eval = eps_mat_sympy_simpl.subs( - [(eps_scale, eps_scale_val), (eps_prime, eps_prime_val), - (phi12, phi12_val), (phi13, phi13_val), (phi23, phi23_val), - (alpha1, alpha1_val), (alpha2, alpha2_val), - (deltansi, deltansi_val)] - ) - # real part - eps_mat_sympy_eval_re = re(eps_mat_sympy_eval) - # imaginary part - eps_mat_sympy_eval_im = im(eps_mat_sympy_eval) - - # complex numpy array - return ( - np.array(eps_mat_sympy_eval_re) + np.array(eps_mat_sympy_eval_im) * 1.j - ).astype(CTYPE) - - -if __name__ == '__main__': - set_verbosity(Levels.INFO) - test_nsi_params() - test_nsi_parameterization() diff --git a/pisa/stages/osc/nusquids.py b/pisa/stages/osc/nusquids.py deleted file mode 100644 index d1cce5c29..000000000 --- a/pisa/stages/osc/nusquids.py +++ /dev/null @@ -1,932 +0,0 @@ -""" -nuSQuIDS oscillation probabilities with layered Earth model. - -This implementation supports several filtering and interpolation techniques designed -to deal with fast oscillations that occur in the presence of eV-scale sterile neutrinos. - -It is required that SQuIDS and nuSQuIDS are updated to include the layered Earth model -class `nuSQUIDSLayers` in nuSQuIDS as well as low-pass filtering and range averaging -methods in SQuIDS. - -The following forks/branches are comptible with this PISA stage, and their use is -recommended: - SQuIDS : https://github.com/ts4051/SQuIDS/tree/pisa - nuSQuIDS : https://github.com/ts4051/nuSQuIDS/tree/pisa -""" - -import math -import numpy as np -from scipy.interpolate import RectBivariateSpline - -from pisa import FTYPE, TARGET, PISA_NUM_THREADS -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile, line_profile -from pisa.stages.osc.layers import Layers -from pisa.core.binning import MultiDimBinning -from pisa.utils.resources import find_resource -from pisa import ureg - -import nuSQUIDSpy as nsq - -__all__ = ["nusquids"] - -__author__ = "T. Stuttard, T. Ehrhardt, A. Trettin" - - -class nusquids(Stage): - """ - PISA Pi stage for weighting events due to the effect of neutrino oscillations, using - nuSQuIDS as the oscillation probability calculator. One specialty here is that we - have to specify an additional binning to determine where to place nodes for the - exact calculation. The points where the actual probability is evaluated is - determined by calc_mode as usual and may be much finer than node_mode or even - event-wise since the interpolation step is fast. - - Parameters - ---------- - - Uses the standard parameters as required by a PISA pi stage - (see `pisa/core/stage.py`) - - node_mode : MultiDimBinning - Binning to determine where to place nodes at which the evaluation of interaction - states occurs. The nodes are places at the _corners_ of the binning to avoid - extrapolation. - - use_decoherence : bool - set to true to include neutrino decoherence in the oscillation probability - calculation - - num_decoherence_gamma : int - number of decoherence gamma parameters to be considered in the decoherence model - must be either 1 or 3 - - use_nsi : bool - set to true to include Non-Standard Interactions (NSI) in the oscillation - probability calculation - - num_neutrinos : int - Number of neutrino flavors to include. This stage supports 3 or 4 flavors, but - nuSQuIDS allows up to 6 such that this stage could easily be expanded. - - earth_model : str - Path to Earth model (PREM) file. - - detector_depth : quantity (distance) - - prop_height : quantity (distance) or str - Height at which neutrinos are produced. If a quantity is given, the height is - assumed to be the same for all neutrinos. An alternative is to pass - `from_container`. In that case, the stage will search the input container for a - key `prop_height` and take the height from there on a bin-wise or event-wise - basis depending on `calc_specs`. - - prop_height_range : quantity (distance) - Production height is averaged around the mean set by `prop_height` assuming - a uniform distribution in [mean - range/2, mean + range/2]. The production - heights are projected onto the direction of the neutrino, such that the - averaging range is longer for shallow angles above the horizon. - - apply_lowpass_above_hor : bool - Whether to apply the low-pass filter for evaluations above the horizon. If - `True` (default), the low-pass filter is applied everywhere. If `False`, the - filter is applied only below the horizon. Because propagation distances are - very short above the horizon, fast oscillations no longer average out and the - filter might wash out important features. - - apply_height_avg_below_hor : bool - Whether to apply the production height averaging below the horizon. If `True` - (default), the production height averaging is applied everywhere if a - `prop_height_range` is set. If `False`, the height averaging is only applied - above the horizon. Since the production height is only a very small fraction - of the total propagation distance below the horizon, the height averaging is - no longer important and a little bit of time can be saved by computing the - slightly cheaper non-averaged probabilities. - - YeI : quantity (dimensionless) - Inner electron fraction. - - YeO : quantity (dimensionless) - Outer electron fraction. - - YeM : quantity (dimensionless) - Mantle electron fraction. - - rel_err : float - Relative error of the numerical integration - - abs_err : float - Absolute error of the numerical integration - - prop_lowpass_cutoff : quantity (1/distance) - Frequency cutoff for fast oscillations applied during numerical integration - of the interaction state. The frequency is passed as oscillations per distance. - A reasonable order of magnitude would allow ~100 oscillations over 12000 km. - - prop_lowpass_frac : quantity (dimensionless) - This number determines how harsh the cut-off of the low-pass filter is applied - during numerical integration is. A value of 0.1 would mean that the filter would - begin to kick in when 90% of the cutoff frequency is reached and linearly - decrease oscillation amplitudes until the cutoff is reached. - - eval_lowpass_cutoff : quantity (1/distance) - Same as `prop_lowpass_cutoff`, but applied during evaluation of interpolated - states, not during integration. - - eval_lowpass_frac : quantity (1/distance) - Same as `prop_lowpass_frac`, but applied during evaluation of interpolated - states, not during integration. - - suppress_interpolation_warning : bool - Suppress warning about negative probabilities that can indicate insufficient - nodes in a problematic region of energy and coszen. Set this option only at your - own risk after you optimized nodes and are sure that remaining negative - probabilities won't be a problem! - - exact_mode : bool - With this turned on, the probabilities are evaluated using the exact calculation - for constant densities in every layer without numerical integration. This method - is much faster than the numerical integration for a node, but you lose the - option to project out probabilities from interaction picture states. In this - mode, nuSQuIDS behaves essentially like GLoBES with the same speed trade-off. - You cannot apply filters in this mode either. Its only recommended use is for - pseudo-data generation, where you may want an exact event-by-event calculation - that is allowed to take several minutes. - - vacuum : bool - Do not include matter effects. Greatly increases evaluation speed. - - params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: - theta12 : quantity (angle) - theta13 : quantity (angle) - theta23 : quantity (angle) - deltam21 : quantity (mass^2) - deltam31 : quantity (mass^2) - deltacp : quantity (angle) - Additional expected params if `num_neutrinos == 4` .. :: - theta14 : quantity (angle) - theta24 : quantity (angle) - deltam41 : quantity (mass^2) - deltacp14 : quantity (angle) - deltacp24 : quantity (angle) - - Additional ParamSet params expected when using the `use_decoherence` argument: - n_energy : quantity (dimensionless) - * If using `num_decoherence_gamma` == 1: - gamma : quantity (energy) - * If using `num_decoherence_gamma` == 3: - gamma12 : quantity (energy) - gamma13 : quantity (energy) - gamma23 : quantity (energy) - - """ - - def __init__( - self, - earth_model=None, - detector_depth=None, - prop_height=None, - prop_height_range=None, - YeI=None, - YeO=None, - YeM=None, - rel_err=None, - abs_err=None, - prop_lowpass_cutoff=None, - prop_lowpass_frac=None, - eval_lowpass_cutoff=None, - eval_lowpass_frac=None, - apply_lowpass_above_hor=True, - apply_height_avg_below_hor=True, - suppress_interpolation_warning=False, - node_mode=None, - use_decoherence=False, - num_decoherence_gamma=1, - use_nsi=False, - num_neutrinos=3, - use_taus=False, - exact_mode=False, - vacuum=False, - **std_kwargs, - ): - - # Checks - if use_nsi: - raise NotImplementedError("NSI not implemented") - if type(prop_height) is not ureg.Quantity: - raise NotImplementedError( - "Getting propagation heights from containers is " - "not yet implemented, saw {} type".format(type(prop_height)) - ) - - # Store args - self.num_neutrinos = int(num_neutrinos) - assert ( - self.num_neutrinos < 5 - ), "currently only supports up to 4 flavor oscillations" - self.use_nsi = use_nsi - self.use_decoherence = use_decoherence - self.num_decoherence_gamma = num_decoherence_gamma - self.node_mode = node_mode - self.vacuum = vacuum - self.use_taus = use_taus - self.earth_model = earth_model - self.YeI = YeI.m_as("dimensionless") - self.YeO = YeO.m_as("dimensionless") - self.YeM = YeM.m_as("dimensionless") - self.detector_depth = detector_depth.m_as("km") - self.prop_height = prop_height.m_as("km") - self.avg_height = False - self.concurrent_threads = PISA_NUM_THREADS if TARGET == "parallel" else 1 - self.prop_height_range = None - self.apply_height_avg_below_hor = apply_height_avg_below_hor - if prop_height_range is not None: # this is optional - self.prop_height_range = prop_height_range.m_as("km") - self.avg_height = True - - self.layers = None - - self.rel_err = rel_err.m_as("dimensionless") if rel_err is not None else 1.0e-10 - self.abs_err = abs_err.m_as("dimensionless") if abs_err is not None else 1.0e-10 - self.prop_lowpass_cutoff = ( - prop_lowpass_cutoff.m_as("1/km") if prop_lowpass_cutoff is not None else 0.0 - ) - self.prop_lowpass_frac = ( - prop_lowpass_frac.m_as("dimensionless") - if prop_lowpass_frac is not None - else 0.0 - ) - self.eval_lowpass_cutoff = ( - eval_lowpass_cutoff.m_as("1/km") if eval_lowpass_cutoff is not None else 0.0 - ) - self.eval_lowpass_frac = ( - eval_lowpass_frac.m_as("dimensionless") - if eval_lowpass_frac is not None - else 0.0 - ) - - if self.prop_lowpass_frac > 1.0 or self.eval_lowpass_frac > 1.0: - raise ValueError("lowpass filter fraction cannot be greater than one") - - if self.prop_lowpass_frac < 0.0 or self.eval_lowpass_frac < 0.0: - raise ValueError("lowpass filter fraction cannot be smaller than zero") - - self.apply_lowpass_above_hor = apply_lowpass_above_hor - - self.nus_layer = None - self.nus_layerbar = None - - # Define the layers class - self.nusquids_layers_class = nsq.nuSQUIDSLayers - - # Define standard params - expected_params = [ - "theta12", - "theta13", - "theta23", - "deltam21", - "deltam31", - "deltacp", - ] - - # Add decoherence parameters - if self.use_decoherence: - # Use derived nuSQuIDS classes - import nuSQUIDSDecohPy - - self.nusquids_layers_class = nuSQUIDSDecohPy.nuSQUIDSDecohLayers - # Checks - assert ( - self.num_neutrinos == 3 - ), "Decoherence only supports 3 neutrinos currently" - # Add decoherence params - expected_params.extend(["gamma0"]) - expected_params.extend(["n"]) - expected_params.extend(["E0"]) - - # We may want to reparametrize this with the difference between deltacp14 and - # deltacp24, as the absolute value seems to play a small role (see - # https://arxiv.org/pdf/2010.06321.pdf) - if self.num_neutrinos == 4: - expected_params.extend( - [ - "theta14", - "theta24", - "theta34", - "deltam41", - "deltacp14", - "deltacp24", - ] - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - # This is special: We have an additional "binning" to account for. It is in - # principle possible to work in event mode even for the nodes, which would mean - # that the full oscillation problem is solved for all events individually. - # Together with the constant oscillation mode, this can be used to calculate - # probabilities in exact mode in a time that is reasonable at least for - # generating pseudodata. - - assert not (self.use_nsi and self.use_decoherence), ( - "NSI and decoherence not " "suported together, must use one or the other" - ) - - self.exact_mode = exact_mode - - if exact_mode: - # No interpolation is happening in exact mode so any passed node_mode - # will be ignored. Probabilities are calculated at calc_specs. - if self.node_mode is not None: - logging.warn( - "nuSQuIDS is configured in exact mode, the passed " - f"`node_mode`\n({self.node_mode})\n will be ignored!" - ) - if self.prop_lowpass_cutoff > 0 or self.eval_lowpass_cutoff > 0: - logging.warn( - "nuSQuIDS is configured in exact mode, low-pass filters " - "will be ignored" - ) - else: - if isinstance(self.calc_mode, MultiDimBinning): - assert isinstance(self.node_mode, MultiDimBinning), ( - "cannot use " "event-wise nodes with binned calculation" - ) - - self.e_node_mode = None - self.e_mesh = None - self.coszen_node_mode = None - self.cosz_mesh = None - - # We don't want to spam the user with repeated warnings about the same issue. - self.interpolation_warning_issued = suppress_interpolation_warning - - def set_osc_parameters(self, nus_layer): - # nuSQuIDS uses zero-index for mixing angles - nus_layer.Set_MixingAngle(0, 1, self.params.theta12.value.m_as("rad")) - nus_layer.Set_MixingAngle(0, 2, self.params.theta13.value.m_as("rad")) - nus_layer.Set_MixingAngle(1, 2, self.params.theta23.value.m_as("rad")) - - # mass differences in nuSQuIDS are always w.r.t. m_1 - nus_layer.Set_SquareMassDifference(1, self.params.deltam21.value.m_as("eV**2")) - nus_layer.Set_SquareMassDifference(2, self.params.deltam31.value.m_as("eV**2")) - - nus_layer.Set_CPPhase(0, 2, self.params.deltacp.value.m_as("rad")) - - # set decoherence parameters - if self.use_decoherence: - nsq_units = nsq.Const() # TODO Once only (make into a member) - gamma0 = self.params.gamma0.value.m_as("eV") * nsq_units.eV - gamma0_matrix_diagonal = np.array( - [0.0, gamma0, gamma0, gamma0, gamma0, gamma0, gamma0, gamma0, gamma0] - ) # "State selection" case (see arXiv:2007.00068 eqn 11) #TODO implement other models - nus_layer.Set_DecoherenceGammaMatrixDiagonal(gamma0_matrix_diagonal) - nus_layer.Set_DecoherenceGammaEnergyDependence( - self.params.n.value.m_as("dimensionless") - ) - nus_layer.Set_DecoherenceGammaEnergyScale( - self.params.E0.value.m_as("eV") * nsq_units.eV - ) - - if self.num_neutrinos == 3: - return - - nus_layer.Set_MixingAngle(0, 3, self.params.theta14.value.m_as("rad")) - nus_layer.Set_MixingAngle(1, 3, self.params.theta24.value.m_as("rad")) - nus_layer.Set_MixingAngle(2, 3, self.params.theta34.value.m_as("rad")) - nus_layer.Set_SquareMassDifference(3, self.params.deltam41.value.m_as("eV**2")) - nus_layer.Set_CPPhase(0, 3, self.params.deltacp14.value.m_as("rad")) - nus_layer.Set_CPPhase(1, 3, self.params.deltacp24.value.m_as("rad")) - # TODO: Implement NSI, decoherence - - def apply_prop_settings(self, nus_layer): - nsq_units = nsq.Const() - nus_layer.Set_rel_error(self.rel_err) - nus_layer.Set_abs_error(self.abs_err) - nus_layer.Set_EvolLowPassCutoff(self.prop_lowpass_cutoff / nsq_units.km) - # The ramp of the low-pass filter starts to drop at (cutoff - scale) - scale = self.prop_lowpass_frac * self.prop_lowpass_cutoff / nsq_units.km - nus_layer.Set_EvolLowPassScale(scale) - nus_layer.Set_AllowConstantDensityOscillationOnlyEvolution(self.exact_mode) - nus_layer.Set_EvalThreads(self.concurrent_threads) - - def setup_function(self): - - earth_model = find_resource(self.earth_model) - prop_height = self.prop_height - detector_depth = self.detector_depth - self.layers = Layers(earth_model, detector_depth, prop_height) - # We must treat densities and electron fractions correctly here, so we set them - # to 1 in the Layers module to get unweighted densities. - self.layers.setElecFrac(1, 1, 1) - - nsq_units = nsq.Const() # natural units for nusquids - # Because we don't want to extrapolate, we check that all points at which we - # want to evaluate probabilities are fully contained within the node specs. This - # is of course not necessary in events mode. - if isinstance(self.node_mode, MultiDimBinning) and not self.exact_mode: - logging.debug("setting up nuSQuIDS nodes in binned mode") - # we can prepare the calculator like this only in binned mode, see - # compute_function for node_mode == "events" - self.data.representation = self.calc_mode - for container in self.data: - for var in ["true_coszen", "true_energy"]: - unit = "dimensionless" if var == "true_coszen" else "GeV" - upper_bound = np.max(self.node_mode[var].bin_edges.m_as(unit)) - lower_bound = np.min(self.node_mode[var].bin_edges.m_as(unit)) - err_msg = ( - "The outer edges of the node_mode must encompass " - "the entire range of calc_specs to avoid extrapolation" - ) - if np.any(container[var] > upper_bound): - maxval = np.max(container[var]) - raise ValueError( - err_msg + f"\nmax input: {maxval}, upper " - f"bound: {upper_bound}" - ) - if np.any(container[var] < lower_bound): - minval = np.max(container[var]) - raise ValueError( - err_msg + f"\nmin input: {minval}, lower " - f"bound: {lower_bound}" - ) - - # Layers in nuSQuIDS are special: We need all the individual distances and - # densities for the nodes to solve the interaction picture states, but on - # the final calculation grid (or events) we only need the *total* traversed - # distance. Because we are placing nodes at the bin edges rather than the - # bin middle, this doesn't really fit with how containers store data, so we - # are making arrays as variables that never go into the container. - - # These are stored because we need them later during interpolation - self.coszen_node_mode = self.node_mode["true_coszen"].bin_edges.m_as( - "dimensionless" - ) - self.e_node_mode = self.node_mode["true_energy"].bin_edges.m_as("GeV") - logging.debug( - f"Setting up nodes at\n" - f"cos_zen = \n{self.coszen_node_mode}\n" - f"energy = \n{self.e_node_mode}\n" - ) - # things are getting a bit meshy from here... - self.e_mesh, self.cosz_mesh = np.meshgrid( - self.e_node_mode, self.coszen_node_mode - ) - e_nodes = self.e_mesh.ravel() - coszen_nodes = self.cosz_mesh.ravel() - - # The lines below should not be necessary because we will always get at - # least two numbers from the bin edges. However, if either energy or coszen - # somehow was just a scalar, we would need to broadcast it out to the same - # size. Keeping the code in here in case you want to use the stage in 1D. - # convert lists to ndarrays and scalars to ndarrays with length 1 - e_nodes = np.atleast_1d(e_nodes) - coszen_nodes = np.atleast_1d(coszen_nodes) - # broadcast against each other and make a copy - # (see https://numpy.org/doc/stable/reference/generated/numpy.broadcast_arrays.html) - e_nodes, coszen_nodes = [ - np.array(a) for a in np.broadcast_arrays(e_nodes, coszen_nodes) - ] - - assert len(e_nodes) == len(coszen_nodes) - assert coszen_nodes.ndim == 1 - assert e_nodes.ndim == 1 - - self.layers.calcLayers(coszen_nodes) - distances = np.reshape( - self.layers.distance, (len(e_nodes), self.layers.max_layers) - ) - densities = np.reshape( - self.layers.density, (len(e_nodes), self.layers.max_layers) - ) - # HACK: We need the correct electron densities for each layer. We can - # determine whether we are in the core or mantle based on the density. - # Needless to say it isn't optimal to have these numbers hard-coded. - ye = np.zeros_like(densities) - ye[densities < 10] = self.YeM - ye[(densities >= 10) & (densities < 13)] = self.YeO - ye[densities >= 13] = self.YeI - self.nus_layer = self.nusquids_layers_class( - distances * nsq_units.km, - densities, - ye, - e_nodes * nsq_units.GeV, - self.num_neutrinos, - nsq.NeutrinoType.both, - ) - self.apply_prop_settings(self.nus_layer) - - # Now that we have our nusquids calculator set up on the node grid, we make - # container output space for the probability output which may be on a finer grid - # than the nodes or even working in events mode. - self.data.representation = self.calc_mode - - # --- calculate the layers --- - if isinstance(self.calc_mode, MultiDimBinning): - # as layers don't care about flavour - self.data.link_containers( - "nu", - [ - "nue_cc", - "numu_cc", - "nutau_cc", - "nue_nc", - "numu_nc", - "nutau_nc", - "nuebar_cc", - "numubar_cc", - "nutaubar_cc", - "nuebar_nc", - "numubar_nc", - "nutaubar_nc", - ], - ) - - # calculate the distance difference between minimum and maximum production - # height, if applicable - if self.avg_height: - layers_min = Layers( - earth_model, - detector_depth, - self.prop_height - self.prop_height_range / 2.0, - ) - layers_min.setElecFrac(1, 1, 1) - layers_max = Layers( - earth_model, - detector_depth, - self.prop_height + self.prop_height_range / 2.0, - ) - layers_max.setElecFrac(1, 1, 1) - - for container in self.data: - self.layers.calcLayers(container["true_coszen"]) - distances = self.layers.distance.reshape((container.size, -1)) - tot_distances = np.sum(distances, axis=1) - if self.avg_height: - layers_min.calcLayers(container["true_coszen"]) - dists_min = layers_min.distance.reshape((container.size, -1)) - min_tot_dists = np.sum(dists_min, axis=1) - - layers_max.calcLayers(container["true_coszen"]) - dists_max = layers_max.distance.reshape((container.size, -1)) - max_tot_dists = np.sum(dists_max, axis=1) - # nuSQuIDS assumes the original distance is the longest distance and - # the averaging range is the difference between the minimum and maximum - # distance. - avg_ranges = max_tot_dists - min_tot_dists - tot_distances = max_tot_dists - assert np.all(avg_ranges > 0) - # If the low-pass cutoff is zero, nusquids will not evaluate the filter. - container["lowpass_cutoff"] = self.eval_lowpass_cutoff * np.ones( - container.size - ) - if not self.apply_lowpass_above_hor: - container["lowpass_cutoff"] = np.where( - container["true_coszen"] >= 0, 0, container["lowpass_cutoff"] - ) - if isinstance(self.node_mode, MultiDimBinning) and not self.exact_mode: - # To project out probabilities we only need the *total* distance - container["tot_distances"] = tot_distances - if self.avg_height: - container["avg_ranges"] = avg_ranges - else: - container["avg_ranges"] = np.zeros(container.size, dtype=FTYPE) - if not self.apply_height_avg_below_hor: - container["avg_ranges"] = np.where( - container["true_coszen"] >= 0, container["avg_ranges"], 0.0 - ) - elif self.node_mode == "events" or self.exact_mode: - # in any other mode (events or exact) we store all densities and - # distances in the container in calc_specs - densities = self.layers.density.reshape((container.size, -1)) - container["densities"] = densities - container["distances"] = distances - - self.data.unlink_containers() - - if isinstance(self.calc_mode, MultiDimBinning): - self.data.link_containers("nue", ["nue_cc", "nue_nc"]) - self.data.link_containers("numu", ["numu_cc", "numu_nc"]) - self.data.link_containers("nutau", ["nutau_cc", "nutau_nc"]) - self.data.link_containers("nuebar", ["nuebar_cc", "nuebar_nc"]) - self.data.link_containers("numubar", ["numubar_cc", "numubar_nc"]) - self.data.link_containers("nutaubar", ["nutaubar_cc", "nutaubar_nc"]) - - # setup more empty arrays - for container in self.data: - container["prob_e"] = np.empty((container.size), dtype=FTYPE) - container["prob_mu"] = np.empty((container.size), dtype=FTYPE) - if self.use_taus: - container["prob_tau"] = np.empty((container.size), dtype=FTYPE) - - self.data.unlink_containers() - - if self.exact_mode: - return - - # --- containers for interpolated states --- - # This is not needed in exact mode - if isinstance(self.calc_mode, MultiDimBinning): - self.data.link_containers( - "nu", ["nue_cc", "numu_cc", "nutau_cc", "nue_nc", "numu_nc", "nutau_nc"] - ) - self.data.link_containers( - "nubar", - [ - "nuebar_cc", - "numubar_cc", - "nutaubar_cc", - "nuebar_nc", - "numubar_nc", - "nutaubar_nc", - ], - ) - for container in self.data: - container["interp_states_e"] = np.empty( - (container.size, self.num_neutrinos ** 2), - dtype=FTYPE, - ) - container["interp_states_mu"] = np.empty( - (container.size, self.num_neutrinos ** 2), - dtype=FTYPE, - ) - container["interp_states_tau"] = np.empty( - (container.size, self.num_neutrinos ** 2), - dtype=FTYPE, - ) - self.data.unlink_containers() - self.interpolation_warning_issued = False - - # @line_profile - def calc_node_probs(self, nus_layer, flav_in, flav_out, n_nodes): - """ - Evaluate oscillation probabilities at nodes. This does not require any - interpolation. - """ - ini_state = np.array([0] * self.num_neutrinos) - ini_state[flav_in] = 1 - nus_layer.Set_initial_state(ini_state, nsq.Basis.flavor) - if not self.vacuum: - nus_layer.EvolveState() - prob_nodes = nus_layer.EvalFlavorAtNodes(flav_out) - return prob_nodes - - def calc_interpolated_states(self, evolved_states, e_out, cosz_out): - """ - Calculate interpolated states at the energies and zenith angles requested. - """ - nsq_units = nsq.Const() - interp_states = np.zeros((e_out.size, evolved_states.shape[1])) - - assert np.all(e_out <= np.max(self.e_node_mode * nsq_units.GeV)) - assert np.all(e_out >= np.min(self.e_node_mode * nsq_units.GeV)) - assert np.all(cosz_out <= np.max(self.coszen_node_mode)) - assert np.all(cosz_out >= np.min(self.coszen_node_mode)) - - for i in range(evolved_states.shape[1]): - z = evolved_states[:, i].reshape(self.e_mesh.shape).T - assert np.all(np.isfinite(z)) - # RectBivariateSpline takes in the 1D node position and assumes that they - # are on a mesh. - f = RectBivariateSpline( - np.log10(self.e_node_mode * nsq_units.GeV), - self.coszen_node_mode, - z, - kx=2, - ky=2, - ) - interp_states[..., i] = f(np.log10(e_out), cosz_out, grid=False) - return interp_states - - def calc_probs_interp( - self, - flav_out, - nubar, - interp_states, - out_distances, - e_out, - avg_ranges=0, - lowpass_cutoff=0, - ): - """ - Project out probabilities from interpolated interaction picture states. - """ - nsq_units = nsq.Const() - - prob_interp = np.zeros(e_out.size) - scale = self.eval_lowpass_frac * lowpass_cutoff - prob_interp = self.nus_layer.EvalWithState( - flav_out, - out_distances, - e_out, - interp_states, - rho=int(nubar), - avg_cutoff=0.0, - avg_scale=0.0, - # Range averaging is only computed in the places where t_range > 0, so - # we don't need to introduce switches for averaged and non-averaged regions. - lowpass_cutoff=lowpass_cutoff, - lowpass_scale=scale, - t_range=avg_ranges, - ) - return prob_interp - - def compute_function_no_interpolation(self): - """ - Version of the compute function that does not use any interpolation between - nodes. - """ - nsq_units = nsq.Const() - # it is possible to work in binned calc mode while being in exact mode - if isinstance(self.calc_mode, MultiDimBinning): - self.data.link_containers("nue", ["nue_cc", "nue_nc"]) - self.data.link_containers("numu", ["numu_cc", "numu_nc"]) - self.data.link_containers("nutau", ["nutau_cc", "nutau_nc"]) - self.data.link_containers("nuebar", ["nuebar_cc", "nuebar_nc"]) - self.data.link_containers("numubar", ["numubar_cc", "numubar_nc"]) - self.data.link_containers("nutaubar", ["nutaubar_cc", "nutaubar_nc"]) - for container in self.data: - nubar = container["nubar"] < 0 - flav = container["flav"] - # HACK: We need the correct electron densities for each layer. We can - # determine whether we are in the core or mantle based on the density. - ye = np.zeros_like(container["densities"]) - ye[container["densities"] < 10] = self.YeM - ye[ - (container["densities"] >= 10) & (container["densities"] < 13) - ] = self.YeO - ye[container["densities"] >= 13] = self.YeI - nus_layer = self.nusquids_layers_class( - container["distances"] * nsq_units.km, - container["densities"], - ye, - container["true_energy"] * nsq_units.GeV, - self.num_neutrinos, - nsq.NeutrinoType.antineutrino if nubar else nsq.NeutrinoType.neutrino, - ) - self.apply_prop_settings(nus_layer) - self.set_osc_parameters(nus_layer) - container["prob_e"] = self.calc_node_probs( - nus_layer, 0, flav, container.size - ) - container["prob_mu"] = self.calc_node_probs( - nus_layer, 1, flav, container.size - ) - container.mark_changed("prob_e") - container.mark_changed("prob_mu") - if self.use_taus: - container["prob_tau"] = self.calc_node_probs( - nus_layer, 2, flav, container.size - ) - container.mark_changed("prob_tau") - self.data.unlink_containers() - - # @line_profile - def compute_function_interpolated(self): - """ - Version of the compute function that does use interpolation between nodes. - """ - nsq_units = nsq.Const() - # We need to make two evolutions, one for numu and the other for nue. - # These produce neutrino and antineutrino states at the same time thanks to - # the "both" neutrino mode of nuSQuIDS. - self.apply_prop_settings(self.nus_layer) - self.set_osc_parameters(self.nus_layer) - - ini_state_nue = np.array([1, 0, 0] + [0] * (self.num_neutrinos - 3)) - ini_state_numu = np.array([0, 1, 0] + [0] * (self.num_neutrinos - 3)) - ini_state_nutau = np.array([0, 0, 1] + [0] * (self.num_neutrinos - 3)) - - self.nus_layer.Set_initial_state(ini_state_nue, nsq.Basis.flavor) - if not self.vacuum: - self.nus_layer.EvolveState() - evolved_states_nue = self.nus_layer.GetStates(0) - evolved_states_nuebar = self.nus_layer.GetStates(1) - - self.nus_layer.Set_initial_state(ini_state_numu, nsq.Basis.flavor) - if not self.vacuum: - self.nus_layer.EvolveState() - evolved_states_numu = self.nus_layer.GetStates(0) - evolved_states_numubar = self.nus_layer.GetStates(1) - - if self.use_taus: - self.nus_layer.Set_initial_state(ini_state_nutau, nsq.Basis.flavor) - if not self.vacuum: - self.nus_layer.EvolveState() - evolved_states_nutau = self.nus_layer.GetStates(0) - evolved_states_nutaubar = self.nus_layer.GetStates(1) - - # Now comes the step where we interpolate the interaction picture states - # and project out oscillation probabilities. This can be done in either events - # or binned mode. - if isinstance(self.calc_mode, MultiDimBinning): - self.data.link_containers( - "nu", ["nue_cc", "numu_cc", "nutau_cc", "nue_nc", "numu_nc", "nutau_nc"] - ) - self.data.link_containers( - "nubar", - [ - "nuebar_cc", - "numubar_cc", - "nutaubar_cc", - "nuebar_nc", - "numubar_nc", - "nutaubar_nc", - ], - ) - for container in self.data: - nubar = container["nubar"] < 0 - container["interp_states_e"] = self.calc_interpolated_states( - evolved_states_nuebar if nubar else evolved_states_nue, - container["true_energy"] * nsq_units.GeV, - container["true_coszen"], - ) - container["interp_states_mu"] = self.calc_interpolated_states( - evolved_states_numubar if nubar else evolved_states_numu, - container["true_energy"] * nsq_units.GeV, - container["true_coszen"], - ) - if self.use_taus: - container["interp_states_tau"] = self.calc_interpolated_states( - evolved_states_nutaubar if nubar else evolved_states_nutau, - container["true_energy"] * nsq_units.GeV, - container["true_coszen"], - ) - self.data.unlink_containers() - - if isinstance(self.calc_mode, MultiDimBinning): - self.data.link_containers("nue", ["nue_cc", "nue_nc"]) - self.data.link_containers("numu", ["numu_cc", "numu_nc"]) - self.data.link_containers("nutau", ["nutau_cc", "nutau_nc"]) - self.data.link_containers("nuebar", ["nuebar_cc", "nuebar_nc"]) - self.data.link_containers("numubar", ["numubar_cc", "numubar_nc"]) - self.data.link_containers("nutaubar", ["nutaubar_cc", "nutaubar_nc"]) - - for container in self.data: - - nubar = container["nubar"] < 0 - flav_out = container["flav"] - input_flavs = ["e", "mu", "tau"] if self.use_taus else ["e", "mu"] - - for flav_in in input_flavs: - container["prob_" + flav_in] = self.calc_probs_interp( - flav_out=flav_out, - nubar=nubar, - interp_states=container["interp_states_" + flav_in], - out_distances=container["tot_distances"] * nsq_units.km, - e_out=container["true_energy"] * nsq_units.GeV, - avg_ranges=container["avg_ranges"] * nsq_units.km, - lowpass_cutoff=container["lowpass_cutoff"] / nsq_units.km, - ) - - # It is possible to get slightly negative probabilities from imperfect - # state interpolation between nodes. - # It's impractical to avoid any probability dipping below zero in every - # conceivable situation because that would require very dense node - # spacing. We get around this by flooring the probability at zero. - # However, dipping below zero by more than 1% may indicate that nodes - # aren't spaced tightly enough to achieve an acceptable accuracy, so we - # issue a warning. - if ( - np.any(container["prob_" + flav_in] < -0.01) - and not self.interpolation_warning_issued - ): - mask = container["prob_" + flav_in] < -0.01 - en_med = np.median(container["true_energy"][mask]) - cz_med = np.median(container["true_coszen"][mask]) - logging.warn( - f"Some probabilities in nu_{flav_in} -> {container.name} dip " - "below zero by more than 1%! This may indicate too few nodes " - f"in the problematic region. Median energy: {en_med}, median " - f"coszen: {cz_med}. This warning is only issued once." - ) - self.interpolation_warning_issued = True - container["prob_" + flav_in][container["prob_" + flav_in] < 0] = 0.0 - container.mark_changed("prob_e") - container.mark_changed("prob_mu") - if self.use_taus: - container.mark_changed("prob_tau") - self.data.unlink_containers() - - def compute_function(self): - if self.node_mode == "events" or self.exact_mode: - self.compute_function_no_interpolation() - else: - self.compute_function_interpolated() - - @profile - def apply_function(self): - for container in self.data: - scales = ( - container["nu_flux"][:, 0] * container["prob_e"] - + container["nu_flux"][:, 1] * container["prob_mu"] - ) - if self.use_taus: - scales += container["nu_flux"][:, 2] * container["prob_tau"] - container["weights"] = container["weights"] * scales diff --git a/pisa/stages/osc/osc_params.py b/pisa/stages/osc/osc_params.py deleted file mode 100644 index b37d8b0a3..000000000 --- a/pisa/stages/osc/osc_params.py +++ /dev/null @@ -1,308 +0,0 @@ -# author: T. Ehrhardt -# date: 2018 -""" -OscParams: Characterize neutrino oscillation parameters - (mixing angles, Dirac-type CP-violating phase, mass splittings) - -changed by Elisa Lohfink (ellohfin; elohfink@icecube.wisc.edu) -to include NSI changes made by Thomas Ehrhardt on his branch: -original version can be found in thehrh/pisa nsi_reparameterisation branch -""" - -from __future__ import division - -import numpy as np - -from pisa import FTYPE - -__all__ = ['OscParams'] - - -class OscParams(object): - """ - Holds neutrino oscillation parameters, i.e., mixing angles, squared-mass - differences, and a Dirac-type CPV phase. The neutrino mixing (PMNS) matrix - constructed from these parameters is given in the standard - 3x3 parameterization. Also holds the generalised matter potential matrix - (divided by the matter potential a), i.e. diag(1, 0, 0) for the standard - case. - - Parameters - ---------- - dm21, dm31, dm41 : float - Mass splittings (delta M^2_{21,31,41}) expected to be given in [eV^2] - - sin12, sin13, sin23 : float - 1-2, 1-3 and 2-3 mixing angles, interpreted as sin(theta_{ij}) - - deltacp : float - Value of CPV phase in [rad] - - - Attributes - ---------- - dm21, dm31, dm41 : float - Cf. parameters - - sin12, sin13, sin23, sin14 : float - Cf. parameters - - theta12, theta13, theta23, theta14 : float - Mixing angles (corresponding to sinXY) - - deltacp : float - Cf. parameters - - mix_matrix : 3d float array of shape (3, 3, 2) - Neutrino mixing (PMNS) matrix in standard parameterization. The third - dimension holds the real and imaginary parts of each matrix element. - - mix_matrix_complex : 3d complex array - - mix_matrix_reparam : 3d float array of shape (3, 3, 2) - Reparameterized neutrino mixing matrix, such that CPT invariance - of vacuum propagation implemented by 3 simultaneous osc. param. - transformations. - - mix_matrix_reparam_complex : 3d complex array - - dm_matrix : 2d float array of shape (3, 3) - Antisymmetric matrix of squared-mass differences in vacuum - - """ - def __init__(self): - - self._sin12 = 0. - self._sin13 = 0. - self._sin23 = 0. - self._sin14 = 0. - self._deltacp = 0. - self.dm21 = 0. - self.dm31 = 0. - self.dm41 = 0. - self.gamma21 = 0. # TODO Add full 3x3 matrix option, TODO update docs, TODO getters/setters to enforce values ranges? - self.gamma31 = 0. - self.gamma32 = 0. - - # --- theta12 --- - @property - def sin12(self): - """Sine of 1-2 mixing angle""" - return self._sin12 - - @sin12.setter - def sin12(self, value): - assert (abs(value) <= 1) - self._sin12 = value - - @property - def theta12(self): - return np.arcsin(self.sin12) - - @theta12.setter - def theta12(self, value): - self.sin12 = np.sin(value) - - # --- theta13 --- - @property - def sin13(self): - """Sine of 1-3 mixing angle""" - return self._sin13 - - @sin13.setter - def sin13(self, value): - assert (abs(value) <= 1) - self._sin13 = value - - @property - def theta13(self): - return np.arcsin(self.sin13) - - @theta13.setter - def theta13(self, value): - self.sin13 = np.sin(value) - - # --- theta23 --- - @property - def sin23(self): - """Sine of 2-3 mixing angle""" - return self._sin23 - - @sin23.setter - def sin23(self, value): - assert (abs(value) <= 1) - self._sin23 = value - - @property - def theta23(self): - return np.arcsin(self.sin23) - - @theta23.setter - def theta23(self, value): - self.sin23 = np.sin(value) - - # --- theta14 --- - @property - def sin14(self): - """Sine of 1-4 mixing angle""" - return self._sin14 - - @sin14.setter - def sin14(self, value): - assert (abs(value) <= 1) - self._sin14 = value - - @property - def theta14(self): - return np.arcsin(self.sin14) - - @theta14.setter - def theta14(self, value): - self.sin14 = np.sin(value) - - # --- deltaCP --- - @property - def deltacp(self): - """CPV phase""" - return self._deltacp - - @deltacp.setter - def deltacp(self, value): - assert value >= 0. and value <= 2*np.pi - self._deltacp = value - - @property - def mix_matrix(self): - """Neutrino mixing matrix in its 'standard' form""" - mix = np.zeros((3, 3, 2), dtype=FTYPE) - - sd = np.sin(self.deltacp) - cd = np.cos(self.deltacp) - - c12 = np.sqrt(1. - self.sin12**2) - c23 = np.sqrt(1. - self.sin23**2) - c13 = np.sqrt(1. - self.sin13**2) - - mix[0, 0, 0] = c12 * c13 - mix[0, 0, 1] = 0. - mix[0, 1, 0] = self.sin12 * c13 - mix[0, 1, 1] = 0. - mix[0, 2, 0] = self.sin13 * cd - mix[0, 2, 1] = - self.sin13 * sd - mix[1, 0, 0] = - self.sin12 * c23 - c12 * self.sin23 * self.sin13 * cd - mix[1, 0, 1] = - c12 * self.sin23 * self.sin13 * sd - mix[1, 1, 0] = c12 * c23 - self.sin12 * self.sin23 * self.sin13 * cd - mix[1, 1, 1] = - self.sin12 * self.sin23 * self.sin13 * sd - mix[1, 2, 0] = self.sin23 * c13 - mix[1, 2, 1] = 0. - mix[2, 0, 0] = self.sin12 * self.sin23 - c12 * c23 * self.sin13 * cd - mix[2, 0, 1] = - c12 * c23 * self.sin13 * sd - mix[2, 1, 0] = - c12 * self.sin23 - self.sin12 * c23 * self.sin13 * cd - mix[2, 1, 1] = - self.sin12 * c23 * self.sin13 * sd - mix[2, 2, 0] = c23 * c13 - mix[2, 2, 1] = 0. - - return mix - - @property - def mix_matrix_complex(self): - """Mixing matrix as complex 2-d array""" - mix = self.mix_matrix - return mix[:, :, 0] + mix[:, :, 1] * 1.j - - @property - def mix_matrix_reparam(self): - """ - Neutrino mixing matrix reparameterised in a way - such that the CPT trafo Hvac -> -Hvac* is exactly implemented by - the simultaneous transformations - * deltamsq31 -> -deltamsq32 - * theta12 -> pi/2 - theta12 - * deltacp -> pi - deltacp - - which hence leave vacuum propagation invariant. - - This representation follows from the standard form U - as diag(exp(i*deltacp), 0, 0) * U * diag(exp(-i*deltacp), 0, 0). - - """ - mix = np.zeros((3, 3, 2), dtype=FTYPE) - - sd = np.sin(self.deltacp) - cd = np.cos(self.deltacp) - - c12 = np.sqrt(1. - self.sin12**2) - c23 = np.sqrt(1. - self.sin23**2) - c13 = np.sqrt(1. - self.sin13**2) - - mix[0, 0, 0] = c12 * c13 - mix[0, 0, 1] = 0. - mix[0, 1, 0] = self.sin12 * c13 * cd - mix[0, 1, 1] = self.sin12 * c13 * sd - mix[0, 2, 0] = self.sin13 - mix[0, 2, 1] = 0. - mix[1, 0, 0] = - self.sin12 * c23 * cd - c12 * self.sin23 * self.sin13 - mix[1, 0, 1] = self.sin12 * c23 * sd - mix[1, 1, 0] = c12 * c23 - self.sin12 * self.sin23 * self.sin13 * cd - mix[1, 1, 1] = - self.sin12 * self.sin23 * self.sin13 * sd - mix[1, 2, 0] = self.sin23 * c13 - mix[1, 2, 1] = 0. - mix[2, 0, 0] = self.sin12 * self.sin23 * cd - c12 * c23 * self.sin13 - mix[2, 0, 1] = - self.sin12 * self.sin23 * sd - mix[2, 1, 0] = - c12 * self.sin23 - self.sin12 * c23 * self.sin13 * cd - mix[2, 1, 1] = - self.sin12 * c23 * self.sin13 * sd - mix[2, 2, 0] = c23 * c13 - mix[2, 2, 1] = 0. - - return mix - - @property - def mix_matrix_reparam_complex(self): - """Reparameterised mixing matrix as complex 2-d array""" - mix_reparam = self.mix_matrix_reparam - return mix_reparam[:, :, 0] + mix_reparam[:, :, 1] * 1.j - - @property - def dm_matrix(self): - """Neutrino mass splitting matrix in vacuum""" - dmVacVac = np.zeros((3, 3), dtype=FTYPE) - mVac = np.zeros(3, dtype=FTYPE) - delta = 5.e-9 - - mVac[0] = 0. - mVac[1] = self.dm21 - mVac[2] = self.dm31 - - # Break any degeneracies - if mVac[1] == 0.: - mVac[0] -= delta - if mVac[2] == 0.: - mVac[2] += delta - - dmVacVac[0, 0] = 0. - dmVacVac[1, 1] = 0. - dmVacVac[2, 2] = 0. - dmVacVac[0, 1] = mVac[0] - mVac[1] - dmVacVac[1, 0] = - dmVacVac[0, 1] - dmVacVac[0, 2] = mVac[0] - mVac[2] - dmVacVac[2, 0] = - dmVacVac[0, 2] - dmVacVac[1, 2] = mVac[1] - mVac[2] - dmVacVac[2, 1] = - dmVacVac[1, 2] - - return dmVacVac - - -def test_osc_params(): - """ - # TODO: implement me! - """ - pass - - -if __name__=='__main__': - from pisa import TARGET - from pisa.utils.log import set_verbosity, logging - assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" - set_verbosity(1) - test_osc_params() - diff --git a/pisa/stages/osc/prob3.py b/pisa/stages/osc/prob3.py deleted file mode 100644 index 55c6a7150..000000000 --- a/pisa/stages/osc/prob3.py +++ /dev/null @@ -1,494 +0,0 @@ -""" -PISA pi stage for the calculation of earth layers and osc. probabilities - -Maybe it would amke sense to split this up into a separate earth layer stage -and an osc. stage....todo - -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, CTYPE, TARGET, ureg -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.stages.osc.nsi_params import StdNSIParams, VacuumLikeNSIParams -from pisa.stages.osc.osc_params import OscParams -from pisa.stages.osc.decay_params import DecayParams -from pisa.stages.osc.lri_params import LRIParams -from pisa.stages.osc.scaling_params import Mass_scaling, Core_scaling_w_constrain, Core_scaling_wo_constrain -from pisa.stages.osc.layers import Layers -from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import propagate_array, fill_probs -from pisa.utils.numba_tools import WHERE -from pisa.utils.resources import find_resource - - -class prob3(Stage): - """ - Prob3-like oscillation PISA Pi class - - Parameters - ---------- - params - Expected params .. :: - - detector_depth : float - earth_model : PREM file path - prop_height : quantity (dimensionless) - YeI : quantity (dimensionless) - YeO : quantity (dimensionless) - YeM : quantity (dimensionless) - density_scale : quantity (dimensionless) - core_density_scale : quantity (dimensionless) - innermantle_density_scale : quantity (dimensionless) - middlemantle_density_scale : quantity (dimensionless) - theta12 : quantity (angle) - theta13 : quantity (angle) - theta23 : quantity (angle) - deltam21 : quantity (mass^2) - deltam31 : quantity (mass^2) - deltacp : quantity (angle) - eps_scale : quantity(dimensionless) - eps_prime : quantity(dimensionless) - phi12 : quantity(angle) - phi13 : quantity(angle) - phi23 : quantity(angle) - alpha1 : quantity(angle) - alpha2 : quantity(angle) - deltansi : quantity(angle) - eps_ee : quantity (dimensionless) - eps_emu_magn : quantity (dimensionless) - eps_emu_phase : quantity (angle) - eps_etau_magn : quantity (dimensionless) - eps_etau_phase : quantity (angle) - eps_mumu : quantity(dimensionless) - eps_mutau_magn : quantity (dimensionless) - eps_mutau_phase : quantity (angle) - eps_tautau : quantity (dimensionless) - decay_alpha3 : quantity (energy^2) - v_lri : quantity (eV) - - - **kwargs - Other kwargs are handled by Stage - ----- - - """ - - def __init__( - self, - nsi_type=None, - reparam_mix_matrix=False, - neutrino_decay=False, - tomography_type=None, - lri_type=None, - **std_kwargs, - ): - - expected_params = ( - 'detector_depth', - 'earth_model', - 'prop_height', - 'YeI', - 'YeO', - 'YeM', - 'theta12', - 'theta13', - 'theta23', - 'deltam21', - 'deltam31', - 'deltacp' - ) - - - # Check whether and if so with which NSI parameters we are to work. - if nsi_type is not None: - choices = ['standard', 'vacuum-like'] - nsi_type = nsi_type.strip().lower() - if not nsi_type in choices: - raise ValueError( - 'Chosen NSI type "%s" not available! Choose one of %s.' - % (nsi_type, choices) - ) - self.nsi_type = nsi_type - """Type of NSI to assume.""" - self.tomography_type = tomography_type - self.reparam_mix_matrix = reparam_mix_matrix - """Use a PMNS mixing matrix parameterisation that differs from - the standard one by an overall phase matrix - diag(e^(i*delta_CP), 1, 1). This has no impact on - oscillation probabilities in the *absence* of NSI.""" - - self.neutrino_decay = neutrino_decay - - if neutrino_decay: - self.decay_flag = 1 - else : - self.decay_flag = -1 - - """Invoke neutrino decay with neutrino oscillation.""" - - - if self.nsi_type is None: - nsi_params = () - elif self.nsi_type == 'vacuum-like': - nsi_params = ('eps_scale', - 'eps_prime', - 'phi12', - 'phi13', - 'phi23', - 'alpha1', - 'alpha2', - 'deltansi' - ) - elif self.nsi_type == 'standard': - nsi_params = ('eps_ee', - 'eps_emu_magn', - 'eps_emu_phase', - 'eps_etau_magn', - 'eps_etau_phase', - 'eps_mumu', - 'eps_mutau_magn', - 'eps_mutau_phase', - 'eps_tautau' - ) - - if self.neutrino_decay : - decay_params = ('decay_alpha3',) - else: - decay_params = () - - if lri_type is not None: - choices = ['emu-symmetry', 'etau-symmetry', 'mutau-symmetry'] - lri_type = lri_type.strip().lower() - if not lri_type in choices: - raise ValueError( - 'Chosen LRI symmetry type "%s" not available! Choose one of %s.' - % (lri_type, choices) - ) - self.lri_type = lri_type - - if self.lri_type is None: - lri_params = () - else: - lri_params = ('v_lri',) - - - if self.tomography_type == None: - tomography_params = () - elif self.tomography_type == 'mass_of_earth': - tomography_params = ('density_scale',) - elif self.tomography_type == 'mass_of_core_w_constrain': - tomography_params = ('core_density_scale',) - elif self.tomography_type == 'mass_of_core_wo_constrain': - tomography_params = ('core_density_scale', - 'innermantle_density_scale', - 'middlemantle_density_scale' - ) - - - expected_params = expected_params + nsi_params + decay_params + lri_params + tomography_params - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - self.layers = None - self.osc_params = None - self.nsi_params = None - self.tomography_params = None - self.decay_params = None - self.decay_matrix = None - self.lri_params = None - self.lri_pot = None - # Note that the interaction potential (Hamiltonian) just scales with the - # electron density N_e for propagation through the Earth, - # even(to very good approx.) in the presence of generalised interactions - # (NSI), which is why we can simply treat it as a constant here. - self.gen_mat_pot_matrix_complex = None - """Interaction Hamiltonian without the factor sqrt(2)*G_F*N_e.""" - self.YeI = None - self.YeO = None - self.YeM = None - - def setup_function(self): - - # object for oscillation parameters - self.osc_params = OscParams() - if self.reparam_mix_matrix: - logging.debug( - 'Working with reparameterizated version of mixing matrix.' - ) - else: - logging.debug( - 'Working with standard parameterization of mixing matrix.' - ) - if self.nsi_type == 'vacuum-like': - logging.debug('Working in vacuum-like NSI parameterization.') - self.nsi_params = VacuumLikeNSIParams() - elif self.nsi_type == 'standard': - logging.debug('Working in standard NSI parameterization.') - self.nsi_params = StdNSIParams() - - - if self.neutrino_decay: - logging.debug('Working with neutrino decay') - self.decay_params = DecayParams() - - if self.lri_type is not None: - logging.debug('Working with LRI') - self.lri_params = LRIParams() - - - if self.tomography_type == "mass_of_earth": - logging.debug('Working with a single density scaling factor.') - self.tomography_params = Mass_scaling() - elif self.tomography_type == "mass_of_core_w_constrain": - logging.debug('Working with different scaling for different layers.') - self.tomography_params = Core_scaling_w_constrain() - elif self.tomography_type == "mass_of_core_wo_constrain": - logging.debug('Working without any external constraints') - self.tomography_params = Core_scaling_wo_constrain() - - - - - - # setup the layers - #if self.params.earth_model.value is not None: - earth_model = find_resource(self.params.earth_model.value) - self.YeI = self.params.YeI.value.m_as('dimensionless') - self.YeO = self.params.YeO.value.m_as('dimensionless') - self.YeM = self.params.YeM.value.m_as('dimensionless') - prop_height = self.params.prop_height.value.m_as('km') - detector_depth = self.params.detector_depth.value.m_as('km') - self.layers = Layers(earth_model, detector_depth, prop_height) - self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) - - - # --- calculate the layers --- - if self.is_map: - # speed up calculation by adding links - # as layers don't care about flavour - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc', - 'nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - for container in self.data: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) - - # don't forget to un-link everything again - self.data.unlink_containers() - - # --- setup empty arrays --- - if self.is_map: - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - for container in self.data: - container['probability'] = np.empty((container.size, 3, 3), dtype=FTYPE) - self.data.unlink_containers() - - # setup more empty arrays - for container in self.data: - container['prob_e'] = np.empty((container.size), dtype=FTYPE) - container['prob_mu'] = np.empty((container.size), dtype=FTYPE) - - def calc_probs(self, nubar, e_array, rho_array, len_array, out): - ''' wrapper to execute osc. calc ''' - if self.reparam_mix_matrix: - mix_matrix = self.osc_params.mix_matrix_reparam_complex - else: - mix_matrix = self.osc_params.mix_matrix_complex - - logging.debug('mat pot:\n%s' - % self.gen_mat_pot_matrix_complex) - logging.debug('decay mat:\n%s' - % self.decay_matix) - - propagate_array(self.osc_params.dm_matrix, # pylint: disable = unexpected-keyword-arg, no-value-for-parameter - mix_matrix, - self.gen_mat_pot_matrix_complex, - self.decay_flag, - self.decay_matix, - self.lri_pot, - nubar, - e_array, - rho_array, - len_array, - out=out - ) - - def compute_function(self): - - if self.is_map: - # speed up calculation by adding links - self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', - 'nue_nc', 'numu_nc', 'nutau_nc']) - self.data.link_containers('nubar', ['nuebar_cc', 'numubar_cc', 'nutaubar_cc', - 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']) - - # this can be done in a more clever way (don't have to recalculate all paths) - YeI = self.params.YeI.value.m_as('dimensionless') - YeO = self.params.YeO.value.m_as('dimensionless') - YeM = self.params.YeM.value.m_as('dimensionless') - - if YeI != self.YeI or YeO != self.YeO or YeM != self.YeM: - self.YeI = YeI; self.YeO = YeO; self.YeM = YeM - self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) - for container in self.data: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - container['distances'] = self.layers.distance.reshape((container.size, self.layers.max_layers)) - - - # some safety checks on units - # trying to avoid issue of angles with no dimension being assumed to be radians - # here we enforce the user must speficy a valid angle unit - for angle_param in [self.params.theta12, self.params.theta13, self.params.theta23, self.params.deltacp] : - assert angle_param.value.units != ureg.dimensionless, "Param %s is dimensionless, but should have angle units [rad, degree]" % angle_param.name - - # --- update mixing params --- - self.osc_params.theta12 = self.params.theta12.value.m_as('rad') - self.osc_params.theta13 = self.params.theta13.value.m_as('rad') - self.osc_params.theta23 = self.params.theta23.value.m_as('rad') - self.osc_params.dm21 = self.params.deltam21.value.m_as('eV**2') - self.osc_params.dm31 = self.params.deltam31.value.m_as('eV**2') - self.osc_params.deltacp = self.params.deltacp.value.m_as('rad') - if self.nsi_type == 'vacuum-like': - self.nsi_params.eps_scale = self.params.eps_scale.value.m_as('dimensionless') - self.nsi_params.eps_prime = self.params.eps_prime.value.m_as('dimensionless') - self.nsi_params.phi12 = self.params.phi12.value.m_as('rad') - self.nsi_params.phi13 = self.params.phi13.value.m_as('rad') - self.nsi_params.phi23 = self.params.phi23.value.m_as('rad') - self.nsi_params.alpha1 = self.params.alpha1.value.m_as('rad') - self.nsi_params.alpha2 = self.params.alpha2.value.m_as('rad') - self.nsi_params.deltansi = self.params.deltansi.value.m_as('rad') - elif self.nsi_type == 'standard': - self.nsi_params.eps_ee = self.params.eps_ee.value.m_as('dimensionless') - self.nsi_params.eps_emu = ( - (self.params.eps_emu_magn.value.m_as('dimensionless'), - self.params.eps_emu_phase.value.m_as('rad')) - ) - self.nsi_params.eps_etau = ( - (self.params.eps_etau_magn.value.m_as('dimensionless'), - self.params.eps_etau_phase.value.m_as('rad')) - ) - self.nsi_params.eps_mumu = self.params.eps_mumu.value.m_as('dimensionless') - self.nsi_params.eps_mutau = ( - (self.params.eps_mutau_magn.value.m_as('dimensionless'), - self.params.eps_mutau_phase.value.m_as('rad')) - ) - self.nsi_params.eps_tautau = self.params.eps_tautau.value.m_as('dimensionless') - if self.neutrino_decay: - self.decay_params.decay_alpha3 = self.params.decay_alpha3.value.m_as('eV**2') - - if self.lri_type is not None: - self.lri_params.v_lri = self.params.v_lri.value.m_as('eV') - if self.tomography_type is not None: - if self.tomography_type == "mass_of_earth": - self.tomography_params.density_scale = self.params.density_scale.value.m_as('dimensionless') - self.layers.scaling(scaling_array=self.tomography_params.density_scale) - elif self.tomography_type == "mass_of_core_w_constrain": - self.tomography_params.core_density_scale = self.params.core_density_scale.value.m_as('dimensionless') - self.layers.scaling(scaling_array=self.tomography_params.scaling_array) - elif self.tomography_type == "mass_of_core_wo_constrain": - self.tomography_params.core_density_scale = self.params.core_density_scale.value.m_as('dimensionless') - self.tomography_params.innermantle_density_scale = self.params.innermantle_density_scale.value.m_as('dimensionless') - self.tomography_params.middlemantle_density_scale = self.params.middlemantle_density_scale.value.m_as('dimensionless') - self.layers.scaling(scaling_array=self.tomography_params.scaling_factor_array) - self.layers.setElecFrac(self.YeI, self.YeO, self.YeM) - for container in self.data: - self.layers.calcLayers(container['true_coszen']) - container['densities'] = self.layers.density.reshape((container.size, self.layers.max_layers)) - - - # now we can proceed to calculate the generalised matter potential matrix - std_mat_pot_matrix = np.zeros((3, 3), dtype=FTYPE) + 1.j * np.zeros((3, 3), dtype=FTYPE) - std_mat_pot_matrix[0, 0] += 1.0 - - # add effective nsi coupling matrix - if self.nsi_type is not None: - logging.debug('NSI matrix:\n%s' % self.nsi_params.eps_matrix) - self.gen_mat_pot_matrix_complex = ( - std_mat_pot_matrix + self.nsi_params.eps_matrix - ) - logging.debug('Using generalised matter potential:\n%s' - % self.gen_mat_pot_matrix_complex) - else: - self.gen_mat_pot_matrix_complex = std_mat_pot_matrix - logging.debug('Using standard matter potential:\n%s' - % self.gen_mat_pot_matrix_complex) - - if self.neutrino_decay: - self.decay_matix = self.decay_params.decay_matrix - logging.debug('Decay matrix:\n%s' % self.decay_params.decay_matrix) - else : - self.decay_matix = np.zeros((3, 3), dtype=FTYPE) + 1.j * np.zeros((3, 3), dtype=FTYPE) - - self.lri_pot = np.zeros((3, 3), dtype=FTYPE) - types_lri = ['emu-symmetry', 'etau-symmetry', 'etau-symmetry'] - if self.lri_type is not None: - if self.lri_type == 'emu-symmetry': - self.lri_pot = self.lri_params.potential_matrix_emu - elif self.lri_type == 'etau-symmetry': - self.lri_pot = self.lri_params.potential_matrix_etau - elif self.lri_type == 'mutau-symmetry': - self.lri_pot = self.lri_params.potential_matrix_mutau - else: - raise Exception("Implemented symmetries are" % types_lri) - - - for container in self.data: - self.calc_probs(container['nubar'], - container['true_energy'], - container['densities'], - container['distances'], - out=container['probability'], - ) - container.mark_changed('probability') - - # the following is flavour specific, hence unlink - self.data.unlink_containers() - - for container in self.data: - # initial electrons (0) - fill_probs(container['probability'], - 0, - container['flav'], - out=container['prob_e'], - ) - # initial muons (1) - fill_probs(container['probability'], - 1, - container['flav'], - out=container['prob_mu'], - ) - - container.mark_changed('prob_e') - container.mark_changed('prob_mu') - - - def apply_function(self): - - # maybe speed up like this? - #self.data.representation = self.calc_mode - #for container in self.data: - # container['oscillated_flux'] = (container['nu_flux'][:,0] * container['prob_e']) + (container['nu_flux'][:,1] * container['prob_mu']) - - #self.data.representation = self.apply_mode - - # update the outputted weights - for container in self.data: - container['weights'] *= (container['nu_flux'][:,0] * container['prob_e']) + (container['nu_flux'][:,1] * container['prob_mu']) - diff --git a/pisa/stages/osc/prob3numba/__init__.py b/pisa/stages/osc/prob3numba/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/osc/prob3numba/numba_osc_hostfuncs.py b/pisa/stages/osc/prob3numba/numba_osc_hostfuncs.py deleted file mode 100644 index 652784ca1..000000000 --- a/pisa/stages/osc/prob3numba/numba_osc_hostfuncs.py +++ /dev/null @@ -1,221 +0,0 @@ -# pylint: disable = invalid-name - -""" -Host function wrappers for numba_osc_kernels. -""" - -from __future__ import absolute_import, print_function, division - -__all__ = ["FX", "CX", "IX", "propagate_array", "fill_probs"] - -import numpy as np -from numba import guvectorize, njit - -from pisa import FTYPE, ITYPE, TARGET -from pisa.stages.osc.prob3numba.numba_osc_kernels import ( - # osc_probs_vacuum_kernel, - osc_probs_layers_kernel, - get_transition_matrix, - get_transition_matrix_massbasis, - get_H_vac, - get_H_decay, - get_H_mat, - get_dms, - get_dms_numerical, - get_product, - convert_from_mass_eigenstate, -) - - -assert FTYPE in [np.float32, np.float64], str(FTYPE) - -FX = "f4" if FTYPE == np.float32 else "f8" -"""Float string code to use, understood by both Numba and Numpy""" - -CX = "c8" if FTYPE == np.float32 else "c16" -"""Complex string code to use, understood by both Numba and Numpy""" - -IX = "i4" if ITYPE == np.int32 else "i8" -"""Signed integer string code to use, understood by both Numba and Numpy""" - - -# @guvectorize( -# [f"({FX}[:,:], {CX}[:,:], {IX}, {FX}, {FX}[:], {FX}[:,:])"], -# "(a,a), (a,a), (), (), (i) -> (a,a)", -# target=TARGET, -# ) -# def propagate_array_vacuum(dm, mix, nubar, energy, distances, probability): -# """wrapper to run `osc_probs_vacuum_kernel` from host (whether TARGET is -# "cuda" or "host")""" -# osc_probs_vacuum_kernel(dm, mix, nubar, energy, distances, probability) -# -# -# @njit([f"({FX}[:,:], {CX}[:,:], {IX}, {FX}, {FX}[:], {FX}[:,:])"], target=TARGET) -# def propagate_scalar_vacuum(dm, mix, nubar, energy, distances, probability): -# """wrapper to run `osc_probs_vacuum_kernel` from host (whether TARGET is -# "cuda" or "host")""" -# osc_probs_vacuum_kernel(dm, mix, nubar, energy, distances, probability) - - -@guvectorize( - [f"({FX}[:,:], {CX}[:,:], {CX}[:,:], {IX}, {CX}[:,:], {FX}[:,:], {IX}, {FX}, {FX}[:], {FX}[:], {FX}[:,:])"], - "(a,a), (a,a), (b,c), (), (b,c), (b,c), (), (), (i), (i) -> (a,a)", - target=TARGET, -) -def propagate_array(dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, densities, distances, probability): - """wrapper to run `osc_probs_layers_kernel` from host (whether TARGET - is "cuda" or "host")""" - osc_probs_layers_kernel( - dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, densities, distances, probability - ) - - -@njit( - [f"({FX}[:,:], {CX}[:,:], {CX}[:,:], {IX}, {CX}[:,:], {FX}[:,:], {IX}, {FX}, {FX}[:], {FX}[:], {FX}[:,:])"], - parallel=TARGET == "parallel" -) -def propagate_scalar( - dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, densities, distances, probability -): - """wrapper to run `osc_probs_layers_kernel` from host (whether TARGET - is "cuda" or "host")""" - osc_probs_layers_kernel( - dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, densities, distances, probability - ) - - -@njit( - [ - "(" - f"{IX}, " # nubar - f"{FX}, " # energy - f"{FX}, " # rho - f"{FX}, " # baseline - f"{CX}[:,:], " # mix_nubar - f"{CX}[:,:], " # mix_nubar_conj_transp - f"{CX}[:,:], " # mat_pot - f"{CX}[:,:], " # H_vac - f"{IX}, " # neutrino decay flag - f"{CX}[:,:], " # H_decay - f"{FX}[:,:], " # lri_pot - f"{FX}[:,:], " # dm - f"{CX}[:,:], " # transition_matrix - ")" - ], - parallel=TARGET == "parallel" -) -def get_transition_matrix_hostfunc( - nubar, - energy, - rho, - baseline, - mix_nubar, - mix_nubar_conj_transp, - mat_pot, - H_vac, - decay_flag, - H_decay, - lri_pot, - dm, - transition_matrix, -): - """wrapper to run `get_transition_matrix` from host (whether TARGET is - "cuda" or "host")""" - get_transition_matrix( - nubar, - energy, - rho, - baseline, - mix_nubar, - mix_nubar_conj_transp, - mat_pot, - H_vac, - decay_flag, - H_decay, - lri_pot, - dm, - transition_matrix, - ) - - -@njit([f"({FX}, {FX}, {CX}[:,:], {CX}[:,:], {CX}[:,:], {CX}[:,:])"], parallel=TARGET == "parallel") -def get_transition_matrix_massbasis_hostfunc( - baseline, - energy, - dm_mat, - dm_mat_mat, - H_full_mass_eigenstate_basis, - transition_matrix, -): - """wrapper to run `get_transition_matrix_massbasis` from host (whether - TARGET is "cuda" or "host")""" - get_transition_matrix_massbasis( - baseline, - energy, - dm_mat, - dm_mat_mat, - H_full_mass_eigenstate_basis, - transition_matrix, - ) - - -@njit([f"({CX}[:,:], {CX}[:,:], {FX}[:,:], {CX}[:,:])"], parallel=TARGET == "parallel") -def get_H_vac_hostfunc(mix_nubar, mix_nubar_conj_transp, dm_vac_vac, H_vac): - """wrapper to run `get_H_vac` from host (whether TARGET is "cuda" or "host")""" - get_H_vac(mix_nubar, mix_nubar_conj_transp, dm_vac_vac, H_vac) - -@njit([f"({CX}[:,:], {CX}[:,:], {FX}[:,:], {CX}[:,:])"], parallel=TARGET == "parallel") -def get_H_decay_hostfunc(mix_nubar, mix_nubar_conj_transp, mat_decay, H_decay): - """wrapper to run `get_H_decay` from host (whether TARGET is "cuda" or "host")""" - get_H_decay(mix_nubar, mix_nubar_conj_transp, mat_decay, H_decay) - -# @guvectorize( -# [f"({FX}, {CX}[:,:], {IX}, {CX}[:,:])"], "(), (m, m), () -> (m, m)" -# ) -@njit([f"({FX}, {CX}[:,:], {IX}, {CX}[:,:])"], parallel=TARGET == "parallel") -def get_H_mat_hostfunc(rho, mat_pot, nubar, H_mat): - """wrapper to run `get_H_mat` from host (whether TARGET is "cuda" or "host")""" - get_H_mat(rho, mat_pot, nubar, H_mat) - - -@njit([f"({FX}, {CX}[:,:], {FX}[:,:], {CX}[:,:], {CX}[:,:])"], parallel=TARGET == "parallel") -def get_dms_hostfunc(energy, H_full, dm_vac_vac, dm_mat_mat, dm_mat): - """wrapper to run `get_dms` from host (whether TARGET is "cuda" or "host")""" - get_dms(energy, H_full, dm_vac_vac, dm_mat_mat, dm_mat) - -@njit([f"({FX}, {CX}[:,:], {CX}[:,:], {CX}[:,:])"], parallel=TARGET == "parallel") -def get_dms_numerical_hostfunc(energy, H_full, dm_mat_mat, dm_mat): - """wrapper to run `get_dms` from host (whether TARGET is "cuda" or "host")""" - get_dms_numerical(energy, H_full, dm_mat_mat, dm_mat) - -@njit([f"({FX}, {CX}[:,:], {CX}[:,:], {CX}[:,:], {CX}[:,:,:])"], parallel=TARGET == "parallel") -def get_product_hostfunc( - energy, dm_mat, dm_mat_mat, H_full_mass_eigenstate_basis, product -): - """wrapper to run `get_product` from host (whether TARGET is "cuda" or "host")""" - get_product(energy, dm_mat, dm_mat_mat, H_full_mass_eigenstate_basis, product) - - -@njit([f"({IX}, {CX}[:,:], {CX}[:])"], parallel=TARGET == "parallel") -def convert_from_mass_eigenstate_hostfunc(state, mix_nubar, psi): - """wrapper to run `convert_from_mass_eigenstate` from host (whether TARGET - is "cuda" or "host")""" - convert_from_mass_eigenstate(state, mix_nubar, psi) - - -@guvectorize( - [f"({FX}[:,:], {IX}, {IX}, {FX}[:])"], "(a,b), (), () -> ()" -) -def fill_probs(probability, initial_flav, flav, out): - """Fill `out` with transition probabilities to go from `initial_flav` to - `flav`, from values in `probaility` matrix. - - Parameters - ---------- - probability : real 2d array - initial_flav : signed(?) int (int4 or int8) - flav : signed(?) int (int4 or int8) - out : real 1-d array - - """ - out[0] = probability[initial_flav, flav] diff --git a/pisa/stages/osc/prob3numba/numba_osc_kernels.py b/pisa/stages/osc/prob3numba/numba_osc_kernels.py deleted file mode 100644 index 9dee2c540..000000000 --- a/pisa/stages/osc/prob3numba/numba_osc_kernels.py +++ /dev/null @@ -1,902 +0,0 @@ -# pylint: disable = not-callable, invalid-name, too-many-nested-blocks - - -""" -Neutrino flavour oscillation in matter calculation -Based on the original prob3++ implementation of Roger Wendell -http://www.phy.duke.edu/~raw22/public/Prob3++/ (2012) - -See `numba_osc_tests.py` for unit tests of functions in this module. -""" - - -from __future__ import absolute_import, print_function, division - -__all__ = [ - # "osc_probs_vacuum_kernel", - "osc_probs_layers_kernel", - "get_transition_matrix", -] - -__version__ = "0.2" - -import cmath -import math -import numpy as np - -from pisa.utils.numba_tools import ( - myjit, - conjugate_transpose, - conjugate, - matrix_dot_matrix, - matrix_dot_vector, - clear_matrix, - copy_matrix, - cuda, - ctype, - ftype, -) - - -# TODO/FIXME: osc_probs_vacuum_kernel produces non-unitary results. No one -# should use this until the issue is resolved. - -# @myjit -# def osc_probs_vacuum_kernel(dm, mix, nubar, energy, distance_in_layer, osc_probs): -# """ Calculate vacumm mixing probabilities -# -# Parameters -# ---------- -# dm : real 2d array -# Mass splitting matrix, eV^2 -# -# mix : complex 2d array -# PMNS mixing matrix -# -# nubar : int -# +1 for neutrinos, -1 for antineutrinos -# -# energy : float -# Neutrino energy, GeV -# -# distance_in_layer : real 1d-array -# Baselines (will be summed up), km -# -# osc_probs : real 2d array (empty) -# Returned oscillation probabilities in the form: -# osc_prob[i,j] = probability of flavor i to oscillate into flavor j -# with 0 = electron, 1 = muon, 3 = tau -# -# -# Notes -# ----- -# This is largely unvalidated so far -# -# """ -# -# # no need to conjugate mix matrix, as we anyway only need real part -# # can this be right? -# -# clear_matrix(osc_probs) -# osc_probs_local = cuda.local.array(shape=(3, 3), dtype=ftype) -# -# # sum up length from all layers -# baseline = 0.0 -# for i in range(distance_in_layer.shape[0]): -# baseline += distance_in_layer[i] -# -# # make more precise 20081003 rvw -# l_over_e = 1.26693281 * baseline / energy -# s21 = math.sin(dm[1, 0] * l_over_e) -# s32 = math.sin(dm[2, 0] * l_over_e) -# s31 = math.sin((dm[2, 1] + dm[3, 2]) * l_over_e) -# -# # does anybody understand this loop? -# # ista = abs(*nutype) - 1 -# for ista in range(3): -# for iend in range(2): -# osc_probs_local[ista, iend] = ( -# (mix[ista, 0].real * mix[ista, 1].real * s21) ** 2 -# + (mix[ista, 1].real * mix[ista, 2].real * s32) ** 2 -# + (mix[ista, 2].real * mix[ista, 0].real * s31) ** 2 -# ) -# if iend == ista: -# osc_probs_local[ista, iend] = 1.0 - 4.0 * osc_probs_local[ista, iend] -# else: -# osc_probs_local[ista, iend] = -4.0 * osc_probs_local[ista, iend] -# -# osc_probs_local[ista, 2] = ( -# 1.0 - osc_probs_local[ista, 0] - osc_probs_local[ista, 1] -# ) -# -# # is this necessary? -# if nubar > 0: -# copy_matrix(osc_probs_local, osc_probs) -# else: -# for i in range(3): -# for j in range(3): -# osc_probs[i, j] = osc_probs_local[j, i] - - -@myjit -def osc_probs_layers_kernel( - dm, mix, mat_pot, decay_flag, mat_decay, lri_pot, nubar, energy, density_in_layer, distance_in_layer, osc_probs -): - """ Calculate oscillation probabilities - - given layers of length and density - - Parameters - ---------- - dm : real 2d array - Mass splitting matrix, eV^2 - - mix : complex 2d array - PMNS mixing matrix - - mat_pot : complex 2d array - Generalised matter potential matrix without "a" factor (will be - multiplied with "a" factor); set to diag([1, 0, 0]) for only standard - oscillations - - decay_flag: int - +1 forstandard oscillations + decay, -1 for standard oscillations - - mat_decay : complex 2d array - decay matrix with -j*alpha3 = [2,2] element - - lri_pot : real 2d array - Potential contribution due to matter with the consideration of - Long Range Interaction. this potential not a generalised one, so - it passed as a separate matrix. - - nubar : real int, scalar or Nd array (broadcast dim) - 1 for neutrinos, -1 for antineutrinos - - energy : real float, scalar or Nd array (broadcast dim) - Neutrino energy, GeV - - density_in_layer : real 1d array - Density of each layer, moles of electrons / cm^2 - - distance_in_layer : real 1d array - Distance of each layer traversed, km - - osc_probs : real (N+2)-d array (empty) - Returned oscillation probabilities in the form: - osc_prob[i,j] = probability of flavor i to oscillate into flavor j - with 0 = electron, 1 = muon, 3 = tau - - - Notes - ----- - !!! Right now, because of CUDA, the maximum number of layers - is hard coded and set to 120 (59Layer PREM + Atmosphere). - This is used for cached layer computation, where earth layer, which - are typically traversed twice (it's symmetric) are not recalculated - but rather cached.. - - """ - - # 3x3 complex - H_vac = cuda.local.array(shape=(3, 3), dtype=ctype) - H_decay = cuda.local.array(shape=(3, 3), dtype=ctype) - mix_nubar = cuda.local.array(shape=(3, 3), dtype=ctype) - mix_nubar_conj_transp = cuda.local.array(shape=(3, 3), dtype=ctype) - transition_product = cuda.local.array(shape=(3, 3), dtype=ctype) - transition_matrix = cuda.local.array(shape=(3, 3), dtype=ctype) - tmp = cuda.local.array(shape=(3, 3), dtype=ctype) - - clear_matrix(H_vac) - clear_matrix(H_decay) - clear_matrix(osc_probs) - - # 3-vector complex - raw_input_psi = cuda.local.array(shape=(3), dtype=ctype) - output_psi = cuda.local.array(shape=(3), dtype=ctype) - - use_mass_eigenstates = False - - cache = True - # cache = False - - # TODO: - # * ensure convention below is respected in MC reweighting - # (nubar > 0 for nu, < 0 for anti-nu) - # * nubar is passed in, so could already pass in the correct form - # of mixing matrix, i.e., possibly conjugated - if nubar > 0: - # in this case the mixing matrix is left untouched - copy_matrix(mix, mix_nubar) - - else: - # here we need to complex conjugate all entries - # (note that this only changes calculations with non-clear_matrix deltacp) - conjugate(mix, mix_nubar) - - conjugate_transpose(mix_nubar, mix_nubar_conj_transp) - - get_H_vac(mix_nubar, mix_nubar_conj_transp, dm, H_vac) - #Compute the decay matrix in the flavor basis - get_H_decay(mix_nubar, mix_nubar_conj_transp, mat_decay, H_decay) - - - if cache: - # allocate array to store all the transition matrices - # doesn't work in cuda...needs fixed shape - transition_matrices = cuda.local.array(shape=(120, 3, 3), dtype=ctype) - - # loop over layers - for i in range(distance_in_layer.shape[0]): - density = density_in_layer[i] - distance = distance_in_layer[i] - if distance > 0.0: - layer_matrix_index = -1 - # chaeck if exists - for j in range(i): - # if density_in_layer[j] == density and distance_in_layer[j] == distance: - if (abs(density_in_layer[j] - density) < 1e-5) and ( - abs(distance_in_layer[j] - distance) < 1e-5 - ): - layer_matrix_index = j - - # use from cached - if layer_matrix_index >= 0: - for j in range(3): - for k in range(3): - transition_matrices[i, j, k] = transition_matrices[ - layer_matrix_index, j, k - ] - - # only calculate if necessary - else: - get_transition_matrix( - nubar, - energy, - density, - distance, - mix_nubar, - mix_nubar_conj_transp, - mat_pot, - H_vac, - decay_flag, - H_decay, - lri_pot, - dm, - transition_matrix, - ) - # copy - for j in range(3): - for k in range(3): - transition_matrices[i, j, k] = transition_matrix[j, k] - else: - # identity matrix - for j in range(3): - for k in range(3): - if j == k: - transition_matrix[j, k] = 0.0 - else: - transition_matrix[j, k] = 1.0 - - # now multiply them all - first_layer = True - for i in range(distance_in_layer.shape[0]): - distance = distance_in_layer[i] - if distance > 0.0: - for j in range(3): - for k in range(3): - transition_matrix[j, k] = transition_matrices[i, j, k] - if first_layer: - copy_matrix(transition_matrix, transition_product) - first_layer = False - else: - matrix_dot_matrix(transition_matrix, transition_product, tmp) - copy_matrix(tmp, transition_product) - - else: - # non-cache loop - first_layer = True - for i in range(distance_in_layer.shape[0]): - density = density_in_layer[i] - distance = distance_in_layer[i] - # only do something if distance > 0. - if distance > 0.0: - get_transition_matrix( - nubar, - energy, - density, - distance, - mix_nubar, - mix_nubar_conj_transp, - mat_pot, - H_vac, - decay_flag, - H_decay, - lri_pot, - dm, - transition_matrix, - ) - if first_layer: - copy_matrix(transition_matrix, transition_product) - first_layer = False - else: - matrix_dot_matrix(transition_matrix, transition_product, tmp) - copy_matrix(tmp, transition_product) - - # convrt to flavour eigenstate basis - matrix_dot_matrix(transition_product, mix_nubar_conj_transp, tmp) - matrix_dot_matrix(mix_nubar, tmp, transition_product) - - # loop on neutrino types, and compute probability for neutrino i: - for i in range(3): - for j in range(3): - raw_input_psi[j] = 0.0 - - if use_mass_eigenstates: - convert_from_mass_eigenstate(i + 1, mix_nubar, raw_input_psi) - else: - raw_input_psi[i] = 1.0 - - - matrix_dot_vector(transition_product, raw_input_psi, output_psi) - - osc_probs[i][0] += output_psi[0].real ** 2 + output_psi[0].imag ** 2 - osc_probs[i][1] += output_psi[1].real ** 2 + output_psi[1].imag ** 2 - osc_probs[i][2] += output_psi[2].real ** 2 + output_psi[2].imag ** 2 - - -@myjit -def get_transition_matrix( - nubar, - energy, - rho, - baseline, - mix_nubar, - mix_nubar_conj_transp, - mat_pot, - H_vac, - decay_flag, - H_decay, - lri_pot, - dm, - transition_matrix, -): - """ Calculate neutrino flavour transition amplitude matrix - - Parameters - ---------- - nubar : int - +1 for neutrinos, -1 for antineutrinos - - energy : real float - Neutrino energy, GeV - - rho : real float - Electron number density (in moles/cm^3) (numerically, this is just the - product of electron fraction and mass density in g/cm^3, since the - number of grams per cm^3 corresponds to the number of moles of nucleons - per cm^3) - - baseline : real float - Baseline, km - - mix_nubar : complex 2d array - Mixing matrix, already conjugated if antineutrino - - mix_nubar_conj_transp : complex conjugate 2d array - Conjugate transpose of mix_nubar - - mat_pot : complex 2d array - Generalised matter potential matrix without "a" factor (will be - multiplied with "a" factor); set to diag([1, 0, 0]) for only standard - oscillations - - H_vac : complex 2d array - Hamiltonian in vacuum, without the 1/2E term - - H_decay : complex 2d array - Decay matrix, without the 1/2E term - - decay_flag: int - +1 forstandard oscillations + decay, -1 for standard oscillations - - lri_pot : real 2d array - Potential contribution due to matter with the consideration of - Long Range Interaction. this potential not a generalised one, so - it passed as a separate matrix. - - dm : real 2d array - Mass splitting matrix, eV^2 - - transition_matrix : complex 2d array (empty) - Transition matrix in mass eigenstate basis - - Notes - ----- - For neutrino (nubar > 0) or antineutrino (nubar < 0) with energy energy - traversing layer of matter of uniform density rho with thickness baseline - - """ - - H_mat = cuda.local.array(shape=(3, 3), dtype=ctype) - dm_mat = cuda.local.array(shape=(3, 3), dtype=ctype) - dm_mat_mat = cuda.local.array(shape=(3, 3), dtype=ctype) - #H_decay = cuda.local.array(shape=(3, 3), dtype=ctype) - H_full = cuda.local.array(shape=(3, 3), dtype=ctype) - tmp = cuda.local.array(shape=(3, 3), dtype=ctype) - H_full_mass_eigenstate_basis = cuda.local.array(shape=(3, 3), dtype=ctype) - - # Compute the matter potential including possible generalized interactions - # in the flavor basis - - get_H_mat(rho, mat_pot, nubar, H_mat) - - # Adding the LRI potential to H_mat(lri pot is 2d array with full of zeros in the absence of lri) - for i in range(3): - for j in range(3): - if nubar > 0: - H_mat[i, j] = H_mat[i, j] + lri_pot[i, j]*1e9 #eV/GeV - elif nubar < 0: - H_mat[i, j] = H_mat[i, j] - lri_pot[i, j]*1e9 #ev/Gev - - # Get the full Hamiltonian by adding together matter and vacuum parts - one_over_two_e = 0.5 / energy - - if (decay_flag == 1): - for i in range(3): - for j in range(3): - H_full[i, j] = (H_vac[i, j] + H_decay[i,j]) * one_over_two_e + H_mat[i, j] - - # Calculate modified mass eigenvalues in matter from the full Hamiltonian - get_dms_numerical(energy, H_full, dm_mat_mat, dm_mat) - - else: - for i in range(3): - for j in range(3): - H_full[i, j] = H_vac[i, j] * one_over_two_e + H_mat[i, j] - - - # Calculate modified mass eigenvalues in matter from the full Hamiltonian and - # the vacuum mass splittings - get_dms(energy, H_full, dm, dm_mat_mat, dm_mat) - - # Now we transform the full Hamiltonian back into the - # mass eigenstate basis so we don't need to compute products of the effective - # mixing matrix elements explicitly - matrix_dot_matrix(H_full, mix_nubar, tmp) - matrix_dot_matrix(mix_nubar_conj_transp, tmp, H_full_mass_eigenstate_basis) - - # We can now proceed to calculating the transition amplitude from the Hamiltonian - # in the mass basis and the effective mass splittings - get_transition_matrix_massbasis( - baseline, - energy, - dm_mat, - dm_mat_mat, - H_full_mass_eigenstate_basis, - transition_matrix, - ) - - -@myjit -def get_transition_matrix_massbasis( - baseline, - energy, - dm_mat, - dm_mat_mat, - H_full_mass_eigenstate_basis, - transition_matrix, -): - """ - Calculate the transition amplitude matrix - - Parameters - ---------- - baseline : float - Baseline traversed, km - - energy : float - Neutrino energy, GeV - - dm_mat : complex 2d array - - dm_mat_mat : complex 2d array - - H_full_mass_eigenstate_basis : complex 2d array - - transition_matrix : complex 2d array (empty) - Transition matrix in mass eigenstate basis - - Notes - ----- - - corrsponds to matrix A (equation 10) in original Barger paper - - take into account generic potential matrix (=Hamiltonian) - - """ - - product = cuda.local.array(shape=(3, 3, 3), dtype=ctype) - - clear_matrix(transition_matrix) - - get_product(energy, dm_mat, dm_mat_mat, H_full_mass_eigenstate_basis, product) - - # (1/2)*(1/(h_bar*c)) in units of GeV/(eV^2 km) - hbar_c_factor = 2.534 - - for k in range(3): - arg = -dm_mat[k, 0] * (baseline / energy) * hbar_c_factor - c = cmath.exp(arg * 1.0j) - for i in range(3): - for j in range(3): - transition_matrix[i, j] += c * product[i, j, k] - - -@myjit -def get_H_vac(mix_nubar, mix_nubar_conj_transp, dm_vac_vac, H_vac): - """ Calculate vacuum Hamiltonian in flavor basis for neutrino or antineutrino - - Parameters: - ----------- - mix_nubar : complex 2d array - Mixing matrix, already conjugated if antineutrino - - mix_nubar_conj_transp : conjugate 2d array - Conjugate transpose of mix_nubar - - dm_vac_vac : 2d array - Matrix of mass splittings - - H_vac : complex 2d array - Hamiltonian in vacuum, without the 1/2E term - - - Notes - ------ - The Hailtonian does not contain the energy dependent factor of - 1/(2 * E), as it will be added later - - """ - - dm_vac_diag = cuda.local.array(shape=(3, 3), dtype=ctype) - tmp = cuda.local.array(shape=(3, 3), dtype=ctype) - - clear_matrix(dm_vac_diag) - - dm_vac_diag[1, 1] = dm_vac_vac[1, 0] + 0j - dm_vac_diag[2, 2] = dm_vac_vac[2, 0] + 0j - - matrix_dot_matrix(dm_vac_diag, mix_nubar_conj_transp, tmp) - matrix_dot_matrix(mix_nubar, tmp, H_vac) - -@myjit -def get_H_decay(mix_nubar, mix_nubar_conj_transp, mat_decay, H_decay): - """ Calculate decay Hamiltonian in flavor basis for neutrino or antineutrino - - Parameters: - ----------- - mix_nubar : complex 2d array - Mixing matrix, already conjugated if antineutrino - - mix_nubar_conj_transp : conjugate 2d array - Conjugate transpose of mix_nubar - - H_decay : complex 2d array - Hamiltonian for decay, without the 1/2E term - - - Notes - ------ - The Hailtonian does not contain the energy dependent factor of - 1/(2 * E), as it will be added later - - """ - - #dm_decay_diag = cuda.local.array(shape=(3, 3), dtype=ctype) - tmp = cuda.local.array(shape=(3, 3), dtype=ctype) - - clear_matrix(H_decay) - - #dm_decay_diag[2, 2] = 0. - 1.0j*alpha3 - - #matrix_dot_matrix(dm_decay_diag, mix_nubar_conj_transp, tmp) - matrix_dot_matrix(mat_decay, mix_nubar_conj_transp, tmp) - matrix_dot_matrix(mix_nubar, tmp, H_decay) - -@myjit -def get_H_mat(rho, mat_pot, nubar, H_mat): - """ Calculate matter Hamiltonian in flavor basis - - Parameters: - ----------- - rho : real float - Electron number density (in moles/cm^3) (numerically, this is just the - product of electron fraction and mass density in g/cm^3, since the - number of grams per cm^3 corresponds to the number of moles of nucleons - per cm^3) - - mat_pot : complex 2d array - Generalised matter potential matrix without "a" factor (will be - multiplied with "a" factor); set to diag([1, 0, 0]) for only standard - oscillations - - nubar : int - +1 for neutrinos, -1 for antineutrinos - - H_mat : complex 2d array (empty) - matter hamiltonian - - Notes - ----- - In the following, `a` is just the standard effective matter potential - induced by charged-current weak interactions with electrons - - """ - - # 2*sqrt(2)*Gfermi in (eV^2 cm^3)/(mole GeV) - tworttwoGf = 1.52588e-4 - a = 0.5 * rho * tworttwoGf - - # standard matter interaction Hamiltonian - clear_matrix(H_mat) - - # formalism of Hamiltonian: not 1+epsilon_ee^f in [0,0] element but just epsilon... - # changed when fitting in Thomas' NSI branch -EL - - # Obtain effective non-standard matter interaction Hamiltonian - # changed when fitting in Thomas' NSI branch -EL - for i in range(3): - for j in range(3): - # matter potential V -> -V* for anti-neutrinos - if nubar == -1: - H_mat[i, j] = -a * mat_pot[i, j].conjugate() - elif nubar == 1: - H_mat[i, j] = a * mat_pot[i, j] - -@myjit -def get_dms_numerical(energy, H_full, dm_mat_mat, dm_mat): - """Compute the matter-mass vector M, dM = M_i-M_j and dMimj - - Parameters - ---------- - energy : float - Neutrino energy, GeV - - H_full : complex 2d array - full hamiltonian - - dm_mat_mat : complex 2d array (empty) - - dm_mat : complex 2d array (empty) - - - Notes - ----- - Calculate mass eigenstates in matter - neutrino or anti-neutrino (type already taken into account in Hamiltonian) - of energy energy. - """ - - - m_mat = 2.0 * energy * np.linalg.eigvals(H_full) - - for i in range(3): - for j in range(3): - dm_mat_mat[i, j] = m_mat[i] - m_mat[j] - dm_mat[i, j] = m_mat[i] - -@myjit -def get_dms(energy, H_full, dm_vac_vac, dm_mat_mat, dm_mat): - """Compute the matter-mass vector M, dM = M_i-M_j and dMimj - - Parameters - ---------- - energy : float - Neutrino energy, GeV - - H_full : complex 2d array - full hamiltonian - - dm_vac_vac : 2d array - - dm_mat_mat : complex 2d array (empty) - - dm_mat : complex 2d array (empty) - - - Notes - ----- - Calculate mass eigenstates in matter - neutrino or anti-neutrino (type already taken into account in Hamiltonian) - of energy energy. - - - only god knows what happens in this function, somehow it seems to work - - """ - - # the following is for solving the characteristic polynomial of H_full: - # P(x) = x**3 + c2*x**2 + c1*x + c0 - real_product_a = (H_full[0, 1] * H_full[1, 2] * H_full[2, 0]).real - real_product_b = (H_full[0, 0] * H_full[1, 1] * H_full[2, 2]).real - - norm_H_e_mu_sq = H_full[0, 1].real ** 2 + H_full[0, 1].imag ** 2 - norm_H_e_tau_sq = H_full[0, 2].real ** 2 + H_full[0, 2].imag ** 2 - norm_H_mu_tau_sq = H_full[1, 2].real ** 2 + H_full[1, 2].imag ** 2 - - # c1 = H_{11} * H_{22} + H_{11} * H_{33} + H_{22} * H_{33} - # - |H_{12}|**2 - |H_{13}|**2 - |H_{23}|**2 - # given Hermiticity of Hamiltonian (real diagonal elements), - # this coefficient must be real - c1 = ( - (H_full[0, 0].real * (H_full[1, 1] + H_full[2, 2])).real - - (H_full[0, 0].imag * (H_full[1, 1] + H_full[2, 2])).imag - + (H_full[1, 1].real * H_full[2, 2]).real - - (H_full[1, 1].imag * H_full[2, 2]).imag - - norm_H_e_mu_sq - - norm_H_mu_tau_sq - - norm_H_e_tau_sq - ) - - # c0 = H_{11} * |H_{23}|**2 + H_{22} * |H_{13}|**2 + H_{33} * |H_{12}|**2 - # - H_{11} * H_{22} * H_{33} - 2*Re(H*_{13} * H_{12} * H_{23}) - # hence, this coefficient is also real - c0 = ( - H_full[0, 0].real * norm_H_mu_tau_sq - + H_full[1, 1].real * norm_H_e_tau_sq - + H_full[2, 2].real * norm_H_e_mu_sq - - 2.0 * real_product_a - - real_product_b - ) - - # c2 = -H_{11} - H_{22} - H_{33} - # hence, this coefficient is also real - c2 = -H_full[0, 0].real - H_full[1, 1].real - H_full[2, 2].real - - one_over_two_e = 0.5 / energy - one_third = 1.0 / 3.0 - two_third = 2.0 / 3.0 - - # we also have to perform the corresponding algebra - # for the vacuum case, where the relevant elements of the - # hamiltonian are mass differences - x = dm_vac_vac[1, 0] - y = dm_vac_vac[2, 0] - - c2_v = -one_over_two_e * (x + y) - - # p is real due to reality of c1 and c2 - p = c2 ** 2 - 3.0 * c1 - p_v = one_over_two_e ** 2 * (x ** 2 + y ** 2 - x * y) - p = max(0.0, p) - - # q is real - q = -13.5 * c0 - c2 ** 3 + 4.5 * c1 * c2 - q_v = one_over_two_e ** 3 * (x + y) * ((x + y) ** 2 - 4.5 * x * y) - - # we need the quantity p**3 - q**2 to obtain the eigenvalues, - # but let's prevent inaccuracies and instead write - tmp = 27 * (0.25 * c1 ** 2 * (p - c1) + c0 * (q + 6.75 * c0)) - # changed from p**3 - q**2 when fitting in Thomas' NSI branch -EL - # TODO: can we simplify this quantity to reduce numerical inaccuracies? - tmp_v = p_v ** 3 - q_v ** 2 - - tmp = max(0.0, tmp) - - theta = cuda.local.array(shape=(3), dtype=ftype) - theta_v = cuda.local.array(shape=(3), dtype=ftype) - m_mat = cuda.local.array(shape=(3), dtype=ftype) - m_mat_u = cuda.local.array(shape=(3), dtype=ftype) - m_mat_v = cuda.local.array(shape=(3), dtype=ftype) - - a = two_third * math.pi - # intermediate result, needed to calculate the three - # mass eigenvalues (theta0, theta1, theta2 are the three - # corresponding arguments of the cosine, see m_mat_u) - res = math.atan2(math.sqrt(tmp), q) * one_third - theta[0] = res + a - theta[1] = res - a - theta[2] = res - res_v = math.atan2(math.sqrt(tmp_v), q_v) * one_third - theta_v[0] = res_v + a - theta_v[1] = res_v - a - theta_v[2] = res_v - - b = two_third * math.sqrt(p) - b_v = two_third * math.sqrt(p_v) - - for i in range(3): - m_mat_u[i] = ( - 2.0 * energy * (b * math.cos(theta[i]) - c2 * one_third + dm_vac_vac[0, 0]) - ) - m_mat_v[i] = ( - 2.0 - * energy - * (b_v * math.cos(theta_v[i]) - c2_v * one_third + dm_vac_vac[0, 0]) - ) - - # Sort according to which reproduce the vaccum eigenstates - for i in range(3): - tmp_v = abs(dm_vac_vac[i, 0] - m_mat_v[0]) - k = 0 - for j in range(3): - tmp = abs(dm_vac_vac[i, 0] - m_mat_v[j]) - if tmp < tmp_v: - k = j - tmp_v = tmp - m_mat[i] = m_mat_u[k] - - for i in range(3): - for j in range(3): - dm_mat_mat[i, j] = m_mat[i] - m_mat[j] - dm_mat[i, j] = m_mat[i] - #dm_mat_vac[i, j] = m_mat[i] - dm_vac_vac[j, 0] - - -@myjit -def get_product(energy, dm_mat, dm_mat_mat, H_full_mass_eigenstate_basis, product): - """ - Parameters - ---------- - energy : float - Neutrino energy, GeV - - dm_mat : complex 2d array - - dm_mat_mat : complex 2d array - - H_full_mass_eigenstate_basis : complex 2d array - - product : complex 3d-array (empty) - - """ - - H_minus_M = cuda.local.array(shape=(3, 3, 3), dtype=ctype) - - for i in range(3): - for j in range(3): - for k in range(3): - H_minus_M[i, j, k] = 2.0 * energy * H_full_mass_eigenstate_basis[i, j] - if i == j: - H_minus_M[i, j, k] -= dm_mat[k, j] - # also, cler product - product[i, j, k] = 0.0 - - # Calculate the product in eq.(10) of H_minus_M for j!=k - for i in range(3): - for j in range(3): - for k in range(3): - product[i, j, 0] += H_minus_M[i, k, 1] * H_minus_M[k, j, 2] - product[i, j, 1] += H_minus_M[i, k, 2] * H_minus_M[k, j, 0] - product[i, j, 2] += H_minus_M[i, k, 0] * H_minus_M[k, j, 1] - product[i, j, 0] /= dm_mat_mat[0, 1] * dm_mat_mat[0, 2] - product[i, j, 1] /= dm_mat_mat[1, 2] * dm_mat_mat[1, 0] - product[i, j, 2] /= dm_mat_mat[2, 0] * dm_mat_mat[2, 1] - - -@myjit -def convert_from_mass_eigenstate(state, mix_nubar, psi): - """ - Parameters - ---------- - state : (un?)signed int - - mix_nubar : complex 2d array - Mixing matrix, already conjugated if antineutrino - - psi : complex 1d-array (empty) - - - Notes - ----- - this is untested! - - """ - - mass = cuda.local.array(shape=(3), dtype=ctype) - - lstate = state - 1 - for i in range(3): - mass[i] = 1.0 if lstate == i else 0.0 - - # note: mix_nubar is already taking into account whether we're considering - # nu or anti-nu - matrix_dot_vector(mix_nubar, mass, psi) diff --git a/pisa/stages/osc/prob3numba/numba_osc_tests.py b/pisa/stages/osc/prob3numba/numba_osc_tests.py deleted file mode 100755 index 52cdc6ee4..000000000 --- a/pisa/stages/osc/prob3numba/numba_osc_tests.py +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/env python -# pylint: disable = invalid-name - - -""" -Tests for prob3numba code -""" - - -from __future__ import absolute_import, print_function, division - - -__all__ = [ - "TEST_DATA_DIR", - "FINFO_FTYPE", - "AC_KW", - "PRINTOPTS", - "A2S_KW", - "MAT_DOT_MAT_SUBSCR", - "DEFAULTS", - "TEST_CASES", - "auto_populate_test_case", - "test_prob3numba", - "run_test_case", - "stability_test", - "execute_func", - "compare_numeric", - "check", - "ary2str", - "main", -] - - -from argparse import ArgumentParser -from collections import OrderedDict -from collections.abc import Mapping -from copy import deepcopy -from inspect import getmodule, signature -from os.path import join - -import numpy as np -import os -# os.environ['PISA_FTYPE'] = 'single' # for checking unit test on single precision -from pisa import FTYPE -from pisa.utils.comparisons import ALLCLOSE_KW -from pisa.utils.fileio import expand, from_file, to_file -from pisa.utils.log import Levels, logging, set_verbosity -from pisa.utils.numba_tools import WHERE -from pisa.utils.resources import find_resource -from pisa.stages.osc.prob3numba.numba_osc_hostfuncs import ( - CX, - FX, - IX, - # propagate_scalar_vacuum, - propagate_scalar, - propagate_array, - get_transition_matrix_hostfunc, - get_transition_matrix_massbasis_hostfunc, - get_H_vac_hostfunc, - get_H_decay_hostfunc, - get_H_mat_hostfunc, - get_dms_hostfunc, - get_dms_numerical_hostfunc, - get_product_hostfunc, - convert_from_mass_eigenstate_hostfunc, -) -from pisa.stages.osc.nsi_params import ( - StdNSIParams, - VacuumLikeNSIParams, -) - -from pisa.stages.osc.lri_params import LRIParams -from pisa.stages.osc.scaling_params import ( - Mass_scaling, - Core_scaling_w_constrain, - Core_scaling_wo_constrain, -) - -TEST_DATA_DIR = find_resource("osc/numba_osc_tests_data") - -FINFO_FTYPE = np.finfo(FTYPE) - -AC_KW = dict(atol=FINFO_FTYPE.resolution * 10, rtol=ALLCLOSE_KW["rtol"] * 100) - -PRINTOPTS = dict( - precision=FINFO_FTYPE.precision + 2, floatmode="fixed", sign=" ", linewidth=200 -) - -A2S_KW = dict(precision=PRINTOPTS["precision"], separator=", ") - -MAT_DOT_MAT_SUBSCR = "in,nj->ij" -"""matrix dot matrix subscripts for use by `numpy.einsum`""" - -# ---------------------------------------------------------------------------- # -# Define relevant values for testing purposes (from nufit3.2, from intermediate -# calculations performed here, or arbitary values). -# -# NOTE: !!DO NOT CHANGE!! (unless a function is incorrect) tests rely on these -# ---------------------------------------------------------------------------- # - -#lri param -lri_params = LRIParams() -lri_params.v_lri = 1e-14 -lri_std_mat_pot = lri_params.potential_matrix_emu -# print(lri_std_mat_pot) - -DEFAULTS = dict( - energy=1, # GeV - state=1, - nubar=1, - rho=1, # moles of electrons / cm^3 - baseline=1, # km - mat_pot=np.diag([1, 0, 0]).astype(np.complex128), - layer_distances=np.logspace(0, 2, 10), # km - layer_densities=np.linspace(0.5, 3, 10), # g/cm^3 - # osc params: defaults are nufit 3.2 normal ordering values - t12=np.deg2rad(33.62), - t23=np.deg2rad(47.2), - t13=np.deg2rad(8.54), - dcp=np.deg2rad(234), - dm21=7.40e-5, - dm31=2.494e-3, - decay_flag=-1, - mat_decay=np.diag([0, 0, -1.0e-4j ]).astype(np.complex128), - lri_pot=lri_std_mat_pot, -) - -# define non-0 NSI parameters for non-vacuum NSI -# roughly based on best fit params from Thomas Ehrhardts 3y DRAGON analysis -nsi_params = StdNSIParams() -nsi_params.eps_emu_magn = 0.07 -nsi_params.eps_emu_phase = np.deg2rad(340) -nsi_params.eps_etau_magn = 0.06 -nsi_params.eps_etau_phase = np.deg2rad(35) -nsi_params.eps_mutau_magn = 0.003 -nsi_params.eps_mutau_phase = np.deg2rad(175) -mat_pot_std_nsi_no = np.diag([1, 0, 0]).astype(np.complex128) + nsi_params.eps_matrix - -# Vacuum-like NSI parameters -nsi_params = VacuumLikeNSIParams() -nsi_params.eps_prime = 0.1 -mat_pot_vac_nsi_no = np.diag([1, 0, 0]).astype(np.complex128) + nsi_params.eps_matrix - -#mass of earth -tomography_params= Mass_scaling() -tomography_params.density_scale =1.2 -scale = tomography_params.density_scale - -#mass of core with constraint -tomography_params= Core_scaling_w_constrain() -tomography_params.core_density_scale = 0.9 -scale_array_w_constrain = tomography_params.scaling_array - -#mass of core without constraint -tomography_params= Core_scaling_wo_constrain() -tomography_params.core_density_scale = 0.8 -tomography_params.middlemantle_density_scale= 0.8 -tomography_params.innermantle_density_scale= 0.8 -scale_array_wo_constrain = tomography_params.scaling_factor_array - -TEST_CASES = dict( - nufit32_no=dict(), # nufit 3.2 normal ordering (also overall) best-fit - nufit32_no_nubar=dict(nubar=-1), # NO but anti-neutrinos - nufit32_no_E1TeV=dict(energy=1e3), # NO but e=1 TeV - nufit32_no_blearth=dict( - baseline=6371e3 * 2, - layer_distances=( - 6371e3 - * 2 - * DEFAULTS["layer_distances"] - / np.sum(DEFAULTS["layer_distances"]) - ), - ), - nufit32_io=dict( # nufit 3.2 best-fit params for inverted ordering - t12=np.deg2rad(33.62), - t23=np.deg2rad(48.1), - t13=np.deg2rad(8.58), - dcp=np.deg2rad(278), - dm21=7.40e-5, - dm31=-2.465e-3, - ), - nufit32_std_nsi_no=dict( # nufit 3.2 normal ordering with non-0 standard NSI parameters - mat_pot=mat_pot_std_nsi_no, - ), - nufit32_vac_nsi_no=dict( # nufit 3.2 normal ordering with non-0 vacuum NSI parameters - mat_pot=mat_pot_vac_nsi_no, - ), - nufit32_std_decay_no=dict( # nufit 3.2 normal ordering with no neutrino decay - decay_flag=-1, - mat_decay=DEFAULTS["mat_decay"], - ), - nufit32_std_decay=dict( # nufit 3.2 normal ordering with neutrino decay - decay_flag=1, - mat_decay=DEFAULTS["mat_decay"], - ), - nufit32_lri_std_mat=dict( #nufit 3.2 lri potential with std matter potential - lri_pot = lri_std_mat_pot - ), - nufit32_mass_of_earth_no=dict( - layer_densities=scale*DEFAULTS['layer_densities'], - ), - nufit32_mass_of_core_w_constrain_no=dict( - layer_distances=np.array([1221.50, 2258.50, 2221.0, 450.0, 220.0, 0.0])[::-1], - layer_densities=scale_array_w_constrain*np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5])[::-1], - ), - nufit32_mass_of_core_wo_constrain_no=dict( - layer_distances=np.array([1221.50, 2258.50, 2221.0, 450.0, 220.0, 0.0])[::-1], - layer_densities=scale_array_wo_constrain*np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5])[::-1], - ), -) - - -def auto_populate_test_case(tc, defaults): - """Populate defaults and construct dm / PMNS matrices if they aren't - present in a test case. - - Parameters - ---------- - test_case : mutable mapping - - defaults : mapping - - """ - for key, val in defaults.items(): - if key not in tc: - tc[key] = val - - # Construct dm and PMNS matrices derived from test case values, if - # these were not already specified - - if "dm" not in tc: # construct Delta m^2 matrix if not present - if "dm32" not in tc: # NO case; Delta m^2_32/eV^2 - tc["dm32"] = tc["dm31"] - tc["dm21"] - - if "dm31" not in tc: # IO case; Delta m^2_32/eV^2 - tc["dm31"] = tc["dm32"] + tc["dm21"] - - tc["dm"] = np.array( - [ - [0, -tc["dm21"], -tc["dm31"]], - [tc["dm21"], 0, -tc["dm32"]], - [tc["dm31"], tc["dm32"], 0], - ] - ) - - if "pmns" not in tc: # construct PMNS matrix if not present - c12, s12 = np.cos(tc["t12"]), np.sin(tc["t12"]) - c23, s23 = np.cos(tc["t23"]), np.sin(tc["t23"]) - c13, s13 = np.cos(tc["t13"]), np.sin(tc["t13"]) - - tc["pmns"] = ( - np.array([[1, 0, 0], [0, c23, s23], [0, -s23, c23]]) - @ np.array( - [ - [c13, 0, s13 * np.exp(-1j * tc["dcp"])], - [0, 1, 0], - [-s13 * np.exp(1j * tc["dcp"]), 0, c13], - ] - ) - @ np.array([[c12, s12, 0], [-s12, c12, 0], [0, 0, 1]]) - ) - - -def test_prob3numba(ignore_fails=False, define_as_ref=False): - """Run all unit test cases for prob3numba code""" - - # Pull first test case to test calling `propagate_array` - tc_name, tc = next(iter(TEST_CASES.items())) - tc_ = deepcopy(tc) - logging.info( - "Testing call and return shape of `propagate_array` with test case '%s'", - tc_name, - ) - - # Test simple broadcasting over `nubars` and `energies` where both have - # same shape, as this is the "typical" use case - input_shape = (4, 5) - - # Without broadcasting, a single probability matrix is 3x3 - prob_array_shape = (3, 3) - - # Broadcasted shape - out_shape = input_shape + prob_array_shape - - nubars = np.full(shape=input_shape, fill_value=tc_["nubar"], dtype=IX) - energies = np.full(shape=input_shape, fill_value=tc_["energy"], dtype=FX) - - # Fill with NaN to ensure all elements are assinged a value - probabilities = np.full(shape=out_shape, fill_value=np.nan, dtype=FX) - - propagate_array( - tc_["dm"].astype(FX), - tc_["pmns"].astype(CX), - tc_["mat_pot"].astype(CX), - tc_["decay_flag"], - tc_["mat_decay"].astype(CX), - tc_["lri_pot"].astype(FX), - nubars, - energies, - tc_["layer_densities"].astype(FX), - tc_["layer_distances"].astype(FX), - # output: - probabilities, - ) - - # Check that all probability matrices have no NaNs and are equal to one - # another - ref_probs = probabilities[0, 0] - for i in range(input_shape[0]): - for j in range(input_shape[1]): - probs = probabilities[i, j] - assert np.all(np.isfinite(probs)) - assert np.all(probs == ref_probs) - - # Run all test cases - for tc_name, tc in TEST_CASES.items(): - run_test_case( - tc_name, tc, ignore_fails=ignore_fails, define_as_ref=define_as_ref - ) - - -def run_test_case(tc_name, tc, ignore_fails=False, define_as_ref=False): - """Run one test case""" - logging.info("== TEST CASE : %s ==", tc_name) - - st_test_kw = dict(ignore_fails=ignore_fails, define_as_ref=define_as_ref) - tf_sfx = f"__{tc_name}__{FX}.pkl" - - # Copy contents of test case, so if a function modifies these - # (accidentally), it doesn't affect the outcome of further tests - tc_ = deepcopy(tc) - test, ref = stability_test( - func=convert_from_mass_eigenstate_hostfunc, - func_kw=dict( - state=tc_["state"], - mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, - # output: - psi=np.ones(shape=3, dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"convert_from_mass_eigenstate_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\npsi = %s", ary2str(test["psi"])) - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=get_H_vac_hostfunc, - func_kw=dict( - mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, - mix_nubar_conj_transp=( - tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] - ), - dm_vac_vac=tc_["dm"], - # output: - H_vac=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_H_vac_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\nH_vac = %s", ary2str(test["H_vac"])) - # keep for use by `get_transition_matrix_hostfunc` - H_vac_ref = ref["H_vac"] - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=get_H_decay_hostfunc, - func_kw=dict( - mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, - mix_nubar_conj_transp=( - tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] - ), - mat_decay=tc_["mat_decay"], - #output; - H_decay=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_H_decay_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\nH_decay = %s", ary2str(test["H_decay"])) - # keep for use by `get_transition_matrix_hostfunc` - H_decay_ref = ref["H_decay"] - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=get_H_mat_hostfunc, - func_kw=dict( - rho=tc_["rho"], - mat_pot=tc_["mat_pot"], - nubar=tc_["nubar"], - # output: - H_mat=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_H_mat_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\nH_mat = %s", ary2str(test["H_mat"])) - # keep for use by `get_dms_hostfunc`, - # `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc`` - H_mat_ref = ref["H_mat"] - - # tc_ = deepcopy(tc) - # test, ref = stability_test( - # func=propagate_scalar_vacuum, - # func_kw=dict( - # dm=tc_["dm"], - # mix=tc_["pmns"], - # nubar=tc_["nubar"], - # energy=tc_["energy"], - # distances=tc_["layer_distances"], - # # output: - # probability=np.ones(shape=(3, 3), dtype=FX), - # ), - # ref_path=join(TEST_DATA_DIR, f"propagate_scalar_vacuum{tf_sfx}"), - # **st_test_kw, - # ) - # logging.debug("\nvac_prob = %s", ary2str(test["probability"])) - # # check unitarity - # # TODO: << BUG? >> these fail even in double precision! - # check( - # test=np.sum(test["probability"], axis=0), - # ref=np.ones(3), - # label=( - # f"{tc_name} :: propagate_scalar_vacuum :: sum(vacuum probability, axis=0)" - # ), - # ignore_fails=True, - # ) - # check( - # test=np.sum(test["probability"], axis=1), - # ref=np.ones(3), - # label=( - # f"{tc_name} :: propagate_scalar_vacuum :: sum(vacuum probability, axis=1)" - # ), - # ignore_fails=True, - # ) - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=propagate_scalar, - func_kw=dict( - dm=tc_["dm"], - mix=tc_["pmns"], - mat_pot=tc_["mat_pot"], - decay_flag=tc_["decay_flag"], - mat_decay=tc_["mat_decay"], - lri_pot=tc_["lri_pot"], - nubar=tc_["nubar"], - energy=tc_["energy"], - densities=tc_["layer_densities"], - distances=tc_["layer_distances"], - # output: - probability=np.ones(shape=(3, 3), dtype=FX), - ), - ref_path=join(TEST_DATA_DIR, f"propagate_scalar{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\nmat_prob = %s", ary2str(test["probability"])) - - if (tc_["decay_flag"] != 1): - # check unitarity - check( - test=np.sum(test["probability"], axis=0), - ref=np.ones(3), - label=f"{tc_name} :: propagate_scalar:: sum(matter probability, axis=0)", - ignore_fails=ignore_fails, - ) - check( - test=np.sum(test["probability"], axis=1), - ref=np.ones(3), - label=f"{tc_name} :: propagate_scalar :: sum(matter probability, axis=1)", - ignore_fails=ignore_fails, - ) - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=get_transition_matrix_hostfunc, - func_kw=dict( - nubar=tc_["nubar"], - energy=tc_["energy"], - rho=tc_["rho"], - baseline=tc_["baseline"], - mix_nubar=tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T, - mix_nubar_conj_transp=( - tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] - ), - mat_pot=tc_["mat_pot"], - H_vac=H_vac_ref, - decay_flag=tc_["decay_flag"], - H_decay=H_decay_ref, - lri_pot=tc_["lri_pot"], - dm=tc_["dm"], - # output: - transition_matrix=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_transition_matrix_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\ntransition_matrix = %s", ary2str(test["transition_matrix"])) - # check unitarity - check( - test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=0), - ref=np.ones(3), - label=( - f"{tc_name}" - " :: get_transition_matrix_hostfunc" - ":: sum(|transition_matrix|^2, axis=0)" - ), - ignore_fails=ignore_fails, - ) - check( - test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=1), - ref=np.ones(3), - label=( - f"{tc_name}" - " :: get_transition_matrix_hostfunc" - " :: sum(|transition_matrix|^2, axis=1)" - ), - ignore_fails=ignore_fails, - ) - - tc_ = deepcopy(tc) - - # Compute H_full as used in `numba_osc_kernels` to call `get_dms` for SI case - # and det_dms_numnerical for decay case from `get_transition_matrix` - - if (tc_["decay_flag"] == 1): - - H_full_ref = (H_vac_ref + H_decay_ref)/ (2 * tc_["energy"]) + H_mat_ref - - test, ref = stability_test( - func=get_dms_numerical_hostfunc, - func_kw=dict( - energy=tc_["energy"], - H_full=H_full_ref, - # outputs: - dm_mat_mat=np.ones(shape=(3, 3), dtype=CX), - dm_mat=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_dms_numerical_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\ndm_mat_mat = %s", ary2str(test["dm_mat_mat"])) - logging.debug("\ndm_mat = %s", ary2str(test["dm_mat"])) - # keep for use by `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc` - dm_mat_mat_ref = ref["dm_mat_mat"] - dm_mat_ref = ref["dm_mat"] - - else: - H_full_ref = H_vac_ref / (2 * tc_["energy"]) + H_mat_ref - - test, ref = stability_test( - func=get_dms_hostfunc, - func_kw=dict( - energy=tc_["energy"], - H_full=H_full_ref, - dm_vac_vac=tc_["dm"], - # outputs: - dm_mat_mat=np.ones(shape=(3, 3), dtype=CX), - dm_mat=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"get_dms_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\ndm_mat_mat = %s", ary2str(test["dm_mat_mat"])) - logging.debug("\ndm_mat = %s", ary2str(test["dm_mat"])) - # keep for use by `get_transition_matrix_massbasis_hostfunc`, `get_product_hostfunc` - dm_mat_mat_ref = ref["dm_mat_mat"] - dm_mat_ref = ref["dm_mat"] - - - tc_ = deepcopy(tc) - - # Compute same intermediate result `H_full_mass_eigenstate_basis` as in - # `numba_osc_kernels.get_transition_matrix` which calls - # `get_transition_matrix_massbasis` - mix_nubar = tc_["pmns"] if tc_["nubar"] > 0 else tc_["pmns"].conj().T - mix_nubar_conj_transp = tc_["pmns"].conj().T if tc_["nubar"] > 0 else tc_["pmns"] - tmp = np.einsum(MAT_DOT_MAT_SUBSCR, H_full_ref, mix_nubar) - H_full_mass_eigenstate_basis = np.einsum( - MAT_DOT_MAT_SUBSCR, mix_nubar_conj_transp, tmp - ) - - test, ref = stability_test( - func=get_transition_matrix_massbasis_hostfunc, - func_kw=dict( - baseline=tc_["baseline"], - energy=tc_["energy"], - dm_mat=dm_mat_ref, - dm_mat_mat=dm_mat_mat_ref, - H_full_mass_eigenstate_basis=H_full_mass_eigenstate_basis, - # output: - transition_matrix=np.ones(shape=(3, 3), dtype=CX), - ), - ref_path=join( - TEST_DATA_DIR, f"get_transition_matrix_massbasis_hostfunc{tf_sfx}" - ), - **st_test_kw, - ) - logging.debug("\ntransition_matrix_mb = %s", ary2str(test["transition_matrix"])) - check( - test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=0), - ref=np.ones(3), - label=( - f"{tc_name}" - " :: get_transition_matrix_massbasis_hostfunc" - " :: sum(|transition_matrix (mass basis)|^2), axis=0)" - ), - ignore_fails=ignore_fails, - ) - check( - test=np.sum(np.abs(test["transition_matrix"]) ** 2, axis=1), - ref=np.ones(3), - label=( - f"{tc_name}" - " :: get_transition_matrix_massbasis_hostfunc" - " :: sum(|transition_matrix (mass basis)|^2), axis=1)" - ), - ignore_fails=ignore_fails, - ) - - tc_ = deepcopy(tc) - test, ref = stability_test( - func=get_product_hostfunc, - func_kw=dict( - energy=tc_["energy"], - dm_mat=dm_mat_ref, - dm_mat_mat=dm_mat_mat_ref, - H_full_mass_eigenstate_basis=H_full_ref, - # output: - product=np.ones(shape=(3, 3, 3), dtype=CX), - ), - ref_path=join(TEST_DATA_DIR, f"product_hostfunc{tf_sfx}"), - **st_test_kw, - ) - logging.debug("\nproduct = %s", ary2str(test["product"])) - - -def stability_test(func, func_kw, ref_path, ignore_fails=False, define_as_ref=False): - """basic stability test of a Numba CPUDispatcher function (i.e., function - compiled via @jit / @njit)""" - func_name = func.py_func.__name__ - logging.info("stability testing `%s`", func_name) - ref_path = expand(ref_path) - - test = execute_func(func=func, func_kw=func_kw) - - if define_as_ref: - to_file(test, ref_path) - - # Even when we define the test case as ref, round-trip to/from file to - # ensure that doesn't corrupt the values - ref = from_file(ref_path) - - check(test=test, ref=ref, label=func_name, ignore_fails=ignore_fails) - - return test, ref - - -def execute_func(func, func_kw): - """Run `func` with *func_kw.values() where `outputs` specify names in - `func_kw` taken to be outputs of the function; for these, mark changed. - Retrieve both input and output values as Numpy arrays on the host and - aggregate together in a single dict before returning. - - Parameters - ---------- - func : numba CPUDispatcher or CUDADispatcher - func_kw : OrderedDict - - Returns - ------- - ret_dict : OrderedDict - Keys are arg names and vals are type-"correct" values; all arrays are - converted to host Numpy arrays - - """ - py_func = func.py_func - func_name = ".".join([getmodule(py_func).__name__, py_func.__name__]) - arg_names = list(signature(py_func).parameters.keys()) - if hasattr(func, "signatures"): - arg_types = func.signatures[0] - else: - arg_types = func.compiled.argument_types - - missing = set(arg_names).difference(func_kw.keys()) - excess = set(func_kw.keys()).difference(arg_names) - if missing or excess: - msgs = [] - if missing: - msgs.append(f"missing kwargs {missing}") - if excess: - msgs.append(f"excess kwargs {excess}") - raise KeyError(f"{func_name}:" + ", ".join(msgs)) - - typed_args = OrderedDict() - for arg_name, arg_type in zip(arg_names, arg_types): - val = func_kw[arg_name] - if arg_type.name.startswith("array"): - arg_val = val.astype(arg_type.dtype.key) - else: - arg_val = arg_type(val) - typed_args[arg_name] = arg_val - - # Call the host function with typed args - - try: - func(*list(typed_args.values())) - except Exception: - logging.error("Failed running `%s` with args %s", func_name, str(typed_args)) - raise - - # All arrays converted to Numpy host arrays - - ret_dict = OrderedDict() - for key, val in typed_args.items(): - ret_dict[key] = val - - return ret_dict - - -def compare_numeric(test, ref, label=None, ac_kw=deepcopy(AC_KW), ignore_fails=False): - """Compare scalars or numpy ndarrays. - - Parameters - ---------- - test : scalar or numpy.ndarray - ref : scalar or numpy.ndarray - label : str or None, optional - ac_kw : mapping, optional - Keyword args to pass via **ac_kw to `numpy.isclose` / `numpy.allclose` - ignore_fails : bool, optional - - Returns - ------- - rslt : bool - - """ - pfx = f"{label} :: " if label else "" - with np.printoptions(**PRINTOPTS): - if np.isscalar(test): - if np.isclose(test, ref, **ac_kw): - return True - - msg = f"{pfx}test: {test} != ref: {ref}" - if ignore_fails: - logging.warning(msg) - else: - logging.error(msg) - return False - - # Arrays - if np.allclose(test, ref, **ac_kw): - return True - - diff = test - ref - msg = f"{pfx}test:" f"\n{(test)}\n!= ref:\n{(ref)}" f"\ndiff:\n{(diff)}" - - if not np.all(ref == 1): - nzmask = ref != 0 - zmask = ref == 0 - fdiff = np.empty_like(ref) - fdiff[nzmask] = diff[nzmask] / ref[nzmask] - fdiff[zmask] = np.nan - msg += f"\nfractdiff:\n{(fdiff)}" - - if ignore_fails: - logging.warning(msg) - else: - logging.error(msg) - - return False - - -def check(test, ref, label=None, ac_kw=deepcopy(AC_KW), ignore_fails=False): - """Check that `test` matches `ref` (closely enough). - - Parameters - ---------- - test - ref - ac_kw : mapping, optional - Kwargs to `np.allclose`, as used by - `pisa.utils.comparisons.recursiveEquality` - ignore_fails : bool, optional - If True and comparison fails, do not raise AssertionError - - Raises - ------ - AssertionError - If `test` is not close enough to `ref` and ignore_fails is False - - """ - same = True - with np.printoptions(**PRINTOPTS): - if isinstance(test, Mapping): - if not label: - label = "" - else: - label = label + ": " - - for key, val in test.items(): - same &= compare_numeric( - test=val, - ref=ref[key], - label=label + f"key: '{key}'", - ac_kw=ac_kw, - ignore_fails=ignore_fails, - ) - else: - same &= compare_numeric( - test=test, ref=ref, label=label, ac_kw=ac_kw, ignore_fails=ignore_fails - ) - if not ignore_fails and not same: - assert False - return same - - -def ary2str(array): - """Convert a numpy ndarray to string easy to copy back into code""" - return "np.array(" + np.array2string(array, **A2S_KW) + ")" - - -# Augment test cases with defaults / contruct arrays where necessary -for TC in TEST_CASES.values(): - auto_populate_test_case(tc=TC, defaults=DEFAULTS) - - -def main(description=__doc__): - """Script interface for `test_prob3numba` function""" - parser = ArgumentParser(description=description) - parser.add_argument("--ignore-fails", action="store_true") - parser.add_argument("--define-as-ref", action="store_true") - parser.add_argument("-v", action="count", default=Levels.WARN) - kwargs = vars(parser.parse_args()) - set_verbosity(kwargs.pop("v")) - test_prob3numba(**kwargs) - - -if __name__ == "__main__": - main() diff --git a/pisa/stages/osc/prob3numba/test_numba.py b/pisa/stages/osc/prob3numba/test_numba.py deleted file mode 100644 index 566a73012..000000000 --- a/pisa/stages/osc/prob3numba/test_numba.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Test functions used during developpement of the osc. code -Please ignore unless you are the author -""" -from __future__ import print_function - -import time - -import numpy as np -from numba import guvectorize - -from pisa import TARGET -from pisa.utils.numba_tools import ( - WHERE, - cuda, - myjit, - ftype, - ctype, - matrix_dot_matrix, - matrix_dot_vector, -) - - -@myjit -def sum_row_kernel(mix, bla, inp, out): - C = cuda.local.array(shape=(3, 3), dtype=ftype) - D = cuda.local.array(shape=(3), dtype=ctype) - E = cuda.local.array(shape=(3), dtype=ctype) - matrix_dot_matrix(mix, mix, C) - D[0] = 0.0 + 2.0j - D[1] = 1.0 + 2.0j - D[2] = 1.0 + 2.0j - matrix_dot_vector(C, D, E) - bla *= 0.1 - out[0] += E[1].real * bla.real + inp[0] - - -@guvectorize( - ["void(float64[:,:], complex128, int32[:], int32[:])"], - "(a,b),(),(f)->()", - target=TARGET, -) -def sum_row(mix, bla, inp, out): - sum_row_kernel(mix, bla, inp, out) - - -def main(): - print("ftype=", ftype) - - # hist arrays - mix = np.ones((3, 3), dtype=np.float64) - n = 1000000 - inp = np.arange(3 * n, dtype=np.int32).reshape(n, 3) - out = np.ones((n), dtype=np.int32) - - start_t = time.time() - sum_row(mix, 42.0 + 2j, inp, out=out) - end_t = time.time() - print("took %.5f" % (end_t - start_t)) - start_t = time.time() - sum_row(mix, 42.0 + 2j, inp, out=out) - end_t = time.time() - print("took %.5f" % (end_t - start_t)) - out - - print(out) - - -if __name__ == "__main__": - main() diff --git a/pisa/stages/osc/scaling_params.py b/pisa/stages/osc/scaling_params.py deleted file mode 100644 index 9cfac47e1..000000000 --- a/pisa/stages/osc/scaling_params.py +++ /dev/null @@ -1,189 +0,0 @@ -""" -Author : Sharmistha Chattopadhyay -Date : August 10, 2023 -""" - -from __future__ import absolute_import,division - -import numpy as np -import os -from pisa import FTYPE -import numba - -if numba is None: - class jit(object): - """Decorator class to mimic Numba's `jit` when Numba is missing""" - def __init__(self, *args, **kwargs): - pass - def __call__(self, *args): - return args[0] -else: - jit = numba.jit - ftype = numba.typeof(FTYPE(1)) - - -__all__ = ['Mass_scaling','Core_scaling_w_constrain','Core_scaling_wo_constrain'] - -class Mass_scaling(): - """ - Uses a single scaling factor for all the layers. Scaling factor can be only positive. - """ - def __init__(self): - self._density_scale = 0. - - @property - def density_scale(self): - - return self._density_scale - - @density_scale.setter - def density_scale(self, value): - self._density_scale = value - - -class Core_scaling_w_constrain(object): - """ - Returns scaling factors for inner mantle and middle mantle by taking scaling factor of inner core and outer core as input. - Scaling factor of inner and outer core = core_density_scale (alpha) - Scaling factor of inner mantle = beta - Scaling factor of middle mantle = gamma - Outer mantle not scaled - This function solves the equations for two constraints: mass of earth and moment of inertia, by taking core_density_scale as an independent - parameter, and returns scaling factor factors for inner and middle mantle. - - """ - def __init__(self): - self._core_density_scale = 0. - - @property - def core_density_scale(self): - - return self._core_density_scale - - @core_density_scale.setter - def core_density_scale(self, value): - self._core_density_scale = value - - def is_positive(self,lst): - for i in range(len(lst)): - if lst[i] < 0: - return False - return True - - def is_descending(self,lst): - for i in range(len(lst) - 1): - if lst[i] < lst[i + 1]: - return False - return True - - @property - def scaling_array(self): - - radius= np.array([0.0, 1221.50, 3480.00, 5701.00, 6151.0, 6371.00]) - R = radius * 10**5 - - rho = np.array([13.0, 13.0, 10.96, 5.03, 3.7, 2.5]) - - a1 = (4*np.pi/3)*(rho[1]* R[1]**3) - a2 = (8*np.pi/15)*(rho[1]* R[1]**5) - b1 = (4*np.pi/3)*(rho[2]* (R[2]**3 - R[1]**3)) - b2 = (8*np.pi/15)*(rho[2]* (R[2]**5 - R[1]**5)) - c1 = (4*np.pi/3)*(rho[3]* (R[3]**3 - R[2]**3)) - c2 = (8*np.pi/15)*(rho[3]* (R[3]**5 - R[2]**5)) - d1 = (4*np.pi/3)*(rho[4]* (R[4]**3 - R[3]**3)) - d2 = (8*np.pi/15)*(rho[4]* (R[4]**5 - R[3]**5)) - e1 = (4*np.pi/3)*(rho[5]* (R[5]**3 - R[4]**3)) - e2 = (8*np.pi/15)*(rho[5]* (R[5]**5 - R[4]**5)) - - I = a2 + b2 +c2 + d2 + e2 - M = a1 + b1 +c1 + d1 + e1 - - alpha = self.core_density_scale - - - new_rho = np.zeros(6, dtype=FTYPE) - gamma = ((I*c1-M*c2)-alpha*(c1*a2 - c2*a1)- alpha*(c1*b2-b1*c2)-(c1*e2 - e1*c2))/(c1*d2-d1*c2) - beta = (I - alpha * a2 - alpha * b2 - gamma*d2 - e2)/(c2) - - - new_rho[0] = alpha * rho[0] - new_rho[1] = alpha * rho[1] - new_rho[2] = alpha * rho[2] - new_rho[3] = beta * rho[3] - new_rho[4] = gamma * rho[4] - new_rho[5] = rho[5] - - tmp_array = np.ones(6,dtype=FTYPE) - if self.is_positive(new_rho): # and self.is_descending(new_rho): ##turn this on if you want to put hydrostatic equilibrium condition - tmp_array[1] = gamma - tmp_array[2] = beta - tmp_array[3] = alpha - tmp_array[4] = alpha - tmp_array[5] = alpha - - return tmp_array - -class Core_scaling_wo_constrain(object): - """ - Takes scaling factors for core, inner mantle and outer mantle from pipeline and stores them in an array - - """ - def __init__(self): - self._core_density_scale = 0. - self._innermantle_density_scale = 0. - self._middlemantle_density_scale = 0. - - @property - def core_density_scale(self): - - return self._core_density_scale - - @core_density_scale.setter - def core_density_scale(self, value): - self._core_density_scale = value - - @property - def innermantle_density_scale(self): - - return self._innermantle_density_scale - - @innermantle_density_scale.setter - def innermantle_density_scale(self, value): - self._innermantle_density_scale = value - - @property - def middlemantle_density_scale(self): - - return self._middlemantle_density_scale - - @middlemantle_density_scale.setter - def middlemantle_density_scale(self, value): - self._middlemantle_density_scale = value - - @property - def scaling_factor_array(self): - - tmp_array = np.ones(6,dtype=FTYPE) - tmp_array[1] = self.middlemantle_density_scale - tmp_array[2] = self.innermantle_density_scale - tmp_array[3] = self.core_density_scale - tmp_array[4] = self.core_density_scale - tmp_array[5] = self.core_density_scale - - return tmp_array - - -def test_scaling_params(): - pass - -if __name__=='__main__': - from pisa import TARGET - from pisa.utils.log import set_verbosity, logging - assert TARGET == 'cpu', "Cannot test functions on GPU, set PISA_TARGET to 'cpu'" - set_verbosity(1) - test_scaling_params() - - - - - diff --git a/pisa/stages/osc/two_nu_osc.py b/pisa/stages/osc/two_nu_osc.py deleted file mode 100644 index c2079c6ed..000000000 --- a/pisa/stages/osc/two_nu_osc.py +++ /dev/null @@ -1,115 +0,0 @@ -""" -PISA pi stage for the calculation osc. probabilities assuming two-neutrino model - -""" -from __future__ import absolute_import, print_function, division - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, ITYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile - -from pisa.utils.numba_tools import WHERE, myjit -from pisa.utils.resources import find_resource - - -class two_nu_osc(Stage): - """ - two neutrino osc PISA Pi class - - Parameters - ---------- - theta : quantity (angle) - deltam31 : quantity (mass^2) - - Notes - ----- - For two-neutrino model, there is only one mass-splitting term - Atmospheric mixing angle is aproximated by theta (sin^2(2*theta)) - - """ - def __init__(self, - **std_kwargs, - ): - - expected_params = ( - 'theta', - 'deltam31', - ) - - # init base class - super(two_nu_osc, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - @profile - def apply_function(self): - - theta = self.params.theta.value.m_as('dimensionless') - deltam31 = self.params.deltam31.value.m_as('eV**2') - - for container in self.data: - if 'numu' in container.name: - apply_probs_vectorized(container['nu_flux'], - FTYPE(theta), - FTYPE(deltam31), - container['true_energy'], - container['true_coszen'], - ITYPE(1), - out=container['weights'], - ) - - if 'nutau' in container.name: - apply_probs_vectorized(container['nu_flux'], - FTYPE(theta), - FTYPE(deltam31), - container['true_energy'], - container['true_coszen'], - ITYPE(3), - out=container['weights'], - ) - if 'nue' in container.name: - apply_probs_vectorized(container['nu_flux'], - FTYPE(theta), - FTYPE(deltam31), - container['true_energy'], - container['true_coszen'], - ITYPE(0), - out=container['weights'], - ) - container.mark_changed('weights') - -@myjit -def calc_probs(t23, dm31, true_energy, true_coszen): # - ''' calculate osc prob of numu to nutau ''' - L1 = 19. # atmospheric production height - R = 6378.2 + L1 # mean radius of the Earth + L1 - phi = np.arcsin((1-L1/R)*np.sin(np.arccos(true_coszen))) - psi = np.arccos(true_coszen) - phi - propdist = np.sqrt( (R-L1)**2 + R**2 - (2*(R-L1)*R*np.cos(psi))) - - return t23*np.sin(1.267*dm31*propdist/true_energy)**2 # constant arise from conversion of units for L and E - -# vectorized function to apply (flux * prob) -# must be outside class -if FTYPE == np.float64: - FX = 'f8' - IX = 'i8' -else: - FX = 'f4' - IX = 'i4' -signature = f'({FX}[:], {FX}, {FX}, {FX}, {FX}, {IX}, {FX}[:])' -@guvectorize([signature], '(d),(),(),(),(),()->()', target=TARGET) -def apply_probs_vectorized(flux, t23, dm31, true_energy, true_coszen, nuflav, out): - if nuflav==1: # numu receive weights dependent on numu survival prob - out[0] *= flux[1] * (1.0-calc_probs(t23, dm31, true_energy, true_coszen)) - elif nuflav==3: # nutau receive weights dependent on nutau appearance prob - out[0] *= flux[1] * calc_probs(t23, dm31, true_energy, true_coszen) - else: - assert nuflav==0 - out[0] *= flux[0] diff --git a/pisa/stages/pid/__init__.py b/pisa/stages/pid/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/pid/shift_scale_pid.py b/pisa/stages/pid/shift_scale_pid.py deleted file mode 100644 index ec9e101a8..000000000 --- a/pisa/stages/pid/shift_scale_pid.py +++ /dev/null @@ -1,103 +0,0 @@ -""" -The purpose of this stage is shift and/or scale the pid values. -""" - -from __future__ import absolute_import, print_function, division - -from numba import guvectorize -import numpy as np - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils import vectorizer -from pisa.utils.numba_tools import WHERE - -__all__ = ['shift_scale_pid'] - -__author__ = 'L. Fischer' - - -class shift_scale_pid(Stage): - """ - Shift/scale pid. - - Parameters - ---------- - params - bias : float - shift pid values by given bias - scale : float - scale pid values by given scale factor - """ - - def __init__(self, - **std_kwargs, - ): - - # register expected parameters - expected_params = ('bias', 'scale',) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - assert self.calc_mode == 'events' - - def setup_function(self): - """Setup the stage""" - - # set the correct data mode - self.data.representation = self.calc_mode - for container in self.data: - container['calculated_pid'] = np.empty((container.size), dtype=FTYPE) - container['original_pid'] = np.empty((container.size), dtype=FTYPE) - vectorizer.assign(vals=container['pid'], out=container['original_pid']) - - def compute_function(self): - """Perform computation""" - - # bias/scale have no units. - bias = self.params.bias.m_as('dimensionless') - scale = self.params.scale.m_as('dimensionless') - - for container in self.data: - calculate_pid_function(bias, - scale, - container['original_pid'], - out=container['calculated_pid']) - container.mark_changed('calculated_pid') - - def apply_function(self): - for container in self.data: - # set the pid value to the calculated one - vectorizer.assign(vals=container['calculated_pid'], out=container['pid']) - -signatures = [ - '(f4[:], f4[:], f4[:], f4[:])', - '(f8[:], f8[:], f8[:], f8[:])' -] - -layout = '(),(),()->()' - - -@guvectorize(signatures, layout, target=TARGET) -def calculate_pid_function(bias_value, scale_factor, pid, out): - """This function selects a pid cut by shifting the pid variable so - the default cut at 1.0 is at the desired cut position. - - Parameters - ---------- - bias_value : scalar - shift pid values by this bias - scale_factor : scalar - scale pid values with this factor - pid : scalar - pid variable - out : scalar - shifted pid values - - """ - - out[0] = (scale_factor[0] * pid[0]) + bias_value[0] diff --git a/pisa/stages/reco/__init__.py b/pisa/stages/reco/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/reco/resolutions.py b/pisa/stages/reco/resolutions.py deleted file mode 100644 index 525b45cce..000000000 --- a/pisa/stages/reco/resolutions.py +++ /dev/null @@ -1,68 +0,0 @@ -# pylint: disable=not-callable - -""" -Stage for resolution improvement studies - -""" - -from __future__ import absolute_import, print_function, division - -from pisa.core.stage import Stage -from pisa.utils.log import logging - - -class resolutions(Stage): - """ - stage to change the reconstructed information by a given amount - This can be used to esimate the impact of improved recosntruction - resolutions for instance - - Parameters - ---------- - params - Expected params .. :: - - energy_improvement : quantity (dimensionless) - scale the reco error down by this fraction - coszen_improvement : quantity (dimensionless) - scale the reco error down by this fraction - pid_improvement : quantity (dimensionless) - applies a shift to the classification parameter - - """ - def __init__( - self, - **std_kwargs - ): - expected_params = ( - 'energy_improvement', - 'coszen_improvement', - 'pid_improvement', - ) - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - - self.data.representation = self.apply_mode - - for container in self.data: - logging.info('Changing energy resolutions') - container['reco_energy'] += (container['true_energy'] - container['reco_energy']) * self.params.energy_improvement.m_as('dimensionless') - container.mark_changed('reco_energy') - - logging.info('Changing coszen resolutions') - container['reco_coszen'] += (container['true_coszen'] - container['reco_coszen']) * self.params.coszen_improvement.m_as('dimensionless') - container.mark_changed('reco_coszen') - # make sure coszen is within -1/1 ? - - logging.info('Changing PID resolutions') - if container.name in ['numu_cc', 'numubar_cc']: - container['pid'] += self.params.pid_improvement.m_as('dimensionless') - else: - container['pid'] -= self.params.pid_improvement.m_as('dimensionless') - container.mark_changed('pid') diff --git a/pisa/stages/reco/simple_param.py b/pisa/stages/reco/simple_param.py deleted file mode 100644 index d624161fc..000000000 --- a/pisa/stages/reco/simple_param.py +++ /dev/null @@ -1,527 +0,0 @@ -# pylint: disable=not-callable - -""" -Create reconstructed and PID variables based on truth information -for MC events using simple parameterisations. -""" - -#TODO In future this could be integrated with param.py (but, that meed updating from cake to pi first) - - -from __future__ import absolute_import, print_function, division - -import math, fnmatch, collections -import numpy as np - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import WHERE, myjit, ftype - - - -__all__ = ["simple_param","simple_reco_energy_parameterization","simple_reco_coszen_parameterization","simple_pid_parameterization"] - -__author__ = 'T. Stuttard' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def dict_lookup_wildcard(dict_obj,key) : - ''' - Find the object in a dict specified by a key, where the key may include wildcards - - Parameters - ---------- - dict_obj : dict - The dict (or dict-like) object to search - key : str - The key to search for in the dict (may include wildcards) - - Returns - ------- - key : str - The str found in the dict matching the wildcard - value : anything - The value found corresponding to the the requested key - ''' - - assert isinstance(dict_obj,collections.abc.Mapping) - assert isinstance(key,str) - - matches = collections.OrderedDict([ (k,v) for k,v in dict_obj.items() if fnmatch.fnmatch(key,k) ]) - - assert len(matches) > 0, "No match for '%s' found in dict" % key - assert len(matches) < 2, "Multiple matches for '%s' found in dict : %s" % (key,matches.keys()) - - return matches.keys()[0], matches.values()[0] - - -def logistic_function(a,b,c,x) : - ''' - Logistic function as defined here: https://en.wikipedia.org/wiki/Logistic_function. - Starts off slowly rising, before steeply rising, then plateaus. - - Parameters - ---------- - a : float - Normalisation (e.g. plateau height) - b : float - Steepness of rise (larger value means steeper rise) - c : float - x value at half-height of curve - x : array - The continuous parameter - - Returns - ------- - f(x) : array - The results of applying the logistic function to x - ''' - return a / (1 + np.exp( -b * (x-c) ) ) - - -def has_muon(particle_key) : - ''' - Function returning True if the particle type has muons in the final state - This is numu CC and atmopsheric muons - - Parameters - ---------- - particle_key : string - Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. - - - Returns - ------- - has_muon : bool - Flag set to try if particle has muon in final state - ''' - - #TODO consider adding nutau CC where the tau decays to muons - - return ( (particle_key.startswith("numu") and particle_key.endswith("_cc")) or particle_key.startswith("muon") ) - - - -def visible_energy_correction(particle_key) : - ''' - Simple way to estimate the amount of visible energy in the event. - - Right now considering cases with final state neutrinos, such as NC events, - and nutau CC events (where the tau decays to a tau neutrino). - - Neglecting the much lower losses due to muon decay for numu CC. - Also neglecting fact that different particle types produce differing photon yields. - - I've tuned these by eye due to the biases seen in GRECO pegleg, which to first - order I'm assuming are due to this missing energy. - There is also a bias in numu CC in GRECO, but suspect this is due to containment - or stochastics, but either way not reproducing this here. - - Parameters - ---------- - particle_key : string - Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. - - Returns - ------- - visible_energy : array - Estimated visible energy in each event - - ''' - - #TODO Add some smearing - - # NC events have final state neutrino - if particle_key.endswith("_nc") : - return 0.4 #TODO tune, consider inelasticity numbers vs energy (including nu vs nubar) - - # nutau CC events have final state neutrino, but from a subsequent tau decay - elif particle_key.startswith("nutau") and particle_key.endswith("_cc") : - return 0.6 #TODO tune, consider decay spectrum vs energy - - # muons are all over the place since their "true_energy" doesn't reflect any real value in the ice (is energy as surface of generation cylinder) - elif particle_key == "muons" : - return 0.1 #TODO Should really store deposied energy in the frame instead - - # Everything else deposits full energy as visible energy - else : - return 1. - - -def energy_dependent_sigma(energy,energy_0,sigma_0,energy_power) : - ''' - Returns an energy dependent sigma (standard deviation) value(s), - with energy dependence defined as follows: - - sigma(E) = sigma(E=E0) * (E/E0)^n - - Parameters - ---------- - energy : array or float - Energy value to evaluate sigma at - energy_0 : float - Energy at which sigma_0 is defined - sigma_0 : float - The value of sigma at energy_0 - energy_power : float - Power/index fo the energy dependence - - Returns - ------- - sigma(energy) : array or float - The value of sigma at the specified energy (or energies) - ''' - return sigma_0 * np.power(energy/energy_0,energy_power) - - -def simple_reco_energy_parameterization(particle_key,true_energy,params,random_state) : - ''' - Function to produce a smeared reconstructed energy distribution. - Resolution is particle- and energy-dependent - Use as a placeholder if real reconstructions are not currently available. - - Parameters - ---------- - particle_key : string - Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. - - true_energy : array - True energy array. - - params : dict - keys : particle key (wilcards accepted) - values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] - (example: params = {'nue*_cc':[10.,0.2,0.2],}) - - random_state : np.random.RandomState - User must provide the random state, meaning that reproducible results - can be obtained when calling multiple times. - - Returns - ------- - reco_energy : array - Reconstructed energy array. - ''' - - #TODO Update docs - - # Default random state with no fixed seed - if random_state is None : - random_state = np.random.RandomState() - - # Get the visible energy - visible_energy = true_energy * visible_energy_correction(particle_key) - - # Grab the params for this particle type - _,energy_dependent_sigma_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) - - # Get the sigma of the "reco error" distribution (energy dependent) - # Easier to use this than the "reco energy" directly - energy_0 = energy_dependent_sigma_params[0] - reco_error_sigma_0 = energy_dependent_sigma_params[1] - energy_power = energy_dependent_sigma_params[2] - reco_error_sigma = energy_dependent_sigma(visible_energy,energy_0,reco_error_sigma_0,energy_power) - - # Get the reco error - reco_error = random_state.normal(np.zeros_like(reco_error_sigma),reco_error_sigma) - - # Compute the corresponding reco energy - # Use visible energy since that is what really matters - reco_energy = visible_energy * ( reco_error + 1. ) - - # Ensure physical values - reco_energy[reco_energy < 0.] = 0. - - return reco_energy - - -def simple_reco_coszen_parameterization(particle_key,true_energy,true_coszen,params,random_state) : - ''' - Function to produce a smeared reconstructed cos(zenith) distribution. - Resolution is particle- and energy-dependent - Use as a placeholder if real reconstructions are not currently available. - Keep within the rotational bounds - - Parameters - ---------- - true_coszen : array - True cos(zenith angle) array. - - true_energy : array - True energy array. - - params : dict - keys : particle key (wilcards accepted) - values : list : [ E0 (reference true_energy), median reco error at E0, index/power of energy dependence ] - (example: params = {'nue*_cc':[10.,0.2,0.5],}) - - random_state : np.random.RandomState - User must provide the random state, meaning that reproducible results - can be obtained when calling multiple times. - - Returns - ------- - reco_coszen : array - Reconstructed cos(zenith angle) array. - ''' - - # Default random state with no fixed seed - if random_state is None : - random_state = np.random.RandomState() - - # Get the visible energy - visible_energy = true_energy * visible_energy_correction(particle_key) - - # Grab the params for this particle type - _,energy_dependent_sigma_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) - - # Get the sigma of the "reco error" distribution (energy dependent) - # Easier to use this than the "reco coszen" directly - energy_0 = energy_dependent_sigma_params[0] - reco_error_sigma_0 = energy_dependent_sigma_params[1] - energy_power = energy_dependent_sigma_params[2] - reco_error_sigma = energy_dependent_sigma(visible_energy,energy_0,reco_error_sigma_0,energy_power) - - # Get the reco error - reco_error = random_state.normal(np.zeros_like(reco_error_sigma),reco_error_sigma) - - # Compute the corresponding reco coszen - # Use visible energy since that is what really matters - reco_coszen = true_coszen + reco_error - - # Enforce rotational bounds - out_of_bounds_mask = reco_coszen > 1. - reco_coszen[out_of_bounds_mask] = reco_coszen[out_of_bounds_mask] - ( 2. * (reco_coszen[out_of_bounds_mask] - 1.) ) - - out_of_bounds_mask = reco_coszen < -1. - reco_coszen[out_of_bounds_mask] = reco_coszen[out_of_bounds_mask] - ( 2. * (reco_coszen[out_of_bounds_mask] + 1.) ) - - return reco_coszen - - -def simple_pid_parameterization(particle_key,true_energy,params,track_pid,cascade_pid,random_state,) : - ''' - Function to assign a PID based on truth information. - Is particle-, interaction- and energy-dependent - Approximating energy dependence using a logistic function. - Can use as a placeholder if real reconstructions are not currently available. - - Parameters - ---------- - particle_key : string - Key identifiying the particle type, e.g. numu_cc, nutau_nc, muon, etc. - - true_energy : array - True energy array. - - params : dict - keys : particle key (wilcards accepted) - values : Logistic function params for track ID (list) : [ normalisation (plateau height), steepness of rise, true_energy at half-height ] - (example: params = {'nue*_cc':[0.05,0.2,15.],}) - - track_pid : float - A PID value to assign to track-like events - - cascade_pid : float - A PID value to assign to cascade-like events - - random_state : np.random.RandomState - User must provide the random state, meaning that reproducible results - can be obtained when calling multiple times. - - Returns - ------- - pid : array - PID values. - ''' - - # Default random state with no fixed seed - if random_state is None : - random_state = np.random.RandomState() - - # Grab the params for this particle type - _,logistic_func_params = dict_lookup_wildcard(dict_obj=params,key=particle_key) - - # Define whether each particle is a track - track_prob = logistic_function(logistic_func_params[0],logistic_func_params[1],logistic_func_params[2],true_energy) - track_mask = random_state.uniform(0.,1.,size=true_energy.size) < track_prob - - # Assign PID values - pid = np.full_like(true_energy,np.NaN) - pid[track_mask] = track_pid - pid[~track_mask] = cascade_pid - - return pid - - -class simple_param(Stage): - """ - Stage to generate reconstructed parameters (energy, coszen, pid) using simple parameterizations. - These are not fit to any input data, but are simple and easily understandable and require no - input reconstructed events. - - Can easily be tuned to any desired physics case, rught now repesent a DeepCore/ICU-like detector. - - Parameters - ---------- - params : ParamSet - Must exclusively have parameters: - - perfect_reco : bool - If True, use "perfect reco": reco == true, numu(bar)_cc -> tracks, rest to cascades - If False, use the parametrised reco energy, coszen and pid functions - - reco_energy_params : dict - Dict defining the `params` argument to `simple_reco_energy_parameterization` - See `simple_reco_energy_parameterization` documentatio for more details - - reco_coszen_params : dict - Dict defining the `params` argument to `simple_reco_coszen_parameterization` - See `simple_reco_coszen_parameterization` documentatio for more details - - pid_track_params : dict - Dict defining the `params` argument to `simple_pid_parameterization` - See `simple_pid_parameterization` documentatio for more details - - track_pid : float - The numerical 'pid' variable value to assign for tracks - - cascade_pid : float - The numerical 'pid' variable value to assign for cascades - - """ - - def __init__(self, - **std_kwargs, - ): - - expected_params = ( - "perfect_reco", #TODO move these to constructor args? - "reco_energy_params", - "reco_coszen_params", - "pid_track_params", - "track_pid", - "cascade_pid", - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - def setup_function(self): - - #TODO Could add a number of discrete cases here that can be selected betweeen, e.g. ICU baseline (LoI?), DeepCore current best, etc... - - - # Get params - perfect_reco = self.params.perfect_reco.value - reco_energy_params = eval(self.params.reco_energy_params.value) - reco_coszen_params = eval(self.params.reco_coszen_params.value) - pid_track_params = eval(self.params.pid_track_params.value) - track_pid = self.params.track_pid.value.m_as("dimensionless") - cascade_pid = self.params.cascade_pid.value.m_as("dimensionless") - - # If using random numbers, use a random state with a fixed seed to make the - # same smearing for e.g. template and pseudodata (this achieves the same - # as we would normally use if we had reco variales in the file). - # Note that this doesn't affect other random numbers generated by other - # calls to numpy.random throughout the code. - random_state = np.random.RandomState(0) #TODO seed as arg/param - - for container in self.data : - - # Get stuff that is used multiples times - particle_key = container.name - true_energy = container["true_energy"] - true_coszen = container["true_coszen"] - - # Create container if not already present - if "reco_energy" not in container : - container['reco_energy'] = np.full_like(true_energy,np.NaN,dtype=FTYPE) - - # Create the reco energy variable - if perfect_reco : - reco_energy = true_energy - else : - reco_energy = simple_reco_energy_parameterization( - particle_key=particle_key, - true_energy=true_energy, - params=reco_energy_params, - random_state=random_state, - ) - - # Write to the container - container["reco_energy"][:] = reco_energy - container.mark_changed("reco_energy") - - - # - # Get reco coszen - # - - # Create container if not already present - if "reco_coszen" not in container : - container['reco_coszen'] = np.full_like(true_coszen,np.NaN,dtype=FTYPE) - - # Create the reco coszen variable - if perfect_reco : - reco_coszen = true_coszen - else : - reco_coszen = simple_reco_coszen_parameterization( - particle_key=particle_key, - true_energy=true_energy, - true_coszen=true_coszen, - params=reco_coszen_params, - random_state=random_state, - ) - - # Write to the container - container["reco_coszen"][:] = reco_coszen - container.mark_changed("reco_coszen") - - - # - # Create a PID variable - # - - # Create container if not already present - if "pid" not in container : - container['pid'] = np.full_like(true_energy,np.NaN,dtype=FTYPE) - - # Create the PID variable - if perfect_reco : - pid_value = track_pid if has_muon(particle_key) else cascade_pid - pid = np.full_like(true_energy,pid_value) - else : - pid = simple_pid_parameterization( - particle_key=particle_key, - true_energy=true_energy, - params=pid_track_params, - track_pid=track_pid, - cascade_pid=cascade_pid, - random_state=random_state, - ) - - # Write to the container - container["pid"][:] = pid - container.mark_changed("pid") - - - diff --git a/pisa/stages/utils/__init__.py b/pisa/stages/utils/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/utils/add_indices.py b/pisa/stages/utils/add_indices.py deleted file mode 100644 index 8b5fe7067..000000000 --- a/pisa/stages/utils/add_indices.py +++ /dev/null @@ -1,87 +0,0 @@ -''' -PISA module to prep incoming data into formats that are -compatible with the mc_uncertainty likelihood formulation - -This module takes in events containers from the pipeline, and -introduces an additional array giving the indices where each -event falls into. - -module structure imported from bootcamp example -''' - -from __future__ import absolute_import, print_function, division - -__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)" - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -#from pisa.utils.log import logging - -# Load the modified index lookup function -from pisa.core.bin_indexing import lookup_indices - - - -class add_indices(Stage): - """ - PISA Pi stage to map out the index of the analysis - binning where each event falls into. - - Parameters - ---------- - params - foo : Quantity - bar : Quanitiy with time dimension - - Notes: - ------ - - input and calc specs are predetermined in the module - (inputs from the config files will be disregarded) - - - stage appends an array quantity called bin_indices - - stage also appends an array mask to access events by - bin index later in the pipeline - - """ - - # this is the constructor with default arguments - - def __init__(self, - **std_kwargs, - ): - - - # init base class - super(add_indices, self).__init__( - expected_params=(), - **std_kwargs, - ) - - - def setup_function(self): - ''' - Calculate the bin index where each event falls into - - Create one mask for each analysis bin. - ''' - - assert self.calc_mode == 'events', 'ERROR: calc specs must be set to "events for this module' - - - for container in self.data: - self.data.representation = self.calc_mode - variables_to_bin = [] - for bin_name in self.apply_mode.names: - variables_to_bin.append(container[bin_name]) - - indices = lookup_indices(sample=variables_to_bin, - binning=self.apply_mode) - - container['bin_indices'] = indices - - self.data.representation = self.apply_mode - for bin_i in range(self.apply_mode.tot_num_bins): - container['bin_{}_mask'.format(bin_i)] = container['bin_indices'] == bin_i - diff --git a/pisa/stages/utils/adhoc_sys.py b/pisa/stages/utils/adhoc_sys.py deleted file mode 100644 index 30b987b42..000000000 --- a/pisa/stages/utils/adhoc_sys.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Stage to implement an ad-hoc systematic that corrects the discrepancy between data and -MC in one particular variable. This can be used to check how large the impact of such a -hypothetical systematic would be on the physics parameters of an analysis. -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils import vectorizer -from pisa.utils.log import logging -from pisa.utils.resources import find_resource -from pisa.utils.jsons import from_json -from pisa.core.binning import OneDimBinning, MultiDimBinning - -class adhoc_sys(Stage): # pylint: disable=invalid-name - """ - Stage to re-weight events according to factors derived from post-fit data/MC - comparisons. The comparisons are produced somewhere externally and stored as a JSON - which encodes the binning that was used to make the comparison and the resulting - scaling factors. - - Parameters - ---------- - - variable_name : str - Name of the variable to correct data/MC agreement for. The variable must be - loaded in the data loading stage and it must be present in the loaded JSON file. - - scale_file : str - Path to the file which contains the binning and the scale factors. The JSON - file must contain a dictionary in which, for each variable, a 1D binning and - an array of factors. This file is produced externally from PISA. - """ - def __init__( - self, - data=None, - params=None, - variable_name=None, - scale_file=None, - **std_kwargs, - ): - - expected_params = () - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - assert self.calc_mode == "events" - assert self.apply_mode == "events" - - self.scale_file = scale_file - self.variable = variable_name - - def setup_function(self): - scale_file = find_resource(self.scale_file) - logging.info("Loading scaling factors from : %s", scale_file) - - scaling_dict = from_json(scale_file) - scale_binning = MultiDimBinning(**scaling_dict[self.variable]["binning"]) - - scale_factors = np.array(scaling_dict[self.variable]["scales"], dtype=FTYPE) - logging.info(f"Binning for ad-hoc systematic: \n {str(scale_binning)}") - logging.info(f"scaling factors of ad-hoc systematic:\n {str(scale_factors)}") - self.data.representation = scale_binning - for container in self.data: - container["adhoc_scale_factors"] = scale_factors - - def apply_function(self): - for container in self.data: - container["weights"] *= container["adhoc_scale_factors"] - diff --git a/pisa/stages/utils/bootstrap.py b/pisa/stages/utils/bootstrap.py deleted file mode 100644 index 317335a09..000000000 --- a/pisa/stages/utils/bootstrap.py +++ /dev/null @@ -1,202 +0,0 @@ -""" -Make bootstrap samples of data. - -This stage allows one to resample datasets to estimate MC uncertainties without having -to decrease statistics. Bootstrap samples are produced by random selection with -replacement, which is implemented in this stage by an equivalent re-weighting of -events. -""" - -import numpy as np -from copy import deepcopy -from collections import OrderedDict - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.numba_tools import WHERE -from pisa.utils import vectorizer - -from pisa.utils.log import logging, set_verbosity - -__author__ = "A. Trettin" - -__license__ = """Copyright (c) 2022, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -class bootstrap(Stage): - """ - Stage to make bootstrap samples from input data. - - Parameters - ---------- - seed : int, optional - Seed for the random number generator. - """ - - def __init__( - self, - seed=None, - **std_kwargs, - ): - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - assert self.calc_mode == "events" - - if seed is None: - self.seed = None - else: - self.seed = int(seed) - - def setup_function(self): - - logging.debug(f"Setting up bootstrap with seed: {self.seed}") - - from numpy.random import default_rng - - rng = default_rng(self.seed) - - for container in self.data: - sample_size = container["weights"].size - # indices of events are randomly chosen from the entire sample until - # we have a new sample of the same size - sample_idx = rng.integers(sample_size, size=sample_size) - # Instead of manipulating all of the data arrays, we count how often each - # index was chosen and take that as a weight, i.e. an event that was selected - # twice will have a weight of 2. - sample_weights = np.bincount(sample_idx, minlength=sample_size) - container["bootstrap_weights"] = sample_weights - - def apply_function(self): - - for container in self.data: - container["weights"] *= container["bootstrap_weights"] - - -def insert_bootstrap_after_data_loader(cfg_dict, seed=None): - """ - Given a pipeline configuration parsed with `parse_pipeline_config`, insert the - bootstrap stage directly after the `simple_data_loader` stage and return the - modified config dict. - - Parameters - ---------- - cfg_dict : collections.OrderedDict - Pipeline configuration in the form of an ordered dictionary. - seed : int, optional - Seed to be placed into the pipeline configuration. - - Returns - ------- - collections.OrderedDict - A deepcopy of the original input `cfg_dict` with the configuration of the - bootstrap stage inserted after the data loader. - """ - - bootstrap_stage_cfg = OrderedDict() - bootstrap_stage_cfg["apply_mode"] = "events" - bootstrap_stage_cfg["calc_mode"] = "events" - bootstrap_stage_cfg["seed"] = seed - - bootstrap_pipe_cfg = deepcopy(cfg_dict) - - # Important: Cannot mutate dict while iterating over it, instantiate list instead - for k in list(bootstrap_pipe_cfg.keys()): - bootstrap_pipe_cfg.move_to_end(k) - if k == ("data", "simple_data_loader"): - bootstrap_pipe_cfg[("utils", "bootstrap")] = bootstrap_stage_cfg - - return bootstrap_pipe_cfg - - -def test_bootstrap(): - """Unit test for the bootstrap stage.""" - - from pisa.core.distribution_maker import DistributionMaker - from pisa.core.map import Map - from pisa.utils.config_parser import parse_pipeline_config - from pisa.utils.comparisons import ALLCLOSE_KW - - from numpy.testing import assert_allclose - - example_cfg = parse_pipeline_config("settings/pipeline/example.cfg") - - # We need to insert the bootstrap stage right after the data loading stage - bootstrap_pipe_cfg = insert_bootstrap_after_data_loader(example_cfg, seed=0) - - logging.debug("bootstrapped pipeline stage order:") - logging.debug(list(bootstrap_pipe_cfg.keys())) - - # get a baseline - dmaker = DistributionMaker([example_cfg]) - map_baseline = dmaker.get_outputs(return_sum=True)[0] - - # Make sure that different seeds produce different maps, and that the same seed will - # produce the same map. - dmaker = DistributionMaker([bootstrap_pipe_cfg]) - map_seed0 = dmaker.get_outputs(return_sum=True)[0] - - # find key of bootstrap stage - bootstrap_idx = 0 - for i, stage in enumerate(dmaker.pipelines[0].stages): - if stage.__class__.__name__ == "bootstrap": - bootstrap_idx = i - - # without re-loading the entire pipeline, we set the seed and call the setup function - # to save time for the test - dmaker.pipelines[0].stages[bootstrap_idx].seed = 1 - dmaker.pipelines[0].stages[bootstrap_idx].setup() - - map_seed1 = dmaker.get_outputs(return_sum=True)[0] - - assert not map_seed0 == map_seed1 - - dmaker.pipelines[0].stages[bootstrap_idx].seed = 0 - dmaker.pipelines[0].stages[bootstrap_idx].setup() - map_seed0_reprod = dmaker.get_outputs(return_sum=True)[0] - - assert map_seed0 == map_seed0_reprod - - # Quantify the variance of the resulting maps. They should be about the size of the - # expectation from sum of weights-squared. - - nominal_values = [] - for i in range(100): - dmaker.pipelines[0].stages[bootstrap_idx].seed = i - dmaker.pipelines[0].stages[bootstrap_idx].setup() - map_bootstrap = dmaker.get_outputs(return_sum=True)[0] - nominal_values.append(map_bootstrap.nominal_values) - - nominal_values = np.stack(nominal_values) - with np.errstate(divide="ignore", invalid="ignore"): - # calculate the ratio between the bootstrap nominal and the baseline nominal - bs_nom_ratios = np.mean(nominal_values, axis=0) / map_baseline.nominal_values - # and the standard deviation ratio as well - bs_std_ratios = np.std(nominal_values, axis=0) / map_baseline.std_devs - # assert that both nominal and standard deviation match the expectation from - # baseline up to a small error - assert np.abs(np.nanmean(bs_nom_ratios) - 1.0) < 0.01 - # the standard deviations are a little harder to match in 100 samples - assert np.abs(np.nanmean(bs_std_ratios) - 1.0) < 0.02 - - logging.info("<< PASS : bootstrap >>") - - -if __name__ == "__main__": - set_verbosity(1) - test_bootstrap() diff --git a/pisa/stages/utils/fix_error.py b/pisa/stages/utils/fix_error.py deleted file mode 100644 index 89249f4f6..000000000 --- a/pisa/stages/utils/fix_error.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Stage to take the initial errors of MC and keep them -for all minimization. - -Needed to allow mod_chi2 to behave correctly -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils import vectorizer -from pisa.utils.numba_tools import WHERE - -class fix_error(Stage): # pylint: disable=invalid-name - """ - stage to fix the error returned by template_maker. - """ - def __init__( - self, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - def setup_function(self): - for container in self.data: - container['frozen_errors'] = np.empty((container.size), dtype=FTYPE) - - def compute_function(self): - for container in self.data: - container["frozen_errors"][:] = container["errors"] - container.mark_changed('frozen_errors') - - def apply_function(self): - for container in self.data: - container['errors'][:] = container['frozen_errors'] - container.mark_changed('errors') - diff --git a/pisa/stages/utils/hist.py b/pisa/stages/utils/hist.py deleted file mode 100644 index 729927b93..000000000 --- a/pisa/stages/utils/hist.py +++ /dev/null @@ -1,196 +0,0 @@ -""" -Stage to transform arrays with weights into actual `histograms` -that represent event counts -""" - -import numpy as np - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.core.translation import histogram -from pisa.core.binning import MultiDimBinning, OneDimBinning -from pisa.utils.profiler import profile, line_profile -from pisa.utils import vectorizer -from pisa.utils.log import logging - - -class hist(Stage): # pylint: disable=invalid-name - - """stage to histogram events - - Parameters - ---------- - unweighted : bool, optional - Return un-weighted event counts in each bin. - """ - def __init__( - self, - apply_unc_weights=False, - unweighted=False, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - assert self.calc_mode is not None - assert self.apply_mode is not None - self.regularized_apply_mode = None - self.apply_unc_weights = apply_unc_weights - self.unweighted = unweighted - - def setup_function(self): - - assert isinstance(self.apply_mode, MultiDimBinning), ( - "Hist stage needs a binning as `apply_mode`, but is %s" % self.apply_mode - ) - - if isinstance(self.calc_mode, MultiDimBinning): - - # The two binning must be exclusive - assert len(set(self.calc_mode.names) & set(self.apply_mode.names)) == 0 - - transform_binning = self.calc_mode + self.apply_mode - - # go to "events" mode to create the transforms - - for container in self.data: - self.data.representation = "events" - sample = [container[name] for name in transform_binning.names] - hist = histogram(sample, None, transform_binning, averaged=False) - transform = hist.reshape(self.calc_mode.shape + (-1,)) - self.data.representation = self.calc_mode - container["hist_transform"] = transform - - elif self.calc_mode == "events": - # For dimensions where the binning is irregular, we pre-compute the - # index that each sample falls into and then bin regularly in the index. - # For dimensions that are logarithmic, we add a linear binning in - # the logarithm. - dimensions = [] - for dim in self.apply_mode: - if dim.is_irregular: - # create a new axis with digitized variable - varname = dim.name + "__" + self.apply_mode.name + "_idx" - new_dim = OneDimBinning( - varname, domain=[0, dim.num_bins], num_bins=dim.num_bins - ) - dimensions.append(new_dim) - for container in self.data: - container.representation = "events" - x = container[dim.name] * dim.units - # Compute the bin index each sample would fall into, and - # shift by -1 such that samples below the binning range - # get assigned the index -1. - x_idx = np.searchsorted(dim.bin_edges, x, side="right") - 1 - # To be consistent with numpy histogramming, we need to - # shift those values that are exactly at the uppermost edge - # down one index such that they are included in the highest - # bin instead of being treated as an outlier. - on_edge = x == dim.bin_edges[-1] - x_idx[on_edge] -= 1 - container[varname] = x_idx - elif dim.is_log: - # We don't compute the log of the variable just yet, this - # will be done later during `apply_function` using the - # representation mechanism. - new_dim = OneDimBinning( - dim.name, domain=np.log(dim.domain.m), num_bins=dim.num_bins - ) - dimensions.append(new_dim) - else: - dimensions.append(dim) - self.regularized_apply_mode = MultiDimBinning(dimensions) - logging.debug( - "Using regularized binning:\n" + str(self.regularized_apply_mode) - ) - else: - raise ValueError(f"unknown calc mode: {self.calc_mode}") - - @profile - def apply_function(self): - - if isinstance(self.calc_mode, MultiDimBinning): - - if self.unweighted: - raise NotImplementedError( - "Unweighted hist only implemented in event-wise calculation" - ) - for container in self.data: - - container.representation = self.calc_mode - if "astro_weights" in container.keys: - weights = container["weights"] + container["astro_weights"] - else: - weights = container["weights"] - if self.apply_unc_weights: - unc_weights = container["unc_weights"] - else: - unc_weights = np.ones(weights.shape) - transform = container["hist_transform"] - - hist = (unc_weights*weights) @ transform - if self.error_method == "sumw2": - sumw2 = np.square(unc_weights*weights) @ transform - bin_unc2 = (np.square(unc_weights)*weights) @ transform - - container.representation = self.apply_mode - container["weights"] = hist - - if self.error_method == "sumw2": - container["errors"] = np.sqrt(sumw2) - container["bin_unc2"] = bin_unc2 - - elif self.calc_mode == "events": - for container in self.data: - container.representation = self.calc_mode - sample = [] - dims_log = [d.is_log for d in self.apply_mode] - dims_ire = [d.is_irregular for d in self.apply_mode] - for dim, is_log, is_ire in zip( - self.regularized_apply_mode, dims_log, dims_ire - ): - if is_log and not is_ire: - container.representation = "log_events" - sample.append(container[dim.name]) - else: - container.representation = "events" - sample.append(container[dim.name]) - - if self.unweighted: - if "astro_weights" in container.keys: - weights = np.ones_like(container["weights"] + container["astro_weights"]) - else: - weights = np.ones_like(container["weights"]) - else: - if "astro_weights" in container.keys: - weights = container["weights"] + container["astro_weights"] - else: - weights = container["weights"] - if self.apply_unc_weights: - unc_weights = container["unc_weights"] - else: - unc_weights = np.ones(weights.shape) - - # The hist is now computed using a binning that is completely linear - # and regular - hist = histogram( - sample, - unc_weights*weights, - self.regularized_apply_mode, - averaged=False - ) - - if self.error_method == "sumw2": - sumw2 = histogram(sample, np.square(unc_weights*weights), self.regularized_apply_mode, averaged=False) - bin_unc2 = histogram(sample, np.square(unc_weights)*weights, self.regularized_apply_mode, averaged=False) - - container.representation = self.apply_mode - container["weights"] = hist - - if self.error_method == "sumw2": - container["errors"] = np.sqrt(sumw2) - container["bin_unc2"] = bin_unc2 diff --git a/pisa/stages/utils/kde.py b/pisa/stages/utils/kde.py deleted file mode 100644 index 1c95c3eff..000000000 --- a/pisa/stages/utils/kde.py +++ /dev/null @@ -1,287 +0,0 @@ -""" -Stage to transform arrays with weights into KDE maps -that represent event counts -""" -import numpy as np - - -from copy import deepcopy -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.core.binning import MultiDimBinning, OneDimBinning -from pisa.utils.log import logging -from pisa.utils.profiler import profile -from pisa.utils import vectorizer -from pisa.utils import kde_hist - - -class kde(Stage): - """stage to KDE-map events - - Parameters - ---------- - - bw_method: string - 'scott' or 'silverman' (see kde module) - coszen_name : string - Binning name to identify the coszen bin that needs to undergo special - treatment for reflection - oversample : int - Evaluate KDE at more points per bin, takes longer, but is more accurate - stash_hists : bool - Evaluate KDE only once and stash the result. This effectively ignores all changes - from earlier stages, but greatly increases speed. Useful for muons where - only over-all weight and detector systematic variations matter, which can both - be applied on the histograms after this stage. - bootstrap : bool - Use the bootstrapping technique to estimate errors on the KDE histograms. - linearize_log_dims : bool - If True (default), calculate the KDE for a dimension that is binned - logarithmically on the logarithm of the sample values. This generally results - in better agreement of the total normalization of the KDE'd histograms to the - sum of weights. - - Notes - ----- - - Make sure enough events are present with reco energy below and above the - binning range, otherwise events will only "bleed out" - - """ - - def __init__( - self, - bw_method="silverman", - coszen_name="reco_coszen", - oversample=10, - coszen_reflection=0.25, - alpha=0.1, - stack_pid=True, - stash_hists=False, - bootstrap=False, - bootstrap_niter=10, - bootstrap_seed=None, - linearize_log_dims=True, - **std_kargs, - ): - - self.bw_method = bw_method - self.coszen_name = coszen_name - self.oversample = int(oversample) - self.coszen_reflection = float(coszen_reflection) - self.alpha = float(alpha) - self.stack_pid = stack_pid - self.stash_hists = stash_hists - self.stash_valid = False - self.linearize_log_dims = linearize_log_dims - self.bootstrap = bootstrap - self.bootstrap_niter = int(bootstrap_niter) - if bootstrap_seed is not None: - self.bootstrap_seed = int(bootstrap_seed) - else: - self.bootstrap_seed = None - - if stash_hists: - self.stashed_hists = None - if self.bootstrap: - self.stashed_errors = None - - # init base class - super().__init__( - expected_params=(), - **std_kargs, - ) - - assert self.calc_mode == "events" - self.regularized_apply_mode = None - - def setup_function(self): - - assert isinstance( - self.apply_mode, MultiDimBinning - ), f"KDE stage needs a binning as `apply_mode`, but is {self.apply_mode}" - - # For dimensions that are logarithmic, we add a linear binning in - # the logarithm (but only if this feature is enabled) - - if not self.linearize_log_dims: - self.regularized_apply_mode = self.apply_mode - return - - dimensions = [] - for dim in self.apply_mode: - if dim.is_lin: - new_dim = deepcopy(dim) - # We don't compute the log of the variable just yet, this - # will be done later during `apply_function` using the - # representation mechanism. - # We replace the logarithmic binning with a linear binning in log-space - elif dim.is_irregular: - new_dim = OneDimBinning( - dim.name, - bin_edges=np.log(dim.bin_edges.m), - ) - else: - new_dim = OneDimBinning( - dim.name, domain=np.log(dim.domain.m), num_bins=dim.num_bins - ) - dimensions.append(new_dim) - - self.regularized_apply_mode = MultiDimBinning(dimensions) - logging.debug( - "Using regularized binning:\n" + repr(self.regularized_apply_mode) - ) - - @profile - def apply(self): - # this is special, we want the actual event weights in the kde - # therefor we're overwritting the apply function - # normally in a stage you would implement the `apply_function` method - # and not the `apply` method! - - for container in self.data: - - if self.stash_valid: - self.data.representation = self.apply_mode - # Making a copy of the stash so that subsequent stages will not manipulate - # it. - container["weights"] = self.stashed_hists[container.name].copy() - if self.bootstrap: - container["errors"] = self.stashed_errors[container.name].copy() - continue - - sample = [] - dims_log = [d.is_log for d in self.apply_mode] - for dim, is_log in zip(self.regularized_apply_mode, dims_log): - if is_log and self.linearize_log_dims: - container.representation = "log_events" - sample.append(container[dim.name]) - else: - container.representation = "events" - sample.append(container[dim.name]) - - # Make sure that we revert back to "events" before extracting weights (could - # otherwise end up in "log_events"). - container.representation = "events" - - sample = np.stack(sample).T - weights = container["weights"] - - kde_kwargs = dict( - sample=sample, - binning=self.regularized_apply_mode, - # weights=weights, - bw_method=self.bw_method, - coszen_name=self.coszen_name, - coszen_reflection=self.coszen_reflection, - alpha=self.alpha, - oversample=self.oversample, - use_cuda=False, - stack_pid=self.stack_pid, - # bootstrap=self.bootstrap, - # bootstrap_niter=self.bootstrap_niter, - ) - - if self.bootstrap: - from numpy.random import default_rng - - kde_maps = [] - rng = default_rng(self.bootstrap_seed) - sample_size = container.size - for i in range(self.bootstrap_niter): - # Indices of events are randomly chosen from the entire sample until - # we have a new sample of the same size. - # If we are stacking in PID, we will want to do this independently - # for each PID channel. - - # We accumulate sample weights into one array. - sample_weights = np.zeros(sample_size) - - if self.stack_pid: - binning = self.regularized_apply_mode - bin_edges = [b.bin_edges.m for b in binning] - pid_bin = binning.names.index("pid") - pid_bin_edges = bin_edges[pid_bin] - - n_ch = len(pid_bin_edges) - 1 - - for pid_channel in range(n_ch): - # Get mask of events falling into this PID bin - pid_mask = ( - sample[:, pid_bin] >= pid_bin_edges[pid_channel] - ) & (sample[:, pid_bin] < pid_bin_edges[pid_channel + 1]) - pid_size = np.sum(pid_mask) - # Select indices of the appropriate size for just this PID - # channel - pid_sample_idx = rng.integers(pid_size, size=pid_size) - # Instead of manipulating all of the data arrays, we count - # how often each index was chosen and take that as a weight, - # i.e. an event that was selected twice will have a weight - # of 2. - pid_sample_weights = np.bincount( - pid_sample_idx, minlength=pid_size - ) - sample_weights[pid_mask] += pid_sample_weights - # Ensure that we indeed conserved the number of events in each - # PID channel after all - for pid_channel in range(n_ch): - pid_mask = ( - sample[:, pid_bin] >= pid_bin_edges[pid_channel] - ) & (sample[:, pid_bin] < pid_bin_edges[pid_channel + 1]) - assert sum(sample_weights[pid_mask]) == sum(pid_mask) - else: - sample_idx = rng.integers(sample_size, size=sample_size) - # Instead of manipulating all of the data arrays, we count how - # often each index was chosen and take that as a weight, i.e. an - # event that was selected twice will have a weight of 2. - sample_weights = np.bincount(sample_idx, minlength=sample_size) - - with np.errstate(invalid="raise"): - try: - kde_maps.append( - kde_hist.kde_histogramdd( - weights=weights * sample_weights, **kde_kwargs - ) - ) - except FloatingPointError: - raise RuntimeError( - "Could not calculate KDE with the given sample. This can " - "happen if the bootstrap selects too few distinct events " - "in one of the PID channels." - ) - kde_maps = np.stack(kde_maps) - kde_map = np.mean(kde_maps, axis=0) - kde_errors = np.std(kde_maps, axis=0) - kde_errors = np.ascontiguousarray(kde_errors.ravel()) - else: - kde_map = kde_hist.kde_histogramdd(weights=weights, **kde_kwargs) - kde_map = np.ascontiguousarray(kde_map.ravel()) - - self.data.representation = self.apply_mode - - container["weights"] = kde_map - if self.bootstrap: - container["errors"] = kde_errors - - if self.stash_hists: - if self.stashed_hists is None: - self.stashed_hists = {} - if self.bootstrap: - self.stashed_errors = {} - # Making a copy is required because subsequent stages may change weights - # in-place. - self.stashed_hists[container.name] = kde_map.copy() - if self.bootstrap: - self.stashed_errors[container.name] = kde_errors.copy() - - self.stash_valid = ( - self.stash_hists - ) # valid is true if we are stashing, else not - - -# Placing a unit test here creates an import error due to the fact that the class -# defined above has the exact same name as the `kde` module that has to be imported to -# make it work. If this script is __main__, then we import `kde` (the stage) directly -# into the main scope and thus overshadow `kde` (the module). -# The unit test for this stage is therefore instead placed in -# pisa/pisa_tests/test_kde_stage.py diff --git a/pisa/stages/utils/kfold.py b/pisa/stages/utils/kfold.py deleted file mode 100644 index 6ee5889da..000000000 --- a/pisa/stages/utils/kfold.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Make K-folds of data. - -This stage can be used to split MC into chunks of equal size and to select only one -chunk to make histograms from. It uses the KFold class from scikit-learn to make -"test" and "train" indeces for the dataset and sets all weights in the "train" -indeces to zero. Optionally, weights can be re-scaled by the number of splits to -renormalize the total rates. -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.numba_tools import WHERE -from pisa.utils import vectorizer - -__author__ = "A. Trettin" - -__license__ = """Copyright (c) 2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -class kfold(Stage): - """ - Stage to make splits of the MC set and select one split to make histograms. - The weight of all indeces not belonging to the selected split are set to - zero. - - Parameters - ---------- - n_splits (int): number of splits - select_split (int, optional): which split to keep - seed (int, optional): seed for the random number generator - renormalize (bool, optional): renormalize weights by multiplying - by the number of splits - shuffle (bool, optional): shuffle indeces before splitting - - """ - - def __init__( - self, - n_splits, - select_split=0, - seed=None, - renormalize=False, - shuffle=False, - save_mask=False, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - assert self.calc_mode == "events" - - self.n_splits = int(n_splits) - self.select_split = int(select_split) - if seed is None: - self.seed = None - else: - self.seed = int(seed) - self.renormalize = bool(renormalize) - self.shuffle = bool(shuffle) - - self.save_mask = save_mask - - def setup_function(self): - from sklearn.model_selection import KFold - - kf = KFold(n_splits=self.n_splits, shuffle=self.shuffle, random_state=self.seed) - for container in self.data: - index_gen = kf.split(container["weights"]) # a generator - for i, (train_index, test_index) in enumerate(index_gen): - select_idx = test_index - if i == self.select_split: - break - container["fold_weight"] = np.zeros((container.size), dtype=FTYPE) - select_weight = ( - kf.get_n_splits(container["weights"]) if self.renormalize else 1.0 - ) - container["fold_weight"][select_idx] = select_weight - container.mark_changed("fold_weight") - - if self.save_mask: - container['kfold_mask'] = np.zeros((container.size), dtype=bool) - container['kfold_mask'][select_idx] = 1 - container.mark_changed('kfold_mask') - - - def apply_function(self): - for container in self.data: - container["weights"] *= container["fold_weight"] diff --git a/pisa/stages/utils/resample.py b/pisa/stages/utils/resample.py deleted file mode 100644 index 6a1d648e7..000000000 --- a/pisa/stages/utils/resample.py +++ /dev/null @@ -1,274 +0,0 @@ -""" -Stage to transform binned data from one binning to another while also dealing with -uncertainty estimates in a reasonable way. In particular, this allows up-sampling from a -more coarse binning to a finer binning. - -The implementation is similar to that of the hist stage, hence the over-writing of -the `apply` method. -""" - -from __future__ import absolute_import, print_function, division - -import numpy as np -from enum import Enum, auto - -from pisa import FTYPE -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils import vectorizer -from pisa.core import translation -from pisa.core.binning import MultiDimBinning - -from pisa.utils.log import logging, set_verbosity - -class ResampleMode(Enum): - """Enumerates sampling methods of the `resample` stage.""" - - UP = auto() - DOWN = auto() - ARB = auto() - -class resample(Stage): # pylint: disable=invalid-name - """ - Stage to resample weighted MC histograms from one binning to another. - - The origin binning is given as `calc_mode` and the output binning is given in - `apply_mode`. - - Parameters - ---------- - - scale_errors : bool, optional - If `True` (default), apply scaling to errors. - """ - - def __init__( - self, - scale_errors=True, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - # This stage only makes sense when going binned to binned. - assert isinstance(self.apply_mode, MultiDimBinning), "stage only produces binned output" - assert isinstance(self.calc_mode, MultiDimBinning), "stage only produces binned output" - - self.scale_errors = scale_errors - - # The following tests whether `apply_mode` is a strict up-sample - - # TODO: Test for ability to resample in two steps - # TODO: Update to new test nomenclature - - # ToDo: check logic after pisa4 upgrade - if self.calc_mode.is_compat(self.apply_mode): - self.rs_mode = ResampleMode.UP - elif self.apply_mode.is_compat(self.calc_mode): - self.rs_mode = ResampleMode.DOWN - else: - raise ValueError("Binnings are not compatible with each other for resample") - - # TODO: Implement downsampling - # TODO: Implement arbitrary resampling - if self.rs_mode == ResampleMode.DOWN: - raise NotImplementedError("Downsampling not yet implemented.") - if self.rs_mode == ResampleMode.ARB: - raise NotImplementedError("Arbitrary resampling not yet implemented.") - - def setup_function(self): - # Set up a container for intermediate storage of variances in input specs - self.data.representation = self.calc_mode - for container in self.data: - container["variances"] = np.empty((container.size), dtype=FTYPE) - # set up containers for the resampled output in the output specs - self.data.representation = self.apply_mode - for container in self.data: - container["weights_resampled"] = np.empty((container.size), dtype=FTYPE) - if self.scale_errors: - container["vars_resampled"] = np.empty((container.size), dtype=FTYPE) - container["errors_resampled"] = np.empty((container.size), dtype=FTYPE) - - @profile - def apply(self): - # DO NOT USE THIS STAGE AS YOUR TEMPLATE IF YOU ARE NEW TO PISA! - # -------------------------------------------------------------- - # - # We are overwriting the `apply` method rather than the `apply_function` method - # because we are manipulating the data binning in a delicate way that doesn't - # work with automatic rebinning. - - self.data.representation = self.calc_mode - - if self.scale_errors: - for container in self.data: - vectorizer.pow( - vals=container["errors"], - pwr=2, - out=container["variances"], - ) - - input_binvols = self.calc_mode.weighted_bin_volumes(attach_units=False).ravel() - output_binvols = self.apply_mode.weighted_bin_volumes(attach_units=False).ravel() - - for container in self.data: - - self.data.representation = self.calc_mode - weights_flat_hist = container["weights"] - if self.scale_errors: - vars_flat_hist = container["variances"] - self.data.representation = self.apply_mode - - if self.rs_mode == ResampleMode.UP: - # The `unroll_binning` function returns the midpoints of the bins in the - # dimension `name`. - fine_gridpoints = [ - container.unroll_binning(name, self.apply_mode) - for name in self.apply_mode.names - ] - # We look up at which bin index of the input binning the midpoints of - # the output binning can be found, and assign to each the content of the - # bin of that index. - container["weights_resampled"] = translation.lookup( - fine_gridpoints, - weights_flat_hist, - self.calc_mode - ) - if self.scale_errors: - container["vars_resampled"] = translation.lookup( - fine_gridpoints, - vars_flat_hist, - self.calc_mode - ) - # These are the volumes of the bins we sample *from* - origin_binvols = translation.lookup( - fine_gridpoints, - input_binvols, - self.calc_mode - ) - # Finally, we scale the weights and variances by the ratio of the - # bin volumes in place: - container["weights_resampled"] = ( - container["weights_resampled"] * output_binvols / origin_binvols - ) - if self.scale_errors: - container["vars_resampled"] = ( - container["vars_resampled"] * output_binvols / origin_binvols - ) - elif self.rs_mode == ResampleMode.DOWN: - pass # not yet implemented - - if self.scale_errors: - container["errors_resampled"] = np.sqrt(container["vars_resampled"]) - -def test_resample(): - """Unit test for the resampling stage.""" - from pisa.core.distribution_maker import DistributionMaker - from pisa.core.map import Map - from pisa.utils.config_parser import parse_pipeline_config - from pisa.utils.log import set_verbosity, logging - from pisa.utils.comparisons import ALLCLOSE_KW - from collections import OrderedDict - from copy import deepcopy - from numpy.testing import assert_allclose - - example_cfg = parse_pipeline_config('settings/pipeline/example.cfg') - reco_binning = example_cfg[('utils', 'hist')]['apply_mode'] - coarse_binning = reco_binning.downsample(reco_energy=2, reco_coszen=2) - assert coarse_binning.is_compat(reco_binning) - # replace binning of output with coarse binning - example_cfg[('utils', 'hist')]['apply_mode'] = coarse_binning - # New in PISA4: We explicitly tell the pipeline which keys and binning to use for - # the output. We must manually set this to the same binning as the output from the - # hist stage because otherwise it would attempt to automatically rebin everything. - example_cfg['pipeline']['output_key'] = ('weights', 'errors') - example_cfg['pipeline']['output_binning'] = coarse_binning - # make another pipeline with an upsampling stage to the original binning - upsample_cfg = deepcopy(example_cfg) - resample_cfg = OrderedDict() - resample_cfg['apply_mode'] = reco_binning - resample_cfg['calc_mode'] = coarse_binning - resample_cfg['scale_errors'] = True - upsample_cfg[('utils', 'resample')] = resample_cfg - # Here we want to take the resampled output to generate Maps from the pipeline - upsample_cfg['pipeline']['output_key'] = ('weights_resampled', 'errors_resampled') - upsample_cfg['pipeline']['output_binning'] = reco_binning - - example_maker = DistributionMaker([example_cfg]) - upsampled_maker = DistributionMaker([upsample_cfg]) - - example_map = example_maker.get_outputs(return_sum=True)[0] - example_map_upsampled = upsampled_maker.get_outputs(return_sum=True)[0] - - # First check: The upsampled map must have the same total count as the original map - assert np.isclose( - np.sum(example_map.nominal_values), - np.sum(example_map_upsampled.nominal_values), - ) - - # Check consistency of modified chi-square - # ---------------------------------------- - # When the assumption holds that events are uniformly distributed over the coarse - # bins, the modified chi-square should not change from upscaling the maps. We test - # this by making a fluctuated coarse map and then upsampling that map according to - # the assumption by bin volumes. We should find that the modified chi-square between - # the coarse map and the coarse fluctuated map is the same as the upsampled map and - # the upsampled fluctuated map. - - # It doesn't matter precisely how we fluctuate it here, we just want any different - # map... - random_map_coarse = example_map.fluctuate(method='scaled_poisson', random_state=42) - random_map_coarse.set_errors(None) - - # This bit is an entirely independent implementation of the upsampling. The count - # in every bin is scaled according to the reatio of weighted bin volumes. - upsampled_hist = np.zeros_like(example_map_upsampled.nominal_values) - upsampled_errs = np.zeros_like(example_map_upsampled.nominal_values) - up_binning = example_map_upsampled.binning - - coarse_hist = np.array(random_map_coarse.nominal_values) - coarse_errors = np.array(random_map_coarse.std_devs) - coarse_binning = random_map_coarse.binning - - for bin_idx in np.ndindex(upsampled_hist.shape): - one_bin = up_binning[bin_idx] - fine_bin_volume = one_bin.weighted_bin_volumes( - attach_units=False, - ).squeeze().item() - # the following is basically an independent implementation of translate.lookup - coarse_index = [] # index where the upsampled bin came from - for dim in up_binning.names: - x = one_bin[dim].weighted_centers[0].m # middle point of the one bin - bins = coarse_binning[dim].bin_edges.m # coarse bin edges in that dim - coarse_index.append(np.digitize(x, bins) - 1) # index 1 means bin 0 - coarse_index = tuple(coarse_index) - coarse_bin_volume = coarse_binning.weighted_bin_volumes( - attach_units=False, - )[coarse_index].squeeze().item() - - upsampled_hist[bin_idx] = coarse_hist[coarse_index] - upsampled_hist[bin_idx] *= fine_bin_volume - upsampled_hist[bin_idx] /= coarse_bin_volume - - # done, at last! - random_map_upsampled = Map( - name="random_upsampled", - hist=upsampled_hist, - binning=up_binning - ) - random_map_upsampled.set_errors(None) - - # After ALL THIS, we get the same modified chi-square from the coarse and the - # upsampled pair of maps. Neat, huh? - assert_allclose(random_map_coarse.mod_chi2(example_map), - random_map_upsampled.mod_chi2(example_map_upsampled), - **ALLCLOSE_KW) - logging.info('<< PASS : resample >>') - -if __name__ == "__main__": - set_verbosity(2) - test_resample() diff --git a/pisa/stages/utils/set_variance.py b/pisa/stages/utils/set_variance.py deleted file mode 100644 index b052bbaf7..000000000 --- a/pisa/stages/utils/set_variance.py +++ /dev/null @@ -1,96 +0,0 @@ -""" -Override errors and replace with manually chosen error fraction. -""" - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.log import logging -from pisa.utils import vectorizer -from pisa.core.binning import MultiDimBinning - - -class set_variance(Stage): # pylint: disable=invalid-name - """ - Override errors and replace with manually chosen variance. - """ - - def __init__( - self, - variance_scale=1.0, - variance_floor=None, - expected_total_mc=None, - divide_total_mc=False, - **std_kwargs, - ): - - # init base class - super().__init__( - expected_params=(), - **std_kwargs, - ) - - assert isinstance(self.calc_mode, MultiDimBinning) - assert isinstance(self.apply_mode, MultiDimBinning) - - self.variance_scale = variance_scale - self.variance_floor = variance_floor - assert self.variance_scale is not None - - self.expected_total_mc = int(expected_total_mc) - self.divide_n = divide_total_mc - if self.divide_n: - assert self.expected_total_mc is not None - self.total_mc = {} - - def setup_function(self): - if self.divide_n: - self.data.representation = "events" - for container in self.data: - self.total_mc[container.name] = container.size - logging.debug(f"{container.size} mc events in container {container.name}") - self.data.representation = self.calc_mode - for container in self.data: - container["manual_variance"] = np.empty((container.size), dtype=FTYPE) - if "errors" not in container.keys: - container["errors"] = np.empty((container.size), dtype=FTYPE) - - def apply_function(self): - for container in self.data: - vectorizer.sqrt(vals=container["manual_variance"], out=container["errors"]) - - def compute_function(self): - for container in self.data: - vectorizer.assign(vals=container["weights"], out=container["manual_variance"]) - vectorizer.scale( - vals=container["manual_variance"], - scale=self.variance_scale, - out=container["manual_variance"], - ) - if self.divide_n: - vectorizer.scale( - vals=container["manual_variance"], - scale=self.expected_total_mc/self.total_mc[container.name], - out=container["manual_variance"], - ) - if self.variance_floor is not None: - apply_floor(self.variance_floor, out=container["manual_variance"]) - -FX = "f4" if FTYPE == np.float32 else "f8" - -def apply_floor(val, out): - apply_floor_gufunc(FTYPE(val), out=out) - -@guvectorize([f"({FX}, {FX}[:])"], "() -> ()", target=TARGET) -def apply_floor_gufunc(val, out): - out[0] = val if out[0] < val else out[0] - -def set_constant(val, out): - set_constant_gufunc(FTYPE(val), out=out) - -@guvectorize([f"({FX}, {FX}[:])"], "() -> ()", target=TARGET) -def set_constant_gufunc(val, out): - out[0] = val diff --git a/pisa/stages/xsec/__init__.py b/pisa/stages/xsec/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/stages/xsec/dis_sys.py b/pisa/stages/xsec/dis_sys.py deleted file mode 100644 index 00fb6e392..000000000 --- a/pisa/stages/xsec/dis_sys.py +++ /dev/null @@ -1,180 +0,0 @@ -""" -Stage to apply pre-calculated DIS uncertainties -Study done by Maria Liubarska & Juan Pablo Yanez, more information available here: -https://drive.google.com/open?id=1SRBgIyX6kleYqDcvop6m0SInToAVhSX6 -ToDo: tech note being written, link here as soon as available -""" - -from __future__ import absolute_import, print_function, division - -__all__ = ["dis_sys", "apply_dis_sys"] - -import numpy as np -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.fileio import from_file -from pisa.utils.numba_tools import WHERE -from pisa import ureg - - -class dis_sys(Stage): # pylint: disable=invalid-name - """ - Stage to apply pre-calculated DIS systematics. - - Parameters - ---------- - data - params - Must contain :: - dis_csms : quantity (dimensionless) - - extrapolation_type : string - choice of ['constant', 'linear', 'higher'] - - extrapolation_energy_threshold : float - Below what energy (in GeV) to extrapolate - Defaults to 100. CSMS not considered reliable below 50-100 GeV - - Notes - ----- - Requires the events have the following keys :: - true_energy - Neutrino energy in GeV - bjorken_y - Inelasticity - dis - 1 if event is DIS, else 0 - - """ - def __init__( - self, - extrapolation_type='constant', - extrapolation_energy_threshold=100*ureg["GeV"], - **std_kwargs, - ): - expected_params = ( - 'dis_csms', - ) - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - self.extrapolation_type = extrapolation_type - self.extrapolation_energy_threshold = extrapolation_energy_threshold - - @profile - def setup_function(self): - - extrap_dict = from_file('cross_sections/tot_xsec_corr_Q2min1_isoscalar.pckl') - - # load splines - wf_nucc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_CC_flat.pckl') - wf_nubarcc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_CC_flat.pckl') - wf_nunc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_NC_flat.pckl') - wf_nubarnc = from_file('cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_NC_flat.pckl') - - # set this to events mode, as we need the per-event info to calculate these weights - self.data.representation = 'events' - - lgE_min = np.log10(self.extrapolation_energy_threshold.m_as("GeV")) - - for container in self.data: - - # creat keys for external dict - - if container.name.endswith('_cc'): - current = 'CC' - elif container.name.endswith('_nc'): - current = 'NC' - else: - raise ValueError('Can not determine whether container with name "%s" is pf type CC or NC based on its name'%container.name) - nu = 'Nu' if container['nubar'] > 0 else 'NuBar' - - lgE = np.log10(container['true_energy']) - bjorken_y = container['bjorken_y'] - dis = container['dis'] - - w_tot = np.ones_like(lgE) - - valid_mask = lgE >= lgE_min - extrapolation_mask = ~valid_mask - - # - # Calculate variation of total cross section - # - - poly_coef = extrap_dict[nu][current]['poly_coef'] - lin_coef = extrap_dict[nu][current]['linear'] - - if self.extrapolation_type == 'higher': - w_tot = np.polyval(poly_coef, lgE) - else: - w_tot[valid_mask] = np.polyval(poly_coef, lgE[valid_mask]) - - if self.extrapolation_type == 'constant': - w_tot[extrapolation_mask] = np.polyval(poly_coef, lgE_min) # note Numpy broadcasts - elif self.extrapolation_type == 'linear': - w_tot[extrapolation_mask] = np.polyval(lin_coef, lgE[extrapolation_mask]) - else: - raise ValueError('Unknown extrapolation type "%s"'%self.extrapolation_type) - - # make centered arround 0, and set to 0 for all non-DIS events - w_tot = (w_tot - 1) * dis - - container["dis_correction_total"] = w_tot - container.mark_changed('dis_correction_total') - - # - # Calculate variation of differential cross section - # - - w_diff = np.ones_like(lgE) - - if current == 'CC' and container['nubar'] > 0: - weight_func = wf_nucc - elif current == 'CC' and container['nubar'] < 0: - weight_func = wf_nubarcc - elif current == 'NC' and container['nubar'] > 0: - weight_func = wf_nunc - elif current == 'NC' and container['nubar'] < 0: - weight_func = wf_nubarnc - - w_diff[valid_mask] = weight_func.ev(lgE[valid_mask], bjorken_y[valid_mask]) - w_diff[extrapolation_mask] = weight_func.ev(lgE_min, bjorken_y[extrapolation_mask]) - - # make centered arround 0, and set to 0 for all non-DIS events - w_diff = (w_diff - 1) * dis - - container["dis_correction_diff"] = w_diff - container.mark_changed('dis_correction_diff') - - @profile - def apply_function(self): - dis_csms = self.params.dis_csms.m_as('dimensionless') - - for container in self.data: - apply_dis_sys( - container['dis_correction_total'], - container['dis_correction_diff'], - FTYPE(dis_csms), - out=container['weights'], - ) - container.mark_changed('weights') - - -FX = 'f8' if FTYPE == np.float64 else 'f4' - -@guvectorize([f'({FX}, {FX}, {FX}, {FX}[:])'], '(),(),()->()', target=TARGET) -def apply_dis_sys( - dis_correction_total, - dis_correction_diff, - dis_csms, - out, -): - out[0] *= max(0, (1. + dis_correction_total * dis_csms) * (1. + dis_correction_diff * dis_csms) ) diff --git a/pisa/stages/xsec/genie_sys.py b/pisa/stages/xsec/genie_sys.py deleted file mode 100644 index 657658e0a..000000000 --- a/pisa/stages/xsec/genie_sys.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -Stage to apply pre-calculated Genie uncertainties -""" - -from __future__ import absolute_import, print_function, division - -__all__ = ["genie_sys", "apply_genie_sys"] #, "SIGNATURE" - -import re -import numpy as np -#from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.core.stage import Stage -from pisa.utils.profiler import profile, line_profile -from pisa.utils.numba_tools import WHERE -from pisa.utils.log import logging - -class genie_sys(Stage): # pylint: disable=invalid-name - """ - Stage to apply pre-calculated Genie systematics. - - Parameters - ---------- - params - Must contain :: - - parameters specified in interactions (dimensionless) - - Notes - ----- - Requires the events have the following keys for each included interaction :: - - linear_fit_{name} - Genie linear coefficient for interaction {name} - quad_fit_{name} - Genie quadratic coefficient for interaction {name} - - """ - def __init__( - self, - interactions="Genie_Ma_QE, Genie_Ma_RES", - names="maccqe, maccres", - **std_kwargs, - ): - interactions = re.split(r'\W+', interactions) - names = re.split(r'\W+', names) - assert len(interactions) == len(names), 'Specify a name for each interaction' - - expected_params = tuple(interactions) - self.interactions = interactions - self.names = names - - # init base class - super().__init__( - expected_params=expected_params, - **std_kwargs, - ) - - - def setup_function(self): - ''' - Check the range of the parameter in the analysis. Send a warning if these are beyond +- 2sigma - ''' - for I in self.interactions: - if self.params[I].range[0]<-2. or self.params[I].range[1]>2.: - logging.warn(I+' parameter bounds have been set larger than the range used to produce interpolation points ([-2.,2]). This will void the warranty...') - - - def apply_function(self): - genie_params = [] - for I in self.interactions: - exec("genie_params.append(self.params.%s.m_as('dimensionless'))"%(I)) - - for container in self.data: - linear_fits, quad_fits = [], [] - for i in range(len(self.interactions)): - linear_fits.append(container['linear_fit_'+self.names[i]]) - quad_fits.append(container['quad_fit_'+self.names[i]]) - - apply_genie_sys( - genie_params, - linear_fits, - quad_fits, - out=container['weights'], - ) - - # - # In cases where the axial mass is extrapolated outside - # the range of the points used in the interpolation, some - # weights become negative. These are floored at 0. - # - container.mark_changed('weights') - - - -#if FTYPE == np.float64: -# SIGNATURE = '(f8, f8, f8, f8[:])' -#else: -# SIGNATURE = '(f4, f4, f4, f4[:])' -#@guvectorize([SIGNATURE], '(),(),()->()', target=TARGET) -def apply_genie_sys( - genie_params, - linear_fits, - quad_fits, - out, -): - factor = 1 - for i in range(len(genie_params)): - factor *= 1. + (linear_fits[i] + quad_fits[i] * genie_params[i]) * genie_params[i] - out *= np.maximum(0, factor) diff --git a/pisa/stages/xsec/nutau_xsec.py b/pisa/stages/xsec/nutau_xsec.py deleted file mode 100644 index 835ca71df..000000000 --- a/pisa/stages/xsec/nutau_xsec.py +++ /dev/null @@ -1,115 +0,0 @@ -""" -A stage to apply nutau cross-section uncertainties as implemented in -https://github.com/marialiubarska/nutau_xsec -It interpolates between different nutau CC cross section models as compared in this -paper: -https://arxiv.org/pdf/1008.2984.pdf?fname=cm&font=TypeI -""" - -import numpy as np -import pickle -from numba import guvectorize - -from pisa.core.stage import Stage -from pisa.utils.resources import open_resource -from pisa.utils import vectorizer -from pisa import FTYPE, TARGET -from pisa.utils.numba_tools import WHERE - - -class nutau_xsec(Stage): - """ - Nu_tau cross-section correction to interpolate between different nutau CC - cross-section models. This requires the interpolated file produced by - Maria Liubarska: https://github.com/marialiubarska/nutau_xsec - - Parameters - ---------- - xsec_file : (string) - Path to pickled interpolated function. Default is included in PISA in - `pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl` - - params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: - - scale : quantity (dimensionless) - Scaling between different cross-section models. The range [-1, 1] - covers all models tested in the paper. - - """ - def __init__( - self, - xsec_file="cross_sections/interp_nutau_xsec_protocol2.pckl", - **std_kwargs, - ): - - expected_params = ("nutau_xsec_scale") - - # init base class - super(nutau_xsec, self).__init__( - expected_params=expected_params, - **std_kwargs, - ) - - self.xsec_file = xsec_file - - def setup_function(self): - with open_resource(self.xsec_file, mode="rb") as fl: - interp_dict = pickle.load(fl, encoding='latin1') - interp_nutau = interp_dict["NuTau"] - interp_nutaubar = interp_dict["NuTauBar"] - - self.data.representation = self.calc_mode - for container in self.data: - if container.name == "nutau_cc": - energy = container["true_energy"] - func = interp_nutau(energy) - # Invalid values of the function occur below the tau production - # threshold. For those values, we put in negative infinity, which will - # cause them to be clamped to zero when the weights are calculated. - func[~np.isfinite(func)] = -np.inf - container["nutau_xsec_func"] = func - elif container.name == "nutaubar_cc": - energy = container["true_energy"] - func = interp_nutaubar(energy) - func[~np.isfinite(func)] = -np.inf - container["nutau_xsec_func"] = func - - self.data.representation = self.apply_mode - for container in self.data: - if container.name in ["nutau_cc", "nutaubar_cc"]: - container["nutau_xsec_scale"] = np.empty(container.size, dtype=FTYPE) - - def compute_function(self): - scale = self.params.nutau_xsec_scale.value.m_as('dimensionless') - for container in self.data: - if container.name in ["nutau_cc", "nutaubar_cc"]: - calc_scale_vectorized( - container["nutau_xsec_func"], - FTYPE(scale), - out=container["nutau_xsec_scale"] - ) - - def apply_function(self): - for container in self.data: - if container.name in ["nutau_cc", "nutaubar_cc"]: - container["weights"] *= container["nutau_xsec_scale"] - -# vectorized function to calculate 1 + f(E)*scale -# must be outside class -if FTYPE == np.float64: - FX = 'f8' - IX = 'i8' -else: - FX = 'f4' - IX = 'i4' -signature = f'({FX}[:], {FX}, {FX}[:])' -@guvectorize([signature], '(),()->()', target=TARGET) -def calc_scale_vectorized(func, scale, out): - # weights that would come out negative are clamped to zero - if func[0] * scale > -1.: - out[0] = 1. + func[0] * scale - else: - out[0] = 0. - - diff --git a/pisa/utils/.gitignore b/pisa/utils/.gitignore deleted file mode 100644 index 4360333f9..000000000 --- a/pisa/utils/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -gaussians_cython.c -gaussians_cython.so diff --git a/pisa/utils/README.md b/pisa/utils/README.md deleted file mode 100644 index 3c2c05a02..000000000 --- a/pisa/utils/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# pisa.utils -Basic utilities underlying much of the work of a data analyzer and one developing for PISA. - -These range from statistical functions to file readers/writers and from data smoothing techniques to logging messages. -See the directory listing below for a brief description of the utilities contained in each file. diff --git a/pisa/utils/__init__.py b/pisa/utils/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/utils/barlow.py b/pisa/utils/barlow.py deleted file mode 100644 index 047097033..000000000 --- a/pisa/utils/barlow.py +++ /dev/null @@ -1,308 +0,0 @@ -#!/usr/bin/python -""" -`Likelihoods` class for computing Poisson and Barlow likelihoods. - -The Poisson likelihood assumes the template being compared against is the -perfect expectation, while the Barlow likelihood accounts for the template -being imperfect due to being generated from finite Monte Carlo statistics. -""" - - -from __future__ import absolute_import, division, print_function - -from copy import copy -import sys - -import numpy as np -from scipy.optimize import minimize - -__all__ = ['Likelihoods'] -__author__ = 'Michael Larson' -__email__ = 'mlarson@nbi.ku.dk' -__date__ = '2016-03-14' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -#------------------------------------------------------------------------------ -# The following is adapted from user Alfe, https://stackoverflow.com/a/16787722 -def handle_uncaught_exception(exctype, value, trace): - """Exception hook that allows for exiting with a specified exit code. - - Replaces sys.exithook; see :class:`ExitCodeException` - """ - OLD_EXCEPTHOOK(exctype, value, trace) - if hasattr(value, 'exitcode'): - sys.exit(value.exitcode) - -sys.excepthook, OLD_EXCEPTHOOK = handle_uncaught_exception, sys.excepthook -#------------------------------------------------------------------------------ - - -class ShapeError(Exception): - exitcode = 100 - -class NaNValueError(Exception): - exitcode = 101 - -class ArgValueError(Exception): - exitcode = 102 - - -class Likelihoods(object): - """ -A class to handle the likelihood calculations in OscFit. It can -be used in other poisson binned-likelihood calculators as well. -The class includes two likelihood spaces: the Poisson and the -Barlow LLH. - -The Poisson likelihood is the ideal case and assumes infinite -statistical accuracy on the Monte Carlo distributions. This is -the simple case and has been used in the past for analyses, but -should not be used if there's a significant statistical error on -one of the samples. - -The Barlow likelihood is an implementation of the likelihood model -given in doi:10.1016/0010-4655(93)90005-W ("Fitting using finite -Monte Carlo samples" by Barlow and Beeston). This requires the -unweighted distributions of the MC and involves assuming that each -MC samples is drawn from an underlying "true" expectation distribution -which should be fit. This gives (number of bins)x(number of samples) -new parameters to fit and allows the shape of the distributions to -fluctuate in order to fit both the observed MC and the observed -data. This gives a more informed result and allows one to estimate -the effect of the finite MC samples. - -To use this, you need to run set_data, set_mc, and the set_unweighted -functions. - -.. important:: the `set_mc` function takes a histogram of the average - weight per event for each bin! not the total weighted histogram! - -Simply calling the get_llh function after these will return the -best fit LLH for your chosen likelihood function. The function takes -the name of the likelihood space ("Poisson" or "Barlow"). You can -retrieve the best fit weighted plots using the get_plot (total best-fit -histogram including all samples) and the get_single_plots (the list -of best-fit weighted histograms for each sample). - """ - mc_histograms = None - unweighted_histograms = None - data_histogram = None - shape = None - bestfit_plots = None - current_bin = None - - def __init__(self): - """Instantiate and set all of the defaults""" - self.mc_histograms = None - self.unweighted_histograms = None - self.data_histogram = None - self.shape = None - self.bestfit_plots = None - self.current_bin = None - - def reset(self): - """Re-instantiate so that we can reuse the object""" - self.__init__() - - def set_data(self, data_histogram): - """Set up the data histogram. This histogram is flattened in order to - make the looping later on a bit simpler to handle.""" - if not self.shape: - self.shape = data_histogram.shape - - if data_histogram.shape != self.shape: - raise ShapeError( - "Data histogram has shape {} but expected histogram shape {}" - .format(data_histogram.shape, self.shape), - exitcode=100 - ) - - self.data_histogram = data_histogram.flatten() - - def set_mc(self, mc_histograms): - """Set up the MC histogram. Each histogram is flattened in order to - make the looping later on a bit simpler to handle. The values in each - bin should correspond to the weight-per-event in that bin, NOT the - total weight in that bin! - - Make sure you don't have any nulls here. - - """ - if not self.shape: - self.shape = mc_histograms.values()[0].shape - - if np.any(np.isnan(mc_histograms)): - raise NaNValueError( - "At least one bin in your MC histogram is NaN! Take a look" - " and decide how best to handle this", - exitcode=101 - ) - - flat_histograms = [] - for j in range(mc_histograms.shape[0]): - if not self.shape == mc_histograms[j].shape: - raise ShapeError( - "MC Histogram {} has shape {} but expected shape {}" - .format(j, mc_histograms[j].shape, self.shape) - ) - - flat_histograms.append(mc_histograms[j].flatten()) - - self.mc_histograms = np.array(flat_histograms) - - def set_unweighted(self, unweighted_histograms): - """Save the unweighted distributions in the MC. These can include 0s.""" - if not self.shape: - self.shape = unweighted_histograms.values()[0].shape - - flat_histograms = [] - for j in range(unweighted_histograms.shape[0]): - if not self.shape == unweighted_histograms[j].shape: - raise ShapeError( - "Unweighted histogram {} has shape {} but expected shape" - " {}" - .format(j, unweighted_histograms[j].shape, self.shape) - ) - flat_histograms.append(unweighted_histograms[j].flatten()) - - self.unweighted_histograms = np.array(flat_histograms) - - def get_plot(self): - """Get the total weighted best-fit histogram post-fit.""" - if self.bestfit_plots is None: - return - - result = np.sum(self.get_single_plots(), axis=0) - return result - - def get_single_plots(self): - """Get the individual weighted best-fit histograms post-fit.""" - if self.bestfit_plots is None: - return None - result = np.multiply(self.mc_histograms, self.bestfit_plots) - target_shape = result.shape[0], self.shape[0], self.shape[1] - return np.reshape(result, target_shape) - - def get_llh(self, llh_type): - """Calculate the likelihood given the data, average weights, and the - unweighted histograms. You can choose between "Poisson" and "Barlow" - likelihoods at the moment. - - If using the "Barlow" LLH, note that the method is picked to be Powell - with 25 iterations maximum per step. This is not optimized at all and - was explicitly chosen simply because it "worked". This doesn't work - with the bounds set in the normal way, so the positive-definiteness of - the rates is enforced in the get_llh_barlow_bin method. - - """ - llh_type = llh_type.lower() - self.bestfit_plots = copy(self.unweighted_histograms) - self.current_bin = 0 - - # The simplest case: the Poisson binned likelihood - if llh_type == "poisson": - poisson_llh = self.get_llh_poisson() - return poisson_llh - - # The more complicated case: The Barlow LLH - # This requires a separate minimization step in each bin to estimate - # the expected rate in each bin from each MC sample using constraints - # from the data and the observed MC distribution. - elif llh_type == "barlow": - llh = 0 - for bin_n in range(len(self.data_histogram)): - self.current_bin = bin_n - bin_result = minimize( - fun=self.get_llh_barlow_bin, - x0=self.bestfit_plots[:, bin_n], - method="Powell", - options={'maxiter': 25, 'disp': False} - ) - self.bestfit_plots[:, bin_n] = bin_result.x - llh += bin_result.fun - - self.current_bin = None - return llh - - raise ArgValueError( - 'Unknown `llh_type` "{}". Choose either "Poisson" (ideal) or' - ' "Barlow" (including MC statistical errors).' - .format(llh_type) - ) - - def get_llh_barlow_bin(self, a_i): - """The Barlow LLH finds the best-fit "expected" MC distribution using - both the data and observed MC as constraints. Each bin is independent - in this calculation, since the assumption is that there are no - correlations between bins. This likely leads to a somewhat worse limit - than you might get otherwise, but at least its conservative. - - If you have a good idea for how to extend this to include bin-to-bin, - let me know and I can help implement it. - - """ - if any([a_i[j] < 0 for j in range(len(a_i))]): - return 1e10 - i = self.current_bin - di = self.data_histogram[i] - fi = np.sum(np.multiply(self.mc_histograms[:, i], a_i)) - ai = self.unweighted_histograms[:, i] - - llh = 0 - - # This is the standard Poisson LLH comparing data to the total weighted - # MC - if fi > 0: - llh += di * np.log(fi) - fi - if di > 0: - llh -= di * np.log(di) - di - - # The heart of the Barlow LLH. Fitting the a_i (expected number of - # events in the MC sample for this bin) using the observed MC events as - # a constraint. - cut = a_i > 0 - #a_i[a_i <= 0] = 10e-10 - #llh += np.sum(np.dot(ai, np.log(a_i)) - np.sum(a_i)) - llh += np.sum(np.dot(ai[cut], np.log(a_i[cut])) - np.sum(a_i[cut])) - - # This is simply a normalization term that helps by centering the LLH - # near 0 - # It's an expansion of Ln(ai!) using the Sterling expansion - cut = ai > 0 - llh -= np.sum(np.dot(ai[cut], np.log(ai[cut])) - np.sum(ai[cut])) - - return -llh - - def get_llh_poisson(self): - """The standard binned-poisson likelihood comparing the weighted MC - distribution to the data, ignoring MC statistical uncertainties.""" - di = self.data_histogram - fi = np.sum(np.multiply(self.mc_histograms, - self.unweighted_histograms), axis=0) - llh = 0 - - # The normal definition of the LLH, dropping the Ln(di!) constant term - cut = fi > 0 - llh += np.sum(di[cut] * np.log(fi[cut]) - fi[cut]) - - # This is simply a normalization term that helps by centering the LLH - # near 0 - # It's an expansion of Ln(di!) using the Sterling expansion - cut = di > 0 - llh -= np.sum(di[cut] * np.log(di[cut]) - di[cut]) - - return -llh diff --git a/pisa/utils/barr_parameterization.py b/pisa/utils/barr_parameterization.py deleted file mode 100644 index 0ec3899ec..000000000 --- a/pisa/utils/barr_parameterization.py +++ /dev/null @@ -1,113 +0,0 @@ -# pylint: disable=not-callable - -""" -External PISA file to be kept in private location -Containing the Barr parameterizations for flux modifications - -originaly developped by Juan Pablo Yanez -""" - -from __future__ import absolute_import, division, print_function, unicode_literals - -import math - -from pisa.utils.numba_tools import myjit - - -@myjit -def sign(val): - ''' signum function''' - if val == 0: - return 0 - if val >= 0: - return 1. - return -1. - -@myjit -def LogLogParam(true_energy, y1, y2, x1, x2, use_cutoff, cutoff_value): - # oscfit function - nu_nubar = sign(y2) - y1 = sign(y1) * math.log10(abs(y1) + 0.0001) - y2 = math.log10(abs(y2 + 0.0001)) - modification = nu_nubar * math.pow(10., (((y2 - y1) / (x2 - x1)) * (math.log10(true_energy) - x1) + y1 - 2.)) - if use_cutoff: - modification *= math.exp(-1. * true_energy / cutoff_value) - return modification - -@myjit -def norm_fcn(x, A, sigma): - # oscfit function - return A / math.sqrt(2 * math.pi * math.pow(sigma, 2)) * math.exp(-math.pow(x, 2) / (2 * math.pow(sigma, 2))) - -@myjit -def ModFlux(flav, true_energy, true_coszen, e1mu, e2mu, z1mu, z2mu, e1e, e2e, z1e, z2e): - # These parameters are obtained from fits to the paper of Barr - # E dependent ratios, max differences per flavor (Fig.7) - e1max_mu = 3. - e2max_mu = 43 - e1max_e = 2.5 - e2max_e = 10 - # Evaluated at - x1e = 0.5 - x2e = 3. - - # Zenith dependent amplitude, max differences per flavor (Fig. 9) - z1max_mu = 0.6 - z2max_mu = 5. - z1max_e = 0.3 - z2max_e = 5. - nue_cutoff = 650. - numu_cutoff = 1000. - # Evaluated at - x1z = 0.5 - x2z = 2. - # oscfit function - if flav == 1: - A_ave = LogLogParam(true_energy, e1max_mu*e1mu, e2max_mu*e2mu, x1e, x2e, False, 0) - A_shape = 2.5*LogLogParam(true_energy, z1max_mu*z1mu, z2max_mu*z2mu, x1z, x2z, True, numu_cutoff) - # pre-fix (wrong) - #return A_ave - (norm_fcn(true_coszen, A_shape, 0.32) - 0.75 * A_shape) - # fixed (correct) - return A_ave - (norm_fcn(true_coszen, A_shape, 0.36) - 0.6 * A_shape) - if flav == 0: - A_ave = LogLogParam(true_energy, e1max_mu * e1mu + e1max_e * e1e, e2max_mu * e2mu + e2max_e * e2e, x1e, x2e, False, 0) - A_shape = 1. * LogLogParam(true_energy, z1max_mu * z1mu + z1max_e * z1e, z2max_mu * z2mu + z2max_e * z2e, x1z, x2z, True, nue_cutoff) - # pre-fix (wrong) - #return A_ave - (1.5*norm_fcn(true_coszen, A_shape, 0.4) - 0.7 * A_shape) - # fixed (correct) - return A_ave - (1.5*norm_fcn(true_coszen, A_shape, 0.36) - 0.7 * A_shape) - -@myjit -def modRatioUpHor(flav, true_energy, true_coszen, uphor): - # Zenith dependent amplitude, max differences per flavor (Fig. 9) - z1max_mu = 0.6 - z2max_mu = 5. - z1max_e = 0.3 - z2max_e = 5. - nue_cutoff = 650. - numu_cutoff = 1000. - # Evaluated at - x1z = 0.5 - x2z = 2. - # oscfit function - if flav == 0: - A_shape = 1. * abs(uphor) * LogLogParam(true_energy, (z1max_e + z1max_mu), (z2max_e + z2max_mu), x1z, x2z, True, nue_cutoff) - # correct: - return 1 - 0.3 * sign(uphor) * norm_fcn(true_coszen, A_shape, 0.35) - if flav == 1: - # pre-fix (wrong) - #A_shape = 1. * abs(uphor) * LogLogParam(true_energy, z1max_mu, z2max_mu, x1z, x2z, True, numu_cutoff) - #return 1 - 0.3 * sign(uphor) * norm_fcn(true_coszen, A_shape, 0.35) - # fixed (correct) - return 1. - # wrong: - #return 1 - 3.5 * sign(uphor) * norm_fcn(true_coszen, A_shape, 0.35) - -@myjit -def modRatioNuBar(nubar, flav, true_energy, true_coszen, nubar_sys): - # oscfit function - modfactor = nubar_sys * ModFlux(flav, true_energy, true_coszen, 1., 1., 1., 1., 1., 1., 1., 1.) - if nubar < 0: - return max(0., 1. / (1 + 0.5 * modfactor)) - if nubar > 0: - return max(0., 1. + 0.5 * modfactor) diff --git a/pisa/utils/callable.py b/pisa/utils/callable.py deleted file mode 100644 index aafc168fc..000000000 --- a/pisa/utils/callable.py +++ /dev/null @@ -1,287 +0,0 @@ -""" -This is used to define a serializable object used for functions assigned to the DerivedParams - -These can be constructed and evaluated symbolically and procedurally. -In principle, we may even be able to include a filepath to a seriialized Funct object such that the pipeline configs can include definitions for these therein - -Contains - OPS - an Enum listing recognized operations - TrigOps - some definitions for handling some of the trig functions, shared by Vars and Functs - Var - a class for representing variables - Funct - a series of operations done representing the functions - -Uses - quite simple! - -create some vars and do math on them - -x = Var('x') -y = Var('y') - -function = sin(x**2) + 3*cos(y+1)**2 - -The object `function` is now callable with keyword arguments passed to the instantiated `Vars` -""" -# from typing import Callable -from pisa.utils import jsons -from enum import Enum - -import math -import numpy as np - -class OPS(Enum): - """ - Enumerate different operations so that the Funct class can do math - """ - ADD = 0 - MUL = 1 - POW = 2 - SIN = 3 - COS = 4 - TAN = 5 - - @property - def state(self): - return self.serializable_state - - @property - def serializable_state(self): - return {"ops":self.value, "kind":"ops"} - - @classmethod - def from_state(cls, state): - return cls(state["ops"]) - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, filename): - """Instantiate a new Param from a JSON file""" - state = jsons.from_json(filename=filename) - return OPS(state["ops"]) - - - -class TrigOps: - """ - These are all used by both the Var and Funct classes, so there's some fun python hierarchy stuff going on instead - """ - @property - def sin(self): - new_op = Funct(self) - new_op.add_opp(OPS.SIN, 0.0) - return new_op - - @property - def cos(self): - new_op = Funct(self) - new_op.add_opp(OPS.COS, 0.0) - return new_op - - @property - def tan(self): - new_op = Funct(self) - new_op.add_opp(OPS.TAN, 0.0) - return new_op - -class Var(TrigOps): - """ - A variable - - These are a lot like functions in how they are combined, but instead evaluate simply to one of the keyword arguments passed to Functions - """ - # the id is used to assign unique names to each variable in the event that the user does not manually specify a name - _ids = 0 - def __init__(self, name=None): - if name is None: - self._name = "arg"+str(Var._ids) - else: - self._name = name - Var._ids+=1 - - @property - def state(self): - return { - "kind":"var", - "name": self._name - } - - @property - def serializable_state(self): - return self.state - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, filename): - """Instantiate a new Param from a JSON file""" - state = jsons.from_json(filename=filename) - return Var.from_state(state) - - @classmethod - def from_state(cls, state): - return cls(state["name"]) - - @property - def name(self): - return self._name - - def __call__(self, **kwargs): - # NOTE we implicitly down-cast everything to a float/int here! - - value = kwargs[self._name] - if type(value)==list: - raise ValueError("Lists aren't supported. This is probably wrong") - return value.value.m - - def __add__(self, other): - new = Funct(self) - new = new + other - return new - - def __mul__(self, other): - new = Funct(self) - new = new * other - return new - - def __rmul__(self, other): - return self.__mul__(other) - - def __pow__(self, other): - new = Funct(self) - new = new ** other - return new - -class Funct(TrigOps): - """ - Functions are constructed as a series of operations one to some starting value. - The starting value can be whatever - a value, function or variable - """ - - def __init__(self, first_var): - self._ops = [(OPS.ADD, first_var)] - - def __call__(self,**kwargs): - value = 0.0 - for op in self._ops: - if op[0] == OPS.ADD: - if isinstance(op[1],(Funct, Var)): - value += op[1](**kwargs) - else: - value += op[1] - elif op[0] == OPS.MUL: - if isinstance(op[1], (Funct, Var)): - value *= op[1](**kwargs) - else: - value *= op[1] - elif op[0] == OPS.POW: - if isinstance(op[1], (Funct, Var)): - value **= op[1](**kwargs) - else: - value **= op[1] - elif op[0] == OPS.SIN: - if isinstance(value, np.ndarray): - value = np.sin(value) - else: - value = math.sin(value) # significantly faster for non-arrays - elif op[0] == OPS.COS: - if isinstance(value, np.ndarray): - value = np.cos(value) - else: - value = math.cos(value) - elif op[0] == OPS.TAN: - if isinstance(value, np.ndarray): - value = np.tan(value) - else: - value = math.tan(value) - - return value - - def add_opp(self, kind:OPS, other): - self._ops.append((kind, other)) - - def __add__(self, other): - self.add_opp(OPS.ADD, other) - return self - - def __mul__(self, other): - self.add_opp(OPS.MUL, other) - return self - - def __rmul__(self, other): - return self.__mul__(other) - - def __pow__(self, other): - self.add_opp(OPS.POW, other) - return self - - ############## some functions to handle serializing these objects - @property - def state(self): - statekind = {} - statekind["kind"] ="Funct" - statekind["ops"]=[] - for entry in self._ops: - if isinstance(entry[1], (Funct, Var, OPS)): - sub_state = entry[1].state - else: - sub_state = entry[1] - - statekind["ops"].append([entry[0].serializable_state, sub_state]) - - return statekind - - @property - def serializable_state(self): - return self.state - - - @classmethod - def from_state(cls, state): - new_op = cls(0.0) - statedict = state["ops"] - for entry in statedict: - op = OPS.from_state(entry[0]) - if isinstance(entry[1], dict): - if entry[1]["kind"]=="Funct": - entry_class = Funct - elif entry[1]["kind"]=="var": - entry_class = Var - elif entry[1]["kind"]=="ops": - entry_class = OPS - else: - raise ValueError("Cannot de-serialzie {}".format(entry[1]["kind"])) - - value = entry_class.from_state(entry[1]) - else: - value = entry[1] - new_op.add_opp(op, value) - return new_op - - - def to_json(self, filename, **kwargs): - """Serialize the state to a JSON file that can be instantiated as a new - object later. - """ - jsons.to_json(self.serializable_state, filename=filename, **kwargs) - - @classmethod - def from_json(cls, filename): - """Instantiate a new Param from a JSON file""" - state = jsons.from_json(filename=filename) - return Funct.from_state(state) - -# some macros for readability -def sin(target:Funct): - return target.sin -def cos(target:Funct): - return target.cos -def tan(target:Funct): - return target.tan diff --git a/pisa/utils/comparisons.py b/pisa/utils/comparisons.py deleted file mode 100644 index 95b692efe..000000000 --- a/pisa/utils/comparisons.py +++ /dev/null @@ -1,970 +0,0 @@ -""" -Utilities for comparing things. - -`recursiveEquality` and `recursiveAllclose` traverse into potentially nested -datstructures and compare all elements for equality. -`normQuant` performs the same kind of traversal, but returns a normalized -version of the input object whereby "essentially-equal" things are returned as -"actually-equal" objects. - -These functions are at the heart of hashing behaving as one expects, and this -in turn is essential for caching to work correctly. - -.. important:: Read carefully how each function in this module defines - "equality" for various datatypes so you understand what two things being - "equal" based upon these functions *actually* means. - - E.g., (nan == nan) == True, uncorrelated uncertainties are equal if both - their nominal values and standard deviations are equal regardless if they - come from independent random variables, etc. -""" - - -from __future__ import absolute_import, division - -from collections.abc import Iterable, Iterator, Mapping, Sequence -from collections import OrderedDict -from numbers import Number -import re -from six import string_types - -import numpy as np -import pint -from uncertainties.core import AffineScalarFunc, Variable -from uncertainties import ufloat -from uncertainties import unumpy as unp - -from pisa import ureg, FTYPE, HASH_SIGFIGS -from pisa.utils.log import logging, set_verbosity - - -__all__ = [ - 'FTYPE_PREC', - 'EQUALITY_SIGFIGS', - 'EQUALITY_PREC', - 'ALLCLOSE_KW', - 'NP_TYPES', - 'SEQ_TYPES', - 'MAP_TYPES', - 'COMPLEX_TYPES', - 'isvalidname', - 'isscalar', - 'isbarenumeric', - 'isunitless', - 'recursiveEquality', - 'recursiveAllclose', - 'normQuant', - 'interpret_quantity', - 'test_isscalar', - 'test_isunitless', - 'test_recursiveEquality', - 'test_normQuant', -] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -FTYPE_PREC = np.finfo(FTYPE).eps -"""Machine precision ("eps") for PISA's FTYPE (float datatype)""" - -FTYPE_SIGFIGS = int(np.abs(np.ceil(np.log10(FTYPE_PREC)))) -"""Significant figures possible given PISA's FTYPE""" - -EQUALITY_SIGFIGS = min(HASH_SIGFIGS, FTYPE_SIGFIGS) -"""Significant figures for performing equality comparisons""" - -EQUALITY_PREC = 10**-EQUALITY_SIGFIGS -"""Precision ("rtol") for performing equality comparisons""" - -ALLCLOSE_KW = dict(rtol=EQUALITY_PREC, atol=FTYPE_PREC, equal_nan=True) -"""Keyword args to pass to all calls to numpy.allclose""" - -logging.trace( - "HASH_SIGFIGS=%d, FTYPE_SIGFIGS=%d, EQUALITY_PREC=%s, FTYPE_PREC=%s, ALLCLOSE_KW=%s" - % (HASH_SIGFIGS, FTYPE_SIGFIGS, EQUALITY_PREC, FTYPE_PREC, ALLCLOSE_KW) -) - -# Derive the following number via: -# >>> from sympy import log, N -# >>> str(N(log(2, 10), 40)) -LOG10_2 = FTYPE('0.3010299956639811952137388947244930267682') - -NP_TYPES = (np.ndarray, np.matrix) -SEQ_TYPES = (Sequence, np.ndarray, np.matrix) -MAP_TYPES = (Mapping,) -COMPLEX_TYPES = NP_TYPES + SEQ_TYPES + MAP_TYPES - - -def isvalidname(x): - """Name that is valid to use for a Python variable""" - return re.compile(r'\W|^(?=\d)').match(x) is None - - -def isscalar(x): - """Check if input is a scalar object. - - Best check found for now as to scalar-ness (works for pint, - uncertainties, lists, tuples, numpy arrays, ...) but not tested against all - things. - - See Also - -------- - numpy.isscalar - - """ - return ( - not (hasattr(x, 'shape') or isinstance(x, (Iterator, Mapping, Sequence))) - or np.isscalar(x) - ) - - -def isbarenumeric(x): - """Check if input is a numerical datatype (including arrays of numbers) but - without units. Note that for these purposes, booleans are *not* considered - numerical datatypes. - - """ - is_bare_numeric = False - if isinstance(x, ureg.Quantity): - is_bare_numeric = False - elif isinstance(x, np.ndarray): - if x.dtype.type not in ( - np.bool_, np.bool8, np.object0, np.object_ - ): - is_bare_numeric = True - elif isinstance(x, Number) and not isinstance(x, bool): - is_bare_numeric = True - return is_bare_numeric - - -def isunitless(x): - """Check if input is unitless. Only the first scalar element of an Iterable - (or arbitrarily nested Iterables) is checked if it has units. - - Strings and bools are considered to be unit-less. - - Parameters - ---------- - x : object - - Returns - ------- - isunitless : bool - - Raises - ------ - TypeError if a Mapping is encountered - - """ - if isinstance(x, ureg.Quantity): - return False - - if isinstance(x, Mapping): - raise TypeError("Cannot test a Mapping (`x` is of type {})".format(type(x))) - - if not isinstance(x, string_types) and isinstance(x, Iterable): - return isunitless(next(iter(x))) - - return True - - -def recursiveEquality(x, y, allclose_kw=ALLCLOSE_KW): - """Recursively verify equality between two objects `x` and `y`. - - Parameters - ---------- - x, y - Objects to be compared - - Notes - ----- - Possibly unintuitive behaviors: - * Sequences of any type evaluate equal if their contents are the same. - E.g., a list can equal a tuple. - - * Mappings of any type evaluate equal if their contents are the same. - E.g. a dict can equal an OrderedDict. - - * nan SHOULD equal nan, +inf SHOULD equal +inf, and -inf SHOULD equal -inf - ... but this ***only*** holds true (as of now) if those values are in - numpy arrays! (TODO!) - - * Two pint units with same __repr__ but that were derived from different - unit registries evaluate to be equal. (This is contrary to pint's - implementation of equality comparisons, which is careful in case a - unit is defined differently in different registries. We'll assume this - isn't done here in PISA, until a use case arises where this is no - longer a good assumption.) - - * Two pint units that are compatible but different (even just in - magnitude prefix) evaluate to be unequal. - - This behavior is chosen for the case where numbers are given - independently of their units, and hence the automatic conversion - facility available for comparing pint quantities is not available. - The only reliable way to test equality for these "less intelligent" - objects is to ensure that both the numerical values are exactly equal - and that the units are exactly equal; the latter includes order of - magnitude prefixes (micro, milli, ..., giga, etc.). - - """ - # pylint: disable=protected-access - - # NOTE: The order in which types are compared below matters, so change - # order carefully. - - if hasattr(x, 'hashable_state'): - if not hasattr(y, 'hashable_state'): - return False - return recursiveEquality(x.hashable_state, y.hashable_state) - - # pint units; allow for comparing across different regestries, for - # pragmatic (but possibly not the most correct) reasons... - elif isinstance(x, pint.unit._Unit): - if not isinstance(y, pint.unit._Unit): - logging.trace('type(x)=%s but type(y)=%s', type(x), type(y)) - if repr(x) != repr(y): - logging.trace('x:\n%s', x) - logging.trace('y:\n%s', y) - return False - - # pint quantities - elif isinstance(x, pint.quantity._Quantity): - if not isinstance(y, pint.quantity._Quantity): - logging.trace('type(x)=%s but type(y)=%s', type(x), type(y)) - return False - - # use a string for `x`'s units so we can compare across unit - # registries; this should do what we want in PISA, but note that in - # general this can be problematic since units can be redefined in - # different unit registries - xunit = str(x.units) - try: - converted_y = y.to(xunit) - except pint.DimensionalityError: - logging.trace('Incompatible units: x.units=%s, y.units=%s', - x.units, y.units) - return False - - return recursiveEquality(x.magnitude, converted_y.magnitude) - - # Simple things can be compared directly - elif ( - isinstance(x, str) - or isinstance(y, str) - or not (isinstance(x, COMPLEX_TYPES) or isinstance(y, COMPLEX_TYPES)) - ): - if x != y: - is_eq = False - try: - if np.allclose(x, y, **allclose_kw): - is_eq = True - except TypeError: - pass - if not is_eq: - logging.trace('Simple types (type(x)=%s, type(y)=%s) not equal.', - type(x), type(y)) - logging.trace('x:\n%s', x) - logging.trace('y:\n%s', y) - return False - - # Numpy types - elif isinstance(x, NP_TYPES) or isinstance(y, NP_TYPES): - if np.shape(x) != np.shape(y): - logging.trace('shape(x): %s', np.shape(x)) - logging.trace('shape(y): %s', np.shape(y)) - return False - - if isinstance(x, NP_TYPES): - dtype = x.dtype.type - first_element = next(iter(x.flat)) - else: - dtype = y.dtype.type - first_element = next(iter(y.flat)) - - if issubclass(dtype, np.floating): - if not np.allclose(x, y, **allclose_kw): - logging.trace('x:\n%s', x) - logging.trace('y:\n%s', y) - return False - elif isinstance(first_element, (AffineScalarFunc, Variable)): - if not ( - np.allclose(unp.nominal_values(x), unp.nominal_values(y), **allclose_kw) - and np.allclose(unp.std_devs(x), unp.std_devs(y), **allclose_kw) - ): - return False - else: - if not np.all(x == y): - logging.trace('x:\n%s', x) - logging.trace('y:\n%s', y) - return False - - # dict - elif isinstance(x, Mapping): - if not isinstance(y, Mapping): - return False - xkeys = sorted(x.keys()) - if xkeys != sorted(y.keys()): - logging.trace('xkeys:\n%s', xkeys) - logging.trace('ykeys:\n%s', sorted(y.keys())) - return False - else: - for k in xkeys: - if not recursiveEquality(x[k], y[k]): - logging.trace('not equal found at key: "%s"', k) - return False - - # Non-numpy sequence - elif isinstance(x, Sequence): - if not isinstance(y, Sequence): - return False - if len(x) != len(y): - logging.trace('len(x): %s', len(x)) - logging.trace('len(y): %s', len(y)) - return False - else: - for xs, ys in zip(x, y): - if not recursiveEquality(xs, ys): - logging.trace('xs:\n%s', xs) - logging.trace('ys:\n%s', ys) - return False - - # Unhandled - else: - raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % - (type(x), str(x), str(y))) - - # Returns above only occur if comparisons evaluate to False; therefore, if - # you make it here, everything is equal. - return True - - -# TODO: Get recursiveAllclose working as recursiveEquality does. - -def recursiveAllclose(x, y, *args, **kwargs): - """Recursively verify close-equality between two objects x and y. If - structure is different between the two objects, returns False - - args and kwargs are passed into numpy.allclose() function - """ - # TODO: until the below has been verified, refuse to run - raise NotImplementedError('recursiveAllclose not implemented yet') - # None - if x is None: - if y is not None: - return False - # Scalar - elif isscalar(x): - if not isscalar(y): - return False - # np.allclose doesn't handle some dtypes - try: - eq = np.allclose(x, y, *args, **kwargs) - except TypeError: - eq = x == y - if not eq: - return False - # Dict - elif isinstance(x, dict): - if not isinstance(y, dict): - return False - xkeys = sorted(x.keys()) - if xkeys != sorted(y.keys()): - return False - for k in xkeys: - if not recursiveAllclose(x[k], y[k], *args, **kwargs): - return False - # Sequence - elif hasattr(x, '__len__'): - if len(x) != len(y): - return False - if isinstance(x, (list, tuple)): - # NOTE: A list is allowed to be allclose to a tuple so long - # as the contents are allclose - if not isinstance(y, list) or isinstance(y, tuple): - return False - for xs, ys in zip(x, y): - if not recursiveAllclose(xs, ys, *args, **kwargs): - return False - elif isinstance(x, np.ndarray): - # NOTE: A numpy array only evalutes to allclose if compared to - # another numpy array - if not isinstance(y, np.ndarray): - return False - # np.allclose doesn't handle arrays of some dtypes - # TODO: this can be rolled into the above clause, I think - try: - eq = np.allclose(x, y, *args, **kwargs) - except TypeError: - eq = np.all(x == y) - if not eq: - return False - else: - raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % - (type(x), str(x), str(y))) - else: - raise TypeError('Unhandled type(s): %s, x=%s, y=%s' % - (type(x), str(x), str(y))) - # If you make it to here, must be close - return True - - -# TODO: add an arg and logic to round to a number of significand *bits* (as -# opposed to digits) (or even a fixed number of bits that align with special -# floating point spec values -- like half, single, double) for more precise -# control (and possibly faster comp), esp. if we decide to move to FP32 or -# (even more critical) FP16? -def normQuant(obj, sigfigs=None, full_norm=True): - """Normalize quantities such that two things that *should* be equal are - returned as identical objects. - - Handles floating point numbers, pint quantities, uncertainties, and - combinations thereof as standalone objects or in sequences, dicts, or numpy - ndarrays. Numerical precision issues and equal quantities represented in - differently-scaled or different systems of units come out identically. - - Outputs from this function (**not** the inputs) deemed to be equal by the - above logic will compare to be equal (via the `==` operator and via - `pisa.utils.comparisons.recursiveEquality`) and will also hash to equal - values (via `pisa.utils.hash.hash_obj`). - - Parameters - ---------- - obj - Object to be normalized. - - sigfigs : None or int > 0 - Number of digits to which to round numbers' significands; if None, do - not round numbers. - - full_norm : bool - If True, does full translation and normalization which is good across - independent invocations and is careful about normalizing units, etc. - If false, certain assumptions are made that modify the behavior - described below in the Notes section which help speed things up in the - case of e.g. a minimizer run, where we know certain things won't - change: - * Units are not normalized. They are assumed to stay the same from - run to run. - * sigfigs are not respected; full significant figures are returned - (since it takes time to round all values appropriately). - - Returns - ------- - normed_obj : object roughly of same type as input `obj` - Simple types are returned as the same type as at the input, Numpy - ndarrays are returned in the same shape and representation as the - input, Mappings (dicts) are returned as OrderedDict, and all other - sequences or iterables are returned as (possibly nested) lists. - - Notes - ----- - Conversion logic by `obj` type or types found within `obj`: - - * **Sequences and OrderedDicts** (but not numpy arrays) are iterated - through recursively. - * **Mappings without ordering** (e.g. dicts) are iterated through - recursively after sorting their keys, and are returned as - OrderedDicts (such that the output is always consistent when - serialized). - * **Sequences** (not numpy arrays) are iterated through recursively. - * **Numpy ndarrays** are treated as the below data types (according to the - array's dtype). - * **Simple objects** (non-floating point / non-sequence / non-numpy / etc.) - are returned unaltered (e.g. strings). - * **Pint quantities** (numbers with units): Convert to their base units. - * **Floating-point numbers** (including the converted pint quantities): - Round values to `sigfigs` significant figures. - * **Numbers with uncertainties** (via the `uncertainties` module) have - their nominal values rounded as above but their standard deviations are - rounded to the same order of magnitude (*not* number of significant - figures) as the nominal. - Therefore passing obj=10.23+/-0.25 and sigfigs=2 returns 10+/-0.0. - Note that **correlations are lost** in the outputs of this function, so - equality of the output requires merely having equal nomial values and - equal standard deviations. - The calculations leading to these equal numbers might have used - independent random variables to arrive at them, however, and so the - `uncertainties` module would have evaluated them to be unequal. [1] - - To achieve rounding that masks floating point precision issues, set - `sigfigs` to a value *less than* the number of decimal digits used for the - significand of the calculation floating point precision. - - For reference, the IEEE 754 floating point standard [2] uses the following: - - * FP16 (half precision): **3.31** significand decimal digits (11 bits) - * FP32 (single precision): **7.22** significand decimal digits (24 bits) - * FP64 (double precision): **15.95** significand decimal digits (53 bits) - * FP128 (quad precision): **34.02** significand decimal digits (113 bits) - - Logic for rounding the significand for numpy arrays was derived from [3]. - - References - ---------- - [1] https://github.com/lebigot/uncertainties/blob/master/uncertainties/test_uncertainties.py#L436 - - [2] https://en.wikipedia.org/wiki/IEEE_floating_point - - [3] http://stackoverflow.com/questions/18915378, answer by user BlackGriffin. - - Examples - -------- - Pint quantities hash to unequal values if specified in different scales or - different systems of units (even if the underlying physical quantity is - identical). - - >>> from pisa import ureg - >>> from pisa.utils.hash import hash_obj - >>> q0 = 1 * ureg.m - >>> q1 = 100 * ureg.cm - >>> q0 == q1 - True - >>> hash_obj(q0) == hash_obj(q1) - False - - Even the `to_base_units()` method fails for hashing to equal values, as - `q0` is a float and `q1` is an integer. - - >>> hash_obj(q0.to_base_units()) == hash_obj(q1.to_base_units()) - False - - Even if both quantities are floating point numbers, finite precision - effects in the `to_base_units` conversion can still cause two things which - we "know" are equal to evaluate to be unequal. - - >>> q2 = 0.1 * ureg.m - >>> q3 = 1e5 * ureg.um - >>> q2 == q3 - True - >>> q2.to_base_units() == q3.to_base_units() - False - - `normQuant` handles all of these issues given an appropriate `sigfigs` - argument. - - >>> q2_normed = normQuant(q2, sigfigs=12) - >>> q3_normed = normQuant(q3, sigfigs=12) - >>> q2_normed == q3_normed - True - >>> hash_obj(q2_normed) == hash_obj(q3_normed) - True - - """ - #logging.trace('-'*80) - #logging.trace('obj: %s', obj) - #logging.trace('type(obj): %s', type(obj)) - if not full_norm: - return obj - - # Nothing to convert for strings, None, ... - if isinstance(obj, str) or obj is None: - return obj - - round_result = False - if sigfigs is not None: - if not (int(sigfigs) == float(sigfigs) and sigfigs > 0): - raise ValueError('`sigfigs` must be an integer > 0.') - round_result = True - sigfigs = int(sigfigs) - - # Store kwargs for easily passing to recursive calls of this function - kwargs = dict(sigfigs=sigfigs, full_norm=full_norm) - - if hasattr(obj, 'normalized_state'): - return obj.normalized_state - - # Recurse into dict by its (sorted) keys (or into OrderedDict using keys in - # their defined order) and return an OrderedDict in either case. - if isinstance(obj, Mapping): - #logging.trace('Mapping') - if isinstance(obj, OrderedDict): - keys = obj.keys() - else: - keys = sorted(obj.keys()) - normed_obj = OrderedDict() - for key in keys: - normed_obj[key] = normQuant(obj[key], **kwargs) - return normed_obj - - # Sequences, etc. but NOT numpy arrays (or pint quantities, which are - # iterable) get their elements normalized and populated to a new list for - # returning. - # NOTE/TODO: allowing access across unit regestries for pragmatic (if - # incorrect) reasons... may want to revisit this decision. - # pylint: disable=protected-access - misbehaving_sequences = (np.ndarray, pint.quantity._Quantity) - if (isinstance(obj, (Iterable, Iterator, Sequence)) - and not isinstance(obj, misbehaving_sequences)): - #logging.trace('Iterable, Iterator, or Sequence but not ndarray or' - # ' _Qauantity') - return [normQuant(x, **kwargs) for x in obj] - - # Must be a numpy array or scalar if we got here... - - # NOTE: the order in which units (Pint module) and uncertainties - # (uncertainties module) are handled is crucial! Essentially, it appears - # that Pint is aware of uncertainties, but not vice versa. Hence the - # ordering and descriptions used below. - - # The outermost "wrapper" of a number or numpy array is its Pint units. If - # units are present, convert to base units, record the base units, and - # strip the units off of the quantity by replacing it with its magnitude - # (in the base units). - - has_units = False - if isinstance(obj, pint.quantity._Quantity): - #logging.trace('is a Quantity, converting to base units') - has_units = True - if full_norm: - obj = obj.to_base_units() - units = obj.units - obj = obj.magnitude - - # The next layer possible for a number or numpy array to have is - # uncertainties. If uncertainties are attached to `obj`, record a - # "snapshot" (losing correlations) of the standard deviations. Then replace - # the number or array solely with its nominal value(s). - - # NOTE: uncertainties.core.AffineScalarFunc includes such functions *and* - # uncertainties.core.Variable objects - - has_uncertainties = False - if isinstance(obj, AffineScalarFunc): - #logging.trace('type is AffineScalarFunc') - has_uncertainties = True - std_devs = obj.std_dev - obj = obj.nominal_value - elif isinstance(obj, np.ndarray) and np.issubsctype(obj, AffineScalarFunc): - #logging.trace('ndarray with subsctype is AffineScalarFunc') - has_uncertainties = True - std_devs = unp.std_devs(obj) - obj = unp.nominal_values(obj) - - # What is done below will convert scalars into arrays, so get this info - # before it is lost. - is_scalar = isscalar(obj) - - if round_result: - #logging.trace('rounding result') - # frexp returns *binary* fraction (significand) and *binary* exponent - bin_significand, bin_exponent = np.frexp(obj) - exponent = LOG10_2 * bin_exponent - exponent_integ = np.floor(exponent) - exponent_fract = exponent - exponent_integ - significand = bin_significand * 10**(exponent_fract) - obj = np.around(significand, sigfigs-1) * 10**exponent_integ - - # Now work our way *up* through the hierarchy: First, reintroduce - # uncertainties - - if has_uncertainties and round_result: - #logging.trace('uncertainties and rounding') - std_bin_significand, std_bin_exponent = np.frexp(std_devs) - std_exponent = LOG10_2 * std_bin_exponent - std_exponent_integ = np.floor(std_exponent) - std_exponent_fract = std_exponent - std_exponent_integ - # Don't just scale magnitude by the stddev's fractional exponent; also - # shift to be on the same scale (power-of-10) as the nominal value - delta_order_of_mag = std_exponent_integ - exponent_integ - std_significand = ( - std_bin_significand * 10**(std_exponent_fract + delta_order_of_mag) - ) - # Now rounding on the stddev's significand occurs at the same order of - # magnitude as rounding on the nominal value (and so scaling is done - # with `exponent_integ`, NOT `std_exponent_integ`) - std_devs = (np.around(std_significand, sigfigs-1) * 10**exponent_integ) - - if has_uncertainties: - #logging.trace('recreate uncertainties array') - obj = unp.uarray(obj, std_devs) - # If it was a scalar, it has become a len-1 array; extract the scalar - if is_scalar: - #logging.trace('converting to scalar') - obj = obj[0] - - # Finally, attach units if they were present - if has_units: - #logging.trace('reattaching units') - obj = obj * units - - return obj - - -def interpret_quantity(value, expect_sequence): - """Interpret a value as a pint Quantity via pisa.ureg - - Parameters - ---------- - value : scalar, Quantity, or sequence interpretable as Quantity - expect_sequence : bool - Specify `True` if you expect a sequence of quantities (or a - pint-Quantity containing a numpy array). This allows interpreting each - element of a passed sequence as a quantity. Otherwise, specify `False` - if you expect a scalar. This allows interpreting a pint.Qauntity tuple - as a ascalar (the first element of the tuple is the magnitude and the - second element contains the units). - - Returns - ------- - value : Quantity - - """ - if expect_sequence: - if isscalar(value): - if isunitless(value): - value = [value] * ureg.dimensionless - else: - if isunitless(value): - value = value * ureg.dimensionless - elif isinstance(value, ureg.Quantity): - pass - else: - if len(value) == 2 and isscalar(value[1]): - value = value * ureg.dimensionless - else: - value = ureg.Quantity.from_tuple(value) - else: - if isscalar(value): - if isbarenumeric(value): - value = value * ureg.dimensionless - elif isinstance(value, Sequence): - if len(value) == 2: - value = ureg.Quantity.from_tuple(value) - else: - raise ValueError( - "Expected a scalar, possibly a 2-sequence passable to" - "ureg.Quantity.from_tuple; got len-{} of type {}" - "instead".format(len(value), type(value)) - ) - if not isinstance(value, ureg.Quantity): - raise ValueError(str(value)) - return value - - -def test_isscalar(): - """Unit test for isscalar function""" - assert isscalar(0) - assert isscalar('xyz') - assert isscalar('') - assert isscalar(np.nan) - assert isscalar(np.inf) - assert not isscalar(iter([])) - assert not isscalar({}) - assert not isscalar(tuple()) - assert not isscalar([np.inf]) - assert not isscalar(np.array([np.inf])) - assert not isscalar(np.array([])) - - a = np.array([-np.inf, np.nan, -1.1, -1, 0, 1, 1.1, np.inf]) - unp_a = unp.uarray(a, np.ones_like(a)) - pint_a = a * ureg.GeV - pint_unp_a = unp_a * ureg.GeV - for x in [a, unp_a, pint_a, pint_unp_a]: - assert not isscalar(x), str(x) + ' should not evalute to scalar' - - u_fl = ufloat(1, 1) - p_fl = 1 * ureg.GeV - p_u_fl = ufloat(1, 1) * ureg.GeV - for x in [u_fl, p_fl, p_u_fl]: - assert isscalar(x), str(x) + ' should evaluate to scalar' - logging.info('<< PASS : test_isscalar >>') - - -def test_isunitless(): - """Unit tests for `isunitless` function""" - assert isunitless(1) - assert isunitless("xyz") - assert isunitless(True) - assert isunitless([0, 1, 2]) - assert isunitless(np.array([0, 1, 2])) - assert isunitless(np.array([0, 1, 0], dtype=bool)) - assert isunitless(ufloat(1, 2)) - assert isunitless(unp.uarray([1, 2], [0.01, 0.002])) - - assert not isunitless(1 * ureg.m) - assert not isunitless([0, 1, 2] * ureg.s) - assert not isunitless(np.array([0, 1, 2]) * ureg.m) - assert not isunitless(ufloat(1, 2) * ureg.ns) - assert not isunitless(unp.uarray([1, 2], [0.01, 0.002]) * ureg.m) - - logging.info('<< PASS : test_isunitless >>') - - -def test_recursiveEquality(): - """Unit test for recursiveEquality function""" - # pylint: disable=unused-variable - d1 = {'one': 1, 'two': 2, 'three': None, 'four': 'four'} - d2 = {'one': 1.0, 'two': 2.0, 'three': None, 'four': 'four'} - d3 = {'one': np.arange(0, 100), - 'two': [{'three': {'four': np.arange(1, 2)}}, - np.arange(3, 4)]} - d4 = {'one': np.arange(0, 100), - 'two': [{'three': {'four': np.arange(1, 2)}}, - np.arange(3, 4)]} - d5 = {'one': np.arange(0, 100), - 'two': [{'three': {'four': np.arange(1, 3)}}, - np.arange(3, 4)]} - d6 = {'one': np.arange(0, 100), - 'two': [{'three': {'four': np.arange(1.1, 2.1)}}, - np.arange(3, 4)]} - d7 = OrderedDict() - d7['d1'] = d1 - d7['f'] = 7.2 - d8 = OrderedDict() - d8['d1'] = d1 - d8['f'] = 7.2 - assert recursiveEquality(d1, d2) - assert not recursiveEquality(d1, d3) - assert recursiveEquality(d3, d4) - assert not recursiveEquality(d3, d5) - assert not recursiveEquality(d4, d5) - assert not recursiveEquality(d3, d6) - assert not recursiveEquality(d4, d6) - assert recursiveEquality(d7, d8) - - # Units and quantities (numbers with units) - - ureg0 = pint.UnitRegistry() - ureg1 = pint.UnitRegistry() - u0 = ureg0.GeV - u1 = ureg0.MeV - u2 = ureg1.GeV - u3 = ureg1.gigaelectron_volt - u4 = ureg1.foot - assert not recursiveEquality(u0, u1), 'noneq. of diff. unit, diff. reg' - assert not recursiveEquality(u1, u2), 'noneq. of diff. unit same reg' - assert recursiveEquality(u0, u2), 'eq. of same unit across registries' - assert recursiveEquality(u2, u3), 'eq. of same unit in same registry' - q0 = np.ones(100) * u0 - q1 = np.ones(100) * 1000.0 * u1 - assert recursiveEquality(q0, q1) - q2 = 1e5*np.ones(100) * ureg0.um - q3 = 0.1 * np.ones(100) * ureg0.m - assert recursiveEquality(q2, q3) - q4, q5 = np.ones(10) * 1000. * ureg0.MeV, np.ones(10) * ureg0.GeV - assert recursiveEquality(q4, q5) - - # Special numerical values - assert recursiveEquality(np.nan, np.nan) - assert recursiveEquality(np.inf, np.inf) - assert recursiveEquality(-np.inf, -np.inf) - assert not recursiveEquality(np.inf, -np.inf) - assert not recursiveEquality(np.inf, np.nan) - logging.info('<< PASS : test_recursiveEquality >>') - - -def test_normQuant(): - """Unit test for normQuant function""" - # pylint: disable=unused-variable - # TODO: test: - # * non-numerical - # * single non-numerical - # * sequence (tuple, list) of non-numirical - # * np.array of non-numerical - # * scalar - # * bare - # * with units only - # * with uncertainties only - # * with uncertanties and units - # * multi-dimensional array - # * integers, bare - # * float32, bare - # * float64, bare - # * float64 with units only - # * float64 with uncertainties only - # * float64 with both units and uncertainties - # * nested objects... ? - assert normQuant('xyz') == normQuant('xyz') - assert normQuant('xyz', sigfigs=12) == normQuant('xyz', sigfigs=12) - assert normQuant(None) == normQuant(None) - assert normQuant(None, sigfigs=12) == normQuant(None, sigfigs=12) - assert normQuant(1) == normQuant(1) - assert normQuant(1, sigfigs=12) == normQuant(1, sigfigs=12) - assert normQuant(1) == normQuant(1.0) - assert normQuant(1, sigfigs=12) == normQuant(1.0, sigfigs=12) - assert normQuant(1.001) != normQuant(1.002) - assert normQuant(1.001, sigfigs=3) == normQuant(1.002, sigfigs=3) - s0 = 1e5*ureg.um - s1 = 1e5*ureg.um - # ... - - q0 = 1e5*np.ones(10)*ureg.um - q1 = 0.1*np.ones(10)*ureg.m - assert not np.any(q0 == q1) - assert not np.any(q0.to_base_units() == q1.to_base_units()) - assert not np.any(normQuant(q0, None) == normQuant(q1, None)) - - # TODO / NOTE: following line was failing, but not sure the point now... - #assert not np.any(normQuant(q0, 18) == normQuant(q1, 18)) - - assert np.all(normQuant(q0, 16) == normQuant(q1, 16)) - assert np.all(normQuant(q0, 15) == normQuant(q1, 15)) - assert np.all(normQuant(q0, 1) == normQuant(q1, 1)) - assert normQuant(np.inf, sigfigs=15) == normQuant(np.inf, sigfigs=15) - assert normQuant(-np.inf, sigfigs=15) == normQuant(-np.inf, sigfigs=15) - assert normQuant(np.inf, sigfigs=15) != normQuant(-np.inf, sigfigs=15) - assert normQuant(np.nan, sigfigs=15) != normQuant(np.nan, sigfigs=15) - - # Dict of dicts - _ = normQuant({'x': {'1': 1, '2': 2}, 'y': {'3': 3, '4': 4}}) - logging.info('<< PASS : test_normQuant >>') - - -def test_interpret_quantity(): - """Unit tests for function `interpret_quantity`""" - - # -- Scalars and vectors that should be interpreted as vectors -- # - - for val, ref in [ - (1, [1] * ureg.dimensionless), - ([1, 2], [1, 2] * ureg.dimensionless), - ( - unp.uarray([1, 2], [0.5, 0.7]), - unp.uarray([1, 2], [0.5, 0.7]) * ureg.dimensionless, - ), - ([1, 2] * ureg.s, [1, 2] * ureg.s), - ( - unp.uarray([1, 2], [0.5, 0.7]) * ureg.cm, - unp.uarray([1, 2], [0.5, 0.7]) * ureg.cm, - ), - ]: - assert recursiveEquality( - interpret_quantity(val, expect_sequence=True), ref - ), "{} != {}".format(val, ref) - - # -- Scalars that should be interpreted as scalars -- # - - for val, ref in [ - (1, 1 * ureg.dimensionless), - ((1, ()), 1 * ureg.dimensionless), - ((1, (("s", -1), )), 1 / ureg.s), - ]: - assert recursiveEquality( - interpret_quantity(val, expect_sequence=False), ref - ), "{} != {}".format(val, ref) - - logging.info('<< PASS : test_interpret_quantity >>') - - -if __name__ == '__main__': - set_verbosity(1) - test_isscalar() - test_isunitless() - test_recursiveEquality() - test_normQuant() - test_interpret_quantity() diff --git a/pisa/utils/config_parser.py b/pisa/utils/config_parser.py deleted file mode 100644 index adfcad76e..000000000 --- a/pisa/utils/config_parser.py +++ /dev/null @@ -1,1457 +0,0 @@ -""" -Parse a ConfigFile object into a dict containing an item for every analysis -stage, that itself contains all necessary instantiation arguments/objects for -that stage. for en example config file, please consider -:file:`$PISA/pisa_examples/resources/settings/pipeline/example.cfg` - -Config File Structure -===================== - -A pipeline config file is expected to contain something like the following, -with the sections ``[pipeline]`` and corresponding ``[stage:service]`` -required, in addition to a ``[binning]`` section: - -.. code-block:: cfg - - #include file_x.cfg as x - #include file_y.cfg as y - - [pipeline] - - order = stageA.serviceA, stageB.serviceB - - output_binning = bining1 - output_key = ('weights', 'errors') - - - [binning] - - #include generic_binning.cfg - - binning1.order = axis1, axis2 - binning1.axis1 = { - 'num_bins': 40, 'is_log': True, 'domain': [1,80] units.GeV, 'tex': r'A_1' - } - binning1.axis2 = { - 'num_bins': 10, 'is_lin': True, 'domain': [1,5], 'tex': r'A_2' - } - - - [stageA.serviceA] - - input_binning = bining1 - output_binning = binning1 - error_method = None - debug_mode = False - - param.p1 = 0.0 +/- 0.5 units.deg - param.p1.fixed = False - param.p1.range = nominal + [-2.0, +2.0] * sigma - - param.selector1.p2 = 0.5 +/- 0.5 units.deg - param.selector1.p2.fixed = False - param.selector1.p2.range = nominal + [-2.0, +2.0] * sigma - - param.selector2.p2 = -0.5 +/- 0.1 units.deg - param.selector2.p2.fixed = False - param.selector2.p2.range = nominal + [-2.0, +2.0] * sigma - - - [stageB.serviceB] - - input_binning = bining1 - output_binning = binning1 - error_method = None - debug_mode = False - - param.p1 = ${stageA.serviceA:param.p1} - param.selector1.p2 = ${stageA.serviceA:param.selector1.p2} - param.selector2.p2 = ${stageA.serviceA:param.selector2.p2} - ... - -* ``#include`` statements can be used to include other config files. The - #include statement must be the first non-whitespace on a line, and these - statements can be used anywhere within a config file. -* ``#include resource as xyz`` statements behave similarly, but prepend the - included file's text with a setion header containing ``xyz`` in this case. -* ``pipeline`` is the top-most section that defines the hierarchy of stages and - what services to be instantiated. -* ``binning`` can contain different binning definitions, that are then later - referred to from within the ``stage.service`` sections. -* ``stage.service`` one such section per stage.service is necessary. It - contains some options that are common for all stages (`binning`, - `error_method` and `debug_mode`) as well as all the necessary arguments and - parameters for a given stage. -* Duplicate section headers and duplicate keys within a section are illegal. - - -Param definitions ------------------ - -Every key in a stage section that starts with `param.` is interpreted and -parsed into a PISA :class:`pisa.core.param.Param` object. These can be strings -(e.g. a filename--but don't use any quotation marks) or quantities (numbers -with units). - -Quantities expect an expression that can be converted by the -:func:`parse_quantity` function. The expression for a quantity can optionally -include a simple Gaussian prior and units. The simplest definition of a -quantity with neither Gaussian prior nor units would look something like this: - -.. code-block:: cfg - - param.p1 = 12.5 - -Gaussian priors can be included for a quantity using ``+/-`` notation, where -the number that follows ``+/-`` is the standard deviation. E.g.: - -.. code-block:: cfg - - param.p1 = 12.5 +/- 2.3 - -If no units are explicitly set for a quantity, it is taken to be a quantity -with special units ``dimensionless``. Units can be set by multiplying (using -``*``) by ``units.`` where ```` is the short or long name -(optionally including metric prefix) of a unit. E.g. the following set -equivalent values for params `p1` and `p2`: - -.. code-block:: cfg - - param.p1 = 12.5 * units.GeV - param.p2 = 12.5 * units.gigaelectronvolt - -and this can be combined with the Gaussian-prior ``+/-`` notation: - -.. code-block:: cfg - - param.p1 = 12.5 +/- 2.3 * units.GeV - -Additional arguments to a parameter are passed in with the ``.`` notation, for -example ``param.p1.fixed = False``, which makes p1 a free parameter in the -fit (by default a parameter is fixed unless specified like this). - -Uniform and spline priors can also be set using the ``.prior`` attribute: - -.. code-block:: cfg - - param.p1 = 12.5 - param.p1.prior = uniform - - param.p2 = 12.5 - param.p2.prior = spline - param.p2.prior.data = resource_loc - -If no prior is specified, it is taken to have no prior (or, equivalently, a -uniform prior with no penalty). A uniform prior can be explicitly set or -arbitrary (Priors (including a Gaussian prior, as an alternative to the above -notation) can be explicitly set using the ``.prior`` attribute of a ``param``: - -A range must be given for a free parameter. Either as absolute range `[x,y]` or -in conjunction with the keywords `nominal` (= nominal parameter value) and -`sigma` if the param was specified with the `+/-` notation. - -`.prior` is another argument, that can take the values `uniform` or `spline`, -for the latter case a `.prior.data` will be expected, pointing to the spline -data file. - -N.B. -++++ -Params that have the same name in multiple stages of the pipeline are -instantiated as references to a single param in memory, so updating one updates -all of them. - -Note that this mechanism of synchronizing parameters holds only within the -scope of a single pipeline; synchronization of parameters across pipelines is -done by adding the pipelines to a single DistributionMaker object and updating -params through the DistributionMaker's update_params method. - -If you DO NOT want parameters to be synchronized, provide a unique_id for them. -This is imply done by setting `.unique_id` - - -Param selector --------------- - -A special mechanism allows the user to specify multiple, different values for -the same param via the param selector method. This can be used for example for -hypothesis testing, there for hypothesis A a param takes a certain value, while -for hypothesis B a different value. - -A given param, say `foo`, then needs two definitions like the following, -assuming we name our selections `A` and `B`: - -.. code-block:: cfg - - param.A.foo = 1 - param.B.foo = 2 - -The default param selector needs to be spcified under section `pipeline` as e.g. - -.. code-block:: cfg - - param_selections = A - -Which will default the value of 1 for param `foo`. An instatiated pipeline can -dynamically switch to another selection after instantiation. - -Multiple different param selectors are allowed in a single config. In the -default selection they must be separated by commas. - -""" - -# TODO: consistency, etc. -# * Order-independent hashing of the PISAConfigParser object (recursively sort -# contents?). This is still a worse idea than hashing on instantiated PISA -# objects since things like meaningless whitespace will modify the hash of -# the config. -# * Add explicit gaussian prior (should NOT just rely on +/- notation to make -# consistent with other priors) -# * Furthermore, all priors should be able to be defined in one line, e.g.: -# p1.prior = guassian: std_dev = 1.2 -# p2.prior = uniform -# p3.prior = spline: data = resource/location/config.cfg -# p4.prior = None -# * Make interoperable with pisa.utils.resources. I.e., able to work with -# Python package resources, not just filesystem files. -# * Docstrings -# * TODO: add try: except: blocks around class instantiation calls to give -# maximally useful error info to the user (spit out a good message, but then -# re-raise the exception) - - -from __future__ import absolute_import, division - -from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser -from collections.abc import Mapping -from collections import Counter, OrderedDict -from io import StringIO -from os.path import abspath, expanduser, expandvars, isfile, join -import re -import sys - -from configparser import ( - RawConfigParser, ExtendedInterpolation, DuplicateOptionError, - SectionProxy, MissingSectionHeaderError, DuplicateSectionError, - NoSectionError -) -import numpy as np -from uncertainties import ufloat, ufloat_fromstr - -from pisa import ureg -from pisa.utils.fileio import from_file -from pisa.utils.format import split -from pisa.utils.hash import hash_obj -from pisa.utils.log import Levels, logging, set_verbosity -from pisa.utils.resources import find_resource - - -__all__ = ['PARAM_RE', 'PARAM_ATTRS', 'STAGE_SEP', - 'parse_quantity', 'parse_string_literal', - 'interpret_param_subfields', 'parse_param', 'parse_pipeline_config', - 'MutableMultiFileIterator', 'PISAConfigParser'] - -__author__ = 'P. Eller, J. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -PARAM_RE = re.compile( - r'^param\.(?P(([^.\s]+)(\.|$))+)', - re.IGNORECASE -) - -PARAM_ATTRS = ['range', 'prior', 'fixed', 'tex', 'scales_as_log'] - -STAGE_SEP = '.' - -# Define names that users can specify in configs such that the eval of those -# strings works. -numpy = np # pylint: disable=invalid-name -inf = np.inf # pylint: disable=invalid-name -units = ureg # pylint: disable=invalid-name - - -def parse_quantity(string): - """Parse a string into a pint/uncertainty quantity. - - Parameters - ---------- - string : string - - Returns - ------- - value : pint.quantity of uncertainties.core.AffineScalarFunc - - Examples - -------- - >>> quant = parse_quantity('1.2 +/- 0.7 * units.meter') - >>> print(str(quant)) - 1.2+/-0.7 meter - >>> print('{:~}'.format(quant)) - 1.2+/-0.7 m - >>> print(quant.magnitude) - 1.2+/-0.7 - >>> print(quant.units) - meter - >>> print(quant.nominal_value) - 1.2 - >>> print(quant.std_dev) - 0.7 - - Also note that spaces and the "*" are optional: - - >>> print(parse_quantity('1+/-1units.GeV')) - 1.0+/-1.0 gigaelectron_volt - - """ - value = string.replace(' ', '') - if 'units.' in value: - value, unit = value.split('units.') - else: - unit = None - value = value.rstrip('*') - if '+/-' in value: - value = ufloat_fromstr(value) - else: - value = ufloat(float(value), 0) - value *= ureg(unit) - return value - - -def parse_string_literal(string): - """Evaluate a string with certain special values, or return the string. Any - further parsing must be done outside this module, as this is as specialized - as we're willing to be in assuming/interpreting what a string is supposed - to mean. - - Parameters - ---------- - string : string - - Returns - ------- - val : bool, None, or str - - Examples - -------- - >>> print(parse_string_literal('true')) - True - - >>> print(parse_string_literal('False')) - False - - >>> print(parse_string_literal('none')) - None - - >>> print(parse_string_literal('something else')) - 'something else' - - """ - if string.strip().lower() == 'true': - return True - if string.strip().lower() == 'false': - return False - if string.strip().lower() == 'none': - return None - return string - - -def interpret_param_subfields(subfields, selector=None, pname=None, attr=None): - """Recursively interpret and parse parameter subfields. - - Parameters - ---------- - subfields : list of strings - selector : string - pname : string - attr : list of strings - - Returns - ------- - infodict : dict - - Examples - -------- - >>> print(interpret_param_subfields(subfields=['nh', 'deltam31', 'range'])) - {'pname': 'deltam31', 'subfields': [], 'attr': ['range'], 'selector': 'nh'} - - """ - infodict = dict(subfields=subfields, selector=selector, pname=pname, - attr=attr) - - # Everything has been parsed - if not infodict['subfields']: - return infodict - - # If only one field, this must be the param's name, and we're done - if len(infodict['subfields']) == 1: - infodict['pname'] = infodict['subfields'].pop() - return interpret_param_subfields(**infodict) - - # Look for and remove attr field and any subsequent fields - attr_indices = [] - for n, field in enumerate(infodict['subfields']): - if field in PARAM_ATTRS: - attr_indices.append(n) - - # TODO: not clear what's being done here; also, would slicing be more clear - # than iterating & calling pop()? - if len(attr_indices) == 1: - attr_idx = attr_indices[0] - infodict['attr'] = [ - infodict['subfields'].pop(attr_idx) - for _ in range(attr_idx, len(infodict['subfields'])) - ] - return interpret_param_subfields(**infodict) - - elif len(attr_indices) > 1: - raise ValueError('Found multiple attrs in config name "%s"' %pname) - - if len(infodict['subfields']) == 2: - infodict['pname'] = infodict['subfields'].pop() - infodict['selector'] = infodict['subfields'].pop() - return interpret_param_subfields(**infodict) - - raise ValueError('Unable to parse param subfields %s' - %infodict['subfields']) - - -def parse_param(config, section, selector, fullname, pname, value): - """Parse a param specification from a PISA config file. - - Note that if the param sepcification does not include ``fixed``, - ``prior``, and/or ``range``, the defaults for these are: - ``fixed = True``, ``prior = None``, and ``range = None``. - - If a prior is specified explicitly via ``.prior``, this takes precendence, - but if no ``.prior`` is specified and the param's value is parsed to be a - :class:`uncertainties.AffineScalarFunc` (i.e. have `std_dev` attribute), a - Gaussian prior is constructed from that and then the AffineScalarFunc is - stripped out of the param's value (such that it is just a - :class:`~pint.quantity.Quantity`). - - Parameters - ---------- - config : pisa.utils.config_parser.PISAConfigParser - section : string - selector : string or None - fullname : string - pname : string - value : string - - Returns - ------- - param : pisa.core.param.Param - - """ - # Note: imports placed here to avoid circular imports - from pisa.core.param import Param, DerivedParam - from pisa.core.prior import Prior - kwargs = dict(name=pname, is_fixed=True, prior=None, range=None) - try: - value = parse_quantity(value) - kwargs['value'] = value.nominal_value * value.units - except ValueError: - value = parse_string_literal(value) - kwargs['value'] = value - - # Search for explicit attr specifications - if config.has_option(section, fullname + '.fixed'): - kwargs['is_fixed'] = config.getboolean(section, fullname + '.fixed') - - if config.has_option(section, fullname + '.scales_as_log'): - kwargs['scales_as_log'] = config.getboolean(section, fullname + '.scales_as_log') - - if config.has_option(section, fullname + '.unique_id'): - kwargs['unique_id'] = config.get(section, fullname + '.unique_id') - - if config.has_option(section, fullname + '.tex'): - kwargs['tex'] = config.get(section, fullname + '.tex') - - if config.has_option(section, fullname + '.range'): - range_ = config.get(section, fullname + '.range') - # Note: `nominal` and `sigma` are called out in the `range_` string - if 'nominal' in range_: - nominal = value.n * value.units # pylint: disable=unused-variable - if 'sigma' in range_: - sigma = value.s * value.units # pylint: disable=unused-variable - range_ = range_.replace('[', 'np.array([') - range_ = range_.replace(']', '])') - # Strip out uncertainties from value itself (as we will rely on the - # prior from here on out) - kwargs['range'] = eval(range_).to(value.units) # pylint: disable=eval-used - - if config.has_option(section, fullname+".function_file"): - kwargs["function_file"] = config.get(section, fullname+".function_file") - - if config.has_option(section, fullname+".depends_names"): - # this means this is a derived parameter, so we throw away the default `fixed` and `prior` kwargs - del kwargs['is_fixed'] - del kwargs['prior'] - - depends = config.get(section, fullname+".depends_names") - kwargs["depends_names"] = depends.split(" ") - - if config.has_option(section, fullname + '.prior'): - prior = str(config.get(section, fullname + '.prior')).strip().lower() - if prior == 'uniform': - kwargs['prior'] = Prior(kind='uniform') - elif prior == 'jeffreys': - kwargs['prior'] = Prior( - kind='jeffreys', - A=kwargs['range'][0], # pylint: disable=unsubscriptable-object - B=kwargs['range'][1], # pylint: disable=unsubscriptable-object - ) - elif prior == 'spline': - priorname = pname - if selector is not None: - priorname += '_' + selector - data = config.get(section, fullname + '.prior.data') - data = from_file(data) - data = data[priorname] - knots = ureg.Quantity(np.asarray(data['knots']), data['units']) - knots = knots.to(value.units) - coeffs = np.asarray(data['coeffs']) - deg = data['deg'] - kwargs['prior'] = Prior(kind='spline', knots=knots, coeffs=coeffs, - deg=deg) - elif prior == 'none': - kwargs['prior'] = None - elif 'gauss' in prior: - raise Exception('Please use new style +/- notation for gaussian' - ' priors in config') - else: - raise Exception('Prior type unknown') - - elif hasattr(value, 'std_dev') and value.std_dev != 0: - kwargs['prior'] = Prior(kind='gaussian', - mean=value.nominal_value * value.units, - stddev=value.std_dev * value.units) - - # Strip out any uncertainties from value itself (an explicit ``.prior`` - # specification takes precedence over this) - if hasattr(value, 'std_dev'): - value = value.nominal_value * value.units - try: - if "depends_names" in kwargs: - param = DerivedParam(**kwargs) - else: - param = Param(**kwargs) - except: - logging.error('Failed to instantiate new Param object with kwargs %s', - kwargs) - raise - - return param - - -def parse_pipeline_config(config): - """Parse pipeline config. - - Parameters - ---------- - config : string or ConfigParser - - Returns - ------- - stage_dicts : OrderedDict - Keys are (stage_name, service_name) tuples and values are OrderedDicts - with keys the argnames and values the arguments' values. Some known arg - values are parsed out fully into Python objects, while the rest remain - as strings that must be used or parsed elsewhere. - - """ - # Note: imports placed here to avoid circular imports - from pisa.core.binning import MultiDimBinning, OneDimBinning - from pisa.core.param import ParamSelector, DerivedParam - - if isinstance(config, str): - config = from_file(config) - elif isinstance(config, PISAConfigParser): - pass - else: - raise TypeError( - '`config` must either be a string or PISAConfigParser. Got %s ' - 'instead.' % type(config) - ) - - if not config.has_section('binning'): - raise NoSectionError( - "Could not find 'binning'. Only found sections: %s" - % config.sections() - ) - - # Create binning objects - binning_dict = {} - # Loop over binning lines - for name, value in config['binning'].items(): - if name.endswith('.order'): - # Found the first line in a new binning, get the individual bin dimension definitions... - order = split(config.get('binning', name)) - binning, _ = split(name, sep='.') - bins = [] - for bin_name in order: - try: - def_raw = config.get('binning', binning + '.' + bin_name) - except: - dims_defined = [ - split(dim, sep='.')[1] for dim in - config['binning'].keys() if - dim.startswith(binning + '.') and not - dim.endswith('.order') - ] - logging.error( - "Failed to find definition of '%s' dimension of '%s'" - " binning entry. Only found definition(s) of: %s", - bin_name, binning, dims_defined - ) - del dims_defined - raise - try: - kwargs = eval(def_raw) # pylint: disable=eval-used - except: - logging.error( - "Failed to evaluate definition of '%s' dimension of" - " '%s' binning entry:\n'%s'", - bin_name, binning, def_raw - ) - raise - try: - bins.append(OneDimBinning(bin_name, **kwargs)) - except: - logging.error( - "Failed to instantiate new `OneDimBinning` from '%s'" - " dimension of '%s' binning entry with definition:\n" - "'%s'\n", bin_name, binning, kwargs - ) - raise - # Get the bin mask, if there is ome - mask = config['binning'].get(binning + '.mask', None) - if mask is not None : - mask = eval(mask) - # Create the binning object - binning_dict[binning] = MultiDimBinning(bins, name=binning, mask=mask) - - - stage_dicts = OrderedDict() - - # Pipeline section - section = 'pipeline' - - stage_dicts[section] = {} - - # Get and parse the order of the stages (and which services implement them) - order = [split(x, STAGE_SEP) for x in split(config.get(section, 'order'))] - - # Name of pipeline - if config.has_option(section, 'name'): - stage_dicts[section]['name'] = config.get(section, 'name') - else: - stage_dicts[section]['name'] = "none" - - if config.has_option(section, 'output_binning'): - stage_dicts[section]['output_binning'] = binning_dict[config.get(section, 'output_binning')] - output_key = split(config.get(section, 'output_key')) - if len(output_key) == 1: - stage_dicts[section]['output_key'] = output_key[0] - elif len(output_key) == 2: - stage_dicts[section]['output_key'] = tuple(output_key) - else: - raise ValueError(f'Output key should be exactly one key, or a tuple (key, error_key), but is {output_key}') - else: - stage_dicts[section]['output_binning'] = None - stage_dicts[section]['output_format'] = None - stage_dicts[section]['output_key'] = None - - param_selections = [] - if config.has_option(section, 'param_selections'): - param_selections = split(config.get(section, 'param_selections')) - - if config.has_option(section, 'detector_name'): - stage_dicts[section]['detector_name'] = config.get(section, 'detector_name') - else: - stage_dicts[section]['detector_name'] = None - - - # Parse [stage.] sections and store to stage_dicts - for stage, service in order: # pylint: disable=too-many-nested-blocks - old_section_header = 'stage%s%s' % (STAGE_SEP, stage) - new_section_header = '%s%s%s' % (stage, STAGE_SEP, service) - if config.has_section(old_section_header): - logging.warning( - '"%s" is an old-style section header, in the future use "%s"', - old_section_header, new_section_header - ) - section = old_section_header - elif config.has_section(new_section_header): - section = new_section_header - else: - raise IOError( - 'missing section in cfg for stage "%s" service "%s"' - % (stage, service) - ) - - # Instantiate dict to store args to pass to this stage - service_kwargs = OrderedDict() - - param_selector = ParamSelector(selections=param_selections) - service_kwargs['params'] = param_selector - - n_params = 0 - n_derived_params = 0 - for fullname in config.options(section): - try: - value = config.get(section, fullname) - except: - logging.error( - 'Unable to obtain value of option "%s" in section "%s".', - fullname, section - ) - raise - # See if this matches a param specification - param_match = PARAM_RE.match(fullname) - if param_match is not None: - n_params += 1 - - param_match_dict = param_match.groupdict() - param_subfields = param_match_dict['subfields'].split('.') - - # Figure out what the dotted fields represent... - infodict = interpret_param_subfields(subfields=param_subfields) - - # If field is an attr, skip since these are located manually - if infodict['attr'] is not None: - continue - - # Check if this param already exists in a previous stage; if - # so, make sure there are no specs for this param, but just a - # link to previous the param object that is already - # instantiated. - for kw in stage_dicts.values(): - # Stage did not get a `params` argument from config - if not 'params' in kw: - continue - - # Retrieve the param from the ParamSelector - try: - param = kw['params'].get( - name=infodict['pname'], - selector=infodict['selector'] - ) - except KeyError: - continue - - # Make sure there are no other specs (in this section) for - # the param defined defined in previous section - for a in PARAM_ATTRS: - if config.has_option(section, '%s.%s' %(fullname, a)): - raise ValueError("Parameter spec. '%s' of '%s' " - "found in section '%s', but " - "parameter exists in previous " - "stage!"%(a, fullname, section)) - - break - - # Param *not* found in a previous stage (i.e., no explicit - # `break` encountered in `for` loop above); therefore must - # instantiate it. - else: - param = parse_param( - config=config, - section=section, - selector=infodict['selector'], - fullname=fullname, - pname=infodict['pname'], - value=value - ) - if isinstance(param, DerivedParam): - n_derived_params += 1 - - param_selector.update(param, selector=infodict['selector']) - - # If it is a binning defined in the "binning" section, use the parsed value - elif value in binning_dict.keys(): - service_kwargs[fullname] = binning_dict[value] - - # If it's not a param spec but contains 'binning', assume it's a - # binning spec for CAKE stages - elif 'binning' in fullname: - service_kwargs[fullname] = binning_dict[value] - - # it's gonna be a PI stage - elif fullname in ['calc_mode', 'apply_mode', 'output_format']: - value = parse_string_literal(value) - # is it None? - if value is None: - service_kwargs[fullname] = value - # is it a binning? - if value in binning_dict.keys(): - service_kwargs[fullname] = binning_dict[value] - # whatever - else: - service_kwargs[fullname] = value - - # it's a list on in/output names list - elif fullname.endswith('_names'): - value = split(value) - service_kwargs[fullname] = value - # Otherwise it's some other stage instantiation argument; identify - # this by its full name and try to interpret and instantiate a - # Python object using the string - else: - if re.search(r'[^a-z_]units\.[a-z]+', value, flags=re.IGNORECASE): - try: - new_value = parse_quantity(value) - new_value = new_value.nominal_value * new_value.units - except ValueError: - new_value = parse_string_literal(value) - else: - new_value = parse_string_literal(value) - service_kwargs[fullname] = new_value - - # If no params actually specified in config, remove 'params' from the - # service's keyword args - if n_params == 0: - service_kwargs.pop('params') - - # finish setting up the derived parameters - if n_derived_params != 0: - for param in param_selector: - if isinstance(param, DerivedParam): - # give the derived parameter references to the parameters it depends on - param.dependson = [param_selector.get(name) for name in param.depends_names] - - - # Store the service's kwargs to the stage_dicts - stage_dicts[(stage, service)] = service_kwargs - - return stage_dicts - -class MutableMultiFileIterator(object): - """ - Iterate through the lines of an already-open file (`fp`) but then can pause - at any point and open and iterate through another file via the - `switch_to_file` method (and this file can be paused to iterate through - another, etc.). - - This has the effect of in-lining files within files for e.g. parsing - multiple files as if they're a singe file. Which line comes from which file - is also tracked for generating maximally-useful error messages, via the - `location` method. - - Note that circular references are not allowed. - - Parameters - ---------- - fp : file-like object - The (opened) main config to be read. E.g. can be an opened file, - io.StringIO object, etc. - - fpname : string - Identifier for the initially `fp` object - - """ - def __init__(self, fp, fpname, fpath=None): - self._iter_stack = [] - """Stack for storing dicts with 'fp', 'fpname', 'fpath', 'lineno', and - 'line' for keeping track of the hierarchy of master config & included - configs""" - - # It's ok to not find the fpname / fpname to not be a file for the - # *master* config, since this could e.g. be a io.StringIO file-like - # object (`read_string`) which comes from no actual file/resource on - # disk. - if not fpname and hasattr(fp, 'name'): - fpname = fp.name - - if fpath is None: - try: - resource = find_resource(fpname) - except IOError: - pass - else: - if isfile(resource): - fpath = abspath(expanduser(expandvars(fpname))) - - if fpath is None: - try: - resource = find_resource(fpname) - except IOError: - pass - else: - if isfile(resource): - fpath = resource - - if fpath is None: - self.fpaths_processed = [] - else: - self.fpaths_processed = [fpath] - - self.fps_processed = [fp] - - record = dict(fp=fp, fpname=fpname, fpath=fpath, lineno=0, line='') - self._iter_stack.append(record) - self.file_hierarchy = OrderedDict([(fpname, OrderedDict())]) - - def __next__(self): - """Iterate through lines in the file(s). - - Returns - ------- - line : string - The next line from the current file. - - fpname : string - The `fpname` of the file from which the line was gotten. - - lineno : int - The line number in the file. - - """ - if not self._iter_stack: - self._cleanup() - raise StopIteration - try: - record = self._iter_stack[-1] - record['line'] = next(record['fp']) - record['lineno'] += 1 - return record - except StopIteration: - record = self._iter_stack.pop() - logging.trace(('Finished processing "{fpname:s}" with {lineno:d}' - ' line(s)').format(**record)) - return next(self) - except: - self._cleanup() - raise - - def switch_to_file(self, fp=None, fpname=None): - """Switch iterator to a new resource location to continue processing. - - Parameters - ---------- - fp : None or file-like object - If `fp` is specified, this takes precedence over `fpname`. - - fpname : None or string - Path of the file or resource to read from. This resource will be - located and opened if `fp` is None. - - encoding - Argument is passed to the builtin ``open`` function for opening - the file. - - """ - fpath = None - if fp is None: - assert fpname - resource = find_resource(fpname) - if isfile(resource): - fpath = abspath(expanduser(expandvars(resource))) - if fpath in self.fpaths_processed: - self._cleanup() - raise ValueError( - 'Circular reference; already processed "%s" at path' - ' "%s"' % (fpname, fpath) - ) - else: - self._cleanup() - raise ValueError('`fpname` "%s" is not a file') - fp_ = open(fpath, encoding=None) - else: - fp_ = fp - if fpname is None: - if hasattr(fp_, 'name'): - fpname = fp_.name - else: - fpname = '' - try: - resource = find_resource(fpname) - except IOError: - pass - else: - if isfile(resource): - fpath = resource - if fp in self.fps_processed: - self._cleanup() - raise ValueError( - 'Circular reference; already processed file pointer "%s"' - ' at path "%s"' % (fp_, fpname) - ) - - if fpath is not None: - if fpath in self.fpaths_processed: - self._cleanup() - raise ValueError( - 'Circular reference; already processed "%s" at path' - ' "%s"' % (fpname, fpath) - ) - self.fpaths_processed.append(fpath) - - self.fps_processed.append(fp) - if fpath is not None: - self.fpaths_processed.append(fpath) - - logging.trace('Switching to "%s" at path "%s"' % (fpname, fpath)) - - record = dict(fp=fp_, fpname=fpname, fpath=fpath, lineno=0, line='') - self._iter_stack.append(record) - - @property - def location(self): - """string : Full hierarchical location, formatted for display""" - info = ['File hierarchy (most recent last):\n'] - for record_num, record in enumerate(self._iter_stack): - s = ' Line {lineno:d}, fpname "{fpname:s}"' - if record_num > 0: - s += ' at path "{fpath:s}"' - s += '\n {line:s}' - info.append(s.format(**record)) - return ''.join(info) - - def __iter__(self): - return self - - def __del__(self): - self._cleanup() - - def _cleanup(self): - """Close all file handles opened by this object (i.e. all except the - first file pointer, which is provided as an argument to `__init__`)""" - for record in self._iter_stack[1:]: - record['fp'].close() - - -class PISAConfigParser(RawConfigParser): # pylint: disable=too-many-ancestors - """ - Parses a PISA config file, extending :class:`configparser.RawConfigParser` - (the backport of RawConfigParser from Python 3.x) by adding the ability to - include external files inline via, for example: - - .. code-block:: cfg - - #include /path/to/file.cfg - #include path/to/resource.cfg - #include path/to/resource2.cfg as section2 - - [section1] - key11 = value1 - key12 = ${section2:key21} - key13 = value3 - - where the files or resources located at "/path/to/file.cfg", - "path/to/resource.cfg", and "path/to/resource2.cfg" are effectively inlined - wherever the #include statements occur. - - The ``#include path/to/resource2.cfg as section_name`` syntax - prefixes the contents of ``resource2.cfg`` by a section header named - "section2", expanding ``resource2.cfg`` as: - - .. code-block:: cfg - - [section2] - line1 of resource2.cfg - line2 of resource2.cfg - ... etc. - - Special parsing rules we have added to make ``#include`` behavior sensible: - - 1. Using an ``#include file`` that contains a sction header - (``[section_name]``) *or* using ``#include file as section_name`` - requires that the next non-blank / non-comment / non-#include line be a - new section header (``[section_name2]``). - 2. Empty sections after fully parsing a config will raise a ``ValueError``. - This is likely never a desired behavior, and should alert the user to - inadvertent use of ``#include``. - - Also note that, unlike the default :class:`~configparser.ConfigParser` - behavior, :class:`~configparser.ExtendedInterpolation` is used, whitespace - surrounding text in a section header is ignored, empty lines are *not* - allowed between multi-line values, and section names, keys, and values are - all case-sensitive. - - All other options are taken as the defaults / default behaviors of - :class:`~configparser.ConfigParser`. - - See help for :class:`configparser.ConfigParser` for further help on valid - config file syntax and parsing behavior. - - """ - - _DEFAULT_INTERPOLATION = ExtendedInterpolation() - INCLUDE_RE = re.compile(r'\s*#include\s+(?P\S.*)') - INCLUDE_AS_RE = re.compile(r'\s*(?P.+)((?:\s+as\s+)(?P\S+))') - SECTCRE = re.compile(r'\[\s*(?P
[^]]+?)\s*\]') - - def __init__(self): - #self.default_section = None #DEFAULTSECT - # Instantiate parent class with PISA-specific options - #super().__init__( - RawConfigParser.__init__( - self, - interpolation=ExtendedInterpolation(), - empty_lines_in_values=False, - ) - self.file_iterators = [] - - def set(self, section, option, value=None): - """Set an option. Extends RawConfigParser.set by validating type and - interpolation syntax on the value.""" - _, option, value = self._validate_value_types(option=option, - value=value) - super().set(section, option, value) - - def add_section(self, section): - """Create a new section in the configuration. Extends - RawConfigParser.add_section by validating if the section name is - a string.""" - section, _, _ = self._validate_value_types(section=section) - super().add_section(section) - - def optionxform(self, optionstr): - """Enable case-sensitive options in .cfg files, and force all values to - be ASCII strings.""" - return optionstr #.encode('ascii') - - @property - def hash(self): - """int : Hash value of the contents (does not depend on order of - sections, but does depend on order of keys within each section)""" - return self.__hash__() - - def __hash__(self): - return hash_obj([(sec, (self.items(sec))) - for sec in sorted(self.sections())]) - - @staticmethod - def _get_include_info(line): - match = PISAConfigParser.INCLUDE_RE.match(line) - if not match: - return None - include = match.groupdict()['include'] - match = PISAConfigParser.INCLUDE_AS_RE.match(include) - if match is None: - return {'file': include, 'as': None} - return match.groupdict() - - def read(self, filenames, encoding=None): - """Override `read` method to interpret `filenames` as PISA resource - locations, then call overridden `read` method. Also, IOError fails - here, whereas it is ignored in RawConfigParser. - - For further help on this method and its arguments, see - :method:`~backports.configparser.configparser.read` - - """ - if isinstance(filenames, str): - filenames = [filenames] - resource_locations = [] - for filename in filenames: - resource_location = find_resource(filename) - if not isfile(resource_location): - raise ValueError( - '"%s" is not a file or could not be located' % filename - ) - resource_locations.append(resource_location) - - filenames = resource_locations - - # NOTE: From here on, most of the `read` method is copied, but - # ignoring IOError exceptions is removed here. Python copyrights apply. - - if isinstance(filenames, str): - filenames = [filenames] - read_ok = [] - for filename in filenames: - with open(filename, encoding=encoding) as fp: - self._read(fp, filename) - read_ok.append(filename) - return read_ok - - # NOTE: the `_read` method is copy-pasted (then modified slightly) from - # Python's backports.configparser (version 3.5.0), and so any copyright - # notices at the top of this file might need modification to be compatible - # with copyrights on that module. - # - # Also, diff this function with future releases in case something needs - # modification. - - # pylint: disable=E,W,C,R - def _read(self, fp, fpname): - """Parse a sectioned configuration file. - - Each section in a configuration file contains a header, indicated by - a name in square brackets (`[]'), plus key/value options, indicated by - `name' and `value' delimited with a specific substring (`=' or `:' by - default). - - Values can span multiple lines, as long as they are indented deeper - than the first line of the value. Depending on the parser's mode, blank - lines may be treated as parts of multiline values or ignored. - - Configuration files may include comments, prefixed by specific - characters (`#' and `;' by default). Comments may appear on their own - in an otherwise empty line or may be entered in lines holding values or - section names. - - This implementation is extended from the original to also accept - - .. code:: ini - - #include - - or - - .. code:: ini - - #include as - - syntax anywhere in the file, which switches (via - :class:`MutableMultiFileIterator`) to the new file as if it were - in-lined within the original file. The latter syntax also prepends a - section header - - .. code:: ini - - [section_name] - - before the text of the specified file or pisa_resource. - - """ - elements_added = set() - cursect = None # None, or a dictionary - sectname = None - optname = None - lineno = 0 - indent_level = 0 - e = None # None, or an exception - - file_iter = MutableMultiFileIterator(fp=fp, fpname=fpname) - self.file_iterators.append(file_iter) - for record in file_iter: - fpname = record['fpname'] - lineno = record['lineno'] - line = record['line'] - - comment_start = sys.maxsize - # strip inline comments - inline_prefixes = dict( - (p, -1) for p in self._inline_comment_prefixes) - while comment_start == sys.maxsize and inline_prefixes: - next_prefixes = {} - for prefix, index in inline_prefixes.items(): - index = line.find(prefix, index+1) - if index == -1: - continue - next_prefixes[prefix] = index - if index == 0 or (index > 0 and line[index-1].isspace()): - comment_start = min(comment_start, index) - inline_prefixes = next_prefixes - # parse #include statement - include_info = self._get_include_info(line) - if include_info: - file_iter.switch_to_file(fpname=include_info['file']) - if include_info['as']: - as_header = '[%s]\n' % include_info['as'] - file_iter.switch_to_file( - # Aaron Fienberg - # commented out as part of python3 update - # fp=StringIO(as_header.decode('utf-8')) - fp=StringIO(as_header) - ) - continue - # strip full line comments - for prefix in self._comment_prefixes: - if line.strip().startswith(prefix): - comment_start = 0 - break - if comment_start == sys.maxsize: - comment_start = None - value = line[:comment_start].strip() - if not value: - if self._empty_lines_in_values: - # add empty line to the value, but only if there was no - # comment on the line - if (comment_start is None - and cursect is not None - and optname - and cursect[optname] is not None): - cursect[optname].append('') # newlines added at join - else: - # empty line marks end of value - indent_level = sys.maxsize - continue - # continuation line? - first_nonspace = self.NONSPACECRE.search(line) - cur_indent_level = first_nonspace.start() if first_nonspace else 0 - if (cursect is not None - and optname - and cur_indent_level > indent_level): - cursect[optname].append(value) - # a section header or option header? - else: - indent_level = cur_indent_level - # is it a section header? - mo = self.SECTCRE.match(value) - if mo: - sectname = mo.group('header') - if sectname in self._sections: - if self._strict and sectname in elements_added: - raise DuplicateSectionError(sectname, fpname, - lineno) - cursect = self._sections[sectname] - elements_added.add(sectname) - elif sectname == self.default_section: - cursect = self._defaults - else: - cursect = self._dict() - self._sections[sectname] = cursect - self._proxies[sectname] = SectionProxy(self, sectname) - elements_added.add(sectname) - # So sections can't start with a continuation line - optname = None - # no section header in the file? - elif cursect is None: - raise MissingSectionHeaderError(fpname, lineno, line) - # an option line? - else: - mo = self._optcre.match(value) - if mo: - optname, vi, optval = mo.group('option', 'vi', 'value') # pylint: disable=unused-variable - if not optname: - e = self._handle_error(e, fpname, lineno, line) - optname = self.optionxform(optname.rstrip()) - if (self._strict - and (sectname, optname) in elements_added): - raise DuplicateOptionError(sectname, optname, - fpname, lineno) - elements_added.add((sectname, optname)) - # This check is fine because the OPTCRE cannot - # match if it would set optval to None - if optval is not None: - optval = optval.strip() - cursect[optname] = [optval] - else: - # valueless option handling - cursect[optname] = None - else: - # a non-fatal parsing error occurred. set up the - # exception but keep going. the exception will be - # raised at the end of the file and will contain a - # list of all bogus lines - e = self._handle_error(e, fpname, lineno, line) - # if any parsing errors occurred, raise an exception - if e: - raise e - self._join_multiline_values() - - -def test_parse_pipeline_config(config='settings/pipeline/example.cfg'): - """Unit test for function `parse_pipeline_config`""" - # Load via PISAConfigParser - config0 = PISAConfigParser() - config0.read(config) - config0 = parse_pipeline_config(config0) - - # Load directly - config1 = parse_pipeline_config(config) - - logging.info('Keys and values found in config:') - for key, vals in config1.items(): - logging.info('%s: %s', key, vals) - assert vals == config0[key] - -def test_MutableMultiFileIterator(): - """Unit test for class `MutableMultiFileIterator`""" - import shutil - import tempfile - - prefixes = ['a', 'b', 'c'] - file_len = 4 - - reference_lines = [ - # start in file a - 'a0', 'a1', - # switch to file b after second line of a - 'b0', 'b1', - # switch to file c after second line of b - 'c0', 'c1', 'c2', 'c3', - # switch back to b after exhausting c - 'b2', 'b3', - # switch back to a after exhausting b - 'a2', 'a3' - ] - - tempdir = tempfile.mkdtemp() - try: - # Create test files - paths = [join(tempdir, prefix) for prefix in prefixes] - for prefix, path in zip(prefixes, paths): - with open(path, 'w') as f: - for i in range(file_len): - f.write('%s%d\n' % (prefix, i)) - logging.trace(path) - - actual_lines = [] - with open(paths[0]) as fp: - file_iter = MutableMultiFileIterator(fp=fp, fpname=paths[0]) - - remaining_paths = paths[1:] - - for record in file_iter: - actual_lines.append(record['line'].strip()) - logging.trace(str(record)) - if record['line'][1:].strip() == '1': - if remaining_paths: - path = remaining_paths.pop(0) - file_iter.switch_to_file(fpname=path) - else: - for l in str(file_iter.location).split('\n'): - logging.trace(l) - except: - shutil.rmtree(tempdir) - raise - - if actual_lines != reference_lines: - raise ValueError('<< FAIL : test_MutableMultiFileIterator >>') - - logging.info('<< PASS : test_MutableMultiFileIterator >>') - - -def parse_args(): - """Parse command line arguments""" - parser = ArgumentParser( - description='Print contents of a parsed config file', - formatter_class=ArgumentDefaultsHelpFormatter, - ) - parser.add_argument( - 'pipeline', metavar='CONFIGFILE', - nargs='?', - default='settings/pipeline/example.cfg', - help='Pipeline config file to parse', - ) - parser.add_argument( - '-v', - action='count', - default=Levels.WARN, - help='Set verbosity level', - ) - kwargs = vars(parser.parse_args()) - set_verbosity(kwargs.pop('v')) - return kwargs - - -if __name__ == '__main__': - test_parse_pipeline_config(**parse_args()) diff --git a/pisa/utils/cross_sections.py b/pisa/utils/cross_sections.py deleted file mode 100644 index 1553706a5..000000000 --- a/pisa/utils/cross_sections.py +++ /dev/null @@ -1,674 +0,0 @@ -#!/usr/bin/env python - -""" -Define CrossSections class for importing, working with, and storing neutrino -cross sections -""" - - -from __future__ import absolute_import, division - -from copy import deepcopy -import os - -import numpy as np -from scipy.interpolate import interp1d - -from pisa.utils.comparisons import recursiveEquality -from pisa.utils.fileio import expand, from_file, to_file -from pisa.utils.flavInt import ALL_NUFLAVINTS, FlavIntData, NuFlavIntGroup -from pisa.utils.log import logging, set_verbosity -from pisa.utils.resources import find_resource - - -__all__ = ['CrossSections', 'manual_test_CrossSections'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: make class for groups of CX or just a function for finding eisting -# versions in a json file; eliminate the optional ver parameters in -# CrossSections class methods - - -class CrossSections(FlavIntData): - """Cross sections for each neutrino flavor & interaction type ("flavint"). - What is stored are *PER-H2O-MOLECULE* cross sections, in units of [m^2]. - - Be careful when using these; cross sections are often plotted in the - literature as per-nucleon and per-energy with units [10^-38 cm^2 / GeV]. - - ver : string - Version of cross sections to load from file. E.g. 'genie_2.6.4' - - energy : None or array of float - Energies at which cross sections are defined. - - xsec : string, dictonary, or another CrossSections object - If str: provides PISA resource name from which to load cross sections - If dict or CrossSections object: construct cross sections from a - deepcopy of that object - """ - def __init__(self, ver=None, energy=None, - xsec='cross_sections/cross_sections.json'): - super().__init__() - self.energy = energy - self._ver = ver - self._interpolants = {} - if xsec is None: - pass - elif isinstance(xsec, dict): - xsec = deepcopy(xsec) - elif isinstance(xsec, str): - assert self.energy is None - self.energy, xsec = self.load(fpath=xsec, ver=ver) - else: - raise TypeError('Unhandled xsec type passed in arg: ' + - str(type(xsec))) - if xsec is not None: - super().validate(xsec) - self.validate_xsec(self.energy, xsec) - self.update(xsec) - self._define_interpolant() - - @staticmethod - def load(fpath, ver=None, **kwargs): - """Load cross sections from a file locatable and readable by the PISA - from_file command. If `ver` is provided, it is used to index into the - top level of the loaded dictionary""" - all_xsec = from_file(fpath, **kwargs) - if ver not in all_xsec: - raise ValueError('Version "%s" not found. Valid versions in file' - '"%s" are: %s' % (ver, fpath, all_xsec.keys())) - return all_xsec[ver]['energy'], all_xsec[ver]['xsec'] - - @staticmethod - def load_root_file(fpath, ver, tot_sfx='_tot', o_sfx='_o16', h_sfx='_h1', - plt_sfx='_plot'): - """Load cross sections from root file, where graphs are first-level in - hierarchy. This is yet crude and not very flexible, but at least it's - recorded here for posterity. - - Requires ROOT and ROOT python module be installed - - Parameters - ---------- - fpath : string - Path to ROOT file - ver : string - Necessary to differentaite among different file formats that Ken - has sent out - tot_sfx : string (default = '_tot') - Suffix for finding total cross sections in ROOT file (if these - fields are found, the oxygen/hydrogen fields are skipped) - o_sfx : string (default = '_o16') - Suffix for finding oxygen-16 cross sections in ROOT file - h_sfx : string (default = '_h1') - Suffix for finding hydrogen-1 cross sections in ROOT file - plt_sfx : string (default = '_plt') - Suffix for plots containing cross sections per GeV in ROOT file - - Returns - ------- - xsec : :class:`pisa.utils.flavInt.FlavIntData` - Object containing the loaded cross sections - """ - import ROOT - - def extractData(f, key): - """Extract x and y info from (already-opened) ROOT TFile.""" - try: - g = ROOT.gDirectory.Get(key) - x = np.array(g.GetX()) - y = np.array(g.GetY()) - except AttributeError: - raise ValueError('Possibly missing file "%s" or missing key' - ' "%s" within that file?' % (f, key)) - return x, y - - rfile = ROOT.TFile(fpath) # pylint: disable=no-member - try: - energy = None - xsec = FlavIntData() - for flavint in ALL_NUFLAVINTS: - if ver == 'genie_2.6.4': - # Expected to contain xsect per atom; summing 2*Hydrogen - # and 1*Oxygen yields total cross section for water - # molecule. - # Format as found in, e.g., "genie_2.6.4_simplified.root" - key = str(flavint) + o_sfx - o16_e, o16_xs = extractData(rfile, key) - - key = str(flavint) + h_sfx - h1_e, h1_xs = extractData(rfile, key) - - tot_xs = h1_xs*2 + o16_xs*1 - assert np.alltrue(h1_e == o16_e) - ext_e = o16_e - - elif ver == 'genie_2.8.6': - # Expected to contain xsect-per-nucleon-per-energy, so - # multiplying by energy and by # of nucleons (18) yields - # cross sections per molecule. - # Format as found in, e.g., "genie_2.8.6_simplified.root" - key = str(flavint) + plt_sfx - ext_e, fract_xs = extractData(rfile, key) - tot_xs = fract_xs * ext_e * 18 - - else: - raise ValueError('Invalid or not implemented `ver`: "%s"' - % ver) - if energy is None: - energy = ext_e - - assert np.alltrue(ext_e == energy) - - # Note that units in the ROOT files are [1e-38 cm^2] but PISA - # requires units of [m^2], so this conversion is made here. - xsec[flavint] = tot_xs * 1e-38 * 1e-4 - finally: - rfile.Close() - - CrossSections.validate_xsec(energy, xsec) - - return energy, xsec - - @classmethod - def new_from_root(cls, fpath, ver, **kwargs): - """Instantiate a new CrossSections object from ROOT file. - - Parameters - ---------- - fpath : string - PISA resource specification for location of ROOT file - ver : string - Specify the version name of the cross sections loaded - **kwargs - Passed to method load_root_file() - - Returns - ------- - Instantiated CrossSections object - """ - energy, xsec = CrossSections.load_root_file(fpath, ver=ver, **kwargs) - return cls(energy=energy, xsec=xsec, ver=ver) - - @staticmethod - def validate_xsec(energy, xsec): - """Validate cross sections""" - # TODO: different validation based on cross sections version string - - # Make sure the basics are present - xsec = FlavIntData(xsec) - - ## No NaN's - assert not np.any(np.isnan(energy)) - # Energy spans at least 1-100 GeV - assert np.min(energy) <= 1 - assert np.max(energy) >= 100 - - # All event flavints need to be present - for k in ALL_NUFLAVINTS: - # Uses "standard" PISA indexing scheme - x = xsec[k] - # Arrays are same lengths - assert len(x) == len(energy) - # No NaN's - assert np.sum(np.isnan(x)) == 0 - # Max xsec/energy value is in range for units of [m^2/GeV] - assert np.max(x/energy) < 40e-42, np.max(x/energy) - - def set_version(self, ver): - """Set the cross sections version to the string `ver`.""" - self._ver = ver - - def get_version(self): - """Return the cross sections version string""" - return self._ver - - def save(self, fpath, ver=None, **kwargs): # pylint: disable=arguments-differ - """Save cross sections (and the energy specification) to a file at - `fpath`.""" - if ver is None: - if self._ver is None: - raise ValueError( - 'Either a ver must be specified in call to `save` or it ' - 'must have been set prior to the invocation of `save`.' - ) - ver = self._ver - else: - assert ver == self._ver - - try: - fpath = find_resource(fpath) - except IOError: - pass - fpath = os.path.expandvars(os.path.expanduser(fpath)) - all_xs = {} - # Get any existing data from file - if os.path.exists(fpath): - all_xs = from_file(fpath) - # Validate existing data by instantiating objects from each - for v, d in all_xs.items(): - CrossSections(ver=v, energy=d['energy'], xsec=d['xsec']) - if ver in all_xs: - logging.warning('Overwriting existing version "' + ver + - '" in file ' + fpath) - all_xs[ver] = {'xsec':self, 'energy':self.energy} - to_file(all_xs, fpath, **kwargs) - - def get_xs_value(self, flavintgroup, energy): - """Get (combined) cross section value (in units of m^2) for - `flavintgroup` at `energy` (in units of GeV). - - Parameters - ---------- - flavintgroup : NuFlavIntGroup or convertible thereto - energy : numeric or sequence thereof - Energy (or energies) at which to evaluate total cross section, in - units of GeV - - Returns - ------- - Combined cross section for flavor/interaction types in units of - m^2, evaluated at each energy. Shape of returned value matches that of - passed `energy` parameter. - """ - flavintgroup = NuFlavIntGroup(flavintgroup) - if flavintgroup not in self._interpolants: - self._define_interpolant(flavintgroup=flavintgroup) - return self._interpolants[flavintgroup](energy) - - def get_xs_ratio_value(self, flavintgroup0, flavintgroup1, energy, - gamma=0): - """Get ratio of combined cross sections for `flavintgroup0` to combined - cross sections for `flavintgroup1`, weighted by E^{-`gamma`}. - - Parameters - ---------- - flavintgroup0, flavintgroup1 : NuFlavIntGroup or convertible thereto - energy : numeric or sequence thereof - Energy (or energies) at which to evaluate total cross section, in - units of GeV - - Returns - ------- - Ratio of combined cross sections flavintgroup0 / flavintgroup1 - evaluated at each energy. Shape of returned value matches that of - passed `energy` parameter. - """ - flavintgroup0 = NuFlavIntGroup(flavintgroup0) - flavintgroup1 = NuFlavIntGroup(flavintgroup1) - - self._define_interpolant(flavintgroup=flavintgroup0) - self._define_interpolant(flavintgroup=flavintgroup1) - - xs_ratio_vals = self._interpolants[flavintgroup0](energy) / \ - self._interpolants[flavintgroup1](energy) - # Special case to avoid multiplying by array of ones - if gamma == 0: - return xs_ratio_vals - return xs_ratio_vals * energy**(-gamma) - - def _define_interpolant(self, flavintgroup=None): - """If `flavintgroup` is None, compute all (separate) flavint - interpolants; otherwise, compute interpolant for specified - `flavintgroup`. Do not re-compute if already present. - """ - if flavintgroup is None: - flavintgroups = [NuFlavIntGroup(fi) for fi in self.flavints] - else: - flavintgroups = [NuFlavIntGroup(flavintgroup)] - - for fig in flavintgroups: - if fig in self._interpolants: - continue - combined_xs = self._combine_xs(fig) - self._interpolants[fig] = interp1d( - x=self.energy, y=combined_xs, kind='linear', copy=False, - bounds_error=True, fill_value=0 - ) - - def _combine_xs(self, flavintgroup): - """Combine all cross sections specified by the flavints in - `flavintgroup`. All CC and NC interactions are separately grouped - together and averaged, then the average of each interaction type - is added to the other. - - If CC and NC interactions are present, they *must* be from the same - flavor(s). I.e., it doesn't make sense (and so causes an exception) if - you combine numu CC with numubar NC. It does make sense if you combine - numu and numubar CC with numu and numubar NC, though, and this is - allowed. - - Notes - ----- - Does not yet implement *Ngen/spectrum-weighted* averages, which are - necessary when combining cross sections of disparate flavor/interaction - types from different Monte Carlo simulation runs. - """ - flavintgroup = NuFlavIntGroup(flavintgroup) - # Trivial case: nothing to combine - if len(flavintgroup.flavints) == 1: - return self[flavintgroup.flavints[0]] - - cc_flavints = flavintgroup.cc_flavints - nc_flavints = flavintgroup.nc_flavints - if cc_flavints and nc_flavints: - assert flavintgroup.cc_flavs == flavintgroup.nc_flavs, \ - 'Combining CC and NC but CC flavors do not match NC flavors' - cc_avg_xs = 0 - if cc_flavints: - logging.trace('cc_flavints = %s' % (cc_flavints,)) - cc_avg_xs = np.sum([self[k] for k in cc_flavints], axis=0) \ - / len(cc_flavints) - nc_avg_xs = 0 - if nc_flavints: - logging.trace('nc_flavints = %s' % (nc_flavints,)) - nc_avg_xs = np.sum([self[k] for k in nc_flavints], axis=0) \ - / len(nc_flavints) - tot_xs = cc_avg_xs + nc_avg_xs - logging.trace('mean(tot_xs) = %s' % (np.mean(tot_xs),)) - return tot_xs - - def get_xs_ratio_integral(self, flavintgroup0, flavintgroup1, e_range, - gamma=0, average=False): - """Energy-spectrum-weighted integral of (possibly a ratio of) - (possibly-combined) flavor/interaction type cross sections. - - Parameters - ---------- - flavintgroup0 : NuFlavIntGroup or convertible thereto - Flavor(s)/interaction type(s) for which to combine cross sections - for numerator of ratio - flavintgroup1 : None, NuFlavIntGroup or convertible thereto - Flavor(s)/interaction type(s) for which to combine cross sections - for denominator of ratio. If None is passed, the denominator of - the "ratio" is effectively 1. - e_range - Range of energy over which to integrate (GeV) - gamma : float >= 0 - Power law spectral index used for weighting the integral, - E^{-`gamma`}. Note that `gamma` should be >= 0. - average : bool - If True, return the average of the cross section (ratio) - If False, return the integral of the cross section (ratio) - - See also - -------- - See _combine_xs for detals on how flavints are combined. - """ - e_min = min(e_range) - e_max = max(e_range) - - assert e_min > 0, '`e_range` must lie strictly above 0' - assert e_max > e_min, \ - 'max(`e_range`) must be strictly larger than min(`e_range`)' - assert gamma >= 0, '`gamma` must be >= 0' - - if flavintgroup1 is None: - flavintgroups = [NuFlavIntGroup(flavintgroup0)] - else: - flavintgroups = [NuFlavIntGroup(flavintgroup0), - NuFlavIntGroup(flavintgroup1)] - - # Create interpolant(s) (to get xs at energy range's endpoints) - for fg in flavintgroups: - self._define_interpolant(flavintgroup=fg) - - all_energy = self._interpolants[flavintgroups[0]].x - xs_data = [self._interpolants[fg].y for fg in flavintgroups] - - for xd in xs_data: - logging.trace('mean(xs_data) = %e' % np.mean(xd)) - - # Get indices of data points within the specified energy range - idx = (all_energy > e_min) & (all_energy < e_max) - - # Get xsec at endpoints - xs_endpoints = [self._interpolants[fg]((e_min, e_max)) - for fg in flavintgroups] - - for ep in xs_endpoints: - logging.trace('xs_emin = %e, xs_emax = %e' % (ep[0], ep[1])) - - # Attach endpoints - energy = np.concatenate([[e_min], all_energy[idx], [e_max]]) - xs = [np.concatenate([[ep[0]], xsd[idx], [ep[1]]]) - for ep, xsd in zip(xs_endpoints, xs_data)] - - if len(xs) == 1: - xs = xs[0] - else: - xs = xs[0] / xs[1] - - # Weight xsec (or ratio) by energy spectrum - if gamma == 0: - wtd_xs = xs - else: - wtd_xs = xs*energy**(-gamma) - - logging.trace('mean(wtd_xs) = %e' % np.mean(wtd_xs)) - - # Integrate via trapezoidal rule - wtd_xs_integral = np.trapz(y=wtd_xs, x=energy) - - logging.trace('wtd_xs_integral = %e' % wtd_xs_integral) - - # Need to divide by integral of the weight function (over the same - # energy interval as wtd_xs integral was computed) to get the average - if average: - if gamma == 0: - # Trivial case - xs_average = wtd_xs_integral / (e_max - e_min) - else: - # Otherwise use trapezoidal rule to approximate integral - xs_average = wtd_xs_integral / \ - np.trapz(y=energy**(-gamma), x=energy) #* (e_max-e_min) - logging.trace('xs_average = %e' %(xs_average)) - return xs_average - - return wtd_xs_integral - - #def get_xs_integral(self, flavintgroup, e_range, gamma=0, average=False): - # """Energy-spectrum-weighted integral or average of (possibly-combined) - # flavor/interaction type cross section. - - # Parameters - # ---------- - # flavintgroup : NuFlavIntGroup or convertible thereto - # Flavor(s)/interaction type(s) for which to combine cross sections - # e_range - # Range of energy over which to integrate (GeV) - # gamma : float >= 0 - # Power law spectral index used for weighting the integral, - # E^{-`gamma`}. Note that `gamma` should be >= 0. - # average : bool - # True: return the average of the cross section over `e_range` - # False: return the integral of the cross section over `e_range` - - # of flavints specfied in `flavintgroup`; if `gamma` specified, weight - # integral by simulated spectrum with that power-spectral index - # (i.e.: E^{-gamma}). - # - # Specifying `average`=True yields the weighted-average of cross section. - - # See also - # -------- - # See _combine_xs for detals on how flavints are combined. - # """ - # return self.get_xs_ratio_integral( - # flavintgroup0=flavintgroup, flavintgroup1=None, - # e_range=e_range, gamma=gamma, average=average - # ) - - def plot(self, save=None): - """Plot cross sections per GeV; optionally, save plot to file. Requires - matplotlib and optionally uses seaborn to set "pretty" defaults. - - save : None, str, or dict - If None, figure is not saved (default) - If a string, saves figure as that name - If a dict, calls pyplot.savefig(**save) (i.e., save contains - keyword args to savefig) - """ - import matplotlib.pyplot as plt - - if self._ver is None: - leg_ver = '' - else: - leg_ver = self._ver + '\n' - leg_fs = 11 - figsize = (9, 6) - alpha = 1.0 - f = plt.figure(figsize=figsize) - f.clf() - ax1 = f.add_subplot(121) - ax2 = f.add_subplot(122) - ls = [dict(lw=5, ls='-'), - dict(lw=2, ls='-'), - dict(lw=1, ls='--'), - dict(lw=5, ls='-'), - dict(lw=3, ls='-.'), - dict(lw=1, ls='-')] - - energy = self.energy - nc_n = cc_n = 0 - for flavint in list(ALL_NUFLAVINTS.particles) + \ - list(ALL_NUFLAVINTS.antiparticles): - # Convert from [m^2] to [1e-38 cm^2] - xs = self[flavint] * 1e38 * 1e4 - if flavint.cc: - ax1.plot(energy, xs/energy, - alpha=alpha, - label='$%s$' % flavint.flav.tex, - **ls[cc_n%len(ls)]) - cc_n += 1 - else: - ax2.plot(energy, xs/energy, - alpha=alpha, - label='$%s$' % flavint.flav.tex, - **ls[nc_n%len(ls)]) - nc_n += 1 - - l1 = ax1.legend(title=leg_ver + - r'$\nu+{\rm H_2O}$, total CC', - fontsize=leg_fs, frameon=False, ncol=2) - l2 = ax2.legend(title=leg_ver + - r'$\nu+{\rm H_2O}$, total NC', - fontsize=leg_fs, frameon=False, ncol=2) - - for (ax, leg) in [(ax1, l1), (ax2, l2)]: - ax.set_xlim(0.1, 100) - ax.set_xscale('log') - ax.set_xlabel(r'$E_\nu\,{\rm [GeV]}$') - ax.set_ylabel( - r'$\sigma(E_\nu)/E_\nu\quad ' + - r'\left[10^{-38} \mathrm{cm^2} \mathrm{GeV^{-1}}\right]$' - ) - leg.get_title().set_fontsize(leg_fs) - plt.tight_layout() - - if isinstance(save, str): - logging.info('Saving cross sections plots to file "%s"', save) - f.savefig(save) - elif isinstance(save, dict): - logging.info('Saving cross sections plots via `figure.save(**%s)`', save) - f.savefig(**save) - - -def manual_test_CrossSections(outdir=None): - """Unit tests for CrossSections class""" - from shutil import rmtree - from tempfile import mkdtemp - - remove_dir = False - if outdir is None: - remove_dir = True - outdir = mkdtemp() - - try: - # "Standard" location of cross sections file in PISA; retrieve 2.6.4 for - # testing purposes - pisa_xs_file = 'cross_sections/cross_sections.json' - xs = CrossSections(ver='genie_2.6.4', xsec=pisa_xs_file) - - # Location of the root file to use (not included in PISA at the moment) - #test_dir = expand(os.path.join('/tmp', 'pisa_tests', 'cross_sections')) - #root_xs_file = os.path.join(test_dir, 'genie_2.6.4_simplified.root') - try: - root_xs_file = find_resource( - os.path.join( - #'tests', 'data', 'xsec', 'genie_2.6.4_simplified.root' - 'cross_sections', 'genie_xsec_H2O.root' - ) - ) - except Exception: - root_xs_file = None - - # Make sure that the XS newly-imported from ROOT match those stored in - # PISA - if root_xs_file: - xs_from_root = CrossSections.new_from_root(root_xs_file, ver='genie_2.6.4') - logging.info( - 'Found and loaded ROOT source cross sections file %s', root_xs_file - ) - assert xs_from_root.allclose(xs, rtol=1e-7) - - # Check XS ratio for numu_cc to numu_cc + numu_nc (user must inspect) - kg0 = NuFlavIntGroup('numu_cc') - kg1 = NuFlavIntGroup('numu_nc') - logging.info( - r'\int_1^80 xs(numu_cc) E^{-1} dE = %e', - xs.get_xs_ratio_integral(kg0, None, e_range=[1, 80], gamma=1) - ) - logging.info( - '(int E^{-gamma} * (sigma_numu_cc)/int(sigma_(numu_cc+numu_nc)) dE)' - ' / (int E^{-gamma} dE) = %e', - xs.get_xs_ratio_integral(kg0, kg0+kg1, e_range=[1, 80], gamma=1, - average=True) - ) - # Check that XS ratio for numu_cc+numu_nc to the same is 1.0 - int_val = xs.get_xs_ratio_integral(kg0+kg1, kg0+kg1, e_range=[1, 80], - gamma=1, average=True) - if not recursiveEquality(int_val, 1): - raise ValueError('Integral of nc + cc should be 1.0; get %e' - ' instead.' % int_val) - - # Check via plot that the - - # Plot all cross sections stored in PISA xs file - try: - alldata = from_file(pisa_xs_file) - xs_versions = alldata.keys() - for ver in xs_versions: - xs = CrossSections(ver=ver, xsec=pisa_xs_file) - xs.plot(save=os.path.join( - outdir, 'pisa_' + ver + '_nuxCCNC_H2O_cross_sections.pdf' - )) - except ImportError as exc: - logging.debug('Could not plot; possible that matplotlib not' - 'installed. ImportError: %s', exc) - - finally: - if remove_dir: - rmtree(outdir) - - -if __name__ == "__main__": - set_verbosity(1) - manual_test_CrossSections() diff --git a/pisa/utils/data_proc_params.py b/pisa/utils/data_proc_params.py deleted file mode 100644 index d8526b516..000000000 --- a/pisa/utils/data_proc_params.py +++ /dev/null @@ -1,651 +0,0 @@ -#!/usr/bin/env python - -""" -DataProcParams class for importing, working with, and storing data processing -parameters (e.g., PINGU's V5 processing). -""" - - -from __future__ import absolute_import, division - -from collections.abc import Mapping, Sequence -from collections import OrderedDict -from copy import deepcopy -import os -import re - -import h5py -# Note that the form of the numpy import is intentional, so that cuts -- which -# are exectuted with `eval` -- will have access to numpy's namespace without -# explicit reference to numpy. It's a hack, but it works well. -from numpy import * # pylint: disable=wildcard-import, unused-wildcard-import, redefined-builtin -import numpy # pylint: disable=unused-import -import numpy as np # pylint: disable=reimported - -from pisa.utils import jsons -from pisa.utils.flavInt import NuFlav, IntType, FlavIntData -from pisa.utils.log import logging -from pisa.utils import resources - - -__all__ = ['MULTI_PART_FIELDS', 'NU_PDG_CODES', 'DataProcParams'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -MULTI_PART_FIELDS = [ - 'I3MCTree', -] - -NU_PDG_CODES = [-12, 12, -14, 14, -16, 16] - - -class DataProcParams(dict): - """Class for importing, working with, and storing data processing - parameters. - - Implements cutting and particle identification (PID) functionality that can - be applied to MC/data that have the specified verion of processing applied - to it. - - Parameters - ---------- - data_proc_params : string or dict - If string: looks for the corresponding JSON resource (file) and loads - the contents as a data_proc_params dict - If dict: taken to be data_proc_params dict - The data_proc_params dict must follow the format described below. - detector : string - Converted to lower-case string which must be a detector key in - data_proc_params dict - proc_ver - Converted to lower-case string which must be a proc_ver key in - data_proc_params dict - - Notes - ----- - All information describing the processing version is loaded from a JSON - file with the following defined format: - - Note that the following common cuts are defined in this class and so - needn't be defined in the JSON file: - '1' : Select particles - '-1' : Select anti-particles - 'cc' : Select charged-current (CC) interactions - 'nc' : Select neutral-current (NC) interactions - 'true_upgoing_zen' : Select true-upgoing events by zenith angle - 'true_upgoing_coszen' : Select true-upgoing events by cos(zenith) angle - - data_proc_params dictionary format (and same for corresponding JSON file):: - - { - # Specify the detector name, lower case - - "": { - - - # Specify the processing version, lower case - # Examples in PINGU include "4", "5", and "5.1" - - "": { - - - # Mapping from standard names to path where these can be found in - # source HDF5 file; separate HDF5 path nodes with a forward-slash. - # - # Fields that cuts or particles in the "cuts"/"pid" sections below - # require (e.g., "cuts_step_1" for PINGU v5 processing), must be - # added here so the code knows how to extract the info from the - # source HDF5 file. - # - # Outputting a PID field to the destination PISA HDF5 file will *not* - # be done if the "pid" field is omitted below. - # - # In addition to the below-named fields, "true_coszen" and - # "reco_coszen" are generated from the data from the "true_zenith" - # and "reco_zenith" fields, respectively. So any of those fields can - # be used via the aforementioned names. - - "field_map": { - "run": "", - "nu_code": "", - "true_energy": "", - "true_zenith": "", - "reco_energy": "", - "reco_zenith": "", - "one_weight": "", - "generator_volume": "", - "generator_radius": "", - "detection_length": "", - "interaction_type": "", - "azimuth_min": "", - "azimuth_max": "", - "zenith_min": "", - "zenith_max": "", - "energy_log_min": "", - "energy_log_max": "", - "num_events_per_file": "", - "sim_spectral_index": "", - "pid": "", - }, - - - # Mapping from file's nu code to PDG nu codes (only necessary if - # nu_code values are not the PDG codes listed below) - - "nu_code_to_pdg_map": { - "": 12, - "": -12, - "": 14, - "": -14, - "": 16, - "": -16 - }, - - - # Specify standard cuts - - "cuts": { - - - # Cut name; "bjrej" and "analysis" listed here are just example - # names for cuts one might specify - - "bgrej": { - - # Which of the fields in the field_map (and the derived fields - # such as true_coszen and reco_coszen) are required for this cut? - - "fields": ["", "", ... ], - - # Expression for an event to pass the cut (not get thrown away); - # see below for details on specifying an expression - - "pass_if": "" - }, - - "analysis": { - "fields": ["", "", ... ], - "pass_if": "" - }, - - "": { - "fields": ["", "", ... ], - "pass_if": "" - } - }, - - - # Particle identification section - - "pid": { - - - # Name of the particle (case-insensitive); e.g., in PINGU this - # would be "trck" or "cscd" - - "": { - - - # Which of the fields in the field_map (and the derived fields - # such as true_coszen and reco_coszen) are required for this cut? - - "field": [, , ...], - - - # Expression for an event to be classified as this type of - # particle; # see below for details on specifying an expression - - "criteria": "" - } - - "": { - "field": [, , ...], - "criteria": "" - } - } - } - } - } - - Note that cuts "pass_if" and pid "criteria" expressions can make use of the - numpy namespace and have access to any columns extracted from the source - HDF5 file, by the standardized names given in the "field_map". For example, - if the following "fields" are specified for a cut in the data_proc_params - dict: - ["cuts_step_1", "cuts_step_2"] - then the following is a valid "pass_if" expression: - "(reco_zenith > pi/2) & (cuts_step_1 == 1) & (cuts_step_2 == 1)" - - """ - def __init__(self, detector, proc_ver, data_proc_params=None): - super().__init__() - if data_proc_params is None: - data_proc_params = 'events/data_proc_params.json' - if isinstance(data_proc_params, str): - ps = jsons.from_json(resources.find_resource(data_proc_params)) - elif isinstance(data_proc_params, dict): - ps = data_proc_params - else: - raise TypeError('Unhandled data_proc_params type passed in arg: ' + - type(data_proc_params)) - self.detector = detector - self.proc_ver = str(proc_ver) - self.det_key = [k for k in ps.keys() - if k.lower() == self.detector.lower()][0] - for key in ps[self.det_key].keys(): - lk = key.lower() - lpv = self.proc_ver.lower() - if lk == lpv or ('v'+lk == lpv) or (lk == 'v'+lpv): - self.procver_key = key - # This works for PINGU - elif ('msu_'+lk == lpv) or (lk == 'msu_'+lpv): - self.procver_key = key - elif ('nbi_'+lk == lpv) or (lk == 'nbi_'+lpv): - self.procver_key = key - # Generalising for DeepCore and different selections - ps = ps[self.det_key][self.procver_key] - self.update(ps) - - self.trans_nu_code = False - if 'nu_code_to_pdg_map' in self: - self.trans_nu_code = True - try: - self.nu_code_to_pdg_map = { - int(code): pdg - for code, pdg in self['nu_code_to_pdg_map'].items() - } - except: - self.nu_code_to_pdg_map = self['nu_code_to_pdg_map'] - - # NOTE: the keys are strings so the particular string formatting is - # important for indexing into the dict! - - # Add generic cuts - self['cuts'].update({ - # Cut for particles only (no anti-particles) - str(NuFlav(12).bar_code).lower(): - {'fields': ['nu_code'], 'pass_if': 'nu_code > 0'}, - # Cut for anti-particles only (no particles) - str(NuFlav(-12).bar_code).lower(): - {'fields': ['nu_code'], 'pass_if': 'nu_code < 0'}, - # Cut for charged-current interactions only - str(IntType('cc')).lower(): - {'fields': ['interaction_type'], - 'pass_if': 'interaction_type == 1'}, - # Cut for neutral-current interactions only - str(IntType('nc')).lower(): - {'fields': ['interaction_type'], - 'pass_if': 'interaction_type == 2'}, - # True-upgoing cut usinng the zenith field - 'true_upgoing_zen': - {'fields': ['true_zenith'], 'pass_if': 'true_zenith > pi/2'}, - # True-upgoing cut usinng the cosine-zenith field - 'true_upgoing_coszen': - {'fields': ['true_coszen'], 'pass_if': 'true_coszen < 0'}, - }) - - # Enforce rules on cuts: - self.validate_cut_spec(self['cuts']) - - @staticmethod - def validate_cut_spec(cuts): - """Validate a cut specification dictionary""" - for cutname, cutspec in cuts.items(): - # Cut names are lower-case strings with no surrounding whitespace - assert isinstance(cutname, str) - assert cutname == cutname.lower() - assert cutname == cutname.strip() - # Has appropriate keys (and no extra) - assert len(cutspec) == 2 - assert 'fields' in cutspec - assert 'pass_if' in cutspec - assert not isinstance(cutspec['fields'], str) - # 'fields' contains a sequence - assert hasattr(cutspec['fields'], '__iter__') and \ - not isinstance(cutspec['fields'], str) - # 'pass_if' contains a string - assert isinstance(cutspec['pass_if'], str) - - @staticmethod - def validate_pid_spec(pids): - """Validate a PID specification dictionary""" - for particle_name, pidspec in pids.items(): - # Particle names are lower-case strings with no surrounding - # whitespace - assert isinstance(particle_name, str) - assert particle_name == particle_name.lower() - assert particle_name == particle_name.strip() - # Has appropriate keys (and no extra) - assert len(pidspec) == 2 - assert 'fields' in pidspec - assert 'criteria' in pidspec - assert not isinstance(pidspec['fields'], str) - # 'fields' contains a sequence - assert hasattr(pidspec['fields'], '__iter__') and \ - not isinstance(pidspec['fields'], str) - # 'criteria' contains a string - assert isinstance(pidspec['criteria'], str) - - # TODO: prefix the field names with e.g. "$" such that anything that is - # _not_ prefixed by this is not replaced. This allows for righer - # expresssions (but also dangerous things...). - @staticmethod - def retrieve_expression(h5group, expression): - """Retrieve data from an HDF5 group `h5group` according to - `expresssion`. This can apply expressions with simple mathematical - operators and numpy functions to multiple fields within the HDF5 file - to derive the output. Python keywords are _not_ allowed, since they - may alias with a name. - - Refer to any numpy functions by prefixing with either "np." or - "numpy.". In order to specify division, spaces must surround the - forward slash, such that it isn't interpreted as a path. - - Nodes in the HDF5 hierarchy are separated by forward slashes ("/") in a - path spec. We restrict valid HDF5 node names to contain the characters - a-z, A-Z, 0-9, peroids ("."), and underscores ("_"). with the - additional restriction that the node name must not start with a period - or a number, and a path cannot start with a slash. - - - Parameters - ---------- - h5group : h5py Group - expression : string - Expression to evaluate. - - Returns - ------- - result : result of evaluating `expression` - - Examples - -------- - >>> retrieve_expression('np.sqrt(MCneutrino/x**2 + MCneutrino/y**2)') - - Indexing into the data arrays can also be performed, and numpy masks - used as usual: - - >>> expr = 'I3MCTree/energy[I3MCTree/event == I3EventHeader[0] - - """ - h5path_re = re.compile( - r''' - ([a-z_] # First character must be letter or underscore - [a-z0-9_.]* # 0 or more legal chars: letters, numbers, _, . - (?: # (Do not return the following group separately) - [/]{0,1} # Next character CAN be no or 1 front-slash - [a-z0-9_.]+ # But a slash *must* be followed by legal chars - )* # Slash+chars pattern might not occur, or repeat - )''', re.VERBOSE | re.IGNORECASE - ) - numpy_re = re.compile(r'^(np|numpy)\.[a-z_.]+', re.IGNORECASE) - - eval_str = expression - intermediate_data = {} - for h5path in h5path_re.findall(expression): - if numpy_re.match(h5path): - continue - intermediate_data[h5path] = DataProcParams.retrieve_node_data( - h5group, h5path - ) - eval_str = eval_str.replace(h5path, - "intermediate_data['%s']"%h5path) - - try: - result = eval(eval_str) # pylint: disable=eval-used - except: - logging.error('`expression` "%s" was translated into `eval_str`' - ' "%s" and failed to evaluate.', - expression, eval_str) - raise - - return result - - @staticmethod - def retrieve_node_data(h5group, address, allow_missing=False): - """Retrieve data from an HDF5 group `group` at address `address`. - Levels of hierarchy are separated by forward-slashes ('/'). - - See h5py for further details on specifying a valid `address`. - """ - subgroup = h5group - for sub_addy in address.split('/'): - try: - subgroup = subgroup[sub_addy] - except KeyError: - if allow_missing: - return None - raise - return subgroup - - @staticmethod - def populate_global_namespace(h5group, field_map, allow_missing=False): - """Populate the Python global namespace with variables named as the - keys in `field_map` and values loaded from the `h5group` at addresses - specified by the corresponding values in `field_map`. - """ - for var, h5path in field_map.items(): - try: - value = DataProcParams.retrieve_node_data( - h5group, h5path, allow_missing=False - ) - except KeyError: - if allow_missing: - return None - raise - globals()[var] = value - - # TODO: make the following behave like `retrieve_expression` method which - # does not rely on populating globals (just a dict, the name of which gets - # substituted in where approprite to the expression) to work. - @staticmethod - def cut_bool_idx(h5group, cut_fields, keep_criteria): - """Return numpy boolean indexing for data in `h5group` given a cut - specified using `cut_fields` in the `h5group` and evaluation criteria - `keep_criteria` - - Parameters - ---------- - h5group : h5py node/entity - cut_fields : field_map dict - keep_criteria : string - - Returns - ------- - bool_idx : numpy array (1=keep, 0=reject) - - """ - DataProcParams.populate_global_namespace(h5group, cut_fields) - bool_idx = eval(keep_criteria) # pylint: disable=eval-used - return bool_idx - - def get_data(self, h5, run_settings=None, flav=None): - """Get data attached to an HDF5 node, returned as a dictionary. - - The returned dictionary's keys match those in the field_map and the - dict's values are the data from the HDF5's nodes found at the addresses - specified as values in the field_map - - Parameters - ---------- - file_type : string, one of {'mc', 'data'} - - """ - not_fields_in_data = ['I3MCWeightDict', 'PrimaryNu', 'trueNeutrino'] - myfile = False - try: - if isinstance(h5, str): - myfile = True - h5 = h5py.File(os.path.expandvars(os.path.expanduser(h5)), - mode='r') - data = OrderedDict() - for name, path in self['field_map'].items(): - datum = self.retrieve_expression(h5, path) - path_parts = path.split('/') - if (file_type == 'data' and 'I3MCWeightDict' in path_parts - or 'PrimaryNu' in path_parts or 'trueNeutrino' in path_parts): - continue - - if path_parts[0] == 'I3MCTree' and path_parts[-1] != 'Event': - evts = self.retrieve_node_data( - h5, '/'.join(path_parts[:-1] + ['Event']) - ) - pdgs = self.retrieve_node_data( - h5, '/'.join(path_parts[:-1] + ['pdg_encoding']) - ) - energies = self.retrieve_node_data( - h5, '/'.join(path_parts[:-1] + ['energy']) - ) - - # Looping here is ugly and slow, but people don't make the - # Event field unique, so the only thing you can count on is - # that if the event number changes in sequence, you're in a - # different Event (for now, I think). The actual Event - # number can be repeated elsewhere, though. - # - # This makes for wonderfully reproducible results. - # - new_datum = [] - this_evt = np.nan - this_d = None - for d, evt, pdg, egy in zip(datum, evts, pdgs, energies): - if evt != this_evt: - if this_d is not None: - new_datum.append(this_d) - this_egy = -np.inf - this_d = None - this_evt = evt - if egy > this_egy and pdg in NU_PDG_CODES: - this_egy = egy - this_d = d - if this_d is not None: - new_datum.append(this_d) - datum = new_datum - - data[name] = np.array(datum) - - finally: - if myfile and isinstance(h5, h5py.File): - try: - h5.close() - except: # TODO: specify exception type(s)! - pass - - self.interpret_data(data) - # TODO: enable consistency checks here & implement in run_settings - #if run_settings is not None: - # run_settings.consistency_checks(data, flav=flav) - - # TODO: implement flav filtering (or not? or more advanced filtering?) - return data - - def interpret_data(self, data): - """Perform mappings from non-standard to standard values (such as - translating non-PDG neutrino flavor codes to PDG codes) and add - fields expected to be useful (such as coszen, derived from zen fields). - - Attach / reattach the translated/new fields to the `data` object passed - into this methd. - - """ - for k, v in data.items(): - if isinstance(v, Sequence): - data[k] = v[0] - - if self.trans_nu_code: - data['nu_code'] = [ - self.nu_code_to_pdg_map[code] for code in data['nu_code'] - ] - if 'true_zenith' in data: - data['true_coszen'] = np.cos(data['true_zenith']) - if 'reco_zenith' in data: - data['reco_coszen'] = np.cos(data['reco_zenith']) - return data - - @staticmethod - def subselect(data, fields, indices=None): - if isinstance(data, FlavIntData): - outdata = FlavIntData() - for flavint in data.flavints: - outdata[flavint] = DataProcParams.subselect(data[flavint], - fields=fields, - indices=indices) - elif isinstance(data, Mapping): - if indices is None: - return {k:v for k, v in data.items() if k in fields} - return {k:v[indices] for k, v in data.items() if k in fields} - - def apply_cuts(self, data, cuts, boolean_op='&', return_fields=None): - """Perform `cuts` on `data` and return a dict containing - `return_fields` from events that pass the cuts. - - Parameters - ---------- - data : single-level dict or FlavIntData object - cuts : string or dict, or sequence thereof - boolean_op : string - return_fields : string or sequence thereof - """ - if isinstance(data, FlavIntData): - outdata = FlavIntData() - for flavint in data.flavints: - outdata[flavint] = self.apply_cuts( - data[flavint], cuts=cuts, boolean_op=boolean_op, - return_fields=return_fields - ) - return outdata - - if isinstance(cuts, (str, dict)): - cuts = [cuts] - - # Default is to return all fields - if return_fields is None: - return_fields = data.keys() - - # If no cuts specified, return all data from specified fields - if len(cuts) == 0: - return self.subselect(data, return_fields) - - cut_strings = set() - cut_fields = set() - for cut in cuts: - if isinstance(cut, dict): - self.validate_cut_spec(cut) - elif cut.lower() in self['cuts']: - cut = self['cuts'][cut.lower()] - else: - raise Exception('Unrecognized or invalid cut: "'+str(cut)+'"') - cut_strings.add(cut['pass_if']) - cut_fields.update(cut['fields']) - - # Combine cut criteria strings together with boolean operation - cut_string = boolean_op.join(['('+cs+')' for cs in cut_strings]) - - # Load the fields necessary for the cut into the global namespace - for field in set(cut_fields): - globals()[field] = data[field] - - # Evaluate cuts, returning a boolean array - try: - bool_idx = eval(cut_string) # pylint: disable=eval-used - except: - logging.error('Failed to evaluate `cut_string` "%s"', cut_string) - raise - - # Return specified (or all) fields, indexed by boolean array - return {f:np.array(data[f])[bool_idx] for f in return_fields} diff --git a/pisa/utils/fileio.py b/pisa/utils/fileio.py deleted file mode 100644 index c89f12a42..000000000 --- a/pisa/utils/fileio.py +++ /dev/null @@ -1,572 +0,0 @@ -""" -Generic file I/O, dispatching specific file readers/writers as necessary -""" - - -from __future__ import absolute_import - -import errno -from functools import reduce -import operator -import os -import pickle -import re - -import numpy as np - -from pisa.utils import hdf -from pisa.utils import jsons -from pisa.utils import log -from pisa.utils import resources - - -__all__ = [ - 'PKL_EXTS', - 'CFG_EXTS', - 'ZIP_EXTS', - 'TXT_EXTS', - 'XOR_EXTS', - 'NSORT_RE', - 'UNSIGNED_FSORT_RE', - 'SIGNED_FSORT_RE', - 'expand', - 'mkdir', - 'get_valid_filename', - 'nsort', - 'nsort_key_func', - 'fsort', - 'find_files', - 'from_cfg', - 'from_pickle', - 'to_pickle', - 'from_file', - 'to_file', -] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -PKL_EXTS = ['pickle', 'pckl', 'pkl', 'p'] -CFG_EXTS = ['ini', 'cfg'] -ZIP_EXTS = ['bz2'] -TXT_EXTS = ['txt', 'dat'] -XOR_EXTS = ['xor'] - -NSORT_RE = re.compile(r'(\d+)') -UNSIGNED_FSORT_RE = re.compile( - r''' - ( - (?:\d+(?:\.\d*){0,1}) # Digit(s) followed by opt. "." and opt. digits - |(?:\.\d+) # Or starts with "." and must have digits after - (?:e[+-]?\d+){0,1} # Opt.: followed by exponent: e12, e-12, e+0, etc. - ) - ''', - re.IGNORECASE | re.VERBOSE -) -SIGNED_FSORT_RE = re.compile( - r''' - ( - [+-]{0,1} # Optional sign - (?:\d+(?:\.\d*){0,1}) # Digit(s) followed by opt. "." and opt. digits - |(?:\.\d+) # Or starts with "." but must have digits after - (?:e[+-]?\d+){0,1} # Opt.: exponent: e12, e-12, e+0, etc. - ) - ''', - re.IGNORECASE | re.VERBOSE -) - - -def expand(path, exp_user=True, exp_vars=True, absolute=False, resolve_symlinks=False): - """Convenience function for expanding a path - - Parameters - ---------- - path : string - Path to be expanded. - - exp_vars : bool - Expand the string using environment variables. E.g. - "$HOME/${vardir}/xyz" will have "$HOME" and "${vardir}$" replaced by - the values stored in "HOME" and "vardir". - - exp_user : bool - Expand special home dir spec character, tilde: "~". - - absolute : bool - Make a relative path (e.g. "../xyz") absolute, referenced from system - root directory, "/dir/sbudir/xyz". - - resolve_symlinks : bool - Resolve symlinks to the paths they refer to - - Returns - ------- - exp_path : string - Expanded path - - """ - if exp_vars: - path = os.path.expandvars(path) - if exp_user: - path = os.path.expanduser(path) - if absolute: - path = os.path.abspath(path) - if resolve_symlinks: - path = os.path.realpath(path) - return path - - -def check_file_exists(fname, overwrite=True, warn=True): - """See if a file exists, warning, raising an exception, or doing neither if - it already exists. - - Note that while this function can warn or raise an exception indicating the - file will be overwritten, this function does not actually overwrite any - files. - - Parameters - ---------- - fname : string - File name or path to try to find. - - overwrite : bool - Whether it's okay for the file to be overwritten if it exists. Note - that this function does not actually overwrite the file. - - warn : bool - Whether to warn the user that the file will be overwritten if it - exists. Note that this function does not actually overwrite the file. - - Returns - ------- - fpath : string - Expanded path of the `fname` passed in. - - """ - fpath = expand(fname) - if os.path.exists(fpath): - if overwrite: - if warn: - log.logging.warning("Overwriting file at '%s'", fpath) - else: - raise Exception("Refusing to overwrite path '%s'" % fpath) - return fpath - - -def mkdir(d, mode=0o0750, warn=True): - """Simple wrapper around os.makedirs to create a directory but not raise an - exception if the dir already exists - - Parameters - ---------- - d : string - Directory path - mode : integer - Permissions on created directory; see os.makedirs for details. - warn : bool - Whether to warn if directory already exists. - - """ - try: - os.makedirs(d, mode=mode) - except OSError as err: - if err.errno == errno.EEXIST: - if warn: - log.logging.warning('Directory "%s" already exists', d) - else: - raise err - else: - log.logging.info('Created directory "%s"', d) - - -def get_valid_filename(s): - """Sanitize string to make it reasonable to use as a filename. - - From https://github.com/django/django/blob/master/django/utils/text.py - - Parameters - ---------- - s : string - - Examples - -------- - >>> print(get_valid_filename(r'A,bCd $%#^#*!()"\' .ext ')) - 'a_bcd__.ext' - - """ - s = re.sub(r'[ ,;\t]', '_', s.strip().lower()) - return re.sub(r'(?u)[^-\w.]', '', s) - - -def nsort(l, reverse=False): - """Sort a sequence of strings containing integer number fields by the - value of those numbers, rather than by simple alpha order. Useful - for sorting e.g. version strings, etc.. - - Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments - - Parameters - ---------- - l : sequence of strings - Sequence of strings to be sorted. - - reverse : bool, optional - Whether to reverse the sort order (True => descending order) - - Returns - ------- - sorted_l : list of strings - Sorted strings - - Examples - -------- - >>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt'] - >>> nsort(l) - ['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt'] - - See Also - -------- - fsort - Sort sequence of strings with floating-point numbers in the strings. - - """ - def _field_splitter(s): - spl = NSORT_RE.split(s) - non_numbers = spl[0::2] - numbers = [int(i) for i in spl[1::2]] - return reduce(operator.concat, zip(non_numbers, numbers)) - - return sorted(l, key=_field_splitter, reverse=reverse) - - -def nsort_key_func(s): - """Use as the `key` argument to the `sorted` function or `sort` method. - - Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments - - Examples - -------- - >>> l = ['f1.10.0.txt', 'f1.01.2.txt', 'f1.1.1.txt', 'f9.txt', 'f10.txt'] - >>> sorted(l, key=nsort_key_func) - ['f1.1.1.txt', 'f1.01.2.txt', 'f1.10.0.txt', 'f9.txt', 'f10.txt'] - - """ - spl = NSORT_RE.split(s) - key = [] - for non_number, number in zip(spl[::2], spl[1::2]): - key.append(non_number) - key.append(int(number)) - return key - - -def fsort(l, signed=True, reverse=False): - """Sort a sequence of strings with one or more floating point number fields - in using the floating point value(s) (and intervening strings are treated - as normally done). Note that + and - preceding a number are included in the - floating point value unless `signed=False`. - - Code adapted from nedbatchelder.com/blog/200712/human_sorting.html#comments - - Parameters - ---------- - l : sequence of strings - Sequence of strings to be sorted. - - signed : bool, optional - Whether to include a "+" or "-" preceeding a number in its value to be - sorted. One might specify False if "-" is used exclusively as a - separator in the string. - - reverse : bool, optional - Whether to reverse the sort order (True => descending order) - - Returns - ------- - sorted_l : list of strings - Sorted strings - - Examples - -------- - >>> l = ['a-0.1.txt', 'a-0.01.txt', 'a-0.05.txt'] - >>> fsort(l, signed=True) - ['a-0.1.txt', 'a-0.05.txt', 'a-0.01.txt'] - - >>> fsort(l, signed=False) - ['a-0.01.txt', 'a-0.05.txt', 'a-0.1.txt'] - - See Also - -------- - nsort - Sort using integer-only values of numbers; good for e.g. version - numbers, where periods are separators rather than decimal points. - - """ - if signed: - fsort_re = SIGNED_FSORT_RE - else: - fsort_re = UNSIGNED_FSORT_RE - - def _field_splitter(s): - spl = fsort_re.split(s) - non_numbers = spl[0::2] - numbers = [float(i) for i in spl[1::2]] - return reduce(operator.concat, zip(non_numbers, numbers)) - - return sorted(l, key=_field_splitter, reverse=reverse) - - - -def find_files(root, regex=None, fname=None, recurse=True, dir_sorter=nsort, - file_sorter=nsort): - """Find files by re or name recursively w/ ordering. - - Code adapted from - stackoverflow.com/questions/18282370/python-os-walk-what-order - - Parameters - ---------- - root : str - Root directory at which to start searching for files - - regex : str or re.SRE_Pattern - Only yield files matching `regex`. - - fname : str - Only yield files matching `fname` - - recurse : bool - Whether to search recursively down from the root directory - - dir_sorter - Function that takes a list and returns a sorted version of it, for - purposes of sorting directories - - file_sorter - Function as specified for `dir_sorter` but used for sorting file names - - - Yields - ------ - fullfilepath : str - basename : str - match : re.SRE_Match or None - - """ - root = expand(root) - if isinstance(regex, str): - regex = re.compile(regex) - - # Define a function for accepting a filename as a match - if regex is None: - if fname is None: - def _validfilefunc(fn): # pylint: disable=unused-argument - return True, None - else: - def _validfilefunc(fn): - if fn == fname: - return True, None - return False, None - else: - def _validfilefunc(fn): - match = regex.match(fn) - if match and (len(match.groups()) == regex.groups): - return True, match - return False, None - - if recurse: - for rootdir, dirs, files in os.walk(root, followlinks=True): - for basename in file_sorter(files): - fullfilepath = os.path.join(rootdir, basename) - is_valid, match = _validfilefunc(basename) - if is_valid: - yield fullfilepath, basename, match - for dirname in dir_sorter(dirs): - fulldirpath = os.path.join(rootdir, dirname) - for basename in file_sorter(os.listdir(fulldirpath)): - fullfilepath = os.path.join(fulldirpath, basename) - if os.path.isfile(fullfilepath): - is_valid, match = _validfilefunc(basename) - if is_valid: - yield fullfilepath, basename, match - else: - for basename in file_sorter(os.listdir(root)): - fullfilepath = os.path.join(root, basename) - #if os.path.isfile(fullfilepath): - is_valid, match = _validfilefunc(basename) - if is_valid: - yield fullfilepath, basename, match - - -def from_cfg(fname): - """Load a PISA config file""" - from pisa.utils.config_parser import PISAConfigParser - config = PISAConfigParser() - try: - config.read(fname) - except: - log.logging.error( - 'Failed to read PISA config file, `fname`="%s"', fname - ) - raise - return config - - -def from_pickle(fname): - """Load from a Python pickle file""" - try: - - # Open the file (binary) - f = open(fname, 'rb') - - # Try standard pickle load - try: - return pickle.load(f) - - # Can get encoding errors when using python3 to open pickle files - # created with python2 Handle this case - except UnicodeDecodeError: - return pickle.load(f, encoding="latin1") - - except: - log.logging.error('Failed to load pickle file, `fname`="%s"', fname) - raise - - finally: - f.close() - - -def to_pickle(obj, fname, overwrite=True, warn=True): - """Save object to a pickle file""" - check_file_exists(fname=fname, overwrite=overwrite, warn=warn) - return pickle.dump(obj, open(fname, 'wb'), protocol=pickle.HIGHEST_PROTOCOL) - - -def from_txt(fname, as_array=False): - """Load from a text (txt) file""" - try: - if as_array: - with open(fname, 'r') as f: - a = f.readlines() - a = [[float(m) for m in l.strip('\n\r').split()] for l in a] - a = np.array(a) - else: - with open(fname, 'r') as f: - a = f.read() - except: - log.logging.error('Failed to load txt file, `fname`="%s"', fname) - raise - return a - - -def to_txt(obj, fname): - """Save object to a text (txt) file""" - with open(fname, 'w') as f: - f.write(obj) - - -def from_file(fname, fmt=None, **kwargs): - """Dispatch correct file reader based on `fmt` (if specified) or guess - based on file name's extension. - - Parameters - ---------- - fname : string - File path / name from which to load data. - - fmt : None or string - If string, for interpretation of the file according to this format. If - None, file format is deduced by an extension found in `fname`. - - **kwargs - All other arguments are passed to the function dispatched to read the - file. - - Returns - ------- - Object instantiated from the file (string, dictionary, ...). Each format - is interpreted differently. - - Raises - ------ - ValueError - If extension is not recognized - - """ - if fmt is None: - rootname, ext = os.path.splitext(fname) - ext = ext.replace('.', '').lower() - else: - rootname = fname - ext = fmt.lower() - - if ext in ZIP_EXTS or ext in XOR_EXTS: - rootname, inner_ext = os.path.splitext(rootname) - inner_ext = inner_ext.replace('.', '').lower() - ext = inner_ext - - fname = resources.find_resource(fname) - if ext in jsons.JSON_EXTS: - return jsons.from_json(fname, **kwargs) - if ext in hdf.HDF5_EXTS: - return hdf.from_hdf(fname, **kwargs) - if ext in PKL_EXTS: - return from_pickle(fname, **kwargs) - if ext in CFG_EXTS: - return from_cfg(fname, **kwargs) - if ext in TXT_EXTS: - return from_txt(fname, **kwargs) - errmsg = 'File "%s": unrecognized extension "%s"' % (fname, ext) - log.logging.error(errmsg) - raise ValueError(errmsg) - - -def to_file(obj, fname, fmt=None, overwrite=True, warn=True, **kwargs): - """Dispatch correct file writer based on fmt (if specified) or guess - based on file name's extension""" - if fmt is None: - rootname, ext = os.path.splitext(fname) - ext = ext.replace('.', '').lower() - else: - rootname = fname - ext = fmt.lower() - - dirname = os.path.dirname(fname) - - os.makedirs(dirname, exist_ok=True) - - if ext in ZIP_EXTS or ext in XOR_EXTS: - rootname, inner_ext = os.path.splitext(rootname) - inner_ext = inner_ext.replace('.', '').lower() - ext = inner_ext - - if ext in jsons.JSON_EXTS: - return jsons.to_json(obj, fname, overwrite=overwrite, warn=warn, - **kwargs) - elif ext in hdf.HDF5_EXTS: - return hdf.to_hdf(obj, fname, overwrite=overwrite, warn=warn, **kwargs) - elif ext in PKL_EXTS: - return to_pickle(obj, fname, overwrite=overwrite, warn=warn, **kwargs) - elif ext in TXT_EXTS: - if kwargs: - raise ValueError('Following additional keyword arguments not' - ' accepted when writing to text file: %s' % - kwargs.keys()) - return to_txt(obj, fname) - else: - errmsg = 'Unrecognized file type/extension: ' + ext - log.logging.error(errmsg) - raise TypeError(errmsg) diff --git a/pisa/utils/fisher_matrix.py b/pisa/utils/fisher_matrix.py deleted file mode 100644 index f1d1c9751..000000000 --- a/pisa/utils/fisher_matrix.py +++ /dev/null @@ -1,676 +0,0 @@ -""" -A Fisher matrix class definition. -""" -#TODO: fix, adapt, clean up - -from __future__ import absolute_import, division - -import copy -import itertools -import json -import operator -import sys - -import numpy as np -from scipy.stats import chi2 - -from pisa import FTYPE -from pisa.utils.fileio import from_file, to_file -from pisa.utils.log import logging - - -__all__ = ['FisherMatrix'] - -__author__ = 'L. Schulte, S. Boeser, T. Ehrhardt' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def build_fisher_matrix(gradient_hist_flat_d, fiducial_hist, fiducial_params): - # fix the ordering of parameters - params = sorted(gradient_hist_flat_d.keys()) - - # find non-empty bins in flattened map - fiducial_hist_flat = fiducial_hist.nominal_values['total'].flatten() - nonempty = np.nonzero(fiducial_hist_flat) - logging.debug("Using %u non-empty bins of %u" % - (len(nonempty[0]), len(fiducial_hist_flat))) - - # get gradients as calculated above for non-zero bins - gradients = np.array( - [gradient_hist_flat_d[par][nonempty] for par in params], dtype=FTYPE - ) - - # get error estimate from best-fit bin count for non-zero bins - # TODO: these are not variances - variances = fiducial_hist['total'].std_devs.flatten()[nonempty] - - # Loop over all parameters per bin (simple transpose) and calculate Fisher - # matrix by getting the outer product of all gradients in a bin. - # Result is sum of matrix for all bins. - fmatrix = np.zeros((len(params), len(params)), dtype=FTYPE) - for bin_gradients, bin_var in zip(gradients.T, variances): - fmatrix += np.outer(bin_gradients, bin_gradients)/bin_var - - # construct the fisher matrix object - fisher = FisherMatrix( - matrix=fmatrix, - parameters=params, #order is important here! - best_fits=fiducial_params.nominal_values, # TODO: fix order (in the sense of making it definite?) - priors=None, #FIXME: support priors - ) - - return fisher, nonempty - - -def get_fisher_matrix(hypo_maker, test_vals, counter): - """Compute Fisher matrices at fiducial hypothesis given data. - """ - from pisa.utils.pull_method import get_gradients - hypo_params = hypo_maker.params.free - - #fisher = {'total': {}} - fid_hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - counter += 1 - - pmaps = {'total': {}} - gradient_maps = {'total': {}} - - for pname in hypo_params.names: - logging.trace("Computing binwise gradients for parameter '%s'." % pname) - tpm, gm = get_gradients( - param=pname, - hypo_maker=hypo_maker, - test_vals=test_vals[pname], - ) - counter += len(test_vals[pname]) - # the maps corresponding to variations of - # a single param are not flattened - pmaps['total'][pname] = tpm - # these are flattened, which is also what the - # method below assumes - gradient_maps['total'][pname] = gm - - # hypo param values are not at nominal anymore, - # but we don't use their values here - - fisher, nonempty = build_fisher_matrix( - gradient_hist_flat_d=gradient_maps['total'], - fiducial_hist=fid_hypo_asimov_dist, - fiducial_params=hypo_params - ) - return fisher, gradient_maps, fid_hypo_asimov_dist, nonempty - - -### FISHER MATRIX CLASS DEFINITION ### - -class FisherMatrix: - - def __init__(self, matrix, parameters, best_fits, priors=None, - labels=None): - """ - Construct a fisher matrix object - Arguments - --------- - matrix : len(parameters) x len(parameters) matrix or 2D array - Matrix values - parameters : sequence of str - Identifiers used for each parameter - best_fits : sequence of numbers - Best-fit values for each parameter - priors : sequence of Prior objects or None - Priors for each parameter; only accepts Gaussian or uniform priors, - otherwise raises TypeError. Note that uniform priors are - functionally equivalent to no prior. If None, uniform priors are - used for all parameters (i.e., sigma=np.inf). - labels : sequence of str or None - Pretty-print labels for the parameters. If None, use `paramaters` - strings as labels. - """ - - self.matrix = np.matrix(matrix) - self.parameters = list(parameters) - self.best_fits = list(best_fits) - if priors is None: - self.priors = [np.inf for p in self.parameters] - else: - self.priors = [self.translatePrior(prior) for prior in priors] - self.labels = list(labels) if labels is not None else parameters - - self.checkConsistency() - self.calculateCovariance() - - - @classmethod - def fromFile(cls, filename): - """ - Load a Fisher matrix from a json file - """ - - return cls(**from_file(filename)) - - - @classmethod - def fromPaPAFile(cls, filename): - """ - Load Fisher matrix from json file - """ - - loaded_dict = json.load(open(filename, 'r')) - - matrix = np.matrix(loaded_dict.pop('matrix')) - parameters = loaded_dict.pop('parameters') - best_fits = loaded_dict.pop('best_fits') - labels = loaded_dict.pop('labels') - - new_fm = cls(matrix=matrix, parameters=parameters, - best_fits=best_fits, labels=labels) - - while not len(loaded_dict)==0: - - par, prior_dict = loaded_dict.popitem() - - #self.parameters.append(par) - for value in prior_dict.itervalues(): - new_fm.addPrior(par, value) - - new_fm.checkConsistency() - new_fm.calculateCovariance() - - return new_fm - - - def __add__(self, other): - - # merge parameter lists - new_params = list(set(self.parameters+other.parameters)) - - new_best_fits = [] - new_labels = [] - for param in new_params: - try: - value = self.getBestFit(param) - lbl = self.getLabel(param) - except IndexError: - value = other.getBestFit(param) - lbl = other.getLabel(param) - - new_best_fits.append(value) - new_labels.append(lbl) - - # generate blank matrix - new_matrix = np.matrix( np.zeros((len(new_params), len(new_params))) ) - - # fill new matrix - for (i,j) in itertools.product(range(len(new_params)), range(len(new_params))): - - for summand in [self, other]: - try: - i_sum = summand.getParameterIndex(new_params[i]) - j_sum = summand.getParameterIndex(new_params[j]) - except IndexError: - continue - - new_matrix[i,j] += summand.matrix[i_sum, j_sum] - - # create new FisherMatrix object - new_object = FisherMatrix(matrix=new_matrix, parameters=new_params, - best_fits=new_best_fits, labels=new_labels) - new_object.calculateCovariance() - - # fill in priors - for par in new_object.parameters: - - for summand in [self, other]: - - try: - prior_dict = summand.getPriorDict() - except IndexError: - continue - - for par, sigma in prior_dict.items(): - new_object.addPrior(par, sigma) - - # ...and we're done! - return new_object - - - def checkConsistency(self): - """ - Check whether number of parameters matches dimension of matrix; - matrix is symmetrical; parameter names are unique; and number of - best_fits, labels, and priors all match number of parameters. - """ - - if not len(self.parameters) == np.shape(self.matrix)[1]: - raise IndexError('Number of parameters does not match dimension of Fisher matrix! [%i, %i]' \ - %(len(self.parameters), len(self.matrix)) ) - - if not np.all(self.matrix.T == self.matrix): - raise ValueError('Fisher matrix not symmetric!') - - if not len(self.parameters) == len(set(self.parameters)): - raise ValueError('Parameter names not unique! %s' \ - %(np.array2string(np.array(self.parameters))) ) - - if not len(self.parameters) == len(self.best_fits) == len(self.labels) == len(self.priors): - raise ValueError('Parameters, best_fits, labels, and priors must all have same length! (lengths = %d, %d, %d, %d)' \ - %(len(self.parameters), len(self.best_fits), len(self.labels), len(self.priors)) ) - - return True - - - def saveFile(self, filename): - """ - Write Fisher matrix to json file - """ - - dict_to_write = {} - dict_to_write['matrix'] = self.matrix - dict_to_write['parameters'] = self.parameters - dict_to_write['best_fits'] = self.best_fits - dict_to_write['labels'] = self.labels - dict_to_write['priors'] = self.priors - - to_file(dict_to_write, filename) - - - def getParameterIndex(self, par): - """ - Whether par is already existing in parameter list - """ - - if not par in self.parameters: - raise IndexError('%s not found in parameter list %s'\ - %(par, np.array2string(np.array(self.parameters)) ) ) - return self.parameters.index(par) - - - ## -> Why on earth would we ever want to do that? - def renameParameter(self, fromname, toname): - """ - Rename a parameter - """ - - idx = self.getParameterIndex(fromname) - - if toname in self.parameters[self.parameters!=fromname]: - raise ValueError('%s already in parameter list %s'\ - %(toname, np.array2string(np.array(self.parameters)) ) ) - - self.parameters[idx] = toname - - - def calculateCovariance(self): - """ - Calculate covariance matrix from Fisher matrix (i.e. invert including priors). - """ - - if np.linalg.det(self.matrix) == 0: - raise ValueError('Fisher Matrix is singular, cannot be inverted!') - - self.covariance = np.linalg.inv( - self.matrix + np.diag([1./self.getPrior(p)**2 for p in self.parameters]) - ) - - - def getBestFit(self, par): - """ - Get best fit value for given parameter - """ - - idx = self.getParameterIndex(par) - - return self.best_fits[idx] - - - def getLabel(self, par): - """ - Get pretty-print label for given parameter - """ - - idx = self.getParameterIndex(par) - - return self.labels[idx] - - - def setLabel(self, par, newlabel): - """ - Change the pretty-print label for given parameter - """ - - idx = self.getParameterIndex(par) - - self.labels[idx] = newlabel - - - def removeParameter(self, par): - """ - Remove par from Fisher matrix and recalculate covariance - """ - - idx = self.getParameterIndex(par) - - # drop from parameter, best fit, and prior list - self.parameters.pop(idx) - self.best_fits.pop(idx) - self.labels.pop(idx) - self.priors.pop(idx) - - # drop from matrix (first row, then column) - self.matrix = np.delete(np.delete(self.matrix, idx, axis=0), idx, axis=1) - - self.checkConsistency() - self.calculateCovariance() - - - @staticmethod - def translatePrior(prior): - """ - Translates a Prior object, numeric, or None to the simplistic prior - format used internally (a value for sigma). - - Arguments - --------- - prior : Prior object (gaussian or uniform), float, or None - Returns - ------- - sigma : Standard deviation of prior (np.inf for uniform Prior or None) - - """ - if np.isscalar(prior): - return float(prior) - - if prior is None: - return np.inf - - # TODO: debug following check, which fails even when types are "same"; - # multiple import of Prior? - # if not isinstance(prior, Prior): - # raise TypeError('prior must be Prior object, numeric, or None; got `%s` instead' % type(prior)) - - if prior.kind == 'uniform': - return np.inf - elif prior.kind == 'gaussian': - return prior.sigma - else: - raise TypeError('Prior object must be of either gaussian or uniform kind; got kind `'+str(prior.kind)+'` instead') - - - def setPrior(self, par, sigma): - """ - Set prior for parameter 'par' to value sigma. If sigma is None, no - prior is assumed - """ - - idx = self.getParameterIndex(par) - self.priors[idx] = sigma - self.calculateCovariance() - - - def addPrior(self, par, sigma): - """ - Add a prior of value sigma to the existing one for par (in quadrature) - """ - - idx = self.getParameterIndex(par) - self.priors[idx] = 1./np.sqrt(1./self.priors[idx]**2 + 1./sigma**2) - self.calculateCovariance() - - - def removeAllPriors(self): - """ - Remove *all* priors from this Fisher Matrix - """ - - self.priors = [np.inf for p in self.parameters] - self.calculateCovariance() - - - def getPrior(self, par): - """ - List the prior (sigma value) for par - """ - - idx = self.getParameterIndex(par) - return self.priors[idx] - - - def getPriorDict(self): - """ - List priors of all parameters (sigma values) - """ - - return dict(zip(self.parameters, self.priors)) - - - def getCovariance(self, par1, par2): - """ - Returns the covariance of par1 and par2 - """ - - # Return the respective element - idx1, idx2 = self.getParameterIndex(par1), self.getParameterIndex(par2) - return self.covariance[idx1, idx2] - - - def getVariance(self, par): - """ - Returns full variance of par - """ - - return self.getCovariance(par,par) - - - def getSigma(self, par): - """ - Returns full standard deviation of par, - marginalized over all other parameters - """ - - return np.sqrt(self.getVariance(par)) - - - def getSigmaNoPriors(self, par): - """ - Returns standard deviation of par, marginalized over all other - parameters, but ignoring priors on this parameter - """ - - idx = self.getParameterIndex(par) - - # make temporary priors with the ones corresponding to par removed - temp_priors = copy.deepcopy(self.priors) - temp_priors[idx] = np.inf - - # calculate covariance with these priors - temp_covariance = np.linalg.inv( - self.matrix + np.diag([1./s**2 for s in temp_priors]) - ) - - return np.sqrt(temp_covariance[idx,idx]) - - - def getSigmaStatistical(self, par): - """ - Returns standard deviation of par, - if all other parameters are fixed (i.e. known infinitely well) - """ - - idx = self.getParameterIndex(par) - return 1./np.sqrt(self.matrix[idx,idx]) - - - def getSigmaSystematic(self, par): - """ - Returns standard deviation of par for infinite statistics - (i.e. systematic error) - """ - - return np.sqrt(self.getSigmaNoPriors(par)**2 - - self.getSigmaStatistical(par)**2) - - - def getErrorEllipse(self, par1, par2, confLevel=0.6827): - """ - Returns a, b, tan(2 theta) of confLevel error ellipse - in par1-par2-plane with: - - a: large half axis - b: small half axis - tan(2 theta): tilt angle, has to be divided by the aspect - ratio of the actual plot before taking arctan - - Formulae taken from arXiv:0906.4123 - """ - - sigma1, sigma2 = self.getSigma(par1), self.getSigma(par2) - cov = self.getCovariance(par1, par2) - - #for this we need sigma1 > sigma2, otherwise just swap parameters - if sigma1 > sigma2: - a_sq = (sigma1**2 + sigma2**2)/2. + np.sqrt((sigma1**2 - sigma2**2)**2/4. + cov**2) - b_sq = (sigma1**2 + sigma2**2)/2. - np.sqrt((sigma1**2 - sigma2**2)**2/4. + cov**2) - else: - a_sq = (sigma2**2 + sigma1**2)/2. - np.sqrt((sigma2**2 - sigma1**2)**2/4. + cov**2) - b_sq = (sigma2**2 + sigma1**2)/2. + np.sqrt((sigma2**2 - sigma1**2)**2/4. + cov**2) - - #Note: this has weird dimensions (actual size of the plot)! - tan_2_th = 2.*cov / (sigma1**2 - sigma2**2) - - # we are dealing with a 2D error ellipse here - scaling = np.sqrt(chi2.ppf(confLevel, 2)) - - return scaling*np.sqrt(a_sq), scaling*np.sqrt(b_sq), tan_2_th - - - def getCorrelation(self, par1, par2): - """ - Returns correlation coefficient between par1 and par2 - """ - - return self.getCovariance(par1, par2)/(self.getSigma(par1)*self.getSigma(par2)) - - - def printResults(self, parameters=None, file=None): - """ - Prints statistical, systematic errors, priors, best fits - for specified (default: all) parameters - """ - - pars = parameters if parameters is not None else copy.deepcopy(self.parameters) - pars.sort() - - if file is not None: # redirect stdout - orig_stdout = sys.stdout - sys.stdout = open(file, 'w') - - param_width = max([max([len(name) for name in pars]), len('parameters')]) - header = (param_width, 'parameter', 'best fit', 'full', 'stat', 'syst', 'priors') - print('%*s %9s %9s %9s %9s %9s' %header) - print('-'*(70+param_width)) - - for par in pars: - result = (param_width, par, self.getBestFit(par), self.getSigma(par), - self.getSigmaStatistical(par), self.getSigmaSystematic(par), - self.getPrior(par)) - par_str = '%*s %10.3e %.3e %.3e %.3e %.3e'%result - par_str = par_str.replace('inf', 'free') - print(par_str) - - """ - # needed for PINGU only: - if 'hierarchy' in pars: - - # calculate proper significance according to arXiv:1305.5150 - sigma_gauss = 1./self.getSigma('hierarchy') - sigma_bin = conv_sigma_to_bin_sigma(sigma_gauss) - - print '\nSignificance of hierarchy measurement: %.2f sigma' %sigma_bin - """ - - if file is not None: # switch stdout back - sys.stdout = orig_stdout - - - def printResultsSorted(self, par, file=None, latex=False): - """ - Prints statistical, systematic errors, priors, best fits - sorted by parameter par - """ - - if file is not None: # redirect stdout - orig_stdout = sys.stdout - sys.stdout = open(file, 'w') - - if latex: - # table header - print('\\begin{tabular}{lrrrrrr} \n\\toprule') - print('Parameter & Impact & Best Fit & Full & Stat. & Syst. & Prior \\\\ \n\\midrule') - else: - param_width = max([max([len(name) for name in self.parameters]), len('parameters')]) - header = (param_width, 'parameter', 'impact [%]','best fit', 'full', 'stat', 'syst', 'priors') - - print('%*s %10s %9s %9s %9s %9s %9s' %header) - print('-'*(85+param_width)) - - sortedp = self.sortByParam(par) - - for (par, impact) in sortedp: - - # print the line - if latex: - result = (self.getLabel(par), impact, self.getBestFit(par), self.getSigma(par), - self.getSigmaStatistical(par), self.getSigmaSystematic(par), - self.getPrior(par)) - par_str = '%s & %.1f & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} & \\num{%.2e} \\\\'%result - par_str = par_str.replace('\\num{inf}', 'free') - else: - result = (param_width, par, impact, self.getBestFit(par), self.getSigma(par), - self.getSigmaStatistical(par), self.getSigmaSystematic(par), - self.getPrior(par)) - par_str = '%*s %5.1f %10.3e %.3e %.3e %.3e %.3e'%result - par_str = par_str.replace('inf', 'free') - - print(par_str) - - if latex: - # table outro - print('\\bottomrule \n\\end{tabular}') - - if file is not None: # switch stdout back - sys.stdout = orig_stdout - - - def sortByParam(self, par): - """ - Sorts the parameters by their impact on parameter par. - Relevant quantity is covariance(par,i)/sigma_i. - - Returns sorted list of (parameters, impact), par first, - then ordered descendingly by impact. - """ - - # calculate impact - impact = dict([[p, self.getCorrelation(p, par)**2 * 100] \ - for p in self.parameters]) - - # sort the dict by value - # FIXME - sorted_impact = sorted(impact.iteritems(), - key=operator.itemgetter(1), - reverse=True) - - return sorted_impact diff --git a/pisa/utils/flavInt.py b/pisa/utils/flavInt.py deleted file mode 100644 index 4d7758443..000000000 --- a/pisa/utils/flavInt.py +++ /dev/null @@ -1,2166 +0,0 @@ -#! /usr/bin/env python -# pylint: disable=global-statement - -""" -Classes for working with neutrino flavors (NuFlav), interactions types -(IntType), "flavints" (a flavor and an interaction type) (NuFlavInt), and -flavint groups (NuFlavIntGroup) in a consistent and convenient manner. - -FlavIntData class for working with data stored by flavint (flavor & -interaction type). This should replace the PISA convention of using raw -doubly-nested dictionaries indexed as [][]. For -now, FlavIntData objects can be drop-in replacements for such dictionaries -(they can be accessed and written to in the same way since FlavIntData -subclasses dict) but this should be deprecated; eventually, all direct access -of the data structure should be eliminated and disallowed by the FlavIntData -object. - -Define convenience tuples ALL_{x} for easy iteration -""" - - -# TODO: Make strings convertible to various types less liberal. E.g., I already -# converted NuFlav to NOT accept 'numucc' such that things like 'numu nue' or -# 'nu xyz mutation' would also be rejected; this should be true also for -# interaction type and possibly others I haven't thought about yet. Note that I -# achieved this using the IGNORE regex that ignores all non-alpha characters -# but asserts one and only one match to the regex (consult NuFlav for details). - -# TODO: make simple_str() method convertible back to NuFlavIntGroup, either by -# increasing the intelligence of interpret(), by modifying what simple_str() -# produces, or by adding another function to interpret simple strings. (I'm -# leaning towards the second option at the moment, since I don't see how to -# make the first interpret both a simple_str AND nue as nuecc+nuenc, and I -# don't think there's a way to know "this is a simple str" vs not easily.) - - -from __future__ import absolute_import, division - -from collections.abc import MutableSequence, MutableMapping, Mapping, Sequence -from copy import deepcopy -from functools import reduce, total_ordering -from itertools import product, combinations -from operator import add -import re - -import numpy as np - -from pisa import ureg -from pisa.utils import fileio -from pisa.utils.log import logging, set_verbosity -from pisa.utils.comparisons import recursiveAllclose, recursiveEquality - - -__all__ = [ - 'NuFlav', 'NuFlavInt', 'NuFlavIntGroup', 'FlavIntData', - 'FlavIntDataGroup', 'xlateGroupsStr', - 'flavintGroupsFromString', 'IntType', 'BarSep', 'set_bar_ssep', - 'get_bar_ssep', 'ALL_NUPARTICLES', 'ALL_NUANTIPARTICLES', - 'ALL_NUFLAVS', 'ALL_NUINT_TYPES', 'CC', 'NC', - 'NUE', 'NUEBAR', 'NUMU', 'NUMUBAR', 'NUTAU', 'NUTAUBAR', - 'ALL_NUFLAVINTS', 'ALL_NUCC', 'ALL_NUNC', - 'NUECC', 'NUEBARCC', 'NUMUCC', 'NUMUBARCC', 'NUTAUCC', 'NUTAUBARCC', - 'NUENC', 'NUEBARNC', 'NUMUNC', 'NUMUBARNC', 'NUTAUNC', 'NUTAUBARNC', -] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - -__BAR_SSEP__ = '' - - -class BarSep(object): - """ - Context manager to make global __BAR_SSEP__ modification slightly less - error-prone. - - __BAR_SSEP__ defines the separator between a flavor and the string "bar" - (to define the flavor as the antiparticle version; e.g. nuebar). Some - datastructures in PISA 2 used '_' between the two ("nue_bar") while others - did not use this. To make dealing with this (slightly) less painful, this - context manager was introduced to switch between the PISA 3 default (no - '_') and the sometimes-use '_' separator. See Examples for usage. - - Parameters - ---------- - val : string - Separator to use between flavor ("nue", "numu", "nutau") and "bar". - - Examples - -------- - >>> nuebar = NuFlav('nuebar') - >>> print(str(nuebar)) - nuebar - >>> with BarSep('_'): - ... print(nuebar) - nue_bar - >>> print(str(nuebar)) - nuebar - - """ - def __init__(self, val): - global __BAR_SSEP__ - self.old_val = __BAR_SSEP__ - self.new_val = val - - def __enter__(self): - global __BAR_SSEP__ - __BAR_SSEP__ = self.new_val - - def __exit__(self, type, value, traceback): - global __BAR_SSEP__ - __BAR_SSEP__ = self.old_val - - -def set_bar_ssep(val): - """Set the separator between "base" flavor ("nue", "numu", or "nutau") and - "bar" when converting antineutrino `NuFlav`s or `NuFlavInt`s to strings. - - Parameters - ---------- - val : string - Separator - - """ - global __BAR_SSEP__ - assert isinstance(val, str) - __BAR_SSEP__ = val - - -def get_bar_ssep(): - """Get the separator that is set to be used between "base" flavor ("nue", - "numu", or "nutau") and "bar" when converting antineutrino `NuFlav`s or - `NuFlavInt`s to strings. - - Returns - ------- - sep : string - Separator - - """ - global __BAR_SSEP__ - return __BAR_SSEP__ - - -@total_ordering -class NuFlav(object): - """Class for handling neutrino flavors (and anti-flavors)""" - PART_CODE = 1 - ANTIPART_CODE = -1 - NUE_CODE = 12 - NUMU_CODE = 14 - NUTAU_CODE = 16 - NUEBAR_CODE = -12 - NUMUBAR_CODE = -14 - NUTAUBAR_CODE = -16 - IGNORE = re.compile(r'[^a-zA-Z]') - FLAV_RE = re.compile( - r'^(?P(?:nue|numu|nutau)(?Pbar){0,1})$' - ) - def __init__(self, val): - self.fstr2code = { - 'nue': self.NUE_CODE, - 'numu': self.NUMU_CODE, - 'nutau': self.NUTAU_CODE, - 'nuebar': self.NUEBAR_CODE, - 'numubar': self.NUMUBAR_CODE, - 'nutaubar': self.NUTAUBAR_CODE - } - self.barnobar2code = { - None: self.PART_CODE, - '': self.PART_CODE, - 'bar': self.ANTIPART_CODE, - } - self.f2tex = { - self.NUE_CODE: r'{\nu_e}', - self.NUMU_CODE: r'{\nu_\mu}', - self.NUTAU_CODE: r'{\nu_\tau}', - self.NUEBAR_CODE: r'{\bar\nu_e}', - self.NUMUBAR_CODE: r'{\bar\nu_\mu}', - self.NUTAUBAR_CODE: r'{\bar\nu_\tau}', - } - # Instantiate this neutrino flavor object by interpreting val - orig_val = val - try: - if isinstance(val, str): - # Sanitize the string - sanitized_val = self.IGNORE.sub('', val.lower()) - matches = self.FLAV_RE.findall(sanitized_val) - if len(matches) != 1: - raise ValueError('Invalid NuFlav spec: "%s"' % val) - self.__flav = self.fstr2code[matches[0][0]] - self.__barnobar = self.barnobar2code[matches[0][1]] - elif isinstance(val, self.__class__): - self.__flav = val.code - self.__barnobar = np.sign(self.__flav) - elif hasattr(val, 'flav'): - self.__flav = val.flav.code - self.__barnobar = np.sign(self.__flav) - else: - if val in self.fstr2code.values(): - self.__flav = int(val) - self.__barnobar = np.sign(self.__flav) - else: - raise ValueError('Invalid neutrino flavor/code: "%s"' % - str(val)) - # Double check than flav and barnobar codes are valid - assert self.__flav in self.fstr2code.values() - assert self.__barnobar in self.barnobar2code.values() - except (AssertionError, ValueError, AttributeError): - raise ValueError('Could not interpret `val` = "%s" as %s.' - ' type(val) = %s' - % (orig_val, self.__class__.__name__, - type(orig_val))) - - def __str__(self): - global __BAR_SSEP__ - fstr = [s for s, code in self.fstr2code.items() if code == self.__flav] - fstr = fstr[0] - fstr = fstr.replace('bar', __BAR_SSEP__+'bar') - return fstr - - # TODO: copy, deepcopy, and JSON serialization - #def __copy__(self): - # return self.__str__() - - def __repr__(self): - return self.__str__() - - def __hash__(self): - return hash(self.__flav) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except Exception: - return False - return other.code == self.code - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except: - raise ValueError('Cannot compare %s to %s.' - % (other.__class__.__name__, - self.__class__.__name__)) - - my_abs_code = np.abs(self.code) - other_abs_code = np.abs(other.code) - - # A particle comes before its own antiparticle - if other_abs_code == my_abs_code: - return self.code > other.code - - # nue or nuebar < numu or numubar < nutau or nutaubar - return my_abs_code < other_abs_code - - def __neg__(self): - return NuFlav(self.__flav*-1) - - def __add__(self, other): - return NuFlavIntGroup(self, other) - - @property - def tex(self): - """TeX string""" - return self.f2tex[self.__flav] - - @property - def code(self): - """int : PDG code""" - return self.__flav - - @property - def bar_code(self): - """Return +/-1 for particle/antiparticle""" - return self.__barnobar - - @property - def particle(self): - """Is this a particle (vs. antiparticle) flavor?""" - return self.__barnobar == self.PART_CODE - - @property - def antiparticle(self): - """Is this an antiparticle flavor?""" - return self.__barnobar == self.ANTIPART_CODE - - def pidx(self, d, *args): - """Extract data from a nested dictionary `d` whose format is commonly - found in PISA - - The dictionary must have the format - d = {"": } - is one of "nue", "nue_bar", "numu", "numu_bar", "nutau", - "nutau_bar" - """ - with BarSep('_'): - field = d[str(self)] - for idx in args: - field = field[idx] - return field - - @property - def prob3_codes(self): - """(int,int) : flavor and particle/antiparticle codes, as used by prob3""" - if np.abs(self.code) == self.NUE_CODE : prob3flav = 0 - elif np.abs(self.code) == self.NUMU_CODE : prob3flav = 1 - elif np.abs(self.code) == self.NUTAU_CODE : prob3flav = 2 - prob3bar = self.bar_code - return (prob3flav,prob3bar) - - -NUE = NuFlav('nue') -NUEBAR = NuFlav('nuebar') -NUMU = NuFlav('numu') -NUMUBAR = NuFlav('numubar') -NUTAU = NuFlav('nutau') -NUTAUBAR = NuFlav('nutaubar') - -ALL_NUPARTICLES = (NUE, NUMU, NUTAU) -ALL_NUANTIPARTICLES = (NUEBAR, NUMUBAR, NUTAUBAR) -ALL_NUFLAVS = tuple(sorted(ALL_NUPARTICLES + ALL_NUANTIPARTICLES)) - - -# TODO: are the following two classes redundant now? -class AllNu(object): - def __init__(self): - self.__flav = [p for p in ALL_NUPARTICLES] - - @property - def flav(self): - return self.__flav - - def __str__(self): - return 'nuall' - - @property - def tex(self): - return r'{\nu_{\rm all}}' - - -class AllNuBar(object): - def __init__(self): - self.__flav = [p for p in ALL_NUANTIPARTICLES] - - @property - def flav(self): - return self.__flav - - def __str__(self): - return 'nuallbar' - - @property - def tex(self): - return r'{\bar\nu_{\rm all}}' - - -@total_ordering -class IntType(object): - """ - Interaction type object. - - Parameters - ---------- - val - See Notes. - - Notes - ----- - Instantiate via a `val` of: - * Numerical code: 1=CC, 2=NC - * String (case-insensitive; all characters besides valid tokens are - ignored) - * Instantiated IntType object (or any method implementing int_type.code - which returns a valid interaction type code) - * Instantiated NuFlavInt object (or any object implementing int_type - which returns a valid IntType object) - - Examples - -------- - The following, e.g., are all interpreted as charged-current IntTypes: - - >>> IntType('cc') - >>> IntType('\n\t _cc \n') - >>> IntType('numubarcc') - >>> IntType(1) - >>> IntType(1.0) - >>> IntType(IntType('cc')) - >>> IntType(NuFlavInt('numubarcc')) - - """ - CC_CODE = 1 - NC_CODE = 2 - IGNORE = re.compile(r'[^a-zA-Z]') - IT_RE = re.compile(r'^(cc|nc)$') - def __init__(self, val): - self.istr2code = { - 'cc': self.CC_CODE, - 'nc': self.NC_CODE, - } - self.i2tex = { - self.CC_CODE: r'{\rm CC}', - self.NC_CODE: r'{\rm NC}' - } - - # Interpret `val` - try: - orig_val = val - if isinstance(val, str): - sanitized_val = self.IGNORE.sub('', val.lower()) - int_type = self.IT_RE.findall(sanitized_val) - if len(int_type) != 1: - raise ValueError('Invalid IntType spec: "%s"' % val) - self.__int_type = self.istr2code[int_type[0]] - elif isinstance(val, self.__class__): - self.__int_type = val.code - elif hasattr(val, 'int_type') and hasattr(val.int_type, 'code'): - self.__int_type = val.int_type.code - else: - if val in self.istr2code.values(): - self.__int_type = int(val) - else: - raise TypeError( - '`val` = "%s" could not be converted to an %s;' - ' type(val) = %s' - % (orig_val, self.__class__.__name__, type(orig_val)) - ) - # Double check that the interaction type code set is valid - assert self.__int_type in self.istr2code.values() - except (AssertionError, TypeError, ValueError, AttributeError): - raise ValueError('Could not interpret `val` = "%s" as %s;' - ' type(val) = %s' - % (orig_val, self.__class__.__name__, - type(orig_val))) - - def __str__(self): - return [s for s, code in self.istr2code.items() - if code == self.__int_type][0] - - def __repr__(self): - return self.__str__() - - def __hash__(self): - return hash(self.__int_type) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except Exception: - return False - return other.cc == self.cc - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except: - raise ValueError('Cannot compare %s to %s.' - % (other.__class__.__name__, - self.__class__.__name__)) - return self.code < other.code - - @property - def cc(self): # pylint: disable=invalid-name - """Is this interaction type charged current (CC)?""" - return self.__int_type == self.CC_CODE - - @property - def nc(self): # pylint: disable=invalid-name - """Is this interaction type neutral current (NC)?""" - return self.__int_type == self.NC_CODE - - @property - def code(self): - """Integer code for this interaction type""" - return self.__int_type - - @property - def tex(self): - """TeX representation of this interaction type""" - return self.i2tex[self.__int_type] - - -CC = IntType('cc') -NC = IntType('nc') -ALL_NUINT_TYPES = (CC, NC) - - -@total_ordering -class NuFlavInt(object): - """A neutrino "flavint" encompasses both the neutrino flavor and its - interaction type. - - Instantiate via - * String containing a single flavor and a single interaction type - e.g.: 'numucc', 'nu_mu_cc', 'nu mu CC', 'numu_bar CC', etc. - * Another instantiated NuFlavInt object - * Two separate objects that can be converted to a valid NuFlav - and a valid IntType (in that order) - * An iterable of length two which contains such objects - * kwargs `flav` and `int_type` specifying such objects - - String specifications simply ignore all characters not recognized as a - valid token. - - """ - TOKENS = re.compile('(nu|e|mu|tau|bar|nc|cc)') - FINT_RE = re.compile( - r'(?P(?:nue|numu|nutau)' - r'(?Pbar){0,1})' - r'(?Pcc|nc){0,1}' - ) - FINT_SSEP = '_' - FINT_TEXSEP = r' \, ' - # TODO: use multiple inheritance to clean up the below? - def __init__(self, *args, **kwargs): - if kwargs: - if args: - raise TypeError('Either positional or keyword args may be' - ' provided, but not both') - keys = kwargs.keys() - if set(keys).difference(set(('flav', 'int_type'))): - raise TypeError('Invalid kwarg(s) specified: %s' % - kwargs.keys()) - flavint = (kwargs['flav'], kwargs['int_type']) - elif args: - if not args: - raise TypeError('No flavint specification provided') - elif len(args) == 1: - flavint = args[0] - elif len(args) == 2: - flavint = args - elif len(args) > 2: - raise TypeError('More than two args') - - if not isinstance(flavint, str) \ - and hasattr(flavint, '__len__') and len(flavint) == 1: - flavint = flavint[0] - - if isinstance(flavint, str): - orig_flavint = flavint - try: - flavint = ''.join(self.TOKENS.findall(flavint.lower())) - flavint_dict = self.FINT_RE.match(flavint).groupdict() - self.__flav = NuFlav(flavint_dict['fullflav']) - self.__int_type = IntType(flavint_dict['int_type']) - except (TypeError, UnboundLocalError, ValueError, AttributeError): - raise ValueError('Could not interpret `val` = "%s" as %s;' - ' type(val) = %s' - % (orig_flavint, self.__class__.__name__, - type(orig_flavint))) - elif isinstance(flavint, NuFlavInt): - self.__flav = NuFlav(flavint.flav) - self.__int_type = IntType(flavint.int_type.code) - elif hasattr(flavint, '__len__'): - assert len(flavint) == 2, \ - 'Need 2 components to define flavor and interaction type' - self.__flav = NuFlav(flavint[0]) - self.__int_type = IntType(flavint[1]) - else: - raise TypeError('Unhandled type: "' + str(type(flavint)) + - '"; class: "' + str(flavint.__class__) + - '; value: "' + str(flavint) + '"') - - def __str__(self): - return '%s%s%s' % (self.flav, self.FINT_SSEP, self.int_type) - - def __repr__(self): - return self.__str__() - - def __hash__(self): - return hash((self.flav.code, self.int_type.code)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except Exception: - return False - return (other.flav, other.int_type) == (self.flav, self.int_type) - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - if not isinstance(other, self.__class__): - try: - other = self.__class__(other) - except: - raise ValueError('Cannot compare %s to %s.' - % (other.__class__.__name__, - self.__class__.__name__)) - if self.int_type.code < other.int_type.code: - return True - if self.int_type.code == other.int_type.code: - if np.abs(self.flav.code) == np.abs(other.flav.code): - return self.flav.code > other.flav.code - if np.abs(self.flav.code) < np.abs(other.flav.code): - return True - return False - - def __neg__(self): - return NuFlavInt(-self.__flav, self.__int_type) - - def __add__(self, other): - return NuFlavIntGroup(self, other) - - def pidx(self, d, *args): - """Extract data from a nested dictionary `d` whose format is commonly - found in PISA - - The dictionary must have the format:: - - d = {"": {"": }} - is one of "nue", "nue_bar", "numu", "numu_bar", "nutau", - "nutau_bar" - is one of "cc", "nc" - - """ - - with BarSep('_'): - field = d[str(self.flav)][str(self.int_type)] - for idx in args: - field = field[idx] - return field - - @property - def flav(self): - """Return just the NuFlav part of this NuFlavInt""" - return self.__flav - - @property - def particle(self): - """Is this a particle (vs. antiparticle) flavor?""" - return self.__flav.particle - - @property - def antiparticle(self): - """Is this an antiparticle flavor?""" - return self.__flav.antiparticle - - @property - def cc(self): # pylint: disable=invalid-name - """Is this interaction type charged current (CC)?""" - return self.__int_type.cc - - @property - def nc(self): # pylint: disable=invalid-name - """Is this interaction type neutral current (NC)?""" - return self.__int_type.nc - - @property - def int_type(self): - """Return IntType object that composes this NuFlavInt""" - return self.__int_type - - @property - def tex(self): - """TeX string representation of this NuFlavInt""" - return '{%s%s%s}' % (self.flav.tex, - self.FINT_TEXSEP, - self.int_type.tex) - - -NUECC = NuFlavInt('nuecc') -NUEBARCC = NuFlavInt('nuebarcc') -NUMUCC = NuFlavInt('numucc') -NUMUBARCC = NuFlavInt('numubarcc') -NUTAUCC = NuFlavInt('nutaucc') -NUTAUBARCC = NuFlavInt('nutaubarcc') - -NUENC = NuFlavInt('nuenc') -NUEBARNC = NuFlavInt('nuebarnc') -NUMUNC = NuFlavInt('numunc') -NUMUBARNC = NuFlavInt('numubarnc') -NUTAUNC = NuFlavInt('nutaunc') -NUTAUBARNC = NuFlavInt('nutaubarnc') - - -@total_ordering -class NuFlavIntGroup(MutableSequence): - """Grouping of neutrino flavors+interaction types (flavints) - - Grouping of neutrino flavints. Specification can be via - * A single `NuFlav` object; this gets promoted to include both - interaction types - * A single `NuFlavInt` object - * String: - * Ignores anything besides valid tokens - * A flavor with no interaction type specified will include both CC - and NC interaction types - * Multiple flavor/interaction-type specifications can be made; - use of delimiters is optional - * Interprets "nuall" as nue+numu+nutau and "nuallbar" as - nuebar+numubar+nutaubar - * Iterable containing any of the above (i.e., objects convertible to - `NuFlavInt` objects). Note that a valid iterable is another - `NuFlavIntGroup` object. - """ - TOKENS = re.compile('(nu|e|mu|tau|all|bar|nc|cc)') - IGNORE = re.compile(r'[^a-zA-Z]') - FLAVINT_RE = re.compile( - r'((?:nue|numu|nutau|nuall)(?:bar){0,1}(?:cc|nc){0,2})' - ) - FLAV_RE = re.compile(r'(?P(?:nue|numu|nutau|nuall)(?:bar){0,1})') - IT_RE = re.compile(r'(cc|nc)') - def __init__(self, *args): - self.flavint_ssep = '+' - self.__flavints = [] - # Possibly a special case if len(args) == 2, so send as a single entity - # if this is the case - if len(args) == 2: - args = [args] - for a in args: - self += a - - def __add__(self, val): - flavint_list = sorted(set(self.__flavints + self.interpret(val))) - return NuFlavIntGroup(flavint_list) - - def __iadd__(self, val): - self.__flavints = sorted(set(self.__flavints + self.interpret(val))) - return self - - def __delitem__(self, idx): - self.__flavints.__delitem__(idx) - - def remove(self, value): - """Remove a flavint from this group. - - Parameters - ---------- - value : anything accepted by `interpret` method - - """ - flavint_list = sorted(set(self.interpret(value))) - for k in flavint_list: - try: - idx = self.__flavints.index(k) - except ValueError: - pass - else: - del self.__flavints[idx] - - def __sub__(self, val): - cp = deepcopy(self) - cp.remove(val) - return cp - - def __isub__(self, val): - self.remove(val) - return self - - def __setitem__(self, idx, val): - self.__flavints[idx] = val - - def insert(self, index, value): - """Insert flavint `value` before `index`""" - self.__flavints.insert(index, value) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - try: - self.__class__(other) - except Exception: - return False - return set(self) == set(other) - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - if not isinstance(other, self.__class__): - try: - self.__class__(other) - except: - raise ValueError('Cannot compare %s with %s.' - % (other.__class__.__name__, - self.__class__.__name__)) - - if len(other) != len(self): - return len(self) < len(other) - - return sorted(self.flavints)[0] < sorted(other.flavints)[0] - - def __contains__(self, val): - return all([(k in self.__flavints) for k in self.interpret(val)]) - - def __len__(self): - return len(self.__flavints) - - def __getitem__(self, idx): - return self.__flavints[idx] - - def __str__(self): - allkg = set(self.flavints) - - # Check if nuall or nuallbar CC, NC, or both - nuallcc, nuallbarcc, nuallnc, nuallbarnc = False, False, False, False - cc_flavints = NuFlavIntGroup(self.cc_flavints) - nc_flavints = NuFlavIntGroup(self.nc_flavints) - if len(cc_flavints.particles) == 3: - nuallcc = True - if len(cc_flavints.antiparticles) == 3: - nuallbarcc = True - if len(nc_flavints.particles) == 3: - nuallnc = True - if len(nc_flavints.antiparticles) == 3: - nuallbarnc = True - - # Construct nuall(bar) part(s) of string - strs = [] - if nuallcc and nuallnc: - strs.append('nuall') - for k in ALL_NUPARTICLES: - allkg.remove(NuFlavInt(k, 'cc')) - for k in ALL_NUPARTICLES: - allkg.remove(NuFlavInt(k, 'nc')) - elif nuallcc: - strs.append('nuall' + NuFlavInt.FINT_SSEP + str(CC)) - for k in ALL_NUPARTICLES: - allkg.remove(NuFlavInt(k, 'cc')) - elif nuallnc: - strs.append('nuall' + NuFlavInt.FINT_SSEP + str(NC)) - for k in ALL_NUPARTICLES: - allkg.remove(NuFlavInt(k, 'nc')) - - if nuallbarcc and nuallbarnc: - strs.append('nuallbar') - for k in ALL_NUANTIPARTICLES: - allkg.remove(NuFlavInt(k, 'cc')) - for k in ALL_NUANTIPARTICLES: - allkg.remove(NuFlavInt(k, 'nc')) - elif nuallbarcc: - strs.append('nuallbar' + NuFlavInt.FINT_SSEP + str(CC)) - for k in ALL_NUANTIPARTICLES: - allkg.remove(NuFlavInt(k, 'cc')) - elif nuallbarnc: - strs.append('nuallbar' + NuFlavInt.FINT_SSEP + str(NC)) - for k in ALL_NUANTIPARTICLES: - allkg.remove(NuFlavInt(k, 'nc')) - - # Among remaining flavints, group by flavor and combine if both CC and - # NC are present for individual flavors (i.e., eliminate the int_type - # string altogether) - for flav in ALL_NUPARTICLES + ALL_NUANTIPARTICLES: - if flav in [k.flav for k in allkg]: - cc, nc = False, False - if NuFlavInt(flav, 'cc') in allkg: - cc = True - if NuFlavInt(flav, 'nc') in allkg: - nc = True - if cc and nc: - strs.append(str(flav)) - allkg.remove(NuFlavInt(flav, 'cc')) - allkg.remove(NuFlavInt(flav, 'nc')) - elif cc: - strs.append(str(NuFlavInt(flav, 'cc'))) - allkg.remove(NuFlavInt(flav, 'cc')) - elif nc: - strs.append(str(NuFlavInt(flav, 'nc'))) - allkg.remove(NuFlavInt(flav, 'nc')) - return self.flavint_ssep.join(strs) - - def __repr__(self): - return self.__str__() - - # TODO: - # Technically, since this is a mutable type, the __hash__ method shouldn't - # be implemented as this will allow for "illegal" behavior, like using - # a NuFlavIntGroup as a key in a dict. So this should be fixed, maybe. - #__hash__ = None - def __hash__(self): - return hash(tuple(self.__flavints)) - - @staticmethod - def interpret(val): - """Interpret a NuFlavIntGroup arg""" - if isinstance(val, str): - orig_val = val - try: - flavints = [] - orig_val = val - - # Eliminate anything besides valid tokens - val = NuFlavIntGroup.IGNORE.sub('', val.lower()) - #val = ''.join(NuFlavIntGroup.TOKENS.findall(val)) - - # Find all flavints specified - allflavints_str = NuFlavIntGroup.FLAVINT_RE.findall(val) - # Remove flavints - val = NuFlavIntGroup.FLAVINT_RE.sub('', val) - - for flavint_str in allflavints_str: - match = NuFlavIntGroup.FLAV_RE.match(flavint_str) - flav = match.groupdict()['fullflav'] - - # A flavint found above can include 'all' which is actually - # three different flavors - if 'all' in flav: - flavs = [flav.replace('all', x) - for x in ('e', 'mu', 'tau')] - else: - flavs = [flav] - - ints = sorted(set( - NuFlavIntGroup.IT_RE.findall(flavint_str) - )) - - # If flavint_str does not include 'cc' or 'nc', include both - if not ints: - ints = ['cc', 'nc'] - - # Add all combinations of (flav, int) found in this - # flavint_str - flavints.extend([''.join(fi) - for fi in product(flavs, ints)]) - - except (ValueError, AttributeError): - raise ValueError('Could not interpret `val` = "%s" as %s;' - ' type(val) = %s' - % (orig_val, NuFlavIntGroup, type(orig_val))) - - elif isinstance(val, NuFlav): - flavints = [NuFlavInt((val, 'cc')), NuFlavInt((val, 'nc'))] - elif isinstance(val, NuFlavInt): - flavints = [val] - elif isinstance(val, NuFlavIntGroup): - flavints = list(val.flavints) - elif np.isscalar(val): - flavints = [val] - elif val is None: - flavints = [] - elif hasattr(val, '__len__'): - flavints = [] - # Treat length-2 iterables as special case, in case the two - # elements can form a single NuFlavInt. - if len(val) == 2: - try_again = True - try: - # Start with counter-hypothesis: that the two elements of - # `val` can form two valid, independent NuFlavInts... - k1 = NuFlavIntGroup.interpret(val[0]) - k2 = NuFlavIntGroup.interpret(val[1]) - if k1 and k2: - # Success: Two independent NuFlavInts were created - try_again = False - flavints.extend(k1) - flavints.extend(k2) - except (UnboundLocalError, ValueError, AssertionError, - TypeError): - pass - if try_again: - # If the two elements of the iterable did not form two - # NuFlavInts, try forming a single NuFlavInt with `val` - flavints = [NuFlavInt(val)] - else: - # If 1 or >2 elements in `val`, make a flavint out of each - for x in val: - flavints.extend(NuFlavIntGroup.interpret(x)) - else: - raise Exception('Unhandled val: ' + str(val) + ', class ' - + str(val.__class__) + ' type ' + str(val)) - - flavint_list = [] - for k in flavints: - try: - nk = NuFlavInt(k) - flavint_list.append(nk) - except TypeError: - # If NuFlavInt failed, try NuFlav; if this fails, give up. - flav = NuFlav(k) - flavint_list.append(NuFlavInt((flav, 'cc'))) - flavint_list.append(NuFlavInt((flav, 'nc'))) - return flavint_list - - @property - def flavints(self): - """Return tuple of all NuFlavInts that make up this group""" - return tuple(self.__flavints) - - @property - def flavs(self): - """Return tuple of unique flavors that make up this group""" - return tuple(sorted(set([k.flav for k in self.__flavints]))) - - @property - def cc_flavints(self): - """Return tuple of unique charged-current-interaction NuFlavInts that - make up this group""" - return tuple([k for k in self.__flavints - if k.int_type == CC]) - - @property - def nc_flavints(self): - """Return tuple of unique neutral-current-interaction NuFlavInts that - make up this group""" - return tuple([k for k in self.__flavints - if k.int_type == NC]) - - @property - def particles(self): - """Return tuple of unique particle (vs antiparticle) NuFlavInts that - make up this group""" - return tuple([k for k in self.__flavints if k.particle]) - - @property - def antiparticles(self): - """Return tuple of unique antiparticle NuFlavInts that make up this - group""" - return tuple([k for k in self.__flavints if k.antiparticle]) - - @property - def cc_flavs(self): - """Return tuple of unique charged-current-interaction flavors that - make up this group. Note that only the flavors, and not NuFlavInts, are - returned (cf. method `cc_flavints`""" - return tuple(sorted(set([k.flav for k in self.__flavints - if k.int_type == CC]))) - - @property - def nc_flavs(self): - """Return tuple of unique neutral-current-interaction flavors that - make up this group. Note that only the flavors, and not NuFlavInts, are - returned (cf. method `nc_flavints`""" - return tuple(sorted(set([k.flav for k in self.__flavints - if k.int_type == NC]))) - - #def unique_flavs(self): - # """Return tuple of unique flavors that make up this group""" - # return tuple(sorted(set([k.flav for k in self.__flavints]))) - - def group_flavs_by_int_type(self): - """Return a dictionary with flavors grouped by the interaction types - represented in this group. - - The returned dictionary has format:: - - { - 'all_int_type_flavs': [, , ...], - 'cc_only_flavs': [, , ...], - 'nc_only_flavs': [, , ...], - } - - where the lists of NuFlav objects are mutually exclusive - """ - uniqueF = self.flavs - fint_d = {f: set() for f in uniqueF} - for k in self.flavints: - fint_d[k.flav].add(k.int_type) - grouped = { - 'all_int_type_flavs': [], - 'cc_only_flavs': [], - 'nc_only_flavs': [] - } - for f in uniqueF: - if len(fint_d[f]) == 2: - grouped['all_int_type_flavs'].append(f) - elif list(fint_d[f])[0] == CC: - grouped['cc_only_flavs'].append(f) - else: - grouped['nc_only_flavs'].append(f) - return grouped - - def __simple_str(self, flavsep, intsep, flavintsep, addsep, func): - grouped = self.group_flavs_by_int_type() - all_nu = AllNu() - all_nubar = AllNuBar() - for k, v in grouped.items(): - if all([f in v for f in all_nubar.flav]): - for f in all_nubar.flav: - grouped[k].remove(f) - grouped[k].insert(0, all_nubar) - if all([f in v for f in all_nu.flav]): - for f in all_nu.flav: - grouped[k].remove(f) - grouped[k].insert(0, all_nu) - all_s = flavsep.join([func(f) for f in grouped['all_int_type_flavs']]) - cc_only_s = flavsep.join([func(f) for f in grouped['cc_only_flavs']]) - nc_only_s = flavsep.join([func(f) for f in grouped['nc_only_flavs']]) - strs = [] - if all_s: - if not cc_only_s and not nc_only_s: - strs.append(all_s) - else: - strs.append(all_s + intsep + func(CC) + addsep + func(NC)) - if cc_only_s: - strs.append(cc_only_s + intsep + func(CC)) - if nc_only_s: - strs.append(nc_only_s + intsep + func(NC)) - return flavintsep.join(strs) - - def simple_str(self, flavsep='+', intsep=' ', flavintsep=', ', - addsep='+'): - """Simple string representation of this group""" - return self.__simple_str(flavsep=flavsep, intsep=intsep, - flavintsep=flavintsep, addsep=addsep, func=str) - - def file_str(self, flavsep='_', intsep='_', flavintsep='__', addsep=''): - """String representation for this group useful for file names""" - return self.__simple_str(flavsep=flavsep, intsep=intsep, - flavintsep=flavintsep, addsep=addsep, func=str) - - def simple_tex(self, flavsep=r' + ', intsep=r' \, ', - flavintsep=r'; \; ', addsep=r'+'): - """Simplified TeX string reperesentation of this group""" - return self.__simple_str( - flavsep=flavsep, intsep=intsep, - flavintsep=flavintsep, addsep=addsep, func=lambda x: x.tex - ) - - @property - def tex(self): - """TeX string representation for this group""" - return self.simple_tex() - - @property - def unique_flavs_tex(self): - """TeX string representation of the unique flavors present in this - group""" - return ' + '.join([f.tex for f in self.flavs]) - - -ALL_NUFLAVINTS = NuFlavIntGroup('nuall,nuallbar') -ALL_NUCC = NuFlavIntGroup('nuall_cc,nuallbar_cc') -ALL_NUNC = NuFlavIntGroup('nuall_nc,nuallbar_nc') - - -class FlavIntData(dict): - """Container class for storing data for each NuFlavInt. - - Parameters - ---------- - val : string, dict, or None - Data with which to populate the hierarchy. - - If string, interpret as PISA resource and load data from it - If dict, populate data from the dictionary - If None, instantiate with None for all data - - The interpreted version of `val` must be a valid data structure: A - dict with keys 'nue', 'numu', 'nutau', 'nue_bar', 'numu_bar', and - 'nutau_bar'; and each item corresponding to these keys must itself be a - dict with keys 'cc' and 'nc'. - - Notes - ----- - Accessing data (both for getting and setting) is fairly flexible. It uses - dict-like square-brackets syntax, but can accept any object (or two - objects) that are convertible to a NuFlav or NuFlavInt object. In the - former case, the entire flavor dictionary (which includes both 'cc' and - 'nc') is returned, while in the latter case whatever lives at the node is - returned. - - Initializing, setting and getting data in various ways: - - >>> fi_dat = FlavIntData() - >>> fi_dat['nue', 'cc'] = 1 - >>> fi_dat['nuenc'] = 2 - >>> fi_dat['numu'] = {'cc': 'cc data...', 'nc': 'nc data...'} - >>> fi_dat[NuFlav(16), IntType(1)] == 4 - - >>> fi_dat['nuecc'] == 1 - True - >>> fi_dat['NUE_NC'] == 2 - True - >>> fi_dat['nu_e'] == {'cc': 1, 'nc': 2} - True - >>> fi_dat['nu mu cc'] == 'cc data...' - True - >>> fi_dat['nu mu'] == {'cc': 'cc data...', 'nc': 'nc data...'} - True - >>> fi_dat['nutau cc'] == 4 - True - - """ - def __init__(self, val=None): - super().__init__() - if isinstance(val, str): - d = self.__load(val) - elif isinstance(val, dict): - d = val - elif val is None: - # Instantiate empty FlavIntData - with BarSep('_'): - d = {str(f): {str(it): None for it in ALL_NUINT_TYPES} - for f in ALL_NUFLAVS} - else: - raise TypeError('Unrecognized `val` type %s' % type(val)) - self.validate(d) - self.update(d) - - @staticmethod - def _interpret_index(idx): - if not isinstance(idx, str) and hasattr(idx, '__len__') \ - and len(idx) == 1: - idx = idx[0] - with BarSep('_'): - try: - nfi = NuFlavInt(idx) - return [str(nfi.flav), str(nfi.int_type)] - except (AssertionError, ValueError, TypeError): - try: - return [str(NuFlav(idx))] - except: - raise ValueError('Invalid index: %s' %str(idx)) - - def __getitem__(self, *args): - assert len(args) <= 2 - key_list = self._interpret_index(args) - tgt_obj = super().__getitem__(key_list[0]) - if len(key_list) == 2: - tgt_obj = tgt_obj[key_list[1]] - return tgt_obj - - def __setitem__(self, *args): - assert len(args) > 1 - item, value = args[:-1], args[-1] - key_list = self._interpret_index(item) - if len(key_list) == 1: - self.__validate_inttype_dict(value) - value = self.__translate_inttype_dict(value) - tgt_obj = self - for key in key_list[:-1]: - tgt_obj = dict.__getitem__(tgt_obj, key) - dict.__setitem__(tgt_obj, key_list[-1], value) - - def __eq__(self, other): - """Recursive, exact equality""" - return recursiveEquality(self, other) - - @staticmethod - def __basic_validate(fi_container): - for flavint in ALL_NUFLAVINTS: - with BarSep('_'): - f = str(flavint.flav) - it = str(flavint.int_type) - assert isinstance(fi_container, dict), "container must be of" \ - " type 'dict'; instead got %s" % type(fi_container) - assert f in fi_container, "container missing flavor '%s'" % f - assert isinstance(fi_container[f], dict), \ - "Child of flavor '%s': must be type 'dict' but" \ - " got %s instead" % (f, type(fi_container[f])) - assert it in fi_container[f], \ - "Flavor '%s' sub-dict must contain a both interaction" \ - " types, but missing (at least) int_type '%s'" % (f, it) - - @staticmethod - def __validate_inttype_dict(d): - assert isinstance(d, MutableMapping), \ - "Value must be an inttype (sub-) dict if you only specify a" \ - " flavor (and not an int type) as key" - keys = d.keys() - assert (len(keys) == 2) and \ - ([str(k).lower() for k in sorted(keys)] == ['cc', 'nc']), \ - "inttype (sub-) dict must contain exactly 'cc' and 'nc' keys" - - @staticmethod - def __translate_inttype_dict(d): - for key in d.keys(): - if not isinstance(key, str) or key.lower() != key: - val = d.pop(key) - d[str(key).lower()] = val - return d - - def __load(self, fname, **kwargs): - d = fileio.from_file(fname, **kwargs) - self.validate(d) - return d - - @property - def flavs(self): - """tuple of NuFlav : all flavors present""" - return tuple(sorted([NuFlav(k) for k in self.keys()])) - - @property - def flavints(self): - """tuple of NuFlavInt : all flavints present""" - fis = [] - for flav in self.keys(): - for int_type in self[flav].keys(): - fis.append(NuFlavInt(flav, int_type)) - return tuple(sorted(fis)) - - def allclose(self, other, rtol=1e-05, atol=1e-08): - """Returns True if all data structures are equal and all numerical - values contained are within relative (rtol) and/or absolute (atol) - tolerance of one another. - """ - return recursiveAllclose(self, other, rtol=rtol, atol=atol) - - def validate(self, fi_container): - """Perform basic validation on the data structure""" - self.__basic_validate(fi_container) - - def save(self, fname, **kwargs): - """Save data structure to a file; see fileio.to_file for details""" - fileio.to_file(self, fname, **kwargs) - - def id_dupes(self, rtol=None, atol=None): - """Identify flavints with duplicated data (exactly or within a - specified tolerance), convert these NuFlavInt's into NuFlavIntGroup's - and returning these along with the data associated with each. - - Parameters - ---------- - rtol - Set to positive value to use as rtol argument for numpy allclose - atol - Set to positive value to use as atol argument for numpy allclose - - If either `rtol` or `atol` is 0, exact equality is enforced. - - Returns - ------- - dupe_flavintgroups : list of NuFlavIntGroup - A NuFlavIntGroup object is returned for each group of NuFlavInt's - found with duplicate data - dupe_flavintgroups_data : list of objects - Data associated with each NuFlavIntGroup in dupe_flavintgroups. - Each object in `dupe_flavintgroups_data` corresponds to, and in the - same order as, the objects in `dupe_flavintgroups`. - """ - exact_equality = True - kwargs = {} - if rtol is not None and rtol > 0 and atol != 0: - exact_equality = False - kwargs['rtol'] = rtol - if atol is not None and atol > 0 and rtol != 0: - exact_equality = False - kwargs['atol'] = atol - if exact_equality: - cmpfunc = recursiveEquality - else: - cmpfunc = lambda x, y: recursiveAllclose(x, y, **kwargs) - - dupe_flavintgroups = [] - dupe_flavintgroups_data = [] - for flavint in self.flavints: - this_datum = self[flavint] - match = False - for n, group_datum in enumerate(dupe_flavintgroups_data): - if len(this_datum) != len(group_datum): - continue - if cmpfunc(this_datum, group_datum): - dupe_flavintgroups[n] += flavint - match = True - break - if not match: - dupe_flavintgroups.append(NuFlavIntGroup(flavint)) - dupe_flavintgroups_data.append(this_datum) - - sort_inds = np.argsort(dupe_flavintgroups) - dupe_flavintgroups = [dupe_flavintgroups[i] for i in sort_inds] - dupe_flavintgroups_data = [dupe_flavintgroups_data[i] - for i in sort_inds] - - return dupe_flavintgroups, dupe_flavintgroups_data - - -class FlavIntDataGroup(dict): - """Container class for storing data for some set(s) of NuFlavIntGroups - (cf. FlavIntData, which stores one datum for each NuFlavInt separately) - - Parameters - ---------- - val: None, str, or dict - Data with which to populate the hierarchy - flavint_groups: None, str, or iterable - User-defined groupings of NuFlavIntGroups. These can be specified - in several ways. - - None - If val == None, flavint_groups must be specified - If val != None, flavitn_groups are deduced from the data - string - If val is a string, it is expected to be a comma-separated - list, each field of which describes a NuFlavIntGroup. The - returned list of groups encompasses all possible flavor/int - types, but the groups are mutually exclusive. - iterable of strings or NuFlavIntGroup - If val is an iterable, each member of the iterable is - interpreted as a NuFlavIntGroup. - """ - def __init__(self, val=None, flavint_groups=None): - super().__init__() - self._flavint_groups = None - if flavint_groups is None: - if val is None: - raise ValueError('Error - must input at least one of ' - '`flavint_groups` or `val`.') - else: - self.flavint_groups = flavint_groups - - if val is None: - # Instantiate empty FlavIntDataGroup - d = {str(group): None for group in self.flavint_groups} - else: - if isinstance(val, str): - d = self.__load(val) - elif isinstance(val, dict): - d = val - else: - raise TypeError('Unrecognized `val` type %s' % type(val)) - d = {str(NuFlavIntGroup(key)): d[key] for key in d.keys()} - if d.keys() == ['']: - raise ValueError('NuFlavIntGroups not found in data keys') - - fig = [NuFlavIntGroup(fig) for fig in d.keys()] - if flavint_groups is None: - self.flavint_groups = fig - else: - if set(fig) != set(self.flavint_groups): - raise ValueError( - 'Specified `flavint_groups` does not match `val` ' - 'signature.\n`flavint_groups` - {0}\n`val groups` ' - '- {1}'.format(self.flavint_groups, fig) - ) - - self.validate(d) - self.update(d) - - @property - def flavint_groups(self): - return self._flavint_groups - - @flavint_groups.setter - def flavint_groups(self, value): - assert 'muons' not in value - fig = self._parse_flavint_groups(value) - all_flavints = reduce(add, [f.flavints for f in fig]) - for fi in set(all_flavints): - if all_flavints.count(fi) > 1: - raise ValueError( - 'FlavInt {0} referred to multiple times in flavint_group ' - '{1}'.format(fi, fig) - ) - self._flavint_groups = fig - - def transform_groups(self, flavint_groups): - """Transform FlavIntDataGroup into a structure given by the input - flavint_groups. - - Parameters - ---------- - flavint_groups : string, or sequence of strings or sequence of - NuFlavIntGroups - - Returns - ------- - transformed_fidg : FlavIntDataGroup - - """ - flavint_groups = self._parse_flavint_groups(flavint_groups) - - original_flavints = reduce(add, [list(f.flavints) for f in - self.flavint_groups]) - inputted_flavints = reduce(add, [list(f.flavints) for f in - flavint_groups]) - if not set(inputted_flavints).issubset(set(original_flavints)): - raise ValueError( - 'Mismatch between underlying group of flavints given as input ' - 'and original flavint_group.\nOriginal {0}\nInputted ' - '{1}'.format(set(original_flavints), set(inputted_flavints)) - ) - - transformed_fidg = FlavIntDataGroup(flavint_groups=flavint_groups) - for in_fig in flavint_groups: - for or_fig in self.flavint_groups: - if or_fig in in_fig: - if transformed_fidg[in_fig] is None: - transformed_fidg[in_fig] = deepcopy(self[or_fig]) - else: - transformed_fidg[in_fig] = \ - self._merge(transformed_fidg[in_fig], - self[or_fig]) - elif in_fig in or_fig: - raise ValueError( - 'Cannot decouple original flavint_group {0} into input' - 'flavint_group {1}'.format(or_fig, in_fig) - ) - logging.trace('Transformed from\n{0}\nto ' - '{1}'.format(self.flavint_groups, flavint_groups)) - return transformed_fidg - - def allclose(self, other, rtol=1e-05, atol=1e-08): - """Returns True if all data structures are equal and all numerical - values contained are within relative (rtol) and/or absolute (atol) - tolerance of one another. - """ - return recursiveAllclose(self, other, rtol=rtol, atol=atol) - - def validate(self, fi_container): - """Perform basic validation on the data structure""" - self.__basic_validate(fi_container) - - def save(self, fname, **kwargs): - """Save data structure to a file; see fileio.to_file for details""" - fileio.to_file(self, fname, **kwargs) - - @staticmethod - def _parse_flavint_groups(flavint_groups): - if isinstance(flavint_groups, str): - return flavintGroupsFromString(flavint_groups) - elif isinstance(flavint_groups, NuFlavIntGroup): - return [flavint_groups] - elif isinstance(flavint_groups, Sequence): - if all(isinstance(f, NuFlavIntGroup) for f in flavint_groups): - return flavint_groups - elif all(isinstance(f, NuFlavInt) for f in flavint_groups): - return [NuFlavIntGroup(f) for f in flavint_groups] - elif all(isinstance(f, str) for f in flavint_groups): - return [NuFlavIntGroup(f) for f in flavint_groups] - else: - raise ValueError( - 'Elements in `flavint_groups` not all type ' - 'NuFlavIntGroup or string: %s' % flavint_groups - ) - else: - raise TypeError('Unrecognized `flavint_groups` type %s' % - type(flavint_groups)) - - @staticmethod - def _merge(a, b, path=None): - """Merge dictionaries `a` and `b` by recursively iterating down - to the lowest level of the dictionary until coincident numpy - arrays are found, after which the appropriate sub-element is - made equal to the concatenation of the two arrays. - """ - if path is None: - path = [] - for key in b: - if key in a: - if isinstance(a[key], dict) and isinstance(b[key], dict): - FlavIntDataGroup._merge(a[key], b[key], path + [str(key)]) - elif isinstance(a[key], np.ndarray) and \ - isinstance(b[key], np.ndarray): - a[key] = np.concatenate((a[key], b[key])) - elif isinstance(a[key], ureg.Quantity) and \ - isinstance(b[key], ureg.Quantity): - if isinstance(a[key].m, np.ndarray) and \ - isinstance(b[key].m, np.ndarray): - units = a[key].units - a[key] = np.concatenate((a[key].m, b[key].m_as(units))) - a[key] = a[key] * units - else: - raise Exception( - 'Conflict at %s' % '.'.join(path + [str(key)]) - ) - else: - raise Exception( - 'Conflict at %s' % '.'.join(path + [str(key)]) - ) - else: - a[key] = b[key] - return a - - @staticmethod - def _interpret_index(idx): - try: - nfi = NuFlavIntGroup(idx) - return str(nfi) - except: - raise ValueError('Invalid index: %s' % str(idx)) - - def __basic_validate(self, fi_container): - for group in self.flavint_groups: - f = str(group) - assert isinstance(fi_container, dict), "container must be of" \ - " type 'dict'; instead got %s" % type(fi_container) - assert f in fi_container, \ - "container missing flavint group '%s'" % f - - @staticmethod - def __load(fname, **kwargs): - d = fileio.from_file(fname, **kwargs) - return d - - def __add__(self, other): - d = deepcopy(self) - d = self._merge(d, other) - combined_flavint_groups = list( - set(self.flavint_groups + other.flavint_groups) - ) - return FlavIntDataGroup(val=d, flavint_groups=combined_flavint_groups) - - def __getitem__(self, arg): - key = self._interpret_index(arg) - tgt_obj = super().__getitem__(key) - return tgt_obj - - def __setitem__(self, arg, value): - key = self._interpret_index(arg) - if NuFlavIntGroup(key) not in self.flavint_groups: - self.flavint_groups += [NuFlavIntGroup(key)] - super().__setitem__(key, value) - - def __eq__(self, other): - """Recursive, exact equality""" - return recursiveEquality(self, other) - - -def flavintGroupsFromString(groups): - """Interpret `groups` to break into neutrino flavor/interaction type(s) - that are to be grouped together; also form singleton groups as specified - explicitly in `groups` or for any unspecified flavor/interaction type(s). - - The returned list of groups encompasses all possible flavor/int types, but - the groups are mutually exclusive. - - Parameters - ---------- - groups : None, string, or sequence of strings - - Returns - ------- - flavint_groups : list of NuFlavIntGroup - - """ - if groups is None or groups == '': - # None are to be grouped together - grouped = [] - # All will be singleton groups - ungrouped = [NuFlavIntGroup(k) for k in ALL_NUFLAVINTS] - else: - grouped, ungrouped = xlateGroupsStr(groups) - - # Find any flavints not included in the above groupings - flavint_groups = grouped + ungrouped - logging.trace('flav/int in the following group(s) will be joined together:' - + ', '.join([str(k) for k in grouped])) - logging.trace('flav/ints treated individually:' - + ', '.join([str(k) for k in ungrouped])) - - # Enforce that flavints composing groups are mutually exclusive - for grp0, grp1 in combinations(flavint_groups, 2): - if not set(grp0).isdisjoint(grp1): - overlapping = sorted(set(grp0).intersection(grp1)) - raise ValueError( - 'All flavint groups must be disjoint with one another, but' - ' groups %s and %s have overlapping flavint(s): %s' - % (grp0, grp1, ', '.join(str(g) for g in overlapping)) - ) - - return sorted(flavint_groups) - - -def xlateGroupsStr(val): - """Translate a ","-separated string into separate `NuFlavIntGroup`s. - - val - ","-delimited list of valid NuFlavIntGroup strings, e.g.: - "nuall_nc,nue,numu_cc+numubar_cc" - Note that specifying NO interaction type results in both interaction - types being selected, e.g. "nue" implies "nue_cc+nue_nc". For other - details of how the substrings are interpreted, see docs for - NuFlavIntGroup. - - returns: - grouped, ungrouped - - grouped, ungrouped - lists of NuFlavIntGroups; the first will have more than one flavint - in each NuFlavIntGroup whereas the second will have just one - flavint in each NuFlavIntGroup. Either list can be of 0-length. - - This function does not enforce mutual-exclusion on flavints in the - various flavint groupings, but does list any flavints not grouped - together in the `ungrouped` return arg. Mutual exclusion can be - enforced through set operations upon return. - """ - # What flavints to group together - grouped = [NuFlavIntGroup(s) for s in re.split('[,;]', val)] - - # Find any flavints not included in the above groupings - all_flavints = set(ALL_NUFLAVINTS) - all_grouped_flavints = set(NuFlavIntGroup(grouped)) - ungrouped = [NuFlavIntGroup(k) for k in - sorted(all_flavints.difference(all_grouped_flavints))] - - return grouped, ungrouped - - -# pylint: disable=line-too-long -def test_IntType(): - """IntType unit tests""" - #========================================================================== - # Test IntType - #========================================================================== - ref = CC - assert IntType('\n\t _cc \n') == ref - try: - IntType('numubarcc') - except ValueError: - pass - else: - raise Exception() - assert IntType(1) == ref - assert IntType(1.0) == ref - assert IntType(CC) == ref - assert IntType(NuFlavInt('numubarcc')) == ref - for int_code in [1, 2]: - IntType(int_code) - IntType(float(int_code)) - logging.info('<< PASS : test_IntType >>') - - -# pylint: disable=line-too-long -def test_NuFlav(): - """NuFlav unit tests""" - all_f_codes = [12, -12, 14, -14, 16, -16] - - #========================================================================== - # Test NuFlav - #========================================================================== - ref = NuFlav('numu') - assert ref.code == 14 - assert (-ref).code == -14 - assert ref.bar_code == 1 - assert (-ref).bar_code == -1 - assert ref.particle - assert not (-ref).particle - assert not ref.antiparticle - assert (-ref).antiparticle - - #assert NuFlav('\n\t _ nu_ mu_ cc\n\t\r') == ref - #assert NuFlav('numucc') == ref - assert NuFlav(14) == ref - assert NuFlav(14.0) == ref - assert NuFlav(NuFlav('numu')) == ref - assert NuFlav(NuFlavInt('numucc')) == ref - assert NuFlav(NuFlavInt('numunc')) == ref - - for f in all_f_codes: - NuFlav(f) - NuFlav(float(f)) - for (f, bnb) in product(['e', 'mu', 'tau'], ['', 'bar']): - NuFlav('nu_' + f + '_' + bnb) - - logging.info('<< PASS : test_NuFlav >>') - - -# pylint: disable=line-too-long -def test_NuFlavInt(): - """NuFlavInt unit tests""" - all_f_codes = [12, -12, 14, -14, 16, -16] - all_i_codes = [1, 2] - - #========================================================================== - # Test NuFlavInt - #========================================================================== - try: - NuFlavInt('numu') - except ValueError: - pass - - # Equality - fi_comb = [fic for fic in product(all_f_codes, all_i_codes)] - for (fi0, fi1) in product(fi_comb, fi_comb): - if fi0 == fi1: - assert NuFlavInt(fi0) == NuFlavInt(fi1) - else: - assert NuFlavInt(fi0) != NuFlavInt(fi1) - assert NuFlavInt((12, 1)) != 'xyz' - # Sorting: this is my desired sort order - nfl0 = [NUECC, NUEBARCC, NUMUCC, NUMUBARCC, NUTAUCC, NUTAUBARCC, NUENC, - NUEBARNC, NUMUNC, NUMUBARNC, NUTAUNC, NUTAUBARNC] - nfl1 = deepcopy(nfl0) - np.random.shuffle(nfl1) - nfl_sorted = sorted(nfl1) - assert all([v0 == nfl_sorted[n] for n, v0 in enumerate(nfl0)]), str(nfl_sorted) - assert len(nfl0) == len(nfl_sorted) - - # Test NuFlavInt instantiation - _ = NuFlav('nue') - _ = IntType('cc') - _ = IntType('nc') - _ = NuFlav('nuebar') - flavs = list(ALL_NUFLAVS) - flavs.extend(['nue', 'numu', 'nutau', 'nu_e', 'nu e', 'Nu E', 'nuebar', - 'nu e bar']) - flavs.extend(all_f_codes) - _ = NuFlavInt('nuebarnc') - - # Instantiate with combinations of flavs and int types - for f, i in product(flavs, [1, 2, 'cc', 'nc', CC, NC]): - ref = NuFlavInt(f, i) - assert NuFlavInt((f, i)) == ref - assert NuFlavInt(flav=f, int_type=i) == ref - if isinstance(f, str) and isinstance(i, str): - assert NuFlavInt(f+i) == ref - assert NuFlavInt(f + '_' + i) == ref - assert NuFlavInt(f + ' ' + i) == ref - - # Instantiate with already-instantiated `NuFlavInt`s - assert NuFlavInt(NUECC) == NuFlavInt('nuecc') - assert NuFlavInt(NUEBARNC) == NuFlavInt('nuebarnc') - - # test negating flavint - nk = NuFlavInt('numucc') - assert -nk == NuFlavInt('numubarcc') - - logging.info('<< PASS : test_NuFlavInt >>') - - -# pylint: disable=line-too-long -def test_NuFlavIntGroup(): - """NuFlavIntGroup unit tests""" - all_f_codes = [12, -12, 14, -14, 16, -16] - all_i_codes = [1, 2] - - #========================================================================== - # Test NuFlavIntGroup - #========================================================================== - fi_comb = [fic for fic in product(all_f_codes, all_i_codes)] - nfl0 = [NuFlavInt(fic) for fic in fi_comb] - nfl1 = [NuFlavInt(fic) for fic in fi_comb] - nfl_sorted = sorted(nfl1) - nkg0 = NuFlavIntGroup(nfl0) - nkg1 = NuFlavIntGroup(nfl_sorted) - assert nkg0 == nkg1 - assert nkg0 != 'xyz' - assert nkg0 != 'xyz' - - # Test inputs - assert NuFlavIntGroup('nuall,nuallbar').flavs == tuple([NuFlav(c) for c in all_f_codes]), str(NuFlavIntGroup('nuall,nuallbar').flavs) - - # - # Test NuFlavIntGroup instantiation - # - nue = NuFlav('nue') - numu = NuFlav('numu') - nue_cc = NuFlavInt('nue_cc') - nue_nc = NuFlavInt('nue_nc') - - # Empty args - NuFlavIntGroup() - NuFlavIntGroup([]) - - # String flavor promoted to CC+NC - assert set(NuFlavIntGroup('nue').flavints) == set((nue_cc, nue_nc)) - # NuFlav promoted to CC+NC - assert set(NuFlavIntGroup(nue).flavints) == set((nue_cc, nue_nc)) - # List of single flav str same as above - assert set(NuFlavIntGroup(['nue']).flavints) == set((nue_cc, nue_nc)) - # List of single flav same as above - assert set(NuFlavIntGroup([nue]).flavints) == set((nue_cc, nue_nc)) - - # Single flavint spec - assert set(NuFlavIntGroup(nue_cc).flavints) == set((nue_cc,)) - # Str with single flavint spec - assert set(NuFlavIntGroup('nue_cc').flavints) == set((nue_cc,)) - # List of single str containing single flavint spec - assert set(NuFlavIntGroup(['nue_cc']).flavints) == set((nue_cc,)) - - # Multiple flavints as *args - assert set(NuFlavIntGroup(nue_cc, nue_nc).flavints) == set((nue_cc, nue_nc)) - # List of flavints - assert set(NuFlavIntGroup([nue_cc, nue_nc]).flavints) == set((nue_cc, nue_nc)) - # List of single str containing multiple flavints spec - assert set(NuFlavIntGroup(['nue_cc,nue_nc']).flavints) == set((nue_cc, nue_nc)) - # List of str containing flavints spec - assert set(NuFlavIntGroup(['nue_cc', 'nue_nc']).flavints) == set((nue_cc, nue_nc)) - - # Another NuFlavIntGroup - assert set(NuFlavIntGroup(NuFlavIntGroup(nue_cc, nue_nc)).flavints) == set((nue_cc, nue_nc)) - - # Addition of flavints promoted to NuFlavIntGroup - assert nue_cc + nue_nc == NuFlavIntGroup(nue) - # Addition of flavs promoted to NuFlavIntGroup including both CC & NC - assert nue + numu == NuFlavIntGroup(nue, numu) - - # Test remove - nkg = NuFlavIntGroup('nue_cc+numucc') - nkg.remove(NuFlavInt((12, 1))) - assert nkg == NuFlavIntGroup('numucc') - - # Test del - nkg = NuFlavIntGroup('nue_cc+numucc') - del nkg[0] - assert nkg == NuFlavIntGroup('numucc') - - # Equivalent object when converting to string and back to NuFlavIntGroup from - # that string - for n in range(1, len(ALL_NUFLAVINTS)+1): - logging.debug('NuFlavIntGroup --> str --> NuFlavIntGroup, n = %d', n) - for comb in combinations(ALL_NUFLAVINTS, n): - ref = NuFlavIntGroup(comb) - assert ref == NuFlavIntGroup(str(ref)) - - # Ordering - desired_order = [ - NuFlavIntGroup(s) for s in [ - 'nuecc', 'nuebarcc', 'numucc', 'numubarcc', 'nutaucc', - 'nutaubarcc', 'nuallnc', 'nuallbarnc' - ] - ] - groups = flavintGroupsFromString('nuallnc, nuallbarnc') - assert groups == desired_order, str(groups) - assert sorted(groups) == desired_order, str(sorted(groups)) - - desired_order = [ - NuFlavIntGroup(s) for s in [ - 'nuecc', 'nuebarcc', 'numucc', 'numubarcc', 'nutaucc', - 'nutaubarcc', 'nuallnc', 'nuallbarnc' - ] - ] - groups = flavintGroupsFromString('nuallnc, nuallbarnc') - assert groups == desired_order, str(groups) - assert sorted(groups) == desired_order, str(sorted(groups)) - - # test TeX strings - nkg = NuFlavIntGroup('nuall,nuallbar') - logging.info(str(nkg)) - logging.info(nkg.tex) - logging.info(nkg.simple_str()) - logging.info(nkg.simple_tex()) - logging.info(nkg.unique_flavs_tex) - - logging.info('<< ???? : test_NuFlavIntGroup >> checks pass upon inspection' - ' of above outputs and generated file(s).') - - -# pylint: disable=line-too-long -def test_FlavIntData(): - """FlavIntData unit tests""" - #========================================================================== - # Test FlavIntData - #========================================================================== - # Excercise the "standard" PISA nested-python-dict features, where this - # dict uses an '_' to separate 'bar' in key names, and the nested dict - # levels are [flavor][interaction type]. - - # Force separator to something weird before starting, to ensure everything - # still works and this separator is still set when we're done - oddball_sep = 'xyz' - set_bar_ssep(oddball_sep) - ref_pisa_dict = {f: {it: None for it in ['cc', 'nc']} for f in - ['nue', 'nue_bar', 'numu', 'numu_bar', 'nutau', - 'nutau_bar']} - fi_cont = FlavIntData() - for f in ['nue', 'nue_bar', 'numu', 'numu_bar', 'nutau', 'nutau_bar']: - for it in ['cc', 'nc']: - assert fi_cont[f][it] == ref_pisa_dict[f][it] - flavint = NuFlavInt(f, it) - assert flavint.pidx(ref_pisa_dict) == ref_pisa_dict[f][it] - logging.trace('%s: %s' %('flavint', flavint)) - logging.trace('%s: %s' %('f', f)) - logging.trace('%s: %s' %('it', it)) - logging.trace('%s: %s' %('fi_cont', fi_cont)) - logging.trace('%s: %s' %('fi_cont[f]', fi_cont[f])) - logging.trace('%s: %s' %('fi_cont[f][it]', fi_cont[f][it])) - logging.trace('%s: %s' %('fi_cont[flavint]', fi_cont[flavint])) - logging.trace('%s: %s' %('fi_cont[flavint]', fi_cont[flavint])) - assert fi_cont[flavint] == fi_cont[f][it] - assert fi_cont[flavint] == fi_cont[flavint] - assert get_bar_ssep() == oddball_sep - set_bar_ssep('') - - # These should fail because you're only allowed to access the flav or - # flavint part of the data structure, no longer any sub-items (use - # subsequent [k1][k2]... to do this instead) - fi_cont['numu', 'cc'] = {'sub-key': {'sub-sub-key': None}} - try: - fi_cont['numu', 'cc', 'sub-key'] - except ValueError: - pass - else: - raise Exception('Test failed, exception should have been raised') - - try: - fi_cont['numu', 'cc', 'sub-key'] = 'new sub-val' - except ValueError: - pass - else: - raise Exception('Test failed, exception should have been raised') - - # These should fail because setting flavor-only as a string would - # invalidate the data structure (not a nested dict) - try: - fi_cont[NuFlav('numu')] = 'xyz' - except AssertionError: - pass - else: - raise Exception('Test failed, exception should have been raised') - - try: - fi_cont[NuFlav('numu')] = {'cc': 'cc_xyz'} - except AssertionError: - pass - else: - raise Exception('Test failed, exception should have been raised') - - # The previously-valid fi_cont should *still* be valid, as `set` should - # revert to the original (valid) values rather than keep the invalid values - # that were attempted to be set above - fi_cont.validate(fi_cont) - - # This should be okay because datastructure is still valid if the item - # being set on the flavor (only) is a valid int-type dict - fi_cont[NuFlav('numu')] = {'cc': 'cc_xyz', 'nc': 'nc_xyz'} - - # Test setting, getting, and JSON serialization of FlavIntData - fi_cont['nue', 'cc'] = 'this is a string blah blah blah' - _ = fi_cont[NuFlavInt('nue_cc')] - fi_cont[NuFlavInt('nue_nc')] = np.pi - _ = fi_cont[NuFlavInt('nue_nc')] - fi_cont[NuFlavInt('numu_cc')] = [0, 1, 2, 3] - _ = fi_cont[NuFlavInt('numu_cc')] - fi_cont[NuFlavInt('numu_nc')] = {'new': {'nested': {'dict': 'xyz'}}} - _ = fi_cont[NuFlavInt('numu_nc')] - fi_cont[NuFlavInt('nutau_cc')] = 1 - _ = fi_cont[NuFlavInt('nutau_cc')] - fi_cont[NuFlavInt('nutaubar_cc')] = np.array([0, 1, 2, 3]) - _ = fi_cont[NuFlavInt('nutaubar_cc')] - fname = '/tmp/test_FlavIntData.json' - logging.info('Writing FlavIntData to file %s; inspect.', fname) - fileio.to_file(fi_cont, fname, warn=False) - fi_cont2 = fileio.from_file(fname) - assert recursiveEquality(fi_cont2, fi_cont), \ - 'fi_cont=%s\nfi_cont2=%s' %(fi_cont, fi_cont2) - - logging.info('<< ???? : test_FlavIntData >> checks pass upon inspection of' - ' above outputs and generated file(s).') - - -# pylint: disable=line-too-long -def test_FlavIntDataGroup(): - """FlavIntDataGroup unit tests""" - flavint_group = 'nue, numu_cc+numubar_cc, nutau_cc' - FlavIntDataGroup(flavint_groups=flavint_group) - fidg1 = FlavIntDataGroup( - flavint_groups='nuall, nu all bar CC, nuallbarnc', - val={'nuall': np.arange(0, 100), - 'nu all bar CC': np.arange(100, 200), - 'nuallbarnc': np.arange(200, 300)} - ) - fidg2 = FlavIntDataGroup( - val={'nuall': np.arange(0, 100), - 'nu all bar CC': np.arange(100, 200), - 'nuallbarnc': np.arange(200, 300)} - ) - assert fidg1 == fidg2 - - try: - fidg1 = FlavIntDataGroup( - flavint_groups='nuall, nu all bar, nuallbar', - val={'nuall': np.arange(0, 100), - 'nu all bar CC': np.arange(100, 200), - 'nuallbarnc': np.arange(200, 300)} - ) - except ValueError: - pass - else: - raise Exception - - try: - fidg1 = FlavIntDataGroup(flavint_groups=['nuall', 'nue']) - except (ValueError, AssertionError): - pass - else: - raise Exception - - assert set(fidg1.keys()) == set(('nuall', 'nuallbar_cc', 'nuallbar_nc')) - fidg1.save('/tmp/test_FlavIntDataGroup.json', warn=False) - fidg1.save('/tmp/test_FlavIntDataGroup.hdf5', warn=False) - fidg3 = FlavIntDataGroup(val='/tmp/test_FlavIntDataGroup.json') - fidg4 = FlavIntDataGroup(val='/tmp/test_FlavIntDataGroup.hdf5') - assert fidg3 == fidg1 - assert fidg4 == fidg1 - - figroups = ('nuecc+nuebarcc,numucc+numubarcc,nutaucc+nutaubarcc,' - 'nuallnc,nuallbarnc') - cfidat = FlavIntDataGroup(flavint_groups=figroups) - - for k in cfidat.flavint_groups: - cfidat[k] = np.arange(10) - - cfidat[NuFlavIntGroup('nuecc+nuebarcc')] = np.arange(10) - - logging.debug(str((fidg1 + fidg2))) - assert fidg1 == fidg2 - try: - logging.debug(str((fidg1 + cfidat))) - except (ValueError, AssertionError): - pass - else: - raise Exception - - d1 = { - 'numu+numubar': { - 'energy': np.arange(0, 10) - }, - 'nutau+nutaubar': { - 'energy': np.arange(0, 10) - } - } - d2 = { - 'nue+nuebar': { - 'weights': np.arange(0, 10) - }, - 'nutau+nutaubar': { - 'weights': np.arange(0, 10) - } - } - d1 = FlavIntDataGroup(val=d1) - d2 = FlavIntDataGroup(val=d2) - d3 = d1 + d2 - logging.debug(str((d3))) - - tr_d1 = d1.transform_groups(['numu+numubar+nutau+nutaubar']) - logging.debug(str((tr_d1))) - tr_d3 = d3.transform_groups('nue+nuebar+numu+numubar, nutau+nutaubar') - tr_d3_1 = d3.transform_groups(['nue+nuebar+numu+numubar', 'nutau+nutaubar']) - tr_d3_2 = d3.transform_groups([NuFlavIntGroup('nue+nuebar+numu+numubar'), - NuFlavIntGroup('nutau+nutaubar')]) - logging.debug(str((tr_d3))) - assert tr_d3 == tr_d3_1 and tr_d3 == tr_d3_2 - - try: - tr_d3.transform_groups(['nue+nuebar']) - except (ValueError, AssertionError): - pass - else: - raise Exception - - try: - tr_d3.transform_groups('nue+nuebar, numu+numubar, nutau+nutaubar') - except (ValueError, AssertionError): - pass - else: - raise Exception - - logging.info('<< PASS : test_FlavIntDataGroup >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_IntType() - test_NuFlav() - test_NuFlavInt() - test_NuFlavIntGroup() - test_FlavIntData() - test_FlavIntDataGroup() diff --git a/pisa/utils/flux_weights.py b/pisa/utils/flux_weights.py deleted file mode 100644 index b7f95b32f..000000000 --- a/pisa/utils/flux_weights.py +++ /dev/null @@ -1,637 +0,0 @@ -#! /usr/bin/env python - -""" -A set of functions for calculating flux weights given an array of energy and -cos(zenith) values based on the Honda atmospheric flux tables. A lot of this -functionality will be copied from honda.py but since I don't want to initialise -this as a stage it makes sense to copy it in to here so somebody can't -accidentally do the wrong thing with that script. -""" - -import numpy as np -import scipy.interpolate as interpolate - -from pisa.utils.log import logging -from pisa.utils.resources import open_resource - - -__all__ = [ - "load_2d_honda_table", - "load_2d_bartol_table", - "load_2d_table", - "calculate_2d_flux_weights", - "load_3d_honda_table", - "load_3d_table", - "calculate_3d_flux_weights", -] - -__author__ = "S. Wren" - -__license__ = """Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -PRIMARIES = ["numu", "numubar", "nue", "nuebar"] -T_MODE_PRIMARIES = ["numu", "numubar", "nue", "nuebar", "nutau", "nutaubar"] -TEXPRIMARIES = [r"$\nu_{\mu}$", r"$\bar{\nu}_{\mu}$", r"$\nu_{e}$", r"$\bar{\nu}_{e}$"] - - -def load_2d_honda_table(flux_file, enpow=1, return_table=False, hg_taumode=False): - """ - Added "hg_taumode" to load in hillas gaisser h3a tables made with tau neutrino contributions. - """ - - logging.debug("Loading atmospheric flux table %s", flux_file) - - # columns in Honda files are in the same order - cols = ["energy"] - cols += T_MODE_PRIMARIES if hg_taumode else PRIMARIES - - # Load the data table - table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) - if hg_taumode: - mask = np.array([all(~np.isnan(table)[i]) for i in range(len(table))]) - table = table[mask].T - else: - mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) - table = table[~mask].T - - flux_dict = dict(zip(cols, table)) - for key in flux_dict.keys(): - # There are 20 lines per zenith range - flux_dict[key] = np.array(np.split(flux_dict[key], 100 if hg_taumode else 20)) - - # Set the zenith and energy range as they are in the tables - # The energy may change, but the zenith should always be - # 20 bins, full sky. - flux_dict["energy"] = flux_dict["energy"][0] - if hg_taumode: - _edges = np.linspace(-1.0, 1.0, 101) - flux_dict["coszen"] = 0.5 * (_edges[:-1] + _edges[1:]) - else: - flux_dict["coszen"] = np.linspace(-0.95, 0.95, 20) - - # Now get a spline representation of the flux table. - logging.debug("Make spline representation of flux") - logging.debug("Doing this integral-preserving.") - - spline_dict = {} - - # Do integral-preserving method as in IceCube's NuFlux - # This one will be based purely on SciPy rather than ROOT - # Stored splines will be 1D in integrated flux over energy - int_flux_dict = {} - # Energy and CosZenith bins needed for integral-preserving - # method must be the edges of those of the normal tables - if hg_taumode: - int_flux_dict["logenergy"] = np.linspace(1.0, 6.0, 101) - int_flux_dict["coszen"] = np.linspace(-1, 1, 101) - else: - int_flux_dict["logenergy"] = np.linspace(-1.025, 4.025, 102) - int_flux_dict["coszen"] = np.linspace(-1, 1, 21) - for nutype in T_MODE_PRIMARIES if hg_taumode else PRIMARIES: - # spline_dict now wants to be a set of splines for - # every table cosZenith value. - splines = {} - cz_iter = 1 - for energyfluxlist in flux_dict[nutype]: - int_flux = [] - tot_flux = 0.0 - int_flux.append(tot_flux) - for energyfluxval, energyval in zip(energyfluxlist, flux_dict["energy"]): - # Spline works best if you integrate flux * energy - tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 - int_flux.append(tot_flux) - - spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) - cz_value = "%.2f" % (1.05 - cz_iter * 0.1) - splines[cz_value] = spline - cz_iter += 1 - - spline_dict[nutype] = splines - - for prim in T_MODE_PRIMARIES if hg_taumode else PRIMARIES: - flux_dict[prim] = flux_dict[prim][::-1] - - if return_table: - return spline_dict, flux_dict - - return spline_dict - - -def load_2d_bartol_table(flux_file, enpow=1, return_table=False): - - logging.debug("Loading atmospheric flux table %s", flux_file) - - # Bartol tables have been modified to look like Honda tables - cols = ["energy"] + PRIMARIES - - # Load the data table - table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) - mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) - table = table[~mask].T - - flux_dict = dict(zip(cols, table)) - for key in flux_dict.keys(): - # There are 20 lines per zenith range - flux_dict[key] = np.array(np.split(flux_dict[key], 20)) - - # Set the zenith and energy range as they are in the tables - # The energy may change, but the zenith should always be - # 20 bins, full sky. - flux_dict["energy"] = flux_dict["energy"][0] - flux_dict["coszen"] = np.linspace(-0.95, 0.95, 20) - - # Now get a spline representation of the flux table. - logging.debug("Make spline representation of flux") - logging.debug("Doing this integral-preserving.") - - spline_dict = {} - - # Do integral-preserving method as in IceCube's NuFlux - # This one will be based purely on SciPy rather than ROOT - # Stored splines will be 1D in integrated flux over energy - int_flux_dict = {} - # Energy and CosZenith bins needed for integral-preserving - # method must be the edges of those of the normal tables - low_log_energy = np.linspace(-1, 1, 41) - high_log_energy = np.linspace(1.1, 4, 30) - int_flux_dict["logenergy"] = np.concatenate([low_log_energy, high_log_energy]) - int_flux_dict["coszen"] = np.linspace(-1, 1, 21) - for nutype in PRIMARIES: - # spline_dict now wants to be a set of splines for - # every table cosZenith value. - splines = {} - cz_iter = 1 - for energyfluxlist in flux_dict[nutype]: - int_flux = [] - tot_flux = 0.0 - int_flux.append(tot_flux) - for energyfluxval, energyval in zip(energyfluxlist, flux_dict["energy"]): - # Spline works best if you integrate flux * energy - if energyval < 10.0: - tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 - else: - tot_flux += energyfluxval * np.power(energyval, enpow) * 0.1 - int_flux.append(tot_flux) - - spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) - cz_value = "%.2f" % (1.05 - cz_iter * 0.1) - splines[cz_value] = spline - cz_iter += 1 - - spline_dict[nutype] = splines - - for prim in PRIMARIES: - flux_dict[prim] = flux_dict[prim][::-1] - - if return_table: - return spline_dict, flux_dict - - return spline_dict - - -def load_2d_table(flux_file, enpow=1, return_table=False): - """Manipulate 2 dimensional flux tables. - - 2D is expected to mean energy and cosZenith, where azimuth is averaged - over (before being stored in the table) and the zenith range should - include both hemispheres. - - Parameters - ---------- - flux_file : string - The location of the flux file you want to spline. Should be a honda - azimuth-averaged file. - enpow : integer - The power to which the energy will be raised in the construction of the - splines. If you don't know what this means, leave it as 1. - return_table : boolean - Flag to true if you want the function to also return a dictionary - of the underlying values from the tables. Useful for comparisons. - - """ - if not isinstance(enpow, int): - raise TypeError("Energy power must be an integer") - if not isinstance(return_table, bool): - raise TypeError("return_table must be a boolean") - if not isinstance(flux_file, str): - raise TypeError("Flux file name must be a string") - if "aa" not in flux_file: - raise ValueError("Azimuth-averaged tables are expected") - if ("honda" not in flux_file) and ("hillas" not in flux_file): - if "bartol" in flux_file: - if return_table: - spline_dict, flux_dict = load_2d_bartol_table( - flux_file, enpow=enpow, return_table=True - ) - else: - spline_dict = load_2d_bartol_table(flux_file, enpow=enpow) - spline_dict["name"] = "bartol" - - else: - raise ValueError( - "Flux file must be from the Honda, Hillas, or " "Bartol groups" - ) - else: - if return_table: - spline_dict, flux_dict = load_2d_honda_table( - flux_file, - enpow=enpow, - return_table=True, - hg_taumode="hillas" in flux_file, - ) - else: - spline_dict = load_2d_honda_table( - flux_file, enpow=enpow, hg_taumode="hillas" in flux_file - ) - spline_dict["name"] = "hillas" if "hillas" in flux_file else "honda" - - if return_table: - return spline_dict, flux_dict - - return spline_dict - - -def calculate_2d_flux_weights( - true_energies, true_coszens, en_splines, enpow=1, out=None -): - """Calculate flux weights for given array of energy and cos(zenith). - Arrays of true energy and zenith are expected to be for MC events, so - they are tested to be of the same length. - `en_splines` should be the spline for the primary of interest. The entire - dictionary is calculated in the previous function. - - Parameters - ---------- - true_energies : list or numpy array - A list of the true energies of your MC events. Pass this in GeV! - true_coszens : list or numpy array - A list of the true coszens of your MC events - en_splines : list of splines - A list of the initialised energy splines from the previous function - for your desired primary. - enpow : integer - The power to which the energy was raised in the construction of the - splines. If you don't know what this means, leave it as 1. - out : np.array - optional array to store results - - Example - ------- - Use the previous function to calculate the spline dict for the South Pole. - - spline_dict = load_2d_table('flux/honda-2015-spl-solmax-aa.d') - - Then you must have some equal length arrays of energy and zenith. - - ens = [3.0, 4.0, 5.0] - czs = [-0.4, 0.7, 0.3] - - These are used in this function, along with whatever primary you are - interested in calculating the flux weights for. - - flux_weights = calculate_2d_flux_weights(ens, czs, spline_dict['numu']) - - Done! - - """ - if not isinstance(true_energies, np.ndarray): - if not isinstance(true_energies, list): - raise TypeError("true_energies must be a list or numpy array") - else: - true_energies = np.array(true_energies) - if not isinstance(true_coszens, np.ndarray): - if not isinstance(true_coszens, list): - raise TypeError("true_coszens must be a list or numpy array") - else: - true_coszens = np.array(true_coszens) - if not ((true_coszens >= -1.0).all() and (true_coszens <= 1.0).all()): - raise ValueError("Not all coszens found between -1 and 1") - if not len(true_energies) == len(true_coszens): - raise ValueError("length of energy and coszen arrays must match") - if not isinstance(enpow, int): - raise TypeError("Energy power must be an integer") - - num_cz_points = 20 - czkeys = ["%.2f" % x for x in np.linspace(-0.95, 0.95, num_cz_points)] - cz_spline_points = np.linspace(-1, 1, num_cz_points + 1) - - if out is None: - out = np.empty_like(true_energies) - - spline_vals = np.zeros(num_cz_points + 1) - for i in range(len(true_energies)): - true_log_energy = np.log10(true_energies[i]) - for j in range(num_cz_points): - spline_vals[j + 1] = interpolate.splev( - true_log_energy, en_splines[czkeys[j]], der=1 - ) - - int_spline_vals = np.cumsum(spline_vals) * 0.1 - spline = interpolate.splrep(cz_spline_points, int_spline_vals, s=0) - - out[i] = interpolate.splev(true_coszens[i], spline, der=1) / np.power( - true_energies[i], enpow - ) - - return out - - -def load_3d_honda_table(flux_file, enpow=1, return_table=False): - - logging.debug("Loading atmospheric flux table %s", flux_file) - - # columns in Honda files are in the same order - cols = ["energy"] + PRIMARIES - - # Load the data table - table = np.genfromtxt(open_resource(flux_file), usecols=list(range(len(cols)))) - mask = np.all(np.isnan(table) | np.equal(table, 0), axis=1) - table = table[~mask].T - - flux_dict = dict(zip(cols, table)) - for key in flux_dict.keys(): - # There are 20 lines per zenith range - coszenith_lists = np.array(np.split(flux_dict[key], 20)) - azimuth_lists = [] - for coszenith_list in coszenith_lists: - azimuth_lists.append(np.array(np.split(coszenith_list, 12)).T) - flux_dict[key] = np.array(azimuth_lists) - if not key == "energy": - flux_dict[key] = flux_dict[key].T - - # Set the zenith and energy range as they are in the tables - # The energy may change, but the zenith should always be - # 20 bins and the azimuth should always be 12 bins, full sky - flux_dict["energy"] = flux_dict["energy"][0].T[0] - flux_dict["coszen"] = np.linspace(0.95, -0.95, 20) - flux_dict["azimuth"] = np.linspace(15, 345, 12) - - # Now get a spline representation of the flux table. - logging.debug("Make spline representation of flux") - logging.debug("Doing this integral-preserving.") - - spline_dict = {} - - # Do integral-preserving method as in IceCube's NuFlux - # This one will be based purely on SciPy rather than ROOT - # Stored splines will be 1D in integrated flux over energy - int_flux_dict = {} - # Energy and CosZenith bins needed for integral-preserving - # method must be the edges of those of the normal tables - int_flux_dict["logenergy"] = np.linspace(-1.025, 4.025, 102) - int_flux_dict["coszen"] = np.linspace(1, -1, 21) - for nutype in PRIMARIES: - # spline_dict now wants to be a set of splines for - # every table cosZenith value. - # In 3D mode we have a set of these sets for every - # table azimuth value. - az_splines = {} - for az, f in zip(flux_dict["azimuth"], flux_dict[nutype]): - splines = {} - cz_iter = 1 - for energyfluxlist in f.T: - int_flux = [] - tot_flux = 0.0 - int_flux.append(tot_flux) - for energyfluxval, energyval in zip( - energyfluxlist, flux_dict["energy"] - ): - # Spline works best if you integrate flux * energy - tot_flux += energyfluxval * np.power(energyval, enpow) * 0.05 - int_flux.append(tot_flux) - - spline = interpolate.splrep(int_flux_dict["logenergy"], int_flux, s=0) - cz_value = "%.2f" % (1.05 - cz_iter * 0.1) - splines[cz_value] = spline - cz_iter += 1 - - az_splines[az] = splines - - spline_dict[nutype] = az_splines - - if return_table: - return spline_dict, flux_dict - - return spline_dict - - -def load_3d_table(flux_file, enpow=1, return_table=False): - """Manipulate 3 dimensional flux tables. - - 3D is expected to mean energy, cosZenith and azimuth. The angular range - should be fully sky. - - Parameters - ---------- - flux_file : string - The location of the flux file you want to spline. Should be a honda - azimuth-averaged file. - enpow : integer - The power to which the energy will be raised in the construction of the - splines. If you don't know what this means, leave it as 1. - return_table : boolean - Flag to true if you want the function to also return a dictionary - of the underlying values from the tables. Useful for comparisons. - """ - - if not isinstance(enpow, int): - raise TypeError("Energy power must be an integer") - if not isinstance(return_table, bool): - raise TypeError("return_table must be a boolean") - if not isinstance(flux_file, str): - raise ValueError("Flux file name must be a string") - if "aa" in flux_file: - raise ValueError("Azimuth-dependent tables are expected") - if "honda" not in flux_file: - raise ValueError("Flux file must be from the Honda group") - if return_table: - spline_dict, flux_dict = load_3d_honda_table( - flux_file, enpow=enpow, return_table=True - ) - else: - spline_dict = load_3d_honda_table(flux_file, enpow=enpow) - spline_dict["name"] = "honda" - - if return_table: - return spline_dict, flux_dict - - return spline_dict - - -def calculate_3d_flux_weights( - true_energies, true_coszens, true_azimuths, en_splines, enpow=1, az_linear=True -): - """Calculate flux weights for given array of energy, cos(zenith) and - azimuth. - - Arrays of true energy, zenith and azimuth are expected to be for MC events, - so they are tested to be of the same length. - En_splines should be the spline for the primary of interest. The entire - dictionary is calculated in the previous function. - - Parameters - ---------- - true_energies : list or numpy array - A list of the true energies of your MC events. Pass this in GeV! - true_coszens : list or numpy array - A list of the true coszens of your MC events - true_azimuths : list or numpy array - A list of the true azimuths of your MC events. Pass this in radians! - en_splines : list of splines - A list of the initialised energy splines from the previous function - for your desired primary. - enpow : integer - The power to which the energy was raised in the construction of the - splines. If you don't know what this means, leave it as 1. - az_linear : boolean - Whether or not to linearly interpolate in the azimuthal direction. If - you don't know why this is an option, leave it as true. - - Example - ------- - Use the previous function to calculate the spline dict for the South Pole. - - spline_dict = load_3d_table('flux/honda-2015-spl-solmax.d') - - Then you must have some equal length arrays of energy, zenith and azimuth. - - ens = [3.0, 4.0, 5.0] - czs = [-0.4, 0.7, 0.3] - azs = [0.3, 1.2, 2.1] - - These are used in this function, along with whatever primary you are - interested in calculating the flux weights for. - - flux_weights = calculate_3d_flux_weights(ens, - czs, - azs, - spline_dict['numu']) - - Done! - """ - - if not isinstance(true_energies, np.ndarray): - if not isinstance(true_energies, list): - raise TypeError("true_energies must be a list or numpy array") - else: - true_energies = np.array(true_energies) - if not isinstance(true_coszens, np.ndarray): - if not isinstance(true_coszens, list): - raise TypeError("true_coszens must be a list or numpy array") - else: - true_coszens = np.array(true_coszens) - if not isinstance(true_azimuths, np.ndarray): - if not isinstance(true_azimuths, list): - raise TypeError("true_azimuths must be a list or numpy array") - else: - true_azimuths = np.array(true_azimuths) - if not ((true_coszens >= -1.0).all() and (true_coszens <= 1.0).all()): - raise ValueError("Not all coszens found between -1 and 1") - ensczs_match = len(true_energies) == len(true_coszens) - ensazs_match = len(true_energies) == len(true_azimuths) - if not (ensczs_match and ensazs_match): - raise ValueError("length of energy, coszen and azimuth arrays must " "match") - if not (true_azimuths >= 0.0).all(): - raise ValueError( - "Azimuths should be given as the angle, so should " "all be positive" - ) - - azkeys = np.linspace(15.0, 345.0, 12) - if not az_linear: - az_spline_points = np.linspace(0.0, 360.0, 13) - else: - az_spline_points = np.linspace(15.0, 375.0, 13) - czkeys = ["%.2f" % x for x in np.linspace(-0.95, 0.95, 20)] - cz_spline_points = np.linspace(-1, 1, 21) - - flux_weights = [] - for true_energy, true_coszen, true_azimuth in zip( - true_energies, true_coszens, true_azimuths - ): - true_azimuth *= 180.0 / np.pi - true_log_energy = np.log10(true_energy) - az_spline_vals = [] - for azkey in azkeys: - cz_spline_vals = [0] - for czkey in czkeys: - spval = interpolate.splev( - true_log_energy, en_splines[azkey][czkey], der=1 - ) - - cz_spline_vals.append(spval) - cz_spline_vals = np.array(cz_spline_vals) - cz_int_spline_vals = np.cumsum(cz_spline_vals) * 0.1 - cz_spline = interpolate.splrep(cz_spline_points, cz_int_spline_vals, s=0) - az_spline_vals.append(interpolate.splev(true_coszen, cz_spline, der=1)) - # Treat the azimuthal dimension in an integral-preserving manner. - # This is not recommended. - if not az_linear: - az_spline_vals = np.array(az_spline_vals) - az_spline_vals = np.insert(az_spline_vals, 0, 0) - az_int_spline_vals = np.cumsum(az_spline_vals) * 30.0 - az_spline = interpolate.splrep(az_spline_points, az_int_spline_vals, s=0) - flux_weights.append( - interpolate.splev(true_azimuth, az_spline, der=1) - / np.power(true_energy, enpow) - ) - # Treat the azimuthal dimension with a linear interpolation. - # This is the best treatment. - else: - # Make the azimuthal spline cyclic - az_spline_vals.append(az_spline_vals[0]) - # Account for the energy power that was applied in the first splines - az_spline_vals /= np.power(true_energy, enpow) - az_spline = interpolate.splrep(az_spline_points, az_spline_vals, k=1) - if true_azimuth < 15.0: - true_azimuth += 360.0 - flux_weights.append(interpolate.splev(true_azimuth, az_spline, der=0)) - flux_weights = np.array(flux_weights) - return flux_weights - - -def main(): - """This is a slightly longer example than that given in the docstring of - the calculate_flux_weights function. This will make a quick plot of the - flux at 5.0 GeV and 20.0 GeV across all of cos(zenith) for NuMu just to - make sure everything looks sensible. - - """ - from matplotlib import pyplot as plt - - spline_dict = load_2d_table("flux/honda-2015-spl-solmax-aa.d") - czs = np.linspace(-1, 1, 81) - low_ens = 5.0 * np.ones_like(czs) - high_ens = 20.0 * np.ones_like(czs) - - low_en_flux_weights = calculate_2d_flux_weights(low_ens, czs, spline_dict["numu"]) - - high_en_flux_weights = calculate_2d_flux_weights(high_ens, czs, spline_dict["numu"]) - - plt.plot(czs, low_en_flux_weights) - plt.xlabel("cos(zenith)") - plt.ylabel("NuMu Flux at 5.0 GeV") - plt.savefig("/tmp/fluxweightstest5GeV.pdf") - plt.close() - - plt.plot(czs, high_en_flux_weights) - plt.xlabel("cos(zenith)") - plt.ylabel("NuMu Flux at 20.0 GeV") - plt.savefig("/tmp/fluxweightstest20GeV.pdf") - plt.close() - - -if __name__ == "__main__": - main() diff --git a/pisa/utils/format.py b/pisa/utils/format.py deleted file mode 100644 index 1c48b4e55..000000000 --- a/pisa/utils/format.py +++ /dev/null @@ -1,1639 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Utilities for interpreting and returning formatted strings. -""" - - -from __future__ import absolute_import, division, print_function - -from collections.abc import Iterable, Sequence -from collections import OrderedDict -import decimal -from numbers import Integral, Number -import os -import re -import time - -import numpy as np -import uncertainties - -from pisa import FTYPE, ureg -from pisa.utils.flavInt import NuFlavIntGroup -from pisa.utils.log import Levels, logging, set_verbosity - - -__all__ = [ - 'WHITESPACE_RE', - 'NUMBER_RESTR', - 'NUMBER_RE', - 'HRGROUP_RESTR', - 'HRGROUP_RE', - 'IGNORE_CHARS_RE', - 'TEX_BACKSLASH_CHARS', - 'TEX_SPECIAL_CHARS_MAPPING', - 'SI_PREFIX_TO_ORDER_OF_MAG', - 'ORDER_OF_MAG_TO_SI_PREFIX', - 'BIN_PREFIX_TO_POWER_OF_1024', - 'POWER_OF_1024_TO_BIN_PREFIX', - 'split', - 'arg_str_seq_none', - 'arg_to_tuple', - 'hr_range_formatter', - 'test_hr_range_formatter', - 'list2hrlist', - 'test_list2hrlist', - 'hrlist2list', - 'hrlol2lol', - 'hrbool2bool', - 'engfmt', - 'text2tex', - 'tex_join', - 'tex_dollars', - 'default_map_tex', - 'is_tex', - 'int2hex', - 'hash2hex', - 'strip_outer_dollars', - 'strip_outer_parens', - 'make_valid_python_name', - 'sep_three_tens', - 'format_num', - 'test_format_num', - 'timediff', - 'test_timediff', - 'timestamp', - 'test_timestamp', -] - - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -WHITESPACE_RE = re.compile(r'\s') -NUMBER_RESTR = r'((?:-|\+){0,1}[0-9.]+(?:e(?:-|\+)[0-9.]+){0,1})' -"""RE str for matching signed, unsigned, and sci.-not. ("1e10") numbers.""" - -NUMBER_RE = re.compile(NUMBER_RESTR, re.IGNORECASE) -"""Regex for matching signed, unsigned, and sci.-not. ("1e10") numbers.""" - -# Optional range, e.g., --10 (which means "to negative 10"); in my -# interpretation, the "to" number should be *INCLUDED* in the list -# If there's a range, optional stepsize, e.g., --10 (which means -# "to negative 10") -HRGROUP_RESTR = ( - NUMBER_RESTR - + r'(?:-' + NUMBER_RESTR - + r'(?:\:' + NUMBER_RESTR + r'){0,1}' - + r'){0,1}' -) -HRGROUP_RE = re.compile(HRGROUP_RESTR, re.IGNORECASE) - -# Characters to ignore are anything EXCEPT the characters we use -# (the caret ^ inverts the set in the character class) -IGNORE_CHARS_RE = re.compile(r'[^0-9e:.,;+-]', re.IGNORECASE) - -TEX_BACKSLASH_CHARS = '%$#_{}' -TEX_SPECIAL_CHARS_MAPPING = { - '~': r'\textasciitilde', - '^': r'\textasciicircum', - ' ': r'\;', - 'sin': r'\sin', - 'cos': r'\cos', - 'tan': r'\tan', - #'sqrt': r'\sqrt{\,}' - #'sqrt': r'\surd' -} - -ORDER_OF_MAG_TO_SI_PREFIX = OrderedDict([ - (-24, 'y'), - (-21, 'z'), - (-18, 'a'), - (-15, 'f'), - (-6, 'μ'), - (-3, 'm'), - (-9, 'n'), - (-12, 'p'), - (0, ''), - (3, 'k'), - (6, 'M'), - (9, 'G'), - (12, 'T'), - (15, 'P'), - (18, 'E'), - (21, 'Z'), - (24, 'Y') -]) -"""Mapping of powers-of-10 to SI prefixes (orders-of-magnitude)""" - -SI_PREFIX_TO_ORDER_OF_MAG = OrderedDict() -"""Mapping of SI prefixes to powers-of-10""" -for K, V in ORDER_OF_MAG_TO_SI_PREFIX.items(): - SI_PREFIX_TO_ORDER_OF_MAG[V] = K -# Allow "u" to map to -6 (micro) as well -SI_PREFIX_TO_ORDER_OF_MAG['u'] = -6 - -POWER_OF_1024_TO_BIN_PREFIX = OrderedDict([ - (0, ''), - (1, 'Ki'), - (2, 'Mi'), - (3, 'Gi'), - (4, 'Ti'), - (5, 'Pi'), - (6, 'Ei'), - (7, 'Zi'), - (8, 'Yi') -]) -"""Mapping from powers-of-1024 to binary prefixes""" - -BIN_PREFIX_TO_POWER_OF_1024 = OrderedDict() -"""Mapping from binary prefixes to powerorders-of-1024""" -for K, V in POWER_OF_1024_TO_BIN_PREFIX.items(): - BIN_PREFIX_TO_POWER_OF_1024[V] = K - - -def split(string, sep=',', force_case=None, parse_func=None): - """Parse a string containing a separated list. - - * Before splitting the list, the string has extraneous whitespace removed - from either end. - * The strings that result after the split can have their case forced or be - left alone. - * Whitespace surrounding (but not falling between non-whitespace) in each - resulting string is removed. - * After all of the above, the value can be parsed further by a - user-supplied `parse_func`. - - Note that repeating a separator without intervening values yields - empty-string values. - - - Parameters - ---------- - string : string - The string to be split - - sep : string - Separator to look for - - force_case : None, 'lower', or 'upper' - Whether to force the case of the resulting items: None does not change - the case, while 'lower' or 'upper' change the case. - - parse_func : None or callable - If a callable is supplied, each item in the list, after the basic - parsing, is processed by `parse_func`. - - Returns - ------- - lst : list of objects - The types of the items in the list depend upon `parse_func` if it is - supplied; otherwise, all items are strings. - - Examples - -------- - >>> print(split(' One, TWO, three ', sep=',', force_case='lower')) - ['one', 'two', 'three'] - - >>> print(split('One:TWO:three', sep=':')) - ['One', 'TWO', 'three'] - - >>> print(split('one two three', sep=' ')) - ['one', '', 'two', '' , 'three'] - - >>> print(split('1 2 3', sep=' ', parse_func=int)) - [1, 2, 3] - - >>> from ast import literal_eval - >>> print(split('True; False; None; (1, 2, 3)', sep=',', - >>> parse_func=literal_eval)) - [True, False, None, (1, 2, 3)] - - """ - funcs = [] - if force_case == 'lower': - funcs.append(str.lower) - elif force_case == 'upper': - funcs.append(str.upper) - - if parse_func is not None: - if not callable(parse_func): - raise TypeError('`parse_func` must be callable; got %s instead.' - % type(parse_func)) - funcs.append(parse_func) - - if not funcs: - aggfunc = lambda x: x - elif len(funcs) == 1: - aggfunc = funcs[0] - elif len(funcs) == 2: - aggfunc = lambda x: funcs[1](funcs[0](x)) - - return [aggfunc(x.strip()) for x in str.split(str(string).strip(), sep)] - -def arg_str_seq_none(inputs, name): - """Simple input handler. - Parameters - ---------- - inputs : None, string, or iterable of strings - Input value(s) provided by caller - name : string - Name of input, used for producing a meaningful error message - Returns - ------- - inputs : None, or list of strings - Raises - ------ - TypeError if unrecognized type - """ - if isinstance(inputs, str): - inputs = [inputs] - elif isinstance(inputs, (Iterable, Sequence)): - inputs = list(inputs) - elif inputs is None: - pass - else: - raise TypeError('Input %s: Unhandled type %s' % (name, type(inputs))) - return inputs - -def arg_to_tuple(arg): - """Convert `arg` to a tuple: None becomes an empty tuple, an isolated - string becomes a tuple containing that string, and any iterable or sequence - is simply converted into a tuple. - - Parameters - ---------- - arg : str, sequence of str, iterable of str, or None - - Returns - ------- - arg_tup : tuple of str - - """ - if arg is None: - arg = tuple() - elif isinstance(arg, str): - arg = (arg,) - elif isinstance(arg, (Iterable, Sequence)): - arg = tuple(arg) - else: - raise TypeError('Unhandled type {}, arg={}'.format(type(arg), arg)) - return arg - -# TODO: allow for scientific notation input to hr*2list, etc. - -def hr_range_formatter(start, end, step): - """Format a range (sequence) in a simple and human-readable format by - specifying the range's starting number, ending number (inclusive), and step - size. - - Parameters - ---------- - start, end, step : numeric - - Notes - ----- - If `start` and `end` are integers and `step` is 1, step size is omitted. - - The format does NOT follow Python's slicing syntax, in part because the - interpretation is meant to differ; e.g., - '0-10:2' includes both 0 and 10 with step size of 2 - whereas - 0:10:2 (slicing syntax) excludes 10 - - Numbers are converted to integers if they are equivalent for more compact - display. - - Examples - -------- - >>> hr_range_formatter(start=0, end=10, step=1) - '0-10' - >>> hr_range_formatter(start=0, end=10, step=2) - '0-10:2' - >>> hr_range_formatter(start=0, end=3, step=8) - '0-3:8' - >>> hr_range_formatter(start=0.1, end=3.1, step=1.0) - '0.1-3.1:1' - - """ - if int(start) == start: - start = int(start) - if int(end) == end: - end = int(end) - if int(step) == step: - step = int(step) - if int(start) == start and int(end) == end and step == 1: - return '{}-{}'.format(start, end) - return '{}-{}:{}'.format(start, end, step) - - -def test_hr_range_formatter(): - """Unit tests for hr_range_formatter""" - logging.debug(str((hr_range_formatter(start=0, end=10, step=1)))) - logging.debug(str((hr_range_formatter(start=0, end=10, step=2)))) - logging.debug(str((hr_range_formatter(start=0, end=3, step=8)))) - logging.debug(str((hr_range_formatter(start=0.1, end=3.1, step=1.0)))) - logging.info('<< PASS : test_hr_range_formatter >>') - - -def list2hrlist(lst): - """Convert a list of numbers to a compact and human-readable string. - - Parameters - ---------- - lst : sequence - - Notes - ----- - Adapted to make scientific notation work correctly from [1]. - - References - ---------- - [1] http://stackoverflow.com/questions/9847601 user Scott B's adaptation to - Python 2 of Rik Poggi's answer to his question - - Examples - -------- - >>> list2hrlist([0, 1]) - '0,1' - >>> list2hrlist([0, 3]) - '0,3' - >>> list2hrlist([0, 1, 2]) - '0-2' - >>> utils.list2hrlist([0.1, 1.1, 2.1, 3.1]) - '0.1-3.1:1' - >>> list2hrlist([0, 1, 2, 4, 5, 6, 20]) - '0-2,4-6,20' - - """ - if isinstance(lst, Number): - lst = [lst] - lst = sorted(lst) - rtol = np.finfo(FTYPE).resolution - n = len(lst) - result = [] - scan = 0 - while n - scan > 2: - step = lst[scan + 1] - lst[scan] - if not np.isclose(lst[scan + 2] - lst[scan + 1], step, rtol=rtol): - result.append(str(lst[scan])) - scan += 1 - continue - for j in range(scan+2, n-1): - if not np.isclose(lst[j+1] - lst[j], step, rtol=rtol): - result.append(hr_range_formatter(lst[scan], lst[j], step)) - scan = j+1 - break - else: - result.append(hr_range_formatter(lst[scan], lst[-1], step)) - return ','.join(result) - if n - scan == 1: - result.append(str(lst[scan])) - elif n - scan == 2: - result.append(','.join(map(str, lst[scan:]))) - - return ','.join(result) - - -def test_list2hrlist(): - """Unit tests for list2hrlist""" - logging.debug(str((list2hrlist([0, 1])))) - logging.debug(str((list2hrlist([0, 1, 2])))) - logging.debug(str((list2hrlist([0.1, 1.1, 2.1, 3.1])))) - logging.info('<< PASS : test_list2hrlist >>') - - -def _hrgroup2list(hrgroup): - def isint(num): - """Test whether a number is *functionally* an integer""" - try: - return int(num) == FTYPE(num) - except ValueError: - return False - - def num_to_float_or_int(num): - """Return int if number is effectively int, otherwise return float""" - try: - if isint(num): - return int(num) - except (ValueError, TypeError): - pass - return FTYPE(num) - - # Strip all whitespace, brackets, parens, and other ignored characters from - # the group string - hrgroup = IGNORE_CHARS_RE.sub('', hrgroup) - if (hrgroup is None) or (hrgroup == ''): - return [] - num_str = HRGROUP_RE.match(hrgroup).groups() - range_start = num_to_float_or_int(num_str[0]) - - # If no range is specified, just return the number - if num_str[1] is None: - return [range_start] - - range_stop = num_to_float_or_int(num_str[1]) - if num_str[2] is None: - step_size = 1 if range_stop >= range_start else -1 - else: - step_size = num_to_float_or_int(num_str[2]) - all_ints = isint(range_start) and isint(step_size) - - # Make an *INCLUSIVE* list (as best we can considering floating point mumbo - # jumbo) - n_steps = np.clip( - np.floor(np.around( - (range_stop - range_start)/step_size, - decimals=12, - )), - a_min=0, a_max=np.inf - ) - lst = np.linspace(range_start, range_start + n_steps*step_size, n_steps+1) - if all_ints: - lst = lst.astype(int) - - return lst.tolist() - - -def hrlist2list(hrlst): - """Convert human-readable string specifying a list of numbers to a Python - list of numbers. - - Parameters - ---------- - hrlist : string - - Returns - ------- - lst : list of numbers - - """ - groups = re.split(r'[,; _]+', WHITESPACE_RE.sub('', hrlst)) - lst = [] - if not groups: - return lst - for group in groups: - lst.extend(_hrgroup2list(group)) - return lst - - -def hrlol2lol(hrlol): - """Convert a human-readable string specifying a list-of-lists of numbers to - a Python list-of-lists of numbers. - - Parameters - ---------- - hrlol : string - Human-readable list-of-lists-of-numbers string. Each list specification - is separated by a semicolon, and whitespace is ignored. Refer to - `hrlist2list` for list specification. - - Returns - ------- - lol : list-of-lists of numbers - - Examples - -------- - A single number evaluates to a list with a list with a single number. - - >>> hrlol2lol("1") - [[1]] - - A sequence of numbers or ranges can be specified separated by commas. - - >>> hrlol2lol("1, 3.2, 19.8") - [[1, 3.2, 19.8]] - - A range can be specified with a dash; default is a step size of 1 (or -1 if - the end of the range is less than the start of the range); note that the - endpoint is included, unlike slicing in Python. - - >>> hrlol2lol("1-3") - [[1, 2, 3]] - - The range can go from or to a negative number, and can go in a negative - direction. - - >>> hrlol2lol("-1 - -5") - [[-1, -3, -5]] - - Multiple lists are separated by semicolons, and parentheses and brackets - can be used to make it easier to understand the string. - - >>> hrlol2lol("1 ; 8 ; [(-10 - -8:2), 1]") - [[1], [8], [-10, -8, 1]] - - Finally, all of the above can be combined. - - >>> hrlol2lol("1.-3.; 9.5-10.6:0.5,3--1:-1; 12.5-13:0.8") - [[1, 2, 3], [9.5, 10.0, 10.5, 3, 2, 1, 0, -1], [12.5]] - - """ - supergroups = re.split(r'[;]+', hrlol) - return [hrlist2list(group) for group in supergroups] - - -def hrbool2bool(s): - """Convert a string that a user might input to indicate a boolean value of - either True or False and convert to the appropriate Python bool. - - * Note first that the case used in the string is ignored - * 't', 'true', '1', 'yes', and 'one' all map to True - * 'f', 'false', '0', 'no', and 'zero' all map to False - - Parameters - ---------- - s : string - - Returns - ------- - b : bool - - """ - s = str(s).strip() - if s.lower() in ['t', 'true', '1', 'yes', 'one']: - return True - if s.lower() in ['f', 'false', '0', 'no', 'zero']: - return False - raise ValueError('Could not parse input "%s" to bool.' % s) - - -def engfmt(n, sigfigs=3, decimals=None, sign_always=False): - """Format number as string in engineering format (10^(multiples-of-three)), - including the most common metric prefixes (from atto to Exa). - - Parameters - ---------- - n : scalar - Number to be formatted - sigfigs : int >= 0 - Number of significant figures to limit the result to; default=3. - decimals : int or None - Number of decimals to display (zeros filled out as necessary). If None, - `decimals` is automatically determined by the magnitude of the - significand and the specified `sigfigs`. - sign_always : bool - Prefix the number with "+" sign if number is positive; otherwise, - only negative numbers are prefixed with a sign ("-") - - """ - if isinstance(n, ureg.Quantity): - units = n.units - n = n.magnitude - else: - units = ureg.dimensionless - - # Logs don't like negative numbers... - sign = np.sign(n) - n *= sign - - mag = int(np.floor(np.log10(n))) - pfx_mag = int(np.floor(np.log10(n)/3.0)*3) - - if decimals is None: - decimals = sigfigs-1 - (mag-pfx_mag) - decimals = int(np.clip(decimals, a_min=0, a_max=np.inf)) - - round_to = decimals - if sigfigs is not None: - round_to = sigfigs-1 - (mag-pfx_mag) - - scaled_rounded = np.round(n/10.0**pfx_mag, round_to) - - sign_str = '' - if sign_always and sign > 0: - sign_str = '+' - num_str = sign_str + format(sign*scaled_rounded, '.'+str(decimals)+'f') - - # Very large or small quantities have their order of magnitude displayed - # by printing the exponent rather than showing a prefix; due to my - # inability to strip off prefix in Pint quantities (and attach my own - # prefix), just use the "e" notation. - if pfx_mag not in ORDER_OF_MAG_TO_SI_PREFIX or not units.dimensionless: - if pfx_mag == 0: - return str.strip('{0:s} {1:~} '.format(num_str, units)) - return str.strip('{0:s}e{1:d} {2:~} '.format(num_str, pfx_mag, units)) - - # Dimensionless quantities are treated separately since Pint apparently - # can't handle prefixed-dimensionless (e.g., simply "1 k", "2.2 M", etc., - # with no units attached). - #if units.dimensionless: - return '{0:s} {1:s}'.format(num_str, ORDER_OF_MAG_TO_SI_PREFIX[pfx_mag]) - - -def append_results(results_dict, result_dict): - for key, val in result_dict.items(): - if key in results_dict: - results_dict[key].append(val) - else: - results_dict[key] = [val] - - -def ravel_results(results): - for key, val in results.items(): - if hasattr(val[0], 'm'): - results[key] = np.array([v.m for v in val]) * val[0].u - -# TODO: mathrm vs. rm? -def text2tex(txt): - """Convert common characters so they show up the same as TeX""" - if txt is None: - return '' - - if is_tex(txt): - return strip_outer_dollars(txt) - - nfig = NuFlavIntGroup(txt) - if nfig: - return nfig.tex - - for c in TEX_BACKSLASH_CHARS: - txt = txt.replace(c, r'\%s'%c) - - for c, v in TEX_SPECIAL_CHARS_MAPPING.items(): - txt = txt.replace(c, '{%s}'%v) - - # A single character is taken to be a variable name, and so do not make - # roman, just wrap in braces (to avoid interference with other characters) - # and return - if len(txt) == 1: - return '%s' % txt - - return r'{\rm %s}' % txt - - -def tex_join(sep, *args): - """Join TeX-formatted strings together into one, each separated by `sep`. - Also, this strips surrounding '$' from each string before joining.""" - strs = [strip_outer_dollars(text2tex(a)) - for a in args if a is not None and a != ''] - if not strs: - return '' - return str.join(sep, strs) - - -def tex_dollars(s): - stripped = strip_outer_dollars(s) - out_lines = [] - for line in stripped.split('\n'): - stripped_line = strip_outer_dollars(line) - if stripped_line == '': - out_lines.append('') - else: - out_lines.append('$%s$' % stripped_line) - return '\n'.join(out_lines) - - -def is_tex(s): - if s is None: - return False - for c in TEX_BACKSLASH_CHARS: - if '\\'+c in s: - return True - for seq in TEX_SPECIAL_CHARS_MAPPING.values(): - if seq in s: - return True - for seq in [r'\rm', r'\mathrm', r'\theta', r'\phi']: - if seq in s: - return True - if strip_outer_dollars(s) != s: - return True - return False - - -def default_map_tex(map): - if map.tex is None or map.tex == '': - return r'{\rm %s}' % text2tex(map.name) - return strip_outer_dollars(map.tex) - - -def int2hex(i, bits, signed): - """Convert a signed or unsigned integer `bits` long to hexadecimal - representation. As many hex characters are returned to fully specify any - number `bits` in length regardless of the value of `i`. - - Parameters - ---------- - i : int - The integer to be converted. Signed integers have a range of - -2**(bits-1) to 2**(bits-1)-1), while unsigned integers have a range of - 0 to 2**(bits-1). - - bits : int - Number of bits long the representation is - - signed : bool - Whether the number is a signed integer; this is dependent upon the - representation used for numbers, and _not_ whether the value `i` is - positive or negative. - - Returns - ------- - h : string of length ceil(bits/4.0) since it takes this many hex characters - to represent a number `bits` long. - - """ - if signed: - i = 2**63 + i - assert i >= 0 - h = hex(i)[2:].replace('L', '') - return h.rjust(int(np.ceil(bits/4.0)), '0') - - -def hash2hex(hash, bits=64): - """Convert a hash value to its string hexadecimal representation. - - Parameters - ---------- - hash : integer or string - bits : integer > 0 - - Returns - ------- - hash : string - - """ - if isinstance(hash, str): - assert len(hash) == int(np.ceil(bits/4.0)) - hex_hash = hash - elif isinstance(hash, int): - hex_hash = int2hex(hash, bits=bits, signed=True) - else: - raise TypeError('Unhandled `hash` type %s' %type(hash)) - return hex_hash - - -def strip_outer_dollars(value): - """Strip surrounding dollars signs from TeX string, ignoring leading and - trailing whitespace""" - if value is None: - return '{}' - value = value.strip() - m = re.match(r'^\$(.*)\$$', value) - if m is not None: - value = m.groups()[0] - return value - - -def strip_outer_parens(value): - """Strip parentheses surrounding a string, ignoring leading and trailing - whitespace""" - if value is None: - return '' - value = value.strip() - m = re.match(r'^\{\((.*)\)\}$', value) - if m is not None: - value = m.groups()[0] - m = re.match(r'^\((.*)\)$', value) - if m is not None: - value = m.groups()[0] - return value - - -# TODO: this is relatively slow (and is called in constructors that are used -# frequently, e.g. OneDimBinning, MultiDimBinning); can we speed it up any? -RE_INVALID_CHARS = re.compile('[^0-9a-zA-Z_]') -RE_LEADING_INVALID = re.compile('^[^a-zA-Z_]+') -def make_valid_python_name(name): - """Make a name a valid Python identifier. - - From user Triptych at http://stackoverflow.com/questions/3303312 - - """ - # Remove invalid characters - name = RE_INVALID_CHARS.sub('', name) - # Remove leading characters until we find a letter or underscore - name = RE_LEADING_INVALID.sub('', name) - return name - - -def sep_three_tens(strval, direction, sep=None): - """Insert `sep` char into sequence of chars `strval`. - - Parameters - ---------- - strval : sequence of chars or string - Sequence of chars into which to insert the separator - - direction : string, one of {'left', 'right'} - Use 'left' for left of the decimal, and 'right' for right of the - decimal - - sep : None or char - Separator to insert - - Returns - ------- - formatted : list of chars - - """ - if not sep: - return strval - - direction = direction.strip().lower() - assert direction in ('left', 'right'), direction - - formatted = [] - if direction == 'left': - indices = tuple(range(len(strval)-1, -1, -1)) - edge_indices = (indices[0], indices[-1]) - delta = len(strval)-1 - for c_num in indices: - formatted = [strval[c_num]] + formatted - if (((delta-c_num)+1) % 3 == 0) and c_num not in edge_indices: - formatted = [sep] + formatted - return formatted - - indices = tuple(range(len(strval))) - edge_indices = (indices[0], indices[-1]) - for c_num in indices: - formatted = formatted + [strval[c_num]] - if ((c_num+1) % 3 == 0) and (c_num not in edge_indices): - formatted = formatted + [sep] - - return formatted - - -def format_num( - value, - sigfigs=None, - precision=None, - fmt=None, - sci_thresh=(6, -4), - exponent=None, - inf_thresh=np.infty, - trailing_zeros=False, - always_show_sign=False, - decstr='.', - thousands_sep=None, - thousandths_sep=None, - left_delimiter=None, - right_delimiter=None, - expprefix=None, - exppostfix=None, - nanstr='nan', - infstr='inf', -): - r"""Fine-grained control over formatting a number as a string. - - - Parameters - ---------- - value : numeric - The number to be formatted. - - sigfigs : int > 0, optional - Use up to this many significant figures for displaying a number. You - can use either `sigfigs` or `precision`, but not both. If neither are - specified, default is to set `sigfigs` to 8. See also `trailing_zeros`. - - precision : float, optional - Round `value` to a precision the same as the order of magnitude of - `precision`. You can use either `precision` or `sigfigs`, but not both. - If neither is specified, default is to set `sigfigs` to 8. See also - `trailing_zeros`. - - fmt : None or one of {'sci', 'eng', 'sipre', 'binpre', 'full'}, optional - Force a particular format to be used:: - * None allows the `value` and what is passed for `sci_thresh` and - `exponent` to decide whether or not to use scientific notation - * 'sci' forces scientific notation - * 'eng' uses the engineering convention of powers divisible by 3 - (10e6, 100e-9, etc.) - * 'sipre' uses powers divisible by 3 but uses SI prefixes (e.g. k, - M, G, etc.) instead of displaying the exponent - * 'binpre' uses powers of 1024 and uses IEC prefixes (e.g. Ki, Mi, - Gi, etc.) instead displaying the exponent - * 'full' forces printing all digits left and/or right of the - decimal to display the number (no exponent notation or SI/binary - prefix will be used) - Note that the display of NaN and +/-inf are unaffected by - `fmt`. - - exponent : None, integer, or string, optional - Force the number to be scaled with respect to this exponent. If a - string prefix is passed and `fmt` is None, then the SI prefix - or binary prefix will be used for the number. E.g., ``exponent=3`` - would cause the number 1 to be expressed as ``'0.001e3'`, while - ``exponent='k'`` would cause it to be displayed as ``'1 m'``. Both 'μ' - and 'u' are accepted to mean "micro". A non-``None`` value for - `exponent` forces some form of scientific/engineering notation, so - `fmt` cannot be ``'full'`` in this case. Finally, if - `fmt` is ``'binpre'`` then `exponent` is applied to 1024. - I.e., 1 maps to kibi (Ki), 2 maps to mebi (Mi), etc. - - sci_thresh : sequence of 2 integers - When to switch to scientific notation. The first integer is the order - of magnitude of `value` at or above which scientific notation will be - used. The second integer indicates the order of magnitude at or below - which the most significant digit falls for scientific notation to be - used. E.g., ``sci_thresh=(3, -3)`` means that numbers in the - ones-of-thousands or greater OR numbers in the ones-of-thousandths or - less will be displayed using scientific notation. Note that - `fmt`, if not None, overrides this behavior. Default is - (10,-5). - - inf_thresh : numeric, optional - Numbers whose magnitude is equal to or greater than this threhshold are - considered infinite and therefore displayed using `infstr` (possibly - including a sign, as appropriate). Default is np.inf. - - trailing_zeros : bool, optional - Whether to display all significant figures specified by `sigfigs`, even - if this results in trailing zeros. Default is False. - - always_show_sign : bool, optional - Always show a sign, whether number is positive or negative, and whether - exponent (if present) is positive or negative. Default is False. - - decstr : string, optional - Separator to use for the decimal point. E.g. ``decstr='.'`` or - ``decstr=','`` for mthe most common cases, but this can also be used in - TeX tables for alignment on decimal points via ``decstr='&.&'``. - Default is '.'. - - thousands_sep : None or string, optional - Separator to use between thousands, e.g. ``thousands_sep=','`` to give - results like ``'1,000,000'``, or ```thousands_sep=r'\,'`` for TeX - formatting with small spaces between thousands. Default is None. - - thousandths_sep : None or string, optional - Separator to use between thousandthss. Default is None. - - left_delimiter, right_delimiter : None or string, optional - Strings to delimit the left and right sides of the resulting string. - E.g. ``left_delimiter='${'`` and ``right_delimiter='}$'`` could be used - to delimit TeX-formatted strings, such that a number is displayed, - e.g., as ``r'${1\times10^3}$'``. Defaults are None for both. - - expprefix, exppostfix : None or string, optional - E.g. use `expprefix='e'` for simple "e" scientific notation ("1e3"), - or use `expprefix=r'\times10^{'` and `exppostfix=r'}' for - TeX-formatted scientific notation. Use a space (or tex equivalent) for - binary and SI prefixes. If scientific notation is to be used, - `expprefix` defaults to 'e'. If either SI or binary prefixes are to be - used, `expprefix` defaults to ' ' (space). In any case, `exppostfix` - defaults to None. - - nanstr : string, optional - Not-a-number (NaN) values will be displayed using this string. Default - is 'nan' (following the Numpy convention) - - infstr : string, optional - Infinite values will be displayed using this string (note that the sign - is prepended, as appropriate). Default is 'inf' (following the Numpy - convention). - - - Returns - ------- - formatted : string - - """ - with decimal.localcontext() as context: - # Ensure rounding behavior is same as that of Numpy - context.rounding = decimal.ROUND_HALF_EVEN - # Lots of comp precision to avoid floating point <--> decimal issues - context.prec = 72 - d_10 = decimal.Decimal('10') - d_1024 = decimal.Decimal('1024') - - if sigfigs is None: - if precision is None: - sigfigs = 8 - else: - precision = decimal.Decimal(precision) - order_of_precision = precision.adjusted() - else: - if precision is not None: - raise ValueError('You cannot specify both `sigfigs` and' - ' `precision`') - if not isinstance(sigfigs, Integral): - assert float(sigfigs) == int(sigfigs), \ - '`sigfigs`=%s not an int' % sigfigs - sigfigs = int(sigfigs) - assert sigfigs > 0, '`sigfigs`=%s is not > 0' % sigfigs - - if sci_thresh[0] < sci_thresh[1]: - raise ValueError( - '(`sci_thresh[0]`=%s) must be >= (`sci_thresh[1]`=%s)' - % sci_thresh - ) - assert all(isinstance(s, Integral) for s in sci_thresh), str(sci_thresh) - - if isinstance(fmt, str): - fmt = fmt.strip().lower() - assert fmt is None or fmt in ('sci', 'eng', 'sipre', 'binpre', 'full') - if fmt == 'full': - assert exponent is None - - if exponent is not None: - if fmt in ('eng', 'sipre'): - if (exponent not in SI_PREFIX_TO_ORDER_OF_MAG - and exponent not in ORDER_OF_MAG_TO_SI_PREFIX): - raise ValueError( - 'For `fmt`="{}", `exponent` is {}, but must either be' - ' an SI prefix {} or a power of 10 corresponding to' - ' these {}.'.format(fmt, - exponent, - SI_PREFIX_TO_ORDER_OF_MAG.keys(), - ORDER_OF_MAG_TO_SI_PREFIX.keys()) - ) - elif fmt == 'binpre': - if (exponent not in BIN_PREFIX_TO_POWER_OF_1024 - and exponent not in POWER_OF_1024_TO_BIN_PREFIX): - raise ValueError( - 'For `fmt`="{}", `exponent` is {}, but must either be' - ' an IEC binary prefix {} or a power of 1024' - ' corresponding to these {}.'.format( - fmt, - exponent, - BIN_PREFIX_TO_POWER_OF_1024.keys(), - POWER_OF_1024_TO_BIN_PREFIX.keys() - ) - ) - if (not isinstance(exponent, str) and not - isinstance(exponent, Integral)): - assert float(exponent) == int(exponent) - exponent = int(exponent) - - # TODO: include uncertainties and/or units in final formatted string - # TODO: scale out SI prefix if `value` is a Pint Quantity - - # Strip off units, if present - units = None - quantity_info = None - if isinstance(value, ureg.Quantity): - units = value.units if value.units != ureg.dimensionless else None - quantity_info = value.as_tuple() - value = value.magnitude - - # Strip off uncertainty, if present - stddev = None - if isinstance(value, uncertainties.UFloat): - stddev = value.std_dev - value = value.nominal_value - - # In case `value` is a singleton array - if isinstance(value, np.ndarray): - value = value.item() - - # Fill in empty strings where None might be passed in to mean the same - thousands_sep = '' if thousands_sep is None else thousands_sep - thousandths_sep = '' if thousandths_sep is None else thousandths_sep - left_delimiter = '' if left_delimiter is None else left_delimiter - right_delimiter = '' if right_delimiter is None else right_delimiter - exppostfix = '' if exppostfix is None else exppostfix - # NOTE: expprefix defaults depend on the display mode, so are set later - - if np.isnan(value): - return left_delimiter + nanstr + right_delimiter - - if np.isneginf(value) or value <= -inf_thresh: - return left_delimiter + '-' + infstr + right_delimiter - - # NOTE: ``isinf`` check must come _after_ ``neginf`` check since - # ``isinf`` returns ``True`` for both -inf and +inf - if np.isinf(value) or value >= inf_thresh: - if always_show_sign: - sign = '+' - else: - sign = '' - return left_delimiter + sign + infstr + right_delimiter - - if isinstance(value, Integral): - value = decimal.Decimal(value) - else: - value = decimal.Decimal.from_float(float(value)) - - order_of_mag = value.adjusted() - # Get the sign from the full precision `value`, before rounding - sign = '' - if value < 0: - sign = '-' - elif value > 0: - sign = '+' - - # If no value passed for `fmt`, infer the format from the - # exponent (if it's a binary or SI prefix) OR the order of magnitude of - # the number w.r.t. `sci_thresh`. - if fmt is None: - if isinstance(exponent, str): - if exponent in BIN_PREFIX_TO_POWER_OF_1024: - fmt = 'binpre' - elif exponent in SI_PREFIX_TO_ORDER_OF_MAG: - fmt = 'sipre' - else: - raise ValueError('`exponent`="%s" is not a valid SI or' - ' binary prefix' % exponent) - elif exponent is None: - if (order_of_mag >= sci_thresh[0] - or order_of_mag <= sci_thresh[1]): - fmt = 'sci' - else: - fmt = 'full' - else: - fmt = 'sci' - - # Define `exponent` where appropriate, and calculate `scaled_value` to - # account for the exponent, if there is one. - scale = 1 - if exponent is None: - if fmt == 'sci': - exponent = order_of_mag - scale = 1 / d_10**exponent - elif fmt in ('eng', 'sipre'): - exponent = (order_of_mag // 3) * 3 - scale = 1 / d_10**exponent - if fmt == 'sipre': - exponent = ORDER_OF_MAG_TO_SI_PREFIX[exponent] - elif fmt == 'binpre': - if value < 0: - raise ValueError('Binary prefix valid only for value >= 0') - elif value == 0: - exponent = 0 - scale = 1 - else: - exponent = value.ln() // d_1024.ln() - scale = 1 / d_1024**exponent - exponent = POWER_OF_1024_TO_BIN_PREFIX[exponent] - elif exponent in BIN_PREFIX_TO_POWER_OF_1024: - scale = 1 / d_1024**BIN_PREFIX_TO_POWER_OF_1024[exponent] - elif exponent in SI_PREFIX_TO_ORDER_OF_MAG: - scale = 1 / d_10**SI_PREFIX_TO_ORDER_OF_MAG[exponent] - else: - scale = 1 / d_10**exponent - - scaled_value = scale * value - - if sigfigs is not None: - leastsig_dig = scaled_value.adjusted() - (sigfigs - 1) - quantize_at = decimal.Decimal('1e%d' % leastsig_dig).normalize() - else: # only other case is that precision is specified - quantize_at = (d_10**order_of_precision * scale).normalize() - leastsig_dig = quantize_at.adjusted() - - rounded = scaled_value.quantize(quantize_at) - - # Eliminate trailing zeros in the Decimal representation - if not trailing_zeros: - rounded = rounded.normalize() - - dec_tup = rounded.as_tuple() - mantissa_digits = dec_tup.digits - decimal_position = dec_tup.exponent - - # Does the number underflow, making it effectively 0? - underflow = False - if sigfigs is not None: - if len(mantissa_digits) + decimal_position < -sigfigs: - underflow = True - decimal_position = -(sigfigs - 1) - mantissa_digits = (0,) - else: # `precision` is specified - if order_of_mag < order_of_precision: - underflow = True - mantissa_digits = (0,) - decimal_position = leastsig_dig - - n_digits = len(mantissa_digits) - chars = [str(d) for d in mantissa_digits] - if decimal_position > 0: - chars += ['0']*decimal_position - chars = sep_three_tens(chars, direction='left', sep=thousands_sep) - elif decimal_position < 0: - if abs(decimal_position) >= n_digits: - chars = ( - ['0', decstr] - + sep_three_tens( - ['0']*(-decimal_position - n_digits) + chars, - direction='right', sep=thousandths_sep - ) - ) - else: - chars = ( - sep_three_tens(chars[:decimal_position], direction='left', - sep=thousands_sep) - + [decstr] - + sep_three_tens(chars[decimal_position:], - direction='right', sep=thousandths_sep) - ) - - num_str = ''.join(chars) - - if always_show_sign or sign == '-' or underflow: - num_str = sign + num_str - - if exponent is not None: - if expprefix is None: - if fmt in ('sci', 'eng'): - expprefix = 'e' - elif fmt in ('sipre', 'binpre'): - expprefix = ' ' - else: - expprefix = '' - - if not isinstance(exponent, str): - if fmt == 'sipre': - exponent = ORDER_OF_MAG_TO_SI_PREFIX[exponent] - elif fmt == 'binpre': - exponent = POWER_OF_1024_TO_BIN_PREFIX[exponent] - - if isinstance(exponent, str): - num_str += expprefix + exponent + exppostfix - else: - if exponent < 0: - exp_sign = '' - elif always_show_sign: - exp_sign = '+' - else: - exp_sign = '' - num_str += expprefix + exp_sign + str(exponent) + exppostfix - - return left_delimiter + num_str + right_delimiter - - -def test_format_num(): - """Unit tests for the `format_num` function""" - # sci_thresh - v = format_num(100, sci_thresh=(3, -3)) - assert v == '100' - v = format_num(1000, sci_thresh=(3, -3)) - assert v == '1e3' - v = format_num(0.01, sci_thresh=(3, -3)) - assert v == '0.01' - v = format_num(0.001, sci_thresh=(3, -3)) - assert v == '1e-3' - - # trailing_zeros - v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=True) - assert v == '1.00010e-4', v - v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=False) - assert v == '1.0001e-4', v - v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=False, - sci_thresh=(7, -8)) - assert v == '0.00010001', v - v = format_num(0.00010001, sigfigs=6, exponent=None, trailing_zeros=True, - sci_thresh=(7, -20)) - assert v == '0.000100010', v - - # sigfigs and trailing_zeros - v = format_num(1, sigfigs=5, exponent=None, trailing_zeros=True) - assert v == '1.0000', v - v = format_num(1, sigfigs=5, exponent=None, trailing_zeros=False) - assert v == '1', v - v = format_num(16, sigfigs=5, exponent=None, trailing_zeros=False) - assert v == '16', v - v = format_num(160000, sigfigs=5, exponent=None, trailing_zeros=False) - assert v == '160000', v - v = format_num(123456789, sigfigs=15, exponent=None, trailing_zeros=False, - sci_thresh=(20, -20)) - assert v == '123456789', v - v = format_num(1.6e6, sigfigs=5, exponent=None, trailing_zeros=False) - assert v == '1.6e6', v - - # precision - v = format_num(1.2345, precision=1e0, trailing_zeros=True) - assert v == '1', v - v = format_num(1.2345, precision=1e-1, trailing_zeros=True) - assert v == '1.2', v - - # exponent - v = format_num(1e6, sigfigs=5, exponent='k', trailing_zeros=False) - assert v == '1000 k', v - v = format_num(0.00134, sigfigs=5, exponent='m', trailing_zeros=False) - assert v == '1.34 m', v - v = format_num(1024, exponent='Ki') - assert v == '1 Ki', v - v = format_num(1024*1000, exponent='Ki') - assert v == '1000 Ki', v - v = format_num(1024**2, exponent='Mi') - assert v == '1 Mi', v - - # displaying zero - v = format_num(0, sigfigs=5, exponent=4, trailing_zeros=True) - assert v == '0.0000e4', v - v = format_num(0, sigfigs=5, exponent=4, trailing_zeros=False) - assert v == '0e4', v - v = format_num(0, sigfigs=5, exponent=None, trailing_zeros=True) - assert v == '0.0000', v - v = format_num(0, sigfigs=5, exponent=None, trailing_zeros=False) - assert v == '0' - v = format_num(0, sigfigs=5, fmt='sci') - assert v == '0e0' - v = format_num(0, sigfigs=5, fmt='eng') - assert v == '0e0' - v = format_num(0, sigfigs=5, fmt='sipre') - assert v == '0 ' - v = format_num(0, sigfigs=5, fmt='binpre') - assert v == '0 ' - v = format_num(0, sigfigs=5, fmt='full') - assert v == '0' - - # exponent + sigfigs or precision causes underflow - v = format_num(-0.00010001, sigfigs=6, exponent=4, trailing_zeros=True) - assert v == '-0.00000e4', v - v = format_num(0.00010001, sigfigs=6, exponent=4, trailing_zeros=True) - assert v == '+0.00000e4', v - v = format_num(-0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) - assert v == '-0.0000000e4', v - v = format_num(0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) - assert v == '+0.0000000e4', v - - # exponent + precision, check sigfigs and trailing zeros... - # zeros... - v = format_num(-0.00010001, precision=1e-3, exponent=4, - trailing_zeros=True) - assert v == '-0.0000000e4', v - v = format_num(0.00010001, precision=1e-3, exponent=4, trailing_zeros=True) - assert v == '+0.0000000e4', v - # rounding at least sig digit - v = format_num(-0.00015001, precision=1e-4, exponent=4, trailing_zeros=True) - assert v == '-0.00000002e4', v - v = format_num(0.00015001, precision=1e-4, exponent=4, trailing_zeros=True) - assert v == '0.00000002e4', v - # trailing zeros - v = format_num(-0.015001, precision=1e-4, exponent=4, trailing_zeros=True) - assert v == '-0.00000150e4', v - v = format_num(0.015001, precision=1e-4, exponent=4, trailing_zeros=True) - assert v == '0.00000150e4', v - - # Test thousands_sep and thousandths_sep - v = format_num(1000.0001, sigfigs=10, trailing_zeros=True, - thousands_sep=',', thousandths_sep=' ') - assert v == '1,000.000 100', v - - # Test specials: +/-inf, nan - v = format_num(np.nan, sigfigs=10, trailing_zeros=True, - thousands_sep=',', thousandths_sep=' ') - assert v == 'nan', v - v = format_num(np.inf, infstr='INFINITY', always_show_sign=True) - assert v == '+INFINITY', v - v = format_num(-np.inf, infstr='INFINITY') - assert v == '-INFINITY', v - v = format_num(1000, inf_thresh=100) - assert v == 'inf', v - v = format_num(-1000, inf_thresh=100) - assert v == '-inf', v - - # eng and sipre with exponent - v = format_num(1000, exponent=6, precision=1e3) - assert v == '0.001e6', v - v = format_num(1000, exponent=6, precision=1e3, fmt='sipre') - assert v == '0.001 M', v - v = format_num(115e3, exponent=6, precision=1e5, fmt='sipre', - trailing_zeros=True) - assert v == '0.1 M', v - v = format_num(115e3, exponent=6, precision=1e4, fmt='sipre', - trailing_zeros=True) - assert v == '0.12 M', v - v = format_num(115e3, exponent=6, precision=1e3, fmt='sipre', - trailing_zeros=True) - assert v == '0.115 M', v - v = format_num(115e3, exponent=6, precision=1e2, fmt='sipre', - trailing_zeros=True) - assert v == '0.1150 M', v - v = format_num(115e3, exponent=6, precision=1e1, fmt='sipre', - trailing_zeros=True) - assert v == '0.11500 M', v - - # TeX formatting (use exp{pre,post}fix, {left,right}_delimiter; - # also fmt='eng', 'sipre', and 'binpre' - v = format_num( - value=12.5e3, sigfigs=4, trailing_zeros=True, fmt='eng', - expprefix=r' \, \times 10^{', - exppostfix='}', - left_delimiter='${', - right_delimiter='}$' - ) - assert v == r'${12.50 \, \times 10^{3}}$', v - v = format_num( - value=12.5e3, sigfigs=4, trailing_zeros=False, fmt='sipre', - expprefix=r' \, {\rm ', - exppostfix='}', - left_delimiter='${', - right_delimiter='}$' - ) - assert v == r'${12.5 \, {\rm k}}$', v - v = format_num( - value=12.5e3, sigfigs=4, trailing_zeros=False, fmt='binpre', - expprefix=r' \, {\rm ', - exppostfix='}', - left_delimiter='${', - right_delimiter='}$' - ) - assert v == r'${12.21 \, {\rm Ki}}$', v - - # fmt='full' - v = format_num(12.5e10, sigfigs=4, trailing_zeros=False, - fmt='full',) - assert v == '125000000000', v - - # specify both fmt='full' AND exponent (should raise exception) - try: - v = format_num( - 12.5e3, sigfigs=4, trailing_zeros=False, fmt='full', - exponent=0 - ) - except AssertionError: - pass - else: - assert False, '`fmt`="full" and `exponent` is defined' - - logging.info('<< PASS : test_format_num >>') - - -def timediff(dt_sec, hms_always=False, sec_decimals=3): - """Smart string formatting for a time difference (in seconds) - - Parameters - ---------- - dt_sec : numeric - Time difference, in seconds - hms_always : bool - * True - Always display hours, minuts, and seconds regardless of the order- - of-magnitude of dt_sec - * False - Display a minimal-length string that is meaningful, by omitting - units that are more significant than those necessary to display - dt_sec; if... - * dt_sec < 1 s - Use engineering formatting for the number. - * dt_sec is an integer in the range 0-59 (inclusive) - `sec_decimals` is ignored and the number is formatted as an - integer - See Notes below for handling of units. - (Default: False) - sec_decimals : int - Round seconds to this number of digits - - Notes - ----- - If colon notation (e.g. HH:MM:SS.xxx, MM:SS.xxx, etc.) is not used, the - number is only seconds, and is appended by a space ' ' followed by units - of 's' (possibly with a metric prefix). - - """ - sign_str = '' - sgn = 1 - if dt_sec < 0: - sgn = -1 - sign_str = '-' - dt_sec = sgn*dt_sec - - h, r = divmod(dt_sec, 3600) - m, s = divmod(r, 60) - h = int(h) - m = int(m) - - strdt = '' - if hms_always or h != 0: - strdt += format(h, '02d') + ':' - if hms_always or h != 0 or m != 0: - strdt += format(m, '02d') + ':' - - if float(s) == int(s): - s = int(s) - s_fmt = 'd' if len(strdt) == 0 else '02d' - else: - # If no hours or minutes, use SI-prefixed fmt for seconds with 3 - # decimal places - if (h == 0) and (m == 0) and not hms_always: - nearest_si_order_of_mag = ( - (decimal.Decimal.from_float(dt_sec).adjusted() // 3) * 3 - ) - sec_str = format_num(dt_sec, - precision=10**(nearest_si_order_of_mag-3), - exponent=nearest_si_order_of_mag, - fmt='sipre') - return sec_str + 's' - # Otherwise, round seconds to sec_decimals decimal digits - s = np.round(s, sec_decimals) - if len(strdt) == 0: - s_fmt = '.%df' %sec_decimals - else: - if sec_decimals == 0: - s_fmt = '02.0f' - else: - s_fmt = '0%d.%df' %(3+sec_decimals, sec_decimals) - if len(strdt) > 0: - strdt += format(s, s_fmt) - else: - strdt += format(s, s_fmt) + ' s' - - return sign_str + strdt - - -def test_timediff(): - """Unit tests for timediff function""" - v = timediff(1234) - assert v == '20:34', v - v = timediff(1234.5678) - assert v == '20:34.568', v - v = timediff(1, hms_always=True) - assert v == '00:00:01', v - v = timediff(1.1, hms_always=True, sec_decimals=3) - assert v == '00:00:01.100', v - v = timediff(1e6) - assert v == '277:46:40', v - v = timediff(1e6 + 1.5) - assert v == '277:46:41.500', v - logging.info('<< PASS : test_timediff >>') - - -def timestamp(d=True, t=True, tz=True, utc=False, winsafe=False): - """Simple utility to print out a time, date, or time+date stamp for the - time at which the function is called. - - Calling via defaults (explcitly provided here for reference) .. :: - - timestamp(d=True, t=True, tz=True, utc=False, winsafe=False) - - should be equivalent to the shell command .. :: - - date +'%Y-%m-%dT%H:%M:%S%z' - - - Parameters - ----------: - d : bool - Include date (default: True) - t : bool - Include time (default: True) - tz : bool - Include timezone offset from UTC (default: True) - utc : bool - Include UTC time/date (as opposed to local time/date) (default: False) - winsafe : bool - Omit colons between hours/minutes (default: False) - - """ - if utc: - time_tuple = time.gmtime() - else: - time_tuple = time.localtime() - - dts = '' - if d: - dts += time.strftime('%Y-%m-%d', time_tuple) - if t: - dts += 'T' - if t: - if winsafe: - dts += time.strftime('%H%M%S', time_tuple) - else: - dts += time.strftime('%H:%M:%S', time_tuple) - - if tz: - if utc: - if winsafe: - dts += time.strftime('+0000') - else: - dts += time.strftime('+0000') - else: - offset = time.strftime('%z') - if not winsafe: - offset = offset[:-2:] + '' + offset[-2::] - dts += offset - return dts - - -def test_timestamp(): - """Unit tests for timestamp function""" - date_cmd = "date +'%Y-%m-%dT%H:%M:%S%z'" - - # In case we call these on either side of a second, repeat a few times if not equal - for _ in range(10): - ref = os.popen(date_cmd).read().strip() - test = timestamp(winsafe=False) - if test == ref: - break - time.sleep(0.05) - - assert test == ref, f'{date_cmd} = "{ref}" but timestamp = "{test}"' - - logging.info('<< PASS : test_timestamp >>') - - -if __name__ == '__main__': - set_verbosity(Levels.INFO) - test_hr_range_formatter() - test_list2hrlist() - test_format_num() - test_timediff() - test_timestamp() diff --git a/pisa/utils/gaussians.py b/pisa/utils/gaussians.py deleted file mode 100644 index 6719a44f1..000000000 --- a/pisa/utils/gaussians.py +++ /dev/null @@ -1,398 +0,0 @@ -#!/usr/bin/env python - -""" -Multiple implementations of sum-of-gaussians for compatibility and speed -""" - - -from __future__ import absolute_import, division - -from argparse import ArgumentParser -from collections.abc import Iterable -from collections import OrderedDict -from math import exp, sqrt -import threading -from time import time - -import numpy as np -from scipy import stats - -from pisa import FTYPE, OMP_NUM_THREADS, NUMBA_CUDA_AVAIL, numba_jit -from pisa.utils.comparisons import recursiveEquality -from pisa.utils.log import Levels, logging, set_verbosity, tprofile - - -# TODO: if the Numba CUDA functions are defined, then other CUDA (e.g. pycuda) -# code doesn't run (possibly only when Nvidia driver is set to -# process-exclusive or thread-exclusive mode). Need to fix this behavior. (E.g. -# context that gets destroyed?) - - -__all__ = ['GAUS_IMPLEMENTATIONS', 'gaussians', 'test_gaussians'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -GAUS_IMPLEMENTATIONS = ('singlethreaded', 'multithreaded') -if NUMBA_CUDA_AVAIL: - GAUS_IMPLEMENTATIONS += ('cuda',) - -PI = FTYPE(np.pi) -TWOPI = FTYPE(2*np.pi) -SQRTPI = FTYPE(sqrt(np.pi)) -SQRT2PI = FTYPE(sqrt(2*np.pi)) -PISQ = FTYPE(np.pi*np.pi) - - -def gaussians(x, mu, sigma, weights=None, implementation=None, **kwargs): - """Sum of multiple Gaussian curves, normalized to have area of 1. - - Parameters - ---------- - x : array - Points at which to evaluate the sum of Gaussians - - mu : arrays - Means of the Gaussians to accumulate - - sigma : array - Standard deviations of the Gaussians to accumulate - - weights : array or None - Weights given to each Gaussian - - implementation : None or string - One of 'singlethreaded', 'multithreaded', or 'cuda'. Passing None, the - function will try to determine which of the implementations is best to - call. - - kwargs - Passed on to the underlying implementation - - Returns - ------- - outbuf : array - Resulting sum of Gaussians - - Notes - ----- - This function dynamically calls an appropriate implementation depending - upon the problem size, the hardware available (multi-core CPU or a GPU), - and whether the user specifies `implementation`. - - """ - # TODO: figure out which is the roughly the best function to call, if more - # than one function is available to call (i.e., really small problems are - # fastest in single core, really large `x` are probably best on GPU, and - # if/where multithreaded CPU beats GPU is still up in the air - if implementation is not None: - implementation = implementation.strip().lower() - if not implementation in GAUS_IMPLEMENTATIONS: - raise ValueError('`implementation` must be one of %s' - % GAUS_IMPLEMENTATIONS) - - # Extract a 'threads' kwarg if it's present, or default to OMP_NUM_THREADS - if 'threads' in kwargs: - threads = kwargs.pop('threads') - else: - threads = OMP_NUM_THREADS - - # Convert all inputs to arrays of correct datatype - if not isinstance(x, Iterable): - x = [x] - if not isinstance(mu, Iterable): - mu = [mu] - if not isinstance(sigma, Iterable): - sigma = [sigma] - if weights is None: - use_weights = False - weights = [-1] - else: - use_weights = True - if not isinstance(weights, Iterable): - weights = [weights] - x = np.asarray(x, dtype=FTYPE) - mu = np.asarray(mu, dtype=FTYPE) - inv_sigma = 1/np.asarray(sigma, dtype=FTYPE) - inv_sigma_sq = -0.5 * inv_sigma * inv_sigma - weights = np.asarray(weights, dtype=FTYPE) - - n_points = len(x) - n_gaussians = len(mu) - - # Normalization is computed here regardless of implementation - if use_weights: - norm = 1/(SQRT2PI * np.sum(weights)) - else: - norm = 1/(SQRT2PI * n_gaussians) - - # Instantiate an empty output buffer - outbuf = np.empty(shape=n_points, dtype=FTYPE) - - # Default to CUDA since it's generally fastest - if implementation == 'cuda' or (implementation is None - and NUMBA_CUDA_AVAIL): - logging.trace('Using CUDA Gaussians implementation') - _gaussians_cuda(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, - n_gaussians, **kwargs) - - # Use singlethreaded version if `threads` is 1 - elif (implementation == 'singlethreaded' - or implementation is None and threads == 1): - logging.trace('Using single-threaded Gaussians implementation') - _gaussians_singlethreaded( - outbuf=outbuf, x=x, mu=mu, inv_sigma=inv_sigma, - inv_sigma_sq=inv_sigma_sq, weights=weights, - n_gaussians=n_gaussians, start=0, stop=n_points, **kwargs - ) - - # Use multithreaded version otherwise - elif implementation == 'multithreaded' or threads > 1: - logging.trace('Using multi-threaded Gaussians implementation') - _gaussians_multithreaded( - outbuf=outbuf, x=x, mu=mu, inv_sigma=inv_sigma, - inv_sigma_sq=inv_sigma_sq, weights=weights, - n_gaussians=n_gaussians, threads=threads, **kwargs - ) - - else: - raise ValueError( - 'Unhandled value(s): `implementation`="%s"; note: threads="%s"' - ' and NUMBA_CUDA_AVAIL="%s"' - % (implementation, threads, NUMBA_CUDA_AVAIL) - ) - - # Now apply the normalization - return outbuf * norm - - -def _gaussians_multithreaded(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, - n_gaussians, threads=OMP_NUM_THREADS): - """Sum of multiple Gaussians, optimized to be run in multiple threads. This - dispatches the single-kernel threaded """ - n_points = len(x) - chunklen = n_points // OMP_NUM_THREADS - threads = [] - start = 0 - for i in range(OMP_NUM_THREADS): - stop = n_points if i == (OMP_NUM_THREADS - 1) else start + chunklen - thread = threading.Thread( - target=_gaussians_singlethreaded, - args=(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, n_gaussians, - start, stop) - ) - thread.start() - threads.append(thread) - start += chunklen - - for thread in threads: - thread.join() - - -@numba_jit(nopython=True, nogil=True, fastmath=True, cache=True) -def _gaussians_singlethreaded(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, - n_gaussians, start, stop): - """Sum of multiple Gaussians, optimized to be run in a single thread""" - if weights[0] != -1: - assert len(weights) == n_gaussians - for i in range(start, stop): - tot = 0.0 - for j in range(n_gaussians): - xlessmu = x[i] - mu[j] - tot += ( - exp((xlessmu*xlessmu) * inv_sigma_sq[j]) - * weights[j] * inv_sigma[j] - ) - outbuf[i] = tot - else: - assert len(weights) == 1 - for i in range(start, stop): - tot = 0.0 - for j in range(n_gaussians): - xlessmu = x[i] - mu[j] - tot += ( - exp((xlessmu*xlessmu)*inv_sigma_sq[j])*inv_sigma[j] - ) - outbuf[i] = tot - - -if NUMBA_CUDA_AVAIL: - from numba import cuda - - def _gaussians_cuda(outbuf, x, mu, inv_sigma, inv_sigma_sq, weights, - n_gaussians): - n_points = len(x) - - use_weights = True - if weights[0] == -1: - assert len(weights) == 1 - use_weights = False - - threads_per_block = 32 - blocks_per_grid = ( - (n_points + (threads_per_block - 1)) // threads_per_block - ) - - # Create empty array on GPU to store result - d_outbuf = cuda.device_array(shape=n_points, dtype=FTYPE, stream=0) - - # Copy argument arrays to GPU - d_x = cuda.to_device(x) - d_mu = cuda.to_device(mu) - d_inv_sigma = cuda.to_device(inv_sigma) - d_inv_sigma_sq = cuda.to_device(inv_sigma_sq) - if use_weights: - assert len(weights) == n_gaussians - d_weights = cuda.to_device(weights) - func = _gaussians_weighted_cuda_kernel[blocks_per_grid, # pylint: disable=unsubscriptable-object - threads_per_block] - func(d_outbuf, d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, d_weights, - n_gaussians) - else: - d_weights = None - func = _gaussians_cuda_kernel[blocks_per_grid, threads_per_block] # pylint: disable=unsubscriptable-object - func(d_outbuf, d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, n_gaussians) - - # Copy contents of GPU result to host's outbuf - d_outbuf.copy_to_host(ary=outbuf, stream=0) - - del d_x, d_mu, d_inv_sigma, d_inv_sigma_sq, d_weights, d_outbuf - - @cuda.jit(inline=True, fastmath=True) - def _gaussians_cuda_kernel(outbuf, x, mu, inv_sigma, inv_sigma_sq, - n_gaussians): - pt_idx = cuda.grid(1) # pylint: disable=not-callable - x_pt = x[pt_idx] - tot = 0.0 - for g_idx in range(n_gaussians): - xlessmu = x_pt - mu[g_idx] - tot += (exp((xlessmu*xlessmu) * inv_sigma_sq[g_idx]) - * inv_sigma[g_idx]) - outbuf[pt_idx] = tot - - @cuda.jit(inline=True, fastmath=True) - def _gaussians_weighted_cuda_kernel(outbuf, x, mu, inv_sigma, inv_sigma_sq, - weights, n_gaussians): - pt_idx = cuda.grid(1) # pylint: disable=not-callable - x_pt = x[pt_idx] - tot = 0.0 - for g_idx in range(n_gaussians): - xlessmu = x_pt - mu[g_idx] - tot += (exp((xlessmu*xlessmu) * inv_sigma_sq[g_idx]) - * weights[g_idx] * inv_sigma[g_idx]) - outbuf[pt_idx] = tot - - -def test_gaussians(test_perf=False): - """Test `gaussians` function""" - n_gaus = [1, 10, 100, 1000, 10000] if test_perf else [1, 100] - n_eval = int(1e4) if test_perf else int(1e2) - - x = np.linspace(-20, 20, n_eval) - np.random.seed(0) - mu_sigma_weight_sets = [(np.linspace(-50, 50, n), np.linspace(0.5, 100, n), - np.random.rand(n)) for n in n_gaus] - - timings = OrderedDict() - for impl in GAUS_IMPLEMENTATIONS: - timings[impl] = [] - - for mus, sigmas, weights in mu_sigma_weight_sets: - if not isinstance(mus, Iterable): - mus = [mus] - sigmas = [sigmas] - weights = [weights] - ref_unw = np.sum( - [stats.norm.pdf(x, loc=m, scale=s) for m, s in zip(mus, sigmas)], - axis=0 - )/len(mus) - ref_w = np.sum( - [stats.norm.pdf(x, loc=m, scale=s)*w - for m, s, w in zip(mus, sigmas, weights)], - axis=0 - )/np.sum(weights) - for impl in GAUS_IMPLEMENTATIONS: - t0 = time() - test_unw = gaussians(x, mu=mus, sigma=sigmas, weights=None, - implementation=impl) - dt_unw = time() - t0 - t0 = time() - test_w = gaussians(x, mu=mus, sigma=sigmas, weights=weights, - implementation=impl) - dt_w = time() - t0 - timings[impl].append((np.round(dt_unw*1000, decimals=3), - np.round(dt_w*1000, decimals=3))) - err_msgs = [] - if not recursiveEquality(test_unw, ref_unw): - err_msgs.append( - 'BAD RESULT (unweighted), n_gaus=%d, implementation=' - '"%s", max. abs. fract. diff.: %s' - %(len(mus), impl, np.max(np.abs((test_unw/ref_unw - 1)))) - ) - if not recursiveEquality(test_w, ref_w): - err_msgs.append( - 'BAD RESULT (weighted), n_gaus=%d, implementation="%s"' - ', max. abs. fract. diff.: %s' - %(len(mus), impl, np.max(np.abs((test_w/ref_w - 1)))) - ) - if err_msgs: - for err_msg in err_msgs: - logging.error(err_msg) - raise ValueError('\n'.join(err_msgs)) - - tprofile.debug( - 'gaussians() timings (unweighted) (Note:OMP_NUM_THREADS=%d; evaluated' - ' at %.0e points)', OMP_NUM_THREADS, n_eval - ) - timings_str = ' '.join([format(t, '10d') for t in n_gaus]) - tprofile.debug(' '*30 + 'Number of gaussians'.center(59)) - tprofile.debug(' %15s %s', 'impl.', timings_str) - timings_str = ' '.join(['-'*10 for t in n_gaus]) - tprofile.debug(' %15s %s', '-'*15, timings_str) - for impl in GAUS_IMPLEMENTATIONS: - # only report timings for unweighted case - timings_str = ' '.join([format(t[0], '10.3f') for t in timings[impl]]) - tprofile.debug('Timings, %15s (ms): %s', impl, timings_str) - logging.info('<< PASS : test_gaussians >>') - - -def parse_args(): - """Parse command line arguments""" - parser = ArgumentParser() - parser.add_argument( - '--test-perf', - action='store_true', - help="""Instead of unit test, run a performance test""", - ) - parser.add_argument( - '-v', - action='count', - default=Levels.WARN, - help="""Set verbosity level. Repeat for increased verbosity.""", - ) - return vars(parser.parse_args()) - - -def main(): - """Script wrapper for calling `test_gaussians`""" - kwargs = parse_args() - set_verbosity(kwargs.pop('v')) - test_gaussians(**kwargs) - - -if __name__ == "__main__": - main() diff --git a/pisa/utils/hash.py b/pisa/utils/hash.py deleted file mode 100644 index 473b27cf3..000000000 --- a/pisa/utils/hash.py +++ /dev/null @@ -1,230 +0,0 @@ -""" -Utilities for hashing objects. -""" - - -from __future__ import absolute_import, division - -import base64 -from io import IOBase -import pickle -from pickle import PickleError, PicklingError -import hashlib -import struct -from collections.abc import Iterable -from pkg_resources import resource_filename - -import numpy as np - -from pisa.utils.log import logging, set_verbosity -from pisa.utils.resources import find_resource - - -__all__ = [ - 'FAST_HASH_FILESIZE_BYTES', - 'FAST_HASH_NDARRAY_ELEMENTS', - 'FAST_HASH_STR_CHARS', - 'hash_obj', - 'hash_file', - 'test_hash_obj', - 'test_hash_file', -] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -FAST_HASH_FILESIZE_BYTES = int(1e4) -"""For a fast hash on a file object, this many bytes of the file are used""" - -FAST_HASH_NDARRAY_ELEMENTS = int(1e3) -"""For a fast hash on a numpy array or matrix, this many elements of the array -or matrix are used""" - -FAST_HASH_STR_CHARS = int(1e3) -"""For a fast hash on a string (or object's pickle string representation), this -many characters are used""" - - - -# NOTE: adding @line_profile decorator slows down function to order of 10s of -# ms even if set_verbosity(0)! - -def hash_obj(obj, hash_to='int', full_hash=True): - """Return hash for an object. Object can be a numpy ndarray or matrix - (which is serialized to a string), an open file (which has its contents - read), or any pickle-able Python object. - - Note that only the first most-significant 8 bytes (64 bits) from the MD5 - sum are used in the hash. - - Parameters - ---------- - obj : object - Object to hash. Note that the larger the object, the longer it takes to - hash. - - hash_to : string - 'i', 'int', or 'integer': First 8 bytes of the MD5 sum are interpreted - as an integer. - 'b', 'bin', or 'binary': MD5 sum digest; returns an 8-character string - 'h', 'x', 'hex': MD5 sum hexdigest, (string of 16 characters) - 'b64', 'base64': first 8 bytes of MD5 sum are base64 encoded (with '+' - and '-' as final two characters of encoding). Returns string of 11 - characters. - - full_hash : bool - If True, hash on the full object's contents (which can be slow) or if - False, hash on a partial object. For example, only a file's first kB is - read, and only 1000 elements (chosen at random) of a numpy ndarray are - hashed on. This mode of operation should suffice for e.g. a - minimization run, but should _not_ be used for storing to/loading from - disk. - - Returns - ------- - hash_val : int or string - - See also - -------- - hash_file : hash a file on disk by filename/path - - """ - if hash_to is None: - hash_to = 'int' - hash_to = hash_to.lower() - - pass_on_kw = dict(hash_to=hash_to, full_hash=full_hash) - - # TODO: convert an existing hash to the desired type, if it isn't already - # in this type - if hasattr(obj, 'hash') and obj.hash is not None and obj.hash == obj.hash: - return obj.hash - - # Handle numpy arrays and matrices specially - if isinstance(obj, (np.ndarray, np.matrix)): - if full_hash: - return hash_obj(obj.tostring(), **pass_on_kw) - len_flat = obj.size - stride = 1 + (len_flat // FAST_HASH_NDARRAY_ELEMENTS) - sub_elements = obj.flat[0::stride] - return hash_obj(sub_elements.tostring(), **pass_on_kw) - - # Handle an open file object as a special case - if isinstance(obj, IOBase): - if full_hash: - return hash_obj(obj.read(), **pass_on_kw) - return hash_obj(obj.read(FAST_HASH_FILESIZE_BYTES), **pass_on_kw) - - # Convert to string (if not one already) in a fast and generic way: pickle; - # this creates a binary string, which is fine for sending to hashlib - if not isinstance(obj, str): - try: - pkl = pickle.dumps(obj, pickle.HIGHEST_PROTOCOL) - except (PickleError, PicklingError, TypeError): - # Recurse into an iterable that couldn't be pickled - if isinstance(obj, Iterable): - return hash_obj([hash_obj(subobj) for subobj in obj], - **pass_on_kw) - else: - logging.error('Failed to pickle `obj` "%s" of type "%s"', - obj, type(obj)) - raise - obj = pkl - - if full_hash: - try: - md5hash = hashlib.md5(obj) - except TypeError: - md5hash = hashlib.md5(obj.encode()) - else: - # Grab just a subset of the string by changing the stride taken in the - # character array (but if the string is less than - # FAST_HASH_FILESIZE_BYTES, use a stride length of 1) - stride = 1 + (len(obj) // FAST_HASH_STR_CHARS) - try: - md5hash = hashlib.md5(obj[0::stride]) - except TypeError: - md5hash = hashlib.md5(obj[0::stride].encode()) - - if hash_to in ['i', 'int', 'integer']: - hash_val, = struct.unpack('>') - -# TODO: test_hash_file function requires a "standard" file to test on -def test_hash_file(): - """Unit tests for `hash_file` function""" - file_hash = hash_file(resource_filename('pisa.utils', 'hash.py')) - logging.debug(file_hash) - file_hash = hash_file(resource_filename('pisa.utils', 'hash.py'), - full_hash=False) - logging.debug(file_hash) - logging.info('<< PASS : test_hash_file >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_hash_obj() - test_hash_file() diff --git a/pisa/utils/hdf.py b/pisa/utils/hdf.py deleted file mode 100644 index fd77e2034..000000000 --- a/pisa/utils/hdf.py +++ /dev/null @@ -1,431 +0,0 @@ -"""Set of utilities for handling HDF5 file I/O""" - - -from __future__ import absolute_import - -from collections.abc import Mapping -from collections import OrderedDict -import os - -import numpy as np -import h5py -from six import string_types - -from pisa.utils.log import logging, set_verbosity -from pisa.utils.hash import hash_obj -from pisa.utils.resources import find_resource -from pisa.utils.comparisons import recursiveEquality - - -__all__ = ['HDF5_EXTS', 'from_hdf', 'to_hdf', 'test_hdf'] - -__author__ = 'S. Boeser, J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -HDF5_EXTS = ['hdf', 'h5', 'hdf5'] - - -# TODO: convert to allow reading of icetray-produced HDF5 files - - -def from_hdf(val, return_node=None, choose=None): - """Return the contents of an HDF5 file or node as a nested dict; optionally - return a second dict containing any HDF5 attributes attached to the - entry-level HDF5 entity. - - Parameters - ---------- - val : string or h5py.Group - Specifies entry-level entity - * If val is a string, it is interpreted as a filename; file is opened - as an h5py.File - * Otherwise, val must be an h5py.Group in an instantiated object - - return_node : None or string - Not yet implemented - - choose : None or list - Optionally can provide a list of variables names to parse (items not in - this list will be skipped, saving time & memory) - - Returns - ------- - data : OrderedDict with additional attr of type OrderedDict named `attrs` - Nested dictionary; keys are HDF5 node names and values contain the - contents of that node. If the entry-level entity of `val` has "attrs", - these are extracted and attached as an OrderedDict at `data.attrs`; - otherwise, this entity is an empty OrderedDict. - - """ - if return_node is not None: - raise NotImplementedError('`return_node` is not yet implemented.') - - def visit_group(obj, sdict, choose=None): - """Iteratively parse `obj` to create the dictionary `sdict`""" - name = obj.name.split('/')[-1] - - if isinstance(obj, h5py.Dataset): - if (choose is None) or (name in choose) : - sdict[name] = obj[()] - if isinstance(obj, (h5py.Group, h5py.File)): - sdict[name] = OrderedDict() - for sobj in obj.values(): - visit_group(sobj, sdict[name], choose) - - myfile = False - if isinstance(val, str): - try: - root = h5py.File(find_resource(val), 'r') - except Exception: - logging.error('Failed to load HDF5 file, `val`="%s"', val) - raise - myfile = True - else: - root = val - logging.trace('root = %s, root.values() = %s', root, root.values()) - - data = OrderedDict() - attrs = OrderedDict() - try: - # Retrieve attrs if present - if hasattr(root, 'attrs'): - attrs = OrderedDict(root.attrs) - # Run over the whole dataset - for obj in root.values(): - visit_group(obj, data, choose) - finally: - if myfile: - root.close() - - data.attrs = attrs - - return data - - -def to_hdf(data_dict, tgt, attrs=None, overwrite=True, warn=True): - """Store a (possibly nested) dictionary to an HDF5 file or branch node - within an HDF5 file (an h5py Group). - - This creates hardlinks for duplicate non-trivial leaf nodes (h5py Datasets) - to minimize storage space required for redundant datasets. Duplication is - detected via object hashing. - - NOTE: Branch nodes are sorted before storing (by name) for consistency in - the generated file despite Python dictionaries having no defined ordering - among keys. - - Parameters - ---------- - data_dict : Mapping - Dictionary, OrderedDict, or other Mapping to be stored - - tgt : str or h5py.Group - Target for storing data. If `tgt` is a str, it is interpreted as a - filename; a file is created with that name (overwriting an existing - file, if present). After writing, the file is closed. If `tgt` is an - h5py.Group, the data is simply written to that Group and it is left - open at function return. - - attrs : Mapping - Attributes to apply to the top-level entity being written. See - http://docs.h5py.org/en/latest/high/attr.html - - overwrite : bool - Set to `True` (default) to allow overwriting existing file. Raise - exception and quit otherwise. - - warn : bool - Issue a warning message if a file is being overwritten. Suppress - warning by setting to `False` (e.g. when overwriting is the desired - behaviour). - - """ - if not isinstance(data_dict, Mapping): - raise TypeError('`data_dict` only accepts top-level' - ' dict/OrderedDict/etc.') - - def store_recursively(fhandle, node, path=None, attrs=None, - node_hashes=None): - """Function for iteratively doing the work""" - path = [] if path is None else path - full_path = '/' + '/'.join(path) - node_hashes = OrderedDict() if node_hashes is None else node_hashes - - if attrs is None: - sorted_attr_keys = [] - else: - if isinstance(attrs, OrderedDict): - sorted_attr_keys = attrs.keys() - else: - sorted_attr_keys = sorted(attrs.keys()) - - if isinstance(node, Mapping): - logging.trace(' creating Group "%s"', full_path) - try: - dset = fhandle.create_group(full_path) - for key in sorted_attr_keys: - dset.attrs[key] = attrs[key] - except ValueError: - pass - - for key in sorted(node.keys()): - if isinstance(key, str): - key_str = key - else: - key_str = str(key) - logging.warning( - 'Making string from key "%s", %s for use as' - ' name in HDF5 file', key_str, type(key) - ) - val = node[key] - new_path = path + [key_str] - store_recursively(fhandle=fhandle, node=val, path=new_path, - node_hashes=node_hashes) - else: - # Check for existing node - node_hash = hash_obj(node) - if node_hash in node_hashes: - logging.trace(' creating hardlink for Dataset: "%s" -> "%s"', - full_path, node_hashes[node_hash]) - # Hardlink the matching existing dataset - fhandle[full_path] = fhandle[node_hashes[node_hash]] - return - - # For now, convert None to np.nan since h5py appears to not handle - # None - if node is None: - node = np.nan - logging.warning( - ' encountered `None` at node "%s"; converting to' - ' np.nan', full_path - ) - - # "Scalar datasets don't support chunk/filter options". Shuffling - # is a good idea otherwise since subsequent compression will - # generally benefit; shuffling requires chunking. Compression is - # not done here since it is slow, but can be done by - # post-processing the generated file(s). - if np.isscalar(node): - shuffle = False - chunks = None - else: - shuffle = True - chunks = True - # Store the node_hash for linking to later if this is more than - # a scalar datatype. Assumed that "None" has - node_hashes[node_hash] = full_path - - # -- Handle special types -- # - - # See h5py docs at - # - # https://docs.h5py.org/en/stable/strings.html#how-to-store-text-strings - # - # where using `bytes` objects (i.e., in numpy, np.string_) is - # deemed the most compatible way to encode objects, but apparently - # we don't have pytables compatibility right now. - # - # For boolean support, see - # - # https://docs.h5py.org/en/stable/faq.html#faq - - # TODO: make written hdf5 files compatible with pytables - # see docs at https://www.pytables.org/usersguide/datatypes.html - - if isinstance(node, string_types): - node = np.string_(node) - elif isinstance(node, bool): - node = np.bool_(node) # same as np.bool8 - elif isinstance(node, np.ndarray): - if issubclass(node.dtype.type, string_types): - node = node.astype(np.string_) - elif node.dtype.type is bool: - node = node.astype(np.bool_) - - logging.trace(' creating dataset at path "%s", hash %s', - full_path, node_hash) - try: - dset = fhandle.create_dataset( - name=full_path, data=node, chunks=chunks, compression=None, - shuffle=shuffle, fletcher32=False - ) - except TypeError: - try: - shuffle = False - chunks = None - dset = fhandle.create_dataset( - name=full_path, data=node, chunks=chunks, - compression=None, shuffle=shuffle, fletcher32=False - ) - except Exception: - logging.error(' full_path: "%s"', full_path) - logging.error(' chunks : %s', str(chunks)) - logging.error(' shuffle : %s', str(shuffle)) - logging.error(' node : "%s"', str(node)) - raise - - for key in sorted_attr_keys: - dset.attrs[key] = attrs[key] - - # Perform the actual operation using the dict passed in by user - if isinstance(tgt, str): - from pisa.utils.fileio import check_file_exists - fpath = check_file_exists(fname=tgt, overwrite=overwrite, warn=warn) - h5file = h5py.File(fpath, 'w') - try: - if attrs is not None: - h5file.attrs.update(attrs) - store_recursively(fhandle=h5file, node=data_dict) - finally: - h5file.close() - - elif isinstance(tgt, h5py.Group): - store_recursively(fhandle=tgt, node=data_dict, attrs=attrs) - - else: - raise TypeError('to_hdf: Invalid `tgt` type: %s' % type(tgt)) - - -def test_hdf(): - """Unit tests for hdf module""" - from shutil import rmtree - from tempfile import mkdtemp - - data = OrderedDict([ - ('top', OrderedDict([ - ('secondlvl1', OrderedDict([ - ('thirdlvl11', np.linspace(1, 100, 10000).astype(np.float64)), - ('thirdlvl12', b"this is a string"), - ('thirdlvl13', b"this is another string"), - ('thirdlvl14', 1), - ('thirdlvl15', 1.1), - ('thirdlvl16', np.float32(1.1)), - ('thirdlvl17', np.float64(1.1)), - ('thirdlvl18', np.int8(1)), - ('thirdlvl19', np.int16(1)), - ('thirdlvl110', np.int32(1)), - ('thirdlvl111', np.int64(1)), - ('thirdlvl112', np.uint8(1)), - ('thirdlvl113', np.uint16(1)), - ('thirdlvl114', np.uint32(1)), - ('thirdlvl115', np.uint64(1)), - ])), - ('secondlvl2', OrderedDict([ - ('thirdlvl21', np.linspace(1, 100, 10000).astype(np.float32)), - ('thirdlvl22', b"this is a string"), - ('thirdlvl23', b"this is another string"), - ])), - ('secondlvl3', OrderedDict([ - ('thirdlvl31', np.array(range(1000)).astype(int)), - ('thirdlvl32', b"this is a string"), - ])), - ('secondlvl4', OrderedDict([ - ('thirdlvl41', np.linspace(1, 100, 10000)), - ('thirdlvl42', b"this is a string"), - ])), - ('secondlvl5', OrderedDict([ - ('thirdlvl51', np.linspace(1, 100, 10000)), - ('thirdlvl52', b"this is a string"), - ])), - ('secondlvl6', OrderedDict([ - ('thirdlvl61', np.linspace(100, 1000, 10000)), - ('thirdlvl62', b"this is a string"), - ])), - ])) - ]) - - temp_dir = mkdtemp() - try: - fpath = os.path.join(temp_dir, 'to_hdf_noattrs.hdf5') - to_hdf(data, fpath, overwrite=True, warn=False) - loaded_data1 = from_hdf(fpath) - assert data.keys() == loaded_data1.keys() - assert recursiveEquality(data, loaded_data1), \ - str(data) + "\n" + str(loaded_data1) - - attrs = OrderedDict([ - ('float', 9.98237), - ('float32', np.float32(1.)), - ('float64', np.float64(1.)), - ('pi', np.float64(np.pi)), - - ('string', "string attribute!"), - - ('int', 1), - ('int8', np.int8(1)), - ('int16', np.int16(1)), - ('int32', np.int32(1)), - ('int64', np.int64(1)), - - ('uint8', np.uint8(1)), - ('uint16', np.uint16(1)), - ('uint32', np.uint32(1)), - ('uint64', np.uint64(1)), - - ('bool', True), - ('bool8', np.bool8(True)), - ('bool_', np.bool_(True)), - ]) - - attr_type_checkers = { - "float": lambda x: isinstance(x, float), - "float32": lambda x: x.dtype == np.float32, - "float64": lambda x: x.dtype == np.float64, - "pi": lambda x: x.dtype == np.float64, - - "string": lambda x: isinstance(x, string_types), - - "int": lambda x: isinstance(x, int), - "int8": lambda x: x.dtype == np.int8, - "int16": lambda x: x.dtype == np.int16, - "int32": lambda x: x.dtype == np.int32, - "int64": lambda x: x.dtype == np.int64, - - "uint8": lambda x: x.dtype == np.uint8, - "uint16": lambda x: x.dtype == np.uint16, - "uint32": lambda x: x.dtype == np.uint32, - "uint64": lambda x: x.dtype == np.uint64, - - "bool": lambda x: isinstance(x, bool), - "bool8": lambda x: x.dtype == np.bool8, - "bool_": lambda x: x.dtype == np.bool_, - } - - fpath = os.path.join(temp_dir, 'to_hdf_withattrs.hdf5') - to_hdf(data, fpath, attrs=attrs, overwrite=True, warn=False) - loaded_data2 = from_hdf(fpath) - loaded_attrs = loaded_data2.attrs - assert data.keys() == loaded_data2.keys() - assert attrs.keys() == loaded_attrs.keys(), \ - '\n' + str(attrs.keys()) + '\n' + str(loaded_attrs.keys()) - assert recursiveEquality(data, loaded_data2) - assert recursiveEquality(attrs, loaded_attrs) - - for key, val in attrs.items(): - tgt_type_checker = attr_type_checkers[key] - assert tgt_type_checker(val), \ - "key '%s': val '%s' is type '%s'" % \ - (key, val, type(loaded_attrs[key])) - finally: - rmtree(temp_dir) - - logging.info('<< PASS : test_hdf >>') - - -if __name__ == "__main__": - set_verbosity(1) - test_hdf() diff --git a/pisa/utils/hdfchain.py b/pisa/utils/hdfchain.py deleted file mode 100755 index 4be7c9f21..000000000 --- a/pisa/utils/hdfchain.py +++ /dev/null @@ -1,146 +0,0 @@ -""" -class to access hdf5 files chained together. -""" -from __future__ import print_function - - -import numpy as n -import tables -from glob import glob -from collections import defaultdict - - -__all__ = ['HDFTableProxy', 'TableAccessor', 'HDFChain'] - - -class HDFTableProxy(object): - def __init__(self, table, files): - self.path = str(table._v_pathname) - self._v_dtype = table.description._v_dtype - self.files = files - - def read(self): - # first loop to calculate number of rows - lengths = n.zeros(len(self.files), dtype=int) - for i, file in enumerate(self.files): - try: - lengths[i] = len(file.getNode(self.path)) - except tables.NoSuchNodeError: - print("WARN: node %s does not exist in file %s" % (self.path, file.filename)) - lengths[i] = 0 - - # create result array ... - result = n.zeros(lengths.sum(), dtype=self._v_dtype) - - # .. and fill it - for i, file in enumerate(self.files): - if lengths[i] == 0: - continue - result[lengths[:i].sum():lengths[:i].sum()+lengths[i]] = file.getNode(self.path).read() - - return result - - def read_iter(self): - for i, file in enumerate(self.files): - yield file.getNode(self.path).read() - - def col_iter(self, colname): - for i, file in enumerate(self.files): - yield file.getNode(self.path).col(colname) - - def col(self, colname): - dtype = self._v_dtype[colname] - # first loop to calculate number of rows - lengths = n.zeros(len(self.files), dtype=int) - #print "INFO: counting rows" - for i, file in enumerate(self.files): - try: - lengths[i] = len(file.getNode(self.path)) - except tables.NoSuchNodeError: - print("WARN: node %s does not exist in file %s" % (self.path, file.filename)) - lengths[i] = 0 - - # create result array ... - result = n.zeros(lengths.sum(), dtype=dtype) - - # .. and fill it - for i, file in enumerate(self.files): - #print "INFO: read %d/%d" % (i+1, len(self.files)) - if lengths[i] == 0: - continue - result[lengths[:i].sum():lengths[:i].sum()+lengths[i]] = file.getNode(self.path).col(colname) - - return result - - def __len__(self): - length = 0 - for i, file in enumerate(self.files): - length += len(file.getNode(self.path)) - return length - - def __repr__(self): - return ("chained table with %d files:\n" % len(self.files))+self.files[0].getNode(self.path).__repr__() - -class TableAccessor(object): - def __init__(self, tabledict): - for tabname, proxy in tabledict.items(): - self.__dict__[tabname] = proxy - - def __repr__(self): - return ", ".join([key for (key,value) in self.__dict__.items() if type(value) is HDFTableProxy]) - -class HDFChain(object): - def __init__(self, files, maxdepth=1, verbose=False, **kwargs): - """ - setup a chain of hdf files. - files is either a list of filenames or a glob string - kwargs are passed to tables.openFile (e.g. NODE_CACHE_SLOTS) - """ - - self.files = list() - self._tables = defaultdict(HDFTableProxy) - self.verbose = verbose - self.pathes = dict() - - if self.verbose: - print("opening files in chain...") - if type(files) is list: - if len(files) == 0: - raise ValueError("provided file list is empty!") - self.files = [tables.openFile(fname, **kwargs) for fname in files ] - elif type(files) is str: - self.files = [tables.openFile(fname, **kwargs) for fname in sorted(glob(files)) ] - if len(self.files) == 0: - raise ValueError("glob string matches no file!") - else: - raise ValueError("parameter files must be either a list of filenames or a globstring") - - - file = self.files[0] - if self.verbose: - print("walking through first file %s" % file.filename) - for table in file.walkNodes(classname="Table"): - if table._v_depth > maxdepth: - continue - if table.name in self._tables: - print("WARN: skipping additional occurence of table %s at %s (using %s)!" % (table.name, - table._v_pathname, self._tables[table.name].path)) - continue - else: - proxy = HDFTableProxy(table, self.files) - self._tables[table.name] = proxy - self.pathes[table._v_pathname] = proxy - - self.root = TableAccessor(self._tables) - - def __del__(self): - for tabname, tabproxy in self._tables.items(): - tabproxy.file = None - - for file in self.files: - file.close() - - - def getNode(self, path): - return self.pathes[path] - diff --git a/pisa/utils/hypersurface/__init__.py b/pisa/utils/hypersurface/__init__.py deleted file mode 100644 index 89252bbde..000000000 --- a/pisa/utils/hypersurface/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .hypersurface import * -# with the switch to Python 3.7 this did not get imported automatically anymore... why?! -from .hypersurface import get_hypersurface_file_name -from .hyper_interpolator import * -from .hypersurface_plotting import * \ No newline at end of file diff --git a/pisa/utils/hypersurface/hyper_interpolator.py b/pisa/utils/hypersurface/hyper_interpolator.py deleted file mode 100644 index 805aec566..000000000 --- a/pisa/utils/hypersurface/hyper_interpolator.py +++ /dev/null @@ -1,1039 +0,0 @@ -""" -Classes and methods needed to do hypersurface interpolation over arbitrary parameters. -""" - -__all__ = ['HypersurfaceInterpolator', 'run_interpolated_fit', 'prepare_interpolated_fit', - 'assemble_interpolated_fits', 'load_interpolated_hypersurfaces', 'pipeline_cfg_from_states', - 'serialize_pipeline_cfg', 'get_incomplete_job_idx'] - -__author__ = 'T. Stuttard, A. Trettin' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -import os -import collections -import copy - -import numpy as np -from scipy import interpolate -from .hypersurface import Hypersurface, HypersurfaceParam, load_hypersurfaces -from pisa import FTYPE, ureg -from pisa.utils import matrix -from pisa.utils.jsons import from_json, to_json -from pisa.utils.fileio import from_file, to_file -from pisa.core.pipeline import Pipeline -from pisa.core.binning import MultiDimBinning, is_binning -from pisa.core.map import Map -from pisa.core.param import Param, ParamSet -from pisa.utils.resources import find_resource -from pisa.utils.fileio import mkdir -from pisa.utils.log import logging, set_verbosity -from pisa.utils.comparisons import ALLCLOSE_KW -from uncertainties import ufloat, correlated_values -from uncertainties import unumpy as unp - -class HypersurfaceInterpolator(object): - """Factory for interpolated hypersurfaces. - - After being initialized with a set of hypersurface fits produced at different - parameters, it uses interpolation to produce a Hypersurface object - at a given point in parameter space using scipy's `RegularGridInterpolator`. - - The interpolation is piecewise-linear between points. All points must lie on a - rectilinear ND grid. - - Parameters - ---------- - interpolation_param_spec : dict - Specification of interpolation parameter grid of the form:: - interpolation_param_spec = { - 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} - 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} - ... - 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} - } - where values are given as :obj:`Quantity`. - hs_fits : list of dict - list of dicts with hypersurfacesthat were fit at the points of the parameter mesh - defined by interpolation_param_spec - ignore_nan : bool - Ignore empty bins in hypersurfaces. The intercept in those bins is set to 1 and - all slopes are set to 0. - - Notes - ----- - Be sure to give a support that covers the entire relevant parameter range and a - good distance beyond! To prevent minimization failure from NaNs, extrapolation - is used if hypersurfaces outside the support are requested but needless to say - these numbers are unreliable. - - See Also - -------- - scipy.interpolate.RegularGridInterpolator : - class used for interpolation - """ - - def __init__(self, interpolation_param_spec, hs_fits, ignore_nan=True): - self.ndim = len(interpolation_param_spec.keys()) - # key ordering is important to guarantee that dimensions stay consistent - msg = "interpolation params must be specified as a dict with ordered keys" - assert isinstance(interpolation_param_spec, collections.OrderedDict), msg - for k, v in interpolation_param_spec.items(): - assert set(v.keys()) == {"values", "scales_log"} - assert isinstance(v["values"], collections.abc.Sequence) - self.interp_param_spec = interpolation_param_spec - reference_hs = hs_fits[0]["hs_fit"] - # we are going to produce the hypersurface from a state that is the same - # as the reference, only the coefficients and covariance matrices are - # injected from the interpolation. - self._reference_state = copy.deepcopy(reference_hs.serializable_state) - # for cleanliness we wipe numbers from the original state - self._reference_state["intercept_sigma"] = np.nan - self._reference_state["fit_maps_norm"] = None - self._reference_state["fit_maps_raw"] = None - self._reference_state["fit_chi2"] = np.nan - for param in self._reference_state['params'].values(): - param['fit_coeffts_sigma'] = np.full_like( - param['fit_coeffts_sigma'], np.nan) - # Instead of holding numbers, these coefficients and covariance matrices are - # interpolator objects the produce them at the requested point. - # The shape of fit_coeffts is [binning ..., fit coeffts] - self.coeff_shape = reference_hs.fit_coeffts.shape - self.coefficients = None - # The shape of fit_cov_mat is [binning ..., fit coeffts, fit coeffts] - self.covars_shape = reference_hs.fit_cov_mat.shape - self.covars = None - - # We now need to massage the fit coefficients into the correct shape - # for interpolation. - # The dimensions of the interpolation parameters come first, the dimensions - # of the hypersurface coefficients comes last. - self.interp_shape = tuple(len(v["values"]) for v in self.interp_param_spec.values()) - # dimension is [interp_shape, binning..., fit coeffts] - self._coeff_z = np.zeros(self.interp_shape + self.coeff_shape) - # dimension is [interp_shape, binning..., fit coeffts, fit coeffts] - self._covar_z = np.zeros(self.interp_shape + self.covars_shape) - # Here we use the same indexing as below in `fit_hypersurfaces` - for i, idx in enumerate(np.ndindex(self.interp_shape)): - # As an additional safety measure, we check that the parameters are what - # we expect to find at this index. - expected_params = dict( - (n, self.interp_param_spec[n]["values"][idx[j]]) - for j, n in enumerate(self.interp_param_spec.keys()) - ) - param_values = hs_fits[i]["param_values"] - msg = ("The stored values where hypersurfaces were fit do not match those" - "in the interpolation grid.") - assert np.all([expected_params[n].m == param_values[n].m - for n in self.interp_param_spec.keys()]), msg - self._coeff_z[idx] = hs_fits[i]["hs_fit"].fit_coeffts - self._covar_z[idx] = hs_fits[i]["hs_fit"].fit_cov_mat - - grid_coords = list( - np.array([val.m for val in val_list["values"]]) - for val_list in self.interp_param_spec.values() - ) - self.param_bounds = [(np.min(grid_vals), np.max(grid_vals)) - for grid_vals in grid_coords] - # If a parameter scales as log, we give the log of the parameter to the - # interpolator. We must not forget to do this again when we call the - # interpolator later! - for i, param_name in enumerate(self.interpolation_param_names): - if self.interp_param_spec[param_name]["scales_log"]: - grid_coords[i] = np.log10(grid_coords[i]) - self.coefficients = interpolate.RegularGridInterpolator( - grid_coords, - self._coeff_z, - # We disable extrapolation, but clip parameter values inside the valid - # range. - bounds_error=True, fill_value=None - ) - self.covars = interpolate.RegularGridInterpolator( - grid_coords, - self._covar_z, - bounds_error=True, fill_value=None - ) - # In order not to spam warnings, we only want to warn about non positive - # semi definite covariance matrices once for each bin. We store the bin - # indeces for which the warning has already been issued. - self.covar_bins_warning_issued = [] - self.ignore_nan = ignore_nan - - @property - def interpolation_param_names(self): - return list(self.interp_param_spec.keys()) - - @property - def param_names(self): - return list(self._reference_state["params"].keys()) - - @property - def binning(self): - binning = self._reference_state["binning"] - if not is_binning(binning) : - binning = MultiDimBinning(**binning) - return binning - - @property - def num_interp_params(self): - return len(self.interp_param_spec.keys()) - - def get_hypersurface(self, **param_kw): - """ - Get a Hypersurface object with interpolated coefficients. - - Parameters - ---------- - **param_kw - Parameters are given as keyword arguments, where the names - of the arguments must match the names of the parameters over - which the hypersurfaces are interpolated. The values - are given as :obj:`Quantity` objects with units. - """ - assert set(param_kw.keys()) == set(self.interp_param_spec.keys()), "invalid parameters" - # getting param magnitudes in the same units as the parameter specification - x = np.array([ - param_kw[p].m_as(self.interp_param_spec[p]["values"][0].u) - # we have checked that this is an OrderedDict so that the order of x is not - # ambiguous here - for p in self.interp_param_spec.keys() - ]) - assert len(x) == len(self.param_bounds) - for i, bounds in enumerate(self.param_bounds): - x[i] = np.clip(x[i], *bounds) - # if a parameter scales as log, we have to take the log here again - for i, param_name in enumerate(self.interpolation_param_names): - if self.interp_param_spec[param_name]["scales_log"]: - # We must be strict with raising errors here, because otherwise - # the Hypersurface will suddenly have NaNs everywhere! This shouldn't - # happen because we clip values into the valid parameter range. - if x[i] <= 0: - raise RuntimeError("A log-scaling parameter cannot become zero " - "or negative!") - x[i] = np.log10(x[i]) - - state = copy.deepcopy(self._reference_state) - # fit covariance matrices are stored directly in the state while fit coeffts - # must be assigned with the setter method... - # need squeeze here because the RegularGridInterpolator always puts another - # dimension around the output - state["fit_cov_mat"] = np.squeeze(self.covars(x)) - assert state["fit_cov_mat"].shape == self.covars_shape - for idx in np.ndindex(state['fit_cov_mat'].shape): - if self.ignore_nan: continue - assert np.isfinite(state['fit_cov_mat'][idx]), ("invalid cov matrix " - f"element encountered at {param_kw} in loc {idx}") - # check covariance matrices for symmetry, positive semi-definiteness - for bin_idx in np.ndindex(state['fit_cov_mat'].shape[:-2]): - m = state['fit_cov_mat'][bin_idx] - if self.ignore_nan and np.any(~np.isfinite(m)): - state['fit_cov_mat'][bin_idx] = np.identity(m.shape[0]) - m = state['fit_cov_mat'][bin_idx] - assert np.allclose( - m, m.T, rtol=ALLCLOSE_KW['rtol']*10.), f'cov matrix not symmetric in bin {bin_idx}' - if not matrix.is_psd(m): - state['fit_cov_mat'][bin_idx] = matrix.fronebius_nearest_psd(m) - if not bin_idx in self.covar_bins_warning_issued: - logging.warn( - f'Invalid covariance matrix fixed in bin: {bin_idx}') - self.covar_bins_warning_issued.append(bin_idx) - hypersurface = Hypersurface.from_state(state) - coeffts = np.squeeze(self.coefficients(x)) # calls interpolator - assert coeffts.shape == self.coeff_shape - # check that coefficients exist and if not replace with default values - for idx in np.ndindex(self.coeff_shape): - if self.ignore_nan and ~np.isfinite(coeffts[idx]): - coeffts[idx] = 1 if idx[-1] == 0 else 0 # set intercept to 1, slopes 0 - assert np.isfinite(coeffts[idx]), ("invalid coeff encountered at " - f"{param_kw} in loc {idx}") - # the setter method defined in the Hypersurface class takes care of - # putting the coefficients in the right place in their respective parameters - hypersurface.fit_coeffts = coeffts - return hypersurface - - def _make_slices(self, *xi): - """Make slices of hypersurfaces for plotting. - - In some covariance matrices, the spline fits are corrected to make - the matrix positive semi-definite. The slices produced by this function - include all of those effects. - - Parameters - ---------- - xi : list of ndarray - Points at which the hypersurfaces are to be evaluated. The length of the - list must equal the number of parameters, each ndarray in the list must have - the same shape (slice_shape). - - Returns - ------- - coeff_slices : numpy.ndarray - slices in fit coefficients. Size: (binning..., number of coeffs) + slice_shape - covar_slices : numpy.ndarray - slices in covariance matrix elements. - Size: (binning..., number of coeffs, number of coeffs) + slice_shape - """ - slice_shape = xi[0].shape - for x in xi: - assert x.shape == slice_shape - assert len(xi) == self.num_interp_params - coeff_slices = np.zeros(self.coeff_shape + slice_shape) - covar_slices = np.zeros(self.covars_shape + slice_shape) - for idx in np.ndindex(slice_shape): - pars = collections.OrderedDict() - for i, name in enumerate(self.interpolation_param_names): - pars[name] = xi[i][idx] - hs = self.get_hypersurface(**pars) - slice_idx = (Ellipsis,) + idx - coeff_slices[slice_idx] = hs.fit_coeffts - covar_slices[slice_idx] = hs.fit_cov_mat - return coeff_slices, covar_slices - - def plot_fits_in_bin(self, bin_idx, ax=None, n_steps=20, **param_kw): - """ - Plot the coefficients as well as covariance matrix elements as a function - of the interpolation parameters. - - Parameters - ---------- - bin_idx : tuple - index of the bin for which to plot the fits - ax : 2D array of axes, optional - axes into which to place the plots. If None (default), - appropriate axes will be generated. Must have at least - size (n_coeff, n_coeff + 1). - n_steps : int, optional - number of steps to plot between minimum and maximum - **param_kw : - Parameters to be fixed when producing slices. If the interpolation - is in N-D, then (N-2) parameters need to be fixed to produce 2D plots - of the remaining 2 parameters and (N-1) need to be fixed to produce a - 1D slice. - """ - plot_dim = self.ndim - len(param_kw.keys()) - assert plot_dim in [1, 2], "plotting only supported in 1D or 2D" - import matplotlib.pyplot as plt - n_coeff = self.coeff_shape[-1] - hs_param_names = list(self._reference_state['params'].keys()) - hs_param_labels = ["intercept"] + [f"{p} p{i}" for p in hs_param_names - for i in range(self._reference_state['params'][p]['num_fit_coeffts'])] - - fig = None - if ax is None: - fig, ax = plt.subplots(nrows=n_coeff, ncols=n_coeff+1, - squeeze=False, sharex=True, - figsize=(3+(5*(n_coeff+1)), 2+(3*n_coeff)) ) - # remember whether the plots need log scale or not, by default not - x_is_log = False - y_is_log = False - - # names of the variables we are plotting - plot_names = set(self.interpolation_param_names) - set(param_kw.keys()) - if plot_dim == 1: - x_name = list(plot_names)[0] - else: - x_name, y_name = list(plot_names) - - # in both 1D and 2D cases, we always plot at least an x-variable - x_unit = self.interp_param_spec[x_name]["values"][0].u - # we need the magnitudes here so that units are unambiguous when we make - # the linspace/geomspace for plotting - x_mags = [v.m_as(x_unit) for v in self.interp_param_spec[x_name]["values"]] - if self.interp_param_spec[x_name]["scales_log"]: - x_plot = np.geomspace(np.min(x_mags), np.max(x_mags), n_steps) - x_is_log = True - else: - x_plot = np.linspace(np.min(x_mags), np.max(x_mags), n_steps) - # we put the unit back later - if plot_dim == 1: - # To make slices, we need to set any variables we do not plot over to the - # value given in param_kw. - slice_args = [] - # We need to make sure that we give the values in the correct order! - for n in self.interpolation_param_names: - if n == x_name: - slice_args.append(x_plot * x_unit) - elif n in param_kw.keys(): - # again, insure that the same unit is used that went into the - # interpolation - param_unit = self.interp_param_spec[n]["values"][0].u - slice_args.append( - np.full(x_plot.shape, param_kw[n].m_as(param_unit)) * param_unit - ) - else: - raise ValueError("parameter neither specified nor plotted") - coeff_slices, covar_slices = self._make_slices(*slice_args) - else: - # if we are in 2D, we need to do the same procedure again for the y-variable - y_unit = self.interp_param_spec[y_name]["values"][0].u - y_mags = [v.m_as(y_unit) for v in self.interp_param_spec[y_name]["values"]] - if self.interp_param_spec[y_name]["scales_log"]: - # we add one step to the size in y so that transposition is unambiguous - y_plot = np.geomspace(np.min(y_mags), np.max(y_mags), n_steps + 1) - y_is_log = True - else: - y_plot = np.linspace(np.min(y_mags), np.max(y_mags), n_steps + 1) - - x_mesh, y_mesh = np.meshgrid(x_plot, y_plot) - slice_args = [] - for n in self.interpolation_param_names: - if n == x_name: - slice_args.append(x_mesh * x_unit) - elif n == y_name: - slice_args.append(y_mesh * y_unit) - elif n in param_kw.keys(): - # again, insure that the same unit is used that went into the - # interpolation - param_unit = self.interp_param_spec[n]["values"][0].u - slice_args.append( - np.full(x_mesh.shape, param_kw[n].m_as(param_unit)) * param_unit - ) - else: - raise ValueError("parameter neither specified nor plotted") - coeff_slices, covar_slices = self._make_slices(*slice_args) - - # first column plots fit coefficients - for i in range(n_coeff): - z_slice = coeff_slices[bin_idx][i] - if plot_dim == 1: - ax[i, 0].plot(x_plot, z_slice, label='interpolation') - # Plotting the original input points only works if the interpolation - # is in 1D. If we are plotting a 1D slice from a 2D interpolation, this - # does not work. - # The number of fit points is the first dimension in self._coeff_z - if plot_dim == self.ndim: - slice_idx = (Ellipsis,) + bin_idx + (i,) - ax[i, 0].scatter(x_mags, self._coeff_z[slice_idx], - color='k', marker='x', label='fit points') - ax[i, 0].set_ylabel(hs_param_labels[i]) - else: - pc = ax[i, 0].pcolormesh(x_mesh, y_mesh, z_slice) - cbar = plt.colorbar(pc, ax=ax[i, 0]) - cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0)) - ax[i, 0].set_ylabel(y_name) - ax[i, 0].set_xlabel(x_name) - - # later column plots the elements of the covariance matrix - for j in range(0, n_coeff): - z_slice = covar_slices[bin_idx][i, j] - if plot_dim == 1: - ax[i, j+1].plot(x_plot, z_slice, label='interpolation') - # Same problem as above, only in 1D case can this be shown - # the number of points is the first dim in self._covar_z - if plot_dim == self.ndim: - coeff_idx = (Ellipsis,) + bin_idx + (i, j) - ax[i, j+1].scatter(x_mags, self._covar_z[coeff_idx], - color='k', marker='x', label='fit points') - else: - pc = ax[i, j+1].pcolormesh(x_mesh, y_mesh, z_slice) - cbar = plt.colorbar(pc, ax=ax[i, j+1]) - cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0)) - ax[i, j+1].set_ylabel(y_name) - ax[i, j+1].set_xlabel(x_name) - - if plot_dim == 1: - # in the 1D case, labels can be placed on the x and y axes - for j in range(n_coeff+1): - ax[-1, j].set_xlabel(x_name) - ax[0, 0].set_title('coefficient') - for j in range(n_coeff): - ax[0, j+1].set_title(f'cov. {hs_param_labels[j]}') - else: - # in the 2D case, we need separate annotations - rows = hs_param_labels - cols = ["coefficient"] + [f"cov. {hl}" for hl in hs_param_labels] - pad = 20 - for a, col in zip(ax[0], cols): - a.annotate(col, xy=(0.5, 1), xytext=(0, pad), - xycoords='axes fraction', textcoords='offset points', - size='x-large', ha='center', va='baseline') - - for a, row in zip(ax[:, 0], rows): - a.annotate(row, xy=(0, 0.5), xytext=(-a.yaxis.labelpad - pad, 0), - xycoords=a.yaxis.label, textcoords='offset points', - size='x-large', ha='right', va='center') - for i, j in np.ndindex((n_coeff, n_coeff+1)): - if x_is_log: ax[i, j].set_xscale("log") - if y_is_log: ax[i, j].set_yscale("log") - ax[i, j].grid() - if plot_dim == 1: - ax[i, j].legend() - # ax[i, j].relim() - # ax[i, j].autoscale_view() - if not x_is_log: - ax[i, j].ticklabel_format(style='sci', scilimits=(0, 0), axis="x") - if not y_is_log: - ax[i, j].ticklabel_format(style='sci', scilimits=(0, 0), axis="y") - - if fig is not None : - fig.tight_layout() - if plot_dim == 2: - fig.subplots_adjust(left=0.15, top=0.95) - return fig - else : - return - - -def pipeline_cfg_from_states(state_dict): - """Recover a pipeline cfg containing PISA objects from a raw state. - - When a pipeline configuration is stored to JSON, the PISA objects turn into - their serialized states. This function looks through the dictionary returned by - `from_json` and recovers the PISA objects such as `ParamSet` and `MultiDimBinning`. - - It should really become part of PISA file I/O functionality to read and write - PISA objects inside dictionaries/lists into a JSON and be able to recover - them... - """ - - # TODO: Make this a core functionality of PISA - - # This is just a mess... some objects have a `from_state` method, some take the - # unpacked state dict as input, some take the state... - - pipeline_cfg = collections.OrderedDict() - for stage_key in state_dict.keys(): - # need to check all of this manually... no automatic way to do it :( - if stage_key == "pipeline": - pipeline_cfg[stage_key] = copy.deepcopy(state_dict[stage_key]) - pipeline_cfg[stage_key]["output_key"] = tuple( - pipeline_cfg[stage_key]["output_key"]) - binning_state = pipeline_cfg[stage_key]["output_binning"] - pipeline_cfg[stage_key]["output_binning"] = MultiDimBinning(**binning_state) - continue - # undo what we did in `serialize_pipeline_cfg` by splitting the keys into tuples - tuple_key = tuple(stage_key.split("__")) - pipeline_cfg[tuple_key] = copy.deepcopy(state_dict[stage_key]) - for k in ["calc_mode", "apply_mode", "node_mode"]: - if k in pipeline_cfg[tuple_key]: - if isinstance(pipeline_cfg[tuple_key][k], collections.abc.Mapping): - pipeline_cfg[tuple_key][k] = MultiDimBinning( - **pipeline_cfg[tuple_key][k]) - if "params" in pipeline_cfg[tuple_key].keys(): - pipeline_cfg[tuple_key]["params"] = ParamSet( - pipeline_cfg[tuple_key]["params"]) - # if any stage takes any other arguments that we didn't think of here, they - # won't work - return pipeline_cfg - -def serialize_pipeline_cfg(pipeline_cfg): - """Turn a pipeline configuration into something we can store to JSON. - - It doesn't work by default because tuples are not allowed as keys when storing to - JSON. All we do is to turn the tuples into strings divided by a double underscore. - """ - serializable_state = collections.OrderedDict() - serializable_state["pipeline"] = pipeline_cfg["pipeline"] - for k in pipeline_cfg.keys(): - if k == "pipeline": continue - flat_key = "__".join(k) - serializable_state[flat_key] = pipeline_cfg[k] - # this isn't _really_ a serializable state, the objects are still PISA objects... - # bit it will convert correctly when thrown into `to_json` - return serializable_state - - -def assemble_interpolated_fits(fit_directory, output_file, drop_fit_maps=False, leftout_param=None, leftout_surface=None): - """After all of the fits on the cluster are done, assemble the results to one JSON. - - The JSON produced by this function is what `load_interpolated_hypersurfaces` - expects. - """ - assert os.path.isdir(fit_directory), "fit directory does not exist" - metadata = from_json(os.path.join(fit_directory, "metadata.json")) - - combined_data = collections.OrderedDict() - combined_data["interpolation_param_spec"] = metadata["interpolation_param_spec"] - - # Loop over grid points - hs_fits = [] - grid_shape = tuple(metadata["grid_shape"]) - for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): - - # Load grid point data - gridpoint_json = os.path.join(fit_directory, f"gridpoint_{job_idx:06d}.json.bz2") - logging.info(f"Reading {gridpoint_json}") - gridpoint_data = from_json(gridpoint_json) - - # Check the loaded data - assert job_idx == gridpoint_data["job_idx"] - assert np.all(grid_idx == gridpoint_data["grid_idx"]) - # TODO: Offer to run incomplete fits locally - assert gridpoint_data["fit_successful"], f"job no. {job_idx} not finished" - - # Drop fit maps if requested (can significantly reduce file size) - if drop_fit_maps : - for key, hs_state in gridpoint_data["hs_fit"].items() : - hs_state["fit_maps_raw"] = None - hs_state["fit_maps_norm"] = None - if leftout_param is not None: - for surface in leftout_surface: - gridpoint_data["hs_fit"][surface]["params"][leftout_param]["fit_coeffts"] *= 0.0 - print(gridpoint_data["hs_fit"][surface]["params"][leftout_param]["fit_coeffts"]) - - # Add grid point data to output file - hs_fits.append(collections.OrderedDict( - param_values=gridpoint_data["param_values"], - hs_fit=gridpoint_data["hs_fit"] - )) - - # Write the output file - combined_data["hs_fits"] = hs_fits - to_file(combined_data, output_file) - - -def get_incomplete_job_idx(fit_directory): - """Get job indices of fits that are not flagged as successful.""" - - assert os.path.isdir(fit_directory), "fit directory does not exist" - metadata = from_json(os.path.join(fit_directory, "metadata.json")) - grid_shape = tuple(metadata["grid_shape"]) - failed_idx = [] - for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): - try: - gridpoint_json = os.path.join(fit_directory, - f"gridpoint_{job_idx:06d}.json.bz2") - logging.info(f"Reading {gridpoint_json}") - gridpoint_data = from_json(gridpoint_json) - except: - break - if not gridpoint_data["fit_successful"]: - failed_idx.append(job_idx) - job_idx += 1 - return failed_idx - -def run_interpolated_fit(fit_directory, job_idx, skip_successful=False): - """Run the hypersurface fit for a grid point. - - If `skip_successful` is true, do not run if the `fit_successful` flag is already - True. - """ - - #TODO a lot of this is copied from fit_hypersurfaces in hypersurface.py, would be safer to make more OAOO - #TODO Copy the param value storage stuff from fit_hypersurfaces across in the meantime - - assert os.path.isdir(fit_directory), "fit directory does not exist" - - gridpoint_json = os.path.join(fit_directory, f"gridpoint_{job_idx:06d}.json.bz2") - gridpoint_data = from_json(gridpoint_json) - - if skip_successful and gridpoint_data["fit_successful"]: - logging.info(f"Fit at job index {job_idx} already successful, skipping...") - return - - metadata = from_json(os.path.join(fit_directory, "metadata.json")) - - interpolation_param_spec = metadata["interpolation_param_spec"] - - # this is a pipeline configuration in the form of an OrderedDict - nominal_dataset = metadata["nominal_dataset"] - # Why can we still not load PISA objects from JSON that are inside a dict?! Grrr... - nominal_dataset["pipeline_cfg"] = pipeline_cfg_from_states( - nominal_dataset["pipeline_cfg"] - ) - # this is a list of pipeline configurations - sys_datasets = metadata["sys_datasets"] - for sys_dataset in sys_datasets: - sys_dataset["pipeline_cfg"] = pipeline_cfg_from_states( - sys_dataset["pipeline_cfg"] - ) - # this is a dict of param_name : value pairs - param_values = gridpoint_data["param_values"] - # we do a redundant check to make sure the parameter values at this grid point are - # correct - interpolation_param_names = metadata["interpolation_param_names"] - grid_shape = tuple(metadata["grid_shape"]) - # the grid point index of this job - grid_idx = list(np.ndindex(grid_shape))[job_idx] - for i, n in enumerate(interpolation_param_names): - ms = "Inconsistent parameter values at grid point!" - assert interpolation_param_spec[n]["values"][grid_idx[i]] == param_values[n], ms - - # now we need to adjust the values of the parameter in all pipelines for this point - logging.info(f"updating pipelines with parameter values: {param_values}") - for dataset in [nominal_dataset] + sys_datasets: - for stage_cfg in dataset["pipeline_cfg"].values(): - if "params" not in stage_cfg.keys(): continue - for param in interpolation_param_names: - if param in stage_cfg["params"].names: - stage_cfg["params"][param].value = param_values[param] - - # these are the parameters of the hypersurface, NOT the ones we interpolate them - # over! - hypersurface_params = [] - for param_state in metadata["hypersurface_params"]: - hypersurface_params.append(HypersurfaceParam.from_state(param_state)) - - def find_hist_stage(pipeline): - """Locate the index of the hist stage in a pipeline.""" - hist_idx_found = False - for i, s in enumerate(pipeline.stages): - if s.__class__.__name__ == "hist": - hist_idx = i - hist_idx_found = True - break - if not hist_idx_found: - raise RuntimeError("Could not find histogram stage in pipeline, aborting.") - return hist_idx - - # We create Pipeline objects, get their outputs and then forget about the Pipeline - # object on purpose! The memory requirement to hold all systematic sets at the same - # time is just too large, especially on the cluster. The way we do it below we - # only need enough memory for one dataset at a time. - - for dataset in [nominal_dataset] + sys_datasets: - pipeline = Pipeline(dataset["pipeline_cfg"]) - dataset["mapset"] = pipeline.get_outputs() - # get the un-weighted event counts as well so that we can exclude bins - # with too little statistics - # First, find out which stage is the hist stage - hist_idx = find_hist_stage(pipeline) - pipeline.stages[hist_idx].unweighted = True - dataset["mapset_unweighted"] = pipeline.get_outputs() - del pipeline - - # Merge maps according to the combine regex, if one was provided - combine_regex = metadata["combine_regex"] - if combine_regex is not None: - for dataset in [nominal_dataset] + sys_datasets: - dataset["mapset"] = dataset["mapset"].combine_re(combine_regex) - dataset["mapset_unweighted"] = dataset["mapset_unweighted"].combine_re(combine_regex) - - minimum_mc = metadata["minimum_mc"] - # Remove bins (i.e. set their count to zero) that have too few MC events - for dataset in sys_datasets + [nominal_dataset]: - for map_name in dataset["mapset"].names: - insuff_mc = dataset["mapset_unweighted"][map_name].nominal_values < minimum_mc - # Setting the hist to zero sets both nominal value and std_dev to zero - dataset["mapset"][map_name].hist[insuff_mc] = 0. - - hypersurface_fit_kw = metadata["hypersurface_fit_kw"] - hypersurfaces = collections.OrderedDict() - log = metadata["log"] # flag determining whether hs fit is run in log-space or not - for map_name in nominal_dataset["mapset"].names: - nominal_map = nominal_dataset["mapset"][map_name] - nominal_param_values = nominal_dataset["sys_params"] - - sys_maps = [sys_dataset["mapset"][map_name] for sys_dataset in sys_datasets] - sys_param_values = [sys_dataset["sys_params"] for sys_dataset in sys_datasets] - - hypersurface = Hypersurface( - # Yes, this MUST be a deepcopy! Otherwise weird memory overwrites happen - # and all the numbers get jumbled across the hypersurfaces of different maps - params=copy.deepcopy(hypersurface_params), - initial_intercept=0. if log else 1., # Initial value for intercept - log=log - ) - - hypersurface.fit( - nominal_map=nominal_map, - nominal_param_values=nominal_param_values, - sys_maps=sys_maps, - sys_param_values=sys_param_values, - norm=True, - # Is the space or loading time really a problem? - # keep_maps=False, # it would take a lot more space otherwise - **hypersurface_fit_kw - ) - - logging.debug("\nFitted hypersurface report:\n%s" % hypersurface) - hypersurfaces[map_name] = hypersurface - - gridpoint_data["hs_fit"] = hypersurfaces - gridpoint_data["fit_successful"] = True - - to_json(gridpoint_data, gridpoint_json) - - -def prepare_interpolated_fit( - nominal_dataset, sys_datasets, params, fit_directory, interpolation_param_spec, - combine_regex=None, log=False, minimum_mc=0, **hypersurface_fit_kw -): - ''' - Writes steering files for fitting hypersurfaces on a grid of arbitrary parameters. - The fits can then be run on a cluster with `run_interpolated_fit`. - - Parameters - ---------- - nominal_dataset : dict - Definition of the nominal dataset. Specifies the pipleline with which the maps - can be created, and the values of all systematic parameters used to produced the - dataset. - Format must be: - nominal_dataset = { - "pipeline_cfg" = ), - "sys_params" = { param_0_name : param_0_value_in_dataset, ..., param_N_name : param_N_value_in_dataset } - } - Sys params must correspond to the provided HypersurfaceParam instances provided - in the `params` arg. - - sys_datasets : list of dicts - List of dicts, where each dict defines one of the systematics datasets to be - fitted. The format of each dict is the same as explained for `nominal_dataset` - - params : list of HypersurfaceParams - List of HypersurfaceParams instances that define the hypersurface. Note that - this defined ALL hypersurfaces fitted in this function, e.g. only supports a - single parameterisation for all maps (this is almost always what you want). - - output_directory : str - Directory in which the fits will be run. Steering files for the fits to be run - will be stored here. - - combine_regex : list of str, or None - List of string regex expressions that will be used for merging maps. Used to - combine similar species. Must be something that can be passed to the - `MapSet.combine_re` function (see that functions docs for more details). Choose - `None` is do not want to perform this merging. - - interpolation_param_spec : collections.OrderedDict - Specification of parameter grid that hypersurfaces should be interpolated over. - The dict should have the following form:: - interpolation_param_spec = { - 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} - 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} - ... - 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} - } - The hypersurfaces will be fit on an N-dimensional rectilinear grid over - parameters 1 to N. The flag `scales_log` indicates that the interpolation over - that parameter should happen in log-space. - - minimum_mc : int, optional - Minimum number of un-weighted MC events required in each bin. - - hypersurface_fit_kw : kwargs - kwargs will be passed on to the calls to `Hypersurface.fit` - ''' - - # Take (deep) copies of lists/dicts to avoid modifying the originals - # Useful for cases where this function is called in a loop (e.g. leave-one-out tests) - nominal_dataset = copy.deepcopy(nominal_dataset) - sys_datasets = copy.deepcopy(sys_datasets) - params = copy.deepcopy(params) - - # Check types - assert isinstance(sys_datasets, collections.abc.Sequence) - assert isinstance(params, collections.abc.Sequence) - assert isinstance(fit_directory, str) - # there must not be any ambiguity between fitting the hypersurfaces and - # interpolating them later - msg = "interpolation params must be specified as a dict with ordered keys" - assert isinstance(interpolation_param_spec, collections.OrderedDict), msg - for k, v in interpolation_param_spec.items(): - assert set(v.keys()) == {"values", "scales_log"} - assert isinstance(v["values"], collections.abc.Sequence) - # We need to extract the magnitudes from the Quantities to avoid a - # UnitStrippedWarning. For some reason, doing `np.min(v["values"])` messes up - # the data structure inside the values in a way that can cause a crash when we - # try to serialize the values later. Lesson: Stripping units inadvertently can - # have strange, unforeseen consequences. - mags = [x.m for x in v["values"]] - if v["scales_log"] and np.min(mags) <= 0: - raise ValueError("A log-scaling parameter cannot be equal to or less " - "than zero!") - - # Check output format and path - assert os.path.isdir(fit_directory), "fit directory does not exist" - - # Check formatting of datasets is as expected - all_datasets = [nominal_dataset] + sys_datasets - for dataset in all_datasets: - assert isinstance(dataset, collections.abc.Mapping) - assert "pipeline_cfg" in dataset - assert isinstance(dataset["pipeline_cfg"], (str, collections.abc.Mapping)) - assert "sys_params" in dataset - assert isinstance(dataset["sys_params"], collections.abc.Mapping) - - dataset["pipeline_cfg"] = serialize_pipeline_cfg(dataset["pipeline_cfg"]) - - # Check params - assert len(params) >= 1 - for p in params: - assert isinstance(p, HypersurfaceParam) - - # Report inputs - msg = "Hypersurface fit details :\n" - msg += f" Num params : {len(params)}\n" - msg += f" Num fit coefficients : {sum([p.num_fit_coeffts for p in params])}\n" - msg += f" Num datasets : 1 nominal + {len(sys_datasets)} systematics\n" - msg += f" Nominal values : {nominal_dataset['sys_params']}\n" - msg += "Hypersurface fits are prepared on the following grid:\n" - msg += str(interpolation_param_spec) - logging.info(msg) - - # because we require this to be an OrderedDict, there is no ambiguity in the - # construction of the mesh here - param_names = list(interpolation_param_spec.keys()) - grid_shape = tuple(len(v["values"]) for v in interpolation_param_spec.values()) - - # We store all information needed to run a fit in metadata - metadata = collections.OrderedDict( - interpolation_param_spec=interpolation_param_spec, - interpolation_param_names=param_names, # convenience - grid_shape=grid_shape, # convenience - nominal_dataset=nominal_dataset, - sys_datasets=sys_datasets, - hypersurface_params=params, - combine_regex=combine_regex, - log=log, - minimum_mc=minimum_mc, - hypersurface_fit_kw=hypersurface_fit_kw - ) - - to_json(metadata, os.path.join(fit_directory, "metadata.json")) - - # we write on JSON file for each grid point - for job_idx, grid_idx in enumerate(np.ndindex(grid_shape)): - # Although this is technically redundant, we store the parameter values - # explicitly for each grid point. - param_values = {} - for i, n in enumerate(param_names): - param_values[n] = interpolation_param_spec[n]["values"][grid_idx[i]] - - gridpoint_data = { - "param_values": param_values, - "hs_fit": None, - "job_idx": job_idx, - "grid_idx": grid_idx, - "fit_successful": False - } - to_json(gridpoint_data, os.path.join(fit_directory, - f"gridpoint_{job_idx:06d}.json.bz2")) - - logging.info(f"Grid fit preparation complete! Total number of jobs: {job_idx+1}") - return job_idx+1 # zero-indexing - -def load_interpolated_hypersurfaces(input_file, expected_binning=None): - ''' - Load a set of interpolated hypersurfaces from a file. - - Analogously to "load_hypersurfaces", this function returns a - collection with a HypersurfaceInterpolator object for each Map. - - Parameters - ---------- - input_file : str - A JSON input file as produced by fit_hypersurfaces if interpolation params - were given. It has the form:: - { - interpolation_param_spec = { - 'param1': {"values": [val1_1, val1_2, ...], "scales_log": True/False} - 'param2': {"values": [val2_1, val2_2, ...], "scales_log": True/False} - ... - 'paramN': {"values": [valN_1, valN_2, ...], "scales_log": True/False} - }, - 'hs_fits': [ - - ] - } - - Returns - ------- - collections.OrderedDict - dictionary with a :obj:`HypersurfaceInterpolator` for each map - ''' - assert isinstance(input_file, str) - - if expected_binning is not None: - assert is_binning(expected_binning) - - logging.info(f"Loading interpolated hypersurfaces from file: {input_file}") - - # Load the data from the file - input_data = from_file(input_file) - - - # - # Backwards compatibility handling - # - - # For older file formats (for example those used in the oscNext verification sample), some handling is - # reequired to convert the input data format to match the expectation of this function - - # Check for missing data - if "interpolation_param_spec" not in input_data : - - # Confirm the format of what we did find - assert "interp_params" in input_data - assert "hs_fits" in input_data - assert "kind" in input_data - - # The current code only handles linear interpolation - assert input_data["kind"] == "linear", f"Only linear interpolation suppored (input file specifies \'{input_data['kind']}\')" - - # Populate the interpolation param spec - input_data["interpolation_param_spec"] = collections.OrderedDict() - for param_def in input_data["interp_params"] : - param_name = param_def["name"] - input_data["interpolation_param_spec"][param_name] = { - "scales_log" : False, - "values" : [ hs_fit_dict["param_values"][param_name] for hs_fit_dict in input_data["hs_fits"] ], - } - - # Load the individual HS files to get the HS states (as this code now expects for the contents of `hs_fits`) - for hs_fit_dict in input_data["hs_fits"] : - hypersurfaces = load_hypersurfaces(hs_fit_dict["file"], expected_binning=expected_binning) - hs_fit_dict["hs_fit"] = collections.OrderedDict() - for key, hypersurface in hypersurfaces.items() : - hs_fit_dict["hs_fit"][key] = hypersurface - - - # - # Load hypersurface interpolator(s) - # - - # check the file contents - assert set(['interpolation_param_spec', 'hs_fits']).issubset( - set(input_data.keys())), 'missing keys' - - # input_data['hs_fits'] is a list of dicts, each dict contains "param_values" - # and "hs_fit" - map_names = None - logging.info("Reading file complete, generating hypersurfaces...") - for hs_fit_dict in input_data['hs_fits']: - - # this might not be the actual Hypersurface, but a dict with the serialized Hypersurface state - hs_state_maps = hs_fit_dict["hs_fit"] - if map_names is None: - map_names = list(hs_state_maps.keys()) - else: - assert set(map_names) == set(hs_state_maps.keys()), "inconsistent maps" - - # When data is recovered from JSON, the object states are not automatically - # converted to the corresponding objects, so we need to do it manually here - # (unless what we loaded was already a hypersurface instance). - for map_name in map_names: - if isinstance(hs_state_maps[map_name], Hypersurface) : - hs_state_maps[map_name] = hs_state_maps[map_name] - else : - hs_state_maps[map_name] = Hypersurface.from_state(hs_state_maps[map_name]) - logging.info(f"Read hypersurface maps: {map_names}") - - # Check binning - if expected_binning is not None: - for map_name, hypersurface in hs_state_maps.items(): - assert hypersurface.binning.hash == expected_binning.hash, "Binning of loaded hypersurfaces does not match the expected binning" - - # Now we have a list of dicts where the map names are on the lower level. - # We need to convert this into a dict of HypersurfaceInterpolator objects. - output = collections.OrderedDict() - for m in map_names: - hs_fits = [{"param_values": fd["param_values"], "hs_fit": fd['hs_fit'][m]} for fd in input_data['hs_fits']] - output[m] = HypersurfaceInterpolator(input_data['interpolation_param_spec'], hs_fits) - - return output diff --git a/pisa/utils/hypersurface/hypersurface.py b/pisa/utils/hypersurface/hypersurface.py deleted file mode 100755 index 7981b949c..000000000 --- a/pisa/utils/hypersurface/hypersurface.py +++ /dev/null @@ -1,2511 +0,0 @@ -""" -Tools for working with hypersurfaces, which are continuous functions in N-D -with arbitrary functional forms. - -Hypersurfaces can be used to model systematic uncertainties derived from discrete -simulation datasets, for example for detedctor uncertainties. -""" - -__all__ = ['Hypersurface', 'HypersurfaceParam', 'fit_hypersurfaces', - 'load_hypersurfaces'] - -__author__ = 'T. Stuttard, A. Trettin' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -import os -import collections -import copy - -import numpy as np -from iminuit import Minuit - -from pisa import FTYPE, ureg -from pisa.utils.jsons import from_json, to_json -from pisa.core.pipeline import Pipeline -from pisa.core.binning import OneDimBinning, MultiDimBinning, is_binning -from pisa.core.map import Map -from pisa.core.param import Param, ParamSet -from pisa.utils.resources import find_resource -from pisa.utils.fileio import mkdir -from pisa.utils.log import logging, set_verbosity -from pisa.utils.comparisons import ALLCLOSE_KW -from uncertainties import ufloat, correlated_values -from uncertainties import unumpy as unp -from .hypersurface_plotting import plot_bin_fits, plot_bin_fits_2d - -''' -Hypersurface functional forms - - Define functional forms for HypersurfaceParam instances here. - - Functions defined here MUST: - - Support numba guvectorization. - - Function arguments must observed this convention: - `p`, ``, ..., ``, `out` where `p` is the - systematic parameter, `out is the array to write the results to, and there are - N coefficients of the parameterisation. - - The format of these arguments depends on the use case, of which there are two: - - When fitting the function coefficients. This is done bin-wise using multiple - datasets. - - Params are then: `p` is array (one value per dataset), coefficients and `out` - are scalar (representing a single bin). - - Evaluating a fitted hypersurface. This is done for all bins simultaneously, using - a single value for p. - - Params are then: `p` is scalar (current value of systematic parameter, - coefficients and `out` are arrays representing the hypersurfaces of all bins - per bin. -''' - - -class linear_hypersurface_func(object): - ''' - Linear hypersurface functional form - - f(p) = m * p - ''' - - def __init__(self): - self.nargs = 1 - - def __call__(self, p, m, out): - result = m * p - np.copyto(src=result, dst=out) - - def grad(self, p, m, out): - # because m itself is not in the actual calculation, we have to broadcast - # manually to yield the same shape as if we had done m*p and added one axis - foo = m*p - result = np.broadcast_to(p, foo.shape)[..., np.newaxis] - np.copyto(src=result, dst=out) - - -class quadratic_hypersurface_func(object): - ''' - Quadratic hypersurface functional form - - f(p) = m1*p + m2*p**2 - ''' - - def __init__(self): - self.nargs = 2 - - def __call__(self, p, m1, m2, out): - result = m1*p + m2*p**2 - np.copyto(src=result, dst=out) - # the gradient *must* have all these arguments, even if they are un-used! - - def grad(self, p, m1, m2, out): - # because m itself is not in the actual calculation, we have to broadcast - # manually to yield the same shape as if we had done m*p and stacked on the last - # axis - foo = m1*p - result = np.stack([np.broadcast_to(p, foo.shape), - np.broadcast_to(p**2, foo.shape)], - axis=-1 - ) - np.copyto(src=result, dst=out) - -class exponential_hypersurface_func(object): - ''' - Exponential hypersurface functional form - - f(p) = exp(b*p) - 1 - - The functional form ensures that it is zero at the nominal point. - ''' - - def __init__(self): - self.nargs = 1 - - def __call__(self, p, b, out): - result = np.exp(b*p) - 1. - np.copyto(src=result, dst=out) - - def grad(self, p, b, out): - # because parameters and coefficients both appear, everything is broadcast - # automatically - result = np.array([p*np.exp(b*p)])[..., np.newaxis] - np.copyto(src=result, dst=out) - -class scaled_exponential_hypersurface_func(object): - ''' - Exponential hypersurface functional form - - f(p) = (a + 1) * (exp(b*p) - 1) - - The functional form is chosen such that it is zero at the nominal point. - If a strong prior is imposed on a, it becomes equivalent to the un-scaled - exponential hypersurface function. - ''' - - def __init__(self): - self.nargs = 2 - - def __call__(self, p, a, b, out): - result = (a + 1.) * (np.exp(b*p) - 1.) - np.copyto(src=result, dst=out) - - def grad(self, p, a, b, out): - # because parameters and coefficients both appear, everything is broadcast - # automatically - result = np.stack([np.exp(b*p) - 1., (a + 1.)*p*np.exp(b*p)], axis=-1) - np.copyto(src=result, dst=out) - -class logarithmic_hypersurface_func(object): - ''' - Logarithmic hypersurface functional form - - f(p) = log(1 + mp) - - Allows the fit of an effectively linear multiplicative - function while in logmode, since: - exp(log(1 + mp) + h) = (1 + mp) exp(h) - ''' - - def __init__(self): - self.nargs = 1 - - def __call__(self, p, m, out): - result = np.log(1 + m*p) - np.copyto(src=result, dst=out) - - def grad(self, p, m, out): - # because parameters and coefficients both appear, everything is broadcast - # automatically - result = np.array(p/(1 + m*p))[..., np.newaxis] - np.copyto(src=result, dst=out) - - -# Container holding all possible functions -HYPERSURFACE_PARAM_FUNCTIONS = collections.OrderedDict() -HYPERSURFACE_PARAM_FUNCTIONS["linear"] = linear_hypersurface_func -HYPERSURFACE_PARAM_FUNCTIONS["quadratic"] = quadratic_hypersurface_func -HYPERSURFACE_PARAM_FUNCTIONS["exponential"] = exponential_hypersurface_func -HYPERSURFACE_PARAM_FUNCTIONS["exponential_scaled"] = scaled_exponential_hypersurface_func -HYPERSURFACE_PARAM_FUNCTIONS["logarithmic"] = logarithmic_hypersurface_func - -class Hypersurface(object): - ''' - A class defining the hypersurface - - Contains : - - A single common intercept - - N systematic parameters, inside which the functional form is defined - - This class can be configured to hold both the functional form of the hypersurface - and values (likely fitted from simulation datasets) for the free parameters of this - functional form. - - Fitting functionality is provided to fit these free parameters. - - This class can simultaneously hold hypersurfaces for every bin in a histogram (Map). - - The functional form of the systematic parameters can be arbitrarily complex. - - The class has a fit method for fitting the hypersurface to some data (e.g. - discrete systematics sets). - - Serialization functionality is included to allow fitted hypersurfaces to be stored - to a file and re-loaded later (e.g. to be used in analysis). - - The main use cases are: - 1) Fit hypersurfaces - - Define the desired HypersurfaceParams (functional form, intial coefficient guesses). - - Instantiate the `Hypersurface` class, providing the hypersurface params and initial intercept guess. - - Use `Hypersurface.fit` function (or more likely the `fit_hypersurfaces` helper function provided below), - to fit the hypersurface coefficients to some provided datasets. - - Store to file - 2) Evaluate an existing hypersurface - - Load existing fitted Hypersurface from a file (`load_hypersurfaces` helper function) - - Get the resulting hypersurface value for each bin for a given set of systemaic param - values using the `Hypersurface.evaluate` method. - - Use the hypersurface value for each bin to re-weight events - - The class stores information about the datasets used to fit the hypersurfaces, including the Maps - used and nominal and systematic parameter values. - - Parameters - ---------- - params : list - A list of HypersurfaceParam instances defining the hypersurface. - The `initial_fit_coeffts` values in this instances will be used as the starting - point for any fits. - - initial_intercept : float - Starting point for the hypersurface intercept in any fits - - log : bool, optional - Set hypersurface to log mode. The surface is fit to the log of the bin counts. - The fitted surface is exponentiated during evaluation. Default: False - ''' - - def __init__(self, params, initial_intercept=None, log=False): - - # Store args - self.initial_intercept = initial_intercept - # Store params as dict for ease of lookup - self.params = collections.OrderedDict() - for param in params: - assert param.name not in self.params, "Duplicate param name found : %s" % param.name - self.params[param.name] = param - - self.log = log - # Internal state - self._initialized = False - - # Containers for storing fitting information - self.fit_complete = False - self.fit_info_stored = False - self.fit_maps_norm = None - self.fit_maps_smooth = None - self.fit_maps_raw = None - self.fit_chi2 = None - self.fit_cov_mat = None - self.fit_method = None - - # Also add option store the pipeline param values used to generate the - # maps that are the inouts to the fits for these hypersurfaces. They are - # not actually used in the fit and so this variable is generally `None`, - # but a user can set them externally during the fitting process so that - # they can be stored for for future reference - self.fit_pipeline_param_values = None - - # Serialization - self._serializable_state = None - - # Legacy handling - self.using_legacy_data = False - - def _init(self, binning, nominal_param_values): - ''' - Actually initialise the hypersurface. - - Internal function, not to be called by a user. - ''' - - # - # Binning - # - - # Store the binning - self.binning = binning - - # Set a default initial intercept value if none provided - if self.initial_intercept is None: - self.initial_intercept = 0. if self.log else 1. - - # Create the fit coefficient arrays - # Have one fit per bin - self.intercept = np.full( - self.binning.shape, self.initial_intercept, dtype=FTYPE) - self.intercept_sigma = np.full_like(self.intercept, np.NaN) - for param in list(self.params.values()): - param._init_fit_coefft_arrays(self.binning) - - # - # Nominal values - # - - # Store the nominal param values - # TODO better checks, including not already set - for param in list(self.params.values()): - param.nominal_value = nominal_param_values[param.name] - - # - # Done - # - - self._initialized = True - - @property - def initialized(self): - ''' - Return flag indicating if hypersurface has been initialized - Not giving use direct write-access to the variable as they should nt be setting it themselves - ''' - return self._initialized - - @property - def param_names(self): - ''' - Return the (ordered) names of the systematic parameters - ''' - return list(self.params.keys()) - - def evaluate(self, param_values, bin_idx=None, return_uncertainty=False): - ''' - Evaluate the hypersurface, using the systematic parameter values provided. - Uses the current internal values for all functional form coefficients. - - Parameters - ---------- - param_values : dict - A dict specifying the values of the systematic parameters to use in the evaluation. - Format is : - { sys_param_name_0 : sys_param_0_val, ..., sys_param_name_N : sys_param_N_val }. - The keys must be string and correspond to the HypersurfaceParam instances. - The values must be scalars. - - bin_idx : tuple or None - Optionally can specify a particular bin (using numpy indexing). d - Othewise will evaluate all bins. - - return_uncertainty : bool, optional - return the uncertainty on the output (default: False) - ''' - - assert self._initialized, "Cannot evaluate hypersurface, it haas not been initialized" - - # - # Check inputs - # - - # Determine number of sys param values (per sys param) - # This will be >1 when fitting, and == 1 when evaluating the hypersurface within the stage - num_param_values = np.asarray(list(param_values.values())[0]).size - - # Check same number of values for all sys params - for k, v in list(param_values.items()): - n = np.asarray(v).size - assert n == num_param_values, "All sys params must have the same number of values" - - # Determine whether using single bin or not - single_bin_mode = bin_idx is not None - - # - # Prepare output array - # - - # Determine shape of output array - # Two possible cases, with limitations on both based on how the sys param functional forms are defined - if not single_bin_mode: - # Case 1 : Calculating for all bins simultaneously (e.g. `bin_idx is None`) - # Only support a single scalar value for each systematic parameters - # Use case is evaluating the hypersurfaces during the hypersurface stage - assert num_param_values == 1, "Can only provide one value per sys param when evaluating all bins simultaneously" - for v in list(param_values.values()): - assert np.isscalar( - v), "sys param values must be a scalar when evaluating all bins simultaneously" - out_shape = self.binning.shape - bin_idx = Ellipsis - - else: - # Case 2 : Calculating for multiple sys param values, but only a single bin - # Use case is fitting the hypersurfaces fucntional form fit params - out_shape = (num_param_values,) - - # Create the output array - out = np.full(out_shape, np.NaN, dtype=FTYPE) - - # - # Evaluate the hypersurface - # - - # Start with the intercept - for i in range(num_param_values): - if single_bin_mode: - out[i] = self.intercept[bin_idx] - else: - np.copyto(src=self.intercept[bin_idx], dst=out[bin_idx]) - - # Evaluate each individual parameter - for k, p in list(self.params.items()): - param_val = param_values[k] if self.using_legacy_data else param_values[k] - p.nominal_value - p.evaluate(param_val, out=out, bin_idx=bin_idx) - - output_factors = np.exp(out) if self.log else out - - if return_uncertainty: - # create buffer array for the gradients - n_coeffs = 1 # start with 1 because intercept is an additional coefficient - for param in list(self.params.values()): - n_coeffs += param.num_fit_coeffts - gradient_buffer = np.full( - out_shape + (n_coeffs,), np.NaN, dtype=FTYPE) - # Start with the intercept, its gradient is always 1 - gradient_buffer[..., 0] = 1. - - # Evaluate gradient each individual parameter and store in buffer. - i = 1 # start at one because the intercept was already treated - for k, p in list(self.params.items()): - gbuf = np.full(out_shape + (p.num_fit_coeffts,), - np.NaN, dtype=FTYPE) - param_val = param_values[k] if self.using_legacy_data else param_values[k] - p.nominal_value - p.gradient(param_val, out=gbuf, bin_idx=bin_idx) - for j in range(p.num_fit_coeffts): - gradient_buffer[..., i] = gbuf[..., j] - i += 1 - - # In log-mode, the output is exponentiated. For the gradient this simply means multiplying - # with the output itself. - if self.log: - gradient_buffer = output_factors[..., - np.newaxis]*gradient_buffer - # Calculate uncertainty from gradients and covariance matrix - transformed_jacobian = np.einsum( - '...j,...kj->...k', gradient_buffer, self.fit_cov_mat[bin_idx]) - variance = np.einsum( - '...j,...j', transformed_jacobian, gradient_buffer) - assert np.all(variance[np.isfinite(variance)] >= 0.), "invalid covariance" - - if return_uncertainty: - return output_factors, np.sqrt(variance) - else: - return output_factors - - def fit(self, nominal_map, nominal_param_values, sys_maps, sys_param_values, - norm=True, method="L-BFGS-B", fix_intercept=False, intercept_bounds=None, - intercept_sigma=None, include_empty=False, keep_maps=True, ref_bin_idx=None, - smooth_method=None, smooth_kw=None): - ''' - Fit the hypersurface coefficients (in every bin) to best match the provided - nominal and systematic datasets. - - Writes the results directly into this data structure. - - Parameters - ---------- - nominal_map : Map - Map from the nominal dataset - - nominal_param_values : dict - Value of each systematic param used to generate the nominal dataset - Format: { param_0_name : param_0_nom_val, ..., param_N_name : param_N_nom_val } - - sys_maps : list of Maps - List containing the Map from each systematic dataset - - sys_param_values : list of dicts - List where each element if a dict containing the values of each systematic - param used to generate the that dataset Each list element specified the - parameters for the corresponding element in `sys_maps` - - norm : bool - Normalise the maps to the nominal map. This is what you want to do when - using the hypersurface to re-weight simulation (which is the main use case). - In principal the hypersurfaces are more general though and could be used for - other tasks too, hence this option. - - method : str - `method` arg to pass to `scipy.optimize.minimiza` - - fix_intercept : bool - Fix intercept to the initial intercept. - - intercept_bounds : 2-tuple, optional - Bounds on the intercept. Default is None (no bounds) - - include_empty : bool - Include empty bins in the fit. If True, empty bins are included with value 0 - and sigma 1. - Default: False - - keep_maps : bool - Keep maps used to make the fit. If False, maps will be set to None after - the fit is complete. This helps to reduce the size of JSONS if the - Hypersurface is to be stored on disk. - - ref_bin_idx : tuple - An index specifying a reference bin that will be used for logging - ''' - - # - # Check inputs - # - - # Check nominal dataset definition - assert isinstance(nominal_map, Map) - assert isinstance(nominal_param_values, collections.abc.Mapping) - assert set(nominal_param_values.keys()) == set(self.param_names), f"Params mismatch : {set(nominal_param_values.keys())} != {set(self.param_names)}" - assert all([isinstance(k, str) for k in nominal_param_values.keys()]) - assert all([np.isscalar(v) for v in nominal_param_values.values()]) - # Check systematic dataset definitions - assert isinstance(sys_maps, collections.abc.Sequence) - assert isinstance(sys_param_values, collections.abc.Sequence) - assert len(sys_maps) == len(sys_param_values) - for sys_map, sys_param_vals in zip(sys_maps, sys_param_values): - assert isinstance(sys_map, Map) - assert isinstance(sys_param_vals, collections.abc.Mapping) - msg = f"self.param_names: {self.param_names}\n sys_param_vals.keys(): {sys_param_vals.keys()}" - assert set(sys_param_vals.keys()) == set(self.param_names), msg - assert all([isinstance(k, str) for k in sys_param_vals.keys()]) - assert all([np.isscalar(v) for v in sys_param_vals.values()]) - assert sys_map.binning == nominal_map.binning - - assert not ( - include_empty and self.log), "empty bins cannot be included in log mode" - # - # Format things before getting started - # - - # Store the fitting method - self.fit_method = method - - # Store smoothing info - self.smooth_method = smooth_method - self.smooth_kw = smooth_kw - - # Initialise hypersurface using nominal dataset - self._init(binning=nominal_map.binning, - nominal_param_values=nominal_param_values) - - # Combine nominal and sys sets - maps = [nominal_map] + sys_maps - param_values = [nominal_param_values] + sys_param_values - - # Store raw maps - self.fit_maps_raw = maps - self.fit_info_stored = True - - # Convert params values from `list of dicts` to `dict of lists` - param_values_dict = {name: np.array([p[name] for p in param_values]) - for name in list(param_values[0].keys())} - - # Save the param values used for fitting in the param objects (useful for plotting later) - for name, values in list(param_values_dict.items()): - self.params[name].fit_param_values = values - - # Format the fit `x` values : [ [sys param 0 values], [sys param 1 values], ... ] - # Order of the params must match the order in `self.params` - x = np.asarray([param_values_dict[param_name] - for param_name in list(self.params.keys())], dtype=FTYPE) - # Prepare covariance matrix array - self.fit_cov_mat = np.full( - list(self.binning.shape)+[self.num_fit_coeffts, self.num_fit_coeffts], np.NaN) - - - # - # Smoothing - # - - self.fit_maps_smooth = None - - if self.smooth_method is not None : - - raise Exception("Hypersurface smoothing needs some fixing") - - fit_maps_smooth = [] - - if self.smooth_method == "gaussian_filter" : - - # - # Perform Gaussian filtering on the input maps - # - - - - #TODO REMOVE - #TODO REMOVE - #TODO REMOVE - #TODO REMOVE - #TODO REMOVE - print(">>>> STARTED gaussian_filter SMOOTHING") - #TODO REMOVE - #TODO REMOVE - #TODO REMOVE - #TODO REMOVE - - if self.smooth_kw is None : - self.smooth_kw = {} - - # Treating each PID bin individually as a 2D hist (E, coszen) - #TODO Make more general - #TODO Can smooth in 3 dims here if desired with gaussian_filter (I think...) - split_dim = "pid" - assert split_dim in self.binning - - # Loop over maps and apply filter - for m in self.fit_maps : - fit_maps_smooth.append( m.gaussian_filter(split_dim=split_dim, **self.smooth_kw) ) - - else : - raise Exception(f"Unknown smooting method : {self.smooth_method}") - - - # Store - self.fit_maps_smooth = fit_maps_smooth - - - - - - # - # Normalisation - # - - # All map values are finite, but if have empty bins the nominal map will end up - # with inf bins in the normalised map (divide by zero). Use a mask to handle - # this. - finite_mask = nominal_map.nominal_values != 0 - - # Also include any binning mask in the finite mask (since these bin will be NaN) - if self.binning.mask is not None : - finite_mask = finite_mask & self.binning.mask - - # Normalise bin values, if requested - if norm: - - # Normalise the maps by dividing the nominal map This means the hypersurface - # results can be interpretted as a re-weighting factor, relative to the - # nominal - - # Formalise, handling inf values - fit_maps_norm = [] - for m in self.fit_maps: - norm_m = copy.deepcopy(m) - norm_m.hist[finite_mask] = norm_m.hist[finite_mask] / \ - unp.nominal_values(nominal_map.hist[finite_mask]) - norm_m.hist[~finite_mask] = ufloat(np.NaN, np.NaN) - fit_maps_norm.append(norm_m) - self.fit_maps_norm = fit_maps_norm - - # - # Some final checks - # - - # Not expecting any bins to have negative values (negative counts doesn't make - # sense) - # TODO hypersurface in general could consider -ve values (not explicitly - # tied to histograms), so maybe can relax this constraint - for m in self.fit_maps: - assert np.all(m.nominal_values[finite_mask] - >= 0.), "Found negative bin counts" - - # - # Loop over bins - # - - for bin_idx in np.ndindex(self.binning.shape): # TODO grab from input map - - # Check if this bin is masked - if (self.binning.mask is not None) and (self.binning.mask[bin_idx] == False) : - - logging.debug("Skipping masked bin {bin_idx}") - - p0_intercept = self.intercept[bin_idx] - p0_param_coeffts = [param.get_fit_coefft(bin_idx=bin_idx, coefft_idx=i_cft) - for param in list(self.params.values()) - for i_cft in range(param.num_fit_coeffts)] - if fix_intercept: - p0 = np.array(p0_param_coeffts, dtype=FTYPE) - else: - p0 = np.array([p0_intercept] + p0_param_coeffts, dtype=FTYPE) - - # Not fitting, add empty variables - popt = np.full_like(p0, np.NaN) - pcov = np.NaN - - - else : - - # Otherwise proceed to fitting... - - # - # Format this bin's data for fitting - # - - # Format the fit `y` values : [ bin value 0, bin_value 1, ... ] - # Also get the corresonding uncertainty - y = np.asarray([m.nominal_values[bin_idx] - for m in self.fit_maps], dtype=FTYPE) - y_sigma = np.asarray([m.std_devs[bin_idx] - for m in self.fit_maps], dtype=FTYPE) - - # Create a mask for keeping all these points - # May remove some points before fitting if find issues - scan_point_mask = np.ones(y.shape, dtype=bool) - - # Cases where we have a y_sigma element = 0 (normally because the - # corresponding y element = 0) screw up the fits (least squares divides by - # sigma, so get infs) By default, we ignore empty bins. If the user wishes - # to include them, it can be done with a value of zero and standard - # deviation of 1. - bad_sigma_mask = y_sigma == 0. - if bad_sigma_mask.sum() > 0: - if include_empty: - y_sigma[bad_sigma_mask] = 1. - else: - scan_point_mask = scan_point_mask & ~bad_sigma_mask - - # Apply the mask to get the values I will actually use - x_to_use = np.array([xx[scan_point_mask] for xx in x]) - y_to_use = y[scan_point_mask] - y_sigma_to_use = y_sigma[scan_point_mask] - - # Checks - assert x_to_use.shape[0] == len(self.params) - assert x_to_use.shape[1] == y_to_use.size - - # Get flat list of the fit param guesses - # The param coefficients are ordered as [ param 0 cft 0, ..., param 0 cft N, - # ..., param M cft 0, ..., param M cft N ] - p0_intercept = self.intercept[bin_idx] - p0_param_coeffts = [param.get_fit_coefft(bin_idx=bin_idx, coefft_idx=i_cft) - for param in list(self.params.values()) - for i_cft in range(param.num_fit_coeffts)] - if fix_intercept: - p0 = np.array(p0_param_coeffts, dtype=FTYPE) - else: - p0 = np.array([p0_intercept] + p0_param_coeffts, dtype=FTYPE) - - # - # Check if have valid data in this bin - # - - # If have empty bins, cannot fit In particular, if the nominal map has an - # empty bin, it cannot be rescaled (x * 0 = 0) If this case, no need to try - # fitting - - # Check if have NaNs/Infs - if np.any(~np.isfinite(y_to_use)): # TODO also handle missing sigma - # Not fitting, add empty variables - popt = np.full_like(p0, np.NaN) - pcov = np.NaN - - # Otherwise, fit... - else: - - # - # Fit - # - - # Must have at least as many sets as free params in fit or else curve_fit will fail - assert y.size >= p0.size, "Number of datasets used for fitting (%i) must be >= num free params (%i)" % ( - y.size, p0.size) - - # Define a callback function for use with `curve_fit` - # x : sys params - # p : func/shape params - def callback(x, *p): - - # Note that this is using the dynamic variable `bin_idx`, which - # cannot be passed as an arg as `curve_fit` cannot handle fixed - # parameters. - # - # Unflatten list of the func/shape params, and write them to the - # hypersurface structure - self.intercept[bin_idx] = self.initial_intercept if fix_intercept else p[0] - i = 0 if fix_intercept else 1 - for param in list(self.params.values()): - for j in range(param.num_fit_coeffts): - bin_fit_idx = tuple(list(bin_idx) + [j]) - param.fit_coeffts[bin_fit_idx] = p[i] - i += 1 - - # Unflatten sys param values - params_unflattened = collections.OrderedDict() - for i in range(len(self.params)): - param_name = list(self.params.keys())[i] - params_unflattened[param_name] = x[i] - - return self.evaluate(params_unflattened, bin_idx=bin_idx) - - inv_param_sigma = [] - if intercept_sigma is not None: - inv_param_sigma.append(1./intercept_sigma) - else: - inv_param_sigma.append(0.) - for param in list(self.params.values()): - if param.coeff_prior_sigma is not None: - for j in range(param.num_fit_coeffts): - inv_param_sigma.append( - 1./param.coeff_prior_sigma[j]) - else: - for j in range(param.num_fit_coeffts): - inv_param_sigma.append(0.) - inv_param_sigma = np.array(inv_param_sigma) - assert np.all(np.isfinite( - inv_param_sigma)), "invalid values found in prior sigma. They must not be zero." - - # coefficient names to pass to Minuit. Not strictly necessary - coeff_names = [] if fix_intercept else ['intercept'] - for name, param in self.params.items(): - for j in range(param.num_fit_coeffts): - coeff_names.append(name + '_p{:d}'.format(j)) - - def loss(p): - ''' - Loss to be minimized during the fit. - ''' - fvals = callback(x_to_use, *p) - return np.sum(((fvals - y_to_use)/y_sigma_to_use)**2) + np.sum((inv_param_sigma*p)**2) - - # Define fit bounds for `minimize`. Bounds are pairs of (min, max) - # values for each parameter in the fit. Use 'None' in place of min/max - # if there is - # no bound in that direction. - fit_bounds = [] - if fix_intercept: - logging.debug("fixed intercept needs no bounds") - elif intercept_bounds is None: - fit_bounds.append(tuple([None, None])) - else: - assert (len(intercept_bounds) == 2) and ( - np.ndim(intercept_bounds) == 1), "intercept bounds must be given as 2-tuple" - fit_bounds.append(intercept_bounds) - - for param in self.params.values(): - if param.bounds is None: - fit_bounds.extend( - ((None, None),)*param.num_fit_coeffts) - else: - if np.ndim(param.bounds) == 1: - assert len( - param.bounds) == 2, "bounds on single coefficients must be given as 2-tuples" - fit_bounds.append(param.bounds) - elif np.ndim(param.bounds) == 2: - assert np.all([len(t) == 2 for t in param.bounds] - ), "bounds must be given as a tuple of 2-tuples" - fit_bounds.extend(param.bounds) - - # Define the EPS (step length) used by the fitter Need to take care with - # floating type precision, don't want to go smaller than the FTYPE being - # used by PISA can handle - eps = np.finfo(FTYPE).eps - - # If no reference bin index was specified, used the first bin index to be fitted - if ref_bin_idx is None : - ref_bin_idx = bin_idx - - # Debug logging - if bin_idx == ref_bin_idx: - msg = ">>>>>>>>>>>>>>>>>>>>>>>\n" - msg += "Curve fit inputs to bin %s :\n" % (bin_idx,) - msg += " x : \n%s\n" % x - msg += " y : \n%s\n" % y - msg += " y sigma : \n%s\n" % y_sigma - msg += " x used : \n%s\n" % x_to_use - msg += " y used : \n%s\n" % y_to_use - msg += " y sigma used: \n%s\n" % y_sigma_to_use - msg += " p0 : %s\n" % p0 - msg += " bounds : \n%s\n" % fit_bounds - msg += " inv sigma : \n%s\n" % inv_param_sigma - msg += " fit method : %s\n" % self.fit_method - msg += "<<<<<<<<<<<<<<<<<<<<<<<" - logging.debug(msg) - - # Perform fit - # errordef =1 for least squares fit and 0.5 for nllh fit - m = Minuit(loss, p0, - # only initial step size, not very important - # error=(0.1)*len(p0), - # limit=fit_bounds, - name=coeff_names) - m.errors = (0.1) * len(p0) - m.limits = fit_bounds - m.errordef = Minuit.LEAST_SQUARES - m.migrad() - m.hesse() - popt = np.array(m.values) - try: - pcov = np.atleast_1d(np.array(m.covariance)) - except: - logging.warn(f"HESSE call failed for bin {bin_idx}, covariance matrix unavailable") - pcov = np.full((len(p0), len(p0)), np.nan) - if bin_idx == ref_bin_idx: - logging.debug(m.fmin) - logging.debug(m.params) - logging.debug(m.covariance) - # - # Re-format fit results - # - - # Use covariance matrix to get uncertainty in fit parameters Using - # uncertainties.correlated_values, and will extract the std dev (including - # correlations) shortly Fit may fail to determine covariance matrix - # (method-dependent), so only do this if have a finite covariance matrix - corr_vals = correlated_values(popt, pcov) if np.all( - np.isfinite(pcov)) else None - - # Write the fitted param results (and sigma, if available) back to the - # hypersurface structure - i = 0 - if not fix_intercept: - self.intercept[bin_idx] = popt[i] - self.intercept_sigma[bin_idx] = np.NaN if corr_vals is None else corr_vals[i].std_dev - i += 1 - for param in list(self.params.values()): - for j in range(param.num_fit_coeffts): - idx = param.get_fit_coefft_idx( - bin_idx=bin_idx, coefft_idx=j) - param.fit_coeffts[idx] = popt[i] - param.fit_coeffts_sigma[idx] = np.NaN if corr_vals is None else corr_vals[i].std_dev - i += 1 - # Store the covariance matrix - if fix_intercept and np.all(np.isfinite(pcov)): - self.fit_cov_mat[bin_idx] = np.pad(pcov, ((1, 0), (1, 0))) - else: - self.fit_cov_mat[bin_idx] = pcov - # - # chi2 - # - - # Compare the result of the fitted hypersurface function with the actual data - # points used for fitting Compute the resulting chi2 to have an estimate of the - # fit quality - - self.fit_chi2 = [] - - # Loop over datasets - for i_set in range(self.num_fit_sets): - - # Get expected bin values according tohypersurface value - predicted = self.evaluate( - {name: values[i_set] for name, values in list(param_values_dict.items())}) - - # Get the observed value - observed = self.fit_maps[i_set].nominal_values - sigma = self.fit_maps[i_set].std_devs - # we have to apply the same condition on which values we include - # as we did during the fit above - with np.errstate(invalid='ignore'): - valid_idx = sigma > 0. # can be NaN - if include_empty: - sigma[~valid_idx] = 1. - - # Compute chi2 - with np.errstate(divide='ignore'): - chi2 = ((predicted - observed) / sigma) ** 2 - - # Add to container - self.fit_chi2.append(chi2) - - # Combine into single array - self.fit_chi2 = np.stack(self.fit_chi2, axis=-1).astype(FTYPE) - - # Drop input maps if not keeping them - if not keep_maps: - self.fit_maps_raw = None - self.fit_maps_smooth = None - self.fit_maps_norm = None - self.fit_info_stored = False - - # Record some provenance info about the fits - self.fit_complete = True - - @property - def nominal_values(self): - ''' - Return the stored nominal parameter for each dataset - Returns: { param_0_name : param_0_nom_val, ..., param_N_name : param_N_nom_val } - ''' - assert self.fit_info_stored, "Cannot get fit dataset nominal values, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - return collections.OrderedDict([(name, param.nominal_value) for name, param in list(self.params.items())]) - - @property - def fit_param_values(self): - ''' - Return the stored systematic parameters from the datasets used for fitting - Returns: { param_0_name : [ param_0_sys_val_0, ..., param_0_sys_val_M ], ..., param_N_name : [ param_N_sys_val_0, ..., param_N_sys_val_M ] } - ''' - assert self.fit_info_stored, "Cannot get fit dataset param values, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - return collections.OrderedDict([(name, param.fit_param_values) for name, param in list(self.params.items())]) - - def get_nominal_mask(self): - ''' - Return a mask indicating which datasets have nominal values for all parameters - ''' - - assert self.fit_info_stored, "Cannot get nominal mask, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - - nom_mask = np.ones((self.num_fit_sets,), dtype=bool) - - for param in list(self.params.values()): - nom_mask = nom_mask & np.isclose( - param.fit_param_values, param.nominal_value) - - return nom_mask - - def get_on_axis_mask(self, param_name): - ''' - Return a mask indicating which datasets are "on-axis" for a given parameter. - - "On-axis" means "generated using the nominal value for this parameter". Parameters other - than the one specified can have non-nominal values. - - Parameters - ---------- - param_name : str - The name of systematic parameter for which we want on-axis datasets - ''' - - assert self.fit_info_stored, "Cannot get on-axis mask, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - - assert param_name in self.param_names - - on_axis_mask = np.ones((self.num_fit_sets,), dtype=bool) - - # Loop over sys params - for param in list(self.params.values()): - - # Ignore the chosen param - if param.name != param_name: - - # Define a "nominal" mask - on_axis_mask = on_axis_mask & np.isclose( - param.fit_param_values, param.nominal_value) - - return on_axis_mask - - def report(self, bin_idx=None): - ''' - Return a string version of the hypersurface contents - - Parameters - ---------- - bin_idx : tuple of None - Specify a particular bin (using numpy indexing). In this case only report on that bin. - ''' - - msg = "" - - # Fit results - msg += ">>>>>> Fit coefficients >>>>>>" + "\n" - bin_indices = np.ndindex( - self.binning.shape) if bin_idx is None else [bin_idx] - for bin_idx in bin_indices: - msg += " Bin %s :" % (bin_idx,) + "\n" - msg += " Intercept : %0.5g" % (self.intercept[bin_idx],) + "\n" - for param in list(self.params.values()): - msg += " %s : %s" % (param.name, ", ".join(["%0.5g" % param.get_fit_coefft( - bin_idx=bin_idx, coefft_idx=cft_idx) for cft_idx in range(param.num_fit_coeffts)])) + "\n" - msg += "<<<<<< Fit coefficients <<<<<<" + "\n" - - return msg - - def __str__(self): - return self.report() - - @property - def fit_maps(self): - ''' - Return the `Map instances used for fitting - These will be normalised if the fit was performend to normalised maps. - ''' - assert self.fit_info_stored, "Cannot get fit maps, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - - # Return whatever the final processed map type was during the fitting process - if self.fit_maps_norm is not None : - return self.fit_maps_norm - - elif self.fit_maps_smooth is not None : - return self.fit_maps_smooth - - elif self.fit_maps_raw is not None : - return self.fit_maps_raw - - else : - raise Exception("Cannot find fit maps") - - @property - def num_fit_sets(self): - ''' - Return number of datasets used for fitting - ''' - assert self.fit_info_stored, "Cannot get fit sets, fit info not stored%s" % ( - " (using legacy data)" if self.using_legacy_data else "") - return len(list(self.fit_param_values.values())[0]) - - @property - def num_fit_coeffts(self): - ''' - Return the total number of coefficients in the hypersurface fit - This is the overall intercept, plus the coefficients for each individual param - ''' - return int(1 + np.sum([param.num_fit_coeffts for param in list(self.params.values())])) - - @property - def fit_coeffts(self): - ''' - Return all coefficients, in all bins, as a single array - This is the overall intercept, plus the coefficients for each individual param - Dimensions are: [binning ..., fit coeffts] - ''' - - array = [self.intercept] - for param in list(self.params.values()): - for i in range(param.num_fit_coeffts): - array.append(param.get_fit_coefft(coefft_idx=i)) - array = np.stack(array, axis=-1) - return array - - @fit_coeffts.setter - def fit_coeffts(self, fit_coeffts): - ''' - Setter to conveniently set the coefficients in the parameters - of the hypersurface in the same order in which they are also - returned by the getter. - ''' - assert fit_coeffts.shape == self.fit_coeffts.shape, "incorrect shape of coefficients" - self.intercept = fit_coeffts[..., 0] - n = 1 - for param in self.params.values(): - for i in range(param.num_fit_coeffts): - idx = param.get_fit_coefft_idx(coefft_idx=i) - param.fit_coeffts[idx] = fit_coeffts[..., n] - n += 1 - - @property - def fit_coefft_labels(self): - ''' - Return labels for each fit coefficient - ''' - return ["intercept"] + ["%s p%i" % (param.name, i) for param in list(self.params.values()) for i in range(param.num_fit_coeffts)] - - @property - def serializable_state(self): - """ - OrderedDict containing savable state attributes - """ - - if self._serializable_state is None: # TODO always redo? - - state = collections.OrderedDict() - - state["_initialized"] = self._initialized - state["binning"] = self.binning.serializable_state - state["initial_intercept"] = self.initial_intercept - state["log"] = self.log - state["intercept"] = self.intercept - state["intercept_sigma"] = self.intercept_sigma - state["fit_complete"] = self.fit_complete - state["fit_info_stored"] = self.fit_info_stored - state["fit_maps_norm"] = self.fit_maps_norm - state["fit_maps_smooth"] = self.fit_maps_smooth - state["fit_maps_raw"] = self.fit_maps_raw - state["fit_chi2"] = self.fit_chi2 - state["fit_cov_mat"] = self.fit_cov_mat - state["fit_method"] = self.fit_method - state["fit_pipeline_param_values"] = self.fit_pipeline_param_values - state["using_legacy_data"] = self.using_legacy_data - - state["params"] = collections.OrderedDict() - for name, param in list(self.params.items()): - state["params"][name] = param.serializable_state - - self._serializable_state = state - - return self._serializable_state - - @classmethod - def from_state(cls, state): - """ - Instantiate a new object from the contents of a serialized state dict - - Parameters - ---------- - resource : dict - A dict - - See Also - -------- - to_json - """ - - # - # Get the state - # - - # If it is not already a a state, alternativey try to load it in case a JSON - # file was passed - if not isinstance(state, collections.abc.Mapping): - state = from_json(state) - - # - # Create params - # - - params = [] - - # Loop through params in the state - params_state = state.pop("params") - for param_name, param_state in list(params_state.items()): - param = HypersurfaceParam.from_state(param_state) - params.append(param) - - # - # Create hypersurface - # - - # Instantiate - hypersurface = cls( - params=params, - initial_intercept=state.pop("initial_intercept"), - ) - - # Add binning - hypersurface.binning = MultiDimBinning(**state.pop("binning")) - - # Add maps - fit_maps_raw = state.pop("fit_maps_raw") - hypersurface.fit_maps_raw = None if fit_maps_raw is None else [ - Map(**map_state) for map_state in fit_maps_raw] - - fit_maps_norm = state.pop("fit_maps_norm") - hypersurface.fit_maps_norm = None if fit_maps_norm is None else [ - Map(**map_state) for map_state in fit_maps_norm] - - fit_maps_smooth = state.pop("fit_maps_smooth") if "fit_maps_smooth" in state else None # Backwards compatibility - hypersurface.fit_maps_smooth = None if fit_maps_smooth is None else [ - Map(**map_state) for map_state in fit_maps_smooth] - - # Define rest of state - for k in list(state.keys()): - setattr(hypersurface, k, state.pop(k)) - - return hypersurface - - - def fluctuate(self, random_state=None) : - ''' - Return a new hypersurface object whose coefficients have been randomly fluctuated according - to the fit covariance matrix. - - Used for testing the impact of statistical uncertainty in the hypersurfaces fits on - downstream analyses. - ''' - - #TODO uncorrelated fluctuation option - - # Init random state - if random_state is None : - random_state = np.random.RandomState(12345) #TODO use PISA functions for this - - # Create a copy of this instance - new_hypersurface = copy.deepcopy(self) #TODO Use serialized state instead? - - # Loop over bins - for bin_idx in np.ndindex(self.binning.shape): - - # Skip if this bin has no fits - if np.all(np.isfinite(self.fit_coeffts[bin_idx])) : - - # Perform multivariate random sampling from the covariance matrix - # This gives new coefficients, which are written to the output hyersurface instance - new_fit_coeffts = random_state.multivariate_normal(self.fit_coeffts[bin_idx], self.fit_cov_mat[bin_idx]) - - # Set the values in the output hypersurface - new_hypersurface.intercept[bin_idx] = new_fit_coeffts[0] - n = 1 - for param in new_hypersurface.params.values(): - for i in range(param.num_fit_coeffts): - idx = param.get_fit_coefft_idx(bin_idx=bin_idx, coefft_idx=i) - param.fit_coeffts[idx] = new_fit_coeffts[n] - n += 1 - - return new_hypersurface - - -class HypersurfaceParam(object): - ''' - A class representing one of the parameters (and corresponding functional forms) in - the hypersurface. - - A user creates the initial instances of thse params, before passing the to the - Hypersurface instance. Once this has happened, the user typically does not need to - directly interact woth these HypersurfaceParam instances. - - Parameters - ---------- - name : str - Name of the parameter - - func_name : str - Name of the hypersurface function to use. - See "Hypersurface functional forms" section for more details, including - available functions. - - initial_fit_coeffts : array - Initial values for the coefficients of the functional form - Number and meaning of coefficients depends on functional form - - bounds : 2-tuple of array_like, optional - Lower and upper bounds on independent variables. Defaults to no bounds. Each - element of the tuple must be either an array with the length equal to the number - of parameters, or a scalar (in which case the bound is taken to be the same for - all parameters.) Use ``np.inf`` with an appropriate sign to disable bounds on - all or some parameters. - - coeff_prior_sigma : array, optional - Prior sigma values for the coefficients. If None (default), no regularization - will be applied during the fit. - ''' - - def __init__(self, name, func_name, initial_fit_coeffts=None, bounds=None, coeff_prior_sigma=None): - - # Store basic members - self.name = name - - # Handle functional form fit parameters - self.fit_coeffts = None # Fit params container, not yet populated - self.fit_coeffts_sigma = None # Fit param sigma container, not yet populated - # The initial values for the fit parameters - self.initial_fit_coeffts = initial_fit_coeffts - self.bounds = bounds - self.coeff_prior_sigma = coeff_prior_sigma - - # Record information relating to the fitting - self.fitted = False # Flag indicating whether fit has been performed - # The values of this sys param in each of the fitting datasets - self.fit_param_values = None - - # Placeholder for nominal value - self.nominal_value = None - - # Serialization - self._serializable_state = None - self.binning_shape = None # initialized when used in Hypersurface - # - # Init the functional form - # - - # Get the function - self.func_name = func_name - self._hypersurface_func = self._get_hypersurface_func(self.func_name) - - # Get the number of functional form parameters - self.num_fit_coeffts = self._hypersurface_func.nargs - if self.coeff_prior_sigma is not None: - assert len( - self.coeff_prior_sigma) == self.num_fit_coeffts, "number of prior sigma values must equal the number of parameters." - # Check and init the fit param initial values - # TODO Add support for "per bin" initial values - if initial_fit_coeffts is None: - # No values provided, use 0 for all - self.initial_fit_coeffts = np.zeros( - self.num_fit_coeffts, dtype=FTYPE) - else: - # Use the provided initial values - self.initial_fit_coeffts = np.array(self.initial_fit_coeffts) - assert self.initial_fit_coeffts.size == self.num_fit_coeffts, "'initial_fit_coeffts' should have %i values, found %i" % ( - self.num_fit_coeffts, self.initial_fit_coeffts.size) - - def _get_hypersurface_func(self, func_name): - ''' - Find the function defining the hypersurface functional form. - - User specifies this by it's string name, which must correspond to a pre-defined - function in `HYPERSURFACE_PARAM_FUNCTIONS`. - - Internal function, not to be called by a user. - ''' - - assert isinstance(func_name, str), "'func_name' must be a string" - - assert func_name in HYPERSURFACE_PARAM_FUNCTIONS, "Cannot find hypersurface function '%s', choose from %s" % ( - func_name, list(HYPERSURFACE_PARAM_FUNCTIONS.keys())) - return HYPERSURFACE_PARAM_FUNCTIONS[func_name]() - - def _init_fit_coefft_arrays(self, binning): - ''' - Create the arrays for storing the fit parameters - Have one fit per bin, for each parameter - The shape of the `self.fit_coeffts` arrays is: (binning shape ..., num fit params ) - - Internal function, not to be called by a user. - ''' - - arrays = [] - - self.binning_shape = binning.shape - - for fit_coefft_initial_value in self.initial_fit_coeffts: - - fit_coefft_array = np.full( - self.binning_shape, fit_coefft_initial_value, dtype=FTYPE) - arrays.append(fit_coefft_array) - - self.fit_coeffts = np.stack(arrays, axis=-1) - self.fit_coeffts_sigma = np.full_like(self.fit_coeffts, np.NaN) - - def evaluate(self, param, out, bin_idx=None): - ''' - Evaluate the functional form for the given `param` values. - Uses the current values of the fit coefficients. - - By default evaluates all bins, but optionally can specify a particular bin (used - when fitting). - ''' - - # Create an array to fill with this contribution - this_out = np.full_like(out, np.NaN, dtype=FTYPE) - - # Form the arguments to pass to the functional form - # Need to be flexible in terms of the number of fit parameters - args = [param] - for cft_idx in range(self.num_fit_coeffts): - args += [self.get_fit_coefft(bin_idx=bin_idx, coefft_idx=cft_idx)] - args += [this_out] - - # Call the function - self._hypersurface_func(*args) - - # Add to overall hypersurface result - out += this_out - - def gradient(self, param, out, bin_idx=None): - ''' - Evaluate gradient of the functional form for the given `param` values. - Uses the current values of the fit coefficients. - - By default evaluates all bins, but optionally can specify a particular bin (used when fitting). - ''' - # Create an array to fill with the gradient - this_out = np.full_like(out, np.NaN, dtype=FTYPE) - - # Form the arguments to pass to the functional form - # Need to be flexible in terms of the number of fit parameters - args = [param] - for cft_idx in range(self.num_fit_coeffts): - args += [self.get_fit_coefft(bin_idx=bin_idx, coefft_idx=cft_idx)] - args += [this_out] - - # Call the function - self._hypersurface_func.grad(*args) - # Copy to wherever the gradient is to be stored - np.copyto(src=this_out, dst=out) - - def get_fit_coefft_idx(self, bin_idx=None, coefft_idx=None): - ''' - Indexing the fit_coefft matrix is a bit of a pain - This helper function eases things - ''' - - # TODO can probably do this more cleverly with numpy indexing, but works for now... - - # Indexing based on the bin - if (bin_idx is Ellipsis) or (bin_idx is None): - idx = [Ellipsis] - else: - idx = list(bin_idx) - - # Indexing based on the coefficent - if isinstance(coefft_idx, slice): - idx.append(coefft_idx) - elif coefft_idx is None: - idx.append(slice(0, -1)) - else: - idx.append(coefft_idx) - - # Put it all together - idx = tuple(idx) - return idx - - def get_fit_coefft(self, *args, **kwargs): - ''' - Get a fit coefficient values from the matrix - Basically just wrapping the indexing function - ''' - idx = self.get_fit_coefft_idx(*args, **kwargs) - return self.fit_coeffts[idx] - - @property - def serializable_state(self): - """ - OrderedDict containing savable state attributes - """ - - if self._serializable_state is None: # TODO always redo? - - state = collections.OrderedDict() - state["name"] = self.name - state["func_name"] = self.func_name - state["num_fit_coeffts"] = self.num_fit_coeffts - state["fit_coeffts"] = self.fit_coeffts - state["fit_coeffts_sigma"] = self.fit_coeffts_sigma - state["initial_fit_coeffts"] = self.initial_fit_coeffts - state["fitted"] = self.fitted - state["fit_param_values"] = self.fit_param_values - state["binning_shape"] = self.binning_shape - state["nominal_value"] = self.nominal_value - state["bounds"] = self.bounds - state["coeff_prior_sigma"] = self.coeff_prior_sigma - self._serializable_state = state - - return self._serializable_state - - @classmethod - def from_state(cls, state): - - # Define param init kwargs - # Special handling for `coeff_prior_sigma`, which was missing in older - # files (due to a bug in `serializable_state`) so need to handle this - # for backwards compatibility - param_init_kw = dict( - name=state.pop("name"), - func_name=state.pop("func_name"), - initial_fit_coeffts=state.pop("initial_fit_coeffts"), - bounds=state.pop("bounds"), - ) - if "coeff_prior_sigma" in state : - param_init_kw["coeff_prior_sigma"] = state.pop("coeff_prior_sigma") - else : - param_init_kw["coeff_prior_sigma"] = None - - # Create the param - param = cls(**param_init_kw) - - # Define rest of state - for k in list(state.keys()): - setattr(param, k, state.pop(k)) - - return param - -''' -Hypersurface fitting and loading helper functions -''' - - -def get_hypersurface_file_name(hypersurface, tag): - ''' - Create a descriptive file name - ''' - - num_dims = len(hypersurface.params) - param_str = "_".join(hypersurface.param_names) - output_file = "%s__hypersurface_fits__%dd__%s.json" % ( - tag, num_dims, param_str) - - return output_file - - -def fit_hypersurfaces(nominal_dataset, sys_datasets, params, output_dir, tag, combine_regex=None, - log=True, minimum_mc=0, minimum_weight=0, **hypersurface_fit_kw): - ''' - A helper function that a user can use to fit hypersurfaces to a bunch of simulation - datasets, and save the results to a file. Basically a wrapper of Hypersurface.fit, - handling common pre-fitting tasks like producing mapsets from piplelines, merging - maps from similar specifies, etc. - - Note that this supports fitting multiple hypersurfaces to the datasets, e.g. one per - simulated species. Returns a dict with format: { map_0_key : map_0_hypersurface, - ..., map_N_key : map_N_hypersurface, } - - Parameters - ---------- - nominal_dataset : dict - Definition of the nominal dataset. Specifies the pipleline with which the maps - can be created, and the values of all systematic parameters used to produced the - dataset. - Format must be: - nominal_dataset = { - "pipeline_cfg" = ), - "sys_params" = { param_0_name : param_0_value_in_dataset, ..., param_N_name : param_N_value_in_dataset } - } - Sys params must correspond to the provided HypersurfaceParam instances provided - in the `params` arg. - - sys_datasets : list of dicts - List of dicts, where each dict defines one of the systematics datasets to be - fitted. The format of each dict is the same as explained for `nominal_dataset` - - params : list of HypersurfaceParams - List of HypersurfaceParams instances that define the hypersurface. Note that - this defined ALL hypersurfaces fitted in this function, e.g. only supports a - single parameterisation for all maps (this is almost almost what you want). - - output_dir : str - Path to directly to write results file in - - tag : str - A string identifier that will be included in the file name to help you make - sense of the file in the future. Note that additional information on the - contents will be added to the file name by this function. - - combine_regex : list of str, or None - List of string regex expressions that will be used for merging maps. Used to - combine similar species. Must be something that can be passed to the - `MapSet.combine_re` function (see that functions docs for more details). Choose - `None` is do not want to perform this merging. - - minimum_mc : int, optional - Minimum number of unweighted MC events required in each bin. If the number - of unweighted MC events in a bin in any MC set is less than this number, the - value is set to exactly zero and will be excluded from the fit. - - minimum_weight : float, optional - Minimum weight per bin. Bins with a total summed weight of less than this - number are excluded from the fit. Intended use is to exclude extremely small - values from KDE histograms that would pull the fit to zero. - - hypersurface_fit_kw : kwargs - kwargs will be passed on to the calls to `Hypersurface.fit` - ''' - - # TODO Current yneed to manually ensure consistency between `combine_regex` here and - # the `links` param in `hypersurface` Need to make `hypersurface` directly use - # the value of `combine_regex` from the Hypersurface instance - - # - # Make copies - # - - # Take (deep) copies of lists/dicts to avoid modifying the originals - # Useful for cases where this function is called in a loop (e.g. leave-one-out tests) - nominal_dataset = copy.deepcopy(nominal_dataset) - sys_datasets = copy.deepcopy(sys_datasets) - params = copy.deepcopy(params) - - - # - # Check inputs - # - - # Check types - assert isinstance(sys_datasets, collections.Sequence) - assert isinstance(params, collections.Sequence) - assert isinstance(output_dir, str) - assert isinstance(tag, str) - - # Check formatting of datasets is as expected - all_datasets = [nominal_dataset] + sys_datasets - for dataset in all_datasets: - assert isinstance(dataset, collections.Mapping) - assert "pipeline_cfg" in dataset - assert isinstance(dataset["pipeline_cfg"], (str, collections.Mapping)) - assert "sys_params" in dataset - assert isinstance(dataset["sys_params"], collections.Mapping) - - # Check params - assert len(params) >= 1 - for p in params: - assert isinstance(p, HypersurfaceParam) - - # Report inputs - msg = "Hypersurface fit details :" - msg += " Num params : %i" % len(params) - msg += " Num fit coefficients : %i" % sum( - [p.num_fit_coeffts for p in params]) - msg += " Num datasets : 1 nominal + %i systematics" % len( - sys_datasets) - msg += " Nominal values : %s" % nominal_dataset["sys_params"] - logging.info(msg) - - # - # Generate MapSets - # - - def find_hist_stage(pipeline): - """Locate the index of the hist stage in a pipeline.""" - hist_idx_found = False - kde_idx_found = False - for i, s in enumerate(pipeline.stages): - if s.__class__.__name__ == "hist": - hist_idx = i - hist_idx_found = True - break - if s.__class__.__name__ == "kde": - hist_idx = i - kde_idx_found = True - break - if not hist_idx_found and not kde_idx_found: - raise RuntimeError("Could not find hist or kde stage in pipeline, aborting.") - return hist_idx, kde_idx_found - - # Get maps and param values from nominal pipeline - nominal_pipeline = Pipeline(nominal_dataset["pipeline_cfg"]) - logging.info("Nominal pipeline parameters:\n" + repr(nominal_pipeline.params)) - pipeline_param_values = { p.name:p.value for p in nominal_pipeline.params } - nominal_dataset["mapset"] = nominal_pipeline.get_outputs() # return_sum=False) - # get the un-weighted event counts as well so that we can exclude bins - # with too little statistics - # First, find out which stage is the hist stage - hist_idx, is_kde = find_hist_stage(nominal_pipeline) - # minimum MC is only applicable to hist stage, not to KDE - if not is_kde: - nominal_pipeline.stages[hist_idx].unweighted = True - nominal_dataset["mapset_unweighted"] = nominal_pipeline.get_outputs() - else: - nominal_dataset["mapset_unweighted"] = None - # Bootstrapping is required to calculate errors on the histograms - assert nominal_pipeline.stages[hist_idx].bootstrap, ( - "Hypersurfaces can only be fit to KDE histograms if bootstrapping is enabled." - ) - del nominal_pipeline # Save memory - - # Loop over sys datasets and grap the maps from them too - # Also make sure the pipeline params match the nominal pipeline (only the input file should differ between them) - for sys_dataset in sys_datasets: - sys_pipeline = Pipeline(sys_dataset["pipeline_cfg"]) - for param in sys_pipeline.params : - assert param.value == pipeline_param_values[param.name], "Mismatch in pipeline param '%s' value between nominal and systematic pipelines : %s != %s" % (param.name, param.value, pipeline_param_values[param.name]) - sys_dataset["mapset"] = sys_pipeline.get_outputs() # return_sum=False) - # get the un-weighted event counts as well so that we can exclude bins - # with too little statistics - # First, find out which stage is the hist stage - hist_idx, is_kde = find_hist_stage(sys_pipeline) - if not is_kde: - sys_pipeline.stages[hist_idx].unweighted = True - sys_dataset["mapset_unweighted"] = sys_pipeline.get_outputs() - else: - sys_dataset["mapset_unweighted"] = None - assert sys_pipeline.stages[hist_idx].bootstrap, ( - "Hypersurfaces can only be fit to KDE histograms if bootstrapping is " - "enabled." - ) - del sys_pipeline - - # Merge maps according to the combine regex, if one was provided - if combine_regex is not None: - nominal_dataset["mapset"] = nominal_dataset["mapset"].combine_re(combine_regex) - if nominal_dataset["mapset_unweighted"] is not None: - nominal_dataset["mapset_unweighted"] = ( - nominal_dataset["mapset_unweighted"].combine_re(combine_regex) - ) - for sys_dataset in sys_datasets: - sys_dataset["mapset"] = sys_dataset["mapset"].combine_re(combine_regex) - if sys_dataset["mapset_unweighted"] is None: continue - sys_dataset["mapset_unweighted"] = ( - sys_dataset["mapset_unweighted"].combine_re(combine_regex) - ) - - # Remove bins (i.e. set their count to zero) that have too few MC events or too little - # total weight - for dataset in sys_datasets + [nominal_dataset]: - for map_name in dataset["mapset"].names: - if dataset["mapset_unweighted"] is not None: - insuff_mc = dataset["mapset_unweighted"][map_name].nominal_values < minimum_mc - else: - insuff_mc = np.zeros(dataset["mapset"][map_name].nominal_values.shape, dtype=bool) - insuff_weight = dataset["mapset"][map_name].nominal_values < minimum_weight - # Setting the hist to zero sets both nominal value and std_dev to zero - dataset["mapset"][map_name].hist[insuff_mc | insuff_weight] = 0. - - # TODO check every mapset has the same elements - - - - # - # Loop over maps - # - - # Create the container to fill - hypersurfaces = collections.OrderedDict() - - # Loop over maps - for map_name in nominal_dataset["mapset"].names: - - # - # Prepare data for fit - # - - nominal_map = nominal_dataset["mapset"][map_name] - nominal_param_values = nominal_dataset["sys_params"] - - sys_maps = [sys_dataset["mapset"][map_name] - for sys_dataset in sys_datasets] - sys_param_values = [sys_dataset["sys_params"] - for sys_dataset in sys_datasets] - - # - # Fit the hypersurface - # - - # Create the hypersurface - hypersurface = Hypersurface( - params=copy.deepcopy(params), # Need the deepcopy, as want one set of params per map - initial_intercept=0. if log else 1., # Initial value for intercept - log=log - ) - - # Perform fit - hypersurface.fit( - nominal_map=nominal_map, - nominal_param_values=nominal_param_values, - sys_maps=sys_maps, - sys_param_values=sys_param_values, - norm=True, - **hypersurface_fit_kw - ) - - # Record the pipeline params used to generate the maps used for - # the fits, for data provenance purposes only - hypersurface.fit_pipeline_param_values = pipeline_param_values - - # Report the results - logging.debug("\nFitted hypersurface report:\n%s" % hypersurface) - - # Store for later write to disk - hypersurfaces[map_name] = hypersurface - - - # - # Store results - # - - # Create a file name - output_path = os.path.join(output_dir, get_hypersurface_file_name( - list(hypersurfaces.values())[0], tag)) - - # Create the output directory - mkdir(output_dir) - - # Write to a json file - to_json(hypersurfaces, output_path) - - logging.info("Fit results written : %s" % output_path) - - return output_path - - -def load_hypersurfaces(input_file, expected_binning=None): - ''' - User function to load file containing hypersurface fits, as written using `fit_hypersurfaces`. - Can be multiple hypersurfaces assosicated with different maps. - - Returns a dict with the format: { map_0_key : map_0_hypersurface, ..., map_N_key : map_N_hypersurface, } - - Hnadling the following input files cases: - 1) Load files produced using this code (recommended) - 2) Load files producing using older versions of PISA - 3) Load public data releases csv formatted files - - Parameters - ---------- - input_file : str - Path to the file contsaining the hypersurface fits. - For the special case of the datareleases these needs to be the path to all - relevent CSV fles, e.g. "/hyperplanes_*.csv". - expected_binning : One/MultiDimBinning - (Optional) Expected binning for hypersurface. - It will checked enforced that this mathes the binning found in the parsed - hypersurfaces. For certain legacy cases where binning info is not stored, this - will be assumed to be the actual binning. - ''' - - # - # Check inputs - # - - assert isinstance(input_file, str) - - if expected_binning is not None: - assert is_binning(expected_binning) - - # - # PISA hypersurface files - # - - logging.info(f"Loading non-interpolated hypersurfaces from file: {input_file}") - hypersurfaces = None - if input_file.endswith("json") or input_file.endswith("json.bz2"): - - # Load file - input_data = from_json(input_file) - assert isinstance(input_data, collections.Mapping) - logging.info(f"Reading file complete, generating hypersurfaces...") - - # Testing various cases to support older files as well as modern ones... - if "sys_list" in input_data: - - # Legacy case, create a modern hypersurface instance using old hyperplane fits - hypersurfaces = _load_hypersurfaces_legacy(input_data) - logging.warn("Old fit files detected, loaded via legacy mode") - - else: - - # Otherwise assume file is using the modern format - hypersurfaces = collections.OrderedDict() - for map_name, hypersurface_state in list(input_data.items()): - hypersurfaces[map_name] = Hypersurface.from_state( - hypersurface_state) - - # - # Public data release file - # - - elif input_file.endswith("csv") or input_file.endswith("csv.bz2"): - - hypersurfaces = _load_hypersurfaces_data_release( - input_file, expected_binning) - - # - # Done - # - - else: - raise Exception("Unknown file format : %s" % input_file) - - # Check binning - if expected_binning is not None: - for hypersurface in hypersurfaces.values(): - if not hypersurface.binning.hash == expected_binning.hash: - for a, b, in zip(hypersurface.binning.dims, expected_binning.dims): - assert a == b, "Incompatible binning dimension %s and %s"%(a, b) - - logging.info(f"Generated hypersurfaces") - - return hypersurfaces - - -def _load_hypersurfaces_legacy(input_data): - ''' - Load an old hyperpane (not surface) fit file from older PISA version. - - Put the results into an instance the new `Hypersurface` class so can use the - resulting hypersurface in modern code. - - User should not use this directly, instead call `load_hypersurfaces`. - ''' - - hypersurfaces = collections.OrderedDict() - - # - # Loop over map names - # - - for map_name in input_data["map_names"]: - - # - # Create the params - # - - # Get the param names - param_names = input_data["sys_list"] - - # Create the param instances. - # Using linear functional forms (legacy files only supported linear forms, e.g. - # hyperplanes rather than surfaces). - params = [HypersurfaceParam( - name=name, func_name="linear", initial_fit_coeffts=None, ) for name in param_names] - - # - # Get binning - # - - # This varies depending on how old the file is... - # Note that the hypersurface class really only needs to know the binning - # shape (to create the coefficient arrays). - - # If the (serialized version of the) binning is stored, great! Use it - if "binning" in input_data: - binning = MultiDimBinning(**input_data["binning"]) - - # If no binning is available, can at least get the correct shape (using - # one of the map arrays) and create a dummy binning instance. - # Remember that the final dimension is the sys params, not binning - else: - # Remove last dimension - binning_shape = input_data[map_name][..., 0].shape - binning = MultiDimBinning([OneDimBinning(name="dummy_%i" % i, domain=[ - 0., 1.], is_lin=True, num_bins=dim) for i, dim in enumerate(binning_shape)]) - - # - # Create the hypersurface instance - # - - # Create the hypersurface - hypersurface = Hypersurface( - params=params, # Specify the systematic parameters - initial_intercept=1., # Intercept value (or first guess for fit) - ) - - # Set some internal members that would normally be configured during fitting - # Don't know the nominal values with legacy files, so just stores NaNs - hypersurface._init( - binning=binning, - nominal_param_values={ - name: np.NaN for name in hypersurface.param_names}, - ) - - # Indicate this is legacy data (not all functionality will work) - hypersurface.using_legacy_data = True - - # - # Get the fit values - # - - # Handling two different legacy cases here... - fitted_coefficients = input_data["hyperplanes"][map_name][ - "fit_params"] if "hyperplanes" in input_data else input_data[map_name] - - # Fitted coefficients have following array shape: [ binning dim 0, ..., binning dim N, sys params (inc. intercept) ] - intercept_values = fitted_coefficients[..., 0] - sys_param_gradient_values = { - n: fitted_coefficients[..., i+1] for i, n in enumerate(param_names)} - - # Write the values to the hypersurface - np.copyto(src=intercept_values, dst=hypersurface.intercept) - for param in hypersurface.params.values(): - np.copyto( - src=sys_param_gradient_values[param.name], dst=param.fit_coeffts[..., 0]) - - # Done, store the hypersurface - hypersurfaces[map_name] = hypersurface - - return hypersurfaces - - -def _load_hypersurfaces_data_release(input_file_prototype, binning): - ''' - Load the hypersurface CSV files from an official IceCube data release - - User should not use this directly, instead call `load_hypersurfaces`. - ''' - - # TODO Current only handles DRAGON (analysis B) data release (as was also the case for - # the older hyperplane code) - # TODO Would need to add support for muon hypersurface (including non-linear params) - # as well as a different binning - - import pandas as pd - - hypersurfaces = collections.OrderedDict() - - # - # Check inputs - # - - assert binning is not None, "Must provide binning when loading data release hypersurfaces" - - # - # Load CSV files - # - - fit_results = {} - fit_results['nue_cc+nuebar_cc'] = pd.read_csv(find_resource( - input_file_prototype.replace('*', 'nue_cc'))) - fit_results['numu_cc+numubar_cc'] = pd.read_csv(find_resource( - input_file_prototype.replace('*', 'numu_cc'))) - fit_results['nutau_cc+nutaubar_cc'] = pd.read_csv(find_resource( - input_file_prototype.replace('*', 'nutau_cc'))) - fit_results['nu_nc+nubar_nc'] = pd.read_csv(find_resource( - input_file_prototype.replace('*', 'all_nc'))) - - # - # Get hyperplane info - # - - param_names = None - - for map_name, map_fit_results in fit_results.items(): - - # - # Get hypersurface params - # - - # Remove the bin info from the data frame (only want hyperplane params) - # Check that find the same dimensions as the expected binning - # TODO Also check bin centers are within expected bins - for n in binning.names: - midpoints_found = np.unique(map_fit_results.pop(n).values) - assert midpoints_found.size == binning[n].num_bins, "Mismatch between expected and actual binning dimensions" - - # Also extract the special case of the offset - offset = map_fit_results.pop("offset") - - # Get the param names (everything remaining is a hypersurface param) - if param_names is None: - param_names = map_fit_results.columns.tolist() - else: - assert param_names == map_fit_results.columns.tolist( - ), "Mismatch between hypersurface params in different files" - - # Create the params - params = [HypersurfaceParam( - name=name, func_name="linear", initial_fit_coeffts=None, ) for name in param_names] - - # - # Create the hypersurface instance - # - - # Create the hypersurface - hypersurface = Hypersurface( - params=params, # Specify the systematic parameters - initial_intercept=1., # Intercept value (or first guess for fit) - ) - - # Set some internal members that would normally be configured during fitting - # Don't know the nominal values with legacy files, so just stores NaNs - hypersurface._init( - binning=binning, - nominal_param_values={ - name: np.NaN for name in hypersurface.param_names}, - ) - - # Indicate this is legacy data (not all functionality will work) - hypersurface.using_legacy_data = True - - # - # Get the fit values - # - - # Intercept - intercept_values = offset.values.reshape(binning.shape) - np.copyto(src=intercept_values, dst=hypersurface.intercept) - - # Param gradients - for param in hypersurface.params.values(): - sys_param_gradient_values = map_fit_results[param.name].values.reshape( - binning.shape) - np.copyto(src=sys_param_gradient_values, - dst=param.fit_coeffts[..., 0]) - - # Done, store the hypersurface - hypersurfaces[map_name] = hypersurface - - return hypersurfaces - - -# -# Test/example -# -def generate_asimov_testdata(binning, parameters, true_param_coeffs, - nominal_param_values, sys_param_values, - error_scale=0.1, log=False, intercept=2., - ): - hypersurface = Hypersurface( - params=parameters, # Specify the systematic parameters - # Intercept value (or first guess for fit) - initial_intercept=intercept, - log=log, - ) - assert set(hypersurface.params.keys()) == set(nominal_param_values.keys()) - assert set(hypersurface.params.keys()) == set(true_param_coeffs.keys()) - - hypersurface._init(binning=binning, nominal_param_values=nominal_param_values) - from pisa.core.map import Map, MapSet - for bin_idx in np.ndindex(binning.shape): - for name, coeffs in true_param_coeffs.items(): - assert len(coeffs) == hypersurface.params[name].num_fit_coeffts, ("number " - "of coefficients in the parameter must match") - for j, c in enumerate(coeffs): - idx = hypersurface.params[name].get_fit_coefft_idx(bin_idx=bin_idx, - coefft_idx=j, - ) - hypersurface.params[name].fit_coeffts[idx] = c - logging.debug("Truth hypersurface report:\n%s" % str(hypersurface)) - - # Only consider one particle type for simplicity - particle_key = "nue_cc" - # Create each dataset, e.g. set the systematic parameter values, calculate a bin count - hist = hypersurface.evaluate(nominal_param_values) - assert np.all(hist >= 0.), ("nominal map has negative values! " - "Choose different true parameters.") - nom_map = Map(name=particle_key, binning=binning, - hist=hist, error_hist=np.sqrt(hist)*error_scale, - ) - logging.debug("Nominal hist: \n%s" % str(nom_map.hist)) - sys_maps = [] - for i in range(len(sys_param_values)): - hist = hypersurface.evaluate(sys_param_values[i]) - assert np.all(hist > 0.), ("a systematic map has negative values! values: " - "%s systematics: %s" % (str(hist), str(sys_param_values[i]))) - sys_maps.append(Map(name=particle_key, binning=binning, - hist=hist, error_hist=np.sqrt(hist)*error_scale)) - return nom_map, sys_maps - - -def test_hypersurface_uncertainty(plot=False): - ''' - Simple test of hypersurface fits + uncertainty - 1. Creates some Asimov test data matching a true hypersurface and checks the ability - to fit back the truth. - 2. Fluctuates Asimov test data randomly to check uncertainties of hypersurface - ''' - - # Define systematic parameters in the hypersurface - params = [ - HypersurfaceParam(name="foo", func_name="linear", - initial_fit_coeffts=[1.]), - HypersurfaceParam(name="bar", func_name="quadratic", - initial_fit_coeffts=[1., -1.]), - ] - # Create the hypersurface - hypersurface = Hypersurface( - params=params, # Specify the systematic parameters - initial_intercept=1., # Intercept value (or first guess for fit) - log=False - ) - # Define binning with one dummy bin - binning = MultiDimBinning([OneDimBinning(name="reco_energy", - domain=[0., 10.], - num_bins=1, - units=ureg.GeV, - is_lin=True - )]) - # Define true coefficients - true_coeffs = {'foo': [-0.4], 'bar': [0.5, 1.]} - true_intercept = 5. - nominal_param_values = {'foo': 1., 'bar': 0.} - # making combinations of systematic values - foo_vals = np.linspace(-2., 2., 6) - bar_vals = np.linspace(-2, 1.5, 8) - sys_param_values = [] - for f in foo_vals: - for b in bar_vals: - sys_param_values.append({'foo': f, 'bar': b}) - - nom_map, sys_maps = generate_asimov_testdata(binning, - params, - true_coeffs, - nominal_param_values, - sys_param_values, - intercept=true_intercept, - log=False, - error_scale=0.2, - ) - # Perform fit - hypersurface.fit( - nominal_map=nom_map, - nominal_param_values=nominal_param_values, - sys_maps=sys_maps, - sys_param_values=sys_param_values, - norm=False, - ) - # Report the results - logging.debug("Fitted hypersurface report:\n%s" % hypersurface) - - assert np.allclose(hypersurface.intercept, true_intercept, - rtol=ALLCLOSE_KW['rtol']*10.) - for param_name in hypersurface.param_names: - assert np.allclose(hypersurface.params[param_name].fit_coeffts, - true_coeffs[param_name], rtol=ALLCLOSE_KW['rtol']*10.) - if plot: - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plot_bin_fits(ax, hypersurface, bin_idx=[0], param_name='foo', - label='Asimov test map') - ax.grid() - plt.savefig('test_hypersurface_foo.pdf') - - fig, ax = plt.subplots() - plot_bin_fits(ax, hypersurface, bin_idx=[0], param_name='bar', - label='Asimov test map') - ax.grid() - plt.savefig('test_hypersurface_bar.pdf') - - # Evaluate hypersurface and uncertainties at some points - # that just happen to be the systematic values (but choice could be different) - asimov_true_points = [] - asimov_fit_points = [] - asimov_fit_errs = [] - for i in range(len(sys_param_values)): - hist, errs = hypersurface.evaluate( - sys_param_values[i], return_uncertainty=True) - asimov_fit_points.append(hist) - asimov_fit_errs.append(errs) - asimov_true_points.append(sys_maps[i].nominal_values) - asimov_true_points = np.concatenate(asimov_true_points) - asimov_fit_points = np.concatenate(asimov_fit_points) - asimov_fit_errs = np.concatenate(asimov_fit_errs) - - logging.debug("Asimov true points:\n%s" % str(asimov_true_points)) - logging.debug("Asimov fit points:\n%s" % str(asimov_fit_points)) - logging.debug("Asimov fit error estimates:\n%s" % str(asimov_fit_errs)) - assert np.allclose(asimov_true_points, asimov_fit_points, rtol=ALLCLOSE_KW['rtol']*10.) - logging.debug("Fluctuating maps and re-fitting...") - # do several rounds of fluctuation, re-fit and storage of results - n_rounds = 100 - fluctuated_fit_points = [] - for i in range(n_rounds): - #logging.info("Round %d/%d" % (i+1, n_rounds)) - nom_map_fluct = nom_map.fluctuate(method='gauss') - sys_maps_fluct = [] - for s in sys_maps: - sys_maps_fluct.append(s.fluctuate(method='gauss')) - hypersurface.fit( - nominal_map=nom_map_fluct, - nominal_param_values=nominal_param_values, - sys_maps=sys_maps_fluct, - sys_param_values=sys_param_values, - norm=False, - ) - fluctuated_fit_points.append([]) - for j in range(len(sys_param_values)): - hist = hypersurface.evaluate( - sys_param_values[j], return_uncertainty=False) - fluctuated_fit_points[-1].append(hist) - fluctuated_fit_points[-1] = np.concatenate(fluctuated_fit_points[-1]) - logging.trace("Fluctuated fit points:\n%s" % - str(fluctuated_fit_points[-1])) - # evaluate whether the actual fluctuations match the estimated errors - fluctuated_fit_points = np.array(fluctuated_fit_points) - fit_differences = fluctuated_fit_points - asimov_fit_points - all_pulls = fit_differences / asimov_fit_errs - avg_fit_differences = np.mean(fit_differences, axis=0) - std_pulls = np.std(all_pulls, axis=0) - logging.debug("Average fluctuated fit difference:\n%s" % - str(avg_fit_differences)) - logging.debug("Mean pulls per point:\n%s" % str(std_pulls)) - logging.debug("Mean pull: %.3f" % np.mean(std_pulls)) - assert np.abs(np.mean(std_pulls) - - 1.) < 0.1, "avg. pulls too far from expectation" - - if plot: - plt.figure() - plt.hist(all_pulls.flatten(), bins=50, - density=True, label='fluctuated fits') - x_plot = np.linspace(-4, 4, 100) - plt.plot(x_plot, np.exp(-x_plot**2/2.) / - np.sqrt(2.*np.pi), label='expectation') - plt.title('pull distribution') - plt.xlabel('pull') - plt.ylabel('density') - plt.legend() - plt.savefig('test_hypersurface_pull.pdf') - logging.info('<< PASS : test_hypersurface_uncertainty >>') - - -def test_hypersurface_basics(): - ''' - Test basic fitting, inject/recover, storing and loading - ''' - import tempfile - from pisa.core.map import Map - - params = [HypersurfaceParam(name="foo", func_name="linear", - initial_fit_coeffts=[1.], - ), - # the exponential HS function did not reliably recover injected true - # parameters, probably due to the degeneracy with the intercept. - HypersurfaceParam(name="bar", func_name="quadratic", - initial_fit_coeffts=[.1, .1], - ), - ] - - # Create the hypersurface - hypersurface = Hypersurface(params=params, # Specify the systematic parameters - initial_intercept=1., # Intercept first guess for fit) - log=False, - ) - - binning = MultiDimBinning([OneDimBinning(name="reco_energy", - domain=[0., 10.], - num_bins=3, - units=ureg.GeV, - is_lin=True, - )]) - - # Define the values for the parameters for each dataset - nom_param_values = {} - sys_param_values_dict = {} - - if "foo" in [p.name for p in params]: - nom_param_values["foo"] = 0. - sys_param_values_dict["foo"] = [0., 0., 0., -1., +1., 1.] - - if "bar" in [p.name for p in params]: - nom_param_values["bar"] = 10. - sys_param_values_dict["bar"] = [20., 30., 0., 10., 10., 15.] - - # Get number of datasets - num_sys_datasets = len(list(sys_param_values_dict.values())[0]) - - # Only consider one particle type for simplicity - particle_key = "nue_cc" - - # Create a dummy "true" hypersurface that can be used to generate - # some fake bin values for the dataset - true_hypersurface = copy.deepcopy(hypersurface) - true_hypersurface._init( - binning=binning, nominal_param_values=nom_param_values) - true_hypersurface.intercept.fill(10.) - if "foo" in true_hypersurface.params: - true_hypersurface.params["foo"].fit_coeffts[..., 0].fill(2.) - if "bar" in true_hypersurface.params: - true_hypersurface.params["bar"].fit_coeffts[..., 0].fill(-.1) - true_hypersurface.params["bar"].fit_coeffts[..., 1].fill(0.05) - - logging.debug("Truth hypersurface report:\n%s" % str(true_hypersurface)) - - # Create each dataset, e.g. set the systematic parameter values, calculate bin count - hist = true_hypersurface.evaluate(nom_param_values) - nom_map = Map(name=particle_key, binning=binning, - hist=hist, error_hist=np.sqrt(hist), - ) - sys_maps = [] - sys_param_values = [] - for i in range(num_sys_datasets): - sys_param_values.append({name: sys_param_values_dict[name][i] - for name in list(true_hypersurface.params.keys()) - }) - hist = true_hypersurface.evaluate(sys_param_values[-1]) - sys_maps.append(Map(name=particle_key, binning=binning, - hist=hist, error_hist=np.sqrt(hist), - ) - ) - - # Perform fit - hypersurface.fit(nominal_map=nom_map, - nominal_param_values=nom_param_values, - sys_maps=sys_maps, - sys_param_values=sys_param_values, - norm=False, - ) - - logging.debug("Fitted hypersurface report:\n%s" % hypersurface) - - # Check the fitted parameter values match the truth - # This only works if `norm=False` in the `hypersurface.fit` call just above - logging.debug("Checking fit recovered truth...") - assert np.allclose(hypersurface.intercept, - true_hypersurface.intercept, rtol=ALLCLOSE_KW['rtol']*10.) - for param_name in hypersurface.param_names: - assert np.allclose(hypersurface.params[param_name].fit_coeffts, - true_hypersurface.params[param_name].fit_coeffts, - rtol=ALLCLOSE_KW['rtol']*10. - ) - logging.debug("... fit was successful!") - - # testing save/reload - with tempfile.TemporaryDirectory() as tmpdirname: - file_name = "hypersurface.json.bz2" - file_path = os.path.join(tmpdirname, file_name) - to_json(hypersurface, file_path) - - reloaded_hypersurface = Hypersurface.from_state(file_path) - - logging.debug( - "Checking saved and re-loaded hypersurfaces are identical...") - assert np.allclose(hypersurface.intercept, - reloaded_hypersurface.intercept, - rtol=ALLCLOSE_KW['rtol']*10. - ) - for param_name in hypersurface.param_names: - assert np.allclose(hypersurface.params[param_name].fit_coeffts, - reloaded_hypersurface.params[param_name].fit_coeffts, - rtol=ALLCLOSE_KW['rtol']*10. - ) - logging.debug("... save+re-load was successful!") - - # test getting and setting coefficients - coeffts = hypersurface.fit_coeffts - reloaded_hypersurface.fit_coeffts = coeffts - logging.debug( - "Checking hypersurfaces are identical after getting and setting coeffts...") - assert np.allclose(hypersurface.intercept, reloaded_hypersurface.intercept, - rtol=ALLCLOSE_KW['rtol']*10.) - for param_name in hypersurface.param_names: - assert np.allclose(hypersurface.params[param_name].fit_coeffts, - reloaded_hypersurface.params[param_name].fit_coeffts, - rtol=ALLCLOSE_KW['rtol']*10.) - logging.debug("... setting and getting coefficients was successful!") - logging.info('<< PASS : test_hypersurface_basics >>') - - -# Run the examp'es/tests -if __name__ == "__main__": - set_verbosity(2) - test_hypersurface_basics() - test_hypersurface_uncertainty() diff --git a/pisa/utils/hypersurface/hypersurface_plotting.py b/pisa/utils/hypersurface/hypersurface_plotting.py deleted file mode 100644 index 338836838..000000000 --- a/pisa/utils/hypersurface/hypersurface_plotting.py +++ /dev/null @@ -1,250 +0,0 @@ -''' -Hypersurface Plotting functions -''' - -__all__ = ['plot_bin_fits', 'plot_bin_fits_2d'] - -__author__ = 'T. Stuttard, A. Trettin' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - -import numpy as np - -def plot_bin_fits(ax, hypersurface, bin_idx, param_name, color=None, label=None, hs_label=None, show_nominal=False, show_offaxis=True, show_onaxis=True, show_zero=False, show_uncertainty=True, xlim=None): - ''' - Plot the hypersurface for a given bin, in 1D w.r.t. to a single specified parameter. - Plots the following: - - on-axis data points used in the fit - - hypersurface w.r.t to the specified parameter (1D) - - nominal value of the specified parameter - - Parameters - ---------- - ax : matplotlib.Axes - matplotlib ax to draw the plot on - - hypersurface : Hypersurface - Hypersurface to make the plots from - - bin_idx : tuple - Index (numpy array indexing format) of the bin to plot - - param_name : str - Name of the parameter of interest - - color : str - color to use for hypersurface curve - - label : str - label to use for hypersurface curve - - show_nominal : bool - Indicate the nominal value of the param on the plot - - show_uncertainty : bool - Indicate the hypersurface uncertainty on the plot - - show_onaxis : bool - Plot the "on-axis" input datasets (meaning those whose only - off-nominal parameter is the one being plotter). - - show_offaxis : bool - Plot the "off-axis" input datasets (meaning those with multiple - off-nominal parameter values). - - xlim : tuple or None - Optionally, specify the xlim to span when plotting the hypersurface - If not specified, will span all input datasets - - ''' - - import matplotlib.pyplot as plt - - # Get the param - param = hypersurface.params[param_name] - - # Check bin index - assert len(bin_idx) == len(hypersurface.binning.shape) - - # Get bin values for this bin only - try: - chosen_bin_values = np.squeeze( - [m.nominal_values[bin_idx] for m in hypersurface.fit_maps]) - chosen_bin_sigma = np.squeeze([m.std_devs[bin_idx] - for m in hypersurface.fit_maps]) - except: - # sometimes maps aren't stored, like when we are recovering interpolated - # hypersurfaces - chosen_bin_values = np.full(hypersurface.num_fit_sets, np.nan) - chosen_bin_sigma = np.full(hypersurface.num_fit_sets, np.nan) - - # Define a mask for selecting on-axis points only - on_axis_mask = hypersurface.get_on_axis_mask(param.name) - with np.errstate(invalid='ignore'): # empty bins are a regular occurrence - include_mask = np.ones_like(on_axis_mask) if show_zero else ( - np.asarray(chosen_bin_values) > 0.) - - # Plot the points from the datasets used for fitting - x = np.asarray(param.fit_param_values)[on_axis_mask & include_mask] - y = np.asarray(chosen_bin_values)[on_axis_mask & include_mask] - yerr = np.asarray(chosen_bin_sigma)[on_axis_mask & include_mask] - - if show_onaxis : - ax.errorbar(x=x, y=y, yerr=yerr, marker="o", color=( - "black" if color is None else color), linestyle="None", label=label) - - # Plot off-axis points by projecting them along the fitted surface on the axis. - if show_offaxis: - x = np.asarray(param.fit_param_values) - y = np.asarray(chosen_bin_values) - yerr = np.asarray(chosen_bin_sigma) - prediction = hypersurface.evaluate( - hypersurface.fit_param_values, bin_idx=bin_idx) - params_for_projection = {param.name: x} - for p in list(hypersurface.params.values()): - if p.name != param.name: - params_for_projection[p.name] = np.full_like( - x, hypersurface.nominal_values[p.name]) - prediction_on_axis = hypersurface.evaluate( - params_for_projection, bin_idx=bin_idx) - y_projected = y - prediction + prediction_on_axis - ax.errorbar(x=x[~on_axis_mask & include_mask], - y=y_projected[~on_axis_mask & include_mask], - yerr=yerr[~on_axis_mask & include_mask], - marker="o", color=("black" if color is None else color), linestyle="None", - alpha=0.2, - ) - - # Plot the hypersurface - # Generate as bunch of values along the sys param axis to make the plot - # Then calculate the hypersurface value at each point, using the nominal values for all other sys params - if xlim is None : - xlim = (np.nanmin(param.fit_param_values), np.nanmax(param.fit_param_values)) - x_plot = np.linspace(xlim[0], xlim[1], num=100) - params_for_plot = {param.name: x_plot, } - for p in list(hypersurface.params.values()): - if p.name != param.name: - params_for_plot[p.name] = np.full_like( - x_plot, hypersurface.nominal_values[p.name]) - y_plot, y_sigma = hypersurface.evaluate( - params_for_plot, bin_idx=bin_idx, return_uncertainty=True) - ax.plot(x_plot, y_plot, color=("red" if color is None else color), label=hs_label) - if show_uncertainty: - ax.fill_between(x_plot, y_plot - y_sigma, y_plot + y_sigma, - color=("red" if color is None else color), alpha=0.2) - - # Show the nominal value - if show_nominal: - ax.axvline(x=param.nominal_value, color="blue", - alpha=0.7, linestyle="-", zorder=-1) - - # Format ax - ax.set_xlabel(param.name) - ax.grid(True) - ax.legend() -# ax.set_ylim((-0.1, 4)) - - # Return the hypersurface - return_values = [x_plot, y_plot] - if show_uncertainty : - return_values.append(y_sigma) - return tuple(return_values) - - -def plot_bin_fits_2d(ax, hypersurface, bin_idx, param_names): - ''' - Plot the hypersurface for a given bin, in 2D w.r.t. to a pair of params - Plots the following: - - All data points used in the fit - - hypersurface w.r.t to the specified parameters (2D) - - nominal value of the specified parameters - - Parameters - ---------- - ax : matplotlib.Axes - matplotlib ax to draw the plot on - - hypersurface : Hypersurface - Hypersurface to make the plots from - - bin_idx : tuple - Index (numpy array indexing format) of the bin to plot - - param_names : list of str - List containing the names of the two parameters of interest - ''' - - import matplotlib.pyplot as plt - - assert len(param_names) == 2 - assert len(bin_idx) == len(hypersurface.binning.shape) - - # Get bin values for this bin only - chosen_bin_values = [m.nominal_values[bin_idx] - for m in hypersurface.fit_maps] - chosen_bin_sigma = [m.std_devs[bin_idx] for m in hypersurface.fit_maps] - - # Shortcuts to the param values and bin values - p0 = hypersurface.params[param_names[0]] - p1 = hypersurface.params[param_names[1]] - z = np.asarray(chosen_bin_values) - # zerr = #TODO error bars - - # Choose categories of points to plot - nominal_mask = hypersurface.get_nominal_mask() - p0_on_axis_mask = hypersurface.get_on_axis_mask(p0.name) & (~nominal_mask) - p1_on_axis_mask = hypersurface.get_on_axis_mask(p1.name) & (~nominal_mask) - - off_axis_mask = np.ones_like(p1_on_axis_mask, dtype=bool) - # Ignore points that are off-axis for other params - for p in list(hypersurface.params.values()): - if p.name not in param_names: - off_axis_mask = off_axis_mask & ( - p.fit_param_values == p.nominal_value) - off_axis_mask = off_axis_mask & ~( - p0_on_axis_mask | p1_on_axis_mask | nominal_mask) - - # Plot data points - ax.scatter(p0.fit_param_values[p0_on_axis_mask], p1.fit_param_values[p0_on_axis_mask], - z[p0_on_axis_mask], marker="o", color="blue", label="%s on-axis" % p0.name) - ax.scatter(p0.fit_param_values[p1_on_axis_mask], p1.fit_param_values[p1_on_axis_mask], - z[p1_on_axis_mask], marker="^", color="red", label="%s on-axis" % p1.name) - ax.scatter(p0.fit_param_values[off_axis_mask], p1.fit_param_values[off_axis_mask], - z[off_axis_mask], marker="s", color="black", label="Off-axis") - ax.scatter(p0.fit_param_values[nominal_mask], p1.fit_param_values[nominal_mask], - z[nominal_mask], marker="*", color="magenta", label="Nominal") - - # Plot hypersurface (as a 2D surface) - x_plot = np.linspace(p0.fit_param_values.min(), - p0.fit_param_values.max(), num=100) - y_plot = np.linspace(p1.fit_param_values.min(), - p1.fit_param_values.max(), num=100) - x_grid, y_grid = np.meshgrid(x_plot, y_plot) - x_grid_flat = x_grid.flatten() - y_grid_flat = y_grid.flatten() - params_for_plot = {p0.name: x_grid_flat, p1.name: y_grid_flat, } - for p in list(hypersurface.params.values()): - if p.name not in list(params_for_plot.keys()): - params_for_plot[p.name] = np.full_like( - x_grid_flat, hypersurface.nominal_values[p.name]) - z_grid_flat = hypersurface.evaluate(params_for_plot, bin_idx=bin_idx) - z_grid = z_grid_flat.reshape(x_grid.shape) - surf = ax.plot_surface(x_grid, y_grid, z_grid, cmap="viridis", linewidth=0, - antialiased=False, alpha=0.2) # , label="Hypersurface" ) - - # Format - ax.set_xlabel(p0.name) - ax.set_ylabel(p1.name) - ax.legend() diff --git a/pisa/utils/images/chi2.png b/pisa/utils/images/chi2.png deleted file mode 100644 index cee9fcf56..000000000 Binary files a/pisa/utils/images/chi2.png and /dev/null differ diff --git a/pisa/utils/images/conv_poisson_pdf.png b/pisa/utils/images/conv_poisson_pdf.png deleted file mode 100644 index 205144340..000000000 Binary files a/pisa/utils/images/conv_poisson_pdf.png and /dev/null differ diff --git a/pisa/utils/images/mod_chi2.png b/pisa/utils/images/mod_chi2.png deleted file mode 100644 index d347e13c3..000000000 Binary files a/pisa/utils/images/mod_chi2.png and /dev/null differ diff --git a/pisa/utils/images/poisson_pdf.png b/pisa/utils/images/poisson_pdf.png deleted file mode 100644 index 73413f526..000000000 Binary files a/pisa/utils/images/poisson_pdf.png and /dev/null differ diff --git a/pisa/utils/images/prior.png b/pisa/utils/images/prior.png deleted file mode 100644 index f25d17c91..000000000 Binary files a/pisa/utils/images/prior.png and /dev/null differ diff --git a/pisa/utils/jsons.py b/pisa/utils/jsons.py deleted file mode 100644 index ba117374b..000000000 --- a/pisa/utils/jsons.py +++ /dev/null @@ -1,545 +0,0 @@ -""" -A set of utilities for reading (and instantiating) objects from and writing -objects to JSON files. -""" - - -from __future__ import absolute_import, division - -import bz2 -from collections import OrderedDict -from collections.abc import Iterable, Mapping, Sequence -from numbers import Integral, Number, Real -import os -import tempfile - -import numpy as np -import simplejson as json -from six import string_types - -from pisa import ureg -from pisa.utils.log import logging, set_verbosity - -__all__ = [ - 'JSON_EXTS', - 'ZIP_EXTS', - 'XOR_EXTS', - 'json_string', - 'dumps', - 'loads', - 'from_json', - 'to_json', - 'NumpyEncoder', - 'NumpyDecoder', - 'test_to_json_from_json', -] - -__author__ = 'S. Boeser, J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2019, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -JSON_EXTS = ['json'] -ZIP_EXTS = ['bz2'] -XOR_EXTS = ['xor'] - - -def json_string(string): - """Decode a json string""" - return json.loads(string) - - -def dumps(content, indent=2): - """Dump object to JSON-encoded string""" - return json.dumps(content, cls=NumpyEncoder, indent=indent, - sort_keys=False) - - -def loads(s): - """Load (create) object from JSON-encoded string""" - return json.loads(s, cls=NumpyDecoder) - - -def from_json(filename, cls=None): - """Open a file in JSON format (optionally compressed with bz2 or - xor-scrambled) and parse the content into Python objects. - - Parameters - ---------- - filename : str - cls : class (type) object, optional - If provided, the class is attempted to be instantiated as described in - Notes section. - - Returns - ------- - contents_or_obj : simple Python objects or `cls` instantiated therewith - - Notes - ----- - If `cls` is provided as a class (type) object, this function attempts to - instantiate the class with the data loaded from the JSON file, as follows: - - * if `cls` has a `from_json` method, that is called directly: .. :: - - cls.from_json(filename) - - * if the data loaded from the JSON file is a non-string sequence: .. :: - - cls(*data) - - * if the data loaded is a Mapping (dict, OrderedDict, etc.): .. :: - - cls(**data) - - * for all other types loaded from the JSON: .. :: - - cls(data) - - Note that this currently only recognizes files by their extensions. I.e., - the file must be named .. :: - - myfile.json - myfile.json.bz2 - myfile.json.xor - - represent a bsic JSON file, a bzip-compressed JSON, and an xor-scrambled - JSON, respectively. - - """ - # Import here to avoid circular imports - from pisa.utils.log import logging - from pisa.utils.resources import open_resource - - if cls is not None: - if not isinstance(cls, type): - raise TypeError( - "`cls` should be a class object (type); got {} instead".format( - type(cls) - ) - ) - if hasattr(cls, "from_json"): - return cls.from_json(filename) - - # Otherwise, handle instantiating the class generically (which WILL - # surely fail for many types) based on the type of the object loaded - # from JSON file: Mapping is passed via cls(**data), non-string - # Sequence is passed via cls(*data), and anything else is passed via - # cls(data) - - _, ext = os.path.splitext(filename) - ext = ext.replace('.', '').lower() - assert ext in JSON_EXTS or ext in ZIP_EXTS + XOR_EXTS - try: - if ext == 'bz2': - fobj = open_resource(filename, 'rb') - try: - bz2_content = fobj.read() - finally: - fobj.close() - decompressed = bz2.decompress(bz2_content).decode() - del bz2_content - content = json.loads( - decompressed, - cls=NumpyDecoder, - object_pairs_hook=OrderedDict - ) - del decompressed - elif ext == 'xor': - - with open(filename, 'rb') as infile: - encrypted_bytes = infile.read() - - # decrypt with key 42 - decypted_bytes = bytearray() - for byte in encrypted_bytes: - decypted_bytes.append(byte ^ 42) - - content = json.loads(decypted_bytes.decode(), - cls=NumpyDecoder, - object_pairs_hook=OrderedDict) - else: - fobj = open_resource(filename) - try: - content = json.load( - fobj, - cls=NumpyDecoder, - object_pairs_hook=OrderedDict, - ) - finally: - fobj.close() - except: - logging.error('Failed to load JSON, `filename`="%s"', filename) - raise - - if cls is None: - return content - - if isinstance(content, Mapping): - return cls(**content) - if not isinstance(string_types) and isinstance(content, Sequence): - return cls(*content) - return cls(content) - - -def to_json(content, filename, indent=2, overwrite=True, warn=True, - sort_keys=False): - """Write `content` to a JSON file at `filename`. - - Uses a custom parser that automatically converts numpy arrays to lists. - - If `filename` has a ".bz2" extension, the contents will be compressed - (using bz2 and highest-level of compression, i.e., -9). - - If `filename` has a ".xor" extension, the contents will be xor-scrambled to - make them human-unreadable (this is useful for, e.g., blind fits). - - - Parameters - ---------- - content : obj - Object to be written to file. Tries making use of the object's own - `to_json` method if it exists. - - filename : str - Name of the file to be written to. Extension has to be 'json' or 'bz2'. - - indent : int - Pretty-printing. Cf. documentation of json.dump() or json.dumps() - - overwrite : bool - Set to `True` (default) to allow overwriting existing file. Raise - exception and quit otherwise. - - warn : bool - Issue a warning message if a file is being overwritten (`True`, - default). Suppress warning by setting to `False` (e.g. when overwriting - is the desired behaviour). - - sort_keys : bool - Output of dictionaries will be sorted by key if set to `True`. - Default is `False`. Cf. json.dump() or json.dumps(). - - """ - # Import here to avoid circular imports - from pisa.utils.fileio import check_file_exists - from pisa.utils.log import logging - - if hasattr(content, 'to_json'): - return content.to_json(filename, indent=indent, overwrite=overwrite, - warn=warn, sort_keys=sort_keys) - - check_file_exists(fname=filename, overwrite=overwrite, warn=warn) - - _, ext = os.path.splitext(filename) - ext = ext.replace('.', '').lower() - assert ext == 'json' or ext in ZIP_EXTS + XOR_EXTS - - with open(filename, 'wb') as outfile: - if ext == 'bz2': - outfile.write( - bz2.compress( - json.dumps( - content, outfile, indent=indent, cls=NumpyEncoder, - sort_keys=sort_keys, allow_nan=True, ignore_nan=False - ).encode() - ) - ) - elif ext == 'xor': - json_bytes = json.dumps( - content, indent=indent, cls=NumpyEncoder, - sort_keys=sort_keys, allow_nan=True, ignore_nan=False - ).encode() - - # encrypt with key 42 - encrypted_bytes = bytearray() - for byte in json_bytes: - encrypted_bytes.append(byte ^ 42) - - outfile.write(encrypted_bytes) - else: - outfile.write( - json.dumps( - content, indent=indent, cls=NumpyEncoder, - sort_keys=sort_keys, allow_nan=True, ignore_nan=False - ).encode() - ) - logging.debug('Wrote %.2f kiB to %s', outfile.tell()/1024., filename) - - -# TODO: figure out how to serialize / deserialize scalars and arrays with -# uncertainties - -class NumpyEncoder(json.JSONEncoder): - """ - Subclass of ::class::`json.JSONEncoder` that overrides `default` method to - allow writing numpy arrays and other special objects PISA uses to JSON - files. - """ - def default(self, obj): # pylint: disable=method-hidden - """Encode special objects to be representable as JSON.""" - if hasattr(obj, 'serializable_state'): - return obj.serializable_state - - if isinstance(obj, string_types): - return obj - - if isinstance(obj, ureg.Quantity): - converted = [self.default(x) for x in obj.to_tuple()] - return converted - - # must have checked for & handled strings prior to this or infinite - # recursion will result - if isinstance(obj, Iterable): - return [self.default(x) for x in obj] - - if isinstance(obj, np.integer): - return int(obj) - - if isinstance(obj, np.floating): - return float(obj) - - # NOTE: np.bool_ is *Numpy* scalar bool type - if isinstance(obj, np.bool_): - return bool(obj) - - # NOTE: we check for these more generic types _after_ checking for - # np.bool_ since np.bool_ is considered to be both Integral and Real, - # but we want a boolean values (True or False) written out as such - if isinstance(obj, Integral): - return int(obj) - - if isinstance(obj, Real): - return float(obj) - - if isinstance(obj, string_types): - return obj - - # If we get here, we have a type that cannot be serialized. This call - # should simply raise an exception. - return super().default(obj) - - -class NumpyDecoder(json.JSONDecoder): - """Decode JSON array(s) as numpy.ndarray; also returns python strings - instead of unicode.""" - def __init__( - self, - encoding=None, - object_hook=None, - parse_float=None, - parse_int=None, - parse_constant=None, - strict=True, - object_pairs_hook=None, - ): - super().__init__( - encoding=encoding, - object_hook=object_hook, - parse_float=parse_float, - parse_int=parse_int, - parse_constant=parse_constant, - strict=strict, - object_pairs_hook=object_pairs_hook, - ) - # Only need to override the default array handler - self.parse_array = self.json_array_numpy - self.scan_once = json.scanner.py_make_scanner(self) - - def json_array_numpy(self, s_and_end, scan_once, **kwargs): - """Interpret arrays (lists by default) as numpy arrays where this does - not yield a string or object array; also handle conversion of - particularly-formatted input to pint Quantities.""" - # Use the default array parser to get list-ified version of the data - values, end = json.decoder.JSONArray(s_and_end, scan_once, **kwargs) - - # Assumption for all below logic is the result is a Sequence (i.e., has - # attribute `__len__`) - assert isinstance(values, Sequence), str(type(values)) + "\n" + str(values) - - if len(values) == 0: - return values, end - - try: - # -- Check for pint quantity -- # - - if ( - isinstance(values, ureg.Quantity) - or any(isinstance(val, ureg.Quantity) for val in values) - ): - return values, end - - # Quantity tuple (`quantity.to_tuple()`) with a scalar produces from - # the raw JSON, e.g., - # - # [9.8, [['meter', 1.0], ['second', -2.0]]] - # - # or an ndarray (here of shape (2, 3)) produces from the raw JSON, - # e.g., - # - # [[[0, 1, 2], [2, 3, 4]], [['meter', 1.0], ['second', -2.0]]] - # - if ( - len(values) == 2 - and isinstance(values[1], Sequence) - and all( - isinstance(subval, Sequence) - and len(subval) == 2 - and isinstance(subval[0], string_types) - and isinstance(subval[1], Number) - for subval in values[1] - ) - ): - values = ureg.Quantity.from_tuple(values) - return values, end - - # Units part of quantity tuple (`quantity.to_tuple()[1]`) - # e.g. m / s**2 is represented as .. :: - # - # [['meter', 1.0], ['second', -2.0]] - # - # --> Simply return, don't perform further conversion - if ( - isinstance(values[0], Sequence) - and all( - len(subval) == 2 - and isinstance(subval[0], string_types) - and isinstance(subval[1], Number) - for subval in values - ) - ): - return values, end - - # Individual unit (`quantity.to_tuple()[1][0]`) - # e.g. s^-2 is represented as .. :: - # - # ['second', -2.0] - # - # --> Simply return, don't perform further conversion - if ( - len(values) == 2 - and isinstance(values[0], string_types) - and isinstance(values[1], Number) - ): - return values, end - - try: - ndarray_values = np.asarray(values) - except ValueError: - return values, end - - # Things like lists of dicts, or mixed types, will result in an - # object array; these are handled in PISA as lists, not numpy - # arrays, so return the pre-converted (list) version of `values`. - # - # Similarly, sequences of strings should stay lists of strings, not - # become numpy arrays. - if issubclass(ndarray_values.dtype.type, (np.object0, np.str0, str)): - return values, end - - return ndarray_values, end - - except TypeError: - return values, end - -# TODO: include more basic types in testing (strings, etc.) -def test_to_json_from_json(): - """Unit tests for writing various types of objects to and reading from JSON - files (including bz2-compressed and xor-scrambled files)""" - # pylint: disable=unused-variable - from shutil import rmtree - import sys - from pisa.utils.comparisons import recursiveEquality - - proto_float_array = np.array( - [-np.inf, np.nan, np.inf, -1.1, 0.0, 1.1], dtype=np.float64 - ) - proto_int_array = np.array([-2, -1, 0, 1, 2], dtype=np.int64) - proto_str_array = np.array(['a', 'ab', 'abc', '', ' '], dtype=str) - - floating_types = [float] + sorted( - set(t for _, t in np.sctypeDict.items() if issubclass(t, np.floating)), key=str, - ) - integer_types = [int] + sorted( - set(t for _, t in np.sctypeDict.items() if issubclass(t, np.integer)), key=str, - ) - - test_info = [ - dict( - proto_array=proto_float_array, - dtypes=floating_types, - ), - dict( - proto_array=proto_int_array, - dtypes=integer_types, - ), - # TODO: strings currently do not work - #dict( - # proto_array=proto_str_array, - # dtypes=[str, np.str0, np.str_, np.string_], - #), - ] - - test_data = OrderedDict() - for info in test_info: - proto_array = info['proto_array'] - for dtype in info['dtypes']: - typed_array = proto_array.astype(dtype) - s_dtype = str(np.dtype(dtype)) - test_data["array_" + s_dtype] = typed_array - test_data["scalar_" + s_dtype] = dtype(typed_array[0]) - - temp_dir = tempfile.mkdtemp() - try: - for name, obj in test_data.items(): - # Test that the object can be written / read directly - base_fname = os.path.join(temp_dir, name + '.json') - for ext in ['', '.bz2', '.xor']: - fname = base_fname + ext - to_json(obj, fname) - loaded_data = from_json(fname) - if obj.dtype in floating_types: - assert np.allclose( - loaded_data, obj, rtol=1e-12, atol=0, equal_nan=True - ), '{}=\n{}\nloaded=\n{}\nsee file: {}'.format( - name, obj, loaded_data, fname - ) - else: - assert np.all(loaded_data == obj), \ - '{}=\n{}\nloaded_nda=\n{}\nsee file: {}'.format( - name, obj, loaded_data, fname - ) - - # Test that the same object can be written / read as a value in a - # dictionary - orig = OrderedDict([(name, obj), (name + "x", obj)]) - base_fname = os.path.join(temp_dir, 'd.{}.json'.format(name)) - for ext in ['', '.bz2', '.xor']: - fname = base_fname + ext - to_json(orig, fname) - loaded = from_json(fname) - assert recursiveEquality(loaded, orig), \ - 'orig=\n{}\nloaded=\n{}\nsee file: {}'.format( - orig, loaded, fname - ) - finally: - rmtree(temp_dir) - - logging.info('<< PASS : test_to_json_from_json >>') - - -if __name__ == '__main__': - set_verbosity(1) - test_to_json_from_json() diff --git a/pisa/utils/kde_hist.py b/pisa/utils/kde_hist.py deleted file mode 100644 index 0da3de11f..000000000 --- a/pisa/utils/kde_hist.py +++ /dev/null @@ -1,480 +0,0 @@ -""" -Functions to get KDE smoothed historgams -""" - - -from __future__ import absolute_import, division - -from kde.cudakde import gaussian_kde, bootstrap_kde -import numpy as np -from uncertainties import unumpy as unp -import copy - -from pisa.core.binning import OneDimBinning, MultiDimBinning - - -__all__ = ["get_hist", "kde_histogramdd", "test_kde_histogramdd"] - -__author__ = "P. Eller" - -__license__ = """Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -def get_hist( - sample, - binning, - weights=None, - bw_method="scott", - adaptive=True, - alpha=0.3, - use_cuda=False, - coszen_reflection=0.25, - coszen_name="coszen", - oversample=1, - bootstrap=False, - bootstrap_niter=10, -): - """Helper function for histograms from KDE - - For description of args see kde_histogramdd() - - Handling the reflctions at the coszen edges - - ToDo: - ---- - * Handle zenith like coszen? Or better: Define set of variables to perform - reflection on and reflection parameters (e.g. `reflect_fract` or somesuch - to stand in for for `coszen_reflection` and `reflect_dims` as standin for - `coszen_name`; also need some way to specify whether to reflect about lower - and/or upper edge); each such parameter can either be a single value, or a - sequence with one value per variable. - * Any good reason for 0.25 and 'scott' defaults? If not, don't define a - default and force the user to explicitly set this when function is called. - """ - - if bootstrap and oversample > 1: - # Because the errors within a bin are highly correlated, they could not just - # be added in quadrature to create an oversampled histogram with errors. - raise ValueError("Bootstrapping cannot be combined with oversampling.") - - # the KDE implementation expects an empty weights array instead of `None` - if weights is None: - weights = [] - - # Get the overall normalization here, because the KDE will be normalized - # to one and we'll need to rescale in the end - if len(weights) == 0: - norm = sample.shape[0] - else: - norm = np.sum(np.nan_to_num(weights)) - - binning = binning.oversample(oversample) - - # Flip around to satisfy the kde implementation - x = sample.T - - # Must have same amount of dimensions as binning dimensions - assert x.shape[0] == len(binning) - - # TODO: What if coszen isn't in binning? Does this fail? - # Yes, coszen is expected - cz_bin = binning.index(coszen_name) - - # Swap out cz bin to first place (index 0) - if cz_bin != 0: - # Also swap binning: - new_binning = [binning[coszen_name]] - for b in binning: - if b.name != coszen_name: - new_binning.append(b) - binning = MultiDimBinning(new_binning) - x[[0, cz_bin]] = x[[cz_bin, 0]] - - # Check if edge needs to be reflected - reflect_lower = binning[coszen_name].bin_edges[0] == -1 - reflect_upper = binning[coszen_name].bin_edges[-1] == 1 - - # Get the kernel weights - kde_kwargs = dict( - weights=np.nan_to_num(weights), - bw_method=bw_method, - adaptive=adaptive, - alpha=alpha, - use_cuda=use_cuda, - ) - if bootstrap: - kernel_weights_adaptive = bootstrap_kde(x, niter=bootstrap_niter, **kde_kwargs) - else: - kernel_weights_adaptive = gaussian_kde(x, **kde_kwargs) - - # Get the bin centers, where we're going to evaluate the KDEs, and extend - # the bin range for reflection - bin_points = [] - for b in binning: - c = b.weighted_centers.m - if b.name == coszen_name: - # how many bins to add for reflection - l = int(len(c) * float(coszen_reflection)) - if reflect_lower: - c0 = 2 * c[0] - c[1 : l + 1][::-1] - else: - c0 = [] - if reflect_upper: - c1 = 2 * c[-1] - c[-l - 1 : -1][::-1] - else: - c1 = [] - c = np.concatenate([c0, c, c1]) - bin_points.append(c) - - # Shape including reflection edges - megashape = ( - binning.shape[0] + (int(reflect_upper) + int(reflect_lower)) * l, - binning.shape[1], - ) - - # Shape of the reflection edges alone - minishape = (binning.shape[0] - l, binning.shape[1]) - - # Create a set of points - grid = np.meshgrid(*bin_points, indexing="ij") - points = np.array([g.ravel() for g in grid]) - - # Evaluate KDEs at given points - if bootstrap: - hist, errors = kernel_weights_adaptive(points) - # variances can simply be added together when we apply reflections, we take - # the root afterwards - variances = errors ** 2 - else: - hist = kernel_weights_adaptive(points) - - # Reshape 1d array into nd - hist = hist.reshape(megashape) - if bootstrap: - variances = variances.reshape(megashape) - - def apply_reflection(hist_): - # Cut off the reflection edges, mirror them, fill up remaining space with - # zeros and add to histo - if reflect_lower: - hist0 = hist_[0:l, :] - hist0_0 = np.zeros(minishape) - hist0 = np.flipud(np.concatenate([hist0_0, hist0])) - hist_ = hist_[l:, :] - else: - hist0 = 0 - - if reflect_upper: - hist1 = hist_[-l:, :] - hist1_0 = np.zeros(minishape) - hist1 = np.flipud(np.concatenate([hist1, hist1_0])) - hist_ = hist_[:-l, :] - else: - hist1 = 0 - - hist_ = hist_ + hist1 + hist0 - return hist_ - - hist = apply_reflection(hist) - if bootstrap: - variances = apply_reflection(variances) - errors = np.sqrt(variances) - - # Bin volumes - volume = binning.bin_volumes(attach_units=False) - hist = hist * volume - if bootstrap: - errors = errors * volume - - # Downsample, not applicable when bootstrapping - if oversample != 1: - for i, b in enumerate(binning): - hist = np.add.reduceat( - hist, np.arange(0, len(b.bin_edges) - 1, oversample), axis=i - ) - - # Swap back the axes - if cz_bin != 0: - hist = np.swapaxes(hist, 0, cz_bin) - if bootstrap: - errors = np.swapaxes(errors, 0, cz_bin) - - if bootstrap: - return hist * norm, errors * norm - else: - return hist * norm - - -def kde_histogramdd( - sample, - binning, - weights=None, - bw_method="scott", - adaptive=True, - alpha=0.3, - use_cuda=False, - coszen_reflection=0.25, - coszen_name="coszen", - oversample=1, - stack_pid=True, - bootstrap=False, - bootstrap_niter=10 -): - """Run kernel density estimation (KDE) for an array of data points, and - then evaluate them on a histogram-like grid to effectively produce a - histogram-like output. - Handles reflection at coszen edges, and will expect coszen to be in the binning - - Based on Sebastian Schoenen's KDE implementation: - http://code.icecube.wisc.edu/svn/sandbox/schoenen/kde - - Parameters - ---------- - sample : array - Shape (N_evts, vars), with vars in the right order corresponding to the - binning order. - - binning : MultiDimBinning - A coszen dimension is expected - - weights : None or array - Same shape as `sample` - - bw_method: string - 'scott' or 'silverman' (see kde module) - - adaptive : bool - (see kde module) - - alpha : float - A parameter for the KDEs (see kde module) - - use_cuda : bool - Run on GPU (only works with <= 2d) - - coszen_reflection : float - Part (number between 0 and 1) of binning that is reflected at the - coszen -1 and 1 edges - - coszen_name : string - Binning name to identify the coszen bin that needs to undergo special - treatment for reflection - - oversample : int - Evaluate KDE at more points per bin, takes longer, but is more accurate - - stack_pid : bool - Treat each pid bin separately, not as another dimension of the KDEs - Only supported for two additional dimensions, pid binning must be named `pid` - - bootstrap : bool - Use the ``bootstrap_kde`` class to produce error estimates on the KDE histograms. - Slow, not recommended during fits. - - bootstrap_niter : int - Number of bootstrap iterations. - - Returns - ------- - histogram : numpy.ndarray - - ToDo: - ----- - - * Maybe return Map with binnings attached insted of nd-array? - * Generalize to handle any dimensions with any reflection criterias - - """ - if weights is not None and len(weights) != sample.shape[0]: - raise ValueError( - "Length of sample (%s) and weights (%s) incompatible" - % (sample.shape[0], len(weights)) - ) - - if not stack_pid: - return get_hist( - sample=sample, - binning=binning, - weights=weights, - bw_method=bw_method, - adaptive=adaptive, - alpha=alpha, - use_cuda=use_cuda, - coszen_reflection=coszen_reflection, - coszen_name=coszen_name, - oversample=oversample, - bootstrap=bootstrap, - bootstrap_niter=bootstrap_niter - ) - - # treat pid bins separately - # asuming we're dealing with 2d apart from PID - bin_names = copy.copy(binning.names) - bin_edges = [b.bin_edges.m for b in binning] - pid_bin = bin_names.index("pid") - other_bins = [0, 1, 2] - other_bins.pop(pid_bin) - bin_names.pop(pid_bin) - assert len(bin_names) == 2 - pid_bin_edges = bin_edges.pop(pid_bin) - d2d_binning = [] - for b in binning: - if b.name != "pid": - d2d_binning.append(b) - d2d_binning = MultiDimBinning(d2d_binning) - pid_stack = [] - if bootstrap: - pid_stack_errors = [] - - for pid in range(len(pid_bin_edges) - 1): - mask_pid = (sample.T[pid_bin] >= pid_bin_edges[pid]) & ( - sample.T[pid_bin] < pid_bin_edges[pid + 1] - ) - data = np.array( - [sample.T[other_bins[0]][mask_pid], sample.T[other_bins[1]][mask_pid]] - ) - - if weights is None: - weights_pid = None - else: - weights_pid = weights[mask_pid] - - hist_kwargs = dict( - sample=data.T, - weights=weights_pid, - binning=d2d_binning, - coszen_name=coszen_name, - use_cuda=use_cuda, - bw_method=bw_method, - alpha=alpha, - oversample=oversample, - coszen_reflection=coszen_reflection, - adaptive=adaptive, - bootstrap=bootstrap, - bootstrap_niter=bootstrap_niter - ) - if bootstrap: - hist, errors = get_hist(**hist_kwargs) - pid_stack.append(hist) - pid_stack_errors.append(errors) - else: - pid_stack.append(get_hist(**hist_kwargs)) - - hist = np.dstack(pid_stack) - if bootstrap: - errors = np.dstack(pid_stack_errors) - - if pid_bin != 2: - hist = np.swapaxes(hist, pid_bin, 2) - if bootstrap: - errors = np.swapaxes(errors, pid_bin, 2) - - if bootstrap: - return hist, errors - else: - return hist - - -# TODO: make the plotting optional but add comparisons against some known -# results. This can be accomplished by seeding before calling random to obtain -# a reference result, and check that the same values are returned when run -# below. - - -def test_kde_histogramdd(): - """Unit tests for kde_histogramdd""" - from argparse import ArgumentParser - from shutil import rmtree - from tempfile import mkdtemp - from pisa import ureg - from pisa.core.map import Map, MapSet - from pisa.utils.log import logging, set_verbosity - from pisa.utils.plotter import Plotter - - parser = ArgumentParser() - parser.add_argument("-v", action="count", default=None, help="set verbosity level") - args = parser.parse_args() - set_verbosity(args.v) - - temp_dir = mkdtemp() - - try: - my_plotter = Plotter( - stamp="", - outdir=temp_dir, - fmt="pdf", - log=False, - annotate=False, - symmetric=False, - ratio=True, - ) - - b1 = OneDimBinning( - name="coszen", num_bins=20, is_lin=True, domain=[-1, 1], tex=r"\cos(\theta)" - ) - b2 = OneDimBinning( - name="energy", num_bins=10, is_log=True, domain=[1, 80] * ureg.GeV, tex=r"E" - ) - b3 = OneDimBinning(name="pid", num_bins=2, bin_edges=[0, 1, 2], tex=r"pid") - binning = b1 * b2 * b3 - - # now let's generate some toy data - - N = 100000 - cz = np.random.normal(1, 1.2, N) - # cut away coszen outside -1, 1 - cz = cz[(cz >= -1) & (cz <= 1)] - e = np.random.normal(30, 20, len(cz)) - pid = np.random.uniform(0, 2, len(cz)) - data = np.array([cz, e, pid]).T - - # make numpy histogram for validation - bins = [unp.nominal_values(b.bin_edges) for b in binning] - raw_hist, _ = np.histogramdd(data, bins=bins) - - # get KDE'ed histo - hist = kde_histogramdd( - data, - binning, - bw_method="silverman", - coszen_name="coszen", - oversample=10, - use_cuda=True, - stack_pid=True, - ) - - # put into mapsets and plot - m1 = Map(name="KDE", hist=hist, binning=binning) - m2 = Map(name="raw", hist=raw_hist, binning=binning) - with np.errstate(divide="ignore", invalid="ignore"): - m3 = m2 / m1 - m3.name = "hist/KDE" - m3.tex = m3.name - m4 = m1 - m2 - m4.name = "KDE - hist" - m4.tex = m4.name - ms = MapSet([m1, m2, m3, m4]) - my_plotter.plot_2d_array(ms, fname="test_kde", cmap="summer") - except: - rmtree(temp_dir) - raise - else: - logging.warning( - "Inspect and manually clean up output(s) saved to %s" % temp_dir - ) - - -if __name__ == "__main__": - test_kde_histogramdd() diff --git a/pisa/utils/likelihood_functions.py b/pisa/utils/likelihood_functions.py deleted file mode 100755 index da66ac33c..000000000 --- a/pisa/utils/likelihood_functions.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -This script contains functions to compute Barlow-Beeston Likelihood, as well as -an implementation of the Poisson-Gamma mixture. - -These likelihood implementations (except for poissonLLH) take into account uncertainties due to -finite Monte Carlo statistics. - -The functions are called in stats.py to apply them to histograms. - -Note that these likelihoods are NOT centered around 0 (i.e. if data == expectation, LLH != 0) -""" -from __future__ import print_function - -import numpy as np -from scipy import special -from scipy import optimize - -__author__ = "Ahnaf Tahmid" -__email__ = "tahmid@ualberta.ca" -__date__ = "2019-08-15" - -def poisson_gamma(data, sum_w, sum_w2, a=1, b=0): - """ - Log-likelihood based on the poisson-gamma mixture. This is a Poisson likelihood using a Gamma prior. - This implementation is based on the implementation of Austin Schneider (aschneider@icecube.wisc.edu) - -- Input variables -- - data = data histogram - sum_w = MC histogram - sum_w2 = Uncertainty map (sum of weights squared in each bin) - a, b = hyperparameters of gamma prior for MC counts; default values of a = 1 and b = 0 corresponds to LEff (eq 3.16) https://doi.org/10.1007/JHEP06(2019)030 - a = 0 and b = 0 corresponds to LMean (Table 2) https://doi.org/10.1007/JHEP06(2019)030 - - -- Output -- - llh = LLH values in each bin - - -- Notes -- - Shape of data, sum_w, sum_w2 and llh are identical - """ - - llh = np.ones(data.shape) * -np.inf # Binwise LLH values - - bad_bins = np.logical_or(sum_w <= 0, sum_w2 < 0) # Bins where the MC is 0 or less than 0 - - # LLH would be 0 for the bad bins if the data is 0 - zero_llh = np.logical_and(data == 0, bad_bins) - llh[zero_llh] = 0 # Zero LLH for these bins if data is also 0 - - good_bins = ~bad_bins - poisson_bins = np.logical_and(sum_w2 == 0, good_bins) # In the limit that sum_w2 == 0, the llh converges to poisson - - llh[poisson_bins] = poissonLLH(data[poisson_bins], sum_w[poisson_bins]) # Poisson LLH since limiting case - - # Calculate hyperparameters for the gamma posterior for MC counts - regular_bins = np.logical_and(good_bins, ~poisson_bins) # Bins on which the poisson_gamma LLH would be evaluated - alpha = sum_w[regular_bins]**2./sum_w2[regular_bins] + a - beta = sum_w[regular_bins]/sum_w2[regular_bins] + b - - k = data[regular_bins] - # Poisson-gamma LLH - L = alpha*np.log(beta) + special.loggamma(k+alpha).real - special.loggamma(k+1.0).real - (k+alpha)*np.log1p(beta) - special.loggamma(alpha).real - llh[regular_bins] = L - - return llh - -def poissonLLH(data, mc): - """ - Standard poisson likelihood - -- Input variables -- - data = data histogram - mc = MC histogram - - -- Output -- - LLH values in each bin - - -- Notes -- - Shape of data, mc are identical - """ - return data*np.log(mc) - mc - special.loggamma(data + 1) - -def barlowLLH(data, unweighted_mc, weights): - """ - Barlow-Beeston log-likelihood (constant terms not omitted) - Link to paper: https://doi.org/10.1016/0010-4655(93)90005-W - -- Input variables -- - data = data histogram - mc = weighted MC histogram - unweighted_mc = unweighted MC histogream - weights = weight of each bin - - -- Output -- - llh = LLH values in each bin - - -- Notes -- - Shape of data, mc, unweighted_mc, weights and llh must be identical - """ - - # The actual barlow LLH - def llh(A_, k, w, a): - SMALL_VAL = 1.e-10 - - f = w*A_ - - # Takes care of log(0) problems - if not len(A_) > 1: - f = max((f, SMALL_VAL)) - A_ = max((A_, SMALL_VAL)) - - # The loggamma() terms takes care of the log(value!) for non-integer values - return -1.*(k*np.log(f) - f + a*np.log(A_) - A_ - special.loggamma(k+1) - special.loggamma(a+1)) - - A = np.array(unweighted_mc) # Expected unweighted counts in a bin - # For each bin the appropriate 'A' will now be found using the current counts as a seed - # This will be done by using a minimiser to ensure that the value of 'A' found minimises the -LLH - - # Find values of A such that llh in each bin is a maximum - for i, val in enumerate(A): - # If the unweighted MC counts in the bin is 0, A = 0 - if val == 0: - continue - # Otherwise, find the value of A - arg = (data[i], weights[i], unweighted_mc[i]) - # Powell works fast and is fine for our purposes - result = optimize.minimize(fun=llh, x0=val, args=arg, method='Powell') - - # Check that the minimisation ran properly - if result.success: - A[i] = result.x - else: - print("Something went wrong...") - print("Minimiser message: ") - print("------------------") - print(result.message) - return -np.inf - - LLH = llh(A, data, weights, unweighted_mc) - - return -1*LLH # Return LLH (not negative LLH) - - diff --git a/pisa/utils/llh_client.py b/pisa/utils/llh_client.py deleted file mode 100755 index 4725fe3e8..000000000 --- a/pisa/utils/llh_client.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python - -""" -EMCEE-callable cleints for making parallel llh requests to a set of -`simpler_server`s; each client passes free param values to an available server, -server sets these on its DistributionMaker, generates outputs, compares the -resulting distributions against a reference template, and returns the llh value. - -`Cleint` code borrowed from Dan Krause - https://gist.github.com/dankrause/9607475 -see `__license__`. -""" - - -from __future__ import absolute_import, division, print_function - - -__author__ = "Dan Krause, adapted by J.L. Lanfranchi" - -__license__ = """ -Copyright 2017 Dan Krause - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License.""" - -__all__ = ["Client", "get_llh", "setup_sampler", "main"] - - -from argparse import ArgumentParser -from collections.abc import Mapping -from itertools import cycle -from multiprocessing import Manager -import socket -import time - -import emcee -import numpy as np - -from pisa.utils.llh_server import send_obj, receive_obj - - -class Client(object): - def __init__(self, server_address): - self.addr = server_address - if isinstance(self.addr, str): - address_family = socket.AF_UNIX - else: - address_family = socket.AF_INET - self.sock = socket.socket(address_family, socket.SOCK_STREAM) - self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - - def connect(self): - self.sock.connect(self.addr) - - def close(self): - self.sock.close() - - def __enter__(self): - self.connect() - return self - - def __exit__(self, exc_type, exc_value, traceback): - self.close() - - def get_llh(self, x): - send_obj(x, self.sock) - llh = receive_obj(self.sock) - return llh - - -def get_llh(x, server_infos): - """Get llh given free param values `x` (name chosen for compatibility with - EMCEE) from a `pisa.utils.llh_server` running somewhere, via TCP-based IPC. - - Parameters - ---------- - x : sequence - Free param values to set on the DistributionMaker, at which we wich to - find llh - - server_infos : dict or iterable thereof - Each dict must have fields "host", "port", and "lock" - - Returns - ------- - llh - - """ - if isinstance(server_infos, Mapping): - server_infos = [server_infos] - - # Cycle through all servers/ports forever - for server_info in cycle(server_infos): - if "lock" in server_info: - if server_info["lock"].acquire(blocking=False): - try: - with Client((server_info["host"], server_info["port"])) as client: - llh = client.get_llh(x) - print(server_info) - return llh - finally: - server_info["lock"].release() - else: - # don't hammer ports too hard (not sure about sleep time, though) - time.sleep(0.1) # sec - else: - with Client((server_info["host"], server_info["port"])) as client: - llh = client.get_llh(x) - return llh - - raise ValueError("No hosts?") - - -def setup_sampler(nwalkers, ndim, host_port_num, **kwargs): - """Setup/instantiate an `emcee.EnsembleSampler`. - - Parameters - ---------- - host_port_num : tuple of (host, port, num) or iterable thereof - - nwalkers, ndim, *args, **kwargs - Passed onto `emcee.EnsembleSampler`; note that fields - - kwargs["threads"] - kwargs["kwargs"]["server_infos"] - - are overwritten by values derived here (if any of these already exist - in `kwargs`). - - Returns - ------- - sampler : emcee.EnsembleSampler - - """ - host_port_num = tuple(host_port_num) - if isinstance(host_port_num[0], str): - host_port_num = (host_port_num,) - - # Construct (lock, host, port) dict per port per host, each with a unique lock - manager = Manager() - server_infos = [] - for hpn in host_port_num: - host = str(hpn[0]) - port0 = int(hpn[1]) - num = int(hpn[2]) - for port in range(port0, port0 + num): - server_infos.append(dict(lock=manager.Lock(), host=host, port=port)) - threads = len(server_infos) - - sub_kwargs = kwargs.get("kwargs", {}) - sub_kwargs["server_infos"] = server_infos - kwargs["kwargs"] = sub_kwargs - - sampler = emcee.EnsembleSampler(nwalkers, ndim, get_llh, threads=threads, **kwargs) - - return sampler - - -def main(description=__doc__): - """Parse command line arguments and execute""" - parser = ArgumentParser(description=description) - parser.add_argument( - "--host-port-num", - nargs=3, - action="append", - metavar="", - help="""Provide HOST PORT NUM, separated by spaces; repeat - --host-port-num arg for multiple hosts""" - ) - - kwargs = vars(parser.parse_args()) - ndim = 3 - nwalkers = 100 - sampler = setup_sampler(nwalkers=nwalkers, ndim=ndim, **kwargs) - - rand = np.random.RandomState(0) - p0 = rand.rand(ndim * nwalkers).reshape((nwalkers, ndim)) - - sampler.run_mcmc(p0, nwalkers) - - -if __name__ == "__main__": - main() diff --git a/pisa/utils/llh_defs/.gitignore b/pisa/utils/llh_defs/.gitignore deleted file mode 100644 index 8a58709a3..000000000 --- a/pisa/utils/llh_defs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.so -./build/ -__pycache__/ \ No newline at end of file diff --git a/pisa/utils/llh_defs/__init__.py b/pisa/utils/llh_defs/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa/utils/llh_defs/poisson.py b/pisa/utils/llh_defs/poisson.py deleted file mode 100644 index cf6bf829a..000000000 --- a/pisa/utils/llh_defs/poisson.py +++ /dev/null @@ -1,130 +0,0 @@ -''' -Relevant Poisson generalizations from the paper: - -https://arxiv.org/abs/1712.01293 - -and the newer one: - -https://arxiv.org/abs/1902.08831 - -All formulas return the log-likelihood or log-probability -Formulas are not optimized for speed, but for clarity -(except c implementations to some extent). They can definately -be sped up by smart indexing etc., and everyone has to adjust them -to their use case anyway. Formulas are not necessarily vetted, -please try them out yourself first. - -Any questions: thorsten.gluesenkamp@fau.de - -NOTE: ------- -This code has been heavily modified from its original version. -To view the original source, check out the git below: - -https://github.com/thoglu/mc_uncertainty - -''' -from __future__ import absolute_import, print_function, division - -import copy -import itertools -import numpy as np -import scipy -from scipy.stats import norm -from pisa.utils.llh_defs import poisson_gamma_mixtures - -from pisa.utils.log import logging -######################################################################################## - -######################################################################################## - -np.seterr(divide="warn") - - -def poisson(k, lambd): - '''standard Poisson likelihood''' - return (-lambd+k*np.log(lambd)-scipy.special.gammaln(k+1)).sum() - -def bars_and_stars_iterator(tot_k, num_bins): - '''Function used to compute - generalization 2 (eq. 47 of 1902.08831 ). - used to calculate the convolution of N - poisson-gamma mixtures in a safe way. - ''' - for c in itertools.combinations(range(tot_k + num_bins - 1), num_bins - 1): - yield [b - a - 1 for a, b in zip((-1,) + c, c + (tot_k + num_bins - 1,))] - -def calc_pg(k, alpha, beta): - '''Function used to compute - generalization 2 (eq. 47 of 1902.08831 ). - - calculate single poisson gamma mixture in - calc_pg vectorized over alpha/beta - ''' - return (scipy.special.gammaln(k + alpha) - scipy.special.gammaln(k + 1.0) - scipy.special.gammaln(alpha) + (alpha)* np.log(beta) - (alpha + k) * np.log(1.0 + beta)) - -def generalized_pg_mixture_2nd(k, alphas, betas): - '''Function used to compute - generalization 2 (eq. 47 of 1902.08831 ). - - second way to calculate generalized pg mixture, - based on iterative sum - ''' - - iters=[np.array(i) for i in bars_and_stars_iterator(int(k), len(betas))] - - log_res=[] - for it in iters: - - log_res.append(calc_pg(it, alphas, betas).sum()) - - return scipy.special.logsumexp(log_res) - - -def fast_pgmix(k, alphas=None, betas=None): - '''Core function that computes the generalized likelihood 2 - - ''' - assert isinstance(k, np.int64), 'ERROR: k must be an int' - assert isinstance(alphas, np.ndarray), 'ERROR: alphas must be numpy arrays' - assert isinstance(betas, np.ndarray), 'ERROR: betas must be numpy arrays' - - assert np.sum(alphas <= 0) == 0, 'ERROR: detected alpha values <=0' - assert np.sum(betas <= 0) == 0, 'ERROR: detected beta values <=0' - - ret = poisson_gamma_mixtures.c_generalized_pg_mixture(k, alphas, betas) - - if np.isnan(ret): - return 1. - - if not np.isfinite(ret): - logging.debug('something fishy is happening to the return value. it is not finite') - for a,b in zip(alphas,betas): - logging.debug(a, b, poisson_gamma_mixtures.c_generalized_pg_mixture(k, np.array([a]),np.array([b]))) - - - output_value = np.NaN - - if(ret > 1e-300): - output_value = np.log(ret) - - elif ret >= 0. and ret <= 1e-300: - # Replace a probability of exatcly to a small number - # to avoid errors in logarithm - output_value = np.log(1e-300) - else: - logging.debug('ERROR: running the c-based method failed.') - logging.debug('%i\t%.5f\t%.5f\t%.5f'%(k, ret, alphas,betas)) - raise Exception - return output_value - -def normal_log_probability(k,weight_sum=None): - '''Return a simple normal probability of - mu = weight_sum and sigma = sqrt(weight_sum) - - ''' - P = norm.pdf(k, loc=weight_sum, scale=np.sqrt(weight_sum)) - - logP = np.log(max([1.e-10,P])) - - return logP diff --git a/pisa/utils/llh_defs/poisson_gamma.c b/pisa/utils/llh_defs/poisson_gamma.c deleted file mode 100644 index a74508471..000000000 --- a/pisa/utils/llh_defs/poisson_gamma.c +++ /dev/null @@ -1,366 +0,0 @@ -#include -#include -#include -#include "poisson_gamma.h" - - -/* eq. 91 - generalized mixture from standard Poisson-Gamma mixtures */ -void generalized_pg_mixture(int k, double *alphas, double *betas, size_t w_size, double *result) -{ - int i=0,j=0; - - double first_var_vec[w_size]; - - double deltas[k+2], sum_terms[k+1]; - deltas[0]=1.0; - - double prefac=1.0; - double running_vec[w_size]; - - for (i=0; i < w_size;i++) - { - first_var_vec[i]=1.0/(1.0+betas[i]); - prefac*=pow((1.0/(1.0+1.0/betas[i])), alphas[i]); - running_vec[i]=1.0; - } - - if(k>0) - { - for(i=1; i0) - { - for(i=1; i0) - { - for(i=1; i 0 ){ - double maxVal = arr[0]; - double sum = 0; - - for (i = 1 ; i < count ; i++){ - if (arr[i] > maxVal){ - maxVal = arr[i]; - } - } - - for (i = 0; i < count ; i++){ - sum += exp(arr[i] - maxVal); - } - return log(sum) + maxVal; - - } - else - { - return 0.0; - } -} - -/* eq 85 (generalization (3)) for single source dataset */ -void single_pgg(int k, double A, double B, double Q, double kmc, double gamma, double *log_sterlings, int sterling_size, double *res) -{ - double log_log_factor=log(1.0/(gamma-Q*log(A))); - double log_Q=log(Q); - double prefac=kmc*log_log_factor-lgamma((double)k+1)-lgamma(kmc)+kmc*log(gamma)+k*log(B); - int i; - double sumvec[k+1]; - - for(i=0; i<=k; i++) - { - sumvec[i]=lgamma(kmc+i)+i*(log_Q+log_log_factor)+log_sterlings[k*sterling_size+i]; - } - - *res=log_sum_exp(sumvec, k+1)+prefac; -} - - - -double log_sum_two_vecs_inverse(double *a, double *b, int len) -{ - - double maxVal = a[0]+b[len-1]; - double sum = 0; - double temp[len]; - int i; - temp[0]=maxVal; - - for (i = 1 ; i < len ; i++){ - temp[i]=a[i]+b[len-1-i]; - if ( temp[i] > maxVal) - { - maxVal = temp[i]; - } - } - - for (i = 0; i < len ; i++) - { - sum += exp(temp[i] - maxVal); - } - return log(sum) + maxVal; -} - -void convolve_two(double *a,double *b, double *res, int len) -{ - // len should be k+1 - - int i; - double temp[len]; - - // i goes from 0 to k - for(i=0; i < len; i++) - { - temp[i]=log_sum_two_vecs_inverse(a,b,i+1); - } - for(i=0; i alphas.data, betas.data, alphas.size, &res) - - return res - -## eq. 97 which only looks at the marginalized expressions ,but drops the alphas/betas -## used for generalization (1) -def c_generalized_pg_mixture_marginalized(int k, np.ndarray[np.float64_t, ndim=1] gammas, np.ndarray[np.float64_t, ndim=1] deltas, np.ndarray[np.float64_t, ndim=1] epsilons): - - cdef double res=0.0 - generalized_pg_mixture_marginalized(k, gammas.data, deltas.data, epsilons.data, gammas.size, &res) - - return res - -def c_generalized_pg_mixture_marginalized_combined(int k, np.ndarray[np.float64_t, ndim=1] alphas, np.ndarray[np.float64_t, ndim=1] betas, np.ndarray[np.float64_t, ndim=1] gammas, np.ndarray[np.float64_t, ndim=1] alphas_2, np.ndarray[np.float64_t, ndim=1] betas_2): - - cdef double res=0.0 - generalized_pg_mixture_marginalized_combined(k, alphas.data, betas.data, gammas.data, alphas_2.data, betas_2.data, alphas.size, alphas_2.size, &res) - - return res - -def c_single_pgg(int k, double A,double B, double Q, double kmc, double gamma, np.ndarray[np.float64_t, ndim=2] log_sterlings): - - cdef double res=0.0 - if((log_sterlings.shape[0]-1) log_sterlings.data, int(log_sterlings.shape[0]), &res) - - return res - - -def c_multi_pgg(int k, np.ndarray[np.float64_t, ndim=1] A,np.ndarray[np.float64_t, ndim=1] B, np.ndarray[np.float64_t, ndim=1] Q, np.ndarray[np.float64_t, ndim=1] kmc, np.ndarray[np.float64_t, ndim=1] gamma, np.ndarray[np.float64_t, ndim=2] log_sterlings): - - cdef double res=0.0 - if((log_sterlings.shape[0]-1) A.data, B.data, Q.data, kmc.data, gamma.data, int(A.shape[0]), log_sterlings.data, int(log_sterlings.shape[0]), &res) - - return res - diff --git a/pisa/utils/llh_server.py b/pisa/utils/llh_server.py deleted file mode 100755 index 9d947d005..000000000 --- a/pisa/utils/llh_server.py +++ /dev/null @@ -1,225 +0,0 @@ -#!/usr/bin/env python - -""" -Server(s) for handling llh requests from a client: client passes free param -values, server sets these on its DistributionMaker, generates outputs, and -compares the resulting distributions against a reference template, returning -the llh value. - -Code adapted from Dan Krause - https://gist.github.com/dankrause/9607475 -see `__license__`. -""" - -from __future__ import absolute_import, division, print_function - -__author__ = "Dan Krause, adapted by J.L. Lanfranchi" - -__license__ = """ -Copyright 2017 Dan Krause - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License.""" - -__all__ = [ - "DFLT_HOST", - "DFLT_PORT", - "DFLT_NUM_SERVERS", - "send_obj", - "receive_obj", - "serve", - "fork_servers", - "main", -] - - -from argparse import ArgumentParser -from multiprocessing import cpu_count, Process -import pickle -import socketserver -import struct - -from pisa.core.distribution_maker import DistributionMaker -from pisa.core.map import MapSet - - -DFLT_HOST = "localhost" -DFLT_PORT = "9000" -DFLT_NUM_SERVERS = cpu_count() - - -class ConnectionClosed(Exception): - """Connection closed""" - - -def send_obj(obj, sock): - """Send a Python object over a socket. Object is pickle-encoded as the - payload and sent preceded by a 4-byte header which indicates the number of - bytes of the payload. - - Parameters - ---------- - sock : socket - obj : pickle-able Python object - Object to send - - """ - # Turn object into a string - payload = pickle.dumps(obj) - - # Create a header that says how large the payload is - header = struct.pack('!i', len(payload)) - - # Send header - sock.sendall(header) - - # Send payload - sock.sendall(payload) - - -def receive_obj(sock): - """Receive an object from a socket. Payload is a pickle-encoded object, and - header (prefixing payload) is 4-byte int indicating length of the payload. - - Parameters - ---------- - sock : socket - - Returns - ------- - obj - Unpickled Python object - - """ - # Get 4-byte header which tells how large the subsequent payload will be - header = sock.recv(4) - if len(header) == 0: - raise ConnectionClosed() - payload_size = struct.unpack('!i', header)[0] - - # Receive the payload - payload = sock.recv(payload_size) - if len(payload) == 0: - raise ConnectionClosed() - - # Payload was pickled; unpickle to recreate original Python object - obj = pickle.loads(payload) - - return obj - - -def serve(config, ref, port=DFLT_PORT): - """Instantiate PISA objects and run server for processing requests. - - Parameters - ---------- - config : str or iterable thereof - Resource path(s) to pipeline config(s) - - ref : str - Resource path to reference map - - port : int or str, optional - - """ - # Instantiate the objects here to save having to do this repeatedly - dist_maker = DistributionMaker(config) - ref = MapSet.from_json(ref) - - # Define server as a closure such that it captures the above-instantiated objects - class MyTCPHandler(socketserver.BaseRequestHandler): - """ - The request handler class for our server. - - It is instantiated once per connection to the server, and must override - the handle() method to implement communication to the client. - - See socketserver.BaseRequestHandler for documentation of args. - """ - def handle(self): - try: - param_values = receive_obj(self.request) - except ConnectionClosed: - return - dist_maker._set_rescaled_free_params(param_values) # pylint: disable=protected-access - test_map = dist_maker.get_outputs(return_sum=True)[0] - llh = test_map.llh( - expected_values=ref, - binned=False, # return sum over llh from all bins (not per-bin llh's) - ) - send_obj(llh, self.request) - - server = socketserver.TCPServer((DFLT_HOST, int(port)), MyTCPHandler) - print("llh server started on {}:{}".format(DFLT_HOST, port)) - server.serve_forever() - - -def fork_servers(config, ref, port=DFLT_PORT, num=DFLT_NUM_SERVERS): - """Fork multiple servers for handling LLH requests. Objects are identically - configured, and ports used are sequential starting from `port`. - - Parameters - ---------- - config : str or iterable thereof - ref : str - port : str or int, optional - num : int, optional - Defaults to number of CPUs returned by `multiple.cpu_count()` - - """ - processes = [] - for port_ in range(int(port), int(port) + int(num)): - kwargs = dict(config=config, ref=ref, port=str(port_)) - process = Process(target=serve, kwargs=kwargs) - processes.append(process) - - # Start all processes - for process in processes: - process.start() - - # Wait for all processes to finish - for process in processes: - process.join() - - -def main(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - "--config", - required=True, - nargs="+", - help="""Resource location of one or more pipeline configs""", - ) - parser.add_argument( - "--ref", - required=True, - help="Resource location of reference (truth) map", - ) - parser.add_argument("--port", default=DFLT_PORT) - parser.add_argument( - "--num", - default=1, - type=int, - help="Number of servers to fork (>= 1); if set to 1, no forking occurs", - ) - args = parser.parse_args() - kwargs = vars(args) - num = kwargs.pop("num") - if num == 1: - serve(**kwargs) - else: - fork_servers(num=num, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/pisa/utils/log.py b/pisa/utils/log.py deleted file mode 100644 index e4a84c778..000000000 --- a/pisa/utils/log.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -This module sets up the logging system by looking for a "logging.json" -configuration file. It will search (in this order) the local directory, $PISA -and finally the package resources. The loggers found in there will be lifted -to the module namespace. - -Currently, we have three loggers -* logging: generic for what is going on (typically: `opening file x` or - `doing this now` messages) -* physics: for any physics output that might be interesting - (`have x many events`, `the flux is ...`) -* tprofile: for how much time it takes to run some step (in the format of - `time : start bla`, `time : stop bla`) -""" - - -from __future__ import absolute_import - -import enum -import json -import logging as logging_module -import logging.config as logging_config -from os import environ -from os.path import expanduser, expandvars, isfile, join -from pkg_resources import resource_stream - - -__all__ = ['Levels', 'logging', 'physics', 'tprofile', 'set_verbosity'] - -__author__ = 'S. Boeser' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -class Levels(enum.IntEnum): - """ - Logging levels / int values we use in PISA in `set_verbosity` (and - typically from the command line, where -v/-vv/-vvv/etc. are used) - """ - FATAL = -2 - ERROR = -1 - WARN = 0 # default if NO "-v(vvv...)" are passed at command line - INFO = 1 # pass "-v" at command line - DEBUG = 2 # pass "-vv" at command line - TRACE = 3 # pass "-vvv" at command line - - -def initialize_logging(): - """Intializing PISA logging""" - # Add a trace level - logging_module.TRACE = 5 - logging_module.addLevelName(logging_module.TRACE, 'TRACE') - def trace(self, message, *args, **kws): - """Trace-level logging""" - self.log(logging_module.TRACE, message, *args, **kws) - logging_module.Logger.trace = trace - logging_module.RootLogger.trace = trace - logging_module.trace = logging_module.root.trace - - # Get the logging configuration - logf = None - try: - if 'PISA_RESOURCES' in environ: - for path in environ['PISA_RESOURCES'].split(':'): - fpath = join(expanduser(expandvars(path)), - 'settings/logging/logging.json') - if isfile(fpath): - logf = open(fpath, 'r') - break - - if logf is None: - resource_spec = ('pisa_examples', - 'resources/settings/logging/logging.json') - logf = resource_stream(*resource_spec) - - if logf is None: - raise ValueError('Could not find "logging.json" in PISA_RESOURCES' - ' or in pisa_examples/resources.') - logconfig = json.load(logf) - - finally: - if logf is not None: - logf.close() - - # Setup the logging system with this config - logging_config.dictConfig(logconfig) - - thandler = logging_module.StreamHandler() - tformatter = logging_module.Formatter( - fmt=logconfig['formatters']['profile']['format'] - ) - thandler.setFormatter(tformatter) - - # Capture warnings - logging_module.captureWarnings(True) - - _logging = logging_module.getLogger('pisa') - _physics = logging_module.getLogger('pisa.physics') - _tprofile = logging_module.getLogger('pisa.tprofile') - # TODO: removed following line due to duplicate logging messages. Probably - # should fix this in a better manner... - #_tprofile.handlers = [thandler] - - return _logging, _physics, _tprofile - - -def set_verbosity(verbosity): - """Set the verbosity level for the root logger Verbosity should be an - integer with the levels defined by `pisa.utils.log.Levels` enum.""" - # Ignore if no verbosity is given - if verbosity is None: - return - - # mapping from our verbisoity int Levels to those of logging module - levels_mapping = { - int(Levels[n]): getattr(logging_module, n) for n in [l.name for l in Levels] - } - - if verbosity not in levels_mapping: - raise ValueError( - '`verbosity` specified is %s but must be one of %s.' - %(verbosity, list(levels_mapping.keys())) - ) - - # Overwrite the root logger with the verbosity level - logging.setLevel(levels_mapping[verbosity]) - tprofile.setLevel(levels_mapping[verbosity]) - - -# Make the loggers public -logging, physics, tprofile = initialize_logging() # pylint: disable=invalid-name diff --git a/pisa/utils/matrix.py b/pisa/utils/matrix.py deleted file mode 100644 index 983092841..000000000 --- a/pisa/utils/matrix.py +++ /dev/null @@ -1,149 +0,0 @@ -""" -Utilities for performing some not-so-common matrix tasks. -""" - -import numpy as np -import scipy.linalg as lin - -from pisa.utils.log import logging, set_verbosity - -__all__ = [ - 'is_psd', - 'fronebius_nearest_psd', -] - -__author__ = 'A. Trettin' - -__license__ = '''Copyright (c) 2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - -def is_psd(A): - """Test whether a matrix is positive semi-definite. - - Test is done via attempted Cholesky decomposition as suggested in [1]_. - - Parameters - ---------- - A : numpy.ndarray - Symmetric matrix - - Returns - ------- - bool - True if `A` is positive semi-definite, else False - - References - ---------- - .. [1] N.J. Higham, "Computing a nearest symmetric positive semidefinite - matrix" (1988): https://doi.org/10.1016/0024-3795(88)90223-6 - """ - # pylint: disable=invalid-name - try: - _ = np.linalg.cholesky(A) - return True - except np.linalg.LinAlgError: - return False - -def fronebius_nearest_psd(A, return_distance=False): - """Find the positive semi-definite matrix closest to `A`. - - The closeness to `A` is measured by the Fronebius norm. The matrix closest to `A` - by that measure is uniquely defined in [3]_. - - Parameters - ---------- - A : numpy.ndarray - Symmetric matrix - return_distance : bool, optional - Return distance of the input matrix to the approximation as given in - theorem 2.1 in [3]_. - This can be compared to the actual Frobenius norm between the - input and output to verify the calculation. - - Returns - ------- - X : numpy.ndarray - Positive semi-definite matrix approximating `A`. - - Notes - ----- - This function is a modification of [1]_, which is a Python adaption of [2]_, which - credits [3]_. - - References - ---------- - .. [1] https://gist.github.com/fasiha/fdb5cec2054e6f1c6ae35476045a0bbd - .. [2] https://www.mathworks.com/matlabcentral/fileexchange/42885-nearestspd - .. [3] N.J. Higham, "Computing a nearest symmetric positive semidefinite - matrix" (1988): https://doi.org/10.1016/0024-3795(88)90223-6 - """ - # pylint: disable=invalid-name - assert A.ndim == 2, "input is not a 2D matrix" - B = (A + A.T)/2. - _, H = lin.polar(B) - X = (B + H)/2. - # small numerical errors can make matrices that are not exactly - # symmetric, fix that - X = (X + X.T)/2. - # due to numerics, it's possible that the matrix is _still_ not psd. - # We can fix that iteratively by adding small increments of the identity matrix. - # This part comes from [1]. - if not is_psd(X): - spacing = np.spacing(lin.norm(X)) - I = np.eye(X.shape[0]) - k = 1 - while not is_psd(X): - mineig = np.min(np.real(lin.eigvals(X))) - X += I * (-mineig * k**2 + spacing) - k += 1 - if return_distance: - C = (A - A.T)/2. - lam = lin.eigvalsh(B) - # pylint doesn't know that numpy.sum takes the "where" argument - # pylint: disable=unexpected-keyword-arg - dist = np.sqrt(np.sum(lam**2, where=lam < 0.) + lin.norm(C, ord='fro')**2) - return X, dist - return X - -def check_frob_psd(A): - """Check approximation of Frobenius-closest PSD on given matrix. - - This is not a unit test. - - Parameters - ---------- - A : numpy.ndarray - Symmetric matrix - """ - # pylint: disable=invalid-name - X, xdist = fronebius_nearest_psd(A, return_distance=True) - is_psd_after = is_psd(X) - actual_dist = lin.norm(A - X, ord='fro') - assert is_psd_after, "did not produce PSD matrix" - assert np.isclose(xdist, actual_dist), "actual distance differs from expectation" - -def test_matrix_random(): - """Unit test producing a number of random matrices and checking if the - approximated matrix is indeed PSD. - """ - m_test = np.array([[1, -1], [2, 4]]) - check_frob_psd(m_test) - for i in range(100): - m_test = np.random.randn(3, 3) - check_frob_psd(m_test) - logging.info('<< PASS : test_matrix_random >>') - -if __name__ == '__main__': - set_verbosity(1) - test_matrix_random() diff --git a/pisa/utils/mcSimRunSettings.py b/pisa/utils/mcSimRunSettings.py deleted file mode 100644 index c1d4b375f..000000000 --- a/pisa/utils/mcSimRunSettings.py +++ /dev/null @@ -1,388 +0,0 @@ -#!/usr/bin/env python - -"""Handle Monte Carlo simulation run settings""" - - -from __future__ import absolute_import, division - -import pisa.utils.fileio as fileio -import pisa.utils.flavInt as flavInt -from pisa.utils import resources as resources -from pisa.utils.cross_sections import CrossSections - -# Following "import *" is intentionally done so that `eval` called in -# translate_source_dict will execute with direct access to numpy namespace -from numpy import * # pylint: disable=wildcard-import, unused-wildcard-import, redefined-builtin - - -__all__ = ['MCSimRunSettings', 'DetMCSimRunsSettings'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: make ability to serialize instantiated MCSimRunSettings and -# DetMCSimRunsSettings objects back to JSON format from which they were -# generated - -# TODO: put more thought into the MCSimRunSettings class - -# TODO: make sure user is forced to choose run & detector here - -class MCSimRunSettings(dict): - """Handle Monte Carlo run settings - - Parameters - ---------- - run_settings : string or dict - run - detector : string or None - - Notes - ----- - run_settings dictionary format (and same for corresponding JSON file, e.g. - resources/events/mc_sim_run_settings.json); example is for PINGU but should - generalize to DeepCore, etc. Note that a JSON file will use null and not - None. - - (Also note that expressions for numerical values utilizing the Python/numpy - namespace are valid, e.g. "2*pi" will be evaluated within the code to its - decimal value.):: - - { - - # Specify the detector name, lower case - "pingu": { - - # Monte Carlo run number for this detector - "388": { - - # Version of geometry, lower-case. E.g., ic86 for IceCube/DeepCore - "geom": "v36", - - # A straightforward way of computing aeff/veff/meff is to keep all - # simulated events and compare the #analysis/#simulated. If all - # simulated events are kept, then the filename containing these is - # recorded here. - "all_gen_events_file": None, - - # Max and min azimuth angle simulated (rad) - "azimuth_max": "2*pi", - "azimuth_min": 0, - - # Max and min energy simulated (GeV) - "energy_max": 80, - "energy_min": 1, - - # GENIE simulates some un-physica events (interactions that will not - # occur in nature). The number below was arrived at by Ken Clark, so - # ask him for more info. - "physical_events_fract": 0.8095, - - # GENIE has a prescale factor (TODO: generalize or eliminate for - # other xsec?) - "genie_prescale_factor": 1.2, - - # Neutrino flavors simulated - "flavints": "nutau,nutaubar", - - # #nu / (#nu + #nubar) simulated - "nu_to_total_fract": 0.5, - - # Number of events simulated per I3 file - "num_events_per_file": 250000, - - # Number of I3 files used - "num_i3_files": 195, - - # Simulated spectral inde gamma; value of 1 => E*{-1} - "sim_spectral_index": 1, - - # Version of neutrino/ice cross sections used for the simulation - "xsec_version": "genie_2.6.4", - - # Max and min zenith angle simulated (rad) - "zenith_max": "pi", - "zenith_min": 0 - } - } - } - - - """ - def __init__(self, run_settings, run=None, detector=None): - super().__init__() - # TODO: clean up this constructor! - #if isinstance(run_settings, str): - # rsd = jsons.from_json(resources.find_resource(run_settings)) - if isinstance(run_settings, dict): - rsd = run_settings - else: - raise TypeError('Unhandled run_settings type passed in arg: %s' - %type(run_settings)) - #if detector is not None: - # try: - # rsd = rsd[detector] - # except: - # pass - rsd = self.translate_source_dict(rsd) - if not detector is None: - detector = str(detector).strip() - self.detector = detector - self.run = run - self.update(rsd) - - @staticmethod - def translate_source_dict(d): - d['tot_gen'] = d['num_events_per_file'] * d['num_i3_files'] - - # TODO: does the following logic actually work with both old and new - # conventions? - - # NOTE: the ',' --> '+' mapping is necessary since some data files - # were saved prior to the convention that commas exclusively separate - # groups while plus signs indicate flav/ints grouped together - - d['flavints'] = flavInt.NuFlavIntGroup(d['flavints'].replace(',', '+')) - - # Numeric fields are allowed to be expressions that get evaluated - numeric_fields = [ - 'azimuth_max', - 'azimuth_min', - 'energy_max', - 'energy_min', - 'physical_events_fract', - 'genie_prescale_factor', - 'nu_to_total_fract', - 'num_events_per_file', - 'num_i3_files', - 'sim_spectral_index', - 'zenith_max', - 'zenith_min', - ] - for f in numeric_fields: - if isinstance(d[f], str): - d[f] = eval(d[f]) - - return d - - def consistency_checks(self, data, flav=None): - # TODO: implement! - pass - - def barnobarfract(self, barnobar=None, is_particle=None, - flav_or_flavint=None): - """Fraction of events generated (either particles or antiparticles). - - Specifying whether you want the fraction for particle or - antiparticle is done by specifying one (and only one) of the three - parameters: - `barnobar`, `is_particle` or `flav_or_flavint` - - Parameters - ---------- - barnobar : None or int - -1 for antiparticle, +1 for particle - is_particle : None or bool - True for particle, false for antiparticle - flav_or_flavint : None or convertible to NuFlav or NuFlavInt - Particle or antiparticles is determined from the flavor or flavint - passed - - """ - nargs = sum([(not barnobar is None), - (not is_particle is None), - (not flav_or_flavint is None)]) - if nargs != 1: - raise ValueError('One and only one of `barnobar`, `is_particle`,' - ' and `flav_or_flavint` must be specified. Got' - ' %d non-None args instead.' % nargs) - - if flav_or_flavint is not None: - is_particle = flavInt.NuFlavInt(flav_or_flavint).particle - elif barnobar is not None: - is_particle = barnobar > 0 - - if is_particle: - return self['nu_to_total_fract'] - return 1 - self['nu_to_total_fract'] - - def get_num_gen(self, barnobar=None, is_particle=None, - flav_or_flavint=None, include_physical_fract=True): - """Return the number of events generated. - - Parameters - ---------- - barnobar : None or int - -1 for antiparticle or +1 for particle - - is_particle : None or bool - - flav_or_flavint : None or convertible to NuFlav or NuFlavInt - If one of `barnobar`, `is_particle`, or `flav_or_flavint` is - specified, returns only the number of particles or antiparticles - generated. Otherwise (if none of those is specified), return the - total number of generated events. - - include_physical_fract : bool - Whether to include the "GENIE physical fraction", which accounts - for events that are generated but are un-physical and therefore - will never be detectable. These are removed to not penalize - detection efficiency. - - """ - nargs = sum([(not barnobar is None), - (not is_particle is None), - (not flav_or_flavint is None)]) - if flav_or_flavint is not None: - if (flav_or_flavint not in self.get_flavs() - and flav_or_flavint not in self.get_flavints()): - return 0 - barnobarfract = 1 - if nargs > 0: - barnobarfract = self.barnobarfract( - barnobar=barnobar, is_particle=is_particle, - flav_or_flavint=flav_or_flavint - ) - physical_fract = 1 - if include_physical_fract: - physical_fract = self['physical_events_fract'] - return self['tot_gen'] * barnobarfract * physical_fract - - def get_flavints(self): - return self['flavints'].get_flavints() - - def get_flavs(self): - return self['flavints'].get_flavs() - - def get_energy_range(self): - """(min, max) energy in GeV""" - return self['energy_min'], self['energy_max'] - - def get_spectral_index(self): - """Spectral index (positive number for negative powers of energy)""" - return self['sim_spectral_index'] - - def get_xsec_version(self): - """Cross sectons version name used in generating the MC""" - return self['xsec_version'] - - def get_xsec(self, xsec=None): - """Instantiated CrossSections object""" - if xsec is None: - return CrossSections(ver=self['xsec_version']) - return CrossSections(ver=self['xsec_version'], xsec=xsec) - - -class DetMCSimRunsSettings(dict): - """Handle Monte Carlo run settings for a detector (i.e., without specifying - which run as is required for the MCSimRunSettings object) - - Since run is not specified at instantiation, method calls require the user - to specify a run ID. - - Parameters - ---------- - run_settings : string or dict - detector : string or None - - See Also - -------- - MCSimRunSettings : Same, but specifies a specific run at instantiation; see - class docstring for specification of run_settings dict / - JSON file - - """ - def __init__(self, run_settings, detector=None): - super().__init__() - if isinstance(run_settings, str): - rsd = fileio.from_file(resources.find_resource(run_settings)) - elif isinstance(run_settings, dict): - rsd = run_settings - else: - raise TypeError('Unhandled run_settings type passed in arg: ' + - type(run_settings)) - - if detector: - detector = str(detector).strip() - self.detector = detector - - # Determine how deeply nested runs are in the dict to allow for - # user to specify a dict that has multiple detectors in it OR - # a dict with just a single detector in it - if 'flavints' in rsd.values()[0]: - runs_d = rsd - elif 'flavints' in rsd.values()[0].values()[0]: - if self.detector is None: - if len(rsd) == 1: - runs_d = rsd.values()[0] - else: - raise ValueError('Must specify which detector; detectors ' - 'found: ' + str(rsd.keys())) - else: - runs_d = rsd[self.detector.strip()] - else: - raise Exception('dict must either be 3 levels: ' - '{DET:{RUN:{...}}}; or 2 levels: {RUN:{...}}') - - # Force run numbers to be strings (JSON files cannot have an int as - # a key, so it is a string upon import, and it's safest to keep it as - # a string considering how non-standardized naming is in IceCube) and - # convert actual run settings dict to MCSimRunSettings instances - runs_d = {str(k): MCSimRunSettings(v) for k, v in runs_d.items()} - - # Save the runs_d to this object instance, which behaves like a dict - self.update(runs_d) - - def consistency_checks(self, data, run, flav=None): - pass - - def barnobarfract(self, run, barnobar=None, is_particle=None, - flav_or_flavint=None): - return self[str(run)].barnobarfract(barnobar=barnobar, - is_particle=is_particle, - flav_or_flavint=flav_or_flavint) - - def get_num_gen(self, run, barnobar=None, is_particle=None, - flav_or_flavint=None, include_physical_fract=True): - """Return the total number of events generated""" - return self[str(run)].get_num_gen( - barnobar=barnobar, is_particle=is_particle, - flav_or_flavint=flav_or_flavint, - include_physical_fract=include_physical_fract - ) - - def get_flavints(self, run): - return self[str(run)].get_flavints() - - def get_flavs(self, run): - return self[str(run)].get_flavs() - - def get_energy_range(self, run): - """(min, max) energy in GeV""" - return self[str(run)].get_energy_range() - - def get_spectral_index(self, run): - """Spectral index (positive number for negative powers of energy)""" - return self[str(run)].get_spectral_index() - - def get_xsec_version(self, run): - """Cross sectons version name used in generating the MC""" - return self[str(run)].get_xsec_version() - - def get_xsec(self, run, xsec=None): - """Instantiated CrossSections object""" - return self[str(run)].get_xsec(xsec) diff --git a/pisa/utils/numba_tools.py b/pisa/utils/numba_tools.py deleted file mode 100644 index a20934704..000000000 --- a/pisa/utils/numba_tools.py +++ /dev/null @@ -1,434 +0,0 @@ -# pylint: disable=invalid-name, ungrouped-imports - -""" -Numba tools - -This is a colection of functions used for numba functions -that work for targets cpu as well as cuda -""" - -from __future__ import absolute_import, division, print_function - -__all__ = [ - "cuda", - "ctype", - "ftype", - "WHERE", - "myjit", - "conjugate_transpose", - "conjugate_transpose_guf", - "test_conjugate_transpose", - "conjugate", - "conjugate_guf", - "test_conjugate", - "matrix_dot_matrix", - "matrix_dot_matrix_guf", - "test_matrix_dot_matrix", - "matrix_dot_vector", - "matrix_dot_vector_guf", - "test_matrix_dot_vector", - "clear_matrix", - "clear_matrix_guf", - "test_clear_matrix", - "copy_matrix", - "copy_matrix_guf", - "test_copy_matrix", - "cuda_copy", -] -__version__ = "0.2" -__author__ = "Philipp Eller (pde3@psu.edu)" - -from argparse import ArgumentParser -import inspect - -# NOTE: Following must be imported to be in the namespace for use by `myjit` -# when re-compiling modified (external) function code -import cmath # pylint: disable=unused-import -import math # pylint: disable=unused-import - -import numpy as np - -import numba - -from numba import ( # pylint: disable=unused-import - complex64, - complex128, - float32, - float64, - int32, - int64, - uint32, - uint64, - guvectorize, - jit, -) - -from pisa import FTYPE, TARGET, PISA_NUM_THREADS -from pisa.utils.comparisons import ALLCLOSE_KW -from pisa.utils.log import Levels, logging, set_verbosity - -if TARGET == "parallel": - numba.set_num_threads(PISA_NUM_THREADS) - -if TARGET is None: - raise NotImplementedError("Numba not supported.") - -# the `WHERE` variable is for usage with smart arrays -if TARGET == "cuda": - from numba import cuda - - if FTYPE == np.float64: - ctype = complex128 - ftype = float64 - elif FTYPE == np.float32: - ctype = complex64 - ftype = float32 - WHERE = "gpu" -else: - if FTYPE == np.float64: - ctype = np.complex128 - ftype = np.float64 - elif FTYPE == np.float32: - ctype = np.complex64 - ftype = np.float32 - cuda = lambda: None - cuda.jit = lambda x: x - WHERE = "host" - - -if FTYPE == np.float32: - FX = "f4" - CX = "c8" -elif FTYPE == np.float64: - FX = "f8" - CX = "c16" - - -def myjit(func): - """ - Decorator to assign the right jit for different targets - In case of non-cuda targets, all instances of `cuda.local.array` - are replaced by `np.empty`. This is a dirty fix, hopefully in the - near future numba will support numpy array allocation and this will - not be necessary anymore - - Parameters - ---------- - func : callable - - Returns - ------- - new_nb_func: numba callable - Refactored version of `func` but with `cuda.local.array` replaced by - `np.empty` if `TARGET == "cpu"`. For either TARGET, the returned - function will be callable within numba code for that target. - - """ - # pylint: disable=exec-used, eval-used - - if TARGET == "cuda": - new_nb_func = cuda.jit(func, device=True) - - else: - source = inspect.getsource(func).splitlines() - assert source[0].strip().startswith("@myjit") - source = "\n".join(source[1:]) + "\n" - source = source.replace("cuda.local.array", "np.empty") - exec(source) - new_py_func = eval(func.__name__) - new_nb_func = jit(new_py_func, nopython=True) - # needs to be exported to globals - globals()[func.__name__] = new_nb_func - - return new_nb_func - - -# --------------------------------------------------------------------------- # - - -def cuda_copy(func): - ''' Handle copying back device array''' - def wrapper(*args, **kwargs): - out = kwargs.pop("out") - if TARGET == "cuda" and not isinstance(out, numba.cuda.devicearray.DeviceNDArray): - d_out = numba.cuda.to_device(out) - func(*args, **kwargs, out=d_out) - d_out.copy_to_host(out) - else: - func(*args, **kwargs, out=out) - return wrapper - -@myjit -def conjugate_transpose(A, B): - """B is the conjugate (Hermitian) transpose of A .. :: - - B[j, i] = A[i, j]* - - A : 2d array of shape (M, N) - B : 2d array of shape (N, M) - - """ - for i in range(A.shape[0]): - for j in range(A.shape[1]): - B[j, i] = A[i, j].conjugate() - - -@guvectorize( - [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (j, i)", target=TARGET, -) -def conjugate_transpose_guf(A, out): - """gufunc that calls conjugate_transpose""" - conjugate_transpose(A, out) - - -def test_conjugate_transpose(): - """Unit tests of `conjugate_transpose` and `conjugate_transpose_guf`""" - A = (np.linspace(1, 12, 12) + 1j * np.linspace(21, 32, 12)).reshape(4, 3).astype(CX) - B = np.ones((3, 4), dtype=CX) - - conjugate_transpose_guf(A, B) - - test = B - ref = A.conj().T - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - A = np.linspace(1, 12, 12, dtype=FX).reshape(3, 4) - B = np.ones((4, 3), dtype=FX) - - conjugate_transpose_guf(A, B) - - test = B - ref = A.conj().T - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_conjugate_transpose >>") - - -# --------------------------------------------------------------------------- # - - -@myjit -def conjugate(A, B): - """B is the element-by-element conjugate of A .. :: - - B[i, j] = A[i, j]* - - Parameters - ---------- - A : 2d array - B : 2d array - - """ - for i in range(A.shape[0]): - for j in range(A.shape[1]): - B[i, j] = A[i, j].conjugate() - - -@guvectorize( - [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, -) -def conjugate_guf(A, out): - """gufunc that calls `conjugate`""" - conjugate(A, out) - - -def test_conjugate(): - """Unit tests of `conjugate` and `conjugate_guf`""" - A = (np.linspace(1, 12, 12) + 1j * np.linspace(21, 32, 12)).reshape(4, 3).astype(CX) - - B = np.ones((4, 3), dtype=CX) - - conjugate_guf(A, B) - - test = B - ref = A.conj() - - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - A = np.linspace(1, 12, 12, dtype=FX).reshape(3, 4) - B = np.ones((3, 4), dtype=FX) - - conjugate_guf(A, B) - - test = B - ref = A.conj() - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_conjugate >>") - - -# --------------------------------------------------------------------------- # - - -@myjit -def matrix_dot_matrix(A, B, C): - """Dot-product of two 2d arrays .. :: - - C = A * B - - """ - for j in range(B.shape[1]): - for i in range(A.shape[0]): - C[i, j] = 0.0 - for n in range(B.shape[0]): - C[i, j] += A[i, n] * B[n, j] - - -@guvectorize( - [f"({XX}[:, :], {XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], - "(i, n), (n, j) -> (i, j)", - target=TARGET, -) -def matrix_dot_matrix_guf(A, B, out): - """gufunc that calls matrix_dot_matrix""" - matrix_dot_matrix(A, B, out) - - -def test_matrix_dot_matrix(): - """Unit tests of `matrix_dot_matrix` and `matrix_dot_matrix_guf`""" - A = np.linspace(1, 12, 12, dtype=FTYPE).reshape(3, 4) - B = np.linspace(1, 12, 12, dtype=FTYPE).reshape(4, 3) - C = np.ones((3, 3), dtype=FTYPE) - - matrix_dot_matrix_guf(A, B, C) - - test = C - ref = np.dot(A, B).astype(FTYPE) - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_matrix_dot_matrix >>") - - -# --------------------------------------------------------------------------- # - - -@myjit -def matrix_dot_vector(A, v, w): - """Dot-product of a 2d array and a vector .. :: - - w = A * v - - """ - for i in range(A.shape[0]): - w[i] = 0.0 - for j in range(A.shape[1]): - w[i] += A[i, j] * v[j] - - -@guvectorize( - [f"({XX}[:, :], {XX}[:], {XX}[:])" for XX in [FX, CX]], - "(i, j), (j) -> (i)", - target=TARGET, -) -def matrix_dot_vector_guf(A, B, out): - """gufunc that calls matrix_dot_vector""" - matrix_dot_vector(A, B, out) - - -def test_matrix_dot_vector(): - """Unit tests of `matrix_dot_vector` and `matrix_dot_vector_guf`""" - A = np.linspace(1, 12, 12, dtype=FTYPE).reshape(4, 3) - v = np.linspace(1, 3, 3, dtype=FTYPE) - w = np.ones(4, dtype=FTYPE) - - matrix_dot_vector_guf(A, v, w) - - test = w - ref = np.dot(A, v).astype(FTYPE) - assert np.allclose(test, ref, **ALLCLOSE_KW), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_matrix_dot_vector >>") - - -# --------------------------------------------------------------------------- # - - -@myjit -def clear_matrix(A): - """Zero out 2D matrix .. :: - - A[i, j] = 0 - - """ - for i in range(A.shape[0]): - for j in range(A.shape[1]): - A[i, j] = 0 - - -@guvectorize( - [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, -) -def clear_matrix_guf(dummy, out): # pylint: disable=unused-argument - """gufunc that calls `clear_matrix`""" - clear_matrix(out) - - -def test_clear_matrix(): - """Unit tests of `clear_matrix` and `clear_matrix_guf`""" - A = np.ones((4, 3), dtype=FTYPE) - - clear_matrix_guf(A, A) - - test = A - ref = np.zeros((4, 3), dtype=FTYPE) - assert np.array_equal(test, ref), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_clear_matrix >>") - - -# --------------------------------------------------------------------------- # - - -@myjit -def copy_matrix(A, B): - """Copy elemnts of 2d array A to array B .. :: - - B[i, j] = A[i, j] - - """ - for i in range(A.shape[0]): - for j in range(A.shape[1]): - B[i, j] = A[i, j] - - -@guvectorize( - [f"({XX}[:, :], {XX}[:, :])" for XX in [FX, CX]], "(i, j) -> (i, j)", target=TARGET, -) -def copy_matrix_guf(A, out): - """gufunc that calls `copy_matrix`""" - copy_matrix(A, out) - - -def test_copy_matrix(): - """Unit tests of `copy_matrix` and `copy_matrix_guf`""" - A = np.ones((3, 3), dtype=FTYPE) - B = np.zeros((3, 3), dtype=FTYPE) - - copy_matrix_guf(A, B) - - test = B - ref = A - assert np.array_equal(test, ref), f"test:\n{test}\n!= ref:\n{ref}" - - logging.info("<< PASS : test_copy_matrix >>") - - -# --------------------------------------------------------------------------- # - - -def parse_args(): - """parse command line args""" - parser = ArgumentParser() - parser.add_argument("-v", action="count", default=Levels.WARN, help="Verbosity") - args = parser.parse_args() - return vars(args) - - -if __name__ == "__main__": - set_verbosity(parse_args()["v"]) - test_conjugate_transpose() - test_conjugate() - test_matrix_dot_matrix() - test_matrix_dot_vector() - test_clear_matrix() - test_copy_matrix() diff --git a/pisa/utils/plotter.py b/pisa/utils/plotter.py deleted file mode 100644 index 01fdf1406..000000000 --- a/pisa/utils/plotter.py +++ /dev/null @@ -1,628 +0,0 @@ -# pylint: disable=wrong-import-position, redefined-builtin -""" -Plotter class for doing plots easily -""" - - -from __future__ import absolute_import, division, print_function - -import itertools -import os - -import numpy as np -from uncertainties import unumpy as unp - -import matplotlib as mpl -from matplotlib import pyplot as plt -from matplotlib.offsetbox import AnchoredText - -from pisa import FTYPE -from pisa.core.map import Map, MapSet -from pisa.utils.format import tex_dollars, text2tex, tex_join -from pisa.utils.log import logging - - -__all__ = ['CMAP_SEQ', 'CMAP_DIV', 'Plotter'] - -__author__ = 'P. Eller' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -CMAP_SEQ = plt.cm.inferno -CMAP_SEQ.set_bad(color=(0.0, 0.2, 0.0), alpha=1) - -CMAP_DIV = plt.cm.RdBu_r -CMAP_DIV.set_bad(color=(0.5, 0.9, 0.5), alpha=1) - -# set fonts -mpl.rcParams['mathtext.fontset'] = 'custom' -mpl.rcParams['mathtext.rm'] = 'Bitstream Vera Sans' -mpl.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic' -mpl.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold' -mpl.rcParams['font.size'] = 14 - - -def inf2finite(x): - return np.clip(x, a_min=np.finfo(FTYPE).min, a_max=np.finfo(FTYPE).max) - - -class Plotter(object): - """ - Plotting library for PISA `Map`s and `MapSet`s - - Parameters - ---------- - outdir : str - output directory path - - stamp : str - stamp to be put on every subplot, e.g. 'Preliminary', - 'DeepCore nutau', etc. - - fmt : str or iterable of str - formats to be plotted, e.g. ['pdf', 'png'] - - size : (int, int) - canvas size (inches) - - log : bool - logarithmic z-axis - - label : str - z-axis label - - grid : bool - plot grid - - ratio : bool - add ratio plots in 1-d histos - - annotate : bool - annotate counts per bin in 2-d histos - - symmetric : bool - force symmetric extent of z-axis - - loc : str - either 'inside' or 'outside', defining where to put axis titles - - """ - def __init__(self, outdir='.', stamp=None, size=(8, 8), fmt='pdf', - log=True, label='# events', grid=True, ratio=False, - annotate=False, symmetric=False, loc='outside'): - self.fig = None - self.axes = None - - self.outdir = outdir - self.stamp = stamp - if isinstance(fmt, str): - fmt = [fmt] - self.fmt = fmt - self.size = size - self.fig = None - self.log = log - self.label = label - self.grid = grid - self.ratio = ratio - self.annotate = annotate - if symmetric: - assert(not self.log), 'cannot do log and symmetric at the same time' - self.symmetric = symmetric - self.reset_colors() - self.color = 'b' - self.loc = loc - - def reset_colors(self): - self.colors = itertools.cycle('C%d' % n for n in range(10)) - - def next_color(self): - self.color = next(self.colors) - - # --- helper functions --- - - def init_fig(self, figsize=None): - """clear/initialize figure""" - if figsize is not None: - size = figsize - else: - size = self.size - if self.fig is not None: - plt.clf() - plt.close(self.fig) - self.fig, self.axes = plt.subplots(1, 1, figsize=size) - self.fig.patch.set_facecolor('none') - - def add_stamp(self, text=None, **kwargs): - """Add common stamp with text. - - NOTE add_stamp cannot be used on a subplot that has been de-selected - and then re-selected. It will write over existing text. - - """ - if self.stamp != '': - stamp = tex_join('\n', self.stamp, text) - else: - stamp = text - if self.loc == 'inside': - a_text = AnchoredText(tex_dollars(stamp), loc=2, frameon=False, - **kwargs) - plt.gca().add_artist(a_text) - elif self.loc == 'outside': - plt.gca().set_title(tex_dollars(stamp)) - - def add_leg(self): - """initialize legend """ - plt.gca().legend(loc='upper right', ncol=2, frameon=False, numpoints=1) - - def dump(self, fname): - """dump figure to file""" - basepath = os.path.join(self.outdir, fname) - for fmt in self.fmt: - filepath = basepath + '.' + fmt - logging.info('Writing plot %s to file %s', - fname, os.path.abspath(filepath)) - plt.savefig(filepath, dpi=150, - edgecolor='none', facecolor=self.fig.get_facecolor()) - - # --- 2d plots --- - - def plot_2d_single(self, map_set, **kwargs): - """plot all maps in individual plots""" - if isinstance(map_set, Map): - map_set = [map_set] - for map in map_set: - self.init_fig() - self.plot_2d_map(map, **kwargs) - self.add_stamp(map.tex) - self.dump(map.name) - - def plot_2d_array(self, map_set, n_rows=None, n_cols=None, fname=None, - **kwargs): - """plot all maps in a single plot""" - if fname is None: - fname = map_set.name - # if dimensionality is 3, then still define a spli_axis automatically - new_maps = [] - split_axis = kwargs.pop('split_axis', None) - for map in map_set: - if len(map.binning) == 3: - if split_axis is None: - # Find shortest dimension - l = map.binning.num_bins - idx = l.index(min(l)) - split_axis_ = map.binning.names[idx] - logging.warning( - 'Plotter automatically splitting map %s along %s axis', - map.name, split_axis_ - ) - new_maps.extend(map.split(split_axis_)) - elif len(map.binning) == 2: - new_maps.append(map) - else: - raise Exception('Cannot plot %i dimensional map in 2d' - %len(map)) - map_set = MapSet(new_maps) - self.plot_array(map_set, 'plot_2d_map', n_rows=n_rows, n_cols=n_cols, - **kwargs) - self.dump(fname) - - # --- 1d plots --- - - def plot_1d_single(self, map_set, plot_axis, **kwargs): - """plot all maps in individual plots""" - for map in map_set: - self.init_fig() - self.plot_1d_projection(map, plot_axis, **kwargs) - self.add_stamp(map.tex) - self.dump(map.name) - - def plot_1d_array(self, map_set, plot_axis, n_rows=None, n_cols=None, - fname=None, **kwargs): - """plot 1d projections as an array""" - self.plot_array(map_set, 'plot_1d_projection', plot_axis, n_rows=n_rows, - n_cols=n_cols, **kwargs) - self.dump(fname) - - def plot_1d_slices_array(self, map_sets, plot_axis, fname=None, **kwargs): - """plot 1d projections as an array""" - self.slices_array(map_sets, plot_axis, **kwargs) - self.dump(fname) - - def plot_1d_all(self, map_set, plot_axis, **kwargs): - """all one one canvas""" - self.init_fig() - for map in map_set: - self.plot_1d_projection(map, plot_axis, **kwargs) - self.add_stamp() - self.add_leg() - self.dump('all') - - def plot_1d_stack(self, map_set, plot_axis, **kwargs): - """all maps stacked on top of each other""" - self.init_fig() - for i, map in enumerate(map_set): - for j in range(i): - map += map_set[j] - self.plot_1d_projection(map, plot_axis, **kwargs) - self.add_stamp() - self.add_leg() - self.dump('stack') - - def plot_1d_cmp(self, map_sets, plot_axis, fname=None, **kwargs): - """1d comparisons for two map_sets as projections""" - for i in range(len(map_sets[0])): - maps = [map_set[i] for map_set in map_sets] - self.stamp = maps[0].tex - for k, map_set in enumerate(map_sets): - maps[k].tex = map_set.tex - self.init_fig() - if self.ratio: - ax1 = plt.subplot2grid((4, 1), (0, 0), rowspan=3) - plt.setp(ax1.get_xticklabels(), visible=False) - self.reset_colors() - for map in maps: - self.next_color() - self.plot_1d_projection(map, plot_axis, **kwargs) - self.add_stamp() - self.add_leg() - if self.ratio: - plt.subplot2grid((4, 1), (3, 0), sharex=ax1) - #self.plot_1d_ratio(maps, plot_axis, r_vmin=0.1, r_vmax=0.1, **kwargs) - self.plot_1d_ratio(maps, plot_axis, **kwargs) - self.dump('%s_%s'%(fname, maps[0].name)) - - # --- plotting core functions --- - - def plot_array(self, map_set, fun, *args, **kwargs): - """wrapper funtion to exccute plotting function fun for every map in a - set distributed over a grid""" - n_rows = kwargs.pop('n_rows', None) - n_cols = kwargs.pop('n_cols', None) - if isinstance(map_set, Map): - map_set = MapSet([map_set]) - if isinstance(map_set, MapSet): - n = len(map_set) - else: - raise TypeError('Expecting to plot a MapSet but ' - 'got %s'%type(map_set)) - if n_rows is None and n_cols is None: - # TODO: auto row/cols - n_rows = np.floor(np.sqrt(n)) - while n % n_rows != 0: - n_rows -= 1 - n_cols = n // n_rows - if n > n_cols * n_rows: - raise ValueError( - 'trying to plot %s subplots on a grid with %s x %s cells' - % (n, n_cols, n_rows) - ) - size = (n_cols*self.size[0], n_rows*self.size[1]) - self.init_fig(size) - plt.tight_layout() - h_margin = 1. / size[0] - v_margin = 1. / size[1] - self.fig.subplots_adjust(hspace=0.2, wspace=0.2, top=1-v_margin, - bottom=v_margin, left=h_margin, - right=1-h_margin) - for i, map in enumerate(map_set): - plt.subplot(n_rows, n_cols, i+1) - getattr(self, fun)(map, *args, **kwargs) - self.add_stamp(map.tex) - - def slices_array(self, map_sets, plot_axis, *args, **kwargs): - """plot map_set in array using a function fun""" - n_cols = len(map_sets[0]) - plt_axis_n = map_sets[0][0].binning.names.index(plot_axis) - # determine how many slices we need accoring to map_set[0] - n_rows = 0 - if len(map_sets[0][0].binning) != 2: - raise NotImplementedError('only supported for 2d maps right now') - slice_axis_n = int(not plt_axis_n) - slice_axis = map_sets[0][0].binning.names[slice_axis_n] - n_rows = map_sets[0][0].binning[slice_axis].num_bins - size = (n_cols*self.size[0], self.size[1]) - self.init_fig(size) - plt.tight_layout() - h_margin = 1. / size[0] - v_margin = 1. / size[1] - # big one - self.fig.subplots_adjust(hspace=0., wspace=0.2, top=1-v_margin, - bottom=v_margin, left=h_margin, - right=1-h_margin) - stamp = self.stamp - for i in range(len(map_sets[0])): - for j in range(n_rows): - plt.subplot(n_rows, n_cols, i + (n_rows - j -1)*n_cols + 1) - self.reset_colors() - for map_set in map_sets: - self.next_color() - map = map_set[i] - if slice_axis_n == 0: - map_slice = map[j, :] - else: - map_slice = map[:, j] - a_text = ( - map_slice.binning[slice_axis].label - + ' [%.2f, %.2f]' - %(map_slice.binning[slice_axis].bin_edges[0].m, - map_slice.binning[slice_axis].bin_edges[-1].m) - ) - self.plot_1d_projection(map_slice, plot_axis, - *args, **kwargs) - if j != 0: - plt.gca().get_xaxis().set_visible(False) - if j == n_rows - 1: - if map.name == 'cscd': - title = 'cascades channel' - if map.name == 'trck': - title = 'tracks channel' - plt.gca().set_title(title) - plt.gca().set_ylabel('') - plt.gca().yaxis.set_tick_params(labelsize=8) - self.stamp = a_text - self.add_stamp(prop=dict(size=8)) - self.stamp = stamp - - def plot_2d_map(self, map, cmap=None, **kwargs): - """plot map on current axis in 2d""" - vmin = kwargs.pop('vmin', None) - vmax = kwargs.pop('vmax', None) - axis = plt.gca() - - if isinstance(map, Map): - binning = map.binning - else: - raise TypeError('Unhandled `map` type %s' % map.__class__.__name__) - - dims = binning.dims - bin_centers = binning.weighted_centers - bin_edges = binning.bin_edges - linlog = all([(d.is_log or d.is_lin) for d in binning]) - - zmap = map.nominal_values - if self.log: - zmap = np.log10(zmap) - - if self.symmetric: - vmax = np.max(np.abs(np.ma.masked_invalid(zmap))) - vmin = -vmax - if cmap is None: - cmap = CMAP_DIV - else: - if vmax is None: - vmax = np.max(zmap[np.isfinite(zmap)]) - if vmin is None: - vmin = np.min(zmap[np.isfinite(zmap)]) - if cmap is None: - cmap = CMAP_SEQ - extent = [np.min(bin_edges[0].m), np.max(bin_edges[0].m), - np.min(bin_edges[1].m), np.max(bin_edges[1].m)] - - # Only lin or log can be handled by imshow...otherise use colormesh - - # TODO: fix imshow for log-scaled energy vs. lin-scaled coszen, or - # remove this code altogether - if False: #linlog: - # Needs to be transposed for imshow - _ = plt.imshow( - zmap.T, origin='lower', interpolation='nearest', extent=extent, - aspect='auto', cmap=cmap, vmin=vmin, vmax=vmax, **kwargs - ) - else: - x, y = np.meshgrid(bin_edges[0], bin_edges[1]) - pcol = plt.pcolormesh( - x, y, np.ma.masked_invalid(zmap.T), - vmin=vmin, vmax=vmax, cmap=cmap, linewidth=0, rasterized=True, - **kwargs - ) - pcol.set_edgecolor('face') - - if self.annotate: - for i in range(len(bin_centers[0])): - for j in range(len(bin_centers[1])): - bin_x = bin_centers[0][i].m - bin_y = bin_centers[1][j].m - plt.annotate( - '%.1f'%(zmap[i, j]), - xy=(bin_x, bin_y), - xycoords=('data', 'data'), - xytext=(bin_x, bin_y), - textcoords='data', - va='top', - ha='center', - size=7 - ) - - axis.set_xlabel(tex_dollars(dims[0].label)) - axis.set_ylabel(tex_dollars(dims[1].label)) - axis.set_xlim(extent[0:2]) - axis.set_ylim(extent[2:4]) - - # TODO: use log2 scale & integer tick labels if too few major gridlines - # result from default log10 scale - if dims[0].is_log: - axis.set_xscale('log') - if dims[1].is_log: - axis.set_yscale('log') - - if self.log: - col_bar = plt.colorbar(format=r'$10^{%.1f}$') - else: - col_bar = plt.colorbar() - - if self.label: - col_bar.set_label(tex_dollars(text2tex(self.label))) - - def plot_1d_projection(self, map, plot_axis, **kwargs): - """plot map projected on plot_axis""" - r_vmin = kwargs.pop('r_vmin', None) - r_vmax = kwargs.pop('r_vmax', None) - axis = plt.gca() - plt_binning = map.binning[plot_axis] - hist = self.project_1d(map, plot_axis) - if map.tex == 'data': - axis.errorbar( - plt_binning.weighted_centers.m, unp.nominal_values(hist), - yerr=unp.std_devs(hist), - fmt='o', markersize='4', label=tex_dollars(text2tex('data')), - color='k', ecolor='k', mec='k', **kwargs - ) - else: - axis.hist( - inf2finite(plt_binning.weighted_centers.m), - weights=unp.nominal_values(hist), - bins=inf2finite(plt_binning.bin_edges.m), histtype='step', - lw=1.5, - label=tex_dollars(text2tex(map.tex)), color=self.color, **kwargs - ) - axis.bar( - plt_binning.bin_edges.m[:-1], 2*unp.std_devs(hist), - bottom=unp.nominal_values(hist)-unp.std_devs(hist), - width=plt_binning.bin_widths.m, alpha=0.25, linewidth=0, - color=self.color, **kwargs - ) - axis.set_xlabel(tex_dollars(plt_binning.label)) - if self.label: - axis.set_ylabel(tex_dollars(text2tex(self.label))) - if plt_binning.is_log: - axis.set_xscale('log') - if self.log: - axis.set_yscale('log') - else: - axis.set_ylim(0, np.nanmax(unp.nominal_values(hist))*1.4) - axis.set_xlim(inf2finite(plt_binning.bin_edges.m)[0], - inf2finite(plt_binning.bin_edges.m)[-1]) - if self.grid: - plt.grid(True, which="both", ls='-', alpha=0.2) - - def project_1d(self, map, plot_axis): - """sum up a map along all axes except plot_axis""" - hist = map.hist - plt_axis_n = map.binning.names.index(plot_axis) - hist = np.swapaxes(hist, plt_axis_n, 0) - for _ in range(1, len(map.binning)): - hist = np.sum(hist, 1) - return hist - - def plot_1d_ratio(self, maps, plot_axis, **kwargs): - """make a ratio plot for a 1d projection""" - r_vmin = kwargs.pop('r_vmin', None) - r_vmax = kwargs.pop('r_vmax', None) - axis = plt.gca() - map0 = maps[0] - plt_binning = map0.binning[plot_axis] - hist = self.project_1d(map0, plot_axis) - hist0 = unp.nominal_values(hist) - # TODO: should this be used somewhere? - err0 = unp.std_devs(hist) - - axis.set_xlim(inf2finite(plt_binning.bin_edges.m)[0], - inf2finite(plt_binning.bin_edges.m)[-1]) - maximum = 1.0 - minimum = 1.0 - self.reset_colors() - for map in maps: - self.next_color() - hist = self.project_1d(map, plot_axis) - hist1 = unp.nominal_values(hist) - err1 = unp.std_devs(hist) - ratio = np.zeros_like(hist0) - ratio_error = np.zeros_like(hist0) - for i, hist0i in enumerate(hist0): - if hist1[i] == 0 and hist0i == 0: - ratio[i] = 1. - ratio_error[i] = 1. - elif hist1[i] != 0 and hist0i == 0: - logging.warning('deviding non 0 by 0 for ratio') - ratio[i] = 0. - ratio_error[i] = 1. - else: - ratio[i] = hist1[i] / hist0i - ratio_error[i] = err1[i] / hist0i - minimum = min(minimum, ratio[i]) - maximum = max(maximum, ratio[i]) - - if map.tex == 'data': - axis.errorbar( - plt_binning.weighted_centers.m, ratio, yerr=ratio_error, - fmt='o', markersize='4', - label=tex_dollars(text2tex('data')), - color='k', ecolor='k', mec='k' - ) - else: - _ = axis.hist( - inf2finite(plt_binning.weighted_centers.m), - weights=ratio, - bins=inf2finite(plt_binning.bin_edges.m), - histtype='step', lw=1.5, - label=tex_dollars(text2tex(map.tex)), color=self.color - ) - - axis.bar( - plt_binning.bin_edges.m[:-1], 2*ratio_error, - bottom=ratio-ratio_error, width=plt_binning.bin_widths.m, - alpha=0.25, linewidth=0, color=self.color - ) - - if self.grid: - plt.grid(True, which="both", ls='-', alpha=0.2) - self.fig.subplots_adjust(hspace=0) - axis.set_ylabel(tex_dollars(text2tex('ratio'))) - axis.set_xlabel(tex_dollars(plt_binning.label)) - # Calculate nice scale: - if r_vmin is not None and r_vmax is not None: - axis.set_ylim(1 - r_vmin, 1 + r_vmax) - else: - off = max(maximum-1, 1-minimum) - axis.set_ylim(1 - 1.2 * off, 1 + 1.2 * off) - - def plot_xsec(self, map_set, ylim=None, logx=True): - from pisa.utils import fileio - - zero_np_element = np.array([0]) - for map in map_set: - binning = map.binning - if 'true_energy' in binning.names: - energy_binning = binning.true_energy - elif 'reco_energy' in binning.names: - energy_binning = binning.reco_energy - else: - dim_idx = binning.index('energy', use_basenames=True) - energy_binning = binning.dims[dim_idx] - - fig = plt.figure(figsize=self.size) - fig.suptitle(map.name, y=0.95) - ax = fig.add_subplot(111) - ax.grid(b=True, which='major') - ax.grid(b=True, which='minor', linestyle=':') - plt.xlabel(tex_dollars(energy_binning.label), size=18) - plt.ylabel(tex_dollars(text2tex(self.label)), size=18) - if self.log: - ax.set_yscale('log') - if logx: - ax.set_xscale('log') - if ylim: - ax.set_ylim(ylim) - ax.set_xlim(np.min(energy_binning.bin_edges.m), - np.max(energy_binning.bin_edges.m)) - - hist = map.hist - array_element = np.hstack((hist, zero_np_element)) - ax.step(energy_binning.bin_edges.m, array_element, where='post') - - fileio.mkdir(self.outdir) - fig.savefig(self.outdir+'/'+map.name+'.png', bbox_inches='tight', - dpi=150) diff --git a/pisa/utils/profiler.py b/pisa/utils/profiler.py deleted file mode 100644 index 6497388f3..000000000 --- a/pisa/utils/profiler.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -Tools for profiling code -""" - - -from __future__ import absolute_import - -from functools import wraps -from time import time - -from line_profiler import LineProfiler - -# Note this relative import (might be) necessary to avoid circular imports -from pisa.utils import log - - -__all__ = ['line_profile', 'test_line_profile', 'profile', 'test_profile'] - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -class Log(object): - """Class to redirect output into our logging stream.""" - def write(self, string): - string = string.rstrip('\n') - if string: - log.tprofile.debug(string) - def flush(self): - pass - - -TLOG = Log() -"""Instance of a global timing logger""" - -LINE_PROFILER = LineProfiler() -"""Instance of a global LineProfiler""" - - -def line_profile(func): - """Use as `@line_profile` decorator for a function or class method to log - how long each line in the function/method takes to run. - - Note that timings can be skewed by overhead from the line_profiler module, - which is used as the core timing mechanism for this function. - - Parameters - ---------- - func : callable - Function or method to be profiled - - Returns - ------- - new_func : callable - New version of `func` that is callable just like `func` but that logs - the time spent in each line of code in `func`. - - """ - @wraps(func) - def profiled_func(*args, **kwargs): - """<< docstring will be inherited from wrapped `func` >>""" - try: - LINE_PROFILER.enable_by_count() - LINE_PROFILER.add_function(func) - return func(*args, **kwargs) - finally: - LINE_PROFILER.disable_by_count() - # Only print if it is the outermost function - if LINE_PROFILER.functions[0] == func: - LINE_PROFILER.print_stats(stream=TLOG) - return profiled_func - - -def test_line_profile(): - """Unit tests for `line_profile` functional (decorator)""" - @line_profile - def get_number(): - log.logging.trace('hello, i am get_number') - for x in range(500000): - yield x - - @line_profile - def expensive_function(): - log.logging.trace('hello, i am expensive fun') - for x in get_number(): - _ = x ^ x ^ x - return 'some result!' - - _ = expensive_function() - log.logging.info('<< ??? : test_line_profile >> Inspect above outputs') - - -def profile(func): - """Use as `@profile` decorator for a function or class method to log the - time that it takes to complete. - - Parameters - ---------- - func : callable - Function or method to profile - - Returns - ------- - new_func : callable - New version of `func` that is callable just like `func` but that logs - the total time spent in `func`. - - """ - @wraps(func) - def profiled_func(*args, **kwargs): - """<< docstring will be inherited from wrapped `func` >>""" - try: - start_t = time() - return func(*args, **kwargs) - finally: - end_t = time() - log.tprofile.debug( - 'module %s, function %s: %.4f ms', - func.__module__, func.__name__, (end_t - start_t)*1000 - ) - return profiled_func - - -def test_profile(): - """Unit tests for `profile` functional (decorator)""" - @profile - def get_number(): - log.logging.trace('hello, i am get_number') - for x in range(500000): - yield x - - @profile - def expensive_function(): - log.logging.trace('hello, i am expensive fun') - for x in get_number(): - _ = x ^ x ^ x - return 'some result!' - - _ = expensive_function() - log.logging.info('<< ??? : test_profile >> inspect above outputs') - - -if __name__ == '__main__': - log.set_verbosity(2) - test_line_profile() - test_profile() diff --git a/pisa/utils/pull_method.py b/pisa/utils/pull_method.py deleted file mode 100644 index 0ebec5057..000000000 --- a/pisa/utils/pull_method.py +++ /dev/null @@ -1,193 +0,0 @@ -""" -Pull method tools. -""" - - -from __future__ import absolute_import, division - -import numpy as np - -from pisa.utils.log import logging, set_verbosity - -__all__ = [] - -__author__ = 'T. Ehrhardt' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def derivative_from_polycoefficients(coeff, loc): - """ - Return derivative of a polynomial of the form - - f(x) = coeff[0] + coeff[1]*x + coeff[2]*x**2 + ... - - at x = loc - """ - derivative = 0. - for n, c in enumerate(coeff): - if n == 0: - continue - derivative += n*c*loc**(n-1) - - return derivative - - -def get_derivative_map(hypo_maps): - """ - Get binwise (linear) derivatives of counts w.r.t. a parameter, whose - variations and associated templates are stored in `hypo_maps`. - - Parameters - ----------- - hypo_maps : dict - dictionary of the form - { - 'test_point1': { - 'params': {}, - {'map': [[],[],...], - 'ebins': [], - 'czbins': [] - }, - } - 'test_point2': ... - } - - Returns - ------- - derivative_map : sequence - Flat array of derivatives (of length = no. of bins) - - """ - test_points = sorted(hypo_maps.keys()) - - # flatten data map (for use with polyfit - not employed currently) - hypo_maps_flat = [hypo_maps[pvalue].flatten() for pvalue in test_points] - - assert len(test_points) == 2 - # we only have 2 test points - del_x = test_points[1] - test_points[0] - del_counts = np.subtract(hypo_maps_flat[1], hypo_maps_flat[0]) - derivative_map = np.divide(del_counts, del_x.magnitude) - - # keep flat - return derivative_map - - -def get_gradients(param, hypo_maker, test_vals): - """Use the template maker to create all the templates needed - to obtain the gradients in a given parameter. - - Parameters - ---------- - param : str - Name of parameter w.r.t. which we are calculating binwise - template changes - hypo_maker : DistributionMaker - Needs to hold the parameter `param` in its `ParamSet` - test_vals : sequence with units - Values of the parameter `param` to probe, i.e., generate templates for - - Returns - ------- - pmaps : dict - Dictionary with `test_vals` as keys and resulting templates' 'total' - nominal values - gradient_map : sequence - As returned by `get_derivative_map` - - """ - logging.trace("Working on parameter %s."%param) - - pmaps = {} - - # generate one template for each value of the parameter in question - # and store in pmaps - for param_value in test_vals: - hypo_maker.params[param].value = param_value - # make the template corresponding to the current value of the parameter - hypo_asimov_dist = hypo_maker.get_outputs(return_sum=True) - pmaps[param_value] = hypo_asimov_dist.nominal_values['total'] - - gradient_map = get_derivative_map( - hypo_maps=pmaps, - ) - - return pmaps, gradient_map - - -def calculate_pulls(fisher, fid_maps_truth, fid_hypo_asimov_dist, gradient_maps, - nonempty): - """Compute parameter pulls given data distribution, fiducial hypothesis - distribution, Fisher matrix, and binwise gradients. - - Parameters - ---------- - fisher : FisherMatrix - fid_maps_truth : MapSet - fid_hypo_asimov_dist : MapSet - gradient_maps : dict - output of `get_gradients` put into a dict, with one entry for each - parameter that was varied - nonempty : sequence - Indices of nonzero entries of flat list of `fid_hypo_asimov_dist`'s - 'total' entries - - Returns - ------- - param_pull_list: sequence of tuples - tuples of parameter name and parameter pull - - """ - fisher = {'total': fisher} - d = [] - for chan in fisher: - chan_d = [] - f = fisher[chan] - # binwise derivatives w.r.t all parameters in this chan - gm = gradient_maps[chan] - # binwise differences between truth and model in this chan - # [d_bin1, d_bin2, ..., d_bin780] - dm = np.subtract( - fid_maps_truth[chan].nominal_values, - fid_hypo_asimov_dist[chan].nominal_values).flatten() - dm = dm[nonempty] - # binwise statist. uncertainties for truth - # [sigma_bin1, sigma_bin2, ..., sigma_bin3] - # TODO: had sigma of observed counts here, but could be zero - # (nonempty *expectations* are ensured when fisher matrix is generated) - #sigma = fid_maps_truth[chan].std_devs.flatten() - sigma = fid_hypo_asimov_dist[chan].std_devs.flatten()[nonempty] - for i, param in enumerate(f.parameters): - chan_d.append([]) - assert param in gm.keys() - d_p_binwise = np.divide(np.multiply(dm, gm[param].flatten()[nonempty]), sigma) - # Sum over bins - d_p = d_p_binwise.sum() - chan_d[i] = d_p - d.append(chan_d) - # Binwise sum over (difference btw. fiducial maps times derivatives of - # expected bin count / statistical uncertainty of bin count), - # summed over channels - # Sum over channels (n-d vector, where n the number of systematics which - # are linearised) - d = np.sum(d, axis=0) - - # This only needs to be multiplied by the (overall) Fisher matrix inverse. - f_tot = fisher['total'] - f_tot.calculateCovariance() - pulls = np.dot(f_tot.covariance, d) - param_pull_list = [(pname, pull) for pname, pull in zip(f_tot.parameters, pulls.flat)] - return param_pull_list diff --git a/pisa/utils/random_numbers.py b/pisa/utils/random_numbers.py deleted file mode 100644 index 7f2cd881d..000000000 --- a/pisa/utils/random_numbers.py +++ /dev/null @@ -1,226 +0,0 @@ -#! /usr/bin/env python - -""" -Utilities to handle random numbers needed by PISA in a consistent and -reproducible manner. - -""" - - -from __future__ import division - -from collections.abc import Sequence - -import numpy as np - -from pisa.utils.log import Levels, logging, set_verbosity - - -__all__ = ['get_random_state', - 'test_get_random_state'] - -__author__ = 'J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def get_random_state(random_state, jumpahead=None): - """Derive a `numpy.random.RandomState` object (usable to generate random - numbers and distributions) from a flexible specification.. - - Parameters - ---------- - random_state : None, RandomState, string, int, state vector, or seq of int - * If instantiated RandomState object is passed, it is used directly - * If string : must be either 'rand' or 'random'; random state is - instantiated at random from either /dev/urandom or (if that is not - present) the clock. This creates an irreproducibly-random number. - * If int or sequence of lenth one: This is used as the `seed` value; - must be in [0, 2**32). - * If sequence of two integers: first must be in [0, 32768): 15 - most-significant bits. Second must be in [0, 131072): 17 - least-significant bits. - * If sequence of three integers: first must be in [0, 4): 2 - most-significant bits. Second must be in [0, 8192): next 13 - (less-significant) bits. Third must be in [0, 131072): 17 - least-significant bits. - * If a "state vector" (sequence of length five usable by - `numpy.random.RandomState.set_state`), set the random state using - this method. - - Returns - ------- - random_state : numpy.random.RandomState - Object callable like `numpy.random` (e.g. `random_state.rand((10,10))`), - but with __exclusively local__ state (whereas `numpy.random` has global - state). - - """ - if jumpahead is not None: - raise DeprecationWarning( - '`jumpahead` is deprecated since it does not result in an independent random sequence, simply use a different seed' - ) - - if random_state is None: - new_random_state = np.random.RandomState() - - elif isinstance(random_state, np.random.RandomState): - new_random_state = random_state - - elif isinstance(random_state, str): - allowed_strings = ['rand', 'random'] - rs = random_state.lower().strip() - if rs not in allowed_strings: - raise ValueError( - '`random_state`=%s not a valid string. Must be one of %s.' - %(random_state, allowed_strings) - ) - new_random_state = np.random.RandomState() - - elif isinstance(random_state, int): - new_random_state = np.random.RandomState(seed=random_state) - - elif isinstance(random_state, Sequence): - new_random_state = np.random.RandomState() - if all([isinstance(x, int) for x in random_state]): - if len(random_state) == 1: - seed = random_state[0] - assert seed >= 0 and seed < 2**32 - elif len(random_state) == 2: - b0, b1 = 15, 17 - assert b0 + b1 == 32 - s0, s1 = random_state - assert s0 >= 0 and s0 < 2**b0 - assert s1 >= 0 and s1 < 2**b1 - seed = (s0 << b1) + s1 - elif len(random_state) == 3: - b0, b1, b2 = 1, 12, 19 - assert b0 + b1 + b2 == 32 - s0, s1, s2 = random_state - assert s0 >= 0 and s0 < 2**b0 - assert s1 >= 0 and s1 < 2**b1 - assert s2 >= 0 and s2 < 2**b2 - seed = (s0 << b1+b2) + (s1 << b2) + s2 - else: - raise ValueError( - '`random_state` sequence of int must be length 1-3' - ) - new_random_state.seed(seed) - elif len(random_state) == 5: - new_random_state.set_state(random_state) - else: - raise ValueError( - 'Do not know what to do with `random_state` Sequence %s' - %(random_state,) - ) - return new_random_state - - else: - raise TypeError( - 'Unhandled `random_state` of type %s: %s' - %(type(random_state), random_state) - ) - - return new_random_state - - -def test_get_random_state(): - """Unit tests for get_random_state function""" - # Instantiate random states in all legal ways - rstates = { - 0: get_random_state(None), - 1: get_random_state('rand'), - 2: get_random_state('random'), - 3: get_random_state(np.random.RandomState(0)), - 4: get_random_state(0), - 5: get_random_state([0,]), - 6: get_random_state([0, 0]), - 7: get_random_state([0, 0, 0]), - } - rstates[8] = get_random_state(rstates[4].get_state()) - - # rs 4-8 should be identical - ref_id, ref = None, None - for rs_id, rs in rstates.items(): - if rs_id < 3: - continue - if ref is None: - ref_id = rs_id - ref = rs.rand(1000) - else: - test = rs.rand(1000) - assert np.array_equal(test, ref), f'rs{rs_id} != rs{ref_id}' - - # Already generated 1k, so generating 2k more gets us 3k; pick off last 1k - ref = rstates[ref_id].rand(2000)[1000:] - test = get_random_state(random_state=0).rand(3000)[2000:3000] - assert np.array_equal(test, ref), f'rsrand(3000)[2000:3000] != rs{ref_id}rand(2000)[1000:][2000:3000]' - - # Test stability of random number generator over time; following were - # retrieved on 2020-03-19 using numpy 1.18.1 via .. :: - # - # np.array2string( - # np.random.RandomState(0).rand(100), precision=20, separator=', ' - # ) - # - - # pylint: disable=bad-whitespace - ref = np.array( - [ - 0.5488135039273248 , 0.7151893663724195 , 0.6027633760716439 , - 0.5448831829968969 , 0.4236547993389047 , 0.6458941130666561 , - 0.4375872112626925 , 0.8917730007820798 , 0.9636627605010293 , - 0.3834415188257777 , 0.7917250380826646 , 0.5288949197529045 , - 0.5680445610939323 , 0.925596638292661 , 0.07103605819788694 , - 0.08712929970154071 , 0.02021839744032572 , 0.832619845547938 , - 0.7781567509498505 , 0.8700121482468192 , 0.978618342232764 , - 0.7991585642167236 , 0.46147936225293185 , 0.7805291762864555 , - 0.11827442586893322 , 0.6399210213275238 , 0.1433532874090464 , - 0.9446689170495839 , 0.5218483217500717 , 0.4146619399905236 , - 0.26455561210462697 , 0.7742336894342167 , 0.45615033221654855 , - 0.5684339488686485 , 0.018789800436355142, 0.6176354970758771 , - 0.6120957227224214 , 0.6169339968747569 , 0.9437480785146242 , - 0.6818202991034834 , 0.359507900573786 , 0.43703195379934145 , - 0.6976311959272649 , 0.06022547162926983 , 0.6667667154456677 , - 0.6706378696181594 , 0.2103825610738409 , 0.1289262976548533 , - 0.31542835092418386 , 0.3637107709426226 , 0.5701967704178796 , - 0.43860151346232035 , 0.9883738380592262 , 0.10204481074802807 , - 0.2088767560948347 , 0.16130951788499626 , 0.6531083254653984 , - 0.2532916025397821 , 0.4663107728563063 , 0.24442559200160274 , - 0.15896958364551972 , 0.11037514116430513 , 0.6563295894652734 , - 0.1381829513486138 , 0.1965823616800535 , 0.3687251706609641 , - 0.8209932298479351 , 0.09710127579306127 , 0.8379449074988039 , - 0.09609840789396307 , 0.9764594650133958 , 0.4686512016477016 , - 0.9767610881903371 , 0.604845519745046 , 0.7392635793983017 , - 0.039187792254320675, 0.2828069625764096 , 0.1201965612131689 , - 0.29614019752214493 , 0.11872771895424405 , 0.317983179393976 , - 0.41426299451466997 , 0.06414749634878436 , 0.6924721193700198 , - 0.5666014542065752 , 0.2653894909394454 , 0.5232480534666997 , - 0.09394051075844168 , 0.5759464955561793 , 0.9292961975762141 , - 0.31856895245132366 , 0.6674103799636817 , 0.13179786240439217 , - 0.7163272041185655 , 0.2894060929472011 , 0.18319136200711683 , - 0.5865129348100832 , 0.020107546187493552, 0.8289400292173631 , - 0.004695476192547066, - ] - ) - test = np.random.RandomState(0).rand(100) - assert np.array_equal(test, ref), 'random number generator changed!' - - logging.info('<< PASS : test_get_random_state >>') - - -if __name__ == '__main__': - set_verbosity(Levels.INFO) - test_get_random_state() diff --git a/pisa/utils/resources.py b/pisa/utils/resources.py deleted file mode 100644 index f9cf5c3ad..000000000 --- a/pisa/utils/resources.py +++ /dev/null @@ -1,281 +0,0 @@ -""" -Tools to obtain resource files needed for PISA, whether the resource is located -in the filesystem or with the installed PISA package. -""" - - -from __future__ import absolute_import - -from os import environ -from os.path import exists, expanduser, expandvars, join -import sys - -import pkg_resources - - -__all__ = ['RESOURCES_SUBDIRS', 'find_resource', 'open_resource', 'find_path'] - -__author__ = 'S. Boeser, J.L. Lanfranchi' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -RESOURCES_SUBDIRS = ['data', 'scripts', 'settings'] - - -def find_resource(resource, fail=True): - """Try to find a resource (file or directory). - - First check if `resource` is an absolute path, then check relative to - the paths specified by the PISA_RESOURCES environment variable (if it is - defined). Otherwise, look in the resources directory of the PISA - installation. - - Note that the PISA_RESOURCES environment variable can contain multiple - paths, each separated by a colon. Due to using colons as separators, - however, the paths themselves can *not* contain colons. - - Note also if PISA is packaged as archive distribution (e.g. zipped egg), - this method extracts the resource (if directory, the entire contents are - extracted) to a temporary cache directory. Therefore, it is preferable to - use the `open_resource` method directly, and avoid this method if possible. - - - Parameters - ---------- - resource : str - Resource path; can be path relative to CWD, path relative to - PISA_RESOURCES environment variable (if defined), or a package resource - location relative to the `pisa_examples/resources` sub-directory. Within - each path specified in PISA_RESOURCES and within the - `pisa_examples/resources` dir, the sub-directories 'data', 'scripts', - and 'settings' are checked for `resource` _before_ the base directories - are checked. Note that the **first** result found is returned. - - fail : bool - If True, raise IOError if resource not found - If False, return None if resource not found - - - Returns - ------- - String if `resource` is found (relative path to the file or directory); if - not found and `fail` is False, returns None. - - - Raises - ------ - IOError if `resource` is not found and `fail` is True. - - """ - # NOTE: this import needs to be here -- and not at top -- to avoid circular - # imports - import pisa.utils.log as log - - log.logging.trace('Attempting to find resource "%s"', resource) - - # 1) Check for file in filesystem at absolute path or relative to - # PISA_RESOURCES environment var - resource_path = find_path(resource, fail=False) - if resource_path is not None: - return resource_path - - # TODO: use resource_string or resource_stream instead, so that this works - # with egg distributions - - # 2) Look inside the installed pisa package - log.logging.trace('Searching package resources...') - resource_spec = ('pisa_examples', 'resources/' + resource) - if pkg_resources.resource_exists(*resource_spec): - resource_path = pkg_resources.resource_filename(*resource_spec) - log.logging.debug('Found resource "%s" in PISA package at "%s"', - resource, resource_path) - return resource_path - - for subdir in RESOURCES_SUBDIRS + [None]: - if subdir is None: - augmented_path = resource - else: - augmented_path = '/'.join([subdir, resource]) - - resource_spec = ('pisa_examples', 'resources/' + augmented_path) - if pkg_resources.resource_exists(*resource_spec): - resource_path = pkg_resources.resource_filename(*resource_spec) - log.logging.debug('Found resource "%s" in PISA package at "%s"', - resource, resource_path) - return resource_path - - # 3) If you get here, the resource is nowhere to be found - msg = ('Could not find resource "%s" in filesystem OR in PISA package.' - % resource) - if fail: - raise IOError(msg) - log.logging.debug(msg) - - -def open_resource(resource, mode='r'): - """Find the resource file (see find_resource), open it, and return a file - handle. - - - Parameters - ---------- - resource : str - Resource path; can be path relative to CWD, path relative to - PISA_RESOURCES environment variable (if defined), or a package resource - location relative to PISA's `pisa_examples/resources` sub-directory. - Within each path specified in PISA_RESOURCES and within the - `pisa_examples/resources` dir, the sub-directories 'data', 'scripts', - and 'settings' are checked for `resource` _before_ the base directories - are checked. Note that the **first** result found is returned. - - mode : str - 'r', 'w', or 'rw'; only 'r' is valid for package resources (as these - cannot be written) - - - Returns - ------- - binary stream object (which behaves identically to a file object) - - - See Also - -------- - find_resource - Locate a file or directory (in fileystem) or a package - resource - - find_path - Locate a file or directory in the filesystem - - Open a (file) package resource and return stream object. - - Notes - ----- - See help for pkg_resources module / resource_stream method for more details - on handling of package resources. - - """ - # NOTE: this import needs to be here -- and not at top -- to avoid circular - # imports - import pisa.utils.log as log - - log.logging.trace('Attempting to open resource "%s"', resource) - - # 1) Check for file in filesystem at absolute path or relative to - # PISA_RESOURCES environment var - fs_exc_info = None - try: - resource_path = find_path(resource, fail=True) - except IOError: - fs_exc_info = sys.exc_info() - else: - log.logging.debug('Opening resource "%s" from filesystem at "%s"', - resource, resource_path) - return open(resource_path, mode=mode) - - # 2) Look inside the installed pisa package; this should error out if not - # found - log.logging.trace('Searching package resources...') - pkg_exc_info = None - for subdir in RESOURCES_SUBDIRS + [None]: - if subdir is None: - augmented_path = resource - else: - augmented_path = '/'.join([subdir, resource]) - try: - resource_spec = ('pisa_examples', 'resources/' + augmented_path) - stream = pkg_resources.resource_stream(*resource_spec) - # TODO: better way to check if read mode (i.e. will 'r' miss - # anything that can be specified to also mean "read mode")? - if mode.strip().lower() != 'r': - del stream - raise IOError( - 'Illegal mode "%s" specified. Cannot open a PISA package' - ' resource in anything besides "r" (read-only) mode.' %mode - ) - except IOError: - pkg_exc_info = sys.exc_info() - else: - log.logging.debug('Opening resource "%s" from PISA package.', - resource) - return stream - - if fs_exc_info is not None: - if pkg_exc_info is not None: - msg = ('Could not locate resource "%s" in filesystem OR in' - ' installed PISA package.' %resource) - raise IOError(msg) - raise fs_exc_info[0](fs_exc_info[1]).with_traceback(fs_exc_info[2]) - raise pkg_exc_info[0](pkg_exc_info[1]).with_traceback(pkg_exc_info[2]) - - -def find_path(pathspec, fail=True): - """Find a file or directory in the filesystem (i.e., something that the - operating system can locate, as opposed to Python package resources, which - can be located within a package and therefore hidden from the filesystem). - - Parameters - ---------- - pathspec : string - fail : bool - - Returns - ------- - None (if not found) or string (absolute path to file or dir if found) - - """ - # NOTE: this import needs to be here -- and not at top -- to avoid circular - # imports - import pisa.utils.log as log - - # 1) Check for absolute path or path relative to current working - # directory - log.logging.trace('Checking absolute or path relative to cwd...') - resource_path = expandvars(expanduser(pathspec)) - if exists(resource_path): - log.logging.debug('Found "%s" at "%s"', pathspec, resource_path) - return resource_path - - # 2) Check if $PISA_RESOURCES is set in environment; if so, look relative - # to that - log.logging.trace('Checking environment for $PISA_RESOURCES...') - if 'PISA_RESOURCES' in environ: - pisa_resources = environ['PISA_RESOURCES'] - log.logging.trace('Searching resource path PISA_RESOURCES=%s', - pisa_resources) - resource_paths = pisa_resources.split(':') - for resource_path in resource_paths: - if not resource_path: - continue - resource_path = expandvars(expanduser(resource_path)) - # Look in all default sub-dirs for the pathspec - augmented_paths = [join(resource_path, subdir, pathspec) - for subdir in RESOURCES_SUBDIRS] - # Also look in the base dir specified for the pathspec - augmented_paths.append(join(resource_path, pathspec)) - - for augmented_path in augmented_paths: - if exists(augmented_path): - log.logging.debug('Found path "%s" at %s', - pathspec, augmented_path) - return augmented_path - - # 3) If you get here, the file is nowhere to be found - msg = 'Could not find path "%s"' % pathspec - if fail: - raise IOError(msg) - log.logging.trace(msg) - return None diff --git a/pisa/utils/spline.py b/pisa/utils/spline.py deleted file mode 100644 index f82c6af1b..000000000 --- a/pisa/utils/spline.py +++ /dev/null @@ -1,363 +0,0 @@ -""" -Classes to store and handle the evaluation of splines. -""" - - -from __future__ import division - -import inspect -from collections.abc import Mapping, Sequence - -from pisa.core.map import Map, MapSet -from pisa.core.binning import MultiDimBinning -from pisa.utils import flavInt -from pisa.utils.profiler import profile - - -__all__ = ['Spline', 'CombinedSpline'] - -__author__ = 'S. Mandalia' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -class Spline(object): - """Encapsulation of spline evaluation and other operations. - - Provides methods to evaluate the spline object over a given binning. - - Parameters - ---------- - name : string - Name for the spline object. Used to identify the object. - - tex : None or string - TeX string that can be used for e.g. plotting. - - spline: - Splines used for evaluation. - - eval_spl: function - Function prescribing how to obtain values for the input spline object - from a given binning. - - validate_spl: function - Function performing validation test on a given binning used to evaluate - the spline. - - hash : None, or immutable object (typically an integer) - Hash value to attach to the spline. - """ - # TODO(shivesh): required? - # TODO(shivesh): hashing? - _state_attrs = ('name', 'tex', 'spline', 'hash') - - def __init__(self, name, spline, eval_spl, tex=None, validate_spl=None, - hash=None): - # Set Read/write attributes via their defined setters - self.name = name - self._spline = spline - self._hash = hash - - if tex is None: - tex = flavInt.NuFlavIntGroup(name).tex - - # Ensure eval_spl has correct structure - eval_args = inspect.getargspec(eval_spl).args - if len(eval_args) < 2: - raise ValueError('Evaluation function does not contain the ' - 'minimum number of input parameters (2)\n' - 'Input function keywords: {0}'.format(eval_args)) - if 'spline' not in eval_args[0]: - raise ValueError('Evaluation function does not contain the ' + - "'spline'" + ' keyword as its first argument\n' - 'Input function keywords: {0}'.format(eval_args)) - if 'binning' not in eval_args[1]: - raise ValueError('Evaluation function does not contain the ' + - "'binning'" + ' keyword as its second ' - 'argument\nInput function keywords: ' - '{0}'.format(eval_args)) - self._eval_spl = eval_spl - - # Ensure validate_spl has correct structure - validate_args = inspect.getargspec(validate_spl).args - if len(validate_args) != 1: - raise ValueError('Binning validation function contains more than ' - 'the maximum number of input parameters (1)\n' - 'Input function keywords: ' - '{0}'.format(validate_args)) - if'binning' not in validate_args[0]: - raise ValueError('Binning validation function does not contain ' - 'the ' + "'binning'" + ' keyword argument\n' - 'Input function keywords: {0}'.format(eval_args)) - self._validate_spl = validate_spl - - @property - def name(self): - return self._name - - @name.setter - def name(self, value): - assert isinstance(value, str) - self._name = value - - @property - def tex(self): - return self._tex - - @tex.setter - def tex(self, value): - assert isinstance(value, str) - self._tex = value - - @property - def spline(self): - return self._spline - - @property - def hash(self): - return self._hash - - @hash.setter - def hash(self, value): - """Hash must be an immutable type (i.e., have a __hash__ method)""" - assert hasattr(value, '__hash__') - self._hash = value - - def get_map(self, binning, **kwargs): - """Return a map of the spline evaluated at the centers of the - given binning. - """ - if not isinstance(binning, MultiDimBinning): - if isinstance(binning, Sequence): - binning = MultiDimBinning(dimensions=binning) - elif isinstance(binning, Mapping): - binning = MultiDimBinning(**binning) - else: - raise ValueError('Do not know what to do with `binning`=%s of' - ' type %s' % (binning, type(binning))) - if self._validate_spl is not None: - self._validate_spl(binning) - return self._eval_spl(self.spline, binning, name=self.name, **kwargs) - - @profile - def get_integrated_map(self, binning, bw_units=None, **kwargs): - """Get the spline map integrated over the input binning values - in output units specified by `bw_units`. - """ - spline_map = self.get_map(binning, **kwargs) - - binning = binning.to(**bw_units) - bin_widths = binning.bin_volumes(attach_units=False) - - return spline_map * bin_widths - - def __hash__(self): - if self.hash is not None: - return self.hash - raise ValueError('No hash defined.') - - -class CombinedSpline(flavInt.FlavIntData): - """Contained class for operating on Spline objects for various neutrino - flavours. - - Inherits from FlavIntData object. Provides methods to allow - evaluation of the splines for all neutrino flavours. - - Parameters - -------- - inSpline : Spline or tuple of Spline - Spline objects with `name` entry corresponding to a neutrino flavour - `nue`, `numu`, `nuebar`, `numubar` and also corresponding to an - interaction type `cc` and `nc` if the flag `interactions` is True. - - interactions: Bool - Default = True - Flag to specifiy whether to store flavours or flavour+interaction - signatures. - - """ - def __init__(self, inSpline, interactions=True, ver=None): - super().__init__() - self.interactions = interactions - - if isinstance(inSpline, Spline): - inSpline = [inSpline] - if not all(isinstance(x, Spline) for x in inSpline): - raise TypeError('Argument/object unhandled type: ' - '{0}'.format(type(inSpline))) - - if interactions: - self._spline_dict = {flavInt.NuFlavInt(flavint.name): flavint - for flavint in inSpline} - self._spline_data = {flavInt.NuFlavInt(flavint.name): None - for flavint in inSpline} - else: - self._spline_dict = {flavInt.NuFlav(flav.name): flav - for flav in inSpline} - self._spline_data = {flavInt.NuFlav(flav.name): None - for flav in inSpline} - self._update_data_dict() - - def return_mapset(self, **kwargs): - """Return a MapSet of stored spline maps.""" - for signature in self._spline_data.keys(): - if not isinstance(self._spline_data[signature], Map): - raise ValueError('Error: map {0} has not yet been ' - 'computed'.format(signature)) - maps = [self._spline_data[signature] - for signature in self._spline_data.keys()] - return MapSet(maps=maps, **kwargs) - - def get_spline(self, signature, centers, **kwargs): - """Return the spline of a given signature and bins.""" - signature = self._validate_NuFlav(signature) - return self._spline_dict[signature].get_spline(centers, **kwargs) - - def get_map(self, signature, binning, **kwargs): - """Return a map of spline values for a given signature and - binning. - """ - signature = self._validate_NuFlav(signature) - return self._spline_dict[signature].get_map(binning, **kwargs) - - def get_integrated_map(self, signature, binning, **kwargs): - """Return a map of spline values for a given signature integrated - over the input binning. - """ - signature = self._validate_NuFlav(signature) - return self._spline_dict[signature].get_integrated_map( - binning, **kwargs - ) - - def compute_maps(self, binning, **kwargs): - """Compute the map of spline values for a given signature and binning, - then store it internally. - """ - for signature in self._spline_data.keys(): - self._spline_data[signature] = self.get_map( - signature, binning, **kwargs - ) - self._update_data_dict() - - def compute_integrated_maps(self, binning, **kwargs): - """Compute the map of spline values for a given signature integrated - over the input binning, then store it internally. - """ - for signature in self._spline_data.keys(): - self._spline_data[signature] = self.get_integrated_map( - signature, binning, **kwargs - ) - self._update_data_dict() - - def scale_map(self, signature, value): - """Scale a specific spline map by an input value.""" - signature = self._validate_signature(signature) - if not isinstance(self._spline_data[signature], Map): - raise ValueError('Error: maps have not yet been computed') - self._spline_data[signature] *= value - self._update_data_dict() - - def scale_maps(self, value): - """Scale the stored spline maps by an input value.""" - for signature in self._spline_data.keys(): - self._spline_data[signature] *= value - self._update_data_dict() - - def reset(self): - """Reset the flux maps to the original input maps.""" - for signature in self._spline_data.keys(): - self._spline_data[signature] = None - self._update_data_dict() - - # TODO(shivesh): too slow! - @staticmethod - def validate_spline(spline): - """Validate spline data.""" - return - # spline = flavInt.FlavIntData(spline) - # for k in flavInt.ALL_NUFLAVINTS: - # f = spline[k] - # if f is not None: - # assert np.sum(np.isnan(f.hist)) == 0 - # for k in flavInt.ALL_NUFLAVS: - # f = spline[k] - # if f is not None: - # assert np.all(f['nc'] == f['cc']) - - def _update_data_dict(self): - assert set(self._spline_dict.keys()) == set(self._spline_data.keys()) - with flavInt.BarSep('_'): - spline = {str(f): {str(it): None for it in flavInt.ALL_NUINT_TYPES} - for f in flavInt.ALL_NUFLAVS} - for x in self._spline_data.keys(): - for y in flavInt.ALL_NUINT_TYPES: - if self.interactions: - spline[str(flavInt.NuFlav(x))][str(y)] = \ - self._spline_data[x] - else: - spline[str(x)][str(y)] = self._spline_data[x] - super().validate(spline) - self.validate_spline(spline) - self.update(spline) - - def __getattr__(self, attr): - try: - if self.interactions: - sign = str(flavInt.NuFlavInt(attr)) - else: - sign = str(flavInt.NuFlav(attr)) - except: - raise ValueError('{0} is not a value signature'.format(attr)) - for signature in self._spline_data.keys(): - if self._spline_data[signature].name == sign: - return self._spline_data[signature] - return super().__getattribute__(sign) - - def _validate_NuFlav(self, signature): - if self.interactions: - if not isinstance(signature, flavInt.NuFlavInt): - signature = flavInt.NuFlavInt(signature) - else: - if not isinstance(signature, flavInt.NuFlav): - signature = flavInt.NuFlav(signature) - if signature not in self._spline_dict: - raise ValueError('signature {0} not loaded, choices are: ' - '{1}'.format(signature, self._spline_dict.keys())) - return signature - - def __add__(self, spline): - if isinstance(spline, Spline): - inSpline = self._spline_dict.values() + [spline] - return CombinedSpline(inSpline) - elif isinstance(spline, CombinedSpline): - inSpline = self._spline_dict.values() + \ - spline._spline_dict.values() - return CombinedSpline(inSpline) - else: - raise TypeError('Argument/object unhandled type: ' - '{0}'.format(type(spline))) - - -def test_Spline(): - # TODO(shivesh): tests - pass - - -if __name__ == '__main__': - from pisa.utils.log import set_verbosity - set_verbosity(3) - test_Spline() diff --git a/pisa/utils/spline_smooth.py b/pisa/utils/spline_smooth.py deleted file mode 100644 index f3b502f09..000000000 --- a/pisa/utils/spline_smooth.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -Smooth an array by splining it and resampling from the spline -""" - - -from __future__ import absolute_import - -import numpy as np -from pisa.utils.log import logging -from scipy.interpolate import splrep, splev, interp1d - - -__author__ = 'P. Eller' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -def spline_smooth(array, spline_binning, eval_binning, axis=0, smooth_factor=5, k=3, errors=None): - """Fuction for spline-smoothing arrays - - It is smoothing in slices along one axis, assuming 2d arrays - The smoothing is done by splines - - Parameters - ---------- - - array : 2d-array - array to be smoothed - spline_binning : OneDimBinning - Binning of axis on which to construct the spline - Must corrspond to the array dimension - axis : int - Index of the axis along which to smooth - eval_binning : OneDimBinning - Binning on which to evaluate the constructed spline - smooth_factor : float - smoothing factor for spline - k : int - spline degree - errors : 2d-array or None - uncertainties on the array - - Notes - ----- - could be expanded to nd arrays to generalize it - """ - # only working for 2d right now! - if array.ndim != 2: - raise ValueError('cannot do other dimensions than 2 right now, sorry') - # points at which to evaluate splines - spline_points = spline_binning.midpoints - if axis == 1: - # always smooth along axis=0 - array = array.T - if errors is not None: - errors = errors.T - - smoothed_slices = [] - interp_errors = None if errors is None else [] - for index in range(array.shape[1]): - # take slice - h_slice = array[:, index] - if errors is None: - weights = None - else: - h_errors = errors[:, index] - #replace zeros errors minimum avrage value along other axis - for i in range(len(h_errors)): - if h_errors[i] == 0: - if np.sum(errors[i, :]) == 0: - h_errors[i] = 0 - logging.warning('Detected row in array with all zero values, this can be problematic for spline smoothing!') - else: - h_errors[i] = np.min(errors[i, :][errors[i, :] != 0]) - weights = 1./h_errors - # Fit spline to slices - slice_spline = splrep( - spline_points, h_slice, weights, - k=k, s=smooth_factor, - ) - # eval spline over midpoints - smoothed_slice = splev(eval_binning.midpoints, slice_spline) - # Assert that there are no nan or inf values in smoothed cz-slice - assert np.all(np.isfinite(smoothed_slice)) - smoothed_slices.append(smoothed_slice) - - if errors is not None: - erf = interp1d(spline_points, 1./weights, fill_value="extrapolate") - new_errors = erf(eval_binning.midpoints) - interp_errors.append(new_errors) - - # Convert list of slices to array - smoothed_array = np.array(smoothed_slices) - if errors is not None: - interp_errors = np.array(interp_errors) - # swap axes back if necessary - if axis == 0: - smoothed_array = smoothed_array.T - if errors is not None: - interp_errors = interp_errors.T - - return smoothed_array, interp_errors diff --git a/pisa/utils/stats.py b/pisa/utils/stats.py deleted file mode 100644 index cba88805d..000000000 --- a/pisa/utils/stats.py +++ /dev/null @@ -1,831 +0,0 @@ -""" -Statistical functions -""" - - -from __future__ import absolute_import, division - -import numpy as np -from scipy.special import gammaln -from uncertainties import unumpy as unp - -from pisa import FTYPE -from pisa.utils.comparisons import FTYPE_PREC, isbarenumeric -from pisa.utils.log import logging -from pisa.utils import likelihood_functions - -__all__ = ['SMALL_POS', 'CHI2_METRICS', 'LLH_METRICS', 'ALL_METRICS', - 'maperror_logmsg', - 'chi2', 'llh', 'log_poisson', 'log_smear', 'conv_poisson', - 'norm_conv_poisson', 'conv_llh', 'barlow_llh', 'mod_chi2', 'correct_chi2', - 'mcllh_mean', 'mcllh_eff', 'signed_sqrt_mod_chi2', 'generalized_poisson_llh'] - -__author__ = 'P. Eller, T. Ehrhardt, J.L. Lanfranchi, E. Bourbeau' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -SMALL_POS = 1e-10 #if FTYPE == np.float64 else FTYPE_PREC -"""A small positive number with which to replace numbers smaller than it""" - -CHI2_METRICS = ['chi2', 'mod_chi2', 'correct_chi2', 'weighted_chi2'] -"""Metrics defined that result in measures of chi squared""" - -LLH_METRICS = ['llh', 'conv_llh', 'barlow_llh', 'mcllh_mean', -'mcllh_eff', 'generalized_poisson_llh'] -"""Metrics defined that result in measures of log likelihood""" - -ALL_METRICS = LLH_METRICS + CHI2_METRICS -"""All metrics defined""" - -METRICS_TO_MAXIMIZE = LLH_METRICS -"""Metrics that must be maximized to obtain a better fit""" - -METRICS_TO_MINIMIZE = CHI2_METRICS -"""Metrics that must be minimized to obtain a better fit""" - - -# TODO(philippeller): -# * unit tests to ensure these don't break - -def it_got_better(new_metric_val, old_metric_val, metric): - """Compare metric values and report whether improvement found. - """ - to_maximize = is_metric_to_maximize(metric) - if to_maximize: - got_better = new_metric_val > old_metric_val - else: - got_better = new_metric_val < old_metric_val - return got_better - -def is_metric_to_maximize(metric): - """Check whether the resulting metric has to be maximized or minimized. - """ - if isinstance(metric, str): - metric = [metric] - if all(m in METRICS_TO_MAXIMIZE for m in metric): - return True - if all(m in METRICS_TO_MINIMIZE for m in metric): - return False - raise ValueError('Defined metrics %s are not compatible' % metric) - -def maperror_logmsg(m): - """Create message with thorough info about a map for logging purposes""" - with np.errstate(invalid='ignore'): - msg = '' - msg += ' min val : %s\n' %np.nanmin(m) - msg += ' max val : %s\n' %np.nanmax(m) - msg += ' mean val: %s\n' %np.nanmean(m) - msg += ' num < 0 : %s\n' %np.sum(m < 0) - msg += ' num == 0: %s\n' %np.sum(m == 0) - msg += ' num > 0 : %s\n' %np.sum(m > 0) - msg += ' num nan : %s\n' %np.sum(np.isnan(m)) - return msg - - -def chi2(actual_values, expected_values): - """Compute the chi-square between each value in `actual_values` and - `expected_values`. - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - chi2 : numpy.ndarray of same shape as inputs - chi-squared values corresponding to each pair of elements in the inputs - - Notes - ----- - * Uncertainties are not propagated through this calculation. - * Values in expectation are clipped to the range [SMALL_POS, inf] prior to - the calculation to avoid infinities due to the divide function. - * actual_values are allowed to be = 0, since they don't com up in the denominator - """ - if actual_values.shape != expected_values.shape: - raise ValueError( - 'Shape mismatch: actual_values.shape = %s,' - ' expected_values.shape = %s' - % (actual_values.shape, expected_values.shape) - ) - - # Convert to simple numpy arrays containing floats - if not isbarenumeric(actual_values): - actual_values = unp.nominal_values(actual_values) - if not isbarenumeric(expected_values): - expected_values = unp.nominal_values(expected_values) - - with np.errstate(invalid='ignore'): - # Mask off any nan expected values (these are assumed to be ok) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - - # TODO: this check (and the same for `actual_values`) should probably - # be done elsewhere... maybe? - if np.any(actual_values < 0): - msg = ('`actual_values` must all be >= 0...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - if np.any(expected_values < 0): - msg = ('`expected_values` must all be >= 0...\n' - + maperror_logmsg(expected_values)) - raise ValueError(msg) - - # TODO: Is this okay to do? Mathematically suspect at best, and can - # still destroy a minimizer's hopes and dreams... - - # Replace 0's with small positive numbers to avoid inf in division - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - - - delta = actual_values - expected_values - - if np.all(np.abs(delta) < 5*FTYPE_PREC): - return np.zeros_like(delta, dtype=FTYPE) - - chi2_val = np.square(delta) / expected_values - assert np.all(chi2_val >= 0), str(chi2_val[chi2_val < 0]) - return chi2_val - - -def llh(actual_values, expected_values): - """Compute the log-likelihoods (llh) that each count in `actual_values` - came from the the corresponding expected value in `expected_values`. - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - llh : numpy.ndarray of same shape as the inputs - llh corresponding to each pair of elements in `actual_values` and - `expected_values`. - - Notes - ----- - * Uncertainties are not propagated through this calculation. - * Values in `expected_values` are clipped to the range [SMALL_POS, inf] - prior to the calculation to avoid infinities due to the log function. - - """ - assert actual_values.shape == expected_values.shape - - # Convert to simple numpy arrays containing floats - if not isbarenumeric(actual_values): - actual_values = unp.nominal_values(actual_values) - if not isbarenumeric(expected_values): - expected_values = unp.nominal_values(expected_values) - - with np.errstate(invalid='ignore'): - - # Mask off any nan expected values (these can result from bin masking) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - - # TODO: How should we handle nan / masked values in the "data" - # (actual_values) distribution? How about negative numbers? - - # Make sure actual values (aka "data") are valid -- no infs, no nans, - # etc. - if np.any((actual_values < 0) | ~np.isfinite(actual_values)): - msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - # Check that new array contains all valid entries - if np.any(expected_values < 0.0): - msg = ('`expected_values` must all be >= 0...\n' - + maperror_logmsg(expected_values)) - raise ValueError(msg) - - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - - # - # natural logarith m of the Poisson probability - # (uses Stirling's approximation to estimate ln(k!) ~ kln(k)-k) - # - llh_val = actual_values*np.log(expected_values) - expected_values - llh_val -= actual_values*np.log(actual_values) - actual_values - - return llh_val - -def mcllh_mean(actual_values, expected_values): - """Compute the log-likelihood (llh) based on LMean in table 2 - https://doi.org/10.1007/JHEP06(2019)030 - accounting for finite MC statistics. - This is the second most recommended likelihood in the paper. - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - llh : numpy.ndarray of same shape as the inputs - llh corresponding to each pair of elements in `actual_values` and - `expected_values`. - - Notes - ----- - * - """ - assert actual_values.shape == expected_values.shape - - # Convert to simple numpy arrays containing floats - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - - with np.errstate(invalid='ignore'): - - # Mask off any NaN bin/sigma values (resulting from bin masking) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - sigma = np.ma.masked_invalid(sigma) - - # TODO: How should we handle nan / masked values in the "data" - # (actual_values) distribution? How about negative numbers? - - # Make sure actual values (aka "data") are valid -- no infs, no nans, - # etc. - if np.any((actual_values < 0) | ~np.isfinite(actual_values)): - msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - # Check that new array contains all valid entries - if np.any(expected_values < 0.0): - msg = ('`expected_values` must all be >= 0...\n' - + maperror_logmsg(expected_values)) - raise ValueError(msg) - - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - - llh_val = likelihood_functions.poisson_gamma( - data=actual_values, sum_w=expected_values, sum_w2=sigma**2, a=0, b=0 - ) - - return llh_val - - -def mcllh_eff(actual_values, expected_values): - """Compute the log-likelihood (llh) based on eq. 3.16 - https://doi.org/10.1007/JHEP06(2019)030 - accounting for finite MC statistics. - This is the most recommended likelihood in the paper. - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - llh : numpy.ndarray of same shape as the inputs - llh corresponding to each pair of elements in `actual_values` and - `expected_values`. - - Notes - ----- - * - """ - assert actual_values.shape == expected_values.shape - - # Convert to simple numpy arrays containing floats - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - - with np.errstate(invalid='ignore'): - - # Mask off any NaN bin/sigma values (resulting from bin masking) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - sigma = np.ma.masked_invalid(sigma) - - # TODO: How should we handle nan / masked values in the "data" - # (actual_values) distribution? How about negative numbers? - - # Make sure actual values (aka "data") are valid -- no infs, no nans, - # etc. - if np.any((actual_values < 0) | ~np.isfinite(actual_values)): - msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - # Check that new array contains all valid entries - if np.any(expected_values < 0.0): - msg = ('`expected_values` must all be >= 0...\n' - + maperror_logmsg(expected_values)) - raise ValueError(msg) - - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - - llh_val = likelihood_functions.poisson_gamma( - data=actual_values, sum_w=expected_values, sum_w2=sigma**2, a=1, b=0 - ) - return llh_val - - - -def log_poisson(k, l): - r"""Calculate the log of a poisson pdf - - .. math:: - p(k,l) = \log\left( l^k \cdot e^{-l}/k! \right) - - Parameters - ---------- - k : float - l : float - - Returns - ------- - - log of poisson - - """ - return k*np.log(l) -l - gammaln(k+1) - - -def log_smear(x, sigma): - r"""Calculate the log of a normal pdf - - .. math:: - p(x, \sigma) = \log\left( (\sigma \sqrt{2\pi})^{-1} \exp( -x^2 / 2\sigma^2 ) \right) - - Parameters - ---------- - x : float - sigma : float - - Returns - ------- - log of gaussian - - """ - return ( - -np.log(sigma) - 0.5*np.log(2*np.pi) - x**2 / (2*sigma**2) - ) - - -def conv_poisson(k, l, s, nsigma=3, steps=50): - r"""Poisson pdf - - .. math:: - p(k,l) = l^k \cdot e^{-l}/k! - - Parameters - ---------- - k : float - l : float - s : float - sigma for smearing term (= the uncertainty to be accounted for) - nsigma : int - The ange in sigmas over which to do the convolution, 3 sigmas is > 99%, - so should be enough - steps : int - Number of steps to do the intergration in (actual steps are 2*steps + 1, - so this is the steps to each side of the gaussian smearing term) - - Returns - ------- - float - convoluted poissson likelihood - - """ - # Replace 0's with small positive numbers to avoid inf in log - l = max(SMALL_POS, l) - k = max(SMALL_POS,k) #To avoid the zero values and nan values , added on 20/10/2022 - s = max(SMALL_POS,s) #To avoid the zero values and nan values , added on 20/10/2022 - st = 2*(steps + 1) - conv_x = np.linspace(-nsigma*s, +nsigma*s, st)[:-1]+nsigma*s/(st-1.) - conv_y = log_smear(conv_x, s) - f_x = conv_x + l - #f_x = conv_x + k - # Avoid zero values for lambda - idx = np.argmax(f_x > 0) - f_y = log_poisson(k, f_x[idx:]) - #f_y = log_poisson(f_x[idx:], l) - if np.isnan(f_y).any(): - logging.error('`NaN values`:') - logging.error('idx = %d', idx) - logging.error('s = %s', s) - logging.error('l = %s', l) - logging.error('f_x = %s', f_x) - logging.error('f_y = %s', f_y) - f_y = np.nan_to_num(f_y) - conv = np.exp(conv_y[idx:] + f_y) - norm = np.sum(np.exp(conv_y)) - return conv.sum()/norm - - -def norm_conv_poisson(k, l, s, nsigma=3, steps=50): - """Convoluted poisson likelihood normalized so that the value at k=l - (asimov) does not change - - Parameters - ---------- - k : float - l : float - s : float - sigma for smearing term (= the uncertainty to be accounted for) - nsigma : int - The range in sigmas over which to do the convolution, 3 sigmas is > - 99%, so should be enough - steps : int - Number of steps to do the intergration in (actual steps are 2*steps + 1, - so this is the steps to each side of the gaussian smearing term) - - Returns - ------- - likelihood - Convoluted poisson likelihood normalized so that the value at k=l - (asimov) does not change - - """ - cp = conv_poisson(k, l, s, nsigma=nsigma, steps=steps) - n1 = np.exp(log_poisson(l, l)) - n2 = conv_poisson(l, l, s, nsigma=nsigma, steps=steps) - return cp*n1/n2 - - -def conv_llh(actual_values, expected_values): - """Compute the convolution llh using the uncertainty on the expected values - to smear out the poisson PDFs - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - conv_llh : numpy.ndarray of same shape as the inputs - conv_llh corresponding to each pair of elements in `actual_values` and - `expected_values`. - - """ - in_array_shape = np.shape(actual_values) - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - triplets = np.array([actual_values, expected_values, sigma]).T - norm_triplets = np.array([actual_values, actual_values, sigma]).T - total = 0 - bin_wise_conv_llh =[] - for i in range(len(triplets)): - total += np.log(max(SMALL_POS, norm_conv_poisson(*triplets[i]))) # FIXME? (cf. pylint) - total -= np.log(max(SMALL_POS, norm_conv_poisson(*norm_triplets[i]))) # FIXME? (cf. pylint) - bin_wise_conv_llh.append(total) - total =0 - bin_wise_conv_llh_np = np.array(bin_wise_conv_llh) #21/10/2022 - bin_wise_conv_llh_np = bin_wise_conv_llh_np.reshape(in_array_shape) # reshaping the array to match inputs #21/10/2022 - return bin_wise_conv_llh_np - -def barlow_llh(actual_values, expected_values): - """Compute the Barlow LLH taking into account finite statistics. - The likelihood is described in this paper: https://doi.org/10.1016/0010-4655(93)90005-W - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - barlow_llh: numpy.ndarray - - """ - - actual_values = unp.nominal_values(actual_values).ravel() - sigmas = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - - with np.errstate(invalid='ignore'): - # Mask off any nan expected values (these are assumed to be ok) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - - # Check that new array contains all valid entries - if np.any(actual_values < 0): - msg = ('`actual_values` must all be >= 0...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - # TODO: How should we handle nan / masked values in the "data" - # (actual_values) distribution? How about negative numbers? - - # Make sure actual values (aka "data") are valid -- no infs, no nans, - # etc. - if np.any((actual_values < 0) | ~np.isfinite(actual_values)): - msg = ('`actual_values` must be >= 0 and neither inf nor nan...\n' - + maperror_logmsg(actual_values)) - raise ValueError(msg) - - # Check that new array contains all valid entries - if np.any(expected_values < 0.0): - msg = ('`expected_values` must all be >= 0...\n' - + maperror_logmsg(expected_values)) - raise ValueError(msg) - - # TODO(tahmid): Run checks in case expected_values and/or corresponding sigma == 0 - # and handle these appropriately. If sigma/ev == 0 the code below will fail. - unweighted = np.array([(ev/s)**2 for ev, s in zip(expected_values, sigmas)]) - weights = np.array([s**2/ev for ev, s in zip(expected_values, sigmas)]) - - llh_val = likelihood_functions.barlowLLH(actual_values, unweighted, weights) - return llh_val - -def mod_chi2(actual_values, expected_values): - """Compute the chi-square value taking into account uncertainty terms - (incl. e.g. finite stats) - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - m_chi2 : numpy.ndarray of same shape as inputs - Modified chi-squared values corresponding to each pair of elements in - the inputs - - """ - in_array_shape = np.shape(actual_values) - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - - with np.errstate(invalid='ignore'): - - # Mask off any NaN bin/sigma values (resulting from bin masking) - actual_values = np.ma.masked_invalid(actual_values) - expected_values = np.ma.masked_invalid(expected_values) - sigma = np.ma.masked_invalid(sigma) - - # Replace 0's with small positive numbers to avoid inf when denominator is zero - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - - m_chi2 = ( - (actual_values - expected_values)**2 / (sigma**2 + expected_values) - ) - - m_chi2 = m_chi2.reshape(in_array_shape) - return m_chi2 - -def correct_chi2(actual_values, expected_values): - """Compute the chi-square value taking into account uncertainty terms - (incl. e.g. finite stats) and their changes - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - m_chi2 : numpy.ndarray of same shape as inputs - Modified chi-squared values corresponding to each pair of elements in - the inputs - - """ - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - total_variance = sigma**2 + expected_values - m_chi2 = ( - (actual_values - expected_values)**2 / total_variance + np.log(total_variance) - ) - return m_chi2 - -def weighted_chi2(actual_values, expected_values, bin_unc2): - """Compute the chi-square value for weighted events taking into account - uncertainty terms (incl. e.g. finite stats) - - Parameters - ---------- - actual_values, expected_values, bin_unc2 : numpy.ndarrays of same shape - - Returns - ------- - m_chi2 : numpy.ndarray of same shape as inputs - Modified chi-squared values corresponding to each trio of elements in - the inputs - - """ - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, out=expected_values) - np.clip(bin_unc2, a_min=SMALL_POS, a_max=np.inf, out=bin_unc2) - - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - bin_unc2 = unp.nominal_values(bin_unc2).ravel() - total_variance = sigma**2 + bin_unc2 - - m_chi2 = ( - (actual_values - expected_values)**2 / total_variance #+ np.log(total_variance) - ) - return m_chi2 - -def signed_sqrt_mod_chi2(actual_values, expected_values): - """Compute a (signed) pull value taking into account uncertainty terms. - - Parameters - ---------- - actual_values, expected_values : numpy.ndarrays of same shape - - Returns - ------- - m_pull : numpy.ndarray of same shape as inputs - Pull values corresponding to each pair of elements in - the inputs - - """ - # Replace 0's with small positive numbers to avoid inf in log - np.clip(expected_values, a_min=SMALL_POS, a_max=np.inf, - out=expected_values) - actual_values = unp.nominal_values(actual_values).ravel() - sigma = unp.std_devs(expected_values).ravel() - expected_values = unp.nominal_values(expected_values).ravel() - m_pull = ( - (actual_values - expected_values) / np.sqrt(sigma**2 + expected_values) - ) - return m_pull - -# -# Generalized Poisson-gamma llh from 1902.08831 -# -def generalized_poisson_llh(actual_values, expected_values=None, empty_bins=None): - '''Compute the generalized Poisson likelihood as formulated in https://arxiv.org/abs/1902.08831 - - - Note that unlike the other likelihood functions, expected_values - is expected to be a ditribution maker - - inputs: - ------ - - actual_values: flattened hist of a Map object - - expected_values: OrderedDict of MapSets - - empty_bins: None, list or np.ndarray (list the bin indices that are empty) - - returns: - -------- - llh_per_bin : bin-wise llh values, in a numpy array - - ''' - from collections import OrderedDict - - - assert isinstance(expected_values, OrderedDict), 'ERROR: expected_values must be an OrderedDict of MapSet objects' - assert 'weights' in expected_values.keys(), 'ERROR: expected_values need a key named "weights"' - assert 'llh_alphas' in expected_values.keys(), 'ERROR: expected_values need a key named "llh_alphas"' - assert 'llh_betas' in expected_values.keys(), 'ERROR: expected_values need a key named "llh_betas"' - - num_bins = actual_values.flatten().shape[0] - llh_per_bin = np.zeros(num_bins) - actual_values = unp.nominal_values(actual_values).ravel() - - # If no empty bins are specified, we assume that all of them should be included - if empty_bins is None: - empty_bins = [] - - for bin_i in range(num_bins): - - # TODO: sometimes the histogram spits out uncertainty objects, sometimes not. - # Not sure why. - data_count = actual_values.astype(np.int64)[bin_i] - - # Automatically add a huge number if a bin has non zero data count - # but completely empty MC - if bin_i in empty_bins: - if data_count > 0: - llh_per_bin[bin_i] = np.log(SMALL_POS) - continue - - # Make sure that no weight sum is negative. Crash if there are - weight_sum = np.array([m.hist.flatten()[bin_i] for m in expected_values['weights'].maps]) - if (weight_sum<0).sum()>0: - logging.debug('\n\n\n') - logging.debug('weights that are causing problem: ') - logging.debug(weight_sum[weight_sum<0]) - logging.debug((weight_sum<0).sum()) - logging.debug('\n\n\n') - assert np.all(weight_sum >= 0), 'ERROR: negative weights detected' - - # - # If the number of MC events is high, compute a normal poisson probability - # - n_mc_events = np.array([m.hist.flatten()[bin_i] for m in expected_values['n_mc_events'].maps]) - if np.all(n_mc_events>100): - - logP = data_count*np.log(weight_sum.sum())-weight_sum.sum()-(data_count*np.log(data_count)-data_count) - llh_per_bin[bin_i] = logP - - else: - from pisa.utils.llh_defs.poisson import fast_pgmix - - alphas = np.array([m.hist.flatten()[bin_i] for m in expected_values['llh_alphas'].maps]) - betas = np.array([m.hist.flatten()[bin_i] for m in expected_values['llh_betas'].maps]) - - # Remove the NaN's - mask = np.isfinite(alphas)*np.isfinite(betas) - - # Check that the alpha and betas make sense - assert np.all(alphas[mask] > 0), 'ERROR: detected alpha values <=0' - assert np.all(betas[mask] > 0 ), 'ERROR: detected beta values <=0' - - - llh_of_bin = fast_pgmix(data_count, alphas[mask], betas[mask]) - llh_per_bin[bin_i] = llh_of_bin - - return llh_per_bin - - -def approximate_poisson_normal(data_count, alphas=None, betas=None, use_c=False): - ''' - Compute the likelihood of a marginalized poisson-gamma - function, using a single normal distribution instead of - the convolution of gamma function - - This formula can be used when the MC counts are really - high, and where the gamma function throws infinite values - - ''' - from scipy.integrate import quad - import numpy as np - - gamma_mean = np.sum(alphas/betas) - gamma_sigma = np.sqrt(np.sum(alphas/betas**2.)) - - # - # Define integration range as +- 5 sigma - # - lower = max(0,gamma_mean-5*gamma_sigma) - upper = gamma_mean+5*gamma_sigma - - # - # integrate over the boundaries - # - if use_c: - - import os, ctypes - import numpy as np - from scipy import integrate, LowLevelCallable - - lib = ctypes.CDLL(os.path.abspath('/groups/icecube/bourdeet/pisa/pisa/utils/poisson_normal.so')) - lib.approximate_gamma_poisson_integrand.restype = ctypes.c_double - lib.approximate_gamma_poisson_integrand.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_double), ctypes.c_void_p) - - # Define the parameters - params = (ctypes.c_double*3)() - - params[0] = data_count - params[1] = gamma_mean - params[2] = gamma_sigma - - user_data = ctypes.cast(params, ctypes.c_void_p) - func = LowLevelCallable(lib.approximate_gamma_poisson_integrand, user_data) - LH = quad(func, lower, upper)[0] - #print('lower ',lower,' upper: ',upper,' LH: ',LH) - else: - - LH = quad(approximate_poisson_normal_python, lower, upper, args=(data_count, gamma_mean, gamma_sigma))[0] - #print('lower ',lower,' upper: ',upper,' data_count: ',data_count,' mean: ', gamma_mean, ' sigma: ',gamma_sigma, ' LH: ',LH) - - LH = max(SMALL_POS,LH) - return np.log(LH) - - - -def approximate_poisson_normal_python(lamb, k, A, B): - - from scipy.stats import norm - - normal_term = norm.pdf(lamb, loc=A, scale=B) - normal_poisson = norm.pdf(k, loc=lamb, scale=np.sqrt(lamb)) - - return normal_term*normal_poisson diff --git a/pisa/utils/tests.py b/pisa/utils/tests.py deleted file mode 100644 index a03d1cb27..000000000 --- a/pisa/utils/tests.py +++ /dev/null @@ -1,741 +0,0 @@ -""" -Functions to help compare and plot differences between PISA 2 and PISA 3 maps -""" - - -from __future__ import absolute_import, division - -import os -import numpy as np - -import matplotlib.pyplot as plt - -from pisa import ureg -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.core.map import Map -from pisa.utils.fileio import get_valid_filename, mkdir -from pisa.utils.log import logging - - -__all__ = ['order', 'order_str', 'check_agreement', 'print_agreement', - 'print_event_rates', 'validate_maps', - 'make_delta_map', 'make_ratio_map', - 'validate_map_objs', - 'baseplot', 'baseplot2', - 'plot_comparisons', 'plot_map_comparisons', 'plot_cmp', - 'pisa2_map_to_pisa3_map'] - -__author__ = 'S. Wren' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: make functions work transparently (i.e. autodetect) whether it's a -# PISA 2 or PISA 3 style map object, convert to PISA 3 maps, and go from -# there. - - -def order(x): - with np.errstate(divide='ignore', invalid='ignore'): - o = np.ceil(np.log10(np.abs(x))) - return o - - -def order_str(x): - order_float = order(x) - try: - return str(int(order_float)).rjust(4) - except OverflowError: - pass - return str(order_float) - - -def check_agreement(testname, thresh_ratio, ratio, thresh_diff, diff): - ratio_pass = np.abs(ratio) <= np.abs(thresh_ratio) - diff_pass = np.abs(diff) <= np.abs(thresh_diff) - - thresh_ratio_str = order_str(thresh_ratio) - ratio_ord_str = order_str(ratio) - ratio_pass_str = 'PASS' if ratio_pass else 'FAIL' - - thresh_diff_str = order_str(thresh_diff) - diff_ord_str = order_str(diff) - diff_pass_str = 'PASS' if diff_pass else 'FAIL' - - headline = '<< {pass_str:s} : {testname:s}, {kind:s} >>' - detail_str = ('... agree to (( 10^{level:s} )) ; ' - 'thresh = (( 10^{thresh:s} ))') - - ratio_headline = headline.format( - testname=testname, kind='fract diff', pass_str=ratio_pass_str - ) - ratio_detail = detail_str.format( - level=ratio_ord_str, thresh=thresh_ratio_str - ) - - diff_headline = headline.format( - testname=testname, kind='diff', pass_str=diff_pass_str, - ) - diff_detail = detail_str.format( - level=diff_ord_str, thresh=thresh_diff_str - ) - - err_messages = [] - if ratio_pass: - logging.info(ratio_headline) - logging.info(ratio_detail) - else: - err_messages += [ratio_headline, ratio_detail] - - if diff_pass: - logging.info(diff_headline) - logging.info(diff_detail) - else: - err_messages += [diff_headline, diff_detail] - - if not (ratio_pass and diff_pass): - for m in err_messages: - logging.error(m) - raise ValueError('\n '.join(err_messages)) - - -def print_agreement(testname, ratio): - ratio_ord_str = order_str(ratio) - s = '<< {testname:s}, {kind:s} >>\n' \ - ' agreement to 10^{level:s}' - - s_ratio = s.format( - testname=testname, kind='fract diff', level=ratio_ord_str - ) - - logging.info(s_ratio) - - -def print_event_rates(testname1, testname2, kind, map1_events, map2_events): - s = '<< {testname:s} total {kind:s} events >>' \ - ' {events:s}' - - test1_events = s.format( - testname=testname1, kind=kind, events='%.2f'%(map1_events) - ) - test2_events = s.format( - testname=testname2, kind=kind, events='%.2f'%(map2_events) - ) - - logging.info(test1_events) - logging.info(test2_events) - - -# TODO: specify `allclose` parameters `rtol` and `atol` excplicitly -def validate_maps(amap, bmap): - """Validate that two PISA 2 style maps are compatible binning.""" - if not (np.allclose(amap['ebins'], bmap['ebins']) and - np.allclose(amap['czbins'], bmap['czbins'])): - raise ValueError("Maps' binnings do not match!") - - -# TODO: specify `allclose` parameters `rtol` and `atol` excplicitly -def validate_map_objs(amap, bmap): - """Validate that two PISA 3 style maps are compatible binning.""" - if not all([np.allclose(ae, be) for ae, be - in zip(amap.binning.bin_edges, bmap.binning.bin_edges)]): - raise ValueError( - "Maps' binnings do not match! Got first map as \n%s \nand second " - " map as \n%s" - % (amap.binning.hashable_state, bmap.binning.hashable_state) - ) - - -def make_delta_map(amap, bmap): - """Get the difference between two PISA 2 style maps (amap-bmap) and return - as another PISA 2 style map.""" - validate_maps(amap, bmap) - return {'ebins': amap['ebins'], - 'czbins': amap['czbins'], - 'map': amap['map'] - bmap['map']} - - -def make_ratio_map(amap, bmap): - """Get the ratio of two PISA 2 style maps (amap/bmap) and return as another - PISA 2 style map.""" - validate_maps(amap, bmap) - with np.errstate(divide='ignore', invalid='ignore'): - result = {'ebins': amap['ebins'], - 'czbins': amap['czbins'], - 'map': amap['map']/bmap['map']} - return result - - -def baseplot(m, title, ax, clabel=None, symm=False, evtrate=False, - vmax=None, cmap=plt.cm.afmhot): - """Simple plotting of a 2D histogram (map)""" - hist = np.ma.masked_invalid(m['map']) - energy = m['ebins'] - coszen = m['czbins'] - if symm: - cmap = plt.cm.seismic - extr = np.nanmax(np.abs(hist)) - if vmax is None: - vmax = extr - vmin = -extr - else: - if evtrate: - vmin = 0 - else: - vmin = np.nanmin(hist) - if vmax is None: - vmax = np.nanmax(hist) - cmap.set_bad(color=(0, 1, 0), alpha=1) - x = coszen - y = np.log10(energy) - X, Y = np.meshgrid(x, y) - pcmesh = ax.pcolormesh(X, Y, hist, vmin=vmin, vmax=vmax, cmap=cmap) - cbar = plt.colorbar(mappable=pcmesh, ax=ax) - if clabel is not None: - cbar.set_label(clabel) - cbar.ax.tick_params(labelsize='large') - ax.set_xlabel(r'$\cos\theta_Z$') - ax.set_ylabel(r'Energy (GeV)') - ax.set_title(title, y=1.03) - min_e = np.min(energy) - max_e = np.max(energy) - ax.set_xlim(np.min(x), np.max(x)) - ax.set_ylim(np.min(y), np.max(y)) - lin_yticks = 2**(np.arange(np.ceil(np.log2(min_e)), - np.floor(np.log2(max_e))+1)) - ax.set_yticks(np.log10(lin_yticks)) - ax.set_yticklabels([str(int(yt)) for yt in lin_yticks]) - - -def baseplot2(map, title, ax, vmax=None, symm=False, evtrate=False): - """Simple plotting of a 2D map. - - Parameters - ---------- - map : Map - title : str - ax : axis - symm : bool - evtrate : bool - - Returns - ------- - ax, pcmesh, cbar - - """ - assert len(map.binning) == 2 - hist = np.ma.masked_invalid(map.hist) - if symm: - cmap = plt.cm.seismic - extr = np.nanmax(np.abs(hist)) - vmax = extr - vmin = -extr - else: - cmap = plt.cm.afmhot - if evtrate: - vmin = 0 - else: - vmin = np.nanmin(hist) - if vmax is None: - vmax = np.nanmax(hist) - cmap.set_bad(color=(0, 1, 0), alpha=1) - - x = map.binning.dims[0].bin_edges.magnitude - y = map.binning.dims[1].bin_edges.magnitude - - if map.binning.dims[0].is_log: - xticks = 2**(np.arange(np.ceil(np.log2(min(x))), - np.floor(np.log2(max(x)))+1)) - x = np.log10(x) - if map.binning.dims[1].is_log: - yticks = 2**(np.arange(np.ceil(np.log2(min(y))), - np.floor(np.log2(max(y)))+1)) - y = np.log10(y) - - X, Y = np.meshgrid(x, y) - pcmesh = ax.pcolormesh(X, Y, hist.T, vmin=vmin, vmax=vmax, cmap=cmap) - cbar = plt.colorbar(mappable=pcmesh, ax=ax) - cbar.ax.tick_params(labelsize='large') - ax.set_xlabel(map.binning.dims[0].tex) - ax.set_ylabel(map.binning.dims[1].tex) - ax.set_title(title, y=1.03) - ax.set_xlim(np.min(x), np.max(x)) - ax.set_ylim(np.min(y), np.max(y)) - - if map.binning.dims[0].is_log: - ax.set_xticks(np.log10(xticks)) - ax.set_xticklabels([str(int(xt)) for xt in xticks]) - if map.binning.dims[1].is_log: - ax.set_yticks(np.log10(yticks)) - ax.set_yticklabels([str(int(yt)) for yt in yticks]) - - return ax, pcmesh, cbar - - -def plot_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, name, - texname, stagename, servicename, shorttitles=False, - ftype='png'): - """Plot comparisons between two identically-binned PISA 2 style maps""" - path = [outdir] - - if subdir is None: - subdir = stagename.lower() - path.append(subdir) - - if outdir is not None: - mkdir(os.path.join(*path), warn=False) - - if stagename is not None: - fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower()), - 'stage_'+stagename] - else: - fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower())] - if servicename is not None: - fname.append('service_'+servicename) - if name is not None: - fname.append(name.lower()) - fname = '__'.join(fname) + '.' + ftype - - path.append(fname) - - basetitle = [] - if stagename is not None: - basetitle.append('%s' % stagename) - if texname is not None: - basetitle.append(r'$%s$' % texname) - basetitle = ' '.join(basetitle) - - ratio_map = make_ratio_map(new_map, ref_map) - diff_map = make_delta_map(new_map, ref_map) - diff_ratio_map = make_ratio_map(diff_map, ref_map) - - max_diff_ratio = np.nanmax(np.abs(diff_ratio_map['map'])) - - # Handle cases where ratio returns infinite - # This isn't necessarily a fail, since all it means is the referene was - # zero If the new value is sufficiently close to zero then it's still fine - if max_diff_ratio == float('inf'): - logging.warning( - 'Infinite value found in ratio tests. Difference tests ' - 'now also being calculated' - ) - # First find all the finite elements - finite_map = np.isfinite(diff_ratio_map['map']) - # Then find the nanmax of this, will be our new test value - max_diff_ratio = np.nanmax(np.abs(diff_ratio_map['map'][finite_map])) - # Also find all the infinite elements - infinite_map = np.logical_not(finite_map) - # This will be a second test value - max_diff = np.nanmax(np.abs(diff_map['map'][infinite_map])) - else: - # Without any infinite elements we can ignore this second test - max_diff = 0.0 - - if outdir is not None: - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=5, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(20, 5)) - if shorttitles: - baseplot(m=ref_map, - title=basetitle+' '+ref_abv+' (A)', - evtrate=True, - ax=axes[0]) - baseplot(m=new_map, - title=basetitle+' '+new_abv+' (B)', - evtrate=True, - ax=axes[1]) - baseplot(m=ratio_map, - title='A/B', - ax=axes[2]) - baseplot(m=diff_map, - title='A-B', - symm=True, ax=axes[3]) - baseplot(m=diff_ratio_map, - title='(A-B)/A', - symm=True, - ax=axes[4]) - else: - baseplot(m=ref_map, - title=basetitle+' '+ref_abv, - evtrate=True, - ax=axes[0]) - baseplot(m=new_map, - title=basetitle+' '+new_abv, - evtrate=True, - ax=axes[1]) - baseplot(m=ratio_map, - title=basetitle+' %s/%s' %(new_abv, ref_abv), - ax=axes[2]) - baseplot(m=diff_map, - title=basetitle+' %s-%s' %(new_abv, ref_abv), - symm=True, ax=axes[3]) - baseplot(m=diff_ratio_map, - title=basetitle+' (%s-%s)/%s' %(new_abv, ref_abv, ref_abv), - symm=True, - ax=axes[4]) - logging.debug('>>>> Plot for inspection saved at %s' - %os.path.join(*path)) - fig.savefig(os.path.join(*path)) - plt.close(fig.number) - - return max_diff_ratio, max_diff - - -def plot_map_comparisons(ref_map, new_map, ref_abv, new_abv, outdir, subdir, - name, texname, stagename, servicename, - shorttitles=False, ftype='png'): - """Plot comparisons between two identically-binned PISA 3 style maps""" - path = [outdir] - - if subdir is None: - subdir = stagename.lower() - path.append(subdir) - - if outdir is not None: - mkdir(os.path.join(*path), warn=False) - - if stagename is not None: - fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower()), - 'stage_'+stagename] - else: - fname = ['%s_%s_comparisons' %(ref_abv.lower(), new_abv.lower())] - if servicename is not None: - fname.append('service_'+servicename) - if name is not None: - fname.append(name.lower()) - fname = '__'.join(fname) + '.' + ftype - - path.append(fname) - - basetitle = [] - if stagename is not None: - basetitle.append('%s' % stagename) - if texname is not None: - basetitle.append(r'$%s$' % texname) - basetitle = ' '.join(basetitle) - - validate_map_objs(new_map, ref_map) - with np.errstate(divide='ignore', invalid='ignore'): - ratio_map = new_map/ref_map - diff_map = new_map - ref_map - with np.errstate(divide='ignore', invalid='ignore'): - diff_ratio_map = diff_map/ref_map - - max_diff_ratio = np.nanmax(np.abs(diff_ratio_map.hist)) - - # Handle cases where ratio returns infinite - # This isn't necessarily a fail, since all it means is the referene was - # zero If the new value is sufficiently close to zero then it's still fine - if max_diff_ratio == float('inf'): - logging.warning( - 'Infinite value found in ratio tests. Difference tests ' - 'now also being calculated' - ) - # First find all the finite elements - finite_map = np.isfinite(diff_ratio_map.hist) - # Then find the nanmax of this, will be our new test value - max_diff_ratio = np.nanmax(np.abs(diff_ratio_map.hist[finite_map])) - # Also find all the infinite elements - infinite_map = np.logical_not(finite_map) - # This will be a second test value - max_diff = np.nanmax(np.abs(diff_map.hist[infinite_map])) - else: - # Without any infinite elements we can ignore this second test - max_diff = 0.0 - - if outdir is not None: - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=1, ncols=5, gridspec_kw=gridspec_kw, - sharex=False, sharey=False, figsize=(20, 5)) - if shorttitles: - ref_map.plot( - fig=fig, - ax=axes[0], - title=basetitle+' '+ref_abv+' (A)', - cmap=plt.cm.afmhot - ) - new_map.plot( - fig=fig, - ax=axes[1], - title=basetitle+' '+new_abv+' (B)', - cmap=plt.cm.afmhot - ) - ratio_map.plot( - fig=fig, - ax=axes[2], - title='A/B', - cmap=plt.cm.afmhot - ) - diff_map.plot( - fig=fig, - ax=axes[3], - title='A-B', - symm=True, - cmap=plt.cm.seismic - ) - diff_ratio_map.plot( - fig=fig, - ax=axes[4], - title='(A-B)/A', - symm=True, - cmap=plt.cm.seismic - ) - else: - ref_map.plot( - fig=fig, - ax=axes[0], - title=basetitle+' '+ref_abv, - cmap=plt.cm.afmhot - ) - new_map.plot( - fig=fig, - ax=axes[1], - title=basetitle+' '+new_abv, - cmap=plt.cm.afmhot - ) - ratio_map.plot( - fig=fig, - ax=axes[2], - title=basetitle+' %s/%s' %(new_abv, ref_abv), - cmap=plt.cm.afmhot - ) - diff_map.plot( - fig=fig, - ax=axes[3], - title=basetitle+' %s-%s' %(new_abv, ref_abv), - symm=True, - cmap=plt.cm.seismic - ) - diff_ratio_map.plot( - fig=fig, - ax=axes[4], - title=basetitle+' (%s-%s)/%s' %(new_abv, ref_abv, ref_abv), - symm=True, - cmap=plt.cm.seismic - ) - logging.debug('>>>> Plot for inspection saved at %s' - %os.path.join(*path)) - fig.savefig(os.path.join(*path)) - plt.close(fig.number) - - return max_diff_ratio, max_diff - - -def plot_cmp(new, ref, new_label, ref_label, plot_label, file_label, outdir, - ftype='png'): - """Plot comparisons between two (identically-binned) maps or map sets. - - Parameters - ---------- - new : Map or MapSet - ref : Map or MapSet - new_label : str - ref_label : str - plot_label : str - file_label : str - outdir : str - ftype : str - - """ - path = [outdir] - - if isinstance(ref, Map): - assert isinstance(new, Map) - ref_maps = [ref] - new_maps = [new] - - if outdir is not None: - mkdir(os.path.join(*path), warn=False) - - for ref, new in zip(ref_maps, new_maps): - assert ref.binning == new.binning - fname = get_valid_filename( - '__'.join([ - get_valid_filename(file_label), - '%s_vs_%s' %(get_valid_filename(new_label.lower()), - get_valid_filename(ref_label.lower())) - ]) + '.' + ftype - ) - path.append(fname) - - ratio = new / ref - diff = new - ref - fract_diff = diff / ref - - finite_ratio = ratio.hist[np.isfinite(ratio.hist)] - ratio_mean = np.mean(finite_ratio) - ratio_median = np.median(finite_ratio) - - finite_diff = diff.hist[np.isfinite(diff.hist)] - diff_mean = np.mean(finite_diff) - diff_median = np.median(finite_diff) - - finite_fract_diff = fract_diff.hist[np.isfinite(fract_diff.hist)] - fract_diff_mean = np.mean(finite_fract_diff) - fract_diff_median = np.median(finite_fract_diff) - - max_diff_ratio = np.nanmax(fract_diff.hist) - - # Handle cases where ratio returns infinite - # This isn't necessarily a fail, since all it means is the referene was - # zero. If the new value is sufficiently close to zero then it's stil - # fine. - if max_diff_ratio == np.inf: - logging.warning( - 'Infinite value found in ratio tests. Difference tests' - ' now also being calculated' - ) - # First find all the finite elements - finite_mask = np.isfinite(fract_diff.hist) - # Then find the nanmax of this, will be our new test value - max_diff_ratio = np.nanmax(fract_diff.hist[finite_mask]) - # Also find all the infinite elements; compute a second test value - max_diff = np.nanmax(diff.hist[~finite_mask]) - else: - # Without any infinite elements we can ignore this second test - max_diff = 0.0 - - if outdir is not None: - if new.binning.num_dims == 2: - n_dims = 2 - n_third_dim_bins = 1 - elif new.binning.num_dims == 3: - n_dims = 3 - odd_dim_idx = new.binning.shape.index(np.min(new.binning.shape)) - logging.debug('odd_dim_idx: %s', odd_dim_idx) - n_third_dim_bins = new.binning.shape[odd_dim_idx] - - gridspec_kw = dict(left=0.03, right=0.968, wspace=0.32) - fig, axes = plt.subplots(nrows=n_third_dim_bins, ncols=5, - gridspec_kw=gridspec_kw, - squeeze=False, sharex=False, sharey=False, - figsize=(20, 5)) - - refslice = ref - newslice = new - bin_names = None - if n_dims == 3: - if odd_dim_idx != 0: - refslice = np.moveaxis(ref, source=odd_dim_idx, - destination=0) - newslice = np.moveaxis(new, source=odd_dim_idx, - destination=0) - bin_names = new.binning.dims[odd_dim_idx].bin_names - - for odd_bin_idx in range(n_third_dim_bins): - if n_dims == 2: - thisbin_ref = refslice - thisbin_new = newslice - tmp_ref_label = ref_label - tmp_new_label = new_label - - elif n_dims == 3: - thisbin_ref = refslice[odd_bin_idx, ...].squeeze() - thisbin_new = newslice[odd_bin_idx, ...].squeeze() - - if bin_names is not None: - suffix = bin_names[odd_bin_idx] - else: - suffix = format(odd_bin_idx, 'd') - tmp_new_label = new_label + ' ' + suffix - tmp_ref_label = ref_label + ' ' + suffix - - ratio = thisbin_new / thisbin_ref - diff = thisbin_new - thisbin_ref - fract_diff = diff / thisbin_ref - - refmax = np.nanmax(thisbin_ref.hist) - newmax = np.nanmax(thisbin_new.hist) - vmax = refmax if refmax > newmax else newmax - - baseplot2(map=thisbin_new, - title=tmp_new_label, - vmax=vmax, - evtrate=True, - ax=axes[odd_bin_idx][0]) - - baseplot2(map=thisbin_ref, - title=tmp_ref_label, - vmax=vmax, - evtrate=True, - ax=axes[odd_bin_idx][1]) - - ax, _, _ = baseplot2(map=ratio, - title='%s/%s' %(tmp_new_label, - tmp_ref_label), - ax=axes[odd_bin_idx][2]) - ax.text(0.95, 0.95, "Mean: %.6f"%ratio_mean, - horizontalalignment='right', - transform=ax.transAxes, color=(0, 0.8, 0.8)) - ax.text(0.95, 0.91, "Median: %.6f"%ratio_median, - horizontalalignment='right', - transform=ax.transAxes, color=(0, 0.8, 0.8)) - - ax, _, _ = baseplot2(map=diff, - title='%s-%s' %(tmp_new_label, - tmp_ref_label), - symm=True, ax=axes[odd_bin_idx][3]) - ax.text(0.95, 0.95, "Mean: %.6f"%diff_mean, - horizontalalignment='right', - transform=ax.transAxes) - ax.text(0.95, 0.91, "Median: %.6f"%diff_median, - horizontalalignment='right', - transform=ax.transAxes) - - ax, _, _ = baseplot2(map=fract_diff, - title='(%s-%s)/%s' %(tmp_new_label, - tmp_ref_label, - tmp_ref_label), - symm=True, - ax=axes[odd_bin_idx][4]) - ax.text(0.95, 0.95, "Mean: %.6f"%fract_diff_mean, - horizontalalignment='right', - transform=ax.transAxes) - ax.text(0.95, 0.91, "Median: %.6f"%fract_diff_median, - horizontalalignment='right', - transform=ax.transAxes) - - logging.debug('>>>> Plot for inspection saved at %s' - %os.path.join(*path)) - fig.savefig(os.path.join(*path)) - plt.close(fig.number) - - return max_diff_ratio, max_diff - - -def pisa2_map_to_pisa3_map(pisa2_map, ebins_name='ebins', czbins_name='czbins', - is_log=True, is_lin=True): - expected_keys = ['map', 'ebins', 'czbins'] - if sorted(pisa2_map.keys()) != sorted(expected_keys): - raise ValueError('PISA 2 map should be a dict containining entries: %s' - %expected_keys) - ebins = OneDimBinning( - name=ebins_name, - bin_edges=pisa2_map['ebins'] * ureg.GeV, - is_log=is_log, - tex=r'E_{\nu}' - ) - czbins = OneDimBinning( - name=czbins_name, - bin_edges=pisa2_map['czbins'], - is_lin=is_lin, - tex=r'\cos\theta_Z' - ) - bins = MultiDimBinning([ebins, czbins]) - return Map( - name='pisa2equivalent', - hist=pisa2_map['map'], - binning=bins - ) diff --git a/pisa/utils/vbwkde.py b/pisa/utils/vbwkde.py deleted file mode 100644 index d3ebb0cf8..000000000 --- a/pisa/utils/vbwkde.py +++ /dev/null @@ -1,696 +0,0 @@ -""" -Implementation of the Improved Sheather Jones (ISJ) KDE bandwidth selection -method outlined in: - - Z. I. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density - estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010. - -and extension to use this in varaible bandwidth KDE via - - I.S. Abramson, On bandwidth variation in kernel estimates - A - square root law, Annals of Stat. Vol. 10, No. 4, 1217-1223 1982 - -See also - - P. Hall, T. C. Hu, J. S. Marron, Improved Variable Window Kernel - Estimates of Probability Densities, Annals of Statistics - Vol. 23, No. 1, 1-10, 1995 - -Some code in this module is Copyright (c) 2007 Zdravko Botev. See __license__ -for details. -""" - - -# TODO: Make normalization use a relative density value normalized after ISJ -# bandwidth to take into consideration really-high densities (which can have -# narrower bandwidths than ISJ dictates) or really-low densities (which should -# have very wide bandwidths, wider than ISJ dictates) - -# TODO : accuracy tests for fbwkde and vbwkde - - -from __future__ import absolute_import, division - -from math import exp, sqrt -from time import time - -import numpy as np -from scipy import fftpack, interpolate, optimize - -from pisa import FTYPE, numba_jit -from pisa.utils.gaussians import gaussians -from pisa.utils.log import logging, set_verbosity, tprofile - - -__all__ = ['OPT_TYPE', 'FIXED_POINT_IMPL', - 'fbwkde', 'vbwkde', 'isj_bandwidth', 'test_fbwkde', 'test_vbwkde'] - -__author__ = 'Z. Botev, J.L. Lanfranchi' - -__license__ = '''Original BSD license, applicable *ONLY* to functions -"isj_bandwidth" and "fixed_point" since these were derived from Botev's -original work (this license applies to any future code derived from those -functions as well): - - Copyright (c) 2007, Zdravko Botev - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -============================================================================ - -All other code in this module is under the following copyright/license: - -Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# NOTE: 'minimum' is giving very rough overfit results. Switching to 'root' for -# now. -OPT_TYPE = 'root' -FIXED_POINT_IMPL = 'numba_loops' - -_PI = np.pi -_TWOPI = 2*np.pi -_SQRTPI = np.sqrt(np.pi) -_SQRT2PI = np.sqrt(2*np.pi) -_PISQ = np.pi*np.pi - - -def fbwkde(data, weights=None, n_dct=None, min=None, max=None, - evaluate_dens=True, evaluate_at=None): - """Fixed-bandwidth (standard) Gaussian KDE using the Improved - Sheather-Jones bandwidth. - - Code adapted for Python from the implementation in Matlab by Zdravko Botev. - - Ref: Z. I. Botev, J. F. Grotowski, and D. P. Kroese. Kernel density - estimation via diffusion. The Annals of Statistics, 38(5):2916-2957, 2010. - - Parameters - ---------- - data : array - weights : array or None - n_dct : None or int - Number of points with which to form a regular grid, from `min` to - `max`; histogram values at these points are sent through a discrete - Cosine Transform (DCT), so `n_dct` should be an integer power of 2 for - speed purposes. If None, uses next-highest-power-of-2 above - len(data)*10. - min : float or None - max : float or None - evaluate_dens : bool - evaluate_at : None or array - - Returns - ------- - bandwidth : float - evaluate_at : array of float - density : None or array of float - - """ - if n_dct is None: - n_dct = int(2**np.ceil(np.log2(len(data)*10))) - assert int(n_dct) == n_dct - n_dct = int(n_dct) - n_datapoints = len(data) - - # Parameters to set up the points on which to evaluate the density - if min is None or max is None: - minimum = data.min() - maximum = data.max() - data_range = maximum - minimum - min = minimum - data_range/2 if min is None else min - max = maximum + data_range/2 if max is None else max - - hist_range = max - min - - # Histogram the data to get a crude first approximation of the density - data_hist, bins = np.histogram( - data, bins=n_dct, range=(min, max), density=False, weights=weights - ) - - # Make into a probability mass function - if weights is None: - data_hist = data_hist / n_datapoints - else: - data_hist = data_hist / np.sum(weights) - - # Define a minimum bandwidth relative to mean of distances between points - distances = np.diff(np.sort(data)) - min_bandwidth = 2*np.pi*np.mean(distances) - logging.trace('min_bandwidth, 2pi*mean: %.5e', min_bandwidth) - - # Solve for the ISJ fixed point to obtain the "optimal" bandwidth - isj_bw, t_star, dct_data = isj_bandwidth( - y=data_hist, n_datapoints=n_datapoints, x_range=hist_range, - min_bandwidth=min_bandwidth - ) - - # TODO: Detect numerical instability issues here, prior to returning! - - if not evaluate_dens: - return isj_bw, evaluate_at, None - - if evaluate_at is None: - # Smooth the discrete-cosine-transformed data using t_star - sm_dct_data = dct_data*np.exp(-np.arange(n_dct)**2 * _PISQ*t_star/2) - - # Inverse DCT to get density - density = fftpack.idct(sm_dct_data, norm=None)*n_dct/hist_range - if np.any(density < 0): - logging.trace( - 'ISJ encountered numerical instability in IDCT (resulting in a' - ' negative density). Result will be computed without the IDCT.' - ) - evaluate_at = (bins[0:-1] + bins[1:]) / 2 - else: - evaluate_at = (bins[0:-1] + bins[1:]) / 2 - density = density/np.trapz(density, evaluate_at) - return isj_bw, evaluate_at, density - else: - evaluate_at = np.asarray(evaluate_at, dtype=FTYPE) - - density = gaussians( - x=evaluate_at, - mu=data.astype(FTYPE), - sigma=np.full(shape=n_datapoints, fill_value=isj_bw, dtype=FTYPE), - weights=weights - ) - - return isj_bw, evaluate_at, density - - -def vbwkde(data, weights=None, n_dct=None, min=None, max=None, n_addl_iter=0, - evaluate_dens=True, evaluate_at=None): - """Variable-bandwidth (standard) Gaussian KDE that uses the function - `fbwkde` for a pilot density estimate. - - Parameters - ---------- - data : array - The data points for which the density estimate is sought - - weights : array or None - Weight for each point in `data` - - n_dct : None or int - Number of points with which to form a regular grid, from `min` to - `max`; histogram values at these points are sent through a discrete - Cosine Transform (DCT), so `n_dct` should be an integer power of 2 for - speed purposes. If None, uses next-highest-power-of-2 above - len(data)*10. - - min : None or float - Minimum of range over which to compute density. - If None, defaults to min(data) - range(data)/2 - - max : None or float - Maximum of range over which to compute density. - If None: max(data) + range(data)/2 - - n_addl_iter : int >= 0 - Number of additional iterations on the Abramson VBW density *after* - the initial VBW estimate. This can help smooth the tails of the - distribution, at the expense of additional computational cost. - - evaluate_dens : bool - Whether to evaluate and return the density estimate on the points - defined by `evaluate_at` - - evaluate_at : None, float, or array of float - Point(s) at which to evaluate the density estimate. If None, - evaluate_at = np.linspace(min + dx/2, max - dx/2, n_dct) - where - dx = (max - min) / n_dct - - Returns - ------- - kernel_bandwidths : array - - evaluate_at : array - Locations at which the density estimates would be evaluated - - density : array - Density estimates - - Notes - ----- - Specifying the range: - - The specification of min and max are critical for obtaining a - reasonable density estimate. If the true underlying density slowly - decays to zero on one side or the other, like a gaussian, specifying - too-small a range will distort the edge the VBW-KDE finds. On the - other hand, an abrupt cut-off in the distribution should be - accompanied by a similar cutoff in the computational range (min and/or - max). The algorithm here will approximate such a sharp cut-off with - roughly the same performance to the reflection method for standard - KDE's (as the fixed-BW portion uses a DCT of the data), but note that - this will not perform as well as polynomial-edges or other - modifications that have been proposed in the literature. - - """ - if n_dct is None: - n_dct = int(2**np.ceil(np.log2(len(data)*10))) - assert n_addl_iter >= 0 and int(n_addl_iter) == n_addl_iter - n_addl_iter = int(n_addl_iter) - - # Parameters to set up the points on which to evaluate the density - if min is None or max is None: - minimum = data.min() - maximum = data.max() - data_range = maximum - minimum - min = minimum - data_range/2 if min is None else min - max = maximum + data_range/2 if max is None else max - - # Pilot density estimate for the VBW KDE comes from fixed bandwidth KDE - # using the Improved Sheather-Jones algorithm. By specifying - # `evaluate_at` to be None, `fbwkde` derives a regular grid at which to - # evaluate the points and does so without needing to do a sum of Gaussians - # (only a freq.-domain multiply and inverse DCT) - isj_bw, grid, pilot_dens_on_grid = fbwkde( - data=data, weights=weights, n_dct=n_dct, min=min, max=max, - evaluate_dens=True, evaluate_at=None - ) - if np.any(pilot_dens_on_grid < 0): - raise ValueError('ISJ') - - # Include edges (min, max) in the grid and extend the densities to the - # left/right, respectively. (Make the profile constant out to the edge). - all_gridpoints = [] - all_dens = [] - if grid[0] != min: - all_gridpoints.append([min]) - all_dens.append([pilot_dens_on_grid[0]]) - - all_gridpoints.append(grid) - all_dens.append(pilot_dens_on_grid) - - if grid[-1] != max: - all_gridpoints.append([max]) - all_dens.append([pilot_dens_on_grid[-1]]) - - grid = np.concatenate(all_gridpoints) - pilot_dens_on_grid = np.concatenate(all_dens) - - # Use linear interpolation to get density at the data points - interp = interpolate.interp1d( - x=grid, - y=pilot_dens_on_grid, - kind='linear', - copy=False, - bounds_error=True, - fill_value=np.nan - ) - # TODO: For some reason this gets translated into an object array, so the - # `astype` call is necessary - pilot_dens_at_datapoints = interp(data).astype(FTYPE) - - n_iter = 1 + n_addl_iter - for n in range(n_iter): - # Note below diverges from the published Abramson method, by forcing - # the bandwidth at the max of the density distribution to be exactly - # the bandwidth found above with the improved Sheather-Jones BW - # selection technique. Refs: - # I.S. Abramson, On bandwidth variation in kernel estimates - A - # square root law, Annals of Stat. Vol. 10, No. 4, 1217-1223 1982 - # P. Hall, T. C. Hu, J. S. Marron, Improved Variable Window Kernel - # Estimates of Probability Densities, Annals of Statistics - # Vol. 23, No. 1, 1-10, 1995 - kernel_bandwidths = ( - isj_bw * np.sqrt(np.max(pilot_dens_at_datapoints)) - / np.sqrt(pilot_dens_at_datapoints) - ) - - if n < n_addl_iter: - pilot_dens_at_datapoints = gaussians( - x=data, - mu=data, - sigma=kernel_bandwidths, - weights=weights - ) - - else: # final iteration - if evaluate_at is None: - evaluate_at = grid - if evaluate_dens: - density = gaussians( - x=evaluate_at, - mu=data, - sigma=kernel_bandwidths, - weights=weights - ) - else: - density = None - - return kernel_bandwidths, evaluate_at, density - - -def isj_bandwidth(y, n_datapoints, x_range, min_bandwidth): - """ - Parameters - ---------- - y : array of float - n_datapoints : int - x_range : float - - Returns - ------- - bandwidth : float - t_star : float - dct_data : array of float - - """ - # Ensure double-precision datatypes are used - y = np.asarray(y, dtype=np.float64) - x_range = np.float64(x_range) - - n_dct = len(y) - - min_t_star = (min_bandwidth/x_range)**2 - - i_range = np.arange(1, n_dct, dtype=np.float64)**2 - log_i_range = np.log(i_range) - - dct_data = fftpack.dct(y, norm=None) - dct_data_sq = 0.25 * (dct_data * dct_data)[1:] - - logging.trace('Fixed point implementation = %s', FIXED_POINT_IMPL) - logging.trace('Optimization type = %s', OPT_TYPE) - if FIXED_POINT_IMPL == 'numba_np': - func = fixed_point_numba_np - args = n_datapoints, i_range, log_i_range, dct_data_sq - elif FIXED_POINT_IMPL == 'numba_loops': - func = fixed_point_numba_loops - args = n_datapoints, i_range, log_i_range, dct_data_sq - elif FIXED_POINT_IMPL == 'numba_orig': - func = fixed_point_numba_orig - args = n_datapoints, i_range, dct_data_sq - else: - raise ValueError('Unknown FIXED_POINT_IMPL "%s"' % FIXED_POINT_IMPL) - - try: - if OPT_TYPE == 'root': - t_star = optimize.brentq( - f=func, - a=min_t_star/1000, - b=0.5, - rtol=np.finfo(np.float64).eps*1e2, - args=args, - full_output=True, - disp=True - )[0] - elif OPT_TYPE == 'minimum': - t_star = optimize.minimize_scalar( - fun=func, - bounds=(min_t_star/1000, 0.5), - method='Bounded', - args=args, - options=dict(maxiter=1e6, xatol=1e-22), - ).x - else: - raise ValueError('Unknown OPT_TYPE "%s"' % OPT_TYPE) - - if t_star < min_t_star: - logging.trace('t_star = %.4e < min_t_star = %.4e;' - ' setting to min_t_star', t_star, min_t_star) - t_star = min_t_star - - # NOTE: Use `math.sqrt` _not_ `numpy.sqrt` to ensure failures raise - # exceptions (numpy might be coaxed to do so, but it'd probably be - # slow) - bandwidth = sqrt(t_star)*x_range - - except ValueError: - logging.error('Improved Sheather-Jones bandwidth %s-finding failed.', - OPT_TYPE) - if min_bandwidth is not None: - logging.error('Using supplied `min_bandwidth` instead.') - bandwidth = min_bandwidth - t_star = min_t_star - else: - raise - - return bandwidth, t_star, dct_data - - -if OPT_TYPE == 'root': - def optfunc(f): - """No-op decorator""" - return f - -elif OPT_TYPE == 'minimum': - def optfunc(f): - """Decorator for returning abs of function output""" - def func(*args, **kw): - """Return absolute value of function""" - return np.abs(f(*args, **kw)) - return func - - -_ELL = 7 -_TWOPI2ELL = 2 * _PI**(2*_ELL) -_K0 = np.array([ - (1 + 0.5**(_S + 0.5)) * np.prod(np.arange(1, 2*_S, 2)) * 2/(3*_SQRT2PI) - for _S in range(_ELL-1, 1, -1) -]) - -@optfunc -@numba_jit(nopython=True, nogil=True, cache=True, fastmath=False) -def fixed_point_numba_np(t, n_datapoints, i_range, log_i_range, a2): - """ISJ fixed-point calculation as per Botev et al.. - - In this implementation, Numba makes calls to Numpy routines. - - Parameters - ---------- - t - n_datapoints - i_range - log_i_range - a2 - - Returns - ------- - t_star - - """ - exparg = _ELL*log_i_range - i_range*(_PISQ*t) - ex = np.exp(exparg) - eff = _TWOPI2ELL * np.dot(a2, ex) - - for s in range(_ELL-1, 1, -1): - t_elap = (_K0[s] / (n_datapoints * eff))**(2 / (3 + 2*s)) - exparg = s*log_i_range - i_range*(_PISQ*t_elap) - ex = np.exp(exparg) - dp = np.dot(a2, ex) - eff = 2*_PI**(2*s) * dp - - return t - (2.0 * n_datapoints * _SQRTPI * eff)**-0.4 - - -@optfunc -@numba_jit('{f}({f}, int64, {f}[:], {f}[:], {f}[:])'.format(f='float64'), - nopython=True, nogil=True, cache=True, fastmath=False) -def fixed_point_numba_loops(t, n_datapoints, i_range, log_i_range, a2): - """ISJ fixed-point calculation as per Botev et al.. - - In this implementation, Numba explicitly loops over arrays. - - Parameters - ---------- - t - n_datapoints - i_range - log_i_range - a2 - - Returns - ------- - t_star - - """ - len_i = len(i_range) - - tot = 0.0 - for idx in range(len_i): - a2_el = a2[idx] - log_i_range_el = log_i_range[idx] - i_range_el = i_range[idx] - - exparg = _ELL*log_i_range_el - i_range_el * _PISQ * t - tot += a2_el * exp(exparg) - eff = _TWOPI2ELL * tot - - for s in range(_ELL-1, 1, -1): - k0 = _K0[s] - t_elap = (k0 / (n_datapoints * eff))**(2 / (3 + 2*s)) - - tot = 0.0 - for idx in range(len_i): - a2_el = a2[idx] - log_i_range_el = log_i_range[idx] - i_range_el = i_range[idx] - - exparg = s*log_i_range_el - i_range_el*_PISQ*t_elap - tot += a2_el * exp(exparg) - eff = 2 * _PI**(2*s) * tot - - return t - (2*n_datapoints*_SQRTPI*eff)**-0.4 - - -@optfunc -@numba_jit('{f}({f}, int64, {f}[:], {f}[:])'.format(f='float64'), - nopython=True, nogil=True, cache=True, fastmath=False) -def fixed_point_numba_orig(t, n_datapoints, i_range, a2): - """Fixed point algorithm for Improved Sheather Jones bandwidth - selection. - - Implements the fixed-point finding for the function - ``t - zeta * gamma^{[l]}(t)`` - - See The Annals of Statistics, 38(5):2916-2957, 2010. - - Parameters - ---------- - t : float64 - n_datapoints : int64 - i_range : array of float64 - a2 : array of float64 - - Returns - ------- - t_star : float64 - - NOTES - ----- - Original implementation by Botev et al. is quad-precision, whereas this is - double precision only. This might cause discrepancies from the reference - implementation. - - """ - len_i = len(i_range) - - tot = 0.0 - for idx in range(len_i): - tot += i_range[idx]**_ELL * a2[idx] * exp(-i_range[idx] * _PISQ * t) - eff = 2 * _PI**(2*_ELL) * tot - - for s in range(_ELL-1, 1, -1): - k0 = np.prod(np.arange(1, 2*s, 2)) / _SQRT2PI - const = (1 + (0.5)**(s+0.5)) / 3.0 - t_elap = (2 * const * k0 / (n_datapoints * eff))**(2.0 / (3.0 + 2.0*s)) - - tot = 0.0 - for idx in range(len_i): - tot += ( - i_range[idx]**s * a2[idx] * exp(-i_range[idx] * _PISQ * t_elap) - ) - eff = 2 * _PI**(2*s) * tot - - return t - (2.0 * n_datapoints * _SQRTPI * eff)**-0.4 - - -def test_fbwkde(): - """Test speed of fbwkde implementation""" - n_samp = int(1e4) - n_dct = int(2**12) - n_eval = int(1e4) - x = np.linspace(0, 20, n_eval) - np.random.seed(0) - times = [] - for _ in range(3): - enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_samp) - t0 = time() - fbwkde(data=enuerr, n_dct=n_dct, evaluate_at=x) - times.append(time() - t0) - tprofile.debug( - 'median time to run fbwkde, %d samples %d dct, eval. at %d points: %f' - ' ms', n_samp, n_dct, n_eval, np.median(times)*1000 - ) - logging.info('<< PASS : test_fbwkde >>') - - -def test_vbwkde(): - """Test speed of unweighted vbwkde implementation""" - n_samp = int(1e4) - n_dct = int(2**12) - n_eval = int(5e3) - n_addl = 0 - x = np.linspace(0, 20, n_samp) - np.random.seed(0) - times = [] - for _ in range(3): - enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_eval) - t0 = time() - vbwkde(data=enuerr, n_dct=n_dct, evaluate_at=x, n_addl_iter=n_addl) - times.append(time() - t0) - tprofile.debug( - 'median time to run vbwkde, %d samples %d dct %d addl iter, eval. at' - ' %d points: %f ms', n_samp, n_dct, n_addl, n_eval, np.median(times)*1e3 - ) - logging.info('<< PASS : test_vbwkde >>') - - -def test_weighted_vbwkde(): - """Test speed of vbwkde implementation using weights""" - n_samp = int(1e4) - n_dct = int(2**12) - n_eval = int(5e3) - n_addl = 0 - x = np.linspace(0, 20, n_samp) - np.random.seed(0) - times = [] - for _ in range(3): - enuerr = np.random.noncentral_chisquare(df=3, nonc=1, size=n_eval) - weights = np.random.rand(n_eval) - t0 = time() - vbwkde(data=enuerr, weights=weights, - n_dct=n_dct, evaluate_at=x, n_addl_iter=n_addl) - times.append(time() - t0) - tprofile.debug( - 'median time to run weighted vbwkde, %d samples %d dct %d addl iter,' - ' eval. at %d points: %f ms', - n_samp, n_dct, n_addl, n_eval, np.median(times)*1e3 - ) - logging.info('<< PASS : test_weighted_vbwkde >>') - - -if __name__ == "__main__": - set_verbosity(2) - test_fbwkde() - test_vbwkde() - test_weighted_vbwkde() diff --git a/pisa/utils/vectorizer.py b/pisa/utils/vectorizer.py deleted file mode 100644 index 69581de37..000000000 --- a/pisa/utils/vectorizer.py +++ /dev/null @@ -1,216 +0,0 @@ -# pylint: disable=redefined-outer-name, missing-docstring - - -""" -Collection of useful vectorized functions -""" - -from __future__ import absolute_import, print_function - -import math - -import numpy as np -import numba -from numba import guvectorize - -from pisa import FTYPE, TARGET -from pisa.utils.log import logging, set_verbosity -from pisa.utils.numba_tools import WHERE, cuda_copy - - -__all__ = [ - "mul", - "imul", - "imul_and_scale", - "itruediv", - "assign", - "pow", - "sqrt", - "replace_where_counts_gt", -] - -__version__ = "0.2" -__author__ = "Philipp Eller (pde3@psu.edu)" - - -FX = "f4" if FTYPE == np.float32 else "f8" - - -# ---------------------------------------------------------------------------- # - - - -@cuda_copy -def scale(vals, scale, out): - """Multiply .. :: - - out[:] = vals[:] * scale - - """ - scale_gufunc(vals, FTYPE(scale), out=out) - - -@guvectorize([f"({FX}[:], {FX}, {FX}[:])"], "(), () -> ()", target=TARGET) -def scale_gufunc(vals, scale, out): - out[0] = vals[0] * scale - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def mul(vals0, vals1, out): - """Multiply .. :: - - out[:] = vals0[:] * vals1[:] - - """ - mul_gufunc(vals0, vals1, out=out) - - -@guvectorize([f"({FX}[:], {FX}[:], {FX}[:])"], "(), () -> ()", target=TARGET) -def mul_gufunc(vals0, vals1, out): - out[0] = vals0[0] * vals1[0] - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def imul(vals, out): - """Multiply augmented assignment of two arrays .. :: - - out[:] *= vals[:] - - """ - imul_gufunc(vals, out=out) - - -@guvectorize([f"({FX}[:], {FX}[:])"], "() -> ()", target=TARGET) -def imul_gufunc(vals, out): - out[0] *= vals[0] - - -# ---------------------------------------------------------------------------- # - -@cuda_copy -def imul_and_scale(vals, scale, out): - """Multiply and scale augmented assignment .. :: - - out[:] *= vals[:] * scale - - """ - imul_and_scale_gufunc(vals, FTYPE(scale), out=out) - - -@guvectorize([f"({FX}[:], {FX}, {FX}[:])"], "(), () -> ()", target=TARGET) -def imul_and_scale_gufunc(vals, scale, out): - out[0] *= vals[0] * scale - - -def test_imul_and_scale(): - """Unit tests for function ``imul_and_scale``""" - a = np.linspace(0, 1, 1000, dtype=FTYPE) - out = np.ones_like(a) - imul_and_scale(vals=a, scale=10.0, out=out) - assert np.allclose(out, np.linspace(0, 10, 1000, dtype=FTYPE)) - logging.info("<< PASS : test_multiply_and_scale >>") - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def itruediv(vals, out): - """Divide augmented assignment .. :: - - out[:] /= vals[:] - - Division by zero results in 0 for that element. - """ - itruediv_gufunc(vals, out=out) - - -@guvectorize([f"({FX}[:], {FX}[:])"], "() -> ()", target=TARGET) -def itruediv_gufunc(vals, out): - if vals[0] == 0.0: - out[0] = 0.0 - else: - out[0] /= vals[0] - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def assign(vals, out): # pylint: disable=redefined-builtin - """Assign array vals from another array .. :: - - out[:] = vals[:] - - """ - assign_gufunc(vals, out=out) - - -@guvectorize([f"({FX}[:], {FX}[:])"], "() -> ()", target=TARGET) -def assign_gufunc(vals, out): - out[0] = vals[0] - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def pow(vals, pwr, out): # pylint: disable=redefined-builtin - """Raise vals to pwr.. :: - - out[:] = vals[:]**pwr - - """ - pow_gufunc(vals, FTYPE(pwr), out=out) - -@guvectorize([f"({FX}[:], {FX}, {FX}[:])"], "(), () -> ()", target=TARGET) -def pow_gufunc(vals, pwr, out): - out[0] = vals[0] ** pwr - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def sqrt(vals, out): - """Square root of vals .. :: - - out[:] = sqrt(vals[:]) - - """ - sqrt_gufunc(vals, out=out) - - -@guvectorize([f"({FX}[:], {FX}[:])"], "() -> ()", target=TARGET) -def sqrt_gufunc(vals, out): - out[0] = math.sqrt(vals[0]) - - -# ---------------------------------------------------------------------------- # - - -@cuda_copy -def replace_where_counts_gt(vals, counts, min_count, out): - """Replace `out[i]` with `vals[i]` where `counts[i]` > `min_count`""" - replace_where_counts_gt_gufunc(vals, counts, FTYPE(min_count), out=out) - - -@guvectorize([f"({FX}[:], {FX}[:], {FX}, {FX}[:])"], "(), (), () -> ()", target=TARGET) -def replace_where_counts_gt_gufunc(vals, counts, min_count, out): - """Replace `out[i]` with `vals[i]` where `counts[i]` > `min_count`""" - if counts[0] > min_count: - out[0] = vals[0] - - -# ---------------------------------------------------------------------------- # - - -if __name__ == "__main__": - set_verbosity(1) - test_imul_and_scale() diff --git a/pisa_examples/IceCube_3y_oscillations_example.ipynb b/pisa_examples/IceCube_3y_oscillations_example.ipynb deleted file mode 100644 index 3ff8897a3..000000000 --- a/pisa_examples/IceCube_3y_oscillations_example.ipynb +++ /dev/null @@ -1,985 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# PISA Example Using Public IceCube Data\n", - "\n", - "This analysis is a close variant of what is published in [1], and referred to as *Sample B* in [2] and [3]. The set of systematic uncertainties is slightly reduced and results will be close to, but not identical to the published numbers.\n", - "\n", - "**References:**\n", - "* [1] “Measurement of Atmospheric Neutrino Oscillations at 6-56 GeV with IceCube DeepCore,” IceCube Collaboration: M. G. Aartsen et al., Physical Review Letters 120, 071801 (2018). DOI: 10.1103/PhysRevLett.120.071801\n", - "* [2] “Measurement of Atmospheric Tau Neutrino Appearance with IceCube DeepCore,” IceCube Collaboration: M. G. Aartsen et al., Phys. Rev. D99.3(2019), p. 032007. DOI: 10.1103/PhysRevD.99.032007\n", - "* [3] “Probing the Neutrino Mass Ordering with Atmospheric Neutrinos from Three Years of IceCube DeepCore Data,” IceCube Collaboration: M.G. Aartsen et al., Feb 20, 2019, preprint: arXiv:1902.07771\n", - "\n", - "Dataset must be obtained from https://icecube.wisc.edu/science/data/highstats_nuosc_3y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup\n", - "\n", - "Usually you would need to export the location of the data, and the config files to `PISA_RESOURCES`. For this example however, the data is inside our package." - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from uncertainties import unumpy as unp\n", - "import matplotlib.pyplot as plt\n", - "import copy\n", - "import pisa\n", - "from pisa.core.distribution_maker import DistributionMaker\n", - "from pisa.core.pipeline import Pipeline\n", - "from pisa.analysis.analysis import Analysis\n", - "from pisa import FTYPE, ureg" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now instantiate the `model` (given our configs) that we later fit to data. This now containes two `Pipelines` in a `DistributionMaker`, one for our neutrinos, and one for the background muons." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
pipeline number name detector name output_binning output_key profile
0neutrinos \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
1 muons \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
" - ], - "text/plain": [ - " pipeline number | name | detector name | output_binning | output_key | profile\n", - "-------------------+-----------+-----------------+---------------------------------------------+-----------------------+-----------\n", - " 0 | neutrinos | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |\n", - " 1 | muons | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model = DistributionMaker([\"settings/pipeline/IceCube_3y_neutrinos.cfg\", \"settings/pipeline/IceCube_3y_muons.cfg\"])\n", - "# this just turns on profiling\n", - "model.profile = True\n", - "model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our model has a number of free parameters, that will be used in our fit to the data" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
name value nominal_value range prior units is_fixed
nue_numu_ratio 1 1 [0.5, 1.5] +/- 0.05 dimensionless False
Barr_uphor_ratio 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
Barr_nu_nubar_ratio 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
delta_index 0 0 [-0.5, 0.5] +/- 0.1 dimensionless False
theta13 8.5 8.5 [7.85, 9.1] +/- 0.205 degree False
theta23 42.3 42.3 [31, 59] uniform degree False
deltam310.002457 0.002457 [0.001, 0.007] uniform electron_volt ** 2 False
aeff_scale 1 1 [0.0, 3.0] uniform dimensionless False
nutau_norm 1 1 [-1.0, 8.5] uniform dimensionless False
nu_nc_norm 1 1 [0.5, 1.5] +/- 0.2 dimensionless False
opt_eff_overall 1 1 [0.8, 1.2] +/- 0.1 dimensionless False
opt_eff_lateral 25 25 [5, 50] +/- 10.0 dimensionless False
opt_eff_headon 0 0 [-5.0, 2.0] uniform dimensionless False
ice_scattering 0 0 [-15, 15] +/- 10.0 dimensionless False
ice_absorption 0 0 [-15, 15] +/- 10.0 dimensionless False
atm_muon_scale 1 1 [0.0, 5.0] uniform dimensionless False
" - ], - "text/plain": [ - " name | value | nominal_value | range | prior | units | is_fixed\n", - "---------------------+----------+-----------------+----------------+-----------+--------------------+------------\n", - " nue_numu_ratio | 1 | 1 | [0.5, 1.5] | +/- 0.05 | dimensionless | False\n", - " Barr_uphor_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " Barr_nu_nubar_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " delta_index | 0 | 0 | [-0.5, 0.5] | +/- 0.1 | dimensionless | False\n", - " theta13 | 8.5 | 8.5 | [7.85, 9.1] | +/- 0.205 | degree | False\n", - " theta23 | 42.3 | 42.3 | [31, 59] | uniform | degree | False\n", - " deltam31 | 0.002457 | 0.002457 | [0.001, 0.007] | uniform | electron_volt ** 2 | False\n", - " aeff_scale | 1 | 1 | [0.0, 3.0] | uniform | dimensionless | False\n", - " nutau_norm | 1 | 1 | [-1.0, 8.5] | uniform | dimensionless | False\n", - " nu_nc_norm | 1 | 1 | [0.5, 1.5] | +/- 0.2 | dimensionless | False\n", - " opt_eff_overall | 1 | 1 | [0.8, 1.2] | +/- 0.1 | dimensionless | False\n", - " opt_eff_lateral | 25 | 25 | [5, 50] | +/- 10.0 | dimensionless | False\n", - " opt_eff_headon | 0 | 0 | [-5.0, 2.0] | uniform | dimensionless | False\n", - " ice_scattering | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " ice_absorption | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " atm_muon_scale | 1 | 1 | [0.0, 5.0] | uniform | dimensionless | False" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.params.free" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The two pipelines are quite different, with most complexity in the neutrino pipeline, that has several `Stage`s and free parameters:" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 0
2 barr_simple \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 4
3 prob3 \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True True 9 3
4 aeff events events False False True 2 3
5 hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | \"true_allsky_fine\": | events | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | events | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.pipelines[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
name value nominal_value range prior units is_fixed
nu_nubar_ratio 1 1 [0.7, 1.3] +/- 0.1 1 True
nue_numu_ratio 1 1 [0.5, 1.5] +/- 0.05 1 False
Barr_uphor_ratio 0 0 [-3.0, 3.0]+/- 1.0 1 False
Barr_nu_nubar_ratio 0 0 [-3.0, 3.0]+/- 1.0 1 False
delta_index 0 0 [-0.5, 0.5]+/- 0.1 1 False
" - ], - "text/plain": [ - " name | value | nominal_value | range | prior | units | is_fixed\n", - "---------------------+---------+-----------------+-------------+----------+---------+------------\n", - " nu_nubar_ratio | 1 | 1 | [0.7, 1.3] | +/- 0.1 | 1 | True\n", - " nue_numu_ratio | 1 | 1 | [0.5, 1.5] | +/- 0.05 | 1 | False\n", - " Barr_uphor_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | 1 | False\n", - " Barr_nu_nubar_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | 1 | False\n", - " delta_index | 0 | 0 | [-0.5, 0.5] | +/- 0.1 | 1 | False" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.pipelines[0].stages[2].params" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "While the muon pipleine is rather simple" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0csv_icc_hist \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 1
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+--------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_icc_hist | \"dragon_datarelease\": | \"dragon_datarelease\": | True | False | True | 0 | 1\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.pipelines[1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Retrieve Outputs\n", - "\n", - "We can get individual outputs from just a pipleine like so. This fetches outputs from the neutrino pipleine, which are 12 maps." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "maps = model.pipelines[0].get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['nue_cc',\n", - " 'numu_cc',\n", - " 'nutau_cc',\n", - " 'nue_nc',\n", - " 'numu_nc',\n", - " 'nutau_nc',\n", - " 'nuebar_cc',\n", - " 'numubar_cc',\n", - " 'nutaubar_cc',\n", - " 'nuebar_nc',\n", - " 'numubar_nc',\n", - " 'nutaubar_nc']" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "maps.names" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "axes = axes.flatten()\n", - "\n", - "for m, ax in zip(maps, axes):\n", - " m.plot(ax=ax)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are interested in just the total expecatation from the full model (all neutrinos + muons), we can do the following:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEgCAYAAACq+TSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dfZwdVZ3n8c+3O+k8QCCBhBADmICgPClPBgeZRQMijAo4OgqrDI6wGRV0HESBYVCHGVZddnTdhVVxRBFd0GFEAsIgT4riAwTlKchDTAJEAgmQhDxAnvq3f9RpUrn0vbe66/bt6u7vO6969a06dU6d26m+v1vnVJ2jiMDMzKyejsGugJmZVZsDhZmZNeRAYWZmDTlQmJlZQw4UZmbWkAOFmZk15EBhZmYNOVCYmVlDDhRtIum/Sbo3Ld25119ukGcXSe8vUPZRkq7oZfs4ST+X1Nkk/6/qbP+8pLNqts2Q9GBfy2qw/zGSHpG0QNI5aVuXpDskjepLWUOdz5G6+18maVm+zJF6jgwWB4o2iYhvRsQBwDuAJyPigLSc2SDbkcBBBYp/A3BfL9s/DPwoIjY3qdthBY5RSF/KSh9OlwDHAvsAJ0naJyI2ALcCTT8AhxOfI3V9BzimpowReY4MFgeK9tsPeCC/QdLr0rej+ZJukTRZ0uHAl4H3pm+VMyW9V9JvJN0n6ZeSpqQi3gDc28uxPgBcm44xQ9LDki6XdL+kqyWNT2lrcnU5L33DvwV4bZ33MKq3cvJlpeP9QdI30/v6qaRxNeXMAhZExML0h38VcHxK+3Gq/0jkcyQnIu4Anu/lGCP5HGkrB4r22x/IX0KPAf4D+LuI2Be4Gfj7iPglcDdwfPpWuQi4PSLeFBFvSPu9LxXzim+LkrqA3SNicW7za4FLI+L1wAvAx2ryHAycCBwI/CXwxjrvoWE5OXsCl6T3tRJ4T036dODJ3PqStA2y31G94w93PkeKGcnnSFs5ULRf7bfFE4BfRsTv0/pDwE7p9WuBR3L7fkjSXZLuI/vDe0nSaGC7iFhec5zJZH94eU9GxJ3p9feAw2vS/xy4JiLWRcQLwNw676FZOT0WRUTPt9h7gBk16eolTwCkppANkibUKXs48zlSwAg/R9rKgaL9tvq2SNY2/0BN+kOSdgRWRcRGAEl/TdZUMzt9W3wEmJ/y/6GX47wIjK3ZVjtUcG9DBxcZTrhIOQDrc683A7Udj0uAXXPruwBP5dbHAC8VqM9w43OkuJF6jrSVA0UbSeogu9R+OLf5T2R/yEjaHTgZ+C4wk60/NPcHfhURayS9BziM7MOj17bniFgBdErKfxDsJunP0uuTgF/WZLsDeHe6E2YC8K46b6VZOUXdDeyZ2ta7yJo05gKkD8HlPR+CI4XPkeJG6jkyGBwo2us1wJKIyH+LugJ4laQHyDpzPxwRz5F9UEyW9KCkw4DLgU9I+gWwF7AwItZS/24WgJ+y9SX/H4BTJN0P7AB8Lb9zRPwO+AHZh8p/AL+oU27DcoqKiE3AGcBNqcwfRsT8lPxW4Ib+lDvE+RypIelK4NfAayUtkXRqShqp50jbyRMXDV+SDgTOjIiTJc0Aro+I/Qa3VsVI+hFwbkQ80nRn6zefI1aEryiGsdT5ebuaPExVNakZ6sf+ABh4PkesCF9RmJlZQ76iMDOzhhwozMysIQcKMzNryIHCzMwacqAwM7OGHCjMzKyhSgUK9TJBSU26JP1vZZPc3C/poFzaKZIeS8sp7au1mdnwVqlAQS8TlNQ4lmwcnD2BOaRhASTtAHwOOJRsULTPSZo0oDU1MxshKhUoGkxQ0uN44LuR+Q0wUdI04O3AzRHxfBro7GYaBxwzMytoqM03W2+im0YT4GxF0hyyqxFGdY45ePttp/WrIi+NH92vfD2m7LCpVP4dxpYfcUElvyds7C43uvNz68u/hxfWli9j9eMLno2IKb2ljR0zIbYdN7lf5a4fV/7Pa9T4ciMnjO3qLnf8FnyVXN9wktXmXnyx3O+x88VyvwOAVcv/WPccKWp/7RirKTbQ7eOsLn28VhpqgaLeRDd1J8B5xcaIS4FLASZPnBnveMsF/arIowdO7Ve+Hn97Yu0cMn1z4mu2K5UfYGzntqXyL133aKn8VzxW7vgAt/xuYukybv7wOx+vl7btuMn09xxZtE//Akzejgesb75TA3vPWFfu+GPLD/GzaHVvf57F3X/fjqXyb/dAud8BwE++/pd1z5Gi1rCRf+qcVWjfD22+dXzzvdqnUk1PBdSb6KbZBDhmZoNL0NFZbKmaoRYo5gJ/ne5+ehPZ7F5LyeYzOFrSpNSJfXTaZmZWCQI6OlRoqZpKNT2lCUreQjYZyxKyO5lGA0TE18kmKfkLYAGwDviblPa8pH8mmzEN4IKIaNQpbmbWXoLOCl4tFFGpQBERJzVJD+D0OmmXAZcNRL3MzMqSYNSo6l0tFFGpQGFmNlwJ0dHpQGFmZvUIOoZar3DiQGFm1ia+ojAzs7ok6ByiVxRDtNpmZkOLBKNGq9DSvCxFL8t9ufSzJK1P21dIOiyXNkHSoylts6Rrmx3PgcLMrE1a9RxFRKhnAXZKm78JIGkv4CLgYmAi8BhbP1d2EzAVmAkcB7xT0nkN693H92lmZv2QPXBXbOmjC4FNwCVp/XxgdUR8KiJWAe8AtpV0bEo/FPhCRCyOiJ8Ad5LGv6vHgcLMrB2UdWYXWYAuSWtzyxUNSn4vcGd6zgxgP+CJnsSIWA6sB2ZLmkH2uX9dLv9dZFcYdbkz28ysDUSfOrM3RMQ2TcvMhjKaRHYV0WM8r5yuYUPar6eZakkubTlNYoEDhZlZO2hAHrj7Z7Ix736R27YOmFCzXxewAliW1qcDq9LryWRNV3W56cnMrA16hvAosvTBEcCParY9COy25biaAowBbouIxUA38K7c/rOAZxodxIHCzKxNWjnMeJqEbTRQe8fShcAESRdJ2p6sP2JNRNyY0u8CzpU0I3VwH06ao6duvYu/RTMz6y+p5cOMfxJYlKZaeFlEPAx8BvgEsBJ4HXBsbpejyZqgFgHXA9dHxIWNDuQ+CjOzNmnlpEQRsU+DtIvInqXoLW01sFdfjuVAYWbWBtkQHh7ryczM6klDeAxFDhRmZm3Q82T2UORAYWbWDgJ1RPP9KqhS8U3SMZIekbRA0jm9pH9F0r1peVTSylza5lza3PbW3MysOXUUW6qmMlcUkjrJBrV6G9nj5XdLmhsRD/XsExF/n9v/48CBuSJejIgD2lVfM7O+knxFUdYsYEFELIyIDcBVwPEN9j8JuLItNTMzK0kaulcUVarSdODJ3PqStO0VJL2abCz123Kbx0qaJ+k3kk6odxBJc9J+817asLoV9e6Xb1w1pVT+qxa80KKa9N+08X26FfsVTt5zTYtqUk0zH3p2sKvAHxaPL5X/uZeG5l06eS/sX+530Eqdo6LQUjWVaXoiuymgVr3f2InA1RGxObdtt4h4StLuwG2SHoiIP76iwIhLSY+rbzN9r3j44J37VdkPvHtZ850a+MRrdwB26Hf+7lvnZs9VltA9qtx/f8db3sm0rhn9zv+zZU8za0rDsciaemDaulL5m9nY1cmyXbfrV97l07ctffxXb1cumP75qzeUyv+GHcvlBzh0p3LBZu+J5QLujfdOgMNLPun29XLZAXdmt8gSYNfc+i7AU3X2PZGaZqeIeCr9XAj8jK37L8zMBpVw01Mr3A3sKWmmpC6yYPCKu5ckvZZsXPVf57ZNkjQmvZ4MvBl4qDavmdmg0YDNcDfgKtP0FBGbJJ1BNp9rJ3BZRMyXdAEwLyJ6gsZJwFW52ZwA9ga+IambLPh9MX+3lJnZ4Ishe9dTZQIFQETcANxQs+2zNeuf7yXfr4D9B7RyZmYlVbFZqYhKBQozs+FKgo4K3tFUhAOFmVk7CDqG6F1PDhRmZm3ipiczM6tLDN0hPBwozMzaQb6iMDOzJqo4PEcRDhRmZm0gxZAdwsOBwsysTYZq09MQrbaZ2dAjRaGleHn6qqT1kkLSRkmnp+1n5bavkHRYLs+ENPFbpAnfrm12HAcKM7M2UIvHepJ0NnA68DGy1qE3Ab+RtBdwEXAxMBF4jGxopB43AVPJpmo4DninpPMaHcuBwsysTdQRhZaCzgOuiIhvRcTmiLgnIu4BzgdWR8SnImIV8A5gW0nHpnyHAl+IiMUR8RPgTmBOowM5UJiZtYNAo1VoAbokrc0tV2xVlDQamADsLGmDpE2S7pc0CdgPeKJn34hYDqwHZkuaQfa5f12uuLvIrjDqcme2mVk7CNRReBKnDRGxTYP0/dLP/wK8EXgRmEcWAMYDz9eWRzY9w05pfUkubTlNYoGvKMzM2kLQ2VFsaW5F+vn9iLgvIh4FvgEcBKwju9rI60p5eqbmzE8zPRloONWkA4WZWTsI6FCxpYmIWAxspvfpoh8Ednv5sNIUYAxwW8rXDbwrt/8s4JlGx3OgMDNrE3Wq0FLQncAHJe2T+h7mkDU/XQhMkHSRpO3JmqPWRMSNKd9dwLmSZqQO7sOBSxsdyH0UZmbt0HNF0TrHkE0hPZ/sKuEB4F0RsUrSZ4B/Ac4CVgHH5vIdDdwDLEr5ro+ICxsdyIHCzKwNJKHRrWvEiYgX2dKpXZt2EdmzFL2lrQb26suxKtX0JOkYSY9IWiDpnF7SPyRpuaR703JaLu0USY+l5ZT21tzMrIDWdWa3VWWuKCR1ApcAbyO7detuSXMj4qGaXX8QEWfU5N0B+BxwCFnnzj0p7wrMzKqgb7fHVkqVQtcsYEFELIyIDcBVwPEF874duDkink/B4Way9jszs4oQdBZcKqZKgWI68GRufQlb3+vb4z3pCcSrJe3ax7xImiNpnqR5m9auakW9zcyaE0M2UFSm6Yns11ir9h7h64ArI2K9pI8AlwOzC+bNNkZcSroVbJd9d4/3HLest92a+tu9J/YrX48NX/t2qfx/umldqfwAO0xfXyr/dlN3LJV/n9fs1nynJl43dWPpMhrZPLaDVa8Z36+8u05bXfr4+0/bUCr/rJ3K/R+/ZrvtS+UHGNXRVSr/1HFPl8q/7KXyH7w/KV0CaQiPKn03L65KtV4C7Jpb3wV4Kr9DRDwXET1n/jeBg4vmNTMbXC0ePraNqlSju4E9Jc2U1AWcCMzN7yBpWm71OOAP6fVNwNGSJqVBsY5m62F1zcwGl1r+wF3bVKbpKSI2STqD7AO+E7gsIuZLugCYFxFzgU9IOo5sXJLngQ+lvM9L+meyYANwQUTUDoplZja4huhdT5UJFAARcQNwQ822z+ZenwucWyfvZcBlA1pBM7P+6unMHoIqFSjMzIYvDdnnKBwozMzaoQPo6hzsWvSLA4WZWRuIoftktgOFmVk7qJoP0xXhQGFm1i6+ojAzs7rScxRDkQOFmVm7VPCp6yIcKMzM2kGCUb7ryczMGvEVhZmZ1SW5M9vMzJoYolcUQ7PWZmZDUQuHGZe0UlLklg25tIslbUrbl0raPZe2u6SnUtomSRc3rXa/3qyZmfVNT2d2kaW4yyNCaenKDqPjgNOBTwI7A+uB23N5bicbgXtn4OPA6SlPXQ4UZmbtINo1cdHZwOMRcXFEPAP8DbCbpGmSpgC7AadFxDMR8TVgEXVG5e7hQGFm1hapM7vIAl2S1uaWK+oU+teSuiW9IOmTadvuwEM9O0REz9XEbODItO2nuTLmAzMb1dyd2WZm7VL8amFDRGzTZJ8zgRuBNcC/Al+RdB8wBlhRs283MAXYmF7nrQDGNjqQA4WZWTv0ND21SJqsrcccSe8GPkbWJzGxZvcOYDmwmVe2JE0EXmp0LAcKM7O2ENKAP0chYCGwz8sbpCPSy9vIOrGRdFRE3JK270vWT1FXpfooJB0j6RFJCySd00v6mZIeknS/pFslvTqXtlnSvWmZ296am5k1IWDUqGJLs6KkV0v6B0nbSxoj6RJgMvBvwJeAGZJOT53X3waeiIilEbEceAL4lqQpkj5C1qfxhUbHq8wVhaRO4BLgbcAS4G5JcyPiodxuvwcOiYh1kj4K/A/g/SntxYg4oK2VNjMrrKVPZo8DzgMuTOtrgHMi4j8BUuD4KnAx8DTw5lzetwJ3AsvImqIuiYiGX64rEyiAWcCCiFgIIOkq4Hh6770H+A3wwbbW0Mysv1rYRxERDwN1O7sj4gzgjDppC4FpfTlelZqepgNP5taXpG31nErW499jrKR5kn4j6YR6mSTNSfvNW7vihXI1NjPri+K3x1ZKla4oevvtRK87Sh8EDgGOyG3eLSKeSo+q3ybpgYj44ysKjLgUuBTgoIP3iI/u09Wvyo6++fp+5etx1zdfLJX/kfkNb1Io5KBDm91919g+Dy8ulX/7fd5YKj/AHhNWli6jkfHjN3HQIcv7lXdS/06trcyasqlU/j22m1Aq/zYra++y7IcN60pl33PHhrf4N/Vf93imVH6AC0qXAFnTU5W+mxdXpUCxBNg1t74L8FTtTpKOImubOyIi1vdsj4in0s+Fkn4GHAi8IlCYmQ0KMWTno6hSeLsb2FPSTEldwInAVh0skg4EvgEcFxHLctsnSRqTXk8m67jJd4KbmQ0uqV1DeLRcZa4oImKTpDOAm4BO4LKImC/pAmBe6pW/CNgW+Pd0P/ITEXEcsDfwDUndZMHvizV3S5mZDb4KBoEiKhMoACLiBuCGmm2fzb0+qk6+XwH7D2ztzMxKqmBHdRGVChRmZsOW3JltZmbNyIHCzMzqkaBzaH7kDs1am5kNRb6iMDOz+jSyAkWaX/WDZBNgXBkR17a0VmZmw9FIChTAOyPifQCSvgY4UJiZNdLiiYvaqb+BYpyk3dLrcgMGmZmNCCOs6Qn4OvDx9PrSFtXFzGwYE3QMzW7h/tb6hIj4NICk/w78snVVMjMbpkbYFcVUSXuQdWa/qoX1MTMbnkbgk9n/CJyeXn++NVUxMxveshmfh55+BYqIeAI4u8V1MTMbxoZuZ3a/ai3p7yR9M70+v7VVMjMbhkTWmV1kqZj+1mgPtsxvXW6uRTOzEWHo9lH0t9ZB9izFfrgz28ysGHUUW/pSpHSUpJC0MLftYkmb0valknbPpe0u6amUtknSxc2O0d9A8a9kF1InA//QzzLMzEYOaUACBXAV8MKWw+g4spuNPgnsDKwHbs/tfzuwKaV9HDg95amrz01PyuYgPSEizulrXjOzEa3FndmSvgq8CDwI9IyWcTbweERcnPb5G+A2SdPIAsRuwNsj4hnga5I+DZwLzK13nD7XOiICeKOkkyT9haS/6GsZ9Ug6RtIjkhZIekUgkjRG0g9S+m8lzcilnZu2PyLp7a2qk5lZy3R0FFugS9La3HJFbVGSpgMfBd5Tk7Q78FDPSkT0XE3MBo5M236a238+MLNRtfvbmX0L0AVMIeuvKE3ZDcaXAG8DlgB3S5obEQ/ldjsVWBERr5F0IvAl4P2S9gFOBPYl6zO5RdJeEbG5FXUzMytNfRrCY0NENBtH73rgloi4K2voedkYYEXNvt1kn9cb0+u8FcDYRgdqWuv0rf10sjudngfuBa6LiMeb5e2jWcCCiFiYjnsVcDy5yJjWP59eXw1cnJrCjgeuioj1wCJJC1J5v25xHc3M+ql1z1FIej+wN3B4L8nrgYk12zqA5cBmXtmSNBF4qdHxitT6WuBhtnzbfwNwh6RLJI0pkL+o6Wy55Rayq4rp9faJiE3AKmDHgnkBkDRH0jxJ85599oXedjEzGxit68w+kezK4QVJm4EjgJmS1gELgX1ePqR0RHp5G3Br2nZUrqx9gUWNDlbkOqgzIr6VCn8+Iv6bpFHA35ONHHtKkXdVgHrZVtusVW+fInmzjRGXkka8PeT1u8a2S5/sbbem1l7/WL/y9VjyeLlvFt3d5Vv8Ro3u7ddWnKbUfmnpm03d60vlB3hpgBsXtx0Nf7ZT/37XLfgvYuKYcm+wg5JDRmxYVy4/wAvlvpBF48+wpqZM3qFU/pYq9yeXdxrw2dz6ZcA04ChgL+BaSacDPwS+DTwREUsBJD0BfEvSIWT9G7uTfZ7XVSRQ3CLpjNSDHvDyt/mLJD3al3fWxBJg19z6LsBTdfZZkoLV9mTNYUXympkNquxeoJaU8xzwXM+6pLVk/RoPAw9LugT4KnAx8DTw5lz2twJ3AsvImqIuiYi6dzxBsaanM4HtJc0DXpWabj6YKvJck7x9cTewp6SZkrrILq1qKz+XLVcw7wVuS3dhzQVOTHdFzQT2BO5qYd3MzEoKgu5CS59LjnhLROyeWz8jIkZFhCJiWk/fb0pbmLYp7XNGs/KbXlFERDdwoaSvkF3WHEDW+fEAcF6f31H942ySdAZwE9AJXBYR8yVdAMxLEe9bwBWps/p5smBC2u+HZB3fm4DTfceTmVVJAN1D9GOpL7fHvgP4z4iYmwYCPBr4LfD7VlUmIm4AbqjZ9tnc65eAv6qT90LgwlbVxcys1aI1TxO0XV96VM+PiNWSDie7++lysilRzcysqSCiu9BSNX0JFD3XTO8Avh4R15I9dGdmZgVEwX9V05dA8SdJ3wDeB9yQnqEYmmPmmpkNgoHqzB5offmgfx9ZR/MxEbES2AH49IDUysxsmIkIumNzoaVqCndmR8Q6SX8E3p4G3ftFzcBSZmbWQBX7H4oofEUh6e+A7wM7peV7kj4+UBUzMxteivZQVK+Poi+3x54KHBoRawEkfYls0L3/MxAVMzMbbqrY/1BEXwKF2HLnE+l160YuMTMbxoLWDeHRbn0JFN8GfivpmrR+AtlAVGZm1lQM/yuKiPiypJ+RjX8u4G8iomVPZZuZDXdVvKOpiMKBQtLlwN9FxO/S+iRJl0XEhwesdmZmw0QwdIfw6EvT0+vT8xMARMQKSQcOQJ3MzIahGP63xwIdkib1rEjagf7PuW1mNuKMhNtj/xX4laSrya6i3odHazUzK2hkdGZ/N01eNJusM/svI+KhAauZmdlwEiPj9lhSYHBwMDPro5EycZGZmfXbCGh6MjOzcrqHZsuT55MwM2uHADaHCi1FSFooabOkkLRB0ndyaWdJWp/SVkg6LJc2QdKjKW2zpGubHasSgULSDpJulvRY+jmpl30OkPRrSfMl3S/p/bm070haJOnetBzQ3ndgZtZcdxRbCvokMDEiBBwPnCzpA5L2Ai4CLgYmAo+RzSXU4yZgKjATOA54p6TzGh2oEoECOAe4NSL2BG5N67XWAX8dEfsCxwD/S9LEXPqnI+KAtNw78FU2MysuQmzsLrYUKy/mRsTqntX08xDgfGB1RHwqIlaRTV+9raRj0z6HAl+IiMUR8RPgTmBOo2NVJVAcD1yeXl9ONuDgViLi0Yh4LL1+ClgGTGlbDc3MSsjuelKhBeiStDa3XNFbmZIelBTAjcB64IvAfsATLx83YnlKmy1pBtnn/nW5Yu4iu8KoqyqBYmpELAVIP3dqtLOkWUAX8Mfc5gtTk9RX0nze9fLOkTRP0rzlz69tRd375ZgPlrv7YcJ2nS2qSf898vnFpfKPu/OO1lSkojoqMAj/Yy+sbL5TA+t22qVFNRk8k559frCr8LI+ND1tiIhtcsvJvZUXEfuRfRZ+jOzK4AVgPLC6ZtcNwCS2fLYuyaUtp8mNTW2760nSLcDOvSQ1bBvrpZxpwBXAKbFl4JRzgafJfmGXAmcDF/SWPyIuTftwyN7Tgmee7cvhX7ZpY7kYe//PR7NTb7+NgnZ6Vfn/uhlHlrsFY8xH31Mq/wNshNUrSpUxf8W4Uvmb6RBMGN2/39PqjSodLJ5ZV+7/efo2G1lU4ne867bb8MKUht/bmho9dbdS+TfHxlL5f//sOnh+8J9fiKBwR3Xfyo2NwNcknUH22bgOmFCzWxewgqwlBmA6sCq9ngxsanSMtgWKiDiqXpqkZyRNi4ilKRAsq7PfdsBPgH+MiN/kyl6aXq6X9G3grBZW3cysJQb4KYpOYA/gQbLmfAAkTQHGALdFxGJJ3cC72PLw9CzgmUYFV6XpaS5wSnp9CvCK27UkdQHXAN+NiH+vSZuWfoqsf+PBAa2tmVkf9bGPoiFJ+0j6qqSpkkZL+gfgtcANZGPwTZB0kaTtyfoj1kTEjSn7XcC5kmakDu7DSa0s9VTlgbsvAj+UdCpZJ8xfAUg6BPhIRJxGNgjhfwF2lPShlO9D6Q6n76eoKeBe4CNtrr+ZWUMBhe9oKqCb7Ev1J9L6euCKiDgPQNJngH8ha11ZBRyby3s0cA+wKJVzfUQ0HOC1EoEiIp4Djuxl+zzgtPT6e8D36uSfPaAVNDNrgVY9mR0RD5M9I1Ev/SKyZyl6S1sN7NWX41UiUJiZDXsFm5WqyIHCzKwNsiE8BrsW/eNAYWbWJr6iMDOzurK7nga7Fv3jQGFm1gYRLb3rqa0cKMzM2sRXFGZmVlfPfBRDkQOFmVmb+IrCzMzqCvwchZmZNeDObDMza8pNT2ZmVpefzDYzs6YcKMzMrK4INz2ZmVkTvqIwM7O6uoENAzwX6kBxoDAzaxM3PZmZWV0RQ7fpqWOwKwAgaQdJN0t6LP2cVGe/zZLuTcvc3PaZkn6b8v9AUlf7am9mVszmKLZUTSUCBXAOcGtE7AncmtZ782JEHJCW43LbvwR8JeVfAZw6sNU1M+ubnvkoiixVU5VAcTxweXp9OXBC0YySBMwGru5PfjOzdgiyzuwiS9VUJVBMjYilAOnnTnX2GytpnqTfSOoJBjsCKyNiU1pfAkyvdyBJc1IZ85avXNeq+vfZ64/YWCr/sqc2Nd9pgK3/2n+Uyr8/o1tUk2qaMHrwvxr+aW253/GTa9a2qCaD58DJ4we7CpnIhhkvsjQjaYKkRyRtkhSS1kk6P5d+lqT1KW2FpMNq8j6a0jZLurbZ8drWmS3pFmDnXpLO60Mxu0XEU5J2B26T9ADwQi/71f0LjYhLgUsBDjloj9DrDuzD4bfY7qRyQWbjXY9z6B79z985eVyp4wN0HnlQqfzPT92JMh8j/76wE+gsVYfFS8eWyt/Mhs3w5Nr+DeS2ckP5AeBWbij3+xndAY+v6X8Z4zrh989uLlWHDd3lgk1nyV/jE2sFFfhS0uKpUMcCS8ma2X8NfBa4QNLtwDLgIuDLwMp8/E8AAA2rSURBVAXAzcBNwISU9yZgKjAT2BeYK+m8iLiw3sHaFigi4qh6aZKekTQtIpZKmkb2Rnsr46n0c6GknwEHAv8BTJQ0Kl1V7AI81fI3YGZWUqs6qiNiOfCW3KbPSfoMWTP+zsDqiPgUgKR3AMskHRsRNwKHAudFxGJgsaQ7gTlA3UBRlaanucAp6fUpwCsuhSRNkjQmvZ4MvBl4KCICuB14b6P8ZmaDqWdQwIJ3PXVJWptbrmhUtqR9ya4ybgP2A554+bhZUFkPzJY0g+xz/7pc9rvIrjDqqkqg+CLwNkmPAW9L60g6RNK/pX32BuZJuo8sMHwxIh5KaWcDZ0paQNZn8a221t7MrJmA7u5iC7AhIrbJLSfXK1bSOOAO4A/pimE8sLpmtw3AJLb0/y7JpS2nSetSJR64i4jngCN72T4POC29/hWwf538C4FZA1lHM7MyBmIID0mdwMPAZuDgtHkdW/ojenSRPTrQ06w/HViVXk8GGt4dU5UrCjOzYa+Vz1GkRwMeBrYDXhsRL6akB4HdcvtNAcYAt6V+iW7gXbmiZgHPNDqWA4WZWRv0sY+iiAfJOq5fFxErctsvBCZIukjS9mT9EWtSsxRkfRLnSpoh6VjgcNKdoPU4UJiZtUPBIFEkUKTnIvYBtgWeTs9EhKRLIuJh4DPAJ4CVwOuAY3PZjyZrgloEXA9c3+jWWKhIH4WZ2XDXyqlQU59t3SdMIuIismcpektbDezVl+M5UJiZtUkVx3EqwoHCzKwNImDj5vJP6w8GBwozszYIoNuBwszM6grR3e1AYWZmDThQmJlZXYEDhZmZNRABmzYOzUfXHCjMzNrBfRRmZtZMdwWnOS3CgcLMrA0ifHusmZk14aYnMzOrK8KBwszMGogQG33Xk5mZNTJUrygqEd4k7SDpZkmPpZ+TetnnrZLuzS0vSTohpX1H0qJc2gHtfxdmZvX1ND0VWaqmEoECOAe4NSL2BG5N61uJiNsj4oCIOACYTTYv7E9zu3y6Jz0i7m1Lrc3M+qB7swotVVOVQHE8cHl6fTlwQpP93wvcGBHrBrRWZmat4iuK0qZGxFKA9HOnJvufCFxZs+1CSfdL+oqkMfUySpojaZ6kecuffaFcrc3MCgqKBYkqBoq2dWZLuoVsIvBa5/WxnGnA/sBNuc3nAk8DXWSThJ8NXNBb/oi4NO3DPgfMiN+tX92Xw79s78Pf2q98PcYdWPJiSOVj/Opx5cq480/rS+W/Z3n59/CnJyaULqORjd3wp7X9+8OdOKb8dGbblPwLLTv15oMryn9oLX56bKn8L73YWSr/2jWjS+VvFY/1VEBEHFUvTdIzkqZFxNIUCJY1KOp9wDURsTFX9tL0cr2kbwNntaTSZmYtVMWrhSKqEt7mAqek16cA1zbY9yRqmp1ScEGSyPo3HhyAOpqZ9V8L+ygk/VDSWkkhaUFN2lmS1qe0FZIOy6VNkPRoStssqdFn7cuqEii+CLxN0mPA29I6kg6R9G89O0maAewK/Lwm//clPQA8AEwG/qUNdTYzKywodsdTwbueFgH/G5if3yhpL+Ai4GJgIvAYWzfT3wRMBWYCxwHvlNS0+b8SD9xFxHPAkb1snweclltfDEzvZb/ZA1k/M7PSWjiER0ScDSDpcGBaLul8YHVEfCqlvwNYJunYiLgROBQ4L32WLpZ0JzAHuLDR8apyRWFmNrxF0LGpu9ACdKWmpZ7lioJH2Q94YsshYzmwHpidWmQ6gOty+99FdoXRUCWuKMzMRgIVvw1tQ0Rs049DjAeery0LmMSWxw6W5NKWUyAOOFCYmbWBAjq6y98y3cQ6oPae8S5gBVvuJp0OrEqvJwObmhXqpiczszbp6I5CSwkPArv1rEiaAowBbkv9Et3Au3L7zwKeaVrvMjUyM7Pi1B2FlqblSGMkbQ90Ah2Stk8jUlwITJB0UUq/DliTOrIh65M4V9IMSccCh5MeQG7ETU9mZm2gCDrKPiq/xU3AEbn1lcDPI+Itkj5D9ojAWWRNTMfm9jsauIfs9tpu4PqIaHjHEzhQmJm1hQJGZXc0lRYRb2mQdhHZsxS9pa0G9urr8RwozMzapEizUhU5UJiZtUN77noaEA4UZmZtIFraR9FWDhRmZu3gKwozM2vGfRRmZlaXAkZtbM1dT+3mQGFm1hbFHqarIgcKM7M2yMZ68hWFmZk14M5sMzOrS4FvjzUzswYi6GzREB7tVonRYyX9laT5krolHdJgv2MkPSJpgaRzcttnSvqtpMck/UBSV3tqbmZWjGjLMOMDohKBgmwM9b8E7qi3g6RO4BKykRD3AU6StE9K/hLwlYjYk2yCjlMHtrpmZn2Ump6KLFVTiUAREX+IiEea7DYLWBARCyNiA3AVcLwkAbOBq9N+lwMnDFxtzcz6p1XzUbTbUOqjmA48mVtfAhwK7AisjIhNue3T6xUiaQ4wJ62uOXjKqc0CVF9MBp5tYXmt5LrV9+p6CU8/vOjZLxz6gcdbeKzBfq+NVLluMLj1q3uOFPX8ykXPfu+ak8cX3H1d2eO1UtsChaRbgJ17STovIq4tUkQv26LB9l5FxKUUmNGpPyTNi4i6fSyDyXXrn4iY0sryqvxeq1w3qH79mmn1udRObQsUEXFUySKWALvm1ncBniL7hjFR0qh0VdGz3czMWqASfRQF3Q3sme5w6gJOBOZGRAC3A+9N+50CFLlCMTOzAioRKCS9W9IS4M+An0i6KW1/laQbANLVwhlkc8X+AfhhRMxPRZwNnClpAVmfxbfa/R6SAWnSahHXrRqq/F6rXDeofv2GLWVfyM3MzHpXiSsKMzOrLgcKMzNryIGiBST9fRqC5EFJV0oaO8j1uUzSMkkP1mz/eBoCZb6k/zEI9Ror6S5J96U6/FPa/v1UrwdT3Ue3u27tUKXzpKrnSKrDiD5PqsiBoiRJ04FPAIdExH5AJ9kdWYPpO8Ax+Q2S3gocD7w+IvYF/ucg1Gs9MDsi3gAcABwj6U3A94HXAfsD44DTBqFuA6qC58l3qOY5AiP4PKkqB4rWGAWMkzQKGM8gP8cREXcAz9ds/ijwxYhYn/ZZNgj1iohYk1ZHpyUi4oaUFsBdZM/CDEeVOU+qeo6k447086RyHChKiog/kX3zegJYCqyKiJ8Obq16tRfw52mU3Z9LeuNgVEJSp6R7gWXAzRHx21zaaOBk4D8Ho24DaYicJ5U4R2DknidV5UBRkqRJZJfrM4FXAdtI+uDg1qpXo4BJwJuATwM/TAMqtlVEbI6IA8i+Dc6StF8u+f8Cd0TEL9pdr4E2RM6TSpwjMHLPk6pyoCjvKGBRRCyPiI3Aj4DDBrlOvVkC/Chdud8FdJMNsjYoImIl8DNSO7mkzwFTgDMHq04DbCicJ5U6R2BEnieV5EBR3hPAmySNT9++jiR7crxqfkw2HDuS9gK6aPNInJKmSJqYXo8j+/B8WNJpwNuBkyJiaE4B1txQOE8G/RxJxx7J50klDaVhxispIn4r6Wrgd8Am4PcM8lADkq4E3gJMTkOjfA64DLgs3Q65ATgl2v9Y/jTg8jQJVQfZMCzXS9oEPA78OrV0/CgiLmhz3QZU1c6TCp8jMILPk6ryEB5mZtaQm57MzKwhBwozM2vIgcLMzBpyoDAzs4YcKMzMrCEHCjMza8iBwszMGnKgqDBJfytpqaR7c8v+LSx/XBr8rTOtT5X0/yQtlHSPpF9LeneTMn4m6e012z4p6f9K6pJ0Rxot1QaAzxFrBweKans98I8RcUBueaCF5X+Y7OnWzWlYiR+TDba2e0QcTDZfQrOhnK/klfMqnAhcGREbgFuB97ewzrY1nyM24Bwoqm1/4N4BLP8DwLXp9WxgQ0R8vScxIh6PiP/Tsy7pg2nmsXslfSN9y7waeKekMWmfGWSjo/4yZftxOo4NDJ8jNuAcKKptX+DbuSaFOa0qWFIXsHtELM4d63cN9t+b7Fvfm9Pwz5uBD0TEc2STyPTMlnYi8IPcGEEPAoM2r8EI4HPEBpzbBStK0q7Asoh4fZ30jpIjaE4GVjY4/iXA4WTfIN9INtrpwcDdaUC2cWSTysCWpoVr088P95STmiw2SJoQEatL1Ndq+ByxdnGgqK7XAw/XbpT0IbJhl+dJugb4FCDgj8A1wL+Q/XFeAzwNfB54CbguIq7NFfUiMDa3Ph94T89KRJwuaTIwr+fQwOURcW4vdf0x8GVJBwHjIqL2W+eYVAdrLZ8j1hZueqqu/enlQyC5MSL+F/Axsj/m59L+pwMXRMSnIuKXwEeA8yPiNGCr2dQiYgXQKanng+A2YKykj+Z2G597fSvwXkk7AUjaQdKrU1lryCaXuYzsm+PLJO0I9EzWY63lc8TawoGiuvYHTs61Pf9e0rYpbVX62QF8PyI+HxGnkn2jyzc1COhpB+5tPPmfkjUdkNqLTwCOkLRI0l3A5cDZKf0h4B+Bn0q6H7iZbN6AHlcCbwCuqjnGW4Eb+vbWrSCfI9YWno9iiEnNCs+miVxeDfx3YCmwGvguWTPCUmAu2exk5wPrgP+MiGtqyjoQODMiTh7A+v4IODciHhmoY9jWfI5YqzlQjHCSPkzWrrx5AMruAk6MiO+2umxrH58j5kBhZmYNuY/CzMwacqAwM7OGHCjMzKwhBwozM2vIgcLMzBpyoDAzs4YcKMzMrKH/D9yYlZ97xliEAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "model.get_outputs(return_sum=True).plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diff plots\n", - "\n", - "Let's explore how a change in one of our nuisance parameters affects the expected counts per bin. Here we choose a *hole ice* parameter and move it a smidge." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "# reset all free parameters to put them back to nominal values\n", - "model.reset_free()\n", - "nominal = model.get_outputs(return_sum=True)\n", - "\n", - "# shift one parameter\n", - "model.params.opt_eff_lateral.value = 20\n", - "sys = model.get_outputs(return_sum=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaYAAAEgCAYAAAD/mNfGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3debxdVX338c/33uSGAAFCCBAmQwQHEAijOLSWQUDbAhUqoNCgINUCrdBa4bEOpY/Pg52sT4nUWBAEGSwKhEoFZCgqggQNs5QYppBIyIAMIcO99/f8sdeFw8k99+5z9rn77tzzfb9e+3X3sNY665zsnN/Za6+9liICMzOzquga7QqYmZnVcmAyM7NKcWAyM7NKcWAyM7NKcWAyM7NKcWAyM7NKcWAyM7NKcWAyM7NKcWAqiaRPSJqflv6a9X8eIs8Oko7LUfahki4bZP9ESf8tqXuY/Hc12P8lSX9Vt2+6pIeaLWuI9EdIekzSAknnpH09ku6UNK6ZsjZ0Pkcapr9Y0tLaMjv1HOkUDkwliYhvRsRM4PeBZyJiZlrOHiLbIcA+OYrfC7h/kP0fB74fEX3D1O3dOV4jl2bKSl+Gs4EPALsBJ0jaLSLWArcCw37hjiU+Rxq6BDiiroyOPEc6hQNT+d4BPFi7Q9Lb0q+/hyX9SNJWkt4L/DNwbPrVvLOkYyXdLel+ST+RNDUVsRcwf5DX+ihwfXqN6ZJ+JelSSQ9IukbSxunYyzV1+Vy6gvkR8NYG72HcYOXUlpVe71FJ30zv62ZJE+vKOQBYEBEL0xfNVcBR6dh1qf6dyOdIjYi4E1gxyGt08jkypjkwlW8PoLZJYgLwPeAvImJ34BbgrIj4CXAvcFT61fwEcHtEHBgRe6V0H07FrPdrWFIPMCMinqzZ/VZgTkTsCbwI/Fldnn2B44G9gQ8B+zd4D0OWU2NXYHZ6Xy8Ax9Qd3x54pmZ7UdoH2WfU6PXHOp8j+XTyOTKmOTCVr/7X8NHATyLil2n7EWDrtP5W4LGatCdL+rmk+8n+o6+WNB7YLCKer3udrcj+o9d6JiJ+mtYvB95bd/x3gGsjYlVEvAjMbfAehitnwBMRMfAr/T5get1xDZInAFLT0lpJkxqUPZb5HMmhw8+RMc2BqXxv+DVMdm/lwbrjj0iaAvw2ItYBSPoTsqavg9Ov4ceAh1P+Rwd5nVeBjer21Q8lP9jQ8nmGm89TDsCamvU+oP5G9SJgx5rtHYDFNdsTgNU56jPW+BzJr1PPkTHNgalEkrrImi5+VbP7WbIvDiTNAE4Cvg3szBu/pPcA7oqIlyUdA7yb7Mtq0HsHEbES6JZU+8Wzk6R3pfUTgJ/UZbsT+KPUU2sS8IcN3spw5eR1L7BrujfSQ9ZENBcgfek+P/Cl2yl8juTXqedIJ3BgKtcuwKKIqP2VeBmwnaQHyW7+fzwilpN9MW0l6SFJ7wYuBf5c0o+BtwALI+IVGve2AriZNzahPArMkvQAsCVwYW3iiPgFcDXZl9j3gB83KHfIcvKKiF7gDOCmVOZ3I+LhdPgg4MZWyt3A+RypI+lK4GfAWyUtknRKOtSp58iYJ08UOHZJ2hs4OyJOkjQd+M+IeMfo1iofSd8Hzo2Ix4ZNbC3zOWJV5CumMSzdLL9dwzw8WTWpWe86f+GMPJ8jVkW+YjIzs0rxFZOZmVWKA5OZmVWKA5OZmVWKA5OZmVWKA5OZmVWKA5OZmVVKpQKTBpkQrO64JP0/ZZPKPSBpn5pjsyQ9npZZ5dXazMzaqVKBiUEmBKvzAbJxxHYFTiMNcyJpS+CLwDvJBrH8oqTJI1pTMzMbEZUKTENMCDbgKODbkbkb2ELSNOBw4JaIWJEGpryFoQOcmZlVVLNDzI+2RhPLDTXh3BtIOo3saotxaN8tGN9SRaZuNqGlfK9XpFj2rvHFR5Dp7+0vlH/cRq19dgN6X11bKD9Az2YbD59oGPc/89yyiJg62LFJXd0xpau19zlpy/UmY21a7+reQvmL/htP2KL459s9vtjXTNHRaaJ3yFnjc3lgybKG50heO2pirCbfv8cy1hZ+vQ3ZhhaYGk0s13DCufV2RswB5gBM1YQ4hmktVeTU97y5pXwDunuKBZaNt960UH6AV5e/Uij/lLfvUCj/0vufLpQfYPrhMwuXsdWZ//hUo2NTusbz+c2mt1Tu7x5TfCzUZY/Vz+3XnNUri01VtOuRexbKD7DJtlMK5e9bV2xWizUrXx4+0TB2+NKchudI7nrQz4eV7/vm6/FU8V8EG7BKNeXl0GhiueEmnDMzG1UCuqVcS6fb0ALTXOBPUu+8A8lm71xCNp/PYZImp04Ph6V9ZmaV0a18S6erVFNemhDs98gmP1tE1tNuPEBE/BvZpGAfBBYAq4CPpWMrJP0d2YyoAOdFxFCdKMzMSjVwxWTDq1RgiogThjkewOkNjl0MXDwS9TIzK0qCni4HpjwqFZjMzMaq7IpptGuxYXBgMjMrhTs25OXAZGZWArHh9TYbLQ5MZmYl8RVTPg5MZmYlcOeH/ByYzMxK4M4P+TkwmZmVwM8x5efAZGZWEl8x5ePAZGZWAslXTHk5MJmZlcRXTPk4MJmZlaALuVdeTg5MZmYl8RVTPg5MZmYl8D2m/ByYzMxK4OeY8nNgMjMria+Y8nFgMjMrgfCQRHk5MJmZlUCCLl8x5eLAZGZWCiHfZMqlUtODSDpC0mOSFkg6Z5DjX5U0Py3/I+mFmmN9NcfmlltzM7NhCLq6lWvJVZw0Q9JiSSGpV9IFDdJJ0t2S+tNyj7T+pZukOamsS4q90eIqc8UkqRuYDbwfWATcK2luRDwykCYizqpJfyawd00Rr0bEzLLqa2bWDAHqbuu1wO1AL7At8CHg65Jujoj6H+aXAfsABwAB3AVcDnz0tbpJ04FZwJp2VrBVVbpiOgBYEBELI2ItcBVw1BDpTwCuLKVmZmZFCdStXMuwRUlTgZ2AUyPiuYi4EHgCOHeQ5EcCV0fEvIi4D7gi7av1A+BaYHWRt9guVQpM2wPP1GwvSvvWI+lNwM7AbTW7N5I0L12yHt3oRSSdltLNW01fO+rdkr61xV571dKX21ST1i1/dFGh/FvvtVObalJNd1790GhXgY0mb1Qo/+NzH2hTTUbPhMmbjnYVMhLd47tzLUCPpFdqlsvqSjsEICJurtn3MNn3Yr1JZFdXA24DXvtQJJ0MTKfmCmq0VaYpj+xKt140SHs8cE1E1H677xQRiyXNAG6T9GBE/Hq9AiPmAHMA9tp+6/jCpz7QUmU3f/OgMTO3V559vlD+vnW9hfIDjJu4vFD+KbvPKJT/hV8/y5TdtitUxqrfrCiUfzhbvmkrTjj/4y3l/e2Cpwq//mY7TyuUf9zGxQJTfxvOs43fuluh/BrfUyh/905vL5QfgC/NKVyE0j2mnNZGxCZDHJ8C9NftWwk0+gdfUr+e7jONI7uF8umI6Bvk1tOoqNIV0yJgx5rtHYDFDdIeT10zXkQsTn8XAnfwxvtPZmajrl1NecBy1v/+3oLGTXHb1K9HRJA16z0bEd9s8q2MqCoFpnuBXSXtLKmHLPis17tO0luBycDPavZNljQhrW8FvAd4pD6vmdmokVB3V64lh1uzInVozb7dye4z1XsJOLhm+xBg4F7Ae4FdUq/mPmBzYJakUW3DrUxTXkT0SjoDuAnoBi6OiIclnQfMq+lpcgJwVYr2A94OfENSP1mwPb+2N5+Z2WgTTTXlDSkinpf0NHCRpP2AY4AZwFmDJL8BOE7S18ia/z4CfC8dOxDYrCbtT8nuR53Rloq2qDKBCSAibgRurNv3hbrtLw2S7y5gjxGtnJlZEQK1d0iig8gCyVKgD5gdEXMlnQ5cEBEDL3YisAtZqxTp74kAEfGGG6Hpx/3KiKjtiFa6SgUmM7MxS6K7p7ttxaX76ev1jomI2WQdGga2A3hnzjK3aFsFC3BgMjMrgdJzTDY8ByYzs5J0tXfkhzHLgcnMrAzyIK55OTCZmZVAQJfnY8rFgcnMrAyirZ0fxjIHJjOzMrgpLzcHJjOzEmS98tz5IQ8HJjOzkrRr5IexzoHJzKwM7R/5YcxyYDIzK4GQn2PKyYHJzKwMXdDlXnm5ODCZmZVCqMtXTHk4MJmZlSCbwdaBKQ8HJjOzUsjdxXNyYDIzK4OfY8rNgcnMrBS+x5SXA5OZWQkk0dUzfrSrsUGoVPiWdISkxyQtkHTOIMdPlvS8pPlpObXm2CxJj6dlVrk1NzMbhqCrqyvX0ukqc8UkqZtsOuD3A4uAeyXNjYhH6pJeHRFn1OXdEvgisB8QwH0p78oSqm5mlovvMeVTpU/pAGBBRCyMiLXAVcBROfMeDtwSEStSMLoFOGKE6mlm1jxlvfLyLJ2uSp/A9sAzNduL0r56x0h6QNI1knZsMi+STpM0T9K85a+82o56m5kNS4C6unItna4yTXlk/271om77BuDKiFgj6ZPApcDBOfNmOyPmAHMA9n3Lm2LL/fZurbZdxYYW2XzqoHEzt/5VLxXKD7DF7gUL6O8rlH3rzScVrAC8snhp4TKG0rXJ5kw48AMt5d1mn+I/fHp/82Sh/F0bb1asAlN3HD7NMLRuTcECCn5RV+WLvkt09VTpK7e6KvIvBmRXObX/C3YAFtcmiIjlETFwln8T2DdvXjOz0dbV3ZVr6XRV+gTuBXaVtLOkHuB4YG5tAknTajaPBB5N6zcBh0maLGkycFjaZ2ZWCZLclJdTZa4rI6JX0hlkAaUbuDgiHpZ0HjAvIuYCfy7pSKAXWAGcnPKukPR3ZMEN4LyIWFH6mzAzG4I7NuRTmcAEEBE3AjfW7ftCzfq5wLkN8l4MXDyiFTQza5U8Vl5elQpMZmZjmZvp8nFgMjMrgSS6PSRRLg5MZmZl8OjiuTkwmZmVwqOL5+XAZGZWAvmKKTd/SmZmZWjzWHmSZkhaLCkk9Uq6oEE6SbpbUn9a7pGkdOwwSUtqji2TNOrjjDowmZmVpM0P2N5O9kzntsCZwOnpOc96lwH7kA2UvT8wE7g8HdsO+CGwC7AJ8Ahwfavvr10cmMzMyiChcT25luGL0lRgJ+DUiHguIi4EnmDw5zyPJJsuaF5E3AdckfYREZdExMfSrA6vkg1a0CNpl/a86dY4MJmZlULZgLJ5liw4vFKzXFZX2CEAEXFzzb6HgZ0HeeFJZFdXA24DNm1QyU8A/RGxoKW32Cbu/GBmVgaBunPPSrA2IjYZ4vgUoL9u30pgowbpl9SvS1JEvDYLg6T9gL8Gvp63kiPFgcnMrBQqPF1OjeWs3+K1BbC6Qfpt6tfrgtLbgJ8Ct0bEme2qZKvclGdmVgaRBaY8y/BuBZB0aM2+3cnuM9V7iWzeugGHAC+/Vi1pOvAL4BcRcVhT72mE+IrJzKwEktC49gxJFBHPS3oauCg1wR0DzADOGiT5DcBxkr5G1vz3EeB7qU7bAw8BCyLiXW2pXBv4isnMrBRq5xUTwEFAD7AUuACYHRFzJZ0uqXYG7xOB+WTTAt0H3J/2AXyRrJv4Hul5qIHlwDa84Zb5isnMrCTtHJIoIhYC0wbZPxuYXbMdwDsblHEacFrbKtUmDkxmZmVQWzs/jGluyjMzK0Xbm/IqS9Lukh6T9Hza/kNJ38qb34HJzKwM6TmmPMsYcAfZbOQDD/LeDJyQN3OlApOkI1KUXSDpnEGOny3pEUkPSLpV0ptqjvVJmp+WueXW3MxsGBKMG59v2fBtHBFnAQEQEWsG1vOozD0mSd1kN+zeDywC7pU0NyIeqUn2S2C/iFgl6VPA3wPHpWOvRsTMUittZpab0BhopstpXe14e5JOAdbkzVyZwEQ28u2C1NMESVcBR5GNdgtARNSO93Q3r3d5NDOrvs6ZKPDPyB7anSjpRbKhknI35VUpMG0PPFOzvYgGXRyTU4D/qtneSNI8smHgz4+I6wbLJOm17pE7br1loQqbmeWmzrliiogrJH0POJzsltFNafTyXKoUmDTIvkHbJCWdCOwHvK9m904RsVjSDOA2SQ9GxK/XKzBiDjAHYN+Ze0b3Pq2NwNG36dSW8g3oXvFkofzj1uW+Km6of+LmhfJHz8SCFagfg7J5W/x6XuEy4F8aHonu8fRN2qbh8aH0T5jUaoVeo6nFZh94UY3G9Mynp3uw/5bNyX1joYEJq1cWyr+iu9h53j6d011c0tXAX0fE3LQ9XdL5EXF8nvxVCkyLgB1rtncAFtcnSmNDfQ54X7qhBkBELE5/F0q6A9gbWC8wmZmNBklo/Jjo2JDHkRExcP+fiHiywSSGg6pSg+e9wK6SdpbUAxwPvKF3naS9gW+QvemlNfsnS5qQ1rcC3kPNvSkzs1HX3kFcK29g+va0Pp4m4k1lrpgiolfSGcBNQDdwcUQ8LOk8YF66JPwHsn7x/5He89MRcSTwduAbkvrJ3vz5db35zMxGWec05QEPAk/XDBx7FtlgsblUJjABRMSNZA9l1e77Qs36oetlyvbfBewxsrUzMyumnWPlVdy7gMuAT5NdK94OfCxv5koFJjOzMauDxsqLiD6y6TVa0jHh28xs1Kkr37KBk/RJScslrZW0bmDJm99XTGZmpRDR1TFfuV8D/jfZhIRrm83cMZ+SmdmoEmPiaiindRHxd61mdmAyMyuFsvtMneFBST8Hvgm8MrAzIq7Ik7mlwJQelDqRrBvglRFxfSvlmJl1lM7plfe29Pfva/YFMHKBCfiDiPgwgKQLAQcmM7MhBBAd0pQXEZOL5G/1U5ooaSdJOwGbFKmAmVlHkDqpV96ozGD7b8CZaZnTYhlmZh1E0DUu37Lhu4NRmMH26Ij4TER8Bvhgi2WYmXWUUFeuZQwYlRlst5H0ZrLOD9u1WIaZWWcZG0Enj1GZwfZvgNPT+pdaLMPMrHOoo7qLlz+DbUQ8DXy2lbxmZh2rA66YJHWT3VuaSosz2Lb0KUn6C0nfTOufb6UMM7POIqJ7XK5lQ5YGcP2niFgTEXMj4rpmghK03vnhzcAzab34/NFmZmPdwJBEHdBdHLhP0j/UThbYjFY/gSBrO3wH7vxgZpZD5zzHBLwP+CugX1IMLHkzt/oJ/BNZ/D8J+F8tlmFm1lk6JDBFhAZb8uZvujEzXZodHRHnNJvXzKyTjZFnlIaV4sRs4C0RcaikA4DdIuKSPPmb/pQiIoD9JZ0g6YOS2vaAraQj0jAWCyStF/gkTZB0dTp+j6TpNcfOTfsfk3R4u+pkZtYWbR6SSNIMSYtTM1mvpAsapJOkuyX1p+We2ns/ko6T9Eoq5xVJx7Xh3T4I/E5aAJaSBapcWg3fPwJ6yLoDbtViGW+QuhjOBj4A7AacIGm3umSnACsjYhfgq8BXUt7dgOOB3YEjgK+n8szMKiJNrZ5nyed2oBfYlmx4uNPTzA/1LgP2AQ4A9gdmApcDSNoE+A5wC7AZ8F/Ad9L+ImZExB5AH0BEPEkT8WbYprx0VXI6WU+8FcB84IaIeKr5ug7pAGBBRCxMr3sVcBTwSE2ao3j9gd5rgAtS5D8KuCoNe/GEpAWpvJ+1uY5mZi1rV1OepKnATsDhEfEccKGkzwDnAnPrkh8JXB0R81LeK4Bj07EzyfoL/FFqDTtWUi/waeDLBarYL2l8TX3fRhNDEuX5lK4HfkV2NfN+YC/gTkmzJU1osrJD2Z7Xu6ADLEr7Bk0TEb3Ab4EpOfMCIOk0SfMkzVu2fHmbqm5mlkP+prye1Kw2sFxWV9IhABFxc82+h4GdB3nVSWRXVwNu4/XBVQ8EVqSgNGA58M4C7xLgUrLv5B5JPwEeAC7MmzlP54fuiLgIQNKKiPiEpHHAWWQji89qvs6DGqzHRn2EbZQmT95sZ8Qc0ojo++yzT6zZdJtm6viatX25g//g+SdNL5R/0/HFf3n19hd7DwWz5//5NIS+t72/DaU0FupiTU9rj+r1FTxHAJ5+uViL9LJVrwyfaAhF/40Bdtis2O/XtX3FWpWmTCyUvW1CIvI/1rM2IoZ641PIxiqttZJs6J/BLKlfT61NmwKr6tKuImvWa5qk34mIH0fE6ZL+EziZ16/IfpC3nDyB6UeSzoiIC3h9pNhe4B8k/U8LdW9kEbBjzfYOwOIGaRal4Lg5WfNinrxmZqMnINrxayyznPVbvLYAVjdIv039ekSEpJeB+tA9EXixxXr9ENgkXcRsSXbPqml5fnafDWwuaR6wXWoKO1HSbLIPp13uBXaVtLOkHrLODPVtpXN5/QrtWOC2dAk6Fzg+9drbGdgV+Hkb62ZmVlDQH/mWHG4FkHRozb7dgScGSfsScHDN9iHAy2n9bmDLuhEatgLuyfuu6kjSbcBmkq6vX/IWMmxgioj+iPgy8LvAaWQ9QPYh6w74gRYrP9jr9AJnADcBjwLfjYiHJZ1X09PkImBK6txwNnBOyvsw8F2yjhI/BE5P4zWZmVVCAH2Rbxm2rIjngaeBiyRNlfRJYAbwfwdJfgNwnKR9Je0NfITXf/T/a/p7jaRJkr6btv+lxbf5IbKrNpHd26pfcmnmAdvfB34YEXPTwK2HkUXVXzZRxpAi4kayWQ9r932hZn018McN8n6ZYr1IzMxGVLSxLQ84CPgp2TNCfcDs9P18OnBBzUgLJwK7kLVKkf6emOrziqQTyX70vwi8CpwYEa3enPxERHxQ0q0RcUiLZTQVmD4fEf8h6b1kvfP+iWyK9aK9N8zMxrygPZ1JXisve7Rm2iD7Z1PzMGu63dHwezoirgKualO1BgZceFeRQprp2jXQNPb7wL9FxPVkD9mamVkOkXPZgC1Nz0FNlPRqzbJaUu6pL5q5YnpW0jeAQ4GvpGeYOmPgJzOzoqK9V0xVFBFvkrQHWeezUpryPkw23M8/RsQLkqYBn2n1hc3MOknW+WGMRyYgIh5k/S7oTckdmCJilaRfA4enQVJ/XPfUsZmZDWGsxyVJz0TEjpJW88ZWSZHd7soVsHIHJkl/AXwC+H7adbmkORHxr0NkMzOzZKw35QF/kP4ePGSqYTTTlHcK8M6BboSSvkI2SKoDk5nZMCLa3l28ciLi/vT3riLlNBOYxOs980jrLc3nbmbWieoHtxtrNMz06XlnsW0mMH0LuEfStWn7aODiJvKbmXW0MX7B9FrgkfTfZIPFnkXWe/sfyMY2zaWZzg//LOkO4L1kV0ofi4i2jfpgZjaWdUqvvGTfiNi0ZvsjacDYXHI/hyTpUmBhRPy/iPga8KQkXzGZmeXUH/mWMaA/zdk3XlJ3GvQ7d0tmMw/I7hkRLwxsRMRKYO8m8puZdbSIfMsY8EGyAV3XAOvS+geHzFGjmXtMXZImp4CEpC2bzG9m1rGCoH9DH3Aop4j4CYOM45dXM4Hln4C7JF1D1lz6YTyat5lZPmPnamjENdP54dtpssCDyTo/fCgiHhmxmpmZjTFj5P7RiGuqKS4FIgcjM7MmdVivvEI8OriZWUk6qPPDeiR9JG9aByYzsxJkEwVGrmWM+sLwSTLuVWdmVoaAvrE+JtEQIuJtedNWIjClrudXA9OBJ4EPD3RLr0kzE7gQ2IxsnL4vR8TV6dglwPuA36bkJ0fE/DLqbmaWx8AV01g2XHNdRFyRp5xKBCbgHODWiDhf0jlp+7N1aVYBfxIRj0vaDrhP0k01D/1+JiKuKbHOZma5BcG6/jF/yTR7iGMBbFCB6Sjg99L6pcAd1AWmiPifmvXFkpYCU4EXMDOrug5oyouIye0opyqdH7aJiCUA6e/WQyWWdADQA/y6ZveXJT0g6auSJgyR9zRJ8yTNW7ZsWTvq3pKermIzhry8bvTP8IJvYczPmdJd9ANqg6027imUvwJvobDlr/aOdhWAzur8IGmKpFskPZq2D5X0t3nzl3bFJOlHwLaDHPpck+VMAy4DZkXEwLfzucBvyILVHLKrrfMGyx8Rc1Ia9py5T7ywum+wZMP67ZrRDQyre4u//uSJ3YXy/+bltYXyT5pQ/PTrG+EnFtf2B4tfXtdS3lfb8OPhiZWvFspf9Etuwrhi5wjAghXF3kN3weC48+SJvLS2tf/n7dZBzzH9EngQ2Dlt3wfcAHwxT+bSAlNEHNromKTnJE2LiCUp8CxtkG4z4AfA30TE3TVlL0mrayR9C/irNlbdzKyw7IpptGtRmikR8fuSVkE26LeU/xdGVZry5gKz0vos4Pr6BJJ6gGuBb0fEf9Qdm5b+imwCw4dGtLZmZs2K7Ao/zzIG9El67X6TpIN44wzoQ6pK54fzge9KOgV4GvhjAEn7AZ+MiFPJBo39XWCKpJNTvoFu4d+RNJXstsV84JMl19/MbEhZr7wxEXTy+DLwBLCRpCeAHWmiJasSgSkilgOHDLJ/HnBqWr8cuLxB/oNHtIJmZgV1wnNM8FrL1e3A94ATyS4YvlPbs3o4lQhMZmZjXox8Z50qiIiQdHtEbAJ8qZUyqnKPycxsTOuk7uLAQkmzhk82OAcmM7OS9EW+ZQx4C3CJpHWSXpW0WlLu5wbclGdmVoJOuceUHFQks6+YzMxKEBGs68u3tIOkGZIWSwpJvZIuGCKtJN0tqT8t96RODEg6TNKSmmPLJB0xzHu9a7Alb90dmMzMSlLyPabbgV6yEXfOBE6XdGSDtJcB+wAHAPsDM3m9F/R2wA+BXYBNyGYxX+9Z03ZyYDIzK8HA1Op5lqLSc507AadGxHMRcSHZc0XnNshyJHB1RMyLiPvIRgE/EiAiLomIj0XEwoh4FTgZ6JG0S+GKNuDAZGZWhoD+/si1kH3xv1KzXNbkqx0CEBE31+x7mNfHrqs3iewKa8BtwKYN0n4C6I+IBU3WKTd3fjAzK0F2xZQ7+dr0HFCrpgD1owivBDYaIs+S+nVJinj9Ei6NxvPXwNcL1G1YDkxmZiVo50SBkl4ANm9w+EXgT1m/RWwLYPUQxW5Tv14XlN4G/JRsUtczm61zM9yUZ2ZWhjYO4hoRW0SEGiybA7dCNg9STbbdye4zDeYloHZot0OAlwc2JE0HfgH8IiIOa+Ztt8JXTGZmJQjKG5IoIp6X9DRwUWp+OwaYAZzVIMsNwHGSvkbWBPgRsrHukLQ92YwNCyLiXSNeeRyYzMxKEeWPlXcQWdPbUrIpJ2ZHxFwASacDF0TEwCRJJ5J1B783bab0TH4AAA6vSURBVN+b9kE2ud8mwB6Sat/Au2rnxWsnByYzs5KUGZgiYiEwrcGx2cDsmu0A3tkg7WnAaSNRx0YcmMzMShCMmUkAR5wDk5lZCSJgbW97euWNdQ5MZmYlGIV7TBssByYzs5I4MOVTieeYJG0p6RZJj6e/kxuk65M0Py1za/bvnEbDfVzS1ZJ6yqu9mdnwBu4xteM5prGuEoEJOIfsaeJdyR4MO6dBulcjYmZaakfJ/Qrw1ZR/JXDKyFbXzKw5EdDbH7mWTleVwHQUcGlavxQ4Om/GNGfIwcA1reQ3MyvDQOeHPEunq0pg2iYilgCkv1s3SLeRpHlpQquB4DMFeCEietP2ImD7Ri8k6bRUxrwVy5e1q/6l22jc6P/TbbtpsRbTl9b0Dp9oAzZx/Oj/G3VJwycawprevjbVZPQ8sTL3jN4jrqxpLzZ0pXV+kPQjsgmr6n2uiWJ2iojFkmYAt0l6kGzAwnoN/2UjYg4wB+DNu+8V9zw7WPbhPfVCsZO9aDvytpOGGiQ4n5fXFgsMu04pMvgxXPfAkuETDeNT755euIyhrOsLnn1xTUt5//2uJwu//kkH7FQo/7JV6wrlX7WuDyhWRtEfUUW/qLfauIf/Wb6qUBnt4OeY8istMEXEoY2OSXpO0rSIWCJpGtkQGoOVsTj9XSjpDmBvsvGctpA0Ll017QAsbvsbMDMrwN3F8xv9tobMXGBWWp/FINP2SposaUJa3wp4D/BIGkrjduDYofKbmY0298rLpyqB6Xzg/ZIeB96ftpG0n6R/T2neDsyTdD9ZIDo/Ih5Jxz4LnC1pAdk9p4tKrb2Z2TCy0cX7cy2drhIP2EbEctJUwHX75wGnpvW7gD0a5F8IHDCSdTQzKyIi3OMup0oEJjOzsW7gOSYbngOTmVkJypwocEPnwGRmVgb3ysvNgcnMrAR+jik/ByYzs5I4MOXjwGRmVoII6HWvvFwcmMzMShAB/b5iysWBycysFEF4gNZcHJjMzEoSvmLKxYHJzKwMbsrLzYHJzKwEAfT3OTDl4cBkZlYGXzHl5sBkZlaK8D2mnByYzMxKELjzQ14OTGZmZQjod3fxXByYzMxK4iumfByYzMxKEBH0eUiiXByYzMxK4pEf8uka7QoASNpS0i2SHk9/Jw+S5iBJ82uW1ZKOTscukfREzbGZ5b8LM7OhRX++pR0kzZC0WFJI6pV0wRBpJeluSf1puUeSBkk3J5V3SXtqObhKBCbgHODWiNgVuDVtv0FE3B4RMyNiJnAwsAq4uSbJZwaOR8T8UmptZpbTwCCueZY2uR3oBbYFzgROl3Rkg7SXAfsABwD7AzOBy2sTSJoOzALWtKuCjVQlMB0FXJrWLwWOHib9scB/RcSqEa2VmVkbRX/kWoqSNBXYCTg1Ip6LiAuBJ4BzG2Q5Erg6IuZFxH3AFWlfrR8A1wKrC1dwGFUJTNtExBKA9HfrYdIfD1xZt+/Lkh6Q9FVJExpllHSapHmS5r24cnmxWpuZ5RVNBaYeSa/ULJc1+WqHAEREbavSw8DODdJPIrvCGnAbsOnAhqSTgenAR5usR0tK6/wg6Udkl5T1PtdkOdOAPYCbanafC/wG6AHmAJ8Fzhssf0TMSWmYMmO3uO7+xc28/Gt2337zlvINWPj8K4XyL3lhxH+0DOtXS14qlH/h8y8XrsPpV/2ycBlDWfbKWr5191Mt5f3c+99a+PVvf7LYj6etN2n4Gy2XR5a8WCg/wG7TNiuUf+tNegrlnzap2GfQLkHQ15f7BtLaiNikwMtNAepfbCWw0RB5ltSvp/tM44DZwKcjom+QW09tV1pgiohDGx2T9JykaRGxJAWepUMU9WHg2ohYV1P2wAe6RtK3gL9qS6XNzNol2vcck6QXgEa/jl8E/pT1W8S2YOhmuG3q1yMiJF0BPBsR32yxuk2rSlPeXLKbaqS/1w+R9gTqmvFSMBuI7kcDD41AHc3MCmlX54eI2CIi1GDZnKwTGZJqLwh2J7vPNJiXyDqVDTgEGGjSeC+wi6Q+SX1kAXGWpAeae/f5VeU5pvOB70o6BXga+GMASfsBn4yIU9P2dGBH4L/r8n8n3ewTMB/4ZDnVNjPLr6znmCLieUlPAxel79FjgBnAWQ2y3AAcJ+lrZE2AHwG+l44dCNS2x/6U7H7UGSNRd6hIYIqI5aSbdXX75wGn1mw/CWw/SLqD6/eZmVVJROmjix9EFkSWAn3A7IiYCyDpdOCCiBi4YXQisAtwb9q+N+0jIt5wk1VSP7AyIp4ZqYpXIjCZmXWCvt7e0l4rIhYC0xocm03WoWFgO4B35ix3i7ZUcAgOTGZmZYgg+vtGuxYbBAcmM7MSBA5MeTkwmZmVISD6HJjycGAyMyuFr5jycmAyMyuD7zHl5sBkZlaCIOjvXTva1dggODCZmZUh8BVTTg5MZmalCPodmHJxYDIzK4PvMeXmwGRmVoLATXl5OTCZmZUhws8x5eTAZGZWhnCvvLwcmMzMSuF7THk5MJmZlSC7x5R7avWO5sBkZlYG98rLzYHJzKwkDkz5ODCZmZUgIuhb584PeXSNdgUAJP2xpIcl9af56RulO0LSY5IWSDqnZv/Oku6R9LikqyX1lFNzM7OcUlNenqXTVSIwAQ8BHwLubJRAUjfZVMAfAHYDTpC0Wzr8FeCrEbErsBI4ZWSra2bWLAemvCoRmCLi0Yh4bJhkBwALImJhRKwFrgKOkiTgYOCalO5S4OiRq62ZWWscmPLZkO4xbQ88U7O9CHgnMAV4ISJ6a/Zv36gQSacBp6XNly8/af/hAmIztgKWtbG8dnLdGntTowMrnnh02eUn7f9UK4VePvju0X6vQ6ly3WB069fwHMkrVi1btvYX/75xzuSrir7ehqy0wCTpR8C2gxz6XERcn6eIQfbFEPsHFRFzgDk5Xq9pkuZFRMN7ZKPJdWtNRExtZ3lVfq9VrhtUv37Dafe5NJaVFpgi4tCCRSwCdqzZ3gFYTPYLagtJ49JV08B+MzPbAFXiHlNO9wK7ph54PcDxwNyICOB24NiUbhaQ5wrMzMwqqBKBSdIfSVoEvAv4gaSb0v7tJN0IkK6GzgBuAh4FvhsRD6ciPgucLWkB2T2ni8p+D8mINBG2ietWDVV+r1WuG1S/ftYmyi44zMzMqqESV0xmZmYDHJjMzKxSHJjaQNJZaUilhyRdKWmjUa7PxZKWSnqobv+ZaUinhyX9/SjUayNJP5d0f6rD36b930n1eijVfXzZdStDlc6Tqp4jqQ4dfZ6YA1NhkrYH/hzYLyLeAXST9RgcTZcAR9TukHQQcBSwZ0TsDvzjKNRrDXBwROwFzASOkHQg8B3gbcAewETg1FGo24iq4HlyCdU8R6CDzxPLODC1xzhgoqRxwMaM8nNUEXEnsKJu96eA8yNiTUqzdBTqFRHxctocn5aIiBvTsQB+TvYs2lhUmfOkqudIet1OP086ngNTQRHxLNkvy6eBJcBvI+Lm0a3VoN4C/E4ahf2/Je0/GpWQ1C1pPrAUuCUi7qk5Nh44CfjhaNRtJG0g50klzhHo3PPEMg5MBUmaTNb8sTOwHbCJpBNHt1aDGgdMBg4EPgN8Nw2AW6qI6IuImWS/dg+Q9I6aw18H7oyIH5ddr5G2gZwnlThHoHPPE8s4MBV3KPBERDwfEeuA7wPvHuU6DWYR8P3UEvJzoJ9sUMxREREvAHeQ7nNI+iIwFTh7tOo0wjaE86RS5wh05HliODC1w9PAgZI2Tr8uDyEbmaJqriObHgRJbwF6KHmkZklTJW2R1ieSfVn/StKpwOHACRHRX2adSrQhnCejfo6k1+7k88TYsKa9qKSIuEfSNcAvgF7gl4zy0CmSrgR+D9gqDfX0ReBi4OLUPXgtMCvKH/ZjGnBpmvSxi2xYqf+U1As8BfwstRx9PyLOK7luI6pq50mFzxHo4PPEMh6SyMzMKsVNeWZmVikOTGZmVikOTGZmVikOTGZmVikOTGZmVikOTGZmVikOTGZmVikOTBUm6U8lLZE0v2bZo43lT0yDdXan7W0kXSFpoaT7JP1M0h8NU8Ydkg6v2/dpSV+X1CPpzjSato0AnyM2FjkwVduewN9ExMya5cE2lv9xsqfn+9IwOdeRDY45IyL2JZsvaLipBa5k/XmFjgeujIi1wK3AcW2ss72RzxEbcxyYqm0PYP4Ilv9R4Pq0fjCwNiL+beBgRDwVEf86sC3pxDSz6HxJ30i/oq8B/kDShJRmOtno2T9J2a5Lr2Mjw+eIjTkOTNW2O/Ctmiaa09pVsKQeYEZEPFnzWr8YIv3byX7VvidNR9AHfDQilpNN2jYwG+rxwNU1Y6w9BIzavD4dwOeIjTlu160oSTsCSyNizwbHuwqOsLwV8MIQrz8beC/ZL+T9yUbD3he4Nw2gOZFsEjd4vanm+vT34wPlpCagtZImRcRLBeprdXyO2FjlwFRdewK/qt8p6WSyaQDmSboW+EtAwK+Ba4H/TfZlcC3wG+BLwGrghoi4vqaoV4GNarYfBo4Z2IiI0yVtBcwbeGng0og4d5C6Xgf8s6R9gIkRUf+rekKqg7WXzxEbk9yUV117MMiXTvJfEfEvwJ+RfXksT+lPB86LiL+MiJ8AnwQ+HxGnAm+YLTUiVgLdkga+eG4DNpL0qZpkG9es3wocK2lrAElbSnpTKutlssncLib7ZfwaSVOAgcnxrL18jtiY5MBUXXsAJ9XcO/ilpE3Tsd+mv13AdyLiSxFxCtkv1tqmGwED7fiDzW9yM1lTDKm9/2jgfZKekPRz4FLgs+n4I8DfADdLegC4hWzenAFXAnsBV9W9xkHAjc29dcvJ54iNSZ6PaQOTmmmWpYnT3gT8H2AJ8BLwbbJmmSXAXLLZRz8PrAJ+GBHX1pW1N3B2RJw0gvX9PnBuRDw2Uq9hb+RzxDZ0DkwdTtLHye4L9I1A2T3A8RHx7XaXbeXxOWJlc2AyM7NK8T0mMzOrFAcmMzOrFAcmMzOrFAcmMzOrFAcmMzOrFAcmMzOrFAcmMzOrlP8PQyfpwmrp2LYAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "((nominal[0] - sys[0])/nominal[0]).plot(symm=True, clabel=\"rel. difference\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get Data\n", - "\n", - "We can load the real observed data too. This is a Pipeline with no free parameters, as the data is of course fixed.\n", - "NB: When developping a new analysis you will **not** be allowed to look at the data as we do here before the box opening (c.f. *blindness*)." - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "# real data\n", - "data_maker = Pipeline(\"settings/pipeline/IceCube_3y_data.cfg\")\n", - "data = data_maker.get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0csv_data_hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False False 0 0
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+-------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_data_hist | events | \"dragon_datarelease\": | True | False | False | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_maker" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAADmCAYAAACZMz8SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdebwkVX3//9f73pk7M8wMzAzDMrLOsMkAyia4EGUXRAETF0iCaDQkCprEaMTwVQwJ+aL+EvX7BRdUlKBx/WrABZE1RgF1FGTfN4cZmR1mn7n3fn5/VF2mudNV3bdP973dfd9PHudBd1V9qk7fqa5P16lTpxQRmJmZmZmZmZmZNapnrCtgZmZmZmZmZmadzQ1MZmZmZmZmZmaWxA1MZmZmZmZmZmaWxA1MZmZmZmZmZmaWxA1MZmZmZmZmZmaWxA1MZmZmZmZmZmaWxA1Mo0TSE5Luzst9kv5F0qQaMTMkvaeBbUnSTZK2rbHclyTNrzL97ZIurTL9Y5I+UGX6iyR9d4R1nCvpl5IelvQtSX359PMkvWMk6+p03je2ijlP0iOSQtLsiumvl/RPI1mXWbvLv///M2zanZLuGeF6bpF0eKPLSPqupHk14i+SdHyV6UdL+mGV6VWPF/m8W8u2VWX5WZKuz3PG9ZJm5tO78rjg/aI+kt4s6V5Jg5WfQdJBkr46knWZdZqy34/Df39J+oakuyT9naQX58eTOyTtNWydnfA70ecQJcbxfuHzhzbhBqbRdUxEHAQcAcwDLq+x/AxgxI0IwOuA30XEc2ULRcS7IuK+BtY/fD2LIuJNIwz7OPCpiNgHWAm8M59+BfC+1Dp1IO8bW/wCOB54ctj0HwGnStomtV5mbWa6pN0AJO0/2huXdADQGxGPlS0XER+NiBuasc2IeOUIQ84Hbsxzxo35e+ju44L3i9ruAf4Y+Nmw9dwN7Cpp92bUy6yNVf39WPn7S9LOwCsj4iUR8SngdODqiDgkIh4dtr5O+J3oc4jaxuN+4fOHNuEGpjEQEWuAvwZOz6/KTpN0o6Tf5q3Np+WLXgLslbcmf7JkueH+DLgaQNKekh6QdGXeQv3doS9Y5VVLSe+Q9JCk/wZeVVL9l+Yt2A9L+suKbdyTv367pO9J+km+zCeGr0CSgGOBoZbpK8kOakTEOuAJSUfU+efsKuN938j/BndExBNVpgdwC/D6sr+hWQf6NvDW/PWZwDeGZkiaLOkr+ff6DknH5NOnSPpm/t39FjClIuZESbflx4PvSJpWY/vPHxfy+DWS/i2Pv1HSDvn0r0oa+mF6Un78+DnZCX6R3fLv/IOSLqzcRv7/o/PjzXfz9X09zxHDnUaWK+CFOaObjwveL2rsFxFxf0Q8WLCNHwBn1PiMZl2hyu/H539/AT8Fdsx/M14I/C3wLkk3V1lVW/9OzI8DPoeo03jZL/LP6vOHNuEGpjGStwA/DuwDbADeGBGHAscA/5YfQM8HHo2IgyPigyXLDfcq4DcV7/cDLo+IlwDPMazni6Q5wD/lcScAW3VtrPAS4BTgFcBHJb2oyjIHk/0oPgh4q/IrsBW2B1ZFRH/+fiGwS8X8BcAfldShq43zfaOWcb1vWNf6LltOxt9AdmI85FyA/ErkmcCVkiYD7wbW5d/di4HDAJR1C/9fwPH58WAB8P4a2x9+XJgK/DaP/2/gwsqF8+1/Ma/rHwE7l6z7CLIfpgcDb1b1W7EOIfthO5/sSmu1H6I7RcRigPz/O1bM69bjgveL2vtFmW7dL8yqGvb7sdKpbPnN+E/A58l6AB1TZTXt/jvR5xAjNE72i1q8X4wiNzCNLVX8/18l3QXcQHag3Klg+XqWmxURqyve/z4ifpG//hpw1LDljwRuiYilEbEJ+FZJna+OiPURsQy4mexH4nA3RsSzEbEBuA/Yo8rnGC4qXi8Bqh1cxpPxum/U4n3DutEKYKWkM4D7gXUV844CrgKIiAfIun7vC7ya7DtLRNwF3JUv/3KyH3K/kHQncDa1v2dzgKUV7wfZ8l2vdlx4MfB4RDycXxn8Wsm6r4+I5RGxHvhelXUB/CoiFkbEIHAnsGeN+g7XrccF7xfeL8xGqtpv7JFo99+JPodoTLfvF7V4vxhFE8a6AuOVpOlkP5YeIruKtwNwWERslvQEMLlKWL3L9UvqyX+UwQsPvNXeF02rpp51bax4PcDW+9kyYIakCfkViF2BRRXzJwPr66xP1xnn+0Yt43rfsK72LeAy4O3Dppf9KKz2HRPZyfuZI9j2eqofL8q2M9rHhWckzYmIxfmV0SUV87r5uOD9IuN8YVbDsN+P2zW4mnb/nehziBEaJ/tFLd4vRpF7MI0BZeMefBb4r4hYSfZlX5I3DBzDllbZ1cD0itCi5YZ7kKw7+ZDdJb0if30m8PNhy/8SOFrS9pImAm8uqf5pysZ+2B44Gvh12WetJr+yeTMwNHjb2VSM80B2FXZET8rpFuN936jDuN03rOt9H/gEcN2w6T8ja0BG0r7A7mTf48rpB5J1MQe4HXiVpL3zedvkcWXuB/aueN/DluPzn7L1ceEBYK62PGWmrNHihHzchylk42T8omTZMteQ5QoYXznD+0Xjunm/MHuBKr8fG9XWvxN9DjEy42W/qIP3i1HkBqbRdXM+YNmvgKeAv8qnfx04XNICsh+GDwBExHKy7uz3SPpk0XJV/IjsCzrkfuDs/PapWcDnKhfOx7P4GHAb2e1Vvy35DL/K13878M8Rsahk2TIfAt4v6RGy+6m/XDHvVXk9xhPvGzlJ75O0kOyq1F2SvlQx+5h8G2ZdJSJWR8TH867klT4L9Eq6m6w3y9sjYiPZd3Va/t39B7LvHxGxlKy3yzfyebeT3bpUZvhxYS1wgKTfkA2metGwum4AzgF+pGww5+FPbKn0c7Jbue4E/l9ELKhRlyKXkDVKPEw2nsMlFfO69rjg/aKcpDfm+eIV+XYrG+K6dr8wq1D0+7FRbf87EZ9D1GPc7Rc+f2gfyhqCrZvktw/8R0ScIGlP4IcRceDY1qo+kg4B3h8RZ411XbpRh+8bOwH/GRHHjXVdzLpJ3ovkZuBVETEgaU1E1HrCWFvwcaF1Ony/mEQ2EPlRFYMBm1kNHf470ecQLdLh+4V/J4wy92DqQnmr8RclbTvWdWnAbOAjY12JbtXh+8buwN+PdSXMuk0+0PKFvPBJPJ3Cx4UW6YL94nw3LpmNTIf/TvQ5RIt0+H7h3wmjzD2YzMzMzMzMzMwsiXswmZmZmZmZmZlZEjcwmZmZmZmZmZlZEjcwmZmZmZmZmZlZEjcwmZmZmZmZmZlZkrZqYJJ0haQlku4pmC9J/0fSI5LuknRoxbyzJT2cl7NHr9ZmZjZanCfMzKyIc4SZ2dhqqwYm4KvASSXzTwb2ycs5wOcAJM0ie5TukcARwIWSZra0pmZmNha+ivOEmZlV91WcI8zMxkxbNTBFxM+AFSWLnAb8R2RuB2ZImgO8Frg+IlZExErgesqTi5mZdSDnCTMzK+IcYWY2tiaMdQVGaBfg9xXvF+bTiqZvRdI5ZFcsmNA76bDtps1pqCIbtpnYUNyQWTP7k+JnT1bDsT2J7YrrBzYnxa/cmLb9Z9ek/e0B1i18aFlE7FA0f9Kk6TF1auHsQoMT0j5b/+S0+MlT0varyb1J4WwcSItftzbt33bixrTPD/DsssdK9416HKTtYzXF35MnWZ28DSvUFnkiNUfsMCttX56V+GVWYp7YPLghKX75xrT6P7c28WAGrH7ykcLv6eRJ02PalNkNrXfjlLSfXhO2iaT4yX2DadtPvDSZmifWr0/7+/WuT/v8AM8ufdR5onM1NUdMnTr1sP323behigSN/5YHGCTtWNCbGN+/5Omk+MHZuybF96T9+Vjfn34sePie3xV+T2fPmhl77Pqihtb73GDacW7jQNpnm9yblkOn96UlisQ0QeLHT963AO66846kY/humhIbKP8gy9jUlnmi0xqYqv1zR8n0rSdGXA5cDjB7xtw45eiLGqrIIy/dsaG4IW9987Kk+Hfs19dw7HSmJW37ntWLkuK/9eiUpPjr/nunpHiAX3/w+CfL5k+dugMnvvbiEa93zYzJDdcJYMWL0/5t9j9oeVL83rPSjsiPPZt2RL7jl2n/trs8tDIpHuCaL7+pdN+oxxo280+9RxTOf/vAjdukbsMKtUWeeOiQtH35r85YmhR/xt7bJsVP7k07Fi1e91BS/FUPp23/ht/OSIoHuP4vXl94LJg2ZTaN/n54fH5jDVNDtj94Y1L8/nuuS9v+5LST0sdXp+WJu363fVL8tnenfX6AH33+j50nOldTc8Rhhx4av/jFLxqqyGBiA1NqA8k0NiXFr7j0gqT4Ne+8JCl++qS0Rox7lqQfC07Yd8fCY8Eeu76IX/742w2t9/o1aXni0ZVpn22fWVOT4o/eNe1cb81gWgPXivVpTVTTEhvIAF40c1pSntjIIG9R+QXOz8aTbZkn2uoWuTosBHareL8rsKhkupnZ6BP09BYXaynnCTNrf84TY8U5wszanoBeqbS0q05rYLoGeFv+BIiXA89GxGLgOuBESTPzAflOzKeZmY06CSZOVGGxlnKeMLO25zwxZpwjzKztCejrUWlpV211i5ykbwBHA7MlLSR7msNEgIj4PPBj4HXAI8A64B35vBWS/hn4db6qiyKibIA/M7OWkWDChPY98Hcy5wkz6wbOE63hHGFm3UCirRuRyrRVA1NEnFljfgDnFsy7AriiFfUyMxsJIXp6OzMptDvnCTPrBs4TreEcYWbdILtFbqxr0Zi2amAyM+sKggm+xcHMzIo4T5iZWQEhJrbxOEtl3MBkZtZkEvR22gh3ZmY2apwnzMysTDsP5F3GDUxmZk0mX5k2M7MSzhNmZlbEYzCZmdkL9HRoUjAzs9HhPGFmZtV4DCYzM3uer0ybmVkZ5wkzMysi3IPJzMxykpjoEwczMyvgPGFmZkV8i5yZmb1AjwdvNTOzEs4TZmZWjW+RMzOz5/nWBzMzK+M8YWZmRYTcg8nMzDKSB281M7NizhNmZlZEgl51Zo5wA5OZWZNJeGwNMzMr5DxhZmZFOnmQb9/9bWbWAj09xcXMzMx5wszMqhkag6ms1FyHtEpSVJRNFfMuldSfT18saV6z6t5WKUzSSZIelPSIpPOrzP+UpDvz8pCkVRXzBirmXTO6NTcz22JobI2iYo1znjCzbuA80TrOE2bW6SSY2NNTWup0ZUQoL33ZunUqcC7wt8DOwEbg5mbVvW1ukZPUC1wGnAAsBH4t6ZqIuG9omYj4u4rl3wscUrGK9RFx8GjV18yskKBnQox1LbqO84SZdQ3niZZwnjCzriDR29eyvkAfAp6MiEuzTekdwE2S5kTE4tSVt1MPpiOARyLisYjYBHwTOK1k+TOBb4xKzczMRkiKwmINc54ws67hPNESzhNm1vEEqLentAB9ktZWlKuqrOptkgYlPSfpb/Np84DKRveh3kvHNqPu7dTAtAvw+4r3C/NpW5G0BzAXuKli8mRJCyTdLun01lXTzKycBL0TorBYw5wnzKwrOE+0jPOEmXW+nqwHU1kBNkXE1Ipy1rC1vJ/s+LcdWWP7pyQdA0wCVg5bdhDYoSlVb8ZKmqTaDedFGfYM4LsRMVAxbfeIOBz4U+DTkvaquhHpnDxxLNiwaXVajTvUatYkxR84/UVJ8W/da31S/Gtf80xSfCtNW7UhKX7WA2n/NvffvX1S/CMr0g4J87ZL+1F8yJFp/7ZP7zszKb6Z1FNcrGEdkyf2vSNtX/7CN9Ny/DcfeS4pfsNA2rFozjb7JsWftU/a9o8/dFXthcbI3PuWJcUvv3NSUvz9T2yTtv0NaeMDzZ2elide8tLlSfHPHZT2+ZvJeaIlWp4nKnPE0mWNf597CqtVnykT0naUNfQlxc867+Kk+Glf3mp4rBFZvXEwKf7AHdvnWDDcCdPS8sReM9M+28Mr1ibF37Iw7VxvWs9A7YVKzJrSmxS/ZlPavtUs6ukpLbVExBURsTgiVkfEOcAy4D1kYy7NGLZ4D7C0GfVumzGYyK4w7FbxfldgUcGyZ5ANTPW8iFiU//8xSbeQ3U/96PDAiLgcuBxg6i77xgOH7dxQZU85Je3v/775jW13yOBN/9V4cI9I+dr0vPwYDpw8q+H4Hy9bwyt2avzA8f3HJ/DSly1pOB7g1zXmD0zo4blZU0a83mW7TGusQrn9Dl3JTBo/Mdpt1uak7b8y4d9lyEEJbTyPPNfDASc3fuvvT+/cls1z0n4w8eW0cMiuTHtsjZbomDzxZ29cwmEJefp9+80CGj/ODt54DTzecDhMmJCWJ45+PXP69mw4/pYlf+CIHfobjv/yXduw05x1DcfXsrmvlyW7bdtQ7NLEPLH/wSuS4v9oj021Fyrx0u3T4jcPiiN3bDz+d8snsv9rGj/5uvbO6XBU2skHn08LB+eJFmp5nqjMEYcdcnBoc2Mn009sSDsNmxfLmZgQ37NyYdL2B5Y+zfZH/VHD8c8u+CUzvv7RhuMn/9W/NhwLMPne63lN0hrKxcTJbJ5d9TpWTT2bN3Dsdo1vu2fDcxy/fePHuc8+1M8Dyxq/0HPonO341TON54pdtu0DGj8n2aVvM9MmNxwOPb2Q9CsonUSrxmAS8Bgwf8u2NPRVuKlqxAi10zWSXwP7SJorqY/soL/V0xsk7QfMBG6rmDZT0qT89WzgVVTcV2hmNqrkx0+3iPOEmXUH54lWcZ4ws84n1TMGU0m49pD0j5K2kzRJ0mXAbOBLwMeBPSWdK2kH4CvAU80Y4BvaqAdTRPRLOg+4DugFroiIeyVdBCyIiKHkcCbwzYiovOyzP/AFSYNkjWaXVD4twsxsdAU9vb4y3WzOE2bWPZwnWsF5wsy6gQS9E5OuNkwBLgCG7mVdA5wfET/J1q/LgM8AlwJ/IGtQb4q2aWACiIgfAz8eNu2jw95/rErcrcBBLa2cmVmdfOtD6zhPmFk3cJ5oHecJM+t4Er19jd/mGBEPAFNL5p8HnNfwBkq0VQOTmVlXEPT0+MTBzMwKOE+YmVkBCdSb9lCNseIGJjOzJhP41gczMyvkPGFmZoUSezCNJTcwmZk1m/yYaTMzK+E8YWZmBQT09LgHk5mZ5Xo9toaZmZVwnjAzs6pEx/Zg8rUTM7MmkwL1FBczMxvfmpUnJH1G0kZJIWmzpHPz6R+omL5S0isrYqZLeiifNyDp6hZ8RDMza5SEestLu3IDk5lZC/T0RmExMzNLzROSPgScC7yH7K6ElwO3S9oX+CTZ46dnAA8D11WEXgfsBMwFTgVeL+mCZn0uMzNLo7wHU1lpV75FzsysySTf+mBmZsWalCcuAK6KiC/n73+TrVtXAasj4u/z96cASySdHBHXAkcCF0TEE8ATkn4BnANcnFohMzNLJ4neie3biFTGPZjMzJotH7y1qJiZ2ThXO0/0SVpbUa56Qbg0EZgO7Cxpk6R+SXdJmgkcCDw1tGxELAU2AsdK2pPs9/8PKlb3K7IeTWZm1g5Ex94i5x5MZmbNJtBEtySZmVmB2nliU0RMLZl/YP7/VwMvA9YDC8gajrYBVgxfHzAT2DF/v7Bi3lJ8TmBm1j4keiZ25mG5M2ttZtbWBL1uYDIzsyLJeWJl/v+vR8TvACR9gWxMpgfJejdV6stjluTvdwGezV/PBvpTKmNmZs0jQU+Hnkt0Zq3NzNpZfmW6qNS9Gj8dyMysOyXmiXz8pAGg2kBO9wC7P78paQdgEnBTHjcIvKFi+SOAZxr+LGZm1lwSPX0TSku7cgOTmVmzCehRcalnFX46kJlZ92pCngB+Afy5pPn52ErnkN0mdzEwXdInJW1HdtvcmnyAb8jGXPqwpD0lnQwcBVzevA9nZmZphHp6Sku7aquaSTpJ0oOSHpF0fpX5b5e0VNKdeXlXxbyzJT2cl7NHt+ZmZltIakYPpuefDhQRAxHxm4j4DfAR8qcDRcSzwCnAtPwkAbKnA/3viHgiIn5EdgJyTpM/4phxnjCzbtCkPHES8DhwL/Bo/voNEfEA8A/A+4BVwIuBkyviTiS7Ve5x4IfADyOia54g5zxhZp1OEj19E0tLu2qbvlWSeoHLgBPIBh78taRrIuK+YYt+KyLOGxY7C7gQOJysq/Bv8tiVmJmNNoHKHy3aJ2ltxfvvRcRZz4cPezoQ2cWA+4DXUOXpQJKGng50P9WfDnRE4idqC84TZtY1aueJmiJiPVsG+x4+75NkvV2rzVsN7Ju08TblPGFmXUHQ26GDfLdTD6YjgEci4rGI2AR8EzitztjXAtdHxIo8CVxPdlXHzGwMCHpLSv50oIpy1rAVDH860HxgT7Y8HWj1sOXHy9OBnCfMrEvUzBPWGOcJM+t8EurtKS3tqp1qtgvw+4r3C/Npw/2JpLskfVfSbiOMRdI5khZIWtC/9tlqi3S/wWrjQY4g/Pabk+JfN3taUvwb57bvg05mP70mKf7B385Miv/9irTukrc+k3Y1NdXe2w4mxZ948HNNqkmi9EG+X/B0oIh4CPgCcCiwjvqeDjSkm54O1DF54uvf37H2QiX+z4PDnzA+Mj3HnZoUT3/aLjN4yw+T4o/eceek+He+ZF1SfCvtkJgn7r9zVlL8/zzZlxT/u+Vp8RN70n6DvHT7zUnxJx88vH1+jDTpYRC2lZbnicocsXT58oYruufktOPsY9o+KX5w5q5J8b07VE2hddvu8COT4jd84R/T4g84ISm+lQYnTk6Ln7xtUvx79k27LvnbxWnn2E8/tyktflPi7WODA2nxTSCJnokTSku7aqeaVbtcM/xXyA+Ab0TERkl/DVwJHFtnbDYx4nLygQx3nT8vTn/D0oYq+3cHDT+/G5n1F/57Uvzy+xuPHRxIuzK267v3YPDnNzQcv/LVR3JkwrnX5Q9MYN52aT9QaxmY0MPKHbcZcdz03Tczg40Nb/fIA9MOyG+cuyEp/iWz0n4srO1P60W+ZP1q9pvRePyPntomuZHp2tqL1CaSrkBHxBOSyp4O9PzV2OFPB5I09HSgodsBuunpQKOfJw6YF39y6pJqi5X6mwNnkI3B3hh97ko23dJwOE9fl9bAMmuXxo9jANue+yri/tsajl+69+7MT2hv/+IDk3nxTmkNEWUGJvfw7N4jzxEAO81Zy25bdUKs3yv2W1t7oRIn7pr2b7v3ttsBjZ/8TOhJa6D6/Zo/cOKujf/bfu2RqRz24rRGvh8lRecS84QVanmeqMwRh730oOhZ19hvn55Vi9i7ocjMzX/y/he0ho3Ua776EVIu6733iPclRMNuU9IaAd7/zffCDV9sOH7iYSfAi/ZJqkOZdZsGWLCoseP1vJmTgcb/Pr09QF/jDZCzVz/BuXs0HM7jF1/YeDAw/ZIrk+J3WPFgUvzGX11Xe6FWE23dS6lMO9V6IbBbxftdgUWVC0TE8ogY+mX0ReCwemPNzEaNhCb2FpY6+elAW3OeMLPu0Jw8YVtznjCzjieJ3okTSku7aqcGpl8D+0iaK6kPOAO4pnIBSXMq3p4KDPXjuQ44UdJMSTPJno7RBk2PZjZupT9+2k8H2przhJl1j/Q8YVtznjCzrtCpYzC1TdNXRPRLOo/sQN4LXBER90q6CFgQEdcA75N0Ktl4IiuAt+exKyT9M1lSAbgoItIGsDAza1T++OkUfjrQ1pwnzKxrNCFP2NacJ8ysK+RjMHWitqp1RPwY+PGwaR+teP1h4MMFsVcAV7S0gmZm9egB+nyLQys4T5hZV3CeaBnnCTPrdJLo7UscrHyM+NKJmVmTCVCPCouZmY1vzhNmZlZIabfISZou6UFJ/ZJC0jpJH8nnHZVPqyyNP8FrmLbqwWRm1hUk8K0PZmZWxHnCzMwKKP0WucnAYuCdwG3AR4GLJN1cuUzFAw+axpnNzKzZBOpVYTEzs3HOecLMzIpIST2YImJpRBwdET+PiIGIuBDYAJzW6qq7B5OZWdMJJnhsDTMzK+I8YWZmBSR6JtQcg6lP0tqK99+LiLOqr04HkPVquqli8jpJQfbk6VMi4qGUKg9xA5OZWbMJ6HEHUTMzK+A8YWZmZXpqXoTYFBFTay0kaQrwM+D+iLhW0k7A24BvA3uTPXXzVmB2WoUzbmAyM2s2+cq0mZmVcJ4wM7MiEpqY/hQ5Sb3AA8AAcBhARDwDXJUvcq+kk4G7JO0SEU+nbtMNTGZmrTDBh1czMyvhPGFmZtVIMKEvcRUSWePStsC8iFhfsOhg/v+mdKt1ZjMzazYJ/JhpMzMr4jxhZmYFhFD6bdT3ADsDe0fEyufXLf0FsAi4HpgLXAusiojfp24Q3MBkZtZ8wlemzcysmPOEmZkVSezBJOmVwPz87R+yzkwAfJasx9IXyNqCBoEngFc3vLFhnNnMzJrOV6bNzKyM84SZmRVL6cEUEbeSXcoo8t6GV16DG5jMzJrNV6bNzKyM84SZmRVRT/IYTGOlrZ6PKukkSQ9KekTS+VXmv1/SfZLuknSjpD0q5g1IujMv14xuzc3MKgmpuFjjnCfMrDs4T7SK84SZdTyBentLS7tqm0sn+SP0LgNOABYCv5Z0TUTcV7HYHcDhEbFO0ruBTwBvzeetj4iDR7XSZmbV+Mp0SzhPmFnXcJ5oCecJM+sKEkyYONa1aEg79WA6AngkIh6LiE3AN4HTKheIiJsjYl3+9nZg11Guo5lZbRJM6C0u1ijnCTPrDs4TreI8YWZdQGjCxNLSrtqpgWkXoPLReAvzaUXeSfZIvSGTJS2QdLuk04uCJJ2TL7dg7arVaTU2MyvSo+JijRr9PLHyubQam5kVcZ5ohZbnicocsWz5ivQam5kNJ6Ge3tLSrtqpb261bBpVF5T+HDgceE3F5N0jYpGkecBNku6OiEe3WmHE5cDlAIccNi/eM7+xNra+/76+obghT96Z9uPh6ccaj928ueqftW67rFyTFL99X1mer23utD8kxddjyvR+Djx6+YjjZkxK+9u+YqeBpPgXz5iVFD9hc39S/Lar19VeqMR2U3dMij94+1VJ8U0j+daH1hj1PHHoYXvFu+ePfJDFidf/cMQxlX71xfVJ8Q/euyEp/tAjpybFz3/giaT47ea/LCl+r+mtPeGDS0oAACAASURBVBZss00/hx6+tKHYmYljdh6xQ9pxeq9tpyfFT121MimeTWl5Yp/t5ybF/+lezyTFA1yUvAacJ1qn5XmiMkcc/pL50bNhbC5Y73TDDUnx96f9ZOXAbSclxZ/9f89Mir/381cnxR/y2aY9lb2qbSb2cPDO2zQU2xdpx/lQWh+STbf9KCl+0Qc+nxT/cm1Miu9//J6k+OsOeHtSfOYf08I7+Ba5dspsC4HdKt7vCiwavpCk44ELgNdExPN7X0Qsyv//mKRbgEOArU4czMxGha9At4LzhJl1D+eJVnCeMLOOJ9TWA3mXaadb5H4N7CNprqQ+4AzgBU9vkHQI8AXg1IhYUjF9pqRJ+evZwKuAysH8zMxGz9CV6aJijXKeMLPu4DzRKs4TZtb5JJjQV17aVNtksIjol3QecB3QC1wREfdKughYEBHXAJ8EpgHfyR/h+lREnArsD3xB0iBZo9klw54WYWY2unxluumcJ8ysqzhPNJ3zhJl1C/W0U1+g+jXUwCTpVODPgUHgGxGRdhNsLiJ+DPx42LSPVrw+viDuVuCgZtTBzCyZBL1t034/JpwnzMxKOE84T5iZFZGgtzPHYGq0Wez1EfGWiDgDOKmZFTIz6wrqKS7jg/OEmVkZ5wnnCTOzqlSeI9o4TzR66WSKpN3z12mPmjEz6za+Mg3OE2ZmxZwnwHnCzKw6QfR0Zo5otNafB96bv768SXUxM+sSgg5NCk3kPGFmVsh5AucJM7MCgg59ilyjme30iPgggKR/BX7evCqZmXU4AR06MF8TOU+YmRVxngDnCTOzqgKINr4NrkyjDUw7SdqLbFC+FzWxPmZmXcBXpnGeMDMr4TyB84SZWXXq3BzRaK3/F3Bu/vpjzamKmVm3UFsPvjdKnCfMzAo5T+A8YWZWoHNzREMNTBHxFPChJtfFzKw7ePBW5wkzszLOE84TZmYlOnWQ74aaxST9jaQv5q8/0twqmZl1Pqm3sIwHzhNmZuWcJ5wnzMyqkmqXNtVos9hewO/z19ObVBczs+7QwfdNN5HzhJlZEecJcJ4wMys0rnowkQ1sPkXSgXhQPjOzYfJbH4rK+OA8YWZWqDl5QtLxkkLSYxXTLpXUn09fLGlexbx5khbl8/olXdrkDzYSzhNmZtWoRo5o4/OJRhuY/o3sAatnAf/YvOqYmXUJ9RSX8cF5wsysTHPyxDeB555fpXQq2cDZfwvsDGwEbq5Y/magP5/3XuDcPGYsOE+YmVWl8hzRxucTI276kiTg9Ig4vwX1MTPrfOP81gfnCTOzGpqQJyR9BlgP3APsnk/+EPBkRFyaL/MO4CZJc8galnYHXhsRzwCfk/RB4MPANUmVGXndnSfMzEqMm1vkIiKAl0k6U9LrJL2uWZWRdJKkByU9ImmrhCNpkqRv5fN/KWnPinkfzqc/KOm1zaqTmVlDenqKS5dznjAzq0N5nuiTtLaiXFUZKmkX4N3Anwxb6zzgvqE3ETHUe+lY4Lh82k8rlr8XmNvcD1ab84SZWQml92Aaq1uiGz3TuQHoA3YAZjejIsoemXEZcDIwHzhT0vxhi70TWBkRewOfAj6ex84HzgAOAE4CPqvx8ggOM2s/Q1emi0rdq+nosTWcJ8zMitTOE5siYmpFOWvYGn4I3BARvxo2fRKwcti0QbJj8fb560orgcnN+VAj5jxhZlaVoKe3vNQ2JrdE1zzTyVv1zyV70sMK4E7gBxHxZJPrcgTwSEQ8lm/3m8BpVFyFyd9/LH/9XeDSvIvtacA3I2Ij8LikR/L13dbkOpqZ1UHNuje6aGyN9wLfAX5Jljz2yBepTCR/TPbj+KcR0dJbH5wnzMxGqvE8IemtwP7AUVVmbwRmDJvWAywFBtj64vIMYENDFRkB5wkzs5GJhHMJSTswRrdE11Prq4EHyK4GnAC8FPiZpMskTWpiXXZhy6NKARbm06ouExH9wLNkV2PqiQVA0jmSFkhasHzZ6iZVvbNMnKik+J99ZFlS/MB3/iMp/ox5OyfFt9KqjWl/25sXpV0ou2VR2j69rndzUrym75QUH2uXJ8UfPXP4b+oxlHiLXMXYGndUTH5+bI08WbwD2F3SnIpE8q6IeCYiPgc8TpZIWq1r88SyZc9VW6Smtccd21DckCM+vmtS/H4HTEmK/+0v1ybF3/fp4R0oRmbC976TFP/GuW10LBhm5aa0+BufnpgU/5ul65Li18zYLimevm2SwmP540nx+01Oy1NN1XieOIOsp9JzkgaA1wBzJa0DHiPruQOApNfkL28CbsynHV+xrgPIckWrdU2eqMwRS5evarymk6c3HgvMf/aupHil/WTl1fcP7zw3Mle+9xtJ8fud8UdJ8Xe85++T4ltpkxLHZ4vhHRVHpueUc5PiX/bbK5Lib1+aVn8Of31S+OuWXJ+2/SYIiejpLS2U30o9ZrdE17P39kbElwEkrYiIv5Q0Afg74HLg7CbVpdphLupcpp7YbGLE5WT15vBD947t+hvLaRt/+VRDcUN+dm3axaLBwaofry5HnzKF6n+y+uz5r4c3HAswcMAr6Ke/4fgrH0pr4KrH5AlwwKyRH9yWb0jL1sftktbAs//MzazevLHh+B1Xbar+xanXirR/m/79j0iKf+y5hcxJO3dpkmAwBsoW6JNUeQb/vcrbHyrG1jgK+ETFcvOoaHCKiJuzi64cS3ZluloieVmDH2IkujdPvGS3mLb499UWK7X2Ez8m5TT+J19L6wG3+rnS/a+ml7867cRnv4/tmRS//lWvhsHGj2XfeWx90vZrmTYRXrFjY0fLhPQNwEHbN/53Adhn27TGt22WLEyK57nGGm2ft+22SY1MK2fPYocpY3VHWKWaeaLMu4CPVry/ApgDHA/sC1wt6Vzg28BXgKciYjGApKeAL0s6nGz8pnlkx+pW65o8UZkjdt3voPj3J6eNtI4AnHXwnIbihjx6yklJ8XueMPzOwZHZ6Z3vY/6932s4/ukpe7AiYfvxiXOZfVDjF2Ne9MGLScuU5TYMBI+ubOx4/Z+/fTpp23/9it3Z+m7Y+t23dB0c2PhX8nV9T/JHPFZ7wQKbHr6TeLjhcHb6xBONBwOX/n/vgU2t3DvqEMFA7R8MmyJiasG8Mbslup5fsDdIOi9/HZC19kfEJ4FXNLEuC4HdKt7vCiwqWiZPStuRdbOtJ9bMbNREyX9039gazhNmZiNUI08Ux0Usj4i7hwqwliyvPJDfEn0Z8BlgCTAFOKYi/BiycY+WAJcCl7X6Nuqc84SZ2QhEjVLDcsboluh6GpjeD2wnaQHworxb6J9Luoys4s3ya2AfSXMl9ZF1/x2e8K5hyxWONwE35U+huAY4I38qxFxgHyCt36aZWYMCGIyBwlKmYmyNN1eZXTa2xpglEpwnzMxGJCVPbLWuiKMjYl7F+/MiYkJEKCLmDI1HlM97LJ+mfJnzqq+16ZwnzMzqFMDAYJSWGsbsluiat8hFxCBwsaRPkXW9PZjspOVu4IJmVSQi+vMrG9cBvcAVEXGvpIuABfnVlS8DV+WD7q0gSxrky32bbAC/fuDciMb7HZuZpQmi8fvfK8fWgLzRKB9b4w6Kx9boz6cdHxE35NNHJZE4T5iZjVRSnug4zhNmZvXLLkIkxEcsHatbokcygtgpwE8i4hpJHwFOJHuC0R3lYfWLiB8DPx427aMVrzdQ/ao+EXExcHGz6mJmlmKw8Tv7O3FsjSHOE2ZmdUrIE53MecLMrJaAgcQxG8luif4F2S3RA4zSLdEjGUX0IxGxWtJRZE9/uBL4fGuqZWbWuSKyK9NFpUZsJ46tMcR5wsysDil5osM5T5iZ1SHLE8WljvgxuSV6JA1MQ5dZTgE+HxFXk53ImJnZMONsbI0hzhNmZnVqVp7oMM4TZmY1BFkPprLSrkZyi9zTkr5AdpvGxyVNYmQNVGZm40SM11sfnCfMzOriPIHzhJlZVRHUM5B3WxrJAf0tZAPmnRQRq4BZwAdbUiszsw4WlHdr7WLOE2ZmdXCecJ4wMyszWKO0q7p7MEXEOkmPAq+V9FrgfyLip62rmplZpxqfV6adJ8zM6uU84TxhZlZdMA56MEn6G+DrwI55+Zqk97aqYmZmnWw8Dt7qPGFmVj/nCecJM7MiUaO0q5GMwfRO4MiIWAsg6ePAbcD/bUXFzMw6VRDdPkhrEecJM7M6OE84T5iZlRno0GsNI2lgErygL+9APs3MzIaJtr620DLOE2ZmdXKeAJwnzMy2EgSDHZojRtLA9BXgl5K+n78/Hbii+VUyM+twMW6vTDtPmJnVw3nCecLMrEiMgx5MEfHvkm4BjiK70vCOiLijVRUzM+tUAePyxMF5wsysPs4TzhNmZkUCGOjQJ4rW3cAk6UrgbyLit/n7mZKuiIi/aFntzMw6UtaxdbxxnjAzq5fzRP7eecLMrIoObV+q/ylywEsiYtXQm4hYCRzSjEpImiXpekkP5/+fWWWZgyXdJuleSXdJemvFvK9KelzSnXk5uBn1MjNrRACbB1VYupjzhJlZHZwnMs4TZmZbi4DNA1Fa2tVIGph6Kg/UkmYxsjGcypwP3BgR+wA35u+HWwe8LSIOAE4CPi1pRsX8D0bEwXm5s0n1MjNryGAUly7mPGFmVifnCecJM7Nqstuoo7S0q5Ec0P8NuFXSd8k+81uAi5tUj9OAo/PXVwK3AB+qXCAiHqp4vUjSEmAHYBVmZm0kouuvQBdxnjAzq4PzhPOEmVmRINg82Jm3Udfdgyki/gP4E+AZYCnwxxFxVZPqsVNELM63sxjYsWxhSUcAfcCjFZMvzru6fkrSpJLYcyQtkLRg6bLnmlF3M7MXyK46qLB0q67MEyvWNqPuZmYv4DzRuXmiMkesfXZFk6puZlYhf4pcWWlXI+qSGhH3Afc1siFJNwA7V5l1wQjXMwe4Cjg7Iob+tB8G/kCWJC4nu1pxUbX4iLg8X4bDD54bsWH1SDb/vIFl6xqKG7LrHn1J8fsd0viPj51ft23StrXXS5Pi71rxdFL8A6smJ8XXY4JgRgP/RDtMTuuuuHR9Wi/x5zb1JsUftkPaE236Zu6WFP/E8sVJ8feumJIU3ywRjNcr092XJ/afEzyzbCSbB6B/80juQN/ajjtPTIo/8NC078Kex6Udy/SSQ5PiH129Min+3pWtPRb0CKZPbOxvtHpz2rHhmXVpeWKC0v62u+1Qes5e08Sddk+KH4jNSfH3JP5+axbnic7NE5U5Ytqu+8V/3fbUSDb9vPfvmXYBY9WLt0+K3/4fPp0Uv3JzWp7YmQ1J8T0f+Oe0+PVpx8JaBEzsaey3wL8emvYborE9covrH1iSFD+4X9pxfua+eyXFT5/zX0nxjyxdkxTfDNk4fW3cilSiWfc81xQRxxfNk/SMpDkRsTg/4FfdqyVtC/wI+F8RcXvFuofOSjdK+grwgSZW3cxsRALo7+Ir0K3iPGFm44XzRGOcJ8xsPBga5LsTpTWPNs81wNn567OBq4cvIKkP+D7wHxHxnWHz5uT/F3A6cE9La2tmVsM4Hby1lZwnzKyrOE80nfOEmXWFoHyA73Ye5LtdGpguAU6Q9DBwQv4eSYdL+lK+zFuAVwNvr/L40K9Luhu4G5gN/MvoVt/MbItx/PjpVnKeMLOu4TzREs4TZtYVshwRpaVdjdotcmUiYjlwXJXpC4B35a+/BnytIP7YllbQzGwkunyQ1rHgPGFmXcV5oumcJ8ysawQMtHEjUpm2aGAyM+smQ1emzczMqnGeMDOzIkM9mDqRG5jMzJose/z0WNfCzMzalfOEmZkVyXJEZyaJdhmDycysaww9ftpja5iZWTXOE2ZmViQi2DxQXlJJmi7pQUn9kkLSOkkfqZh/VD69stxQa73uwWRm1mS+9cHMzMo4T5iZWZEsRwy2ejOTgcXAO4HbgI8CF0m6OSJ+XrlcRGysd6XuwWRm1gJ+/LSZmZVxnjAzs6oCBgejtCRvImJpRBwdET+PiIGIuBDYAJyWsl73YDIza7II3+JgZmbFnCfMzKxInYN890laW/H+exFxVqPblHQAWa+mm4bNWicpgMeBUyLiobL1uIHJzKzJsoH5fOJgZmbVOU+YmVmRIBioPcj3poiY2oztSZoC/Ay4PyKuzSc/DLwN+DawN3AdcCswu2xdbmAyM2uy7KrDWNfCzMzalfOEmZkViYBN/WlJQtIqYLuC2c9FxHb5cr3AA8AAcNiWOsQzwFX523slnQzcJWmXiHi6aLtuYDIza4EmPNzBzMy6mPOEmZlVEwEDieMsRcSMWstIElnj0rbAvIhYX7L4UItX6TjebmAyM2uy7PHTY10LMzNrV84TZmZWJIjkHkx1ugfYGdg7IlZWzpD0F8Ai4HpgLnAtsCoifl+2QjcwmZk12SCwyScOZmZWwHnCzMyKNOMWuVokvRKYn7/9Q9aZCYDPRsS5wCHAF8jajAaBJ4BX11pvafem0SJplqTrJT2c/39mwXIDku7MyzUV0+dK+mUe/y1JfaNXezOzrfnx083lPGFm3cZ5ormcJ8ysWwzdIldW0rcRt0aEqpRz8/nvjYiJ+bTeiNgrIu6utd62aGACzgdujIh9gBvz99Wsj4iD83JqxfSPA5/K41cC72xtdc3MikVkV6aLijXEecLMuobzREs4T5hZVxi6Ra6stKt2aWA6Dbgyf30lcHq9gfnAVMcC320k3sys2bLHT/vKdJM5T5hZ13CeaAnnCTPrChHQPxilpV21SwPTThGxGCD//44Fy02WtEDS7ZKGDvrbkw021Z+/XwjsUrQhSefk61iwdPnqZtXfzOx5ga9Mt8DY5IlV65pVfzOz56XmCUnTJT0oqV9SSFon6SMV8z8gaWM+b2U+1kZl7EP5vAFJV7fkQ46+UckTlTli89pVzay/mRmwZQymTuzBNGqDfEu6gWyE8uEuGMFqdo+IRZLmATdJuht4rspyhU16EXE5cDnA4YftE5q+wwg2v8WU953YUNyQY05+MimedWVPECynIw5P2vSd61fWXqjEdQsnJ8U/8tQ2SfH12DQIT61V7QWHeXRZ2ldq++n9tRcqMb1v5HWudPfK6UnxPWmbZ0pvWmv8U2sSK9AsAQPReF0kTQcWAHsBvcB64H9HxD/n8z8AXAz0AauAUyLi1orY3wD7kA3I98OIOK3xDzN62jJPHLpX6MWHjGDzmW3PTGuYOnKvtBzRO3tKWvxxhybFr0g8TN/6WFqeeGJxWnwtmwbg9w3kCIBVm9KOU6s29SbFP7kmLX7KsoGk+E2Da5PiexMP80+tnZi2gmZJzBPAZGAx2W1ctwEfBS6SdDOwBPgk8O/ARWRPALoOGEry1wE7kT0V6ADgGkkXRMTFKRUaDe2QJypzxGGHHho3vfdlI9j0Fp+7a1lDcUOuO+JDSfHfibQT1Gl9aceSD1+3KCn+3a/YIyl+t9mNnQOOhvfetikpfp+dliTFv27+TknxS9am1X/uzLTfMP/zmbckxQ80oXPQRemrYCDat5dSmVFrYIqI44vmSXpG0pyIWCxpDllirLaORfn/H5N0C9nI5v8PmCFpQn7VYVeyx+mZmY2JIPnx0+PyxMF5wszGi9Q8ERFLgaMrJl0o6R/IbhPbGVgdEX8PIOkUYImkkyPiWuBI4IKIeAJ4QtIvgHPILly0NecJMxsPBiPaupdSmXa5Re4a4Oz89dnAVl11Jc2UNCl/PRt4FXBfRARwM/Cmsngzs9ESAZsHikvt+FgaEUdHxM8jYiAiLgQ2kJ04fIT8xCEingVOAaZJOjkPP5Kst9MTEfEjYOjEodM5T5hZ16gjT/RJWltRripbn6QDyC5O3AQcCDy1ZVuxFNgIHCtpT7Lf/z+oCP8V2YWJTuc8YWZdIYBN/QOlpV21SwPTJcAJkh4GTsjfI+lwSV/Kl9kfWCDpd2QJ4JKIuC+f9yHg/ZIeIbuH+sujWnszswpB1r22qOATh0Y4T5hZ16gjT2yKiKkV5ayidUmaAvwMuD/vobQNMHyg0U3ATLaMS7SwYt5SRvGuhhZynjCz7hDBwGB5aVdtkUwiYjlwXJXpC4B35a9vBQ4qiH8MOKKVdTQzq1cdtz5sioip9axr+ImDpE8DK4avjy4/cXCeMLNu0oRbqQGQ1As8AAwAh+WT17HltukhfcBKttw2tgvwbP56NpA2CGQbcJ4ws24xGLDRt8iZmRnUdWW6LoknDkO64sTBzKybNCNPSBJZjtgW2C8ihp4Acw+we8VyOwCTgJvycZcGgTdUrOoI4JnEj2RmZk0S0LE9mNzAZGbWZBFpj58GnziYmXWzZuQJsnywM/DiiKh8xO/FwHRJn5S0Hdlt02vy2+cgu3X6w5L2zMfvO4r8qWhmZjb2Ih/ku6y0KzcwmZm1wGAUlzr5xMHMrIul5AlJrwTmA9OAP0iKvFwWEQ8A/wC8D1gFvBg4uSL8RLIer48DPwR+2AlPGjUzG086tQdTx4/LYWbWbrKnA6nh+IoTB8hOHIZmfTYizs0fRf0vwAfIxtAYfuLwG7ITh0F84mBm1nZS80Q+llDhCiLik8AnC+atBvZteONmZtZSEdDfxr2UyriBycysySJE/+bGO4j6xMHMrLul5gkzM+teEcHAgBuYzMwsNzjY+JVpMzPrfs4TZmZWJNr4NrgybmAyM2uyCHxl2szMCjlPmJlZkQgY6HcDk5mZkT1a1FemzcysiPOEmZmViXADk5mZAYTo7/eJg5mZFXCeMDOzIhEMeJBvMzODrFvrYMLTgczMrLs5T5iZWZHAYzCZmVkue7Sox9YwM7PqnCfMzKxQ4KfImZlZJkJs9uCtZmZWwHnCzMyKRAffItcWmU3SLEnXS3o4///MKsscI+nOirJB0un5vK9Kerxi3sGj/ynMzLYYHFRhsZFznjCzbuM80VzOE2bWTSKitLSrtmhgAs4HboyIfYAb8/cvEBE3R8TBEXEwcCywDvhpxSIfHJofEXeOSq3NzKoYevx0UbGGOE+YWddwnmgJ5wkz6woRMNAfpaUZJK2SFBVl07D5l0rqz+ctljSv1jrbJYOdBlyZv74SOL3G8m8Cro2IdS2tlZlZI8JXplvAecLMuofzRCs4T5hZ14jBKC1NdGVEKC99QxMlnQqcC/wtsDOwEbi51srapYFpp4hYDJD/f8cay58BfGPYtIsl3SXpU5ImFQVKOkfSAkkLli57Lq3WHSp+tSAp/qWbN9VeqMTJu21Iij9i3/b9HbDX7P6k+OWr04ZFW532T8OmxFt9U4916xOfqLP7tPboLhqI/v6ewmIN6ag80XPYqxqKGzLxiD2S4geWrU+Lv/G3SfGznlmSFP/meQNJ8cftl/b5W2lGX9pxatWmtOPk5sTj/Pq0fxr6Eg+BA4mH+d2nOk90sVHJEy/MEcsaruxfvmR2w7EArz1o56T4N3/trqR4DaYdDC5+7d5J8Z+77cmk+N+vTvvN3krnvWpuUvzDz6xJir93yeqk+B2n9tVeqMSdi9O2vyYx0fW2Qxt/BAMDg6VlFHwIeDIiLo2IZ4B3ALtLmlMWNGqDfEu6gazla7gLRrieOcBBwHUVkz8M/AHoAy4n+2NcVC0+Ii7Pl2Gvg+bFd55aMZLNP+81L5rVUNyQHXc/LCl+gMYPis9ueiZp299/PO1b963bZiTFr35qYlJ8PQaiscaaFet6mDCh8S/83rPSDhaPPaukRqaenrQf3o8+mPZvu2F92iGpb1LimU+T+PHTjWnHPDH/4D3jtxtH/kNn/xnbw1HHjDhuyJS165h0yJENx6O0E9TVU9Lib356Y/bXbtAPnuxN2v69d6aduNWyeRCeXtvYd3zGpGBiwrF2x8kNhwLpDTQPPZt2bHviD2kfYMP6tH1j7ZrW/4aoh/NEY9ohT1TmiJ32PiA+fENjDR2H7z6DWZMb3x932XYyBx03veH4R1eu4z/vW95w/JkH1mq/K/fwio28/WW7NRx/yQ0PceFPHmg4/t1HzeMPaxKvzJaY3Cv22q6x49Vffu/+pG2/6xV7JsW/7eKf1l6oxM2feAP7bD+l4fj7lq7jyVWNd0jYnNj48rrdC69BjpqAenop9UlaW/H+exFxVgObe5uktwFrgI9GxKfz6fOAO56vU8TNkiC7vfjrRSsbtQamiDi+aJ6kZyTNiYjF+QG/7NLnW4DvR8TminUvzl9ulPQV4ANNqbSZWSP8+OmGOE+Y2bjhPNEQ5wkzGxeCep4itykipiZu6f3AtWSNS/8GfErS7yLiZmASsHLY8oPADmUrbJfMdg1wdv76bODqkmXPZFh31qFuWsqa1E4H7mlBHc3M6hIhD97afM4TZtY1nCdawnnCzLpCRDA4MFhaaqkygHdleTbfzhURsTgiVkfEOcAy4D35KjYCw29P6QGWlm23XTLYJcAJkh4GTsjfI+lwSV8aWkjSnsBuwH8Pi/+6pLuBu4HZwL+MQp3NzIoNRnGxRjhPmFl3cZ5oNucJM+sag4NRWmqJiBkVg3cPL9uVhA7dv/0YMP/5idJr8pc3lW131G6RKxMRy4HjqkxfALyr4v0TwC5Vlju2lfUzMxuRCHpTR9K1F3CeMLOu4jzRdM4TZtY1Ihjsb90YYQCS9gD+DLgM2AD8O1nj+lCD/MeBqyWdC3wb+ArwVMXtxFW1Sw8mM7OuoYCewSgsZmY2vjlPmJlZkSCIwYHS0gRTyB6QsIqsgeltwPkR8ROAiLiGrPHpM2Rj2k0Baj7Bpi16MJmZdZve2gPzmZnZOOY8YWZmVUUwuLm1PZgi4gGgdJDwiDgPOG8k63UDk5lZkymCntRngZuZWddynjAzs0IRzeqlNOrcwGRm1mQKmOAr02ZmVsB5wszMigStH4OpVdzAZGbWAvIYGmZmVsJ5wszMqgrcg8nMzDKKYIKfDmRmZgWcJ8zMrFAMMuAeTGZmBkB48FYzMyvhPGFmZgViFAb5bhU3MJmZNZnAj5k2pnvKPgAACpVJREFUM7NCzhNmZlbGt8iZmVkmgl7f+mBmZkWcJ8zMrEgMepBvMzPLKKBn0CcOZmZWnfOEmZkVCSA6NEe4gcnMrMkUePBWMzMr5DxhZmaFIjq2B1PPWFcAQNKbJd0raVDS4SXLnSTpQUmPSDq/YvpcSb+U9LCkb0nqG52am5lVE2iwuNjIOU+YWXdxnmg25wkz6xoRDA4OlJZ21RYNTMA9wB8DPytaQFIvcBlwMjAfOFPS/Hz2x4FPRcQ+wErgna2trplZMQVM6B8sLNYQ5wkz6xrOEy3hPGFmXWHoKXJlpV21RQNTRNwfEQ/WWOwI4JGIeCwiNgHfBE6TJOBY4Lv5clcCp7eutmZmNQT0bh4sLDZyzhNm1lWcJ5rOecLMukd2i1xZaVeKaJ9uuJJuAT4QEQuqzHsTcFJEvCt/fxZwJPAx4PaI2DufvhtwbUQcWLCNc4Bz8rf7AbUSUb1mA8uatK5ma9e6jWW99oiIHYpmSloKPNmkbbXr3x/at25tu2/UI99/tilZZF3qNsYr54mWaNd6QZseC5qcI6B9/w3atV7QpvtGvZwnWqfVeaKFOQLa9zvXrvWCNj0WOE+0hbbcN+pRR46ANs0TozbIt6QbgJ2rzLogIq6uZxVVpkXJ9Koi4nLg8jq2NyKSFkRE4f3eY6ld69au9QJo5pe1nT9nu9atXetVr3Y82HcC54mx0a71gvatW7O/4+36Odu1XtDedauH80Rj2iFPtCpHQPvu1+1aL2jfujlPjL12rlstnZwjRq2BKSKOT1zFQmC3ive7AovIWiVnSJrw/7d3/6GS1WUcx98fd113rSBzLTSjEpJCd90yw35R/gD9I0hJaEPFMKnMilJCBEWTiIiIIJIK2lKwLZHd1cz8gaWbIK6mVmsqVKZYG6uWolSurk9/zLk23px7Z5lfZz3vF1zunXPOfs8z7GeegeeeM7eqnuvbLknajfg+IUlaiO8TktRurfgMpiHdAbyl+QsPy4C1wNXVu8fvV8BJzXGnAcP8BkOS9PLi+4QkaSG+T0jSBLViwJTkxCSPAO8Gfp7k+mb7AUmuBWh+m/BZ4HrgPuCKqrq3WeJc4OwkfwT2BX4w7efAhC6VHZO21tbWusatzc+zrbW1tS7NiO8TE9XWuqDdtY1TW59nW+uCdtemGfB9YqLaWhe0u7ZxauvzbGtd0O7aXrZa9SHfkiRJkiRJ2v204gomSZIkSZIk7b4cMEmSJEmSJGkkDpjGIMkXk9ybZGuS9UmWz6iOdUm2J9k6b/vnkjzQ1Pj1GdS1PMmWJL9tavhys/3ypq6tTe17Tru2STMbi9bV2WyoW+wFi9bVyV7Qllw0tZgNaUbsBUPV1cleYDaGqquT2WgrB0wjSvJ64PPAO6vqUGAJvb9IMQs/Ao7v35DkKODDwOqqOgT4xgzqegY4uqoOA9YAxyc5ErgceCuwClgBnDGD2ibGbAylk9lQt9gLhtK5XtCyXIDZkGbCXjC0zvUCszG0zmWjzRwwjcdSYEWSpcDewN9mUURVbQb+MW/zmcDXquqZ5pjtM6irqurp5uGezVdV1bXNvgK2AAdOu7YpMBsL19XlbKhb7AUL19XVXtCKXIDZkGbMXrB4XV3tBWZj8bq6mo1WcsA0oqr6K71J7cPANuDJqrphtlW9yMHA+5PcnuSWJEfMoogkS5LcA2wHbqyq2/v27QmcClw3i9omxWwMp4vZULfYC4bTtV6wG+QCzIY0cfaC4XWtF5iN4XUtG23mgGlESfahd1ngm4EDgFckOWW2Vb3IUmAf4EjgS8AVSTLtIqpqZ1WtoTc5fleSQ/t2XwJsrqpfT7uuSTIbw+liNtQt9oLhdK0X7Aa5ALMhTZy9YHhd6wVmY3hdy0abOWAa3bHAg1X1aFU9C2wA3jPjmvo9Amxorg7cAjwPrJxVMVX1BHAzzf27SS4E9gPOnlVNE2Q2dkHHsqFusRfsgg71grbnAsyGNA32gl3UoV5gNnZRh7LRWg6YRvcwcGSSvZtp7THAfTOuqd8m4GiAJAcDy4DHpllAkv2SvLr5eQW9Znl/kjOA44CPVdXz06xpSszGIjqcDXWLvWARHe0Fbc8FmA1pGuwFQ+hoLzAbQ+hoNlpr6awL2N1V1e1JrgTuAp4D7ga+P4takqwHPgisTPIIcCGwDliX3p+T3AGc1nzQ2TTtD1yaZAm9oeYVVXVNkueAh4DbmispN1TVxVOubWLMxlA6mQ11i71gKJ3rBW3KBZgNaVbsBUPrXC8wG0PrXDbaLNP//5ckSZIkSdLLibfISZIkSZIkaSQOmCRJkiRJkjQSB0ySJEmSJEkaiQMmSZIkSZIkjcQBkyRJkiRJkkbigEmSJEmSJEkjccAkSZIkSZKkkThgaqEkn0qyLck9fV+rxrj+iiS3JFnSPH5dkh8n+XOS3yS5LcmJi6xxc5Lj5m37QpJLkixLsjnJ0nHVrB6zIQnsBRrMbEgCe4EGMxuaJAdM7bQaOL+q1vR9/X6M658ObKiqnUkCbAI2V9VBVXU4sBY4cJE11jfH9VsLrK+qHcBNwEfHWLN6zIYksBdoMLMhCewFGsxsaGIcMLXTKuCeCa5/MnBV8/PRwI6q+u7czqp6qKq+Pfc4ySlJtjTT7e810+grgQ8l2as55k3AAcCtzT/b1JxH42U2JIG9QIOZDUlgL9BgZkMT44CpnQ4Bfth3yeInx7VwkmXAQVX1l75z3bXA8W+jNx1+b1WtAXYCJ1fV48AW4Pjm0LXAT6uqmsdbgSPGVbdeYDYkgb1Ag5kNSWAv0GBmQxPjfYstk+QNwPaqWj1g/x5V9fwIp1gJPLHA+b8DvI/epPkI4BjgcOCO3hWOrAC2N4fPXbp4VfP99Ll1mksidyR5VVU9NUK9apgNSWAv0GBmQxLYCzSY2dCkOWBqn9XA/fM3Jvk4cCxwZ5KNwDlAgD8BG4Gv0HsxbgT+DlwE/Af4WVVd1bfUv4HlfY/vBT4y96CqzkqyErhz7tTApVV13kvUugn4ZpJ3ACuqav50eq+mBo2H2ZAE9gINZjYkgb1Ag5kNTZS3yLXPKl7iRd/4RVV9C/gMvRfv483xZwEXV9U5VXUr8Gnggqo6Azilf4Gq+iewJMncC/+XwPIkZ/YdtnffzzcBJyV5LUCS1yR5Y7PW08DNwDp6E+YXJNkXeLSqnt2VJ68FmQ1JYC/QYGZDEtgLNJjZ0EQ5YGqfVcCpfffE3p3klc2+J5vvewCXV9VFVfUJepPf/ksZA8zdn1r8vxvoXZpIcx/rCcAHkjyYZAtwKXBus/8PwPnADUl+B9wI7N+31nrgMOAn885xFHDtrj11LcJsSAJ7gQYzG5LAXqDBzIYmKv/7nCy1WXPZ4mNVdU0z1f0qsA14CriM3mWK24CrgceAC4B/AddV1cZ5a70dOLuqTp1gvRuA86rqgUmdQz1mQxLYCzSY2ZAE9gINZjY0Lg6YOirJ6fTud905gbWXAWur6rJxr63JMxuSwF6gwcyGJLAXaDCz0V0OmCRJkiRJkjQSP4NJkiRJkiRJI3HAJEmSJEmSpJE4YJIkSZIkSdJIHDBJkiRJkiRpJA6YJEmSJEmSNBIHTJIkSZIkSRqJAyZJkiRJkiSN5L8E8qUBoTDQHgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(1, 3, figsize=(20, 3))\n", - "\n", - "model.reset_free()\n", - "nominal = model.get_outputs(return_sum=True)\n", - "\n", - "data.plot(ax=ax[0], title=\"Data\")\n", - "nominal.plot(ax=ax[1], title=\"Model\")\n", - "(data - nominal).plot(ax=ax[2], symm=True, title=\"Diff\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fitting\n", - "\n", - "For fitting we need to configure a minimizer, several standard cfgs are available, but you can also define your own.\n", - "For the fit we need to choose a `metric`, and by default, theta23 octants, which are quasi degenerate, are fit seperately, which means two fits are run." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], - "source": [ - "minimizer_cfg = pisa.utils.fileio.from_file('settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.json')\n", - "ana = Analysis()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ WARNING] Minimizer slsqp requires artificial boundaries SMALLER than the user-specified boundaries (so that numerical gradients do not exceed the user-specified boundaries).\n", - " (deg) (deg) (eV**2) \n", - " iter funcalls mod_chi2 | nue_numu_rat Barr_uphor_r Barr_nu_nuba delta_index theta13 theta23 deltam31 aeff_scale nutau_norm nu_nc_norm opt_eff_over opt_eff_late opt_eff_head ice_scatteri ice_absorpti atm_muon_sca\n", - "------ ---------- ------------ + ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------\n", - " 0 6 1.75086e+02 | 1.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 8.50013e+00 4.23000e+01 2.45700e-03 1.00000e+00 1.00000e+00 1.00000e+00 1.00000e+00 2.50000e+01 0.00000e+00 0.00000e+00 0.00000e+00 1.00000e+00" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/analysis/analysis.py\u001b[0m in \u001b[0;36mfit_hypo\u001b[0;34m(self, data_dist, hypo_maker, metric, minimizer_settings, hypo_param_selections, reset_free, check_octant, fit_octants_separately, check_ordering, other_metrics, blind, pprint, external_priors_penalty)\u001b[0m\n\u001b[1;32m 511\u001b[0m \u001b[0mpprint\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpprint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 512\u001b[0m \u001b[0mblind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mblind\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 513\u001b[0;31m \u001b[0mexternal_priors_penalty\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexternal_priors_penalty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 514\u001b[0m )\n\u001b[1;32m 515\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/analysis/analysis.py\u001b[0m in \u001b[0;36mfit_hypo_inner\u001b[0;34m(self, data_dist, hypo_maker, metric, minimizer_settings, other_metrics, pprint, blind, external_priors_penalty)\u001b[0m\n\u001b[1;32m 776\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mminimizer_settings\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'method'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'value'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 777\u001b[0m \u001b[0moptions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mminimizer_settings\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'options'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'value'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 778\u001b[0;31m \u001b[0mcallback\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_minimizer_callback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 779\u001b[0m )\n\u001b[1;32m 780\u001b[0m \u001b[0mend_t\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/scipy/optimize/_minimize.py\u001b[0m in \u001b[0;36mminimize\u001b[0;34m(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)\u001b[0m\n\u001b[1;32m 616\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'slsqp'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 617\u001b[0m return _minimize_slsqp(fun, x0, args, jac, bounds,\n\u001b[0;32m--> 618\u001b[0;31m constraints, callback=callback, **options)\n\u001b[0m\u001b[1;32m 619\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'trust-constr'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 620\u001b[0m return _minimize_trustregion_constr(fun, x0, args, jac, hess, hessp,\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/scipy/optimize/slsqp.py\u001b[0m in \u001b[0;36m_minimize_slsqp\u001b[0;34m(func, x0, args, jac, bounds, constraints, maxiter, ftol, iprint, disp, eps, callback, **unknown_options)\u001b[0m\n\u001b[1;32m 421\u001b[0m \u001b[0;31m# Compute the derivatives of the objective function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 422\u001b[0m \u001b[0;31m# For some reason SLSQP wants g dimensioned to n+1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 423\u001b[0;31m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfprime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 424\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 425\u001b[0m \u001b[0;31m# Compute the normals of the constraints\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/scipy/optimize/optimize.py\u001b[0m in \u001b[0;36mfunction_wrapper\u001b[0;34m(*wrapper_args)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mwrapper_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 327\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapper_args\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 328\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/scipy/optimize/slsqp.py\u001b[0m in \u001b[0;36mapprox_jacobian\u001b[0;34m(x, func, epsilon, *args)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0mdx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mepsilon\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0mjac\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mdx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mf0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mepsilon\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0mdx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/scipy/optimize/optimize.py\u001b[0m in \u001b[0;36mfunction_wrapper\u001b[0;34m(*wrapper_args)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mwrapper_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 327\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapper_args\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 328\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/analysis/analysis.py\u001b[0m in \u001b[0;36m_minimizer_callable\u001b[0;34m(self, scaled_param_vals, hypo_maker, data_dist, metric, counter, fit_history, pprint, blind, external_priors_penalty)\u001b[0m\n\u001b[1;32m 1113\u001b[0m \u001b[0mmetric_kwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'empty_bins'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mhypo_maker\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mempty_bin_indices\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1114\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1115\u001b[0;31m \u001b[0mhypo_asimov_dist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhypo_maker\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_outputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreturn_sum\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1116\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhypo_asimov_dist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1117\u001b[0m \u001b[0mhypo_asimov_dist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhypo_asimov_dist\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'weights'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/distribution_maker.py\u001b[0m in \u001b[0;36mget_outputs\u001b[0;34m(self, return_sum, sum_map_name, sum_map_tex_name, **kwargs)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mpipeline\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_outputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpipeline\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# pylint: disable=redefined-outer-name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 253\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreturn_sum\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/distribution_maker.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mpipeline\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_outputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpipeline\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# pylint: disable=redefined-outer-name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 253\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreturn_sum\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/pipeline.py\u001b[0m in \u001b[0;36mget_outputs\u001b[0;34m(self, output_binning, output_key)\u001b[0m\n\u001b[1;32m 305\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 306\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 307\u001b[0;31m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 308\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0moutput_binning\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 309\u001b[0m \u001b[0moutput_binning\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutput_binning\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/pipeline.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mstage\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstages\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Working on stage {stage.stage_name}.{stage.service_name}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 331\u001b[0;31m \u001b[0mstage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 332\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msetup\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/stage.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 369\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 370\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 371\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 372\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/core/stage.py\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprofile\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[0mstart_t\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 340\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 341\u001b[0m \u001b[0mend_t\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 342\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcalc_times\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_t\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mstart_t\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/stages/osc/prob3.py\u001b[0m in \u001b[0;36mcompute_function\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[0mcontainer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'densities'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[0mcontainer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'distances'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 318\u001b[0;31m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcontainer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'probability'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 319\u001b[0m )\n\u001b[1;32m 320\u001b[0m \u001b[0mcontainer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmark_changed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'probability'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/pisa/pisa/stages/osc/prob3.py\u001b[0m in \u001b[0;36mcalc_probs\u001b[0;34m(self, nubar, e_array, rho_array, len_array, out)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0mrho_array\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[0mlen_array\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 233\u001b[0;31m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 234\u001b[0m )\n\u001b[1;32m 235\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "%%time\n", - "result = ana.fit_hypo(\n", - " data,\n", - " model,\n", - " metric='mod_chi2',\n", - " minimizer_settings=minimizer_cfg,\n", - " fit_octants_separately=True,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we can view the bestfit parameters - the result of our fit.\n", - "We have run two fits (separately for each theta23 octant), and the best result is stored in `results[0]` (both fits are also available under `results[1]`)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
name value nominal_value range prior units is_fixed
nue_numu_ratio 1.03304 1 [0.5, 1.5] +/- 0.05 dimensionless False
Barr_uphor_ratio-0.313404 0 [-3.0, 3.0] +/- 1.0 dimensionless False
Barr_nu_nubar_ratio-0.0200293 0 [-3.0, 3.0] +/- 1.0 dimensionless False
delta_index-0.0106011 0 [-0.5, 0.5] +/- 0.1 dimensionless False
theta13 8.50992 8.5 [7.85, 9.1] +/- 0.205 degree False
theta23 46.2525 42.3 [31, 59] uniform degree False
deltam310.00242605 0.002457 [0.001, 0.007] uniform electron_volt ** 2 False
aeff_scale 0.934868 1 [0.0, 3.0] uniform dimensionless False
nutau_norm 0.610718 1 [-1.0, 8.5] uniform dimensionless False
nu_nc_norm 1.26342 1 [0.5, 1.5] +/- 0.2 dimensionless False
opt_eff_overall 1.05348 1 [0.8, 1.2] +/- 0.1 dimensionless False
opt_eff_lateral 22.0081 25 [5, 50] +/- 10.0 dimensionless False
opt_eff_headon -1.32275 0 [-5.0, 2.0] uniform dimensionless False
ice_scattering -2.87791 0 [-15, 15] +/- 10.0 dimensionless False
ice_absorption 1.76103 0 [-15, 15] +/- 10.0 dimensionless False
atm_muon_scale 0.931489 1 [0.0, 5.0] uniform dimensionless False
" - ], - "text/plain": [ - " name | value | nominal_value | range | prior | units | is_fixed\n", - "---------------------+------------+-----------------+----------------+-----------+--------------------+------------\n", - " nue_numu_ratio | 1.03304 | 1 | [0.5, 1.5] | +/- 0.05 | dimensionless | False\n", - " Barr_uphor_ratio | -0.313404 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " Barr_nu_nubar_ratio | -0.0200293 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " delta_index | -0.0106011 | 0 | [-0.5, 0.5] | +/- 0.1 | dimensionless | False\n", - " theta13 | 8.50992 | 8.5 | [7.85, 9.1] | +/- 0.205 | degree | False\n", - " theta23 | 46.2525 | 42.3 | [31, 59] | uniform | degree | False\n", - " deltam31 | 0.00242605 | 0.002457 | [0.001, 0.007] | uniform | electron_volt ** 2 | False\n", - " aeff_scale | 0.934868 | 1 | [0.0, 3.0] | uniform | dimensionless | False\n", - " nutau_norm | 0.610718 | 1 | [-1.0, 8.5] | uniform | dimensionless | False\n", - " nu_nc_norm | 1.26342 | 1 | [0.5, 1.5] | +/- 0.2 | dimensionless | False\n", - " opt_eff_overall | 1.05348 | 1 | [0.8, 1.2] | +/- 0.1 | dimensionless | False\n", - " opt_eff_lateral | 22.0081 | 25 | [5, 50] | +/- 10.0 | dimensionless | False\n", - " opt_eff_headon | -1.32275 | 0 | [-5.0, 2.0] | uniform | dimensionless | False\n", - " ice_scattering | -2.87791 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " ice_absorption | 1.76103 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " atm_muon_scale | 0.931489 | 1 | [0.0, 5.0] | uniform | dimensionless | False" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bestfit_params = result[0]['params'].free\n", - "bestfit_params" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "# update the model with the bestfit (make a copy here, because we don't want our bestfit params to be affected (NB: stuff is passed by reference in python))\n", - "model.update_params(copy.deepcopy(bestfit_params))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see how good that fit looks like. We here construct signed mod_chi2 maps by hand.\n", - "You can see that after the fit, it improved considerably, and the distribution of chi2 values is now more uniform - not much features can be seen anymore." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(2, 3, figsize=(20, 7))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "\n", - "bestfit = model.get_outputs(return_sum=True)\n", - "\n", - "data.plot(ax=ax[0,0], title=\"Data\")\n", - "nominal.plot(ax=ax[0,1], title=\"Nominal\")\n", - "diff = data - nominal\n", - "(abs(diff)*diff/(nominal + unp.std_devs(nominal.hist['total']))).plot(ax=ax[0,2], symm=True, title=r\"signed $\\chi^2$\", vmin=-12, vmax=12)\n", - "\n", - "data.plot(ax=ax[1,0], title=\"Data\")\n", - "bestfit.plot(ax=ax[1,1], title=\"Bestfit\")\n", - "diff = data - bestfit\n", - "(abs(diff)*diff/(bestfit + unp.std_devs(bestfit.hist['total']))).plot(ax=ax[1,2], symm=True, title=r\"signed $\\chi^2$\", vmin=-12, vmax=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When checking the chi2 value from the fitted model, you maybe see that it is around 113, while in the minimizer loop we saw it converged to 116. It is important to keep in mind that in the fit we had extended the metric with prior penalty terms. When we add those back we get the identical number as reported in the fit." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "175.08610154304426\n", - "113.03553972952989\n" - ] - } - ], - "source": [ - "print(data.metric_total(nominal, 'mod_chi2'))\n", - "print(data.metric_total(bestfit, 'mod_chi2'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Evaluating other metrics just for fun:" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "llh = -64.972\n", - "conv_llh = -57.326\n", - "barlow_llh = -1147.290\n", - "mcllh_mean = -541.333\n", - "mcllh_eff = -541.486\n", - "generalized_poisson_llh failed\n", - "chi2 = 128.476\n", - "mod_chi2 = 113.036\n" - ] - } - ], - "source": [ - "for metric in pisa.utils.stats.ALL_METRICS:\n", - " try:\n", - " print('%s = %.3f'%(metric,data.metric_total(bestfit, metric)))\n", - " except:\n", - " print('%s failed'%metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Adding prior penalty terms" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "115.8086745310561" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.update_params(copy.deepcopy(bestfit_params))\n", - "data.metric_total(bestfit, 'mod_chi2') + model.params.priors_penalty('mod_chi2')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "115.8086745310561" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result[0]['metric_val']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Storing the results to a file\n", - "\n", - "Since the fit took a while, it might be useful to store the results to a file. (NB: in this example we use a temp file, but in real life you would of course just use a real pathname instead!)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ WARNING] Overwriting file at '/tmp/tmp04yxkl60.json'\n" - ] - } - ], - "source": [ - "import tempfile\n", - "temp = tempfile.NamedTemporaryFile(suffix='.json')\n", - "pisa.utils.fileio.to_file(result, temp.name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To reload, we can read the file. But to get PISA objects back, they need to instantiated" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "result_reload = pisa.utils.fileio.from_file(temp.name)\n", - "bestfit_params = pisa.core.ParamSet(result_reload[0]['params']).free\n", - "bestfit_params\n", - "temp.close()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Profiling\n", - "\n", - "To understand what parts of the model were executed how many times, and how long it took, the profiling can help:" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "data csv_loader\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- apply: Total time 1.34596 s, n calls: 817, time/call: 0.00165 s\n", - "flux honda_ip\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 25.08353 s, n calls: 1, time/call: 25.08353 s\n", - "- apply: Total time 0.00072 s, n calls: 817, time/call: 0.00000 s\n", - "flux barr_simple\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 118.13966 s, n calls: 330, time/call: 0.35800 s\n", - "- apply: Total time 0.00091 s, n calls: 817, time/call: 0.00000 s\n", - "osc prob3\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 339.71126 s, n calls: 290, time/call: 1.17142 s\n", - "- apply: Total time 73.15262 s, n calls: 817, time/call: 0.08954 s\n", - "aeff aeff\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 0.00056 s, n calls: 290, time/call: 0.00000 s\n", - "- apply: Total time 1.62155 s, n calls: 817, time/call: 0.00198 s\n", - "utils hist\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- apply: Total time 73.78663 s, n calls: 817, time/call: 0.09031 s\n", - "discr_sys hypersurfaces\n", - "- setup: Total time 0.00000 s, n calls: 0, time/call: 0.00000 s\n", - "- calc: Total time 0.27885 s, n calls: 372, time/call: 0.00075 s\n", - "- apply: Total time 0.44868 s, n calls: 817, time/call: 0.00055 s\n" - ] - } - ], - "source": [ - "model.pipelines[0].report_profile()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pisa_examples/Multi_detector_test.ipynb b/pisa_examples/Multi_detector_test.ipynb deleted file mode 100644 index 095723a99..000000000 --- a/pisa_examples/Multi_detector_test.ipynb +++ /dev/null @@ -1,553 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from uncertainties import unumpy as unp\n", - "import matplotlib.pyplot as plt\n", - "import copy\n", - "import pisa\n", - "from pisa.core.detectors import Detectors\n", - "from pisa.core.distribution_maker import DistributionMaker\n", - "from pisa.core.pipeline import Pipeline\n", - "from pisa.analysis.analysis import Analysis\n", - "from pisa import FTYPE, ureg" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to define two different detectors. To make things easy (and use existing cfg files) we set up two 3y DeepCore's but call them `detector1` and `detector2`. In general the Detectors class (just like the DistributionMaker class) accepts the cfg path strings as input, but since we want to modify the Pipelines here we have to initialize them first." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p1_nu = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "p1_mu = Pipeline(\"settings/pipeline/IceCube_3y_muons.cfg\")\n", - "p1_nu.detector_name, p1_mu.detector_name = 'detector1', 'detector1'\n", - "\n", - "p2_nu = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "p2_mu = Pipeline(\"settings/pipeline/IceCube_3y_muons.cfg\")\n", - "p2_nu.detector_name, p2_mu.detector_name = 'detector2', 'detector2'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can initialize the Detectors class. We define all free parameters except the effective area as shared parameters. So there will be two effective areas (one for each detector)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = Detectors([p1_nu, p1_mu, p2_nu, p2_mu], shared_params=['deltam31', 'theta13', 'theta23', 'nue_numu_ratio', 'Barr_uphor_ratio', 'Barr_nu_nubar_ratio', 'delta_index', 'nutau_norm', \n", - " 'nu_nc_norm', 'opt_eff_overall', 'opt_eff_lateral', 'opt_eff_headon', 'ice_scattering', 'ice_absorption', 'atm_muon_scale'])\n", - "# this just turns on profiling\n", - "model.profile = True\n", - "model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our model has a number of free parameters, that will be used in our fit to the data. aeff_scale appears two times because it is not a shared parameter. If a parameter has the same name for two detectors but is not shared, the detector name is added to the parameter for all but the first detector." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.params.free" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The two distribution makers are completely similar but have a different name (as intended)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.distribution_makers[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.distribution_makers[1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The two pipelines are quite different, with most complexity in the neutrino pipeline, that has several `Stage`s and free parameters:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.distribution_makers[0].pipelines[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.distribution_makers[0].pipelines[0].stages[2].params" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "While the muon pipleine is rather simple" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.distribution_makers[0].pipelines[1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Retrieve Outputs\n", - "\n", - "We can get individual outputs from just one pipleine like so. This fetches outputs from the neutrino pipleine, which are 12 maps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "maps = model.distribution_makers[0].pipelines[0].get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "maps.names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "axes = axes.flatten()\n", - "\n", - "for m, ax in zip(maps, axes):\n", - " m.plot(ax=ax)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are interested in just the total expecatation from the full model (all neutrinos + muons), we can do the following:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for o in model.get_outputs(return_sum=True):\n", - " o.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diff plots\n", - "\n", - "Let's explore how a change in one of our nuisance parameters affects the expected counts per bin. Here we choose a *hole ice* parameter and move it a smidge." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# reset all free parameters to put them back to nominal values\n", - "model.reset_free()\n", - "nominal = model.get_outputs(return_sum=True)\n", - "\n", - "# shift one parameter\n", - "model.params.opt_eff_lateral.value = 20\n", - "model.update_params(model.params)\n", - "sys = model.get_outputs(return_sum=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(len(model.distribution_makers)):\n", - " ((nominal[i][0] - sys[i][0])/nominal[i][0]).plot(symm=True, clabel=\"rel. difference\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get Data\n", - "\n", - "We can load the real observed data too. This is a Pipeline with no free parameters, as the data is of course fixed. Similar to before we just use the DeepCore data twice.\n", - "NB: When developping a new analysis you will **not** be allowed to look at the data as we do here before the box opening (c.f. *blindness*)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# real data\n", - "data_maker1 = Pipeline(\"settings/pipeline/IceCube_3y_data.cfg\")\n", - "data_maker1.detector_name = 'detector1'\n", - "\n", - "data_maker2 = Pipeline(\"settings/pipeline/IceCube_3y_data.cfg\")\n", - "data_maker2.detector_name = 'detector2'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_maker1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_maker2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data = [data_maker1.get_outputs(), data_maker2.get_outputs()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig, ax = plt.subplots(2, 3, figsize=(20, 7))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "\n", - "model.reset_free()\n", - "nominal = model.get_outputs(return_sum=True)\n", - "\n", - "for i in range(len(data)):\n", - " data[i].plot(ax=ax[i,0], title=\"Data\")\n", - " nominal[i].plot(ax=ax[i,1], title=\"Model\")\n", - " (data[i] - nominal[i]).plot(ax=ax[i,2], symm=True, title=\"Diff\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fitting\n", - "\n", - "For fitting we need to configure a minimizer, several standard cfgs are available, but you can also define your own.\n", - "For the fit we need to choose a `metric`, and by default, theta23 octants, which are quasi degenerate, are fit seperately, which means two fits are run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ana = Analysis()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# global minimizer\n", - "nlopt_settings = {\n", - " \"method\": \"nlopt\",\n", - " \"method_kwargs\": {\n", - " \"algorithm\": \"NLOPT_GN_CRS2_LM\",\n", - " \"ftol_abs\": 1e-3,\n", - " \"ftol_rel\": 1e-3,\n", - " # other options that can be set here: \n", - " # xtol_abs, xtol_rel, stopval, maxeval, maxtime\n", - " # after maxtime seconds, stop and return best result so far\n", - " \"maxtime\": 500\n", - " },\n", - " \"local_fit_kwargs\": None # no further nesting available\n", - "}\n", - "\n", - "# local minimizer\n", - "local_fit_minuit = {\n", - " \"method\": \"iminuit\",\n", - " \"method_kwargs\": {\n", - " \"errors\": 0.1,\n", - " \"precision\": 1e-14, # default: double precision\n", - " \"tol\": 1e-2, # default: 0.1\n", - " \"run_simplex\": False,\n", - " \"run_migrad\": True\n", - " },\n", - " \"local_fit_kwargs\": None\n", - "}\n", - "\n", - "# octant fit for local minimizer\n", - "fit_octant = {\n", - " \"method\": \"octants\",\n", - " \"method_kwargs\": {\n", - " \"angle\": \"theta23\",\n", - " \"inflection_point\": 45 * ureg.degrees,\n", - " },\n", - " \"local_fit_kwargs\": local_fit_minuit\n", - "}\n", - "\n", - "# complete fit routine\n", - "fit_combi = {\n", - " \"method\": \"staged\",\n", - " \"method_kwargs\": None,\n", - " \"local_fit_kwargs\":[\n", - " nlopt_settings,\n", - " fit_octant,\n", - " ]\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "%%time\n", - "result = ana.fit_recursively(\n", - " data_dist=data,\n", - " hypo_maker=model,\n", - " metric=[\"mod_chi2\", \"mod_chi2\"],\n", - " external_priors_penalty=None,\n", - " **fit_octant\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we can view the bestfit parameters - the result of our fit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "bestfit_params = result['params'].free\n", - "bestfit_params" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# update the model with the bestfit (make a copy here, because we don't want our bestfit params to be affected (NB: stuff is passed by reference in python))\n", - "model.update_params(copy.deepcopy(bestfit_params))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see how good that fit looks like. We here construct signed mod_chi2 maps by hand.\n", - "You can see that after the fit, it improved considerably, and the distribution of chi2 values is now more uniform - not much features can be seen anymore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig, ax = plt.subplots(4, 3, figsize=(20, 14))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "\n", - "bestfit = model.get_outputs(return_sum=True)\n", - "\n", - "for i in range(len(data)):\n", - " data[i].plot(ax=ax[2*i,0], title=\"Data\")\n", - " nominal[i].plot(ax=ax[2*i,1], title=\"Nominal\")\n", - " diff = data[i] - nominal[i]\n", - " (abs(diff)*diff/(nominal[i] + unp.std_devs(nominal[i].hist['total']))).plot(ax=ax[2*i,2], symm=True, title=r\"signed $\\chi^2$\", vmin=-12, vmax=12)\n", - "\n", - " data[i].plot(ax=ax[2*i+1,0], title=\"Data\")\n", - " bestfit[i].plot(ax=ax[2*i+1,1], title=\"Bestfit\")\n", - " diff = data[i] - bestfit[i]\n", - " (abs(diff)*diff/(bestfit[i] + unp.std_devs(bestfit[i].hist['total']))).plot(ax=ax[2*i+1,2], symm=True, title=r\"signed $\\chi^2$\", vmin=-12, vmax=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When checking the chi2 value from the fitted model, you maybe see that it is around 113, while in the minimizer loop we saw it converged to 116. It is important to keep in mind that in the fit we had extended the metric with prior penalty terms. When we add those back we get the identical number as reported in the fit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('detector1')\n", - "print(data[0].metric_total(nominal[0], 'mod_chi2'))\n", - "print(data[0].metric_total(bestfit[0], 'mod_chi2'))\n", - "print('-----')\n", - "print('detector2')\n", - "print(data[1].metric_total(nominal[1], 'mod_chi2'))\n", - "print(data[1].metric_total(bestfit[1], 'mod_chi2'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Evaluating other metrics just for fun (and just for detector1):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for metric in pisa.utils.stats.ALL_METRICS:\n", - " try:\n", - " print('%s = %.3f'%(metric, data[0].metric_total(bestfit[0], metric)))\n", - " except:\n", - " print('%s failed'%metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Adding two detectors and prior penalty terms" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data[0].metric_total(bestfit[0], 'mod_chi2') + data[1].metric_total(bestfit[1], 'mod_chi2') + model.params.priors_penalty('mod_chi2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "result['metric_val']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pisa_examples/README.ipynb b/pisa_examples/README.ipynb deleted file mode 100644 index 5fcd3dec4..000000000 --- a/pisa_examples/README.ipynb +++ /dev/null @@ -1,176 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "[Introduction](pisa/README.md) |\n", - "[Installation](INSTALL.md) |\n", - "[Documentation](http://icecube.wisc.edu/%7Epeller/pisa_docs/index.html) |\n", - "[Terminology](pisa/glossary.md) |\n", - "[License](LICENSE) |\n", - "[Contributors](CONTRIBUTORS.md) |\n", - "[Others' work](EXTERNAL_ATTRIBUTION.md)\n", - "\n", - "PISA is a software written to analyze the results (or expected results) of an experiment based on Monte Carlo simulation.\n", - "\n", - "In particular, PISA was written by and for the IceCube Collaboration for analyses employing the [IceCube Neutrino Observatory](https://icecube.wisc.edu/), including the [DeepCore](https://arxiv.org/abs/1109.6096) and the proposed [PINGU](https://arxiv.org/abs/1401.2046) low-energy in-fill arrays.\n", - "However, any such experiment—or any experiment at all—can make use of PISA for analyzing expected and actual results.\n", - "\n", - "PISA was originally developed to cope with low-statistics Monte Carlo (MC) for PINGU when iterating on multiple proposed geometries by using parameterizations of the MC and operate on histograms of the data rather than directly reweighting the MC (as is traditionally done in high-energy Physics experiments).\n", - "However, PISA's methods apply equally well to high-MC situations, and PISA also performs traditional reweighted-MC analysis as well.\n", - "\n", - "If you use PISA, please cite our publication (e-Print available here: https://arxiv.org/abs/1803.05390):\n", - "```\n", - "\"Computational Techniques for the Analysis of Small Signals\n", - "in High-Statistics Neutrino Oscillation Experiments\"\n", - "IceCube Collaboration - M.G. Aartsen et al. (Mar 14, 2018)\n", - "Published in: Nucl.Instrum.Meth.A 977 (2020) 164332\n", - "```\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Quick start\n", - "\n", - "## Installation\n", - "\n", - "```shell\n", - "git clone git@github.com:IceCubeOpenSource/pisa.git\n", - "cd pisa\n", - "pip install -e .\n", - "```\n", - "\n", - "For detailed installation instructions and common issues see [Installation](INSTALL.md)\n", - "\n", - "## Minimal Example\n", - "\n", - "Producing some oscillograms" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<< PISA is running in single precision (FP32) mode; numba is running on CPU (single core) >>\n" - ] - } - ], - "source": [ - "from pisa.core import Pipeline\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Instantiate a `Pipeline` or multiple pipelines in a `DistributionMaker` using PISA config files" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "template_maker = Pipeline(\"settings/pipeline/osc_example.cfg\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Run the pipleine with nominal settings" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "template_maker.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Get the oscillation probabilities " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "outputs = template_maker.data.get_mapset('prob_mu')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plot some results" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(figsize=(18, 5), ncols=3)\n", - "outputs['nue_cc'].plot(ax=axes[0], cmap='RdYlBu_r', vmin=0, vmax=1);\n", - "outputs['numu_cc'].plot(ax=axes[1], cmap='RdYlBu_r', vmin=0, vmax=1);\n", - "outputs['nutau_cc'].plot(ax=axes[2], cmap='RdYlBu_r', vmin=0, vmax=1);" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pisa_examples/README.md b/pisa_examples/README.md deleted file mode 100644 index 15d2b585b..000000000 --- a/pisa_examples/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# PISA Examples - -For en example of an IceCube oscilaltion analysis, see `IceCube_3y_oscillations_example.ipynb`. \ No newline at end of file diff --git a/pisa_examples/__init__.py b/pisa_examples/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa_examples/pisa_modes.ipynb b/pisa_examples/pisa_modes.ipynb deleted file mode 100644 index 0af1e6c06..000000000 --- a/pisa_examples/pisa_modes.ipynb +++ /dev/null @@ -1,461 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# PISA modes\n", - "\n", - "Stages in PSIA usually have a `calc_mode` and an `apply_mode`, which specify in what representation of the data operations are performed.\n", - "Often calculations can be faster wehn peformed on grids, but we need to be careful in order to ensure that we are not introducing large errors.\n", - "Also note that you can change the modes on runtime, but after doing so need to `setup()` the stage or pipleine again.\n", - "\n", - "If the output of a stage is different than whjat, for example, the next stage needs those to have as inputs, they are automatically translated by PISA. So you can mix and match, but be aware that translations will introduce computational cost and hence may slow things down." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<< PISA is running in double precision (FP64) mode; numba is running on CPU (single core) >>\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from pisa.core.pipeline import Pipeline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will configure our neutrino pipleine in 3 different ways:\n", - "* The standard form with *some* calculation on grids\n", - "* All calculations on an eent-by-event basis (the most correct, but by far slowest way)\n", - "* All calcultions on grids (Usually faster for large smples)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "mixed_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "mixed_modes_model.profile = True" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "events_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "events_modes_model.profile = True\n", - "\n", - "events_modes_model.stages[1].calc_mode = \"events\"\n", - "events_modes_model.stages[2].calc_mode = \"events\"\n", - "events_modes_model.stages[3].calc_mode = \"events\"\n", - "\n", - "events_modes_model.setup()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "grid_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "grid_modes_model.profile = True\n", - "\n", - "true_binning = grid_modes_model.stages[1].calc_mode\n", - "\n", - "grid_modes_model.stages[0].apply_mode = true_binning\n", - "grid_modes_model.stages[1].apply_mode = true_binning\n", - "grid_modes_model.stages[2].apply_mode = true_binning\n", - "grid_modes_model.stages[3].apply_mode = true_binning\n", - "grid_modes_model.stages[4].apply_mode = true_binning\n", - "grid_modes_model.stages[4].calc_mode = true_binning\n", - "grid_modes_model.stages[5].calc_mode = true_binning\n", - "\n", - "grid_modes_model.setup()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 0
2 barr_simple \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 4
3 prob3 \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True True 9 3
4 aeff events events False False True 2 3
5 hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | \"true_allsky_fine\": | events | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | events | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mixed_modes_model" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip events events True True False 1 0
2 barr_simple events events True True False 1 4
3 prob3 events events True True True 9 3
4 aeff events events False False True 2 3
5 hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | events | events | True | True | False | 1 | 0\n", - " 2 | barr_simple | events | events | True | True | False | 1 | 4\n", - " 3 | prob3 | events | events | True | True | True | 9 | 3\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events_modes_model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True False True 0 0
1 honda_ip \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True False 1 0
2 barr_simple \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True False 1 4
3 prob3 \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True True 9 3
4 aeff \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) False False True 2 3
5 hist \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | \"true_allsky_fine\": | True | False | True | 0 | 0\n", - " | | | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 1 | honda_ip | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 4 | aeff | \"true_allsky_fine\": | \"true_allsky_fine\": | False | False | True | 2 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 5 | hist | \"true_allsky_fine\": | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_modes_model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can compare timings. Event-by-event it takes around 8 minutes! The two other modes around 25 seconds." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 7min 28s, sys: 349 ms, total: 7min 28s\n", - "Wall time: 7min 28s\n" - ] - } - ], - "source": [ - "%%time\n", - "events = events_modes_model.get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 23.5 s, sys: 51.9 ms, total: 23.6 s\n", - "Wall time: 23.6 s\n" - ] - } - ], - "source": [ - "%%time\n", - "mixed = mixed_modes_model.get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 26.5 s, sys: 3.95 s, total: 30.4 s\n", - "Wall time: 23.7 s\n" - ] - } - ], - "source": [ - "%%time\n", - "grid = grid_modes_model.get_outputs()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that in this confioguration we probanbly have fine enough grids, such that differences are at the sub-percent level. This may or may not be acceptable for the specific analysis you want to do." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(2, 3, figsize=(20, 7))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "\n", - "e = events.combine_wildcard('*')\n", - "m = mixed.combine_wildcard('*') \n", - "g = grid.combine_wildcard('*') \n", - "\n", - "e.plot(ax=ax[0,0], title=\"Events\")\n", - "m.plot(ax=ax[0,1], title=\"Mixed\")\n", - "((e - m)/e).plot(ax=ax[0,2], symm=True)\n", - "\n", - "e.plot(ax=ax[1,0], title=\"Events\")\n", - "g.plot(ax=ax[1,1], title=\"Grid\")\n", - "((e - g)/e).plot(ax=ax[1,2], symm=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In depth comparison of single maps:" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "axes = axes.flatten()\n", - "\n", - "diff = (events - mixed) / (events + 1e-7)\n", - "\n", - "for m, ax in zip(diff, axes):\n", - " m.plot(ax=ax, symm=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", - "plt.subplots_adjust(hspace=0.5)\n", - "axes = axes.flatten()\n", - "\n", - "diff = (events - grid) / (events + 1e-7)\n", - "\n", - "for m, ax in zip(diff, axes):\n", - " m.plot(ax=ax, symm=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pisa_examples/resources/.gitignore b/pisa_examples/resources/.gitignore deleted file mode 100644 index f935021a8..000000000 --- a/pisa_examples/resources/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!.gitignore diff --git a/pisa_examples/resources/README.md b/pisa_examples/resources/README.md deleted file mode 100644 index 61893f76f..000000000 --- a/pisa_examples/resources/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# pisa\_examples.resources - -Example PISA resources - -To use resources outside of these examples, create a directory outside of the PISA sourcecode and set the `PISA_RESOURCES` environment variable in your shell to point to that directory. - - -## Directory Listing - -| File/directory | Description -| ----------------- | ----------- -| `aeff/` | Data files that define effective areas -| `cross_sections/` | Detector medium neutrino -| `events/` | PISA events HDF5 files -| `flux/` | Neutrino fluxes, e.g. the tables from Honda et al. (2015) -| `osc/` | The Earth density files (PREM) used for computing neutrino oscillations -| `pid/` | Particle identification (PID) data files, e.g. parametersied PID probabilities. -| `priors/` | Pre-defined priors that can be used in analyses, e.g. from nu-fit.org -| `reco/` | Reconstruction resolutions, e.g. parameterised reconstruction kernels -| `settings/` | Contains directories, each for settings for different purposes -| `__init__.py` | File that makes `resources` directory behave as a Python module \ No newline at end of file diff --git a/pisa_examples/resources/__init__.py b/pisa_examples/resources/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa_examples/resources/aeff/vlvnt_aeff_coszen_param.json b/pisa_examples/resources/aeff/vlvnt_aeff_coszen_param.json deleted file mode 100644 index 98c5e3c7d..000000000 --- a/pisa_examples/resources/aeff/vlvnt_aeff_coszen_param.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "nue_cc + numu_cc": "np.poly1d([-0.05, +0.05, -0.05, 1])", - "nuebar_cc + numubar_cc": "np.poly1d([-0.05, +0.05, -0.05, 1])", - "nutau_cc": "np.poly1d([-0.05, +0.05, -0.05, 1])", - "nutaubar_cc": "np.poly1d([-0.05, +0.05, -0.05, 1])", - "nuall_nc": "np.poly1d([-0.05, +0.05, -0.05, 1])", - "nuallbar_nc": "np.poly1d([-0.05, +0.05, -0.05, 1])" -} diff --git a/pisa_examples/resources/aeff/vlvnt_aeff_energy_param.json b/pisa_examples/resources/aeff/vlvnt_aeff_energy_param.json deleted file mode 100644 index 95823593b..000000000 --- a/pisa_examples/resources/aeff/vlvnt_aeff_energy_param.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "nue_cc + numu_cc": "lambda E: 0.7 * 1e-38 * 6e23/0.92 * 1e12 * 1e-4 * 10 * (1 - np.exp(-0.4 * (E - 1))) * E", - "nuebar_cc + numubar_cc": "lambda E: 0.35 * 1e-38 * 6e23/0.92 * 1e12 * 1e-4 * 10 * (1 - np.exp(-0.4 * (E - 1))) * E", - "nutau_cc": { - "energy": [ - 3.5279553277948517, - 3.6030736184862553, - 3.7587885591327708, - 4.092925019648508, - 4.409524695968715, - 5.257096367855491, - 6.038562175536771, - 7.277426132989199, - 8.540135390248798, - 10.293250961649333, - 12.406600783761112, - 14.7171474854482, - 19.321757509381193, - 28.529536611408062, - 40.583675071782324, - 50.787287684956105, - 71.48192065327585, - 92.86530716050049, - 123.91328263885129, - 161.84815777605039, - 210.27008366074597, - 294.3986616893125, - 405.63916687229744, - 489.03467420476625 - ], - "aeff": [ - 2.780912404104278e-09, - 1.3371302212208506e-08, - 4.9197195418719216e-08, - 1.5098802664310796e-07, - 3.0088662884723326e-07, - 9.043654551512399e-07, - 1.723176412949428e-06, - 3.501662802806846e-06, - 5.784055002415512e-06, - 9.506595991185135e-06, - 1.4719542561104787e-05, - 2.062463282634108e-05, - 3.3770416684319295e-05, - 6.407472490853277e-05, - 0.00010590746583255066, - 0.00014467255845751538, - 0.0002251742533958593, - 0.0003115983087614591, - 0.00043750078282665784, - 0.0005938495795421881, - 0.000801754600136105, - 0.00115267627868637, - 0.001610718842334738, - 0.001967962542781719 - ] - }, - "nutaubar_cc": { - "energy": [ - 3.533236245939791, - 3.6064821737635544, - 3.719415307933116, - 3.8568484378713683, - 4.02110467243645, - 4.2814140649779215, - 4.631528068323536, - 5.063703514131364, - 5.991018363472944, - 7.163642074870391, - 9.029094725470104, - 10.854608965226499, - 13.683308061279368, - 17.249643902457, - 23.04276453772583, - 29.66928926512308, - 39.01512172916824, - 50.76919995459224, - 63.67391756298599, - 86.42421619991772, - 121.71375059716317, - 156.73088373169418, - 200.76185680408233, - 293.37001073050465, - 383.79706963408603, - 494.2433179622665 - ], - "aeff": [ - 2.421606128297224e-10, - 1.2706750239331906e-09, - 5.224922405333539e-09, - 1.4485823188878513e-08, - 3.155406737364208e-08, - 7.434369108659137e-08, - 1.5918084695595442e-07, - 3.052899859778921e-07, - 7.242415217404696e-07, - 1.4863742172845053e-06, - 3.0923680361053513e-06, - 5.0505299390070325e-06, - 8.23706097488227e-06, - 1.2800487222102234e-05, - 2.1144489084734002e-05, - 3.11827371060302e-05, - 4.6955061069772605e-05, - 6.745019582946705e-05, - 9.111941658353535e-05, - 0.000136557271156875, - 0.00020727735203584157, - 0.0002806156199061225, - 0.00037789522815399895, - 0.0005809537418385514, - 0.0007894377550988316, - 0.0010179775592991476 - ] - }, - "nuall_nc": "lambda E: 0.25 * 1e-38 * 6e23/0.92 * 1e12 * 1e-4 * 10 * (1 - np.exp(-0.1 * (E - 1))) * E", - "nuallbar_nc": "lambda E: 0.125 * 1e-38 * 6e23/0.92 * 1e12 * 1e-4 * 10 * (1 - np.exp(-0.1 * (E - 1))) * E" -} \ No newline at end of file diff --git a/pisa_examples/resources/background/muongun_primary_cr_uncertainties_coszenith.txt b/pisa_examples/resources/background/muongun_primary_cr_uncertainties_coszenith.txt deleted file mode 100644 index a887119a7..000000000 --- a/pisa_examples/resources/background/muongun_primary_cr_uncertainties_coszenith.txt +++ /dev/null @@ -1,20 +0,0 @@ -0.0250 0.0000 -0.0750 0.0000 -0.1250 0.1300 -0.1750 0.1310 -0.2250 0.1095 -0.2750 0.1002 -0.3250 0.0906 -0.3750 0.0830 -0.4250 0.0788 -0.4750 0.0739 -0.5250 0.0703 -0.5750 0.0660 -0.6250 0.0635 -0.6750 0.0604 -0.7250 0.0586 -0.7750 0.0561 -0.8250 0.0527 -0.8750 0.0504 -0.9250 0.0479 -0.9750 0.0468 diff --git a/pisa_examples/resources/cross_sections/cross_sections.json b/pisa_examples/resources/cross_sections/cross_sections.json deleted file mode 100644 index 309df6f59..000000000 --- a/pisa_examples/resources/cross_sections/cross_sections.json +++ /dev/null @@ -1,26086 +0,0 @@ -{ - "genie_2.6.4": { - "energy": [ - 0.01, - 0.11009009009009008, - 0.21018018018018017, - 0.31027027027027027, - 0.41036036036036033, - 0.5104504504504505, - 0.6105405405405405, - 0.7106306306306306, - 0.8107207207207207, - 0.9108108108108107, - 1.010900900900901, - 1.110990990990991, - 1.211081081081081, - 1.311171171171171, - 1.4112612612612612, - 1.5113513513513512, - 1.6114414414414413, - 1.7115315315315314, - 1.8116216216216214, - 1.9117117117117115, - 2.0118018018018016, - 2.1118918918918914, - 2.2119819819819817, - 2.3120720720720715, - 2.412162162162162, - 2.5122522522522517, - 2.612342342342342, - 2.712432432432432, - 2.812522522522522, - 2.912612612612612, - 3.0127027027027022, - 3.112792792792792, - 3.2128828828828824, - 3.3129729729729727, - 3.4130630630630625, - 3.513153153153153, - 3.6132432432432426, - 3.713333333333333, - 3.8134234234234228, - 3.913513513513513, - 4.013603603603603, - 4.113693693693693, - 4.213783783783783, - 4.313873873873873, - 4.413963963963964, - 4.5140540540540535, - 4.614144144144143, - 4.714234234234233, - 4.814324324324324, - 4.914414414414414, - 5.014504504504504, - 5.114594594594594, - 5.214684684684684, - 5.314774774774774, - 5.414864864864864, - 5.514954954954955, - 5.615045045045044, - 5.715135135135134, - 5.815225225225224, - 5.915315315315315, - 6.015405405405405, - 6.1154954954954945, - 6.215585585585584, - 6.315675675675675, - 6.415765765765765, - 6.515855855855855, - 6.6159459459459455, - 6.716036036036035, - 6.816126126126125, - 6.916216216216215, - 7.016306306306306, - 7.116396396396396, - 7.2164864864864855, - 7.316576576576575, - 7.416666666666666, - 7.516756756756756, - 7.616846846846846, - 7.716936936936936, - 7.817027027027026, - 7.917117117117116, - 8.017207207207207, - 8.117297297297297, - 8.217387387387387, - 8.317477477477476, - 8.417567567567566, - 8.517657657657656, - 8.617747747747746, - 8.717837837837838, - 8.817927927927927, - 8.918018018018017, - 9.018108108108107, - 9.118198198198197, - 9.218288288288287, - 9.318378378378377, - 9.418468468468467, - 9.518558558558558, - 9.618648648648648, - 9.718738738738738, - 9.818828828828828, - 9.918918918918918, - 10.019009009009007, - 10.119099099099097, - 10.219189189189189, - 10.319279279279279, - 10.419369369369369, - 10.519459459459458, - 10.619549549549548, - 10.719639639639638, - 10.819729729729728, - 10.919819819819818, - 11.01990990990991, - 11.12, - 11.220090090090089, - 11.320180180180179, - 11.420270270270269, - 11.520360360360359, - 11.620450450450448, - 11.72054054054054, - 11.82063063063063, - 11.92072072072072, - 12.02081081081081, - 12.1209009009009, - 12.22099099099099, - 12.32108108108108, - 12.421171171171169, - 12.52126126126126, - 12.62135135135135, - 12.72144144144144, - 12.82153153153153, - 12.92162162162162, - 13.02171171171171, - 13.1218018018018, - 13.221891891891891, - 13.321981981981981, - 13.422072072072071, - 13.52216216216216, - 13.62225225225225, - 13.72234234234234, - 13.82243243243243, - 13.92252252252252, - 14.022612612612612, - 14.122702702702702, - 14.222792792792792, - 14.322882882882881, - 14.422972972972971, - 14.523063063063061, - 14.623153153153151, - 14.723243243243243, - 14.823333333333332, - 14.923423423423422, - 15.023513513513512, - 15.123603603603602, - 15.223693693693692, - 15.323783783783782, - 15.423873873873871, - 15.523963963963963, - 15.624054054054053, - 15.724144144144143, - 15.824234234234233, - 15.924324324324322, - 16.024414414414416, - 16.124504504504504, - 16.224594594594596, - 16.324684684684684, - 16.424774774774775, - 16.524864864864863, - 16.624954954954955, - 16.725045045045047, - 16.825135135135135, - 16.925225225225226, - 17.025315315315314, - 17.125405405405406, - 17.225495495495494, - 17.325585585585586, - 17.425675675675677, - 17.525765765765765, - 17.625855855855857, - 17.725945945945945, - 17.826036036036037, - 17.926126126126125, - 18.026216216216216, - 18.126306306306308, - 18.226396396396396, - 18.326486486486488, - 18.426576576576576, - 18.526666666666667, - 18.626756756756755, - 18.726846846846847, - 18.826936936936935, - 18.927027027027027, - 19.02711711711712, - 19.127207207207206, - 19.227297297297298, - 19.327387387387386, - 19.427477477477478, - 19.527567567567566, - 19.627657657657657, - 19.72774774774775, - 19.827837837837837, - 19.92792792792793, - 20.028018018018017, - 20.12810810810811, - 20.228198198198196, - 20.328288288288288, - 20.42837837837838, - 20.528468468468468, - 20.62855855855856, - 20.728648648648647, - 20.82873873873874, - 20.928828828828827, - 21.02891891891892, - 21.12900900900901, - 21.2290990990991, - 21.32918918918919, - 21.429279279279278, - 21.52936936936937, - 21.629459459459458, - 21.72954954954955, - 21.829639639639637, - 21.92972972972973, - 22.02981981981982, - 22.12990990990991, - 22.23, - 22.33009009009009, - 22.43018018018018, - 22.530270270270268, - 22.63036036036036, - 22.73045045045045, - 22.83054054054054, - 22.93063063063063, - 23.03072072072072, - 23.13081081081081, - 23.2309009009009, - 23.33099099099099, - 23.431081081081082, - 23.53117117117117, - 23.631261261261262, - 23.73135135135135, - 23.83144144144144, - 23.93153153153153, - 24.03162162162162, - 24.131711711711713, - 24.2318018018018, - 24.331891891891892, - 24.43198198198198, - 24.532072072072072, - 24.63216216216216, - 24.732252252252252, - 24.83234234234234, - 24.93243243243243, - 25.032522522522523, - 25.13261261261261, - 25.232702702702703, - 25.33279279279279, - 25.432882882882883, - 25.53297297297297, - 25.633063063063062, - 25.733153153153154, - 25.833243243243242, - 25.933333333333334, - 26.03342342342342, - 26.133513513513513, - 26.2336036036036, - 26.333693693693693, - 26.433783783783785, - 26.533873873873873, - 26.633963963963964, - 26.734054054054052, - 26.834144144144144, - 26.934234234234232, - 27.034324324324324, - 27.13441441441441, - 27.234504504504503, - 27.334594594594595, - 27.434684684684683, - 27.534774774774775, - 27.634864864864863, - 27.734954954954954, - 27.835045045045042, - 27.935135135135134, - 28.035225225225226, - 28.135315315315314, - 28.235405405405405, - 28.335495495495493, - 28.435585585585585, - 28.535675675675673, - 28.635765765765765, - 28.735855855855856, - 28.835945945945944, - 28.936036036036036, - 29.036126126126124, - 29.136216216216216, - 29.236306306306304, - 29.336396396396395, - 29.436486486486487, - 29.536576576576575, - 29.636666666666667, - 29.736756756756755, - 29.836846846846846, - 29.936936936936934, - 30.037027027027026, - 30.137117117117114, - 30.237207207207206, - 30.337297297297297, - 30.437387387387385, - 30.537477477477477, - 30.637567567567565, - 30.737657657657657, - 30.837747747747745, - 30.937837837837836, - 31.037927927927928, - 31.138018018018016, - 31.238108108108108, - 31.338198198198196, - 31.438288288288287, - 31.538378378378376, - 31.638468468468467, - 31.73855855855856, - 31.838648648648647, - 31.93873873873874, - 32.03882882882883, - 32.13891891891891, - 32.239009009009, - 32.339099099099094, - 32.439189189189186, - 32.53927927927928, - 32.63936936936936, - 32.739459459459454, - 32.839549549549545, - 32.93963963963964, - 33.03972972972972, - 33.13981981981981, - 33.239909909909905, - 33.339999999999996, - 33.44009009009009, - 33.54018018018017, - 33.640270270270264, - 33.740360360360356, - 33.84045045045045, - 33.94054054054054, - 34.04063063063062, - 34.140720720720715, - 34.24081081081081, - 34.3409009009009, - 34.44099099099098, - 34.541081081081074, - 34.641171171171166, - 34.74126126126126, - 34.84135135135135, - 34.941441441441434, - 35.041531531531525, - 35.14162162162162, - 35.24171171171171, - 35.34180180180179, - 35.441891891891885, - 35.541981981981976, - 35.64207207207207, - 35.74216216216216, - 35.842252252252244, - 35.942342342342336, - 36.04243243243243, - 36.14252252252252, - 36.24261261261261, - 36.342702702702695, - 36.44279279279279, - 36.54288288288288, - 36.64297297297297, - 36.743063063063055, - 36.843153153153146, - 36.94324324324324, - 37.04333333333333, - 37.14342342342342, - 37.243513513513506, - 37.3436036036036, - 37.44369369369369, - 37.54378378378378, - 37.643873873873865, - 37.74396396396396, - 37.84405405405405, - 37.94414414414414, - 38.04423423423423, - 38.144324324324316, - 38.24441441441441, - 38.3445045045045, - 38.44459459459459, - 38.54468468468468, - 38.64477477477477, - 38.74486486486486, - 38.84495495495495, - 38.94504504504504, - 39.045135135135126, - 39.14522522522522, - 39.24531531531531, - 39.3454054054054, - 39.44549549549549, - 39.54558558558558, - 39.64567567567567, - 39.74576576576576, - 39.84585585585585, - 39.94594594594594, - 40.04603603603603, - 40.14612612612612, - 40.24621621621621, - 40.3463063063063, - 40.44639639639639, - 40.54648648648648, - 40.64657657657657, - 40.74666666666666, - 40.846756756756754, - 40.94684684684684, - 41.04693693693693, - 41.14702702702702, - 41.247117117117114, - 41.3472072072072, - 41.44729729729729, - 41.54738738738738, - 41.64747747747747, - 41.747567567567565, - 41.84765765765765, - 41.94774774774774, - 42.04783783783783, - 42.147927927927924, - 42.248018018018016, - 42.3481081081081, - 42.44819819819819, - 42.54828828828828, - 42.648378378378375, - 42.74846846846846, - 42.84855855855855, - 42.94864864864864, - 43.048738738738734, - 43.148828828828826, - 43.24891891891891, - 43.349009009009, - 43.449099099099094, - 43.549189189189185, - 43.64927927927927, - 43.74936936936936, - 43.84945945945945, - 43.949549549549545, - 44.049639639639636, - 44.14972972972972, - 44.24981981981981, - 44.349909909909904, - 44.449999999999996, - 44.55009009009009, - 44.65018018018017, - 44.75027027027026, - 44.850360360360355, - 44.95045045045045, - 45.05054054054053, - 45.15063063063062, - 45.250720720720714, - 45.350810810810806, - 45.4509009009009, - 45.55099099099098, - 45.651081081081074, - 45.751171171171165, - 45.85126126126126, - 45.95135135135134, - 46.05144144144143, - 46.151531531531525, - 46.25162162162162, - 46.35171171171171, - 46.45180180180179, - 46.551891891891884, - 46.651981981981976, - 46.75207207207207, - 46.85216216216216, - 46.952252252252244, - 47.052342342342335, - 47.15243243243243, - 47.25252252252252, - 47.3526126126126, - 47.452702702702695, - 47.552792792792786, - 47.65288288288288, - 47.75297297297297, - 47.853063063063054, - 47.953153153153146, - 48.05324324324324, - 48.15333333333333, - 48.25342342342342, - 48.353513513513505, - 48.4536036036036, - 48.55369369369369, - 48.65378378378378, - 48.753873873873864, - 48.853963963963956, - 48.95405405405405, - 49.05414414414414, - 49.15423423423423, - 49.254324324324315, - 49.35441441441441, - 49.4545045045045, - 49.55459459459459, - 49.654684684684675, - 49.754774774774766, - 49.85486486486486, - 49.95495495495495, - 50.05504504504504, - 50.155135135135126, - 50.25522522522522, - 50.35531531531531, - 50.4554054054054, - 50.55549549549549, - 50.65558558558558, - 50.75567567567567, - 50.85576576576576, - 50.95585585585585, - 51.055945945945936, - 51.15603603603603, - 51.25612612612612, - 51.35621621621621, - 51.4563063063063, - 51.55639639639639, - 51.65648648648648, - 51.75657657657657, - 51.85666666666666, - 51.95675675675675, - 52.05684684684684, - 52.15693693693693, - 52.25702702702702, - 52.35711711711711, - 52.4572072072072, - 52.55729729729729, - 52.65738738738738, - 52.75747747747747, - 52.857567567567564, - 52.95765765765765, - 53.05774774774774, - 53.15783783783783, - 53.25792792792792, - 53.35801801801801, - 53.4581081081081, - 53.55819819819819, - 53.65828828828828, - 53.758378378378374, - 53.85846846846846, - 53.95855855855855, - 54.05864864864864, - 54.158738738738734, - 54.25882882882882, - 54.35891891891891, - 54.459009009009, - 54.55909909909909, - 54.659189189189185, - 54.75927927927927, - 54.85936936936936, - 54.95945945945945, - 55.059549549549544, - 55.159639639639636, - 55.25972972972972, - 55.35981981981981, - 55.4599099099099, - 55.559999999999995, - 55.66009009009008, - 55.76018018018017, - 55.86027027027026, - 55.960360360360355, - 56.060450450450446, - 56.16054054054053, - 56.26063063063062, - 56.360720720720714, - 56.460810810810806, - 56.5609009009009, - 56.66099099099098, - 56.76108108108107, - 56.861171171171165, - 56.96126126126126, - 57.06135135135134, - 57.16144144144143, - 57.261531531531524, - 57.361621621621616, - 57.46171171171171, - 57.56180180180179, - 57.661891891891884, - 57.761981981981975, - 57.86207207207207, - 57.96216216216215, - 58.06225225225224, - 58.162342342342335, - 58.262432432432426, - 58.36252252252252, - 58.4626126126126, - 58.562702702702694, - 58.662792792792786, - 58.76288288288288, - 58.86297297297297, - 58.96306306306305, - 59.063153153153145, - 59.16324324324324, - 59.26333333333333, - 59.36342342342341, - 59.463513513513504, - 59.563603603603596, - 59.66369369369369, - 59.76378378378378, - 59.863873873873864, - 59.963963963963955, - 60.06405405405405, - 60.16414414414414, - 60.26423423423422, - 60.364324324324315, - 60.46441441441441, - 60.5645045045045, - 60.66459459459459, - 60.764684684684674, - 60.864774774774766, - 60.96486486486486, - 61.06495495495495, - 61.16504504504504, - 61.265135135135125, - 61.36522522522522, - 61.46531531531531, - 61.5654054054054, - 61.665495495495485, - 61.765585585585576, - 61.86567567567567, - 61.96576576576576, - 62.06585585585585, - 62.165945945945936, - 62.26603603603603, - 62.36612612612612, - 62.46621621621621, - 62.5663063063063, - 62.66639639639639, - 62.76648648648648, - 62.86657657657657, - 62.96666666666666, - 63.066756756756746, - 63.16684684684684, - 63.26693693693693, - 63.36702702702702, - 63.46711711711711, - 63.5672072072072, - 63.66729729729729, - 63.76738738738738, - 63.86747747747747, - 63.967567567567556, - 64.06765765765766, - 64.16774774774775, - 64.26783783783783, - 64.36792792792792, - 64.46801801801801, - 64.5681081081081, - 64.6681981981982, - 64.76828828828829, - 64.86837837837838, - 64.96846846846847, - 65.06855855855856, - 65.16864864864864, - 65.26873873873873, - 65.36882882882882, - 65.46891891891892, - 65.56900900900901, - 65.6690990990991, - 65.76918918918919, - 65.86927927927928, - 65.96936936936937, - 66.06945945945945, - 66.16954954954954, - 66.26963963963964, - 66.36972972972973, - 66.46981981981982, - 66.56990990990991, - 66.67, - 66.7700900900901, - 66.87018018018018, - 66.97027027027026, - 67.07036036036035, - 67.17045045045045, - 67.27054054054054, - 67.37063063063063, - 67.47072072072072, - 67.57081081081081, - 67.6709009009009, - 67.770990990991, - 67.87108108108109, - 67.97117117117116, - 68.07126126126126, - 68.17135135135135, - 68.27144144144144, - 68.37153153153153, - 68.47162162162162, - 68.57171171171171, - 68.6718018018018, - 68.7718918918919, - 68.87198198198197, - 68.97207207207207, - 69.07216216216216, - 69.17225225225225, - 69.27234234234234, - 69.37243243243243, - 69.47252252252252, - 69.57261261261262, - 69.67270270270271, - 69.77279279279279, - 69.87288288288288, - 69.97297297297297, - 70.07306306306306, - 70.17315315315315, - 70.27324324324324, - 70.37333333333333, - 70.47342342342343, - 70.57351351351352, - 70.6736036036036, - 70.77369369369369, - 70.87378378378378, - 70.97387387387387, - 71.07396396396396, - 71.17405405405405, - 71.27414414414415, - 71.37423423423424, - 71.47432432432433, - 71.5744144144144, - 71.6745045045045, - 71.77459459459459, - 71.87468468468468, - 71.97477477477477, - 72.07486486486486, - 72.17495495495496, - 72.27504504504505, - 72.37513513513514, - 72.47522522522523, - 72.57531531531531, - 72.6754054054054, - 72.77549549549549, - 72.87558558558558, - 72.97567567567567, - 73.07576576576577, - 73.17585585585586, - 73.27594594594595, - 73.37603603603604, - 73.47612612612612, - 73.57621621621621, - 73.6763063063063, - 73.7763963963964, - 73.87648648648648, - 73.97657657657658, - 74.07666666666667, - 74.17675675675676, - 74.27684684684685, - 74.37693693693693, - 74.47702702702702, - 74.57711711711711, - 74.6772072072072, - 74.7772972972973, - 74.87738738738739, - 74.97747747747748, - 75.07756756756757, - 75.17765765765766, - 75.27774774774774, - 75.37783783783783, - 75.47792792792792, - 75.57801801801801, - 75.6781081081081, - 75.7781981981982, - 75.87828828828829, - 75.97837837837838, - 76.07846846846847, - 76.17855855855856, - 76.27864864864864, - 76.37873873873873, - 76.47882882882882, - 76.57891891891892, - 76.67900900900901, - 76.7790990990991, - 76.87918918918919, - 76.97927927927928, - 77.07936936936937, - 77.17945945945945, - 77.27954954954954, - 77.37963963963963, - 77.47972972972973, - 77.57981981981982, - 77.67990990990991, - 77.78, - 77.88009009009009, - 77.98018018018018, - 78.08027027027026, - 78.18036036036035, - 78.28045045045045, - 78.38054054054054, - 78.48063063063063, - 78.58072072072072, - 78.68081081081081, - 78.7809009009009, - 78.880990990991, - 78.98108108108107, - 79.08117117117116, - 79.18126126126126, - 79.28135135135135, - 79.38144144144144, - 79.48153153153153, - 79.58162162162162, - 79.68171171171171, - 79.7818018018018, - 79.88189189189188, - 79.98198198198197, - 80.08207207207207, - 80.18216216216216, - 80.28225225225225, - 80.38234234234234, - 80.48243243243243, - 80.58252252252252, - 80.68261261261262, - 80.78270270270271, - 80.88279279279278, - 80.98288288288288, - 81.08297297297297, - 81.18306306306306, - 81.28315315315315, - 81.38324324324324, - 81.48333333333333, - 81.58342342342343, - 81.68351351351352, - 81.7836036036036, - 81.88369369369369, - 81.98378378378378, - 82.08387387387387, - 82.18396396396396, - 82.28405405405405, - 82.38414414414414, - 82.48423423423424, - 82.58432432432433, - 82.6844144144144, - 82.7845045045045, - 82.88459459459459, - 82.98468468468468, - 83.08477477477477, - 83.18486486486486, - 83.28495495495496, - 83.38504504504505, - 83.48513513513514, - 83.58522522522522, - 83.68531531531531, - 83.7854054054054, - 83.88549549549549, - 83.98558558558558, - 84.08567567567567, - 84.18576576576577, - 84.28585585585586, - 84.38594594594595, - 84.48603603603604, - 84.58612612612612, - 84.68621621621621, - 84.7863063063063, - 84.88639639639639, - 84.98648648648648, - 85.08657657657658, - 85.18666666666667, - 85.28675675675676, - 85.38684684684685, - 85.48693693693693, - 85.58702702702702, - 85.68711711711711, - 85.7872072072072, - 85.8872972972973, - 85.98738738738739, - 86.08747747747748, - 86.18756756756757, - 86.28765765765766, - 86.38774774774774, - 86.48783783783783, - 86.58792792792792, - 86.68801801801801, - 86.7881081081081, - 86.8881981981982, - 86.98828828828829, - 87.08837837837838, - 87.18846846846847, - 87.28855855855855, - 87.38864864864864, - 87.48873873873873, - 87.58882882882882, - 87.68891891891892, - 87.789009009009, - 87.8890990990991, - 87.98918918918919, - 88.08927927927928, - 88.18936936936937, - 88.28945945945945, - 88.38954954954954, - 88.48963963963963, - 88.58972972972973, - 88.68981981981982, - 88.78990990990991, - 88.89, - 88.99009009009009, - 89.09018018018018, - 89.19027027027026, - 89.29036036036035, - 89.39045045045044, - 89.49054054054054, - 89.59063063063063, - 89.69072072072072, - 89.79081081081081, - 89.8909009009009, - 89.990990990991, - 90.09108108108107, - 90.19117117117116, - 90.29126126126125, - 90.39135135135135, - 90.49144144144144, - 90.59153153153153, - 90.69162162162162, - 90.79171171171171, - 90.8918018018018, - 90.99189189189188, - 91.09198198198197, - 91.19207207207207, - 91.29216216216216, - 91.39225225225225, - 91.49234234234234, - 91.59243243243243, - 91.69252252252252, - 91.79261261261261, - 91.89270270270269, - 91.99279279279278, - 92.09288288288288, - 92.19297297297297, - 92.29306306306306, - 92.39315315315315, - 92.49324324324324, - 92.59333333333333, - 92.69342342342343, - 92.79351351351352, - 92.8936036036036, - 92.99369369369369, - 93.09378378378378, - 93.19387387387387, - 93.29396396396396, - 93.39405405405405, - 93.49414414414414, - 93.59423423423424, - 93.69432432432433, - 93.7944144144144, - 93.8945045045045, - 93.99459459459459, - 94.09468468468468, - 94.19477477477477, - 94.29486486486486, - 94.39495495495495, - 94.49504504504505, - 94.59513513513514, - 94.69522522522522, - 94.7953153153153, - 94.8954054054054, - 94.99549549549549, - 95.09558558558558, - 95.19567567567567, - 95.29576576576576, - 95.39585585585586, - 95.49594594594595, - 95.59603603603603, - 95.69612612612612, - 95.79621621621621, - 95.8963063063063, - 95.99639639639639, - 96.09648648648648, - 96.19657657657658, - 96.29666666666667, - 96.39675675675676, - 96.49684684684685, - 96.59693693693693, - 96.69702702702702, - 96.79711711711711, - 96.8972072072072, - 96.9972972972973, - 97.09738738738739, - 97.19747747747748, - 97.29756756756757, - 97.39765765765766, - 97.49774774774774, - 97.59783783783783, - 97.69792792792792, - 97.79801801801801, - 97.8981081081081, - 97.9981981981982, - 98.09828828828829, - 98.19837837837838, - 98.29846846846847, - 98.39855855855855, - 98.49864864864864, - 98.59873873873873, - 98.69882882882882, - 98.79891891891891, - 98.899009009009, - 98.9990990990991, - 99.09918918918919, - 99.19927927927928, - 99.29936936936936, - 99.39945945945945, - 99.49954954954954, - 99.59963963963963, - 99.69972972972973, - 99.79981981981982, - 99.89990990990991, - 100.0 - ], - "xsec": { - "nue": { - "cc": [ - 1.729303807056242e-46, - 3.646717587466001e-43, - 1.7604026806445845e-42, - 3.5497936148939525e-42, - 5.314622206422163e-42, - 7.366606184197832e-42, - 9.3984963926644e-42, - 1.1310020133452589e-41, - 1.3080720751618358e-41, - 1.4724590086092677e-41, - 1.6307538441587299e-41, - 1.7849580297929538e-41, - 1.9371728338647348e-41, - 2.0790203579791968e-41, - 2.2147104307000523e-41, - 2.349858644770579e-41, - 2.4767280718069847e-41, - 2.5992871255815235e-41, - 2.7251240001948305e-41, - 2.845106965068632e-41, - 2.968724001691415e-41, - 3.092415334490414e-41, - 3.2127427307403993e-41, - 3.327319955325056e-41, - 3.4407514158209436e-41, - 3.5616220801443454e-41, - 3.6829813712097664e-41, - 3.802077588209346e-41, - 3.924505674112731e-41, - 4.0527377510316975e-41, - 4.1769771280777734e-41, - 4.2900508791433567e-41, - 4.4032516039097815e-41, - 4.527119895884419e-41, - 4.655739291192303e-41, - 4.777231986627037e-41, - 4.888638548298893e-41, - 4.99983987946611e-41, - 5.120030030212144e-41, - 5.250585133814476e-41, - 5.381263962353502e-41, - 5.506975862102958e-41, - 5.623367656806685e-41, - 5.732459328456925e-41, - 5.835294773278592e-41, - 5.93487231042314e-41, - 6.040906729171279e-41, - 6.158308444657679e-41, - 6.286869779481402e-41, - 6.419442061433833e-41, - 6.549158194677583e-41, - 6.671801629473979e-41, - 6.786404595613426e-41, - 6.896563368727597e-41, - 7.004826996809515e-41, - 7.112620102296556e-41, - 7.222906483647865e-41, - 7.336390613076515e-41, - 7.454448941140027e-41, - 7.577766614563886e-41, - 7.702981943493665e-41, - 7.828268806077637e-41, - 7.950919295808643e-41, - 8.069164063852432e-41, - 8.182641407666746e-41, - 8.294199322095608e-41, - 8.405780657578239e-41, - 8.517799253888591e-41, - 8.631534681798894e-41, - 8.746770576926445e-41, - 8.862934472108466e-41, - 8.979561261612178e-41, - 9.095345274916743e-41, - 9.209145573707129e-41, - 9.323274295446438e-41, - 9.43765423327299e-41, - 9.5537210003557e-41, - 9.672766437648644e-41, - 9.795771654948147e-41, - 9.92307344258965e-41, - 1.0052960342378684e-40, - 1.0183221064664073e-40, - 1.0312364576156687e-40, - 1.0441113658226032e-40, - 1.0565500531438417e-40, - 1.0684648690904092e-40, - 1.0801032193436223e-40, - 1.0914432759651487e-40, - 1.1025846411742434e-40, - 1.1135358331379156e-40, - 1.1244381639391524e-40, - 1.135520403794892e-40, - 1.1467004063282147e-40, - 1.1579726811245626e-40, - 1.169362050434395e-40, - 1.1808735306143326e-40, - 1.1924761352516484e-40, - 1.2041830310381583e-40, - 1.2160294337362702e-40, - 1.2279900532991791e-40, - 1.2399793820946165e-40, - 1.2519908469733204e-40, - 1.264059221144775e-40, - 1.2760429270277884e-40, - 1.287802486566202e-40, - 1.2994101168370839e-40, - 1.311008992274422e-40, - 1.3225606067502333e-40, - 1.3340589808079497e-40, - 1.3455894601300593e-40, - 1.357287311440808e-40, - 1.3692117934212198e-40, - 1.3812791272427654e-40, - 1.3934417979983882e-40, - 1.405740814003621e-40, - 1.4181960143729763e-40, - 1.4307508212176953e-40, - 1.4433745416165958e-40, - 1.4560231702727734e-40, - 1.468596665282274e-40, - 1.4810810285073489e-40, - 1.4934491148505457e-40, - 1.505683120635593e-40, - 1.5177669242431046e-40, - 1.5296953233682058e-40, - 1.5415024054682697e-40, - 1.5532353717064506e-40, - 1.56492303930884e-40, - 1.5765763909268829e-40, - 1.5882015586100086e-40, - 1.5997693063365194e-40, - 1.6113007865275648e-40, - 1.622823165664325e-40, - 1.63430398654478e-40, - 1.6457767800188306e-40, - 1.657311940305494e-40, - 1.6688727077490686e-40, - 1.6804076857833029e-40, - 1.6919214035453394e-40, - 1.7034665014092348e-40, - 1.7150907642965505e-40, - 1.726751371345223e-40, - 1.7383887327237457e-40, - 1.7500055695976872e-40, - 1.761658965733459e-40, - 1.7733720647099192e-40, - 1.7851080088141663e-40, - 1.7968151961398291e-40, - 1.8085072150024728e-40, - 1.8202753800189643e-40, - 1.832179410515843e-40, - 1.844183960730184e-40, - 1.8562143551516345e-40, - 1.868224728709703e-40, - 1.8802273141590082e-40, - 1.8922673280005173e-40, - 1.904340638776176e-40, - 1.9163935355837165e-40, - 1.9283849056363016e-40, - 1.9403226732021692e-40, - 1.9522387434951255e-40, - 1.9641352243662878e-40, - 1.975996325223731e-40, - 1.9878225033813616e-40, - 1.9996234835942464e-40, - 2.011396996731312e-40, - 2.023137674908951e-40, - 2.0348426320702975e-40, - 2.046507051821552e-40, - 2.0581418823823876e-40, - 2.0697645903030264e-40, - 2.081398431810712e-40, - 2.09305451246896e-40, - 2.1047029280583754e-40, - 2.1163425281412577e-40, - 2.1279960717373805e-40, - 2.1396657855034257e-40, - 2.1513634217029224e-40, - 2.1630921309336438e-40, - 2.1748630386392872e-40, - 2.186692990586627e-40, - 2.1985806342210124e-40, - 2.2105217872729854e-40, - 2.2225211349276484e-40, - 2.2345693306976533e-40, - 2.246645747619985e-40, - 2.2587484828985044e-40, - 2.270871306523047e-40, - 2.2830290332362154e-40, - 2.2952523689260596e-40, - 2.307552058397447e-40, - 2.3198979728338397e-40, - 2.3322343542178444e-40, - 2.344511061574421e-40, - 2.3567098349853073e-40, - 2.368835108073326e-40, - 2.3808828624691393e-40, - 2.392835365541691e-40, - 2.404660197222771e-40, - 2.4163511271758997e-40, - 2.4279202052413895e-40, - 2.439386631533821e-40, - 2.4507554119848145e-40, - 2.462030649106932e-40, - 2.473203854181302e-40, - 2.4842881197901203e-40, - 2.495322258546705e-40, - 2.5063490459309144e-40, - 2.517393082863906e-40, - 2.528479025937575e-40, - 2.539632795103832e-40, - 2.5508740030386726e-40, - 2.5622180798009897e-40, - 2.5736778748741532e-40, - 2.585269874240287e-40, - 2.5970211242039203e-40, - 2.6089585171190335e-40, - 2.6210971738299826e-40, - 2.6334407771102387e-40, - 2.6459790329821066e-40, - 2.6586703265685365e-40, - 2.6714530265750674e-40, - 2.6842702553849604e-40, - 2.697111939572932e-40, - 2.7099862034573013e-40, - 2.7228864071526885e-40, - 2.735791693280902e-40, - 2.7486760300397066e-40, - 2.7615099720659668e-40, - 2.7742643236604997e-40, - 2.786923946066343e-40, - 2.7994715135863544e-40, - 2.8118872343134935e-40, - 2.824147663895804e-40, - 2.8362274907949694e-40, - 2.848103647607204e-40, - 2.8597807774672995e-40, - 2.8712953416210842e-40, - 2.8826816057519505e-40, - 2.8939687530219723e-40, - 2.905177917889987e-40, - 2.9163140077271954e-40, - 2.927374578135797e-40, - 2.938366204066563e-40, - 2.949316692510115e-40, - 2.9602566599900194e-40, - 2.9712057931583387e-40, - 2.9821764984138333e-40, - 2.9931771462248982e-40, - 3.004210583750824e-40, - 3.0152804044943096e-40, - 3.026406101076257e-40, - 3.037616371657676e-40, - 3.0489307787777663e-40, - 3.0603353216347197e-40, - 3.0718024022824594e-40, - 3.083313002630052e-40, - 3.094860709351819e-40, - 3.1064647365700726e-40, - 3.118151254835882e-40, - 3.1299449681412804e-40, - 3.1418488457763835e-40, - 3.153836914704683e-40, - 3.1658777825557174e-40, - 3.1779376962069795e-40, - 3.19000331540991e-40, - 3.2020884668482602e-40, - 3.2142127070488797e-40, - 3.226387928814433e-40, - 3.2386014964424903e-40, - 3.250830304585362e-40, - 3.263054403306156e-40, - 3.2752624513440716e-40, - 3.2874627578113854e-40, - 3.299667847350466e-40, - 3.31188826384354e-40, - 3.3241308287763967e-40, - 3.336387441955455e-40, - 3.348643805258908e-40, - 3.3608811543728647e-40, - 3.373080961577721e-40, - 3.385244664094643e-40, - 3.3973857243914065e-40, - 3.4095142163970476e-40, - 3.4216330833608318e-40, - 3.433738457986994e-40, - 3.445826379190366e-40, - 3.457895730682777e-40, - 3.4699454506518142e-40, - 3.4819744595455407e-40, - 3.4939839139245314e-40, - 3.5059713179803673e-40, - 3.5179341448973393e-40, - 3.5298730567522054e-40, - 3.541782470534495e-40, - 3.553657208469599e-40, - 3.565494495333572e-40, - 3.5772875352819907e-40, - 3.589035776344679e-40, - 3.6007494248506495e-40, - 3.612445707011872e-40, - 3.6241445743316086e-40, - 3.6358528932688312e-40, - 3.647555467677875e-40, - 3.6592355445868063e-40, - 3.67088397418318e-40, - 3.6824992492583485e-40, - 3.694094715207173e-40, - 3.705685644428427e-40, - 3.717289625665989e-40, - 3.728930429461581e-40, - 3.740617057365934e-40, - 3.752336797509963e-40, - 3.764070322447067e-40, - 3.775800591356938e-40, - 3.787520325046826e-40, - 3.799235830938116e-40, - 3.810954899473927e-40, - 3.822684060580191e-40, - 3.834432472036251e-40, - 3.846204698656629e-40, - 3.857995999334832e-40, - 3.869800085936653e-40, - 3.88161215129258e-40, - 3.893428191197588e-40, - 3.905246273751077e-40, - 3.917066836418042e-40, - 3.9288925811501534e-40, - 3.9407299390091575e-40, - 3.952584430900812e-40, - 3.964454697133503e-40, - 3.976333402831798e-40, - 3.9882133501935505e-40, - 4.000091781333881e-40, - 4.01196895978836e-40, - 4.023846750867704e-40, - 4.035724222846465e-40, - 4.047599969176958e-40, - 4.0594762406248176e-40, - 4.071360110838897e-40, - 4.0832574291718235e-40, - 4.095168380316199e-40, - 4.107091331586662e-40, - 4.1190249600868844e-40, - 4.130966745203193e-40, - 4.14291309391784e-40, - 4.154861557441698e-40, - 4.1668101183942275e-40, - 4.178756726590657e-40, - 4.1907012726834875e-40, - 4.202646234643982e-40, - 4.214593880473762e-40, - 4.226548165736076e-40, - 4.2385137297796586e-40, - 4.2504926389681635e-40, - 4.2624811380584516e-40, - 4.274474899622083e-40, - 4.286470156075978e-40, - 4.298464533132864e-40, - 4.310456341517385e-40, - 4.322445779274491e-40, - 4.334433625011955e-40, - 4.346420933188222e-40, - 4.358409282371681e-40, - 4.370400213933785e-40, - 4.3823918571630285e-40, - 4.394380199928655e-40, - 4.4063619264017575e-40, - 4.418333957793092e-40, - 4.4302932114555695e-40, - 4.442238186401743e-40, - 4.454170760442098e-40, - 4.4660930078622185e-40, - 4.4780061975205736e-40, - 4.489911536372897e-40, - 4.501810352047206e-40, - 4.513700529940275e-40, - 4.525578253427802e-40, - 4.537438646731164e-40, - 4.5492749655834225e-40, - 4.561080371927431e-40, - 4.572853039506222e-40, - 4.584598295342804e-40, - 4.596322296660058e-40, - 4.608030763285907e-40, - 4.619728067043552e-40, - 4.631417973165616e-40, - 4.643101285855332e-40, - 4.654776692261901e-40, - 4.6664428213068685e-40, - 4.6780982370006445e-40, - 4.689740776065071e-40, - 4.701369069172841e-40, - 4.712985136472467e-40, - 4.724592696770277e-40, - 4.7361958969827325e-40, - 4.7477988133367994e-40, - 4.759404383132244e-40, - 4.771013475762576e-40, - 4.782624539743395e-40, - 4.794235525689293e-40, - 4.805844902964243e-40, - 4.81745118809336e-40, - 4.829053230431744e-40, - 4.8406512679883625e-40, - 4.8522474062195985e-40, - 4.863844012976768e-40, - 4.875441859696911e-40, - 4.88704116064482e-40, - 4.898642432727356e-40, - 4.9102486809968834e-40, - 4.921863126484264e-40, - 4.933488538544188e-40, - 4.94512671704916e-40, - 4.9567778079860244e-40, - 4.968441275993904e-40, - 4.980113536942813e-40, - 4.991792080164081e-40, - 5.003475276396238e-40, - 5.015161456211732e-40, - 5.026848343411263e-40, - 5.038533478695012e-40, - 5.050218003217521e-40, - 5.0619059958082974e-40, - 5.073601657692068e-40, - 5.085309130769135e-40, - 5.097032481382026e-40, - 5.108775790292829e-40, - 5.1205399228007755e-40, - 5.132320870743622e-40, - 5.144113950923858e-40, - 5.1559140190057365e-40, - 5.167715886152171e-40, - 5.1795144387384195e-40, - 5.191306814384922e-40, - 5.2030950226633085e-40, - 5.214882112757056e-40, - 5.226670858235476e-40, - 5.238463763631182e-40, - 5.250263358565899e-40, - 5.2620722236631585e-40, - 5.273891566089142e-40, - 5.285722256625458e-40, - 5.297565196445458e-40, - 5.309419878715381e-40, - 5.321284071208481e-40, - 5.333155444997482e-40, - 5.345033268140552e-40, - 5.356919777509174e-40, - 5.368817899903007e-40, - 5.380730558976231e-40, - 5.392659976548428e-40, - 5.4046065141541555e-40, - 5.41656980355075e-40, - 5.428548012322759e-40, - 5.440539827467511e-40, - 5.452544839860507e-40, - 5.464562715360136e-40, - 5.476593254818564e-40, - 5.488636503422828e-40, - 5.500692728853683e-40, - 5.51276173644823e-40, - 5.524841577339259e-40, - 5.5369293726582466e-40, - 5.549022151046053e-40, - 5.561116968139448e-40, - 5.5732116648417e-40, - 5.585305709828744e-40, - 5.5974013531416746e-40, - 5.6095024368395246e-40, - 5.6216114431611245e-40, - 5.633729759406761e-40, - 5.645858733917389e-40, - 5.657999800665992e-40, - 5.670153997252405e-40, - 5.6823195997366265e-40, - 5.6944935469076946e-40, - 5.7066721451128e-40, - 5.718849659109873e-40, - 5.731019851371856e-40, - 5.7431766632719905e-40, - 5.75531606208385e-40, - 5.767437625349901e-40, - 5.7795420533591946e-40, - 5.79163004734643e-40, - 5.8037019124866444e-40, - 5.815757314451332e-40, - 5.8277960289758585e-40, - 5.839819247895085e-40, - 5.851828878022438e-40, - 5.863826644945951e-40, - 5.875814265743263e-40, - 5.887793468321825e-40, - 5.89976625089176e-40, - 5.91173474253164e-40, - 5.923698588124949e-40, - 5.9356552960663476e-40, - 5.947601921045027e-40, - 5.959535302390878e-40, - 5.971452267246475e-40, - 5.983349666939874e-40, - 5.995224885914956e-40, - 6.007077718459867e-40, - 6.018910534277246e-40, - 6.030726109940195e-40, - 6.04252695891839e-40, - 6.054315266420692e-40, - 6.066093195585361e-40, - 6.077862925377985e-40, - 6.089626199852908e-40, - 6.101383293457047e-40, - 6.113134537285868e-40, - 6.124880328882213e-40, - 6.136620978480174e-40, - 6.148356890029557e-40, - 6.160088507909548e-40, - 6.171816294773731e-40, - 6.183540944890796e-40, - 6.19526267279951e-40, - 6.206980994274783e-40, - 6.2186953695149235e-40, - 6.23040516094087e-40, - 6.2421095473186944e-40, - 6.253807665140097e-40, - 6.265498988873935e-40, - 6.277184360845103e-40, - 6.288866050156812e-40, - 6.300547187348087e-40, - 6.312230944721522e-40, - 6.323920511647719e-40, - 6.3356191306346e-40, - 6.347329731110908e-40, - 6.3590541769703076e-40, - 6.370792653705188e-40, - 6.382544264398773e-40, - 6.394307982951138e-40, - 6.4060829026518475e-40, - 6.417868120881289e-40, - 6.429662594519346e-40, - 6.441464696211145e-40, - 6.4532733226688004e-40, - 6.465087972980945e-40, - 6.476908942926435e-40, - 6.488736542096238e-40, - 6.500570513937964e-40, - 6.512410559533857e-40, - 6.524256382290381e-40, - 6.536107850606062e-40, - 6.547965614817502e-40, - 6.559830569495146e-40, - 6.571703284685364e-40, - 6.58358404748703e-40, - 6.5954720063292985e-40, - 6.607365509803451e-40, - 6.61926288443426e-40, - 6.631162436045302e-40, - 6.643062793263304e-40, - 6.654963845232687e-40, - 6.666865978778797e-40, - 6.678769726930482e-40, - 6.6906755297258694e-40, - 6.702583149300872e-40, - 6.714492005479853e-40, - 6.726401516188179e-40, - 6.738311139523147e-40, - 6.750219713493653e-40, - 6.762124974867233e-40, - 6.774024121401236e-40, - 6.785914319998657e-40, - 6.797792869999324e-40, - 6.8096582623136714e-40, - 6.821509720597492e-40, - 6.83334674467441e-40, - 6.845169663656364e-40, - 6.856979491569293e-40, - 6.8687772484172245e-40, - 6.880563916055124e-40, - 6.892340476204923e-40, - 6.9041078989989915e-40, - 6.9158671322710914e-40, - 6.927619240177801e-40, - 6.939364910473926e-40, - 6.951104155009561e-40, - 6.96283650136944e-40, - 6.974561428308723e-40, - 6.986278337204587e-40, - 6.997986622917285e-40, - 7.009685678673437e-40, - 7.021374682235462e-40, - 7.03305259360952e-40, - 7.044718697665112e-40, - 7.056372735573233e-40, - 7.068014733561292e-40, - 7.079645091687214e-40, - 7.091264355662763e-40, - 7.102873041769356e-40, - 7.1144716662877316e-40, - 7.126060748692353e-40, - 7.137640767754544e-40, - 7.149211980662519e-40, - 7.160774608199844e-40, - 7.172329036969042e-40, - 7.183875705507902e-40, - 7.195415232791182e-40, - 7.206948291777639e-40, - 7.218475554452488e-40, - 7.229997689850375e-40, - 7.241515462459011e-40, - 7.253030046111777e-40, - 7.264542313277243e-40, - 7.276052560133305e-40, - 7.287561039161938e-40, - 7.2990680082740736e-40, - 7.3105737433855326e-40, - 7.322078524153218e-40, - 7.33358262524951e-40, - 7.345086289783679e-40, - 7.35658971454606e-40, - 7.368093636317873e-40, - 7.379599578508437e-40, - 7.39110912289098e-40, - 7.40262385119982e-40, - 7.414145323286247e-40, - 7.425675023391648e-40, - 7.437214440654187e-40, - 7.44876507477306e-40, - 7.460328267813947e-40, - 7.471904944121771e-40, - 7.483495166432452e-40, - 7.495098854788161e-40, - 7.506715928964334e-40, - 7.518346308637512e-40, - 7.529989955562108e-40, - 7.541647054812663e-40, - 7.553317689584367e-40, - 7.565002172039017e-40, - 7.576700976465975e-40, - 7.588414846212121e-40, - 7.600144212188079e-40, - 7.611889300001017e-40, - 7.623650331950626e-40, - 7.635427530257774e-40, - 7.64722117128809e-40, - 7.659031917718056e-40, - 7.67086022211275e-40, - 7.682706284085073e-40, - 7.694570278248503e-40, - 7.706452333425759e-40, - 7.718352197928137e-40, - 7.73026938374289e-40, - 7.742203404213013e-40, - 7.754153770616645e-40, - 7.766119833874277e-40, - 7.778100838830824e-40, - 7.790096189190445e-40, - 7.802105257573028e-40, - 7.814127303614438e-40, - 7.826161561755825e-40, - 7.838207160476443e-40, - 7.850262880052199e-40, - 7.862327419295793e-40, - 7.874399490706515e-40, - 7.886477908311137e-40, - 7.898561385167818e-40, - 7.910648849160189e-40, - 7.922739582733943e-40, - 7.93483313175892e-40, - 7.946929063473557e-40, - 7.959026942332507e-40, - 7.971126206367237e-40, - 7.983226113524305e-40, - 7.995325848471159e-40, - 8.007424442052535e-40, - 8.019521340403365e-40, - 8.031616105645125e-40, - 8.043708248152094e-40, - 8.05579717011465e-40, - 8.067882255567317e-40, - 8.07996288824723e-40, - 8.092038451647735e-40, - 8.104108317803346e-40, - 8.116172045564147e-40, - 8.128229351830713e-40, - 8.1402793666301e-40, - 8.152321117612555e-40, - 8.164353437386552e-40, - 8.176375128698301e-40, - 8.18838504217296e-40, - 8.200382027410488e-40, - 8.212364933531496e-40, - 8.224332612618957e-40, - 8.236283925049083e-40, - 8.2482180046387e-40, - 8.260134662282514e-40, - 8.272033805516997e-40, - 8.283915662568272e-40, - 8.29578078860458e-40, - 8.307629444893075e-40, - 8.319461755414245e-40, - 8.331277842531675e-40, - 8.34307782865358e-40, - 8.354861887600076e-40, - 8.366630414782168e-40, - 8.378383926927861e-40, - 8.390122946400233e-40, - 8.401847875057272e-40, - 8.41355881728723e-40, - 8.425255814102793e-40, - 8.436938617186694e-40, - 8.448606709730774e-40, - 8.460259561097705e-40, - 8.471896714629435e-40, - 8.483518186295587e-40, - 8.495124258478509e-40, - 8.506715526359729e-40, - 8.518292738484022e-40, - 8.529856779623102e-40, - 8.54140860497709e-40, - 8.552949169901827e-40, - 8.56447926838433e-40, - 8.575999184382512e-40, - 8.587509066896922e-40, - 8.599008648598569e-40, - 8.610497253211191e-40, - 8.621974317937503e-40, - 8.63343955507384e-40, - 8.644893133313472e-40, - 8.656335176353838e-40, - 8.667765791097017e-40, - 8.679185084386001e-40, - 8.690593157770593e-40, - 8.701989958416027e-40, - 8.71337528115594e-40, - 8.724749222241185e-40, - 8.736111802579126e-40, - 8.747462953517992e-40, - 8.758802600140931e-40, - 8.770130585750375e-40, - 8.781446676505478e-40, - 8.79275063291623e-40, - 8.804042215492547e-40, - 8.815321184706917e-40, - 8.826587328515623e-40, - 8.837840852135987e-40, - 8.849082377847992e-40, - 8.860312717982301e-40, - 8.87153271852969e-40, - 8.8827432186324e-40, - 8.893944909799209e-40, - 8.90513799817144e-40, - 8.916322327516717e-40, - 8.927497722380782e-40, - 8.938664007311713e-40, - 8.949821007672472e-40, - 8.960968693695537e-40, - 8.972107747151437e-40, - 8.983239432261125e-40, - 8.994365057542896e-40, - 9.005485938669358e-40, - 9.016603554054367e-40, - 9.027719535027768e-40, - 9.038835258181284e-40, - 9.049951744208376e-40, - 9.061069981833476e-40, - 9.0721909593671e-40, - 9.083315580875432e-40, - 9.094444554337903e-40, - 9.105578675935054e-40, - 9.116718962367805e-40, - 9.127866459689803e-40, - 9.139022053838459e-40, - 9.150186346189954e-40, - 9.161359908663157e-40, - 9.172543247722192e-40, - 9.183736655203155e-40, - 9.194940369223646e-40, - 9.206154688889524e-40, - 9.217380162997462e-40, - 9.228617326946666e-40, - 9.239866733164732e-40, - 9.2511292226655e-40, - 9.262405846377178e-40, - 9.273698033010602e-40, - 9.285007336281625e-40, - 9.296335309962975e-40, - 9.307683483065258e-40, - 9.319052928917676e-40, - 9.330444244142477e-40, - 9.341857862565918e-40, - 9.353294218601742e-40, - 9.364753838647944e-40, - 9.376237254188525e-40, - 9.387745211351245e-40, - 9.39927868021999e-40, - 9.410838263043503e-40, - 9.422424524693248e-40, - 9.43403802956761e-40, - 9.44567933697591e-40, - 9.457348946394725e-40, - 9.469046856500264e-40, - 9.480772534766231e-40, - 9.492525113962363e-40, - 9.504303661988445e-40, - 9.516107247377969e-40, - 9.527935009485135e-40, - 9.539786913141085e-40, - 9.551663608519602e-40, - 9.563565779126478e-40, - 9.575494108467488e-40, - 9.587449280048415e-40, - 9.599431974978416e-40, - 9.611442742440127e-40, - 9.623481964570888e-40, - 9.635549972502685e-40, - 9.647647089854102e-40, - 9.659773640243726e-40, - 9.671929864672064e-40, - 9.684115270312689e-40, - 9.69632889626852e-40, - 9.708569631864526e-40, - 9.720836355199757e-40, - 9.73312794438647e-40, - 9.745443277674352e-40, - 9.757781230379304e-40, - 9.770140471702343e-40, - 9.782519624798918e-40, - 9.794917474349219e-40, - 9.807332795690674e-40, - 9.819764400114256e-40, - 9.832211516015733e-40, - 9.844673634748956e-40, - 9.857150274289202e-40, - 9.869640947106238e-40, - 9.882145131907843e-40, - 9.894662309352967e-40, - 9.907191824059585e-40, - 9.919733060737874e-40, - 9.9322857010543e-40, - 9.944849308027574e-40, - 9.957423310520286e-40, - 9.970007136885021e-40, - 9.982600054676132e-40, - 9.995201136472012e-40, - 1.0007809443128741e-39, - 1.0020424055612538e-39, - 1.0033044301324612e-39, - 1.0045669641339311e-39, - 1.0058299651864976e-39, - 1.0070934108145881e-39, - 1.0083572578014432e-39, - 1.0096214588483336e-39, - 1.0108859626585485e-39, - 1.0121506905693163e-39, - 1.0134155584675538e-39, - 1.0146804973646122e-39, - 1.0159454419986165e-39, - 1.0172103271001114e-39, - 1.0184750873859982e-39, - 1.0197396612135304e-39, - 1.0210039991983652e-39, - 1.0222680452268982e-39, - 1.0235317502831547e-39, - 1.0247950714534938e-39, - 1.0260579658862161e-39, - 1.0273203907351208e-39, - 1.028582300896187e-39, - 1.0298436382627354e-39, - 1.0311043365278988e-39, - 1.0323643288980234e-39, - 1.0336235485807655e-39, - 1.0348819287870973e-39, - 1.0361394027331053e-39, - 1.0373959042616057e-39, - 1.0386513769954827e-39, - 1.0399057898311183e-39, - 1.0411591156909577e-39, - 1.042411327497306e-39, - 1.0436623981708094e-39, - 1.0449123010298314e-39, - 1.0461610191919247e-39, - 1.047408554335464e-39, - 1.048654910023252e-39, - 1.049900089712599e-39, - 1.0511440968608154e-39, - 1.0523869349866663e-39, - 1.0536286104943379e-39, - 1.0548691291406172e-39, - 1.0561084803020846e-39, - 1.0573466494425813e-39, - 1.0585836221527801e-39, - 1.0598193840233515e-39, - 1.0610539202471912e-39, - 1.0622872098774415e-39, - 1.0635192279811958e-39, - 1.0647499583851129e-39, - 1.0659793891505073e-39, - 1.0672075082015323e-39, - 1.0684343035333934e-39, - 1.069659765946049e-39, - 1.0708838916081226e-39, - 1.0721066788893645e-39, - 1.0733281157670497e-39, - 1.0745481790909287e-39, - 1.0757668454057695e-39, - 1.0769840912620858e-39, - 1.0781998934168704e-39, - 1.0794142288919298e-39, - 1.080627074737553e-39, - 1.0818384113458555e-39, - 1.0830482207871588e-39, - 1.0842564824368113e-39, - 1.0854631649204514e-39, - 1.0866682120853347e-39, - 1.087871558503518e-39, - 1.0890731379490946e-39, - 1.0902728845595325e-39, - 1.0914707429065858e-39, - 1.0926666686319987e-39, - 1.0938606192661512e-39, - 1.0950525574395431e-39, - 1.0962424469623604e-39, - 1.0974302516474001e-39, - 1.098615935137348e-39, - 1.099799449328237e-39, - 1.1009807297169019e-39, - 1.1021597552653453e-39, - 1.1033365335928816e-39, - 1.1045110768902513e-39, - 1.1056833973522778e-39, - 1.1068535071727492e-39, - 1.1080214216052088e-39, - 1.1091871781689508e-39, - 1.1103508239625416e-39, - 1.1115124040015591e-39, - 1.1126719631828769e-39, - 1.1138295464033665e-39, - 1.1149851985598697e-39, - 1.1161389646172428e-39, - 1.1172908879812461e-39, - 1.1184409990546494e-39, - 1.1195893184675895e-39, - 1.1207358661735066e-39, - 1.1218806621258505e-39, - 1.1230237262780752e-39, - 1.124165078583637e-39, - 1.12530473893278e-39, - 1.1264427342157446e-39, - 1.1275790996041387e-39, - 1.128713870614962e-39, - 1.1298470827714143e-39, - 1.130978771597063e-39, - 1.1321089730999256e-39, - 1.1332377317966799e-39, - 1.134365111666114e-39, - 1.135491185686404e-39, - 1.1366160259633857e-39, - 1.1377397045789261e-39, - 1.1388622935821977e-39, - 1.1399838650176246e-39, - 1.141104490887782e-39, - 1.1422242429410785e-39, - 1.1433431963774427e-39, - 1.1444614293387817e-39, - 1.1455790200521723e-39, - 1.146696046816834e-39, - 1.1478125875339599e-39, - 1.148928713623224e-39, - 1.150044480841024e-39, - 1.1511599360628279e-39, - 1.1522751182383414e-39, - 1.1533900636085831e-39, - 1.1545048085134387e-39, - 1.1556193892352439e-39, - 1.1567338418048889e-39, - 1.157848196768147e-39, - 1.1589624792523589e-39, - 1.1600767148957708e-39, - 1.1611909335640238e-39, - 1.1623051667346026e-39, - 1.1634194453925452e-39, - 1.1645337891185619e-39, - 1.1656482190539058e-39, - 1.166762769181387e-39, - 1.1678774740242191e-39, - 1.1689923688772687e-39, - 1.1701074834733524e-39, - 1.1712228415432701e-39, - 1.1723384667253251e-39, - 1.1734543881821256e-39, - 1.1745706510603195e-39, - 1.1756873033843849e-39, - 1.1768043931836028e-39, - 1.1779219577461884e-39, - 1.1790400078239622e-39, - 1.180158574398615e-39, - 1.1812777344971366e-39, - 1.182397544816889e-39, - 1.1835180573382513e-39, - 1.1846393240392768e-39, - 1.1857613968926537e-39 - ], - "nc": [ - 4.473723168345334e-46, - 1.9190662956315438e-43, - 8.54691472789658e-43, - 1.6496658938483918e-42, - 2.4094392578602475e-42, - 3.159203143675806e-42, - 3.8814763370373464e-42, - 4.5276690306992084e-42, - 5.115443004818207e-42, - 5.6603531001994764e-42, - 6.185146663384188e-42, - 6.704323073251283e-42, - 7.223483419421264e-42, - 7.717808521075447e-42, - 8.194875756815612e-42, - 8.668869825483844e-42, - 9.11797698693702e-42, - 9.557859560009344e-42, - 9.998297877068081e-42, - 1.0408915946930139e-41, - 1.085898591398956e-41, - 1.131169529871251e-41, - 1.1725037765476814e-41, - 1.2130765604269332e-41, - 1.2538389103759957e-41, - 1.294530500867503e-41, - 1.3357166786266546e-41, - 1.3785035013301606e-41, - 1.4210410184201247e-41, - 1.4619719660757018e-41, - 1.501633323922787e-41, - 1.5398686242583626e-41, - 1.5799660419813224e-41, - 1.6228278717575586e-41, - 1.666307725227327e-41, - 1.7072846073982544e-41, - 1.7455413938610995e-41, - 1.78432385810451e-41, - 1.8261777271543748e-41, - 1.8709670562093205e-41, - 1.915045749285771e-41, - 1.957632914910357e-41, - 1.997098597072564e-41, - 2.034565955699908e-41, - 2.0701258739579724e-41, - 2.1047254034134716e-41, - 2.1418366861578456e-41, - 2.1830612700782295e-41, - 2.227849790484387e-41, - 2.273962528401193e-41, - 2.3183554208643545e-41, - 2.3598227534566585e-41, - 2.3981546336668354e-41, - 2.4348389000137824e-41, - 2.4709707884306326e-41, - 2.507418697054791e-41, - 2.545173249109769e-41, - 2.584377035692035e-41, - 2.6251483634309794e-41, - 2.6677555319660577e-41, - 2.710453350736852e-41, - 2.752930277038674e-41, - 2.794097530489357e-41, - 2.8333353580437737e-41, - 2.870880193784107e-41, - 2.908098616244059e-41, - 2.945406876070902e-41, - 2.983022620985996e-41, - 3.0214716103672085e-41, - 3.060261783966288e-41, - 3.0995268043666467e-41, - 3.13876298962225e-41, - 3.1774360629145166e-41, - 3.2155543361094075e-41, - 3.253827783022675e-41, - 3.2920513145346853e-41, - 3.3309467736471347e-41, - 3.371015878890048e-41, - 3.4122837055027754e-41, - 3.454613946877156e-41, - 3.497687752379299e-41, - 3.540842308947408e-41, - 3.583535993261849e-41, - 3.6260281793574467e-41, - 3.6669223183094053e-41, - 3.7062647885546135e-41, - 3.7448230127912764e-41, - 3.782456113224697e-41, - 3.8194327763252177e-41, - 3.8557012641763e-41, - 3.8920088712899486e-41, - 3.929081951027125e-41, - 3.966454405493816e-41, - 4.004133680936279e-41, - 4.0422278923408167e-41, - 4.0807173122527927e-41, - 4.119522715077956e-41, - 4.1586117137935626e-41, - 4.197963571727287e-41, - 4.2376891121026486e-41, - 4.27772742684653e-41, - 4.3177982044273347e-41, - 4.3576157332111484e-41, - 4.3966767750515327e-41, - 4.4349911486732884e-41, - 4.472754768610963e-41, - 4.510040924232606e-41, - 4.547033134668643e-41, - 4.5840402563008184e-41, - 4.621367264853742e-41, - 4.659117983645116e-41, - 4.697455842546653e-41, - 4.736743000243731e-41, - 4.777062553051852e-41, - 4.818197791887733e-41, - 4.859842984728154e-41, - 4.901739185259084e-41, - 4.943826939615186e-41, - 4.986072989687832e-41, - 5.028266338246761e-41, - 5.069936621884414e-41, - 5.110917634000035e-41, - 5.151442332043767e-41, - 5.191334122810072e-41, - 5.230561012960275e-41, - 5.269510142461171e-41, - 5.308202489025243e-41, - 5.34650156172955e-41, - 5.384672553310354e-41, - 5.423024950631494e-41, - 5.461500666931822e-41, - 5.499753074549736e-41, - 5.537553976672347e-41, - 5.575174923565943e-41, - 5.613032265206205e-41, - 5.651172501740993e-41, - 5.689436496528481e-41, - 5.727641694194738e-41, - 5.765677105788084e-41, - 5.803730881354996e-41, - 5.842069811432877e-41, - 5.880629774137326e-41, - 5.919193895654218e-41, - 5.957717097070382e-41, - 5.99623158652065e-41, - 6.034737099215828e-41, - 6.073227478896203e-41, - 6.111617193808865e-41, - 6.149846157485565e-41, - 6.188116869393732e-41, - 6.226711981756412e-41, - 6.26563734398396e-41, - 6.304596456550391e-41, - 6.343315270557414e-41, - 6.381761616921899e-41, - 6.420090030902638e-41, - 6.45852125864752e-41, - 6.497126034229643e-41, - 6.535758079829149e-41, - 6.574317789339866e-41, - 6.612881165086699e-41, - 6.651547954761975e-41, - 6.690331529353162e-41, - 6.729236759551149e-41, - 6.768275418915231e-41, - 6.807402019149148e-41, - 6.846546242810502e-41, - 6.885690955336827e-41, - 6.924840961632992e-41, - 6.963990630661331e-41, - 7.003154558249226e-41, - 7.042340978796506e-41, - 7.081496546930252e-41, - 7.120471963502207e-41, - 7.159188484911704e-41, - 7.197795672792798e-41, - 7.236468450727278e-41, - 7.275210753923322e-41, - 7.313900135946728e-41, - 7.352490273177348e-41, - 7.391038980564925e-41, - 7.429563266557475e-41, - 7.468143666558125e-41, - 7.506930689861703e-41, - 7.546074395300804e-41, - 7.585500107961835e-41, - 7.625006585826955e-41, - 7.664432068041856e-41, - 7.703804014464848e-41, - 7.743280905664289e-41, - 7.782984393389277e-41, - 7.8228851637938e-41, - 7.862800081606671e-41, - 7.902542899834394e-41, - 7.942004302162685e-41, - 7.981198939620589e-41, - 8.02014807613292e-41, - 8.05883047206751e-41, - 8.097155976959289e-41, - 8.135065001588898e-41, - 8.172559360179845e-41, - 8.209707435840034e-41, - 8.246574787502154e-41, - 8.283180355170513e-41, - 8.319530271555153e-41, - 8.35567974914366e-41, - 8.391711461693113e-41, - 8.427707556499985e-41, - 8.46374545803413e-41, - 8.499892745022988e-41, - 8.536215315545664e-41, - 8.572769846873014e-41, - 8.609631440957731e-41, - 8.646908397260886e-41, - 8.684727140574737e-41, - 8.723212443509357e-41, - 8.762433389244912e-41, - 8.802384678924099e-41, - 8.843008810602722e-41, - 8.88421179136867e-41, - 8.925842620676345e-41, - 8.967750148877421e-41, - 9.009839888314031e-41, - 9.052064327359061e-41, - 9.094396743844508e-41, - 9.1367863517986e-41, - 9.179170816720161e-41, - 9.221467079687804e-41, - 9.263595388133421e-41, - 9.30546500743402e-41, - 9.346955515835423e-41, - 9.387943598472228e-41, - 9.42829722880459e-41, - 9.46797847369829e-41, - 9.506995640853977e-41, - 9.545382324609898e-41, - 9.583200170585903e-41, - 9.620515479157907e-41, - 9.65739066137426e-41, - 9.693863769972895e-41, - 9.729966346583454e-41, - 9.76575217916086e-41, - 9.801288777025824e-41, - 9.836674295744962e-41, - 9.871990589289154e-41, - 9.90730362015253e-41, - 9.942644027273115e-41, - 9.978027850230517e-41, - 1.0013475009357908e-40, - 1.0049037998828101e-40, - 1.008479445938117e-40, - 1.0120814937272286e-40, - 1.0157164529267072e-40, - 1.0193831202593818e-40, - 1.0230753097721959e-40, - 1.026784032076377e-40, - 1.0305024446700666e-40, - 1.034234155717354e-40, - 1.0379868907739366e-40, - 1.0417701533340684e-40, - 1.0455900253317285e-40, - 1.0494428673126777e-40, - 1.0533195775548893e-40, - 1.0572096964034296e-40, - 1.0611061736051076e-40, - 1.0650114271497456e-40, - 1.0689338954281556e-40, - 1.0728827622844542e-40, - 1.0768627805660516e-40, - 1.080867906332783e-40, - 1.084886394819672e-40, - 1.0889061181311798e-40, - 1.0929201729733707e-40, - 1.096931729404157e-40, - 1.1009472714062013e-40, - 1.1049732977696639e-40, - 1.1090120365283123e-40, - 1.113057637312712e-40, - 1.1171022089005512e-40, - 1.1211379058256e-40, - 1.1251598297258856e-40, - 1.1291699477597064e-40, - 1.1331721124694449e-40, - 1.1371701777960787e-40, - 1.1411670911813307e-40, - 1.1451613799308257e-40, - 1.1491496952849e-40, - 1.153128712493995e-40, - 1.1570942314811912e-40, - 1.1610420173746132e-40, - 1.1649691505653362e-40, - 1.1688725650637375e-40, - 1.172750053751787e-40, - 1.1766037435277008e-40, - 1.1804386941692335e-40, - 1.1842617024489255e-40, - 1.1880794048875138e-40, - 1.1918951855740284e-40, - 1.1957088444597363e-40, - 1.1995177193679005e-40, - 1.2033188917121876e-40, - 1.2071103360723003e-40, - 1.2108919213276774e-40, - 1.214665043175918e-40, - 1.218431566552938e-40, - 1.222193281221764e-40, - 1.2259516032112637e-40, - 1.2297083500900824e-40, - 1.2334656510279164e-40, - 1.2372256467178296e-40, - 1.240990538278322e-40, - 1.2447622341434152e-40, - 1.2485410658703312e-40, - 1.2523269973789654e-40, - 1.2561200016503945e-40, - 1.2599196571309216e-40, - 1.2637255506334932e-40, - 1.2675381666597014e-40, - 1.2713580367743535e-40, - 1.2751855966799072e-40, - 1.2790208439360365e-40, - 1.2828618440942415e-40, - 1.2867059056823088e-40, - 1.290550343750939e-40, - 1.2943930854562626e-40, - 1.298234237733679e-40, - 1.3020761917160291e-40, - 1.3059216293287943e-40, - 1.3097731676690627e-40, - 1.3136315181353767e-40, - 1.3174938586722989e-40, - 1.3213558790132402e-40, - 1.3252131942636113e-40, - 1.3290615785802605e-40, - 1.332899415887278e-40, - 1.3367277497336594e-40, - 1.3405479803174103e-40, - 1.3443615138259486e-40, - 1.3481697410509671e-40, - 1.351973499490392e-40, - 1.3557736806853844e-40, - 1.3595715247015864e-40, - 1.3633682751603813e-40, - 1.3671649917311023e-40, - 1.3709618607022353e-40, - 1.3747587153763172e-40, - 1.3785552457979372e-40, - 1.382351140920797e-40, - 1.3861462429197672e-40, - 1.3899412769675171e-40, - 1.3937368274793097e-40, - 1.397533307254641e-40, - 1.4013311276394864e-40, - 1.4051306672485868e-40, - 1.408932276615784e-40, - 1.4127372686195415e-40, - 1.4165475041479257e-40, - 1.420364855244682e-40, - 1.4241911952045877e-40, - 1.4280282243055604e-40, - 1.4318765880822543e-40, - 1.435736092908571e-40, - 1.439606500913008e-40, - 1.4434875742045338e-40, - 1.447378760980641e-40, - 1.4512785571834741e-40, - 1.455185547174188e-40, - 1.4590983611573968e-40, - 1.463015629337718e-40, - 1.466936008903936e-40, - 1.4708585082638948e-40, - 1.4747822972284062e-40, - 1.4787065130028776e-40, - 1.4826302927181631e-40, - 1.4865527805104256e-40, - 1.490473346743217e-40, - 1.4943915386498932e-40, - 1.4983069178724316e-40, - 1.5022190480389222e-40, - 1.506127492450194e-40, - 1.5100317091401876e-40, - 1.5139308937026715e-40, - 1.517824333044055e-40, - 1.521711305854573e-40, - 1.5255910908214918e-40, - 1.5294629731600681e-40, - 1.533326631733814e-40, - 1.537182071619762e-40, - 1.5410293822299375e-40, - 1.5448686675052622e-40, - 1.5487000313866585e-40, - 1.5525235756979723e-40, - 1.5563395697287493e-40, - 1.5601485208481957e-40, - 1.5639509087474915e-40, - 1.5677472124271369e-40, - 1.5715379108878944e-40, - 1.5753234337758321e-40, - 1.5791039371085626e-40, - 1.5828796385276197e-40, - 1.5866508074637675e-40, - 1.5904177133437581e-40, - 1.5941806255712381e-40, - 1.5979399726417805e-40, - 1.60169666802348e-40, - 1.605451735419288e-40, - 1.6092062067600255e-40, - 1.6129611139765142e-40, - 1.616717488273019e-40, - 1.6204760449741476e-40, - 1.624236803621439e-40, - 1.6279996831106025e-40, - 1.6317645936323867e-40, - 1.6355314453775429e-40, - 1.639300149507808e-40, - 1.6430709350694344e-40, - 1.646844330135881e-40, - 1.65062031973109e-40, - 1.654398830472795e-40, - 1.6581797889515452e-40, - 1.661963121653154e-40, - 1.665748516361494e-40, - 1.6695356488852007e-40, - 1.6733251762136483e-40, - 1.6771178666230691e-40, - 1.6809144883897292e-40, - 1.6847158098027476e-40, - 1.6885226141136114e-40, - 1.6923350308558435e-40, - 1.6961517371619073e-40, - 1.699971213896209e-40, - 1.7037919419231431e-40, - 1.7076124021071015e-40, - 1.7114311006071761e-40, - 1.7152471568096579e-40, - 1.7190612766457529e-40, - 1.7228745808569137e-40, - 1.7266881912047758e-40, - 1.730503229450972e-40, - 1.7343208162660112e-40, - 1.7381419645853356e-40, - 1.7419670466400673e-40, - 1.745795950490815e-40, - 1.7496285441694213e-40, - 1.7534646957270405e-40, - 1.7573042732204622e-40, - 1.7611471206047126e-40, - 1.7649929354952554e-40, - 1.7688413940624078e-40, - 1.7726921890312002e-40, - 1.7765450131341125e-40, - 1.7803995591036273e-40, - 1.784255520288406e-40, - 1.7881126410190297e-40, - 1.7919710938884135e-40, - 1.7958314842238706e-40, - 1.7996944416791885e-40, - 1.8035605959081552e-40, - 1.8074305765645575e-40, - 1.8113050334681134e-40, - 1.815184713923905e-40, - 1.8190694870208318e-40, - 1.82295870641466e-40, - 1.8268517215172238e-40, - 1.830747881740358e-40, - 1.8346465364958974e-40, - 1.8385469095758553e-40, - 1.842447899604611e-40, - 1.846349315543398e-40, - 1.850251261881927e-40, - 1.8541538431232976e-40, - 1.8580571637615184e-40, - 1.8619613285849814e-40, - 1.8658666179432393e-40, - 1.8697735160608735e-40, - 1.8736816998587622e-40, - 1.877590662209902e-40, - 1.8814998959872888e-40, - 1.8854088940639208e-40, - 1.8893171489941082e-40, - 1.8932240863659876e-40, - 1.897129125587656e-40, - 1.9010322706441485e-40, - 1.904933672518441e-40, - 1.9088334821935105e-40, - 1.9127318506523324e-40, - 1.916628928774448e-40, - 1.9205248335960672e-40, - 1.9244196311503133e-40, - 1.928313199980516e-40, - 1.932205319336895e-40, - 1.936095768439239e-40, - 1.9399843265073204e-40, - 1.943870772763812e-40, - 1.947754967151975e-40, - 1.9516370385314465e-40, - 1.95551715996724e-40, - 1.9593955288394306e-40, - 1.963272343041911e-40, - 1.9671478004707683e-40, - 1.9710220990301354e-40, - 1.974895400770149e-40, - 1.978767554851115e-40, - 1.982638025146338e-40, - 1.9865061811295848e-40, - 1.9903713934168694e-40, - 1.9942330326242048e-40, - 1.9980904693676055e-40, - 2.0019430789124913e-40, - 2.00579039303634e-40, - 2.009632551177109e-40, - 2.0134701732669234e-40, - 2.0173039010759884e-40, - 2.0211343763744835e-40, - 2.0249622409325847e-40, - 2.02878813652047e-40, - 2.032612700550908e-40, - 2.0364363831571424e-40, - 2.0402589504708897e-40, - 2.044079972128125e-40, - 2.0478990152060366e-40, - 2.0517156467805596e-40, - 2.0555294339276335e-40, - 2.0593399410530588e-40, - 2.0631466621511603e-40, - 2.0669495026882947e-40, - 2.070749135550923e-40, - 2.0745463696369793e-40, - 2.0783420145389387e-40, - 2.0821368798494564e-40, - 2.085931775165883e-40, - 2.0897275339413325e-40, - 2.0935251042997692e-40, - 2.097324702807222e-40, - 2.10112574448643e-40, - 2.1049275322337385e-40, - 2.1087293689454953e-40, - 2.112530557518045e-40, - 2.1163304008477367e-40, - 2.1201281726404504e-40, - 2.1239232133102316e-40, - 2.1277158058776925e-40, - 2.131506884467663e-40, - 2.135297457740016e-40, - 2.1390885343546176e-40, - 2.1428811229713354e-40, - 2.1466762322468827e-40, - 2.150474854795521e-40, - 2.154277686571531e-40, - 2.15808454974215e-40, - 2.1618948961515338e-40, - 2.1657081421391294e-40, - 2.16952370404338e-40, - 2.1733409982025336e-40, - 2.17715944095219e-40, - 2.1809784227932697e-40, - 2.184797375774874e-40, - 2.188616188561095e-40, - 2.192434989468762e-40, - 2.1962539426973806e-40, - 2.2000732124464542e-40, - 2.203892962915489e-40, - 2.207713358305983e-40, - 2.211534619743377e-40, - 2.2153572351554857e-40, - 2.2191816157765725e-40, - 2.2230078382098055e-40, - 2.226835840060639e-40, - 2.2306655580837414e-40, - 2.234496929033781e-40, - 2.238329889665426e-40, - 2.242164347901403e-40, - 2.2459998461885324e-40, - 2.2498355274254607e-40, - 2.253670660294962e-40, - 2.257504808591463e-40, - 2.2613375540040564e-40, - 2.2651684782218352e-40, - 2.26899716293389e-40, - 2.2728231917697948e-40, - 2.276646324800703e-40, - 2.28046671820984e-40, - 2.2842846439959103e-40, - 2.2881000835981415e-40, - 2.2919129279276365e-40, - 2.2957230678856467e-40, - 2.2995303943797887e-40, - 2.3033347983182397e-40, - 2.3071361427316664e-40, - 2.3109340799090493e-40, - 2.314728235908131e-40, - 2.318518372732645e-40, - 2.3223044086729924e-40, - 2.326086275547332e-40, - 2.3298639051738186e-40, - 2.333637229370611e-40, - 2.337406180237889e-40, - 2.341170802042847e-40, - 2.3449313882848417e-40, - 2.3486881922712828e-40, - 2.352441502456177e-40, - 2.356191645174264e-40, - 2.3599389477398986e-40, - 2.363683737467432e-40, - 2.3674263416712195e-40, - 2.371167083962184e-40, - 2.374906150798546e-40, - 2.378643665252847e-40, - 2.382379857820679e-40, - 2.3861146632446647e-40, - 2.3898478529545744e-40, - 2.3935791968515265e-40, - 2.397308464836635e-40, - 2.4010354268110184e-40, - 2.4047598613569543e-40, - 2.4084817172561653e-40, - 2.412201060855446e-40, - 2.4159179725796277e-40, - 2.4196329634856286e-40, - 2.4233467763893042e-40, - 2.4270601563143803e-40, - 2.4307738482825793e-40, - 2.434488597313708e-40, - 2.438205145047209e-40, - 2.441924164333783e-40, - 2.4456463036011435e-40, - 2.4493722283920482e-40, - 2.453102285806846e-40, - 2.4568365849620124e-40, - 2.4605752293268234e-40, - 2.4643183223705547e-40, - 2.468065967562482e-40, - 2.4718182677051474e-40, - 2.475575293861045e-40, - 2.479336962004433e-40, - 2.483103021198336e-40, - 2.486873298028306e-40, - 2.4906477561355988e-40, - 2.4944263705942047e-40, - 2.4982091164781154e-40, - 2.5019959688613243e-40, - 2.5057869028112046e-40, - 2.509581886204279e-40, - 2.5133809318140717e-40, - 2.517184251297954e-40, - 2.520992092625026e-40, - 2.5248046916954337e-40, - 2.528622280800581e-40, - 2.532445092231115e-40, - 2.5362733582776824e-40, - 2.540107311230932e-40, - 2.5439471756651818e-40, - 2.5477930706957216e-40, - 2.5516447809742393e-40, - 2.555501904969859e-40, - 2.5593640019585328e-40, - 2.5632305841517936e-40, - 2.5671011606011787e-40, - 2.5709752403583357e-40, - 2.5748523324773777e-40, - 2.5787319460434994e-40, - 2.5826136043145727e-40, - 2.5864969167995433e-40, - 2.5903816392266857e-40, - 2.5942675664720043e-40, - 2.598154633358485e-40, - 2.6020428534410017e-40, - 2.6059322411530757e-40, - 2.609822810928227e-40, - 2.6137145771999734e-40, - 2.617607552570256e-40, - 2.621501694478257e-40, - 2.6253968292276445e-40, - 2.6292926931158836e-40, - 2.6331890017072907e-40, - 2.637085385964646e-40, - 2.640981448077063e-40, - 2.644876790209777e-40, - 2.648771014528021e-40, - 2.6526637231970284e-40, - 2.6565545259598673e-40, - 2.660443144356541e-40, - 2.664329494772343e-40, - 2.6682135888213236e-40, - 2.6720954103862473e-40, - 2.675974791943299e-40, - 2.6798515186791226e-40, - 2.683725375764718e-40, - 2.6875961483710915e-40, - 2.691463621669247e-40, - 2.695327577588195e-40, - 2.699187751832753e-40, - 2.703043782925083e-40, - 2.7068952576688418e-40, - 2.7107417933126743e-40, - 2.7145832378094626e-40, - 2.7184195412168456e-40, - 2.7222506540469253e-40, - 2.7260765268118036e-40, - 2.729897110023909e-40, - 2.7337123552618766e-40, - 2.7375222405606834e-40, - 2.74132686411e-40, - 2.7451264262312988e-40, - 2.7489211256459137e-40, - 2.7527110441645674e-40, - 2.7564961593022157e-40, - 2.76027644491628e-40, - 2.7640518748641845e-40, - 2.7678224230033475e-40, - 2.7715880637071195e-40, - 2.7753488339012014e-40, - 2.7791048530932354e-40, - 2.782856171453279e-40, - 2.7866028286198995e-40, - 2.7903448900734453e-40, - 2.7940824930761826e-40, - 2.7978157872534485e-40, - 2.8015449222305826e-40, - 2.8052700476329236e-40, - 2.808991313085809e-40, - 2.8127088436736857e-40, - 2.8164226079796865e-40, - 2.8201326077835187e-40, - 2.823838892056433e-40, - 2.8275415076198685e-40, - 2.8312404562447367e-40, - 2.8349356993987272e-40, - 2.8386271971275937e-40, - 2.8423149094768666e-40, - 2.8459987964920738e-40, - 2.849678818594841e-40, - 2.8533549821669843e-40, - 2.857027332119157e-40, - 2.860695814390028e-40, - 2.8643603610091606e-40, - 2.8680209135503496e-40, - 2.871677481397931e-40, - 2.875330103293762e-40, - 2.8789788180973825e-40, - 2.882623664668334e-40, - 2.8862646818661704e-40, - 2.8899019085163687e-40, - 2.893535385151774e-40, - 2.897165210784426e-40, - 2.9007915453128493e-40, - 2.9044145514237976e-40, - 2.9080343750452745e-40, - 2.9116510773638443e-40, - 2.9152646928435827e-40, - 2.918875255938474e-40, - 2.9224828011025074e-40, - 2.92608736278967e-40, - 2.9296889802150537e-40, - 2.9332877595283214e-40, - 2.9368838975569885e-40, - 2.940477626825845e-40, - 2.9440691807587827e-40, - 2.9476588130751987e-40, - 2.951246897080358e-40, - 2.9548338497297098e-40, - 2.9584200880427286e-40, - 2.9620060290388896e-40, - 2.9655920897376722e-40, - 2.9691786843738967e-40, - 2.9727661822974252e-40, - 2.9763549283117004e-40, - 2.9799452772662754e-40, - 2.983537584391245e-40, - 2.987132193087459e-40, - 2.9907293017652947e-40, - 2.9943290116163606e-40, - 2.9979314220394074e-40, - 3.0015366324345688e-40, - 3.0051447422020776e-40, - 3.008755851645545e-40, - 3.0123701030050794e-40, - 3.015987647526039e-40, - 3.019608562280893e-40, - 3.0232329177007014e-40, - 3.0268607852178647e-40, - 3.0304923342626672e-40, - 3.034127913254269e-40, - 3.0377678896778445e-40, - 3.0414126310185663e-40, - 3.0450625047616072e-40, - 3.0487178783921423e-40, - 3.05237910855496e-40, - 3.0560465431791935e-40, - 3.059720677549485e-40, - 3.0634020505648465e-40, - 3.0670912011254694e-40, - 3.0707886420960018e-40, - 3.0744946379893543e-40, - 3.0782093156008726e-40, - 3.0819328002587066e-40, - 3.0856652172910104e-40, - 3.0894066920259334e-40, - 3.0931573480732325e-40, - 3.0969172549543057e-40, - 3.100686316882543e-40, - 3.104464302852637e-40, - 3.108250973699001e-40, - 3.1120460902873465e-40, - 3.1158495140809578e-40, - 3.1196615045134625e-40, - 3.123482419492093e-40, - 3.1273126169240755e-40, - 3.1311524547166427e-40, - 3.1350022907770234e-40, - 3.1388624784625145e-40, - 3.142733316697495e-40, - 3.1466149494699818e-40, - 3.1505074441140164e-40, - 3.1544108670536177e-40, - 3.1583252845760782e-40, - 3.1622506363359094e-40, - 3.1661865009168506e-40, - 3.1701323929709317e-40, - 3.1740878271257376e-40, - 3.1780523179287984e-40, - 3.1820253799112763e-40, - 3.1860065182738717e-40, - 3.189995193287977e-40, - 3.1939909360548233e-40, - 3.197993316161882e-40, - 3.202001903315041e-40, - 3.2060162672246978e-40, - 3.210036033979793e-40, - 3.2140610267601287e-40, - 3.2180911117884657e-40, - 3.2221261552875722e-40, - 3.226166023480206e-40, - 3.230210582589132e-40, - 3.2342597090957023e-40, - 3.238313343396401e-40, - 3.242371346560917e-40, - 3.2464335239200154e-40, - 3.2504996804352982e-40, - 3.2545696210683687e-40, - 3.2586431395942727e-40, - 3.2627199433057867e-40, - 3.266799699192771e-40, - 3.270882074019512e-40, - 3.2749667345502954e-40, - 3.2790533475494045e-40, - 3.2831415754591135e-40, - 3.2872310074509953e-40, - 3.2913212703280194e-40, - 3.2954120839286582e-40, - 3.299503171455568e-40, - 3.303594256111404e-40, - 3.307685061799521e-40, - 3.3117753479005655e-40, - 3.3158649253760305e-40, - 3.319953609250206e-40, - 3.324041214547369e-40, - 3.3281275562918108e-40, - 3.3322124495715196e-40, - 3.336295741793424e-40, - 3.340377327316837e-40, - 3.3444570089313755e-40, - 3.3485345713199845e-40, - 3.3526097991656044e-40, - 3.3566824771511764e-40, - 3.3607523857932056e-40, - 3.3648192691754648e-40, - 3.368882852550759e-40, - 3.372942861014099e-40, - 3.376999019650346e-40, - 3.3810510534863396e-40, - 3.3850986896478926e-40, - 3.389141701084654e-40, - 3.3931800115574346e-40, - 3.3972136512019416e-40, - 3.401242654006735e-40, - 3.4052670539603697e-40, - 3.4092868850514107e-40, - 3.4133021890633322e-40, - 3.4173130451062013e-40, - 3.421319543449879e-40, - 3.4253217743662333e-40, - 3.4293198281271312e-40, - 3.4333137950044433e-40, - 3.437303760218811e-40, - 3.4412897621236637e-40, - 3.4452717854458923e-40, - 3.4492497988314907e-40, - 3.4532237709634865e-40, - 3.4571936705326673e-40, - 3.461159466229826e-40, - 3.4651211196312317e-40, - 3.4690785594257254e-40, - 3.4730317048058493e-40, - 3.4769804749632233e-40, - 3.4809247890894676e-40, - 3.484864566376201e-40, - 3.4887997265211753e-40, - 3.4927301949607485e-40, - 3.496655913083318e-40, - 3.500576828837169e-40, - 3.5044928902062807e-40, - 3.5084040451746344e-40, - 3.5123102417262053e-40, - 3.5162114272189345e-40, - 3.5201075437148743e-40, - 3.5239985306094677e-40, - 3.5278843272776657e-40, - 3.531764873094427e-40, - 3.5356401074347025e-40, - 3.539509971904441e-40, - 3.543374436134326e-40, - 3.5472334673502e-40, - 3.551087016426863e-40, - 3.5549350338800628e-40, - 3.5587774702255495e-40, - 3.5626142759790683e-40, - 3.5664454020910827e-40, - 3.570270817922945e-40, - 3.5740905176654954e-40, - 3.5779044972641167e-40, - 3.58171275266419e-40, - 3.585515279982182e-40, - 3.5893120775984972e-40, - 3.5931031356429307e-40, - 3.5968884449731824e-40, - 3.600668028900947e-40, - 3.604441914287741e-40, - 3.6082101279950808e-40, - 3.611972696884484e-40, - 3.6157296478174693e-40, - 3.6194810054262645e-40, - 3.6232267782845453e-40, - 3.6269669679285924e-40, - 3.630701575864786e-40, - 3.6344306035994986e-40, - 3.6381540526391135e-40, - 3.641871932068137e-40, - 3.645584325929409e-40, - 3.649291384121407e-40, - 3.652993270889286e-40, - 3.656690146724199e-40, - 3.660382162028164e-40, - 3.6640694655878476e-40, - 3.667752206189971e-40, - 3.671430534847908e-40, - 3.675104610705507e-40, - 3.678774594761844e-40, - 3.682440648015996e-40, - 3.686102931467039e-40, - 3.689761606114049e-40, - 3.693416824222627e-40, - 3.69706870290796e-40, - 3.700717359206398e-40, - 3.7043629127591415e-40, - 3.708005483207393e-40, - 3.711645190192358e-40, - 3.715282153355241e-40, - 3.718916492337146e-40, - 3.722548326147275e-40, - 3.7261777821250864e-40, - 3.729805005482297e-40, - 3.733430143193721e-40, - 3.7370533422341736e-40, - 3.740674749578671e-40, - 3.744294521786636e-40, - 3.747912836165638e-40, - 3.7515298266943845e-40, - 3.755145615930715e-40, - 3.758760326432476e-40, - 3.76237408075751e-40, - 3.765987001463655e-40, - 3.76959921110876e-40, - 3.773210826123991e-40, - 3.776821926131749e-40, - 3.780432577072018e-40, - 3.784042844861973e-40, - 3.787652795418786e-40, - 3.7912624946556765e-40, - 3.79487199283323e-40, - 3.798481292737592e-40, - 3.802090515951983e-40, - 3.8056998329043045e-40, - 3.809309414067788e-40, - 3.812919429915671e-40, - 3.816530050921188e-40, - 3.820141447557576e-40, - 3.823753792247275e-40, - 3.8273673122803894e-40, - 3.830982296047408e-40, - 3.834599035139096e-40, - 3.8382178211462135e-40, - 3.841838945659526e-40, - 3.845462703096222e-40, - 3.849089440896746e-40, - 3.852719358922443e-40, - 3.85635246746362e-40, - 3.859988769761289e-40, - 3.863628269388881e-40, - 3.867270977988395e-40 - ] - }, - "nue_bar": { - "cc": [ - 1.0626705888760508e-45, - 2.1222001954381967e-43, - 6.51989627331938e-43, - 1.1000767998286987e-42, - 1.5795891046698642e-42, - 2.155542668104848e-42, - 2.7609986229343012e-42, - 3.391975565303971e-42, - 4.061647008578814e-42, - 4.76227589686787e-42, - 5.486626778780219e-42, - 6.221162167766056e-42, - 6.975496825774673e-42, - 7.728436968567998e-42, - 8.477479490705047e-42, - 9.227322480550409e-42, - 9.958645265624572e-42, - 1.0675153686387403e-41, - 1.1380303218128572e-41, - 1.2090827870984199e-41, - 1.275757241612741e-41, - 1.3441384072409737e-41, - 1.4109164125365584e-41, - 1.4771818545787034e-41, - 1.541293869564241e-41, - 1.6064181750493303e-41, - 1.671980784630461e-41, - 1.7388562489102517e-41, - 1.804595483238737e-41, - 1.8686013029772946e-41, - 1.930945030443503e-41, - 1.9895288643661144e-41, - 2.0494994515473855e-41, - 2.1124199041993163e-41, - 2.1770662886693992e-41, - 2.2397877234387349e-41, - 2.299437389944172e-41, - 2.3589075859320887e-41, - 2.4198188872213503e-41, - 2.4845560695414843e-41, - 2.5488935537450524e-41, - 2.613379019107008e-41, - 2.6745246247645984e-41, - 2.7336082659979597e-41, - 2.790271235483386e-41, - 2.843962241324693e-41, - 2.899865507252802e-41, - 2.9590489832737383e-41, - 3.0220120937419467e-41, - 3.086733775517435e-41, - 3.1512157791383725e-41, - 3.215156621760422e-41, - 3.276061674953489e-41, - 3.3349746794824133e-41, - 3.39161789590898e-41, - 3.445306152313181e-41, - 3.4988328760972734e-41, - 3.553352722136727e-41, - 3.6108018906732155e-41, - 3.67305633518675e-41, - 3.7375342621935903e-41, - 3.8030320170767436e-41, - 3.8674340703279744e-41, - 3.9287144885382767e-41, - 3.985601098492319e-41, - 4.0406968358159546e-41, - 4.0955975081639194e-41, - 4.1509180244036953e-41, - 4.2082783676112496e-41, - 4.267857456913712e-41, - 4.3283113908903953e-41, - 4.388627215141018e-41, - 4.4481548897563024e-41, - 4.5048665554378844e-41, - 4.5601123007358783e-41, - 4.613985224618514e-41, - 4.668099924606768e-41, - 4.723702245925712e-41, - 4.781873451333737e-41, - 4.843621945945708e-41, - 4.90815078631238e-41, - 4.974248841617125e-41, - 5.040403890716848e-41, - 5.10714378046042e-41, - 5.171519365191784e-41, - 5.232341377319642e-41, - 5.291354899697902e-41, - 5.348065577044615e-41, - 5.40298780624857e-41, - 5.455827142137837e-41, - 5.507598618701752e-41, - 5.560430546458911e-41, - 5.613641001934482e-41, - 5.667191172353671e-41, - 5.721506471490196e-41, - 5.776816717207683e-41, - 5.832885158840931e-41, - 5.890079890372834e-41, - 5.948926376328872e-41, - 6.00916192624264e-41, - 6.070048831985448e-41, - 6.13128161481932e-41, - 6.192930767598893e-41, - 6.253529416175636e-41, - 6.312069286409285e-41, - 6.369116556587797e-41, - 6.424874809460524e-41, - 6.479460315003743e-41, - 6.533831046798291e-41, - 6.588808372020962e-41, - 6.645019694841301e-41, - 6.702657333630358e-41, - 6.76173536016143e-41, - 6.82244127957506e-41, - 6.885090227965495e-41, - 6.949591814339007e-41, - 7.015151221570575e-41, - 7.081245096244703e-41, - 7.147570200937193e-41, - 7.213573274710535e-41, - 7.278727187902227e-41, - 7.342403954120677e-41, - 7.404418894887938e-41, - 7.464914194999734e-41, - 7.52392872441373e-41, - 7.581581910882234e-41, - 7.638192598902055e-41, - 7.694124802712453e-41, - 7.749765310687759e-41, - 7.80529451060458e-41, - 7.860464892814742e-41, - 7.915294472650771e-41, - 7.969891991293625e-41, - 8.024379027558714e-41, - 8.079499781060694e-41, - 8.13560761829769e-41, - 8.192007429893841e-41, - 8.248396537730283e-41, - 8.305222929217105e-41, - 8.36304030508747e-41, - 8.422224045628192e-41, - 8.482444500753899e-41, - 8.542999273645052e-41, - 8.603701141475872e-41, - 8.664927164103607e-41, - 8.726633695965952e-41, - 8.788183937636114e-41, - 8.849129151491577e-41, - 8.909654513312209e-41, - 8.970100942986112e-41, - 9.030413763858245e-41, - 9.090285812418197e-41, - 9.149444591986598e-41, - 9.207691102194815e-41, - 9.265141569088338e-41, - 9.32217286568573e-41, - 9.37891448801203e-41, - 9.435167313399773e-41, - 9.490850560996343e-41, - 9.546285261084322e-41, - 9.601877382239894e-41, - 9.657709512527715e-41, - 9.713709532340322e-41, - 9.76991149909824e-41, - 9.826424969539766e-41, - 9.883255223322159e-41, - 9.94031329167449e-41, - 9.997490053362953e-41, - 1.005466833037706e-40, - 1.0111841023725771e-40, - 1.0169048552210262e-40, - 1.0226315438226626e-40, - 1.0283604718833513e-40, - 1.0340727539121595e-40, - 1.0397602812659222e-40, - 1.0454332755001389e-40, - 1.0510988061769153e-40, - 1.056762570735773e-40, - 1.0624271714852131e-40, - 1.068110460339888e-40, - 1.073840625778784e-40, - 1.0796356124622373e-40, - 1.0855004215655807e-40, - 1.0914291308919274e-40, - 1.0974161001513944e-40, - 1.1034610721792817e-40, - 1.1095767942206076e-40, - 1.1157680289256956e-40, - 1.1220360407946674e-40, - 1.12839005958017e-40, - 1.1348437556575046e-40, - 1.1413853258149792e-40, - 1.1479701820657126e-40, - 1.1545497401981477e-40, - 1.1611010312695742e-40, - 1.1676275584935062e-40, - 1.1741337686291005e-40, - 1.1806111142459168e-40, - 1.1870319561600234e-40, - 1.1933735284639443e-40, - 1.1996247905209351e-40, - 1.205790094069393e-40, - 1.211874806716624e-40, - 1.2178827215252086e-40, - 1.2238025884346017e-40, - 1.229633609651512e-40, - 1.235391458012906e-40, - 1.2410986787982685e-40, - 1.2467699833130437e-40, - 1.2524166454616296e-40, - 1.2580486504628973e-40, - 1.2636723844164502e-40, - 1.2692918724314046e-40, - 1.2749110189918807e-40, - 1.2805388340358957e-40, - 1.2861926857834985e-40, - 1.2918930306363168e-40, - 1.2976545365071273e-40, - 1.3034815746981667e-40, - 1.3093656797977987e-40, - 1.3152883574480137e-40, - 1.3212275064512784e-40, - 1.3271688225339223e-40, - 1.333114185038854e-40, - 1.3390686078335594e-40, - 1.3450323689161613e-40, - 1.3510014453435798e-40, - 1.3569726040131062e-40, - 1.3629431306511765e-40, - 1.3689114604850276e-40, - 1.3748774049435657e-40, - 1.3808366428540594e-40, - 1.3867810141491898e-40, - 1.3926983899778932e-40, - 1.3985753242341843e-40, - 1.4044007363869404e-40, - 1.4101753259624445e-40, - 1.4159137132947185e-40, - 1.4216319920678325e-40, - 1.427342670324875e-40, - 1.4330532535182573e-40, - 1.4387604136611765e-40, - 1.444458575058628e-40, - 1.450147571569388e-40, - 1.4558406125493107e-40, - 1.4615552734166018e-40, - 1.4673033612620422e-40, - 1.473090430416416e-40, - 1.4789143184141809e-40, - 1.484770953800224e-40, - 1.4906585635091439e-40, - 1.496581479849814e-40, - 1.5025471020472674e-40, - 1.5085587232441347e-40, - 1.5146086339670394e-40, - 1.5206844965114845e-40, - 1.526777029107762e-40, - 1.5328867110205904e-40, - 1.5390235220030517e-40, - 1.5451979219015372e-40, - 1.5514180017886494e-40, - 1.5576778079574666e-40, - 1.5639608870911924e-40, - 1.5702486284197321e-40, - 1.5765229600863054e-40, - 1.5827771408968951e-40, - 1.5890143654122087e-40, - 1.595240479088165e-40, - 1.6014549757164323e-40, - 1.60764380533454e-40, - 1.6137939046423402e-40, - 1.6198960348367835e-40, - 1.6259472854500086e-40, - 1.6319571035870147e-40, - 1.6379364375593986e-40, - 1.6438961874161022e-40, - 1.649843310098669e-40, - 1.6557746075411201e-40, - 1.6616860530776856e-40, - 1.6675727315773378e-40, - 1.6734314675600367e-40, - 1.6792692904329258e-40, - 1.6850960656470359e-40, - 1.6909196743193403e-40, - 1.6967447352248392e-40, - 1.7025728259701533e-40, - 1.708407974380046e-40, - 1.714256706569948e-40, - 1.7201253283042836e-40, - 1.7260159753505142e-40, - 1.7319257755891398e-40, - 1.7378473590225278e-40, - 1.7437735200080725e-40, - 1.7497033785174401e-40, - 1.7556377356241686e-40, - 1.7615770956529656e-40, - 1.7675229701002215e-40, - 1.7734725070765224e-40, - 1.7794192942014623e-40, - 1.7853615498749194e-40, - 1.7913007227780805e-40, - 1.797239828628154e-40, - 1.8031800496252675e-40, - 1.8091149910240049e-40, - 1.8150368049693397e-40, - 1.8209407756731187e-40, - 1.826825425112806e-40, - 1.832694015835276e-40, - 1.838551017218058e-40, - 1.8444018972518477e-40, - 1.850254481491739e-40, - 1.856111391906663e-40, - 1.8619681638386714e-40, - 1.867817167744035e-40, - 1.8736513248286912e-40, - 1.8794680102131926e-40, - 1.8852715412281404e-40, - 1.891069056546823e-40, - 1.8968672641090186e-40, - 1.9026728185697334e-40, - 1.908489811510148e-40, - 1.914318503053856e-40, - 1.9201584295720054e-40, - 1.926009982451618e-40, - 1.931874044772013e-40, - 1.937752980775452e-40, - 1.9436505897960025e-40, - 1.9495716683942716e-40, - 1.955522320894744e-40, - 1.9615077030439497e-40, - 1.9675288133091133e-40, - 1.9735829023199998e-40, - 1.979667024888539e-40, - 1.985780069499283e-40, - 1.9919224219401707e-40, - 1.9980950665615754e-40, - 2.004297590668523e-40, - 2.010529311025924e-40, - 2.0167910104806333e-40, - 2.0230865462218372e-40, - 2.0294189638629393e-40, - 2.0357872382462208e-40, - 2.0421894897846927e-40, - 2.048623850025029e-40, - 2.055085237016996e-40, - 2.061565548722185e-40, - 2.0680574828194085e-40, - 2.074553775695325e-40, - 2.0810471956436016e-40, - 2.0875339856752785e-40, - 2.094014807172015e-40, - 2.100490285854723e-40, - 2.1069615100082884e-40, - 2.1134296847805837e-40, - 2.119893843139102e-40, - 2.1263486807874843e-40, - 2.1327885357525133e-40, - 2.1392079051824153e-40, - 2.1456015211282724e-40, - 2.151964705394541e-40, - 2.158295807402243e-40, - 2.16459585726865e-40, - 2.1708663652063543e-40, - 2.1771089362603647e-40, - 2.1833248608373345e-40, - 2.1895136362848645e-40, - 2.195674460793772e-40, - 2.201807255512577e-40, - 2.2079120492226007e-40, - 2.213988760240466e-40, - 2.2200380788952153e-40, - 2.2260625454666766e-40, - 2.232064999948801e-40, - 2.238047953387332e-40, - 2.2440138827449958e-40, - 2.2499653194593833e-40, - 2.255903118491906e-40, - 2.2618271945448987e-40, - 2.26773700689238e-40, - 2.273631165581511e-40, - 2.279508222945019e-40, - 2.2853693986306408e-40, - 2.291220176272037e-40, - 2.297066671295952e-40, - 2.3029148057282763e-40, - 2.3087698333060687e-40, - 2.3146365670459913e-40, - 2.3205169283240913e-40, - 2.3264102757104062e-40, - 2.332315736416651e-40, - 2.338232389652229e-40, - 2.344158853182202e-40, - 2.350094000612867e-40, - 2.3560383969495346e-40, - 2.3619934061465127e-40, - 2.367960607589425e-40, - 2.373941555543622e-40, - 2.379937320200663e-40, - 2.3859480392256197e-40, - 2.3919722561490418e-40, - 2.398007948528637e-40, - 2.4040533244025466e-40, - 2.4101066161739955e-40, - 2.4161661928285782e-40, - 2.4222311633631782e-40, - 2.4283019556991062e-40, - 2.434379295980599e-40, - 2.4404632052675913e-40, - 2.446553431821505e-40, - 2.4526498154970326e-40, - 2.4587528336868065e-40, - 2.464862224935686e-40, - 2.470977303207793e-40, - 2.477096943940286e-40, - 2.4832192029270547e-40, - 2.489341909808522e-40, - 2.495462347527383e-40, - 2.501579227934801e-40, - 2.507691889979944e-40, - 2.5137996560597614e-40, - 2.519901548602116e-40, - 2.5259964124632553e-40, - 2.5320844608832516e-40, - 2.5381675499494983e-40, - 2.5442475961120607e-40, - 2.55032647064138e-40, - 2.556406036575655e-40, - 2.5624883945734688e-40, - 2.568574530106419e-40, - 2.5746623976139213e-40, - 2.5807491894953475e-40, - 2.5868316752672462e-40, - 2.5929065639497035e-40, - 2.5989705897301178e-40, - 2.6050213304398465e-40, - 2.611059168863776e-40, - 2.6170857194102733e-40, - 2.623102515489782e-40, - 2.629110948916049e-40, - 2.635112397932772e-40, - 2.6411081864830036e-40, - 2.6470992087709306e-40, - 2.6530862773398787e-40, - 2.6590702916294572e-40, - 2.6650516731592092e-40, - 2.6710300673851124e-40, - 2.677005053382599e-40, - 2.682976697543203e-40, - 2.6889459325733754e-40, - 2.694913846901069e-40, - 2.7008815255932535e-40, - 2.7068498105438765e-40, - 2.7128188109777153e-40, - 2.718788397010995e-40, - 2.724758311859034e-40, - 2.73072911956446e-40, - 2.736701963492435e-40, - 2.742678027017082e-40, - 2.7486585296008747e-40, - 2.7546446447422635e-40, - 2.7606374797292586e-40, - 2.7666372247683203e-40, - 2.772642578764998e-40, - 2.778651847649101e-40, - 2.7846633021615783e-40, - 2.7906752232573172e-40, - 2.7966862591570975e-40, - 2.8026958547432327e-40, - 2.8087057254095874e-40, - 2.8147190823071685e-40, - 2.8207384089401826e-40, - 2.826765555678811e-40, - 2.8328023486753625e-40, - 2.8388506656991814e-40, - 2.8449123276488546e-40, - 2.8509867289386213e-40, - 2.857071947566145e-40, - 2.863165787848357e-40, - 2.869265099927907e-40, - 2.8753664734398715e-40, - 2.881466530037808e-40, - 2.887562566170676e-40, - 2.8936542688198925e-40, - 2.899742320571008e-40, - 2.9058274105538984e-40, - 2.9119100545870856e-40, - 2.917990460360193e-40, - 2.9240688351316973e-40, - 2.9301457173152076e-40, - 2.9362217130386438e-40, - 2.942297141922503e-40, - 2.948372311249391e-40, - 2.9544475351905653e-40, - 2.960523308865679e-40, - 2.9666003036750343e-40, - 2.9726785209219244e-40, - 2.978757108047555e-40, - 2.984834963207597e-40, - 2.990910906312711e-40, - 2.9969837515587436e-40, - 3.003052321993366e-40, - 3.0091156664541416e-40, - 3.0151735927286127e-40, - 3.0212267755998422e-40, - 3.0272762147063208e-40, - 3.0333228088744847e-40, - 3.0393673011409e-40, - 3.045410422197233e-40, - 3.051452903721297e-40, - 3.057495346891808e-40, - 3.0635380500489513e-40, - 3.0695817354950925e-40, - 3.0756272413085117e-40, - 3.081675414047679e-40, - 3.0877271995822616e-40, - 3.093783571689525e-40, - 3.0998455057282077e-40, - 3.105913944926374e-40, - 3.1119889703228037e-40, - 3.1180698720467165e-40, - 3.1241558841798885e-40, - 3.1302462766613045e-40, - 3.1363403973527206e-40, - 3.1424375874731503e-40, - 3.148537290045006e-40, - 3.1546394284349478e-40, - 3.160744769564972e-40, - 3.1668546932725826e-40, - 3.1729706138800427e-40, - 3.179093952093715e-40, - 3.1852261417237073e-40, - 3.191368521153507e-40, - 3.197522135513994e-40, - 3.203687414058528e-40, - 3.2098637575518803e-40, - 3.2160501963401227e-40, - 3.222245797229641e-40, - 3.2284496270268094e-40, - 3.2346607022817654e-40, - 3.2408778134627553e-40, - 3.2470998645488843e-40, - 3.253325925375425e-40, - 3.2595558491708514e-40, - 3.2657897332369575e-40, - 3.2720273989381956e-40, - 3.2782686432788105e-40, - 3.284513263117992e-40, - 3.290761156664669e-40, - 3.2970126962246084e-40, - 3.3032682666258436e-40, - 3.3095278367405492e-40, - 3.3157911494237307e-40, - 3.3220573552770438e-40, - 3.3283251567491407e-40, - 3.334593242635806e-40, - 3.3408602957292563e-40, - 3.3471252228337547e-40, - 3.353387870763053e-40, - 3.359648611205704e-40, - 3.3659079639292468e-40, - 3.372166413765589e-40, - 3.378424143167784e-40, - 3.3846811642318987e-40, - 3.390937485864255e-40, - 3.397193102939606e-40, - 3.4034476160296763e-40, - 3.4096997908413898e-40, - 3.415947864466345e-40, - 3.422190043143973e-40, - 3.4284245835968288e-40, - 3.434650258265803e-40, - 3.4408661921894817e-40, - 3.447071596163539e-40, - 3.4532661194377226e-40, - 3.4594500869124777e-40, - 3.465624209208606e-40, - 3.4717892439099053e-40, - 3.4779459485569447e-40, - 3.48409507629846e-40, - 3.4902374100075443e-40, - 3.4963738585811635e-40, - 3.5025051772253855e-40, - 3.5086315785984787e-40, - 3.514752744793134e-40, - 3.520868063909166e-40, - 3.5269768275973735e-40, - 3.5330783232799942e-40, - 3.5391718377297687e-40, - 3.5452565893587192e-40, - 3.5513318166197123e-40, - 3.557397170766042e-40, - 3.5634528497526004e-40, - 3.569499334427837e-40, - 3.5755373043225795e-40, - 3.581567479103497e-40, - 3.5875905602511837e-40, - 3.5936072492523363e-40, - 3.5996182467286422e-40, - 3.605624215487152e-40, - 3.6116255223044062e-40, - 3.6176224512727585e-40, - 3.62361545196399e-40, - 3.629605006240268e-40, - 3.6355916568365954e-40, - 3.6415759587983083e-40, - 3.647558466472198e-40, - 3.653539736945593e-40, - 3.6595203793213842e-40, - 3.665501161900159e-40, - 3.6714824882242217e-40, - 3.6774641853961895e-40, - 3.683446036813892e-40, - 3.689427828550331e-40, - 3.695409355984837e-40, - 3.7013904166825265e-40, - 3.707370805784389e-40, - 3.7133503083190646e-40, - 3.71932870589602e-40, - 3.725306330716052e-40, - 3.7312843028126676e-40, - 3.737263800592308e-40, - 3.7432460024562885e-40, - 3.749232054394284e-40, - 3.755222984282665e-40, - 3.761219794612527e-40, - 3.767223458712946e-40, - 3.7732348095245455e-40, - 3.779254276645032e-40, - 3.785281484199744e-40, - 3.79131593586974e-40, - 3.797357135178374e-40, - 3.803404585649558e-40, - 3.809457813947749e-40, - 3.81551650396868e-40, - 3.821580374055168e-40, - 3.8276492665780245e-40, - 3.8337231408701755e-40, - 3.839802255205945e-40, - 3.845886745330279e-40, - 3.851976629109413e-40, - 3.858071922283751e-40, - 3.864172640593702e-40, - 3.870278823482098e-40, - 3.87639067342117e-40, - 3.88250817691013e-40, - 3.888631129660071e-40, - 3.894759303291706e-40, - 3.900892441882958e-40, - 3.907030183107242e-40, - 3.913172129303321e-40, - 3.919317887975205e-40, - 3.925467066285779e-40, - 3.9316192477804044e-40, - 3.9377741692713084e-40, - 3.943931864102704e-40, - 3.950092358277393e-40, - 3.9562555648141445e-40, - 3.96242137158382e-40, - 3.968589616261343e-40, - 3.974759958400302e-40, - 3.980932011057233e-40, - 3.9871053902679505e-40, - 3.993279717816252e-40, - 3.999454438930586e-40, - 4.005629052267637e-40, - 4.011803348205954e-40, - 4.017977383261223e-40, - 4.024151235339862e-40, - 4.0303249811988525e-40, - 4.036498637395766e-40, - 4.042672109799986e-40, - 4.0488452671176306e-40, - 4.0550180160493486e-40, - 4.061190662615205e-40, - 4.067363609658315e-40, - 4.073537185707092e-40, - 4.079711623471495e-40, - 4.085887151398458e-40, - 4.092063997934918e-40, - 4.0982423890688795e-40, - 4.1044224903933505e-40, - 4.110604449567417e-40, - 4.116788311109905e-40, - 4.122973635732879e-40, - 4.129159901902434e-40, - 4.135346360665935e-40, - 4.141532106167424e-40, - 4.1477162432711215e-40, - 4.153897876934493e-40, - 4.160076112115012e-40, - 4.1662500552969475e-40, - 4.172418828574583e-40, - 4.17858183655016e-40, - 4.184739084541133e-40, - 4.190890663869952e-40, - 4.197036986630638e-40, - 4.2031788201518774e-40, - 4.209316790259516e-40, - 4.2154514446232916e-40, - 4.22158332984647e-40, - 4.227712992523416e-40, - 4.23384097720411e-40, - 4.239967786968257e-40, - 4.246093762558727e-40, - 4.252219210277618e-40, - 4.2583443159152495e-40, - 4.2644689676708945e-40, - 4.270593000402041e-40, - 4.2767161033361485e-40, - 4.2828378176003515e-40, - 4.288957675642708e-40, - 4.2950752321099314e-40, - 4.301190189048004e-40, - 4.307302384733266e-40, - 4.313411893193294e-40, - 4.31951890939931e-40, - 4.325623764246951e-40, - 4.331726859061106e-40, - 4.337828595585051e-40, - 4.343929300772914e-40, - 4.3500290413456625e-40, - 4.3561278113078774e-40, - 4.36222548745939e-40, - 4.368321897125951e-40, - 4.374416988034085e-40, - 4.380510842873066e-40, - 4.386603760779844e-40, - 4.3926959671533586e-40, - 4.39878767064554e-40, - 4.404879079910124e-40, - 4.410970401364198e-40, - 4.417061766802133e-40, - 4.42315321421495e-40, - 4.429244844411528e-40, - 4.4353365935977326e-40, - 4.441428311164449e-40, - 4.447519845371196e-40, - 4.4536110528680285e-40, - 4.4597017999336536e-40, - 4.465791951869088e-40, - 4.471881373975344e-40, - 4.4779699315533714e-40, - 4.484057501493709e-40, - 4.490144156484223e-40, - 4.496230176568418e-40, - 4.5023159259175314e-40, - 4.508401783297378e-40, - 4.514488120620342e-40, - 4.5205751726883724e-40, - 4.526662842675845e-40, - 4.532750802029323e-40, - 4.53883870869848e-40, - 4.544926220632995e-40, - 4.551012995934959e-40, - 4.557098725384501e-40, - 4.563183357129199e-40, - 4.5692670923293315e-40, - 4.575350150393099e-40, - 4.581432757882933e-40, - 4.587515304102408e-40, - 4.59359833617927e-40, - 4.599682276646059e-40, - 4.605767352517039e-40, - 4.6118537712475135e-40, - 4.617941740214393e-40, - 4.624031444442884e-40, - 4.630123024053285e-40, - 4.636216686266208e-40, - 4.642312760988489e-40, - 4.648411595101171e-40, - 4.654513375316677e-40, - 4.66061800371531e-40, - 4.666725353020183e-40, - 4.672835263098406e-40, - 4.678947455963323e-40, - 4.685061621278822e-40, - 4.691177466439501e-40, - 4.6972947608215044e-40, - 4.703413217235743e-40, - 4.7095325484425664e-40, - 4.71565263674869e-40, - 4.721773523201972e-40, - 4.727895626123101e-40, - 4.7340194892681924e-40, - 4.7401456564808335e-40, - 4.746274661336775e-40, - 4.752406823239456e-40, - 4.758542216984315e-40, - 4.764680856044674e-40, - 4.770822797965063e-40, - 4.776968168890976e-40, - 4.783117097870174e-40, - 4.789269812686775e-40, - 4.79542650617665e-40, - 4.801586961207936e-40, - 4.807750923270345e-40, - 4.813918137853595e-40, - 4.820088350447403e-40, - 4.826261280541123e-40, - 4.832436421793805e-40, - 4.838613091282594e-40, - 4.844790486058032e-40, - 4.850967777028395e-40, - 4.857144135175683e-40, - 4.863318785195775e-40, - 4.869491698049312e-40, - 4.875663435469979e-40, - 4.881834583016984e-40, - 4.888005726249531e-40, - 4.894177450726833e-40, - 4.900350342097975e-40, - 4.906525002591006e-40, - 4.9127022320647706e-40, - 4.918883059110708e-40, - 4.925068530118392e-40, - 4.931259691477398e-40, - 4.937457506959204e-40, - 4.943662207205699e-40, - 4.949873590483413e-40, - 4.956091339786635e-40, - 4.962315119462361e-40, - 4.968544593821306e-40, - 4.974779426894216e-40, - 4.981019267599361e-40, - 4.987263539281447e-40, - 4.9935115173149845e-40, - 4.999762572342761e-40, - 5.0060160801821935e-40, - 5.012271453671836e-40, - 5.01852852275501e-40, - 5.0247873803180204e-40, - 5.031048129608563e-40, - 5.0373108452079695e-40, - 5.04357557428346e-40, - 5.049842362902911e-40, - 5.0561112257908224e-40, - 5.0623823302607455e-40, - 5.068656111786867e-40, - 5.074932973394456e-40, - 5.08121328640197e-40, - 5.08749742430806e-40, - 5.093785600673584e-40, - 5.100077835195409e-40, - 5.1063741359234625e-40, - 5.1126745192484106e-40, - 5.1189790934403204e-40, - 5.12528800205753e-40, - 5.131601417362008e-40, - 5.137919518206565e-40, - 5.144242301267253e-40, - 5.150569731710968e-40, - 5.1569017584063295e-40, - 5.163238230028069e-40, - 5.169579010225764e-40, - 5.17592411332957e-40, - 5.1822735911304656e-40, - 5.188627495419435e-40, - 5.194985877987456e-40, - 5.2013488054137575e-40, - 5.207716379271702e-40, - 5.214088651344153e-40, - 5.220465661528666e-40, - 5.226847453756291e-40, - 5.233234071998443e-40, - 5.239625560226552e-40, - 5.246021952733484e-40, - 5.252423205585676e-40, - 5.258829203156265e-40, - 5.265239824809904e-40, - 5.271654949910667e-40, - 5.278074457819376e-40, - 5.284498227885515e-40, - 5.290926127722653e-40, - 5.297357969252979e-40, - 5.303793500707906e-40, - 5.310232460322295e-40, - 5.316674586331016e-40, - 5.32311961696893e-40, - 5.329567294459909e-40, - 5.3360174389982936e-40, - 5.342469967120141e-40, - 5.348924794381589e-40, - 5.3553818356359324e-40, - 5.3618410057364704e-40, - 5.368302219763567e-40, - 5.3747654036944525e-40, - 5.3812304905611626e-40, - 5.3876973689968735e-40, - 5.394165921062749e-40, - 5.400636029744872e-40, - 5.407107578029323e-40, - 5.413580444924322e-40, - 5.420054448031611e-40, - 5.426529360002825e-40, - 5.433004981862871e-40, - 5.439481121765939e-40, - 5.445957586433913e-40, - 5.452434182753711e-40, - 5.458910724397587e-40, - 5.465387044641428e-40, - 5.471862990237425e-40, - 5.4783383603907864e-40, - 5.484812904774822e-40, - 5.4912863721054215e-40, - 5.497758511152242e-40, - 5.504229072739471e-40, - 5.510697810335322e-40, - 5.5171644776292e-40, - 5.523628839450958e-40, - 5.530090643179433e-40, - 5.536549614048124e-40, - 5.543005448945586e-40, - 5.549457754803402e-40, - 5.555906064077628e-40, - 5.562349901182084e-40, - 5.5687887932538186e-40, - 5.575222339359835e-40, - 5.5816502135603915e-40, - 5.588072107118248e-40, - 5.59448776229735e-40, - 5.600896933151205e-40, - 5.607299373733326e-40, - 5.613694837331308e-40, - 5.6200830131454764e-40, - 5.62646346504477e-40, - 5.632835870197713e-40, - 5.6392000956557536e-40, - 5.645556060926058e-40, - 5.6519036855638595e-40, - 5.658242889124401e-40, - 5.664573606936394e-40, - 5.6708959012402946e-40, - 5.677209885401701e-40, - 5.683515651362768e-40, - 5.689813289878464e-40, - 5.696102891703762e-40, - 5.702384547593631e-40, - 5.70865834837268e-40, - 5.714924356801429e-40, - 5.721182563457441e-40, - 5.727432953078944e-40, - 5.73367551096489e-40, - 5.7399102224137856e-40, - 5.746137072724065e-40, - 5.752356047194165e-40, - 5.758567132732552e-40, - 5.7647703783688945e-40, - 5.770965895829003e-40, - 5.777153799178606e-40, - 5.783334202483434e-40, - 5.789507219809219e-40, - 5.795672966858808e-40, - 5.801831592502662e-40, - 5.807983374715538e-40, - 5.81412865922063e-40, - 5.820267785419199e-40, - 5.826401092703774e-40, - 5.832528920466883e-40, - 5.838651608101054e-40, - 5.844769494580309e-40, - 5.850882915282475e-40, - 5.8569922180864386e-40, - 5.863097760859172e-40, - 5.869199901057416e-40, - 5.875298996137919e-40, - 5.881395402209496e-40, - 5.8874894485987956e-40, - 5.893581340295025e-40, - 5.899671203886471e-40, - 5.905759135478969e-40, - 5.911845225622576e-40, - 5.9179295657300694e-40, - 5.924012247214226e-40, - 5.930093359023989e-40, - 5.9361729350360656e-40, - 5.942250954927287e-40, - 5.948327399364216e-40, - 5.954402268100159e-40, - 5.9604755683869555e-40, - 5.966547305955669e-40, - 5.972617454724982e-40, - 5.97868608107952e-40, - 5.98475337664048e-40, - 5.990819538233668e-40, - 5.996884766330668e-40, - 6.002949222223552e-40, - 6.009013028680202e-40, - 6.015076307911086e-40, - 6.0211392373697105e-40, - 6.027202154354937e-40, - 6.033265424908661e-40, - 6.039329415065775e-40, - 6.0453944483193824e-40, - 6.051460770999025e-40, - 6.057528712768853e-40, - 6.0635986804522136e-40, - 6.069670840458705e-40, - 6.075745316806973e-40, - 6.081822233515536e-40, - 6.087901714605558e-40 - ], - "nc": [ - 4.2533894876074216e-46, - 1.2489595943743835e-43, - 4.225887061924891e-43, - 7.11176885039527e-43, - 9.889497410571092e-43, - 1.2791643552576498e-42, - 1.573431414162336e-42, - 1.860019661840071e-42, - 2.1462971707682042e-42, - 2.434665628880707e-42, - 2.7246327601084568e-42, - 3.019503918954079e-42, - 3.319859831219492e-42, - 3.616873691562799e-42, - 3.912730082908224e-42, - 4.2028814073195764e-42, - 4.482058061690734e-42, - 4.756966978650017e-42, - 5.027498469328141e-42, - 5.28716396032529e-42, - 5.541509021539408e-42, - 5.80804374092908e-42, - 6.055931850509306e-42, - 6.300857996751553e-42, - 6.541010458476693e-42, - 6.780831637630612e-42, - 7.021287388539624e-42, - 7.269971422278084e-42, - 7.51026635568411e-42, - 7.737406749017233e-42, - 7.962684854688889e-42, - 8.182132831611245e-42, - 8.411790128819213e-42, - 8.648181557493256e-42, - 8.884398917562947e-42, - 9.111536331361835e-42, - 9.330406991372566e-42, - 9.55112641751923e-42, - 9.778891836103085e-42, - 1.0018018463807197e-41, - 1.0250935386268664e-41, - 1.0484325564605777e-41, - 1.0703599740305877e-41, - 1.0917186194881951e-41, - 1.112288830866075e-41, - 1.131871457762514e-41, - 1.152511521097786e-41, - 1.1744761403266317e-41, - 1.1976355423589032e-41, - 1.2215518246524723e-41, - 1.245041438432506e-41, - 1.2681501296942841e-41, - 1.289965808450335e-41, - 1.310904575559627e-41, - 1.3308788660644603e-41, - 1.3498577216755448e-41, - 1.3694598010028166e-41, - 1.3898149799953494e-41, - 1.4114333761505266e-41, - 1.434806005781059e-41, - 1.4584381187124544e-41, - 1.482145309649216e-41, - 1.504994020875966e-41, - 1.526458987623749e-41, - 1.5463684345769613e-41, - 1.5660697468116924e-41, - 1.5860319624911704e-41, - 1.6063694038542156e-41, - 1.6276569472186275e-41, - 1.6493917852296278e-41, - 1.6715679919992566e-41, - 1.6935521855820383e-41, - 1.7147137524055724e-41, - 1.7348581300869412e-41, - 1.7546819759069075e-41, - 1.7740945298046731e-41, - 1.7938594847194475e-41, - 1.8145861026845755e-41, - 1.8364153383823656e-41, - 1.8593313835125028e-41, - 1.8830889331557074e-41, - 1.9071090439079267e-41, - 1.9308947645546046e-41, - 1.954744165866746e-41, - 1.9773063059630487e-41, - 1.9985796569440448e-41, - 2.0192493640473997e-41, - 2.0391148868668557e-41, - 2.058397539084735e-41, - 2.077033087658702e-41, - 2.095668589934252e-41, - 2.1149087050432413e-41, - 2.1343167849030642e-41, - 2.1539807103540435e-41, - 2.1740269033050535e-41, - 2.1944593632410712e-41, - 2.215237754534114e-41, - 2.2363477952330433e-41, - 2.2578445515701569e-41, - 2.2798345676739655e-41, - 2.30216887880439e-41, - 2.324560607234723e-41, - 2.3467365767472566e-41, - 2.368234897366214e-41, - 2.3889703738295754e-41, - 2.4090705636335547e-41, - 2.4285604658286145e-41, - 2.447623497537123e-41, - 2.466632210569898e-41, - 2.485919476168081e-41, - 2.5056125967115253e-41, - 2.525795935687909e-41, - 2.5467324046575403e-41, - 2.5685432121040655e-41, - 2.5911074250367837e-41, - 2.6141653707088923e-41, - 2.637431101029094e-41, - 2.660887924664115e-41, - 2.6845525844468205e-41, - 2.7081650299779316e-41, - 2.731346590469906e-41, - 2.753973208528846e-41, - 2.77613450835424e-41, - 2.797708339677479e-41, - 2.818722170639116e-41, - 2.839430074768195e-41, - 2.8598612112123126e-41, - 2.8799785288560556e-41, - 2.899982151395113e-41, - 2.9200663232460815e-41, - 2.9401939867476696e-41, - 2.960159174017658e-41, - 2.979783713597061e-41, - 2.9992589634852054e-41, - 3.018984985908046e-41, - 3.039054890149609e-41, - 3.059320988116771e-41, - 3.0796649682865957e-41, - 3.10006488544462e-41, - 3.120686455459328e-41, - 3.1417375139934266e-41, - 3.1631538581116183e-41, - 3.184717713787072e-41, - 3.20633503225299e-41, - 3.228010138389371e-41, - 3.249717349966877e-41, - 3.2713856558875847e-41, - 3.2929141175512965e-41, - 3.314272630860534e-41, - 3.3355713064552277e-41, - 3.356920063925582e-41, - 3.378286569930045e-41, - 3.3994703775781633e-41, - 3.420286107542113e-41, - 3.44075195619346e-41, - 3.461027913829552e-41, - 3.4812667534944505e-41, - 3.501486722077868e-41, - 3.5216073818089447e-41, - 3.541635408625785e-41, - 3.561678388267784e-41, - 3.581816610289756e-41, - 3.602058154127581e-41, - 3.622400482488128e-41, - 3.6428539917259765e-41, - 3.663393994749121e-41, - 3.6839687846100035e-41, - 3.7045497504610156e-41, - 3.725135042164599e-41, - 3.745734172323621e-41, - 3.7663654086121216e-41, - 3.7870222224401065e-41, - 3.807657228280419e-41, - 3.8281754186091943e-41, - 3.848528083299356e-41, - 3.868799445844865e-41, - 3.889075401065155e-41, - 3.909350183746144e-41, - 3.9295877831142327e-41, - 3.9498339485463236e-41, - 3.970183997336504e-41, - 3.9906555807577306e-41, - 4.011274603691489e-41, - 4.0321161507204306e-41, - 4.053286550011204e-41, - 4.074780520166978e-41, - 4.0965078328789025e-41, - 4.118373652544239e-41, - 4.1403676498697384e-41, - 4.1625840809556644e-41, - 4.185116503465405e-41, - 4.2079537487758504e-41, - 4.2309346965556674e-41, - 4.2538801488291235e-41, - 4.276679132240602e-41, - 4.2993502859168383e-41, - 4.321927110781116e-41, - 4.344393528893998e-41, - 4.3666480980574104e-41, - 4.388599104608032e-41, - 4.410219911486448e-41, - 4.4315628399883797e-41, - 4.452689790723368e-41, - 4.4736135872197905e-41, - 4.4943067770475963e-41, - 4.51476970287754e-41, - 4.53503434224548e-41, - 4.555149102586688e-41, - 4.575160270908906e-41, - 4.595097095338337e-41, - 4.614974262543677e-41, - 4.634800260436591e-41, - 4.654610523453593e-41, - 4.674482304697347e-41, - 4.694503912862608e-41, - 4.714751389024456e-41, - 4.735255122729338e-41, - 4.756016132920596e-41, - 4.777007574747885e-41, - 4.79817786697618e-41, - 4.819449982301944e-41, - 4.840752798675327e-41, - 4.862069685591283e-41, - 4.883415834469144e-41, - 4.904815490699544e-41, - 4.926267044248902e-41, - 4.947751754563181e-41, - 4.969238885512007e-41, - 4.990705010876465e-41, - 5.01213312204728e-41, - 5.033495708328211e-41, - 5.054761133774285e-41, - 5.07587250397253e-41, - 5.096799240664772e-41, - 5.117528071041903e-41, - 5.138069171165064e-41, - 5.158454313230305e-41, - 5.178713353537408e-41, - 5.198871465380769e-41, - 5.218936124196887e-41, - 5.23891410720144e-41, - 5.258826825908237e-41, - 5.278707485818229e-41, - 5.298608724724221e-41, - 5.31857281717984e-41, - 5.338629632164381e-41, - 5.358775612367828e-41, - 5.378995610414563e-41, - 5.399277057562427e-41, - 5.419640585298898e-41, - 5.440143486322737e-41, - 5.460841577094026e-41, - 5.481783808916836e-41, - 5.502941387215689e-41, - 5.524237603148596e-41, - 5.545578134996088e-41, - 5.566891683527465e-41, - 5.588211389584966e-41, - 5.609604328089435e-41, - 5.631147455667462e-41, - 5.652883491524159e-41, - 5.674768279586487e-41, - 5.696723246796756e-41, - 5.718662286294082e-41, - 5.740531448351355e-41, - 5.762345222951181e-41, - 5.784150597903914e-41, - 5.805997844391422e-41, - 5.827897405635111e-41, - 5.849791963672119e-41, - 5.871601846475934e-41, - 5.89324774299635e-41, - 5.91469812745605e-41, - 5.935995327032917e-41, - 5.95720491462335e-41, - 5.978392623625542e-41, - 5.999585603644036e-41, - 6.020754113630124e-41, - 6.041856624152264e-41, - 6.06285208300424e-41, - 6.083725513718207e-41, - 6.104508559494084e-41, - 6.125242837924505e-41, - 6.145969935703751e-41, - 6.166724493021316e-41, - 6.187516391987305e-41, - 6.208347431565774e-41, - 6.229219827501729e-41, - 6.25012594423137e-41, - 6.271039530510913e-41, - 6.29192983953599e-41, - 6.312762834871458e-41, - 6.33351309751801e-41, - 6.354199651406189e-41, - 6.374861150077175e-41, - 6.395543584799005e-41, - 6.416291037368188e-41, - 6.437114616073788e-41, - 6.457994470878677e-41, - 6.478897654980686e-41, - 6.499789902217393e-41, - 6.520646163199147e-41, - 6.541461722003175e-41, - 6.56224201474321e-41, - 6.582995145272615e-41, - 6.603728435295763e-41, - 6.624443810613289e-41, - 6.645143177475619e-41, - 6.665829930566981e-41, - 6.686507523629206e-41, - 6.707180453133283e-41, - 6.727855572965009e-41, - 6.748533972990801e-41, - 6.769215096624975e-41, - 6.789898524484613e-41, - 6.810583599681371e-41, - 6.831273335632018e-41, - 6.851977208383065e-41, - 6.872705014029894e-41, - 6.893465368300116e-41, - 6.914261476748399e-41, - 6.935083940991797e-41, - 6.955918797787211e-41, - 6.976752152752915e-41, - 6.997575447181959e-41, - 7.018394864400627e-41, - 7.039229367403527e-41, - 7.060099528619647e-41, - 7.081025310928137e-41, - 7.102011817719529e-41, - 7.123041065553877e-41, - 7.144086571527814e-41, - 7.165121427264458e-41, - 7.18612001162336e-41, - 7.207074219547542e-41, - 7.227991989290016e-41, - 7.248883525115379e-41, - 7.269759071271257e-41, - 7.290628948790855e-41, - 7.31150149225637e-41, - 7.332386065732935e-41, - 7.353294177021525e-41, - 7.374237355667993e-41, - 7.395224819927226e-41, - 7.416250695958248e-41, - 7.437302309524043e-41, - 7.458366189446383e-41, - 7.479428858689643e-41, - 7.50047891240989e-41, - 7.521522576992674e-41, - 7.542573023859264e-41, - 7.563642654248535e-41, - 7.584743862111708e-41, - 7.605888405095129e-41, - 7.627080016637236e-41, - 7.64832152864127e-41, - 7.669618938705137e-41, - 7.690978310564363e-41, - 7.712405777446864e-41, - 7.733910279370738e-41, - 7.755499292290854e-41, - 7.777174394840234e-41, - 7.798936822262488e-41, - 7.820787809681148e-41, - 7.842725935099022e-41, - 7.864740645486578e-41, - 7.886819636877384e-41, - 7.908950641295326e-41, - 7.931121390764293e-41, - 7.953319977095123e-41, - 7.975538986713171e-41, - 7.997773858294427e-41, - 8.020020003094277e-41, - 8.042272832289507e-41, - 8.0645277848879e-41, - 8.086779692536531e-41, - 8.109020409354567e-41, - 8.131241391102311e-41, - 8.153434106582171e-41, - 8.17559002105934e-41, - 8.19770055127997e-41, - 8.219761397487303e-41, - 8.241771999101589e-41, - 8.263731695200556e-41, - 8.285639824827645e-41, - 8.307495760021646e-41, - 8.329299157019331e-41, - 8.351046408981988e-41, - 8.372734617290269e-41, - 8.394361077874593e-41, - 8.415923086665408e-41, - 8.437417945031101e-41, - 8.45884521529187e-41, - 8.480209029807702e-41, - 8.501514326383913e-41, - 8.522766047428998e-41, - 8.543969135325063e-41, - 8.565128271409728e-41, - 8.586246531024275e-41, - 8.607327001391728e-41, - 8.628372989020852e-41, - 8.64938780061777e-41, - 8.670374744862311e-41, - 8.69133783725909e-41, - 8.712282707346148e-41, - 8.733214911712159e-41, - 8.754140006325664e-41, - 8.775063547155213e-41, - 8.795991086289386e-41, - 8.816926600964323e-41, - 8.837871445865869e-41, - 8.858827103057911e-41, - 8.879795024948097e-41, - 8.900776663944065e-41, - 8.921773477565995e-41, - 8.942788450984357e-41, - 8.963824086115413e-41, - 8.984878076072857e-41, - 9.005947677664833e-41, - 9.02703014889516e-41, - 9.048122747265081e-41, - 9.069221596979805e-41, - 9.090325302457883e-41, - 9.111439697844887e-41, - 9.132571227312984e-41, - 9.153726335033038e-41, - 9.174911464624179e-41, - 9.196133086500201e-41, - 9.217390910687341e-41, - 9.238671566183222e-41, - 9.259960137280139e-41, - 9.281241708270307e-41, - 9.302501363445953e-41, - 9.323724338502747e-41, - 9.34490072949235e-41, - 9.366035141441455e-41, - 9.38713600960591e-41, - 9.408211776424332e-41, - 9.429270884335308e-41, - 9.45032177015611e-41, - 9.471372195550046e-41, - 9.492424606755215e-41, - 9.513477273401526e-41, - 9.534528308821953e-41, - 9.555575825493036e-41, - 9.576617935641325e-41, - 9.597652695775922e-41, - 9.618677838968377e-41, - 9.639691359288617e-41, - 9.660691432347345e-41, - 9.681676233833738e-41, - 9.70264393943704e-41, - 9.723592730988602e-41, - 9.7445212866041e-41, - 9.765432502563239e-41, - 9.786333541686864e-41, - 9.807231805924138e-41, - 9.828134697224245e-41, - 9.849049617536345e-41, - 9.869984067767328e-41, - 9.890945575268073e-41, - 9.911933463600683e-41, - 9.93294253797003e-41, - 9.95396756669532e-41, - 9.975003318095757e-41, - 9.996044560490555e-41, - 1.0017085393750282e-40, - 1.0038119104726875e-40, - 1.0059147978149323e-40, - 1.008017704597323e-40, - 1.0101211340380643e-40, - 1.0122255894099206e-40, - 1.0143315741541312e-40, - 1.016439677352482e-40, - 1.0185504539106498e-40, - 1.0206636191563857e-40, - 1.0227787055058749e-40, - 1.024895245375302e-40, - 1.0270127711808521e-40, - 1.0291308151182888e-40, - 1.031248863352302e-40, - 1.0333664679267862e-40, - 1.0354838231025295e-40, - 1.037601276200841e-40, - 1.039719174543032e-40, - 1.0418378654504107e-40, - 1.0439576961583767e-40, - 1.04607898558576e-40, - 1.0482019549400343e-40, - 1.0503265072126382e-40, - 1.0524524286834772e-40, - 1.0545795056328444e-40, - 1.0567075243411281e-40, - 1.0588362710902711e-40, - 1.0609655754646885e-40, - 1.0630954149979496e-40, - 1.065225827628012e-40, - 1.0673568852094692e-40, - 1.0694886601107348e-40, - 1.071621224688815e-40, - 1.073754651258848e-40, - 1.0758889939210812e-40, - 1.0780241458311993e-40, - 1.0801597974980058e-40, - 1.0822955963117182e-40, - 1.0844311909843174e-40, - 1.0865662302277844e-40, - 1.0887003627540997e-40, - 1.0908332401224635e-40, - 1.0929646098492683e-40, - 1.0950945940722859e-40, - 1.0972236107268137e-40, - 1.0993520908698606e-40, - 1.101480465558404e-40, - 1.1036091658494235e-40, - 1.1057386227998976e-40, - 1.1078692625074197e-40, - 1.1100013818374028e-40, - 1.11213482448651e-40, - 1.1142692930028713e-40, - 1.1164044874043465e-40, - 1.1185401077181231e-40, - 1.1206758539714039e-40, - 1.1228114246299491e-40, - 1.1249464760055116e-40, - 1.1270808876988135e-40, - 1.1292150466085304e-40, - 1.1313494614568097e-40, - 1.1334846416603381e-40, - 1.1356210966347653e-40, - 1.1377593357689915e-40, - 1.1398998812659682e-40, - 1.1420433134036325e-40, - 1.1441897349835485e-40, - 1.146338594225212e-40, - 1.1484892282261204e-40, - 1.1506409740837716e-40, - 1.1527931688956627e-40, - 1.1549451497592906e-40, - 1.1570962381940132e-40, - 1.1592458026004095e-40, - 1.1613938351773732e-40, - 1.163540891620092e-40, - 1.1656876021585471e-40, - 1.1678345970227204e-40, - 1.1699825064425925e-40, - 1.1721319606452347e-40, - 1.1742835750889361e-40, - 1.1764377637558624e-40, - 1.1785943608224205e-40, - 1.1807528890186602e-40, - 1.1829128355730693e-40, - 1.1850736877232005e-40, - 1.1872349327084106e-40, - 1.1893960577672604e-40, - 1.1915565423675018e-40, - 1.1937159289784277e-40, - 1.1958740931754994e-40, - 1.198031121590215e-40, - 1.2001871367367485e-40, - 1.2023422611292732e-40, - 1.204496617281961e-40, - 1.2066503276976561e-40, - 1.2088035484129224e-40, - 1.2109566027901557e-40, - 1.2131098049560049e-40, - 1.2152631682922785e-40, - 1.2174165671982158e-40, - 1.219569875222271e-40, - 1.2217229659128981e-40, - 1.223875712818551e-40, - 1.2260279739600758e-40, - 1.228179409263163e-40, - 1.2303294514763226e-40, - 1.2324777038801953e-40, - 1.234624065665167e-40, - 1.236768453916395e-40, - 1.2389107857190352e-40, - 1.2410509781582435e-40, - 1.243188949341881e-40, - 1.2453247104263602e-40, - 1.247458486476456e-40, - 1.2495905422325885e-40, - 1.2517208456078895e-40, - 1.2538492739869415e-40, - 1.2559757047177882e-40, - 1.258100015112621e-40, - 1.2602220824804625e-40, - 1.2623417716109582e-40, - 1.2644588564796652e-40, - 1.266573130367293e-40, - 1.2686845170725692e-40, - 1.2707930966461616e-40, - 1.2728989626664948e-40, - 1.2750022087119925e-40, - 1.2771029283610777e-40, - 1.2792012153288376e-40, - 1.2812972168983916e-40, - 1.2833911877213456e-40, - 1.2854833347546911e-40, - 1.2875739025658366e-40, - 1.289663173602921e-40, - 1.291751431293698e-40, - 1.2938389590659218e-40, - 1.295926040347346e-40, - 1.2980129563203221e-40, - 1.3000999043878785e-40, - 1.302187018651552e-40, - 1.3042744523955202e-40, - 1.3063620568090308e-40, - 1.3084495197528305e-40, - 1.3105365275587868e-40, - 1.3126227665587681e-40, - 1.314707923084643e-40, - 1.3167916881699219e-40, - 1.318873845144712e-40, - 1.32095424356079e-40, - 1.3230327647154107e-40, - 1.3251097213674634e-40, - 1.3271856580347728e-40, - 1.3292611214437016e-40, - 1.331336658332686e-40, - 1.3334128154516818e-40, - 1.3354901378455498e-40, - 1.3375691360450185e-40, - 1.3396503126801489e-40, - 1.3417341722418023e-40, - 1.3438209000642388e-40, - 1.3459104434978473e-40, - 1.3480027442458177e-40, - 1.3500977440113376e-40, - 1.3521953844975974e-40, - 1.354295606817756e-40, - 1.3563983244671097e-40, - 1.3585033373838177e-40, - 1.3606103322037483e-40, - 1.3627190772396076e-40, - 1.364829477859802e-40, - 1.3669414508654724e-40, - 1.3690549130577614e-40, - 1.3711697812378097e-40, - 1.3732859722088413e-40, - 1.3754034050725313e-40, - 1.3775220491202702e-40, - 1.3796420088338132e-40, - 1.3817634118468125e-40, - 1.3838863737327978e-40, - 1.3860110064671408e-40, - 1.3881374220250829e-40, - 1.3902657323818643e-40, - 1.3923960495127261e-40, - 1.3945284834789722e-40, - 1.3966631125466936e-40, - 1.398799866515904e-40, - 1.4009385860637754e-40, - 1.4030790742825078e-40, - 1.4052210871998768e-40, - 1.4073643776836657e-40, - 1.4095086986012325e-40, - 1.4116538028102824e-40, - 1.4137994431704416e-40, - 1.4159453782526305e-40, - 1.4180914082352822e-40, - 1.420237411730939e-40, - 1.4223832951706287e-40, - 1.4245291049323591e-40, - 1.4266749661260278e-40, - 1.4288210047401768e-40, - 1.430967346763349e-40, - 1.433114118184088e-40, - 1.4352614440084019e-40, - 1.4374094195451313e-40, - 1.4395580661822974e-40, - 1.441707352668646e-40, - 1.4438572291954157e-40, - 1.446007561352307e-40, - 1.4481581859553583e-40, - 1.4503089397967248e-40, - 1.4524596596685602e-40, - 1.4546101823630204e-40, - 1.4567603492365771e-40, - 1.4589100693664986e-40, - 1.4610593750794876e-40, - 1.463208360678959e-40, - 1.465357091863909e-40, - 1.4675054829262453e-40, - 1.4696534008653384e-40, - 1.4718007126638453e-40, - 1.4739472853044195e-40, - 1.4760929857697172e-40, - 1.4782376788042221e-40, - 1.4803811974368785e-40, - 1.4825233104057153e-40, - 1.4846637528331766e-40, - 1.486802290715842e-40, - 1.488938920754531e-40, - 1.4910737417548185e-40, - 1.4932068529767428e-40, - 1.4953383536803417e-40, - 1.4974683431250998e-40, - 1.4995969204183086e-40, - 1.5017241832005627e-40, - 1.5038502667698353e-40, - 1.505975347918378e-40, - 1.5080995991334962e-40, - 1.5102230759918898e-40, - 1.5123457297744865e-40, - 1.5144675081046825e-40, - 1.5165883586058733e-40, - 1.5187082289014543e-40, - 1.5208270669091333e-40, - 1.522944856236759e-40, - 1.525061628741257e-40, - 1.527177379128304e-40, - 1.5292920964147501e-40, - 1.5314057954591794e-40, - 1.5335185629020955e-40, - 1.5356304977470721e-40, - 1.5377416989976864e-40, - 1.5398522656575121e-40, - 1.5419622967301257e-40, - 1.544071877838136e-40, - 1.5461810098045449e-40, - 1.5482897154955725e-40, - 1.5503980452771924e-40, - 1.5525060472717896e-40, - 1.5546137245512196e-40, - 1.5567210398845362e-40, - 1.5588279546211043e-40, - 1.5609344301108065e-40, - 1.5630404277035272e-40, - 1.5651459089552588e-40, - 1.5672508605957199e-40, - 1.569355288192525e-40, - 1.5714591382603588e-40, - 1.5735623490793464e-40, - 1.5756648684738523e-40, - 1.5777667120787759e-40, - 1.5798679248865416e-40, - 1.5819685520072562e-40, - 1.5840686385510265e-40, - 1.5861682296279443e-40, - 1.5882673696944681e-40, - 1.5903660903607634e-40, - 1.592464433584622e-40, - 1.5945624650169091e-40, - 1.5966602514170584e-40, - 1.5987578427857592e-40, - 1.600855204382257e-40, - 1.602952274743309e-40, - 1.6050489923955843e-40, - 1.607145295865752e-40, - 1.6092411236804834e-40, - 1.611336415950201e-40, - 1.6134311346261005e-40, - 1.615525265437026e-40, - 1.6176188010541445e-40, - 1.6197117343191658e-40, - 1.6218040783687973e-40, - 1.623895965925585e-40, - 1.625987573362263e-40, - 1.6280790771155921e-40, - 1.6301706536223323e-40, - 1.632262479319242e-40, - 1.634354729238005e-40, - 1.6364475559541083e-40, - 1.6385411032040825e-40, - 1.6406355229168202e-40, - 1.642730967319989e-40, - 1.644827576812013e-40, - 1.6469253468008427e-40, - 1.649024175475709e-40, - 1.6511239592355097e-40, - 1.653224594484222e-40, - 1.6553259776262264e-40, - 1.6574280055772834e-40, - 1.6595305989717144e-40, - 1.6616336823333836e-40, - 1.663737136352669e-40, - 1.665840837804737e-40, - 1.6679446644660865e-40, - 1.6700485921111064e-40, - 1.672152775503059e-40, - 1.6742573884712212e-40, - 1.676362604844869e-40, - 1.6784685984532785e-40, - 1.6805755431257262e-40, - 1.6826836049803426e-40, - 1.684792938458835e-40, - 1.6869037787905702e-40, - 1.6890163856377013e-40, - 1.691131018663042e-40, - 1.6932479114938645e-40, - 1.6953670494057029e-40, - 1.6974882799565234e-40, - 1.6996114492371035e-40, - 1.701736403338217e-40, - 1.7038629883506386e-40, - 1.7059910502127064e-40, - 1.7081204290463725e-40, - 1.7102509149196166e-40, - 1.7123822422220888e-40, - 1.7145141419195703e-40, - 1.716646345011292e-40, - 1.7187786830997074e-40, - 1.7209113857585316e-40, - 1.7230447810350816e-40, - 1.7251791969766722e-40, - 1.72731496163062e-40, - 1.7294524030442408e-40, - 1.7315918508940058e-40, - 1.7337336473171173e-40, - 1.7358781198364774e-40, - 1.7380255831733497e-40, - 1.7401763518957656e-40, - 1.7423307404350414e-40, - 1.744488936589705e-40, - 1.7466507670875144e-40, - 1.7488159947245157e-40, - 1.750984382269752e-40, - 1.7531556924038147e-40, - 1.7553296877892108e-40, - 1.7575061251290738e-40, - 1.759684730116506e-40, - 1.7618652581743467e-40, - 1.7640474829320529e-40, - 1.7662311780751282e-40, - 1.7684161172935824e-40, - 1.7706021306559696e-40, - 1.7727892453217042e-40, - 1.774977531493163e-40, - 1.7771670593727215e-40, - 1.7793578991627563e-40, - 1.781550121065644e-40, - 1.7837438006781961e-40, - 1.7859390467327818e-40, - 1.7881359224126946e-40, - 1.7903344597334162e-40, - 1.7925346905041679e-40, - 1.7947366465341702e-40, - 1.7969403484460828e-40, - 1.7991457303803012e-40, - 1.801352686174304e-40, - 1.803561109439994e-40, - 1.8057708937892729e-40, - 1.8079819328340428e-40, - 1.8101941181145022e-40, - 1.8124073067238883e-40, - 1.814621386595512e-40, - 1.8168363017136783e-40, - 1.81905199807943e-40, - 1.8212684216938106e-40, - 1.8234855192411958e-40, - 1.8257032728017438e-40, - 1.8279217160125608e-40, - 1.8301408865735411e-40, - 1.8323608221845764e-40, - 1.8345815605455604e-40, - 1.836803139376814e-40, - 1.8390256067396215e-40, - 1.841249009248641e-40, - 1.843473318401729e-40, - 1.845698492025677e-40, - 1.84792448794728e-40, - 1.850151263993331e-40, - 1.8523787738241853e-40, - 1.8546069346674724e-40, - 1.8568356449198458e-40, - 1.8590648028201698e-40, - 1.8612943066483686e-40, - 1.8635240549189687e-40, - 1.865753946374759e-40, - 1.8679838839904445e-40, - 1.870213802541946e-40, - 1.872443663684697e-40, - 1.8746734300561002e-40, - 1.8769030642935627e-40, - 1.879132529034487e-40, - 1.881361794711195e-40, - 1.883590869082604e-40, - 1.8858197710674147e-40, - 1.8880485195863428e-40, - 1.8902771335601012e-40, - 1.892505631909406e-40, - 1.8947340314110202e-40, - 1.896962329216026e-40, - 1.899190501958745e-40, - 1.9014185199259143e-40, - 1.9036463527185327e-40, - 1.9058739699066856e-40, - 1.9081013410604596e-40, - 1.9103284286354206e-40, - 1.9125551621997072e-40, - 1.9147814618251566e-40, - 1.9170072475826833e-40, - 1.9192324395432045e-40, - 1.9214569577776352e-40, - 1.923680722401383e-40, - 1.9259036547567095e-40, - 1.928125683132456e-40, - 1.9303467389617423e-40, - 1.9325667536948187e-40, - 1.9347856587819344e-40, - 1.9370033856733384e-40, - 1.9392198655666413e-40, - 1.9414350279144784e-40, - 1.9436488014671346e-40, - 1.9458611149751678e-40, - 1.9480718971891343e-40, - 1.9502810768595937e-40, - 1.9524885840060867e-40, - 1.9546943644923805e-40, - 1.9568983615337857e-40, - 1.959100508134771e-40, - 1.961300737076126e-40, - 1.9634989811386404e-40, - 1.9656951731031042e-40, - 1.96788924618502e-40, - 1.9700811520107825e-40, - 1.9722708670362754e-40, - 1.9744583694719234e-40, - 1.976643637528147e-40, - 1.9788266487356126e-40, - 1.981007371150888e-40, - 1.983185759238233e-40, - 1.985361768511257e-40, - 1.987535377702717e-40, - 1.9897065680767244e-40, - 1.9918753208973922e-40, - 1.994041617428834e-40, - 1.9962054389351607e-40, - 1.998366764451199e-40, - 2.0005255569532133e-40, - 2.0026817723800844e-40, - 2.004835366640785e-40, - 2.0069862956442873e-40, - 2.0091345152995635e-40, - 2.011279985189327e-40, - 2.0134227027526017e-40, - 2.0155627112766437e-40, - 2.017700068507599e-40, - 2.019834840860769e-40, - 2.021967116894231e-40, - 2.024096988711317e-40, - 2.026224548415414e-40, - 2.028349890336559e-40, - 2.0304731169352687e-40, - 2.0325943325272825e-40, - 2.0347136414283433e-40, - 2.0368311479541904e-40, - 2.0389469564205664e-40, - 2.0410611665773382e-40, - 2.043173859612293e-40, - 2.0452851159004685e-40, - 2.047395016978023e-40, - 2.049503644381122e-40, - 2.051611079645927e-40, - 2.053717404308601e-40, - 2.0558226999052077e-40, - 2.057927047036005e-40, - 2.0600305118054797e-40, - 2.062133139881756e-40, - 2.064234975032962e-40, - 2.0663360610272315e-40, - 2.068436441632804e-40, - 2.070536165757036e-40, - 2.0726352923830932e-40, - 2.074733853530056e-40, - 2.076831874264261e-40, - 2.0789293796520438e-40, - 2.081026394759741e-40, - 2.0831229446536886e-40, - 2.085219054400223e-40, - 2.087314742939005e-40, - 2.089409992400929e-40, - 2.091504771234476e-40, - 2.0935990478653108e-40, - 2.0956927907190968e-40, - 2.0977859682234963e-40, - 2.0998785471507758e-40, - 2.101970490047558e-40, - 2.10406183559182e-40, - 2.106152651770678e-40, - 2.1082430065984525e-40, - 2.1103329680894662e-40, - 2.1124226042580395e-40, - 2.1145119831184938e-40, - 2.116601174634355e-40, - 2.1186903036368133e-40, - 2.1207795560574437e-40, - 2.1228691210280937e-40, - 2.124959187680614e-40, - 2.1270499451468513e-40, - 2.129141584305165e-40, - 2.1312343290855836e-40, - 2.133328317865314e-40, - 2.135423577028579e-40, - 2.1375201287924067e-40, - 2.139617995330337e-40, - 2.1417171977602034e-40 - ] - }, - "numu": { - "cc": [ - 0.0, - 2.167911616487979e-44, - 1.2767504687906386e-42, - 3.105561033749372e-42, - 4.6758093365646537e-42, - 6.556423466306568e-42, - 8.682017534583073e-42, - 1.0701024556499441e-41, - 1.2514681257617386e-41, - 1.4172739128628067e-41, - 1.575018671303758e-41, - 1.7249978349986974e-41, - 1.8729285063189886e-41, - 2.0190027364346007e-41, - 2.1585460437499778e-41, - 2.2928287495798417e-41, - 2.425692485379182e-41, - 2.5492920418616726e-41, - 2.6780108543099147e-41, - 2.795336461089496e-41, - 2.908774012581672e-41, - 3.036494701995692e-41, - 3.155326152992868e-41, - 3.2758942096954074e-41, - 3.4066195002530537e-41, - 3.522284196165634e-41, - 3.636087669123486e-41, - 3.760207605003483e-41, - 3.88201489246375e-41, - 3.990785093664494e-41, - 4.103818241879373e-41, - 4.237822236892151e-41, - 4.3631572412242337e-41, - 4.4790985808125567e-41, - 4.592626695006732e-41, - 4.71499516662717e-41, - 4.843264374697163e-41, - 4.969242925370402e-41, - 5.088097003261386e-41, - 5.196702463596219e-41, - 5.296970419532143e-41, - 5.396716827849423e-41, - 5.50894941617809e-41, - 5.63610209145583e-41, - 5.769599235069148e-41, - 5.896703017944705e-41, - 6.009389159242987e-41, - 6.118041587021466e-41, - 6.230813451497383e-41, - 6.353400115298272e-41, - 6.481183625556736e-41, - 6.607159316056402e-41, - 6.725428707291537e-41, - 6.836325396596483e-41, - 6.944599939275244e-41, - 7.054522301207976e-41, - 7.16935447870152e-41, - 7.287290609328128e-41, - 7.404761596768118e-41, - 7.519320494591088e-41, - 7.630962258955039e-41, - 7.740458657042941e-41, - 7.852267623609013e-41, - 7.969049803712757e-41, - 8.091663114368898e-41, - 8.217317553992473e-41, - 8.343455537864231e-41, - 8.465622719606639e-41, - 8.58209785774011e-41, - 8.69308834719707e-41, - 8.802185600354465e-41, - 8.912430981768997e-41, - 9.027114076292812e-41, - 9.147411937394207e-41, - 9.271453661829196e-41, - 9.397276745164901e-41, - 9.52117862534255e-41, - 9.641338736430179e-41, - 9.75583396532311e-41, - 9.86554389352956e-41, - 9.973738860210594e-41, - 1.0082544079299884e-40, - 1.0193815002424266e-40, - 1.0311293173279278e-40, - 1.0436269214347463e-40, - 1.0566052413542467e-40, - 1.0696708359492635e-40, - 1.0827729634492926e-40, - 1.0956065483943667e-40, - 1.1079104497557958e-40, - 1.1196057075666365e-40, - 1.1308578637652679e-40, - 1.14192737109498e-40, - 1.1528288861179805e-40, - 1.1636518795944042e-40, - 1.1745888111828845e-40, - 1.1857152413381436e-40, - 1.1969714457809693e-40, - 1.208350321281866e-40, - 1.2198862598065057e-40, - 1.2316904786645355e-40, - 1.2436855327132506e-40, - 1.2556514427192365e-40, - 1.2677641578308451e-40, - 1.2798853953172954e-40, - 1.2918822829349821e-40, - 1.3038190979129218e-40, - 1.3155850720016589e-40, - 1.327084086609606e-40, - 1.3383747350715412e-40, - 1.3495884235536624e-40, - 1.3606690048001282e-40, - 1.3716583910754785e-40, - 1.3827518469836725e-40, - 1.3940707760984175e-40, - 1.4056979901284143e-40, - 1.4177457872203726e-40, - 1.430245626704205e-40, - 1.443141549769842e-40, - 1.4563594159603804e-40, - 1.4697711685552572e-40, - 1.4832213772036702e-40, - 1.4965849578704404e-40, - 1.5097433177476921e-40, - 1.5225170433792697e-40, - 1.5348408466708195e-40, - 1.5467508221029275e-40, - 1.5583492620872154e-40, - 1.5696953192612317e-40, - 1.580836690790363e-40, - 1.5918337312906157e-40, - 1.6027699442458237e-40, - 1.6136525551756942e-40, - 1.62445818281873e-40, - 1.6352224581894774e-40, - 1.6460697973224299e-40, - 1.6570292624833752e-40, - 1.6680905956143224e-40, - 1.6792380302655646e-40, - 1.6904705220247344e-40, - 1.7018636481668076e-40, - 1.713459716131295e-40, - 1.7252640621452632e-40, - 1.7372884505175736e-40, - 1.7495021940252051e-40, - 1.7619030274942085e-40, - 1.7744526231491606e-40, - 1.7870894302151987e-40, - 1.7997774399037967e-40, - 1.812453476948137e-40, - 1.8250862428924632e-40, - 1.837691239854094e-40, - 1.8502292220718483e-40, - 1.8626297580323413e-40, - 1.8748176989297286e-40, - 1.8867945448671387e-40, - 1.8986207581169175e-40, - 1.910370804985416e-40, - 1.922053585985056e-40, - 1.933643408737786e-40, - 1.945136869359719e-40, - 1.9565928853758026e-40, - 1.968077318208354e-40, - 1.9795615139386844e-40, - 1.991055236267334e-40, - 2.00255700112077e-40, - 2.0140481196260093e-40, - 2.025515419158521e-40, - 2.036997210954093e-40, - 2.0485125740106837e-40, - 2.060063421256355e-40, - 2.0716213226400755e-40, - 2.0831673377762076e-40, - 2.094720432735939e-40, - 2.1062951334390547e-40, - 2.1179052788458625e-40, - 2.129545966931067e-40, - 2.141147953667867e-40, - 2.152702147851928e-40, - 2.164299959621964e-40, - 2.1759934623000144e-40, - 2.1877615889021754e-40, - 2.199552941962935e-40, - 2.211339858211362e-40, - 2.2231827963241777e-40, - 2.2351248731925116e-40, - 2.2471684350952222e-40, - 2.2593049771091686e-40, - 2.271522332430255e-40, - 2.2838369256986996e-40, - 2.29623477193217e-40, - 2.3086850696678473e-40, - 2.321205722222693e-40, - 2.3337650236861224e-40, - 2.3463064484651657e-40, - 2.358794798853266e-40, - 2.371238011453054e-40, - 2.383679910029679e-40, - 2.3961267599609775e-40, - 2.4085122303114287e-40, - 2.4207892599233624e-40, - 2.432961465212253e-40, - 2.4450206937039194e-40, - 2.456970384129702e-40, - 2.468819911405945e-40, - 2.4805862059178182e-40, - 2.4922742158328847e-40, - 2.5038613238242303e-40, - 2.515355350473119e-40, - 2.5267628411551934e-40, - 2.5381062615006723e-40, - 2.5493992277573014e-40, - 2.560616972763399e-40, - 2.571763765399264e-40, - 2.5828712867299278e-40, - 2.5939640480225866e-40, - 2.605070251944984e-40, - 2.6162351520091846e-40, - 2.627403933286411e-40, - 2.638563625390656e-40, - 2.649714709517223e-40, - 2.6608820738996257e-40, - 2.672113187897494e-40, - 2.683443606176112e-40, - 2.6948911621587207e-40, - 2.706471248592941e-40, - 2.7181835881836148e-40, - 2.73001968740098e-40, - 2.7420053693370047e-40, - 2.7541525770261087e-40, - 2.7664295006747158e-40, - 2.778854189296084e-40, - 2.791424648784987e-40, - 2.804121722969626e-40, - 2.816936275307473e-40, - 2.829832360720881e-40, - 2.8427408151836525e-40, - 2.8555998527956542e-40, - 2.868374552500921e-40, - 2.8810807025046334e-40, - 2.8937430933357623e-40, - 2.906376005750902e-40, - 2.918931056157357e-40, - 2.9313679839987645e-40, - 2.9436529906337423e-40, - 2.9557273642958354e-40, - 2.9675996817838074e-40, - 2.979299125043288e-40, - 2.990840328092052e-40, - 3.0022357467212878e-40, - 3.0135101228462357e-40, - 3.0247032053339777e-40, - 3.035856065091646e-40, - 3.0469773187518274e-40, - 3.0580440755558243e-40, - 3.0690655160845617e-40, - 3.0800585029888185e-40, - 3.0910353500515808e-40, - 3.1020222191024438e-40, - 3.113058165512053e-40, - 3.1241811673736254e-40, - 3.1354355330345423e-40, - 3.1468289772864324e-40, - 3.1583300629272176e-40, - 3.1699267343601483e-40, - 3.1816163446754897e-40, - 3.1933968284216378e-40, - 3.2052814341171382e-40, - 3.2172838704724814e-40, - 3.2293910260547577e-40, - 3.2415638858062237e-40, - 3.253748556727608e-40, - 3.265927101265164e-40, - 3.2780960783630193e-40, - 3.2902421718921816e-40, - 3.3023905319585073e-40, - 3.314555873967841e-40, - 3.32673259095606e-40, - 3.338884038150323e-40, - 3.3509646899912667e-40, - 3.3629809637351003e-40, - 3.3749485736289453e-40, - 3.386876946465253e-40, - 3.3988012642535514e-40, - 3.4107538675511578e-40, - 3.4226920636068374e-40, - 3.4345794403791713e-40, - 3.4464411029177522e-40, - 3.4582896495493043e-40, - 3.470121165550624e-40, - 3.4819414230787966e-40, - 3.4937633196655746e-40, - 3.5055972701044773e-40, - 3.5174540810279663e-40, - 3.529342482341039e-40, - 3.5412572210914092e-40, - 3.5531890325398346e-40, - 3.5651330492439678e-40, - 3.5770916526584088e-40, - 3.5890708892361893e-40, - 3.601069888104365e-40, - 3.6130809036918937e-40, - 3.6250980896884293e-40, - 3.6371266664208934e-40, - 3.649173246678644e-40, - 3.661240062459477e-40, - 3.673326413988265e-40, - 3.685419636821993e-40, - 3.697505172766613e-40, - 3.709561852185976e-40, - 3.721569565097958e-40, - 3.733549583981325e-40, - 3.745526008642835e-40, - 3.75746428233264e-40, - 3.769332505018789e-40, - 3.781151384724105e-40, - 3.7929416659984295e-40, - 3.80470143569791e-40, - 3.816433229384103e-40, - 3.828143008070778e-40, - 3.83982443168234e-40, - 3.851467070472115e-40, - 3.8630601930862694e-40, - 3.874595316904922e-40, - 3.886075689022386e-40, - 3.897509455099867e-40, - 3.908905511873986e-40, - 3.920274190762855e-40, - 3.931622308481327e-40, - 3.942952551019304e-40, - 3.954267439362013e-40, - 3.965567530102919e-40, - 3.976852310487145e-40, - 3.988121872366234e-40, - 3.9993764608311124e-40, - 4.0106163681105555e-40, - 4.021842728237148e-40, - 4.0330587581659385e-40, - 4.044270399575212e-40, - 4.055483922053627e-40, - 4.066707589525694e-40, - 4.0779505561901835e-40, - 4.0892197405540175e-40, - 4.100515161636109e-40, - 4.111828298637145e-40, - 4.123160427818776e-40, - 4.134539132908386e-40, - 4.145968130870204e-40, - 4.157392435718003e-40, - 4.168774638260525e-40, - 4.180139367643751e-40, - 4.191515439900772e-40, - 4.202905065812623e-40, - 4.2143070974958765e-40, - 4.2257245825158174e-40, - 4.237159229258266e-40, - 4.2486157132941124e-40, - 4.260095715141377e-40, - 4.271577215633448e-40, - 4.2830342052176435e-40, - 4.294470301776566e-40, - 4.3059046075253334e-40, - 4.3173474488239796e-40, - 4.328802733772191e-40, - 4.340276153105795e-40, - 4.351773115944207e-40, - 4.363304813012101e-40, - 4.374892651439964e-40, - 4.386546669812577e-40, - 4.3982469336900155e-40, - 4.4099722247589064e-40, - 4.4217249044542816e-40, - 4.433510432628125e-40, - 4.445324687619986e-40, - 4.4571671699228484e-40, - 4.469045399978833e-40, - 4.480967537827314e-40, - 4.49293971844335e-40, - 4.5049667864396775e-40, - 4.517047816845158e-40, - 4.529178427333466e-40, - 4.5413546281814255e-40, - 4.553572252733925e-40, - 4.565826925722888e-40, - 4.57811935095207e-40, - 4.590452544487937e-40, - 4.602828851799516e-40, - 4.615250588192188e-40, - 4.6277207467139884e-40, - 4.640240374729809e-40, - 4.652807227071925e-40, - 4.665416109733805e-40, - 4.678060963337283e-40, - 4.690745454787149e-40, - 4.703479836774285e-40, - 4.71626303261353e-40, - 4.729075757315482e-40, - 4.741903760054553e-40, - 4.754752793532336e-40, - 4.7676311075456695e-40, - 4.780535524796316e-40, - 4.793456656703039e-40, - 4.8063871439293515e-40, - 4.819321652559967e-40, - 4.832253975354402e-40, - 4.8451778616694046e-40, - 4.858090489336198e-40, - 4.870991055572809e-40, - 4.883878392611801e-40, - 4.896751101459478e-40, - 4.90960684394189e-40, - 4.922439236652768e-40, - 4.935238382913976e-40, - 4.947994167234637e-40, - 4.960695753357579e-40, - 4.973331776264294e-40, - 4.985893605694152e-40, - 4.998379797567615e-40, - 5.010790623476096e-40, - 5.023123824345398e-40, - 5.03537480292681e-40, - 5.0475429429040394e-40, - 5.059640371984275e-40, - 5.07167901810845e-40, - 5.0836494763447e-40, - 5.095525822540616e-40, - 5.107289950067061e-40, - 5.118952449805591e-40, - 5.130533400105727e-40, - 5.142044820566639e-40, - 5.153490442626447e-40, - 5.164873379622421e-40, - 5.17619916744563e-40, - 5.187471715618147e-40, - 5.1986965973339e-40, - 5.2098803672407075e-40, - 5.221029014288909e-40, - 5.232145190298047e-40, - 5.2432304824507166e-40, - 5.254294692780531e-40, - 5.265354189536825e-40, - 5.2764238747094826e-40, - 5.287501152213298e-40, - 5.2985756535974004e-40, - 5.30964393386196e-40, - 5.32071810169434e-40, - 5.331813885937725e-40, - 5.342940627257622e-40, - 5.354102876748771e-40, - 5.3653055067767656e-40, - 5.376555015092773e-40, - 5.3878551019279394e-40, - 5.399206025920351e-40, - 5.410608301300577e-40, - 5.422062514641636e-40, - 5.433566496075648e-40, - 5.445114915169859e-40, - 5.4567031088434475e-40, - 5.468341089134104e-40, - 5.480042802058539e-40, - 5.491807359687071e-40, - 5.50360814028441e-40, - 5.515417696105673e-40, - 5.527230807698044e-40, - 5.539059645897139e-40, - 5.550916161339532e-40, - 5.5628039250723e-40, - 5.574723344791904e-40, - 5.5866749355892125e-40, - 5.598657679073173e-40, - 5.610668103658072e-40, - 5.622700715930345e-40, - 5.634749620985286e-40, - 5.6468089074359475e-40, - 5.6588728724425815e-40, - 5.670937091568005e-40, - 5.6829993179774e-40, - 5.695059394669132e-40, - 5.707117571097886e-40, - 5.719174107699701e-40, - 5.731228727602593e-40, - 5.743280164046895e-40, - 5.755328051710817e-40, - 5.767372436709542e-40, - 5.779414390445908e-40, - 5.791456144152039e-40, - 5.803500050872499e-40, - 5.815548329190566e-40, - 5.827601068378839e-40, - 5.8396558490102585e-40, - 5.851709551820671e-40, - 5.863759004141293e-40, - 5.8758008603934776e-40, - 5.8878316015807954e-40, - 5.8998486526378606e-40, - 5.9118534380893945e-40, - 5.923848793569215e-40, - 5.9358373508349734e-40, - 5.947821752656973e-40, - 5.959804648307965e-40, - 5.9717887056082426e-40, - 5.9837747390277045e-40, - 5.995760359432794e-40, - 6.0077427500969065e-40, - 6.019719005115899e-40, - 6.031686076135447e-40, - 6.043640855696616e-40, - 6.055580305015653e-40, - 6.067502756188902e-40, - 6.079407859074224e-40, - 6.091295409337674e-40, - 6.1031652418157256e-40, - 6.115016784328533e-40, - 6.126849164206079e-40, - 6.138661534967332e-40, - 6.150453066152894e-40, - 6.1622235935951275e-40, - 6.173973494683829e-40, - 6.185703174370694e-40, - 6.197413023510707e-40, - 6.2091031190139095e-40, - 6.220773231795319e-40, - 6.2324236019559305e-40, - 6.2440552438309125e-40, - 6.255669170167955e-40, - 6.267266574775267e-40, - 6.2788486609982646e-40, - 6.2904165808159446e-40, - 6.301971197207641e-40, - 6.31351358233648e-40, - 6.325044775454786e-40, - 6.336566843279184e-40, - 6.3480830597818465e-40, - 6.3595975299324935e-40, - 6.37111442498357e-40, - 6.382637524489648e-40, - 6.3941687362975045e-40, - 6.405708644544096e-40, - 6.417256718000793e-40, - 6.428811428538721e-40, - 6.440371288500398e-40, - 6.451935099657313e-40, - 6.463502044344511e-40, - 6.47507324698985e-40, - 6.486650795236926e-40, - 6.498237024989233e-40, - 6.509835284228544e-40, - 6.521449102492516e-40, - 6.533081978884609e-40, - 6.5447368346362596e-40, - 6.556414233422015e-40, - 6.568113036125248e-40, - 6.579832623066878e-40, - 6.591572876088319e-40, - 6.603334143503463e-40, - 6.615115329326694e-40, - 6.626911871840727e-40, - 6.638719299752578e-40, - 6.650536366764399e-40, - 6.662374981328598e-40, - 6.674251234562769e-40, - 6.686179676308279e-40, - 6.698152172494814e-40, - 6.710145912662914e-40, - 6.722137905023681e-40, - 6.7341180551469515e-40, - 6.7460971380226225e-40, - 6.758087067300088e-40, - 6.77009541369518e-40, - 6.782116389478312e-40, - 6.794141200936645e-40, - 6.80616166262266e-40, - 6.818173691910579e-40, - 6.8301772742500196e-40, - 6.842173174337434e-40, - 6.854161817979533e-40, - 6.866143689533347e-40, - 6.87811955904104e-40, - 6.8900902385637604e-40, - 6.902056712517902e-40, - 6.914019241675337e-40, - 6.925976803398807e-40, - 6.937928073421423e-40, - 6.94987142427939e-40, - 6.9618042842285246e-40, - 6.973723808469028e-40, - 6.98562704698237e-40, - 6.997511050684834e-40, - 7.009373161281782e-40, - 7.0212113620606524e-40, - 7.033023891948056e-40, - 7.044809264862906e-40, - 7.05656654508018e-40, - 7.068294906307467e-40, - 7.079993518049854e-40, - 7.091661733900242e-40, - 7.103300221218205e-40, - 7.114910004440781e-40, - 7.126492127117395e-40, - 7.138047627111276e-40, - 7.149577365558384e-40, - 7.161082175310591e-40, - 7.172562890058506e-40, - 7.184020343956971e-40, - 7.195456037672569e-40, - 7.206872187784444e-40, - 7.218271052390545e-40, - 7.229654857841177e-40, - 7.241025955894807e-40, - 7.252386767429029e-40, - 7.263739690741614e-40, - 7.275086923615631e-40, - 7.2864291628004826e-40, - 7.297765926539319e-40, - 7.309096616932123e-40, - 7.320420646539197e-40, - 7.331737507649434e-40, - 7.343046730182543e-40, - 7.35434751650442e-40, - 7.36563900305392e-40, - 7.376922044110814e-40, - 7.388199018298114e-40, - 7.399472508184917e-40, - 7.410745423636669e-40, - 7.42202069155938e-40, - 7.433301024972422e-40, - 7.444589109493737e-40, - 7.455887566862661e-40, - 7.46719797630611e-40, - 7.478520538675447e-40, - 7.489855237737247e-40, - 7.501202054664282e-40, - 7.512561031280363e-40, - 7.523932594092328e-40, - 7.535317284891203e-40, - 7.546715647043655e-40, - 7.558128272385754e-40, - 7.569555694918863e-40, - 7.580998050113241e-40, - 7.59245546924812e-40, - 7.603928079653071e-40, - 7.615415827615044e-40, - 7.6269182291787e-40, - 7.638435280226234e-40, - 7.649967185587205e-40, - 7.661514565405629e-40, - 7.67307831418715e-40, - 7.684659195319388e-40, - 7.696257372639585e-40, - 7.70787266897687e-40, - 7.719505031381608e-40, - 7.731154600917804e-40, - 7.742821576132283e-40, - 7.754506464439405e-40, - 7.766208871007868e-40, - 7.77792798000155e-40, - 7.789662987932668e-40, - 7.801413083503743e-40, - 7.813177275066177e-40, - 7.824954722447307e-40, - 7.836744950461272e-40, - 7.848547499955413e-40, - 7.860362268067723e-40, - 7.87219036075436e-40, - 7.88403331478966e-40, - 7.895892687473229e-40, - 7.907770040049211e-40, - 7.919666903202879e-40, - 7.931584117729419e-40, - 7.943521930865714e-40, - 7.955480575664561e-40, - 7.967460214183057e-40, - 7.979460519896287e-40, - 7.991480793727748e-40, - 8.00352014386599e-40, - 8.015577562843983e-40, - 8.027652059899383e-40, - 8.039743233310391e-40, - 8.051851370695589e-40, - 8.063977180973381e-40, - 8.076121390131192e-40, - 8.088283923957562e-40, - 8.100464817856765e-40, - 8.112664108882261e-40, - 8.124881670262064e-40, - 8.137116718392124e-40, - 8.149367869512441e-40, - 8.161632904030754e-40, - 8.17390949866937e-40, - 8.18619551034667e-40, - 8.198489145062396e-40, - 8.210788503255177e-40, - 8.223091675263102e-40, - 8.235396751497586e-40, - 8.247701824618729e-40, - 8.260005224453071e-40, - 8.272306276393315e-40, - 8.284604618462164e-40, - 8.296899897891843e-40, - 8.309192084443098e-40, - 8.321481684284653e-40, - 8.333768809366461e-40, - 8.346053312886187e-40, - 8.3583350442488e-40, - 8.370613845157482e-40, - 8.382889267058788e-40, - 8.39516068340371e-40, - 8.407427827192361e-40, - 8.419690337542825e-40, - 8.431947106001629e-40, - 8.444196707958078e-40, - 8.456437461045089e-40, - 8.468666994989306e-40, - 8.480882388622933e-40, - 8.49308078835215e-40, - 8.505260240242378e-40, - 8.517419297805979e-40, - 8.529556413113432e-40, - 8.54166999046304e-40, - 8.553756596578947e-40, - 8.565810504703996e-40, - 8.577825880565066e-40, - 8.589796935888576e-40, - 8.601723445532916e-40, - 8.613615989531952e-40, - 8.625486362739698e-40, - 8.637346406194324e-40, - 8.649203547924129e-40, - 8.661043139419183e-40, - 8.672844665789772e-40, - 8.684587601570953e-40, - 8.696253602215125e-40, - 8.707846239061445e-40, - 8.719381739054048e-40, - 8.730876470273562e-40, - 8.742346315126194e-40, - 8.753799015262741e-40, - 8.765231136427238e-40, - 8.776637967189193e-40, - 8.788014753556474e-40, - 8.799358066447165e-40, - 8.810669300019529e-40, - 8.821951034320135e-40, - 8.833205852246066e-40, - 8.844436211253676e-40, - 8.855643601786111e-40, - 8.866828890615658e-40, - 8.877993171182925e-40, - 8.889138003877092e-40, - 8.90026512601241e-40, - 8.911376493271961e-40, - 8.922474084144262e-40, - 8.933560090885987e-40, - 8.944637090067653e-40, - 8.955707658468554e-40, - 8.966774407210634e-40, - 8.97783987886236e-40, - 8.988906024175039e-40, - 8.999974227696139e-40, - 9.011045631417706e-40, - 9.022121364337549e-40, - 9.03320255543533e-40, - 9.04429033011093e-40, - 9.055385799856323e-40, - 9.066490156988465e-40, - 9.07760479783672e-40, - 9.088731198585897e-40, - 9.099871176027906e-40, - 9.111026872116111e-40, - 9.12220046397072e-40, - 9.133394084041584e-40, - 9.144609744618093e-40, - 9.155849355897383e-40, - 9.167114804799096e-40, - 9.178407974707534e-40, - 9.189730586896238e-40, - 9.201084272540784e-40, - 9.212470288096127e-40, - 9.223889196941483e-40, - 9.235341459988463e-40, - 9.246827374568865e-40, - 9.258346214740828e-40, - 9.26989677750537e-40, - 9.281477451943057e-40, - 9.293086490869947e-40, - 9.304724063674161e-40, - 9.316394297289895e-40, - 9.328101648847337e-40, - 9.339849546968708e-40, - 9.35164088271555e-40, - 9.363472350367265e-40, - 9.37533605321896e-40, - 9.387223996390642e-40, - 9.399128184979625e-40, - 9.411042362976569e-40, - 9.422967466447813e-40, - 9.434905814918554e-40, - 9.446859071486663e-40, - 9.45882926959216e-40, - 9.470817357138421e-40, - 9.482821235043955e-40, - 9.494838723009545e-40, - 9.506868158712727e-40, - 9.518908011997517e-40, - 9.530957495965302e-40, - 9.543016422301693e-40, - 9.555084624034867e-40, - 9.567162334001392e-40, - 9.57925020566749e-40, - 9.591348118000139e-40, - 9.603455420802102e-40, - 9.615571418634647e-40, - 9.62769541606837e-40, - 9.639826760832021e-40, - 9.651965263762843e-40, - 9.664111131825208e-40, - 9.676264592108732e-40, - 9.688425867145272e-40, - 9.700594713807308e-40, - 9.712770053676987e-40, - 9.724950851885356e-40, - 9.73713606523188e-40, - 9.749324641755935e-40, - 9.76151553865472e-40, - 9.77370772297946e-40, - 9.785900162272429e-40, - 9.798091838902496e-40, - 9.81028189624343e-40, - 9.822469558020344e-40, - 9.834654220619254e-40, - 9.84683591037184e-40, - 9.859015121775208e-40, - 9.871192288544897e-40, - 9.88336779014591e-40, - 9.895541902544983e-40, - 9.90771488595364e-40, - 9.919887001523541e-40, - 9.93205851332289e-40, - 9.944229704552749e-40, - 9.956400868596638e-40, - 9.96857231985032e-40, - 9.980744162053522e-40, - 9.992916405087383e-40, - 1.0005089110069772e-39, - 1.0017262330740939e-39, - 1.0029436120803584e-39, - 1.0041610497032852e-39, - 1.005378525332984e-39, - 1.0065960317962457e-39, - 1.0078135713317387e-39, - 1.0090311471751483e-39, - 1.0102487629499539e-39, - 1.0114664171900086e-39, - 1.0126840272007067e-39, - 1.0139014741376975e-39, - 1.0151186364944944e-39, - 1.0163353913516941e-39, - 1.0175516871178325e-39, - 1.0187678582577767e-39, - 1.0199843648132152e-39, - 1.0212016584196012e-39, - 1.0224201786791859e-39, - 1.0236402423211542e-39, - 1.0248614094331638e-39, - 1.026082934584975e-39, - 1.0273040791692876e-39, - 1.0285241186885999e-39, - 1.0297424231275836e-39, - 1.0309590660318837e-39, - 1.0321744610409524e-39, - 1.0333890239804238e-39, - 1.0346031695133243e-39, - 1.03581728675079e-39, - 1.037031464261548e-39, - 1.0382455873651668e-39, - 1.0394595415838508e-39, - 1.040673239368313e-39, - 1.0418865927915626e-39, - 1.043099575135132e-39, - 1.044312222952584e-39, - 1.045524574643821e-39, - 1.0467366682713262e-39, - 1.0479485446919856e-39, - 1.0491602310843509e-39, - 1.0503717337331899e-39, - 1.0515830571867519e-39, - 1.0527942059045067e-39, - 1.0540051771645529e-39, - 1.0552159407279773e-39, - 1.056426471940169e-39, - 1.0576367488136857e-39, - 1.0588467493609915e-39, - 1.0600564515945958e-39, - 1.0612658331646399e-39, - 1.06247486820774e-39, - 1.0636835320387125e-39, - 1.064891809319715e-39, - 1.0660996852314106e-39, - 1.0673071450224438e-39, - 1.068514179680698e-39, - 1.0697208052452296e-39, - 1.0709270515890514e-39, - 1.0721329627724011e-39, - 1.0733385829191153e-39, - 1.0745439551434818e-39, - 1.0757491217875809e-39, - 1.0769541251234652e-39, - 1.0781590074225734e-39, - 1.0793638091523269e-39, - 1.080568551938204e-39, - 1.0817732497006941e-39, - 1.0829779118732882e-39, - 1.0841825097295079e-39, - 1.0853869914444859e-39, - 1.086591304169271e-39, - 1.087795395007078e-39, - 1.0889992247323783e-39, - 1.0902027657053309e-39, - 1.0914059900677523e-39, - 1.0926088699637414e-39, - 1.0938113777938396e-39, - 1.0950134864452102e-39, - 1.096215168822528e-39, - 1.0974163942558369e-39, - 1.0986171615749e-39, - 1.0998175168800917e-39, - 1.1010175110703082e-39, - 1.1022171949633553e-39, - 1.1034166193767946e-39, - 1.1046158351284637e-39, - 1.1058148916249206e-39, - 1.1070138258067817e-39, - 1.108212667031126e-39, - 1.1094114444879166e-39, - 1.110610187367061e-39, - 1.1118089244571652e-39, - 1.1130076591846473e-39, - 1.1142063311561361e-39, - 1.1154048582416513e-39, - 1.1166031568693807e-39, - 1.1178011433641448e-39, - 1.1189987340506591e-39, - 1.1201958451479907e-39, - 1.1213923927254402e-39, - 1.1225882928405045e-39, - 1.12378346166854e-39, - 1.1249778182987534e-39, - 1.1261712834881685e-39, - 1.1273637847017762e-39, - 1.1285553032135487e-39, - 1.1297458631699658e-39, - 1.1309354945049051e-39, - 1.1321242274516199e-39, - 1.1333120922957242e-39, - 1.1344991148683119e-39, - 1.135685320340146e-39, - 1.1368707338830813e-39, - 1.1380553806709177e-39, - 1.1392392858917755e-39, - 1.1404224749334658e-39, - 1.1416049702779264e-39, - 1.1427867868311513e-39, - 1.1439679259530332e-39, - 1.1451483738591771e-39, - 1.1463281145691886e-39, - 1.1475071319866147e-39, - 1.1486854099824365e-39, - 1.1498629328605658e-39, - 1.1510396957348816e-39, - 1.1522157053921715e-39, - 1.1533909691900796e-39, - 1.154565494361993e-39, - 1.1557392881038794e-39, - 1.1569123575267004e-39, - 1.1580846943230286e-39, - 1.1592562614914526e-39, - 1.160427016280553e-39, - 1.1615969130780395e-39, - 1.1627659062340578e-39, - 1.1639339500993742e-39, - 1.165100999037916e-39, - 1.1662670073764942e-39, - 1.1674319290891789e-39, - 1.1685957166446886e-39, - 1.1697583203531678e-39, - 1.1709196909139606e-39, - 1.172079779131874e-39, - 1.1732385742003034e-39, - 1.1743961542731648e-39, - 1.1755526239595585e-39, - 1.1767081048257315e-39, - 1.1778627335133731e-39, - 1.1790166770350442e-39, - 1.1801701064466046e-39, - 1.1813231917581441e-39, - 1.1824761028358958e-39, - 1.183629009548579e-39, - 1.1847820817660563e-39, - 1.1859354879285898e-39, - 1.1870893464466442e-39 - ], - "nc": [ - 4.661235803920653e-46, - 1.9170502947743496e-43, - 8.558125585976232e-43, - 1.658260981090883e-42, - 2.4065360560571932e-42, - 3.15589181611033e-42, - 3.873847278374912e-42, - 4.532267675859069e-42, - 5.11645235050003e-42, - 5.6627546811114014e-42, - 6.185562123701961e-42, - 6.706243150108186e-42, - 7.225162915316522e-42, - 7.719033826891699e-42, - 8.197216345924287e-42, - 8.671103351496756e-42, - 9.121073294650256e-42, - 9.560825360009692e-42, - 1.0001280297723247e-41, - 1.0412061790107223e-41, - 1.0862117060196936e-41, - 1.1314972086633145e-41, - 1.172846930089622e-41, - 1.2134352396494533e-41, - 1.254213117878951e-41, - 1.2949202367114166e-41, - 1.336121944574215e-41, - 1.3789242923887799e-41, - 1.4214773247959637e-41, - 1.462423809428367e-41, - 1.502100691016817e-41, - 1.540351512302722e-41, - 1.5804644572189307e-41, - 1.6233418112656857e-41, - 1.6668371910342242e-41, - 1.7078296071173848e-41, - 1.7461019170961318e-41, - 1.784899903679845e-41, - 1.8267693042911162e-41, - 1.8715741647630373e-41, - 1.915668381266524e-41, - 1.958271065144053e-41, - 1.9977522715583644e-41, - 2.03523515667931e-41, - 2.0708105996734413e-41, - 2.105425662112072e-41, - 2.1425524737640742e-41, - 2.1837925757155327e-41, - 2.2285966353854753e-41, - 2.274724894477866e-41, - 2.319133311676929e-41, - 2.3606161694774023e-41, - 2.3989635823317567e-41, - 2.435663361089481e-41, - 2.471810777814563e-41, - 2.508274215704292e-41, - 2.546044292915404e-41, - 2.5852636057319867e-41, - 2.626050468761632e-41, - 2.6686731625779585e-41, - 2.7113865045471106e-41, - 2.753878960898036e-41, - 2.7950617401427894e-41, - 2.834315087499498e-41, - 2.8718754539973964e-41, - 2.909109405786166e-41, - 2.9464331880978737e-41, - 2.984064457880985e-41, - 3.022528978150598e-41, - 3.0613346717028365e-41, - 3.1006152137490234e-41, - 3.1398669356757246e-41, - 3.178555537439491e-41, - 3.2166893299875326e-41, - 3.254978299229601e-41, - 3.29321736517676e-41, - 3.332128352821646e-41, - 3.372212977835474e-41, - 3.4134963294104356e-41, - 3.455842096578757e-41, - 3.498931427622645e-41, - 3.5421015155162913e-41, - 3.5848107306312266e-41, - 3.6273184412507134e-41, - 3.6682281023974716e-41, - 3.7075860973178715e-41, - 3.7461598512082067e-41, - 3.783808478807891e-41, - 3.820800663235365e-41, - 3.8570846765332463e-41, - 3.893407815157163e-41, - 3.9304964253228127e-41, - 3.9678844053913675e-41, - 4.0055792014425156e-41, - 4.0436889360253573e-41, - 4.0821938870560404e-41, - 4.1210148192158716e-41, - 4.1601193388944997e-41, - 4.199486717213287e-41, - 4.239227782839168e-41, - 4.279281624962639e-41, - 4.319367934505887e-41, - 4.3592010123022365e-41, - 4.398277610284428e-41, - 4.4366074982185575e-41, - 4.4743865833900136e-41, - 4.511688232954775e-41, - 4.548696007796645e-41, - 4.5857186974943037e-41, - 4.623061222308838e-41, - 4.660827441877117e-41, - 4.69918083039952e-41, - 4.738483527667868e-41, - 4.77881859289209e-41, - 4.819969321201836e-41, - 4.861630010143804e-41, - 4.903541733234272e-41, - 4.94564504404658e-41, - 4.987906677700843e-41, - 5.030115593048887e-41, - 5.07180138503041e-41, - 5.112797871745591e-41, - 5.15333806530501e-41, - 5.193245392287199e-41, - 5.232487832342218e-41, - 5.271452500581632e-41, - 5.310160374898256e-41, - 5.348474971751791e-41, - 5.386661490475409e-41, - 5.425029423665954e-41, - 5.463520686360605e-41, - 5.501788633269075e-41, - 5.539605044315886e-41, - 5.577241470642282e-41, - 5.615114299991513e-41, - 5.653270069247121e-41, - 5.691549634336114e-41, - 5.729770405757789e-41, - 5.767821366956664e-41, - 5.805890667668432e-41, - 5.844245104893348e-41, - 5.882820565497457e-41, - 5.92140018878866e-41, - 5.959938909057914e-41, - 5.998468935456821e-41, - 6.036989990269e-41, - 6.075495904207239e-41, - 6.113901142779617e-41, - 6.152145624888648e-41, - 6.190431855094839e-41, - 6.229042485073952e-41, - 6.267983360117209e-41, - 6.306957977609872e-41, - 6.345692296932403e-41, - 6.384154164053705e-41, - 6.422498127713082e-41, - 6.460944927677529e-41, - 6.49956527856222e-41, - 6.538212883607392e-41, - 6.576788130312128e-41, - 6.615367025005294e-41, - 6.654049319725082e-41, - 6.692848390798806e-41, - 6.731769115499568e-41, - 6.770823274040484e-41, - 6.809965383108062e-41, - 6.849125126381841e-41, - 6.888285369877742e-41, - 6.927450918279401e-41, - 6.966616136010083e-41, - 7.005795612907249e-41, - 7.044997577594358e-41, - 7.084168682808025e-41, - 7.123159630888348e-41, - 7.161891679836114e-41, - 7.200514393170857e-41, - 7.239202697118622e-41, - 7.277960529657194e-41, - 7.316665446573082e-41, - 7.355271119678458e-41, - 7.393835354774116e-41, - 7.432375151076614e-41, - 7.470971040345862e-41, - 7.509773545183298e-41, - 7.54893274092968e-41, - 7.588373968675341e-41, - 7.627895988027829e-41, - 7.667337023640561e-41, - 7.706724520026086e-41, - 7.746216944296775e-41, - 7.785935950678107e-41, - 7.825852235790372e-41, - 7.865782674888601e-41, - 7.905541028709792e-41, - 7.945017976901579e-41, - 7.984228163358801e-41, - 8.023192844876827e-41, - 8.061890777439689e-41, - 8.100231813537112e-41, - 8.138156368117539e-41, - 8.175666259555089e-41, - 8.21282987188881e-41, - 8.249712757997409e-41, - 8.286333850916043e-41, - 8.322699276411934e-41, - 8.358864245368367e-41, - 8.394911441729512e-41, - 8.430923024556025e-41, - 8.466976430077301e-41, - 8.503139243696049e-41, - 8.539477355377901e-41, - 8.576047431606266e-41, - 8.612924563546388e-41, - 8.650217042436619e-41, - 8.688051297094574e-41, - 8.726552107807805e-41, - 8.765788565434589e-41, - 8.8057553780669e-41, - 8.846395042773617e-41, - 8.887613560779294e-41, - 8.929259925603996e-41, - 8.971182981753261e-41, - 9.013288240470684e-41, - 9.055528196092479e-41, - 9.097876132988022e-41, - 9.140281271722929e-41, - 9.182681282465729e-41, - 9.22499310153888e-41, - 9.267136968651257e-41, - 9.30902214145576e-41, - 9.350528190638069e-41, - 9.391531799555822e-41, - 9.431900947079771e-41, - 9.471597705935293e-41, - 9.510630389682634e-41, - 9.54903259761249e-41, - 9.586865973824281e-41, - 9.62419681436046e-41, - 9.661087525924437e-41, - 9.697576156911423e-41, - 9.733694246604171e-41, - 9.769495586283714e-41, - 9.805047689597994e-41, - 9.840448716440869e-41, - 9.875780525070737e-41, - 9.911109079630947e-41, - 9.946465016465491e-41, - 9.98186437217634e-41, - 1.0017327064119037e-40, - 1.0052905583544772e-40, - 1.0088677570068898e-40, - 1.0124713570957233e-40, - 1.0161078684110367e-40, - 1.0197760877891572e-40, - 1.0234698293886284e-40, - 1.02718010387595e-40, - 1.0309000687400874e-40, - 1.0346333321324254e-40, - 1.0383876195959556e-40, - 1.0421724346129354e-40, - 1.0459938591399838e-40, - 1.0498482537951162e-40, - 1.0537265169323845e-40, - 1.0576181889729337e-40, - 1.0615162197394284e-40, - 1.0654230272335494e-40, - 1.0693470497059134e-40, - 1.0732974708383502e-40, - 1.0772790433159838e-40, - 1.0812857230363625e-40, - 1.0853057651002003e-40, - 1.0893270416324983e-40, - 1.0933426494131434e-40, - 1.0973557585739163e-40, - 1.1013728531713497e-40, - 1.1054004320679251e-40, - 1.1094407233336696e-40, - 1.113487876599089e-40, - 1.1175340006402138e-40, - 1.1215712499891559e-40, - 1.1255947262822846e-40, - 1.1296063966857186e-40, - 1.1336101137884682e-40, - 1.137609731588066e-40, - 1.1416081975827915e-40, - 1.145604039134825e-40, - 1.1495939075395715e-40, - 1.1535744780361018e-40, - 1.1575415504445021e-40, - 1.161490889783213e-40, - 1.1654195763336254e-40, - 1.1693245439964332e-40, - 1.173203585549164e-40, - 1.1770588278497678e-40, - 1.1808953306787352e-40, - 1.1847198908121344e-40, - 1.18853914477423e-40, - 1.1923564766575795e-40, - 1.1961716864346301e-40, - 1.199982112077096e-40, - 1.203784835202911e-40, - 1.2075778305962824e-40, - 1.211360967341154e-40, - 1.215135641339631e-40, - 1.2189037176837337e-40, - 1.222666985980552e-40, - 1.2264268619792213e-40, - 1.230185162968343e-40, - 1.2339440178375697e-40, - 1.2377055669999204e-40, - 1.2414720113289537e-40, - 1.2452452593010292e-40, - 1.2490256426562397e-40, - 1.2528131254983091e-40, - 1.2566076809921425e-40, - 1.260408887767871e-40, - 1.2642163328175219e-40, - 1.268030500739567e-40, - 1.2718519231261783e-40, - 1.2756810357049898e-40, - 1.2795178360608517e-40, - 1.2833603897704402e-40, - 1.2872060053862134e-40, - 1.2910519979160061e-40, - 1.2948962943382028e-40, - 1.29873900139443e-40, - 1.3025825100237565e-40, - 1.306429501957891e-40, - 1.3102825941001492e-40, - 1.3141424976836094e-40, - 1.3180063906995093e-40, - 1.3218699630241728e-40, - 1.3257288299064044e-40, - 1.3295787656464455e-40, - 1.333418154311779e-40, - 1.3372480395946203e-40, - 1.341069821804154e-40, - 1.3448849071697776e-40, - 1.3486946865161454e-40, - 1.3524999973741433e-40, - 1.3563017313178932e-40, - 1.3601011284459977e-40, - 1.3638994324082178e-40, - 1.3676977027956974e-40, - 1.3714961257115114e-40, - 1.375294534268073e-40, - 1.379092618319848e-40, - 1.3828900666304145e-40, - 1.386686721184519e-40, - 1.3904833069841167e-40, - 1.394280408510229e-40, - 1.3980784387859897e-40, - 1.4018778093838922e-40, - 1.4056788991451956e-40, - 1.4094820588302602e-40, - 1.413288601544067e-40, - 1.4171003883856875e-40, - 1.4209192914251756e-40, - 1.4247471838623616e-40, - 1.4285857658780995e-40, - 1.4324356829099782e-40, - 1.4362967412348357e-40, - 1.4401687028841045e-40, - 1.4440513298715213e-40, - 1.4479440703350529e-40, - 1.451845420189778e-40, - 1.455753963770966e-40, - 1.4596683312573456e-40, - 1.4635871528276484e-40, - 1.4675090856447733e-40, - 1.4714331380908513e-40, - 1.4753584799676907e-40, - 1.4792842485021668e-40, - 1.483209580849839e-40, - 1.4871336211715764e-40, - 1.4910557398556364e-40, - 1.4949754841600819e-40, - 1.498892415751595e-40, - 1.5028060982800348e-40, - 1.5067160950500208e-40, - 1.5106218640924817e-40, - 1.5145226009981638e-40, - 1.518417592670453e-40, - 1.5223061177965607e-40, - 1.5261874550607298e-40, - 1.5300608896754266e-40, - 1.5339261005198779e-40, - 1.537783092718489e-40, - 1.5416319557337616e-40, - 1.5454727935570946e-40, - 1.5493057101798862e-40, - 1.5531308074764593e-40, - 1.5569483547868356e-40, - 1.560758859524488e-40, - 1.5645628013255988e-40, - 1.5683606590558764e-40, - 1.5721529115790328e-40, - 1.5759399884040885e-40, - 1.579722045411605e-40, - 1.5834993001060675e-40, - 1.587272021781191e-40, - 1.5910404797461184e-40, - 1.5948049434737675e-40, - 1.5985658416332503e-40, - 1.6023240878673296e-40, - 1.60608070605363e-40, - 1.6098367282976408e-40, - 1.6135931867048546e-40, - 1.6173511126542073e-40, - 1.6211112216276644e-40, - 1.6248735331375833e-40, - 1.6286379659367856e-40, - 1.632404430071513e-40, - 1.6361728355880082e-40, - 1.6399430935035034e-40, - 1.6437154327197437e-40, - 1.6474903811656804e-40, - 1.651267923726377e-40, - 1.6550479870070043e-40, - 1.658830497710156e-40, - 1.662615382438976e-40, - 1.6664023290946683e-40, - 1.670191013603198e-40, - 1.6739820930712697e-40, - 1.677776335892447e-40, - 1.6815745104601888e-40, - 1.685377385122274e-40, - 1.689185743039549e-40, - 1.6929997136314362e-40, - 1.6968179739163016e-40, - 1.7006390046444517e-40, - 1.7044612865661805e-40, - 1.708283300431782e-40, - 1.7121035522862481e-40, - 1.7159211614106783e-40, - 1.7197368337451636e-40, - 1.7235516901189645e-40, - 1.727366852383102e-40, - 1.7311834423885952e-40, - 1.7350025808953374e-40, - 1.7388252809281575e-40, - 1.7426519148075618e-40, - 1.7464823706835456e-40, - 1.7503165166571254e-40, - 1.754154220754184e-40, - 1.7579953509786743e-40, - 1.7618397512327806e-40, - 1.7656871190791273e-40, - 1.7695371306351912e-40, - 1.7733894785731617e-40, - 1.777243855572679e-40, - 1.7810999543133942e-40, - 1.7849574681099995e-40, - 1.7888161413174584e-40, - 1.7926761465643216e-40, - 1.7965380892135377e-40, - 1.8004025989545287e-40, - 1.8042703054767173e-40, - 1.8081418384695257e-40, - 1.812017847788306e-40, - 1.8158990807737745e-40, - 1.8197854065352104e-40, - 1.823676178695338e-40, - 1.8275707466212585e-40, - 1.8314684596800741e-40, - 1.8353686672388878e-40, - 1.839270593044981e-40, - 1.843173135678001e-40, - 1.847076104054448e-40, - 1.850979602619301e-40, - 1.8548837358413886e-40, - 1.8587886082523705e-40, - 1.862694324708534e-40, - 1.8666011656274263e-40, - 1.870509615301629e-40, - 1.8744193507200166e-40, - 1.878329864823583e-40, - 1.882240650553323e-40, - 1.886151200850232e-40, - 1.890061008334966e-40, - 1.893969498601879e-40, - 1.8978760909894293e-40, - 1.901780789408164e-40, - 1.905683744766574e-40, - 1.9095851079731484e-40, - 1.9134850299363764e-40, - 1.917383661461313e-40, - 1.92128111950968e-40, - 1.9251774700401153e-40, - 1.9290725915336954e-40, - 1.9329662632632685e-40, - 1.936858264507233e-40, - 1.9407483745441023e-40, - 1.944636372655288e-40, - 1.948522118842791e-40, - 1.9524057420249893e-40, - 1.9562874153256357e-40, - 1.9601673361835464e-40, - 1.9640457025513515e-40, - 1.9679227123688486e-40, - 1.9717985635287026e-40, - 1.975673418056923e-40, - 1.9795471250896885e-40, - 1.9834191484761777e-40, - 1.9872888576660287e-40, - 1.9911556232511294e-40, - 1.995018815823366e-40, - 1.998877805974626e-40, - 2.0027319689462015e-40, - 2.0065808364925076e-40, - 2.0104245480321252e-40, - 2.0142637234786036e-40, - 2.018099004583571e-40, - 2.02193103309863e-40, - 2.0257604507753823e-40, - 2.029587899365427e-40, - 2.033414016262957e-40, - 2.0372392515826402e-40, - 2.0410633714376155e-40, - 2.0448859454521825e-40, - 2.048706540733175e-40, - 2.0525247244014935e-40, - 2.0563400635780663e-40, - 2.0601521227136844e-40, - 2.0639603958476616e-40, - 2.067764788491344e-40, - 2.071565973576181e-40, - 2.075364760045097e-40, - 2.0791619575355575e-40, - 2.0829583756836004e-40, - 2.086754824088546e-40, - 2.0905521361614006e-40, - 2.094351259981888e-40, - 2.0981524120717915e-40, - 2.101955007409608e-40, - 2.1057583488474384e-40, - 2.1095617392373865e-40, - 2.1133644814315553e-40, - 2.117165878282048e-40, - 2.120965203450503e-40, - 2.12476179731287e-40, - 2.1285559428864106e-40, - 2.1323485743048e-40, - 2.1361407002367627e-40, - 2.139933329351023e-40, - 2.1437274703163024e-40, - 2.1475241317981713e-40, - 2.151324306419745e-40, - 2.1551286901441614e-40, - 2.158937105147512e-40, - 2.16274900328281e-40, - 2.166563800904815e-40, - 2.170380914387894e-40, - 2.1741997601103257e-40, - 2.1780197544477398e-40, - 2.181840287941089e-40, - 2.1856607926795047e-40, - 2.18948115736711e-40, - 2.1933015103607644e-40, - 2.1971220159000044e-40, - 2.2009428382243652e-40, - 2.204764141573381e-40, - 2.2085860901678676e-40, - 2.21240890508026e-40, - 2.216233074169588e-40, - 2.2200590086013293e-40, - 2.2238867849098683e-40, - 2.2277163406318732e-40, - 2.2315476124532284e-40, - 2.2353805370598168e-40, - 2.2392150511375215e-40, - 2.2430510625402857e-40, - 2.246888113646143e-40, - 2.2507253472968134e-40, - 2.2545620322042478e-40, - 2.2583977322300493e-40, - 2.262232029130657e-40, - 2.2660645046625095e-40, - 2.2698947405820413e-40, - 2.2737223205861727e-40, - 2.2775470048134006e-40, - 2.2813689495142967e-40, - 2.28518842675491e-40, - 2.2890054180418146e-40, - 2.2928198143527834e-40, - 2.296631506613073e-40, - 2.300440385686827e-40, - 2.3042463424327894e-40, - 2.308049239832192e-40, - 2.311848730124579e-40, - 2.315644439318259e-40, - 2.3194361293675297e-40, - 2.3232237185133583e-40, - 2.3270071385244675e-40, - 2.3307863211695774e-40, - 2.3345611982174118e-40, - 2.3383317017224135e-40, - 2.342097875955972e-40, - 2.3458600144574954e-40, - 2.34961837057523e-40, - 2.353373232804018e-40, - 2.3571249275194354e-40, - 2.3608737820766733e-40, - 2.3646201238309195e-40, - 2.368364280137364e-40, - 2.372106574647767e-40, - 2.375847193861185e-40, - 2.379586260890995e-40, - 2.3833240062695493e-40, - 2.3870603647321943e-40, - 2.3907951076745272e-40, - 2.3945280049631094e-40, - 2.3982588264644995e-40, - 2.401987342045258e-40, - 2.4057133302531073e-40, - 2.4094367398352122e-40, - 2.4131576371038105e-40, - 2.4168761024491767e-40, - 2.4205926468936727e-40, - 2.424308013218597e-40, - 2.4280229464143592e-40, - 2.4317381914955936e-40, - 2.435454493500043e-40, - 2.439172594086081e-40, - 2.4428931661233426e-40, - 2.446616858058473e-40, - 2.450344335453162e-40, - 2.4540759454266906e-40, - 2.4578117971144675e-40, - 2.4615519940047e-40, - 2.465296639585598e-40, - 2.4690458373453685e-40, - 2.4727996901054796e-40, - 2.476558268939438e-40, - 2.4803214898089494e-40, - 2.4840891017601167e-40, - 2.4878609313615716e-40, - 2.4916369422376496e-40, - 2.4954171094454204e-40, - 2.4992014080419563e-40, - 2.5029898130843285e-40, - 2.506782299622992e-40, - 2.510578835517548e-40, - 2.5143794335245998e-40, - 2.5181843052845988e-40, - 2.521993698750303e-40, - 2.5258078498243952e-40, - 2.52962699082344e-40, - 2.5334513540645815e-40, - 2.537281171864964e-40, - 2.5411166765417314e-40, - 2.5449580926957015e-40, - 2.5488055394686586e-40, - 2.5526588015387886e-40, - 2.556517477401712e-40, - 2.5603811263598784e-40, - 2.5642492606513174e-40, - 2.5681213893540624e-40, - 2.5719970215451864e-40, - 2.5758756662798407e-40, - 2.5797568326200185e-40, - 2.5836400437993472e-40, - 2.5875249093025295e-40, - 2.5914111848335952e-40, - 2.5952986652443066e-40, - 2.5991872853334047e-40, - 2.6030770586315203e-40, - 2.6069679995479305e-40, - 2.6108601224919117e-40, - 2.614753441872739e-40, - 2.6186479702681084e-40, - 2.622543665093155e-40, - 2.626440352640083e-40, - 2.6303377692148776e-40, - 2.6342356303921525e-40, - 2.6381335671449843e-40, - 2.642031181672786e-40, - 2.6459280761510877e-40, - 2.649823852755421e-40, - 2.653718113661317e-40, - 2.6576104686221393e-40, - 2.6615006391881906e-40, - 2.66538854175506e-40, - 2.669274187947097e-40, - 2.6731575616573606e-40, - 2.6770384953715385e-40, - 2.6809167742811373e-40, - 2.6847921835603517e-40, - 2.688664508383378e-40, - 2.69253353392441e-40, - 2.696399042115652e-40, - 2.7002607686651097e-40, - 2.7041183520981362e-40, - 2.7079713792215806e-40, - 2.711819467287278e-40, - 2.715662464251302e-40, - 2.719500320174481e-40, - 2.7233329855721094e-40, - 2.7271604109594748e-40, - 2.73098254685043e-40, - 2.7347993448206207e-40, - 2.73861078290135e-40, - 2.7424169592786163e-40, - 2.7462180742702196e-40, - 2.750014326593821e-40, - 2.753805798056472e-40, - 2.7575924661694534e-40, - 2.7613743047865166e-40, - 2.7651512877614117e-40, - 2.7689233889478853e-40, - 2.772690582715614e-40, - 2.7764529059866275e-40, - 2.780210478264896e-40, - 2.7839633497166835e-40, - 2.787711559976481e-40, - 2.791455174520517e-40, - 2.795194330606936e-40, - 2.7989291778569566e-40, - 2.8026598658917977e-40, - 2.806386544332678e-40, - 2.8101093628008137e-40, - 2.8138284463765343e-40, - 2.8175437636388486e-40, - 2.8212553163633462e-40, - 2.8249631535171586e-40, - 2.8286673219176027e-40, - 2.8323678233314707e-40, - 2.836064619223594e-40, - 2.8397576696436168e-40, - 2.8434469346432003e-40, - 2.847132374274004e-40, - 2.850813948963787e-40, - 2.8544916651004996e-40, - 2.8581655676009255e-40, - 2.86183560240987e-40, - 2.8655017015630256e-40, - 2.8691638066403218e-40, - 2.872821927032228e-40, - 2.8764761014867322e-40, - 2.88012636886951e-40, - 2.883772768046233e-40, - 2.8874153378825265e-40, - 2.8910541172064796e-40, - 2.8946891465483916e-40, - 2.8983205249173337e-40, - 2.9019484122088584e-40, - 2.9055729711067515e-40, - 2.9091943475360484e-40, - 2.912812602680344e-40, - 2.9164277710007435e-40, - 2.920039886948263e-40, - 2.9236489849739224e-40, - 2.927255099528739e-40, - 2.9308582698248362e-40, - 2.9344586020089074e-40, - 2.938056292905499e-40, - 2.9416515750363753e-40, - 2.9452446818210967e-40, - 2.948835866973427e-40, - 2.9524255037929414e-40, - 2.956014009229398e-40, - 2.9596018002965828e-40, - 2.9631892940082814e-40, - 2.9667769073782824e-40, - 2.9703650546357163e-40, - 2.9739541051247558e-40, - 2.977544403643153e-40, - 2.981136305034773e-40, - 2.9847301645240174e-40, - 2.9883263255060486e-40, - 2.9919249863855533e-40, - 2.9955262483486035e-40, - 2.999130210796386e-40, - 3.002736973143151e-40, - 3.006346634804183e-40, - 3.009959296098141e-40, - 3.013575099280184e-40, - 3.01719419561072e-40, - 3.0208166621772667e-40, - 3.0244425694259346e-40, - 3.0280719888041733e-40, - 3.0317050897573173e-40, - 3.0353422207195757e-40, - 3.0389837491911716e-40, - 3.042630042672329e-40, - 3.046281468663269e-40, - 3.0499383946642166e-40, - 3.0536011773315043e-40, - 3.0572701645867494e-40, - 3.0609458517006283e-40, - 3.0646287775581803e-40, - 3.068319481045626e-40, - 3.0720184750136416e-40, - 3.075726023961168e-40, - 3.0794422546695794e-40, - 3.0831672924530537e-40, - 3.0869012626257743e-40, - 3.090644290501919e-40, - 3.094396499677274e-40, - 3.0981579596592665e-40, - 3.1019285746473136e-40, - 3.1057081136221386e-40, - 3.109496337404193e-40, - 3.113293006850596e-40, - 3.1170979834301452e-40, - 3.120911526584271e-40, - 3.124733994228008e-40, - 3.1285657442763845e-40, - 3.1324071346444358e-40, - 3.136258523247193e-40, - 3.140120263449754e-40, - 3.1439926541843014e-40, - 3.147875839446653e-40, - 3.1517698865786553e-40, - 3.155674862012127e-40, - 3.1595908320421645e-40, - 3.16351773633108e-40, - 3.167455153470416e-40, - 3.171402598120004e-40, - 3.1753595849129953e-40, - 3.1793256283951566e-40, - 3.183300243094391e-40, - 3.1872829342081415e-40, - 3.1912731620045406e-40, - 3.195270457581561e-40, - 3.1992743905234128e-40, - 3.2032845305327257e-40, - 3.20730044731664e-40, - 3.211321766960832e-40, - 3.21534831264185e-40, - 3.219379950579193e-40, - 3.223416546992371e-40, - 3.2274579681008815e-40, - 3.23150408012423e-40, - 3.235554759540512e-40, - 3.2396099467430133e-40, - 3.2436695027989284e-40, - 3.247733233036982e-40, - 3.251800942416744e-40, - 3.2558724358977784e-40, - 3.2599475072531e-40, - 3.2640258637734486e-40, - 3.2681071724466507e-40, - 3.2721911000349554e-40, - 3.2762773133006144e-40, - 3.280365479005878e-40, - 3.284455259590986e-40, - 3.288546244225473e-40, - 3.292638059710277e-40, - 3.2967304258818327e-40, - 3.300823065940764e-40, - 3.3049157030876903e-40, - 3.3090080612248845e-40, - 3.31309989973639e-40, - 3.3171910295884075e-40, - 3.321281265809934e-40, - 3.3253704234299583e-40, - 3.3294583174774772e-40, - 3.3335447630451877e-40, - 3.3376296075447273e-40, - 3.3417127453401166e-40, - 3.3457939792256834e-40, - 3.3498730938890777e-40, - 3.353949874017951e-40, - 3.358024104299952e-40, - 3.3620955652562928e-40, - 3.366164000975457e-40, - 3.3702291367149553e-40, - 3.3742906975745097e-40, - 3.378348408642689e-40, - 3.3824019949443406e-40, - 3.3864511836012592e-40, - 3.3904957475590732e-40, - 3.394535610574577e-40, - 3.398570802779456e-40, - 3.402601358158253e-40, - 3.406627310695502e-40, - 3.4106486943757474e-40, - 3.4146655509784467e-40, - 3.4186779596096462e-40, - 3.422686010535188e-40, - 3.4266897940229213e-40, - 3.430689400340692e-40, - 3.434684919756353e-40, - 3.438676437486524e-40, - 3.4426639918806187e-40, - 3.4466475676616835e-40, - 3.4506271334763973e-40, - 3.4546026580132714e-40, - 3.4585741099688065e-40, - 3.462541458039511e-40, - 3.4665046638073677e-40, - 3.4704636559669314e-40, - 3.4744183537164596e-40, - 3.4783686762532857e-40, - 3.482314542774744e-40, - 3.486255872478167e-40, - 3.490192585067023e-40, - 3.4941246059833816e-40, - 3.4980518766213564e-40, - 3.501974344934943e-40, - 3.5058919589138403e-40, - 3.5098046665477395e-40, - 3.5137124158263333e-40, - 3.5176151541124485e-40, - 3.5215128234651743e-40, - 3.525405363272645e-40, - 3.5292927129024604e-40, - 3.53317481172222e-40, - 3.5370515990995255e-40, - 3.540923016632968e-40, - 3.54478903394588e-40, - 3.5486496182567488e-40, - 3.552504720433019e-40, - 3.556354290983086e-40, - 3.5601982804153444e-40, - 3.564036639238188e-40, - 3.567869318394724e-40, - 3.571696287238951e-40, - 3.5755175399543547e-40, - 3.579333072478966e-40, - 3.58314288075081e-40, - 3.5869469608794364e-40, - 3.590745311244358e-40, - 3.5945379219788853e-40, - 3.598324783944331e-40, - 3.6021059204560016e-40, - 3.6058813583790275e-40, - 3.6096511245785372e-40, - 3.6134152459196637e-40, - 3.617173749267535e-40, - 3.6209266592579944e-40, - 3.6246739844683305e-40, - 3.628415726438436e-40, - 3.6321518866783045e-40, - 3.635882466697923e-40, - 3.639607468007286e-40, - 3.643326899694513e-40, - 3.6470408458060573e-40, - 3.6507494562440084e-40, - 3.654452895257136e-40, - 3.658151323340204e-40, - 3.661844890898829e-40, - 3.665533746723278e-40, - 3.6692180396038754e-40, - 3.672897920557593e-40, - 3.6765735487318814e-40, - 3.680245085129416e-40, - 3.683912690752874e-40, - 3.687576526604931e-40, - 3.6912367536882655e-40, - 3.694893524272078e-40, - 3.698546955475155e-40, - 3.702197164337448e-40, - 3.705844270503757e-40, - 3.7094883936188856e-40, - 3.7131296533276395e-40, - 3.716768169274823e-40, - 3.720404061105142e-40, - 3.724037447831344e-40, - 3.727668456792475e-40, - 3.731297233193197e-40, - 3.734923924000621e-40, - 3.738548676181873e-40, - 3.742171636704273e-40, - 3.745792962119547e-40, - 3.7494128297275715e-40, - 3.7530313734993574e-40, - 3.756648715985051e-40, - 3.760264979734802e-40, - 3.763880287298758e-40, - 3.767494761227063e-40, - 3.7711085240698705e-40, - 3.77472169225065e-40, - 3.7783343453841095e-40, - 3.781946549402538e-40, - 3.785558370215414e-40, - 3.789169873732214e-40, - 3.792781125858467e-40, - 3.796392176850998e-40, - 3.800003029504198e-40, - 3.8036138054118085e-40, - 3.807224675012255e-40, - 3.810835808789297e-40, - 3.814447377226691e-40, - 3.818059550808198e-40, - 3.821672500017581e-40, - 3.8252863972878e-40, - 3.8289014699194855e-40, - 3.832518006313649e-40, - 3.836136298071581e-40, - 3.8397566367945645e-40, - 3.84337931408389e-40, - 3.847004624367269e-40, - 3.850632915095672e-40, - 3.854264386140965e-40, - 3.857899047803981e-40, - 3.861536903336256e-40, - 3.86517795632152e-40, - 3.868822218406655e-40 - ] - }, - "numu_bar": { - "cc": [ - 0.0, - 0.0, - 4.998151997757878e-43, - 9.975501462646817e-43, - 1.4395705866403447e-42, - 1.9794405476610352e-42, - 2.5921801510304984e-42, - 3.2358103686100137e-42, - 3.8845021285051104e-42, - 4.564719154643372e-42, - 5.2899146715373126e-42, - 6.018121390235004e-42, - 6.784055614523957e-42, - 7.545907798154501e-42, - 8.301090814097798e-42, - 9.054909962142732e-42, - 9.786247256319871e-42, - 1.0491364274710481e-41, - 1.1217943661156273e-41, - 1.1918091991359023e-41, - 1.2574352103172906e-41, - 1.324852207132267e-41, - 1.3928596906851852e-41, - 1.4596582151222238e-41, - 1.5279851121897558e-41, - 1.5923527414500896e-41, - 1.6556427301936454e-41, - 1.7203315063378587e-41, - 1.784788817923856e-41, - 1.8454561837997272e-41, - 1.9070288053268456e-41, - 1.9720355330784316e-41, - 2.0350125360076636e-41, - 2.0962728914734434e-41, - 2.1571657507185285e-41, - 2.2204052350132362e-41, - 2.2846768435796427e-41, - 2.3481303249791434e-41, - 2.409701310020699e-41, - 2.4673707476565926e-41, - 2.522143205404463e-41, - 2.5756864121535197e-41, - 2.6335058529888844e-41, - 2.6953667614097455e-41, - 2.7601406161176047e-41, - 2.823927992011388e-41, - 2.8825444745173997e-41, - 2.9411348572822494e-41, - 3.0016021464363324e-41, - 3.0658505019766924e-41, - 3.1318589966002775e-41, - 3.1962104387864765e-41, - 3.256024949583471e-41, - 3.311131335007442e-41, - 3.364588416183068e-41, - 3.4190299461508527e-41, - 3.476914954617222e-41, - 3.5373527805315467e-41, - 3.5975094821647855e-41, - 3.6555089096627223e-41, - 3.7110014484375846e-41, - 3.7639550170101304e-41, - 3.8182246289867386e-41, - 3.8759263968162355e-41, - 3.938125303939151e-41, - 4.0032023202340434e-41, - 4.069657008948504e-41, - 4.133874793266492e-41, - 4.1946880431244227e-41, - 4.251370648852965e-41, - 4.306097146986981e-41, - 4.3597368023882237e-41, - 4.415726182159425e-41, - 4.474302425273088e-41, - 4.534175277515937e-41, - 4.595166022144908e-41, - 4.654852276886641e-41, - 4.712780029846277e-41, - 4.768195817214892e-41, - 4.821143150320531e-41, - 4.873623170416592e-41, - 4.926766061090166e-41, - 4.98207243728611e-41, - 5.041062146477786e-41, - 5.104895919510652e-41, - 5.172355082931486e-41, - 5.240125067475816e-41, - 5.308528903559902e-41, - 5.375315437927518e-41, - 5.438760356184451e-41, - 5.497778555378503e-41, - 5.553442707813759e-41, - 5.607897132709398e-41, - 5.660712827834105e-41, - 5.712336236424146e-41, - 5.76412368800212e-41, - 5.816664868720474e-41, - 5.869566070460834e-41, - 5.92296553994895e-41, - 5.977578562259746e-41, - 6.034260161327546e-41, - 6.092817272121191e-41, - 6.152059669220951e-41, - 6.212491818054846e-41, - 6.273845446837207e-41, - 6.335167012085534e-41, - 6.39590070709462e-41, - 6.455599692676193e-41, - 6.513777531335981e-41, - 6.570729011512636e-41, - 6.626813778435341e-41, - 6.681797060176585e-41, - 6.736095938173683e-41, - 6.790696243162755e-41, - 6.846330504350507e-41, - 6.903437681954458e-41, - 6.962719689371179e-41, - 7.024383790213137e-41, - 7.088195671437543e-41, - 7.153998675537799e-41, - 7.22107886037158e-41, - 7.288345229265466e-41, - 7.355027895142664e-41, - 7.420737925598101e-41, - 7.484726700516705e-41, - 7.546240177789992e-41, - 7.605435823971053e-41, - 7.663022640785129e-41, - 7.719419636671513e-41, - 7.774830129495919e-41, - 7.829697958431051e-41, - 7.884529571602681e-41, - 7.939440137180396e-41, - 7.994193629203755e-41, - 8.048998814566246e-41, - 8.104699892875003e-41, - 8.161332887259724e-41, - 8.218398144854245e-41, - 8.275473761648346e-41, - 8.332339742820488e-41, - 8.389254866386774e-41, - 8.446454723248156e-41, - 8.503823997647268e-41, - 8.561106357536352e-41, - 8.618102551770899e-41, - 8.674870573819033e-41, - 8.731503114949785e-41, - 8.788145313403508e-41, - 8.845022532292004e-41, - 8.902145347142895e-41, - 8.959561338999736e-41, - 9.017638456167334e-41, - 9.07667876565051e-41, - 9.13658078273221e-41, - 9.196908596616684e-41, - 9.257301642871798e-41, - 9.317913247272224e-41, - 9.379009457072595e-41, - 9.440392864197748e-41, - 9.50157340650624e-41, - 9.562424498257274e-41, - 9.623212840715048e-41, - 9.684082127627547e-41, - 9.744740183227636e-41, - 9.804881791073528e-41, - 9.864363221420893e-41, - 9.923077366218803e-41, - 9.981078275905934e-41, - 1.0038614566335824e-40, - 1.0095880947645035e-40, - 1.0152848215535061e-40, - 1.0209447441086982e-40, - 1.0265698632734521e-40, - 1.0321587024457103e-40, - 1.0377184207621327e-40, - 1.0432671022675587e-40, - 1.048810394142269e-40, - 1.054327306541556e-40, - 1.0598079668736436e-40, - 1.065300721831713e-40, - 1.0708545395185285e-40, - 1.0764724411404789e-40, - 1.0821408799157717e-40, - 1.0878594709712193e-40, - 1.0936535955373509e-40, - 1.099551180303364e-40, - 1.105562923203737e-40, - 1.1116908627734385e-40, - 1.1179292675381516e-40, - 1.1242663963210398e-40, - 1.130693467594088e-40, - 1.1372124596898254e-40, - 1.1438255061671119e-40, - 1.1505046389144642e-40, - 1.1571925983455318e-40, - 1.1638423514061403e-40, - 1.170455374427976e-40, - 1.1770496401381198e-40, - 1.1836246010719733e-40, - 1.1901352867157684e-40, - 1.196529219681985e-40, - 1.2027942910428024e-40, - 1.2089487362255678e-40, - 1.2150060226996084e-40, - 1.220976139180431e-40, - 1.2268694300353869e-40, - 1.2326928279354265e-40, - 1.2384516300872039e-40, - 1.2441512656654757e-40, - 1.2497992561304258e-40, - 1.2554036412815771e-40, - 1.2609728563356277e-40, - 1.2665178179602737e-40, - 1.272052215168095e-40, - 1.277595180251463e-40, - 1.2831667989065321e-40, - 1.288780251158758e-40, - 1.2944436657116723e-40, - 1.3001456420323005e-40, - 1.3058593613980583e-40, - 1.3115610332309174e-40, - 1.3172593263127868e-40, - 1.3229772846009581e-40, - 1.3287323732143358e-40, - 1.3345229258451475e-40, - 1.3403397672463337e-40, - 1.3461697873003573e-40, - 1.3520077369383582e-40, - 1.357856323976843e-40, - 1.363722009863531e-40, - 1.3696080893575927e-40, - 1.3755123650232863e-40, - 1.3814312277092061e-40, - 1.387363447677593e-40, - 1.3933094599327566e-40, - 1.3992620021525338e-40, - 1.4052029320422562e-40, - 1.4111183528210724e-40, - 1.4170025811609844e-40, - 1.4228681210124082e-40, - 1.4287309788661864e-40, - 1.434604971545099e-40, - 1.4404847638878173e-40, - 1.446356318001233e-40, - 1.4522077063618437e-40, - 1.4580399220822125e-40, - 1.4638562600820443e-40, - 1.4696532416148397e-40, - 1.4754276686874556e-40, - 1.4811860070224057e-40, - 1.486945092169768e-40, - 1.4927200058563748e-40, - 1.4985223302628506e-40, - 1.504349712048506e-40, - 1.5101936221377202e-40, - 1.5160419694925651e-40, - 1.5218875037841763e-40, - 1.5277315745790106e-40, - 1.5335795659199775e-40, - 1.5394462307692646e-40, - 1.5453490220257783e-40, - 1.5513025216795666e-40, - 1.5573089593430137e-40, - 1.5633565008575485e-40, - 1.5694255797490863e-40, - 1.5755019343950952e-40, - 1.5815869373975437e-40, - 1.5876956654436115e-40, - 1.593845114949519e-40, - 1.6000367069595302e-40, - 1.6062524761883896e-40, - 1.6124586938286446e-40, - 1.6186265786257944e-40, - 1.6247477731683245e-40, - 1.6308327783401835e-40, - 1.6369002399649115e-40, - 1.642959396994272e-40, - 1.649011547492712e-40, - 1.655046631936562e-40, - 1.6610521666377957e-40, - 1.6670226292872606e-40, - 1.6729596237229825e-40, - 1.6788766783798434e-40, - 1.6847869875798681e-40, - 1.6906968966256824e-40, - 1.6966076203180637e-40, - 1.7025144638989146e-40, - 1.7084139684284168e-40, - 1.7143089305317444e-40, - 1.720204504079769e-40, - 1.7261067950776454e-40, - 1.7320208311008906e-40, - 1.737948216028853e-40, - 1.7438904595361245e-40, - 1.7498484539583263e-40, - 1.755819172701787e-40, - 1.7617983285932053e-40, - 1.767785255418589e-40, - 1.773783741510824e-40, - 1.7797978191860925e-40, - 1.7858279527141894e-40, - 1.7918691677254978e-40, - 1.7979146939185697e-40, - 1.8039630131940825e-40, - 1.8100139006333546e-40, - 1.8160665810978254e-40, - 1.8221211772433323e-40, - 1.8281743330180647e-40, - 1.8342216218987837e-40, - 1.8402588036890656e-40, - 1.8462825149807154e-40, - 1.852291871324949e-40, - 1.8582859518068636e-40, - 1.8642635897948506e-40, - 1.8702208525559186e-40, - 1.8761547260740277e-40, - 1.8820698325726754e-40, - 1.8879726420152285e-40, - 1.8938714863800743e-40, - 1.8997729376389357e-40, - 1.9056737914349776e-40, - 1.911568300909553e-40, - 1.9174498757034166e-40, - 1.9233120857183958e-40, - 1.929155887736289e-40, - 1.9349860234981016e-40, - 1.940807816135017e-40, - 1.9466280724001382e-40, - 1.9524509473407893e-40, - 1.958276988626881e-40, - 1.964106467919827e-40, - 1.969937683657805e-40, - 1.9757678417621123e-40, - 1.981594510539636e-40, - 1.9874153069809557e-40, - 1.993228040785852e-40, - 1.999031662972737e-40, - 2.0048272817460214e-40, - 2.0106181624897376e-40, - 2.0164079250055006e-40, - 2.0222017341420337e-40, - 2.028004458809839e-40, - 2.0338177464531397e-40, - 2.0396423249121716e-40, - 2.0454779916121087e-40, - 2.0513204019845374e-40, - 2.0571645884422495e-40, - 2.0630062566844295e-40, - 2.0688409499409693e-40, - 2.0746663766990715e-40, - 2.0804840367393615e-40, - 2.0862994731179113e-40, - 2.0921192989347572e-40, - 2.097950187091285e-40, - 2.1037982432019946e-40, - 2.1096661117909896e-40, - 2.115550732253462e-40, - 2.1214482102565653e-40, - 2.127354630012043e-40, - 2.1332664605557332e-40, - 2.1391854885249776e-40, - 2.1451182981300718e-40, - 2.1510714208872567e-40, - 2.157051004132481e-40, - 2.1630641192055325e-40, - 2.169115676718784e-40, - 2.175208742630192e-40, - 2.1813464115964048e-40, - 2.1875311291036718e-40, - 2.1937625302351405e-40, - 2.200037444114863e-40, - 2.2063526266282597e-40, - 2.2127050344037475e-40, - 2.2190918692194966e-40, - 2.225512181979976e-40, - 2.231965318530013e-40, - 2.2384499499135434e-40, - 2.2449641163068564e-40, - 2.2515053346749347e-40, - 2.258068310618533e-40, - 2.264647479057816e-40, - 2.2712378240090203e-40, - 2.2778342494386203e-40, - 2.2844316538607385e-40, - 2.2910289379688663e-40, - 2.2976259456708754e-40, - 2.3042219985536727e-40, - 2.310816512687309e-40, - 2.31740888629648e-40, - 2.3239953548009866e-40, - 2.3305691955269702e-40, - 2.337123722575459e-40, - 2.343651776169306e-40, - 2.350146099966009e-40, - 2.3566009369835996e-40, - 2.3630158915329586e-40, - 2.369392965779499e-40, - 2.3757341283223234e-40, - 2.382040566534318e-40, - 2.3883130246820372e-40, - 2.394551750505576e-40, - 2.400757171776436e-40, - 2.4069299550444715e-40, - 2.4130707509357944e-40, - 2.4191801256316854e-40, - 2.425259154573277e-40, - 2.431311188311162e-40, - 2.4373403896899243e-40, - 2.443350337956761e-40, - 2.4493444871230236e-40, - 2.4553261353561157e-40, - 2.461296591305912e-40, - 2.467254585732638e-40, - 2.4731986538585296e-40, - 2.479126953912422e-40, - 2.4850374128141345e-40, - 2.490929259720661e-40, - 2.496806418290634e-40, - 2.5026741846700165e-40, - 2.508537854089128e-40, - 2.5144027521872848e-40, - 2.5202741475103275e-40, - 2.5261550995744553e-40, - 2.5320455184746284e-40, - 2.5379446443436322e-40, - 2.5438516261212743e-40, - 2.5497656909896566e-40, - 2.5556867105373566e-40, - 2.561613832723379e-40, - 2.5675459190682983e-40, - 2.5734815338368308e-40, - 2.5794187445482444e-40, - 2.585355507511137e-40, - 2.591290063474275e-40, - 2.5972237989309077e-40, - 2.6031589792050104e-40, - 2.609097855553451e-40, - 2.6150422580862056e-40, - 2.620993653426651e-40, - 2.626953175146339e-40, - 2.632919478895718e-40, - 2.638891191033794e-40, - 2.6448670448572784e-40, - 2.6508457669059185e-40, - 2.6568257955032106e-40, - 2.6628059883178145e-40, - 2.6687872816764478e-40, - 2.674770890017897e-40, - 2.6807581620983682e-40, - 2.6867504557627727e-40, - 2.692749222657214e-40, - 2.6987546648592887e-40, - 2.704764731415328e-40, - 2.7107771922106688e-40, - 2.7167899149129506e-40, - 2.7228008464492853e-40, - 2.7288077532556128e-40, - 2.7348092966587898e-40, - 2.740805530407574e-40, - 2.746796802279945e-40, - 2.7527835301373396e-40, - 2.758766141055732e-40, - 2.764745018412691e-40, - 2.7707203821751585e-40, - 2.7766929826331383e-40, - 2.7826643050432936e-40, - 2.7886359805816294e-40, - 2.794609700857534e-40, - 2.8005870916793453e-40, - 2.8065693642085125e-40, - 2.8125565135361254e-40, - 2.8185467668783476e-40, - 2.8245382674437588e-40, - 2.8305291998657738e-40, - 2.836517812504881e-40, - 2.8425027110043436e-40, - 2.848483651304618e-40, - 2.8544621884974037e-40, - 2.8604402240223668e-40, - 2.866419657605438e-40, - 2.872402130815767e-40, - 2.8783886617127527e-40, - 2.8843800818656982e-40, - 2.8903772742789407e-40, - 2.896381653912386e-40, - 2.902395193022188e-40, - 2.908419915495519e-40, - 2.9144577851708836e-40, - 2.9205096330112143e-40, - 2.9265743237295168e-40, - 2.9326499749126006e-40, - 2.9387346178498743e-40, - 2.944826223549918e-40, - 2.9509227030437056e-40, - 2.9570222821575947e-40, - 2.963125087836575e-40, - 2.969232365111271e-40, - 2.9753451972244487e-40, - 2.9814646567959705e-40, - 2.9875918236364684e-40, - 2.9937278285501993e-40, - 2.9998731736635565e-40, - 3.0060265240294097e-40, - 3.0121861506874494e-40, - 3.018350302626785e-40, - 3.024517150406091e-40, - 3.030684863927718e-40, - 3.036851653985663e-40, - 3.0430163707152712e-40, - 3.0491785572376712e-40, - 3.0553378508759087e-40, - 3.0614938896388634e-40, - 3.067645996623799e-40, - 3.0737933036720565e-40, - 3.0799349546041696e-40, - 3.0860700182100832e-40, - 3.0921977718608583e-40, - 3.098317799345703e-40, - 3.1044297131118654e-40, - 3.110533108346377e-40, - 3.1166273416755035e-40, - 3.1227116332653397e-40, - 3.128785918028547e-40, - 3.134850886969529e-40, - 3.140907021365172e-40, - 3.1469548275310307e-40, - 3.1529948186592973e-40, - 3.159027489581109e-40, - 3.1650530586421206e-40, - 3.171071384014823e-40, - 3.1770821597188115e-40, - 3.183086089649636e-40, - 3.189084763215435e-40, - 3.195080222659618e-40, - 3.2010745506638796e-40, - 3.207069722697548e-40, - 3.213067112332601e-40, - 3.2190674840288285e-40, - 3.2250705470126037e-40, - 3.231075011599116e-40, - 3.2370796056007254e-40, - 3.2430832967327512e-40, - 3.2490852051291787e-40, - 3.2550851522158577e-40, - 3.261083593110802e-40, - 3.2670813634657923e-40, - 3.273080317302287e-40, - 3.2790824706630376e-40, - 3.2850898364662474e-40, - 3.2911043006635443e-40, - 3.2971270648264954e-40, - 3.3031586468864368e-40, - 3.3091994149784148e-40, - 3.3152493523456515e-40, - 3.3213085238950298e-40, - 3.3273770749394926e-40, - 3.3334551528151312e-40, - 3.3395430786568614e-40, - 3.3456411303970135e-40, - 3.3517493213672155e-40, - 3.357867827882089e-40, - 3.3639971879233176e-40, - 3.370138182403734e-40, - 3.376291956407967e-40, - 3.382459627545211e-40, - 3.388641487264963e-40, - 3.394836798179729e-40, - 3.4010443685505578e-40, - 3.407262150571924e-40, - 3.4134875308967745e-40, - 3.4197178871765142e-40, - 3.4259507514810075e-40, - 3.432184094984703e-40, - 3.438416948376697e-40, - 3.444648905470148e-40, - 3.4508797341523114e-40, - 3.4571102318440747e-40, - 3.4633415998848966e-40, - 3.469575040530952e-40, - 3.4758117456923657e-40, - 3.482052584721839e-40, - 3.4882974416026528e-40, - 3.4945459225143114e-40, - 3.50079736969957e-40, - 3.507050175064704e-40, - 3.513302449624638e-40, - 3.5195522185952073e-40, - 3.525797502132886e-40, - 3.5320365601882527e-40, - 3.538268284365189e-40, - 3.5444918144657237e-40, - 3.5507065375761593e-40, - 3.556912391022149e-40, - 3.563109418140376e-40, - 3.569297636765426e-40, - 3.5754770251568994e-40, - 3.5816477397081637e-40, - 3.587809944840843e-40, - 3.593963806268455e-40, - 3.6001094369385875e-40, - 3.6062467905546995e-40, - 3.6123757952094075e-40, - 3.6184963788630972e-40, - 3.624608472757622e-40, - 3.6307125040408578e-40, - 3.6368094970986643e-40, - 3.6429005219574656e-40, - 3.6489866357379856e-40, - 3.6550688690344816e-40, - 3.6611481804738267e-40, - 3.667225495716217e-40, - 3.6733016771150034e-40, - 3.6793769466689556e-40, - 3.685450758066323e-40, - 3.6915225138095805e-40, - 3.697591630532111e-40, - 3.703657604465964e-40, - 3.7097199840749666e-40, - 3.7157782237062075e-40, - 3.721831754995394e-40, - 3.727880626157929e-40, - 3.733925794523588e-40, - 3.7399683864287506e-40, - 3.746009656811896e-40, - 3.752050805841994e-40, - 3.758092825212062e-40, - 3.764136680314087e-40, - 3.7701833156727876e-40, - 3.776233369216199e-40, - 3.782286918377478e-40, - 3.788343880949722e-40, - 3.794404173501072e-40, - 3.8004677619583895e-40, - 3.8065349390410445e-40, - 3.81260613044513e-40, - 3.8186817618894896e-40, - 3.824762273130153e-40, - 3.83084803387899e-40, - 3.8369392230061324e-40, - 3.843036047095828e-40, - 3.849138714586312e-40, - 3.855247253899847e-40, - 3.861361195595077e-40, - 3.867480192419787e-40, - 3.873603974333926e-40, - 3.879732369175165e-40, - 3.885865168121919e-40, - 3.892002060246751e-40, - 3.898142388874987e-40, - 3.90428528568518e-40, - 3.91043000760137e-40, - 3.916575998104796e-40, - 3.922722732288728e-40, - 3.928869877813817e-40, - 3.9350169853502495e-40, - 3.9411635600114e-40, - 3.947309120021176e-40, - 3.953453180338109e-40, - 3.9595951796077425e-40, - 3.965734824450821e-40, - 3.971872194223244e-40, - 3.978007384124697e-40, - 3.9841405951487856e-40, - 3.990272497499346e-40, - 3.996404041817291e-40, - 4.002536195964821e-40, - 4.008669927804136e-40, - 4.014806168691855e-40, - 4.0209451536236916e-40, - 4.0270865025360804e-40, - 4.033229817836179e-40, - 4.039374661627247e-40, - 4.0455201952244705e-40, - 4.051665256204305e-40, - 4.057808597855099e-40, - 4.0639489199191206e-40, - 4.070084940217757e-40, - 4.076215965367392e-40, - 4.082341980430487e-40, - 4.088463214469138e-40, - 4.094580203663904e-40, - 4.1006938707627005e-40, - 4.1068055130523645e-40, - 4.112916439422979e-40, - 4.119027881030225e-40, - 4.125140724734103e-40, - 4.131255336762124e-40, - 4.137371242229086e-40, - 4.143487862104013e-40, - 4.149604665048348e-40, - 4.155721087203193e-40, - 4.161836386259435e-40, - 4.167949809826311e-40, - 4.174060605561066e-40, - 4.180168021531243e-40, - 4.186271482291763e-40, - 4.192371289681085e-40, - 4.198468043573478e-40, - 4.204562347698183e-40, - 4.210655057276433e-40, - 4.216747508091476e-40, - 4.222840903645174e-40, - 4.2289363363278115e-40, - 4.235034896718036e-40, - 4.241137667641743e-40, - 4.247245441002355e-40, - 4.253358703902252e-40, - 4.259478032869661e-40, - 4.2656038841527215e-40, - 4.271736003815153e-40, - 4.277873875756039e-40, - 4.284016967928051e-40, - 4.2901644770560535e-40, - 4.296315339172794e-40, - 4.302468495309438e-40, - 4.308623025509146e-40, - 4.3147780716623834e-40, - 4.32093277192628e-40, - 4.327086578366185e-40, - 4.3332393616456586e-40, - 4.339391019393452e-40, - 4.3455414492383084e-40, - 4.35169054878409e-40, - 4.357838218554023e-40, - 4.3639843658182275e-40, - 4.370128871291705e-40, - 4.376271615938138e-40, - 4.382412656122823e-40, - 4.388552202620652e-40, - 4.39469045196405e-40, - 4.400827593148726e-40, - 4.406963814302811e-40, - 4.41309930355443e-40, - 4.419234249161154e-40, - 4.425368849327139e-40, - 4.431503191065879e-40, - 4.437637229018422e-40, - 4.443770590478321e-40, - 4.449902478528322e-40, - 4.45603203107758e-40, - 4.462158485049349e-40, - 4.468281609194809e-40, - 4.474401385819229e-40, - 4.4805177989661406e-40, - 4.486630791932834e-40, - 4.492740216719711e-40, - 4.4988458594073075e-40, - 4.5049475889967516e-40, - 4.511045622164408e-40, - 4.517140222477298e-40, - 4.523231653502503e-40, - 4.529320179595196e-40, - 4.535406151874001e-40, - 4.5414900782568725e-40, - 4.547572497302943e-40, - 4.553654000784775e-40, - 4.5597351696011746e-40, - 4.565816361171286e-40, - 4.571897613837507e-40, - 4.577978856013553e-40, - 4.584060013226345e-40, - 4.5901410110022395e-40, - 4.596221774867595e-40, - 4.602302230774231e-40, - 4.608382346026352e-40, - 4.6144622209202945e-40, - 4.6205420039323665e-40, - 4.626621923253561e-40, - 4.632702345746072e-40, - 4.6387836627370724e-40, - 4.6448662447973614e-40, - 4.650950412567396e-40, - 4.657036477800255e-40, - 4.663124752248118e-40, - 4.669215544145571e-40, - 4.6753089939468255e-40, - 4.68140498784346e-40, - 4.687503375458978e-40, - 4.693604128231301e-40, - 4.69970726628386e-40, - 4.70581281002034e-40, - 4.71192077984407e-40, - 4.7180311577052065e-40, - 4.724143713464845e-40, - 4.7302581295260635e-40, - 4.73637414522877e-40, - 4.742491904705055e-40, - 4.7486116810943794e-40, - 4.754733469400812e-40, - 4.760857259151652e-40, - 4.766983191857199e-40, - 4.773111413726725e-40, - 4.779242070969497e-40, - 4.7853753097947494e-40, - 4.791511267735251e-40, - 4.797649879398246e-40, - 4.803790612795017e-40, - 4.809932275205099e-40, - 4.816073709718757e-40, - 4.8222141580190625e-40, - 4.828352987647399e-40, - 4.834489679526633e-40, - 4.840623991570452e-40, - 4.84675573234535e-40, - 4.8528847104178505e-40, - 4.859010734354478e-40, - 4.865133616923201e-40, - 4.871253609671884e-40, - 4.877371657499485e-40, - 4.883488533509713e-40, - 4.889604730404471e-40, - 4.895720701915362e-40, - 4.901836901773977e-40, - 4.90795379313019e-40, - 4.914072023765907e-40, - 4.920192432189747e-40, - 4.926315868330438e-40, - 4.932443177763432e-40, - 4.938574753277556e-40, - 4.9447101587752944e-40, - 4.9508489804596095e-40, - 4.956990899535721e-40, - 4.963135606144168e-40, - 4.9692827904682154e-40, - 4.9754321426911314e-40, - 4.981583352996176e-40, - 4.987736117882717e-40, - 4.993890197926199e-40, - 5.0000453823933006e-40, - 5.0062016376110535e-40, - 5.012359437271814e-40, - 5.018519262062304e-40, - 5.024681446899572e-40, - 5.030846298353614e-40, - 5.03701408100061e-40, - 5.0431850528481675e-40, - 5.049359471912435e-40, - 5.055537596209564e-40, - 5.061719683755707e-40, - 5.067905993475659e-40, - 5.0740967696321125e-40, - 5.080291998205328e-40, - 5.08649153635438e-40, - 5.092695343164747e-40, - 5.09890339458101e-40, - 5.105115666553063e-40, - 5.11133212141182e-40, - 5.117552605341351e-40, - 5.123776895213573e-40, - 5.1300047663129046e-40, - 5.136235993923765e-40, - 5.142470356788646e-40, - 5.148707800161312e-40, - 5.1549485088655584e-40, - 5.161192627819245e-40, - 5.167440278664873e-40, - 5.173691583051401e-40, - 5.179946662615279e-40, - 5.186205638985964e-40, - 5.192468632819859e-40, - 5.198735724895226e-40, - 5.205006935235649e-40, - 5.211282277656053e-40, - 5.217561739976055e-40, - 5.223845098585433e-40, - 5.230132142496996e-40, - 5.236422772854364e-40, - 5.24271692705622e-40, - 5.24901455889012e-40, - 5.2553156216150486e-40, - 5.261620068497935e-40, - 5.267927852810901e-40, - 5.274238927826155e-40, - 5.280553244784244e-40, - 5.286870740849436e-40, - 5.293191392822981e-40, - 5.299515355168453e-40, - 5.305842721412113e-40, - 5.312173546760988e-40, - 5.3185078864144815e-40, - 5.324845793834004e-40, - 5.331187339725522e-40, - 5.3375326236809545e-40, - 5.343881746705671e-40, - 5.35023480979914e-40, - 5.356591913960441e-40, - 5.362953160180928e-40, - 5.369318602504989e-40, - 5.375688092961835e-40, - 5.382061404193336e-40, - 5.388438307361463e-40, - 5.3948185736281926e-40, - 5.401201974155501e-40, - 5.40758828010536e-40, - 5.413977256864166e-40, - 5.420368707433634e-40, - 5.426762504824156e-40, - 5.4331585254002125e-40, - 5.439556645527287e-40, - 5.4459567902172405e-40, - 5.452359050074067e-40, - 5.4587635054754784e-40, - 5.465170269952747e-40, - 5.471579434018723e-40, - 5.47799108467745e-40, - 5.484405308932968e-40, - 5.49082219378932e-40, - 5.497241826250546e-40, - 5.503664285462519e-40, - 5.510089577573863e-40, - 5.516517689623738e-40, - 5.5229485836908996e-40, - 5.529381966884846e-40, - 5.535817379556409e-40, - 5.542254355520967e-40, - 5.548692431165539e-40, - 5.5551311994094474e-40, - 5.561570287894277e-40, - 5.5680093204716245e-40, - 5.5744479209930875e-40, - 5.580885713310261e-40, - 5.5873223212747375e-40, - 5.59375736859068e-40, - 5.600190461544145e-40, - 5.606621389781664e-40, - 5.613050311084643e-40, - 5.6194774301447695e-40, - 5.625902951653728e-40, - 5.632327080303196e-40, - 5.638750020784865e-40, - 5.645171975076646e-40, - 5.651593105424993e-40, - 5.658013543177313e-40, - 5.664433418839815e-40, - 5.670852862918711e-40, - 5.6772720048331656e-40, - 5.68369088385017e-40, - 5.690109136326678e-40, - 5.696526196615969e-40, - 5.702941488371505e-40, - 5.709354434513489e-40, - 5.715764457962117e-40, - 5.722170981637587e-40, - 5.7285734284601015e-40, - 5.7349712213480005e-40, - 5.7413637851981095e-40, - 5.747750567962805e-40, - 5.7541310293667e-40, - 5.760504646151723e-40, - 5.766871106795723e-40, - 5.773230458688217e-40, - 5.779582820951332e-40, - 5.7859283138524096e-40, - 5.792267046723853e-40, - 5.798599091518757e-40, - 5.804924515698001e-40, - 5.811243386722467e-40, - 5.817555772053033e-40, - 5.823861739150577e-40, - 5.830161355467919e-40, - 5.8364546775233634e-40, - 5.842741750061432e-40, - 5.849022640728892e-40, - 5.8552974083401195e-40, - 5.861566097727017e-40, - 5.867828753721482e-40, - 5.8740854211557215e-40, - 5.880336146625015e-40, - 5.886581020881931e-40, - 5.89282018274543e-40, - 5.899053773710236e-40, - 5.905281935271076e-40, - 5.911504808922671e-40, - 5.917722535913754e-40, - 5.923935212598128e-40, - 5.930142871635281e-40, - 5.9363454787967855e-40, - 5.942542956885646e-40, - 5.9487352281739546e-40, - 5.954922214933805e-40, - 5.961103839437285e-40, - 5.967280023957617e-40, - 5.9734506907715425e-40, - 5.979615757788987e-40, - 5.985775142841169e-40, - 5.991928769287916e-40, - 5.998076560824062e-40, - 6.004218550310111e-40, - 6.010354963445237e-40, - 6.016486177790568e-40, - 6.022612739307017e-40, - 6.028735271826855e-40, - 6.034854563404636e-40, - 6.040971428832616e-40, - 6.04708668290306e-40, - 6.053201140408219e-40, - 6.059315616133823e-40, - 6.065430924815212e-40, - 6.071547874495304e-40, - 6.077667007319398e-40 - ], - "nc": [ - 4.413894044427327e-46, - 1.2486465692733059e-43, - 4.2308593132413064e-43, - 7.141434463301008e-43, - 9.880872102183889e-43, - 1.2791163305136644e-42, - 1.570648199036731e-42, - 1.862763931372389e-42, - 2.147391265643876e-42, - 2.4371628207401128e-42, - 2.7227938223346514e-42, - 3.0201965427704944e-42, - 3.324066071691264e-42, - 3.6182431911919616e-42, - 3.9134753788410056e-42, - 4.2035080328097286e-42, - 4.485042723553038e-42, - 4.757409756782508e-42, - 5.030180372420638e-42, - 5.289081110788724e-42, - 5.544031331576742e-42, - 5.810789146178375e-42, - 6.058812510834229e-42, - 6.303868960545698e-42, - 6.544151761291159e-42, - 6.784103291047836e-42, - 7.024689408284637e-42, - 7.273503766509774e-42, - 7.513928942193403e-42, - 7.741199759625556e-42, - 7.966608178291135e-42, - 8.186186444779079e-42, - 8.415974083956625e-42, - 8.652495830069492e-42, - 8.888843524599616e-42, - 9.116111336772816e-42, - 9.335112307883922e-42, - 9.555962035265413e-42, - 9.783857832487834e-42, - 1.002311483761954e-41, - 1.0256162070436244e-41, - 1.0489682515693482e-41, - 1.0709087008676986e-41, - 1.0922803799348977e-41, - 1.112863623447581e-41, - 1.132459289401421e-41, - 1.1531123883727056e-41, - 1.1750900341078245e-41, - 1.1982624804697793e-41, - 1.222191791908875e-41, - 1.245694437823062e-41, - 1.268816161615682e-41, - 1.2906448791444441e-41, - 1.3115966680416578e-41, - 1.3315839936797876e-41, - 1.3505758852275527e-41, - 1.3701909970415396e-41, - 1.390559209426481e-41, - 1.4121906465760257e-41, - 1.4355763087987983e-41, - 1.4592214525737695e-41, - 1.4829416801048262e-41, - 1.505803424354525e-41, - 1.527281419095257e-41, - 1.5472039032375093e-41, - 1.5669182514619154e-41, - 1.5868934973859953e-41, - 1.6072439709941734e-41, - 1.628544551657567e-41, - 1.6502924177880607e-41, - 1.6724816540980115e-41, - 1.6944788898339238e-41, - 1.7156534919276352e-41, - 1.7358108972249033e-41, - 1.7556477731586405e-41, - 1.775073367332767e-41, - 1.7948513575687266e-41, - 1.8155910035000921e-41, - 1.8374332715220284e-41, - 1.8603623496745718e-41, - 1.8841329321285804e-41, - 1.90816608054691e-41, - 1.931964838418901e-41, - 1.9558272716873164e-41, - 1.9784024417847207e-41, - 1.9996888248490511e-41, - 2.020371568215012e-41, - 2.0402501252090513e-41, - 2.0595458066996605e-41, - 2.0781943880046546e-41, - 2.0968429281011204e-41, - 2.1160960801229216e-41, - 2.1355171928438985e-41, - 2.155194146964552e-41, - 2.175253370742391e-41, - 2.195698868170902e-41, - 2.2164902954587535e-41, - 2.2376133651247543e-41, - 2.2591231499437971e-41, - 2.2811261986139513e-41, - 2.303473544097885e-41, - 2.3258783107286387e-41, - 2.3480673327542754e-41, - 2.3695787118711444e-41, - 2.3903272117189847e-41, - 2.4104403837086457e-41, - 2.4299432921892494e-41, - 2.4490193893328055e-41, - 2.468041170872607e-41, - 2.487341461491222e-41, - 2.50704759405657e-41, - 2.527243969267914e-41, - 2.548193482825418e-41, - 2.570017312064547e-41, - 2.592594527531119e-41, - 2.6156654813006953e-41, - 2.6389442419283987e-41, - 2.662414124325181e-41, - 2.686091865639755e-41, - 2.709717378606322e-41, - 2.7329119574723146e-41, - 2.755551565578864e-41, - 2.777725873009744e-41, - 2.7993127461039575e-41, - 2.8203396303277385e-41, - 2.841060578345645e-41, - 2.8615047494565594e-41, - 2.8816350987422455e-41, - 2.901651755436084e-41, - 2.9217489687672615e-41, - 2.94188968258413e-41, - 2.96186791420618e-41, - 2.981505472646765e-41, - 3.0009937166397063e-41, - 3.0207327401147694e-41, - 3.040815683193576e-41, - 3.061094851544922e-41, - 3.081451904998269e-41, - 3.1018648751672464e-41, - 3.1224994776595076e-41, - 3.1435635535630355e-41, - 3.164992907288077e-41, - 3.186569775822948e-41, - 3.208200121484905e-41, - 3.2298882700074555e-41, - 3.2516085283096503e-41, - 3.2732898743577544e-41, - 3.2948313672523514e-41, - 3.3162029074044336e-41, - 3.3375146097292973e-41, - 3.358876393357682e-41, - 3.380255921490168e-41, - 3.4014527446433907e-41, - 3.422281490439122e-41, - 3.442760367884388e-41, - 3.463049378592786e-41, - 3.4833012902519594e-41, - 3.5035343334176867e-41, - 3.523668054420025e-41, - 3.543709123829029e-41, - 3.563765130745236e-41, - 3.583916368371609e-41, - 3.604170920626557e-41, - 3.6245262557423586e-41, - 3.644992775659105e-41, - 3.6655457974675463e-41, - 3.6861336151619256e-41, - 3.7067276183801477e-41, - 3.72732595679893e-41, - 3.747938139210813e-41, - 3.7685824282615907e-41, - 3.7892522905122965e-41, - 3.809900338848851e-41, - 3.8304315669968734e-41, - 3.8507972661736945e-41, - 3.871081661456077e-41, - 3.8913706498830924e-41, - 3.9116584685655055e-41, - 3.9319091085938065e-41, - 3.952168315510585e-41, - 3.972531398929953e-41, - 3.9930160023756383e-41, - 4.0136480276708844e-41, - 4.0345025705684714e-41, - 4.0556859730926985e-41, - 4.0771929672810985e-41, - 4.098933326189228e-41, - 4.120812202048905e-41, - 4.142819252684985e-41, - 4.1650487229021965e-41, - 4.1875941724427294e-41, - 4.210444441469377e-41, - 4.2334384184870085e-41, - 4.2563969120092164e-41, - 4.2792089452905945e-41, - 4.3018931514690424e-41, - 4.32448302548301e-41, - 4.346962485713069e-41, - 4.369230092441599e-41, - 4.3911941355039914e-41, - 4.4128279813251183e-41, - 4.4341839519823775e-41, - 4.4553239430032877e-41, - 4.4762607720659445e-41, - 4.49696698091213e-41, - 4.517442910865842e-41, - 4.5377205480144477e-41, - 4.5578483096686215e-41, - 4.5778724927076073e-41, - 4.59782235086115e-41, - 4.617712563987144e-41, - 4.6375516109418e-41, - 4.657374917106181e-41, - 4.677259728680439e-41, - 4.69729435773838e-41, - 4.717554851799885e-41, - 4.738071606856728e-41, - 4.758845647685767e-41, - 4.779850128608195e-41, - 4.801033463467052e-41, - 4.822318619977273e-41, - 4.843634471181518e-41, - 4.864964385652583e-41, - 4.88632355981567e-41, - 4.907736244549164e-41, - 4.929200835307233e-41, - 4.950698595455797e-41, - 4.972198784871945e-41, - 4.993677970853727e-41, - 5.015119138307908e-41, - 5.036494770191932e-41, - 5.057773229069182e-41, - 5.0788976250686e-41, - 5.099837384850839e-41, - 5.120579240525623e-41, - 5.141133372311416e-41, - 5.161531551127926e-41, - 5.181803629637202e-41, - 5.201974777486266e-41, - 5.222052466466092e-41, - 5.242043471822269e-41, - 5.261969207860705e-41, - 5.281862883714861e-41, - 5.301777140810054e-41, - 5.321754257299076e-41, - 5.341824103545665e-41, - 5.361983120062248e-41, - 5.382216156973634e-41, - 5.402510643038088e-41, - 5.422887207290533e-41, - 5.443403141485583e-41, - 5.464114262931696e-41, - 5.485069523885685e-41, - 5.506240130724814e-41, - 5.527549375543916e-41, - 5.548902937087503e-41, - 5.57022951604787e-41, - 5.591562253160617e-41, - 5.612968223239951e-41, - 5.634524382811765e-41, - 5.656273451271229e-41, - 5.678171273151812e-41, - 5.700139276034442e-41, - 5.722091353696847e-41, - 5.74397355704866e-41, - 5.765800376172016e-41, - 5.787618797700426e-41, - 5.809479091453471e-41, - 5.831391699290271e-41, - 5.853299301885677e-41, - 5.875122226085735e-41, - 5.896781161012682e-41, - 5.918244581508882e-41, - 5.939554815372319e-41, - 5.960777436119487e-41, - 5.98197817775568e-41, - 6.003184190189804e-41, - 6.024365732372645e-41, - 6.045481274858725e-41, - 6.066489765427895e-41, - 6.087376227598374e-41, - 6.10817230463572e-41, - 6.128919614523988e-41, - 6.149659744432231e-41, - 6.170427335024716e-41, - 6.191232268886321e-41, - 6.212076345443388e-41, - 6.232961780345477e-41, - 6.253880937164195e-41, - 6.274807563735009e-41, - 6.295710912332802e-41, - 6.316556945601686e-41, - 6.337320243665597e-41, - 6.358019830117075e-41, - 6.378694358520261e-41, - 6.399389820172807e-41, - 6.420150296900835e-41, - 6.440986897023023e-41, - 6.461879770680043e-41, - 6.482795972315897e-41, - 6.503701237482884e-41, - 6.524570518508075e-41, - 6.545399101185418e-41, - 6.566192423345365e-41, - 6.586958590151704e-41, - 6.607704921999796e-41, - 6.628433342342057e-41, - 6.649145755078087e-41, - 6.669845552541277e-41, - 6.690536186122624e-41, - 6.71122215023695e-41, - 6.731910299125468e-41, - 6.752601724189724e-41, - 6.773295870387185e-41, - 6.793992319878099e-41, - 6.814690417317284e-41, - 6.835393177624807e-41, - 6.856110077660428e-41, - 6.876850913749203e-41, - 6.89762430183005e-41, - 6.91843344766894e-41, - 6.939268953094225e-41, - 6.960116855069889e-41, - 6.98096325885434e-41, - 7.001799604248575e-41, - 7.022632072952298e-41, - 7.043479626333537e-41, - 7.064362835194694e-41, - 7.085301660788338e-41, - 7.106301205116043e-41, - 7.127343485129687e-41, - 7.148402019125591e-41, - 7.169449899930583e-41, - 7.190461507607927e-41, - 7.211428738304358e-41, - 7.232359531475138e-41, - 7.253264092318145e-41, - 7.274152665433381e-41, - 7.295035572130709e-41, - 7.315921147268983e-41, - 7.336818755189992e-41, - 7.357739903971376e-41, - 7.378696123397169e-41, - 7.399696631065893e-41, - 7.42073555158016e-41, - 7.441800209106987e-41, - 7.462877130872167e-41, - 7.483952838244109e-41, - 7.505015924782901e-41, - 7.526072615441053e-41, - 7.547136082191867e-41, - 7.568218728151557e-41, - 7.58933294917287e-41, - 7.610490504803679e-41, - 7.63169513038394e-41, - 7.652949659718416e-41, - 7.674260092176311e-41, - 7.695632491713974e-41, - 7.717072990762243e-41, - 7.73859052852436e-41, - 7.760192580140338e-41, - 7.781880723428346e-41, - 7.803656192817135e-41, - 7.825520222630771e-41, - 7.847471390372374e-41, - 7.869499142785245e-41, - 7.891591175685699e-41, - 7.913735220880369e-41, - 7.93591901017589e-41, - 7.958130635165852e-41, - 7.980362682059799e-41, - 8.002610589458165e-41, - 8.024869768796529e-41, - 8.047135631459058e-41, - 8.069403616660906e-41, - 8.091668556256526e-41, - 8.113922304572459e-41, - 8.136156317576382e-41, - 8.158362064253428e-41, - 8.180531009900606e-41, - 8.202654571238801e-41, - 8.224728448485882e-41, - 8.246752081036729e-41, - 8.268724807943703e-41, - 8.290645968224869e-41, - 8.312514933895603e-41, - 8.334331361324589e-41, - 8.356091644070785e-41, - 8.377792883938552e-41, - 8.399432377282028e-41, - 8.42100742045537e-41, - 8.442515315250687e-41, - 8.463955624411887e-41, - 8.485332480670539e-41, - 8.506650821370289e-41, - 8.527915587788121e-41, - 8.549131721155695e-41, - 8.570303901660174e-41, - 8.591435203492386e-41, - 8.6125287127249e-41, - 8.633587734716033e-41, - 8.654615575184646e-41, - 8.675615543392073e-41, - 8.69659165629967e-41, - 8.717549544911745e-41, - 8.738494767283232e-41, - 8.759432880848933e-41, - 8.780369443043657e-41, - 8.801310007422254e-41, - 8.822258552541787e-41, - 8.843216432843156e-41, - 8.864185129190781e-41, - 8.885166092779263e-41, - 8.9061607748032e-41, - 8.927170631569719e-41, - 8.948198647036249e-41, - 8.969247321905999e-41, - 8.990314348126865e-41, - 9.011396982401524e-41, - 9.032492483674345e-41, - 9.053598110431486e-41, - 9.074709987863071e-41, - 9.095826721372566e-41, - 9.116954146090461e-41, - 9.138098707173837e-41, - 9.159266849777322e-41, - 9.180465018012454e-41, - 9.201699681532165e-41, - 9.222970549404903e-41, - 9.244264249670507e-41, - 9.265565865663484e-41, - 9.286860480718266e-41, - 9.308133178169288e-41, - 9.329369192754437e-41, - 9.350558619642369e-41, - 9.37170606393433e-41, - 9.39281996162326e-41, - 9.413908755898083e-41, - 9.434980889947706e-41, - 9.456044801339712e-41, - 9.47710825248773e-41, - 9.498173690380167e-41, - 9.51923938539725e-41, - 9.540303451452615e-41, - 9.561364000810677e-41, - 9.582419145254472e-41, - 9.603466940849565e-41, - 9.624505120223966e-41, - 9.645531677004068e-41, - 9.666544786357023e-41, - 9.687542623528479e-41, - 9.708523363764217e-41, - 9.729485188610445e-41, - 9.750426776387508e-41, - 9.771351023674222e-41, - 9.792265093590537e-41, - 9.813176388384729e-41, - 9.834092310305086e-41, - 9.855020261599877e-41, - 9.875967743475101e-41, - 9.896942283580737e-41, - 9.91794320564996e-41, - 9.938965314610282e-41, - 9.960003378405454e-41, - 9.981052164979214e-41, - 1.0002106442275305e-40, - 1.0023160309788839e-40, - 1.004420705399628e-40, - 1.0065248959251156e-40, - 1.0086291057133606e-40, - 1.0107338379538026e-40, - 1.01283959595081e-40, - 1.0149468832026114e-40, - 1.0170562888480685e-40, - 1.019168367849935e-40, - 1.0212828355930373e-40, - 1.023399224550638e-40, - 1.0255170671959971e-40, - 1.0276358960023768e-40, - 1.0297552432212306e-40, - 1.0318745950224658e-40, - 1.0339935033915219e-40, - 1.0361121625266615e-40, - 1.0382309196866694e-40, - 1.0403501221303317e-40, - 1.0424701171164321e-40, - 1.044591251817845e-40, - 1.0467138450908756e-40, - 1.0488381180804733e-40, - 1.05096397372582e-40, - 1.0530911983258172e-40, - 1.0552195782099547e-40, - 1.0573488997079291e-40, - 1.0594789491509888e-40, - 1.061609556172856e-40, - 1.0637406983564074e-40, - 1.0658724136889071e-40, - 1.0680047740742556e-40, - 1.070137851930173e-40, - 1.0722717196503564e-40, - 1.0744064495403179e-40, - 1.0765420956800538e-40, - 1.0786785512049989e-40, - 1.0808155066037045e-40, - 1.0829526092461377e-40, - 1.0850895078240278e-40, - 1.0872258510291047e-40, - 1.0893612875530982e-40, - 1.0914954689349575e-40, - 1.0936281426717153e-40, - 1.0957594308848778e-40, - 1.0978897514941455e-40, - 1.1000195355409322e-40, - 1.1021492140666183e-40, - 1.104279218112588e-40, - 1.1064099787202234e-40, - 1.1085419219715215e-40, - 1.1106753447163e-40, - 1.1128100906356252e-40, - 1.1149458622678236e-40, - 1.117082359655643e-40, - 1.1192192828640185e-40, - 1.1213563319579204e-40, - 1.1234932054408777e-40, - 1.1256295596624113e-40, - 1.1277652742610119e-40, - 1.1299007361731227e-40, - 1.1320364541586595e-40, - 1.1341729376720774e-40, - 1.1363106961654463e-40, - 1.1384502390293195e-40, - 1.1405920884313018e-40, - 1.1427368246121876e-40, - 1.1448845503364002e-40, - 1.1470347137862933e-40, - 1.1491866520222217e-40, - 1.1513397021045429e-40, - 1.1534932010936105e-40, - 1.155646486049781e-40, - 1.1577988784552702e-40, - 1.1599497466786765e-40, - 1.1620990829160821e-40, - 1.1642474428700983e-40, - 1.1663954567781407e-40, - 1.1685437548776254e-40, - 1.1706929674059675e-40, - 1.1728437245976731e-40, - 1.174996641918466e-40, - 1.1771521333579462e-40, - 1.1793100330999547e-40, - 1.1814698638819774e-40, - 1.1836311129453571e-40, - 1.1857932675578014e-40, - 1.1879558149922712e-40, - 1.1901182425209306e-40, - 1.1922800296451351e-40, - 1.194440718867781e-40, - 1.1966001857979329e-40, - 1.1987585171006927e-40, - 1.200915835323837e-40, - 1.2030722630151437e-40, - 1.205227922722386e-40, - 1.2073829369646248e-40, - 1.2095374617339282e-40, - 1.2116918203349513e-40, - 1.213846326836603e-40, - 1.2160009945629502e-40, - 1.218155697855493e-40, - 1.2203103102049444e-40, - 1.2224647051020181e-40, - 1.2246187560374272e-40, - 1.2267723209742779e-40, - 1.228925059780519e-40, - 1.2310764051568749e-40, - 1.2332259604084765e-40, - 1.2353736247821011e-40, - 1.2375193154194379e-40, - 1.2396629494621733e-40, - 1.2418044440519946e-40, - 1.243943717353295e-40, - 1.2460807805790179e-40, - 1.2482158588504698e-40, - 1.2503492169646016e-40, - 1.2524808228910769e-40, - 1.2546105540704448e-40, - 1.256738287870898e-40, - 1.2588639015681373e-40, - 1.2609872724296886e-40, - 1.2631082652037016e-40, - 1.265226653824236e-40, - 1.2673422315305052e-40, - 1.2694549220797396e-40, - 1.2715648054811107e-40, - 1.2736719752715463e-40, - 1.2757765249879736e-40, - 1.277878548167319e-40, - 1.2799781384862762e-40, - 1.2820754432314876e-40, - 1.284170717088179e-40, - 1.2862641670476208e-40, - 1.2883560377115e-40, - 1.2904466115622354e-40, - 1.2925361720618593e-40, - 1.2946250026724047e-40, - 1.296713386855904e-40, - 1.2988016058289884e-40, - 1.3008898570289646e-40, - 1.3029782745916489e-40, - 1.3050670118320753e-40, - 1.307155919933383e-40, - 1.309244686727634e-40, - 1.3113329985176864e-40, - 1.3134205416064007e-40, - 1.3155070022966365e-40, - 1.3175920715928965e-40, - 1.3196755327962787e-40, - 1.321757235429552e-40, - 1.3238370607609624e-40, - 1.3259153215203907e-40, - 1.3279925621966533e-40, - 1.330069329488145e-40, - 1.3321461701273535e-40, - 1.3342236308792893e-40, - 1.3363022568047067e-40, - 1.3383825584502264e-40, - 1.340465038461802e-40, - 1.342550201346188e-40, - 1.3446382324535364e-40, - 1.3467290791501297e-40, - 1.3488226831550494e-40, - 1.350918986187377e-40, - 1.3530179299661946e-40, - 1.3551194556205497e-40, - 1.3572234766549822e-40, - 1.3593297929971133e-40, - 1.3614380912686078e-40, - 1.3635481397679684e-40, - 1.365659843849397e-40, - 1.3677731202998319e-40, - 1.3698878859062114e-40, - 1.372004057455473e-40, - 1.3741215517366367e-40, - 1.3762402878371742e-40, - 1.3783602350342728e-40, - 1.3804814977954831e-40, - 1.3826042037407395e-40, - 1.3847284684457012e-40, - 1.3868544039068603e-40, - 1.3889821221217004e-40, - 1.3911117350877043e-40, - 1.3932433548023557e-40, - 1.3953770913491998e-40, - 1.3975130230165704e-40, - 1.3996510796267233e-40, - 1.4017911018790728e-40, - 1.4039328928880603e-40, - 1.4060762087037046e-40, - 1.4082208022160305e-40, - 1.410366426313739e-40, - 1.4125128338554057e-40, - 1.4146597776811825e-40, - 1.4168070163416388e-40, - 1.4189543499948578e-40, - 1.4211016572330317e-40, - 1.423248844466838e-40, - 1.4253959580539341e-40, - 1.4275431230838676e-40, - 1.4296904655248298e-40, - 1.4318381113450144e-40, - 1.4339861865126139e-40, - 1.4361348160132863e-40, - 1.438284095135687e-40, - 1.440434045258214e-40, - 1.4425846351367641e-40, - 1.4447358149712197e-40, - 1.4468874503599247e-40, - 1.4490393781275606e-40, - 1.4511914350749257e-40, - 1.4533434580028167e-40, - 1.4554952837120337e-40, - 1.457646753567691e-40, - 1.4597977766557e-40, - 1.4619483853114072e-40, - 1.4640986738468704e-40, - 1.4662487079697292e-40, - 1.4683984019798653e-40, - 1.4705476228807331e-40, - 1.4726962376576692e-40, - 1.4748441132960062e-40, - 1.4769911167810788e-40, - 1.4791371128600487e-40, - 1.4812819345645394e-40, - 1.4834253506352577e-40, - 1.4855670961973266e-40, - 1.487706937250004e-40, - 1.489844870496788e-40, - 1.4919809947459323e-40, - 1.4941154092601533e-40, - 1.4962482133021632e-40, - 1.4983795061326442e-40, - 1.5005093868563759e-40, - 1.5026379531108711e-40, - 1.5047653401910213e-40, - 1.5068917248859953e-40, - 1.509017279680016e-40, - 1.5111420601467017e-40, - 1.5132660175638966e-40, - 1.5153890995519163e-40, - 1.517511253731073e-40, - 1.51963242772168e-40, - 1.5217525694383629e-40, - 1.5238716624858878e-40, - 1.5259897387180983e-40, - 1.5281067928374882e-40, - 1.5302228138574837e-40, - 1.5323378166332105e-40, - 1.5344518878017121e-40, - 1.5365651263631033e-40, - 1.5386776313175012e-40, - 1.5407895016650208e-40, - 1.5429008364057788e-40, - 1.5450117211589246e-40, - 1.547122156744e-40, - 1.5492321660237672e-40, - 1.5513417993607396e-40, - 1.5534511048738427e-40, - 1.5555600856314723e-40, - 1.557668704400284e-40, - 1.5597769225329069e-40, - 1.5618847013843715e-40, - 1.5639920023097106e-40, - 1.5660987868700665e-40, - 1.568205041800306e-40, - 1.5703107726731929e-40, - 1.5724159260085614e-40, - 1.574520440091685e-40, - 1.576624262752077e-40, - 1.5787274096297868e-40, - 1.5808299257223863e-40, - 1.582931856145133e-40, - 1.585033246013281e-40, - 1.587134140442019e-40, - 1.5892345838899991e-40, - 1.5913346079652484e-40, - 1.5934342546230654e-40, - 1.595533589511823e-40, - 1.5976326793884604e-40, - 1.599731574251175e-40, - 1.6018302393567192e-40, - 1.6039286132393564e-40, - 1.6060266344232626e-40, - 1.6081242414326152e-40, - 1.610221372791591e-40, - 1.6123179686081197e-40, - 1.6144139908309046e-40, - 1.6165094251862957e-40, - 1.618604264342921e-40, - 1.6206985011388528e-40, - 1.62279214870607e-40, - 1.6248853397623423e-40, - 1.626978250675629e-40, - 1.6290710578779135e-40, - 1.6311639378011796e-40, - 1.63325706687741e-40, - 1.6353506201335117e-40, - 1.6374447501401963e-40, - 1.6395396006292176e-40, - 1.6416353235246926e-40, - 1.6437320710495123e-40, - 1.6458299835973245e-40, - 1.647929056571304e-40, - 1.6500291881560337e-40, - 1.6521302747524565e-40, - 1.6542322127764006e-40, - 1.656334898644881e-40, - 1.6584382292862916e-40, - 1.6605421253475875e-40, - 1.6626465113652664e-40, - 1.6647512680423403e-40, - 1.6668562721666077e-40, - 1.668961401527203e-40, - 1.6710666319111475e-40, - 1.6731721180943379e-40, - 1.6752780339186842e-40, - 1.6773845532260955e-40, - 1.6794918498584822e-40, - 1.6816000976577544e-40, - 1.6837094627517338e-40, - 1.685820099575817e-40, - 1.687932243347647e-40, - 1.690046153717647e-40, - 1.692162090336903e-40, - 1.694280286820958e-40, - 1.6964007284336182e-40, - 1.6985232627211205e-40, - 1.7006477357625136e-40, - 1.7027739936368429e-40, - 1.7049018824231546e-40, - 1.7070312480480574e-40, - 1.709161930621776e-40, - 1.7112937202005604e-40, - 1.7134263511623326e-40, - 1.715559554461153e-40, - 1.7176930610890403e-40, - 1.7198267026530767e-40, - 1.7219607087335271e-40, - 1.7240954073842594e-40, - 1.7262311266591384e-40, - 1.7283681946120304e-40, - 1.730506939296802e-40, - 1.7326476903964748e-40, - 1.7347907900548017e-40, - 1.7369365658012343e-40, - 1.7390853323635866e-40, - 1.7412374043164406e-40, - 1.743393096097663e-40, - 1.7455525955123317e-40, - 1.7477157292947554e-40, - 1.7498822602475291e-40, - 1.7520519511443694e-40, - 1.7542245646643874e-40, - 1.756399863467354e-40, - 1.758577604253666e-40, - 1.7607575127136897e-40, - 1.7629393442675277e-40, - 1.7651228725419007e-40, - 1.7673078712195746e-40, - 1.7694941139878234e-40, - 1.7716814309124644e-40, - 1.773869849150176e-40, - 1.7760594389005982e-40, - 1.77825027036337e-40, - 1.7804424137381313e-40, - 1.7826359392245214e-40, - 1.784830922416617e-40, - 1.7870274720441014e-40, - 1.7892256512881767e-40, - 1.7914254921626115e-40, - 1.7936270264749183e-40, - 1.7958302860326105e-40, - 1.79803529145664e-40, - 1.8002419768856943e-40, - 1.8024502361555451e-40, - 1.8046599628763859e-40, - 1.8068710506584116e-40, - 1.8090833931118163e-40, - 1.811296881775091e-40, - 1.813511373739765e-40, - 1.8157267569374408e-40, - 1.8179429753507164e-40, - 1.8201599749789266e-40, - 1.8223777018214071e-40, - 1.824596102561627e-40, - 1.8268151592825938e-40, - 1.8290349056253662e-40, - 1.8312553792937915e-40, - 1.833476617991714e-40, - 1.8356986594229792e-40, - 1.8379215413118603e-40, - 1.8401453117235956e-40, - 1.842370017276794e-40, - 1.8445956294732644e-40, - 1.8468221061437517e-40, - 1.849049405119003e-40, - 1.8512774842297633e-40, - 1.8535062971403416e-40, - 1.855735761082318e-40, - 1.8579657744563e-40, - 1.8601962355051038e-40, - 1.8624270425117674e-40, - 1.8646580939891436e-40, - 1.86688928867665e-40, - 1.869120529545616e-40, - 1.8713517513685887e-40, - 1.873582915797628e-40, - 1.8758139854667626e-40, - 1.8780449230100243e-40, - 1.8802756910614432e-40, - 1.882506260049965e-40, - 1.8847366377311346e-40, - 1.8869668430202774e-40, - 1.8891968948347354e-40, - 1.8914268120918477e-40, - 1.893656613708955e-40, - 1.8958863164594483e-40, - 1.8981159174910336e-40, - 1.900345393434808e-40, - 1.9025747145780836e-40, - 1.904803850526461e-40, - 1.907032770854824e-40, - 1.9092614451380544e-40, - 1.9114898358365155e-40, - 1.9137178725231424e-40, - 1.9159454752745694e-40, - 1.9181725641665078e-40, - 1.9203990592746707e-40, - 1.9226248806747705e-40, - 1.9248499484870104e-40, - 1.927074184058451e-40, - 1.9292975156827285e-40, - 1.93151987479776e-40, - 1.933741192858592e-40, - 1.935961401320271e-40, - 1.938180431637843e-40, - 1.940398215013021e-40, - 1.9426146808959533e-40, - 1.9448297580307896e-40, - 1.947043375161915e-40, - 1.949255461033712e-40, - 1.9514659443905677e-40, - 1.95367475524585e-40, - 1.955881839457152e-40, - 1.958087140233612e-40, - 1.960290590573525e-40, - 1.9624921232515075e-40, - 1.9646916710421762e-40, - 1.9668891667201484e-40, - 1.9690845434947537e-40, - 1.9712777529862126e-40, - 1.9734687716442366e-40, - 1.9756575776730765e-40, - 1.9778441492769813e-40, - 1.9800284639808078e-40, - 1.9822104898403777e-40, - 1.984390181322902e-40, - 1.98656749394502e-40, - 1.988742406442522e-40, - 1.9909149000825523e-40, - 1.9930849561322565e-40, - 1.9952525558587816e-40, - 1.9974176805292694e-40, - 1.9995803091815805e-40, - 2.0017404047950123e-40, - 2.003897923311478e-40, - 2.0060528206429825e-40, - 2.0082050527015315e-40, - 2.010354575399128e-40, - 2.0125013483215206e-40, - 2.0146453689107643e-40, - 2.0167866804571484e-40, - 2.0189253407098513e-40, - 2.0210614160872043e-40, - 2.0231949951503096e-40, - 2.025326170005521e-40, - 2.027455032759247e-40, - 2.029581677744549e-40, - 2.0317062074249647e-40, - 2.033828726119258e-40, - 2.035949338146192e-40, - 2.0380681478245302e-40, - 2.0401852594730374e-40, - 2.0423007728446033e-40, - 2.0444147691300375e-40, - 2.0465273287074002e-40, - 2.048638533115873e-40, - 2.0507484638946427e-40, - 2.0528572025828943e-40, - 2.054964830719813e-40, - 2.057071429844485e-40, - 2.059177080560147e-40, - 2.0612818489709395e-40, - 2.063385780739059e-40, - 2.065488919626176e-40, - 2.067591309393963e-40, - 2.0696929938042003e-40, - 2.071794021757784e-40, - 2.07389445223142e-40, - 2.0759943172377305e-40, - 2.0780936418365906e-40, - 2.080192451087877e-40, - 2.082290770051465e-40, - 2.0843886237872325e-40, - 2.0864860373550553e-40, - 2.0885830296881352e-40, - 2.0906795829109057e-40, - 2.092775665465389e-40, - 2.0948712457707895e-40, - 2.0969662922463107e-40, - 2.0990607733131574e-40, - 2.1011546557404405e-40, - 2.103247902081703e-40, - 2.1053405510237564e-40, - 2.1074326705625506e-40, - 2.1095243287212422e-40, - 2.1116155935229867e-40, - 2.1137065329909407e-40, - 2.1157972151482585e-40, - 2.1178877099673017e-40, - 2.119978142288094e-40, - 2.122068698051046e-40, - 2.1241595663968397e-40, - 2.1262509364661596e-40, - 2.1283429973996875e-40, - 2.1304359400846163e-40, - 2.1325299884598105e-40, - 2.1346252809113105e-40, - 2.136721843832174e-40, - 2.138819699448264e-40, - 2.1409188699417665e-40, - 2.1430193764346124e-40 - ] - }, - "nutau": { - "cc": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.2969484639691336e-50, - 4.702437376030892e-50, - 5.559321935259543e-50, - 1.717244830334942e-49, - 2.274025586853926e-49, - 2.5202532267884214e-49, - 1.1187205401855181e-48, - 2.0128964912141887e-48, - 2.294177252586927e-48, - 2.5059738987101453e-48, - 4.765501149981677e-48, - 6.654636460811846e-48, - 7.241091490606929e-48, - 4.9998862407689924e-43, - 8.203635634590409e-43, - 1.0481640715193515e-42, - 1.2369366722713443e-42, - 1.408792304570689e-42, - 1.573647733049143e-42, - 1.7413162870956675e-42, - 1.9965238034753258e-42, - 2.3871231666933656e-42, - 2.8787759595165855e-42, - 3.3939303392026276e-42, - 3.859029695328496e-42, - 4.2815486734637274e-42, - 4.6784321487643686e-42, - 5.05722122845259e-42, - 5.427039425251374e-42, - 5.800279356389109e-42, - 6.189426025287012e-42, - 6.604576501609108e-42, - 7.041499495113019e-42, - 7.487333501756492e-42, - 7.941276545561712e-42, - 8.411464966017304e-42, - 8.90262461392086e-42, - 9.415982040972494e-42, - 9.938178324155916e-42, - 1.0443421365662558e-41, - 1.0918998428854986e-41, - 1.1381038000400051e-41, - 1.1850881468368848e-41, - 1.2335025706373536e-41, - 1.2821650425122807e-41, - 1.3295962072734087e-41, - 1.3752062250691926e-41, - 1.4203305834457478e-41, - 1.4666430464754322e-41, - 1.5156220699076244e-41, - 1.5667428140017898e-41, - 1.6187950947375686e-41, - 1.670787151866836e-41, - 1.722096736084612e-41, - 1.7724506086717475e-41, - 1.8216270825020884e-41, - 1.8696239014120237e-41, - 1.9172974655649206e-41, - 1.9657130538757723e-41, - 2.016048239468886e-41, - 2.0683100786785724e-41, - 2.1222931811230923e-41, - 2.1787836002124257e-41, - 2.233755003483607e-41, - 2.288391606638746e-41, - 2.3433885048067763e-41, - 2.3992684879014875e-41, - 2.456519568244179e-41, - 2.5145567096045986e-41, - 2.573822472580825e-41, - 2.631879126846059e-41, - 2.688108318310054e-41, - 2.743084353799015e-41, - 2.7978270942904e-41, - 2.853278759019541e-41, - 2.9102626505666413e-41, - 2.968831741024787e-41, - 3.0283791305246673e-41, - 3.087899150724605e-41, - 3.14776001097641e-41, - 3.2069707363474296e-41, - 3.265284584311246e-41, - 3.3250497829718703e-41, - 3.3848946496795124e-41, - 3.445750207805235e-41, - 3.507454696902153e-41, - 3.5703723251804015e-41, - 3.6330219293743317e-41, - 3.6961168881236185e-41, - 3.7565573582772893e-41, - 3.817122897218982e-41, - 3.8768632295979804e-41, - 3.9361674293575223e-41, - 3.995917110901029e-41, - 4.055911795150629e-41, - 4.117402436461706e-41, - 4.1802735329149744e-41, - 4.244148263142053e-41, - 4.308717221251426e-41, - 4.37522431188e-41, - 4.4425435179519013e-41, - 4.5105036674916693e-41, - 4.5789747842477665e-41, - 4.647745059916113e-41, - 4.717991965372246e-41, - 4.787650964821915e-41, - 4.857179396208926e-41, - 4.926036175136511e-41, - 4.994438520167797e-41, - 5.062325005470948e-41, - 5.129631189558371e-41, - 5.195455902451752e-41, - 5.260980489060173e-41, - 5.327196876903711e-41, - 5.393531083105328e-41, - 5.460336871340249e-41, - 5.529216144102008e-41, - 5.600673103506137e-41, - 5.673640228815407e-41, - 5.748478972687046e-41, - 5.825304247755848e-41, - 5.902546616200577e-41, - 5.979407136227334e-41, - 6.055184731126135e-41, - 6.128973828472804e-41, - 6.201058142078596e-41, - 6.271731039879506e-41, - 6.340440168790405e-41, - 6.408570611060898e-41, - 6.478017468096431e-41, - 6.547640098860007e-41, - 6.618290976257238e-41, - 6.690817418981642e-41, - 6.764054865070766e-41, - 6.8385118921097e-41, - 6.912842304753012e-41, - 6.987289590019574e-41, - 7.061217427566926e-41, - 7.133637337240686e-41, - 7.206139101842983e-41, - 7.277703041071289e-41, - 7.348401776033737e-41, - 7.419859261584605e-41, - 7.493169034078891e-41, - 7.567291336786576e-41, - 7.642709516037117e-41, - 7.720548440415714e-41, - 7.800406995281286e-41, - 7.881863599237429e-41, - 7.964339328328863e-41, - 8.04728557402224e-41, - 8.130358798284667e-41, - 8.212879234244945e-41, - 8.293911061402425e-41, - 8.373389489621972e-41, - 8.451981809021601e-41, - 8.529430242414516e-41, - 8.606064944758676e-41, - 8.68263800565134e-41, - 8.758592716937952e-41, - 8.834125210599106e-41, - 8.909840541731713e-41, - 8.985574836069556e-41, - 9.062062572720645e-41, - 9.139794294618287e-41, - 9.217328745312812e-41, - 9.295119011616465e-41, - 9.374069483740121e-41, - 9.45260043270707e-41, - 9.531078042600528e-41, - 9.610985425186975e-41, - 9.691669218832941e-41, - 9.772596090647815e-41, - 9.853830142777443e-41, - 9.935688410659753e-41, - 1.001844502667814e-40, - 1.0102025853137815e-40, - 1.0185663379777302e-40, - 1.026909176781481e-40, - 1.035323857587117e-40, - 1.0437697679032296e-40, - 1.0521610869098225e-40, - 1.0605021231765032e-40, - 1.0687916670209163e-40, - 1.0770335739702662e-40, - 1.0852363753572894e-40, - 1.0934021971261915e-40, - 1.1015293279345008e-40, - 1.1096206539619919e-40, - 1.117658871427832e-40, - 1.1255933254120141e-40, - 1.1334423374550667e-40, - 1.141331600889379e-40, - 1.1492877017317577e-40, - 1.1572703610217411e-40, - 1.1653248109137446e-40, - 1.1735063644487433e-40, - 1.1818301067399935e-40, - 1.1903138658229712e-40, - 1.1989675928950788e-40, - 1.2077620120965806e-40, - 1.216662381087472e-40, - 1.2257000680206816e-40, - 1.2348765151584133e-40, - 1.2440626883957077e-40, - 1.2532007945526045e-40, - 1.2623628777575313e-40, - 1.2715378356070196e-40, - 1.2806279688435478e-40, - 1.2895812086275982e-40, - 1.2983762942955641e-40, - 1.3070446482146672e-40, - 1.3156565589347876e-40, - 1.3242113945975826e-40, - 1.3326573769960294e-40, - 1.3410270334032475e-40, - 1.3493764052208055e-40, - 1.35768834223595e-40, - 1.3659683382535363e-40, - 1.3742940142016541e-40, - 1.3826908914053297e-40, - 1.391117318341513e-40, - 1.399565828873443e-40, - 1.408082788603099e-40, - 1.416674110055536e-40, - 1.4252850001073003e-40, - 1.4339012605939839e-40, - 1.442548568284123e-40, - 1.4512227344213877e-40, - 1.4599030507331727e-40, - 1.4685774989436263e-40, - 1.4772156811638421e-40, - 1.4858223587247876e-40, - 1.4944580306006022e-40, - 1.5031356664150074e-40, - 1.5118177876389821e-40, - 1.5204862993847361e-40, - 1.529151246777524e-40, - 1.5378395631386513e-40, - 1.5465872654337591e-40, - 1.5554073404420944e-40, - 1.5642753631218579e-40, - 1.5731650000152628e-40, - 1.582071195203218e-40, - 1.5910038467111075e-40, - 1.5999823768662615e-40, - 1.6090247756053677e-40, - 1.6181044959293828e-40, - 1.6271662095907455e-40, - 1.6362041147698454e-40, - 1.6452601455288907e-40, - 1.654339390775943e-40, - 1.6634049071243565e-40, - 1.6724481629021436e-40, - 1.6814940855654508e-40, - 1.6905365300929292e-40, - 1.6995156024630622e-40, - 1.7084032643538355e-40, - 1.7172909982848775e-40, - 1.7262677820496336e-40, - 1.7352785264671111e-40, - 1.7442277704718619e-40, - 1.7531268874706273e-40, - 1.7620516408357975e-40, - 1.7710253167780694e-40, - 1.7800061329875893e-40, - 1.7889708975622696e-40, - 1.7979621654428205e-40, - 1.807021541734608e-40, - 1.8161355007430008e-40, - 1.8252715743498476e-40, - 1.8344181397105322e-40, - 1.843590437055827e-40, - 1.8527944397951615e-40, - 1.8620157496181706e-40, - 1.8712482299545368e-40, - 1.880495881695603e-40, - 1.8897549744222304e-40, - 1.8990045174322065e-40, - 1.9082092117042342e-40, - 1.9173464803538648e-40, - 1.926444090788329e-40, - 1.935542440707698e-40, - 1.944635706235973e-40, - 1.9536753906861324e-40, - 1.962643486613823e-40, - 1.9715921813279374e-40, - 1.9805723480539302e-40, - 1.9895823510507584e-40, - 1.998601837535769e-40, - 2.0076368888754475e-40, - 2.016726840542683e-40, - 2.0259088059210783e-40, - 2.0351877983723417e-40, - 2.0445622502372907e-40, - 2.0540447066374146e-40, - 2.0636600860003264e-40, - 2.0734226211664804e-40, - 2.083313277772407e-40, - 2.0933069442519716e-40, - 2.1033869156675344e-40, - 2.1135485563984e-40, - 2.123789037075968e-40, - 2.134079314322764e-40, - 2.144373959868049e-40, - 2.15463630923557e-40, - 2.164861645025199e-40, - 2.175049214318773e-40, - 2.185185148921869e-40, - 2.1952414638296157e-40, - 2.205193882123324e-40, - 2.215032077197706e-40, - 2.2247475619264055e-40, - 2.234336133074074e-40, - 2.2438140025506336e-40, - 2.2532020857543082e-40, - 2.262515200116044e-40, - 2.2717603526206775e-40, - 2.2809439729004357e-40, - 2.2900759068901344e-40, - 2.299171471649542e-40, - 2.3082464411559124e-40, - 2.3173111765887043e-40, - 2.326371301579291e-40, - 2.3354384280912654e-40, - 2.3445424181487508e-40, - 2.353716934435129e-40, - 2.3629637279657885e-40, - 2.3722478602278066e-40, - 2.381535539487644e-40, - 2.3908339142603038e-40, - 2.4001722755938082e-40, - 2.4095740159050046e-40, - 2.4190253163872326e-40, - 2.4285001093294043e-40, - 2.437978281908271e-40, - 2.447462065378311e-40, - 2.456957408714235e-40, - 2.4664713135216004e-40, - 2.4760117485886033e-40, - 2.4855847999823823e-40, - 2.4951871873435425e-40, - 2.50479668441265e-40, - 2.5143894674823972e-40, - 2.523954174615704e-40, - 2.5335036957783384e-40, - 2.5430582084100926e-40, - 2.552626809724866e-40, - 2.562201716703383e-40, - 2.57177026174297e-40, - 2.581323822655823e-40, - 2.590862075400002e-40, - 2.600388022721396e-40, - 2.6099063857533065e-40, - 2.619411948658571e-40, - 2.6288974725783562e-40, - 2.6383585908658238e-40, - 2.6478021672445378e-40, - 2.6572353864553364e-40, - 2.6666653129549825e-40, - 2.6760913938074135e-40, - 2.6855114453737937e-40, - 2.694924760629908e-40, - 2.7043373737364115e-40, - 2.7137562281997485e-40, - 2.7231829094528344e-40, - 2.732613660896987e-40, - 2.7420477935160594e-40, - 2.751493431379273e-40, - 2.7609633596554118e-40, - 2.7704656629477676e-40, - 2.7800012621970415e-40, - 2.7895567492683283e-40, - 2.7991171695983096e-40, - 2.8086729239874127e-40, - 2.8182347412993275e-40, - 2.8278190197299615e-40, - 2.8374383529124496e-40, - 2.84709326716475e-40, - 2.856775610710075e-40, - 2.866477543192513e-40, - 2.876194557802099e-40, - 2.8859253988753448e-40, - 2.8956688471404663e-40, - 2.9054292847601676e-40, - 2.9152135829607473e-40, - 2.925028268610877e-40, - 2.9348718451775973e-40, - 2.9447314398662482e-40, - 2.9545967747369982e-40, - 2.964461708856168e-40, - 2.974334993108386e-40, - 2.9842269260341403e-40, - 2.994145322140652e-40, - 3.0040820130579455e-40, - 3.0140219820854703e-40, - 3.0239529240412368e-40, - 3.0338792123861003e-40, - 3.0438191426043145e-40, - 3.0537902636176054e-40, - 3.0638013437565855e-40, - 3.0738337818842035e-40, - 3.0838631032875146e-40, - 3.0938643586215587e-40, - 3.103838452105339e-40, - 3.1138029753309695e-40, - 3.123776306483341e-40, - 3.1337660399122618e-40, - 3.143759644394642e-40, - 3.1537423470273184e-40, - 3.1637004902655e-40, - 3.1736305753315434e-40, - 3.18353467118003e-40, - 3.19341515780135e-40, - 3.2032717965090677e-40, - 3.2131018568366357e-40, - 3.2229024721466414e-40, - 3.2326731436197132e-40, - 3.2424213346998267e-40, - 3.252156789169671e-40, - 3.2618904886754163e-40, - 3.271626673240659e-40, - 3.2813615988891548e-40, - 3.2910905704134737e-40, - 3.300808399723105e-40, - 3.3105218771403955e-40, - 3.3202406736355783e-40, - 3.329974545650938e-40, - 3.339729664657792e-40, - 3.349505405074399e-40, - 3.359300900176924e-40, - 3.36911570898041e-40, - 3.3789493204352424e-40, - 3.3887988341781397e-40, - 3.3986607619663672e-40, - 3.408532792322927e-40, - 3.4184200392425278e-40, - 3.4283318045404255e-40, - 3.438277078801935e-40, - 3.44825974109338e-40, - 3.458269838019887e-40, - 3.468295039363965e-40, - 3.478323928336437e-40, - 3.4883522535778646e-40, - 3.4983827964286665e-40, - 3.508418469129173e-40, - 3.5184614427226687e-40, - 3.528510280218926e-40, - 3.538562482191192e-40, - 3.5486150144152398e-40, - 3.558666855563819e-40, - 3.5687229877588783e-40, - 3.5787891492607644e-40, - 3.5888709123613855e-40, - 3.598967744291899e-40, - 3.609071815856785e-40, - 3.619177261337741e-40, - 3.6292817595524355e-40, - 3.639387665547255e-40, - 3.6494981393302327e-40, - 3.6596146259704876e-40, - 3.669737615636961e-40, - 3.6798640496103266e-40, - 3.689993641358533e-40, - 3.700127267767177e-40, - 3.710266177825633e-40, - 3.720411107333389e-40, - 3.730559131231307e-40, - 3.740704084756358e-40, - 3.750842729495935e-40, - 3.760977104891315e-40, - 3.771110119409954e-40, - 3.781247521392874e-40, - 3.791390837806813e-40, - 3.8015298783996805e-40, - 3.811652628028094e-40, - 3.821745876228451e-40, - 3.831800694740656e-40, - 3.8418196964363024e-40, - 3.851807451514801e-40, - 3.86176804048161e-40, - 3.871705623466883e-40, - 3.881622422000597e-40, - 3.891520983861001e-40, - 3.9014040546543876e-40, - 3.911274358165931e-40, - 3.921134640195118e-40, - 3.930987774958481e-40, - 3.940836496067336e-40, - 3.950684186754987e-40, - 3.960533967370937e-40, - 3.970389106692518e-40, - 3.980252395187075e-40, - 3.990125819204387e-40, - 4.000010526520526e-40, - 4.009907825505475e-40, - 4.019818762835591e-40, - 4.029745310213075e-40, - 4.039693740670748e-40, - 4.04967140733326e-40, - 4.059686513586879e-40, - 4.069747258005246e-40, - 4.079855217653715e-40, - 4.0900076425890295e-40, - 4.100200615054014e-40, - 4.1104304232050296e-40, - 4.120695984755536e-40, - 4.130999868568034e-40, - 4.141344948180033e-40, - 4.1517334949122986e-40, - 4.16216400565605e-40, - 4.172631556663273e-40, - 4.183130957406131e-40, - 4.1936581159090205e-40, - 4.2042090020416135e-40, - 4.214776235236265e-40, - 4.225350879637193e-40, - 4.235922981482811e-40, - 4.246483282163192e-40, - 4.257029790182972e-40, - 4.267565468343629e-40, - 4.278093554432579e-40, - 4.288616857621636e-40, - 4.299131087111697e-40, - 4.309624124202044e-40, - 4.3200839217774526e-40, - 4.330499876016405e-40, - 4.3408648915929535e-40, - 4.351180094378507e-40, - 4.36144653826911e-40, - 4.371663431040631e-40, - 4.38182981750841e-40, - 4.391947661985341e-40, - 4.402023483033746e-40, - 4.412064251498989e-40, - 4.42207632473079e-40, - 4.4320628148795575e-40, - 4.442021661676257e-40, - 4.451949783571217e-40, - 4.461847001366499e-40, - 4.471715777718937e-40, - 4.481564213544358e-40, - 4.491402924161706e-40, - 4.5012402731554695e-40, - 4.511084333076727e-40, - 4.5209418259595575e-40, - 4.530817332658293e-40, - 4.540715117292817e-40, - 4.550639112283752e-40, - 4.5605902351030925e-40, - 4.570567489323684e-40, - 4.580571780847388e-40, - 4.590605746489127e-40, - 4.600674328181133e-40, - 4.610784000105225e-40, - 4.620940979614167e-40, - 4.631147747599808e-40, - 4.641405805970773e-40, - 4.651716292455445e-40, - 4.662075915806686e-40, - 4.6724788268477384e-40, - 4.682918581576609e-40, - 4.693387651892512e-40, - 4.703878380479791e-40, - 4.714388536291159e-40, - 4.724917340665114e-40, - 4.735465158856782e-40, - 4.74603318537662e-40, - 4.756619306263455e-40, - 4.767216115210782e-40, - 4.777816035485938e-40, - 4.788411643525044e-40, - 4.7989958438200645e-40, - 4.809566846663199e-40, - 4.820126136525595e-40, - 4.830675144320324e-40, - 4.841215301418194e-40, - 4.851747112296167e-40, - 4.862265814634934e-40, - 4.8727649329647525e-40, - 4.883238002584029e-40, - 4.893678524263557e-40, - 4.904081525082927e-40, - 4.914448496642777e-40, - 4.9247828684075365e-40, - 4.935088115893255e-40, - 4.9453677206322505e-40, - 4.955625804082273e-40, - 4.9658677698263834e-40, - 4.976098613801192e-40, - 4.9863231622580225e-40, - 4.996546402189981e-40, - 5.006771308256625e-40, - 5.0169969499464886e-40, - 5.027222547392755e-40, - 5.0374474971214976e-40, - 5.0476710893424625e-40, - 5.0578953884396915e-40, - 5.06812595111797e-40, - 5.0783688565355764e-40, - 5.088629615649147e-40, - 5.098913257062571e-40, - 5.109223297724737e-40, - 5.119562282734124e-40, - 5.129932855495344e-40, - 5.140337863524418e-40, - 5.1507812279383295e-40, - 5.161267678134419e-40, - 5.171800935100438e-40, - 5.182383944191938e-40, - 5.1930191407901276e-40, - 5.203708495931011e-40, - 5.214448875149515e-40, - 5.225233791840722e-40, - 5.236057348276237e-40, - 5.246913662864972e-40, - 5.257796586259675e-40, - 5.26870172670816e-40, - 5.279628736175803e-40, - 5.2905775667908365e-40, - 5.3015484035640266e-40, - 5.31254188626812e-40, - 5.323557655296341e-40, - 5.334592729052138e-40, - 5.345642763103246e-40, - 5.3567033328604925e-40, - 5.367769988789268e-40, - 5.378838580603954e-40, - 5.389905554633947e-40, - 5.400967990219804e-40, - 5.412024437939714e-40, - 5.423073766226271e-40, - 5.434115162093681e-40, - 5.445145338895864e-40, - 5.456159690621975e-40, - 5.467153013696486e-40, - 5.478118201214171e-40, - 5.4890480241798514e-40, - 5.499939345028366e-40, - 5.510792779652446e-40, - 5.521609548953901e-40, - 5.532391116010282e-40, - 5.5431397232378566e-40, - 5.553857378981276e-40, - 5.56454508792975e-40, - 5.575203725611465e-40, - 5.585834168506061e-40, - 5.596437360690014e-40, - 5.607014597987171e-40, - 5.617567518107365e-40, - 5.6280978521909305e-40, - 5.638607175631212e-40, - 5.6490962842913815e-40, - 5.659565672940209e-40, - 5.670015748219848e-40, - 5.680446971267596e-40, - 5.690860417362846e-40, - 5.701257406783275e-40, - 5.71163925706359e-40, - 5.722006841732507e-40, - 5.732360147094782e-40, - 5.742699647067154e-40, - 5.753025898376288e-40, - 5.763339229654532e-40, - 5.773639749236915e-40, - 5.783928864710683e-40, - 5.794208360471097e-40, - 5.804478906793893e-40, - 5.814740839095281e-40, - 5.824994352474242e-40, - 5.835239907895366e-40, - 5.845478730156625e-40, - 5.85571251155804e-40, - 5.865944143629084e-40, - 5.8761774226320626e-40, - 5.886416071302379e-40, - 5.896662807273605e-40, - 5.906919705650947e-40, - 5.9171888233845934e-40, - 5.927471665617994e-40, - 5.9377678458232914e-40, - 5.948075969842659e-40, - 5.958393137867991e-40, - 5.9687161156793164e-40, - 5.9790418978733825e-40, - 5.989367899458129e-40, - 5.999692770587058e-40, - 6.010018144906783e-40, - 6.020348028240783e-40, - 6.030686403629519e-40, - 6.04103719068118e-40, - 6.051404309116501e-40, - 6.061791067952808e-40, - 6.072197155738486e-40, - 6.082620709625128e-40, - 6.093059847026889e-40, - 6.1035126477575835e-40, - 6.1139770588075515e-40, - 6.124451494245875e-40, - 6.13493578093017e-40, - 6.1454300909033196e-40, - 6.1559349682943984e-40, - 6.166451141384652e-40, - 6.176979337194568e-40, - 6.187520365282744e-40, - 6.198074705317751e-40, - 6.208642232997522e-40, - 6.219222809073002e-40, - 6.22981629598598e-40, - 6.240422791625229e-40, - 6.2510416619451835e-40, - 6.261670663657755e-40, - 6.272307441254098e-40, - 6.282949524180169e-40, - 6.2935936302955366e-40, - 6.304236247895648e-40, - 6.314875224422772e-40, - 6.325509289061122e-40, - 6.3361374496844e-40, - 6.346758942673403e-40, - 6.357373100490748e-40, - 6.367979425322009e-40, - 6.378578454680911e-40, - 6.3891711701530264e-40, - 6.3997585658717515e-40, - 6.410341636855965e-40, - 6.420921321013991e-40, - 6.43149829622502e-40, - 6.442071545004161e-40, - 6.452639134407364e-40, - 6.4631991160536015e-40, - 6.473749402883564e-40, - 6.484287521707086e-40, - 6.494811018903176e-40, - 6.505317696269986e-40, - 6.515805417045436e-40, - 6.5262722481891414e-40, - 6.536716242315692e-40, - 6.547135432565323e-40, - 6.557528347291604e-40, - 6.567897269125629e-40, - 6.578246392341342e-40, - 6.5885800296687e-40, - 6.598902494693767e-40, - 6.609218113742212e-40, - 6.619530860043045e-40, - 6.629840969331828e-40, - 6.640146327411552e-40, - 6.650445151767766e-40, - 6.6607357985379345e-40, - 6.6710169945519365e-40, - 6.681287802427381e-40, - 6.691549439351243e-40, - 6.701805063537477e-40, - 6.7120578922553456e-40, - 6.722310750974427e-40, - 6.732566350648185e-40, - 6.742827358153004e-40, - 6.75309486189118e-40, - 6.763368311934021e-40, - 6.773647323355346e-40, - 6.783931519553078e-40, - 6.794220507536378e-40, - 6.8045138665853995e-40, - 6.814811778611004e-40, - 6.825115737513907e-40, - 6.835427147178939e-40, - 6.845747423651878e-40, - 6.856078284838409e-40, - 6.8664217444668416e-40, - 6.876779320412707e-40, - 6.8871509760227795e-40, - 6.897536502443569e-40, - 6.907934987828026e-40, - 6.918345166121276e-40, - 6.9287657647868074e-40, - 6.939195660222175e-40, - 6.949635245304443e-40, - 6.9600858331461134e-40, - 6.970548782803136e-40, - 6.9810254535604825e-40, - 6.991517187094601e-40, - 7.002024798639865e-40, - 7.012547860891631e-40, - 7.023085250328765e-40, - 7.0336359452528345e-40, - 7.044198943904592e-40, - 7.0547735473893746e-40, - 7.065359285144712e-40, - 7.075955693965506e-40, - 7.086561436441933e-40, - 7.097173713200982e-40, - 7.107789558747083e-40, - 7.1184060372421616e-40, - 7.129020214820059e-40, - 7.13962915917983e-40, - 7.1502307058470085e-40, - 7.160825511923999e-40, - 7.171414989702677e-40, - 7.182000541188609e-40, - 7.192583553246366e-40, - 7.203165228553942e-40, - 7.213746550613932e-40, - 7.224326886080058e-40, - 7.234903320971489e-40, - 7.245472763323152e-40, - 7.2560325749678705e-40, - 7.266581142285288e-40, - 7.277117134137026e-40, - 7.287639662817132e-40, - 7.298150850221321e-40, - 7.3086538746921406e-40, - 7.3191515235550364e-40, - 7.329646565460475e-40, - 7.340141559946542e-40, - 7.350638389736772e-40, - 7.361138314714451e-40, - 7.371640424845066e-40, - 7.382143336327404e-40, - 7.392645665368191e-40, - 7.40314600129565e-40, - 7.413642565556724e-40, - 7.424133508718362e-40, - 7.434618081030271e-40, - 7.445096847331599e-40, - 7.455570497656565e-40, - 7.466040054487683e-40, - 7.47650668228281e-40, - 7.486971527097305e-40, - 7.49743596809287e-40, - 7.507902245391181e-40, - 7.51837242359832e-40, - 7.528848323492453e-40, - 7.539331757506118e-40, - 7.549824538238238e-40, - 7.560328477959718e-40, - 7.570844494599004e-40, - 7.581371101201996e-40, - 7.591906261021311e-40, - 7.602447646622869e-40, - 7.612992920973155e-40, - 7.623539844696461e-40, - 7.634086136847229e-40, - 7.644630526368568e-40, - 7.65517345683723e-40, - 7.665715413521833e-40, - 7.676256853807302e-40, - 7.686798001461293e-40, - 7.697339038819084e-40, - 7.707880140900855e-40, - 7.718421110191145e-40, - 7.728962019991996e-40, - 7.739503895911726e-40, - 7.750047961424707e-40, - 7.760595338494115e-40, - 7.771147015535016e-40, - 7.78170385038384e-40, - 7.79226557245114e-40, - 7.80283018741699e-40, - 7.813395361795011e-40, - 7.823958762147464e-40, - 7.834518096186528e-40, - 7.845071601233352e-40, - 7.855617982050491e-40, - 7.866156569153285e-40, - 7.87668883531963e-40, - 7.887216785726666e-40, - 7.897742248680184e-40, - 7.908266791145333e-40, - 7.918791952054052e-40, - 7.929319256061238e-40, - 7.939849940970667e-40, - 7.950383656646762e-40, - 7.960919579792735e-40, - 7.971456927674298e-40, - 7.981994917602445e-40, - 7.992532766850246e-40, - 8.003069693652982e-40, - 8.013605255102717e-40, - 8.024141297962743e-40, - 8.034680767678996e-40, - 8.045226620990395e-40, - 8.055781815996458e-40, - 8.066349345551903e-40, - 8.076932249527923e-40, - 8.087533398849053e-40, - 8.09815381137639e-40, - 8.108793033827517e-40, - 8.11945023285127e-40, - 8.130124329970728e-40, - 8.14081418693491e-40, - 8.151518665405239e-40, - 8.162236643511875e-40, - 8.172967396616139e-40, - 8.183710942621817e-40, - 8.194467659865907e-40, - 8.205238333402742e-40, - 8.216023904082596e-40, - 8.226825311844114e-40, - 8.237643334679761e-40, - 8.248478179448287e-40, - 8.25932969501514e-40, - 8.270197679312643e-40, - 8.28108192723083e-40, - 8.291982029305201e-40, - 8.302897509660198e-40, - 8.313828127049031e-40, - 8.324773626771802e-40, - 8.335733585717882e-40, - 8.346707493601641e-40, - 8.357694609790574e-40, - 8.368693690219512e-40, - 8.379703426919241e-40, - 8.390722741203391e-40, - 8.401750701030032e-40, - 8.412786432770492e-40, - 8.42382934218065e-40, - 8.434878961498978e-40, - 8.445934825171582e-40, - 8.456996467532152e-40, - 8.468063422139085e-40, - 8.479135155832988e-40, - 8.49021096963213e-40, - 8.501290072983756e-40, - 8.512371644458128e-40, - 8.523454862198105e-40, - 8.534538899581135e-40, - 8.545622955422605e-40, - 8.556706318800623e-40, - 8.567788288948753e-40, - 8.578868285301399e-40, - 8.589946004388423e-40, - 8.601021210949122e-40, - 8.612093573695941e-40, - 8.62316266072827e-40, - 8.634228038912771e-40, - 8.645289275115894e-40, - 8.656345880873295e-40, - 8.667396957963183e-40, - 8.678441567437463e-40, - 8.689478700351258e-40, - 8.700507336656161e-40, - 8.711526456386949e-40, - 8.722535045314347e-40, - 8.733532092894404e-40, - 8.744516845360441e-40, - 8.755489440845971e-40, - 8.76645009876935e-40, - 8.777399173194062e-40, - 8.788337263618573e-40, - 8.799265254044199e-40, - 8.810184145144833e-40, - 8.821094933065141e-40, - 8.831998204929517e-40, - 8.842894342154665e-40, - 8.853783768134074e-40, - 8.864666625774266e-40, - 8.87554287878806e-40, - 8.886412312877816e-40, - 8.897274698230956e-40, - 8.90812979092273e-40, - 8.91897640579348e-40, - 8.929811487565217e-40, - 8.940631732882884e-40, - 8.95143383841875e-40, - 8.962214501035575e-40, - 8.972970492975374e-40, - 8.983698924702117e-40, - 8.994397177999085e-40, - 9.005067453773218e-40, - 9.01571721089938e-40, - 9.026354243467792e-40, - 9.036986207202855e-40, - 9.047619874066816e-40, - 9.058261844784258e-40, - 9.068918690112802e-40, - 9.079596186651743e-40, - 9.090291050515718e-40 - ], - "nc": [ - 4.606949966979058e-46, - 1.920077331766259e-43, - 8.560870966085414e-43, - 1.657693383207322e-42, - 2.4096809139842145e-42, - 3.162191033743508e-42, - 3.8817365063151737e-42, - 4.531049570937736e-42, - 5.117062317860131e-42, - 5.662951377842868e-42, - 6.186262428935923e-42, - 6.706785291368263e-42, - 7.225438327588681e-42, - 7.719259072218476e-42, - 8.196741625469558e-42, - 8.670499399991596e-42, - 9.121190142058026e-42, - 9.560629520630758e-42, - 1.0001468671707938e-41, - 1.0411828143768264e-41, - 1.0862117283233838e-41, - 1.1314972097799259e-41, - 1.1728469300814353e-41, - 1.2134352396466882e-41, - 1.2542131178787233e-41, - 1.2949202367113996e-41, - 1.336121944574214e-41, - 1.3789242923887799e-41, - 1.4214773247959637e-41, - 1.4624238094283668e-41, - 1.502100691016817e-41, - 1.540351512302722e-41, - 1.5804644572189307e-41, - 1.6233418112656857e-41, - 1.6668371910342242e-41, - 1.7078296071173848e-41, - 1.7461019170961318e-41, - 1.784899903679845e-41, - 1.8267693042911162e-41, - 1.8715741647630373e-41, - 1.915668381266524e-41, - 1.958271065144053e-41, - 1.9977522715583644e-41, - 2.03523515667931e-41, - 2.0708105996734413e-41, - 2.105425662112072e-41, - 2.1425524737640742e-41, - 2.1837925757155327e-41, - 2.2285966353854753e-41, - 2.274724894477866e-41, - 2.319133311676929e-41, - 2.3606161694774023e-41, - 2.3989635823317567e-41, - 2.435663361089481e-41, - 2.471810777814563e-41, - 2.508274215704292e-41, - 2.546044292915404e-41, - 2.5852636057319867e-41, - 2.626050468761632e-41, - 2.6686731625779585e-41, - 2.7113865045471106e-41, - 2.753878960898036e-41, - 2.7950617401427894e-41, - 2.834315087499498e-41, - 2.8718754539973964e-41, - 2.909109405786166e-41, - 2.9464331880978737e-41, - 2.984064457880985e-41, - 3.022528978150598e-41, - 3.0613346717028365e-41, - 3.1006152137490234e-41, - 3.1398669356757246e-41, - 3.178555537439491e-41, - 3.2166893299875326e-41, - 3.254978299229601e-41, - 3.29321736517676e-41, - 3.332128352821646e-41, - 3.372212977835474e-41, - 3.4134963294104356e-41, - 3.455842096578757e-41, - 3.498931427622645e-41, - 3.5421015155162913e-41, - 3.5848107306312266e-41, - 3.6273184412507134e-41, - 3.6682281023974716e-41, - 3.7075860973178715e-41, - 3.7461598512082067e-41, - 3.783808478807891e-41, - 3.820800663235365e-41, - 3.8570846765332463e-41, - 3.893407815157163e-41, - 3.9304964253228127e-41, - 3.9678844053913675e-41, - 4.0055792014425156e-41, - 4.0436889360253573e-41, - 4.0821938870560404e-41, - 4.1210148192158716e-41, - 4.1601193388944997e-41, - 4.199486717213287e-41, - 4.239227782839168e-41, - 4.279281624962639e-41, - 4.319367934505887e-41, - 4.3592010123022365e-41, - 4.398277610284428e-41, - 4.4366074982185575e-41, - 4.4743865833900136e-41, - 4.511688232954775e-41, - 4.548696007796645e-41, - 4.5857186974943037e-41, - 4.623061222308838e-41, - 4.660827441877117e-41, - 4.69918083039952e-41, - 4.738483527667868e-41, - 4.77881859289209e-41, - 4.819969321201836e-41, - 4.861630010143804e-41, - 4.903541733234272e-41, - 4.94564504404658e-41, - 4.987906677700843e-41, - 5.030115593048887e-41, - 5.07180138503041e-41, - 5.112797871745591e-41, - 5.15333806530501e-41, - 5.193245392287199e-41, - 5.232487832342218e-41, - 5.271452500581632e-41, - 5.310160374898256e-41, - 5.348474971751791e-41, - 5.386661490475409e-41, - 5.425029423665954e-41, - 5.463520686360605e-41, - 5.501788633269075e-41, - 5.539605044315886e-41, - 5.577241470642282e-41, - 5.615114299991513e-41, - 5.653270069247121e-41, - 5.691549634336114e-41, - 5.729770405757789e-41, - 5.767821366956664e-41, - 5.805890667668432e-41, - 5.844245104893348e-41, - 5.882820565497457e-41, - 5.92140018878866e-41, - 5.959938909057914e-41, - 5.998468935456821e-41, - 6.036989990269e-41, - 6.075495904207239e-41, - 6.113901142779617e-41, - 6.152145624888648e-41, - 6.190431855094839e-41, - 6.229042485073952e-41, - 6.267983360117209e-41, - 6.306957977609872e-41, - 6.345692296932403e-41, - 6.384154164053705e-41, - 6.422498127713082e-41, - 6.460944927677529e-41, - 6.49956527856222e-41, - 6.538212883607392e-41, - 6.576788130312128e-41, - 6.615367025005294e-41, - 6.654049319725082e-41, - 6.692848390798806e-41, - 6.731769115499568e-41, - 6.770823274040484e-41, - 6.809965383108062e-41, - 6.849125126381841e-41, - 6.888285369877742e-41, - 6.927450918279401e-41, - 6.966616136010083e-41, - 7.005795612907249e-41, - 7.044997577594358e-41, - 7.084168682808025e-41, - 7.123159630888348e-41, - 7.161891679836114e-41, - 7.200514393170857e-41, - 7.239202697118622e-41, - 7.277960529657194e-41, - 7.316665446573082e-41, - 7.355271119678458e-41, - 7.393835354774116e-41, - 7.432375151076614e-41, - 7.470971040345862e-41, - 7.509773545183298e-41, - 7.54893274092968e-41, - 7.588373968675341e-41, - 7.627895988027829e-41, - 7.667337023640561e-41, - 7.706724520026086e-41, - 7.746216944296775e-41, - 7.785935950678107e-41, - 7.825852235790372e-41, - 7.865782674888601e-41, - 7.905541028709792e-41, - 7.945017976901579e-41, - 7.984228163358801e-41, - 8.023192844876827e-41, - 8.061890777439689e-41, - 8.100231813537112e-41, - 8.138156368117539e-41, - 8.175666259555089e-41, - 8.21282987188881e-41, - 8.249712757997409e-41, - 8.286333850916043e-41, - 8.322699276411934e-41, - 8.358864245368367e-41, - 8.394911441729512e-41, - 8.430923024556025e-41, - 8.466976430077301e-41, - 8.503139243696049e-41, - 8.539477355377901e-41, - 8.576047431606266e-41, - 8.612924563546388e-41, - 8.650217042436619e-41, - 8.688051297094574e-41, - 8.726552107807805e-41, - 8.765788565434589e-41, - 8.8057553780669e-41, - 8.846395042773617e-41, - 8.887613560779294e-41, - 8.929259925603996e-41, - 8.971182981753261e-41, - 9.013288240470684e-41, - 9.055528196092479e-41, - 9.097876132988022e-41, - 9.140281271722929e-41, - 9.182681282465729e-41, - 9.22499310153888e-41, - 9.267136968651257e-41, - 9.30902214145576e-41, - 9.350528190638069e-41, - 9.391531799555822e-41, - 9.431900947079771e-41, - 9.471597705935293e-41, - 9.510630389682634e-41, - 9.54903259761249e-41, - 9.586865973824281e-41, - 9.62419681436046e-41, - 9.661087525924437e-41, - 9.697576156911423e-41, - 9.733694246604171e-41, - 9.769495586283714e-41, - 9.805047689597994e-41, - 9.840448716440869e-41, - 9.875780525070737e-41, - 9.911109079630947e-41, - 9.946465016465491e-41, - 9.98186437217634e-41, - 1.0017327064119037e-40, - 1.0052905583544772e-40, - 1.0088677570068898e-40, - 1.0124713570957233e-40, - 1.0161078684110367e-40, - 1.0197760877891572e-40, - 1.0234698293886284e-40, - 1.02718010387595e-40, - 1.0309000687400874e-40, - 1.0346333321324254e-40, - 1.0383876195959556e-40, - 1.0421724346129354e-40, - 1.0459938591399838e-40, - 1.0498482537951162e-40, - 1.0537265169323845e-40, - 1.0576181889729337e-40, - 1.0615162197394284e-40, - 1.0654230272335494e-40, - 1.0693470497059134e-40, - 1.0732974708383502e-40, - 1.0772790433159838e-40, - 1.0812857230363625e-40, - 1.0853057651002003e-40, - 1.0893270416324983e-40, - 1.0933426494131434e-40, - 1.0973557585739163e-40, - 1.1013728531713497e-40, - 1.1054004320679251e-40, - 1.1094407233336696e-40, - 1.113487876599089e-40, - 1.1175340006402138e-40, - 1.1215712499891559e-40, - 1.1255947262822846e-40, - 1.1296063966857186e-40, - 1.1336101137884682e-40, - 1.137609731588066e-40, - 1.1416081975827915e-40, - 1.145604039134825e-40, - 1.1495939075395715e-40, - 1.1535744780361018e-40, - 1.1575415504445021e-40, - 1.161490889783213e-40, - 1.1654195763336254e-40, - 1.1693245439964332e-40, - 1.173203585549164e-40, - 1.1770588278497678e-40, - 1.1808953306787352e-40, - 1.1847198908121344e-40, - 1.18853914477423e-40, - 1.1923564766575795e-40, - 1.1961716864346301e-40, - 1.199982112077096e-40, - 1.203784835202911e-40, - 1.2075778305962824e-40, - 1.211360967341154e-40, - 1.215135641339631e-40, - 1.2189037176837337e-40, - 1.222666985980552e-40, - 1.2264268619792213e-40, - 1.230185162968343e-40, - 1.2339440178375697e-40, - 1.2377055669999204e-40, - 1.2414720113289537e-40, - 1.2452452593010292e-40, - 1.2490256426562397e-40, - 1.2528131254983091e-40, - 1.2566076809921425e-40, - 1.260408887767871e-40, - 1.2642163328175219e-40, - 1.268030500739567e-40, - 1.2718519231261783e-40, - 1.2756810357049898e-40, - 1.2795178360608517e-40, - 1.2833603897704402e-40, - 1.2872060053862134e-40, - 1.2910519979160061e-40, - 1.2948962943382028e-40, - 1.29873900139443e-40, - 1.3025825100237565e-40, - 1.306429501957891e-40, - 1.3102825941001492e-40, - 1.3141424976836094e-40, - 1.3180063906995093e-40, - 1.3218699630241728e-40, - 1.3257288299064044e-40, - 1.3295787656464455e-40, - 1.333418154311779e-40, - 1.3372480395946203e-40, - 1.341069821804154e-40, - 1.3448849071697776e-40, - 1.3486946865161454e-40, - 1.3524999973741433e-40, - 1.3563017313178932e-40, - 1.3601011284459977e-40, - 1.3638994324082178e-40, - 1.3676977027956974e-40, - 1.3714961257115114e-40, - 1.375294534268073e-40, - 1.379092618319848e-40, - 1.3828900666304145e-40, - 1.386686721184519e-40, - 1.3904833069841167e-40, - 1.394280408510229e-40, - 1.3980784387859897e-40, - 1.4018778093838922e-40, - 1.4056788991451956e-40, - 1.4094820588302602e-40, - 1.413288601544067e-40, - 1.4171003883856875e-40, - 1.4209192914251756e-40, - 1.4247471838623616e-40, - 1.4285857658780995e-40, - 1.4324356829099782e-40, - 1.4362967412348357e-40, - 1.4401687028841045e-40, - 1.4440513298715213e-40, - 1.4479440703350529e-40, - 1.451845420189778e-40, - 1.455753963770966e-40, - 1.4596683312573456e-40, - 1.4635871528276484e-40, - 1.4675090856447733e-40, - 1.4714331380908513e-40, - 1.4753584799676907e-40, - 1.4792842485021668e-40, - 1.483209580849839e-40, - 1.4871336211715764e-40, - 1.4910557398556364e-40, - 1.4949754841600819e-40, - 1.498892415751595e-40, - 1.5028060982800348e-40, - 1.5067160950500208e-40, - 1.5106218640924817e-40, - 1.5145226009981638e-40, - 1.518417592670453e-40, - 1.5223061177965607e-40, - 1.5261874550607298e-40, - 1.5300608896754266e-40, - 1.5339261005198779e-40, - 1.537783092718489e-40, - 1.5416319557337616e-40, - 1.5454727935570946e-40, - 1.5493057101798862e-40, - 1.5531308074764593e-40, - 1.5569483547868356e-40, - 1.560758859524488e-40, - 1.5645628013255988e-40, - 1.5683606590558764e-40, - 1.5721529115790328e-40, - 1.5759399884040885e-40, - 1.579722045411605e-40, - 1.5834993001060675e-40, - 1.587272021781191e-40, - 1.5910404797461184e-40, - 1.5948049434737675e-40, - 1.5985658416332503e-40, - 1.6023240878673296e-40, - 1.60608070605363e-40, - 1.6098367282976408e-40, - 1.6135931867048546e-40, - 1.6173511126542073e-40, - 1.6211112216276644e-40, - 1.6248735331375833e-40, - 1.6286379659367856e-40, - 1.632404430071513e-40, - 1.6361728355880082e-40, - 1.6399430935035034e-40, - 1.6437154327197437e-40, - 1.6474903811656804e-40, - 1.651267923726377e-40, - 1.6550479870070043e-40, - 1.658830497710156e-40, - 1.662615382438976e-40, - 1.6664023290946683e-40, - 1.670191013603198e-40, - 1.6739820930712697e-40, - 1.677776335892447e-40, - 1.6815745104601888e-40, - 1.685377385122274e-40, - 1.689185743039549e-40, - 1.6929997136314362e-40, - 1.6968179739163016e-40, - 1.7006390046444517e-40, - 1.7044612865661805e-40, - 1.708283300431782e-40, - 1.7121035522862481e-40, - 1.7159211614106783e-40, - 1.7197368337451636e-40, - 1.7235516901189645e-40, - 1.727366852383102e-40, - 1.7311834423885952e-40, - 1.7350025808953374e-40, - 1.7388252809281575e-40, - 1.7426519148075618e-40, - 1.7464823706835456e-40, - 1.7503165166571254e-40, - 1.754154220754184e-40, - 1.7579953509786743e-40, - 1.7618397512327806e-40, - 1.7656871190791273e-40, - 1.7695371306351912e-40, - 1.7733894785731617e-40, - 1.777243855572679e-40, - 1.7810999543133942e-40, - 1.7849574681099995e-40, - 1.7888161413174584e-40, - 1.7926761465643216e-40, - 1.7965380892135377e-40, - 1.8004025989545287e-40, - 1.8042703054767173e-40, - 1.8081418384695257e-40, - 1.812017847788306e-40, - 1.8158990807737745e-40, - 1.8197854065352104e-40, - 1.823676178695338e-40, - 1.8275707466212585e-40, - 1.8314684596800741e-40, - 1.8353686672388878e-40, - 1.839270593044981e-40, - 1.843173135678001e-40, - 1.847076104054448e-40, - 1.850979602619301e-40, - 1.8548837358413886e-40, - 1.8587886082523705e-40, - 1.862694324708534e-40, - 1.8666011656274263e-40, - 1.870509615301629e-40, - 1.8744193507200166e-40, - 1.878329864823583e-40, - 1.882240650553323e-40, - 1.886151200850232e-40, - 1.890061008334966e-40, - 1.893969498601879e-40, - 1.8978760909894293e-40, - 1.901780789408164e-40, - 1.905683744766574e-40, - 1.9095851079731484e-40, - 1.9134850299363764e-40, - 1.917383661461313e-40, - 1.92128111950968e-40, - 1.9251774700401153e-40, - 1.9290725915336954e-40, - 1.9329662632632685e-40, - 1.936858264507233e-40, - 1.9407483745441023e-40, - 1.944636372655288e-40, - 1.948522118842791e-40, - 1.9524057420249893e-40, - 1.9562874153256357e-40, - 1.9601673361835464e-40, - 1.9640457025513515e-40, - 1.9679227123688486e-40, - 1.9717985635287026e-40, - 1.975673418056923e-40, - 1.9795471250896885e-40, - 1.9834191484761777e-40, - 1.9872888576660287e-40, - 1.9911556232511294e-40, - 1.995018815823366e-40, - 1.998877805974626e-40, - 2.0027319689462015e-40, - 2.0065808364925076e-40, - 2.0104245480321252e-40, - 2.0142637234786036e-40, - 2.018099004583571e-40, - 2.02193103309863e-40, - 2.0257604507753823e-40, - 2.029587899365427e-40, - 2.033414016262957e-40, - 2.0372392515826402e-40, - 2.0410633714376155e-40, - 2.0448859454521825e-40, - 2.048706540733175e-40, - 2.0525247244014935e-40, - 2.0563400635780663e-40, - 2.0601521227136844e-40, - 2.0639603958476616e-40, - 2.067764788491344e-40, - 2.071565973576181e-40, - 2.075364760045097e-40, - 2.0791619575355575e-40, - 2.0829583756836004e-40, - 2.086754824088546e-40, - 2.0905521361614006e-40, - 2.094351259981888e-40, - 2.0981524120717915e-40, - 2.101955007409608e-40, - 2.1057583488474384e-40, - 2.1095617392373865e-40, - 2.1133644814315553e-40, - 2.117165878282048e-40, - 2.120965203450503e-40, - 2.12476179731287e-40, - 2.1285559428864106e-40, - 2.1323485743048e-40, - 2.1361407002367627e-40, - 2.139933329351023e-40, - 2.1437274703163024e-40, - 2.1475241317981713e-40, - 2.151324306419745e-40, - 2.1551286901441614e-40, - 2.158937105147512e-40, - 2.16274900328281e-40, - 2.166563800904815e-40, - 2.170380914387894e-40, - 2.1741997601103257e-40, - 2.1780197544477398e-40, - 2.181840287941089e-40, - 2.1856607926795047e-40, - 2.18948115736711e-40, - 2.1933015103607644e-40, - 2.1971220159000044e-40, - 2.2009428382243652e-40, - 2.204764141573381e-40, - 2.2085860901678676e-40, - 2.21240890508026e-40, - 2.216233074169588e-40, - 2.2200590086013293e-40, - 2.2238867849098683e-40, - 2.2277163406318732e-40, - 2.2315476124532284e-40, - 2.2353805370598168e-40, - 2.2392150511375215e-40, - 2.2430510625402857e-40, - 2.246888113646143e-40, - 2.2507253472968134e-40, - 2.2545620322042478e-40, - 2.2583977322300493e-40, - 2.262232029130657e-40, - 2.2660645046625095e-40, - 2.2698947405820413e-40, - 2.2737223205861727e-40, - 2.2775470048134006e-40, - 2.2813689495142967e-40, - 2.28518842675491e-40, - 2.2890054180418146e-40, - 2.2928198143527834e-40, - 2.296631506613073e-40, - 2.300440385686827e-40, - 2.3042463424327894e-40, - 2.308049239832192e-40, - 2.311848730124579e-40, - 2.315644439318259e-40, - 2.3194361293675297e-40, - 2.3232237185133583e-40, - 2.3270071385244675e-40, - 2.3307863211695774e-40, - 2.3345611982174118e-40, - 2.3383317017224135e-40, - 2.342097875955972e-40, - 2.3458600144574954e-40, - 2.34961837057523e-40, - 2.353373232804018e-40, - 2.3571249275194354e-40, - 2.3608737820766733e-40, - 2.3646201238309195e-40, - 2.368364280137364e-40, - 2.372106574647767e-40, - 2.375847193861185e-40, - 2.379586260890995e-40, - 2.3833240062695493e-40, - 2.3870603647321943e-40, - 2.3907951076745272e-40, - 2.3945280049631094e-40, - 2.3982588264644995e-40, - 2.401987342045258e-40, - 2.4057133302531073e-40, - 2.4094367398352122e-40, - 2.4131576371038105e-40, - 2.4168761024491767e-40, - 2.4205926468936727e-40, - 2.424308013218597e-40, - 2.4280229464143592e-40, - 2.4317381914955936e-40, - 2.435454493500043e-40, - 2.439172594086081e-40, - 2.4428931661233426e-40, - 2.446616858058473e-40, - 2.450344335453162e-40, - 2.4540759454266906e-40, - 2.4578117971144675e-40, - 2.4615519940047e-40, - 2.465296639585598e-40, - 2.4690458373453685e-40, - 2.4727996901054796e-40, - 2.476558268939438e-40, - 2.4803214898089494e-40, - 2.4840891017601167e-40, - 2.4878609313615716e-40, - 2.4916369422376496e-40, - 2.4954171094454204e-40, - 2.4992014080419563e-40, - 2.5029898130843285e-40, - 2.506782299622992e-40, - 2.510578835517548e-40, - 2.5143794335245998e-40, - 2.5181843052845988e-40, - 2.521993698750303e-40, - 2.5258078498243952e-40, - 2.52962699082344e-40, - 2.5334513540645815e-40, - 2.537281171864964e-40, - 2.5411166765417314e-40, - 2.5449580926957015e-40, - 2.5488055394686586e-40, - 2.5526588015387886e-40, - 2.556517477401712e-40, - 2.5603811263598784e-40, - 2.5642492606513174e-40, - 2.5681213893540624e-40, - 2.5719970215451864e-40, - 2.5758756662798407e-40, - 2.5797568326200185e-40, - 2.5836400437993472e-40, - 2.5875249093025295e-40, - 2.5914111848335952e-40, - 2.5952986652443066e-40, - 2.5991872853334047e-40, - 2.6030770586315203e-40, - 2.6069679995479305e-40, - 2.6108601224919117e-40, - 2.614753441872739e-40, - 2.6186479702681084e-40, - 2.622543665093155e-40, - 2.626440352640083e-40, - 2.6303377692148776e-40, - 2.6342356303921525e-40, - 2.6381335671449843e-40, - 2.642031181672786e-40, - 2.6459280761510877e-40, - 2.649823852755421e-40, - 2.653718113661317e-40, - 2.6576104686221393e-40, - 2.6615006391881906e-40, - 2.66538854175506e-40, - 2.669274187947097e-40, - 2.6731575616573606e-40, - 2.6770384953715385e-40, - 2.6809167742811373e-40, - 2.6847921835603517e-40, - 2.688664508383378e-40, - 2.69253353392441e-40, - 2.696399042115652e-40, - 2.7002607686651097e-40, - 2.7041183520981362e-40, - 2.7079713792215806e-40, - 2.711819467287278e-40, - 2.715662464251302e-40, - 2.719500320174481e-40, - 2.7233329855721094e-40, - 2.7271604109594748e-40, - 2.73098254685043e-40, - 2.7347993448206207e-40, - 2.73861078290135e-40, - 2.7424169592786163e-40, - 2.7462180742702196e-40, - 2.750014326593821e-40, - 2.753805798056472e-40, - 2.7575924661694534e-40, - 2.7613743047865166e-40, - 2.7651512877614117e-40, - 2.7689233889478853e-40, - 2.772690582715614e-40, - 2.7764529059866275e-40, - 2.780210478264896e-40, - 2.7839633497166835e-40, - 2.787711559976481e-40, - 2.791455174520517e-40, - 2.795194330606936e-40, - 2.7989291778569566e-40, - 2.8026598658917977e-40, - 2.806386544332678e-40, - 2.8101093628008137e-40, - 2.8138284463765343e-40, - 2.8175437636388486e-40, - 2.8212553163633462e-40, - 2.8249631535171586e-40, - 2.8286673219176027e-40, - 2.8323678233314707e-40, - 2.836064619223594e-40, - 2.8397576696436168e-40, - 2.8434469346432003e-40, - 2.847132374274004e-40, - 2.850813948963787e-40, - 2.8544916651004996e-40, - 2.8581655676009255e-40, - 2.86183560240987e-40, - 2.8655017015630256e-40, - 2.8691638066403218e-40, - 2.872821927032228e-40, - 2.8764761014867322e-40, - 2.88012636886951e-40, - 2.883772768046233e-40, - 2.8874153378825265e-40, - 2.8910541172064796e-40, - 2.8946891465483916e-40, - 2.8983205249173337e-40, - 2.9019484122088584e-40, - 2.9055729711067515e-40, - 2.9091943475360484e-40, - 2.912812602680344e-40, - 2.9164277710007435e-40, - 2.920039886948263e-40, - 2.9236489849739224e-40, - 2.927255099528739e-40, - 2.9308582698248362e-40, - 2.9344586020089074e-40, - 2.938056292905499e-40, - 2.9416515750363753e-40, - 2.9452446818210967e-40, - 2.948835866973427e-40, - 2.9524255037929414e-40, - 2.956014009229398e-40, - 2.9596018002965828e-40, - 2.9631892940082814e-40, - 2.9667769073782824e-40, - 2.9703650546357163e-40, - 2.9739541051247558e-40, - 2.977544403643153e-40, - 2.981136305034773e-40, - 2.9847301645240174e-40, - 2.9883263255060486e-40, - 2.9919249863855533e-40, - 2.9955262483486035e-40, - 2.999130210796386e-40, - 3.002736973143151e-40, - 3.006346634804183e-40, - 3.009959296098141e-40, - 3.013575099280184e-40, - 3.01719419561072e-40, - 3.0208166621772667e-40, - 3.0244425694259346e-40, - 3.0280719888041733e-40, - 3.0317050897573173e-40, - 3.0353422207195757e-40, - 3.0389837491911716e-40, - 3.042630042672329e-40, - 3.046281468663269e-40, - 3.0499383946642166e-40, - 3.0536011773315043e-40, - 3.0572701645867494e-40, - 3.0609458517006283e-40, - 3.0646287775581803e-40, - 3.068319481045626e-40, - 3.0720184750136416e-40, - 3.075726023961168e-40, - 3.0794422546695794e-40, - 3.0831672924530537e-40, - 3.0869012626257743e-40, - 3.090644290501919e-40, - 3.094396499677274e-40, - 3.0981579596592665e-40, - 3.1019285746473136e-40, - 3.1057081136221386e-40, - 3.109496337404193e-40, - 3.113293006850596e-40, - 3.1170979834301452e-40, - 3.120911526584271e-40, - 3.124733994228008e-40, - 3.1285657442763845e-40, - 3.1324071346444358e-40, - 3.136258523247193e-40, - 3.140120263449754e-40, - 3.1439926541843014e-40, - 3.147875839446653e-40, - 3.1517698865786553e-40, - 3.155674862012127e-40, - 3.1595908320421645e-40, - 3.16351773633108e-40, - 3.167455153470416e-40, - 3.171402598120004e-40, - 3.1753595849129953e-40, - 3.1793256283951566e-40, - 3.183300243094391e-40, - 3.1872829342081415e-40, - 3.1912731620045406e-40, - 3.195270457581561e-40, - 3.1992743905234128e-40, - 3.2032845305327257e-40, - 3.20730044731664e-40, - 3.211321766960832e-40, - 3.21534831264185e-40, - 3.219379950579193e-40, - 3.223416546992371e-40, - 3.2274579681008815e-40, - 3.23150408012423e-40, - 3.235554759540512e-40, - 3.2396099467430133e-40, - 3.2436695027989284e-40, - 3.247733233036982e-40, - 3.251800942416744e-40, - 3.2558724358977784e-40, - 3.2599475072531e-40, - 3.2640258637734486e-40, - 3.2681071724466507e-40, - 3.2721911000349554e-40, - 3.2762773133006144e-40, - 3.280365479005878e-40, - 3.284455259590986e-40, - 3.288546244225473e-40, - 3.292638059710277e-40, - 3.2967304258818327e-40, - 3.300823065940764e-40, - 3.3049157030876903e-40, - 3.3090080612248845e-40, - 3.31309989973639e-40, - 3.3171910295884075e-40, - 3.321281265809934e-40, - 3.3253704234299583e-40, - 3.3294583174774772e-40, - 3.3335447630451877e-40, - 3.3376296075447273e-40, - 3.3417127453401166e-40, - 3.3457939792256834e-40, - 3.3498730938890777e-40, - 3.353949874017951e-40, - 3.358024104299952e-40, - 3.3620955652562928e-40, - 3.366164000975457e-40, - 3.3702291367149553e-40, - 3.3742906975745097e-40, - 3.378348408642689e-40, - 3.3824019949443406e-40, - 3.3864511836012592e-40, - 3.3904957475590732e-40, - 3.394535610574577e-40, - 3.398570802779456e-40, - 3.402601358158253e-40, - 3.406627310695502e-40, - 3.4106486943757474e-40, - 3.4146655509784467e-40, - 3.4186779596096462e-40, - 3.422686010535188e-40, - 3.4266897940229213e-40, - 3.430689400340692e-40, - 3.434684919756353e-40, - 3.438676437486524e-40, - 3.4426639918806187e-40, - 3.4466475676616835e-40, - 3.4506271334763973e-40, - 3.4546026580132714e-40, - 3.4585741099688065e-40, - 3.462541458039511e-40, - 3.4665046638073677e-40, - 3.4704636559669314e-40, - 3.4744183537164596e-40, - 3.4783686762532857e-40, - 3.482314542774744e-40, - 3.486255872478167e-40, - 3.490192585067023e-40, - 3.4941246059833816e-40, - 3.4980518766213564e-40, - 3.501974344934943e-40, - 3.5058919589138403e-40, - 3.5098046665477395e-40, - 3.5137124158263333e-40, - 3.5176151541124485e-40, - 3.5215128234651743e-40, - 3.525405363272645e-40, - 3.5292927129024604e-40, - 3.53317481172222e-40, - 3.5370515990995255e-40, - 3.540923016632968e-40, - 3.54478903394588e-40, - 3.5486496182567488e-40, - 3.552504720433019e-40, - 3.556354290983086e-40, - 3.5601982804153444e-40, - 3.564036639238188e-40, - 3.567869318394724e-40, - 3.571696287238951e-40, - 3.5755175399543547e-40, - 3.579333072478966e-40, - 3.58314288075081e-40, - 3.5869469608794364e-40, - 3.590745311244358e-40, - 3.5945379219788853e-40, - 3.598324783944331e-40, - 3.6021059204560016e-40, - 3.6058813583790275e-40, - 3.6096511245785372e-40, - 3.6134152459196637e-40, - 3.617173749267535e-40, - 3.6209266592579944e-40, - 3.6246739844683305e-40, - 3.628415726438436e-40, - 3.6321518866783045e-40, - 3.635882466697923e-40, - 3.639607468007286e-40, - 3.643326899694513e-40, - 3.6470408458060573e-40, - 3.6507494562440084e-40, - 3.654452895257136e-40, - 3.658151323340204e-40, - 3.661844890898829e-40, - 3.665533746723278e-40, - 3.6692180396038754e-40, - 3.672897920557593e-40, - 3.6765735487318814e-40, - 3.680245085129416e-40, - 3.683912690752874e-40, - 3.687576526604931e-40, - 3.6912367536882655e-40, - 3.694893524272078e-40, - 3.698546955475155e-40, - 3.702197164337448e-40, - 3.705844270503757e-40, - 3.7094883936188856e-40, - 3.7131296533276395e-40, - 3.716768169274823e-40, - 3.720404061105142e-40, - 3.724037447831344e-40, - 3.727668456792475e-40, - 3.731297233193197e-40, - 3.734923924000621e-40, - 3.738548676181873e-40, - 3.742171636704273e-40, - 3.745792962119547e-40, - 3.7494128297275715e-40, - 3.7530313734993574e-40, - 3.756648715985051e-40, - 3.760264979734802e-40, - 3.763880287298758e-40, - 3.767494761227063e-40, - 3.7711085240698705e-40, - 3.77472169225065e-40, - 3.7783343453841095e-40, - 3.781946549402538e-40, - 3.785558370215414e-40, - 3.789169873732214e-40, - 3.792781125858467e-40, - 3.796392176850998e-40, - 3.800003029504198e-40, - 3.8036138054118085e-40, - 3.807224675012255e-40, - 3.810835808789297e-40, - 3.814447377226691e-40, - 3.818059550808198e-40, - 3.821672500017581e-40, - 3.8252863972878e-40, - 3.8289014699194855e-40, - 3.832518006313649e-40, - 3.836136298071581e-40, - 3.8397566367945645e-40, - 3.84337931408389e-40, - 3.847004624367269e-40, - 3.850632915095672e-40, - 3.854264386140965e-40, - 3.857899047803981e-40, - 3.861536903336256e-40, - 3.86517795632152e-40, - 3.868822218406655e-40 - ] - }, - "nutau_bar": { - "cc": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.2969484639691336e-50, - 4.702437376030892e-50, - 5.559321935259543e-50, - 1.717244830334942e-49, - 2.274025586853926e-49, - 2.5202532267884214e-49, - 1.1187205401855181e-48, - 2.0128964912141887e-48, - 2.294177252586927e-48, - 2.5059738987101453e-48, - 4.765501149981677e-48, - 6.654636460811846e-48, - 7.241091490606929e-48, - 4.0207884768489853e-44, - 1.1496728677834028e-43, - 2.0444331405336916e-43, - 3.0474638693681562e-43, - 4.134113265708062e-43, - 5.285441528202697e-43, - 6.514542704128091e-43, - 8.035573606193465e-43, - 9.98986234742677e-43, - 1.2333979271742576e-42, - 1.487478462363322e-42, - 1.7422758557435647e-42, - 1.99820962594795e-42, - 2.257319133348927e-42, - 2.5193958599019017e-42, - 2.7850365191410513e-42, - 3.056114338800292e-42, - 3.336024644686939e-42, - 3.6278807660884216e-42, - 3.929723807303862e-42, - 4.236548698925636e-42, - 4.548272291323911e-42, - 4.867235393138835e-42, - 5.193615453984152e-42, - 5.5264061980174143e-42, - 5.861959771284179e-42, - 6.192590562286446e-42, - 6.514104943596831e-42, - 6.83016775874649e-42, - 7.146802716718381e-42, - 7.465335029784422e-42, - 7.783156555677592e-42, - 8.097362489505875e-42, - 8.407613808092863e-42, - 8.71729356360312e-42, - 9.029201669049576e-42, - 9.346023933365965e-42, - 9.66646570349598e-42, - 9.988767558535285e-42, - 1.0312054739748177e-41, - 1.063428018814487e-41, - 1.095395726071453e-41, - 1.1269129185651962e-41, - 1.157872972831765e-41, - 1.1885957520048346e-41, - 1.219590366892118e-41, - 1.2512823768914255e-41, - 1.2836537712514633e-41, - 1.3165157056384718e-41, - 1.3494368080304934e-41, - 1.3820211898106704e-41, - 1.4144086886476706e-41, - 1.4470267259860914e-41, - 1.4801895978574466e-41, - 1.5141633294226436e-41, - 1.5486443943756097e-41, - 1.5831898866293672e-41, - 1.6172572002862563e-41, - 1.6503544412588133e-41, - 1.6826791993725523e-41, - 1.7148247169574767e-41, - 1.7473307727786496e-41, - 1.7806949706749017e-41, - 1.8150305548873773e-41, - 1.849903368370273e-41, - 1.8846502224725057e-41, - 1.9193215698612903e-41, - 1.9529399250332677e-41, - 1.985911146209232e-41, - 2.0190718852252387e-41, - 2.0527154868093088e-41, - 2.086734414549034e-41, - 2.1221102792665436e-41, - 2.1581740660958601e-41, - 2.194207039166502e-41, - 2.230516685220474e-41, - 2.2651042413577654e-41, - 2.2989713400977445e-41, - 2.3318674843737e-41, - 2.3644374000555155e-41, - 2.396919459735874e-41, - 2.4295878352485726e-41, - 2.463015523587733e-41, - 2.497421287248345e-41, - 2.532490276977922e-41, - 2.567924276939692e-41, - 2.6042177148617067e-41, - 2.640904771112934e-41, - 2.6779921714309163e-41, - 2.7154600189913115e-41, - 2.7532240780631126e-41, - 2.7919810854444344e-41, - 2.830314463365912e-41, - 2.8687326265327267e-41, - 2.906605087279198e-41, - 2.944116759693983e-41, - 2.9805090765107195e-41, - 3.016169892465196e-41, - 3.050840273192801e-41, - 3.0846708979843644e-41, - 3.1182103615987205e-41, - 3.151830208595544e-41, - 3.185913866693188e-41, - 3.2212760187180067e-41, - 3.2582868417021496e-41, - 3.2966668056275615e-41, - 3.337025391556937e-41, - 3.378592025393459e-41, - 3.420538384186132e-41, - 3.4622359752567964e-41, - 3.5030568896351776e-41, - 3.5423403369222186e-41, - 3.5799353932428204e-41, - 3.61610565469954e-41, - 3.651066994957593e-41, - 3.685525135800993e-41, - 3.7206933274347975e-41, - 3.7563651194711653e-41, - 3.792847374857886e-41, - 3.830841588948465e-41, - 3.869990699264483e-41, - 3.909639627419936e-41, - 3.949572356167356e-41, - 3.9894422456951967e-41, - 4.0284206528993254e-41, - 4.0663444539070593e-41, - 4.1036566808319927e-41, - 4.1400259376057446e-41, - 4.175640145184428e-41, - 4.211483946311845e-41, - 4.2483442494238677e-41, - 4.2859275179706736e-41, - 4.3246159395356977e-41, - 4.3651213234691653e-41, - 4.4072788504974425e-41, - 4.450712946856617e-41, - 4.4949021756531585e-41, - 4.53940908566217e-41, - 4.5839171087655043e-41, - 4.627690098935276e-41, - 4.670262493627086e-41, - 4.711742504087449e-41, - 4.751830106755628e-41, - 4.790819571508111e-41, - 4.829310024255607e-41, - 4.86713039061881e-41, - 4.904377037961528e-41, - 4.94138827581632e-41, - 4.978254492392976e-41, - 5.015350158986221e-41, - 5.053057060335966e-41, - 5.091300227857508e-41, - 5.129605232926322e-41, - 5.168095198783388e-41, - 5.207133834301077e-41, - 5.246334514771952e-41, - 5.285840256108698e-41, - 5.326105873506985e-41, - 5.366880990519851e-41, - 5.408005638994632e-41, - 5.449582514450206e-41, - 5.491637788632886e-41, - 5.534163640821299e-41, - 5.577124194634889e-41, - 5.620081150334169e-41, - 5.662658627734376e-41, - 5.705059969963322e-41, - 5.747190936665118e-41, - 5.788772246457566e-41, - 5.829837771455137e-41, - 5.870369870384327e-41, - 5.910265909691073e-41, - 5.94966139068428e-41, - 5.988772420814161e-41, - 6.027693764248135e-41, - 6.066443882845254e-41, - 6.104910219144232e-41, - 6.143113562232362e-41, - 6.181316019940614e-41, - 6.219783811530572e-41, - 6.258615493563064e-41, - 6.297941709966686e-41, - 6.33798100532988e-41, - 6.378886529415463e-41, - 6.420702822383354e-41, - 6.463552126549568e-41, - 6.50763946785174e-41, - 6.552918216344402e-41, - 6.599175858526299e-41, - 6.646260912338727e-41, - 6.693905193915583e-41, - 6.741776612280933e-41, - 6.789723189685498e-41, - 6.837617804025343e-41, - 6.885206649856765e-41, - 6.932270056251252e-41, - 6.978546456854485e-41, - 7.023648478837735e-41, - 7.067678390920498e-41, - 7.111163991356305e-41, - 7.154184518012094e-41, - 7.196385902662638e-41, - 7.237810828728913e-41, - 7.278798043592089e-41, - 7.319408225119287e-41, - 7.359704070784437e-41, - 7.40010333124924e-41, - 7.440844412806994e-41, - 7.481739102165268e-41, - 7.522728268749554e-41, - 7.564064437713138e-41, - 7.605836714550407e-41, - 7.64780132157962e-41, - 7.689813583676608e-41, - 7.731896944062505e-41, - 7.774091149187754e-41, - 7.816443573844398e-41, - 7.858884571291317e-41, - 7.90117175433284e-41, - 7.943301535736643e-41, - 7.985606879998264e-41, - 8.028207104733716e-41, - 8.070932570974382e-41, - 8.113686404842349e-41, - 8.156535114215482e-41, - 8.199622803576864e-41, - 8.243125632739454e-41, - 8.287114925012778e-41, - 8.331472141139499e-41, - 8.376064056642602e-41, - 8.420838979185641e-41, - 8.465816005837224e-41, - 8.511099810058538e-41, - 8.556783529905781e-41, - 8.602655393617773e-41, - 8.648363113772661e-41, - 8.693945429921159e-41, - 8.739741302439878e-41, - 8.78571688940357e-41, - 8.83144982295167e-41, - 8.876803136865624e-41, - 8.922083260147331e-41, - 8.967418812171755e-41, - 9.012443128229434e-41, - 9.056864125841573e-41, - 9.101067220534717e-41, - 9.14552908552613e-41, - 9.190056712958401e-41, - 9.234181934042405e-41, - 9.277888899989293e-41, - 9.321502740592635e-41, - 9.365167169618406e-41, - 9.408785961674556e-41, - 9.45230834734954e-41, - 9.495866106918469e-41, - 9.539589575886148e-41, - 9.583437052851029e-41, - 9.627283371244507e-41, - 9.671107280571838e-41, - 9.715040405142869e-41, - 9.759174614975732e-41, - 9.803480184242407e-41, - 9.847926413810207e-41, - 9.89244437899679e-41, - 9.936898559052999e-41, - 9.981191169218203e-41, - 1.0025300990943476e-40, - 1.0069221758063362e-40, - 1.011302057141944e-40, - 1.0156794002476386e-40, - 1.0200517286000838e-40, - 1.0244039847842312e-40, - 1.02873018353439e-40, - 1.0330480080638717e-40, - 1.0373751650015169e-40, - 1.041718208657981e-40, - 1.0460834290890721e-40, - 1.0504817117715744e-40, - 1.054920775617263e-40, - 1.0594076047033509e-40, - 1.063955874069665e-40, - 1.0685892259159861e-40, - 1.0733247511793238e-40, - 1.0781587886841495e-40, - 1.0830814662703394e-40, - 1.0880894217454549e-40, - 1.0931888739971957e-40, - 1.0983823978618827e-40, - 1.1036490712363978e-40, - 1.1089615118344605e-40, - 1.1142962037484803e-40, - 1.1196399701587027e-40, - 1.1249819025856758e-40, - 1.1303120043584883e-40, - 1.13561725744081e-40, - 1.140881320729318e-40, - 1.1460850084573608e-40, - 1.1512106127913145e-40, - 1.1562471008459446e-40, - 1.161186395007147e-40, - 1.1660234386348225e-40, - 1.1707685463634943e-40, - 1.1754370774973585e-40, - 1.1800397751161745e-40, - 1.1845793363012012e-40, - 1.1890579418737429e-40, - 1.1934861057397598e-40, - 1.1978832786749796e-40, - 1.2022679832584879e-40, - 1.2066463533501674e-40, - 1.2110177360362408e-40, - 1.2153846609510943e-40, - 1.2197633231292947e-40, - 1.2241739253311574e-40, - 1.2286258402443252e-40, - 1.2331120781125602e-40, - 1.2376246382511233e-40, - 1.2421635442918053e-40, - 1.246732050120723e-40, - 1.2513312297548377e-40, - 1.2559571365862108e-40, - 1.2606061387362208e-40, - 1.2652744237556249e-40, - 1.2699587834246079e-40, - 1.2746552796698569e-40, - 1.2793636095442908e-40, - 1.2840903053775102e-40, - 1.2888423926489478e-40, - 1.2936218488696332e-40, - 1.298413813348824e-40, - 1.303199648370173e-40, - 1.3079667818275022e-40, - 1.312720777702103e-40, - 1.3174746309817178e-40, - 1.3222350207172409e-40, - 1.326995705755667e-40, - 1.3317442550261665e-40, - 1.336474290925944e-40, - 1.3411906688659638e-40, - 1.345901803415861e-40, - 1.3506105706909597e-40, - 1.3553063156866794e-40, - 1.359976661548124e-40, - 1.364618486433013e-40, - 1.3692450475629765e-40, - 1.3738705907346632e-40, - 1.3785023735374736e-40, - 1.383134756411773e-40, - 1.3877605755874285e-40, - 1.3923770561425661e-40, - 1.3969904527099227e-40, - 1.4016080207679355e-40, - 1.406235004974699e-40, - 1.4108741575875297e-40, - 1.4155290108097844e-40, - 1.420205192582657e-40, - 1.4249079515464067e-40, - 1.4296407297120254e-40, - 1.4344038048802367e-40, - 1.4391886102198645e-40, - 1.4439847477193735e-40, - 1.448785412271286e-40, - 1.4536002174024977e-40, - 1.4584459966918048e-40, - 1.4633364208765337e-40, - 1.4682693114636249e-40, - 1.4732277991751635e-40, - 1.478190624923274e-40, - 1.48314565074772e-40, - 1.4880926616542506e-40, - 1.4930465808008084e-40, - 1.4980235275935558e-40, - 1.5030339680170637e-40, - 1.5080729159449547e-40, - 1.5131270518896945e-40, - 1.518179821996764e-40, - 1.5232229001553162e-40, - 1.5282545580192644e-40, - 1.5332782955340064e-40, - 1.538296305560485e-40, - 1.5433073832790087e-40, - 1.5483073267052258e-40, - 1.5532915442058707e-40, - 1.5582575516439164e-40, - 1.563207174359086e-40, - 1.5681442180270796e-40, - 1.5730719407943186e-40, - 1.577990761011617e-40, - 1.5828959000775175e-40, - 1.587781856952409e-40, - 1.5926434146757935e-40, - 1.5974832183491768e-40, - 1.602309077957543e-40, - 1.6071288876736282e-40, - 1.6119469703967189e-40, - 1.6167594758462741e-40, - 1.6215612790662271e-40, - 1.626347661033381e-40, - 1.631118254963639e-40, - 1.635875790855943e-40, - 1.6406229040217562e-40, - 1.6453614918925472e-40, - 1.6500939979992039e-40, - 1.6548231169408213e-40, - 1.6595520798811357e-40, - 1.664283740730018e-40, - 1.6690202323064833e-40, - 1.6737650885817463e-40, - 1.6785211403203686e-40, - 1.6832910505446968e-40, - 1.688077145031005e-40, - 1.6928793154945503e-40, - 1.6976974321200304e-40, - 1.7025303028568101e-40, - 1.7073769697485933e-40, - 1.7122379582459432e-40, - 1.7171149674466715e-40, - 1.7220100846856351e-40, - 1.726925336334466e-40, - 1.7318587286074157e-40, - 1.736803176321391e-40, - 1.7417513450488574e-40, - 1.7466974443497166e-40, - 1.751644365660663e-40, - 1.756599119607656e-40, - 1.761568528886113e-40, - 1.7665554769564223e-40, - 1.7715517657297038e-40, - 1.7765472458481107e-40, - 1.7815321631309241e-40, - 1.7865025931860851e-40, - 1.791460942563278e-40, - 1.7964099891670306e-40, - 1.8013521942064625e-40, - 1.8062877276968192e-40, - 1.8112157835054268e-40, - 1.8161347785467895e-40, - 1.8210431894822973e-40, - 1.8259424387018707e-40, - 1.830834528589696e-40, - 1.8357220123238493e-40, - 1.840607748037677e-40, - 1.84549285139676e-40, - 1.8503790929622284e-40, - 1.855269333126061e-40, - 1.860164831189359e-40, - 1.8650649566212403e-40, - 1.8699682838844185e-40, - 1.874873064851544e-40, - 1.879777291181639e-40, - 1.884682756951406e-40, - 1.88959208351807e-40, - 1.894508014511057e-40, - 1.8994350678258766e-40, - 1.904374749812538e-40, - 1.909325903102236e-40, - 1.9142877923430695e-40, - 1.9192578042740636e-40, - 1.9242328442157657e-40, - 1.929212730076682e-40, - 1.9341967118464057e-40, - 1.9391815569871744e-40, - 1.9441636667507783e-40, - 1.9491384334131616e-40, - 1.954102220278692e-40, - 1.9590556953805384e-40, - 1.96400039790728e-40, - 1.968937606439019e-40, - 1.973869383460781e-40, - 1.9787975394682087e-40, - 1.9837242504994356e-40, - 1.9886517941437315e-40, - 1.993581946051899e-40, - 1.9985157509606125e-40, - 2.003454302095011e-40, - 2.0083987591615617e-40, - 2.013350653549693e-40, - 2.0183108791236447e-40, - 2.0232803191928003e-40, - 2.0282595094198444e-40, - 2.033248909924399e-40, - 2.0382503331098866e-40, - 2.0432660190404697e-40, - 2.048297895177631e-40, - 2.05334805819858e-40, - 2.058418961173653e-40, - 2.063512907550694e-40, - 2.0686328210133748e-40, - 2.0737817384098928e-40, - 2.0789605274284346e-40, - 2.084168374427084e-40, - 2.0894041988506114e-40, - 2.094667151334234e-40, - 2.099957223496435e-40, - 2.1052754023080778e-40, - 2.110622708098462e-40, - 2.1159997982052773e-40, - 2.1214056024129337e-40, - 2.126837334337517e-40, - 2.1322919923033783e-40, - 2.1377670211043417e-40, - 2.143260028638732e-40, - 2.148766993502606e-40, - 2.1542829533266552e-40, - 2.1598024242389638e-40, - 2.1653201343734422e-40, - 2.1708342333104135e-40, - 2.17634585588183e-40, - 2.181856318992212e-40, - 2.1873667783348633e-40, - 2.1928751755963426e-40, - 2.1983748422655833e-40, - 2.2038591236791873e-40, - 2.2093220291302472e-40, - 2.2147587494827335e-40, - 2.2201675745118284e-40, - 2.225546829516139e-40, - 2.2308936087635786e-40, - 2.236204925050071e-40, - 2.2414809779051896e-40, - 2.2467262952691646e-40, - 2.251945803925521e-40, - 2.2571444218975896e-40, - 2.2623248620860497e-40, - 2.2674840123218023e-40, - 2.272617404179607e-40, - 2.277721778363697e-40, - 2.2827955918141662e-40, - 2.287842176561718e-40, - 2.2928682042877815e-40, - 2.297879465089776e-40, - 2.302881553581966e-40, - 2.3078781902931437e-40, - 2.3128697789020975e-40, - 2.317856184972608e-40, - 2.3228371607561607e-40, - 2.327811407449521e-40, - 2.332779002520441e-40, - 2.337742929700047e-40, - 2.342706931107569e-40, - 2.3476757343749986e-40, - 2.3526542446937695e-40, - 2.3576451613315923e-40, - 2.3626488131483163e-40, - 2.3676650289553785e-40, - 2.372693568287148e-40, - 2.3777337912619952e-40, - 2.3827852856288975e-40, - 2.387847084844741e-40, - 2.3929176131915447e-40, - 2.3979951086983826e-40, - 2.4030787335491e-40, - 2.4081677897973503e-40, - 2.4132621456695647e-40, - 2.4183623759326043e-40, - 2.4234685199205563e-40, - 2.428580138801219e-40, - 2.4336971133050985e-40, - 2.43881941818746e-40, - 2.44394705606892e-40, - 2.449080638484846e-40, - 2.4542203613535344e-40, - 2.459366275892313e-40, - 2.46451843601919e-40, - 2.4696765419376495e-40, - 2.4748392756713487e-40, - 2.480005436767155e-40, - 2.485173844245362e-40, - 2.4903432962847498e-40, - 2.495512780946604e-40, - 2.5006822736026887e-40, - 2.5058521638016532e-40, - 2.511022867251534e-40, - 2.5161948013491486e-40, - 2.5213685133477514e-40, - 2.526544675045678e-40, - 2.5317233809108346e-40, - 2.5369045874359968e-40, - 2.542088429816817e-40, - 2.5472746746503905e-40, - 2.552462168991067e-40, - 2.5576501007405835e-40, - 2.5628379080245086e-40, - 2.568024955395765e-40, - 2.5732112475716594e-40, - 2.5783975440740157e-40, - 2.583584826157456e-40, - 2.5887734835554084e-40, - 2.593963463407666e-40, - 2.599154504022366e-40, - 2.6043467891668025e-40, - 2.609540659600837e-40, - 2.614736620106162e-40, - 2.61993610597194e-40, - 2.6251405373514e-40, - 2.630349649181427e-40, - 2.6355626612332445e-40, - 2.6407785634164214e-40, - 2.6459960120805773e-40, - 2.6512126775563745e-40, - 2.656427772726315e-40, - 2.661641154527952e-40, - 2.666852688981252e-40, - 2.6720621396802144e-40, - 2.677269586086258e-40, - 2.6824760335018513e-40, - 2.6876825121355888e-40, - 2.692890133537363e-40, - 2.698100170093733e-40, - 2.703313709540735e-40, - 2.708530976516066e-40, - 2.7137508754000095e-40, - 2.7189720996609217e-40, - 2.724193324587344e-40, - 2.729413293360039e-40, - 2.7346309211986853e-40, - 2.739845817209038e-40, - 2.745059055248112e-40, - 2.7502719567296156e-40, - 2.7554859491255553e-40, - 2.760701503918543e-40, - 2.7659184401782216e-40, - 2.771136064845634e-40, - 2.7763521904257268e-40, - 2.7815644095288913e-40, - 2.78677161379603e-40, - 2.7919743555495053e-40, - 2.797173430462652e-40, - 2.802369824611857e-40, - 2.80756530389912e-40, - 2.8127613742813682e-40, - 2.8179584209801362e-40, - 2.8231566534266554e-40, - 2.8283562811142025e-40, - 2.833557533213791e-40, - 2.838760771443986e-40, - 2.8439666324022865e-40, - 2.849175861513102e-40, - 2.8543891348107496e-40, - 2.8596067218340194e-40, - 2.8648287095334743e-40, - 2.870054947320452e-40, - 2.875285191568366e-40, - 2.880519534463709e-40, - 2.8857582072726903e-40, - 2.89100144097454e-40, - 2.8962492575955225e-40, - 2.901501270146457e-40, - 2.9067576721238674e-40, - 2.912018740299475e-40, - 2.9172846849426704e-40, - 2.922555700187785e-40, - 2.927832037987292e-40, - 2.933113550711625e-40, - 2.9383988929106908e-40, - 2.9436862801435644e-40, - 2.948973825929862e-40, - 2.9542599589925355e-40, - 2.9595440852479186e-40, - 2.9648260167898785e-40, - 2.9701066828409825e-40, - 2.975387915384106e-40, - 2.980671550622379e-40, - 2.9859590929041766e-40, - 2.9912517812093826e-40, - 2.9965508432743718e-40, - 3.001856964565946e-40, - 3.0071690560617555e-40, - 3.012485395452067e-40, - 3.017803375360739e-40, - 3.0231201250228093e-40, - 3.0284328801394705e-40, - 3.0337391234660406e-40, - 3.039037496025883e-40, - 3.04432868663684e-40, - 3.049615068515568e-40, - 3.0548990461957927e-40, - 3.060182985524174e-40, - 3.0654692522802595e-40, - 3.070759957178315e-40, - 3.0760556922588422e-40, - 3.0813563639784747e-40, - 3.0866618678376726e-40, - 3.0919720880626455e-40, - 3.097286885787939e-40, - 3.1026062995936527e-40, - 3.1079309825605775e-40, - 3.1132617698042596e-40, - 3.1185996127132367e-40, - 3.1239455072520887e-40, - 3.12930044663231e-40, - 3.1346653349670773e-40, - 3.1400406351065135e-40, - 3.1454265612949534e-40, - 3.15082334761277e-40, - 3.156231229852024e-40, - 3.1616505327244134e-40, - 3.1670812205795194e-40, - 3.1725223591298303e-40, - 3.177972929378541e-40, - 3.183431860321248e-40, - 3.188897810667215e-40, - 3.1943693697544773e-40, - 3.199845467225506e-40, - 3.2053252594757422e-40, - 3.2108079823402326e-40, - 3.2162929129144238e-40, - 3.2217794279067116e-40, - 3.227266975523069e-40, - 3.232755372167503e-40, - 3.2382446314135774e-40, - 3.243734771773938e-40, - 3.249225811566017e-40, - 3.2547177028908107e-40, - 3.2602101785745733e-40, - 3.2657021590872056e-40, - 3.2711920069831492e-40, - 3.2766780705397186e-40, - 3.2821586475567874e-40, - 3.2876318915680433e-40, - 3.293096015941752e-40, - 3.2985495268138253e-40, - 3.3039910259845746e-40, - 3.309419158890737e-40, - 3.314832511058698e-40, - 3.3202296551065086e-40, - 3.3256093347285884e-40, - 3.330972130874972e-40, - 3.336319869476936e-40, - 3.3416544520842916e-40, - 3.346977780761268e-40, - 3.352291761625137e-40, - 3.357598141356274e-40, - 3.362897123196008e-40, - 3.3681877923116186e-40, - 3.373469585577067e-40, - 3.3787420735463216e-40, - 3.384005085261994e-40, - 3.3892586213977008e-40, - 3.3945034179787306e-40, - 3.3997410385178798e-40, - 3.404973046925412e-40, - 3.410200686865047e-40, - 3.4154251081045782e-40, - 3.420647448770782e-40, - 3.4258685344833747e-40, - 3.431089146974117e-40, - 3.436310259083056e-40, - 3.4415328482132255e-40, - 3.4467578748829957e-40, - 3.4519862628537053e-40, - 3.4572188511066145e-40, - 3.4624560083611094e-40, - 3.4676977729354495e-40, - 3.47294418723734e-40, - 3.4781954394446414e-40, - 3.483451835430991e-40, - 3.4887134901719457e-40, - 3.4939807095325383e-40, - 3.4992542379100413e-40, - 3.504534510088955e-40, - 3.50982177825783e-40, - 3.5151162907220536e-40, - 3.520418390389368e-40, - 3.525728619138006e-40, - 3.5310468462102957e-40, - 3.5363728428385176e-40, - 3.5417063803410312e-40, - 3.54704722337424e-40, - 3.5523949039159387e-40, - 3.557748586170212e-40, - 3.5631081020916454e-40, - 3.568473594863236e-40, - 3.5738452109777835e-40, - 3.5792232283903342e-40, - 3.5846080370947823e-40, - 3.5900000173757697e-40, - 3.5953985986494482e-40, - 3.6008017836925228e-40, - 3.606207460678868e-40, - 3.6116135434945053e-40, - 3.61701794723178e-40, - 3.6224185874505065e-40, - 3.627813782711215e-40, - 3.6332037548060466e-40, - 3.6385893388925163e-40, - 3.643971360164083e-40, - 3.64935063015383e-40, - 3.654727902651467e-40, - 3.660103907698547e-40, - 3.6654783219677653e-40, - 3.6708491469783813e-40, - 3.676214238420958e-40, - 3.681571660372318e-40, - 3.686920182951853e-40, - 3.692258838218072e-40, - 3.697586936631934e-40, - 3.702906224555725e-40, - 3.708219623261523e-40, - 3.713529918433595e-40, - 3.718839889862879e-40, - 3.724152108228727e-40, - 3.72946845700121e-40, - 3.734790180784383e-40, - 3.740116573791184e-40, - 3.745446505204085e-40, - 3.750778844205551e-40, - 3.756112449960171e-40, - 3.761446066222429e-40, - 3.7667785151124e-40, - 3.772109550134053e-40, - 3.777440071159985e-40, - 3.7827710776647836e-40, - 3.788103672649989e-40, - 3.793438963512371e-40, - 3.798778043950286e-40, - 3.804122041258629e-40, - 3.809471961868108e-40, - 3.814828525753138e-40, - 3.820192362741829e-40, - 3.825564099715726e-40, - 3.830944363556369e-40, - 3.836333781146697e-40, - 3.841732790739251e-40, - 3.847141385082849e-40, - 3.852559270330113e-40, - 3.857985860712476e-40, - 3.863420558712343e-40, - 3.868862805564136e-40, - 3.874311994084876e-40, - 3.879767632192933e-40, - 3.885228968766389e-40, - 3.890695032364135e-40, - 3.896164982637171e-40, - 3.9016380402038585e-40, - 3.9071134167163214e-40, - 3.91259032169998e-40, - 3.918068003116739e-40, - 3.923546436489238e-40, - 3.929026150622576e-40, - 3.9345077715936475e-40, - 3.939991823787714e-40, - 3.9454786980860016e-40, - 3.950968728316892e-40, - 3.9564616050460816e-40, - 3.961955623635359e-40, - 3.967448768988422e-40, - 3.972939026135992e-40, - 3.97842439596601e-40, - 3.983903127825262e-40, - 3.9893737318415985e-40, - 3.994835153708665e-40, - 4.0002880872014586e-40, - 4.005733702053525e-40, - 4.011173096838662e-40, - 4.016607250894976e-40, - 4.022037128731091e-40, - 4.02746368041562e-40, - 4.0328876047132485e-40, - 4.038308342250249e-40, - 4.0437248799847004e-40, - 4.049136214705047e-40, - 4.0545413432398556e-40, - 4.0599392624176985e-40, - 4.065328966955299e-40, - 4.070709626569397e-40, - 4.076082062777022e-40, - 4.081448000690012e-40, - 4.086809175280969e-40, - 4.092167322119675e-40, - 4.097524196611652e-40, - 4.1028815831566314e-40, - 4.108241208931659e-40, - 4.113603863939569e-40, - 4.1189693501411554e-40, - 4.124337132449247e-40, - 4.1297065353596425e-40, - 4.135076848725948e-40, - 4.140447362323466e-40, - 4.1458173743174265e-40, - 4.151186506858287e-40, - 4.156555035877278e-40, - 4.161923502091709e-40, - 4.167292848414406e-40, - 4.172664173508832e-40, - 4.1780385758044436e-40, - 4.183417063105553e-40, - 4.188800298209714e-40, - 4.194188641865749e-40, - 4.199582387433233e-40, - 4.20498182540675e-40, - 4.2103870417601356e-40, - 4.215797975401912e-40, - 4.2212147135023675e-40, - 4.226637338254748e-40, - 4.232065769452157e-40, - 4.237499789536244e-40, - 4.2429390854549045e-40, - 4.248383105987142e-40, - 4.253831274966365e-40, - 4.259283245510202e-40, - 4.264738817083832e-40, - 4.270197815429049e-40, - 4.275660197005335e-40, - 4.281125981131843e-40, - 4.28659518864796e-40, - 4.292067840563766e-40, - 4.2975439576171765e-40, - 4.303023525897814e-40, - 4.308506428058409e-40, - 4.313992513703909e-40, - 4.3194816264083746e-40, - 4.3249736096047055e-40, - 4.3304683050483964e-40, - 4.3359655844184566e-40, - 4.341465382464537e-40, - 4.3469676395353835e-40, - 4.352472314252956e-40, - 4.357979412503976e-40, - 4.363488950896858e-40, - 4.369000855440722e-40, - 4.374514985059752e-40, - 4.380031198036318e-40, - 4.385549352653012e-40, - 4.391069292920573e-40, - 4.396590819641278e-40, - 4.402113808539768e-40, - 4.407638047516148e-40, - 4.413163313276824e-40, - 4.418689382486627e-40, - 4.424216030759388e-40, - 4.429742988254231e-40, - 4.435269971073522e-40, - 4.440796623616353e-40, - 4.446322443879886e-40, - 4.4518470644905125e-40, - 4.457370337257248e-40, - 4.462892268077533e-40, - 4.468412929219124e-40, - 4.473932392363194e-40, - 4.479450819458067e-40, - 4.484969160488748e-40, - 4.490488585719263e-40, - 4.496010118078315e-40, - 4.5015346290252255e-40, - 4.50706281267975e-40, - 4.512595347845866e-40, - 4.51813290655473e-40, - 4.5236751001857704e-40, - 4.529219038000047e-40, - 4.534761455107232e-40, - 4.540299086616994e-40, - 4.545828667676945e-40, - 4.551346992520403e-40, - 4.55685102676249e-40, - 4.562337795847954e-40, - 4.567807561445644e-40, - 4.57326534191958e-40, - 4.5787165769840195e-40, - 4.584166653693995e-40, - 4.589620687759771e-40, - 4.595083828691436e-40, - 4.600561188724981e-40, - 4.606057455996194e-40, - 4.61157227844401e-40 - ], - "nc": [ - 4.363134074343802e-46, - 1.249927238113565e-43, - 4.230601983535537e-43, - 7.139083232034761e-43, - 9.885722220147976e-43, - 1.2809297909766556e-42, - 1.5751708768312575e-42, - 1.8616384324594746e-42, - 2.147830357605747e-42, - 2.4384697353144608e-42, - 2.7251630724855476e-42, - 3.022849975567152e-42, - 3.3209337696045066e-42, - 3.6180987160083864e-42, - 3.9139626858065537e-42, - 4.205164808940886e-42, - 4.4833403034052935e-42, - 4.7581571728961643e-42, - 5.02902809838999e-42, - 5.290309891532142e-42, - 5.544119815664289e-42, - 5.810793576043151e-42, - 6.058812478355052e-42, - 6.303868949575551e-42, - 6.544151760387974e-42, - 6.784103290980582e-42, - 7.024689408279429e-42, - 7.273503766509384e-42, - 7.513928942193384e-42, - 7.741199759625556e-42, - 7.966608178291135e-42, - 8.18618644477908e-42, - 8.415974083956625e-42, - 8.652495830069492e-42, - 8.888843524599616e-42, - 9.116111336772816e-42, - 9.335112307883922e-42, - 9.555962035265413e-42, - 9.783857832487834e-42, - 1.002311483761954e-41, - 1.0256162070436244e-41, - 1.0489682515693482e-41, - 1.0709087008676986e-41, - 1.0922803799348977e-41, - 1.112863623447581e-41, - 1.132459289401421e-41, - 1.1531123883727056e-41, - 1.1750900341078245e-41, - 1.1982624804697793e-41, - 1.222191791908875e-41, - 1.245694437823062e-41, - 1.268816161615682e-41, - 1.2906448791444441e-41, - 1.3115966680416578e-41, - 1.3315839936797876e-41, - 1.3505758852275527e-41, - 1.3701909970415396e-41, - 1.390559209426481e-41, - 1.4121906465760257e-41, - 1.4355763087987983e-41, - 1.4592214525737695e-41, - 1.4829416801048262e-41, - 1.505803424354525e-41, - 1.527281419095257e-41, - 1.5472039032375093e-41, - 1.5669182514619154e-41, - 1.5868934973859953e-41, - 1.6072439709941734e-41, - 1.628544551657567e-41, - 1.6502924177880607e-41, - 1.6724816540980115e-41, - 1.6944788898339238e-41, - 1.7156534919276352e-41, - 1.7358108972249033e-41, - 1.7556477731586405e-41, - 1.775073367332767e-41, - 1.7948513575687266e-41, - 1.8155910035000921e-41, - 1.8374332715220284e-41, - 1.8603623496745718e-41, - 1.8841329321285804e-41, - 1.90816608054691e-41, - 1.931964838418901e-41, - 1.9558272716873164e-41, - 1.9784024417847207e-41, - 1.9996888248490511e-41, - 2.020371568215012e-41, - 2.0402501252090513e-41, - 2.0595458066996605e-41, - 2.0781943880046546e-41, - 2.0968429281011204e-41, - 2.1160960801229216e-41, - 2.1355171928438985e-41, - 2.155194146964552e-41, - 2.175253370742391e-41, - 2.195698868170902e-41, - 2.2164902954587535e-41, - 2.2376133651247543e-41, - 2.2591231499437971e-41, - 2.2811261986139513e-41, - 2.303473544097885e-41, - 2.3258783107286387e-41, - 2.3480673327542754e-41, - 2.3695787118711444e-41, - 2.3903272117189847e-41, - 2.4104403837086457e-41, - 2.4299432921892494e-41, - 2.4490193893328055e-41, - 2.468041170872607e-41, - 2.487341461491222e-41, - 2.50704759405657e-41, - 2.527243969267914e-41, - 2.548193482825418e-41, - 2.570017312064547e-41, - 2.592594527531119e-41, - 2.6156654813006953e-41, - 2.6389442419283987e-41, - 2.662414124325181e-41, - 2.686091865639755e-41, - 2.709717378606322e-41, - 2.7329119574723146e-41, - 2.755551565578864e-41, - 2.777725873009744e-41, - 2.7993127461039575e-41, - 2.8203396303277385e-41, - 2.841060578345645e-41, - 2.8615047494565594e-41, - 2.8816350987422455e-41, - 2.901651755436084e-41, - 2.9217489687672615e-41, - 2.94188968258413e-41, - 2.96186791420618e-41, - 2.981505472646765e-41, - 3.0009937166397063e-41, - 3.0207327401147694e-41, - 3.040815683193576e-41, - 3.061094851544922e-41, - 3.081451904998269e-41, - 3.1018648751672464e-41, - 3.1224994776595076e-41, - 3.1435635535630355e-41, - 3.164992907288077e-41, - 3.186569775822948e-41, - 3.208200121484905e-41, - 3.2298882700074555e-41, - 3.2516085283096503e-41, - 3.2732898743577544e-41, - 3.2948313672523514e-41, - 3.3162029074044336e-41, - 3.3375146097292973e-41, - 3.358876393357682e-41, - 3.380255921490168e-41, - 3.4014527446433907e-41, - 3.422281490439122e-41, - 3.442760367884388e-41, - 3.463049378592786e-41, - 3.4833012902519594e-41, - 3.5035343334176867e-41, - 3.523668054420025e-41, - 3.543709123829029e-41, - 3.563765130745236e-41, - 3.583916368371609e-41, - 3.604170920626557e-41, - 3.6245262557423586e-41, - 3.644992775659105e-41, - 3.6655457974675463e-41, - 3.6861336151619256e-41, - 3.7067276183801477e-41, - 3.72732595679893e-41, - 3.747938139210813e-41, - 3.7685824282615907e-41, - 3.7892522905122965e-41, - 3.809900338848851e-41, - 3.8304315669968734e-41, - 3.8507972661736945e-41, - 3.871081661456077e-41, - 3.8913706498830924e-41, - 3.9116584685655055e-41, - 3.9319091085938065e-41, - 3.952168315510585e-41, - 3.972531398929953e-41, - 3.9930160023756383e-41, - 4.0136480276708844e-41, - 4.0345025705684714e-41, - 4.0556859730926985e-41, - 4.0771929672810985e-41, - 4.098933326189228e-41, - 4.120812202048905e-41, - 4.142819252684985e-41, - 4.1650487229021965e-41, - 4.1875941724427294e-41, - 4.210444441469377e-41, - 4.2334384184870085e-41, - 4.2563969120092164e-41, - 4.2792089452905945e-41, - 4.3018931514690424e-41, - 4.32448302548301e-41, - 4.346962485713069e-41, - 4.369230092441599e-41, - 4.3911941355039914e-41, - 4.4128279813251183e-41, - 4.4341839519823775e-41, - 4.4553239430032877e-41, - 4.4762607720659445e-41, - 4.49696698091213e-41, - 4.517442910865842e-41, - 4.5377205480144477e-41, - 4.5578483096686215e-41, - 4.5778724927076073e-41, - 4.59782235086115e-41, - 4.617712563987144e-41, - 4.6375516109418e-41, - 4.657374917106181e-41, - 4.677259728680439e-41, - 4.69729435773838e-41, - 4.717554851799885e-41, - 4.738071606856728e-41, - 4.758845647685767e-41, - 4.779850128608195e-41, - 4.801033463467052e-41, - 4.822318619977273e-41, - 4.843634471181518e-41, - 4.864964385652583e-41, - 4.88632355981567e-41, - 4.907736244549164e-41, - 4.929200835307233e-41, - 4.950698595455797e-41, - 4.972198784871945e-41, - 4.993677970853727e-41, - 5.015119138307908e-41, - 5.036494770191932e-41, - 5.057773229069182e-41, - 5.0788976250686e-41, - 5.099837384850839e-41, - 5.120579240525623e-41, - 5.141133372311416e-41, - 5.161531551127926e-41, - 5.181803629637202e-41, - 5.201974777486266e-41, - 5.222052466466092e-41, - 5.242043471822269e-41, - 5.261969207860705e-41, - 5.281862883714861e-41, - 5.301777140810054e-41, - 5.321754257299076e-41, - 5.341824103545665e-41, - 5.361983120062248e-41, - 5.382216156973634e-41, - 5.402510643038088e-41, - 5.422887207290533e-41, - 5.443403141485583e-41, - 5.464114262931696e-41, - 5.485069523885685e-41, - 5.506240130724814e-41, - 5.527549375543916e-41, - 5.548902937087503e-41, - 5.57022951604787e-41, - 5.591562253160617e-41, - 5.612968223239951e-41, - 5.634524382811765e-41, - 5.656273451271229e-41, - 5.678171273151812e-41, - 5.700139276034442e-41, - 5.722091353696847e-41, - 5.74397355704866e-41, - 5.765800376172016e-41, - 5.787618797700426e-41, - 5.809479091453471e-41, - 5.831391699290271e-41, - 5.853299301885677e-41, - 5.875122226085735e-41, - 5.896781161012682e-41, - 5.918244581508882e-41, - 5.939554815372319e-41, - 5.960777436119487e-41, - 5.98197817775568e-41, - 6.003184190189804e-41, - 6.024365732372645e-41, - 6.045481274858725e-41, - 6.066489765427895e-41, - 6.087376227598374e-41, - 6.10817230463572e-41, - 6.128919614523988e-41, - 6.149659744432231e-41, - 6.170427335024716e-41, - 6.191232268886321e-41, - 6.212076345443388e-41, - 6.232961780345477e-41, - 6.253880937164195e-41, - 6.274807563735009e-41, - 6.295710912332802e-41, - 6.316556945601686e-41, - 6.337320243665597e-41, - 6.358019830117075e-41, - 6.378694358520261e-41, - 6.399389820172807e-41, - 6.420150296900835e-41, - 6.440986897023023e-41, - 6.461879770680043e-41, - 6.482795972315897e-41, - 6.503701237482884e-41, - 6.524570518508075e-41, - 6.545399101185418e-41, - 6.566192423345365e-41, - 6.586958590151704e-41, - 6.607704921999796e-41, - 6.628433342342057e-41, - 6.649145755078087e-41, - 6.669845552541277e-41, - 6.690536186122624e-41, - 6.71122215023695e-41, - 6.731910299125468e-41, - 6.752601724189724e-41, - 6.773295870387185e-41, - 6.793992319878099e-41, - 6.814690417317284e-41, - 6.835393177624807e-41, - 6.856110077660428e-41, - 6.876850913749203e-41, - 6.89762430183005e-41, - 6.91843344766894e-41, - 6.939268953094225e-41, - 6.960116855069889e-41, - 6.98096325885434e-41, - 7.001799604248575e-41, - 7.022632072952298e-41, - 7.043479626333537e-41, - 7.064362835194694e-41, - 7.085301660788338e-41, - 7.106301205116043e-41, - 7.127343485129687e-41, - 7.148402019125591e-41, - 7.169449899930583e-41, - 7.190461507607927e-41, - 7.211428738304358e-41, - 7.232359531475138e-41, - 7.253264092318145e-41, - 7.274152665433381e-41, - 7.295035572130709e-41, - 7.315921147268983e-41, - 7.336818755189992e-41, - 7.357739903971376e-41, - 7.378696123397169e-41, - 7.399696631065893e-41, - 7.42073555158016e-41, - 7.441800209106987e-41, - 7.462877130872167e-41, - 7.483952838244109e-41, - 7.505015924782901e-41, - 7.526072615441053e-41, - 7.547136082191867e-41, - 7.568218728151557e-41, - 7.58933294917287e-41, - 7.610490504803679e-41, - 7.63169513038394e-41, - 7.652949659718416e-41, - 7.674260092176311e-41, - 7.695632491713974e-41, - 7.717072990762243e-41, - 7.73859052852436e-41, - 7.760192580140338e-41, - 7.781880723428346e-41, - 7.803656192817135e-41, - 7.825520222630771e-41, - 7.847471390372374e-41, - 7.869499142785245e-41, - 7.891591175685699e-41, - 7.913735220880369e-41, - 7.93591901017589e-41, - 7.958130635165852e-41, - 7.980362682059799e-41, - 8.002610589458165e-41, - 8.024869768796529e-41, - 8.047135631459058e-41, - 8.069403616660906e-41, - 8.091668556256526e-41, - 8.113922304572459e-41, - 8.136156317576382e-41, - 8.158362064253428e-41, - 8.180531009900606e-41, - 8.202654571238801e-41, - 8.224728448485882e-41, - 8.246752081036729e-41, - 8.268724807943703e-41, - 8.290645968224869e-41, - 8.312514933895603e-41, - 8.334331361324589e-41, - 8.356091644070785e-41, - 8.377792883938552e-41, - 8.399432377282028e-41, - 8.42100742045537e-41, - 8.442515315250687e-41, - 8.463955624411887e-41, - 8.485332480670539e-41, - 8.506650821370289e-41, - 8.527915587788121e-41, - 8.549131721155695e-41, - 8.570303901660174e-41, - 8.591435203492386e-41, - 8.6125287127249e-41, - 8.633587734716033e-41, - 8.654615575184646e-41, - 8.675615543392073e-41, - 8.69659165629967e-41, - 8.717549544911745e-41, - 8.738494767283232e-41, - 8.759432880848933e-41, - 8.780369443043657e-41, - 8.801310007422254e-41, - 8.822258552541787e-41, - 8.843216432843156e-41, - 8.864185129190781e-41, - 8.885166092779263e-41, - 8.9061607748032e-41, - 8.927170631569719e-41, - 8.948198647036249e-41, - 8.969247321905999e-41, - 8.990314348126865e-41, - 9.011396982401524e-41, - 9.032492483674345e-41, - 9.053598110431486e-41, - 9.074709987863071e-41, - 9.095826721372566e-41, - 9.116954146090461e-41, - 9.138098707173837e-41, - 9.159266849777322e-41, - 9.180465018012454e-41, - 9.201699681532165e-41, - 9.222970549404903e-41, - 9.244264249670507e-41, - 9.265565865663484e-41, - 9.286860480718266e-41, - 9.308133178169288e-41, - 9.329369192754437e-41, - 9.350558619642369e-41, - 9.37170606393433e-41, - 9.39281996162326e-41, - 9.413908755898083e-41, - 9.434980889947706e-41, - 9.456044801339712e-41, - 9.47710825248773e-41, - 9.498173690380167e-41, - 9.51923938539725e-41, - 9.540303451452615e-41, - 9.561364000810677e-41, - 9.582419145254472e-41, - 9.603466940849565e-41, - 9.624505120223966e-41, - 9.645531677004068e-41, - 9.666544786357023e-41, - 9.687542623528479e-41, - 9.708523363764217e-41, - 9.729485188610445e-41, - 9.750426776387508e-41, - 9.771351023674222e-41, - 9.792265093590537e-41, - 9.813176388384729e-41, - 9.834092310305086e-41, - 9.855020261599877e-41, - 9.875967743475101e-41, - 9.896942283580737e-41, - 9.91794320564996e-41, - 9.938965314610282e-41, - 9.960003378405454e-41, - 9.981052164979214e-41, - 1.0002106442275305e-40, - 1.0023160309788839e-40, - 1.004420705399628e-40, - 1.0065248959251156e-40, - 1.0086291057133606e-40, - 1.0107338379538026e-40, - 1.01283959595081e-40, - 1.0149468832026114e-40, - 1.0170562888480685e-40, - 1.019168367849935e-40, - 1.0212828355930373e-40, - 1.023399224550638e-40, - 1.0255170671959971e-40, - 1.0276358960023768e-40, - 1.0297552432212306e-40, - 1.0318745950224658e-40, - 1.0339935033915219e-40, - 1.0361121625266615e-40, - 1.0382309196866694e-40, - 1.0403501221303317e-40, - 1.0424701171164321e-40, - 1.044591251817845e-40, - 1.0467138450908756e-40, - 1.0488381180804733e-40, - 1.05096397372582e-40, - 1.0530911983258172e-40, - 1.0552195782099547e-40, - 1.0573488997079291e-40, - 1.0594789491509888e-40, - 1.061609556172856e-40, - 1.0637406983564074e-40, - 1.0658724136889071e-40, - 1.0680047740742556e-40, - 1.070137851930173e-40, - 1.0722717196503564e-40, - 1.0744064495403179e-40, - 1.0765420956800538e-40, - 1.0786785512049989e-40, - 1.0808155066037045e-40, - 1.0829526092461377e-40, - 1.0850895078240278e-40, - 1.0872258510291047e-40, - 1.0893612875530982e-40, - 1.0914954689349575e-40, - 1.0936281426717153e-40, - 1.0957594308848778e-40, - 1.0978897514941455e-40, - 1.1000195355409322e-40, - 1.1021492140666183e-40, - 1.104279218112588e-40, - 1.1064099787202234e-40, - 1.1085419219715215e-40, - 1.1106753447163e-40, - 1.1128100906356252e-40, - 1.1149458622678236e-40, - 1.117082359655643e-40, - 1.1192192828640185e-40, - 1.1213563319579204e-40, - 1.1234932054408777e-40, - 1.1256295596624113e-40, - 1.1277652742610119e-40, - 1.1299007361731227e-40, - 1.1320364541586595e-40, - 1.1341729376720774e-40, - 1.1363106961654463e-40, - 1.1384502390293195e-40, - 1.1405920884313018e-40, - 1.1427368246121876e-40, - 1.1448845503364002e-40, - 1.1470347137862933e-40, - 1.1491866520222217e-40, - 1.1513397021045429e-40, - 1.1534932010936105e-40, - 1.155646486049781e-40, - 1.1577988784552702e-40, - 1.1599497466786765e-40, - 1.1620990829160821e-40, - 1.1642474428700983e-40, - 1.1663954567781407e-40, - 1.1685437548776254e-40, - 1.1706929674059675e-40, - 1.1728437245976731e-40, - 1.174996641918466e-40, - 1.1771521333579462e-40, - 1.1793100330999547e-40, - 1.1814698638819774e-40, - 1.1836311129453571e-40, - 1.1857932675578014e-40, - 1.1879558149922712e-40, - 1.1901182425209306e-40, - 1.1922800296451351e-40, - 1.194440718867781e-40, - 1.1966001857979329e-40, - 1.1987585171006927e-40, - 1.200915835323837e-40, - 1.2030722630151437e-40, - 1.205227922722386e-40, - 1.2073829369646248e-40, - 1.2095374617339282e-40, - 1.2116918203349513e-40, - 1.213846326836603e-40, - 1.2160009945629502e-40, - 1.218155697855493e-40, - 1.2203103102049444e-40, - 1.2224647051020181e-40, - 1.2246187560374272e-40, - 1.2267723209742779e-40, - 1.228925059780519e-40, - 1.2310764051568749e-40, - 1.2332259604084765e-40, - 1.2353736247821011e-40, - 1.2375193154194379e-40, - 1.2396629494621733e-40, - 1.2418044440519946e-40, - 1.243943717353295e-40, - 1.2460807805790179e-40, - 1.2482158588504698e-40, - 1.2503492169646016e-40, - 1.2524808228910769e-40, - 1.2546105540704448e-40, - 1.256738287870898e-40, - 1.2588639015681373e-40, - 1.2609872724296886e-40, - 1.2631082652037016e-40, - 1.265226653824236e-40, - 1.2673422315305052e-40, - 1.2694549220797396e-40, - 1.2715648054811107e-40, - 1.2736719752715463e-40, - 1.2757765249879736e-40, - 1.277878548167319e-40, - 1.2799781384862762e-40, - 1.2820754432314876e-40, - 1.284170717088179e-40, - 1.2862641670476208e-40, - 1.2883560377115e-40, - 1.2904466115622354e-40, - 1.2925361720618593e-40, - 1.2946250026724047e-40, - 1.296713386855904e-40, - 1.2988016058289884e-40, - 1.3008898570289646e-40, - 1.3029782745916489e-40, - 1.3050670118320753e-40, - 1.307155919933383e-40, - 1.309244686727634e-40, - 1.3113329985176864e-40, - 1.3134205416064007e-40, - 1.3155070022966365e-40, - 1.3175920715928965e-40, - 1.3196755327962787e-40, - 1.321757235429552e-40, - 1.3238370607609624e-40, - 1.3259153215203907e-40, - 1.3279925621966533e-40, - 1.330069329488145e-40, - 1.3321461701273535e-40, - 1.3342236308792893e-40, - 1.3363022568047067e-40, - 1.3383825584502264e-40, - 1.340465038461802e-40, - 1.342550201346188e-40, - 1.3446382324535364e-40, - 1.3467290791501297e-40, - 1.3488226831550494e-40, - 1.350918986187377e-40, - 1.3530179299661946e-40, - 1.3551194556205497e-40, - 1.3572234766549822e-40, - 1.3593297929971133e-40, - 1.3614380912686078e-40, - 1.3635481397679684e-40, - 1.365659843849397e-40, - 1.3677731202998319e-40, - 1.3698878859062114e-40, - 1.372004057455473e-40, - 1.3741215517366367e-40, - 1.3762402878371742e-40, - 1.3783602350342728e-40, - 1.3804814977954831e-40, - 1.3826042037407395e-40, - 1.3847284684457012e-40, - 1.3868544039068603e-40, - 1.3889821221217004e-40, - 1.3911117350877043e-40, - 1.3932433548023557e-40, - 1.3953770913491998e-40, - 1.3975130230165704e-40, - 1.3996510796267233e-40, - 1.4017911018790728e-40, - 1.4039328928880603e-40, - 1.4060762087037046e-40, - 1.4082208022160305e-40, - 1.410366426313739e-40, - 1.4125128338554057e-40, - 1.4146597776811825e-40, - 1.4168070163416388e-40, - 1.4189543499948578e-40, - 1.4211016572330317e-40, - 1.423248844466838e-40, - 1.4253959580539341e-40, - 1.4275431230838676e-40, - 1.4296904655248298e-40, - 1.4318381113450144e-40, - 1.4339861865126139e-40, - 1.4361348160132863e-40, - 1.438284095135687e-40, - 1.440434045258214e-40, - 1.4425846351367641e-40, - 1.4447358149712197e-40, - 1.4468874503599247e-40, - 1.4490393781275606e-40, - 1.4511914350749257e-40, - 1.4533434580028167e-40, - 1.4554952837120337e-40, - 1.457646753567691e-40, - 1.4597977766557e-40, - 1.4619483853114072e-40, - 1.4640986738468704e-40, - 1.4662487079697292e-40, - 1.4683984019798653e-40, - 1.4705476228807331e-40, - 1.4726962376576692e-40, - 1.4748441132960062e-40, - 1.4769911167810788e-40, - 1.4791371128600487e-40, - 1.4812819345645394e-40, - 1.4834253506352577e-40, - 1.4855670961973266e-40, - 1.487706937250004e-40, - 1.489844870496788e-40, - 1.4919809947459323e-40, - 1.4941154092601533e-40, - 1.4962482133021632e-40, - 1.4983795061326442e-40, - 1.5005093868563759e-40, - 1.5026379531108711e-40, - 1.5047653401910213e-40, - 1.5068917248859953e-40, - 1.509017279680016e-40, - 1.5111420601467017e-40, - 1.5132660175638966e-40, - 1.5153890995519163e-40, - 1.517511253731073e-40, - 1.51963242772168e-40, - 1.5217525694383629e-40, - 1.5238716624858878e-40, - 1.5259897387180983e-40, - 1.5281067928374882e-40, - 1.5302228138574837e-40, - 1.5323378166332105e-40, - 1.5344518878017121e-40, - 1.5365651263631033e-40, - 1.5386776313175012e-40, - 1.5407895016650208e-40, - 1.5429008364057788e-40, - 1.5450117211589246e-40, - 1.547122156744e-40, - 1.5492321660237672e-40, - 1.5513417993607396e-40, - 1.5534511048738427e-40, - 1.5555600856314723e-40, - 1.557668704400284e-40, - 1.5597769225329069e-40, - 1.5618847013843715e-40, - 1.5639920023097106e-40, - 1.5660987868700665e-40, - 1.568205041800306e-40, - 1.5703107726731929e-40, - 1.5724159260085614e-40, - 1.574520440091685e-40, - 1.576624262752077e-40, - 1.5787274096297868e-40, - 1.5808299257223863e-40, - 1.582931856145133e-40, - 1.585033246013281e-40, - 1.587134140442019e-40, - 1.5892345838899991e-40, - 1.5913346079652484e-40, - 1.5934342546230654e-40, - 1.595533589511823e-40, - 1.5976326793884604e-40, - 1.599731574251175e-40, - 1.6018302393567192e-40, - 1.6039286132393564e-40, - 1.6060266344232626e-40, - 1.6081242414326152e-40, - 1.610221372791591e-40, - 1.6123179686081197e-40, - 1.6144139908309046e-40, - 1.6165094251862957e-40, - 1.618604264342921e-40, - 1.6206985011388528e-40, - 1.62279214870607e-40, - 1.6248853397623423e-40, - 1.626978250675629e-40, - 1.6290710578779135e-40, - 1.6311639378011796e-40, - 1.63325706687741e-40, - 1.6353506201335117e-40, - 1.6374447501401963e-40, - 1.6395396006292176e-40, - 1.6416353235246926e-40, - 1.6437320710495123e-40, - 1.6458299835973245e-40, - 1.647929056571304e-40, - 1.6500291881560337e-40, - 1.6521302747524565e-40, - 1.6542322127764006e-40, - 1.656334898644881e-40, - 1.6584382292862916e-40, - 1.6605421253475875e-40, - 1.6626465113652664e-40, - 1.6647512680423403e-40, - 1.6668562721666077e-40, - 1.668961401527203e-40, - 1.6710666319111475e-40, - 1.6731721180943379e-40, - 1.6752780339186842e-40, - 1.6773845532260955e-40, - 1.6794918498584822e-40, - 1.6816000976577544e-40, - 1.6837094627517338e-40, - 1.685820099575817e-40, - 1.687932243347647e-40, - 1.690046153717647e-40, - 1.692162090336903e-40, - 1.694280286820958e-40, - 1.6964007284336182e-40, - 1.6985232627211205e-40, - 1.7006477357625136e-40, - 1.7027739936368429e-40, - 1.7049018824231546e-40, - 1.7070312480480574e-40, - 1.709161930621776e-40, - 1.7112937202005604e-40, - 1.7134263511623326e-40, - 1.715559554461153e-40, - 1.7176930610890403e-40, - 1.7198267026530767e-40, - 1.7219607087335271e-40, - 1.7240954073842594e-40, - 1.7262311266591384e-40, - 1.7283681946120304e-40, - 1.730506939296802e-40, - 1.7326476903964748e-40, - 1.7347907900548017e-40, - 1.7369365658012343e-40, - 1.7390853323635866e-40, - 1.7412374043164406e-40, - 1.743393096097663e-40, - 1.7455525955123317e-40, - 1.7477157292947554e-40, - 1.7498822602475291e-40, - 1.7520519511443694e-40, - 1.7542245646643874e-40, - 1.756399863467354e-40, - 1.758577604253666e-40, - 1.7607575127136897e-40, - 1.7629393442675277e-40, - 1.7651228725419007e-40, - 1.7673078712195746e-40, - 1.7694941139878234e-40, - 1.7716814309124644e-40, - 1.773869849150176e-40, - 1.7760594389005982e-40, - 1.77825027036337e-40, - 1.7804424137381313e-40, - 1.7826359392245214e-40, - 1.784830922416617e-40, - 1.7870274720441014e-40, - 1.7892256512881767e-40, - 1.7914254921626115e-40, - 1.7936270264749183e-40, - 1.7958302860326105e-40, - 1.79803529145664e-40, - 1.8002419768856943e-40, - 1.8024502361555451e-40, - 1.8046599628763859e-40, - 1.8068710506584116e-40, - 1.8090833931118163e-40, - 1.811296881775091e-40, - 1.813511373739765e-40, - 1.8157267569374408e-40, - 1.8179429753507164e-40, - 1.8201599749789266e-40, - 1.8223777018214071e-40, - 1.824596102561627e-40, - 1.8268151592825938e-40, - 1.8290349056253662e-40, - 1.8312553792937915e-40, - 1.833476617991714e-40, - 1.8356986594229792e-40, - 1.8379215413118603e-40, - 1.8401453117235956e-40, - 1.842370017276794e-40, - 1.8445956294732644e-40, - 1.8468221061437517e-40, - 1.849049405119003e-40, - 1.8512774842297633e-40, - 1.8535062971403416e-40, - 1.855735761082318e-40, - 1.8579657744563e-40, - 1.8601962355051038e-40, - 1.8624270425117674e-40, - 1.8646580939891436e-40, - 1.86688928867665e-40, - 1.869120529545616e-40, - 1.8713517513685887e-40, - 1.873582915797628e-40, - 1.8758139854667626e-40, - 1.8780449230100243e-40, - 1.8802756910614432e-40, - 1.882506260049965e-40, - 1.8847366377311346e-40, - 1.8869668430202774e-40, - 1.8891968948347354e-40, - 1.8914268120918477e-40, - 1.893656613708955e-40, - 1.8958863164594483e-40, - 1.8981159174910336e-40, - 1.900345393434808e-40, - 1.9025747145780836e-40, - 1.904803850526461e-40, - 1.907032770854824e-40, - 1.9092614451380544e-40, - 1.9114898358365155e-40, - 1.9137178725231424e-40, - 1.9159454752745694e-40, - 1.9181725641665078e-40, - 1.9203990592746707e-40, - 1.9226248806747705e-40, - 1.9248499484870104e-40, - 1.927074184058451e-40, - 1.9292975156827285e-40, - 1.93151987479776e-40, - 1.933741192858592e-40, - 1.935961401320271e-40, - 1.938180431637843e-40, - 1.940398215013021e-40, - 1.9426146808959533e-40, - 1.9448297580307896e-40, - 1.947043375161915e-40, - 1.949255461033712e-40, - 1.9514659443905677e-40, - 1.95367475524585e-40, - 1.955881839457152e-40, - 1.958087140233612e-40, - 1.960290590573525e-40, - 1.9624921232515075e-40, - 1.9646916710421762e-40, - 1.9668891667201484e-40, - 1.9690845434947537e-40, - 1.9712777529862126e-40, - 1.9734687716442366e-40, - 1.9756575776730765e-40, - 1.9778441492769813e-40, - 1.9800284639808078e-40, - 1.9822104898403777e-40, - 1.984390181322902e-40, - 1.98656749394502e-40, - 1.988742406442522e-40, - 1.9909149000825523e-40, - 1.9930849561322565e-40, - 1.9952525558587816e-40, - 1.9974176805292694e-40, - 1.9995803091815805e-40, - 2.0017404047950123e-40, - 2.003897923311478e-40, - 2.0060528206429825e-40, - 2.0082050527015315e-40, - 2.010354575399128e-40, - 2.0125013483215206e-40, - 2.0146453689107643e-40, - 2.0167866804571484e-40, - 2.0189253407098513e-40, - 2.0210614160872043e-40, - 2.0231949951503096e-40, - 2.025326170005521e-40, - 2.027455032759247e-40, - 2.029581677744549e-40, - 2.0317062074249647e-40, - 2.033828726119258e-40, - 2.035949338146192e-40, - 2.0380681478245302e-40, - 2.0401852594730374e-40, - 2.0423007728446033e-40, - 2.0444147691300375e-40, - 2.0465273287074002e-40, - 2.048638533115873e-40, - 2.0507484638946427e-40, - 2.0528572025828943e-40, - 2.054964830719813e-40, - 2.057071429844485e-40, - 2.059177080560147e-40, - 2.0612818489709395e-40, - 2.063385780739059e-40, - 2.065488919626176e-40, - 2.067591309393963e-40, - 2.0696929938042003e-40, - 2.071794021757784e-40, - 2.07389445223142e-40, - 2.0759943172377305e-40, - 2.0780936418365906e-40, - 2.080192451087877e-40, - 2.082290770051465e-40, - 2.0843886237872325e-40, - 2.0864860373550553e-40, - 2.0885830296881352e-40, - 2.0906795829109057e-40, - 2.092775665465389e-40, - 2.0948712457707895e-40, - 2.0969662922463107e-40, - 2.0990607733131574e-40, - 2.1011546557404405e-40, - 2.103247902081703e-40, - 2.1053405510237564e-40, - 2.1074326705625506e-40, - 2.1095243287212422e-40, - 2.1116155935229867e-40, - 2.1137065329909407e-40, - 2.1157972151482585e-40, - 2.1178877099673017e-40, - 2.119978142288094e-40, - 2.122068698051046e-40, - 2.1241595663968397e-40, - 2.1262509364661596e-40, - 2.1283429973996875e-40, - 2.1304359400846163e-40, - 2.1325299884598105e-40, - 2.1346252809113105e-40, - 2.136721843832174e-40, - 2.138819699448264e-40, - 2.1409188699417665e-40, - 2.1430193764346124e-40 - ] - } - } - }, - "genie_2.8.6": { - "energy": [ - 0.01, - 0.11009009009009008, - 0.21018018018018017, - 0.31027027027027027, - 0.41036036036036033, - 0.5104504504504505, - 0.6105405405405405, - 0.7106306306306306, - 0.8107207207207207, - 0.9108108108108107, - 1.010900900900901, - 1.110990990990991, - 1.211081081081081, - 1.311171171171171, - 1.4112612612612612, - 1.5113513513513512, - 1.6114414414414413, - 1.7115315315315314, - 1.8116216216216214, - 1.9117117117117115, - 2.0118018018018016, - 2.1118918918918914, - 2.2119819819819817, - 2.3120720720720715, - 2.412162162162162, - 2.5122522522522517, - 2.612342342342342, - 2.712432432432432, - 2.812522522522522, - 2.912612612612612, - 3.0127027027027022, - 3.112792792792792, - 3.2128828828828824, - 3.3129729729729727, - 3.4130630630630625, - 3.513153153153153, - 3.6132432432432426, - 3.713333333333333, - 3.8134234234234228, - 3.913513513513513, - 4.013603603603603, - 4.113693693693693, - 4.213783783783783, - 4.313873873873873, - 4.413963963963964, - 4.5140540540540535, - 4.614144144144143, - 4.714234234234233, - 4.814324324324324, - 4.914414414414414, - 5.014504504504504, - 5.114594594594594, - 5.214684684684684, - 5.314774774774774, - 5.414864864864864, - 5.514954954954955, - 5.615045045045044, - 5.715135135135134, - 5.815225225225224, - 5.915315315315315, - 6.015405405405405, - 6.1154954954954945, - 6.215585585585584, - 6.315675675675675, - 6.415765765765765, - 6.515855855855855, - 6.6159459459459455, - 6.716036036036035, - 6.816126126126125, - 6.916216216216215, - 7.016306306306306, - 7.116396396396396, - 7.2164864864864855, - 7.316576576576575, - 7.416666666666666, - 7.516756756756756, - 7.616846846846846, - 7.716936936936936, - 7.817027027027026, - 7.917117117117116, - 8.017207207207207, - 8.117297297297297, - 8.217387387387387, - 8.317477477477476, - 8.417567567567566, - 8.517657657657656, - 8.617747747747746, - 8.717837837837838, - 8.817927927927927, - 8.918018018018017, - 9.018108108108107, - 9.118198198198197, - 9.218288288288287, - 9.318378378378377, - 9.418468468468467, - 9.518558558558558, - 9.618648648648648, - 9.718738738738738, - 9.818828828828828, - 9.918918918918918, - 10.019009009009007, - 10.119099099099097, - 10.219189189189189, - 10.319279279279279, - 10.419369369369369, - 10.519459459459458, - 10.619549549549548, - 10.719639639639638, - 10.819729729729728, - 10.919819819819818, - 11.01990990990991, - 11.12, - 11.220090090090089, - 11.320180180180179, - 11.420270270270269, - 11.520360360360359, - 11.620450450450448, - 11.72054054054054, - 11.82063063063063, - 11.92072072072072, - 12.02081081081081, - 12.1209009009009, - 12.22099099099099, - 12.32108108108108, - 12.421171171171169, - 12.52126126126126, - 12.62135135135135, - 12.72144144144144, - 12.82153153153153, - 12.92162162162162, - 13.02171171171171, - 13.1218018018018, - 13.221891891891891, - 13.321981981981981, - 13.422072072072071, - 13.52216216216216, - 13.62225225225225, - 13.72234234234234, - 13.82243243243243, - 13.92252252252252, - 14.022612612612612, - 14.122702702702702, - 14.222792792792792, - 14.322882882882881, - 14.422972972972971, - 14.523063063063061, - 14.623153153153151, - 14.723243243243243, - 14.823333333333332, - 14.923423423423422, - 15.023513513513512, - 15.123603603603602, - 15.223693693693692, - 15.323783783783782, - 15.423873873873871, - 15.523963963963963, - 15.624054054054053, - 15.724144144144143, - 15.824234234234233, - 15.924324324324322, - 16.024414414414416, - 16.124504504504504, - 16.224594594594596, - 16.324684684684684, - 16.424774774774775, - 16.524864864864863, - 16.624954954954955, - 16.725045045045047, - 16.825135135135135, - 16.925225225225226, - 17.025315315315314, - 17.125405405405406, - 17.225495495495494, - 17.325585585585586, - 17.425675675675677, - 17.525765765765765, - 17.625855855855857, - 17.725945945945945, - 17.826036036036037, - 17.926126126126125, - 18.026216216216216, - 18.126306306306308, - 18.226396396396396, - 18.326486486486488, - 18.426576576576576, - 18.526666666666667, - 18.626756756756755, - 18.726846846846847, - 18.826936936936935, - 18.927027027027027, - 19.02711711711712, - 19.127207207207206, - 19.227297297297298, - 19.327387387387386, - 19.427477477477478, - 19.527567567567566, - 19.627657657657657, - 19.72774774774775, - 19.827837837837837, - 19.92792792792793, - 20.028018018018017, - 20.12810810810811, - 20.228198198198196, - 20.328288288288288, - 20.42837837837838, - 20.528468468468468, - 20.62855855855856, - 20.728648648648647, - 20.82873873873874, - 20.928828828828827, - 21.02891891891892, - 21.12900900900901, - 21.2290990990991, - 21.32918918918919, - 21.429279279279278, - 21.52936936936937, - 21.629459459459458, - 21.72954954954955, - 21.829639639639637, - 21.92972972972973, - 22.02981981981982, - 22.12990990990991, - 22.23, - 22.33009009009009, - 22.43018018018018, - 22.530270270270268, - 22.63036036036036, - 22.73045045045045, - 22.83054054054054, - 22.93063063063063, - 23.03072072072072, - 23.13081081081081, - 23.2309009009009, - 23.33099099099099, - 23.431081081081082, - 23.53117117117117, - 23.631261261261262, - 23.73135135135135, - 23.83144144144144, - 23.93153153153153, - 24.03162162162162, - 24.131711711711713, - 24.2318018018018, - 24.331891891891892, - 24.43198198198198, - 24.532072072072072, - 24.63216216216216, - 24.732252252252252, - 24.83234234234234, - 24.93243243243243, - 25.032522522522523, - 25.13261261261261, - 25.232702702702703, - 25.33279279279279, - 25.432882882882883, - 25.53297297297297, - 25.633063063063062, - 25.733153153153154, - 25.833243243243242, - 25.933333333333334, - 26.03342342342342, - 26.133513513513513, - 26.2336036036036, - 26.333693693693693, - 26.433783783783785, - 26.533873873873873, - 26.633963963963964, - 26.734054054054052, - 26.834144144144144, - 26.934234234234232, - 27.034324324324324, - 27.13441441441441, - 27.234504504504503, - 27.334594594594595, - 27.434684684684683, - 27.534774774774775, - 27.634864864864863, - 27.734954954954954, - 27.835045045045042, - 27.935135135135134, - 28.035225225225226, - 28.135315315315314, - 28.235405405405405, - 28.335495495495493, - 28.435585585585585, - 28.535675675675673, - 28.635765765765765, - 28.735855855855856, - 28.835945945945944, - 28.936036036036036, - 29.036126126126124, - 29.136216216216216, - 29.236306306306304, - 29.336396396396395, - 29.436486486486487, - 29.536576576576575, - 29.636666666666667, - 29.736756756756755, - 29.836846846846846, - 29.936936936936934, - 30.037027027027026, - 30.137117117117114, - 30.237207207207206, - 30.337297297297297, - 30.437387387387385, - 30.537477477477477, - 30.637567567567565, - 30.737657657657657, - 30.837747747747745, - 30.937837837837836, - 31.037927927927928, - 31.138018018018016, - 31.238108108108108, - 31.338198198198196, - 31.438288288288287, - 31.538378378378376, - 31.638468468468467, - 31.73855855855856, - 31.838648648648647, - 31.93873873873874, - 32.03882882882883, - 32.13891891891891, - 32.239009009009, - 32.339099099099094, - 32.439189189189186, - 32.53927927927928, - 32.63936936936936, - 32.739459459459454, - 32.839549549549545, - 32.93963963963964, - 33.03972972972972, - 33.13981981981981, - 33.239909909909905, - 33.339999999999996, - 33.44009009009009, - 33.54018018018017, - 33.640270270270264, - 33.740360360360356, - 33.84045045045045, - 33.94054054054054, - 34.04063063063062, - 34.140720720720715, - 34.24081081081081, - 34.3409009009009, - 34.44099099099098, - 34.541081081081074, - 34.641171171171166, - 34.74126126126126, - 34.84135135135135, - 34.941441441441434, - 35.041531531531525, - 35.14162162162162, - 35.24171171171171, - 35.34180180180179, - 35.441891891891885, - 35.541981981981976, - 35.64207207207207, - 35.74216216216216, - 35.842252252252244, - 35.942342342342336, - 36.04243243243243, - 36.14252252252252, - 36.24261261261261, - 36.342702702702695, - 36.44279279279279, - 36.54288288288288, - 36.64297297297297, - 36.743063063063055, - 36.843153153153146, - 36.94324324324324, - 37.04333333333333, - 37.14342342342342, - 37.243513513513506, - 37.3436036036036, - 37.44369369369369, - 37.54378378378378, - 37.643873873873865, - 37.74396396396396, - 37.84405405405405, - 37.94414414414414, - 38.04423423423423, - 38.144324324324316, - 38.24441441441441, - 38.3445045045045, - 38.44459459459459, - 38.54468468468468, - 38.64477477477477, - 38.74486486486486, - 38.84495495495495, - 38.94504504504504, - 39.045135135135126, - 39.14522522522522, - 39.24531531531531, - 39.3454054054054, - 39.44549549549549, - 39.54558558558558, - 39.64567567567567, - 39.74576576576576, - 39.84585585585585, - 39.94594594594594, - 40.04603603603603, - 40.14612612612612, - 40.24621621621621, - 40.3463063063063, - 40.44639639639639, - 40.54648648648648, - 40.64657657657657, - 40.74666666666666, - 40.846756756756754, - 40.94684684684684, - 41.04693693693693, - 41.14702702702702, - 41.247117117117114, - 41.3472072072072, - 41.44729729729729, - 41.54738738738738, - 41.64747747747747, - 41.747567567567565, - 41.84765765765765, - 41.94774774774774, - 42.04783783783783, - 42.147927927927924, - 42.248018018018016, - 42.3481081081081, - 42.44819819819819, - 42.54828828828828, - 42.648378378378375, - 42.74846846846846, - 42.84855855855855, - 42.94864864864864, - 43.048738738738734, - 43.148828828828826, - 43.24891891891891, - 43.349009009009, - 43.449099099099094, - 43.549189189189185, - 43.64927927927927, - 43.74936936936936, - 43.84945945945945, - 43.949549549549545, - 44.049639639639636, - 44.14972972972972, - 44.24981981981981, - 44.349909909909904, - 44.449999999999996, - 44.55009009009009, - 44.65018018018017, - 44.75027027027026, - 44.850360360360355, - 44.95045045045045, - 45.05054054054053, - 45.15063063063062, - 45.250720720720714, - 45.350810810810806, - 45.4509009009009, - 45.55099099099098, - 45.651081081081074, - 45.751171171171165, - 45.85126126126126, - 45.95135135135134, - 46.05144144144143, - 46.151531531531525, - 46.25162162162162, - 46.35171171171171, - 46.45180180180179, - 46.551891891891884, - 46.651981981981976, - 46.75207207207207, - 46.85216216216216, - 46.952252252252244, - 47.052342342342335, - 47.15243243243243, - 47.25252252252252, - 47.3526126126126, - 47.452702702702695, - 47.552792792792786, - 47.65288288288288, - 47.75297297297297, - 47.853063063063054, - 47.953153153153146, - 48.05324324324324, - 48.15333333333333, - 48.25342342342342, - 48.353513513513505, - 48.4536036036036, - 48.55369369369369, - 48.65378378378378, - 48.753873873873864, - 48.853963963963956, - 48.95405405405405, - 49.05414414414414, - 49.15423423423423, - 49.254324324324315, - 49.35441441441441, - 49.4545045045045, - 49.55459459459459, - 49.654684684684675, - 49.754774774774766, - 49.85486486486486, - 49.95495495495495, - 50.05504504504504, - 50.155135135135126, - 50.25522522522522, - 50.35531531531531, - 50.4554054054054, - 50.55549549549549, - 50.65558558558558, - 50.75567567567567, - 50.85576576576576, - 50.95585585585585, - 51.055945945945936, - 51.15603603603603, - 51.25612612612612, - 51.35621621621621, - 51.4563063063063, - 51.55639639639639, - 51.65648648648648, - 51.75657657657657, - 51.85666666666666, - 51.95675675675675, - 52.05684684684684, - 52.15693693693693, - 52.25702702702702, - 52.35711711711711, - 52.4572072072072, - 52.55729729729729, - 52.65738738738738, - 52.75747747747747, - 52.857567567567564, - 52.95765765765765, - 53.05774774774774, - 53.15783783783783, - 53.25792792792792, - 53.35801801801801, - 53.4581081081081, - 53.55819819819819, - 53.65828828828828, - 53.758378378378374, - 53.85846846846846, - 53.95855855855855, - 54.05864864864864, - 54.158738738738734, - 54.25882882882882, - 54.35891891891891, - 54.459009009009, - 54.55909909909909, - 54.659189189189185, - 54.75927927927927, - 54.85936936936936, - 54.95945945945945, - 55.059549549549544, - 55.159639639639636, - 55.25972972972972, - 55.35981981981981, - 55.4599099099099, - 55.559999999999995, - 55.66009009009008, - 55.76018018018017, - 55.86027027027026, - 55.960360360360355, - 56.060450450450446, - 56.16054054054053, - 56.26063063063062, - 56.360720720720714, - 56.460810810810806, - 56.5609009009009, - 56.66099099099098, - 56.76108108108107, - 56.861171171171165, - 56.96126126126126, - 57.06135135135134, - 57.16144144144143, - 57.261531531531524, - 57.361621621621616, - 57.46171171171171, - 57.56180180180179, - 57.661891891891884, - 57.761981981981975, - 57.86207207207207, - 57.96216216216215, - 58.06225225225224, - 58.162342342342335, - 58.262432432432426, - 58.36252252252252, - 58.4626126126126, - 58.562702702702694, - 58.662792792792786, - 58.76288288288288, - 58.86297297297297, - 58.96306306306305, - 59.063153153153145, - 59.16324324324324, - 59.26333333333333, - 59.36342342342341, - 59.463513513513504, - 59.563603603603596, - 59.66369369369369, - 59.76378378378378, - 59.863873873873864, - 59.963963963963955, - 60.06405405405405, - 60.16414414414414, - 60.26423423423422, - 60.364324324324315, - 60.46441441441441, - 60.5645045045045, - 60.66459459459459, - 60.764684684684674, - 60.864774774774766, - 60.96486486486486, - 61.06495495495495, - 61.16504504504504, - 61.265135135135125, - 61.36522522522522, - 61.46531531531531, - 61.5654054054054, - 61.665495495495485, - 61.765585585585576, - 61.86567567567567, - 61.96576576576576, - 62.06585585585585, - 62.165945945945936, - 62.26603603603603, - 62.36612612612612, - 62.46621621621621, - 62.5663063063063, - 62.66639639639639, - 62.76648648648648, - 62.86657657657657, - 62.96666666666666, - 63.066756756756746, - 63.16684684684684, - 63.26693693693693, - 63.36702702702702, - 63.46711711711711, - 63.5672072072072, - 63.66729729729729, - 63.76738738738738, - 63.86747747747747, - 63.967567567567556, - 64.06765765765766, - 64.16774774774775, - 64.26783783783783, - 64.36792792792792, - 64.46801801801801, - 64.5681081081081, - 64.6681981981982, - 64.76828828828829, - 64.86837837837838, - 64.96846846846847, - 65.06855855855856, - 65.16864864864864, - 65.26873873873873, - 65.36882882882882, - 65.46891891891892, - 65.56900900900901, - 65.6690990990991, - 65.76918918918919, - 65.86927927927928, - 65.96936936936937, - 66.06945945945945, - 66.16954954954954, - 66.26963963963964, - 66.36972972972973, - 66.46981981981982, - 66.56990990990991, - 66.67, - 66.7700900900901, - 66.87018018018018, - 66.97027027027026, - 67.07036036036035, - 67.17045045045045, - 67.27054054054054, - 67.37063063063063, - 67.47072072072072, - 67.57081081081081, - 67.6709009009009, - 67.770990990991, - 67.87108108108109, - 67.97117117117116, - 68.07126126126126, - 68.17135135135135, - 68.27144144144144, - 68.37153153153153, - 68.47162162162162, - 68.57171171171171, - 68.6718018018018, - 68.7718918918919, - 68.87198198198197, - 68.97207207207207, - 69.07216216216216, - 69.17225225225225, - 69.27234234234234, - 69.37243243243243, - 69.47252252252252, - 69.57261261261262, - 69.67270270270271, - 69.77279279279279, - 69.87288288288288, - 69.97297297297297, - 70.07306306306306, - 70.17315315315315, - 70.27324324324324, - 70.37333333333333, - 70.47342342342343, - 70.57351351351352, - 70.6736036036036, - 70.77369369369369, - 70.87378378378378, - 70.97387387387387, - 71.07396396396396, - 71.17405405405405, - 71.27414414414415, - 71.37423423423424, - 71.47432432432433, - 71.5744144144144, - 71.6745045045045, - 71.77459459459459, - 71.87468468468468, - 71.97477477477477, - 72.07486486486486, - 72.17495495495496, - 72.27504504504505, - 72.37513513513514, - 72.47522522522523, - 72.57531531531531, - 72.6754054054054, - 72.77549549549549, - 72.87558558558558, - 72.97567567567567, - 73.07576576576577, - 73.17585585585586, - 73.27594594594595, - 73.37603603603604, - 73.47612612612612, - 73.57621621621621, - 73.6763063063063, - 73.7763963963964, - 73.87648648648648, - 73.97657657657658, - 74.07666666666667, - 74.17675675675676, - 74.27684684684685, - 74.37693693693693, - 74.47702702702702, - 74.57711711711711, - 74.6772072072072, - 74.7772972972973, - 74.87738738738739, - 74.97747747747748, - 75.07756756756757, - 75.17765765765766, - 75.27774774774774, - 75.37783783783783, - 75.47792792792792, - 75.57801801801801, - 75.6781081081081, - 75.7781981981982, - 75.87828828828829, - 75.97837837837838, - 76.07846846846847, - 76.17855855855856, - 76.27864864864864, - 76.37873873873873, - 76.47882882882882, - 76.57891891891892, - 76.67900900900901, - 76.7790990990991, - 76.87918918918919, - 76.97927927927928, - 77.07936936936937, - 77.17945945945945, - 77.27954954954954, - 77.37963963963963, - 77.47972972972973, - 77.57981981981982, - 77.67990990990991, - 77.78, - 77.88009009009009, - 77.98018018018018, - 78.08027027027026, - 78.18036036036035, - 78.28045045045045, - 78.38054054054054, - 78.48063063063063, - 78.58072072072072, - 78.68081081081081, - 78.7809009009009, - 78.880990990991, - 78.98108108108107, - 79.08117117117116, - 79.18126126126126, - 79.28135135135135, - 79.38144144144144, - 79.48153153153153, - 79.58162162162162, - 79.68171171171171, - 79.7818018018018, - 79.88189189189188, - 79.98198198198197, - 80.08207207207207, - 80.18216216216216, - 80.28225225225225, - 80.38234234234234, - 80.48243243243243, - 80.58252252252252, - 80.68261261261262, - 80.78270270270271, - 80.88279279279278, - 80.98288288288288, - 81.08297297297297, - 81.18306306306306, - 81.28315315315315, - 81.38324324324324, - 81.48333333333333, - 81.58342342342343, - 81.68351351351352, - 81.7836036036036, - 81.88369369369369, - 81.98378378378378, - 82.08387387387387, - 82.18396396396396, - 82.28405405405405, - 82.38414414414414, - 82.48423423423424, - 82.58432432432433, - 82.6844144144144, - 82.7845045045045, - 82.88459459459459, - 82.98468468468468, - 83.08477477477477, - 83.18486486486486, - 83.28495495495496, - 83.38504504504505, - 83.48513513513514, - 83.58522522522522, - 83.68531531531531, - 83.7854054054054, - 83.88549549549549, - 83.98558558558558, - 84.08567567567567, - 84.18576576576577, - 84.28585585585586, - 84.38594594594595, - 84.48603603603604, - 84.58612612612612, - 84.68621621621621, - 84.7863063063063, - 84.88639639639639, - 84.98648648648648, - 85.08657657657658, - 85.18666666666667, - 85.28675675675676, - 85.38684684684685, - 85.48693693693693, - 85.58702702702702, - 85.68711711711711, - 85.7872072072072, - 85.8872972972973, - 85.98738738738739, - 86.08747747747748, - 86.18756756756757, - 86.28765765765766, - 86.38774774774774, - 86.48783783783783, - 86.58792792792792, - 86.68801801801801, - 86.7881081081081, - 86.8881981981982, - 86.98828828828829, - 87.08837837837838, - 87.18846846846847, - 87.28855855855855, - 87.38864864864864, - 87.48873873873873, - 87.58882882882882, - 87.68891891891892, - 87.789009009009, - 87.8890990990991, - 87.98918918918919, - 88.08927927927928, - 88.18936936936937, - 88.28945945945945, - 88.38954954954954, - 88.48963963963963, - 88.58972972972973, - 88.68981981981982, - 88.78990990990991, - 88.89, - 88.99009009009009, - 89.09018018018018, - 89.19027027027026, - 89.29036036036035, - 89.39045045045044, - 89.49054054054054, - 89.59063063063063, - 89.69072072072072, - 89.79081081081081, - 89.8909009009009, - 89.990990990991, - 90.09108108108107, - 90.19117117117116, - 90.29126126126125, - 90.39135135135135, - 90.49144144144144, - 90.59153153153153, - 90.69162162162162, - 90.79171171171171, - 90.8918018018018, - 90.99189189189188, - 91.09198198198197, - 91.19207207207207, - 91.29216216216216, - 91.39225225225225, - 91.49234234234234, - 91.59243243243243, - 91.69252252252252, - 91.79261261261261, - 91.89270270270269, - 91.99279279279278, - 92.09288288288288, - 92.19297297297297, - 92.29306306306306, - 92.39315315315315, - 92.49324324324324, - 92.59333333333333, - 92.69342342342343, - 92.79351351351352, - 92.8936036036036, - 92.99369369369369, - 93.09378378378378, - 93.19387387387387, - 93.29396396396396, - 93.39405405405405, - 93.49414414414414, - 93.59423423423424, - 93.69432432432433, - 93.7944144144144, - 93.8945045045045, - 93.99459459459459, - 94.09468468468468, - 94.19477477477477, - 94.29486486486486, - 94.39495495495495, - 94.49504504504505, - 94.59513513513514, - 94.69522522522522, - 94.7953153153153, - 94.8954054054054, - 94.99549549549549, - 95.09558558558558, - 95.19567567567567, - 95.29576576576576, - 95.39585585585586, - 95.49594594594595, - 95.59603603603603, - 95.69612612612612, - 95.79621621621621, - 95.8963063063063, - 95.99639639639639, - 96.09648648648648, - 96.19657657657658, - 96.29666666666667, - 96.39675675675676, - 96.49684684684685, - 96.59693693693693, - 96.69702702702702, - 96.79711711711711, - 96.8972072072072, - 96.9972972972973, - 97.09738738738739, - 97.19747747747748, - 97.29756756756757, - 97.39765765765766, - 97.49774774774774, - 97.59783783783783, - 97.69792792792792, - 97.79801801801801, - 97.8981081081081, - 97.9981981981982, - 98.09828828828829, - 98.19837837837838, - 98.29846846846847, - 98.39855855855855, - 98.49864864864864, - 98.59873873873873, - 98.69882882882882, - 98.79891891891891, - 98.899009009009, - 98.9990990990991, - 99.09918918918919, - 99.19927927927928, - 99.29936936936936, - 99.39945945945945, - 99.49954954954954, - 99.59963963963963, - 99.69972972972973, - 99.79981981981982, - 99.89990990990991, - 100.0 - ], - "xsec": { - "nue": { - "cc": [ - 1.79684938708184e-46, - 3.63830379854851e-43, - 1.769594031328656e-42, - 3.5236774007110996e-42, - 5.3159566753165325e-42, - 7.31385733360715e-42, - 9.35811057213624e-42, - 1.1281154386005748e-41, - 1.3052525959880877e-41, - 1.4686314858742174e-41, - 1.6243750654360583e-41, - 1.7784256529604475e-41, - 1.9273562003322613e-41, - 2.0675013095238755e-41, - 2.2010659070331108e-41, - 2.3295402358424205e-41, - 2.4536077756386055e-41, - 2.57480076037031e-41, - 2.6945838359903476e-41, - 2.812275098936896e-41, - 2.931994006502293e-41, - 3.0495320338775773e-41, - 3.1658439004206466e-41, - 3.2800724845158475e-41, - 3.394926302182421e-41, - 3.5125600674550944e-41, - 3.631376117385009e-41, - 3.7479167039970087e-41, - 3.863540209408989e-41, - 3.9814719736543595e-41, - 4.1006837898475953e-41, - 4.219828167834399e-41, - 4.3372791494321427e-41, - 4.4547484001647324e-41, - 4.5711833130912545e-41, - 4.686691284360194e-41, - 4.8015075714619e-41, - 4.915675128818804e-41, - 5.030011642705581e-41, - 5.145026093301678e-41, - 5.26099207890029e-41, - 5.377383639446416e-41, - 5.493783165429617e-41, - 5.609985013440706e-41, - 5.725616249790169e-41, - 5.840465611278743e-41, - 5.954482843654464e-41, - 6.06757206575507e-41, - 6.180144217134715e-41, - 6.292308307789215e-41, - 6.404671375095175e-41, - 6.517693932631643e-41, - 6.632024537932475e-41, - 6.747918464078928e-41, - 6.864974038508591e-41, - 6.982319531928129e-41, - 7.099286091051255e-41, - 7.215100366238867e-41, - 7.329908365882784e-41, - 7.444151089371105e-41, - 7.558339011902635e-41, - 7.672969583046096e-41, - 7.788191760719667e-41, - 7.903916986567642e-41, - 8.020145973800637e-41, - 8.136685698111068e-41, - 8.253552909515695e-41, - 8.370572321697791e-41, - 8.487671775712947e-41, - 8.604682783196895e-41, - 8.721413383141198e-41, - 8.837680721635695e-41, - 8.953429200369501e-41, - 9.068913926869891e-41, - 9.184541931710286e-41, - 9.300623977817977e-41, - 9.417408053449736e-41, - 9.535147168509188e-41, - 9.653792381168427e-41, - 9.773211824681216e-41, - 9.892871791411356e-41, - 1.0011957789782655e-40, - 1.0130763940776936e-40, - 1.0249659290983204e-40, - 1.036791174797822e-40, - 1.0485443746269821e-40, - 1.0602589715790885e-40, - 1.0719276694528507e-40, - 1.0835606691543375e-40, - 1.0951603300685271e-40, - 1.1067337424006064e-40, - 1.118294586526003e-40, - 1.1298516381273088e-40, - 1.141423702533872e-40, - 1.1530245614324423e-40, - 1.1646702840509604e-40, - 1.1763731199554556e-40, - 1.1881320534099301e-40, - 1.1999442277989616e-40, - 1.2117911712634149e-40, - 1.2236411528907008e-40, - 1.235494447142487e-40, - 1.2473614014930352e-40, - 1.2592037036828317e-40, - 1.2709675242498756e-40, - 1.282668489992384e-40, - 1.2943961552640958e-40, - 1.306118383192027e-40, - 1.3177639134440752e-40, - 1.3293709110179433e-40, - 1.3410179124931654e-40, - 1.3527111799924092e-40, - 1.3643938108521822e-40, - 1.376049507973086e-40, - 1.387705826753686e-40, - 1.3993908140896739e-40, - 1.4111213044076036e-40, - 1.42289691934008e-40, - 1.4346937770231119e-40, - 1.4465002898066048e-40, - 1.4583510861446013e-40, - 1.4702433078480806e-40, - 1.4821620621697583e-40, - 1.4940940845820795e-40, - 1.5060200588653218e-40, - 1.5179355879084307e-40, - 1.5298411922980919e-40, - 1.5417284462699977e-40, - 1.5535823874278894e-40, - 1.5653843884264533e-40, - 1.5771014626167934e-40, - 1.5887501309995313e-40, - 1.6003716729464224e-40, - 1.6119611042298585e-40, - 1.6235062016273103e-40, - 1.6350363968853083e-40, - 1.6465737586746259e-40, - 1.658118036343355e-40, - 1.6696690463877614e-40, - 1.681256014256802e-40, - 1.692912012943433e-40, - 1.7046207104351661e-40, - 1.7163626436341638e-40, - 1.7281401709835126e-40, - 1.7399677448232437e-40, - 1.7518431065053857e-40, - 1.7637429141127623e-40, - 1.7756357859567916e-40, - 1.7875095754667337e-40, - 1.7993882756770972e-40, - 1.8112917985796988e-40, - 1.8232024721106294e-40, - 1.8350895783164315e-40, - 1.8469432738299347e-40, - 1.8587771976278288e-40, - 1.8706087202410407e-40, - 1.8824390764704147e-40, - 1.8942539573011435e-40, - 1.906044025084738e-40, - 1.9178131755229623e-40, - 1.929572572867337e-40, - 1.941324152756001e-40, - 1.9530674167739344e-40, - 1.9648076274879738e-40, - 1.9765505610088195e-40, - 1.9882932664745807e-40, - 2.0000323056461464e-40, - 2.011766389899074e-40, - 2.0234900882427405e-40, - 2.0352014558249533e-40, - 2.04690168869246e-40, - 2.058599699781606e-40, - 2.070302373241594e-40, - 2.08199596629659e-40, - 2.093680197949782e-40, - 2.1053658043938217e-40, - 2.1170530845572925e-40, - 2.1287508740018353e-40, - 2.1404609490859346e-40, - 2.1521791907304296e-40, - 2.163904718762668e-40, - 2.1756363208332e-40, - 2.1873774340316052e-40, - 2.1991348285652706e-40, - 2.2109007042531067e-40, - 2.2226593472741267e-40, - 2.234408792935494e-40, - 2.2461522858429807e-40, - 2.2579093893729253e-40, - 2.26970213946756e-40, - 2.2815351805068004e-40, - 2.2933919079235726e-40, - 2.3052553883100412e-40, - 2.317118592398244e-40, - 2.328987257242224e-40, - 2.3408653272372885e-40, - 2.3527484950542915e-40, - 2.364627659766564e-40, - 2.3764942382630528e-40, - 2.3883560315338804e-40, - 2.400226974618346e-40, - 2.4121117529745633e-40, - 2.4239959080257357e-40, - 2.435865029369506e-40, - 2.4477055677658185e-40, - 2.4595146827106797e-40, - 2.4713016041600547e-40, - 2.4830754517101357e-40, - 2.4948382878296773e-40, - 2.506593257490129e-40, - 2.5183448934853426e-40, - 2.530093993830332e-40, - 2.5418391303242103e-40, - 2.553577441456061e-40, - 2.56530641562748e-40, - 2.5770270917375527e-40, - 2.5887401866785115e-40, - 2.6004517171720666e-40, - 2.612166921243771e-40, - 2.6238901013005152e-40, - 2.6356182559995897e-40, - 2.6473420565573667e-40, - 2.659049396890158e-40, - 2.6707460363010217e-40, - 2.682444725520735e-40, - 2.6941511307603476e-40, - 2.705865767768587e-40, - 2.7175875409937355e-40, - 2.7293133462481695e-40, - 2.741039796683388e-40, - 2.752771372557232e-40, - 2.7645122167836254e-40, - 2.7762670467836394e-40, - 2.788032886886916e-40, - 2.7997983495515496e-40, - 2.8115507077619934e-40, - 2.8232869514319495e-40, - 2.835016237069985e-40, - 2.84674675382606e-40, - 2.8584860222702753e-40, - 2.87023852854951e-40, - 2.8820003650055846e-40, - 2.893762911842199e-40, - 2.905520396988959e-40, - 2.9172783156378435e-40, - 2.929044412052634e-40, - 2.9408231974659725e-40, - 2.9526150387707114e-40, - 2.964415839446791e-40, - 2.976217657901614e-40, - 2.98801308132975e-40, - 2.9998077279058276e-40, - 3.011614097300584e-40, - 3.0234412766437996e-40, - 3.035283615837264e-40, - 3.0471306511976727e-40, - 3.0589765652720338e-40, - 3.070817068122598e-40, - 3.0826570871402465e-40, - 3.0945045800557643e-40, - 3.1063689027312278e-40, - 3.1182545109087956e-40, - 3.1301533616861253e-40, - 3.142054769231948e-40, - 3.153945038522918e-40, - 3.16581615867041e-40, - 3.1776733514888724e-40, - 3.1895250471629865e-40, - 3.2013777251763276e-40, - 3.213230196344981e-40, - 3.2250765811385617e-40, - 3.2369126055508934e-40, - 3.2487352616190494e-40, - 3.2605453327807096e-40, - 3.2723443202750906e-40, - 3.284132656172749e-40, - 3.295911175166192e-40, - 3.307678516787923e-40, - 3.319432224732511e-40, - 3.3311677982386923e-40, - 3.342879402332787e-40, - 3.3545679885827955e-40, - 3.3662401428368253e-40, - 3.3779007671990983e-40, - 3.389551436496472e-40, - 3.4011915583928795e-40, - 3.4128215339184716e-40, - 3.4244434889491587e-40, - 3.4360600374577453e-40, - 3.4476758685578105e-40, - 3.459296711445079e-40, - 3.4709263169193826e-40, - 3.482568115507257e-40, - 3.4942229220585203e-40, - 3.505885172822151e-40, - 3.5175497280528887e-40, - 3.5292128705257925e-40, - 3.5408707153492035e-40, - 3.552524799738242e-40, - 3.5641816306604405e-40, - 3.575851064916204e-40, - 3.5875439611774723e-40, - 3.5992626803090972e-40, - 3.610997191087865e-40, - 3.622736429118282e-40, - 3.634473480751632e-40, - 3.6462048845730527e-40, - 3.6579339608730395e-40, - 3.6696649056333297e-40, - 3.681403136732107e-40, - 3.693157867977354e-40, - 3.704932927287653e-40, - 3.7167219864553305e-40, - 3.728514951930408e-40, - 3.740302562383335e-40, - 3.752080363402358e-40, - 3.76385148086322e-40, - 3.7756200475553865e-40, - 3.787389005315979e-40, - 3.799161482241032e-40, - 3.810938775307693e-40, - 3.822718493257795e-40, - 3.83449809960959e-40, - 3.846275921159245e-40, - 3.858050386871821e-40, - 3.869820274983383e-40, - 3.8815857974191376e-40, - 3.893348149334974e-40, - 3.905109966176908e-40, - 3.916874073531895e-40, - 3.928641466546719e-40, - 3.940410119267116e-40, - 3.952177548435161e-40, - 3.963942364204581e-40, - 3.97570402893272e-40, - 3.9874627323522825e-40, - 3.999218689205159e-40, - 4.010972016154166e-40, - 4.022724387269897e-40, - 4.034478509902156e-40, - 4.046235465655469e-40, - 4.057993749860705e-40, - 4.069751057228296e-40, - 4.0815053530581914e-40, - 4.093256174827048e-40, - 4.1050047181215e-40, - 4.116752778785941e-40, - 4.1285023320958145e-40, - 4.140255282496318e-40, - 4.15201242642213e-40, - 4.1637729837245075e-40, - 4.175535655794603e-40, - 4.187299979773258e-40, - 4.1990658326611546e-40, - 4.2108327480921906e-40, - 4.222599163203417e-40, - 4.23436352654502e-40, - 4.246124607121499e-40, - 4.257882020262748e-40, - 4.269635647315679e-40, - 4.281385827903045e-40, - 4.293132803176184e-40, - 4.304876876727954e-40, - 4.316618549301072e-40, - 4.328358358663223e-40, - 4.3400962501629305e-40, - 4.35183133214177e-40, - 4.3635629231132025e-40, - 4.375290443284059e-40, - 4.387013183860859e-40, - 4.398730766092082e-40, - 4.4104439951023345e-40, - 4.422153853772765e-40, - 4.433860904265153e-40, - 4.445565668382204e-40, - 4.457268795221628e-40, - 4.468970130654319e-40, - 4.480669208148364e-40, - 4.4923650291717194e-40, - 4.5040555612315695e-40, - 4.515738695519417e-40, - 4.527414110237856e-40, - 4.539084028232174e-40, - 4.550750998704876e-40, - 4.562417321408783e-40, - 4.574084460822749e-40, - 4.585753492148971e-40, - 4.597424484795673e-40, - 4.609097160548475e-40, - 4.620771367228239e-40, - 4.632446944710232e-40, - 4.644123410218178e-40, - 4.655800212784667e-40, - 4.667477628547674e-40, - 4.679157196429058e-40, - 4.6908408701108875e-40, - 4.7025305756208636e-40, - 4.714227611832801e-40, - 4.725932361232729e-40, - 4.7376441737905485e-40, - 4.749362121896574e-40, - 4.761085568399796e-40, - 4.7728139043878505e-40, - 4.784546664186675e-40, - 4.796283788055387e-40, - 4.8080258387989625e-40, - 4.8197734703970855e-40, - 4.831526538796305e-40, - 4.843284614852542e-40, - 4.855047407679014e-40, - 4.8668158315113944e-40, - 4.878590909758573e-40, - 4.890373425196562e-40, - 4.902163635391946e-40, - 4.913960886858293e-40, - 4.925764216970526e-40, - 4.937571437263651e-40, - 4.949380986054515e-40, - 4.961191732557816e-40, - 4.9730025252046125e-40, - 4.984811891630486e-40, - 4.9966182796834495e-40, - 5.008421973588391e-40, - 5.0202242022986165e-40, - 5.032026088407731e-40, - 5.0438287174360585e-40, - 5.055633141249146e-40, - 5.067440465168692e-40, - 5.0792504409755304e-40, - 5.091061565357598e-40, - 5.10287229548045e-40, - 5.114680790653323e-40, - 5.126485159779027e-40, - 5.13828353287846e-40, - 5.1500751237323975e-40, - 5.161860667043622e-40, - 5.173640848361656e-40, - 5.185416234713981e-40, - 5.197187242885541e-40, - 5.208954276005531e-40, - 5.2207176089241735e-40, - 5.2324770752134686e-40, - 5.244232871115419e-40, - 5.255985296158164e-40, - 5.2677340718709206e-40, - 5.279478049438631e-40, - 5.2912160231073976e-40, - 5.30294760552229e-40, - 5.314674040740648e-40, - 5.326397034125282e-40, - 5.338118292933873e-40, - 5.3498391299599664e-40, - 5.361559786685917e-40, - 5.373280122741096e-40, - 5.384999216474742e-40, - 5.3967162506485075e-40, - 5.408430921559578e-40, - 5.420142966876585e-40, - 5.431852192743984e-40, - 5.443558507176909e-40, - 5.455261910489483e-40, - 5.466962621719206e-40, - 5.4786605675062544e-40, - 5.490355253669058e-40, - 5.502046145223517e-40, - 5.513732723763944e-40, - 5.5254148658769945e-40, - 5.537093256348206e-40, - 5.54876928549509e-40, - 5.560444599810655e-40, - 5.572120220952826e-40, - 5.583796664030342e-40, - 5.595474439272099e-40, - 5.607154189755442e-40, - 5.618836713775115e-40, - 5.63052237967107e-40, - 5.64221134096871e-40, - 5.653903243280512e-40, - 5.66559655358398e-40, - 5.677289467247914e-40, - 5.688980254886962e-40, - 5.700668217857348e-40, - 5.712353929423145e-40, - 5.724038109382642e-40, - 5.735721473063752e-40, - 5.747404419415229e-40, - 5.7590866166601926e-40, - 5.770767685049721e-40, - 5.782447848481538e-40, - 5.7941279397839515e-40, - 5.8058091448737835e-40, - 5.817492766160064e-40, - 5.829180109324801e-40, - 5.8408725081541525e-40, - 5.852571209683833e-40, - 5.864276223349625e-40, - 5.8759864761894e-40, - 5.887700539624135e-40, - 5.899416799201917e-40, - 5.9111336409549275e-40, - 5.922849469845153e-40, - 5.934562982704323e-40, - 5.946274029940432e-40, - 5.9579836244203366e-40, - 5.969692944424955e-40, - 5.98140304491833e-40, - 5.993114829708384e-40, - 6.004829192098062e-40, - 6.016547027629542e-40, - 6.028268961735998e-40, - 6.0399946896759996e-40, - 6.0517237750910256e-40, - 6.0634557871195884e-40, - 6.075190284115703e-40, - 6.0869268952475306e-40, - 6.098665274916985e-40, - 6.110405081998036e-40, - 6.122146012645182e-40, - 6.133887403165266e-40, - 6.145628317486515e-40, - 6.157367815388123e-40, - 6.16910501122198e-40, - 6.180839162288851e-40, - 6.1925695335120816e-40, - 6.204295574285451e-40, - 6.216017458946121e-40, - 6.22773571646818e-40, - 6.2394509406494865e-40, - 6.2511637294021754e-40, - 6.262874690145159e-40, - 6.274584491270461e-40, - 6.2862937382597755e-40, - 6.298002511172104e-40, - 6.3097100560523e-40, - 6.321415473122691e-40, - 6.3331180452784514e-40, - 6.344817097009159e-40, - 6.35651195396635e-40, - 6.368201892146276e-40, - 6.379885995147701e-40, - 6.3915637012511746e-40, - 6.403234740718195e-40, - 6.414898827201732e-40, - 6.426555719674595e-40, - 6.438205116715146e-40, - 6.449846704045113e-40, - 6.4614801681123914e-40, - 6.473105283812916e-40, - 6.48472245573887e-40, - 6.496332516348576e-40, - 6.507936400045111e-40, - 6.5195349958675074e-40, - 6.531128650663749e-40, - 6.542717317603897e-40, - 6.554300938736614e-40, - 6.565879440613717e-40, - 6.577452837275875e-40, - 6.589021748105101e-40, - 6.600586954950934e-40, - 6.6121492363265474e-40, - 6.623709338128199e-40, - 6.635267762976564e-40, - 6.6468248842591474e-40, - 6.658381073741332e-40, - 6.669936699763964e-40, - 6.681491752737789e-40, - 6.693045752719764e-40, - 6.704598187849636e-40, - 6.716148546866755e-40, - 6.727696368306249e-40, - 6.7392416515159104e-40, - 6.750784689129405e-40, - 6.762325911417461e-40, - 6.773866170787132e-40, - 6.785406580010935e-40, - 6.79694792268303e-40, - 6.808490889964894e-40, - 6.8200361729695975e-40, - 6.831584458453089e-40, - 6.8431364234353575e-40, - 6.854692806401033e-40, - 6.866254155949191e-40, - 6.877820681906682e-40, - 6.889392530439615e-40, - 6.900969945180625e-40, - 6.912553119260304e-40, - 6.924142242222204e-40, - 6.935737502714249e-40, - 6.9473389826157335e-40, - 6.958946544147375e-40, - 6.9705599600486626e-40, - 6.982179137585415e-40, - 6.993804015224131e-40, - 7.005434658509341e-40, - 7.017070994262303e-40, - 7.028712852814613e-40, - 7.040360064272022e-40, - 7.052012457460935e-40, - 7.063669822875219e-40, - 7.075331902074817e-40, - 7.0869984311734805e-40, - 7.09866913779283e-40, - 7.110343764642396e-40, - 7.122022144464663e-40, - 7.133704072787344e-40, - 7.145389272315871e-40, - 7.157077452246385e-40, - 7.168768310045469e-40, - 7.180461634544732e-40, - 7.192157257494271e-40, - 7.203855043053486e-40, - 7.215554859275998e-40, - 7.227256575200974e-40, - 7.238960061494818e-40, - 7.250665187268684e-40, - 7.262371815843603e-40, - 7.274079808739638e-40, - 7.285789029860883e-40, - 7.2974993570723624e-40, - 7.3092106632646315e-40, - 7.32092282181283e-40, - 7.332635707288141e-40, - 7.344349205764569e-40, - 7.356063252515097e-40, - 7.36777780633463e-40, - 7.3794928124195e-40, - 7.391208118084944e-40, - 7.40292354433151e-40, - 7.414638839502975e-40, - 7.426353719002137e-40, - 7.4380678980907e-40, - 7.449781092128368e-40, - 7.461493039135284e-40, - 7.473203632267239e-40, - 7.484912857731242e-40, - 7.496620885943506e-40, - 7.508327938258744e-40, - 7.520034202873446e-40, - 7.531739660402164e-40, - 7.543444182230632e-40, - 7.555147637922899e-40, - 7.566849897065628e-40, - 7.578550866355613e-40, - 7.590250752398385e-40, - 7.60194978117359e-40, - 7.613648092849849e-40, - 7.62534582715002e-40, - 7.63704311091557e-40, - 7.64873989688669e-40, - 7.66043603532182e-40, - 7.672131377946157e-40, - 7.683825776203217e-40, - 7.69551906214309e-40, - 7.707211184020222e-40, - 7.71890229353324e-40, - 7.730592552859955e-40, - 7.742282122164205e-40, - 7.753971161122745e-40, - 7.76565977504225e-40, - 7.77734788639734e-40, - 7.789035373880415e-40, - 7.800722120499164e-40, - 7.812408034464164e-40, - 7.824092931203447e-40, - 7.835776725501065e-40, - 7.847459446428568e-40, - 7.85914112840885e-40, - 7.870821806017976e-40, - 7.882501512462031e-40, - 7.894180216411812e-40, - 7.90585777632329e-40, - 7.917533999539769e-40, - 7.92920863662895e-40, - 7.94088167197134e-40, - 7.952553158602884e-40, - 7.964223196638881e-40, - 7.975891902018027e-40, - 7.98755939066556e-40, - 7.999225778476505e-40, - 8.01089117886352e-40, - 8.022555647473906e-40, - 8.03421925469826e-40, - 8.04588209252718e-40, - 8.057543930513357e-40, - 8.069204490884883e-40, - 8.080863530026114e-40, - 8.09252092428515e-40, - 8.10417658617908e-40, - 8.115830428499278e-40, - 8.127482364139945e-40, - 8.139132307741513e-40, - 8.150780155295375e-40, - 8.162425876961687e-40, - 8.174069756524394e-40, - 8.185712118547668e-40, - 8.197353282489565e-40, - 8.20899353382175e-40, - 8.220632988412215e-40, - 8.232271686987347e-40, - 8.24390966935568e-40, - 8.255546975283813e-40, - 8.267183638277504e-40, - 8.278819688746831e-40, - 8.29045512803149e-40, - 8.302089946675728e-40, - 8.313724138615703e-40, - 8.325357706207721e-40, - 8.33699064360011e-40, - 8.348622791090968e-40, - 8.360253843299862e-40, - 8.371883487095344e-40, - 8.383511449958374e-40, - 8.395137720268707e-40, - 8.406762450845373e-40, - 8.41838602084761e-40, - 8.430008906457365e-40, - 8.441631575657313e-40, - 8.45325449143329e-40, - 8.464878116430165e-40, - 8.476502817813733e-40, - 8.488128657484583e-40, - 8.49975561640919e-40, - 8.511383455716767e-40, - 8.523011720033454e-40, - 8.534640012694376e-40, - 8.546268061900384e-40, - 8.557895830962039e-40, - 8.569523322250111e-40, - 8.58115053909053e-40, - 8.592777484801703e-40, - 8.604404160191781e-40, - 8.616030490634121e-40, - 8.627656331661137e-40, - 8.639281729299938e-40, - 8.650906710567366e-40, - 8.66253125907824e-40, - 8.674155353553181e-40, - 8.685778877322704e-40, - 8.697401610292874e-40, - 8.70902332565482e-40, - 8.720643796599633e-40, - 8.73226279629393e-40, - 8.743880111474696e-40, - 8.75549572694997e-40, - 8.76710980118608e-40, - 8.778722574479807e-40, - 8.790334302667143e-40, - 8.801945241735659e-40, - 8.813555635658271e-40, - 8.82516548844515e-40, - 8.836774572790467e-40, - 8.848382648908511e-40, - 8.859989477015921e-40, - 8.871594817437664e-40, - 8.883198458420566e-40, - 8.894800435131977e-40, - 8.906401002261267e-40, - 8.918000427155514e-40, - 8.929598977294733e-40, - 8.941196919944705e-40, - 8.952794518487648e-40, - 8.964391923221084e-40, - 8.975989126664573e-40, - 8.987586105462003e-40, - 8.999182834402132e-40, - 9.010779251416142e-40, - 9.022375214613545e-40, - 9.0339706445743e-40, - 9.04556558155777e-40, - 9.057160083487527e-40, - 9.068754212523091e-40, - 9.08034803007366e-40, - 9.0919415970487e-40, - 9.103534937957226e-40, - 9.1151279559305e-40, - 9.126720523156041e-40, - 9.13831254043042e-40, - 9.149904027627067e-40, - 9.161494993435701e-40, - 9.17308546181437e-40, - 9.18467565494074e-40, - 9.196265892540161e-40, - 9.207856501390774e-40, - 9.219447817385488e-40, - 9.231040189716446e-40, - 9.242633958799553e-40, - 9.25422927298561e-40, - 9.265826072981507e-40, - 9.277424187066262e-40, - 9.289023408294564e-40, - 9.300623561034002e-40, - 9.312224465988018e-40, - 9.323826049363612e-40, - 9.335428500834592e-40, - 9.347032057382158e-40, - 9.358636955782655e-40, - 9.37024343292168e-40, - 9.381851727426609e-40, - 9.393462049221302e-40, - 9.405074373914767e-40, - 9.416688522906166e-40, - 9.428304208127884e-40, - 9.439921116797498e-40, - 9.451538936173287e-40, - 9.4631573546062e-40, - 9.474776115218217e-40, - 9.486395053582485e-40, - 9.498014016212679e-40, - 9.509632849622474e-40, - 9.52125140032555e-40, - 9.532869515667217e-40, - 9.544487104060579e-40, - 9.55610431018525e-40, - 9.567721455464721e-40, - 9.579338873644655e-40, - 9.590956898470713e-40, - 9.602575863858585e-40, - 9.614196104035211e-40, - 9.625817869440016e-40, - 9.637441234151146e-40, - 9.649066245221848e-40, - 9.660692949668608e-40, - 9.67232139369291e-40, - 9.683951595310063e-40, - 9.69558341541879e-40, - 9.707216649710577e-40, - 9.71885117224356e-40, - 9.730486861030405e-40, - 9.74212359398671e-40, - 9.753761247904736e-40, - 9.765399698882464e-40, - 9.777038834848068e-40, - 9.78867854037109e-40, - 9.80031868129235e-40, - 9.811959121678039e-40, - 9.823599668491116e-40, - 9.8352401706929e-40, - 9.846880635581095e-40, - 9.858521015488206e-40, - 9.870161204898524e-40, - 9.881801102049847e-40, - 9.893440605536801e-40, - 9.905079614420355e-40, - 9.916718027791741e-40, - 9.928355755069326e-40, - 9.939992830887303e-40, - 9.95162935591289e-40, - 9.963265484590704e-40, - 9.974901463503598e-40, - 9.986537437198994e-40, - 9.998173530146318e-40, - 1.0009809847005036e-39, - 1.0021446359924782e-39, - 1.0033083000017868e-39, - 1.0044719700296887e-39, - 1.0056356393757517e-39, - 1.0067993013376275e-39, - 1.0079629492134117e-39, - 1.0091265786530449e-39, - 1.0102901946892108e-39, - 1.0114537969719675e-39, - 1.012617385169698e-39, - 1.013780961098991e-39, - 1.0149445265996701e-39, - 1.0161080835212187e-39, - 1.0172716326112612e-39, - 1.0184351705676072e-39, - 1.0195986935077883e-39, - 1.0207621975605519e-39, - 1.0219256788554874e-39, - 1.023089133524357e-39, - 1.024252557697317e-39, - 1.0254159458867486e-39, - 1.026579288577127e-39, - 1.0277425775218782e-39, - 1.0289058047742633e-39, - 1.0300689623874532e-39, - 1.0312320424136571e-39, - 1.0323950369206964e-39, - 1.0335579398008104e-39, - 1.0347207511454995e-39, - 1.0358834716228116e-39, - 1.0370461018444322e-39, - 1.0382086424220451e-39, - 1.0393710940064838e-39, - 1.0405334591248725e-39, - 1.0416957413910179e-39, - 1.0428579368602434e-39, - 1.0440200393344327e-39, - 1.0451820426706704e-39, - 1.046343940726035e-39, - 1.0475057273409391e-39, - 1.0486673961004042e-39, - 1.0498289408422324e-39, - 1.0509903604893628e-39, - 1.0521516567865038e-39, - 1.0533128314577621e-39, - 1.0544738862577987e-39, - 1.0556348240479501e-39, - 1.0567956497882307e-39, - 1.0579563692716229e-39, - 1.0591169846031623e-39, - 1.0602774950319971e-39, - 1.0614378999902377e-39, - 1.0625981989051554e-39, - 1.0637583912174398e-39, - 1.0649184763917742e-39, - 1.0660784538999817e-39, - 1.0672383246011724e-39, - 1.0683980891800855e-39, - 1.069557746705379e-39, - 1.0707172915077114e-39, - 1.0718767067853507e-39, - 1.0730359712150662e-39, - 1.0741950630703481e-39, - 1.0753539608429456e-39, - 1.0765126487178652e-39, - 1.0776711167992302e-39, - 1.0788293555707059e-39, - 1.0799873559248296e-39, - 1.081145108848898e-39, - 1.0823026053310693e-39, - 1.0834598362735874e-39, - 1.0846167864914543e-39, - 1.0857734314503606e-39, - 1.0869297652007538e-39, - 1.0880857949233455e-39, - 1.0892415300281973e-39, - 1.0903969799274996e-39, - 1.0915521540343993e-39, - 1.092707063647415e-39, - 1.0938617336161432e-39, - 1.0950161954490715e-39, - 1.0961704804156665e-39, - 1.0973246197672914e-39, - 1.0984786447553073e-39, - 1.099632586631011e-39, - 1.1007864765141356e-39, - 1.101940335522967e-39, - 1.1030941611101803e-39, - 1.1042479410104923e-39, - 1.1054016623440157e-39, - 1.1065553122308526e-39, - 1.107708877791112e-39, - 1.1088623461449013e-39, - 1.1100157039999766e-39, - 1.1111689381658495e-39, - 1.1123220375945743e-39, - 1.1134749913740943e-39, - 1.1146277885987893e-39, - 1.115780418363426e-39, - 1.1169328700950725e-39, - 1.1180851389772741e-39, - 1.1192372324000093e-39, - 1.1203891637060438e-39, - 1.121540945841518e-39, - 1.1226925917215137e-39, - 1.12384411423498e-39, - 1.1249955262670788e-39, - 1.1261468407226157e-39, - 1.1272980708093138e-39, - 1.1284492316314843e-39, - 1.1296003395354488e-39, - 1.1307514111235041e-39, - 1.1319024632359478e-39, - 1.1330535124907583e-39, - 1.1342045717520148e-39, - 1.1353556449247425e-39, - 1.1365067309294734e-39, - 1.1376578249065692e-39, - 1.1388089209269927e-39, - 1.1399600130540353e-39, - 1.1411110948627109e-39, - 1.1422621597604468e-39, - 1.1434132011599936e-39, - 1.1445642124608376e-39, - 1.145715187308767e-39, - 1.1468661205880599e-39, - 1.1480170075464785e-39, - 1.1491678431685017e-39, - 1.1503186166571326e-39, - 1.1514693189267724e-39, - 1.1526199481157837e-39, - 1.1537705026592475e-39, - 1.1549209821517695e-39, - 1.15607138694756e-39, - 1.1572217155671442e-39, - 1.158371966488858e-39, - 1.1595221381415488e-39, - 1.1606722287323829e-39, - 1.1618222362602483e-39, - 1.1629721587024528e-39, - 1.1641219888896727e-39, - 1.1652717080211303e-39, - 1.1664213092659893e-39, - 1.1675708114244065e-39, - 1.1687202226807358e-39, - 1.1698695487109491e-39, - 1.1710187952110904e-39, - 1.1721679679188142e-39 - ], - "nc": [ - 4.449436238615983e-46, - 1.9295218193964453e-43, - 8.556367406861276e-43, - 1.6523568269922918e-42, - 2.4121704704766354e-42, - 3.15541934990005e-42, - 3.873412055808314e-42, - 4.528368270932117e-42, - 5.110802875504764e-42, - 5.6480604499500245e-42, - 6.168408374563022e-42, - 6.685384930991317e-42, - 7.194091962143403e-42, - 7.680329251445584e-42, - 8.14713117256794e-42, - 8.602699761293302e-42, - 9.045384820528916e-42, - 9.474033768038512e-42, - 9.898261215878932e-42, - 1.031959070518714e-41, - 1.0751895245147289e-41, - 1.1172465117919517e-41, - 1.1584153571336373e-41, - 1.198697729523228e-41, - 1.2388069396038557e-41, - 1.2790917956297567e-41, - 1.3197533432372925e-41, - 1.3598960363864006e-41, - 1.3996043372682322e-41, - 1.4396399184946148e-41, - 1.4800504352678985e-41, - 1.5203061506772595e-41, - 1.5601132163632156e-41, - 1.5996727248026694e-41, - 1.6391139822230482e-41, - 1.6786057662774806e-41, - 1.7182111469900421e-41, - 1.7579725835022748e-41, - 1.7977984276614483e-41, - 1.837526656880598e-41, - 1.8770861970770786e-41, - 1.9166648794744015e-41, - 1.9564054752490274e-41, - 1.996452206989257e-41, - 2.0365143894858044e-41, - 2.076395952851492e-41, - 2.115930687698667e-41, - 2.1552200925472278e-41, - 2.1944541743090969e-41, - 2.2338062934559e-41, - 2.2733015999197192e-41, - 2.3127899457753737e-41, - 2.3521529225075633e-41, - 2.391241167820172e-41, - 2.4300897260399566e-41, - 2.4689150027873115e-41, - 2.5078735701610825e-41, - 2.547178566855644e-41, - 2.5865336576702417e-41, - 2.62615099332835e-41, - 2.665739027998153e-41, - 2.704983190726244e-41, - 2.7437543917381673e-41, - 2.782098189276604e-41, - 2.8205033809048606e-41, - 2.8591363593569874e-41, - 2.898091025893319e-41, - 2.9374833465463785e-41, - 2.9771027525822684e-41, - 3.016716138635919e-41, - 3.05613572556655e-41, - 3.0951586841598894e-41, - 3.1336936915630146e-41, - 3.171970589626975e-41, - 3.2101836745146856e-41, - 3.248511974553467e-41, - 3.2872294066442645e-41, - 3.326475509596187e-41, - 3.3661990832070217e-41, - 3.4062512220932794e-41, - 3.446457331625406e-41, - 3.486609475345976e-41, - 3.526534338164517e-41, - 3.5660986207555075e-41, - 3.605274790154879e-41, - 3.6441374035096743e-41, - 3.6827866521194694e-41, - 3.72125685119001e-41, - 3.7596169214293897e-41, - 3.797945729599857e-41, - 3.8362910755988296e-41, - 3.874654229046523e-41, - 3.9130449517536303e-41, - 3.951499099251063e-41, - 3.9900659952394305e-41, - 4.028767564485625e-41, - 4.0675981475417323e-41, - 4.106578337215619e-41, - 4.145678356919379e-41, - 4.1848553846106844e-41, - 4.2240507472059236e-41, - 4.263186553056914e-41, - 4.3022523303599383e-41, - 4.3411498186507604e-41, - 4.3798933258474845e-41, - 4.4184806527704887e-41, - 4.4569790091049965e-41, - 4.4954147231553323e-41, - 4.533738649720034e-41, - 4.5719421922481653e-41, - 4.610021895111093e-41, - 4.648080854826145e-41, - 4.686257855857593e-41, - 4.724579344021753e-41, - 4.7629681063153e-41, - 4.801420813020608e-41, - 4.840020358244724e-41, - 4.878728452596013e-41, - 4.91750040226011e-41, - 4.956433196851379e-41, - 4.995487042583592e-41, - 5.034626451100167e-41, - 5.073913904492106e-41, - 5.113215724374404e-41, - 5.15246407088866e-41, - 5.191772895504007e-41, - 5.231044419134407e-41, - 5.270113769007233e-41, - 5.309026690417002e-41, - 5.3478492583024e-41, - 5.386499987925027e-41, - 5.424857561384255e-41, - 5.462928991874594e-41, - 5.500862282633449e-41, - 5.53874833424615e-41, - 5.576621588997109e-41, - 5.61454372995365e-41, - 5.652497388768617e-41, - 5.690442977689638e-41, - 5.728493520155839e-41, - 5.766782354393951e-41, - 5.805293182431512e-41, - 5.843974896380302e-41, - 5.882795841284372e-41, - 5.921698116653571e-41, - 5.960649655968785e-41, - 5.99967023977558e-41, - 6.038698607104173e-41, - 6.077605623715258e-41, - 6.116408360645938e-41, - 6.155228777591487e-41, - 6.194067524866851e-41, - 6.232801459624592e-41, - 6.271341357441322e-41, - 6.309684284615032e-41, - 6.347878977792311e-41, - 6.386042827687828e-41, - 6.424273531276056e-41, - 6.462539778217785e-41, - 6.500763193893344e-41, - 6.53894636877422e-41, - 6.577152629582387e-41, - 6.615429484741939e-41, - 6.653810831384949e-41, - 6.692316769293812e-41, - 6.73092296935061e-41, - 6.769593996419043e-41, - 6.808322176539523e-41, - 6.84709406723965e-41, - 6.885877496167698e-41, - 6.924661106588243e-41, - 6.963453303724518e-41, - 7.002231890234343e-41, - 7.040916266118738e-41, - 7.079452235229801e-41, - 7.117905486818994e-41, - 7.15637401171617e-41, - 7.194879447993818e-41, - 7.233342263567077e-41, - 7.271679179125406e-41, - 7.309872829891378e-41, - 7.347947359874377e-41, - 7.385981608810388e-41, - 7.424075274956871e-41, - 7.462297220639242e-41, - 7.500596784227625e-41, - 7.538874603756122e-41, - 7.577080093392405e-41, - 7.615275517188967e-41, - 7.653550113262885e-41, - 7.691944484359137e-41, - 7.730430636182296e-41, - 7.768972110469231e-41, - 7.807546814439556e-41, - 7.846142499517759e-41, - 7.884742707291195e-41, - 7.923325310227157e-41, - 7.961878487940854e-41, - 8.00040857083004e-41, - 8.038945128166898e-41, - 8.077512609332331e-41, - 8.116106747753904e-41, - 8.154688481337969e-41, - 8.193219857872252e-41, - 8.231691789717745e-41, - 8.270116565963511e-41, - 8.30850169432643e-41, - 8.346839166662504e-41, - 8.385125591069626e-41, - 8.423367288493186e-41, - 8.461584067596881e-41, - 8.499789426777701e-41, - 8.537986307659262e-41, - 8.576165827729567e-41, - 8.614322739927714e-41, - 8.652462870505339e-41, - 8.690601613177911e-41, - 8.728756707929909e-41, - 8.766935078090766e-41, - 8.805137580472979e-41, - 8.843351899100199e-41, - 8.881569232849926e-41, - 8.91978135394861e-41, - 8.957988669028063e-41, - 8.996199228896201e-41, - 9.034423233757218e-41, - 9.072675402321699e-41, - 9.110959728232158e-41, - 9.14927568110519e-41, - 9.18760974532636e-41, - 9.225938826550198e-41, - 9.26424351316898e-41, - 9.30251000343216e-41, - 9.340744268371556e-41, - 9.378956722751564e-41, - 9.417157907732828e-41, - 9.455355936800392e-41, - 9.493548742519229e-41, - 9.531731465687858e-41, - 9.56989385024792e-41, - 9.608028263431408e-41, - 9.64614180626468e-41, - 9.684243737629841e-41, - 9.722354684838826e-41, - 9.76048452423969e-41, - 9.798638195656084e-41, - 9.836817741285924e-41, - 9.875019434753026e-41, - 9.91324018659591e-41, - 9.95147646336967e-41, - 9.989722934493488e-41, - 1.0027982989400282e-40, - 1.0066264380521115e-40, - 1.0104577390409546e-40, - 1.0142935065364125e-40, - 1.0181338963509988e-40, - 1.0219788607692442e-40, - 1.0258280773572527e-40, - 1.029681501923355e-40, - 1.0335399023222707e-40, - 1.0374040555075402e-40, - 1.0412737284939047e-40, - 1.045146412154026e-40, - 1.0490188210748523e-40, - 1.052887856044047e-40, - 1.0567530082976014e-40, - 1.0606166699079682e-40, - 1.0644817060329369e-40, - 1.0683505799077631e-40, - 1.0722223722056761e-40, - 1.0760935385066027e-40, - 1.0799602572723648e-40, - 1.0838191978668085e-40, - 1.0876700628395963e-40, - 1.091514231048981e-40, - 1.0953531971177755e-40, - 1.0991880950032989e-40, - 1.1030181528807819e-40, - 1.1068420408077658e-40, - 1.1106584521463298e-40, - 1.1144664170296957e-40, - 1.1182670707963355e-40, - 1.1220624291973267e-40, - 1.1258545212341938e-40, - 1.1296451939358211e-40, - 1.1334346255575793e-40, - 1.1372222254081673e-40, - 1.1410074347875202e-40, - 1.1447897434265063e-40, - 1.1485695813691445e-40, - 1.1523476373358273e-40, - 1.1561243554510188e-40, - 1.1599001790201803e-40, - 1.163675304322151e-40, - 1.1674504707643084e-40, - 1.1712272378052036e-40, - 1.1750071907711341e-40, - 1.1787919137178764e-40, - 1.1825821875437766e-40, - 1.1863773112730079e-40, - 1.1901764281548167e-40, - 1.193978633157354e-40, - 1.1977828124113713e-40, - 1.201588389382531e-40, - 1.2053950072082777e-40, - 1.2092023155296288e-40, - 1.213010134140639e-40, - 1.2168186669043016e-40, - 1.2206282916921513e-40, - 1.2244393925386816e-40, - 1.2282523795258885e-40, - 1.2320676932242426e-40, - 1.2358851542780368e-40, - 1.2397044193011422e-40, - 1.243525142359833e-40, - 1.2473467479893176e-40, - 1.2511688349648778e-40, - 1.2549916069179763e-40, - 1.2588152980225694e-40, - 1.2626401660057483e-40, - 1.2664665392675057e-40, - 1.2702937888318415e-40, - 1.2741208755164161e-40, - 1.2779467594942993e-40, - 1.2817704821173744e-40, - 1.2855919330856358e-40, - 1.2894123147186582e-40, - 1.2932330014166331e-40, - 1.297055364311175e-40, - 1.3008803794353775e-40, - 1.3047077123348996e-40, - 1.3085362386225462e-40, - 1.3123647928055829e-40, - 1.3161922285898965e-40, - 1.3200179766463967e-40, - 1.3238422316719318e-40, - 1.3276653124899247e-40, - 1.331487540010383e-40, - 1.335309202185107e-40, - 1.3391300565210532e-40, - 1.3429497049465368e-40, - 1.3467679045163797e-40, - 1.3505844139072182e-40, - 1.3543990426255352e-40, - 1.3582122935188816e-40, - 1.362025023450027e-40, - 1.3658380173304408e-40, - 1.3696520595018873e-40, - 1.3734678753884443e-40, - 1.3772852258249998e-40, - 1.381102931932051e-40, - 1.3849196972008394e-40, - 1.388734224195371e-40, - 1.392545247589399e-40, - 1.3963523122768163e-40, - 1.4001561535579325e-40, - 1.4039578180787588e-40, - 1.4077583584219857e-40, - 1.411558823334419e-40, - 1.4153599610549772e-40, - 1.4191617220271908e-40, - 1.4229636509076389e-40, - 1.426765272238409e-40, - 1.4305661105717937e-40, - 1.4343657052977736e-40, - 1.4381637576029139e-40, - 1.4419602385985024e-40, - 1.4457551558667953e-40, - 1.4495485169900484e-40, - 1.4533403185767763e-40, - 1.4571304415461856e-40, - 1.4609186393484506e-40, - 1.4647046380091279e-40, - 1.4684881635027521e-40, - 1.4722689467508997e-40, - 1.4760470552572115e-40, - 1.4798231325606516e-40, - 1.4835979100043964e-40, - 1.4873721210695871e-40, - 1.4911464989100988e-40, - 1.4949216802212247e-40, - 1.4986976322001847e-40, - 1.5024740229470938e-40, - 1.5062505143049049e-40, - 1.510026768115725e-40, - 1.5138024484375486e-40, - 1.5175774724606154e-40, - 1.521352265624039e-40, - 1.5251273427510647e-40, - 1.5289032212829018e-40, - 1.532680418660759e-40, - 1.5364594415570157e-40, - 1.5402406239926017e-40, - 1.5440240464762451e-40, - 1.5478097111206973e-40, - 1.5515976191692953e-40, - 1.555387771865639e-40, - 1.5591801507731854e-40, - 1.5629746465218034e-40, - 1.566771231330045e-40, - 1.5705699116432048e-40, - 1.5743706939023757e-40, - 1.5781735845110672e-40, - 1.581978641754282e-40, - 1.5857861009345402e-40, - 1.5895962287668143e-40, - 1.5934092906259092e-40, - 1.597225551886629e-40, - 1.6010452775373121e-40, - 1.6048685514953234e-40, - 1.6086949601161078e-40, - 1.6125239585365545e-40, - 1.616354995277162e-40, - 1.6201875188584284e-40, - 1.6240209783873777e-40, - 1.6278550334979493e-40, - 1.6316897475607047e-40, - 1.6355250238979096e-40, - 1.6393607375361162e-40, - 1.6431967634746923e-40, - 1.6470329766657119e-40, - 1.6508691319588046e-40, - 1.6547047501389396e-40, - 1.6585396425377537e-40, - 1.6623736756334409e-40, - 1.6662067159042271e-40, - 1.6700386298411923e-40, - 1.6738692928103e-40, - 1.6776985785707917e-40, - 1.6815261711669235e-40, - 1.6853517013021345e-40, - 1.6891747996798547e-40, - 1.6929950970035164e-40, - 1.69681224326517e-40, - 1.7006261317977228e-40, - 1.7044369364356563e-40, - 1.7082449053437176e-40, - 1.712050287414159e-40, - 1.7158533315392288e-40, - 1.7196542862058378e-40, - 1.7234533687248775e-40, - 1.7272506948637855e-40, - 1.7310463040744794e-40, - 1.7348402305276886e-40, - 1.7386325084134596e-40, - 1.7424231719274717e-40, - 1.7462122457200223e-40, - 1.7499997114451772e-40, - 1.7537856029551557e-40, - 1.7575699766703602e-40, - 1.761352889017013e-40, - 1.7651343964213359e-40, - 1.768914555721596e-40, - 1.77269345110324e-40, - 1.7764712622533888e-40, - 1.7802482460661279e-40, - 1.7840246646519568e-40, - 1.7878007801213734e-40, - 1.7915768545848779e-40, - 1.79535316035987e-40, - 1.7991300598831658e-40, - 1.8029078211244246e-40, - 1.8066866293526451e-40, - 1.81046666910189e-40, - 1.8142481249062191e-40, - 1.818031181299694e-40, - 1.8218159522780352e-40, - 1.8256022519431472e-40, - 1.8293898771230248e-40, - 1.8331786418168361e-40, - 1.8369683600222037e-40, - 1.8407588457276644e-40, - 1.844549913044619e-40, - 1.8483414506807475e-40, - 1.852133544386101e-40, - 1.8559263119532034e-40, - 1.8597198724294093e-40, - 1.8635143448620758e-40, - 1.867309848298559e-40, - 1.8711065015997174e-40, - 1.87490438440184e-40, - 1.878703443710581e-40, - 1.882503516123475e-40, - 1.8863044249093357e-40, - 1.8901059933369717e-40, - 1.8939080446751948e-40, - 1.8977104021177877e-40, - 1.901512864155623e-40, - 1.9053152317765436e-40, - 1.909117436869396e-40, - 1.912919430165328e-40, - 1.9167211623912846e-40, - 1.9205225842741908e-40, - 1.924323646542424e-40, - 1.928124340303897e-40, - 1.9319247880275897e-40, - 1.9357250978971762e-40, - 1.9395253686595274e-40, - 1.9433256990662977e-40, - 1.947126187871332e-40, - 1.950926933836523e-40, - 1.9547280190028703e-40, - 1.9585293741812668e-40, - 1.962330709711497e-40, - 1.9661316702573497e-40, - 1.9699319005244506e-40, - 1.973731045218423e-40, - 1.9775287490448923e-40, - 1.981324659479529e-40, - 1.9851185155815913e-40, - 1.9889103748147484e-40, - 1.9927005309683746e-40, - 1.996489287321153e-40, - 2.0002769471517116e-40, - 2.00406381373868e-40, - 2.0078501903606836e-40, - 2.011636377722163e-40, - 2.015422570109088e-40, - 2.019208593895511e-40, - 2.0229941900829863e-40, - 2.0267790998168636e-40, - 2.030563064241241e-40, - 2.034345824500218e-40, - 2.038127120479824e-40, - 2.041906659728138e-40, - 2.0456843553291518e-40, - 2.0494604063020088e-40, - 2.0532350271884562e-40, - 2.0570084325296654e-40, - 2.0607808368669867e-40, - 2.064552454746468e-40, - 2.0683235121754676e-40, - 2.0720942841569834e-40, - 2.0758647002413895e-40, - 2.079634497448916e-40, - 2.083403411498276e-40, - 2.087171178108183e-40, - 2.090937532997348e-40, - 2.0947022118844846e-40, - 2.098464938102899e-40, - 2.1022254896473647e-40, - 2.105984087272187e-40, - 2.1097410706161378e-40, - 2.1134967791892068e-40, - 2.117251552501379e-40, - 2.1210057300626425e-40, - 2.1247596513821253e-40, - 2.128513651585757e-40, - 2.132267936795688e-40, - 2.1360223419339063e-40, - 2.1397766294647606e-40, - 2.143530562122448e-40, - 2.147283902640168e-40, - 2.1510364137509164e-40, - 2.1547878581866053e-40, - 2.1585379880413623e-40, - 2.162286597146018e-40, - 2.166033732985726e-40, - 2.16977949402199e-40, - 2.1735239777861216e-40, - 2.177267281809429e-40, - 2.1810095036232235e-40, - 2.184750740760811e-40, - 2.188491120571773e-40, - 2.1922309163291034e-40, - 2.195970412684781e-40, - 2.1997098860415803e-40, - 2.2034496146954244e-40, - 2.2071898769538614e-40, - 2.210930951124438e-40, - 2.214673115514703e-40, - 2.218416634232596e-40, - 2.2221615902292903e-40, - 2.2259078520080105e-40, - 2.229655220975078e-40, - 2.233403498473484e-40, - 2.2371524859145534e-40, - 2.2409019847096124e-40, - 2.244651796269984e-40, - 2.2484017229336184e-40, - 2.2521516513725254e-40, - 2.255901664504635e-40, - 2.259651942591864e-40, - 2.2634026679425046e-40, - 2.2671540209311166e-40, - 2.270906181935991e-40, - 2.2746593313417773e-40, - 2.278413649533689e-40, - 2.2821692985757446e-40, - 2.285926294906071e-40, - 2.289684580502969e-40, - 2.2934440975860477e-40, - 2.297204793562091e-40, - 2.3009666162888983e-40, - 2.3047295136242654e-40, - 2.308493433425991e-40, - 2.3122583236737344e-40, - 2.316024180839767e-40, - 2.3197910909855425e-40, - 2.323559073883316e-40, - 2.327328131896312e-40, - 2.331098264427384e-40, - 2.3348694708028278e-40, - 2.3386417503489414e-40, - 2.3424151023920187e-40, - 2.346189523950188e-40, - 2.349964925622537e-40, - 2.353741141054957e-40, - 2.35751804314277e-40, - 2.361295512632859e-40, - 2.36507343278917e-40, - 2.368851686899229e-40, - 2.372630158250558e-40, - 2.376408730130682e-40, - 2.380187290449952e-40, - 2.3839658180206237e-40, - 2.3877443600594773e-40, - 2.391522951056792e-40, - 2.3953016188553422e-40, - 2.3990803880654205e-40, - 2.4028592832664257e-40, - 2.4066383290357544e-40, - 2.4104175499488864e-40, - 2.4141969687830853e-40, - 2.4179765716328927e-40, - 2.421756329534823e-40, - 2.4255362329569595e-40, - 2.429316278692094e-40, - 2.43309646757741e-40, - 2.436876800546059e-40, - 2.4406572785311957e-40, - 2.4444379024659696e-40, - 2.448218673405106e-40, - 2.4519995966703092e-40, - 2.4557806299023936e-40, - 2.4595616517415606e-40, - 2.463342532517515e-40, - 2.4671231393603346e-40, - 2.4709033391331965e-40, - 2.4746829986992765e-40, - 2.4784619849217525e-40, - 2.482240164671545e-40, - 2.4860174133102054e-40, - 2.489793681480011e-40, - 2.4935690800858383e-40, - 2.4973437502901222e-40, - 2.5011178351915444e-40, - 2.504891478466154e-40, - 2.508664823789995e-40, - 2.5124380148391156e-40, - 2.516211195289559e-40, - 2.5199845080308597e-40, - 2.523758078246744e-40, - 2.5275319161948867e-40, - 2.531305961081883e-40, - 2.535080149636195e-40, - 2.538854416896751e-40, - 2.5426286977890372e-40, - 2.54640292723865e-40, - 2.5501770401736533e-40, - 2.5539509715324847e-40, - 2.5577246601870496e-40, - 2.561498079067239e-40, - 2.5652712705137617e-40, - 2.5690442889764654e-40, - 2.572817190428146e-40, - 2.5765900316983867e-40, - 2.580362869626334e-40, - 2.584135761051131e-40, - 2.5879087628119214e-40, - 2.5916819309721223e-40, - 2.5954552980251384e-40, - 2.599228833920507e-40, - 2.6030024619473455e-40, - 2.606776102191254e-40, - 2.610549672240028e-40, - 2.614323088831938e-40, - 2.6180962687045513e-40, - 2.621869128595434e-40, - 2.6256415852421514e-40, - 2.629413557682597e-40, - 2.633185000719276e-40, - 2.6369559564222152e-40, - 2.6407265178194976e-40, - 2.6444967800484025e-40, - 2.6482668420377656e-40, - 2.6520368039012345e-40, - 2.65580676575307e-40, - 2.6595768277075354e-40, - 2.663347089878891e-40, - 2.6671176492163486e-40, - 2.670888558441516e-40, - 2.674659788242069e-40, - 2.678431268393769e-40, - 2.6822029272857083e-40, - 2.685974690243217e-40, - 2.689746481235665e-40, - 2.693518224226389e-40, - 2.6972898431787263e-40, - 2.7010612620563393e-40, - 2.7048324046380182e-40, - 2.7086031921966515e-40, - 2.7123735755681112e-40, - 2.7161435394803207e-40, - 2.7199130703539226e-40, - 2.7236821574447773e-40, - 2.7274507925380346e-40, - 2.731218967507547e-40, - 2.734986674227165e-40, - 2.7387539045707397e-40, - 2.7425206506945883e-40, - 2.7462869390146264e-40, - 2.750052843234459e-40, - 2.753818403468779e-40, - 2.7575836545996385e-40, - 2.7613486299259476e-40, - 2.765113358348961e-40, - 2.768877868012513e-40, - 2.7726421870604404e-40, - 2.7764063436365796e-40, - 2.7801703658847656e-40, - 2.7839342687500263e-40, - 2.7876979829394803e-40, - 2.791461456519462e-40, - 2.795224662715319e-40, - 2.7989875749808237e-40, - 2.802750168831496e-40, - 2.806512421627195e-40, - 2.8102743107921486e-40, - 2.8140358137503586e-40, - 2.817796907925824e-40, - 2.8215575710068537e-40, - 2.8253178130434225e-40, - 2.829077681658526e-40, - 2.832837177113811e-40, - 2.83659629271763e-40, - 2.8403550215901233e-40, - 2.8441133555142065e-40, - 2.8478712856938665e-40, - 2.8516288033307687e-40, - 2.8553858996265786e-40, - 2.859142565782972e-40, - 2.862898792601883e-40, - 2.866654563330522e-40, - 2.8704098754102245e-40, - 2.874164748892647e-40, - 2.877919204879141e-40, - 2.881673264729199e-40, - 2.8854269511075737e-40, - 2.8891802870906278e-40, - 2.892933295754875e-40, - 2.8966860001768317e-40, - 2.900438423433014e-40, - 2.904190589136464e-40, - 2.907942527466605e-40, - 2.9116942641376562e-40, - 2.9154458175454897e-40, - 2.9191972058931226e-40, - 2.922948447432424e-40, - 2.926699560704862e-40, - 2.930450564357616e-40, - 2.9342014770380173e-40, - 2.937952317393402e-40, - 2.9417031040711044e-40, - 2.9454538545315905e-40, - 2.9492045674627e-40, - 2.9529552377102568e-40, - 2.9567058702317684e-40, - 2.9604564703462122e-40, - 2.964207043180282e-40, - 2.967957591503962e-40, - 2.9717081165070225e-40, - 2.9754586193510283e-40, - 2.9792091011989122e-40, - 2.98295956321372e-40, - 2.9867100070495804e-40, - 2.9904604571470873e-40, - 2.9942109422161874e-40, - 2.9979614496890374e-40, - 3.0017119633067777e-40, - 3.005462466825954e-40, - 3.0092129455100786e-40, - 3.0129633873750824e-40, - 3.01671378073008e-40, - 3.0204641138841936e-40, - 3.024214375146544e-40, - 3.027964552826247e-40, - 3.0317146264224133e-40, - 3.0354645572259822e-40, - 3.039214377451881e-40, - 3.042964141365569e-40, - 3.046713903233104e-40, - 3.0504637171636157e-40, - 3.054213635769321e-40, - 3.05796371083236e-40, - 3.0617139941260292e-40, - 3.0654645374236262e-40, - 3.0692153924984432e-40, - 3.0729666110503933e-40, - 3.076718241454393e-40, - 3.080470289745202e-40, - 3.08422271263442e-40, - 3.0879754637935e-40, - 3.0917284969251912e-40, - 3.0954817658774936e-40, - 3.0992352247612976e-40, - 3.1029888277492444e-40, - 3.1067425290139707e-40, - 3.110496282728119e-40, - 3.1142500430643284e-40, - 3.1180037674119485e-40, - 3.1217574427397322e-40, - 3.1255110767768293e-40, - 3.129264680466964e-40, - 3.133018264790437e-40, - 3.136771840727829e-40, - 3.1405254195188467e-40, - 3.144279013142033e-40, - 3.148032633706751e-40, - 3.1517862932979223e-40, - 3.155540003920406e-40, - 3.159293777562698e-40, - 3.163047620255099e-40, - 3.1668015057330636e-40, - 3.1705554288019018e-40, - 3.174309398913007e-40, - 3.1780634255628823e-40, - 3.181817518248017e-40, - 3.185571686317616e-40, - 3.189325938605983e-40, - 3.193080283834975e-40, - 3.196834730726448e-40, - 3.200589288002264e-40, - 3.204343964384277e-40, - 3.208098773600519e-40, - 3.211853760471181e-40, - 3.2156089303085423e-40, - 3.2193642608379934e-40, - 3.2231197296022243e-40, - 3.2268753141439303e-40, - 3.230630992005763e-40, - 3.2343867407300505e-40, - 3.2381425378589697e-40, - 3.2418983609346993e-40, - 3.2456541874994146e-40, - 3.2494099950952917e-40, - 3.2531657593666973e-40, - 3.256921424314808e-40, - 3.260676960529732e-40, - 3.2644323884601554e-40, - 3.2681877303497333e-40, - 3.2719430084421235e-40, - 3.275698244986749e-40, - 3.2794534623820693e-40, - 3.283208683226272e-40, - 3.2869639301329505e-40, - 3.2907192257156914e-40, - 3.2944745925880826e-40, - 3.2982300533822887e-40, - 3.3019856401358164e-40, - 3.3057413848578956e-40, - 3.3094972548189525e-40, - 3.3132532054710725e-40, - 3.3170091922663425e-40, - 3.320765170656845e-40, - 3.324521096005194e-40, - 3.3282769228916073e-40, - 3.3320326054919135e-40, - 3.33578809797855e-40, - 3.3395433545138044e-40, - 3.3432983292019403e-40, - 3.347052976359632e-40, - 3.3508072562325403e-40, - 3.3545611631393115e-40, - 3.3583147190557204e-40, - 3.3620679469661228e-40, - 3.3658208698548705e-40, - 3.3695735107063204e-40, - 3.373325892829839e-40, - 3.37707804109114e-40, - 3.380829980821257e-40, - 3.3845817373513023e-40, - 3.3883333360123893e-40, - 3.3920848021356315e-40, - 3.39583615911236e-40, - 3.399587412514002e-40, - 3.403338548838534e-40, - 3.4070895492690657e-40, - 3.410840395108166e-40, - 3.4145910676661708e-40, - 3.418341548253412e-40, - 3.4220918178618244e-40, - 3.425841856011515e-40, - 3.4295916417975957e-40, - 3.4333411543151335e-40, - 3.4370903726592044e-40, - 3.4408392759248748e-40, - 3.4445878431637216e-40, - 3.448336053844969e-40, - 3.4520838930571433e-40, - 3.455831348562254e-40, - 3.4595784081368878e-40, - 3.4633250595576267e-40, - 3.4670712906010584e-40, - 3.470817088967366e-40, - 3.4745624416318306e-40, - 3.4783073351693767e-40, - 3.482051756150724e-40, - 3.485795691146591e-40, - 3.4895391267276886e-40, - 3.493282050758872e-40, - 3.497024467534358e-40, - 3.5007663822569598e-40, - 3.504507792282393e-40, - 3.5082486947930863e-40, - 3.5119890869714715e-40, - 3.515728965999975e-40, - 3.5194683290917655e-40, - 3.523207174761935e-40, - 3.5269455032813817e-40, - 3.530683315045078e-40, - 3.5344206104479945e-40, - 3.5381573900561887e-40, - 3.5418936567158933e-40, - 3.545629406510548e-40, - 3.549364628594215e-40, - 3.553099326034828e-40, - 3.556833503507391e-40, - 3.560567165686905e-40, - 3.5643003172483712e-40, - 3.5680329628667937e-40, - 3.5717651069257273e-40, - 3.575496751709322e-40, - 3.5792278985817017e-40, - 3.5829585489030802e-40, - 3.586688704033666e-40, - 3.590418365333673e-40, - 3.5941475357924897e-40, - 3.59787623347905e-40, - 3.601604481123684e-40, - 3.605332299431265e-40, - 3.6090597051986766e-40, - 3.612786705133681e-40, - 3.616513304328686e-40, - 3.6202395078760922e-40, - 3.6239653208170446e-40, - 3.627690748005515e-40, - 3.6314157942527683e-40, - 3.635140464370064e-40, - 3.638864763168666e-40, - 3.6425886954598375e-40, - 3.6463122625623335e-40, - 3.6500354528286266e-40, - 3.653758259117666e-40, - 3.657480676510497e-40, - 3.6612027000881743e-40, - 3.6649243249317554e-40, - 3.668645546122294e-40, - 3.672366358740887e-40, - 3.676086758385205e-40, - 3.679806752903392e-40, - 3.683526368851576e-40, - 3.687245634548985e-40, - 3.690964578314849e-40, - 3.6946832284685e-40, - 3.6984016180054366e-40, - 3.702119788715862e-40, - 3.705837756526716e-40, - 3.709555530743451e-40, - 3.7132731206715245e-40, - 3.716990535616395e-40, - 3.720707784883517e-40, - 3.724424877778348e-40, - 3.728141823581805e-40, - 3.731858631427402e-40, - 3.735575310393847e-40, - 3.739291869559761e-40, - 3.743008318003764e-40, - 3.74672466480053e-40, - 3.750440907575498e-40, - 3.754157010089848e-40, - 3.757873001785396e-40, - 3.761588939537053e-40, - 3.76530488024519e-40, - 3.769020880810184e-40, - 3.772736998132405e-40, - 3.776453289112229e-40, - 3.7801698106361516e-40, - 3.7838866191999895e-40, - 3.7876037708645166e-40, - 3.791321321667712e-40, - 3.795039327647561e-40, - 3.798757844842041e-40, - 3.802476930926193e-40, - 3.806196674624166e-40, - 3.809917085819495e-40, - 3.8136380706540454e-40, - 3.817359531408847e-40, - 3.821081370697341e-40, - 3.824803499201544e-40 - ] - }, - "nue_bar": { - "cc": [ - 1.0626705888760508e-45, - 2.1058413370542355e-43, - 6.559242834205058e-43, - 1.1013717569708976e-42, - 1.5882491114245165e-42, - 2.149270586486374e-42, - 2.7574056823600375e-42, - 3.3882381895369057e-42, - 4.04941417483243e-42, - 4.742767671473244e-42, - 5.4677229145243836e-42, - 6.202032637842036e-42, - 6.950664305881898e-42, - 7.690207055248148e-42, - 8.440618803536625e-42, - 9.174267402304295e-42, - 9.8937662949164e-42, - 1.0608544261220215e-41, - 1.1304994316476897e-41, - 1.1992424631932156e-41, - 1.2647738002381975e-41, - 1.332242990327393e-41, - 1.3984388429944496e-41, - 1.4636117569887603e-41, - 1.527821915191779e-41, - 1.5921070005165053e-41, - 1.6563544401597588e-41, - 1.71940748389485e-41, - 1.7811802750180015e-41, - 1.8428186685986472e-41, - 1.9047413640882589e-41, - 1.9666542670379104e-41, - 2.028145354630695e-41, - 2.0890488180821577e-41, - 2.1492837059698954e-41, - 2.208927728630631e-41, - 2.268172060451947e-41, - 2.327161394763547e-41, - 2.3861790178497124e-41, - 2.445336775253268e-41, - 2.5048046055535745e-41, - 2.564439752135277e-41, - 2.6241070320050415e-41, - 2.683878967967782e-41, - 2.743426141940959e-41, - 2.802655338326517e-41, - 2.8614304042109035e-41, - 2.919751332502409e-41, - 2.9779469116001244e-41, - 3.0361912621200647e-41, - 3.0946723785457675e-41, - 3.153311884447131e-41, - 3.212080678965753e-41, - 3.2707867163944643e-41, - 3.3293578882965343e-41, - 3.387693683428108e-41, - 3.4458284917156575e-41, - 3.503724368982911e-41, - 3.561488997656158e-41, - 3.619175931840416e-41, - 3.6768138378848145e-41, - 3.734480586846293e-41, - 3.792162814685102e-41, - 3.849793863669998e-41, - 3.9074494062599867e-41, - 3.965095235858504e-41, - 4.022775166559754e-41, - 4.0805029884446024e-41, - 4.138254196528989e-41, - 4.1961513671338595e-41, - 4.25368973870371e-41, - 4.3106828639112296e-41, - 4.368153102104885e-41, - 4.4258163764780453e-41, - 4.4833777589527445e-41, - 4.541038568078203e-41, - 4.598844382089495e-41, - 4.656814808927753e-41, - 4.714986364787448e-41, - 4.773398599652838e-41, - 4.832007873131939e-41, - 4.890736909560057e-41, - 4.94956380249074e-41, - 5.008517256092422e-41, - 5.06746567320125e-41, - 5.126333607688499e-41, - 5.185151304349351e-41, - 5.243789513271956e-41, - 5.302190583629482e-41, - 5.360255611830611e-41, - 5.41794074112623e-41, - 5.475313327589041e-41, - 5.532412114793026e-41, - 5.589302533933966e-41, - 5.646116647959417e-41, - 5.703001578041469e-41, - 5.759984964024518e-41, - 5.81709702724687e-41, - 5.874403396065713e-41, - 5.931864351055112e-41, - 5.989404580425242e-41, - 6.047097998027967e-41, - 6.105101207999653e-41, - 6.163209130696001e-41, - 6.221235360103149e-41, - 6.279364551660822e-41, - 6.33781267529677e-41, - 6.396369353745608e-41, - 6.454653287350272e-41, - 6.512887208102133e-41, - 6.571368855993341e-41, - 6.629808135781746e-41, - 6.687928409691905e-41, - 6.745740773743441e-41, - 6.803441386684179e-41, - 6.861209960974554e-41, - 6.919175731770816e-41, - 6.977312133306872e-41, - 7.035522194419161e-41, - 7.093942628044179e-41, - 7.152779058446512e-41, - 7.211950613904787e-41, - 7.271409026452937e-41, - 7.331170267697937e-41, - 7.391076249140012e-41, - 7.450949013753511e-41, - 7.510691357937229e-41, - 7.570240010856838e-41, - 7.629581734556236e-41, - 7.68858319193297e-41, - 7.746891167529984e-41, - 7.804495894235614e-41, - 7.861697515354454e-41, - 7.918628550246142e-41, - 7.9753367037804e-41, - 8.031907117150771e-41, - 8.088360057385498e-41, - 8.144769527792829e-41, - 8.20127497683183e-41, - 8.258107500161403e-41, - 8.315505061845357e-41, - 8.37338563476915e-41, - 8.431572580194578e-41, - 8.490066879743271e-41, - 8.549004769564848e-41, - 8.608327693176637e-41, - 8.667782044480462e-41, - 8.727191928139141e-41, - 8.786551228165205e-41, - 8.845912016576334e-41, - 8.905255567942342e-41, - 8.964481531225037e-41, - 9.023501970217961e-41, - 9.082266100758547e-41, - 9.140813541553647e-41, - 9.199229862447709e-41, - 9.257515796942738e-41, - 9.31562301414447e-41, - 9.373571148208783e-41, - 9.431461227510283e-41, - 9.48938072620922e-41, - 9.54730408750353e-41, - 9.60520731168369e-41, - 9.663153713277435e-41, - 9.721225694920409e-41, - 9.779439989637236e-41, - 9.837781106039632e-41, - 9.896230575621189e-41, - 9.954735329312232e-41, - 1.0013263354110572e-40, - 1.0071809065166866e-40, - 1.0130405193447448e-40, - 1.0189076325704685e-40, - 1.0247757261881848e-40, - 1.0306427387578183e-40, - 1.0365131298138253e-40, - 1.0423897497630934e-40, - 1.0482758094043582e-40, - 1.0541671557605077e-40, - 1.060058344965998e-40, - 1.0659501129555045e-40, - 1.0718477366934883e-40, - 1.0777563264752672e-40, - 1.0836731787747691e-40, - 1.0895885260171915e-40, - 1.0954933054773104e-40, - 1.1013887927256484e-40, - 1.1072789357897125e-40, - 1.113171604857452e-40, - 1.1190739925748667e-40, - 1.1249887013069862e-40, - 1.1309090413690246e-40, - 1.1368258895417114e-40, - 1.1427343908872085e-40, - 1.1486388304083082e-40, - 1.154543937162934e-40, - 1.1604513847848402e-40, - 1.1663594024596068e-40, - 1.1722652993202354e-40, - 1.1781711336432644e-40, - 1.1840818793774062e-40, - 1.1899999364492456e-40, - 1.1959213170382765e-40, - 1.2018412430480964e-40, - 1.2077546169821314e-40, - 1.2136602474512294e-40, - 1.2195625896770793e-40, - 1.2254662194429168e-40, - 1.2313721149251351e-40, - 1.2372806185037592e-40, - 1.2431924085090079e-40, - 1.2491060372075136e-40, - 1.2550184988857837e-40, - 1.2609266036997222e-40, - 1.2668298009967144e-40, - 1.2727312912309079e-40, - 1.2786330111086991e-40, - 1.2845355041080962e-40, - 1.290437474803481e-40, - 1.2963381597808326e-40, - 1.3022359633505e-40, - 1.3081289948087561e-40, - 1.3140144983767286e-40, - 1.319894373492899e-40, - 1.3257717911634303e-40, - 1.3316481764208715e-40, - 1.3375240655165922e-40, - 1.3434005195370227e-40, - 1.3492786418277015e-40, - 1.3551596192770232e-40, - 1.361045370212326e-40, - 1.3669359840569055e-40, - 1.3728320459555708e-40, - 1.3787324740639573e-40, - 1.3846331041183703e-40, - 1.3905290268054509e-40, - 1.3964186546438263e-40, - 1.4023066262031664e-40, - 1.408198526948227e-40, - 1.4140997566489449e-40, - 1.420013307455844e-40, - 1.4259355406474824e-40, - 1.431860439935157e-40, - 1.4377831066832548e-40, - 1.4437060717517488e-40, - 1.4496347443359333e-40, - 1.4555737659515194e-40, - 1.4615251405045913e-40, - 1.4674856280180789e-40, - 1.4734502799150919e-40, - 1.4794143995998126e-40, - 1.4853784642522823e-40, - 1.4913460495545417e-40, - 1.49731987371525e-40, - 1.503298921691714e-40, - 1.5092811769326338e-40, - 1.515266205717544e-40, - 1.5212537808062713e-40, - 1.5272454092023334e-40, - 1.533242714554528e-40, - 1.5392477918267808e-40, - 1.5452616139284526e-40, - 1.5512819099978817e-40, - 1.5573054003747792e-40, - 1.5633273528199233e-40, - 1.569344241074719e-40, - 1.5753571399108292e-40, - 1.5813687750294813e-40, - 1.5873806545401323e-40, - 1.5933915705864283e-40, - 1.5994001209217655e-40, - 1.6054064092846476e-40, - 1.6114107716629575e-40, - 1.6174137732579719e-40, - 1.6234148604104757e-40, - 1.6294131414417495e-40, - 1.6354079514825717e-40, - 1.6413979070888234e-40, - 1.647382371122961e-40, - 1.653360389140098e-40, - 1.6593304387611137e-40, - 1.665293059703207e-40, - 1.6712498666656837e-40, - 1.6772014389262957e-40, - 1.683146949763344e-40, - 1.689085050889924e-40, - 1.6950163000221433e-40, - 1.7009427376194798e-40, - 1.7068667129245081e-40, - 1.7127912402153777e-40, - 1.718718402030548e-40, - 1.724648406669667e-40, - 1.7305812654532939e-40, - 1.7365161364042383e-40, - 1.742450529684188e-40, - 1.7483825154153338e-40, - 1.7543108695734175e-40, - 1.7602342192787954e-40, - 1.7661526012310997e-40, - 1.772068397998998e-40, - 1.7779855114964812e-40, - 1.7839082888374238e-40, - 1.7898384565635196e-40, - 1.7957729926809978e-40, - 1.8017079515762326e-40, - 1.807641180566126e-40, - 1.8135717253190789e-40, - 1.8195004565313626e-40, - 1.8254289697774427e-40, - 1.8313594414648166e-40, - 1.8372957587995145e-40, - 1.8432404888751763e-40, - 1.8491921505278162e-40, - 1.8551472279714497e-40, - 1.8611024995854667e-40, - 1.867056503472327e-40, - 1.873010173139885e-40, - 1.878965212096925e-40, - 1.8849229953393832e-40, - 1.8908849325983394e-40, - 1.8968517442945313e-40, - 1.90282267224724e-40, - 1.9087967157551257e-40, - 1.9147733762087313e-40, - 1.920752180783466e-40, - 1.9267325880637497e-40, - 1.932714849923789e-40, - 1.9386997921836988e-40, - 1.944688816553461e-40, - 1.9506833680893755e-40, - 1.956683690323921e-40, - 1.9626878496331956e-40, - 1.968693760210752e-40, - 1.974700359977387e-40, - 1.9807070418674198e-40, - 1.9867136243645833e-40, - 1.9927201273555515e-40, - 1.998726511630163e-40, - 2.0047335312127416e-40, - 2.010742760149096e-40, - 2.016755027405528e-40, - 2.0227697337534776e-40, - 2.0287858562597652e-40, - 2.0348024653383798e-40, - 2.040819141602981e-40, - 2.0468360890360087e-40, - 2.0528538789357944e-40, - 2.0588730710999714e-40, - 2.064894181986844e-40, - 2.0709174232234585e-40, - 2.07694243081675e-40, - 2.082968448253414e-40, - 2.0889949384188995e-40, - 2.095021421285351e-40, - 2.1010473129149133e-40, - 2.1070718082997916e-40, - 2.1130942908872778e-40, - 2.1191142620727913e-40, - 2.1251314456674817e-40, - 2.131145607343301e-40, - 2.137156706269164e-40, - 2.1431649958412268e-40, - 2.1491708335687836e-40, - 2.1551746139605014e-40, - 2.161176614179569e-40, - 2.1671768316933532e-40, - 2.17317459108081e-40, - 2.179169238894588e-40, - 2.185160181353906e-40, - 2.191146760814617e-40, - 2.1971283496128155e-40, - 2.2031048786891692e-40, - 2.20907652803371e-40, - 2.215043294354985e-40, - 2.2210051523991084e-40, - 2.22696221386567e-40, - 2.23291472117904e-40, - 2.2388631068186157e-40, - 2.244807615998231e-40, - 2.2507480078089195e-40, - 2.25668398671183e-40, - 2.2626158001785934e-40, - 2.2685446427639893e-40, - 2.2744718948287364e-40, - 2.2803988230910916e-40, - 2.286326300234157e-40, - 2.292255061751025e-40, - 2.298185532530763e-40, - 2.304117896975203e-40, - 2.3100523420089804e-40, - 2.3159890361435336e-40, - 2.321927924482669e-40, - 2.3278688759672454e-40, - 2.3338122784997044e-40, - 2.339759396980981e-40, - 2.345711734014184e-40, - 2.351670779275646e-40, - 2.3576377378652132e-40, - 2.363613419164767e-40, - 2.369597946286139e-40, - 2.3755911186295807e-40, - 2.381592873032396e-40, - 2.3876031613518132e-40, - 2.393621991375351e-40, - 2.3996494894463993e-40, - 2.4056859131214557e-40, - 2.411731511463419e-40, - 2.417786161575005e-40, - 2.4238495940939125e-40, - 2.429921584574961e-40, - 2.4360022824481696e-40, - 2.442091482774601e-40, - 2.4481887413532204e-40, - 2.4542933707185053e-40, - 2.4604042203189052e-40, - 2.4665200267357e-40, - 2.4726392924381165e-40, - 2.478761192001733e-40, - 2.4848851958844424e-40, - 2.4910107658555577e-40, - 2.4971371987106406e-40, - 2.5032636903972344e-40, - 2.5093899099265154e-40, - 2.5155156891822776e-40, - 2.521640732161992e-40, - 2.527764716664753e-40, - 2.5338873185377775e-40, - 2.5400083608109877e-40, - 2.5461274010353146e-40, - 2.552243674590517e-40, - 2.5583563511581204e-40, - 2.5644643820261025e-40, - 2.5705666865376656e-40, - 2.576662197269921e-40, - 2.5827502371570363e-40, - 2.588830754176469e-40, - 2.5949038797855974e-40, - 2.600969703635659e-40, - 2.607028233526949e-40, - 2.6130794693669886e-40, - 2.6191233957393297e-40, - 2.62516012574058e-40, - 2.63119040689865e-40, - 2.6372151282939776e-40, - 2.6432349195816243e-40, - 2.6492499803560457e-40, - 2.6552604704372085e-40, - 2.6612667795573067e-40, - 2.667269804585554e-40, - 2.6732705800628263e-40, - 2.6792701396119812e-40, - 2.685269334877204e-40, - 2.6912684706329317e-40, - 2.6972676886437825e-40, - 2.7032669147270957e-40, - 2.7092661852970277e-40, - 2.7152658366874136e-40, - 2.7212662299448435e-40, - 2.7272677444573015e-40, - 2.7332707184434343e-40, - 2.7392754607405473e-40, - 2.7452823305444024e-40, - 2.7512915650887864e-40, - 2.757303244851008e-40, - 2.763317434090742e-40, - 2.769334202005477e-40, - 2.7753538012115056e-40, - 2.7813768001603495e-40, - 2.7874040303581726e-40, - 2.793436446704793e-40, - 2.799474683400777e-40, - 2.8055190931676593e-40, - 2.811570017435682e-40, - 2.8176278428051934e-40, - 2.8236931019723885e-40, - 2.8297657643593068e-40, - 2.8358455122940985e-40, - 2.84193188741844e-40, - 2.848023908443942e-40, - 2.8541204481707143e-40, - 2.8602203988885778e-40, - 2.866322939463871e-40, - 2.872427741913948e-40, - 2.87853456633917e-40, - 2.8846431710479967e-40, - 2.8907532251293185e-40, - 2.8968642351422023e-40, - 2.9029757075113902e-40, - 2.9090873409858614e-40, - 2.9151991921633657e-40, - 2.9213114586151175e-40, - 2.9274243414764723e-40, - 2.9335380423776398e-40, - 2.9396527759553565e-40, - 2.9457687469269367e-40, - 2.95188581249917e-40, - 2.958003321143858e-40, - 2.9641203680142235e-40, - 2.9702359523335388e-40, - 2.9763490664664198e-40, - 2.982458707667321e-40, - 2.9885640031831113e-40, - 2.994664488244842e-40, - 3.000760181708388e-40, - 3.0068513059738214e-40, - 3.012938034877626e-40, - 3.019020466290077e-40, - 3.0250986920179957e-40, - 3.0311728044033374e-40, - 3.0372428356529933e-40, - 3.0433087173252094e-40, - 3.0493706769343682e-40, - 3.0554289990875377e-40, - 3.0614839751148857e-40, - 3.067535959769266e-40, - 3.073585325006355e-40, - 3.079632443430728e-40, - 3.0856776658980104e-40, - 3.091720950999418e-40, - 3.0977619920282467e-40, - 3.103800478263416e-40, - 3.109836118074746e-40, - 3.1158686574052115e-40, - 3.1218978358427627e-40, - 3.1279234426783713e-40, - 3.1339455486381123e-40, - 3.1399646145663417e-40, - 3.1459812028658526e-40, - 3.1519958785674847e-40, - 3.1580092100977905e-40, - 3.1640217655790874e-40, - 3.1700340483167954e-40, - 3.176046415257346e-40, - 3.1820589311668458e-40, - 3.1880715435579155e-40, - 3.19408430248134e-40, - 3.200097282645652e-40, - 3.206110558759386e-40, - 3.2121241854237492e-40, - 3.218138129975077e-40, - 3.224152426685771e-40, - 3.2301671311578755e-40, - 3.2361822576700376e-40, - 3.2421978109054955e-40, - 3.2482137334193545e-40, - 3.2542299601586506e-40, - 3.2602464259530966e-40, - 3.2662631144870945e-40, - 3.2722802561990488e-40, - 3.2782981217438564e-40, - 3.2843169624555777e-40, - 3.2903370072910164e-40, - 3.296358185989359e-40, - 3.3023801969031922e-40, - 3.3084027312048056e-40, - 3.3144254769882297e-40, - 3.320448230938084e-40, - 3.326471223726295e-40, - 3.3324948151955767e-40, - 3.338519361991489e-40, - 3.3445452056932213e-40, - 3.3505725624162565e-40, - 3.3566015753594586e-40, - 3.362632386245919e-40, - 3.368665125285876e-40, - 3.3746996209131126e-40, - 3.380735361536376e-40, - 3.3867718175357493e-40, - 3.3928084597876093e-40, - 3.39884478077154e-40, - 3.4048804998899944e-40, - 3.4109154949356154e-40, - 3.416949685402816e-40, - 3.42298322862601e-40, - 3.4290165512119204e-40, - 3.435049913279546e-40, - 3.441083520465874e-40, - 3.4471175783854923e-40, - 3.453152290363283e-40, - 3.4591878772188235e-40, - 3.4652246298360646e-40, - 3.4712627604567e-40, - 3.4773022051723718e-40, - 3.4833428176130257e-40, - 3.4893844490737402e-40, - 3.4954268981088483e-40, - 3.5014699608594696e-40, - 3.5075134331167475e-40, - 3.513557074678004e-40, - 3.5196006429355074e-40, - 3.525644074990494e-40, - 3.531687545149074e-40, - 3.5377312599597014e-40, - 3.5437754713541315e-40, - 3.5498204027943183e-40, - 3.555866262052845e-40, - 3.5619132569084032e-40, - 3.5679615929403337e-40, - 3.574011437951721e-40, - 3.5800627715199e-40, - 3.586115469994335e-40, - 3.5921693995441277e-40, - 3.598224431375352e-40, - 3.6042804686375722e-40, - 3.6103374208809066e-40, - 3.6163951972851055e-40, - 3.6224537044603643e-40, - 3.6285128653239208e-40, - 3.6345727046909372e-40, - 3.640633280103166e-40, - 3.6466946576101946e-40, - 3.6527569039064893e-40, - 3.6588200862284216e-40, - 3.6648842728153947e-40, - 3.6709495317442596e-40, - 3.677015931073956e-40, - 3.683083536662388e-40, - 3.689152409775022e-40, - 3.6952226087869425e-40, - 3.701294183245545e-40, - 3.707367181949655e-40, - 3.713441653741648e-40, - 3.719517651991188e-40, - 3.7255952527079605e-40, - 3.731674542886145e-40, - 3.73775558825003e-40, - 3.7438383716151995e-40, - 3.749922858615741e-40, - 3.75600897580365e-40, - 3.7620966298683934e-40, - 3.768185727407845e-40, - 3.77427617502018e-40, - 3.780367891878988e-40, - 3.786460887577347e-40, - 3.792555214954965e-40, - 3.798651017824866e-40, - 3.8047484655286815e-40, - 3.810847709175537e-40, - 3.8169487891191434e-40, - 3.823051682598692e-40, - 3.829156365692412e-40, - 3.835262814478524e-40, - 3.841371018186656e-40, - 3.8474810640571116e-40, - 3.853592959385427e-40, - 3.859706628056419e-40, - 3.865821993588548e-40, - 3.871938974901702e-40, - 3.8780574293231504e-40, - 3.884177186875804e-40, - 3.890298079523196e-40, - 3.896419939158455e-40, - 3.902542593702129e-40, - 3.908665956463634e-40, - 3.91479007667744e-40, - 3.92091501189882e-40, - 3.927040817669076e-40, - 3.933167549065847e-40, - 3.939295237990145e-40, - 3.945423833470147e-40, - 3.951553262651404e-40, - 3.957683453800133e-40, - 3.963814333157701e-40, - 3.969945721531192e-40, - 3.976077456746138e-40, - 3.982209437479741e-40, - 3.98834156664167e-40, - 3.994473747319402e-40, - 4.000605882044005e-40, - 4.0067378430572555e-40, - 4.012869445569356e-40, - 4.019000486708917e-40, - 4.025130792958289e-40, - 4.03126041729728e-40, - 4.037389469737511e-40, - 4.0435180817222135e-40, - 4.049646391742444e-40, - 4.055774538250964e-40, - 4.06190265970053e-40, - 4.0680308935166125e-40, - 4.074159349456596e-40, - 4.080288124050452e-40, - 4.086417235934819e-40, - 4.092546425900391e-40, - 4.098675395835211e-40, - 4.104803865009771e-40, - 4.110931608141997e-40, - 4.1170584176493525e-40, - 4.123184086040304e-40, - 4.129308405823331e-40, - 4.135431170281904e-40, - 4.141552180319025e-40, - 4.1476713774753205e-40, - 4.153789003534178e-40, - 4.1599053380960455e-40, - 4.166020655738302e-40, - 4.172135212336072e-40, - 4.17824917783154e-40, - 4.184362680261199e-40, - 4.190475847069901e-40, - 4.196588805694625e-40, - 4.202701681915805e-40, - 4.208814572776499e-40, - 4.214927476411399e-40, - 4.2210403709147545e-40, - 4.2271532377716456e-40, - 4.2332660668404014e-40, - 4.2393788451134875e-40, - 4.245491483779829e-40, - 4.251603815183968e-40, - 4.2577156669220675e-40, - 4.263826877758203e-40, - 4.269937361038629e-40, - 4.276047100934047e-40, - 4.28215620051231e-40, - 4.288264816114718e-40, - 4.294373095382965e-40, - 4.300481180959629e-40, - 4.306589215331057e-40, - 4.312697298156032e-40, - 4.318805376830894e-40, - 4.324913355654901e-40, - 4.3310210791556975e-40, - 4.337128369583163e-40, - 4.343235114433621e-40, - 4.349341266061049e-40, - 4.355446907814096e-40, - 4.361552149395852e-40, - 4.3676571014767615e-40, - 4.3737618747290805e-40, - 4.3798665787451785e-40, - 4.385971285671404e-40, - 4.392076020875728e-40, - 4.39818085073914e-40, - 4.40428576110072e-40, - 4.4103906934562975e-40, - 4.416495587052214e-40, - 4.42260033301459e-40, - 4.428704765325389e-40, - 4.4348087138227445e-40, - 4.440912008344803e-40, - 4.447014478729631e-40, - 4.453115960769258e-40, - 4.459216394679967e-40, - 4.465315846599702e-40, - 4.471414464686754e-40, - 4.477512411874989e-40, - 4.483609851245002e-40, - 4.489706942069756e-40, - 4.495803725908016e-40, - 4.501900118645755e-40, - 4.507996028511562e-40, - 4.514091363734026e-40, - 4.520186032569008e-40, - 4.526279952317736e-40, - 4.532373149638941e-40, - 4.53846576115725e-40, - 4.544557930102589e-40, - 4.550649799692981e-40, - 4.556741512932095e-40, - 4.56283321089499e-40, - 4.568924974316537e-40, - 4.575016792164383e-40, - 4.581108643996513e-40, - 4.587200509335747e-40, - 4.593292357686126e-40, - 4.599384141034208e-40, - 4.60547585180645e-40, - 4.611567548024569e-40, - 4.617659297840837e-40, - 4.623751166992517e-40, - 4.629843216925394e-40, - 4.635935508615269e-40, - 4.642028085647452e-40, - 4.648120927524778e-40, - 4.654213995729254e-40, - 4.660307260737333e-40, - 4.666400723528721e-40, - 4.67249435181586e-40, - 4.6785881137530335e-40, - 4.684682079625237e-40, - 4.69077637542132e-40, - 4.69687113360437e-40, - 4.7029664884797405e-40, - 4.7090625743540705e-40, - 4.7151595210468245e-40, - 4.721257362179698e-40, - 4.727356019101587e-40, - 4.7334553787542336e-40, - 4.739555350303929e-40, - 4.745655880256514e-40, - 4.751756916640813e-40, - 4.757858458425633e-40, - 4.763960643738222e-40, - 4.770063637371274e-40, - 4.776167603912044e-40, - 4.782272707947782e-40, - 4.7883791140657444e-40, - 4.794486973518223e-40, - 4.800596319761166e-40, - 4.806707086736126e-40, - 4.812819116944412e-40, - 4.818932232565048e-40, - 4.825046255850768e-40, - 4.831161009790952e-40, - 4.837276344907468e-40, - 4.843392162386286e-40, - 4.84950837004915e-40, - 4.855624875717804e-40, - 4.861741587213997e-40, - 4.867858412596607e-40, - 4.873975280264251e-40, - 4.880092254901548e-40, - 4.886209542856305e-40, - 4.89232736139687e-40, - 4.898445927791604e-40, - 4.904565459478877e-40, - 4.910686174899785e-40, - 4.916808251302814e-40, - 4.922931769486016e-40, - 4.9290567939453096e-40, - 4.935183389140326e-40, - 4.9413116193029815e-40, - 4.947441538147494e-40, - 4.953573070790015e-40, - 4.959706048513916e-40, - 4.965840346443447e-40, - 4.971975842227949e-40, - 4.978112413417038e-40, - 4.9842499364369535e-40, - 4.990388287011723e-40, - 4.9965273441307055e-40, - 5.002666971200216e-40, - 5.008807016891734e-40, - 5.0149473293541285e-40, - 5.02108774274376e-40, - 5.027228179834114e-40, - 5.033368711791882e-40, - 5.039509395905759e-40, - 5.045650277894973e-40, - 5.051791407837639e-40, - 5.05793283595611e-40, - 5.0640746126475745e-40, - 5.070216788319726e-40, - 5.0763594176302354e-40, - 5.082502600679947e-40, - 5.0886464528748875e-40, - 5.094791102909255e-40, - 5.10093667586135e-40, - 5.107083192098185e-40, - 5.113230654070385e-40, - 5.119379056164007e-40, - 5.125528345356772e-40, - 5.13167846080257e-40, - 5.1378293432196275e-40, - 5.143980933437967e-40, - 5.150133172287604e-40, - 5.156286000598554e-40, - 5.162439368644613e-40, - 5.1685932597736525e-40, - 5.1747476434408016e-40, - 5.180902495356742e-40, - 5.187057799307709e-40, - 5.19321353915836e-40, - 5.199369698773347e-40, - 5.205526257606588e-40, - 5.211683181438245e-40, - 5.21784043550153e-40, - 5.223997985066203e-40, - 5.230155795401443e-40, - 5.236313831773173e-40, - 5.242472059441234e-40, - 5.248630438265055e-40, - 5.254788919912479e-40, - 5.260947470820161e-40, - 5.2671060598130405e-40, - 5.2732646557160675e-40, - 5.2794232273541845e-40, - 5.285581743714844e-40, - 5.2917401826691604e-40, - 5.297898543221765e-40, - 5.304056821750135e-40, - 5.310215014258683e-40, - 5.3163731167518205e-40, - 5.3225311253433825e-40, - 5.3286890413142385e-40, - 5.33484686495523e-40, - 5.341004566827489e-40, - 5.347162112709808e-40, - 5.353319468819374e-40, - 5.359476601373374e-40, - 5.365633476421956e-40, - 5.3717900574367385e-40, - 5.377946307749253e-40, - 5.384102210402994e-40, - 5.390257757539308e-40, - 5.396412940947627e-40, - 5.402567752492373e-40, - 5.408722187161913e-40, - 5.414876250430751e-40, - 5.42102995608378e-40, - 5.427183305009151e-40, - 5.433336293105828e-40, - 5.439488918344387e-40, - 5.445641178699855e-40, - 5.451793072330259e-40, - 5.4579445976322305e-40, - 5.464095753038892e-40, - 5.470246540770303e-40, - 5.4763969479880535e-40, - 5.482546949070248e-40, - 5.488696505329464e-40, - 5.4948455352447866e-40, - 5.500993920170504e-40, - 5.50714153742186e-40, - 5.513288265844236e-40, - 5.519434022597361e-40, - 5.5255787643055794e-40, - 5.531722450480843e-40, - 5.537865044723845e-40, - 5.544006511580459e-40, - 5.550146815596544e-40, - 5.556285920946295e-40, - 5.562423759209355e-40, - 5.568560195813666e-40, - 5.574695147027897e-40, - 5.5808286236708804e-40, - 5.586960663309702e-40, - 5.5930913035359695e-40, - 5.599220581941291e-40, - 5.605348545174454e-40, - 5.61147531304234e-40, - 5.6176010432454435e-40, - 5.623725890719651e-40, - 5.6298500102197e-40, - 5.635973556500313e-40, - 5.642096684316225e-40, - 5.648219548048454e-40, - 5.6543422629463145e-40, - 5.660464821129782e-40, - 5.666587141499487e-40, - 5.672709137871973e-40, - 5.678830724063342e-40, - 5.684951813889623e-40, - 5.691072321166847e-40, - 5.697192158422144e-40, - 5.703311248276006e-40, - 5.709429531352998e-40, - 5.7155469491543865e-40, - 5.721663443181439e-40, - 5.72777895493542e-40, - 5.7338934268598e-40, - 5.74000682083799e-40, - 5.7461191788369654e-40, - 5.752230589747617e-40, - 5.758341140358823e-40, - 5.764450917455613e-40, - 5.770560007823026e-40, - 5.776668498246095e-40, - 5.782776475706256e-40, - 5.788884029670645e-40, - 5.7949912576498276e-40, - 5.801098260377416e-40, - 5.807205138130484e-40, - 5.813311991186115e-40, - 5.8194189190814725e-40, - 5.8255260063080996e-40, - 5.831633265000289e-40, - 5.8377406618165316e-40, - 5.8438481496323e-40, - 5.8499556804437795e-40, - 5.85606320679105e-40, - 5.862170681214191e-40, - 5.868278056246607e-40, - 5.874385284272505e-40, - 5.880492317529258e-40, - 5.886599109534752e-40, - 5.892705620532021e-40, - 5.898811812932845e-40, - 5.9049176483099855e-40, - 5.911023071522497e-40, - 5.9171280807308816e-40, - 5.9232327446812855e-40, - 5.929337135050953e-40, - 5.935441327548912e-40, - 5.941545389270694e-40, - 5.947649372066396e-40, - 5.953753327509792e-40, - 5.95985730668258e-40, - 5.9659613592426625e-40, - 5.97206553459192e-40, - 5.978169882128778e-40, - 5.984274431411293e-40, - 5.9903791837745845e-40, - 5.996484190245602e-40, - 6.002589546855086e-40, - 6.008695225172391e-40, - 6.014801174677007e-40, - 6.0209073448482774e-40, - 6.0270136851652916e-40 - ], - "nc": [ - 4.252581097106e-46, - 1.2442241130422319e-43, - 4.244732558950652e-43, - 7.145701316408153e-43, - 9.885102339692106e-43, - 1.2796830798467088e-42, - 1.573106155729592e-42, - 1.8614711952315463e-42, - 2.145855481177512e-42, - 2.4314308069943545e-42, - 2.7185494741144088e-42, - 3.014316399724738e-42, - 3.311753977045219e-42, - 3.608468154244468e-42, - 3.8995661717033364e-42, - 4.1818423413696496e-42, - 4.462367081800995e-42, - 4.730953039517898e-42, - 5.000597278135163e-42, - 5.260986325338159e-42, - 5.5110511091491065e-42, - 5.765516699931831e-42, - 6.013775419982194e-42, - 6.256593795308764e-42, - 6.496122456870856e-42, - 6.734503478281846e-42, - 6.971220922705435e-42, - 7.204488457406655e-42, - 7.434987827220277e-42, - 7.665315995856329e-42, - 7.895484344415431e-42, - 8.123381429109402e-42, - 8.347806322955856e-42, - 8.570153087610885e-42, - 8.791249556618684e-42, - 9.011964909572498e-42, - 9.232466094845162e-42, - 9.452974208208644e-42, - 9.673186843415606e-42, - 9.892215152005521e-42, - 1.0109630802930069e-41, - 1.032642008488425e-41, - 1.0543384877061148e-41, - 1.0761916411500646e-41, - 1.0980401967187516e-41, - 1.1198000595963008e-41, - 1.141381010907462e-41, - 1.1628210998301976e-41, - 1.1842278101288622e-41, - 1.2056863844590456e-41, - 1.227205361261002e-41, - 1.2486851683327845e-41, - 1.2700345446016968e-41, - 1.2911751391220958e-41, - 1.312078909020795e-41, - 1.332753947815291e-41, - 1.3538002382266722e-41, - 1.3751193455951147e-41, - 1.3964912893158284e-41, - 1.4180349979448084e-41, - 1.4395240469185946e-41, - 1.4606916954286945e-41, - 1.4814786494072077e-41, - 1.5020002346343072e-41, - 1.5224291814717088e-41, - 1.5429582227894703e-41, - 1.5637355821569988e-41, - 1.5848280678155158e-41, - 1.6060994483028264e-41, - 1.6274048700040873e-41, - 1.6486141354177518e-41, - 1.6695884738139875e-41, - 1.690271337709489e-41, - 1.7107972732895124e-41, - 1.7312797318976383e-41, - 1.7518304265754042e-41, - 1.7726156326949855e-41, - 1.7937233253420608e-41, - 1.8151323738711823e-41, - 1.8367463768556614e-41, - 1.858453129187039e-41, - 1.8801260760512183e-41, - 1.9016526769434707e-41, - 1.9229406201240472e-41, - 1.943961417686919e-41, - 1.9647709633292481e-41, - 1.9854412046116573e-41, - 2.0059812676031858e-41, - 2.026452403512699e-41, - 2.0469730362616502e-41, - 2.0675546106669505e-41, - 2.088096332989848e-41, - 2.1086093590755525e-41, - 2.129177578886936e-41, - 2.1498380480788674e-41, - 2.1705946692433546e-41, - 2.1914338204361803e-41, - 2.2123678905266933e-41, - 2.2334146257293035e-41, - 2.2545514859534385e-41, - 2.275673425054582e-41, - 2.296704509195751e-41, - 2.317672797240268e-41, - 2.3385416909152345e-41, - 2.3593055106253684e-41, - 2.3799494580708974e-41, - 2.40049630248628e-41, - 2.4209632232838373e-41, - 2.4413667772696983e-41, - 2.4617364297718597e-41, - 2.482060349444238e-41, - 2.502376114199601e-41, - 2.5227668457449956e-41, - 2.543264187525115e-41, - 2.563820154985768e-41, - 2.584421568680897e-41, - 2.6051228378090123e-41, - 2.6259246043478986e-41, - 2.646814899050403e-41, - 2.667839428832568e-41, - 2.688971906589964e-41, - 2.7101943140144857e-41, - 2.731525125931105e-41, - 2.7528768671910354e-41, - 2.7742104671816634e-41, - 2.795576338476986e-41, - 2.8168989323639176e-41, - 2.838075897780392e-41, - 2.859124779811835e-41, - 2.880064008731773e-41, - 2.900830999056774e-41, - 2.921363344532372e-41, - 2.9416761154787456e-41, - 2.9618613557804247e-41, - 2.9819879949812887e-41, - 3.0020968794811186e-41, - 3.022236561029651e-41, - 3.042408484410183e-41, - 3.06260460965299e-41, - 3.0829044998908863e-41, - 3.1033955788223695e-41, - 3.12407244696241e-41, - 3.1449045708004304e-41, - 3.1658627458614796e-41, - 3.1869023613767463e-41, - 3.207997386190814e-41, - 3.2291502086129307e-41, - 3.25031610822319e-41, - 3.271411823151156e-41, - 3.292433162214976e-41, - 3.313433813885329e-41, - 3.3344058196510274e-41, - 3.3552767210371387e-41, - 3.3759979386596917e-41, - 3.396578335079323e-41, - 3.417055392012085e-41, - 3.4375003012088755e-41, - 3.4579726972471877e-41, - 3.4784634605092205e-41, - 3.498937564918386e-41, - 3.519402783724579e-41, - 3.53990038417573e-41, - 3.560463375441325e-41, - 3.5811169052249845e-41, - 3.6018779180601343e-41, - 3.62273324255222e-41, - 3.6436589528137704e-41, - 3.6646446005594284e-41, - 3.685676781364916e-41, - 3.7067335633698944e-41, - 3.727806147652907e-41, - 3.748895779999898e-41, - 3.7699852119249694e-41, - 3.79102531715926e-41, - 3.8119826592352737e-41, - 3.832890708674144e-41, - 3.853799714032269e-41, - 3.8747188697309897e-41, - 3.8956032636392533e-41, - 3.9164070719230584e-41, - 3.937122406306319e-41, - 3.957764110750914e-41, - 3.978374358955667e-41, - 3.9990056942813783e-41, - 4.019695577662542e-41, - 4.040419083536417e-41, - 4.061124065226254e-41, - 4.0817827926951907e-41, - 4.102428241868824e-41, - 4.123108937002141e-41, - 4.1438488010535555e-41, - 4.1646343530842437e-41, - 4.1854468599480696e-41, - 4.2062749609071633e-41, - 4.227112793783958e-41, - 4.2479533959778833e-41, - 4.268787941174499e-41, - 4.289613189354556e-41, - 4.310434187690004e-41, - 4.3312668579917967e-41, - 4.352124471861794e-41, - 4.373006524917632e-41, - 4.393895510094173e-41, - 4.4147743786003087e-41, - 4.435639340728917e-41, - 4.4564953066178433e-41, - 4.477344420913066e-41, - 4.4981809665572906e-41, - 4.5190024936715736e-41, - 4.539811730259363e-41, - 4.5606178226321064e-41, - 4.5814253697409044e-41, - 4.60223316190564e-41, - 4.623034363703117e-41, - 4.643825336373424e-41, - 4.664608631907455e-41, - 4.68539123999344e-41, - 4.706180215741637e-41, - 4.726976444356659e-41, - 4.74777842085409e-41, - 4.768579039354373e-41, - 4.789373653037221e-41, - 4.810157508776411e-41, - 4.830930847797693e-41, - 4.851698835194755e-41, - 4.87246822003469e-41, - 4.893248060827217e-41, - 4.914040926024466e-41, - 4.934846662041722e-41, - 4.955658252885691e-41, - 4.976464227537625e-41, - 4.99725528052508e-41, - 5.01802493451578e-41, - 5.038776827254188e-41, - 5.059516912285866e-41, - 5.080251283327437e-41, - 5.100984734461067e-41, - 5.121716185829529e-41, - 5.142442983757367e-41, - 5.163160235386939e-41, - 5.183865511024144e-41, - 5.204564362804655e-41, - 5.22526332912473e-41, - 5.245974292850661e-41, - 5.266702521841888e-41, - 5.287450491916903e-41, - 5.308219231004599e-41, - 5.329006912565185e-41, - 5.349812096078697e-41, - 5.370632946821278e-41, - 5.391466594041845e-41, - 5.412315315703049e-41, - 5.433183931071586e-41, - 5.454078950990933e-41, - 5.475008119097104e-41, - 5.495972413616718e-41, - 5.516971602788069e-41, - 5.538003479087054e-41, - 5.559067223711247e-41, - 5.580166992741113e-41, - 5.60130703350757e-41, - 5.622486289045022e-41, - 5.643691221759342e-41, - 5.664903897217626e-41, - 5.686107341263815e-41, - 5.707298136165206e-41, - 5.728488612997704e-41, - 5.749693788105697e-41, - 5.770926519157661e-41, - 5.792181872812035e-41, - 5.813440658259115e-41, - 5.834682111845259e-41, - 5.85588815338234e-41, - 5.877056689711545e-41, - 5.898194719605779e-41, - 5.919309907548813e-41, - 5.940407913867531e-41, - 5.961484250390843e-41, - 5.982531125275148e-41, - 6.003540799634985e-41, - 6.024507374860266e-41, - 6.045436000556713e-41, - 6.066336342748869e-41, - 6.0872181208071e-41, - 6.108090130074799e-41, - 6.128952534346726e-41, - 6.149801593620278e-41, - 6.170633759723194e-41, - 6.1914456537702e-41, - 6.212238557376949e-41, - 6.233014783375044e-41, - 6.253775239192353e-41, - 6.274520860482062e-41, - 6.295251455009554e-41, - 6.315970102584211e-41, - 6.33668453104127e-41, - 6.357402614899731e-41, - 6.378132426145741e-41, - 6.398878363523469e-41, - 6.419636976129467e-41, - 6.440403974352445e-41, - 6.461174775980717e-41, - 6.48194396961963e-41, - 6.502709735071426e-41, - 6.523471598477921e-41, - 6.544229134624208e-41, - 6.564982940386051e-41, - 6.585735661022792e-41, - 6.606490868760502e-41, - 6.627252168469946e-41, - 6.648023239235846e-41, - 6.668807690063226e-41, - 6.689605527898177e-41, - 6.710415824693747e-41, - 6.731237642970546e-41, - 6.752068963097507e-41, - 6.772909158182433e-41, - 6.793761127787766e-41, - 6.814627946212397e-41, - 6.835512774104639e-41, - 6.85641862028344e-41, - 6.877342442401492e-41, - 6.898278749586531e-41, - 6.919222045963187e-41, - 6.940167128825241e-41, - 6.961112886254313e-41, - 6.98206529911542e-41, - 7.003031296583257e-41, - 7.024017793217497e-41, - 7.045029724449057e-41, - 7.066065058941061e-41, - 7.087117343504198e-41, - 7.108179892356807e-41, - 7.12924611078611e-41, - 7.150312304902225e-41, - 7.171378726275749e-41, - 7.192446300814432e-41, - 7.213515964577374e-41, - 7.234588491658871e-41, - 7.255661995933083e-41, - 7.276734005692088e-41, - 7.297802955739097e-41, - 7.318867290195627e-41, - 7.339925710827482e-41, - 7.360980474347154e-41, - 7.382035559708176e-41, - 7.403094521006192e-41, - 7.424160909030775e-41, - 7.445237977558458e-41, - 7.466324083532434e-41, - 7.487412587145214e-41, - 7.508496120351527e-41, - 7.529567309149523e-41, - 7.550618947716277e-41, - 7.571648080945136e-41, - 7.592658190054162e-41, - 7.613654539200063e-41, - 7.634642423834574e-41, - 7.655627117028325e-41, - 7.676612301131056e-41, - 7.69759729864902e-41, - 7.718579113187411e-41, - 7.739554632213123e-41, - 7.760520743319948e-41, - 7.781474411178365e-41, - 7.802413498523061e-41, - 7.823337412561089e-41, - 7.844245770150265e-41, - 7.86513818814841e-41, - 7.88601423310206e-41, - 7.906872935022237e-41, - 7.927712687585025e-41, - 7.948531738225851e-41, - 7.969328334175541e-41, - 7.990100750491749e-41, - 8.010849168061154e-41, - 8.031577442109024e-41, - 8.052290436380113e-41, - 8.072993055922071e-41, - 8.09369020224532e-41, - 8.114386271127077e-41, - 8.135082140134409e-41, - 8.155777081516463e-41, - 8.176470324593804e-41, - 8.197161098680948e-41, - 8.217848644612309e-41, - 8.238533525715534e-41, - 8.259218989759791e-41, - 8.279908783265102e-41, - 8.300606668587829e-41, - 8.321316408084335e-41, - 8.342041708106619e-41, - 8.36278537171211e-41, - 8.38354879992591e-41, - 8.404332934078654e-41, - 8.425138709399971e-41, - 8.445967061093097e-41, - 8.466818824503701e-41, - 8.487694393334505e-41, - 8.508594709827363e-41, - 8.529520929880388e-41, - 8.55047420958887e-41, - 8.571455706939176e-41, - 8.59246672500268e-41, - 8.613508748470298e-41, - 8.634582518369075e-41, - 8.655688639214382e-41, - 8.67682771552158e-41, - 8.698000349749055e-41, - 8.719206178851139e-41, - 8.740442120145147e-41, - 8.761704267745696e-41, - 8.782988666410613e-41, - 8.804291360897721e-41, - 8.825608399046678e-41, - 8.84693693529709e-41, - 8.868276190870064e-41, - 8.889624424631987e-41, - 8.910979733246424e-41, - 8.932340214572619e-41, - 8.953703966280024e-41, - 8.97506845899299e-41, - 8.996430022018691e-41, - 9.017786730142976e-41, - 9.039136982713418e-41, - 9.060479179076288e-41, - 9.081811718026146e-41, - 9.103133033200271e-41, - 9.124441462746328e-41, - 9.14573413801807e-41, - 9.167007854482116e-41, - 9.188259407605043e-41, - 9.209485592853405e-41, - 9.230683333088025e-41, - 9.251851208650557e-41, - 9.27299014314659e-41, - 9.294101823009476e-41, - 9.315187942240505e-41, - 9.33625019484098e-41, - 9.357290273692398e-41, - 9.378309786357344e-41, - 9.399310083231862e-41, - 9.420292331958784e-41, - 9.441257687185417e-41, - 9.462207302702612e-41, - 9.483142332051267e-41, - 9.504063874533655e-41, - 9.52497277516932e-41, - 9.54587012435336e-41, - 9.566757124562432e-41, - 9.587634978301867e-41, - 9.608504888077076e-41, - 9.629368058629003e-41, - 9.650225832518733e-41, - 9.671080054848508e-41, - 9.691932993211156e-41, - 9.712786944119318e-41, - 9.73364420408561e-41, - 9.754507069622667e-41, - 9.775377895852176e-41, - 9.796259567047355e-41, - 9.817154527822144e-41, - 9.838064800972036e-41, - 9.858992405423825e-41, - 9.87993936010431e-41, - 9.900907683940292e-41, - 9.921898959448444e-41, - 9.942912782439396e-41, - 9.963948124637632e-41, - 9.9850039364203e-41, - 1.000607916824169e-40, - 1.0027172771101697e-40, - 1.0048283696745106e-40, - 1.0069411199811322e-40, - 1.0090555184999446e-40, - 1.0111715363467067e-40, - 1.0132891412638957e-40, - 1.0154083009939879e-40, - 1.0175289832794596e-40, - 1.0196511557733498e-40, - 1.0217747675515379e-40, - 1.0238997017245017e-40, - 1.0260257789625774e-40, - 1.0281528115384119e-40, - 1.0302806117246536e-40, - 1.0324089917939513e-40, - 1.0345377639792872e-40, - 1.0366667274716993e-40, - 1.0387956863204252e-40, - 1.040924522126308e-40, - 1.0430531278121183e-40, - 1.0451813963272348e-40, - 1.0473092206211323e-40, - 1.049436493644003e-40, - 1.0515631283255697e-40, - 1.0536890997775599e-40, - 1.0558143670131788e-40, - 1.057938882654629e-40, - 1.060062599328893e-40, - 1.062185469651549e-40, - 1.064307446196305e-40, - 1.0664284753768416e-40, - 1.0685484458111057e-40, - 1.070667151759287e-40, - 1.0727843595734042e-40, - 1.0748998357796817e-40, - 1.0770133469043425e-40, - 1.079124659473612e-40, - 1.081233542303421e-40, - 1.0833398391276521e-40, - 1.0854436365161817e-40, - 1.0875451938879327e-40, - 1.0896447771428404e-40, - 1.0917426521807847e-40, - 1.0938390849016443e-40, - 1.0959343412053002e-40, - 1.0980286840814636e-40, - 1.1001223070762922e-40, - 1.1022151821690439e-40, - 1.1043072310463301e-40, - 1.106398375567071e-40, - 1.1084885375995152e-40, - 1.1105776390119258e-40, - 1.1126656010366142e-40, - 1.1147523292364844e-40, - 1.1168378528426393e-40, - 1.118922367977531e-40, - 1.1210060797788375e-40, - 1.1230891933836614e-40, - 1.1251719139280663e-40, - 1.1272544465213683e-40, - 1.1293370024342475e-40, - 1.1314198176471405e-40, - 1.1335029270870123e-40, - 1.1355862546332272e-40, - 1.137669723420329e-40, - 1.1397532565828614e-40, - 1.1418367772553662e-40, - 1.143920208572388e-40, - 1.146003465176361e-40, - 1.1480864864332154e-40, - 1.1501694619348869e-40, - 1.1522526486464514e-40, - 1.154336303404065e-40, - 1.1564206830438823e-40, - 1.1585060444020577e-40, - 1.1605926443117155e-40, - 1.1626807242515253e-40, - 1.1647703955903645e-40, - 1.166861504927581e-40, - 1.1689538493052814e-40, - 1.1710472260385725e-40, - 1.1731414324516237e-40, - 1.1752362658704112e-40, - 1.1773315236204608e-40, - 1.1794269986428448e-40, - 1.181522515204678e-40, - 1.1836180487909806e-40, - 1.1857136035033957e-40, - 1.1878091825133735e-40, - 1.189904788992362e-40, - 1.19200042611181e-40, - 1.1940960970318357e-40, - 1.1961918205041395e-40, - 1.1982876912782496e-40, - 1.20038380768868e-40, - 1.2024802648023131e-40, - 1.2045771595814123e-40, - 1.2066745889998645e-40, - 1.208772650031558e-40, - 1.2108714396503783e-40, - 1.2129710473088082e-40, - 1.2150714660678105e-40, - 1.2171725701420596e-40, - 1.219274195181758e-40, - 1.2213761772956742e-40, - 1.2234783526610102e-40, - 1.2255805574549692e-40, - 1.2276826278547533e-40, - 1.2297844005288267e-40, - 1.2318857568793653e-40, - 1.2339866844145979e-40, - 1.2360872252738807e-40, - 1.238187419990416e-40, - 1.2402873071632548e-40, - 1.2423869253684825e-40, - 1.2444863131463327e-40, - 1.2465855090338714e-40, - 1.2486845465612863e-40, - 1.2507834221013397e-40, - 1.252882132535317e-40, - 1.2549806871044317e-40, - 1.2570791003080734e-40, - 1.2591773870966454e-40, - 1.2612755624205523e-40, - 1.2633736412301964e-40, - 1.2654716385427148e-40, - 1.267569595160276e-40, - 1.2696675982804081e-40, - 1.2717656966187772e-40, - 1.2738639273419762e-40, - 1.2759623246562246e-40, - 1.2780609226911853e-40, - 1.2801597555765223e-40, - 1.282258857441898e-40, - 1.2843582612066772e-40, - 1.2864579545243669e-40, - 1.2885578866277985e-40, - 1.2906580301114332e-40, - 1.2927583640776784e-40, - 1.2948588701303632e-40, - 1.296959529896667e-40, - 1.2990603250037678e-40, - 1.3011612370788455e-40, - 1.3032622501389221e-40, - 1.3053633951351104e-40, - 1.3074647371054826e-40, - 1.3095663329592146e-40, - 1.3116682332068034e-40, - 1.313770485126263e-40, - 1.3158731359653825e-40, - 1.3179762329840247e-40, - 1.3200798234535723e-40, - 1.3221839538286303e-40, - 1.3242886540544947e-40, - 1.326393950941331e-40, - 1.3284998840319208e-40, - 1.3306064988718686e-40, - 1.3327138450511694e-40, - 1.3348219722557892e-40, - 1.3369309301716927e-40, - 1.3390407684848459e-40, - 1.3411515365545827e-40, - 1.3432632685413555e-40, - 1.3453759403056327e-40, - 1.3474894706578252e-40, - 1.3496037719634232e-40, - 1.3517187533882957e-40, - 1.3538343238314073e-40, - 1.3559503921917233e-40, - 1.3580668673682099e-40, - 1.360183658261769e-40, - 1.3623006759059526e-40, - 1.3644178662990158e-40, - 1.3665352651398394e-40, - 1.3686529255050892e-40, - 1.3707709024165066e-40, - 1.3728892514837897e-40, - 1.3750080283172543e-40, - 1.377127288527217e-40, - 1.3792470877239961e-40, - 1.3813674812333931e-40, - 1.3834885159071096e-40, - 1.3856101729797132e-40, - 1.3877323924554695e-40, - 1.3898551123564042e-40, - 1.3919782690150015e-40, - 1.394101798650308e-40, - 1.396225637480946e-40, - 1.3983497217158825e-40, - 1.400473987558926e-40, - 1.4025983734182291e-40, - 1.4047228373623215e-40, - 1.4068473779899983e-40, - 1.4089720010428692e-40, - 1.4110967137854957e-40, - 1.4132215243392262e-40, - 1.4153464408349694e-40, - 1.4174714714036354e-40, - 1.4195966241761346e-40, - 1.4217219068085803e-40, - 1.4238473125533806e-40, - 1.4259727971478353e-40, - 1.4280982887056083e-40, - 1.430223713259383e-40, - 1.4323489943440384e-40, - 1.4344740546449281e-40, - 1.4365988168467026e-40, - 1.4387232036340113e-40, - 1.4408471376915029e-40, - 1.442970543797747e-40, - 1.4450933780349408e-40, - 1.4472156566607116e-40, - 1.4493374272143925e-40, - 1.4514587388183703e-40, - 1.4535796443860744e-40, - 1.4557001980127578e-40, - 1.4578204537932092e-40, - 1.4599404658222152e-40, - 1.4620602881945635e-40, - 1.4641799739599173e-40, - 1.4662995605944568e-40, - 1.4684190446501914e-40, - 1.4705383988493836e-40, - 1.4726575949276517e-40, - 1.4747766015568487e-40, - 1.4768953860528688e-40, - 1.479013915725574e-40, - 1.4811321578848225e-40, - 1.4832500798399224e-40, - 1.4853676487315386e-40, - 1.4874848290063494e-40, - 1.4896016012681903e-40, - 1.4917179659311816e-40, - 1.4938339244633237e-40, - 1.4959494811678344e-40, - 1.4980646428772223e-40, - 1.5001794165126992e-40, - 1.502293808995473e-40, - 1.5044078272467536e-40, - 1.5065214783382315e-40, - 1.50863478758675e-40, - 1.510747804454162e-40, - 1.5128605583009262e-40, - 1.5149730754190579e-40, - 1.5170853805173885e-40, - 1.5191974939070849e-40, - 1.5213094351419037e-40, - 1.523421223775596e-40, - 1.525532879361919e-40, - 1.5276444214546254e-40, - 1.5297558627319942e-40, - 1.531867172474191e-40, - 1.5339783325752582e-40, - 1.5360893396368056e-40, - 1.538200190439077e-40, - 1.5403108838240565e-40, - 1.5424214204784948e-40, - 1.5445318011557498e-40, - 1.5466420266097005e-40, - 1.5487520975942243e-40, - 1.5508620149883933e-40, - 1.5529717949843063e-40, - 1.5550814689786467e-40, - 1.5571910404539228e-40, - 1.5593005089023e-40, - 1.5614098736277326e-40, - 1.5635191325969493e-40, - 1.56562828319775e-40, - 1.5677373228156124e-40, - 1.569846248836016e-40, - 1.571955058644422e-40, - 1.5740637491814318e-40, - 1.5761723086240083e-40, - 1.57828073156113e-40, - 1.5803890280523584e-40, - 1.5824972088817548e-40, - 1.5846052850915186e-40, - 1.5867132690291128e-40, - 1.5888211734536071e-40, - 1.5909290111242241e-40, - 1.5930367948001883e-40, - 1.5951445372407246e-40, - 1.597252251561472e-40, - 1.599359955264927e-40, - 1.601467663260036e-40, - 1.6035753858819805e-40, - 1.605683133344674e-40, - 1.6077909159103627e-40, - 1.6098987441308714e-40, - 1.6120066286637367e-40, - 1.6141145801666486e-40, - 1.6162226092972982e-40, - 1.6183307267133789e-40, - 1.6204389424266705e-40, - 1.6225472562656926e-40, - 1.624655666579033e-40, - 1.6267641777562148e-40, - 1.6288727944018631e-40, - 1.6309815209283311e-40, - 1.6330903593912498e-40, - 1.6351993102660947e-40, - 1.6373083740026517e-40, - 1.639417551055782e-40, - 1.6415268418807524e-40, - 1.6436362471944681e-40, - 1.6457457798266165e-40, - 1.6478554533021965e-40, - 1.6499652567417609e-40, - 1.6520751770959232e-40, - 1.6541852013306977e-40, - 1.6562953179190677e-40, - 1.6584055180864345e-40, - 1.6605157933513884e-40, - 1.6626261352325204e-40, - 1.6647365352484207e-40, - 1.6668469849176783e-40, - 1.6689574711369353e-40, - 1.6710679723829171e-40, - 1.6731785093226288e-40, - 1.6752891155583189e-40, - 1.6773998246925832e-40, - 1.679510670171095e-40, - 1.681621683942611e-40, - 1.6837328971258126e-40, - 1.6858443408305375e-40, - 1.6879560461666214e-40, - 1.6900680442439023e-40, - 1.6921803661879973e-40, - 1.694293042881206e-40, - 1.6964060810043315e-40, - 1.6985194567329968e-40, - 1.7006331443555674e-40, - 1.7027471181938533e-40, - 1.7048613527205668e-40, - 1.7069758226722253e-40, - 1.7090905028470974e-40, - 1.7112053680434502e-40, - 1.7133203930595521e-40, - 1.7154355526936699e-40, - 1.7175508234406195e-40, - 1.7196661974337837e-40, - 1.7217816781339264e-40, - 1.723897270914285e-40, - 1.7260129811699772e-40, - 1.7281288142963963e-40, - 1.7302447759480629e-40, - 1.7323608725183347e-40, - 1.734477110531388e-40, - 1.7365934964843949e-40, - 1.7387100367860743e-40, - 1.740826737827063e-40, - 1.7429436028249331e-40, - 1.7450606181042906e-40, - 1.7471777832606248e-40, - 1.74929510653186e-40, - 1.7514125961825312e-40, - 1.7535302604771623e-40, - 1.7556481075329896e-40, - 1.7577661449523522e-40, - 1.759884380225142e-40, - 1.7620028208412487e-40, - 1.764121474290564e-40, - 1.766240348062979e-40, - 1.7683594523217226e-40, - 1.7704788134360068e-40, - 1.7725984334618212e-40, - 1.774718298166474e-40, - 1.7768383932095594e-40, - 1.7789587042506714e-40, - 1.781079216949361e-40, - 1.7831999169648572e-40, - 1.785320789956237e-40, - 1.7874418215825782e-40, - 1.789562997502959e-40, - 1.7916843033764536e-40, - 1.793805723847389e-40, - 1.7959272268109937e-40, - 1.7980487976134835e-40, - 1.8001704511541254e-40, - 1.8022922033940513e-40, - 1.8044140702943894e-40, - 1.8065360678046718e-40, - 1.808658211941954e-40, - 1.8107805188991243e-40, - 1.812903004884467e-40, - 1.8150256861062627e-40, - 1.8171485787727953e-40, - 1.8192716991015901e-40, - 1.8213950679855693e-40, - 1.823518703407932e-40, - 1.8256425831147026e-40, - 1.8277666775920011e-40, - 1.8298909573259476e-40, - 1.8320153928026604e-40, - 1.834139954418786e-40, - 1.8362646117885795e-40, - 1.8383893341219033e-40, - 1.8405140906252303e-40, - 1.8426388505460933e-40, - 1.844763583366627e-40, - 1.846888258777575e-40, - 1.849012849741405e-40, - 1.85113734912699e-40, - 1.853261766118778e-40, - 1.855386110496461e-40, - 1.8575103920397278e-40, - 1.8596346205282696e-40, - 1.8617588060667896e-40, - 1.86388296031634e-40, - 1.866007095403287e-40, - 1.8681312234540816e-40, - 1.8702553565951715e-40, - 1.8723795069530076e-40, - 1.8745036856150557e-40, - 1.876627894053541e-40, - 1.878752122896841e-40, - 1.880876358935551e-40, - 1.8830005882936457e-40, - 1.8851247970641873e-40, - 1.8872489713402373e-40, - 1.889373096896457e-40, - 1.8914971580356797e-40, - 1.893621138635745e-40, - 1.8957450225744522e-40, - 1.8978687937295973e-40, - 1.899992435978981e-40, - 1.9021159331764566e-40, - 1.9042392694477983e-40, - 1.9063624323346294e-40, - 1.9084854109996415e-40, - 1.9106081946143645e-40, - 1.9127307723503282e-40, - 1.9148531333790623e-40, - 1.9169752671690977e-40, - 1.9190971660149677e-40, - 1.9212188237751204e-40, - 1.9233402343245493e-40, - 1.9254613915382476e-40, - 1.9275822892912125e-40, - 1.9297029221513276e-40, - 1.9318232934128377e-40, - 1.933943405923206e-40, - 1.936063257665014e-40, - 1.938182846513884e-40, - 1.940302170345441e-40, - 1.9424212270353078e-40, - 1.9445400144898497e-40, - 1.9466585319173515e-40, - 1.948776780281909e-40, - 1.9508947606716894e-40, - 1.9530124741748576e-40, - 1.9551299211998244e-40, - 1.957247092705564e-40, - 1.9593639684155185e-40, - 1.9614805261561326e-40, - 1.963596754259455e-40, - 1.9657126422296566e-40, - 1.9678281795709105e-40, - 1.9699433557873898e-40, - 1.9720581603832657e-40, - 1.974172582571268e-40, - 1.9762866094647157e-40, - 1.9784002272569034e-40, - 1.9805134221372134e-40, - 1.982626180295028e-40, - 1.984738487919731e-40, - 1.98685033207413e-40, - 1.9889617079433247e-40, - 1.9910726135594242e-40, - 1.9931830460780697e-40, - 1.995293011178357e-40, - 1.997402536682161e-40, - 1.999511653956604e-40, - 2.0016203943688124e-40, - 2.0037287892346467e-40, - 2.0058368696828006e-40, - 2.0079446667992566e-40, - 2.010052211669997e-40, - 2.0121595353810033e-40, - 2.014266669018259e-40, - 2.0163736418154255e-40, - 2.018480476271739e-40, - 2.020587197869598e-40, - 2.0226938334242078e-40, - 2.0248004097507735e-40, - 2.026906953664505e-40, - 2.0290134919806087e-40, - 2.0311200515143384e-40, - 2.0332266592936103e-40, - 2.0353333317707922e-40, - 2.0374400657976146e-40, - 2.0395468563258166e-40, - 2.0416536983071386e-40, - 2.0437605866933713e-40, - 2.0458675188476665e-40, - 2.047974495798221e-40, - 2.0500815021421036e-40, - 2.0521885183744946e-40, - 2.054295524990576e-40, - 2.0564025024855278e-40, - 2.0585094313545316e-40, - 2.0606162920927683e-40, - 2.062723065170882e-40, - 2.0648297309121064e-40, - 2.0669362695848754e-40, - 2.069042661457536e-40, - 2.0711488867984325e-40, - 2.0732549258779073e-40, - 2.075360759735618e-40, - 2.077466372678871e-40, - 2.0795717925245386e-40, - 2.0816770633648783e-40, - 2.0837822293072554e-40, - 2.085887334459036e-40, - 2.0879924229275836e-40, - 2.0900975388202637e-40, - 2.0922027262305613e-40, - 2.0943080288612913e-40, - 2.096413489980211e-40, - 2.0985191528322963e-40, - 2.10062506066252e-40, - 2.102731256715855e-40, - 2.1048377852519044e-40, - 2.10694471002529e-40, - 2.109052050851955e-40, - 2.111159767745601e-40, - 2.113267818491869e-40, - 2.1153761608329036e-40, - 2.1174847514551436e-40 - ] - }, - "numu": { - "cc": [ - 0.0, - 2.223760902546817e-44, - 1.277445563955315e-42, - 3.0956444136853184e-42, - 4.6875183229938966e-42, - 6.568598235019114e-42, - 8.671046010048425e-42, - 1.0660352317535207e-41, - 1.2480370468953078e-41, - 1.414416689911987e-41, - 1.5701371005659885e-41, - 1.7191441101159136e-41, - 1.8648456588480036e-41, - 2.008946123207708e-41, - 2.1460923962193143e-41, - 2.2759488998038762e-41, - 2.4014383787870004e-41, - 2.5243942058601244e-41, - 2.6454238686127773e-41, - 2.763667976997325e-41, - 2.8817532104764254e-41, - 2.9974665239393427e-41, - 3.1122972710898566e-41, - 3.226875511026336e-41, - 3.34314863645054e-41, - 3.4588851697022256e-41, - 3.5766269166338087e-41, - 3.692927105711417e-41, - 3.808156430634877e-41, - 3.923918927325052e-41, - 4.0410896736540797e-41, - 4.165904229293686e-41, - 4.2834373337623847e-41, - 4.398927782416484e-41, - 4.5120902674589106e-41, - 4.625841646548204e-41, - 4.742180291996211e-41, - 4.8598993389264e-41, - 4.976939695837073e-41, - 5.092138045643462e-41, - 5.206363850891244e-41, - 5.320729311347449e-41, - 5.435593681963808e-41, - 5.550331494535469e-41, - 5.664349806658834e-41, - 5.777078214518199e-41, - 5.889267975180036e-41, - 6.001853609180053e-41, - 6.115456231146853e-41, - 6.229870156985995e-41, - 6.344637968566168e-41, - 6.459356228900894e-41, - 6.574010278737111e-41, - 6.688729832864175e-41, - 6.803303786459003e-41, - 6.917381775401086e-41, - 7.031024974389152e-41, - 7.14433829938089e-41, - 7.257829793486806e-41, - 7.372248609511436e-41, - 7.488008885464171e-41, - 7.604960171266389e-41, - 7.722638615121913e-41, - 7.840366573913135e-41, - 7.957595447934332e-41, - 8.073964731964201e-41, - 8.189337755464592e-41, - 8.30405555459804e-41, - 8.418481422512639e-41, - 8.533164295148299e-41, - 8.64865626502815e-41, - 8.765032336747052e-41, - 8.882365414335132e-41, - 9.000437609518507e-41, - 9.11885204158722e-41, - 9.236927966201885e-41, - 9.35439276719749e-41, - 9.471157101439894e-41, - 9.58692357142691e-41, - 9.701935792301094e-41, - 9.8167404661743e-41, - 9.93161566015584e-41, - 1.0045984225273153e-40, - 1.0161303075947992e-40, - 1.0277907996664383e-40, - 1.0395147214209237e-40, - 1.0513103840494955e-40, - 1.0631606429138214e-40, - 1.0750433377704627e-40, - 1.0869275478508848e-40, - 1.0988020744856842e-40, - 1.1106495227450854e-40, - 1.1224465713468576e-40, - 1.1341947487136324e-40, - 1.1458954158337887e-40, - 1.1575626789294284e-40, - 1.169201295805997e-40, - 1.1808147629819469e-40, - 1.1924241210639531e-40, - 1.204030434958511e-40, - 1.2156780881635515e-40, - 1.2273510545213186e-40, - 1.238991703121021e-40, - 1.2507005018495416e-40, - 1.2624349862737331e-40, - 1.2741783767556774e-40, - 1.2859520267800072e-40, - 1.2977360131014283e-40, - 1.3095243176749272e-40, - 1.321296332983432e-40, - 1.3330904022353446e-40, - 1.3448500995072954e-40, - 1.3565395663174236e-40, - 1.3682098441255304e-40, - 1.3798735109563138e-40, - 1.3915290057775847e-40, - 1.4031833345084275e-40, - 1.41483566244038e-40, - 1.426470220988625e-40, - 1.43811828659077e-40, - 1.4497945225581947e-40, - 1.461484040910883e-40, - 1.4731789125180706e-40, - 1.4848657257227538e-40, - 1.4965398801972419e-40, - 1.5082322581327138e-40, - 1.5199619893407318e-40, - 1.531739349477566e-40, - 1.5435614956455767e-40, - 1.555418966743653e-40, - 1.5673004693940105e-40, - 1.5792148093284307e-40, - 1.5911325161182627e-40, - 1.603030201900974e-40, - 1.6148987789233715e-40, - 1.6267393692995608e-40, - 1.6385452478592407e-40, - 1.6503057528135479e-40, - 1.66201214550126e-40, - 1.673680023292492e-40, - 1.6853311935843596e-40, - 1.6969653334193468e-40, - 1.7085831906060043e-40, - 1.7201916308383259e-40, - 1.7317903175227603e-40, - 1.7434178977636503e-40, - 1.7550862461023486e-40, - 1.7667989633510985e-40, - 1.7785610754750765e-40, - 1.7903507685354122e-40, - 1.8021658445781937e-40, - 1.8140244960960524e-40, - 1.8259256938063718e-40, - 1.8378348286139522e-40, - 1.8497293206177887e-40, - 1.861606538108736e-40, - 1.8734691138217046e-40, - 1.885319479435733e-40, - 1.897156490161532e-40, - 1.908966867051652e-40, - 1.920743166359879e-40, - 1.932497082138931e-40, - 1.944250484799543e-40, - 1.955997040037883e-40, - 1.967742877035417e-40, - 1.9794805075972402e-40, - 1.9912103022922583e-40, - 2.0029374004304476e-40, - 2.014685450338471e-40, - 2.0264712755002882e-40, - 2.038283902524068e-40, - 2.0501095439736124e-40, - 2.061932507942774e-40, - 2.0737497729184154e-40, - 2.085574769589245e-40, - 2.097424789893347e-40, - 2.109290131569911e-40, - 2.121123085129388e-40, - 2.132907257942132e-40, - 2.144681578799966e-40, - 2.156481679847975e-40, - 2.1682725926048593e-40, - 2.18000672809777e-40, - 2.191692175383072e-40, - 2.2033426224224424e-40, - 2.2149900827226864e-40, - 2.226636601466737e-40, - 2.2382689699638304e-40, - 2.2498876400612464e-40, - 2.2615178536742495e-40, - 2.2731666036761817e-40, - 2.284824150443559e-40, - 2.296502322005724e-40, - 2.3081979178377137e-40, - 2.3199144711051667e-40, - 2.3316491670914694e-40, - 2.3434122326859132e-40, - 2.3552071836462746e-40, - 2.367047203568107e-40, - 2.378927190151619e-40, - 2.3908182999817655e-40, - 2.4027295694534885e-40, - 2.4146396639442143e-40, - 2.4265488155678815e-40, - 2.4384554636012688e-40, - 2.450353110906166e-40, - 2.4622455724053083e-40, - 2.474138128544924e-40, - 2.4860160916448137e-40, - 2.497875506019049e-40, - 2.5097218353531133e-40, - 2.5215568364323234e-40, - 2.533372332114102e-40, - 2.5451711103413935e-40, - 2.556956665406671e-40, - 2.5687388124260333e-40, - 2.5805208859267664e-40, - 2.5923030253182233e-40, - 2.6040799854968623e-40, - 2.615839192912592e-40, - 2.627571757594578e-40, - 2.6392891617209977e-40, - 2.6510120318342314e-40, - 2.6627273210024862e-40, - 2.674439875514769e-40, - 2.686168760257687e-40, - 2.697909890819585e-40, - 2.7096393045265574e-40, - 2.7213576016937543e-40, - 2.7330724011095307e-40, - 2.7447761912403295e-40, - 2.75647355528654e-40, - 2.768174883887878e-40, - 2.7798911729257505e-40, - 2.7916280022872843e-40, - 2.803388592019326e-40, - 2.8151520677608954e-40, - 2.826893476189687e-40, - 2.8386076943893414e-40, - 2.8503187910061867e-40, - 2.8620545689385934e-40, - 2.8738323336221124e-40, - 2.8856366618419726e-40, - 2.8974489550747216e-40, - 2.90925728265495e-40, - 2.921055469338695e-40, - 2.932854855190304e-40, - 2.9446645815063744e-40, - 2.9564800539074713e-40, - 2.968307049460551e-40, - 2.9801476708960456e-40, - 2.9919901308953897e-40, - 3.003828957847419e-40, - 3.015667024549099e-40, - 3.0275087536918795e-40, - 3.039350289428057e-40, - 3.051182346047608e-40, - 3.062993607143583e-40, - 3.0747798169420023e-40, - 3.086554049726728e-40, - 3.0983360427099744e-40, - 3.1101125824471184e-40, - 3.1218711825716624e-40, - 3.133623949764888e-40, - 3.145355420217503e-40, - 3.1570531425792614e-40, - 3.1687352685158895e-40, - 3.1804160112776047e-40, - 3.1921033192725076e-40, - 3.2037935234912427e-40, - 3.2154707722062112e-40, - 3.2271164642713566e-40, - 3.2387329224877106e-40, - 3.2503358347855023e-40, - 3.261935099040253e-40, - 3.2735433656855016e-40, - 3.2851618401378622e-40, - 3.2967823695351047e-40, - 3.3084041110976523e-40, - 3.320031557305897e-40, - 3.3316577509876947e-40, - 3.3432858109054634e-40, - 3.354946659379803e-40, - 3.366641831532994e-40, - 3.378348505919361e-40, - 3.3900753409001897e-40, - 3.4018279193129998e-40, - 3.413588676720402e-40, - 3.4253507628155793e-40, - 3.4371176153434303e-40, - 3.4489017166013494e-40, - 3.4607125590321184e-40, - 3.4725419007040783e-40, - 3.484385783283668e-40, - 3.4962467304025936e-40, - 3.5081286750591766e-40, - 3.520032045670485e-40, - 3.5319376709508116e-40, - 3.5438330508880025e-40, - 3.5557242313354986e-40, - 3.5676060980811368e-40, - 3.5794653206678265e-40, - 3.591309711553824e-40, - 3.6031565903439228e-40, - 3.614996880804857e-40, - 3.6268255640492983e-40, - 3.6386647711810262e-40, - 3.650513202402721e-40, - 3.66234456441749e-40, - 3.674151867687437e-40, - 3.685942655820266e-40, - 3.697719995243579e-40, - 3.709483487381414e-40, - 3.721231790365567e-40, - 3.732963023434598e-40, - 3.744675643348534e-40, - 3.7563779228987156e-40, - 3.768089180929171e-40, - 3.779814862757398e-40, - 3.79154145110341e-40, - 3.803265508066095e-40, - 3.814995998141949e-40, - 3.826732523162933e-40, - 3.838469145824327e-40, - 3.850202560260925e-40, - 3.8619312727785364e-40, - 3.8736558423327635e-40, - 3.885379723773317e-40, - 3.897114329156407e-40, - 3.908866294577902e-40, - 3.920624574343004e-40, - 3.9323791280868266e-40, - 3.944133253413761e-40, - 3.955890598427844e-40, - 3.9676494191698115e-40, - 3.9794074385084225e-40, - 3.991163442101171e-40, - 4.0029172811368246e-40, - 4.014670156879147e-40, - 4.02642348667315e-40, - 4.038178948903567e-40, - 4.049937487364365e-40, - 4.061698096744561e-40, - 4.073458897321067e-40, - 4.0852178600786395e-40, - 4.0969743471136084e-40, - 4.108729579074611e-40, - 4.120482326925367e-40, - 4.132225328905952e-40, - 4.1439560034638125e-40, - 4.155685925317457e-40, - 4.167423991838085e-40, - 4.179158762186187e-40, - 4.190881412395134e-40, - 4.202604808017808e-40, - 4.214340746300691e-40, - 4.2260817460015066e-40, - 4.237817227400895e-40, - 4.249547607061636e-40, - 4.2612757763947465e-40, - 4.2729936555269216e-40, - 4.284690921096759e-40, - 4.296376368331041e-40, - 4.308069753926223e-40, - 4.3197726225319835e-40, - 4.331469108112417e-40, - 4.343156956142925e-40, - 4.3548542948101615e-40, - 4.366571061452258e-40, - 4.378295612253243e-40, - 4.390014820074202e-40, - 4.401725298361622e-40, - 4.41342593845324e-40, - 4.4251171579887765e-40, - 4.436803025152317e-40, - 4.448489415245524e-40, - 4.460181261459854e-40, - 4.471876885768438e-40, - 4.483568064055336e-40, - 4.4952533804579736e-40, - 4.506946127445972e-40, - 4.518656363798181e-40, - 4.530376587379752e-40, - 4.542096240903459e-40, - 4.553812528552411e-40, - 4.5655259781685446e-40, - 4.577241393692407e-40, - 4.588967479941884e-40, - 4.600707030157952e-40, - 4.612452131293372e-40, - 4.624195450630919e-40, - 4.63593574475453e-40, - 4.647673027780954e-40, - 4.6594125281453546e-40, - 4.6711626855875954e-40, - 4.682925625611247e-40, - 4.694694060465469e-40, - 4.706461589800142e-40, - 4.71822646250843e-40, - 4.729988341914757e-40, - 4.741752920317397e-40, - 4.753528970577933e-40, - 4.765315813493018e-40, - 4.777099483548484e-40, - 4.7888690180553416e-40, - 4.8006299845294944e-40, - 4.812393049734678e-40, - 4.824162894074896e-40, - 4.83593907936296e-40, - 4.847720278617138e-40, - 4.859503607826457e-40, - 4.87128484952191e-40, - 4.883060221583544e-40, - 4.894826796811856e-40, - 4.9065838106054415e-40, - 4.9183333174874794e-40, - 4.930077835115431e-40, - 4.941817892276337e-40, - 4.953553441076104e-40, - 4.965286063979289e-40, - 4.977018892912056e-40, - 4.988755578683733e-40, - 5.0004994762511035e-40, - 5.012251754506769e-40, - 5.02400790440292e-40, - 5.035759250970196e-40, - 5.047499217036132e-40, - 5.059229484555292e-40, - 5.070955638606095e-40, - 5.082681380732253e-40, - 5.094407779969592e-40, - 5.106135202920809e-40, - 5.117864750963255e-40, - 5.1295963431932204e-40, - 5.141329455988226e-40, - 5.153063569971369e-40, - 5.164798383177804e-40, - 5.176534213021191e-40, - 5.188271331445178e-40, - 5.200008908446921e-40, - 5.211742652776248e-40, - 5.223469657821314e-40, - 5.235196648002889e-40, - 5.24693448851464e-40, - 5.258686727688683e-40, - 5.270440920823664e-40, - 5.282184315824235e-40, - 5.293918559467553e-40, - 5.305656428540122e-40, - 5.317407752378678e-40, - 5.329168040102805e-40, - 5.340928525142146e-40, - 5.3526826350345254e-40, - 5.36442904298266e-40, - 5.376167388281218e-40, - 5.387901635652927e-40, - 5.399638166866142e-40, - 5.411380974748541e-40, - 5.423124517769082e-40, - 5.434860783473984e-40, - 5.446586052308244e-40, - 5.458303929581788e-40, - 5.4700187344431655e-40, - 5.481732703140063e-40, - 5.4934452219909965e-40, - 5.5051556181437424e-40, - 5.516864209442084e-40, - 5.528571700224867e-40, - 5.540278599427975e-40, - 5.551984113831571e-40, - 5.563687320495427e-40, - 5.575387487647854e-40, - 5.587083941597273e-40, - 5.59877591844148e-40, - 5.610462470669264e-40, - 5.622143184330767e-40, - 5.633818683340569e-40, - 5.645490833025202e-40, - 5.65716197453059e-40, - 5.668833637836909e-40, - 5.680503777942457e-40, - 5.692168854583146e-40, - 5.703828589947646e-40, - 5.715490218060589e-40, - 5.727162426156233e-40, - 5.738848664312053e-40, - 5.7505434050130815e-40, - 5.762240483130308e-40, - 5.7739380658157985e-40, - 5.785638877633282e-40, - 5.7973454440631435e-40, - 5.809055714544481e-40, - 5.820764295738346e-40, - 5.832466294328876e-40, - 5.844162511774057e-40, - 5.855858715572421e-40, - 5.867560904621758e-40, - 5.8792701775717275e-40, - 5.890985525652057e-40, - 5.90270635458691e-40, - 5.914434423326208e-40, - 5.926171337481847e-40, - 5.937916896991009e-40, - 5.949670104336499e-40, - 5.961429746394221e-40, - 5.973194440709074e-40, - 5.9849623327114e-40, - 5.996731483690479e-40, - 6.0085011639938636e-40, - 6.020273422180175e-40, - 6.032050870079377e-40, - 6.04383508222751e-40, - 6.055623474218062e-40, - 6.0674123796153855e-40, - 6.0791985917382945e-40, - 6.090980513017861e-40, - 6.1027568999615936e-40, - 6.114527734317583e-40, - 6.126297619128361e-40, - 6.13807234907216e-40, - 6.1498557226878314e-40, - 6.161642761015651e-40, - 6.173425841323521e-40, - 6.185198681975322e-40, - 6.1969617713050415e-40, - 6.2087182001337905e-40, - 6.2204707418570064e-40, - 6.2322195914243635e-40, - 6.243963607724106e-40, - 6.25570190278212e-40, - 6.267434047563295e-40, - 6.279159914393381e-40, - 6.2908797464210425e-40, - 6.302594684227846e-40, - 6.314306282425101e-40, - 6.326015859890889e-40, - 6.337721973210007e-40, - 6.349420323723826e-40, - 6.361106445281116e-40, - 6.372779338336864e-40, - 6.384444407843321e-40, - 6.396108109306246e-40, - 6.407773675622286e-40, - 6.419434917059475e-40, - 6.43108422604959e-40, - 6.4427157840633776e-40, - 6.4543340396960015e-40, - 6.4659469236880095e-40, - 6.4775618126040844e-40, - 6.4891800747315054e-40, - 6.500798589196555e-40, - 6.512413507266772e-40, - 6.5240223311924936e-40, - 6.5356242132695225e-40, - 6.547218744749666e-40, - 6.55880645763096e-40, - 6.570389761796009e-40, - 6.581971841112104e-40, - 6.593555391694119e-40, - 6.605136646726431e-40, - 6.616709894342546e-40, - 6.628270145555493e-40, - 6.639821555694207e-40, - 6.651374586127894e-40, - 6.662939596780765e-40, - 6.674519131998872e-40, - 6.686104814427196e-40, - 6.6976870186219506e-40, - 6.7092586198349345e-40, - 6.720822396484803e-40, - 6.732383460106106e-40, - 6.743946752780025e-40, - 6.75551370280901e-40, - 6.767084266185158e-40, - 6.778658763795891e-40, - 6.7902371619682336e-40, - 6.801818733736304e-40, - 6.8134026693144735e-40, - 6.824988293828415e-40, - 6.83657561611352e-40, - 6.84816445974061e-40, - 6.859754088412448e-40, - 6.871346509551079e-40, - 6.882946595830012e-40, - 6.8945593293778096e-40, - 6.90618730059859e-40, - 6.917825804490945e-40, - 6.929468704741118e-40, - 6.94111030825572e-40, - 6.9527501273644595e-40, - 6.964391429850276e-40, - 6.9760377136180314e-40, - 6.987690956680159e-40, - 6.999349341351758e-40, - 7.011010462356824e-40, - 7.022672109020291e-40, - 7.03433521530062e-40, - 7.046002503248847e-40, - 7.057676704902577e-40, - 7.069359760143741e-40, - 7.0810516358673e-40, - 7.0927520200121194e-40, - 7.104460489119215e-40, - 7.116175172665411e-40, - 7.127893498674596e-40, - 7.139613219331419e-40, - 7.151333030311847e-40, - 7.163054499540741e-40, - 7.174779861880703e-40, - 7.186511348533989e-40, - 7.198250323900664e-40, - 7.209997211463446e-40, - 7.22175143065599e-40, - 7.2335113993355214e-40, - 7.245274334770316e-40, - 7.257037101872444e-40, - 7.2687965873740716e-40, - 7.2805511512781405e-40, - 7.292301490226816e-40, - 7.304048571716262e-40, - 7.315794277676398e-40, - 7.327540283732491e-40, - 7.3392876854628375e-40, - 7.351037738946055e-40, - 7.362790904787311e-40, - 7.374544422488361e-40, - 7.38629477651976e-40, - 7.398038477767936e-40, - 7.409774743856381e-40, - 7.42150693602806e-40, - 7.433238693005037e-40, - 7.44497344895969e-40, - 7.456712021835761e-40, - 7.468453391481777e-40, - 7.480196444504772e-40, - 7.491939796772474e-40, - 7.503680784575252e-40, - 7.51541663094389e-40, - 7.5271445909397e-40, - 7.538863234858276e-40, - 7.55057423749794e-40, - 7.562279732867754e-40, - 7.573981860442032e-40, - 7.585680814892204e-40, - 7.597374057796668e-40, - 7.609059095149876e-40, - 7.62073393263737e-40, - 7.632401131407635e-40, - 7.644066236725926e-40, - 7.655734650643193e-40, - 7.667410633826197e-40, - 7.679090485450007e-40, - 7.690767106005912e-40, - 7.702433561461149e-40, - 7.714084949354303e-40, - 7.725725933566376e-40, - 7.737363758571428e-40, - 7.749005660760512e-40, - 7.76065543742635e-40, - 7.77230745184108e-40, - 7.783954451468727e-40, - 7.795589214153277e-40, - 7.80720848762128e-40, - 7.818817066747619e-40, - 7.830420828342477e-40, - 7.842025601440698e-40, - 7.853634095589825e-40, - 7.865244380251284e-40, - 7.87685415429984e-40, - 7.888461216546059e-40, - 7.900065811630281e-40, - 7.911671120940552e-40, - 7.923280221344412e-40, - 7.934895855151332e-40, - 7.946517312547976e-40, - 7.958140263640642e-40, - 7.969760204187596e-40, - 7.981372808697305e-40, - 7.992977775212359e-40, - 8.00457890256811e-40, - 8.016180292350773e-40, - 8.027785933722125e-40, - 8.039397876337428e-40, - 8.051016142499327e-40, - 8.062640587488677e-40, - 8.07427069057422e-40, - 8.085905006883111e-40, - 8.097541269830087e-40, - 8.109177177412183e-40, - 8.120810586620264e-40, - 8.132441416990053e-40, - 8.144071670698341e-40, - 8.155703460803561e-40, - 8.16733885912906e-40, - 8.17897817098036e-40, - 8.190619357942902e-40, - 8.202260313573968e-40, - 8.21389897225069e-40, - 8.225535462731831e-40, - 8.237173684351891e-40, - 8.2488180737662e-40, - 8.260472830446889e-40, - 8.272139924805098e-40, - 8.28381657498705e-40, - 8.295499338553049e-40, - 8.307184776873751e-40, - 8.318870229215778e-40, - 8.330555574157186e-40, - 8.342241147559744e-40, - 8.35392685314933e-40, - 8.365612899434824e-40, - 8.377302076681264e-40, - 8.388997849909297e-40, - 8.400703495650026e-40, - 8.412421753525418e-40, - 8.424149945163065e-40, - 8.435882219093728e-40, - 8.447612646838102e-40, - 8.459335583002886e-40, - 8.471050183761362e-40, - 8.482760340823887e-40, - 8.494470164386438e-40, - 8.506183746649279e-40, - 8.51790301262823e-40, - 8.529625691750295e-40, - 8.541349035654923e-40, - 8.553070308083018e-40, - 8.564787914197366e-40, - 8.576503924345983e-40, - 8.588221257932628e-40, - 8.599942825709309e-40, - 8.611671137805693e-40, - 8.623404690565718e-40, - 8.63513966253984e-40, - 8.646872187955966e-40, - 8.658598341006507e-40, - 8.670317933280751e-40, - 8.68203542283289e-40, - 8.693755191589244e-40, - 8.705481578747753e-40, - 8.717217145762211e-40, - 8.728958533789147e-40, - 8.740701180257775e-40, - 8.752440523454188e-40, - 8.764172377777996e-40, - 8.775896460320321e-40, - 8.787614752500917e-40, - 8.799329447746637e-40, - 8.811043018511647e-40, - 8.82275627535551e-40, - 8.834467187512956e-40, - 8.846173453397117e-40, - 8.857872877467589e-40, - 8.869564254108787e-40, - 8.881250730427146e-40, - 8.892936928184584e-40, - 8.904627436396663e-40, - 8.916326428274654e-40, - 8.928033503215422e-40, - 8.939743253805088e-40, - 8.95145000081886e-40, - 8.963148065011349e-40, - 8.974833525924452e-40, - 8.986509809443166e-40, - 8.998182295453099e-40, - 9.009856418595936e-40, - 9.021537392656904e-40, - 9.033225185386436e-40, - 9.044914521911995e-40, - 9.056599908113309e-40, - 9.068275831318916e-40, - 9.079938363177992e-40, - 9.091590606715508e-40, - 9.103237568694393e-40, - 9.114884255894267e-40, - 9.126535566078526e-40, - 9.138192795507283e-40, - 9.149853030854742e-40, - 9.161513259836575e-40, - 9.173170502834543e-40, - 9.184822126578425e-40, - 9.196467668829864e-40, - 9.208107465272312e-40, - 9.219741640061637e-40, - 9.23137024508077e-40, - 9.242994365321224e-40, - 9.254617062540732e-40, - 9.266241544231556e-40, - 9.277870682748418e-40, - 9.289507072069358e-40, - 9.301149041181218e-40, - 9.31279178884901e-40, - 9.324430446923049e-40, - 9.336060147237683e-40, - 9.347677457883444e-40, - 9.359285002002389e-40, - 9.370886876700515e-40, - 9.382487171324716e-40, - 9.394090170521176e-40, - 9.405697788673968e-40, - 9.417307343916791e-40, - 9.428915818453833e-40, - 9.440520466995117e-40, - 9.452118711880322e-40, - 9.463709922401343e-40, - 9.475295035629368e-40, - 9.486875033370719e-40, - 9.498450855264301e-40, - 9.510023286984632e-40, - 9.52159347598903e-40, - 9.533162643311855e-40, - 9.544731991297877e-40, - 9.556302722063347e-40, - 9.567875511705121e-40, - 9.579449491883212e-40, - 9.59102357862758e-40, - 9.602596692127654e-40, - 9.614167757763477e-40, - 9.625736157822334e-40, - 9.637302100761688e-40, - 9.648865979052423e-40, - 9.66042821052137e-40, - 9.671989208708079e-40, - 9.683549231835097e-40, - 9.695108370167873e-40, - 9.706666705602346e-40, - 9.71822432736123e-40, - 9.729781404604153e-40, - 9.741338171373955e-40, - 9.752894879695297e-40, - 9.764451795076671e-40, - 9.776009174695484e-40, - 9.78756720025978e-40, - 9.79912609709614e-40, - 9.81068606721431e-40, - 9.822247301806968e-40, - 9.833809992418045e-40, - 9.845374280884627e-40, - 9.856939978365034e-40, - 9.868506761641926e-40, - 9.880074318385772e-40, - 9.891642327421212e-40, - 9.903210622438825e-40, - 9.914780332449122e-40, - 9.926353024075291e-40, - 9.937930264270345e-40, - 9.949513612758117e-40, - 9.961103933928771e-40, - 9.972698926116383e-40, - 9.984295327193613e-40, - 9.995889874597635e-40, - 1.000747930576948e-39, - 1.0019061373734208e-39, - 1.0030638774944627e-39, - 1.0042215737531265e-39, - 1.0053796494729077e-39, - 1.0065385279815902e-39, - 1.0076985287865871e-39, - 1.0088594287204055e-39, - 1.0100208277873947e-39, - 1.0111823210378382e-39, - 1.0123434962769199e-39, - 1.013504011494364e-39, - 1.0146639640193194e-39, - 1.0158236176983167e-39, - 1.016983236556208e-39, - 1.0181430878948204e-39, - 1.019303422469774e-39, - 1.0204643247335738e-39, - 1.0216257969696498e-39, - 1.0227878409126497e-39, - 1.0239504582976936e-39, - 1.025113638147506e-39, - 1.0262772150208139e-39, - 1.0274409189803772e-39, - 1.0286044777781018e-39, - 1.0297676219393163e-39, - 1.0309300914555956e-39, - 1.0320919509140521e-39, - 1.033253575988038e-39, - 1.0344153545859851e-39, - 1.0355776769231523e-39, - 1.0367409307702178e-39, - 1.0379051969347749e-39, - 1.0390700939170288e-39, - 1.0402352020081787e-39, - 1.0414001014994797e-39, - 1.0425643717729824e-39, - 1.0437277782437488e-39, - 1.0448906056216729e-39, - 1.0460532248955974e-39, - 1.0472160070545229e-39, - 1.0483793230874504e-39, - 1.0495434628198391e-39, - 1.050708280958443e-39, - 1.0518734869403156e-39, - 1.0530387941186775e-39, - 1.0542039161033487e-39, - 1.055368580085845e-39, - 1.05653269056259e-39, - 1.0576962826876467e-39, - 1.0588593978040027e-39, - 1.0600220846091162e-39, - 1.0611843921325327e-39, - 1.0623463877979743e-39, - 1.0635081679775974e-39, - 1.0646698315329389e-39, - 1.0658314773252095e-39, - 1.0669932032649694e-39, - 1.0681550820188466e-39, - 1.0693171220521142e-39, - 1.0704793154099489e-39, - 1.071641642175355e-39, - 1.072804075313139e-39, - 1.0739665825207529e-39, - 1.0751290706677735e-39, - 1.0762914117786008e-39, - 1.0774534826131055e-39, - 1.0786151597361382e-39, - 1.0797763200134633e-39, - 1.0809368740894912e-39, - 1.0820967968409798e-39, - 1.0832560703186235e-39, - 1.0844146754897097e-39, - 1.0855726084115447e-39, - 1.0867298942085818e-39, - 1.0878866251278592e-39, - 1.0890429199612143e-39, - 1.0901988975797086e-39, - 1.0913546768545559e-39, - 1.0925103763825335e-39, - 1.0936660765213308e-39, - 1.0948218012329863e-39, - 1.0959775702839098e-39, - 1.0971334034405173e-39, - 1.0982893203172104e-39, - 1.0994453211659786e-39, - 1.100601331436305e-39, - 1.1017572522521171e-39, - 1.1029129836230089e-39, - 1.1040684254751642e-39, - 1.1052234782296894e-39, - 1.1063780657905954e-39, - 1.1075321453064186e-39, - 1.1086856764459782e-39, - 1.1098386190177032e-39, - 1.1109909346523598e-39, - 1.1121426073905947e-39, - 1.113293776149509e-39, - 1.1144446653010459e-39, - 1.1155955115043002e-39, - 1.116746552135229e-39, - 1.117898023852351e-39, - 1.1190500326756974e-39, - 1.12020241267515e-39, - 1.121354964227549e-39, - 1.1225074877108287e-39, - 1.1236597835046523e-39, - 1.1248116648794873e-39, - 1.1259631287446702e-39, - 1.1271143075307198e-39, - 1.1282653323142561e-39, - 1.1294163235730826e-39, - 1.1305673980711499e-39, - 1.1317186506080985e-39, - 1.1328700765961824e-39, - 1.1340216432384179e-39, - 1.135173317883307e-39, - 1.1363250711678045e-39, - 1.13747687698711e-39, - 1.1386287337507275e-39, - 1.1397806844685434e-39, - 1.1409327768783694e-39, - 1.1420850586817546e-39, - 1.1432375713016227e-39, - 1.1443903413360351e-39, - 1.1455433158213815e-39, - 1.1466963728361055e-39, - 1.1478493882182186e-39, - 1.1490022378061693e-39, - 1.1501547974476671e-39, - 1.1513069714261306e-39, - 1.1524588720717818e-39, - 1.1536107038024268e-39, - 1.154762671686326e-39, - 1.155914981397431e-39, - 1.1570678386589266e-39, - 1.1582213889435778e-39, - 1.1593755215700397e-39, - 1.1605300563476788e-39, - 1.161684812606241e-39, - 1.1628396170920482e-39, - 1.1639943126884295e-39, - 1.1651488434004437e-39, - 1.1663033775940616e-39, - 1.1674581146302871e-39, - 1.16861325387261e-39, - 1.1697689946855125e-39, - 1.1709255339695676e-39, - 1.1720829422792377e-39 - ], - "nc": [ - 4.6198585123381134e-46, - 1.9200003412562514e-43, - 8.552942884046426e-43, - 1.6487687024402482e-42, - 2.402149798450318e-42, - 3.1627268534378627e-42, - 3.8761214325812494e-42, - 4.52782000646077e-42, - 5.1093903040500415e-42, - 5.650276521058727e-42, - 6.169386408630514e-42, - 6.686389601625372e-42, - 7.195348849528541e-42, - 7.682934191680778e-42, - 8.148895372544686e-42, - 8.605026246901378e-42, - 9.048412249305429e-42, - 9.476555621548335e-42, - 9.90127501910724e-42, - 1.0322670382268484e-41, - 1.0755098117465704e-41, - 1.1175791661422635e-41, - 1.1587635900095036e-41, - 1.199061721468241e-41, - 1.2391866929280333e-41, - 1.2794873101292458e-41, - 1.3201646206788065e-41, - 1.3603230717009672e-41, - 1.4000471205148976e-41, - 1.4400984716578023e-41, - 1.4805247449135694e-41, - 1.520796213972616e-41, - 1.560619039644599e-41, - 1.6001943051039423e-41, - 1.6396513216021028e-41, - 1.6791588724625877e-41, - 1.7187800094284862e-41, - 1.7585572010014507e-41, - 1.7983988095803027e-41, - 1.8381428030725258e-41, - 1.8777180994324122e-41, - 1.9173125327413059e-41, - 1.9570688855169167e-41, - 1.9971313765329026e-41, - 2.037209316521471e-41, - 2.0771066457500268e-41, - 2.116657142322911e-41, - 2.1559622978583823e-41, - 2.1952121518574942e-41, - 2.2345800248824802e-41, - 2.2740910888381436e-41, - 2.3135951926649037e-41, - 2.352973934915457e-41, - 2.392077925210203e-41, - 2.4309422445475335e-41, - 2.4697832833844536e-41, - 2.5087576086760714e-41, - 2.5480783643836165e-41, - 2.5874492234030796e-41, - 2.6270823171062726e-41, - 2.66668610770729e-41, - 2.705946033320111e-41, - 2.7447329928977705e-41, - 2.7830925429204575e-41, - 2.821513498152467e-41, - 2.8601622387578124e-41, - 2.899132660500985e-41, - 2.9385407387801845e-41, - 2.9781759085523547e-41, - 3.017805047243508e-41, - 3.0572403885297895e-41, - 3.0962791167287365e-41, - 3.1348298854150294e-41, - 3.173122535507416e-41, - 3.211351375443863e-41, - 3.2496954428188896e-41, - 3.288428636254705e-41, - 3.327690491658845e-41, - 3.3674298229909385e-41, - 3.40749772044284e-41, - 3.447719588284823e-41, - 3.487887496185507e-41, - 3.5278281226513186e-41, - 3.5674081625191145e-41, - 3.6066000868309526e-41, - 3.6454784576155656e-41, - 3.684143468708566e-41, - 3.722629427737803e-41, - 3.7610052520089914e-41, - 3.7993498183927057e-41, - 3.8377109287591335e-41, - 3.8760898454762685e-41, - 3.9144963265539957e-41, - 3.9529662273542527e-41, - 3.991548879253655e-41, - 4.030266212470193e-41, - 4.0691125576856313e-41, - 4.108108501021531e-41, - 4.1472242738008687e-41, - 4.186417059506452e-41, - 4.2256281822768137e-41, - 4.2647797529541437e-41, - 4.3038613123892003e-41, - 4.3427745900484246e-41, - 4.381533844157218e-41, - 4.4201368681780096e-41, - 4.458650950749944e-41, - 4.4971024625565706e-41, - 4.5354421905920075e-41, - 4.5736614820104317e-41, - 4.611756918046897e-41, - 4.649831640211938e-41, - 4.688024413792964e-41, - 4.726361646944369e-41, - 4.764766130938928e-41, - 4.803234566072288e-41, - 4.841849866579113e-41, - 4.880573750617907e-41, - 4.919361517501531e-41, - 4.95831011226812e-41, - 4.997379698854342e-41, - 5.036534813974768e-41, - 5.075837995200127e-41, - 5.115155584226059e-41, - 5.154419713778145e-41, - 5.193744310097803e-41, - 5.233031594281922e-41, - 5.27211670105102e-41, - 5.311045382395396e-41, - 5.349883719072829e-41, - 5.388550228170316e-41, - 5.426923573894186e-41, - 5.465010745827485e-41, - 5.502959748095655e-41, - 5.540861519617891e-41, - 5.578750539965115e-41, - 5.616688484662091e-41, - 5.654657950723212e-41, - 5.692619322378427e-41, - 5.730685622751428e-41, - 5.768990196628701e-41, - 5.807516754919417e-41, - 5.846214203054097e-41, - 5.885050899478857e-41, - 5.923968944735561e-41, - 5.962936259184133e-41, - 6.001972610147347e-41, - 6.04101673387534e-41, - 6.079939501580061e-41, - 6.118757989468017e-41, - 6.15759415667901e-41, - 6.196448649347126e-41, - 6.235198321489897e-41, - 6.273753957086796e-41, - 6.312112637713466e-41, - 6.350323113699078e-41, - 6.388502769281772e-41, - 6.426749281686439e-41, - 6.465031321350074e-41, - 6.503270507162364e-41, - 6.541469433658682e-41, - 6.57969143197193e-41, - 6.617984015946089e-41, - 6.656381089394236e-41, - 6.694902758852454e-41, - 6.733524700260349e-41, - 6.772211479620322e-41, - 6.810955423559758e-41, - 6.849743089381639e-41, - 6.888542300127126e-41, - 6.927341692981104e-41, - 6.966149667303853e-41, - 7.004944023834404e-41, - 7.043644164084452e-41, - 7.082195893531557e-41, - 7.120664903340926e-41, - 7.159149187026324e-41, - 7.197670385471368e-41, - 7.236148968845209e-41, - 7.274501653201138e-41, - 7.312711064475594e-41, - 7.350801337308098e-41, - 7.388851307736778e-41, - 7.426960687525201e-41, - 7.465198355754441e-41, - 7.503513667038485e-41, - 7.541807261061194e-41, - 7.580028537280704e-41, - 7.618239744173691e-41, - 7.656530106199525e-41, - 7.69494022861671e-41, - 7.733442127753048e-41, - 7.771999356029471e-41, - 7.810589828511982e-41, - 7.849201292526417e-41, - 7.887817282418888e-41, - 7.926415663420313e-41, - 7.964984610696333e-41, - 8.003530457643836e-41, - 8.042082777765345e-41, - 8.080666024654647e-41, - 8.119275932684433e-41, - 8.157873433616325e-41, - 8.196420568164383e-41, - 8.234908241642693e-41, - 8.273348741511947e-41, - 8.311749585828835e-41, - 8.350102778389913e-41, - 8.388404939228903e-41, - 8.426662396066539e-41, - 8.464894949331416e-41, - 8.503116086471342e-41, - 8.541328738160759e-41, - 8.579524013541683e-41, - 8.617696669638921e-41, - 8.655852540496696e-41, - 8.694007027623702e-41, - 8.732177878057885e-41, - 8.770372014126964e-41, - 8.808590286692177e-41, - 8.846820373753878e-41, - 8.885053468255774e-41, - 8.923281341309309e-41, - 8.961504405599019e-41, - 8.999730718568208e-41, - 9.037970487056452e-41, - 9.07623843451406e-41, - 9.114538549756087e-41, - 9.152870294560328e-41, - 9.191220145472448e-41, - 9.229565000473493e-41, - 9.26788544615215e-41, - 9.306167686249591e-41, - 9.344417697745072e-41, - 9.38264590135045e-41, - 9.42086284325306e-41, - 9.459076635394705e-41, - 9.497285205941917e-41, - 9.535483691283116e-41, - 9.573661830952087e-41, - 9.611811989798753e-41, - 9.649941272225465e-41, - 9.688058941506478e-41, - 9.726185629345874e-41, - 9.764331216443546e-41, - 9.80250064429709e-41, - 9.840695952471453e-41, - 9.878913411568134e-41, - 9.91714992910333e-41, - 9.955401968666655e-41, - 9.993664198535719e-41, - 1.003194000916928e-40, - 1.0070237154150435e-40, - 1.0108565917184785e-40, - 1.0146939345703663e-40, - 1.018535899839322e-40, - 1.0223824398005606e-40, - 1.0262332320072854e-40, - 1.030088232254929e-40, - 1.033948208386029e-40, - 1.0378139373771043e-40, - 1.0416851863162356e-40, - 1.0455594461533059e-40, - 1.0494334315524832e-40, - 1.0533040433784267e-40, - 1.0571707728791645e-40, - 1.061036011984852e-40, - 1.0649026256885584e-40, - 1.0687730770608203e-40, - 1.0726464466101463e-40, - 1.0765191897801394e-40, - 1.0803874850534698e-40, - 1.0842480018689118e-40, - 1.0881004428511049e-40, - 1.0919461869332788e-40, - 1.095786728811652e-40, - 1.0996232024803467e-40, - 1.1034548361145345e-40, - 1.1072802997700744e-40, - 1.111098286807365e-40, - 1.1149078273579441e-40, - 1.1187100567682232e-40, - 1.122506990836605e-40, - 1.1263006586220161e-40, - 1.1300929072107443e-40, - 1.1338839149155624e-40, - 1.1376730911010614e-40, - 1.1414598770556364e-40, - 1.1452437624056164e-40, - 1.1490251770836942e-40, - 1.1528048096989346e-40, - 1.1565831042644754e-40, - 1.1603605039797684e-40, - 1.164137205082784e-40, - 1.1679139469836734e-40, - 1.1716922891445654e-40, - 1.175473816895335e-40, - 1.179260114295337e-40, - 1.1830519622644133e-40, - 1.1868486599774179e-40, - 1.1906493508909319e-40, - 1.1944531301806848e-40, - 1.1982588841850051e-40, - 1.2020660365771332e-40, - 1.2058742306529635e-40, - 1.2096831158952344e-40, - 1.2134925118140648e-40, - 1.2173026219881972e-40, - 1.221113824004915e-40, - 1.22492650161446e-40, - 1.2287410646502063e-40, - 1.2325579537256026e-40, - 1.2363769896705635e-40, - 1.2401978292855553e-40, - 1.244020126823447e-40, - 1.2478433070060414e-40, - 1.251666968790395e-40, - 1.2554913159063003e-40, - 1.259316582555475e-40, - 1.2631430264905502e-40, - 1.2669709761370581e-40, - 1.2707998025445395e-40, - 1.2746284665556818e-40, - 1.2784559283000419e-40, - 1.2822812289491052e-40, - 1.2861042580062032e-40, - 1.28992621759425e-40, - 1.2937484819167733e-40, - 1.297572421908726e-40, - 1.3013990134352701e-40, - 1.3052279220894349e-40, - 1.30905802362907e-40, - 1.3128881527069734e-40, - 1.3167171631745635e-40, - 1.320544485848281e-40, - 1.3243703155703297e-40, - 1.3281949712769722e-40, - 1.3320187739208327e-40, - 1.335842011487174e-40, - 1.3396644415164155e-40, - 1.3434856659703355e-40, - 1.3473054419372183e-40, - 1.351123528122511e-40, - 1.3549397339533362e-40, - 1.3587545620890454e-40, - 1.3625688691994276e-40, - 1.3663834400029696e-40, - 1.3701990586484545e-40, - 1.3740164503669784e-40, - 1.3778353758201473e-40, - 1.3816546561952054e-40, - 1.3854729952103914e-40, - 1.389289095659631e-40, - 1.3931016924465992e-40, - 1.3969103306951102e-40, - 1.4007157459353937e-40, - 1.4045189850276354e-40, - 1.4083211005812284e-40, - 1.4121231412466023e-40, - 1.415925855164151e-40, - 1.4197291926788783e-40, - 1.4235326983488404e-40, - 1.4273358966175973e-40, - 1.431138311940778e-40, - 1.434939483647944e-40, - 1.438739112898193e-40, - 1.4425371707765445e-40, - 1.446333664838984e-40, - 1.4501286026414978e-40, - 1.453921980766333e-40, - 1.4577136801065999e-40, - 1.461503454103338e-40, - 1.4652910288038898e-40, - 1.4690761302078652e-40, - 1.4728584892619138e-40, - 1.4766381734947497e-40, - 1.480415826470412e-40, - 1.4841921795571495e-40, - 1.487967966258198e-40, - 1.4917439197312788e-40, - 1.4955206766686298e-40, - 1.499298204264406e-40, - 1.5030761706156537e-40, - 1.5068542375622592e-40, - 1.510632066943262e-40, - 1.5144093228138262e-40, - 1.5181859223801418e-40, - 1.5219622911294063e-40, - 1.5257389439360968e-40, - 1.5295163982926561e-40, - 1.5332951716915265e-40, - 1.5370757708563201e-40, - 1.5408585298591994e-40, - 1.5446435292538221e-40, - 1.5484307710971155e-40, - 1.5522202564956011e-40, - 1.556011986553771e-40, - 1.5598059426959749e-40, - 1.5636020154129741e-40, - 1.5674001767842127e-40, - 1.57120043311588e-40, - 1.5750027907296922e-40, - 1.578807256099473e-40, - 1.5826138876863734e-40, - 1.5864229209702072e-40, - 1.590234622843244e-40, - 1.5940492588575852e-40, - 1.5978670945653313e-40, - 1.6016883951321167e-40, - 1.6055132446350292e-40, - 1.6093412293998933e-40, - 1.6131718044185585e-40, - 1.6170044180648416e-40, - 1.6208385187125585e-40, - 1.6246735553220518e-40, - 1.628509187380579e-40, - 1.6323454781120209e-40, - 1.6361823306976721e-40, - 1.6400196201513333e-40, - 1.643857221586104e-40, - 1.6476950100731553e-40, - 1.6515327405812134e-40, - 1.6553699340143438e-40, - 1.65920640182328e-40, - 1.6630420106053134e-40, - 1.6668766269576267e-40, - 1.6707101174308432e-40, - 1.6745423572989244e-40, - 1.6783732202052969e-40, - 1.6822023900784042e-40, - 1.686029497505871e-40, - 1.689854173075313e-40, - 1.693676047374349e-40, - 1.6974947702792144e-40, - 1.7013102350160457e-40, - 1.7051226154283403e-40, - 1.708932159769973e-40, - 1.7127391170239214e-40, - 1.716543736173162e-40, - 1.7203462657953323e-40, - 1.7241469232920513e-40, - 1.7279458245214838e-40, - 1.7317430090262736e-40, - 1.7355385110473643e-40, - 1.7393323647491496e-40, - 1.7431246042736815e-40, - 1.746915254217622e-40, - 1.7507042961814042e-40, - 1.7544917639636156e-40, - 1.7582777139310231e-40, - 1.7620622024562172e-40, - 1.765845285911796e-40, - 1.7696270211015463e-40, - 1.7734074922356638e-40, - 1.7771868790374383e-40, - 1.7809654384371226e-40, - 1.784743432581386e-40, - 1.7885211236168929e-40, - 1.7922987736903135e-40, - 1.796076655155215e-40, - 1.7998551304845807e-40, - 1.8036344676687564e-40, - 1.8074148519432034e-40, - 1.811196467796585e-40, - 1.814979499717561e-40, - 1.8187641321947927e-40, - 1.8225504791785997e-40, - 1.8263383547254866e-40, - 1.8301275556180488e-40, - 1.8339178958100526e-40, - 1.837709189264339e-40, - 1.841501250007661e-40, - 1.845293892220325e-40, - 1.849087004679027e-40, - 1.8528806732028328e-40, - 1.856675015653279e-40, - 1.860470151146737e-40, - 1.8642661987995766e-40, - 1.8680632777281687e-40, - 1.87186150686071e-40, - 1.875660965839798e-40, - 1.8794616016004047e-40, - 1.8832632506644625e-40, - 1.8870657362251807e-40, - 1.8908688814757657e-40, - 1.894672509609427e-40, - 1.8984764437443427e-40, - 1.9022804822957843e-40, - 1.90608442617599e-40, - 1.9098882072106208e-40, - 1.913691776153795e-40, - 1.9174950837919452e-40, - 1.9212980809116193e-40, - 1.925100718300816e-40, - 1.928902987127068e-40, - 1.932705009918978e-40, - 1.936506894919842e-40, - 1.940308740936151e-40, - 1.944110646779182e-40, - 1.947912711247144e-40, - 1.9517150330902907e-40, - 1.955517694325131e-40, - 1.95932062573807e-40, - 1.9631235376444037e-40, - 1.9669260746834306e-40, - 1.9707278815362877e-40, - 1.9745286028841095e-40, - 1.9783278834080325e-40, - 1.9821253705592373e-40, - 1.985920803373573e-40, - 1.989714239295042e-40, - 1.9935059720941637e-40, - 1.997296305030766e-40, - 2.0010855413646207e-40, - 2.0048739843555026e-40, - 2.008661937263182e-40, - 2.012449700773243e-40, - 2.0162374691528013e-40, - 2.0200250687570523e-40, - 2.0238122405757e-40, - 2.0275987257841843e-40, - 2.031384265572243e-40, - 2.0351686011296403e-40, - 2.0389514723880695e-40, - 2.0427325869412734e-40, - 2.0465118579189083e-40, - 2.050289484385783e-40, - 2.054065680929309e-40, - 2.05784066213632e-40, - 2.061614642592203e-40, - 2.0653878368450043e-40, - 2.069160470859346e-40, - 2.0729328195933167e-40, - 2.076704812552386e-40, - 2.0804761867118766e-40, - 2.084246677745594e-40, - 2.0880160213273444e-40, - 2.091783953130934e-40, - 2.0955502088301674e-40, - 2.0993145117134456e-40, - 2.103076639736874e-40, - 2.106836813651359e-40, - 2.110595373104646e-40, - 2.1143526576157107e-40, - 2.1181090067035268e-40, - 2.121864759887069e-40, - 2.125620256684453e-40, - 2.129375832230595e-40, - 2.1331316926566333e-40, - 2.1368876728935437e-40, - 2.140643535414662e-40, - 2.1443990429697286e-40, - 2.148153958328406e-40, - 2.1519080442643233e-40, - 2.155661063550025e-40, - 2.159412768320271e-40, - 2.1631629524465256e-40, - 2.1669116634545738e-40, - 2.1706589998465533e-40, - 2.174405059194409e-40, - 2.1781499390700795e-40, - 2.1818937370455104e-40, - 2.185636550673614e-40, - 2.189378507250169e-40, - 2.1931198799783522e-40, - 2.196860953440325e-40, - 2.2006020039690422e-40, - 2.2043433097906103e-40, - 2.2080851491427582e-40, - 2.2118278002632167e-40, - 2.2155715413897135e-40, - 2.2193166365603728e-40, - 2.2230631686565483e-40, - 2.2268110061236824e-40, - 2.230559950397711e-40, - 2.2343098028898116e-40, - 2.2380603650796655e-40, - 2.2418114384469545e-40, - 2.2455628244713584e-40, - 2.249314325559183e-40, - 2.2530658284507942e-40, - 2.2568174161324774e-40, - 2.260569268934508e-40, - 2.264321569233531e-40, - 2.2680744974717823e-40, - 2.2718282340519143e-40, - 2.2755829593144558e-40, - 2.279338853594443e-40, - 2.2830960789057187e-40, - 2.2868546516362333e-40, - 2.2906145137141116e-40, - 2.2943756073087867e-40, - 2.298137879776867e-40, - 2.3019012789259736e-40, - 2.3056657525637275e-40, - 2.3094312484977516e-40, - 2.3131977146612816e-40, - 2.3169651475308458e-40, - 2.320733633208551e-40, - 2.324503191508097e-40, - 2.328273824834158e-40, - 2.3320455326310336e-40, - 2.335818314266468e-40, - 2.3395921691082055e-40, - 2.343367096523989e-40, - 2.3471430935733926e-40, - 2.3509200708969515e-40, - 2.3546978621820057e-40, - 2.358476340361186e-40, - 2.3622553861739893e-40, - 2.36603488284968e-40, - 2.369814713640709e-40, - 2.373594761799524e-40, - 2.3773749105785767e-40, - 2.381155047853144e-40, - 2.3849351524004072e-40, - 2.3887152714020724e-40, - 2.392495439313345e-40, - 2.3962756839419262e-40, - 2.400056029863033e-40, - 2.403836501622251e-40, - 2.407617123789781e-40, - 2.4113979209593087e-40, - 2.415178915927313e-40, - 2.418960094807551e-40, - 2.4227414286557525e-40, - 2.4265229079592176e-40, - 2.4303045295299547e-40, - 2.4340862942243615e-40, - 2.437868202994807e-40, - 2.4416502567936595e-40, - 2.445432456573288e-40, - 2.4492148034076246e-40, - 2.4529973026295517e-40, - 2.4567799118671422e-40, - 2.4605625097434224e-40, - 2.4643449665709226e-40, - 2.468127149462548e-40, - 2.4719089252643003e-40, - 2.4756901608221817e-40, - 2.479470722982196e-40, - 2.4832504785980885e-40, - 2.4870293030142377e-40, - 2.4908071468557457e-40, - 2.4945841210103162e-40, - 2.498360366623794e-40, - 2.502136026797439e-40, - 2.5059112452328352e-40, - 2.509686165632924e-40, - 2.5134609317006465e-40, - 2.5172356871389406e-40, - 2.5210105748642342e-40, - 2.5247857200871486e-40, - 2.528561133092253e-40, - 2.532336753113035e-40, - 2.5361125169048536e-40, - 2.5398883595335298e-40, - 2.543664215951444e-40, - 2.5474400211099987e-40, - 2.5512157099383117e-40, - 2.554991217351272e-40, - 2.558766482196176e-40, - 2.5625414773783082e-40, - 2.566316245213772e-40, - 2.570090840127806e-40, - 2.5738653180685994e-40, - 2.577639735841129e-40, - 2.5814141502599335e-40, - 2.5851886181395495e-40, - 2.588963196294514e-40, - 2.5927379407636357e-40, - 2.596512884015912e-40, - 2.6002879959892446e-40, - 2.604063199981396e-40, - 2.607838416088424e-40, - 2.6116135619085716e-40, - 2.6153885541905626e-40, - 2.6191633096824148e-40, - 2.6229377451321473e-40, - 2.6267117772877765e-40, - 2.63048532519765e-40, - 2.6342583436747225e-40, - 2.6380308747994715e-40, - 2.6418030116104353e-40, - 2.6455748492553435e-40, - 2.6493464866726723e-40, - 2.6531180239810104e-40, - 2.6568895612978567e-40, - 2.660661198740713e-40, - 2.664433036427079e-40, - 2.668205171309403e-40, - 2.671977656112532e-40, - 2.6757504615273807e-40, - 2.679523517332947e-40, - 2.683296751921564e-40, - 2.687070090621799e-40, - 2.690843457406258e-40, - 2.694616776241519e-40, - 2.6983899710941507e-40, - 2.7021629659292636e-40, - 2.705935684522612e-40, - 2.709708048143355e-40, - 2.7134800076236395e-40, - 2.7172515476876614e-40, - 2.7210226547523365e-40, - 2.724793318069797e-40, - 2.728563529421468e-40, - 2.7323332806774706e-40, - 2.7361025637079317e-40, - 2.739871370382974e-40, - 2.743639692855189e-40, - 2.747407557536763e-40, - 2.7511750381275743e-40, - 2.7549421747384686e-40, - 2.7587090022473582e-40, - 2.7624755539489727e-40, - 2.7662418587403818e-40, - 2.7700079447612404e-40, - 2.7737738401512017e-40, - 2.7775395730499202e-40, - 2.7813051715970496e-40, - 2.7850706507334335e-40, - 2.7888359411620114e-40, - 2.792600990944934e-40, - 2.796365773303366e-40, - 2.800130261686899e-40, - 2.8038944316068713e-40, - 2.8076582604202395e-40, - 2.81142172555518e-40, - 2.815184804441918e-40, - 2.8189474745106785e-40, - 2.8227097134559937e-40, - 2.826471531334065e-40, - 2.830232975774112e-40, - 2.8339940470440076e-40, - 2.8377547384583284e-40, - 2.8415150431434404e-40, - 2.845274952888484e-40, - 2.849034458903671e-40, - 2.852793552396893e-40, - 2.8565522245760382e-40, - 2.8603104666489455e-40, - 2.8640682694202014e-40, - 2.8678256161344297e-40, - 2.871582504229953e-40, - 2.8753389537554126e-40, - 2.879094985809147e-40, - 2.882850621747634e-40, - 2.8866058842326114e-40, - 2.8903607963374297e-40, - 2.8941153811355877e-40, - 2.897869661700589e-40, - 2.901623661105933e-40, - 2.9053774029616498e-40, - 2.909130917444149e-40, - 2.912884230264634e-40, - 2.916637359815907e-40, - 2.920390324296587e-40, - 2.9241431419528284e-40, - 2.9278958313203208e-40, - 2.9316484110404688e-40, - 2.9354008997548316e-40, - 2.9391533161049668e-40, - 2.9429056787324362e-40, - 2.9466580050919274e-40, - 2.9504102938655058e-40, - 2.954162539893223e-40, - 2.9579147481268067e-40, - 2.9616669238794636e-40, - 2.9654190722721095e-40, - 2.9691711960689533e-40, - 2.972923296454148e-40, - 2.976675374591727e-40, - 2.9804274316589556e-40, - 2.9841794688341555e-40, - 2.9879314877867293e-40, - 2.991683512972548e-40, - 2.995435573116832e-40, - 2.999187655667015e-40, - 3.0029397443795125e-40, - 3.006691823026144e-40, - 3.0104438768856993e-40, - 3.0141958939893836e-40, - 3.017947862661588e-40, - 3.02169977122671e-40, - 3.0254516080091444e-40, - 3.0292033613332847e-40, - 3.0329550107099565e-40, - 3.036706517422472e-40, - 3.040457913671582e-40, - 3.0442092537085654e-40, - 3.0479605917852972e-40, - 3.051711981996728e-40, - 3.0554634769408926e-40, - 3.0592151283857523e-40, - 3.0629669880904203e-40, - 3.066719107814015e-40, - 3.0704715393156477e-40, - 3.074224334281049e-40, - 3.077977541070956e-40, - 3.0817311657059473e-40, - 3.085485164883442e-40, - 3.0892394922607226e-40, - 3.0929941015318164e-40, - 3.0967489465503193e-40, - 3.100503981435043e-40, - 3.1042591603665465e-40, - 3.108014437525385e-40, - 3.1117697670921232e-40, - 3.1155251032473178e-40, - 3.1192804033882383e-40, - 3.123035654491556e-40, - 3.126790864294342e-40, - 3.1305460437482367e-40, - 3.1343012038414626e-40, - 3.1380563555625206e-40, - 3.1418115101590343e-40, - 3.1455666796174673e-40, - 3.149321876055103e-40, - 3.153077111562508e-40, - 3.156832398142757e-40, - 3.1605877477810354e-40, - 3.1643431665043385e-40, - 3.1680986280448102e-40, - 3.171854127204453e-40, - 3.175609673431353e-40, - 3.1793652762187047e-40, - 3.183120945059689e-40, - 3.1868766893002024e-40, - 3.190632517771241e-40, - 3.194388439191353e-40, - 3.198144462279089e-40, - 3.2019005957529985e-40, - 3.2056568483316316e-40, - 3.209413233739708e-40, - 3.213169796794176e-40, - 3.2169265428047867e-40, - 3.220683449494854e-40, - 3.224440494405008e-40, - 3.228197655075874e-40, - 3.231954909048041e-40, - 3.235712233861771e-40, - 3.239469607057175e-40, - 3.2432270061743672e-40, - 3.246984408753457e-40, - 3.2507417923345548e-40, - 3.2544991325599615e-40, - 3.25825637342879e-40, - 3.2620134855290836e-40, - 3.2657704893074596e-40, - 3.269527407005511e-40, - 3.2732842608648283e-40, - 3.27704107313374e-40, - 3.280797866214149e-40, - 3.2845546627090233e-40, - 3.288311485236735e-40, - 3.29206835641565e-40, - 3.2958252988641347e-40, - 3.2995823352191336e-40, - 3.303339497522932e-40, - 3.307096817789538e-40, - 3.31085426329416e-40, - 3.314611789493659e-40, - 3.318369351844904e-40, - 3.3221269058047543e-40, - 3.3258844067406038e-40, - 3.3296418092374466e-40, - 3.333399067475896e-40, - 3.3371561356331643e-40, - 3.3409129678753066e-40, - 3.344669518304562e-40, - 3.348425741233526e-40, - 3.352181596903783e-40, - 3.355937079629895e-40, - 3.3596922113835617e-40, - 3.363447015145054e-40, - 3.3672015138946474e-40, - 3.37095573061262e-40, - 3.3747096886042546e-40, - 3.3784634127311877e-40, - 3.3822169283203732e-40, - 3.3859702606988434e-40, - 3.3897234351936315e-40, - 3.3934764771317697e-40, - 3.397229409900511e-40, - 3.4009822390672034e-40, - 3.404734951125923e-40, - 3.4084875272604744e-40, - 3.412239948778992e-40, - 3.415992196997611e-40, - 3.4197442532324643e-40, - 3.423496098481287e-40, - 3.427247712269985e-40, - 3.4309990736994705e-40, - 3.434750161870612e-40, - 3.438500955884282e-40, - 3.4422514348413518e-40, - 3.4460015777991946e-40, - 3.449751364232836e-40, - 3.453500779236602e-40, - 3.4572498105783017e-40, - 3.460998446040324e-40, - 3.464746673405048e-40, - 3.468494480454863e-40, - 3.472241854894913e-40, - 3.475988783697472e-40, - 3.4797352534300465e-40, - 3.483481250655891e-40, - 3.4872267619382598e-40, - 3.4909717738404015e-40, - 3.4947162742197053e-40, - 3.498460267362924e-40, - 3.5022037584654073e-40, - 3.5059467448754062e-40, - 3.5096892237678852e-40, - 3.513431192317812e-40, - 3.517172647700149e-40, - 3.5209135871206003e-40, - 3.524654009086794e-40, - 3.528393913862163e-40, - 3.5321333018342174e-40, - 3.5358721733904627e-40, - 3.5396105290899346e-40, - 3.5433483717779627e-40, - 3.547085697541552e-40, - 3.550822495538433e-40, - 3.554558768840203e-40, - 3.558294522125537e-40, - 3.5620297600731e-40, - 3.5657644873615594e-40, - 3.5694987086695887e-40, - 3.573232428384408e-40, - 3.576965648793836e-40, - 3.580698371265662e-40, - 3.5844305971637662e-40, - 3.588162327852024e-40, - 3.591893564694316e-40, - 3.5956243106837004e-40, - 3.599354583892775e-40, - 3.6030844070555374e-40, - 3.6068138008805282e-40, - 3.610542782168295e-40, - 3.614271357630255e-40, - 3.617999532362471e-40, - 3.6217273114609997e-40, - 3.6254546999706385e-40, - 3.6291817027490147e-40, - 3.6329083246110476e-40, - 3.6366345703716513e-40, - 3.6403604448457457e-40, - 3.6440859528482468e-40, - 3.647811095701565e-40, - 3.651535861761828e-40, - 3.6552602438916378e-40, - 3.6589842371756964e-40, - 3.6627078366987133e-40, - 3.666431037545399e-40, - 3.670153834800461e-40, - 3.673876223548655e-40, - 3.677598199391248e-40, - 3.681319770175967e-40, - 3.685040962451776e-40, - 3.68876180453009e-40, - 3.692482324722332e-40, - 3.696202551340019e-40, - 3.6999225173708415e-40, - 3.7036422645971925e-40, - 3.707361808938199e-40, - 3.7110811596915055e-40, - 3.71480032615476e-40, - 3.718519317625606e-40, - 3.722238143401689e-40, - 3.7259568127806586e-40, - 3.72967533503562e-40, - 3.733393719292274e-40, - 3.737111974621522e-40, - 3.7408301100941716e-40, - 3.744548134781034e-40, - 3.748266057748972e-40, - 3.751983876619614e-40, - 3.755701555162505e-40, - 3.759419122830142e-40, - 3.763136636508116e-40, - 3.766854153107486e-40, - 3.770571729539305e-40, - 3.774289422714627e-40, - 3.77800728954451e-40, - 3.781725386926132e-40, - 3.78544377136599e-40, - 3.789162498935541e-40, - 3.7928816256834456e-40, - 3.7966012076583705e-40, - 3.8003213009089755e-40, - 3.804041963120983e-40, - 3.807763283029225e-40, - 3.811485270527918e-40, - 3.8152078317696085e-40, - 3.818930869046008e-40, - 3.8226542849810145e-40, - 3.826377990261595e-40 - ] - }, - "numu_bar": { - "cc": [ - 0.0, - 0.0, - 4.971817059212871e-43, - 9.903290095763444e-43, - 1.4395434011262805e-42, - 1.9814253541387388e-42, - 2.592176161299858e-42, - 3.230996271460035e-42, - 3.877665736167247e-42, - 4.557410508651327e-42, - 5.2738151399039654e-42, - 6.013380624165142e-42, - 6.756809712569944e-42, - 7.520623639945111e-42, - 8.258360835471761e-42, - 8.987966503757761e-42, - 9.719572925841489e-42, - 1.0422417772696399e-41, - 1.1131384736096359e-41, - 1.1815374031234698e-41, - 1.248744749236042e-41, - 1.3146304867720434e-41, - 1.3808115884323294e-41, - 1.445700170853742e-41, - 1.5097655098009945e-41, - 1.5736810490074424e-41, - 1.637761514001987e-41, - 1.700679137798084e-41, - 1.7623298840309687e-41, - 1.8241621515447953e-41, - 1.8864972345077285e-41, - 1.9482249682641892e-41, - 2.008765947379292e-41, - 2.068839910101989e-41, - 2.129191737975598e-41, - 2.189706516046489e-41, - 2.250021767391408e-41, - 2.3098773289287154e-41, - 2.369332937443999e-41, - 2.42844396230835e-41, - 2.487296277218693e-41, - 2.5460109018769635e-41, - 2.604619946576108e-41, - 2.663175590922436e-41, - 2.7218013977011506e-41, - 2.780317570907873e-41, - 2.83868151824962e-41, - 2.8968460419316815e-41, - 2.954694978300213e-41, - 3.0123990598324124e-41, - 3.0701997717277577e-41, - 3.128247247677494e-41, - 3.186622274555359e-41, - 3.245117321335545e-41, - 3.3034327017675824e-41, - 3.361212836468816e-41, - 3.4185203914265714e-41, - 3.4755469117274943e-41, - 3.5326017324101173e-41, - 3.5901296447418397e-41, - 3.6483508591176986e-41, - 3.7071501169723524e-41, - 3.76627238800078e-41, - 3.825323303881845e-41, - 3.883971481721234e-41, - 3.941988889675984e-41, - 3.999285100709193e-41, - 4.0560757164888456e-41, - 4.1125928616997803e-41, - 4.1691766319449544e-41, - 4.2263190218726066e-41, - 4.28313584484325e-41, - 4.34123139247304e-41, - 4.400115619333472e-41, - 4.459133990410064e-41, - 4.5179531140871206e-41, - 4.5762859428618695e-41, - 4.634091782414375e-41, - 4.691209250280461e-41, - 4.74775065522703e-41, - 4.804088429369667e-41, - 4.860519848313517e-41, - 4.917210384967871e-41, - 4.974404596311566e-41, - 5.032278008109312e-41, - 5.090816553438124e-41, - 5.149889529384277e-41, - 5.20931651813906e-41, - 5.268847405663256e-41, - 5.328218005012808e-41, - 5.387243585519469e-41, - 5.445792725604553e-41, - 5.503776245345401e-41, - 5.561252513485627e-41, - 5.618386696768248e-41, - 5.675394908640739e-41, - 5.732375578892896e-41, - 5.789402519652177e-41, - 5.846595242063717e-41, - 5.903941866656731e-41, - 5.961559331873283e-41, - 6.019366817209439e-41, - 6.077056622574436e-41, - 6.134840299947331e-41, - 6.192748652489256e-41, - 6.250793221592792e-41, - 6.308683577319214e-41, - 6.366567491079779e-41, - 6.424619414333331e-41, - 6.482590541336723e-41, - 6.540589852036827e-41, - 6.598526414820785e-41, - 6.656298267883096e-41, - 6.714050805404497e-41, - 6.771814457996253e-41, - 6.829558802684633e-41, - 6.887323422453924e-41, - 6.945031445121825e-41, - 7.002495835426822e-41, - 7.0599585133486e-41, - 7.117558991426896e-41, - 7.175142113254907e-41, - 7.232613086878126e-41, - 7.289943102152265e-41, - 7.347263260302655e-41, - 7.404738493793524e-41, - 7.462442356709354e-41, - 7.52047151160607e-41, - 7.578855014370438e-41, - 7.63747336028851e-41, - 7.696276073615427e-41, - 7.755312384172145e-41, - 7.814483572377934e-41, - 7.873638455243756e-41, - 7.932733753637863e-41, - 7.991719470331595e-41, - 8.05043819682133e-41, - 8.108785105897575e-41, - 8.166716984641646e-41, - 8.224334878257871e-41, - 8.281812931320283e-41, - 8.339212177904513e-41, - 8.396566382850427e-41, - 8.453889363736594e-41, - 8.511210459360212e-41, - 8.568632612247907e-41, - 8.626271284181986e-41, - 8.684267618936056e-41, - 8.742681129896498e-41, - 8.801371836128024e-41, - 8.860260592157322e-41, - 8.919444363880629e-41, - 8.978958968727559e-41, - 9.038638358994174e-41, - 9.098303968791965e-41, - 9.157891083970994e-41, - 9.217404938671615e-41, - 9.276857777025586e-41, - 9.336237398273562e-41, - 9.395482485674206e-41, - 9.454549493692218e-41, - 9.513501967339142e-41, - 9.572452608953038e-41, - 9.631387909175098e-41, - 9.69026351136302e-41, - 9.749034638469699e-41, - 9.807644868455517e-41, - 9.866130192012286e-41, - 9.92463173968242e-41, - 9.983247043893778e-41, - 1.0041941556831746e-40, - 1.010062586209286e-40, - 1.0159225770661518e-40, - 1.0217683306850945e-40, - 1.027607672954435e-40, - 1.033455313340532e-40, - 1.0393099082730618e-40, - 1.0451497707272546e-40, - 1.0509608105474705e-40, - 1.056765084238982e-40, - 1.0625838402453366e-40, - 1.068406659729018e-40, - 1.0742122686463544e-40, - 1.079993430163463e-40, - 1.0857636775352236e-40, - 1.0915370810944343e-40, - 1.097313534354236e-40, - 1.103087900698393e-40, - 1.1088623206131333e-40, - 1.114645604788518e-40, - 1.1204445167685073e-40, - 1.126261609863685e-40, - 1.1320990409202636e-40, - 1.1379576180534475e-40, - 1.1438355971538163e-40, - 1.149732630053622e-40, - 1.1556517421084134e-40, - 1.161597669942132e-40, - 1.1675730758057656e-40, - 1.1735707354586745e-40, - 1.1795798402366704e-40, - 1.1855945241824095e-40, - 1.1916119835894683e-40, - 1.1976270102090305e-40, - 1.2036379118829982e-40, - 1.2096452910108761e-40, - 1.215647909153376e-40, - 1.2216434039082773e-40, - 1.2276293718700527e-40, - 1.2336027810363625e-40, - 1.2395581256986267e-40, - 1.2454901272610716e-40, - 1.2513993164320712e-40, - 1.2572918650970754e-40, - 1.2631772590490499e-40, - 1.269060747931886e-40, - 1.2749390420574039e-40, - 1.2808079586372046e-40, - 1.2866684483991433e-40, - 1.2925212269403193e-40, - 1.2983665781841738e-40, - 1.3042077252137618e-40, - 1.3100482805852693e-40, - 1.3158895657694452e-40, - 1.3217324550635805e-40, - 1.3275791530199006e-40, - 1.3334293139238008e-40, - 1.339280431009422e-40, - 1.3451306676904073e-40, - 1.3509804951097316e-40, - 1.3568320921771737e-40, - 1.3626870546612266e-40, - 1.3685462757933423e-40, - 1.3744125616775805e-40, - 1.3802902167453613e-40, - 1.386179490846828e-40, - 1.3920734239281732e-40, - 1.3979654178748192e-40, - 1.4038530414219894e-40, - 1.4097437646940777e-40, - 1.4156481158798828e-40, - 1.4215756341011805e-40, - 1.4275247398760069e-40, - 1.4334867398094547e-40, - 1.4394533789036908e-40, - 1.44542267405936e-40, - 1.4513964467571944e-40, - 1.4573752224541311e-40, - 1.4633593029337646e-40, - 1.4693499918238612e-40, - 1.475347816710682e-40, - 1.4813516216722712e-40, - 1.4873601726329982e-40, - 1.4933732649206042e-40, - 1.4993900271379568e-40, - 1.5054070063895513e-40, - 1.5114192081417117e-40, - 1.517422210967191e-40, - 1.523413643114219e-40, - 1.52939614308427e-40, - 1.5353725896728628e-40, - 1.5413442281753431e-40, - 1.547307628608332e-40, - 1.5532568848562024e-40, - 1.5591860433610312e-40, - 1.5650929390738708e-40, - 1.5709842000898091e-40, - 1.5768674323110252e-40, - 1.582749141026738e-40, - 1.5886275869926146e-40, - 1.5944949306027537e-40, - 1.6003424087266918e-40, - 1.6061646572185458e-40, - 1.6119672482269858e-40, - 1.6177587350637107e-40, - 1.6235462749609644e-40, - 1.6293320587787968e-40, - 1.635115929313182e-40, - 1.640898896840445e-40, - 1.6466826266261338e-40, - 1.6524706134310498e-40, - 1.6582673597630363e-40, - 1.6640784545310733e-40, - 1.6699080678438886e-40, - 1.6757550568200715e-40, - 1.6816168451228563e-40, - 1.6874908479355712e-40, - 1.6933756930707967e-40, - 1.6992738203629535e-40, - 1.7051887908315938e-40, - 1.7111241466360349e-40, - 1.7170820788070752e-40, - 1.723062155946006e-40, - 1.7290641509925751e-40, - 1.7350877843826532e-40, - 1.7411302262016239e-40, - 1.747187325852642e-40, - 1.753255066150142e-40, - 1.759330298907477e-40, - 1.7654106827231182e-40, - 1.771492594929626e-40, - 1.7775718264106519e-40, - 1.7836456169524916e-40, - 1.7897148529533198e-40, - 1.7957817215690128e-40, - 1.8018471140669321e-40, - 1.80791116129319e-40, - 1.8139720754611882e-40, - 1.8200274038071492e-40, - 1.826074476120215e-40, - 1.8321104879799938e-40, - 1.8381339666285825e-40, - 1.8441436848072754e-40, - 1.8501387101721397e-40, - 1.8561177877764783e-40, - 1.8620807747471308e-40, - 1.868032404662313e-40, - 1.8739784032342823e-40, - 1.8799246224073145e-40, - 1.8858753582102107e-40, - 1.891829014480824e-40, - 1.8977824967203624e-40, - 1.9037326947025387e-40, - 1.9096769350941297e-40, - 1.9156161554189107e-40, - 1.9215532026155483e-40, - 1.927490941535437e-40, - 1.9334321891666954e-40, - 1.939378209731864e-40, - 1.945328301016911e-40, - 1.9512816161478218e-40, - 1.95723732876105e-40, - 1.9631946767643715e-40, - 1.9691530133677786e-40, - 1.9751116861079904e-40, - 1.9810697885021365e-40, - 1.9870262775471816e-40, - 1.9929811082680108e-40, - 1.9989354387352563e-40, - 2.0048905562200014e-40, - 2.010847633148846e-40, - 2.016807035361842e-40, - 2.0227674984047083e-40, - 2.0287276738495992e-40, - 2.0346864311857893e-40, - 2.0406427934132264e-40, - 2.0465959774370467e-40, - 2.0525454170888207e-40, - 2.0584904578879748e-40, - 2.064430592167412e-40, - 2.070365752298489e-40, - 2.076297885116704e-40, - 2.0822295138185366e-40, - 2.0881632032864686e-40, - 2.0941015608351335e-40, - 2.100045587482649e-40, - 2.1059931217747604e-40, - 2.1119415567229083e-40, - 2.1178882949174715e-40, - 2.123830930922969e-40, - 2.1297698798709577e-40, - 2.1357082763048267e-40, - 2.1416491303906987e-40, - 2.1475950647853114e-40, - 2.153548694430178e-40, - 2.159511102103307e-40, - 2.1654823026924485e-40, - 2.1714623196451423e-40, - 2.177450818942598e-40, - 2.183446608762625e-40, - 2.18944851714064e-40, - 2.1954558660311227e-40, - 2.2014681073543753e-40, - 2.207484780934839e-40, - 2.213506140182114e-40, - 2.2195326356970606e-40, - 2.2255645136116226e-40, - 2.2316019446730646e-40, - 2.237645056937254e-40, - 2.24369358673354e-40, - 2.249747517769942e-40, - 2.2558071049764025e-40, - 2.261872556180225e-40, - 2.2679438330628067e-40, - 2.274020875623662e-40, - 2.2801028326471647e-40, - 2.2861885426665812e-40, - 2.292276899903279e-40, - 2.2983668647362444e-40, - 2.304457459650465e-40, - 2.310547994969027e-40, - 2.316637931290525e-40, - 2.3227264081432385e-40, - 2.328812489399842e-40, - 2.3348953606559506e-40, - 2.3409748511842458e-40, - 2.3470510919479802e-40, - 2.3531241577279205e-40, - 2.359193709411016e-40, - 2.3652592181109225e-40, - 2.3713200751642084e-40, - 2.377375608628096e-40, - 2.3834252358317748e-40, - 2.389468367043064e-40, - 2.3955043871371577e-40, - 2.401533005050805e-40, - 2.407555276325851e-40, - 2.413572707257893e-40, - 2.4195864261730826e-40, - 2.425597485057013e-40, - 2.4316069035824074e-40, - 2.437614823216446e-40, - 2.443620087133122e-40, - 2.449621444847215e-40, - 2.4556174866409734e-40, - 2.461606696638185e-40, - 2.4675883240001764e-40, - 2.473564294076423e-40, - 2.479537290015639e-40, - 2.4855099942227933e-40, - 2.491485110758247e-40, - 2.4974653011221754e-40, - 2.5034517272194478e-40, - 2.5094437484254828e-40, - 2.515440378542799e-40, - 2.5214405810748694e-40, - 2.527443360134266e-40, - 2.5334483203308334e-40, - 2.5394560764116295e-40, - 2.5454675453939726e-40, - 2.551483414466016e-40, - 2.5575039518197673e-40, - 2.5635293447746292e-40, - 2.569559504142051e-40, - 2.5755947205187914e-40, - 2.581635515841117e-40, - 2.5876824047756133e-40, - 2.5937356755736823e-40, - 2.599795406936338e-40, - 2.605861619679097e-40, - 2.611933373674261e-40, - 2.618009769257315e-40, - 2.624089967157467e-40, - 2.6301731244893125e-40, - 2.6362582482844454e-40, - 2.642344505130152e-40, - 2.648431988941479e-40, - 2.6545209195767178e-40, - 2.6606115950109774e-40, - 2.6667043200022183e-40, - 2.672799434316136e-40, - 2.6788965787784105e-40, - 2.6849942823436106e-40, - 2.6910909986803905e-40, - 2.697185229656609e-40, - 2.703275492353815e-40, - 2.709360210345522e-40, - 2.7154385363904384e-40, - 2.7215108829883505e-40, - 2.727577942863919e-40, - 2.733640451222833e-40, - 2.739699146803464e-40, - 2.745754723863723e-40, - 2.751807601061214e-40, - 2.7578572882153997e-40, - 2.7639031767734754e-40, - 2.7699447525568366e-40, - 2.7759815396611915e-40, - 2.782013030603651e-40, - 2.7880386069634383e-40, - 2.7940582430844606e-40, - 2.8000720875449608e-40, - 2.806080285531744e-40, - 2.812082944179866e-40, - 2.818080150348492e-40, - 2.824072178239607e-40, - 2.8300596986378793e-40, - 2.836043660689217e-40, - 2.842025082360564e-40, - 2.8480049807721144e-40, - 2.853984225342781e-40, - 2.8599633299389485e-40, - 2.8659427958997026e-40, - 2.8719230956369093e-40, - 2.8779048979217265e-40, - 2.8838891863210027e-40, - 2.8898769748785857e-40, - 2.8958692488517926e-40, - 2.9018664379899194e-40, - 2.907868068810734e-40, - 2.913873510164842e-40, - 2.919882135759926e-40, - 2.9258933611773445e-40, - 2.931906630484118e-40, - 2.9379215269945196e-40, - 2.9439384817952555e-40, - 2.949958521401784e-40, - 2.9559826923285577e-40, - 2.962012041200219e-40, - 2.9680476164355252e-40, - 2.974090479448503e-40, - 2.9801413571551675e-40, - 2.9861999469630885e-40, - 2.9922656158441474e-40, - 2.9983376646408256e-40, - 3.004415355797457e-40, - 3.0104979513777918e-40, - 3.016584735094018e-40, - 3.022675295897066e-40, - 3.0287695201733615e-40, - 3.0348673150821056e-40, - 3.0409685791202473e-40, - 3.0470730462407506e-40, - 3.053180351524219e-40, - 3.0592901260366105e-40, - 3.065401859574635e-40, - 3.071514970483042e-40, - 3.0776289565711177e-40, - 3.0837433180228377e-40, - 3.089857543184337e-40, - 3.0959709711316432e-40, - 3.102082822988679e-40, - 3.1081924661139304e-40, - 3.1142995312086342e-40, - 3.1204038369446223e-40, - 3.126505343480042e-40, - 3.132604015221734e-40, - 3.1386998068309516e-40, - 3.1447925324350094e-40, - 3.150881903822035e-40, - 3.1569675708430696e-40, - 3.163049190638969e-40, - 3.1691265903758347e-40, - 3.1751998394568724e-40, - 3.1812690296627463e-40, - 3.1873342005803613e-40, - 3.1933951071255816e-40, - 3.1994512298414174e-40, - 3.205502007772062e-40, - 3.21154687647654e-40, - 3.2175853164576257e-40, - 3.2236169993891746e-40, - 3.2296417024291547e-40, - 3.235659622056976e-40, - 3.2416713834535428e-40, - 3.247677580101628e-40, - 3.2536787562428335e-40, - 3.259675454696719e-40, - 3.26566821675107e-40, - 3.2716575212722565e-40, - 3.2776435326931726e-40, - 3.2836261191277197e-40, - 3.2896051108265885e-40, - 3.2955803995080256e-40, - 3.301552056927426e-40, - 3.3075201990476373e-40, - 3.3134849432333395e-40, - 3.319446551711843e-40, - 3.325405574386108e-40, - 3.331362611419093e-40, - 3.3373182545795595e-40, - 3.34327307933115e-40, - 3.3492277555193993e-40, - 3.3551831340921847e-40, - 3.3611400546755796e-40, - 3.3670989631366107e-40, - 3.373059803527346e-40, - 3.379022288211283e-40, - 3.384986066799496e-40, - 3.3909507999238397e-40, - 3.396916151420274e-40, - 3.402881866981681e-40, - 3.408847919570456e-40, - 3.4148148356041e-40, - 3.4207834446805685e-40, - 3.4267545681689367e-40, - 3.4327289699836366e-40, - 3.43870740473156e-40, - 3.444690627130159e-40, - 3.4506793857086275e-40, - 3.4566742285474167e-40, - 3.462675079123936e-40, - 3.468681683982659e-40, - 3.474693786333767e-40, - 3.4807111179054923e-40, - 3.4867333638836766e-40, - 3.4927601572071066e-40, - 3.4987911265155253e-40, - 3.5048260153534616e-40, - 3.5108648936195868e-40, - 3.5169079705714416e-40, - 3.522955496066679e-40, - 3.5290077274063365e-40, - 3.5350649241661385e-40, - 3.5411273315289133e-40, - 3.5471951504139097e-40, - 3.5532684486317523e-40, - 3.55934702957066e-40, - 3.5654306720185476e-40, - 3.5715191353813663e-40, - 3.577612141771548e-40, - 3.5837094110056393e-40, - 3.5898106628328343e-40, - 3.5959156153815767e-40, - 3.6020242124284607e-40, - 3.6081366698705835e-40, - 3.6142532238216377e-40, - 3.620374112338969e-40, - 3.6264996059581057e-40, - 3.63262994401342e-40, - 3.6387653464208287e-40, - 3.6449059955655892e-40, - 3.6510516556461096e-40, - 3.657201557058567e-40, - 3.663354891115118e-40, - 3.6695108541723844e-40, - 3.675668643392605e-40, - 3.681827453781777e-40, - 3.6879864536659075e-40, - 3.694144820919681e-40, - 3.700302093413977e-40, - 3.706458369312345e-40, - 3.71261385154577e-40, - 3.718768809390439e-40, - 3.7249235337654964e-40, - 3.731078312029517e-40, - 3.737233431112736e-40, - 3.7433891676576615e-40, - 3.749545644414386e-40, - 3.755702679029801e-40, - 3.7618599954752486e-40, - 3.76801731698924e-40, - 3.7741743713901384e-40, - 3.780330853553926e-40, - 3.786486413634776e-40, - 3.792640700513045e-40, - 3.79879338614145e-40, - 3.8049442503133965e-40, - 3.811093131213052e-40, - 3.817239897096774e-40, - 3.8233844173088346e-40, - 3.829526565233072e-40, - 3.835666247906588e-40, - 3.841803488563749e-40, - 3.847938350660504e-40, - 3.854070950692501e-40, - 3.860201397794942e-40, - 3.866329753358775e-40, - 3.872455899938881e-40, - 3.878579606913208e-40, - 3.8847006319043225e-40, - 3.89081872001215e-40, - 3.896933623511623e-40, - 3.903045192695829e-40, - 3.909153313076558e-40, - 3.91525799613687e-40, - 3.9213592792617956e-40, - 3.927457198267334e-40, - 3.933551742217972e-40, - 3.939642840162681e-40, - 3.945730420387449e-40, - 3.951814411431588e-40, - 3.957894789106807e-40, - 3.963971761708227e-40, - 3.97004569298321e-40, - 3.976116956271543e-40, - 3.982185924913012e-40, - 3.988252972237776e-40, - 3.994318474535741e-40, - 4.000382822803597e-40, - 4.006446413269255e-40, - 4.012509621784564e-40, - 4.018572615156211e-40, - 4.024635388193976e-40, - 4.030697867630274e-40, - 4.036759934069074e-40, - 4.042821466424424e-40, - 4.04888233958463e-40, - 4.054942425882878e-40, - 4.061001682367052e-40, - 4.067060181821463e-40, - 4.073118151525141e-40, - 4.079175987820724e-40, - 4.085234092322774e-40, - 4.0912928280150175e-40, - 4.097352384020801e-40, - 4.103412894059578e-40, - 4.109474500206347e-40, - 4.1155373456509176e-40, - 4.121601597029186e-40, - 4.1276673980884555e-40, - 4.13373479710669e-40, - 4.139803837099508e-40, - 4.145874561130541e-40, - 4.151947012525806e-40, - 4.158021255317276e-40, - 4.164097394845e-40, - 4.170175541283267e-40, - 4.176255801200973e-40, - 4.182338351796576e-40, - 4.188423543179115e-40, - 4.194511638595801e-40, - 4.200602833152799e-40, - 4.206697320437391e-40, - 4.212795294030516e-40, - 4.218896950828203e-40, - 4.2250025481032476e-40, - 4.2311124742497884e-40, - 4.23722706240753e-40, - 4.243346199127376e-40, - 4.249469605752566e-40, - 4.255596997249138e-40, - 4.261727990812068e-40, - 4.267862118502227e-40, - 4.273998907983966e-40, - 4.2801378813496825e-40, - 4.2862785581975595e-40, - 4.292420455502128e-40, - 4.29856325545801e-40, - 4.304706866577318e-40, - 4.310851212220908e-40, - 4.316996215749637e-40, - 4.323141800517389e-40, - 4.329287892365513e-40, - 4.3354344289608475e-40, - 4.3415813522060115e-40, - 4.347728607437197e-40, - 4.353876226113137e-40, - 4.360024314594135e-40, - 4.366172970636287e-40, - 4.37232228648033e-40, - 4.378472353761375e-40, - 4.38462326411453e-40, - 4.390775109180954e-40, - 4.3969279740869215e-40, - 4.403081869025124e-40, - 4.409236739103667e-40, - 4.4153923551201516e-40, - 4.421548246235803e-40, - 4.427703902863791e-40, - 4.433858846721771e-40, - 4.440012764050366e-40, - 4.446165405705822e-40, - 4.452316523100016e-40, - 4.458465865771128e-40, - 4.464613178971644e-40, - 4.470758178178158e-40, - 4.476900637802022e-40, - 4.483040563468221e-40, - 4.4891779927598424e-40, - 4.495312963260035e-40, - 4.501445512949016e-40, - 4.507575723465489e-40, - 4.513703755170407e-40, - 4.519829777767824e-40, - 4.52595396758335e-40, - 4.532076492888142e-40, - 4.5381974393511875e-40, - 4.544316781383339e-40, - 4.550434440111884e-40, - 4.5565503343538434e-40, - 4.5626643829256616e-40, - 4.568776504643771e-40, - 4.574886618537531e-40, - 4.580994658079135e-40, - 4.587100575201033e-40, - 4.593204323408395e-40, - 4.599305894880924e-40, - 4.605405353376655e-40, - 4.6115027756121055e-40, - 4.617598230031952e-40, - 4.623691765032413e-40, - 4.629783425403363e-40, - 4.635873255934261e-40, - 4.641961301425577e-40, - 4.648047607233325e-40, - 4.654132235021468e-40, - 4.660215326776356e-40, - 4.666297114342981e-40, - 4.672377856148822e-40, - 4.678457810775498e-40, - 4.684537236804466e-40, - 4.6906163732328065e-40, - 4.696695348706179e-40, - 4.702774245493386e-40, - 4.7088531458702534e-40, - 4.714932135180211e-40, - 4.721011277618817e-40, - 4.72709048815624e-40, - 4.733169666795868e-40, - 4.739248790758179e-40, - 4.745327839744427e-40, - 4.7514067934558645e-40, - 4.757485631593713e-40, - 4.76356432989104e-40, - 4.769642768670985e-40, - 4.775720709831833e-40, - 4.781797906152846e-40, - 4.787874187492213e-40, - 4.7939495952704975e-40, - 4.800024239293835e-40, - 4.806098286894166e-40, - 4.8121720493945125e-40, - 4.818245865090472e-40, - 4.824320072277656e-40, - 4.830395009251676e-40, - 4.8364710143819194e-40, - 4.84254840737503e-40, - 4.848627384697324e-40, - 4.854707977929684e-40, - 4.86079003688966e-40, - 4.866873385302389e-40, - 4.872957846893004e-40, - 4.879043248673804e-40, - 4.885129473998683e-40, - 4.8912164560513445e-40, - 4.897304130061365e-40, - 4.903392431259145e-40, - 4.9094812949354455e-40, - 4.9155706629049845e-40, - 4.921660542588896e-40, - 4.927751011670489e-40, - 4.933842156992814e-40, - 4.9399340654291145e-40, - 4.94602682385263e-40, - 4.9521205191366e-40, - 4.9582152411522266e-40, - 4.964311108843839e-40, - 4.970408252301508e-40, - 4.976506801019708e-40, - 4.982606887794484e-40, - 4.988708603614697e-40, - 4.994811954337646e-40, - 5.000916930096569e-40, - 5.007023498442608e-40, - 5.013131623030348e-40, - 5.019241267515779e-40, - 5.025352395554887e-40, - 5.031464970803656e-40, - 5.037578957201093e-40, - 5.043694325070315e-40, - 5.049811045522835e-40, - 5.0559290890464646e-40, - 5.062048479942528e-40, - 5.06816925104517e-40, - 5.074291435193865e-40, - 5.08041506184813e-40, - 5.086540131601344e-40, - 5.092666627799842e-40, - 5.098794533394234e-40, - 5.104923831335134e-40, - 5.111054504589108e-40, - 5.117186537338961e-40, - 5.123319922926934e-40, - 5.129454649574005e-40, - 5.135590700956036e-40, - 5.141728060763685e-40, - 5.147866712675099e-40, - 5.154006640361428e-40, - 5.160147826978454e-40, - 5.1662902332897136e-40, - 5.1724337840792564e-40, - 5.178578400142342e-40, - 5.184724002132173e-40, - 5.190870509084851e-40, - 5.1970178771174744e-40, - 5.203166104430534e-40, - 5.209315207160366e-40, - 5.215465210328035e-40, - 5.221616138765762e-40, - 5.22776801731373e-40, - 5.233920870817304e-40, - 5.240074724121938e-40, - 5.2462296010064404e-40, - 5.252385517063097e-40, - 5.2585424855467755e-40, - 5.264700515751496e-40, - 5.270859541848111e-40, - 5.2770194725979946e-40, - 5.283180216757483e-40, - 5.289341682701272e-40, - 5.295503793903719e-40, - 5.301666493430116e-40, - 5.307829725220249e-40, - 5.313993433208003e-40, - 5.320157561326871e-40, - 5.326322053510451e-40, - 5.332486850495682e-40, - 5.33865185403563e-40, - 5.344816959270711e-40, - 5.350982065381162e-40, - 5.357147071547215e-40, - 5.363311876949112e-40, - 5.369476380767085e-40, - 5.375640478771955e-40, - 5.381804083161889e-40, - 5.387967140878971e-40, - 5.3941296005811725e-40, - 5.400291410927493e-40, - 5.406452525588619e-40, - 5.412612919417098e-40, - 5.4187725785274774e-40, - 5.424931507981364e-40, - 5.431089698919485e-40, - 5.437247140567889e-40, - 5.4434038221526226e-40, - 5.449559732899734e-40, - 5.45571486203527e-40, - 5.4618691948168775e-40, - 5.468022681231215e-40, - 5.474175264487236e-40, - 5.480326884331668e-40, - 5.486477434594953e-40, - 5.4926267625849996e-40, - 5.498774711329022e-40, - 5.504921125142758e-40, - 5.511065875250975e-40, - 5.51720884635311e-40, - 5.523349920587517e-40, - 5.52948898009256e-40, - 5.535625907006592e-40, - 5.541760583467968e-40, - 5.547892891550673e-40, - 5.554022708261645e-40, - 5.560149976953596e-40, - 5.566274768421664e-40, - 5.572397174167637e-40, - 5.57851728569331e-40, - 5.584635194500471e-40, - 5.590750992090906e-40, - 5.596864772842405e-40, - 5.602976645920625e-40, - 5.609086724876026e-40, - 5.615195123232864e-40, - 5.621301954515387e-40, - 5.627407331832345e-40, - 5.633511341814144e-40, - 5.639614002230399e-40, - 5.645715303145412e-40, - 5.651815228462536e-40, - 5.6579137615631465e-40, - 5.664010885828615e-40, - 5.670106584640314e-40, - 5.676200841379621e-40, - 5.682293639427163e-40, - 5.688384963512575e-40, - 5.69447481171301e-40, - 5.700563188662345e-40, - 5.706650105763091e-40, - 5.712735637331846e-40, - 5.7188199166468325e-40, - 5.724903083375928e-40, - 5.730985277666536e-40, - 5.737066631907939e-40, - 5.743147256884258e-40, - 5.749227260910915e-40, - 5.755306752303327e-40, - 5.761385839376907e-40, - 5.7674646304470765e-40, - 5.773543233825625e-40, - 5.779621753665254e-40, - 5.78570028971073e-40, - 5.791778908017187e-40, - 5.7978576495107245e-40, - 5.803936554046366e-40, - 5.810015661479121e-40, - 5.81609501166432e-40, - 5.822174645091517e-40, - 5.828254615637218e-40, - 5.834334988416124e-40, - 5.8404158286229084e-40, - 5.846497201452249e-40, - 5.85257917209882e-40, - 5.858661805641508e-40, - 5.8647451475213486e-40, - 5.870829244998167e-40, - 5.876914153917126e-40, - 5.88299990717073e-40, - 5.889086536832806e-40, - 5.895174074977168e-40, - 5.901262553677641e-40, - 5.90735200500917e-40, - 5.913442461054e-40, - 5.919533953014691e-40, - 5.925626518139897e-40, - 5.9317201985400245e-40, - 5.937815036494422e-40, - 5.943911125300934e-40, - 5.9500086150166e-40, - 5.956107594790707e-40, - 5.962208147919172e-40, - 5.968310394142353e-40, - 5.974414537278592e-40, - 5.980520795154109e-40, - 5.98662938559512e-40, - 5.992740526427836e-40, - 5.998854435471947e-40, - 6.004971330496745e-40, - 6.011091425960848e-40, - 6.0172148001594474e-40 - ], - "nc": [ - 4.383112715279966e-46, - 1.252510744034828e-43, - 4.226416453880698e-43, - 7.137858389732898e-43, - 9.896914500569536e-43, - 1.281919566751017e-42, - 1.5734257629023205e-42, - 1.858807774494621e-42, - 2.1471609950534734e-42, - 2.4322297156873545e-42, - 2.7203935821108555e-42, - 3.013647291317675e-42, - 3.313589226548486e-42, - 3.6105620439928455e-42, - 3.8980819933836224e-42, - 4.1863352540110304e-42, - 4.4641041538676366e-42, - 4.735497302053675e-42, - 5.003040134747025e-42, - 5.2632285916849545e-42, - 5.513524999172489e-42, - 5.768292370935319e-42, - 6.016692083787433e-42, - 6.259642390701719e-42, - 6.49930303017908e-42, - 6.73781604956519e-42, - 6.974665508585812e-42, - 7.208065015565089e-42, - 7.43869627441284e-42, - 7.669156516202607e-42, - 7.899456825405616e-42, - 8.127485847018649e-42, - 8.352042730850628e-42, - 8.57452146065029e-42, - 8.795749912038948e-42, - 9.016597312095886e-42, - 9.237230456093618e-42, - 9.457870518194755e-42, - 9.678215180517713e-42, - 9.897375514997534e-42, - 1.0114923123893562e-41, - 1.0331844319833083e-41, - 1.054894107699737e-41, - 1.0767604595473509e-41, - 1.0986222120259254e-41, - 1.120395278823954e-41, - 1.1419894305906467e-41, - 1.1634427107240778e-41, - 1.1848626302815838e-41, - 1.2063343984951752e-41, - 1.2278665722064968e-41, - 1.249359576589437e-41, - 1.2707221564903065e-41, - 1.2918759374433678e-41, - 1.31279290728844e-41, - 1.333481146843042e-41, - 1.3545406345210786e-41, - 1.375872940073036e-41, - 1.397258089675644e-41, - 1.4188149956776459e-41, - 1.440317240254111e-41, - 1.4614980901906797e-41, - 1.482298241978387e-41, - 1.5028330199210497e-41, - 1.5232751687868328e-41, - 1.5438174109184458e-41, - 1.5646079652819633e-41, - 1.5857136479622758e-41, - 1.6069982305890727e-41, - 1.6283168451346434e-41, - 1.6495393048313717e-41, - 1.670526850282446e-41, - 1.6912229142628544e-41, - 1.7117620421770136e-41, - 1.7322576956488402e-41, - 1.752821595481168e-41, - 1.773620001737461e-41, - 1.7947408870734098e-41, - 1.8161631327044254e-41, - 1.8377903334978023e-41, - 1.859510283423695e-41, - 1.8811964327990625e-41, - 1.9027362357562076e-41, - 1.9240373756661613e-41, - 1.9450713679786417e-41, - 1.9658941104790603e-41, - 1.9865775528513786e-41, - 2.0071308148184027e-41, - 2.0276151447397917e-41, - 2.0481489750025743e-41, - 2.068743752075808e-41, - 2.0892986761471092e-41, - 2.1098248998785287e-41, - 2.1304063130913784e-41, - 2.151079977869054e-41, - 2.1718498013687992e-41, - 2.1927021533802996e-41, - 2.2136494171732555e-41, - 2.2347093455870335e-41, - 2.255859403158184e-41, - 2.276994541416141e-41, - 2.298038828609795e-41, - 2.319020334200273e-41, - 2.339902451481448e-41, - 2.360679459240556e-41, - 2.381336553015682e-41, - 2.401896568165224e-41, - 2.4223767195940937e-41, - 2.4427935073220903e-41, - 2.463176349530152e-41, - 2.483513445745564e-41, - 2.503842411562965e-41, - 2.524246352628781e-41, - 2.544756880845822e-41, - 2.565326015241212e-41, - 2.5859406015051454e-41, - 2.606655065692987e-41, - 2.6274700561055583e-41, - 2.6483735977396296e-41, - 2.669411360178786e-41, - 2.6905570209116747e-41, - 2.711792582627251e-41, - 2.7331365666146345e-41, - 2.7545015145425547e-41, - 2.7758483328375734e-41, - 2.797227412945561e-41, - 2.818563206306596e-41, - 2.8397533681340534e-41, - 2.8608154491210385e-41, - 2.881767884414564e-41, - 2.9025480900599704e-41, - 2.923093644817396e-41, - 2.9434195992324485e-41, - 2.963617997933407e-41, - 2.983757802568746e-41, - 3.0038798907656846e-41, - 3.0240328079570674e-41, - 3.0442179699165074e-41, - 3.0644273132094893e-41, - 3.0847404007046423e-41, - 3.105244661594242e-41, - 3.1259347038316134e-41, - 3.146780005060592e-41, - 3.167751372030427e-41, - 3.188804194836633e-41, - 3.209912431335039e-41, - 3.231078458760866e-41, - 3.2522575543659016e-41, - 3.2733664608451193e-41, - 3.29440099134602e-41, - 3.3154148338740397e-41, - 3.3364000264164844e-41, - 3.357284107872798e-41, - 3.3780185058964366e-41, - 3.398612095843147e-41, - 3.419102370888208e-41, - 3.439560517358391e-41, - 3.4600461532908183e-41, - 3.4805501429676673e-41, - 3.5010374548764587e-41, - 3.521515865670713e-41, - 3.5420266462926236e-41, - 3.5626028104508494e-41, - 3.583269511444227e-41, - 3.604043699462269e-41, - 3.6249122073460335e-41, - 3.6458511101618094e-41, - 3.666849960115952e-41, - 3.6878953525961604e-41, - 3.708965351883609e-41, - 3.730051153965014e-41, - 3.751153999716037e-41, - 3.7722566390437585e-41, - 3.793309946944528e-41, - 3.814280488312189e-41, - 3.835201735270658e-41, - 3.85612393862412e-41, - 3.8770562951482463e-41, - 3.897953894599736e-41, - 3.9187709092617864e-41, - 3.939499443081157e-41, - 3.9601543321724414e-41, - 3.9807777471374973e-41, - 4.0014222426485153e-41, - 4.0221252936728845e-41, - 4.0428619882521274e-41, - 4.063580181091176e-41, - 4.0842521298339147e-41, - 4.104910797361172e-41, - 4.1256046964895876e-41, - 4.146357752282636e-41, - 4.1671564926984414e-41, - 4.187982193538753e-41, - 4.2088235006370466e-41, - 4.2296745483831407e-41, - 4.25052836811195e-41, - 4.2713761274485736e-41, - 4.2922145826472686e-41, - 4.3130487833917745e-41, - 4.333894655035953e-41, - 4.3547654727099754e-41, - 4.3756607328230203e-41, - 4.396562923163701e-41, - 4.417454989016692e-41, - 4.4383331347730494e-41, - 4.459202269206852e-41, - 4.4800645456236936e-41, - 4.500914256966523e-41, - 4.5217489633526896e-41, - 4.5425713984600123e-41, - 4.563390701703024e-41, - 4.5842114628628735e-41, - 4.605032463089496e-41, - 4.625846859969909e-41, - 4.646651018165986e-41, - 4.667447496194904e-41, - 4.688243290271724e-41, - 4.709045461413987e-41, - 4.72985489398737e-41, - 4.75067007802329e-41, - 4.771483902597688e-41, - 4.79229171592074e-41, - 4.813088763932399e-41, - 4.833875292927566e-41, - 4.854656473557048e-41, - 4.87543906044506e-41, - 4.896232116070833e-41, - 4.917038204843493e-41, - 4.937857166613349e-41, - 4.958681978821192e-41, - 4.979501164021746e-41, - 5.000305415232061e-41, - 5.02108825971918e-41, - 5.041853340208554e-41, - 5.062606615226738e-41, - 5.083354182700218e-41, - 5.104100835418691e-41, - 5.124845489841225e-41, - 5.14558548859889e-41, - 5.166315935142457e-41, - 5.187034397782833e-41, - 5.207746431483091e-41, - 5.228458578317916e-41, - 5.249182724832029e-41, - 5.269924142529535e-41, - 5.290685308630857e-41, - 5.311467248859803e-41, - 5.332268134145396e-41, - 5.353086521436493e-41, - 5.373920573525667e-41, - 5.394767418705751e-41, - 5.41562933579851e-41, - 5.436511145035441e-41, - 5.457419358224816e-41, - 5.478361719951324e-41, - 5.49933920891144e-41, - 5.520351593265473e-41, - 5.541396665381328e-41, - 5.562473606348592e-41, - 5.58358657214576e-41, - 5.604739810296202e-41, - 5.625932264448495e-41, - 5.647150397655195e-41, - 5.668376276130076e-41, - 5.689592926361874e-41, - 5.710796930718666e-41, - 5.732000619084643e-41, - 5.753219006424692e-41, - 5.774464949027788e-41, - 5.795733512172872e-41, - 5.817005503908546e-41, - 5.838260160755786e-41, - 5.859479403153975e-41, - 5.880661138572231e-41, - 5.901812366411388e-41, - 5.922940751769982e-41, - 5.944051955283113e-41, - 5.965141488779185e-41, - 5.9862015604005e-41, - 6.007224431247491e-41, - 6.028204202695972e-41, - 6.049146024418143e-41, - 6.070059562834899e-41, - 6.090954537797368e-41, - 6.111839745129705e-41, - 6.132715349107434e-41, - 6.153577610196055e-41, - 6.174422980126663e-41, - 6.195248079138471e-41, - 6.216054187914761e-41, - 6.236843618354762e-41, - 6.25761727695397e-41, - 6.278376098477749e-41, - 6.299119890349203e-41, - 6.319851732400957e-41, - 6.340579352498227e-41, - 6.361310625189997e-41, - 6.382053622492383e-41, - 6.402812743329602e-41, - 6.423584538060126e-41, - 6.444364718809067e-41, - 6.465148705103163e-41, - 6.48593108728619e-41, - 6.506710046898812e-41, - 6.52748511140984e-41, - 6.548255854278807e-41, - 6.56902287000358e-41, - 6.58978880146295e-41, - 6.610557218502444e-41, - 6.631331723612276e-41, - 6.652115993795007e-41, - 6.672913638415569e-41, - 6.693724665974577e-41, - 6.71454814998774e-41, - 6.735383154538337e-41, - 6.756227661557958e-41, - 6.77708104567671e-41, - 6.797946207280559e-41, - 6.81882622090098e-41, - 6.839724247400263e-41, - 6.860643295811334e-41, - 6.881580324000865e-41, - 6.902529841306286e-41, - 6.923486351487819e-41, - 6.944444650328333e-41, - 6.965403624262304e-41, - 6.986369252507608e-41, - 7.007348462591791e-41, - 7.028348167427383e-41, - 7.049373301038787e-41, - 7.0704218324859e-41, - 7.091487309794263e-41, - 7.112563048401134e-41, - 7.133642454812664e-41, - 7.154721836357891e-41, - 7.175801445824857e-41, - 7.196882210066399e-41, - 7.217965065498443e-41, - 7.239050786495454e-41, - 7.260137487211747e-41, - 7.281222696219573e-41, - 7.302304848602296e-41, - 7.323382388722647e-41, - 7.344454017681765e-41, - 7.365521990616055e-41, - 7.386590284862898e-41, - 7.407662452901796e-41, - 7.428742043906169e-41, - 7.449832310036397e-41, - 7.470931606784514e-41, - 7.492033294902032e-41, - 7.513130008244741e-41, - 7.534214374736341e-41, - 7.555279190479447e-41, - 7.576321502292961e-41, - 7.597344793320486e-41, - 7.618354329512404e-41, - 7.639355406544087e-41, - 7.660353296679037e-41, - 7.681351681441874e-41, - 7.702349882513727e-41, - 7.723344902674666e-41, - 7.744333628566458e-41, - 7.765312946973356e-41, - 7.786279822059825e-41, - 7.807232116330477e-41, - 7.828169236772318e-41, - 7.849090800023126e-41, - 7.869996422720681e-41, - 7.890885671191477e-41, - 7.911757575227955e-41, - 7.932610528429677e-41, - 7.953442778414555e-41, - 7.974252572623441e-41, - 7.995038186324013e-41, - 8.015799800612967e-41, - 8.036541270925596e-41, - 8.05726746121668e-41, - 8.077983276718913e-41, - 8.09869361897495e-41, - 8.119402883736423e-41, - 8.140111948544707e-41, - 8.160820085623261e-41, - 8.181526524266957e-41, - 8.202230493764623e-41, - 8.222931234926954e-41, - 8.243629311215185e-41, - 8.264327970801167e-41, - 8.285030960633973e-41, - 8.305742043499032e-41, - 8.326464982181764e-41, - 8.347203483463236e-41, - 8.367960350829928e-41, - 8.388736985683217e-41, - 8.409534328886226e-41, - 8.43035331452278e-41, - 8.451194876631129e-41, - 8.472059849391951e-41, - 8.492948625342979e-41, - 8.513862145561079e-41, - 8.534801564779366e-41, - 8.555768038093411e-41, - 8.576762724078432e-41, - 8.597786927280976e-41, - 8.618842133876769e-41, - 8.639929086377663e-41, - 8.66104839078383e-41, - 8.682200653095443e-41, - 8.703386477255695e-41, - 8.724605501556551e-41, - 8.745854643067266e-41, - 8.767129994687798e-41, - 8.788427599947561e-41, - 8.809743502375969e-41, - 8.831073748584265e-41, - 8.852415491783645e-41, - 8.873767951966805e-41, - 8.895129386819556e-41, - 8.916497892898674e-41, - 8.937871569015881e-41, - 8.959248513838035e-41, - 8.980626198986888e-41, - 9.002000954767027e-41, - 9.023370856961707e-41, - 9.044734305915905e-41, - 9.066089701972131e-41, - 9.087435444423598e-41, - 9.108769966137076e-41, - 9.130091604290285e-41, - 9.151397489267048e-41, - 9.172684415564054e-41, - 9.193949177677937e-41, - 9.215188570105322e-41, - 9.236399514737092e-41, - 9.257580591020691e-41, - 9.278732722637227e-41, - 9.299857596766485e-41, - 9.320956908169597e-41, - 9.342032351607699e-41, - 9.363085620722128e-41, - 9.384118323835301e-41, - 9.405131812103113e-41, - 9.426127253928225e-41, - 9.44710580454598e-41, - 9.468068617532403e-41, - 9.489016845979245e-41, - 9.509951588739606e-41, - 9.530873690383854e-41, - 9.551784240857912e-41, - 9.57268444218926e-41, - 9.593575496434058e-41, - 9.61445860564862e-41, - 9.635334974285124e-41, - 9.656205945111926e-41, - 9.677073363534195e-41, - 9.697939497447667e-41, - 9.718806643667895e-41, - 9.739677099010414e-41, - 9.76055316029077e-41, - 9.781437182933565e-41, - 9.802332051514927e-41, - 9.823240210822033e-41, - 9.844163683369507e-41, - 9.865104487703909e-41, - 9.886064642371786e-41, - 9.907046165919712e-41, - 9.928050640484115e-41, - 9.949077661495387e-41, - 9.970126200297778e-41, - 9.991195206888186e-41, - 1.0012283631429602e-40, - 1.0033390425241963e-40, - 1.0054514540647167e-40, - 1.007565523286262e-40, - 1.0096812407165424e-40, - 1.0117985775291165e-40, - 1.0139175015242617e-40, - 1.016037980502254e-40, - 1.0181599822633703e-40, - 1.0202834745170462e-40, - 1.0224084063444443e-40, - 1.0245346607968483e-40, - 1.026662058481277e-40, - 1.0287904116070623e-40, - 1.0309195323835352e-40, - 1.0330492330200292e-40, - 1.03517932568621e-40, - 1.0373096095097994e-40, - 1.0394398884767186e-40, - 1.041570044134894e-40, - 1.0436999694263306e-40, - 1.0458295573502267e-40, - 1.0479587009059877e-40, - 1.0500872930937358e-40, - 1.0522152468931238e-40, - 1.0543425374658097e-40, - 1.0564691238749285e-40, - 1.0585949587926136e-40, - 1.0607199948957772e-40, - 1.0628441848371513e-40, - 1.0649674811806983e-40, - 1.067089830319591e-40, - 1.0692111208512706e-40, - 1.0713311470154201e-40, - 1.0734496751435511e-40, - 1.075566471741382e-40, - 1.0776813033146288e-40, - 1.07979393636901e-40, - 1.0819041396999506e-40, - 1.084011757021729e-40, - 1.0861168748877495e-40, - 1.0882197527011423e-40, - 1.0903206563460493e-40, - 1.092419851706556e-40, - 1.094517604666749e-40, - 1.0966141811107148e-40, - 1.0987098440123723e-40, - 1.1008047869020852e-40, - 1.1028989817433181e-40, - 1.1049923502127546e-40, - 1.1070848141945168e-40, - 1.109176295595077e-40, - 1.1112667163209436e-40, - 1.1133559976426721e-40, - 1.1154440451614119e-40, - 1.117530888146511e-40, - 1.1196167227586653e-40, - 1.1217017541737989e-40, - 1.1237861875672582e-40, - 1.125870228111988e-40, - 1.1279540809189775e-40, - 1.1300379572231136e-40, - 1.1321220929672226e-40, - 1.1342065230406587e-40, - 1.1362911712851761e-40, - 1.1383759607977076e-40, - 1.1404608146751855e-40, - 1.142545656014543e-40, - 1.144630407912712e-40, - 1.146714984974518e-40, - 1.1487993265335062e-40, - 1.150883622178766e-40, - 1.1529681288828905e-40, - 1.1550531034895652e-40, - 1.1571388028424732e-40, - 1.1592254837852978e-40, - 1.161313403158692e-40, - 1.1634028024488543e-40, - 1.1654937930321907e-40, - 1.1675862215155783e-40, - 1.169679884948654e-40, - 1.1717745806595408e-40, - 1.1738701060029459e-40, - 1.1759662583388727e-40, - 1.1780628350268745e-40, - 1.180159629042052e-40, - 1.1822564646855468e-40, - 1.1843533174764077e-40, - 1.1864501915503049e-40, - 1.1885470901127158e-40, - 1.1906440163691171e-40, - 1.1927409735249836e-40, - 1.1948379647568542e-40, - 1.1969350087713704e-40, - 1.1990322002595892e-40, - 1.2011296374975539e-40, - 1.203227415493675e-40, - 1.2053256311517457e-40, - 1.207424381387182e-40, - 1.2095237631154003e-40, - 1.2116238732518156e-40, - 1.2137248011904395e-40, - 1.2158265399337636e-40, - 1.2179289636480707e-40, - 1.2200319080083657e-40, - 1.2221352091805214e-40, - 1.2242387033989894e-40, - 1.226342226898219e-40, - 1.2284456159126614e-40, - 1.2305487071680277e-40, - 1.2326513821237411e-40, - 1.2347536283452789e-40, - 1.2368554880292447e-40, - 1.2389570017660887e-40, - 1.2410582082115368e-40, - 1.2431591459620797e-40, - 1.2452598535209978e-40, - 1.2473603693833343e-40, - 1.2494607270372537e-40, - 1.2515609228134957e-40, - 1.2536609535513231e-40, - 1.2557608284499264e-40, - 1.2578605619666724e-40, - 1.259960169009942e-40, - 1.2620596644881158e-40, - 1.264159063309575e-40, - 1.2662583804525756e-40, - 1.2683576567228528e-40, - 1.2704569793519816e-40, - 1.2725563970903405e-40, - 1.2746559471392358e-40, - 1.2767556637396003e-40, - 1.2788555810558096e-40, - 1.2809557332522408e-40, - 1.2830561544932708e-40, - 1.2851568777329758e-40, - 1.2872578906595771e-40, - 1.2893591425406186e-40, - 1.2914606060018094e-40, - 1.2935622601393715e-40, - 1.2956640865280851e-40, - 1.297766066765754e-40, - 1.299868182450181e-40, - 1.3019704151791697e-40, - 1.304072748940367e-40, - 1.306175214655509e-40, - 1.3082778773332936e-40, - 1.3103807938535205e-40, - 1.312484014697311e-40, - 1.3145875871133034e-40, - 1.3166915583209653e-40, - 1.3187959755741352e-40, - 1.3209008861594418e-40, - 1.323006336547585e-40, - 1.325112356699954e-40, - 1.327218973442809e-40, - 1.329326226335025e-40, - 1.3314341609383012e-40, - 1.3335428268587264e-40, - 1.3356522737983607e-40, - 1.337762551459263e-40, - 1.339873709543493e-40, - 1.3419857974264747e-40, - 1.3440988492780206e-40, - 1.3462128409479286e-40, - 1.3483276912322247e-40, - 1.3504433124820164e-40, - 1.3525596138487885e-40, - 1.3546765042171218e-40, - 1.3567938924715986e-40, - 1.3589116874968012e-40, - 1.3610297981792475e-40, - 1.3631481355381065e-40, - 1.3652666455572486e-40, - 1.3673853639211719e-40, - 1.3695043436926496e-40, - 1.3716236398955791e-40, - 1.3737433081610473e-40, - 1.375863404121893e-40, - 1.3779839834109578e-40, - 1.3801051016610835e-40, - 1.3822268142205947e-40, - 1.3843491679637182e-40, - 1.3864721441475444e-40, - 1.3885956827988635e-40, - 1.3907197219622243e-40, - 1.3928441979926353e-40, - 1.394969047131667e-40, - 1.3970942056195538e-40, - 1.3992196096661457e-40, - 1.4013451954555288e-40, - 1.4034709013752471e-40, - 1.4055966854732224e-40, - 1.4077225463276411e-40, - 1.409848489659506e-40, - 1.4119745227127689e-40, - 1.414100653588171e-40, - 1.4162268903960125e-40, - 1.4183532412465958e-40, - 1.4204797142502222e-40, - 1.4226063170423975e-40, - 1.4247330428550885e-40, - 1.4268598474158489e-40, - 1.4289866588455874e-40, - 1.4311134031857398e-40, - 1.4332400039799386e-40, - 1.4353663839222915e-40, - 1.4374924657062022e-40, - 1.439618172025074e-40, - 1.4417434255723086e-40, - 1.4438681511352298e-40, - 1.4459923048047878e-40, - 1.4481159028473641e-40, - 1.4502389928110446e-40, - 1.4523616238269705e-40, - 1.454483848816646e-40, - 1.4566057218794594e-40, - 1.4587272971129125e-40, - 1.460848628614503e-40, - 1.46296977048173e-40, - 1.465090775766968e-40, - 1.4672116819491086e-40, - 1.4693324855828729e-40, - 1.4714531593932345e-40, - 1.4735736751185235e-40, - 1.4756940014333032e-40, - 1.4778141056561799e-40, - 1.4799339550997269e-40, - 1.48205351707651e-40, - 1.4841727588970478e-40, - 1.4862916476994633e-40, - 1.4884101479273147e-40, - 1.4905282401813163e-40, - 1.4926459248724674e-40, - 1.4947632034656482e-40, - 1.496880080260955e-40, - 1.498996562087777e-40, - 1.5011126558642033e-40, - 1.5032283685083223e-40, - 1.5053437069382231e-40, - 1.5074586782224752e-40, - 1.5095733076748015e-40, - 1.5116876447539329e-40, - 1.5138017188171069e-40, - 1.5159155561528716e-40, - 1.5180291814665547e-40, - 1.5201426150658217e-40, - 1.522255876500924e-40, - 1.5243689853221112e-40, - 1.5264819610796361e-40, - 1.5285948233237488e-40, - 1.5307075847292259e-40, - 1.5328202145727282e-40, - 1.534932694744797e-40, - 1.537045021843538e-40, - 1.5391571926456916e-40, - 1.5412692059897394e-40, - 1.5433810625600017e-40, - 1.5454927631131438e-40, - 1.5476043084082561e-40, - 1.5497156992044303e-40, - 1.551826936385952e-40, - 1.5539380361501349e-40, - 1.5560490298988748e-40, - 1.5581599211198955e-40, - 1.5602707093105757e-40, - 1.5623813937800829e-40, - 1.5644919725003605e-40, - 1.566602442864422e-40, - 1.5687128022629598e-40, - 1.5708230480866658e-40, - 1.5729331777261616e-40, - 1.5750431881242713e-40, - 1.5771530674557918e-40, - 1.5792628103071783e-40, - 1.5813724267354663e-40, - 1.5834819275221943e-40, - 1.5855913237070372e-40, - 1.5877006276349332e-40, - 1.5898098520624278e-40, - 1.5919190097462207e-40, - 1.5940281134430103e-40, - 1.5961371759094984e-40, - 1.5982462102587998e-40, - 1.6003552339908865e-40, - 1.6024642620121801e-40, - 1.6045733046552908e-40, - 1.6066823721304489e-40, - 1.608791474695113e-40, - 1.6109006228962694e-40, - 1.6130098273866185e-40, - 1.6151190988190138e-40, - 1.6172284478463082e-40, - 1.6193378851213587e-40, - 1.6214474206511077e-40, - 1.6235570542592377e-40, - 1.6256667842895e-40, - 1.6277766151265798e-40, - 1.6298865513702668e-40, - 1.6319965974280752e-40, - 1.6341067553507995e-40, - 1.63621702560921e-40, - 1.6383274086551605e-40, - 1.6404379049555156e-40, - 1.6425485149783351e-40, - 1.6446592394533174e-40, - 1.6467700912229438e-40, - 1.6488810838250068e-40, - 1.6509922063928522e-40, - 1.6531034458898875e-40, - 1.6552147892949201e-40, - 1.6573262250937269e-40, - 1.6594377445245027e-40, - 1.6615493391186312e-40, - 1.663661000407497e-40, - 1.6657727199224832e-40, - 1.6678844891949734e-40, - 1.6699962951314222e-40, - 1.672108116202167e-40, - 1.674219973062339e-40, - 1.6763318993023096e-40, - 1.6784439285127991e-40, - 1.6805560941276036e-40, - 1.6826684280836034e-40, - 1.684780961487604e-40, - 1.6868937254375645e-40, - 1.6890067510314451e-40, - 1.691120069367208e-40, - 1.6932337115585924e-40, - 1.695347708476021e-40, - 1.6974620667884215e-40, - 1.6995767626595394e-40, - 1.7016917703658729e-40, - 1.7038070642219275e-40, - 1.7059226187051018e-40, - 1.7080384085585478e-40, - 1.7101544085871651e-40, - 1.7122705935958539e-40, - 1.7143869383895154e-40, - 1.7165034177730499e-40, - 1.7186200082479044e-40, - 1.720736701954096e-40, - 1.72285350235902e-40, - 1.7249704148425475e-40, - 1.727087444806429e-40, - 1.7292045976526894e-40, - 1.7313218790424827e-40, - 1.7334392953757992e-40, - 1.7355568531834475e-40, - 1.7376745589673311e-40, - 1.7397924191346709e-40, - 1.741910440073333e-40, - 1.7440286249981179e-40, - 1.746146960230862e-40, - 1.7482654453642836e-40, - 1.750384088633535e-40, - 1.7525028983003817e-40, - 1.754621882626577e-40, - 1.756741049726585e-40, - 1.7588604071999752e-40, - 1.7609799625338674e-40, - 1.7630997232153817e-40, - 1.7652196967316388e-40, - 1.7673398905697583e-40, - 1.7694603148901986e-40, - 1.7715809960594532e-40, - 1.7737019361313947e-40, - 1.7758231208715945e-40, - 1.7779445359379183e-40, - 1.7800661669882288e-40, - 1.7821879996803489e-40, - 1.7843100196717766e-40, - 1.7864322126198611e-40, - 1.788554564181949e-40, - 1.7906770600153887e-40, - 1.7927996857775264e-40, - 1.7949224261109584e-40, - 1.7970452489091829e-40, - 1.799168139516687e-40, - 1.8012911128310086e-40, - 1.8034141848115485e-40, - 1.8055373714177067e-40, - 1.807660688598095e-40, - 1.8097841523726565e-40, - 1.8119077789382811e-40, - 1.8140315845072563e-40, - 1.8161555852918652e-40, - 1.818279797504394e-40, - 1.8204042373663699e-40, - 1.8225289257747181e-40, - 1.8246538807166406e-40, - 1.8267790799421647e-40, - 1.8289044939414115e-40, - 1.8310300932045047e-40, - 1.833155848221565e-40, - 1.8352817293932408e-40, - 1.8374077063377912e-40, - 1.8395337482690794e-40, - 1.8416598243975814e-40, - 1.8437859039739845e-40, - 1.845911956478728e-40, - 1.84803795159914e-40, - 1.850163862294271e-40, - 1.8522896814295785e-40, - 1.854415418186093e-40, - 1.8565410823400895e-40, - 1.8586666836678404e-40, - 1.8607922319456196e-40, - 1.862917737274714e-40, - 1.8650432113127597e-40, - 1.8671686661827043e-40, - 1.8692941140075824e-40, - 1.8714195669104263e-40, - 1.873545037014268e-40, - 1.875670535403159e-40, - 1.8777960635459063e-40, - 1.87992161206762e-40, - 1.8820471677594797e-40, - 1.8841727167501203e-40, - 1.886298245137461e-40, - 1.888423739019421e-40, - 1.8905491841755194e-40, - 1.892674564913447e-40, - 1.894799865115901e-40, - 1.896925068665538e-40, - 1.899050159445012e-40, - 1.90117512133698e-40, - 1.903299938200153e-40, - 1.905424594165164e-40, - 1.9075490767784923e-40, - 1.9096733752076875e-40, - 1.9117974786291374e-40, - 1.9139213762192286e-40, - 1.9160450571543493e-40, - 1.918168510907185e-40, - 1.9202917297697495e-40, - 1.9224147075942787e-40, - 1.924537438249514e-40, - 1.9266599156041988e-40, - 1.928782133527077e-40, - 1.9309040865797816e-40, - 1.9330257780503073e-40, - 1.935147210779864e-40, - 1.937268382744782e-40, - 1.939389291814434e-40, - 1.9415099358581914e-40, - 1.943630312745428e-40, - 1.9457504203762553e-40, - 1.947870257952709e-40, - 1.949989826432631e-40, - 1.952109126897939e-40, - 1.954228160430547e-40, - 1.9563469274329828e-40, - 1.958465418863466e-40, - 1.9605836144484244e-40, - 1.9627014920173743e-40, - 1.9648190399054347e-40, - 1.9669362476198474e-40, - 1.969053104667858e-40, - 1.9711696005567102e-40, - 1.973285724793647e-40, - 1.9754014665944672e-40, - 1.9775168130755634e-40, - 1.9796317504333003e-40, - 1.981746264860131e-40, - 1.98386034254851e-40, - 1.9859739696908912e-40, - 1.988087133353154e-40, - 1.9901998287234693e-40, - 1.9923120538370175e-40, - 1.9944238058525104e-40, - 1.996535090452113e-40, - 1.9986459354607606e-40, - 2.0007563722486383e-40, - 2.002866432185931e-40, - 2.0049761465915627e-40, - 2.0070855465972854e-40, - 2.0091946632921425e-40, - 2.011303527765178e-40, - 2.0134121711054336e-40, - 2.015520624401954e-40, - 2.01762891689146e-40, - 2.0197370710762503e-40, - 2.0218451124417828e-40, - 2.0239530678063244e-40, - 2.0260609639881404e-40, - 2.028168827805501e-40, - 2.0302766860766743e-40, - 2.032384565619973e-40, - 2.0344924934663317e-40, - 2.0366004860677655e-40, - 2.038708540270005e-40, - 2.0408166510182467e-40, - 2.042924813257691e-40, - 2.0450330219335854e-40, - 2.0471412744025413e-40, - 2.0492495716862136e-40, - 2.05135789837513e-40, - 2.0534662349579294e-40, - 2.055574561923252e-40, - 2.0576828597597373e-40, - 2.0597911089560246e-40, - 2.061899290000753e-40, - 2.064007383358026e-40, - 2.066115369344535e-40, - 2.068223228222174e-40, - 2.0703309402527472e-40, - 2.0724384856980574e-40, - 2.074545844821908e-40, - 2.076652998660761e-40, - 2.078759931528931e-40, - 2.080866671252236e-40, - 2.0829732619318804e-40, - 2.0850797476841753e-40, - 2.087186172625433e-40, - 2.089292580871964e-40, - 2.091399016540079e-40, - 2.09350552373221e-40, - 2.0956121461601185e-40, - 2.097718927100508e-40, - 2.0998259098072998e-40, - 2.101933137534413e-40, - 2.1040406535357684e-40, - 2.1061485020799148e-40, - 2.1082567469304186e-40, - 2.1103654079121712e-40, - 2.112474445047821e-40, - 2.1145838161319533e-40, - 2.11669347891547e-40, - 2.11880339008896e-40 - ] - }, - "nutau": { - "cc": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.4451806478469623e-50, - 4.889034848457643e-50, - 5.895530488377352e-50, - 1.7875711519139226e-49, - 2.363914167819654e-49, - 2.6051232056689497e-49, - 1.1648108636922331e-48, - 2.0843367067797446e-48, - 2.3989359237969016e-48, - 2.6134202731283354e-48, - 4.927763174057163e-48, - 6.887281868845913e-48, - 7.646994065334608e-48, - 4.99988861219635e-43, - 8.203641552445331e-43, - 1.0481653524354321e-42, - 1.236938147852081e-42, - 1.4096262495682515e-42, - 1.5764328188823732e-42, - 1.7447178759080853e-42, - 2.0022826758050213e-42, - 2.3960090258203565e-42, - 2.891018142371218e-42, - 3.409374010752868e-42, - 3.877877691492092e-42, - 4.3045925760405336e-42, - 4.706708685383169e-42, - 5.091262086041482e-42, - 5.466943111703495e-42, - 5.846218254138093e-42, - 6.241892842947387e-42, - 6.66389357049945e-42, - 7.107157218622544e-42, - 7.559619368048799e-42, - 8.022068625084812e-42, - 8.502795421748806e-42, - 9.003397151318569e-42, - 9.521298450550376e-42, - 1.0047096581633844e-41, - 1.056394788457099e-41, - 1.1063894128405666e-41, - 1.1554525640997034e-41, - 1.2044242200515796e-41, - 1.2532775749870604e-41, - 1.3019452566448568e-41, - 1.3504633290918735e-41, - 1.399049437838084e-41, - 1.4478525837637352e-41, - 1.4969897877309234e-41, - 1.5466816637285398e-41, - 1.5969407672599084e-41, - 1.6476209237337925e-41, - 1.6986495053740981e-41, - 1.7499674295564342e-41, - 1.8016684496630867e-41, - 1.8539738618225243e-41, - 1.906905747475409e-41, - 1.960370362514351e-41, - 2.0142240125027152e-41, - 2.0683157220845294e-41, - 2.1225692340854868e-41, - 2.17732293460012e-41, - 2.2343950793254264e-41, - 2.2902693755866053e-41, - 2.346163563356625e-41, - 2.402319319359591e-41, - 2.4588397748191923e-41, - 2.515733136825327e-41, - 2.572847129516121e-41, - 2.631395037113404e-41, - 2.6895183190777056e-41, - 2.7472816374760635e-41, - 2.805026532001047e-41, - 2.8630662107924306e-41, - 2.921634764967377e-41, - 2.9808850045117743e-41, - 3.040685426265495e-41, - 3.1008069782338433e-41, - 3.1608596414569826e-41, - 3.2211891485628593e-41, - 3.28144444182161e-41, - 3.3414720889555546e-41, - 3.40247558355064e-41, - 3.4636274233634077e-41, - 3.5251728160365493e-41, - 3.58714823140581e-41, - 3.6501970179902213e-41, - 3.71343085039708e-41, - 3.7774402315806783e-41, - 3.8407737410626455e-41, - 3.904861202826774e-41, - 3.969057436351982e-41, - 4.033215555045616e-41, - 4.097604076871734e-41, - 4.161938847326255e-41, - 4.2267605497591523e-41, - 4.2921125202680304e-41, - 4.357932917573529e-41, - 4.423957158641529e-41, - 4.490740072399357e-41, - 4.5576234561252887e-41, - 4.624513090161398e-41, - 4.691374011690417e-41, - 4.758146389205421e-41, - 4.825591916364183e-41, - 4.892852595634674e-41, - 4.960408699203156e-41, - 5.028123778105922e-41, - 5.096238320871811e-41, - 5.164862674972191e-41, - 5.234150353990935e-41, - 5.303622242911996e-41, - 5.373837181222756e-41, - 5.445075389836427e-41, - 5.516648671952787e-41, - 5.588338268164515e-41, - 5.660575883400205e-41, - 5.73317156637932e-41, - 5.805371607429451e-41, - 5.877535165631856e-41, - 5.95007012022852e-41, - 6.022605108403665e-41, - 6.095082956224085e-41, - 6.167563236136601e-41, - 6.239986484080149e-41, - 6.312636071948521e-41, - 6.38551991226817e-41, - 6.458101838836938e-41, - 6.53076573937202e-41, - 6.604177156685381e-41, - 6.677471772075835e-41, - 6.750768537772116e-41, - 6.824449373523588e-41, - 6.898192866172492e-41, - 6.972468155182292e-41, - 7.046830956491097e-41, - 7.121630750304186e-41, - 7.196798565407433e-41, - 7.272121213701698e-41, - 7.348567726618731e-41, - 7.425355273214751e-41, - 7.502173426982472e-41, - 7.579557005718696e-41, - 7.657769313972739e-41, - 7.735863195212652e-41, - 7.813676676364184e-41, - 7.891591344754595e-41, - 7.969350157667874e-41, - 8.046935252560732e-41, - 8.124402999793444e-41, - 8.201823952137678e-41, - 8.279345866902369e-41, - 8.356917828855476e-41, - 8.434419951526338e-41, - 8.512148442392217e-41, - 8.59041276402037e-41, - 8.668997852201874e-41, - 8.748001210529707e-41, - 8.827626720155786e-41, - 8.907374666665457e-41, - 8.987197337085661e-41, - 9.067284209044846e-41, - 9.147402596012711e-41, - 9.227822636098457e-41, - 9.308723784026523e-41, - 9.3892703386554e-41, - 9.469629336459217e-41, - 9.550260530385095e-41, - 9.630353859431364e-41, - 9.710093943850324e-41, - 9.790277769959983e-41, - 9.870627730575538e-41, - 9.95097802298751e-41, - 1.003149739104849e-40, - 1.0112439035619283e-40, - 1.01940046551419e-40, - 1.0276223262795157e-40, - 1.03587334294226e-40, - 1.0441391240682177e-40, - 1.0524662944847036e-40, - 1.0608350148351905e-40, - 1.0692023892356555e-40, - 1.077572188899976e-40, - 1.0859421898703387e-40, - 1.0943116235894616e-40, - 1.1026866600007699e-40, - 1.1110720300544595e-40, - 1.1194698360570195e-40, - 1.127884194309683e-40, - 1.136309982498007e-40, - 1.1447163327795354e-40, - 1.1531013836126318e-40, - 1.1615156857395776e-40, - 1.1699565154178708e-40, - 1.1783878085272698e-40, - 1.1868227390442831e-40, - 1.1952797629110728e-40, - 1.2037481853263595e-40, - 1.212218251270235e-40, - 1.2206864707638413e-40, - 1.2291499652526655e-40, - 1.2376147099154425e-40, - 1.2461127947139037e-40, - 1.2546612592626038e-40, - 1.2632200479092077e-40, - 1.2717824192611836e-40, - 1.2803981200931344e-40, - 1.2890792593263822e-40, - 1.2977994931177454e-40, - 1.3065416260835218e-40, - 1.315291078179144e-40, - 1.324050270314644e-40, - 1.3328389250566642e-40, - 1.3416424393485669e-40, - 1.3504177001958958e-40, - 1.359165046473494e-40, - 1.3678980936571211e-40, - 1.3765936487911615e-40, - 1.3852414878233262e-40, - 1.3938706857576202e-40, - 1.4024895495890083e-40, - 1.4110820933089812e-40, - 1.4196526564055868e-40, - 1.4282343867789894e-40, - 1.4368395960701842e-40, - 1.4454511506761754e-40, - 1.4540731402878578e-40, - 1.4627277341556374e-40, - 1.4714214402175493e-40, - 1.480153657728673e-40, - 1.4889289613959118e-40, - 1.4977407834271233e-40, - 1.506592685652394e-40, - 1.5155112358287724e-40, - 1.5244971568554711e-40, - 1.5335230599081037e-40, - 1.5425694971926458e-40, - 1.551628364154595e-40, - 1.5607008940292315e-40, - 1.5697957262895636e-40, - 1.5789105080652326e-40, - 1.5880225954744562e-40, - 1.597108068120949e-40, - 1.6061552818936013e-40, - 1.6151640727503222e-40, - 1.6241472698668797e-40, - 1.6331187424027628e-40, - 1.642072424006866e-40, - 1.6509880056881259e-40, - 1.6598727420034924e-40, - 1.6687602688142683e-40, - 1.6776625091326286e-40, - 1.6865670222886624e-40, - 1.6954786598169401e-40, - 1.7044201549023662e-40, - 1.7133929127237868e-40, - 1.7223656523423332e-40, - 1.7313235983476e-40, - 1.7403099895637477e-40, - 1.7493659623452905e-40, - 1.7584584971417538e-40, - 1.7675331473944628e-40, - 1.776589277468333e-40, - 1.7856595854975863e-40, - 1.7947525252118144e-40, - 1.8038454217348501e-40, - 1.8129248950829519e-40, - 1.8220095125304804e-40, - 1.8311173007479146e-40, - 1.8402422502209674e-40, - 1.8493703209485137e-40, - 1.8584999424566457e-40, - 1.8676456884202895e-40, - 1.876816529971782e-40, - 1.886009063156277e-40, - 1.89522602317597e-40, - 1.9044746054132226e-40, - 1.9137552976789034e-40, - 1.9230561268911737e-40, - 1.9323580713168965e-40, - 1.9416500882538367e-40, - 1.9509494338118026e-40, - 1.9602799475015983e-40, - 1.9696353394949507e-40, - 1.9789822323040925e-40, - 1.988302989084305e-40, - 1.9976163688917575e-40, - 2.0069400999277687e-40, - 2.0162653064095342e-40, - 2.025574480955733e-40, - 2.0348648431801566e-40, - 2.0441518091035545e-40, - 2.0534482087919826e-40, - 2.062749591720082e-40, - 2.0720492105178076e-40, - 2.0813517634568186e-40, - 2.0906698429887835e-40, - 2.1000103536003472e-40, - 2.109369687685567e-40, - 2.118746504924605e-40, - 2.1281421345956208e-40, - 2.1375602349173552e-40, - 2.147005187978873e-40, - 2.1564699526302397e-40, - 2.165938938558884e-40, - 2.1754000833596384e-40, - 2.184856103169539e-40, - 2.194312829380092e-40, - 2.2037706096026315e-40, - 2.2132239604860553e-40, - 2.2226681530973943e-40, - 2.2321006894494454e-40, - 2.2415170414718864e-40, - 2.25091426154218e-40, - 2.260297723290622e-40, - 2.2696748313059422e-40, - 2.279050282166324e-40, - 2.2884251591315064e-40, - 2.2978003355346337e-40, - 2.3071783777849298e-40, - 2.3165651167297934e-40, - 2.325966501728496e-40, - 2.3353848846741428e-40, - 2.344819996360195e-40, - 2.3542736332191895e-40, - 2.3637554263741295e-40, - 2.3732768532026803e-40, - 2.3828348742535095e-40, - 2.3924094972230542e-40, - 2.401982046745319e-40, - 2.4115561754825216e-40, - 2.4211473351295597e-40, - 2.430765837230939e-40, - 2.440401946154881e-40, - 2.450039914598351e-40, - 2.4596697483706845e-40, - 2.469294634524299e-40, - 2.4789194938208417e-40, - 2.4885473760990168e-40, - 2.498177792365775e-40, - 2.507808896162841e-40, - 2.517436147514959e-40, - 2.5270522744331534e-40, - 2.5366509099120802e-40, - 2.5462314783287883e-40, - 2.5558025562361806e-40, - 2.5653739689475177e-40, - 2.5749497559711795e-40, - 2.584525690666804e-40, - 2.5940967462808794e-40, - 2.6036606552288e-40, - 2.6132199204143696e-40, - 2.622778596660936e-40, - 2.6323414419794864e-40, - 2.6419076884815655e-40, - 2.651475252906355e-40, - 2.661044041027374e-40, - 2.6706208476168957e-40, - 2.6802126162440414e-40, - 2.6898246390335324e-40, - 2.69945631048331e-40, - 2.7091059938934665e-40, - 2.7187721477541803e-40, - 2.7284561245155554e-40, - 2.738159720084372e-40, - 2.7478818619838114e-40, - 2.7576185486107826e-40, - 2.7673673445343693e-40, - 2.7771299894947266e-40, - 2.7869098892238164e-40, - 2.7967080235744005e-40, - 2.806521699741264e-40, - 2.8163407096463586e-40, - 2.826153871644153e-40, - 2.8359525811155038e-40, - 2.845739087468845e-40, - 2.855518816773934e-40, - 2.8652961336993973e-40, - 2.8750704162912844e-40, - 2.884836628335574e-40, - 2.8945898327549415e-40, - 2.9043281165127283e-40, - 2.914052475914053e-40, - 2.9237639225883688e-40, - 2.933466321333741e-40, - 2.943165021095899e-40, - 2.952865293239451e-40, - 2.9625684854084306e-40, - 2.972270568149595e-40, - 2.9819691763016945e-40, - 2.99166394981952e-40, - 3.001361740564023e-40, - 3.011069817289228e-40, - 3.020794119690281e-40, - 3.0305331426186272e-40, - 3.040282235849645e-40, - 3.050038001158758e-40, - 3.059804334851993e-40, - 3.069590783811921e-40, - 3.079406514460612e-40, - 3.0892562551967577e-40, - 3.0991300355325102e-40, - 3.1090146491925003e-40, - 3.1188966631062306e-40, - 3.128775627809121e-40, - 3.1386595308434525e-40, - 3.148556816292104e-40, - 3.158470421290798e-40, - 3.1683927779787537e-40, - 3.17831510643752e-40, - 3.1882291829536037e-40, - 3.198132057673747e-40, - 3.208023928449637e-40, - 3.2179051405624086e-40, - 3.2277751054414928e-40, - 3.2376328005559203e-40, - 3.247477613127444e-40, - 3.25731015421908e-40, - 3.267134185263209e-40, - 3.276953812667529e-40, - 3.286772498289045e-40, - 3.2965904480801546e-40, - 3.3064047405822567e-40, - 3.3162124704622826e-40, - 3.3260126912884267e-40, - 3.3358114334162968e-40, - 3.345616225325354e-40, - 3.355434439383293e-40, - 3.3652696920767347e-40, - 3.375121111097632e-40, - 3.384987691213838e-40, - 3.394868596912477e-40, - 3.404762621239825e-40, - 3.414667172101957e-40, - 3.4245793883925026e-40, - 3.434497231492747e-40, - 3.4444231471358657e-40, - 3.4543621469354126e-40, - 3.4643191685283467e-40, - 3.47429662948427e-40, - 3.4842898384355843e-40, - 3.4942928711511875e-40, - 3.5043002545068115e-40, - 3.5143099529767335e-40, - 3.524323409630163e-40, - 3.534341681484581e-40, - 3.544365171382096e-40, - 3.5543920396346604e-40, - 3.5644197405548664e-40, - 3.574446097234651e-40, - 3.5844709516903824e-40, - 3.5944978659961035e-40, - 3.6045308882260307e-40, - 3.6145734650416078e-40, - 3.6246242819029498e-40, - 3.634677895958251e-40, - 3.6447298247487752e-40, - 3.6547775684246172e-40, - 3.664823162764521e-40, - 3.674870516541025e-40, - 3.684922639031386e-40, - 3.694982081977108e-40, - 3.7050486833162665e-40, - 3.715121157518813e-40, - 3.725198444075105e-40, - 3.7352795232599865e-40, - 3.74536302426925e-40, - 3.755447913946983e-40, - 3.76553295796388e-40, - 3.775618542521275e-40, - 3.785707945202004e-40, - 3.7958043757505e-40, - 3.805911084167074e-40, - 3.816029011265163e-40, - 3.826153289491219e-40, - 3.8362781781489414e-40, - 3.8463978981800345e-40, - 3.856509438112817e-40, - 3.866615834220388e-40, - 3.876721141134767e-40, - 3.886828917871489e-40, - 3.8969412891692335e-40, - 3.907057324793874e-40, - 3.9171759911228745e-40, - 3.927296375022996e-40, - 3.937417732379062e-40, - 3.947539559011495e-40, - 3.957661415247297e-40, - 3.967782817389295e-40, - 3.977903697731915e-40, - 3.988023627465217e-40, - 3.998141996846422e-40, - 4.0082577961075015e-40, - 4.018369608086312e-40, - 4.0284757608732e-40, - 4.0385748286692905e-40, - 4.048665295063728e-40, - 4.058746074865314e-40, - 4.068817986186167e-40, - 4.078882274944241e-40, - 4.0889407234274344e-40, - 4.098995210545281e-40, - 4.109044898991049e-40, - 4.119087130969691e-40, - 4.129118578687957e-40, - 4.139135862384927e-40, - 4.149139275095492e-40, - 4.1591333645455374e-40, - 4.1691229522887904e-40, - 4.179112774912546e-40, - 4.189106029752741e-40, - 4.199103947943491e-40, - 4.209107583934763e-40, - 4.2191186164773934e-40, - 4.229138553081596e-40, - 4.239166806946258e-40, - 4.249201946946761e-40, - 4.259241964361448e-40, - 4.269285162141582e-40, - 4.2793336175395314e-40, - 4.289392431327359e-40, - 4.299466909556683e-40, - 4.309562126814451e-40, - 4.319679344939812e-40, - 4.329815365546316e-40, - 4.339966543626132e-40, - 4.3501299710881685e-40, - 4.3603039255970275e-40, - 4.3704888538648275e-40, - 4.380684846318067e-40, - 4.390891518148419e-40, - 4.401108319319506e-40, - 4.411334492169745e-40, - 4.421570453396249e-40, - 4.431816724112174e-40, - 4.442073193751235e-40, - 4.452338071865404e-40, - 4.4626069357748055e-40, - 4.472874815520621e-40, - 4.483138245941161e-40, - 4.4933948932287925e-40, - 4.503645359491314e-40, - 4.5138916560838924e-40, - 4.524134553185275e-40, - 4.534374708053499e-40, - 4.544612770457588e-40, - 4.554848848801038e-40, - 4.565082918617089e-40, - 4.575314782109827e-40, - 4.585542654232171e-40, - 4.5957636696609575e-40, - 4.605975660975279e-40, - 4.61617741909004e-40, - 4.626369115053504e-40, - 4.6365525541105715e-40, - 4.646731358438465e-40, - 4.656907656527246e-40, - 4.667083071859662e-40, - 4.677259089626781e-40, - 4.68743575922571e-40, - 4.6976126322732966e-40, - 4.7077892790243415e-40, - 4.717964887066667e-40, - 4.728138496473734e-40, - 4.738311540076938e-40, - 4.748486060642312e-40, - 4.758664505529078e-40, - 4.76884941891006e-40, - 4.779041725134655e-40, - 4.789239859877255e-40, - 4.799442250525229e-40, - 4.809647415580434e-40, - 4.819853989391744e-40, - 4.830063019347574e-40, - 4.840276978851983e-40, - 4.850498303195223e-40, - 4.860729423804028e-40, - 4.870972353353323e-40, - 4.881226492536479e-40, - 4.8914903328480196e-40, - 4.901762367372348e-40, - 4.91204106983588e-40, - 4.922325144295655e-40, - 4.932614269986038e-40, - 4.942908443181564e-40, - 4.953207684103634e-40, - 4.96351201626837e-40, - 4.97382179183066e-40, - 4.9841379530689225e-40, - 4.994461015464186e-40, - 5.004791362346359e-40, - 5.015129489117246e-40, - 5.0254748928262075e-40, - 5.035825075253653e-40, - 5.046177606752175e-40, - 5.0565300992964354e-40, - 5.066880094115025e-40, - 5.077226567498476e-40, - 5.087570334944045e-40, - 5.097912551812614e-40, - 5.108254298161389e-40, - 5.118596545733061e-40, - 5.128939418956179e-40, - 5.139282472053717e-40, - 5.149625307233438e-40, - 5.159967587196816e-40, - 5.170309265403293e-40, - 5.18065084488567e-40, - 5.190992592618718e-40, - 5.201334391332671e-40, - 5.211675850841153e-40, - 5.222016457822612e-40, - 5.232354694952599e-40, - 5.242689321262614e-40, - 5.253019589839542e-40, - 5.26334476282114e-40, - 5.273663963288768e-40, - 5.2839768239588096e-40, - 5.294284222683362e-40, - 5.30458707597205e-40, - 5.314886433290331e-40, - 5.325183624136389e-40, - 5.335479552285705e-40, - 5.3457741906375e-40, - 5.3560674164452e-40, - 5.366359130719549e-40, - 5.3766492186559606e-40, - 5.3869376899793714e-40, - 5.397224776930629e-40, - 5.407510732659529e-40, - 5.417795843243548e-40, - 5.4280804513396965e-40, - 5.438365095752077e-40, - 5.448649275701609e-40, - 5.4589319013688756e-40, - 5.46921179510876e-40, - 5.479487437080461e-40, - 5.489757305353418e-40, - 5.500021245721093e-40, - 5.510280505089598e-40, - 5.520536617796422e-40, - 5.530791173926778e-40, - 5.541045901004256e-40, - 5.551302038407162e-40, - 5.561559765304307e-40, - 5.571819115299147e-40, - 5.58208012223162e-40, - 5.592342839499671e-40, - 5.602607437945015e-40, - 5.612874380496397e-40, - 5.623144222961526e-40, - 5.633417435918577e-40, - 5.643694050854733e-40, - 5.653973945349662e-40, - 5.664257249990259e-40, - 5.674544372634075e-40, - 5.684836079092564e-40, - 5.6951332761428844e-40, - 5.705436869389668e-40, - 5.7157475394845295e-40, - 5.726065119482852e-40, - 5.73638906427137e-40, - 5.746718812921479e-40, - 5.757053687023912e-40, - 5.767392913220241e-40, - 5.777736403193979e-40, - 5.7880843871576176e-40, - 5.798437246416489e-40, - 5.808795437943126e-40, - 5.819159357445914e-40, - 5.82952964828495e-40, - 5.839907510158039e-40, - 5.85029440390936e-40, - 5.860692016798949e-40, - 5.871102136279999e-40, - 5.88152647212915e-40, - 5.8919659302445465e-40, - 5.9024208870524344e-40, - 5.912891703238618e-40, - 5.923378620144467e-40, - 5.933881423420433e-40, - 5.944399364493372e-40, - 5.9549305649760085e-40, - 5.965472891093499e-40, - 5.976024329707149e-40, - 5.986583071865407e-40, - 5.997147525913245e-40, - 6.007717273980307e-40, - 6.018293181959984e-40, - 6.028876109095788e-40, - 6.0394668799113155e-40, - 6.0500663190973316e-40, - 6.060674982209512e-40, - 6.071291735587073e-40, - 6.0819146873797405e-40, - 6.092541935631113e-40, - 6.103171557659266e-40, - 6.1138015528994344e-40, - 6.124430180462153e-40, - 6.135056398635416e-40, - 6.1456791920198295e-40, - 6.156297714519351e-40, - 6.166911209184637e-40, - 6.177518923407472e-40, - 6.188120409049948e-40, - 6.198715519348524e-40, - 6.209304030676832e-40, - 6.2198858472294005e-40, - 6.230460877817341e-40, - 6.2410291510970025e-40, - 6.251590347095612e-40, - 6.262143341369084e-40, - 6.2726869232837655e-40, - 6.283219628606848e-40, - 6.2937395085997835e-40, - 6.304244571708392e-40, - 6.314734173096756e-40, - 6.325208532674335e-40, - 6.335668017121682e-40, - 6.346113103820903e-40, - 6.356544355379399e-40, - 6.366962432956401e-40, - 6.3773685288115375e-40, - 6.387764070443129e-40, - 6.398150500907756e-40, - 6.4085292637701035e-40, - 6.418901807163089e-40, - 6.429269562182335e-40, - 6.4396331707174436e-40, - 6.449992825773144e-40, - 6.460348712408949e-40, - 6.4707009451872065e-40, - 6.481049442093678e-40, - 6.4913940409646554e-40, - 6.501734353211331e-40, - 6.5120699073434024e-40, - 6.522400326400259e-40, - 6.5327252114563086e-40, - 6.543044152108312e-40, - 6.553356933209211e-40, - 6.563664926308674e-40, - 6.573970563871942e-40, - 6.584276398278328e-40, - 6.5945849823966925e-40, - 6.604898875716028e-40, - 6.615220454809305e-40, - 6.625550229654861e-40, - 6.635887475338272e-40, - 6.646231346848201e-40, - 6.6565809799849324e-40, - 6.666935641116663e-40, - 6.677294735814961e-40, - 6.68765851762414e-40, - 6.6980279956611005e-40, - 6.708404211891878e-40, - 6.718788131723197e-40, - 6.729180719610845e-40, - 6.7395829172151605e-40, - 6.74999484226968e-40, - 6.7604157772785305e-40, - 6.770845112620954e-40, - 6.781282242332889e-40, - 6.791726531335173e-40, - 6.802177308653262e-40, - 6.812634159305569e-40, - 6.823097241440532e-40, - 6.833566639298061e-40, - 6.844042443626754e-40, - 6.8545249152661095e-40, - 6.865014511406458e-40, - 6.875511504234815e-40, - 6.886015620687781e-40, - 6.896526625189525e-40, - 6.907043886864224e-40, - 6.917566568795497e-40, - 6.928093830155981e-40, - 6.938624903125188e-40, - 6.949159808123457e-40, - 6.959699115634969e-40, - 6.970243444605521e-40, - 6.980793414155146e-40, - 6.991349635378849e-40, - 7.001912477525547e-40, - 7.0124817137960424e-40, - 7.023056727001909e-40, - 7.033636890269597e-40, - 7.044221581272978e-40, - 7.0548103139344705e-40, - 7.065402707249776e-40, - 7.075998386083825e-40, - 7.086596522124566e-40, - 7.097195554994338e-40, - 7.107794055685806e-40, - 7.118390668325246e-40, - 7.128984038111076e-40, - 7.139572810996054e-40, - 7.15015603552188e-40, - 7.160734273456853e-40, - 7.17130849783551e-40, - 7.181879620756446e-40, - 7.19244847766461e-40, - 7.203015811476391e-40, - 7.2135822790230735e-40, - 7.224147781071535e-40, - 7.234711067069593e-40, - 7.245270791467001e-40, - 7.255825794458925e-40, - 7.266375171725543e-40, - 7.276918045301732e-40, - 7.287453780084882e-40, - 7.297983429651505e-40, - 7.308508626787148e-40, - 7.319030722724536e-40, - 7.329551047312183e-40, - 7.340070930399914e-40, - 7.35059171053362e-40, - 7.361114436569067e-40, - 7.371638934982781e-40, - 7.38216476996131e-40, - 7.392691505700029e-40, - 7.403218693063078e-40, - 7.413745706186997e-40, - 7.42427184199776e-40, - 7.43479688846868e-40, - 7.445321343313322e-40, - 7.455845772635258e-40, - 7.466370914027448e-40, - 7.476897568822311e-40, - 7.487426526952934e-40, - 7.497958697653697e-40, - 7.508495364763194e-40, - 7.519037634186892e-40, - 7.52958648074964e-40, - 7.540142875043137e-40, - 7.550707787822666e-40, - 7.561282189776763e-40, - 7.571866543121405e-40, - 7.582459913128423e-40, - 7.59306116360049e-40, - 7.603669131065502e-40, - 7.614282653307947e-40, - 7.624900643597153e-40, - 7.63552203992498e-40, - 7.646146253416466e-40, - 7.656773429021681e-40, - 7.667403696881167e-40, - 7.678037050773538e-40, - 7.688673240146806e-40, - 7.699311988253805e-40, - 7.70995301453793e-40, - 7.720595816351606e-40, - 7.731239917924336e-40, - 7.741885309480186e-40, - 7.752532089416463e-40, - 7.763180393472028e-40, - 7.773830405680582e-40, - 7.784482250990615e-40, - 7.795135453196925e-40, - 7.805788587594899e-40, - 7.816440041003011e-40, - 7.827088200270838e-40, - 7.837731471131678e-40, - 7.848368474658003e-40, - 7.858997979969967e-40, - 7.869619083425164e-40, - 7.880232059862719e-40, - 7.890837480554114e-40, - 7.901435832004247e-40, - 7.912027470332014e-40, - 7.922612736950103e-40, - 7.933191987755446e-40, - 7.943765592529226e-40, - 7.954333275670873e-40, - 7.964894482909565e-40, - 7.975448669573567e-40, - 7.985995290990942e-40, - 7.996533802446949e-40, - 8.007063656916715e-40, - 8.017584467532862e-40, - 8.0280969957513e-40, - 8.038602541144856e-40, - 8.049102408574203e-40, - 8.059597903774246e-40, - 8.070090354394078e-40, - 8.080581117647631e-40, - 8.091071478212032e-40, - 8.101561885737454e-40, - 8.112052189478463e-40, - 8.122542194881103e-40, - 8.133031588026944e-40, - 8.14352002155809e-40, - 8.154007148081557e-40, - 8.164492632879513e-40, - 8.1749765020925e-40, - 8.185459414846638e-40, - 8.195942236141266e-40, - 8.206425945031443e-40, - 8.21691156298547e-40, - 8.227400111032309e-40, - 8.237892525286908e-40, - 8.248389403776302e-40, - 8.258891073880798e-40, - 8.269397817783364e-40, - 8.279909915828056e-40, - 8.2904275364108e-40, - 8.300950850097102e-40, - 8.311480179415739e-40, - 8.322015827505323e-40, - 8.332557914561975e-40, - 8.343106470544343e-40, - 8.353661439154466e-40, - 8.36422255097907e-40, - 8.374789510478783e-40, - 8.38536217037186e-40, - 8.395940478551914e-40, - 8.406524428225587e-40, - 8.417114166427305e-40, - 8.427709902445395e-40, - 8.438311846619097e-40, - 8.448920209175179e-40, - 8.459535199986091e-40, - 8.470157002220062e-40, - 8.480785726373301e-40, - 8.491421372364479e-40, - 8.502063900772313e-40, - 8.512713271988616e-40, - 8.523369444121493e-40, - 8.534032391653785e-40, - 8.544702140336317e-40, - 8.555378720502389e-40, - 8.56606211423455e-40, - 8.576752187643229e-40, - 8.587448798183084e-40, - 8.598151746790796e-40, - 8.608860778127647e-40, - 8.619575636146367e-40, - 8.63029606479951e-40, - 8.641021783712766e-40, - 8.651752314506192e-40, - 8.662487169831407e-40, - 8.673225872391622e-40, - 8.683967943625034e-40, - 8.694712905053012e-40, - 8.70546027210279e-40, - 8.716209459911928e-40, - 8.726959916204624e-40, - 8.737711452430539e-40, - 8.748463895764783e-40, - 8.759217099171285e-40, - 8.76997098351295e-40, - 8.78072563282324e-40, - 8.791481200595939e-40, - 8.802237839056643e-40, - 8.812995590958539e-40, - 8.82375461579801e-40, - 8.834515124898916e-40, - 8.845277171018169e-40, - 8.856040743305602e-40, - 8.866805790166025e-40, - 8.877572256389427e-40, - 8.888340064805925e-40, - 8.89910817964811e-40, - 8.909873972482931e-40, - 8.920634634831952e-40, - 8.931387358260569e-40, - 8.942129334347022e-40, - 8.952857781561389e-40, - 8.963570061572184e-40, - 8.974263712564397e-40, - 8.984939714279508e-40, - 8.99560270125042e-40, - 9.006257531636252e-40, - 9.016908991346873e-40, - 9.027561415217145e-40, - 9.03821906448109e-40, - 9.048886207825602e-40, - 9.059566738076397e-40, - 9.07025913243906e-40 - ], - "nc": [ - 4.626734033347726e-46, - 1.9177176313724694e-43, - 8.571397146852527e-43, - 1.659846975503089e-42, - 2.4092658903256385e-42, - 3.154177834089847e-42, - 3.875668023954561e-42, - 4.525632545607607e-42, - 5.1095574748267706e-42, - 5.6478826112874024e-42, - 6.170902182410535e-42, - 6.687341661854782e-42, - 7.196090117658927e-42, - 7.68312463158375e-42, - 8.148737865994701e-42, - 8.604929156812034e-42, - 9.04838369225256e-42, - 9.476447019132172e-42, - 9.900832142527247e-42, - 1.0322199086799437e-41, - 1.0755040072227715e-41, - 1.1175788755447533e-41, - 1.1587635921401259e-41, - 1.1990617221878784e-41, - 1.2391866929872813e-41, - 1.2794873101336577e-41, - 1.3201646206791478e-41, - 1.3603230717009927e-41, - 1.4000471205148988e-41, - 1.4400984716578023e-41, - 1.4805247449135694e-41, - 1.520796213972616e-41, - 1.560619039644599e-41, - 1.6001943051039423e-41, - 1.6396513216021028e-41, - 1.6791588724625877e-41, - 1.7187800094284862e-41, - 1.7585572010014507e-41, - 1.7983988095803027e-41, - 1.8381428030725258e-41, - 1.8777180994324122e-41, - 1.9173125327413059e-41, - 1.9570688855169167e-41, - 1.9971313765329026e-41, - 2.037209316521471e-41, - 2.0771066457500268e-41, - 2.116657142322911e-41, - 2.1559622978583823e-41, - 2.1952121518574942e-41, - 2.2345800248824802e-41, - 2.2740910888381436e-41, - 2.3135951926649037e-41, - 2.352973934915457e-41, - 2.392077925210203e-41, - 2.4309422445475335e-41, - 2.4697832833844536e-41, - 2.5087576086760714e-41, - 2.5480783643836165e-41, - 2.5874492234030796e-41, - 2.6270823171062726e-41, - 2.66668610770729e-41, - 2.705946033320111e-41, - 2.7447329928977705e-41, - 2.7830925429204575e-41, - 2.821513498152467e-41, - 2.8601622387578124e-41, - 2.899132660500985e-41, - 2.9385407387801845e-41, - 2.9781759085523547e-41, - 3.017805047243508e-41, - 3.0572403885297895e-41, - 3.0962791167287365e-41, - 3.1348298854150294e-41, - 3.173122535507416e-41, - 3.211351375443863e-41, - 3.2496954428188896e-41, - 3.288428636254705e-41, - 3.327690491658845e-41, - 3.3674298229909385e-41, - 3.40749772044284e-41, - 3.447719588284823e-41, - 3.487887496185507e-41, - 3.5278281226513186e-41, - 3.5674081625191145e-41, - 3.6066000868309526e-41, - 3.6454784576155656e-41, - 3.684143468708566e-41, - 3.722629427737803e-41, - 3.7610052520089914e-41, - 3.7993498183927057e-41, - 3.8377109287591335e-41, - 3.8760898454762685e-41, - 3.9144963265539957e-41, - 3.9529662273542527e-41, - 3.991548879253655e-41, - 4.030266212470193e-41, - 4.0691125576856313e-41, - 4.108108501021531e-41, - 4.1472242738008687e-41, - 4.186417059506452e-41, - 4.2256281822768137e-41, - 4.2647797529541437e-41, - 4.3038613123892003e-41, - 4.3427745900484246e-41, - 4.381533844157218e-41, - 4.4201368681780096e-41, - 4.458650950749944e-41, - 4.4971024625565706e-41, - 4.5354421905920075e-41, - 4.5736614820104317e-41, - 4.611756918046897e-41, - 4.649831640211938e-41, - 4.688024413792964e-41, - 4.726361646944369e-41, - 4.764766130938928e-41, - 4.803234566072288e-41, - 4.841849866579113e-41, - 4.880573750617907e-41, - 4.919361517501531e-41, - 4.95831011226812e-41, - 4.997379698854342e-41, - 5.036534813974768e-41, - 5.075837995200127e-41, - 5.115155584226059e-41, - 5.154419713778145e-41, - 5.193744310097803e-41, - 5.233031594281922e-41, - 5.27211670105102e-41, - 5.311045382395396e-41, - 5.349883719072829e-41, - 5.388550228170316e-41, - 5.426923573894186e-41, - 5.465010745827485e-41, - 5.502959748095655e-41, - 5.540861519617891e-41, - 5.578750539965115e-41, - 5.616688484662091e-41, - 5.654657950723212e-41, - 5.692619322378427e-41, - 5.730685622751428e-41, - 5.768990196628701e-41, - 5.807516754919417e-41, - 5.846214203054097e-41, - 5.885050899478857e-41, - 5.923968944735561e-41, - 5.962936259184133e-41, - 6.001972610147347e-41, - 6.04101673387534e-41, - 6.079939501580061e-41, - 6.118757989468017e-41, - 6.15759415667901e-41, - 6.196448649347126e-41, - 6.235198321489897e-41, - 6.273753957086796e-41, - 6.312112637713466e-41, - 6.350323113699078e-41, - 6.388502769281772e-41, - 6.426749281686439e-41, - 6.465031321350074e-41, - 6.503270507162364e-41, - 6.541469433658682e-41, - 6.57969143197193e-41, - 6.617984015946089e-41, - 6.656381089394236e-41, - 6.694902758852454e-41, - 6.733524700260349e-41, - 6.772211479620322e-41, - 6.810955423559758e-41, - 6.849743089381639e-41, - 6.888542300127126e-41, - 6.927341692981104e-41, - 6.966149667303853e-41, - 7.004944023834404e-41, - 7.043644164084452e-41, - 7.082195893531557e-41, - 7.120664903340926e-41, - 7.159149187026324e-41, - 7.197670385471368e-41, - 7.236148968845209e-41, - 7.274501653201138e-41, - 7.312711064475594e-41, - 7.350801337308098e-41, - 7.388851307736778e-41, - 7.426960687525201e-41, - 7.465198355754441e-41, - 7.503513667038485e-41, - 7.541807261061194e-41, - 7.580028537280704e-41, - 7.618239744173691e-41, - 7.656530106199525e-41, - 7.69494022861671e-41, - 7.733442127753048e-41, - 7.771999356029471e-41, - 7.810589828511982e-41, - 7.849201292526417e-41, - 7.887817282418888e-41, - 7.926415663420313e-41, - 7.964984610696333e-41, - 8.003530457643836e-41, - 8.042082777765345e-41, - 8.080666024654647e-41, - 8.119275932684433e-41, - 8.157873433616325e-41, - 8.196420568164383e-41, - 8.234908241642693e-41, - 8.273348741511947e-41, - 8.311749585828835e-41, - 8.350102778389913e-41, - 8.388404939228903e-41, - 8.426662396066539e-41, - 8.464894949331416e-41, - 8.503116086471342e-41, - 8.541328738160759e-41, - 8.579524013541683e-41, - 8.617696669638921e-41, - 8.655852540496696e-41, - 8.694007027623702e-41, - 8.732177878057885e-41, - 8.770372014126964e-41, - 8.808590286692177e-41, - 8.846820373753878e-41, - 8.885053468255774e-41, - 8.923281341309309e-41, - 8.961504405599019e-41, - 8.999730718568208e-41, - 9.037970487056452e-41, - 9.07623843451406e-41, - 9.114538549756087e-41, - 9.152870294560328e-41, - 9.191220145472448e-41, - 9.229565000473493e-41, - 9.26788544615215e-41, - 9.306167686249591e-41, - 9.344417697745072e-41, - 9.38264590135045e-41, - 9.42086284325306e-41, - 9.459076635394705e-41, - 9.497285205941917e-41, - 9.535483691283116e-41, - 9.573661830952087e-41, - 9.611811989798753e-41, - 9.649941272225465e-41, - 9.688058941506478e-41, - 9.726185629345874e-41, - 9.764331216443546e-41, - 9.80250064429709e-41, - 9.840695952471453e-41, - 9.878913411568134e-41, - 9.91714992910333e-41, - 9.955401968666655e-41, - 9.993664198535719e-41, - 1.003194000916928e-40, - 1.0070237154150435e-40, - 1.0108565917184785e-40, - 1.0146939345703663e-40, - 1.018535899839322e-40, - 1.0223824398005606e-40, - 1.0262332320072854e-40, - 1.030088232254929e-40, - 1.033948208386029e-40, - 1.0378139373771043e-40, - 1.0416851863162356e-40, - 1.0455594461533059e-40, - 1.0494334315524832e-40, - 1.0533040433784267e-40, - 1.0571707728791645e-40, - 1.061036011984852e-40, - 1.0649026256885584e-40, - 1.0687730770608203e-40, - 1.0726464466101463e-40, - 1.0765191897801394e-40, - 1.0803874850534698e-40, - 1.0842480018689118e-40, - 1.0881004428511049e-40, - 1.0919461869332788e-40, - 1.095786728811652e-40, - 1.0996232024803467e-40, - 1.1034548361145345e-40, - 1.1072802997700744e-40, - 1.111098286807365e-40, - 1.1149078273579441e-40, - 1.1187100567682232e-40, - 1.122506990836605e-40, - 1.1263006586220161e-40, - 1.1300929072107443e-40, - 1.1338839149155624e-40, - 1.1376730911010614e-40, - 1.1414598770556364e-40, - 1.1452437624056164e-40, - 1.1490251770836942e-40, - 1.1528048096989346e-40, - 1.1565831042644754e-40, - 1.1603605039797684e-40, - 1.164137205082784e-40, - 1.1679139469836734e-40, - 1.1716922891445654e-40, - 1.175473816895335e-40, - 1.179260114295337e-40, - 1.1830519622644133e-40, - 1.1868486599774179e-40, - 1.1906493508909319e-40, - 1.1944531301806848e-40, - 1.1982588841850051e-40, - 1.2020660365771332e-40, - 1.2058742306529635e-40, - 1.2096831158952344e-40, - 1.2134925118140648e-40, - 1.2173026219881972e-40, - 1.221113824004915e-40, - 1.22492650161446e-40, - 1.2287410646502063e-40, - 1.2325579537256026e-40, - 1.2363769896705635e-40, - 1.2401978292855553e-40, - 1.244020126823447e-40, - 1.2478433070060414e-40, - 1.251666968790395e-40, - 1.2554913159063003e-40, - 1.259316582555475e-40, - 1.2631430264905502e-40, - 1.2669709761370581e-40, - 1.2707998025445395e-40, - 1.2746284665556818e-40, - 1.2784559283000419e-40, - 1.2822812289491052e-40, - 1.2861042580062032e-40, - 1.28992621759425e-40, - 1.2937484819167733e-40, - 1.297572421908726e-40, - 1.3013990134352701e-40, - 1.3052279220894349e-40, - 1.30905802362907e-40, - 1.3128881527069734e-40, - 1.3167171631745635e-40, - 1.320544485848281e-40, - 1.3243703155703297e-40, - 1.3281949712769722e-40, - 1.3320187739208327e-40, - 1.335842011487174e-40, - 1.3396644415164155e-40, - 1.3434856659703355e-40, - 1.3473054419372183e-40, - 1.351123528122511e-40, - 1.3549397339533362e-40, - 1.3587545620890454e-40, - 1.3625688691994276e-40, - 1.3663834400029696e-40, - 1.3701990586484545e-40, - 1.3740164503669784e-40, - 1.3778353758201473e-40, - 1.3816546561952054e-40, - 1.3854729952103914e-40, - 1.389289095659631e-40, - 1.3931016924465992e-40, - 1.3969103306951102e-40, - 1.4007157459353937e-40, - 1.4045189850276354e-40, - 1.4083211005812284e-40, - 1.4121231412466023e-40, - 1.415925855164151e-40, - 1.4197291926788783e-40, - 1.4235326983488404e-40, - 1.4273358966175973e-40, - 1.431138311940778e-40, - 1.434939483647944e-40, - 1.438739112898193e-40, - 1.4425371707765445e-40, - 1.446333664838984e-40, - 1.4501286026414978e-40, - 1.453921980766333e-40, - 1.4577136801065999e-40, - 1.461503454103338e-40, - 1.4652910288038898e-40, - 1.4690761302078652e-40, - 1.4728584892619138e-40, - 1.4766381734947497e-40, - 1.480415826470412e-40, - 1.4841921795571495e-40, - 1.487967966258198e-40, - 1.4917439197312788e-40, - 1.4955206766686298e-40, - 1.499298204264406e-40, - 1.5030761706156537e-40, - 1.5068542375622592e-40, - 1.510632066943262e-40, - 1.5144093228138262e-40, - 1.5181859223801418e-40, - 1.5219622911294063e-40, - 1.5257389439360968e-40, - 1.5295163982926561e-40, - 1.5332951716915265e-40, - 1.5370757708563201e-40, - 1.5408585298591994e-40, - 1.5446435292538221e-40, - 1.5484307710971155e-40, - 1.5522202564956011e-40, - 1.556011986553771e-40, - 1.5598059426959749e-40, - 1.5636020154129741e-40, - 1.5674001767842127e-40, - 1.57120043311588e-40, - 1.5750027907296922e-40, - 1.578807256099473e-40, - 1.5826138876863734e-40, - 1.5864229209702072e-40, - 1.590234622843244e-40, - 1.5940492588575852e-40, - 1.5978670945653313e-40, - 1.6016883951321167e-40, - 1.6055132446350292e-40, - 1.6093412293998933e-40, - 1.6131718044185585e-40, - 1.6170044180648416e-40, - 1.6208385187125585e-40, - 1.6246735553220518e-40, - 1.628509187380579e-40, - 1.6323454781120209e-40, - 1.6361823306976721e-40, - 1.6400196201513333e-40, - 1.643857221586104e-40, - 1.6476950100731553e-40, - 1.6515327405812134e-40, - 1.6553699340143438e-40, - 1.65920640182328e-40, - 1.6630420106053134e-40, - 1.6668766269576267e-40, - 1.6707101174308432e-40, - 1.6745423572989244e-40, - 1.6783732202052969e-40, - 1.6822023900784042e-40, - 1.686029497505871e-40, - 1.689854173075313e-40, - 1.693676047374349e-40, - 1.6974947702792144e-40, - 1.7013102350160457e-40, - 1.7051226154283403e-40, - 1.708932159769973e-40, - 1.7127391170239214e-40, - 1.716543736173162e-40, - 1.7203462657953323e-40, - 1.7241469232920513e-40, - 1.7279458245214838e-40, - 1.7317430090262736e-40, - 1.7355385110473643e-40, - 1.7393323647491496e-40, - 1.7431246042736815e-40, - 1.746915254217622e-40, - 1.7507042961814042e-40, - 1.7544917639636156e-40, - 1.7582777139310231e-40, - 1.7620622024562172e-40, - 1.765845285911796e-40, - 1.7696270211015463e-40, - 1.7734074922356638e-40, - 1.7771868790374383e-40, - 1.7809654384371226e-40, - 1.784743432581386e-40, - 1.7885211236168929e-40, - 1.7922987736903135e-40, - 1.796076655155215e-40, - 1.7998551304845807e-40, - 1.8036344676687564e-40, - 1.8074148519432034e-40, - 1.811196467796585e-40, - 1.814979499717561e-40, - 1.8187641321947927e-40, - 1.8225504791785997e-40, - 1.8263383547254866e-40, - 1.8301275556180488e-40, - 1.8339178958100526e-40, - 1.837709189264339e-40, - 1.841501250007661e-40, - 1.845293892220325e-40, - 1.849087004679027e-40, - 1.8528806732028328e-40, - 1.856675015653279e-40, - 1.860470151146737e-40, - 1.8642661987995766e-40, - 1.8680632777281687e-40, - 1.87186150686071e-40, - 1.875660965839798e-40, - 1.8794616016004047e-40, - 1.8832632506644625e-40, - 1.8870657362251807e-40, - 1.8908688814757657e-40, - 1.894672509609427e-40, - 1.8984764437443427e-40, - 1.9022804822957843e-40, - 1.90608442617599e-40, - 1.9098882072106208e-40, - 1.913691776153795e-40, - 1.9174950837919452e-40, - 1.9212980809116193e-40, - 1.925100718300816e-40, - 1.928902987127068e-40, - 1.932705009918978e-40, - 1.936506894919842e-40, - 1.940308740936151e-40, - 1.944110646779182e-40, - 1.947912711247144e-40, - 1.9517150330902907e-40, - 1.955517694325131e-40, - 1.95932062573807e-40, - 1.9631235376444037e-40, - 1.9669260746834306e-40, - 1.9707278815362877e-40, - 1.9745286028841095e-40, - 1.9783278834080325e-40, - 1.9821253705592373e-40, - 1.985920803373573e-40, - 1.989714239295042e-40, - 1.9935059720941637e-40, - 1.997296305030766e-40, - 2.0010855413646207e-40, - 2.0048739843555026e-40, - 2.008661937263182e-40, - 2.012449700773243e-40, - 2.0162374691528013e-40, - 2.0200250687570523e-40, - 2.0238122405757e-40, - 2.0275987257841843e-40, - 2.031384265572243e-40, - 2.0351686011296403e-40, - 2.0389514723880695e-40, - 2.0427325869412734e-40, - 2.0465118579189083e-40, - 2.050289484385783e-40, - 2.054065680929309e-40, - 2.05784066213632e-40, - 2.061614642592203e-40, - 2.0653878368450043e-40, - 2.069160470859346e-40, - 2.0729328195933167e-40, - 2.076704812552386e-40, - 2.0804761867118766e-40, - 2.084246677745594e-40, - 2.0880160213273444e-40, - 2.091783953130934e-40, - 2.0955502088301674e-40, - 2.0993145117134456e-40, - 2.103076639736874e-40, - 2.106836813651359e-40, - 2.110595373104646e-40, - 2.1143526576157107e-40, - 2.1181090067035268e-40, - 2.121864759887069e-40, - 2.125620256684453e-40, - 2.129375832230595e-40, - 2.1331316926566333e-40, - 2.1368876728935437e-40, - 2.140643535414662e-40, - 2.1443990429697286e-40, - 2.148153958328406e-40, - 2.1519080442643233e-40, - 2.155661063550025e-40, - 2.159412768320271e-40, - 2.1631629524465256e-40, - 2.1669116634545738e-40, - 2.1706589998465533e-40, - 2.174405059194409e-40, - 2.1781499390700795e-40, - 2.1818937370455104e-40, - 2.185636550673614e-40, - 2.189378507250169e-40, - 2.1931198799783522e-40, - 2.196860953440325e-40, - 2.2006020039690422e-40, - 2.2043433097906103e-40, - 2.2080851491427582e-40, - 2.2118278002632167e-40, - 2.2155715413897135e-40, - 2.2193166365603728e-40, - 2.2230631686565483e-40, - 2.2268110061236824e-40, - 2.230559950397711e-40, - 2.2343098028898116e-40, - 2.2380603650796655e-40, - 2.2418114384469545e-40, - 2.2455628244713584e-40, - 2.249314325559183e-40, - 2.2530658284507942e-40, - 2.2568174161324774e-40, - 2.260569268934508e-40, - 2.264321569233531e-40, - 2.2680744974717823e-40, - 2.2718282340519143e-40, - 2.2755829593144558e-40, - 2.279338853594443e-40, - 2.2830960789057187e-40, - 2.2868546516362333e-40, - 2.2906145137141116e-40, - 2.2943756073087867e-40, - 2.298137879776867e-40, - 2.3019012789259736e-40, - 2.3056657525637275e-40, - 2.3094312484977516e-40, - 2.3131977146612816e-40, - 2.3169651475308458e-40, - 2.320733633208551e-40, - 2.324503191508097e-40, - 2.328273824834158e-40, - 2.3320455326310336e-40, - 2.335818314266468e-40, - 2.3395921691082055e-40, - 2.343367096523989e-40, - 2.3471430935733926e-40, - 2.3509200708969515e-40, - 2.3546978621820057e-40, - 2.358476340361186e-40, - 2.3622553861739893e-40, - 2.36603488284968e-40, - 2.369814713640709e-40, - 2.373594761799524e-40, - 2.3773749105785767e-40, - 2.381155047853144e-40, - 2.3849351524004072e-40, - 2.3887152714020724e-40, - 2.392495439313345e-40, - 2.3962756839419262e-40, - 2.400056029863033e-40, - 2.403836501622251e-40, - 2.407617123789781e-40, - 2.4113979209593087e-40, - 2.415178915927313e-40, - 2.418960094807551e-40, - 2.4227414286557525e-40, - 2.4265229079592176e-40, - 2.4303045295299547e-40, - 2.4340862942243615e-40, - 2.437868202994807e-40, - 2.4416502567936595e-40, - 2.445432456573288e-40, - 2.4492148034076246e-40, - 2.4529973026295517e-40, - 2.4567799118671422e-40, - 2.4605625097434224e-40, - 2.4643449665709226e-40, - 2.468127149462548e-40, - 2.4719089252643003e-40, - 2.4756901608221817e-40, - 2.479470722982196e-40, - 2.4832504785980885e-40, - 2.4870293030142377e-40, - 2.4908071468557457e-40, - 2.4945841210103162e-40, - 2.498360366623794e-40, - 2.502136026797439e-40, - 2.5059112452328352e-40, - 2.509686165632924e-40, - 2.5134609317006465e-40, - 2.5172356871389406e-40, - 2.5210105748642342e-40, - 2.5247857200871486e-40, - 2.528561133092253e-40, - 2.532336753113035e-40, - 2.5361125169048536e-40, - 2.5398883595335298e-40, - 2.543664215951444e-40, - 2.5474400211099987e-40, - 2.5512157099383117e-40, - 2.554991217351272e-40, - 2.558766482196176e-40, - 2.5625414773783082e-40, - 2.566316245213772e-40, - 2.570090840127806e-40, - 2.5738653180685994e-40, - 2.577639735841129e-40, - 2.5814141502599335e-40, - 2.5851886181395495e-40, - 2.588963196294514e-40, - 2.5927379407636357e-40, - 2.596512884015912e-40, - 2.6002879959892446e-40, - 2.604063199981396e-40, - 2.607838416088424e-40, - 2.6116135619085716e-40, - 2.6153885541905626e-40, - 2.6191633096824148e-40, - 2.6229377451321473e-40, - 2.6267117772877765e-40, - 2.63048532519765e-40, - 2.6342583436747225e-40, - 2.6380308747994715e-40, - 2.6418030116104353e-40, - 2.6455748492553435e-40, - 2.6493464866726723e-40, - 2.6531180239810104e-40, - 2.6568895612978567e-40, - 2.660661198740713e-40, - 2.664433036427079e-40, - 2.668205171309403e-40, - 2.671977656112532e-40, - 2.6757504615273807e-40, - 2.679523517332947e-40, - 2.683296751921564e-40, - 2.687070090621799e-40, - 2.690843457406258e-40, - 2.694616776241519e-40, - 2.6983899710941507e-40, - 2.7021629659292636e-40, - 2.705935684522612e-40, - 2.709708048143355e-40, - 2.7134800076236395e-40, - 2.7172515476876614e-40, - 2.7210226547523365e-40, - 2.724793318069797e-40, - 2.728563529421468e-40, - 2.7323332806774706e-40, - 2.7361025637079317e-40, - 2.739871370382974e-40, - 2.743639692855189e-40, - 2.747407557536763e-40, - 2.7511750381275743e-40, - 2.7549421747384686e-40, - 2.7587090022473582e-40, - 2.7624755539489727e-40, - 2.7662418587403818e-40, - 2.7700079447612404e-40, - 2.7737738401512017e-40, - 2.7775395730499202e-40, - 2.7813051715970496e-40, - 2.7850706507334335e-40, - 2.7888359411620114e-40, - 2.792600990944934e-40, - 2.796365773303366e-40, - 2.800130261686899e-40, - 2.8038944316068713e-40, - 2.8076582604202395e-40, - 2.81142172555518e-40, - 2.815184804441918e-40, - 2.8189474745106785e-40, - 2.8227097134559937e-40, - 2.826471531334065e-40, - 2.830232975774112e-40, - 2.8339940470440076e-40, - 2.8377547384583284e-40, - 2.8415150431434404e-40, - 2.845274952888484e-40, - 2.849034458903671e-40, - 2.852793552396893e-40, - 2.8565522245760382e-40, - 2.8603104666489455e-40, - 2.8640682694202014e-40, - 2.8678256161344297e-40, - 2.871582504229953e-40, - 2.8753389537554126e-40, - 2.879094985809147e-40, - 2.882850621747634e-40, - 2.8866058842326114e-40, - 2.8903607963374297e-40, - 2.8941153811355877e-40, - 2.897869661700589e-40, - 2.901623661105933e-40, - 2.9053774029616498e-40, - 2.909130917444149e-40, - 2.912884230264634e-40, - 2.916637359815907e-40, - 2.920390324296587e-40, - 2.9241431419528284e-40, - 2.9278958313203208e-40, - 2.9316484110404688e-40, - 2.9354008997548316e-40, - 2.9391533161049668e-40, - 2.9429056787324362e-40, - 2.9466580050919274e-40, - 2.9504102938655058e-40, - 2.954162539893223e-40, - 2.9579147481268067e-40, - 2.9616669238794636e-40, - 2.9654190722721095e-40, - 2.9691711960689533e-40, - 2.972923296454148e-40, - 2.976675374591727e-40, - 2.9804274316589556e-40, - 2.9841794688341555e-40, - 2.9879314877867293e-40, - 2.991683512972548e-40, - 2.995435573116832e-40, - 2.999187655667015e-40, - 3.0029397443795125e-40, - 3.006691823026144e-40, - 3.0104438768856993e-40, - 3.0141958939893836e-40, - 3.017947862661588e-40, - 3.02169977122671e-40, - 3.0254516080091444e-40, - 3.0292033613332847e-40, - 3.0329550107099565e-40, - 3.036706517422472e-40, - 3.040457913671582e-40, - 3.0442092537085654e-40, - 3.0479605917852972e-40, - 3.051711981996728e-40, - 3.0554634769408926e-40, - 3.0592151283857523e-40, - 3.0629669880904203e-40, - 3.066719107814015e-40, - 3.0704715393156477e-40, - 3.074224334281049e-40, - 3.077977541070956e-40, - 3.0817311657059473e-40, - 3.085485164883442e-40, - 3.0892394922607226e-40, - 3.0929941015318164e-40, - 3.0967489465503193e-40, - 3.100503981435043e-40, - 3.1042591603665465e-40, - 3.108014437525385e-40, - 3.1117697670921232e-40, - 3.1155251032473178e-40, - 3.1192804033882383e-40, - 3.123035654491556e-40, - 3.126790864294342e-40, - 3.1305460437482367e-40, - 3.1343012038414626e-40, - 3.1380563555625206e-40, - 3.1418115101590343e-40, - 3.1455666796174673e-40, - 3.149321876055103e-40, - 3.153077111562508e-40, - 3.156832398142757e-40, - 3.1605877477810354e-40, - 3.1643431665043385e-40, - 3.1680986280448102e-40, - 3.171854127204453e-40, - 3.175609673431353e-40, - 3.1793652762187047e-40, - 3.183120945059689e-40, - 3.1868766893002024e-40, - 3.190632517771241e-40, - 3.194388439191353e-40, - 3.198144462279089e-40, - 3.2019005957529985e-40, - 3.2056568483316316e-40, - 3.209413233739708e-40, - 3.213169796794176e-40, - 3.2169265428047867e-40, - 3.220683449494854e-40, - 3.224440494405008e-40, - 3.228197655075874e-40, - 3.231954909048041e-40, - 3.235712233861771e-40, - 3.239469607057175e-40, - 3.2432270061743672e-40, - 3.246984408753457e-40, - 3.2507417923345548e-40, - 3.2544991325599615e-40, - 3.25825637342879e-40, - 3.2620134855290836e-40, - 3.2657704893074596e-40, - 3.269527407005511e-40, - 3.2732842608648283e-40, - 3.27704107313374e-40, - 3.280797866214149e-40, - 3.2845546627090233e-40, - 3.288311485236735e-40, - 3.29206835641565e-40, - 3.2958252988641347e-40, - 3.2995823352191336e-40, - 3.303339497522932e-40, - 3.307096817789538e-40, - 3.31085426329416e-40, - 3.314611789493659e-40, - 3.318369351844904e-40, - 3.3221269058047543e-40, - 3.3258844067406038e-40, - 3.3296418092374466e-40, - 3.333399067475896e-40, - 3.3371561356331643e-40, - 3.3409129678753066e-40, - 3.344669518304562e-40, - 3.348425741233526e-40, - 3.352181596903783e-40, - 3.355937079629895e-40, - 3.3596922113835617e-40, - 3.363447015145054e-40, - 3.3672015138946474e-40, - 3.37095573061262e-40, - 3.3747096886042546e-40, - 3.3784634127311877e-40, - 3.3822169283203732e-40, - 3.3859702606988434e-40, - 3.3897234351936315e-40, - 3.3934764771317697e-40, - 3.397229409900511e-40, - 3.4009822390672034e-40, - 3.404734951125923e-40, - 3.4084875272604744e-40, - 3.412239948778992e-40, - 3.415992196997611e-40, - 3.4197442532324643e-40, - 3.423496098481287e-40, - 3.427247712269985e-40, - 3.4309990736994705e-40, - 3.434750161870612e-40, - 3.438500955884282e-40, - 3.4422514348413518e-40, - 3.4460015777991946e-40, - 3.449751364232836e-40, - 3.453500779236602e-40, - 3.4572498105783017e-40, - 3.460998446040324e-40, - 3.464746673405048e-40, - 3.468494480454863e-40, - 3.472241854894913e-40, - 3.475988783697472e-40, - 3.4797352534300465e-40, - 3.483481250655891e-40, - 3.4872267619382598e-40, - 3.4909717738404015e-40, - 3.4947162742197053e-40, - 3.498460267362924e-40, - 3.5022037584654073e-40, - 3.5059467448754062e-40, - 3.5096892237678852e-40, - 3.513431192317812e-40, - 3.517172647700149e-40, - 3.5209135871206003e-40, - 3.524654009086794e-40, - 3.528393913862163e-40, - 3.5321333018342174e-40, - 3.5358721733904627e-40, - 3.5396105290899346e-40, - 3.5433483717779627e-40, - 3.547085697541552e-40, - 3.550822495538433e-40, - 3.554558768840203e-40, - 3.558294522125537e-40, - 3.5620297600731e-40, - 3.5657644873615594e-40, - 3.5694987086695887e-40, - 3.573232428384408e-40, - 3.576965648793836e-40, - 3.580698371265662e-40, - 3.5844305971637662e-40, - 3.588162327852024e-40, - 3.591893564694316e-40, - 3.5956243106837004e-40, - 3.599354583892775e-40, - 3.6030844070555374e-40, - 3.6068138008805282e-40, - 3.610542782168295e-40, - 3.614271357630255e-40, - 3.617999532362471e-40, - 3.6217273114609997e-40, - 3.6254546999706385e-40, - 3.6291817027490147e-40, - 3.6329083246110476e-40, - 3.6366345703716513e-40, - 3.6403604448457457e-40, - 3.6440859528482468e-40, - 3.647811095701565e-40, - 3.651535861761828e-40, - 3.6552602438916378e-40, - 3.6589842371756964e-40, - 3.6627078366987133e-40, - 3.666431037545399e-40, - 3.670153834800461e-40, - 3.673876223548655e-40, - 3.677598199391248e-40, - 3.681319770175967e-40, - 3.685040962451776e-40, - 3.68876180453009e-40, - 3.692482324722332e-40, - 3.696202551340019e-40, - 3.6999225173708415e-40, - 3.7036422645971925e-40, - 3.707361808938199e-40, - 3.7110811596915055e-40, - 3.71480032615476e-40, - 3.718519317625606e-40, - 3.722238143401689e-40, - 3.7259568127806586e-40, - 3.72967533503562e-40, - 3.733393719292274e-40, - 3.737111974621522e-40, - 3.7408301100941716e-40, - 3.744548134781034e-40, - 3.748266057748972e-40, - 3.751983876619614e-40, - 3.755701555162505e-40, - 3.759419122830142e-40, - 3.763136636508116e-40, - 3.766854153107486e-40, - 3.770571729539305e-40, - 3.774289422714627e-40, - 3.77800728954451e-40, - 3.781725386926132e-40, - 3.78544377136599e-40, - 3.789162498935541e-40, - 3.7928816256834456e-40, - 3.7966012076583705e-40, - 3.8003213009089755e-40, - 3.804041963120983e-40, - 3.807763283029225e-40, - 3.811485270527918e-40, - 3.8152078317696085e-40, - 3.818930869046008e-40, - 3.8226542849810145e-40, - 3.826377990261595e-40 - ] - }, - "nutau_bar": { - "cc": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.4451806478469623e-50, - 4.889034848457643e-50, - 5.895530488377352e-50, - 1.7875711519139226e-49, - 2.363914167819654e-49, - 2.6051232056689497e-49, - 1.1648108636922331e-48, - 2.0843367067797446e-48, - 2.3989359237969016e-48, - 2.6134202731283354e-48, - 4.927763174057163e-48, - 6.887281868845913e-48, - 7.646994065334608e-48, - 4.0208121911225655e-44, - 1.1496787856383245e-43, - 2.044445949694499e-43, - 3.047478625175526e-43, - 4.134583537486843e-43, - 5.287124074746848e-43, - 6.515832822852588e-43, - 8.03961511704898e-43, - 9.998061909297709e-43, - 1.2347272694552846e-42, - 1.4894778822185442e-42, - 1.7449778038137473e-42, - 2.001821540070452e-42, - 2.2622859712002717e-42, - 2.526028218152135e-42, - 2.7934201303230658e-42, - 3.066248232448726e-42, - 3.3478788510084206e-42, - 3.641543572843966e-42, - 3.9452933808637535e-42, - 4.254296995770385e-42, - 4.568372762474492e-42, - 4.8896165303213604e-42, - 5.218189894437961e-42, - 5.552880388875039e-42, - 5.890386088059681e-42, - 6.224092018852733e-42, - 6.550017118198604e-42, - 6.870848062671941e-42, - 7.190654670744427e-42, - 7.510086373759448e-42, - 7.82861224238715e-42, - 8.146094316939253e-42, - 8.463625907205217e-42, - 8.78213823828704e-42, - 9.101268926031022e-42, - 9.420625390984998e-42, - 9.739628569090221e-42, - 1.0058421840833862e-41, - 1.0377437632711622e-41, - 1.0696791823881883e-41, - 1.1017351887603771e-41, - 1.1340006030473698e-41, - 1.166477717783689e-41, - 1.1991010925611678e-41, - 1.2318494272560365e-41, - 1.2646078073269993e-41, - 1.2973535630547715e-41, - 1.3301669463476565e-41, - 1.363052954666655e-41, - 1.3960218816083807e-41, - 1.4291064912638072e-41, - 1.4623552511927197e-41, - 1.495730680678477e-41, - 1.5291778439869139e-41, - 1.5626135735818843e-41, - 1.5960608613335704e-41, - 1.6294468645845124e-41, - 1.662736589093127e-41, - 1.696012240282445e-41, - 1.7294070302410508e-41, - 1.763000292606196e-41, - 1.7968605679779846e-41, - 1.8309682439481048e-41, - 1.8652288097248254e-41, - 1.8994707986708242e-41, - 1.9338662661081523e-41, - 1.9680146100331866e-41, - 2.0020567411417056e-41, - 2.0362480859507137e-41, - 2.0705829962923047e-41, - 2.1047625977463258e-41, - 2.1393586761988036e-41, - 2.1742547918216695e-41, - 2.2092440255409163e-41, - 2.2447396729160576e-41, - 2.279912691173273e-41, - 2.315320208353428e-41, - 2.3506305850489296e-41, - 2.3859753060589655e-41, - 2.421304650117165e-41, - 2.456582670694618e-41, - 2.4920006265720665e-41, - 2.5277140755290265e-41, - 2.563606806744203e-41, - 2.599420109852176e-41, - 2.635303786819202e-41, - 2.670989613564095e-41, - 2.706537013516897e-41, - 2.7420049862457886e-41, - 2.777441371365586e-41, - 2.81334431278006e-41, - 2.8491150766885206e-41, - 2.885150657978093e-41, - 2.921245139550469e-41, - 2.957575705076788e-41, - 2.9938741702028375e-41, - 3.030503765583515e-41, - 3.067369111201939e-41, - 3.1045335183998227e-41, - 3.1420982626827263e-41, - 3.179947230559154e-41, - 3.21793513792007e-41, - 3.256140021415864e-41, - 3.29437923776439e-41, - 3.332294900984091e-41, - 3.3703117139036147e-41, - 3.4083533532324267e-41, - 3.4463257499210223e-41, - 3.484195846914102e-41, - 3.5219947132182383e-41, - 3.559713161985447e-41, - 3.5973926872471925e-41, - 3.6350517824814497e-41, - 3.6725958258039115e-41, - 3.710078789596706e-41, - 3.747834590692108e-41, - 3.7855165205296134e-41, - 3.822984301416187e-41, - 3.8605270685263825e-41, - 3.8982274217834206e-41, - 3.9359742883351215e-41, - 3.97389727478301e-41, - 4.012050967695599e-41, - 4.0502814787704263e-41, - 4.0887868493835216e-41, - 4.127983906124331e-41, - 4.167518454923876e-41, - 4.207163898017409e-41, - 4.247147208922154e-41, - 4.287607471771007e-41, - 4.3280187615529606e-41, - 4.3681979034673123e-41, - 4.4083169729991167e-41, - 4.4482132614842504e-41, - 4.4878348077798787e-41, - 4.527218720543446e-41, - 4.5664565906454254e-41, - 4.605657704526943e-41, - 4.644707090385e-41, - 4.683669993398157e-41, - 4.722881129494076e-41, - 4.762207358999656e-41, - 4.801737251080578e-41, - 4.841710445658264e-41, - 4.881889940750331e-41, - 4.92214691954396e-41, - 4.962527863003515e-41, - 5.002978032303262e-41, - 5.043594679419574e-41, - 5.084481046440368e-41, - 5.125516265614637e-41, - 5.166377050269513e-41, - 5.207056359194721e-41, - 5.247720315566629e-41, - 5.288154376306094e-41, - 5.328399856957604e-41, - 5.368692658799125e-41, - 5.408934822761477e-41, - 5.44913232546778e-41, - 5.489470854490962e-41, - 5.530054424037552e-41, - 5.570948532636347e-41, - 5.612219983325428e-41, - 5.653711506835683e-41, - 5.695267865898127e-41, - 5.737035001546548e-41, - 5.778984100359406e-41, - 5.820970063843969e-41, - 5.863000157036873e-41, - 5.905018247303396e-41, - 5.946912724026382e-41, - 5.988736801435406e-41, - 6.030601601661932e-41, - 6.07253407224353e-41, - 6.114505786829663e-41, - 6.156441199493107e-41, - 6.198338171023359e-41, - 6.240272521153408e-41, - 6.282267379425494e-41, - 6.324257677204389e-41, - 6.366219954647805e-41, - 6.408206614309613e-41, - 6.450240639306252e-41, - 6.49222766078351e-41, - 6.534099620580754e-41, - 6.575916260036657e-41, - 6.617739501788414e-41, - 6.659635186208018e-41, - 6.701674777135761e-41, - 6.74387077533061e-41, - 6.786223574991161e-41, - 6.828818881388905e-41, - 6.871735599072152e-41, - 6.914997764134615e-41, - 6.958648140695075e-41, - 7.002622516941157e-41, - 7.046699171754852e-41, - 7.09083313335576e-41, - 7.135165243278992e-41, - 7.179618412224343e-41, - 7.223875369454324e-41, - 7.267826691242627e-41, - 7.311523612440536e-41, - 7.35488179790167e-41, - 7.397831659299537e-41, - 7.440509002826206e-41, - 7.482995517190463e-41, - 7.525236317792612e-41, - 7.567261418531421e-41, - 7.609266832987579e-41, - 7.651361450861226e-41, - 7.693498063247297e-41, - 7.735689560585278e-41, - 7.778016328648682e-41, - 7.820559577409307e-41, - 7.86341471848236e-41, - 7.906625290414094e-41, - 7.950134006652777e-41, - 7.993956079272791e-41, - 8.038238334765804e-41, - 8.083008299460895e-41, - 8.128123696363357e-41, - 8.173458426683292e-41, - 8.218933777244213e-41, - 8.264516034562301e-41, - 8.310218426537036e-41, - 8.356008775533945e-41, - 8.401743447240814e-41, - 8.447263886591416e-41, - 8.492465409387942e-41, - 8.537306628628014e-41, - 8.581864908587887e-41, - 8.626229879010736e-41, - 8.670354947175853e-41, - 8.714128489972843e-41, - 8.757656207959811e-41, - 8.801211399541559e-41, - 8.844861397174006e-41, - 8.888458601627015e-41, - 8.932015940654433e-41, - 8.975768621222114e-41, - 9.01982308506467e-41, - 9.063988804723204e-41, - 9.108119094701295e-41, - 9.152384949958219e-41, - 9.196991770071256e-41, - 9.24180250593836e-41, - 9.286535421476059e-41, - 9.331132652621326e-41, - 9.37571566039165e-41, - 9.420337911851613e-41, - 9.46495032709116e-41, - 9.509524778285584e-41, - 9.554114526565877e-41, - 9.598769435764486e-41, - 9.643471411756531e-41, - 9.688172204611023e-41, - 9.732888322798765e-41, - 9.77773690029523e-41, - 9.822809874285622e-41, - 9.868116915869422e-41, - 9.913683835779082e-41, - 9.959509114300969e-41, - 1.0005528124555319e-40, - 1.0051656570537339e-40, - 1.0097847693964226e-40, - 1.0144079574879742e-40, - 1.019040044948064e-40, - 1.0236878921964332e-40, - 1.0283482357026275e-40, - 1.0330067063414915e-40, - 1.0376536582723214e-40, - 1.0422921090420842e-40, - 1.0469247536917672e-40, - 1.0515491649003478e-40, - 1.0561640510126221e-40, - 1.0607711963390706e-40, - 1.065371376545994e-40, - 1.0699636250738106e-40, - 1.0745501533016551e-40, - 1.079139509169068e-40, - 1.0837405277465136e-40, - 1.088352682161678e-40, - 1.0929714734583928e-40, - 1.097597993945112e-40, - 1.1022424867221169e-40, - 1.1069131092687466e-40, - 1.1116049116432936e-40, - 1.116309630618263e-40, - 1.1210209145747607e-40, - 1.1257356825695484e-40, - 1.1304513983681573e-40, - 1.1351663404412322e-40, - 1.1398789049216177e-40, - 1.1445865185074992e-40, - 1.1492857299942434e-40, - 1.1539728761983992e-40, - 1.158644761568002e-40, - 1.163297273018293e-40, - 1.1679277112312983e-40, - 1.1725400146988479e-40, - 1.1771403366739638e-40, - 1.1817326943234986e-40, - 1.186317167981659e-40, - 1.1908936023289891e-40, - 1.1954661142778722e-40, - 1.2000435825870764e-40, - 1.2046342247553703e-40, - 1.209239050455182e-40, - 1.213855353628136e-40, - 1.2184816265069706e-40, - 1.2231224032253067e-40, - 1.2277840177443994e-40, - 1.232468243236223e-40, - 1.237169922790669e-40, - 1.241884082167219e-40, - 1.2466105705852854e-40, - 1.251351197491105e-40, - 1.2561050184884846e-40, - 1.260868024858262e-40, - 1.2656366810932925e-40, - 1.270410022198769e-40, - 1.2751891540761579e-40, - 1.27997468897567e-40, - 1.28476656450586e-40, - 1.289563804560433e-40, - 1.2943652097331033e-40, - 1.2991684831918439e-40, - 1.3039688686718046e-40, - 1.3087613803452013e-40, - 1.3135438709832078e-40, - 1.3183204023192468e-40, - 1.323096311754739e-40, - 1.3278733967989585e-40, - 1.3326470772247546e-40, - 1.3374113087246182e-40, - 1.3421638300031194e-40, - 1.3469086664587943e-40, - 1.351651504880478e-40, - 1.3563950911700323e-40, - 1.3611351204818073e-40, - 1.3658661516183518e-40, - 1.3705878970988462e-40, - 1.3753096135455046e-40, - 1.3800411435685987e-40, - 1.3847879125362814e-40, - 1.3895471017740907e-40, - 1.3943149336227245e-40, - 1.3990894762435273e-40, - 1.403872881791695e-40, - 1.408667771440818e-40, - 1.4134756540011733e-40, - 1.4182965648372038e-40, - 1.4231309320452905e-40, - 1.4279799456106251e-40, - 1.4328435333696684e-40, - 1.4377206545033169e-40, - 1.4426087084320221e-40, - 1.447500524198754e-40, - 1.4523875689952926e-40, - 1.4572628622372131e-40, - 1.4621281632242998e-40, - 1.466990049921921e-40, - 1.4718547494005071e-40, - 1.4767215483499285e-40, - 1.4815798936791879e-40, - 1.4864139939380868e-40, - 1.4912136979429027e-40, - 1.495979748523003e-40, - 1.5007280343090326e-40, - 1.505476117150233e-40, - 1.510237720604217e-40, - 1.5150113189227663e-40, - 1.519788492209648e-40, - 1.5245598294343097e-40, - 1.529323284674949e-40, - 1.5340827303671585e-40, - 1.5388445228581445e-40, - 1.5436135942320836e-40, - 1.5483920700704612e-40, - 1.5531808863428274e-40, - 1.5579811658628073e-40, - 1.5627952679636864e-40, - 1.5676265574861014e-40, - 1.5724767281792407e-40, - 1.577346856919553e-40, - 1.5822365296906007e-40, - 1.5871414085251109e-40, - 1.5920562164008317e-40, - 1.596975821787487e-40, - 1.601899284584897e-40, - 1.6068285262003746e-40, - 1.6117654847720765e-40, - 1.6167100935056665e-40, - 1.6216575618019293e-40, - 1.6266023397506544e-40, - 1.6315390906422777e-40, - 1.6364649057664548e-40, - 1.6413788220642774e-40, - 1.6462798370445377e-40, - 1.6511669527745843e-40, - 1.6560406683282201e-40, - 1.6609021521368026e-40, - 1.6657530503058688e-40, - 1.6705955006116796e-40, - 1.675431308186257e-40, - 1.6802617405970514e-40, - 1.6850876974654312e-40, - 1.6899106696625708e-40, - 1.6947324785874204e-40, - 1.6995559044648166e-40, - 1.7043845482125228e-40, - 1.7092215426068492e-40, - 1.7140699377153532e-40, - 1.718931627321171e-40, - 1.7238079613909234e-40, - 1.7287004313251627e-40, - 1.7336104939930568e-40, - 1.73853732239763e-40, - 1.7434770928479618e-40, - 1.7484258444767191e-40, - 1.753380521097669e-40, - 1.7583428605175563e-40, - 1.763316880584816e-40, - 1.768306501249323e-40, - 1.773313334384292e-40, - 1.7783325704866142e-40, - 1.7833582885638936e-40, - 1.7883847838745727e-40, - 1.7934093753215912e-40, - 1.798432621027244e-40, - 1.8034548092147238e-40, - 1.8084758299376042e-40, - 1.813494297875837e-40, - 1.8185083212793307e-40, - 1.82351626196415e-40, - 1.8285174285108021e-40, - 1.8335133549699978e-40, - 1.838506034365985e-40, - 1.843497277083129e-40, - 1.848487483731037e-40, - 1.8534756939131197e-40, - 1.8584613051109493e-40, - 1.8634445075505165e-40, - 1.8684267183902706e-40, - 1.8734098206582515e-40, - 1.87839526251786e-40, - 1.883384325537783e-40, - 1.888377098891304e-40, - 1.893373041964207e-40, - 1.898371672713209e-40, - 1.9033724922311497e-40, - 1.9083758400992735e-40, - 1.91338264385096e-40, - 1.918393888477396e-40, - 1.9234108783840155e-40, - 1.928434187150217e-40, - 1.933463659802234e-40, - 1.938499220369273e-40, - 1.9435402867122187e-40, - 1.948585045884793e-40, - 1.9536315386298365e-40, - 1.9586778576099075e-40, - 1.9637231626845013e-40, - 1.9687690103243754e-40, - 1.973817443674344e-40, - 1.978870157551472e-40, - 1.9839282319057943e-40, - 1.988991342011474e-40, - 1.9940590954310903e-40, - 1.999131165933427e-40, - 2.0042072068734605e-40, - 2.009286774014499e-40, - 2.0143694219764858e-40, - 2.0194547570822105e-40, - 2.024542638340279e-40, - 2.0296324105426113e-40, - 2.0347232026888343e-40, - 2.039813867529588e-40, - 2.044903174855688e-40, - 2.049990467033107e-40, - 2.055075349210768e-40, - 2.0601573057128267e-40, - 2.065235863847332e-40, - 2.0703103291010255e-40, - 2.0753797042814444e-40, - 2.0804434121349093e-40, - 2.0855009964030624e-40, - 2.0905513673669332e-40, - 2.095593001677791e-40, - 2.100624159714767e-40, - 2.1056429691500034e-40, - 2.1106493233027156e-40, - 2.115645760458623e-40, - 2.1206350290411658e-40, - 2.125619903444587e-40, - 2.1306026750574935e-40, - 2.135584581367437e-40, - 2.1405666988021387e-40, - 2.1455503743754953e-40, - 2.1505367714222266e-40, - 2.155525738185874e-40, - 2.1605165997554626e-40, - 2.1655083732546086e-40, - 2.170500176629469e-40, - 2.1754931663996802e-40, - 2.1804906005763787e-40, - 2.185495891264721e-40, - 2.190512362258353e-40, - 2.1955416754003085e-40, - 2.2005828483674587e-40, - 2.205634431744982e-40, - 2.2106953065392223e-40, - 2.2157647021370505e-40, - 2.220842041700553e-40, - 2.225926447075613e-40, - 2.23101690445581e-40, - 2.236112394174148e-40, - 2.241212724539936e-40, - 2.2463190973202346e-40, - 2.251432782728113e-40, - 2.2565547181877724e-40, - 2.261684593894916e-40, - 2.26681908750772e-40, - 2.271954181351169e-40, - 2.2770864979156264e-40, - 2.28221331200182e-40, - 2.2873344028542708e-40, - 2.2924513181083687e-40, - 2.297565074745535e-40, - 2.3026766268192254e-40, - 2.307786606189078e-40, - 2.3128945505089046e-40, - 2.317999782451652e-40, - 2.323101560075828e-40, - 2.3281985318126713e-40, - 2.333289817995422e-40, - 2.3383756963229553e-40, - 2.3434568666746682e-40, - 2.3485346627756336e-40, - 2.353610681119864e-40, - 2.3586859795541037e-40, - 2.363760660613378e-40, - 2.368834574228089e-40, - 2.3739075427162495e-40, - 2.3789794729736616e-40, - 2.3840507995795575e-40, - 2.389121986751403e-40, - 2.3941933518347892e-40, - 2.3992650816903715e-40, - 2.40433771164161e-40, - 2.4094117862161093e-40, - 2.414487978084574e-40, - 2.4195670080071343e-40, - 2.424649308205266e-40, - 2.4297351056761167e-40, - 2.434824826455282e-40, - 2.439918952186283e-40, - 2.4450179406389928e-40, - 2.450122474819184e-40, - 2.4552329510929335e-40, - 2.4603496869984826e-40, - 2.4654729998981094e-40, - 2.4706030792276534e-40, - 2.475739586119348e-40, - 2.480882141007787e-40, - 2.486030366604231e-40, - 2.4911838715418254e-40, - 2.496342322885369e-40, - 2.5015056794923166e-40, - 2.5066740281454866e-40, - 2.5118474705965734e-40, - 2.5170261095201883e-40, - 2.5222101141866603e-40, - 2.5273996748297994e-40, - 2.5325944803781005e-40, - 2.537794103799767e-40, - 2.5429982314778286e-40, - 2.548206393322727e-40, - 2.5534176688086216e-40, - 2.5586313028479733e-40, - 2.563846622987298e-40, - 2.5690629050339077e-40, - 2.5742797356093565e-40, - 2.5794970792736326e-40, - 2.5847150617083796e-40, - 2.5899337194888343e-40, - 2.5951530043511992e-40, - 2.600372774551465e-40, - 2.6055931610451642e-40, - 2.610814383459906e-40, - 2.616036703383406e-40, - 2.6212605964999287e-40, - 2.6264863984759494e-40, - 2.6317134933856263e-40, - 2.636940982063413e-40, - 2.6421678378395726e-40, - 2.647392948379928e-40, - 2.6526151046908093e-40, - 2.657834173657706e-40, - 2.663050393286771e-40, - 2.6682640068003427e-40, - 2.6734752044625123e-40, - 2.6786841478588058e-40, - 2.683890960344938e-40, - 2.689095689801933e-40, - 2.6942984330200617e-40, - 2.6994993998179534e-40, - 2.704698724405541e-40, - 2.70989637588346e-40, - 2.7150922375042985e-40, - 2.720286157908002e-40, - 2.7254779744016895e-40, - 2.7306675580898324e-40, - 2.7358548749390842e-40, - 2.7410399582144316e-40, - 2.7462228702680013e-40, - 2.751403694163969e-40, - 2.756582561451973e-40, - 2.7617590830457567e-40, - 2.7669325064028556e-40, - 2.772102032105333e-40, - 2.777266721367352e-40, - 2.7824256365511632e-40, - 2.787578623051732e-40, - 2.7927265907243805e-40, - 2.79787059236966e-40, - 2.8030117123163587e-40, - 2.8081511782261558e-40, - 2.813290068517901e-40, - 2.8184289994729397e-40, - 2.8235685062231958e-40, - 2.8287091234744175e-40, - 2.833851380373581e-40, - 2.8389957687588104e-40, - 2.8441428854288507e-40, - 2.8492933874349268e-40, - 2.8544478924687734e-40, - 2.8596067793237258e-40, - 2.864770341271707e-40, - 2.869939095616767e-40, - 2.8751137998372244e-40, - 2.8802954181611007e-40, - 2.8854849974105333e-40, - 2.890683584351339e-40, - 2.8958920982545734e-40, - 2.9011107894283793e-40, - 2.9063395640212303e-40, - 2.9115783126605408e-40, - 2.916826890151734e-40, - 2.9220851417149008e-40, - 2.927352745385393e-40, - 2.9326291117072846e-40, - 2.937913745525736e-40, - 2.9432061513226647e-40, - 2.9485057840750917e-40, - 2.9538122149102947e-40, - 2.9591253813411217e-40, - 2.964445400244529e-40, - 2.9697725669856653e-40, - 2.9751072759787756e-40, - 2.9804499005829275e-40, - 2.9858004665122242e-40, - 2.991158695042762e-40, - 2.9965242936083748e-40, - 3.0018968547281464e-40, - 3.0072755724829596e-40, - 3.0126593711614084e-40, - 3.0180465103599047e-40, - 3.023435043210582e-40, - 3.0288230826439748e-40, - 3.034208857157899e-40, - 3.0395907755890722e-40, - 3.0449680363857803e-40, - 3.0503409182690065e-40, - 3.0557097366460912e-40, - 3.0610747849677454e-40, - 3.0664363566301917e-40, - 3.0717946962357703e-40, - 3.077149739140408e-40, - 3.082501277289125e-40, - 3.08784910055869e-40, - 3.093192991808737e-40, - 3.0985327128224053e-40, - 3.103868110847352e-40, - 3.10919924153924e-40, - 3.114526084148992e-40, - 3.119848663272313e-40, - 3.125167025972616e-40, - 3.130481219345251e-40, - 3.1357914216147564e-40, - 3.1410980314596145e-40, - 3.1464015616810513e-40, - 3.1517026701849966e-40, - 3.1570020195944173e-40, - 3.162300320186057e-40, - 3.167598116951797e-40, - 3.1728955126968405e-40, - 3.178192539838284e-40, - 3.183489007823286e-40, - 3.1887845033106268e-40, - 3.1940785854186706e-40, - 3.1993710345965462e-40, - 3.204661760796249e-40, - 3.209950713960253e-40, - 3.2152378698340613e-40, - 3.220523293029568e-40, - 3.225807093475306e-40, - 3.231089526953041e-40, - 3.236370926632939e-40, - 3.2416516393680993e-40, - 3.2469320118819797e-40, - 3.2522123902529477e-40, - 3.2574931184044624e-40, - 3.262774185511868e-40, - 3.2680553215751645e-40, - 3.273336249954146e-40, - 3.2786166680724793e-40, - 3.2838961990724282e-40, - 3.2891744231454512e-40, - 3.2944507798579335e-40, - 3.2997246470169035e-40, - 3.30499541791175e-40, - 3.310262445890923e-40, - 3.315525076490517e-40, - 3.320782721188592e-40, - 3.326035556511442e-40, - 3.3312844749811118e-40, - 3.336530459844898e-40, - 3.3417744946507983e-40, - 3.347017565142711e-40, - 3.352260573605036e-40, - 3.357503706089702e-40, - 3.362746600131642e-40, - 3.3679887879675153e-40, - 3.373229786105031e-40, - 3.3784692028231212e-40, - 3.3837067202169886e-40, - 3.388942410716432e-40, - 3.3941767996847874e-40, - 3.399410430751674e-40, - 3.4046438134489432e-40, - 3.409877468095437e-40, - 3.4151119094115138e-40, - 3.420347515559413e-40, - 3.425584712421377e-40, - 3.430824049736627e-40, - 3.4360660788189206e-40, - 3.4413113216275816e-40, - 3.4465602613132283e-40, - 3.451813299758859e-40, - 3.457070514298448e-40, - 3.462331786329757e-40, - 3.4675969995014444e-40, - 3.4728661229967137e-40, - 3.478139223562644e-40, - 3.4834163143612076e-40, - 3.4886976138383945e-40, - 3.49398363814542e-40, - 3.499274721736035e-40, - 3.5045710885319226e-40, - 3.509872960032775e-40, - 3.515180600972707e-40, - 3.520494307150985e-40, - 3.5258139591434138e-40, - 3.5311393910745403e-40, - 3.5364704371360676e-40, - 3.541806928437056e-40, - 3.5471485895577413e-40, - 3.5524949896337095e-40, - 3.5578460426791736e-40, - 3.5632017706599958e-40, - 3.568562193108661e-40, - 3.5739273908884454e-40, - 3.5792974973026397e-40, - 3.5846726376566543e-40, - 3.5900523686922764e-40, - 3.5954354646265965e-40, - 3.6008208546148583e-40, - 3.606207538573491e-40, - 3.6115945170744293e-40, - 3.616980790895201e-40, - 3.6223655483608208e-40, - 3.6277488861618087e-40, - 3.633131195165791e-40, - 3.638512805411541e-40, - 3.643893971027717e-40, - 3.6492749148220525e-40, - 3.654655859826727e-40, - 3.6600365527050707e-40, - 3.6654159558699868e-40, - 3.670792962423224e-40, - 3.676166536393923e-40, - 3.681535752064406e-40, - 3.686899701684016e-40, - 3.692257646691952e-40, - 3.697610330364925e-40, - 3.702959203725971e-40, - 3.70830560410013e-40, - 3.713650858335069e-40, - 3.718996293280513e-40, - 3.7243432395620725e-40, - 3.729692740066995e-40, - 3.7350447237720624e-40, - 3.740398877716992e-40, - 3.745754888941499e-40, - 3.751112439431371e-40, - 3.756471156328583e-40, - 3.761830657682686e-40, - 3.767190966440553e-40, - 3.772552731397356e-40, - 3.777916656561482e-40, - 3.7832834969401955e-40, - 3.788654001337437e-40, - 3.794028910132976e-40, - 3.7994089789939856e-40, - 3.804794837178146e-40, - 3.810186888846261e-40, - 3.81558548658592e-40, - 3.8209909814461794e-40, - 3.8264037244760935e-40, - 3.8318240667183606e-40, - 3.837252240256814e-40, - 3.84268809090915e-40, - 3.848131358793234e-40, - 3.853581755720299e-40, - 3.85903899320432e-40, - 3.8645028043552675e-40, - 3.869972903205248e-40, - 3.875449032667137e-40, - 3.880930671976095e-40, - 3.8864171436569065e-40, - 3.891907711575286e-40, - 3.897401538557483e-40, - 3.902897776736677e-40, - 3.9083955772509696e-40, - 3.913894124263386e-40, - 3.91939301286803e-40, - 3.9248921399528785e-40, - 3.930391459346581e-40, - 3.935890962184791e-40, - 3.9413906879367035e-40, - 3.946890653428639e-40, - 3.9523905181845605e-40, - 3.95788915961884e-40, - 3.96338528134785e-40, - 3.9688775871150875e-40, - 3.974364788358367e-40, - 3.979845682024572e-40, - 3.98531911274292e-40, - 3.990784154714773e-40, - 3.9962408570967045e-40, - 4.001689535299072e-40, - 4.007130465930938e-40, - 4.012563859013459e-40, - 4.0179899160667874e-40, - 4.023408852803673e-40, - 4.028820884729291e-40, - 4.034225805978231e-40, - 4.039623248380311e-40, - 4.045012849611049e-40, - 4.050394247375932e-40, - 4.055767079380459e-40, - 4.061130982343262e-40, - 4.06648568517224e-40, - 4.071831756135212e-40, - 4.077170214968273e-40, - 4.082502085946186e-40, - 4.087828393595855e-40, - 4.093150172946223e-40, - 4.0984684749125326e-40, - 4.103784321597956e-40, - 4.109098256573837e-40, - 4.1144104068004174e-40, - 4.1197208775556116e-40, - 4.1250297129899585e-40, - 4.1303369380004874e-40, - 4.135642577439955e-40, - 4.140946659960499e-40, - 4.1462493935042905e-40, - 4.151551368017427e-40, - 4.156853306968379e-40, - 4.1621560452433196e-40, - 4.167460460092539e-40, - 4.172767428635284e-40, - 4.1780777810254175e-40, - 4.183392149315804e-40, - 4.188710956348491e-40, - 4.194034574259646e-40, - 4.199363373533125e-40, - 4.204697605487932e-40, - 4.21003743565507e-40, - 4.215383114979569e-40, - 4.220734885270386e-40, - 4.2260928086172845e-40, - 4.231456798127442e-40, - 4.236826716940476e-40, - 4.242202304963761e-40, - 4.247583291155081e-40, - 4.25296955273119e-40, - 4.258361061655564e-40, - 4.263757815570851e-40, - 4.269159907704207e-40, - 4.274567468938509e-40, - 4.279980631043025e-40, - 4.285399525957714e-40, - 4.290824285497995e-40, - 4.296255028891197e-40, - 4.3016918381734e-40, - 4.307134735842615e-40, - 4.312583711522587e-40, - 4.3180387540933534e-40, - 4.323499851518394e-40, - 4.3289670098492396e-40, - 4.334440271695998e-40, - 4.3399196827096325e-40, - 4.345405243013645e-40, - 4.35089680517419e-40, - 4.356394190914623e-40, - 4.361897168618438e-40, - 4.367405468301729e-40, - 4.37291881964556e-40, - 4.378436952331211e-40, - 4.3839595908023014e-40, - 4.3894864637132036e-40, - 4.395017391335439e-40, - 4.400552198559412e-40, - 4.406090708919028e-40, - 4.4116327459066415e-40, - 4.417178130262305e-40, - 4.4227266292019056e-40, - 4.428277965377026e-40, - 4.433831755592571e-40, - 4.439387509227006e-40, - 4.4449447612027565e-40, - 4.450503098345209e-40, - 4.456062191669834e-40, - 4.461621751400537e-40, - 4.467181487763234e-40, - 4.472741217442661e-40, - 4.478301366917294e-40, - 4.4838625229505715e-40, - 4.48942518852189e-40, - 4.494989818831492e-40, - 4.500556829026205e-40, - 4.506126630855397e-40, - 4.511699627849735e-40, - 4.517275311320714e-40, - 4.522851118394002e-40, - 4.528424187070571e-40, - 4.533991655351399e-40, - 4.539550661083377e-40, - 4.545098360173658e-40, - 4.550631967134189e-40, - 4.556148737048165e-40, - 4.561648420211255e-40, - 4.5671344549103136e-40, - 4.572610607834894e-40, - 4.578080618183046e-40, - 4.583548091320829e-40, - 4.589016662707481e-40, - 4.594489971464005e-40, - 4.599971504594882e-40, - 4.605461618463114e-40 - ], - "nc": [ - 4.364260329975996e-46, - 1.2454443574705526e-43, - 4.2301740511145735e-43, - 7.105084694503649e-43, - 9.883060973908155e-43, - 1.2807126021308565e-42, - 1.5752528071628933e-42, - 1.85959339075907e-42, - 2.1451385962051304e-42, - 2.4311869331200185e-42, - 2.7186091907994326e-42, - 3.0167710109665707e-42, - 3.315235870887683e-42, - 3.6081145821131923e-42, - 3.9010621601213947e-42, - 4.187071683337655e-42, - 4.463464255960611e-42, - 4.735510437488226e-42, - 5.0015921021448005e-42, - 5.2632594031591796e-42, - 5.513876140703372e-42, - 5.768309950474672e-42, - 6.016691954896601e-42, - 6.259642347167624e-42, - 6.499303026594863e-42, - 6.7378160492983e-42, - 6.974665508565149e-42, - 7.208065015563543e-42, - 7.438696274412763e-42, - 7.669156516202613e-42, - 7.89945682540562e-42, - 8.127485847018649e-42, - 8.352042730850628e-42, - 8.57452146065029e-42, - 8.795749912038948e-42, - 9.016597312095886e-42, - 9.237230456093618e-42, - 9.457870518194755e-42, - 9.678215180517713e-42, - 9.897375514997534e-42, - 1.0114923123893562e-41, - 1.0331844319833083e-41, - 1.054894107699737e-41, - 1.0767604595473509e-41, - 1.0986222120259254e-41, - 1.120395278823954e-41, - 1.1419894305906467e-41, - 1.1634427107240778e-41, - 1.1848626302815838e-41, - 1.2063343984951752e-41, - 1.2278665722064968e-41, - 1.249359576589437e-41, - 1.2707221564903065e-41, - 1.2918759374433678e-41, - 1.31279290728844e-41, - 1.333481146843042e-41, - 1.3545406345210786e-41, - 1.375872940073036e-41, - 1.397258089675644e-41, - 1.4188149956776459e-41, - 1.440317240254111e-41, - 1.4614980901906797e-41, - 1.482298241978387e-41, - 1.5028330199210497e-41, - 1.5232751687868328e-41, - 1.5438174109184458e-41, - 1.5646079652819633e-41, - 1.5857136479622758e-41, - 1.6069982305890727e-41, - 1.6283168451346434e-41, - 1.6495393048313717e-41, - 1.670526850282446e-41, - 1.6912229142628544e-41, - 1.7117620421770136e-41, - 1.7322576956488402e-41, - 1.752821595481168e-41, - 1.773620001737461e-41, - 1.7947408870734098e-41, - 1.8161631327044254e-41, - 1.8377903334978023e-41, - 1.859510283423695e-41, - 1.8811964327990625e-41, - 1.9027362357562076e-41, - 1.9240373756661613e-41, - 1.9450713679786417e-41, - 1.9658941104790603e-41, - 1.9865775528513786e-41, - 2.0071308148184027e-41, - 2.0276151447397917e-41, - 2.0481489750025743e-41, - 2.068743752075808e-41, - 2.0892986761471092e-41, - 2.1098248998785287e-41, - 2.1304063130913784e-41, - 2.151079977869054e-41, - 2.1718498013687992e-41, - 2.1927021533802996e-41, - 2.2136494171732555e-41, - 2.2347093455870335e-41, - 2.255859403158184e-41, - 2.276994541416141e-41, - 2.298038828609795e-41, - 2.319020334200273e-41, - 2.339902451481448e-41, - 2.360679459240556e-41, - 2.381336553015682e-41, - 2.401896568165224e-41, - 2.4223767195940937e-41, - 2.4427935073220903e-41, - 2.463176349530152e-41, - 2.483513445745564e-41, - 2.503842411562965e-41, - 2.524246352628781e-41, - 2.544756880845822e-41, - 2.565326015241212e-41, - 2.5859406015051454e-41, - 2.606655065692987e-41, - 2.6274700561055583e-41, - 2.6483735977396296e-41, - 2.669411360178786e-41, - 2.6905570209116747e-41, - 2.711792582627251e-41, - 2.7331365666146345e-41, - 2.7545015145425547e-41, - 2.7758483328375734e-41, - 2.797227412945561e-41, - 2.818563206306596e-41, - 2.8397533681340534e-41, - 2.8608154491210385e-41, - 2.881767884414564e-41, - 2.9025480900599704e-41, - 2.923093644817396e-41, - 2.9434195992324485e-41, - 2.963617997933407e-41, - 2.983757802568746e-41, - 3.0038798907656846e-41, - 3.0240328079570674e-41, - 3.0442179699165074e-41, - 3.0644273132094893e-41, - 3.0847404007046423e-41, - 3.105244661594242e-41, - 3.1259347038316134e-41, - 3.146780005060592e-41, - 3.167751372030427e-41, - 3.188804194836633e-41, - 3.209912431335039e-41, - 3.231078458760866e-41, - 3.2522575543659016e-41, - 3.2733664608451193e-41, - 3.29440099134602e-41, - 3.3154148338740397e-41, - 3.3364000264164844e-41, - 3.357284107872798e-41, - 3.3780185058964366e-41, - 3.398612095843147e-41, - 3.419102370888208e-41, - 3.439560517358391e-41, - 3.4600461532908183e-41, - 3.4805501429676673e-41, - 3.5010374548764587e-41, - 3.521515865670713e-41, - 3.5420266462926236e-41, - 3.5626028104508494e-41, - 3.583269511444227e-41, - 3.604043699462269e-41, - 3.6249122073460335e-41, - 3.6458511101618094e-41, - 3.666849960115952e-41, - 3.6878953525961604e-41, - 3.708965351883609e-41, - 3.730051153965014e-41, - 3.751153999716037e-41, - 3.7722566390437585e-41, - 3.793309946944528e-41, - 3.814280488312189e-41, - 3.835201735270658e-41, - 3.85612393862412e-41, - 3.8770562951482463e-41, - 3.897953894599736e-41, - 3.9187709092617864e-41, - 3.939499443081157e-41, - 3.9601543321724414e-41, - 3.9807777471374973e-41, - 4.0014222426485153e-41, - 4.0221252936728845e-41, - 4.0428619882521274e-41, - 4.063580181091176e-41, - 4.0842521298339147e-41, - 4.104910797361172e-41, - 4.1256046964895876e-41, - 4.146357752282636e-41, - 4.1671564926984414e-41, - 4.187982193538753e-41, - 4.2088235006370466e-41, - 4.2296745483831407e-41, - 4.25052836811195e-41, - 4.2713761274485736e-41, - 4.2922145826472686e-41, - 4.3130487833917745e-41, - 4.333894655035953e-41, - 4.3547654727099754e-41, - 4.3756607328230203e-41, - 4.396562923163701e-41, - 4.417454989016692e-41, - 4.4383331347730494e-41, - 4.459202269206852e-41, - 4.4800645456236936e-41, - 4.500914256966523e-41, - 4.5217489633526896e-41, - 4.5425713984600123e-41, - 4.563390701703024e-41, - 4.5842114628628735e-41, - 4.605032463089496e-41, - 4.625846859969909e-41, - 4.646651018165986e-41, - 4.667447496194904e-41, - 4.688243290271724e-41, - 4.709045461413987e-41, - 4.72985489398737e-41, - 4.75067007802329e-41, - 4.771483902597688e-41, - 4.79229171592074e-41, - 4.813088763932399e-41, - 4.833875292927566e-41, - 4.854656473557048e-41, - 4.87543906044506e-41, - 4.896232116070833e-41, - 4.917038204843493e-41, - 4.937857166613349e-41, - 4.958681978821192e-41, - 4.979501164021746e-41, - 5.000305415232061e-41, - 5.02108825971918e-41, - 5.041853340208554e-41, - 5.062606615226738e-41, - 5.083354182700218e-41, - 5.104100835418691e-41, - 5.124845489841225e-41, - 5.14558548859889e-41, - 5.166315935142457e-41, - 5.187034397782833e-41, - 5.207746431483091e-41, - 5.228458578317916e-41, - 5.249182724832029e-41, - 5.269924142529535e-41, - 5.290685308630857e-41, - 5.311467248859803e-41, - 5.332268134145396e-41, - 5.353086521436493e-41, - 5.373920573525667e-41, - 5.394767418705751e-41, - 5.41562933579851e-41, - 5.436511145035441e-41, - 5.457419358224816e-41, - 5.478361719951324e-41, - 5.49933920891144e-41, - 5.520351593265473e-41, - 5.541396665381328e-41, - 5.562473606348592e-41, - 5.58358657214576e-41, - 5.604739810296202e-41, - 5.625932264448495e-41, - 5.647150397655195e-41, - 5.668376276130076e-41, - 5.689592926361874e-41, - 5.710796930718666e-41, - 5.732000619084643e-41, - 5.753219006424692e-41, - 5.774464949027788e-41, - 5.795733512172872e-41, - 5.817005503908546e-41, - 5.838260160755786e-41, - 5.859479403153975e-41, - 5.880661138572231e-41, - 5.901812366411388e-41, - 5.922940751769982e-41, - 5.944051955283113e-41, - 5.965141488779185e-41, - 5.9862015604005e-41, - 6.007224431247491e-41, - 6.028204202695972e-41, - 6.049146024418143e-41, - 6.070059562834899e-41, - 6.090954537797368e-41, - 6.111839745129705e-41, - 6.132715349107434e-41, - 6.153577610196055e-41, - 6.174422980126663e-41, - 6.195248079138471e-41, - 6.216054187914761e-41, - 6.236843618354762e-41, - 6.25761727695397e-41, - 6.278376098477749e-41, - 6.299119890349203e-41, - 6.319851732400957e-41, - 6.340579352498227e-41, - 6.361310625189997e-41, - 6.382053622492383e-41, - 6.402812743329602e-41, - 6.423584538060126e-41, - 6.444364718809067e-41, - 6.465148705103163e-41, - 6.48593108728619e-41, - 6.506710046898812e-41, - 6.52748511140984e-41, - 6.548255854278807e-41, - 6.56902287000358e-41, - 6.58978880146295e-41, - 6.610557218502444e-41, - 6.631331723612276e-41, - 6.652115993795007e-41, - 6.672913638415569e-41, - 6.693724665974577e-41, - 6.71454814998774e-41, - 6.735383154538337e-41, - 6.756227661557958e-41, - 6.77708104567671e-41, - 6.797946207280559e-41, - 6.81882622090098e-41, - 6.839724247400263e-41, - 6.860643295811334e-41, - 6.881580324000865e-41, - 6.902529841306286e-41, - 6.923486351487819e-41, - 6.944444650328333e-41, - 6.965403624262304e-41, - 6.986369252507608e-41, - 7.007348462591791e-41, - 7.028348167427383e-41, - 7.049373301038787e-41, - 7.0704218324859e-41, - 7.091487309794263e-41, - 7.112563048401134e-41, - 7.133642454812664e-41, - 7.154721836357891e-41, - 7.175801445824857e-41, - 7.196882210066399e-41, - 7.217965065498443e-41, - 7.239050786495454e-41, - 7.260137487211747e-41, - 7.281222696219573e-41, - 7.302304848602296e-41, - 7.323382388722647e-41, - 7.344454017681765e-41, - 7.365521990616055e-41, - 7.386590284862898e-41, - 7.407662452901796e-41, - 7.428742043906169e-41, - 7.449832310036397e-41, - 7.470931606784514e-41, - 7.492033294902032e-41, - 7.513130008244741e-41, - 7.534214374736341e-41, - 7.555279190479447e-41, - 7.576321502292961e-41, - 7.597344793320486e-41, - 7.618354329512404e-41, - 7.639355406544087e-41, - 7.660353296679037e-41, - 7.681351681441874e-41, - 7.702349882513727e-41, - 7.723344902674666e-41, - 7.744333628566458e-41, - 7.765312946973356e-41, - 7.786279822059825e-41, - 7.807232116330477e-41, - 7.828169236772318e-41, - 7.849090800023126e-41, - 7.869996422720681e-41, - 7.890885671191477e-41, - 7.911757575227955e-41, - 7.932610528429677e-41, - 7.953442778414555e-41, - 7.974252572623441e-41, - 7.995038186324013e-41, - 8.015799800612967e-41, - 8.036541270925596e-41, - 8.05726746121668e-41, - 8.077983276718913e-41, - 8.09869361897495e-41, - 8.119402883736423e-41, - 8.140111948544707e-41, - 8.160820085623261e-41, - 8.181526524266957e-41, - 8.202230493764623e-41, - 8.222931234926954e-41, - 8.243629311215185e-41, - 8.264327970801167e-41, - 8.285030960633973e-41, - 8.305742043499032e-41, - 8.326464982181764e-41, - 8.347203483463236e-41, - 8.367960350829928e-41, - 8.388736985683217e-41, - 8.409534328886226e-41, - 8.43035331452278e-41, - 8.451194876631129e-41, - 8.472059849391951e-41, - 8.492948625342979e-41, - 8.513862145561079e-41, - 8.534801564779366e-41, - 8.555768038093411e-41, - 8.576762724078432e-41, - 8.597786927280976e-41, - 8.618842133876769e-41, - 8.639929086377663e-41, - 8.66104839078383e-41, - 8.682200653095443e-41, - 8.703386477255695e-41, - 8.724605501556551e-41, - 8.745854643067266e-41, - 8.767129994687798e-41, - 8.788427599947561e-41, - 8.809743502375969e-41, - 8.831073748584265e-41, - 8.852415491783645e-41, - 8.873767951966805e-41, - 8.895129386819556e-41, - 8.916497892898674e-41, - 8.937871569015881e-41, - 8.959248513838035e-41, - 8.980626198986888e-41, - 9.002000954767027e-41, - 9.023370856961707e-41, - 9.044734305915905e-41, - 9.066089701972131e-41, - 9.087435444423598e-41, - 9.108769966137076e-41, - 9.130091604290285e-41, - 9.151397489267048e-41, - 9.172684415564054e-41, - 9.193949177677937e-41, - 9.215188570105322e-41, - 9.236399514737092e-41, - 9.257580591020691e-41, - 9.278732722637227e-41, - 9.299857596766485e-41, - 9.320956908169597e-41, - 9.342032351607699e-41, - 9.363085620722128e-41, - 9.384118323835301e-41, - 9.405131812103113e-41, - 9.426127253928225e-41, - 9.44710580454598e-41, - 9.468068617532403e-41, - 9.489016845979245e-41, - 9.509951588739606e-41, - 9.530873690383854e-41, - 9.551784240857912e-41, - 9.57268444218926e-41, - 9.593575496434058e-41, - 9.61445860564862e-41, - 9.635334974285124e-41, - 9.656205945111926e-41, - 9.677073363534195e-41, - 9.697939497447667e-41, - 9.718806643667895e-41, - 9.739677099010414e-41, - 9.76055316029077e-41, - 9.781437182933565e-41, - 9.802332051514927e-41, - 9.823240210822033e-41, - 9.844163683369507e-41, - 9.865104487703909e-41, - 9.886064642371786e-41, - 9.907046165919712e-41, - 9.928050640484115e-41, - 9.949077661495387e-41, - 9.970126200297778e-41, - 9.991195206888186e-41, - 1.0012283631429602e-40, - 1.0033390425241963e-40, - 1.0054514540647167e-40, - 1.007565523286262e-40, - 1.0096812407165424e-40, - 1.0117985775291165e-40, - 1.0139175015242617e-40, - 1.016037980502254e-40, - 1.0181599822633703e-40, - 1.0202834745170462e-40, - 1.0224084063444443e-40, - 1.0245346607968483e-40, - 1.026662058481277e-40, - 1.0287904116070623e-40, - 1.0309195323835352e-40, - 1.0330492330200292e-40, - 1.03517932568621e-40, - 1.0373096095097994e-40, - 1.0394398884767186e-40, - 1.041570044134894e-40, - 1.0436999694263306e-40, - 1.0458295573502267e-40, - 1.0479587009059877e-40, - 1.0500872930937358e-40, - 1.0522152468931238e-40, - 1.0543425374658097e-40, - 1.0564691238749285e-40, - 1.0585949587926136e-40, - 1.0607199948957772e-40, - 1.0628441848371513e-40, - 1.0649674811806983e-40, - 1.067089830319591e-40, - 1.0692111208512706e-40, - 1.0713311470154201e-40, - 1.0734496751435511e-40, - 1.075566471741382e-40, - 1.0776813033146288e-40, - 1.07979393636901e-40, - 1.0819041396999506e-40, - 1.084011757021729e-40, - 1.0861168748877495e-40, - 1.0882197527011423e-40, - 1.0903206563460493e-40, - 1.092419851706556e-40, - 1.094517604666749e-40, - 1.0966141811107148e-40, - 1.0987098440123723e-40, - 1.1008047869020852e-40, - 1.1028989817433181e-40, - 1.1049923502127546e-40, - 1.1070848141945168e-40, - 1.109176295595077e-40, - 1.1112667163209436e-40, - 1.1133559976426721e-40, - 1.1154440451614119e-40, - 1.117530888146511e-40, - 1.1196167227586653e-40, - 1.1217017541737989e-40, - 1.1237861875672582e-40, - 1.125870228111988e-40, - 1.1279540809189775e-40, - 1.1300379572231136e-40, - 1.1321220929672226e-40, - 1.1342065230406587e-40, - 1.1362911712851761e-40, - 1.1383759607977076e-40, - 1.1404608146751855e-40, - 1.142545656014543e-40, - 1.144630407912712e-40, - 1.146714984974518e-40, - 1.1487993265335062e-40, - 1.150883622178766e-40, - 1.1529681288828905e-40, - 1.1550531034895652e-40, - 1.1571388028424732e-40, - 1.1592254837852978e-40, - 1.161313403158692e-40, - 1.1634028024488543e-40, - 1.1654937930321907e-40, - 1.1675862215155783e-40, - 1.169679884948654e-40, - 1.1717745806595408e-40, - 1.1738701060029459e-40, - 1.1759662583388727e-40, - 1.1780628350268745e-40, - 1.180159629042052e-40, - 1.1822564646855468e-40, - 1.1843533174764077e-40, - 1.1864501915503049e-40, - 1.1885470901127158e-40, - 1.1906440163691171e-40, - 1.1927409735249836e-40, - 1.1948379647568542e-40, - 1.1969350087713704e-40, - 1.1990322002595892e-40, - 1.2011296374975539e-40, - 1.203227415493675e-40, - 1.2053256311517457e-40, - 1.207424381387182e-40, - 1.2095237631154003e-40, - 1.2116238732518156e-40, - 1.2137248011904395e-40, - 1.2158265399337636e-40, - 1.2179289636480707e-40, - 1.2200319080083657e-40, - 1.2221352091805214e-40, - 1.2242387033989894e-40, - 1.226342226898219e-40, - 1.2284456159126614e-40, - 1.2305487071680277e-40, - 1.2326513821237411e-40, - 1.2347536283452789e-40, - 1.2368554880292447e-40, - 1.2389570017660887e-40, - 1.2410582082115368e-40, - 1.2431591459620797e-40, - 1.2452598535209978e-40, - 1.2473603693833343e-40, - 1.2494607270372537e-40, - 1.2515609228134957e-40, - 1.2536609535513231e-40, - 1.2557608284499264e-40, - 1.2578605619666724e-40, - 1.259960169009942e-40, - 1.2620596644881158e-40, - 1.264159063309575e-40, - 1.2662583804525756e-40, - 1.2683576567228528e-40, - 1.2704569793519816e-40, - 1.2725563970903405e-40, - 1.2746559471392358e-40, - 1.2767556637396003e-40, - 1.2788555810558096e-40, - 1.2809557332522408e-40, - 1.2830561544932708e-40, - 1.2851568777329758e-40, - 1.2872578906595771e-40, - 1.2893591425406186e-40, - 1.2914606060018094e-40, - 1.2935622601393715e-40, - 1.2956640865280851e-40, - 1.297766066765754e-40, - 1.299868182450181e-40, - 1.3019704151791697e-40, - 1.304072748940367e-40, - 1.306175214655509e-40, - 1.3082778773332936e-40, - 1.3103807938535205e-40, - 1.312484014697311e-40, - 1.3145875871133034e-40, - 1.3166915583209653e-40, - 1.3187959755741352e-40, - 1.3209008861594418e-40, - 1.323006336547585e-40, - 1.325112356699954e-40, - 1.327218973442809e-40, - 1.329326226335025e-40, - 1.3314341609383012e-40, - 1.3335428268587264e-40, - 1.3356522737983607e-40, - 1.337762551459263e-40, - 1.339873709543493e-40, - 1.3419857974264747e-40, - 1.3440988492780206e-40, - 1.3462128409479286e-40, - 1.3483276912322247e-40, - 1.3504433124820164e-40, - 1.3525596138487885e-40, - 1.3546765042171218e-40, - 1.3567938924715986e-40, - 1.3589116874968012e-40, - 1.3610297981792475e-40, - 1.3631481355381065e-40, - 1.3652666455572486e-40, - 1.3673853639211719e-40, - 1.3695043436926496e-40, - 1.3716236398955791e-40, - 1.3737433081610473e-40, - 1.375863404121893e-40, - 1.3779839834109578e-40, - 1.3801051016610835e-40, - 1.3822268142205947e-40, - 1.3843491679637182e-40, - 1.3864721441475444e-40, - 1.3885956827988635e-40, - 1.3907197219622243e-40, - 1.3928441979926353e-40, - 1.394969047131667e-40, - 1.3970942056195538e-40, - 1.3992196096661457e-40, - 1.4013451954555288e-40, - 1.4034709013752471e-40, - 1.4055966854732224e-40, - 1.4077225463276411e-40, - 1.409848489659506e-40, - 1.4119745227127689e-40, - 1.414100653588171e-40, - 1.4162268903960125e-40, - 1.4183532412465958e-40, - 1.4204797142502222e-40, - 1.4226063170423975e-40, - 1.4247330428550885e-40, - 1.4268598474158489e-40, - 1.4289866588455874e-40, - 1.4311134031857398e-40, - 1.4332400039799386e-40, - 1.4353663839222915e-40, - 1.4374924657062022e-40, - 1.439618172025074e-40, - 1.4417434255723086e-40, - 1.4438681511352298e-40, - 1.4459923048047878e-40, - 1.4481159028473641e-40, - 1.4502389928110446e-40, - 1.4523616238269705e-40, - 1.454483848816646e-40, - 1.4566057218794594e-40, - 1.4587272971129125e-40, - 1.460848628614503e-40, - 1.46296977048173e-40, - 1.465090775766968e-40, - 1.4672116819491086e-40, - 1.4693324855828729e-40, - 1.4714531593932345e-40, - 1.4735736751185235e-40, - 1.4756940014333032e-40, - 1.4778141056561799e-40, - 1.4799339550997269e-40, - 1.48205351707651e-40, - 1.4841727588970478e-40, - 1.4862916476994633e-40, - 1.4884101479273147e-40, - 1.4905282401813163e-40, - 1.4926459248724674e-40, - 1.4947632034656482e-40, - 1.496880080260955e-40, - 1.498996562087777e-40, - 1.5011126558642033e-40, - 1.5032283685083223e-40, - 1.5053437069382231e-40, - 1.5074586782224752e-40, - 1.5095733076748015e-40, - 1.5116876447539329e-40, - 1.5138017188171069e-40, - 1.5159155561528716e-40, - 1.5180291814665547e-40, - 1.5201426150658217e-40, - 1.522255876500924e-40, - 1.5243689853221112e-40, - 1.5264819610796361e-40, - 1.5285948233237488e-40, - 1.5307075847292259e-40, - 1.5328202145727282e-40, - 1.534932694744797e-40, - 1.537045021843538e-40, - 1.5391571926456916e-40, - 1.5412692059897394e-40, - 1.5433810625600017e-40, - 1.5454927631131438e-40, - 1.5476043084082561e-40, - 1.5497156992044303e-40, - 1.551826936385952e-40, - 1.5539380361501349e-40, - 1.5560490298988748e-40, - 1.5581599211198955e-40, - 1.5602707093105757e-40, - 1.5623813937800829e-40, - 1.5644919725003605e-40, - 1.566602442864422e-40, - 1.5687128022629598e-40, - 1.5708230480866658e-40, - 1.5729331777261616e-40, - 1.5750431881242713e-40, - 1.5771530674557918e-40, - 1.5792628103071783e-40, - 1.5813724267354663e-40, - 1.5834819275221943e-40, - 1.5855913237070372e-40, - 1.5877006276349332e-40, - 1.5898098520624278e-40, - 1.5919190097462207e-40, - 1.5940281134430103e-40, - 1.5961371759094984e-40, - 1.5982462102587998e-40, - 1.6003552339908865e-40, - 1.6024642620121801e-40, - 1.6045733046552908e-40, - 1.6066823721304489e-40, - 1.608791474695113e-40, - 1.6109006228962694e-40, - 1.6130098273866185e-40, - 1.6151190988190138e-40, - 1.6172284478463082e-40, - 1.6193378851213587e-40, - 1.6214474206511077e-40, - 1.6235570542592377e-40, - 1.6256667842895e-40, - 1.6277766151265798e-40, - 1.6298865513702668e-40, - 1.6319965974280752e-40, - 1.6341067553507995e-40, - 1.63621702560921e-40, - 1.6383274086551605e-40, - 1.6404379049555156e-40, - 1.6425485149783351e-40, - 1.6446592394533174e-40, - 1.6467700912229438e-40, - 1.6488810838250068e-40, - 1.6509922063928522e-40, - 1.6531034458898875e-40, - 1.6552147892949201e-40, - 1.6573262250937269e-40, - 1.6594377445245027e-40, - 1.6615493391186312e-40, - 1.663661000407497e-40, - 1.6657727199224832e-40, - 1.6678844891949734e-40, - 1.6699962951314222e-40, - 1.672108116202167e-40, - 1.674219973062339e-40, - 1.6763318993023096e-40, - 1.6784439285127991e-40, - 1.6805560941276036e-40, - 1.6826684280836034e-40, - 1.684780961487604e-40, - 1.6868937254375645e-40, - 1.6890067510314451e-40, - 1.691120069367208e-40, - 1.6932337115585924e-40, - 1.695347708476021e-40, - 1.6974620667884215e-40, - 1.6995767626595394e-40, - 1.7016917703658729e-40, - 1.7038070642219275e-40, - 1.7059226187051018e-40, - 1.7080384085585478e-40, - 1.7101544085871651e-40, - 1.7122705935958539e-40, - 1.7143869383895154e-40, - 1.7165034177730499e-40, - 1.7186200082479044e-40, - 1.720736701954096e-40, - 1.72285350235902e-40, - 1.7249704148425475e-40, - 1.727087444806429e-40, - 1.7292045976526894e-40, - 1.7313218790424827e-40, - 1.7334392953757992e-40, - 1.7355568531834475e-40, - 1.7376745589673311e-40, - 1.7397924191346709e-40, - 1.741910440073333e-40, - 1.7440286249981179e-40, - 1.746146960230862e-40, - 1.7482654453642836e-40, - 1.750384088633535e-40, - 1.7525028983003817e-40, - 1.754621882626577e-40, - 1.756741049726585e-40, - 1.7588604071999752e-40, - 1.7609799625338674e-40, - 1.7630997232153817e-40, - 1.7652196967316388e-40, - 1.7673398905697583e-40, - 1.7694603148901986e-40, - 1.7715809960594532e-40, - 1.7737019361313947e-40, - 1.7758231208715945e-40, - 1.7779445359379183e-40, - 1.7800661669882288e-40, - 1.7821879996803489e-40, - 1.7843100196717766e-40, - 1.7864322126198611e-40, - 1.788554564181949e-40, - 1.7906770600153887e-40, - 1.7927996857775264e-40, - 1.7949224261109584e-40, - 1.7970452489091829e-40, - 1.799168139516687e-40, - 1.8012911128310086e-40, - 1.8034141848115485e-40, - 1.8055373714177067e-40, - 1.807660688598095e-40, - 1.8097841523726565e-40, - 1.8119077789382811e-40, - 1.8140315845072563e-40, - 1.8161555852918652e-40, - 1.818279797504394e-40, - 1.8204042373663699e-40, - 1.8225289257747181e-40, - 1.8246538807166406e-40, - 1.8267790799421647e-40, - 1.8289044939414115e-40, - 1.8310300932045047e-40, - 1.833155848221565e-40, - 1.8352817293932408e-40, - 1.8374077063377912e-40, - 1.8395337482690794e-40, - 1.8416598243975814e-40, - 1.8437859039739845e-40, - 1.845911956478728e-40, - 1.84803795159914e-40, - 1.850163862294271e-40, - 1.8522896814295785e-40, - 1.854415418186093e-40, - 1.8565410823400895e-40, - 1.8586666836678404e-40, - 1.8607922319456196e-40, - 1.862917737274714e-40, - 1.8650432113127597e-40, - 1.8671686661827043e-40, - 1.8692941140075824e-40, - 1.8714195669104263e-40, - 1.873545037014268e-40, - 1.875670535403159e-40, - 1.8777960635459063e-40, - 1.87992161206762e-40, - 1.8820471677594797e-40, - 1.8841727167501203e-40, - 1.886298245137461e-40, - 1.888423739019421e-40, - 1.8905491841755194e-40, - 1.892674564913447e-40, - 1.894799865115901e-40, - 1.896925068665538e-40, - 1.899050159445012e-40, - 1.90117512133698e-40, - 1.903299938200153e-40, - 1.905424594165164e-40, - 1.9075490767784923e-40, - 1.9096733752076875e-40, - 1.9117974786291374e-40, - 1.9139213762192286e-40, - 1.9160450571543493e-40, - 1.918168510907185e-40, - 1.9202917297697495e-40, - 1.9224147075942787e-40, - 1.924537438249514e-40, - 1.9266599156041988e-40, - 1.928782133527077e-40, - 1.9309040865797816e-40, - 1.9330257780503073e-40, - 1.935147210779864e-40, - 1.937268382744782e-40, - 1.939389291814434e-40, - 1.9415099358581914e-40, - 1.943630312745428e-40, - 1.9457504203762553e-40, - 1.947870257952709e-40, - 1.949989826432631e-40, - 1.952109126897939e-40, - 1.954228160430547e-40, - 1.9563469274329828e-40, - 1.958465418863466e-40, - 1.9605836144484244e-40, - 1.9627014920173743e-40, - 1.9648190399054347e-40, - 1.9669362476198474e-40, - 1.969053104667858e-40, - 1.9711696005567102e-40, - 1.973285724793647e-40, - 1.9754014665944672e-40, - 1.9775168130755634e-40, - 1.9796317504333003e-40, - 1.981746264860131e-40, - 1.98386034254851e-40, - 1.9859739696908912e-40, - 1.988087133353154e-40, - 1.9901998287234693e-40, - 1.9923120538370175e-40, - 1.9944238058525104e-40, - 1.996535090452113e-40, - 1.9986459354607606e-40, - 2.0007563722486383e-40, - 2.002866432185931e-40, - 2.0049761465915627e-40, - 2.0070855465972854e-40, - 2.0091946632921425e-40, - 2.011303527765178e-40, - 2.0134121711054336e-40, - 2.015520624401954e-40, - 2.01762891689146e-40, - 2.0197370710762503e-40, - 2.0218451124417828e-40, - 2.0239530678063244e-40, - 2.0260609639881404e-40, - 2.028168827805501e-40, - 2.0302766860766743e-40, - 2.032384565619973e-40, - 2.0344924934663317e-40, - 2.0366004860677655e-40, - 2.038708540270005e-40, - 2.0408166510182467e-40, - 2.042924813257691e-40, - 2.0450330219335854e-40, - 2.0471412744025413e-40, - 2.0492495716862136e-40, - 2.05135789837513e-40, - 2.0534662349579294e-40, - 2.055574561923252e-40, - 2.0576828597597373e-40, - 2.0597911089560246e-40, - 2.061899290000753e-40, - 2.064007383358026e-40, - 2.066115369344535e-40, - 2.068223228222174e-40, - 2.0703309402527472e-40, - 2.0724384856980574e-40, - 2.074545844821908e-40, - 2.076652998660761e-40, - 2.078759931528931e-40, - 2.080866671252236e-40, - 2.0829732619318804e-40, - 2.0850797476841753e-40, - 2.087186172625433e-40, - 2.089292580871964e-40, - 2.091399016540079e-40, - 2.09350552373221e-40, - 2.0956121461601185e-40, - 2.097718927100508e-40, - 2.0998259098072998e-40, - 2.101933137534413e-40, - 2.1040406535357684e-40, - 2.1061485020799148e-40, - 2.1082567469304186e-40, - 2.1103654079121712e-40, - 2.112474445047821e-40, - 2.1145838161319533e-40, - 2.11669347891547e-40, - 2.11880339008896e-40 - ] - } - } - } -} \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_CC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_CC_flat.pckl deleted file mode 100755 index 07d8011e7..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_CC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.005871885505675068 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'\xa0\xd3{\xeb*\xb9\xec?l\xc4\xad\x90\xb5\x93\xe9?\xf7*\xfb\xf2\xf5\xe8\xf4?b+\x0c\x81o\xe3\xf5?\x8f\xefZH\xe7\xa1\xec?\x86\x9c|r\xf7T\xed?X\x1e\xafwb\xe3\xf1?\xae\xd6\xd9\x06\xb6\xd9\xf6?\xfec\x98\xad\xa1\xef\xeb?n\x8f\xa3\xa1d\xfc\xeb?\x1eZs\x83\xb5a\xf4?E\xff;\xcbP\x0b\xf6?\x0c\xb9\xa2\xee\\\xc3\xeb?\x8e\x94\t\xc7 \x99\xec?T\xc9A\xd5e\x8d\xf4?\xe6\xc1\x18\xea\t#\xf7?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_NC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_NC_flat.pckl deleted file mode 100755 index 6e551fc3f..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_Bar_NC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.0023489892109734645 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'\xe7N\x1e\xad\xdf\xa1\xee?\xd7\xcd"\x8an\x90\xee?\xcd\xef\xe6\xb6\x9fn\xef?"\xd5\x8b\xf9ER\xf3?\x97\xb7\xd0\xa5\x00\x11\xf0?L\x074\x13u\x84\xef?\xd6u\x9b\xf2\xdc\x11\xf0?n\xa4KF\xa6\xe6\xef?(b\x15\xc4\x84\xe5\xed?\xd9\x18\xcf\xb7\x00\x9e\xef?z\xa6\xf4\x9f9C\xf1?\x7f\xf7\x82\x14\xbd\x12\xf2?\xce\xa4\x95!T\x9c\xee?\n\x1b\xb8\xe2\x96\xac\xef?\x06f\x0b\'1\x18\xf1?\xb4\x80\xf3d\x02e\xf1?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_CC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_CC_flat.pckl deleted file mode 100755 index fbffc5515..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_CC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.00025103387327947234 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'\xad\x1b\xda\xcfu@\xf0?\x97\xce\xc7\xc2\xb8P\xef?%\xf3\xb0V\xadu\xf0?\xf2\x0c\x1d\xb7\x8aJ\xef?\x1fT\x9a\xaf"\x03\xf0?\xf8\xefV\xf5\x13\xf8\xee?x\xa5\xc8\xb6\r)\xf0?\xc9\x1d\x03\xbctl\xf0?\x98\x7f\xef\xb7\x97\xb1\xef?N\x01\x10\xbfg}\xf0?\xe0#\xa7@\xb8\xfe\xef?""\xd4\x91a\xa9\xee?\x13%I\x8bq\x86\xed?\x08}\xfe\xcd\x7f\xc5\xef?XhK\x89}\xbe\xf0?\xb1\x19s\xb5^\xd6\xf1?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_NC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_NC_flat.pckl deleted file mode 100755 index 8b1d70129..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat/NuMu_NC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.0016689262594608992 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'q\xbc\x91\xaf\xec\xc4\xf0?\xe1P\x12_\xa3\x1c\xf0?\xa3\xb8de\xbd\x1f\xee?\x14\xe7\x8c\x1f\xfel\xef?.\xb7\x80\xc1H\x84\xf0?:7[\xc3gr\xef?\xde\xcf\x89 .|\xf0?\xa5\x13\x82\x1d5n\xee?`\xde\xf6R\xef\x1c\xf0?\x8e\xf1\xf1\xc1\xb5\x94\xef?A\x9dQ}a\xd6\xef?\x1djXs\xfa\x06\xf0?\xbb\xf5\x10#\x1e\x08\xf0?\xca\xb0\xee.\x00P\xf0?\xf1u\x83\xe5}\xda\xef?\x87\xf0\xf7o\xe7x\xef?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_CC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_CC_flat.pckl deleted file mode 100755 index 37f83f2fa..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_Bar_CC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.005720602978378743 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'\x07i!\xfa\x8b\x91\xec?=\xf5t\x18\xd5\xe4\xe9?4?\x96\xfb\x01\xea\xf4?\xf8#m\xa3\xeb\xf4\xf5?\x7fU"\xe6.\xc4\xec?#\x121\x18\x86Z\xed?\xbeBl\xbdA\xcb\xf1?-\xf1pi\xa6\x9a\xf6?\x91\xa9:\xf2\x95\x01\xec?Oy@#\xa3\x0c\xec?\xe9>k\x1c\xd8c\xf4?w5\xc6\xd6\xf9\xcc\xf5?\x0fY\xb1NX\xf4\xeb?\x1e\x0fi\xe0\x02\xd4\xec?\x1b\xe5\x97]\xef?\x85\xb4\xba\xees\x03\xf0?\xa0-\xc7[\x00\xd8\xef?Fc\x92\xf7\xd5\x02\xee?\xd5\x7f\x04_t\xb5\xef?\xca-\x9db\x048\xf1?|7\xc8|\x88\xe1\xf1?h3\xec\xae\x97\xd4\xee?o\r5\xa5\x9c\xbf\xef?\xa7\x1d\xc2Z\xcf\xf3\xf0?T\x92\x10_\x93\x19\xf1?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_CC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_CC_flat.pckl deleted file mode 100755 index f52137b90..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_CC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.00025499083697700666 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S"\xa12e\xd5\x7f/\xf0?\xda\xd7\xb5hF\x89\xef?\xed\xccZ\x897n\xf0?\x80\x06Vk\x8aP\xef?g!\x03|p\x0b\xf0?\xb44\xbea\xd6\xf3\xee?\xfd\xe8V\xc7%&\xf0?\x9c']\\Ef\xf0?!\xd7\xf7Ch\xa1\xef?\x9e\xa8;\x1b)i\xf0?O\xa6kv]\x0b\xf0?X\xbf\xe6\x80\x0c\xcc\xee?\xba\xa7\xe9\xf1W\x7f\xed?\xb9\xd0\x0b&\xa3\xb5\xef?\xff\xadZ\xa7.\xcc\xf0?\xff\xfa \x96{\xda\xf1?" -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_NC_flat.pckl b/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_NC_flat.pckl deleted file mode 100755 index cd3ec2a3c..000000000 --- a/pisa_examples/resources/cross_sections/dis_csms_splines_flat_no_nucl_corr/NuMu_NC_flat.pckl +++ /dev/null @@ -1,89 +0,0 @@ -ccopy_reg -_reconstructor -p0 -(cscipy.interpolate.fitpack2 -SmoothBivariateSpline -p1 -c__builtin__ -object -p2 -Ntp3 -Rp4 -(dp5 -S'fp' -p6 -F0.0015930678452383393 -sS'degrees' -p7 -(I3 -I3 -tp8 -sS'tck' -p9 -(cnumpy.core.multiarray -_reconstruct -p10 -(cnumpy -ndarray -p11 -(I0 -tp12 -S'b' -p13 -tp14 -Rp15 -(I1 -(I8 -tp16 -cnumpy -dtype -p17 -(S'f8' -p18 -I0 -I1 -tp19 -Rp20 -(I3 -S'<' -p21 -NNNI-1 -I-1 -I0 -tp22 -bI00 -S'VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@VUUUUU\x01@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@\xaa\xaa\xaa\xaa\xaa\xaa\x0e@' -p23 -tp24 -bg10 -(g11 -(I0 -tp25 -g13 -tp26 -Rp27 -(I1 -(I8 -tp28 -g20 -I00 -S'UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xb5?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?UUUUUU\xed?' -p29 -tp30 -bg10 -(g11 -(I0 -tp31 -g13 -tp32 -Rp33 -(I1 -(I16 -tp34 -g20 -I00 -S'\x15\xef\xea\xb4\xce\xb4\xf0?|,`\xa5!E\xf0?z)\xa5\x8c\xed\xfc\xed?\xfc\xa1`\xc5\tm\xef?\x8f\xf5-\xbc\x81\x8c\xf0?E*\xc0 sV\xef?XC$"h~\xf0?\x9b\xc1X\xe1\x81m\xee?\x84U\xe5d/\x1c\xf0?\xbez\\|aq\xef?\xf5%)\xcd\xed\xef\xef?\x1cq\xdc\x9b\xc4\x0c\xf0?\xf10M\x98-\r\xf0?W\x1b\x166\xe3F\xf0?0 \xaa\x90\x12\xdd\xef?p\x88N\xbc.v\xef?' -p35 -tp36 -btp37 -sb. \ No newline at end of file diff --git a/pisa_examples/resources/cross_sections/genie_xsec_H2O.root b/pisa_examples/resources/cross_sections/genie_xsec_H2O.root deleted file mode 100644 index d53926c46..000000000 Binary files a/pisa_examples/resources/cross_sections/genie_xsec_H2O.root and /dev/null differ diff --git a/pisa_examples/resources/cross_sections/interp_nutau_xsec.pckl b/pisa_examples/resources/cross_sections/interp_nutau_xsec.pckl deleted file mode 100644 index b4e6f862f..000000000 Binary files a/pisa_examples/resources/cross_sections/interp_nutau_xsec.pckl and /dev/null differ diff --git a/pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl b/pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl deleted file mode 100644 index 1f27c13b2..000000000 Binary files a/pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl and /dev/null differ diff --git a/pisa_examples/resources/cross_sections/tot_xsec_corr_Q2min1_isoscalar.pckl b/pisa_examples/resources/cross_sections/tot_xsec_corr_Q2min1_isoscalar.pckl deleted file mode 100755 index 73cae3f0d..000000000 --- a/pisa_examples/resources/cross_sections/tot_xsec_corr_Q2min1_isoscalar.pckl +++ /dev/null @@ -1,273 +0,0 @@ -(dp0 -S'NuBar' -p1 -(dp2 -S'CC' -p3 -(dp4 -S'lgEmax' -p5 -F4.0 -sS'c' -p6 -cnumpy.core.multiarray -scalar -p7 -(cnumpy -dtype -p8 -(S'f8' -p9 -I0 -I1 -tp10 -Rp11 -(I3 -S'<' -p12 -NNNI-1 -I-1 -I0 -tp13 -bS'\r\x8a\xac\x9b\x97\xa7\xf3?' -p14 -tp15 -Rp16 -sS'linear' -p17 -(lp18 -g7 -(g11 -S'\x84\xf9\xd4\xf8(\x13\xd1\xbf' -p19 -tp20 -Rp21 -ag7 -(g11 -S'ZG\x05\xae\xe8\xc4\xfa?' -p22 -tp23 -Rp24 -asS'lgE_min' -p25 -F1.68 -sS'poly_coef' -p26 -cnumpy.core.multiarray -_reconstruct -p27 -(cnumpy -ndarray -p28 -(I0 -tp29 -S'b' -p30 -tp31 -Rp32 -(I1 -(I8 -tp33 -g8 -(S'f8' -p34 -I0 -I1 -tp35 -Rp36 -(I3 -S'<' -p37 -NNNI-1 -I-1 -I0 -tp38 -bI00 -S'N\x9f=\x97[\x8bu?W`\xec\x07\x1d\xcd\xb7\xbf\xd7\xdb\xb4\xf0\xc9\xde\xe5?\xee\x9d\xfb\xbb\xfa[\x05\xc0\x0c2\xf0\xee\x1f\x1a\x17@\xd4\xadH\xa9-\xff\x18\xc0f\xd6\xfa\x8c\x17\xcf\xfc?f-a\x033\xb7\x03@' -p39 -tp40 -bssS'NC' -p41 -(dp42 -S'lgEmax' -p43 -F4.0 -sg6 -g7 -(g11 -S'\\\xd2\xb1\xf8\x84\xc5\xf0?' -p44 -tp45 -Rp46 -sS'linear' -p47 -(lp48 -g7 -(g11 -S'\xc57F\x16\x1c*\xa7\xbf' -p49 -tp50 -Rp51 -ag7 -(g11 -S'\xee\xcf\xda\x19a\xfa\xf1?' -p52 -tp53 -Rp54 -asS'lgE_min' -p55 -F1.68 -sS'poly_coef' -p56 -g27 -(g28 -(I0 -tp57 -g30 -tp58 -Rp59 -(I1 -(I8 -tp60 -g8 -(S'f8' -p61 -I0 -I1 -tp62 -Rp63 -(I3 -S'<' -p64 -NNNI-1 -I-1 -I0 -tp65 -bI00 -S"x\xed\x13\x97\r\x91r?}\x10\x99S\xdah\xb6\xbf\x9d\xd0z'\xfb\xc7\xe6?0{\x8fM6\x1d\t\xc0\xbaJ=\xc9}\x07 @C\x8b\xd0\xfa6D'\xc0^kM\x12\xa0J!@Z\xa6\\%u\xeb\xf5\xbf" -p66 -tp67 -bsssS'Nu' -p68 -(dp69 -g3 -(dp70 -S'lgEmax' -p71 -F4.0 -sg6 -g7 -(g11 -S'\x1aAk[O\xf3\xf0?' -p72 -tp73 -Rp74 -sS'linear' -p75 -(lp76 -g7 -(g11 -S'\xa2*\xd2\xbd\x9b\xc3\xb5\xbf' -p77 -tp78 -Rp79 -ag7 -(g11 -S'\xe0z\x86\x94\xaf7\xf3?' -p80 -tp81 -Rp82 -asS'lgE_min' -p83 -F1.68 -sS'poly_coef' -p84 -g27 -(g28 -(I0 -tp85 -g30 -tp86 -Rp87 -(I1 -(I8 -tp88 -g8 -(S'f8' -p89 -I0 -I1 -tp90 -Rp91 -(I3 -S'<' -p92 -NNNI-1 -I-1 -I0 -tp93 -bI00 -S"\xa9c\x86K\xf5\xeb\x80\xbf8\x0c\x7fqW\x02\xc2?\xe9\x83\xb3\xbd\xba\x02\xf0\xbf\xee\xd1\x15'v\xf8\x0e@\xd2\xea\xbd\x8f\x07\xce!\xc0X\xb6\x0c\x11\xeb\xe1(@\x83\xdc\x9f\x94\x90?$\xc0\xad\xf8\x17\x1e\xafv\x13@" -p94 -tp95 -bssg41 -(dp96 -S'lgEmax' -p97 -F4.0 -sg6 -g7 -(g11 -S'r\x0f\xadSQ5\xef?' -p98 -tp99 -Rp100 -sS'linear' -p101 -(lp102 -g7 -(g11 -S'\xdeM\xa4p\xd5\xec\xa0?' -p103 -tp104 -Rp105 -ag7 -(g11 -S'VG\xf1\x17\xfbq\xed?' -p106 -tp107 -Rp108 -asS'lgE_min' -p109 -F1.68 -sS'poly_coef' -p110 -g27 -(g28 -(I0 -tp111 -g30 -tp112 -Rp113 -(I1 -(I8 -tp114 -g8 -(S'f8' -p115 -I0 -I1 -tp116 -Rp117 -(I3 -S'<' -p118 -NNNI-1 -I-1 -I0 -tp119 -bI00 -S'\xed\x9d$\xd4\xe9tr\xbf\x17O],M\xea\xb2?zn\x01\x8f\xfc\xa2\xdf\xbfQGp\xd0<\xda\xfb?\xfc\xd0\\\xf80\xe4\x0b\xc0Z\xaf>\xf4&\x1d\x10@h\xc9\x1b\xa8\xb6\x9b\x04\xc0\xda\xf5\xf4Q\x8d\x8c\xfb?' -p120 -tp121 -bsss. \ No newline at end of file diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/README.md b/pisa_examples/resources/events/IceCube_3y_oscillations/README.md deleted file mode 100644 index e7b6ba8d8..000000000 --- a/pisa_examples/resources/events/IceCube_3y_oscillations/README.md +++ /dev/null @@ -1 +0,0 @@ -The data in here is from https://icecube.wisc.edu/science/data/highstats_nuosc_3y diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/data.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/data.csv.bz2 deleted file mode 100755 index a7eccaaad..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/data.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_all_nc.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_all_nc.csv.bz2 deleted file mode 100755 index b6fd8c83b..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_all_nc.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nue_cc.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nue_cc.csv.bz2 deleted file mode 100755 index 63326c3fb..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nue_cc.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_numu_cc.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_numu_cc.csv.bz2 deleted file mode 100755 index 3b21829ce..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_numu_cc.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nutau_cc.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nutau_cc.csv.bz2 deleted file mode 100755 index cc4ab9a22..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/hyperplanes_nutau_cc.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/muons.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/muons.csv.bz2 deleted file mode 100755 index bcb8d7e6a..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/muons.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/IceCube_3y_oscillations/neutrino_mc.csv.bz2 b/pisa_examples/resources/events/IceCube_3y_oscillations/neutrino_mc.csv.bz2 deleted file mode 100755 index acf8775ca..000000000 Binary files a/pisa_examples/resources/events/IceCube_3y_oscillations/neutrino_mc.csv.bz2 and /dev/null differ diff --git a/pisa_examples/resources/events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5 b/pisa_examples/resources/events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5 deleted file mode 100644 index 1236265c9..000000000 Binary files a/pisa_examples/resources/events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5 and /dev/null differ diff --git a/pisa_examples/resources/flux/bartol-2004-sno-solmax-aa.d b/pisa_examples/resources/flux/bartol-2004-sno-solmax-aa.d deleted file mode 100644 index 334a7cec9..000000000 --- a/pisa_examples/resources/flux/bartol-2004-sno-solmax-aa.d +++ /dev/null @@ -1,1440 +0,0 @@ -average flux in [cosZ = 1.00 -- 0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.1562e+04 1.1405e+04 5.5751e+03 4.7983e+03 - 1.1900e-01 9.6991e+03 9.8488e+03 4.8149e+03 4.0454e+03 - 1.3300e-01 8.2329e+03 8.2471e+03 4.0299e+03 3.5294e+03 - 1.5000e-01 6.7705e+03 6.9174e+03 3.5210e+03 2.9757e+03 - 1.6800e-01 5.7364e+03 5.7990e+03 2.8913e+03 2.4623e+03 - 1.8800e-01 4.7807e+03 4.8435e+03 2.4331e+03 2.0252e+03 - 2.1100e-01 4.0584e+03 3.9837e+03 1.9864e+03 1.7044e+03 - 2.3700e-01 3.2596e+03 3.2084e+03 1.6221e+03 1.3586e+03 - 2.6600e-01 2.6195e+03 2.6234e+03 1.3369e+03 1.1249e+03 - 2.9900e-01 2.1535e+03 2.0942e+03 1.0656e+03 8.7584e+02 - 3.3500e-01 1.7092e+03 1.6878e+03 8.5168e+02 6.9851e+02 - 3.7600e-01 1.3259e+03 1.3595e+03 6.6421e+02 5.6020e+02 - 4.2200e-01 1.0448e+03 1.0505e+03 5.2762e+02 4.3810e+02 - 4.7300e-01 8.2603e+02 8.2740e+02 4.1019e+02 3.5449e+02 - 5.3100e-01 6.2314e+02 6.3068e+02 3.1956e+02 2.5533e+02 - 5.9600e-01 4.9072e+02 4.7940e+02 2.4361e+02 1.9211e+02 - 6.6800e-01 3.8310e+02 3.6325e+02 1.8275e+02 1.4295e+02 - 7.5000e-01 2.9172e+02 2.8363e+02 1.3771e+02 1.1128e+02 - 8.4100e-01 2.1869e+02 2.0835e+02 1.0535e+02 8.1227e+01 - 9.4400e-01 1.6985e+02 1.5866e+02 7.8132e+01 5.9093e+01 - 1.0590e+00 1.2517e+02 1.2040e+02 5.6563e+01 4.4808e+01 - 1.1890e+00 9.4438e+01 9.0577e+01 4.1378e+01 3.1005e+01 - 1.3340e+00 6.9946e+01 6.6692e+01 2.9478e+01 2.3163e+01 - 1.4960e+00 5.1159e+01 4.8355e+01 2.1293e+01 1.6227e+01 - 1.6790e+00 3.8035e+01 3.5749e+01 1.4919e+01 1.1918e+01 - 1.8840e+00 2.8172e+01 2.6122e+01 1.0409e+01 8.1461e+00 - 2.1130e+00 1.9898e+01 1.9074e+01 7.7944e+00 6.0520e+00 - 2.3710e+00 1.5554e+01 1.3624e+01 5.2893e+00 4.3100e+00 - 2.6610e+00 1.1049e+01 9.7005e+00 3.5625e+00 2.8157e+00 - 2.9850e+00 8.2505e+00 6.9696e+00 2.8019e+00 2.1018e+00 - 3.3500e+00 5.8883e+00 4.8874e+00 1.7924e+00 1.4417e+00 - 3.7580e+00 4.1874e+00 3.7671e+00 1.3589e+00 8.9157e-01 - 4.2170e+00 3.1870e+00 2.7721e+00 8.4613e-01 7.2049e-01 - 4.7320e+00 2.2554e+00 1.9625e+00 5.6290e-01 4.5384e-01 - 5.3090e+00 1.6505e+00 1.3545e+00 3.6721e-01 3.2268e-01 - 5.9570e+00 1.1470e+00 9.1183e-01 2.7841e-01 2.1432e-01 - 6.6830e+00 8.9542e-01 6.9895e-01 2.0603e-01 1.3703e-01 - 7.4990e+00 6.2723e-01 4.3547e-01 1.0739e-01 9.2142e-02 - 8.4140e+00 3.9834e-01 3.4130e-01 9.4295e-02 5.9893e-02 - 9.4410e+00 2.9334e-01 2.2876e-01 5.8109e-02 5.5456e-02 - 1.1200e+01 1.9539e-01 1.5111e-01 2.9868e-02 2.5625e-02 - 1.4100e+01 1.0026e-01 7.5433e-02 1.3214e-02 1.0933e-02 - 1.7800e+01 4.9045e-02 3.8416e-02 5.6551e-03 5.0171e-03 - 2.2400e+01 2.5191e-02 1.8750e-02 2.6945e-03 2.2100e-03 - 2.8200e+01 1.2728e-02 9.0227e-03 1.1777e-03 1.0247e-03 - 3.5500e+01 6.3166e-03 4.5634e-03 5.1008e-04 4.1239e-04 - 4.4700e+01 3.1186e-03 2.1999e-03 2.2201e-04 1.8264e-04 - 5.6200e+01 1.5623e-03 1.0792e-03 1.0145e-04 8.0007e-05 - 7.0800e+01 7.6655e-04 4.9463e-04 4.6655e-05 3.5695e-05 - 8.9100e+01 3.7895e-04 2.4790e-04 2.0750e-05 1.8595e-05 - 1.1200e+02 1.8489e-04 1.1700e-04 9.4036e-06 7.4021e-06 - 1.4100e+02 8.9816e-05 5.5438e-05 4.3540e-06 3.2139e-06 - 1.7800e+02 4.4148e-05 2.6413e-05 1.9315e-06 1.5101e-06 - 2.2400e+02 2.1796e-05 1.2423e-05 8.1161e-07 7.2714e-07 - 2.8200e+02 1.0254e-05 5.8326e-06 4.0128e-07 3.0868e-07 - 3.5500e+02 4.9273e-06 2.7371e-06 1.9486e-07 1.3260e-07 - 4.4700e+02 2.3562e-06 1.2668e-06 8.5226e-08 6.3660e-08 - 5.6200e+02 1.1014e-06 5.8626e-07 3.9815e-08 2.4797e-08 - 7.0800e+02 5.1508e-07 2.7294e-07 1.7023e-08 1.2305e-08 - 8.9100e+02 2.4400e-07 1.2696e-07 8.7793e-09 4.9643e-09 - 1.1200e+03 1.1096e-07 5.6071e-08 3.4325e-09 2.1711e-09 - 1.4100e+03 4.9467e-08 2.5316e-08 1.5191e-09 9.5262e-10 - 1.7800e+03 2.2058e-08 1.1247e-08 6.7056e-10 4.1856e-10 - 2.2400e+03 9.9036e-09 5.0429e-09 2.9220e-10 1.7782e-10 - 2.8200e+03 4.3518e-09 2.2006e-09 1.2706e-10 7.6142e-11 - 3.5500e+03 1.9864e-09 9.7600e-10 5.5380e-11 3.3746e-11 - 4.4700e+03 8.5503e-10 4.2810e-10 2.4206e-11 1.4034e-11 - 5.6200e+03 3.8192e-10 1.8274e-10 1.0151e-11 5.9153e-12 - 7.0800e+03 1.6181e-10 7.8028e-11 4.4192e-12 2.5294e-12 - 8.9100e+03 6.8911e-11 3.2337e-11 1.8954e-12 1.0914e-12 -average flux in [cosZ = 0.90 -- 0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.1641e+04 1.1606e+04 5.6068e+03 4.8546e+03 - 1.1900e-01 9.7993e+03 9.8653e+03 4.8643e+03 4.2717e+03 - 1.3300e-01 8.3240e+03 8.4692e+03 4.1815e+03 3.5875e+03 - 1.5000e-01 6.7977e+03 7.0031e+03 3.6266e+03 2.9924e+03 - 1.6800e-01 5.8236e+03 5.8136e+03 2.9610e+03 2.4986e+03 - 1.8800e-01 4.8256e+03 4.7901e+03 2.5000e+03 2.0371e+03 - 2.1100e-01 4.0165e+03 4.0145e+03 1.9941e+03 1.6921e+03 - 2.3700e-01 3.3376e+03 3.3144e+03 1.6549e+03 1.3879e+03 - 2.6600e-01 2.6816e+03 2.7431e+03 1.3787e+03 1.1218e+03 - 2.9900e-01 2.1568e+03 2.1690e+03 1.0951e+03 9.4258e+02 - 3.3500e-01 1.6962e+03 1.7130e+03 8.8646e+02 7.2066e+02 - 3.7600e-01 1.3853e+03 1.3415e+03 6.8037e+02 5.6602e+02 - 4.2200e-01 1.0681e+03 1.0793e+03 5.5443e+02 4.5237e+02 - 4.7300e-01 8.5474e+02 8.3778e+02 4.2442e+02 3.4521e+02 - 5.3100e-01 6.5030e+02 6.4673e+02 3.3242e+02 2.6468e+02 - 5.9600e-01 5.0983e+02 4.8605e+02 2.5263e+02 2.0201e+02 - 6.6800e-01 3.8536e+02 3.8126e+02 1.9045e+02 1.4994e+02 - 7.5000e-01 2.9337e+02 2.9027e+02 1.4584e+02 1.1400e+02 - 8.4100e-01 2.2785e+02 2.1975e+02 1.1148e+02 8.4367e+01 - 9.4400e-01 1.7377e+02 1.6349e+02 8.1207e+01 6.3634e+01 - 1.0590e+00 1.2857e+02 1.2167e+02 5.9227e+01 4.7839e+01 - 1.1890e+00 9.4680e+01 8.8733e+01 4.3976e+01 3.5025e+01 - 1.3340e+00 7.2785e+01 6.7633e+01 3.2316e+01 2.5676e+01 - 1.4960e+00 5.3385e+01 4.9413e+01 2.3786e+01 1.7615e+01 - 1.6790e+00 3.9059e+01 3.6241e+01 1.6958e+01 1.2567e+01 - 1.8840e+00 2.9691e+01 2.6829e+01 1.1633e+01 8.9347e+00 - 2.1130e+00 2.0936e+01 2.0566e+01 7.9840e+00 6.5433e+00 - 2.3710e+00 1.5555e+01 1.3976e+01 5.7562e+00 4.6328e+00 - 2.6610e+00 1.1126e+01 1.0786e+01 4.2588e+00 3.3505e+00 - 2.9850e+00 8.0089e+00 7.3548e+00 2.7279e+00 2.3761e+00 - 3.3500e+00 5.9438e+00 5.0827e+00 2.0378e+00 1.4104e+00 - 3.7580e+00 4.2340e+00 3.7503e+00 1.4224e+00 1.1440e+00 - 4.2170e+00 3.1415e+00 2.7238e+00 9.5980e-01 7.6488e-01 - 4.7320e+00 2.3505e+00 1.9419e+00 6.4883e-01 6.1880e-01 - 5.3090e+00 1.6775e+00 1.3998e+00 4.6438e-01 3.7848e-01 - 5.9570e+00 1.2000e+00 1.0549e+00 3.2903e-01 2.1863e-01 - 6.6830e+00 8.1840e-01 7.3324e-01 1.9777e-01 1.5180e-01 - 7.4990e+00 6.2002e-01 5.4090e-01 1.4896e-01 1.3313e-01 - 8.4140e+00 4.3893e-01 3.6225e-01 9.3781e-02 7.5914e-02 - 9.4410e+00 3.2899e-01 2.3943e-01 6.7230e-02 4.6514e-02 - 1.1200e+01 2.0246e-01 1.5639e-01 3.2400e-02 2.7732e-02 - 1.4100e+01 1.0287e-01 7.7050e-02 1.4913e-02 1.1662e-02 - 1.7800e+01 4.9978e-02 3.9697e-02 6.2101e-03 5.4773e-03 - 2.2400e+01 2.5845e-02 1.9750e-02 2.9725e-03 2.4346e-03 - 2.8200e+01 1.3244e-02 9.3319e-03 1.3145e-03 1.1108e-03 - 3.5500e+01 6.5792e-03 4.7662e-03 5.5414e-04 4.5746e-04 - 4.4700e+01 3.2394e-03 2.3391e-03 2.4980e-04 1.9678e-04 - 5.6200e+01 1.6263e-03 1.1272e-03 1.1613e-04 8.6363e-05 - 7.0800e+01 7.9051e-04 5.2853e-04 4.9192e-05 3.8260e-05 - 8.9100e+01 3.9771e-04 2.5917e-04 2.2505e-05 2.0373e-05 - 1.1200e+02 1.9189e-04 1.2371e-04 9.9536e-06 8.3300e-06 - 1.4100e+02 9.4156e-05 5.7852e-05 4.7538e-06 3.7932e-06 - 1.7800e+02 4.4840e-05 2.8115e-05 2.1506e-06 1.5809e-06 - 2.2400e+02 2.2829e-05 1.3166e-05 9.5089e-07 7.3536e-07 - 2.8200e+02 1.1087e-05 6.3801e-06 3.8454e-07 3.6294e-07 - 3.5500e+02 5.2248e-06 2.9248e-06 2.1150e-07 1.4554e-07 - 4.4700e+02 2.4268e-06 1.3565e-06 8.8779e-08 6.3499e-08 - 5.6200e+02 1.1659e-06 6.2690e-07 4.2285e-08 2.7409e-08 - 7.0800e+02 5.4508e-07 2.9514e-07 1.8034e-08 1.2953e-08 - 8.9100e+02 2.6644e-07 1.3926e-07 1.0132e-08 5.3836e-09 - 1.1200e+03 1.1832e-07 6.1036e-08 3.6961e-09 2.3557e-09 - 1.4100e+03 5.3214e-08 2.7804e-08 1.6454e-09 1.0304e-09 - 1.7800e+03 2.3773e-08 1.2371e-08 7.1933e-10 4.5043e-10 - 2.2400e+03 1.0739e-08 5.4571e-09 3.2137e-10 1.9218e-10 - 2.8200e+03 4.7262e-09 2.3938e-09 1.3946e-10 8.3433e-11 - 3.5500e+03 2.1945e-09 1.0691e-09 6.0958e-11 3.6676e-11 - 4.4700e+03 9.3647e-10 4.6631e-10 2.6443e-11 1.5353e-11 - 5.6200e+03 4.2164e-10 2.0107e-10 1.1155e-11 6.5865e-12 - 7.0800e+03 1.8056e-10 8.6774e-11 4.8379e-12 2.7814e-12 - 8.9100e+03 7.6476e-11 3.6193e-11 2.1091e-12 1.2386e-12 -average flux in [cosZ = 0.80 -- 0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.1776e+04 1.1935e+04 5.6520e+03 4.8207e+03 - 1.1900e-01 1.0021e+04 1.0134e+04 4.9617e+03 4.2929e+03 - 1.3300e-01 8.4227e+03 8.5408e+03 4.2738e+03 3.6307e+03 - 1.5000e-01 7.0127e+03 7.0526e+03 3.6643e+03 3.1249e+03 - 1.6800e-01 5.8648e+03 5.8935e+03 3.0101e+03 2.5417e+03 - 1.8800e-01 4.9250e+03 4.8596e+03 2.5294e+03 2.1277e+03 - 2.1100e-01 4.0027e+03 4.1288e+03 2.1020e+03 1.7388e+03 - 2.3700e-01 3.3071e+03 3.4136e+03 1.7065e+03 1.4375e+03 - 2.6600e-01 2.6933e+03 2.6790e+03 1.4251e+03 1.1761e+03 - 2.9900e-01 2.1363e+03 2.2059e+03 1.1345e+03 9.1299e+02 - 3.3500e-01 1.7751e+03 1.7495e+03 9.1720e+02 7.6508e+02 - 3.7600e-01 1.3536e+03 1.3826e+03 7.3044e+02 5.8901e+02 - 4.2200e-01 1.0948e+03 1.0926e+03 5.8425e+02 4.6123e+02 - 4.7300e-01 8.5641e+02 8.5272e+02 4.3483e+02 3.5778e+02 - 5.3100e-01 6.6353e+02 6.4712e+02 3.4403e+02 2.7171e+02 - 5.9600e-01 5.1131e+02 5.1075e+02 2.6410e+02 2.1072e+02 - 6.6800e-01 3.9049e+02 3.9270e+02 2.0351e+02 1.6001e+02 - 7.5000e-01 3.0106e+02 2.9584e+02 1.5289e+02 1.2469e+02 - 8.4100e-01 2.3015e+02 2.2885e+02 1.1417e+02 9.1276e+01 - 9.4400e-01 1.7852e+02 1.6920e+02 8.6405e+01 7.0182e+01 - 1.0590e+00 1.3388e+02 1.2974e+02 6.1338e+01 4.9793e+01 - 1.1890e+00 9.7440e+01 9.4373e+01 4.7231e+01 3.8000e+01 - 1.3340e+00 7.3389e+01 7.0686e+01 3.3397e+01 2.7609e+01 - 1.4960e+00 5.4719e+01 5.1744e+01 2.5083e+01 1.9979e+01 - 1.6790e+00 4.1162e+01 3.8494e+01 1.7581e+01 1.3975e+01 - 1.8840e+00 2.9692e+01 2.7511e+01 1.2387e+01 9.5400e+00 - 2.1130e+00 2.1828e+01 2.0501e+01 9.2999e+00 7.1944e+00 - 2.3710e+00 1.6213e+01 1.4678e+01 6.5144e+00 4.9740e+00 - 2.6610e+00 1.1684e+01 1.0954e+01 4.5575e+00 3.2134e+00 - 2.9850e+00 8.6790e+00 7.8212e+00 3.1368e+00 2.3084e+00 - 3.3500e+00 6.2802e+00 5.5304e+00 2.1433e+00 1.7029e+00 - 3.7580e+00 4.4029e+00 3.8827e+00 1.6221e+00 1.1449e+00 - 4.2170e+00 3.2404e+00 2.7492e+00 1.1260e+00 8.6657e-01 - 4.7320e+00 2.3195e+00 2.0257e+00 7.9678e-01 6.2350e-01 - 5.3090e+00 1.8487e+00 1.3436e+00 5.5835e-01 3.8735e-01 - 5.9570e+00 1.2685e+00 1.0426e+00 3.2159e-01 2.6986e-01 - 6.6830e+00 9.2968e-01 7.0095e-01 2.5834e-01 2.0542e-01 - 7.4990e+00 6.3555e-01 4.8188e-01 1.5502e-01 1.2166e-01 - 8.4140e+00 4.2938e-01 3.6867e-01 1.1646e-01 7.8863e-02 - 9.4410e+00 3.3157e-01 2.6061e-01 6.5042e-02 6.0451e-02 - 1.1200e+01 2.0982e-01 1.6339e-01 3.7232e-02 3.1696e-02 - 1.4100e+01 1.0638e-01 8.0142e-02 1.7305e-02 1.3333e-02 - 1.7800e+01 5.1854e-02 4.1517e-02 7.1348e-03 6.2360e-03 - 2.2400e+01 2.6741e-02 2.0893e-02 3.4241e-03 2.8036e-03 - 2.8200e+01 1.3794e-02 9.8227e-03 1.5284e-03 1.2553e-03 - 3.5500e+01 6.8732e-03 5.0141e-03 6.3380e-04 5.2958e-04 - 4.4700e+01 3.3781e-03 2.4832e-03 2.8635e-04 2.2595e-04 - 5.6200e+01 1.6993e-03 1.1940e-03 1.3416e-04 9.8043e-05 - 7.0800e+01 8.2486e-04 5.6921e-04 5.5367e-05 4.3220e-05 - 8.9100e+01 4.1863e-04 2.7385e-04 2.5140e-05 2.2222e-05 - 1.1200e+02 2.0089e-04 1.3214e-04 1.1161e-05 9.3750e-06 - 1.4100e+02 9.9291e-05 6.1844e-05 5.2908e-06 4.4043e-06 - 1.7800e+02 4.6629e-05 3.0112e-05 2.4101e-06 1.7191e-06 - 2.2400e+02 2.4018e-05 1.4152e-05 1.1116e-06 8.0357e-07 - 2.8200e+02 1.1879e-05 6.9504e-06 4.2908e-07 4.0780e-07 - 3.5500e+02 5.5493e-06 3.1549e-06 2.3324e-07 1.5944e-07 - 4.4700e+02 2.5727e-06 1.4631e-06 9.7092e-08 6.9351e-08 - 5.6200e+02 1.2456e-06 6.8149e-07 4.6263e-08 3.0961e-08 - 7.0800e+02 5.8616e-07 3.2345e-07 2.0198e-08 1.3856e-08 - 8.9100e+02 2.9068e-07 1.5264e-07 1.1336e-08 5.9933e-09 - 1.1200e+03 1.2768e-07 6.7143e-08 4.0625e-09 2.6161e-09 - 1.4100e+03 5.8085e-08 3.0780e-08 1.8227e-09 1.1489e-09 - 1.7800e+03 2.6180e-08 1.3764e-08 7.9775e-10 5.0225e-10 - 2.2400e+03 1.1875e-08 6.0714e-09 3.6027e-10 2.1696e-10 - 2.8200e+03 5.2482e-09 2.6879e-09 1.5674e-10 9.5035e-11 - 3.5500e+03 2.4535e-09 1.2000e-09 6.9014e-11 4.1408e-11 - 4.4700e+03 1.0537e-09 5.2349e-10 2.9754e-11 1.7517e-11 - 5.6200e+03 4.7331e-10 2.2776e-10 1.2669e-11 7.5623e-12 - 7.0800e+03 2.0339e-10 9.8729e-11 5.4802e-12 3.1780e-12 - 8.9100e+03 8.6644e-11 4.1863e-11 2.4018e-12 1.4254e-12 -average flux in [cosZ = 0.70 -- 0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.1890e+04 1.2007e+04 5.7478e+03 5.2152e+03 - 1.1900e-01 1.0429e+04 1.0421e+04 5.1014e+03 4.4867e+03 - 1.3300e-01 8.6531e+03 8.7417e+03 4.3969e+03 3.6825e+03 - 1.5000e-01 7.1641e+03 7.2869e+03 3.7263e+03 3.2078e+03 - 1.6800e-01 5.8992e+03 5.9988e+03 3.0990e+03 2.6311e+03 - 1.8800e-01 5.0025e+03 5.0287e+03 2.5821e+03 2.2144e+03 - 2.1100e-01 4.1702e+03 4.1315e+03 2.1432e+03 1.8044e+03 - 2.3700e-01 3.4153e+03 3.4096e+03 1.7463e+03 1.4450e+03 - 2.6600e-01 2.7622e+03 2.7695e+03 1.4199e+03 1.1702e+03 - 2.9900e-01 2.2054e+03 2.2179e+03 1.1773e+03 9.6054e+02 - 3.3500e-01 1.7600e+03 1.7927e+03 9.2692e+02 7.8357e+02 - 3.7600e-01 1.4369e+03 1.4162e+03 7.5621e+02 6.1784e+02 - 4.2200e-01 1.0878e+03 1.1091e+03 5.9107e+02 4.9406e+02 - 4.7300e-01 8.8648e+02 8.7923e+02 4.7236e+02 3.7529e+02 - 5.3100e-01 6.6497e+02 6.7887e+02 3.7137e+02 2.9188e+02 - 5.9600e-01 5.2290e+02 5.2459e+02 2.7948e+02 2.2762e+02 - 6.6800e-01 4.0925e+02 4.0324e+02 2.1330e+02 1.7074e+02 - 7.5000e-01 3.0892e+02 3.0650e+02 1.6478e+02 1.3110e+02 - 8.4100e-01 2.3493e+02 2.3932e+02 1.2189e+02 1.0003e+02 - 9.4400e-01 1.7783e+02 1.7276e+02 9.1090e+01 7.2597e+01 - 1.0590e+00 1.3576e+02 1.3443e+02 6.6465e+01 5.7089e+01 - 1.1890e+00 1.0030e+02 9.9660e+01 5.2166e+01 4.0920e+01 - 1.3340e+00 7.6743e+01 7.4608e+01 3.7678e+01 2.9407e+01 - 1.4960e+00 5.7011e+01 5.5811e+01 2.8507e+01 2.1000e+01 - 1.6790e+00 4.2609e+01 3.8965e+01 1.9282e+01 1.5454e+01 - 1.8840e+00 2.9766e+01 2.9504e+01 1.4710e+01 1.0394e+01 - 2.1130e+00 2.2505e+01 2.1773e+01 1.0409e+01 7.5047e+00 - 2.3710e+00 1.6639e+01 1.4812e+01 7.6932e+00 5.4782e+00 - 2.6610e+00 1.1682e+01 1.0894e+01 4.9215e+00 3.7736e+00 - 2.9850e+00 9.2743e+00 8.2177e+00 3.6699e+00 2.8212e+00 - 3.3500e+00 6.0477e+00 5.9912e+00 2.4743e+00 1.9686e+00 - 3.7580e+00 5.0695e+00 4.3504e+00 1.5675e+00 1.4983e+00 - 4.2170e+00 3.4896e+00 2.9106e+00 1.2329e+00 8.9292e-01 - 4.7320e+00 2.5224e+00 2.1315e+00 7.8192e-01 6.4941e-01 - 5.3090e+00 1.8183e+00 1.6341e+00 5.9607e-01 4.2505e-01 - 5.9570e+00 1.2912e+00 1.0323e+00 3.8193e-01 2.7794e-01 - 6.6830e+00 8.9749e-01 7.7223e-01 2.7017e-01 2.0468e-01 - 7.4990e+00 6.5886e-01 5.6656e-01 1.9320e-01 1.5731e-01 - 8.4140e+00 4.7962e-01 3.8729e-01 1.2750e-01 8.2299e-02 - 9.4410e+00 3.4749e-01 2.6836e-01 1.0652e-01 6.1810e-02 - 1.1200e+01 2.1446e-01 1.7018e-01 4.3764e-02 3.6971e-02 - 1.4100e+01 1.1055e-01 8.4454e-02 1.9716e-02 1.5614e-02 - 1.7800e+01 5.5025e-02 4.3506e-02 7.9798e-03 6.8966e-03 - 2.2400e+01 2.7639e-02 2.1964e-02 3.8811e-03 3.1968e-03 - 2.8200e+01 1.4268e-02 1.0482e-02 1.7211e-03 1.3668e-03 - 3.5500e+01 7.1380e-03 5.2327e-03 7.1054e-04 5.8479e-04 - 4.4700e+01 3.4864e-03 2.5870e-03 3.0040e-04 2.5351e-04 - 5.6200e+01 1.7658e-03 1.2746e-03 1.4411e-04 1.0753e-04 - 7.0800e+01 8.6554e-04 6.1463e-04 6.2588e-05 4.7661e-05 - 8.9100e+01 4.3753e-04 2.8763e-04 2.6541e-05 2.0790e-05 - 1.1200e+02 2.0986e-04 1.4057e-04 1.2618e-05 9.4036e-06 - 1.4100e+02 1.0454e-04 6.7557e-05 5.4843e-06 4.6122e-06 - 1.7800e+02 4.9461e-05 3.1753e-05 2.5402e-06 1.7589e-06 - 2.2400e+02 2.5048e-05 1.5305e-05 1.2482e-06 9.3018e-07 - 2.8200e+02 1.2369e-05 7.3858e-06 5.9234e-07 3.9447e-07 - 3.5500e+02 5.7825e-06 3.3239e-06 2.4638e-07 1.5207e-07 - 4.4700e+02 2.8152e-06 1.5288e-06 1.0799e-07 8.3472e-08 - 5.6200e+02 1.3213e-06 7.3317e-07 5.0619e-08 3.2975e-08 - 7.0800e+02 6.3288e-07 3.5073e-07 2.3768e-08 1.3493e-08 - 8.9100e+02 3.1174e-07 1.6278e-07 1.1767e-08 6.5912e-09 - 1.1200e+03 1.3711e-07 7.3279e-08 4.3829e-09 2.9018e-09 - 1.4100e+03 6.3399e-08 3.3538e-08 2.0230e-09 1.2913e-09 - 1.7800e+03 2.9211e-08 1.5144e-08 8.9775e-10 5.6376e-10 - 2.2400e+03 1.3161e-08 6.8054e-09 4.0079e-10 2.5132e-10 - 2.8200e+03 5.8241e-09 3.0831e-09 1.7485e-10 1.1057e-10 - 3.5500e+03 2.7067e-09 1.3458e-09 7.8231e-11 4.6997e-11 - 4.4700e+03 1.1941e-09 5.8649e-10 3.3226e-11 2.0131e-11 - 5.6200e+03 5.2178e-10 2.5687e-10 1.4280e-11 8.5779e-12 - 7.0800e+03 2.2028e-10 1.1005e-10 6.1480e-12 3.5785e-12 - 8.9100e+03 9.5551e-11 4.8620e-11 2.6725e-12 1.5802e-12 -average flux in [cosZ = 0.60 -- 0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.2459e+04 1.2418e+04 6.2317e+03 5.1799e+03 - 1.1900e-01 1.0576e+04 1.0744e+04 5.2374e+03 4.5561e+03 - 1.3300e-01 8.9373e+03 8.9030e+03 4.4788e+03 3.8705e+03 - 1.5000e-01 7.4384e+03 7.4796e+03 3.8684e+03 3.3198e+03 - 1.6800e-01 6.0605e+03 6.2292e+03 3.2446e+03 2.7302e+03 - 1.8800e-01 5.1579e+03 5.1905e+03 2.6944e+03 2.2833e+03 - 2.1100e-01 4.2385e+03 4.2802e+03 2.2311e+03 1.9110e+03 - 2.3700e-01 3.4525e+03 3.4877e+03 1.8528e+03 1.5524e+03 - 2.6600e-01 2.8416e+03 2.8078e+03 1.4814e+03 1.2301e+03 - 2.9900e-01 2.2871e+03 2.2663e+03 1.1939e+03 1.0073e+03 - 3.3500e-01 1.8097e+03 1.8646e+03 9.6910e+02 8.1151e+02 - 3.7600e-01 1.4521e+03 1.4381e+03 7.9501e+02 6.3480e+02 - 4.2200e-01 1.1224e+03 1.1479e+03 6.2137e+02 5.0466e+02 - 4.7300e-01 8.8087e+02 8.9930e+02 4.7996e+02 3.9078e+02 - 5.3100e-01 6.9471e+02 6.9997e+02 3.7269e+02 3.0933e+02 - 5.9600e-01 5.3830e+02 5.4388e+02 2.8864e+02 2.3050e+02 - 6.6800e-01 4.1644e+02 4.0585e+02 2.2748e+02 1.7957e+02 - 7.5000e-01 3.2156e+02 3.1679e+02 1.7475e+02 1.3994e+02 - 8.4100e-01 2.4252e+02 2.3951e+02 1.2994e+02 1.0319e+02 - 9.4400e-01 1.8542e+02 1.8420e+02 9.5212e+01 7.7679e+01 - 1.0590e+00 1.4312e+02 1.4101e+02 7.5800e+01 5.7929e+01 - 1.1890e+00 1.0492e+02 1.0606e+02 5.3634e+01 4.2605e+01 - 1.3340e+00 7.8362e+01 7.6125e+01 3.9132e+01 3.0109e+01 - 1.4960e+00 5.9169e+01 5.8072e+01 2.9905e+01 2.3548e+01 - 1.6790e+00 4.3146e+01 4.3398e+01 2.1365e+01 1.6792e+01 - 1.8840e+00 3.3659e+01 3.0750e+01 1.5938e+01 1.2206e+01 - 2.1130e+00 2.4418e+01 2.1739e+01 1.0562e+01 8.8271e+00 - 2.3710e+00 1.7440e+01 1.6501e+01 8.0858e+00 6.4812e+00 - 2.6610e+00 1.2806e+01 1.2271e+01 5.3311e+00 4.7398e+00 - 2.9850e+00 9.6645e+00 8.4231e+00 4.3168e+00 3.1271e+00 - 3.3500e+00 7.1390e+00 5.7708e+00 2.9139e+00 2.1071e+00 - 3.7580e+00 4.6259e+00 4.5203e+00 1.8486e+00 1.5720e+00 - 4.2170e+00 3.6149e+00 3.1630e+00 1.4507e+00 1.1222e+00 - 4.7320e+00 2.6249e+00 2.3739e+00 9.6857e-01 8.5474e-01 - 5.3090e+00 1.8708e+00 1.7194e+00 6.9377e-01 5.0535e-01 - 5.9570e+00 1.3151e+00 1.2313e+00 5.0720e-01 3.3921e-01 - 6.6830e+00 9.8181e-01 8.3034e-01 3.0013e-01 2.5210e-01 - 7.4990e+00 6.7293e-01 5.9606e-01 2.1312e-01 1.5150e-01 - 8.4140e+00 5.1035e-01 4.1812e-01 1.4530e-01 1.1233e-01 - 9.4410e+00 3.8829e-01 3.1661e-01 8.9424e-02 7.1852e-02 - 1.1200e+01 2.2339e-01 1.8125e-01 5.3396e-02 4.4832e-02 - 1.4100e+01 1.1597e-01 9.0582e-02 2.3716e-02 1.9279e-02 - 1.7800e+01 5.8674e-02 4.6528e-02 9.7955e-03 8.3843e-03 - 2.2400e+01 2.9102e-02 2.3464e-02 4.7357e-03 3.8943e-03 - 2.8200e+01 1.4923e-02 1.1340e-02 2.1221e-03 1.6587e-03 - 3.5500e+01 7.5155e-03 5.5955e-03 8.7425e-04 7.2563e-04 - 4.4700e+01 3.6770e-03 2.7553e-03 3.6492e-04 3.1830e-04 - 5.6200e+01 1.8623e-03 1.3806e-03 1.7268e-04 1.3236e-04 - 7.0800e+01 9.2203e-04 6.6955e-04 7.6904e-05 5.8384e-05 - 8.9100e+01 4.6415e-04 3.1057e-04 3.1641e-05 2.3901e-05 - 1.1200e+02 2.2354e-04 1.5300e-04 1.5275e-05 1.1061e-05 - 1.4100e+02 1.1149e-04 7.4652e-05 6.4562e-06 5.4318e-06 - 1.7800e+02 5.3461e-05 3.4562e-05 2.9373e-06 2.0872e-06 - 2.2400e+02 2.6657e-05 1.6802e-05 1.4670e-06 1.1189e-06 - 2.8200e+02 1.3170e-05 8.0539e-06 7.4028e-07 4.3674e-07 - 3.5500e+02 6.2006e-06 3.6732e-06 2.8287e-07 1.7526e-07 - 4.4700e+02 3.1043e-06 1.6882e-06 1.2655e-07 1.0060e-07 - 5.6200e+02 1.4374e-06 8.2128e-07 5.7993e-08 3.9231e-08 - 7.0800e+02 6.9791e-07 3.9362e-07 2.8153e-08 1.5414e-08 - 8.9100e+02 3.4123e-07 1.7975e-07 1.2880e-08 7.6489e-09 - 1.1200e+03 1.5111e-07 8.2043e-08 5.0046e-09 3.3304e-09 - 1.4100e+03 7.0743e-08 3.7725e-08 2.3118e-09 1.4973e-09 - 1.7800e+03 3.3025e-08 1.7171e-08 1.0382e-09 6.5893e-10 - 2.2400e+03 1.4946e-08 7.8464e-09 4.6179e-10 2.9725e-10 - 2.8200e+03 6.6723e-09 3.5794e-09 2.0323e-10 1.3092e-10 - 3.5500e+03 3.0865e-09 1.5601e-09 9.1685e-11 5.5651e-11 - 4.4700e+03 1.3871e-09 6.8600e-10 3.8989e-11 2.4116e-11 - 5.6200e+03 6.0242e-10 3.0221e-10 1.6951e-11 1.0251e-11 - 7.0800e+03 2.5458e-10 1.2970e-10 7.3040e-12 4.3113e-12 - 8.9100e+03 1.1222e-10 5.8159e-11 3.1569e-12 1.8698e-12 -average flux in [cosZ = 0.50 -- 0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.2939e+04 1.3000e+04 6.4828e+03 5.5207e+03 - 1.1900e-01 1.1327e+04 1.1197e+04 5.4766e+03 4.9468e+03 - 1.3300e-01 9.2981e+03 9.4192e+03 4.9013e+03 4.0125e+03 - 1.5000e-01 7.7362e+03 7.7295e+03 3.9176e+03 3.4378e+03 - 1.6800e-01 6.2045e+03 6.3547e+03 3.4846e+03 2.9326e+03 - 1.8800e-01 5.3201e+03 5.3668e+03 2.8734e+03 2.3791e+03 - 2.1100e-01 4.3559e+03 4.4636e+03 2.3077e+03 1.9994e+03 - 2.3700e-01 3.6205e+03 3.6470e+03 1.8885e+03 1.5707e+03 - 2.6600e-01 2.9222e+03 2.9495e+03 1.5754e+03 1.2422e+03 - 2.9900e-01 2.3185e+03 2.3962e+03 1.2240e+03 1.0254e+03 - 3.3500e-01 1.8803e+03 1.8593e+03 1.0316e+03 8.2083e+02 - 3.7600e-01 1.4702e+03 1.4892e+03 8.2211e+02 6.7744e+02 - 4.2200e-01 1.1585e+03 1.1679e+03 6.1808e+02 5.1126e+02 - 4.7300e-01 9.1537e+02 9.0038e+02 5.1037e+02 4.0602e+02 - 5.3100e-01 7.0912e+02 7.2652e+02 3.9523e+02 3.1484e+02 - 5.9600e-01 5.4866e+02 5.6065e+02 3.1133e+02 2.5338e+02 - 6.6800e-01 4.3021e+02 4.2654e+02 2.3474e+02 1.9115e+02 - 7.5000e-01 3.3716e+02 3.2746e+02 1.8668e+02 1.3997e+02 - 8.4100e-01 2.5891e+02 2.4895e+02 1.3503e+02 1.1119e+02 - 9.4400e-01 1.9114e+02 1.8621e+02 1.0913e+02 8.4791e+01 - 1.0590e+00 1.4639e+02 1.4293e+02 7.8287e+01 6.2689e+01 - 1.1890e+00 1.1045e+02 1.1125e+02 5.7948e+01 4.5146e+01 - 1.3340e+00 8.3343e+01 8.0135e+01 4.5377e+01 3.3753e+01 - 1.4960e+00 6.1386e+01 5.8178e+01 3.3402e+01 2.5844e+01 - 1.6790e+00 4.6232e+01 4.4880e+01 2.3358e+01 1.8438e+01 - 1.8840e+00 3.2980e+01 3.1676e+01 1.7394e+01 1.3019e+01 - 2.1130e+00 2.4495e+01 2.3561e+01 1.2269e+01 9.3259e+00 - 2.3710e+00 1.8654e+01 1.7260e+01 9.0177e+00 6.8486e+00 - 2.6610e+00 1.3101e+01 1.2575e+01 6.6733e+00 5.0791e+00 - 2.9850e+00 9.6809e+00 9.3714e+00 4.4293e+00 3.4335e+00 - 3.3500e+00 7.2184e+00 6.7737e+00 2.9617e+00 2.5248e+00 - 3.7580e+00 5.0969e+00 4.9369e+00 2.4086e+00 1.7867e+00 - 4.2170e+00 3.7215e+00 3.4027e+00 1.6803e+00 1.2216e+00 - 4.7320e+00 2.9183e+00 2.4862e+00 1.1488e+00 8.5549e-01 - 5.3090e+00 1.9861e+00 1.6789e+00 7.5794e-01 6.5356e-01 - 5.9570e+00 1.4123e+00 1.2425e+00 5.6758e-01 4.4064e-01 - 6.6830e+00 1.0236e+00 8.9349e-01 4.1048e-01 3.1126e-01 - 7.4990e+00 7.7410e-01 6.2220e-01 2.4338e-01 1.9647e-01 - 8.4140e+00 5.1976e-01 4.6953e-01 1.8211e-01 1.2693e-01 - 9.4410e+00 4.0253e-01 3.1360e-01 1.1801e-01 8.1656e-02 - 1.1200e+01 2.3661e-01 1.9661e-01 6.6129e-02 5.5279e-02 - 1.4100e+01 1.2264e-01 9.8525e-02 2.9305e-02 2.4329e-02 - 1.7800e+01 6.2798e-02 5.0584e-02 1.2582e-02 1.0699e-02 - 2.2400e+01 3.1129e-02 2.5393e-02 5.9884e-03 4.8960e-03 - 2.8200e+01 1.5760e-02 1.2397e-02 2.7313e-03 2.1311e-03 - 3.5500e+01 8.0056e-03 6.1025e-03 1.1250e-03 9.5211e-04 - 4.4700e+01 3.9499e-03 2.9879e-03 4.7991e-04 4.2031e-04 - 5.6200e+01 1.9886e-03 1.5119e-03 2.1988e-04 1.7254e-04 - 7.0800e+01 9.9435e-04 7.3395e-04 9.8316e-05 7.5390e-05 - 8.9100e+01 4.9850e-04 3.4267e-04 4.0440e-05 3.1556e-05 - 1.1200e+02 2.4193e-04 1.6943e-04 1.9132e-05 1.4346e-05 - 1.4100e+02 1.2014e-04 8.3135e-05 8.2064e-06 6.8630e-06 - 1.7800e+02 5.8629e-05 3.8539e-05 3.6013e-06 2.7040e-06 - 2.2400e+02 2.8845e-05 1.8641e-05 1.7679e-06 1.3698e-06 - 2.8200e+02 1.4284e-05 8.9546e-06 8.7291e-07 5.3461e-07 - 3.5500e+02 6.8034e-06 4.2028e-06 3.4270e-07 2.2900e-07 - 4.4700e+02 3.4398e-06 1.9415e-06 1.5277e-07 1.2073e-07 - 5.6200e+02 1.5940e-06 9.4584e-07 6.8384e-08 4.9730e-08 - 7.0800e+02 7.8124e-07 4.5209e-07 3.3350e-08 1.9620e-08 - 8.9100e+02 3.7917e-07 2.0355e-07 1.4676e-08 9.1663e-09 - 1.1200e+03 1.6968e-07 9.3437e-08 5.9279e-09 3.9018e-09 - 1.4100e+03 8.0121e-08 4.3342e-08 2.6891e-09 1.7668e-09 - 1.7800e+03 3.7620e-08 1.9845e-08 1.2191e-09 7.8770e-10 - 2.2400e+03 1.7232e-08 9.1946e-09 5.4330e-10 3.5475e-10 - 2.8200e+03 7.7929e-09 4.1766e-09 2.4189e-10 1.5610e-10 - 3.5500e+03 3.5930e-09 1.8429e-09 1.0937e-10 6.7369e-11 - 4.4700e+03 1.6328e-09 8.2201e-10 4.7043e-11 2.9472e-11 - 5.6200e+03 7.1523e-10 3.6377e-10 2.0680e-11 1.2582e-11 - 7.0800e+03 3.0627e-10 1.5770e-10 8.9480e-12 5.3763e-12 - 8.9100e+03 1.3663e-10 7.0483e-11 3.8550e-12 2.2941e-12 -average flux in [cosZ = 0.40 -- 0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.4043e+04 1.4220e+04 6.9976e+03 6.2008e+03 - 1.1900e-01 1.1943e+04 1.1983e+04 5.8052e+03 5.3067e+03 - 1.3300e-01 9.9563e+03 1.0218e+04 5.1669e+03 4.4547e+03 - 1.5000e-01 8.2114e+03 8.0524e+03 4.2573e+03 3.7438e+03 - 1.6800e-01 6.8027e+03 6.7488e+03 3.7066e+03 3.1726e+03 - 1.8800e-01 5.7251e+03 5.6205e+03 2.9902e+03 2.5116e+03 - 2.1100e-01 4.6969e+03 4.6576e+03 2.4938e+03 2.0907e+03 - 2.3700e-01 3.7433e+03 3.7335e+03 2.0108e+03 1.6724e+03 - 2.6600e-01 3.0162e+03 3.0847e+03 1.6413e+03 1.3798e+03 - 2.9900e-01 2.4244e+03 2.4491e+03 1.2774e+03 1.1015e+03 - 3.3500e-01 1.9288e+03 1.9583e+03 1.0696e+03 8.7601e+02 - 3.7600e-01 1.5327e+03 1.5400e+03 8.6685e+02 7.0276e+02 - 4.2200e-01 1.2041e+03 1.2097e+03 6.8337e+02 5.3195e+02 - 4.7300e-01 9.5138e+02 9.6599e+02 5.2901e+02 4.2232e+02 - 5.3100e-01 7.4141e+02 7.5491e+02 4.1696e+02 3.4077e+02 - 5.9600e-01 5.8810e+02 5.6722e+02 3.2094e+02 2.5852e+02 - 6.6800e-01 4.3235e+02 4.4235e+02 2.5590e+02 2.0215e+02 - 7.5000e-01 3.2752e+02 3.4326e+02 1.9307e+02 1.5437e+02 - 8.4100e-01 2.5759e+02 2.6040e+02 1.4500e+02 1.1812e+02 - 9.4400e-01 1.9607e+02 1.9790e+02 1.1636e+02 9.1307e+01 - 1.0590e+00 1.4763e+02 1.4800e+02 8.3906e+01 6.4983e+01 - 1.1890e+00 1.1189e+02 1.1282e+02 6.2652e+01 4.8158e+01 - 1.3340e+00 8.3758e+01 8.3308e+01 4.7613e+01 3.7673e+01 - 1.4960e+00 6.3729e+01 6.2989e+01 3.4120e+01 2.8876e+01 - 1.6790e+00 4.7650e+01 4.7125e+01 2.5524e+01 1.9458e+01 - 1.8840e+00 3.6017e+01 3.4100e+01 1.7867e+01 1.5222e+01 - 2.1130e+00 2.6423e+01 2.4338e+01 1.5115e+01 1.1005e+01 - 2.3710e+00 1.9100e+01 1.8159e+01 1.0247e+01 7.6435e+00 - 2.6610e+00 1.3561e+01 1.3695e+01 6.6392e+00 5.5453e+00 - 2.9850e+00 1.0371e+01 9.9804e+00 5.0524e+00 3.8425e+00 - 3.3500e+00 7.2623e+00 6.8488e+00 3.4984e+00 2.8138e+00 - 3.7580e+00 5.2733e+00 5.1426e+00 2.6428e+00 2.0734e+00 - 4.2170e+00 3.9588e+00 3.5812e+00 1.9541e+00 1.4551e+00 - 4.7320e+00 2.8882e+00 2.6195e+00 1.3256e+00 1.0119e+00 - 5.3090e+00 1.9900e+00 1.9377e+00 9.3893e-01 7.7449e-01 - 5.9570e+00 1.4132e+00 1.3215e+00 5.8649e-01 5.2138e-01 - 6.6830e+00 1.0910e+00 8.9595e-01 4.0092e-01 3.1738e-01 - 7.4990e+00 7.7399e-01 6.7035e-01 3.0667e-01 2.3978e-01 - 8.4140e+00 5.5375e-01 4.5296e-01 2.0049e-01 1.6350e-01 - 9.4410e+00 4.0812e-01 3.4591e-01 1.1828e-01 1.1978e-01 - 1.1200e+01 2.5456e-01 2.1495e-01 7.9158e-02 6.6163e-02 - 1.4100e+01 1.2924e-01 1.0612e-01 3.4172e-02 2.9084e-02 - 1.7800e+01 6.6888e-02 5.5371e-02 1.5507e-02 1.3199e-02 - 2.2400e+01 3.4051e-02 2.7558e-02 7.1188e-03 5.7598e-03 - 2.8200e+01 1.6292e-02 1.3373e-02 3.4393e-03 2.5799e-03 - 3.5500e+01 8.5408e-03 6.6735e-03 1.3125e-03 1.1974e-03 - 4.4700e+01 4.3362e-03 3.1895e-03 5.8984e-04 5.2266e-04 - 5.6200e+01 2.1155e-03 1.6354e-03 2.6274e-04 1.9486e-04 - 7.0800e+01 1.0878e-03 7.8470e-04 1.1365e-04 8.1840e-05 - 8.9100e+01 5.3635e-04 3.7819e-04 4.6026e-05 4.1283e-05 - 1.1200e+02 2.6559e-04 1.8635e-04 2.0765e-05 1.6908e-05 - 1.4100e+02 1.2849e-04 9.1128e-05 9.7206e-06 7.9957e-06 - 1.7800e+02 6.5556e-05 4.3281e-05 4.0286e-06 3.5345e-06 - 2.2400e+02 3.1513e-05 2.0273e-05 2.0104e-06 1.5527e-06 - 2.8200e+02 1.5798e-05 1.0013e-05 8.2067e-07 6.3890e-07 - 3.5500e+02 7.7127e-06 5.1299e-06 4.1513e-07 3.2614e-07 - 4.4700e+02 3.8530e-06 2.3931e-06 1.7897e-07 1.2569e-07 - 5.6200e+02 1.8338e-06 1.1529e-06 7.6934e-08 6.8399e-08 - 7.0800e+02 8.9855e-07 5.4222e-07 3.7429e-08 2.6614e-08 - 8.9100e+02 4.3341e-07 2.3293e-07 1.7743e-08 9.8355e-09 - 1.1200e+03 1.9097e-07 1.0424e-07 6.4893e-09 3.7589e-09 - 1.4100e+03 9.1468e-08 4.9589e-08 2.6918e-09 1.5433e-09 - 1.7800e+03 4.2241e-08 2.2809e-08 1.2714e-09 8.1011e-10 - 2.2400e+03 1.9746e-08 1.0598e-08 5.6312e-10 3.9829e-10 - 2.8200e+03 9.0131e-09 4.7741e-09 2.7757e-10 1.7102e-10 - 3.5500e+03 4.1834e-09 2.1838e-09 1.2791e-10 8.1214e-11 - 4.4700e+03 1.8834e-09 1.0001e-09 5.6593e-11 3.5557e-11 - 5.6200e+03 8.5536e-10 4.4230e-10 2.5073e-11 1.5280e-11 - 7.0800e+03 3.8116e-10 1.9314e-10 1.1081e-11 6.8640e-12 - 8.9100e+03 1.6713e-10 8.4926e-11 4.6625e-12 2.7943e-12 -average flux in [cosZ = 0.30 -- 0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.6321e+04 1.6077e+04 7.9631e+03 6.9576e+03 - 1.1900e-01 1.3624e+04 1.3800e+04 6.7335e+03 5.9255e+03 - 1.3300e-01 1.1411e+04 1.1294e+04 5.7143e+03 4.9594e+03 - 1.5000e-01 9.2936e+03 9.1733e+03 4.8406e+03 4.1249e+03 - 1.6800e-01 7.5954e+03 7.6505e+03 3.9303e+03 3.4246e+03 - 1.8800e-01 6.3526e+03 6.3140e+03 3.2753e+03 2.8384e+03 - 2.1100e-01 5.1842e+03 5.0784e+03 2.6998e+03 2.2673e+03 - 2.3700e-01 4.1699e+03 4.1532e+03 2.2014e+03 1.8516e+03 - 2.6600e-01 3.2805e+03 3.3432e+03 1.7638e+03 1.4841e+03 - 2.9900e-01 2.6796e+03 2.6909e+03 1.4516e+03 1.2122e+03 - 3.3500e-01 2.0923e+03 2.0853e+03 1.1300e+03 9.3752e+02 - 3.7600e-01 1.6317e+03 1.6415e+03 8.9752e+02 7.4372e+02 - 4.2200e-01 1.2780e+03 1.2989e+03 7.2081e+02 6.0521e+02 - 4.7300e-01 1.0089e+03 9.9872e+02 5.6389e+02 4.5298e+02 - 5.3100e-01 7.6881e+02 7.6800e+02 4.3469e+02 3.6528e+02 - 5.9600e-01 5.9423e+02 6.0137e+02 3.3130e+02 2.6520e+02 - 6.6800e-01 4.5184e+02 4.6182e+02 2.7028e+02 2.1710e+02 - 7.5000e-01 3.6055e+02 3.4485e+02 2.0249e+02 1.6162e+02 - 8.4100e-01 2.6333e+02 2.6590e+02 1.5528e+02 1.2915e+02 - 9.4400e-01 2.1112e+02 1.9672e+02 1.0878e+02 9.1211e+01 - 1.0590e+00 1.5315e+02 1.5209e+02 9.2868e+01 6.8506e+01 - 1.1890e+00 1.1875e+02 1.1637e+02 6.8824e+01 5.1246e+01 - 1.3340e+00 8.8380e+01 8.9411e+01 5.2272e+01 4.0007e+01 - 1.4960e+00 6.5651e+01 6.6350e+01 3.8325e+01 2.9349e+01 - 1.6790e+00 4.9137e+01 4.8685e+01 2.7178e+01 2.2978e+01 - 1.8840e+00 3.6595e+01 3.5784e+01 2.0233e+01 1.5973e+01 - 2.1130e+00 2.7348e+01 2.7710e+01 1.5207e+01 1.2124e+01 - 2.3710e+00 1.9490e+01 1.9302e+01 1.1489e+01 8.8928e+00 - 2.6610e+00 1.4848e+01 1.4446e+01 7.9719e+00 6.1875e+00 - 2.9850e+00 1.0508e+01 1.0935e+01 5.8454e+00 4.7297e+00 - 3.3500e+00 7.8984e+00 7.7271e+00 4.1509e+00 3.4899e+00 - 3.7580e+00 5.6794e+00 5.5349e+00 2.9425e+00 2.3304e+00 - 4.2170e+00 4.2010e+00 3.8576e+00 2.2508e+00 1.6150e+00 - 4.7320e+00 2.9263e+00 2.9656e+00 1.5082e+00 1.2104e+00 - 5.3090e+00 2.1135e+00 2.1114e+00 1.0847e+00 7.3900e-01 - 5.9570e+00 1.5098e+00 1.5446e+00 7.1804e-01 5.4703e-01 - 6.6830e+00 1.1825e+00 1.0285e+00 5.0528e-01 4.0169e-01 - 7.4990e+00 8.7054e-01 7.5282e-01 3.4920e-01 3.0403e-01 - 8.4140e+00 6.1826e-01 5.1583e-01 2.7626e-01 2.0743e-01 - 9.4410e+00 4.4324e-01 3.6297e-01 1.8121e-01 1.4537e-01 - 1.1200e+01 2.7589e-01 2.4018e-01 1.0089e-01 8.3929e-02 - 1.4100e+01 1.3972e-01 1.1986e-01 4.5248e-02 3.8582e-02 - 1.7800e+01 7.2472e-02 6.1798e-02 2.1067e-02 1.7809e-02 - 2.2400e+01 3.6875e-02 3.0536e-02 9.6875e-03 7.8125e-03 - 2.8200e+01 1.7979e-02 1.5106e-02 4.5745e-03 3.6170e-03 - 3.5500e+01 9.3239e-03 7.5493e-03 1.8873e-03 1.6620e-03 - 4.4700e+01 4.7427e-03 3.6465e-03 8.6130e-04 7.3602e-04 - 5.6200e+01 2.3310e-03 1.8505e-03 3.7011e-04 2.9893e-04 - 7.0800e+01 1.1864e-03 8.9124e-04 1.6243e-04 1.2825e-04 - 8.9100e+01 5.9035e-04 4.3434e-04 6.9136e-05 6.0494e-05 - 1.1200e+02 2.9286e-04 2.1429e-04 3.0446e-05 2.5804e-05 - 1.4100e+02 1.4255e-04 1.0426e-04 1.4043e-05 1.1560e-05 - 1.7800e+02 7.2472e-05 5.0000e-05 5.7303e-06 4.8034e-06 - 2.2400e+02 3.4955e-05 2.3348e-05 2.6161e-06 2.0580e-06 - 2.8200e+02 1.7447e-05 1.1454e-05 1.0922e-06 8.9716e-07 - 3.5500e+02 8.5634e-06 5.8028e-06 5.3239e-07 4.2817e-07 - 4.4700e+02 4.2506e-06 2.7293e-06 2.2819e-07 1.7002e-07 - 5.6200e+02 2.0285e-06 1.3043e-06 9.8221e-08 8.3452e-08 - 7.0800e+02 1.0028e-06 6.1582e-07 4.6186e-08 3.4887e-08 - 8.9100e+02 4.8036e-07 2.7160e-07 2.0314e-08 1.3580e-08 - 1.1200e+03 2.2054e-07 1.2411e-07 8.6786e-09 5.4732e-09 - 1.4100e+03 1.0496e-07 5.8865e-08 3.7092e-09 2.4965e-09 - 1.7800e+03 4.9157e-08 2.7135e-08 1.7022e-09 1.1461e-09 - 2.2400e+03 2.3304e-08 1.2812e-08 7.6786e-10 5.0446e-10 - 2.8200e+03 1.0851e-08 5.6738e-09 3.5000e-10 2.2092e-10 - 3.5500e+03 4.9859e-09 2.6141e-09 1.5746e-10 1.0000e-10 - 4.4700e+03 2.2819e-09 1.2036e-09 7.0022e-11 4.4295e-11 - 5.6200e+03 1.0374e-09 5.3559e-10 3.1317e-11 1.9217e-11 - 7.0800e+03 4.6186e-10 2.3870e-10 1.3701e-11 8.5028e-12 - 8.9100e+03 2.0875e-10 1.0348e-10 5.8923e-12 3.5466e-12 -average flux in [cosZ = 0.20 -- 0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 2.0668e+04 2.1435e+04 1.0246e+04 8.8017e+03 - 1.1900e-01 1.7238e+04 1.7255e+04 8.5503e+03 7.6787e+03 - 1.3300e-01 1.4115e+04 1.4495e+04 7.3129e+03 6.3028e+03 - 1.5000e-01 1.1646e+04 1.1381e+04 5.9315e+03 5.1835e+03 - 1.6800e-01 9.4838e+03 9.3948e+03 5.0178e+03 4.2501e+03 - 1.8800e-01 7.7604e+03 7.8069e+03 4.1020e+03 3.4467e+03 - 2.1100e-01 6.2325e+03 6.1992e+03 3.3047e+03 2.8487e+03 - 2.3700e-01 4.8981e+03 5.0633e+03 2.6524e+03 2.3006e+03 - 2.6600e-01 3.9638e+03 3.9269e+03 2.1508e+03 1.8439e+03 - 2.9900e-01 3.0564e+03 3.0900e+03 1.6471e+03 1.3965e+03 - 3.3500e-01 2.4369e+03 2.4113e+03 1.4087e+03 1.1453e+03 - 3.7600e-01 1.8640e+03 1.8465e+03 1.0784e+03 8.7950e+02 - 4.2200e-01 1.4406e+03 1.4035e+03 8.2064e+02 6.8203e+02 - 4.7300e-01 1.1001e+03 1.0818e+03 6.2158e+02 5.1070e+02 - 5.3100e-01 8.4388e+02 8.5498e+02 4.8964e+02 4.3067e+02 - 5.9600e-01 6.7266e+02 6.5202e+02 3.6689e+02 3.0941e+02 - 6.6800e-01 4.9296e+02 5.0878e+02 2.9907e+02 2.4114e+02 - 7.5000e-01 3.6145e+02 3.6701e+02 2.0812e+02 1.8051e+02 - 8.4100e-01 2.9182e+02 2.8880e+02 1.6948e+02 1.4268e+02 - 9.4400e-01 2.1378e+02 2.1234e+02 1.2565e+02 1.0140e+02 - 1.0590e+00 1.6267e+02 1.6580e+02 9.6242e+01 8.0038e+01 - 1.1890e+00 1.2039e+02 1.1731e+02 7.1107e+01 5.9337e+01 - 1.3340e+00 9.0519e+01 9.6231e+01 5.4601e+01 4.3716e+01 - 1.4960e+00 6.6147e+01 6.7563e+01 4.2306e+01 3.2219e+01 - 1.6790e+00 5.2226e+01 5.2025e+01 3.1129e+01 2.3891e+01 - 1.8840e+00 3.8880e+01 3.8480e+01 2.2501e+01 1.8077e+01 - 2.1130e+00 2.9798e+01 2.8825e+01 1.7440e+01 1.3682e+01 - 2.3710e+00 2.1246e+01 1.9542e+01 1.2296e+01 9.6509e+00 - 2.6610e+00 1.5585e+01 1.5971e+01 9.5259e+00 7.2566e+00 - 2.9850e+00 1.1587e+01 1.2163e+01 6.6174e+00 5.0204e+00 - 3.3500e+00 8.3593e+00 8.6586e+00 5.1850e+00 3.8891e+00 - 3.7580e+00 6.2398e+00 6.2429e+00 3.3940e+00 2.7763e+00 - 4.2170e+00 4.6164e+00 4.4308e+00 2.6090e+00 1.9391e+00 - 4.7320e+00 3.2748e+00 3.1415e+00 1.9758e+00 1.3989e+00 - 5.3090e+00 2.5092e+00 2.2127e+00 1.2918e+00 1.0859e+00 - 5.9570e+00 1.6903e+00 1.7483e+00 9.5049e-01 7.6387e-01 - 6.6830e+00 1.2843e+00 1.1789e+00 5.9086e-01 5.3957e-01 - 7.4990e+00 9.4563e-01 8.4744e-01 4.1857e-01 3.1639e-01 - 8.4140e+00 6.9147e-01 5.9618e-01 3.4170e-01 2.3377e-01 - 9.4410e+00 4.8565e-01 4.3089e-01 2.1348e-01 1.7400e-01 - 1.1200e+01 3.0089e-01 2.7143e-01 1.2946e-01 1.0714e-01 - 1.4100e+01 1.5319e-01 1.3830e-01 6.0993e-02 5.1702e-02 - 1.7800e+01 7.9213e-02 6.9663e-02 2.8708e-02 2.4101e-02 - 2.2400e+01 3.9821e-02 3.4196e-02 1.3348e-02 1.0759e-02 - 2.8200e+01 2.0496e-02 1.7411e-02 6.0638e-03 5.1064e-03 - 3.5500e+01 1.0310e-02 8.6761e-03 2.7493e-03 2.3014e-03 - 4.4700e+01 5.1902e-03 4.2953e-03 1.2573e-03 1.0358e-03 - 5.6200e+01 2.6157e-03 2.1352e-03 5.2669e-04 4.6263e-04 - 7.0800e+01 1.2938e-03 1.0381e-03 2.3588e-04 2.0339e-04 - 8.9100e+01 6.5769e-04 5.0730e-04 1.0516e-04 8.7542e-05 - 1.1200e+02 3.2411e-04 2.5089e-04 4.5893e-05 3.9464e-05 - 1.4100e+02 1.6099e-04 1.2128e-04 2.0496e-05 1.6950e-05 - 1.7800e+02 7.9775e-05 5.8427e-05 8.3708e-06 6.4607e-06 - 2.2400e+02 3.9107e-05 2.7500e-05 3.4911e-06 2.7991e-06 - 2.8200e+02 1.9291e-05 1.3227e-05 1.5745e-06 1.2766e-06 - 3.5500e+02 9.4366e-06 6.3662e-06 6.8732e-07 5.4366e-07 - 4.4700e+02 4.6532e-06 3.0201e-06 2.9530e-07 2.4161e-07 - 5.6200e+02 2.2064e-06 1.4306e-06 1.2900e-07 9.7509e-08 - 7.0800e+02 1.1045e-06 6.8362e-07 5.8333e-08 4.4774e-08 - 8.9100e+02 5.2525e-07 3.1874e-07 2.2783e-08 1.9529e-08 - 1.1200e+03 2.5714e-07 1.5089e-07 1.2054e-08 8.4732e-09 - 1.4100e+03 1.2057e-07 7.0638e-08 5.4326e-09 4.2553e-09 - 1.7800e+03 5.7865e-08 3.2584e-08 2.3989e-09 1.7022e-09 - 2.2400e+03 2.7723e-08 1.5670e-08 1.1027e-09 6.5625e-10 - 2.8200e+03 1.3191e-08 6.8085e-09 4.5035e-10 2.9574e-10 - 3.5500e+03 5.9718e-09 3.1268e-09 1.9577e-10 1.2310e-10 - 4.4700e+03 2.7964e-09 1.4362e-09 8.6801e-11 5.5257e-11 - 5.6200e+03 1.2580e-09 6.4413e-10 3.9146e-11 2.4199e-11 - 7.0800e+03 5.5226e-10 2.9379e-10 1.6808e-11 1.0353e-11 - 8.9100e+03 2.6038e-10 1.2570e-10 7.4747e-12 4.5118e-12 -average flux in [cosZ = 0.10 -- 0.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 3.0039e+04 3.0563e+04 1.4639e+04 1.3925e+04 - 1.1900e-01 2.6264e+04 2.5744e+04 1.2419e+04 1.1204e+04 - 1.3300e-01 2.1268e+04 1.9983e+04 1.0416e+04 8.5284e+03 - 1.5000e-01 1.6432e+04 1.6432e+04 8.4087e+03 7.9276e+03 - 1.6800e-01 1.3625e+04 1.3379e+04 6.7386e+03 5.8232e+03 - 1.8800e-01 1.0598e+04 1.1053e+04 5.6045e+03 4.8283e+03 - 2.1100e-01 8.4452e+03 8.4739e+03 4.7927e+03 3.7899e+03 - 2.3700e-01 6.7895e+03 6.9113e+03 3.4032e+03 3.1087e+03 - 2.6600e-01 5.6560e+03 5.5061e+03 2.8840e+03 2.6767e+03 - 2.9900e-01 4.0444e+03 4.1709e+03 2.2214e+03 2.0032e+03 - 3.3500e-01 3.4536e+03 3.1559e+03 1.8106e+03 1.5610e+03 - 3.7600e-01 2.3753e+03 2.3811e+03 1.3346e+03 1.2207e+03 - 4.2200e-01 1.8668e+03 1.8314e+03 1.0522e+03 9.3386e+02 - 4.7300e-01 1.3926e+03 1.4048e+03 7.6099e+02 6.7822e+02 - 5.3100e-01 1.0222e+03 1.0494e+03 6.5455e+02 5.1679e+02 - 5.9600e-01 7.9194e+02 7.4762e+02 4.4224e+02 3.6066e+02 - 6.6800e-01 6.0890e+02 5.5427e+02 3.2879e+02 2.9758e+02 - 7.5000e-01 4.3198e+02 4.3755e+02 2.7451e+02 2.2149e+02 - 8.4100e-01 3.3592e+02 3.3525e+02 2.1381e+02 1.4986e+02 - 9.4400e-01 2.4956e+02 2.4426e+02 1.3123e+02 1.1803e+02 - 1.0590e+00 1.8211e+02 1.8256e+02 1.1232e+02 8.5953e+01 - 1.1890e+00 1.3705e+02 1.3169e+02 7.6093e+01 7.5034e+01 - 1.3340e+00 9.4539e+01 9.7176e+01 5.9756e+01 4.7119e+01 - 1.4960e+00 7.3563e+01 7.1330e+01 4.4942e+01 3.7474e+01 - 1.6790e+00 5.5715e+01 5.3973e+01 3.4794e+01 2.8108e+01 - 1.8840e+00 4.0784e+01 4.1795e+01 2.6932e+01 1.8646e+01 - 2.1130e+00 2.8283e+01 3.2795e+01 1.8274e+01 1.5801e+01 - 2.3710e+00 2.3147e+01 2.1358e+01 1.3006e+01 1.0298e+01 - 2.6610e+00 1.6120e+01 1.6936e+01 1.0736e+01 8.8604e+00 - 2.9850e+00 1.1295e+01 1.2319e+01 7.6637e+00 5.8483e+00 - 3.3500e+00 9.2938e+00 9.0439e+00 5.3726e+00 4.1233e+00 - 3.7580e+00 7.0304e+00 6.1595e+00 3.7675e+00 2.6605e+00 - 4.2170e+00 4.9542e+00 4.7201e+00 2.7196e+00 2.2057e+00 - 4.7320e+00 3.5830e+00 3.8077e+00 1.9086e+00 1.6068e+00 - 5.3090e+00 2.6965e+00 2.3829e+00 1.5026e+00 1.2267e+00 - 5.9570e+00 1.8351e+00 1.8765e+00 1.0603e+00 7.8113e-01 - 6.6830e+00 1.3101e+00 1.4314e+00 7.6941e-01 5.8717e-01 - 7.4990e+00 1.0512e+00 1.0564e+00 6.7886e-01 3.7688e-01 - 8.4140e+00 7.5915e-01 6.5867e-01 4.0685e-01 2.8098e-01 - 9.4410e+00 5.4595e-01 4.7423e-01 2.7376e-01 1.9308e-01 - 1.1200e+01 3.4107e-01 3.1518e-01 1.7143e-01 1.4554e-01 - 1.4100e+01 1.7589e-01 1.6028e-01 8.5106e-02 7.0922e-02 - 1.7800e+01 9.0449e-02 8.2584e-02 4.1404e-02 3.3989e-02 - 2.2400e+01 4.6429e-02 4.2054e-02 1.9911e-02 1.6027e-02 - 2.8200e+01 2.3404e-02 2.1277e-02 1.0071e-02 7.8723e-03 - 3.5500e+01 1.1915e-02 1.0761e-02 4.5634e-03 3.6901e-03 - 4.4700e+01 6.1745e-03 5.3468e-03 2.0291e-03 1.7338e-03 - 5.6200e+01 3.0961e-03 2.6335e-03 9.2883e-04 8.0071e-04 - 7.0800e+01 1.5678e-03 1.3234e-03 4.4068e-04 3.6158e-04 - 8.9100e+01 7.7441e-04 6.6218e-04 1.9080e-04 1.5039e-04 - 1.1200e+02 3.9196e-04 3.2054e-04 8.7143e-05 7.1071e-05 - 1.4100e+02 1.9291e-04 1.5887e-04 3.6596e-05 3.1277e-05 - 1.7800e+02 9.6629e-05 7.6404e-05 1.6180e-05 1.3652e-05 - 2.2400e+02 4.7321e-05 3.6295e-05 7.4554e-06 5.5804e-06 - 2.8200e+02 2.3546e-05 1.7518e-05 2.8298e-06 2.3369e-06 - 3.5500e+02 1.1352e-05 8.2254e-06 1.2592e-06 1.0423e-06 - 4.4700e+02 5.5257e-06 3.9821e-06 5.3244e-07 4.4966e-07 - 5.6200e+02 2.6512e-06 1.8683e-06 2.3310e-07 1.8327e-07 - 7.0800e+02 1.3206e-06 8.8418e-07 1.0254e-07 8.1215e-08 - 8.9100e+02 6.2738e-07 4.1077e-07 4.5342e-08 3.3446e-08 - 1.1200e+03 3.0536e-07 1.9911e-07 1.8661e-08 1.4911e-08 - 1.4100e+03 1.4610e-07 9.0780e-08 8.5816e-09 6.0567e-09 - 1.7800e+03 7.1348e-08 4.2472e-08 3.3764e-09 2.3933e-09 - 2.2400e+03 3.3304e-08 1.9911e-08 1.4732e-09 1.1741e-09 - 2.8200e+03 1.6348e-08 9.4326e-09 6.8440e-10 4.6454e-10 - 3.5500e+03 7.5775e-09 4.5634e-09 3.2394e-10 2.2535e-10 - 4.4700e+03 3.6018e-09 1.9642e-09 1.6667e-10 9.7539e-11 - 5.6200e+03 1.6886e-09 8.8790e-10 5.3203e-11 3.4875e-11 - 7.0800e+03 7.5989e-10 4.0395e-10 2.3446e-11 1.4689e-11 - 8.9100e+03 3.5017e-10 1.8070e-10 1.0314e-11 6.5208e-12 -average flux in [cosZ =-0.00 -- -0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 2.9033e+04 3.1046e+04 1.5437e+04 1.3712e+04 - 1.1900e-01 2.6183e+04 2.4664e+04 1.2872e+04 1.1414e+04 - 1.3300e-01 2.0565e+04 2.0505e+04 1.0108e+04 8.8180e+03 - 1.5000e-01 1.6392e+04 1.6620e+04 8.2736e+03 7.5637e+03 - 1.6800e-01 1.3203e+04 1.3268e+04 6.7679e+03 6.1235e+03 - 1.8800e-01 1.0791e+04 1.0634e+04 5.5947e+03 4.8881e+03 - 2.1100e-01 8.7056e+03 8.5963e+03 4.5979e+03 4.0043e+03 - 2.3700e-01 6.9374e+03 6.7616e+03 3.5677e+03 3.0835e+03 - 2.6600e-01 5.3564e+03 5.4201e+03 2.8902e+03 2.7602e+03 - 2.9900e-01 4.0354e+03 4.0808e+03 2.2181e+03 1.9935e+03 - 3.3500e-01 3.2796e+03 3.2114e+03 1.7977e+03 1.4698e+03 - 3.7600e-01 2.3794e+03 2.6059e+03 1.4365e+03 1.1726e+03 - 4.2200e-01 1.8425e+03 1.8444e+03 1.0723e+03 9.3641e+02 - 4.7300e-01 1.3947e+03 1.4074e+03 7.6281e+02 6.8338e+02 - 5.3100e-01 1.0754e+03 1.0528e+03 6.6697e+02 5.0913e+02 - 5.9600e-01 7.8522e+02 7.8483e+02 4.6077e+02 3.9787e+02 - 6.6800e-01 6.0111e+02 5.6685e+02 3.4174e+02 3.1358e+02 - 7.5000e-01 4.5027e+02 4.4767e+02 2.7175e+02 2.2356e+02 - 8.4100e-01 3.2429e+02 3.1808e+02 2.1005e+02 1.5017e+02 - 9.4400e-01 2.5384e+02 2.5353e+02 1.5266e+02 1.3345e+02 - 1.0590e+00 1.9397e+02 1.8009e+02 1.0916e+02 8.3945e+01 - 1.1890e+00 1.3600e+02 1.4076e+02 8.3983e+01 6.8981e+01 - 1.3340e+00 9.6006e+01 1.0328e+02 6.2810e+01 4.9319e+01 - 1.4960e+00 7.4404e+01 7.3067e+01 5.0127e+01 3.7451e+01 - 1.6790e+00 5.4647e+01 5.2694e+01 3.1099e+01 2.8772e+01 - 1.8840e+00 3.8254e+01 4.1297e+01 2.4738e+01 1.9902e+01 - 2.1130e+00 3.0681e+01 3.2115e+01 1.8528e+01 1.4781e+01 - 2.3710e+00 2.1993e+01 2.2350e+01 1.3907e+01 1.0705e+01 - 2.6610e+00 1.5673e+01 1.7197e+01 1.2099e+01 7.8659e+00 - 2.9850e+00 1.1612e+01 1.2131e+01 7.4472e+00 5.6998e+00 - 3.3500e+00 9.7270e+00 8.8713e+00 5.6162e+00 4.3516e+00 - 3.7580e+00 6.7562e+00 6.7836e+00 3.5701e+00 2.9556e+00 - 4.2170e+00 5.0533e+00 4.6088e+00 2.6875e+00 2.3793e+00 - 4.7320e+00 3.7858e+00 3.9339e+00 1.8758e+00 1.6746e+00 - 5.3090e+00 2.7779e+00 2.5397e+00 1.4532e+00 1.1860e+00 - 5.9570e+00 1.6865e+00 1.9492e+00 1.1497e+00 8.8638e-01 - 6.6830e+00 1.2354e+00 1.4138e+00 7.0228e-01 6.3946e-01 - 7.4990e+00 1.0137e+00 1.0150e+00 6.7576e-01 4.6095e-01 - 8.4140e+00 7.5640e-01 6.3280e-01 4.1607e-01 2.6353e-01 - 9.4410e+00 4.8405e-01 4.8616e-01 2.6607e-01 2.3328e-01 - 1.1200e+01 3.4107e-01 3.1518e-01 1.7143e-01 1.4554e-01 - 1.4100e+01 1.7589e-01 1.6028e-01 8.5106e-02 7.0922e-02 - 1.7800e+01 9.0449e-02 8.2584e-02 4.1404e-02 3.3989e-02 - 2.2400e+01 4.6429e-02 4.2054e-02 1.9911e-02 1.6027e-02 - 2.8200e+01 2.3404e-02 2.1277e-02 1.0071e-02 7.8723e-03 - 3.5500e+01 1.1915e-02 1.0761e-02 4.5634e-03 3.6901e-03 - 4.4700e+01 6.1745e-03 5.3468e-03 2.0291e-03 1.7338e-03 - 5.6200e+01 3.0961e-03 2.6335e-03 9.2883e-04 8.0071e-04 - 7.0800e+01 1.5678e-03 1.3234e-03 4.4068e-04 3.6158e-04 - 8.9100e+01 7.7441e-04 6.6218e-04 1.9080e-04 1.5039e-04 - 1.1200e+02 3.9196e-04 3.2054e-04 8.7143e-05 7.1071e-05 - 1.4100e+02 1.9291e-04 1.5887e-04 3.6596e-05 3.1277e-05 - 1.7800e+02 9.6629e-05 7.6404e-05 1.6180e-05 1.3652e-05 - 2.2400e+02 4.7321e-05 3.6295e-05 7.4554e-06 5.5804e-06 - 2.8200e+02 2.3546e-05 1.7518e-05 2.8298e-06 2.3369e-06 - 3.5500e+02 1.1352e-05 8.2254e-06 1.2592e-06 1.0423e-06 - 4.4700e+02 5.5257e-06 3.9821e-06 5.3244e-07 4.4966e-07 - 5.6200e+02 2.6512e-06 1.8683e-06 2.3310e-07 1.8327e-07 - 7.0800e+02 1.3206e-06 8.8418e-07 1.0254e-07 8.1215e-08 - 8.9100e+02 6.2738e-07 4.1077e-07 4.5342e-08 3.3446e-08 - 1.1200e+03 3.0536e-07 1.9911e-07 1.8661e-08 1.4911e-08 - 1.4100e+03 1.4610e-07 9.0780e-08 8.5816e-09 6.0567e-09 - 1.7800e+03 7.1348e-08 4.2472e-08 3.3764e-09 2.3933e-09 - 2.2400e+03 3.3304e-08 1.9911e-08 1.4732e-09 1.1741e-09 - 2.8200e+03 1.6348e-08 9.4326e-09 6.8440e-10 4.6454e-10 - 3.5500e+03 7.5775e-09 4.5634e-09 3.2394e-10 2.2535e-10 - 4.4700e+03 3.6018e-09 1.9642e-09 1.6667e-10 9.7539e-11 - 5.6200e+03 1.6886e-09 8.8790e-10 5.3203e-11 3.4875e-11 - 7.0800e+03 7.5989e-10 4.0395e-10 2.3446e-11 1.4689e-11 - 8.9100e+03 3.5017e-10 1.8070e-10 1.0314e-11 6.5208e-12 -average flux in [cosZ =-0.10 -- -0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.8558e+04 1.8523e+04 8.6699e+03 8.5143e+03 - 1.1900e-01 1.5796e+04 1.5379e+04 8.0369e+03 7.1164e+03 - 1.3300e-01 1.2989e+04 1.3228e+04 6.4519e+03 5.7691e+03 - 1.5000e-01 1.0630e+04 1.0486e+04 5.4486e+03 4.9333e+03 - 1.6800e-01 8.8463e+03 8.7743e+03 4.5869e+03 4.0375e+03 - 1.8800e-01 7.1692e+03 7.2922e+03 3.5971e+03 3.4830e+03 - 2.1100e-01 5.7379e+03 5.9537e+03 3.0318e+03 2.7366e+03 - 2.3700e-01 4.8709e+03 4.7963e+03 2.4973e+03 2.1375e+03 - 2.6600e-01 3.7577e+03 3.8014e+03 2.0654e+03 1.7699e+03 - 2.9900e-01 3.0101e+03 3.0625e+03 1.6074e+03 1.3632e+03 - 3.3500e-01 2.3713e+03 2.4191e+03 1.3029e+03 1.0771e+03 - 3.7600e-01 1.8120e+03 1.8866e+03 1.0642e+03 8.8814e+02 - 4.2200e-01 1.4672e+03 1.4449e+03 8.2114e+02 7.1250e+02 - 4.7300e-01 1.1190e+03 1.1513e+03 6.3587e+02 5.3225e+02 - 5.3100e-01 8.6860e+02 8.6107e+02 4.8463e+02 4.1562e+02 - 5.9600e-01 6.5740e+02 6.6542e+02 3.7891e+02 3.1981e+02 - 6.6800e-01 4.9704e+02 5.0374e+02 2.8767e+02 2.3518e+02 - 7.5000e-01 3.8144e+02 3.8063e+02 2.2254e+02 1.7785e+02 - 8.4100e-01 2.9802e+02 2.8997e+02 1.7741e+02 1.3908e+02 - 9.4400e-01 2.2721e+02 2.2428e+02 1.2814e+02 1.0403e+02 - 1.0590e+00 1.6772e+02 1.6927e+02 9.7644e+01 7.6373e+01 - 1.1890e+00 1.2494e+02 1.2361e+02 7.3784e+01 5.9287e+01 - 1.3340e+00 9.9037e+01 9.5146e+01 5.6912e+01 4.5781e+01 - 1.4960e+00 7.1913e+01 6.9386e+01 4.2054e+01 3.5398e+01 - 1.6790e+00 5.2263e+01 5.1516e+01 3.2567e+01 2.2518e+01 - 1.8840e+00 3.9525e+01 3.8746e+01 2.1935e+01 1.8242e+01 - 2.1130e+00 2.8643e+01 2.7375e+01 1.7119e+01 1.3390e+01 - 2.3710e+00 2.1567e+01 2.1288e+01 1.1937e+01 1.0274e+01 - 2.6610e+00 1.5745e+01 1.5655e+01 9.1473e+00 7.4251e+00 - 2.9850e+00 1.1266e+01 1.1145e+01 6.4854e+00 5.2414e+00 - 3.3500e+00 8.4395e+00 8.4134e+00 4.8256e+00 3.9304e+00 - 3.7580e+00 6.2473e+00 6.4545e+00 3.4580e+00 2.8484e+00 - 4.2170e+00 4.4618e+00 4.4034e+00 2.3622e+00 2.0507e+00 - 4.7320e+00 3.3081e+00 3.1323e+00 2.0580e+00 1.4637e+00 - 5.3090e+00 2.2732e+00 2.2545e+00 1.4692e+00 9.9247e-01 - 5.9570e+00 1.7791e+00 1.5045e+00 8.7690e-01 8.1183e-01 - 6.6830e+00 1.2228e+00 1.1899e+00 6.5910e-01 5.0494e-01 - 7.4990e+00 9.4900e-01 8.7465e-01 4.6363e-01 3.7583e-01 - 8.4140e+00 6.7489e-01 6.2726e-01 3.3579e-01 2.7044e-01 - 9.4410e+00 4.8420e-01 4.7035e-01 2.5957e-01 1.8830e-01 - 1.1200e+01 3.0089e-01 2.7143e-01 1.2946e-01 1.0714e-01 - 1.4100e+01 1.5319e-01 1.3830e-01 6.0993e-02 5.1702e-02 - 1.7800e+01 7.9213e-02 6.9663e-02 2.8708e-02 2.4101e-02 - 2.2400e+01 3.9821e-02 3.4196e-02 1.3348e-02 1.0759e-02 - 2.8200e+01 2.0496e-02 1.7411e-02 6.0638e-03 5.1064e-03 - 3.5500e+01 1.0310e-02 8.6761e-03 2.7493e-03 2.3014e-03 - 4.4700e+01 5.1902e-03 4.2953e-03 1.2573e-03 1.0358e-03 - 5.6200e+01 2.6157e-03 2.1352e-03 5.2669e-04 4.6263e-04 - 7.0800e+01 1.2938e-03 1.0381e-03 2.3588e-04 2.0339e-04 - 8.9100e+01 6.5769e-04 5.0730e-04 1.0516e-04 8.7542e-05 - 1.1200e+02 3.2411e-04 2.5089e-04 4.5893e-05 3.9464e-05 - 1.4100e+02 1.6099e-04 1.2128e-04 2.0496e-05 1.6950e-05 - 1.7800e+02 7.9775e-05 5.8427e-05 8.3708e-06 6.4607e-06 - 2.2400e+02 3.9107e-05 2.7500e-05 3.4911e-06 2.7991e-06 - 2.8200e+02 1.9291e-05 1.3227e-05 1.5745e-06 1.2766e-06 - 3.5500e+02 9.4366e-06 6.3662e-06 6.8732e-07 5.4366e-07 - 4.4700e+02 4.6532e-06 3.0201e-06 2.9530e-07 2.4161e-07 - 5.6200e+02 2.2064e-06 1.4306e-06 1.2900e-07 9.7509e-08 - 7.0800e+02 1.1045e-06 6.8362e-07 5.8333e-08 4.4774e-08 - 8.9100e+02 5.2525e-07 3.1874e-07 2.2783e-08 1.9529e-08 - 1.1200e+03 2.5714e-07 1.5089e-07 1.2054e-08 8.4732e-09 - 1.4100e+03 1.2057e-07 7.0638e-08 5.4326e-09 4.2553e-09 - 1.7800e+03 5.7865e-08 3.2584e-08 2.3989e-09 1.7022e-09 - 2.2400e+03 2.7723e-08 1.5670e-08 1.1027e-09 6.5625e-10 - 2.8200e+03 1.3191e-08 6.8085e-09 4.5035e-10 2.9574e-10 - 3.5500e+03 5.9718e-09 3.1268e-09 1.9577e-10 1.2310e-10 - 4.4700e+03 2.7964e-09 1.4362e-09 8.6801e-11 5.5257e-11 - 5.6200e+03 1.2580e-09 6.4413e-10 3.9146e-11 2.4199e-11 - 7.0800e+03 5.5226e-10 2.9379e-10 1.6808e-11 1.0353e-11 - 8.9100e+03 2.6038e-10 1.2570e-10 7.4747e-12 4.5118e-12 -average flux in [cosZ =-0.20 -- -0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 1.2040e+04 1.1909e+04 5.7702e+03 5.1816e+03 - 1.1900e-01 1.0337e+04 1.0346e+04 5.1347e+03 4.5934e+03 - 1.3300e-01 8.5390e+03 8.5863e+03 4.3321e+03 3.8714e+03 - 1.5000e-01 7.0501e+03 7.4085e+03 3.7562e+03 3.3718e+03 - 1.6800e-01 6.0686e+03 6.0699e+03 3.1030e+03 2.7713e+03 - 1.8800e-01 5.0658e+03 5.1322e+03 2.7053e+03 2.3125e+03 - 2.1100e-01 4.1309e+03 4.3213e+03 2.1920e+03 1.9291e+03 - 2.3700e-01 3.4172e+03 3.5059e+03 1.7655e+03 1.5896e+03 - 2.6600e-01 2.7509e+03 2.7867e+03 1.4947e+03 1.2909e+03 - 2.9900e-01 2.2256e+03 2.2218e+03 1.1584e+03 1.0417e+03 - 3.3500e-01 1.7759e+03 1.8842e+03 1.0287e+03 8.7781e+02 - 3.7600e-01 1.4401e+03 1.4486e+03 7.7801e+02 6.6543e+02 - 4.2200e-01 1.1661e+03 1.1423e+03 6.3248e+02 5.3726e+02 - 4.7300e-01 9.0561e+02 9.1879e+02 4.9834e+02 4.2317e+02 - 5.3100e-01 7.1015e+02 7.2872e+02 4.0684e+02 3.3544e+02 - 5.9600e-01 5.6026e+02 5.7057e+02 3.0947e+02 2.6674e+02 - 6.6800e-01 4.4688e+02 4.3686e+02 2.5091e+02 2.0262e+02 - 7.5000e-01 3.3428e+02 3.3101e+02 1.9000e+02 1.5585e+02 - 8.4100e-01 2.6016e+02 2.6318e+02 1.4770e+02 1.2257e+02 - 9.4400e-01 1.9391e+02 2.0420e+02 1.1529e+02 9.1624e+01 - 1.0590e+00 1.5131e+02 1.4923e+02 8.6805e+01 7.2057e+01 - 1.1890e+00 1.1696e+02 1.1472e+02 6.7652e+01 5.2591e+01 - 1.3340e+00 8.5999e+01 8.3738e+01 5.0501e+01 4.1198e+01 - 1.4960e+00 6.5344e+01 6.6477e+01 3.6728e+01 3.0129e+01 - 1.6790e+00 4.7621e+01 4.8344e+01 2.9066e+01 2.1667e+01 - 1.8840e+00 3.6951e+01 3.5978e+01 2.0545e+01 1.6735e+01 - 2.1130e+00 2.6098e+01 2.6668e+01 1.5463e+01 1.1926e+01 - 2.3710e+00 1.9302e+01 1.9316e+01 1.0535e+01 9.1261e+00 - 2.6610e+00 1.4497e+01 1.4770e+01 8.3863e+00 6.0248e+00 - 2.9850e+00 1.1000e+01 1.0550e+01 5.9329e+00 4.5337e+00 - 3.3500e+00 7.7906e+00 7.5303e+00 4.1352e+00 3.2817e+00 - 3.7580e+00 5.4558e+00 5.7793e+00 3.0085e+00 2.4261e+00 - 4.2170e+00 4.4800e+00 4.0975e+00 2.1893e+00 1.6490e+00 - 4.7320e+00 3.0653e+00 2.8357e+00 1.5426e+00 1.1129e+00 - 5.3090e+00 2.3740e+00 2.1162e+00 1.0332e+00 8.3202e-01 - 5.9570e+00 1.6056e+00 1.5594e+00 6.8294e-01 5.6750e-01 - 6.6830e+00 1.2097e+00 1.1233e+00 6.0021e-01 4.6810e-01 - 7.4990e+00 8.4281e-01 8.1749e-01 3.7732e-01 2.6870e-01 - 8.4140e+00 6.3642e-01 5.3143e-01 2.7643e-01 1.9462e-01 - 9.4410e+00 4.0904e-01 4.4280e-01 1.7412e-01 1.2930e-01 - 1.1200e+01 2.7589e-01 2.4018e-01 1.0089e-01 8.3929e-02 - 1.4100e+01 1.3972e-01 1.1986e-01 4.5248e-02 3.8582e-02 - 1.7800e+01 7.2472e-02 6.1798e-02 2.1067e-02 1.7809e-02 - 2.2400e+01 3.6875e-02 3.0536e-02 9.6875e-03 7.8125e-03 - 2.8200e+01 1.7979e-02 1.5106e-02 4.5745e-03 3.6170e-03 - 3.5500e+01 9.3239e-03 7.5493e-03 1.8873e-03 1.6620e-03 - 4.4700e+01 4.7427e-03 3.6465e-03 8.6130e-04 7.3602e-04 - 5.6200e+01 2.3310e-03 1.8505e-03 3.7011e-04 2.9893e-04 - 7.0800e+01 1.1864e-03 8.9124e-04 1.6243e-04 1.2825e-04 - 8.9100e+01 5.9035e-04 4.3434e-04 6.9136e-05 6.0494e-05 - 1.1200e+02 2.9286e-04 2.1429e-04 3.0446e-05 2.5804e-05 - 1.4100e+02 1.4255e-04 1.0426e-04 1.4043e-05 1.1560e-05 - 1.7800e+02 7.2472e-05 5.0000e-05 5.7303e-06 4.8034e-06 - 2.2400e+02 3.4955e-05 2.3348e-05 2.6161e-06 2.0580e-06 - 2.8200e+02 1.7447e-05 1.1454e-05 1.0922e-06 8.9716e-07 - 3.5500e+02 8.5634e-06 5.8028e-06 5.3239e-07 4.2817e-07 - 4.4700e+02 4.2506e-06 2.7293e-06 2.2819e-07 1.7002e-07 - 5.6200e+02 2.0285e-06 1.3043e-06 9.8221e-08 8.3452e-08 - 7.0800e+02 1.0028e-06 6.1582e-07 4.6186e-08 3.4887e-08 - 8.9100e+02 4.8036e-07 2.7160e-07 2.0314e-08 1.3580e-08 - 1.1200e+03 2.2054e-07 1.2411e-07 8.6786e-09 5.4732e-09 - 1.4100e+03 1.0496e-07 5.8865e-08 3.7092e-09 2.4965e-09 - 1.7800e+03 4.9157e-08 2.7135e-08 1.7022e-09 1.1461e-09 - 2.2400e+03 2.3304e-08 1.2812e-08 7.6786e-10 5.0446e-10 - 2.8200e+03 1.0851e-08 5.6738e-09 3.5000e-10 2.2092e-10 - 3.5500e+03 4.9859e-09 2.6141e-09 1.5746e-10 1.0000e-10 - 4.4700e+03 2.2819e-09 1.2036e-09 7.0022e-11 4.4295e-11 - 5.6200e+03 1.0374e-09 5.3559e-10 3.1317e-11 1.9217e-11 - 7.0800e+03 4.6186e-10 2.3870e-10 1.3701e-11 8.5028e-12 - 8.9100e+03 2.0875e-10 1.0348e-10 5.8923e-12 3.5466e-12 -average flux in [cosZ =-0.30 -- -0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 8.6591e+03 8.5339e+03 4.4113e+03 3.7462e+03 - 1.1900e-01 7.5289e+03 7.5383e+03 3.7498e+03 3.2706e+03 - 1.3300e-01 6.3238e+03 6.4071e+03 3.3175e+03 2.7904e+03 - 1.5000e-01 5.3179e+03 5.4036e+03 2.6470e+03 2.4065e+03 - 1.6800e-01 4.5092e+03 4.5026e+03 2.3060e+03 2.1113e+03 - 1.8800e-01 3.7953e+03 3.8186e+03 1.9911e+03 1.7286e+03 - 2.1100e-01 3.2195e+03 3.2564e+03 1.6564e+03 1.4932e+03 - 2.3700e-01 2.6106e+03 2.7046e+03 1.3739e+03 1.2285e+03 - 2.6600e-01 2.2005e+03 2.2119e+03 1.1504e+03 1.0100e+03 - 2.9900e-01 1.7968e+03 1.8386e+03 9.4467e+02 8.1459e+02 - 3.3500e-01 1.4554e+03 1.4800e+03 7.7848e+02 6.8633e+02 - 3.7600e-01 1.1818e+03 1.2069e+03 6.2334e+02 5.3790e+02 - 4.2200e-01 9.6658e+02 9.4274e+02 5.1363e+02 4.3557e+02 - 4.7300e-01 7.6563e+02 7.6238e+02 4.0742e+02 3.4886e+02 - 5.3100e-01 6.0125e+02 6.0250e+02 3.1941e+02 2.7482e+02 - 5.9600e-01 4.8155e+02 4.7844e+02 2.6035e+02 2.1369e+02 - 6.6800e-01 3.8181e+02 3.7913e+02 2.0175e+02 1.6987e+02 - 7.5000e-01 2.9000e+02 2.9307e+02 1.6045e+02 1.3607e+02 - 8.4100e-01 2.2512e+02 2.2189e+02 1.2439e+02 1.0103e+02 - 9.4400e-01 1.7740e+02 1.7745e+02 9.2856e+01 8.0523e+01 - 1.0590e+00 1.3593e+02 1.3474e+02 7.1748e+01 5.9730e+01 - 1.1890e+00 1.0633e+02 1.0252e+02 5.6404e+01 4.7085e+01 - 1.3340e+00 7.8629e+01 7.7117e+01 4.3028e+01 3.4720e+01 - 1.4960e+00 6.0563e+01 5.9405e+01 3.2999e+01 2.6586e+01 - 1.6790e+00 4.4374e+01 4.4163e+01 2.4269e+01 1.9062e+01 - 1.8840e+00 3.3889e+01 3.3742e+01 1.8370e+01 1.4183e+01 - 2.1130e+00 2.4880e+01 2.5307e+01 1.3418e+01 1.0360e+01 - 2.3710e+00 1.8654e+01 1.8208e+01 9.7907e+00 7.7545e+00 - 2.6610e+00 1.3897e+01 1.3537e+01 6.9520e+00 5.6891e+00 - 2.9850e+00 9.9071e+00 9.3851e+00 5.0715e+00 3.9567e+00 - 3.3500e+00 7.2051e+00 6.8668e+00 3.6876e+00 2.7095e+00 - 3.7580e+00 5.4247e+00 5.3453e+00 2.6074e+00 2.0435e+00 - 4.2170e+00 4.1428e+00 3.6509e+00 1.8812e+00 1.4862e+00 - 4.7320e+00 2.9317e+00 2.5679e+00 1.3200e+00 9.9977e-01 - 5.3090e+00 2.0575e+00 1.8574e+00 8.9889e-01 7.4003e-01 - 5.9570e+00 1.4819e+00 1.3090e+00 5.7690e-01 4.7082e-01 - 6.6830e+00 1.0788e+00 9.8323e-01 5.1736e-01 4.1410e-01 - 7.4990e+00 7.9121e-01 6.5848e-01 2.9060e-01 2.1449e-01 - 8.4140e+00 6.2312e-01 4.9731e-01 2.0498e-01 1.7560e-01 - 9.4410e+00 4.2523e-01 3.6334e-01 1.4790e-01 1.1055e-01 - 1.1200e+01 2.5456e-01 2.1495e-01 7.9158e-02 6.6163e-02 - 1.4100e+01 1.2924e-01 1.0612e-01 3.4172e-02 2.9084e-02 - 1.7800e+01 6.6888e-02 5.5371e-02 1.5507e-02 1.3199e-02 - 2.2400e+01 3.4051e-02 2.7558e-02 7.1188e-03 5.7598e-03 - 2.8200e+01 1.6292e-02 1.3373e-02 3.4393e-03 2.5799e-03 - 3.5500e+01 8.5408e-03 6.6735e-03 1.3125e-03 1.1974e-03 - 4.4700e+01 4.3362e-03 3.1895e-03 5.8984e-04 5.2266e-04 - 5.6200e+01 2.1155e-03 1.6354e-03 2.6274e-04 1.9486e-04 - 7.0800e+01 1.0878e-03 7.8470e-04 1.1365e-04 8.1840e-05 - 8.9100e+01 5.3635e-04 3.7819e-04 4.6026e-05 4.1283e-05 - 1.1200e+02 2.6559e-04 1.8635e-04 2.0765e-05 1.6908e-05 - 1.4100e+02 1.2849e-04 9.1128e-05 9.7206e-06 7.9957e-06 - 1.7800e+02 6.5556e-05 4.3281e-05 4.0286e-06 3.5345e-06 - 2.2400e+02 3.1513e-05 2.0273e-05 2.0104e-06 1.5527e-06 - 2.8200e+02 1.5798e-05 1.0013e-05 8.2067e-07 6.3890e-07 - 3.5500e+02 7.7127e-06 5.1299e-06 4.1513e-07 3.2614e-07 - 4.4700e+02 3.8530e-06 2.3931e-06 1.7897e-07 1.2569e-07 - 5.6200e+02 1.8338e-06 1.1529e-06 7.6934e-08 6.8399e-08 - 7.0800e+02 8.9855e-07 5.4222e-07 3.7429e-08 2.6614e-08 - 8.9100e+02 4.3341e-07 2.3293e-07 1.7743e-08 9.8355e-09 - 1.1200e+03 1.9097e-07 1.0424e-07 6.4893e-09 3.7589e-09 - 1.4100e+03 9.1468e-08 4.9589e-08 2.6918e-09 1.5433e-09 - 1.7800e+03 4.2241e-08 2.2809e-08 1.2714e-09 8.1011e-10 - 2.2400e+03 1.9746e-08 1.0598e-08 5.6312e-10 3.9829e-10 - 2.8200e+03 9.0131e-09 4.7741e-09 2.7757e-10 1.7102e-10 - 3.5500e+03 4.1834e-09 2.1838e-09 1.2791e-10 8.1214e-11 - 4.4700e+03 1.8834e-09 1.0001e-09 5.6593e-11 3.5557e-11 - 5.6200e+03 8.5536e-10 4.4230e-10 2.5073e-11 1.5280e-11 - 7.0800e+03 3.8116e-10 1.9314e-10 1.1081e-11 6.8640e-12 - 8.9100e+03 1.6713e-10 8.4926e-11 4.6625e-12 2.7943e-12 -average flux in [cosZ =-0.40 -- -0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 6.8737e+03 7.0091e+03 3.3874e+03 3.0199e+03 - 1.1900e-01 5.8848e+03 6.0956e+03 2.9070e+03 2.6958e+03 - 1.3300e-01 5.2017e+03 5.2490e+03 2.5783e+03 2.3290e+03 - 1.5000e-01 4.3126e+03 4.3996e+03 2.2321e+03 1.9972e+03 - 1.6800e-01 3.7121e+03 3.7904e+03 1.9361e+03 1.7136e+03 - 1.8800e-01 3.2032e+03 3.2192e+03 1.5802e+03 1.4969e+03 - 2.1100e-01 2.6239e+03 2.6794e+03 1.3854e+03 1.2101e+03 - 2.3700e-01 2.2541e+03 2.2731e+03 1.1357e+03 1.0326e+03 - 2.6600e-01 1.8929e+03 1.8558e+03 9.6274e+02 8.2951e+02 - 2.9900e-01 1.5216e+03 1.5705e+03 7.7875e+02 6.7974e+02 - 3.3500e-01 1.2504e+03 1.2741e+03 6.3682e+02 5.7150e+02 - 3.7600e-01 1.0392e+03 1.0249e+03 5.4233e+02 4.5850e+02 - 4.2200e-01 8.4103e+02 8.2974e+02 4.3693e+02 3.6293e+02 - 4.7300e-01 6.8165e+02 6.6667e+02 3.5361e+02 2.9467e+02 - 5.3100e-01 5.4046e+02 5.2883e+02 2.8654e+02 2.5482e+02 - 5.9600e-01 4.1443e+02 4.2617e+02 2.2746e+02 1.9620e+02 - 6.6800e-01 3.3774e+02 3.3833e+02 1.7795e+02 1.4737e+02 - 7.5000e-01 2.6851e+02 2.6137e+02 1.3747e+02 1.1270e+02 - 8.4100e-01 2.0696e+02 2.0139e+02 1.0482e+02 9.1296e+01 - 9.4400e-01 1.5838e+02 1.5676e+02 8.6109e+01 6.6897e+01 - 1.0590e+00 1.2625e+02 1.2223e+02 6.3314e+01 5.4065e+01 - 1.1890e+00 9.9693e+01 9.4274e+01 5.1135e+01 4.0131e+01 - 1.3340e+00 7.3237e+01 7.0688e+01 3.6495e+01 2.9747e+01 - 1.4960e+00 5.5235e+01 5.1312e+01 2.6582e+01 2.3764e+01 - 1.6790e+00 4.1913e+01 4.0211e+01 2.1903e+01 1.6800e+01 - 1.8840e+00 3.0823e+01 3.0822e+01 1.5522e+01 1.2368e+01 - 2.1130e+00 2.3530e+01 2.2474e+01 1.1007e+01 9.2130e+00 - 2.3710e+00 1.7202e+01 1.6721e+01 8.3691e+00 6.0149e+00 - 2.6610e+00 1.2307e+01 1.2050e+01 6.1488e+00 4.8330e+00 - 2.9850e+00 9.4178e+00 8.7428e+00 4.5699e+00 3.5475e+00 - 3.3500e+00 6.5785e+00 6.0362e+00 3.3618e+00 2.1827e+00 - 3.7580e+00 5.0325e+00 4.7151e+00 2.1591e+00 1.7162e+00 - 4.2170e+00 3.7577e+00 3.3537e+00 1.3888e+00 1.2241e+00 - 4.7320e+00 2.7372e+00 2.5141e+00 1.1620e+00 8.6590e-01 - 5.3090e+00 1.8243e+00 1.6856e+00 7.4661e-01 5.3175e-01 - 5.9570e+00 1.3674e+00 1.2162e+00 4.9849e-01 4.0909e-01 - 6.6830e+00 1.0288e+00 8.2789e-01 3.9903e-01 2.6562e-01 - 7.4990e+00 6.9800e-01 6.4417e-01 2.4893e-01 1.6509e-01 - 8.4140e+00 5.5742e-01 4.7989e-01 1.4974e-01 1.1845e-01 - 9.4410e+00 4.2160e-01 3.0756e-01 1.1075e-01 8.4014e-02 - 1.1200e+01 2.3691e-01 1.9574e-01 6.4260e-02 5.3847e-02 - 1.4100e+01 1.2177e-01 9.7085e-02 2.7765e-02 2.3210e-02 - 1.7800e+01 6.2455e-02 5.0382e-02 1.2028e-02 1.0271e-02 - 2.2400e+01 3.1350e-02 2.5265e-02 5.6415e-03 4.6013e-03 - 2.8200e+01 1.5436e-02 1.2211e-02 2.6584e-03 1.9951e-03 - 3.5500e+01 7.9606e-03 6.0490e-03 1.0249e-03 9.0752e-04 - 4.4700e+01 3.9707e-03 2.9242e-03 4.4289e-04 3.9573e-04 - 5.6200e+01 1.9690e-03 1.4898e-03 2.0457e-04 1.5040e-04 - 7.0800e+01 9.9790e-04 7.1852e-04 8.9532e-05 6.4165e-05 - 8.9100e+01 4.9569e-04 3.3884e-04 3.5832e-05 2.9909e-05 - 1.1200e+02 2.4229e-04 1.6709e-04 1.6849e-05 1.2778e-05 - 1.4100e+02 1.1880e-04 8.1887e-05 7.5298e-06 6.2561e-06 - 1.7800e+02 5.9022e-05 3.8270e-05 3.2655e-06 2.6541e-06 - 2.2400e+02 2.8779e-05 1.8274e-05 1.6742e-06 1.2830e-06 - 2.8200e+02 1.4343e-05 8.9046e-06 7.5989e-07 5.0181e-07 - 3.5500e+02 6.8845e-06 4.3476e-06 3.3552e-07 2.3755e-07 - 4.4700e+02 3.4606e-06 2.0111e-06 1.4765e-07 1.0861e-07 - 5.6200e+02 1.6226e-06 9.7657e-07 6.5144e-08 5.2349e-08 - 7.0800e+02 7.9168e-07 4.6280e-07 3.2062e-08 1.9956e-08 - 8.9100e+02 3.8441e-07 2.0273e-07 1.5068e-08 8.2944e-09 - 1.1200e+03 1.6845e-07 9.1295e-08 5.4857e-09 3.3304e-09 - 1.4100e+03 8.0078e-08 4.2809e-08 2.3804e-09 1.3957e-09 - 1.7800e+03 3.7116e-08 1.9607e-08 1.1064e-09 6.9438e-10 - 2.2400e+03 1.7051e-08 9.0268e-09 4.8853e-10 3.3773e-10 - 2.8200e+03 7.6777e-09 4.1096e-09 2.3306e-10 1.4605e-10 - 3.5500e+03 3.5645e-09 1.8360e-09 1.0712e-10 6.6744e-11 - 4.4700e+03 1.6010e-09 8.2570e-10 4.6512e-11 2.9045e-11 - 5.6200e+03 7.1199e-10 3.6425e-10 2.0416e-11 1.2388e-11 - 7.0800e+03 3.1013e-10 1.5710e-10 8.9483e-12 5.4366e-12 - 8.9100e+03 1.3551e-10 7.0040e-11 3.7855e-12 2.2549e-12 -average flux in [cosZ =-0.50 -- -0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 5.6631e+03 5.6660e+03 2.7747e+03 2.5912e+03 - 1.1900e-01 4.9611e+03 4.9494e+03 2.3762e+03 2.2512e+03 - 1.3300e-01 4.2915e+03 4.2397e+03 2.1214e+03 1.9657e+03 - 1.5000e-01 3.6561e+03 3.7489e+03 1.8241e+03 1.6981e+03 - 1.6800e-01 3.2136e+03 3.2318e+03 1.5884e+03 1.4239e+03 - 1.8800e-01 2.7464e+03 2.7434e+03 1.3307e+03 1.2464e+03 - 2.1100e-01 2.2979e+03 2.3517e+03 1.1577e+03 1.0627e+03 - 2.3700e-01 1.9778e+03 1.9581e+03 9.5036e+02 8.8261e+02 - 2.6600e-01 1.6624e+03 1.6585e+03 8.3190e+02 7.4010e+02 - 2.9900e-01 1.3541e+03 1.3606e+03 6.8317e+02 6.0933e+02 - 3.3500e-01 1.1601e+03 1.1130e+03 5.8250e+02 5.0911e+02 - 3.7600e-01 9.3934e+02 9.2198e+02 4.6269e+02 4.1616e+02 - 4.2200e-01 7.7871e+02 7.5730e+02 3.8760e+02 3.3942e+02 - 4.7300e-01 6.1391e+02 6.1834e+02 3.1346e+02 2.7081e+02 - 5.3100e-01 4.9273e+02 4.8418e+02 2.5361e+02 2.2784e+02 - 5.9600e-01 3.9886e+02 3.9162e+02 2.0317e+02 1.7376e+02 - 6.6800e-01 3.1036e+02 3.1135e+02 1.6130e+02 1.3436e+02 - 7.5000e-01 2.4881e+02 2.4063e+02 1.2496e+02 1.0755e+02 - 8.4100e-01 1.9420e+02 1.8660e+02 9.7855e+01 8.3752e+01 - 9.4400e-01 1.5267e+02 1.4954e+02 7.6427e+01 6.4172e+01 - 1.0590e+00 1.1521e+02 1.1591e+02 6.0080e+01 4.6504e+01 - 1.1890e+00 9.1355e+01 9.0048e+01 4.4077e+01 3.4426e+01 - 1.3340e+00 6.8114e+01 6.6340e+01 3.4030e+01 2.7179e+01 - 1.4960e+00 5.1871e+01 5.1572e+01 2.5141e+01 2.0307e+01 - 1.6790e+00 3.8603e+01 3.7584e+01 1.8103e+01 1.5038e+01 - 1.8840e+00 2.9802e+01 2.8062e+01 1.3877e+01 1.0704e+01 - 2.1130e+00 2.1236e+01 2.1412e+01 9.8949e+00 8.3290e+00 - 2.3710e+00 1.6396e+01 1.4864e+01 7.3405e+00 5.9117e+00 - 2.6610e+00 1.2358e+01 1.1432e+01 5.2734e+00 4.0777e+00 - 2.9850e+00 8.6910e+00 8.1516e+00 3.8226e+00 2.9804e+00 - 3.3500e+00 6.7295e+00 6.0814e+00 2.6187e+00 2.1215e+00 - 3.7580e+00 4.7887e+00 4.3774e+00 1.8765e+00 1.4933e+00 - 4.2170e+00 3.6748e+00 3.1809e+00 1.3117e+00 1.0084e+00 - 4.7320e+00 2.4897e+00 2.1304e+00 9.1563e-01 7.7772e-01 - 5.3090e+00 1.9750e+00 1.6563e+00 6.6395e-01 5.0773e-01 - 5.9570e+00 1.3972e+00 1.2277e+00 4.2409e-01 3.2595e-01 - 6.6830e+00 9.6507e-01 8.1514e-01 2.9749e-01 2.6106e-01 - 7.4990e+00 6.5802e-01 5.4345e-01 2.1626e-01 1.9423e-01 - 8.4140e+00 4.8726e-01 4.0993e-01 1.3455e-01 1.2104e-01 - 9.4410e+00 3.6049e-01 2.9420e-01 1.1026e-01 8.3019e-02 - 1.1200e+01 2.2339e-01 1.8125e-01 5.3396e-02 4.4832e-02 - 1.4100e+01 1.1597e-01 9.0582e-02 2.3716e-02 1.9279e-02 - 1.7800e+01 5.8674e-02 4.6528e-02 9.7955e-03 8.3843e-03 - 2.2400e+01 2.9102e-02 2.3464e-02 4.7357e-03 3.8943e-03 - 2.8200e+01 1.4923e-02 1.1340e-02 2.1221e-03 1.6587e-03 - 3.5500e+01 7.5155e-03 5.5955e-03 8.7425e-04 7.2563e-04 - 4.4700e+01 3.6770e-03 2.7553e-03 3.6492e-04 3.1830e-04 - 5.6200e+01 1.8623e-03 1.3806e-03 1.7268e-04 1.3236e-04 - 7.0800e+01 9.2203e-04 6.6955e-04 7.6904e-05 5.8384e-05 - 8.9100e+01 4.6415e-04 3.1057e-04 3.1641e-05 2.3901e-05 - 1.1200e+02 2.2354e-04 1.5300e-04 1.5275e-05 1.1061e-05 - 1.4100e+02 1.1149e-04 7.4652e-05 6.4562e-06 5.4318e-06 - 1.7800e+02 5.3461e-05 3.4562e-05 2.9373e-06 2.0872e-06 - 2.2400e+02 2.6657e-05 1.6802e-05 1.4670e-06 1.1189e-06 - 2.8200e+02 1.3170e-05 8.0539e-06 7.4028e-07 4.3674e-07 - 3.5500e+02 6.2006e-06 3.6732e-06 2.8287e-07 1.7526e-07 - 4.4700e+02 3.1043e-06 1.6882e-06 1.2655e-07 1.0060e-07 - 5.6200e+02 1.4374e-06 8.2128e-07 5.7993e-08 3.9231e-08 - 7.0800e+02 6.9791e-07 3.9362e-07 2.8153e-08 1.5414e-08 - 8.9100e+02 3.4123e-07 1.7975e-07 1.2880e-08 7.6489e-09 - 1.1200e+03 1.5111e-07 8.2043e-08 5.0046e-09 3.3304e-09 - 1.4100e+03 7.0743e-08 3.7725e-08 2.3118e-09 1.4973e-09 - 1.7800e+03 3.3025e-08 1.7171e-08 1.0382e-09 6.5893e-10 - 2.2400e+03 1.4946e-08 7.8464e-09 4.6179e-10 2.9725e-10 - 2.8200e+03 6.6723e-09 3.5794e-09 2.0323e-10 1.3092e-10 - 3.5500e+03 3.0865e-09 1.5601e-09 9.1685e-11 5.5651e-11 - 4.4700e+03 1.3871e-09 6.8600e-10 3.8989e-11 2.4116e-11 - 5.6200e+03 6.0242e-10 3.0221e-10 1.6951e-11 1.0251e-11 - 7.0800e+03 2.5458e-10 1.2970e-10 7.3040e-12 4.3113e-12 - 8.9100e+03 1.1222e-10 5.8159e-11 3.1569e-12 1.8698e-12 -average flux in [cosZ =-0.60 -- -0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 4.5628e+03 4.5773e+03 2.1153e+03 2.1111e+03 - 1.1900e-01 4.1006e+03 4.1302e+03 1.9374e+03 1.8780e+03 - 1.3300e-01 3.6000e+03 3.5840e+03 1.7786e+03 1.6480e+03 - 1.5000e-01 3.0966e+03 3.1287e+03 1.5372e+03 1.4684e+03 - 1.6800e-01 2.7050e+03 2.7221e+03 1.3216e+03 1.2699e+03 - 1.8800e-01 2.3958e+03 2.3751e+03 1.1411e+03 1.0892e+03 - 2.1100e-01 2.0572e+03 2.0596e+03 9.7198e+02 9.3966e+02 - 2.3700e-01 1.7556e+03 1.7448e+03 8.5976e+02 8.0711e+02 - 2.6600e-01 1.5054e+03 1.4715e+03 7.3335e+02 6.7791e+02 - 2.9900e-01 1.2568e+03 1.2520e+03 6.2760e+02 5.6815e+02 - 3.3500e-01 1.0333e+03 1.0426e+03 4.9495e+02 4.7058e+02 - 3.7600e-01 8.7567e+02 8.6124e+02 4.2303e+02 3.7586e+02 - 4.2200e-01 7.2726e+02 7.0576e+02 3.4226e+02 3.0926e+02 - 4.7300e-01 5.8127e+02 5.6761e+02 2.7991e+02 2.5103e+02 - 5.3100e-01 4.6896e+02 4.5554e+02 2.2595e+02 2.0515e+02 - 5.9600e-01 3.8067e+02 3.7250e+02 1.8018e+02 1.6361e+02 - 6.6800e-01 2.9963e+02 2.9403e+02 1.5071e+02 1.2547e+02 - 7.5000e-01 2.4242e+02 2.3719e+02 1.1442e+02 9.7000e+01 - 8.4100e-01 1.8649e+02 1.7938e+02 8.8000e+01 7.6835e+01 - 9.4400e-01 1.4711e+02 1.4283e+02 6.6480e+01 5.9716e+01 - 1.0590e+00 1.1369e+02 1.1085e+02 5.2008e+01 4.6184e+01 - 1.1890e+00 8.7007e+01 8.2065e+01 4.0477e+01 3.5536e+01 - 1.3340e+00 6.5960e+01 6.2518e+01 3.1914e+01 2.6008e+01 - 1.4960e+00 5.0088e+01 4.6492e+01 2.4075e+01 1.8783e+01 - 1.6790e+00 3.6758e+01 3.5932e+01 1.6870e+01 1.4292e+01 - 1.8840e+00 2.9592e+01 2.7083e+01 1.1982e+01 9.6613e+00 - 2.1130e+00 2.1816e+01 2.0005e+01 8.8111e+00 7.2616e+00 - 2.3710e+00 1.5258e+01 1.4525e+01 6.6631e+00 5.6907e+00 - 2.6610e+00 1.1123e+01 1.0980e+01 4.4505e+00 3.8288e+00 - 2.9850e+00 8.9028e+00 7.5076e+00 3.4843e+00 2.6325e+00 - 3.3500e+00 6.6416e+00 5.8011e+00 2.3996e+00 2.0459e+00 - 3.7580e+00 4.5505e+00 4.0668e+00 1.5427e+00 1.3872e+00 - 4.2170e+00 3.4204e+00 2.9810e+00 1.1210e+00 8.9830e-01 - 4.7320e+00 2.4422e+00 1.9860e+00 7.9964e-01 6.7847e-01 - 5.3090e+00 1.8271e+00 1.5053e+00 5.9025e-01 4.2742e-01 - 5.9570e+00 1.2390e+00 1.0371e+00 3.7170e-01 3.1999e-01 - 6.6830e+00 9.6178e-01 7.8160e-01 2.5633e-01 2.0254e-01 - 7.4990e+00 6.6103e-01 5.9148e-01 1.7880e-01 1.3270e-01 - 8.4140e+00 4.8713e-01 4.0240e-01 1.4557e-01 1.0249e-01 - 9.4410e+00 3.1715e-01 2.6308e-01 1.0042e-01 6.2013e-02 - 1.1200e+01 2.1446e-01 1.7018e-01 4.3764e-02 3.6971e-02 - 1.4100e+01 1.1055e-01 8.4454e-02 1.9716e-02 1.5614e-02 - 1.7800e+01 5.5025e-02 4.3506e-02 7.9798e-03 6.8966e-03 - 2.2400e+01 2.7639e-02 2.1964e-02 3.8811e-03 3.1968e-03 - 2.8200e+01 1.4268e-02 1.0482e-02 1.7211e-03 1.3668e-03 - 3.5500e+01 7.1380e-03 5.2327e-03 7.1054e-04 5.8479e-04 - 4.4700e+01 3.4864e-03 2.5870e-03 3.0040e-04 2.5351e-04 - 5.6200e+01 1.7658e-03 1.2746e-03 1.4411e-04 1.0753e-04 - 7.0800e+01 8.6554e-04 6.1463e-04 6.2588e-05 4.7661e-05 - 8.9100e+01 4.3753e-04 2.8763e-04 2.6541e-05 2.0790e-05 - 1.1200e+02 2.0986e-04 1.4057e-04 1.2618e-05 9.4036e-06 - 1.4100e+02 1.0454e-04 6.7557e-05 5.4843e-06 4.6122e-06 - 1.7800e+02 4.9461e-05 3.1753e-05 2.5402e-06 1.7589e-06 - 2.2400e+02 2.5048e-05 1.5305e-05 1.2482e-06 9.3018e-07 - 2.8200e+02 1.2369e-05 7.3858e-06 5.9234e-07 3.9447e-07 - 3.5500e+02 5.7825e-06 3.3239e-06 2.4638e-07 1.5207e-07 - 4.4700e+02 2.8152e-06 1.5288e-06 1.0799e-07 8.3472e-08 - 5.6200e+02 1.3213e-06 7.3317e-07 5.0619e-08 3.2975e-08 - 7.0800e+02 6.3288e-07 3.5073e-07 2.3768e-08 1.3493e-08 - 8.9100e+02 3.1174e-07 1.6278e-07 1.1767e-08 6.5912e-09 - 1.1200e+03 1.3711e-07 7.3279e-08 4.3829e-09 2.9018e-09 - 1.4100e+03 6.3399e-08 3.3538e-08 2.0230e-09 1.2913e-09 - 1.7800e+03 2.9211e-08 1.5144e-08 8.9775e-10 5.6376e-10 - 2.2400e+03 1.3161e-08 6.8054e-09 4.0079e-10 2.5132e-10 - 2.8200e+03 5.8241e-09 3.0831e-09 1.7485e-10 1.1057e-10 - 3.5500e+03 2.7067e-09 1.3458e-09 7.8231e-11 4.6997e-11 - 4.4700e+03 1.1941e-09 5.8649e-10 3.3226e-11 2.0131e-11 - 5.6200e+03 5.2178e-10 2.5687e-10 1.4280e-11 8.5779e-12 - 7.0800e+03 2.2028e-10 1.1005e-10 6.1480e-12 3.5785e-12 - 8.9100e+03 9.5551e-11 4.8620e-11 2.6725e-12 1.5802e-12 -average flux in [cosZ =-0.70 -- -0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 4.4445e+03 4.5572e+03 2.0767e+03 2.0342e+03 - 1.1900e-01 3.9588e+03 3.9751e+03 1.8240e+03 1.8301e+03 - 1.3300e-01 3.5294e+03 3.5415e+03 1.7126e+03 1.6172e+03 - 1.5000e-01 3.0453e+03 3.0854e+03 1.5108e+03 1.4260e+03 - 1.6800e-01 2.6470e+03 2.6376e+03 1.3132e+03 1.2150e+03 - 1.8800e-01 2.3923e+03 2.3610e+03 1.1352e+03 1.0774e+03 - 2.1100e-01 2.0442e+03 2.0290e+03 9.8715e+02 9.3565e+02 - 2.3700e-01 1.7804e+03 1.7029e+03 8.2538e+02 7.9540e+02 - 2.6600e-01 1.4865e+03 1.4791e+03 7.0728e+02 6.6736e+02 - 2.9900e-01 1.2514e+03 1.2083e+03 6.0346e+02 5.4050e+02 - 3.3500e-01 1.0654e+03 1.0386e+03 4.9549e+02 4.7140e+02 - 3.7600e-01 8.5914e+02 8.4193e+02 4.1658e+02 3.6700e+02 - 4.2200e-01 7.0074e+02 7.0418e+02 3.3219e+02 3.0117e+02 - 4.7300e-01 5.8241e+02 5.7759e+02 2.8343e+02 2.4869e+02 - 5.3100e-01 4.7333e+02 4.5329e+02 2.2381e+02 1.9762e+02 - 5.9600e-01 3.7113e+02 3.6557e+02 1.7546e+02 1.5393e+02 - 6.6800e-01 2.9833e+02 2.9272e+02 1.3950e+02 1.2368e+02 - 7.5000e-01 2.3033e+02 2.2814e+02 1.0991e+02 9.7056e+01 - 8.4100e-01 1.8750e+02 1.8315e+02 8.4284e+01 7.2749e+01 - 9.4400e-01 1.4203e+02 1.4064e+02 6.4223e+01 5.5364e+01 - 1.0590e+00 1.1173e+02 1.0814e+02 4.8779e+01 4.2027e+01 - 1.1890e+00 8.4910e+01 7.9772e+01 3.5813e+01 3.2878e+01 - 1.3340e+00 6.4746e+01 6.1099e+01 2.8144e+01 2.3043e+01 - 1.4960e+00 4.8347e+01 4.4490e+01 2.0552e+01 1.6789e+01 - 1.6790e+00 3.7241e+01 3.4370e+01 1.5166e+01 1.3161e+01 - 1.8840e+00 2.7672e+01 2.6793e+01 1.1466e+01 9.2939e+00 - 2.1130e+00 2.1146e+01 1.9279e+01 8.2928e+00 6.8718e+00 - 2.3710e+00 1.5367e+01 1.4433e+01 6.1556e+00 5.0068e+00 - 2.6610e+00 1.0809e+01 1.0034e+01 4.0367e+00 3.4503e+00 - 2.9850e+00 8.1271e+00 7.5405e+00 3.2518e+00 2.3549e+00 - 3.3500e+00 6.0837e+00 5.3227e+00 2.1632e+00 1.6651e+00 - 3.7580e+00 4.6189e+00 3.9852e+00 1.5712e+00 1.1107e+00 - 4.2170e+00 3.2613e+00 2.8243e+00 1.1108e+00 7.8223e-01 - 4.7320e+00 2.4220e+00 2.0028e+00 6.7424e-01 5.2697e-01 - 5.3090e+00 1.6847e+00 1.4495e+00 5.0549e-01 3.9065e-01 - 5.9570e+00 1.2278e+00 1.0400e+00 3.7101e-01 2.5120e-01 - 6.6830e+00 9.1636e-01 7.4149e-01 2.6949e-01 1.7976e-01 - 7.4990e+00 6.1877e-01 5.3747e-01 1.7462e-01 1.2679e-01 - 8.4140e+00 4.7253e-01 3.8215e-01 1.0717e-01 8.1911e-02 - 9.4410e+00 3.2561e-01 2.7657e-01 7.9259e-02 5.2969e-02 - 1.1200e+01 2.0982e-01 1.6339e-01 3.7232e-02 3.1696e-02 - 1.4100e+01 1.0638e-01 8.0142e-02 1.7305e-02 1.3333e-02 - 1.7800e+01 5.1854e-02 4.1517e-02 7.1348e-03 6.2360e-03 - 2.2400e+01 2.6741e-02 2.0893e-02 3.4241e-03 2.8036e-03 - 2.8200e+01 1.3794e-02 9.8227e-03 1.5284e-03 1.2553e-03 - 3.5500e+01 6.8732e-03 5.0141e-03 6.3380e-04 5.2958e-04 - 4.4700e+01 3.3781e-03 2.4832e-03 2.8635e-04 2.2595e-04 - 5.6200e+01 1.6993e-03 1.1940e-03 1.3416e-04 9.8043e-05 - 7.0800e+01 8.2486e-04 5.6921e-04 5.5367e-05 4.3220e-05 - 8.9100e+01 4.1863e-04 2.7385e-04 2.5140e-05 2.2222e-05 - 1.1200e+02 2.0089e-04 1.3214e-04 1.1161e-05 9.3750e-06 - 1.4100e+02 9.9291e-05 6.1844e-05 5.2908e-06 4.4043e-06 - 1.7800e+02 4.6629e-05 3.0112e-05 2.4101e-06 1.7191e-06 - 2.2400e+02 2.4018e-05 1.4152e-05 1.1116e-06 8.0357e-07 - 2.8200e+02 1.1879e-05 6.9504e-06 4.2908e-07 4.0780e-07 - 3.5500e+02 5.5493e-06 3.1549e-06 2.3324e-07 1.5944e-07 - 4.4700e+02 2.5727e-06 1.4631e-06 9.7092e-08 6.9351e-08 - 5.6200e+02 1.2456e-06 6.8149e-07 4.6263e-08 3.0961e-08 - 7.0800e+02 5.8616e-07 3.2345e-07 2.0198e-08 1.3856e-08 - 8.9100e+02 2.9068e-07 1.5264e-07 1.1336e-08 5.9933e-09 - 1.1200e+03 1.2768e-07 6.7143e-08 4.0625e-09 2.6161e-09 - 1.4100e+03 5.8085e-08 3.0780e-08 1.8227e-09 1.1489e-09 - 1.7800e+03 2.6180e-08 1.3764e-08 7.9775e-10 5.0225e-10 - 2.2400e+03 1.1875e-08 6.0714e-09 3.6027e-10 2.1696e-10 - 2.8200e+03 5.2482e-09 2.6879e-09 1.5674e-10 9.5035e-11 - 3.5500e+03 2.4535e-09 1.2000e-09 6.9014e-11 4.1408e-11 - 4.4700e+03 1.0537e-09 5.2349e-10 2.9754e-11 1.7517e-11 - 5.6200e+03 4.7331e-10 2.2776e-10 1.2669e-11 7.5623e-12 - 7.0800e+03 2.0339e-10 9.8729e-11 5.4802e-12 3.1780e-12 - 8.9100e+03 8.6644e-11 4.1863e-11 2.4018e-12 1.4254e-12 -average flux in [cosZ =-0.80 -- -0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 5.8538e+03 5.8566e+03 2.7556e+03 2.6205e+03 - 1.1900e-01 5.0904e+03 5.1739e+03 2.4807e+03 2.2635e+03 - 1.3300e-01 4.3999e+03 4.4814e+03 2.1158e+03 1.9939e+03 - 1.5000e-01 3.7834e+03 3.7393e+03 1.8345e+03 1.7363e+03 - 1.6800e-01 3.2268e+03 3.2774e+03 1.5714e+03 1.4386e+03 - 1.8800e-01 2.7887e+03 2.7966e+03 1.3463e+03 1.2568e+03 - 2.1100e-01 2.3574e+03 2.3906e+03 1.1568e+03 1.0650e+03 - 2.3700e-01 2.0220e+03 2.0242e+03 9.6077e+02 9.0169e+02 - 2.6600e-01 1.6575e+03 1.6834e+03 8.0510e+02 7.2553e+02 - 2.9900e-01 1.4010e+03 1.3802e+03 6.6692e+02 6.0557e+02 - 3.3500e-01 1.1679e+03 1.1551e+03 5.5356e+02 5.1326e+02 - 3.7600e-01 9.2043e+02 9.2368e+02 4.6083e+02 3.9508e+02 - 4.2200e-01 7.7630e+02 7.2988e+02 3.5860e+02 3.1322e+02 - 4.7300e-01 6.2272e+02 5.9477e+02 2.8367e+02 2.5638e+02 - 5.3100e-01 4.8118e+02 4.7516e+02 2.2732e+02 2.0086e+02 - 5.9600e-01 3.7909e+02 3.7194e+02 1.8241e+02 1.5529e+02 - 6.6800e-01 3.0114e+02 2.9055e+02 1.4215e+02 1.2397e+02 - 7.5000e-01 2.3356e+02 2.2615e+02 1.0989e+02 9.2208e+01 - 8.4100e-01 1.8837e+02 1.7841e+02 8.3610e+01 7.2930e+01 - 9.4400e-01 1.4329e+02 1.3460e+02 6.5291e+01 5.3646e+01 - 1.0590e+00 1.1403e+02 1.0451e+02 4.7668e+01 4.1400e+01 - 1.1890e+00 8.0171e+01 7.9168e+01 3.6111e+01 2.9696e+01 - 1.3340e+00 6.3241e+01 6.0527e+01 2.6560e+01 2.2362e+01 - 1.4960e+00 4.7426e+01 4.7022e+01 2.0195e+01 1.5311e+01 - 1.6790e+00 3.5828e+01 3.3863e+01 1.4816e+01 1.1597e+01 - 1.8840e+00 2.7051e+01 2.5743e+01 9.9274e+00 8.2767e+00 - 2.1130e+00 1.9676e+01 1.8303e+01 7.8846e+00 6.1758e+00 - 2.3710e+00 1.4698e+01 1.3844e+01 5.2401e+00 4.4393e+00 - 2.6610e+00 1.0538e+01 1.0280e+01 3.8328e+00 2.9188e+00 - 2.9850e+00 8.2496e+00 7.3283e+00 2.8386e+00 2.2514e+00 - 3.3500e+00 5.9155e+00 5.3742e+00 1.8945e+00 1.4037e+00 - 3.7580e+00 4.4094e+00 3.6579e+00 1.4783e+00 1.1099e+00 - 4.2170e+00 3.0562e+00 2.7035e+00 9.7071e-01 7.7348e-01 - 4.7320e+00 2.3040e+00 1.9798e+00 5.9610e-01 4.8847e-01 - 5.3090e+00 1.6444e+00 1.3866e+00 4.3293e-01 3.4038e-01 - 5.9570e+00 1.1916e+00 1.0026e+00 2.9998e-01 2.5491e-01 - 6.6830e+00 8.6639e-01 6.9074e-01 1.9379e-01 1.5553e-01 - 7.4990e+00 6.1685e-01 5.0606e-01 1.2902e-01 1.1551e-01 - 8.4140e+00 4.5250e-01 3.4404e-01 8.1155e-02 8.5181e-02 - 9.4410e+00 3.5866e-01 2.6282e-01 5.8282e-02 5.0796e-02 - 1.1200e+01 2.0246e-01 1.5639e-01 3.2400e-02 2.7732e-02 - 1.4100e+01 1.0287e-01 7.7050e-02 1.4913e-02 1.1662e-02 - 1.7800e+01 4.9978e-02 3.9697e-02 6.2101e-03 5.4773e-03 - 2.2400e+01 2.5845e-02 1.9750e-02 2.9725e-03 2.4346e-03 - 2.8200e+01 1.3244e-02 9.3319e-03 1.3145e-03 1.1108e-03 - 3.5500e+01 6.5792e-03 4.7662e-03 5.5414e-04 4.5746e-04 - 4.4700e+01 3.2394e-03 2.3391e-03 2.4980e-04 1.9678e-04 - 5.6200e+01 1.6263e-03 1.1272e-03 1.1613e-04 8.6363e-05 - 7.0800e+01 7.9051e-04 5.2853e-04 4.9192e-05 3.8260e-05 - 8.9100e+01 3.9771e-04 2.5917e-04 2.2505e-05 2.0373e-05 - 1.1200e+02 1.9189e-04 1.2371e-04 9.9536e-06 8.3300e-06 - 1.4100e+02 9.4156e-05 5.7852e-05 4.7538e-06 3.7932e-06 - 1.7800e+02 4.4840e-05 2.8115e-05 2.1506e-06 1.5809e-06 - 2.2400e+02 2.2829e-05 1.3166e-05 9.5089e-07 7.3536e-07 - 2.8200e+02 1.1087e-05 6.3801e-06 3.8454e-07 3.6294e-07 - 3.5500e+02 5.2248e-06 2.9248e-06 2.1150e-07 1.4554e-07 - 4.4700e+02 2.4268e-06 1.3565e-06 8.8779e-08 6.3499e-08 - 5.6200e+02 1.1659e-06 6.2690e-07 4.2285e-08 2.7409e-08 - 7.0800e+02 5.4508e-07 2.9514e-07 1.8034e-08 1.2953e-08 - 8.9100e+02 2.6644e-07 1.3926e-07 1.0132e-08 5.3836e-09 - 1.1200e+03 1.1832e-07 6.1036e-08 3.6961e-09 2.3557e-09 - 1.4100e+03 5.3214e-08 2.7804e-08 1.6454e-09 1.0304e-09 - 1.7800e+03 2.3773e-08 1.2371e-08 7.1933e-10 4.5043e-10 - 2.2400e+03 1.0739e-08 5.4571e-09 3.2137e-10 1.9218e-10 - 2.8200e+03 4.7262e-09 2.3938e-09 1.3946e-10 8.3433e-11 - 3.5500e+03 2.1945e-09 1.0691e-09 6.0958e-11 3.6676e-11 - 4.4700e+03 9.3647e-10 4.6631e-10 2.6443e-11 1.5353e-11 - 5.6200e+03 4.2164e-10 2.0107e-10 1.1155e-11 6.5865e-12 - 7.0800e+03 1.8056e-10 8.6774e-11 4.8379e-12 2.7814e-12 - 8.9100e+03 7.6476e-11 3.6193e-11 2.1091e-12 1.2386e-12 -average flux in [cosZ =-0.90 -- -1.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0600e-01 8.2556e+03 8.2521e+03 3.9110e+03 3.5140e+03 - 1.1900e-01 7.0821e+03 7.1443e+03 3.4016e+03 3.1217e+03 - 1.3300e-01 6.0554e+03 6.0295e+03 2.9024e+03 2.6284e+03 - 1.5000e-01 5.1090e+03 5.0869e+03 2.4843e+03 2.2665e+03 - 1.6800e-01 4.3925e+03 4.3575e+03 2.1911e+03 1.8864e+03 - 1.8800e-01 3.5965e+03 3.6686e+03 1.7923e+03 1.6301e+03 - 2.1100e-01 3.1073e+03 3.0539e+03 1.4947e+03 1.3002e+03 - 2.3700e-01 2.5778e+03 2.6191e+03 1.2835e+03 1.0585e+03 - 2.6600e-01 2.1283e+03 2.1237e+03 1.0501e+03 8.7595e+02 - 2.9900e-01 1.7244e+03 1.7110e+03 8.3639e+02 7.3990e+02 - 3.3500e-01 1.4017e+03 1.3905e+03 6.7857e+02 5.8404e+02 - 3.7600e-01 1.1137e+03 1.1128e+03 5.5630e+02 4.7093e+02 - 4.2200e-01 8.8283e+02 8.7942e+02 4.3978e+02 3.7376e+02 - 4.7300e-01 7.2250e+02 7.0086e+02 3.4772e+02 2.9184e+02 - 5.3100e-01 5.5620e+02 5.4766e+02 2.6363e+02 2.1559e+02 - 5.9600e-01 4.3129e+02 4.2815e+02 2.0622e+02 1.7352e+02 - 6.6800e-01 3.3457e+02 3.3585e+02 1.5697e+02 1.3653e+02 - 7.5000e-01 2.5687e+02 2.4472e+02 1.2495e+02 1.0128e+02 - 8.4100e-01 2.0738e+02 1.9506e+02 9.2702e+01 7.2911e+01 - 9.4400e-01 1.5701e+02 1.4955e+02 6.7496e+01 5.6480e+01 - 1.0590e+00 1.1703e+02 1.1172e+02 5.0221e+01 4.0012e+01 - 1.1890e+00 8.5680e+01 8.2215e+01 3.8849e+01 3.0439e+01 - 1.3340e+00 6.5523e+01 6.4550e+01 2.8519e+01 2.1357e+01 - 1.4960e+00 5.1153e+01 4.6044e+01 2.1603e+01 1.5518e+01 - 1.6790e+00 3.6584e+01 3.4466e+01 1.5205e+01 1.1793e+01 - 1.8840e+00 2.8116e+01 2.6090e+01 1.1224e+01 8.1473e+00 - 2.1130e+00 2.0848e+01 1.8781e+01 7.6953e+00 5.9797e+00 - 2.3710e+00 1.5166e+01 1.3604e+01 5.1351e+00 3.9601e+00 - 2.6610e+00 1.1084e+01 9.6623e+00 3.9396e+00 2.8626e+00 - 2.9850e+00 8.2570e+00 7.1350e+00 2.4716e+00 1.9693e+00 - 3.3500e+00 5.9151e+00 5.1628e+00 1.9453e+00 1.5410e+00 - 3.7580e+00 4.4776e+00 3.5591e+00 1.2522e+00 1.0855e+00 - 4.2170e+00 3.0269e+00 2.7290e+00 8.6489e-01 6.2934e-01 - 4.7320e+00 2.1351e+00 1.8111e+00 6.6219e-01 4.9823e-01 - 5.3090e+00 1.5654e+00 1.3597e+00 4.1342e-01 2.9368e-01 - 5.9570e+00 1.0702e+00 1.0087e+00 3.0637e-01 2.2169e-01 - 6.6830e+00 8.8530e-01 6.8936e-01 2.0170e-01 1.5610e-01 - 7.4990e+00 6.1339e-01 4.6734e-01 1.3153e-01 9.9240e-02 - 8.4140e+00 4.2124e-01 3.4470e-01 9.4662e-02 6.4842e-02 - 9.4410e+00 3.0757e-01 2.1759e-01 5.1511e-02 4.6376e-02 - 1.1200e+01 1.9539e-01 1.5111e-01 2.9868e-02 2.5625e-02 - 1.4100e+01 1.0026e-01 7.5433e-02 1.3214e-02 1.0933e-02 - 1.7800e+01 4.9045e-02 3.8416e-02 5.6551e-03 5.0171e-03 - 2.2400e+01 2.5191e-02 1.8750e-02 2.6945e-03 2.2100e-03 - 2.8200e+01 1.2728e-02 9.0227e-03 1.1777e-03 1.0247e-03 - 3.5500e+01 6.3166e-03 4.5634e-03 5.1008e-04 4.1239e-04 - 4.4700e+01 3.1186e-03 2.1999e-03 2.2201e-04 1.8264e-04 - 5.6200e+01 1.5623e-03 1.0792e-03 1.0145e-04 8.0007e-05 - 7.0800e+01 7.6655e-04 4.9463e-04 4.6655e-05 3.5695e-05 - 8.9100e+01 3.7895e-04 2.4790e-04 2.0750e-05 1.8595e-05 - 1.1200e+02 1.8489e-04 1.1700e-04 9.4036e-06 7.4021e-06 - 1.4100e+02 8.9816e-05 5.5438e-05 4.3540e-06 3.2139e-06 - 1.7800e+02 4.4148e-05 2.6413e-05 1.9315e-06 1.5101e-06 - 2.2400e+02 2.1796e-05 1.2423e-05 8.1161e-07 7.2714e-07 - 2.8200e+02 1.0254e-05 5.8326e-06 4.0128e-07 3.0868e-07 - 3.5500e+02 4.9273e-06 2.7371e-06 1.9486e-07 1.3260e-07 - 4.4700e+02 2.3562e-06 1.2668e-06 8.5226e-08 6.3660e-08 - 5.6200e+02 1.1014e-06 5.8626e-07 3.9815e-08 2.4797e-08 - 7.0800e+02 5.1508e-07 2.7294e-07 1.7023e-08 1.2305e-08 - 8.9100e+02 2.4400e-07 1.2696e-07 8.7793e-09 4.9643e-09 - 1.1200e+03 1.1096e-07 5.6071e-08 3.4325e-09 2.1711e-09 - 1.4100e+03 4.9467e-08 2.5316e-08 1.5191e-09 9.5262e-10 - 1.7800e+03 2.2058e-08 1.1247e-08 6.7056e-10 4.1856e-10 - 2.2400e+03 9.9036e-09 5.0429e-09 2.9220e-10 1.7782e-10 - 2.8200e+03 4.3518e-09 2.2006e-09 1.2706e-10 7.6142e-11 - 3.5500e+03 1.9864e-09 9.7600e-10 5.5380e-11 3.3746e-11 - 4.4700e+03 8.5503e-10 4.2810e-10 2.4206e-11 1.4034e-11 - 5.6200e+03 3.8192e-10 1.8274e-10 1.0151e-11 5.9153e-12 - 7.0800e+03 1.6181e-10 7.8028e-11 4.4192e-12 2.5294e-12 - 8.9100e+03 6.8911e-11 3.2337e-11 1.8954e-12 1.0914e-12 diff --git a/pisa_examples/resources/flux/honda-2015-spl-solmax-aa.d b/pisa_examples/resources/flux/honda-2015-spl-solmax-aa.d deleted file mode 100644 index afdc68b63..000000000 --- a/pisa_examples/resources/flux/honda-2015-spl-solmax-aa.d +++ /dev/null @@ -1,2060 +0,0 @@ -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8054E+03 9.9284E+03 4.8465E+03 4.4427E+03 - 1.1220E-01 8.8115E+03 8.8976E+03 4.3450E+03 3.9527E+03 - 1.2589E-01 7.8512E+03 7.9093E+03 3.8488E+03 3.4701E+03 - 1.4125E-01 6.9259E+03 6.9625E+03 3.3665E+03 3.0067E+03 - 1.5849E-01 6.0264E+03 6.0459E+03 2.9145E+03 2.5737E+03 - 1.7783E-01 5.1678E+03 5.1703E+03 2.4964E+03 2.1833E+03 - 1.9953E-01 4.3703E+03 4.3623E+03 2.1123E+03 1.8275E+03 - 2.2387E-01 3.6433E+03 3.6272E+03 1.7641E+03 1.5115E+03 - 2.5119E-01 2.9917E+03 2.9726E+03 1.4557E+03 1.2378E+03 - 2.8184E-01 2.4287E+03 2.4069E+03 1.1833E+03 9.9684E+02 - 3.1623E-01 1.9511E+03 1.9269E+03 9.5084E+02 7.9339E+02 - 3.5481E-01 1.5488E+03 1.5275E+03 7.5620E+02 6.2494E+02 - 3.9811E-01 1.2190E+03 1.1968E+03 5.9295E+02 4.8629E+02 - 4.4668E-01 9.5163E+02 9.2743E+02 4.5935E+02 3.7437E+02 - 5.0119E-01 7.3511E+02 7.1312E+02 3.5209E+02 2.8524E+02 - 5.6234E-01 5.6268E+02 5.4449E+02 2.6748E+02 2.1547E+02 - 6.3096E-01 4.2902E+02 4.1215E+02 2.0125E+02 1.6132E+02 - 7.0795E-01 3.2539E+02 3.0985E+02 1.5021E+02 1.1996E+02 - 7.9433E-01 2.4592E+02 2.3239E+02 1.1134E+02 8.8659E+01 - 8.9125E-01 1.8511E+02 1.7322E+02 8.1912E+01 6.4955E+01 - 1.0000E+00 1.3891E+02 1.2855E+02 5.9753E+01 4.7137E+01 - 1.1220E+00 1.0404E+02 9.5192E+01 4.3438E+01 3.4126E+01 - 1.2589E+00 7.7778E+01 7.0262E+01 3.1334E+01 2.4615E+01 - 1.4125E+00 5.7926E+01 5.1730E+01 2.2502E+01 1.7560E+01 - 1.5849E+00 4.2939E+01 3.7908E+01 1.6082E+01 1.2529E+01 - 1.7783E+00 3.1742E+01 2.7631E+01 1.1444E+01 8.8804E+00 - 1.9953E+00 2.3387E+01 2.0103E+01 8.1045E+00 6.2307E+00 - 2.2387E+00 1.7169E+01 1.4560E+01 5.6997E+00 4.3759E+00 - 2.5119E+00 1.2558E+01 1.0505E+01 3.9810E+00 3.0486E+00 - 2.8184E+00 9.1767E+00 7.5613E+00 2.7682E+00 2.1086E+00 - 3.1623E+00 6.6745E+00 5.4515E+00 1.9111E+00 1.4590E+00 - 3.5481E+00 4.8460E+00 3.9135E+00 1.3122E+00 1.0007E+00 - 3.9811E+00 3.5133E+00 2.8015E+00 8.9711E-01 6.8160E-01 - 4.4668E+00 2.5431E+00 2.0038E+00 6.1115E-01 4.6405E-01 - 5.0119E+00 1.8359E+00 1.4341E+00 4.1590E-01 3.1538E-01 - 5.6234E+00 1.3234E+00 1.0260E+00 2.8186E-01 2.1337E-01 - 6.3096E+00 9.5206E-01 7.3135E-01 1.8978E-01 1.4350E-01 - 7.0795E+00 6.8290E-01 5.2060E-01 1.2756E-01 9.6428E-02 - 7.9433E+00 4.8870E-01 3.6997E-01 8.5328E-02 6.4939E-02 - 8.9125E+00 3.4943E-01 2.6271E-01 5.6836E-02 4.3606E-02 - 1.0000E+01 2.4951E-01 1.8620E-01 3.8269E-02 2.9151E-02 - 1.1220E+01 1.7794E-01 1.3229E-01 2.5576E-02 1.9513E-02 - 1.2589E+01 1.2699E-01 9.3896E-02 1.6987E-02 1.3000E-02 - 1.4125E+01 9.0343E-02 6.6459E-02 1.1251E-02 8.6969E-03 - 1.5849E+01 6.4277E-02 4.6992E-02 7.4967E-03 5.8347E-03 - 1.7783E+01 4.5773E-02 3.3284E-02 4.9738E-03 3.8873E-03 - 1.9953E+01 3.2436E-02 2.3617E-02 3.3007E-03 2.6108E-03 - 2.2387E+01 2.3012E-02 1.6766E-02 2.2034E-03 1.7469E-03 - 2.5119E+01 1.6383E-02 1.1801E-02 1.4659E-03 1.1706E-03 - 2.8184E+01 1.1583E-02 8.2671E-03 9.7890E-04 7.8750E-04 - 3.1623E+01 8.2020E-03 5.8551E-03 6.6537E-04 5.2729E-04 - 3.5481E+01 5.7930E-03 4.1147E-03 4.4711E-04 3.5707E-04 - 3.9811E+01 4.0931E-03 2.8932E-03 3.0027E-04 2.4149E-04 - 4.4668E+01 2.8870E-03 2.0345E-03 2.0126E-04 1.6290E-04 - 5.0119E+01 2.0327E-03 1.4271E-03 1.3576E-04 1.1025E-04 - 5.6234E+01 1.4303E-03 9.9780E-04 9.1674E-05 7.4861E-05 - 6.3096E+01 1.0046E-03 6.9810E-04 6.1946E-05 5.0605E-05 - 7.0795E+01 7.0606E-04 4.8764E-04 4.1981E-05 3.4376E-05 - 7.9433E+01 4.9593E-04 3.4112E-04 2.8619E-05 2.3319E-05 - 8.9125E+01 3.4765E-04 2.3807E-04 1.9550E-05 1.5721E-05 - 1.0000E+02 2.4307E-04 1.6541E-04 1.3177E-05 1.0743E-05 - 1.1220E+02 1.6984E-04 1.1490E-04 8.9255E-06 7.3381E-06 - 1.2589E+02 1.1877E-04 7.9889E-05 6.0575E-06 4.9939E-06 - 1.4125E+02 8.2969E-05 5.5477E-05 4.1100E-06 3.3852E-06 - 1.5849E+02 5.7893E-05 3.8435E-05 2.8018E-06 2.2951E-06 - 1.7783E+02 4.0366E-05 2.6626E-05 1.9161E-06 1.5552E-06 - 1.9953E+02 2.8163E-05 1.8453E-05 1.3065E-06 1.0561E-06 - 2.2387E+02 1.9600E-05 1.2753E-05 8.9173E-07 7.1227E-07 - 2.5119E+02 1.3640E-05 8.7909E-06 6.0568E-07 4.8262E-07 - 2.8184E+02 9.5106E-06 6.0642E-06 4.0808E-07 3.2100E-07 - 3.1623E+02 6.6020E-06 4.2052E-06 2.7665E-07 2.1941E-07 - 3.5481E+02 4.5498E-06 2.8836E-06 1.8721E-07 1.4887E-07 - 3.9811E+02 3.1475E-06 1.9839E-06 1.2626E-07 1.0043E-07 - 4.4668E+02 2.1743E-06 1.3588E-06 8.5795E-08 6.6823E-08 - 5.0119E+02 1.4975E-06 9.2850E-07 5.7850E-08 4.4853E-08 - 5.6234E+02 1.0377E-06 6.4088E-07 3.8670E-08 3.0030E-08 - 6.3096E+02 7.0735E-07 4.3531E-07 2.6049E-08 1.9995E-08 - 7.0795E+02 4.8378E-07 2.9661E-07 1.7484E-08 1.3399E-08 - 7.9433E+02 3.3060E-07 2.0164E-07 1.1787E-08 8.9795E-09 - 8.9125E+02 2.2535E-07 1.3653E-07 7.8606E-09 5.9382E-09 - 1.0000E+03 1.5479E-07 9.3048E-08 5.2478E-09 3.9332E-09 - 1.1220E+03 1.0422E-07 6.2330E-08 3.4822E-09 2.6640E-09 - 1.2589E+03 7.0498E-08 4.1999E-08 2.3057E-09 1.7774E-09 - 1.4125E+03 4.7629E-08 2.8208E-08 1.5558E-09 1.1576E-09 - 1.5849E+03 3.2103E-08 1.8881E-08 1.0435E-09 7.6832E-10 - 1.7783E+03 2.1538E-08 1.2641E-08 6.8047E-10 5.1076E-10 - 1.9953E+03 1.4453E-08 8.4688E-09 4.5401E-10 3.3557E-10 - 2.2387E+03 9.6623E-09 5.6494E-09 3.0198E-10 2.1832E-10 - 2.5119E+03 6.4658E-09 3.7436E-09 2.0228E-10 1.4342E-10 - 2.8184E+03 4.3006E-09 2.4846E-09 1.3407E-10 9.6077E-11 - 3.1623E+03 2.9241E-09 1.6894E-09 8.5752E-11 6.2913E-11 - 3.5481E+03 1.9002E-09 1.0926E-09 5.5724E-11 4.0787E-11 - 3.9811E+03 1.2637E-09 7.2169E-10 3.7172E-11 2.6826E-11 - 4.4668E+03 8.3534E-10 4.7777E-10 2.4498E-11 1.7631E-11 - 5.0119E+03 5.5092E-10 3.1398E-10 1.6019E-11 1.1360E-11 - 5.6234E+03 3.6399E-10 2.0554E-10 1.0290E-11 7.3803E-12 - 6.3096E+03 2.3990E-10 1.3554E-10 6.9013E-12 5.0361E-12 - 7.0795E+03 1.5771E-10 8.8690E-11 4.4149E-12 3.2702E-12 - 7.9433E+03 1.0343E-10 5.7884E-11 2.8406E-12 2.0935E-12 - 8.9125E+03 6.7890E-11 3.7902E-11 1.8922E-12 1.3537E-12 - 1.0000E+04 4.4742E-11 2.4609E-11 1.2741E-12 8.8027E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0098E+04 1.0229E+04 5.0028E+03 4.5928E+03 - 1.1220E-01 9.0427E+03 9.1356E+03 4.4771E+03 4.0785E+03 - 1.2589E-01 8.0362E+03 8.0922E+03 3.9558E+03 3.5756E+03 - 1.4125E-01 7.0650E+03 7.1016E+03 3.4584E+03 3.0979E+03 - 1.5849E-01 6.1341E+03 6.1571E+03 2.9928E+03 2.6555E+03 - 1.7783E-01 5.2580E+03 5.2621E+03 2.5644E+03 2.2504E+03 - 1.9953E-01 4.4406E+03 4.4331E+03 2.1738E+03 1.8855E+03 - 2.2387E-01 3.6964E+03 3.6844E+03 1.8186E+03 1.5606E+03 - 2.5119E-01 3.0374E+03 3.0205E+03 1.5024E+03 1.2776E+03 - 2.8184E-01 2.4672E+03 2.4484E+03 1.2256E+03 1.0328E+03 - 3.1623E-01 1.9833E+03 1.9636E+03 9.8773E+02 8.2522E+02 - 3.5481E-01 1.5780E+03 1.5571E+03 7.8723E+02 6.5116E+02 - 3.9811E-01 1.2418E+03 1.2231E+03 6.1924E+02 5.0750E+02 - 4.4668E-01 9.6980E+02 9.5111E+02 4.8112E+02 3.9238E+02 - 5.0119E-01 7.5137E+02 7.3369E+02 3.7089E+02 3.0037E+02 - 5.6234E-01 5.7604E+02 5.6059E+02 2.8291E+02 2.2827E+02 - 6.3096E-01 4.3926E+02 4.2446E+02 2.1371E+02 1.7152E+02 - 7.0795E-01 3.3417E+02 3.1926E+02 1.6000E+02 1.2754E+02 - 7.9433E-01 2.5255E+02 2.3944E+02 1.1890E+02 9.4478E+01 - 8.9125E-01 1.9021E+02 1.7923E+02 8.7827E+01 6.9525E+01 - 1.0000E+00 1.4294E+02 1.3345E+02 6.4419E+01 5.0861E+01 - 1.1220E+00 1.0694E+02 9.8824E+01 4.6932E+01 3.6932E+01 - 1.2589E+00 7.9917E+01 7.2995E+01 3.3963E+01 2.6645E+01 - 1.4125E+00 5.9699E+01 5.3845E+01 2.4463E+01 1.9162E+01 - 1.5849E+00 4.4359E+01 3.9511E+01 1.7564E+01 1.3683E+01 - 1.7783E+00 3.2751E+01 2.8808E+01 1.2514E+01 9.7371E+00 - 1.9953E+00 2.4120E+01 2.0975E+01 8.8827E+00 6.8874E+00 - 2.2387E+00 1.7717E+01 1.5231E+01 6.2705E+00 4.8242E+00 - 2.5119E+00 1.2958E+01 1.0972E+01 4.3862E+00 3.3776E+00 - 2.8184E+00 9.4471E+00 7.8942E+00 3.0602E+00 2.3422E+00 - 3.1623E+00 6.8731E+00 5.6840E+00 2.1197E+00 1.6194E+00 - 3.5481E+00 4.9896E+00 4.0760E+00 1.4642E+00 1.1116E+00 - 3.9811E+00 3.6144E+00 2.9198E+00 1.0062E+00 7.6118E-01 - 4.4668E+00 2.6083E+00 2.0886E+00 6.8557E-01 5.1981E-01 - 5.0119E+00 1.8831E+00 1.4940E+00 4.6435E-01 3.5084E-01 - 5.6234E+00 1.3574E+00 1.0671E+00 3.1486E-01 2.3796E-01 - 6.3096E+00 9.7532E-01 7.5926E-01 2.1251E-01 1.6146E-01 - 7.0795E+00 6.9981E-01 5.4046E-01 1.4301E-01 1.0835E-01 - 7.9433E+00 5.0204E-01 3.8493E-01 9.6407E-02 7.2744E-02 - 8.9125E+00 3.5884E-01 2.7406E-01 6.4795E-02 4.9071E-02 - 1.0000E+01 2.5646E-01 1.9394E-01 4.3180E-02 3.2697E-02 - 1.1220E+01 1.8267E-01 1.3736E-01 2.8839E-02 2.1862E-02 - 1.2589E+01 1.3009E-01 9.7061E-02 1.9246E-02 1.4654E-02 - 1.4125E+01 9.2795E-02 6.8818E-02 1.2860E-02 9.8378E-03 - 1.5849E+01 6.6086E-02 4.8845E-02 8.5075E-03 6.4977E-03 - 1.7783E+01 4.6990E-02 3.4620E-02 5.6326E-03 4.3477E-03 - 1.9953E+01 3.3420E-02 2.4545E-02 3.7772E-03 2.9463E-03 - 2.2387E+01 2.3792E-02 1.7368E-02 2.5113E-03 1.9469E-03 - 2.5119E+01 1.6929E-02 1.2221E-02 1.6648E-03 1.3238E-03 - 2.8184E+01 1.2026E-02 8.5671E-03 1.1171E-03 8.8556E-04 - 3.1623E+01 8.4938E-03 6.1141E-03 7.4592E-04 5.8946E-04 - 3.5481E+01 6.0113E-03 4.3078E-03 5.0019E-04 3.9625E-04 - 3.9811E+01 4.2465E-03 3.0298E-03 3.3506E-04 2.6692E-04 - 4.4668E+01 2.9945E-03 2.1306E-03 2.2473E-04 1.8030E-04 - 5.0119E+01 2.1116E-03 1.4967E-03 1.5093E-04 1.2132E-04 - 5.6234E+01 1.4887E-03 1.0479E-03 1.0153E-04 8.2224E-05 - 6.3096E+01 1.0470E-03 7.3312E-04 6.8447E-05 5.5796E-05 - 7.0795E+01 7.3694E-04 5.1216E-04 4.5758E-05 3.7612E-05 - 7.9433E+01 5.1851E-04 3.5751E-04 3.0999E-05 2.5447E-05 - 8.9125E+01 3.6270E-04 2.4909E-04 2.1256E-05 1.7340E-05 - 1.0000E+02 2.5446E-04 1.7449E-04 1.4329E-05 1.1777E-05 - 1.1220E+02 1.7819E-04 1.2138E-04 9.7326E-06 7.9830E-06 - 1.2589E+02 1.2469E-04 8.4289E-05 6.6324E-06 5.4196E-06 - 1.4125E+02 8.7125E-05 5.8537E-05 4.5024E-06 3.6697E-06 - 1.5849E+02 6.0973E-05 4.0631E-05 3.0632E-06 2.4915E-06 - 1.7783E+02 4.2567E-05 2.8198E-05 2.0708E-06 1.6952E-06 - 1.9953E+02 2.9626E-05 1.9552E-05 1.3987E-06 1.1540E-06 - 2.2387E+02 2.0616E-05 1.3494E-05 9.5257E-07 7.8581E-07 - 2.5119E+02 1.4357E-05 9.3209E-06 6.4738E-07 5.2269E-07 - 2.8184E+02 1.0003E-05 6.4684E-06 4.4045E-07 3.5034E-07 - 3.1623E+02 6.9627E-06 4.4803E-06 3.0212E-07 2.3987E-07 - 3.5481E+02 4.8098E-06 3.0754E-06 2.0483E-07 1.5992E-07 - 3.9811E+02 3.3276E-06 2.1158E-06 1.3822E-07 1.0737E-07 - 4.4668E+02 2.2999E-06 1.4541E-06 9.2965E-08 7.2822E-08 - 5.0119E+02 1.5885E-06 9.9629E-07 6.2631E-08 4.8826E-08 - 5.6234E+02 1.1039E-06 6.8595E-07 4.2163E-08 3.3139E-08 - 6.3096E+02 7.5668E-07 4.6679E-07 2.8562E-08 2.2085E-08 - 7.0795E+02 5.1853E-07 3.1862E-07 1.9334E-08 1.4770E-08 - 7.9433E+02 3.5454E-07 2.1649E-07 1.2876E-08 9.8384E-09 - 8.9125E+02 2.4296E-07 1.4705E-07 8.4671E-09 6.6608E-09 - 1.0000E+03 1.6676E-07 1.0073E-07 5.7504E-09 4.4149E-09 - 1.1220E+03 1.1206E-07 6.7669E-08 3.8838E-09 2.9035E-09 - 1.2589E+03 7.6105E-08 4.5541E-08 2.5825E-09 1.9262E-09 - 1.4125E+03 5.1512E-08 3.0613E-08 1.7129E-09 1.2783E-09 - 1.5849E+03 3.4697E-08 2.0523E-08 1.1329E-09 8.3758E-10 - 1.7783E+03 2.3378E-08 1.3732E-08 7.3740E-10 5.4788E-10 - 1.9953E+03 1.5729E-08 9.2167E-09 4.9885E-10 3.6932E-10 - 2.2387E+03 1.0543E-08 6.1618E-09 3.3598E-10 2.4833E-10 - 2.5119E+03 7.0718E-09 4.1061E-09 2.2197E-10 1.6269E-10 - 2.8184E+03 4.7162E-09 2.7170E-09 1.4365E-10 1.0501E-10 - 3.1623E+03 3.2171E-09 1.8550E-09 9.5253E-11 7.0382E-11 - 3.5481E+03 2.0874E-09 1.2005E-09 6.3204E-11 4.5446E-11 - 3.9811E+03 1.3828E-09 7.9320E-10 4.1682E-11 2.9594E-11 - 4.4668E+03 9.1480E-10 5.2369E-10 2.7446E-11 1.9791E-11 - 5.0119E+03 6.0651E-10 3.4444E-10 1.8080E-11 1.3205E-11 - 5.6234E+03 4.0261E-10 2.2640E-10 1.1823E-11 8.6689E-12 - 6.3096E+03 2.6514E-10 1.4910E-10 7.5908E-12 5.5348E-12 - 7.0795E+03 1.7461E-10 9.7592E-11 4.9310E-12 3.6665E-12 - 7.9433E+03 1.1500E-10 6.3857E-11 3.1973E-12 2.3889E-12 - 8.9125E+03 7.5768E-11 4.2020E-11 2.1168E-12 1.5396E-12 - 1.0000E+04 4.9575E-11 2.7482E-11 1.4040E-12 9.9851E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0499E+04 1.0621E+04 5.1928E+03 4.7850E+03 - 1.1220E-01 9.3449E+03 9.4394E+03 4.6283E+03 4.2315E+03 - 1.2589E-01 8.2613E+03 8.3207E+03 4.0863E+03 3.6978E+03 - 1.4125E-01 7.2354E+03 7.2673E+03 3.5686E+03 3.1990E+03 - 1.5849E-01 6.2682E+03 6.2862E+03 3.0825E+03 2.7378E+03 - 1.7783E-01 5.3633E+03 5.3618E+03 2.6390E+03 2.3188E+03 - 1.9953E-01 4.5230E+03 4.5086E+03 2.2396E+03 1.9450E+03 - 2.2387E-01 3.7619E+03 3.7462E+03 1.8776E+03 1.6117E+03 - 2.5119E-01 3.0917E+03 3.0755E+03 1.5510E+03 1.3191E+03 - 2.8184E-01 2.5100E+03 2.4962E+03 1.2670E+03 1.0699E+03 - 3.1623E-01 2.0160E+03 2.0031E+03 1.0233E+03 8.5670E+02 - 3.5481E-01 1.6037E+03 1.5895E+03 8.1614E+02 6.7611E+02 - 3.9811E-01 1.2662E+03 1.2490E+03 6.4455E+02 5.3042E+02 - 4.4668E-01 9.8977E+02 9.7405E+02 5.0402E+02 4.1207E+02 - 5.0119E-01 7.6678E+02 7.5168E+02 3.8952E+02 3.1618E+02 - 5.6234E-01 5.9063E+02 5.7514E+02 2.9847E+02 2.4056E+02 - 6.3096E-01 4.5096E+02 4.3780E+02 2.2655E+02 1.8177E+02 - 7.0795E-01 3.4175E+02 3.3029E+02 1.7015E+02 1.3628E+02 - 7.9433E-01 2.5853E+02 2.4783E+02 1.2687E+02 1.0107E+02 - 8.9125E-01 1.9534E+02 1.8548E+02 9.3980E+01 7.4368E+01 - 1.0000E+00 1.4692E+02 1.3841E+02 6.9412E+01 5.4598E+01 - 1.1220E+00 1.1028E+02 1.0287E+02 5.0656E+01 3.9896E+01 - 1.2589E+00 8.2565E+01 7.6215E+01 3.6806E+01 2.8948E+01 - 1.4125E+00 6.1552E+01 5.6148E+01 2.6638E+01 2.0877E+01 - 1.5849E+00 4.5766E+01 4.1199E+01 1.9210E+01 1.4996E+01 - 1.7783E+00 3.3868E+01 3.0100E+01 1.3779E+01 1.0708E+01 - 1.9953E+00 2.4936E+01 2.1922E+01 9.8184E+00 7.5927E+00 - 2.2387E+00 1.8291E+01 1.5930E+01 6.9625E+00 5.3421E+00 - 2.5119E+00 1.3381E+01 1.1520E+01 4.9084E+00 3.7708E+00 - 2.8184E+00 9.7605E+00 8.3044E+00 3.4386E+00 2.6408E+00 - 3.1623E+00 7.1047E+00 5.9644E+00 2.3766E+00 1.8207E+00 - 3.5481E+00 5.1573E+00 4.2827E+00 1.6409E+00 1.2552E+00 - 3.9811E+00 3.7368E+00 3.0683E+00 1.1306E+00 8.5862E-01 - 4.4668E+00 2.6986E+00 2.1921E+00 7.7399E-01 5.8572E-01 - 5.0119E+00 1.9458E+00 1.5679E+00 5.2691E-01 3.9955E-01 - 5.6234E+00 1.3999E+00 1.1201E+00 3.5780E-01 2.7026E-01 - 6.3096E+00 1.0064E+00 7.9621E-01 2.4279E-01 1.8349E-01 - 7.0795E+00 7.2241E-01 5.6740E-01 1.6340E-01 1.2439E-01 - 7.9433E+00 5.1663E-01 4.0317E-01 1.0983E-01 8.3829E-02 - 8.9125E+00 3.7039E-01 2.8581E-01 7.3689E-02 5.6068E-02 - 1.0000E+01 2.6472E-01 2.0307E-01 4.9334E-02 3.7403E-02 - 1.1220E+01 1.8887E-01 1.4433E-01 3.2856E-02 2.4887E-02 - 1.2589E+01 1.3493E-01 1.0240E-01 2.1883E-02 1.6599E-02 - 1.4125E+01 9.6121E-02 7.2407E-02 1.4628E-02 1.1165E-02 - 1.5849E+01 6.8568E-02 5.1262E-02 9.7315E-03 7.4682E-03 - 1.7783E+01 4.8745E-02 3.6423E-02 6.4713E-03 4.9840E-03 - 1.9953E+01 3.4658E-02 2.5784E-02 4.3072E-03 3.3459E-03 - 2.2387E+01 2.4743E-02 1.8257E-02 2.8931E-03 2.2444E-03 - 2.5119E+01 1.7607E-02 1.2930E-02 1.9414E-03 1.4976E-03 - 2.8184E+01 1.2459E-02 9.1384E-03 1.2851E-03 9.9558E-04 - 3.1623E+01 8.8295E-03 6.4155E-03 8.4889E-04 6.6741E-04 - 3.5481E+01 6.2523E-03 4.5235E-03 5.6708E-04 4.4840E-04 - 3.9811E+01 4.4215E-03 3.1841E-03 3.7843E-04 3.0252E-04 - 4.4668E+01 3.1257E-03 2.2412E-03 2.5302E-04 2.0336E-04 - 5.0119E+01 2.2049E-03 1.5760E-03 1.6960E-04 1.3642E-04 - 5.6234E+01 1.5563E-03 1.1073E-03 1.1437E-04 9.1824E-05 - 6.3096E+01 1.0970E-03 7.7630E-04 7.7024E-05 6.1721E-05 - 7.0795E+01 7.7163E-04 5.4347E-04 5.1554E-05 4.1919E-05 - 7.9433E+01 5.4234E-04 3.7987E-04 3.4988E-05 2.8640E-05 - 8.9125E+01 3.8107E-04 2.6502E-04 2.3460E-05 1.9176E-05 - 1.0000E+02 2.6783E-04 1.8497E-04 1.5891E-05 1.2974E-05 - 1.1220E+02 1.8757E-04 1.2864E-04 1.0791E-05 8.7871E-06 - 1.2589E+02 1.3145E-04 8.9626E-05 7.3258E-06 5.9681E-06 - 1.4125E+02 9.1953E-05 6.2388E-05 4.9533E-06 4.0515E-06 - 1.5849E+02 6.4318E-05 4.3363E-05 3.3495E-06 2.7468E-06 - 1.7783E+02 4.4973E-05 3.0064E-05 2.2712E-06 1.8545E-06 - 1.9953E+02 3.1388E-05 2.0828E-05 1.5391E-06 1.2685E-06 - 2.2387E+02 2.1878E-05 1.4430E-05 1.0352E-06 8.6636E-07 - 2.5119E+02 1.5247E-05 9.9966E-06 7.0247E-07 5.7557E-07 - 2.8184E+02 1.0606E-05 6.9155E-06 4.8583E-07 3.9023E-07 - 3.1623E+02 7.4004E-06 4.7805E-06 3.3043E-07 2.6257E-07 - 3.5481E+02 5.1234E-06 3.2860E-06 2.2336E-07 1.7763E-07 - 3.9811E+02 3.5557E-06 2.2667E-06 1.5066E-07 1.2095E-07 - 4.4668E+02 2.4651E-06 1.5615E-06 1.0211E-07 8.1086E-08 - 5.0119E+02 1.7035E-06 1.0715E-06 6.8468E-08 5.4210E-08 - 5.6234E+02 1.1826E-06 7.3889E-07 4.6454E-08 3.6551E-08 - 6.3096E+02 8.1169E-07 5.0462E-07 3.1372E-08 2.4464E-08 - 7.0795E+02 5.5747E-07 3.4480E-07 2.1046E-08 1.6351E-08 - 7.9433E+02 3.8204E-07 2.3511E-07 1.4225E-08 1.0913E-08 - 8.9125E+02 2.6201E-07 1.6023E-07 9.5909E-09 7.2809E-09 - 1.0000E+03 1.8024E-07 1.0928E-07 6.3719E-09 4.8786E-09 - 1.1220E+03 1.2197E-07 7.3469E-08 4.2564E-09 3.2380E-09 - 1.2589E+03 8.3008E-08 4.9687E-08 2.8455E-09 2.1639E-09 - 1.4125E+03 5.6313E-08 3.3540E-08 1.8866E-09 1.4213E-09 - 1.5849E+03 3.8085E-08 2.2572E-08 1.2530E-09 9.5069E-10 - 1.7783E+03 2.5689E-08 1.5133E-08 8.3809E-10 6.3305E-10 - 1.9953E+03 1.7313E-08 1.0223E-08 5.6380E-10 4.2047E-10 - 2.2387E+03 1.1654E-08 6.8491E-09 3.7389E-10 2.7436E-10 - 2.5119E+03 7.8119E-09 4.5590E-09 2.4237E-10 1.7996E-10 - 2.8184E+03 5.2182E-09 3.0369E-09 1.5883E-10 1.1996E-10 - 3.1623E+03 3.5615E-09 2.0551E-09 1.0658E-10 7.7155E-11 - 3.5481E+03 2.3216E-09 1.3365E-09 7.1004E-11 5.0529E-11 - 3.9811E+03 1.5460E-09 8.8642E-10 4.5770E-11 3.3438E-11 - 4.4668E+03 1.0243E-09 5.8589E-10 2.9719E-11 2.1947E-11 - 5.0119E+03 6.7836E-10 3.8577E-10 2.0341E-11 1.4425E-11 - 5.6234E+03 4.4832E-10 2.5467E-10 1.3393E-11 9.0560E-12 - 6.3096E+03 2.9702E-10 1.6686E-10 8.6608E-12 5.9945E-12 - 7.0795E+03 1.9616E-10 1.0920E-10 5.6623E-12 4.0446E-12 - 7.9433E+03 1.2915E-10 7.1589E-11 3.7823E-12 2.5520E-12 - 8.9125E+03 8.5305E-11 4.6949E-11 2.4578E-12 1.6516E-12 - 1.0000E+04 5.6051E-11 3.0698E-11 1.5915E-12 1.1108E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1018E+04 1.1154E+04 5.4600E+03 5.0366E+03 - 1.1220E-01 9.7397E+03 9.8528E+03 4.8496E+03 4.4323E+03 - 1.2589E-01 8.5755E+03 8.6451E+03 4.2588E+03 3.8582E+03 - 1.4125E-01 7.4791E+03 7.5122E+03 3.7055E+03 3.3286E+03 - 1.5849E-01 6.4477E+03 6.4623E+03 3.1951E+03 2.8434E+03 - 1.7783E-01 5.4995E+03 5.5016E+03 2.7308E+03 2.4033E+03 - 1.9953E-01 4.6247E+03 4.6194E+03 2.3093E+03 2.0116E+03 - 2.2387E-01 3.8377E+03 3.8268E+03 1.9342E+03 1.6690E+03 - 2.5119E-01 3.1482E+03 3.1391E+03 1.6018E+03 1.3681E+03 - 2.8184E-01 2.5532E+03 2.5465E+03 1.3084E+03 1.1084E+03 - 3.1623E-01 2.0517E+03 2.0431E+03 1.0594E+03 8.8784E+02 - 3.5481E-01 1.6332E+03 1.6225E+03 8.4764E+02 7.0342E+02 - 3.9811E-01 1.2895E+03 1.2745E+03 6.6980E+02 5.5234E+02 - 4.4668E-01 1.0110E+03 9.9432E+02 5.2489E+02 4.2933E+02 - 5.0119E-01 7.8395E+02 7.7080E+02 4.0738E+02 3.3110E+02 - 5.6234E-01 6.0327E+02 5.9164E+02 3.1383E+02 2.5405E+02 - 6.3096E-01 4.6243E+02 4.4992E+02 2.3906E+02 1.9244E+02 - 7.0795E-01 3.5137E+02 3.4036E+02 1.8073E+02 1.4467E+02 - 7.9433E-01 2.6638E+02 2.5649E+02 1.3556E+02 1.0837E+02 - 8.9125E-01 2.0123E+02 1.9233E+02 1.0082E+02 8.0394E+01 - 1.0000E+00 1.5162E+02 1.4405E+02 7.4623E+01 5.9143E+01 - 1.1220E+00 1.1375E+02 1.0737E+02 5.4958E+01 4.3264E+01 - 1.2589E+00 8.5158E+01 7.9676E+01 4.0267E+01 3.1497E+01 - 1.4125E+00 6.3679E+01 5.8738E+01 2.9242E+01 2.2836E+01 - 1.5849E+00 4.7453E+01 4.3214E+01 2.1078E+01 1.6457E+01 - 1.7783E+00 3.5046E+01 3.1690E+01 1.5147E+01 1.1831E+01 - 1.9953E+00 2.5760E+01 2.3092E+01 1.0862E+01 8.4471E+00 - 2.2387E+00 1.8978E+01 1.6808E+01 7.7421E+00 5.9601E+00 - 2.5119E+00 1.3892E+01 1.2093E+01 5.4624E+00 4.1887E+00 - 2.8184E+00 1.0133E+01 8.7095E+00 3.8185E+00 2.9166E+00 - 3.1623E+00 7.3699E+00 6.2807E+00 2.6840E+00 2.0401E+00 - 3.5481E+00 5.3515E+00 4.5096E+00 1.8647E+00 1.4133E+00 - 3.9811E+00 3.8689E+00 3.2378E+00 1.2845E+00 9.7260E-01 - 4.4668E+00 2.7902E+00 2.3170E+00 8.8333E-01 6.6649E-01 - 5.0119E+00 2.0125E+00 1.6531E+00 6.0372E-01 4.5538E-01 - 5.6234E+00 1.4524E+00 1.1757E+00 4.1004E-01 3.1135E-01 - 6.3096E+00 1.0428E+00 8.3903E-01 2.7859E-01 2.1128E-01 - 7.0795E+00 7.4637E-01 5.9627E-01 1.8884E-01 1.4246E-01 - 7.9433E+00 5.3524E-01 4.2268E-01 1.2676E-01 9.6000E-02 - 8.9125E+00 3.8350E-01 3.0057E-01 8.4405E-02 6.4740E-02 - 1.0000E+01 2.7415E-01 2.1327E-01 5.7289E-02 4.3257E-02 - 1.1220E+01 1.9554E-01 1.5116E-01 3.8252E-02 2.8979E-02 - 1.2589E+01 1.3945E-01 1.0690E-01 2.5581E-02 1.9316E-02 - 1.4125E+01 9.9574E-02 7.5781E-02 1.7040E-02 1.2899E-02 - 1.5849E+01 7.1064E-02 5.3830E-02 1.1326E-02 8.6609E-03 - 1.7783E+01 5.0527E-02 3.8238E-02 7.5391E-03 5.7985E-03 - 1.9953E+01 3.5860E-02 2.7043E-02 4.9886E-03 3.8680E-03 - 2.2387E+01 2.5612E-02 1.9120E-02 3.3289E-03 2.5886E-03 - 2.5119E+01 1.8209E-02 1.3480E-02 2.2319E-03 1.7386E-03 - 2.8184E+01 1.2959E-02 9.5604E-03 1.4823E-03 1.1626E-03 - 3.1623E+01 9.2086E-03 6.7761E-03 9.8690E-04 7.7031E-04 - 3.5481E+01 6.5267E-03 4.7781E-03 6.5575E-04 5.1563E-04 - 3.9811E+01 4.6286E-03 3.3692E-03 4.3801E-04 3.4651E-04 - 4.4668E+01 3.2756E-03 2.3729E-03 2.9378E-04 2.3270E-04 - 5.0119E+01 2.3132E-03 1.6682E-03 1.9651E-04 1.5709E-04 - 5.6234E+01 1.6352E-03 1.1712E-03 1.3086E-04 1.0531E-04 - 6.3096E+01 1.1542E-03 8.2254E-04 8.7890E-05 7.0866E-05 - 7.0795E+01 8.1261E-04 5.7643E-04 5.8981E-05 4.7652E-05 - 7.9433E+01 5.7149E-04 4.0327E-04 3.9208E-05 3.2062E-05 - 8.9125E+01 4.0174E-04 2.8183E-04 2.6339E-05 2.1585E-05 - 1.0000E+02 2.8274E-04 1.9717E-04 1.7955E-05 1.4598E-05 - 1.1220E+02 1.9844E-04 1.3762E-04 1.2111E-05 9.8809E-06 - 1.2589E+02 1.3905E-04 9.5852E-05 8.1570E-06 6.7005E-06 - 1.4125E+02 9.7306E-05 6.6666E-05 5.5279E-06 4.5189E-06 - 1.5849E+02 6.8088E-05 4.6403E-05 3.7528E-06 3.0453E-06 - 1.7783E+02 4.7583E-05 3.2207E-05 2.5328E-06 2.0650E-06 - 1.9953E+02 3.3274E-05 2.2309E-05 1.7049E-06 1.4082E-06 - 2.2387E+02 2.3256E-05 1.5477E-05 1.1604E-06 9.4434E-07 - 2.5119E+02 1.6224E-05 1.0751E-05 7.8870E-07 6.3324E-07 - 2.8184E+02 1.1316E-05 7.4435E-06 5.3416E-07 4.2993E-07 - 3.1623E+02 7.9029E-06 5.1463E-06 3.6459E-07 2.9380E-07 - 3.5481E+02 5.4771E-06 3.5446E-06 2.4635E-07 1.9834E-07 - 3.9811E+02 3.8005E-06 2.4466E-06 1.6736E-07 1.3369E-07 - 4.4668E+02 2.6417E-06 1.6861E-06 1.1340E-07 9.0201E-08 - 5.0119E+02 1.8307E-06 1.1596E-06 7.6276E-08 6.0399E-08 - 5.6234E+02 1.2730E-06 8.0250E-07 5.1452E-08 4.0626E-08 - 6.3096E+02 8.7467E-07 5.4824E-07 3.4591E-08 2.7294E-08 - 7.0795E+02 6.0274E-07 3.7466E-07 2.3333E-08 1.8232E-08 - 7.9433E+02 4.1551E-07 2.5626E-07 1.5901E-08 1.2221E-08 - 8.9125E+02 2.8515E-07 1.7490E-07 1.0736E-08 8.2034E-09 - 1.0000E+03 1.9660E-07 1.2005E-07 7.0790E-09 5.5057E-09 - 1.1220E+03 1.3320E-07 8.0983E-08 4.7850E-09 3.6990E-09 - 1.2589E+03 9.0909E-08 5.4860E-08 3.2107E-09 2.4427E-09 - 1.4125E+03 6.1728E-08 3.7112E-08 2.1284E-09 1.6171E-09 - 1.5849E+03 4.1844E-08 2.5052E-08 1.4176E-09 1.0440E-09 - 1.7783E+03 2.8368E-08 1.6828E-08 9.5649E-10 6.9164E-10 - 1.9953E+03 1.9165E-08 1.1321E-08 6.2562E-10 4.6274E-10 - 2.2387E+03 1.2944E-08 7.5721E-09 4.1484E-10 3.1303E-10 - 2.5119E+03 8.7137E-09 5.0645E-09 2.7173E-10 2.0134E-10 - 2.8184E+03 5.8385E-09 3.3825E-09 1.8153E-10 1.3092E-10 - 3.1623E+03 4.0051E-09 2.3134E-09 1.2032E-10 8.8910E-11 - 3.5481E+03 2.6067E-09 1.5009E-09 8.0527E-11 5.7926E-11 - 3.9811E+03 1.7361E-09 9.9397E-10 5.3801E-11 3.6987E-11 - 4.4668E+03 1.1536E-09 6.5714E-10 3.4611E-11 2.4329E-11 - 5.0119E+03 7.6456E-10 4.3434E-10 2.2619E-11 1.6204E-11 - 5.6234E+03 5.0862E-10 2.8662E-10 1.4837E-11 1.0604E-11 - 6.3096E+03 3.3616E-10 1.8894E-10 9.8425E-12 6.9863E-12 - 7.0795E+03 2.2233E-10 1.2398E-10 6.4229E-12 4.6378E-12 - 7.9433E+03 1.4663E-10 8.1473E-11 4.2701E-12 3.0182E-12 - 8.9125E+03 9.6464E-11 5.3602E-11 2.7745E-12 1.9464E-12 - 1.0000E+04 6.3575E-11 3.5066E-11 1.8037E-12 1.2483E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1779E+04 1.1927E+04 5.8168E+03 5.3961E+03 - 1.1220E-01 1.0340E+04 1.0454E+04 5.1456E+03 4.7242E+03 - 1.2589E-01 9.0259E+03 9.1034E+03 4.4946E+03 4.0912E+03 - 1.4125E-01 7.8229E+03 7.8657E+03 3.8896E+03 3.5089E+03 - 1.5849E-01 6.7126E+03 6.7263E+03 3.3446E+03 2.9838E+03 - 1.7783E-01 5.6919E+03 5.6883E+03 2.8465E+03 2.5115E+03 - 1.9953E-01 4.7617E+03 4.7559E+03 2.3995E+03 2.0981E+03 - 2.2387E-01 3.9385E+03 3.9326E+03 2.0073E+03 1.7331E+03 - 2.5119E-01 3.2272E+03 3.2131E+03 1.6603E+03 1.4180E+03 - 2.8184E-01 2.6138E+03 2.5982E+03 1.3573E+03 1.1515E+03 - 3.1623E-01 2.0956E+03 2.0843E+03 1.0985E+03 9.2437E+02 - 3.5481E-01 1.6676E+03 1.6577E+03 8.8000E+02 7.3376E+02 - 3.9811E-01 1.3138E+03 1.3075E+03 6.9636E+02 5.7716E+02 - 4.4668E-01 1.0279E+03 1.0208E+03 5.4704E+02 4.5001E+02 - 5.0119E-01 8.0076E+02 7.8920E+02 4.2625E+02 3.4818E+02 - 5.6234E-01 6.1719E+02 6.0751E+02 3.2858E+02 2.6716E+02 - 6.3096E-01 4.7282E+02 4.6409E+02 2.5232E+02 2.0369E+02 - 7.0795E-01 3.6064E+02 3.5151E+02 1.9203E+02 1.5370E+02 - 7.9433E-01 2.7372E+02 2.6493E+02 1.4451E+02 1.1521E+02 - 8.9125E-01 2.0744E+02 1.9951E+02 1.0816E+02 8.5749E+01 - 1.0000E+00 1.5657E+02 1.4989E+02 8.0611E+01 6.3667E+01 - 1.1220E+00 1.1756E+02 1.1193E+02 5.9372E+01 4.6993E+01 - 1.2589E+00 8.8320E+01 8.3090E+01 4.3652E+01 3.4475E+01 - 1.4125E+00 6.6120E+01 6.1494E+01 3.1988E+01 2.5091E+01 - 1.5849E+00 4.9221E+01 4.5379E+01 2.3300E+01 1.8134E+01 - 1.7783E+00 3.6492E+01 3.3436E+01 1.6863E+01 1.3082E+01 - 1.9953E+00 2.6939E+01 2.4446E+01 1.2157E+01 9.4040E+00 - 2.2387E+00 1.9786E+01 1.7743E+01 8.7053E+00 6.6607E+00 - 2.5119E+00 1.4494E+01 1.2847E+01 6.1668E+00 4.7090E+00 - 2.8184E+00 1.0590E+01 9.2675E+00 4.3241E+00 3.3295E+00 - 3.1623E+00 7.6922E+00 6.6835E+00 3.0426E+00 2.3187E+00 - 3.5481E+00 5.5778E+00 4.8028E+00 2.1240E+00 1.6180E+00 - 3.9811E+00 4.0336E+00 3.4449E+00 1.4743E+00 1.1237E+00 - 4.4668E+00 2.9088E+00 2.4643E+00 1.0190E+00 7.7240E-01 - 5.0119E+00 2.1006E+00 1.7616E+00 6.9755E-01 5.2867E-01 - 5.6234E+00 1.5120E+00 1.2543E+00 4.7776E-01 3.6212E-01 - 6.3096E+00 1.0832E+00 8.9179E-01 3.2740E-01 2.4715E-01 - 7.0795E+00 7.7800E-01 6.3569E-01 2.2157E-01 1.6663E-01 - 7.9433E+00 5.5878E-01 4.5162E-01 1.4977E-01 1.1342E-01 - 8.9125E+00 3.9935E-01 3.2042E-01 1.0116E-01 7.6891E-02 - 1.0000E+01 2.8540E-01 2.2645E-01 6.8054E-02 5.1253E-02 - 1.1220E+01 2.0407E-01 1.6055E-01 4.5464E-02 3.4347E-02 - 1.2589E+01 1.4565E-01 1.1371E-01 3.0379E-02 2.3065E-02 - 1.4125E+01 1.0381E-01 8.0650E-02 2.0299E-02 1.5484E-02 - 1.5849E+01 7.4075E-02 5.7158E-02 1.3515E-02 1.0362E-02 - 1.7783E+01 5.2807E-02 4.0552E-02 9.0710E-03 6.8877E-03 - 1.9953E+01 3.7737E-02 2.8716E-02 6.0421E-03 4.5354E-03 - 2.2387E+01 2.6864E-02 2.0315E-02 3.9993E-03 3.0259E-03 - 2.5119E+01 1.9102E-02 1.4404E-02 2.6622E-03 2.0449E-03 - 2.8184E+01 1.3584E-02 1.0205E-02 1.7521E-03 1.3807E-03 - 3.1623E+01 9.6587E-03 7.2000E-03 1.1783E-03 9.2072E-04 - 3.5481E+01 6.8595E-03 5.0887E-03 7.8323E-04 6.1399E-04 - 3.9811E+01 4.8696E-03 3.5917E-03 5.2083E-04 4.0941E-04 - 4.4668E+01 3.4515E-03 2.5329E-03 3.4640E-04 2.7478E-04 - 5.0119E+01 2.4441E-03 1.7824E-03 2.3148E-04 1.8513E-04 - 5.6234E+01 1.7297E-03 1.2547E-03 1.5474E-04 1.2342E-04 - 6.3096E+01 1.2226E-03 8.8290E-04 1.0321E-04 8.2476E-05 - 7.0795E+01 8.6241E-04 6.2040E-04 6.9276E-05 5.5245E-05 - 7.9433E+01 6.0812E-04 4.3418E-04 4.6522E-05 3.7375E-05 - 8.9125E+01 4.2860E-04 3.0376E-04 3.1058E-05 2.4996E-05 - 1.0000E+02 3.0158E-04 2.1245E-04 2.0842E-05 1.6884E-05 - 1.1220E+02 2.1178E-04 1.4834E-04 1.4014E-05 1.1399E-05 - 1.2589E+02 1.4868E-04 1.0352E-04 9.4155E-06 7.7074E-06 - 1.4125E+02 1.0416E-04 7.2087E-05 6.3485E-06 5.1981E-06 - 1.5849E+02 7.2968E-05 5.0192E-05 4.2874E-06 3.5091E-06 - 1.7783E+02 5.1148E-05 3.4898E-05 2.8971E-06 2.3516E-06 - 1.9953E+02 3.5781E-05 2.4211E-05 1.9593E-06 1.5867E-06 - 2.2387E+02 2.5009E-05 1.6809E-05 1.3351E-06 1.0795E-06 - 2.5119E+02 1.7453E-05 1.1663E-05 9.0337E-07 7.3474E-07 - 2.8184E+02 1.2190E-05 8.0971E-06 6.0567E-07 4.9778E-07 - 3.1623E+02 8.5147E-06 5.6048E-06 4.1165E-07 3.3225E-07 - 3.5481E+02 5.9207E-06 3.8688E-06 2.7900E-07 2.2447E-07 - 3.9811E+02 4.1172E-06 2.6766E-06 1.8919E-07 1.5220E-07 - 4.4668E+02 2.8613E-06 1.8480E-06 1.2739E-07 1.0266E-07 - 5.0119E+02 1.9895E-06 1.2753E-06 8.5956E-08 6.9028E-08 - 5.6234E+02 1.3848E-06 8.8023E-07 5.8662E-08 4.6405E-08 - 6.3096E+02 9.5340E-07 6.0285E-07 3.9639E-08 3.1228E-08 - 7.0795E+02 6.6026E-07 4.1459E-07 2.6608E-08 2.0791E-08 - 7.9433E+02 4.5580E-07 2.8456E-07 1.7859E-08 1.3915E-08 - 8.9125E+02 3.1308E-07 1.9417E-07 1.2057E-08 9.3138E-09 - 1.0000E+03 2.1678E-07 1.3296E-07 8.0623E-09 6.2492E-09 - 1.1220E+03 1.4789E-07 8.9796E-08 5.4595E-09 4.1528E-09 - 1.2589E+03 1.0100E-07 6.1169E-08 3.6742E-09 2.7764E-09 - 1.4125E+03 6.8853E-08 4.1532E-08 2.4699E-09 1.8561E-09 - 1.5849E+03 4.6893E-08 2.8061E-08 1.6482E-09 1.2280E-09 - 1.7783E+03 3.1885E-08 1.8978E-08 1.0773E-09 8.2675E-10 - 1.9953E+03 2.1608E-08 1.2807E-08 7.1761E-10 5.5076E-10 - 2.2387E+03 1.4617E-08 8.6119E-09 4.7926E-10 3.6059E-10 - 2.5119E+03 9.8365E-09 5.7891E-09 3.1630E-10 2.3607E-10 - 2.8184E+03 6.6109E-09 3.8748E-09 2.0980E-10 1.5614E-10 - 3.1623E+03 4.5433E-09 2.6461E-09 1.3924E-10 1.0251E-10 - 3.5481E+03 2.9692E-09 1.7208E-09 9.2468E-11 6.7061E-11 - 3.9811E+03 1.9826E-09 1.1401E-09 6.1370E-11 4.4622E-11 - 4.4668E+03 1.3212E-09 7.5838E-10 3.9613E-11 2.9369E-11 - 5.0119E+03 8.8232E-10 5.0104E-10 2.6237E-11 1.9349E-11 - 5.6234E+03 5.8536E-10 3.3053E-10 1.7341E-11 1.2927E-11 - 6.3096E+03 3.8897E-10 2.1901E-10 1.1497E-11 8.2356E-12 - 7.0795E+03 2.5826E-10 1.4414E-10 7.5286E-12 5.3225E-12 - 7.9433E+03 1.7006E-10 9.4873E-11 4.9071E-12 3.5683E-12 - 8.9125E+03 1.1237E-10 6.2555E-11 3.2181E-12 2.3332E-12 - 1.0000E+04 7.4128E-11 4.0923E-11 2.0983E-12 1.4866E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2908E+04 1.3079E+04 6.3693E+03 5.9069E+03 - 1.1220E-01 1.1223E+04 1.1368E+04 5.5894E+03 5.1406E+03 - 1.2589E-01 9.7211E+03 9.8158E+03 4.8485E+03 4.4261E+03 - 1.4125E-01 8.3602E+03 8.4068E+03 4.1661E+03 3.7738E+03 - 1.5849E-01 7.1214E+03 7.1378E+03 3.5600E+03 3.1841E+03 - 1.7783E-01 5.9996E+03 5.9951E+03 3.0154E+03 2.6701E+03 - 1.9953E-01 4.9923E+03 4.9790E+03 2.5278E+03 2.2212E+03 - 2.2387E-01 4.1045E+03 4.0917E+03 2.1042E+03 1.8248E+03 - 2.5119E-01 3.3403E+03 3.3279E+03 1.7367E+03 1.4893E+03 - 2.8184E-01 2.6922E+03 2.6796E+03 1.4200E+03 1.2042E+03 - 3.1623E-01 2.1516E+03 2.1412E+03 1.1469E+03 9.6360E+02 - 3.5481E-01 1.7090E+03 1.6985E+03 9.1642E+02 7.6582E+02 - 3.9811E-01 1.3481E+03 1.3370E+03 7.2633E+02 6.0323E+02 - 4.4668E-01 1.0550E+03 1.0446E+03 5.7107E+02 4.7049E+02 - 5.0119E-01 8.1984E+02 8.0895E+02 4.4556E+02 3.6391E+02 - 5.6234E-01 6.3373E+02 6.2269E+02 3.4558E+02 2.7987E+02 - 6.3096E-01 4.8583E+02 4.7719E+02 2.6585E+02 2.1425E+02 - 7.0795E-01 3.7128E+02 3.6356E+02 2.0325E+02 1.6282E+02 - 7.9433E-01 2.8250E+02 2.7474E+02 1.5393E+02 1.2270E+02 - 8.9125E-01 2.1411E+02 2.0728E+02 1.1548E+02 9.1804E+01 - 1.0000E+00 1.6169E+02 1.5612E+02 8.6606E+01 6.8864E+01 - 1.1220E+00 1.2158E+02 1.1696E+02 6.4388E+01 5.0967E+01 - 1.2589E+00 9.1409E+01 8.7210E+01 4.7618E+01 3.7583E+01 - 1.4125E+00 6.8669E+01 6.4695E+01 3.5077E+01 2.7641E+01 - 1.5849E+00 5.1218E+01 4.7854E+01 2.5712E+01 2.0128E+01 - 1.7783E+00 3.8009E+01 3.5266E+01 1.8716E+01 1.4577E+01 - 1.9953E+00 2.8013E+01 2.5882E+01 1.3572E+01 1.0504E+01 - 2.2387E+00 2.0589E+01 1.8900E+01 9.7942E+00 7.5500E+00 - 2.5119E+00 1.5125E+01 1.3719E+01 6.9875E+00 5.3754E+00 - 2.8184E+00 1.1047E+01 9.9183E+00 4.9820E+00 3.7958E+00 - 3.1623E+00 8.0708E+00 7.1610E+00 3.5051E+00 2.6750E+00 - 3.5481E+00 5.8593E+00 5.1533E+00 2.4624E+00 1.8711E+00 - 3.9811E+00 4.2402E+00 3.7052E+00 1.7199E+00 1.3010E+00 - 4.4668E+00 3.0641E+00 2.6524E+00 1.1902E+00 9.0563E-01 - 5.0119E+00 2.2116E+00 1.8930E+00 8.2384E-01 6.2538E-01 - 5.6234E+00 1.5907E+00 1.3507E+00 5.6692E-01 4.2979E-01 - 6.3096E+00 1.1411E+00 9.6198E-01 3.8785E-01 2.9237E-01 - 7.0795E+00 8.1745E-01 6.8241E-01 2.6455E-01 1.9816E-01 - 7.9433E+00 5.8580E-01 4.8617E-01 1.7974E-01 1.3473E-01 - 8.9125E+00 4.2001E-01 3.4658E-01 1.2153E-01 9.1454E-02 - 1.0000E+01 3.0080E-01 2.4492E-01 8.2241E-02 6.2280E-02 - 1.1220E+01 2.1486E-01 1.7322E-01 5.5433E-02 4.1805E-02 - 1.2589E+01 1.5340E-01 1.2247E-01 3.7365E-02 2.8014E-02 - 1.4125E+01 1.0935E-01 8.6816E-02 2.5062E-02 1.8834E-02 - 1.5849E+01 7.7879E-02 6.1661E-02 1.6672E-02 1.2637E-02 - 1.7783E+01 5.5600E-02 4.3652E-02 1.1126E-02 8.5050E-03 - 1.9953E+01 3.9714E-02 3.0940E-02 7.4454E-03 5.6987E-03 - 2.2387E+01 2.8318E-02 2.2060E-02 4.9719E-03 3.7692E-03 - 2.5119E+01 2.0189E-02 1.5607E-02 3.2827E-03 2.5316E-03 - 2.8184E+01 1.4420E-02 1.0967E-02 2.1813E-03 1.6986E-03 - 3.1623E+01 1.0205E-02 7.7463E-03 1.4590E-03 1.1295E-03 - 3.5481E+01 7.2596E-03 5.4727E-03 9.7045E-04 7.5407E-04 - 3.9811E+01 5.1606E-03 3.8695E-03 6.4610E-04 5.0457E-04 - 4.4668E+01 3.6664E-03 2.7344E-03 4.2996E-04 3.3790E-04 - 5.0119E+01 2.6005E-03 1.9257E-03 2.8596E-04 2.2538E-04 - 5.6234E+01 1.8430E-03 1.3542E-03 1.9019E-04 1.5013E-04 - 6.3096E+01 1.3032E-03 9.5439E-04 1.2662E-04 1.0006E-04 - 7.0795E+01 9.2241E-04 6.7230E-04 8.4226E-05 6.7273E-05 - 7.9433E+01 6.5228E-04 4.7260E-04 5.6008E-05 4.4815E-05 - 8.9125E+01 4.6066E-04 3.3191E-04 3.7651E-05 2.9809E-05 - 1.0000E+02 3.2389E-04 2.3154E-04 2.5116E-05 2.0228E-05 - 1.1220E+02 2.2794E-04 1.6181E-04 1.6797E-05 1.3587E-05 - 1.2589E+02 1.6041E-04 1.1304E-04 1.1245E-05 9.1355E-06 - 1.4125E+02 1.1271E-04 7.8980E-05 7.5387E-06 6.1547E-06 - 1.5849E+02 7.9082E-05 5.5031E-05 5.0669E-06 4.1363E-06 - 1.7783E+02 5.5481E-05 3.8303E-05 3.4124E-06 2.7905E-06 - 1.9953E+02 3.8835E-05 2.6641E-05 2.2906E-06 1.8881E-06 - 2.2387E+02 2.7182E-05 1.8552E-05 1.5510E-06 1.2624E-06 - 2.5119E+02 1.9030E-05 1.2883E-05 1.0489E-06 8.4693E-07 - 2.8184E+02 1.3264E-05 8.9180E-06 7.1166E-07 5.7110E-07 - 3.1623E+02 9.2814E-06 6.1845E-06 4.8148E-07 3.8928E-07 - 3.5481E+02 6.4672E-06 4.2787E-06 3.2321E-07 2.6124E-07 - 3.9811E+02 4.5103E-06 2.9643E-06 2.1791E-07 1.7621E-07 - 4.4668E+02 3.1396E-06 2.0480E-06 1.4818E-07 1.1905E-07 - 5.0119E+02 2.1819E-06 1.4130E-06 1.0059E-07 7.9887E-08 - 5.6234E+02 1.5226E-06 9.7889E-07 6.7999E-08 5.3772E-08 - 6.3096E+02 1.0539E-06 6.7228E-07 4.5816E-08 3.6209E-08 - 7.0795E+02 7.3054E-07 4.6272E-07 3.0778E-08 2.4485E-08 - 7.9433E+02 5.0538E-07 3.1832E-07 2.0772E-08 1.6394E-08 - 8.9125E+02 3.4951E-07 2.1825E-07 1.3968E-08 1.0833E-08 - 1.0000E+03 2.4208E-07 1.5000E-07 9.4340E-09 7.3219E-09 - 1.1220E+03 1.6571E-07 1.0178E-07 6.3747E-09 4.9584E-09 - 1.2589E+03 1.1348E-07 6.9399E-08 4.2837E-09 3.2948E-09 - 1.4125E+03 7.7534E-08 4.7241E-08 2.8387E-09 2.1569E-09 - 1.5849E+03 5.3130E-08 3.2078E-08 1.8915E-09 1.4382E-09 - 1.7783E+03 3.6230E-08 2.1682E-08 1.2722E-09 9.6138E-10 - 1.9953E+03 2.4650E-08 1.4686E-08 8.4313E-10 6.3852E-10 - 2.2387E+03 1.6740E-08 9.9257E-09 5.6333E-10 4.2584E-10 - 2.5119E+03 1.1312E-08 6.6783E-09 3.8318E-10 2.8315E-10 - 2.8184E+03 7.6122E-09 4.4748E-09 2.5158E-10 1.8824E-10 - 3.1623E+03 5.2603E-09 3.0649E-09 1.6587E-10 1.2265E-10 - 3.5481E+03 3.4557E-09 2.0042E-09 1.0927E-10 8.0679E-11 - 3.9811E+03 2.3182E-09 1.3406E-09 7.1976E-11 5.3332E-11 - 4.4668E+03 1.5533E-09 8.9457E-10 4.8237E-11 3.5077E-11 - 5.0119E+03 1.0388E-09 5.9511E-10 3.2089E-11 2.3382E-11 - 5.6234E+03 6.9144E-10 3.9432E-10 2.0932E-11 1.5278E-11 - 6.3096E+03 4.6081E-10 2.5974E-10 1.3730E-11 9.6856E-12 - 7.0795E+03 3.0639E-10 1.7149E-10 9.0772E-12 6.3401E-12 - 7.9433E+03 2.0255E-10 1.1302E-10 5.9291E-12 4.1384E-12 - 8.9125E+03 1.3399E-10 7.4280E-11 3.8972E-12 2.6849E-12 - 1.0000E+04 8.8897E-11 4.8741E-11 2.5053E-12 1.7766E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4761E+04 1.4944E+04 7.2471E+03 6.7567E+03 - 1.1220E-01 1.2700E+04 1.2842E+04 6.3100E+03 5.8346E+03 - 1.2589E-01 1.0888E+04 1.0967E+04 5.4348E+03 4.9718E+03 - 1.4125E-01 9.2738E+03 9.3115E+03 4.6434E+03 4.2037E+03 - 1.5849E-01 7.8304E+03 7.8446E+03 3.9259E+03 3.5235E+03 - 1.7783E-01 6.5262E+03 6.5213E+03 3.2935E+03 2.9276E+03 - 1.9953E-01 5.3722E+03 5.3641E+03 2.7449E+03 2.4133E+03 - 2.2387E-01 4.3822E+03 4.3736E+03 2.2722E+03 1.9764E+03 - 2.5119E-01 3.5414E+03 3.5298E+03 1.8648E+03 1.6032E+03 - 2.8184E-01 2.8358E+03 2.8239E+03 1.5103E+03 1.2878E+03 - 3.1623E-01 2.2554E+03 2.2453E+03 1.2139E+03 1.0260E+03 - 3.5481E-01 1.7812E+03 1.7727E+03 9.6861E+02 8.1088E+02 - 3.9811E-01 1.3957E+03 1.3869E+03 7.6314E+02 6.3685E+02 - 4.4668E-01 1.0883E+03 1.0798E+03 5.9893E+02 4.9737E+02 - 5.0119E-01 8.4417E+02 8.3531E+02 4.6834E+02 3.8526E+02 - 5.6234E-01 6.5046E+02 6.4114E+02 3.6284E+02 2.9605E+02 - 6.3096E-01 4.9992E+02 4.9121E+02 2.7922E+02 2.2667E+02 - 7.0795E-01 3.8264E+02 3.7529E+02 2.1368E+02 1.7269E+02 - 7.9433E-01 2.9118E+02 2.8451E+02 1.6317E+02 1.3129E+02 - 8.9125E-01 2.2157E+02 2.1578E+02 1.2346E+02 9.8948E+01 - 1.0000E+00 1.6684E+02 1.6215E+02 9.2493E+01 7.3884E+01 - 1.1220E+00 1.2597E+02 1.2178E+02 6.9260E+01 5.5105E+01 - 1.2589E+00 9.5120E+01 9.1248E+01 5.1637E+01 4.0927E+01 - 1.4125E+00 7.1302E+01 6.8113E+01 3.8254E+01 3.0187E+01 - 1.5849E+00 5.3245E+01 5.0488E+01 2.8248E+01 2.2227E+01 - 1.7783E+00 3.9714E+01 3.7267E+01 2.0776E+01 1.6298E+01 - 1.9953E+00 2.9487E+01 2.7449E+01 1.5181E+01 1.1843E+01 - 2.2387E+00 2.1805E+01 2.0142E+01 1.1033E+01 8.5471E+00 - 2.5119E+00 1.5966E+01 1.4715E+01 7.9782E+00 6.1585E+00 - 2.8184E+00 1.1649E+01 1.0709E+01 5.7285E+00 4.4045E+00 - 3.1623E+00 8.4947E+00 7.7245E+00 4.0567E+00 3.1025E+00 - 3.5481E+00 6.1869E+00 5.5859E+00 2.8698E+00 2.1872E+00 - 3.9811E+00 4.4908E+00 4.0228E+00 2.0170E+00 1.5312E+00 - 4.4668E+00 3.2478E+00 2.8862E+00 1.4151E+00 1.0691E+00 - 5.0119E+00 2.3443E+00 2.0684E+00 9.8693E-01 7.4638E-01 - 5.6234E+00 1.6884E+00 1.4745E+00 6.8211E-01 5.1312E-01 - 6.3096E+00 1.2117E+00 1.0505E+00 4.7103E-01 3.5050E-01 - 7.0795E+00 8.6773E-01 7.4661E-01 3.2534E-01 2.4087E-01 - 7.9433E+00 6.2232E-01 5.2890E-01 2.2239E-01 1.6623E-01 - 8.9125E+00 4.4621E-01 3.7405E-01 1.5072E-01 1.1365E-01 - 1.0000E+01 3.1917E-01 2.6682E-01 1.0280E-01 7.7531E-02 - 1.1220E+01 2.2807E-01 1.8922E-01 6.9593E-02 5.2550E-02 - 1.2589E+01 1.6262E-01 1.3446E-01 4.7155E-02 3.5621E-02 - 1.4125E+01 1.1577E-01 9.5140E-02 3.1941E-02 2.3789E-02 - 1.5849E+01 8.2909E-02 6.7275E-02 2.1423E-02 1.5941E-02 - 1.7783E+01 5.9455E-02 4.7574E-02 1.4303E-02 1.0769E-02 - 1.9953E+01 4.2306E-02 3.3589E-02 9.6069E-03 7.2488E-03 - 2.2387E+01 3.0144E-02 2.3794E-02 6.3961E-03 4.8353E-03 - 2.5119E+01 2.1529E-02 1.6917E-02 4.2655E-03 3.2614E-03 - 2.8184E+01 1.5378E-02 1.1952E-02 2.8730E-03 2.2084E-03 - 3.1623E+01 1.0917E-02 8.4790E-03 1.8955E-03 1.4614E-03 - 3.5481E+01 7.7767E-03 6.0015E-03 1.2628E-03 9.7464E-04 - 3.9811E+01 5.5364E-03 4.2446E-03 8.3849E-04 6.5123E-04 - 4.4668E+01 3.9389E-03 2.9997E-03 5.5801E-04 4.3579E-04 - 5.0119E+01 2.8034E-03 2.1193E-03 3.7114E-04 2.9088E-04 - 5.6234E+01 1.9915E-03 1.4951E-03 2.4671E-04 1.9327E-04 - 6.3096E+01 1.4108E-03 1.0529E-03 1.6420E-04 1.2884E-04 - 7.0795E+01 9.9955E-04 7.4281E-04 1.0901E-04 8.6611E-05 - 7.9433E+01 7.0763E-04 5.2224E-04 7.2323E-05 5.7957E-05 - 8.9125E+01 5.0139E-04 3.6615E-04 4.8049E-05 3.8468E-05 - 1.0000E+02 3.5321E-04 2.5695E-04 3.2018E-05 2.5662E-05 - 1.1220E+02 2.4918E-04 1.8012E-04 2.1340E-05 1.7176E-05 - 1.2589E+02 1.7567E-04 1.2605E-04 1.4282E-05 1.1477E-05 - 1.4125E+02 1.2365E-04 8.7992E-05 9.5202E-06 7.6907E-06 - 1.5849E+02 8.6967E-05 6.1426E-05 6.3597E-06 5.1604E-06 - 1.7783E+02 6.1069E-05 4.2936E-05 4.2652E-06 3.4540E-06 - 1.9953E+02 4.2833E-05 2.9936E-05 2.8509E-06 2.3322E-06 - 2.2387E+02 3.0078E-05 2.0833E-05 1.8986E-06 1.5678E-06 - 2.5119E+02 2.1094E-05 1.4477E-05 1.2888E-06 1.0387E-06 - 2.8184E+02 1.4747E-05 1.0080E-05 8.6471E-07 7.0415E-07 - 3.1623E+02 1.0323E-05 6.9941E-06 5.8091E-07 4.7275E-07 - 3.5481E+02 7.1977E-06 4.8533E-06 3.9106E-07 3.1861E-07 - 3.9811E+02 5.0252E-06 3.3612E-06 2.6527E-07 2.1521E-07 - 4.4668E+02 3.5110E-06 2.3252E-06 1.8017E-07 1.4484E-07 - 5.0119E+02 2.4488E-06 1.6068E-06 1.2084E-07 9.7250E-08 - 5.6234E+02 1.7073E-06 1.1136E-06 8.1653E-08 6.5351E-08 - 6.3096E+02 1.1869E-06 7.6651E-07 5.5155E-08 4.4110E-08 - 7.0795E+02 8.2579E-07 5.2856E-07 3.7121E-08 2.9585E-08 - 7.9433E+02 5.7263E-07 3.6400E-07 2.5129E-08 1.9642E-08 - 8.9125E+02 3.9661E-07 2.4976E-07 1.6993E-08 1.3257E-08 - 1.0000E+03 2.7510E-07 1.7194E-07 1.1351E-08 8.9477E-09 - 1.1220E+03 1.8905E-07 1.1760E-07 7.5980E-09 5.9993E-09 - 1.2589E+03 1.3022E-07 8.0602E-08 5.0853E-09 3.9906E-09 - 1.4125E+03 8.9566E-08 5.5121E-08 3.4642E-09 2.6758E-09 - 1.5849E+03 6.1475E-08 3.7539E-08 2.3434E-09 1.7964E-09 - 1.7783E+03 4.2150E-08 2.5585E-08 1.5498E-09 1.1788E-09 - 1.9953E+03 2.8846E-08 1.7356E-08 1.0403E-09 7.9253E-10 - 2.2387E+03 1.9629E-08 1.1746E-08 6.9357E-10 5.3167E-10 - 2.5119E+03 1.3414E-08 7.9493E-09 4.6318E-10 3.5106E-10 - 2.8184E+03 9.1037E-09 5.3392E-09 3.0375E-10 2.3212E-10 - 3.1623E+03 6.2583E-09 3.6667E-09 2.0292E-10 1.5446E-10 - 3.5481E+03 4.1475E-09 2.4181E-09 1.3651E-10 1.0101E-10 - 3.9811E+03 2.7964E-09 1.6164E-09 9.0769E-11 6.6186E-11 - 4.4668E+03 1.8789E-09 1.0776E-09 6.0494E-11 4.3477E-11 - 5.0119E+03 1.2563E-09 7.2132E-10 4.0113E-11 2.8638E-11 - 5.6234E+03 8.4173E-10 4.7968E-10 2.6208E-11 1.8843E-11 - 6.3096E+03 5.6245E-10 3.1784E-10 1.7282E-11 1.2422E-11 - 7.0795E+03 3.7501E-10 2.1118E-10 1.1354E-11 8.1780E-12 - 7.9433E+03 2.4958E-10 1.3943E-10 7.5472E-12 5.1716E-12 - 8.9125E+03 1.6598E-10 9.1470E-11 4.9580E-12 3.3844E-12 - 1.0000E+04 1.0982E-10 6.0507E-11 3.2142E-12 2.2949E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8119E+04 1.8359E+04 8.8683E+03 8.2741E+03 - 1.1220E-01 1.5401E+04 1.5565E+04 7.6553E+03 7.0784E+03 - 1.2589E-01 1.3049E+04 1.3137E+04 6.5192E+03 5.9682E+03 - 1.4125E-01 1.0982E+04 1.1020E+04 5.4950E+03 4.9954E+03 - 1.5849E-01 9.1563E+03 9.1582E+03 4.5994E+03 4.1419E+03 - 1.7783E-01 7.5425E+03 7.5191E+03 3.8177E+03 3.4006E+03 - 1.9953E-01 6.1434E+03 6.1142E+03 3.1491E+03 2.7765E+03 - 2.2387E-01 4.9524E+03 4.9198E+03 2.5784E+03 2.2559E+03 - 2.5119E-01 3.9499E+03 3.9241E+03 2.0916E+03 1.8121E+03 - 2.8184E-01 3.1238E+03 3.1113E+03 1.6809E+03 1.4404E+03 - 3.1623E-01 2.4557E+03 2.4511E+03 1.3383E+03 1.1356E+03 - 3.5481E-01 1.9202E+03 1.9125E+03 1.0589E+03 8.8770E+02 - 3.9811E-01 1.4902E+03 1.4796E+03 8.3131E+02 6.9089E+02 - 4.4668E-01 1.1535E+03 1.1422E+03 6.4764E+02 5.3525E+02 - 5.0119E-01 8.8991E+02 8.7793E+02 5.0189E+02 4.1223E+02 - 5.6234E-01 6.8250E+02 6.7207E+02 3.8769E+02 3.1683E+02 - 6.3096E-01 5.2239E+02 5.1318E+02 2.9703E+02 2.4273E+02 - 7.0795E-01 3.9736E+02 3.9069E+02 2.2662E+02 1.8440E+02 - 7.9433E-01 3.0189E+02 2.9533E+02 1.7239E+02 1.3892E+02 - 8.9125E-01 2.2900E+02 2.2340E+02 1.3020E+02 1.0490E+02 - 1.0000E+00 1.7331E+02 1.6829E+02 9.8784E+01 7.8984E+01 - 1.1220E+00 1.3107E+02 1.2688E+02 7.4338E+01 5.9264E+01 - 1.2589E+00 9.8589E+01 9.5482E+01 5.5658E+01 4.4410E+01 - 1.4125E+00 7.4212E+01 7.1347E+01 4.1657E+01 3.3123E+01 - 1.5849E+00 5.5688E+01 5.3152E+01 3.1071E+01 2.4563E+01 - 1.7783E+00 4.1619E+01 3.9500E+01 2.3021E+01 1.8036E+01 - 1.9953E+00 3.0930E+01 2.9323E+01 1.6975E+01 1.3145E+01 - 2.2387E+00 2.2872E+01 2.1620E+01 1.2398E+01 9.6194E+00 - 2.5119E+00 1.6846E+01 1.5794E+01 9.0390E+00 6.9982E+00 - 2.8184E+00 1.2351E+01 1.1510E+01 6.5698E+00 5.0409E+00 - 3.1623E+00 9.0611E+00 8.4005E+00 4.7348E+00 3.6255E+00 - 3.5481E+00 6.6092E+00 6.1082E+00 3.3794E+00 2.5752E+00 - 3.9811E+00 4.8065E+00 4.4095E+00 2.3984E+00 1.8263E+00 - 4.4668E+00 3.4883E+00 3.1811E+00 1.6975E+00 1.2829E+00 - 5.0119E+00 2.5210E+00 2.2911E+00 1.2023E+00 8.9871E-01 - 5.6234E+00 1.8129E+00 1.6367E+00 8.4025E-01 6.3213E-01 - 6.3096E+00 1.3032E+00 1.1735E+00 5.8689E-01 4.4102E-01 - 7.0795E+00 9.4132E-01 8.3393E-01 4.0766E-01 3.0442E-01 - 7.9433E+00 6.7506E-01 5.9142E-01 2.8160E-01 2.1105E-01 - 8.9125E+00 4.8147E-01 4.2376E-01 1.9437E-01 1.4636E-01 - 1.0000E+01 3.4479E-01 3.0018E-01 1.3311E-01 1.0003E-01 - 1.1220E+01 2.4646E-01 2.1305E-01 9.1181E-02 6.8226E-02 - 1.2589E+01 1.7558E-01 1.5076E-01 6.2217E-02 4.6628E-02 - 1.4125E+01 1.2567E-01 1.0680E-01 4.2452E-02 3.1624E-02 - 1.5849E+01 8.9899E-02 7.5724E-02 2.8841E-02 2.1348E-02 - 1.7783E+01 6.4073E-02 5.3699E-02 1.9307E-02 1.4407E-02 - 1.9953E+01 4.5746E-02 3.8228E-02 1.3038E-02 9.7175E-03 - 2.2387E+01 3.2569E-02 2.6928E-02 8.8389E-03 6.6450E-03 - 2.5119E+01 2.3224E-02 1.9058E-02 5.9375E-03 4.4944E-03 - 2.8184E+01 1.6540E-02 1.3480E-02 3.9719E-03 3.0124E-03 - 3.1623E+01 1.1871E-02 9.5373E-03 2.6468E-03 2.0196E-03 - 3.5481E+01 8.4672E-03 6.7523E-03 1.7662E-03 1.3567E-03 - 3.9811E+01 6.0387E-03 4.7769E-03 1.1779E-03 9.0827E-04 - 4.4668E+01 4.3053E-03 3.3772E-03 7.8470E-04 6.0743E-04 - 5.0119E+01 3.0656E-03 2.3878E-03 5.2252E-04 4.0662E-04 - 5.6234E+01 2.1802E-03 1.6868E-03 3.4711E-04 2.7052E-04 - 6.3096E+01 1.5517E-03 1.1884E-03 2.3052E-04 1.7956E-04 - 7.0795E+01 1.1020E-03 8.3892E-04 1.5346E-04 1.1977E-04 - 7.9433E+01 7.8152E-04 5.9146E-04 1.0238E-04 7.9833E-05 - 8.9125E+01 5.5431E-04 4.1686E-04 6.7590E-05 5.3263E-05 - 1.0000E+02 3.9306E-04 2.9321E-04 4.4804E-05 3.5518E-05 - 1.1220E+02 2.7817E-04 2.0575E-04 2.9753E-05 2.3688E-05 - 1.2589E+02 1.9646E-04 1.4429E-04 1.9732E-05 1.5798E-05 - 1.4125E+02 1.3866E-04 1.0114E-04 1.3081E-05 1.0483E-05 - 1.5849E+02 9.7762E-05 7.0756E-05 8.7213E-06 6.9852E-06 - 1.7783E+02 6.8939E-05 4.9423E-05 5.8153E-06 4.6625E-06 - 1.9953E+02 4.8494E-05 3.4502E-05 3.8767E-06 3.0986E-06 - 2.2387E+02 3.4029E-05 2.4079E-05 2.5801E-06 2.0703E-06 - 2.5119E+02 2.3925E-05 1.6743E-05 1.7243E-06 1.3939E-06 - 2.8184E+02 1.6791E-05 1.1678E-05 1.1463E-06 9.2932E-07 - 3.1623E+02 1.1770E-05 8.1373E-06 7.7018E-07 6.2057E-07 - 3.5481E+02 8.2334E-06 5.6450E-06 5.1620E-07 4.1558E-07 - 3.9811E+02 5.7623E-06 3.9244E-06 3.4551E-07 2.7962E-07 - 4.4668E+02 4.0311E-06 2.7202E-06 2.3177E-07 1.8767E-07 - 5.0119E+02 2.8144E-06 1.8846E-06 1.5568E-07 1.2577E-07 - 5.6234E+02 1.9693E-06 1.3083E-06 1.0511E-07 8.4756E-08 - 6.3096E+02 1.3716E-06 9.0420E-07 7.0789E-08 5.6891E-08 - 7.0795E+02 9.5555E-07 6.2500E-07 4.7537E-08 3.8289E-08 - 7.9433E+02 6.6486E-07 4.3099E-07 3.1901E-08 2.5685E-08 - 8.9125E+02 4.6263E-07 2.9690E-07 2.1501E-08 1.7112E-08 - 1.0000E+03 3.2200E-07 2.0536E-07 1.4601E-08 1.1538E-08 - 1.1220E+03 2.2258E-07 1.4103E-07 9.7995E-09 7.7384E-09 - 1.2589E+03 1.5392E-07 9.6852E-08 6.5914E-09 5.1618E-09 - 1.4125E+03 1.0632E-07 6.6437E-08 4.4314E-09 3.4712E-09 - 1.5849E+03 7.3294E-08 4.5521E-08 2.9872E-09 2.3071E-09 - 1.7783E+03 5.0454E-08 3.1060E-08 1.9911E-09 1.5383E-09 - 1.9953E+03 3.4797E-08 2.1206E-08 1.3378E-09 1.0414E-09 - 2.2387E+03 2.3838E-08 1.4429E-08 9.0409E-10 6.8862E-10 - 2.5119E+03 1.6291E-08 9.7941E-09 6.0195E-10 4.5048E-10 - 2.8184E+03 1.1138E-08 6.6263E-09 4.0192E-10 2.9968E-10 - 3.1623E+03 7.6924E-09 4.5522E-09 2.6445E-10 1.9965E-10 - 3.5481E+03 5.1440E-09 3.0332E-09 1.7627E-10 1.3203E-10 - 3.9811E+03 3.4799E-09 2.0430E-09 1.1664E-10 8.6955E-11 - 4.4668E+03 2.3519E-09 1.3732E-09 7.7586E-11 5.6623E-11 - 5.0119E+03 1.5890E-09 9.1916E-10 5.2275E-11 3.7955E-11 - 5.6234E+03 1.0701E-09 6.1466E-10 3.5168E-11 2.5339E-11 - 6.3096E+03 7.1902E-10 4.1074E-10 2.2893E-11 1.6342E-11 - 7.0795E+03 4.8145E-10 2.7305E-10 1.5138E-11 1.0639E-11 - 7.9433E+03 3.2150E-10 1.8103E-10 9.9660E-12 6.9995E-12 - 8.9125E+03 2.1457E-10 1.2000E-10 6.4996E-12 4.6758E-12 - 1.0000E+04 1.4293E-10 7.9493E-11 4.2883E-12 3.0439E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5426E+04 2.5756E+04 1.2357E+04 1.1599E+04 - 1.1220E-01 2.1312E+04 2.1522E+04 1.0539E+04 9.8217E+03 - 1.2589E-01 1.7787E+04 1.7910E+04 8.8666E+03 8.1946E+03 - 1.4125E-01 1.4748E+04 1.4778E+04 7.3744E+03 6.7511E+03 - 1.5849E-01 1.2102E+04 1.2097E+04 6.0821E+03 5.5133E+03 - 1.7783E-01 9.8195E+03 9.8078E+03 4.9869E+03 4.4646E+03 - 1.9953E-01 7.8781E+03 7.8524E+03 4.0637E+03 3.5951E+03 - 2.2387E-01 6.2457E+03 6.2222E+03 3.2745E+03 2.8741E+03 - 2.5119E-01 4.9006E+03 4.8745E+03 2.6176E+03 2.2661E+03 - 2.8184E-01 3.8106E+03 3.7910E+03 2.0754E+03 1.7752E+03 - 3.1623E-01 2.9405E+03 2.9322E+03 1.6285E+03 1.3831E+03 - 3.5481E-01 2.2635E+03 2.2484E+03 1.2681E+03 1.0669E+03 - 3.9811E-01 1.7303E+03 1.7183E+03 9.7980E+02 8.2032E+02 - 4.4668E-01 1.3142E+03 1.3068E+03 7.5284E+02 6.2638E+02 - 5.0119E-01 1.0008E+03 9.8900E+02 5.7315E+02 4.7654E+02 - 5.6234E-01 7.5738E+02 7.4701E+02 4.3801E+02 3.6156E+02 - 6.3096E-01 5.7091E+02 5.6317E+02 3.3275E+02 2.7134E+02 - 7.0795E-01 4.2953E+02 4.2274E+02 2.5123E+02 2.0346E+02 - 7.9433E-01 3.2464E+02 3.1731E+02 1.8993E+02 1.5361E+02 - 8.9125E-01 2.4503E+02 2.3941E+02 1.4234E+02 1.1558E+02 - 1.0000E+00 1.8401E+02 1.7911E+02 1.0742E+02 8.6331E+01 - 1.1220E+00 1.3839E+02 1.3418E+02 8.0543E+01 6.4612E+01 - 1.2589E+00 1.0399E+02 1.0059E+02 6.0467E+01 4.8242E+01 - 1.4125E+00 7.8238E+01 7.5167E+01 4.5191E+01 3.6001E+01 - 1.5849E+00 5.8702E+01 5.6123E+01 3.3579E+01 2.6710E+01 - 1.7783E+00 4.3889E+01 4.1878E+01 2.5034E+01 1.9766E+01 - 1.9953E+00 3.2599E+01 3.1042E+01 1.8606E+01 1.4692E+01 - 2.2387E+00 2.4098E+01 2.2941E+01 1.3690E+01 1.0855E+01 - 2.5119E+00 1.7887E+01 1.6901E+01 1.0081E+01 7.9143E+00 - 2.8184E+00 1.3178E+01 1.2433E+01 7.4173E+00 5.7815E+00 - 3.1623E+00 9.6705E+00 9.1063E+00 5.4230E+00 4.1822E+00 - 3.5481E+00 7.0652E+00 6.6488E+00 3.9433E+00 2.9989E+00 - 3.9811E+00 5.1380E+00 4.8495E+00 2.8429E+00 2.1538E+00 - 4.4668E+00 3.7485E+00 3.5239E+00 2.0384E+00 1.5448E+00 - 5.0119E+00 2.7277E+00 2.5504E+00 1.4605E+00 1.0990E+00 - 5.6234E+00 1.9682E+00 1.8383E+00 1.0431E+00 7.7981E-01 - 6.3096E+00 1.4163E+00 1.3201E+00 7.3928E-01 5.5198E-01 - 7.0795E+00 1.0268E+00 9.4717E-01 5.1873E-01 3.8628E-01 - 7.9433E+00 7.3862E-01 6.7670E-01 3.6410E-01 2.6955E-01 - 8.9125E+00 5.2915E-01 4.8284E-01 2.5529E-01 1.9078E-01 - 1.0000E+01 3.8197E-01 3.4727E-01 1.7923E-01 1.3334E-01 - 1.1220E+01 2.7329E-01 2.4728E-01 1.2376E-01 9.2160E-02 - 1.2589E+01 1.9535E-01 1.7602E-01 8.5409E-02 6.3889E-02 - 1.4125E+01 1.3984E-01 1.2517E-01 5.9207E-02 4.4127E-02 - 1.5849E+01 1.0043E-01 8.8601E-02 4.0630E-02 3.0514E-02 - 1.7783E+01 7.1773E-02 6.2842E-02 2.7730E-02 2.0944E-02 - 1.9953E+01 5.1219E-02 4.4692E-02 1.8939E-02 1.4250E-02 - 2.2387E+01 3.6874E-02 3.1631E-02 1.3015E-02 9.7855E-03 - 2.5119E+01 2.6333E-02 2.2536E-02 8.9307E-03 6.7561E-03 - 2.8184E+01 1.8725E-02 1.6041E-02 5.9631E-03 4.6070E-03 - 3.1623E+01 1.3356E-02 1.1276E-02 4.0582E-03 3.0903E-03 - 3.5481E+01 9.5337E-03 7.9882E-03 2.7355E-03 2.0920E-03 - 3.9811E+01 6.8086E-03 5.6513E-03 1.8414E-03 1.4089E-03 - 4.4668E+01 4.8574E-03 3.9973E-03 1.2338E-03 9.4804E-04 - 5.0119E+01 3.4629E-03 2.8264E-03 8.2713E-04 6.3745E-04 - 5.6234E+01 2.4661E-03 1.9965E-03 5.5428E-04 4.2740E-04 - 6.3096E+01 1.7582E-03 1.4127E-03 3.6877E-04 2.8599E-04 - 7.0795E+01 1.2547E-03 9.9878E-04 2.4571E-04 1.9185E-04 - 7.9433E+01 8.9288E-04 7.0451E-04 1.6385E-04 1.2820E-04 - 8.9125E+01 6.3388E-04 4.9648E-04 1.0872E-04 8.5147E-05 - 1.0000E+02 4.5108E-04 3.4940E-04 7.2443E-05 5.6693E-05 - 1.1220E+02 3.1985E-04 2.4594E-04 4.8085E-05 3.7747E-05 - 1.2589E+02 2.2684E-04 1.7281E-04 3.1813E-05 2.5109E-05 - 1.4125E+02 1.6063E-04 1.2138E-04 2.1032E-05 1.6684E-05 - 1.5849E+02 1.1358E-04 8.5150E-05 1.3931E-05 1.1101E-05 - 1.7783E+02 8.0288E-05 5.9742E-05 9.1973E-06 7.3837E-06 - 1.9953E+02 5.6658E-05 4.1811E-05 6.0867E-06 4.8802E-06 - 2.2387E+02 3.9974E-05 2.9211E-05 4.0401E-06 3.2286E-06 - 2.5119E+02 2.8158E-05 2.0430E-05 2.6839E-06 2.1469E-06 - 2.8184E+02 1.9798E-05 1.4276E-05 1.7825E-06 1.4149E-06 - 3.1623E+02 1.3927E-05 9.9533E-06 1.1785E-06 9.4469E-07 - 3.5481E+02 9.7742E-06 6.9235E-06 7.8135E-07 6.2899E-07 - 3.9811E+02 6.8599E-06 4.8162E-06 5.1980E-07 4.1743E-07 - 4.4668E+02 4.8092E-06 3.3506E-06 3.4642E-07 2.7809E-07 - 5.0119E+02 3.3674E-06 2.3266E-06 2.2969E-07 1.8491E-07 - 5.6234E+02 2.3604E-06 1.6138E-06 1.5344E-07 1.2341E-07 - 6.3096E+02 1.6483E-06 1.1183E-06 1.0271E-07 8.2484E-08 - 7.0795E+02 1.1513E-06 7.7489E-07 6.8874E-08 5.5098E-08 - 7.9433E+02 8.0405E-07 5.3574E-07 4.5997E-08 3.6908E-08 - 8.9125E+02 5.6092E-07 3.7045E-07 3.0691E-08 2.4544E-08 - 1.0000E+03 3.9099E-07 2.5595E-07 2.0515E-08 1.6366E-08 - 1.1220E+03 2.7153E-07 1.7635E-07 1.3699E-08 1.0961E-08 - 1.2589E+03 1.8869E-07 1.2151E-07 9.2023E-09 7.3678E-09 - 1.4125E+03 1.3109E-07 8.3815E-08 6.2085E-09 4.9128E-09 - 1.5849E+03 9.1038E-08 5.7636E-08 4.1468E-09 3.2803E-09 - 1.7783E+03 6.2953E-08 3.9556E-08 2.7808E-09 2.1919E-09 - 1.9953E+03 4.3592E-08 2.7098E-08 1.8840E-09 1.4539E-09 - 2.2387E+03 3.0056E-08 1.8530E-08 1.2437E-09 9.6547E-10 - 2.5119E+03 2.0679E-08 1.2661E-08 8.2979E-10 6.4827E-10 - 2.8184E+03 1.4202E-08 8.6087E-09 5.5416E-10 4.3038E-10 - 3.1623E+03 9.8487E-09 5.9489E-09 3.7626E-10 2.8614E-10 - 3.5481E+03 6.6791E-09 3.9983E-09 2.5322E-10 1.9074E-10 - 3.9811E+03 4.5588E-09 2.7088E-09 1.6782E-10 1.2621E-10 - 4.4668E+03 3.1050E-09 1.8300E-09 1.1072E-10 8.2857E-11 - 5.0119E+03 2.1130E-09 1.2321E-09 7.3790E-11 5.5077E-11 - 5.6234E+03 1.4296E-09 8.3039E-10 4.9078E-11 3.6078E-11 - 6.3096E+03 9.7039E-10 5.6000E-10 3.2799E-11 2.3878E-11 - 7.0795E+03 6.5642E-10 3.7582E-10 2.1780E-11 1.5952E-11 - 7.9433E+03 4.4146E-10 2.5116E-10 1.4184E-11 1.0383E-11 - 8.9125E+03 2.9573E-10 1.6722E-10 9.3202E-12 6.6850E-12 - 1.0000E+04 1.9830E-10 1.1098E-10 6.2317E-12 4.4223E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3206E+04 4.4032E+04 2.0746E+04 1.9814E+04 - 1.1220E-01 3.5646E+04 3.6207E+04 1.7380E+04 1.6493E+04 - 1.2589E-01 2.9308E+04 2.9548E+04 1.4440E+04 1.3541E+04 - 1.4125E-01 2.3893E+04 2.3938E+04 1.1888E+04 1.0952E+04 - 1.5849E-01 1.9258E+04 1.9227E+04 9.6352E+03 8.8031E+03 - 1.7783E-01 1.5318E+04 1.5290E+04 7.7554E+03 7.0233E+03 - 1.9953E-01 1.2043E+04 1.2003E+04 6.2130E+03 5.5446E+03 - 2.2387E-01 9.3387E+03 9.3053E+03 4.9258E+03 4.3352E+03 - 2.5119E-01 7.1731E+03 7.1426E+03 3.8625E+03 3.3678E+03 - 2.8184E-01 5.4645E+03 5.4306E+03 3.0042E+03 2.5950E+03 - 3.1623E-01 4.1184E+03 4.0965E+03 2.3074E+03 1.9740E+03 - 3.5481E-01 3.1088E+03 3.0661E+03 1.7586E+03 1.4943E+03 - 3.9811E-01 2.3390E+03 2.2932E+03 1.3320E+03 1.1225E+03 - 4.4668E-01 1.7367E+03 1.7106E+03 1.0042E+03 8.3711E+02 - 5.0119E-01 1.2773E+03 1.2723E+03 7.5307E+02 6.2356E+02 - 5.6234E-01 9.4202E+02 9.3742E+02 5.5718E+02 4.6350E+02 - 6.3096E-01 6.9880E+02 6.8487E+02 4.1656E+02 3.4336E+02 - 7.0795E-01 5.1543E+02 5.0444E+02 3.0998E+02 2.5332E+02 - 7.9433E-01 3.8114E+02 3.7515E+02 2.2910E+02 1.8461E+02 - 8.9125E-01 2.8356E+02 2.7963E+02 1.7008E+02 1.3401E+02 - 1.0000E+00 2.1058E+02 2.0498E+02 1.2536E+02 1.0022E+02 - 1.1220E+00 1.5678E+02 1.5087E+02 9.3192E+01 7.3855E+01 - 1.2589E+00 1.1705E+02 1.1139E+02 6.8967E+01 5.4573E+01 - 1.4125E+00 8.6397E+01 8.2624E+01 5.0778E+01 4.0701E+01 - 1.5849E+00 6.3689E+01 6.1157E+01 3.7532E+01 3.0130E+01 - 1.7783E+00 4.7296E+01 4.5044E+01 2.7725E+01 2.2096E+01 - 1.9953E+00 3.5127E+01 3.3157E+01 2.0505E+01 1.6158E+01 - 2.2387E+00 2.5919E+01 2.4732E+01 1.5111E+01 1.1876E+01 - 2.5119E+00 1.8966E+01 1.8370E+01 1.1164E+01 8.8290E+00 - 2.8184E+00 1.4133E+01 1.3358E+01 8.1890E+00 6.4352E+00 - 3.1623E+00 1.0263E+01 9.7798E+00 6.0749E+00 4.6862E+00 - 3.5481E+00 7.5356E+00 7.1917E+00 4.4415E+00 3.4001E+00 - 3.9811E+00 5.5447E+00 5.2575E+00 3.2159E+00 2.4675E+00 - 4.4668E+00 4.0474E+00 3.8295E+00 2.3516E+00 1.7973E+00 - 5.0119E+00 2.9398E+00 2.7959E+00 1.7035E+00 1.2907E+00 - 5.6234E+00 2.1416E+00 2.0403E+00 1.2254E+00 9.3267E-01 - 6.3096E+00 1.5605E+00 1.4814E+00 8.9868E-01 6.7544E-01 - 7.0795E+00 1.1205E+00 1.0723E+00 6.4590E-01 4.7918E-01 - 7.9433E+00 8.1108E-01 7.6997E-01 4.6098E-01 3.3871E-01 - 8.9125E+00 5.8765E-01 5.5452E-01 3.2637E-01 2.4168E-01 - 1.0000E+01 4.2152E-01 4.0023E-01 2.2957E-01 1.7260E-01 - 1.1220E+01 3.0229E-01 2.8657E-01 1.6359E-01 1.2210E-01 - 1.2589E+01 2.1790E-01 2.0511E-01 1.1569E-01 8.5828E-02 - 1.4125E+01 1.5721E-01 1.4791E-01 8.0895E-02 6.0204E-02 - 1.5849E+01 1.1338E-01 1.0655E-01 5.6894E-02 4.1915E-02 - 1.7783E+01 8.2000E-02 7.5615E-02 4.0039E-02 2.9240E-02 - 1.9953E+01 5.8607E-02 5.3830E-02 2.7498E-02 2.1024E-02 - 2.2387E+01 4.2077E-02 3.8416E-02 1.9335E-02 1.4812E-02 - 2.5119E+01 3.0243E-02 2.7362E-02 1.3411E-02 1.0161E-02 - 2.8184E+01 2.1634E-02 1.9324E-02 9.1859E-03 6.9348E-03 - 3.1623E+01 1.5673E-02 1.4133E-02 6.6037E-03 5.0091E-03 - 3.5481E+01 1.1218E-02 1.0046E-02 4.5460E-03 3.4574E-03 - 3.9811E+01 8.0303E-03 7.1332E-03 3.1218E-03 2.3817E-03 - 4.4668E+01 5.7421E-03 5.0555E-03 2.1359E-03 1.6321E-03 - 5.0119E+01 4.1064E-03 3.5807E-03 1.4543E-03 1.1152E-03 - 5.6234E+01 2.9342E-03 2.5359E-03 9.8913E-04 7.6014E-04 - 6.3096E+01 2.0920E-03 1.7937E-03 6.7088E-04 5.1739E-04 - 7.0795E+01 1.4894E-03 1.2670E-03 4.5391E-04 3.5099E-04 - 7.9433E+01 1.0627E-03 8.9412E-04 3.0613E-04 2.3699E-04 - 8.9125E+01 7.5765E-04 6.3051E-04 2.0569E-04 1.6010E-04 - 1.0000E+02 5.3939E-04 4.4550E-04 1.3827E-04 1.0745E-04 - 1.1220E+02 3.8371E-04 3.1401E-04 9.2462E-05 7.1908E-05 - 1.2589E+02 2.7261E-04 2.2094E-04 6.1722E-05 4.8122E-05 - 1.4125E+02 1.9347E-04 1.5519E-04 4.1178E-05 3.2119E-05 - 1.5849E+02 1.3717E-04 1.0898E-04 2.7373E-05 2.1334E-05 - 1.7783E+02 9.7140E-05 7.6364E-05 1.8129E-05 1.4206E-05 - 1.9953E+02 6.8634E-05 5.3458E-05 1.2016E-05 9.4359E-06 - 2.2387E+02 4.8499E-05 3.7434E-05 7.9391E-06 6.2086E-06 - 2.5119E+02 3.4255E-05 2.6166E-05 5.2202E-06 4.0970E-06 - 2.8184E+02 2.4157E-05 1.8240E-05 3.4460E-06 2.7222E-06 - 3.1623E+02 1.7011E-05 1.2759E-05 2.2716E-06 1.7972E-06 - 3.5481E+02 1.1963E-05 8.8950E-06 1.4926E-06 1.1854E-06 - 3.9811E+02 8.4066E-06 6.1855E-06 9.8099E-07 7.8027E-07 - 4.4668E+02 5.9108E-06 4.2974E-06 6.4431E-07 5.1162E-07 - 5.0119E+02 4.1427E-06 2.9873E-06 4.2339E-07 3.3735E-07 - 5.6234E+02 2.9026E-06 2.0754E-06 2.7920E-07 2.2157E-07 - 6.3096E+02 2.0302E-06 1.4377E-06 1.8358E-07 1.4575E-07 - 7.0795E+02 1.4205E-06 9.9617E-07 1.2062E-07 9.5980E-08 - 7.9433E+02 9.9396E-07 6.8968E-07 7.9226E-08 6.3116E-08 - 8.9125E+02 6.9445E-07 4.7738E-07 5.2353E-08 4.1585E-08 - 1.0000E+03 4.8436E-07 3.2946E-07 3.4565E-08 2.7500E-08 - 1.1220E+03 3.3752E-07 2.2712E-07 2.2916E-08 1.8138E-08 - 1.2589E+03 2.3519E-07 1.5689E-07 1.5155E-08 1.1982E-08 - 1.4125E+03 1.6356E-07 1.0816E-07 9.9553E-09 7.9010E-09 - 1.5849E+03 1.1371E-07 7.4500E-08 6.5734E-09 5.2358E-09 - 1.7783E+03 7.9206E-08 5.1324E-08 4.3981E-09 3.4616E-09 - 1.9953E+03 5.5094E-08 3.5356E-08 2.9348E-09 2.2841E-09 - 2.2387E+03 3.8146E-08 2.4241E-08 1.9353E-09 1.5076E-09 - 2.5119E+03 2.6435E-08 1.6601E-08 1.2826E-09 9.9828E-10 - 2.8184E+03 1.8286E-08 1.1358E-08 8.5781E-10 6.6489E-10 - 3.1623E+03 1.2698E-08 7.8367E-09 5.7313E-10 4.4105E-10 - 3.5481E+03 8.7016E-09 5.3230E-09 3.8055E-10 2.9054E-10 - 3.9811E+03 5.9824E-09 3.6304E-09 2.5259E-10 1.9202E-10 - 4.4668E+03 4.0986E-09 2.4672E-09 1.6665E-10 1.2677E-10 - 5.0119E+03 2.8035E-09 1.6742E-09 1.1157E-10 8.3157E-11 - 5.6234E+03 1.9171E-09 1.1360E-09 7.4202E-11 5.4775E-11 - 6.3096E+03 1.3115E-09 7.6840E-10 4.9070E-11 3.6507E-11 - 7.0795E+03 8.9258E-10 5.1929E-10 3.2554E-11 2.4057E-11 - 7.9433E+03 6.0589E-10 3.5022E-10 2.1188E-11 1.5745E-11 - 8.9125E+03 4.1128E-10 2.3427E-10 1.4098E-11 1.0284E-11 - 1.0000E+04 2.7774E-10 1.5649E-10 9.4475E-12 6.7039E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3646E+04 4.4345E+04 2.0931E+04 1.9907E+04 - 1.1220E-01 3.5931E+04 3.6462E+04 1.7604E+04 1.6579E+04 - 1.2589E-01 2.9478E+04 2.9759E+04 1.4568E+04 1.3597E+04 - 1.4125E-01 2.4045E+04 2.4149E+04 1.1980E+04 1.1048E+04 - 1.5849E-01 1.9396E+04 1.9421E+04 9.7420E+03 8.8839E+03 - 1.7783E-01 1.5440E+04 1.5416E+04 7.8316E+03 7.0774E+03 - 1.9953E-01 1.2126E+04 1.2088E+04 6.2586E+03 5.5996E+03 - 2.2387E-01 9.4129E+03 9.3924E+03 4.9632E+03 4.3745E+03 - 2.5119E-01 7.2290E+03 7.2199E+03 3.9204E+03 3.3919E+03 - 2.8184E-01 5.5066E+03 5.4776E+03 3.0528E+03 2.5993E+03 - 3.1623E-01 4.1703E+03 4.1404E+03 2.3400E+03 1.9756E+03 - 3.5481E-01 3.1403E+03 3.1154E+03 1.7885E+03 1.5038E+03 - 3.9811E-01 2.3509E+03 2.3270E+03 1.3578E+03 1.1341E+03 - 4.4668E-01 1.7449E+03 1.7293E+03 1.0224E+03 8.4642E+02 - 5.0119E-01 1.2880E+03 1.2832E+03 7.6513E+02 6.2967E+02 - 5.6234E-01 9.5439E+02 9.4856E+02 5.6536E+02 4.6731E+02 - 6.3096E-01 7.0582E+02 6.9819E+02 4.1908E+02 3.4404E+02 - 7.0795E-01 5.2084E+02 5.1552E+02 3.1394E+02 2.5246E+02 - 7.9433E-01 3.8748E+02 3.8111E+02 2.3326E+02 1.8725E+02 - 8.9125E-01 2.8666E+02 2.8200E+02 1.7411E+02 1.3702E+02 - 1.0000E+00 2.1300E+02 2.0650E+02 1.2702E+02 1.0117E+02 - 1.1220E+00 1.5766E+02 1.5312E+02 9.3591E+01 7.4882E+01 - 1.2589E+00 1.1719E+02 1.1259E+02 6.9643E+01 5.5166E+01 - 1.4125E+00 8.7044E+01 8.2976E+01 5.1329E+01 4.0558E+01 - 1.5849E+00 6.3807E+01 6.1898E+01 3.8009E+01 2.9938E+01 - 1.7783E+00 4.7242E+01 4.5587E+01 2.8199E+01 2.2582E+01 - 1.9953E+00 3.5298E+01 3.3497E+01 2.0751E+01 1.6458E+01 - 2.2387E+00 2.6175E+01 2.4879E+01 1.5162E+01 1.1878E+01 - 2.5119E+00 1.9134E+01 1.8340E+01 1.1166E+01 8.7948E+00 - 2.8184E+00 1.4077E+01 1.3310E+01 8.2864E+00 6.4858E+00 - 3.1623E+00 1.0289E+01 9.7750E+00 6.0975E+00 4.7078E+00 - 3.5481E+00 7.5511E+00 7.1716E+00 4.4492E+00 3.4335E+00 - 3.9811E+00 5.5480E+00 5.2590E+00 3.2327E+00 2.4898E+00 - 4.4668E+00 4.0451E+00 3.8683E+00 2.3616E+00 1.8084E+00 - 5.0119E+00 2.9493E+00 2.8151E+00 1.7139E+00 1.3005E+00 - 5.6234E+00 2.1454E+00 2.0427E+00 1.2265E+00 9.3111E-01 - 6.3096E+00 1.5581E+00 1.4778E+00 8.8924E-01 6.7210E-01 - 7.0795E+00 1.1161E+00 1.0679E+00 6.4393E-01 4.8116E-01 - 7.9433E+00 8.1531E-01 7.7329E-01 4.5888E-01 3.4332E-01 - 8.9125E+00 6.0162E-01 5.6114E-01 3.2811E-01 2.4914E-01 - 1.0000E+01 4.2526E-01 4.0358E-01 2.3321E-01 1.7478E-01 - 1.1220E+01 3.0593E-01 2.8925E-01 1.6618E-01 1.2476E-01 - 1.2589E+01 2.2100E-01 2.0702E-01 1.1743E-01 8.8196E-02 - 1.4125E+01 1.5932E-01 1.4903E-01 8.2680E-02 6.1624E-02 - 1.5849E+01 1.1508E-01 1.0764E-01 5.8930E-02 4.3036E-02 - 1.7783E+01 8.2893E-02 7.7100E-02 4.1240E-02 3.0488E-02 - 1.9953E+01 5.9539E-02 5.4895E-02 2.8152E-02 2.1708E-02 - 2.2387E+01 4.2942E-02 3.9194E-02 1.9904E-02 1.5051E-02 - 2.5119E+01 3.0409E-02 2.8007E-02 1.3742E-02 1.0546E-02 - 2.8184E+01 2.1835E-02 1.9940E-02 9.5009E-03 7.2934E-03 - 3.1623E+01 1.5857E-02 1.4367E-02 6.8280E-03 5.1899E-03 - 3.5481E+01 1.1362E-02 1.0215E-02 4.7134E-03 3.5917E-03 - 3.9811E+01 8.1368E-03 7.2593E-03 3.2493E-03 2.4757E-03 - 4.4668E+01 5.8215E-03 5.1545E-03 2.2298E-03 1.7056E-03 - 5.0119E+01 4.1621E-03 3.6558E-03 1.5242E-03 1.1717E-03 - 5.6234E+01 2.9759E-03 2.5913E-03 1.0405E-03 8.0160E-04 - 6.3096E+01 2.1259E-03 1.8329E-03 7.0951E-04 5.4819E-04 - 7.0795E+01 1.5160E-03 1.2956E-03 4.8281E-04 3.7341E-04 - 7.9433E+01 1.0813E-03 9.1510E-04 3.2661E-04 2.5269E-04 - 8.9125E+01 7.7064E-04 6.4589E-04 2.2044E-04 1.7044E-04 - 1.0000E+02 5.4739E-04 4.5592E-04 1.4813E-04 1.1520E-04 - 1.1220E+02 3.8902E-04 3.2116E-04 9.9454E-05 7.7482E-05 - 1.2589E+02 2.7643E-04 2.2602E-04 6.6600E-05 5.1971E-05 - 1.4125E+02 1.9623E-04 1.5878E-04 4.4449E-05 3.4805E-05 - 1.5849E+02 1.3897E-04 1.1135E-04 2.9605E-05 2.3204E-05 - 1.7783E+02 9.8343E-05 7.8008E-05 1.9688E-05 1.5408E-05 - 1.9953E+02 6.9578E-05 5.4562E-05 1.3059E-05 1.0229E-05 - 2.2387E+02 4.9163E-05 3.8162E-05 8.6382E-06 6.7943E-06 - 2.5119E+02 3.4644E-05 2.6693E-05 5.7012E-06 4.4783E-06 - 2.8184E+02 2.4385E-05 1.8650E-05 3.7690E-06 2.9448E-06 - 3.1623E+02 1.7184E-05 1.2988E-05 2.4768E-06 1.9531E-06 - 3.5481E+02 1.2075E-05 9.0386E-06 1.6275E-06 1.2848E-06 - 3.9811E+02 8.4834E-06 6.2834E-06 1.0710E-06 8.4553E-07 - 4.4668E+02 5.9539E-06 4.3589E-06 7.0371E-07 5.5459E-07 - 5.0119E+02 4.1699E-06 3.0216E-06 4.6116E-07 3.6482E-07 - 5.6234E+02 2.9256E-06 2.1006E-06 3.0271E-07 2.3976E-07 - 6.3096E+02 2.0422E-06 1.4545E-06 1.9800E-07 1.5708E-07 - 7.0795E+02 1.4269E-06 1.0061E-06 1.2962E-07 1.0305E-07 - 7.9433E+02 9.9868E-07 6.9563E-07 8.5469E-08 6.7840E-08 - 8.9125E+02 6.9715E-07 4.8021E-07 5.6016E-08 4.4426E-08 - 1.0000E+03 4.8630E-07 3.3145E-07 3.6718E-08 2.9067E-08 - 1.1220E+03 3.3847E-07 2.2869E-07 2.4200E-08 1.9085E-08 - 1.2589E+03 2.3582E-07 1.5765E-07 1.5855E-08 1.2598E-08 - 1.4125E+03 1.6409E-07 1.0846E-07 1.0430E-08 8.3151E-09 - 1.5849E+03 1.1415E-07 7.4803E-08 6.8988E-09 5.4836E-09 - 1.7783E+03 7.9281E-08 5.1614E-08 4.5648E-09 3.5991E-09 - 1.9953E+03 5.5166E-08 3.5428E-08 3.0280E-09 2.3892E-09 - 2.2387E+03 3.8260E-08 2.4353E-08 2.0159E-09 1.5780E-09 - 2.5119E+03 2.6482E-08 1.6680E-08 1.3433E-09 1.0383E-09 - 2.8184E+03 1.8277E-08 1.1391E-08 8.8899E-10 6.8662E-10 - 3.1623E+03 1.2693E-08 7.8497E-09 5.8492E-10 4.4967E-10 - 3.5481E+03 8.7013E-09 5.3340E-09 3.9025E-10 2.9687E-10 - 3.9811E+03 5.9716E-09 3.6291E-09 2.5866E-10 1.9733E-10 - 4.4668E+03 4.0965E-09 2.4684E-09 1.7019E-10 1.2983E-10 - 5.0119E+03 2.8164E-09 1.6803E-09 1.1221E-10 8.5079E-11 - 5.6234E+03 1.9280E-09 1.1390E-09 7.4200E-11 5.5829E-11 - 6.3096E+03 1.3139E-09 7.6939E-10 4.9922E-11 3.6609E-11 - 7.0795E+03 8.9394E-10 5.1983E-10 3.2742E-11 2.4019E-11 - 7.9433E+03 6.0766E-10 3.5048E-10 2.1677E-11 1.5704E-11 - 8.9125E+03 4.1158E-10 2.3518E-10 1.4355E-11 1.0386E-11 - 1.0000E+04 2.7808E-10 1.5732E-10 9.4203E-12 6.8698E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5620E+04 2.5990E+04 1.2475E+04 1.1686E+04 - 1.1220E-01 2.1499E+04 2.1765E+04 1.0666E+04 9.9023E+03 - 1.2589E-01 1.7975E+04 1.8122E+04 9.0138E+03 8.2706E+03 - 1.4125E-01 1.4948E+04 1.4994E+04 7.5024E+03 6.8211E+03 - 1.5849E-01 1.2282E+04 1.2287E+04 6.2040E+03 5.5839E+03 - 1.7783E-01 9.9590E+03 9.9663E+03 5.0939E+03 4.5275E+03 - 1.9953E-01 7.9932E+03 7.9884E+03 4.1474E+03 3.6381E+03 - 2.2387E-01 6.3443E+03 6.3292E+03 3.3509E+03 2.9139E+03 - 2.5119E-01 4.9827E+03 4.9645E+03 2.6759E+03 2.3080E+03 - 2.8184E-01 3.8832E+03 3.8645E+03 2.1228E+03 1.8067E+03 - 3.1623E-01 2.9987E+03 2.9894E+03 1.6678E+03 1.4081E+03 - 3.5481E-01 2.2990E+03 2.2958E+03 1.2958E+03 1.0869E+03 - 3.9811E-01 1.7625E+03 1.7516E+03 1.0017E+03 8.3034E+02 - 4.4668E-01 1.3428E+03 1.3333E+03 7.7202E+02 6.3400E+02 - 5.0119E-01 1.0163E+03 1.0112E+03 5.9125E+02 4.8240E+02 - 5.6234E-01 7.7030E+02 7.6173E+02 4.5081E+02 3.6582E+02 - 6.3096E-01 5.8134E+02 5.7313E+02 3.4193E+02 2.7699E+02 - 7.0795E-01 4.3717E+02 4.3078E+02 2.5807E+02 2.0838E+02 - 7.9433E-01 3.2876E+02 3.2340E+02 1.9427E+02 1.5627E+02 - 8.9125E-01 2.4722E+02 2.4272E+02 1.4665E+02 1.1730E+02 - 1.0000E+00 1.8629E+02 1.8193E+02 1.0976E+02 8.7455E+01 - 1.1220E+00 1.3982E+02 1.3643E+02 8.2329E+01 6.5446E+01 - 1.2589E+00 1.0508E+02 1.0203E+02 6.1583E+01 4.9009E+01 - 1.4125E+00 7.8942E+01 7.6039E+01 4.6023E+01 3.6499E+01 - 1.5849E+00 5.9051E+01 5.6611E+01 3.4375E+01 2.7220E+01 - 1.7783E+00 4.4017E+01 4.2224E+01 2.5620E+01 2.0122E+01 - 1.9953E+00 3.2750E+01 3.1343E+01 1.9007E+01 1.4806E+01 - 2.2387E+00 2.4281E+01 2.3244E+01 1.4043E+01 1.0950E+01 - 2.5119E+00 1.7926E+01 1.7180E+01 1.0325E+01 8.0174E+00 - 2.8184E+00 1.3203E+01 1.2661E+01 7.5310E+00 5.8098E+00 - 3.1623E+00 9.7219E+00 9.2039E+00 5.4939E+00 4.2373E+00 - 3.5481E+00 7.1188E+00 6.7085E+00 3.9966E+00 3.0546E+00 - 3.9811E+00 5.1900E+00 4.8772E+00 2.8883E+00 2.1971E+00 - 4.4668E+00 3.7845E+00 3.5328E+00 2.0803E+00 1.5734E+00 - 5.0119E+00 2.7428E+00 2.5631E+00 1.4943E+00 1.1194E+00 - 5.6234E+00 1.9808E+00 1.8625E+00 1.0629E+00 7.9779E-01 - 6.3096E+00 1.4366E+00 1.3459E+00 7.4812E-01 5.7103E-01 - 7.0795E+00 1.0428E+00 9.6210E-01 5.2968E-01 4.0194E-01 - 7.9433E+00 7.4953E-01 6.8872E-01 3.7656E-01 2.8069E-01 - 8.9125E+00 5.3819E-01 4.9221E-01 2.6365E-01 1.9574E-01 - 1.0000E+01 3.8571E-01 3.5344E-01 1.8470E-01 1.3745E-01 - 1.1220E+01 2.7637E-01 2.5198E-01 1.2844E-01 9.5236E-02 - 1.2589E+01 1.9779E-01 1.7993E-01 8.8973E-02 6.6475E-02 - 1.4125E+01 1.4145E-01 1.2775E-01 6.1614E-02 4.6454E-02 - 1.5849E+01 1.0145E-01 9.0885E-02 4.2593E-02 3.2259E-02 - 1.7783E+01 7.2552E-02 6.4820E-02 2.9192E-02 2.1953E-02 - 1.9953E+01 5.1805E-02 4.5843E-02 1.9997E-02 1.4990E-02 - 2.2387E+01 3.7063E-02 3.2292E-02 1.3715E-02 1.0275E-02 - 2.5119E+01 2.6626E-02 2.2791E-02 9.2952E-03 6.9620E-03 - 2.8184E+01 1.9030E-02 1.6256E-02 6.2644E-03 4.7608E-03 - 3.1623E+01 1.3564E-02 1.1552E-02 4.3113E-03 3.2789E-03 - 3.5481E+01 9.6919E-03 8.1789E-03 2.9156E-03 2.2216E-03 - 3.9811E+01 6.9222E-03 5.7880E-03 1.9672E-03 1.5045E-03 - 4.4668E+01 4.9343E-03 4.0968E-03 1.3244E-03 1.0180E-03 - 5.0119E+01 3.5195E-03 2.9007E-03 8.8925E-04 6.8614E-04 - 5.6234E+01 2.5118E-03 2.0490E-03 5.9542E-04 4.6027E-04 - 6.3096E+01 1.7894E-03 1.4455E-03 3.9826E-04 3.0867E-04 - 7.0795E+01 1.2739E-03 1.0201E-03 2.6630E-04 2.0673E-04 - 7.9433E+01 9.0530E-04 7.1928E-04 1.7763E-04 1.3801E-04 - 8.9125E+01 6.4322E-04 5.0652E-04 1.1840E-04 9.2312E-05 - 1.0000E+02 4.5700E-04 3.5687E-04 7.8524E-05 6.1409E-05 - 1.1220E+02 3.2404E-04 2.5109E-04 5.2070E-05 4.0849E-05 - 1.2589E+02 2.2960E-04 1.7621E-04 3.4507E-05 2.7111E-05 - 1.4125E+02 1.6266E-04 1.2363E-04 2.2861E-05 1.8012E-05 - 1.5849E+02 1.1495E-04 8.6740E-05 1.5083E-05 1.1945E-05 - 1.7783E+02 8.1080E-05 6.0744E-05 9.9484E-06 7.9021E-06 - 1.9953E+02 5.7231E-05 4.2479E-05 6.5675E-06 5.2296E-06 - 2.2387E+02 4.0327E-05 2.9641E-05 4.3491E-06 3.4640E-06 - 2.5119E+02 2.8359E-05 2.0667E-05 2.8809E-06 2.3008E-06 - 2.8184E+02 1.9908E-05 1.4439E-05 1.9139E-06 1.5259E-06 - 3.1623E+02 1.4054E-05 1.0083E-05 1.2625E-06 1.0102E-06 - 3.5481E+02 9.8717E-06 7.0083E-06 8.3371E-07 6.6960E-07 - 3.9811E+02 6.9217E-06 4.8719E-06 5.5093E-07 4.4344E-07 - 4.4668E+02 4.8447E-06 3.3898E-06 3.6491E-07 2.9459E-07 - 5.0119E+02 3.3903E-06 2.3528E-06 2.4236E-07 1.9547E-07 - 5.6234E+02 2.3776E-06 1.6309E-06 1.6201E-07 1.3006E-07 - 6.3096E+02 1.6605E-06 1.1300E-06 1.0816E-07 8.6331E-08 - 7.0795E+02 1.1594E-06 7.8193E-07 7.2000E-08 5.7564E-08 - 7.9433E+02 8.0957E-07 5.4075E-07 4.7988E-08 3.8528E-08 - 8.9125E+02 5.6386E-07 3.7347E-07 3.1921E-08 2.5513E-08 - 1.0000E+03 3.9365E-07 2.5797E-07 2.1241E-08 1.6994E-08 - 1.1220E+03 2.7353E-07 1.7764E-07 1.4160E-08 1.1346E-08 - 1.2589E+03 1.9033E-07 1.2232E-07 9.4672E-09 7.5617E-09 - 1.4125E+03 1.3212E-07 8.4101E-08 6.3504E-09 5.0144E-09 - 1.5849E+03 9.1478E-08 5.7937E-08 4.2518E-09 3.3516E-09 - 1.7783E+03 6.3167E-08 3.9859E-08 2.8478E-09 2.2438E-09 - 1.9953E+03 4.3870E-08 2.7289E-08 1.9130E-09 1.4968E-09 - 2.2387E+03 3.0259E-08 1.8714E-08 1.2744E-09 9.9703E-10 - 2.5119E+03 2.0834E-08 1.2779E-08 8.5319E-10 6.5758E-10 - 2.8184E+03 1.4318E-08 8.7081E-09 5.7775E-10 4.3653E-10 - 3.1623E+03 9.9340E-09 5.9860E-09 3.8459E-10 2.8976E-10 - 3.5481E+03 6.7224E-09 4.0249E-09 2.5422E-10 1.9320E-10 - 3.9811E+03 4.5980E-09 2.7216E-09 1.6882E-10 1.2710E-10 - 4.4668E+03 3.1324E-09 1.8386E-09 1.1281E-10 8.4420E-11 - 5.0119E+03 2.1308E-09 1.2439E-09 7.5507E-11 5.5994E-11 - 5.6234E+03 1.4433E-09 8.3720E-10 4.9337E-11 3.6525E-11 - 6.3096E+03 9.7562E-10 5.6354E-10 3.2863E-11 2.4151E-11 - 7.0795E+03 6.5926E-10 3.7750E-10 2.1599E-11 1.5959E-11 - 7.9433E+03 4.4412E-10 2.5217E-10 1.4439E-11 1.0469E-11 - 8.9125E+03 2.9853E-10 1.6804E-10 9.5545E-12 6.7488E-12 - 1.0000E+04 2.0017E-10 1.1175E-10 6.1633E-12 4.4153E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7835E+04 1.8085E+04 8.7008E+03 8.2054E+03 - 1.1220E-01 1.5223E+04 1.5383E+04 7.5230E+03 7.0442E+03 - 1.2589E-01 1.2906E+04 1.3017E+04 6.4314E+03 5.9490E+03 - 1.4125E-01 1.0880E+04 1.0942E+04 5.4421E+03 4.9837E+03 - 1.5849E-01 9.0906E+03 9.1135E+03 4.5726E+03 4.1424E+03 - 1.7783E-01 7.5079E+03 7.5246E+03 3.8158E+03 3.4080E+03 - 1.9953E-01 6.1360E+03 6.1389E+03 3.1543E+03 2.7887E+03 - 2.2387E-01 4.9632E+03 4.9541E+03 2.5903E+03 2.2613E+03 - 2.5119E-01 3.9628E+03 3.9603E+03 2.1097E+03 1.8209E+03 - 2.8184E-01 3.1430E+03 3.1394E+03 1.7014E+03 1.4523E+03 - 3.1623E-01 2.4790E+03 2.4735E+03 1.3568E+03 1.1488E+03 - 3.5481E-01 1.9409E+03 1.9336E+03 1.0732E+03 9.0068E+02 - 3.9811E-01 1.5127E+03 1.5020E+03 8.4533E+02 7.0059E+02 - 4.4668E-01 1.1710E+03 1.1613E+03 6.5994E+02 5.4313E+02 - 5.0119E-01 9.0114E+02 8.9329E+02 5.1198E+02 4.1938E+02 - 5.6234E-01 6.9008E+02 6.8353E+02 3.9559E+02 3.2264E+02 - 6.3096E-01 5.2761E+02 5.2184E+02 3.0410E+02 2.4617E+02 - 7.0795E-01 4.0189E+02 3.9644E+02 2.3122E+02 1.8692E+02 - 7.9433E-01 3.0547E+02 3.0032E+02 1.7606E+02 1.4163E+02 - 8.9125E-01 2.3170E+02 2.2726E+02 1.3403E+02 1.0730E+02 - 1.0000E+00 1.7497E+02 1.7133E+02 1.0111E+02 8.0524E+01 - 1.1220E+00 1.3226E+02 1.2897E+02 7.6221E+01 6.0206E+01 - 1.2589E+00 9.9828E+01 9.7002E+01 5.7189E+01 4.5172E+01 - 1.4125E+00 7.5075E+01 7.2681E+01 4.2653E+01 3.3563E+01 - 1.5849E+00 5.6260E+01 5.4082E+01 3.1811E+01 2.4855E+01 - 1.7783E+00 4.1932E+01 4.0177E+01 2.3699E+01 1.8333E+01 - 1.9953E+00 3.1155E+01 2.9685E+01 1.7438E+01 1.3387E+01 - 2.2387E+00 2.3060E+01 2.1826E+01 1.2684E+01 9.8171E+00 - 2.5119E+00 1.7023E+01 1.6020E+01 9.2403E+00 7.1502E+00 - 2.8184E+00 1.2502E+01 1.1699E+01 6.7127E+00 5.1431E+00 - 3.1623E+00 9.1696E+00 8.5429E+00 4.8557E+00 3.7209E+00 - 3.5481E+00 6.6903E+00 6.1941E+00 3.4736E+00 2.6543E+00 - 3.9811E+00 4.8513E+00 4.4853E+00 2.4769E+00 1.8812E+00 - 4.4668E+00 3.5176E+00 3.2284E+00 1.7611E+00 1.3266E+00 - 5.0119E+00 2.5504E+00 2.3252E+00 1.2418E+00 9.3633E-01 - 5.6234E+00 1.8403E+00 1.6739E+00 8.7016E-01 6.5872E-01 - 6.3096E+00 1.3250E+00 1.1986E+00 6.1424E-01 4.6149E-01 - 7.0795E+00 9.5209E-01 8.5541E-01 4.3033E-01 3.2050E-01 - 7.9433E+00 6.8454E-01 6.1120E-01 2.9782E-01 2.2108E-01 - 8.9125E+00 4.8962E-01 4.3593E-01 2.0456E-01 1.5325E-01 - 1.0000E+01 3.5121E-01 3.0798E-01 1.4112E-01 1.0561E-01 - 1.1220E+01 2.5165E-01 2.1887E-01 9.7164E-02 7.2526E-02 - 1.2589E+01 1.8004E-01 1.5548E-01 6.6391E-02 4.9621E-02 - 1.4125E+01 1.2874E-01 1.0993E-01 4.5445E-02 3.3937E-02 - 1.5849E+01 9.1715E-02 7.7861E-02 3.1013E-02 2.3112E-02 - 1.7783E+01 6.5225E-02 5.5100E-02 2.0868E-02 1.5653E-02 - 1.9953E+01 4.6604E-02 3.9164E-02 1.4133E-02 1.0651E-02 - 2.2387E+01 3.3281E-02 2.7817E-02 9.5658E-03 7.1494E-03 - 2.5119E+01 2.3739E-02 1.9660E-02 6.4099E-03 4.8264E-03 - 2.8184E+01 1.6985E-02 1.3964E-02 4.3483E-03 3.3032E-03 - 3.1623E+01 1.2116E-02 9.8282E-03 2.8937E-03 2.2136E-03 - 3.5481E+01 8.6425E-03 6.9558E-03 1.9361E-03 1.4875E-03 - 3.9811E+01 6.1579E-03 4.9175E-03 1.2924E-03 9.9725E-04 - 4.4668E+01 4.3860E-03 3.4759E-03 8.6249E-04 6.6852E-04 - 5.0119E+01 3.1239E-03 2.4548E-03 5.7622E-04 4.4638E-04 - 5.6234E+01 2.2218E-03 1.7323E-03 3.8420E-04 2.9745E-04 - 6.3096E+01 1.5793E-03 1.2237E-03 2.5512E-04 1.9858E-04 - 7.0795E+01 1.1225E-03 8.6319E-04 1.6927E-04 1.3238E-04 - 7.9433E+01 7.9608E-04 6.0805E-04 1.1253E-04 8.8353E-05 - 8.9125E+01 5.6416E-04 4.2811E-04 7.4680E-05 5.8916E-05 - 1.0000E+02 3.9981E-04 3.0030E-04 4.9400E-05 3.8910E-05 - 1.1220E+02 2.8273E-04 2.1096E-04 3.2772E-05 2.5953E-05 - 1.2589E+02 1.9997E-04 1.4795E-04 2.1656E-05 1.7263E-05 - 1.4125E+02 1.4114E-04 1.0357E-04 1.4371E-05 1.1441E-05 - 1.5849E+02 9.9523E-05 7.2438E-05 9.5171E-06 7.6150E-06 - 1.7783E+02 7.0102E-05 5.0601E-05 6.2977E-06 5.0531E-06 - 1.9953E+02 4.9260E-05 3.5261E-05 4.1796E-06 3.3600E-06 - 2.2387E+02 3.4620E-05 2.4585E-05 2.7803E-06 2.2380E-06 - 2.5119E+02 2.4281E-05 1.7166E-05 1.8512E-06 1.5019E-06 - 2.8184E+02 1.7001E-05 1.1937E-05 1.2355E-06 9.9804E-07 - 3.1623E+02 1.1935E-05 8.2873E-06 8.2637E-07 6.6595E-07 - 3.5481E+02 8.3528E-06 5.7507E-06 5.5221E-07 4.4520E-07 - 3.9811E+02 5.8444E-06 3.9942E-06 3.6806E-07 2.9822E-07 - 4.4668E+02 4.0882E-06 2.7712E-06 2.4574E-07 1.9999E-07 - 5.0119E+02 2.8602E-06 1.9218E-06 1.6464E-07 1.3359E-07 - 5.6234E+02 2.0004E-06 1.3310E-06 1.1094E-07 8.8980E-08 - 6.3096E+02 1.3913E-06 9.1954E-07 7.4598E-08 5.9462E-08 - 7.0795E+02 9.6887E-07 6.3548E-07 5.0098E-08 3.9814E-08 - 7.9433E+02 6.7477E-07 4.3869E-07 3.3536E-08 2.6731E-08 - 8.9125E+02 4.7024E-07 3.0209E-07 2.2255E-08 1.8054E-08 - 1.0000E+03 3.2703E-07 2.0868E-07 1.5042E-08 1.2054E-08 - 1.1220E+03 2.2599E-07 1.4328E-07 1.0169E-08 7.9774E-09 - 1.2589E+03 1.5639E-07 9.8285E-08 6.8403E-09 5.3175E-09 - 1.4125E+03 1.0788E-07 6.7315E-08 4.5847E-09 3.5769E-09 - 1.5849E+03 7.4345E-08 4.6141E-08 3.0569E-09 2.3822E-09 - 1.7783E+03 5.1364E-08 3.1507E-08 2.0399E-09 1.5573E-09 - 1.9953E+03 3.5315E-08 2.1559E-08 1.3806E-09 1.0393E-09 - 2.2387E+03 2.4176E-08 1.4691E-08 9.1143E-10 6.8998E-10 - 2.5119E+03 1.6592E-08 9.9729E-09 6.0796E-10 4.6127E-10 - 2.8184E+03 1.1327E-08 6.7485E-09 4.1202E-10 3.0684E-10 - 3.1623E+03 7.8319E-09 4.6321E-09 2.7445E-10 2.0481E-10 - 3.5481E+03 5.2287E-09 3.0853E-09 1.8196E-10 1.3483E-10 - 3.9811E+03 3.5374E-09 2.0794E-09 1.2050E-10 9.0129E-11 - 4.4668E+03 2.3930E-09 1.3977E-09 7.9918E-11 5.9900E-11 - 5.0119E+03 1.6174E-09 9.3474E-10 5.3266E-11 3.8798E-11 - 5.6234E+03 1.0899E-09 6.2353E-10 3.5692E-11 2.5644E-11 - 6.3096E+03 7.3080E-10 4.1682E-10 2.3131E-11 1.6859E-11 - 7.0795E+03 4.9047E-10 2.7791E-10 1.5288E-11 1.1055E-11 - 7.9433E+03 3.2810E-10 1.8431E-10 1.0168E-11 7.2066E-12 - 8.9125E+03 2.1859E-10 1.2202E-10 6.6510E-12 4.7382E-12 - 1.0000E+04 1.4616E-10 8.0723E-11 4.4085E-12 3.1358E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3246E+04 1.3436E+04 6.4441E+03 6.1592E+03 - 1.1220E-01 1.1462E+04 1.1601E+04 5.6415E+03 5.3324E+03 - 1.2589E-01 9.8804E+03 9.9572E+03 4.8777E+03 4.5728E+03 - 1.4125E-01 8.4614E+03 8.5165E+03 4.1819E+03 3.8853E+03 - 1.5849E-01 7.1804E+03 7.2125E+03 3.5680E+03 3.2742E+03 - 1.7783E-01 6.0282E+03 6.0435E+03 3.0219E+03 2.7378E+03 - 1.9953E-01 5.0092E+03 5.0063E+03 2.5372E+03 2.2743E+03 - 2.2387E-01 4.1137E+03 4.1013E+03 2.1165E+03 1.8718E+03 - 2.5119E-01 3.3453E+03 3.3309E+03 1.7441E+03 1.5285E+03 - 2.8184E-01 2.6998E+03 2.6869E+03 1.4240E+03 1.2344E+03 - 3.1623E-01 2.1562E+03 2.1486E+03 1.1547E+03 9.8809E+02 - 3.5481E-01 1.7136E+03 1.7063E+03 9.2735E+02 7.8808E+02 - 3.9811E-01 1.3570E+03 1.3459E+03 7.3931E+02 6.2251E+02 - 4.4668E-01 1.0639E+03 1.0533E+03 5.8404E+02 4.8889E+02 - 5.0119E-01 8.2779E+02 8.2019E+02 4.5885E+02 3.8017E+02 - 5.6234E-01 6.4116E+02 6.3423E+02 3.5827E+02 2.9354E+02 - 6.3096E-01 4.9507E+02 4.8758E+02 2.7737E+02 2.2672E+02 - 7.0795E-01 3.8125E+02 3.7339E+02 2.1319E+02 1.7331E+02 - 7.9433E-01 2.9120E+02 2.8465E+02 1.6288E+02 1.3176E+02 - 8.9125E-01 2.2079E+02 2.1554E+02 1.2401E+02 9.8981E+01 - 1.0000E+00 1.6716E+02 1.6310E+02 9.3922E+01 7.4737E+01 - 1.1220E+00 1.2651E+02 1.2302E+02 7.0475E+01 5.5898E+01 - 1.2589E+00 9.5573E+01 9.2060E+01 5.2678E+01 4.1766E+01 - 1.4125E+00 7.1884E+01 6.8601E+01 3.9164E+01 3.0988E+01 - 1.5849E+00 5.3903E+01 5.1169E+01 2.8967E+01 2.2793E+01 - 1.7783E+00 4.0180E+01 3.7955E+01 2.1400E+01 1.6624E+01 - 1.9953E+00 2.9745E+01 2.8071E+01 1.5713E+01 1.2100E+01 - 2.2387E+00 2.1946E+01 2.0600E+01 1.1434E+01 8.7873E+00 - 2.5119E+00 1.6119E+01 1.4974E+01 8.2818E+00 6.3277E+00 - 2.8184E+00 1.1783E+01 1.0881E+01 5.9478E+00 4.5485E+00 - 3.1623E+00 8.6448E+00 7.8991E+00 4.2332E+00 3.2350E+00 - 3.5481E+00 6.2931E+00 5.7176E+00 3.0001E+00 2.2844E+00 - 3.9811E+00 4.5592E+00 4.1141E+00 2.1217E+00 1.6065E+00 - 4.4668E+00 3.2997E+00 2.9546E+00 1.4941E+00 1.1265E+00 - 5.0119E+00 2.3846E+00 2.1174E+00 1.0417E+00 7.8858E-01 - 5.6234E+00 1.7204E+00 1.5097E+00 7.2616E-01 5.4883E-01 - 6.3096E+00 1.2351E+00 1.0805E+00 5.0525E-01 3.8104E-01 - 7.0795E+00 8.8478E-01 7.7396E-01 3.4750E-01 2.6217E-01 - 7.9433E+00 6.3712E-01 5.5129E-01 2.3955E-01 1.7892E-01 - 8.9125E+00 4.5649E-01 3.9092E-01 1.6460E-01 1.2333E-01 - 1.0000E+01 3.2617E-01 2.7611E-01 1.1177E-01 8.3996E-02 - 1.1220E+01 2.3340E-01 1.9534E-01 7.6171E-02 5.6937E-02 - 1.2589E+01 1.6624E-01 1.3878E-01 5.1661E-02 3.8812E-02 - 1.4125E+01 1.1822E-01 9.8169E-02 3.4850E-02 2.6439E-02 - 1.5849E+01 8.4690E-02 6.9424E-02 2.3447E-02 1.7758E-02 - 1.7783E+01 6.0593E-02 4.9273E-02 1.5742E-02 1.1922E-02 - 1.9953E+01 4.3274E-02 3.4911E-02 1.0616E-02 8.0041E-03 - 2.2387E+01 3.0832E-02 2.4675E-02 7.1571E-03 5.3844E-03 - 2.5119E+01 2.1901E-02 1.7427E-02 4.7954E-03 3.6357E-03 - 2.8184E+01 1.5584E-02 1.2402E-02 3.2040E-03 2.4153E-03 - 3.1623E+01 1.1139E-02 8.7607E-03 2.1227E-03 1.6352E-03 - 3.5481E+01 7.9436E-03 6.1920E-03 1.4173E-03 1.0921E-03 - 3.9811E+01 5.6592E-03 4.3749E-03 9.4458E-04 7.2921E-04 - 4.4668E+01 4.0232E-03 3.0901E-03 6.2773E-04 4.8707E-04 - 5.0119E+01 2.8597E-03 2.1805E-03 4.1597E-04 3.2400E-04 - 5.6234E+01 2.0283E-03 1.5389E-03 2.7611E-04 2.1656E-04 - 6.3096E+01 1.4389E-03 1.0840E-03 1.8402E-04 1.4439E-04 - 7.0795E+01 1.0202E-03 7.6266E-04 1.2178E-04 9.6380E-05 - 7.9433E+01 7.2181E-04 5.3582E-04 8.0598E-05 6.4235E-05 - 8.9125E+01 5.1061E-04 3.7576E-04 5.3733E-05 4.2715E-05 - 1.0000E+02 3.6022E-04 2.6413E-04 3.5611E-05 2.8421E-05 - 1.1220E+02 2.5407E-04 1.8494E-04 2.3668E-05 1.8945E-05 - 1.2589E+02 1.7917E-04 1.2951E-04 1.5706E-05 1.2612E-05 - 1.4125E+02 1.2619E-04 9.0386E-05 1.0462E-05 8.4308E-06 - 1.5849E+02 8.8687E-05 6.3002E-05 6.9787E-06 5.6437E-06 - 1.7783E+02 6.2232E-05 4.3946E-05 4.6563E-06 3.7793E-06 - 1.9953E+02 4.3598E-05 3.0607E-05 3.1167E-06 2.5151E-06 - 2.2387E+02 3.0604E-05 2.1312E-05 2.0764E-06 1.6790E-06 - 2.5119E+02 2.1458E-05 1.4832E-05 1.3966E-06 1.1153E-06 - 2.8184E+02 1.4970E-05 1.0280E-05 9.4991E-07 7.5151E-07 - 3.1623E+02 1.0508E-05 7.1449E-06 6.2419E-07 5.0533E-07 - 3.5481E+02 7.3427E-06 4.9477E-06 4.1956E-07 3.3935E-07 - 3.9811E+02 5.1189E-06 3.4275E-06 2.8168E-07 2.2727E-07 - 4.4668E+02 3.5767E-06 2.3734E-06 1.8896E-07 1.5256E-07 - 5.0119E+02 2.4968E-06 1.6399E-06 1.2704E-07 1.0299E-07 - 5.6234E+02 1.7419E-06 1.1349E-06 8.5746E-08 6.8829E-08 - 6.3096E+02 1.2092E-06 7.8241E-07 5.7503E-08 4.6132E-08 - 7.0795E+02 8.4047E-07 5.3933E-07 3.8800E-08 3.1214E-08 - 7.9433E+02 5.8344E-07 3.7185E-07 2.6119E-08 2.1079E-08 - 8.9125E+02 4.0373E-07 2.5602E-07 1.7465E-08 1.4030E-08 - 1.0000E+03 2.8045E-07 1.7679E-07 1.1849E-08 9.3172E-09 - 1.1220E+03 1.9323E-07 1.2028E-07 8.0281E-09 6.2082E-09 - 1.2589E+03 1.3342E-07 8.2153E-08 5.4107E-09 4.1372E-09 - 1.4125E+03 9.1632E-08 5.6135E-08 3.5757E-09 2.7696E-09 - 1.5849E+03 6.2865E-08 3.8314E-08 2.3645E-09 1.8245E-09 - 1.7783E+03 4.3136E-08 2.6111E-08 1.5831E-09 1.2249E-09 - 1.9953E+03 2.9534E-08 1.7726E-08 1.0701E-09 8.1855E-10 - 2.2387E+03 2.0117E-08 1.2007E-08 7.1641E-10 5.4058E-10 - 2.5119E+03 1.3678E-08 8.1380E-09 4.7703E-10 3.5126E-10 - 2.8184E+03 9.2907E-09 5.4907E-09 3.1870E-10 2.3282E-10 - 3.1623E+03 6.4079E-09 3.7635E-09 2.1182E-10 1.5683E-10 - 3.5481E+03 4.2432E-09 2.4764E-09 1.4065E-10 1.0403E-10 - 3.9811E+03 2.8586E-09 1.6588E-09 9.3318E-11 6.7702E-11 - 4.4668E+03 1.9201E-09 1.1105E-09 6.1915E-11 4.4413E-11 - 5.0119E+03 1.2905E-09 7.4040E-10 4.1547E-11 2.9932E-11 - 5.6234E+03 8.6337E-10 4.9043E-10 2.7355E-11 1.9565E-11 - 6.3096E+03 5.7507E-10 3.2678E-10 1.7526E-11 1.2759E-11 - 7.0795E+03 3.8324E-10 2.1593E-10 1.1432E-11 8.3454E-12 - 7.9433E+03 2.5517E-10 1.4324E-10 7.5970E-12 5.4556E-12 - 8.9125E+03 1.6968E-10 9.4995E-11 4.9847E-12 3.5124E-12 - 1.0000E+04 1.1259E-10 6.2444E-11 3.2847E-12 2.2669E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.2260E+03 9.3749E+03 4.4598E+03 4.3933E+03 - 1.1220E-01 8.1218E+03 8.2433E+03 3.9637E+03 3.8546E+03 - 1.2589E-01 7.1117E+03 7.2139E+03 3.4849E+03 3.3594E+03 - 1.4125E-01 6.1964E+03 6.2627E+03 3.0345E+03 2.8956E+03 - 1.5849E-01 5.3520E+03 5.3903E+03 2.6199E+03 2.4748E+03 - 1.7783E-01 4.5658E+03 4.5968E+03 2.2490E+03 2.1030E+03 - 1.9953E-01 3.8642E+03 3.8765E+03 1.9211E+03 1.7712E+03 - 2.2387E-01 3.2396E+03 3.2348E+03 1.6244E+03 1.4817E+03 - 2.5119E-01 2.6839E+03 2.6767E+03 1.3600E+03 1.2288E+03 - 2.8184E-01 2.2043E+03 2.1946E+03 1.1298E+03 1.0091E+03 - 3.1623E-01 1.7969E+03 1.7875E+03 9.3008E+02 8.2072E+02 - 3.5481E-01 1.4533E+03 1.4452E+03 7.5806E+02 6.6187E+02 - 3.9811E-01 1.1652E+03 1.1573E+03 6.1289E+02 5.3082E+02 - 4.4668E-01 9.2951E+02 9.1963E+02 4.9079E+02 4.2065E+02 - 5.0119E-01 7.3686E+02 7.2610E+02 3.9044E+02 3.3023E+02 - 5.6234E-01 5.7824E+02 5.6845E+02 3.0823E+02 2.5870E+02 - 6.3096E-01 4.5116E+02 4.4189E+02 2.4137E+02 2.0138E+02 - 7.0795E-01 3.4998E+02 3.4146E+02 1.8791E+02 1.5476E+02 - 7.9433E-01 2.6926E+02 2.6234E+02 1.4457E+02 1.1824E+02 - 8.9125E-01 2.0629E+02 2.0060E+02 1.1046E+02 8.9995E+01 - 1.0000E+00 1.5754E+02 1.5241E+02 8.3976E+01 6.7782E+01 - 1.1220E+00 1.1982E+02 1.1496E+02 6.3272E+01 5.0831E+01 - 1.2589E+00 9.0360E+01 8.6457E+01 4.7293E+01 3.7870E+01 - 1.4125E+00 6.8118E+01 6.4705E+01 3.5180E+01 2.7970E+01 - 1.5849E+00 5.1279E+01 4.8025E+01 2.6044E+01 2.0487E+01 - 1.7783E+00 3.8260E+01 3.5531E+01 1.9119E+01 1.4967E+01 - 1.9953E+00 2.8305E+01 2.6241E+01 1.3966E+01 1.0903E+01 - 2.2387E+00 2.0850E+01 1.9220E+01 1.0148E+01 7.8706E+00 - 2.5119E+00 1.5319E+01 1.4014E+01 7.3122E+00 5.6555E+00 - 2.8184E+00 1.1237E+01 1.0181E+01 5.2347E+00 4.0174E+00 - 3.1623E+00 8.1963E+00 7.3510E+00 3.6937E+00 2.8293E+00 - 3.5481E+00 5.9618E+00 5.3003E+00 2.6037E+00 1.9875E+00 - 3.9811E+00 4.3174E+00 3.8146E+00 1.8271E+00 1.3909E+00 - 4.4668E+00 3.1269E+00 2.7433E+00 1.2770E+00 9.6791E-01 - 5.0119E+00 2.2599E+00 1.9601E+00 8.8864E-01 6.6938E-01 - 5.6234E+00 1.6243E+00 1.4003E+00 6.1533E-01 4.6224E-01 - 6.3096E+00 1.1677E+00 9.9707E-01 4.2312E-01 3.1941E-01 - 7.0795E+00 8.3847E-01 7.0603E-01 2.9030E-01 2.1838E-01 - 7.9433E+00 6.0055E-01 5.0138E-01 1.9869E-01 1.4872E-01 - 8.9125E+00 4.3004E-01 3.5696E-01 1.3537E-01 1.0062E-01 - 1.0000E+01 3.0738E-01 2.5362E-01 9.1348E-02 6.8543E-02 - 1.1220E+01 2.1887E-01 1.7967E-01 6.1767E-02 4.6332E-02 - 1.2589E+01 1.5620E-01 1.2688E-01 4.1728E-02 3.1294E-02 - 1.4125E+01 1.1137E-01 8.9750E-02 2.7993E-02 2.1089E-02 - 1.5849E+01 7.9380E-02 6.3506E-02 1.8816E-02 1.4145E-02 - 1.7783E+01 5.6602E-02 4.4965E-02 1.2507E-02 9.4770E-03 - 1.9953E+01 4.0271E-02 3.1844E-02 8.2995E-03 6.3209E-03 - 2.2387E+01 2.8705E-02 2.2568E-02 5.5651E-03 4.1997E-03 - 2.5119E+01 2.0532E-02 1.5992E-02 3.7262E-03 2.8505E-03 - 2.8184E+01 1.4659E-02 1.1307E-02 2.4636E-03 1.9167E-03 - 3.1623E+01 1.0417E-02 7.9859E-03 1.6557E-03 1.2786E-03 - 3.5481E+01 7.4012E-03 5.6437E-03 1.1017E-03 8.5304E-04 - 3.9811E+01 5.2587E-03 3.9858E-03 7.3284E-04 5.6734E-04 - 4.4668E+01 3.7336E-03 2.8109E-03 4.8656E-04 3.7849E-04 - 5.0119E+01 2.6482E-03 1.9801E-03 3.2346E-04 2.5328E-04 - 5.6234E+01 1.8779E-03 1.3941E-03 2.1439E-04 1.6921E-04 - 6.3096E+01 1.3279E-03 9.8233E-04 1.4213E-04 1.1281E-04 - 7.0795E+01 9.3800E-04 6.8936E-04 9.4391E-05 7.4913E-05 - 7.9433E+01 6.6344E-04 4.8266E-04 6.2736E-05 4.9806E-05 - 8.9125E+01 4.6812E-04 3.3847E-04 4.1871E-05 3.3392E-05 - 1.0000E+02 3.2945E-04 2.3682E-04 2.7815E-05 2.2335E-05 - 1.1220E+02 2.3162E-04 1.6551E-04 1.8497E-05 1.4933E-05 - 1.2589E+02 1.6300E-04 1.1566E-04 1.2413E-05 1.0010E-05 - 1.4125E+02 1.1450E-04 8.0688E-05 8.2633E-06 6.6947E-06 - 1.5849E+02 8.0356E-05 5.6227E-05 5.5250E-06 4.4996E-06 - 1.7783E+02 5.6432E-05 3.9139E-05 3.7219E-06 3.0089E-06 - 1.9953E+02 3.9478E-05 2.7206E-05 2.4976E-06 2.0133E-06 - 2.2387E+02 2.7596E-05 1.8886E-05 1.6723E-06 1.3571E-06 - 2.5119E+02 1.9345E-05 1.3099E-05 1.1251E-06 9.1560E-07 - 2.8184E+02 1.3506E-05 9.0748E-06 7.6180E-07 6.1159E-07 - 3.1623E+02 9.4367E-06 6.3102E-06 5.0869E-07 4.1119E-07 - 3.5481E+02 6.5789E-06 4.3600E-06 3.4139E-07 2.7706E-07 - 3.9811E+02 4.5866E-06 3.0173E-06 2.3062E-07 1.8526E-07 - 4.4668E+02 3.1916E-06 2.0865E-06 1.5584E-07 1.2420E-07 - 5.0119E+02 2.2246E-06 1.4399E-06 1.0522E-07 8.4033E-08 - 5.6234E+02 1.5504E-06 9.9672E-07 7.0888E-08 5.6356E-08 - 6.3096E+02 1.0731E-06 6.8355E-07 4.7777E-08 3.7625E-08 - 7.0795E+02 7.4330E-07 4.7018E-07 3.2253E-08 2.5165E-08 - 7.9433E+02 5.1365E-07 3.2327E-07 2.1707E-08 1.6882E-08 - 8.9125E+02 3.5480E-07 2.2206E-07 1.4586E-08 1.1432E-08 - 1.0000E+03 2.4635E-07 1.5273E-07 9.8332E-09 7.5989E-09 - 1.1220E+03 1.6874E-07 1.0395E-07 6.5435E-09 5.0704E-09 - 1.2589E+03 1.1573E-07 7.0957E-08 4.4327E-09 3.4184E-09 - 1.4125E+03 7.9191E-08 4.8273E-08 2.9565E-09 2.2696E-09 - 1.5849E+03 5.4324E-08 3.2723E-08 1.9667E-09 1.5100E-09 - 1.7783E+03 3.7106E-08 2.2237E-08 1.3257E-09 9.9843E-10 - 1.9953E+03 2.5185E-08 1.5078E-08 8.8257E-10 6.5860E-10 - 2.2387E+03 1.7095E-08 1.0140E-08 5.9711E-10 4.3525E-10 - 2.5119E+03 1.1580E-08 6.8461E-09 3.9775E-10 2.8655E-10 - 2.8184E+03 7.8396E-09 4.6006E-09 2.5927E-10 1.9084E-10 - 3.1623E+03 5.3995E-09 3.1485E-09 1.7115E-10 1.2734E-10 - 3.5481E+03 3.5427E-09 2.0600E-09 1.1144E-10 8.4238E-11 - 3.9811E+03 2.3754E-09 1.3732E-09 7.3344E-11 5.5340E-11 - 4.4668E+03 1.5886E-09 9.1298E-10 4.9044E-11 3.6126E-11 - 5.0119E+03 1.0581E-09 6.0705E-10 3.2435E-11 2.4004E-11 - 5.6234E+03 7.0573E-10 4.0276E-10 2.0916E-11 1.5453E-11 - 6.3096E+03 4.7113E-10 2.6568E-10 1.4133E-11 1.0162E-11 - 7.0795E+03 3.1276E-10 1.7585E-10 9.4137E-12 6.5903E-12 - 7.9433E+03 2.0706E-10 1.1602E-10 6.1523E-12 4.2649E-12 - 8.9125E+03 1.3700E-10 7.6053E-11 3.9651E-12 2.7924E-12 - 1.0000E+04 9.0331E-11 4.9566E-11 2.5849E-12 1.8350E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4847E+03 5.5950E+03 2.6614E+03 2.6676E+03 - 1.1220E-01 4.9132E+03 5.0020E+03 2.3964E+03 2.3830E+03 - 1.2589E-01 4.3847E+03 4.4452E+03 2.1358E+03 2.1059E+03 - 1.4125E-01 3.8873E+03 3.9313E+03 1.8890E+03 1.8447E+03 - 1.5849E-01 3.4152E+03 3.4525E+03 1.6597E+03 1.6046E+03 - 1.7783E-01 2.9740E+03 2.9989E+03 1.4485E+03 1.3854E+03 - 1.9953E-01 2.5659E+03 2.5807E+03 1.2557E+03 1.1879E+03 - 2.2387E-01 2.1921E+03 2.2005E+03 1.0764E+03 1.0098E+03 - 2.5119E-01 1.8533E+03 1.8565E+03 9.1554E+02 8.5240E+02 - 2.8184E-01 1.5537E+03 1.5540E+03 7.7442E+02 7.1361E+02 - 3.1623E-01 1.2954E+03 1.2926E+03 6.4745E+02 5.9047E+02 - 3.5481E-01 1.0717E+03 1.0648E+03 5.3670E+02 4.8388E+02 - 3.9811E-01 8.7732E+02 8.7147E+02 4.4145E+02 3.9415E+02 - 4.4668E-01 7.1197E+02 7.0771E+02 3.6006E+02 3.2020E+02 - 5.0119E-01 5.7605E+02 5.6933E+02 2.9160E+02 2.5695E+02 - 5.6234E-01 4.6129E+02 4.5419E+02 2.3386E+02 2.0386E+02 - 6.3096E-01 3.6694E+02 3.5979E+02 1.8598E+02 1.6086E+02 - 7.0795E-01 2.9070E+02 2.8307E+02 1.4622E+02 1.2576E+02 - 7.9433E-01 2.2745E+02 2.2078E+02 1.1400E+02 9.7366E+01 - 8.9125E-01 1.7732E+02 1.7135E+02 8.8939E+01 7.4785E+01 - 1.0000E+00 1.3769E+02 1.3230E+02 6.8614E+01 5.7135E+01 - 1.1220E+00 1.0620E+02 1.0134E+02 5.2545E+01 4.3209E+01 - 1.2589E+00 8.1424E+01 7.6986E+01 3.9729E+01 3.2494E+01 - 1.4125E+00 6.1971E+01 5.8235E+01 2.9753E+01 2.4220E+01 - 1.5849E+00 4.6894E+01 4.3801E+01 2.2184E+01 1.7933E+01 - 1.7783E+00 3.5243E+01 3.2565E+01 1.6416E+01 1.3129E+01 - 1.9953E+00 2.6325E+01 2.4052E+01 1.2067E+01 9.5370E+00 - 2.2387E+00 1.9573E+01 1.7710E+01 8.7697E+00 6.8843E+00 - 2.5119E+00 1.4403E+01 1.2943E+01 6.3259E+00 4.9216E+00 - 2.8184E+00 1.0573E+01 9.4094E+00 4.5321E+00 3.4874E+00 - 3.1623E+00 7.7543E+00 6.8457E+00 3.2084E+00 2.4717E+00 - 3.5481E+00 5.6532E+00 4.9374E+00 2.2608E+00 1.7366E+00 - 3.9811E+00 4.1101E+00 3.5504E+00 1.5817E+00 1.2117E+00 - 4.4668E+00 2.9805E+00 2.5463E+00 1.1023E+00 8.4198E-01 - 5.0119E+00 2.1487E+00 1.8208E+00 7.6248E-01 5.8026E-01 - 5.6234E+00 1.5508E+00 1.3005E+00 5.2462E-01 3.9726E-01 - 6.3096E+00 1.1191E+00 9.2723E-01 3.6063E-01 2.7246E-01 - 7.0795E+00 8.0064E-01 6.5804E-01 2.4714E-01 1.8545E-01 - 7.9433E+00 5.7347E-01 4.6885E-01 1.6811E-01 1.2525E-01 - 8.9125E+00 4.1139E-01 3.3432E-01 1.1353E-01 8.4813E-02 - 1.0000E+01 2.9233E-01 2.3589E-01 7.6633E-02 5.7425E-02 - 1.1220E+01 2.0838E-01 1.6664E-01 5.1528E-02 3.8687E-02 - 1.2589E+01 1.4871E-01 1.1772E-01 3.4467E-02 2.6055E-02 - 1.4125E+01 1.0627E-01 8.3308E-02 2.3109E-02 1.7471E-02 - 1.5849E+01 7.5747E-02 5.9101E-02 1.5486E-02 1.1670E-02 - 1.7783E+01 5.3876E-02 4.1878E-02 1.0336E-02 7.7771E-03 - 1.9953E+01 3.8413E-02 2.9722E-02 6.8600E-03 5.2403E-03 - 2.2387E+01 2.7317E-02 2.0936E-02 4.5486E-03 3.4974E-03 - 2.5119E+01 1.9436E-02 1.4808E-02 3.0467E-03 2.3031E-03 - 2.8184E+01 1.3826E-02 1.0508E-02 2.0160E-03 1.5215E-03 - 3.1623E+01 9.8226E-03 7.3917E-03 1.3404E-03 1.0420E-03 - 3.5481E+01 6.9746E-03 5.2182E-03 8.8909E-04 6.9613E-04 - 3.9811E+01 4.9492E-03 3.6799E-03 5.9208E-04 4.6490E-04 - 4.4668E+01 3.5081E-03 2.5943E-03 3.9530E-04 3.1119E-04 - 5.0119E+01 2.4822E-03 1.8266E-03 2.6273E-04 2.0708E-04 - 5.6234E+01 1.7584E-03 1.2821E-03 1.7354E-04 1.3810E-04 - 6.3096E+01 1.2415E-03 8.9934E-04 1.1551E-04 9.2234E-05 - 7.0795E+01 8.7473E-04 6.3087E-04 7.7293E-05 6.1705E-05 - 7.9433E+01 6.1558E-04 4.4189E-04 5.1632E-05 4.1453E-05 - 8.9125E+01 4.3299E-04 3.0912E-04 3.4652E-05 2.7684E-05 - 1.0000E+02 3.0504E-04 2.1610E-04 2.3002E-05 1.8525E-05 - 1.1220E+02 2.1410E-04 1.5068E-04 1.5316E-05 1.2413E-05 - 1.2589E+02 1.5028E-04 1.0510E-04 1.0259E-05 8.3026E-06 - 1.4125E+02 1.0530E-04 7.3154E-05 6.8804E-06 5.5514E-06 - 1.5849E+02 7.3741E-05 5.0855E-05 4.6256E-06 3.7316E-06 - 1.7783E+02 5.1647E-05 3.5375E-05 3.1091E-06 2.5186E-06 - 1.9953E+02 3.6139E-05 2.4526E-05 2.0928E-06 1.6933E-06 - 2.2387E+02 2.5253E-05 1.7026E-05 1.4117E-06 1.1364E-06 - 2.5119E+02 1.7610E-05 1.1793E-05 9.4624E-07 7.6447E-07 - 2.8184E+02 1.2309E-05 8.1603E-06 6.3650E-07 5.1451E-07 - 3.1623E+02 8.5911E-06 5.6731E-06 4.3000E-07 3.4800E-07 - 3.5481E+02 5.9667E-06 3.9171E-06 2.9021E-07 2.3509E-07 - 3.9811E+02 4.1561E-06 2.7066E-06 1.9705E-07 1.5698E-07 - 4.4668E+02 2.8921E-06 1.8658E-06 1.3412E-07 1.0554E-07 - 5.0119E+02 2.0084E-06 1.2873E-06 9.0141E-08 7.1480E-08 - 5.6234E+02 1.3986E-06 8.9010E-07 6.0524E-08 4.7911E-08 - 6.3096E+02 9.6410E-07 6.1000E-07 4.0743E-08 3.2041E-08 - 7.0795E+02 6.6641E-07 4.1881E-07 2.7168E-08 2.1478E-08 - 7.9433E+02 4.6031E-07 2.8661E-07 1.8172E-08 1.4370E-08 - 8.9125E+02 3.1660E-07 1.9554E-07 1.2311E-08 9.5638E-09 - 1.0000E+03 2.1892E-07 1.3440E-07 8.2779E-09 6.4274E-09 - 1.1220E+03 1.4946E-07 9.1085E-08 5.5362E-09 4.2702E-09 - 1.2589E+03 1.0211E-07 6.2068E-08 3.7338E-09 2.8439E-09 - 1.4125E+03 6.9546E-08 4.2060E-08 2.4927E-09 1.9009E-09 - 1.5849E+03 4.7457E-08 2.8478E-08 1.6548E-09 1.2583E-09 - 1.7783E+03 3.2312E-08 1.9206E-08 1.0972E-09 8.2282E-10 - 1.9953E+03 2.1914E-08 1.2951E-08 7.3537E-10 5.4538E-10 - 2.2387E+03 1.4792E-08 8.6964E-09 4.8793E-10 3.6675E-10 - 2.5119E+03 9.9640E-09 5.8228E-09 3.2450E-10 2.4392E-10 - 2.8184E+03 6.7068E-09 3.9037E-09 2.1424E-10 1.5885E-10 - 3.1623E+03 4.6286E-09 2.6786E-09 1.4250E-10 1.0602E-10 - 3.5481E+03 3.0134E-09 1.7340E-09 9.4654E-11 6.8923E-11 - 3.9811E+03 2.0148E-09 1.1539E-09 6.2663E-11 4.5206E-11 - 4.4668E+03 1.3443E-09 7.6958E-10 4.1458E-11 3.0398E-11 - 5.0119E+03 8.9270E-10 5.1002E-10 2.7229E-11 2.0119E-11 - 5.6234E+03 5.9239E-10 3.3562E-10 1.7789E-11 1.2934E-11 - 6.3096E+03 3.9362E-10 2.2214E-10 1.1766E-11 8.3339E-12 - 7.0795E+03 2.6072E-10 1.4588E-10 7.6393E-12 5.5733E-12 - 7.9433E+03 1.7266E-10 9.6083E-11 5.0329E-12 3.4744E-12 - 8.9125E+03 1.1430E-10 6.3167E-11 3.2767E-12 2.2443E-12 - 1.0000E+04 7.5424E-11 4.1155E-11 2.1136E-12 1.4897E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5652E+03 3.6196E+03 1.7213E+03 1.7614E+03 - 1.1220E-01 3.2296E+03 3.2698E+03 1.5590E+03 1.5847E+03 - 1.2589E-01 2.9061E+03 2.9327E+03 1.4004E+03 1.4134E+03 - 1.4125E-01 2.5987E+03 2.6199E+03 1.2487E+03 1.2547E+03 - 1.5849E-01 2.3077E+03 2.3210E+03 1.1073E+03 1.1015E+03 - 1.7783E-01 2.0292E+03 2.0368E+03 9.7451E+02 9.5586E+02 - 1.9953E-01 1.7673E+03 1.7687E+03 8.4834E+02 8.2723E+02 - 2.2387E-01 1.5245E+03 1.5206E+03 7.3113E+02 7.1004E+02 - 2.5119E-01 1.3028E+03 1.2992E+03 6.2700E+02 6.0344E+02 - 2.8184E-01 1.1046E+03 1.1005E+03 5.3296E+02 5.0901E+02 - 3.1623E-01 9.2875E+02 9.2290E+02 4.4912E+02 4.2532E+02 - 3.5481E-01 7.7563E+02 7.6855E+02 3.7640E+02 3.5268E+02 - 3.9811E-01 6.4339E+02 6.3617E+02 3.1253E+02 2.8992E+02 - 4.4668E-01 5.3028E+02 5.2310E+02 2.5685E+02 2.3673E+02 - 5.0119E-01 4.3427E+02 4.2697E+02 2.0939E+02 1.9225E+02 - 5.6234E-01 3.5343E+02 3.4577E+02 1.6944E+02 1.5414E+02 - 6.3096E-01 2.8527E+02 2.7784E+02 1.3645E+02 1.2242E+02 - 7.0795E-01 2.2866E+02 2.2175E+02 1.0916E+02 9.7036E+01 - 7.9433E-01 1.8222E+02 1.7580E+02 8.6249E+01 7.6220E+01 - 8.9125E-01 1.4435E+02 1.3853E+02 6.7422E+01 5.9423E+01 - 1.0000E+00 1.1358E+02 1.0844E+02 5.2649E+01 4.5774E+01 - 1.1220E+00 8.8752E+01 8.4330E+01 4.0721E+01 3.4916E+01 - 1.2589E+00 6.9107E+01 6.4990E+01 3.1244E+01 2.6459E+01 - 1.4125E+00 5.3413E+01 4.9746E+01 2.3773E+01 1.9908E+01 - 1.5849E+00 4.0950E+01 3.7817E+01 1.7915E+01 1.4884E+01 - 1.7783E+00 3.1183E+01 2.8560E+01 1.3342E+01 1.0987E+01 - 1.9953E+00 2.3573E+01 2.1374E+01 9.8659E+00 8.0591E+00 - 2.2387E+00 1.7707E+01 1.5918E+01 7.2628E+00 5.8697E+00 - 2.5119E+00 1.3197E+01 1.1790E+01 5.3078E+00 4.2225E+00 - 2.8184E+00 9.7991E+00 8.6483E+00 3.8319E+00 3.0138E+00 - 3.1623E+00 7.2364E+00 6.2948E+00 2.7266E+00 2.1348E+00 - 3.5481E+00 5.3152E+00 4.5700E+00 1.9306E+00 1.5035E+00 - 3.9811E+00 3.8817E+00 3.3075E+00 1.3603E+00 1.0505E+00 - 4.4668E+00 2.8243E+00 2.3841E+00 9.5211E-01 7.2761E-01 - 5.0119E+00 2.0425E+00 1.7093E+00 6.5924E-01 5.0265E-01 - 5.6234E+00 1.4748E+00 1.2208E+00 4.5497E-01 3.4683E-01 - 6.3096E+00 1.0635E+00 8.7140E-01 3.1177E-01 2.3631E-01 - 7.0795E+00 7.6228E-01 6.2019E-01 2.1228E-01 1.5965E-01 - 7.9433E+00 5.4634E-01 4.4072E-01 1.4326E-01 1.0803E-01 - 8.9125E+00 3.9194E-01 3.1126E-01 9.6263E-02 7.2947E-02 - 1.0000E+01 2.7991E-01 2.2163E-01 6.5328E-02 4.9060E-02 - 1.1220E+01 1.9956E-01 1.5665E-01 4.3937E-02 3.2896E-02 - 1.2589E+01 1.4237E-01 1.1075E-01 2.9308E-02 2.2104E-02 - 1.4125E+01 1.0135E-01 7.8398E-02 1.9525E-02 1.4770E-02 - 1.5849E+01 7.2229E-02 5.5503E-02 1.3011E-02 9.8906E-03 - 1.7783E+01 5.1494E-02 3.9313E-02 8.6222E-03 6.6445E-03 - 1.9953E+01 3.6641E-02 2.7631E-02 5.7244E-03 4.3950E-03 - 2.2387E+01 2.6024E-02 1.9488E-02 3.8595E-03 2.9333E-03 - 2.5119E+01 1.8445E-02 1.3820E-02 2.5553E-03 1.9790E-03 - 2.8184E+01 1.3089E-02 9.8197E-03 1.6756E-03 1.3177E-03 - 3.1623E+01 9.3419E-03 6.9304E-03 1.1268E-03 8.8145E-04 - 3.5481E+01 6.6252E-03 4.8838E-03 7.4919E-04 5.8802E-04 - 3.9811E+01 4.6890E-03 3.4394E-03 4.9833E-04 3.9152E-04 - 4.4668E+01 3.3123E-03 2.4181E-03 3.3116E-04 2.6097E-04 - 5.0119E+01 2.3421E-03 1.7007E-03 2.2045E-04 1.7505E-04 - 5.6234E+01 1.6536E-03 1.1947E-03 1.4688E-04 1.1734E-04 - 6.3096E+01 1.1670E-03 8.3715E-04 9.8228E-05 7.8150E-05 - 7.0795E+01 8.2192E-04 5.8558E-04 6.5480E-05 5.2357E-05 - 7.9433E+01 5.7725E-04 4.1023E-04 4.3849E-05 3.5181E-05 - 8.9125E+01 4.0607E-04 2.8652E-04 2.9463E-05 2.3772E-05 - 1.0000E+02 2.8559E-04 1.9957E-04 1.9562E-05 1.5909E-05 - 1.1220E+02 2.0017E-04 1.3902E-04 1.3124E-05 1.0715E-05 - 1.2589E+02 1.4018E-04 9.6788E-05 8.8493E-06 7.2092E-06 - 1.4125E+02 9.8053E-05 6.7341E-05 5.9605E-06 4.7987E-06 - 1.5849E+02 6.8552E-05 4.6818E-05 3.9993E-06 3.2227E-06 - 1.7783E+02 4.8040E-05 3.2527E-05 2.6996E-06 2.1932E-06 - 1.9953E+02 3.3592E-05 2.2557E-05 1.8271E-06 1.4774E-06 - 2.2387E+02 2.3424E-05 1.5614E-05 1.2367E-06 9.9571E-07 - 2.5119E+02 1.6351E-05 1.0811E-05 8.3332E-07 6.7124E-07 - 2.8184E+02 1.1387E-05 7.4841E-06 5.5788E-07 4.5122E-07 - 3.1623E+02 7.9504E-06 5.1896E-06 3.7971E-07 3.0370E-07 - 3.5481E+02 5.5161E-06 3.5785E-06 2.5613E-07 2.0556E-07 - 3.9811E+02 3.8264E-06 2.4707E-06 1.7271E-07 1.3753E-07 - 4.4668E+02 2.6532E-06 1.7008E-06 1.1638E-07 9.2502E-08 - 5.0119E+02 1.8433E-06 1.1703E-06 7.8326E-08 6.2273E-08 - 5.6234E+02 1.2833E-06 8.0830E-07 5.3022E-08 4.1645E-08 - 6.3096E+02 8.8086E-07 5.5198E-07 3.5494E-08 2.7894E-08 - 7.0795E+02 6.0700E-07 3.7812E-07 2.3856E-08 1.8650E-08 - 7.9433E+02 4.1768E-07 2.5869E-07 1.6053E-08 1.2633E-08 - 8.9125E+02 2.8713E-07 1.7647E-07 1.0816E-08 8.4355E-09 - 1.0000E+03 1.9843E-07 1.2114E-07 7.2425E-09 5.5291E-09 - 1.1220E+03 1.3454E-07 8.1478E-08 4.8500E-09 3.7010E-09 - 1.2589E+03 9.1754E-08 5.5340E-08 3.2302E-09 2.5033E-09 - 1.4125E+03 6.2385E-08 3.7496E-08 2.1425E-09 1.6648E-09 - 1.5849E+03 4.2396E-08 2.5305E-08 1.4508E-09 1.0879E-09 - 1.7783E+03 2.8735E-08 1.7051E-08 9.6605E-10 7.2812E-10 - 1.9953E+03 1.9411E-08 1.1460E-08 6.3611E-10 4.8274E-10 - 2.2387E+03 1.3041E-08 7.6783E-09 4.2976E-10 3.1527E-10 - 2.5119E+03 8.7412E-09 5.1368E-09 2.8548E-10 2.0888E-10 - 2.8184E+03 5.8819E-09 3.4143E-09 1.8734E-10 1.3588E-10 - 3.1623E+03 4.0444E-09 2.3396E-09 1.2209E-10 9.0381E-11 - 3.5481E+03 2.6222E-09 1.5138E-09 8.0998E-11 5.9355E-11 - 3.9811E+03 1.7489E-09 1.0053E-09 5.3642E-11 3.8610E-11 - 4.4668E+03 1.1678E-09 6.6474E-10 3.5107E-11 2.4804E-11 - 5.0119E+03 7.7597E-10 4.3842E-10 2.3215E-11 1.6267E-11 - 5.6234E+03 5.1200E-10 2.8848E-10 1.5355E-11 1.0874E-11 - 6.3096E+03 3.3953E-10 1.9126E-10 1.0022E-11 7.1382E-12 - 7.0795E+03 2.2400E-10 1.2579E-10 6.4083E-12 4.6322E-12 - 7.9433E+03 1.4761E-10 8.2121E-11 4.1666E-12 2.9299E-12 - 8.9125E+03 9.7142E-11 5.3867E-11 2.8023E-12 1.9009E-12 - 1.0000E+04 6.4053E-11 3.5335E-11 1.8575E-12 1.2794E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1061E+03 3.1162E+03 1.4773E+03 1.5536E+03 - 1.1220E-01 2.8258E+03 2.8272E+03 1.3449E+03 1.4008E+03 - 1.2589E-01 2.5546E+03 2.5549E+03 1.2133E+03 1.2512E+03 - 1.4125E-01 2.2926E+03 2.2894E+03 1.0825E+03 1.1121E+03 - 1.5849E-01 2.0423E+03 2.0308E+03 9.5686E+02 9.7648E+02 - 1.7783E-01 1.8028E+03 1.7866E+03 8.3994E+02 8.5125E+02 - 1.9953E-01 1.5733E+03 1.5550E+03 7.3196E+02 7.3839E+02 - 2.2387E-01 1.3614E+03 1.3422E+03 6.3464E+02 6.3222E+02 - 2.5119E-01 1.1646E+03 1.1480E+03 5.4532E+02 5.3636E+02 - 2.8184E-01 9.8795E+02 9.7204E+02 4.6239E+02 4.5281E+02 - 3.1623E-01 8.3277E+02 8.1887E+02 3.8909E+02 3.7845E+02 - 3.5481E-01 6.9735E+02 6.8371E+02 3.2541E+02 3.1310E+02 - 3.9811E-01 5.7924E+02 5.6528E+02 2.7053E+02 2.5799E+02 - 4.4668E-01 4.7819E+02 4.6607E+02 2.2252E+02 2.1060E+02 - 5.0119E-01 3.9135E+02 3.8206E+02 1.8126E+02 1.6986E+02 - 5.6234E-01 3.1855E+02 3.0956E+02 1.4679E+02 1.3641E+02 - 6.3096E-01 2.5830E+02 2.4867E+02 1.1788E+02 1.0892E+02 - 7.0795E-01 2.0751E+02 1.9926E+02 9.4314E+01 8.5933E+01 - 7.9433E-01 1.6567E+02 1.5883E+02 7.4559E+01 6.7226E+01 - 8.9125E-01 1.3175E+02 1.2533E+02 5.8466E+01 5.2270E+01 - 1.0000E+00 1.0397E+02 9.8339E+01 4.5600E+01 4.0349E+01 - 1.1220E+00 8.1516E+01 7.6578E+01 3.5208E+01 3.0931E+01 - 1.2589E+00 6.3525E+01 5.9366E+01 2.7095E+01 2.3381E+01 - 1.4125E+00 4.9327E+01 4.5646E+01 2.0609E+01 1.7553E+01 - 1.5849E+00 3.7944E+01 3.4725E+01 1.5511E+01 1.3110E+01 - 1.7783E+00 2.9026E+01 2.6301E+01 1.1605E+01 9.6803E+00 - 1.9953E+00 2.2032E+01 1.9780E+01 8.6176E+00 7.0839E+00 - 2.2387E+00 1.6605E+01 1.4732E+01 6.3448E+00 5.1728E+00 - 2.5119E+00 1.2425E+01 1.0903E+01 4.6188E+00 3.7298E+00 - 2.8184E+00 9.2520E+00 8.0589E+00 3.3216E+00 2.6612E+00 - 3.1623E+00 6.8606E+00 5.9007E+00 2.3779E+00 1.8845E+00 - 3.5481E+00 5.0569E+00 4.3014E+00 1.6879E+00 1.3257E+00 - 3.9811E+00 3.7075E+00 3.1160E+00 1.1909E+00 9.2552E-01 - 4.4668E+00 2.7049E+00 2.2494E+00 8.3349E-01 6.4222E-01 - 5.0119E+00 1.9678E+00 1.6187E+00 5.7656E-01 4.4267E-01 - 5.6234E+00 1.4259E+00 1.1590E+00 3.9669E-01 3.0371E-01 - 6.3096E+00 1.0278E+00 8.2740E-01 2.7100E-01 2.0718E-01 - 7.0795E+00 7.3862E-01 5.8884E-01 1.8463E-01 1.4105E-01 - 7.9433E+00 5.3078E-01 4.2009E-01 1.2531E-01 9.5699E-02 - 8.9125E+00 3.8053E-01 2.9914E-01 8.4320E-02 6.4352E-02 - 1.0000E+01 2.7071E-01 2.1093E-01 5.6622E-02 4.2999E-02 - 1.1220E+01 1.9268E-01 1.4940E-01 3.7949E-02 2.8808E-02 - 1.2589E+01 1.3766E-01 1.0566E-01 2.5450E-02 1.9354E-02 - 1.4125E+01 9.8145E-02 7.4598E-02 1.6963E-02 1.2972E-02 - 1.5849E+01 6.9674E-02 5.2843E-02 1.1254E-02 8.5845E-03 - 1.7783E+01 4.9457E-02 3.7513E-02 7.5202E-03 5.7187E-03 - 1.9953E+01 3.5233E-02 2.6577E-02 4.9810E-03 3.8428E-03 - 2.2387E+01 2.5101E-02 1.8757E-02 3.2771E-03 2.5677E-03 - 2.5119E+01 1.7745E-02 1.3176E-02 2.1678E-03 1.7006E-03 - 2.8184E+01 1.2624E-02 9.2772E-03 1.4519E-03 1.1368E-03 - 3.1623E+01 8.9688E-03 6.5728E-03 9.7185E-04 7.6483E-04 - 3.5481E+01 6.3526E-03 4.6296E-03 6.4694E-04 5.1011E-04 - 3.9811E+01 4.4920E-03 3.2571E-03 4.3037E-04 3.4086E-04 - 4.4668E+01 3.1728E-03 2.2898E-03 2.8685E-04 2.2850E-04 - 5.0119E+01 2.2397E-03 1.6061E-03 1.9115E-04 1.5270E-04 - 5.6234E+01 1.5789E-03 1.1271E-03 1.2735E-04 1.0201E-04 - 6.3096E+01 1.1119E-03 7.9005E-04 8.5419E-05 6.8662E-05 - 7.0795E+01 7.8128E-04 5.5122E-04 5.7336E-05 4.5979E-05 - 7.9433E+01 5.4931E-04 3.8494E-04 3.8641E-05 3.1010E-05 - 8.9125E+01 3.8564E-04 2.6832E-04 2.5853E-05 2.1000E-05 - 1.0000E+02 2.7018E-04 1.8737E-04 1.7298E-05 1.4066E-05 - 1.1220E+02 1.8931E-04 1.3027E-04 1.1638E-05 9.4876E-06 - 1.2589E+02 1.3268E-04 9.0625E-05 7.8489E-06 6.4064E-06 - 1.4125E+02 9.2859E-05 6.3064E-05 5.3006E-06 4.3112E-06 - 1.5849E+02 6.4877E-05 4.3769E-05 3.5752E-06 2.9050E-06 - 1.7783E+02 4.5339E-05 3.0326E-05 2.4102E-06 1.9561E-06 - 1.9953E+02 3.1597E-05 2.1024E-05 1.6455E-06 1.3168E-06 - 2.2387E+02 2.2013E-05 1.4520E-05 1.1081E-06 8.8944E-07 - 2.5119E+02 1.5323E-05 1.0043E-05 7.4021E-07 6.0391E-07 - 2.8184E+02 1.0670E-05 6.9623E-06 5.0334E-07 4.1311E-07 - 3.1623E+02 7.4520E-06 4.8258E-06 3.4221E-07 2.7376E-07 - 3.5481E+02 5.1559E-06 3.3200E-06 2.3065E-07 1.8422E-07 - 3.9811E+02 3.5793E-06 2.2865E-06 1.5512E-07 1.2295E-07 - 4.4668E+02 2.4815E-06 1.5733E-06 1.0428E-07 8.3288E-08 - 5.0119E+02 1.7170E-06 1.0852E-06 7.0493E-08 5.6842E-08 - 5.6234E+02 1.1941E-06 7.4738E-07 4.7844E-08 3.7440E-08 - 6.3096E+02 8.1675E-07 5.0869E-07 3.2105E-08 2.5154E-08 - 7.0795E+02 5.6055E-07 3.4799E-07 2.1604E-08 1.6715E-08 - 7.9433E+02 3.8526E-07 2.3731E-07 1.4449E-08 1.1100E-08 - 8.9125E+02 2.6420E-07 1.6124E-07 9.6251E-09 7.4667E-09 - 1.0000E+03 1.8200E-07 1.1055E-07 6.4297E-09 4.9640E-09 - 1.1220E+03 1.2295E-07 7.4231E-08 4.2824E-09 3.3243E-09 - 1.2589E+03 8.3521E-08 5.0150E-08 2.9022E-09 2.2041E-09 - 1.4125E+03 5.6615E-08 3.3858E-08 1.9436E-09 1.4579E-09 - 1.5849E+03 3.8293E-08 2.2790E-08 1.2810E-09 9.6537E-10 - 1.7783E+03 2.5914E-08 1.5300E-08 8.4295E-10 6.3246E-10 - 1.9953E+03 1.7468E-08 1.0242E-08 5.6977E-10 4.1254E-10 - 2.2387E+03 1.1737E-08 6.8673E-09 3.7335E-10 2.7378E-10 - 2.5119E+03 7.8749E-09 4.5849E-09 2.4553E-10 1.8333E-10 - 2.8184E+03 5.2550E-09 3.0623E-09 1.6507E-10 1.2043E-10 - 3.1623E+03 3.6127E-09 2.0899E-09 1.0784E-10 7.9156E-11 - 3.5481E+03 2.3413E-09 1.3458E-09 7.0709E-11 5.1226E-11 - 3.9811E+03 1.5547E-09 8.8828E-10 4.6418E-11 3.3836E-11 - 4.4668E+03 1.0307E-09 5.8778E-10 3.0479E-11 2.2070E-11 - 5.0119E+03 6.8456E-10 3.8795E-10 1.9997E-11 1.3966E-11 - 5.6234E+03 4.5191E-10 2.5660E-10 1.3221E-11 9.2787E-12 - 6.3096E+03 2.9846E-10 1.6827E-10 8.6375E-12 6.1660E-12 - 7.0795E+03 1.9701E-10 1.1041E-10 5.6793E-12 3.9449E-12 - 7.9433E+03 1.3033E-10 7.2124E-11 3.7233E-12 2.5879E-12 - 8.9125E+03 8.5716E-11 4.6957E-11 2.3879E-12 1.6932E-12 - 1.0000E+04 5.6645E-11 3.0711E-11 1.5033E-12 1.0950E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3306E+03 4.3374E+03 2.0617E+03 2.1324E+03 - 1.1220E-01 3.9402E+03 3.9433E+03 1.8693E+03 1.9259E+03 - 1.2589E-01 3.5632E+03 3.5551E+03 1.6808E+03 1.7207E+03 - 1.4125E-01 3.1961E+03 3.1802E+03 1.4991E+03 1.5184E+03 - 1.5849E-01 2.8376E+03 2.8195E+03 1.3258E+03 1.3271E+03 - 1.7783E-01 2.4922E+03 2.4717E+03 1.1608E+03 1.1510E+03 - 1.9953E-01 2.1667E+03 2.1442E+03 1.0054E+03 9.8993E+02 - 2.2387E-01 1.8628E+03 1.8370E+03 8.6491E+02 8.4509E+02 - 2.5119E-01 1.5810E+03 1.5553E+03 7.3429E+02 7.1160E+02 - 2.8184E-01 1.3289E+03 1.3057E+03 6.1794E+02 5.9164E+02 - 3.1623E-01 1.1091E+03 1.0867E+03 5.1677E+02 4.8908E+02 - 3.5481E-01 9.1696E+02 8.9563E+02 4.2588E+02 4.0065E+02 - 3.9811E-01 7.5181E+02 7.3241E+02 3.4807E+02 3.2426E+02 - 4.4668E-01 6.1197E+02 5.9392E+02 2.8274E+02 2.5999E+02 - 5.0119E-01 4.9360E+02 4.7795E+02 2.2696E+02 2.0676E+02 - 5.6234E-01 3.9516E+02 3.8167E+02 1.8062E+02 1.6318E+02 - 6.3096E-01 3.1428E+02 3.0168E+02 1.4264E+02 1.2786E+02 - 7.0795E-01 2.4800E+02 2.3702E+02 1.1197E+02 9.9128E+01 - 7.9433E-01 1.9479E+02 1.8517E+02 8.7177E+01 7.6187E+01 - 8.9125E-01 1.5207E+02 1.4362E+02 6.7116E+01 5.8067E+01 - 1.0000E+00 1.1777E+02 1.1063E+02 5.1160E+01 4.3820E+01 - 1.1220E+00 9.0908E+01 8.4672E+01 3.8836E+01 3.2903E+01 - 1.2589E+00 6.9990E+01 6.4386E+01 2.9259E+01 2.4574E+01 - 1.4125E+00 5.3413E+01 4.8691E+01 2.1832E+01 1.8157E+01 - 1.5849E+00 4.0512E+01 3.6562E+01 1.6178E+01 1.3283E+01 - 1.7783E+00 3.0602E+01 2.7305E+01 1.1896E+01 9.6810E+00 - 1.9953E+00 2.2938E+01 2.0291E+01 8.6796E+00 6.9914E+00 - 2.2387E+00 1.7085E+01 1.4969E+01 6.2717E+00 5.0056E+00 - 2.5119E+00 1.2690E+01 1.0956E+01 4.4948E+00 3.5771E+00 - 2.8184E+00 9.3530E+00 7.9869E+00 3.1978E+00 2.5345E+00 - 3.1623E+00 6.8792E+00 5.8042E+00 2.2647E+00 1.7638E+00 - 3.5481E+00 5.0367E+00 4.1963E+00 1.5908E+00 1.2271E+00 - 3.9811E+00 3.6713E+00 3.0265E+00 1.1073E+00 8.5023E-01 - 4.4668E+00 2.6653E+00 2.1747E+00 7.6318E-01 5.8748E-01 - 5.0119E+00 1.9273E+00 1.5564E+00 5.2331E-01 4.0115E-01 - 5.6234E+00 1.3896E+00 1.1100E+00 3.5763E-01 2.7257E-01 - 6.3096E+00 9.9938E-01 7.9212E-01 2.4498E-01 1.8649E-01 - 7.0795E+00 7.1874E-01 5.6555E-01 1.6694E-01 1.2566E-01 - 7.9433E+00 5.1505E-01 4.0201E-01 1.1238E-01 8.3550E-02 - 8.9125E+00 3.6749E-01 2.8510E-01 7.5070E-02 5.6569E-02 - 1.0000E+01 2.6365E-01 2.0209E-01 5.0194E-02 3.8040E-02 - 1.1220E+01 1.8765E-01 1.4298E-01 3.3613E-02 2.5420E-02 - 1.2589E+01 1.3358E-01 1.0117E-01 2.2419E-02 1.6964E-02 - 1.4125E+01 9.5151E-02 7.1575E-02 1.4942E-02 1.1327E-02 - 1.5849E+01 6.7597E-02 5.0728E-02 9.8690E-03 7.6038E-03 - 1.7783E+01 4.7953E-02 3.5914E-02 6.5380E-03 5.0629E-03 - 1.9953E+01 3.4147E-02 2.5404E-02 4.3708E-03 3.3605E-03 - 2.2387E+01 2.4322E-02 1.7925E-02 2.8997E-03 2.2536E-03 - 2.5119E+01 1.7229E-02 1.2637E-02 1.9304E-03 1.5067E-03 - 2.8184E+01 1.2236E-02 8.8767E-03 1.2673E-03 1.0121E-03 - 3.1623E+01 8.6594E-03 6.2903E-03 8.5500E-04 6.7228E-04 - 3.5481E+01 6.1175E-03 4.4217E-03 5.6935E-04 4.5053E-04 - 3.9811E+01 4.3165E-03 3.1045E-03 3.8045E-04 3.0287E-04 - 4.4668E+01 3.0484E-03 2.1812E-03 2.5426E-04 2.0376E-04 - 5.0119E+01 2.1491E-03 1.5293E-03 1.6992E-04 1.3675E-04 - 5.6234E+01 1.5134E-03 1.0724E-03 1.1416E-04 9.1707E-05 - 6.3096E+01 1.0647E-03 7.5097E-04 7.6526E-05 6.1603E-05 - 7.0795E+01 7.4938E-04 5.2366E-04 5.1157E-05 4.1583E-05 - 7.9433E+01 5.2673E-04 3.6594E-04 3.4465E-05 2.8171E-05 - 8.9125E+01 3.6876E-04 2.5476E-04 2.3155E-05 1.8835E-05 - 1.0000E+02 2.5835E-04 1.7798E-04 1.5674E-05 1.2693E-05 - 1.1220E+02 1.8085E-04 1.2365E-04 1.0544E-05 8.5911E-06 - 1.2589E+02 1.2650E-04 8.5834E-05 7.0874E-06 5.8175E-06 - 1.4125E+02 8.8459E-05 5.9545E-05 4.7770E-06 3.9113E-06 - 1.5849E+02 6.1848E-05 4.1346E-05 3.2316E-06 2.6300E-06 - 1.7783E+02 4.3189E-05 2.8743E-05 2.2048E-06 1.7659E-06 - 1.9953E+02 3.0117E-05 1.9916E-05 1.4885E-06 1.1932E-06 - 2.2387E+02 2.0954E-05 1.3744E-05 1.0003E-06 8.0604E-07 - 2.5119E+02 1.4549E-05 9.5001E-06 6.8309E-07 5.4403E-07 - 2.8184E+02 1.0133E-05 6.5399E-06 4.6503E-07 3.6723E-07 - 3.1623E+02 7.0666E-06 4.5466E-06 3.1247E-07 2.4992E-07 - 3.5481E+02 4.8840E-06 3.1235E-06 2.1161E-07 1.6809E-07 - 3.9811E+02 3.3863E-06 2.1481E-06 1.4325E-07 1.1253E-07 - 4.4668E+02 2.3418E-06 1.4758E-06 9.6912E-08 7.5627E-08 - 5.0119E+02 1.6161E-06 1.0136E-06 6.5295E-08 5.1384E-08 - 5.6234E+02 1.1224E-06 6.9789E-07 4.4092E-08 3.4196E-08 - 6.3096E+02 7.6722E-07 4.7410E-07 2.9635E-08 2.2817E-08 - 7.0795E+02 5.2589E-07 3.2368E-07 1.9747E-08 1.5219E-08 - 7.9433E+02 3.6049E-07 2.2070E-07 1.3208E-08 1.0151E-08 - 8.9125E+02 2.4703E-07 1.5027E-07 8.8199E-09 6.8231E-09 - 1.0000E+03 1.6987E-07 1.0247E-07 5.9670E-09 4.5230E-09 - 1.1220E+03 1.1443E-07 6.8693E-08 3.9901E-09 2.9965E-09 - 1.2589E+03 7.7597E-08 4.6513E-08 2.6448E-09 1.9923E-09 - 1.4125E+03 5.2518E-08 3.1280E-08 1.7696E-09 1.2999E-09 - 1.5849E+03 3.5571E-08 2.0927E-08 1.1671E-09 8.5192E-10 - 1.7783E+03 2.3871E-08 1.3987E-08 7.5372E-10 5.6493E-10 - 1.9953E+03 1.6058E-08 9.4289E-09 5.0470E-10 3.8017E-10 - 2.2387E+03 1.0756E-08 6.2769E-09 3.3764E-10 2.4925E-10 - 2.5119E+03 7.1892E-09 4.1725E-09 2.2431E-10 1.6428E-10 - 2.8184E+03 4.7886E-09 2.7942E-09 1.4688E-10 1.0958E-10 - 3.1623E+03 3.3002E-09 1.9029E-09 9.8272E-11 7.1695E-11 - 3.5481E+03 2.1286E-09 1.2199E-09 6.4936E-11 4.7121E-11 - 3.9811E+03 1.4124E-09 8.0721E-10 4.1952E-11 3.1072E-11 - 4.4668E+03 9.3567E-10 5.3437E-10 2.7469E-11 2.0066E-11 - 5.0119E+03 6.2180E-10 3.5042E-10 1.8047E-11 1.2692E-11 - 5.6234E+03 4.1051E-10 2.3049E-10 1.1837E-11 8.1550E-12 - 6.3096E+03 2.7055E-10 1.5192E-10 7.7535E-12 5.6257E-12 - 7.0795E+03 1.7848E-10 9.9660E-11 5.1453E-12 3.6945E-12 - 7.9433E+03 1.1718E-10 6.5694E-11 3.4221E-12 2.3639E-12 - 8.9125E+03 7.7170E-11 4.2665E-11 2.1355E-12 1.5470E-12 - 1.0000E+04 5.0929E-11 2.7605E-11 1.3740E-12 1.0271E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.9399E+03 9.0468E+03 4.4170E+03 4.1599E+03 - 1.1220E-01 8.0555E+03 8.1484E+03 3.9740E+03 3.7125E+03 - 1.2589E-01 7.2083E+03 7.2770E+03 3.5352E+03 3.2735E+03 - 1.4125E-01 6.3881E+03 6.4318E+03 3.1096E+03 2.8574E+03 - 1.5849E-01 5.5920E+03 5.6092E+03 2.7067E+03 2.4641E+03 - 1.7783E-01 4.8232E+03 4.8265E+03 2.3354E+03 2.0976E+03 - 1.9953E-01 4.0972E+03 4.0957E+03 1.9899E+03 1.7659E+03 - 2.2387E-01 3.4389E+03 3.4268E+03 1.6716E+03 1.4704E+03 - 2.5119E-01 2.8467E+03 2.8292E+03 1.3883E+03 1.2097E+03 - 2.8184E-01 2.3263E+03 2.3087E+03 1.1398E+03 9.8172E+02 - 3.1623E-01 1.8825E+03 1.8623E+03 9.2370E+02 7.8828E+02 - 3.5481E-01 1.5054E+03 1.4851E+03 7.3947E+02 6.2580E+02 - 3.9811E-01 1.1933E+03 1.1725E+03 5.8534E+02 4.9032E+02 - 4.4668E-01 9.3711E+02 9.1728E+02 4.5788E+02 3.8054E+02 - 5.0119E-01 7.2867E+02 7.0989E+02 3.5502E+02 2.9251E+02 - 5.6234E-01 5.6317E+02 5.4443E+02 2.7222E+02 2.2269E+02 - 6.3096E-01 4.3215E+02 4.1564E+02 2.0704E+02 1.6836E+02 - 7.0795E-01 3.2952E+02 3.1543E+02 1.5600E+02 1.2616E+02 - 7.9433E-01 2.5003E+02 2.3732E+02 1.1631E+02 9.3522E+01 - 8.9125E-01 1.8899E+02 1.7767E+02 8.6120E+01 6.8845E+01 - 1.0000E+00 1.4213E+02 1.3235E+02 6.3574E+01 5.0444E+01 - 1.1220E+00 1.0666E+02 9.8412E+01 4.6529E+01 3.6885E+01 - 1.2589E+00 7.9843E+01 7.2849E+01 3.3932E+01 2.6743E+01 - 1.4125E+00 5.9674E+01 5.3645E+01 2.4538E+01 1.9229E+01 - 1.5849E+00 4.4374E+01 3.9365E+01 1.7602E+01 1.3798E+01 - 1.7783E+00 3.2776E+01 2.8851E+01 1.2560E+01 9.8246E+00 - 1.9953E+00 2.4167E+01 2.1043E+01 8.9182E+00 6.9386E+00 - 2.2387E+00 1.7739E+01 1.5254E+01 6.3183E+00 4.8718E+00 - 2.5119E+00 1.2988E+01 1.1018E+01 4.4370E+00 3.4160E+00 - 2.8184E+00 9.4914E+00 7.9451E+00 3.0910E+00 2.3838E+00 - 3.1623E+00 6.9020E+00 5.7092E+00 2.1537E+00 1.6460E+00 - 3.5481E+00 5.0042E+00 4.0983E+00 1.4858E+00 1.1353E+00 - 3.9811E+00 3.6226E+00 2.9402E+00 1.0175E+00 7.7768E-01 - 4.4668E+00 2.6184E+00 2.1055E+00 6.9695E-01 5.2865E-01 - 5.0119E+00 1.8867E+00 1.5021E+00 4.7451E-01 3.6046E-01 - 5.6234E+00 1.3596E+00 1.0676E+00 3.2100E-01 2.4554E-01 - 6.3096E+00 9.7745E-01 7.6355E-01 2.1743E-01 1.6513E-01 - 7.0795E+00 6.9868E-01 5.4436E-01 1.4674E-01 1.1161E-01 - 7.9433E+00 4.9989E-01 3.8582E-01 9.8888E-02 7.5309E-02 - 8.9125E+00 3.5927E-01 2.7416E-01 6.6106E-02 5.0135E-02 - 1.0000E+01 2.5691E-01 1.9424E-01 4.4316E-02 3.3582E-02 - 1.1220E+01 1.8291E-01 1.3739E-01 2.9542E-02 2.2486E-02 - 1.2589E+01 1.3021E-01 9.7351E-02 1.9664E-02 1.4951E-02 - 1.4125E+01 9.2650E-02 6.9059E-02 1.3121E-02 1.0022E-02 - 1.5849E+01 6.5840E-02 4.8911E-02 8.7572E-03 6.7156E-03 - 1.7783E+01 4.6858E-02 3.4608E-02 5.8000E-03 4.4670E-03 - 1.9953E+01 3.3328E-02 2.4396E-02 3.8664E-03 2.9995E-03 - 2.2387E+01 2.3675E-02 1.7222E-02 2.5916E-03 1.9979E-03 - 2.5119E+01 1.6735E-02 1.2177E-02 1.7159E-03 1.3425E-03 - 2.8184E+01 1.1814E-02 8.5549E-03 1.1436E-03 8.9651E-04 - 3.1623E+01 8.3862E-03 6.0379E-03 7.6013E-04 5.9970E-04 - 3.5481E+01 5.9219E-03 4.2415E-03 5.0907E-04 4.0084E-04 - 3.9811E+01 4.1842E-03 2.9821E-03 3.4002E-04 2.6986E-04 - 4.4668E+01 2.9535E-03 2.0944E-03 2.2677E-04 1.8230E-04 - 5.0119E+01 2.0764E-03 1.4695E-03 1.5099E-04 1.2269E-04 - 5.6234E+01 1.4582E-03 1.0283E-03 1.0191E-04 8.2828E-05 - 6.3096E+01 1.0263E-03 7.1774E-04 6.9015E-05 5.6021E-05 - 7.0795E+01 7.2156E-04 5.0165E-04 4.6373E-05 3.7550E-05 - 7.9433E+01 5.0604E-04 3.5027E-04 3.1015E-05 2.5441E-05 - 8.9125E+01 3.5516E-04 2.4434E-04 2.0899E-05 1.7378E-05 - 1.0000E+02 2.4889E-04 1.7009E-04 1.4267E-05 1.1628E-05 - 1.1220E+02 1.7385E-04 1.1813E-04 9.6344E-06 7.8578E-06 - 1.2589E+02 1.2161E-04 8.2253E-05 6.5132E-06 5.3462E-06 - 1.4125E+02 8.4976E-05 5.7071E-05 4.4246E-06 3.6108E-06 - 1.5849E+02 5.9280E-05 3.9518E-05 2.9982E-06 2.4432E-06 - 1.7783E+02 4.1373E-05 2.7426E-05 2.0248E-06 1.6448E-06 - 1.9953E+02 2.8826E-05 1.8983E-05 1.3756E-06 1.0971E-06 - 2.2387E+02 2.0073E-05 1.3090E-05 9.2708E-07 7.4235E-07 - 2.5119E+02 1.3974E-05 9.0409E-06 6.2088E-07 5.0176E-07 - 2.8184E+02 9.6871E-06 6.2403E-06 4.2334E-07 3.3893E-07 - 3.1623E+02 6.7534E-06 4.3222E-06 2.8960E-07 2.3251E-07 - 3.5481E+02 4.6641E-06 2.9657E-06 1.9642E-07 1.5636E-07 - 3.9811E+02 3.2258E-06 2.0390E-06 1.3161E-07 1.0463E-07 - 4.4668E+02 2.2287E-06 1.3986E-06 8.9272E-08 6.9740E-08 - 5.0119E+02 1.5366E-06 9.5995E-07 6.1165E-08 4.6504E-08 - 5.6234E+02 1.0660E-06 6.6151E-07 4.0854E-08 3.1390E-08 - 6.3096E+02 7.2742E-07 4.4881E-07 2.7360E-08 2.1300E-08 - 7.0795E+02 4.9828E-07 3.0575E-07 1.8481E-08 1.4153E-08 - 7.9433E+02 3.4111E-07 2.0793E-07 1.2339E-08 9.2720E-09 - 8.9125E+02 2.3298E-07 1.4094E-07 8.2513E-09 6.1312E-09 - 1.0000E+03 1.6010E-07 9.6047E-08 5.4427E-09 4.1546E-09 - 1.1220E+03 1.0708E-07 6.4406E-08 3.6458E-09 2.7660E-09 - 1.2589E+03 7.2539E-08 4.3483E-08 2.4135E-09 1.8254E-09 - 1.4125E+03 4.8944E-08 2.9164E-08 1.5814E-09 1.2061E-09 - 1.5849E+03 3.2913E-08 1.9546E-08 1.0621E-09 7.8446E-10 - 1.7783E+03 2.2198E-08 1.3092E-08 6.9977E-10 5.2109E-10 - 1.9953E+03 1.4977E-08 8.7396E-09 4.6913E-10 3.4627E-10 - 2.2387E+03 1.0035E-08 5.8349E-09 3.1154E-10 2.3053E-10 - 2.5119E+03 6.6649E-09 3.8787E-09 2.0630E-10 1.5317E-10 - 2.8184E+03 4.4379E-09 2.5803E-09 1.3703E-10 9.7507E-11 - 3.1623E+03 3.0471E-09 1.7630E-09 8.9538E-11 6.6347E-11 - 3.5481E+03 1.9699E-09 1.1309E-09 5.9037E-11 4.4412E-11 - 3.9811E+03 1.3058E-09 7.4541E-10 3.8173E-11 2.8416E-11 - 4.4668E+03 8.6299E-10 4.9252E-10 2.5550E-11 1.8313E-11 - 5.0119E+03 5.7152E-10 3.2411E-10 1.6447E-11 1.2003E-11 - 5.6234E+03 3.7823E-10 2.1293E-10 1.0627E-11 7.9904E-12 - 6.3096E+03 2.4874E-10 1.4007E-10 7.0519E-12 5.0945E-12 - 7.0795E+03 1.6386E-10 9.1721E-11 4.7331E-12 3.3295E-12 - 7.9433E+03 1.0802E-10 5.9798E-11 3.1108E-12 2.1488E-12 - 8.9125E+03 7.0567E-11 3.9005E-11 2.0177E-12 1.4612E-12 - 1.0000E+04 4.6369E-11 2.5275E-11 1.3068E-12 9.7455E-13 diff --git a/pisa_examples/resources/flux/honda-2015-spl-solmax.d b/pisa_examples/resources/flux/honda-2015-spl-solmax.d deleted file mode 100644 index 33e501c93..000000000 --- a/pisa_examples/resources/flux/honda-2015-spl-solmax.d +++ /dev/null @@ -1,24720 +0,0 @@ -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7922E+03 9.9500E+03 4.8678E+03 4.4201E+03 - 1.1220E-01 8.7906E+03 8.8883E+03 4.3609E+03 3.9294E+03 - 1.2589E-01 7.8492E+03 7.9092E+03 3.8691E+03 3.4621E+03 - 1.4125E-01 6.9131E+03 6.9784E+03 3.3794E+03 3.0017E+03 - 1.5849E-01 6.0142E+03 6.0629E+03 2.9123E+03 2.5766E+03 - 1.7783E-01 5.1604E+03 5.1805E+03 2.4903E+03 2.1850E+03 - 1.9953E-01 4.3621E+03 4.3667E+03 2.1177E+03 1.8198E+03 - 2.2387E-01 3.6434E+03 3.6352E+03 1.7740E+03 1.5075E+03 - 2.5119E-01 2.9996E+03 2.9777E+03 1.4606E+03 1.2379E+03 - 2.8184E-01 2.4334E+03 2.4064E+03 1.1864E+03 9.9269E+02 - 3.1623E-01 1.9472E+03 1.9316E+03 9.4954E+02 7.9217E+02 - 3.5481E-01 1.5477E+03 1.5302E+03 7.5630E+02 6.2559E+02 - 3.9811E-01 1.2165E+03 1.1950E+03 5.9380E+02 4.8751E+02 - 4.4668E-01 9.4770E+02 9.2747E+02 4.5967E+02 3.7698E+02 - 5.0119E-01 7.3479E+02 7.1583E+02 3.5274E+02 2.8768E+02 - 5.6234E-01 5.6160E+02 5.4583E+02 2.6782E+02 2.1657E+02 - 6.3096E-01 4.2750E+02 4.1099E+02 2.0125E+02 1.6164E+02 - 7.0795E-01 3.2388E+02 3.0941E+02 1.5016E+02 1.2029E+02 - 7.9433E-01 2.4481E+02 2.3219E+02 1.1100E+02 8.8368E+01 - 8.9125E-01 1.8468E+02 1.7169E+02 8.1915E+01 6.4877E+01 - 1.0000E+00 1.3873E+02 1.2830E+02 5.9793E+01 4.7218E+01 - 1.1220E+00 1.0438E+02 9.5211E+01 4.3597E+01 3.4544E+01 - 1.2589E+00 7.7883E+01 7.0421E+01 3.1540E+01 2.4757E+01 - 1.4125E+00 5.7836E+01 5.1749E+01 2.2648E+01 1.7547E+01 - 1.5849E+00 4.3070E+01 3.8026E+01 1.6208E+01 1.2551E+01 - 1.7783E+00 3.1858E+01 2.7628E+01 1.1441E+01 8.8566E+00 - 1.9953E+00 2.3374E+01 2.0029E+01 8.0575E+00 6.1429E+00 - 2.2387E+00 1.7112E+01 1.4627E+01 5.6613E+00 4.2966E+00 - 2.5119E+00 1.2555E+01 1.0602E+01 4.0065E+00 3.0205E+00 - 2.8184E+00 9.2022E+00 7.6751E+00 2.7813E+00 2.1023E+00 - 3.1623E+00 6.6713E+00 5.4656E+00 1.9069E+00 1.4470E+00 - 3.5481E+00 4.8477E+00 3.9216E+00 1.3080E+00 9.8916E-01 - 3.9811E+00 3.5129E+00 2.8025E+00 8.8979E-01 6.6795E-01 - 4.4668E+00 2.5369E+00 1.9977E+00 6.0846E-01 4.5466E-01 - 5.0119E+00 1.8276E+00 1.4253E+00 4.0971E-01 3.1457E-01 - 5.6234E+00 1.3202E+00 1.0221E+00 2.7931E-01 2.1266E-01 - 6.3096E+00 9.5587E-01 7.3206E-01 1.9059E-01 1.4187E-01 - 7.0795E+00 6.8285E-01 5.2277E-01 1.2660E-01 9.5087E-02 - 7.9433E+00 4.8406E-01 3.7529E-01 8.4818E-02 6.3123E-02 - 8.9125E+00 3.4981E-01 2.6482E-01 5.6903E-02 4.3757E-02 - 1.0000E+01 2.4879E-01 1.8547E-01 3.8879E-02 2.9536E-02 - 1.1220E+01 1.7739E-01 1.3166E-01 2.5551E-02 1.9535E-02 - 1.2589E+01 1.2661E-01 9.3779E-02 1.6955E-02 1.2793E-02 - 1.4125E+01 9.0152E-02 6.6522E-02 1.1596E-02 8.4501E-03 - 1.5849E+01 6.4139E-02 4.7084E-02 7.5886E-03 5.7487E-03 - 1.7783E+01 4.5766E-02 3.3350E-02 4.8078E-03 3.8713E-03 - 1.9953E+01 3.2654E-02 2.3693E-02 3.2749E-03 2.6351E-03 - 2.2387E+01 2.3063E-02 1.6644E-02 2.2111E-03 1.7796E-03 - 2.5119E+01 1.6495E-02 1.1614E-02 1.4159E-03 1.1635E-03 - 2.8184E+01 1.1684E-02 8.2302E-03 9.5578E-04 7.4071E-04 - 3.1623E+01 8.2063E-03 5.8239E-03 6.6238E-04 5.2964E-04 - 3.5481E+01 5.7919E-03 4.1033E-03 4.4489E-04 3.5641E-04 - 3.9811E+01 4.0870E-03 2.8838E-03 3.0199E-04 2.3880E-04 - 4.4668E+01 2.8825E-03 2.0308E-03 2.0002E-04 1.6159E-04 - 5.0119E+01 2.0303E-03 1.4311E-03 1.3398E-04 1.1108E-04 - 5.6234E+01 1.4284E-03 9.9987E-04 8.9808E-05 7.4729E-05 - 6.3096E+01 9.9888E-04 6.9558E-04 6.0488E-05 5.0566E-05 - 7.0795E+01 7.0251E-04 4.8505E-04 4.1769E-05 3.4773E-05 - 7.9433E+01 4.9793E-04 3.3939E-04 2.8623E-05 2.3352E-05 - 8.9125E+01 3.4919E-04 2.3628E-04 1.9426E-05 1.4887E-05 - 1.0000E+02 2.4282E-04 1.6553E-04 1.3037E-05 1.0677E-05 - 1.1220E+02 1.6954E-04 1.1461E-04 8.8837E-06 7.2761E-06 - 1.2589E+02 1.1838E-04 7.9501E-05 6.0884E-06 4.9912E-06 - 1.4125E+02 8.2457E-05 5.5082E-05 4.0945E-06 3.4084E-06 - 1.5849E+02 5.7820E-05 3.8180E-05 2.8270E-06 2.3643E-06 - 1.7783E+02 4.0498E-05 2.6495E-05 1.9084E-06 1.5920E-06 - 1.9953E+02 2.8279E-05 1.8522E-05 1.2920E-06 1.0488E-06 - 2.2387E+02 1.9526E-05 1.2926E-05 8.8288E-07 7.1537E-07 - 2.5119E+02 1.3553E-05 8.8251E-06 5.9087E-07 4.7324E-07 - 2.8184E+02 9.4726E-06 6.0055E-06 3.9479E-07 3.1288E-07 - 3.1623E+02 6.6045E-06 4.2046E-06 2.7281E-07 2.2220E-07 - 3.5481E+02 4.5503E-06 2.8738E-06 1.8622E-07 1.5043E-07 - 3.9811E+02 3.1498E-06 1.9742E-06 1.2487E-07 1.0288E-07 - 4.4668E+02 2.1752E-06 1.3603E-06 8.5765E-08 6.7648E-08 - 5.0119E+02 1.4979E-06 9.3357E-07 5.8414E-08 4.3987E-08 - 5.6234E+02 1.0386E-06 6.4529E-07 3.9186E-08 3.1006E-08 - 6.3096E+02 7.0807E-07 4.3701E-07 2.6825E-08 2.0398E-08 - 7.0795E+02 4.8667E-07 2.9826E-07 1.7613E-08 1.3140E-08 - 7.9433E+02 3.3010E-07 2.0217E-07 1.1703E-08 9.0273E-09 - 8.9125E+02 2.2368E-07 1.3553E-07 7.9212E-09 6.0485E-09 - 1.0000E+03 1.5547E-07 9.2260E-08 5.2462E-09 3.9322E-09 - 1.1220E+03 1.0393E-07 6.1673E-08 3.5382E-09 2.7380E-09 - 1.2589E+03 7.0687E-08 4.1884E-08 2.3808E-09 1.9160E-09 - 1.4125E+03 4.7949E-08 2.8318E-08 1.6220E-09 1.1176E-09 - 1.5849E+03 3.1983E-08 1.8915E-08 1.0338E-09 7.3376E-10 - 1.7783E+03 2.1402E-08 1.2766E-08 6.5543E-10 5.1570E-10 - 1.9953E+03 1.4461E-08 8.4148E-09 4.4185E-10 3.6165E-10 - 2.2387E+03 9.6352E-09 5.6597E-09 3.0205E-10 2.3538E-10 - 2.5119E+03 6.5259E-09 3.7167E-09 1.9442E-10 1.4203E-10 - 2.8184E+03 4.2879E-09 2.4937E-09 1.2485E-10 8.3033E-11 - 3.1623E+03 2.9274E-09 1.7056E-09 8.3664E-11 5.7652E-11 - 3.5481E+03 1.8962E-09 1.1049E-09 5.4599E-11 3.8127E-11 - 3.9811E+03 1.2642E-09 7.2161E-10 3.7670E-11 2.5393E-11 - 4.4668E+03 8.3094E-10 4.7583E-10 2.6697E-11 1.6256E-11 - 5.0119E+03 5.4607E-10 3.1222E-10 1.7816E-11 1.0583E-11 - 5.6234E+03 3.6525E-10 2.0388E-10 1.0782E-11 7.1339E-12 - 6.3096E+03 2.3938E-10 1.3434E-10 6.6903E-12 4.8784E-12 - 7.0795E+03 1.5770E-10 8.9930E-11 4.4610E-12 3.1750E-12 - 7.9433E+03 1.0176E-10 5.9084E-11 2.8924E-12 2.1565E-12 - 8.9125E+03 6.6442E-11 3.7742E-11 2.0040E-12 1.3614E-12 - 1.0000E+04 4.4359E-11 2.4214E-11 1.3689E-12 8.7610E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8219E+03 9.9126E+03 4.8378E+03 4.4354E+03 - 1.1220E-01 8.8107E+03 8.8648E+03 4.3300E+03 3.9429E+03 - 1.2589E-01 7.8447E+03 7.8733E+03 3.8289E+03 3.4670E+03 - 1.4125E-01 6.9244E+03 6.9322E+03 3.3523E+03 3.0190E+03 - 1.5849E-01 6.0260E+03 6.0315E+03 2.8988E+03 2.5864E+03 - 1.7783E-01 5.1605E+03 5.1653E+03 2.4828E+03 2.1786E+03 - 1.9953E-01 4.3588E+03 4.3591E+03 2.0956E+03 1.8258E+03 - 2.2387E-01 3.6364E+03 3.6221E+03 1.7582E+03 1.5154E+03 - 2.5119E-01 2.9905E+03 2.9637E+03 1.4610E+03 1.2443E+03 - 2.8184E-01 2.4276E+03 2.4061E+03 1.1821E+03 1.0013E+03 - 3.1623E-01 1.9545E+03 1.9276E+03 9.5102E+02 7.9428E+02 - 3.5481E-01 1.5542E+03 1.5287E+03 7.5973E+02 6.2291E+02 - 3.9811E-01 1.2224E+03 1.1990E+03 5.9451E+02 4.8456E+02 - 4.4668E-01 9.5423E+02 9.2971E+02 4.6029E+02 3.7650E+02 - 5.0119E-01 7.3646E+02 7.1299E+02 3.5307E+02 2.8571E+02 - 5.6234E-01 5.6280E+02 5.4137E+02 2.6848E+02 2.1491E+02 - 6.3096E-01 4.2838E+02 4.1066E+02 2.0081E+02 1.6088E+02 - 7.0795E-01 3.2607E+02 3.0908E+02 1.4870E+02 1.1851E+02 - 7.9433E-01 2.4599E+02 2.3326E+02 1.1075E+02 8.7412E+01 - 8.9125E-01 1.8483E+02 1.7494E+02 8.1060E+01 6.4207E+01 - 1.0000E+00 1.4016E+02 1.2877E+02 5.9571E+01 4.7376E+01 - 1.1220E+00 1.0472E+02 9.5308E+01 4.3431E+01 3.4482E+01 - 1.2589E+00 7.7931E+01 7.0695E+01 3.1362E+01 2.4718E+01 - 1.4125E+00 5.7886E+01 5.2037E+01 2.2534E+01 1.7593E+01 - 1.5849E+00 4.2714E+01 3.8121E+01 1.6070E+01 1.2501E+01 - 1.7783E+00 3.1737E+01 2.7732E+01 1.1451E+01 8.8432E+00 - 1.9953E+00 2.3311E+01 2.0156E+01 8.0804E+00 6.2312E+00 - 2.2387E+00 1.7006E+01 1.4565E+01 5.7219E+00 4.4381E+00 - 2.5119E+00 1.2470E+01 1.0517E+01 4.0092E+00 3.0973E+00 - 2.8184E+00 9.2305E+00 7.5694E+00 2.7800E+00 2.0961E+00 - 3.1623E+00 6.6748E+00 5.4593E+00 1.9086E+00 1.4688E+00 - 3.5481E+00 4.8552E+00 3.9322E+00 1.3079E+00 1.0054E+00 - 3.9811E+00 3.5299E+00 2.8281E+00 9.0052E-01 6.8236E-01 - 4.4668E+00 2.5535E+00 2.0234E+00 6.1050E-01 4.6309E-01 - 5.0119E+00 1.8449E+00 1.4373E+00 4.1481E-01 3.1267E-01 - 5.6234E+00 1.3329E+00 1.0304E+00 2.8476E-01 2.1097E-01 - 6.3096E+00 9.6102E-01 7.4056E-01 1.9122E-01 1.4562E-01 - 7.0795E+00 6.8928E-01 5.2530E-01 1.2751E-01 9.9105E-02 - 7.9433E+00 4.9315E-01 3.7241E-01 8.4926E-02 6.5955E-02 - 8.9125E+00 3.5525E-01 2.6646E-01 5.7746E-02 4.3458E-02 - 1.0000E+01 2.4984E-01 1.8715E-01 3.8110E-02 2.8622E-02 - 1.1220E+01 1.7821E-01 1.3291E-01 2.5337E-02 1.9318E-02 - 1.2589E+01 1.2763E-01 9.3687E-02 1.6975E-02 1.2974E-02 - 1.4125E+01 9.1295E-02 6.5861E-02 1.1320E-02 8.6432E-03 - 1.5849E+01 6.4413E-02 4.6768E-02 7.5659E-03 5.8075E-03 - 1.7783E+01 4.5524E-02 3.3195E-02 4.8200E-03 3.9946E-03 - 1.9953E+01 3.1990E-02 2.3611E-02 3.1769E-03 2.6520E-03 - 2.2387E+01 2.2649E-02 1.6754E-02 2.2386E-03 1.7358E-03 - 2.5119E+01 1.6243E-02 1.1804E-02 1.5250E-03 1.1254E-03 - 2.8184E+01 1.1521E-02 8.2796E-03 9.9664E-04 7.6082E-04 - 3.1623E+01 8.2180E-03 5.8721E-03 6.6878E-04 5.2763E-04 - 3.5481E+01 5.8066E-03 4.1213E-03 4.4362E-04 3.5815E-04 - 3.9811E+01 4.1099E-03 2.8924E-03 2.9716E-04 2.4179E-04 - 4.4668E+01 2.8911E-03 2.0414E-03 1.9996E-04 1.6454E-04 - 5.0119E+01 2.0365E-03 1.4316E-03 1.3598E-04 1.1171E-04 - 5.6234E+01 1.4380E-03 9.9452E-04 9.1974E-05 7.4949E-05 - 6.3096E+01 1.0116E-03 6.9883E-04 6.1339E-05 5.1027E-05 - 7.0795E+01 7.0931E-04 4.9057E-04 4.1268E-05 3.4880E-05 - 7.9433E+01 4.9845E-04 3.4526E-04 2.8352E-05 2.3324E-05 - 8.9125E+01 3.5245E-04 2.4174E-04 1.9475E-05 1.5916E-05 - 1.0000E+02 2.4290E-04 1.6515E-04 1.3102E-05 1.0751E-05 - 1.1220E+02 1.6908E-04 1.1469E-04 8.7279E-06 7.2560E-06 - 1.2589E+02 1.1809E-04 7.9634E-05 5.9861E-06 4.9847E-06 - 1.4125E+02 8.2923E-05 5.4959E-05 4.1491E-06 3.4370E-06 - 1.5849E+02 5.7843E-05 3.8197E-05 2.8158E-06 2.3140E-06 - 1.7783E+02 4.0142E-05 2.6404E-05 1.9032E-06 1.5515E-06 - 1.9953E+02 2.8038E-05 1.8199E-05 1.3048E-06 1.0818E-06 - 2.2387E+02 1.9468E-05 1.2593E-05 9.0053E-07 7.0893E-07 - 2.5119E+02 1.3536E-05 8.7311E-06 6.1832E-07 4.5900E-07 - 2.8184E+02 9.5302E-06 6.0298E-06 4.0419E-07 3.2109E-07 - 3.1623E+02 6.6000E-06 4.2168E-06 2.7487E-07 2.2346E-07 - 3.5481E+02 4.5534E-06 2.8879E-06 1.8663E-07 1.4728E-07 - 3.9811E+02 3.1460E-06 1.9788E-06 1.2753E-07 9.7248E-08 - 4.4668E+02 2.1786E-06 1.3635E-06 8.6163E-08 6.5871E-08 - 5.0119E+02 1.5004E-06 9.3691E-07 5.8509E-08 4.3796E-08 - 5.6234E+02 1.0371E-06 6.4460E-07 3.8931E-08 2.9563E-08 - 6.3096E+02 7.0892E-07 4.3632E-07 2.6028E-08 1.9759E-08 - 7.0795E+02 4.8493E-07 2.9540E-07 1.7135E-08 1.3413E-08 - 7.9433E+02 3.2999E-07 2.0069E-07 1.1398E-08 9.0970E-09 - 8.9125E+02 2.2488E-07 1.3643E-07 7.7094E-09 6.2172E-09 - 1.0000E+03 1.5490E-07 9.3057E-08 5.1887E-09 4.0514E-09 - 1.1220E+03 1.0444E-07 6.2326E-08 3.6081E-09 2.6471E-09 - 1.2589E+03 7.0711E-08 4.2181E-08 2.5228E-09 1.7905E-09 - 1.4125E+03 4.7507E-08 2.8368E-08 1.6797E-09 1.1553E-09 - 1.5849E+03 3.1947E-08 1.9051E-08 1.1299E-09 7.2684E-10 - 1.7783E+03 2.1875E-08 1.2508E-08 7.0773E-10 4.8371E-10 - 1.9953E+03 1.4651E-08 8.3932E-09 4.3661E-10 3.3727E-10 - 2.2387E+03 9.7778E-09 5.7034E-09 2.9144E-10 2.3495E-10 - 2.5119E+03 6.5150E-09 3.7256E-09 2.0197E-10 1.4931E-10 - 2.8184E+03 4.3458E-09 2.4271E-09 1.3371E-10 9.3712E-11 - 3.1623E+03 2.9104E-09 1.6707E-09 8.8739E-11 6.6621E-11 - 3.5481E+03 1.9000E-09 1.0799E-09 5.3190E-11 4.1936E-11 - 3.9811E+03 1.2648E-09 7.2079E-10 3.4152E-11 2.8813E-11 - 4.4668E+03 8.3319E-10 4.7471E-10 2.5037E-11 1.8582E-11 - 5.0119E+03 5.5202E-10 3.1202E-10 1.5486E-11 1.1696E-11 - 5.6234E+03 3.6549E-10 2.0325E-10 9.9379E-12 8.0504E-12 - 6.3096E+03 2.4245E-10 1.3601E-10 6.8034E-12 5.2910E-12 - 7.0795E+03 1.5819E-10 8.8071E-11 4.4681E-12 3.5190E-12 - 7.9433E+03 1.0331E-10 5.7243E-11 2.9926E-12 2.1484E-12 - 8.9125E+03 6.7552E-11 3.7655E-11 1.9100E-12 1.2620E-12 - 1.0000E+04 4.5257E-11 2.4521E-11 1.3112E-12 9.5802E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7894E+03 9.8552E+03 4.7958E+03 4.4575E+03 - 1.1220E-01 8.8047E+03 8.8526E+03 4.3157E+03 3.9524E+03 - 1.2589E-01 7.8564E+03 7.8682E+03 3.8411E+03 3.4687E+03 - 1.4125E-01 6.9281E+03 6.9179E+03 3.3526E+03 3.0120E+03 - 1.5849E-01 6.0056E+03 6.0154E+03 2.8907E+03 2.5743E+03 - 1.7783E-01 5.1519E+03 5.1518E+03 2.4740E+03 2.1786E+03 - 1.9953E-01 4.3705E+03 4.3504E+03 2.1026E+03 1.8231E+03 - 2.2387E-01 3.6485E+03 3.6233E+03 1.7543E+03 1.5074E+03 - 2.5119E-01 2.9912E+03 2.9671E+03 1.4489E+03 1.2358E+03 - 2.8184E-01 2.4228E+03 2.4103E+03 1.1795E+03 9.9254E+02 - 3.1623E-01 1.9489E+03 1.9285E+03 9.4223E+02 7.8856E+02 - 3.5481E-01 1.5547E+03 1.5203E+03 7.4839E+02 6.2469E+02 - 3.9811E-01 1.2258E+03 1.1924E+03 5.9005E+02 4.8647E+02 - 4.4668E-01 9.4917E+02 9.2960E+02 4.5857E+02 3.7383E+02 - 5.0119E-01 7.3222E+02 7.1532E+02 3.5085E+02 2.8399E+02 - 5.6234E-01 5.6332E+02 5.4659E+02 2.6671E+02 2.1463E+02 - 6.3096E-01 4.2964E+02 4.1425E+02 2.0130E+02 1.6044E+02 - 7.0795E-01 3.2529E+02 3.1056E+02 1.5013E+02 1.2034E+02 - 7.9433E-01 2.4613E+02 2.3144E+02 1.1010E+02 8.8760E+01 - 8.9125E-01 1.8442E+02 1.7165E+02 8.1549E+01 6.4567E+01 - 1.0000E+00 1.3890E+02 1.2812E+02 5.9640E+01 4.7170E+01 - 1.1220E+00 1.0413E+02 9.5006E+01 4.3193E+01 3.4134E+01 - 1.2589E+00 7.7925E+01 7.0091E+01 3.1316E+01 2.4517E+01 - 1.4125E+00 5.7902E+01 5.1594E+01 2.2674E+01 1.7544E+01 - 1.5849E+00 4.2904E+01 3.7987E+01 1.6051E+01 1.2646E+01 - 1.7783E+00 3.1747E+01 2.7620E+01 1.1340E+01 8.8520E+00 - 1.9953E+00 2.3399E+01 1.9998E+01 8.0466E+00 6.1340E+00 - 2.2387E+00 1.7139E+01 1.4593E+01 5.6543E+00 4.3365E+00 - 2.5119E+00 1.2556E+01 1.0460E+01 3.9686E+00 2.9936E+00 - 2.8184E+00 9.2714E+00 7.5130E+00 2.7931E+00 2.0751E+00 - 3.1623E+00 6.6889E+00 5.4621E+00 1.9182E+00 1.4464E+00 - 3.5481E+00 4.8266E+00 3.9138E+00 1.3092E+00 9.9003E-01 - 3.9811E+00 3.5007E+00 2.7867E+00 8.9370E-01 6.8196E-01 - 4.4668E+00 2.5331E+00 1.9891E+00 6.1118E-01 4.6836E-01 - 5.0119E+00 1.8206E+00 1.4368E+00 4.1618E-01 3.1731E-01 - 5.6234E+00 1.3127E+00 1.0294E+00 2.8386E-01 2.1308E-01 - 6.3096E+00 9.4459E-01 7.2646E-01 1.8751E-01 1.4438E-01 - 7.0795E+00 6.7899E-01 5.1037E-01 1.2707E-01 9.5444E-02 - 7.9433E+00 4.8916E-01 3.6284E-01 8.6227E-02 6.4082E-02 - 8.9125E+00 3.5058E-01 2.5692E-01 5.6596E-02 4.4658E-02 - 1.0000E+01 2.4862E-01 1.8536E-01 3.7742E-02 2.8949E-02 - 1.1220E+01 1.7811E-01 1.3115E-01 2.5658E-02 1.9501E-02 - 1.2589E+01 1.2732E-01 9.3127E-02 1.6975E-02 1.2932E-02 - 1.4125E+01 9.0288E-02 6.6465E-02 1.1171E-02 8.7120E-03 - 1.5849E+01 6.4658E-02 4.7296E-02 7.7180E-03 5.8223E-03 - 1.7783E+01 4.6101E-02 3.3404E-02 5.0756E-03 3.8570E-03 - 1.9953E+01 3.2506E-02 2.3655E-02 3.2070E-03 2.6922E-03 - 2.2387E+01 2.2935E-02 1.6731E-02 2.1830E-03 1.7817E-03 - 2.5119E+01 1.6181E-02 1.1680E-02 1.5174E-03 1.1401E-03 - 2.8184E+01 1.1465E-02 8.2831E-03 1.0248E-03 7.4567E-04 - 3.1623E+01 8.1784E-03 5.8673E-03 6.6593E-04 5.2221E-04 - 3.5481E+01 5.7752E-03 4.1086E-03 4.4803E-04 3.5555E-04 - 3.9811E+01 4.0733E-03 2.8801E-03 3.0100E-04 2.4101E-04 - 4.4668E+01 2.8780E-03 2.0275E-03 2.0436E-04 1.6523E-04 - 5.0119E+01 2.0270E-03 1.4323E-03 1.3706E-04 1.1126E-04 - 5.6234E+01 1.4276E-03 1.0032E-03 9.2268E-05 7.4109E-05 - 6.3096E+01 1.0013E-03 6.9549E-04 6.2382E-05 4.9181E-05 - 7.0795E+01 7.0235E-04 4.8381E-04 4.2539E-05 3.4095E-05 - 7.9433E+01 4.9351E-04 3.3908E-04 2.9775E-05 2.3914E-05 - 8.9125E+01 3.4765E-04 2.3738E-04 2.0322E-05 1.6028E-05 - 1.0000E+02 2.4264E-04 1.6593E-04 1.3276E-05 1.0756E-05 - 1.1220E+02 1.6967E-04 1.1473E-04 8.9087E-06 7.2641E-06 - 1.2589E+02 1.1917E-04 8.0175E-05 5.9614E-06 4.9892E-06 - 1.4125E+02 8.3204E-05 5.6007E-05 4.1026E-06 3.4016E-06 - 1.5849E+02 5.8127E-05 3.8540E-05 2.7769E-06 2.2902E-06 - 1.7783E+02 4.0400E-05 2.6629E-05 1.8887E-06 1.5109E-06 - 1.9953E+02 2.8076E-05 1.8475E-05 1.2955E-06 1.0314E-06 - 2.2387E+02 1.9654E-05 1.2770E-05 8.6781E-07 7.0589E-07 - 2.5119E+02 1.3768E-05 8.7984E-06 6.0175E-07 4.7764E-07 - 2.8184E+02 9.5926E-06 6.1356E-06 4.3400E-07 3.1766E-07 - 3.1623E+02 6.6193E-06 4.1914E-06 2.7489E-07 2.1363E-07 - 3.5481E+02 4.5605E-06 2.8794E-06 1.8858E-07 1.4542E-07 - 3.9811E+02 3.1637E-06 1.9874E-06 1.2866E-07 9.9295E-08 - 4.4668E+02 2.1783E-06 1.3679E-06 8.5450E-08 6.5163E-08 - 5.0119E+02 1.4859E-06 9.3019E-07 5.5490E-08 4.3856E-08 - 5.6234E+02 1.0349E-06 6.3707E-07 3.7553E-08 2.9643E-08 - 6.3096E+02 7.0524E-07 4.3302E-07 2.5334E-08 1.9686E-08 - 7.0795E+02 4.7902E-07 2.9530E-07 1.7309E-08 1.3309E-08 - 7.9433E+02 3.2910E-07 2.0190E-07 1.2167E-08 8.6508E-09 - 8.9125E+02 2.2545E-07 1.3722E-07 8.1723E-09 5.6294E-09 - 1.0000E+03 1.5494E-07 9.3168E-08 5.3330E-09 3.8745E-09 - 1.1220E+03 1.0498E-07 6.2540E-08 3.6316E-09 2.6338E-09 - 1.2589E+03 7.0999E-08 4.2329E-08 2.4045E-09 1.8589E-09 - 1.4125E+03 4.7570E-08 2.8360E-08 1.5761E-09 1.1463E-09 - 1.5849E+03 3.2047E-08 1.9229E-08 1.1019E-09 7.3925E-10 - 1.7783E+03 2.1466E-08 1.2874E-08 7.2502E-10 5.0263E-10 - 1.9953E+03 1.4376E-08 8.4871E-09 4.2461E-10 3.4464E-10 - 2.2387E+03 9.6179E-09 5.6604E-09 2.8238E-10 2.2885E-10 - 2.5119E+03 6.3993E-09 3.7836E-09 1.9457E-10 1.5333E-10 - 2.8184E+03 4.2272E-09 2.5057E-09 1.1879E-10 1.0716E-10 - 3.1623E+03 2.9041E-09 1.6928E-09 8.3868E-11 7.0482E-11 - 3.5481E+03 1.8861E-09 1.1007E-09 5.5030E-11 4.4285E-11 - 3.9811E+03 1.2526E-09 7.2183E-10 3.7460E-11 2.7514E-11 - 4.4668E+03 8.3049E-10 4.7713E-10 2.7323E-11 1.8859E-11 - 5.0119E+03 5.5290E-10 3.2171E-10 1.7169E-11 1.3180E-11 - 5.6234E+03 3.6521E-10 2.1120E-10 9.6422E-12 7.8573E-12 - 6.3096E+03 2.4075E-10 1.3653E-10 6.7348E-12 4.9936E-12 - 7.0795E+03 1.5794E-10 8.8137E-11 4.3773E-12 3.2512E-12 - 7.9433E+03 1.0353E-10 5.7640E-11 2.6369E-12 1.9742E-12 - 8.9125E+03 6.8044E-11 3.7767E-11 1.6738E-12 1.3520E-12 - 1.0000E+04 4.3826E-11 2.4611E-11 1.1565E-12 7.9483E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7941E+03 9.8459E+03 4.8057E+03 4.4563E+03 - 1.1220E-01 8.8096E+03 8.8031E+03 4.2961E+03 3.9638E+03 - 1.2589E-01 7.8508E+03 7.8269E+03 3.8003E+03 3.4853E+03 - 1.4125E-01 6.9178E+03 6.9159E+03 3.3257E+03 3.0206E+03 - 1.5849E-01 6.0216E+03 6.0071E+03 2.8883E+03 2.5816E+03 - 1.7783E-01 5.1656E+03 5.1284E+03 2.4875E+03 2.1826E+03 - 1.9953E-01 4.3539E+03 4.3361E+03 2.1013E+03 1.8268E+03 - 2.2387E-01 3.6298E+03 3.6117E+03 1.7504E+03 1.5132E+03 - 2.5119E-01 2.9950E+03 2.9652E+03 1.4487E+03 1.2418E+03 - 2.8184E-01 2.4328E+03 2.4006E+03 1.1772E+03 9.9904E+02 - 3.1623E-01 1.9466E+03 1.9198E+03 9.4355E+02 7.9473E+02 - 3.5481E-01 1.5466E+03 1.5251E+03 7.4830E+02 6.2437E+02 - 3.9811E-01 1.2202E+03 1.1935E+03 5.8949E+02 4.8457E+02 - 4.4668E-01 9.5087E+02 9.2442E+02 4.5896E+02 3.7472E+02 - 5.0119E-01 7.3325E+02 7.1122E+02 3.5176E+02 2.8524E+02 - 5.6234E-01 5.6198E+02 5.4312E+02 2.6731E+02 2.1488E+02 - 6.3096E-01 4.2936E+02 4.1230E+02 2.0058E+02 1.6078E+02 - 7.0795E-01 3.2487E+02 3.1029E+02 1.4977E+02 1.2020E+02 - 7.9433E-01 2.4568E+02 2.3250E+02 1.1082E+02 8.9983E+01 - 8.9125E-01 1.8609E+02 1.7473E+02 8.1563E+01 6.6153E+01 - 1.0000E+00 1.3874E+02 1.2850E+02 5.9789E+01 4.7078E+01 - 1.1220E+00 1.0378E+02 9.4517E+01 4.3334E+01 3.4120E+01 - 1.2589E+00 7.7576E+01 6.9675E+01 3.1119E+01 2.4677E+01 - 1.4125E+00 5.7972E+01 5.1566E+01 2.2307E+01 1.7665E+01 - 1.5849E+00 4.3038E+01 3.8062E+01 1.6009E+01 1.2519E+01 - 1.7783E+00 3.1752E+01 2.7655E+01 1.1455E+01 8.8391E+00 - 1.9953E+00 2.3406E+01 2.0011E+01 8.1837E+00 6.2144E+00 - 2.2387E+00 1.7121E+01 1.4416E+01 5.7851E+00 4.3344E+00 - 2.5119E+00 1.2538E+01 1.0403E+01 3.9747E+00 3.0238E+00 - 2.8184E+00 9.0868E+00 7.5298E+00 2.6998E+00 2.1145E+00 - 3.1623E+00 6.6262E+00 5.4522E+00 1.9097E+00 1.4666E+00 - 3.5481E+00 4.8271E+00 3.9077E+00 1.3175E+00 1.0090E+00 - 3.9811E+00 3.4893E+00 2.7827E+00 9.0334E-01 6.8333E-01 - 4.4668E+00 2.5152E+00 1.9999E+00 6.1463E-01 4.6498E-01 - 5.0119E+00 1.8195E+00 1.4318E+00 4.1578E-01 3.1242E-01 - 5.6234E+00 1.3200E+00 1.0244E+00 2.7702E-01 2.1051E-01 - 6.3096E+00 9.4851E-01 7.2638E-01 1.8596E-01 1.4392E-01 - 7.0795E+00 6.7681E-01 5.1567E-01 1.2693E-01 9.7337E-02 - 7.9433E+00 4.8190E-01 3.6332E-01 8.4532E-02 6.5403E-02 - 8.9125E+00 3.4242E-01 2.5915E-01 5.5910E-02 4.3624E-02 - 1.0000E+01 2.4943E-01 1.8529E-01 3.8212E-02 2.8810E-02 - 1.1220E+01 1.7860E-01 1.3225E-01 2.5539E-02 1.9613E-02 - 1.2589E+01 1.2774E-01 9.4082E-02 1.6841E-02 1.3040E-02 - 1.4125E+01 9.0607E-02 6.6601E-02 1.1238E-02 8.8944E-03 - 1.5849E+01 6.4017E-02 4.6815E-02 7.4342E-03 5.9180E-03 - 1.7783E+01 4.5320E-02 3.2976E-02 4.9594E-03 3.8335E-03 - 1.9953E+01 3.2170E-02 2.3276E-02 3.3304E-03 2.5376E-03 - 2.2387E+01 2.2921E-02 1.6480E-02 2.2257E-03 1.7527E-03 - 2.5119E+01 1.6481E-02 1.1693E-02 1.4955E-03 1.2165E-03 - 2.8184E+01 1.1638E-02 8.1636E-03 9.8052E-04 7.5240E-04 - 3.1623E+01 8.2033E-03 5.8591E-03 6.6407E-04 5.2366E-04 - 3.5481E+01 5.7826E-03 4.1109E-03 4.4960E-04 3.5410E-04 - 3.9811E+01 4.0885E-03 2.8912E-03 2.9787E-04 2.4464E-04 - 4.4668E+01 2.8936E-03 2.0272E-03 2.0074E-04 1.6647E-04 - 5.0119E+01 2.0372E-03 1.4209E-03 1.3493E-04 1.1140E-04 - 5.6234E+01 1.4300E-03 9.9870E-04 9.1016E-05 7.4834E-05 - 6.3096E+01 1.0004E-03 6.9512E-04 6.1626E-05 4.9854E-05 - 7.0795E+01 7.0277E-04 4.8512E-04 4.0939E-05 3.4094E-05 - 7.9433E+01 4.9424E-04 3.3953E-04 2.9186E-05 2.3381E-05 - 8.9125E+01 3.4511E-04 2.3562E-04 2.0367E-05 1.5582E-05 - 1.0000E+02 2.4320E-04 1.6539E-04 1.2935E-05 1.0638E-05 - 1.1220E+02 1.6957E-04 1.1466E-04 8.7845E-06 7.3171E-06 - 1.2589E+02 1.1862E-04 7.9733E-05 5.9914E-06 5.0308E-06 - 1.4125E+02 8.2942E-05 5.5272E-05 4.1322E-06 3.4113E-06 - 1.5849E+02 5.7936E-05 3.8356E-05 2.7855E-06 2.2893E-06 - 1.7783E+02 4.0670E-05 2.6661E-05 1.8874E-06 1.5239E-06 - 1.9953E+02 2.8273E-05 1.8331E-05 1.3118E-06 1.0393E-06 - 2.2387E+02 1.9623E-05 1.2772E-05 8.9924E-07 7.2411E-07 - 2.5119E+02 1.3636E-05 8.8571E-06 6.0661E-07 4.9790E-07 - 2.8184E+02 9.5096E-06 6.0611E-06 4.0483E-07 3.3171E-07 - 3.1623E+02 6.5830E-06 4.2138E-06 2.7970E-07 2.1726E-07 - 3.5481E+02 4.5504E-06 2.8784E-06 1.8857E-07 1.4999E-07 - 3.9811E+02 3.1431E-06 1.9765E-06 1.2617E-07 9.8554E-08 - 4.4668E+02 2.1694E-06 1.3662E-06 8.4275E-08 6.5562E-08 - 5.0119E+02 1.5042E-06 9.3778E-07 5.8420E-08 4.5103E-08 - 5.6234E+02 1.0419E-06 6.4332E-07 3.7589E-08 2.9607E-08 - 6.3096E+02 7.1025E-07 4.3442E-07 2.5038E-08 1.9952E-08 - 7.0795E+02 4.8446E-07 2.9571E-07 1.7686E-08 1.3538E-08 - 7.9433E+02 3.3156E-07 2.0195E-07 1.2032E-08 9.4449E-09 - 8.9125E+02 2.2552E-07 1.3748E-07 8.0713E-09 6.2651E-09 - 1.0000E+03 1.5501E-07 9.3718E-08 5.1104E-09 4.0497E-09 - 1.1220E+03 1.0418E-07 6.2590E-08 3.3278E-09 2.7317E-09 - 1.2589E+03 7.0124E-08 4.2064E-08 2.1874E-09 1.7650E-09 - 1.4125E+03 4.7303E-08 2.8212E-08 1.5071E-09 1.1842E-09 - 1.5849E+03 3.1760E-08 1.8986E-08 1.0238E-09 7.5549E-10 - 1.7783E+03 2.1430E-08 1.2692E-08 6.8374E-10 5.1124E-10 - 1.9953E+03 1.4441E-08 8.4895E-09 4.6686E-10 3.4603E-10 - 2.2387E+03 9.6625E-09 5.6154E-09 2.8131E-10 2.0496E-10 - 2.5119E+03 6.4613E-09 3.7096E-09 1.8960E-10 1.3642E-10 - 2.8184E+03 4.2812E-09 2.4467E-09 1.3712E-10 1.0101E-10 - 3.1623E+03 2.9248E-09 1.7175E-09 8.5601E-11 6.6069E-11 - 3.5481E+03 1.9255E-09 1.1069E-09 5.6092E-11 4.2058E-11 - 3.9811E+03 1.2745E-09 7.2664E-10 3.5658E-11 2.7440E-11 - 4.4668E+03 8.3648E-10 4.8316E-10 2.2352E-11 1.8237E-11 - 5.0119E+03 5.4836E-10 3.2122E-10 1.5449E-11 1.0453E-11 - 5.6234E+03 3.5590E-10 2.0934E-10 1.0191E-11 6.6074E-12 - 6.3096E+03 2.3894E-10 1.3501E-10 7.0267E-12 5.1059E-12 - 7.0795E+03 1.5781E-10 8.8273E-11 4.8612E-12 3.3453E-12 - 7.9433E+03 1.0251E-10 5.7192E-11 3.0816E-12 2.0929E-12 - 8.9125E+03 6.7274E-11 3.8237E-11 1.7680E-12 1.3055E-12 - 1.0000E+04 4.4910E-11 2.5319E-11 1.1597E-12 8.2852E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7987E+03 9.8546E+03 4.8181E+03 4.4643E+03 - 1.1220E-01 8.8102E+03 8.8614E+03 4.3112E+03 3.9762E+03 - 1.2589E-01 7.8472E+03 7.8892E+03 3.8155E+03 3.4698E+03 - 1.4125E-01 6.9227E+03 6.9340E+03 3.3577E+03 2.9967E+03 - 1.5849E-01 6.0231E+03 6.0162E+03 2.9156E+03 2.5665E+03 - 1.7783E-01 5.1615E+03 5.1538E+03 2.4796E+03 2.1993E+03 - 1.9953E-01 4.3626E+03 4.3428E+03 2.0923E+03 1.8536E+03 - 2.2387E-01 3.6323E+03 3.6063E+03 1.7491E+03 1.5194E+03 - 2.5119E-01 2.9829E+03 2.9570E+03 1.4424E+03 1.2366E+03 - 2.8184E-01 2.4222E+03 2.3945E+03 1.1764E+03 9.9774E+02 - 3.1623E-01 1.9448E+03 1.9180E+03 9.4654E+02 7.9563E+02 - 3.5481E-01 1.5473E+03 1.5249E+03 7.5077E+02 6.2710E+02 - 3.9811E-01 1.2209E+03 1.1965E+03 5.8955E+02 4.8680E+02 - 4.4668E-01 9.5487E+02 9.2756E+02 4.5841E+02 3.7360E+02 - 5.0119E-01 7.3479E+02 7.1228E+02 3.5221E+02 2.8558E+02 - 5.6234E-01 5.6182E+02 5.4262E+02 2.6774E+02 2.1541E+02 - 6.3096E-01 4.3084E+02 4.1296E+02 2.0191E+02 1.6048E+02 - 7.0795E-01 3.2639E+02 3.1148E+02 1.5017E+02 1.2002E+02 - 7.9433E-01 2.4585E+02 2.3225E+02 1.1178E+02 8.8698E+01 - 8.9125E-01 1.8469E+02 1.7200E+02 8.3589E+01 6.5016E+01 - 1.0000E+00 1.3851E+02 1.2831E+02 6.0016E+01 4.7172E+01 - 1.1220E+00 1.0386E+02 9.4970E+01 4.3544E+01 3.3867E+01 - 1.2589E+00 7.7513E+01 7.0279E+01 3.1246E+01 2.4547E+01 - 1.4125E+00 5.7983E+01 5.1973E+01 2.2606E+01 1.7661E+01 - 1.5849E+00 4.3047E+01 3.8046E+01 1.6222E+01 1.2476E+01 - 1.7783E+00 3.1647E+01 2.7703E+01 1.1427E+01 8.8253E+00 - 1.9953E+00 2.3445E+01 2.0120E+01 8.1352E+00 6.2882E+00 - 2.2387E+00 1.7337E+01 1.4554E+01 5.7011E+00 4.4557E+00 - 2.5119E+00 1.2623E+01 1.0431E+01 3.9807E+00 3.1109E+00 - 2.8184E+00 9.1329E+00 7.5071E+00 2.7789E+00 2.1124E+00 - 3.1623E+00 6.6420E+00 5.4637E+00 1.9163E+00 1.4704E+00 - 3.5481E+00 4.8501E+00 3.9287E+00 1.3171E+00 1.0016E+00 - 3.9811E+00 3.5355E+00 2.8093E+00 9.0121E-01 6.8308E-01 - 4.4668E+00 2.5648E+00 2.0056E+00 6.1493E-01 4.6327E-01 - 5.0119E+00 1.8585E+00 1.4345E+00 4.1477E-01 3.1186E-01 - 5.6234E+00 1.3311E+00 1.0269E+00 2.7989E-01 2.1638E-01 - 6.3096E+00 9.5045E-01 7.3778E-01 1.8921E-01 1.4734E-01 - 7.0795E+00 6.8315E-01 5.2285E-01 1.2783E-01 9.6046E-02 - 7.9433E+00 4.8799E-01 3.6783E-01 8.4568E-02 6.4409E-02 - 8.9125E+00 3.4981E-01 2.6437E-01 5.7855E-02 4.4211E-02 - 1.0000E+01 2.5117E-01 1.8674E-01 3.8905E-02 2.9393E-02 - 1.1220E+01 1.7880E-01 1.3267E-01 2.5768E-02 1.9524E-02 - 1.2589E+01 1.2755E-01 9.4472E-02 1.7087E-02 1.2996E-02 - 1.4125E+01 9.0552E-02 6.7215E-02 1.1205E-02 8.7618E-03 - 1.5849E+01 6.4816E-02 4.7613E-02 7.5531E-03 5.7917E-03 - 1.7783E+01 4.6023E-02 3.3975E-02 5.0548E-03 3.8597E-03 - 1.9953E+01 3.2583E-02 2.4508E-02 3.3221E-03 2.7101E-03 - 2.2387E+01 2.3064E-02 1.7122E-02 2.1626E-03 1.8391E-03 - 2.5119E+01 1.6209E-02 1.1957E-02 1.4241E-03 1.1829E-03 - 2.8184E+01 1.1492E-02 8.4316E-03 9.5721E-04 8.2112E-04 - 3.1623E+01 8.1969E-03 5.8478E-03 6.6763E-04 5.2517E-04 - 3.5481E+01 5.7863E-03 4.0979E-03 4.5243E-04 3.5575E-04 - 3.9811E+01 4.1022E-03 2.8952E-03 3.0625E-04 2.4362E-04 - 4.4668E+01 2.8882E-03 2.0407E-03 2.0317E-04 1.6351E-04 - 5.0119E+01 2.0389E-03 1.4195E-03 1.3599E-04 1.1025E-04 - 5.6234E+01 1.4358E-03 9.9176E-04 9.2030E-05 7.5970E-05 - 6.3096E+01 1.0052E-03 6.9935E-04 6.1693E-05 5.0408E-05 - 7.0795E+01 7.0700E-04 4.9051E-04 4.1522E-05 3.4053E-05 - 7.9433E+01 4.9444E-04 3.4030E-04 2.8103E-05 2.3544E-05 - 8.9125E+01 3.4801E-04 2.3815E-04 1.9576E-05 1.5790E-05 - 1.0000E+02 2.4279E-04 1.6518E-04 1.3535E-05 1.0809E-05 - 1.1220E+02 1.6969E-04 1.1511E-04 9.1153E-06 7.4217E-06 - 1.2589E+02 1.1885E-04 8.0240E-05 6.1400E-06 4.9222E-06 - 1.4125E+02 8.2785E-05 5.5786E-05 4.1251E-06 3.3771E-06 - 1.5849E+02 5.7689E-05 3.8458E-05 2.7577E-06 2.3588E-06 - 1.7783E+02 4.0403E-05 2.6687E-05 1.9058E-06 1.5645E-06 - 1.9953E+02 2.8409E-05 1.8499E-05 1.3176E-06 1.0598E-06 - 2.2387E+02 1.9778E-05 1.2751E-05 9.0114E-07 7.2977E-07 - 2.5119E+02 1.3644E-05 8.8002E-06 6.0218E-07 4.8793E-07 - 2.8184E+02 9.4570E-06 6.0506E-06 4.0496E-07 3.2027E-07 - 3.1623E+02 6.5977E-06 4.1992E-06 2.7528E-07 2.1865E-07 - 3.5481E+02 4.5254E-06 2.8990E-06 1.8380E-07 1.5073E-07 - 3.9811E+02 3.1408E-06 1.9928E-06 1.2346E-07 1.0272E-07 - 4.4668E+02 2.1868E-06 1.3631E-06 8.5598E-08 6.8447E-08 - 5.0119E+02 1.5063E-06 9.3461E-07 5.7527E-08 4.5859E-08 - 5.6234E+02 1.0384E-06 6.4199E-07 3.9317E-08 2.9989E-08 - 6.3096E+02 7.0854E-07 4.3407E-07 2.7100E-08 1.9663E-08 - 7.0795E+02 4.8661E-07 2.9600E-07 1.7338E-08 1.3758E-08 - 7.9433E+02 3.3171E-07 2.0251E-07 1.1615E-08 9.1156E-09 - 8.9125E+02 2.2536E-07 1.3710E-07 7.5879E-09 5.7165E-09 - 1.0000E+03 1.5522E-07 9.2547E-08 5.2005E-09 3.8782E-09 - 1.1220E+03 1.0417E-07 6.2261E-08 3.3798E-09 2.6038E-09 - 1.2589E+03 7.0474E-08 4.2054E-08 2.1957E-09 1.7630E-09 - 1.4125E+03 4.7583E-08 2.8279E-08 1.5495E-09 1.1438E-09 - 1.5849E+03 3.2112E-08 1.8768E-08 1.0471E-09 7.6241E-10 - 1.7783E+03 2.1559E-08 1.2573E-08 6.7058E-10 4.9144E-10 - 1.9953E+03 1.4442E-08 8.5201E-09 4.5770E-10 3.1413E-10 - 2.2387E+03 9.5963E-09 5.6492E-09 2.8661E-10 2.0374E-10 - 2.5119E+03 6.4584E-09 3.6866E-09 1.8134E-10 1.2013E-10 - 2.8184E+03 4.3188E-09 2.4664E-09 1.2813E-10 8.3233E-11 - 3.1623E+03 2.9278E-09 1.6952E-09 8.2587E-11 6.3387E-11 - 3.5481E+03 1.8871E-09 1.0902E-09 5.4969E-11 4.0307E-11 - 3.9811E+03 1.2621E-09 7.1299E-10 3.6207E-11 2.5666E-11 - 4.4668E+03 8.3714E-10 4.7226E-10 2.3370E-11 1.7683E-11 - 5.0119E+03 5.4800E-10 3.0774E-10 1.5442E-11 1.1295E-11 - 5.6234E+03 3.6636E-10 1.9940E-10 1.0907E-11 6.9839E-12 - 6.3096E+03 2.3945E-10 1.3648E-10 7.2150E-12 4.7277E-12 - 7.0795E+03 1.5713E-10 8.9162E-11 4.5958E-12 3.2488E-12 - 7.9433E+03 1.0247E-10 5.8926E-11 2.6187E-12 2.0846E-12 - 8.9125E+03 6.7564E-11 3.8171E-11 1.5956E-12 1.2666E-12 - 1.0000E+04 4.5204E-11 2.4355E-11 1.1139E-12 9.1577E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8058E+03 9.9117E+03 4.8236E+03 4.4528E+03 - 1.1220E-01 8.8061E+03 8.8799E+03 4.3301E+03 3.9564E+03 - 1.2589E-01 7.8499E+03 7.8925E+03 3.8335E+03 3.4784E+03 - 1.4125E-01 6.9161E+03 6.9209E+03 3.3437E+03 3.0201E+03 - 1.5849E-01 6.0164E+03 6.0041E+03 2.8923E+03 2.5868E+03 - 1.7783E-01 5.1689E+03 5.1439E+03 2.4819E+03 2.1815E+03 - 1.9953E-01 4.3731E+03 4.3462E+03 2.1001E+03 1.8213E+03 - 2.2387E-01 3.6475E+03 3.6102E+03 1.7516E+03 1.5125E+03 - 2.5119E-01 2.9893E+03 2.9649E+03 1.4501E+03 1.2343E+03 - 2.8184E-01 2.4267E+03 2.4035E+03 1.1798E+03 9.9481E+02 - 3.1623E-01 1.9527E+03 1.9207E+03 9.4581E+02 7.9490E+02 - 3.5481E-01 1.5463E+03 1.5251E+03 7.5603E+02 6.2385E+02 - 3.9811E-01 1.2184E+03 1.1985E+03 5.9574E+02 4.8374E+02 - 4.4668E-01 9.5502E+02 9.3032E+02 4.6010E+02 3.7334E+02 - 5.0119E-01 7.3875E+02 7.1283E+02 3.5169E+02 2.8614E+02 - 5.6234E-01 5.6641E+02 5.4288E+02 2.6586E+02 2.1622E+02 - 6.3096E-01 4.3181E+02 4.1051E+02 1.9997E+02 1.6296E+02 - 7.0795E-01 3.2706E+02 3.0852E+02 1.5061E+02 1.2069E+02 - 7.9433E-01 2.4809E+02 2.3258E+02 1.1202E+02 8.9201E+01 - 8.9125E-01 1.8594E+02 1.7364E+02 8.2544E+01 6.5659E+01 - 1.0000E+00 1.3821E+02 1.2868E+02 5.9797E+01 4.7385E+01 - 1.1220E+00 1.0400E+02 9.5426E+01 4.3632E+01 3.3988E+01 - 1.2589E+00 7.8168E+01 7.0134E+01 3.1558E+01 2.4405E+01 - 1.4125E+00 5.8031E+01 5.1778E+01 2.2793E+01 1.7590E+01 - 1.5849E+00 4.2880E+01 3.7942E+01 1.6290E+01 1.2633E+01 - 1.7783E+00 3.1696E+01 2.7602E+01 1.1527E+01 8.9398E+00 - 1.9953E+00 2.3432E+01 2.0231E+01 8.1268E+00 6.2518E+00 - 2.2387E+00 1.7254E+01 1.4646E+01 5.7100E+00 4.3868E+00 - 2.5119E+00 1.2641E+01 1.0531E+01 4.0047E+00 3.0335E+00 - 2.8184E+00 9.2926E+00 7.5687E+00 2.7860E+00 2.0897E+00 - 3.1623E+00 6.7228E+00 5.4799E+00 1.9014E+00 1.4488E+00 - 3.5481E+00 4.8557E+00 3.9092E+00 1.3075E+00 1.0053E+00 - 3.9811E+00 3.5180E+00 2.7963E+00 8.9277E-01 6.8476E-01 - 4.4668E+00 2.5558E+00 2.0074E+00 6.0960E-01 4.6069E-01 - 5.0119E+00 1.8440E+00 1.4396E+00 4.1443E-01 3.1161E-01 - 5.6234E+00 1.3263E+00 1.0363E+00 2.8270E-01 2.1384E-01 - 6.3096E+00 9.5384E-01 7.3685E-01 1.9049E-01 1.4537E-01 - 7.0795E+00 6.8521E-01 5.2373E-01 1.2910E-01 9.6741E-02 - 7.9433E+00 4.9119E-01 3.7343E-01 8.6887E-02 6.6115E-02 - 8.9125E+00 3.4917E-01 2.6362E-01 5.6964E-02 4.4829E-02 - 1.0000E+01 2.4905E-01 1.8659E-01 3.7675E-02 2.9360E-02 - 1.1220E+01 1.7741E-01 1.3277E-01 2.5123E-02 1.9636E-02 - 1.2589E+01 1.2570E-01 9.3475E-02 1.6845E-02 1.3059E-02 - 1.4125E+01 8.9618E-02 6.5875E-02 1.1153E-02 8.4701E-03 - 1.5849E+01 6.4330E-02 4.6682E-02 7.5180E-03 5.7124E-03 - 1.7783E+01 4.6276E-02 3.3173E-02 5.0522E-03 3.9183E-03 - 1.9953E+01 3.2667E-02 2.3505E-02 3.3113E-03 2.6183E-03 - 2.2387E+01 2.3162E-02 1.6682E-02 2.2206E-03 1.7550E-03 - 2.5119E+01 1.6570E-02 1.1700E-02 1.4681E-03 1.2020E-03 - 2.8184E+01 1.1539E-02 8.2199E-03 9.6816E-04 8.1455E-04 - 3.1623E+01 8.1773E-03 5.8274E-03 6.6745E-04 5.2360E-04 - 3.5481E+01 5.7740E-03 4.1072E-03 4.4703E-04 3.5429E-04 - 3.9811E+01 4.0841E-03 2.8775E-03 3.0340E-04 2.4088E-04 - 4.4668E+01 2.8787E-03 2.0239E-03 2.0261E-04 1.5933E-04 - 5.0119E+01 2.0224E-03 1.4256E-03 1.3490E-04 1.0675E-04 - 5.6234E+01 1.4181E-03 9.9404E-04 9.2407E-05 7.4285E-05 - 6.3096E+01 1.0000E-03 6.9694E-04 6.2537E-05 5.1242E-05 - 7.0795E+01 7.0272E-04 4.8366E-04 4.1502E-05 3.4502E-05 - 7.9433E+01 4.9186E-04 3.3729E-04 2.7405E-05 2.3195E-05 - 8.9125E+01 3.4502E-04 2.3639E-04 1.8338E-05 1.5552E-05 - 1.0000E+02 2.4315E-04 1.6481E-04 1.3110E-05 1.0887E-05 - 1.1220E+02 1.6970E-04 1.1430E-04 8.9603E-06 7.3683E-06 - 1.2589E+02 1.1878E-04 7.9593E-05 6.1269E-06 4.9799E-06 - 1.4125E+02 8.3017E-05 5.5370E-05 4.1645E-06 3.3540E-06 - 1.5849E+02 5.7597E-05 3.8617E-05 2.7882E-06 2.2513E-06 - 1.7783E+02 3.9928E-05 2.6769E-05 1.9294E-06 1.5645E-06 - 1.9953E+02 2.7880E-05 1.8551E-05 1.3147E-06 1.0655E-06 - 2.2387E+02 1.9464E-05 1.2714E-05 9.0067E-07 7.1422E-07 - 2.5119E+02 1.3570E-05 8.7916E-06 6.3063E-07 4.9989E-07 - 2.8184E+02 9.4153E-06 6.0585E-06 4.1611E-07 3.3594E-07 - 3.1623E+02 6.5842E-06 4.1866E-06 2.7520E-07 2.2505E-07 - 3.5481E+02 4.5503E-06 2.8784E-06 1.8706E-07 1.4969E-07 - 3.9811E+02 3.1450E-06 1.9876E-06 1.2553E-07 9.7692E-08 - 4.4668E+02 2.1758E-06 1.3602E-06 8.5139E-08 6.5687E-08 - 5.0119E+02 1.5021E-06 9.2833E-07 5.7505E-08 4.4575E-08 - 5.6234E+02 1.0366E-06 6.3883E-07 3.9007E-08 2.9591E-08 - 6.3096E+02 7.0595E-07 4.3435E-07 2.6377E-08 1.9960E-08 - 7.0795E+02 4.8442E-07 2.9750E-07 1.8060E-08 1.3321E-08 - 7.9433E+02 3.3103E-07 2.0148E-07 1.2109E-08 8.9856E-09 - 8.9125E+02 2.2466E-07 1.3573E-07 7.8111E-09 5.9208E-09 - 1.0000E+03 1.5433E-07 9.2688E-08 5.3481E-09 3.9737E-09 - 1.1220E+03 1.0395E-07 6.2508E-08 3.5250E-09 2.5362E-09 - 1.2589E+03 7.0141E-08 4.2037E-08 2.2574E-09 1.5793E-09 - 1.4125E+03 4.7542E-08 2.8064E-08 1.4968E-09 1.1749E-09 - 1.5849E+03 3.2071E-08 1.8828E-08 9.8056E-10 7.9771E-10 - 1.7783E+03 2.1534E-08 1.2593E-08 6.4294E-10 5.0832E-10 - 1.9953E+03 1.4503E-08 8.4734E-09 4.6203E-10 3.3099E-10 - 2.2387E+03 9.7130E-09 5.6320E-09 3.1568E-10 2.2299E-10 - 2.5119E+03 6.4400E-09 3.7324E-09 2.1162E-10 1.5186E-10 - 2.8184E+03 4.2948E-09 2.4471E-09 1.3925E-10 1.0157E-10 - 3.1623E+03 2.9126E-09 1.6769E-09 8.9937E-11 6.0799E-11 - 3.5481E+03 1.8957E-09 1.0959E-09 5.8276E-11 4.0260E-11 - 3.9811E+03 1.2617E-09 7.2742E-10 3.7639E-11 2.7637E-11 - 4.4668E+03 8.3575E-10 4.8027E-10 2.5406E-11 1.7583E-11 - 5.0119E+03 5.5604E-10 3.1765E-10 1.7182E-11 1.1471E-11 - 5.6234E+03 3.6909E-10 2.0595E-10 1.0722E-11 6.7467E-12 - 6.3096E+03 2.4059E-10 1.3519E-10 6.6779E-12 5.0002E-12 - 7.0795E+03 1.5717E-10 8.8780E-11 4.3365E-12 3.4091E-12 - 7.9433E+03 1.0439E-10 5.7514E-11 2.9014E-12 2.3405E-12 - 8.9125E+03 6.7956E-11 3.7532E-11 2.0904E-12 1.4147E-12 - 1.0000E+04 4.4845E-11 2.4823E-11 1.3901E-12 8.3202E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8206E+03 9.9043E+03 4.8506E+03 4.4394E+03 - 1.1220E-01 8.8203E+03 8.8782E+03 4.3583E+03 3.9506E+03 - 1.2589E-01 7.8550E+03 7.9000E+03 3.8623E+03 3.4646E+03 - 1.4125E-01 6.9258E+03 6.9652E+03 3.3570E+03 3.0018E+03 - 1.5849E-01 6.0334E+03 6.0603E+03 2.9069E+03 2.5769E+03 - 1.7783E-01 5.1635E+03 5.1762E+03 2.4977E+03 2.1935E+03 - 1.9953E-01 4.3550E+03 4.3688E+03 2.1144E+03 1.8350E+03 - 2.2387E-01 3.6400E+03 3.6313E+03 1.7613E+03 1.5190E+03 - 2.5119E-01 2.9956E+03 2.9728E+03 1.4604E+03 1.2389E+03 - 2.8184E-01 2.4355E+03 2.4071E+03 1.1865E+03 9.9691E+02 - 3.1623E-01 1.9542E+03 1.9272E+03 9.5269E+02 7.9357E+02 - 3.5481E-01 1.5511E+03 1.5286E+03 7.5874E+02 6.2466E+02 - 3.9811E-01 1.2193E+03 1.1956E+03 5.9074E+02 4.8665E+02 - 4.4668E-01 9.4906E+02 9.2794E+02 4.5765E+02 3.7411E+02 - 5.0119E-01 7.3369E+02 7.1529E+02 3.5289E+02 2.8637E+02 - 5.6234E-01 5.5923E+02 5.4484E+02 2.6763E+02 2.1621E+02 - 6.3096E-01 4.2758E+02 4.1385E+02 2.0199E+02 1.6251E+02 - 7.0795E-01 3.2537E+02 3.1150E+02 1.5111E+02 1.2108E+02 - 7.9433E-01 2.4650E+02 2.3171E+02 1.1122E+02 8.9680E+01 - 8.9125E-01 1.8580E+02 1.7239E+02 8.1185E+01 6.5584E+01 - 1.0000E+00 1.3883E+02 1.2810E+02 5.9644E+01 4.6691E+01 - 1.1220E+00 1.0410E+02 9.5020E+01 4.3426E+01 3.3913E+01 - 1.2589E+00 7.7793E+01 7.0192E+01 3.1317E+01 2.4588E+01 - 1.4125E+00 5.7830E+01 5.1697E+01 2.2464E+01 1.7277E+01 - 1.5849E+00 4.2618E+01 3.7958E+01 1.5988E+01 1.2346E+01 - 1.7783E+00 3.1690E+01 2.7745E+01 1.1338E+01 8.8743E+00 - 1.9953E+00 2.3473E+01 2.0214E+01 8.0800E+00 6.1936E+00 - 2.2387E+00 1.7197E+01 1.4560E+01 5.6776E+00 4.3372E+00 - 2.5119E+00 1.2559E+01 1.0432E+01 3.9335E+00 3.0615E+00 - 2.8184E+00 9.0728E+00 7.4700E+00 2.7358E+00 2.0973E+00 - 3.1623E+00 6.6882E+00 5.4437E+00 1.9029E+00 1.4558E+00 - 3.5481E+00 4.8578E+00 3.9159E+00 1.3190E+00 9.9036E-01 - 3.9811E+00 3.5140E+00 2.7970E+00 9.0389E-01 6.7435E-01 - 4.4668E+00 2.5419E+00 2.0024E+00 6.1433E-01 4.6748E-01 - 5.0119E+00 1.8293E+00 1.4428E+00 4.2006E-01 3.1738E-01 - 5.6234E+00 1.3190E+00 1.0319E+00 2.8142E-01 2.1376E-01 - 6.3096E+00 9.4814E-01 7.3195E-01 1.8736E-01 1.4276E-01 - 7.0795E+00 6.7922E-01 5.2075E-01 1.2688E-01 9.5323E-02 - 7.9433E+00 4.8772E-01 3.7344E-01 8.6299E-02 6.5497E-02 - 8.9125E+00 3.4951E-01 2.6325E-01 5.6965E-02 4.3686E-02 - 1.0000E+01 2.4923E-01 1.8614E-01 3.8639E-02 2.9167E-02 - 1.1220E+01 1.7784E-01 1.3271E-01 2.5944E-02 1.9467E-02 - 1.2589E+01 1.2730E-01 9.3675E-02 1.7210E-02 1.2950E-02 - 1.4125E+01 9.1024E-02 6.6134E-02 1.1227E-02 8.8047E-03 - 1.5849E+01 6.4573E-02 4.6729E-02 7.3804E-03 5.8560E-03 - 1.7783E+01 4.5977E-02 3.3130E-02 4.9664E-03 3.9127E-03 - 1.9953E+01 3.2509E-02 2.3699E-02 3.2688E-03 2.6084E-03 - 2.2387E+01 2.3051E-02 1.6841E-02 2.2026E-03 1.7544E-03 - 2.5119E+01 1.6278E-02 1.1926E-02 1.4739E-03 1.1862E-03 - 2.8184E+01 1.1520E-02 8.3263E-03 9.1167E-04 7.9330E-04 - 3.1623E+01 8.2198E-03 5.8612E-03 6.6568E-04 5.3120E-04 - 3.5481E+01 5.8093E-03 4.1209E-03 4.4723E-04 3.6060E-04 - 3.9811E+01 4.1044E-03 2.9053E-03 2.9871E-04 2.3808E-04 - 4.4668E+01 2.8976E-03 2.0467E-03 1.9990E-04 1.6332E-04 - 5.0119E+01 2.0395E-03 1.4296E-03 1.3607E-04 1.1265E-04 - 5.6234E+01 1.4362E-03 1.0019E-03 9.1103E-05 7.4054E-05 - 6.3096E+01 1.0082E-03 7.0285E-04 6.2702E-05 5.0844E-05 - 7.0795E+01 7.0582E-04 4.9202E-04 4.3045E-05 3.4664E-05 - 7.9433E+01 4.9346E-04 3.4635E-04 2.9000E-05 2.3915E-05 - 8.9125E+01 3.4779E-04 2.3976E-04 1.9997E-05 1.6240E-05 - 1.0000E+02 2.4299E-04 1.6552E-04 1.3210E-05 1.0675E-05 - 1.1220E+02 1.6997E-04 1.1500E-04 8.9613E-06 7.4674E-06 - 1.2589E+02 1.1902E-04 7.9951E-05 6.0579E-06 5.0723E-06 - 1.4125E+02 8.2865E-05 5.5808E-05 4.0114E-06 3.3766E-06 - 1.5849E+02 5.7881E-05 3.8686E-05 2.7900E-06 2.2973E-06 - 1.7783E+02 4.0457E-05 2.6530E-05 1.9620E-06 1.6050E-06 - 1.9953E+02 2.8200E-05 1.8329E-05 1.3219E-06 1.0885E-06 - 2.2387E+02 1.9601E-05 1.2737E-05 8.9098E-07 7.1497E-07 - 2.5119E+02 1.3678E-05 8.8645E-06 5.8104E-07 4.8157E-07 - 2.8184E+02 9.4942E-06 6.1275E-06 3.9365E-07 3.2061E-07 - 3.1623E+02 6.5874E-06 4.2004E-06 2.7513E-07 2.1871E-07 - 3.5481E+02 4.5480E-06 2.8830E-06 1.8367E-07 1.4716E-07 - 3.9811E+02 3.1630E-06 1.9778E-06 1.2317E-07 9.9154E-08 - 4.4668E+02 2.1858E-06 1.3545E-06 8.4630E-08 6.5277E-08 - 5.0119E+02 1.4979E-06 9.2918E-07 5.7889E-08 4.3690E-08 - 5.6234E+02 1.0351E-06 6.4352E-07 3.9031E-08 2.9472E-08 - 6.3096E+02 7.0465E-07 4.3900E-07 2.5522E-08 1.9882E-08 - 7.0795E+02 4.7732E-07 2.9655E-07 1.7268E-08 1.3151E-08 - 7.9433E+02 3.2720E-07 2.0137E-07 1.1815E-08 8.3323E-09 - 8.9125E+02 2.2486E-07 1.3674E-07 7.8924E-09 5.5532E-09 - 1.0000E+03 1.5348E-07 9.3295E-08 5.2793E-09 3.8605E-09 - 1.1220E+03 1.0327E-07 6.2460E-08 3.5617E-09 2.6754E-09 - 1.2589E+03 7.0122E-08 4.1859E-08 2.2703E-09 1.7721E-09 - 1.4125E+03 4.7781E-08 2.8136E-08 1.5497E-09 1.1539E-09 - 1.5849E+03 3.2203E-08 1.8663E-08 1.0731E-09 7.6752E-10 - 1.7783E+03 2.1478E-08 1.2493E-08 6.9122E-10 5.1949E-10 - 1.9953E+03 1.4467E-08 8.5451E-09 4.5895E-10 3.3699E-10 - 2.2387E+03 9.6869E-09 5.7266E-09 3.0167E-10 2.1683E-10 - 2.5119E+03 6.4754E-09 3.8528E-09 2.0882E-10 1.4357E-10 - 2.8184E+03 4.2833E-09 2.5491E-09 1.4356E-10 8.9540E-11 - 3.1623E+03 2.9284E-09 1.7018E-09 8.9424E-11 6.2423E-11 - 3.5481E+03 1.9060E-09 1.0997E-09 5.9822E-11 4.1575E-11 - 3.9811E+03 1.2652E-09 7.1343E-10 3.9736E-11 2.6410E-11 - 4.4668E+03 8.3825E-10 4.7336E-10 2.2512E-11 1.7256E-11 - 5.0119E+03 5.5437E-10 3.1214E-10 1.4082E-11 1.1249E-11 - 5.6234E+03 3.6414E-10 2.0491E-10 9.1577E-12 8.2940E-12 - 6.3096E+03 2.3839E-10 1.3685E-10 6.5005E-12 4.8483E-12 - 7.0795E+03 1.5723E-10 8.8548E-11 4.2517E-12 3.0585E-12 - 7.9433E+03 1.0349E-10 5.7972E-11 2.9007E-12 2.0981E-12 - 8.9125E+03 6.7630E-11 3.7989E-11 1.9501E-12 1.4157E-12 - 1.0000E+04 4.5168E-11 2.5074E-11 1.2930E-12 8.9274E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8117E+03 9.9785E+03 4.8657E+03 4.4518E+03 - 1.1220E-01 8.8118E+03 8.9212E+03 4.3698E+03 3.9635E+03 - 1.2589E-01 7.8541E+03 7.9398E+03 3.8557E+03 3.4848E+03 - 1.4125E-01 6.9432E+03 7.0002E+03 3.3686E+03 3.0152E+03 - 1.5849E-01 6.0415E+03 6.0669E+03 2.9244E+03 2.5727E+03 - 1.7783E-01 5.1764E+03 5.1790E+03 2.5106E+03 2.1832E+03 - 1.9953E-01 4.3762E+03 4.3566E+03 2.1205E+03 1.8277E+03 - 2.2387E-01 3.6436E+03 3.6283E+03 1.7739E+03 1.5121E+03 - 2.5119E-01 2.9910E+03 2.9790E+03 1.4626E+03 1.2340E+03 - 2.8184E-01 2.4314E+03 2.4048E+03 1.1837E+03 9.9358E+02 - 3.1623E-01 1.9527E+03 1.9265E+03 9.5238E+02 7.9365E+02 - 3.5481E-01 1.5465E+03 1.5244E+03 7.5657E+02 6.2540E+02 - 3.9811E-01 1.2182E+03 1.1951E+03 5.9077E+02 4.8745E+02 - 4.4668E-01 9.5676E+02 9.2695E+02 4.5860E+02 3.7343E+02 - 5.0119E-01 7.4074E+02 7.0999E+02 3.5148E+02 2.8327E+02 - 5.6234E-01 5.6471E+02 5.4378E+02 2.6780E+02 2.1549E+02 - 6.3096E-01 4.2821E+02 4.0907E+02 2.0242E+02 1.6226E+02 - 7.0795E-01 3.2410E+02 3.0832E+02 1.5072E+02 1.1970E+02 - 7.9433E-01 2.4631E+02 2.3294E+02 1.1146E+02 8.8171E+01 - 8.9125E-01 1.8562E+02 1.7439E+02 8.1904E+01 6.4358E+01 - 1.0000E+00 1.3901E+02 1.2911E+02 5.9524E+01 4.7145E+01 - 1.1220E+00 1.0386E+02 9.5658E+01 4.3418E+01 3.4268E+01 - 1.2589E+00 7.7772E+01 7.0523E+01 3.1411E+01 2.4764E+01 - 1.4125E+00 5.7865E+01 5.1580E+01 2.2441E+01 1.7560E+01 - 1.5849E+00 4.2968E+01 3.7753E+01 1.6073E+01 1.2475E+01 - 1.7783E+00 3.1798E+01 2.7642E+01 1.1493E+01 8.8811E+00 - 1.9953E+00 2.3474E+01 2.0080E+01 8.1197E+00 6.2845E+00 - 2.2387E+00 1.7307E+01 1.4602E+01 5.7097E+00 4.3890E+00 - 2.5119E+00 1.2598E+01 1.0569E+01 3.9571E+00 3.0368E+00 - 2.8184E+00 9.1409E+00 7.6067E+00 2.7625E+00 2.1267E+00 - 3.1623E+00 6.6958E+00 5.4770E+00 1.9178E+00 1.4556E+00 - 3.5481E+00 4.8547E+00 3.9441E+00 1.3155E+00 1.0060E+00 - 3.9811E+00 3.5171E+00 2.8187E+00 8.9314E-01 6.8726E-01 - 4.4668E+00 2.5567E+00 2.0114E+00 6.0644E-01 4.6679E-01 - 5.0119E+00 1.8455E+00 1.4380E+00 4.1477E-01 3.2047E-01 - 5.6234E+00 1.3253E+00 1.0300E+00 2.8485E-01 2.1483E-01 - 6.3096E+00 9.5768E-01 7.3649E-01 1.9308E-01 1.4311E-01 - 7.0795E+00 6.8756E-01 5.2600E-01 1.2780E-01 9.7781E-02 - 7.9433E+00 4.9415E-01 3.7119E-01 8.4448E-02 6.6960E-02 - 8.9125E+00 3.5401E-01 2.6436E-01 5.6151E-02 4.4476E-02 - 1.0000E+01 2.4897E-01 1.8768E-01 3.8231E-02 2.9393E-02 - 1.1220E+01 1.7764E-01 1.3294E-01 2.5746E-02 1.9351E-02 - 1.2589E+01 1.2703E-01 9.4415E-02 1.6999E-02 1.2915E-02 - 1.4125E+01 9.0309E-02 6.6628E-02 1.1212E-02 8.8680E-03 - 1.5849E+01 6.4325E-02 4.7211E-02 7.3938E-03 6.0012E-03 - 1.7783E+01 4.5684E-02 3.3788E-02 4.9036E-03 3.8975E-03 - 1.9953E+01 3.2403E-02 2.3813E-02 3.2836E-03 2.5975E-03 - 2.2387E+01 2.3146E-02 1.6949E-02 2.1771E-03 1.7769E-03 - 2.5119E+01 1.6484E-02 1.1966E-02 1.4547E-03 1.2118E-03 - 2.8184E+01 1.1691E-02 8.3939E-03 9.9815E-04 8.1561E-04 - 3.1623E+01 8.2144E-03 5.8731E-03 6.6306E-04 5.2795E-04 - 3.5481E+01 5.7963E-03 4.1253E-03 4.4696E-04 3.5669E-04 - 3.9811E+01 4.0976E-03 2.9020E-03 2.9693E-04 2.4292E-04 - 4.4668E+01 2.8916E-03 2.0470E-03 1.9959E-04 1.6284E-04 - 5.0119E+01 2.0388E-03 1.4253E-03 1.3729E-04 1.0893E-04 - 5.6234E+01 1.4414E-03 1.0006E-03 9.1891E-05 7.3811E-05 - 6.3096E+01 1.0107E-03 7.0337E-04 6.1600E-05 5.1026E-05 - 7.0795E+01 7.0999E-04 4.8724E-04 4.2172E-05 3.4863E-05 - 7.9433E+01 4.9775E-04 3.4232E-04 2.8667E-05 2.3248E-05 - 8.9125E+01 3.4829E-04 2.4122E-04 1.9283E-05 1.6548E-05 - 1.0000E+02 2.4424E-04 1.6565E-04 1.3210E-05 1.0819E-05 - 1.1220E+02 1.7091E-04 1.1560E-04 8.8910E-06 7.3557E-06 - 1.2589E+02 1.1930E-04 8.0549E-05 6.0569E-06 5.0265E-06 - 1.4125E+02 8.2995E-05 5.5563E-05 4.0987E-06 3.4310E-06 - 1.5849E+02 5.7728E-05 3.8193E-05 2.7849E-06 2.2802E-06 - 1.7783E+02 4.0251E-05 2.6526E-05 1.9232E-06 1.5466E-06 - 1.9953E+02 2.8079E-05 1.8433E-05 1.3055E-06 1.0863E-06 - 2.2387E+02 1.9536E-05 1.2755E-05 8.8537E-07 7.1841E-07 - 2.5119E+02 1.3726E-05 8.7990E-06 6.1193E-07 4.7889E-07 - 2.8184E+02 9.5549E-06 6.0901E-06 4.1251E-07 3.2167E-07 - 3.1623E+02 6.6112E-06 4.2065E-06 2.8069E-07 2.1691E-07 - 3.5481E+02 4.5457E-06 2.8771E-06 1.8975E-07 1.4921E-07 - 3.9811E+02 3.1486E-06 1.9858E-06 1.2551E-07 1.0276E-07 - 4.4668E+02 2.1655E-06 1.3563E-06 8.6121E-08 6.7342E-08 - 5.0119E+02 1.4896E-06 9.1855E-07 5.8240E-08 4.4688E-08 - 5.6234E+02 1.0375E-06 6.3657E-07 3.8793E-08 3.0054E-08 - 6.3096E+02 7.0586E-07 4.3398E-07 2.6544E-08 2.0144E-08 - 7.0795E+02 4.8262E-07 2.9465E-07 1.7692E-08 1.3343E-08 - 7.9433E+02 3.3081E-07 2.0130E-07 1.1580E-08 9.0666E-09 - 8.9125E+02 2.2628E-07 1.3708E-07 7.8471E-09 6.1843E-09 - 1.0000E+03 1.5468E-07 9.3123E-08 5.1961E-09 3.9192E-09 - 1.1220E+03 1.0434E-07 6.2480E-08 3.3541E-09 2.7383E-09 - 1.2589E+03 7.0355E-08 4.1869E-08 2.2534E-09 1.7989E-09 - 1.4125E+03 4.7576E-08 2.8202E-08 1.5592E-09 1.1187E-09 - 1.5849E+03 3.1895E-08 1.8932E-08 1.0426E-09 7.7250E-10 - 1.7783E+03 2.1223E-08 1.2545E-08 6.3141E-10 5.4813E-10 - 1.9953E+03 1.4374E-08 8.4876E-09 4.5004E-10 3.3189E-10 - 2.2387E+03 9.7464E-09 5.6276E-09 3.1819E-10 2.0409E-10 - 2.5119E+03 6.5263E-09 3.7266E-09 2.1878E-10 1.3739E-10 - 2.8184E+03 4.3717E-09 2.5089E-09 1.3780E-10 9.2884E-11 - 3.1623E+03 2.9419E-09 1.6782E-09 8.3818E-11 5.6613E-11 - 3.5481E+03 1.9164E-09 1.0705E-09 5.6294E-11 3.5985E-11 - 3.9811E+03 1.2863E-09 7.3301E-10 3.7381E-11 2.4469E-11 - 4.4668E+03 8.4643E-10 4.8917E-10 2.5653E-11 1.6126E-11 - 5.0119E+03 5.5796E-10 3.1557E-10 1.5805E-11 1.1142E-11 - 5.6234E+03 3.6889E-10 2.0766E-10 9.1079E-12 7.6050E-12 - 6.3096E+03 2.3978E-10 1.3442E-10 7.1664E-12 5.3391E-12 - 7.0795E+03 1.5882E-10 8.9141E-11 4.5834E-12 3.3868E-12 - 7.9433E+03 1.0443E-10 5.8286E-11 2.8998E-12 1.8997E-12 - 8.9125E+03 6.8675E-11 3.8587E-11 1.9412E-12 1.2495E-12 - 1.0000E+04 4.4709E-11 2.4551E-11 1.1689E-12 8.6914E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8157E+03 9.9783E+03 4.8698E+03 4.4436E+03 - 1.1220E-01 8.8572E+03 8.9472E+03 4.3614E+03 3.9551E+03 - 1.2589E-01 7.8562E+03 7.9437E+03 3.8613E+03 3.4758E+03 - 1.4125E-01 6.9083E+03 6.9983E+03 3.3897E+03 3.0068E+03 - 1.5849E-01 6.0223E+03 6.0601E+03 2.9369E+03 2.5735E+03 - 1.7783E-01 5.1793E+03 5.1818E+03 2.5213E+03 2.1883E+03 - 1.9953E-01 4.3901E+03 4.3826E+03 2.1325E+03 1.8230E+03 - 2.2387E-01 3.6525E+03 3.6398E+03 1.7695E+03 1.5065E+03 - 2.5119E-01 2.9939E+03 2.9806E+03 1.4554E+03 1.2379E+03 - 2.8184E-01 2.4311E+03 2.4113E+03 1.1847E+03 9.9611E+02 - 3.1623E-01 1.9523E+03 1.9276E+03 9.5511E+02 7.9276E+02 - 3.5481E-01 1.5441E+03 1.5279E+03 7.6050E+02 6.2787E+02 - 3.9811E-01 1.2168E+03 1.2022E+03 5.9640E+02 4.8733E+02 - 4.4668E-01 9.5187E+02 9.3148E+02 4.6130E+02 3.7528E+02 - 5.0119E-01 7.3286E+02 7.1474E+02 3.5301E+02 2.8805E+02 - 5.6234E-01 5.6201E+02 5.4632E+02 2.6916E+02 2.1671E+02 - 6.3096E-01 4.2919E+02 4.1375E+02 2.0238E+02 1.6176E+02 - 7.0795E-01 3.2523E+02 3.1003E+02 1.5042E+02 1.1957E+02 - 7.9433E-01 2.4492E+02 2.3221E+02 1.1135E+02 8.8043E+01 - 8.9125E-01 1.8460E+02 1.7281E+02 8.1636E+01 6.5162E+01 - 1.0000E+00 1.3884E+02 1.2868E+02 5.9593E+01 4.7148E+01 - 1.1220E+00 1.0440E+02 9.5237E+01 4.3363E+01 3.4258E+01 - 1.2589E+00 7.8029E+01 7.0165E+01 3.1369E+01 2.4753E+01 - 1.4125E+00 5.7968E+01 5.1862E+01 2.2465E+01 1.7465E+01 - 1.5849E+00 4.2874E+01 3.7971E+01 1.5990E+01 1.2425E+01 - 1.7783E+00 3.1696E+01 2.7688E+01 1.1371E+01 8.9248E+00 - 1.9953E+00 2.3459E+01 2.0157E+01 8.0619E+00 6.2034E+00 - 2.2387E+00 1.7217E+01 1.4573E+01 5.6860E+00 4.3395E+00 - 2.5119E+00 1.2511E+01 1.0504E+01 3.9802E+00 3.0704E+00 - 2.8184E+00 9.2117E+00 7.5913E+00 2.7763E+00 2.1560E+00 - 3.1623E+00 6.6858E+00 5.4525E+00 1.9252E+00 1.4629E+00 - 3.5481E+00 4.8477E+00 3.9113E+00 1.3133E+00 1.0080E+00 - 3.9811E+00 3.5207E+00 2.8069E+00 8.9519E-01 6.8609E-01 - 4.4668E+00 2.5469E+00 2.0137E+00 6.1581E-01 4.6521E-01 - 5.0119E+00 1.8381E+00 1.4425E+00 4.2480E-01 3.1535E-01 - 5.6234E+00 1.3268E+00 1.0174E+00 2.8406E-01 2.1476E-01 - 6.3096E+00 9.5349E-01 7.2043E-01 1.9184E-01 1.4366E-01 - 7.0795E+00 6.8422E-01 5.1987E-01 1.2921E-01 9.6590E-02 - 7.9433E+00 4.8868E-01 3.7141E-01 8.5399E-02 6.5461E-02 - 8.9125E+00 3.4541E-01 2.6246E-01 5.7019E-02 4.3591E-02 - 1.0000E+01 2.4925E-01 1.8639E-01 3.7820E-02 2.9041E-02 - 1.1220E+01 1.7772E-01 1.3240E-01 2.5392E-02 1.9498E-02 - 1.2589E+01 1.2737E-01 9.4356E-02 1.7082E-02 1.3095E-02 - 1.4125E+01 9.0098E-02 6.6257E-02 1.1197E-02 8.5944E-03 - 1.5849E+01 6.3779E-02 4.6815E-02 7.3791E-03 5.8424E-03 - 1.7783E+01 4.5973E-02 3.3254E-02 4.9307E-03 3.9313E-03 - 1.9953E+01 3.2859E-02 2.3408E-02 3.2293E-03 2.6403E-03 - 2.2387E+01 2.3278E-02 1.6690E-02 2.1528E-03 1.7458E-03 - 2.5119E+01 1.6426E-02 1.1823E-02 1.4440E-03 1.1798E-03 - 2.8184E+01 1.1535E-02 8.2324E-03 1.0113E-03 8.0696E-04 - 3.1623E+01 8.1898E-03 5.8637E-03 6.6727E-04 5.2788E-04 - 3.5481E+01 5.8021E-03 4.1370E-03 4.4700E-04 3.5541E-04 - 3.9811E+01 4.0960E-03 2.9054E-03 2.9929E-04 2.4018E-04 - 4.4668E+01 2.8817E-03 2.0382E-03 2.0095E-04 1.6332E-04 - 5.0119E+01 2.0283E-03 1.4332E-03 1.3705E-04 1.0936E-04 - 5.6234E+01 1.4264E-03 9.9667E-04 9.0922E-05 7.3721E-05 - 6.3096E+01 1.0044E-03 6.9546E-04 6.1990E-05 5.0327E-05 - 7.0795E+01 7.0765E-04 4.8825E-04 4.2989E-05 3.4723E-05 - 7.9433E+01 4.9766E-04 3.3940E-04 2.8748E-05 2.3135E-05 - 8.9125E+01 3.4623E-04 2.3669E-04 1.9474E-05 1.5771E-05 - 1.0000E+02 2.4258E-04 1.6529E-04 1.3258E-05 1.0685E-05 - 1.1220E+02 1.7023E-04 1.1480E-04 8.9846E-06 7.2217E-06 - 1.2589E+02 1.1905E-04 7.9871E-05 5.9753E-06 4.8976E-06 - 1.4125E+02 8.3063E-05 5.5558E-05 4.0785E-06 3.3086E-06 - 1.5849E+02 5.8144E-05 3.8367E-05 2.8314E-06 2.2479E-06 - 1.7783E+02 4.0486E-05 2.6626E-05 1.9507E-06 1.4989E-06 - 1.9953E+02 2.8211E-05 1.8441E-05 1.3321E-06 1.0224E-06 - 2.2387E+02 1.9677E-05 1.2614E-05 8.8689E-07 6.9491E-07 - 2.5119E+02 1.3623E-05 8.6715E-06 6.0959E-07 4.7668E-07 - 2.8184E+02 9.5254E-06 6.0268E-06 4.0377E-07 3.1197E-07 - 3.1623E+02 6.5862E-06 4.2209E-06 2.7597E-07 2.1852E-07 - 3.5481E+02 4.5410E-06 2.8923E-06 1.8441E-07 1.4505E-07 - 3.9811E+02 3.1382E-06 1.9861E-06 1.2664E-07 1.0007E-07 - 4.4668E+02 2.1651E-06 1.3568E-06 8.6062E-08 6.6854E-08 - 5.0119E+02 1.4929E-06 9.2593E-07 5.9096E-08 4.3440E-08 - 5.6234E+02 1.0440E-06 6.3747E-07 3.8985E-08 3.0284E-08 - 6.3096E+02 7.1162E-07 4.3586E-07 2.6259E-08 2.0658E-08 - 7.0795E+02 4.8286E-07 2.9709E-07 1.7719E-08 1.3489E-08 - 7.9433E+02 3.3072E-07 2.0017E-07 1.1603E-08 9.1130E-09 - 8.9125E+02 2.2621E-07 1.3480E-07 7.7833E-09 6.1163E-09 - 1.0000E+03 1.5439E-07 9.2457E-08 5.3304E-09 3.9224E-09 - 1.1220E+03 1.0406E-07 6.1477E-08 3.4590E-09 2.6859E-09 - 1.2589E+03 7.0648E-08 4.1360E-08 2.3304E-09 1.7968E-09 - 1.4125E+03 4.7683E-08 2.7811E-08 1.5030E-09 1.2102E-09 - 1.5849E+03 3.2248E-08 1.8674E-08 9.8710E-10 7.9356E-10 - 1.7783E+03 2.1472E-08 1.2480E-08 6.5999E-10 4.8977E-10 - 1.9953E+03 1.4448E-08 8.4196E-09 4.2713E-10 3.1911E-10 - 2.2387E+03 9.6006E-09 5.6178E-09 2.9617E-10 2.0958E-10 - 2.5119E+03 6.3573E-09 3.7166E-09 2.0924E-10 1.4284E-10 - 2.8184E+03 4.2559E-09 2.4519E-09 1.4227E-10 9.8401E-11 - 3.1623E+03 2.9379E-09 1.6799E-09 8.4061E-11 6.1870E-11 - 3.5481E+03 1.8914E-09 1.0900E-09 5.5637E-11 3.7768E-11 - 3.9811E+03 1.2486E-09 7.1416E-10 3.7872E-11 2.5790E-11 - 4.4668E+03 8.2012E-10 4.7784E-10 2.2047E-11 1.8254E-11 - 5.0119E+03 5.4299E-10 3.1297E-10 1.5080E-11 1.1980E-11 - 5.6234E+03 3.5724E-10 2.0604E-10 1.1288E-11 6.9916E-12 - 6.3096E+03 2.4014E-10 1.3536E-10 6.6776E-12 4.8707E-12 - 7.0795E+03 1.5638E-10 8.7510E-11 4.1728E-12 3.4254E-12 - 7.9433E+03 1.0383E-10 5.7335E-11 2.7481E-12 2.3863E-12 - 8.9125E+03 6.9215E-11 3.8164E-11 2.0163E-12 1.6720E-12 - 1.0000E+04 4.4921E-11 2.4403E-11 1.4866E-12 1.1374E-12 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7997E+03 9.9842E+03 4.8732E+03 4.4383E+03 - 1.1220E-01 8.8125E+03 8.9619E+03 4.3635E+03 3.9698E+03 - 1.2589E-01 7.8603E+03 7.9640E+03 3.8747E+03 3.4790E+03 - 1.4125E-01 6.9458E+03 7.0022E+03 3.3936E+03 2.9997E+03 - 1.5849E-01 6.0428E+03 6.0807E+03 2.9322E+03 2.5719E+03 - 1.7783E-01 5.1681E+03 5.1968E+03 2.5089E+03 2.1861E+03 - 1.9953E-01 4.3698E+03 4.3762E+03 2.1194E+03 1.8315E+03 - 2.2387E-01 3.6452E+03 3.6386E+03 1.7700E+03 1.5092E+03 - 2.5119E-01 2.9888E+03 2.9814E+03 1.4582E+03 1.2342E+03 - 2.8184E-01 2.4229E+03 2.4114E+03 1.1872E+03 9.9644E+02 - 3.1623E-01 1.9589E+03 1.9364E+03 9.5933E+02 7.9152E+02 - 3.5481E-01 1.5539E+03 1.5302E+03 7.6381E+02 6.2442E+02 - 3.9811E-01 1.2176E+03 1.1948E+03 5.9635E+02 4.8564E+02 - 4.4668E-01 9.5071E+02 9.2419E+02 4.6175E+02 3.7122E+02 - 5.0119E-01 7.3467E+02 7.1108E+02 3.5284E+02 2.8152E+02 - 5.6234E-01 5.6365E+02 5.4496E+02 2.6761E+02 2.1380E+02 - 6.3096E-01 4.2996E+02 4.1353E+02 2.0277E+02 1.6063E+02 - 7.0795E-01 3.2727E+02 3.0954E+02 1.5161E+02 1.2028E+02 - 7.9433E-01 2.4655E+02 2.3192E+02 1.1230E+02 8.9160E+01 - 8.9125E-01 1.8533E+02 1.7317E+02 8.2708E+01 6.5026E+01 - 1.0000E+00 1.3955E+02 1.2897E+02 5.9918E+01 4.7228E+01 - 1.1220E+00 1.0396E+02 9.5816E+01 4.3359E+01 3.4198E+01 - 1.2589E+00 7.7641E+01 7.0689E+01 3.1192E+01 2.4596E+01 - 1.4125E+00 5.8019E+01 5.1716E+01 2.2463E+01 1.7605E+01 - 1.5849E+00 4.3283E+01 3.7851E+01 1.6281E+01 1.2549E+01 - 1.7783E+00 3.1926E+01 2.7748E+01 1.1639E+01 8.8445E+00 - 1.9953E+00 2.3271E+01 2.0151E+01 8.1545E+00 6.3088E+00 - 2.2387E+00 1.7192E+01 1.4458E+01 5.7624E+00 4.4245E+00 - 2.5119E+00 1.2608E+01 1.0525E+01 4.0145E+00 3.0360E+00 - 2.8184E+00 9.1408E+00 7.5793E+00 2.7683E+00 2.0838E+00 - 3.1623E+00 6.6692E+00 5.4265E+00 1.9115E+00 1.4598E+00 - 3.5481E+00 4.8454E+00 3.9153E+00 1.3107E+00 1.0079E+00 - 3.9811E+00 3.5050E+00 2.8114E+00 9.0505E-01 6.8574E-01 - 4.4668E+00 2.5327E+00 2.0021E+00 6.1492E-01 4.6972E-01 - 5.0119E+00 1.8334E+00 1.4331E+00 4.1618E-01 3.2031E-01 - 5.6234E+00 1.3259E+00 1.0220E+00 2.8312E-01 2.1259E-01 - 6.3096E+00 9.4818E-01 7.3060E-01 1.8984E-01 1.3939E-01 - 7.0795E+00 6.8133E-01 5.2450E-01 1.2807E-01 9.6207E-02 - 7.9433E+00 4.9177E-01 3.7403E-01 8.6925E-02 6.4059E-02 - 8.9125E+00 3.5161E-01 2.6466E-01 5.5592E-02 4.1708E-02 - 1.0000E+01 2.4966E-01 1.8695E-01 3.8237E-02 2.9206E-02 - 1.1220E+01 1.7761E-01 1.3240E-01 2.5673E-02 1.9638E-02 - 1.2589E+01 1.2582E-01 9.3652E-02 1.6914E-02 1.3105E-02 - 1.4125E+01 8.9551E-02 6.6325E-02 1.0985E-02 8.6437E-03 - 1.5849E+01 6.3947E-02 4.6692E-02 7.4002E-03 5.8465E-03 - 1.7783E+01 4.5312E-02 3.2949E-02 5.0059E-03 3.9266E-03 - 1.9953E+01 3.2057E-02 2.3260E-02 3.3513E-03 2.5615E-03 - 2.2387E+01 2.2898E-02 1.6599E-02 2.2449E-03 1.6709E-03 - 2.5119E+01 1.6412E-02 1.1693E-02 1.4798E-03 1.1243E-03 - 2.8184E+01 1.1588E-02 8.0896E-03 9.7256E-04 7.8959E-04 - 3.1623E+01 8.2229E-03 5.8517E-03 6.6317E-04 5.2971E-04 - 3.5481E+01 5.8039E-03 4.0970E-03 4.4655E-04 3.5836E-04 - 3.9811E+01 4.0920E-03 2.8945E-03 3.0043E-04 2.4143E-04 - 4.4668E+01 2.8848E-03 2.0338E-03 2.0278E-04 1.6176E-04 - 5.0119E+01 2.0258E-03 1.4192E-03 1.3405E-04 1.0795E-04 - 5.6234E+01 1.4261E-03 9.9698E-04 9.1234E-05 7.3702E-05 - 6.3096E+01 1.0085E-03 6.9721E-04 6.2958E-05 5.0246E-05 - 7.0795E+01 7.0651E-04 4.8642E-04 4.2803E-05 3.3833E-05 - 7.9433E+01 4.9603E-04 3.4257E-04 2.8990E-05 2.3062E-05 - 8.9125E+01 3.4631E-04 2.3739E-04 1.9435E-05 1.5506E-05 - 1.0000E+02 2.4357E-04 1.6565E-04 1.3231E-05 1.0682E-05 - 1.1220E+02 1.7028E-04 1.1501E-04 9.0557E-06 7.4154E-06 - 1.2589E+02 1.1885E-04 7.9550E-05 6.2044E-06 5.0344E-06 - 1.4125E+02 8.3157E-05 5.5403E-05 4.1211E-06 3.3935E-06 - 1.5849E+02 5.8108E-05 3.8547E-05 2.7597E-06 2.2986E-06 - 1.7783E+02 4.0615E-05 2.6605E-05 1.8846E-06 1.5573E-06 - 1.9953E+02 2.8072E-05 1.8556E-05 1.2957E-06 1.0369E-06 - 2.2387E+02 1.9516E-05 1.2878E-05 9.0765E-07 7.0716E-07 - 2.5119E+02 1.3516E-05 8.8264E-06 6.0550E-07 4.9376E-07 - 2.8184E+02 9.4365E-06 6.0449E-06 3.9983E-07 3.1422E-07 - 3.1623E+02 6.6084E-06 4.2040E-06 2.7855E-07 2.1891E-07 - 3.5481E+02 4.5462E-06 2.8906E-06 1.8612E-07 1.5174E-07 - 3.9811E+02 3.1265E-06 1.9932E-06 1.2777E-07 1.0232E-07 - 4.4668E+02 2.1740E-06 1.3492E-06 8.9859E-08 6.8822E-08 - 5.0119E+02 1.5055E-06 9.2742E-07 5.8760E-08 4.7519E-08 - 5.6234E+02 1.0319E-06 6.4179E-07 3.8189E-08 3.0822E-08 - 6.3096E+02 7.0396E-07 4.3362E-07 2.5597E-08 1.9191E-08 - 7.0795E+02 4.8533E-07 2.9783E-07 1.7343E-08 1.2929E-08 - 7.9433E+02 3.3273E-07 2.0279E-07 1.1920E-08 8.9347E-09 - 8.9125E+02 2.2610E-07 1.3690E-07 7.9888E-09 5.7354E-09 - 1.0000E+03 1.5515E-07 9.3868E-08 5.4247E-09 3.8645E-09 - 1.1220E+03 1.0463E-07 6.3037E-08 3.4878E-09 2.7107E-09 - 1.2589E+03 7.0733E-08 4.2322E-08 2.2264E-09 1.8205E-09 - 1.4125E+03 4.7780E-08 2.8281E-08 1.5060E-09 1.1348E-09 - 1.5849E+03 3.2397E-08 1.8960E-08 1.0220E-09 7.7835E-10 - 1.7783E+03 2.1788E-08 1.2558E-08 6.9627E-10 5.3648E-10 - 1.9953E+03 1.4419E-08 8.4537E-09 4.8724E-10 3.3440E-10 - 2.2387E+03 9.5978E-09 5.5901E-09 3.2329E-10 2.1790E-10 - 2.5119E+03 6.4975E-09 3.7089E-09 2.1359E-10 1.4499E-10 - 2.8184E+03 4.3389E-09 2.4866E-09 1.4011E-10 9.8150E-11 - 3.1623E+03 2.9336E-09 1.6640E-09 8.6186E-11 6.4896E-11 - 3.5481E+03 1.9098E-09 1.0823E-09 5.8420E-11 4.0246E-11 - 3.9811E+03 1.2591E-09 7.2704E-10 3.8173E-11 2.6664E-11 - 4.4668E+03 8.3175E-10 4.8329E-10 2.3675E-11 1.7393E-11 - 5.0119E+03 5.4554E-10 3.1188E-10 1.6011E-11 1.0935E-11 - 5.6234E+03 3.6377E-10 2.0615E-10 9.9015E-12 7.8082E-12 - 6.3096E+03 2.4147E-10 1.3574E-10 6.9292E-12 5.4534E-12 - 7.0795E+03 1.5865E-10 8.9407E-11 4.3880E-12 3.1646E-12 - 7.9433E+03 1.0304E-10 5.7211E-11 3.1022E-12 1.8872E-12 - 8.9125E+03 6.7823E-11 3.7008E-11 2.0907E-12 1.1844E-12 - 1.0000E+04 4.4418E-11 2.4601E-11 1.3367E-12 7.1549E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7930E+03 1.0006E+04 4.8831E+03 4.4333E+03 - 1.1220E-01 8.7919E+03 8.9549E+03 4.3752E+03 3.9353E+03 - 1.2589E-01 7.8451E+03 7.9450E+03 3.8780E+03 3.4483E+03 - 1.4125E-01 6.9440E+03 6.9972E+03 3.3949E+03 2.9939E+03 - 1.5849E-01 6.0456E+03 6.0810E+03 2.9464E+03 2.5573E+03 - 1.7783E-01 5.1820E+03 5.1959E+03 2.5111E+03 2.1676E+03 - 1.9953E-01 4.3903E+03 4.3919E+03 2.1263E+03 1.8160E+03 - 2.2387E-01 3.6559E+03 3.6514E+03 1.7771E+03 1.5066E+03 - 2.5119E-01 2.9942E+03 2.9863E+03 1.4575E+03 1.2378E+03 - 2.8184E-01 2.4297E+03 2.4154E+03 1.1882E+03 9.9954E+02 - 3.1623E-01 1.9543E+03 1.9326E+03 9.5796E+02 7.9460E+02 - 3.5481E-01 1.5503E+03 1.5363E+03 7.5979E+02 6.2231E+02 - 3.9811E-01 1.2172E+03 1.1976E+03 5.9372E+02 4.8545E+02 - 4.4668E-01 9.4976E+02 9.2163E+02 4.5843E+02 3.7381E+02 - 5.0119E-01 7.3480E+02 7.0999E+02 3.5153E+02 2.8390E+02 - 5.6234E-01 5.6317E+02 5.4529E+02 2.6579E+02 2.1475E+02 - 6.3096E-01 4.2848E+02 4.1406E+02 2.0010E+02 1.6030E+02 - 7.0795E-01 3.2421E+02 3.1032E+02 1.5032E+02 1.1930E+02 - 7.9433E-01 2.4440E+02 2.3286E+02 1.1168E+02 8.8308E+01 - 8.9125E-01 1.8485E+02 1.7399E+02 8.1798E+01 6.4536E+01 - 1.0000E+00 1.3843E+02 1.2866E+02 6.0030E+01 4.7163E+01 - 1.1220E+00 1.0356E+02 9.5000E+01 4.3336E+01 3.3857E+01 - 1.2589E+00 7.7791E+01 7.0098E+01 3.1175E+01 2.4511E+01 - 1.4125E+00 5.8014E+01 5.1694E+01 2.2401E+01 1.7670E+01 - 1.5849E+00 4.2916E+01 3.7643E+01 1.6090E+01 1.2695E+01 - 1.7783E+00 3.1683E+01 2.7422E+01 1.1543E+01 8.9240E+00 - 1.9953E+00 2.3373E+01 2.0003E+01 8.1472E+00 6.2601E+00 - 2.2387E+00 1.7097E+01 1.4522E+01 5.6771E+00 4.4011E+00 - 2.5119E+00 1.2555E+01 1.0536E+01 3.9625E+00 3.0625E+00 - 2.8184E+00 9.1557E+00 7.5373E+00 2.7694E+00 2.1666E+00 - 3.1623E+00 6.6426E+00 5.4026E+00 1.9042E+00 1.4741E+00 - 3.5481E+00 4.8341E+00 3.8767E+00 1.3026E+00 9.9741E-01 - 3.9811E+00 3.5005E+00 2.7921E+00 8.9150E-01 6.8067E-01 - 4.4668E+00 2.5342E+00 1.9882E+00 6.0816E-01 4.6154E-01 - 5.0119E+00 1.8405E+00 1.4215E+00 4.1395E-01 3.1411E-01 - 5.6234E+00 1.3196E+00 1.0251E+00 2.7915E-01 2.1245E-01 - 6.3096E+00 9.4653E-01 7.2878E-01 1.9053E-01 1.4342E-01 - 7.0795E+00 6.8027E-01 5.1460E-01 1.2657E-01 9.7164E-02 - 7.9433E+00 4.8347E-01 3.6306E-01 8.2924E-02 6.3375E-02 - 8.9125E+00 3.4773E-01 2.5906E-01 5.6190E-02 4.2333E-02 - 1.0000E+01 2.5064E-01 1.8621E-01 3.8108E-02 2.9371E-02 - 1.1220E+01 1.7825E-01 1.3214E-01 2.5504E-02 1.9792E-02 - 1.2589E+01 1.2740E-01 9.4249E-02 1.6893E-02 1.3332E-02 - 1.4125E+01 9.0508E-02 6.6720E-02 1.1169E-02 8.8733E-03 - 1.5849E+01 6.4444E-02 4.6973E-02 7.5740E-03 5.8669E-03 - 1.7783E+01 4.5758E-02 3.3161E-02 5.0747E-03 3.8087E-03 - 1.9953E+01 3.2506E-02 2.3503E-02 3.3884E-03 2.4988E-03 - 2.2387E+01 2.2957E-02 1.6852E-02 2.1984E-03 1.6919E-03 - 2.5119E+01 1.6331E-02 1.2009E-02 1.4325E-03 1.1643E-03 - 2.8184E+01 1.1684E-02 8.4212E-03 1.0119E-03 8.3263E-04 - 3.1623E+01 8.2080E-03 5.8673E-03 6.5841E-04 5.3031E-04 - 3.5481E+01 5.7927E-03 4.1320E-03 4.4196E-04 3.6199E-04 - 3.9811E+01 4.0914E-03 2.9062E-03 2.9899E-04 2.4387E-04 - 4.4668E+01 2.8965E-03 2.0366E-03 2.0119E-04 1.6477E-04 - 5.0119E+01 2.0341E-03 1.4247E-03 1.3659E-04 1.1272E-04 - 5.6234E+01 1.4320E-03 9.9487E-04 9.3674E-05 7.7844E-05 - 6.3096E+01 1.0091E-03 7.0379E-04 6.2873E-05 5.1949E-05 - 7.0795E+01 7.0947E-04 4.9295E-04 4.1048E-05 3.3864E-05 - 7.9433E+01 4.9787E-04 3.4014E-04 2.7646E-05 2.2894E-05 - 8.9125E+01 3.5035E-04 2.3825E-04 1.9164E-05 1.5362E-05 - 1.0000E+02 2.4288E-04 1.6568E-04 1.3062E-05 1.0651E-05 - 1.1220E+02 1.6941E-04 1.1488E-04 8.9079E-06 7.3334E-06 - 1.2589E+02 1.1866E-04 7.9724E-05 6.0616E-06 5.0265E-06 - 1.4125E+02 8.3329E-05 5.5458E-05 4.1422E-06 3.3940E-06 - 1.5849E+02 5.8081E-05 3.8469E-05 2.8746E-06 2.2667E-06 - 1.7783E+02 4.0324E-05 2.6699E-05 1.9043E-06 1.5752E-06 - 1.9953E+02 2.8388E-05 1.8598E-05 1.2686E-06 1.0668E-06 - 2.2387E+02 1.9753E-05 1.2794E-05 8.9231E-07 7.1703E-07 - 2.5119E+02 1.3692E-05 8.7775E-06 5.9555E-07 4.9022E-07 - 2.8184E+02 9.5265E-06 6.0798E-06 4.0753E-07 3.3227E-07 - 3.1623E+02 6.6265E-06 4.2024E-06 2.7522E-07 2.2126E-07 - 3.5481E+02 4.5578E-06 2.8763E-06 1.8966E-07 1.5089E-07 - 3.9811E+02 3.1439E-06 1.9799E-06 1.2698E-07 1.0206E-07 - 4.4668E+02 2.1666E-06 1.3496E-06 8.4128E-08 6.7526E-08 - 5.0119E+02 1.5018E-06 9.2114E-07 5.6975E-08 4.5372E-08 - 5.6234E+02 1.0369E-06 6.4046E-07 3.8461E-08 3.0089E-08 - 6.3096E+02 7.0503E-07 4.3752E-07 2.6034E-08 1.9779E-08 - 7.0795E+02 4.8261E-07 2.9774E-07 1.7497E-08 1.3480E-08 - 7.9433E+02 3.2982E-07 2.0169E-07 1.1787E-08 8.9371E-09 - 8.9125E+02 2.2537E-07 1.3743E-07 7.7932E-09 6.0346E-09 - 1.0000E+03 1.5464E-07 9.3332E-08 5.1978E-09 4.0332E-09 - 1.1220E+03 1.0408E-07 6.2730E-08 3.4102E-09 2.6838E-09 - 1.2589E+03 7.0709E-08 4.2252E-08 2.2701E-09 1.7390E-09 - 1.4125E+03 4.7746E-08 2.8300E-08 1.5439E-09 1.1466E-09 - 1.5849E+03 3.2441E-08 1.8796E-08 1.0409E-09 8.0063E-10 - 1.7783E+03 2.1596E-08 1.2778E-08 7.2278E-10 5.2058E-10 - 1.9953E+03 1.4460E-08 8.4143E-09 4.7038E-10 3.2844E-10 - 2.2387E+03 9.6266E-09 5.6281E-09 3.0152E-10 2.1253E-10 - 2.5119E+03 6.4289E-09 3.8071E-09 1.8940E-10 1.5283E-10 - 2.8184E+03 4.2715E-09 2.5774E-09 1.2909E-10 1.0904E-10 - 3.1623E+03 2.9146E-09 1.7052E-09 8.5983E-11 5.9938E-11 - 3.5481E+03 1.8892E-09 1.0929E-09 5.2251E-11 4.2096E-11 - 3.9811E+03 1.2601E-09 7.2137E-10 3.6414E-11 2.7592E-11 - 4.4668E+03 8.4241E-10 4.7563E-10 2.5023E-11 1.7058E-11 - 5.0119E+03 5.5326E-10 3.1074E-10 1.6279E-11 1.1635E-11 - 5.6234E+03 3.6220E-10 2.0213E-10 1.0972E-11 8.1774E-12 - 6.3096E+03 2.3892E-10 1.3705E-10 7.1581E-12 4.8509E-12 - 7.0795E+03 1.5855E-10 8.9717E-11 4.1689E-12 2.6298E-12 - 7.9433E+03 1.0492E-10 5.8352E-11 2.8520E-12 1.9491E-12 - 8.9125E+03 6.8240E-11 3.8312E-11 2.0415E-12 1.5400E-12 - 1.0000E+04 4.4935E-11 2.5166E-11 1.2972E-12 8.1241E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8223E+03 9.9600E+03 4.8669E+03 4.4198E+03 - 1.1220E-01 8.8123E+03 8.9579E+03 4.3674E+03 3.9371E+03 - 1.2589E-01 7.8455E+03 7.9595E+03 3.8652E+03 3.4574E+03 - 1.4125E-01 6.9219E+03 6.9878E+03 3.3826E+03 2.9934E+03 - 1.5849E-01 6.0241E+03 6.0644E+03 2.9295E+03 2.5601E+03 - 1.7783E-01 5.1753E+03 5.1901E+03 2.5110E+03 2.1749E+03 - 1.9953E-01 4.3812E+03 4.3704E+03 2.1249E+03 1.8267E+03 - 2.2387E-01 3.6451E+03 3.6285E+03 1.7794E+03 1.5097E+03 - 2.5119E-01 2.9881E+03 2.9758E+03 1.4621E+03 1.2398E+03 - 2.8184E-01 2.4277E+03 2.4112E+03 1.1878E+03 1.0014E+03 - 3.1623E-01 1.9465E+03 1.9259E+03 9.5393E+02 7.9426E+02 - 3.5481E-01 1.5431E+03 1.5285E+03 7.5547E+02 6.2612E+02 - 3.9811E-01 1.2149E+03 1.2017E+03 5.9428E+02 4.8928E+02 - 4.4668E-01 9.4949E+02 9.2784E+02 4.5841E+02 3.7558E+02 - 5.0119E-01 7.3427E+02 7.1591E+02 3.5106E+02 2.8544E+02 - 5.6234E-01 5.6145E+02 5.4624E+02 2.6790E+02 2.1606E+02 - 6.3096E-01 4.2726E+02 4.0985E+02 1.9948E+02 1.6120E+02 - 7.0795E-01 3.2492E+02 3.0909E+02 1.4876E+02 1.1951E+02 - 7.9433E-01 2.4583E+02 2.3282E+02 1.1164E+02 8.8122E+01 - 8.9125E-01 1.8442E+02 1.7326E+02 8.1496E+01 6.4320E+01 - 1.0000E+00 1.3903E+02 1.2840E+02 5.9717E+01 4.6876E+01 - 1.1220E+00 1.0370E+02 9.5141E+01 4.3619E+01 3.3876E+01 - 1.2589E+00 7.7317E+01 7.0177E+01 3.1399E+01 2.4546E+01 - 1.4125E+00 5.7800E+01 5.1518E+01 2.2225E+01 1.7537E+01 - 1.5849E+00 4.2957E+01 3.7531E+01 1.5712E+01 1.2537E+01 - 1.7783E+00 3.1672E+01 2.7383E+01 1.1305E+01 8.9595E+00 - 1.9953E+00 2.3232E+01 2.0085E+01 8.0610E+00 6.2558E+00 - 2.2387E+00 1.7046E+01 1.4604E+01 5.6503E+00 4.3711E+00 - 2.5119E+00 1.2484E+01 1.0550E+01 3.9798E+00 3.0364E+00 - 2.8184E+00 9.1815E+00 7.5878E+00 2.7876E+00 2.0830E+00 - 3.1623E+00 6.6867E+00 5.4332E+00 1.9104E+00 1.4524E+00 - 3.5481E+00 4.8493E+00 3.8853E+00 1.3179E+00 9.9843E-01 - 3.9811E+00 3.5160E+00 2.7862E+00 8.9518E-01 6.8170E-01 - 4.4668E+00 2.5454E+00 2.0044E+00 6.0484E-01 4.6278E-01 - 5.0119E+00 1.8290E+00 1.4264E+00 4.1532E-01 3.1648E-01 - 5.6234E+00 1.3215E+00 1.0157E+00 2.8223E-01 2.1464E-01 - 6.3096E+00 9.5643E-01 7.2788E-01 1.8969E-01 1.4112E-01 - 7.0795E+00 6.8597E-01 5.2078E-01 1.2711E-01 9.4315E-02 - 7.9433E+00 4.9115E-01 3.7142E-01 8.5984E-02 6.4826E-02 - 8.9125E+00 3.4787E-01 2.6340E-01 5.8142E-02 4.2938E-02 - 1.0000E+01 2.4942E-01 1.8439E-01 3.8676E-02 2.8962E-02 - 1.1220E+01 1.7774E-01 1.3151E-01 2.5677E-02 1.9286E-02 - 1.2589E+01 1.2645E-01 9.3780E-02 1.7072E-02 1.2804E-02 - 1.4125E+01 9.0107E-02 6.6904E-02 1.1542E-02 8.6476E-03 - 1.5849E+01 6.3876E-02 4.7222E-02 7.4547E-03 5.8028E-03 - 1.7783E+01 4.5561E-02 3.3050E-02 5.0339E-03 3.8361E-03 - 1.9953E+01 3.2331E-02 2.3471E-02 3.4646E-03 2.5779E-03 - 2.2387E+01 2.3015E-02 1.6842E-02 2.2230E-03 1.6787E-03 - 2.5119E+01 1.6488E-02 1.1746E-02 1.4593E-03 1.1500E-03 - 2.8184E+01 1.1639E-02 8.1344E-03 9.5814E-04 7.7658E-04 - 3.1623E+01 8.1889E-03 5.8467E-03 6.7061E-04 5.2849E-04 - 3.5481E+01 5.7955E-03 4.1146E-03 4.5000E-04 3.5753E-04 - 3.9811E+01 4.0903E-03 2.8849E-03 3.0121E-04 2.4071E-04 - 4.4668E+01 2.8793E-03 2.0209E-03 1.9980E-04 1.5814E-04 - 5.0119E+01 2.0336E-03 1.4321E-03 1.3529E-04 1.0898E-04 - 5.6234E+01 1.4234E-03 1.0004E-03 9.1765E-05 7.6326E-05 - 6.3096E+01 9.9722E-04 6.9322E-04 6.1170E-05 5.0592E-05 - 7.0795E+01 7.0664E-04 4.8605E-04 4.2174E-05 3.4168E-05 - 7.9433E+01 4.9799E-04 3.4174E-04 2.8937E-05 2.2860E-05 - 8.9125E+01 3.4544E-04 2.3800E-04 1.9745E-05 1.5472E-05 - 1.0000E+02 2.4311E-04 1.6516E-04 1.3162E-05 1.0885E-05 - 1.1220E+02 1.6997E-04 1.1543E-04 8.9252E-06 7.3599E-06 - 1.2589E+02 1.1852E-04 8.0145E-05 6.0401E-06 4.9714E-06 - 1.4125E+02 8.2890E-05 5.5460E-05 4.1003E-06 3.3297E-06 - 1.5849E+02 5.7761E-05 3.8610E-05 2.8298E-06 2.2825E-06 - 1.7783E+02 4.0221E-05 2.6879E-05 1.9455E-06 1.5726E-06 - 1.9953E+02 2.8050E-05 1.8506E-05 1.3183E-06 1.0454E-06 - 2.2387E+02 1.9600E-05 1.2734E-05 8.8525E-07 6.9645E-07 - 2.5119E+02 1.3744E-05 8.7479E-06 6.1424E-07 4.7477E-07 - 2.8184E+02 9.6122E-06 6.0602E-06 4.2080E-07 3.1175E-07 - 3.1623E+02 6.6157E-06 4.2155E-06 2.8145E-07 2.1832E-07 - 3.5481E+02 4.5686E-06 2.8868E-06 1.9209E-07 1.4880E-07 - 3.9811E+02 3.1612E-06 1.9870E-06 1.2888E-07 1.0043E-07 - 4.4668E+02 2.1708E-06 1.3580E-06 8.6345E-08 6.7679E-08 - 5.0119E+02 1.4852E-06 9.1840E-07 5.7373E-08 4.6345E-08 - 5.6234E+02 1.0390E-06 6.3966E-07 3.8993E-08 3.0243E-08 - 6.3096E+02 7.1012E-07 4.3454E-07 2.5923E-08 2.0864E-08 - 7.0795E+02 4.8852E-07 2.9730E-07 1.7148E-08 1.3920E-08 - 7.9433E+02 3.3246E-07 2.0169E-07 1.1716E-08 9.0492E-09 - 8.9125E+02 2.2586E-07 1.3593E-07 7.7497E-09 5.8369E-09 - 1.0000E+03 1.5522E-07 9.3066E-08 5.1179E-09 3.8385E-09 - 1.1220E+03 1.0460E-07 6.1875E-08 3.5033E-09 2.5827E-09 - 1.2589E+03 7.0271E-08 4.1783E-08 2.3694E-09 1.7293E-09 - 1.4125E+03 4.7529E-08 2.8166E-08 1.5766E-09 1.2047E-09 - 1.5849E+03 3.2133E-08 1.8776E-08 1.0392E-09 7.9181E-10 - 1.7783E+03 2.1630E-08 1.2836E-08 6.7858E-10 5.0168E-10 - 1.9953E+03 1.4395E-08 8.5273E-09 4.6468E-10 3.4131E-10 - 2.2387E+03 9.6871E-09 5.6823E-09 3.2342E-10 2.2805E-10 - 2.5119E+03 6.5048E-09 3.7571E-09 2.1398E-10 1.4633E-10 - 2.8184E+03 4.3302E-09 2.4549E-09 1.3413E-10 9.5193E-11 - 3.1623E+03 2.9253E-09 1.6852E-09 8.5153E-11 6.4212E-11 - 3.5481E+03 1.8990E-09 1.0967E-09 5.4108E-11 4.4800E-11 - 3.9811E+03 1.2656E-09 7.1996E-10 3.7701E-11 2.8531E-11 - 4.4668E+03 8.4110E-10 4.7060E-10 2.4873E-11 1.8280E-11 - 5.0119E+03 5.5357E-10 3.1188E-10 1.6429E-11 1.0694E-11 - 5.6234E+03 3.6435E-10 2.0661E-10 1.0875E-11 6.3082E-12 - 6.3096E+03 2.3853E-10 1.3346E-10 7.2359E-12 5.0740E-12 - 7.0795E+03 1.5700E-10 8.7608E-11 4.3141E-12 3.6289E-12 - 7.9433E+03 1.0346E-10 5.7859E-11 2.4609E-12 2.1042E-12 - 8.9125E+03 6.8269E-11 3.7661E-11 1.6248E-12 1.2207E-12 - 1.0000E+04 4.4351E-11 2.3670E-11 1.2062E-12 9.3078E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0072E+04 1.0225E+04 5.0109E+03 4.5910E+03 - 1.1220E-01 9.0383E+03 9.1194E+03 4.4854E+03 4.0764E+03 - 1.2589E-01 8.0529E+03 8.0777E+03 3.9556E+03 3.5613E+03 - 1.4125E-01 7.0482E+03 7.0974E+03 3.4568E+03 3.0867E+03 - 1.5849E-01 6.1201E+03 6.1634E+03 2.9947E+03 2.6490E+03 - 1.7783E-01 5.2581E+03 5.2585E+03 2.5715E+03 2.2375E+03 - 1.9953E-01 4.4334E+03 4.4333E+03 2.1705E+03 1.8812E+03 - 2.2387E-01 3.6888E+03 3.6840E+03 1.8142E+03 1.5651E+03 - 2.5119E-01 3.0286E+03 3.0228E+03 1.5057E+03 1.2758E+03 - 2.8184E-01 2.4645E+03 2.4514E+03 1.2271E+03 1.0308E+03 - 3.1623E-01 1.9877E+03 1.9598E+03 9.9303E+02 8.2450E+02 - 3.5481E-01 1.5830E+03 1.5569E+03 7.9162E+02 6.4990E+02 - 3.9811E-01 1.2459E+03 1.2253E+03 6.2116E+02 5.0788E+02 - 4.4668E-01 9.7108E+02 9.5240E+02 4.8409E+02 3.9253E+02 - 5.0119E-01 7.5079E+02 7.3505E+02 3.7299E+02 2.9982E+02 - 5.6234E-01 5.7859E+02 5.6053E+02 2.8463E+02 2.2714E+02 - 6.3096E-01 4.4216E+02 4.2443E+02 2.1436E+02 1.7098E+02 - 7.0795E-01 3.3452E+02 3.1945E+02 1.6066E+02 1.2829E+02 - 7.9433E-01 2.5149E+02 2.3941E+02 1.1895E+02 9.4655E+01 - 8.9125E-01 1.8869E+02 1.7899E+02 8.8192E+01 6.9239E+01 - 1.0000E+00 1.4237E+02 1.3330E+02 6.4347E+01 5.0800E+01 - 1.1220E+00 1.0686E+02 9.8978E+01 4.6721E+01 3.7020E+01 - 1.2589E+00 8.0049E+01 7.3003E+01 3.4083E+01 2.6800E+01 - 1.4125E+00 5.9687E+01 5.3756E+01 2.4633E+01 1.9275E+01 - 1.5849E+00 4.4395E+01 3.9629E+01 1.7455E+01 1.3676E+01 - 1.7783E+00 3.2848E+01 2.8623E+01 1.2484E+01 9.7331E+00 - 1.9953E+00 2.4195E+01 2.0754E+01 8.9009E+00 6.9882E+00 - 2.2387E+00 1.7650E+01 1.5228E+01 6.2508E+00 4.8785E+00 - 2.5119E+00 1.2890E+01 1.0981E+01 4.3796E+00 3.3673E+00 - 2.8184E+00 9.4007E+00 7.9487E+00 3.1070E+00 2.3393E+00 - 3.1623E+00 6.8987E+00 5.6848E+00 2.1252E+00 1.6236E+00 - 3.5481E+00 5.0259E+00 4.0757E+00 1.4710E+00 1.1074E+00 - 3.9811E+00 3.6423E+00 2.9170E+00 1.0137E+00 7.5797E-01 - 4.4668E+00 2.6218E+00 2.0760E+00 6.9433E-01 5.2476E-01 - 5.0119E+00 1.8846E+00 1.4886E+00 4.6371E-01 3.5364E-01 - 5.6234E+00 1.3617E+00 1.0630E+00 3.1309E-01 2.3500E-01 - 6.3096E+00 9.7720E-01 7.5758E-01 2.1068E-01 1.5870E-01 - 7.0795E+00 7.0171E-01 5.3929E-01 1.4008E-01 1.0704E-01 - 7.9433E+00 5.0628E-01 3.8254E-01 9.6010E-02 7.1691E-02 - 8.9125E+00 3.6192E-01 2.7253E-01 6.3315E-02 4.8986E-02 - 1.0000E+01 2.5748E-01 1.9475E-01 4.3391E-02 3.2974E-02 - 1.1220E+01 1.8384E-01 1.3745E-01 2.8960E-02 2.1686E-02 - 1.2589E+01 1.3086E-01 9.7487E-02 1.9376E-02 1.4409E-02 - 1.4125E+01 9.3521E-02 6.9202E-02 1.3196E-02 9.9191E-03 - 1.5849E+01 6.6605E-02 4.8937E-02 8.6398E-03 6.6165E-03 - 1.7783E+01 4.7092E-02 3.5086E-02 5.7053E-03 4.4588E-03 - 1.9953E+01 3.3526E-02 2.4826E-02 3.8458E-03 3.0504E-03 - 2.2387E+01 2.3739E-02 1.7364E-02 2.6530E-03 1.9597E-03 - 2.5119E+01 1.6829E-02 1.2260E-02 1.7339E-03 1.3788E-03 - 2.8184E+01 1.2002E-02 8.5779E-03 1.1103E-03 9.3444E-04 - 3.1623E+01 8.4752E-03 6.1017E-03 7.5072E-04 5.8851E-04 - 3.5481E+01 6.0121E-03 4.3052E-03 5.0253E-04 3.9683E-04 - 3.9811E+01 4.2396E-03 3.0372E-03 3.3565E-04 2.6744E-04 - 4.4668E+01 2.9897E-03 2.1336E-03 2.2480E-04 1.7850E-04 - 5.0119E+01 2.1088E-03 1.4957E-03 1.5154E-04 1.1908E-04 - 5.6234E+01 1.4873E-03 1.0439E-03 1.0139E-04 8.0728E-05 - 6.3096E+01 1.0455E-03 7.2797E-04 6.7669E-05 5.5200E-05 - 7.0795E+01 7.3408E-04 5.1206E-04 4.5778E-05 3.7748E-05 - 7.9433E+01 5.1344E-04 3.5665E-04 3.1033E-05 2.5560E-05 - 8.9125E+01 3.6143E-04 2.4678E-04 2.1085E-05 1.7383E-05 - 1.0000E+02 2.5418E-04 1.7420E-04 1.4388E-05 1.1790E-05 - 1.1220E+02 1.7837E-04 1.2125E-04 9.7459E-06 7.9982E-06 - 1.2589E+02 1.2433E-04 8.4093E-05 6.5827E-06 5.4265E-06 - 1.4125E+02 8.6944E-05 5.8552E-05 4.4895E-06 3.7138E-06 - 1.5849E+02 6.0999E-05 4.0673E-05 3.0593E-06 2.4997E-06 - 1.7783E+02 4.2552E-05 2.8121E-05 2.0444E-06 1.6998E-06 - 1.9953E+02 2.9678E-05 1.9556E-05 1.3950E-06 1.1653E-06 - 2.2387E+02 2.0559E-05 1.3471E-05 9.3686E-07 7.5602E-07 - 2.5119E+02 1.4380E-05 9.2831E-06 6.1818E-07 5.0357E-07 - 2.8184E+02 9.9872E-06 6.4110E-06 4.2072E-07 3.5844E-07 - 3.1623E+02 6.9530E-06 4.4940E-06 2.9948E-07 2.4313E-07 - 3.5481E+02 4.8057E-06 3.0618E-06 2.0256E-07 1.6164E-07 - 3.9811E+02 3.3387E-06 2.1114E-06 1.3632E-07 1.1005E-07 - 4.4668E+02 2.3229E-06 1.4472E-06 9.1856E-08 7.3778E-08 - 5.0119E+02 1.6027E-06 9.9333E-07 6.2882E-08 4.9649E-08 - 5.6234E+02 1.1001E-06 6.8631E-07 4.2230E-08 3.4294E-08 - 6.3096E+02 7.5336E-07 4.6537E-07 2.8720E-08 2.3019E-08 - 7.0795E+02 5.1575E-07 3.1632E-07 1.9590E-08 1.5121E-08 - 7.9433E+02 3.5145E-07 2.1545E-07 1.3034E-08 1.0036E-08 - 8.9125E+02 2.4249E-07 1.4746E-07 8.6144E-09 6.8606E-09 - 1.0000E+03 1.6665E-07 1.0138E-07 5.9482E-09 4.4512E-09 - 1.1220E+03 1.1217E-07 6.7872E-08 3.9303E-09 2.9895E-09 - 1.2589E+03 7.6003E-08 4.5506E-08 2.6566E-09 1.9394E-09 - 1.4125E+03 5.1465E-08 3.0305E-08 1.7554E-09 1.2497E-09 - 1.5849E+03 3.4606E-08 2.0371E-08 1.0931E-09 8.4561E-10 - 1.7783E+03 2.3198E-08 1.3626E-08 7.0520E-10 5.6202E-10 - 1.9953E+03 1.5504E-08 9.1361E-09 5.0692E-10 3.6854E-10 - 2.2387E+03 1.0422E-08 6.1235E-09 3.3710E-10 2.4127E-10 - 2.5119E+03 7.0240E-09 4.1145E-09 2.3155E-10 1.5721E-10 - 2.8184E+03 4.7322E-09 2.7130E-09 1.5198E-10 1.1294E-10 - 3.1623E+03 3.2211E-09 1.8345E-09 9.5667E-11 7.1862E-11 - 3.5481E+03 2.0986E-09 1.1933E-09 6.3606E-11 4.6923E-11 - 3.9811E+03 1.3813E-09 7.9820E-10 4.2133E-11 3.0802E-11 - 4.4668E+03 9.0582E-10 5.2887E-10 2.8370E-11 1.9412E-11 - 5.0119E+03 5.9260E-10 3.4907E-10 2.0029E-11 1.2469E-11 - 5.6234E+03 3.9533E-10 2.2638E-10 1.2510E-11 9.0267E-12 - 6.3096E+03 2.6518E-10 1.5019E-10 7.8865E-12 6.1188E-12 - 7.0795E+03 1.7454E-10 9.7056E-11 5.2518E-12 3.8580E-12 - 7.9433E+03 1.1446E-10 6.3734E-11 3.1702E-12 2.5288E-12 - 8.9125E+03 7.5522E-11 4.2554E-11 1.9970E-12 1.6636E-12 - 1.0000E+04 4.9734E-11 2.8131E-11 1.2706E-12 1.0209E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0073E+04 1.0146E+04 4.9617E+03 4.5897E+03 - 1.1220E-01 9.0268E+03 9.0585E+03 4.4339E+03 4.0658E+03 - 1.2589E-01 8.0149E+03 8.0125E+03 3.9215E+03 3.5652E+03 - 1.4125E-01 7.0432E+03 7.0392E+03 3.4149E+03 3.0918E+03 - 1.5849E-01 6.1081E+03 6.1226E+03 2.9608E+03 2.6557E+03 - 1.7783E-01 5.2335E+03 5.2411E+03 2.5508E+03 2.2537E+03 - 1.9953E-01 4.4292E+03 4.4098E+03 2.1643E+03 1.8914E+03 - 2.2387E-01 3.6922E+03 3.6663E+03 1.8086E+03 1.5588E+03 - 2.5119E-01 3.0325E+03 3.0057E+03 1.4981E+03 1.2725E+03 - 2.8184E-01 2.4656E+03 2.4409E+03 1.2233E+03 1.0370E+03 - 3.1623E-01 1.9814E+03 1.9591E+03 9.8339E+02 8.3067E+02 - 3.5481E-01 1.5733E+03 1.5525E+03 7.8779E+02 6.5336E+02 - 3.9811E-01 1.2409E+03 1.2230E+03 6.2238E+02 5.0493E+02 - 4.4668E-01 9.7016E+02 9.5175E+02 4.8478E+02 3.8937E+02 - 5.0119E-01 7.5184E+02 7.3279E+02 3.7419E+02 2.9999E+02 - 5.6234E-01 5.7736E+02 5.6131E+02 2.8420E+02 2.2950E+02 - 6.3096E-01 4.4231E+02 4.2529E+02 2.1373E+02 1.7296E+02 - 7.0795E-01 3.3802E+02 3.2011E+02 1.6054E+02 1.2757E+02 - 7.9433E-01 2.5446E+02 2.3966E+02 1.1968E+02 9.4106E+01 - 8.9125E-01 1.9023E+02 1.7851E+02 8.7918E+01 6.9422E+01 - 1.0000E+00 1.4255E+02 1.3323E+02 6.4400E+01 5.0519E+01 - 1.1220E+00 1.0687E+02 9.8578E+01 4.7101E+01 3.6874E+01 - 1.2589E+00 7.9854E+01 7.2811E+01 3.3895E+01 2.6825E+01 - 1.4125E+00 5.9700E+01 5.3754E+01 2.4437E+01 1.9134E+01 - 1.5849E+00 4.4303E+01 3.9545E+01 1.7722E+01 1.3633E+01 - 1.7783E+00 3.2821E+01 2.8852E+01 1.2613E+01 9.6892E+00 - 1.9953E+00 2.4277E+01 2.1147E+01 8.9065E+00 6.8508E+00 - 2.2387E+00 1.7714E+01 1.5363E+01 6.2827E+00 4.8189E+00 - 2.5119E+00 1.3077E+01 1.0953E+01 4.3844E+00 3.3767E+00 - 2.8184E+00 9.5558E+00 7.8954E+00 3.0827E+00 2.3300E+00 - 3.1623E+00 6.8851E+00 5.7044E+00 2.1075E+00 1.6178E+00 - 3.5481E+00 4.9994E+00 4.0949E+00 1.4576E+00 1.1151E+00 - 3.9811E+00 3.6124E+00 2.9333E+00 1.0046E+00 7.6272E-01 - 4.4668E+00 2.5951E+00 2.0943E+00 6.8082E-01 5.1599E-01 - 5.0119E+00 1.8827E+00 1.5015E+00 4.6280E-01 3.4514E-01 - 5.6234E+00 1.3694E+00 1.0730E+00 3.1645E-01 2.3489E-01 - 6.3096E+00 9.8298E-01 7.6655E-01 2.1229E-01 1.6145E-01 - 7.0795E+00 6.9830E-01 5.4737E-01 1.4261E-01 1.0830E-01 - 7.9433E+00 5.0250E-01 3.8829E-01 9.5111E-02 7.2107E-02 - 8.9125E+00 3.5967E-01 2.7421E-01 6.2878E-02 4.8180E-02 - 1.0000E+01 2.5474E-01 1.9225E-01 4.3026E-02 3.2785E-02 - 1.1220E+01 1.8248E-01 1.3772E-01 2.8553E-02 2.1994E-02 - 1.2589E+01 1.3104E-01 9.8014E-02 1.8979E-02 1.4835E-02 - 1.4125E+01 9.3408E-02 6.9107E-02 1.2726E-02 9.9059E-03 - 1.5849E+01 6.6837E-02 4.8890E-02 8.6347E-03 6.4376E-03 - 1.7783E+01 4.7718E-02 3.5009E-02 5.7310E-03 4.3481E-03 - 1.9953E+01 3.3834E-02 2.4974E-02 3.6680E-03 2.9388E-03 - 2.2387E+01 2.3935E-02 1.7296E-02 2.5427E-03 1.9606E-03 - 2.5119E+01 1.7026E-02 1.2188E-02 1.7768E-03 1.3431E-03 - 2.8184E+01 1.2152E-02 8.7228E-03 1.1258E-03 8.9117E-04 - 3.1623E+01 8.5127E-03 6.1141E-03 7.4752E-04 5.8678E-04 - 3.5481E+01 6.0212E-03 4.3171E-03 5.0250E-04 3.9242E-04 - 3.9811E+01 4.2626E-03 3.0377E-03 3.3823E-04 2.6462E-04 - 4.4668E+01 3.0021E-03 2.1297E-03 2.2779E-04 1.7962E-04 - 5.0119E+01 2.1042E-03 1.4911E-03 1.4966E-04 1.2068E-04 - 5.6234E+01 1.4897E-03 1.0458E-03 1.0170E-04 8.1935E-05 - 6.3096E+01 1.0478E-03 7.3648E-04 7.0360E-05 5.5560E-05 - 7.0795E+01 7.3504E-04 5.1607E-04 4.5131E-05 3.7454E-05 - 7.9433E+01 5.1817E-04 3.5886E-04 2.9886E-05 2.5663E-05 - 8.9125E+01 3.6140E-04 2.5008E-04 2.0369E-05 1.7524E-05 - 1.0000E+02 2.5439E-04 1.7435E-04 1.4096E-05 1.1738E-05 - 1.1220E+02 1.7812E-04 1.2131E-04 9.7919E-06 7.9596E-06 - 1.2589E+02 1.2511E-04 8.4119E-05 6.7344E-06 5.3655E-06 - 1.4125E+02 8.7389E-05 5.8363E-05 4.5172E-06 3.6641E-06 - 1.5849E+02 6.1071E-05 4.0433E-05 3.0233E-06 2.5357E-06 - 1.7783E+02 4.2455E-05 2.8186E-05 2.0515E-06 1.7192E-06 - 1.9953E+02 2.9562E-05 1.9551E-05 1.3784E-06 1.1546E-06 - 2.2387E+02 2.0697E-05 1.3443E-05 9.5602E-07 7.9657E-07 - 2.5119E+02 1.4381E-05 9.2639E-06 6.4503E-07 5.4267E-07 - 2.8184E+02 9.9864E-06 6.4672E-06 4.4009E-07 3.6132E-07 - 3.1623E+02 6.9639E-06 4.4916E-06 3.0262E-07 2.3993E-07 - 3.5481E+02 4.8065E-06 3.0772E-06 2.0352E-07 1.6113E-07 - 3.9811E+02 3.3266E-06 2.1006E-06 1.3960E-07 1.0504E-07 - 4.4668E+02 2.2995E-06 1.4551E-06 9.4812E-08 7.1325E-08 - 5.0119E+02 1.5876E-06 1.0010E-06 6.4095E-08 5.0036E-08 - 5.6234E+02 1.1043E-06 6.8315E-07 4.2134E-08 3.3037E-08 - 6.3096E+02 7.5814E-07 4.6430E-07 2.8399E-08 2.1718E-08 - 7.0795E+02 5.1919E-07 3.1724E-07 1.8269E-08 1.4775E-08 - 7.9433E+02 3.5588E-07 2.1571E-07 1.2408E-08 9.7778E-09 - 8.9125E+02 2.4576E-07 1.4668E-07 8.8129E-09 6.4656E-09 - 1.0000E+03 1.6723E-07 1.0118E-07 5.7839E-09 4.5171E-09 - 1.1220E+03 1.1162E-07 6.7332E-08 3.8557E-09 2.8300E-09 - 1.2589E+03 7.5496E-08 4.5310E-08 2.5304E-09 1.8865E-09 - 1.4125E+03 5.1463E-08 3.0706E-08 1.6380E-09 1.3130E-09 - 1.5849E+03 3.4527E-08 2.0685E-08 1.0994E-09 8.7017E-10 - 1.7783E+03 2.3373E-08 1.3834E-08 7.0836E-10 5.3620E-10 - 1.9953E+03 1.5753E-08 9.1697E-09 4.8159E-10 3.8034E-10 - 2.2387E+03 1.0478E-08 6.0965E-09 3.1744E-10 2.5216E-10 - 2.5119E+03 7.0884E-09 4.0309E-09 2.1321E-10 1.5185E-10 - 2.8184E+03 4.7098E-09 2.6967E-09 1.4988E-10 1.0184E-10 - 3.1623E+03 3.2155E-09 1.8396E-09 9.6280E-11 6.8149E-11 - 3.5481E+03 2.0742E-09 1.1956E-09 6.2565E-11 4.3568E-11 - 3.9811E+03 1.3887E-09 7.9356E-10 4.0717E-11 2.8354E-11 - 4.4668E+03 9.1688E-10 5.2387E-10 2.4542E-11 2.0493E-11 - 5.0119E+03 6.0201E-10 3.4780E-10 1.5195E-11 1.4669E-11 - 5.6234E+03 3.9925E-10 2.2491E-10 1.1079E-11 9.9930E-12 - 6.3096E+03 2.6601E-10 1.4594E-10 7.3431E-12 5.4277E-12 - 7.0795E+03 1.7785E-10 9.7266E-11 4.8832E-12 3.7165E-12 - 7.9433E+03 1.1733E-10 6.5057E-11 3.1759E-12 2.6303E-12 - 8.9125E+03 7.6759E-11 4.2620E-11 2.1035E-12 1.7412E-12 - 1.0000E+04 4.9397E-11 2.7421E-11 1.5209E-12 1.0227E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0030E+04 1.0100E+04 4.9156E+03 4.6187E+03 - 1.1220E-01 9.0015E+03 9.0286E+03 4.4075E+03 4.1069E+03 - 1.2589E-01 8.0281E+03 8.0023E+03 3.9124E+03 3.5947E+03 - 1.4125E-01 7.0662E+03 7.0189E+03 3.4118E+03 3.0986E+03 - 1.5849E-01 6.1340E+03 6.0913E+03 2.9471E+03 2.6580E+03 - 1.7783E-01 5.2546E+03 5.2031E+03 2.5172E+03 2.2593E+03 - 1.9953E-01 4.4387E+03 4.3834E+03 2.1374E+03 1.8870E+03 - 2.2387E-01 3.6994E+03 3.6528E+03 1.7906E+03 1.5638E+03 - 2.5119E-01 3.0357E+03 3.0019E+03 1.4789E+03 1.2802E+03 - 2.8184E-01 2.4589E+03 2.4347E+03 1.2159E+03 1.0343E+03 - 3.1623E-01 1.9771E+03 1.9502E+03 9.8005E+02 8.2879E+02 - 3.5481E-01 1.5783E+03 1.5492E+03 7.7701E+02 6.4930E+02 - 3.9811E-01 1.2439E+03 1.2144E+03 6.1080E+02 5.0805E+02 - 4.4668E-01 9.6879E+02 9.4581E+02 4.7527E+02 3.9539E+02 - 5.0119E-01 7.5054E+02 7.3034E+02 3.6722E+02 3.0116E+02 - 5.6234E-01 5.7628E+02 5.5749E+02 2.8100E+02 2.2875E+02 - 6.3096E-01 4.3970E+02 4.2287E+02 2.1246E+02 1.7112E+02 - 7.0795E-01 3.3404E+02 3.1896E+02 1.6009E+02 1.2781E+02 - 7.9433E-01 2.5244E+02 2.4048E+02 1.1907E+02 9.4856E+01 - 8.9125E-01 1.9073E+02 1.7955E+02 8.6784E+01 6.8833E+01 - 1.0000E+00 1.4331E+02 1.3279E+02 6.4067E+01 5.0424E+01 - 1.1220E+00 1.0708E+02 9.8329E+01 4.6719E+01 3.6456E+01 - 1.2589E+00 7.9871E+01 7.2846E+01 3.3980E+01 2.6421E+01 - 1.4125E+00 5.9676E+01 5.3754E+01 2.4631E+01 1.9068E+01 - 1.5849E+00 4.4207E+01 3.9541E+01 1.7549E+01 1.3603E+01 - 1.7783E+00 3.2452E+01 2.8933E+01 1.2336E+01 9.7692E+00 - 1.9953E+00 2.3888E+01 2.0973E+01 8.7652E+00 6.7736E+00 - 2.2387E+00 1.7633E+01 1.5199E+01 6.2029E+00 4.7061E+00 - 2.5119E+00 1.2930E+01 1.0948E+01 4.3493E+00 3.3539E+00 - 2.8184E+00 9.4834E+00 7.9170E+00 3.0337E+00 2.3812E+00 - 3.1623E+00 6.8386E+00 5.6616E+00 2.1224E+00 1.6186E+00 - 3.5481E+00 4.9867E+00 4.0551E+00 1.4675E+00 1.1079E+00 - 3.9811E+00 3.6141E+00 2.9211E+00 1.0045E+00 7.5772E-01 - 4.4668E+00 2.6065E+00 2.1020E+00 6.8488E-01 5.1950E-01 - 5.0119E+00 1.8857E+00 1.4853E+00 4.6036E-01 3.4882E-01 - 5.6234E+00 1.3529E+00 1.0504E+00 3.1526E-01 2.3492E-01 - 6.3096E+00 9.7193E-01 7.5336E-01 2.1508E-01 1.6068E-01 - 7.0795E+00 6.9819E-01 5.3846E-01 1.4598E-01 1.0680E-01 - 7.9433E+00 4.9776E-01 3.8609E-01 9.8149E-02 7.3386E-02 - 8.9125E+00 3.5828E-01 2.7499E-01 6.5132E-02 5.1030E-02 - 1.0000E+01 2.5741E-01 1.9497E-01 4.3269E-02 3.2889E-02 - 1.1220E+01 1.8327E-01 1.3779E-01 2.9006E-02 2.2193E-02 - 1.2589E+01 1.3098E-01 9.6910E-02 1.9431E-02 1.4787E-02 - 1.4125E+01 9.3471E-02 6.8792E-02 1.2571E-02 9.7962E-03 - 1.5849E+01 6.6538E-02 4.9047E-02 8.3113E-03 6.4884E-03 - 1.7783E+01 4.7285E-02 3.4787E-02 5.6151E-03 4.3497E-03 - 1.9953E+01 3.3799E-02 2.4909E-02 3.7628E-03 2.9715E-03 - 2.2387E+01 2.4220E-02 1.7857E-02 2.4759E-03 2.0071E-03 - 2.5119E+01 1.7017E-02 1.2482E-02 1.6309E-03 1.3298E-03 - 2.8184E+01 1.2124E-02 8.7290E-03 1.1119E-03 8.8254E-04 - 3.1623E+01 8.4983E-03 6.0968E-03 7.3979E-04 5.8883E-04 - 3.5481E+01 5.9991E-03 4.2973E-03 4.9700E-04 3.9585E-04 - 3.9811E+01 4.2456E-03 3.0342E-03 3.3424E-04 2.6634E-04 - 4.4668E+01 3.0026E-03 2.1283E-03 2.2422E-04 1.7928E-04 - 5.0119E+01 2.1183E-03 1.4896E-03 1.4775E-04 1.2123E-04 - 5.6234E+01 1.4901E-03 1.0439E-03 9.9318E-05 8.2013E-05 - 6.3096E+01 1.0470E-03 7.3025E-04 6.8578E-05 5.5330E-05 - 7.0795E+01 7.3985E-04 5.0984E-04 4.5475E-05 3.7758E-05 - 7.9433E+01 5.2311E-04 3.5758E-04 3.0912E-05 2.5776E-05 - 8.9125E+01 3.6383E-04 2.4792E-04 2.1805E-05 1.7454E-05 - 1.0000E+02 2.5406E-04 1.7470E-04 1.4512E-05 1.1800E-05 - 1.1220E+02 1.7803E-04 1.2108E-04 9.8476E-06 7.9877E-06 - 1.2589E+02 1.2460E-04 8.4080E-05 6.7347E-06 5.4158E-06 - 1.4125E+02 8.7057E-05 5.8381E-05 4.5782E-06 3.6512E-06 - 1.5849E+02 6.1106E-05 4.0626E-05 3.0991E-06 2.4415E-06 - 1.7783E+02 4.2529E-05 2.8134E-05 2.0255E-06 1.6843E-06 - 1.9953E+02 2.9508E-05 1.9502E-05 1.3651E-06 1.1768E-06 - 2.2387E+02 2.0528E-05 1.3490E-05 9.3472E-07 7.9417E-07 - 2.5119E+02 1.4324E-05 9.3167E-06 6.3850E-07 5.3007E-07 - 2.8184E+02 1.0036E-05 6.5012E-06 4.2694E-07 3.4694E-07 - 3.1623E+02 6.9523E-06 4.4769E-06 2.9995E-07 2.4091E-07 - 3.5481E+02 4.8008E-06 3.0668E-06 2.0476E-07 1.6031E-07 - 3.9811E+02 3.3070E-06 2.1202E-06 1.3562E-07 1.0721E-07 - 4.4668E+02 2.3031E-06 1.4629E-06 9.3453E-08 7.1674E-08 - 5.0119E+02 1.5898E-06 1.0007E-06 6.3190E-08 4.7456E-08 - 5.6234E+02 1.0991E-06 6.8503E-07 4.2235E-08 3.2637E-08 - 6.3096E+02 7.5068E-07 4.6467E-07 2.9113E-08 2.1699E-08 - 7.0795E+02 5.1672E-07 3.1691E-07 1.9251E-08 1.4834E-08 - 7.9433E+02 3.5379E-07 2.1570E-07 1.2729E-08 9.6879E-09 - 8.9125E+02 2.4266E-07 1.4699E-07 8.2400E-09 6.7580E-09 - 1.0000E+03 1.6632E-07 1.0138E-07 5.6154E-09 4.5698E-09 - 1.1220E+03 1.1214E-07 6.8395E-08 3.8805E-09 2.9284E-09 - 1.2589E+03 7.5795E-08 4.5972E-08 2.6372E-09 1.9061E-09 - 1.4125E+03 5.1127E-08 3.0898E-08 1.7618E-09 1.3360E-09 - 1.5849E+03 3.4839E-08 2.0343E-08 1.1087E-09 8.5239E-10 - 1.7783E+03 2.3680E-08 1.3671E-08 6.9909E-10 5.3206E-10 - 1.9953E+03 1.5727E-08 9.3469E-09 5.0868E-10 3.7221E-10 - 2.2387E+03 1.0542E-08 6.2046E-09 3.4712E-10 2.5157E-10 - 2.5119E+03 7.1285E-09 4.1048E-09 2.2689E-10 1.6379E-10 - 2.8184E+03 4.7567E-09 2.7397E-09 1.4261E-10 1.0520E-10 - 3.1623E+03 3.2238E-09 1.8698E-09 9.7452E-11 7.2770E-11 - 3.5481E+03 2.0746E-09 1.2247E-09 6.4212E-11 4.7434E-11 - 3.9811E+03 1.3761E-09 8.0285E-10 4.1437E-11 3.0383E-11 - 4.4668E+03 9.1494E-10 5.2605E-10 2.8310E-11 2.0221E-11 - 5.0119E+03 6.0441E-10 3.4631E-10 1.9191E-11 1.3487E-11 - 5.6234E+03 4.0415E-10 2.3328E-10 1.1374E-11 8.0298E-12 - 6.3096E+03 2.6645E-10 1.5071E-10 7.8073E-12 5.3500E-12 - 7.0795E+03 1.7387E-10 9.7734E-11 5.4146E-12 3.3084E-12 - 7.9433E+03 1.1235E-10 6.4174E-11 3.3053E-12 2.0549E-12 - 8.9125E+03 7.4739E-11 4.1759E-11 2.2944E-12 1.5000E-12 - 1.0000E+04 5.0494E-11 2.7312E-11 1.3222E-12 1.0091E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0053E+04 1.0097E+04 4.9238E+03 4.5875E+03 - 1.1220E-01 9.0059E+03 9.0345E+03 4.4050E+03 4.0867E+03 - 1.2589E-01 7.9998E+03 7.9919E+03 3.8944E+03 3.5919E+03 - 1.4125E-01 7.0414E+03 7.0088E+03 3.3953E+03 3.1202E+03 - 1.5849E-01 6.1176E+03 6.0817E+03 2.9340E+03 2.6684E+03 - 1.7783E-01 5.2495E+03 5.2000E+03 2.5219E+03 2.2576E+03 - 1.9953E-01 4.4360E+03 4.3934E+03 2.1386E+03 1.8904E+03 - 2.2387E-01 3.6884E+03 3.6563E+03 1.7949E+03 1.5610E+03 - 2.5119E-01 3.0351E+03 2.9906E+03 1.4876E+03 1.2755E+03 - 2.8184E-01 2.4661E+03 2.4249E+03 1.2085E+03 1.0338E+03 - 3.1623E-01 1.9771E+03 1.9534E+03 9.7322E+02 8.2730E+02 - 3.5481E-01 1.5741E+03 1.5516E+03 7.7992E+02 6.5438E+02 - 3.9811E-01 1.2389E+03 1.2157E+03 6.1603E+02 5.0833E+02 - 4.4668E-01 9.7013E+02 9.4482E+02 4.7646E+02 3.9235E+02 - 5.0119E-01 7.5192E+02 7.3096E+02 3.6683E+02 3.0035E+02 - 5.6234E-01 5.7389E+02 5.6057E+02 2.8192E+02 2.2826E+02 - 6.3096E-01 4.3873E+02 4.2682E+02 2.1316E+02 1.7279E+02 - 7.0795E-01 3.3453E+02 3.2168E+02 1.5843E+02 1.2775E+02 - 7.9433E-01 2.5255E+02 2.3924E+02 1.1646E+02 9.3275E+01 - 8.9125E-01 1.9104E+02 1.7944E+02 8.5595E+01 6.9184E+01 - 1.0000E+00 1.4287E+02 1.3341E+02 6.3795E+01 5.0844E+01 - 1.1220E+00 1.0642E+02 9.8396E+01 4.6801E+01 3.6920E+01 - 1.2589E+00 7.9350E+01 7.2774E+01 3.3984E+01 2.6595E+01 - 1.4125E+00 5.9388E+01 5.3782E+01 2.4445E+01 1.9192E+01 - 1.5849E+00 4.4346E+01 3.9437E+01 1.7430E+01 1.3684E+01 - 1.7783E+00 3.2701E+01 2.8806E+01 1.2432E+01 9.7839E+00 - 1.9953E+00 2.4023E+01 2.0901E+01 8.9225E+00 6.9151E+00 - 2.2387E+00 1.7701E+01 1.5046E+01 6.3268E+00 4.8217E+00 - 2.5119E+00 1.2940E+01 1.0921E+01 4.3552E+00 3.3856E+00 - 2.8184E+00 9.3897E+00 7.9384E+00 3.0329E+00 2.3321E+00 - 3.1623E+00 6.8631E+00 5.7189E+00 2.1181E+00 1.6087E+00 - 3.5481E+00 4.9827E+00 4.1025E+00 1.4684E+00 1.1083E+00 - 3.9811E+00 3.6312E+00 2.9194E+00 1.0056E+00 7.5517E-01 - 4.4668E+00 2.6375E+00 2.1047E+00 6.8348E-01 5.1636E-01 - 5.0119E+00 1.8907E+00 1.5134E+00 4.6723E-01 3.5019E-01 - 5.6234E+00 1.3563E+00 1.0762E+00 3.1309E-01 2.3689E-01 - 6.3096E+00 9.7955E-01 7.6350E-01 2.1345E-01 1.6013E-01 - 7.0795E+00 7.0115E-01 5.4419E-01 1.4319E-01 1.0648E-01 - 7.9433E+00 5.0766E-01 3.8527E-01 9.4691E-02 7.2630E-02 - 8.9125E+00 3.6363E-01 2.7529E-01 6.6007E-02 4.8684E-02 - 1.0000E+01 2.5739E-01 1.9549E-01 4.3256E-02 3.2384E-02 - 1.1220E+01 1.8285E-01 1.3866E-01 2.9092E-02 2.1988E-02 - 1.2589E+01 1.3065E-01 9.7919E-02 1.9516E-02 1.4982E-02 - 1.4125E+01 9.3288E-02 6.9189E-02 1.3071E-02 9.8231E-03 - 1.5849E+01 6.6146E-02 4.8894E-02 8.6411E-03 6.3947E-03 - 1.7783E+01 4.7742E-02 3.4691E-02 5.7132E-03 4.2465E-03 - 1.9953E+01 3.4279E-02 2.4735E-02 3.9262E-03 2.9372E-03 - 2.2387E+01 2.4181E-02 1.7519E-02 2.5561E-03 1.9144E-03 - 2.5119E+01 1.6891E-02 1.2203E-02 1.6596E-03 1.3182E-03 - 2.8184E+01 1.1964E-02 8.6547E-03 1.1007E-03 8.9225E-04 - 3.1623E+01 8.4944E-03 6.1137E-03 7.5045E-04 5.9106E-04 - 3.5481E+01 6.0047E-03 4.3142E-03 5.0272E-04 4.0079E-04 - 3.9811E+01 4.2347E-03 3.0281E-03 3.3679E-04 2.6836E-04 - 4.4668E+01 2.9891E-03 2.1256E-03 2.2271E-04 1.8017E-04 - 5.0119E+01 2.1158E-03 1.4922E-03 1.4897E-04 1.2182E-04 - 5.6234E+01 1.4914E-03 1.0475E-03 1.0100E-04 8.1767E-05 - 6.3096E+01 1.0447E-03 7.3050E-04 6.8271E-05 5.5430E-05 - 7.0795E+01 7.3272E-04 5.0895E-04 4.5783E-05 3.7878E-05 - 7.9433E+01 5.1496E-04 3.5714E-04 3.1330E-05 2.5469E-05 - 8.9125E+01 3.5943E-04 2.4941E-04 2.1430E-05 1.7834E-05 - 1.0000E+02 2.5367E-04 1.7478E-04 1.4367E-05 1.1901E-05 - 1.1220E+02 1.7762E-04 1.2124E-04 9.6980E-06 7.9784E-06 - 1.2589E+02 1.2441E-04 8.4223E-05 6.5285E-06 5.3820E-06 - 1.4125E+02 8.7128E-05 5.8599E-05 4.3850E-06 3.6025E-06 - 1.5849E+02 6.0972E-05 4.0670E-05 3.0306E-06 2.4612E-06 - 1.7783E+02 4.2550E-05 2.8143E-05 2.1244E-06 1.7319E-06 - 1.9953E+02 2.9636E-05 1.9451E-05 1.4003E-06 1.1738E-06 - 2.2387E+02 2.0669E-05 1.3463E-05 9.2367E-07 7.6411E-07 - 2.5119E+02 1.4383E-05 9.3288E-06 6.4991E-07 5.0070E-07 - 2.8184E+02 9.9228E-06 6.5022E-06 4.4248E-07 3.4881E-07 - 3.1623E+02 6.9613E-06 4.4782E-06 2.9927E-07 2.4179E-07 - 3.5481E+02 4.8189E-06 3.0808E-06 2.0757E-07 1.5727E-07 - 3.9811E+02 3.3272E-06 2.1220E-06 1.4207E-07 1.0430E-07 - 4.4668E+02 2.2913E-06 1.4581E-06 9.4781E-08 7.1063E-08 - 5.0119E+02 1.5792E-06 9.9700E-07 6.2162E-08 4.7439E-08 - 5.6234E+02 1.1038E-06 6.8434E-07 4.3009E-08 3.2534E-08 - 6.3096E+02 7.5698E-07 4.6689E-07 2.9070E-08 2.2047E-08 - 7.0795E+02 5.1838E-07 3.1880E-07 1.9621E-08 1.5183E-08 - 7.9433E+02 3.5374E-07 2.1665E-07 1.2144E-08 1.0050E-08 - 8.9125E+02 2.4253E-07 1.4801E-07 8.0893E-09 6.4903E-09 - 1.0000E+03 1.6675E-07 1.0124E-07 5.6579E-09 4.2986E-09 - 1.1220E+03 1.1150E-07 6.8218E-08 3.9152E-09 2.8619E-09 - 1.2589E+03 7.5860E-08 4.5872E-08 2.6563E-09 1.9397E-09 - 1.4125E+03 5.1567E-08 3.0484E-08 1.7331E-09 1.2738E-09 - 1.5849E+03 3.4378E-08 2.0576E-08 1.1640E-09 8.6738E-10 - 1.7783E+03 2.3035E-08 1.3816E-08 7.7081E-10 5.9072E-10 - 1.9953E+03 1.5636E-08 9.1605E-09 4.8568E-10 3.7068E-10 - 2.2387E+03 1.0558E-08 6.1333E-09 3.3402E-10 2.5462E-10 - 2.5119E+03 7.1161E-09 4.1415E-09 2.2692E-10 1.6364E-10 - 2.8184E+03 4.7467E-09 2.7112E-09 1.4926E-10 9.8455E-11 - 3.1623E+03 3.2198E-09 1.8555E-09 9.2173E-11 6.8890E-11 - 3.5481E+03 2.0905E-09 1.1955E-09 5.9659E-11 4.3063E-11 - 3.9811E+03 1.3776E-09 7.8504E-10 4.1809E-11 2.7915E-11 - 4.4668E+03 9.0567E-10 5.1863E-10 2.7712E-11 1.8939E-11 - 5.0119E+03 6.0338E-10 3.3975E-10 1.7267E-11 1.3006E-11 - 5.6234E+03 4.0034E-10 2.2054E-10 1.0795E-11 8.8101E-12 - 6.3096E+03 2.6459E-10 1.4850E-10 7.2245E-12 5.5754E-12 - 7.0795E+03 1.7439E-10 9.6672E-11 4.6663E-12 3.6568E-12 - 7.9433E+03 1.1366E-10 6.2948E-11 3.0885E-12 2.2778E-12 - 8.9125E+03 7.3621E-11 4.2011E-11 1.8820E-12 1.4799E-12 - 1.0000E+04 4.8525E-11 2.7379E-11 1.3828E-12 9.4581E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0110E+04 1.0131E+04 4.9063E+03 4.6133E+03 - 1.1220E-01 9.0288E+03 9.0276E+03 4.4074E+03 4.0940E+03 - 1.2589E-01 8.0275E+03 8.0048E+03 3.8946E+03 3.5845E+03 - 1.4125E-01 7.0447E+03 7.0224E+03 3.3998E+03 3.1059E+03 - 1.5849E-01 6.1079E+03 6.0756E+03 2.9513E+03 2.6548E+03 - 1.7783E-01 5.2524E+03 5.1964E+03 2.5276E+03 2.2554E+03 - 1.9953E-01 4.4340E+03 4.3879E+03 2.1424E+03 1.8934E+03 - 2.2387E-01 3.6930E+03 3.6504E+03 1.7962E+03 1.5699E+03 - 2.5119E-01 3.0324E+03 2.9977E+03 1.4810E+03 1.2810E+03 - 2.8184E-01 2.4564E+03 2.4281E+03 1.2087E+03 1.0332E+03 - 3.1623E-01 1.9791E+03 1.9428E+03 9.8025E+02 8.2643E+02 - 3.5481E-01 1.5740E+03 1.5459E+03 7.8245E+02 6.5203E+02 - 3.9811E-01 1.2353E+03 1.2198E+03 6.1393E+02 5.0945E+02 - 4.4668E-01 9.6685E+02 9.4895E+02 4.7840E+02 3.9488E+02 - 5.0119E-01 7.5195E+02 7.3122E+02 3.6925E+02 3.0299E+02 - 5.6234E-01 5.7789E+02 5.5681E+02 2.8006E+02 2.2842E+02 - 6.3096E-01 4.4075E+02 4.1931E+02 2.1264E+02 1.7058E+02 - 7.0795E-01 3.3303E+02 3.1473E+02 1.5907E+02 1.2698E+02 - 7.9433E-01 2.5068E+02 2.3726E+02 1.1825E+02 9.3984E+01 - 8.9125E-01 1.8844E+02 1.7765E+02 8.7845E+01 6.9616E+01 - 1.0000E+00 1.4251E+02 1.3365E+02 6.4551E+01 5.1080E+01 - 1.1220E+00 1.0704E+02 9.9183E+01 4.7121E+01 3.7274E+01 - 1.2589E+00 8.0371E+01 7.3179E+01 3.3921E+01 2.6724E+01 - 1.4125E+00 5.9954E+01 5.3944E+01 2.4316E+01 1.9002E+01 - 1.5849E+00 4.4434E+01 3.9552E+01 1.7477E+01 1.3629E+01 - 1.7783E+00 3.2943E+01 2.8773E+01 1.2486E+01 9.7437E+00 - 1.9953E+00 2.4162E+01 2.1042E+01 8.9398E+00 6.8695E+00 - 2.2387E+00 1.7610E+01 1.5258E+01 6.3383E+00 4.8159E+00 - 2.5119E+00 1.2964E+01 1.0995E+01 4.3964E+00 3.3945E+00 - 2.8184E+00 9.4618E+00 7.9897E+00 3.0063E+00 2.3441E+00 - 3.1623E+00 6.8804E+00 5.7225E+00 2.1266E+00 1.6189E+00 - 3.5481E+00 5.0144E+00 4.0990E+00 1.4750E+00 1.1148E+00 - 3.9811E+00 3.6309E+00 2.9269E+00 1.0140E+00 7.6030E-01 - 4.4668E+00 2.6069E+00 2.0938E+00 6.8895E-01 5.2000E-01 - 5.0119E+00 1.8822E+00 1.5034E+00 4.6353E-01 3.5325E-01 - 5.6234E+00 1.3586E+00 1.0748E+00 3.1105E-01 2.3911E-01 - 6.3096E+00 9.8143E-01 7.6738E-01 2.1291E-01 1.6211E-01 - 7.0795E+00 7.0513E-01 5.4922E-01 1.4418E-01 1.0914E-01 - 7.9433E+00 5.0724E-01 3.9117E-01 9.7331E-02 7.3198E-02 - 8.9125E+00 3.6242E-01 2.7762E-01 6.5148E-02 4.8386E-02 - 1.0000E+01 2.5590E-01 1.9523E-01 4.2899E-02 3.2435E-02 - 1.1220E+01 1.8204E-01 1.3848E-01 2.8477E-02 2.1629E-02 - 1.2589E+01 1.3043E-01 9.7587E-02 1.9179E-02 1.4415E-02 - 1.4125E+01 9.2411E-02 6.9271E-02 1.2795E-02 9.5279E-03 - 1.5849E+01 6.5301E-02 4.9363E-02 8.5316E-03 6.4590E-03 - 1.7783E+01 4.6307E-02 3.4690E-02 5.6806E-03 4.4243E-03 - 1.9953E+01 3.3063E-02 2.4532E-02 3.8138E-03 2.9086E-03 - 2.2387E+01 2.3728E-02 1.7327E-02 2.4875E-03 1.9222E-03 - 2.5119E+01 1.6953E-02 1.1983E-02 1.6620E-03 1.3151E-03 - 2.8184E+01 1.2098E-02 8.4625E-03 1.1254E-03 8.7516E-04 - 3.1623E+01 8.4929E-03 6.1197E-03 7.3934E-04 5.8702E-04 - 3.5481E+01 6.0123E-03 4.3234E-03 5.0234E-04 3.9566E-04 - 3.9811E+01 4.2469E-03 3.0313E-03 3.3368E-04 2.6723E-04 - 4.4668E+01 3.0004E-03 2.1328E-03 2.2264E-04 1.8088E-04 - 5.0119E+01 2.1136E-03 1.5018E-03 1.5341E-04 1.2244E-04 - 5.6234E+01 1.4868E-03 1.0481E-03 1.0343E-04 8.3109E-05 - 6.3096E+01 1.0530E-03 7.3231E-04 6.8369E-05 5.5934E-05 - 7.0795E+01 7.4001E-04 5.1224E-04 4.5920E-05 3.7633E-05 - 7.9433E+01 5.1792E-04 3.5863E-04 3.1580E-05 2.5158E-05 - 8.9125E+01 3.6170E-04 2.4905E-04 2.1604E-05 1.6965E-05 - 1.0000E+02 2.5414E-04 1.7407E-04 1.4334E-05 1.1770E-05 - 1.1220E+02 1.7814E-04 1.2129E-04 9.7036E-06 8.0579E-06 - 1.2589E+02 1.2490E-04 8.3823E-05 6.6028E-06 5.4620E-06 - 1.4125E+02 8.7209E-05 5.8023E-05 4.4480E-06 3.6887E-06 - 1.5849E+02 6.0820E-05 4.0513E-05 3.0650E-06 2.5574E-06 - 1.7783E+02 4.2656E-05 2.8309E-05 2.1070E-06 1.7175E-06 - 1.9953E+02 2.9588E-05 1.9542E-05 1.4137E-06 1.1550E-06 - 2.2387E+02 2.0435E-05 1.3397E-05 9.6501E-07 7.8168E-07 - 2.5119E+02 1.4278E-05 9.2169E-06 6.4813E-07 5.1517E-07 - 2.8184E+02 1.0005E-05 6.4182E-06 4.4286E-07 3.5273E-07 - 3.1623E+02 6.9634E-06 4.4618E-06 3.0648E-07 2.4404E-07 - 3.5481E+02 4.7973E-06 3.0602E-06 2.0670E-07 1.6209E-07 - 3.9811E+02 3.3089E-06 2.1093E-06 1.3977E-07 1.0945E-07 - 4.4668E+02 2.2869E-06 1.4514E-06 9.4334E-08 7.4181E-08 - 5.0119E+02 1.5903E-06 9.9587E-07 6.1912E-08 5.0748E-08 - 5.6234E+02 1.1072E-06 6.8538E-07 4.0558E-08 3.3815E-08 - 6.3096E+02 7.5611E-07 4.6724E-07 2.7686E-08 2.1982E-08 - 7.0795E+02 5.1917E-07 3.1901E-07 1.9717E-08 1.4517E-08 - 7.9433E+02 3.5581E-07 2.1640E-07 1.3226E-08 1.0220E-08 - 8.9125E+02 2.4196E-07 1.4598E-07 8.4019E-09 7.0315E-09 - 1.0000E+03 1.6638E-07 1.0014E-07 5.9187E-09 4.3261E-09 - 1.1220E+03 1.1218E-07 6.7273E-08 3.9015E-09 2.8768E-09 - 1.2589E+03 7.6280E-08 4.5661E-08 2.6101E-09 1.9177E-09 - 1.4125E+03 5.1586E-08 3.0964E-08 1.7508E-09 1.2621E-09 - 1.5849E+03 3.4703E-08 2.0412E-08 1.1425E-09 8.0610E-10 - 1.7783E+03 2.3443E-08 1.3470E-08 7.4596E-10 5.4530E-10 - 1.9953E+03 1.5641E-08 9.2253E-09 5.0797E-10 3.5535E-10 - 2.2387E+03 1.0472E-08 6.1594E-09 3.2926E-10 2.4053E-10 - 2.5119E+03 7.1157E-09 4.0678E-09 2.1169E-10 1.5870E-10 - 2.8184E+03 4.7934E-09 2.6876E-09 1.3879E-10 1.0440E-10 - 3.1623E+03 3.2205E-09 1.8459E-09 9.6098E-11 6.7724E-11 - 3.5481E+03 2.1008E-09 1.1868E-09 6.1496E-11 4.6475E-11 - 3.9811E+03 1.3874E-09 7.8693E-10 4.0082E-11 3.2004E-11 - 4.4668E+03 9.0898E-10 5.2290E-10 2.7704E-11 2.0547E-11 - 5.0119E+03 6.0369E-10 3.4625E-10 1.8301E-11 1.3048E-11 - 5.6234E+03 3.9748E-10 2.2556E-10 1.2165E-11 8.0949E-12 - 6.3096E+03 2.6106E-10 1.4953E-10 7.6893E-12 5.3666E-12 - 7.0795E+03 1.7405E-10 9.7204E-11 4.7309E-12 3.5435E-12 - 7.9433E+03 1.1513E-10 6.3513E-11 3.3281E-12 2.2071E-12 - 8.9125E+03 7.6538E-11 4.1439E-11 2.1493E-12 1.5213E-12 - 1.0000E+04 5.0009E-11 2.7042E-11 1.2273E-12 1.0455E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0067E+04 1.0172E+04 4.9542E+03 4.6169E+03 - 1.1220E-01 9.0178E+03 9.0849E+03 4.4270E+03 4.0810E+03 - 1.2589E-01 8.0302E+03 8.0387E+03 3.9103E+03 3.5718E+03 - 1.4125E-01 7.0661E+03 7.0530E+03 3.4292E+03 3.0980E+03 - 1.5849E-01 6.1279E+03 6.1158E+03 2.9680E+03 2.6719E+03 - 1.7783E-01 5.2448E+03 5.2291E+03 2.5411E+03 2.2623E+03 - 1.9953E-01 4.4298E+03 4.3994E+03 2.1548E+03 1.8824E+03 - 2.2387E-01 3.6888E+03 3.6676E+03 1.8082E+03 1.5573E+03 - 2.5119E-01 3.0339E+03 3.0098E+03 1.4937E+03 1.2819E+03 - 2.8184E-01 2.4677E+03 2.4328E+03 1.2144E+03 1.0346E+03 - 3.1623E-01 1.9887E+03 1.9513E+03 9.8114E+02 8.2246E+02 - 3.5481E-01 1.5755E+03 1.5456E+03 7.8337E+02 6.4912E+02 - 3.9811E-01 1.2362E+03 1.2195E+03 6.1588E+02 5.0626E+02 - 4.4668E-01 9.6837E+02 9.4865E+02 4.8083E+02 3.9204E+02 - 5.0119E-01 7.4920E+02 7.3278E+02 3.7076E+02 3.0065E+02 - 5.6234E-01 5.7433E+02 5.5945E+02 2.8030E+02 2.2926E+02 - 6.3096E-01 4.3742E+02 4.2291E+02 2.1180E+02 1.7139E+02 - 7.0795E-01 3.3287E+02 3.1784E+02 1.6004E+02 1.2783E+02 - 7.9433E-01 2.5224E+02 2.3840E+02 1.1836E+02 9.5044E+01 - 8.9125E-01 1.8956E+02 1.7784E+02 8.6931E+01 6.9224E+01 - 1.0000E+00 1.4264E+02 1.3324E+02 6.4382E+01 5.0910E+01 - 1.1220E+00 1.0666E+02 9.8995E+01 4.6875E+01 3.7080E+01 - 1.2589E+00 7.9335E+01 7.2813E+01 3.3966E+01 2.6784E+01 - 1.4125E+00 5.9221E+01 5.3650E+01 2.4330E+01 1.9211E+01 - 1.5849E+00 4.4109E+01 3.9482E+01 1.7597E+01 1.3743E+01 - 1.7783E+00 3.2656E+01 2.8826E+01 1.2662E+01 9.7593E+00 - 1.9953E+00 2.4053E+01 2.0881E+01 8.9325E+00 6.9190E+00 - 2.2387E+00 1.7693E+01 1.5179E+01 6.1890E+00 4.8830E+00 - 2.5119E+00 1.2934E+01 1.0986E+01 4.3221E+00 3.3453E+00 - 2.8184E+00 9.3951E+00 7.8452E+00 3.0352E+00 2.3172E+00 - 3.1623E+00 6.8510E+00 5.6510E+00 2.1063E+00 1.6080E+00 - 3.5481E+00 4.9840E+00 4.0699E+00 1.4552E+00 1.0972E+00 - 3.9811E+00 3.5991E+00 2.9218E+00 1.0006E+00 7.5458E-01 - 4.4668E+00 2.5880E+00 2.0788E+00 6.8555E-01 5.1758E-01 - 5.0119E+00 1.8734E+00 1.4864E+00 4.6425E-01 3.5170E-01 - 5.6234E+00 1.3523E+00 1.0678E+00 3.1559E-01 2.3982E-01 - 6.3096E+00 9.6681E-01 7.6230E-01 2.1050E-01 1.5941E-01 - 7.0795E+00 6.9486E-01 5.3954E-01 1.4026E-01 1.0625E-01 - 7.9433E+00 4.9966E-01 3.8132E-01 9.6206E-02 7.0379E-02 - 8.9125E+00 3.5966E-01 2.7098E-01 6.4984E-02 4.8610E-02 - 1.0000E+01 2.5465E-01 1.9289E-01 4.3270E-02 3.2836E-02 - 1.1220E+01 1.8073E-01 1.3642E-01 2.9015E-02 2.1750E-02 - 1.2589E+01 1.2904E-01 9.6552E-02 1.9471E-02 1.4507E-02 - 1.4125E+01 9.2664E-02 6.8512E-02 1.2842E-02 9.7093E-03 - 1.5849E+01 6.5627E-02 4.8415E-02 8.2393E-03 6.4325E-03 - 1.7783E+01 4.6447E-02 3.3906E-02 5.4907E-03 4.3505E-03 - 1.9953E+01 3.3343E-02 2.4069E-02 3.8874E-03 2.9772E-03 - 2.2387E+01 2.3719E-02 1.7090E-02 2.5577E-03 1.9599E-03 - 2.5119E+01 1.6683E-02 1.2001E-02 1.6279E-03 1.2844E-03 - 2.8184E+01 1.1858E-02 8.4285E-03 1.0813E-03 8.4593E-04 - 3.1623E+01 8.5132E-03 6.1213E-03 7.5351E-04 5.8959E-04 - 3.5481E+01 6.0343E-03 4.3054E-03 5.0071E-04 3.9479E-04 - 3.9811E+01 4.2572E-03 3.0274E-03 3.3288E-04 2.6521E-04 - 4.4668E+01 2.9991E-03 2.1354E-03 2.2441E-04 1.8129E-04 - 5.0119E+01 2.1140E-03 1.5049E-03 1.5056E-04 1.2145E-04 - 5.6234E+01 1.4902E-03 1.0523E-03 1.0220E-04 8.2330E-05 - 6.3096E+01 1.0503E-03 7.3363E-04 6.9257E-05 5.6464E-05 - 7.0795E+01 7.4681E-04 5.1435E-04 4.6817E-05 3.8375E-05 - 7.9433E+01 5.2579E-04 3.6019E-04 3.1686E-05 2.5805E-05 - 8.9125E+01 3.6646E-04 2.5288E-04 2.1694E-05 1.7736E-05 - 1.0000E+02 2.5509E-04 1.7447E-04 1.4254E-05 1.1792E-05 - 1.1220E+02 1.7849E-04 1.2159E-04 9.5733E-06 8.0049E-06 - 1.2589E+02 1.2472E-04 8.4798E-05 6.5887E-06 5.5124E-06 - 1.4125E+02 8.7290E-05 5.8713E-05 4.5394E-06 3.7295E-06 - 1.5849E+02 6.1188E-05 4.0532E-05 3.0813E-06 2.5069E-06 - 1.7783E+02 4.2751E-05 2.8136E-05 1.9926E-06 1.6480E-06 - 1.9953E+02 2.9786E-05 1.9643E-05 1.3517E-06 1.1504E-06 - 2.2387E+02 2.0809E-05 1.3641E-05 9.5837E-07 8.1112E-07 - 2.5119E+02 1.4440E-05 9.3960E-06 6.5642E-07 5.4131E-07 - 2.8184E+02 1.0039E-05 6.5258E-06 4.2823E-07 3.4719E-07 - 3.1623E+02 6.9671E-06 4.4864E-06 2.9859E-07 2.3367E-07 - 3.5481E+02 4.8199E-06 3.0895E-06 2.0242E-07 1.5701E-07 - 3.9811E+02 3.3288E-06 2.1369E-06 1.3556E-07 1.0612E-07 - 4.4668E+02 2.2969E-06 1.4535E-06 9.2380E-08 7.0837E-08 - 5.0119E+02 1.5881E-06 9.9595E-07 6.2517E-08 4.8079E-08 - 5.6234E+02 1.1024E-06 6.8782E-07 4.1587E-08 3.3365E-08 - 6.3096E+02 7.5453E-07 4.6697E-07 2.8502E-08 2.2183E-08 - 7.0795E+02 5.1836E-07 3.1894E-07 1.9660E-08 1.5150E-08 - 7.9433E+02 3.5622E-07 2.1740E-07 1.3491E-08 1.0213E-08 - 8.9125E+02 2.4379E-07 1.4753E-07 8.6951E-09 6.9098E-09 - 1.0000E+03 1.6669E-07 1.0103E-07 5.6590E-09 4.5117E-09 - 1.1220E+03 1.1223E-07 6.8223E-08 3.8824E-09 2.9725E-09 - 1.2589E+03 7.6527E-08 4.5890E-08 2.5706E-09 1.9791E-09 - 1.4125E+03 5.1793E-08 3.0497E-08 1.6497E-09 1.2145E-09 - 1.5849E+03 3.4808E-08 2.0510E-08 1.0356E-09 7.8094E-10 - 1.7783E+03 2.3461E-08 1.3937E-08 6.9418E-10 5.1772E-10 - 1.9953E+03 1.5654E-08 9.3084E-09 4.9153E-10 3.5684E-10 - 2.2387E+03 1.0487E-08 6.1803E-09 3.4530E-10 2.4153E-10 - 2.5119E+03 6.9842E-09 4.1519E-09 2.1467E-10 1.6493E-10 - 2.8184E+03 4.7036E-09 2.7181E-09 1.2978E-10 1.1246E-10 - 3.1623E+03 3.1935E-09 1.8496E-09 9.8447E-11 7.1085E-11 - 3.5481E+03 2.0812E-09 1.2032E-09 6.5229E-11 4.3542E-11 - 3.9811E+03 1.3897E-09 8.0235E-10 4.3367E-11 2.7664E-11 - 4.4668E+03 9.3212E-10 5.2772E-10 2.7449E-11 1.9354E-11 - 5.0119E+03 6.2216E-10 3.3617E-10 1.7341E-11 1.3957E-11 - 5.6234E+03 4.0359E-10 2.2229E-10 1.2476E-11 8.7984E-12 - 6.3096E+03 2.6499E-10 1.4958E-10 7.3911E-12 5.4240E-12 - 7.0795E+03 1.7206E-10 9.7320E-11 4.9374E-12 3.4677E-12 - 7.9433E+03 1.1377E-10 6.3364E-11 3.2573E-12 2.2739E-12 - 8.9125E+03 7.5435E-11 4.2062E-11 2.1451E-12 1.4371E-12 - 1.0000E+04 4.9307E-11 2.7953E-11 1.4963E-12 9.5454E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0130E+04 1.0244E+04 4.9855E+03 4.6213E+03 - 1.1220E-01 9.0730E+03 9.1474E+03 4.4642E+03 4.0977E+03 - 1.2589E-01 8.0611E+03 8.0971E+03 3.9562E+03 3.5782E+03 - 1.4125E-01 7.0649E+03 7.1066E+03 3.4659E+03 3.0919E+03 - 1.5849E-01 6.1326E+03 6.1609E+03 2.9946E+03 2.6446E+03 - 1.7783E-01 5.2584E+03 5.2625E+03 2.5661E+03 2.2461E+03 - 1.9953E-01 4.4377E+03 4.4406E+03 2.1754E+03 1.8858E+03 - 2.2387E-01 3.6944E+03 3.6942E+03 1.8178E+03 1.5608E+03 - 2.5119E-01 3.0351E+03 3.0221E+03 1.4968E+03 1.2818E+03 - 2.8184E-01 2.4623E+03 2.4496E+03 1.2221E+03 1.0359E+03 - 3.1623E-01 1.9803E+03 1.9690E+03 9.8507E+02 8.2539E+02 - 3.5481E-01 1.5817E+03 1.5581E+03 7.8288E+02 6.5134E+02 - 3.9811E-01 1.2468E+03 1.2178E+03 6.1494E+02 5.0879E+02 - 4.4668E-01 9.7147E+02 9.4371E+02 4.7935E+02 3.9227E+02 - 5.0119E-01 7.5117E+02 7.2943E+02 3.7224E+02 2.9927E+02 - 5.6234E-01 5.7535E+02 5.5772E+02 2.8437E+02 2.2790E+02 - 6.3096E-01 4.3795E+02 4.2415E+02 2.1467E+02 1.7037E+02 - 7.0795E-01 3.3434E+02 3.1957E+02 1.6013E+02 1.2648E+02 - 7.9433E-01 2.5318E+02 2.3858E+02 1.1889E+02 9.5139E+01 - 8.9125E-01 1.9019E+02 1.7859E+02 8.8355E+01 7.0412E+01 - 1.0000E+00 1.4308E+02 1.3359E+02 6.4468E+01 5.1027E+01 - 1.1220E+00 1.0702E+02 9.9101E+01 4.7182E+01 3.6937E+01 - 1.2589E+00 7.9800E+01 7.2939E+01 3.3977E+01 2.6563E+01 - 1.4125E+00 5.9467E+01 5.3791E+01 2.4279E+01 1.9190E+01 - 1.5849E+00 4.4208E+01 3.9594E+01 1.7447E+01 1.3641E+01 - 1.7783E+00 3.2789E+01 2.8852E+01 1.2409E+01 9.7472E+00 - 1.9953E+00 2.4159E+01 2.0953E+01 8.7605E+00 6.9042E+00 - 2.2387E+00 1.7698E+01 1.5242E+01 6.2708E+00 4.7922E+00 - 2.5119E+00 1.2887E+01 1.0971E+01 4.4249E+00 3.3840E+00 - 2.8184E+00 9.3583E+00 7.8258E+00 3.0712E+00 2.3512E+00 - 3.1623E+00 6.8727E+00 5.6457E+00 2.1029E+00 1.6224E+00 - 3.5481E+00 5.0013E+00 4.0625E+00 1.4550E+00 1.1213E+00 - 3.9811E+00 3.6105E+00 2.9122E+00 1.0042E+00 7.6765E-01 - 4.4668E+00 2.5986E+00 2.0765E+00 6.8649E-01 5.2301E-01 - 5.0119E+00 1.8836E+00 1.4924E+00 4.6584E-01 3.5072E-01 - 5.6234E+00 1.3496E+00 1.0622E+00 3.1321E-01 2.3485E-01 - 6.3096E+00 9.6687E-01 7.5433E-01 2.1020E-01 1.5992E-01 - 7.0795E+00 6.9507E-01 5.3568E-01 1.4167E-01 1.0744E-01 - 7.9433E+00 4.9914E-01 3.8398E-01 9.7678E-02 7.3310E-02 - 8.9125E+00 3.5576E-01 2.7429E-01 6.4814E-02 4.8524E-02 - 1.0000E+01 2.5561E-01 1.9505E-01 4.3155E-02 3.2620E-02 - 1.1220E+01 1.8310E-01 1.3795E-01 2.8767E-02 2.1500E-02 - 1.2589E+01 1.3048E-01 9.6926E-02 1.9124E-02 1.4600E-02 - 1.4125E+01 9.2692E-02 6.9152E-02 1.3064E-02 9.9781E-03 - 1.5849E+01 6.6053E-02 4.8726E-02 8.5546E-03 6.4891E-03 - 1.7783E+01 4.7008E-02 3.4207E-02 5.6491E-03 4.3115E-03 - 1.9953E+01 3.3437E-02 2.4201E-02 3.8547E-03 2.9520E-03 - 2.2387E+01 2.3798E-02 1.7119E-02 2.5484E-03 1.9405E-03 - 2.5119E+01 1.6942E-02 1.2239E-02 1.7028E-03 1.2787E-03 - 2.8184E+01 1.1897E-02 8.5523E-03 1.1794E-03 8.6984E-04 - 3.1623E+01 8.4975E-03 6.1098E-03 7.4469E-04 5.9137E-04 - 3.5481E+01 6.0167E-03 4.3143E-03 5.0009E-04 3.9144E-04 - 3.9811E+01 4.2586E-03 3.0369E-03 3.3720E-04 2.6482E-04 - 4.4668E+01 3.0050E-03 2.1385E-03 2.2436E-04 1.7950E-04 - 5.0119E+01 2.1114E-03 1.5028E-03 1.5102E-04 1.1967E-04 - 5.6234E+01 1.4906E-03 1.0474E-03 1.0030E-04 8.3237E-05 - 6.3096E+01 1.0471E-03 7.3004E-04 6.7770E-05 5.6936E-05 - 7.0795E+01 7.3229E-04 5.1004E-04 4.6539E-05 3.6799E-05 - 7.9433E+01 5.1760E-04 3.5564E-04 3.0667E-05 2.4705E-05 - 8.9125E+01 3.6360E-04 2.4685E-04 2.0810E-05 1.6883E-05 - 1.0000E+02 2.5510E-04 1.7463E-04 1.4259E-05 1.1746E-05 - 1.1220E+02 1.7854E-04 1.2168E-04 9.7689E-06 7.9162E-06 - 1.2589E+02 1.2438E-04 8.4112E-05 6.7962E-06 5.3414E-06 - 1.4125E+02 8.6895E-05 5.8346E-05 4.5965E-06 3.6407E-06 - 1.5849E+02 6.0915E-05 4.0598E-05 3.1262E-06 2.5013E-06 - 1.7783E+02 4.2729E-05 2.8335E-05 2.1142E-06 1.7363E-06 - 1.9953E+02 2.9640E-05 1.9536E-05 1.4291E-06 1.1792E-06 - 2.2387E+02 2.0564E-05 1.3437E-05 9.6840E-07 7.8821E-07 - 2.5119E+02 1.4334E-05 9.3149E-06 6.5018E-07 5.0881E-07 - 2.8184E+02 9.9452E-06 6.4666E-06 4.4048E-07 3.3230E-07 - 3.1623E+02 6.9518E-06 4.4885E-06 3.0040E-07 2.3894E-07 - 3.5481E+02 4.8271E-06 3.0879E-06 2.0626E-07 1.5830E-07 - 3.9811E+02 3.3507E-06 2.1212E-06 1.4061E-07 1.0853E-07 - 4.4668E+02 2.3108E-06 1.4574E-06 9.3275E-08 7.6223E-08 - 5.0119E+02 1.5928E-06 9.9563E-07 6.3754E-08 5.0221E-08 - 5.6234E+02 1.1112E-06 6.8844E-07 4.3330E-08 3.2292E-08 - 6.3096E+02 7.6179E-07 4.6897E-07 2.9181E-08 2.1726E-08 - 7.0795E+02 5.1727E-07 3.2043E-07 1.9359E-08 1.4579E-08 - 7.9433E+02 3.5343E-07 2.1603E-07 1.2764E-08 9.6546E-09 - 8.9125E+02 2.4298E-07 1.4587E-07 8.5155E-09 6.6045E-09 - 1.0000E+03 1.6778E-07 1.0100E-07 5.8222E-09 4.4585E-09 - 1.1220E+03 1.1279E-07 6.7457E-08 3.7927E-09 2.9178E-09 - 1.2589E+03 7.6063E-08 4.5227E-08 2.5523E-09 1.8391E-09 - 1.4125E+03 5.1317E-08 3.0609E-08 1.6985E-09 1.1920E-09 - 1.5849E+03 3.4972E-08 2.0419E-08 1.1367E-09 7.9930E-10 - 1.7783E+03 2.3750E-08 1.3673E-08 7.5651E-10 5.4246E-10 - 1.9953E+03 1.5814E-08 9.1762E-09 4.8726E-10 3.8583E-10 - 2.2387E+03 1.0507E-08 6.2608E-09 3.4796E-10 2.5880E-10 - 2.5119E+03 6.9807E-09 4.2339E-09 2.2842E-10 1.6654E-10 - 2.8184E+03 4.7002E-09 2.7453E-09 1.5301E-10 9.8141E-11 - 3.1623E+03 3.2463E-09 1.8666E-09 9.8374E-11 7.3286E-11 - 3.5481E+03 2.0804E-09 1.2193E-09 6.5565E-11 4.6144E-11 - 3.9811E+03 1.3687E-09 7.9290E-10 4.1530E-11 3.0504E-11 - 4.4668E+03 9.1030E-10 5.2465E-10 2.7118E-11 1.9454E-11 - 5.0119E+03 6.0491E-10 3.4878E-10 1.9735E-11 1.2440E-11 - 5.6234E+03 4.0685E-10 2.2786E-10 1.2606E-11 8.5382E-12 - 6.3096E+03 2.6579E-10 1.5126E-10 7.3944E-12 5.5196E-12 - 7.0795E+03 1.7446E-10 1.0004E-10 4.9120E-12 3.8305E-12 - 7.9433E+03 1.1551E-10 6.4755E-11 3.0620E-12 2.2853E-12 - 8.9125E+03 7.4692E-11 4.1912E-11 1.9910E-12 1.3713E-12 - 1.0000E+04 4.8911E-11 2.7627E-11 1.2102E-12 9.8709E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0138E+04 1.0319E+04 5.0371E+03 4.6052E+03 - 1.1220E-01 9.0753E+03 9.2135E+03 4.5182E+03 4.0831E+03 - 1.2589E-01 8.0396E+03 8.1520E+03 3.9911E+03 3.5865E+03 - 1.4125E-01 7.0620E+03 7.1556E+03 3.4933E+03 3.1042E+03 - 1.5849E-01 6.1444E+03 6.2047E+03 3.0228E+03 2.6576E+03 - 1.7783E-01 5.2715E+03 5.2918E+03 2.5856E+03 2.2544E+03 - 1.9953E-01 4.4427E+03 4.4473E+03 2.1930E+03 1.8878E+03 - 2.2387E-01 3.6895E+03 3.6927E+03 1.8312E+03 1.5572E+03 - 2.5119E-01 3.0447E+03 3.0325E+03 1.5110E+03 1.2725E+03 - 2.8184E-01 2.4777E+03 2.4572E+03 1.2312E+03 1.0292E+03 - 3.1623E-01 1.9846E+03 1.9663E+03 9.9234E+02 8.2659E+02 - 3.5481E-01 1.5748E+03 1.5565E+03 7.9023E+02 6.5242E+02 - 3.9811E-01 1.2395E+03 1.2249E+03 6.1995E+02 5.0578E+02 - 4.4668E-01 9.7075E+02 9.5367E+02 4.8121E+02 3.9050E+02 - 5.0119E-01 7.4847E+02 7.3455E+02 3.6957E+02 2.9928E+02 - 5.6234E-01 5.7099E+02 5.6394E+02 2.8331E+02 2.2688E+02 - 6.3096E-01 4.3765E+02 4.2677E+02 2.1411E+02 1.7113E+02 - 7.0795E-01 3.3415E+02 3.1952E+02 1.6041E+02 1.2719E+02 - 7.9433E-01 2.5225E+02 2.3956E+02 1.1959E+02 9.4657E+01 - 8.9125E-01 1.8986E+02 1.7889E+02 8.8361E+01 6.9455E+01 - 1.0000E+00 1.4293E+02 1.3323E+02 6.4647E+01 5.0800E+01 - 1.1220E+00 1.0683E+02 9.9111E+01 4.6889E+01 3.6952E+01 - 1.2589E+00 7.9665E+01 7.3247E+01 3.3922E+01 2.6649E+01 - 1.4125E+00 5.9585E+01 5.3731E+01 2.4581E+01 1.9192E+01 - 1.5849E+00 4.4464E+01 3.9173E+01 1.7714E+01 1.3654E+01 - 1.7783E+00 3.2685E+01 2.8780E+01 1.2491E+01 9.6990E+00 - 1.9953E+00 2.4143E+01 2.0949E+01 8.8206E+00 6.8568E+00 - 2.2387E+00 1.7867E+01 1.5148E+01 6.2599E+00 4.7699E+00 - 2.5119E+00 1.3014E+01 1.0958E+01 4.3509E+00 3.3190E+00 - 2.8184E+00 9.5052E+00 7.9071E+00 3.0398E+00 2.3289E+00 - 3.1623E+00 6.8894E+00 5.6872E+00 2.1236E+00 1.6260E+00 - 3.5481E+00 4.9760E+00 4.0829E+00 1.4614E+00 1.1107E+00 - 3.9811E+00 3.5892E+00 2.9371E+00 9.9647E-01 7.6031E-01 - 4.4668E+00 2.6032E+00 2.0908E+00 6.7571E-01 5.1839E-01 - 5.0119E+00 1.8843E+00 1.4937E+00 4.6028E-01 3.5666E-01 - 5.6234E+00 1.3663E+00 1.0671E+00 3.1699E-01 2.4314E-01 - 6.3096E+00 9.8079E-01 7.5698E-01 2.1702E-01 1.6355E-01 - 7.0795E+00 6.9879E-01 5.3782E-01 1.4646E-01 1.1148E-01 - 7.9433E+00 5.0146E-01 3.8332E-01 9.5703E-02 7.3944E-02 - 8.9125E+00 3.5567E-01 2.7284E-01 6.4693E-02 5.0480E-02 - 1.0000E+01 2.5676E-01 1.9421E-01 4.3427E-02 3.2766E-02 - 1.1220E+01 1.8320E-01 1.3672E-01 2.8991E-02 2.1723E-02 - 1.2589E+01 1.3035E-01 9.6010E-02 1.9295E-02 1.4517E-02 - 1.4125E+01 9.2737E-02 6.8478E-02 1.2855E-02 9.9573E-03 - 1.5849E+01 6.6279E-02 4.9046E-02 8.4463E-03 6.6185E-03 - 1.7783E+01 4.7015E-02 3.5081E-02 5.6647E-03 4.4007E-03 - 1.9953E+01 3.3115E-02 2.4795E-02 3.7347E-03 2.9596E-03 - 2.2387E+01 2.3713E-02 1.7409E-02 2.4659E-03 1.9455E-03 - 2.5119E+01 1.6998E-02 1.2325E-02 1.6364E-03 1.3367E-03 - 2.8184E+01 1.2067E-02 8.6973E-03 1.0754E-03 9.0314E-04 - 3.1623E+01 8.4717E-03 6.1084E-03 7.4525E-04 5.8781E-04 - 3.5481E+01 6.0142E-03 4.2926E-03 4.9939E-04 3.9623E-04 - 3.9811E+01 4.2503E-03 3.0301E-03 3.3653E-04 2.6520E-04 - 4.4668E+01 2.9832E-03 2.1392E-03 2.2557E-04 1.8024E-04 - 5.0119E+01 2.1090E-03 1.4968E-03 1.5154E-04 1.2090E-04 - 5.6234E+01 1.4875E-03 1.0447E-03 1.0342E-04 8.1727E-05 - 6.3096E+01 1.0426E-03 7.3569E-04 6.8229E-05 5.5862E-05 - 7.0795E+01 7.3799E-04 5.1498E-04 4.4999E-05 3.7364E-05 - 7.9433E+01 5.1694E-04 3.5712E-04 3.0600E-05 2.5068E-05 - 8.9125E+01 3.5960E-04 2.4823E-04 2.1406E-05 1.6783E-05 - 1.0000E+02 2.5526E-04 1.7398E-04 1.4236E-05 1.1741E-05 - 1.1220E+02 1.7831E-04 1.2114E-04 9.5474E-06 7.9566E-06 - 1.2589E+02 1.2488E-04 8.4224E-05 6.5333E-06 5.3771E-06 - 1.4125E+02 8.6979E-05 5.8551E-05 4.5332E-06 3.6993E-06 - 1.5849E+02 6.0946E-05 4.0602E-05 3.0764E-06 2.4997E-06 - 1.7783E+02 4.2674E-05 2.7997E-05 2.0630E-06 1.6803E-06 - 1.9953E+02 2.9656E-05 1.9423E-05 1.4230E-06 1.1467E-06 - 2.2387E+02 2.0589E-05 1.3432E-05 9.7276E-07 7.6032E-07 - 2.5119E+02 1.4375E-05 9.3008E-06 6.6156E-07 5.0104E-07 - 2.8184E+02 1.0121E-05 6.4631E-06 4.4302E-07 3.5198E-07 - 3.1623E+02 6.9580E-06 4.4727E-06 3.0430E-07 2.3962E-07 - 3.5481E+02 4.8159E-06 3.0766E-06 2.0409E-07 1.6074E-07 - 3.9811E+02 3.3319E-06 2.1226E-06 1.3862E-07 1.0867E-07 - 4.4668E+02 2.2970E-06 1.4578E-06 9.4376E-08 7.3212E-08 - 5.0119E+02 1.5830E-06 1.0008E-06 6.3107E-08 4.6870E-08 - 5.6234E+02 1.1045E-06 6.8733E-07 4.2838E-08 3.2427E-08 - 6.3096E+02 7.5836E-07 4.6598E-07 2.8653E-08 2.1671E-08 - 7.0795E+02 5.1907E-07 3.1811E-07 1.9322E-08 1.4598E-08 - 7.9433E+02 3.5407E-07 2.1593E-07 1.3121E-08 9.9507E-09 - 8.9125E+02 2.4208E-07 1.4576E-07 8.7301E-09 6.4999E-09 - 1.0000E+03 1.6579E-07 1.0030E-07 5.7665E-09 4.1178E-09 - 1.1220E+03 1.1116E-07 6.7403E-08 3.8747E-09 2.8267E-09 - 1.2589E+03 7.5765E-08 4.5042E-08 2.4443E-09 1.9495E-09 - 1.4125E+03 5.1427E-08 3.0306E-08 1.5881E-09 1.3101E-09 - 1.5849E+03 3.4726E-08 2.0524E-08 1.0797E-09 8.5455E-10 - 1.7783E+03 2.3488E-08 1.3637E-08 7.4913E-10 5.3690E-10 - 1.9953E+03 1.5713E-08 9.1583E-09 5.0899E-10 3.8000E-10 - 2.2387E+03 1.0463E-08 6.1947E-09 3.3679E-10 2.5068E-10 - 2.5119E+03 7.0725E-09 4.1713E-09 2.2075E-10 1.7439E-10 - 2.8184E+03 4.6849E-09 2.7631E-09 1.3167E-10 1.1895E-10 - 3.1623E+03 3.2014E-09 1.8596E-09 9.1896E-11 7.4892E-11 - 3.5481E+03 2.0968E-09 1.1983E-09 6.3879E-11 4.6124E-11 - 3.9811E+03 1.3900E-09 7.8908E-10 4.0936E-11 2.9137E-11 - 4.4668E+03 9.1232E-10 5.2443E-10 2.7305E-11 2.0394E-11 - 5.0119E+03 6.0435E-10 3.4209E-10 1.7794E-11 1.4451E-11 - 5.6234E+03 4.0694E-10 2.2330E-10 1.1441E-11 1.0164E-11 - 6.3096E+03 2.6950E-10 1.4812E-10 7.4298E-12 5.6826E-12 - 7.0795E+03 1.7473E-10 9.6786E-11 4.8589E-12 3.6096E-12 - 7.9433E+03 1.1443E-10 6.3708E-11 3.1781E-12 2.2783E-12 - 8.9125E+03 7.4806E-11 4.2008E-11 2.2194E-12 1.6945E-12 - 1.0000E+04 4.9028E-11 2.7482E-11 1.5913E-12 1.1626E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0154E+04 1.0332E+04 5.0792E+03 4.5749E+03 - 1.1220E-01 9.0766E+03 9.2330E+03 4.5435E+03 4.0561E+03 - 1.2589E-01 8.0581E+03 8.1794E+03 4.0122E+03 3.5618E+03 - 1.4125E-01 7.0963E+03 7.1871E+03 3.5172E+03 3.0978E+03 - 1.5849E-01 6.1620E+03 6.2354E+03 3.0342E+03 2.6577E+03 - 1.7783E-01 5.2844E+03 5.3297E+03 2.5922E+03 2.2408E+03 - 1.9953E-01 4.4559E+03 4.4778E+03 2.2025E+03 1.8746E+03 - 2.2387E-01 3.6975E+03 3.7124E+03 1.8411E+03 1.5590E+03 - 2.5119E-01 3.0393E+03 3.0349E+03 1.5190E+03 1.2794E+03 - 2.8184E-01 2.4679E+03 2.4593E+03 1.2369E+03 1.0315E+03 - 3.1623E-01 1.9803E+03 1.9760E+03 9.9452E+02 8.2023E+02 - 3.5481E-01 1.5739E+03 1.5650E+03 7.9163E+02 6.4586E+02 - 3.9811E-01 1.2402E+03 1.2318E+03 6.2443E+02 5.0600E+02 - 4.4668E-01 9.7135E+02 9.5706E+02 4.8467E+02 3.9156E+02 - 5.0119E-01 7.5578E+02 7.3707E+02 3.7245E+02 2.9980E+02 - 5.6234E-01 5.7818E+02 5.6271E+02 2.8316E+02 2.2987E+02 - 6.3096E-01 4.3837E+02 4.2611E+02 2.1322E+02 1.7249E+02 - 7.0795E-01 3.3270E+02 3.2046E+02 1.5962E+02 1.2707E+02 - 7.9433E-01 2.5286E+02 2.4055E+02 1.1948E+02 9.4654E+01 - 8.9125E-01 1.9159E+02 1.8149E+02 8.8760E+01 7.0547E+01 - 1.0000E+00 1.4292E+02 1.3410E+02 6.4943E+01 5.1200E+01 - 1.1220E+00 1.0650E+02 9.8789E+01 4.7209E+01 3.6628E+01 - 1.2589E+00 7.9901E+01 7.2742E+01 3.3929E+01 2.6478E+01 - 1.4125E+00 6.0020E+01 5.3797E+01 2.4298E+01 1.9197E+01 - 1.5849E+00 4.4531E+01 3.9484E+01 1.7620E+01 1.3779E+01 - 1.7783E+00 3.2846E+01 2.8860E+01 1.2601E+01 9.7032E+00 - 1.9953E+00 2.4120E+01 2.0999E+01 8.8833E+00 6.9497E+00 - 2.2387E+00 1.7696E+01 1.5105E+01 6.2912E+00 4.9455E+00 - 2.5119E+00 1.2928E+01 1.0923E+01 4.4144E+00 3.3892E+00 - 2.8184E+00 9.4567E+00 7.8458E+00 3.0813E+00 2.3190E+00 - 3.1623E+00 6.8736E+00 5.6618E+00 2.1071E+00 1.6194E+00 - 3.5481E+00 4.9751E+00 4.0586E+00 1.4504E+00 1.1143E+00 - 3.9811E+00 3.6095E+00 2.8995E+00 1.0040E+00 7.6708E-01 - 4.4668E+00 2.6086E+00 2.0775E+00 6.8697E-01 5.1809E-01 - 5.0119E+00 1.8871E+00 1.4934E+00 4.6356E-01 3.4898E-01 - 5.6234E+00 1.3535E+00 1.0635E+00 3.1390E-01 2.3998E-01 - 6.3096E+00 9.6684E-01 7.4645E-01 2.1095E-01 1.6172E-01 - 7.0795E+00 6.9861E-01 5.3323E-01 1.4009E-01 1.0767E-01 - 7.9433E+00 4.9736E-01 3.8267E-01 9.2991E-02 7.3276E-02 - 8.9125E+00 3.5272E-01 2.7250E-01 6.3426E-02 4.9051E-02 - 1.0000E+01 2.5645E-01 1.9304E-01 4.3060E-02 3.2409E-02 - 1.1220E+01 1.8235E-01 1.3714E-01 2.8703E-02 2.1902E-02 - 1.2589E+01 1.3005E-01 9.7353E-02 1.9206E-02 1.4416E-02 - 1.4125E+01 9.2579E-02 6.8422E-02 1.2787E-02 9.6827E-03 - 1.5849E+01 6.6190E-02 4.8426E-02 8.5728E-03 6.4881E-03 - 1.7783E+01 4.6872E-02 3.4331E-02 5.5867E-03 4.3696E-03 - 1.9953E+01 3.2948E-02 2.4321E-02 3.6771E-03 2.9165E-03 - 2.2387E+01 2.3547E-02 1.7399E-02 2.4103E-03 2.0137E-03 - 2.5119E+01 1.6876E-02 1.2020E-02 1.5736E-03 1.3661E-03 - 2.8184E+01 1.1961E-02 8.3552E-03 1.0894E-03 8.6308E-04 - 3.1623E+01 8.4843E-03 6.1164E-03 7.4728E-04 5.9158E-04 - 3.5481E+01 5.9967E-03 4.3005E-03 4.9745E-04 3.9929E-04 - 3.9811E+01 4.2349E-03 3.0233E-03 3.3218E-04 2.6970E-04 - 4.4668E+01 2.9910E-03 2.1288E-03 2.2583E-04 1.8198E-04 - 5.0119E+01 2.1181E-03 1.4946E-03 1.5336E-04 1.2217E-04 - 5.6234E+01 1.4928E-03 1.0510E-03 1.0160E-04 8.1669E-05 - 6.3096E+01 1.0445E-03 7.3482E-04 6.7214E-05 5.4962E-05 - 7.0795E+01 7.3337E-04 5.1179E-04 4.4748E-05 3.6862E-05 - 7.9433E+01 5.1889E-04 3.5961E-04 3.1084E-05 2.5796E-05 - 8.9125E+01 3.6545E-04 2.4890E-04 2.1186E-05 1.8102E-05 - 1.0000E+02 2.5456E-04 1.7476E-04 1.4329E-05 1.1839E-05 - 1.1220E+02 1.7834E-04 1.2159E-04 9.8175E-06 7.9423E-06 - 1.2589E+02 1.2479E-04 8.4306E-05 6.6818E-06 5.3816E-06 - 1.4125E+02 8.6957E-05 5.8674E-05 4.5131E-06 3.5740E-06 - 1.5849E+02 6.0779E-05 4.0622E-05 3.0511E-06 2.4444E-06 - 1.7783E+02 4.2497E-05 2.8195E-05 2.0711E-06 1.7002E-06 - 1.9953E+02 2.9591E-05 1.9671E-05 1.3939E-06 1.1846E-06 - 2.2387E+02 2.0445E-05 1.3519E-05 9.4731E-07 8.3347E-07 - 2.5119E+02 1.4246E-05 9.3493E-06 6.4136E-07 5.4757E-07 - 2.8184E+02 1.0023E-05 6.5046E-06 4.3398E-07 3.5542E-07 - 3.1623E+02 6.9951E-06 4.4621E-06 3.0449E-07 2.3488E-07 - 3.5481E+02 4.8064E-06 3.0635E-06 2.0609E-07 1.5987E-07 - 3.9811E+02 3.3263E-06 2.1014E-06 1.3776E-07 1.0923E-07 - 4.4668E+02 2.3085E-06 1.4513E-06 9.2933E-08 7.4572E-08 - 5.0119E+02 1.5935E-06 9.9696E-07 6.2600E-08 5.0362E-08 - 5.6234E+02 1.1006E-06 6.8794E-07 4.2667E-08 3.3396E-08 - 6.3096E+02 7.5620E-07 4.6650E-07 2.7811E-08 2.2275E-08 - 7.0795E+02 5.2021E-07 3.1810E-07 1.8679E-08 1.4874E-08 - 7.9433E+02 3.5467E-07 2.1654E-07 1.3035E-08 9.7484E-09 - 8.9125E+02 2.4079E-07 1.4726E-07 8.4615E-09 6.4769E-09 - 1.0000E+03 1.6656E-07 1.0027E-07 5.7280E-09 4.3664E-09 - 1.1220E+03 1.1251E-07 6.7108E-08 4.0484E-09 2.9259E-09 - 1.2589E+03 7.6914E-08 4.4838E-08 2.5365E-09 1.8296E-09 - 1.4125E+03 5.1631E-08 3.0517E-08 1.6875E-09 1.2037E-09 - 1.5849E+03 3.4526E-08 2.0561E-08 1.2053E-09 8.2419E-10 - 1.7783E+03 2.3345E-08 1.3759E-08 7.5774E-10 5.8464E-10 - 1.9953E+03 1.5886E-08 9.1526E-09 5.0702E-10 3.7757E-10 - 2.2387E+03 1.0701E-08 6.0473E-09 3.3379E-10 2.5126E-10 - 2.5119E+03 7.0360E-09 4.0310E-09 2.2035E-10 1.6660E-10 - 2.8184E+03 4.6490E-09 2.6874E-09 1.3388E-10 1.1304E-10 - 3.1623E+03 3.2097E-09 1.8725E-09 9.5233E-11 7.1215E-11 - 3.5481E+03 2.0922E-09 1.2075E-09 6.3799E-11 4.7140E-11 - 3.9811E+03 1.3831E-09 7.9276E-10 4.0214E-11 3.0149E-11 - 4.4668E+03 9.1177E-10 5.1734E-10 2.6810E-11 1.8862E-11 - 5.0119E+03 6.0910E-10 3.3901E-10 1.8635E-11 1.2069E-11 - 5.6234E+03 4.1094E-10 2.2994E-10 1.1949E-11 8.0032E-12 - 6.3096E+03 2.6675E-10 1.4940E-10 7.6108E-12 5.4002E-12 - 7.0795E+03 1.7379E-10 9.7082E-11 5.2593E-12 3.6016E-12 - 7.9433E+03 1.1542E-10 6.4436E-11 3.2097E-12 2.5750E-12 - 8.9125E+03 7.7385E-11 4.2316E-11 2.0987E-12 1.6301E-12 - 1.0000E+04 5.0083E-11 2.6929E-11 1.5006E-12 9.1355E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0140E+04 1.0331E+04 5.1185E+03 4.5569E+03 - 1.1220E-01 9.0574E+03 9.2259E+03 4.5630E+03 4.0575E+03 - 1.2589E-01 8.0462E+03 8.1860E+03 4.0081E+03 3.5728E+03 - 1.4125E-01 7.0856E+03 7.1892E+03 3.5077E+03 3.0921E+03 - 1.5849E-01 6.1568E+03 6.2199E+03 3.0502E+03 2.6446E+03 - 1.7783E-01 5.2639E+03 5.3249E+03 2.6112E+03 2.2421E+03 - 1.9953E-01 4.4485E+03 4.4891E+03 2.2002E+03 1.8832E+03 - 2.2387E-01 3.7092E+03 3.7151E+03 1.8390E+03 1.5625E+03 - 2.5119E-01 3.0446E+03 3.0436E+03 1.5229E+03 1.2800E+03 - 2.8184E-01 2.4813E+03 2.4735E+03 1.2432E+03 1.0311E+03 - 3.1623E-01 1.9951E+03 1.9879E+03 1.0007E+03 8.2462E+02 - 3.5481E-01 1.5835E+03 1.5723E+03 7.9609E+02 6.5380E+02 - 3.9811E-01 1.2455E+03 1.2322E+03 6.2724E+02 5.0686E+02 - 4.4668E-01 9.6865E+02 9.6136E+02 4.8399E+02 3.9066E+02 - 5.0119E-01 7.5069E+02 7.3799E+02 3.7001E+02 3.0068E+02 - 5.6234E-01 5.7820E+02 5.6021E+02 2.8309E+02 2.2953E+02 - 6.3096E-01 4.4070E+02 4.2611E+02 2.1491E+02 1.7231E+02 - 7.0795E-01 3.3458E+02 3.2189E+02 1.6064E+02 1.2787E+02 - 7.9433E-01 2.5326E+02 2.4038E+02 1.1968E+02 9.5443E+01 - 8.9125E-01 1.9138E+02 1.7952E+02 8.8564E+01 6.9657E+01 - 1.0000E+00 1.4321E+02 1.3342E+02 6.4496E+01 5.0891E+01 - 1.1220E+00 1.0729E+02 9.8661E+01 4.6581E+01 3.7092E+01 - 1.2589E+00 8.0395E+01 7.3140E+01 3.3865E+01 2.6728E+01 - 1.4125E+00 5.9867E+01 5.3807E+01 2.4470E+01 1.9206E+01 - 1.5849E+00 4.4333E+01 3.9344E+01 1.7485E+01 1.3714E+01 - 1.7783E+00 3.2697E+01 2.8689E+01 1.2585E+01 9.7261E+00 - 1.9953E+00 2.4256E+01 2.0944E+01 8.9417E+00 6.8413E+00 - 2.2387E+00 1.7782E+01 1.5246E+01 6.2447E+00 4.8417E+00 - 2.5119E+00 1.2951E+01 1.0980E+01 4.3877E+00 3.4490E+00 - 2.8184E+00 9.4573E+00 7.9049E+00 3.0825E+00 2.3580E+00 - 3.1623E+00 6.8772E+00 5.6960E+00 2.1263E+00 1.6173E+00 - 3.5481E+00 4.9883E+00 4.0603E+00 1.4788E+00 1.1023E+00 - 3.9811E+00 3.6298E+00 2.9032E+00 1.0142E+00 7.6323E-01 - 4.4668E+00 2.6243E+00 2.0815E+00 6.8812E-01 5.2433E-01 - 5.0119E+00 1.8916E+00 1.4883E+00 4.6938E-01 3.5312E-01 - 5.6234E+00 1.3646E+00 1.0636E+00 3.1439E-01 2.4194E-01 - 6.3096E+00 9.8024E-01 7.5678E-01 2.0953E-01 1.6423E-01 - 7.0795E+00 7.0366E-01 5.4508E-01 1.4205E-01 1.1089E-01 - 7.9433E+00 4.9950E-01 3.9001E-01 9.6381E-02 7.4398E-02 - 8.9125E+00 3.5845E-01 2.7774E-01 6.5211E-02 4.9379E-02 - 1.0000E+01 2.5709E-01 1.9285E-01 4.2965E-02 3.2870E-02 - 1.1220E+01 1.8263E-01 1.3637E-01 2.8931E-02 2.2102E-02 - 1.2589E+01 1.2940E-01 9.6370E-02 1.9051E-02 1.4850E-02 - 1.4125E+01 9.2166E-02 6.8679E-02 1.2620E-02 9.9551E-03 - 1.5849E+01 6.5314E-02 4.9052E-02 8.4965E-03 6.4247E-03 - 1.7783E+01 4.6726E-02 3.4543E-02 5.6232E-03 4.2343E-03 - 1.9953E+01 3.3424E-02 2.4221E-02 3.7037E-03 2.8012E-03 - 2.2387E+01 2.3821E-02 1.7208E-02 2.4816E-03 1.8086E-03 - 2.5119E+01 1.6982E-02 1.2283E-02 1.6852E-03 1.2566E-03 - 2.8184E+01 1.2145E-02 8.4558E-03 1.1539E-03 8.7359E-04 - 3.1623E+01 8.4745E-03 6.1018E-03 7.3995E-04 5.8365E-04 - 3.5481E+01 5.9958E-03 4.2937E-03 4.9737E-04 3.9358E-04 - 3.9811E+01 4.2435E-03 3.0167E-03 3.3570E-04 2.6699E-04 - 4.4668E+01 2.9948E-03 2.1153E-03 2.2651E-04 1.7881E-04 - 5.0119E+01 2.1091E-03 1.4928E-03 1.5130E-04 1.1970E-04 - 5.6234E+01 1.4876E-03 1.0464E-03 9.9827E-05 8.1064E-05 - 6.3096E+01 1.0468E-03 7.3118E-04 6.8378E-05 5.5878E-05 - 7.0795E+01 7.3527E-04 5.1098E-04 4.6626E-05 3.8331E-05 - 7.9433E+01 5.1766E-04 3.5796E-04 3.1677E-05 2.5222E-05 - 8.9125E+01 3.6428E-04 2.4954E-04 2.1340E-05 1.6874E-05 - 1.0000E+02 2.5434E-04 1.7414E-04 1.4337E-05 1.1774E-05 - 1.1220E+02 1.7783E-04 1.2082E-04 9.7287E-06 7.9193E-06 - 1.2589E+02 1.2441E-04 8.3997E-05 6.5971E-06 5.3503E-06 - 1.4125E+02 8.6875E-05 5.8553E-05 4.4354E-06 3.6846E-06 - 1.5849E+02 6.0776E-05 4.0689E-05 2.9587E-06 2.5044E-06 - 1.7783E+02 4.2333E-05 2.8051E-05 2.0096E-06 1.6574E-06 - 1.9953E+02 2.9463E-05 1.9437E-05 1.3798E-06 1.0979E-06 - 2.2387E+02 2.0664E-05 1.3435E-05 9.4440E-07 7.7283E-07 - 2.5119E+02 1.4335E-05 9.2742E-06 6.3139E-07 5.3742E-07 - 2.8184E+02 9.9132E-06 6.4743E-06 4.2444E-07 3.6417E-07 - 3.1623E+02 6.9514E-06 4.4935E-06 2.9815E-07 2.4414E-07 - 3.5481E+02 4.8054E-06 3.0954E-06 2.0395E-07 1.6225E-07 - 3.9811E+02 3.3268E-06 2.1263E-06 1.3737E-07 1.0615E-07 - 4.4668E+02 2.2951E-06 1.4520E-06 9.2021E-08 7.0547E-08 - 5.0119E+02 1.5947E-06 9.8835E-07 6.2074E-08 4.7796E-08 - 5.6234E+02 1.1075E-06 6.8162E-07 4.1716E-08 3.3727E-08 - 6.3096E+02 7.5784E-07 4.6462E-07 2.8295E-08 2.2712E-08 - 7.0795E+02 5.1856E-07 3.1764E-07 1.9560E-08 1.4304E-08 - 7.9433E+02 3.5507E-07 2.1661E-07 1.2881E-08 9.2992E-09 - 8.9125E+02 2.4378E-07 1.4796E-07 8.1829E-09 6.4831E-09 - 1.0000E+03 1.6750E-07 1.0026E-07 5.7608E-09 4.4538E-09 - 1.1220E+03 1.1277E-07 6.7070E-08 3.8340E-09 3.0154E-09 - 1.2589E+03 7.6469E-08 4.5606E-08 2.5737E-09 2.0422E-09 - 1.4125E+03 5.1598E-08 3.0813E-08 1.8210E-09 1.3348E-09 - 1.5849E+03 3.4843E-08 2.0694E-08 1.2179E-09 8.8318E-10 - 1.7783E+03 2.3164E-08 1.3721E-08 7.8676E-10 5.6468E-10 - 1.9953E+03 1.5873E-08 9.2646E-09 5.0570E-10 3.5391E-10 - 2.2387E+03 1.0682E-08 6.0511E-09 3.4077E-10 2.5423E-10 - 2.5119E+03 7.1028E-09 3.9946E-09 2.3043E-10 1.7496E-10 - 2.8184E+03 4.6851E-09 2.7253E-09 1.4797E-10 1.0420E-10 - 3.1623E+03 3.2228E-09 1.8669E-09 9.5840E-11 6.7455E-11 - 3.5481E+03 2.0923E-09 1.2015E-09 6.4497E-11 4.3255E-11 - 3.9811E+03 1.3779E-09 7.8698E-10 4.1004E-11 2.8725E-11 - 4.4668E+03 9.1981E-10 5.1806E-10 2.6251E-11 1.9879E-11 - 5.0119E+03 6.1343E-10 3.4352E-10 1.7024E-11 1.1725E-11 - 5.6234E+03 4.0325E-10 2.2776E-10 1.0643E-11 7.0571E-12 - 6.3096E+03 2.6380E-10 1.4702E-10 7.4882E-12 5.5420E-12 - 7.0795E+03 1.7614E-10 9.6491E-11 4.7315E-12 3.8175E-12 - 7.9433E+03 1.1558E-10 6.3114E-11 3.3414E-12 2.4157E-12 - 8.9125E+03 7.5771E-11 4.2092E-11 2.2965E-12 1.3122E-12 - 1.0000E+04 4.9567E-11 2.7668E-11 1.3917E-12 1.0094E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0115E+04 1.0338E+04 5.0747E+03 4.5816E+03 - 1.1220E-01 9.0579E+03 9.2392E+03 4.5393E+03 4.0682E+03 - 1.2589E-01 8.0291E+03 8.1958E+03 4.0197E+03 3.5704E+03 - 1.4125E-01 7.0789E+03 7.1865E+03 3.5136E+03 3.0997E+03 - 1.5849E-01 6.1557E+03 6.2318E+03 3.0357E+03 2.6513E+03 - 1.7783E-01 5.2712E+03 5.3151E+03 2.6019E+03 2.2499E+03 - 1.9953E-01 4.4532E+03 4.4682E+03 2.2124E+03 1.8913E+03 - 2.2387E-01 3.7132E+03 3.7141E+03 1.8510E+03 1.5595E+03 - 2.5119E-01 3.0523E+03 3.0452E+03 1.5266E+03 1.2737E+03 - 2.8184E-01 2.4718E+03 2.4656E+03 1.2467E+03 1.0297E+03 - 3.1623E-01 1.9877E+03 1.9758E+03 9.9654E+02 8.2338E+02 - 3.5481E-01 1.5823E+03 1.5652E+03 7.9299E+02 6.4988E+02 - 3.9811E-01 1.2412E+03 1.2255E+03 6.2367E+02 5.0659E+02 - 4.4668E-01 9.6878E+02 9.5094E+02 4.8150E+02 3.9368E+02 - 5.0119E-01 7.5175E+02 7.3701E+02 3.7227E+02 3.0064E+02 - 5.6234E-01 5.7570E+02 5.6526E+02 2.8474E+02 2.2604E+02 - 6.3096E-01 4.3769E+02 4.2526E+02 2.1547E+02 1.7210E+02 - 7.0795E-01 3.3406E+02 3.1886E+02 1.6036E+02 1.2860E+02 - 7.9433E-01 2.5234E+02 2.4033E+02 1.1861E+02 9.4094E+01 - 8.9125E-01 1.8988E+02 1.8026E+02 8.8210E+01 6.9689E+01 - 1.0000E+00 1.4304E+02 1.3338E+02 6.4524E+01 5.1047E+01 - 1.1220E+00 1.0713E+02 9.8673E+01 4.7072E+01 3.7104E+01 - 1.2589E+00 8.0106E+01 7.3116E+01 3.4122E+01 2.6626E+01 - 1.4125E+00 5.9832E+01 5.4140E+01 2.4690E+01 1.9231E+01 - 1.5849E+00 4.4601E+01 3.9715E+01 1.7641E+01 1.3668E+01 - 1.7783E+00 3.2963E+01 2.8898E+01 1.2557E+01 9.6515E+00 - 1.9953E+00 2.4097E+01 2.1190E+01 8.9542E+00 6.8095E+00 - 2.2387E+00 1.7737E+01 1.5415E+01 6.3109E+00 4.7733E+00 - 2.5119E+00 1.3053E+01 1.0985E+01 4.4518E+00 3.3657E+00 - 2.8184E+00 9.5049E+00 7.8424E+00 3.0756E+00 2.3566E+00 - 3.1623E+00 6.8836E+00 5.7036E+00 2.1279E+00 1.6305E+00 - 3.5481E+00 4.9723E+00 4.0786E+00 1.4570E+00 1.1181E+00 - 3.9811E+00 3.5920E+00 2.9217E+00 1.0042E+00 7.6337E-01 - 4.4668E+00 2.5947E+00 2.0942E+00 6.8503E-01 5.2378E-01 - 5.0119E+00 1.8713E+00 1.4978E+00 4.6808E-01 3.5047E-01 - 5.6234E+00 1.3571E+00 1.0788E+00 3.2137E-01 2.3711E-01 - 6.3096E+00 9.8014E-01 7.6429E-01 2.1360E-01 1.6503E-01 - 7.0795E+00 7.0099E-01 5.3709E-01 1.4591E-01 1.1176E-01 - 7.9433E+00 5.0396E-01 3.8094E-01 9.8628E-02 7.3010E-02 - 8.9125E+00 3.5779E-01 2.7443E-01 6.5669E-02 4.8653E-02 - 1.0000E+01 2.5769E-01 1.9348E-01 4.3194E-02 3.2711E-02 - 1.1220E+01 1.8408E-01 1.3715E-01 2.8629E-02 2.2090E-02 - 1.2589E+01 1.2981E-01 9.7334E-02 1.9194E-02 1.4760E-02 - 1.4125E+01 9.2587E-02 6.9046E-02 1.2759E-02 1.0031E-02 - 1.5849E+01 6.6574E-02 4.8990E-02 8.3757E-03 6.6149E-03 - 1.7783E+01 4.7199E-02 3.4643E-02 5.5775E-03 4.3564E-03 - 1.9953E+01 3.3195E-02 2.4552E-02 3.7912E-03 2.9899E-03 - 2.2387E+01 2.3554E-02 1.7406E-02 2.5089E-03 1.9513E-03 - 2.5119E+01 1.7050E-02 1.2293E-02 1.6557E-03 1.3042E-03 - 2.8184E+01 1.2114E-02 8.6821E-03 1.1353E-03 8.7457E-04 - 3.1623E+01 8.5060E-03 6.1331E-03 7.4874E-04 5.8553E-04 - 3.5481E+01 6.0074E-03 4.3127E-03 5.0386E-04 3.9867E-04 - 3.9811E+01 4.2359E-03 3.0176E-03 3.3691E-04 2.6628E-04 - 4.4668E+01 2.9818E-03 2.1322E-03 2.2500E-04 1.7958E-04 - 5.0119E+01 2.1045E-03 1.5045E-03 1.5137E-04 1.2416E-04 - 5.6234E+01 1.4888E-03 1.0560E-03 1.0089E-04 8.3158E-05 - 6.3096E+01 1.0484E-03 7.3835E-04 6.8028E-05 5.5615E-05 - 7.0795E+01 7.3911E-04 5.1360E-04 4.5585E-05 3.7534E-05 - 7.9433E+01 5.2043E-04 3.5741E-04 3.0340E-05 2.5553E-05 - 8.9125E+01 3.6377E-04 2.5006E-04 2.1404E-05 1.7551E-05 - 1.0000E+02 2.5432E-04 1.7500E-04 1.4454E-05 1.1776E-05 - 1.1220E+02 1.7835E-04 1.2208E-04 9.8919E-06 7.9816E-06 - 1.2589E+02 1.2479E-04 8.5161E-05 6.6721E-06 5.4875E-06 - 1.4125E+02 8.7300E-05 5.8835E-05 4.5001E-06 3.6819E-06 - 1.5849E+02 6.1018E-05 4.0671E-05 3.1030E-06 2.4376E-06 - 1.7783E+02 4.2755E-05 2.8356E-05 2.1404E-06 1.6485E-06 - 1.9953E+02 2.9869E-05 1.9687E-05 1.4612E-06 1.1169E-06 - 2.2387E+02 2.0773E-05 1.3656E-05 9.7375E-07 7.9289E-07 - 2.5119E+02 1.4376E-05 9.4252E-06 6.6345E-07 5.2196E-07 - 2.8184E+02 9.9863E-06 6.4560E-06 4.6893E-07 3.4499E-07 - 3.1623E+02 6.9690E-06 4.4706E-06 3.0303E-07 2.3346E-07 - 3.5481E+02 4.8073E-06 3.0753E-06 2.0145E-07 1.5892E-07 - 3.9811E+02 3.3323E-06 2.1220E-06 1.3515E-07 1.0889E-07 - 4.4668E+02 2.2910E-06 1.4526E-06 9.0539E-08 7.3215E-08 - 5.0119E+02 1.5705E-06 9.9654E-07 6.1753E-08 4.8031E-08 - 5.6234E+02 1.0985E-06 6.8928E-07 4.1517E-08 3.3194E-08 - 6.3096E+02 7.5875E-07 4.7063E-07 2.8296E-08 2.1830E-08 - 7.0795E+02 5.2077E-07 3.1988E-07 1.9451E-08 1.4496E-08 - 7.9433E+02 3.5549E-07 2.1649E-07 1.2858E-08 9.5646E-09 - 8.9125E+02 2.4343E-07 1.4711E-07 8.3580E-09 6.6094E-09 - 1.0000E+03 1.6593E-07 1.0011E-07 5.6724E-09 4.5301E-09 - 1.1220E+03 1.1133E-07 6.7724E-08 3.7588E-09 2.8961E-09 - 1.2589E+03 7.5686E-08 4.5814E-08 2.5298E-09 1.9092E-09 - 1.4125E+03 5.1560E-08 3.0862E-08 1.6734E-09 1.3279E-09 - 1.5849E+03 3.5179E-08 2.0752E-08 1.1384E-09 8.2836E-10 - 1.7783E+03 2.3508E-08 1.3809E-08 7.4268E-10 5.4372E-10 - 1.9953E+03 1.5784E-08 9.1581E-09 4.9049E-10 3.7092E-10 - 2.2387E+03 1.0665E-08 6.2291E-09 3.2652E-10 2.3742E-10 - 2.5119E+03 7.1112E-09 4.1412E-09 2.1756E-10 1.5386E-10 - 2.8184E+03 4.6937E-09 2.7046E-09 1.4668E-10 9.9556E-11 - 3.1623E+03 3.2197E-09 1.8438E-09 9.3812E-11 6.7274E-11 - 3.5481E+03 2.0730E-09 1.1792E-09 6.0024E-11 4.6223E-11 - 3.9811E+03 1.3776E-09 7.8126E-10 4.2345E-11 2.9622E-11 - 4.4668E+03 9.1901E-10 5.2163E-10 2.9107E-11 1.8542E-11 - 5.0119E+03 6.0698E-10 3.4860E-10 1.8055E-11 1.3042E-11 - 5.6234E+03 4.0133E-10 2.3137E-10 1.2039E-11 8.3552E-12 - 6.3096E+03 2.6360E-10 1.5207E-10 7.7709E-12 5.3427E-12 - 7.0795E+03 1.7351E-10 9.9296E-11 4.8024E-12 3.6415E-12 - 7.9433E+03 1.1581E-10 6.4081E-11 3.1683E-12 2.4696E-12 - 8.9125E+03 7.6786E-11 4.2481E-11 2.0203E-12 1.4700E-12 - 1.0000E+04 5.0141E-11 2.7813E-11 1.4031E-12 9.5369E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0100E+04 1.0309E+04 5.0656E+03 4.5570E+03 - 1.1220E-01 9.0530E+03 9.2147E+03 4.5305E+03 4.0690E+03 - 1.2589E-01 8.0471E+03 8.1683E+03 3.9938E+03 3.5678E+03 - 1.4125E-01 7.0821E+03 7.1542E+03 3.4953E+03 3.0875E+03 - 1.5849E-01 6.1423E+03 6.1819E+03 3.0208E+03 2.6519E+03 - 1.7783E-01 5.2534E+03 5.2934E+03 2.5856E+03 2.2455E+03 - 1.9953E-01 4.4481E+03 4.4675E+03 2.1939E+03 1.8778E+03 - 2.2387E-01 3.7021E+03 3.7065E+03 1.8301E+03 1.5521E+03 - 2.5119E-01 3.0346E+03 3.0394E+03 1.5079E+03 1.2771E+03 - 2.8184E-01 2.4658E+03 2.4630E+03 1.2295E+03 1.0332E+03 - 3.1623E-01 1.9810E+03 1.9711E+03 9.9243E+02 8.2222E+02 - 3.5481E-01 1.5818E+03 1.5659E+03 7.9078E+02 6.5249E+02 - 3.9811E-01 1.2471E+03 1.2272E+03 6.2044E+02 5.1108E+02 - 4.4668E-01 9.7117E+02 9.5422E+02 4.8290E+02 3.9330E+02 - 5.0119E-01 7.5231E+02 7.3508E+02 3.7286E+02 2.9980E+02 - 5.6234E-01 5.7574E+02 5.6111E+02 2.8417E+02 2.2769E+02 - 6.3096E-01 4.3772E+02 4.2351E+02 2.1397E+02 1.7003E+02 - 7.0795E-01 3.3315E+02 3.1807E+02 1.6007E+02 1.2700E+02 - 7.9433E-01 2.5286E+02 2.3941E+02 1.1976E+02 9.3832E+01 - 8.9125E-01 1.9091E+02 1.8002E+02 8.8407E+01 6.9017E+01 - 1.0000E+00 1.4389E+02 1.3404E+02 6.4406E+01 5.0791E+01 - 1.1220E+00 1.0764E+02 9.9098E+01 4.6908E+01 3.6844E+01 - 1.2589E+00 8.0304E+01 7.3327E+01 3.3907E+01 2.6551E+01 - 1.4125E+00 5.9991E+01 5.4233E+01 2.4448E+01 1.9043E+01 - 1.5849E+00 4.4380E+01 3.9632E+01 1.7633E+01 1.3766E+01 - 1.7783E+00 3.2614E+01 2.8809E+01 1.2512E+01 9.8400E+00 - 1.9953E+00 2.4069E+01 2.0966E+01 8.8647E+00 6.9715E+00 - 2.2387E+00 1.7827E+01 1.5342E+01 6.2780E+00 4.8441E+00 - 2.5119E+00 1.2925E+01 1.1062E+01 4.4175E+00 3.4013E+00 - 2.8184E+00 9.3967E+00 7.8701E+00 3.0741E+00 2.3481E+00 - 3.1623E+00 6.8642E+00 5.6709E+00 2.1424E+00 1.6215E+00 - 3.5481E+00 4.9694E+00 4.0716E+00 1.4724E+00 1.1217E+00 - 3.9811E+00 3.6122E+00 2.9248E+00 1.0078E+00 7.6413E-01 - 4.4668E+00 2.6147E+00 2.0931E+00 6.8647E-01 5.1592E-01 - 5.0119E+00 1.8799E+00 1.4842E+00 4.6315E-01 3.4731E-01 - 5.6234E+00 1.3466E+00 1.0644E+00 3.1391E-01 2.3786E-01 - 6.3096E+00 9.6903E-01 7.6165E-01 2.1396E-01 1.6065E-01 - 7.0795E+00 7.0127E-01 5.3860E-01 1.4364E-01 1.0691E-01 - 7.9433E+00 5.0201E-01 3.8362E-01 9.8004E-02 7.1599E-02 - 8.9125E+00 3.6014E-01 2.7135E-01 6.6267E-02 4.8892E-02 - 1.0000E+01 2.5633E-01 1.9309E-01 4.3250E-02 3.2680E-02 - 1.1220E+01 1.8147E-01 1.3652E-01 2.8948E-02 2.1788E-02 - 1.2589E+01 1.2801E-01 9.6269E-02 1.9131E-02 1.4771E-02 - 1.4125E+01 9.2016E-02 6.7964E-02 1.3033E-02 9.7678E-03 - 1.5849E+01 6.5564E-02 4.8353E-02 8.6462E-03 6.5083E-03 - 1.7783E+01 4.6467E-02 3.4462E-02 5.5546E-03 4.3225E-03 - 1.9953E+01 3.3075E-02 2.4403E-02 3.6614E-03 2.9531E-03 - 2.2387E+01 2.3544E-02 1.7423E-02 2.4470E-03 1.9799E-03 - 2.5119E+01 1.6903E-02 1.2379E-02 1.6325E-03 1.3742E-03 - 2.8184E+01 1.1935E-02 8.4872E-03 1.1157E-03 9.2099E-04 - 3.1623E+01 8.5047E-03 6.1331E-03 7.4384E-04 6.0181E-04 - 3.5481E+01 6.0204E-03 4.3173E-03 4.9635E-04 3.9940E-04 - 3.9811E+01 4.2482E-03 3.0369E-03 3.3071E-04 2.7086E-04 - 4.4668E+01 2.9952E-03 2.1277E-03 2.2294E-04 1.8380E-04 - 5.0119E+01 2.1129E-03 1.4932E-03 1.5066E-04 1.2261E-04 - 5.6234E+01 1.4815E-03 1.0484E-03 1.0323E-04 8.3950E-05 - 6.3096E+01 1.0457E-03 7.3627E-04 6.9238E-05 5.6375E-05 - 7.0795E+01 7.3672E-04 5.1102E-04 4.5694E-05 3.7611E-05 - 7.9433E+01 5.1727E-04 3.5334E-04 3.1193E-05 2.5586E-05 - 8.9125E+01 3.6148E-04 2.4943E-04 2.0936E-05 1.6989E-05 - 1.0000E+02 2.5437E-04 1.7487E-04 1.4382E-05 1.1651E-05 - 1.1220E+02 1.7812E-04 1.2150E-04 9.6760E-06 8.0934E-06 - 1.2589E+02 1.2493E-04 8.4530E-05 6.5366E-06 5.5339E-06 - 1.4125E+02 8.7477E-05 5.8860E-05 4.4929E-06 3.7068E-06 - 1.5849E+02 6.1085E-05 4.0937E-05 3.0845E-06 2.5077E-06 - 1.7783E+02 4.2326E-05 2.8409E-05 2.1056E-06 1.7196E-06 - 1.9953E+02 2.9530E-05 1.9624E-05 1.3933E-06 1.1467E-06 - 2.2387E+02 2.0662E-05 1.3546E-05 9.4959E-07 7.7832E-07 - 2.5119E+02 1.4437E-05 9.3814E-06 6.6443E-07 5.2199E-07 - 2.8184E+02 1.0075E-05 6.4308E-06 4.7327E-07 3.3973E-07 - 3.1623E+02 6.9665E-06 4.4876E-06 3.0867E-07 2.4395E-07 - 3.5481E+02 4.8069E-06 3.0693E-06 2.0857E-07 1.5945E-07 - 3.9811E+02 3.3256E-06 2.0955E-06 1.4021E-07 1.0477E-07 - 4.4668E+02 2.2958E-06 1.4502E-06 9.0814E-08 7.3236E-08 - 5.0119E+02 1.5902E-06 9.9333E-07 6.1520E-08 4.9224E-08 - 5.6234E+02 1.1075E-06 6.8471E-07 4.2139E-08 3.2949E-08 - 6.3096E+02 7.5741E-07 4.6936E-07 2.9020E-08 2.2156E-08 - 7.0795E+02 5.1894E-07 3.2208E-07 1.9529E-08 1.4814E-08 - 7.9433E+02 3.5480E-07 2.1898E-07 1.2823E-08 9.8586E-09 - 8.9125E+02 2.4323E-07 1.4802E-07 8.5041E-09 6.7405E-09 - 1.0000E+03 1.6752E-07 1.0050E-07 5.6714E-09 4.3775E-09 - 1.1220E+03 1.1234E-07 6.7947E-08 3.9314E-09 2.8015E-09 - 1.2589E+03 7.6397E-08 4.5757E-08 2.6923E-09 1.9768E-09 - 1.4125E+03 5.1611E-08 3.0390E-08 1.7971E-09 1.3218E-09 - 1.5849E+03 3.4263E-08 2.0427E-08 1.1734E-09 8.3878E-10 - 1.7783E+03 2.3088E-08 1.3827E-08 7.3241E-10 5.1809E-10 - 1.9953E+03 1.5761E-08 9.3431E-09 5.0435E-10 3.5969E-10 - 2.2387E+03 1.0536E-08 6.2607E-09 3.3569E-10 2.4588E-10 - 2.5119E+03 7.1021E-09 4.0900E-09 2.2124E-10 1.5581E-10 - 2.8184E+03 4.7392E-09 2.7123E-09 1.4831E-10 9.0902E-11 - 3.1623E+03 3.2113E-09 1.8563E-09 9.1768E-11 6.9979E-11 - 3.5481E+03 2.0941E-09 1.2016E-09 6.3921E-11 4.5466E-11 - 3.9811E+03 1.3957E-09 8.0647E-10 4.4604E-11 2.9866E-11 - 4.4668E+03 9.1996E-10 5.3008E-10 2.8679E-11 2.1397E-11 - 5.0119E+03 6.1106E-10 3.4591E-10 1.8392E-11 1.4096E-11 - 5.6234E+03 4.0185E-10 2.2358E-10 1.2801E-11 9.1561E-12 - 6.3096E+03 2.6400E-10 1.4687E-10 8.0535E-12 5.6682E-12 - 7.0795E+03 1.7589E-10 9.8158E-11 4.7243E-12 3.9461E-12 - 7.9433E+03 1.1651E-10 6.3400E-11 3.0830E-12 2.6708E-12 - 8.9125E+03 7.7155E-11 4.0991E-11 2.2043E-12 1.6536E-12 - 1.0000E+04 4.9702E-11 2.7023E-11 1.5312E-12 9.5733E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0465E+04 1.0587E+04 5.1655E+03 4.7656E+03 - 1.1220E-01 9.3060E+03 9.4020E+03 4.6439E+03 4.2193E+03 - 1.2589E-01 8.2447E+03 8.2929E+03 4.1081E+03 3.6878E+03 - 1.4125E-01 7.2394E+03 7.2439E+03 3.5708E+03 3.1858E+03 - 1.5849E-01 6.2749E+03 6.2620E+03 3.0772E+03 2.7286E+03 - 1.7783E-01 5.3758E+03 5.3463E+03 2.6417E+03 2.3096E+03 - 1.9953E-01 4.5331E+03 4.5071E+03 2.2567E+03 1.9418E+03 - 2.2387E-01 3.7676E+03 3.7511E+03 1.8910E+03 1.6090E+03 - 2.5119E-01 3.0903E+03 3.0850E+03 1.5528E+03 1.3150E+03 - 2.8184E-01 2.5046E+03 2.4996E+03 1.2683E+03 1.0677E+03 - 3.1623E-01 2.0097E+03 2.0042E+03 1.0231E+03 8.5418E+02 - 3.5481E-01 1.5975E+03 1.5903E+03 8.1851E+02 6.7673E+02 - 3.9811E-01 1.2647E+03 1.2476E+03 6.4669E+02 5.3099E+02 - 4.4668E-01 9.8902E+02 9.7621E+02 5.0661E+02 4.1251E+02 - 5.0119E-01 7.6404E+02 7.5493E+02 3.9119E+02 3.1702E+02 - 5.6234E-01 5.8641E+02 5.7554E+02 2.9618E+02 2.3862E+02 - 6.3096E-01 4.4773E+02 4.3673E+02 2.2383E+02 1.7930E+02 - 7.0795E-01 3.3994E+02 3.3056E+02 1.6887E+02 1.3695E+02 - 7.9433E-01 2.5725E+02 2.4838E+02 1.2738E+02 1.0193E+02 - 8.9125E-01 1.9489E+02 1.8557E+02 9.4693E+01 7.4273E+01 - 1.0000E+00 1.4669E+02 1.3855E+02 6.9789E+01 5.4563E+01 - 1.1220E+00 1.0968E+02 1.0254E+02 5.0459E+01 3.9523E+01 - 1.2589E+00 8.2369E+01 7.6153E+01 3.6375E+01 2.8623E+01 - 1.4125E+00 6.1065E+01 5.5934E+01 2.6396E+01 2.0756E+01 - 1.5849E+00 4.5370E+01 4.0938E+01 1.9248E+01 1.4888E+01 - 1.7783E+00 3.3957E+01 3.0058E+01 1.3902E+01 1.0615E+01 - 1.9953E+00 2.5079E+01 2.1773E+01 9.8518E+00 7.5976E+00 - 2.2387E+00 1.8439E+01 1.5832E+01 6.9449E+00 5.3367E+00 - 2.5119E+00 1.3422E+01 1.1461E+01 4.8651E+00 3.7370E+00 - 2.8184E+00 9.7200E+00 8.3035E+00 3.3981E+00 2.6374E+00 - 3.1623E+00 7.1380E+00 5.9604E+00 2.3937E+00 1.8369E+00 - 3.5481E+00 5.1743E+00 4.2848E+00 1.6540E+00 1.2522E+00 - 3.9811E+00 3.7275E+00 3.0788E+00 1.1270E+00 8.5770E-01 - 4.4668E+00 2.7062E+00 2.1959E+00 7.6667E-01 5.9286E-01 - 5.0119E+00 1.9592E+00 1.5750E+00 5.2458E-01 4.0320E-01 - 5.6234E+00 1.4052E+00 1.1247E+00 3.6296E-01 2.6838E-01 - 6.3096E+00 1.0149E+00 7.9820E-01 2.5010E-01 1.7975E-01 - 7.0795E+00 7.3147E-01 5.7120E-01 1.6868E-01 1.2198E-01 - 7.9433E+00 5.2039E-01 4.0352E-01 1.1357E-01 8.2117E-02 - 8.9125E+00 3.7046E-01 2.8692E-01 7.4205E-02 5.5937E-02 - 1.0000E+01 2.6607E-01 2.0336E-01 4.8843E-02 3.7509E-02 - 1.1220E+01 1.8892E-01 1.4374E-01 3.2500E-02 2.4580E-02 - 1.2589E+01 1.3453E-01 1.0203E-01 2.1844E-02 1.6505E-02 - 1.4125E+01 9.5925E-02 7.2275E-02 1.4793E-02 1.1393E-02 - 1.5849E+01 6.8652E-02 5.1175E-02 9.6475E-03 7.5888E-03 - 1.7783E+01 4.8716E-02 3.6439E-02 6.4623E-03 4.9232E-03 - 1.9953E+01 3.4521E-02 2.5762E-02 4.3844E-03 3.3863E-03 - 2.2387E+01 2.4567E-02 1.8097E-02 2.9357E-03 2.2476E-03 - 2.5119E+01 1.7324E-02 1.2864E-02 1.9653E-03 1.4778E-03 - 2.8184E+01 1.2324E-02 9.1746E-03 1.2600E-03 1.0305E-03 - 3.1623E+01 8.8499E-03 6.4222E-03 8.4925E-04 6.7055E-04 - 3.5481E+01 6.2669E-03 4.5248E-03 5.6624E-04 4.4867E-04 - 3.9811E+01 4.4298E-03 3.1902E-03 3.7722E-04 3.0006E-04 - 4.4668E+01 3.1264E-03 2.2419E-03 2.5179E-04 2.0568E-04 - 5.0119E+01 2.1999E-03 1.5810E-03 1.6931E-04 1.3672E-04 - 5.6234E+01 1.5486E-03 1.1122E-03 1.1449E-04 8.8732E-05 - 6.3096E+01 1.0956E-03 7.7582E-04 7.6058E-05 6.0298E-05 - 7.0795E+01 7.6986E-04 5.4178E-04 5.0776E-05 4.2237E-05 - 7.9433E+01 5.4028E-04 3.8334E-04 3.5271E-05 2.8541E-05 - 8.9125E+01 3.8093E-04 2.6736E-04 2.2997E-05 1.9024E-05 - 1.0000E+02 2.6804E-04 1.8390E-04 1.5802E-05 1.3056E-05 - 1.1220E+02 1.8768E-04 1.2775E-04 1.0658E-05 8.7041E-06 - 1.2589E+02 1.3139E-04 8.9362E-05 7.2416E-06 5.8304E-06 - 1.4125E+02 9.1590E-05 6.1954E-05 5.0005E-06 4.0844E-06 - 1.5849E+02 6.4123E-05 4.3092E-05 3.3770E-06 2.7374E-06 - 1.7783E+02 4.5087E-05 3.0133E-05 2.2257E-06 1.8483E-06 - 1.9953E+02 3.1309E-05 2.0790E-05 1.5390E-06 1.2851E-06 - 2.2387E+02 2.1797E-05 1.4401E-05 1.0450E-06 8.4312E-07 - 2.5119E+02 1.5234E-05 9.9057E-06 7.1837E-07 5.5197E-07 - 2.8184E+02 1.0622E-05 6.8268E-06 5.0088E-07 4.0874E-07 - 3.1623E+02 7.3924E-06 4.8003E-06 3.2550E-07 2.6799E-07 - 3.5481E+02 5.1154E-06 3.2881E-06 2.2273E-07 1.8006E-07 - 3.9811E+02 3.5469E-06 2.2573E-06 1.5007E-07 1.2089E-07 - 4.4668E+02 2.4535E-06 1.5567E-06 1.0137E-07 8.1525E-08 - 5.0119E+02 1.6985E-06 1.0751E-06 6.7575E-08 5.3916E-08 - 5.6234E+02 1.1851E-06 7.3813E-07 4.6610E-08 3.6229E-08 - 6.3096E+02 8.0790E-07 5.0299E-07 3.2653E-08 2.4631E-08 - 7.0795E+02 5.5533E-07 3.4586E-07 2.1638E-08 1.6789E-08 - 7.9433E+02 3.8216E-07 2.3678E-07 1.4214E-08 1.1118E-08 - 8.9125E+02 2.6247E-07 1.5954E-07 9.6696E-09 7.4368E-09 - 1.0000E+03 1.8108E-07 1.0886E-07 6.5649E-09 4.9326E-09 - 1.1220E+03 1.2274E-07 7.3759E-08 4.4133E-09 3.2521E-09 - 1.2589E+03 8.3035E-08 5.0122E-08 2.8751E-09 2.0616E-09 - 1.4125E+03 5.6714E-08 3.4162E-08 1.9180E-09 1.3714E-09 - 1.5849E+03 3.8602E-08 2.2840E-08 1.2825E-09 9.7817E-10 - 1.7783E+03 2.5905E-08 1.5251E-08 8.5054E-10 6.6152E-10 - 1.9953E+03 1.7175E-08 1.0171E-08 5.5586E-10 4.1116E-10 - 2.2387E+03 1.1713E-08 6.8629E-09 3.5515E-10 2.6398E-10 - 2.5119E+03 7.9489E-09 4.6397E-09 2.4094E-10 1.7387E-10 - 2.8184E+03 5.2180E-09 3.0220E-09 1.5600E-10 1.1755E-10 - 3.1623E+03 3.5870E-09 2.0565E-09 1.0493E-10 7.4539E-11 - 3.5481E+03 2.3305E-09 1.3380E-09 6.7197E-11 4.6969E-11 - 3.9811E+03 1.5442E-09 8.8386E-10 4.2687E-11 3.1742E-11 - 4.4668E+03 1.0122E-09 5.8952E-10 2.9495E-11 2.0749E-11 - 5.0119E+03 6.7478E-10 3.8691E-10 2.0400E-11 1.3880E-11 - 5.6234E+03 4.4725E-10 2.5412E-10 1.3678E-11 9.5568E-12 - 6.3096E+03 2.9564E-10 1.6739E-10 8.5292E-12 5.8444E-12 - 7.0795E+03 1.9683E-10 1.0890E-10 5.6346E-12 4.1277E-12 - 7.9433E+03 1.2845E-10 7.0527E-11 3.8831E-12 2.7298E-12 - 8.9125E+03 8.4926E-11 4.6484E-11 2.5950E-12 1.7677E-12 - 1.0000E+04 5.6887E-11 3.1032E-11 1.8827E-12 1.1809E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0441E+04 1.0506E+04 5.0972E+03 4.7532E+03 - 1.1220E-01 9.2912E+03 9.3759E+03 4.5512E+03 4.2110E+03 - 1.2589E-01 8.2040E+03 8.2655E+03 4.0108E+03 3.6781E+03 - 1.4125E-01 7.1733E+03 7.2163E+03 3.5046E+03 3.1934E+03 - 1.5849E-01 6.2170E+03 6.2412E+03 3.0491E+03 2.7236E+03 - 1.7783E-01 5.3302E+03 5.3295E+03 2.6129E+03 2.2937E+03 - 1.9953E-01 4.4941E+03 4.4797E+03 2.2127E+03 1.9325E+03 - 2.2387E-01 3.7473E+03 3.7090E+03 1.8511E+03 1.6087E+03 - 2.5119E-01 3.0820E+03 3.0472E+03 1.5265E+03 1.3151E+03 - 2.8184E-01 2.5084E+03 2.4803E+03 1.2517E+03 1.0692E+03 - 3.1623E-01 2.0166E+03 1.9952E+03 1.0209E+03 8.5958E+02 - 3.5481E-01 1.6056E+03 1.5803E+03 8.1179E+02 6.7615E+02 - 3.9811E-01 1.2688E+03 1.2414E+03 6.3835E+02 5.2934E+02 - 4.4668E-01 9.8982E+02 9.7484E+02 5.0118E+02 4.1254E+02 - 5.0119E-01 7.6757E+02 7.5166E+02 3.8847E+02 3.1640E+02 - 5.6234E-01 5.9278E+02 5.7271E+02 2.9844E+02 2.4132E+02 - 6.3096E-01 4.5408E+02 4.3753E+02 2.2788E+02 1.8224E+02 - 7.0795E-01 3.4153E+02 3.3086E+02 1.7078E+02 1.3548E+02 - 7.9433E-01 2.5674E+02 2.4994E+02 1.2639E+02 1.0144E+02 - 8.9125E-01 1.9522E+02 1.8704E+02 9.3885E+01 7.4343E+01 - 1.0000E+00 1.4759E+02 1.3848E+02 6.9300E+01 5.4342E+01 - 1.1220E+00 1.1040E+02 1.0301E+02 5.0882E+01 3.9690E+01 - 1.2589E+00 8.2740E+01 7.6585E+01 3.6653E+01 2.8839E+01 - 1.4125E+00 6.1881E+01 5.6477E+01 2.6496E+01 2.1010E+01 - 1.5849E+00 4.5957E+01 4.1389E+01 1.9332E+01 1.5016E+01 - 1.7783E+00 3.3940E+01 3.0093E+01 1.3933E+01 1.0719E+01 - 1.9953E+00 2.4912E+01 2.1793E+01 9.8839E+00 7.6091E+00 - 2.2387E+00 1.8068E+01 1.5914E+01 7.0594E+00 5.3441E+00 - 2.5119E+00 1.3202E+01 1.1514E+01 4.9806E+00 3.8050E+00 - 2.8184E+00 9.7874E+00 8.3322E+00 3.4342E+00 2.6623E+00 - 3.1623E+00 7.1406E+00 5.9778E+00 2.3755E+00 1.8211E+00 - 3.5481E+00 5.1867E+00 4.2777E+00 1.6513E+00 1.2556E+00 - 3.9811E+00 3.7706E+00 3.0619E+00 1.1380E+00 8.5163E-01 - 4.4668E+00 2.7075E+00 2.1852E+00 7.8759E-01 5.8703E-01 - 5.0119E+00 1.9466E+00 1.5703E+00 5.3185E-01 4.0484E-01 - 5.6234E+00 1.4081E+00 1.1251E+00 3.6059E-01 2.7294E-01 - 6.3096E+00 1.0156E+00 7.9974E-01 2.4458E-01 1.8505E-01 - 7.0795E+00 7.2684E-01 5.7080E-01 1.6337E-01 1.2496E-01 - 7.9433E+00 5.1616E-01 4.0766E-01 1.0977E-01 8.2814E-02 - 8.9125E+00 3.6900E-01 2.8853E-01 7.3042E-02 5.4540E-02 - 1.0000E+01 2.6484E-01 2.0180E-01 4.9126E-02 3.6914E-02 - 1.1220E+01 1.8853E-01 1.4501E-01 3.3095E-02 2.5008E-02 - 1.2589E+01 1.3452E-01 1.0313E-01 2.1883E-02 1.6769E-02 - 1.4125E+01 9.5894E-02 7.2775E-02 1.4485E-02 1.1100E-02 - 1.5849E+01 6.8423E-02 5.1516E-02 9.8155E-03 7.3876E-03 - 1.7783E+01 4.8714E-02 3.6199E-02 6.5483E-03 5.0361E-03 - 1.9953E+01 3.4613E-02 2.5803E-02 4.3372E-03 3.3688E-03 - 2.2387E+01 2.4869E-02 1.8346E-02 2.9799E-03 2.1988E-03 - 2.5119E+01 1.7444E-02 1.2761E-02 1.9924E-03 1.4582E-03 - 2.8184E+01 1.2111E-02 9.2090E-03 1.2971E-03 1.0047E-03 - 3.1623E+01 8.8579E-03 6.4391E-03 8.5251E-04 6.6655E-04 - 3.5481E+01 6.2543E-03 4.5517E-03 5.7310E-04 4.4946E-04 - 3.9811E+01 4.4218E-03 3.1995E-03 3.7904E-04 3.0209E-04 - 4.4668E+01 3.1284E-03 2.2446E-03 2.5042E-04 2.0275E-04 - 5.0119E+01 2.2153E-03 1.5740E-03 1.7007E-04 1.3752E-04 - 5.6234E+01 1.5611E-03 1.1108E-03 1.1490E-04 9.1215E-05 - 6.3096E+01 1.1024E-03 7.8019E-04 7.6527E-05 6.0482E-05 - 7.0795E+01 7.7724E-04 5.4501E-04 5.1064E-05 4.2007E-05 - 7.9433E+01 5.4554E-04 3.8207E-04 3.5075E-05 2.8187E-05 - 8.9125E+01 3.8292E-04 2.6638E-04 2.3695E-05 1.9129E-05 - 1.0000E+02 2.6768E-04 1.8518E-04 1.5934E-05 1.3096E-05 - 1.1220E+02 1.8724E-04 1.2899E-04 1.0822E-05 8.8432E-06 - 1.2589E+02 1.3126E-04 8.9792E-05 7.3191E-06 5.9890E-06 - 1.4125E+02 9.1751E-05 6.2676E-05 4.9640E-06 4.0109E-06 - 1.5849E+02 6.4191E-05 4.3440E-05 3.3819E-06 2.7025E-06 - 1.7783E+02 4.4738E-05 2.9936E-05 2.2877E-06 1.8344E-06 - 1.9953E+02 3.1277E-05 2.0839E-05 1.5078E-06 1.2532E-06 - 2.2387E+02 2.1980E-05 1.4547E-05 1.0211E-06 8.5391E-07 - 2.5119E+02 1.5343E-05 1.0076E-05 7.0575E-07 5.6252E-07 - 2.8184E+02 1.0668E-05 6.9366E-06 4.8669E-07 3.9015E-07 - 3.1623E+02 7.4054E-06 4.7884E-06 3.2548E-07 2.6236E-07 - 3.5481E+02 5.1302E-06 3.2932E-06 2.1748E-07 1.7739E-07 - 3.9811E+02 3.5621E-06 2.2660E-06 1.5046E-07 1.2162E-07 - 4.4668E+02 2.4625E-06 1.5614E-06 1.0028E-07 8.1347E-08 - 5.0119E+02 1.7002E-06 1.0637E-06 6.9247E-08 5.3548E-08 - 5.6234E+02 1.1830E-06 7.3609E-07 4.7004E-08 3.6232E-08 - 6.3096E+02 8.1367E-07 5.0046E-07 3.1697E-08 2.4467E-08 - 7.0795E+02 5.5853E-07 3.4188E-07 2.1544E-08 1.6794E-08 - 7.9433E+02 3.8086E-07 2.3569E-07 1.4402E-08 1.0801E-08 - 8.9125E+02 2.6206E-07 1.6241E-07 9.5714E-09 6.9468E-09 - 1.0000E+03 1.8048E-07 1.1001E-07 6.2860E-09 5.1538E-09 - 1.1220E+03 1.2176E-07 7.3539E-08 4.1607E-09 3.3733E-09 - 1.2589E+03 8.2705E-08 4.9805E-08 2.8616E-09 2.1627E-09 - 1.4125E+03 5.6389E-08 3.3779E-08 1.9087E-09 1.4975E-09 - 1.5849E+03 3.8296E-08 2.2526E-08 1.2715E-09 1.0007E-09 - 1.7783E+03 2.6169E-08 1.5235E-08 8.3537E-10 6.2962E-10 - 1.9953E+03 1.7554E-08 1.0365E-08 5.6420E-10 3.9622E-10 - 2.2387E+03 1.1809E-08 7.0033E-09 3.7811E-10 2.6426E-10 - 2.5119E+03 7.8806E-09 4.5991E-09 2.4408E-10 1.8266E-10 - 2.8184E+03 5.1942E-09 3.0890E-09 1.5899E-10 1.1698E-10 - 3.1623E+03 3.5592E-09 2.0922E-09 1.0939E-10 8.0985E-11 - 3.5481E+03 2.3302E-09 1.3414E-09 7.1146E-11 5.0653E-11 - 3.9811E+03 1.5465E-09 8.8301E-10 4.5243E-11 3.3738E-11 - 4.4668E+03 1.0169E-09 5.8705E-10 2.9254E-11 2.2666E-11 - 5.0119E+03 6.7854E-10 3.9353E-10 2.0072E-11 1.3564E-11 - 5.6234E+03 4.5689E-10 2.5806E-10 1.3981E-11 8.0794E-12 - 6.3096E+03 2.9890E-10 1.6472E-10 8.6163E-12 6.2204E-12 - 7.0795E+03 1.9552E-10 1.0783E-10 5.7431E-12 3.9846E-12 - 7.9433E+03 1.2802E-10 7.1140E-11 3.8141E-12 2.5787E-12 - 8.9125E+03 8.4768E-11 4.7387E-11 2.3855E-12 1.6072E-12 - 1.0000E+04 5.5105E-11 3.1021E-11 1.4182E-12 1.0538E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0417E+04 1.0425E+04 5.0537E+03 4.7893E+03 - 1.1220E-01 9.3008E+03 9.2823E+03 4.5164E+03 4.2392E+03 - 1.2589E-01 8.2072E+03 8.1818E+03 3.9946E+03 3.6994E+03 - 1.4125E-01 7.1869E+03 7.1366E+03 3.4856E+03 3.2019E+03 - 1.5849E-01 6.2259E+03 6.1812E+03 3.0055E+03 2.7442E+03 - 1.7783E-01 5.3168E+03 5.2735E+03 2.5799E+03 2.3214E+03 - 1.9953E-01 4.4840E+03 4.4329E+03 2.1939E+03 1.9402E+03 - 2.2387E-01 3.7295E+03 3.6888E+03 1.8394E+03 1.6075E+03 - 2.5119E-01 3.0810E+03 3.0341E+03 1.5198E+03 1.3217E+03 - 2.8184E-01 2.5123E+03 2.4700E+03 1.2433E+03 1.0738E+03 - 3.1623E-01 2.0176E+03 1.9853E+03 1.0041E+03 8.5705E+02 - 3.5481E-01 1.6009E+03 1.5723E+03 8.0556E+02 6.7469E+02 - 3.9811E-01 1.2627E+03 1.2383E+03 6.4073E+02 5.3146E+02 - 4.4668E-01 9.8992E+02 9.6716E+02 5.0246E+02 4.1204E+02 - 5.0119E-01 7.6783E+02 7.4931E+02 3.8821E+02 3.1671E+02 - 5.6234E-01 5.9304E+02 5.7659E+02 2.9790E+02 2.4197E+02 - 6.3096E-01 4.5258E+02 4.3927E+02 2.2513E+02 1.8214E+02 - 7.0795E-01 3.4245E+02 3.3197E+02 1.6929E+02 1.3600E+02 - 7.9433E-01 2.5969E+02 2.4860E+02 1.2696E+02 1.0081E+02 - 8.9125E-01 1.9618E+02 1.8549E+02 9.3851E+01 7.4346E+01 - 1.0000E+00 1.4722E+02 1.3805E+02 6.8860E+01 5.4603E+01 - 1.1220E+00 1.1058E+02 1.0286E+02 5.0496E+01 3.9984E+01 - 1.2589E+00 8.2573E+01 7.6317E+01 3.6956E+01 2.8848E+01 - 1.4125E+00 6.1464E+01 5.5867E+01 2.6620E+01 2.0689E+01 - 1.5849E+00 4.5669E+01 4.0925E+01 1.9160E+01 1.4918E+01 - 1.7783E+00 3.3848E+01 3.0168E+01 1.3688E+01 1.0802E+01 - 1.9953E+00 2.4880E+01 2.1935E+01 9.8181E+00 7.7142E+00 - 2.2387E+00 1.8322E+01 1.5957E+01 7.0156E+00 5.3647E+00 - 2.5119E+00 1.3399E+01 1.1697E+01 4.9115E+00 3.7730E+00 - 2.8184E+00 9.7450E+00 8.2835E+00 3.4401E+00 2.6338E+00 - 3.1623E+00 7.0958E+00 5.9936E+00 2.3807E+00 1.8346E+00 - 3.5481E+00 5.1543E+00 4.2810E+00 1.6409E+00 1.2551E+00 - 3.9811E+00 3.7385E+00 3.0711E+00 1.1437E+00 8.5082E-01 - 4.4668E+00 2.6967E+00 2.2024E+00 7.7849E-01 5.7894E-01 - 5.0119E+00 1.9431E+00 1.5749E+00 5.2468E-01 3.9896E-01 - 5.6234E+00 1.3943E+00 1.1236E+00 3.5694E-01 2.7149E-01 - 6.3096E+00 1.0060E+00 8.0257E-01 2.4354E-01 1.8563E-01 - 7.0795E+00 7.2305E-01 5.7723E-01 1.6464E-01 1.2552E-01 - 7.9433E+00 5.1576E-01 4.0763E-01 1.1059E-01 8.3864E-02 - 8.9125E+00 3.7080E-01 2.8750E-01 7.5038E-02 5.6063E-02 - 1.0000E+01 2.6530E-01 2.0364E-01 4.9506E-02 3.7862E-02 - 1.1220E+01 1.8849E-01 1.4438E-01 3.3008E-02 2.4947E-02 - 1.2589E+01 1.3432E-01 1.0209E-01 2.2206E-02 1.6518E-02 - 1.4125E+01 9.6676E-02 7.2783E-02 1.4864E-02 1.1230E-02 - 1.5849E+01 6.8965E-02 5.1829E-02 9.9006E-03 7.4234E-03 - 1.7783E+01 4.8511E-02 3.6500E-02 6.5321E-03 4.8769E-03 - 1.9953E+01 3.4687E-02 2.5631E-02 4.3202E-03 3.3494E-03 - 2.2387E+01 2.4810E-02 1.8214E-02 2.8860E-03 2.3434E-03 - 2.5119E+01 1.7646E-02 1.3024E-02 1.9167E-03 1.5957E-03 - 2.8184E+01 1.2525E-02 9.2326E-03 1.2649E-03 1.0220E-03 - 3.1623E+01 8.8168E-03 6.4338E-03 8.4810E-04 6.6751E-04 - 3.5481E+01 6.2384E-03 4.5314E-03 5.7083E-04 4.5208E-04 - 3.9811E+01 4.4107E-03 3.1843E-03 3.8064E-04 3.0338E-04 - 4.4668E+01 3.1250E-03 2.2442E-03 2.5699E-04 2.0357E-04 - 5.0119E+01 2.2072E-03 1.5778E-03 1.7025E-04 1.3683E-04 - 5.6234E+01 1.5584E-03 1.1106E-03 1.1292E-04 9.1778E-05 - 6.3096E+01 1.0961E-03 7.8201E-04 7.5417E-05 6.2011E-05 - 7.0795E+01 7.6836E-04 5.4440E-04 5.0881E-05 4.2131E-05 - 7.9433E+01 5.4130E-04 3.7847E-04 3.5105E-05 2.8650E-05 - 8.9125E+01 3.8100E-04 2.6573E-04 2.3634E-05 1.9358E-05 - 1.0000E+02 2.6740E-04 1.8476E-04 1.5898E-05 1.3064E-05 - 1.1220E+02 1.8784E-04 1.2812E-04 1.0881E-05 8.8963E-06 - 1.2589E+02 1.3179E-04 8.9319E-05 7.2814E-06 5.8761E-06 - 1.4125E+02 9.2140E-05 6.2333E-05 4.9007E-06 3.9714E-06 - 1.5849E+02 6.4282E-05 4.3464E-05 3.3284E-06 2.7536E-06 - 1.7783E+02 4.5066E-05 3.0326E-05 2.2498E-06 1.8685E-06 - 1.9953E+02 3.1475E-05 2.0990E-05 1.5529E-06 1.3073E-06 - 2.2387E+02 2.1831E-05 1.4439E-05 1.0600E-06 8.7358E-07 - 2.5119E+02 1.5233E-05 9.9367E-06 7.0840E-07 5.8573E-07 - 2.8184E+02 1.0597E-05 6.8547E-06 4.6435E-07 4.0662E-07 - 3.1623E+02 7.4047E-06 4.7793E-06 3.2694E-07 2.6229E-07 - 3.5481E+02 5.1262E-06 3.2901E-06 2.2741E-07 1.7666E-07 - 3.9811E+02 3.5536E-06 2.2571E-06 1.4987E-07 1.2119E-07 - 4.4668E+02 2.4627E-06 1.5525E-06 1.0002E-07 8.1569E-08 - 5.0119E+02 1.7019E-06 1.0696E-06 6.8166E-08 5.5042E-08 - 5.6234E+02 1.1818E-06 7.3821E-07 4.6769E-08 3.6243E-08 - 6.3096E+02 8.0955E-07 5.0541E-07 3.1419E-08 2.4214E-08 - 7.0795E+02 5.5479E-07 3.4391E-07 2.1358E-08 1.6429E-08 - 7.9433E+02 3.7941E-07 2.3374E-07 1.4446E-08 1.0712E-08 - 8.9125E+02 2.6142E-07 1.5963E-07 9.7273E-09 7.0298E-09 - 1.0000E+03 1.7975E-07 1.0928E-07 6.2160E-09 4.6918E-09 - 1.1220E+03 1.2125E-07 7.3459E-08 4.0444E-09 3.2395E-09 - 1.2589E+03 8.2587E-08 4.9791E-08 2.8015E-09 2.1525E-09 - 1.4125E+03 5.5867E-08 3.3548E-08 1.8972E-09 1.4393E-09 - 1.5849E+03 3.7533E-08 2.2673E-08 1.2548E-09 9.2869E-10 - 1.7783E+03 2.5337E-08 1.5391E-08 8.4790E-10 6.1349E-10 - 1.9953E+03 1.7272E-08 1.0254E-08 5.6725E-10 4.3428E-10 - 2.2387E+03 1.1544E-08 6.7659E-09 3.7881E-10 2.8902E-10 - 2.5119E+03 7.7442E-09 4.4814E-09 2.5487E-10 1.7171E-10 - 2.8184E+03 5.2167E-09 3.0335E-09 1.6135E-10 1.1167E-10 - 3.1623E+03 3.5813E-09 2.0570E-09 1.0813E-10 7.6813E-11 - 3.5481E+03 2.3368E-09 1.3246E-09 7.2452E-11 5.0636E-11 - 3.9811E+03 1.5372E-09 8.7538E-10 4.4836E-11 3.1487E-11 - 4.4668E+03 1.0207E-09 5.7868E-10 2.9104E-11 2.1260E-11 - 5.0119E+03 6.8018E-10 3.7931E-10 2.1923E-11 1.5402E-11 - 5.6234E+03 4.4560E-10 2.5075E-10 1.2893E-11 9.5392E-12 - 6.3096E+03 2.9687E-10 1.6777E-10 8.3235E-12 6.0598E-12 - 7.0795E+03 1.9786E-10 1.0929E-10 5.7517E-12 4.0072E-12 - 7.9433E+03 1.3062E-10 7.1241E-11 4.0543E-12 2.6355E-12 - 8.9125E+03 8.5633E-11 4.6874E-11 2.5721E-12 1.7448E-12 - 1.0000E+04 5.6192E-11 3.0253E-11 1.4215E-12 1.1807E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0461E+04 1.0448E+04 5.0735E+03 4.8200E+03 - 1.1220E-01 9.2976E+03 9.2800E+03 4.5234E+03 4.2359E+03 - 1.2589E-01 8.2344E+03 8.1891E+03 3.9923E+03 3.7013E+03 - 1.4125E-01 7.2075E+03 7.1490E+03 3.4823E+03 3.2047E+03 - 1.5849E-01 6.2264E+03 6.1810E+03 2.9956E+03 2.7467E+03 - 1.7783E-01 5.3305E+03 5.2772E+03 2.5680E+03 2.3266E+03 - 1.9953E-01 4.5062E+03 4.4279E+03 2.1909E+03 1.9512E+03 - 2.2387E-01 3.7576E+03 3.6830E+03 1.8427E+03 1.6180E+03 - 2.5119E-01 3.0978E+03 3.0347E+03 1.5218E+03 1.3168E+03 - 2.8184E-01 2.5092E+03 2.4684E+03 1.2408E+03 1.0670E+03 - 3.1623E-01 2.0040E+03 1.9771E+03 1.0024E+03 8.5981E+02 - 3.5481E-01 1.5984E+03 1.5712E+03 7.9989E+02 6.8105E+02 - 3.9811E-01 1.2659E+03 1.2414E+03 6.3463E+02 5.3296E+02 - 4.4668E-01 9.9012E+02 9.7098E+02 4.9763E+02 4.1151E+02 - 5.0119E-01 7.6580E+02 7.4884E+02 3.8566E+02 3.1371E+02 - 5.6234E-01 5.8912E+02 5.7050E+02 2.9614E+02 2.3882E+02 - 6.3096E-01 4.4910E+02 4.3419E+02 2.2413E+02 1.8200E+02 - 7.0795E-01 3.4118E+02 3.2867E+02 1.6776E+02 1.3710E+02 - 7.9433E-01 2.5869E+02 2.4554E+02 1.2562E+02 1.0088E+02 - 8.9125E-01 1.9524E+02 1.8440E+02 9.4069E+01 7.4229E+01 - 1.0000E+00 1.4731E+02 1.3849E+02 6.9738E+01 5.4592E+01 - 1.1220E+00 1.1097E+02 1.0237E+02 5.0694E+01 4.0150E+01 - 1.2589E+00 8.2849E+01 7.5833E+01 3.6922E+01 2.9109E+01 - 1.4125E+00 6.1155E+01 5.6283E+01 2.6888E+01 2.1096E+01 - 1.5849E+00 4.5642E+01 4.1402E+01 1.9272E+01 1.5234E+01 - 1.7783E+00 3.3905E+01 3.0212E+01 1.3773E+01 1.0800E+01 - 1.9953E+00 2.5002E+01 2.1992E+01 9.8288E+00 7.6023E+00 - 2.2387E+00 1.8275E+01 1.5972E+01 6.9804E+00 5.3859E+00 - 2.5119E+00 1.3302E+01 1.1557E+01 4.9397E+00 3.7972E+00 - 2.8184E+00 9.6800E+00 8.3741E+00 3.4543E+00 2.6151E+00 - 3.1623E+00 7.0855E+00 5.9699E+00 2.3815E+00 1.8198E+00 - 3.5481E+00 5.1562E+00 4.3054E+00 1.6481E+00 1.2522E+00 - 3.9811E+00 3.7408E+00 3.0943E+00 1.1373E+00 8.4771E-01 - 4.4668E+00 2.6919E+00 2.2056E+00 7.7334E-01 5.7878E-01 - 5.0119E+00 1.9346E+00 1.5699E+00 5.2313E-01 4.0222E-01 - 5.6234E+00 1.3913E+00 1.1126E+00 3.4879E-01 2.7338E-01 - 6.3096E+00 1.0075E+00 7.8792E-01 2.4047E-01 1.8405E-01 - 7.0795E+00 7.2782E-01 5.6615E-01 1.6538E-01 1.2379E-01 - 7.9433E+00 5.2044E-01 4.0301E-01 1.0996E-01 8.5564E-02 - 8.9125E+00 3.7112E-01 2.8647E-01 7.4078E-02 5.7743E-02 - 1.0000E+01 2.6342E-01 2.0322E-01 4.9084E-02 3.7605E-02 - 1.1220E+01 1.9007E-01 1.4444E-01 3.2771E-02 2.5056E-02 - 1.2589E+01 1.3576E-01 1.0287E-01 2.2074E-02 1.6604E-02 - 1.4125E+01 9.6265E-02 7.2767E-02 1.4474E-02 1.1019E-02 - 1.5849E+01 6.8592E-02 5.1314E-02 9.5685E-03 7.5265E-03 - 1.7783E+01 4.9064E-02 3.6645E-02 6.4093E-03 5.0873E-03 - 1.9953E+01 3.5196E-02 2.6028E-02 4.2747E-03 3.4251E-03 - 2.2387E+01 2.4744E-02 1.8356E-02 2.9187E-03 2.3116E-03 - 2.5119E+01 1.7662E-02 1.2968E-02 1.9802E-03 1.5025E-03 - 2.8184E+01 1.2600E-02 9.0294E-03 1.3003E-03 9.7163E-04 - 3.1623E+01 8.8366E-03 6.4118E-03 8.5106E-04 6.6233E-04 - 3.5481E+01 6.2771E-03 4.5289E-03 5.6673E-04 4.4404E-04 - 3.9811E+01 4.4278E-03 3.1998E-03 3.7632E-04 3.0271E-04 - 4.4668E+01 3.1189E-03 2.2516E-03 2.5271E-04 2.0535E-04 - 5.0119E+01 2.2002E-03 1.5791E-03 1.7105E-04 1.3724E-04 - 5.6234E+01 1.5600E-03 1.1106E-03 1.1541E-04 9.3559E-05 - 6.3096E+01 1.1036E-03 7.8017E-04 7.6454E-05 6.3426E-05 - 7.0795E+01 7.7692E-04 5.4803E-04 5.1217E-05 4.2206E-05 - 7.9433E+01 5.4268E-04 3.7980E-04 3.4435E-05 2.8082E-05 - 8.9125E+01 3.8119E-04 2.6216E-04 2.3350E-05 1.8993E-05 - 1.0000E+02 2.6725E-04 1.8508E-04 1.5765E-05 1.2968E-05 - 1.1220E+02 1.8713E-04 1.2871E-04 1.0660E-05 8.7484E-06 - 1.2589E+02 1.3143E-04 8.9310E-05 7.2335E-06 5.9447E-06 - 1.4125E+02 9.2083E-05 6.2289E-05 4.8891E-06 4.1251E-06 - 1.5849E+02 6.4052E-05 4.3521E-05 3.2881E-06 2.7268E-06 - 1.7783E+02 4.4704E-05 3.0052E-05 2.2228E-06 1.7735E-06 - 1.9953E+02 3.1233E-05 2.0545E-05 1.5061E-06 1.2313E-06 - 2.2387E+02 2.1818E-05 1.4297E-05 1.0377E-06 8.1842E-07 - 2.5119E+02 1.5339E-05 9.9877E-06 6.9285E-07 5.5137E-07 - 2.8184E+02 1.0610E-05 6.8984E-06 4.7924E-07 3.8303E-07 - 3.1623E+02 7.4039E-06 4.7666E-06 3.2687E-07 2.6098E-07 - 3.5481E+02 5.1126E-06 3.2833E-06 2.1890E-07 1.7744E-07 - 3.9811E+02 3.5494E-06 2.2634E-06 1.4835E-07 1.2063E-07 - 4.4668E+02 2.4709E-06 1.5480E-06 1.0361E-07 8.1023E-08 - 5.0119E+02 1.7097E-06 1.0635E-06 6.9041E-08 5.4504E-08 - 5.6234E+02 1.1852E-06 7.3915E-07 4.5701E-08 3.6481E-08 - 6.3096E+02 8.1315E-07 5.0509E-07 3.1062E-08 2.4432E-08 - 7.0795E+02 5.5958E-07 3.4620E-07 2.1501E-08 1.6306E-08 - 7.9433E+02 3.8517E-07 2.3603E-07 1.4775E-08 1.1187E-08 - 8.9125E+02 2.6522E-07 1.5990E-07 9.3939E-09 7.5395E-09 - 1.0000E+03 1.8034E-07 1.0902E-07 6.3341E-09 4.6681E-09 - 1.1220E+03 1.2215E-07 7.3371E-08 4.4082E-09 3.0774E-09 - 1.2589E+03 8.3108E-08 4.9876E-08 2.9749E-09 2.1515E-09 - 1.4125E+03 5.6044E-08 3.3488E-08 1.8860E-09 1.4775E-09 - 1.5849E+03 3.7913E-08 2.2786E-08 1.1990E-09 9.3698E-10 - 1.7783E+03 2.5788E-08 1.5196E-08 8.1298E-10 6.0357E-10 - 1.9953E+03 1.7368E-08 1.0147E-08 5.4649E-10 4.2220E-10 - 2.2387E+03 1.1643E-08 6.8921E-09 3.7365E-10 2.6491E-10 - 2.5119E+03 7.7320E-09 4.6071E-09 2.5537E-10 1.7527E-10 - 2.8184E+03 5.1558E-09 3.0405E-09 1.6727E-10 1.2723E-10 - 3.1623E+03 3.5699E-09 2.0578E-09 1.0408E-10 7.8433E-11 - 3.5481E+03 2.3234E-09 1.3321E-09 7.0367E-11 4.9623E-11 - 3.9811E+03 1.5399E-09 8.7750E-10 4.5353E-11 3.4421E-11 - 4.4668E+03 1.0262E-09 5.8564E-10 3.3042E-11 2.3562E-11 - 5.0119E+03 6.8154E-10 3.8480E-10 2.2220E-11 1.4071E-11 - 5.6234E+03 4.4852E-10 2.5350E-10 1.1801E-11 8.4949E-12 - 6.3096E+03 2.9959E-10 1.6816E-10 8.3162E-12 5.9316E-12 - 7.0795E+03 1.9758E-10 1.0835E-10 5.5078E-12 4.0537E-12 - 7.9433E+03 1.2962E-10 7.1602E-11 3.8626E-12 2.5118E-12 - 8.9125E+03 8.6691E-11 4.6773E-11 2.6290E-12 1.6877E-12 - 1.0000E+04 5.6342E-11 3.0507E-11 1.5992E-12 1.0463E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0487E+04 1.0482E+04 5.0608E+03 4.8084E+03 - 1.1220E-01 9.3212E+03 9.3212E+03 4.5152E+03 4.2396E+03 - 1.2589E-01 8.2308E+03 8.2069E+03 3.9964E+03 3.7044E+03 - 1.4125E-01 7.2285E+03 7.1809E+03 3.4831E+03 3.1949E+03 - 1.5849E-01 6.2542E+03 6.2054E+03 3.0090E+03 2.7495E+03 - 1.7783E-01 5.3581E+03 5.2847E+03 2.5795E+03 2.3383E+03 - 1.9953E-01 4.5271E+03 4.4591E+03 2.1903E+03 1.9508E+03 - 2.2387E-01 3.7553E+03 3.7058E+03 1.8415E+03 1.6162E+03 - 2.5119E-01 3.0817E+03 3.0362E+03 1.5297E+03 1.3296E+03 - 2.8184E-01 2.5069E+03 2.4630E+03 1.2473E+03 1.0762E+03 - 3.1623E-01 2.0199E+03 1.9788E+03 1.0061E+03 8.5965E+02 - 3.5481E-01 1.6060E+03 1.5755E+03 8.0369E+02 6.7784E+02 - 3.9811E-01 1.2658E+03 1.2431E+03 6.3750E+02 5.2893E+02 - 4.4668E-01 9.8930E+02 9.6554E+02 4.9915E+02 4.1219E+02 - 5.0119E-01 7.6694E+02 7.4258E+02 3.8433E+02 3.1734E+02 - 5.6234E-01 5.9100E+02 5.6925E+02 2.9617E+02 2.4039E+02 - 6.3096E-01 4.5072E+02 4.3109E+02 2.2613E+02 1.8193E+02 - 7.0795E-01 3.4097E+02 3.2547E+02 1.6952E+02 1.3568E+02 - 7.9433E-01 2.5740E+02 2.4500E+02 1.2608E+02 1.0064E+02 - 8.9125E-01 1.9395E+02 1.8402E+02 9.2820E+01 7.4136E+01 - 1.0000E+00 1.4692E+02 1.3766E+02 6.8833E+01 5.4389E+01 - 1.1220E+00 1.1056E+02 1.0253E+02 5.0524E+01 3.9868E+01 - 1.2589E+00 8.2581E+01 7.6045E+01 3.6938E+01 2.8813E+01 - 1.4125E+00 6.1441E+01 5.5997E+01 2.6719E+01 2.0697E+01 - 1.5849E+00 4.5593E+01 4.0951E+01 1.9238E+01 1.4979E+01 - 1.7783E+00 3.3686E+01 2.9943E+01 1.3944E+01 1.0690E+01 - 1.9953E+00 2.4751E+01 2.1999E+01 9.8153E+00 7.5421E+00 - 2.2387E+00 1.8132E+01 1.5977E+01 6.8833E+00 5.3511E+00 - 2.5119E+00 1.3329E+01 1.1364E+01 4.9058E+00 3.7738E+00 - 2.8184E+00 9.7362E+00 8.2035E+00 3.4689E+00 2.5907E+00 - 3.1623E+00 7.1187E+00 5.9516E+00 2.3757E+00 1.7952E+00 - 3.5481E+00 5.1475E+00 4.2890E+00 1.6413E+00 1.2449E+00 - 3.9811E+00 3.7131E+00 3.0720E+00 1.1295E+00 8.5314E-01 - 4.4668E+00 2.6994E+00 2.2005E+00 7.7444E-01 5.7807E-01 - 5.0119E+00 1.9513E+00 1.5809E+00 5.3024E-01 3.9648E-01 - 5.6234E+00 1.3931E+00 1.1243E+00 3.5840E-01 2.6608E-01 - 6.3096E+00 1.0033E+00 7.9525E-01 2.4412E-01 1.8054E-01 - 7.0795E+00 7.2475E-01 5.6211E-01 1.6288E-01 1.2361E-01 - 7.9433E+00 5.1443E-01 3.9506E-01 1.0945E-01 8.1927E-02 - 8.9125E+00 3.6718E-01 2.8231E-01 7.5264E-02 5.5310E-02 - 1.0000E+01 2.6414E-01 2.0224E-01 4.8780E-02 3.7024E-02 - 1.1220E+01 1.8932E-01 1.4392E-01 3.2606E-02 2.4867E-02 - 1.2589E+01 1.3527E-01 1.0226E-01 2.1901E-02 1.6560E-02 - 1.4125E+01 9.5911E-02 7.2329E-02 1.4693E-02 1.1104E-02 - 1.5849E+01 6.8950E-02 5.1255E-02 9.7764E-03 7.4751E-03 - 1.7783E+01 4.8637E-02 3.6492E-02 6.4297E-03 5.0292E-03 - 1.9953E+01 3.4326E-02 2.5739E-02 4.3126E-03 3.2297E-03 - 2.2387E+01 2.4699E-02 1.8051E-02 2.8652E-03 2.1116E-03 - 2.5119E+01 1.7560E-02 1.2807E-02 1.9325E-03 1.4493E-03 - 2.8184E+01 1.2488E-02 9.0927E-03 1.3120E-03 9.6910E-04 - 3.1623E+01 8.8232E-03 6.4025E-03 8.4686E-04 6.6814E-04 - 3.5481E+01 6.2473E-03 4.5156E-03 5.6485E-04 4.4603E-04 - 3.9811E+01 4.4092E-03 3.1772E-03 3.7537E-04 2.9871E-04 - 4.4668E+01 3.1229E-03 2.2360E-03 2.5361E-04 2.0182E-04 - 5.0119E+01 2.1977E-03 1.5804E-03 1.6842E-04 1.3466E-04 - 5.6234E+01 1.5485E-03 1.1050E-03 1.1318E-04 9.0925E-05 - 6.3096E+01 1.0942E-03 7.6900E-04 7.7258E-05 6.1268E-05 - 7.0795E+01 7.6604E-04 5.4059E-04 5.2695E-05 4.1714E-05 - 7.9433E+01 5.3728E-04 3.7891E-04 3.6454E-05 2.8724E-05 - 8.9125E+01 3.7861E-04 2.6379E-04 2.4051E-05 1.9089E-05 - 1.0000E+02 2.6828E-04 1.8517E-04 1.5780E-05 1.3090E-05 - 1.1220E+02 1.8746E-04 1.2929E-04 1.0702E-05 8.8729E-06 - 1.2589E+02 1.3149E-04 9.0175E-05 7.3823E-06 5.9523E-06 - 1.4125E+02 9.1936E-05 6.2689E-05 4.9846E-06 4.0146E-06 - 1.5849E+02 6.4035E-05 4.3464E-05 3.2966E-06 2.7306E-06 - 1.7783E+02 4.4734E-05 3.0234E-05 2.2969E-06 1.8496E-06 - 1.9953E+02 3.1289E-05 2.1017E-05 1.5707E-06 1.2483E-06 - 2.2387E+02 2.1899E-05 1.4455E-05 9.8167E-07 8.5793E-07 - 2.5119E+02 1.5299E-05 9.9436E-06 6.5725E-07 5.9714E-07 - 2.8184E+02 1.0620E-05 6.8485E-06 4.8672E-07 3.9711E-07 - 3.1623E+02 7.4200E-06 4.7721E-06 3.3149E-07 2.6061E-07 - 3.5481E+02 5.1284E-06 3.2919E-06 2.2208E-07 1.7317E-07 - 3.9811E+02 3.5630E-06 2.2795E-06 1.5083E-07 1.1842E-07 - 4.4668E+02 2.4764E-06 1.5688E-06 1.0400E-07 8.1310E-08 - 5.0119E+02 1.7071E-06 1.0775E-06 7.1610E-08 5.4726E-08 - 5.6234E+02 1.1827E-06 7.4729E-07 4.7871E-08 3.6250E-08 - 6.3096E+02 8.1629E-07 5.1122E-07 3.1841E-08 2.4874E-08 - 7.0795E+02 5.6046E-07 3.4661E-07 2.0934E-08 1.6847E-08 - 7.9433E+02 3.8228E-07 2.3673E-07 1.4235E-08 1.1276E-08 - 8.9125E+02 2.6005E-07 1.6070E-07 9.8718E-09 7.3102E-09 - 1.0000E+03 1.7927E-07 1.0985E-07 6.5890E-09 4.8926E-09 - 1.1220E+03 1.2173E-07 7.3452E-08 4.3523E-09 3.2939E-09 - 1.2589E+03 8.3300E-08 4.9163E-08 2.8315E-09 2.1674E-09 - 1.4125E+03 5.6355E-08 3.3237E-08 1.8174E-09 1.3239E-09 - 1.5849E+03 3.8181E-08 2.2540E-08 1.1911E-09 9.2848E-10 - 1.7783E+03 2.5881E-08 1.5162E-08 8.2241E-10 6.4871E-10 - 1.9953E+03 1.7544E-08 1.0283E-08 5.5504E-10 4.0403E-10 - 2.2387E+03 1.1731E-08 6.8973E-09 3.5581E-10 2.7637E-10 - 2.5119E+03 7.7969E-09 4.6286E-09 2.3619E-10 1.8625E-10 - 2.8184E+03 5.2308E-09 3.1115E-09 1.6626E-10 1.1899E-10 - 3.1623E+03 3.5544E-09 2.0541E-09 1.1058E-10 7.4216E-11 - 3.5481E+03 2.3135E-09 1.3317E-09 7.5950E-11 5.0596E-11 - 3.9811E+03 1.5434E-09 8.8548E-10 4.5379E-11 3.3719E-11 - 4.4668E+03 1.0211E-09 5.8558E-10 2.8082E-11 2.2224E-11 - 5.0119E+03 6.7934E-10 3.8676E-10 2.0105E-11 1.4526E-11 - 5.6234E+03 4.5037E-10 2.5191E-10 1.3913E-11 9.0840E-12 - 6.3096E+03 2.9711E-10 1.6764E-10 9.0656E-12 6.4935E-12 - 7.0795E+03 1.9808E-10 1.1134E-10 5.7415E-12 4.2291E-12 - 7.9433E+03 1.3009E-10 7.2260E-11 3.7599E-12 2.5243E-12 - 8.9125E+03 8.5545E-11 4.6831E-11 2.4991E-12 1.5936E-12 - 1.0000E+04 5.6233E-11 3.1281E-11 1.6671E-12 1.1689E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0512E+04 1.0520E+04 5.1466E+03 4.8023E+03 - 1.1220E-01 9.3367E+03 9.3566E+03 4.5661E+03 4.2570E+03 - 1.2589E-01 8.2511E+03 8.2525E+03 4.0264E+03 3.7274E+03 - 1.4125E-01 7.2397E+03 7.2271E+03 3.5238E+03 3.2259E+03 - 1.5849E-01 6.2664E+03 6.2638E+03 3.0432E+03 2.7683E+03 - 1.7783E-01 5.3582E+03 5.3149E+03 2.6059E+03 2.3440E+03 - 1.9953E-01 4.5220E+03 4.4555E+03 2.2166E+03 1.9602E+03 - 2.2387E-01 3.7695E+03 3.7200E+03 1.8628E+03 1.6175E+03 - 2.5119E-01 3.0997E+03 3.0510E+03 1.5360E+03 1.3242E+03 - 2.8184E-01 2.5127E+03 2.4705E+03 1.2495E+03 1.0767E+03 - 3.1623E-01 2.0164E+03 1.9846E+03 1.0101E+03 8.5939E+02 - 3.5481E-01 1.6030E+03 1.5717E+03 8.1065E+02 6.8012E+02 - 3.9811E-01 1.2624E+03 1.2304E+03 6.4313E+02 5.3632E+02 - 4.4668E-01 9.8721E+02 9.6558E+02 5.0177E+02 4.1755E+02 - 5.0119E-01 7.6379E+02 7.4937E+02 3.8812E+02 3.1769E+02 - 5.6234E-01 5.8431E+02 5.7226E+02 2.9740E+02 2.3958E+02 - 6.3096E-01 4.4777E+02 4.3645E+02 2.2587E+02 1.8174E+02 - 7.0795E-01 3.4286E+02 3.3033E+02 1.6924E+02 1.3546E+02 - 7.9433E-01 2.5849E+02 2.4848E+02 1.2586E+02 9.9467E+01 - 8.9125E-01 1.9438E+02 1.8534E+02 9.4663E+01 7.3836E+01 - 1.0000E+00 1.4583E+02 1.3770E+02 6.9420E+01 5.4609E+01 - 1.1220E+00 1.0960E+02 1.0188E+02 5.0651E+01 3.9761E+01 - 1.2589E+00 8.2140E+01 7.6064E+01 3.6724E+01 2.8663E+01 - 1.4125E+00 6.1294E+01 5.5971E+01 2.6654E+01 2.0642E+01 - 1.5849E+00 4.5434E+01 4.0927E+01 1.9338E+01 1.4893E+01 - 1.7783E+00 3.3609E+01 3.0013E+01 1.3697E+01 1.0655E+01 - 1.9953E+00 2.4749E+01 2.1863E+01 9.6155E+00 7.6114E+00 - 2.2387E+00 1.8254E+01 1.5894E+01 6.8148E+00 5.3355E+00 - 2.5119E+00 1.3381E+01 1.1484E+01 4.7966E+00 3.7185E+00 - 2.8184E+00 9.7124E+00 8.2960E+00 3.3997E+00 2.6385E+00 - 3.1623E+00 7.0776E+00 5.9816E+00 2.3696E+00 1.8144E+00 - 3.5481E+00 5.1479E+00 4.2813E+00 1.6420E+00 1.2513E+00 - 3.9811E+00 3.7333E+00 3.0618E+00 1.1266E+00 8.5425E-01 - 4.4668E+00 2.6822E+00 2.1917E+00 7.7269E-01 5.8339E-01 - 5.0119E+00 1.9292E+00 1.5658E+00 5.3147E-01 4.0219E-01 - 5.6234E+00 1.3962E+00 1.1233E+00 3.5593E-01 2.7327E-01 - 6.3096E+00 9.9611E-01 7.9502E-01 2.3860E-01 1.8207E-01 - 7.0795E+00 7.1391E-01 5.6073E-01 1.6462E-01 1.2347E-01 - 7.9433E+00 5.1579E-01 3.9870E-01 1.1367E-01 8.4499E-02 - 8.9125E+00 3.7209E-01 2.8379E-01 7.4501E-02 5.6408E-02 - 1.0000E+01 2.6474E-01 2.0258E-01 4.9312E-02 3.7386E-02 - 1.1220E+01 1.8848E-01 1.4381E-01 3.2576E-02 2.4482E-02 - 1.2589E+01 1.3461E-01 1.0172E-01 2.1445E-02 1.6334E-02 - 1.4125E+01 9.5704E-02 7.2057E-02 1.4539E-02 1.0973E-02 - 1.5849E+01 6.7903E-02 5.1201E-02 9.8446E-03 7.4223E-03 - 1.7783E+01 4.8274E-02 3.6050E-02 6.3817E-03 4.9406E-03 - 1.9953E+01 3.4229E-02 2.5556E-02 4.1349E-03 3.1562E-03 - 2.2387E+01 2.4438E-02 1.8185E-02 2.7908E-03 2.2460E-03 - 2.5119E+01 1.7555E-02 1.2777E-02 1.8561E-03 1.5567E-03 - 2.8184E+01 1.2569E-02 9.0719E-03 1.2515E-03 1.0157E-03 - 3.1623E+01 8.8289E-03 6.4007E-03 8.5014E-04 6.6390E-04 - 3.5481E+01 6.2584E-03 4.5018E-03 5.6996E-04 4.4710E-04 - 3.9811E+01 4.4257E-03 3.1774E-03 3.7902E-04 3.0375E-04 - 4.4668E+01 3.1224E-03 2.2347E-03 2.4826E-04 2.0503E-04 - 5.0119E+01 2.2040E-03 1.5667E-03 1.6781E-04 1.3761E-04 - 5.6234E+01 1.5573E-03 1.0997E-03 1.1478E-04 9.2203E-05 - 6.3096E+01 1.0994E-03 7.6969E-04 7.6758E-05 6.2923E-05 - 7.0795E+01 7.7468E-04 5.4234E-04 5.1048E-05 4.2572E-05 - 7.9433E+01 5.4245E-04 3.8037E-04 3.5068E-05 2.8802E-05 - 8.9125E+01 3.8058E-04 2.6327E-04 2.3602E-05 1.9011E-05 - 1.0000E+02 2.6826E-04 1.8475E-04 1.5870E-05 1.2901E-05 - 1.1220E+02 1.8797E-04 1.2867E-04 1.0829E-05 8.8908E-06 - 1.2589E+02 1.3138E-04 9.0016E-05 7.4033E-06 6.0314E-06 - 1.4125E+02 9.1676E-05 6.2615E-05 4.9329E-06 4.0570E-06 - 1.5849E+02 6.4305E-05 4.3274E-05 3.3260E-06 2.7523E-06 - 1.7783E+02 4.5044E-05 3.0118E-05 2.2829E-06 1.8416E-06 - 1.9953E+02 3.1401E-05 2.0844E-05 1.5342E-06 1.2741E-06 - 2.2387E+02 2.1795E-05 1.4295E-05 1.0426E-06 8.9843E-07 - 2.5119E+02 1.5223E-05 1.0000E-05 6.9673E-07 5.8664E-07 - 2.8184E+02 1.0709E-05 6.9451E-06 4.7395E-07 3.8319E-07 - 3.1623E+02 7.3924E-06 4.8059E-06 3.3105E-07 2.6516E-07 - 3.5481E+02 5.1263E-06 3.3080E-06 2.2377E-07 1.7754E-07 - 3.9811E+02 3.5630E-06 2.2728E-06 1.4881E-07 1.2054E-07 - 4.4668E+02 2.4626E-06 1.5642E-06 9.9192E-08 8.1838E-08 - 5.0119E+02 1.6963E-06 1.0716E-06 6.7458E-08 5.3692E-08 - 5.6234E+02 1.1839E-06 7.3661E-07 4.6330E-08 3.6377E-08 - 6.3096E+02 8.1146E-07 5.0251E-07 3.1591E-08 2.4189E-08 - 7.0795E+02 5.5806E-07 3.4351E-07 2.0916E-08 1.6054E-08 - 7.9433E+02 3.8507E-07 2.3405E-07 1.3915E-08 1.0691E-08 - 8.9125E+02 2.6424E-07 1.6095E-07 9.4294E-09 7.1228E-09 - 1.0000E+03 1.8172E-07 1.0998E-07 6.1237E-09 4.8825E-09 - 1.1220E+03 1.2282E-07 7.3126E-08 4.1120E-09 3.1729E-09 - 1.2589E+03 8.3510E-08 4.9118E-08 2.8310E-09 2.1570E-09 - 1.4125E+03 5.7140E-08 3.3368E-08 1.9802E-09 1.4370E-09 - 1.5849E+03 3.8537E-08 2.2695E-08 1.3275E-09 9.2398E-10 - 1.7783E+03 2.5771E-08 1.5266E-08 8.5530E-10 5.9291E-10 - 1.9953E+03 1.7346E-08 1.0297E-08 5.5273E-10 4.0939E-10 - 2.2387E+03 1.1651E-08 6.8616E-09 3.6298E-10 2.7980E-10 - 2.5119E+03 7.8262E-09 4.5029E-09 2.2930E-10 1.8665E-10 - 2.8184E+03 5.2877E-09 2.9828E-09 1.5186E-10 1.1960E-10 - 3.1623E+03 3.5542E-09 2.0521E-09 1.1072E-10 7.7696E-11 - 3.5481E+03 2.3203E-09 1.3374E-09 7.5348E-11 5.1782E-11 - 3.9811E+03 1.5459E-09 8.8792E-10 5.0402E-11 3.3686E-11 - 4.4668E+03 1.0136E-09 5.8700E-10 3.1929E-11 2.1789E-11 - 5.0119E+03 6.7213E-10 3.8419E-10 2.1908E-11 1.4340E-11 - 5.6234E+03 4.4689E-10 2.5178E-10 1.3108E-11 8.5363E-12 - 6.3096E+03 2.9562E-10 1.6425E-10 9.2709E-12 5.9505E-12 - 7.0795E+03 1.9581E-10 1.0898E-10 5.5832E-12 4.2884E-12 - 7.9433E+03 1.2930E-10 7.1708E-11 3.7225E-12 2.7743E-12 - 8.9125E+03 8.5078E-11 4.6509E-11 2.5929E-12 1.7811E-12 - 1.0000E+04 5.6631E-11 3.0028E-11 1.6661E-12 1.2070E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0516E+04 1.0644E+04 5.1859E+03 4.8103E+03 - 1.1220E-01 9.3845E+03 9.4455E+03 4.6217E+03 4.2479E+03 - 1.2589E-01 8.2951E+03 8.3229E+03 4.0824E+03 3.7047E+03 - 1.4125E-01 7.2542E+03 7.2583E+03 3.5763E+03 3.2094E+03 - 1.5849E-01 6.2982E+03 6.2686E+03 3.0933E+03 2.7497E+03 - 1.7783E-01 5.3931E+03 5.3604E+03 2.6456E+03 2.3335E+03 - 1.9953E-01 4.5418E+03 4.5258E+03 2.2359E+03 1.9668E+03 - 2.2387E-01 3.7732E+03 3.7561E+03 1.8735E+03 1.6327E+03 - 2.5119E-01 3.1005E+03 3.0715E+03 1.5472E+03 1.3303E+03 - 2.8184E-01 2.5161E+03 2.4839E+03 1.2654E+03 1.0697E+03 - 3.1623E-01 2.0146E+03 1.9924E+03 1.0226E+03 8.5297E+02 - 3.5481E-01 1.6019E+03 1.5876E+03 8.1490E+02 6.7343E+02 - 3.9811E-01 1.2659E+03 1.2465E+03 6.4353E+02 5.3052E+02 - 4.4668E-01 9.8925E+02 9.7024E+02 5.0277E+02 4.1173E+02 - 5.0119E-01 7.6941E+02 7.4900E+02 3.8711E+02 3.1738E+02 - 5.6234E-01 5.9249E+02 5.7601E+02 2.9681E+02 2.4239E+02 - 6.3096E-01 4.4926E+02 4.3999E+02 2.2732E+02 1.8157E+02 - 7.0795E-01 3.4073E+02 3.3090E+02 1.7086E+02 1.3518E+02 - 7.9433E-01 2.5996E+02 2.4803E+02 1.2712E+02 1.0110E+02 - 8.9125E-01 1.9700E+02 1.8563E+02 9.3845E+01 7.4967E+01 - 1.0000E+00 1.4700E+02 1.3782E+02 6.9628E+01 5.4456E+01 - 1.1220E+00 1.1056E+02 1.0229E+02 5.0757E+01 3.9860E+01 - 1.2589E+00 8.2532E+01 7.5962E+01 3.7026E+01 2.9079E+01 - 1.4125E+00 6.1584E+01 5.6225E+01 2.6596E+01 2.0767E+01 - 1.5849E+00 4.5916E+01 4.1285E+01 1.8912E+01 1.4791E+01 - 1.7783E+00 3.3872E+01 3.0057E+01 1.3577E+01 1.0641E+01 - 1.9953E+00 2.4880E+01 2.1785E+01 9.8438E+00 7.5095E+00 - 2.2387E+00 1.8313E+01 1.5691E+01 6.9618E+00 5.2341E+00 - 2.5119E+00 1.3403E+01 1.1570E+01 4.9316E+00 3.7096E+00 - 2.8184E+00 9.8179E+00 8.4020E+00 3.4250E+00 2.6570E+00 - 3.1623E+00 7.0861E+00 5.9427E+00 2.3669E+00 1.8158E+00 - 3.5481E+00 5.1462E+00 4.2546E+00 1.6418E+00 1.2498E+00 - 3.9811E+00 3.7238E+00 3.0456E+00 1.1260E+00 8.6368E-01 - 4.4668E+00 2.6917E+00 2.1740E+00 7.7191E-01 5.9045E-01 - 5.0119E+00 1.9491E+00 1.5600E+00 5.3041E-01 4.0136E-01 - 5.6234E+00 1.4076E+00 1.1143E+00 3.5491E-01 2.6834E-01 - 6.3096E+00 1.0041E+00 7.9148E-01 2.3992E-01 1.8617E-01 - 7.0795E+00 7.1847E-01 5.6814E-01 1.6160E-01 1.2667E-01 - 7.9433E+00 5.1832E-01 4.0507E-01 1.0677E-01 8.4192E-02 - 8.9125E+00 3.7556E-01 2.8295E-01 7.2218E-02 5.6596E-02 - 1.0000E+01 2.6688E-01 2.0435E-01 5.0064E-02 3.7783E-02 - 1.1220E+01 1.8922E-01 1.4535E-01 3.3079E-02 2.5229E-02 - 1.2589E+01 1.3563E-01 1.0330E-01 2.1748E-02 1.6658E-02 - 1.4125E+01 9.6488E-02 7.2420E-02 1.4708E-02 1.1070E-02 - 1.5849E+01 6.8722E-02 5.0924E-02 9.8802E-03 7.4585E-03 - 1.7783E+01 4.8839E-02 3.6458E-02 6.5650E-03 5.0755E-03 - 1.9953E+01 3.4743E-02 2.5893E-02 4.2935E-03 3.5415E-03 - 2.2387E+01 2.4983E-02 1.8283E-02 2.8639E-03 2.2828E-03 - 2.5119E+01 1.7663E-02 1.3043E-02 1.9477E-03 1.4854E-03 - 2.8184E+01 1.2446E-02 9.2733E-03 1.3314E-03 1.0094E-03 - 3.1623E+01 8.8279E-03 6.4124E-03 8.4308E-04 6.7299E-04 - 3.5481E+01 6.2544E-03 4.5211E-03 5.6171E-04 4.5369E-04 - 3.9811E+01 4.4236E-03 3.1864E-03 3.7780E-04 3.0406E-04 - 4.4668E+01 3.1293E-03 2.2434E-03 2.5200E-04 2.0327E-04 - 5.0119E+01 2.2056E-03 1.5778E-03 1.6638E-04 1.3756E-04 - 5.6234E+01 1.5519E-03 1.1044E-03 1.1356E-04 9.1386E-05 - 6.3096E+01 1.0959E-03 7.7214E-04 7.7532E-05 6.0751E-05 - 7.0795E+01 7.7047E-04 5.4220E-04 5.1591E-05 4.1291E-05 - 7.9433E+01 5.4366E-04 3.8151E-04 3.4480E-05 2.8961E-05 - 8.9125E+01 3.8556E-04 2.6763E-04 2.3664E-05 1.9252E-05 - 1.0000E+02 2.6797E-04 1.8512E-04 1.6143E-05 1.2905E-05 - 1.1220E+02 1.8733E-04 1.2850E-04 1.0901E-05 8.8523E-06 - 1.2589E+02 1.3126E-04 8.9873E-05 7.3694E-06 6.0608E-06 - 1.4125E+02 9.2556E-05 6.2728E-05 5.0091E-06 4.0682E-06 - 1.5849E+02 6.4950E-05 4.3587E-05 3.3749E-06 2.7980E-06 - 1.7783E+02 4.5178E-05 3.0175E-05 2.2713E-06 1.9101E-06 - 1.9953E+02 3.1648E-05 2.0844E-05 1.5470E-06 1.2845E-06 - 2.2387E+02 2.1954E-05 1.4449E-05 1.0371E-06 8.7950E-07 - 2.5119E+02 1.5199E-05 1.0040E-05 7.0538E-07 5.7730E-07 - 2.8184E+02 1.0573E-05 6.9538E-06 4.8737E-07 3.9748E-07 - 3.1623E+02 7.3960E-06 4.7763E-06 3.3083E-07 2.6382E-07 - 3.5481E+02 5.1199E-06 3.2695E-06 2.2195E-07 1.7667E-07 - 3.9811E+02 3.5625E-06 2.2578E-06 1.5000E-07 1.1840E-07 - 4.4668E+02 2.4730E-06 1.5610E-06 1.0310E-07 7.9107E-08 - 5.0119E+02 1.7014E-06 1.0740E-06 6.7378E-08 5.2538E-08 - 5.6234E+02 1.1839E-06 7.3885E-07 4.5795E-08 3.6654E-08 - 6.3096E+02 8.1337E-07 5.0710E-07 3.0887E-08 2.4526E-08 - 7.0795E+02 5.5840E-07 3.4674E-07 2.0549E-08 1.6329E-08 - 7.9433E+02 3.8458E-07 2.3560E-07 1.3346E-08 1.0959E-08 - 8.9125E+02 2.6364E-07 1.6073E-07 9.3346E-09 7.5356E-09 - 1.0000E+03 1.8035E-07 1.1008E-07 6.3965E-09 4.8806E-09 - 1.1220E+03 1.2210E-07 7.3661E-08 4.3372E-09 3.2213E-09 - 1.2589E+03 8.3046E-08 4.9764E-08 2.8335E-09 2.2048E-09 - 1.4125E+03 5.6238E-08 3.3643E-08 1.8904E-09 1.4396E-09 - 1.5849E+03 3.8023E-08 2.2384E-08 1.2826E-09 9.3410E-10 - 1.7783E+03 2.5787E-08 1.4873E-08 8.2729E-10 6.0026E-10 - 1.9953E+03 1.7175E-08 1.0178E-08 5.4801E-10 4.2421E-10 - 2.2387E+03 1.1634E-08 6.8656E-09 3.6576E-10 2.7731E-10 - 2.5119E+03 7.7766E-09 4.5557E-09 2.3302E-10 1.9434E-10 - 2.8184E+03 5.2175E-09 3.0515E-09 1.5237E-10 1.2573E-10 - 3.1623E+03 3.5674E-09 2.0453E-09 1.0602E-10 7.5768E-11 - 3.5481E+03 2.3119E-09 1.3332E-09 7.1315E-11 4.9999E-11 - 3.9811E+03 1.5372E-09 9.0187E-10 4.6581E-11 3.3001E-11 - 4.4668E+03 1.0277E-09 5.9195E-10 2.9088E-11 2.2485E-11 - 5.0119E+03 6.7337E-10 3.9023E-10 1.8532E-11 1.5757E-11 - 5.6234E+03 4.4330E-10 2.5876E-10 1.4199E-11 9.7611E-12 - 6.3096E+03 2.9479E-10 1.6755E-10 8.3661E-12 6.2827E-12 - 7.0795E+03 1.9679E-10 1.0962E-10 5.8263E-12 3.8563E-12 - 7.9433E+03 1.3027E-10 7.2287E-11 4.0704E-12 2.3560E-12 - 8.9125E+03 8.5902E-11 4.5988E-11 2.3188E-12 1.5162E-12 - 1.0000E+04 5.5901E-11 2.9590E-11 1.5439E-12 1.0656E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0546E+04 1.0696E+04 5.2759E+03 4.7857E+03 - 1.1220E-01 9.3804E+03 9.4928E+03 4.6904E+03 4.2375E+03 - 1.2589E-01 8.2999E+03 8.3916E+03 4.1261E+03 3.6956E+03 - 1.4125E-01 7.2566E+03 7.3036E+03 3.5964E+03 3.1884E+03 - 1.5849E-01 6.2858E+03 6.3125E+03 3.1057E+03 2.7281E+03 - 1.7783E-01 5.3741E+03 5.4088E+03 2.6545E+03 2.3176E+03 - 1.9953E-01 4.5213E+03 4.5332E+03 2.2571E+03 1.9578E+03 - 2.2387E-01 3.7616E+03 3.7629E+03 1.8938E+03 1.6157E+03 - 2.5119E-01 3.0904E+03 3.0893E+03 1.5628E+03 1.3162E+03 - 2.8184E-01 2.5053E+03 2.5117E+03 1.2753E+03 1.0705E+03 - 3.1623E-01 2.0122E+03 2.0147E+03 1.0247E+03 8.5747E+02 - 3.5481E-01 1.5999E+03 1.6008E+03 8.1733E+02 6.7391E+02 - 3.9811E-01 1.2636E+03 1.2565E+03 6.4623E+02 5.2778E+02 - 4.4668E-01 9.9159E+02 9.7685E+02 5.0403E+02 4.1179E+02 - 5.0119E-01 7.6914E+02 7.5139E+02 3.9040E+02 3.1591E+02 - 5.6234E-01 5.8983E+02 5.7223E+02 2.9858E+02 2.4116E+02 - 6.3096E-01 4.4859E+02 4.3507E+02 2.2553E+02 1.8272E+02 - 7.0795E-01 3.4065E+02 3.2852E+02 1.7063E+02 1.3602E+02 - 7.9433E-01 2.5754E+02 2.4706E+02 1.2770E+02 1.0138E+02 - 8.9125E-01 1.9471E+02 1.8596E+02 9.3741E+01 7.4580E+01 - 1.0000E+00 1.4622E+02 1.3856E+02 6.9399E+01 5.4412E+01 - 1.1220E+00 1.0979E+02 1.0245E+02 5.0487E+01 3.9503E+01 - 1.2589E+00 8.2514E+01 7.5731E+01 3.6706E+01 2.8931E+01 - 1.4125E+00 6.1596E+01 5.5782E+01 2.6648E+01 2.1007E+01 - 1.5849E+00 4.5670E+01 4.0938E+01 1.9181E+01 1.5027E+01 - 1.7783E+00 3.3754E+01 3.0051E+01 1.3685E+01 1.0738E+01 - 1.9953E+00 2.4830E+01 2.1881E+01 9.6990E+00 7.5601E+00 - 2.2387E+00 1.8261E+01 1.6026E+01 6.8835E+00 5.3300E+00 - 2.5119E+00 1.3426E+01 1.1566E+01 4.9232E+00 3.7934E+00 - 2.8184E+00 9.7329E+00 8.2031E+00 3.4380E+00 2.6627E+00 - 3.1623E+00 7.0842E+00 5.9558E+00 2.3851E+00 1.8339E+00 - 3.5481E+00 5.1543E+00 4.2783E+00 1.6381E+00 1.2632E+00 - 3.9811E+00 3.7556E+00 3.0703E+00 1.1303E+00 8.6683E-01 - 4.4668E+00 2.7088E+00 2.1819E+00 7.8084E-01 5.8506E-01 - 5.0119E+00 1.9477E+00 1.5645E+00 5.3013E-01 3.9063E-01 - 5.6234E+00 1.4002E+00 1.1232E+00 3.6318E-01 2.6878E-01 - 6.3096E+00 1.0063E+00 7.9284E-01 2.3967E-01 1.8420E-01 - 7.0795E+00 7.2493E-01 5.6142E-01 1.5840E-01 1.2435E-01 - 7.9433E+00 5.2270E-01 4.0285E-01 1.0903E-01 8.4283E-02 - 8.9125E+00 3.7430E-01 2.8827E-01 7.4616E-02 5.6420E-02 - 1.0000E+01 2.6491E-01 2.0320E-01 4.9448E-02 3.7340E-02 - 1.1220E+01 1.8903E-01 1.4515E-01 3.3128E-02 2.5028E-02 - 1.2589E+01 1.3604E-01 1.0360E-01 2.2024E-02 1.6600E-02 - 1.4125E+01 9.6582E-02 7.2863E-02 1.4493E-02 1.1130E-02 - 1.5849E+01 6.8408E-02 5.1716E-02 9.7428E-03 7.2987E-03 - 1.7783E+01 4.8991E-02 3.6955E-02 6.5503E-03 4.8228E-03 - 1.9953E+01 3.4932E-02 2.5992E-02 4.2306E-03 3.3684E-03 - 2.2387E+01 2.4799E-02 1.8721E-02 2.8312E-03 2.2910E-03 - 2.5119E+01 1.7792E-02 1.3345E-02 1.9229E-03 1.5053E-03 - 2.8184E+01 1.2556E-02 9.2273E-03 1.2498E-03 1.0214E-03 - 3.1623E+01 8.8032E-03 6.4223E-03 8.4588E-04 6.6563E-04 - 3.5481E+01 6.2368E-03 4.5299E-03 5.6692E-04 4.4209E-04 - 3.9811E+01 4.4127E-03 3.1867E-03 3.8312E-04 3.0327E-04 - 4.4668E+01 3.1165E-03 2.2370E-03 2.5264E-04 2.0372E-04 - 5.0119E+01 2.2044E-03 1.5715E-03 1.6949E-04 1.3425E-04 - 5.6234E+01 1.5576E-03 1.1027E-03 1.1503E-04 9.2225E-05 - 6.3096E+01 1.0941E-03 7.6940E-04 7.6856E-05 6.3278E-05 - 7.0795E+01 7.7235E-04 5.3869E-04 5.0855E-05 4.2085E-05 - 7.9433E+01 5.4489E-04 3.7899E-04 3.4646E-05 2.8280E-05 - 8.9125E+01 3.8173E-04 2.6503E-04 2.3800E-05 1.8670E-05 - 1.0000E+02 2.6742E-04 1.8551E-04 1.5947E-05 1.2814E-05 - 1.1220E+02 1.8826E-04 1.2883E-04 1.0807E-05 8.6421E-06 - 1.2589E+02 1.3182E-04 8.9564E-05 7.3366E-06 5.9800E-06 - 1.4125E+02 9.2078E-05 6.2393E-05 4.9291E-06 4.0298E-06 - 1.5849E+02 6.4498E-05 4.3339E-05 3.3834E-06 2.7222E-06 - 1.7783E+02 4.5058E-05 2.9967E-05 2.2462E-06 1.8235E-06 - 1.9953E+02 3.1369E-05 2.0839E-05 1.5128E-06 1.2221E-06 - 2.2387E+02 2.1973E-05 1.4512E-05 1.0727E-06 8.6181E-07 - 2.5119E+02 1.5356E-05 1.0053E-05 7.3229E-07 5.7935E-07 - 2.8184E+02 1.0621E-05 6.9109E-06 4.9189E-07 3.7809E-07 - 3.1623E+02 7.4039E-06 4.7655E-06 3.3560E-07 2.5634E-07 - 3.5481E+02 5.1339E-06 3.2874E-06 2.2321E-07 1.7590E-07 - 3.9811E+02 3.5802E-06 2.2765E-06 1.4948E-07 1.1925E-07 - 4.4668E+02 2.4781E-06 1.5595E-06 1.0227E-07 7.9919E-08 - 5.0119E+02 1.7048E-06 1.0721E-06 6.8446E-08 5.3378E-08 - 5.6234E+02 1.1840E-06 7.4092E-07 4.6743E-08 3.6359E-08 - 6.3096E+02 8.1697E-07 5.0474E-07 3.1422E-08 2.4715E-08 - 7.0795E+02 5.6169E-07 3.4541E-07 2.0650E-08 1.6387E-08 - 7.9433E+02 3.8146E-07 2.3615E-07 1.4128E-08 1.0928E-08 - 8.9125E+02 2.6079E-07 1.6050E-07 9.6077E-09 7.1465E-09 - 1.0000E+03 1.8015E-07 1.0826E-07 6.2352E-09 4.8306E-09 - 1.1220E+03 1.2121E-07 7.3423E-08 4.0285E-09 3.2706E-09 - 1.2589E+03 8.2496E-08 5.0225E-08 2.7870E-09 2.2140E-09 - 1.4125E+03 5.6297E-08 3.3904E-08 1.9453E-09 1.4565E-09 - 1.5849E+03 3.7930E-08 2.2665E-08 1.3090E-09 9.5610E-10 - 1.7783E+03 2.5390E-08 1.5276E-08 8.8568E-10 6.4007E-10 - 1.9953E+03 1.7188E-08 1.0358E-08 5.8182E-10 4.2980E-10 - 2.2387E+03 1.1521E-08 6.8173E-09 3.7838E-10 2.6839E-10 - 2.5119E+03 7.7509E-09 4.5152E-09 2.4988E-10 1.8464E-10 - 2.8184E+03 5.2216E-09 3.0497E-09 1.7002E-10 1.2201E-10 - 3.1623E+03 3.5376E-09 2.0591E-09 1.0455E-10 7.7923E-11 - 3.5481E+03 2.2987E-09 1.3529E-09 7.0524E-11 5.2037E-11 - 3.9811E+03 1.5476E-09 8.9734E-10 4.6179E-11 3.3985E-11 - 4.4668E+03 1.0274E-09 5.9013E-10 2.9483E-11 2.1478E-11 - 5.0119E+03 6.7684E-10 3.8859E-10 1.9920E-11 1.3482E-11 - 5.6234E+03 4.4502E-10 2.5288E-10 1.3784E-11 8.2894E-12 - 6.3096E+03 2.9839E-10 1.6772E-10 8.6200E-12 5.6748E-12 - 7.0795E+03 1.9553E-10 1.0977E-10 5.8206E-12 3.8079E-12 - 7.9433E+03 1.2859E-10 7.2031E-11 3.9486E-12 2.3990E-12 - 8.9125E+03 8.5134E-11 4.7333E-11 2.5327E-12 1.5217E-12 - 1.0000E+04 5.5397E-11 3.0970E-11 1.6091E-12 1.1079E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0535E+04 1.0802E+04 5.3099E+03 4.7781E+03 - 1.1220E-01 9.3701E+03 9.5797E+03 4.7115E+03 4.2221E+03 - 1.2589E-01 8.2939E+03 8.4372E+03 4.1765E+03 3.6935E+03 - 1.4125E-01 7.2726E+03 7.3809E+03 3.6561E+03 3.2017E+03 - 1.5849E-01 6.3049E+03 6.3846E+03 3.1439E+03 2.7362E+03 - 1.7783E-01 5.3916E+03 5.4295E+03 2.6805E+03 2.3140E+03 - 1.9953E-01 4.5453E+03 4.5564E+03 2.2729E+03 1.9391E+03 - 2.2387E-01 3.7740E+03 3.7869E+03 1.9051E+03 1.6081E+03 - 2.5119E-01 3.0944E+03 3.1192E+03 1.5781E+03 1.3187E+03 - 2.8184E-01 2.5152E+03 2.5301E+03 1.2926E+03 1.0697E+03 - 3.1623E-01 2.0198E+03 2.0196E+03 1.0421E+03 8.5618E+02 - 3.5481E-01 1.6095E+03 1.5950E+03 8.2678E+02 6.7698E+02 - 3.9811E-01 1.2744E+03 1.2556E+03 6.5179E+02 5.3029E+02 - 4.4668E-01 9.9150E+02 9.8244E+02 5.0848E+02 4.1030E+02 - 5.0119E-01 7.6532E+02 7.5826E+02 3.9059E+02 3.1642E+02 - 5.6234E-01 5.9024E+02 5.7956E+02 2.9960E+02 2.4166E+02 - 6.3096E-01 4.5174E+02 4.4025E+02 2.2845E+02 1.8344E+02 - 7.0795E-01 3.4235E+02 3.3005E+02 1.7108E+02 1.3716E+02 - 7.9433E-01 2.5794E+02 2.4723E+02 1.2736E+02 1.0119E+02 - 8.9125E-01 1.9451E+02 1.8672E+02 9.3933E+01 7.4551E+01 - 1.0000E+00 1.4706E+02 1.3882E+02 6.9483E+01 5.4811E+01 - 1.1220E+00 1.1039E+02 1.0378E+02 5.0777E+01 4.0089E+01 - 1.2589E+00 8.2656E+01 7.6844E+01 3.6907E+01 2.9204E+01 - 1.4125E+00 6.1829E+01 5.6600E+01 2.6784E+01 2.1165E+01 - 1.5849E+00 4.6154E+01 4.1717E+01 1.9237E+01 1.5223E+01 - 1.7783E+00 3.4178E+01 3.0222E+01 1.3824E+01 1.0768E+01 - 1.9953E+00 2.5032E+01 2.1877E+01 9.9887E+00 7.5801E+00 - 2.2387E+00 1.8208E+01 1.5928E+01 6.9978E+00 5.3849E+00 - 2.5119E+00 1.3288E+01 1.1508E+01 4.9202E+00 3.8180E+00 - 2.8184E+00 9.7325E+00 8.2838E+00 3.4864E+00 2.6244E+00 - 3.1623E+00 7.1535E+00 5.9542E+00 2.3736E+00 1.8253E+00 - 3.5481E+00 5.1683E+00 4.2918E+00 1.6357E+00 1.2556E+00 - 3.9811E+00 3.7240E+00 3.0666E+00 1.1324E+00 8.5770E-01 - 4.4668E+00 2.6896E+00 2.1761E+00 7.6955E-01 5.9029E-01 - 5.0119E+00 1.9450E+00 1.5580E+00 5.1872E-01 4.0424E-01 - 5.6234E+00 1.3954E+00 1.1220E+00 3.5470E-01 2.7451E-01 - 6.3096E+00 9.9772E-01 7.9922E-01 2.4199E-01 1.8428E-01 - 7.0795E+00 7.1870E-01 5.6459E-01 1.6400E-01 1.2223E-01 - 7.9433E+00 5.1614E-01 4.0150E-01 1.0686E-01 8.3578E-02 - 8.9125E+00 3.6873E-01 2.8540E-01 6.9662E-02 5.5586E-02 - 1.0000E+01 2.6431E-01 2.0304E-01 4.9570E-02 3.7161E-02 - 1.1220E+01 1.8774E-01 1.4323E-01 3.2967E-02 2.4660E-02 - 1.2589E+01 1.3403E-01 1.0139E-01 2.1812E-02 1.6750E-02 - 1.4125E+01 9.5997E-02 7.1691E-02 1.4529E-02 1.1230E-02 - 1.5849E+01 6.8767E-02 5.0604E-02 9.7743E-03 7.4478E-03 - 1.7783E+01 4.9056E-02 3.6329E-02 6.6149E-03 5.0228E-03 - 1.9953E+01 3.4794E-02 2.5629E-02 4.3114E-03 3.3128E-03 - 2.2387E+01 2.4817E-02 1.8053E-02 2.8332E-03 2.2473E-03 - 2.5119E+01 1.7582E-02 1.2764E-02 1.9841E-03 1.5240E-03 - 2.8184E+01 1.2422E-02 9.0841E-03 1.3136E-03 9.9862E-04 - 3.1623E+01 8.8316E-03 6.4055E-03 8.4577E-04 6.7044E-04 - 3.5481E+01 6.2520E-03 4.5166E-03 5.6225E-04 4.5026E-04 - 3.9811E+01 4.4202E-03 3.1731E-03 3.7889E-04 3.0609E-04 - 4.4668E+01 3.1251E-03 2.2348E-03 2.5273E-04 2.0459E-04 - 5.0119E+01 2.1922E-03 1.5699E-03 1.6718E-04 1.3674E-04 - 5.6234E+01 1.5509E-03 1.1058E-03 1.1327E-04 9.2957E-05 - 6.3096E+01 1.0965E-03 7.7747E-04 7.7060E-05 6.1618E-05 - 7.0795E+01 7.6996E-04 5.4266E-04 5.2154E-05 4.1328E-05 - 7.9433E+01 5.4189E-04 3.7552E-04 3.5836E-05 2.8985E-05 - 8.9125E+01 3.8084E-04 2.6240E-04 2.4176E-05 1.9702E-05 - 1.0000E+02 2.6881E-04 1.8423E-04 1.5869E-05 1.3129E-05 - 1.1220E+02 1.8829E-04 1.2819E-04 1.0890E-05 8.8692E-06 - 1.2589E+02 1.3157E-04 8.9735E-05 7.2942E-06 5.9466E-06 - 1.4125E+02 9.2188E-05 6.2361E-05 4.9098E-06 3.9837E-06 - 1.5849E+02 6.4429E-05 4.3196E-05 3.3943E-06 2.7615E-06 - 1.7783E+02 4.4984E-05 2.9886E-05 2.3104E-06 1.8959E-06 - 1.9953E+02 3.1337E-05 2.0695E-05 1.5539E-06 1.2854E-06 - 2.2387E+02 2.1853E-05 1.4395E-05 1.0323E-06 8.8525E-07 - 2.5119E+02 1.5276E-05 9.9783E-06 6.9288E-07 5.9270E-07 - 2.8184E+02 1.0644E-05 6.8848E-06 4.9820E-07 3.9152E-07 - 3.1623E+02 7.3950E-06 4.7643E-06 3.3569E-07 2.6141E-07 - 3.5481E+02 5.1082E-06 3.2664E-06 2.2765E-07 1.7868E-07 - 3.9811E+02 3.5351E-06 2.2722E-06 1.5240E-07 1.2349E-07 - 4.4668E+02 2.4682E-06 1.5688E-06 1.0153E-07 8.2374E-08 - 5.0119E+02 1.7101E-06 1.0712E-06 6.9156E-08 5.4606E-08 - 5.6234E+02 1.1764E-06 7.3686E-07 4.6256E-08 3.7318E-08 - 6.3096E+02 8.0702E-07 5.0284E-07 3.0386E-08 2.4737E-08 - 7.0795E+02 5.5047E-07 3.4277E-07 2.0865E-08 1.5614E-08 - 7.9433E+02 3.7698E-07 2.3459E-07 1.4492E-08 1.0450E-08 - 8.9125E+02 2.5968E-07 1.5991E-07 9.7443E-09 7.4937E-09 - 1.0000E+03 1.7936E-07 1.0875E-07 6.2711E-09 4.8958E-09 - 1.1220E+03 1.2209E-07 7.2944E-08 4.2079E-09 3.1148E-09 - 1.2589E+03 8.3469E-08 4.8976E-08 2.6977E-09 2.1020E-09 - 1.4125E+03 5.6205E-08 3.3043E-08 1.8094E-09 1.2826E-09 - 1.5849E+03 3.7781E-08 2.2084E-08 1.2672E-09 8.8707E-10 - 1.7783E+03 2.5484E-08 1.4817E-08 8.9075E-10 6.6733E-10 - 1.9953E+03 1.7280E-08 1.0181E-08 5.7101E-10 4.2307E-10 - 2.2387E+03 1.1529E-08 6.8164E-09 3.9225E-10 2.6532E-10 - 2.5119E+03 7.7739E-09 4.5310E-09 2.4653E-10 1.5562E-10 - 2.8184E+03 5.2853E-09 3.0501E-09 1.5495E-10 1.0852E-10 - 3.1623E+03 3.5890E-09 2.0600E-09 1.0136E-10 7.7789E-11 - 3.5481E+03 2.3381E-09 1.3627E-09 6.6738E-11 5.1002E-11 - 3.9811E+03 1.5532E-09 8.9670E-10 4.4878E-11 3.5300E-11 - 4.4668E+03 1.0351E-09 5.8411E-10 3.0678E-11 2.3550E-11 - 5.0119E+03 6.8337E-10 3.8571E-10 2.1607E-11 1.5707E-11 - 5.6234E+03 4.4900E-10 2.5747E-10 1.5294E-11 1.0122E-11 - 6.3096E+03 2.9604E-10 1.6620E-10 8.6397E-12 6.0459E-12 - 7.0795E+03 1.9365E-10 1.0881E-10 5.4546E-12 4.0684E-12 - 7.9433E+03 1.2915E-10 7.1179E-11 3.6520E-12 2.4280E-12 - 8.9125E+03 8.5675E-11 4.7566E-11 2.3477E-12 1.6376E-12 - 1.0000E+04 5.6376E-11 3.1955E-11 1.6017E-12 9.9349E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0589E+04 1.0806E+04 5.3502E+03 4.7741E+03 - 1.1220E-01 9.4234E+03 9.5982E+03 4.7503E+03 4.2379E+03 - 1.2589E-01 8.3245E+03 8.4592E+03 4.2028E+03 3.7100E+03 - 1.4125E-01 7.2734E+03 7.3983E+03 3.6793E+03 3.2056E+03 - 1.5849E-01 6.3098E+03 6.4184E+03 3.1652E+03 2.7242E+03 - 1.7783E-01 5.3994E+03 5.4614E+03 2.6963E+03 2.3050E+03 - 1.9953E-01 4.5388E+03 4.5801E+03 2.2838E+03 1.9339E+03 - 2.2387E-01 3.7719E+03 3.8050E+03 1.9179E+03 1.6006E+03 - 2.5119E-01 3.0956E+03 3.1251E+03 1.5879E+03 1.3169E+03 - 2.8184E-01 2.5107E+03 2.5360E+03 1.2931E+03 1.0702E+03 - 3.1623E-01 2.0237E+03 2.0323E+03 1.0409E+03 8.5546E+02 - 3.5481E-01 1.6083E+03 1.6084E+03 8.3027E+02 6.7452E+02 - 3.9811E-01 1.2676E+03 1.2611E+03 6.5126E+02 5.2822E+02 - 4.4668E-01 9.9331E+02 9.8139E+02 5.0797E+02 4.0953E+02 - 5.0119E-01 7.6813E+02 7.5819E+02 3.9612E+02 3.1410E+02 - 5.6234E-01 5.9243E+02 5.8110E+02 3.0352E+02 2.4004E+02 - 6.3096E-01 4.5235E+02 4.4267E+02 2.2836E+02 1.8208E+02 - 7.0795E-01 3.4322E+02 3.3189E+02 1.7054E+02 1.3819E+02 - 7.9433E-01 2.6023E+02 2.4824E+02 1.2730E+02 1.0203E+02 - 8.9125E-01 1.9597E+02 1.8635E+02 9.4429E+01 7.4604E+01 - 1.0000E+00 1.4773E+02 1.3902E+02 6.9690E+01 5.4808E+01 - 1.1220E+00 1.1072E+02 1.0390E+02 5.0763E+01 4.0063E+01 - 1.2589E+00 8.2823E+01 7.6905E+01 3.6721E+01 2.9008E+01 - 1.4125E+00 6.2063E+01 5.6490E+01 2.6608E+01 2.0862E+01 - 1.5849E+00 4.5843E+01 4.1600E+01 1.9302E+01 1.5017E+01 - 1.7783E+00 3.3877E+01 3.0313E+01 1.3847E+01 1.0675E+01 - 1.9953E+00 2.5130E+01 2.2088E+01 9.8700E+00 7.5909E+00 - 2.2387E+00 1.8436E+01 1.5996E+01 7.0095E+00 5.4246E+00 - 2.5119E+00 1.3518E+01 1.1568E+01 4.9060E+00 3.8251E+00 - 2.8184E+00 9.8118E+00 8.3883E+00 3.4806E+00 2.6526E+00 - 3.1623E+00 7.0866E+00 5.9676E+00 2.3780E+00 1.8260E+00 - 3.5481E+00 5.1473E+00 4.2813E+00 1.6419E+00 1.2636E+00 - 3.9811E+00 3.7362E+00 3.0582E+00 1.1262E+00 8.6448E-01 - 4.4668E+00 2.7177E+00 2.1963E+00 7.6580E-01 5.8411E-01 - 5.0119E+00 1.9588E+00 1.5650E+00 5.1873E-01 3.9885E-01 - 5.6234E+00 1.4084E+00 1.1179E+00 3.5373E-01 2.6723E-01 - 6.3096E+00 1.0138E+00 8.0020E-01 2.4233E-01 1.8357E-01 - 7.0795E+00 7.2173E-01 5.6579E-01 1.6379E-01 1.2632E-01 - 7.9433E+00 5.1366E-01 4.0052E-01 1.0968E-01 8.5572E-02 - 8.9125E+00 3.6702E-01 2.8561E-01 7.2799E-02 5.6852E-02 - 1.0000E+01 2.6348E-01 2.0370E-01 4.9091E-02 3.7468E-02 - 1.1220E+01 1.8815E-01 1.4450E-01 3.2785E-02 2.5053E-02 - 1.2589E+01 1.3441E-01 1.0225E-01 2.2195E-02 1.6498E-02 - 1.4125E+01 9.6029E-02 7.2745E-02 1.4702E-02 1.0992E-02 - 1.5849E+01 6.8496E-02 5.1652E-02 9.6041E-03 7.3802E-03 - 1.7783E+01 4.8698E-02 3.6366E-02 6.3552E-03 5.0258E-03 - 1.9953E+01 3.4502E-02 2.5652E-02 4.3102E-03 3.4051E-03 - 2.2387E+01 2.4647E-02 1.8232E-02 2.9108E-03 2.2384E-03 - 2.5119E+01 1.7737E-02 1.2906E-02 1.9152E-03 1.4492E-03 - 2.8184E+01 1.2507E-02 9.1717E-03 1.2864E-03 9.7587E-04 - 3.1623E+01 8.8263E-03 6.4012E-03 8.5007E-04 6.6819E-04 - 3.5481E+01 6.2437E-03 4.5040E-03 5.6423E-04 4.4972E-04 - 3.9811E+01 4.4327E-03 3.1771E-03 3.7680E-04 3.0199E-04 - 4.4668E+01 3.1438E-03 2.2462E-03 2.5327E-04 2.0149E-04 - 5.0119E+01 2.2143E-03 1.5823E-03 1.7202E-04 1.3601E-04 - 5.6234E+01 1.5596E-03 1.1148E-03 1.1647E-04 9.1674E-05 - 6.3096E+01 1.0929E-03 7.8481E-04 7.8492E-05 6.2000E-05 - 7.0795E+01 7.6722E-04 5.4928E-04 5.1367E-05 4.2057E-05 - 7.9433E+01 5.3942E-04 3.8000E-04 3.4030E-05 2.8483E-05 - 8.9125E+01 3.7948E-04 2.6410E-04 2.2928E-05 1.9366E-05 - 1.0000E+02 2.6833E-04 1.8568E-04 1.5887E-05 1.2833E-05 - 1.1220E+02 1.8755E-04 1.2904E-04 1.0783E-05 8.7384E-06 - 1.2589E+02 1.3119E-04 8.9470E-05 7.2982E-06 5.9218E-06 - 1.4125E+02 9.1587E-05 6.2058E-05 4.9507E-06 3.9824E-06 - 1.5849E+02 6.4333E-05 4.3339E-05 3.3943E-06 2.7932E-06 - 1.7783E+02 4.4994E-05 2.9979E-05 2.3200E-06 1.8980E-06 - 1.9953E+02 3.1434E-05 2.0726E-05 1.5354E-06 1.2662E-06 - 2.2387E+02 2.1930E-05 1.4424E-05 1.0033E-06 8.8425E-07 - 2.5119E+02 1.5117E-05 9.9869E-06 6.7485E-07 5.7229E-07 - 2.8184E+02 1.0508E-05 6.9532E-06 4.7359E-07 3.7404E-07 - 3.1623E+02 7.3969E-06 4.7932E-06 3.2925E-07 2.6535E-07 - 3.5481E+02 5.1233E-06 3.2846E-06 2.2674E-07 1.8017E-07 - 3.9811E+02 3.5501E-06 2.2570E-06 1.5220E-07 1.2071E-07 - 4.4668E+02 2.4520E-06 1.5607E-06 1.0287E-07 8.0486E-08 - 5.0119E+02 1.6988E-06 1.0684E-06 6.7101E-08 5.5016E-08 - 5.6234E+02 1.1830E-06 7.3879E-07 4.6009E-08 3.6602E-08 - 6.3096E+02 8.1385E-07 5.0673E-07 3.1442E-08 2.4641E-08 - 7.0795E+02 5.5506E-07 3.4348E-07 2.1066E-08 1.6609E-08 - 7.9433E+02 3.8029E-07 2.3374E-07 1.4319E-08 1.0839E-08 - 8.9125E+02 2.6267E-07 1.6040E-07 9.5009E-09 7.2453E-09 - 1.0000E+03 1.8086E-07 1.0928E-07 6.4829E-09 4.8964E-09 - 1.1220E+03 1.2178E-07 7.3806E-08 4.1612E-09 3.2382E-09 - 1.2589E+03 8.2685E-08 4.9769E-08 2.7752E-09 2.1317E-09 - 1.4125E+03 5.5910E-08 3.3559E-08 1.8654E-09 1.4029E-09 - 1.5849E+03 3.7828E-08 2.2563E-08 1.1962E-09 9.9546E-10 - 1.7783E+03 2.5581E-08 1.5082E-08 7.5872E-10 6.7290E-10 - 1.9953E+03 1.7464E-08 1.0195E-08 5.6116E-10 4.3802E-10 - 2.2387E+03 1.1829E-08 6.8280E-09 3.7679E-10 2.7488E-10 - 2.5119E+03 7.8832E-09 4.5777E-09 2.2685E-10 1.7813E-10 - 2.8184E+03 5.1642E-09 3.0105E-09 1.4349E-10 1.2394E-10 - 3.1623E+03 3.5470E-09 2.0414E-09 1.0270E-10 7.6140E-11 - 3.5481E+03 2.3158E-09 1.3328E-09 6.9183E-11 5.1652E-11 - 3.9811E+03 1.5343E-09 8.8213E-10 4.8854E-11 3.3113E-11 - 4.4668E+03 1.0192E-09 5.8486E-10 2.9652E-11 1.9265E-11 - 5.0119E+03 6.7517E-10 3.8693E-10 1.9405E-11 1.3105E-11 - 5.6234E+03 4.4603E-10 2.5817E-10 1.3704E-11 9.3188E-12 - 6.3096E+03 2.9712E-10 1.6704E-10 8.4275E-12 5.5756E-12 - 7.0795E+03 1.9594E-10 1.0943E-10 5.6381E-12 3.9880E-12 - 7.9433E+03 1.2857E-10 7.2230E-11 3.4275E-12 2.5483E-12 - 8.9125E+03 8.4270E-11 4.7020E-11 2.1507E-12 1.5248E-12 - 1.0000E+04 5.5669E-11 3.0555E-11 1.5666E-12 9.8193E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0496E+04 1.0823E+04 5.3179E+03 4.7661E+03 - 1.1220E-01 9.3655E+03 9.6038E+03 4.7390E+03 4.2149E+03 - 1.2589E-01 8.2945E+03 8.4562E+03 4.1736E+03 3.6875E+03 - 1.4125E-01 7.2669E+03 7.3736E+03 3.6517E+03 3.1907E+03 - 1.5849E-01 6.2936E+03 6.3681E+03 3.1665E+03 2.7323E+03 - 1.7783E-01 5.3788E+03 5.4426E+03 2.7093E+03 2.3078E+03 - 1.9953E-01 4.5325E+03 4.5887E+03 2.2924E+03 1.9295E+03 - 2.2387E-01 3.7665E+03 3.7952E+03 1.9167E+03 1.6017E+03 - 2.5119E-01 3.0916E+03 3.1070E+03 1.5801E+03 1.3158E+03 - 2.8184E-01 2.5088E+03 2.5241E+03 1.2931E+03 1.0663E+03 - 3.1623E-01 2.0213E+03 2.0312E+03 1.0477E+03 8.5343E+02 - 3.5481E-01 1.6093E+03 1.6155E+03 8.3244E+02 6.7511E+02 - 3.9811E-01 1.2710E+03 1.2647E+03 6.4895E+02 5.3176E+02 - 4.4668E-01 9.9275E+02 9.7953E+02 5.0622E+02 4.1348E+02 - 5.0119E-01 7.6973E+02 7.5413E+02 3.9204E+02 3.1462E+02 - 5.6234E-01 5.9333E+02 5.7996E+02 3.0068E+02 2.4088E+02 - 6.3096E-01 4.5329E+02 4.4183E+02 2.2847E+02 1.8178E+02 - 7.0795E-01 3.4290E+02 3.3340E+02 1.7142E+02 1.3578E+02 - 7.9433E-01 2.5850E+02 2.4814E+02 1.2724E+02 1.0081E+02 - 8.9125E-01 1.9513E+02 1.8363E+02 9.4255E+01 7.4139E+01 - 1.0000E+00 1.4631E+02 1.3829E+02 6.9318E+01 5.4570E+01 - 1.1220E+00 1.1002E+02 1.0297E+02 5.0515E+01 3.9950E+01 - 1.2589E+00 8.2337E+01 7.5892E+01 3.6948E+01 2.8996E+01 - 1.4125E+00 6.1511E+01 5.6033E+01 2.6698E+01 2.0822E+01 - 1.5849E+00 4.6035E+01 4.1009E+01 1.9154E+01 1.5026E+01 - 1.7783E+00 3.4003E+01 2.9920E+01 1.3800E+01 1.0676E+01 - 1.9953E+00 2.4958E+01 2.2067E+01 9.8074E+00 7.6061E+00 - 2.2387E+00 1.8278E+01 1.6029E+01 6.9476E+00 5.3203E+00 - 2.5119E+00 1.3423E+01 1.1480E+01 4.8831E+00 3.7311E+00 - 2.8184E+00 9.7820E+00 8.3104E+00 3.4213E+00 2.6621E+00 - 3.1623E+00 7.1019E+00 5.9665E+00 2.3689E+00 1.8131E+00 - 3.5481E+00 5.1725E+00 4.2941E+00 1.6248E+00 1.2511E+00 - 3.9811E+00 3.7484E+00 3.0769E+00 1.1241E+00 8.6404E-01 - 4.4668E+00 2.6945E+00 2.1983E+00 7.7450E-01 5.8831E-01 - 5.0119E+00 1.9422E+00 1.5673E+00 5.3031E-01 3.9524E-01 - 5.6234E+00 1.3986E+00 1.1224E+00 3.6002E-01 2.7030E-01 - 6.3096E+00 1.0028E+00 8.0432E-01 2.4372E-01 1.8257E-01 - 7.0795E+00 7.1921E-01 5.7596E-01 1.6394E-01 1.2519E-01 - 7.9433E+00 5.1569E-01 4.0674E-01 1.1146E-01 8.4081E-02 - 8.9125E+00 3.7244E-01 2.8559E-01 7.5401E-02 5.6593E-02 - 1.0000E+01 2.6528E-01 2.0284E-01 4.9484E-02 3.7556E-02 - 1.1220E+01 1.9010E-01 1.4383E-01 3.2679E-02 2.4982E-02 - 1.2589E+01 1.3544E-01 1.0146E-01 2.1352E-02 1.6543E-02 - 1.4125E+01 9.5986E-02 7.1948E-02 1.4479E-02 1.1261E-02 - 1.5849E+01 6.8028E-02 5.1076E-02 9.5819E-03 7.6254E-03 - 1.7783E+01 4.8412E-02 3.6491E-02 6.3090E-03 4.9565E-03 - 1.9953E+01 3.4653E-02 2.5846E-02 4.3510E-03 3.2180E-03 - 2.2387E+01 2.4758E-02 1.8191E-02 2.9336E-03 2.1749E-03 - 2.5119E+01 1.7758E-02 1.2904E-02 1.8972E-03 1.4835E-03 - 2.8184E+01 1.2619E-02 9.1075E-03 1.2294E-03 9.6785E-04 - 3.1623E+01 8.8111E-03 6.4098E-03 8.5397E-04 6.6634E-04 - 3.5481E+01 6.2347E-03 4.5231E-03 5.7144E-04 4.4603E-04 - 3.9811E+01 4.4169E-03 3.1704E-03 3.7853E-04 2.9930E-04 - 4.4668E+01 3.1233E-03 2.2324E-03 2.5575E-04 1.9930E-04 - 5.0119E+01 2.2051E-03 1.5697E-03 1.7180E-04 1.3577E-04 - 5.6234E+01 1.5578E-03 1.1053E-03 1.1481E-04 9.2695E-05 - 6.3096E+01 1.0941E-03 7.7976E-04 7.7933E-05 6.1168E-05 - 7.0795E+01 7.7063E-04 5.4242E-04 5.2813E-05 4.1186E-05 - 7.9433E+01 5.4313E-04 3.7904E-04 3.4861E-05 2.8794E-05 - 8.9125E+01 3.7969E-04 2.6662E-04 2.2423E-05 1.9246E-05 - 1.0000E+02 2.6762E-04 1.8476E-04 1.5883E-05 1.2670E-05 - 1.1220E+02 1.8695E-04 1.2860E-04 1.0613E-05 8.6178E-06 - 1.2589E+02 1.3147E-04 8.9601E-05 7.3005E-06 6.0411E-06 - 1.4125E+02 9.1953E-05 6.2396E-05 5.0293E-06 4.1528E-06 - 1.5849E+02 6.4231E-05 4.3227E-05 3.3166E-06 2.7523E-06 - 1.7783E+02 4.5051E-05 3.0087E-05 2.2477E-06 1.8697E-06 - 1.9953E+02 3.1479E-05 2.1036E-05 1.5715E-06 1.2953E-06 - 2.2387E+02 2.1944E-05 1.4513E-05 1.0690E-06 8.7063E-07 - 2.5119E+02 1.5297E-05 1.0121E-05 7.4450E-07 5.7574E-07 - 2.8184E+02 1.0595E-05 7.0053E-06 5.0864E-07 3.9525E-07 - 3.1623E+02 7.3875E-06 4.7815E-06 3.3416E-07 2.6445E-07 - 3.5481E+02 5.1081E-06 3.2824E-06 2.2368E-07 1.8065E-07 - 3.9811E+02 3.5370E-06 2.2660E-06 1.5335E-07 1.2427E-07 - 4.4668E+02 2.4617E-06 1.5630E-06 1.0290E-07 8.0787E-08 - 5.0119E+02 1.7066E-06 1.0716E-06 6.7010E-08 5.2957E-08 - 5.6234E+02 1.1792E-06 7.4080E-07 4.5409E-08 3.6509E-08 - 6.3096E+02 8.0860E-07 5.0506E-07 3.0728E-08 2.4008E-08 - 7.0795E+02 5.6122E-07 3.4705E-07 2.0664E-08 1.5640E-08 - 7.9433E+02 3.8492E-07 2.3567E-07 1.3882E-08 1.0668E-08 - 8.9125E+02 2.6108E-07 1.5909E-07 9.3402E-09 7.0828E-09 - 1.0000E+03 1.7948E-07 1.0838E-07 6.4450E-09 4.8069E-09 - 1.1220E+03 1.2199E-07 7.3322E-08 4.3803E-09 3.3310E-09 - 1.2589E+03 8.2961E-08 4.9693E-08 2.9186E-09 2.2336E-09 - 1.4125E+03 5.6005E-08 3.3442E-08 1.8990E-09 1.5093E-09 - 1.5849E+03 3.8217E-08 2.2370E-08 1.2246E-09 1.0412E-09 - 1.7783E+03 2.5680E-08 1.4873E-08 8.1812E-10 6.6679E-10 - 1.9953E+03 1.7224E-08 1.0120E-08 5.7847E-10 4.2982E-10 - 2.2387E+03 1.1643E-08 6.7700E-09 3.7063E-10 2.7558E-10 - 2.5119E+03 7.8376E-09 4.5473E-09 2.3658E-10 1.7935E-10 - 2.8184E+03 5.2536E-09 3.0226E-09 1.6644E-10 1.3121E-10 - 3.1623E+03 3.5478E-09 2.0389E-09 1.0966E-10 7.7495E-11 - 3.5481E+03 2.3256E-09 1.3289E-09 7.2618E-11 5.1184E-11 - 3.9811E+03 1.5697E-09 8.8633E-10 4.3335E-11 3.3631E-11 - 4.4668E+03 1.0330E-09 5.8553E-10 2.7090E-11 2.0779E-11 - 5.0119E+03 6.8094E-10 3.7978E-10 1.8896E-11 1.3984E-11 - 5.6234E+03 4.4823E-10 2.5262E-10 1.2038E-11 9.0110E-12 - 6.3096E+03 2.9658E-10 1.6790E-10 8.7688E-12 6.1777E-12 - 7.0795E+03 1.9617E-10 1.0890E-10 5.6653E-12 4.3606E-12 - 7.9433E+03 1.2904E-10 7.1148E-11 3.6471E-12 2.5985E-12 - 8.9125E+03 8.3769E-11 4.7288E-11 2.2544E-12 1.7524E-12 - 1.0000E+04 5.5190E-11 3.0814E-11 1.5046E-12 1.2346E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0526E+04 1.0716E+04 5.2768E+03 4.7674E+03 - 1.1220E-01 9.3607E+03 9.5350E+03 4.7099E+03 4.2158E+03 - 1.2589E-01 8.2554E+03 8.3932E+03 4.1459E+03 3.6836E+03 - 1.4125E-01 7.2255E+03 7.3386E+03 3.6134E+03 3.1855E+03 - 1.5849E-01 6.2612E+03 6.3479E+03 3.1360E+03 2.7225E+03 - 1.7783E-01 5.3527E+03 5.4129E+03 2.6942E+03 2.3144E+03 - 1.9953E-01 4.5301E+03 4.5568E+03 2.2719E+03 1.9367E+03 - 2.2387E-01 3.7689E+03 3.7903E+03 1.8958E+03 1.6040E+03 - 2.5119E-01 3.0958E+03 3.1061E+03 1.5694E+03 1.3087E+03 - 2.8184E-01 2.5102E+03 2.5166E+03 1.2838E+03 1.0622E+03 - 3.1623E-01 2.0165E+03 2.0223E+03 1.0350E+03 8.5525E+02 - 3.5481E-01 1.6039E+03 1.6048E+03 8.2191E+02 6.7275E+02 - 3.9811E-01 1.2609E+03 1.2612E+03 6.5178E+02 5.2648E+02 - 4.4668E-01 9.8340E+02 9.7785E+02 5.0999E+02 4.0971E+02 - 5.0119E-01 7.6367E+02 7.5248E+02 3.9201E+02 3.1681E+02 - 5.6234E-01 5.9252E+02 5.7604E+02 3.0026E+02 2.3990E+02 - 6.3096E-01 4.5435E+02 4.3848E+02 2.2745E+02 1.8027E+02 - 7.0795E-01 3.4220E+02 3.3079E+02 1.7183E+02 1.3632E+02 - 7.9433E-01 2.5992E+02 2.4931E+02 1.2743E+02 1.0114E+02 - 8.9125E-01 1.9693E+02 1.8564E+02 9.3583E+01 7.4411E+01 - 1.0000E+00 1.4711E+02 1.3953E+02 6.9485E+01 5.5024E+01 - 1.1220E+00 1.1005E+02 1.0386E+02 5.0867E+01 4.0312E+01 - 1.2589E+00 8.2671E+01 7.6242E+01 3.6798E+01 2.9266E+01 - 1.4125E+00 6.1742E+01 5.6115E+01 2.6553E+01 2.1005E+01 - 1.5849E+00 4.5913E+01 4.1311E+01 1.9150E+01 1.4934E+01 - 1.7783E+00 3.3784E+01 3.0149E+01 1.3678E+01 1.0723E+01 - 1.9953E+00 2.5023E+01 2.2014E+01 9.7981E+00 7.5893E+00 - 2.2387E+00 1.8506E+01 1.5938E+01 7.0512E+00 5.2931E+00 - 2.5119E+00 1.3473E+01 1.1473E+01 4.9374E+00 3.7671E+00 - 2.8184E+00 9.8682E+00 8.2720E+00 3.4168E+00 2.6535E+00 - 3.1623E+00 7.0878E+00 5.9508E+00 2.3696E+00 1.8129E+00 - 3.5481E+00 5.1322E+00 4.2732E+00 1.6309E+00 1.2679E+00 - 3.9811E+00 3.7296E+00 3.0619E+00 1.1263E+00 8.7144E-01 - 4.4668E+00 2.6972E+00 2.1970E+00 7.7203E-01 5.9132E-01 - 5.0119E+00 1.9430E+00 1.5627E+00 5.2869E-01 3.9641E-01 - 5.6234E+00 1.4007E+00 1.1076E+00 3.6349E-01 2.6846E-01 - 6.3096E+00 1.0090E+00 7.8778E-01 2.4443E-01 1.8399E-01 - 7.0795E+00 7.1801E-01 5.6466E-01 1.5946E-01 1.2463E-01 - 7.9433E+00 5.1010E-01 4.0573E-01 1.0709E-01 8.3463E-02 - 8.9125E+00 3.6600E-01 2.8634E-01 7.3447E-02 5.4769E-02 - 1.0000E+01 2.6333E-01 2.0286E-01 4.9698E-02 3.7230E-02 - 1.1220E+01 1.8845E-01 1.4460E-01 3.3084E-02 2.4751E-02 - 1.2589E+01 1.3455E-01 1.0271E-01 2.2109E-02 1.6852E-02 - 1.4125E+01 9.6000E-02 7.2226E-02 1.4777E-02 1.1473E-02 - 1.5849E+01 6.8911E-02 5.0885E-02 9.6415E-03 7.5841E-03 - 1.7783E+01 4.9028E-02 3.6156E-02 6.4974E-03 5.0110E-03 - 1.9953E+01 3.4704E-02 2.5880E-02 4.4250E-03 3.3899E-03 - 2.2387E+01 2.4781E-02 1.8359E-02 2.9684E-03 2.2397E-03 - 2.5119E+01 1.7558E-02 1.2995E-02 1.9869E-03 1.4839E-03 - 2.8184E+01 1.2339E-02 8.9869E-03 1.3247E-03 9.6008E-04 - 3.1623E+01 8.8410E-03 6.4250E-03 8.4997E-04 6.6630E-04 - 3.5481E+01 6.2629E-03 4.5324E-03 5.6669E-04 4.5160E-04 - 3.9811E+01 4.4266E-03 3.1872E-03 3.7839E-04 3.0487E-04 - 4.4668E+01 3.1269E-03 2.2479E-03 2.5606E-04 2.0380E-04 - 5.0119E+01 2.2137E-03 1.5811E-03 1.7147E-04 1.3612E-04 - 5.6234E+01 1.5644E-03 1.1056E-03 1.1359E-04 9.2540E-05 - 6.3096E+01 1.0991E-03 7.7510E-04 7.7945E-05 6.1432E-05 - 7.0795E+01 7.7579E-04 5.4431E-04 5.2191E-05 4.2209E-05 - 7.9433E+01 5.4561E-04 3.8041E-04 3.4598E-05 2.9195E-05 - 8.9125E+01 3.8027E-04 2.6576E-04 2.3197E-05 1.9274E-05 - 1.0000E+02 2.6687E-04 1.8547E-04 1.5915E-05 1.3169E-05 - 1.1220E+02 1.8716E-04 1.2900E-04 1.0943E-05 8.7699E-06 - 1.2589E+02 1.3135E-04 8.9295E-05 7.4490E-06 6.0428E-06 - 1.4125E+02 9.1898E-05 6.2168E-05 4.9398E-06 4.1378E-06 - 1.5849E+02 6.4393E-05 4.3406E-05 3.3329E-06 2.7305E-06 - 1.7783E+02 4.5043E-05 2.9877E-05 2.2930E-06 1.8402E-06 - 1.9953E+02 3.1408E-05 2.0776E-05 1.5376E-06 1.2698E-06 - 2.2387E+02 2.1759E-05 1.4433E-05 1.0198E-06 8.6945E-07 - 2.5119E+02 1.5053E-05 9.9298E-06 7.0035E-07 5.7405E-07 - 2.8184E+02 1.0508E-05 6.9674E-06 4.7850E-07 3.7750E-07 - 3.1623E+02 7.4073E-06 4.7729E-06 3.3226E-07 2.6014E-07 - 3.5481E+02 5.1481E-06 3.2874E-06 2.2480E-07 1.7718E-07 - 3.9811E+02 3.5658E-06 2.2747E-06 1.5214E-07 1.2197E-07 - 4.4668E+02 2.4596E-06 1.5730E-06 1.0422E-07 8.1748E-08 - 5.0119E+02 1.7063E-06 1.0802E-06 6.9433E-08 5.6599E-08 - 5.6234E+02 1.1828E-06 7.3502E-07 4.6957E-08 3.7363E-08 - 6.3096E+02 8.0848E-07 5.0129E-07 3.1331E-08 2.4129E-08 - 7.0795E+02 5.5606E-07 3.4423E-07 2.0867E-08 1.6408E-08 - 7.9433E+02 3.8134E-07 2.3258E-07 1.4547E-08 1.1327E-08 - 8.9125E+02 2.6081E-07 1.5905E-07 9.8999E-09 7.4806E-09 - 1.0000E+03 1.8000E-07 1.0964E-07 6.5191E-09 5.0112E-09 - 1.1220E+03 1.2200E-07 7.3771E-08 4.4704E-09 3.2706E-09 - 1.2589E+03 8.3192E-08 4.9942E-08 2.9590E-09 2.2276E-09 - 1.4125E+03 5.6587E-08 3.3311E-08 1.8229E-09 1.4178E-09 - 1.5849E+03 3.8175E-08 2.2737E-08 1.2299E-09 8.9729E-10 - 1.7783E+03 2.5491E-08 1.5168E-08 8.5198E-10 5.9946E-10 - 1.9953E+03 1.7169E-08 1.0132E-08 5.8361E-10 4.2344E-10 - 2.2387E+03 1.1594E-08 6.8090E-09 3.9841E-10 2.9254E-10 - 2.5119E+03 7.7922E-09 4.5221E-09 2.5484E-10 1.9099E-10 - 2.8184E+03 5.1725E-09 2.9799E-09 1.5699E-10 1.1603E-10 - 3.1623E+03 3.5436E-09 2.0473E-09 1.0683E-10 7.8059E-11 - 3.5481E+03 2.3147E-09 1.3229E-09 6.9209E-11 5.0221E-11 - 3.9811E+03 1.5525E-09 8.7956E-10 4.5518E-11 3.3437E-11 - 4.4668E+03 1.0381E-09 5.8060E-10 2.9737E-11 2.3555E-11 - 5.0119E+03 6.8412E-10 3.8254E-10 1.9107E-11 1.5277E-11 - 5.6234E+03 4.5279E-10 2.5597E-10 1.2321E-11 8.8800E-12 - 6.3096E+03 2.9762E-10 1.6600E-10 8.9860E-12 5.6776E-12 - 7.0795E+03 1.9412E-10 1.0920E-10 5.5810E-12 3.7630E-12 - 7.9433E+03 1.2807E-10 7.1717E-11 3.5460E-12 2.5404E-12 - 8.9125E+03 8.6275E-11 4.7336E-11 2.6156E-12 1.6848E-12 - 1.0000E+04 5.6688E-11 3.0367E-11 1.6173E-12 1.1086E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0972E+04 1.1141E+04 5.4594E+03 5.0052E+03 - 1.1220E-01 9.7028E+03 9.8153E+03 4.8660E+03 4.4065E+03 - 1.2589E-01 8.5292E+03 8.6076E+03 4.2713E+03 3.8407E+03 - 1.4125E-01 7.4431E+03 7.4969E+03 3.6988E+03 3.3155E+03 - 1.5849E-01 6.4402E+03 6.4594E+03 3.1772E+03 2.8278E+03 - 1.7783E-01 5.4846E+03 5.4938E+03 2.7239E+03 2.3893E+03 - 1.9953E-01 4.6171E+03 4.6104E+03 2.3119E+03 2.0042E+03 - 2.2387E-01 3.8501E+03 3.8309E+03 1.9401E+03 1.6620E+03 - 2.5119E-01 3.1487E+03 3.1427E+03 1.6013E+03 1.3656E+03 - 2.8184E-01 2.5528E+03 2.5530E+03 1.3088E+03 1.1079E+03 - 3.1623E-01 2.0507E+03 2.0583E+03 1.0650E+03 8.8486E+02 - 3.5481E-01 1.6273E+03 1.6317E+03 8.5432E+02 7.0100E+02 - 3.9811E-01 1.2842E+03 1.2770E+03 6.7414E+02 5.5119E+02 - 4.4668E-01 1.0086E+03 9.9440E+02 5.2679E+02 4.2701E+02 - 5.0119E-01 7.8238E+02 7.7402E+02 4.0877E+02 3.3167E+02 - 5.6234E-01 6.0462E+02 5.9335E+02 3.1313E+02 2.5593E+02 - 6.3096E-01 4.6627E+02 4.4884E+02 2.3856E+02 1.9341E+02 - 7.0795E-01 3.5390E+02 3.3987E+02 1.8313E+02 1.4482E+02 - 7.9433E-01 2.6778E+02 2.5720E+02 1.3717E+02 1.0787E+02 - 8.9125E-01 2.0126E+02 1.9274E+02 1.0076E+02 8.0017E+01 - 1.0000E+00 1.5136E+02 1.4462E+02 7.4567E+01 5.9284E+01 - 1.1220E+00 1.1376E+02 1.0782E+02 5.5219E+01 4.3320E+01 - 1.2589E+00 8.5189E+01 7.9636E+01 4.0430E+01 3.1522E+01 - 1.4125E+00 6.3800E+01 5.8695E+01 2.9355E+01 2.2903E+01 - 1.5849E+00 4.7720E+01 4.3452E+01 2.1420E+01 1.6505E+01 - 1.7783E+00 3.5140E+01 3.1780E+01 1.5235E+01 1.1805E+01 - 1.9953E+00 2.5868E+01 2.3143E+01 1.0874E+01 8.4786E+00 - 2.2387E+00 1.9094E+01 1.6981E+01 7.8799E+00 5.9741E+00 - 2.5119E+00 1.3884E+01 1.2212E+01 5.5829E+00 4.1577E+00 - 2.8184E+00 1.0144E+01 8.7830E+00 3.8294E+00 2.8729E+00 - 3.1623E+00 7.3914E+00 6.2998E+00 2.6689E+00 2.0403E+00 - 3.5481E+00 5.3602E+00 4.5189E+00 1.8660E+00 1.4106E+00 - 3.9811E+00 3.8765E+00 3.2385E+00 1.2922E+00 9.6855E-01 - 4.4668E+00 2.7915E+00 2.3088E+00 8.8604E-01 6.6357E-01 - 5.0119E+00 2.0150E+00 1.6572E+00 6.0919E-01 4.5577E-01 - 5.6234E+00 1.4518E+00 1.1867E+00 4.1553E-01 3.1230E-01 - 6.3096E+00 1.0359E+00 8.3913E-01 2.7955E-01 2.1025E-01 - 7.0795E+00 7.4584E-01 5.8716E-01 1.8583E-01 1.4054E-01 - 7.9433E+00 5.3866E-01 4.2143E-01 1.2428E-01 9.7170E-02 - 8.9125E+00 3.8434E-01 3.0146E-01 8.4511E-02 6.6871E-02 - 1.0000E+01 2.7463E-01 2.1358E-01 5.7330E-02 4.3620E-02 - 1.1220E+01 1.9498E-01 1.5154E-01 3.7908E-02 2.8940E-02 - 1.2589E+01 1.3835E-01 1.0694E-01 2.5385E-02 1.9266E-02 - 1.4125E+01 9.8788E-02 7.5478E-02 1.7196E-02 1.3117E-02 - 1.5849E+01 7.1151E-02 5.3520E-02 1.1538E-02 8.8372E-03 - 1.7783E+01 5.0333E-02 3.8250E-02 7.6780E-03 5.9004E-03 - 1.9953E+01 3.5600E-02 2.6928E-02 5.0615E-03 3.8822E-03 - 2.2387E+01 2.5532E-02 1.9026E-02 3.2742E-03 2.5674E-03 - 2.5119E+01 1.8353E-02 1.3349E-02 2.1482E-03 1.7702E-03 - 2.8184E+01 1.3041E-02 9.3076E-03 1.4551E-03 1.1702E-03 - 3.1623E+01 9.2037E-03 6.7732E-03 9.8627E-04 7.6883E-04 - 3.5481E+01 6.5211E-03 4.7688E-03 6.5110E-04 5.1644E-04 - 3.9811E+01 4.6123E-03 3.3616E-03 4.3407E-04 3.4887E-04 - 4.4668E+01 3.2592E-03 2.3623E-03 2.8877E-04 2.3415E-04 - 5.0119E+01 2.3072E-03 1.6620E-03 1.9627E-04 1.5543E-04 - 5.6234E+01 1.6339E-03 1.1668E-03 1.2989E-04 1.0538E-04 - 6.3096E+01 1.1529E-03 8.1700E-04 8.6125E-05 7.2201E-05 - 7.0795E+01 8.1470E-04 5.7275E-04 5.8739E-05 4.7342E-05 - 7.9433E+01 5.7265E-04 4.0309E-04 3.9198E-05 3.0873E-05 - 8.9125E+01 4.0030E-04 2.8428E-04 2.6848E-05 2.1157E-05 - 1.0000E+02 2.8233E-04 1.9661E-04 1.7996E-05 1.4462E-05 - 1.1220E+02 1.9842E-04 1.3680E-04 1.2026E-05 9.8440E-06 - 1.2589E+02 1.3894E-04 9.5292E-05 8.1742E-06 6.7102E-06 - 1.4125E+02 9.7214E-05 6.6360E-05 5.5638E-06 4.4625E-06 - 1.5849E+02 6.7798E-05 4.6153E-05 3.7394E-06 3.0294E-06 - 1.7783E+02 4.7156E-05 3.2085E-05 2.5388E-06 2.0501E-06 - 1.9953E+02 3.3047E-05 2.2226E-05 1.7043E-06 1.3846E-06 - 2.2387E+02 2.3226E-05 1.5276E-05 1.1532E-06 9.1287E-07 - 2.5119E+02 1.6188E-05 1.0638E-05 8.0888E-07 6.2362E-07 - 2.8184E+02 1.1212E-05 7.4124E-06 5.3709E-07 4.2502E-07 - 3.1623E+02 7.8969E-06 5.1539E-06 3.6272E-07 2.9471E-07 - 3.5481E+02 5.4595E-06 3.5635E-06 2.4849E-07 2.0055E-07 - 3.9811E+02 3.7789E-06 2.4542E-06 1.6651E-07 1.3354E-07 - 4.4668E+02 2.6324E-06 1.6840E-06 1.1369E-07 8.8844E-08 - 5.0119E+02 1.8295E-06 1.1498E-06 7.9631E-08 6.0438E-08 - 5.6234E+02 1.2684E-06 7.9616E-07 5.0763E-08 4.0688E-08 - 6.3096E+02 8.7391E-07 5.4741E-07 3.3749E-08 2.7427E-08 - 7.0795E+02 6.0077E-07 3.7667E-07 2.3412E-08 1.8708E-08 - 7.9433E+02 4.1324E-07 2.5706E-07 1.6166E-08 1.2555E-08 - 8.9125E+02 2.8542E-07 1.7481E-07 1.0792E-08 8.2756E-09 - 1.0000E+03 1.9630E-07 1.1943E-07 6.9540E-09 5.4484E-09 - 1.1220E+03 1.3282E-07 8.0358E-08 4.7274E-09 3.6093E-09 - 1.2589E+03 9.0238E-08 5.4186E-08 3.3070E-09 2.3598E-09 - 1.4125E+03 6.1895E-08 3.6650E-08 2.1802E-09 1.5593E-09 - 1.5849E+03 4.2314E-08 2.4789E-08 1.3904E-09 1.0330E-09 - 1.7783E+03 2.8589E-08 1.6821E-08 9.1707E-10 6.8020E-10 - 1.9953E+03 1.9175E-08 1.1306E-08 6.1134E-10 4.4707E-10 - 2.2387E+03 1.2811E-08 7.5985E-09 4.0172E-10 3.0089E-10 - 2.5119E+03 8.6556E-09 5.1090E-09 2.6802E-10 1.9299E-10 - 2.8184E+03 5.8712E-09 3.3875E-09 1.7504E-10 1.2529E-10 - 3.1623E+03 4.0123E-09 2.3142E-09 1.1599E-10 9.0169E-11 - 3.5481E+03 2.5988E-09 1.4980E-09 8.0461E-11 5.6363E-11 - 3.9811E+03 1.7371E-09 1.0012E-09 5.4720E-11 3.4665E-11 - 4.4668E+03 1.1368E-09 6.6045E-10 3.3677E-11 2.4526E-11 - 5.0119E+03 7.5454E-10 4.3014E-10 2.1524E-11 1.6292E-11 - 5.6234E+03 5.0732E-10 2.8419E-10 1.4712E-11 1.0364E-11 - 6.3096E+03 3.3535E-10 1.8904E-10 9.8271E-12 6.9310E-12 - 7.0795E+03 2.2128E-10 1.2493E-10 6.3058E-12 4.8490E-12 - 7.9433E+03 1.4778E-10 8.1894E-11 4.3829E-12 3.3905E-12 - 8.9125E+03 9.8562E-11 5.3351E-11 2.8144E-12 2.0815E-12 - 1.0000E+04 6.3843E-11 3.5095E-11 1.7129E-12 1.3150E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0946E+04 1.1012E+04 5.3877E+03 5.0200E+03 - 1.1220E-01 9.6691E+03 9.7159E+03 4.7696E+03 4.4065E+03 - 1.2589E-01 8.5035E+03 8.5114E+03 4.1773E+03 3.8525E+03 - 1.4125E-01 7.4212E+03 7.3905E+03 3.6666E+03 3.3256E+03 - 1.5849E-01 6.4047E+03 6.3626E+03 3.1604E+03 2.8293E+03 - 1.7783E-01 5.4623E+03 5.4241E+03 2.6842E+03 2.3959E+03 - 1.9953E-01 4.5898E+03 4.5578E+03 2.2749E+03 2.0068E+03 - 2.2387E-01 3.8040E+03 3.7802E+03 1.9086E+03 1.6635E+03 - 2.5119E-01 3.1178E+03 3.1020E+03 1.5815E+03 1.3595E+03 - 2.8184E-01 2.5346E+03 2.5275E+03 1.2950E+03 1.0995E+03 - 3.1623E-01 2.0415E+03 2.0328E+03 1.0489E+03 8.8304E+02 - 3.5481E-01 1.6299E+03 1.6090E+03 8.3923E+02 6.9839E+02 - 3.9811E-01 1.2873E+03 1.2670E+03 6.6156E+02 5.4848E+02 - 4.4668E-01 1.0083E+03 9.9144E+02 5.1799E+02 4.2857E+02 - 5.0119E-01 7.8108E+02 7.6979E+02 4.0450E+02 3.3311E+02 - 5.6234E-01 6.0355E+02 5.9179E+02 3.1274E+02 2.5525E+02 - 6.3096E-01 4.6419E+02 4.4917E+02 2.3778E+02 1.9081E+02 - 7.0795E-01 3.5324E+02 3.4016E+02 1.7847E+02 1.4312E+02 - 7.9433E-01 2.6691E+02 2.5498E+02 1.3519E+02 1.0832E+02 - 8.9125E-01 2.0001E+02 1.9047E+02 1.0109E+02 8.0617E+01 - 1.0000E+00 1.5235E+02 1.4418E+02 7.4394E+01 5.9800E+01 - 1.1220E+00 1.1442E+02 1.0789E+02 5.4949E+01 4.3556E+01 - 1.2589E+00 8.5709E+01 8.0115E+01 4.0441E+01 3.1435E+01 - 1.4125E+00 6.4054E+01 5.8913E+01 2.9489E+01 2.2785E+01 - 1.5849E+00 4.7610E+01 4.3504E+01 2.1044E+01 1.6343E+01 - 1.7783E+00 3.5292E+01 3.1852E+01 1.5041E+01 1.1802E+01 - 1.9953E+00 2.5943E+01 2.3071E+01 1.0920E+01 8.4682E+00 - 2.2387E+00 1.9171E+01 1.6992E+01 7.7398E+00 6.0034E+00 - 2.5119E+00 1.4127E+01 1.2323E+01 5.3940E+00 4.2648E+00 - 2.8184E+00 1.0386E+01 8.8429E+00 3.8458E+00 2.9914E+00 - 3.1623E+00 7.4385E+00 6.2991E+00 2.7060E+00 2.0585E+00 - 3.5481E+00 5.3805E+00 4.5255E+00 1.8812E+00 1.4331E+00 - 3.9811E+00 3.8687E+00 3.2634E+00 1.2894E+00 9.7132E-01 - 4.4668E+00 2.8043E+00 2.3310E+00 8.9296E-01 6.6262E-01 - 5.0119E+00 2.0282E+00 1.6551E+00 6.1549E-01 4.5782E-01 - 5.6234E+00 1.4591E+00 1.1871E+00 4.1599E-01 3.1783E-01 - 6.3096E+00 1.0616E+00 8.5143E-01 2.8349E-01 2.1490E-01 - 7.0795E+00 7.6066E-01 6.0036E-01 1.9451E-01 1.4481E-01 - 7.9433E+00 5.4215E-01 4.2854E-01 1.2885E-01 9.8292E-02 - 8.9125E+00 3.8568E-01 3.1010E-01 8.7710E-02 6.5301E-02 - 1.0000E+01 2.7481E-01 2.1393E-01 5.7227E-02 4.2539E-02 - 1.1220E+01 1.9622E-01 1.5185E-01 3.8056E-02 2.8617E-02 - 1.2589E+01 1.3924E-01 1.0735E-01 2.5802E-02 1.9468E-02 - 1.4125E+01 9.9248E-02 7.6164E-02 1.7180E-02 1.2802E-02 - 1.5849E+01 7.1474E-02 5.4401E-02 1.1328E-02 8.7087E-03 - 1.7783E+01 5.0570E-02 3.8546E-02 7.5815E-03 5.8936E-03 - 1.9953E+01 3.5878E-02 2.7259E-02 4.9939E-03 3.9949E-03 - 2.2387E+01 2.5760E-02 1.9096E-02 3.3174E-03 2.6784E-03 - 2.5119E+01 1.8314E-02 1.3454E-02 2.3210E-03 1.7042E-03 - 2.8184E+01 1.3019E-02 9.5866E-03 1.5279E-03 1.1811E-03 - 3.1623E+01 9.2020E-03 6.7834E-03 9.8213E-04 7.7172E-04 - 3.5481E+01 6.5280E-03 4.7816E-03 6.5329E-04 5.1256E-04 - 3.9811E+01 4.6278E-03 3.3776E-03 4.3807E-04 3.4158E-04 - 4.4668E+01 3.2760E-03 2.3781E-03 2.9476E-04 2.3605E-04 - 5.0119E+01 2.3105E-03 1.6715E-03 1.9906E-04 1.5971E-04 - 5.6234E+01 1.6325E-03 1.1758E-03 1.3314E-04 1.0410E-04 - 6.3096E+01 1.1478E-03 8.2818E-04 8.8787E-05 7.0181E-05 - 7.0795E+01 8.0558E-04 5.7734E-04 6.0128E-05 4.7984E-05 - 7.9433E+01 5.6960E-04 4.0086E-04 3.9496E-05 3.2408E-05 - 8.9125E+01 4.0233E-04 2.7996E-04 2.6309E-05 2.2249E-05 - 1.0000E+02 2.8261E-04 1.9648E-04 1.7834E-05 1.4681E-05 - 1.1220E+02 1.9852E-04 1.3705E-04 1.2022E-05 9.9986E-06 - 1.2589E+02 1.3958E-04 9.5351E-05 8.0937E-06 6.7691E-06 - 1.4125E+02 9.7495E-05 6.6594E-05 5.5356E-06 4.5296E-06 - 1.5849E+02 6.7976E-05 4.6311E-05 3.7924E-06 3.0339E-06 - 1.7783E+02 4.7250E-05 3.1988E-05 2.5702E-06 2.0941E-06 - 1.9953E+02 3.2939E-05 2.2291E-05 1.7333E-06 1.4241E-06 - 2.2387E+02 2.3135E-05 1.5463E-05 1.1578E-06 9.6208E-07 - 2.5119E+02 1.6134E-05 1.0708E-05 8.1240E-07 6.4331E-07 - 2.8184E+02 1.1201E-05 7.3899E-06 5.5444E-07 4.4127E-07 - 3.1623E+02 7.8867E-06 5.1445E-06 3.6370E-07 2.8932E-07 - 3.5481E+02 5.4667E-06 3.5377E-06 2.4439E-07 1.9820E-07 - 3.9811E+02 3.7925E-06 2.4447E-06 1.6786E-07 1.3680E-07 - 4.4668E+02 2.6302E-06 1.6836E-06 1.1387E-07 9.0422E-08 - 5.0119E+02 1.8242E-06 1.1587E-06 7.4601E-08 6.1425E-08 - 5.6234E+02 1.2743E-06 8.0752E-07 5.1197E-08 4.0949E-08 - 6.3096E+02 8.7626E-07 5.5021E-07 3.4854E-08 2.6984E-08 - 7.0795E+02 6.0420E-07 3.7739E-07 2.3109E-08 1.8024E-08 - 7.9433E+02 4.1643E-07 2.5680E-07 1.6162E-08 1.2364E-08 - 8.9125E+02 2.8710E-07 1.7412E-07 1.1005E-08 8.3822E-09 - 1.0000E+03 1.9814E-07 1.2111E-07 7.1192E-09 5.6711E-09 - 1.1220E+03 1.3429E-07 8.1679E-08 4.7775E-09 3.8236E-09 - 1.2589E+03 9.1802E-08 5.5635E-08 3.1994E-09 2.4504E-09 - 1.4125E+03 6.2019E-08 3.7465E-08 2.1566E-09 1.6126E-09 - 1.5849E+03 4.2034E-08 2.4814E-08 1.4515E-09 1.0734E-09 - 1.7783E+03 2.8430E-08 1.6845E-08 1.0033E-09 7.1821E-10 - 1.9953E+03 1.9174E-08 1.1411E-08 6.4112E-10 4.5639E-10 - 2.2387E+03 1.2971E-08 7.6411E-09 4.3127E-10 3.2861E-10 - 2.5119E+03 8.6901E-09 5.1086E-09 2.8533E-10 2.0393E-10 - 2.8184E+03 5.8080E-09 3.3808E-09 1.7919E-10 1.2416E-10 - 3.1623E+03 3.9957E-09 2.2995E-09 1.2674E-10 8.9665E-11 - 3.5481E+03 2.6083E-09 1.5060E-09 8.3979E-11 5.7888E-11 - 3.9811E+03 1.7389E-09 9.9749E-10 5.3742E-11 3.5951E-11 - 4.4668E+03 1.1540E-09 6.5608E-10 3.4422E-11 2.3427E-11 - 5.0119E+03 7.5931E-10 4.3657E-10 2.3137E-11 1.6769E-11 - 5.6234E+03 5.0410E-10 2.8338E-10 1.4987E-11 1.1370E-11 - 6.3096E+03 3.3710E-10 1.9186E-10 9.5195E-12 7.1060E-12 - 7.0795E+03 2.2233E-10 1.2372E-10 6.2146E-12 4.5402E-12 - 7.9433E+03 1.4597E-10 8.1852E-11 4.3543E-12 3.0357E-12 - 8.9125E+03 9.6157E-11 5.4174E-11 2.9908E-12 2.0769E-12 - 1.0000E+04 6.3672E-11 3.5878E-11 1.9525E-12 1.3821E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0923E+04 1.0893E+04 5.3133E+03 5.0265E+03 - 1.1220E-01 9.6666E+03 9.6244E+03 4.6976E+03 4.4563E+03 - 1.2589E-01 8.5336E+03 8.4357E+03 4.1161E+03 3.8674E+03 - 1.4125E-01 7.4089E+03 7.3280E+03 3.5838E+03 3.3244E+03 - 1.5849E-01 6.3715E+03 6.3324E+03 3.0911E+03 2.8371E+03 - 1.7783E-01 5.4443E+03 5.3946E+03 2.6371E+03 2.3940E+03 - 1.9953E-01 4.5888E+03 4.5142E+03 2.2379E+03 2.0101E+03 - 2.2387E-01 3.8176E+03 3.7510E+03 1.8818E+03 1.6749E+03 - 2.5119E-01 3.1338E+03 3.0855E+03 1.5632E+03 1.3705E+03 - 2.8184E-01 2.5440E+03 2.4971E+03 1.2718E+03 1.1072E+03 - 3.1623E-01 2.0521E+03 2.0135E+03 1.0295E+03 8.8974E+02 - 3.5481E-01 1.6285E+03 1.6008E+03 8.3033E+02 7.0560E+02 - 3.9811E-01 1.2848E+03 1.2497E+03 6.6112E+02 5.5014E+02 - 4.4668E-01 1.0105E+03 9.8417E+02 5.2049E+02 4.3042E+02 - 5.0119E-01 7.8380E+02 7.6853E+02 4.0418E+02 3.3396E+02 - 5.6234E-01 6.0311E+02 5.9098E+02 3.1260E+02 2.5578E+02 - 6.3096E-01 4.6407E+02 4.4851E+02 2.3862E+02 1.9400E+02 - 7.0795E-01 3.5199E+02 3.3661E+02 1.7852E+02 1.4491E+02 - 7.9433E-01 2.6642E+02 2.5473E+02 1.3403E+02 1.0912E+02 - 8.9125E-01 2.0262E+02 1.9091E+02 1.0126E+02 8.1231E+01 - 1.0000E+00 1.5142E+02 1.4367E+02 7.4027E+01 5.9385E+01 - 1.1220E+00 1.1366E+02 1.0798E+02 5.4583E+01 4.3389E+01 - 1.2589E+00 8.5218E+01 8.0131E+01 4.0100E+01 3.1615E+01 - 1.4125E+00 6.3684E+01 5.8980E+01 2.9088E+01 2.2963E+01 - 1.5849E+00 4.7460E+01 4.3156E+01 2.0945E+01 1.6575E+01 - 1.7783E+00 3.4926E+01 3.1585E+01 1.5231E+01 1.1952E+01 - 1.9953E+00 2.5731E+01 2.3035E+01 1.0993E+01 8.4608E+00 - 2.2387E+00 1.9101E+01 1.6941E+01 7.8007E+00 5.9023E+00 - 2.5119E+00 1.3961E+01 1.2167E+01 5.4607E+00 4.1930E+00 - 2.8184E+00 1.0146E+01 8.6714E+00 3.8205E+00 2.9335E+00 - 3.1623E+00 7.3445E+00 6.2767E+00 2.6955E+00 2.0374E+00 - 3.5481E+00 5.3505E+00 4.5291E+00 1.8692E+00 1.4091E+00 - 3.9811E+00 3.8744E+00 3.2272E+00 1.2795E+00 9.6143E-01 - 4.4668E+00 2.7861E+00 2.3156E+00 8.8221E-01 6.6921E-01 - 5.0119E+00 2.0026E+00 1.6452E+00 6.1251E-01 4.5672E-01 - 5.6234E+00 1.4470E+00 1.1725E+00 4.1577E-01 3.1070E-01 - 6.3096E+00 1.0326E+00 8.4500E-01 2.8029E-01 2.1437E-01 - 7.0795E+00 7.4522E-01 5.9945E-01 1.8920E-01 1.4218E-01 - 7.9433E+00 5.3518E-01 4.2250E-01 1.2661E-01 9.5351E-02 - 8.9125E+00 3.7851E-01 3.0240E-01 8.2553E-02 6.4856E-02 - 1.0000E+01 2.7484E-01 2.1442E-01 5.6866E-02 4.3285E-02 - 1.1220E+01 1.9766E-01 1.5261E-01 3.9154E-02 2.8778E-02 - 1.2589E+01 1.4027E-01 1.0779E-01 2.5839E-02 1.9405E-02 - 1.4125E+01 1.0009E-01 7.6201E-02 1.6907E-02 1.2971E-02 - 1.5849E+01 7.1450E-02 5.3694E-02 1.1324E-02 8.7704E-03 - 1.7783E+01 5.0502E-02 3.8298E-02 7.5235E-03 5.9691E-03 - 1.9953E+01 3.5511E-02 2.7151E-02 4.9958E-03 3.9430E-03 - 2.2387E+01 2.5320E-02 1.9148E-02 3.3490E-03 2.6920E-03 - 2.5119E+01 1.8340E-02 1.3603E-02 2.2620E-03 1.8416E-03 - 2.8184E+01 1.3361E-02 9.6974E-03 1.4837E-03 1.1889E-03 - 3.1623E+01 9.1964E-03 6.7961E-03 9.9171E-04 7.7316E-04 - 3.5481E+01 6.5204E-03 4.7760E-03 6.5787E-04 5.1315E-04 - 3.9811E+01 4.6335E-03 3.3613E-03 4.3945E-04 3.4469E-04 - 4.4668E+01 3.2825E-03 2.3666E-03 2.9330E-04 2.3017E-04 - 5.0119E+01 2.3223E-03 1.6614E-03 1.9476E-04 1.5574E-04 - 5.6234E+01 1.6376E-03 1.1678E-03 1.3063E-04 1.0478E-04 - 6.3096E+01 1.1528E-03 8.2140E-04 8.7820E-05 7.1165E-05 - 7.0795E+01 8.1477E-04 5.7285E-04 5.9055E-05 4.8258E-05 - 7.9433E+01 5.7619E-04 3.9892E-04 3.9334E-05 3.2023E-05 - 8.9125E+01 4.0521E-04 2.8258E-04 2.5503E-05 2.1635E-05 - 1.0000E+02 2.8253E-04 1.9714E-04 1.8037E-05 1.4591E-05 - 1.1220E+02 1.9789E-04 1.3765E-04 1.2337E-05 9.7614E-06 - 1.2589E+02 1.3896E-04 9.5919E-05 8.3720E-06 6.5653E-06 - 1.4125E+02 9.7500E-05 6.6559E-05 5.5862E-06 4.5168E-06 - 1.5849E+02 6.8202E-05 4.6361E-05 3.7567E-06 3.1231E-06 - 1.7783E+02 4.7625E-05 3.2249E-05 2.5115E-06 2.0813E-06 - 1.9953E+02 3.3277E-05 2.2285E-05 1.6544E-06 1.4569E-06 - 2.2387E+02 2.3276E-05 1.5415E-05 1.1403E-06 9.8607E-07 - 2.5119E+02 1.6236E-05 1.0697E-05 7.7104E-07 6.5592E-07 - 2.8184E+02 1.1321E-05 7.4143E-06 5.2235E-07 4.4490E-07 - 3.1623E+02 7.9025E-06 5.1364E-06 3.6520E-07 2.9313E-07 - 3.5481E+02 5.4833E-06 3.5581E-06 2.4577E-07 1.9504E-07 - 3.9811E+02 3.8097E-06 2.4691E-06 1.6820E-07 1.3353E-07 - 4.4668E+02 2.6499E-06 1.6954E-06 1.1536E-07 8.9981E-08 - 5.0119E+02 1.8389E-06 1.1561E-06 7.6512E-08 6.1101E-08 - 5.6234E+02 1.2799E-06 8.0548E-07 5.1282E-08 4.0738E-08 - 6.3096E+02 8.7984E-07 5.5028E-07 3.4647E-08 2.7424E-08 - 7.0795E+02 6.0270E-07 3.7386E-07 2.3708E-08 1.7898E-08 - 7.9433E+02 4.1584E-07 2.5601E-07 1.5804E-08 1.2310E-08 - 8.9125E+02 2.8583E-07 1.7556E-07 1.0385E-08 8.3767E-09 - 1.0000E+03 1.9721E-07 1.2011E-07 7.0473E-09 5.4585E-09 - 1.1220E+03 1.3290E-07 8.0867E-08 4.8267E-09 3.7842E-09 - 1.2589E+03 9.0604E-08 5.4844E-08 3.2806E-09 2.4595E-09 - 1.4125E+03 6.1438E-08 3.7112E-08 2.1359E-09 1.6072E-09 - 1.5849E+03 4.1470E-08 2.4953E-08 1.3710E-09 1.0069E-09 - 1.7783E+03 2.8242E-08 1.6768E-08 9.1752E-10 6.7872E-10 - 1.9953E+03 1.9102E-08 1.1303E-08 6.3123E-10 4.6878E-10 - 2.2387E+03 1.2961E-08 7.5094E-09 4.2025E-10 3.0837E-10 - 2.5119E+03 8.7459E-09 5.0529E-09 2.6832E-10 1.9515E-10 - 2.8184E+03 5.8203E-09 3.3488E-09 1.7778E-10 1.3428E-10 - 3.1623E+03 3.9968E-09 2.3094E-09 1.1974E-10 8.8904E-11 - 3.5481E+03 2.5963E-09 1.4930E-09 8.0393E-11 5.6588E-11 - 3.9811E+03 1.7208E-09 9.9135E-10 5.4177E-11 3.5038E-11 - 4.4668E+03 1.1543E-09 6.6937E-10 3.4631E-11 2.3427E-11 - 5.0119E+03 7.6927E-10 4.3913E-10 2.2974E-11 1.6851E-11 - 5.6234E+03 5.0284E-10 2.8676E-10 1.4085E-11 1.2197E-11 - 6.3096E+03 3.3618E-10 1.8899E-10 9.8739E-12 7.0643E-12 - 7.0795E+03 2.2043E-10 1.2369E-10 6.4814E-12 4.4483E-12 - 7.9433E+03 1.4545E-10 7.9751E-11 4.2439E-12 2.9956E-12 - 8.9125E+03 9.5257E-11 5.2225E-11 2.5762E-12 1.9130E-12 - 1.0000E+04 6.3468E-11 3.4478E-11 1.6341E-12 1.2641E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0964E+04 1.0902E+04 5.2810E+03 5.0679E+03 - 1.1220E-01 9.6853E+03 9.6352E+03 4.6729E+03 4.4648E+03 - 1.2589E-01 8.5286E+03 8.4478E+03 4.0978E+03 3.8803E+03 - 1.4125E-01 7.4338E+03 7.3374E+03 3.5767E+03 3.3495E+03 - 1.5849E-01 6.4003E+03 6.3056E+03 3.0914E+03 2.8579E+03 - 1.7783E-01 5.4574E+03 5.3654E+03 2.6398E+03 2.4077E+03 - 1.9953E-01 4.5899E+03 4.5196E+03 2.2337E+03 2.0100E+03 - 2.2387E-01 3.8099E+03 3.7425E+03 1.8801E+03 1.6673E+03 - 2.5119E-01 3.1237E+03 3.0683E+03 1.5568E+03 1.3686E+03 - 2.8184E-01 2.5286E+03 2.4929E+03 1.2735E+03 1.1145E+03 - 3.1623E-01 2.0342E+03 2.0050E+03 1.0320E+03 8.9856E+02 - 3.5481E-01 1.6199E+03 1.5991E+03 8.2066E+02 7.0960E+02 - 3.9811E-01 1.2829E+03 1.2590E+03 6.5144E+02 5.5316E+02 - 4.4668E-01 1.0117E+03 9.8282E+02 5.1372E+02 4.2793E+02 - 5.0119E-01 7.8484E+02 7.6137E+02 3.9927E+02 3.3258E+02 - 5.6234E-01 6.0345E+02 5.8626E+02 3.0855E+02 2.5829E+02 - 6.3096E-01 4.6124E+02 4.4862E+02 2.3506E+02 1.9561E+02 - 7.0795E-01 3.4991E+02 3.3912E+02 1.7911E+02 1.4660E+02 - 7.9433E-01 2.6573E+02 2.5543E+02 1.3464E+02 1.0968E+02 - 8.9125E-01 2.0282E+02 1.9234E+02 9.9305E+01 8.1292E+01 - 1.0000E+00 1.5226E+02 1.4344E+02 7.4163E+01 5.9034E+01 - 1.1220E+00 1.1373E+02 1.0666E+02 5.4380E+01 4.2947E+01 - 1.2589E+00 8.4964E+01 7.9631E+01 4.0074E+01 3.1405E+01 - 1.4125E+00 6.3425E+01 5.8983E+01 2.9279E+01 2.2784E+01 - 1.5849E+00 4.7312E+01 4.3441E+01 2.1101E+01 1.6673E+01 - 1.7783E+00 3.4884E+01 3.1912E+01 1.5165E+01 1.1932E+01 - 1.9953E+00 2.5756E+01 2.3163E+01 1.0877E+01 8.4580E+00 - 2.2387E+00 1.8987E+01 1.6765E+01 7.7930E+00 6.0524E+00 - 2.5119E+00 1.3903E+01 1.1963E+01 5.4560E+00 4.2121E+00 - 2.8184E+00 1.0148E+01 8.5894E+00 3.8167E+00 2.9310E+00 - 3.1623E+00 7.3415E+00 6.2857E+00 2.6941E+00 2.0252E+00 - 3.5481E+00 5.3263E+00 4.5008E+00 1.8751E+00 1.3955E+00 - 3.9811E+00 3.8602E+00 3.2329E+00 1.2835E+00 9.6215E-01 - 4.4668E+00 2.7885E+00 2.3342E+00 8.8532E-01 6.6363E-01 - 5.0119E+00 2.0093E+00 1.6711E+00 6.0735E-01 4.4623E-01 - 5.6234E+00 1.4536E+00 1.1811E+00 4.1036E-01 3.0123E-01 - 6.3096E+00 1.0452E+00 8.3623E-01 2.8254E-01 2.0241E-01 - 7.0795E+00 7.5035E-01 5.9525E-01 1.9022E-01 1.3917E-01 - 7.9433E+00 5.3605E-01 4.2669E-01 1.2564E-01 9.6512E-02 - 8.9125E+00 3.8487E-01 3.0491E-01 8.6239E-02 6.4652E-02 - 1.0000E+01 2.7487E-01 2.1390E-01 5.7195E-02 4.3266E-02 - 1.1220E+01 1.9556E-01 1.5129E-01 3.7908E-02 2.9301E-02 - 1.2589E+01 1.3972E-01 1.0723E-01 2.5535E-02 1.9869E-02 - 1.4125E+01 9.9783E-02 7.5660E-02 1.6991E-02 1.3078E-02 - 1.5849E+01 7.0924E-02 5.3786E-02 1.1256E-02 8.6110E-03 - 1.7783E+01 5.0523E-02 3.8331E-02 7.6315E-03 5.7420E-03 - 1.9953E+01 3.5892E-02 2.6849E-02 4.9749E-03 3.8236E-03 - 2.2387E+01 2.5589E-02 1.8807E-02 3.3105E-03 2.5135E-03 - 2.5119E+01 1.8142E-02 1.3523E-02 2.2154E-03 1.6861E-03 - 2.8184E+01 1.2979E-02 9.6312E-03 1.4760E-03 1.1367E-03 - 3.1623E+01 9.2424E-03 6.7886E-03 9.7571E-04 7.6795E-04 - 3.5481E+01 6.5486E-03 4.8004E-03 6.5431E-04 5.1954E-04 - 3.9811E+01 4.6430E-03 3.3765E-03 4.4327E-04 3.4907E-04 - 4.4668E+01 3.2802E-03 2.3799E-03 2.9452E-04 2.3248E-04 - 5.0119E+01 2.3092E-03 1.6758E-03 1.9499E-04 1.5834E-04 - 5.6234E+01 1.6413E-03 1.1776E-03 1.3175E-04 1.0494E-04 - 6.3096E+01 1.1583E-03 8.2580E-04 8.9526E-05 6.9224E-05 - 7.0795E+01 8.1200E-04 5.7767E-04 5.8782E-05 4.7284E-05 - 7.9433E+01 5.7621E-04 4.0609E-04 3.9138E-05 3.2043E-05 - 8.9125E+01 4.0566E-04 2.8276E-04 2.6442E-05 2.1485E-05 - 1.0000E+02 2.8368E-04 1.9754E-04 1.7967E-05 1.4618E-05 - 1.1220E+02 1.9872E-04 1.3756E-04 1.2060E-05 9.8391E-06 - 1.2589E+02 1.3851E-04 9.5875E-05 8.1657E-06 6.6574E-06 - 1.4125E+02 9.7116E-05 6.6567E-05 5.5287E-06 4.4558E-06 - 1.5849E+02 6.7961E-05 4.6437E-05 3.8010E-06 3.0301E-06 - 1.7783E+02 4.7535E-05 3.2400E-05 2.5578E-06 2.0354E-06 - 1.9953E+02 3.3293E-05 2.2247E-05 1.6854E-06 1.3636E-06 - 2.2387E+02 2.3350E-05 1.5396E-05 1.1701E-06 9.3448E-07 - 2.5119E+02 1.6324E-05 1.0794E-05 8.2434E-07 6.2167E-07 - 2.8184E+02 1.1281E-05 7.4539E-06 5.5784E-07 4.1577E-07 - 3.1623E+02 7.8894E-06 5.1433E-06 3.6433E-07 2.9409E-07 - 3.5481E+02 5.4668E-06 3.5465E-06 2.5099E-07 1.9889E-07 - 3.9811E+02 3.7961E-06 2.4507E-06 1.6962E-07 1.3373E-07 - 4.4668E+02 2.6391E-06 1.6893E-06 1.1308E-07 9.1693E-08 - 5.0119E+02 1.8315E-06 1.1557E-06 7.6922E-08 6.1440E-08 - 5.6234E+02 1.2749E-06 8.0298E-07 5.2079E-08 4.0320E-08 - 6.3096E+02 8.7567E-07 5.4739E-07 3.4598E-08 2.6470E-08 - 7.0795E+02 6.0292E-07 3.7516E-07 2.3052E-08 1.8024E-08 - 7.9433E+02 4.1469E-07 2.5798E-07 1.5685E-08 1.2674E-08 - 8.9125E+02 2.8258E-07 1.7568E-07 1.0609E-08 8.2952E-09 - 1.0000E+03 1.9526E-07 1.2000E-07 7.0601E-09 5.5404E-09 - 1.1220E+03 1.3256E-07 8.1151E-08 4.7779E-09 3.7197E-09 - 1.2589E+03 9.1128E-08 5.4821E-08 3.2005E-09 2.4437E-09 - 1.4125E+03 6.2195E-08 3.7098E-08 2.1402E-09 1.6617E-09 - 1.5849E+03 4.2041E-08 2.5304E-08 1.4503E-09 1.1105E-09 - 1.7783E+03 2.8571E-08 1.6981E-08 9.7599E-10 7.1004E-10 - 1.9953E+03 1.9148E-08 1.1369E-08 6.2316E-10 4.5480E-10 - 2.2387E+03 1.2950E-08 7.6762E-09 4.1232E-10 3.0024E-10 - 2.5119E+03 8.7367E-09 5.2308E-09 2.5432E-10 1.9526E-10 - 2.8184E+03 5.8534E-09 3.4647E-09 1.8019E-10 1.2682E-10 - 3.1623E+03 3.9866E-09 2.3152E-09 1.1990E-10 8.7651E-11 - 3.5481E+03 2.6075E-09 1.5134E-09 7.7723E-11 5.7877E-11 - 3.9811E+03 1.7456E-09 9.9772E-10 5.2368E-11 3.7220E-11 - 4.4668E+03 1.1484E-09 6.5047E-10 3.4096E-11 2.3967E-11 - 5.0119E+03 7.6715E-10 4.3774E-10 2.2512E-11 1.5775E-11 - 5.6234E+03 5.1788E-10 2.9112E-10 1.5193E-11 1.0407E-11 - 6.3096E+03 3.3351E-10 1.8827E-10 1.0018E-11 7.9178E-12 - 7.0795E+03 2.2100E-10 1.2163E-10 6.5776E-12 5.4131E-12 - 7.9433E+03 1.4698E-10 8.0423E-11 3.9872E-12 3.0269E-12 - 8.9125E+03 9.6929E-11 5.3489E-11 2.6129E-12 1.8556E-12 - 1.0000E+04 6.4030E-11 3.4854E-11 1.8466E-12 1.2480E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0996E+04 1.0957E+04 5.2651E+03 5.0953E+03 - 1.1220E-01 9.7362E+03 9.6638E+03 4.6932E+03 4.4603E+03 - 1.2589E-01 8.5522E+03 8.4598E+03 4.1430E+03 3.8743E+03 - 1.4125E-01 7.4450E+03 7.3729E+03 3.5856E+03 3.3554E+03 - 1.5849E-01 6.4188E+03 6.3499E+03 3.0887E+03 2.8770E+03 - 1.7783E-01 5.4743E+03 5.3923E+03 2.6421E+03 2.4250E+03 - 1.9953E-01 4.6219E+03 4.5238E+03 2.2428E+03 2.0324E+03 - 2.2387E-01 3.8335E+03 3.7466E+03 1.8864E+03 1.6819E+03 - 2.5119E-01 3.1347E+03 3.0820E+03 1.5611E+03 1.3790E+03 - 2.8184E-01 2.5502E+03 2.5056E+03 1.2761E+03 1.1181E+03 - 3.1623E-01 2.0477E+03 2.0035E+03 1.0364E+03 8.8835E+02 - 3.5481E-01 1.6254E+03 1.5928E+03 8.3354E+02 7.0620E+02 - 3.9811E-01 1.2862E+03 1.2593E+03 6.6088E+02 5.5793E+02 - 4.4668E-01 1.0121E+03 9.8302E+02 5.1506E+02 4.3265E+02 - 5.0119E-01 7.8562E+02 7.5931E+02 3.9935E+02 3.3100E+02 - 5.6234E-01 6.0264E+02 5.8673E+02 3.0984E+02 2.5455E+02 - 6.3096E-01 4.6327E+02 4.4722E+02 2.3616E+02 1.9429E+02 - 7.0795E-01 3.5246E+02 3.3816E+02 1.7932E+02 1.4576E+02 - 7.9433E-01 2.6506E+02 2.5573E+02 1.3514E+02 1.0833E+02 - 8.9125E-01 2.0070E+02 1.9251E+02 9.9542E+01 8.0775E+01 - 1.0000E+00 1.5130E+02 1.4369E+02 7.4109E+01 5.8650E+01 - 1.1220E+00 1.1358E+02 1.0739E+02 5.4690E+01 4.3048E+01 - 1.2589E+00 8.5118E+01 7.9376E+01 3.9915E+01 3.1501E+01 - 1.4125E+00 6.3427E+01 5.8348E+01 2.9201E+01 2.2875E+01 - 1.5849E+00 4.7154E+01 4.2943E+01 2.1052E+01 1.6356E+01 - 1.7783E+00 3.4892E+01 3.1451E+01 1.5103E+01 1.1821E+01 - 1.9953E+00 2.5722E+01 2.2937E+01 1.0807E+01 8.5127E+00 - 2.2387E+00 1.8919E+01 1.6677E+01 7.6340E+00 5.9437E+00 - 2.5119E+00 1.3748E+01 1.2024E+01 5.3832E+00 4.1417E+00 - 2.8184E+00 1.0072E+01 8.7150E+00 3.7729E+00 2.8853E+00 - 3.1623E+00 7.3783E+00 6.2479E+00 2.6838E+00 2.0324E+00 - 3.5481E+00 5.3389E+00 4.5015E+00 1.8525E+00 1.4092E+00 - 3.9811E+00 3.8574E+00 3.2558E+00 1.2853E+00 9.7882E-01 - 4.4668E+00 2.7806E+00 2.3243E+00 8.8037E-01 6.6405E-01 - 5.0119E+00 1.9993E+00 1.6495E+00 5.9862E-01 4.5389E-01 - 5.6234E+00 1.4588E+00 1.1828E+00 4.0939E-01 3.1479E-01 - 6.3096E+00 1.0476E+00 8.4899E-01 2.7642E-01 2.1189E-01 - 7.0795E+00 7.4014E-01 6.0231E-01 1.8762E-01 1.4018E-01 - 7.9433E+00 5.3519E-01 4.1936E-01 1.2883E-01 9.5641E-02 - 8.9125E+00 3.8650E-01 2.9433E-01 8.4340E-02 6.4702E-02 - 1.0000E+01 2.7450E-01 2.1394E-01 5.7904E-02 4.3616E-02 - 1.1220E+01 1.9747E-01 1.5221E-01 3.8403E-02 2.9402E-02 - 1.2589E+01 1.4145E-01 1.0812E-01 2.5796E-02 1.9601E-02 - 1.4125E+01 1.0056E-01 7.7169E-02 1.7207E-02 1.3016E-02 - 1.5849E+01 7.1677E-02 5.4883E-02 1.1402E-02 8.5443E-03 - 1.7783E+01 5.1381E-02 3.8965E-02 7.5385E-03 5.7062E-03 - 1.9953E+01 3.6413E-02 2.7690E-02 5.1298E-03 3.8224E-03 - 2.2387E+01 2.5910E-02 1.9480E-02 3.4920E-03 2.6180E-03 - 2.5119E+01 1.8489E-02 1.3487E-02 2.3724E-03 1.8308E-03 - 2.8184E+01 1.3267E-02 9.7597E-03 1.5330E-03 1.1726E-03 - 3.1623E+01 9.2178E-03 6.7992E-03 9.8916E-04 7.6792E-04 - 3.5481E+01 6.5446E-03 4.7961E-03 6.5783E-04 5.1427E-04 - 3.9811E+01 4.6332E-03 3.3717E-03 4.3712E-04 3.4262E-04 - 4.4668E+01 3.2785E-03 2.3728E-03 2.9469E-04 2.3411E-04 - 5.0119E+01 2.3235E-03 1.6694E-03 1.9742E-04 1.6041E-04 - 5.6234E+01 1.6366E-03 1.1712E-03 1.2973E-04 1.0701E-04 - 6.3096E+01 1.1542E-03 8.1742E-04 8.7657E-05 7.1407E-05 - 7.0795E+01 8.1577E-04 5.7446E-04 5.8594E-05 4.7823E-05 - 7.9433E+01 5.7197E-04 4.0213E-04 3.8495E-05 3.3088E-05 - 8.9125E+01 4.0155E-04 2.8210E-04 2.6257E-05 2.2103E-05 - 1.0000E+02 2.8303E-04 1.9780E-04 1.7959E-05 1.4617E-05 - 1.1220E+02 1.9886E-04 1.3750E-04 1.2050E-05 9.8481E-06 - 1.2589E+02 1.3919E-04 9.5466E-05 8.1463E-06 6.6704E-06 - 1.4125E+02 9.7330E-05 6.6793E-05 5.5488E-06 4.4960E-06 - 1.5849E+02 6.8450E-05 4.6634E-05 3.7846E-06 3.0096E-06 - 1.7783E+02 4.7830E-05 3.2167E-05 2.5881E-06 2.0495E-06 - 1.9953E+02 3.3074E-05 2.2316E-05 1.7397E-06 1.4095E-06 - 2.2387E+02 2.3076E-05 1.5550E-05 1.1526E-06 9.4382E-07 - 2.5119E+02 1.6116E-05 1.0810E-05 7.6829E-07 6.2116E-07 - 2.8184E+02 1.1255E-05 7.4638E-06 5.3402E-07 4.2669E-07 - 3.1623E+02 7.9106E-06 5.1414E-06 3.6844E-07 2.9316E-07 - 3.5481E+02 5.4899E-06 3.5318E-06 2.4673E-07 1.9625E-07 - 3.9811E+02 3.7971E-06 2.4389E-06 1.7029E-07 1.3387E-07 - 4.4668E+02 2.6293E-06 1.6760E-06 1.1273E-07 9.1512E-08 - 5.0119E+02 1.8209E-06 1.1530E-06 7.4877E-08 5.9710E-08 - 5.6234E+02 1.2699E-06 8.0308E-07 5.1067E-08 4.1140E-08 - 6.3096E+02 8.7599E-07 5.4829E-07 3.4803E-08 2.7974E-08 - 7.0795E+02 6.0467E-07 3.7296E-07 2.3459E-08 1.8116E-08 - 7.9433E+02 4.1608E-07 2.5409E-07 1.5726E-08 1.1656E-08 - 8.9125E+02 2.8651E-07 1.7406E-07 1.0661E-08 7.9933E-09 - 1.0000E+03 1.9762E-07 1.2022E-07 6.9606E-09 5.5368E-09 - 1.1220E+03 1.3313E-07 8.1023E-08 4.8299E-09 3.5905E-09 - 1.2589E+03 9.0645E-08 5.4747E-08 3.3060E-09 2.3612E-09 - 1.4125E+03 6.2065E-08 3.7196E-08 2.2124E-09 1.6165E-09 - 1.5849E+03 4.1913E-08 2.5344E-08 1.4819E-09 1.0531E-09 - 1.7783E+03 2.8294E-08 1.6819E-08 9.2965E-10 6.8695E-10 - 1.9953E+03 1.9142E-08 1.1235E-08 6.0545E-10 4.6298E-10 - 2.2387E+03 1.2981E-08 7.5280E-09 4.1218E-10 3.1376E-10 - 2.5119E+03 8.7224E-09 5.0794E-09 2.7999E-10 1.8323E-10 - 2.8184E+03 5.8901E-09 3.3979E-09 1.8565E-10 1.2684E-10 - 3.1623E+03 4.0005E-09 2.2908E-09 1.2503E-10 8.7643E-11 - 3.5481E+03 2.5904E-09 1.4839E-09 8.1942E-11 5.8068E-11 - 3.9811E+03 1.7154E-09 9.8237E-10 5.3892E-11 3.9402E-11 - 4.4668E+03 1.1413E-09 6.5346E-10 3.4619E-11 2.6588E-11 - 5.0119E+03 7.6754E-10 4.3251E-10 2.1753E-11 1.6905E-11 - 5.6234E+03 5.1283E-10 2.8312E-10 1.5628E-11 1.0754E-11 - 6.3096E+03 3.3142E-10 1.8556E-10 9.7295E-12 7.0182E-12 - 7.0795E+03 2.2132E-10 1.2302E-10 5.9267E-12 4.5940E-12 - 7.9433E+03 1.4661E-10 8.2013E-11 4.1491E-12 3.0153E-12 - 8.9125E+03 9.6637E-11 5.3733E-11 2.8977E-12 2.1037E-12 - 1.0000E+04 6.4654E-11 3.5115E-11 1.8111E-12 1.2847E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1079E+04 1.1032E+04 5.3521E+03 5.0743E+03 - 1.1220E-01 9.7852E+03 9.7320E+03 4.7758E+03 4.4665E+03 - 1.2589E-01 8.5901E+03 8.5625E+03 4.2114E+03 3.8818E+03 - 1.4125E-01 7.4932E+03 7.4374E+03 3.6500E+03 3.3481E+03 - 1.5849E-01 6.4751E+03 6.3852E+03 3.1470E+03 2.8618E+03 - 1.7783E-01 5.5042E+03 5.4466E+03 2.6903E+03 2.4227E+03 - 1.9953E-01 4.6169E+03 4.5800E+03 2.2704E+03 2.0311E+03 - 2.2387E-01 3.8337E+03 3.8031E+03 1.9018E+03 1.6885E+03 - 2.5119E-01 3.1539E+03 3.1158E+03 1.5827E+03 1.3772E+03 - 2.8184E-01 2.5522E+03 2.5196E+03 1.2928E+03 1.1140E+03 - 3.1623E-01 2.0444E+03 2.0180E+03 1.0427E+03 8.9229E+02 - 3.5481E-01 1.6339E+03 1.6086E+03 8.3440E+02 7.0942E+02 - 3.9811E-01 1.2924E+03 1.2685E+03 6.6337E+02 5.6000E+02 - 4.4668E-01 1.0133E+03 9.8821E+02 5.2000E+02 4.3400E+02 - 5.0119E-01 7.8590E+02 7.6574E+02 4.0253E+02 3.3247E+02 - 5.6234E-01 6.0467E+02 5.8758E+02 3.0977E+02 2.5388E+02 - 6.3096E-01 4.6170E+02 4.4577E+02 2.3682E+02 1.9299E+02 - 7.0795E-01 3.4969E+02 3.3865E+02 1.7934E+02 1.4620E+02 - 7.9433E-01 2.6503E+02 2.5623E+02 1.3479E+02 1.0935E+02 - 8.9125E-01 2.0092E+02 1.9152E+02 1.0026E+02 7.9828E+01 - 1.0000E+00 1.5119E+02 1.4250E+02 7.4276E+01 5.8744E+01 - 1.1220E+00 1.1381E+02 1.0641E+02 5.4647E+01 4.2990E+01 - 1.2589E+00 8.4820E+01 7.9294E+01 4.0261E+01 3.1240E+01 - 1.4125E+00 6.2987E+01 5.8181E+01 2.9083E+01 2.2638E+01 - 1.5849E+00 4.7118E+01 4.2715E+01 2.0753E+01 1.6397E+01 - 1.7783E+00 3.5124E+01 3.1515E+01 1.4993E+01 1.1734E+01 - 1.9953E+00 2.5857E+01 2.2965E+01 1.0868E+01 8.2582E+00 - 2.2387E+00 1.8894E+01 1.6584E+01 7.7726E+00 5.8427E+00 - 2.5119E+00 1.3827E+01 1.1978E+01 5.5261E+00 4.1555E+00 - 2.8184E+00 1.0097E+01 8.6597E+00 3.8796E+00 2.8288E+00 - 3.1623E+00 7.3465E+00 6.2965E+00 2.7107E+00 2.0243E+00 - 3.5481E+00 5.3561E+00 4.5269E+00 1.8889E+00 1.3995E+00 - 3.9811E+00 3.8565E+00 3.2357E+00 1.2895E+00 9.6431E-01 - 4.4668E+00 2.7647E+00 2.3163E+00 8.8952E-01 6.6311E-01 - 5.0119E+00 2.0062E+00 1.6495E+00 6.0551E-01 4.5325E-01 - 5.6234E+00 1.4549E+00 1.1655E+00 4.0729E-01 3.0938E-01 - 6.3096E+00 1.0447E+00 8.3204E-01 2.7637E-01 2.1307E-01 - 7.0795E+00 7.4530E-01 5.9876E-01 1.8727E-01 1.4505E-01 - 7.9433E+00 5.3277E-01 4.2212E-01 1.2824E-01 9.5352E-02 - 8.9125E+00 3.8429E-01 2.9771E-01 8.4795E-02 6.4340E-02 - 1.0000E+01 2.7530E-01 2.1182E-01 5.6880E-02 4.3112E-02 - 1.1220E+01 1.9552E-01 1.5052E-01 3.8371E-02 2.8856E-02 - 1.2589E+01 1.3933E-01 1.0675E-01 2.5546E-02 1.9080E-02 - 1.4125E+01 9.9911E-02 7.5744E-02 1.6991E-02 1.2659E-02 - 1.5849E+01 7.0962E-02 5.3212E-02 1.1509E-02 8.4338E-03 - 1.7783E+01 5.0250E-02 3.7640E-02 7.5911E-03 5.6726E-03 - 1.9953E+01 3.6047E-02 2.6884E-02 4.8960E-03 3.8723E-03 - 2.2387E+01 2.5722E-02 1.9215E-02 3.2693E-03 2.5952E-03 - 2.5119E+01 1.8273E-02 1.3523E-02 2.2210E-03 1.7957E-03 - 2.8184E+01 1.2934E-02 9.6324E-03 1.5154E-03 1.2446E-03 - 3.1623E+01 9.1963E-03 6.7672E-03 9.8446E-04 7.6992E-04 - 3.5481E+01 6.5048E-03 4.7750E-03 6.4929E-04 5.1318E-04 - 3.9811E+01 4.6238E-03 3.3681E-03 4.3714E-04 3.4710E-04 - 4.4668E+01 3.2934E-03 2.3755E-03 2.9917E-04 2.3224E-04 - 5.0119E+01 2.3180E-03 1.6714E-03 2.0096E-04 1.5816E-04 - 5.6234E+01 1.6349E-03 1.1785E-03 1.3154E-04 1.0535E-04 - 6.3096E+01 1.1566E-03 8.2455E-04 8.7661E-05 7.0523E-05 - 7.0795E+01 8.1234E-04 5.7736E-04 5.9319E-05 4.6967E-05 - 7.9433E+01 5.7026E-04 4.0731E-04 3.9933E-05 3.1628E-05 - 8.9125E+01 4.0126E-04 2.8287E-04 2.6855E-05 2.1640E-05 - 1.0000E+02 2.8215E-04 1.9707E-04 1.8027E-05 1.4585E-05 - 1.1220E+02 1.9829E-04 1.3817E-04 1.2137E-05 9.7463E-06 - 1.2589E+02 1.3894E-04 9.6108E-05 7.9722E-06 6.6930E-06 - 1.4125E+02 9.7286E-05 6.6614E-05 5.5081E-06 4.5820E-06 - 1.5849E+02 6.8364E-05 4.6194E-05 3.8010E-06 3.0636E-06 - 1.7783E+02 4.8068E-05 3.1991E-05 2.5326E-06 2.0674E-06 - 1.9953E+02 3.3445E-05 2.2349E-05 1.7319E-06 1.4112E-06 - 2.2387E+02 2.3274E-05 1.5558E-05 1.1728E-06 9.3821E-07 - 2.5119E+02 1.6363E-05 1.0734E-05 7.8022E-07 6.3031E-07 - 2.8184E+02 1.1398E-05 7.5033E-06 5.3683E-07 4.4486E-07 - 3.1623E+02 7.8890E-06 5.1565E-06 3.6256E-07 2.9267E-07 - 3.5481E+02 5.4794E-06 3.5465E-06 2.4400E-07 1.9633E-07 - 3.9811E+02 3.8134E-06 2.4471E-06 1.6440E-07 1.3172E-07 - 4.4668E+02 2.6425E-06 1.6857E-06 1.1187E-07 8.7636E-08 - 5.0119E+02 1.8221E-06 1.1588E-06 7.7243E-08 5.8909E-08 - 5.6234E+02 1.2674E-06 8.0129E-07 5.2444E-08 4.0325E-08 - 6.3096E+02 8.6899E-07 5.4708E-07 3.4754E-08 2.7241E-08 - 7.0795E+02 6.0091E-07 3.7453E-07 2.3001E-08 1.7992E-08 - 7.9433E+02 4.1365E-07 2.5588E-07 1.5544E-08 1.2058E-08 - 8.9125E+02 2.8390E-07 1.7471E-07 1.0759E-08 8.1395E-09 - 1.0000E+03 1.9599E-07 1.1949E-07 7.1466E-09 5.3106E-09 - 1.1220E+03 1.3338E-07 8.0480E-08 4.6786E-09 3.6247E-09 - 1.2589E+03 9.0766E-08 5.4560E-08 3.1067E-09 2.4386E-09 - 1.4125E+03 6.1832E-08 3.6986E-08 2.1099E-09 1.5908E-09 - 1.5849E+03 4.1742E-08 2.5233E-08 1.4145E-09 9.9868E-10 - 1.7783E+03 2.8150E-08 1.6957E-08 9.7643E-10 6.5321E-10 - 1.9953E+03 1.9085E-08 1.1463E-08 6.2521E-10 4.6989E-10 - 2.2387E+03 1.2958E-08 7.6602E-09 4.0480E-10 3.1861E-10 - 2.5119E+03 8.7744E-09 5.0686E-09 2.6381E-10 2.0788E-10 - 2.8184E+03 5.8439E-09 3.3799E-09 1.8675E-10 1.2806E-10 - 3.1623E+03 3.9993E-09 2.3166E-09 1.2030E-10 9.1175E-11 - 3.5481E+03 2.6299E-09 1.4913E-09 7.8695E-11 5.9565E-11 - 3.9811E+03 1.7391E-09 9.8637E-10 4.9946E-11 3.6323E-11 - 4.4668E+03 1.1527E-09 6.5851E-10 3.3769E-11 2.1961E-11 - 5.0119E+03 7.6474E-10 4.3609E-10 2.3197E-11 1.4279E-11 - 5.6234E+03 5.0323E-10 2.8916E-10 1.4706E-11 1.1078E-11 - 6.3096E+03 3.3766E-10 1.9223E-10 9.7683E-12 6.9954E-12 - 7.0795E+03 2.2171E-10 1.2586E-10 6.4272E-12 4.4389E-12 - 7.9433E+03 1.4407E-10 8.1389E-11 4.4263E-12 2.9891E-12 - 8.9125E+03 9.6230E-11 5.3144E-11 2.8086E-12 1.8955E-12 - 1.0000E+04 6.3432E-11 3.4964E-11 1.7167E-12 1.1896E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1077E+04 1.1152E+04 5.4821E+03 5.0756E+03 - 1.1220E-01 9.7691E+03 9.8559E+03 4.8753E+03 4.4677E+03 - 1.2589E-01 8.6035E+03 8.6489E+03 4.2665E+03 3.9037E+03 - 1.4125E-01 7.5175E+03 7.5151E+03 3.6987E+03 3.3632E+03 - 1.5849E-01 6.4674E+03 6.4709E+03 3.1896E+03 2.8679E+03 - 1.7783E-01 5.5125E+03 5.4989E+03 2.7312E+03 2.4299E+03 - 1.9953E-01 4.6503E+03 4.6086E+03 2.3157E+03 2.0323E+03 - 2.2387E-01 3.8552E+03 3.8231E+03 1.9272E+03 1.6815E+03 - 2.5119E-01 3.1604E+03 3.1421E+03 1.5938E+03 1.3822E+03 - 2.8184E-01 2.5563E+03 2.5428E+03 1.3054E+03 1.1172E+03 - 3.1623E-01 2.0541E+03 2.0395E+03 1.0524E+03 8.9013E+02 - 3.5481E-01 1.6384E+03 1.6267E+03 8.4382E+02 7.0238E+02 - 3.9811E-01 1.2948E+03 1.2753E+03 6.6701E+02 5.5149E+02 - 4.4668E-01 1.0149E+03 9.9142E+02 5.2306E+02 4.3133E+02 - 5.0119E-01 7.8316E+02 7.6623E+02 4.0824E+02 3.3336E+02 - 5.6234E-01 6.0039E+02 5.8626E+02 3.1394E+02 2.5273E+02 - 6.3096E-01 4.6053E+02 4.4783E+02 2.3854E+02 1.9090E+02 - 7.0795E-01 3.5085E+02 3.3900E+02 1.7994E+02 1.4455E+02 - 7.9433E-01 2.6651E+02 2.5619E+02 1.3389E+02 1.0816E+02 - 8.9125E-01 2.0004E+02 1.9278E+02 9.9840E+01 8.0287E+01 - 1.0000E+00 1.5148E+02 1.4350E+02 7.4237E+01 5.9241E+01 - 1.1220E+00 1.1358E+02 1.0674E+02 5.4896E+01 4.3381E+01 - 1.2589E+00 8.4731E+01 7.9254E+01 4.0029E+01 3.1391E+01 - 1.4125E+00 6.3557E+01 5.8701E+01 2.8881E+01 2.2865E+01 - 1.5849E+00 4.7482E+01 4.3192E+01 2.1093E+01 1.6451E+01 - 1.7783E+00 3.4965E+01 3.1755E+01 1.5197E+01 1.1769E+01 - 1.9953E+00 2.5631E+01 2.3204E+01 1.0708E+01 8.5033E+00 - 2.2387E+00 1.8869E+01 1.6695E+01 7.6051E+00 6.0057E+00 - 2.5119E+00 1.3827E+01 1.1986E+01 5.4110E+00 4.1558E+00 - 2.8184E+00 1.0091E+01 8.6153E+00 3.7993E+00 2.8971E+00 - 3.1623E+00 7.3431E+00 6.2834E+00 2.6713E+00 2.0437E+00 - 3.5481E+00 5.3273E+00 4.4991E+00 1.8635E+00 1.4215E+00 - 3.9811E+00 3.8674E+00 3.2376E+00 1.2808E+00 9.7812E-01 - 4.4668E+00 2.7923E+00 2.3283E+00 8.6902E-01 6.6956E-01 - 5.0119E+00 2.0290E+00 1.6675E+00 5.9276E-01 4.6105E-01 - 5.6234E+00 1.4627E+00 1.1821E+00 4.0879E-01 3.1095E-01 - 6.3096E+00 1.0352E+00 8.4573E-01 2.7903E-01 2.1235E-01 - 7.0795E+00 7.4083E-01 6.0091E-01 1.8827E-01 1.4432E-01 - 7.9433E+00 5.3448E-01 4.2522E-01 1.2648E-01 9.7594E-02 - 8.9125E+00 3.8667E-01 3.0104E-01 8.4038E-02 6.5581E-02 - 1.0000E+01 2.7601E-01 2.1368E-01 5.6858E-02 4.2937E-02 - 1.1220E+01 1.9564E-01 1.5109E-01 3.8002E-02 2.8487E-02 - 1.2589E+01 1.3936E-01 1.0660E-01 2.5307E-02 1.8726E-02 - 1.4125E+01 9.9853E-02 7.5671E-02 1.6762E-02 1.2599E-02 - 1.5849E+01 7.0542E-02 5.3592E-02 1.1236E-02 8.7045E-03 - 1.7783E+01 5.0189E-02 3.8068E-02 7.5184E-03 5.7975E-03 - 1.9953E+01 3.6049E-02 2.7076E-02 5.0017E-03 3.8357E-03 - 2.2387E+01 2.5736E-02 1.9053E-02 3.2590E-03 2.5463E-03 - 2.5119E+01 1.8100E-02 1.3532E-02 2.1351E-03 1.7264E-03 - 2.8184E+01 1.2816E-02 9.6612E-03 1.4501E-03 1.1757E-03 - 3.1623E+01 9.2090E-03 6.7507E-03 9.8677E-04 7.7124E-04 - 3.5481E+01 6.5351E-03 4.7648E-03 6.5649E-04 5.1748E-04 - 3.9811E+01 4.6351E-03 3.3552E-03 4.3701E-04 3.5074E-04 - 4.4668E+01 3.2659E-03 2.3652E-03 2.9025E-04 2.3523E-04 - 5.0119E+01 2.3101E-03 1.6712E-03 1.9576E-04 1.5868E-04 - 5.6234E+01 1.6411E-03 1.1709E-03 1.3035E-04 1.0670E-04 - 6.3096E+01 1.1602E-03 8.1905E-04 8.7908E-05 7.0603E-05 - 7.0795E+01 8.1613E-04 5.7692E-04 6.0215E-05 4.6581E-05 - 7.9433E+01 5.7095E-04 4.0287E-04 3.9399E-05 3.1063E-05 - 8.9125E+01 3.9944E-04 2.8042E-04 2.6250E-05 2.1358E-05 - 1.0000E+02 2.8167E-04 1.9672E-04 1.7816E-05 1.4443E-05 - 1.1220E+02 1.9766E-04 1.3715E-04 1.2036E-05 9.8418E-06 - 1.2589E+02 1.3924E-04 9.5948E-05 8.1063E-06 6.7671E-06 - 1.4125E+02 9.7351E-05 6.6730E-05 5.5419E-06 4.5523E-06 - 1.5849E+02 6.7847E-05 4.6481E-05 3.7379E-06 3.0297E-06 - 1.7783E+02 4.7572E-05 3.2313E-05 2.4937E-06 2.0580E-06 - 1.9953E+02 3.3312E-05 2.2301E-05 1.6968E-06 1.3889E-06 - 2.2387E+02 2.3175E-05 1.5532E-05 1.1648E-06 9.2439E-07 - 2.5119E+02 1.6222E-05 1.0836E-05 7.8793E-07 6.3698E-07 - 2.8184E+02 1.1380E-05 7.4424E-06 5.3672E-07 4.3031E-07 - 3.1623E+02 7.9226E-06 5.1415E-06 3.6494E-07 2.9306E-07 - 3.5481E+02 5.4677E-06 3.5453E-06 2.4683E-07 1.9832E-07 - 3.9811E+02 3.8073E-06 2.4308E-06 1.6545E-07 1.3248E-07 - 4.4668E+02 2.6507E-06 1.6774E-06 1.1290E-07 9.0473E-08 - 5.0119E+02 1.8325E-06 1.1651E-06 7.5687E-08 5.9929E-08 - 5.6234E+02 1.2713E-06 8.0336E-07 5.1660E-08 4.0148E-08 - 6.3096E+02 8.7354E-07 5.4803E-07 3.4699E-08 2.7351E-08 - 7.0795E+02 6.0072E-07 3.7343E-07 2.3158E-08 1.8640E-08 - 7.9433E+02 4.1509E-07 2.5686E-07 1.5689E-08 1.2397E-08 - 8.9125E+02 2.8635E-07 1.7465E-07 1.0657E-08 8.1471E-09 - 1.0000E+03 1.9713E-07 1.1946E-07 7.1076E-09 5.6699E-09 - 1.1220E+03 1.3294E-07 8.1175E-08 4.6837E-09 3.8417E-09 - 1.2589E+03 9.1009E-08 5.4860E-08 3.0334E-09 2.5375E-09 - 1.4125E+03 6.1726E-08 3.6886E-08 1.9813E-09 1.6639E-09 - 1.5849E+03 4.1653E-08 2.5144E-08 1.3477E-09 9.8960E-10 - 1.7783E+03 2.8249E-08 1.6882E-08 1.0152E-09 6.7881E-10 - 1.9953E+03 1.9495E-08 1.1378E-08 6.5186E-10 4.7740E-10 - 2.2387E+03 1.3081E-08 7.5962E-09 4.2529E-10 3.3128E-10 - 2.5119E+03 8.7644E-09 5.0714E-09 2.8933E-10 2.2133E-10 - 2.8184E+03 5.8778E-09 3.4258E-09 1.8603E-10 1.5028E-10 - 3.1623E+03 4.0107E-09 2.3202E-09 1.2148E-10 8.6234E-11 - 3.5481E+03 2.6150E-09 1.4994E-09 7.8412E-11 5.5114E-11 - 3.9811E+03 1.7432E-09 1.0086E-09 5.4160E-11 3.7829E-11 - 4.4668E+03 1.1588E-09 6.7259E-10 3.4849E-11 2.5269E-11 - 5.0119E+03 7.6636E-10 4.4398E-10 2.3167E-11 1.5516E-11 - 5.6234E+03 5.0862E-10 2.8956E-10 1.5825E-11 9.5647E-12 - 6.3096E+03 3.3516E-10 1.8908E-10 1.0038E-11 6.2445E-12 - 7.0795E+03 2.2143E-10 1.2582E-10 6.5994E-12 4.3263E-12 - 7.9433E+03 1.4685E-10 8.1905E-11 4.3212E-12 2.9795E-12 - 8.9125E+03 9.5672E-11 5.4521E-11 2.9259E-12 1.9528E-12 - 1.0000E+04 6.3122E-11 3.6179E-11 1.8144E-12 1.3146E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1059E+04 1.1264E+04 5.5546E+03 5.0492E+03 - 1.1220E-01 9.8017E+03 9.9462E+03 4.9213E+03 4.4339E+03 - 1.2589E-01 8.6241E+03 8.7546E+03 4.3262E+03 3.8631E+03 - 1.4125E-01 7.5017E+03 7.5919E+03 3.7731E+03 3.3286E+03 - 1.5849E-01 6.4766E+03 6.5148E+03 3.2525E+03 2.8413E+03 - 1.7783E-01 5.5387E+03 5.5623E+03 2.7723E+03 2.4059E+03 - 1.9953E-01 4.6498E+03 4.6673E+03 2.3401E+03 2.0109E+03 - 2.2387E-01 3.8521E+03 3.8547E+03 1.9662E+03 1.6673E+03 - 2.5119E-01 3.1636E+03 3.1610E+03 1.6247E+03 1.3708E+03 - 2.8184E-01 2.5641E+03 2.5666E+03 1.3231E+03 1.1108E+03 - 3.1623E-01 2.0531E+03 2.0566E+03 1.0735E+03 8.9037E+02 - 3.5481E-01 1.6340E+03 1.6305E+03 8.5707E+02 7.0030E+02 - 3.9811E-01 1.2935E+03 1.2767E+03 6.7760E+02 5.4783E+02 - 4.4668E-01 1.0147E+03 9.9462E+02 5.3485E+02 4.2992E+02 - 5.0119E-01 7.8103E+02 7.7222E+02 4.1128E+02 3.3440E+02 - 5.6234E-01 6.0012E+02 5.9303E+02 3.1518E+02 2.5549E+02 - 6.3096E-01 4.6174E+02 4.5200E+02 2.4175E+02 1.9079E+02 - 7.0795E-01 3.4975E+02 3.4215E+02 1.8270E+02 1.4385E+02 - 7.9433E-01 2.6504E+02 2.5723E+02 1.3643E+02 1.0828E+02 - 8.9125E-01 2.0142E+02 1.9191E+02 1.0109E+02 8.0455E+01 - 1.0000E+00 1.5169E+02 1.4400E+02 7.5138E+01 5.9192E+01 - 1.1220E+00 1.1366E+02 1.0700E+02 5.5180E+01 4.3374E+01 - 1.2589E+00 8.5036E+01 7.9626E+01 4.0202E+01 3.1470E+01 - 1.4125E+00 6.3723E+01 5.8870E+01 2.9027E+01 2.2515E+01 - 1.5849E+00 4.7409E+01 4.3299E+01 2.0952E+01 1.6205E+01 - 1.7783E+00 3.4944E+01 3.1654E+01 1.5234E+01 1.1780E+01 - 1.9953E+00 2.5574E+01 2.3099E+01 1.0835E+01 8.4339E+00 - 2.2387E+00 1.8833E+01 1.6758E+01 7.7035E+00 6.0453E+00 - 2.5119E+00 1.3914E+01 1.2107E+01 5.5022E+00 4.2488E+00 - 2.8184E+00 1.0151E+01 8.7540E+00 3.7387E+00 2.9225E+00 - 3.1623E+00 7.3919E+00 6.2741E+00 2.6494E+00 2.0590E+00 - 3.5481E+00 5.3809E+00 4.4671E+00 1.8649E+00 1.4278E+00 - 3.9811E+00 3.9088E+00 3.1891E+00 1.2888E+00 9.8378E-01 - 4.4668E+00 2.8214E+00 2.2975E+00 8.7874E-01 6.6905E-01 - 5.0119E+00 2.0300E+00 1.6462E+00 6.0242E-01 4.5815E-01 - 5.6234E+00 1.4529E+00 1.1638E+00 4.1175E-01 3.1164E-01 - 6.3096E+00 1.0413E+00 8.3427E-01 2.7981E-01 2.1196E-01 - 7.0795E+00 7.4969E-01 5.9764E-01 1.8827E-01 1.4362E-01 - 7.9433E+00 5.3630E-01 4.2157E-01 1.2451E-01 9.4349E-02 - 8.9125E+00 3.8399E-01 2.9586E-01 8.2837E-02 6.4234E-02 - 1.0000E+01 2.7291E-01 2.1217E-01 5.7043E-02 4.3182E-02 - 1.1220E+01 1.9468E-01 1.4973E-01 3.8369E-02 2.9146E-02 - 1.2589E+01 1.3854E-01 1.0594E-01 2.5568E-02 1.9419E-02 - 1.4125E+01 9.9036E-02 7.5179E-02 1.7223E-02 1.3043E-02 - 1.5849E+01 7.0815E-02 5.3776E-02 1.1382E-02 8.6518E-03 - 1.7783E+01 5.0833E-02 3.8192E-02 7.4453E-03 5.6942E-03 - 1.9953E+01 3.5857E-02 2.6729E-02 4.9176E-03 3.7718E-03 - 2.2387E+01 2.5430E-02 1.9014E-02 3.3159E-03 2.5461E-03 - 2.5119E+01 1.7943E-02 1.3245E-02 2.2408E-03 1.7028E-03 - 2.8184E+01 1.2652E-02 9.3113E-03 1.5107E-03 1.1308E-03 - 3.1623E+01 9.2075E-03 6.7778E-03 9.9622E-04 7.7125E-04 - 3.5481E+01 6.5329E-03 4.7802E-03 6.6282E-04 5.1667E-04 - 3.9811E+01 4.6210E-03 3.3808E-03 4.3786E-04 3.4381E-04 - 4.4668E+01 3.2811E-03 2.3898E-03 2.9120E-04 2.2933E-04 - 5.0119E+01 2.3229E-03 1.6749E-03 1.9441E-04 1.5586E-04 - 5.6234E+01 1.6354E-03 1.1693E-03 1.2986E-04 1.0493E-04 - 6.3096E+01 1.1549E-03 8.2430E-04 8.7067E-05 7.1699E-05 - 7.0795E+01 8.1265E-04 5.7593E-04 5.7996E-05 4.9173E-05 - 7.9433E+01 5.7221E-04 4.0138E-04 3.9842E-05 3.3543E-05 - 8.9125E+01 4.0313E-04 2.8049E-04 2.6781E-05 2.2030E-05 - 1.0000E+02 2.8291E-04 1.9712E-04 1.7785E-05 1.4693E-05 - 1.1220E+02 1.9858E-04 1.3755E-04 1.2062E-05 9.8679E-06 - 1.2589E+02 1.3873E-04 9.5664E-05 8.1044E-06 6.6952E-06 - 1.4125E+02 9.7038E-05 6.6649E-05 5.3935E-06 4.5071E-06 - 1.5849E+02 6.7615E-05 4.6438E-05 3.6627E-06 2.9840E-06 - 1.7783E+02 4.7100E-05 3.2280E-05 2.4900E-06 2.0399E-06 - 1.9953E+02 3.3245E-05 2.2403E-05 1.6768E-06 1.4246E-06 - 2.2387E+02 2.3310E-05 1.5449E-05 1.1355E-06 9.7053E-07 - 2.5119E+02 1.6245E-05 1.0728E-05 7.6397E-07 6.2631E-07 - 2.8184E+02 1.1361E-05 7.4765E-06 5.0354E-07 4.2480E-07 - 3.1623E+02 7.8953E-06 5.1543E-06 3.6400E-07 2.9557E-07 - 3.5481E+02 5.4625E-06 3.5235E-06 2.4914E-07 2.0120E-07 - 3.9811E+02 3.7973E-06 2.4278E-06 1.6934E-07 1.3564E-07 - 4.4668E+02 2.6489E-06 1.6771E-06 1.1261E-07 9.1022E-08 - 5.0119E+02 1.8325E-06 1.1611E-06 7.6001E-08 5.9734E-08 - 5.6234E+02 1.2741E-06 8.0138E-07 5.1764E-08 3.9445E-08 - 6.3096E+02 8.7513E-07 5.4651E-07 3.4681E-08 2.5974E-08 - 7.0795E+02 6.0209E-07 3.7400E-07 2.3230E-08 1.7722E-08 - 7.9433E+02 4.1464E-07 2.5528E-07 1.5759E-08 1.1914E-08 - 8.9125E+02 2.8494E-07 1.7508E-07 1.0594E-08 8.1264E-09 - 1.0000E+03 1.9668E-07 1.2027E-07 6.8255E-09 5.5905E-09 - 1.1220E+03 1.3305E-07 8.1268E-08 4.6682E-09 3.7542E-09 - 1.2589E+03 9.0467E-08 5.4943E-08 3.2126E-09 2.5282E-09 - 1.4125E+03 6.1610E-08 3.7003E-08 2.1658E-09 1.6331E-09 - 1.5849E+03 4.2102E-08 2.4786E-08 1.4551E-09 1.0778E-09 - 1.7783E+03 2.8420E-08 1.6570E-08 9.6197E-10 7.1730E-10 - 1.9953E+03 1.9333E-08 1.1239E-08 6.2027E-10 4.6260E-10 - 2.2387E+03 1.3063E-08 7.5453E-09 4.2144E-10 3.1054E-10 - 2.5119E+03 8.6377E-09 5.0184E-09 2.8203E-10 2.1123E-10 - 2.8184E+03 5.7532E-09 3.3530E-09 1.8139E-10 1.3431E-10 - 3.1623E+03 3.9952E-09 2.3059E-09 1.1978E-10 8.9993E-11 - 3.5481E+03 2.5905E-09 1.5038E-09 8.0532E-11 5.9057E-11 - 3.9811E+03 1.7294E-09 9.9446E-10 5.5488E-11 3.9782E-11 - 4.4668E+03 1.1529E-09 6.5795E-10 3.6244E-11 2.4661E-11 - 5.0119E+03 7.6034E-10 4.3703E-10 2.2293E-11 1.4527E-11 - 5.6234E+03 5.0926E-10 2.8820E-10 1.3739E-11 9.0593E-12 - 6.3096E+03 3.3710E-10 1.8821E-10 9.4556E-12 6.8728E-12 - 7.0795E+03 2.2422E-10 1.2394E-10 6.2705E-12 4.4879E-12 - 7.9433E+03 1.4720E-10 8.2285E-11 4.1722E-12 2.9922E-12 - 8.9125E+03 9.6616E-11 5.3872E-11 2.6831E-12 2.0356E-12 - 1.0000E+04 6.3724E-11 3.4453E-11 1.7971E-12 1.2564E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1056E+04 1.1397E+04 5.5980E+03 4.9946E+03 - 1.1220E-01 9.7786E+03 1.0071E+04 4.9692E+03 4.4207E+03 - 1.2589E-01 8.6553E+03 8.8334E+03 4.3638E+03 3.8632E+03 - 1.4125E-01 7.5628E+03 7.6778E+03 3.8193E+03 3.3197E+03 - 1.5849E-01 6.4902E+03 6.5994E+03 3.2969E+03 2.8434E+03 - 1.7783E-01 5.5184E+03 5.6069E+03 2.8211E+03 2.3972E+03 - 1.9953E-01 4.6287E+03 4.7046E+03 2.3779E+03 2.0010E+03 - 2.2387E-01 3.8462E+03 3.8947E+03 1.9845E+03 1.6586E+03 - 2.5119E-01 3.1606E+03 3.1863E+03 1.6408E+03 1.3576E+03 - 2.8184E-01 2.5616E+03 2.5856E+03 1.3397E+03 1.1063E+03 - 3.1623E-01 2.0594E+03 2.0653E+03 1.0892E+03 8.8628E+02 - 3.5481E-01 1.6413E+03 1.6359E+03 8.6624E+02 7.0285E+02 - 3.9811E-01 1.2946E+03 1.2854E+03 6.7733E+02 5.5413E+02 - 4.4668E-01 1.0085E+03 9.9917E+02 5.3050E+02 4.2665E+02 - 5.0119E-01 7.8171E+02 7.7334E+02 4.1363E+02 3.2709E+02 - 5.6234E-01 6.0189E+02 5.9472E+02 3.1768E+02 2.5185E+02 - 6.3096E-01 4.5886E+02 4.5208E+02 2.4013E+02 1.9094E+02 - 7.0795E-01 3.5010E+02 3.4083E+02 1.8100E+02 1.4276E+02 - 7.9433E-01 2.6686E+02 2.5668E+02 1.3579E+02 1.0695E+02 - 8.9125E-01 2.0138E+02 1.9283E+02 1.0085E+02 7.9513E+01 - 1.0000E+00 1.5160E+02 1.4530E+02 7.4996E+01 5.8770E+01 - 1.1220E+00 1.1360E+02 1.0746E+02 5.4960E+01 4.3380E+01 - 1.2589E+00 8.5164E+01 7.9402E+01 4.0404E+01 3.1754E+01 - 1.4125E+00 6.3823E+01 5.8569E+01 2.9492E+01 2.2876E+01 - 1.5849E+00 4.7565E+01 4.3024E+01 2.1135E+01 1.6415E+01 - 1.7783E+00 3.4991E+01 3.1628E+01 1.4958E+01 1.1811E+01 - 1.9953E+00 2.5692E+01 2.3127E+01 1.0844E+01 8.4406E+00 - 2.2387E+00 1.8984E+01 1.6946E+01 7.7926E+00 5.8633E+00 - 2.5119E+00 1.3870E+01 1.2175E+01 5.4337E+00 4.1077E+00 - 2.8184E+00 1.0094E+01 8.7199E+00 3.8300E+00 2.9106E+00 - 3.1623E+00 7.3574E+00 6.2918E+00 2.7067E+00 2.0495E+00 - 3.5481E+00 5.3664E+00 4.5272E+00 1.8763E+00 1.4066E+00 - 3.9811E+00 3.8881E+00 3.2540E+00 1.2990E+00 9.7098E-01 - 4.4668E+00 2.7997E+00 2.3188E+00 8.9016E-01 6.7574E-01 - 5.0119E+00 2.0099E+00 1.6515E+00 6.0134E-01 4.5815E-01 - 5.6234E+00 1.4518E+00 1.1794E+00 4.1645E-01 3.0938E-01 - 6.3096E+00 1.0468E+00 8.4347E-01 2.8427E-01 2.0888E-01 - 7.0795E+00 7.4219E-01 6.0352E-01 1.8997E-01 1.4326E-01 - 7.9433E+00 5.2889E-01 4.2701E-01 1.2806E-01 9.7566E-02 - 8.9125E+00 3.8265E-01 3.0173E-01 8.3074E-02 6.5125E-02 - 1.0000E+01 2.7288E-01 2.1248E-01 5.7060E-02 4.3236E-02 - 1.1220E+01 1.9425E-01 1.4997E-01 3.8080E-02 2.9064E-02 - 1.2589E+01 1.3907E-01 1.0627E-01 2.5426E-02 1.9018E-02 - 1.4125E+01 9.9199E-02 7.5499E-02 1.7094E-02 1.2633E-02 - 1.5849E+01 7.0476E-02 5.3830E-02 1.1365E-02 8.6055E-03 - 1.7783E+01 5.0217E-02 3.8318E-02 7.5137E-03 5.8239E-03 - 1.9953E+01 3.5717E-02 2.7085E-02 4.9656E-03 3.8924E-03 - 2.2387E+01 2.5426E-02 1.9157E-02 3.3264E-03 2.5717E-03 - 2.5119E+01 1.8028E-02 1.3480E-02 2.1856E-03 1.6974E-03 - 2.8184E+01 1.2737E-02 9.4116E-03 1.4702E-03 1.1156E-03 - 3.1623E+01 9.2167E-03 6.7618E-03 9.8779E-04 7.6930E-04 - 3.5481E+01 6.5202E-03 4.7566E-03 6.5570E-04 5.1498E-04 - 3.9811E+01 4.6260E-03 3.3504E-03 4.3699E-04 3.4532E-04 - 4.4668E+01 3.2757E-03 2.3612E-03 2.9430E-04 2.3025E-04 - 5.0119E+01 2.3089E-03 1.6634E-03 1.9509E-04 1.5477E-04 - 5.6234E+01 1.6320E-03 1.1680E-03 1.3111E-04 1.0523E-04 - 6.3096E+01 1.1554E-03 8.2004E-04 8.9076E-05 7.0218E-05 - 7.0795E+01 8.1490E-04 5.7828E-04 5.8355E-05 4.7520E-05 - 7.9433E+01 5.6893E-04 4.0413E-04 3.8021E-05 3.1780E-05 - 8.9125E+01 3.9800E-04 2.7895E-04 2.5506E-05 2.1174E-05 - 1.0000E+02 2.8271E-04 1.9721E-04 1.8013E-05 1.4619E-05 - 1.1220E+02 1.9853E-04 1.3836E-04 1.2226E-05 9.9322E-06 - 1.2589E+02 1.3935E-04 9.6599E-05 8.2832E-06 6.6660E-06 - 1.4125E+02 9.7653E-05 6.6816E-05 5.5999E-06 4.4923E-06 - 1.5849E+02 6.8310E-05 4.6316E-05 3.7654E-06 3.0661E-06 - 1.7783E+02 4.7667E-05 3.2201E-05 2.5461E-06 2.0656E-06 - 1.9953E+02 3.3421E-05 2.2332E-05 1.7136E-06 1.4114E-06 - 2.2387E+02 2.3254E-05 1.5528E-05 1.1912E-06 9.4646E-07 - 2.5119E+02 1.6175E-05 1.0806E-05 8.0599E-07 6.3996E-07 - 2.8184E+02 1.1366E-05 7.4262E-06 5.2861E-07 4.4535E-07 - 3.1623E+02 7.9269E-06 5.1441E-06 3.6502E-07 3.0025E-07 - 3.5481E+02 5.4745E-06 3.5303E-06 2.4574E-07 2.0359E-07 - 3.9811E+02 3.7994E-06 2.4497E-06 1.6979E-07 1.3503E-07 - 4.4668E+02 2.6450E-06 1.6894E-06 1.1509E-07 9.0339E-08 - 5.0119E+02 1.8300E-06 1.1569E-06 7.4665E-08 6.1232E-08 - 5.6234E+02 1.2776E-06 8.0143E-07 5.0705E-08 4.1990E-08 - 6.3096E+02 8.7191E-07 5.4883E-07 3.4687E-08 2.8150E-08 - 7.0795E+02 6.0041E-07 3.7401E-07 2.3763E-08 1.8358E-08 - 7.9433E+02 4.1478E-07 2.5618E-07 1.6140E-08 1.1694E-08 - 8.9125E+02 2.8445E-07 1.7632E-07 1.0968E-08 8.0540E-09 - 1.0000E+03 1.9612E-07 1.2023E-07 7.1837E-09 5.3971E-09 - 1.1220E+03 1.3296E-07 8.0385E-08 4.7330E-09 3.6626E-09 - 1.2589E+03 9.0708E-08 5.4548E-08 3.2011E-09 2.4600E-09 - 1.4125E+03 6.1381E-08 3.7148E-08 2.2471E-09 1.6137E-09 - 1.5849E+03 4.1622E-08 2.5259E-08 1.4146E-09 1.0130E-09 - 1.7783E+03 2.8299E-08 1.6849E-08 9.3687E-10 6.4939E-10 - 1.9953E+03 1.9041E-08 1.1190E-08 6.3361E-10 4.4565E-10 - 2.2387E+03 1.2833E-08 7.4915E-09 4.1401E-10 3.0560E-10 - 2.5119E+03 8.6661E-09 4.9874E-09 2.4703E-10 2.1143E-10 - 2.8184E+03 5.8365E-09 3.3619E-09 1.7556E-10 1.4360E-10 - 3.1623E+03 4.0172E-09 2.3349E-09 1.1691E-10 9.0780E-11 - 3.5481E+03 2.6053E-09 1.5066E-09 8.1666E-11 6.0097E-11 - 3.9811E+03 1.7196E-09 9.9315E-10 5.3240E-11 3.5993E-11 - 4.4668E+03 1.1441E-09 6.5432E-10 3.3520E-11 2.2573E-11 - 5.0119E+03 7.5516E-10 4.2073E-10 2.3542E-11 1.6381E-11 - 5.6234E+03 5.0774E-10 2.8313E-10 1.5226E-11 1.1537E-11 - 6.3096E+03 3.4020E-10 1.9004E-10 9.1863E-12 6.6454E-12 - 7.0795E+03 2.2414E-10 1.2344E-10 6.0720E-12 4.3290E-12 - 7.9433E+03 1.4553E-10 8.0510E-11 4.3100E-12 3.2491E-12 - 8.9125E+03 9.5347E-11 5.2942E-11 2.6093E-12 2.0615E-12 - 1.0000E+04 6.3067E-11 3.5308E-11 1.6927E-12 1.2920E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1107E+04 1.1425E+04 5.6534E+03 5.0212E+03 - 1.1220E-01 9.8100E+03 1.0103E+04 5.0275E+03 4.4150E+03 - 1.2589E-01 8.6284E+03 8.8615E+03 4.4178E+03 3.8353E+03 - 1.4125E-01 7.5168E+03 7.6863E+03 3.8272E+03 3.3213E+03 - 1.5849E-01 6.4754E+03 6.6105E+03 3.2996E+03 2.8356E+03 - 1.7783E-01 5.5243E+03 5.6406E+03 2.8253E+03 2.3952E+03 - 1.9953E-01 4.6485E+03 4.7354E+03 2.3855E+03 2.0103E+03 - 2.2387E-01 3.8574E+03 3.9062E+03 1.9920E+03 1.6683E+03 - 2.5119E-01 3.1638E+03 3.2057E+03 1.6491E+03 1.3561E+03 - 2.8184E-01 2.5651E+03 2.6009E+03 1.3488E+03 1.0948E+03 - 3.1623E-01 2.0625E+03 2.0785E+03 1.0820E+03 8.8084E+02 - 3.5481E-01 1.6390E+03 1.6451E+03 8.6364E+02 6.9850E+02 - 3.9811E-01 1.2898E+03 1.2945E+03 6.8104E+02 5.5055E+02 - 4.4668E-01 1.0104E+03 1.0117E+03 5.3023E+02 4.2633E+02 - 5.0119E-01 7.8725E+02 7.8071E+02 4.1285E+02 3.2638E+02 - 5.6234E-01 6.0321E+02 5.9534E+02 3.1936E+02 2.5143E+02 - 6.3096E-01 4.5951E+02 4.5337E+02 2.4113E+02 1.9071E+02 - 7.0795E-01 3.4953E+02 3.4291E+02 1.8148E+02 1.4310E+02 - 7.9433E-01 2.6525E+02 2.5545E+02 1.3778E+02 1.0770E+02 - 8.9125E-01 2.0075E+02 1.9137E+02 1.0264E+02 8.0349E+01 - 1.0000E+00 1.5145E+02 1.4435E+02 7.5472E+01 5.9323E+01 - 1.1220E+00 1.1347E+02 1.0759E+02 5.5627E+01 4.3146E+01 - 1.2589E+00 8.5212E+01 8.0126E+01 4.0659E+01 3.1342E+01 - 1.4125E+00 6.3654E+01 5.9066E+01 2.9382E+01 2.2820E+01 - 1.5849E+00 4.7396E+01 4.3513E+01 2.1088E+01 1.6513E+01 - 1.7783E+00 3.5162E+01 3.1999E+01 1.5219E+01 1.1828E+01 - 1.9953E+00 2.5877E+01 2.3358E+01 1.0888E+01 8.3780E+00 - 2.2387E+00 1.9015E+01 1.6961E+01 7.6607E+00 5.9557E+00 - 2.5119E+00 1.3780E+01 1.2076E+01 5.4618E+00 4.2936E+00 - 2.8184E+00 9.9690E+00 8.6424E+00 3.8753E+00 3.0225E+00 - 3.1623E+00 7.3331E+00 6.2438E+00 2.6962E+00 2.0312E+00 - 3.5481E+00 5.3355E+00 4.5033E+00 1.8547E+00 1.4102E+00 - 3.9811E+00 3.8672E+00 3.2350E+00 1.2721E+00 9.6807E-01 - 4.4668E+00 2.7841E+00 2.2992E+00 8.7591E-01 6.5647E-01 - 5.0119E+00 1.9933E+00 1.6399E+00 5.9128E-01 4.4894E-01 - 5.6234E+00 1.4304E+00 1.1593E+00 3.9552E-01 3.1249E-01 - 6.3096E+00 1.0371E+00 8.2709E-01 2.7247E-01 2.1134E-01 - 7.0795E+00 7.4485E-01 5.8899E-01 1.8826E-01 1.4239E-01 - 7.9433E+00 5.2548E-01 4.1331E-01 1.2785E-01 9.5463E-02 - 8.9125E+00 3.7527E-01 2.9391E-01 8.3828E-02 6.3688E-02 - 1.0000E+01 2.7246E-01 2.1289E-01 5.7547E-02 4.3572E-02 - 1.1220E+01 1.9415E-01 1.5023E-01 3.8579E-02 2.8831E-02 - 1.2589E+01 1.3891E-01 1.0628E-01 2.6051E-02 1.9298E-02 - 1.4125E+01 9.9327E-02 7.5995E-02 1.7265E-02 1.3049E-02 - 1.5849E+01 7.0843E-02 5.4155E-02 1.1091E-02 8.7208E-03 - 1.7783E+01 5.0583E-02 3.8319E-02 7.3045E-03 5.7826E-03 - 1.9953E+01 3.5878E-02 2.7178E-02 4.9331E-03 3.8244E-03 - 2.2387E+01 2.5409E-02 1.9392E-02 3.3710E-03 2.5821E-03 - 2.5119E+01 1.7840E-02 1.3551E-02 2.2822E-03 1.7700E-03 - 2.8184E+01 1.2653E-02 9.3553E-03 1.4878E-03 1.1139E-03 - 3.1623E+01 9.1860E-03 6.7673E-03 9.9499E-04 7.7337E-04 - 3.5481E+01 6.4932E-03 4.7777E-03 6.5952E-04 5.1670E-04 - 3.9811E+01 4.6150E-03 3.3756E-03 4.4179E-04 3.4973E-04 - 4.4668E+01 3.2666E-03 2.3640E-03 2.9876E-04 2.3332E-04 - 5.0119E+01 2.3099E-03 1.6510E-03 1.9762E-04 1.5586E-04 - 5.6234E+01 1.6320E-03 1.1647E-03 1.2948E-04 1.0334E-04 - 6.3096E+01 1.1509E-03 8.2751E-04 8.7457E-05 7.0071E-05 - 7.0795E+01 8.0753E-04 5.7790E-04 5.8907E-05 4.8457E-05 - 7.9433E+01 5.6483E-04 4.0126E-04 3.9221E-05 3.1842E-05 - 8.9125E+01 3.9763E-04 2.8087E-04 2.6289E-05 2.1241E-05 - 1.0000E+02 2.8272E-04 1.9691E-04 1.7820E-05 1.4778E-05 - 1.1220E+02 1.9829E-04 1.3748E-04 1.2198E-05 1.0038E-05 - 1.2589E+02 1.3903E-04 9.5481E-05 8.2080E-06 6.7445E-06 - 1.4125E+02 9.7301E-05 6.6344E-05 5.4622E-06 4.5916E-06 - 1.5849E+02 6.8123E-05 4.6385E-05 3.7220E-06 3.1227E-06 - 1.7783E+02 4.7562E-05 3.2388E-05 2.5172E-06 2.1313E-06 - 1.9953E+02 3.3438E-05 2.2308E-05 1.6918E-06 1.4055E-06 - 2.2387E+02 2.3461E-05 1.5504E-05 1.1549E-06 9.4742E-07 - 2.5119E+02 1.6309E-05 1.0791E-05 7.7878E-07 6.3785E-07 - 2.8184E+02 1.1385E-05 7.4519E-06 5.4634E-07 4.0351E-07 - 3.1623E+02 7.9204E-06 5.1261E-06 3.6284E-07 2.9270E-07 - 3.5481E+02 5.4929E-06 3.5393E-06 2.4518E-07 1.9539E-07 - 3.9811E+02 3.7970E-06 2.4380E-06 1.6482E-07 1.3246E-07 - 4.4668E+02 2.6383E-06 1.6902E-06 1.1125E-07 9.0669E-08 - 5.0119E+02 1.8395E-06 1.1697E-06 7.5686E-08 6.2468E-08 - 5.6234E+02 1.2746E-06 8.0352E-07 5.2053E-08 4.0999E-08 - 6.3096E+02 8.7648E-07 5.4927E-07 3.5230E-08 2.7278E-08 - 7.0795E+02 6.0540E-07 3.7666E-07 2.3772E-08 1.8142E-08 - 7.9433E+02 4.1753E-07 2.5798E-07 1.6412E-08 1.2147E-08 - 8.9125E+02 2.8623E-07 1.7456E-07 1.1041E-08 8.0137E-09 - 1.0000E+03 1.9674E-07 1.2056E-07 7.1385E-09 5.5238E-09 - 1.1220E+03 1.3385E-07 8.1483E-08 4.8299E-09 3.7610E-09 - 1.2589E+03 9.1424E-08 5.4700E-08 3.2876E-09 2.5084E-09 - 1.4125E+03 6.1707E-08 3.7105E-08 2.1008E-09 1.6460E-09 - 1.5849E+03 4.1645E-08 2.5210E-08 1.3881E-09 1.0884E-09 - 1.7783E+03 2.8385E-08 1.7008E-08 9.5612E-10 7.1209E-10 - 1.9953E+03 1.9088E-08 1.1359E-08 6.1889E-10 4.5629E-10 - 2.2387E+03 1.2856E-08 7.6058E-09 3.8835E-10 3.1042E-10 - 2.5119E+03 8.7152E-09 5.0728E-09 2.7026E-10 2.0737E-10 - 2.8184E+03 5.8386E-09 3.3858E-09 1.9024E-10 1.2989E-10 - 3.1623E+03 4.0142E-09 2.3129E-09 1.2029E-10 9.0679E-11 - 3.5481E+03 2.6217E-09 1.4858E-09 8.0570E-11 6.0828E-11 - 3.9811E+03 1.7628E-09 9.9340E-10 5.5312E-11 3.7076E-11 - 4.4668E+03 1.1668E-09 6.5552E-10 3.6232E-11 2.5588E-11 - 5.0119E+03 7.5970E-10 4.3664E-10 2.2704E-11 1.7467E-11 - 5.6234E+03 5.1036E-10 2.9303E-10 1.5537E-11 9.0232E-12 - 6.3096E+03 3.3936E-10 1.8821E-10 1.0550E-11 6.5725E-12 - 7.0795E+03 2.2106E-10 1.2402E-10 6.9719E-12 4.7078E-12 - 7.9433E+03 1.4724E-10 8.0928E-11 4.3747E-12 3.0380E-12 - 8.9125E+03 9.6783E-11 5.3819E-11 2.8339E-12 1.7343E-12 - 1.0000E+04 6.3530E-11 3.4995E-11 1.9156E-12 1.0297E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1044E+04 1.1388E+04 5.6198E+03 5.0002E+03 - 1.1220E-01 9.7578E+03 1.0089E+04 4.9887E+03 4.3919E+03 - 1.2589E-01 8.5904E+03 8.8370E+03 4.3740E+03 3.8112E+03 - 1.4125E-01 7.5166E+03 7.6910E+03 3.8087E+03 3.2858E+03 - 1.5849E-01 6.4924E+03 6.6121E+03 3.2878E+03 2.8177E+03 - 1.7783E-01 5.5454E+03 5.6144E+03 2.8182E+03 2.3915E+03 - 1.9953E-01 4.6466E+03 4.7167E+03 2.3746E+03 2.0037E+03 - 2.2387E-01 3.8485E+03 3.8981E+03 1.9798E+03 1.6594E+03 - 2.5119E-01 3.1654E+03 3.1934E+03 1.6398E+03 1.3657E+03 - 2.8184E-01 2.5673E+03 2.5896E+03 1.3357E+03 1.1071E+03 - 3.1623E-01 2.0618E+03 2.0805E+03 1.0845E+03 8.8191E+02 - 3.5481E-01 1.6432E+03 1.6514E+03 8.7019E+02 7.0540E+02 - 3.9811E-01 1.2943E+03 1.2962E+03 6.8314E+02 5.5624E+02 - 4.4668E-01 1.0125E+03 1.0111E+03 5.3289E+02 4.2830E+02 - 5.0119E-01 7.8558E+02 7.8077E+02 4.1319E+02 3.2687E+02 - 5.6234E-01 6.0478E+02 5.9585E+02 3.1760E+02 2.5037E+02 - 6.3096E-01 4.6372E+02 4.5445E+02 2.4349E+02 1.9277E+02 - 7.0795E-01 3.5273E+02 3.4455E+02 1.8353E+02 1.4616E+02 - 7.9433E-01 2.6817E+02 2.5879E+02 1.3566E+02 1.0861E+02 - 8.9125E-01 2.0158E+02 1.9459E+02 1.0148E+02 8.0099E+01 - 1.0000E+00 1.5161E+02 1.4475E+02 7.4633E+01 5.9186E+01 - 1.1220E+00 1.1356E+02 1.0751E+02 5.5113E+01 4.3261E+01 - 1.2589E+00 8.5089E+01 7.9609E+01 4.0459E+01 3.1636E+01 - 1.4125E+00 6.4013E+01 5.8894E+01 2.9256E+01 2.2975E+01 - 1.5849E+00 4.7513E+01 4.3126E+01 2.1094E+01 1.6579E+01 - 1.7783E+00 3.5033E+01 3.1375E+01 1.5080E+01 1.1893E+01 - 1.9953E+00 2.5776E+01 2.3005E+01 1.0847E+01 8.4595E+00 - 2.2387E+00 1.8925E+01 1.6703E+01 7.7686E+00 5.9308E+00 - 2.5119E+00 1.3901E+01 1.2004E+01 5.4764E+00 4.1162E+00 - 2.8184E+00 1.0206E+01 8.7165E+00 3.8344E+00 2.9080E+00 - 3.1623E+00 7.3789E+00 6.2844E+00 2.6687E+00 2.0351E+00 - 3.5481E+00 5.3510E+00 4.5115E+00 1.8476E+00 1.4167E+00 - 3.9811E+00 3.8503E+00 3.2462E+00 1.2748E+00 9.9022E-01 - 4.4668E+00 2.7816E+00 2.3188E+00 8.8475E-01 6.7214E-01 - 5.0119E+00 2.0121E+00 1.6514E+00 6.0333E-01 4.5886E-01 - 5.6234E+00 1.4536E+00 1.1735E+00 4.0786E-01 3.1385E-01 - 6.3096E+00 1.0446E+00 8.3125E-01 2.7607E-01 2.1065E-01 - 7.0795E+00 7.4669E-01 5.9115E-01 1.8944E-01 1.4116E-01 - 7.9433E+00 5.3506E-01 4.2259E-01 1.2699E-01 9.3877E-02 - 8.9125E+00 3.8105E-01 2.9916E-01 8.4645E-02 6.4189E-02 - 1.0000E+01 2.7183E-01 2.1287E-01 5.7643E-02 4.3652E-02 - 1.1220E+01 1.9470E-01 1.5132E-01 3.8006E-02 2.9129E-02 - 1.2589E+01 1.3905E-01 1.0643E-01 2.5601E-02 1.9180E-02 - 1.4125E+01 9.9077E-02 7.4880E-02 1.7058E-02 1.2982E-02 - 1.5849E+01 7.1404E-02 5.3485E-02 1.1291E-02 8.7560E-03 - 1.7783E+01 5.0574E-02 3.8068E-02 7.5969E-03 5.7399E-03 - 1.9953E+01 3.5450E-02 2.6867E-02 4.9447E-03 3.8345E-03 - 2.2387E+01 2.5750E-02 1.9018E-02 3.3195E-03 2.5958E-03 - 2.5119E+01 1.8338E-02 1.3437E-02 2.1832E-03 1.6472E-03 - 2.8184E+01 1.2792E-02 9.5418E-03 1.3811E-03 1.1063E-03 - 3.1623E+01 9.2197E-03 6.7862E-03 9.9038E-04 7.6819E-04 - 3.5481E+01 6.5392E-03 4.7840E-03 6.5861E-04 5.1350E-04 - 3.9811E+01 4.6322E-03 3.3859E-03 4.3805E-04 3.4553E-04 - 4.4668E+01 3.2612E-03 2.3880E-03 2.9642E-04 2.3260E-04 - 5.0119E+01 2.3043E-03 1.6751E-03 1.9678E-04 1.5675E-04 - 5.6234E+01 1.6373E-03 1.1740E-03 1.2984E-04 1.0644E-04 - 6.3096E+01 1.1547E-03 8.2510E-04 8.5882E-05 7.2003E-05 - 7.0795E+01 8.1031E-04 5.7629E-04 5.7830E-05 4.7955E-05 - 7.9433E+01 5.6770E-04 4.0519E-04 3.8959E-05 3.2393E-05 - 8.9125E+01 4.0116E-04 2.8464E-04 2.6100E-05 2.0967E-05 - 1.0000E+02 2.8270E-04 1.9719E-04 1.7846E-05 1.4453E-05 - 1.1220E+02 1.9864E-04 1.3770E-04 1.1990E-05 9.8540E-06 - 1.2589E+02 1.3886E-04 9.6113E-05 8.0865E-06 6.7035E-06 - 1.4125E+02 9.6772E-05 6.6841E-05 5.5088E-06 4.5261E-06 - 1.5849E+02 6.7756E-05 4.6411E-05 3.7275E-06 3.0323E-06 - 1.7783E+02 4.7581E-05 3.2224E-05 2.5925E-06 2.0630E-06 - 1.9953E+02 3.3242E-05 2.2298E-05 1.7605E-06 1.4228E-06 - 2.2387E+02 2.3136E-05 1.5545E-05 1.1578E-06 9.4715E-07 - 2.5119E+02 1.6159E-05 1.0755E-05 7.6778E-07 6.3398E-07 - 2.8184E+02 1.1340E-05 7.4017E-06 5.2645E-07 4.2330E-07 - 3.1623E+02 7.9222E-06 5.1452E-06 3.6434E-07 2.9212E-07 - 3.5481E+02 5.4953E-06 3.5614E-06 2.4356E-07 1.9769E-07 - 3.9811E+02 3.8049E-06 2.4565E-06 1.6733E-07 1.3230E-07 - 4.4668E+02 2.6481E-06 1.6865E-06 1.1555E-07 9.0176E-08 - 5.0119E+02 1.8300E-06 1.1664E-06 7.7711E-08 5.9450E-08 - 5.6234E+02 1.2723E-06 8.0523E-07 5.1039E-08 4.1183E-08 - 6.3096E+02 8.7687E-07 5.4891E-07 3.4182E-08 2.7873E-08 - 7.0795E+02 6.0663E-07 3.7411E-07 2.3075E-08 1.8400E-08 - 7.9433E+02 4.1754E-07 2.5541E-07 1.5774E-08 1.2382E-08 - 8.9125E+02 2.8421E-07 1.7399E-07 1.0640E-08 8.1924E-09 - 1.0000E+03 1.9613E-07 1.1883E-07 7.0363E-09 5.4735E-09 - 1.1220E+03 1.3309E-07 8.0743E-08 4.8900E-09 3.6339E-09 - 1.2589E+03 9.0864E-08 5.5002E-08 3.1416E-09 2.4274E-09 - 1.4125E+03 6.1520E-08 3.7076E-08 2.0484E-09 1.6217E-09 - 1.5849E+03 4.1773E-08 2.4795E-08 1.4685E-09 1.0127E-09 - 1.7783E+03 2.8223E-08 1.6779E-08 9.9845E-10 6.9092E-10 - 1.9953E+03 1.8982E-08 1.1308E-08 6.4424E-10 4.7248E-10 - 2.2387E+03 1.3015E-08 7.5054E-09 4.2484E-10 3.0312E-10 - 2.5119E+03 8.7999E-09 4.9449E-09 2.6877E-10 1.9829E-10 - 2.8184E+03 5.8151E-09 3.3349E-09 1.7844E-10 1.2660E-10 - 3.1623E+03 4.0056E-09 2.3215E-09 1.2048E-10 8.6855E-11 - 3.5481E+03 2.6164E-09 1.5253E-09 8.1034E-11 5.6573E-11 - 3.9811E+03 1.7452E-09 9.8615E-10 5.3982E-11 3.6057E-11 - 4.4668E+03 1.1641E-09 6.3881E-10 3.4280E-11 2.4447E-11 - 5.0119E+03 7.7553E-10 4.2675E-10 2.1547E-11 1.7210E-11 - 5.6234E+03 5.0558E-10 2.8086E-10 1.4517E-11 1.0917E-11 - 6.3096E+03 3.3604E-10 1.8830E-10 1.0017E-11 7.1783E-12 - 7.0795E+03 2.2551E-10 1.2442E-10 6.4692E-12 4.6849E-12 - 7.9433E+03 1.4754E-10 8.2421E-11 4.1944E-12 2.6886E-12 - 8.9125E+03 9.6189E-11 5.3977E-11 2.7490E-12 1.8406E-12 - 1.0000E+04 6.3122E-11 3.4757E-11 1.8224E-12 1.2598E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0996E+04 1.1280E+04 5.5540E+03 5.0098E+03 - 1.1220E-01 9.7137E+03 9.9817E+03 4.9384E+03 4.3978E+03 - 1.2589E-01 8.5677E+03 8.7812E+03 4.3409E+03 3.8253E+03 - 1.4125E-01 7.4885E+03 7.6208E+03 3.7769E+03 3.3055E+03 - 1.5849E-01 6.4594E+03 6.5447E+03 3.2594E+03 2.8238E+03 - 1.7783E-01 5.5281E+03 5.5796E+03 2.7846E+03 2.3845E+03 - 1.9953E-01 4.6481E+03 4.6943E+03 2.3464E+03 1.9867E+03 - 2.2387E-01 3.8440E+03 3.8905E+03 1.9615E+03 1.6552E+03 - 2.5119E-01 3.1518E+03 3.1841E+03 1.6271E+03 1.3644E+03 - 2.8184E-01 2.5613E+03 2.5767E+03 1.3300E+03 1.1036E+03 - 3.1623E-01 2.0585E+03 2.0657E+03 1.0769E+03 8.8776E+02 - 3.5481E-01 1.6378E+03 1.6384E+03 8.5826E+02 7.0140E+02 - 3.9811E-01 1.2894E+03 1.2851E+03 6.7896E+02 5.4693E+02 - 4.4668E-01 1.0068E+03 9.9981E+02 5.3305E+02 4.2890E+02 - 5.0119E-01 7.8504E+02 7.7755E+02 4.1076E+02 3.3038E+02 - 5.6234E-01 6.0677E+02 5.9780E+02 3.1564E+02 2.5304E+02 - 6.3096E-01 4.6402E+02 4.5123E+02 2.4066E+02 1.9204E+02 - 7.0795E-01 3.5224E+02 3.4227E+02 1.8218E+02 1.4418E+02 - 7.9433E-01 2.6781E+02 2.5926E+02 1.3628E+02 1.0811E+02 - 8.9125E-01 2.0131E+02 1.9398E+02 1.0170E+02 8.0270E+01 - 1.0000E+00 1.5172E+02 1.4463E+02 7.5468E+01 5.9104E+01 - 1.1220E+00 1.1413E+02 1.0793E+02 5.5253E+01 4.3369E+01 - 1.2589E+00 8.5646E+01 7.9912E+01 4.0234E+01 3.1648E+01 - 1.4125E+00 6.3998E+01 5.8654E+01 2.9373E+01 2.3031E+01 - 1.5849E+00 4.7700E+01 4.3196E+01 2.1256E+01 1.6473E+01 - 1.7783E+00 3.5196E+01 3.1777E+01 1.5304E+01 1.1850E+01 - 1.9953E+00 2.5695E+01 2.2994E+01 1.0880E+01 8.5136E+00 - 2.2387E+00 1.8940E+01 1.6687E+01 7.7544E+00 6.0024E+00 - 2.5119E+00 1.3958E+01 1.2101E+01 5.4612E+00 4.2177E+00 - 2.8184E+00 1.0098E+01 8.8048E+00 3.7792E+00 2.8963E+00 - 3.1623E+00 7.3941E+00 6.2858E+00 2.6564E+00 2.0442E+00 - 3.5481E+00 5.3445E+00 4.5046E+00 1.8369E+00 1.4192E+00 - 3.9811E+00 3.8521E+00 3.2382E+00 1.2794E+00 9.7342E-01 - 4.4668E+00 2.7877E+00 2.3111E+00 8.8490E-01 6.6874E-01 - 5.0119E+00 2.0156E+00 1.6526E+00 6.0486E-01 4.5577E-01 - 5.6234E+00 1.4521E+00 1.1742E+00 4.0580E-01 3.1167E-01 - 6.3096E+00 1.0403E+00 8.3373E-01 2.7276E-01 2.1326E-01 - 7.0795E+00 7.4466E-01 5.8975E-01 1.8726E-01 1.4281E-01 - 7.9433E+00 5.4264E-01 4.2175E-01 1.2475E-01 9.4836E-02 - 8.9125E+00 3.8823E-01 3.0419E-01 8.4291E-02 6.3342E-02 - 1.0000E+01 2.7480E-01 2.1349E-01 5.7911E-02 4.3066E-02 - 1.1220E+01 1.9561E-01 1.5162E-01 3.8189E-02 2.9201E-02 - 1.2589E+01 1.4012E-01 1.0705E-01 2.5119E-02 1.9468E-02 - 1.4125E+01 1.0002E-01 7.5730E-02 1.6600E-02 1.2840E-02 - 1.5849E+01 7.1044E-02 5.3629E-02 1.1191E-02 8.5871E-03 - 1.7783E+01 5.0368E-02 3.7856E-02 7.5469E-03 5.8602E-03 - 1.9953E+01 3.6028E-02 2.6815E-02 5.0491E-03 3.9188E-03 - 2.2387E+01 2.5758E-02 1.9038E-02 3.3426E-03 2.5570E-03 - 2.5119E+01 1.8351E-02 1.3576E-02 2.2162E-03 1.6910E-03 - 2.8184E+01 1.3256E-02 9.8288E-03 1.4969E-03 1.2143E-03 - 3.1623E+01 9.2061E-03 6.7615E-03 9.7717E-04 7.7088E-04 - 3.5481E+01 6.5324E-03 4.7757E-03 6.5216E-04 5.1910E-04 - 3.9811E+01 4.6409E-03 3.3664E-03 4.3533E-04 3.4908E-04 - 4.4668E+01 3.2865E-03 2.3712E-03 2.8927E-04 2.3247E-04 - 5.0119E+01 2.3114E-03 1.6712E-03 1.9500E-04 1.5543E-04 - 5.6234E+01 1.6279E-03 1.1701E-03 1.3301E-04 1.0554E-04 - 6.3096E+01 1.1517E-03 8.2014E-04 8.9718E-05 7.1102E-05 - 7.0795E+01 8.1466E-04 5.7942E-04 5.9854E-05 4.6474E-05 - 7.9433E+01 5.7637E-04 4.0600E-04 3.9463E-05 3.2057E-05 - 8.9125E+01 4.0522E-04 2.8202E-04 2.6929E-05 2.1980E-05 - 1.0000E+02 2.8388E-04 1.9823E-04 1.8365E-05 1.4641E-05 - 1.1220E+02 1.9891E-04 1.3850E-04 1.2186E-05 9.9988E-06 - 1.2589E+02 1.3927E-04 9.6412E-05 8.1719E-06 6.7645E-06 - 1.4125E+02 9.7618E-05 6.7123E-05 5.5576E-06 4.5144E-06 - 1.5849E+02 6.8653E-05 4.6708E-05 3.7436E-06 3.0194E-06 - 1.7783E+02 4.8046E-05 3.2193E-05 2.4558E-06 2.0442E-06 - 1.9953E+02 3.3551E-05 2.2355E-05 1.6697E-06 1.3950E-06 - 2.2387E+02 2.3399E-05 1.5505E-05 1.1732E-06 9.1865E-07 - 2.5119E+02 1.6218E-05 1.0719E-05 7.9474E-07 6.2774E-07 - 2.8184E+02 1.1292E-05 7.4862E-06 5.2564E-07 4.3334E-07 - 3.1623E+02 7.8724E-06 5.1684E-06 3.6694E-07 2.9483E-07 - 3.5481E+02 5.4864E-06 3.5509E-06 2.4534E-07 1.9858E-07 - 3.9811E+02 3.8122E-06 2.4519E-06 1.6475E-07 1.3323E-07 - 4.4668E+02 2.6460E-06 1.6991E-06 1.1276E-07 8.9647E-08 - 5.0119E+02 1.8372E-06 1.1639E-06 7.5783E-08 5.8957E-08 - 5.6234E+02 1.2714E-06 7.9857E-07 5.1371E-08 3.9588E-08 - 6.3096E+02 8.7140E-07 5.4672E-07 3.4213E-08 2.7380E-08 - 7.0795E+02 6.0143E-07 3.7311E-07 2.3252E-08 1.8761E-08 - 7.9433E+02 4.1661E-07 2.5558E-07 1.5951E-08 1.2504E-08 - 8.9125E+02 2.8432E-07 1.7521E-07 1.0718E-08 8.4451E-09 - 1.0000E+03 1.9584E-07 1.2091E-07 7.3688E-09 5.4482E-09 - 1.1220E+03 1.3342E-07 8.1182E-08 4.9974E-09 3.5833E-09 - 1.2589E+03 9.1254E-08 5.5477E-08 3.2520E-09 2.3375E-09 - 1.4125E+03 6.1351E-08 3.7622E-08 2.0625E-09 1.5792E-09 - 1.5849E+03 4.1822E-08 2.4991E-08 1.3783E-09 1.0717E-09 - 1.7783E+03 2.8560E-08 1.6656E-08 8.8936E-10 7.2382E-10 - 1.9953E+03 1.9213E-08 1.1293E-08 6.0107E-10 4.7859E-10 - 2.2387E+03 1.2851E-08 7.5077E-09 4.2163E-10 3.2492E-10 - 2.5119E+03 8.6554E-09 5.0297E-09 2.8354E-10 1.8791E-10 - 2.8184E+03 5.8532E-09 3.3688E-09 1.8204E-10 1.2088E-10 - 3.1623E+03 4.0266E-09 2.3192E-09 1.1720E-10 8.7167E-11 - 3.5481E+03 2.6005E-09 1.5044E-09 8.0917E-11 5.7096E-11 - 3.9811E+03 1.7362E-09 9.9547E-10 5.4583E-11 3.8507E-11 - 4.4668E+03 1.1684E-09 6.5817E-10 3.4996E-11 2.5517E-11 - 5.0119E+03 7.7514E-10 4.3475E-10 2.3075E-11 1.6476E-11 - 5.6234E+03 5.1375E-10 2.8700E-10 1.3887E-11 1.0981E-11 - 6.3096E+03 3.3490E-10 1.8754E-10 1.0128E-11 7.2889E-12 - 7.0795E+03 2.2349E-10 1.2329E-10 6.7584E-12 4.8339E-12 - 7.9433E+03 1.4830E-10 8.2305E-11 4.3251E-12 2.8177E-12 - 8.9125E+03 9.7186E-11 5.3977E-11 2.7919E-12 1.8063E-12 - 1.0000E+04 6.3230E-11 3.4713E-11 1.9288E-12 1.1438E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1732E+04 1.1876E+04 5.8269E+03 5.3795E+03 - 1.1220E-01 1.0321E+04 1.0459E+04 5.1399E+03 4.6870E+03 - 1.2589E-01 8.9772E+03 9.1014E+03 4.4903E+03 4.0600E+03 - 1.4125E-01 7.7659E+03 7.8328E+03 3.8987E+03 3.4763E+03 - 1.5849E-01 6.6849E+03 6.7107E+03 3.3394E+03 2.9592E+03 - 1.7783E-01 5.6635E+03 5.6887E+03 2.8404E+03 2.4947E+03 - 1.9953E-01 4.7371E+03 4.7602E+03 2.4004E+03 2.0837E+03 - 2.2387E-01 3.9237E+03 3.9348E+03 2.0076E+03 1.7166E+03 - 2.5119E-01 3.2249E+03 3.2244E+03 1.6565E+03 1.4011E+03 - 2.8184E-01 2.6197E+03 2.5965E+03 1.3566E+03 1.1408E+03 - 3.1623E-01 2.0940E+03 2.0788E+03 1.1014E+03 9.2052E+02 - 3.5481E-01 1.6676E+03 1.6626E+03 8.8052E+02 7.2900E+02 - 3.9811E-01 1.3163E+03 1.3110E+03 6.9656E+02 5.7325E+02 - 4.4668E-01 1.0259E+03 1.0259E+03 5.4875E+02 4.5038E+02 - 5.0119E-01 7.9885E+02 7.9666E+02 4.2967E+02 3.4781E+02 - 5.6234E-01 6.1865E+02 6.1307E+02 3.3172E+02 2.6736E+02 - 6.3096E-01 4.7492E+02 4.6683E+02 2.5535E+02 2.0541E+02 - 7.0795E-01 3.6163E+02 3.5280E+02 1.9415E+02 1.5519E+02 - 7.9433E-01 2.7404E+02 2.6551E+02 1.4571E+02 1.1613E+02 - 8.9125E-01 2.0731E+02 2.0009E+02 1.0925E+02 8.5076E+01 - 1.0000E+00 1.5663E+02 1.5011E+02 8.0926E+01 6.3676E+01 - 1.1220E+00 1.1789E+02 1.1233E+02 5.9697E+01 4.7411E+01 - 1.2589E+00 8.8657E+01 8.3705E+01 4.4020E+01 3.4769E+01 - 1.4125E+00 6.5943E+01 6.1534E+01 3.2054E+01 2.5210E+01 - 1.5849E+00 4.9212E+01 4.5428E+01 2.3537E+01 1.8221E+01 - 1.7783E+00 3.6902E+01 3.3538E+01 1.7054E+01 1.3086E+01 - 1.9953E+00 2.7297E+01 2.4569E+01 1.2227E+01 9.3752E+00 - 2.2387E+00 1.9859E+01 1.7935E+01 8.8567E+00 6.6572E+00 - 2.5119E+00 1.4581E+01 1.3021E+01 6.2514E+00 4.7549E+00 - 2.8184E+00 1.0750E+01 9.3944E+00 4.2913E+00 3.3361E+00 - 3.1623E+00 7.7042E+00 6.6730E+00 3.0075E+00 2.3296E+00 - 3.5481E+00 5.5740E+00 4.8107E+00 2.1248E+00 1.6204E+00 - 3.9811E+00 4.0521E+00 3.4625E+00 1.4788E+00 1.1359E+00 - 4.4668E+00 2.9231E+00 2.4512E+00 1.0193E+00 7.7017E-01 - 5.0119E+00 2.0977E+00 1.7502E+00 6.9977E-01 5.2413E-01 - 5.6234E+00 1.5156E+00 1.2566E+00 4.7916E-01 3.6848E-01 - 6.3096E+00 1.0931E+00 8.9623E-01 3.2691E-01 2.4955E-01 - 7.0795E+00 7.8246E-01 6.3664E-01 2.1832E-01 1.6448E-01 - 7.9433E+00 5.6240E-01 4.5295E-01 1.4718E-01 1.1236E-01 - 8.9125E+00 4.0450E-01 3.1897E-01 1.0153E-01 7.7038E-02 - 1.0000E+01 2.8599E-01 2.2738E-01 6.7504E-02 5.1054E-02 - 1.1220E+01 2.0365E-01 1.6293E-01 4.5589E-02 3.4848E-02 - 1.2589E+01 1.4520E-01 1.1478E-01 3.0566E-02 2.3742E-02 - 1.4125E+01 1.0440E-01 8.1166E-02 2.0116E-02 1.5659E-02 - 1.5849E+01 7.5022E-02 5.7354E-02 1.3295E-02 1.0454E-02 - 1.7783E+01 5.3140E-02 4.0454E-02 8.9979E-03 6.9609E-03 - 1.9953E+01 3.7940E-02 2.8870E-02 6.0024E-03 4.6599E-03 - 2.2387E+01 2.7184E-02 2.0564E-02 4.0349E-03 3.1280E-03 - 2.5119E+01 1.9165E-02 1.4502E-02 2.6897E-03 2.0635E-03 - 2.8184E+01 1.3480E-02 1.0248E-02 1.7633E-03 1.3506E-03 - 3.1623E+01 9.6826E-03 7.1936E-03 1.1680E-03 9.2089E-04 - 3.5481E+01 6.8889E-03 5.0808E-03 7.7476E-04 6.1474E-04 - 3.9811E+01 4.8823E-03 3.6023E-03 5.1794E-04 4.1096E-04 - 4.4668E+01 3.4543E-03 2.5478E-03 3.5074E-04 2.7219E-04 - 5.0119E+01 2.4468E-03 1.7870E-03 2.3556E-04 1.8189E-04 - 5.6234E+01 1.7346E-03 1.2606E-03 1.5465E-04 1.2234E-04 - 6.3096E+01 1.2272E-03 8.8663E-04 1.0315E-04 8.3317E-05 - 7.0795E+01 8.6599E-04 6.2062E-04 6.9565E-05 5.7195E-05 - 7.9433E+01 6.1070E-04 4.3167E-04 4.6325E-05 3.7870E-05 - 8.9125E+01 4.2963E-04 3.0110E-04 3.1072E-05 2.4784E-05 - 1.0000E+02 3.0115E-04 2.1212E-04 2.0860E-05 1.6835E-05 - 1.1220E+02 2.1156E-04 1.4830E-04 1.3945E-05 1.1548E-05 - 1.2589E+02 1.4857E-04 1.0381E-04 9.3122E-06 7.7197E-06 - 1.4125E+02 1.0431E-04 7.2252E-05 6.3021E-06 5.1148E-06 - 1.5849E+02 7.3146E-05 5.0329E-05 4.2237E-06 3.4808E-06 - 1.7783E+02 5.1194E-05 3.4978E-05 2.8146E-06 2.3294E-06 - 1.9953E+02 3.5944E-05 2.4244E-05 1.9397E-06 1.5826E-06 - 2.2387E+02 2.5069E-05 1.6824E-05 1.3352E-06 1.1056E-06 - 2.5119E+02 1.7445E-05 1.1587E-05 9.0936E-07 7.3534E-07 - 2.8184E+02 1.2251E-05 8.0011E-06 5.9744E-07 4.8745E-07 - 3.1623E+02 8.5690E-06 5.5725E-06 4.1340E-07 3.3132E-07 - 3.5481E+02 5.9402E-06 3.8576E-06 2.8391E-07 2.2271E-07 - 3.9811E+02 4.1181E-06 2.6771E-06 1.9343E-07 1.5410E-07 - 4.4668E+02 2.8447E-06 1.8483E-06 1.2814E-07 9.9448E-08 - 5.0119E+02 1.9667E-06 1.2760E-06 8.6412E-08 6.5371E-08 - 5.6234E+02 1.3799E-06 8.8318E-07 5.9390E-08 4.6076E-08 - 6.3096E+02 9.5359E-07 6.0234E-07 4.0267E-08 3.1232E-08 - 7.0795E+02 6.6312E-07 4.1468E-07 2.6672E-08 2.0778E-08 - 7.9433E+02 4.5584E-07 2.8604E-07 1.8113E-08 1.3940E-08 - 8.9125E+02 3.1206E-07 1.9510E-07 1.1968E-08 9.3098E-09 - 1.0000E+03 2.1665E-07 1.3221E-07 8.1902E-09 6.3256E-09 - 1.1220E+03 1.4883E-07 8.9778E-08 5.4210E-09 4.0263E-09 - 1.2589E+03 1.0094E-07 6.1727E-08 3.7172E-09 2.7117E-09 - 1.4125E+03 6.8420E-08 4.1478E-08 2.5618E-09 1.8305E-09 - 1.5849E+03 4.6935E-08 2.7897E-08 1.5957E-09 1.2203E-09 - 1.7783E+03 3.1912E-08 1.8959E-08 1.0413E-09 8.0852E-10 - 1.9953E+03 2.1546E-08 1.2701E-08 7.4023E-10 5.3532E-10 - 2.2387E+03 1.4605E-08 8.5639E-09 4.7872E-10 3.3833E-10 - 2.5119E+03 9.8596E-09 5.7342E-09 3.0736E-10 2.3034E-10 - 2.8184E+03 6.5946E-09 3.8647E-09 2.0993E-10 1.6212E-10 - 3.1623E+03 4.5214E-09 2.6278E-09 1.3950E-10 1.0144E-10 - 3.5481E+03 2.9849E-09 1.7054E-09 9.3238E-11 6.7231E-11 - 3.9811E+03 2.0121E-09 1.1277E-09 5.9356E-11 4.4669E-11 - 4.4668E+03 1.3455E-09 7.5176E-10 3.6935E-11 2.9957E-11 - 5.0119E+03 8.9376E-10 5.0500E-10 2.4590E-11 2.0310E-11 - 5.6234E+03 5.8382E-10 3.3884E-10 1.7482E-11 1.3121E-11 - 6.3096E+03 3.9118E-10 2.1900E-10 1.1863E-11 8.8918E-12 - 7.0795E+03 2.6148E-10 1.4297E-10 7.5450E-12 5.9735E-12 - 7.9433E+03 1.7324E-10 9.5520E-11 5.0625E-12 3.8623E-12 - 8.9125E+03 1.1323E-10 6.2730E-11 3.1410E-12 2.5029E-12 - 1.0000E+04 7.3436E-11 3.9900E-11 1.8956E-12 1.7321E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1676E+04 1.1754E+04 5.6885E+03 5.3763E+03 - 1.1220E-01 1.0218E+04 1.0272E+04 5.0241E+03 4.7186E+03 - 1.2589E-01 8.9239E+03 8.9351E+03 4.3724E+03 4.0810E+03 - 1.4125E-01 7.7174E+03 7.7279E+03 3.7838E+03 3.5041E+03 - 1.5849E-01 6.6317E+03 6.6090E+03 3.2578E+03 2.9777E+03 - 1.7783E-01 5.6332E+03 5.5969E+03 2.7738E+03 2.4990E+03 - 1.9953E-01 4.7085E+03 4.6779E+03 2.3358E+03 2.0899E+03 - 2.2387E-01 3.9063E+03 3.8572E+03 1.9604E+03 1.7310E+03 - 2.5119E-01 3.2055E+03 3.1461E+03 1.6322E+03 1.4107E+03 - 2.8184E-01 2.5962E+03 2.5481E+03 1.3342E+03 1.1500E+03 - 3.1623E-01 2.0772E+03 2.0443E+03 1.0703E+03 9.2626E+02 - 3.5481E-01 1.6465E+03 1.6271E+03 8.5637E+02 7.2919E+02 - 3.9811E-01 1.3027E+03 1.2872E+03 6.8088E+02 5.7053E+02 - 4.4668E-01 1.0226E+03 1.0061E+03 5.4065E+02 4.4690E+02 - 5.0119E-01 7.9868E+02 7.7738E+02 4.2192E+02 3.4885E+02 - 5.6234E-01 6.1764E+02 5.9777E+02 3.2388E+02 2.6745E+02 - 6.3096E-01 4.7555E+02 4.6268E+02 2.4980E+02 2.0296E+02 - 7.0795E-01 3.6396E+02 3.5206E+02 1.9016E+02 1.5346E+02 - 7.9433E-01 2.7514E+02 2.6397E+02 1.4306E+02 1.1494E+02 - 8.9125E-01 2.0932E+02 1.9865E+02 1.0756E+02 8.6609E+01 - 1.0000E+00 1.5691E+02 1.4964E+02 8.0128E+01 6.4255E+01 - 1.1220E+00 1.1775E+02 1.1211E+02 5.9676E+01 4.7269E+01 - 1.2589E+00 8.8927E+01 8.3243E+01 4.4114E+01 3.4690E+01 - 1.4125E+00 6.6726E+01 6.1815E+01 3.2150E+01 2.5304E+01 - 1.5849E+00 4.9609E+01 4.5701E+01 2.3400E+01 1.8263E+01 - 1.7783E+00 3.6568E+01 3.3409E+01 1.6959E+01 1.3211E+01 - 1.9953E+00 2.6903E+01 2.4547E+01 1.2369E+01 9.5257E+00 - 2.2387E+00 1.9944E+01 1.7908E+01 8.8290E+00 6.7975E+00 - 2.5119E+00 1.4691E+01 1.2897E+01 6.1727E+00 4.8111E+00 - 2.8184E+00 1.0603E+01 9.2928E+00 4.3224E+00 3.3873E+00 - 3.1623E+00 7.7328E+00 6.7429E+00 3.0342E+00 2.3135E+00 - 3.5481E+00 5.5999E+00 4.8271E+00 2.1310E+00 1.6024E+00 - 3.9811E+00 4.0263E+00 3.4569E+00 1.4856E+00 1.1102E+00 - 4.4668E+00 2.9029E+00 2.4881E+00 1.0279E+00 7.7063E-01 - 5.0119E+00 2.1130E+00 1.7754E+00 7.0356E-01 5.3002E-01 - 5.6234E+00 1.5182E+00 1.2630E+00 4.7978E-01 3.6448E-01 - 6.3096E+00 1.0864E+00 8.9712E-01 3.2328E-01 2.4778E-01 - 7.0795E+00 7.9159E-01 6.4324E-01 2.2111E-01 1.6591E-01 - 7.9433E+00 5.7991E-01 4.5965E-01 1.5115E-01 1.1412E-01 - 8.9125E+00 4.0796E-01 3.2656E-01 1.0285E-01 7.7916E-02 - 1.0000E+01 2.8606E-01 2.2666E-01 6.8449E-02 5.1179E-02 - 1.1220E+01 2.0567E-01 1.6128E-01 4.5331E-02 3.3777E-02 - 1.2589E+01 1.4701E-01 1.1454E-01 3.0563E-02 2.2838E-02 - 1.4125E+01 1.0423E-01 8.1540E-02 2.0880E-02 1.5587E-02 - 1.5849E+01 7.4141E-02 5.8325E-02 1.3702E-02 1.0277E-02 - 1.7783E+01 5.2878E-02 4.0756E-02 9.1461E-03 7.0575E-03 - 1.9953E+01 3.7545E-02 2.8222E-02 6.0568E-03 4.8263E-03 - 2.2387E+01 2.6830E-02 2.0279E-02 4.0016E-03 3.1904E-03 - 2.5119E+01 1.9245E-02 1.4523E-02 2.6819E-03 2.1124E-03 - 2.8184E+01 1.3869E-02 9.9854E-03 1.7960E-03 1.4309E-03 - 3.1623E+01 9.6426E-03 7.1931E-03 1.1891E-03 9.2580E-04 - 3.5481E+01 6.8598E-03 5.0855E-03 7.8806E-04 6.1359E-04 - 3.9811E+01 4.8713E-03 3.5836E-03 5.2381E-04 4.0880E-04 - 4.4668E+01 3.4537E-03 2.5345E-03 3.4435E-04 2.7197E-04 - 5.0119E+01 2.4527E-03 1.7857E-03 2.2645E-04 1.8179E-04 - 5.6234E+01 1.7336E-03 1.2526E-03 1.5310E-04 1.2366E-04 - 6.3096E+01 1.2236E-03 8.7514E-04 1.0274E-04 8.2521E-05 - 7.0795E+01 8.6341E-04 6.1506E-04 6.9641E-05 5.5996E-05 - 7.9433E+01 6.0864E-04 4.3483E-04 4.7615E-05 3.8170E-05 - 8.9125E+01 4.3085E-04 3.0350E-04 3.1168E-05 2.4895E-05 - 1.0000E+02 3.0205E-04 2.1219E-04 2.0737E-05 1.6780E-05 - 1.1220E+02 2.1200E-04 1.4836E-04 1.3878E-05 1.1315E-05 - 1.2589E+02 1.4863E-04 1.0319E-04 9.4057E-06 7.7380E-06 - 1.4125E+02 1.0408E-04 7.1590E-05 6.4382E-06 5.2659E-06 - 1.5849E+02 7.3047E-05 5.0065E-05 4.2982E-06 3.5024E-06 - 1.7783E+02 5.1184E-05 3.4801E-05 2.8811E-06 2.3420E-06 - 1.9953E+02 3.5939E-05 2.4155E-05 1.9554E-06 1.6250E-06 - 2.2387E+02 2.5115E-05 1.6858E-05 1.3242E-06 1.0798E-06 - 2.5119E+02 1.7500E-05 1.1692E-05 8.9480E-07 7.0348E-07 - 2.8184E+02 1.2215E-05 8.1150E-06 6.0235E-07 4.8533E-07 - 3.1623E+02 8.5134E-06 5.5901E-06 4.1781E-07 3.3334E-07 - 3.5481E+02 5.9047E-06 3.8609E-06 2.7652E-07 2.2276E-07 - 3.9811E+02 4.0995E-06 2.6787E-06 1.8979E-07 1.4922E-07 - 4.4668E+02 2.8597E-06 1.8468E-06 1.2942E-07 9.9886E-08 - 5.0119E+02 1.9840E-06 1.2741E-06 8.4520E-08 6.7334E-08 - 5.6234E+02 1.3819E-06 8.8574E-07 5.8155E-08 4.5897E-08 - 6.3096E+02 9.5279E-07 6.0673E-07 3.9563E-08 3.1647E-08 - 7.0795E+02 6.5911E-07 4.1502E-07 2.6705E-08 2.1157E-08 - 7.9433E+02 4.5675E-07 2.8354E-07 1.8003E-08 1.3991E-08 - 8.9125E+02 3.1299E-07 1.9493E-07 1.2141E-08 9.5190E-09 - 1.0000E+03 2.1726E-07 1.3310E-07 7.9853E-09 6.2619E-09 - 1.1220E+03 1.4844E-07 9.0291E-08 5.3456E-09 4.1982E-09 - 1.2589E+03 1.0103E-07 6.1503E-08 3.6581E-09 2.8166E-09 - 1.4125E+03 6.8717E-08 4.1503E-08 2.4841E-09 1.8548E-09 - 1.5849E+03 4.6915E-08 2.8130E-08 1.6610E-09 1.2085E-09 - 1.7783E+03 3.1809E-08 1.8858E-08 1.0930E-09 8.4432E-10 - 1.9953E+03 2.1693E-08 1.2742E-08 7.4064E-10 5.6755E-10 - 2.2387E+03 1.4747E-08 8.6620E-09 5.0058E-10 3.6071E-10 - 2.5119E+03 9.8409E-09 5.8016E-09 3.1032E-10 2.3589E-10 - 2.8184E+03 6.6295E-09 3.8753E-09 2.0156E-10 1.6071E-10 - 3.1623E+03 4.5510E-09 2.6724E-09 1.3883E-10 9.8651E-11 - 3.5481E+03 2.9458E-09 1.7428E-09 8.7615E-11 6.4290E-11 - 3.9811E+03 1.9706E-09 1.1401E-09 6.0951E-11 4.2753E-11 - 4.4668E+03 1.3150E-09 7.5352E-10 4.1725E-11 2.9192E-11 - 5.0119E+03 8.8694E-10 5.0263E-10 2.6571E-11 2.0182E-11 - 5.6234E+03 5.9392E-10 3.3360E-10 1.8282E-11 1.3329E-11 - 6.3096E+03 3.8861E-10 2.1867E-10 1.1702E-11 8.3494E-12 - 7.0795E+03 2.5937E-10 1.4324E-10 7.5877E-12 5.2819E-12 - 7.9433E+03 1.7097E-10 9.4175E-11 4.9055E-12 3.3526E-12 - 8.9125E+03 1.1299E-10 6.1758E-11 3.4348E-12 2.1027E-12 - 1.0000E+04 7.4087E-11 4.0225E-11 2.2139E-12 1.4382E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1637E+04 1.1651E+04 5.5771E+03 5.3770E+03 - 1.1220E-01 1.0200E+04 1.0169E+04 4.9264E+03 4.7199E+03 - 1.2589E-01 8.9204E+03 8.8505E+03 4.3204E+03 4.0915E+03 - 1.4125E-01 7.7360E+03 7.6405E+03 3.7288E+03 3.4971E+03 - 1.5849E-01 6.6304E+03 6.5200E+03 3.1917E+03 2.9789E+03 - 1.7783E-01 5.6256E+03 5.5174E+03 2.7238E+03 2.5104E+03 - 1.9953E-01 4.7081E+03 4.6012E+03 2.3044E+03 2.0954E+03 - 2.2387E-01 3.8871E+03 3.8028E+03 1.9327E+03 1.7340E+03 - 2.5119E-01 3.1788E+03 3.1178E+03 1.5936E+03 1.4156E+03 - 2.8184E-01 2.5772E+03 2.5246E+03 1.2970E+03 1.1527E+03 - 3.1623E-01 2.0781E+03 2.0363E+03 1.0477E+03 9.2520E+02 - 3.5481E-01 1.6565E+03 1.6226E+03 8.4530E+02 7.3154E+02 - 3.9811E-01 1.2971E+03 1.2803E+03 6.7355E+02 5.7793E+02 - 4.4668E-01 1.0192E+03 9.9930E+02 5.2930E+02 4.5112E+02 - 5.0119E-01 7.9932E+02 7.7204E+02 4.1410E+02 3.4970E+02 - 5.6234E-01 6.1408E+02 6.0023E+02 3.2152E+02 2.6932E+02 - 6.3096E-01 4.6899E+02 4.6005E+02 2.4711E+02 2.0357E+02 - 7.0795E-01 3.5857E+02 3.5180E+02 1.9019E+02 1.5407E+02 - 7.9433E-01 2.7265E+02 2.6496E+02 1.4362E+02 1.1647E+02 - 8.9125E-01 2.0680E+02 1.9729E+02 1.0642E+02 8.5590E+01 - 1.0000E+00 1.5595E+02 1.4896E+02 7.9708E+01 6.3766E+01 - 1.1220E+00 1.1761E+02 1.1192E+02 5.8993E+01 4.7195E+01 - 1.2589E+00 8.8149E+01 8.2653E+01 4.3408E+01 3.4756E+01 - 1.4125E+00 6.6024E+01 6.1236E+01 3.1864E+01 2.5264E+01 - 1.5849E+00 4.9323E+01 4.5462E+01 2.3212E+01 1.7986E+01 - 1.7783E+00 3.6574E+01 3.3615E+01 1.6913E+01 1.2892E+01 - 1.9953E+00 2.7066E+01 2.4664E+01 1.2168E+01 9.4448E+00 - 2.2387E+00 1.9789E+01 1.7898E+01 8.6663E+00 6.8145E+00 - 2.5119E+00 1.4564E+01 1.2986E+01 6.1430E+00 4.7956E+00 - 2.8184E+00 1.0550E+01 9.3740E+00 4.3032E+00 3.3607E+00 - 3.1623E+00 7.6467E+00 6.6789E+00 3.0517E+00 2.3129E+00 - 3.5481E+00 5.5634E+00 4.8261E+00 2.1303E+00 1.6017E+00 - 3.9811E+00 4.0298E+00 3.4607E+00 1.4647E+00 1.1067E+00 - 4.4668E+00 2.9088E+00 2.4452E+00 1.0031E+00 7.6382E-01 - 5.0119E+00 2.1014E+00 1.7556E+00 6.9140E-01 5.2996E-01 - 5.6234E+00 1.5113E+00 1.2552E+00 4.7330E-01 3.6397E-01 - 6.3096E+00 1.0887E+00 8.9530E-01 3.2171E-01 2.4582E-01 - 7.0795E+00 7.7440E-01 6.3912E-01 2.2301E-01 1.6447E-01 - 7.9433E+00 5.5858E-01 4.4853E-01 1.5091E-01 1.1309E-01 - 8.9125E+00 4.0027E-01 3.1964E-01 1.0058E-01 7.8136E-02 - 1.0000E+01 2.8520E-01 2.2757E-01 6.8584E-02 5.0719E-02 - 1.1220E+01 2.0502E-01 1.6040E-01 4.5274E-02 3.4440E-02 - 1.2589E+01 1.4589E-01 1.1433E-01 3.0289E-02 2.3296E-02 - 1.4125E+01 1.0387E-01 8.1464E-02 2.0296E-02 1.5518E-02 - 1.5849E+01 7.4297E-02 5.7747E-02 1.3725E-02 1.0230E-02 - 1.7783E+01 5.2389E-02 4.1226E-02 9.0905E-03 6.7986E-03 - 1.9953E+01 3.7615E-02 2.8883E-02 5.9415E-03 4.6756E-03 - 2.2387E+01 2.6580E-02 2.0198E-02 4.0463E-03 3.0533E-03 - 2.5119E+01 1.8964E-02 1.4500E-02 2.5898E-03 1.9855E-03 - 2.8184E+01 1.3692E-02 1.0335E-02 1.7440E-03 1.3598E-03 - 3.1623E+01 9.6517E-03 7.1916E-03 1.1732E-03 9.1940E-04 - 3.5481E+01 6.8560E-03 5.0827E-03 7.8716E-04 6.1016E-04 - 3.9811E+01 4.8704E-03 3.5840E-03 5.2605E-04 4.0568E-04 - 4.4668E+01 3.4561E-03 2.5272E-03 3.4726E-04 2.7452E-04 - 5.0119E+01 2.4431E-03 1.7812E-03 2.3026E-04 1.8636E-04 - 5.6234E+01 1.7301E-03 1.2543E-03 1.5395E-04 1.2426E-04 - 6.3096E+01 1.2244E-03 8.7923E-04 1.0491E-04 8.3384E-05 - 7.0795E+01 8.6182E-04 6.1851E-04 6.9177E-05 5.5386E-05 - 7.9433E+01 6.0489E-04 4.3474E-04 4.5811E-05 3.7467E-05 - 8.9125E+01 4.2607E-04 3.0688E-04 3.1691E-05 2.5811E-05 - 1.0000E+02 3.0177E-04 2.1332E-04 2.0777E-05 1.6777E-05 - 1.1220E+02 2.1197E-04 1.4859E-04 1.4086E-05 1.1274E-05 - 1.2589E+02 1.4892E-04 1.0362E-04 9.4280E-06 7.5717E-06 - 1.4125E+02 1.0473E-04 7.2132E-05 6.3170E-06 5.1625E-06 - 1.5849E+02 7.3298E-05 5.0431E-05 4.3319E-06 3.5416E-06 - 1.7783E+02 5.1389E-05 3.5289E-05 2.9481E-06 2.3332E-06 - 1.9953E+02 3.6000E-05 2.4451E-05 2.0168E-06 1.5773E-06 - 2.2387E+02 2.5115E-05 1.6940E-05 1.3854E-06 1.1117E-06 - 2.5119E+02 1.7539E-05 1.1696E-05 9.1363E-07 7.4192E-07 - 2.8184E+02 1.2187E-05 8.1220E-06 6.0214E-07 5.1990E-07 - 3.1623E+02 8.4988E-06 5.6165E-06 4.1206E-07 3.3847E-07 - 3.5481E+02 5.9139E-06 3.8807E-06 2.7741E-07 2.2671E-07 - 3.9811E+02 4.1248E-06 2.6713E-06 1.8911E-07 1.5260E-07 - 4.4668E+02 2.8620E-06 1.8405E-06 1.2818E-07 1.0243E-07 - 5.0119E+02 1.9870E-06 1.2759E-06 8.6448E-08 6.9200E-08 - 5.6234E+02 1.3888E-06 8.7896E-07 5.9150E-08 4.7006E-08 - 6.3096E+02 9.5829E-07 6.0378E-07 3.9969E-08 3.1019E-08 - 7.0795E+02 6.6248E-07 4.1522E-07 2.6151E-08 2.0272E-08 - 7.9433E+02 4.5635E-07 2.8675E-07 1.7790E-08 1.3264E-08 - 8.9125E+02 3.1502E-07 1.9650E-07 1.2039E-08 9.0682E-09 - 1.0000E+03 2.1738E-07 1.3323E-07 8.0329E-09 6.2808E-09 - 1.1220E+03 1.4805E-07 9.0019E-08 5.4404E-09 4.2176E-09 - 1.2589E+03 1.0135E-07 6.0895E-08 3.6972E-09 2.9391E-09 - 1.4125E+03 6.9782E-08 4.1382E-08 2.4491E-09 1.8847E-09 - 1.5849E+03 4.7062E-08 2.8537E-08 1.6109E-09 1.2288E-09 - 1.7783E+03 3.1692E-08 1.9281E-08 1.1164E-09 8.5469E-10 - 1.9953E+03 2.1713E-08 1.2764E-08 7.4273E-10 5.6825E-10 - 2.2387E+03 1.4651E-08 8.5555E-09 4.9290E-10 3.6627E-10 - 2.5119E+03 9.8358E-09 5.7984E-09 3.0651E-10 2.2835E-10 - 2.8184E+03 6.5963E-09 3.9188E-09 2.0016E-10 1.4768E-10 - 3.1623E+03 4.5151E-09 2.6564E-09 1.3645E-10 9.9830E-11 - 3.5481E+03 2.9492E-09 1.7060E-09 9.4035E-11 6.6260E-11 - 3.9811E+03 1.9763E-09 1.1315E-09 6.2738E-11 4.5757E-11 - 4.4668E+03 1.3165E-09 7.5200E-10 3.8378E-11 2.9179E-11 - 5.0119E+03 8.7971E-10 5.0013E-10 2.4421E-11 2.0191E-11 - 5.6234E+03 5.9272E-10 3.3445E-10 1.7117E-11 1.3242E-11 - 6.3096E+03 3.9044E-10 2.2221E-10 1.1592E-11 8.4218E-12 - 7.0795E+03 2.5803E-10 1.4555E-10 7.5826E-12 5.1324E-12 - 7.9433E+03 1.6936E-10 9.5276E-11 4.9268E-12 3.3204E-12 - 8.9125E+03 1.1155E-10 6.2554E-11 3.3502E-12 2.1908E-12 - 1.0000E+04 7.3560E-11 4.1364E-11 2.1405E-12 1.3113E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1659E+04 1.1613E+04 5.5779E+03 5.4220E+03 - 1.1220E-01 1.0227E+04 1.0142E+04 4.9154E+03 4.7484E+03 - 1.2589E-01 8.9331E+03 8.8102E+03 4.2891E+03 4.0937E+03 - 1.4125E-01 7.7374E+03 7.6088E+03 3.7196E+03 3.5135E+03 - 1.5849E-01 6.6384E+03 6.4974E+03 3.1896E+03 2.9997E+03 - 1.7783E-01 5.6304E+03 5.4874E+03 2.7093E+03 2.5223E+03 - 1.9953E-01 4.7058E+03 4.6046E+03 2.2906E+03 2.1066E+03 - 2.2387E-01 3.8869E+03 3.8246E+03 1.9178E+03 1.7434E+03 - 2.5119E-01 3.1967E+03 3.1188E+03 1.5884E+03 1.4294E+03 - 2.8184E-01 2.6014E+03 2.5236E+03 1.3033E+03 1.1576E+03 - 3.1623E-01 2.0830E+03 2.0230E+03 1.0577E+03 9.2633E+02 - 3.5481E-01 1.6593E+03 1.6169E+03 8.4969E+02 7.3770E+02 - 3.9811E-01 1.3113E+03 1.2807E+03 6.7676E+02 5.8023E+02 - 4.4668E-01 1.0317E+03 9.9947E+02 5.3178E+02 4.5216E+02 - 5.0119E-01 8.0257E+02 7.7511E+02 4.1606E+02 3.4988E+02 - 5.6234E-01 6.1528E+02 5.9635E+02 3.2128E+02 2.7006E+02 - 6.3096E-01 4.7512E+02 4.5641E+02 2.4712E+02 2.0729E+02 - 7.0795E-01 3.6294E+02 3.4893E+02 1.8898E+02 1.5599E+02 - 7.9433E-01 2.7597E+02 2.6240E+02 1.4295E+02 1.1698E+02 - 8.9125E-01 2.0908E+02 1.9724E+02 1.0784E+02 8.6651E+01 - 1.0000E+00 1.5630E+02 1.4850E+02 7.9538E+01 6.4319E+01 - 1.1220E+00 1.1779E+02 1.1107E+02 5.8692E+01 4.7143E+01 - 1.2589E+00 8.8124E+01 8.2421E+01 4.2846E+01 3.4553E+01 - 1.4125E+00 6.5850E+01 6.0628E+01 3.1366E+01 2.5095E+01 - 1.5849E+00 4.9455E+01 4.4924E+01 2.3134E+01 1.8007E+01 - 1.7783E+00 3.6738E+01 3.3403E+01 1.6884E+01 1.3061E+01 - 1.9953E+00 2.7025E+01 2.4486E+01 1.2096E+01 9.3544E+00 - 2.2387E+00 1.9758E+01 1.7749E+01 8.6627E+00 6.5481E+00 - 2.5119E+00 1.4444E+01 1.2880E+01 6.1365E+00 4.7069E+00 - 2.8184E+00 1.0643E+01 9.2719E+00 4.2606E+00 3.3127E+00 - 3.1623E+00 7.6993E+00 6.6733E+00 3.0607E+00 2.3197E+00 - 3.5481E+00 5.5782E+00 4.8183E+00 2.1232E+00 1.6317E+00 - 3.9811E+00 4.0236E+00 3.4363E+00 1.4760E+00 1.1249E+00 - 4.4668E+00 2.9090E+00 2.4541E+00 1.0230E+00 7.6271E-01 - 5.0119E+00 2.1072E+00 1.7568E+00 6.9731E-01 5.2260E-01 - 5.6234E+00 1.5106E+00 1.2457E+00 4.8118E-01 3.5968E-01 - 6.3096E+00 1.0753E+00 8.8576E-01 3.2631E-01 2.4155E-01 - 7.0795E+00 7.7402E-01 6.3314E-01 2.2180E-01 1.6411E-01 - 7.9433E+00 5.5265E-01 4.4818E-01 1.5220E-01 1.1163E-01 - 8.9125E+00 3.9447E-01 3.1866E-01 1.0199E-01 7.4763E-02 - 1.0000E+01 2.8498E-01 2.2756E-01 6.8469E-02 5.1353E-02 - 1.1220E+01 2.0420E-01 1.6068E-01 4.5369E-02 3.4223E-02 - 1.2589E+01 1.4551E-01 1.1356E-01 3.0416E-02 2.2665E-02 - 1.4125E+01 1.0297E-01 8.0984E-02 2.0478E-02 1.5201E-02 - 1.5849E+01 7.3822E-02 5.6991E-02 1.3379E-02 1.0334E-02 - 1.7783E+01 5.2960E-02 4.0047E-02 8.9925E-03 6.8008E-03 - 1.9953E+01 3.7323E-02 2.8879E-02 6.1193E-03 4.3721E-03 - 2.2387E+01 2.6410E-02 2.0484E-02 3.9427E-03 2.9950E-03 - 2.5119E+01 1.9208E-02 1.4210E-02 2.5941E-03 2.0338E-03 - 2.8184E+01 1.3532E-02 1.0106E-02 1.7573E-03 1.3709E-03 - 3.1623E+01 9.6825E-03 7.2062E-03 1.1810E-03 9.1838E-04 - 3.5481E+01 6.8637E-03 5.0888E-03 7.8836E-04 6.1323E-04 - 3.9811E+01 4.8757E-03 3.5961E-03 5.1992E-04 4.0895E-04 - 4.4668E+01 3.4684E-03 2.5436E-03 3.4435E-04 2.7668E-04 - 5.0119E+01 2.4520E-03 1.7879E-03 2.3066E-04 1.8688E-04 - 5.6234E+01 1.7254E-03 1.2542E-03 1.5510E-04 1.2420E-04 - 6.3096E+01 1.2190E-03 8.8415E-04 1.0183E-04 8.2259E-05 - 7.0795E+01 8.6058E-04 6.2097E-04 6.8419E-05 5.5279E-05 - 7.9433E+01 6.0721E-04 4.3615E-04 4.6626E-05 3.8150E-05 - 8.9125E+01 4.3139E-04 3.0582E-04 3.0854E-05 2.4806E-05 - 1.0000E+02 3.0182E-04 2.1315E-04 2.0889E-05 1.6910E-05 - 1.1220E+02 2.1260E-04 1.4952E-04 1.4150E-05 1.1275E-05 - 1.2589E+02 1.4924E-04 1.0424E-04 9.4692E-06 7.5899E-06 - 1.4125E+02 1.0414E-04 7.2272E-05 6.3338E-06 5.2085E-06 - 1.5849E+02 7.2678E-05 5.0154E-05 4.2484E-06 3.5275E-06 - 1.7783E+02 5.1064E-05 3.4830E-05 2.8579E-06 2.3179E-06 - 1.9953E+02 3.5716E-05 2.4092E-05 1.9468E-06 1.5431E-06 - 2.2387E+02 2.4965E-05 1.6728E-05 1.3454E-06 1.0859E-06 - 2.5119E+02 1.7400E-05 1.1639E-05 8.8722E-07 7.5106E-07 - 2.8184E+02 1.2252E-05 8.1222E-06 5.9548E-07 5.0171E-07 - 3.1623E+02 8.5116E-06 5.6023E-06 4.1163E-07 3.3673E-07 - 3.5481E+02 5.9258E-06 3.8753E-06 2.8101E-07 2.2016E-07 - 3.9811E+02 4.1223E-06 2.6802E-06 1.8932E-07 1.4914E-07 - 4.4668E+02 2.8641E-06 1.8418E-06 1.2521E-07 1.0612E-07 - 5.0119E+02 1.9919E-06 1.2734E-06 8.4952E-08 7.1312E-08 - 5.6234E+02 1.3862E-06 8.7799E-07 5.7872E-08 4.6689E-08 - 6.3096E+02 9.5639E-07 5.9937E-07 3.9750E-08 3.1220E-08 - 7.0795E+02 6.6178E-07 4.1455E-07 2.6625E-08 2.0732E-08 - 7.9433E+02 4.5507E-07 2.8419E-07 1.7222E-08 1.4393E-08 - 8.9125E+02 3.1218E-07 1.9412E-07 1.2099E-08 9.6302E-09 - 1.0000E+03 2.1697E-07 1.3380E-07 7.9176E-09 6.3294E-09 - 1.1220E+03 1.4833E-07 8.9850E-08 5.2850E-09 4.1144E-09 - 1.2589E+03 1.0083E-07 6.1129E-08 3.7539E-09 2.7104E-09 - 1.4125E+03 6.8764E-08 4.1815E-08 2.5589E-09 1.8079E-09 - 1.5849E+03 4.6896E-08 2.8298E-08 1.6601E-09 1.2198E-09 - 1.7783E+03 3.1958E-08 1.8954E-08 1.0416E-09 8.1553E-10 - 1.9953E+03 2.1530E-08 1.2787E-08 6.9024E-10 5.3442E-10 - 2.2387E+03 1.4506E-08 8.6096E-09 4.7522E-10 3.6417E-10 - 2.5119E+03 9.7415E-09 5.8127E-09 3.3363E-10 2.3000E-10 - 2.8184E+03 6.5702E-09 3.8468E-09 2.0539E-10 1.5301E-10 - 3.1623E+03 4.5357E-09 2.6425E-09 1.3820E-10 1.0211E-10 - 3.5481E+03 2.9740E-09 1.7249E-09 9.4048E-11 6.8093E-11 - 3.9811E+03 1.9819E-09 1.1379E-09 6.2167E-11 4.5355E-11 - 4.4668E+03 1.3266E-09 7.6306E-10 4.1456E-11 2.9222E-11 - 5.0119E+03 8.8256E-10 5.0355E-10 2.7798E-11 1.8284E-11 - 5.6234E+03 5.7732E-10 3.3085E-10 1.5387E-11 1.3279E-11 - 6.3096E+03 3.8774E-10 2.1885E-10 1.1521E-11 8.0697E-12 - 7.0795E+03 2.5814E-10 1.4469E-10 7.6817E-12 5.2384E-12 - 7.9433E+03 1.6850E-10 9.5236E-11 4.9326E-12 3.5543E-12 - 8.9125E+03 1.1168E-10 6.2686E-11 3.3064E-12 2.4619E-12 - 1.0000E+04 7.4650E-11 4.1358E-11 2.1175E-12 1.5169E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1729E+04 1.1652E+04 5.6220E+03 5.4271E+03 - 1.1220E-01 1.0274E+04 1.0202E+04 4.9783E+03 4.7380E+03 - 1.2589E-01 9.0008E+03 8.8879E+03 4.3340E+03 4.1157E+03 - 1.4125E-01 7.8072E+03 7.6597E+03 3.7504E+03 3.5304E+03 - 1.5849E-01 6.6822E+03 6.5482E+03 3.2348E+03 3.0066E+03 - 1.7783E-01 5.6663E+03 5.5502E+03 2.7482E+03 2.5405E+03 - 1.9953E-01 4.7473E+03 4.6311E+03 2.3141E+03 2.1253E+03 - 2.2387E-01 3.9366E+03 3.8269E+03 1.9392E+03 1.7584E+03 - 2.5119E-01 3.2204E+03 3.1246E+03 1.6022E+03 1.4361E+03 - 2.8184E-01 2.6037E+03 2.5288E+03 1.3073E+03 1.1558E+03 - 3.1623E-01 2.0856E+03 2.0409E+03 1.0625E+03 9.2371E+02 - 3.5481E-01 1.6625E+03 1.6208E+03 8.5542E+02 7.3554E+02 - 3.9811E-01 1.3147E+03 1.2763E+03 6.7559E+02 5.8067E+02 - 4.4668E-01 1.0268E+03 1.0060E+03 5.3245E+02 4.5340E+02 - 5.0119E-01 7.9606E+02 7.8489E+02 4.1285E+02 3.5017E+02 - 5.6234E-01 6.1564E+02 5.9754E+02 3.1802E+02 2.6763E+02 - 6.3096E-01 4.7159E+02 4.5527E+02 2.4609E+02 2.0308E+02 - 7.0795E-01 3.5834E+02 3.4701E+02 1.8663E+02 1.5323E+02 - 7.9433E-01 2.7183E+02 2.6423E+02 1.4038E+02 1.1406E+02 - 8.9125E-01 2.0713E+02 2.0006E+02 1.0573E+02 8.5399E+01 - 1.0000E+00 1.5744E+02 1.4936E+02 7.9680E+01 6.4330E+01 - 1.1220E+00 1.1828E+02 1.1065E+02 5.8807E+01 4.7019E+01 - 1.2589E+00 8.8579E+01 8.2365E+01 4.3090E+01 3.4381E+01 - 1.4125E+00 6.6276E+01 6.1347E+01 3.1757E+01 2.5357E+01 - 1.5849E+00 4.9081E+01 4.5392E+01 2.3255E+01 1.8345E+01 - 1.7783E+00 3.5997E+01 3.3355E+01 1.6833E+01 1.3080E+01 - 1.9953E+00 2.6772E+01 2.4253E+01 1.2217E+01 9.3647E+00 - 2.2387E+00 1.9909E+01 1.7480E+01 8.6665E+00 6.6362E+00 - 2.5119E+00 1.4472E+01 1.2653E+01 6.0492E+00 4.6777E+00 - 2.8184E+00 1.0546E+01 9.1527E+00 4.2694E+00 3.2932E+00 - 3.1623E+00 7.6963E+00 6.6852E+00 3.0321E+00 2.3065E+00 - 3.5481E+00 5.5880E+00 4.8025E+00 2.1243E+00 1.6087E+00 - 3.9811E+00 4.0284E+00 3.4470E+00 1.4779E+00 1.1107E+00 - 4.4668E+00 2.8866E+00 2.4697E+00 1.0195E+00 7.6720E-01 - 5.0119E+00 2.0792E+00 1.7639E+00 6.9375E-01 5.3358E-01 - 5.6234E+00 1.5077E+00 1.2630E+00 4.7323E-01 3.5946E-01 - 6.3096E+00 1.0810E+00 8.9077E-01 3.2791E-01 2.4387E-01 - 7.0795E+00 7.7119E-01 6.2797E-01 2.2193E-01 1.6577E-01 - 7.9433E+00 5.5040E-01 4.4989E-01 1.5205E-01 1.1361E-01 - 8.9125E+00 3.9300E-01 3.1815E-01 1.0051E-01 7.6492E-02 - 1.0000E+01 2.8464E-01 2.2659E-01 6.7927E-02 5.1686E-02 - 1.1220E+01 2.0352E-01 1.6075E-01 4.6409E-02 3.4349E-02 - 1.2589E+01 1.4532E-01 1.1407E-01 3.0628E-02 2.2929E-02 - 1.4125E+01 1.0445E-01 8.1454E-02 2.0155E-02 1.5345E-02 - 1.5849E+01 7.4640E-02 5.7758E-02 1.3698E-02 1.0304E-02 - 1.7783E+01 5.3155E-02 4.1153E-02 9.1110E-03 6.6872E-03 - 1.9953E+01 3.8004E-02 2.9095E-02 6.0185E-03 4.4377E-03 - 2.2387E+01 2.7204E-02 2.0380E-02 3.9704E-03 3.1306E-03 - 2.5119E+01 1.9430E-02 1.4503E-02 2.7172E-03 2.1669E-03 - 2.8184E+01 1.3648E-02 1.0393E-02 1.7667E-03 1.4466E-03 - 3.1623E+01 9.6454E-03 7.1922E-03 1.1779E-03 9.1890E-04 - 3.5481E+01 6.8402E-03 5.0797E-03 7.7916E-04 6.1326E-04 - 3.9811E+01 4.8475E-03 3.5902E-03 5.1853E-04 4.0810E-04 - 4.4668E+01 3.4437E-03 2.5311E-03 3.4858E-04 2.7418E-04 - 5.0119E+01 2.4422E-03 1.7797E-03 2.3309E-04 1.8552E-04 - 5.6234E+01 1.7324E-03 1.2503E-03 1.5543E-04 1.2320E-04 - 6.3096E+01 1.2230E-03 8.8697E-04 1.0286E-04 8.0385E-05 - 7.0795E+01 8.6015E-04 6.2300E-04 6.8799E-05 5.4092E-05 - 7.9433E+01 6.0951E-04 4.3368E-04 4.6483E-05 3.7008E-05 - 8.9125E+01 4.2705E-04 3.0493E-04 3.1033E-05 2.4158E-05 - 1.0000E+02 3.0142E-04 2.1179E-04 2.0844E-05 1.6942E-05 - 1.1220E+02 2.1216E-04 1.4821E-04 1.4050E-05 1.1333E-05 - 1.2589E+02 1.4836E-04 1.0343E-04 9.3384E-06 7.7646E-06 - 1.4125E+02 1.0372E-04 7.1969E-05 6.2772E-06 5.2671E-06 - 1.5849E+02 7.2785E-05 5.0140E-05 4.2390E-06 3.4793E-06 - 1.7783E+02 5.1005E-05 3.4704E-05 2.8307E-06 2.3103E-06 - 1.9953E+02 3.5689E-05 2.4208E-05 1.9204E-06 1.5871E-06 - 2.2387E+02 2.5020E-05 1.6748E-05 1.3355E-06 1.0866E-06 - 2.5119E+02 1.7562E-05 1.1546E-05 9.2093E-07 7.3914E-07 - 2.8184E+02 1.2261E-05 8.0454E-06 6.1166E-07 5.1015E-07 - 3.1623E+02 8.5233E-06 5.6248E-06 4.1058E-07 3.3588E-07 - 3.5481E+02 5.9385E-06 3.8636E-06 2.7878E-07 2.2551E-07 - 3.9811E+02 4.1227E-06 2.6614E-06 1.8965E-07 1.5308E-07 - 4.4668E+02 2.8692E-06 1.8492E-06 1.2745E-07 1.0464E-07 - 5.0119E+02 1.9928E-06 1.2716E-06 8.6929E-08 6.8532E-08 - 5.6234E+02 1.3840E-06 8.7644E-07 5.9425E-08 4.6602E-08 - 6.3096E+02 9.5155E-07 6.0387E-07 3.9741E-08 3.1904E-08 - 7.0795E+02 6.5822E-07 4.1443E-07 2.6471E-08 2.0575E-08 - 7.9433E+02 4.5547E-07 2.8353E-07 1.7559E-08 1.3315E-08 - 8.9125E+02 3.1229E-07 1.9378E-07 1.1776E-08 8.9247E-09 - 1.0000E+03 2.1728E-07 1.3187E-07 7.9393E-09 6.0496E-09 - 1.1220E+03 1.4749E-07 8.8583E-08 5.3636E-09 4.2162E-09 - 1.2589E+03 1.0096E-07 6.0739E-08 3.5966E-09 2.7660E-09 - 1.4125E+03 6.9058E-08 4.1521E-08 2.4472E-09 1.8684E-09 - 1.5849E+03 4.6662E-08 2.7933E-08 1.7213E-09 1.2723E-09 - 1.7783E+03 3.1709E-08 1.8753E-08 1.0762E-09 7.9880E-10 - 1.9953E+03 2.1560E-08 1.2731E-08 6.6273E-10 5.6058E-10 - 2.2387E+03 1.4494E-08 8.6238E-09 4.5193E-10 3.6814E-10 - 2.5119E+03 9.8216E-09 5.8482E-09 3.1111E-10 2.3742E-10 - 2.8184E+03 6.6643E-09 3.8965E-09 2.0705E-10 1.5941E-10 - 3.1623E+03 4.5204E-09 2.6554E-09 1.3393E-10 1.0471E-10 - 3.5481E+03 2.9418E-09 1.7383E-09 9.1586E-11 7.0397E-11 - 3.9811E+03 1.9905E-09 1.1484E-09 6.4110E-11 4.6894E-11 - 4.4668E+03 1.3274E-09 7.6503E-10 4.1228E-11 3.2275E-11 - 5.0119E+03 8.7589E-10 4.9834E-10 2.6191E-11 2.1062E-11 - 5.6234E+03 5.7690E-10 3.3020E-10 1.6750E-11 1.3249E-11 - 6.3096E+03 3.8476E-10 2.1855E-10 1.1781E-11 7.8653E-12 - 7.0795E+03 2.5518E-10 1.4448E-10 7.8853E-12 5.2864E-12 - 7.9433E+03 1.6878E-10 9.5469E-11 4.9175E-12 3.4754E-12 - 8.9125E+03 1.1199E-10 6.2530E-11 3.0084E-12 2.1661E-12 - 1.0000E+04 7.4320E-11 4.0294E-11 2.1547E-12 1.5099E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1814E+04 1.1801E+04 5.7100E+03 5.4610E+03 - 1.1220E-01 1.0378E+04 1.0318E+04 5.0565E+03 4.7819E+03 - 1.2589E-01 9.0328E+03 8.9798E+03 4.4106E+03 4.1409E+03 - 1.4125E-01 7.8347E+03 7.7660E+03 3.8063E+03 3.5433E+03 - 1.5849E-01 6.7244E+03 6.6389E+03 3.2737E+03 2.9992E+03 - 1.7783E-01 5.7003E+03 5.6108E+03 2.7866E+03 2.5327E+03 - 1.9953E-01 4.7823E+03 4.6905E+03 2.3506E+03 2.1258E+03 - 2.2387E-01 3.9546E+03 3.8752E+03 1.9707E+03 1.7465E+03 - 2.5119E-01 3.2381E+03 3.1660E+03 1.6330E+03 1.4348E+03 - 2.8184E-01 2.6171E+03 2.5595E+03 1.3338E+03 1.1714E+03 - 3.1623E-01 2.0955E+03 2.0579E+03 1.0816E+03 9.3933E+02 - 3.5481E-01 1.6744E+03 1.6392E+03 8.6518E+02 7.4127E+02 - 3.9811E-01 1.3190E+03 1.2900E+03 6.8217E+02 5.7968E+02 - 4.4668E-01 1.0294E+03 1.0061E+03 5.3607E+02 4.5458E+02 - 5.0119E-01 8.0154E+02 7.7852E+02 4.2071E+02 3.5312E+02 - 5.6234E-01 6.1876E+02 6.0404E+02 3.2670E+02 2.6892E+02 - 6.3096E-01 4.7438E+02 4.6220E+02 2.4900E+02 2.0268E+02 - 7.0795E-01 3.5975E+02 3.4900E+02 1.8945E+02 1.5367E+02 - 7.9433E-01 2.7384E+02 2.6340E+02 1.4249E+02 1.1656E+02 - 8.9125E-01 2.0819E+02 1.9854E+02 1.0615E+02 8.6246E+01 - 1.0000E+00 1.5648E+02 1.4947E+02 7.9408E+01 6.3203E+01 - 1.1220E+00 1.1656E+02 1.1138E+02 5.8355E+01 4.6980E+01 - 1.2589E+00 8.7302E+01 8.2527E+01 4.3063E+01 3.4362E+01 - 1.4125E+00 6.5644E+01 6.1218E+01 3.1918E+01 2.4977E+01 - 1.5849E+00 4.9187E+01 4.5292E+01 2.3185E+01 1.8248E+01 - 1.7783E+00 3.6589E+01 3.3436E+01 1.6781E+01 1.3371E+01 - 1.9953E+00 2.6717E+01 2.4429E+01 1.2127E+01 9.5464E+00 - 2.2387E+00 1.9535E+01 1.7732E+01 8.6932E+00 6.5946E+00 - 2.5119E+00 1.4442E+01 1.2840E+01 6.1942E+00 4.6949E+00 - 2.8184E+00 1.0605E+01 9.3322E+00 4.3205E+00 3.3662E+00 - 3.1623E+00 7.6638E+00 6.6701E+00 3.0635E+00 2.3252E+00 - 3.5481E+00 5.5720E+00 4.7777E+00 2.1174E+00 1.6181E+00 - 3.9811E+00 4.0261E+00 3.4451E+00 1.4749E+00 1.1168E+00 - 4.4668E+00 2.9025E+00 2.4746E+00 1.0259E+00 7.7390E-01 - 5.0119E+00 2.0953E+00 1.7694E+00 6.9764E-01 5.2860E-01 - 5.6234E+00 1.5156E+00 1.2538E+00 4.8251E-01 3.5776E-01 - 6.3096E+00 1.0904E+00 8.8643E-01 3.2957E-01 2.4660E-01 - 7.0795E+00 7.8323E-01 6.2959E-01 2.2156E-01 1.6622E-01 - 7.9433E+00 5.6100E-01 4.4924E-01 1.5135E-01 1.1470E-01 - 8.9125E+00 4.0060E-01 3.2251E-01 1.0314E-01 7.9786E-02 - 1.0000E+01 2.8651E-01 2.2686E-01 6.8425E-02 5.1165E-02 - 1.1220E+01 2.0324E-01 1.6170E-01 4.5197E-02 3.3964E-02 - 1.2589E+01 1.4530E-01 1.1390E-01 3.0241E-02 2.2799E-02 - 1.4125E+01 1.0418E-01 7.9864E-02 2.0110E-02 1.5594E-02 - 1.5849E+01 7.4077E-02 5.6129E-02 1.3523E-02 1.0350E-02 - 1.7783E+01 5.2716E-02 4.0113E-02 9.0488E-03 6.8467E-03 - 1.9953E+01 3.7705E-02 2.8724E-02 5.9255E-03 4.3588E-03 - 2.2387E+01 2.6683E-02 2.0356E-02 4.0169E-03 2.8984E-03 - 2.5119E+01 1.8778E-02 1.4336E-02 2.7672E-03 2.0652E-03 - 2.8184E+01 1.3402E-02 1.0059E-02 1.7706E-03 1.3784E-03 - 3.1623E+01 9.6339E-03 7.1875E-03 1.1800E-03 9.2063E-04 - 3.5481E+01 6.8579E-03 5.0895E-03 7.8609E-04 6.1846E-04 - 3.9811E+01 4.8724E-03 3.5919E-03 5.2302E-04 4.0950E-04 - 4.4668E+01 3.4560E-03 2.5306E-03 3.4698E-04 2.7372E-04 - 5.0119E+01 2.4479E-03 1.7797E-03 2.3150E-04 1.8283E-04 - 5.6234E+01 1.7303E-03 1.2511E-03 1.5601E-04 1.2232E-04 - 6.3096E+01 1.2205E-03 8.8055E-04 1.0469E-04 8.4659E-05 - 7.0795E+01 8.6082E-04 6.2122E-04 7.0115E-05 5.4614E-05 - 7.9433E+01 6.0441E-04 4.3006E-04 4.6873E-05 3.6208E-05 - 8.9125E+01 4.2230E-04 3.0140E-04 3.2089E-05 2.4834E-05 - 1.0000E+02 3.0041E-04 2.1188E-04 2.0981E-05 1.6974E-05 - 1.1220E+02 2.1110E-04 1.4858E-04 1.4168E-05 1.1418E-05 - 1.2589E+02 1.4845E-04 1.0355E-04 9.5350E-06 7.6931E-06 - 1.4125E+02 1.0395E-04 7.2218E-05 6.4025E-06 5.1489E-06 - 1.5849E+02 7.3141E-05 5.0376E-05 4.3533E-06 3.5120E-06 - 1.7783E+02 5.1425E-05 3.4893E-05 2.9175E-06 2.4031E-06 - 1.9953E+02 3.5833E-05 2.4165E-05 1.9258E-06 1.5844E-06 - 2.2387E+02 2.4965E-05 1.6885E-05 1.3493E-06 1.0564E-06 - 2.5119E+02 1.7374E-05 1.1791E-05 9.1499E-07 7.2278E-07 - 2.8184E+02 1.2187E-05 8.1810E-06 6.2842E-07 4.9420E-07 - 3.1623E+02 8.4974E-06 5.5985E-06 4.1304E-07 3.3745E-07 - 3.5481E+02 5.9119E-06 3.8598E-06 2.7871E-07 2.2887E-07 - 3.9811E+02 4.1137E-06 2.6864E-06 1.8969E-07 1.5372E-07 - 4.4668E+02 2.8558E-06 1.8589E-06 1.2976E-07 1.0392E-07 - 5.0119E+02 1.9961E-06 1.2745E-06 8.7181E-08 7.1577E-08 - 5.6234E+02 1.3894E-06 8.7872E-07 5.8091E-08 4.7612E-08 - 6.3096E+02 9.5398E-07 6.0153E-07 3.9184E-08 3.2257E-08 - 7.0795E+02 6.5850E-07 4.1337E-07 2.6791E-08 2.1332E-08 - 7.9433E+02 4.5474E-07 2.8325E-07 1.7696E-08 1.3766E-08 - 8.9125E+02 3.1439E-07 1.9342E-07 1.1845E-08 9.0270E-09 - 1.0000E+03 2.1725E-07 1.3262E-07 8.1063E-09 6.4761E-09 - 1.1220E+03 1.4794E-07 8.9244E-08 5.5332E-09 4.1427E-09 - 1.2589E+03 1.0127E-07 6.1180E-08 3.7028E-09 2.7058E-09 - 1.4125E+03 6.8998E-08 4.1762E-08 2.5796E-09 1.8287E-09 - 1.5849E+03 4.7109E-08 2.7872E-08 1.7483E-09 1.2031E-09 - 1.7783E+03 3.1978E-08 1.8996E-08 1.0633E-09 8.3937E-10 - 1.9953E+03 2.1508E-08 1.2967E-08 7.1630E-10 5.3635E-10 - 2.2387E+03 1.4558E-08 8.5921E-09 5.0885E-10 3.4861E-10 - 2.5119E+03 9.7745E-09 5.7074E-09 3.3703E-10 2.2869E-10 - 2.8184E+03 6.5471E-09 3.8519E-09 2.2476E-10 1.4648E-10 - 3.1623E+03 4.5565E-09 2.6446E-09 1.4260E-10 1.0362E-10 - 3.5481E+03 2.9492E-09 1.7134E-09 9.3322E-11 6.8372E-11 - 3.9811E+03 1.9736E-09 1.1387E-09 6.0634E-11 4.3818E-11 - 4.4668E+03 1.3223E-09 7.6034E-10 3.9284E-11 2.8461E-11 - 5.0119E+03 8.8253E-10 4.9731E-10 2.5807E-11 1.7861E-11 - 5.6234E+03 5.8346E-10 3.2161E-10 1.7502E-11 1.2089E-11 - 6.3096E+03 3.9140E-10 2.1670E-10 1.1965E-11 8.0437E-12 - 7.0795E+03 2.5682E-10 1.4224E-10 7.8284E-12 5.1780E-12 - 7.9433E+03 1.6956E-10 9.5358E-11 5.1903E-12 3.5143E-12 - 8.9125E+03 1.1204E-10 6.3806E-11 3.2252E-12 2.1645E-12 - 1.0000E+04 7.3327E-11 4.0928E-11 2.1554E-12 1.4167E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1873E+04 1.1929E+04 5.8148E+03 5.4205E+03 - 1.1220E-01 1.0416E+04 1.0457E+04 5.1262E+03 4.7540E+03 - 1.2589E-01 9.0972E+03 9.1226E+03 4.4638E+03 4.1386E+03 - 1.4125E-01 7.8773E+03 7.8820E+03 3.8892E+03 3.5304E+03 - 1.5849E-01 6.7249E+03 6.7326E+03 3.3582E+03 3.0088E+03 - 1.7783E-01 5.6995E+03 5.6966E+03 2.8531E+03 2.5439E+03 - 1.9953E-01 4.7686E+03 4.7608E+03 2.3945E+03 2.1151E+03 - 2.2387E-01 3.9433E+03 3.9326E+03 1.9952E+03 1.7483E+03 - 2.5119E-01 3.2501E+03 3.2168E+03 1.6480E+03 1.4381E+03 - 2.8184E-01 2.6342E+03 2.5996E+03 1.3493E+03 1.1660E+03 - 3.1623E-01 2.0959E+03 2.0833E+03 1.1009E+03 9.3139E+02 - 3.5481E-01 1.6725E+03 1.6537E+03 8.8081E+02 7.3833E+02 - 3.9811E-01 1.3185E+03 1.3044E+03 6.9363E+02 5.7978E+02 - 4.4668E-01 1.0245E+03 1.0191E+03 5.4838E+02 4.4959E+02 - 5.0119E-01 8.0094E+02 7.8531E+02 4.2848E+02 3.4752E+02 - 5.6234E-01 6.1617E+02 6.0280E+02 3.2760E+02 2.6857E+02 - 6.3096E-01 4.6973E+02 4.6019E+02 2.5137E+02 2.0422E+02 - 7.0795E-01 3.5770E+02 3.5073E+02 1.9099E+02 1.5128E+02 - 7.9433E-01 2.7384E+02 2.6467E+02 1.4441E+02 1.1369E+02 - 8.9125E-01 2.0797E+02 1.9866E+02 1.0848E+02 8.5450E+01 - 1.0000E+00 1.5669E+02 1.4932E+02 8.0481E+01 6.3424E+01 - 1.1220E+00 1.1792E+02 1.1166E+02 5.9292E+01 4.6911E+01 - 1.2589E+00 8.8400E+01 8.2717E+01 4.3472E+01 3.4331E+01 - 1.4125E+00 6.5937E+01 6.0918E+01 3.1777E+01 2.4998E+01 - 1.5849E+00 4.8923E+01 4.4794E+01 2.3227E+01 1.8045E+01 - 1.7783E+00 3.6592E+01 3.2879E+01 1.6797E+01 1.2986E+01 - 1.9953E+00 2.7050E+01 2.4160E+01 1.2089E+01 9.4309E+00 - 2.2387E+00 1.9657E+01 1.7725E+01 8.5031E+00 6.7340E+00 - 2.5119E+00 1.4454E+01 1.2892E+01 6.0688E+00 4.7274E+00 - 2.8184E+00 1.0512E+01 9.2444E+00 4.2887E+00 3.3529E+00 - 3.1623E+00 7.6739E+00 6.6838E+00 3.0157E+00 2.3051E+00 - 3.5481E+00 5.5431E+00 4.7779E+00 2.1159E+00 1.6169E+00 - 3.9811E+00 3.9972E+00 3.4081E+00 1.4573E+00 1.1242E+00 - 4.4668E+00 2.8943E+00 2.4601E+00 1.0090E+00 7.8147E-01 - 5.0119E+00 2.0945E+00 1.7648E+00 6.9859E-01 5.2839E-01 - 5.6234E+00 1.5150E+00 1.2449E+00 4.7499E-01 3.4990E-01 - 6.3096E+00 1.0765E+00 8.8286E-01 3.2573E-01 2.4049E-01 - 7.0795E+00 7.6862E-01 6.2889E-01 2.2100E-01 1.6168E-01 - 7.9433E+00 5.5241E-01 4.4954E-01 1.4587E-01 1.1034E-01 - 8.9125E+00 3.9729E-01 3.1994E-01 9.7581E-02 7.6523E-02 - 1.0000E+01 2.8509E-01 2.2556E-01 6.7994E-02 5.1575E-02 - 1.1220E+01 2.0371E-01 1.5932E-01 4.5475E-02 3.4404E-02 - 1.2589E+01 1.4468E-01 1.1188E-01 3.0386E-02 2.2341E-02 - 1.4125E+01 1.0243E-01 7.9573E-02 2.0199E-02 1.5056E-02 - 1.5849E+01 7.3131E-02 5.6638E-02 1.3396E-02 1.0183E-02 - 1.7783E+01 5.2355E-02 3.9750E-02 8.9619E-03 6.7327E-03 - 1.9953E+01 3.7457E-02 2.8059E-02 5.9648E-03 4.5037E-03 - 2.2387E+01 2.6822E-02 2.0157E-02 3.9555E-03 2.9733E-03 - 2.5119E+01 1.8994E-02 1.4456E-02 2.6083E-03 1.9973E-03 - 2.8184E+01 1.3495E-02 1.0306E-02 1.7118E-03 1.4355E-03 - 3.1623E+01 9.6418E-03 7.2029E-03 1.1794E-03 9.1303E-04 - 3.5481E+01 6.8394E-03 5.0860E-03 7.8360E-04 6.0839E-04 - 3.9811E+01 4.8559E-03 3.5933E-03 5.2301E-04 4.0846E-04 - 4.4668E+01 3.4389E-03 2.5355E-03 3.4650E-04 2.7390E-04 - 5.0119E+01 2.4346E-03 1.7827E-03 2.3099E-04 1.8315E-04 - 5.6234E+01 1.7212E-03 1.2568E-03 1.5449E-04 1.2469E-04 - 6.3096E+01 1.2182E-03 8.8249E-04 1.0480E-04 8.3150E-05 - 7.0795E+01 8.6283E-04 6.1845E-04 6.9728E-05 5.4670E-05 - 7.9433E+01 6.0770E-04 4.3282E-04 4.5235E-05 3.7128E-05 - 8.9125E+01 4.3005E-04 3.0288E-04 3.0071E-05 2.5135E-05 - 1.0000E+02 3.0236E-04 2.1271E-04 2.0926E-05 1.6873E-05 - 1.1220E+02 2.1132E-04 1.4795E-04 1.4121E-05 1.1430E-05 - 1.2589E+02 1.4841E-04 1.0325E-04 9.4441E-06 7.8159E-06 - 1.4125E+02 1.0448E-04 7.2382E-05 6.2872E-06 5.2657E-06 - 1.5849E+02 7.3187E-05 5.0240E-05 4.2217E-06 3.5626E-06 - 1.7783E+02 5.1159E-05 3.4812E-05 2.9100E-06 2.4195E-06 - 1.9953E+02 3.5814E-05 2.4230E-05 2.0105E-06 1.6167E-06 - 2.2387E+02 2.5029E-05 1.6838E-05 1.3334E-06 1.0940E-06 - 2.5119E+02 1.7473E-05 1.1770E-05 8.9484E-07 7.5122E-07 - 2.8184E+02 1.2153E-05 8.2104E-06 6.0690E-07 5.0411E-07 - 3.1623E+02 8.4962E-06 5.5942E-06 4.1073E-07 3.3234E-07 - 3.5481E+02 5.9163E-06 3.8597E-06 2.7627E-07 2.2165E-07 - 3.9811E+02 4.1145E-06 2.6853E-06 1.8698E-07 1.5299E-07 - 4.4668E+02 2.8637E-06 1.8587E-06 1.2525E-07 1.0244E-07 - 5.0119E+02 1.9905E-06 1.2760E-06 8.5365E-08 6.8928E-08 - 5.6234E+02 1.3845E-06 8.7468E-07 5.8290E-08 4.6563E-08 - 6.3096E+02 9.5134E-07 6.0029E-07 3.9282E-08 3.1160E-08 - 7.0795E+02 6.5994E-07 4.1525E-07 2.6257E-08 2.0429E-08 - 7.9433E+02 4.5693E-07 2.8579E-07 1.7532E-08 1.4096E-08 - 8.9125E+02 3.1441E-07 1.9369E-07 1.1855E-08 9.4964E-09 - 1.0000E+03 2.1736E-07 1.3213E-07 7.9695E-09 6.2919E-09 - 1.1220E+03 1.4707E-07 9.0282E-08 5.5050E-09 4.2336E-09 - 1.2589E+03 1.0059E-07 6.1428E-08 3.7457E-09 2.6889E-09 - 1.4125E+03 6.8850E-08 4.1283E-08 2.4378E-09 1.7493E-09 - 1.5849E+03 4.6798E-08 2.7609E-08 1.5211E-09 1.1884E-09 - 1.7783E+03 3.1911E-08 1.8722E-08 1.0395E-09 8.4671E-10 - 1.9953E+03 2.1642E-08 1.2923E-08 7.1024E-10 5.2342E-10 - 2.2387E+03 1.4684E-08 8.6049E-09 4.9983E-10 3.2367E-10 - 2.5119E+03 9.8834E-09 5.7902E-09 3.3601E-10 2.2956E-10 - 2.8184E+03 6.5702E-09 3.9520E-09 2.1531E-10 1.6251E-10 - 3.1623E+03 4.5467E-09 2.6239E-09 1.4400E-10 1.0216E-10 - 3.5481E+03 2.9823E-09 1.6963E-09 9.6846E-11 6.7765E-11 - 3.9811E+03 1.9926E-09 1.1411E-09 6.3284E-11 4.6314E-11 - 4.4668E+03 1.3211E-09 7.7013E-10 3.9456E-11 3.0037E-11 - 5.0119E+03 8.8143E-10 5.0540E-10 2.5532E-11 1.9611E-11 - 5.6234E+03 5.9260E-10 3.2276E-10 1.7292E-11 1.2612E-11 - 6.3096E+03 3.8689E-10 2.1959E-10 1.1372E-11 8.2821E-12 - 7.0795E+03 2.5576E-10 1.4597E-10 7.4801E-12 5.4779E-12 - 7.9433E+03 1.6986E-10 9.4177E-11 4.8036E-12 3.4225E-12 - 8.9125E+03 1.1279E-10 6.2154E-11 3.0864E-12 2.1101E-12 - 1.0000E+04 7.4924E-11 4.1594E-11 1.9467E-12 1.3970E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1869E+04 1.2129E+04 5.9483E+03 5.4347E+03 - 1.1220E-01 1.0419E+04 1.0624E+04 5.2687E+03 4.7575E+03 - 1.2589E-01 9.0971E+03 9.2455E+03 4.5952E+03 4.1118E+03 - 1.4125E-01 7.9039E+03 8.0161E+03 3.9669E+03 3.5396E+03 - 1.5849E-01 6.7797E+03 6.8841E+03 3.4264E+03 2.9998E+03 - 1.7783E-01 5.7274E+03 5.8024E+03 2.9138E+03 2.5193E+03 - 1.9953E-01 4.7906E+03 4.8236E+03 2.4492E+03 2.1132E+03 - 2.2387E-01 3.9652E+03 3.9872E+03 2.0495E+03 1.7420E+03 - 2.5119E-01 3.2404E+03 3.2517E+03 1.6892E+03 1.4189E+03 - 2.8184E-01 2.6128E+03 2.6222E+03 1.3819E+03 1.1562E+03 - 3.1623E-01 2.0992E+03 2.1057E+03 1.1146E+03 9.2585E+02 - 3.5481E-01 1.6731E+03 1.6743E+03 8.8811E+02 7.3595E+02 - 3.9811E-01 1.3131E+03 1.3137E+03 7.0733E+02 5.7884E+02 - 4.4668E-01 1.0266E+03 1.0262E+03 5.5625E+02 4.4779E+02 - 5.0119E-01 7.9910E+02 7.9721E+02 4.3081E+02 3.4535E+02 - 5.6234E-01 6.1555E+02 6.1273E+02 3.2964E+02 2.6451E+02 - 6.3096E-01 4.7285E+02 4.6549E+02 2.5422E+02 2.0273E+02 - 7.0795E-01 3.6093E+02 3.5136E+02 1.9444E+02 1.5425E+02 - 7.9433E-01 2.7324E+02 2.6529E+02 1.4517E+02 1.1461E+02 - 8.9125E-01 2.0682E+02 2.0004E+02 1.0891E+02 8.5004E+01 - 1.0000E+00 1.5654E+02 1.5012E+02 8.1089E+01 6.3405E+01 - 1.1220E+00 1.1769E+02 1.1263E+02 5.9650E+01 4.7056E+01 - 1.2589E+00 8.8298E+01 8.3344E+01 4.3703E+01 3.4719E+01 - 1.4125E+00 6.6148E+01 6.1342E+01 3.1827E+01 2.5164E+01 - 1.5849E+00 4.9360E+01 4.5187E+01 2.3215E+01 1.8264E+01 - 1.7783E+00 3.6551E+01 3.3402E+01 1.6721E+01 1.3152E+01 - 1.9953E+00 2.6839E+01 2.4471E+01 1.2122E+01 9.4331E+00 - 2.2387E+00 1.9689E+01 1.7806E+01 8.7899E+00 6.7311E+00 - 2.5119E+00 1.4432E+01 1.2790E+01 6.1458E+00 4.6344E+00 - 2.8184E+00 1.0542E+01 9.1735E+00 4.3017E+00 3.2552E+00 - 3.1623E+00 7.6849E+00 6.6212E+00 3.0324E+00 2.3151E+00 - 3.5481E+00 5.5767E+00 4.7380E+00 2.1206E+00 1.6225E+00 - 3.9811E+00 4.0196E+00 3.4096E+00 1.4718E+00 1.1263E+00 - 4.4668E+00 2.8909E+00 2.4387E+00 1.0120E+00 7.6683E-01 - 5.0119E+00 2.0888E+00 1.7514E+00 6.8596E-01 5.3041E-01 - 5.6234E+00 1.4919E+00 1.2525E+00 4.7798E-01 3.6232E-01 - 6.3096E+00 1.0730E+00 8.8767E-01 3.3410E-01 2.4814E-01 - 7.0795E+00 7.7684E-01 6.2987E-01 2.2281E-01 1.6987E-01 - 7.9433E+00 5.5773E-01 4.4873E-01 1.4884E-01 1.1228E-01 - 8.9125E+00 3.9787E-01 3.1593E-01 1.0065E-01 7.4940E-02 - 1.0000E+01 2.8570E-01 2.2633E-01 6.8669E-02 5.1084E-02 - 1.1220E+01 2.0503E-01 1.5958E-01 4.5808E-02 3.4066E-02 - 1.2589E+01 1.4663E-01 1.1326E-01 3.0848E-02 2.3500E-02 - 1.4125E+01 1.0403E-01 8.0225E-02 2.0843E-02 1.5730E-02 - 1.5849E+01 7.3771E-02 5.6860E-02 1.3548E-02 1.0533E-02 - 1.7783E+01 5.2898E-02 4.0623E-02 8.9684E-03 6.7653E-03 - 1.9953E+01 3.8149E-02 2.8965E-02 6.1012E-03 4.4046E-03 - 2.2387E+01 2.6965E-02 2.0330E-02 4.0131E-03 3.0363E-03 - 2.5119E+01 1.9272E-02 1.4292E-02 2.6514E-03 2.0674E-03 - 2.8184E+01 1.3731E-02 1.0187E-02 1.7376E-03 1.3743E-03 - 3.1623E+01 9.6578E-03 7.1945E-03 1.1815E-03 9.2378E-04 - 3.5481E+01 6.8479E-03 5.0889E-03 7.8725E-04 6.0942E-04 - 3.9811E+01 4.8531E-03 3.5850E-03 5.2278E-04 4.0603E-04 - 4.4668E+01 3.4382E-03 2.5146E-03 3.4727E-04 2.7473E-04 - 5.0119E+01 2.4395E-03 1.7688E-03 2.3277E-04 1.8577E-04 - 5.6234E+01 1.7209E-03 1.2540E-03 1.5452E-04 1.2147E-04 - 6.3096E+01 1.2173E-03 8.8548E-04 1.0349E-04 8.0862E-05 - 7.0795E+01 8.6109E-04 6.2262E-04 6.9638E-05 5.6471E-05 - 7.9433E+01 6.0563E-04 4.3709E-04 4.6615E-05 3.8761E-05 - 8.9125E+01 4.2744E-04 3.0447E-04 3.1325E-05 2.5782E-05 - 1.0000E+02 3.0072E-04 2.1196E-04 2.0702E-05 1.6791E-05 - 1.1220E+02 2.1144E-04 1.4793E-04 1.3976E-05 1.1401E-05 - 1.2589E+02 1.4810E-04 1.0338E-04 9.5304E-06 7.7221E-06 - 1.4125E+02 1.0335E-04 7.1896E-05 6.3309E-06 5.1851E-06 - 1.5849E+02 7.2374E-05 4.9934E-05 4.2733E-06 3.4829E-06 - 1.7783E+02 5.0721E-05 3.4731E-05 2.8925E-06 2.3610E-06 - 1.9953E+02 3.5593E-05 2.4085E-05 1.9097E-06 1.5634E-06 - 2.2387E+02 2.4861E-05 1.6731E-05 1.2972E-06 1.0324E-06 - 2.5119E+02 1.7392E-05 1.1596E-05 8.9007E-07 7.2484E-07 - 2.8184E+02 1.2134E-05 8.0423E-06 6.1800E-07 4.9809E-07 - 3.1623E+02 8.5200E-06 5.6115E-06 4.1093E-07 3.2564E-07 - 3.5481E+02 5.9367E-06 3.8615E-06 2.8109E-07 2.2432E-07 - 3.9811E+02 4.1159E-06 2.6669E-06 1.8455E-07 1.5185E-07 - 4.4668E+02 2.8638E-06 1.8462E-06 1.2432E-07 1.0214E-07 - 5.0119E+02 1.9987E-06 1.2783E-06 8.6825E-08 6.8952E-08 - 5.6234E+02 1.3819E-06 8.8242E-07 5.8746E-08 4.6306E-08 - 6.3096E+02 9.4667E-07 6.0590E-07 4.0008E-08 3.1151E-08 - 7.0795E+02 6.5531E-07 4.1475E-07 2.6991E-08 2.0902E-08 - 7.9433E+02 4.5528E-07 2.8366E-07 1.8119E-08 1.4217E-08 - 8.9125E+02 3.1374E-07 1.9313E-07 1.2260E-08 9.6476E-09 - 1.0000E+03 2.1698E-07 1.3256E-07 8.0967E-09 6.3216E-09 - 1.1220E+03 1.4779E-07 8.9080E-08 5.4972E-09 4.0839E-09 - 1.2589E+03 1.0044E-07 6.0837E-08 3.5996E-09 2.7822E-09 - 1.4125E+03 6.8435E-08 4.1455E-08 2.4513E-09 1.9282E-09 - 1.5849E+03 4.6490E-08 2.8232E-08 1.6734E-09 1.3191E-09 - 1.7783E+03 3.1981E-08 1.8963E-08 1.1135E-09 8.7461E-10 - 1.9953E+03 2.1834E-08 1.2706E-08 7.2523E-10 5.3565E-10 - 2.2387E+03 1.4773E-08 8.6351E-09 4.5071E-10 3.5251E-10 - 2.5119E+03 9.8608E-09 5.7756E-09 2.9711E-10 2.3513E-10 - 2.8184E+03 6.6523E-09 3.8185E-09 2.0523E-10 1.4807E-10 - 3.1623E+03 4.5654E-09 2.6619E-09 1.3917E-10 1.0341E-10 - 3.5481E+03 2.9990E-09 1.7208E-09 9.4058E-11 6.7072E-11 - 3.9811E+03 1.9966E-09 1.1305E-09 6.2341E-11 4.4452E-11 - 4.4668E+03 1.3224E-09 7.4897E-10 4.0496E-11 2.7423E-11 - 5.0119E+03 8.8056E-10 4.9759E-10 2.7862E-11 1.7805E-11 - 5.6234E+03 5.8116E-10 3.3317E-10 1.7507E-11 1.1705E-11 - 6.3096E+03 3.9232E-10 2.1750E-10 1.1125E-11 8.3609E-12 - 7.0795E+03 2.6032E-10 1.4268E-10 7.1717E-12 5.0660E-12 - 7.9433E+03 1.7125E-10 9.3326E-11 4.6537E-12 3.3769E-12 - 8.9125E+03 1.1303E-10 6.2765E-11 3.0437E-12 2.1575E-12 - 1.0000E+04 7.3647E-11 4.1759E-11 2.0299E-12 1.3797E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1881E+04 1.2213E+04 6.0466E+03 5.3964E+03 - 1.1220E-01 1.0457E+04 1.0714E+04 5.3484E+03 4.7465E+03 - 1.2589E-01 9.1106E+03 9.3027E+03 4.6702E+03 4.0958E+03 - 1.4125E-01 7.8934E+03 8.0640E+03 4.0462E+03 3.5048E+03 - 1.5849E-01 6.7872E+03 6.9127E+03 3.4731E+03 2.9773E+03 - 1.7783E-01 5.7491E+03 5.8354E+03 2.9537E+03 2.4957E+03 - 1.9953E-01 4.8051E+03 4.8740E+03 2.4927E+03 2.0888E+03 - 2.2387E-01 3.9707E+03 4.0346E+03 2.0806E+03 1.7291E+03 - 2.5119E-01 3.2451E+03 3.3027E+03 1.7111E+03 1.4134E+03 - 2.8184E-01 2.6202E+03 2.6674E+03 1.3966E+03 1.1500E+03 - 3.1623E-01 2.1010E+03 2.1343E+03 1.1325E+03 9.2233E+02 - 3.5481E-01 1.6729E+03 1.6911E+03 9.0394E+02 7.3330E+02 - 3.9811E-01 1.3166E+03 1.3321E+03 7.1375E+02 5.7373E+02 - 4.4668E-01 1.0286E+03 1.0380E+03 5.5681E+02 4.4701E+02 - 5.0119E-01 8.0124E+02 7.9623E+02 4.3137E+02 3.4844E+02 - 5.6234E-01 6.1756E+02 6.1214E+02 3.3471E+02 2.6775E+02 - 6.3096E-01 4.7138E+02 4.6719E+02 2.5524E+02 2.0475E+02 - 7.0795E-01 3.5951E+02 3.5275E+02 1.9336E+02 1.5330E+02 - 7.9433E-01 2.7356E+02 2.6638E+02 1.4665E+02 1.1429E+02 - 8.9125E-01 2.0706E+02 2.0018E+02 1.0946E+02 8.5085E+01 - 1.0000E+00 1.5641E+02 1.5000E+02 8.1135E+01 6.3230E+01 - 1.1220E+00 1.1730E+02 1.1214E+02 5.9646E+01 4.6646E+01 - 1.2589E+00 8.8195E+01 8.3337E+01 4.3806E+01 3.4244E+01 - 1.4125E+00 6.5969E+01 6.1595E+01 3.1843E+01 2.4847E+01 - 1.5849E+00 4.9112E+01 4.5353E+01 2.3277E+01 1.8026E+01 - 1.7783E+00 3.6499E+01 3.3435E+01 1.6987E+01 1.3105E+01 - 1.9953E+00 2.6836E+01 2.4243E+01 1.2165E+01 9.3740E+00 - 2.2387E+00 1.9654E+01 1.7518E+01 8.7519E+00 6.5890E+00 - 2.5119E+00 1.4423E+01 1.2707E+01 6.2105E+00 4.6923E+00 - 2.8184E+00 1.0583E+01 9.2012E+00 4.3872E+00 3.3529E+00 - 3.1623E+00 7.7352E+00 6.7304E+00 3.0485E+00 2.3233E+00 - 3.5481E+00 5.6060E+00 4.8307E+00 2.1191E+00 1.6200E+00 - 3.9811E+00 4.0621E+00 3.4643E+00 1.4713E+00 1.1394E+00 - 4.4668E+00 2.9434E+00 2.4869E+00 1.0233E+00 7.7640E-01 - 5.0119E+00 2.1233E+00 1.7648E+00 7.0692E-01 5.2811E-01 - 5.6234E+00 1.5232E+00 1.2522E+00 4.8012E-01 3.7004E-01 - 6.3096E+00 1.0987E+00 8.9788E-01 3.2899E-01 2.5158E-01 - 7.0795E+00 7.9024E-01 6.4561E-01 2.2621E-01 1.6863E-01 - 7.9433E+00 5.6454E-01 4.5679E-01 1.5165E-01 1.1454E-01 - 8.9125E+00 3.9901E-01 3.2602E-01 1.0260E-01 7.5413E-02 - 1.0000E+01 2.8610E-01 2.2612E-01 6.7970E-02 5.1265E-02 - 1.1220E+01 2.0544E-01 1.6114E-01 4.5779E-02 3.4876E-02 - 1.2589E+01 1.4686E-01 1.1446E-01 3.0466E-02 2.3533E-02 - 1.4125E+01 1.0483E-01 8.1135E-02 2.0169E-02 1.5680E-02 - 1.5849E+01 7.4540E-02 5.7455E-02 1.3824E-02 1.0428E-02 - 1.7783E+01 5.2891E-02 4.1295E-02 9.4018E-03 7.0047E-03 - 1.9953E+01 3.8073E-02 2.9080E-02 6.2271E-03 4.5597E-03 - 2.2387E+01 2.7310E-02 2.0261E-02 4.0693E-03 2.9784E-03 - 2.5119E+01 1.9265E-02 1.4545E-02 2.6902E-03 1.9817E-03 - 2.8184E+01 1.3486E-02 1.0214E-02 1.7779E-03 1.3088E-03 - 3.1623E+01 9.6696E-03 7.1963E-03 1.1721E-03 9.2180E-04 - 3.5481E+01 6.8690E-03 5.0822E-03 7.8108E-04 6.1820E-04 - 3.9811E+01 4.8625E-03 3.5942E-03 5.2067E-04 4.0957E-04 - 4.4668E+01 3.4521E-03 2.5252E-03 3.4511E-04 2.7276E-04 - 5.0119E+01 2.4507E-03 1.7777E-03 2.3122E-04 1.8637E-04 - 5.6234E+01 1.7337E-03 1.2576E-03 1.5502E-04 1.2374E-04 - 6.3096E+01 1.2211E-03 8.8586E-04 1.0242E-04 8.2798E-05 - 7.0795E+01 8.5472E-04 6.2180E-04 6.8292E-05 5.5077E-05 - 7.9433E+01 6.0697E-04 4.3364E-04 4.6326E-05 3.6907E-05 - 8.9125E+01 4.3086E-04 3.0264E-04 3.0549E-05 2.5347E-05 - 1.0000E+02 3.0231E-04 2.1152E-04 2.0808E-05 1.6948E-05 - 1.1220E+02 2.1163E-04 1.4722E-04 1.3816E-05 1.1477E-05 - 1.2589E+02 1.4840E-04 1.0291E-04 9.4331E-06 7.6997E-06 - 1.4125E+02 1.0432E-04 7.1989E-05 6.3772E-06 5.2210E-06 - 1.5849E+02 7.3025E-05 4.9999E-05 4.2271E-06 3.5375E-06 - 1.7783E+02 5.1068E-05 3.4546E-05 2.8869E-06 2.3320E-06 - 1.9953E+02 3.5603E-05 2.4036E-05 1.9556E-06 1.5809E-06 - 2.2387E+02 2.4756E-05 1.6872E-05 1.3002E-06 1.0717E-06 - 2.5119E+02 1.7304E-05 1.1735E-05 8.8556E-07 7.2703E-07 - 2.8184E+02 1.2045E-05 8.0772E-06 6.1490E-07 4.9513E-07 - 3.1623E+02 8.5107E-06 5.5900E-06 4.1359E-07 3.3006E-07 - 3.5481E+02 5.9173E-06 3.8543E-06 2.8018E-07 2.2749E-07 - 3.9811E+02 4.0974E-06 2.6664E-06 1.8814E-07 1.5354E-07 - 4.4668E+02 2.8457E-06 1.8471E-06 1.2656E-07 1.0468E-07 - 5.0119E+02 1.9851E-06 1.2747E-06 8.6009E-08 7.0581E-08 - 5.6234E+02 1.3847E-06 8.7830E-07 5.8869E-08 4.5202E-08 - 6.3096E+02 9.5050E-07 6.0226E-07 3.9798E-08 3.0530E-08 - 7.0795E+02 6.5768E-07 4.1660E-07 2.6884E-08 2.0827E-08 - 7.9433E+02 4.5367E-07 2.8606E-07 1.8146E-08 1.3967E-08 - 8.9125E+02 3.1091E-07 1.9406E-07 1.2486E-08 9.3104E-09 - 1.0000E+03 2.1648E-07 1.3344E-07 8.1822E-09 6.3338E-09 - 1.1220E+03 1.4786E-07 9.0178E-08 5.4952E-09 4.1208E-09 - 1.2589E+03 1.0094E-07 6.1189E-08 3.6647E-09 2.8671E-09 - 1.4125E+03 6.8680E-08 4.1310E-08 2.4585E-09 1.9541E-09 - 1.5849E+03 4.6635E-08 2.7760E-08 1.6410E-09 1.1680E-09 - 1.7783E+03 3.1640E-08 1.9026E-08 1.0621E-09 7.5149E-10 - 1.9953E+03 2.1573E-08 1.2977E-08 7.2402E-10 5.5020E-10 - 2.2387E+03 1.4623E-08 8.7287E-09 4.7585E-10 3.7299E-10 - 2.5119E+03 9.8697E-09 5.8305E-09 3.2822E-10 2.4266E-10 - 2.8184E+03 6.6566E-09 3.8183E-09 2.2193E-10 1.5891E-10 - 3.1623E+03 4.5212E-09 2.6368E-09 1.4111E-10 1.0420E-10 - 3.5481E+03 2.9755E-09 1.7314E-09 9.1744E-11 6.5592E-11 - 3.9811E+03 1.9830E-09 1.1415E-09 5.9620E-11 4.5200E-11 - 4.4668E+03 1.3113E-09 7.5976E-10 4.0165E-11 3.0028E-11 - 5.0119E+03 8.7960E-10 5.0339E-10 2.7326E-11 1.9218E-11 - 5.6234E+03 5.8664E-10 3.2485E-10 1.8460E-11 1.3681E-11 - 6.3096E+03 3.8850E-10 2.1787E-10 1.1224E-11 8.3599E-12 - 7.0795E+03 2.6108E-10 1.4319E-10 7.2896E-12 5.2971E-12 - 7.9433E+03 1.7120E-10 9.4548E-11 5.0337E-12 3.7403E-12 - 8.9125E+03 1.1143E-10 6.1724E-11 3.5112E-12 2.7513E-12 - 1.0000E+04 7.3316E-11 3.9734E-11 2.3095E-12 1.6843E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1881E+04 1.2242E+04 6.0542E+03 5.3707E+03 - 1.1220E-01 1.0427E+04 1.0753E+04 5.3661E+03 4.6928E+03 - 1.2589E-01 9.1053E+03 9.4007E+03 4.7049E+03 4.0525E+03 - 1.4125E-01 7.8855E+03 8.1356E+03 4.0652E+03 3.4919E+03 - 1.5849E-01 6.7660E+03 6.9214E+03 3.4935E+03 2.9739E+03 - 1.7783E-01 5.7435E+03 5.8290E+03 2.9779E+03 2.4982E+03 - 1.9953E-01 4.8038E+03 4.8973E+03 2.5060E+03 2.0801E+03 - 2.2387E-01 3.9641E+03 4.0572E+03 2.0993E+03 1.7200E+03 - 2.5119E-01 3.2477E+03 3.3057E+03 1.7481E+03 1.4127E+03 - 2.8184E-01 2.6352E+03 2.6810E+03 1.4219E+03 1.1430E+03 - 3.1623E-01 2.1175E+03 2.1473E+03 1.1405E+03 9.1855E+02 - 3.5481E-01 1.6846E+03 1.6998E+03 9.1624E+02 7.3129E+02 - 3.9811E-01 1.3236E+03 1.3430E+03 7.2466E+02 5.7570E+02 - 4.4668E-01 1.0299E+03 1.0448E+03 5.6351E+02 4.4807E+02 - 5.0119E-01 8.0114E+02 8.0567E+02 4.3764E+02 3.4593E+02 - 5.6234E-01 6.1744E+02 6.1927E+02 3.3827E+02 2.6477E+02 - 6.3096E-01 4.7054E+02 4.6919E+02 2.5851E+02 2.0250E+02 - 7.0795E-01 3.5989E+02 3.5078E+02 1.9631E+02 1.5371E+02 - 7.9433E-01 2.7226E+02 2.6435E+02 1.4695E+02 1.1492E+02 - 8.9125E-01 2.0531E+02 2.0033E+02 1.0834E+02 8.5219E+01 - 1.0000E+00 1.5630E+02 1.5123E+02 8.1290E+01 6.3015E+01 - 1.1220E+00 1.1751E+02 1.1249E+02 5.9820E+01 4.6397E+01 - 1.2589E+00 8.8576E+01 8.3438E+01 4.4292E+01 3.3986E+01 - 1.4125E+00 6.6072E+01 6.1791E+01 3.2476E+01 2.4836E+01 - 1.5849E+00 4.9063E+01 4.5523E+01 2.3495E+01 1.7933E+01 - 1.7783E+00 3.6482E+01 3.3508E+01 1.6827E+01 1.2907E+01 - 1.9953E+00 2.7088E+01 2.4322E+01 1.2014E+01 9.3140E+00 - 2.2387E+00 2.0030E+01 1.7591E+01 8.6040E+00 6.5377E+00 - 2.5119E+00 1.4435E+01 1.2827E+01 6.1062E+00 4.6256E+00 - 2.8184E+00 1.0454E+01 9.2753E+00 4.3375E+00 3.2775E+00 - 3.1623E+00 7.6782E+00 6.6473E+00 3.0450E+00 2.3218E+00 - 3.5481E+00 5.5604E+00 4.7694E+00 2.1225E+00 1.6377E+00 - 3.9811E+00 4.0134E+00 3.4276E+00 1.4727E+00 1.1323E+00 - 4.4668E+00 2.8872E+00 2.4624E+00 1.0179E+00 7.7995E-01 - 5.0119E+00 2.0828E+00 1.7493E+00 7.0023E-01 5.3416E-01 - 5.6234E+00 1.5051E+00 1.2523E+00 4.7839E-01 3.6408E-01 - 6.3096E+00 1.0772E+00 8.9690E-01 3.2773E-01 2.5417E-01 - 7.0795E+00 7.6719E-01 6.3695E-01 2.2074E-01 1.7127E-01 - 7.9433E+00 5.4921E-01 4.5150E-01 1.4457E-01 1.1458E-01 - 8.9125E+00 3.9665E-01 3.1542E-01 9.5717E-02 7.7058E-02 - 1.0000E+01 2.8453E-01 2.2450E-01 6.7440E-02 5.1268E-02 - 1.1220E+01 2.0316E-01 1.5916E-01 4.5201E-02 3.4871E-02 - 1.2589E+01 1.4566E-01 1.1306E-01 3.0330E-02 2.3146E-02 - 1.4125E+01 1.0405E-01 8.0293E-02 2.0058E-02 1.5428E-02 - 1.5849E+01 7.4352E-02 5.7042E-02 1.3434E-02 1.0516E-02 - 1.7783E+01 5.2750E-02 4.0539E-02 8.9487E-03 7.1833E-03 - 1.9953E+01 3.7490E-02 2.8904E-02 5.9136E-03 4.7049E-03 - 2.2387E+01 2.6650E-02 2.0447E-02 3.9960E-03 3.0616E-03 - 2.5119E+01 1.9141E-02 1.4488E-02 2.6318E-03 2.0230E-03 - 2.8184E+01 1.3640E-02 1.0277E-02 1.7088E-03 1.3691E-03 - 3.1623E+01 9.6428E-03 7.2030E-03 1.1803E-03 9.2124E-04 - 3.5481E+01 6.8549E-03 5.1061E-03 7.8188E-04 6.1879E-04 - 3.9811E+01 4.8723E-03 3.6073E-03 5.1804E-04 4.1567E-04 - 4.4668E+01 3.4416E-03 2.5444E-03 3.4230E-04 2.8076E-04 - 5.0119E+01 2.4375E-03 1.7802E-03 2.3119E-04 1.8735E-04 - 5.6234E+01 1.7344E-03 1.2452E-03 1.5519E-04 1.2279E-04 - 6.3096E+01 1.2295E-03 8.7984E-04 1.0245E-04 8.2002E-05 - 7.0795E+01 8.6301E-04 6.2151E-04 6.9229E-05 5.5081E-05 - 7.9433E+01 6.0718E-04 4.3340E-04 4.6539E-05 3.7287E-05 - 8.9125E+01 4.2660E-04 3.0094E-04 3.0571E-05 2.4568E-05 - 1.0000E+02 3.0097E-04 2.1318E-04 2.0701E-05 1.7000E-05 - 1.1220E+02 2.1152E-04 1.4882E-04 1.4025E-05 1.1494E-05 - 1.2589E+02 1.4875E-04 1.0393E-04 9.3952E-06 7.7983E-06 - 1.4125E+02 1.0403E-04 7.2359E-05 6.2940E-06 5.2350E-06 - 1.5849E+02 7.2879E-05 5.0247E-05 4.2727E-06 3.5345E-06 - 1.7783E+02 5.1123E-05 3.5186E-05 2.9120E-06 2.3806E-06 - 1.9953E+02 3.5659E-05 2.4348E-05 1.9710E-06 1.6014E-06 - 2.2387E+02 2.5025E-05 1.6760E-05 1.3593E-06 1.0859E-06 - 2.5119E+02 1.7548E-05 1.1682E-05 9.0813E-07 7.4422E-07 - 2.8184E+02 1.2213E-05 8.0898E-06 5.9176E-07 4.8823E-07 - 3.1623E+02 8.5020E-06 5.6053E-06 4.0214E-07 3.2765E-07 - 3.5481E+02 5.9060E-06 3.8751E-06 2.7752E-07 2.2323E-07 - 3.9811E+02 4.1131E-06 2.6857E-06 1.9180E-07 1.5300E-07 - 4.4668E+02 2.8737E-06 1.8451E-06 1.2758E-07 1.0261E-07 - 5.0119E+02 1.9939E-06 1.2706E-06 8.4738E-08 6.8708E-08 - 5.6234E+02 1.3860E-06 8.7888E-07 5.8818E-08 4.7169E-08 - 6.3096E+02 9.6017E-07 6.0198E-07 3.9610E-08 3.1427E-08 - 7.0795E+02 6.6402E-07 4.1442E-07 2.6717E-08 2.1149E-08 - 7.9433E+02 4.5637E-07 2.8478E-07 1.8603E-08 1.4431E-08 - 8.9125E+02 3.1550E-07 1.9437E-07 1.2138E-08 9.5528E-09 - 1.0000E+03 2.1698E-07 1.3413E-07 7.9778E-09 6.2019E-09 - 1.1220E+03 1.4718E-07 9.0441E-08 5.4419E-09 4.1984E-09 - 1.2589E+03 1.0121E-07 6.1099E-08 3.6402E-09 2.6897E-09 - 1.4125E+03 6.9290E-08 4.1339E-08 2.4040E-09 1.7300E-09 - 1.5849E+03 4.7487E-08 2.7925E-08 1.6427E-09 1.2173E-09 - 1.7783E+03 3.2255E-08 1.8986E-08 1.0956E-09 8.7697E-10 - 1.9953E+03 2.1584E-08 1.2818E-08 7.0950E-10 5.6071E-10 - 2.2387E+03 1.4561E-08 8.5395E-09 4.4716E-10 3.6439E-10 - 2.5119E+03 9.7696E-09 5.7378E-09 3.0751E-10 2.5137E-10 - 2.8184E+03 6.5965E-09 3.8664E-09 2.0479E-10 1.6103E-10 - 3.1623E+03 4.5412E-09 2.6457E-09 1.3845E-10 1.0448E-10 - 3.5481E+03 2.9745E-09 1.7272E-09 9.0972E-11 6.5904E-11 - 3.9811E+03 1.9779E-09 1.1524E-09 5.9585E-11 4.4184E-11 - 4.4668E+03 1.3126E-09 7.6036E-10 3.8796E-11 3.0506E-11 - 5.0119E+03 8.8618E-10 4.9971E-10 2.5228E-11 1.8441E-11 - 5.6234E+03 5.8701E-10 3.3281E-10 1.6459E-11 1.2401E-11 - 6.3096E+03 3.8984E-10 2.1856E-10 1.1395E-11 7.9781E-12 - 7.0795E+03 2.5743E-10 1.4497E-10 7.6775E-12 5.0993E-12 - 7.9433E+03 1.6854E-10 9.4027E-11 4.9050E-12 3.8830E-12 - 8.9125E+03 1.1206E-10 6.1857E-11 3.3522E-12 2.6771E-12 - 1.0000E+04 7.4444E-11 4.1162E-11 2.2212E-12 1.5602E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1835E+04 1.2203E+04 6.0171E+03 5.3472E+03 - 1.1220E-01 1.0385E+04 1.0695E+04 5.3367E+03 4.6766E+03 - 1.2589E-01 9.0571E+03 9.3664E+03 4.6683E+03 4.0534E+03 - 1.4125E-01 7.8742E+03 8.0957E+03 4.0451E+03 3.4792E+03 - 1.5849E-01 6.7550E+03 6.9038E+03 3.4772E+03 2.9587E+03 - 1.7783E-01 5.7285E+03 5.8458E+03 2.9611E+03 2.4946E+03 - 1.9953E-01 4.8011E+03 4.8925E+03 2.4990E+03 2.0783E+03 - 2.2387E-01 3.9713E+03 4.0422E+03 2.0793E+03 1.7164E+03 - 2.5119E-01 3.2446E+03 3.3063E+03 1.7194E+03 1.4036E+03 - 2.8184E-01 2.6253E+03 2.6681E+03 1.4148E+03 1.1351E+03 - 3.1623E-01 2.1090E+03 2.1357E+03 1.1400E+03 9.1926E+02 - 3.5481E-01 1.6725E+03 1.7040E+03 9.0667E+02 7.3365E+02 - 3.9811E-01 1.3173E+03 1.3457E+03 7.1560E+02 5.7814E+02 - 4.4668E-01 1.0356E+03 1.0476E+03 5.6500E+02 4.4995E+02 - 5.0119E-01 8.0605E+02 8.0759E+02 4.3766E+02 3.4474E+02 - 5.6234E-01 6.1951E+02 6.2134E+02 3.3487E+02 2.6280E+02 - 6.3096E-01 4.7423E+02 4.7466E+02 2.5879E+02 2.0009E+02 - 7.0795E-01 3.6136E+02 3.5702E+02 1.9584E+02 1.5252E+02 - 7.9433E-01 2.7432E+02 2.6703E+02 1.4672E+02 1.1600E+02 - 8.9125E-01 2.0871E+02 2.0144E+02 1.1055E+02 8.6813E+01 - 1.0000E+00 1.5691E+02 1.5150E+02 8.2235E+01 6.3987E+01 - 1.1220E+00 1.1718E+02 1.1251E+02 6.0098E+01 4.7080E+01 - 1.2589E+00 8.7949E+01 8.3750E+01 4.4186E+01 3.4445E+01 - 1.4125E+00 6.6397E+01 6.2501E+01 3.2522E+01 2.5102E+01 - 1.5849E+00 4.9340E+01 4.5919E+01 2.3470E+01 1.8233E+01 - 1.7783E+00 3.6218E+01 3.3713E+01 1.6890E+01 1.3177E+01 - 1.9953E+00 2.6814E+01 2.4524E+01 1.2188E+01 9.3233E+00 - 2.2387E+00 1.9876E+01 1.7761E+01 8.7721E+00 6.6154E+00 - 2.5119E+00 1.4548E+01 1.2861E+01 6.3078E+00 4.7397E+00 - 2.8184E+00 1.0705E+01 9.2379E+00 4.4260E+00 3.3520E+00 - 3.1623E+00 7.7224E+00 6.7114E+00 3.0634E+00 2.3406E+00 - 3.5481E+00 5.5896E+00 4.8327E+00 2.1184E+00 1.6249E+00 - 3.9811E+00 4.0670E+00 3.4616E+00 1.4675E+00 1.1318E+00 - 4.4668E+00 2.9377E+00 2.4743E+00 1.0315E+00 7.8368E-01 - 5.0119E+00 2.1108E+00 1.7793E+00 6.9744E-01 5.3139E-01 - 5.6234E+00 1.5175E+00 1.2672E+00 4.7106E-01 3.6574E-01 - 6.3096E+00 1.0848E+00 9.0024E-01 3.2898E-01 2.5043E-01 - 7.0795E+00 7.7356E-01 6.4708E-01 2.1977E-01 1.6702E-01 - 7.9433E+00 5.5788E-01 4.5312E-01 1.5164E-01 1.1335E-01 - 8.9125E+00 4.0277E-01 3.2222E-01 1.0597E-01 7.7293E-02 - 1.0000E+01 2.8505E-01 2.2590E-01 6.7285E-02 5.1235E-02 - 1.1220E+01 2.0170E-01 1.5909E-01 4.5178E-02 3.4222E-02 - 1.2589E+01 1.4398E-01 1.1308E-01 3.0186E-02 2.3149E-02 - 1.4125E+01 1.0365E-01 7.9597E-02 1.9934E-02 1.5745E-02 - 1.5849E+01 7.3983E-02 5.6528E-02 1.3283E-02 1.0608E-02 - 1.7783E+01 5.2551E-02 4.0381E-02 9.1171E-03 6.9811E-03 - 1.9953E+01 3.7819E-02 2.8321E-02 6.1303E-03 4.5367E-03 - 2.2387E+01 2.7042E-02 1.9985E-02 4.0743E-03 3.0346E-03 - 2.5119E+01 1.8818E-02 1.4089E-02 2.7131E-03 1.9717E-03 - 2.8184E+01 1.3413E-02 1.0126E-02 1.7481E-03 1.3412E-03 - 3.1623E+01 9.6746E-03 7.2239E-03 1.1753E-03 9.1963E-04 - 3.5481E+01 6.8559E-03 5.0897E-03 7.7780E-04 6.1453E-04 - 3.9811E+01 4.8781E-03 3.5823E-03 5.1967E-04 4.1289E-04 - 4.4668E+01 3.4528E-03 2.5346E-03 3.4787E-04 2.7765E-04 - 5.0119E+01 2.4412E-03 1.7882E-03 2.3087E-04 1.8731E-04 - 5.6234E+01 1.7380E-03 1.2593E-03 1.5321E-04 1.2468E-04 - 6.3096E+01 1.2279E-03 8.8864E-04 1.0315E-04 8.3142E-05 - 7.0795E+01 8.6853E-04 6.2476E-04 6.9412E-05 5.5046E-05 - 7.9433E+01 6.1284E-04 4.3575E-04 4.6931E-05 3.6759E-05 - 8.9125E+01 4.3036E-04 3.0320E-04 3.2056E-05 2.4928E-05 - 1.0000E+02 3.0171E-04 2.1251E-04 2.1055E-05 1.6960E-05 - 1.1220E+02 2.1254E-04 1.4837E-04 1.3941E-05 1.1462E-05 - 1.2589E+02 1.4962E-04 1.0336E-04 9.3010E-06 7.7284E-06 - 1.4125E+02 1.0433E-04 7.2095E-05 6.4391E-06 5.1807E-06 - 1.5849E+02 7.2969E-05 5.0280E-05 4.4501E-06 3.5040E-06 - 1.7783E+02 5.1158E-05 3.4937E-05 3.0136E-06 2.3678E-06 - 1.9953E+02 3.5766E-05 2.4218E-05 1.9813E-06 1.5899E-06 - 2.2387E+02 2.5044E-05 1.6752E-05 1.3201E-06 1.0556E-06 - 2.5119E+02 1.7398E-05 1.1576E-05 9.1123E-07 7.4179E-07 - 2.8184E+02 1.2226E-05 8.0598E-06 5.8967E-07 5.0402E-07 - 3.1623E+02 8.5298E-06 5.6312E-06 4.0811E-07 3.3037E-07 - 3.5481E+02 5.9220E-06 3.8819E-06 2.7706E-07 2.2623E-07 - 3.9811E+02 4.1350E-06 2.6676E-06 1.8751E-07 1.5019E-07 - 4.4668E+02 2.8647E-06 1.8425E-06 1.2818E-07 1.0069E-07 - 5.0119E+02 1.9860E-06 1.2774E-06 8.7390E-08 6.7453E-08 - 5.6234E+02 1.3790E-06 8.8297E-07 5.9314E-08 4.4982E-08 - 6.3096E+02 9.4791E-07 6.0300E-07 3.9487E-08 2.9807E-08 - 7.0795E+02 6.5972E-07 4.1227E-07 2.6989E-08 2.0577E-08 - 7.9433E+02 4.5526E-07 2.8334E-07 1.8011E-08 1.4305E-08 - 8.9125E+02 3.1181E-07 1.9387E-07 1.2075E-08 9.5822E-09 - 1.0000E+03 2.1545E-07 1.3356E-07 8.1744E-09 6.1540E-09 - 1.1220E+03 1.4724E-07 9.0190E-08 5.4448E-09 4.1830E-09 - 1.2589E+03 1.0090E-07 6.1342E-08 3.5429E-09 2.7409E-09 - 1.4125E+03 6.8479E-08 4.1621E-08 2.3675E-09 1.8609E-09 - 1.5849E+03 4.6952E-08 2.8045E-08 1.6747E-09 1.2272E-09 - 1.7783E+03 3.1800E-08 1.8938E-08 1.1392E-09 7.8825E-10 - 1.9953E+03 2.1664E-08 1.2699E-08 7.2638E-10 5.6221E-10 - 2.2387E+03 1.4675E-08 8.6078E-09 4.7901E-10 3.8062E-10 - 2.5119E+03 9.8725E-09 5.8356E-09 3.1736E-10 2.3443E-10 - 2.8184E+03 6.6658E-09 3.8671E-09 2.1072E-10 1.5424E-10 - 3.1623E+03 4.5890E-09 2.6161E-09 1.3967E-10 1.0386E-10 - 3.5481E+03 2.9736E-09 1.7151E-09 9.3342E-11 6.6663E-11 - 3.9811E+03 1.9682E-09 1.1481E-09 6.0373E-11 4.3483E-11 - 4.4668E+03 1.3129E-09 7.5710E-10 3.6723E-11 2.8905E-11 - 5.0119E+03 8.7990E-10 4.9785E-10 2.5920E-11 1.9991E-11 - 5.6234E+03 5.8965E-10 3.2721E-10 1.8108E-11 1.3115E-11 - 6.3096E+03 3.8752E-10 2.2050E-10 1.1286E-11 8.7462E-12 - 7.0795E+03 2.5696E-10 1.4570E-10 7.2962E-12 5.9819E-12 - 7.9433E+03 1.6918E-10 9.5836E-11 4.7474E-12 3.8804E-12 - 8.9125E+03 1.1250E-10 6.3632E-11 3.1347E-12 2.2170E-12 - 1.0000E+04 7.5339E-11 4.2443E-11 2.0559E-12 1.3551E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1764E+04 1.2060E+04 5.9189E+03 5.3407E+03 - 1.1220E-01 1.0356E+04 1.0638E+04 5.2609E+03 4.6688E+03 - 1.2589E-01 9.0558E+03 9.2379E+03 4.6164E+03 4.0597E+03 - 1.4125E-01 7.8419E+03 7.9599E+03 3.9742E+03 3.4965E+03 - 1.5849E-01 6.7459E+03 6.8367E+03 3.4201E+03 2.9656E+03 - 1.7783E-01 5.7350E+03 5.7990E+03 2.9160E+03 2.4870E+03 - 1.9953E-01 4.7817E+03 4.8566E+03 2.4569E+03 2.0754E+03 - 2.2387E-01 3.9521E+03 4.0158E+03 2.0555E+03 1.7116E+03 - 2.5119E-01 3.2343E+03 3.2759E+03 1.7014E+03 1.4010E+03 - 2.8184E-01 2.6231E+03 2.6585E+03 1.3909E+03 1.1400E+03 - 3.1623E-01 2.1107E+03 2.1237E+03 1.1317E+03 9.1369E+02 - 3.5481E-01 1.6690E+03 1.6801E+03 9.1181E+02 7.2833E+02 - 3.9811E-01 1.3156E+03 1.3260E+03 7.1585E+02 5.7744E+02 - 4.4668E-01 1.0345E+03 1.0309E+03 5.5556E+02 4.4920E+02 - 5.0119E-01 8.0369E+02 7.9376E+02 4.3378E+02 3.4670E+02 - 5.6234E-01 6.1996E+02 6.1284E+02 3.3476E+02 2.6684E+02 - 6.3096E-01 4.7456E+02 4.6890E+02 2.5526E+02 2.0496E+02 - 7.0795E-01 3.6309E+02 3.5389E+02 1.9391E+02 1.5376E+02 - 7.9433E-01 2.7398E+02 2.6697E+02 1.4607E+02 1.1389E+02 - 8.9125E-01 2.0564E+02 2.0159E+02 1.0920E+02 8.5853E+01 - 1.0000E+00 1.5632E+02 1.5050E+02 8.1715E+01 6.3391E+01 - 1.1220E+00 1.1725E+02 1.1227E+02 5.9738E+01 4.6813E+01 - 1.2589E+00 8.8680E+01 8.3586E+01 4.3820E+01 3.4467E+01 - 1.4125E+00 6.6453E+01 6.2001E+01 3.2300E+01 2.4942E+01 - 1.5849E+00 4.8993E+01 4.5569E+01 2.3188E+01 1.8041E+01 - 1.7783E+00 3.6195E+01 3.3542E+01 1.6710E+01 1.2956E+01 - 1.9953E+00 2.6858E+01 2.4680E+01 1.2101E+01 9.3609E+00 - 2.2387E+00 1.9735E+01 1.7810E+01 8.6684E+00 6.6727E+00 - 2.5119E+00 1.4446E+01 1.2806E+01 6.2149E+00 4.6471E+00 - 2.8184E+00 1.0587E+01 9.2601E+00 4.3810E+00 3.3070E+00 - 3.1623E+00 7.6691E+00 6.6849E+00 3.0565E+00 2.3108E+00 - 3.5481E+00 5.5827E+00 4.8228E+00 2.1399E+00 1.6116E+00 - 3.9811E+00 4.0579E+00 3.4592E+00 1.4923E+00 1.1255E+00 - 4.4668E+00 2.9191E+00 2.4667E+00 1.0159E+00 7.7206E-01 - 5.0119E+00 2.1132E+00 1.7577E+00 6.9800E-01 5.2266E-01 - 5.6234E+00 1.5122E+00 1.2457E+00 4.8142E-01 3.5953E-01 - 6.3096E+00 1.0732E+00 8.8434E-01 3.2760E-01 2.4584E-01 - 7.0795E+00 7.8262E-01 6.3016E-01 2.2053E-01 1.7017E-01 - 7.9433E+00 5.5865E-01 4.5129E-01 1.4981E-01 1.1637E-01 - 8.9125E+00 3.9788E-01 3.2098E-01 1.0082E-01 7.7329E-02 - 1.0000E+01 2.8490E-01 2.2644E-01 6.7930E-02 5.1458E-02 - 1.1220E+01 2.0450E-01 1.6054E-01 4.4960E-02 3.4125E-02 - 1.2589E+01 1.4572E-01 1.1361E-01 2.9631E-02 2.2845E-02 - 1.4125E+01 1.0264E-01 8.0510E-02 2.0345E-02 1.5266E-02 - 1.5849E+01 7.3129E-02 5.7074E-02 1.3371E-02 1.0129E-02 - 1.7783E+01 5.2998E-02 4.0292E-02 9.0667E-03 6.8337E-03 - 1.9953E+01 3.7723E-02 2.8585E-02 6.1035E-03 4.3846E-03 - 2.2387E+01 2.6690E-02 2.0342E-02 3.8700E-03 2.8306E-03 - 2.5119E+01 1.8947E-02 1.4402E-02 2.6114E-03 2.0703E-03 - 2.8184E+01 1.3616E-02 1.0229E-02 1.7427E-03 1.4019E-03 - 3.1623E+01 9.6787E-03 7.2150E-03 1.1814E-03 9.2516E-04 - 3.5481E+01 6.8809E-03 5.1047E-03 7.8362E-04 6.1512E-04 - 3.9811E+01 4.8939E-03 3.5906E-03 5.1656E-04 4.0831E-04 - 4.4668E+01 3.4616E-03 2.5261E-03 3.4553E-04 2.7424E-04 - 5.0119E+01 2.4404E-03 1.7894E-03 2.3316E-04 1.8635E-04 - 5.6234E+01 1.7219E-03 1.2598E-03 1.5620E-04 1.2365E-04 - 6.3096E+01 1.2200E-03 8.7979E-04 1.0207E-04 8.1227E-05 - 7.0795E+01 8.6602E-04 6.1629E-04 6.9297E-05 5.4041E-05 - 7.9433E+01 6.1177E-04 4.3631E-04 4.6886E-05 3.6787E-05 - 8.9125E+01 4.3064E-04 3.0734E-04 3.0222E-05 2.4905E-05 - 1.0000E+02 3.0222E-04 2.1305E-04 2.0832E-05 1.6818E-05 - 1.1220E+02 2.1147E-04 1.4827E-04 1.4014E-05 1.1358E-05 - 1.2589E+02 1.4872E-04 1.0350E-04 9.3932E-06 7.6473E-06 - 1.4125E+02 1.0450E-04 7.1896E-05 6.3829E-06 5.1214E-06 - 1.5849E+02 7.3084E-05 5.0106E-05 4.3100E-06 3.4443E-06 - 1.7783E+02 5.1285E-05 3.5069E-05 2.9003E-06 2.3219E-06 - 1.9953E+02 3.5815E-05 2.4294E-05 1.9789E-06 1.5889E-06 - 2.2387E+02 2.5143E-05 1.6766E-05 1.3357E-06 1.0882E-06 - 2.5119E+02 1.7497E-05 1.1645E-05 9.0966E-07 7.3399E-07 - 2.8184E+02 1.2162E-05 8.0993E-06 6.0934E-07 4.8510E-07 - 3.1623E+02 8.5048E-06 5.6214E-06 4.1575E-07 3.2777E-07 - 3.5481E+02 5.9149E-06 3.8952E-06 2.7947E-07 2.2403E-07 - 3.9811E+02 4.1289E-06 2.6917E-06 1.9035E-07 1.5295E-07 - 4.4668E+02 2.8688E-06 1.8506E-06 1.2862E-07 1.0295E-07 - 5.0119E+02 2.0007E-06 1.2808E-06 8.4709E-08 7.0387E-08 - 5.6234E+02 1.3907E-06 8.8450E-07 5.7828E-08 4.6751E-08 - 6.3096E+02 9.5761E-07 6.0321E-07 3.9011E-08 3.1379E-08 - 7.0795E+02 6.6323E-07 4.1448E-07 2.6046E-08 2.0764E-08 - 7.9433E+02 4.5782E-07 2.8382E-07 1.7518E-08 1.3298E-08 - 8.9125E+02 3.1170E-07 1.9307E-07 1.1997E-08 8.6979E-09 - 1.0000E+03 2.1533E-07 1.3288E-07 8.1757E-09 5.9636E-09 - 1.1220E+03 1.4844E-07 8.9613E-08 5.7409E-09 4.0980E-09 - 1.2589E+03 1.0157E-07 6.0957E-08 3.7714E-09 2.8977E-09 - 1.4125E+03 6.8763E-08 4.1921E-08 2.4389E-09 1.9760E-09 - 1.5849E+03 4.6772E-08 2.8497E-08 1.6279E-09 1.2635E-09 - 1.7783E+03 3.1970E-08 1.9304E-08 1.0459E-09 8.2169E-10 - 1.9953E+03 2.1448E-08 1.2865E-08 7.2301E-10 5.7442E-10 - 2.2387E+03 1.4526E-08 8.6198E-09 4.9040E-10 3.8672E-10 - 2.5119E+03 9.9084E-09 5.7977E-09 3.0344E-10 2.4903E-10 - 2.8184E+03 6.5872E-09 3.9218E-09 2.1073E-10 1.5949E-10 - 3.1623E+03 4.5557E-09 2.6700E-09 1.3894E-10 1.0161E-10 - 3.5481E+03 2.9802E-09 1.7281E-09 8.8816E-11 6.7093E-11 - 3.9811E+03 1.9680E-09 1.1431E-09 6.1282E-11 4.2582E-11 - 4.4668E+03 1.3210E-09 7.5849E-10 4.0720E-11 2.7245E-11 - 5.0119E+03 8.7880E-10 5.0154E-10 2.7597E-11 1.9236E-11 - 5.6234E+03 5.7909E-10 3.3598E-10 1.7749E-11 1.3299E-11 - 6.3096E+03 3.8844E-10 2.2017E-10 1.1138E-11 7.4580E-12 - 7.0795E+03 2.5853E-10 1.4402E-10 7.3175E-12 4.8567E-12 - 7.9433E+03 1.7026E-10 9.5527E-11 4.8066E-12 3.4374E-12 - 8.9125E+03 1.1319E-10 6.2458E-11 3.0234E-12 2.4966E-12 - 1.0000E+04 7.4487E-11 4.0315E-11 1.9385E-12 1.5379E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2832E+04 1.3068E+04 6.3701E+03 5.8554E+03 - 1.1220E-01 1.1153E+04 1.1360E+04 5.5632E+03 5.0977E+03 - 1.2589E-01 9.6745E+03 9.7873E+03 4.8473E+03 4.3827E+03 - 1.4125E-01 8.3125E+03 8.4009E+03 4.1790E+03 3.7310E+03 - 1.5849E-01 7.0843E+03 7.1685E+03 3.5521E+03 3.1521E+03 - 1.7783E-01 5.9662E+03 5.9924E+03 3.0053E+03 2.6475E+03 - 1.9953E-01 4.9714E+03 4.9661E+03 2.5294E+03 2.1951E+03 - 2.2387E-01 4.0939E+03 4.0900E+03 2.1072E+03 1.8035E+03 - 2.5119E-01 3.3222E+03 3.3290E+03 1.7328E+03 1.4796E+03 - 2.8184E-01 2.6761E+03 2.6786E+03 1.4210E+03 1.1986E+03 - 3.1623E-01 2.1434E+03 2.1500E+03 1.1467E+03 9.5239E+02 - 3.5481E-01 1.7041E+03 1.7070E+03 9.1573E+02 7.5449E+02 - 3.9811E-01 1.3416E+03 1.3374E+03 7.2676E+02 5.9937E+02 - 4.4668E-01 1.0495E+03 1.0454E+03 5.7138E+02 4.6938E+02 - 5.0119E-01 8.1454E+02 8.1063E+02 4.4760E+02 3.6311E+02 - 5.6234E-01 6.3197E+02 6.2599E+02 3.4720E+02 2.7804E+02 - 6.3096E-01 4.8609E+02 4.7868E+02 2.6526E+02 2.1269E+02 - 7.0795E-01 3.7099E+02 3.6404E+02 2.0272E+02 1.6290E+02 - 7.9433E-01 2.8411E+02 2.7542E+02 1.5317E+02 1.2340E+02 - 8.9125E-01 2.1544E+02 2.0910E+02 1.1618E+02 9.2920E+01 - 1.0000E+00 1.6252E+02 1.5723E+02 8.7432E+01 6.9334E+01 - 1.1220E+00 1.2195E+02 1.1839E+02 6.4537E+01 5.1471E+01 - 1.2589E+00 9.1623E+01 8.8171E+01 4.7757E+01 3.7970E+01 - 1.4125E+00 6.8624E+01 6.4895E+01 3.5416E+01 2.7694E+01 - 1.5849E+00 5.1435E+01 4.8022E+01 2.6057E+01 1.9929E+01 - 1.7783E+00 3.8531E+01 3.5559E+01 1.8851E+01 1.4433E+01 - 1.9953E+00 2.8352E+01 2.6229E+01 1.3545E+01 1.0506E+01 - 2.2387E+00 2.0619E+01 1.9279E+01 9.7847E+00 7.5089E+00 - 2.5119E+00 1.4965E+01 1.3842E+01 7.1264E+00 5.4468E+00 - 2.8184E+00 1.1055E+01 9.8517E+00 5.0930E+00 3.8645E+00 - 3.1623E+00 8.1015E+00 7.1836E+00 3.5222E+00 2.6557E+00 - 3.5481E+00 5.8747E+00 5.1476E+00 2.4669E+00 1.8681E+00 - 3.9811E+00 4.2696E+00 3.7183E+00 1.7188E+00 1.3123E+00 - 4.4668E+00 3.0969E+00 2.6744E+00 1.1923E+00 9.1326E-01 - 5.0119E+00 2.2138E+00 1.9000E+00 8.3481E-01 6.3425E-01 - 5.6234E+00 1.5954E+00 1.3613E+00 5.7253E-01 4.4468E-01 - 6.3096E+00 1.1617E+00 9.7754E-01 3.8500E-01 3.0026E-01 - 7.0795E+00 8.2308E-01 6.8271E-01 2.6512E-01 1.9748E-01 - 7.9433E+00 5.9362E-01 4.8615E-01 1.8418E-01 1.3465E-01 - 8.9125E+00 4.2678E-01 3.5000E-01 1.2444E-01 9.0177E-02 - 1.0000E+01 3.0084E-01 2.4363E-01 8.2521E-02 6.2420E-02 - 1.1220E+01 2.1376E-01 1.7180E-01 5.5564E-02 4.1602E-02 - 1.2589E+01 1.5259E-01 1.2071E-01 3.7511E-02 2.7752E-02 - 1.4125E+01 1.0888E-01 8.6021E-02 2.5362E-02 1.8595E-02 - 1.5849E+01 7.7051E-02 6.1630E-02 1.6443E-02 1.2298E-02 - 1.7783E+01 5.4691E-02 4.3433E-02 1.0626E-02 8.2736E-03 - 1.9953E+01 3.9459E-02 3.0524E-02 7.2972E-03 5.5524E-03 - 2.2387E+01 2.8254E-02 2.1586E-02 4.8323E-03 3.7599E-03 - 2.5119E+01 1.9597E-02 1.5414E-02 3.2019E-03 2.4484E-03 - 2.8184E+01 1.3898E-02 1.1084E-02 2.2519E-03 1.6109E-03 - 3.1623E+01 1.0220E-02 7.7484E-03 1.4495E-03 1.1332E-03 - 3.5481E+01 7.2606E-03 5.4724E-03 9.7534E-04 7.5089E-04 - 3.9811E+01 5.1459E-03 3.8635E-03 6.4826E-04 5.0703E-04 - 4.4668E+01 3.6625E-03 2.7374E-03 4.3028E-04 3.3961E-04 - 5.0119E+01 2.5988E-03 1.9276E-03 2.8645E-04 2.2781E-04 - 5.6234E+01 1.8351E-03 1.3548E-03 1.8931E-04 1.5216E-04 - 6.3096E+01 1.3038E-03 9.5700E-04 1.2754E-04 1.0095E-04 - 7.0795E+01 9.2276E-04 6.7472E-04 8.5074E-05 6.7399E-05 - 7.9433E+01 6.4913E-04 4.7630E-04 5.6152E-05 4.5804E-05 - 8.9125E+01 4.5973E-04 3.3183E-04 3.7901E-05 3.0520E-05 - 1.0000E+02 3.2300E-04 2.3113E-04 2.5288E-05 2.0213E-05 - 1.1220E+02 2.2761E-04 1.6256E-04 1.6862E-05 1.3595E-05 - 1.2589E+02 1.6036E-04 1.1365E-04 1.1347E-05 9.0941E-06 - 1.4125E+02 1.1236E-04 7.9059E-05 7.5573E-06 6.1910E-06 - 1.5849E+02 7.9041E-05 5.5253E-05 5.0865E-06 4.1215E-06 - 1.7783E+02 5.5748E-05 3.8342E-05 3.3728E-06 2.7644E-06 - 1.9953E+02 3.8844E-05 2.6641E-05 2.2271E-06 1.8708E-06 - 2.2387E+02 2.7205E-05 1.8569E-05 1.5064E-06 1.2332E-06 - 2.5119E+02 1.9006E-05 1.2887E-05 1.0193E-06 8.3934E-07 - 2.8184E+02 1.3190E-05 8.8930E-06 7.0574E-07 5.7431E-07 - 3.1623E+02 9.3104E-06 6.1723E-06 4.8774E-07 3.8517E-07 - 3.5481E+02 6.5056E-06 4.2706E-06 3.2662E-07 2.5778E-07 - 3.9811E+02 4.5252E-06 2.9776E-06 2.2111E-07 1.7566E-07 - 4.4668E+02 3.1449E-06 2.0515E-06 1.5071E-07 1.2105E-07 - 5.0119E+02 2.1970E-06 1.4153E-06 1.0211E-07 8.2051E-08 - 5.6234E+02 1.5281E-06 9.8271E-07 6.7718E-08 5.3756E-08 - 6.3096E+02 1.0551E-06 6.7390E-07 4.6056E-08 3.5501E-08 - 7.0795E+02 7.3217E-07 4.6587E-07 3.1099E-08 2.4048E-08 - 7.9433E+02 5.0682E-07 3.2030E-07 2.0871E-08 1.6543E-08 - 8.9125E+02 3.5190E-07 2.1734E-07 1.4061E-08 1.1068E-08 - 1.0000E+03 2.4312E-07 1.4970E-07 9.3720E-09 7.3396E-09 - 1.1220E+03 1.6543E-07 1.0190E-07 6.3170E-09 5.0655E-09 - 1.2589E+03 1.1366E-07 6.9649E-08 4.2815E-09 3.4284E-09 - 1.4125E+03 7.7507E-08 4.7438E-08 2.8008E-09 2.1577E-09 - 1.5849E+03 5.2878E-08 3.2152E-08 1.9120E-09 1.3047E-09 - 1.7783E+03 3.6215E-08 2.1566E-08 1.3348E-09 9.1249E-10 - 1.9953E+03 2.4577E-08 1.4813E-08 8.9447E-10 6.3413E-10 - 2.2387E+03 1.6734E-08 9.9673E-09 5.8666E-10 4.3260E-10 - 2.5119E+03 1.1355E-08 6.5959E-09 3.8009E-10 2.8232E-10 - 2.8184E+03 7.6807E-09 4.4771E-09 2.4975E-10 1.8381E-10 - 3.1623E+03 5.2699E-09 3.0632E-09 1.6106E-10 1.2199E-10 - 3.5481E+03 3.4725E-09 1.9907E-09 1.0892E-10 8.2580E-11 - 3.9811E+03 2.3338E-09 1.3313E-09 7.5162E-11 5.2330E-11 - 4.4668E+03 1.5487E-09 8.8953E-10 5.0349E-11 3.3961E-11 - 5.0119E+03 1.0260E-09 5.9818E-10 3.2485E-11 2.2544E-11 - 5.6234E+03 6.9052E-10 3.9818E-10 2.0422E-11 1.3956E-11 - 6.3096E+03 4.6104E-10 2.6206E-10 1.3270E-11 9.8748E-12 - 7.0795E+03 3.0456E-10 1.7294E-10 9.0279E-12 6.5709E-12 - 7.9433E+03 2.0349E-10 1.1283E-10 5.9246E-12 4.1950E-12 - 8.9125E+03 1.3545E-10 7.4543E-11 3.7976E-12 2.7895E-12 - 1.0000E+04 8.8564E-11 4.8759E-11 2.5063E-12 1.9250E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2705E+04 1.2821E+04 6.1688E+03 5.8648E+03 - 1.1220E-01 1.1051E+04 1.1133E+04 5.3976E+03 5.0935E+03 - 1.2589E-01 9.5797E+03 9.5784E+03 4.7077E+03 4.3968E+03 - 1.4125E-01 8.2383E+03 8.1604E+03 4.0383E+03 3.7683E+03 - 1.5849E-01 7.0086E+03 6.9100E+03 3.4224E+03 3.1578E+03 - 1.7783E-01 5.9124E+03 5.8067E+03 2.8942E+03 2.6454E+03 - 1.9953E-01 4.9196E+03 4.8468E+03 2.4394E+03 2.2110E+03 - 2.2387E-01 4.0243E+03 3.9966E+03 2.0372E+03 1.8145E+03 - 2.5119E-01 3.2775E+03 3.2459E+03 1.6826E+03 1.4752E+03 - 2.8184E-01 2.6570E+03 2.6120E+03 1.3738E+03 1.1909E+03 - 3.1623E-01 2.1303E+03 2.0993E+03 1.1061E+03 9.5565E+02 - 3.5481E-01 1.6861E+03 1.6685E+03 8.8442E+02 7.5647E+02 - 3.9811E-01 1.3285E+03 1.3106E+03 7.0283E+02 5.9525E+02 - 4.4668E-01 1.0358E+03 1.0249E+03 5.5284E+02 4.6564E+02 - 5.0119E-01 8.0166E+02 7.9379E+02 4.2948E+02 3.6301E+02 - 5.6234E-01 6.2606E+02 6.1005E+02 3.3370E+02 2.8005E+02 - 6.3096E-01 4.8634E+02 4.6894E+02 2.5616E+02 2.1261E+02 - 7.0795E-01 3.7140E+02 3.5907E+02 1.9891E+02 1.6128E+02 - 7.9433E-01 2.8091E+02 2.7181E+02 1.5386E+02 1.2196E+02 - 8.9125E-01 2.1432E+02 2.0811E+02 1.1454E+02 9.1982E+01 - 1.0000E+00 1.6122E+02 1.5641E+02 8.5260E+01 6.9715E+01 - 1.1220E+00 1.2137E+02 1.1677E+02 6.3788E+01 5.0964E+01 - 1.2589E+00 9.1461E+01 8.6915E+01 4.6867E+01 3.7611E+01 - 1.4125E+00 6.8991E+01 6.4848E+01 3.4634E+01 2.7988E+01 - 1.5849E+00 5.1691E+01 4.8017E+01 2.5616E+01 2.0462E+01 - 1.7783E+00 3.8111E+01 3.5164E+01 1.8631E+01 1.4677E+01 - 1.9953E+00 2.7997E+01 2.5876E+01 1.3540E+01 1.0389E+01 - 2.2387E+00 2.0741E+01 1.8996E+01 9.8523E+00 7.5294E+00 - 2.5119E+00 1.5188E+01 1.3717E+01 7.0845E+00 5.3285E+00 - 2.8184E+00 1.0991E+01 9.9432E+00 4.9874E+00 3.7671E+00 - 3.1623E+00 8.0739E+00 7.1404E+00 3.5009E+00 2.6843E+00 - 3.5481E+00 5.8186E+00 5.1561E+00 2.4840E+00 1.8846E+00 - 3.9811E+00 4.2149E+00 3.7166E+00 1.7561E+00 1.3044E+00 - 4.4668E+00 3.0614E+00 2.6580E+00 1.2055E+00 9.1213E-01 - 5.0119E+00 2.1987E+00 1.9060E+00 8.1043E-01 6.2512E-01 - 5.6234E+00 1.5803E+00 1.3568E+00 5.5744E-01 4.2619E-01 - 6.3096E+00 1.1341E+00 9.5811E-01 3.9054E-01 2.8221E-01 - 7.0795E+00 8.1398E-01 6.7752E-01 2.6501E-01 1.9194E-01 - 7.9433E+00 5.7909E-01 4.8261E-01 1.8096E-01 1.3436E-01 - 8.9125E+00 4.1218E-01 3.4729E-01 1.2299E-01 9.0563E-02 - 1.0000E+01 2.9952E-01 2.4512E-01 8.1747E-02 6.1771E-02 - 1.1220E+01 2.1539E-01 1.7279E-01 5.4992E-02 4.1108E-02 - 1.2589E+01 1.5428E-01 1.2201E-01 3.7308E-02 2.8300E-02 - 1.4125E+01 1.0944E-01 8.6838E-02 2.5079E-02 1.8880E-02 - 1.5849E+01 7.7516E-02 6.1652E-02 1.6671E-02 1.2523E-02 - 1.7783E+01 5.5512E-02 4.3349E-02 1.1048E-02 8.5758E-03 - 1.9953E+01 3.9634E-02 3.0958E-02 7.3206E-03 5.8369E-03 - 2.2387E+01 2.8022E-02 2.2281E-02 5.0237E-03 3.8942E-03 - 2.5119E+01 2.0170E-02 1.5499E-02 3.2515E-03 2.4920E-03 - 2.8184E+01 1.4525E-02 1.0909E-02 2.2157E-03 1.6171E-03 - 3.1623E+01 1.0215E-02 7.7456E-03 1.4577E-03 1.1310E-03 - 3.5481E+01 7.2405E-03 5.4560E-03 9.6940E-04 7.5211E-04 - 3.9811E+01 5.1414E-03 3.8569E-03 6.4642E-04 4.9863E-04 - 4.4668E+01 3.6696E-03 2.7353E-03 4.2961E-04 3.3423E-04 - 5.0119E+01 2.6070E-03 1.9312E-03 2.8424E-04 2.2173E-04 - 5.6234E+01 1.8436E-03 1.3531E-03 1.9087E-04 1.4833E-04 - 6.3096E+01 1.3000E-03 9.4883E-04 1.2600E-04 1.0036E-04 - 7.0795E+01 9.2271E-04 6.7059E-04 8.2812E-05 6.7042E-05 - 7.9433E+01 6.5561E-04 4.7085E-04 5.4754E-05 4.4336E-05 - 8.9125E+01 4.6235E-04 3.2996E-04 3.6192E-05 2.9984E-05 - 1.0000E+02 3.2421E-04 2.3111E-04 2.5142E-05 2.0348E-05 - 1.1220E+02 2.2769E-04 1.6171E-04 1.6799E-05 1.3663E-05 - 1.2589E+02 1.5978E-04 1.1287E-04 1.1204E-05 9.2587E-06 - 1.4125E+02 1.1243E-04 7.8871E-05 7.5291E-06 6.2993E-06 - 1.5849E+02 7.9274E-05 5.4857E-05 5.0836E-06 4.1861E-06 - 1.7783E+02 5.5665E-05 3.8394E-05 3.3670E-06 2.8232E-06 - 1.9953E+02 3.8696E-05 2.6658E-05 2.3019E-06 1.9286E-06 - 2.2387E+02 2.7060E-05 1.8523E-05 1.6099E-06 1.2441E-06 - 2.5119E+02 1.9003E-05 1.2975E-05 1.0546E-06 8.6029E-07 - 2.8184E+02 1.3148E-05 8.9539E-06 7.0270E-07 5.9620E-07 - 3.1623E+02 9.2773E-06 6.1657E-06 4.7990E-07 3.8914E-07 - 3.5481E+02 6.4646E-06 4.2880E-06 3.1791E-07 2.6341E-07 - 3.9811E+02 4.5022E-06 2.9732E-06 2.1417E-07 1.7438E-07 - 4.4668E+02 3.1379E-06 2.0424E-06 1.4591E-07 1.1858E-07 - 5.0119E+02 2.1785E-06 1.4037E-06 9.7585E-08 7.9877E-08 - 5.6234E+02 1.5176E-06 9.8107E-07 6.7132E-08 5.4314E-08 - 6.3096E+02 1.0500E-06 6.7312E-07 4.6132E-08 3.6664E-08 - 7.0795E+02 7.2827E-07 4.6221E-07 3.1522E-08 2.4871E-08 - 7.9433E+02 5.0466E-07 3.1695E-07 2.0867E-08 1.6351E-08 - 8.9125E+02 3.5013E-07 2.1788E-07 1.3592E-08 1.0812E-08 - 1.0000E+03 2.4361E-07 1.4997E-07 9.3467E-09 7.5933E-09 - 1.1220E+03 1.6657E-07 1.0171E-07 6.5262E-09 5.1845E-09 - 1.2589E+03 1.1433E-07 6.9101E-08 4.2543E-09 3.3482E-09 - 1.4125E+03 7.8219E-08 4.6842E-08 2.8140E-09 2.1258E-09 - 1.5849E+03 5.2992E-08 3.1810E-08 1.8489E-09 1.4093E-09 - 1.7783E+03 3.5807E-08 2.1360E-08 1.2671E-09 9.5351E-10 - 1.9953E+03 2.4661E-08 1.4662E-08 8.2140E-10 6.4273E-10 - 2.2387E+03 1.6825E-08 1.0049E-08 5.5734E-10 4.3988E-10 - 2.5119E+03 1.1339E-08 6.6568E-09 3.7810E-10 2.8724E-10 - 2.8184E+03 7.5749E-09 4.4009E-09 2.4529E-10 1.9528E-10 - 3.1623E+03 5.2367E-09 3.0456E-09 1.6545E-10 1.2467E-10 - 3.5481E+03 3.4650E-09 2.0078E-09 1.1003E-10 7.9394E-11 - 3.9811E+03 2.3210E-09 1.3461E-09 7.1663E-11 5.0134E-11 - 4.4668E+03 1.5489E-09 8.9222E-10 4.7913E-11 3.3738E-11 - 5.0119E+03 1.0445E-09 5.8932E-10 3.2632E-11 2.4264E-11 - 5.6234E+03 7.0086E-10 3.9204E-10 2.1319E-11 1.4814E-11 - 6.3096E+03 4.6035E-10 2.6075E-10 1.4285E-11 9.4160E-12 - 7.0795E+03 3.0587E-10 1.7106E-10 9.0063E-12 6.0201E-12 - 7.9433E+03 2.0421E-10 1.1344E-10 5.9240E-12 4.1934E-12 - 8.9125E+03 1.3387E-10 7.5223E-11 3.6461E-12 2.5995E-12 - 1.0000E+04 8.8632E-11 4.9241E-11 2.3877E-12 1.5365E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2693E+04 1.2653E+04 6.0651E+03 5.9086E+03 - 1.1220E-01 1.1034E+04 1.0973E+04 5.3107E+03 5.1443E+03 - 1.2589E-01 9.5674E+03 9.4555E+03 4.6013E+03 4.4291E+03 - 1.4125E-01 8.2088E+03 8.0794E+03 3.9612E+03 3.7614E+03 - 1.5849E-01 6.9951E+03 6.8400E+03 3.3737E+03 3.1766E+03 - 1.7783E-01 5.8911E+03 5.7309E+03 2.8336E+03 2.6519E+03 - 1.9953E-01 4.8885E+03 4.7455E+03 2.3667E+03 2.2021E+03 - 2.2387E-01 4.0222E+03 3.9109E+03 1.9771E+03 1.8171E+03 - 2.5119E-01 3.2797E+03 3.1860E+03 1.6426E+03 1.4893E+03 - 2.8184E-01 2.6364E+03 2.5487E+03 1.3421E+03 1.2018E+03 - 3.1623E-01 2.1120E+03 2.0407E+03 1.0855E+03 9.6319E+02 - 3.5481E-01 1.6856E+03 1.6299E+03 8.7004E+02 7.7121E+02 - 3.9811E-01 1.3330E+03 1.2835E+03 6.8863E+02 6.0461E+02 - 4.4668E-01 1.0516E+03 1.0040E+03 5.3946E+02 4.6500E+02 - 5.0119E-01 8.1555E+02 7.8342E+02 4.2404E+02 3.5876E+02 - 5.6234E-01 6.2706E+02 6.0608E+02 3.3386E+02 2.7888E+02 - 6.3096E-01 4.8152E+02 4.6619E+02 2.5797E+02 2.1513E+02 - 7.0795E-01 3.6904E+02 3.5575E+02 1.9641E+02 1.6178E+02 - 7.9433E-01 2.7990E+02 2.6706E+02 1.4856E+02 1.2264E+02 - 8.9125E-01 2.1205E+02 2.0275E+02 1.1224E+02 9.1474E+01 - 1.0000E+00 1.6076E+02 1.5398E+02 8.5113E+01 6.7929E+01 - 1.1220E+00 1.2124E+02 1.1524E+02 6.3822E+01 5.0242E+01 - 1.2589E+00 9.0906E+01 8.6089E+01 4.7189E+01 3.7372E+01 - 1.4125E+00 6.8302E+01 6.4046E+01 3.4604E+01 2.7755E+01 - 1.5849E+00 5.0981E+01 4.7703E+01 2.5448E+01 2.0223E+01 - 1.7783E+00 3.7910E+01 3.5469E+01 1.8622E+01 1.4517E+01 - 1.9953E+00 2.8112E+01 2.5893E+01 1.3423E+01 1.0378E+01 - 2.2387E+00 2.0484E+01 1.8678E+01 9.6329E+00 7.4505E+00 - 2.5119E+00 1.5026E+01 1.3620E+01 6.9669E+00 5.4112E+00 - 2.8184E+00 1.1104E+01 9.9145E+00 5.0371E+00 3.7990E+00 - 3.1623E+00 8.0234E+00 7.1204E+00 3.5169E+00 2.6646E+00 - 3.5481E+00 5.8687E+00 5.1500E+00 2.4544E+00 1.8600E+00 - 3.9811E+00 4.2444E+00 3.6857E+00 1.7098E+00 1.2937E+00 - 4.4668E+00 3.0669E+00 2.6454E+00 1.1769E+00 8.9118E-01 - 5.0119E+00 2.2167E+00 1.8930E+00 8.2757E-01 6.1741E-01 - 5.6234E+00 1.5935E+00 1.3450E+00 5.7881E-01 4.2782E-01 - 6.3096E+00 1.1358E+00 9.5041E-01 3.9181E-01 2.9029E-01 - 7.0795E+00 8.1220E-01 6.7775E-01 2.6101E-01 1.9617E-01 - 7.9433E+00 5.7757E-01 4.9213E-01 1.7419E-01 1.3260E-01 - 8.9125E+00 4.1382E-01 3.4623E-01 1.1807E-01 8.8970E-02 - 1.0000E+01 3.0060E-01 2.4560E-01 8.1755E-02 6.1495E-02 - 1.1220E+01 2.1516E-01 1.7406E-01 5.5183E-02 4.1474E-02 - 1.2589E+01 1.5404E-01 1.2386E-01 3.7303E-02 2.7938E-02 - 1.4125E+01 1.0968E-01 8.7776E-02 2.5301E-02 1.9116E-02 - 1.5849E+01 7.7794E-02 6.2250E-02 1.6661E-02 1.2894E-02 - 1.7783E+01 5.5673E-02 4.4391E-02 1.1153E-02 8.5603E-03 - 1.9953E+01 3.9231E-02 3.1436E-02 7.6068E-03 5.7713E-03 - 2.2387E+01 2.7894E-02 2.2620E-02 4.9125E-03 3.7978E-03 - 2.5119E+01 2.0319E-02 1.5974E-02 3.3082E-03 2.5461E-03 - 2.8184E+01 1.4624E-02 1.0978E-02 2.2208E-03 1.7164E-03 - 3.1623E+01 1.0206E-02 7.7730E-03 1.4598E-03 1.1241E-03 - 3.5481E+01 7.2657E-03 5.4780E-03 9.6886E-04 7.5310E-04 - 3.9811E+01 5.1668E-03 3.8710E-03 6.4570E-04 5.0789E-04 - 4.4668E+01 3.6663E-03 2.7384E-03 4.3086E-04 3.3863E-04 - 5.0119E+01 2.6014E-03 1.9176E-03 2.8853E-04 2.2782E-04 - 5.6234E+01 1.8448E-03 1.3497E-03 1.9173E-04 1.5408E-04 - 6.3096E+01 1.2973E-03 9.5412E-04 1.2560E-04 1.0051E-04 - 7.0795E+01 9.1763E-04 6.7200E-04 8.2794E-05 6.7094E-05 - 7.9433E+01 6.4894E-04 4.7393E-04 5.5759E-05 4.5354E-05 - 8.9125E+01 4.5803E-04 3.3244E-04 3.7983E-05 3.0087E-05 - 1.0000E+02 3.2312E-04 2.3145E-04 2.5057E-05 2.0304E-05 - 1.1220E+02 2.2790E-04 1.6151E-04 1.6757E-05 1.3630E-05 - 1.2589E+02 1.6121E-04 1.1287E-04 1.1210E-05 9.2091E-06 - 1.4125E+02 1.1298E-04 7.9059E-05 7.5425E-06 6.2268E-06 - 1.5849E+02 7.8815E-05 5.5044E-05 5.0545E-06 4.2112E-06 - 1.7783E+02 5.5190E-05 3.8343E-05 3.4543E-06 2.7975E-06 - 1.9953E+02 3.8789E-05 2.6641E-05 2.2781E-06 1.8775E-06 - 2.2387E+02 2.7287E-05 1.8458E-05 1.5136E-06 1.2658E-06 - 2.5119E+02 1.9090E-05 1.2756E-05 1.0357E-06 8.4559E-07 - 2.8184E+02 1.3244E-05 8.8781E-06 7.1874E-07 5.6952E-07 - 3.1623E+02 9.2658E-06 6.1687E-06 4.8041E-07 3.8661E-07 - 3.5481E+02 6.4470E-06 4.2740E-06 3.1884E-07 2.6233E-07 - 3.9811E+02 4.5108E-06 2.9543E-06 2.1381E-07 1.7827E-07 - 4.4668E+02 3.1299E-06 2.0427E-06 1.4850E-07 1.1836E-07 - 5.0119E+02 2.1672E-06 1.4125E-06 1.0113E-07 7.9294E-08 - 5.6234E+02 1.5175E-06 9.7803E-07 6.8550E-08 5.3358E-08 - 6.3096E+02 1.0518E-06 6.7083E-07 4.6770E-08 3.6471E-08 - 7.0795E+02 7.3124E-07 4.6403E-07 3.1190E-08 2.4931E-08 - 7.9433E+02 5.0684E-07 3.2010E-07 2.0807E-08 1.6473E-08 - 8.9125E+02 3.5007E-07 2.2023E-07 1.3841E-08 1.0785E-08 - 1.0000E+03 2.4236E-07 1.5058E-07 9.2982E-09 7.4277E-09 - 1.1220E+03 1.6489E-07 1.0186E-07 6.2567E-09 4.9631E-09 - 1.2589E+03 1.1303E-07 6.9385E-08 4.3062E-09 3.3264E-09 - 1.4125E+03 7.7924E-08 4.6938E-08 2.8876E-09 2.2292E-09 - 1.5849E+03 5.3751E-08 3.1885E-08 1.9872E-09 1.4788E-09 - 1.7783E+03 3.6588E-08 2.1738E-08 1.3459E-09 1.0158E-09 - 1.9953E+03 2.4538E-08 1.4807E-08 8.6144E-10 6.2815E-10 - 2.2387E+03 1.6636E-08 9.9862E-09 5.8390E-10 4.2361E-10 - 2.5119E+03 1.1293E-08 6.7490E-09 4.0670E-10 2.8737E-10 - 2.8184E+03 7.6890E-09 4.5204E-09 2.6125E-10 1.9075E-10 - 3.1623E+03 5.2637E-09 3.0706E-09 1.6648E-10 1.2178E-10 - 3.5481E+03 3.4683E-09 1.9930E-09 1.0871E-10 7.9647E-11 - 3.9811E+03 2.3183E-09 1.3293E-09 7.0366E-11 5.2289E-11 - 4.4668E+03 1.5523E-09 9.0022E-10 4.7944E-11 3.6141E-11 - 5.0119E+03 1.0430E-09 6.0025E-10 3.2110E-11 2.5005E-11 - 5.6234E+03 6.8907E-10 3.9754E-10 2.0297E-11 1.6428E-11 - 6.3096E+03 4.6399E-10 2.6069E-10 1.3342E-11 1.0012E-11 - 7.0795E+03 3.0502E-10 1.7245E-10 9.0771E-12 6.7044E-12 - 7.9433E+03 2.0016E-10 1.1313E-10 5.8617E-12 4.3271E-12 - 8.9125E+03 1.3353E-10 7.3853E-11 3.6587E-12 2.7297E-12 - 1.0000E+04 8.9942E-11 4.8764E-11 2.4704E-12 1.7066E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2795E+04 1.2654E+04 6.0733E+03 5.9318E+03 - 1.1220E-01 1.1126E+04 1.0972E+04 5.3239E+03 5.1473E+03 - 1.2589E-01 9.5783E+03 9.4358E+03 4.6014E+03 4.4557E+03 - 1.4125E-01 8.2063E+03 8.0601E+03 3.9278E+03 3.8008E+03 - 1.5849E-01 7.0122E+03 6.8398E+03 3.3456E+03 3.2009E+03 - 1.7783E-01 5.9078E+03 5.7340E+03 2.8347E+03 2.6990E+03 - 1.9953E-01 4.9086E+03 4.7599E+03 2.3787E+03 2.2417E+03 - 2.2387E-01 4.0484E+03 3.9068E+03 1.9805E+03 1.8388E+03 - 2.5119E-01 3.2975E+03 3.1694E+03 1.6258E+03 1.4984E+03 - 2.8184E-01 2.6551E+03 2.5665E+03 1.3257E+03 1.2145E+03 - 3.1623E-01 2.1194E+03 2.0442E+03 1.0767E+03 9.7311E+02 - 3.5481E-01 1.6880E+03 1.6150E+03 8.5958E+02 7.7433E+02 - 3.9811E-01 1.3405E+03 1.2847E+03 6.7716E+02 6.0840E+02 - 4.4668E-01 1.0468E+03 1.0029E+03 5.3936E+02 4.7337E+02 - 5.0119E-01 8.1420E+02 7.7565E+02 4.2587E+02 3.6829E+02 - 5.6234E-01 6.3264E+02 6.0284E+02 3.3065E+02 2.8296E+02 - 6.3096E-01 4.8191E+02 4.6398E+02 2.5439E+02 2.1586E+02 - 7.0795E-01 3.7001E+02 3.5342E+02 1.9489E+02 1.6286E+02 - 7.9433E-01 2.8304E+02 2.6799E+02 1.4837E+02 1.2266E+02 - 8.9125E-01 2.1284E+02 2.0209E+02 1.1362E+02 9.1577E+01 - 1.0000E+00 1.6116E+02 1.5370E+02 8.4640E+01 6.8829E+01 - 1.1220E+00 1.2208E+02 1.1555E+02 6.3078E+01 5.1255E+01 - 1.2589E+00 9.1577E+01 8.6496E+01 4.7158E+01 3.7748E+01 - 1.4125E+00 6.8506E+01 6.4436E+01 3.4686E+01 2.7650E+01 - 1.5849E+00 5.1420E+01 4.7517E+01 2.5468E+01 2.0024E+01 - 1.7783E+00 3.8258E+01 3.4938E+01 1.8521E+01 1.4605E+01 - 1.9953E+00 2.7974E+01 2.5728E+01 1.3425E+01 1.0510E+01 - 2.2387E+00 2.0476E+01 1.8827E+01 9.7993E+00 7.5339E+00 - 2.5119E+00 1.5018E+01 1.3621E+01 7.0609E+00 5.4193E+00 - 2.8184E+00 1.0901E+01 9.9594E+00 4.9933E+00 3.8361E+00 - 3.1623E+00 7.9927E+00 7.1625E+00 3.5058E+00 2.6773E+00 - 3.5481E+00 5.8165E+00 5.1257E+00 2.4647E+00 1.8824E+00 - 3.9811E+00 4.2331E+00 3.7039E+00 1.7197E+00 1.2902E+00 - 4.4668E+00 3.0589E+00 2.6554E+00 1.1941E+00 8.9576E-01 - 5.0119E+00 2.2165E+00 1.8939E+00 8.3626E-01 6.1895E-01 - 5.6234E+00 1.5859E+00 1.3657E+00 5.7570E-01 4.2278E-01 - 6.3096E+00 1.1412E+00 9.6744E-01 3.8829E-01 2.8953E-01 - 7.0795E+00 8.2041E-01 6.8461E-01 2.6629E-01 1.9579E-01 - 7.9433E+00 5.8679E-01 4.9107E-01 1.7972E-01 1.3143E-01 - 8.9125E+00 4.1978E-01 3.4809E-01 1.2441E-01 9.0942E-02 - 1.0000E+01 3.0109E-01 2.4747E-01 8.3794E-02 6.2877E-02 - 1.1220E+01 2.1624E-01 1.7504E-01 5.5977E-02 4.2022E-02 - 1.2589E+01 1.5259E-01 1.2371E-01 3.7388E-02 2.8199E-02 - 1.4125E+01 1.0911E-01 8.7187E-02 2.5325E-02 1.8868E-02 - 1.5849E+01 7.8790E-02 6.1734E-02 1.6923E-02 1.2596E-02 - 1.7783E+01 5.6476E-02 4.4204E-02 1.1075E-02 8.5071E-03 - 1.9953E+01 4.0702E-02 3.1197E-02 7.3338E-03 5.7753E-03 - 2.2387E+01 2.8564E-02 2.2254E-02 4.8749E-03 3.8348E-03 - 2.5119E+01 1.9928E-02 1.5829E-02 3.1833E-03 2.5013E-03 - 2.8184E+01 1.4401E-02 1.1121E-02 2.1029E-03 1.5697E-03 - 3.1623E+01 1.0187E-02 7.7369E-03 1.4551E-03 1.1375E-03 - 3.5481E+01 7.2668E-03 5.4609E-03 9.7008E-04 7.5617E-04 - 3.9811E+01 5.1565E-03 3.8523E-03 6.4957E-04 4.9638E-04 - 4.4668E+01 3.6490E-03 2.7173E-03 4.3204E-04 3.3274E-04 - 5.0119E+01 2.5942E-03 1.9166E-03 2.8669E-04 2.2332E-04 - 5.6234E+01 1.8422E-03 1.3472E-03 1.9172E-04 1.4768E-04 - 6.3096E+01 1.3044E-03 9.5041E-04 1.2813E-04 9.9104E-05 - 7.0795E+01 9.2505E-04 6.6989E-04 8.4999E-05 6.7780E-05 - 7.9433E+01 6.5117E-04 4.6827E-04 5.6607E-05 4.5529E-05 - 8.9125E+01 4.6017E-04 3.2968E-04 3.7514E-05 2.9871E-05 - 1.0000E+02 3.2411E-04 2.3084E-04 2.5182E-05 2.0113E-05 - 1.1220E+02 2.2822E-04 1.6125E-04 1.7017E-05 1.3737E-05 - 1.2589E+02 1.6020E-04 1.1287E-04 1.1361E-05 9.2167E-06 - 1.4125E+02 1.1246E-04 7.9058E-05 7.5202E-06 6.1650E-06 - 1.5849E+02 7.9021E-05 5.5247E-05 5.0423E-06 4.1398E-06 - 1.7783E+02 5.5380E-05 3.8445E-05 3.4406E-06 2.7888E-06 - 1.9953E+02 3.8704E-05 2.6744E-05 2.3325E-06 1.9114E-06 - 2.2387E+02 2.7069E-05 1.8602E-05 1.5714E-06 1.2559E-06 - 2.5119E+02 1.9097E-05 1.2819E-05 1.0394E-06 8.4892E-07 - 2.8184E+02 1.3217E-05 8.8855E-06 6.9825E-07 5.7283E-07 - 3.1623E+02 9.2565E-06 6.1906E-06 4.8205E-07 3.8994E-07 - 3.5481E+02 6.4648E-06 4.2677E-06 3.3149E-07 2.6738E-07 - 3.9811E+02 4.5094E-06 2.9616E-06 2.2192E-07 1.7936E-07 - 4.4668E+02 3.1314E-06 2.0494E-06 1.4728E-07 1.1940E-07 - 5.0119E+02 2.1825E-06 1.4158E-06 1.0016E-07 7.8812E-08 - 5.6234E+02 1.5228E-06 9.8130E-07 6.7474E-08 5.2917E-08 - 6.3096E+02 1.0523E-06 6.7364E-07 4.5916E-08 3.6315E-08 - 7.0795E+02 7.2859E-07 4.6476E-07 3.0950E-08 2.4553E-08 - 7.9433E+02 5.0296E-07 3.1944E-07 2.0961E-08 1.6204E-08 - 8.9125E+02 3.4866E-07 2.1870E-07 1.4074E-08 1.0810E-08 - 1.0000E+03 2.4259E-07 1.5069E-07 9.7455E-09 7.3851E-09 - 1.1220E+03 1.6618E-07 1.0227E-07 6.5528E-09 4.8526E-09 - 1.2589E+03 1.1361E-07 6.9516E-08 4.3101E-09 3.0970E-09 - 1.4125E+03 7.6918E-08 4.7123E-08 2.8621E-09 2.1517E-09 - 1.5849E+03 5.2759E-08 3.2135E-08 1.8794E-09 1.4993E-09 - 1.7783E+03 3.6373E-08 2.1939E-08 1.1928E-09 9.0509E-10 - 1.9953E+03 2.4695E-08 1.4656E-08 8.1255E-10 6.2328E-10 - 2.2387E+03 1.6662E-08 9.7394E-09 5.7077E-10 4.2741E-10 - 2.5119E+03 1.1264E-08 6.5141E-09 3.7166E-10 2.7863E-10 - 2.8184E+03 7.5542E-09 4.4468E-09 2.4479E-10 1.8887E-10 - 3.1623E+03 5.2378E-09 3.0891E-09 1.6278E-10 1.2803E-10 - 3.5481E+03 3.4376E-09 2.0164E-09 1.0661E-10 8.5054E-11 - 3.9811E+03 2.3029E-09 1.3412E-09 7.0627E-11 5.2877E-11 - 4.4668E+03 1.5464E-09 8.9241E-10 4.8564E-11 3.5605E-11 - 5.0119E+03 1.0401E-09 5.9239E-10 3.0774E-11 2.3988E-11 - 5.6234E+03 6.9283E-10 3.9468E-10 1.9872E-11 1.5849E-11 - 6.3096E+03 4.6081E-10 2.6100E-10 1.3664E-11 9.2655E-12 - 7.0795E+03 3.0831E-10 1.7214E-10 9.5369E-12 6.1531E-12 - 7.9433E+03 2.0165E-10 1.1419E-10 5.9860E-12 4.5233E-12 - 8.9125E+03 1.3358E-10 7.4453E-11 3.9207E-12 2.9128E-12 - 1.0000E+04 8.8850E-11 4.9179E-11 2.7194E-12 1.9157E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2891E+04 1.2718E+04 6.1041E+03 5.9532E+03 - 1.1220E-01 1.1187E+04 1.1029E+04 5.3534E+03 5.1967E+03 - 1.2589E-01 9.6539E+03 9.4751E+03 4.6315E+03 4.4790E+03 - 1.4125E-01 8.2908E+03 8.0933E+03 3.9761E+03 3.8117E+03 - 1.5849E-01 7.0662E+03 6.8784E+03 3.4006E+03 3.2276E+03 - 1.7783E-01 5.9712E+03 5.8007E+03 2.8815E+03 2.7046E+03 - 1.9953E-01 4.9680E+03 4.8087E+03 2.4088E+03 2.2520E+03 - 2.2387E-01 4.0823E+03 3.9449E+03 2.0038E+03 1.8461E+03 - 2.5119E-01 3.3299E+03 3.2037E+03 1.6500E+03 1.5117E+03 - 2.8184E-01 2.6921E+03 2.5875E+03 1.3514E+03 1.2199E+03 - 3.1623E-01 2.1538E+03 2.0822E+03 1.1011E+03 9.7119E+02 - 3.5481E-01 1.7062E+03 1.6499E+03 8.8120E+02 7.7857E+02 - 3.9811E-01 1.3426E+03 1.2971E+03 6.9600E+02 6.0925E+02 - 4.4668E-01 1.0525E+03 1.0166E+03 5.4773E+02 4.7341E+02 - 5.0119E-01 8.1868E+02 7.9104E+02 4.2707E+02 3.6837E+02 - 5.6234E-01 6.3553E+02 6.0870E+02 3.3336E+02 2.8226E+02 - 6.3096E-01 4.8872E+02 4.6573E+02 2.5869E+02 2.1485E+02 - 7.0795E-01 3.7367E+02 3.5603E+02 1.9752E+02 1.6396E+02 - 7.9433E-01 2.8328E+02 2.7035E+02 1.5019E+02 1.2318E+02 - 8.9125E-01 2.1349E+02 2.0376E+02 1.1293E+02 9.1821E+01 - 1.0000E+00 1.6274E+02 1.5336E+02 8.4814E+01 6.8825E+01 - 1.1220E+00 1.2236E+02 1.1522E+02 6.2799E+01 5.1626E+01 - 1.2589E+00 9.1956E+01 8.6102E+01 4.6772E+01 3.8156E+01 - 1.4125E+00 6.9159E+01 6.3765E+01 3.4493E+01 2.7845E+01 - 1.5849E+00 5.1001E+01 4.7391E+01 2.5382E+01 2.0018E+01 - 1.7783E+00 3.7562E+01 3.4998E+01 1.8471E+01 1.4577E+01 - 1.9953E+00 2.7933E+01 2.5849E+01 1.3374E+01 1.0555E+01 - 2.2387E+00 2.0735E+01 1.8897E+01 9.7986E+00 7.5484E+00 - 2.5119E+00 1.5258E+01 1.3725E+01 6.9168E+00 5.3062E+00 - 2.8184E+00 1.1058E+01 9.9514E+00 4.9453E+00 3.7933E+00 - 3.1623E+00 7.9697E+00 7.1771E+00 3.5028E+00 2.6735E+00 - 3.5481E+00 5.8102E+00 5.1508E+00 2.4709E+00 1.8587E+00 - 3.9811E+00 4.2164E+00 3.6833E+00 1.7280E+00 1.2996E+00 - 4.4668E+00 3.0206E+00 2.6461E+00 1.1942E+00 9.0618E-01 - 5.0119E+00 2.1928E+00 1.8908E+00 8.1952E-01 6.1876E-01 - 5.6234E+00 1.5816E+00 1.3427E+00 5.6054E-01 4.2524E-01 - 6.3096E+00 1.1288E+00 9.6231E-01 3.9157E-01 2.8828E-01 - 7.0795E+00 8.0814E-01 6.8623E-01 2.6532E-01 1.9583E-01 - 7.9433E+00 5.7957E-01 4.8285E-01 1.8166E-01 1.3478E-01 - 8.9125E+00 4.1199E-01 3.4402E-01 1.2733E-01 9.1748E-02 - 1.0000E+01 2.9887E-01 2.4459E-01 8.2279E-02 6.1819E-02 - 1.1220E+01 2.1405E-01 1.7298E-01 5.5002E-02 4.1632E-02 - 1.2589E+01 1.5303E-01 1.2305E-01 3.7118E-02 2.8072E-02 - 1.4125E+01 1.0909E-01 8.6378E-02 2.4793E-02 1.8710E-02 - 1.5849E+01 7.7619E-02 6.1173E-02 1.6566E-02 1.2434E-02 - 1.7783E+01 5.5453E-02 4.3557E-02 1.1180E-02 8.5222E-03 - 1.9953E+01 3.9834E-02 3.1201E-02 7.3802E-03 5.6602E-03 - 2.2387E+01 2.8397E-02 2.2053E-02 4.8703E-03 3.6915E-03 - 2.5119E+01 2.0119E-02 1.5456E-02 3.2859E-03 2.5512E-03 - 2.8184E+01 1.4219E-02 1.1070E-02 2.2132E-03 1.7118E-03 - 3.1623E+01 1.0188E-02 7.7509E-03 1.4536E-03 1.1218E-03 - 3.5481E+01 7.2459E-03 5.4728E-03 9.6969E-04 7.4588E-04 - 3.9811E+01 5.1697E-03 3.8531E-03 6.4672E-04 5.0217E-04 - 4.4668E+01 3.6704E-03 2.7273E-03 4.3013E-04 3.4062E-04 - 5.0119E+01 2.6020E-03 1.9309E-03 2.8633E-04 2.2575E-04 - 5.6234E+01 1.8462E-03 1.3535E-03 1.8787E-04 1.5083E-04 - 6.3096E+01 1.3040E-03 9.5120E-04 1.2460E-04 1.0054E-04 - 7.0795E+01 9.2213E-04 6.6994E-04 8.4709E-05 6.5039E-05 - 7.9433E+01 6.5357E-04 4.7115E-04 5.6165E-05 4.3574E-05 - 8.9125E+01 4.6041E-04 3.3134E-04 3.7600E-05 3.0062E-05 - 1.0000E+02 3.2434E-04 2.3148E-04 2.5066E-05 2.0255E-05 - 1.1220E+02 2.2778E-04 1.6173E-04 1.6778E-05 1.3709E-05 - 1.2589E+02 1.6025E-04 1.1283E-04 1.1321E-05 9.1808E-06 - 1.4125E+02 1.1245E-04 7.9140E-05 7.5685E-06 6.0796E-06 - 1.5849E+02 7.9060E-05 5.5095E-05 5.1052E-06 4.1594E-06 - 1.7783E+02 5.5431E-05 3.8255E-05 3.4424E-06 2.8512E-06 - 1.9953E+02 3.8675E-05 2.6718E-05 2.3264E-06 1.9020E-06 - 2.2387E+02 2.7096E-05 1.8662E-05 1.5666E-06 1.2737E-06 - 2.5119E+02 1.9025E-05 1.3001E-05 1.0644E-06 8.2724E-07 - 2.8184E+02 1.3299E-05 9.0296E-06 7.2459E-07 5.4952E-07 - 3.1623E+02 9.2705E-06 6.1814E-06 4.8609E-07 3.8715E-07 - 3.5481E+02 6.4498E-06 4.2621E-06 3.2340E-07 2.6032E-07 - 3.9811E+02 4.5093E-06 2.9589E-06 2.1839E-07 1.7333E-07 - 4.4668E+02 3.1530E-06 2.0619E-06 1.4671E-07 1.1815E-07 - 5.0119E+02 2.1840E-06 1.4188E-06 1.0108E-07 8.0082E-08 - 5.6234E+02 1.5203E-06 9.7443E-07 6.8772E-08 5.3240E-08 - 6.3096E+02 1.0549E-06 6.7226E-07 4.5004E-08 3.5688E-08 - 7.0795E+02 7.3167E-07 4.6241E-07 2.9823E-08 2.4802E-08 - 7.9433E+02 5.0496E-07 3.1758E-07 2.0579E-08 1.6505E-08 - 8.9125E+02 3.4900E-07 2.1909E-07 1.4092E-08 1.0632E-08 - 1.0000E+03 2.4181E-07 1.4990E-07 9.5587E-09 7.1752E-09 - 1.1220E+03 1.6560E-07 1.0144E-07 6.4181E-09 4.9006E-09 - 1.2589E+03 1.1253E-07 6.9371E-08 4.1989E-09 3.4314E-09 - 1.4125E+03 7.7144E-08 4.7428E-08 2.6813E-09 2.1877E-09 - 1.5849E+03 5.3199E-08 3.2054E-08 1.8553E-09 1.4127E-09 - 1.7783E+03 3.6239E-08 2.1602E-08 1.3043E-09 9.8899E-10 - 1.9953E+03 2.4631E-08 1.4733E-08 8.1688E-10 6.4451E-10 - 2.2387E+03 1.6819E-08 1.0008E-08 5.5786E-10 4.0522E-10 - 2.5119E+03 1.1388E-08 6.6996E-09 3.7585E-10 2.7526E-10 - 2.8184E+03 7.6654E-09 4.4795E-09 2.3593E-10 1.9197E-10 - 3.1623E+03 5.2761E-09 3.0593E-09 1.6543E-10 1.1923E-10 - 3.5481E+03 3.4756E-09 2.0090E-09 1.1242E-10 7.6085E-11 - 3.9811E+03 2.3361E-09 1.3551E-09 7.1104E-11 5.3313E-11 - 4.4668E+03 1.5691E-09 8.9927E-10 4.6707E-11 3.6364E-11 - 5.0119E+03 1.0402E-09 6.0390E-10 3.2632E-11 2.2827E-11 - 5.6234E+03 6.8977E-10 3.9403E-10 2.2996E-11 1.4823E-11 - 6.3096E+03 4.5904E-10 2.5934E-10 1.5077E-11 9.6076E-12 - 7.0795E+03 3.0529E-10 1.6996E-10 9.5340E-12 6.1130E-12 - 7.9433E+03 2.0385E-10 1.1240E-10 5.8583E-12 3.7306E-12 - 8.9125E+03 1.3387E-10 7.4769E-11 3.8655E-12 2.5315E-12 - 1.0000E+04 8.9444E-11 4.9035E-11 2.1930E-12 1.7414E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2926E+04 1.2909E+04 6.2313E+03 5.9804E+03 - 1.1220E-01 1.1250E+04 1.1227E+04 5.4691E+03 5.2094E+03 - 1.2589E-01 9.7781E+03 9.6882E+03 4.7266E+03 4.4746E+03 - 1.4125E-01 8.3880E+03 8.2614E+03 4.0542E+03 3.8159E+03 - 1.5849E-01 7.1182E+03 7.0056E+03 3.4791E+03 3.2264E+03 - 1.7783E-01 6.0086E+03 5.8887E+03 2.9387E+03 2.7064E+03 - 1.9953E-01 5.0259E+03 4.8901E+03 2.4513E+03 2.2560E+03 - 2.2387E-01 4.1323E+03 4.0262E+03 2.0422E+03 1.8613E+03 - 2.5119E-01 3.3610E+03 3.2775E+03 1.6878E+03 1.5171E+03 - 2.8184E-01 2.7068E+03 2.6425E+03 1.3796E+03 1.2245E+03 - 3.1623E-01 2.1524E+03 2.1022E+03 1.1155E+03 9.7984E+02 - 3.5481E-01 1.7135E+03 1.6654E+03 8.9507E+02 7.7211E+02 - 3.9811E-01 1.3562E+03 1.3202E+03 7.1169E+02 6.1109E+02 - 4.4668E-01 1.0594E+03 1.0319E+03 5.5860E+02 4.8141E+02 - 5.0119E-01 8.2510E+02 7.9402E+02 4.3240E+02 3.6819E+02 - 5.6234E-01 6.3397E+02 6.0972E+02 3.3650E+02 2.8338E+02 - 6.3096E-01 4.8487E+02 4.6928E+02 2.6204E+02 2.1753E+02 - 7.0795E-01 3.7201E+02 3.5835E+02 2.0126E+02 1.6689E+02 - 7.9433E-01 2.8429E+02 2.7073E+02 1.5237E+02 1.2529E+02 - 8.9125E-01 2.1696E+02 2.0523E+02 1.1428E+02 9.3441E+01 - 1.0000E+00 1.6125E+02 1.5481E+02 8.5283E+01 6.9799E+01 - 1.1220E+00 1.2068E+02 1.1571E+02 6.3113E+01 5.1028E+01 - 1.2589E+00 9.0818E+01 8.6278E+01 4.6881E+01 3.7407E+01 - 1.4125E+00 6.8471E+01 6.4270E+01 3.4771E+01 2.7428E+01 - 1.5849E+00 5.1115E+01 4.7553E+01 2.5344E+01 2.0152E+01 - 1.7783E+00 3.7835E+01 3.5309E+01 1.8620E+01 1.4615E+01 - 1.9953E+00 2.8074E+01 2.5770E+01 1.3604E+01 1.0579E+01 - 2.2387E+00 2.0424E+01 1.8663E+01 9.7024E+00 7.4977E+00 - 2.5119E+00 1.4973E+01 1.3522E+01 6.9165E+00 5.2661E+00 - 2.8184E+00 1.0861E+01 9.7700E+00 4.9013E+00 3.7012E+00 - 3.1623E+00 8.1152E+00 7.1483E+00 3.4840E+00 2.6657E+00 - 3.5481E+00 5.9089E+00 5.1422E+00 2.4602E+00 1.8632E+00 - 3.9811E+00 4.2600E+00 3.7102E+00 1.7310E+00 1.2909E+00 - 4.4668E+00 3.0524E+00 2.6494E+00 1.1911E+00 9.0388E-01 - 5.0119E+00 2.2013E+00 1.8890E+00 8.1544E-01 6.3531E-01 - 5.6234E+00 1.5934E+00 1.3512E+00 5.6143E-01 4.3512E-01 - 6.3096E+00 1.1418E+00 9.6357E-01 3.7764E-01 2.9664E-01 - 7.0795E+00 8.2470E-01 6.8114E-01 2.6202E-01 1.9989E-01 - 7.9433E+00 5.9016E-01 4.8966E-01 1.8049E-01 1.3390E-01 - 8.9125E+00 4.2099E-01 3.5459E-01 1.1953E-01 9.0536E-02 - 1.0000E+01 2.9872E-01 2.4653E-01 8.2246E-02 6.1920E-02 - 1.1220E+01 2.1353E-01 1.7250E-01 5.5613E-02 4.1434E-02 - 1.2589E+01 1.5230E-01 1.2134E-01 3.7589E-02 2.7567E-02 - 1.4125E+01 1.0847E-01 8.6030E-02 2.5183E-02 1.8446E-02 - 1.5849E+01 7.7524E-02 6.1182E-02 1.6777E-02 1.2300E-02 - 1.7783E+01 5.5440E-02 4.3366E-02 1.1233E-02 8.4626E-03 - 1.9953E+01 3.9274E-02 3.0587E-02 7.3968E-03 5.8699E-03 - 2.2387E+01 2.7949E-02 2.1887E-02 4.8453E-03 3.8220E-03 - 2.5119E+01 1.9577E-02 1.5492E-02 3.2303E-03 2.5466E-03 - 2.8184E+01 1.4141E-02 1.0955E-02 2.2005E-03 1.7577E-03 - 3.1623E+01 1.0208E-02 7.7169E-03 1.4663E-03 1.1323E-03 - 3.5481E+01 7.2635E-03 5.4859E-03 9.7046E-04 7.5060E-04 - 3.9811E+01 5.1658E-03 3.8907E-03 6.4826E-04 5.0496E-04 - 4.4668E+01 3.6761E-03 2.7462E-03 4.2796E-04 3.3938E-04 - 5.0119E+01 2.6023E-03 1.9338E-03 2.8130E-04 2.2479E-04 - 5.6234E+01 1.8405E-03 1.3611E-03 1.8920E-04 1.5078E-04 - 6.3096E+01 1.2983E-03 9.5970E-04 1.2645E-04 1.0044E-04 - 7.0795E+01 9.2196E-04 6.7380E-04 8.4072E-05 6.7700E-05 - 7.9433E+01 6.5663E-04 4.7344E-04 5.6672E-05 4.4177E-05 - 8.9125E+01 4.6284E-04 3.3400E-04 3.7441E-05 2.9027E-05 - 1.0000E+02 3.2436E-04 2.3248E-04 2.5004E-05 2.0233E-05 - 1.1220E+02 2.2788E-04 1.6231E-04 1.6806E-05 1.3428E-05 - 1.2589E+02 1.6045E-04 1.1340E-04 1.1235E-05 9.0783E-06 - 1.4125E+02 1.1265E-04 7.9264E-05 7.6110E-06 6.1811E-06 - 1.5849E+02 7.8815E-05 5.5121E-05 5.1162E-06 4.1654E-06 - 1.7783E+02 5.5404E-05 3.8183E-05 3.4034E-06 2.8045E-06 - 1.9953E+02 3.8862E-05 2.6630E-05 2.2641E-06 1.8948E-06 - 2.2387E+02 2.7046E-05 1.8561E-05 1.5143E-06 1.2777E-06 - 2.5119E+02 1.8998E-05 1.2807E-05 1.0588E-06 8.4076E-07 - 2.8184E+02 1.3270E-05 8.8453E-06 7.3444E-07 5.6678E-07 - 3.1623E+02 9.2940E-06 6.1666E-06 4.7877E-07 3.9678E-07 - 3.5481E+02 6.4767E-06 4.2832E-06 3.2016E-07 2.6168E-07 - 3.9811E+02 4.5147E-06 2.9649E-06 2.1617E-07 1.7660E-07 - 4.4668E+02 3.1538E-06 2.0506E-06 1.4706E-07 1.1946E-07 - 5.0119E+02 2.1853E-06 1.4187E-06 9.9418E-08 7.9046E-08 - 5.6234E+02 1.5192E-06 9.7776E-07 6.7516E-08 5.3452E-08 - 6.3096E+02 1.0525E-06 6.7142E-07 4.5410E-08 3.6271E-08 - 7.0795E+02 7.2974E-07 4.6340E-07 3.0458E-08 2.4760E-08 - 7.9433E+02 5.0371E-07 3.1881E-07 2.0719E-08 1.6688E-08 - 8.9125E+02 3.4743E-07 2.1932E-07 1.3764E-08 1.0858E-08 - 1.0000E+03 2.4012E-07 1.5083E-07 9.2452E-09 7.0668E-09 - 1.1220E+03 1.6440E-07 1.0254E-07 6.4098E-09 4.8580E-09 - 1.2589E+03 1.1344E-07 6.9886E-08 4.3710E-09 3.2880E-09 - 1.4125E+03 7.8010E-08 4.7393E-08 2.8466E-09 2.1571E-09 - 1.5849E+03 5.3455E-08 3.2338E-08 1.8775E-09 1.4572E-09 - 1.7783E+03 3.5917E-08 2.1848E-08 1.2558E-09 9.7909E-10 - 1.9953E+03 2.4584E-08 1.4557E-08 8.3306E-10 6.0527E-10 - 2.2387E+03 1.6770E-08 9.7720E-09 5.5951E-10 4.1937E-10 - 2.5119E+03 1.1237E-08 6.6319E-09 4.0094E-10 2.8470E-10 - 2.8184E+03 7.5634E-09 4.5601E-09 2.6551E-10 1.8584E-10 - 3.1623E+03 5.2671E-09 3.0720E-09 1.6390E-10 1.2401E-10 - 3.5481E+03 3.4476E-09 1.9926E-09 1.0383E-10 8.2270E-11 - 3.9811E+03 2.3122E-09 1.3240E-09 6.8364E-11 5.3238E-11 - 4.4668E+03 1.5526E-09 8.8263E-10 4.5570E-11 3.4009E-11 - 5.0119E+03 1.0280E-09 5.8490E-10 3.1656E-11 2.2684E-11 - 5.6234E+03 6.7468E-10 3.9182E-10 2.2064E-11 1.5104E-11 - 6.3096E+03 4.6206E-10 2.5656E-10 1.3467E-11 9.5499E-12 - 7.0795E+03 3.0923E-10 1.6917E-10 8.8758E-12 5.9948E-12 - 7.9433E+03 2.0233E-10 1.1234E-10 5.9995E-12 3.7545E-12 - 8.9125E+03 1.3328E-10 7.3247E-11 3.9479E-12 2.3925E-12 - 1.0000E+04 8.9474E-11 4.8403E-11 2.5447E-12 1.6278E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2991E+04 1.3115E+04 6.3869E+03 5.9645E+03 - 1.1220E-01 1.1253E+04 1.1393E+04 5.5967E+03 5.2173E+03 - 1.2589E-01 9.7777E+03 9.8536E+03 4.8421E+03 4.5109E+03 - 1.4125E-01 8.4398E+03 8.4269E+03 4.1617E+03 3.8289E+03 - 1.5849E-01 7.1952E+03 7.1453E+03 3.5606E+03 3.2092E+03 - 1.7783E-01 6.0681E+03 6.0226E+03 3.0177E+03 2.6945E+03 - 1.9953E-01 5.0467E+03 5.0066E+03 2.5312E+03 2.2526E+03 - 2.2387E-01 4.1569E+03 4.1094E+03 2.1050E+03 1.8500E+03 - 2.5119E-01 3.3766E+03 3.3330E+03 1.7352E+03 1.5024E+03 - 2.8184E-01 2.6999E+03 2.6801E+03 1.4199E+03 1.2203E+03 - 3.1623E-01 2.1574E+03 2.1394E+03 1.1390E+03 9.7812E+02 - 3.5481E-01 1.7194E+03 1.6914E+03 9.1091E+02 7.7279E+02 - 3.9811E-01 1.3603E+03 1.3362E+03 7.2895E+02 6.0571E+02 - 4.4668E-01 1.0639E+03 1.0428E+03 5.7784E+02 4.7013E+02 - 5.0119E-01 8.2466E+02 8.0799E+02 4.5230E+02 3.6336E+02 - 5.6234E-01 6.3693E+02 6.2117E+02 3.4599E+02 2.7696E+02 - 6.3096E-01 4.8985E+02 4.7533E+02 2.6562E+02 2.1234E+02 - 7.0795E-01 3.7204E+02 3.6297E+02 2.0569E+02 1.6438E+02 - 7.9433E-01 2.8025E+02 2.7648E+02 1.5646E+02 1.2440E+02 - 8.9125E-01 2.1291E+02 2.0727E+02 1.1555E+02 9.2720E+01 - 1.0000E+00 1.6194E+02 1.5544E+02 8.5749E+01 6.8921E+01 - 1.1220E+00 1.2194E+02 1.1676E+02 6.4172E+01 5.1072E+01 - 1.2589E+00 9.1469E+01 8.7045E+01 4.7123E+01 3.7920E+01 - 1.4125E+00 6.8443E+01 6.4338E+01 3.4875E+01 2.7781E+01 - 1.5849E+00 5.0959E+01 4.7544E+01 2.5621E+01 2.0181E+01 - 1.7783E+00 3.7894E+01 3.5094E+01 1.8587E+01 1.4554E+01 - 1.9953E+00 2.7865E+01 2.5712E+01 1.3609E+01 1.0475E+01 - 2.2387E+00 2.0601E+01 1.8799E+01 9.7935E+00 7.6149E+00 - 2.5119E+00 1.5127E+01 1.3760E+01 6.8584E+00 5.4588E+00 - 2.8184E+00 1.0950E+01 9.9507E+00 4.9651E+00 3.8135E+00 - 3.1623E+00 8.0557E+00 7.1863E+00 3.4847E+00 2.6793E+00 - 3.5481E+00 5.8779E+00 5.1836E+00 2.4396E+00 1.8782E+00 - 3.9811E+00 4.2389E+00 3.7242E+00 1.7124E+00 1.3051E+00 - 4.4668E+00 3.0588E+00 2.6637E+00 1.1941E+00 9.0288E-01 - 5.0119E+00 2.2097E+00 1.8965E+00 8.2453E-01 6.1587E-01 - 5.6234E+00 1.5937E+00 1.3436E+00 5.6381E-01 4.2218E-01 - 6.3096E+00 1.1489E+00 9.6175E-01 3.9068E-01 2.9613E-01 - 7.0795E+00 8.2329E-01 6.8272E-01 2.6922E-01 2.0098E-01 - 7.9433E+00 5.9179E-01 4.8704E-01 1.8320E-01 1.3457E-01 - 8.9125E+00 4.2566E-01 3.4770E-01 1.2267E-01 9.2564E-02 - 1.0000E+01 3.0107E-01 2.4326E-01 8.3012E-02 6.2240E-02 - 1.1220E+01 2.1474E-01 1.7118E-01 5.5798E-02 4.1804E-02 - 1.2589E+01 1.5297E-01 1.2064E-01 3.7519E-02 2.8033E-02 - 1.4125E+01 1.0886E-01 8.5633E-02 2.5041E-02 1.9092E-02 - 1.5849E+01 7.7825E-02 6.0983E-02 1.6558E-02 1.2556E-02 - 1.7783E+01 5.5508E-02 4.3436E-02 1.1148E-02 8.3747E-03 - 1.9953E+01 3.9679E-02 3.0904E-02 7.4417E-03 5.4807E-03 - 2.2387E+01 2.8199E-02 2.2105E-02 4.9994E-03 3.6838E-03 - 2.5119E+01 2.0187E-02 1.5746E-02 3.3566E-03 2.5956E-03 - 2.8184E+01 1.4479E-02 1.0885E-02 2.1221E-03 1.7318E-03 - 3.1623E+01 1.0194E-02 7.7222E-03 1.4581E-03 1.1289E-03 - 3.5481E+01 7.2774E-03 5.4695E-03 9.6667E-04 7.5619E-04 - 3.9811E+01 5.1687E-03 3.8754E-03 6.4354E-04 5.0458E-04 - 4.4668E+01 3.6523E-03 2.7311E-03 4.2942E-04 3.3635E-04 - 5.0119E+01 2.5946E-03 1.9166E-03 2.8351E-04 2.2529E-04 - 5.6234E+01 1.8448E-03 1.3479E-03 1.8938E-04 1.4919E-04 - 6.3096E+01 1.3032E-03 9.5048E-04 1.2660E-04 9.9495E-05 - 7.0795E+01 9.2462E-04 6.7126E-04 8.3956E-05 6.7237E-05 - 7.9433E+01 6.5139E-04 4.7352E-04 5.5608E-05 4.4557E-05 - 8.9125E+01 4.5749E-04 3.3090E-04 3.7481E-05 2.9227E-05 - 1.0000E+02 3.2315E-04 2.3122E-04 2.4992E-05 2.0234E-05 - 1.1220E+02 2.2734E-04 1.6177E-04 1.6581E-05 1.3634E-05 - 1.2589E+02 1.6004E-04 1.1272E-04 1.0974E-05 9.0539E-06 - 1.4125E+02 1.1271E-04 7.8436E-05 7.4729E-06 6.0487E-06 - 1.5849E+02 7.9127E-05 5.4510E-05 4.9866E-06 4.1024E-06 - 1.7783E+02 5.5595E-05 3.8003E-05 3.3337E-06 2.8093E-06 - 1.9953E+02 3.8985E-05 2.6493E-05 2.2908E-06 1.9010E-06 - 2.2387E+02 2.7250E-05 1.8507E-05 1.5543E-06 1.2594E-06 - 2.5119E+02 1.9014E-05 1.2884E-05 1.0271E-06 8.4277E-07 - 2.8184E+02 1.3309E-05 8.9193E-06 6.8068E-07 5.7264E-07 - 3.1623E+02 9.2690E-06 6.1828E-06 4.7482E-07 3.8789E-07 - 3.5481E+02 6.4524E-06 4.2792E-06 3.2444E-07 2.6285E-07 - 3.9811E+02 4.5079E-06 2.9478E-06 2.2233E-07 1.8002E-07 - 4.4668E+02 3.1359E-06 2.0466E-06 1.5115E-07 1.2079E-07 - 5.0119E+02 2.1813E-06 1.4111E-06 1.0154E-07 7.9743E-08 - 5.6234E+02 1.5254E-06 9.7523E-07 6.8265E-08 5.3147E-08 - 6.3096E+02 1.0568E-06 6.7307E-07 4.5674E-08 3.5359E-08 - 7.0795E+02 7.3215E-07 4.6215E-07 3.0730E-08 2.4208E-08 - 7.9433E+02 5.0617E-07 3.1856E-07 2.1225E-08 1.6229E-08 - 8.9125E+02 3.5049E-07 2.1984E-07 1.4277E-08 1.0801E-08 - 1.0000E+03 2.4219E-07 1.5038E-07 9.2144E-09 7.2405E-09 - 1.1220E+03 1.6529E-07 1.0256E-07 6.1788E-09 5.0013E-09 - 1.2589E+03 1.1261E-07 6.9117E-08 4.3163E-09 3.3074E-09 - 1.4125E+03 7.6821E-08 4.6705E-08 2.9593E-09 2.1174E-09 - 1.5849E+03 5.3008E-08 3.2128E-08 1.9135E-09 1.4324E-09 - 1.7783E+03 3.6002E-08 2.1774E-08 1.2812E-09 9.6486E-10 - 1.9953E+03 2.4560E-08 1.4605E-08 8.6096E-10 6.5158E-10 - 2.2387E+03 1.6711E-08 9.8403E-09 5.2976E-10 4.3791E-10 - 2.5119E+03 1.1266E-08 6.7185E-09 3.5194E-10 2.7994E-10 - 2.8184E+03 7.5531E-09 4.4514E-09 2.4641E-10 1.8676E-10 - 3.1623E+03 5.2717E-09 3.0568E-09 1.7131E-10 1.2030E-10 - 3.5481E+03 3.4550E-09 2.0083E-09 1.0988E-10 7.8849E-11 - 3.9811E+03 2.3025E-09 1.3509E-09 6.9927E-11 5.4645E-11 - 4.4668E+03 1.5425E-09 8.9972E-10 4.7107E-11 3.5980E-11 - 5.0119E+03 1.0360E-09 5.9291E-10 3.0944E-11 2.2384E-11 - 5.6234E+03 6.9408E-10 3.9771E-10 1.9818E-11 1.5420E-11 - 6.3096E+03 4.5885E-10 2.6055E-10 1.3298E-11 9.5072E-12 - 7.0795E+03 3.0457E-10 1.7339E-10 9.0352E-12 6.2924E-12 - 7.9433E+03 2.0223E-10 1.1272E-10 6.1114E-12 4.2642E-12 - 8.9125E+03 1.3444E-10 7.3010E-11 3.9481E-12 2.6683E-12 - 1.0000E+04 8.9918E-11 4.7620E-11 2.6249E-12 1.8209E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3056E+04 1.3275E+04 6.4911E+03 5.9382E+03 - 1.1220E-01 1.1344E+04 1.1577E+04 5.7324E+03 5.1551E+03 - 1.2589E-01 9.8204E+03 1.0050E+04 4.9803E+03 4.4328E+03 - 1.4125E-01 8.4513E+03 8.6207E+03 4.2792E+03 3.7803E+03 - 1.5849E-01 7.2059E+03 7.3201E+03 3.6611E+03 3.1888E+03 - 1.7783E-01 6.0626E+03 6.1224E+03 3.1087E+03 2.6749E+03 - 1.9953E-01 5.0470E+03 5.0688E+03 2.6020E+03 2.2315E+03 - 2.2387E-01 4.1366E+03 4.1630E+03 2.1581E+03 1.8357E+03 - 2.5119E-01 3.3577E+03 3.3917E+03 1.7846E+03 1.4963E+03 - 2.8184E-01 2.7116E+03 2.7325E+03 1.4563E+03 1.2078E+03 - 3.1623E-01 2.1609E+03 2.1713E+03 1.1751E+03 9.7056E+02 - 3.5481E-01 1.7203E+03 1.7197E+03 9.3870E+02 7.6933E+02 - 3.9811E-01 1.3572E+03 1.3580E+03 7.4109E+02 6.0196E+02 - 4.4668E-01 1.0550E+03 1.0610E+03 5.7919E+02 4.7038E+02 - 5.0119E-01 8.2071E+02 8.1650E+02 4.5043E+02 3.6743E+02 - 5.6234E-01 6.3471E+02 6.2777E+02 3.5116E+02 2.8274E+02 - 6.3096E-01 4.8481E+02 4.8292E+02 2.7200E+02 2.1476E+02 - 7.0795E-01 3.7000E+02 3.6676E+02 2.0567E+02 1.6106E+02 - 7.9433E-01 2.8217E+02 2.7697E+02 1.5361E+02 1.2276E+02 - 8.9125E-01 2.1209E+02 2.0867E+02 1.1558E+02 9.1200E+01 - 1.0000E+00 1.6123E+02 1.5653E+02 8.7459E+01 6.8583E+01 - 1.1220E+00 1.2052E+02 1.1746E+02 6.5269E+01 5.0705E+01 - 1.2589E+00 9.1212E+01 8.7719E+01 4.8016E+01 3.7122E+01 - 1.4125E+00 6.8811E+01 6.5001E+01 3.5089E+01 2.7512E+01 - 1.5849E+00 5.1032E+01 4.8057E+01 2.5651E+01 2.0229E+01 - 1.7783E+00 3.7841E+01 3.5245E+01 1.8607E+01 1.4593E+01 - 1.9953E+00 2.8009E+01 2.6052E+01 1.3542E+01 1.0492E+01 - 2.2387E+00 2.0739E+01 1.9080E+01 9.8476E+00 7.4981E+00 - 2.5119E+00 1.5279E+01 1.3787E+01 7.0388E+00 5.3809E+00 - 2.8184E+00 1.1170E+01 1.0090E+01 4.9982E+00 3.9047E+00 - 3.1623E+00 8.0815E+00 7.1505E+00 3.5138E+00 2.6551E+00 - 3.5481E+00 5.8685E+00 5.1516E+00 2.4525E+00 1.8557E+00 - 3.9811E+00 4.2175E+00 3.7019E+00 1.7034E+00 1.2819E+00 - 4.4668E+00 3.0440E+00 2.6422E+00 1.1814E+00 8.9605E-01 - 5.0119E+00 2.1963E+00 1.8740E+00 8.2538E-01 6.2801E-01 - 5.6234E+00 1.5841E+00 1.3359E+00 5.6362E-01 4.2959E-01 - 6.3096E+00 1.1407E+00 9.6414E-01 3.8365E-01 2.8984E-01 - 7.0795E+00 8.1319E-01 6.8525E-01 2.6441E-01 1.9658E-01 - 7.9433E+00 5.7629E-01 4.7976E-01 1.7717E-01 1.3415E-01 - 8.9125E+00 4.1868E-01 3.4060E-01 1.1884E-01 9.3735E-02 - 1.0000E+01 3.0131E-01 2.4506E-01 8.2200E-02 6.2543E-02 - 1.1220E+01 2.1501E-01 1.7508E-01 5.5534E-02 4.1835E-02 - 1.2589E+01 1.5462E-01 1.2397E-01 3.7082E-02 2.7946E-02 - 1.4125E+01 1.1099E-01 8.8065E-02 2.4730E-02 1.8936E-02 - 1.5849E+01 7.8618E-02 6.2390E-02 1.6518E-02 1.2929E-02 - 1.7783E+01 5.5745E-02 4.3523E-02 1.1293E-02 8.5848E-03 - 1.9953E+01 3.9877E-02 3.0935E-02 7.9048E-03 5.6810E-03 - 2.2387E+01 2.8510E-02 2.1958E-02 5.1480E-03 3.6734E-03 - 2.5119E+01 2.0558E-02 1.5608E-02 3.1926E-03 2.5257E-03 - 2.8184E+01 1.4615E-02 1.0843E-02 2.0982E-03 1.7796E-03 - 3.1623E+01 1.0192E-02 7.7261E-03 1.4515E-03 1.1358E-03 - 3.5481E+01 7.2391E-03 5.4600E-03 9.6729E-04 7.5531E-04 - 3.9811E+01 5.1488E-03 3.8646E-03 6.4508E-04 5.0683E-04 - 4.4668E+01 3.6690E-03 2.7347E-03 4.2846E-04 3.3708E-04 - 5.0119E+01 2.5977E-03 1.9317E-03 2.8583E-04 2.2427E-04 - 5.6234E+01 1.8360E-03 1.3514E-03 1.8798E-04 1.4938E-04 - 6.3096E+01 1.3014E-03 9.4932E-04 1.2473E-04 9.8374E-05 - 7.0795E+01 9.2017E-04 6.6929E-04 8.3528E-05 6.6894E-05 - 7.9433E+01 6.4974E-04 4.6827E-04 5.5816E-05 4.4987E-05 - 8.9125E+01 4.5992E-04 3.2923E-04 3.7745E-05 3.0070E-05 - 1.0000E+02 3.2360E-04 2.3234E-04 2.5016E-05 2.0353E-05 - 1.1220E+02 2.2796E-04 1.6163E-04 1.6679E-05 1.3602E-05 - 1.2589E+02 1.6024E-04 1.1285E-04 1.1206E-05 9.1423E-06 - 1.4125E+02 1.1252E-04 7.9015E-05 7.4530E-06 6.1241E-06 - 1.5849E+02 7.9149E-05 5.4993E-05 4.9587E-06 4.1286E-06 - 1.7783E+02 5.5468E-05 3.8265E-05 3.4492E-06 2.7982E-06 - 1.9953E+02 3.8806E-05 2.6618E-05 2.3537E-06 1.8400E-06 - 2.2387E+02 2.7092E-05 1.8567E-05 1.5984E-06 1.2416E-06 - 2.5119E+02 1.8926E-05 1.2867E-05 1.0889E-06 8.3685E-07 - 2.8184E+02 1.3357E-05 8.8893E-06 7.0945E-07 5.8381E-07 - 3.1623E+02 9.3039E-06 6.2145E-06 4.8456E-07 3.9247E-07 - 3.5481E+02 6.4660E-06 4.2949E-06 3.2811E-07 2.5494E-07 - 3.9811E+02 4.4981E-06 2.9621E-06 2.1925E-07 1.7401E-07 - 4.4668E+02 3.1293E-06 2.0372E-06 1.5133E-07 1.1977E-07 - 5.0119E+02 2.1752E-06 1.4146E-06 1.0096E-07 7.9844E-08 - 5.6234E+02 1.5252E-06 9.8214E-07 6.8281E-08 5.3733E-08 - 6.3096E+02 1.0554E-06 6.7139E-07 4.6276E-08 3.6641E-08 - 7.0795E+02 7.3114E-07 4.6244E-07 3.0523E-08 2.4508E-08 - 7.9433E+02 5.0564E-07 3.1799E-07 2.0250E-08 1.6065E-08 - 8.9125E+02 3.4997E-07 2.1686E-07 1.3572E-08 1.1096E-08 - 1.0000E+03 2.4188E-07 1.4925E-07 9.2183E-09 7.4989E-09 - 1.1220E+03 1.6562E-07 1.0163E-07 6.3646E-09 5.0626E-09 - 1.2589E+03 1.1348E-07 6.9302E-08 4.4180E-09 3.3418E-09 - 1.4125E+03 7.7729E-08 4.7741E-08 2.8660E-09 2.2167E-09 - 1.5849E+03 5.3466E-08 3.2200E-08 1.8806E-09 1.4732E-09 - 1.7783E+03 3.6390E-08 2.1600E-08 1.2427E-09 9.5446E-10 - 1.9953E+03 2.4547E-08 1.4726E-08 8.5592E-10 6.3127E-10 - 2.2387E+03 1.6703E-08 9.9947E-09 5.7612E-10 4.2071E-10 - 2.5119E+03 1.1312E-08 6.7042E-09 3.9769E-10 2.9032E-10 - 2.8184E+03 7.6566E-09 4.4675E-09 2.5167E-10 1.9010E-10 - 3.1623E+03 5.2626E-09 3.0615E-09 1.6567E-10 1.2144E-10 - 3.5481E+03 3.4569E-09 1.9984E-09 1.0958E-10 8.0733E-11 - 3.9811E+03 2.3211E-09 1.3484E-09 7.2437E-11 5.3704E-11 - 4.4668E+03 1.5647E-09 8.9987E-10 4.9407E-11 3.3893E-11 - 5.0119E+03 1.0420E-09 6.0218E-10 3.2582E-11 2.3017E-11 - 5.6234E+03 6.8984E-10 3.9698E-10 2.1792E-11 1.6532E-11 - 6.3096E+03 4.5943E-10 2.6019E-10 1.3627E-11 1.0304E-11 - 7.0795E+03 3.0572E-10 1.7159E-10 9.0142E-12 6.4720E-12 - 7.9433E+03 2.0343E-10 1.1138E-10 5.9917E-12 4.1999E-12 - 8.9125E+03 1.3413E-10 7.4038E-11 3.9548E-12 2.9845E-12 - 1.0000E+04 8.7873E-11 4.9675E-11 2.4549E-12 1.9974E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3035E+04 1.3456E+04 6.6489E+03 5.8661E+03 - 1.1220E-01 1.1376E+04 1.1738E+04 5.8261E+03 5.1064E+03 - 1.2589E-01 9.8518E+03 1.0142E+04 5.0591E+03 4.4153E+03 - 1.4125E-01 8.4499E+03 8.6901E+03 4.3581E+03 3.7649E+03 - 1.5849E-01 7.2041E+03 7.3888E+03 3.7241E+03 3.1735E+03 - 1.7783E-01 6.0790E+03 6.2302E+03 3.1571E+03 2.6610E+03 - 1.9953E-01 5.0561E+03 5.1782E+03 2.6468E+03 2.2136E+03 - 2.2387E-01 4.1472E+03 4.2505E+03 2.2090E+03 1.8098E+03 - 2.5119E-01 3.3738E+03 3.4519E+03 1.8227E+03 1.4777E+03 - 2.8184E-01 2.7205E+03 2.7675E+03 1.4903E+03 1.1984E+03 - 3.1623E-01 2.1706E+03 2.2132E+03 1.2050E+03 9.6225E+02 - 3.5481E-01 1.7254E+03 1.7577E+03 9.5728E+02 7.6258E+02 - 3.9811E-01 1.3579E+03 1.3744E+03 7.6019E+02 6.0228E+02 - 4.4668E-01 1.0601E+03 1.0718E+03 5.9732E+02 4.7391E+02 - 5.0119E-01 8.2591E+02 8.3035E+02 4.6268E+02 3.6240E+02 - 5.6234E-01 6.3652E+02 6.3732E+02 3.5431E+02 2.7907E+02 - 6.3096E-01 4.8436E+02 4.8676E+02 2.6971E+02 2.1454E+02 - 7.0795E-01 3.7002E+02 3.6788E+02 2.0612E+02 1.6291E+02 - 7.9433E-01 2.8461E+02 2.7693E+02 1.5545E+02 1.2275E+02 - 8.9125E-01 2.1649E+02 2.0886E+02 1.1734E+02 9.1448E+01 - 1.0000E+00 1.6182E+02 1.5766E+02 8.8202E+01 6.9135E+01 - 1.1220E+00 1.2200E+02 1.1829E+02 6.5313E+01 5.1020E+01 - 1.2589E+00 9.1347E+01 8.8193E+01 4.8426E+01 3.7444E+01 - 1.4125E+00 6.8631E+01 6.5235E+01 3.5395E+01 2.7523E+01 - 1.5849E+00 5.1152E+01 4.8231E+01 2.5963E+01 2.0131E+01 - 1.7783E+00 3.7938E+01 3.5566E+01 1.8961E+01 1.4536E+01 - 1.9953E+00 2.7731E+01 2.6089E+01 1.3717E+01 1.0499E+01 - 2.2387E+00 2.0377E+01 1.9036E+01 9.7800E+00 7.5775E+00 - 2.5119E+00 1.5129E+01 1.3782E+01 7.0211E+00 5.3172E+00 - 2.8184E+00 1.1203E+01 9.9224E+00 5.0361E+00 3.7725E+00 - 3.1623E+00 8.1095E+00 7.1789E+00 3.5366E+00 2.7037E+00 - 3.5481E+00 5.8598E+00 5.1752E+00 2.4801E+00 1.8866E+00 - 3.9811E+00 4.2534E+00 3.7105E+00 1.7078E+00 1.3132E+00 - 4.4668E+00 3.0742E+00 2.6327E+00 1.1795E+00 9.1773E-01 - 5.0119E+00 2.2250E+00 1.8911E+00 8.2475E-01 6.3311E-01 - 5.6234E+00 1.6087E+00 1.3630E+00 5.7055E-01 4.3843E-01 - 6.3096E+00 1.1459E+00 9.6001E-01 3.9309E-01 2.9631E-01 - 7.0795E+00 8.1502E-01 6.7527E-01 2.6780E-01 1.9981E-01 - 7.9433E+00 5.8831E-01 4.8479E-01 1.7949E-01 1.3726E-01 - 8.9125E+00 4.2725E-01 3.5281E-01 1.2040E-01 9.1068E-02 - 1.0000E+01 3.0177E-01 2.4543E-01 8.3225E-02 6.2545E-02 - 1.1220E+01 2.1486E-01 1.7321E-01 5.5411E-02 4.2430E-02 - 1.2589E+01 1.5306E-01 1.2206E-01 3.7480E-02 2.8116E-02 - 1.4125E+01 1.0882E-01 8.6495E-02 2.5187E-02 1.8902E-02 - 1.5849E+01 7.8271E-02 6.0911E-02 1.6597E-02 1.2875E-02 - 1.7783E+01 5.6744E-02 4.3038E-02 1.1144E-02 8.4069E-03 - 1.9953E+01 4.0260E-02 3.0747E-02 7.2646E-03 5.4971E-03 - 2.2387E+01 2.8431E-02 2.2075E-02 4.9361E-03 3.6780E-03 - 2.5119E+01 2.0185E-02 1.5687E-02 3.3231E-03 2.4470E-03 - 2.8184E+01 1.4392E-02 1.0834E-02 2.1867E-03 1.6594E-03 - 3.1623E+01 1.0207E-02 7.7765E-03 1.4615E-03 1.1298E-03 - 3.5481E+01 7.2611E-03 5.4822E-03 9.7430E-04 7.5326E-04 - 3.9811E+01 5.1701E-03 3.8799E-03 6.4773E-04 5.0464E-04 - 4.4668E+01 3.6740E-03 2.7389E-03 4.2866E-04 3.4121E-04 - 5.0119E+01 2.6082E-03 1.9334E-03 2.8506E-04 2.2882E-04 - 5.6234E+01 1.8463E-03 1.3667E-03 1.8818E-04 1.5055E-04 - 6.3096E+01 1.3068E-03 9.6260E-04 1.2497E-04 9.9519E-05 - 7.0795E+01 9.2660E-04 6.7327E-04 8.4053E-05 6.7329E-05 - 7.9433E+01 6.5481E-04 4.7304E-04 5.6224E-05 4.4443E-05 - 8.9125E+01 4.5956E-04 3.3276E-04 3.7460E-05 2.9592E-05 - 1.0000E+02 3.2369E-04 2.3140E-04 2.5123E-05 2.0120E-05 - 1.1220E+02 2.2754E-04 1.6134E-04 1.6819E-05 1.3552E-05 - 1.2589E+02 1.5953E-04 1.1303E-04 1.1167E-05 9.1818E-06 - 1.4125E+02 1.1236E-04 7.8854E-05 7.4728E-06 6.1700E-06 - 1.5849E+02 7.8991E-05 5.4861E-05 4.9993E-06 4.1306E-06 - 1.7783E+02 5.5500E-05 3.8078E-05 3.3769E-06 2.7782E-06 - 1.9953E+02 3.8920E-05 2.6449E-05 2.2609E-06 1.8687E-06 - 2.2387E+02 2.7149E-05 1.8455E-05 1.5015E-06 1.2683E-06 - 2.5119E+02 1.8916E-05 1.2780E-05 1.0196E-06 8.5105E-07 - 2.8184E+02 1.3276E-05 8.8646E-06 7.2191E-07 5.5311E-07 - 3.1623E+02 9.2770E-06 6.2087E-06 4.8297E-07 3.8578E-07 - 3.5481E+02 6.4576E-06 4.2910E-06 3.2233E-07 2.6118E-07 - 3.9811E+02 4.5087E-06 2.9797E-06 2.1700E-07 1.7792E-07 - 4.4668E+02 3.1442E-06 2.0490E-06 1.4873E-07 1.1970E-07 - 5.0119E+02 2.1895E-06 1.4092E-06 1.0378E-07 7.9992E-08 - 5.6234E+02 1.5285E-06 9.7543E-07 6.7758E-08 5.3894E-08 - 6.3096E+02 1.0605E-06 6.7144E-07 4.5169E-08 3.6361E-08 - 7.0795E+02 7.3108E-07 4.6322E-07 3.0867E-08 2.4620E-08 - 7.9433E+02 5.0497E-07 3.1884E-07 2.0694E-08 1.7009E-08 - 8.9125E+02 3.5035E-07 2.1726E-07 1.3775E-08 1.1175E-08 - 1.0000E+03 2.4306E-07 1.4933E-07 9.4968E-09 7.4091E-09 - 1.1220E+03 1.6668E-07 1.0119E-07 6.3495E-09 4.9241E-09 - 1.2589E+03 1.1399E-07 6.9830E-08 4.2719E-09 3.1961E-09 - 1.4125E+03 7.7758E-08 4.7797E-08 2.8481E-09 2.0633E-09 - 1.5849E+03 5.3308E-08 3.1969E-08 1.8373E-09 1.4341E-09 - 1.7783E+03 3.6394E-08 2.1728E-08 1.2812E-09 9.7396E-10 - 1.9953E+03 2.4757E-08 1.4770E-08 8.6286E-10 6.5141E-10 - 2.2387E+03 1.6854E-08 1.0045E-08 5.6742E-10 4.3052E-10 - 2.5119E+03 1.1416E-08 6.7529E-09 4.0029E-10 2.9387E-10 - 2.8184E+03 7.7116E-09 4.4768E-09 2.6551E-10 1.9452E-10 - 3.1623E+03 5.2581E-09 3.0643E-09 1.6883E-10 1.2099E-10 - 3.5481E+03 3.4384E-09 2.0095E-09 1.0928E-10 8.2263E-11 - 3.9811E+03 2.3092E-09 1.3457E-09 7.3098E-11 5.5884E-11 - 4.4668E+03 1.5528E-09 8.9329E-10 4.7013E-11 3.5901E-11 - 5.0119E+03 1.0406E-09 5.9172E-10 3.0346E-11 2.2886E-11 - 5.6234E+03 6.9006E-10 3.9135E-10 2.0011E-11 1.4394E-11 - 6.3096E+03 4.5945E-10 2.5855E-10 1.3588E-11 9.7834E-12 - 7.0795E+03 3.0554E-10 1.7197E-10 8.7124E-12 6.3073E-12 - 7.9433E+03 2.0087E-10 1.1455E-10 5.8250E-12 4.1051E-12 - 8.9125E+03 1.3453E-10 7.4892E-11 3.9578E-12 2.6608E-12 - 1.0000E+04 9.0039E-11 4.9226E-11 2.3235E-12 1.7416E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3009E+04 1.3513E+04 6.7164E+03 5.8378E+03 - 1.1220E-01 1.1321E+04 1.1710E+04 5.9053E+03 5.0712E+03 - 1.2589E-01 9.8275E+03 1.0151E+04 5.1169E+03 4.3847E+03 - 1.4125E-01 8.4721E+03 8.7513E+03 4.4017E+03 3.7579E+03 - 1.5849E-01 7.2215E+03 7.4326E+03 3.7698E+03 3.1698E+03 - 1.7783E-01 6.0621E+03 6.2411E+03 3.2026E+03 2.6473E+03 - 1.9953E-01 5.0284E+03 5.1993E+03 2.6939E+03 2.1908E+03 - 2.2387E-01 4.1434E+03 4.2742E+03 2.2261E+03 1.8008E+03 - 2.5119E-01 3.3764E+03 3.4755E+03 1.8262E+03 1.4769E+03 - 2.8184E-01 2.7179E+03 2.7924E+03 1.4928E+03 1.1932E+03 - 3.1623E-01 2.1777E+03 2.2273E+03 1.2076E+03 9.5003E+02 - 3.5481E-01 1.7189E+03 1.7744E+03 9.6648E+02 7.5629E+02 - 3.9811E-01 1.3521E+03 1.3913E+03 7.6545E+02 5.9869E+02 - 4.4668E-01 1.0650E+03 1.0795E+03 6.0021E+02 4.6718E+02 - 5.0119E-01 8.2810E+02 8.3650E+02 4.6693E+02 3.6058E+02 - 5.6234E-01 6.3783E+02 6.4553E+02 3.6147E+02 2.7777E+02 - 6.3096E-01 4.8813E+02 4.9120E+02 2.7556E+02 2.1529E+02 - 7.0795E-01 3.7184E+02 3.7309E+02 2.0845E+02 1.6268E+02 - 7.9433E-01 2.8319E+02 2.8114E+02 1.5745E+02 1.2145E+02 - 8.9125E-01 2.1508E+02 2.1066E+02 1.1727E+02 9.1532E+01 - 1.0000E+00 1.6204E+02 1.5864E+02 8.8387E+01 6.8589E+01 - 1.1220E+00 1.2161E+02 1.1824E+02 6.5635E+01 5.0749E+01 - 1.2589E+00 9.1437E+01 8.8195E+01 4.8389E+01 3.7444E+01 - 1.4125E+00 6.8605E+01 6.5289E+01 3.5534E+01 2.7462E+01 - 1.5849E+00 5.1145E+01 4.7937E+01 2.6082E+01 2.0053E+01 - 1.7783E+00 3.8160E+01 3.5254E+01 1.8916E+01 1.4759E+01 - 1.9953E+00 2.8183E+01 2.5881E+01 1.3694E+01 1.0522E+01 - 2.2387E+00 2.0657E+01 1.8907E+01 9.9794E+00 7.5810E+00 - 2.5119E+00 1.5188E+01 1.3756E+01 7.0407E+00 5.3922E+00 - 2.8184E+00 1.1080E+01 9.9111E+00 4.9791E+00 3.7677E+00 - 3.1623E+00 8.0961E+00 7.1956E+00 3.5097E+00 2.6953E+00 - 3.5481E+00 5.8692E+00 5.1928E+00 2.4642E+00 1.8740E+00 - 3.9811E+00 4.2339E+00 3.7124E+00 1.7090E+00 1.3053E+00 - 4.4668E+00 3.0722E+00 2.6420E+00 1.1860E+00 9.1826E-01 - 5.0119E+00 2.2279E+00 1.8872E+00 8.2368E-01 6.3529E-01 - 5.6234E+00 1.5950E+00 1.3460E+00 5.6049E-01 4.3522E-01 - 6.3096E+00 1.1462E+00 9.6562E-01 3.8762E-01 2.9572E-01 - 7.0795E+00 8.2668E-01 6.9167E-01 2.6608E-01 2.0111E-01 - 7.9433E+00 5.9110E-01 4.8883E-01 1.7836E-01 1.3352E-01 - 8.9125E+00 4.2273E-01 3.4444E-01 1.1810E-01 9.1632E-02 - 1.0000E+01 3.0107E-01 2.4359E-01 8.1294E-02 6.3245E-02 - 1.1220E+01 2.1432E-01 1.7261E-01 5.5610E-02 4.2630E-02 - 1.2589E+01 1.5290E-01 1.2207E-01 3.7199E-02 2.8574E-02 - 1.4125E+01 1.0920E-01 8.6081E-02 2.4836E-02 1.8711E-02 - 1.5849E+01 7.7757E-02 6.1394E-02 1.6956E-02 1.2399E-02 - 1.7783E+01 5.5370E-02 4.3844E-02 1.1345E-02 8.4475E-03 - 1.9953E+01 3.9967E-02 3.1157E-02 7.5100E-03 5.6590E-03 - 2.2387E+01 2.8848E-02 2.1924E-02 5.0120E-03 3.7537E-03 - 2.5119E+01 2.0509E-02 1.5379E-02 3.3250E-03 2.5150E-03 - 2.8184E+01 1.4495E-02 1.0847E-02 2.1802E-03 1.6839E-03 - 3.1623E+01 1.0217E-02 7.7371E-03 1.4698E-03 1.1283E-03 - 3.5481E+01 7.2547E-03 5.4732E-03 9.7266E-04 7.5814E-04 - 3.9811E+01 5.1419E-03 3.8725E-03 6.4004E-04 5.0746E-04 - 4.4668E+01 3.6565E-03 2.7324E-03 4.2596E-04 3.3700E-04 - 5.0119E+01 2.6005E-03 1.9205E-03 2.8629E-04 2.2417E-04 - 5.6234E+01 1.8462E-03 1.3513E-03 1.9064E-04 1.5014E-04 - 6.3096E+01 1.3048E-03 9.5662E-04 1.2864E-04 1.0009E-04 - 7.0795E+01 9.2067E-04 6.7438E-04 8.5716E-05 6.7272E-05 - 7.9433E+01 6.5147E-04 4.7060E-04 5.5995E-05 4.4605E-05 - 8.9125E+01 4.6284E-04 3.3112E-04 3.8113E-05 2.9846E-05 - 1.0000E+02 3.2391E-04 2.3164E-04 2.5270E-05 2.0193E-05 - 1.1220E+02 2.2813E-04 1.6238E-04 1.6771E-05 1.3411E-05 - 1.2589E+02 1.6094E-04 1.1304E-04 1.1222E-05 9.0125E-06 - 1.4125E+02 1.1320E-04 7.8993E-05 7.5456E-06 6.1014E-06 - 1.5849E+02 7.9154E-05 5.5199E-05 5.0733E-06 4.0996E-06 - 1.7783E+02 5.5398E-05 3.8493E-05 3.4061E-06 2.7208E-06 - 1.9953E+02 3.8875E-05 2.6757E-05 2.2635E-06 1.8618E-06 - 2.2387E+02 2.7285E-05 1.8545E-05 1.5402E-06 1.3127E-06 - 2.5119E+02 1.9124E-05 1.2885E-05 1.0529E-06 8.6759E-07 - 2.8184E+02 1.3357E-05 8.9153E-06 6.9456E-07 5.7654E-07 - 3.1623E+02 9.2854E-06 6.1790E-06 4.8229E-07 3.9348E-07 - 3.5481E+02 6.4871E-06 4.2775E-06 3.2238E-07 2.6137E-07 - 3.9811E+02 4.5027E-06 2.9605E-06 2.1380E-07 1.7268E-07 - 4.4668E+02 3.1253E-06 2.0376E-06 1.4468E-07 1.1683E-07 - 5.0119E+02 2.1753E-06 1.4002E-06 9.8913E-08 7.9942E-08 - 5.6234E+02 1.5170E-06 9.7878E-07 6.8263E-08 5.3671E-08 - 6.3096E+02 1.0498E-06 6.7263E-07 4.5655E-08 3.6068E-08 - 7.0795E+02 7.2961E-07 4.6284E-07 3.0043E-08 2.4081E-08 - 7.9433E+02 5.0574E-07 3.1831E-07 2.0672E-08 1.5859E-08 - 8.9125E+02 3.4870E-07 2.1837E-07 1.4273E-08 1.0498E-08 - 1.0000E+03 2.4083E-07 1.5010E-07 9.6110E-09 7.1595E-09 - 1.1220E+03 1.6572E-07 1.0178E-07 6.2729E-09 4.7531E-09 - 1.2589E+03 1.1341E-07 6.9220E-08 4.1327E-09 3.2157E-09 - 1.4125E+03 7.7262E-08 4.6902E-08 2.8211E-09 2.2059E-09 - 1.5849E+03 5.2940E-08 3.2181E-08 1.8882E-09 1.4751E-09 - 1.7783E+03 3.6346E-08 2.1898E-08 1.2451E-09 9.6212E-10 - 1.9953E+03 2.5054E-08 1.4701E-08 7.9910E-10 6.5826E-10 - 2.2387E+03 1.6905E-08 9.8860E-09 5.4462E-10 4.4825E-10 - 2.5119E+03 1.1312E-08 6.6448E-09 3.7417E-10 2.9216E-10 - 2.8184E+03 7.5179E-09 4.4280E-09 2.4661E-10 1.9531E-10 - 3.1623E+03 5.2421E-09 3.0806E-09 1.6739E-10 1.2433E-10 - 3.5481E+03 3.4456E-09 2.0114E-09 1.1110E-10 7.6867E-11 - 3.9811E+03 2.3265E-09 1.3283E-09 7.2554E-11 5.1391E-11 - 4.4668E+03 1.5500E-09 8.8071E-10 4.7254E-11 3.5197E-11 - 5.0119E+03 1.0438E-09 5.8855E-10 3.2236E-11 2.3874E-11 - 5.6234E+03 6.9792E-10 3.9522E-10 2.1291E-11 1.5281E-11 - 6.3096E+03 4.6059E-10 2.5902E-10 1.3823E-11 9.3736E-12 - 7.0795E+03 3.0806E-10 1.7133E-10 8.9564E-12 6.1965E-12 - 7.9433E+03 2.0281E-10 1.1294E-10 5.7337E-12 4.1392E-12 - 8.9125E+03 1.3275E-10 7.4388E-11 4.0584E-12 2.7038E-12 - 1.0000E+04 8.6714E-11 4.8514E-11 2.7042E-12 1.7669E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3049E+04 1.3462E+04 6.6411E+03 5.9021E+03 - 1.1220E-01 1.1360E+04 1.1726E+04 5.8521E+03 5.1353E+03 - 1.2589E-01 9.8015E+03 1.0150E+04 5.0936E+03 4.3754E+03 - 1.4125E-01 8.4420E+03 8.7274E+03 4.3801E+03 3.7245E+03 - 1.5849E-01 7.1984E+03 7.4197E+03 3.7548E+03 3.1746E+03 - 1.7783E-01 6.0596E+03 6.2266E+03 3.1886E+03 2.6722E+03 - 1.9953E-01 5.0359E+03 5.1772E+03 2.6737E+03 2.2081E+03 - 2.2387E-01 4.1434E+03 4.2477E+03 2.2283E+03 1.8046E+03 - 2.5119E-01 3.3762E+03 3.4640E+03 1.8536E+03 1.4680E+03 - 2.8184E-01 2.7214E+03 2.7944E+03 1.5161E+03 1.1864E+03 - 3.1623E-01 2.1722E+03 2.2177E+03 1.2139E+03 9.5219E+02 - 3.5481E-01 1.7230E+03 1.7605E+03 9.6334E+02 7.6145E+02 - 3.9811E-01 1.3572E+03 1.3872E+03 7.6329E+02 6.0068E+02 - 4.4668E-01 1.0612E+03 1.0832E+03 5.9904E+02 4.6705E+02 - 5.0119E-01 8.2426E+02 8.3818E+02 4.6623E+02 3.6285E+02 - 5.6234E-01 6.3651E+02 6.4469E+02 3.6060E+02 2.7912E+02 - 6.3096E-01 4.8596E+02 4.9112E+02 2.7811E+02 2.1275E+02 - 7.0795E-01 3.7160E+02 3.7243E+02 2.1309E+02 1.6274E+02 - 7.9433E-01 2.8330E+02 2.8182E+02 1.6028E+02 1.2152E+02 - 8.9125E-01 2.1456E+02 2.1162E+02 1.1884E+02 9.0412E+01 - 1.0000E+00 1.6167E+02 1.5852E+02 8.8766E+01 6.8384E+01 - 1.1220E+00 1.2186E+02 1.1810E+02 6.5528E+01 5.0676E+01 - 1.2589E+00 9.1505E+01 8.7394E+01 4.8377E+01 3.7249E+01 - 1.4125E+00 6.8565E+01 6.4849E+01 3.5609E+01 2.7325E+01 - 1.5849E+00 5.1213E+01 4.8077E+01 2.5819E+01 1.9994E+01 - 1.7783E+00 3.7954E+01 3.5349E+01 1.8875E+01 1.4533E+01 - 1.9953E+00 2.7760E+01 2.5661E+01 1.3714E+01 1.0584E+01 - 2.2387E+00 2.0482E+01 1.8811E+01 9.8008E+00 7.6679E+00 - 2.5119E+00 1.5136E+01 1.3708E+01 6.8742E+00 5.3265E+00 - 2.8184E+00 1.1120E+01 9.8550E+00 4.8759E+00 3.7247E+00 - 3.1623E+00 8.1280E+00 7.1515E+00 3.4885E+00 2.6804E+00 - 3.5481E+00 5.8670E+00 5.1738E+00 2.4407E+00 1.8705E+00 - 3.9811E+00 4.2653E+00 3.7198E+00 1.7129E+00 1.3156E+00 - 4.4668E+00 3.0941E+00 2.6531E+00 1.1922E+00 9.1772E-01 - 5.0119E+00 2.2354E+00 1.8974E+00 8.2210E-01 6.2172E-01 - 5.6234E+00 1.5964E+00 1.3481E+00 5.7191E-01 4.1898E-01 - 6.3096E+00 1.1354E+00 9.5399E-01 3.8771E-01 2.8651E-01 - 7.0795E+00 8.1139E-01 6.7919E-01 2.5942E-01 1.9858E-01 - 7.9433E+00 5.8869E-01 4.8238E-01 1.7512E-01 1.3614E-01 - 8.9125E+00 4.2192E-01 3.4104E-01 1.1881E-01 9.0831E-02 - 1.0000E+01 3.0186E-01 2.4283E-01 8.1549E-02 6.1969E-02 - 1.1220E+01 2.1519E-01 1.7304E-01 5.6118E-02 4.2003E-02 - 1.2589E+01 1.5439E-01 1.2343E-01 3.7911E-02 2.7966E-02 - 1.4125E+01 1.0993E-01 8.8218E-02 2.5058E-02 1.8933E-02 - 1.5849E+01 7.7646E-02 6.2300E-02 1.6823E-02 1.2909E-02 - 1.7783E+01 5.5003E-02 4.3125E-02 1.1362E-02 8.7336E-03 - 1.9953E+01 3.8817E-02 3.0642E-02 7.5417E-03 5.7397E-03 - 2.2387E+01 2.8132E-02 2.1973E-02 5.1575E-03 3.7373E-03 - 2.5119E+01 2.0650E-02 1.5542E-02 3.4323E-03 2.6337E-03 - 2.8184E+01 1.4787E-02 1.1146E-02 2.2207E-03 1.8560E-03 - 3.1623E+01 1.0226E-02 7.7770E-03 1.4612E-03 1.1289E-03 - 3.5481E+01 7.2786E-03 5.4845E-03 9.6653E-04 7.6032E-04 - 3.9811E+01 5.1809E-03 3.8802E-03 6.4669E-04 5.0750E-04 - 4.4668E+01 3.6764E-03 2.7437E-03 4.3659E-04 3.4039E-04 - 5.0119E+01 2.5969E-03 1.9258E-03 2.8901E-04 2.2672E-04 - 5.6234E+01 1.8486E-03 1.3546E-03 1.9117E-04 1.4924E-04 - 6.3096E+01 1.3101E-03 9.5522E-04 1.2735E-04 1.0105E-04 - 7.0795E+01 9.2198E-04 6.7746E-04 8.4002E-05 6.9419E-05 - 7.9433E+01 6.5265E-04 4.7638E-04 5.5878E-05 4.5200E-05 - 8.9125E+01 4.6451E-04 3.3346E-04 3.7599E-05 2.9435E-05 - 1.0000E+02 3.2517E-04 2.3171E-04 2.5025E-05 2.0282E-05 - 1.1220E+02 2.2900E-04 1.6180E-04 1.6848E-05 1.3543E-05 - 1.2589E+02 1.6098E-04 1.1341E-04 1.1435E-05 9.0318E-06 - 1.4125E+02 1.1334E-04 7.9080E-05 7.6300E-06 6.1146E-06 - 1.5849E+02 7.9350E-05 5.4986E-05 5.1376E-06 4.0986E-06 - 1.7783E+02 5.5485E-05 3.8411E-05 3.4508E-06 2.7822E-06 - 1.9953E+02 3.9017E-05 2.6821E-05 2.3015E-06 1.8969E-06 - 2.2387E+02 2.7384E-05 1.8671E-05 1.5641E-06 1.2397E-06 - 2.5119E+02 1.9117E-05 1.3045E-05 1.0640E-06 8.5941E-07 - 2.8184E+02 1.3277E-05 8.9820E-06 7.2477E-07 5.9911E-07 - 3.1623E+02 9.2984E-06 6.1934E-06 4.8273E-07 3.9188E-07 - 3.5481E+02 6.4582E-06 4.2688E-06 3.2246E-07 2.6028E-07 - 3.9811E+02 4.5086E-06 2.9606E-06 2.1861E-07 1.7508E-07 - 4.4668E+02 3.1446E-06 2.0572E-06 1.4866E-07 1.1684E-07 - 5.0119E+02 2.1866E-06 1.4229E-06 9.9720E-08 8.0305E-08 - 5.6234E+02 1.5274E-06 9.8222E-07 6.8382E-08 5.5834E-08 - 6.3096E+02 1.0535E-06 6.7065E-07 4.5795E-08 3.7320E-08 - 7.0795E+02 7.2803E-07 4.5889E-07 3.0738E-08 2.4482E-08 - 7.9433E+02 5.0457E-07 3.1643E-07 2.0596E-08 1.6197E-08 - 8.9125E+02 3.4720E-07 2.1699E-07 1.4067E-08 1.0559E-08 - 1.0000E+03 2.4119E-07 1.4994E-07 9.6444E-09 7.2242E-09 - 1.1220E+03 1.6561E-07 1.0157E-07 6.3926E-09 4.9159E-09 - 1.2589E+03 1.1377E-07 6.9516E-08 4.2689E-09 3.2844E-09 - 1.4125E+03 7.7603E-08 4.7503E-08 2.8503E-09 2.1630E-09 - 1.5849E+03 5.3108E-08 3.2223E-08 1.9349E-09 1.4538E-09 - 1.7783E+03 3.6210E-08 2.1731E-08 1.2985E-09 9.4405E-10 - 1.9953E+03 2.4495E-08 1.4657E-08 8.6286E-10 6.2478E-10 - 2.2387E+03 1.6552E-08 9.9598E-09 5.6939E-10 4.1401E-10 - 2.5119E+03 1.1352E-08 6.7139E-09 3.6626E-10 2.7124E-10 - 2.8184E+03 7.6196E-09 4.4534E-09 2.3961E-10 1.7310E-10 - 3.1623E+03 5.2643E-09 3.0462E-09 1.6378E-10 1.2007E-10 - 3.5481E+03 3.4479E-09 2.0119E-09 1.0943E-10 8.0437E-11 - 3.9811E+03 2.3123E-09 1.3479E-09 7.2940E-11 5.5897E-11 - 4.4668E+03 1.5504E-09 8.9743E-10 4.9850E-11 3.6628E-11 - 5.0119E+03 1.0371E-09 5.8803E-10 3.2866E-11 2.4020E-11 - 5.6234E+03 6.8955E-10 3.8381E-10 2.1477E-11 1.5012E-11 - 6.3096E+03 4.6032E-10 2.5935E-10 1.4038E-11 9.7035E-12 - 7.0795E+03 3.0735E-10 1.7123E-10 9.6094E-12 6.6844E-12 - 7.9433E+03 2.0298E-10 1.1249E-10 5.9517E-12 4.0173E-12 - 8.9125E+03 1.3392E-10 7.4748E-11 3.7786E-12 2.6815E-12 - 1.0000E+04 8.8194E-11 4.8698E-11 2.5354E-12 1.8785E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2913E+04 1.3299E+04 6.5345E+03 5.8801E+03 - 1.1220E-01 1.1225E+04 1.1579E+04 5.7425E+03 5.1130E+03 - 1.2589E-01 9.7420E+03 1.0022E+04 4.9743E+03 4.3766E+03 - 1.4125E-01 8.4230E+03 8.6098E+03 4.2755E+03 3.7395E+03 - 1.5849E-01 7.1474E+03 7.3043E+03 3.6760E+03 3.1523E+03 - 1.7783E-01 6.0064E+03 6.1444E+03 3.1216E+03 2.6361E+03 - 1.9953E-01 5.0109E+03 5.1010E+03 2.6117E+03 2.1993E+03 - 2.2387E-01 4.1232E+03 4.1806E+03 2.1753E+03 1.8156E+03 - 2.5119E-01 3.3554E+03 3.4067E+03 1.7963E+03 1.4790E+03 - 2.8184E-01 2.7121E+03 2.7528E+03 1.4708E+03 1.1940E+03 - 3.1623E-01 2.1694E+03 2.2073E+03 1.1908E+03 9.5473E+02 - 3.5481E-01 1.7171E+03 1.7426E+03 9.5427E+02 7.6026E+02 - 3.9811E-01 1.3500E+03 1.3638E+03 7.5388E+02 6.0141E+02 - 4.4668E-01 1.0593E+03 1.0708E+03 5.8987E+02 4.6896E+02 - 5.0119E-01 8.2465E+02 8.2929E+02 4.6175E+02 3.6063E+02 - 5.6234E-01 6.3498E+02 6.3245E+02 3.5812E+02 2.7716E+02 - 6.3096E-01 4.8745E+02 4.8614E+02 2.7472E+02 2.1268E+02 - 7.0795E-01 3.7278E+02 3.7288E+02 2.0825E+02 1.6041E+02 - 7.9433E-01 2.8099E+02 2.8017E+02 1.5736E+02 1.2039E+02 - 8.9125E-01 2.1303E+02 2.0922E+02 1.1741E+02 9.1121E+01 - 1.0000E+00 1.6186E+02 1.5713E+02 8.8171E+01 6.8322E+01 - 1.1220E+00 1.2142E+02 1.1785E+02 6.5598E+01 5.0792E+01 - 1.2589E+00 9.1602E+01 8.7916E+01 4.8464E+01 3.7554E+01 - 1.4125E+00 6.8924E+01 6.5373E+01 3.5824E+01 2.7733E+01 - 1.5849E+00 5.1468E+01 4.8199E+01 2.6093E+01 2.0143E+01 - 1.7783E+00 3.8109E+01 3.5251E+01 1.8932E+01 1.4525E+01 - 1.9953E+00 2.8166E+01 2.5847E+01 1.3672E+01 1.0555E+01 - 2.2387E+00 2.0730E+01 1.8830E+01 9.7584E+00 7.5925E+00 - 2.5119E+00 1.5212E+01 1.3788E+01 6.9447E+00 5.4510E+00 - 2.8184E+00 1.1070E+01 9.8995E+00 4.9718E+00 3.8055E+00 - 3.1623E+00 8.1027E+00 7.1373E+00 3.4953E+00 2.6652E+00 - 3.5481E+00 5.8714E+00 5.0898E+00 2.4704E+00 1.8707E+00 - 3.9811E+00 4.2348E+00 3.6752E+00 1.7302E+00 1.2994E+00 - 4.4668E+00 3.0690E+00 2.6667E+00 1.1951E+00 8.9258E-01 - 5.0119E+00 2.2048E+00 1.8973E+00 8.2166E-01 6.2072E-01 - 5.6234E+00 1.5803E+00 1.3487E+00 5.6617E-01 4.3121E-01 - 6.3096E+00 1.1333E+00 9.5882E-01 3.8666E-01 2.9679E-01 - 7.0795E+00 8.1733E-01 6.8486E-01 2.6293E-01 2.0381E-01 - 7.9433E+00 5.8666E-01 4.8681E-01 1.8235E-01 1.3942E-01 - 8.9125E+00 4.1830E-01 3.4217E-01 1.2282E-01 9.4677E-02 - 1.0000E+01 3.0282E-01 2.4598E-01 8.1267E-02 6.2514E-02 - 1.1220E+01 2.1606E-01 1.7439E-01 5.4397E-02 4.1692E-02 - 1.2589E+01 1.5405E-01 1.2279E-01 3.6976E-02 2.7699E-02 - 1.4125E+01 1.0968E-01 8.7076E-02 2.4844E-02 1.8815E-02 - 1.5849E+01 7.8134E-02 6.2330E-02 1.6570E-02 1.2930E-02 - 1.7783E+01 5.5591E-02 4.4559E-02 1.0906E-02 8.6112E-03 - 1.9953E+01 3.9834E-02 3.0992E-02 7.3469E-03 5.8604E-03 - 2.2387E+01 2.8622E-02 2.2000E-02 5.0511E-03 3.9038E-03 - 2.5119E+01 2.0476E-02 1.5663E-02 3.3016E-03 2.5769E-03 - 2.8184E+01 1.4463E-02 1.0928E-02 2.1624E-03 1.6891E-03 - 3.1623E+01 1.0206E-02 7.7456E-03 1.4641E-03 1.1228E-03 - 3.5481E+01 7.2608E-03 5.4774E-03 9.7408E-04 7.5688E-04 - 3.9811E+01 5.1710E-03 3.8746E-03 6.4515E-04 5.0682E-04 - 4.4668E+01 3.6750E-03 2.7308E-03 4.2952E-04 3.3763E-04 - 5.0119E+01 2.6019E-03 1.9234E-03 2.8828E-04 2.2407E-04 - 5.6234E+01 1.8417E-03 1.3597E-03 1.9419E-04 1.4924E-04 - 6.3096E+01 1.3049E-03 9.5717E-04 1.2876E-04 1.0033E-04 - 7.0795E+01 9.2263E-04 6.7104E-04 8.4997E-05 6.7066E-05 - 7.9433E+01 6.5232E-04 4.7540E-04 5.6466E-05 4.5220E-05 - 8.9125E+01 4.6001E-04 3.3622E-04 3.8781E-05 2.9983E-05 - 1.0000E+02 3.2403E-04 2.3174E-04 2.5226E-05 2.0091E-05 - 1.1220E+02 2.2819E-04 1.6176E-04 1.6850E-05 1.3536E-05 - 1.2589E+02 1.6093E-04 1.1286E-04 1.1260E-05 9.1659E-06 - 1.4125E+02 1.1300E-04 7.8932E-05 7.5619E-06 6.1555E-06 - 1.5849E+02 7.9190E-05 5.5210E-05 5.1586E-06 4.0924E-06 - 1.7783E+02 5.5508E-05 3.8421E-05 3.4513E-06 2.7674E-06 - 1.9953E+02 3.8841E-05 2.6519E-05 2.2874E-06 1.9043E-06 - 2.2387E+02 2.7261E-05 1.8506E-05 1.5715E-06 1.2766E-06 - 2.5119E+02 1.9041E-05 1.2884E-05 1.0628E-06 8.4335E-07 - 2.8184E+02 1.3230E-05 8.9604E-06 7.2408E-07 5.3887E-07 - 3.1623E+02 9.2685E-06 6.1902E-06 4.7545E-07 3.8501E-07 - 3.5481E+02 6.4760E-06 4.2878E-06 3.2044E-07 2.6135E-07 - 3.9811E+02 4.5264E-06 2.9702E-06 2.1839E-07 1.7715E-07 - 4.4668E+02 3.1449E-06 2.0494E-06 1.4747E-07 1.1964E-07 - 5.0119E+02 2.1812E-06 1.4137E-06 1.0064E-07 7.9656E-08 - 5.6234E+02 1.5225E-06 9.7754E-07 6.7878E-08 5.3947E-08 - 6.3096E+02 1.0540E-06 6.7303E-07 4.5940E-08 3.5847E-08 - 7.0795E+02 7.3274E-07 4.6045E-07 3.1392E-08 2.3959E-08 - 7.9433E+02 5.0757E-07 3.1648E-07 2.1017E-08 1.6609E-08 - 8.9125E+02 3.5024E-07 2.1716E-07 1.4227E-08 1.0906E-08 - 1.0000E+03 2.4226E-07 1.4934E-07 9.4574E-09 7.3431E-09 - 1.1220E+03 1.6656E-07 1.0089E-07 6.4573E-09 5.0191E-09 - 1.2589E+03 1.1392E-07 6.8897E-08 4.2745E-09 3.2724E-09 - 1.4125E+03 7.7515E-08 4.7079E-08 2.8278E-09 2.1071E-09 - 1.5849E+03 5.2692E-08 3.1863E-08 1.8827E-09 1.4273E-09 - 1.7783E+03 3.6285E-08 2.1402E-08 1.2166E-09 9.8213E-10 - 1.9953E+03 2.4706E-08 1.4548E-08 8.3607E-10 6.6684E-10 - 2.2387E+03 1.6708E-08 9.8611E-09 5.5656E-10 4.1064E-10 - 2.5119E+03 1.1212E-08 6.7585E-09 3.9443E-10 2.7473E-10 - 2.8184E+03 7.5605E-09 4.5357E-09 2.6661E-10 1.8257E-10 - 3.1623E+03 5.2731E-09 3.0695E-09 1.6835E-10 1.2491E-10 - 3.5481E+03 3.4578E-09 2.0013E-09 1.1146E-10 8.3969E-11 - 3.9811E+03 2.3222E-09 1.3385E-09 7.5477E-11 5.4279E-11 - 4.4668E+03 1.5608E-09 9.0751E-10 5.1165E-11 3.3507E-11 - 5.0119E+03 1.0439E-09 6.0899E-10 3.3802E-11 2.3093E-11 - 5.6234E+03 6.9807E-10 3.9844E-10 1.9828E-11 1.5723E-11 - 6.3096E+03 4.6381E-10 2.5887E-10 1.3277E-11 9.8297E-12 - 7.0795E+03 3.0712E-10 1.7060E-10 8.5411E-12 6.5728E-12 - 7.9433E+03 2.0256E-10 1.1389E-10 5.9815E-12 4.2116E-12 - 8.9125E+03 1.3449E-10 7.4198E-11 4.2320E-12 2.5645E-12 - 1.0000E+04 8.9123E-11 4.7774E-11 2.5998E-12 1.6607E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4675E+04 1.4899E+04 7.2068E+03 6.6871E+03 - 1.1220E-01 1.2623E+04 1.2839E+04 6.2628E+03 5.7709E+03 - 1.2589E-01 1.0813E+04 1.0946E+04 5.4117E+03 4.9494E+03 - 1.4125E-01 9.2045E+03 9.2448E+03 4.6438E+03 4.1770E+03 - 1.5849E-01 7.7734E+03 7.8015E+03 3.9251E+03 3.4948E+03 - 1.7783E-01 6.4923E+03 6.4978E+03 3.2954E+03 2.8843E+03 - 1.9953E-01 5.3437E+03 5.3598E+03 2.7458E+03 2.3651E+03 - 2.2387E-01 4.3454E+03 4.3780E+03 2.2666E+03 1.9582E+03 - 2.5119E-01 3.5213E+03 3.5285E+03 1.8622E+03 1.5985E+03 - 2.8184E-01 2.8237E+03 2.8239E+03 1.5062E+03 1.2768E+03 - 3.1623E-01 2.2339E+03 2.2538E+03 1.2088E+03 1.0129E+03 - 3.5481E-01 1.7764E+03 1.7852E+03 9.7112E+02 7.9933E+02 - 3.9811E-01 1.3889E+03 1.3974E+03 7.6733E+02 6.3058E+02 - 4.4668E-01 1.0767E+03 1.0817E+03 6.0175E+02 4.9413E+02 - 5.0119E-01 8.4022E+02 8.3991E+02 4.6792E+02 3.8427E+02 - 5.6234E-01 6.4608E+02 6.4837E+02 3.6531E+02 2.9410E+02 - 6.3096E-01 4.9587E+02 4.9374E+02 2.8355E+02 2.2540E+02 - 7.0795E-01 3.8412E+02 3.7875E+02 2.1548E+02 1.7367E+02 - 7.9433E-01 2.9310E+02 2.8793E+02 1.6357E+02 1.3199E+02 - 8.9125E-01 2.2087E+02 2.1647E+02 1.2478E+02 9.7975E+01 - 1.0000E+00 1.6782E+02 1.6331E+02 9.3239E+01 7.4142E+01 - 1.1220E+00 1.2651E+02 1.2359E+02 6.9892E+01 5.5171E+01 - 1.2589E+00 9.5163E+01 9.2555E+01 5.2435E+01 4.0676E+01 - 1.4125E+00 7.1882E+01 6.8777E+01 3.8763E+01 2.9974E+01 - 1.5849E+00 5.3395E+01 5.1032E+01 2.8558E+01 2.2271E+01 - 1.7783E+00 3.9328E+01 3.7554E+01 2.0891E+01 1.6322E+01 - 1.9953E+00 2.9226E+01 2.7806E+01 1.5297E+01 1.1754E+01 - 2.2387E+00 2.1629E+01 2.0365E+01 1.1197E+01 8.5354E+00 - 2.5119E+00 1.5990E+01 1.4798E+01 8.0471E+00 6.1959E+00 - 2.8184E+00 1.1627E+01 1.0685E+01 5.8494E+00 4.4510E+00 - 3.1623E+00 8.5206E+00 7.7306E+00 4.0666E+00 3.0549E+00 - 3.5481E+00 6.2101E+00 5.5977E+00 2.8748E+00 2.1654E+00 - 3.9811E+00 4.4902E+00 4.0059E+00 2.0434E+00 1.5376E+00 - 4.4668E+00 3.2409E+00 2.8454E+00 1.4130E+00 1.0726E+00 - 5.0119E+00 2.3180E+00 2.0461E+00 9.7278E-01 7.3958E-01 - 5.6234E+00 1.6676E+00 1.4736E+00 6.6977E-01 5.0870E-01 - 6.3096E+00 1.2055E+00 1.0459E+00 4.6818E-01 3.5037E-01 - 7.0795E+00 8.5666E-01 7.3701E-01 3.2316E-01 2.4124E-01 - 7.9433E+00 6.1691E-01 5.1327E-01 2.1419E-01 1.6193E-01 - 8.9125E+00 4.4459E-01 3.6351E-01 1.4482E-01 1.1061E-01 - 1.0000E+01 3.2117E-01 2.6901E-01 1.0226E-01 7.6792E-02 - 1.1220E+01 2.2892E-01 1.8990E-01 6.9186E-02 5.2035E-02 - 1.2589E+01 1.6322E-01 1.3576E-01 4.7315E-02 3.6139E-02 - 1.4125E+01 1.1626E-01 9.5788E-02 3.2071E-02 2.4187E-02 - 1.5849E+01 8.2969E-02 6.7052E-02 2.1594E-02 1.6226E-02 - 1.7783E+01 5.9549E-02 4.7344E-02 1.4480E-02 1.0638E-02 - 1.9953E+01 4.2348E-02 3.3259E-02 9.6184E-03 7.0875E-03 - 2.2387E+01 3.0382E-02 2.3744E-02 6.4895E-03 4.8810E-03 - 2.5119E+01 2.1943E-02 1.7124E-02 4.3513E-03 3.3901E-03 - 2.8184E+01 1.5703E-02 1.1954E-02 2.8479E-03 2.2262E-03 - 3.1623E+01 1.0920E-02 8.4664E-03 1.9007E-03 1.4584E-03 - 3.5481E+01 7.8060E-03 5.9926E-03 1.2608E-03 9.6884E-04 - 3.9811E+01 5.5346E-03 4.2454E-03 8.3472E-04 6.4983E-04 - 4.4668E+01 3.9349E-03 3.0028E-03 5.5723E-04 4.3492E-04 - 5.0119E+01 2.8043E-03 2.1225E-03 3.7136E-04 2.9108E-04 - 5.6234E+01 1.9942E-03 1.4997E-03 2.4631E-04 1.9498E-04 - 6.3096E+01 1.4112E-03 1.0585E-03 1.6405E-04 1.2828E-04 - 7.0795E+01 1.0003E-03 7.4757E-04 1.0807E-04 8.6463E-05 - 7.9433E+01 7.0980E-04 5.2230E-04 7.2156E-05 5.8843E-05 - 8.9125E+01 5.0103E-04 3.6563E-04 4.8591E-05 3.8049E-05 - 1.0000E+02 3.5263E-04 2.5632E-04 3.1811E-05 2.5450E-05 - 1.1220E+02 2.4940E-04 1.7978E-04 2.1352E-05 1.7071E-05 - 1.2589E+02 1.7570E-04 1.2557E-04 1.4237E-05 1.1519E-05 - 1.4125E+02 1.2373E-04 8.7690E-05 9.4759E-06 7.7456E-06 - 1.5849E+02 8.6768E-05 6.1553E-05 6.3703E-06 5.2381E-06 - 1.7783E+02 6.0754E-05 4.3017E-05 4.3087E-06 3.4563E-06 - 1.9953E+02 4.2805E-05 2.9916E-05 2.8983E-06 2.2968E-06 - 2.2387E+02 3.0155E-05 2.0852E-05 1.8625E-06 1.5495E-06 - 2.5119E+02 2.1191E-05 1.4335E-05 1.2587E-06 1.0257E-06 - 2.8184E+02 1.4838E-05 9.9138E-06 8.7179E-07 7.0360E-07 - 3.1623E+02 1.0335E-05 7.0136E-06 5.7915E-07 4.8222E-07 - 3.5481E+02 7.2276E-06 4.8542E-06 3.9007E-07 3.1692E-07 - 3.9811E+02 5.0568E-06 3.3801E-06 2.6411E-07 2.1255E-07 - 4.4668E+02 3.5254E-06 2.3380E-06 1.7902E-07 1.4421E-07 - 5.0119E+02 2.4510E-06 1.6029E-06 1.1557E-07 9.8172E-08 - 5.6234E+02 1.7075E-06 1.1172E-06 7.9794E-08 6.5978E-08 - 6.3096E+02 1.1843E-06 7.7073E-07 5.4903E-08 4.4850E-08 - 7.0795E+02 8.2301E-07 5.3065E-07 3.7970E-08 2.9890E-08 - 7.9433E+02 5.7216E-07 3.6332E-07 2.5597E-08 1.9904E-08 - 8.9125E+02 3.9645E-07 2.4949E-07 1.7257E-08 1.3723E-08 - 1.0000E+03 2.7546E-07 1.7276E-07 1.1683E-08 9.0578E-09 - 1.1220E+03 1.8985E-07 1.1844E-07 7.7628E-09 6.1208E-09 - 1.2589E+03 1.3108E-07 8.0911E-08 5.0471E-09 3.9963E-09 - 1.4125E+03 9.0003E-08 5.5569E-08 3.3504E-09 2.5686E-09 - 1.5849E+03 6.1748E-08 3.7954E-08 2.3259E-09 1.7184E-09 - 1.7783E+03 4.2049E-08 2.5609E-08 1.5395E-09 1.1795E-09 - 1.9953E+03 2.8877E-08 1.7309E-08 1.0506E-09 7.3698E-10 - 2.2387E+03 1.9640E-08 1.1755E-08 6.9832E-10 5.0203E-10 - 2.5119E+03 1.3419E-08 7.9010E-09 4.5681E-10 3.4516E-10 - 2.8184E+03 9.0861E-09 5.3566E-09 3.0580E-10 2.2572E-10 - 3.1623E+03 6.2560E-09 3.6933E-09 2.1003E-10 1.5617E-10 - 3.5481E+03 4.1690E-09 2.4296E-09 1.4238E-10 1.0166E-10 - 3.9811E+03 2.8038E-09 1.6127E-09 9.4667E-11 6.8058E-11 - 4.4668E+03 1.8798E-09 1.0651E-09 6.1813E-11 4.5287E-11 - 5.0119E+03 1.2648E-09 7.1367E-10 3.9775E-11 2.8827E-11 - 5.6234E+03 8.4931E-10 4.7972E-10 2.5932E-11 2.0006E-11 - 6.3096E+03 5.6461E-10 3.1816E-10 1.8399E-11 1.2402E-11 - 7.0795E+03 3.7354E-10 2.1336E-10 1.1575E-11 8.2411E-12 - 7.9433E+03 2.4850E-10 1.4260E-10 7.1258E-12 5.4874E-12 - 8.9125E+03 1.6547E-10 9.2190E-11 4.5893E-12 3.5282E-12 - 1.0000E+04 1.1124E-10 5.9955E-11 3.1554E-12 2.2146E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4548E+04 1.4599E+04 7.0098E+03 6.6859E+03 - 1.1220E-01 1.2501E+04 1.2502E+04 6.0932E+03 5.7643E+03 - 1.2589E-01 1.0697E+04 1.0631E+04 5.2149E+03 4.8777E+03 - 1.4125E-01 9.0954E+03 9.0204E+03 4.4720E+03 4.1322E+03 - 1.5849E-01 7.6867E+03 7.6103E+03 3.7714E+03 3.4708E+03 - 1.7783E-01 6.3740E+03 6.2719E+03 3.1413E+03 2.8803E+03 - 1.9953E-01 5.2275E+03 5.1408E+03 2.6146E+03 2.3815E+03 - 2.2387E-01 4.2663E+03 4.1840E+03 2.1612E+03 1.9520E+03 - 2.5119E-01 3.4466E+03 3.3676E+03 1.7643E+03 1.5836E+03 - 2.8184E-01 2.7745E+03 2.7030E+03 1.4291E+03 1.2671E+03 - 3.1623E-01 2.2091E+03 2.1572E+03 1.1539E+03 1.0074E+03 - 3.5481E-01 1.7426E+03 1.6967E+03 9.2172E+02 8.0225E+02 - 3.9811E-01 1.3643E+03 1.3317E+03 7.2951E+02 6.2992E+02 - 4.4668E-01 1.0660E+03 1.0448E+03 5.6782E+02 4.9361E+02 - 5.0119E-01 8.3493E+02 8.0939E+02 4.4296E+02 3.8296E+02 - 5.6234E-01 6.4501E+02 6.1978E+02 3.4700E+02 2.9394E+02 - 6.3096E-01 4.9525E+02 4.7664E+02 2.6802E+02 2.2646E+02 - 7.0795E-01 3.7748E+02 3.6431E+02 2.0600E+02 1.7196E+02 - 7.9433E-01 2.8679E+02 2.7765E+02 1.5822E+02 1.2911E+02 - 8.9125E-01 2.2005E+02 2.1106E+02 1.1966E+02 9.7637E+01 - 1.0000E+00 1.6531E+02 1.5938E+02 9.0462E+01 7.3958E+01 - 1.1220E+00 1.2452E+02 1.2008E+02 6.7858E+01 5.5005E+01 - 1.2589E+00 9.5167E+01 9.0378E+01 5.0494E+01 4.0676E+01 - 1.4125E+00 7.1086E+01 6.7362E+01 3.7300E+01 3.0088E+01 - 1.5849E+00 5.2615E+01 4.9938E+01 2.7873E+01 2.2313E+01 - 1.7783E+00 3.9658E+01 3.7002E+01 2.0714E+01 1.6381E+01 - 1.9953E+00 2.9787E+01 2.7281E+01 1.5017E+01 1.1769E+01 - 2.2387E+00 2.1806E+01 2.0007E+01 1.0921E+01 8.4124E+00 - 2.5119E+00 1.5838E+01 1.4781E+01 7.9625E+00 6.0621E+00 - 2.8184E+00 1.1674E+01 1.0800E+01 5.7357E+00 4.4083E+00 - 3.1623E+00 8.4627E+00 7.7195E+00 4.0577E+00 3.1032E+00 - 3.5481E+00 6.1699E+00 5.5401E+00 2.8874E+00 2.1866E+00 - 3.9811E+00 4.4919E+00 3.9780E+00 2.0366E+00 1.5275E+00 - 4.4668E+00 3.2327E+00 2.8718E+00 1.4479E+00 1.0638E+00 - 5.0119E+00 2.3088E+00 2.0497E+00 9.9360E-01 7.4139E-01 - 5.6234E+00 1.6699E+00 1.4626E+00 6.8841E-01 5.1842E-01 - 6.3096E+00 1.2114E+00 1.0490E+00 4.7298E-01 3.5120E-01 - 7.0795E+00 8.6745E-01 7.4019E-01 3.1866E-01 2.4010E-01 - 7.9433E+00 6.1954E-01 5.2157E-01 2.2003E-01 1.6647E-01 - 8.9125E+00 4.4777E-01 3.7041E-01 1.5287E-01 1.0964E-01 - 1.0000E+01 3.1748E-01 2.6559E-01 1.0404E-01 7.7465E-02 - 1.1220E+01 2.2671E-01 1.8872E-01 7.0461E-02 5.2720E-02 - 1.2589E+01 1.6240E-01 1.3360E-01 4.7493E-02 3.4827E-02 - 1.4125E+01 1.1601E-01 9.4323E-02 3.1925E-02 2.3598E-02 - 1.5849E+01 8.3504E-02 6.6920E-02 2.1479E-02 1.5781E-02 - 1.7783E+01 5.9687E-02 4.7863E-02 1.4507E-02 1.0579E-02 - 1.9953E+01 4.2005E-02 3.3106E-02 9.7556E-03 7.2467E-03 - 2.2387E+01 3.0063E-02 2.2981E-02 6.5786E-03 4.9145E-03 - 2.5119E+01 2.1641E-02 1.6312E-02 4.4182E-03 3.2789E-03 - 2.8184E+01 1.5309E-02 1.1872E-02 3.0228E-03 2.1414E-03 - 3.1623E+01 1.0947E-02 8.4891E-03 1.8980E-03 1.4690E-03 - 3.5481E+01 7.7832E-03 6.0157E-03 1.2641E-03 9.7171E-04 - 3.9811E+01 5.5462E-03 4.2546E-03 8.4678E-04 6.4902E-04 - 4.4668E+01 3.9458E-03 3.0010E-03 5.6385E-04 4.4037E-04 - 5.0119E+01 2.8057E-03 2.1185E-03 3.7106E-04 2.9505E-04 - 5.6234E+01 1.9942E-03 1.4956E-03 2.4606E-04 1.9504E-04 - 6.3096E+01 1.4147E-03 1.0488E-03 1.6321E-04 1.2894E-04 - 7.0795E+01 1.0011E-03 7.4202E-04 1.0809E-04 8.6702E-05 - 7.9433E+01 7.0869E-04 5.2495E-04 7.2381E-05 5.8269E-05 - 8.9125E+01 5.0290E-04 3.6932E-04 4.8637E-05 3.9264E-05 - 1.0000E+02 3.5400E-04 2.5831E-04 3.2298E-05 2.5592E-05 - 1.1220E+02 2.4933E-04 1.8051E-04 2.1511E-05 1.7069E-05 - 1.2589E+02 1.7578E-04 1.2614E-04 1.4276E-05 1.1449E-05 - 1.4125E+02 1.2377E-04 8.8008E-05 9.4427E-06 7.5986E-06 - 1.5849E+02 8.6895E-05 6.1313E-05 6.4141E-06 5.1071E-06 - 1.7783E+02 6.1208E-05 4.3021E-05 4.3039E-06 3.4129E-06 - 1.9953E+02 4.3011E-05 2.9938E-05 2.8997E-06 2.3172E-06 - 2.2387E+02 3.0124E-05 2.0762E-05 1.9252E-06 1.5853E-06 - 2.5119E+02 2.1136E-05 1.4522E-05 1.2978E-06 1.0533E-06 - 2.8184E+02 1.4777E-05 1.0154E-05 8.6769E-07 7.1221E-07 - 3.1623E+02 1.0338E-05 7.0077E-06 5.7853E-07 4.7481E-07 - 3.5481E+02 7.2133E-06 4.8584E-06 3.8671E-07 3.1915E-07 - 3.9811E+02 5.0204E-06 3.3741E-06 2.6900E-07 2.1237E-07 - 4.4668E+02 3.5005E-06 2.3346E-06 1.8303E-07 1.4419E-07 - 5.0119E+02 2.4496E-06 1.6111E-06 1.2094E-07 9.8522E-08 - 5.6234E+02 1.7060E-06 1.1159E-06 8.0896E-08 6.6565E-08 - 6.3096E+02 1.1855E-06 7.6617E-07 5.4516E-08 4.4447E-08 - 7.0795E+02 8.2452E-07 5.3445E-07 3.7080E-08 2.9828E-08 - 7.9433E+02 5.7390E-07 3.6897E-07 2.4710E-08 1.8993E-08 - 8.9125E+02 3.9767E-07 2.5067E-07 1.6451E-08 1.2647E-08 - 1.0000E+03 2.7485E-07 1.7136E-07 1.1152E-08 8.9804E-09 - 1.1220E+03 1.8945E-07 1.1706E-07 7.5203E-09 6.1335E-09 - 1.2589E+03 1.3011E-07 8.0658E-08 5.0401E-09 4.1404E-09 - 1.4125E+03 8.9665E-08 5.5054E-08 3.5350E-09 2.7536E-09 - 1.5849E+03 6.1587E-08 3.7550E-08 2.4461E-09 1.8115E-09 - 1.7783E+03 4.1961E-08 2.5909E-08 1.5500E-09 1.1592E-09 - 1.9953E+03 2.8745E-08 1.7184E-08 9.9708E-10 7.9450E-10 - 2.2387E+03 1.9625E-08 1.1623E-08 6.6402E-10 5.2962E-10 - 2.5119E+03 1.3471E-08 7.8891E-09 4.4830E-10 3.3701E-10 - 2.8184E+03 9.1756E-09 5.3132E-09 2.9258E-10 2.3031E-10 - 3.1623E+03 6.2736E-09 3.6826E-09 1.9992E-10 1.5323E-10 - 3.5481E+03 4.1194E-09 2.4022E-09 1.3379E-10 1.0005E-10 - 3.9811E+03 2.7891E-09 1.6086E-09 9.0434E-11 6.4576E-11 - 4.4668E+03 1.8765E-09 1.0750E-09 6.1348E-11 4.3279E-11 - 5.0119E+03 1.2624E-09 7.1755E-10 4.0013E-11 3.0068E-11 - 5.6234E+03 8.4481E-10 4.7577E-10 2.5652E-11 1.8432E-11 - 6.3096E+03 5.6240E-10 3.1800E-10 1.6952E-11 1.2184E-11 - 7.0795E+03 3.7673E-10 2.0967E-10 1.1042E-11 8.0307E-12 - 7.9433E+03 2.4795E-10 1.3878E-10 7.4530E-12 5.2271E-12 - 8.9125E+03 1.6629E-10 9.2343E-11 5.2670E-12 3.5064E-12 - 1.0000E+04 1.1103E-10 6.0863E-11 3.4096E-12 2.2023E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4501E+04 1.4456E+04 6.8448E+03 6.7768E+03 - 1.1220E-01 1.2473E+04 1.2340E+04 5.9676E+03 5.8147E+03 - 1.2589E-01 1.0670E+04 1.0486E+04 5.1104E+03 4.9273E+03 - 1.4125E-01 9.0737E+03 8.8732E+03 4.3499E+03 4.1773E+03 - 1.5849E-01 7.6380E+03 7.4288E+03 3.6551E+03 3.4987E+03 - 1.7783E-01 6.3405E+03 6.1749E+03 3.0406E+03 2.8898E+03 - 1.9953E-01 5.2135E+03 5.0619E+03 2.5256E+03 2.3876E+03 - 2.2387E-01 4.2362E+03 4.1178E+03 2.0900E+03 1.9650E+03 - 2.5119E-01 3.4241E+03 3.3195E+03 1.7085E+03 1.5948E+03 - 2.8184E-01 2.7542E+03 2.6442E+03 1.3775E+03 1.2789E+03 - 3.1623E-01 2.2011E+03 2.1014E+03 1.1058E+03 1.0143E+03 - 3.5481E-01 1.7462E+03 1.6709E+03 8.8438E+02 8.0984E+02 - 3.9811E-01 1.3680E+03 1.2998E+03 6.9981E+02 6.3936E+02 - 4.4668E-01 1.0659E+03 1.0079E+03 5.5272E+02 4.9569E+02 - 5.0119E-01 8.2424E+02 7.8091E+02 4.3291E+02 3.8355E+02 - 5.6234E-01 6.3766E+02 6.0425E+02 3.3585E+02 2.9470E+02 - 6.3096E-01 4.9280E+02 4.6740E+02 2.5759E+02 2.2493E+02 - 7.0795E-01 3.7592E+02 3.5768E+02 1.9658E+02 1.7353E+02 - 7.9433E-01 2.8673E+02 2.7223E+02 1.5203E+02 1.3294E+02 - 8.9125E-01 2.1988E+02 2.0769E+02 1.1597E+02 9.9480E+01 - 1.0000E+00 1.6636E+02 1.5699E+02 8.7329E+01 7.4341E+01 - 1.1220E+00 1.2571E+02 1.1848E+02 6.5848E+01 5.5579E+01 - 1.2589E+00 9.4757E+01 8.8660E+01 4.9731E+01 4.0866E+01 - 1.4125E+00 7.1194E+01 6.6499E+01 3.6834E+01 3.0274E+01 - 1.5849E+00 5.3224E+01 4.9235E+01 2.7121E+01 2.2123E+01 - 1.7783E+00 3.9387E+01 3.6708E+01 2.0204E+01 1.6076E+01 - 1.9953E+00 2.9058E+01 2.7158E+01 1.4835E+01 1.1836E+01 - 2.2387E+00 2.1722E+01 2.0020E+01 1.0993E+01 8.6395E+00 - 2.5119E+00 1.5910E+01 1.4654E+01 8.0745E+00 6.2065E+00 - 2.8184E+00 1.1561E+01 1.0640E+01 5.7683E+00 4.3743E+00 - 3.1623E+00 8.4381E+00 7.7052E+00 4.0276E+00 3.1119E+00 - 3.5481E+00 6.1133E+00 5.5656E+00 2.8434E+00 2.2095E+00 - 3.9811E+00 4.4657E+00 4.0085E+00 1.9984E+00 1.5308E+00 - 4.4668E+00 3.2284E+00 2.8779E+00 1.4031E+00 1.0653E+00 - 5.0119E+00 2.3338E+00 2.0297E+00 9.9410E-01 7.4919E-01 - 5.6234E+00 1.6824E+00 1.4453E+00 6.7944E-01 5.0520E-01 - 6.3096E+00 1.1990E+00 1.0389E+00 4.6540E-01 3.4899E-01 - 7.0795E+00 8.5664E-01 7.4044E-01 3.2405E-01 2.4122E-01 - 7.9433E+00 6.1728E-01 5.3115E-01 2.1992E-01 1.6551E-01 - 8.9125E+00 4.4339E-01 3.7492E-01 1.5039E-01 1.1320E-01 - 1.0000E+01 3.1799E-01 2.6628E-01 1.0418E-01 7.7098E-02 - 1.1220E+01 2.2793E-01 1.9062E-01 7.0666E-02 5.2191E-02 - 1.2589E+01 1.6201E-01 1.3565E-01 4.8027E-02 3.5749E-02 - 1.4125E+01 1.1526E-01 9.5709E-02 3.2949E-02 2.3674E-02 - 1.5849E+01 8.1980E-02 6.7681E-02 2.1863E-02 1.5641E-02 - 1.7783E+01 5.9186E-02 4.7452E-02 1.4451E-02 1.0792E-02 - 1.9953E+01 4.2298E-02 3.3737E-02 9.7630E-03 7.1547E-03 - 2.2387E+01 2.9554E-02 2.4018E-02 6.4913E-03 4.7528E-03 - 2.5119E+01 2.0913E-02 1.6955E-02 4.2601E-03 3.2471E-03 - 2.8184E+01 1.5128E-02 1.2164E-02 2.8794E-03 2.1470E-03 - 3.1623E+01 1.0895E-02 8.4582E-03 1.8970E-03 1.4661E-03 - 3.5481E+01 7.7755E-03 5.9858E-03 1.2675E-03 9.7435E-04 - 3.9811E+01 5.5334E-03 4.2256E-03 8.3620E-04 6.4788E-04 - 4.4668E+01 3.9324E-03 2.9864E-03 5.5113E-04 4.3520E-04 - 5.0119E+01 2.8026E-03 2.1088E-03 3.6549E-04 2.9103E-04 - 5.6234E+01 1.9837E-03 1.4964E-03 2.4539E-04 1.9184E-04 - 6.3096E+01 1.4046E-03 1.0491E-03 1.6374E-04 1.2698E-04 - 7.0795E+01 9.9385E-04 7.3460E-04 1.0948E-04 8.5488E-05 - 7.9433E+01 7.0095E-04 5.1869E-04 7.2327E-05 5.7942E-05 - 8.9125E+01 4.9734E-04 3.6583E-04 4.7345E-05 3.7451E-05 - 1.0000E+02 3.5255E-04 2.5538E-04 3.1678E-05 2.5631E-05 - 1.1220E+02 2.4912E-04 1.7887E-04 2.1193E-05 1.7172E-05 - 1.2589E+02 1.7524E-04 1.2571E-04 1.4258E-05 1.1379E-05 - 1.4125E+02 1.2340E-04 8.7865E-05 9.5184E-06 7.6868E-06 - 1.5849E+02 8.6979E-05 6.1011E-05 6.3996E-06 5.1967E-06 - 1.7783E+02 6.0887E-05 4.2596E-05 4.2511E-06 3.4498E-06 - 1.9953E+02 4.2830E-05 2.9997E-05 2.8128E-06 2.3575E-06 - 2.2387E+02 3.0259E-05 2.0807E-05 1.8896E-06 1.5886E-06 - 2.5119E+02 2.1121E-05 1.4384E-05 1.2668E-06 1.0168E-06 - 2.8184E+02 1.4616E-05 1.0050E-05 8.5355E-07 6.8127E-07 - 3.1623E+02 1.0296E-05 7.0235E-06 5.7898E-07 4.6777E-07 - 3.5481E+02 7.1631E-06 4.8804E-06 3.9505E-07 3.1933E-07 - 3.9811E+02 5.0072E-06 3.3663E-06 2.6354E-07 2.1731E-07 - 4.4668E+02 3.5127E-06 2.3250E-06 1.7657E-07 1.4656E-07 - 5.0119E+02 2.4494E-06 1.6135E-06 1.2190E-07 9.7286E-08 - 5.6234E+02 1.7088E-06 1.1144E-06 8.2189E-08 6.5246E-08 - 6.3096E+02 1.1851E-06 7.6470E-07 5.6360E-08 4.3907E-08 - 7.0795E+02 8.2531E-07 5.2889E-07 3.7946E-08 3.0084E-08 - 7.9433E+02 5.6935E-07 3.6321E-07 2.5213E-08 1.9780E-08 - 8.9125E+02 3.9422E-07 2.4983E-07 1.7383E-08 1.3321E-08 - 1.0000E+03 2.7416E-07 1.7368E-07 1.1386E-08 9.0888E-09 - 1.1220E+03 1.8853E-07 1.1825E-07 7.6029E-09 5.9048E-09 - 1.2589E+03 1.3011E-07 8.0889E-08 5.0465E-09 3.8943E-09 - 1.4125E+03 8.9757E-08 5.5130E-08 3.3746E-09 2.7614E-09 - 1.5849E+03 6.1364E-08 3.7550E-08 2.3124E-09 1.8645E-09 - 1.7783E+03 4.1701E-08 2.5805E-08 1.5170E-09 1.1852E-09 - 1.9953E+03 2.8965E-08 1.7368E-08 1.0453E-09 7.8819E-10 - 2.2387E+03 1.9631E-08 1.1744E-08 6.7018E-10 5.3895E-10 - 2.5119E+03 1.3399E-08 7.9607E-09 4.4906E-10 3.5707E-10 - 2.8184E+03 9.1030E-09 5.3498E-09 3.0081E-10 2.2913E-10 - 3.1623E+03 6.2835E-09 3.6292E-09 2.0271E-10 1.5475E-10 - 3.5481E+03 4.1407E-09 2.4096E-09 1.3590E-10 1.0182E-10 - 3.9811E+03 2.7711E-09 1.6334E-09 8.8530E-11 6.6280E-11 - 4.4668E+03 1.8666E-09 1.0866E-09 6.2591E-11 4.6122E-11 - 5.0119E+03 1.2555E-09 7.1811E-10 4.3719E-11 3.0446E-11 - 5.6234E+03 8.4707E-10 4.8157E-10 2.7138E-11 1.8673E-11 - 6.3096E+03 5.5999E-10 3.1600E-10 1.7087E-11 1.2165E-11 - 7.0795E+03 3.7239E-10 2.0972E-10 1.1578E-11 8.1371E-12 - 7.9433E+03 2.4799E-10 1.3917E-10 7.7192E-12 5.6031E-12 - 8.9125E+03 1.6686E-10 9.1447E-11 4.7217E-12 3.7845E-12 - 1.0000E+04 1.0936E-10 6.1236E-11 3.1421E-12 2.5059E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4614E+04 1.4313E+04 6.8236E+03 6.7482E+03 - 1.1220E-01 1.2514E+04 1.2269E+04 5.9116E+03 5.8185E+03 - 1.2589E-01 1.0686E+04 1.0466E+04 5.0974E+03 4.9733E+03 - 1.4125E-01 9.0970E+03 8.8717E+03 4.3413E+03 4.2141E+03 - 1.5849E-01 7.6791E+03 7.4371E+03 3.6348E+03 3.5151E+03 - 1.7783E-01 6.4065E+03 6.1466E+03 3.0508E+03 2.9208E+03 - 1.9953E-01 5.2850E+03 5.0574E+03 2.5466E+03 2.4276E+03 - 2.2387E-01 4.3131E+03 4.1156E+03 2.0918E+03 1.9840E+03 - 2.5119E-01 3.4925E+03 3.3078E+03 1.7049E+03 1.6023E+03 - 2.8184E-01 2.7873E+03 2.6461E+03 1.3839E+03 1.2963E+03 - 3.1623E-01 2.2164E+03 2.1021E+03 1.1190E+03 1.0332E+03 - 3.5481E-01 1.7556E+03 1.6615E+03 8.8965E+02 8.1062E+02 - 3.9811E-01 1.3724E+03 1.3044E+03 6.9885E+02 6.3864E+02 - 4.4668E-01 1.0654E+03 1.0173E+03 5.5059E+02 4.9898E+02 - 5.0119E-01 8.3036E+02 7.8725E+02 4.3129E+02 3.8545E+02 - 5.6234E-01 6.4179E+02 6.0473E+02 3.3513E+02 2.9682E+02 - 6.3096E-01 4.9394E+02 4.6583E+02 2.5894E+02 2.2801E+02 - 7.0795E-01 3.7987E+02 3.5810E+02 2.0023E+02 1.7377E+02 - 7.9433E-01 2.8700E+02 2.7136E+02 1.5309E+02 1.3217E+02 - 8.9125E-01 2.1960E+02 2.0625E+02 1.1538E+02 1.0015E+02 - 1.0000E+00 1.6625E+02 1.5600E+02 8.7652E+01 7.4235E+01 - 1.1220E+00 1.2574E+02 1.1767E+02 6.6376E+01 5.5816E+01 - 1.2589E+00 9.4619E+01 8.8651E+01 4.9926E+01 4.1660E+01 - 1.4125E+00 7.0922E+01 6.6498E+01 3.7228E+01 3.0339E+01 - 1.5849E+00 5.3507E+01 4.9307E+01 2.7771E+01 2.2135E+01 - 1.7783E+00 4.0123E+01 3.6724E+01 2.0483E+01 1.6205E+01 - 1.9953E+00 2.9302E+01 2.7278E+01 1.4907E+01 1.1727E+01 - 2.2387E+00 2.1725E+01 1.9990E+01 1.0716E+01 8.6184E+00 - 2.5119E+00 1.6082E+01 1.4515E+01 7.8630E+00 6.2035E+00 - 2.8184E+00 1.1735E+01 1.0532E+01 5.6710E+00 4.3532E+00 - 3.1623E+00 8.4589E+00 7.6295E+00 4.0114E+00 3.0838E+00 - 3.5481E+00 6.1662E+00 5.5518E+00 2.8654E+00 2.1883E+00 - 3.9811E+00 4.5053E+00 4.0104E+00 2.0122E+00 1.5269E+00 - 4.4668E+00 3.2648E+00 2.9041E+00 1.3995E+00 1.0512E+00 - 5.0119E+00 2.3655E+00 2.0931E+00 9.8077E-01 7.3532E-01 - 5.6234E+00 1.6882E+00 1.4767E+00 6.8883E-01 5.1455E-01 - 6.3096E+00 1.1962E+00 1.0584E+00 4.7455E-01 3.5224E-01 - 7.0795E+00 8.7688E-01 7.5228E-01 3.3102E-01 2.3743E-01 - 7.9433E+00 6.3174E-01 5.2773E-01 2.2789E-01 1.6314E-01 - 8.9125E+00 4.4206E-01 3.6932E-01 1.5315E-01 1.1451E-01 - 1.0000E+01 3.2049E-01 2.6785E-01 1.0337E-01 7.7705E-02 - 1.1220E+01 2.2951E-01 1.9077E-01 6.9854E-02 5.1840E-02 - 1.2589E+01 1.6310E-01 1.3584E-01 4.6672E-02 3.5925E-02 - 1.4125E+01 1.1564E-01 9.5913E-02 3.1774E-02 2.4066E-02 - 1.5849E+01 8.3033E-02 6.7516E-02 2.1355E-02 1.5896E-02 - 1.7783E+01 5.8977E-02 4.8054E-02 1.4287E-02 1.0545E-02 - 1.9953E+01 4.2256E-02 3.4067E-02 9.6662E-03 7.1287E-03 - 2.2387E+01 3.0683E-02 2.3997E-02 6.4182E-03 5.0380E-03 - 2.5119E+01 2.1997E-02 1.7050E-02 4.3017E-03 3.3772E-03 - 2.8184E+01 1.5798E-02 1.1907E-02 2.9046E-03 2.1766E-03 - 3.1623E+01 1.0954E-02 8.4866E-03 1.8989E-03 1.4595E-03 - 3.5481E+01 7.7897E-03 6.0065E-03 1.2626E-03 9.7433E-04 - 3.9811E+01 5.5414E-03 4.2601E-03 8.4026E-04 6.5197E-04 - 4.4668E+01 3.9454E-03 3.0152E-03 5.6554E-04 4.3977E-04 - 5.0119E+01 2.8078E-03 2.1198E-03 3.7755E-04 2.9187E-04 - 5.6234E+01 1.9908E-03 1.4866E-03 2.4905E-04 1.9306E-04 - 6.3096E+01 1.4095E-03 1.0559E-03 1.6410E-04 1.3020E-04 - 7.0795E+01 1.0017E-03 7.4771E-04 1.0909E-04 8.7265E-05 - 7.9433E+01 7.0984E-04 5.2341E-04 7.3718E-05 5.8457E-05 - 8.9125E+01 5.0325E-04 3.6733E-04 4.8109E-05 3.8319E-05 - 1.0000E+02 3.5400E-04 2.5804E-04 3.2169E-05 2.5689E-05 - 1.1220E+02 2.4991E-04 1.8078E-04 2.1436E-05 1.7219E-05 - 1.2589E+02 1.7635E-04 1.2636E-04 1.4337E-05 1.1539E-05 - 1.4125E+02 1.2410E-04 8.8742E-05 9.6640E-06 7.6454E-06 - 1.5849E+02 8.7247E-05 6.1813E-05 6.4338E-06 5.1332E-06 - 1.7783E+02 6.1227E-05 4.3238E-05 4.2828E-06 3.4716E-06 - 1.9953E+02 4.2902E-05 3.0102E-05 2.8009E-06 2.3544E-06 - 2.2387E+02 3.0166E-05 2.0764E-05 1.8743E-06 1.5327E-06 - 2.5119E+02 2.1159E-05 1.4486E-05 1.2809E-06 1.0386E-06 - 2.8184E+02 1.4776E-05 1.0152E-05 8.4338E-07 7.3354E-07 - 3.1623E+02 1.0318E-05 7.0375E-06 5.7255E-07 4.7267E-07 - 3.5481E+02 7.1833E-06 4.8727E-06 3.8648E-07 3.1912E-07 - 3.9811E+02 5.0233E-06 3.3683E-06 2.6278E-07 2.1901E-07 - 4.4668E+02 3.5148E-06 2.3323E-06 1.8031E-07 1.4626E-07 - 5.0119E+02 2.4577E-06 1.6171E-06 1.2125E-07 9.7675E-08 - 5.6234E+02 1.7122E-06 1.1110E-06 8.1603E-08 6.4657E-08 - 6.3096E+02 1.1856E-06 7.6277E-07 5.4995E-08 4.4070E-08 - 7.0795E+02 8.2546E-07 5.2676E-07 3.6972E-08 3.0144E-08 - 7.9433E+02 5.7261E-07 3.6448E-07 2.5305E-08 2.0233E-08 - 8.9125E+02 3.9649E-07 2.5041E-07 1.6775E-08 1.3727E-08 - 1.0000E+03 2.7474E-07 1.7194E-07 1.1133E-08 9.0481E-09 - 1.1220E+03 1.8780E-07 1.1782E-07 7.4595E-09 6.0399E-09 - 1.2589E+03 1.3029E-07 8.0793E-08 5.0933E-09 3.9902E-09 - 1.4125E+03 9.0431E-08 5.4828E-08 3.5665E-09 2.6961E-09 - 1.5849E+03 6.1636E-08 3.7082E-08 2.3447E-09 1.8205E-09 - 1.7783E+03 4.2167E-08 2.5016E-08 1.5633E-09 1.2112E-09 - 1.9953E+03 2.8788E-08 1.7378E-08 1.0141E-09 7.7706E-10 - 2.2387E+03 1.9659E-08 1.1783E-08 7.0455E-10 5.3791E-10 - 2.5119E+03 1.3359E-08 7.9038E-09 5.0130E-10 3.5903E-10 - 2.8184E+03 9.0699E-09 5.2993E-09 3.1358E-10 2.4185E-10 - 3.1623E+03 6.2605E-09 3.6524E-09 2.0743E-10 1.5475E-10 - 3.5481E+03 4.1659E-09 2.4053E-09 1.3718E-10 1.0121E-10 - 3.9811E+03 2.8129E-09 1.6224E-09 9.0216E-11 6.7743E-11 - 4.4668E+03 1.8892E-09 1.0798E-09 6.1005E-11 4.4954E-11 - 5.0119E+03 1.2547E-09 7.2469E-10 3.8508E-11 2.7511E-11 - 5.6234E+03 8.3915E-10 4.8675E-10 2.4755E-11 1.7920E-11 - 6.3096E+03 5.6580E-10 3.2003E-10 1.6804E-11 1.2177E-11 - 7.0795E+03 3.8031E-10 2.1055E-10 1.0915E-11 8.1016E-12 - 7.9433E+03 2.5474E-10 1.3986E-10 7.6765E-12 5.3840E-12 - 8.9125E+03 1.6673E-10 9.1957E-11 4.6297E-12 3.6044E-12 - 1.0000E+04 1.0873E-10 6.0806E-11 2.8679E-12 2.3000E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4639E+04 1.4422E+04 6.9493E+03 6.8156E+03 - 1.1220E-01 1.2558E+04 1.2345E+04 6.0290E+03 5.9217E+03 - 1.2589E-01 1.0783E+04 1.0541E+04 5.1624E+03 5.0727E+03 - 1.4125E-01 9.2146E+03 8.9299E+03 4.3816E+03 4.2554E+03 - 1.5849E-01 7.7701E+03 7.5007E+03 3.7100E+03 3.5597E+03 - 1.7783E-01 6.4599E+03 6.2317E+03 3.0973E+03 2.9824E+03 - 1.9953E-01 5.3208E+03 5.1286E+03 2.5627E+03 2.4582E+03 - 2.2387E-01 4.3622E+03 4.1916E+03 2.1266E+03 2.0055E+03 - 2.5119E-01 3.5253E+03 3.3871E+03 1.7500E+03 1.6336E+03 - 2.8184E-01 2.8110E+03 2.7016E+03 1.4135E+03 1.3122E+03 - 3.1623E-01 2.2363E+03 2.1478E+03 1.1337E+03 1.0397E+03 - 3.5481E-01 1.7726E+03 1.6991E+03 9.0260E+02 8.2258E+02 - 3.9811E-01 1.3890E+03 1.3287E+03 7.0760E+02 6.4813E+02 - 4.4668E-01 1.0844E+03 1.0381E+03 5.5560E+02 5.0443E+02 - 5.0119E-01 8.3944E+02 8.0523E+02 4.3837E+02 3.9290E+02 - 5.6234E-01 6.5099E+02 6.1731E+02 3.4070E+02 3.0220E+02 - 6.3096E-01 5.0166E+02 4.7154E+02 2.6067E+02 2.2973E+02 - 7.0795E-01 3.8214E+02 3.5883E+02 2.0111E+02 1.7448E+02 - 7.9433E-01 2.9252E+02 2.7437E+02 1.5566E+02 1.3074E+02 - 8.9125E-01 2.2223E+02 2.0783E+02 1.1940E+02 9.8549E+01 - 1.0000E+00 1.6723E+02 1.5705E+02 8.9134E+01 7.4914E+01 - 1.1220E+00 1.2611E+02 1.1861E+02 6.6437E+01 5.5662E+01 - 1.2589E+00 9.5051E+01 8.9118E+01 4.9728E+01 4.1679E+01 - 1.4125E+00 7.0978E+01 6.6508E+01 3.7121E+01 3.0928E+01 - 1.5849E+00 5.3098E+01 4.9671E+01 2.7470E+01 2.2602E+01 - 1.7783E+00 3.9582E+01 3.6635E+01 2.0534E+01 1.6469E+01 - 1.9953E+00 2.9546E+01 2.6842E+01 1.5188E+01 1.1886E+01 - 2.2387E+00 2.1919E+01 2.0047E+01 1.0928E+01 8.4358E+00 - 2.5119E+00 1.6023E+01 1.4791E+01 7.8736E+00 6.1405E+00 - 2.8184E+00 1.1672E+01 1.0673E+01 5.6311E+00 4.3862E+00 - 3.1623E+00 8.4586E+00 7.6183E+00 4.0153E+00 3.1053E+00 - 3.5481E+00 6.1397E+00 5.5434E+00 2.8543E+00 2.1850E+00 - 3.9811E+00 4.4416E+00 4.0431E+00 2.0146E+00 1.5245E+00 - 4.4668E+00 3.2377E+00 2.8741E+00 1.4085E+00 1.0652E+00 - 5.0119E+00 2.3260E+00 2.0608E+00 9.8714E-01 7.4108E-01 - 5.6234E+00 1.6669E+00 1.4814E+00 6.7994E-01 5.0390E-01 - 6.3096E+00 1.2012E+00 1.0492E+00 4.6306E-01 3.4299E-01 - 7.0795E+00 8.5586E-01 7.5134E-01 3.1683E-01 2.3360E-01 - 7.9433E+00 6.0881E-01 5.2617E-01 2.2195E-01 1.6044E-01 - 8.9125E+00 4.4120E-01 3.6907E-01 1.5141E-01 1.1214E-01 - 1.0000E+01 3.1482E-01 2.6682E-01 1.0317E-01 7.6648E-02 - 1.1220E+01 2.2438E-01 1.8837E-01 7.0266E-02 5.2434E-02 - 1.2589E+01 1.6161E-01 1.3325E-01 4.7567E-02 3.5468E-02 - 1.4125E+01 1.1541E-01 9.3795E-02 3.1628E-02 2.3217E-02 - 1.5849E+01 8.2357E-02 6.5683E-02 2.1482E-02 1.5363E-02 - 1.7783E+01 5.9238E-02 4.6850E-02 1.4256E-02 1.0440E-02 - 1.9953E+01 4.1622E-02 3.3443E-02 9.4579E-03 7.0691E-03 - 2.2387E+01 2.9459E-02 2.3615E-02 6.1922E-03 4.8329E-03 - 2.5119E+01 2.1416E-02 1.6609E-02 4.1218E-03 3.1686E-03 - 2.8184E+01 1.5428E-02 1.1813E-02 2.8308E-03 2.2102E-03 - 3.1623E+01 1.0878E-02 8.4637E-03 1.8832E-03 1.4521E-03 - 3.5481E+01 7.7521E-03 6.0006E-03 1.2588E-03 9.7068E-04 - 3.9811E+01 5.5201E-03 4.2375E-03 8.3580E-04 6.5505E-04 - 4.4668E+01 3.9264E-03 2.9907E-03 5.5503E-04 4.3455E-04 - 5.0119E+01 2.7931E-03 2.1183E-03 3.7179E-04 2.8612E-04 - 5.6234E+01 1.9922E-03 1.4951E-03 2.4852E-04 1.9107E-04 - 6.3096E+01 1.4087E-03 1.0520E-03 1.6421E-04 1.2981E-04 - 7.0795E+01 9.9540E-04 7.4281E-04 1.0790E-04 8.6980E-05 - 7.9433E+01 7.0730E-04 5.2128E-04 7.0469E-05 5.7321E-05 - 8.9125E+01 5.0367E-04 3.6559E-04 4.7762E-05 3.8418E-05 - 1.0000E+02 3.5252E-04 2.5697E-04 3.2267E-05 2.5877E-05 - 1.1220E+02 2.4870E-04 1.8028E-04 2.1502E-05 1.7265E-05 - 1.2589E+02 1.7540E-04 1.2596E-04 1.4196E-05 1.1390E-05 - 1.4125E+02 1.2324E-04 8.7803E-05 9.2991E-06 7.6927E-06 - 1.5849E+02 8.6844E-05 6.1156E-05 6.2215E-06 5.2108E-06 - 1.7783E+02 6.1023E-05 4.2795E-05 4.2505E-06 3.4783E-06 - 1.9953E+02 4.2794E-05 2.9943E-05 2.8640E-06 2.3219E-06 - 2.2387E+02 3.0121E-05 2.0875E-05 1.8780E-06 1.5638E-06 - 2.5119E+02 2.1129E-05 1.4589E-05 1.3064E-06 1.0490E-06 - 2.8184E+02 1.4753E-05 1.0106E-05 8.6399E-07 7.2309E-07 - 3.1623E+02 1.0311E-05 6.9873E-06 5.8833E-07 4.7990E-07 - 3.5481E+02 7.1976E-06 4.8623E-06 3.9297E-07 3.1964E-07 - 3.9811E+02 5.0357E-06 3.3635E-06 2.6470E-07 2.1424E-07 - 4.4668E+02 3.5049E-06 2.3198E-06 1.8331E-07 1.4453E-07 - 5.0119E+02 2.4418E-06 1.6102E-06 1.2361E-07 9.5864E-08 - 5.6234E+02 1.7070E-06 1.1082E-06 8.1006E-08 6.5306E-08 - 6.3096E+02 1.1852E-06 7.6433E-07 5.5371E-08 4.3217E-08 - 7.0795E+02 8.2642E-07 5.2681E-07 3.7135E-08 2.7933E-08 - 7.9433E+02 5.7292E-07 3.6367E-07 2.4883E-08 1.9090E-08 - 8.9125E+02 3.9389E-07 2.5094E-07 1.6623E-08 1.3262E-08 - 1.0000E+03 2.7379E-07 1.7211E-07 1.1312E-08 9.0377E-09 - 1.1220E+03 1.8868E-07 1.1738E-07 7.6715E-09 6.0740E-09 - 1.2589E+03 1.3034E-07 8.0969E-08 5.1487E-09 4.0427E-09 - 1.4125E+03 8.9048E-08 5.5657E-08 3.6226E-09 2.6672E-09 - 1.5849E+03 6.1008E-08 3.7936E-08 2.4059E-09 1.7408E-09 - 1.7783E+03 4.2178E-08 2.5784E-08 1.5625E-09 1.1314E-09 - 1.9953E+03 2.8902E-08 1.7284E-08 1.0534E-09 8.0510E-10 - 2.2387E+03 1.9705E-08 1.1716E-08 7.0245E-10 5.3641E-10 - 2.5119E+03 1.3538E-08 8.0360E-09 4.8412E-10 3.5367E-10 - 2.8184E+03 9.0986E-09 5.3664E-09 3.2116E-10 2.3827E-10 - 3.1623E+03 6.2258E-09 3.6556E-09 2.0548E-10 1.5427E-10 - 3.5481E+03 4.1387E-09 2.4068E-09 1.3466E-10 1.0439E-10 - 3.9811E+03 2.7811E-09 1.6183E-09 8.8065E-11 6.7986E-11 - 4.4668E+03 1.8697E-09 1.0812E-09 5.7411E-11 4.0135E-11 - 5.0119E+03 1.2567E-09 7.2704E-10 3.8984E-11 2.6940E-11 - 5.6234E+03 8.3628E-10 4.8092E-10 2.6450E-11 1.9412E-11 - 6.3096E+03 5.6280E-10 3.1845E-10 1.7279E-11 1.2933E-11 - 7.0795E+03 3.7278E-10 2.1050E-10 1.1897E-11 8.3644E-12 - 7.9433E+03 2.4883E-10 1.3945E-10 7.5944E-12 4.9366E-12 - 8.9125E+03 1.6631E-10 9.1487E-11 4.9900E-12 3.3172E-12 - 1.0000E+04 1.0964E-10 6.0005E-11 3.0877E-12 2.4981E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4794E+04 1.4750E+04 7.0743E+03 6.8470E+03 - 1.1220E-01 1.2741E+04 1.2671E+04 6.1441E+03 5.9444E+03 - 1.2589E-01 1.0894E+04 1.0809E+04 5.2831E+03 5.0744E+03 - 1.4125E-01 9.2553E+03 9.1612E+03 4.5022E+03 4.2797E+03 - 1.5849E-01 7.8426E+03 7.6959E+03 3.7984E+03 3.5844E+03 - 1.7783E-01 6.5700E+03 6.4011E+03 3.1852E+03 2.9868E+03 - 1.9953E-01 5.4050E+03 5.2701E+03 2.6524E+03 2.4677E+03 - 2.2387E-01 4.3956E+03 4.2861E+03 2.1923E+03 1.9993E+03 - 2.5119E-01 3.5324E+03 3.4567E+03 1.7987E+03 1.6182E+03 - 2.8184E-01 2.8292E+03 2.7621E+03 1.4604E+03 1.3135E+03 - 3.1623E-01 2.2626E+03 2.1916E+03 1.1758E+03 1.0544E+03 - 3.5481E-01 1.7858E+03 1.7252E+03 9.3625E+02 8.3641E+02 - 3.9811E-01 1.4056E+03 1.3543E+03 7.3516E+02 6.5365E+02 - 4.4668E-01 1.0995E+03 1.0628E+03 5.7239E+02 5.0720E+02 - 5.0119E-01 8.5332E+02 8.2132E+02 4.5043E+02 3.9468E+02 - 5.6234E-01 6.5617E+02 6.2690E+02 3.5070E+02 3.0516E+02 - 6.3096E-01 5.0086E+02 4.7849E+02 2.7192E+02 2.3078E+02 - 7.0795E-01 3.8274E+02 3.6608E+02 2.0814E+02 1.7481E+02 - 7.9433E-01 2.9250E+02 2.7802E+02 1.5894E+02 1.3403E+02 - 8.9125E-01 2.2211E+02 2.1296E+02 1.2011E+02 1.0218E+02 - 1.0000E+00 1.6685E+02 1.5927E+02 8.9783E+01 7.5595E+01 - 1.1220E+00 1.2616E+02 1.2002E+02 6.7481E+01 5.6397E+01 - 1.2589E+00 9.5388E+01 8.9877E+01 5.0117E+01 4.1696E+01 - 1.4125E+00 7.1188E+01 6.7322E+01 3.7510E+01 3.0167E+01 - 1.5849E+00 5.3138E+01 4.9976E+01 2.8014E+01 2.2266E+01 - 1.7783E+00 3.9799E+01 3.6680E+01 2.0641E+01 1.6428E+01 - 1.9953E+00 2.9465E+01 2.7121E+01 1.5014E+01 1.1759E+01 - 2.2387E+00 2.1731E+01 1.9607E+01 1.0803E+01 8.4454E+00 - 2.5119E+00 1.5825E+01 1.4220E+01 7.9421E+00 6.1972E+00 - 2.8184E+00 1.1373E+01 1.0603E+01 5.7827E+00 4.5020E+00 - 3.1623E+00 8.5007E+00 7.7120E+00 4.0282E+00 3.1038E+00 - 3.5481E+00 6.1645E+00 5.5404E+00 2.8752E+00 2.1850E+00 - 3.9811E+00 4.4708E+00 3.9812E+00 2.0044E+00 1.5461E+00 - 4.4668E+00 3.2282E+00 2.8699E+00 1.3959E+00 1.0860E+00 - 5.0119E+00 2.3387E+00 2.0651E+00 9.7388E-01 7.5589E-01 - 5.6234E+00 1.6921E+00 1.4817E+00 6.7975E-01 5.1150E-01 - 6.3096E+00 1.2069E+00 1.0510E+00 4.7853E-01 3.5325E-01 - 7.0795E+00 8.5706E-01 7.4682E-01 3.2251E-01 2.4221E-01 - 7.9433E+00 6.1138E-01 5.2984E-01 2.1693E-01 1.6856E-01 - 8.9125E+00 4.3994E-01 3.7383E-01 1.5243E-01 1.1634E-01 - 1.0000E+01 3.2044E-01 2.6635E-01 1.0316E-01 7.8231E-02 - 1.1220E+01 2.2819E-01 1.8927E-01 6.9531E-02 5.2493E-02 - 1.2589E+01 1.6297E-01 1.3579E-01 4.6949E-02 3.5883E-02 - 1.4125E+01 1.1642E-01 9.5430E-02 3.1881E-02 2.4178E-02 - 1.5849E+01 8.3625E-02 6.7148E-02 2.1417E-02 1.5916E-02 - 1.7783E+01 5.9807E-02 4.7666E-02 1.4257E-02 1.0865E-02 - 1.9953E+01 4.2597E-02 3.3858E-02 9.5435E-03 7.3309E-03 - 2.2387E+01 2.9813E-02 2.4125E-02 6.2923E-03 4.7200E-03 - 2.5119E+01 2.0765E-02 1.6999E-02 4.2210E-03 3.3500E-03 - 2.8184E+01 1.5122E-02 1.1968E-02 2.9207E-03 2.3453E-03 - 3.1623E+01 1.0924E-02 8.4997E-03 1.8873E-03 1.4677E-03 - 3.5481E+01 7.7754E-03 6.0031E-03 1.2526E-03 9.7733E-04 - 3.9811E+01 5.5430E-03 4.2423E-03 8.3661E-04 6.4873E-04 - 4.4668E+01 3.9313E-03 2.9897E-03 5.5584E-04 4.3580E-04 - 5.0119E+01 2.7909E-03 2.1099E-03 3.6822E-04 2.8933E-04 - 5.6234E+01 1.9866E-03 1.4926E-03 2.4361E-04 1.9125E-04 - 6.3096E+01 1.4084E-03 1.0550E-03 1.6143E-04 1.2869E-04 - 7.0795E+01 1.0031E-03 7.4223E-04 1.0869E-04 8.7188E-05 - 7.9433E+01 7.1289E-04 5.2290E-04 7.3020E-05 5.8259E-05 - 8.9125E+01 5.0206E-04 3.6530E-04 4.7535E-05 3.8022E-05 - 1.0000E+02 3.5323E-04 2.5653E-04 3.1946E-05 2.5789E-05 - 1.1220E+02 2.4850E-04 1.8047E-04 2.1323E-05 1.7231E-05 - 1.2589E+02 1.7567E-04 1.2615E-04 1.4391E-05 1.1496E-05 - 1.4125E+02 1.2390E-04 8.7644E-05 9.5436E-06 7.6869E-06 - 1.5849E+02 8.6929E-05 6.1490E-05 6.2823E-06 5.1949E-06 - 1.7783E+02 6.1052E-05 4.3143E-05 4.1734E-06 3.4415E-06 - 1.9953E+02 4.2642E-05 2.9985E-05 2.8110E-06 2.3085E-06 - 2.2387E+02 2.9857E-05 2.0800E-05 1.8663E-06 1.5898E-06 - 2.5119E+02 2.1065E-05 1.4463E-05 1.2829E-06 1.0715E-06 - 2.8184E+02 1.4731E-05 1.0023E-05 8.9206E-07 6.8391E-07 - 3.1623E+02 1.0370E-05 6.9712E-06 5.8596E-07 4.6710E-07 - 3.5481E+02 7.2103E-06 4.8380E-06 3.9182E-07 3.1796E-07 - 3.9811E+02 5.0052E-06 3.3358E-06 2.6399E-07 2.2061E-07 - 4.4668E+02 3.4877E-06 2.3119E-06 1.7813E-07 1.4988E-07 - 5.0119E+02 2.4389E-06 1.5984E-06 1.1873E-07 9.6450E-08 - 5.6234E+02 1.7090E-06 1.1117E-06 8.2355E-08 6.5372E-08 - 6.3096E+02 1.1865E-06 7.6549E-07 5.4605E-08 4.4402E-08 - 7.0795E+02 8.2578E-07 5.2749E-07 3.6378E-08 2.9647E-08 - 7.9433E+02 5.7315E-07 3.6336E-07 2.5405E-08 1.9561E-08 - 8.9125E+02 3.9735E-07 2.4850E-07 1.7080E-08 1.3135E-08 - 1.0000E+03 2.7519E-07 1.7205E-07 1.1223E-08 8.8313E-09 - 1.1220E+03 1.8788E-07 1.1863E-07 7.6242E-09 5.9256E-09 - 1.2589E+03 1.2917E-07 8.1051E-08 5.0796E-09 3.9732E-09 - 1.4125E+03 8.8738E-08 5.5156E-08 3.4660E-09 2.7293E-09 - 1.5849E+03 6.1135E-08 3.7268E-08 2.3855E-09 1.9033E-09 - 1.7783E+03 4.2181E-08 2.5486E-08 1.5312E-09 1.1700E-09 - 1.9953E+03 2.8799E-08 1.7410E-08 1.0030E-09 8.0279E-10 - 2.2387E+03 1.9509E-08 1.1707E-08 6.9290E-10 5.1885E-10 - 2.5119E+03 1.3262E-08 7.8817E-09 4.7585E-10 3.4799E-10 - 2.8184E+03 9.0653E-09 5.2754E-09 3.0688E-10 2.4323E-10 - 3.1623E+03 6.2469E-09 3.6587E-09 1.9941E-10 1.5600E-10 - 3.5481E+03 4.1653E-09 2.4290E-09 1.3297E-10 1.0444E-10 - 3.9811E+03 2.8163E-09 1.6213E-09 9.2194E-11 6.6889E-11 - 4.4668E+03 1.8796E-09 1.0824E-09 6.1079E-11 4.1096E-11 - 5.0119E+03 1.2602E-09 7.2430E-10 3.9419E-11 2.6140E-11 - 5.6234E+03 8.4669E-10 4.8287E-10 2.5841E-11 1.7962E-11 - 6.3096E+03 5.6187E-10 3.1886E-10 1.6755E-11 1.2390E-11 - 7.0795E+03 3.7621E-10 2.1431E-10 1.0551E-11 8.1058E-12 - 7.9433E+03 2.5126E-10 1.3970E-10 7.4124E-12 5.3304E-12 - 8.9125E+03 1.6517E-10 9.0782E-11 5.1607E-12 3.5369E-12 - 1.0000E+04 1.0888E-10 6.0571E-11 3.1252E-12 2.3553E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4873E+04 1.5036E+04 7.2615E+03 6.8415E+03 - 1.1220E-01 1.2791E+04 1.2914E+04 6.3122E+03 5.9126E+03 - 1.2589E-01 1.1008E+04 1.1006E+04 5.4482E+03 5.0486E+03 - 1.4125E-01 9.3890E+03 9.3320E+03 4.6451E+03 4.2631E+03 - 1.5849E-01 7.9385E+03 7.8824E+03 3.9455E+03 3.5625E+03 - 1.7783E-01 6.6248E+03 6.5312E+03 3.3150E+03 2.9721E+03 - 1.9953E-01 5.4298E+03 5.3492E+03 2.7437E+03 2.4494E+03 - 2.2387E-01 4.4298E+03 4.3704E+03 2.2788E+03 1.9936E+03 - 2.5119E-01 3.5794E+03 3.5375E+03 1.8765E+03 1.6265E+03 - 2.8184E-01 2.8608E+03 2.8305E+03 1.5176E+03 1.3062E+03 - 3.1623E-01 2.2823E+03 2.2519E+03 1.2204E+03 1.0428E+03 - 3.5481E-01 1.8017E+03 1.7788E+03 9.7733E+02 8.1851E+02 - 3.9811E-01 1.4032E+03 1.3887E+03 7.7075E+02 6.4242E+02 - 4.4668E-01 1.0968E+03 1.0809E+03 6.0222E+02 5.0830E+02 - 5.0119E-01 8.5332E+02 8.3761E+02 4.7194E+02 3.9195E+02 - 5.6234E-01 6.5536E+02 6.4196E+02 3.6581E+02 3.0018E+02 - 6.3096E-01 5.0216E+02 4.9178E+02 2.8350E+02 2.2970E+02 - 7.0795E-01 3.8336E+02 3.7722E+02 2.1769E+02 1.7399E+02 - 7.9433E-01 2.9308E+02 2.8482E+02 1.6389E+02 1.3350E+02 - 8.9125E-01 2.2364E+02 2.1719E+02 1.2240E+02 9.9694E+01 - 1.0000E+00 1.6741E+02 1.6203E+02 9.2100E+01 7.4679E+01 - 1.1220E+00 1.2592E+02 1.2120E+02 6.9361E+01 5.5678E+01 - 1.2589E+00 9.5224E+01 9.0963E+01 5.1493E+01 4.1166E+01 - 1.4125E+00 7.1686E+01 6.8141E+01 3.7946E+01 3.0195E+01 - 1.5849E+00 5.3856E+01 5.0590E+01 2.8159E+01 2.2174E+01 - 1.7783E+00 4.0007E+01 3.7097E+01 2.0921E+01 1.6302E+01 - 1.9953E+00 2.9618E+01 2.7388E+01 1.5298E+01 1.2020E+01 - 2.2387E+00 2.1987E+01 2.0203E+01 1.1063E+01 8.7522E+00 - 2.5119E+00 1.5982E+01 1.4810E+01 7.9780E+00 6.2222E+00 - 2.8184E+00 1.1527E+01 1.0719E+01 5.6784E+00 4.3975E+00 - 3.1623E+00 8.4602E+00 7.7505E+00 4.0365E+00 3.1485E+00 - 3.5481E+00 6.1945E+00 5.5870E+00 2.8608E+00 2.2094E+00 - 3.9811E+00 4.4825E+00 4.0171E+00 2.0165E+00 1.5423E+00 - 4.4668E+00 3.2408E+00 2.9017E+00 1.4186E+00 1.0751E+00 - 5.0119E+00 2.3594E+00 2.0679E+00 9.8287E-01 7.4989E-01 - 5.6234E+00 1.6979E+00 1.4656E+00 6.8444E-01 5.2389E-01 - 6.3096E+00 1.2045E+00 1.0540E+00 4.6279E-01 3.5017E-01 - 7.0795E+00 8.6596E-01 7.5507E-01 3.2460E-01 2.3987E-01 - 7.9433E+00 6.2728E-01 5.3430E-01 2.2612E-01 1.7024E-01 - 8.9125E+00 4.4983E-01 3.7822E-01 1.4753E-01 1.1526E-01 - 1.0000E+01 3.2023E-01 2.6698E-01 1.0310E-01 7.7093E-02 - 1.1220E+01 2.2991E-01 1.8948E-01 7.0258E-02 5.1631E-02 - 1.2589E+01 1.6358E-01 1.3321E-01 4.7231E-02 3.4744E-02 - 1.4125E+01 1.1547E-01 9.4949E-02 3.1626E-02 2.3441E-02 - 1.5849E+01 8.2323E-02 6.7860E-02 2.0921E-02 1.5697E-02 - 1.7783E+01 5.9100E-02 4.6602E-02 1.4190E-02 1.0599E-02 - 1.9953E+01 4.2160E-02 3.2738E-02 9.7495E-03 7.3499E-03 - 2.2387E+01 3.0303E-02 2.3791E-02 6.3784E-03 4.8377E-03 - 2.5119E+01 2.1930E-02 1.7108E-02 4.2214E-03 3.2466E-03 - 2.8184E+01 1.5617E-02 1.2028E-02 2.8732E-03 2.2501E-03 - 3.1623E+01 1.0923E-02 8.4968E-03 1.8992E-03 1.4600E-03 - 3.5481E+01 7.7752E-03 6.0145E-03 1.2634E-03 9.7186E-04 - 3.9811E+01 5.5278E-03 4.2494E-03 8.3904E-04 6.5172E-04 - 4.4668E+01 3.9313E-03 2.9984E-03 5.5947E-04 4.3631E-04 - 5.0119E+01 2.7978E-03 2.1190E-03 3.7102E-04 2.9097E-04 - 5.6234E+01 1.9868E-03 1.4979E-03 2.4631E-04 1.9168E-04 - 6.3096E+01 1.4119E-03 1.0616E-03 1.6386E-04 1.2651E-04 - 7.0795E+01 1.0015E-03 7.4378E-04 1.0903E-04 8.5782E-05 - 7.9433E+01 7.0870E-04 5.2153E-04 7.2916E-05 5.8174E-05 - 8.9125E+01 5.0122E-04 3.6530E-04 4.7892E-05 3.8713E-05 - 1.0000E+02 3.5408E-04 2.5676E-04 3.1917E-05 2.5536E-05 - 1.1220E+02 2.5014E-04 1.8019E-04 2.1299E-05 1.7198E-05 - 1.2589E+02 1.7583E-04 1.2606E-04 1.4260E-05 1.1585E-05 - 1.4125E+02 1.2371E-04 8.7955E-05 9.5216E-06 7.8083E-06 - 1.5849E+02 8.7011E-05 6.1533E-05 6.4162E-06 5.1943E-06 - 1.7783E+02 6.1277E-05 4.2887E-05 4.3404E-06 3.4170E-06 - 1.9953E+02 4.2994E-05 2.9835E-05 2.9181E-06 2.3217E-06 - 2.2387E+02 3.0095E-05 2.0861E-05 1.9352E-06 1.5990E-06 - 2.5119E+02 2.1057E-05 1.4428E-05 1.2832E-06 1.0441E-06 - 2.8184E+02 1.4766E-05 1.0070E-05 8.7710E-07 7.0706E-07 - 3.1623E+02 1.0326E-05 6.9879E-06 5.8634E-07 4.7316E-07 - 3.5481E+02 7.2135E-06 4.8549E-06 3.9236E-07 3.1972E-07 - 3.9811E+02 5.0262E-06 3.3585E-06 2.6517E-07 2.1519E-07 - 4.4668E+02 3.5057E-06 2.3262E-06 1.8114E-07 1.4256E-07 - 5.0119E+02 2.4443E-06 1.6145E-06 1.2217E-07 9.7316E-08 - 5.6234E+02 1.7038E-06 1.1138E-06 8.1687E-08 6.5037E-08 - 6.3096E+02 1.1829E-06 7.6446E-07 5.5786E-08 4.3368E-08 - 7.0795E+02 8.2425E-07 5.2750E-07 3.7332E-08 2.9100E-08 - 7.9433E+02 5.7231E-07 3.6366E-07 2.4793E-08 1.9104E-08 - 8.9125E+02 3.9549E-07 2.4848E-07 1.6688E-08 1.3222E-08 - 1.0000E+03 2.7503E-07 1.7145E-07 1.1441E-08 8.8395E-09 - 1.1220E+03 1.8926E-07 1.1744E-07 7.7535E-09 6.0834E-09 - 1.2589E+03 1.3016E-07 8.0542E-08 5.1231E-09 4.0857E-09 - 1.4125E+03 8.9060E-08 5.5127E-08 3.3989E-09 2.6683E-09 - 1.5849E+03 6.0936E-08 3.7434E-08 2.2297E-09 1.7876E-09 - 1.7783E+03 4.2331E-08 2.5306E-08 1.5117E-09 1.2406E-09 - 1.9953E+03 2.8858E-08 1.7409E-08 1.0714E-09 7.9489E-10 - 2.2387E+03 1.9554E-08 1.1890E-08 7.0402E-10 5.3825E-10 - 2.5119E+03 1.3374E-08 8.0159E-09 4.7030E-10 3.6120E-10 - 2.8184E+03 9.1181E-09 5.3397E-09 3.1916E-10 2.2435E-10 - 3.1623E+03 6.2423E-09 3.6735E-09 2.0256E-10 1.5350E-10 - 3.5481E+03 4.1540E-09 2.4230E-09 1.3162E-10 1.0207E-10 - 3.9811E+03 2.7926E-09 1.6232E-09 8.5382E-11 6.6404E-11 - 4.4668E+03 1.8741E-09 1.0809E-09 5.7386E-11 4.4426E-11 - 5.0119E+03 1.2594E-09 7.1627E-10 3.7854E-11 2.8318E-11 - 5.6234E+03 8.4325E-10 4.7577E-10 2.6188E-11 1.6971E-11 - 6.3096E+03 5.6393E-10 3.1585E-10 1.7327E-11 1.2097E-11 - 7.0795E+03 3.7825E-10 2.0870E-10 1.1196E-11 7.7091E-12 - 7.9433E+03 2.5037E-10 1.3720E-10 7.4948E-12 5.2148E-12 - 8.9125E+03 1.6616E-10 8.9780E-11 4.8052E-12 3.3018E-12 - 1.0000E+04 1.1000E-10 6.0579E-11 3.1938E-12 2.1420E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4945E+04 1.5297E+04 7.4337E+03 6.7839E+03 - 1.1220E-01 1.2837E+04 1.3149E+04 6.4870E+03 5.8601E+03 - 1.2589E-01 1.1018E+04 1.1236E+04 5.6120E+03 4.9994E+03 - 1.4125E-01 9.3752E+03 9.5510E+03 4.7833E+03 4.2376E+03 - 1.5849E-01 7.9244E+03 8.0782E+03 4.0395E+03 3.5584E+03 - 1.7783E-01 6.6384E+03 6.7328E+03 3.4154E+03 2.9659E+03 - 1.9953E-01 5.4831E+03 5.5207E+03 2.8460E+03 2.4393E+03 - 2.2387E-01 4.4608E+03 4.4943E+03 2.3602E+03 1.9921E+03 - 2.5119E-01 3.5976E+03 3.6334E+03 1.9493E+03 1.6123E+03 - 2.8184E-01 2.8830E+03 2.9024E+03 1.5734E+03 1.2961E+03 - 3.1623E-01 2.2808E+03 2.2971E+03 1.2532E+03 1.0415E+03 - 3.5481E-01 1.7910E+03 1.8157E+03 9.9730E+02 8.2431E+02 - 3.9811E-01 1.4122E+03 1.4274E+03 7.9243E+02 6.4298E+02 - 4.4668E-01 1.1072E+03 1.1144E+03 6.2591E+02 4.9751E+02 - 5.0119E-01 8.5264E+02 8.5847E+02 4.8546E+02 3.8347E+02 - 5.6234E-01 6.5412E+02 6.5635E+02 3.7152E+02 2.9604E+02 - 6.3096E-01 5.0451E+02 5.0078E+02 2.8539E+02 2.2967E+02 - 7.0795E-01 3.8457E+02 3.8146E+02 2.1881E+02 1.7479E+02 - 7.9433E-01 2.9152E+02 2.9058E+02 1.6625E+02 1.3145E+02 - 8.9125E-01 2.2097E+02 2.2011E+02 1.2647E+02 9.9195E+01 - 1.0000E+00 1.6666E+02 1.6359E+02 9.5345E+01 7.3156E+01 - 1.1220E+00 1.2635E+02 1.2269E+02 7.1090E+01 5.4582E+01 - 1.2589E+00 9.5105E+01 9.1952E+01 5.2788E+01 4.1071E+01 - 1.4125E+00 7.0978E+01 6.8211E+01 3.8834E+01 3.0424E+01 - 1.5849E+00 5.2696E+01 5.0468E+01 2.8419E+01 2.2234E+01 - 1.7783E+00 3.9256E+01 3.7157E+01 2.0737E+01 1.6331E+01 - 1.9953E+00 2.9420E+01 2.7072E+01 1.5108E+01 1.1831E+01 - 2.2387E+00 2.1946E+01 1.9923E+01 1.1046E+01 8.4302E+00 - 2.5119E+00 1.6170E+01 1.4706E+01 7.8726E+00 6.0076E+00 - 2.8184E+00 1.1688E+01 1.0705E+01 5.6255E+00 4.3678E+00 - 3.1623E+00 8.5066E+00 7.7445E+00 4.0631E+00 3.1143E+00 - 3.5481E+00 6.2192E+00 5.6268E+00 2.8726E+00 2.1796E+00 - 3.9811E+00 4.5015E+00 4.0530E+00 2.0085E+00 1.5243E+00 - 4.4668E+00 3.2468E+00 2.8980E+00 1.4156E+00 1.0711E+00 - 5.0119E+00 2.3393E+00 2.0804E+00 9.9827E-01 7.3873E-01 - 5.6234E+00 1.6932E+00 1.4661E+00 6.9148E-01 5.0362E-01 - 6.3096E+00 1.2294E+00 1.0427E+00 4.7356E-01 3.4898E-01 - 7.0795E+00 8.8197E-01 7.4295E-01 3.2641E-01 2.4232E-01 - 7.9433E+00 6.3450E-01 5.3151E-01 2.1851E-01 1.6521E-01 - 8.9125E+00 4.5044E-01 3.7431E-01 1.4549E-01 1.1354E-01 - 1.0000E+01 3.1983E-01 2.6573E-01 1.0041E-01 7.7109E-02 - 1.1220E+01 2.2959E-01 1.8876E-01 6.7723E-02 5.2777E-02 - 1.2589E+01 1.6320E-01 1.3369E-01 4.6407E-02 3.5792E-02 - 1.4125E+01 1.1586E-01 9.4532E-02 3.1875E-02 2.3987E-02 - 1.5849E+01 8.3688E-02 6.7128E-02 2.1503E-02 1.6454E-02 - 1.7783E+01 6.0109E-02 4.7571E-02 1.4253E-02 1.1010E-02 - 1.9953E+01 4.2133E-02 3.3730E-02 9.5977E-03 7.2716E-03 - 2.2387E+01 2.9756E-02 2.3629E-02 6.3829E-03 4.7105E-03 - 2.5119E+01 2.1127E-02 1.6707E-02 4.2392E-03 3.0630E-03 - 2.8184E+01 1.4969E-02 1.1975E-02 2.8165E-03 2.1390E-03 - 3.1623E+01 1.0932E-02 8.4782E-03 1.9034E-03 1.4577E-03 - 3.5481E+01 7.7961E-03 5.9986E-03 1.2653E-03 9.7870E-04 - 3.9811E+01 5.5518E-03 4.2604E-03 8.3744E-04 6.5131E-04 - 4.4668E+01 3.9524E-03 3.0124E-03 5.5553E-04 4.3399E-04 - 5.0119E+01 2.8120E-03 2.1195E-03 3.6905E-04 2.9110E-04 - 5.6234E+01 1.9955E-03 1.4917E-03 2.4661E-04 1.9382E-04 - 6.3096E+01 1.4138E-03 1.0535E-03 1.6663E-04 1.3155E-04 - 7.0795E+01 1.0032E-03 7.4488E-04 1.1027E-04 8.6981E-05 - 7.9433E+01 7.0797E-04 5.2053E-04 7.2626E-05 5.6112E-05 - 8.9125E+01 5.0075E-04 3.6802E-04 4.7856E-05 3.7409E-05 - 1.0000E+02 3.5350E-04 2.5728E-04 3.1881E-05 2.5399E-05 - 1.1220E+02 2.4925E-04 1.8013E-04 2.1219E-05 1.7014E-05 - 1.2589E+02 1.7600E-04 1.2618E-04 1.4285E-05 1.1317E-05 - 1.4125E+02 1.2376E-04 8.8449E-05 9.4717E-06 7.6268E-06 - 1.5849E+02 8.6826E-05 6.1918E-05 6.2800E-06 5.1166E-06 - 1.7783E+02 6.0973E-05 4.3283E-05 4.2294E-06 3.4783E-06 - 1.9953E+02 4.2656E-05 3.0141E-05 2.8678E-06 2.3068E-06 - 2.2387E+02 2.9909E-05 2.1008E-05 1.9390E-06 1.5078E-06 - 2.5119E+02 2.1023E-05 1.4606E-05 1.3049E-06 1.0437E-06 - 2.8184E+02 1.4742E-05 1.0070E-05 8.7478E-07 7.1496E-07 - 3.1623E+02 1.0275E-05 6.9782E-06 5.8109E-07 4.7655E-07 - 3.5481E+02 7.2044E-06 4.8276E-06 3.8601E-07 3.2455E-07 - 3.9811E+02 5.0339E-06 3.3416E-06 2.6287E-07 2.1661E-07 - 4.4668E+02 3.5148E-06 2.3206E-06 1.7756E-07 1.4229E-07 - 5.0119E+02 2.4539E-06 1.6038E-06 1.2033E-07 9.5826E-08 - 5.6234E+02 1.7078E-06 1.1134E-06 8.2216E-08 6.5697E-08 - 6.3096E+02 1.1929E-06 7.6846E-07 5.4884E-08 4.4506E-08 - 7.0795E+02 8.2938E-07 5.3093E-07 3.7499E-08 2.9965E-08 - 7.9433E+02 5.7231E-07 3.6425E-07 2.5315E-08 1.9679E-08 - 8.9125E+02 3.9543E-07 2.4844E-07 1.7105E-08 1.3328E-08 - 1.0000E+03 2.7509E-07 1.7220E-07 1.1420E-08 8.9078E-09 - 1.1220E+03 1.8991E-07 1.1760E-07 7.6635E-09 5.8155E-09 - 1.2589E+03 1.3014E-07 7.9976E-08 5.1217E-09 4.0021E-09 - 1.4125E+03 8.9513E-08 5.4285E-08 3.4297E-09 2.7230E-09 - 1.5849E+03 6.1716E-08 3.7297E-08 2.3355E-09 1.7545E-09 - 1.7783E+03 4.2361E-08 2.5774E-08 1.5571E-09 1.1705E-09 - 1.9953E+03 2.8938E-08 1.7390E-08 1.0672E-09 8.0841E-10 - 2.2387E+03 1.9631E-08 1.1665E-08 7.1642E-10 5.4818E-10 - 2.5119E+03 1.3423E-08 7.8900E-09 4.6212E-10 3.5375E-10 - 2.8184E+03 9.1086E-09 5.3423E-09 2.8791E-10 2.2887E-10 - 3.1623E+03 6.2698E-09 3.6867E-09 1.9821E-10 1.5555E-10 - 3.5481E+03 4.1169E-09 2.4310E-09 1.3550E-10 9.5484E-11 - 3.9811E+03 2.7925E-09 1.6113E-09 9.3183E-11 6.5680E-11 - 4.4668E+03 1.8831E-09 1.0775E-09 5.9934E-11 4.2680E-11 - 5.0119E+03 1.2554E-09 7.2906E-10 3.8904E-11 2.8549E-11 - 5.6234E+03 8.4102E-10 4.7309E-10 2.5484E-11 2.0425E-11 - 6.3096E+03 5.6162E-10 3.1565E-10 1.7317E-11 1.2957E-11 - 7.0795E+03 3.7449E-10 2.1235E-10 1.1804E-11 8.9527E-12 - 7.9433E+03 2.4898E-10 1.3896E-10 8.1825E-12 5.4787E-12 - 8.9125E+03 1.6551E-10 9.0157E-11 4.9348E-12 3.3304E-12 - 1.0000E+04 1.1016E-10 5.9847E-11 3.2058E-12 2.3544E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4937E+04 1.5421E+04 7.5929E+03 6.7899E+03 - 1.1220E-01 1.2885E+04 1.3290E+04 6.6145E+03 5.8223E+03 - 1.2589E-01 1.1053E+04 1.1410E+04 5.7288E+03 4.9623E+03 - 1.4125E-01 9.4114E+03 9.7176E+03 4.9179E+03 4.1916E+03 - 1.5849E-01 7.9615E+03 8.1867E+03 4.1527E+03 3.5205E+03 - 1.7783E-01 6.6334E+03 6.8126E+03 3.4967E+03 2.9314E+03 - 1.9953E-01 5.4777E+03 5.6149E+03 2.9363E+03 2.4103E+03 - 2.2387E-01 4.4741E+03 4.5672E+03 2.4151E+03 1.9715E+03 - 2.5119E-01 3.6103E+03 3.7088E+03 1.9822E+03 1.5948E+03 - 2.8184E-01 2.8849E+03 2.9832E+03 1.6179E+03 1.2790E+03 - 3.1623E-01 2.2899E+03 2.3580E+03 1.2938E+03 1.0198E+03 - 3.5481E-01 1.8041E+03 1.8553E+03 1.0302E+03 8.0197E+02 - 3.9811E-01 1.4133E+03 1.4480E+03 8.1143E+02 6.2907E+02 - 4.4668E-01 1.1061E+03 1.1259E+03 6.3632E+02 4.9731E+02 - 5.0119E-01 8.5361E+02 8.7283E+02 4.9770E+02 3.8411E+02 - 5.6234E-01 6.5649E+02 6.6908E+02 3.8451E+02 2.9273E+02 - 6.3096E-01 5.0648E+02 5.0815E+02 2.9102E+02 2.2597E+02 - 7.0795E-01 3.8608E+02 3.8658E+02 2.2266E+02 1.7120E+02 - 7.9433E-01 2.9071E+02 2.9260E+02 1.7097E+02 1.2912E+02 - 8.9125E-01 2.2049E+02 2.2010E+02 1.2778E+02 9.7192E+01 - 1.0000E+00 1.6754E+02 1.6606E+02 9.5712E+01 7.3383E+01 - 1.1220E+00 1.2653E+02 1.2338E+02 7.1127E+01 5.4619E+01 - 1.2589E+00 9.5936E+01 9.3167E+01 5.3017E+01 4.0617E+01 - 1.4125E+00 7.2174E+01 6.9891E+01 3.9227E+01 3.0296E+01 - 1.5849E+00 5.3568E+01 5.1722E+01 2.8662E+01 2.2320E+01 - 1.7783E+00 3.9707E+01 3.8028E+01 2.0991E+01 1.6250E+01 - 1.9953E+00 2.9247E+01 2.7789E+01 1.5360E+01 1.2018E+01 - 2.2387E+00 2.1797E+01 2.0452E+01 1.1114E+01 8.6448E+00 - 2.5119E+00 1.6029E+01 1.5037E+01 7.9689E+00 6.1272E+00 - 2.8184E+00 1.1615E+01 1.0983E+01 5.7058E+00 4.3213E+00 - 3.1623E+00 8.5589E+00 7.7309E+00 4.1105E+00 3.1011E+00 - 3.5481E+00 6.2196E+00 5.6131E+00 2.8923E+00 2.2009E+00 - 3.9811E+00 4.5046E+00 4.0563E+00 2.0345E+00 1.5339E+00 - 4.4668E+00 3.2410E+00 2.9017E+00 1.4234E+00 1.0636E+00 - 5.0119E+00 2.3486E+00 2.0833E+00 9.9225E-01 7.5241E-01 - 5.6234E+00 1.6974E+00 1.4865E+00 6.8600E-01 5.2121E-01 - 6.3096E+00 1.2121E+00 1.0497E+00 4.7400E-01 3.5665E-01 - 7.0795E+00 8.6513E-01 7.4296E-01 3.2801E-01 2.4778E-01 - 7.9433E+00 6.1605E-01 5.2688E-01 2.2396E-01 1.7212E-01 - 8.9125E+00 4.4431E-01 3.7764E-01 1.5249E-01 1.1570E-01 - 1.0000E+01 3.1982E-01 2.6696E-01 1.0349E-01 7.8274E-02 - 1.1220E+01 2.2932E-01 1.9011E-01 6.9446E-02 5.3980E-02 - 1.2589E+01 1.6280E-01 1.3589E-01 4.7599E-02 3.6236E-02 - 1.4125E+01 1.1478E-01 9.5856E-02 3.2818E-02 2.3853E-02 - 1.5849E+01 8.2337E-02 6.8364E-02 2.1817E-02 1.5959E-02 - 1.7783E+01 5.9505E-02 4.8560E-02 1.4488E-02 1.0821E-02 - 1.9953E+01 4.2826E-02 3.4367E-02 9.8727E-03 7.2698E-03 - 2.2387E+01 3.0487E-02 2.4305E-02 6.5940E-03 4.8843E-03 - 2.5119E+01 2.1401E-02 1.7172E-02 4.2671E-03 3.4261E-03 - 2.8184E+01 1.5151E-02 1.1895E-02 2.8036E-03 2.1709E-03 - 3.1623E+01 1.0915E-02 8.4491E-03 1.8977E-03 1.4573E-03 - 3.5481E+01 7.7807E-03 5.9853E-03 1.2723E-03 9.7194E-04 - 3.9811E+01 5.5340E-03 4.2316E-03 8.3999E-04 6.5429E-04 - 4.4668E+01 3.9372E-03 3.0024E-03 5.6149E-04 4.3769E-04 - 5.0119E+01 2.8101E-03 2.1328E-03 3.7398E-04 2.9096E-04 - 5.6234E+01 1.9945E-03 1.4997E-03 2.4572E-04 1.9323E-04 - 6.3096E+01 1.4067E-03 1.0456E-03 1.6490E-04 1.2812E-04 - 7.0795E+01 9.9817E-04 7.3682E-04 1.1015E-04 8.5080E-05 - 7.9433E+01 7.0574E-04 5.2060E-04 7.1628E-05 5.7294E-05 - 8.9125E+01 5.0102E-04 3.6453E-04 4.7163E-05 3.8535E-05 - 1.0000E+02 3.5268E-04 2.5691E-04 3.2303E-05 2.5797E-05 - 1.1220E+02 2.4920E-04 1.7988E-04 2.1655E-05 1.7223E-05 - 1.2589E+02 1.7581E-04 1.2612E-04 1.4445E-05 1.1523E-05 - 1.4125E+02 1.2357E-04 8.8161E-05 9.6243E-06 7.7615E-06 - 1.5849E+02 8.6998E-05 6.1406E-05 6.4336E-06 5.1617E-06 - 1.7783E+02 6.1182E-05 4.2776E-05 4.3406E-06 3.4377E-06 - 1.9953E+02 4.2884E-05 2.9749E-05 2.8685E-06 2.3480E-06 - 2.2387E+02 3.0046E-05 2.0757E-05 1.9149E-06 1.6011E-06 - 2.5119E+02 2.1070E-05 1.4462E-05 1.2993E-06 1.0385E-06 - 2.8184E+02 1.4789E-05 1.0153E-05 8.5871E-07 6.9158E-07 - 3.1623E+02 1.0316E-05 6.9899E-06 5.7900E-07 4.7202E-07 - 3.5481E+02 7.1962E-06 4.8580E-06 3.9155E-07 3.1972E-07 - 3.9811E+02 5.0353E-06 3.3670E-06 2.6490E-07 2.1828E-07 - 4.4668E+02 3.5156E-06 2.3282E-06 1.7866E-07 1.4570E-07 - 5.0119E+02 2.4539E-06 1.6069E-06 1.2014E-07 9.6080E-08 - 5.6234E+02 1.7087E-06 1.1103E-06 8.1938E-08 6.5043E-08 - 6.3096E+02 1.1886E-06 7.6368E-07 5.4713E-08 4.4029E-08 - 7.0795E+02 8.2963E-07 5.2420E-07 3.6359E-08 2.9481E-08 - 7.9433E+02 5.7503E-07 3.6179E-07 2.5073E-08 2.0060E-08 - 8.9125E+02 3.9690E-07 2.5055E-07 1.7118E-08 1.3133E-08 - 1.0000E+03 2.7530E-07 1.7149E-07 1.1236E-08 8.6601E-09 - 1.1220E+03 1.8847E-07 1.1705E-07 7.4917E-09 5.7623E-09 - 1.2589E+03 1.3028E-07 8.0008E-08 5.1663E-09 3.8259E-09 - 1.4125E+03 9.0061E-08 5.5084E-08 3.4516E-09 2.5769E-09 - 1.5849E+03 6.1812E-08 3.7444E-08 2.2376E-09 1.7537E-09 - 1.7783E+03 4.2265E-08 2.5406E-08 1.5291E-09 1.2125E-09 - 1.9953E+03 2.8765E-08 1.7566E-08 1.0453E-09 8.0836E-10 - 2.2387E+03 1.9627E-08 1.1951E-08 6.8638E-10 5.3507E-10 - 2.5119E+03 1.3474E-08 8.0000E-09 4.5185E-10 3.5476E-10 - 2.8184E+03 9.0944E-09 5.3103E-09 2.9733E-10 2.3021E-10 - 3.1623E+03 6.2667E-09 3.6643E-09 2.0106E-10 1.5275E-10 - 3.5481E+03 4.1527E-09 2.4126E-09 1.3555E-10 9.8801E-11 - 3.9811E+03 2.8123E-09 1.6122E-09 9.3725E-11 6.2877E-11 - 4.4668E+03 1.8897E-09 1.0945E-09 6.3542E-11 4.1956E-11 - 5.0119E+03 1.2586E-09 7.3189E-10 4.0659E-11 2.8986E-11 - 5.6234E+03 8.4357E-10 4.7683E-10 2.6964E-11 1.8847E-11 - 6.3096E+03 5.6332E-10 3.2159E-10 1.7031E-11 1.2096E-11 - 7.0795E+03 3.7455E-10 2.1427E-10 1.1464E-11 8.1249E-12 - 7.9433E+03 2.4821E-10 1.3909E-10 7.5518E-12 4.6862E-12 - 8.9125E+03 1.6623E-10 9.1813E-11 4.9966E-12 3.0218E-12 - 1.0000E+04 1.0994E-10 6.0984E-11 3.0443E-12 2.3243E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4970E+04 1.5492E+04 7.6685E+03 6.7250E+03 - 1.1220E-01 1.2904E+04 1.3366E+04 6.7060E+03 5.8153E+03 - 1.2589E-01 1.1080E+04 1.1443E+04 5.7893E+03 4.9291E+03 - 1.4125E-01 9.4620E+03 9.7751E+03 4.9320E+03 4.1800E+03 - 1.5849E-01 7.9746E+03 8.2633E+03 4.1884E+03 3.5184E+03 - 1.7783E-01 6.6253E+03 6.8864E+03 3.5315E+03 2.9181E+03 - 1.9953E-01 5.4538E+03 5.6793E+03 2.9519E+03 2.3922E+03 - 2.2387E-01 4.4506E+03 4.6426E+03 2.4642E+03 1.9733E+03 - 2.5119E-01 3.5869E+03 3.7363E+03 2.0282E+03 1.6026E+03 - 2.8184E-01 2.8663E+03 2.9881E+03 1.6347E+03 1.2837E+03 - 3.1623E-01 2.2787E+03 2.3856E+03 1.3207E+03 1.0247E+03 - 3.5481E-01 1.7925E+03 1.8824E+03 1.0520E+03 8.0643E+02 - 3.9811E-01 1.4086E+03 1.4662E+03 8.1932E+02 6.3060E+02 - 4.4668E-01 1.1009E+03 1.1352E+03 6.4421E+02 4.9337E+02 - 5.0119E-01 8.5424E+02 8.7472E+02 5.0404E+02 3.8203E+02 - 5.6234E-01 6.5581E+02 6.7023E+02 3.8927E+02 2.9297E+02 - 6.3096E-01 5.0573E+02 5.1420E+02 2.9765E+02 2.2465E+02 - 7.0795E-01 3.8804E+02 3.9283E+02 2.2723E+02 1.7062E+02 - 7.9433E-01 2.9344E+02 2.9648E+02 1.7457E+02 1.3011E+02 - 8.9125E-01 2.2361E+02 2.2367E+02 1.3158E+02 9.8528E+01 - 1.0000E+00 1.6611E+02 1.6726E+02 9.6990E+01 7.2541E+01 - 1.1220E+00 1.2580E+02 1.2508E+02 7.2510E+01 5.3983E+01 - 1.2589E+00 9.5165E+01 9.2920E+01 5.3729E+01 3.9692E+01 - 1.4125E+00 7.0929E+01 6.9198E+01 3.9835E+01 2.9615E+01 - 1.5849E+00 5.3104E+01 5.1703E+01 2.9246E+01 2.2260E+01 - 1.7783E+00 4.0016E+01 3.8036E+01 2.0877E+01 1.6414E+01 - 1.9953E+00 2.9798E+01 2.7903E+01 1.5251E+01 1.1973E+01 - 2.2387E+00 2.1846E+01 2.0406E+01 1.1338E+01 8.4949E+00 - 2.5119E+00 1.5991E+01 1.4726E+01 8.1984E+00 6.1179E+00 - 2.8184E+00 1.1885E+01 1.0832E+01 5.7980E+00 4.5280E+00 - 3.1623E+00 8.5317E+00 7.8427E+00 4.0599E+00 3.1194E+00 - 3.5481E+00 6.2229E+00 5.6404E+00 2.8485E+00 2.1691E+00 - 3.9811E+00 4.5189E+00 4.0325E+00 2.0042E+00 1.5166E+00 - 4.4668E+00 3.2799E+00 2.8994E+00 1.4102E+00 1.0675E+00 - 5.0119E+00 2.3687E+00 2.0780E+00 9.8007E-01 7.4753E-01 - 5.6234E+00 1.6996E+00 1.4803E+00 6.7602E-01 5.0637E-01 - 6.3096E+00 1.2365E+00 1.0601E+00 4.7763E-01 3.4474E-01 - 7.0795E+00 8.8503E-01 7.5569E-01 3.2630E-01 2.4029E-01 - 7.9433E+00 6.3141E-01 5.3359E-01 2.2615E-01 1.6832E-01 - 8.9125E+00 4.5844E-01 3.8418E-01 1.5807E-01 1.1471E-01 - 1.0000E+01 3.2025E-01 2.6919E-01 1.0298E-01 7.8835E-02 - 1.1220E+01 2.2805E-01 1.9023E-01 6.8931E-02 5.3854E-02 - 1.2589E+01 1.6307E-01 1.3544E-01 4.5706E-02 3.6157E-02 - 1.4125E+01 1.1766E-01 9.6242E-02 3.1177E-02 2.4010E-02 - 1.5849E+01 8.4435E-02 6.7655E-02 2.1543E-02 1.6234E-02 - 1.7783E+01 6.0349E-02 4.7625E-02 1.4199E-02 1.1156E-02 - 1.9953E+01 4.3346E-02 3.3532E-02 9.5032E-03 7.4445E-03 - 2.2387E+01 3.0733E-02 2.4113E-02 6.4823E-03 4.9059E-03 - 2.5119E+01 2.1779E-02 1.7306E-02 4.3269E-03 3.3732E-03 - 2.8184E+01 1.5425E-02 1.2031E-02 2.8926E-03 2.3079E-03 - 3.1623E+01 1.0878E-02 8.4771E-03 1.8886E-03 1.4605E-03 - 3.5481E+01 7.7533E-03 5.9935E-03 1.2601E-03 9.8375E-04 - 3.9811E+01 5.5389E-03 4.2349E-03 8.3734E-04 6.5540E-04 - 4.4668E+01 3.9474E-03 2.9852E-03 5.5778E-04 4.3383E-04 - 5.0119E+01 2.8093E-03 2.1177E-03 3.7196E-04 2.9082E-04 - 5.6234E+01 1.9865E-03 1.4987E-03 2.4687E-04 1.9641E-04 - 6.3096E+01 1.4081E-03 1.0508E-03 1.6385E-04 1.2962E-04 - 7.0795E+01 9.9797E-04 7.4413E-04 1.0893E-04 8.6535E-05 - 7.9433E+01 7.0624E-04 5.2465E-04 7.2990E-05 5.8078E-05 - 8.9125E+01 5.0150E-04 3.6460E-04 4.8857E-05 3.9169E-05 - 1.0000E+02 3.5250E-04 2.5698E-04 3.1646E-05 2.5775E-05 - 1.1220E+02 2.4897E-04 1.8044E-04 2.1240E-05 1.7144E-05 - 1.2589E+02 1.7570E-04 1.2589E-04 1.4279E-05 1.1482E-05 - 1.4125E+02 1.2384E-04 8.7722E-05 9.4491E-06 7.6495E-06 - 1.5849E+02 8.7212E-05 6.1240E-05 6.3292E-06 5.0946E-06 - 1.7783E+02 6.1169E-05 4.2666E-05 4.2404E-06 3.5007E-06 - 1.9953E+02 4.2866E-05 2.9837E-05 2.8140E-06 2.3636E-06 - 2.2387E+02 2.9952E-05 2.0914E-05 1.8658E-06 1.5800E-06 - 2.5119E+02 2.1068E-05 1.4458E-05 1.2638E-06 1.0272E-06 - 2.8184E+02 1.4789E-05 9.9956E-06 8.7098E-07 6.7766E-07 - 3.1623E+02 1.0351E-05 6.9781E-06 5.8243E-07 4.6366E-07 - 3.5481E+02 7.1863E-06 4.8554E-06 3.9831E-07 3.1390E-07 - 3.9811E+02 5.0058E-06 3.3757E-06 2.7043E-07 2.1216E-07 - 4.4668E+02 3.5194E-06 2.3243E-06 1.7999E-07 1.4487E-07 - 5.0119E+02 2.4523E-06 1.5973E-06 1.1981E-07 9.8621E-08 - 5.6234E+02 1.7041E-06 1.1169E-06 8.1487E-08 6.4638E-08 - 6.3096E+02 1.1869E-06 7.6845E-07 5.4867E-08 4.3563E-08 - 7.0795E+02 8.2449E-07 5.2712E-07 3.7296E-08 2.9197E-08 - 7.9433E+02 5.7535E-07 3.6373E-07 2.5350E-08 1.9200E-08 - 8.9125E+02 3.9885E-07 2.5003E-07 1.7154E-08 1.3073E-08 - 1.0000E+03 2.7471E-07 1.7012E-07 1.1258E-08 8.9666E-09 - 1.1220E+03 1.8893E-07 1.1675E-07 7.5114E-09 5.9882E-09 - 1.2589E+03 1.3013E-07 8.0300E-08 5.2085E-09 3.9812E-09 - 1.4125E+03 8.9825E-08 5.5068E-08 3.6033E-09 2.6621E-09 - 1.5849E+03 6.1527E-08 3.7686E-08 2.3631E-09 1.7763E-09 - 1.7783E+03 4.2017E-08 2.5531E-08 1.4955E-09 1.1729E-09 - 1.9953E+03 2.8711E-08 1.7370E-08 1.0284E-09 8.0136E-10 - 2.2387E+03 1.9631E-08 1.1681E-08 7.0441E-10 5.2312E-10 - 2.5119E+03 1.3464E-08 7.9126E-09 4.5687E-10 3.3843E-10 - 2.8184E+03 9.1300E-09 5.3734E-09 3.0159E-10 2.2773E-10 - 3.1623E+03 6.2329E-09 3.6822E-09 2.0401E-10 1.5467E-10 - 3.5481E+03 4.1109E-09 2.4184E-09 1.4172E-10 1.0086E-10 - 3.9811E+03 2.7638E-09 1.6176E-09 9.2625E-11 6.4556E-11 - 4.4668E+03 1.8835E-09 1.0812E-09 6.1218E-11 4.2441E-11 - 5.0119E+03 1.2613E-09 7.2147E-10 4.1589E-11 2.9396E-11 - 5.6234E+03 8.3513E-10 4.8433E-10 2.6517E-11 1.9023E-11 - 6.3096E+03 5.5777E-10 3.1838E-10 1.8238E-11 1.2748E-11 - 7.0795E+03 3.7309E-10 2.1071E-10 1.2099E-11 8.0255E-12 - 7.9433E+03 2.4988E-10 1.4068E-10 7.4890E-12 4.6939E-12 - 8.9125E+03 1.6593E-10 9.3173E-11 5.1315E-12 3.3015E-12 - 1.0000E+04 1.1020E-10 6.0771E-11 3.4970E-12 2.2531E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4873E+04 1.5427E+04 7.6159E+03 6.6928E+03 - 1.1220E-01 1.2867E+04 1.3287E+04 6.6549E+03 5.7914E+03 - 1.2589E-01 1.1030E+04 1.1410E+04 5.7241E+03 4.9199E+03 - 1.4125E-01 9.4072E+03 9.7095E+03 4.9188E+03 4.1556E+03 - 1.5849E-01 7.9336E+03 8.1788E+03 4.1850E+03 3.4948E+03 - 1.7783E-01 6.6126E+03 6.8478E+03 3.5072E+03 2.9154E+03 - 1.9953E-01 5.4497E+03 5.6462E+03 2.9367E+03 2.4042E+03 - 2.2387E-01 4.4475E+03 4.6022E+03 2.4408E+03 1.9585E+03 - 2.5119E-01 3.5942E+03 3.7134E+03 2.0051E+03 1.5859E+03 - 2.8184E-01 2.8780E+03 2.9728E+03 1.6236E+03 1.2741E+03 - 3.1623E-01 2.2942E+03 2.3686E+03 1.3087E+03 1.0118E+03 - 3.5481E-01 1.8080E+03 1.8613E+03 1.0442E+03 7.9875E+02 - 3.9811E-01 1.4133E+03 1.4592E+03 8.2248E+02 6.2955E+02 - 4.4668E-01 1.0986E+03 1.1352E+03 6.4960E+02 4.8909E+02 - 5.0119E-01 8.4750E+02 8.7445E+02 5.0746E+02 3.7773E+02 - 5.6234E-01 6.5350E+02 6.7167E+02 3.8873E+02 2.9058E+02 - 6.3096E-01 5.0347E+02 5.1487E+02 2.9928E+02 2.2069E+02 - 7.0795E-01 3.8724E+02 3.9264E+02 2.2746E+02 1.6800E+02 - 7.9433E-01 2.9467E+02 2.9450E+02 1.7103E+02 1.2991E+02 - 8.9125E-01 2.2250E+02 2.2277E+02 1.2944E+02 9.9287E+01 - 1.0000E+00 1.6634E+02 1.6777E+02 9.6629E+01 7.2641E+01 - 1.1220E+00 1.2579E+02 1.2581E+02 7.1378E+01 5.4144E+01 - 1.2589E+00 9.4719E+01 9.3459E+01 5.2912E+01 4.0492E+01 - 1.4125E+00 7.1494E+01 6.9579E+01 3.9306E+01 2.9978E+01 - 1.5849E+00 5.3529E+01 5.1241E+01 2.8657E+01 2.2012E+01 - 1.7783E+00 3.9697E+01 3.7694E+01 2.0976E+01 1.6290E+01 - 1.9953E+00 2.9511E+01 2.7851E+01 1.5404E+01 1.1759E+01 - 2.2387E+00 2.1686E+01 2.0380E+01 1.1146E+01 8.5699E+00 - 2.5119E+00 1.5814E+01 1.4851E+01 7.9511E+00 6.2181E+00 - 2.8184E+00 1.1768E+01 1.0701E+01 5.7464E+00 4.4136E+00 - 3.1623E+00 8.4846E+00 7.7669E+00 4.1121E+00 3.0949E+00 - 3.5481E+00 6.1897E+00 5.6296E+00 2.8767E+00 2.1716E+00 - 3.9811E+00 4.5121E+00 4.0369E+00 2.0085E+00 1.5146E+00 - 4.4668E+00 3.2712E+00 2.8849E+00 1.4080E+00 1.0671E+00 - 5.0119E+00 2.3461E+00 2.0828E+00 9.8623E-01 7.4409E-01 - 5.6234E+00 1.6906E+00 1.4864E+00 6.7771E-01 5.1268E-01 - 6.3096E+00 1.2175E+00 1.0442E+00 4.6439E-01 3.5168E-01 - 7.0795E+00 8.6792E-01 7.4064E-01 3.2990E-01 2.3904E-01 - 7.9433E+00 6.2213E-01 5.4046E-01 2.2782E-01 1.6326E-01 - 8.9125E+00 4.4818E-01 3.8116E-01 1.4971E-01 1.1338E-01 - 1.0000E+01 3.2023E-01 2.6501E-01 1.0183E-01 7.8123E-02 - 1.1220E+01 2.2802E-01 1.8686E-01 6.9702E-02 5.3370E-02 - 1.2589E+01 1.6298E-01 1.3372E-01 4.7317E-02 3.5929E-02 - 1.4125E+01 1.1560E-01 9.6029E-02 3.1839E-02 2.3760E-02 - 1.5849E+01 8.2816E-02 6.8036E-02 2.1207E-02 1.5752E-02 - 1.7783E+01 5.9414E-02 4.8180E-02 1.4265E-02 1.0791E-02 - 1.9953E+01 4.2067E-02 3.3647E-02 9.4270E-03 7.3480E-03 - 2.2387E+01 3.0328E-02 2.3642E-02 6.1097E-03 4.8621E-03 - 2.5119E+01 2.1798E-02 1.6989E-02 4.0724E-03 3.1517E-03 - 2.8184E+01 1.5480E-02 1.1862E-02 2.7878E-03 2.1628E-03 - 3.1623E+01 1.0919E-02 8.4805E-03 1.8954E-03 1.4666E-03 - 3.5481E+01 7.7529E-03 5.9927E-03 1.2632E-03 9.7797E-04 - 3.9811E+01 5.5292E-03 4.2372E-03 8.3957E-04 6.5215E-04 - 4.4668E+01 3.9452E-03 3.0022E-03 5.5282E-04 4.3479E-04 - 5.0119E+01 2.8102E-03 2.1274E-03 3.6873E-04 2.9246E-04 - 5.6234E+01 2.0022E-03 1.5004E-03 2.5159E-04 1.9404E-04 - 6.3096E+01 1.4167E-03 1.0500E-03 1.6752E-04 1.2975E-04 - 7.0795E+01 9.9717E-04 7.4172E-04 1.0849E-04 8.8003E-05 - 7.9433E+01 7.0743E-04 5.2400E-04 7.1217E-05 5.9314E-05 - 8.9125E+01 5.0073E-04 3.6608E-04 4.8216E-05 3.9768E-05 - 1.0000E+02 3.5320E-04 2.5664E-04 3.2112E-05 2.5750E-05 - 1.1220E+02 2.4902E-04 1.7997E-04 2.1233E-05 1.7077E-05 - 1.2589E+02 1.7573E-04 1.2615E-04 1.4231E-05 1.1446E-05 - 1.4125E+02 1.2373E-04 8.7691E-05 9.5172E-06 7.7027E-06 - 1.5849E+02 8.7016E-05 6.1055E-05 6.2578E-06 5.1264E-06 - 1.7783E+02 6.0991E-05 4.2811E-05 4.1858E-06 3.4595E-06 - 1.9953E+02 4.2859E-05 2.9780E-05 2.7833E-06 2.3741E-06 - 2.2387E+02 3.0166E-05 2.0663E-05 1.8786E-06 1.5920E-06 - 2.5119E+02 2.1001E-05 1.4450E-05 1.3032E-06 1.0342E-06 - 2.8184E+02 1.4651E-05 1.0121E-05 8.4604E-07 6.9535E-07 - 3.1623E+02 1.0318E-05 6.9956E-06 5.8016E-07 4.6805E-07 - 3.5481E+02 7.1823E-06 4.8468E-06 3.9086E-07 3.1373E-07 - 3.9811E+02 5.0284E-06 3.3472E-06 2.6540E-07 2.1043E-07 - 4.4668E+02 3.5253E-06 2.3154E-06 1.8061E-07 1.4331E-07 - 5.0119E+02 2.4525E-06 1.6026E-06 1.2184E-07 9.7874E-08 - 5.6234E+02 1.7084E-06 1.1144E-06 8.2575E-08 6.5373E-08 - 6.3096E+02 1.1933E-06 7.6918E-07 5.5168E-08 4.4027E-08 - 7.0795E+02 8.2660E-07 5.2885E-07 3.6366E-08 3.0084E-08 - 7.9433E+02 5.7044E-07 3.6342E-07 2.4994E-08 1.9875E-08 - 8.9125E+02 3.9863E-07 2.5018E-07 1.7454E-08 1.2943E-08 - 1.0000E+03 2.7694E-07 1.7167E-07 1.1600E-08 8.8696E-09 - 1.1220E+03 1.9041E-07 1.1707E-07 7.4880E-09 6.0143E-09 - 1.2589E+03 1.3039E-07 8.0650E-08 4.9575E-09 3.9172E-09 - 1.4125E+03 8.9075E-08 5.5345E-08 3.4221E-09 2.6554E-09 - 1.5849E+03 6.1670E-08 3.7850E-08 2.4634E-09 1.8841E-09 - 1.7783E+03 4.2303E-08 2.5969E-08 1.6747E-09 1.2141E-09 - 1.9953E+03 2.8810E-08 1.7251E-08 1.0558E-09 8.0301E-10 - 2.2387E+03 1.9588E-08 1.1703E-08 6.9112E-10 5.4199E-10 - 2.5119E+03 1.3400E-08 8.0508E-09 4.3801E-10 3.5524E-10 - 2.8184E+03 9.1408E-09 5.3403E-09 2.9241E-10 2.3617E-10 - 3.1623E+03 6.2766E-09 3.6416E-09 2.0410E-10 1.5210E-10 - 3.5481E+03 4.1639E-09 2.4177E-09 1.3800E-10 1.0183E-10 - 3.9811E+03 2.8097E-09 1.5929E-09 8.7873E-11 6.6947E-11 - 4.4668E+03 1.8849E-09 1.0548E-09 6.0520E-11 4.3036E-11 - 5.0119E+03 1.2506E-09 7.1857E-10 4.2609E-11 2.8515E-11 - 5.6234E+03 8.4226E-10 4.8220E-10 2.7646E-11 1.9188E-11 - 6.3096E+03 5.6086E-10 3.1646E-10 1.7439E-11 1.2251E-11 - 7.0795E+03 3.7329E-10 2.0985E-10 1.1051E-11 7.7830E-12 - 7.9433E+03 2.4792E-10 1.3862E-10 7.4462E-12 4.8930E-12 - 8.9125E+03 1.6348E-10 9.1898E-11 4.9705E-12 3.1755E-12 - 1.0000E+04 1.0942E-10 6.0357E-11 3.3375E-12 2.2100E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4759E+04 1.5216E+04 7.4845E+03 6.6869E+03 - 1.1220E-01 1.2709E+04 1.3128E+04 6.5374E+03 5.7793E+03 - 1.2589E-01 1.0928E+04 1.1226E+04 5.6347E+03 4.9274E+03 - 1.4125E-01 9.3000E+03 9.5520E+03 4.8335E+03 4.1811E+03 - 1.5849E-01 7.8427E+03 8.0719E+03 4.1054E+03 3.5039E+03 - 1.7783E-01 6.5371E+03 6.7209E+03 3.4462E+03 2.8831E+03 - 1.9953E-01 5.3765E+03 5.5406E+03 2.8760E+03 2.3761E+03 - 2.2387E-01 4.4051E+03 4.5331E+03 2.3785E+03 1.9640E+03 - 2.5119E-01 3.5858E+03 3.6613E+03 1.9482E+03 1.5855E+03 - 2.8184E-01 2.8771E+03 2.9287E+03 1.5856E+03 1.2691E+03 - 3.1623E-01 2.2797E+03 2.3290E+03 1.2728E+03 1.0095E+03 - 3.5481E-01 1.7977E+03 1.8405E+03 1.0165E+03 7.9955E+02 - 3.9811E-01 1.4095E+03 1.4374E+03 8.0298E+02 6.2735E+02 - 4.4668E-01 1.0915E+03 1.1129E+03 6.2804E+02 4.8885E+02 - 5.0119E-01 8.4625E+02 8.6165E+02 4.8958E+02 3.8000E+02 - 5.6234E-01 6.5258E+02 6.6306E+02 3.7956E+02 2.9317E+02 - 6.3096E-01 4.9635E+02 5.1105E+02 2.9317E+02 2.2409E+02 - 7.0795E-01 3.8017E+02 3.8898E+02 2.2280E+02 1.7140E+02 - 7.9433E-01 2.9209E+02 2.9355E+02 1.6983E+02 1.3047E+02 - 8.9125E-01 2.2290E+02 2.2321E+02 1.2856E+02 9.7510E+01 - 1.0000E+00 1.6815E+02 1.6707E+02 9.5539E+01 7.3026E+01 - 1.1220E+00 1.2652E+02 1.2478E+02 7.1758E+01 5.4623E+01 - 1.2589E+00 9.5145E+01 9.3276E+01 5.3274E+01 4.0830E+01 - 1.4125E+00 7.1118E+01 6.9368E+01 3.9149E+01 2.9962E+01 - 1.5849E+00 5.3217E+01 5.0975E+01 2.9031E+01 2.2009E+01 - 1.7783E+00 4.0013E+01 3.7895E+01 2.1337E+01 1.6107E+01 - 1.9953E+00 2.9861E+01 2.7902E+01 1.5496E+01 1.1783E+01 - 2.2387E+00 2.1871E+01 2.0306E+01 1.1130E+01 8.5865E+00 - 2.5119E+00 1.5942E+01 1.4695E+01 8.0063E+00 6.2027E+00 - 2.8184E+00 1.1665E+01 1.0634E+01 5.7499E+00 4.3508E+00 - 3.1623E+00 8.5551E+00 7.7427E+00 4.0918E+00 3.0887E+00 - 3.5481E+00 6.2325E+00 5.5945E+00 2.8864E+00 2.1964E+00 - 3.9811E+00 4.5038E+00 4.0508E+00 2.0225E+00 1.5490E+00 - 4.4668E+00 3.2614E+00 2.9058E+00 1.4379E+00 1.0811E+00 - 5.0119E+00 2.3784E+00 2.0836E+00 1.0012E+00 7.6138E-01 - 5.6234E+00 1.7147E+00 1.4876E+00 6.8351E-01 5.2742E-01 - 6.3096E+00 1.2205E+00 1.0632E+00 4.7728E-01 3.5473E-01 - 7.0795E+00 8.7621E-01 7.5389E-01 3.3263E-01 2.4537E-01 - 7.9433E+00 6.3084E-01 5.3032E-01 2.2522E-01 1.6956E-01 - 8.9125E+00 4.4435E-01 3.7198E-01 1.5024E-01 1.1480E-01 - 1.0000E+01 3.1726E-01 2.6602E-01 1.0157E-01 7.6994E-02 - 1.1220E+01 2.2634E-01 1.8751E-01 6.9087E-02 5.1273E-02 - 1.2589E+01 1.6048E-01 1.3168E-01 4.7572E-02 3.4604E-02 - 1.4125E+01 1.1484E-01 9.3109E-02 3.1734E-02 2.3500E-02 - 1.5849E+01 8.1842E-02 6.6257E-02 2.0894E-02 1.6374E-02 - 1.7783E+01 5.8537E-02 4.7125E-02 1.4007E-02 1.0989E-02 - 1.9953E+01 4.2015E-02 3.3577E-02 9.3283E-03 7.2843E-03 - 2.2387E+01 3.0167E-02 2.3571E-02 6.3441E-03 4.6836E-03 - 2.5119E+01 2.1638E-02 1.6673E-02 4.3856E-03 3.0646E-03 - 2.8184E+01 1.5410E-02 1.1960E-02 2.8961E-03 2.2235E-03 - 3.1623E+01 1.0915E-02 8.5023E-03 1.8967E-03 1.4625E-03 - 3.5481E+01 7.7806E-03 6.0295E-03 1.2631E-03 9.7419E-04 - 3.9811E+01 5.5362E-03 4.2569E-03 8.3807E-04 6.4743E-04 - 4.4668E+01 3.9374E-03 3.0100E-03 5.6037E-04 4.3231E-04 - 5.0119E+01 2.7975E-03 2.1173E-03 3.7347E-04 2.8977E-04 - 5.6234E+01 1.9901E-03 1.4868E-03 2.4448E-04 1.9280E-04 - 6.3096E+01 1.4157E-03 1.0542E-03 1.6291E-04 1.2766E-04 - 7.0795E+01 1.0010E-03 7.4540E-04 1.0996E-04 8.6863E-05 - 7.9433E+01 7.0604E-04 5.2210E-04 7.2434E-05 5.7424E-05 - 8.9125E+01 5.0118E-04 3.6629E-04 4.8623E-05 3.8500E-05 - 1.0000E+02 3.5362E-04 2.5725E-04 3.2189E-05 2.5661E-05 - 1.1220E+02 2.4867E-04 1.8013E-04 2.1118E-05 1.7436E-05 - 1.2589E+02 1.7479E-04 1.2636E-04 1.4183E-05 1.1605E-05 - 1.4125E+02 1.2309E-04 8.8179E-05 9.7141E-06 7.6837E-06 - 1.5849E+02 8.6874E-05 6.1620E-05 6.4779E-06 5.1510E-06 - 1.7783E+02 6.1087E-05 4.2998E-05 4.2747E-06 3.4441E-06 - 1.9953E+02 4.2756E-05 3.0007E-05 2.8717E-06 2.3153E-06 - 2.2387E+02 3.0093E-05 2.0926E-05 1.9533E-06 1.5242E-06 - 2.5119E+02 2.1108E-05 1.4539E-05 1.3174E-06 1.0216E-06 - 2.8184E+02 1.4730E-05 1.0158E-05 8.5641E-07 7.2562E-07 - 3.1623E+02 1.0319E-05 6.9581E-06 5.7840E-07 4.7513E-07 - 3.5481E+02 7.1940E-06 4.8307E-06 3.9058E-07 3.1962E-07 - 3.9811E+02 5.0240E-06 3.3568E-06 2.6629E-07 2.1378E-07 - 4.4668E+02 3.5057E-06 2.3256E-06 1.8369E-07 1.4372E-07 - 5.0119E+02 2.4403E-06 1.6034E-06 1.2380E-07 9.7316E-08 - 5.6234E+02 1.7041E-06 1.1160E-06 8.2085E-08 6.5304E-08 - 6.3096E+02 1.1863E-06 7.6972E-07 5.5691E-08 4.4935E-08 - 7.0795E+02 8.2466E-07 5.2902E-07 3.7126E-08 2.9671E-08 - 7.9433E+02 5.7201E-07 3.6415E-07 2.4916E-08 2.0222E-08 - 8.9125E+02 3.9799E-07 2.4959E-07 1.6825E-08 1.3576E-08 - 1.0000E+03 2.7591E-07 1.7247E-07 1.1367E-08 9.0844E-09 - 1.1220E+03 1.8946E-07 1.1768E-07 7.6270E-09 6.1288E-09 - 1.2589E+03 1.3045E-07 8.0480E-08 4.9914E-09 4.0376E-09 - 1.4125E+03 8.9621E-08 5.5146E-08 3.3499E-09 2.6474E-09 - 1.5849E+03 6.1560E-08 3.7411E-08 2.2710E-09 1.7420E-09 - 1.7783E+03 4.2285E-08 2.5422E-08 1.5665E-09 1.0983E-09 - 1.9953E+03 2.8990E-08 1.7355E-08 1.0525E-09 7.8975E-10 - 2.2387E+03 1.9748E-08 1.1732E-08 6.8806E-10 5.2967E-10 - 2.5119E+03 1.3384E-08 7.9503E-09 4.6352E-10 3.4942E-10 - 2.8184E+03 9.0540E-09 5.4041E-09 3.0578E-10 2.2960E-10 - 3.1623E+03 6.2651E-09 3.6809E-09 2.0015E-10 1.5577E-10 - 3.5481E+03 4.1720E-09 2.4316E-09 1.3887E-10 9.9471E-11 - 3.9811E+03 2.8119E-09 1.6224E-09 9.2334E-11 6.6241E-11 - 4.4668E+03 1.8698E-09 1.0717E-09 5.8080E-11 4.6314E-11 - 5.0119E+03 1.2355E-09 7.1315E-10 3.9321E-11 2.9964E-11 - 5.6234E+03 8.3227E-10 4.7631E-10 2.5935E-11 1.9253E-11 - 6.3096E+03 5.6444E-10 3.1668E-10 1.6754E-11 1.2668E-11 - 7.0795E+03 3.7454E-10 2.1016E-10 1.1074E-11 8.5597E-12 - 7.9433E+03 2.5035E-10 1.3909E-10 7.4207E-12 5.1240E-12 - 8.9125E+03 1.6763E-10 9.0618E-11 5.2988E-12 3.2039E-12 - 1.0000E+04 1.0919E-10 6.0116E-11 3.5041E-12 2.1786E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7978E+04 1.8332E+04 8.8302E+03 8.1665E+03 - 1.1220E-01 1.5246E+04 1.5452E+04 7.6537E+03 6.9517E+03 - 1.2589E-01 1.2976E+04 1.2991E+04 6.4960E+03 5.8639E+03 - 1.4125E-01 1.0883E+04 1.0969E+04 5.4310E+03 4.8997E+03 - 1.5849E-01 9.0162E+03 9.1369E+03 4.5594E+03 4.0827E+03 - 1.7783E-01 7.4394E+03 7.4891E+03 3.8078E+03 3.3697E+03 - 1.9953E-01 6.0810E+03 6.0712E+03 3.1497E+03 2.7417E+03 - 2.2387E-01 4.8967E+03 4.8869E+03 2.5718E+03 2.2154E+03 - 2.5119E-01 3.8897E+03 3.9093E+03 2.0823E+03 1.7732E+03 - 2.8184E-01 3.0743E+03 3.1034E+03 1.6835E+03 1.4191E+03 - 3.1623E-01 2.4218E+03 2.4558E+03 1.3484E+03 1.1271E+03 - 3.5481E-01 1.9024E+03 1.9184E+03 1.0738E+03 8.8108E+02 - 3.9811E-01 1.4834E+03 1.4808E+03 8.4310E+02 6.7978E+02 - 4.4668E-01 1.1466E+03 1.1431E+03 6.4910E+02 5.2515E+02 - 5.0119E-01 8.8712E+02 8.8692E+02 4.9871E+02 4.0822E+02 - 5.6234E-01 6.8116E+02 6.7769E+02 3.8777E+02 3.1381E+02 - 6.3096E-01 5.2072E+02 5.1415E+02 2.9827E+02 2.4119E+02 - 7.0795E-01 4.0087E+02 3.9271E+02 2.2847E+02 1.8320E+02 - 7.9433E-01 3.0560E+02 2.9510E+02 1.7561E+02 1.3943E+02 - 8.9125E-01 2.3163E+02 2.2580E+02 1.3394E+02 1.0489E+02 - 1.0000E+00 1.7262E+02 1.7048E+02 1.0147E+02 7.9029E+01 - 1.1220E+00 1.3053E+02 1.2839E+02 7.5948E+01 5.9440E+01 - 1.2589E+00 9.8532E+01 9.6957E+01 5.6761E+01 4.4188E+01 - 1.4125E+00 7.4145E+01 7.2614E+01 4.2474E+01 3.2654E+01 - 1.5849E+00 5.5702E+01 5.3479E+01 3.1476E+01 2.4366E+01 - 1.7783E+00 4.1640E+01 3.9916E+01 2.3381E+01 1.7915E+01 - 1.9953E+00 3.0933E+01 2.9661E+01 1.7323E+01 1.3267E+01 - 2.2387E+00 2.2936E+01 2.1639E+01 1.2517E+01 9.5450E+00 - 2.5119E+00 1.6753E+01 1.5665E+01 8.9894E+00 6.7606E+00 - 2.8184E+00 1.2223E+01 1.1447E+01 6.5156E+00 4.9638E+00 - 3.1623E+00 8.9733E+00 8.4269E+00 4.7423E+00 3.6742E+00 - 3.5481E+00 6.5645E+00 6.1091E+00 3.3895E+00 2.6031E+00 - 3.9811E+00 4.7976E+00 4.4425E+00 2.3776E+00 1.8177E+00 - 4.4668E+00 3.5004E+00 3.1750E+00 1.6840E+00 1.2828E+00 - 5.0119E+00 2.5420E+00 2.2668E+00 1.1937E+00 9.2095E-01 - 5.6234E+00 1.8437E+00 1.6185E+00 8.3788E-01 6.3634E-01 - 6.3096E+00 1.3094E+00 1.1528E+00 5.9246E-01 4.3449E-01 - 7.0795E+00 9.2595E-01 8.1956E-01 4.0865E-01 2.9964E-01 - 7.9433E+00 6.6514E-01 5.8221E-01 2.7188E-01 2.0991E-01 - 8.9125E+00 4.7636E-01 4.1919E-01 1.9232E-01 1.4594E-01 - 1.0000E+01 3.4413E-01 3.0132E-01 1.3366E-01 1.0014E-01 - 1.1220E+01 2.4456E-01 2.1375E-01 9.0592E-02 6.7915E-02 - 1.2589E+01 1.7432E-01 1.5122E-01 6.1402E-02 4.6212E-02 - 1.4125E+01 1.2478E-01 1.0784E-01 4.2392E-02 3.1377E-02 - 1.5849E+01 8.9796E-02 7.6405E-02 2.9281E-02 2.1086E-02 - 1.7783E+01 6.3696E-02 5.3260E-02 1.9750E-02 1.4619E-02 - 1.9953E+01 4.5092E-02 3.7850E-02 1.3303E-02 1.0302E-02 - 2.2387E+01 3.2310E-02 2.6974E-02 9.1416E-03 6.8251E-03 - 2.5119E+01 2.3225E-02 1.9252E-02 6.0800E-03 4.5088E-03 - 2.8184E+01 1.6758E-02 1.3653E-02 3.9572E-03 3.0761E-03 - 3.1623E+01 1.1866E-02 9.5311E-03 2.6402E-03 2.0251E-03 - 3.5481E+01 8.4637E-03 6.7539E-03 1.7627E-03 1.3601E-03 - 3.9811E+01 6.0512E-03 4.7803E-03 1.1801E-03 9.1667E-04 - 4.4668E+01 4.3140E-03 3.3773E-03 7.9258E-04 6.1330E-04 - 5.0119E+01 3.0607E-03 2.3898E-03 5.2454E-04 4.0722E-04 - 5.6234E+01 2.1729E-03 1.6857E-03 3.4789E-04 2.7073E-04 - 6.3096E+01 1.5474E-03 1.1894E-03 2.3172E-04 1.7923E-04 - 7.0795E+01 1.1009E-03 8.4347E-04 1.5431E-04 1.1937E-04 - 7.9433E+01 7.8020E-04 5.9093E-04 1.0373E-04 7.9774E-05 - 8.9125E+01 5.5291E-04 4.1412E-04 6.8887E-05 5.3202E-05 - 1.0000E+02 3.9266E-04 2.9276E-04 4.5073E-05 3.5519E-05 - 1.1220E+02 2.7844E-04 2.0628E-04 2.9841E-05 2.3567E-05 - 1.2589E+02 1.9652E-04 1.4412E-04 1.9857E-05 1.5853E-05 - 1.4125E+02 1.3836E-04 1.0017E-04 1.3206E-05 1.0572E-05 - 1.5849E+02 9.7948E-05 7.0236E-05 8.6825E-06 7.0472E-06 - 1.7783E+02 6.9194E-05 4.9311E-05 5.7399E-06 4.6463E-06 - 1.9953E+02 4.8411E-05 3.4408E-05 3.9025E-06 3.0596E-06 - 2.2387E+02 3.4035E-05 2.4010E-05 2.6002E-06 2.0383E-06 - 2.5119E+02 2.4007E-05 1.6728E-05 1.7587E-06 1.3438E-06 - 2.8184E+02 1.6710E-05 1.1669E-05 1.1588E-06 9.0222E-07 - 3.1623E+02 1.1746E-05 8.1405E-06 7.6748E-07 6.2187E-07 - 3.5481E+02 8.2337E-06 5.6391E-06 5.1519E-07 4.1779E-07 - 3.9811E+02 5.7524E-06 3.9167E-06 3.4786E-07 2.8084E-07 - 4.4668E+02 4.0365E-06 2.7181E-06 2.3327E-07 1.8750E-07 - 5.0119E+02 2.8268E-06 1.8831E-06 1.5460E-07 1.2885E-07 - 5.6234E+02 1.9719E-06 1.3011E-06 1.0432E-07 8.5210E-08 - 6.3096E+02 1.3731E-06 9.0036E-07 6.9344E-08 5.6880E-08 - 7.0795E+02 9.5708E-07 6.2317E-07 4.6492E-08 3.8146E-08 - 7.9433E+02 6.6849E-07 4.2802E-07 3.1748E-08 2.5362E-08 - 8.9125E+02 4.6433E-07 2.9531E-07 2.1868E-08 1.7071E-08 - 1.0000E+03 3.2183E-07 2.0496E-07 1.4533E-08 1.1544E-08 - 1.1220E+03 2.2199E-07 1.4055E-07 9.6189E-09 7.6130E-09 - 1.2589E+03 1.5355E-07 9.6448E-08 6.4341E-09 5.0379E-09 - 1.4125E+03 1.0655E-07 6.5966E-08 4.4767E-09 3.4062E-09 - 1.5849E+03 7.3473E-08 4.5469E-08 3.0537E-09 2.2831E-09 - 1.7783E+03 5.0668E-08 3.1181E-08 1.9501E-09 1.5412E-09 - 1.9953E+03 3.4856E-08 2.1166E-08 1.3031E-09 1.0316E-09 - 2.2387E+03 2.3747E-08 1.4504E-08 8.6832E-10 6.7519E-10 - 2.5119E+03 1.6193E-08 9.8825E-09 5.7539E-10 4.2145E-10 - 2.8184E+03 1.1136E-08 6.6606E-09 3.9106E-10 2.7975E-10 - 3.1623E+03 7.7298E-09 4.5638E-09 2.6081E-10 2.0357E-10 - 3.5481E+03 5.1889E-09 3.0372E-09 1.7478E-10 1.3260E-10 - 3.9811E+03 3.5047E-09 2.0549E-09 1.1641E-10 8.5490E-11 - 4.4668E+03 2.3570E-09 1.3906E-09 7.6608E-11 5.7319E-11 - 5.0119E+03 1.5807E-09 9.1806E-10 5.2642E-11 3.9602E-11 - 5.6234E+03 1.0675E-09 6.0831E-10 3.6059E-11 2.7271E-11 - 6.3096E+03 7.2316E-10 4.1017E-10 2.3904E-11 1.6378E-11 - 7.0795E+03 4.8055E-10 2.7343E-10 1.6144E-11 1.0834E-11 - 7.9433E+03 3.1944E-10 1.8191E-10 1.0070E-11 7.0420E-12 - 8.9125E+03 2.1387E-10 1.2110E-10 6.3444E-12 4.5236E-12 - 1.0000E+04 1.4418E-10 8.0512E-11 4.2471E-12 2.9365E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7802E+04 1.7857E+04 8.5009E+03 8.1790E+03 - 1.1220E-01 1.5092E+04 1.5092E+04 7.3248E+03 6.9708E+03 - 1.2589E-01 1.2734E+04 1.2683E+04 6.2128E+03 5.8767E+03 - 1.4125E-01 1.0697E+04 1.0581E+04 5.2051E+03 4.9286E+03 - 1.5849E-01 8.9071E+03 8.7471E+03 4.3498E+03 4.0768E+03 - 1.7783E-01 7.3346E+03 7.1610E+03 3.5845E+03 3.3421E+03 - 1.9953E-01 5.9660E+03 5.8116E+03 2.9399E+03 2.7410E+03 - 2.2387E-01 4.7873E+03 4.6818E+03 2.4192E+03 2.2013E+03 - 2.5119E-01 3.8220E+03 3.7080E+03 1.9663E+03 1.7499E+03 - 2.8184E-01 3.0259E+03 2.9281E+03 1.5691E+03 1.3981E+03 - 3.1623E-01 2.3761E+03 2.3236E+03 1.2456E+03 1.1091E+03 - 3.5481E-01 1.8524E+03 1.8136E+03 9.8270E+02 8.6762E+02 - 3.9811E-01 1.4405E+03 1.3956E+03 7.6162E+02 6.7987E+02 - 4.4668E-01 1.1178E+03 1.0830E+03 5.9208E+02 5.2616E+02 - 5.0119E-01 8.6302E+02 8.3393E+02 4.6302E+02 4.0372E+02 - 5.6234E-01 6.6637E+02 6.3800E+02 3.6208E+02 3.1194E+02 - 6.3096E-01 5.1232E+02 4.8569E+02 2.8036E+02 2.3994E+02 - 7.0795E-01 3.9075E+02 3.7070E+02 2.1317E+02 1.8222E+02 - 7.9433E-01 2.9825E+02 2.8412E+02 1.6320E+02 1.3851E+02 - 8.9125E-01 2.2457E+02 2.1510E+02 1.2255E+02 1.0584E+02 - 1.0000E+00 1.7110E+02 1.6141E+02 9.3138E+01 7.8173E+01 - 1.1220E+00 1.2947E+02 1.2271E+02 7.0460E+01 5.8927E+01 - 1.2589E+00 9.8254E+01 9.2360E+01 5.2855E+01 4.4700E+01 - 1.4125E+00 7.4464E+01 6.9240E+01 3.9836E+01 3.3089E+01 - 1.5849E+00 5.5595E+01 5.1797E+01 3.0328E+01 2.4436E+01 - 1.7783E+00 4.1322E+01 3.8667E+01 2.2729E+01 1.7928E+01 - 1.9953E+00 3.0563E+01 2.8917E+01 1.6520E+01 1.3303E+01 - 2.2387E+00 2.2745E+01 2.1042E+01 1.1980E+01 9.6818E+00 - 2.5119E+00 1.6844E+01 1.5432E+01 8.9202E+00 6.9134E+00 - 2.8184E+00 1.2328E+01 1.1327E+01 6.5452E+00 4.9702E+00 - 3.1623E+00 9.0641E+00 8.3938E+00 4.7143E+00 3.6315E+00 - 3.5481E+00 6.5642E+00 6.0885E+00 3.3884E+00 2.5669E+00 - 3.9811E+00 4.8009E+00 4.4188E+00 2.4173E+00 1.8068E+00 - 4.4668E+00 3.4927E+00 3.1654E+00 1.7039E+00 1.2881E+00 - 5.0119E+00 2.5177E+00 2.2660E+00 1.1905E+00 9.1765E-01 - 5.6234E+00 1.8116E+00 1.6419E+00 8.4548E-01 6.3701E-01 - 6.3096E+00 1.3004E+00 1.1720E+00 5.9106E-01 4.3135E-01 - 7.0795E+00 9.5279E-01 8.3331E-01 4.0307E-01 3.0140E-01 - 7.9433E+00 6.8139E-01 6.0783E-01 2.7672E-01 2.1077E-01 - 8.9125E+00 4.7930E-01 4.3470E-01 1.8558E-01 1.4544E-01 - 1.0000E+01 3.4244E-01 2.9879E-01 1.3158E-01 9.8863E-02 - 1.1220E+01 2.4579E-01 2.1195E-01 8.9538E-02 6.8105E-02 - 1.2589E+01 1.7609E-01 1.5115E-01 6.1309E-02 4.6484E-02 - 1.4125E+01 1.2440E-01 1.0641E-01 4.1469E-02 3.1731E-02 - 1.5849E+01 8.8668E-02 7.4619E-02 2.8259E-02 2.1653E-02 - 1.7783E+01 6.3536E-02 5.3627E-02 1.8961E-02 1.4365E-02 - 1.9953E+01 4.5229E-02 3.7947E-02 1.2740E-02 9.6620E-03 - 2.2387E+01 3.2315E-02 2.6425E-02 8.6429E-03 6.8007E-03 - 2.5119E+01 2.3248E-02 1.8901E-02 5.7759E-03 4.5730E-03 - 2.8184E+01 1.6353E-02 1.3457E-02 3.8592E-03 3.0017E-03 - 3.1623E+01 1.1862E-02 9.5158E-03 2.6401E-03 2.0148E-03 - 3.5481E+01 8.4482E-03 6.7508E-03 1.7576E-03 1.3548E-03 - 3.9811E+01 6.0177E-03 4.7739E-03 1.1758E-03 9.1235E-04 - 4.4668E+01 4.2972E-03 3.3753E-03 7.8924E-04 6.0709E-04 - 5.0119E+01 3.0661E-03 2.3942E-03 5.2659E-04 4.0434E-04 - 5.6234E+01 2.1810E-03 1.6902E-03 3.5143E-04 2.7130E-04 - 6.3096E+01 1.5569E-03 1.1872E-03 2.3423E-04 1.8159E-04 - 7.0795E+01 1.1040E-03 8.4210E-04 1.5526E-04 1.1974E-04 - 7.9433E+01 7.8430E-04 5.9271E-04 1.0265E-04 8.0031E-05 - 8.9125E+01 5.5789E-04 4.1571E-04 6.8198E-05 5.3414E-05 - 1.0000E+02 3.9245E-04 2.9222E-04 4.4966E-05 3.5302E-05 - 1.1220E+02 2.7795E-04 2.0537E-04 2.9607E-05 2.3539E-05 - 1.2589E+02 1.9689E-04 1.4401E-04 1.9678E-05 1.5692E-05 - 1.4125E+02 1.3862E-04 1.0126E-04 1.3095E-05 1.0551E-05 - 1.5849E+02 9.7648E-05 7.0941E-05 8.7542E-06 7.0315E-06 - 1.7783E+02 6.8880E-05 4.9297E-05 5.8287E-06 4.6047E-06 - 1.9953E+02 4.8461E-05 3.4487E-05 3.8614E-06 3.0630E-06 - 2.2387E+02 3.4131E-05 2.4140E-05 2.5785E-06 2.0496E-06 - 2.5119E+02 2.3925E-05 1.6754E-05 1.7294E-06 1.3897E-06 - 2.8184E+02 1.6796E-05 1.1670E-05 1.1310E-06 9.2830E-07 - 3.1623E+02 1.1799E-05 8.1370E-06 7.7105E-07 6.2154E-07 - 3.5481E+02 8.2516E-06 5.6512E-06 5.1385E-07 4.1574E-07 - 3.9811E+02 5.7668E-06 3.9419E-06 3.4246E-07 2.8244E-07 - 4.4668E+02 4.0265E-06 2.7189E-06 2.3228E-07 1.8771E-07 - 5.0119E+02 2.8132E-06 1.8843E-06 1.5511E-07 1.2189E-07 - 5.6234E+02 1.9728E-06 1.3153E-06 1.0505E-07 8.6453E-08 - 6.3096E+02 1.3743E-06 9.0644E-07 7.0702E-08 5.7032E-08 - 7.0795E+02 9.5811E-07 6.2649E-07 4.7740E-08 3.8002E-08 - 7.9433E+02 6.6381E-07 4.3284E-07 3.1780E-08 2.6320E-08 - 8.9125E+02 4.6208E-07 2.9680E-07 2.1555E-08 1.7779E-08 - 1.0000E+03 3.2106E-07 2.0501E-07 1.4780E-08 1.1671E-08 - 1.1220E+03 2.2209E-07 1.4173E-07 9.7883E-09 7.8849E-09 - 1.2589E+03 1.5360E-07 9.7438E-08 6.5465E-09 5.1944E-09 - 1.4125E+03 1.0593E-07 6.6809E-08 4.4004E-09 3.5465E-09 - 1.5849E+03 7.3098E-08 4.5806E-08 2.9979E-09 2.2599E-09 - 1.7783E+03 5.0114E-08 3.1173E-08 2.0683E-09 1.4965E-09 - 1.9953E+03 3.4818E-08 2.1111E-08 1.3907E-09 1.0650E-09 - 2.2387E+03 2.4006E-08 1.4405E-08 9.1207E-10 6.8168E-10 - 2.5119E+03 1.6399E-08 9.8008E-09 5.9210E-10 4.3474E-10 - 2.8184E+03 1.1168E-08 6.5620E-09 3.8879E-10 2.9847E-10 - 3.1623E+03 7.7152E-09 4.5402E-09 2.6448E-10 2.0165E-10 - 3.5481E+03 5.1337E-09 3.0111E-09 1.7363E-10 1.3080E-10 - 3.9811E+03 3.4605E-09 2.0242E-09 1.1096E-10 8.6621E-11 - 4.4668E+03 2.3500E-09 1.3691E-09 7.5762E-11 5.4552E-11 - 5.0119E+03 1.5954E-09 9.2718E-10 5.3039E-11 3.6715E-11 - 5.6234E+03 1.0685E-09 6.1922E-10 3.6541E-11 2.4243E-11 - 6.3096E+03 7.2033E-10 4.1036E-10 2.4037E-11 1.6036E-11 - 7.0795E+03 4.7778E-10 2.7094E-10 1.5495E-11 1.0260E-11 - 7.9433E+03 3.2037E-10 1.8044E-10 1.0061E-11 6.9053E-12 - 8.9125E+03 2.1571E-10 1.2061E-10 6.8199E-12 4.7229E-12 - 1.0000E+04 1.4303E-10 7.9149E-11 4.5038E-12 3.1126E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7752E+04 1.7560E+04 8.2967E+03 8.2112E+03 - 1.1220E-01 1.5007E+04 1.4825E+04 7.1401E+03 7.0177E+03 - 1.2589E-01 1.2697E+04 1.2432E+04 6.0802E+03 5.9380E+03 - 1.4125E-01 1.0666E+04 1.0364E+04 5.1033E+03 4.9240E+03 - 1.5849E-01 8.8568E+03 8.5705E+03 4.2249E+03 4.0703E+03 - 1.7783E-01 7.2572E+03 6.9995E+03 3.4860E+03 3.3554E+03 - 1.9953E-01 5.9098E+03 5.6735E+03 2.8571E+03 2.7513E+03 - 2.2387E-01 4.7448E+03 4.5539E+03 2.3306E+03 2.2310E+03 - 2.5119E-01 3.7637E+03 3.6054E+03 1.8782E+03 1.7865E+03 - 2.8184E-01 2.9769E+03 2.8348E+03 1.4987E+03 1.4207E+03 - 3.1623E-01 2.3451E+03 2.2294E+03 1.1892E+03 1.1142E+03 - 3.5481E-01 1.8360E+03 1.7396E+03 9.3265E+02 8.7326E+02 - 3.9811E-01 1.4323E+03 1.3368E+03 7.3007E+02 6.7887E+02 - 4.4668E-01 1.1088E+03 1.0316E+03 5.6970E+02 5.2463E+02 - 5.0119E-01 8.5420E+02 7.9154E+02 4.4101E+02 4.0385E+02 - 5.6234E-01 6.5641E+02 6.0864E+02 3.4175E+02 3.0742E+02 - 6.3096E-01 5.0272E+02 4.6958E+02 2.6231E+02 2.3785E+02 - 7.0795E-01 3.8340E+02 3.5694E+02 1.9861E+02 1.8302E+02 - 7.9433E-01 2.9294E+02 2.7095E+02 1.5298E+02 1.3838E+02 - 8.9125E-01 2.2460E+02 2.0698E+02 1.1643E+02 1.0341E+02 - 1.0000E+00 1.6971E+02 1.5658E+02 8.8994E+01 7.9199E+01 - 1.1220E+00 1.2910E+02 1.1874E+02 6.7485E+01 5.9133E+01 - 1.2589E+00 9.7092E+01 8.9671E+01 5.1010E+01 4.4562E+01 - 1.4125E+00 7.3138E+01 6.7848E+01 3.8568E+01 3.3451E+01 - 1.5849E+00 5.5460E+01 5.1139E+01 2.8809E+01 2.4670E+01 - 1.7783E+00 4.1425E+01 3.8145E+01 2.1694E+01 1.8276E+01 - 1.9953E+00 3.0707E+01 2.8712E+01 1.6311E+01 1.3206E+01 - 2.2387E+00 2.2853E+01 2.1128E+01 1.1879E+01 9.5727E+00 - 2.5119E+00 1.6854E+01 1.5361E+01 8.4973E+00 7.0458E+00 - 2.8184E+00 1.2310E+01 1.1273E+01 6.3205E+00 5.1142E+00 - 3.1623E+00 9.0607E+00 8.1841E+00 4.6046E+00 3.6582E+00 - 3.5481E+00 6.6345E+00 5.9608E+00 3.3291E+00 2.5853E+00 - 3.9811E+00 4.8041E+00 4.3320E+00 2.3593E+00 1.8318E+00 - 4.4668E+00 3.4752E+00 3.1449E+00 1.6838E+00 1.2752E+00 - 5.0119E+00 2.4971E+00 2.2896E+00 1.1961E+00 8.8971E-01 - 5.6234E+00 1.8012E+00 1.6506E+00 8.2031E-01 6.3031E-01 - 6.3096E+00 1.3056E+00 1.1765E+00 5.7113E-01 4.4609E-01 - 7.0795E+00 9.3860E-01 8.2715E-01 4.0451E-01 3.0802E-01 - 7.9433E+00 6.6738E-01 5.8298E-01 2.8348E-01 2.0960E-01 - 8.9125E+00 4.7988E-01 4.2082E-01 1.9207E-01 1.4401E-01 - 1.0000E+01 3.4508E-01 3.0144E-01 1.3145E-01 1.0036E-01 - 1.1220E+01 2.4487E-01 2.1427E-01 9.1281E-02 6.7991E-02 - 1.2589E+01 1.7353E-01 1.5147E-01 6.2538E-02 4.6179E-02 - 1.4125E+01 1.2450E-01 1.0764E-01 4.2610E-02 3.1464E-02 - 1.5849E+01 8.8336E-02 7.5967E-02 2.8623E-02 2.1441E-02 - 1.7783E+01 6.3934E-02 5.2959E-02 1.9294E-02 1.4416E-02 - 1.9953E+01 4.6253E-02 3.7901E-02 1.3219E-02 9.7925E-03 - 2.2387E+01 3.2662E-02 2.6808E-02 8.9381E-03 6.8791E-03 - 2.5119E+01 2.2999E-02 1.9147E-02 6.0077E-03 4.6408E-03 - 2.8184E+01 1.6408E-02 1.3725E-02 4.0072E-03 3.2858E-03 - 3.1623E+01 1.1844E-02 9.5498E-03 2.6564E-03 2.0163E-03 - 3.5481E+01 8.4642E-03 6.7635E-03 1.7795E-03 1.3465E-03 - 3.9811E+01 6.0577E-03 4.7860E-03 1.1848E-03 9.0462E-04 - 4.4668E+01 4.3132E-03 3.3702E-03 7.8479E-04 6.1049E-04 - 5.0119E+01 3.0672E-03 2.3793E-03 5.1905E-04 4.0638E-04 - 5.6234E+01 2.1848E-03 1.6906E-03 3.4460E-04 2.6959E-04 - 6.3096E+01 1.5520E-03 1.1914E-03 2.2835E-04 1.8038E-04 - 7.0795E+01 1.1023E-03 8.3775E-04 1.5280E-04 1.2041E-04 - 7.9433E+01 7.8065E-04 5.9618E-04 1.0361E-04 8.0189E-05 - 8.9125E+01 5.5574E-04 4.2048E-04 6.8915E-05 5.3521E-05 - 1.0000E+02 3.9372E-04 2.9313E-04 4.4663E-05 3.5920E-05 - 1.1220E+02 2.7827E-04 2.0567E-04 2.9698E-05 2.3694E-05 - 1.2589E+02 1.9572E-04 1.4487E-04 1.9821E-05 1.5815E-05 - 1.4125E+02 1.3843E-04 1.0157E-04 1.3090E-05 1.0602E-05 - 1.5849E+02 9.7942E-05 7.0601E-05 8.7256E-06 6.9818E-06 - 1.7783E+02 6.8851E-05 4.9279E-05 5.8752E-06 4.6998E-06 - 1.9953E+02 4.8436E-05 3.4426E-05 3.8748E-06 3.1366E-06 - 2.2387E+02 3.3877E-05 2.3963E-05 2.5361E-06 2.0362E-06 - 2.5119E+02 2.3666E-05 1.6618E-05 1.7408E-06 1.3646E-06 - 2.8184E+02 1.6664E-05 1.1677E-05 1.1943E-06 9.2978E-07 - 3.1623E+02 1.1764E-05 8.1361E-06 7.8652E-07 6.2491E-07 - 3.5481E+02 8.2364E-06 5.6376E-06 5.2396E-07 4.1487E-07 - 3.9811E+02 5.7736E-06 3.9224E-06 3.4720E-07 2.7756E-07 - 4.4668E+02 4.0514E-06 2.7277E-06 2.3414E-07 1.8803E-07 - 5.0119E+02 2.8251E-06 1.8897E-06 1.5706E-07 1.2637E-07 - 5.6234E+02 1.9752E-06 1.3160E-06 1.0555E-07 8.4318E-08 - 6.3096E+02 1.3808E-06 9.0978E-07 7.0368E-08 5.7727E-08 - 7.0795E+02 9.5905E-07 6.2412E-07 4.6718E-08 3.8726E-08 - 7.9433E+02 6.6482E-07 4.3214E-07 3.1779E-08 2.6068E-08 - 8.9125E+02 4.6191E-07 2.9726E-07 2.1465E-08 1.7214E-08 - 1.0000E+03 3.2199E-07 2.0663E-07 1.4666E-08 1.1375E-08 - 1.1220E+03 2.2308E-07 1.4262E-07 9.8685E-09 7.5598E-09 - 1.2589E+03 1.5447E-07 9.7093E-08 6.6831E-09 5.1510E-09 - 1.4125E+03 1.0614E-07 6.6098E-08 4.3719E-09 3.6299E-09 - 1.5849E+03 7.3155E-08 4.5605E-08 2.8943E-09 2.4257E-09 - 1.7783E+03 5.0451E-08 3.1327E-08 1.9795E-09 1.5215E-09 - 1.9953E+03 3.4734E-08 2.1327E-08 1.3046E-09 1.0175E-09 - 2.2387E+03 2.3771E-08 1.4549E-08 9.1122E-10 6.9036E-10 - 2.5119E+03 1.6201E-08 9.8179E-09 6.2949E-10 4.5924E-10 - 2.8184E+03 1.1057E-08 6.6570E-09 4.0208E-10 3.0139E-10 - 3.1623E+03 7.7045E-09 4.5608E-09 2.6382E-10 2.0133E-10 - 3.5481E+03 5.1629E-09 3.0444E-09 1.7173E-10 1.2767E-10 - 3.9811E+03 3.4894E-09 2.0437E-09 1.1038E-10 8.3053E-11 - 4.4668E+03 2.3472E-09 1.3731E-09 7.6494E-11 5.4808E-11 - 5.0119E+03 1.5885E-09 9.1950E-10 5.1544E-11 3.9837E-11 - 5.6234E+03 1.0650E-09 6.1689E-10 3.5315E-11 2.6895E-11 - 6.3096E+03 7.1738E-10 4.0911E-10 2.2520E-11 1.6155E-11 - 7.0795E+03 4.8391E-10 2.6986E-10 1.4509E-11 1.0624E-11 - 7.9433E+03 3.2288E-10 1.8111E-10 9.9331E-12 6.5888E-12 - 8.9125E+03 2.1484E-10 1.2065E-10 6.4052E-12 4.4974E-12 - 1.0000E+04 1.4367E-10 7.9770E-11 4.1131E-12 3.1014E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7837E+04 1.7521E+04 8.2904E+03 8.2822E+03 - 1.1220E-01 1.5198E+04 1.4809E+04 7.1128E+03 7.0801E+03 - 1.2589E-01 1.2823E+04 1.2469E+04 6.0100E+03 6.0128E+03 - 1.4125E-01 1.0722E+04 1.0413E+04 5.0646E+03 5.0430E+03 - 1.5849E-01 8.9384E+03 8.6167E+03 4.2288E+03 4.1443E+03 - 1.7783E-01 7.3735E+03 7.0383E+03 3.4895E+03 3.3821E+03 - 1.9953E-01 5.9611E+03 5.6852E+03 2.8499E+03 2.7601E+03 - 2.2387E-01 4.7874E+03 4.5362E+03 2.3230E+03 2.2511E+03 - 2.5119E-01 3.8227E+03 3.6168E+03 1.8721E+03 1.8198E+03 - 2.8184E-01 3.0310E+03 2.8570E+03 1.4946E+03 1.4565E+03 - 3.1623E-01 2.3889E+03 2.2358E+03 1.1869E+03 1.1418E+03 - 3.5481E-01 1.8556E+03 1.7396E+03 9.3712E+02 8.9613E+02 - 3.9811E-01 1.4355E+03 1.3560E+03 7.3722E+02 7.0006E+02 - 4.4668E-01 1.1210E+03 1.0470E+03 5.7154E+02 5.3851E+02 - 5.0119E-01 8.6886E+02 7.9658E+02 4.3766E+02 4.1069E+02 - 5.6234E-01 6.6606E+02 6.0966E+02 3.3756E+02 3.1748E+02 - 6.3096E-01 5.1091E+02 4.6968E+02 2.6125E+02 2.4348E+02 - 7.0795E-01 3.8872E+02 3.6039E+02 1.9977E+02 1.8315E+02 - 7.9433E-01 2.9622E+02 2.7323E+02 1.5141E+02 1.3835E+02 - 8.9125E-01 2.2655E+02 2.0637E+02 1.1561E+02 1.0637E+02 - 1.0000E+00 1.7129E+02 1.5540E+02 8.8099E+01 8.0317E+01 - 1.1220E+00 1.2983E+02 1.1706E+02 6.7057E+01 6.0412E+01 - 1.2589E+00 9.7669E+01 8.9293E+01 5.0661E+01 4.4922E+01 - 1.4125E+00 7.4053E+01 6.7656E+01 3.7784E+01 3.3186E+01 - 1.5849E+00 5.5210E+01 5.0540E+01 2.8784E+01 2.4537E+01 - 1.7783E+00 4.1258E+01 3.7380E+01 2.1734E+01 1.8110E+01 - 1.9953E+00 3.1139E+01 2.7759E+01 1.5887E+01 1.3354E+01 - 2.2387E+00 2.2618E+01 2.0780E+01 1.1845E+01 9.7368E+00 - 2.5119E+00 1.6615E+01 1.5193E+01 8.8075E+00 7.1192E+00 - 2.8184E+00 1.2397E+01 1.1204E+01 6.3597E+00 5.1014E+00 - 3.1623E+00 9.0637E+00 8.2943E+00 4.6275E+00 3.6508E+00 - 3.5481E+00 6.6340E+00 6.0324E+00 3.3163E+00 2.6000E+00 - 3.9811E+00 4.8350E+00 4.3284E+00 2.3659E+00 1.8482E+00 - 4.4668E+00 3.5053E+00 3.1493E+00 1.6782E+00 1.2967E+00 - 5.0119E+00 2.5142E+00 2.3004E+00 1.1898E+00 9.0021E-01 - 5.6234E+00 1.8135E+00 1.6490E+00 8.3559E-01 6.3502E-01 - 6.3096E+00 1.3104E+00 1.1792E+00 5.8560E-01 4.4548E-01 - 7.0795E+00 9.4592E-01 8.2676E-01 4.0792E-01 3.0583E-01 - 7.9433E+00 6.7704E-01 5.9364E-01 2.8183E-01 2.1070E-01 - 8.9125E+00 4.8463E-01 4.3491E-01 1.9609E-01 1.4671E-01 - 1.0000E+01 3.4518E-01 3.0031E-01 1.3342E-01 9.9613E-02 - 1.1220E+01 2.4531E-01 2.1176E-01 9.1077E-02 6.8799E-02 - 1.2589E+01 1.7382E-01 1.5069E-01 6.2307E-02 4.8196E-02 - 1.4125E+01 1.2546E-01 1.0754E-01 4.3621E-02 3.2073E-02 - 1.5849E+01 9.0125E-02 7.6656E-02 2.9247E-02 2.1115E-02 - 1.7783E+01 6.4269E-02 5.3940E-02 1.8722E-02 1.4474E-02 - 1.9953E+01 4.6009E-02 3.8171E-02 1.2791E-02 9.8948E-03 - 2.2387E+01 3.3173E-02 2.7105E-02 8.7708E-03 6.4102E-03 - 2.5119E+01 2.3572E-02 1.9175E-02 5.8269E-03 4.1706E-03 - 2.8184E+01 1.6362E-02 1.3587E-02 3.8775E-03 2.9477E-03 - 3.1623E+01 1.1880E-02 9.5327E-03 2.6537E-03 2.0127E-03 - 3.5481E+01 8.4870E-03 6.7556E-03 1.7704E-03 1.3513E-03 - 3.9811E+01 6.0469E-03 4.7834E-03 1.1789E-03 9.0750E-04 - 4.4668E+01 4.3048E-03 3.3797E-03 7.8737E-04 6.0789E-04 - 5.0119E+01 3.0732E-03 2.3918E-03 5.2434E-04 4.0665E-04 - 5.6234E+01 2.1851E-03 1.6918E-03 3.4674E-04 2.6939E-04 - 6.3096E+01 1.5533E-03 1.1898E-03 2.3017E-04 1.8098E-04 - 7.0795E+01 1.1023E-03 8.3817E-04 1.5236E-04 1.2035E-04 - 7.9433E+01 7.8192E-04 5.8938E-04 1.0286E-04 7.8990E-05 - 8.9125E+01 5.5628E-04 4.1693E-04 6.8120E-05 5.1937E-05 - 1.0000E+02 3.9255E-04 2.9364E-04 4.4868E-05 3.5392E-05 - 1.1220E+02 2.7712E-04 2.0585E-04 2.9829E-05 2.3672E-05 - 1.2589E+02 1.9575E-04 1.4403E-04 1.9841E-05 1.5867E-05 - 1.4125E+02 1.3832E-04 1.0091E-04 1.3164E-05 1.0389E-05 - 1.5849E+02 9.7685E-05 7.0635E-05 8.8643E-06 6.9377E-06 - 1.7783E+02 6.8904E-05 4.9367E-05 5.9635E-06 4.6598E-06 - 1.9953E+02 4.8349E-05 3.4502E-05 3.8930E-06 3.1139E-06 - 2.2387E+02 3.3976E-05 2.4170E-05 2.5375E-06 2.1222E-06 - 2.5119E+02 2.3806E-05 1.6883E-05 1.7111E-06 1.4277E-06 - 2.8184E+02 1.6633E-05 1.1705E-05 1.1642E-06 9.3523E-07 - 3.1623E+02 1.1754E-05 8.1641E-06 7.7364E-07 6.1711E-07 - 3.5481E+02 8.2402E-06 5.6611E-06 5.2113E-07 4.1704E-07 - 3.9811E+02 5.7769E-06 3.9183E-06 3.4483E-07 2.7991E-07 - 4.4668E+02 4.0324E-06 2.7236E-06 2.3027E-07 1.9062E-07 - 5.0119E+02 2.8132E-06 1.8932E-06 1.5477E-07 1.2748E-07 - 5.6234E+02 1.9698E-06 1.3061E-06 1.0473E-07 8.4843E-08 - 6.3096E+02 1.3758E-06 9.0786E-07 7.0767E-08 5.7917E-08 - 7.0795E+02 9.5578E-07 6.3174E-07 4.8226E-08 3.9238E-08 - 7.9433E+02 6.6508E-07 4.3393E-07 3.1811E-08 2.6004E-08 - 8.9125E+02 4.6349E-07 2.9675E-07 2.1580E-08 1.7314E-08 - 1.0000E+03 3.2119E-07 2.0548E-07 1.4692E-08 1.1696E-08 - 1.1220E+03 2.2228E-07 1.4079E-07 9.7227E-09 7.8665E-09 - 1.2589E+03 1.5429E-07 9.6486E-08 6.4617E-09 5.2872E-09 - 1.4125E+03 1.0730E-07 6.6766E-08 4.3680E-09 3.4753E-09 - 1.5849E+03 7.3678E-08 4.5949E-08 3.0626E-09 2.3003E-09 - 1.7783E+03 5.0525E-08 3.1147E-08 2.1237E-09 1.5434E-09 - 1.9953E+03 3.4947E-08 2.1281E-08 1.3678E-09 1.0702E-09 - 2.2387E+03 2.3924E-08 1.4427E-08 9.0015E-10 7.1876E-10 - 2.5119E+03 1.6284E-08 9.8818E-09 6.1654E-10 4.5710E-10 - 2.8184E+03 1.1140E-08 6.7017E-09 4.1410E-10 3.0719E-10 - 3.1623E+03 7.6931E-09 4.5560E-09 2.6669E-10 1.9945E-10 - 3.5481E+03 5.1401E-09 3.0538E-09 1.8339E-10 1.3159E-10 - 3.9811E+03 3.4646E-09 2.0584E-09 1.1896E-10 8.8764E-11 - 4.4668E+03 2.3550E-09 1.3806E-09 7.6844E-11 6.0945E-11 - 5.0119E+03 1.5959E-09 9.2379E-10 5.1752E-11 4.1131E-11 - 5.6234E+03 1.0709E-09 6.1678E-10 3.4888E-11 2.5946E-11 - 6.3096E+03 7.1791E-10 4.1212E-10 2.2249E-11 1.5798E-11 - 7.0795E+03 4.7880E-10 2.7380E-10 1.4706E-11 1.0819E-11 - 7.9433E+03 3.1976E-10 1.8105E-10 9.7352E-12 7.1159E-12 - 8.9125E+03 2.1284E-10 1.1865E-10 6.4284E-12 4.7707E-12 - 1.0000E+04 1.4211E-10 7.8294E-11 4.1644E-12 3.1307E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8025E+04 1.7677E+04 8.4763E+03 8.3857E+03 - 1.1220E-01 1.5299E+04 1.4959E+04 7.2409E+03 7.1658E+03 - 1.2589E-01 1.2933E+04 1.2567E+04 6.1365E+03 6.0488E+03 - 1.4125E-01 1.0849E+04 1.0482E+04 5.1513E+03 5.0872E+03 - 1.5849E-01 9.0643E+03 8.6970E+03 4.2810E+03 4.2061E+03 - 1.7783E-01 7.4749E+03 7.1306E+03 3.5414E+03 3.4322E+03 - 1.9953E-01 6.0773E+03 5.7738E+03 2.9161E+03 2.8132E+03 - 2.2387E-01 4.9362E+03 4.6280E+03 2.3741E+03 2.2969E+03 - 2.5119E-01 3.9473E+03 3.6750E+03 1.9144E+03 1.8382E+03 - 2.8184E-01 3.1002E+03 2.9079E+03 1.5231E+03 1.4644E+03 - 3.1623E-01 2.4235E+03 2.2860E+03 1.2187E+03 1.1639E+03 - 3.5481E-01 1.9100E+03 1.7892E+03 9.6920E+02 9.0386E+02 - 3.9811E-01 1.4738E+03 1.3863E+03 7.5548E+02 7.0036E+02 - 4.4668E-01 1.1324E+03 1.0692E+03 5.8820E+02 5.4412E+02 - 5.0119E-01 8.8055E+02 8.2521E+02 4.5485E+02 4.2064E+02 - 5.6234E-01 6.7656E+02 6.2836E+02 3.5242E+02 3.2435E+02 - 6.3096E-01 5.1850E+02 4.7623E+02 2.6957E+02 2.4762E+02 - 7.0795E-01 3.9590E+02 3.6374E+02 2.0756E+02 1.8827E+02 - 7.9433E-01 3.0000E+02 2.7636E+02 1.6038E+02 1.4336E+02 - 8.9125E-01 2.2669E+02 2.1061E+02 1.2042E+02 1.0857E+02 - 1.0000E+00 1.7409E+02 1.5888E+02 9.1648E+01 8.1474E+01 - 1.1220E+00 1.3197E+02 1.1969E+02 6.9253E+01 6.0850E+01 - 1.2589E+00 9.8756E+01 8.9971E+01 5.1873E+01 4.5979E+01 - 1.4125E+00 7.3637E+01 6.8162E+01 3.8900E+01 3.4347E+01 - 1.5849E+00 5.5651E+01 5.1279E+01 2.9461E+01 2.5301E+01 - 1.7783E+00 4.1829E+01 3.8396E+01 2.2181E+01 1.8968E+01 - 1.9953E+00 3.1329E+01 2.8585E+01 1.6421E+01 1.3753E+01 - 2.2387E+00 2.3266E+01 2.1240E+01 1.1991E+01 9.8508E+00 - 2.5119E+00 1.7219E+01 1.5624E+01 8.7576E+00 7.1578E+00 - 2.8184E+00 1.2688E+01 1.1420E+01 6.4442E+00 5.1700E+00 - 3.1623E+00 9.0610E+00 8.2267E+00 4.6164E+00 3.6222E+00 - 3.5481E+00 6.6019E+00 6.0085E+00 3.2553E+00 2.5765E+00 - 3.9811E+00 4.8038E+00 4.3423E+00 2.3323E+00 1.8335E+00 - 4.4668E+00 3.4787E+00 3.1580E+00 1.6719E+00 1.2813E+00 - 5.0119E+00 2.5130E+00 2.2868E+00 1.1844E+00 9.0116E-01 - 5.6234E+00 1.7785E+00 1.6308E+00 8.3624E-01 6.4317E-01 - 6.3096E+00 1.2889E+00 1.1675E+00 5.8852E-01 4.4436E-01 - 7.0795E+00 9.5187E-01 8.3043E-01 4.1375E-01 3.0023E-01 - 7.9433E+00 6.8627E-01 5.8440E-01 2.9442E-01 2.1286E-01 - 8.9125E+00 4.8492E-01 4.2520E-01 2.0138E-01 1.4993E-01 - 1.0000E+01 3.4412E-01 2.9740E-01 1.3125E-01 1.0080E-01 - 1.1220E+01 2.4738E-01 2.1433E-01 9.0199E-02 6.9187E-02 - 1.2589E+01 1.7581E-01 1.5236E-01 6.2665E-02 4.6905E-02 - 1.4125E+01 1.2606E-01 1.0648E-01 4.2521E-02 3.1327E-02 - 1.5849E+01 9.0465E-02 7.6273E-02 2.8923E-02 2.1167E-02 - 1.7783E+01 6.3853E-02 5.4862E-02 1.9208E-02 1.4460E-02 - 1.9953E+01 4.5777E-02 3.9074E-02 1.2965E-02 9.4398E-03 - 2.2387E+01 3.2757E-02 2.7175E-02 8.9860E-03 6.5258E-03 - 2.5119E+01 2.3037E-02 1.9112E-02 6.2980E-03 4.5984E-03 - 2.8184E+01 1.6283E-02 1.3550E-02 4.1554E-03 3.0400E-03 - 3.1623E+01 1.1862E-02 9.4960E-03 2.6454E-03 2.0183E-03 - 3.5481E+01 8.4483E-03 6.7160E-03 1.7687E-03 1.3589E-03 - 3.9811E+01 6.0361E-03 4.7502E-03 1.1788E-03 9.1016E-04 - 4.4668E+01 4.3029E-03 3.3681E-03 7.8251E-04 6.0382E-04 - 5.0119E+01 3.0574E-03 2.3817E-03 5.2204E-04 4.0301E-04 - 5.6234E+01 2.1699E-03 1.6854E-03 3.4745E-04 2.7130E-04 - 6.3096E+01 1.5424E-03 1.1920E-03 2.3119E-04 1.8022E-04 - 7.0795E+01 1.0984E-03 8.3932E-04 1.5498E-04 1.1750E-04 - 7.9433E+01 7.7730E-04 5.9026E-04 1.0339E-04 7.7731E-05 - 8.9125E+01 5.5219E-04 4.1599E-04 6.8405E-05 5.3184E-05 - 1.0000E+02 3.9390E-04 2.9389E-04 4.4946E-05 3.5676E-05 - 1.1220E+02 2.7862E-04 2.0567E-04 2.9957E-05 2.3897E-05 - 1.2589E+02 1.9650E-04 1.4477E-04 1.9684E-05 1.5979E-05 - 1.4125E+02 1.3888E-04 1.0159E-04 1.3011E-05 1.0489E-05 - 1.5849E+02 9.7822E-05 7.0727E-05 8.7709E-06 6.9128E-06 - 1.7783E+02 6.8791E-05 4.9326E-05 5.7786E-06 4.6566E-06 - 1.9953E+02 4.8606E-05 3.4520E-05 3.8490E-06 3.0973E-06 - 2.2387E+02 3.4207E-05 2.4224E-05 2.6129E-06 2.0978E-06 - 2.5119E+02 2.4045E-05 1.6832E-05 1.7329E-06 1.4375E-06 - 2.8184E+02 1.6846E-05 1.1702E-05 1.1528E-06 9.5989E-07 - 3.1623E+02 1.1785E-05 8.1541E-06 7.6621E-07 6.2037E-07 - 3.5481E+02 8.2352E-06 5.6427E-06 5.1172E-07 4.1459E-07 - 3.9811E+02 5.7657E-06 3.9182E-06 3.4483E-07 2.7894E-07 - 4.4668E+02 4.0328E-06 2.7112E-06 2.3074E-07 1.8670E-07 - 5.0119E+02 2.8072E-06 1.8801E-06 1.5377E-07 1.2772E-07 - 5.6234E+02 1.9665E-06 1.3091E-06 1.0337E-07 8.4114E-08 - 6.3096E+02 1.3735E-06 9.0316E-07 6.9257E-08 5.6486E-08 - 7.0795E+02 9.5882E-07 6.2521E-07 4.6742E-08 3.8021E-08 - 7.9433E+02 6.6824E-07 4.3005E-07 3.1305E-08 2.5527E-08 - 8.9125E+02 4.6597E-07 2.9684E-07 2.1045E-08 1.6865E-08 - 1.0000E+03 3.2172E-07 2.0488E-07 1.4587E-08 1.1241E-08 - 1.1220E+03 2.2193E-07 1.4128E-07 9.8569E-09 7.6741E-09 - 1.2589E+03 1.5396E-07 9.7810E-08 6.7123E-09 5.1889E-09 - 1.4125E+03 1.0644E-07 6.6854E-08 4.3496E-09 3.4557E-09 - 1.5849E+03 7.3509E-08 4.5456E-08 2.9934E-09 2.3785E-09 - 1.7783E+03 5.0631E-08 3.0791E-08 2.0013E-09 1.5302E-09 - 1.9953E+03 3.4759E-08 2.1086E-08 1.2949E-09 9.8273E-10 - 2.2387E+03 2.3945E-08 1.4409E-08 8.7569E-10 6.5442E-10 - 2.5119E+03 1.6410E-08 9.8040E-09 6.0877E-10 4.5236E-10 - 2.8184E+03 1.1227E-08 6.5856E-09 4.1918E-10 3.0342E-10 - 3.1623E+03 7.6733E-09 4.5357E-09 2.7389E-10 1.9185E-10 - 3.5481E+03 5.1409E-09 3.0153E-09 1.8405E-10 1.2978E-10 - 3.9811E+03 3.4856E-09 2.0215E-09 1.1884E-10 8.9668E-11 - 4.4668E+03 2.3626E-09 1.3617E-09 7.4220E-11 5.7699E-11 - 5.0119E+03 1.5913E-09 9.1284E-10 4.9019E-11 3.8669E-11 - 5.6234E+03 1.0784E-09 6.1134E-10 3.3856E-11 2.5830E-11 - 6.3096E+03 7.1935E-10 4.1529E-10 2.3029E-11 1.4948E-11 - 7.0795E+03 4.8331E-10 2.7635E-10 1.5154E-11 9.7478E-12 - 7.9433E+03 3.2259E-10 1.8221E-10 9.6836E-12 7.0601E-12 - 8.9125E+03 2.1356E-10 1.1969E-10 6.3809E-12 4.7938E-12 - 1.0000E+04 1.4259E-10 7.9102E-11 4.6008E-12 2.9000E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8200E+04 1.8102E+04 8.6225E+03 8.4427E+03 - 1.1220E-01 1.5483E+04 1.5263E+04 7.4395E+03 7.1964E+03 - 1.2589E-01 1.3045E+04 1.2862E+04 6.3006E+03 6.0566E+03 - 1.4125E-01 1.0948E+04 1.0770E+04 5.3053E+03 5.0834E+03 - 1.5849E-01 9.1734E+03 8.9271E+03 4.4380E+03 4.2231E+03 - 1.7783E-01 7.5661E+03 7.3065E+03 3.6491E+03 3.4621E+03 - 1.9953E-01 6.1776E+03 5.9620E+03 3.0148E+03 2.8194E+03 - 2.2387E-01 4.9649E+03 4.7961E+03 2.4730E+03 2.3066E+03 - 2.5119E-01 3.9443E+03 3.8219E+03 2.0026E+03 1.8669E+03 - 2.8184E-01 3.1341E+03 3.0198E+03 1.6145E+03 1.4782E+03 - 3.1623E-01 2.4795E+03 2.3673E+03 1.2768E+03 1.1636E+03 - 3.5481E-01 1.9396E+03 1.8486E+03 1.0045E+03 9.1545E+02 - 3.9811E-01 1.4942E+03 1.4258E+03 7.9113E+02 7.1525E+02 - 4.4668E-01 1.1613E+03 1.0987E+03 6.1912E+02 5.5473E+02 - 5.0119E-01 8.9985E+02 8.4453E+02 4.8208E+02 4.2732E+02 - 5.6234E-01 6.8523E+02 6.4726E+02 3.7052E+02 3.2837E+02 - 6.3096E-01 5.2943E+02 4.9882E+02 2.8475E+02 2.5130E+02 - 7.0795E-01 4.0649E+02 3.7855E+02 2.1607E+02 1.9263E+02 - 7.9433E-01 3.0501E+02 2.8550E+02 1.6194E+02 1.4446E+02 - 8.9125E-01 2.2966E+02 2.1650E+02 1.2317E+02 1.0882E+02 - 1.0000E+00 1.7451E+02 1.6307E+02 9.3968E+01 8.1500E+01 - 1.1220E+00 1.3161E+02 1.2365E+02 7.0614E+01 5.9864E+01 - 1.2589E+00 9.9016E+01 9.2660E+01 5.3152E+01 4.4627E+01 - 1.4125E+00 7.4477E+01 6.8867E+01 4.0121E+01 3.3709E+01 - 1.5849E+00 5.5411E+01 5.1268E+01 2.9995E+01 2.4949E+01 - 1.7783E+00 4.1692E+01 3.8301E+01 2.2099E+01 1.8361E+01 - 1.9953E+00 3.0901E+01 2.8503E+01 1.6259E+01 1.3221E+01 - 2.2387E+00 2.2532E+01 2.1133E+01 1.1871E+01 9.6652E+00 - 2.5119E+00 1.6808E+01 1.5703E+01 8.8002E+00 7.0897E+00 - 2.8184E+00 1.2458E+01 1.1610E+01 6.4776E+00 5.1093E+00 - 3.1623E+00 9.0095E+00 8.2585E+00 4.6147E+00 3.6118E+00 - 3.5481E+00 6.5614E+00 6.0384E+00 3.3049E+00 2.5762E+00 - 3.9811E+00 4.7992E+00 4.3637E+00 2.3747E+00 1.8198E+00 - 4.4668E+00 3.4771E+00 3.1072E+00 1.6788E+00 1.2642E+00 - 5.0119E+00 2.4934E+00 2.2282E+00 1.1782E+00 8.8621E-01 - 5.6234E+00 1.7967E+00 1.6023E+00 8.1929E-01 6.2430E-01 - 6.3096E+00 1.3060E+00 1.1647E+00 5.7624E-01 4.3355E-01 - 7.0795E+00 9.3993E-01 8.4202E-01 3.9837E-01 3.0259E-01 - 7.9433E+00 6.6710E-01 5.8584E-01 2.7192E-01 2.0939E-01 - 8.9125E+00 4.7435E-01 4.1129E-01 1.8756E-01 1.4367E-01 - 1.0000E+01 3.4763E-01 2.9919E-01 1.3503E-01 9.9622E-02 - 1.1220E+01 2.4757E-01 2.1301E-01 9.2503E-02 6.6827E-02 - 1.2589E+01 1.7615E-01 1.5132E-01 6.3159E-02 4.5729E-02 - 1.4125E+01 1.2691E-01 1.0663E-01 4.3774E-02 3.1373E-02 - 1.5849E+01 9.0657E-02 7.5864E-02 2.9331E-02 2.1127E-02 - 1.7783E+01 6.5208E-02 5.4521E-02 1.9538E-02 1.4592E-02 - 1.9953E+01 4.6243E-02 3.8814E-02 1.3559E-02 9.6523E-03 - 2.2387E+01 3.2383E-02 2.7228E-02 9.1380E-03 6.4505E-03 - 2.5119E+01 2.3383E-02 1.9284E-02 6.0501E-03 4.5333E-03 - 2.8184E+01 1.6729E-02 1.3542E-02 4.1933E-03 2.9636E-03 - 3.1623E+01 1.1868E-02 9.5623E-03 2.6426E-03 2.0307E-03 - 3.5481E+01 8.4778E-03 6.7625E-03 1.7591E-03 1.3601E-03 - 3.9811E+01 6.0522E-03 4.7699E-03 1.1794E-03 9.0407E-04 - 4.4668E+01 4.3162E-03 3.3660E-03 7.8089E-04 6.0676E-04 - 5.0119E+01 3.0606E-03 2.3856E-03 5.1953E-04 4.1020E-04 - 5.6234E+01 2.1824E-03 1.6902E-03 3.4893E-04 2.7054E-04 - 6.3096E+01 1.5631E-03 1.1906E-03 2.3063E-04 1.7796E-04 - 7.0795E+01 1.1041E-03 8.3950E-04 1.5235E-04 1.1930E-04 - 7.9433E+01 7.8053E-04 5.9163E-04 1.0125E-04 7.9306E-05 - 8.9125E+01 5.5247E-04 4.1633E-04 6.6708E-05 5.2360E-05 - 1.0000E+02 3.9332E-04 2.9345E-04 4.4718E-05 3.5029E-05 - 1.1220E+02 2.7814E-04 2.0586E-04 2.9602E-05 2.3399E-05 - 1.2589E+02 1.9619E-04 1.4391E-04 1.9603E-05 1.5551E-05 - 1.4125E+02 1.3831E-04 1.0093E-04 1.3186E-05 1.0222E-05 - 1.5849E+02 9.7634E-05 7.0819E-05 8.7582E-06 6.8448E-06 - 1.7783E+02 6.8982E-05 4.9588E-05 5.7508E-06 4.6082E-06 - 1.9953E+02 4.8650E-05 3.4537E-05 3.7992E-06 3.0866E-06 - 2.2387E+02 3.4112E-05 2.4146E-05 2.5253E-06 2.0239E-06 - 2.5119E+02 2.3854E-05 1.6852E-05 1.6858E-06 1.3559E-06 - 2.8184E+02 1.6763E-05 1.1641E-05 1.1410E-06 9.1545E-07 - 3.1623E+02 1.1751E-05 8.1116E-06 7.7060E-07 6.1498E-07 - 3.5481E+02 8.2284E-06 5.6109E-06 5.1502E-07 4.1447E-07 - 3.9811E+02 5.7562E-06 3.9343E-06 3.4649E-07 2.7705E-07 - 4.4668E+02 4.0356E-06 2.7411E-06 2.3500E-07 1.8555E-07 - 5.0119E+02 2.8208E-06 1.8863E-06 1.5708E-07 1.2329E-07 - 5.6234E+02 1.9682E-06 1.3092E-06 1.0475E-07 8.4019E-08 - 6.3096E+02 1.3659E-06 9.0177E-07 7.0860E-08 5.7194E-08 - 7.0795E+02 9.5254E-07 6.2180E-07 4.7241E-08 3.9210E-08 - 7.9433E+02 6.6441E-07 4.3023E-07 3.1772E-08 2.5458E-08 - 8.9125E+02 4.6237E-07 2.9667E-07 2.1630E-08 1.6619E-08 - 1.0000E+03 3.2166E-07 2.0419E-07 1.4631E-08 1.1493E-08 - 1.1220E+03 2.2246E-07 1.4012E-07 9.8517E-09 7.6920E-09 - 1.2589E+03 1.5460E-07 9.6972E-08 6.5284E-09 5.0578E-09 - 1.4125E+03 1.0638E-07 6.6624E-08 4.3955E-09 3.3619E-09 - 1.5849E+03 7.3039E-08 4.5372E-08 3.0733E-09 2.3147E-09 - 1.7783E+03 5.0430E-08 3.1066E-08 1.9538E-09 1.5176E-09 - 1.9953E+03 3.4604E-08 2.1219E-08 1.3220E-09 1.0112E-09 - 2.2387E+03 2.3791E-08 1.4478E-08 9.1111E-10 6.7450E-10 - 2.5119E+03 1.6300E-08 9.8592E-09 5.7635E-10 4.4859E-10 - 2.8184E+03 1.1149E-08 6.5970E-09 3.8629E-10 2.9054E-10 - 3.1623E+03 7.6770E-09 4.5489E-09 2.6643E-10 2.0338E-10 - 3.5481E+03 5.1223E-09 3.0489E-09 1.7107E-10 1.3342E-10 - 3.9811E+03 3.4737E-09 2.0381E-09 1.1484E-10 8.6534E-11 - 4.4668E+03 2.3486E-09 1.3580E-09 7.8709E-11 5.6505E-11 - 5.0119E+03 1.5908E-09 9.1420E-10 5.4142E-11 3.7152E-11 - 5.6234E+03 1.0692E-09 6.1757E-10 3.4650E-11 2.4693E-11 - 6.3096E+03 7.1482E-10 4.1120E-10 2.2591E-11 1.6996E-11 - 7.0795E+03 4.8213E-10 2.7418E-10 1.5282E-11 1.0876E-11 - 7.9433E+03 3.2218E-10 1.8121E-10 1.0191E-11 7.2114E-12 - 8.9125E+03 2.1551E-10 1.1964E-10 6.7045E-12 4.6687E-12 - 1.0000E+04 1.4449E-10 7.9144E-11 4.1196E-12 3.0440E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8226E+04 1.8412E+04 8.8973E+03 8.3317E+03 - 1.1220E-01 1.5506E+04 1.5667E+04 7.7003E+03 7.1339E+03 - 1.2589E-01 1.3203E+04 1.3224E+04 6.5636E+03 6.0559E+03 - 1.4125E-01 1.1144E+04 1.1075E+04 5.5269E+03 5.0735E+03 - 1.5849E-01 9.2817E+03 9.2223E+03 4.6176E+03 4.2133E+03 - 1.7783E-01 7.6384E+03 7.5935E+03 3.8272E+03 3.4808E+03 - 1.9953E-01 6.2457E+03 6.1707E+03 3.1622E+03 2.8462E+03 - 2.2387E-01 5.0305E+03 4.9626E+03 2.5845E+03 2.3208E+03 - 2.5119E-01 4.0001E+03 3.9753E+03 2.0981E+03 1.8591E+03 - 2.8184E-01 3.1682E+03 3.1340E+03 1.6942E+03 1.4653E+03 - 3.1623E-01 2.4980E+03 2.4645E+03 1.3428E+03 1.1529E+03 - 3.5481E-01 1.9510E+03 1.9235E+03 1.0647E+03 8.9900E+02 - 3.9811E-01 1.5083E+03 1.4873E+03 8.3235E+02 7.0365E+02 - 4.4668E-01 1.1695E+03 1.1449E+03 6.4583E+02 5.4602E+02 - 5.0119E-01 9.0306E+02 8.7857E+02 5.0351E+02 4.2238E+02 - 5.6234E-01 6.9293E+02 6.7517E+02 3.8603E+02 3.2452E+02 - 6.3096E-01 5.2950E+02 5.1127E+02 2.9348E+02 2.4688E+02 - 7.0795E-01 4.0467E+02 3.9070E+02 2.2694E+02 1.8741E+02 - 7.9433E-01 3.0345E+02 2.9662E+02 1.7429E+02 1.4149E+02 - 8.9125E-01 2.2878E+02 2.2271E+02 1.3069E+02 1.0665E+02 - 1.0000E+00 1.7554E+02 1.6806E+02 9.9107E+01 8.0530E+01 - 1.1220E+00 1.3252E+02 1.2718E+02 7.5344E+01 6.0162E+01 - 1.2589E+00 9.9540E+01 9.5939E+01 5.6371E+01 4.4708E+01 - 1.4125E+00 7.4667E+01 7.1818E+01 4.1990E+01 3.3497E+01 - 1.5849E+00 5.5962E+01 5.2819E+01 3.1060E+01 2.4823E+01 - 1.7783E+00 4.1446E+01 3.9399E+01 2.2975E+01 1.8283E+01 - 1.9953E+00 3.0957E+01 2.9505E+01 1.7097E+01 1.3355E+01 - 2.2387E+00 2.3282E+01 2.1661E+01 1.2629E+01 9.6774E+00 - 2.5119E+00 1.6827E+01 1.5990E+01 9.1362E+00 7.0137E+00 - 2.8184E+00 1.2187E+01 1.1635E+01 6.5860E+00 5.0477E+00 - 3.1623E+00 9.0718E+00 8.4011E+00 4.7493E+00 3.6263E+00 - 3.5481E+00 6.6318E+00 6.1371E+00 3.3918E+00 2.5615E+00 - 3.9811E+00 4.8235E+00 4.4715E+00 2.4220E+00 1.8213E+00 - 4.4668E+00 3.4960E+00 3.2227E+00 1.6811E+00 1.2788E+00 - 5.0119E+00 2.5231E+00 2.2995E+00 1.1959E+00 8.9123E-01 - 5.6234E+00 1.8338E+00 1.6412E+00 8.6162E-01 6.2578E-01 - 6.3096E+00 1.3172E+00 1.1933E+00 5.8919E-01 4.4213E-01 - 7.0795E+00 9.4330E-01 8.4021E-01 4.0287E-01 3.0279E-01 - 7.9433E+00 6.7467E-01 5.8823E-01 2.7878E-01 2.0696E-01 - 8.9125E+00 4.8293E-01 4.2299E-01 1.9271E-01 1.4958E-01 - 1.0000E+01 3.4244E-01 2.9710E-01 1.3158E-01 1.0063E-01 - 1.1220E+01 2.4459E-01 2.1031E-01 9.1301E-02 6.8194E-02 - 1.2589E+01 1.7586E-01 1.4947E-01 6.1878E-02 4.6230E-02 - 1.4125E+01 1.2713E-01 1.0654E-01 4.2165E-02 3.1614E-02 - 1.5849E+01 9.0585E-02 7.5426E-02 2.8208E-02 2.1547E-02 - 1.7783E+01 6.3569E-02 5.3396E-02 1.9156E-02 1.4454E-02 - 1.9953E+01 4.5307E-02 3.8172E-02 1.3046E-02 9.9093E-03 - 2.2387E+01 3.2288E-02 2.6971E-02 8.7737E-03 6.7823E-03 - 2.5119E+01 2.3128E-02 1.9186E-02 5.8569E-03 4.3283E-03 - 2.8184E+01 1.6494E-02 1.3545E-02 3.8337E-03 2.8663E-03 - 3.1623E+01 1.1878E-02 9.5519E-03 2.6315E-03 2.0117E-03 - 3.5481E+01 8.4563E-03 6.7597E-03 1.7642E-03 1.3584E-03 - 3.9811E+01 6.0335E-03 4.7727E-03 1.1754E-03 9.0942E-04 - 4.4668E+01 4.3027E-03 3.3779E-03 7.8279E-04 6.0686E-04 - 5.0119E+01 3.0637E-03 2.3900E-03 5.2350E-04 4.0232E-04 - 5.6234E+01 2.1792E-03 1.6799E-03 3.4863E-04 2.6782E-04 - 6.3096E+01 1.5489E-03 1.1810E-03 2.3152E-04 1.7866E-04 - 7.0795E+01 1.1008E-03 8.3430E-04 1.5365E-04 1.1917E-04 - 7.9433E+01 7.8314E-04 5.8885E-04 1.0205E-04 7.9483E-05 - 8.9125E+01 5.5329E-04 4.1494E-04 6.6873E-05 5.2754E-05 - 1.0000E+02 3.9288E-04 2.9279E-04 4.4869E-05 3.5522E-05 - 1.1220E+02 2.7774E-04 2.0526E-04 2.9767E-05 2.3773E-05 - 1.2589E+02 1.9646E-04 1.4423E-04 1.9722E-05 1.5846E-05 - 1.4125E+02 1.3882E-04 1.0145E-04 1.3044E-05 1.0574E-05 - 1.5849E+02 9.7793E-05 7.0860E-05 8.7232E-06 6.9926E-06 - 1.7783E+02 6.8869E-05 4.9404E-05 5.8252E-06 4.6824E-06 - 1.9953E+02 4.8121E-05 3.4500E-05 3.8922E-06 3.1368E-06 - 2.2387E+02 3.3797E-05 2.4057E-05 2.6071E-06 2.0633E-06 - 2.5119E+02 2.3979E-05 1.6589E-05 1.7161E-06 1.3421E-06 - 2.8184E+02 1.6903E-05 1.1577E-05 1.1307E-06 9.2996E-07 - 3.1623E+02 1.1742E-05 8.1325E-06 7.6837E-07 6.2845E-07 - 3.5481E+02 8.2256E-06 5.6480E-06 5.1877E-07 4.1981E-07 - 3.9811E+02 5.7775E-06 3.9235E-06 3.4984E-07 2.8207E-07 - 4.4668E+02 4.0361E-06 2.7218E-06 2.3578E-07 1.8790E-07 - 5.0119E+02 2.8136E-06 1.8854E-06 1.5739E-07 1.2496E-07 - 5.6234E+02 1.9678E-06 1.3081E-06 1.0438E-07 8.4215E-08 - 6.3096E+02 1.3727E-06 9.0257E-07 7.1071E-08 5.6497E-08 - 7.0795E+02 9.5676E-07 6.2284E-07 4.7247E-08 3.7837E-08 - 7.9433E+02 6.6193E-07 4.3191E-07 3.2049E-08 2.5283E-08 - 8.9125E+02 4.6203E-07 2.9706E-07 2.1587E-08 1.7462E-08 - 1.0000E+03 3.2400E-07 2.0509E-07 1.4508E-08 1.1751E-08 - 1.1220E+03 2.2291E-07 1.4120E-07 9.9938E-09 7.6794E-09 - 1.2589E+03 1.5382E-07 9.7167E-08 6.6685E-09 5.0376E-09 - 1.4125E+03 1.0624E-07 6.6770E-08 4.4946E-09 3.3498E-09 - 1.5849E+03 7.3158E-08 4.5631E-08 2.9660E-09 2.2580E-09 - 1.7783E+03 5.0427E-08 3.1061E-08 1.9842E-09 1.5087E-09 - 1.9953E+03 3.5025E-08 2.1091E-08 1.3571E-09 1.0419E-09 - 2.2387E+03 2.3897E-08 1.4230E-08 9.1551E-10 7.0224E-10 - 2.5119E+03 1.6264E-08 9.7474E-09 6.1789E-10 4.6242E-10 - 2.8184E+03 1.1156E-08 6.6196E-09 3.9962E-10 2.9950E-10 - 3.1623E+03 7.6678E-09 4.5203E-09 2.6266E-10 2.0119E-10 - 3.5481E+03 5.1360E-09 3.0013E-09 1.7827E-10 1.3432E-10 - 3.9811E+03 3.4701E-09 2.0504E-09 1.1970E-10 8.5626E-11 - 4.4668E+03 2.3311E-09 1.3888E-09 7.8582E-11 5.2894E-11 - 5.0119E+03 1.5901E-09 9.3050E-10 5.1930E-11 3.6045E-11 - 5.6234E+03 1.0795E-09 6.1833E-10 3.4204E-11 2.5906E-11 - 6.3096E+03 7.1928E-10 4.0976E-10 2.2417E-11 1.6587E-11 - 7.0795E+03 4.7981E-10 2.7190E-10 1.5494E-11 1.0623E-11 - 7.9433E+03 3.2083E-10 1.8130E-10 1.0227E-11 6.9845E-12 - 8.9125E+03 2.1423E-10 1.2062E-10 6.6541E-12 4.6864E-12 - 1.0000E+04 1.4234E-10 7.9497E-11 4.2931E-12 2.9722E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8369E+04 1.8734E+04 9.1645E+03 8.4117E+03 - 1.1220E-01 1.5679E+04 1.5959E+04 7.9017E+03 7.1537E+03 - 1.2589E-01 1.3323E+04 1.3531E+04 6.7370E+03 6.0091E+03 - 1.4125E-01 1.1211E+04 1.1358E+04 5.6997E+03 5.0304E+03 - 1.5849E-01 9.3202E+03 9.4519E+03 4.7958E+03 4.1603E+03 - 1.7783E-01 7.6851E+03 7.7743E+03 3.9712E+03 3.4344E+03 - 1.9953E-01 6.2597E+03 6.3250E+03 3.2782E+03 2.8041E+03 - 2.2387E-01 5.0456E+03 5.0963E+03 2.7017E+03 2.2696E+03 - 2.5119E-01 4.0420E+03 4.0808E+03 2.2127E+03 1.8282E+03 - 2.8184E-01 3.1946E+03 3.2443E+03 1.7839E+03 1.4638E+03 - 3.1623E-01 2.5071E+03 2.5456E+03 1.4063E+03 1.1530E+03 - 3.5481E-01 1.9662E+03 1.9890E+03 1.1082E+03 8.9246E+02 - 3.9811E-01 1.5303E+03 1.5425E+03 8.8180E+02 6.9330E+02 - 4.4668E-01 1.1803E+03 1.1911E+03 6.8804E+02 5.4112E+02 - 5.0119E-01 9.0543E+02 9.1998E+02 5.3120E+02 4.1868E+02 - 5.6234E-01 6.9707E+02 7.0303E+02 4.1044E+02 3.2275E+02 - 6.3096E-01 5.3455E+02 5.3347E+02 3.1284E+02 2.4707E+02 - 7.0795E-01 4.0181E+02 4.0330E+02 2.3894E+02 1.8614E+02 - 7.9433E-01 3.0436E+02 3.0379E+02 1.8144E+02 1.3914E+02 - 8.9125E-01 2.2994E+02 2.3024E+02 1.3570E+02 1.0589E+02 - 1.0000E+00 1.7512E+02 1.7286E+02 1.0216E+02 7.8957E+01 - 1.1220E+00 1.3217E+02 1.2970E+02 7.6588E+01 5.9337E+01 - 1.2589E+00 9.9061E+01 9.7134E+01 5.7893E+01 4.4440E+01 - 1.4125E+00 7.4714E+01 7.2159E+01 4.3300E+01 3.3064E+01 - 1.5849E+00 5.5835E+01 5.3768E+01 3.1662E+01 2.4598E+01 - 1.7783E+00 4.1291E+01 3.9697E+01 2.3490E+01 1.7821E+01 - 1.9953E+00 3.0492E+01 2.9624E+01 1.7145E+01 1.2817E+01 - 2.2387E+00 2.2702E+01 2.1945E+01 1.2423E+01 9.4666E+00 - 2.5119E+00 1.6715E+01 1.5894E+01 9.2322E+00 6.8385E+00 - 2.8184E+00 1.2225E+01 1.1529E+01 6.6776E+00 4.9058E+00 - 3.1623E+00 9.0561E+00 8.4403E+00 4.7612E+00 3.6395E+00 - 3.5481E+00 6.6304E+00 6.1313E+00 3.3875E+00 2.5695E+00 - 3.9811E+00 4.8044E+00 4.4112E+00 2.3986E+00 1.8357E+00 - 4.4668E+00 3.4923E+00 3.1766E+00 1.7039E+00 1.2883E+00 - 5.0119E+00 2.5270E+00 2.2993E+00 1.2154E+00 8.8767E-01 - 5.6234E+00 1.8004E+00 1.6379E+00 8.4135E-01 6.1139E-01 - 6.3096E+00 1.2969E+00 1.1741E+00 5.8437E-01 4.3018E-01 - 7.0795E+00 9.4683E-01 8.2398E-01 4.0528E-01 3.0302E-01 - 7.9433E+00 6.7432E-01 5.8428E-01 2.8407E-01 2.0531E-01 - 8.9125E+00 4.8018E-01 4.2469E-01 1.9679E-01 1.4375E-01 - 1.0000E+01 3.4417E-01 3.0169E-01 1.3454E-01 9.8539E-02 - 1.1220E+01 2.4675E-01 2.1357E-01 9.1124E-02 6.7507E-02 - 1.2589E+01 1.7592E-01 1.4998E-01 6.2377E-02 4.6230E-02 - 1.4125E+01 1.2584E-01 1.0651E-01 4.2194E-02 3.0786E-02 - 1.5849E+01 8.9644E-02 7.5269E-02 2.8556E-02 2.1133E-02 - 1.7783E+01 6.4547E-02 5.3925E-02 1.9790E-02 1.4187E-02 - 1.9953E+01 4.6448E-02 3.8705E-02 1.3240E-02 9.6595E-03 - 2.2387E+01 3.2828E-02 2.6536E-02 8.6513E-03 6.7722E-03 - 2.5119E+01 2.3354E-02 1.8513E-02 5.9549E-03 4.5943E-03 - 2.8184E+01 1.6326E-02 1.3189E-02 3.9527E-03 2.9983E-03 - 3.1623E+01 1.1898E-02 9.5460E-03 2.6507E-03 2.0205E-03 - 3.5481E+01 8.5008E-03 6.7525E-03 1.7768E-03 1.3585E-03 - 3.9811E+01 6.0448E-03 4.7801E-03 1.1822E-03 9.0991E-04 - 4.4668E+01 4.3060E-03 3.3825E-03 7.8301E-04 6.0853E-04 - 5.0119E+01 3.0694E-03 2.3944E-03 5.1845E-04 4.1066E-04 - 5.6234E+01 2.1871E-03 1.6887E-03 3.4407E-04 2.7313E-04 - 6.3096E+01 1.5547E-03 1.1876E-03 2.2936E-04 1.7974E-04 - 7.0795E+01 1.1001E-03 8.3898E-04 1.5489E-04 1.1990E-04 - 7.9433E+01 7.8127E-04 5.8722E-04 1.0285E-04 8.0069E-05 - 8.9125E+01 5.5525E-04 4.1522E-04 6.7459E-05 5.3132E-05 - 1.0000E+02 3.9387E-04 2.9268E-04 4.4556E-05 3.5557E-05 - 1.1220E+02 2.7877E-04 2.0522E-04 2.9627E-05 2.3821E-05 - 1.2589E+02 1.9652E-04 1.4399E-04 1.9609E-05 1.5772E-05 - 1.4125E+02 1.3860E-04 1.0114E-04 1.3040E-05 1.0462E-05 - 1.5849E+02 9.7662E-05 7.1020E-05 8.7261E-06 7.1215E-06 - 1.7783E+02 6.8673E-05 4.9620E-05 5.8020E-06 4.7483E-06 - 1.9953E+02 4.8282E-05 3.4525E-05 3.8161E-06 3.0634E-06 - 2.2387E+02 3.3977E-05 2.4028E-05 2.5959E-06 2.0581E-06 - 2.5119E+02 2.3872E-05 1.6734E-05 1.7236E-06 1.3834E-06 - 2.8184E+02 1.6930E-05 1.1744E-05 1.1309E-06 9.2720E-07 - 3.1623E+02 1.1783E-05 8.1248E-06 7.7192E-07 6.2357E-07 - 3.5481E+02 8.2033E-06 5.6387E-06 5.1381E-07 4.1608E-07 - 3.9811E+02 5.7555E-06 3.9179E-06 3.4538E-07 2.8202E-07 - 4.4668E+02 4.0358E-06 2.7283E-06 2.3097E-07 1.8779E-07 - 5.0119E+02 2.8105E-06 1.8958E-06 1.5722E-07 1.2572E-07 - 5.6234E+02 1.9629E-06 1.3037E-06 1.0765E-07 8.3264E-08 - 6.3096E+02 1.3729E-06 9.0238E-07 7.1633E-08 5.6259E-08 - 7.0795E+02 9.5693E-07 6.2410E-07 4.7890E-08 3.8355E-08 - 7.9433E+02 6.6077E-07 4.2915E-07 3.1806E-08 2.5669E-08 - 8.9125E+02 4.5913E-07 2.9635E-07 2.1525E-08 1.6992E-08 - 1.0000E+03 3.2089E-07 2.0501E-07 1.4717E-08 1.1676E-08 - 1.1220E+03 2.2305E-07 1.4029E-07 9.7886E-09 7.9594E-09 - 1.2589E+03 1.5369E-07 9.5866E-08 6.5939E-09 5.2920E-09 - 1.4125E+03 1.0567E-07 6.5750E-08 4.4173E-09 3.4978E-09 - 1.5849E+03 7.3117E-08 4.5279E-08 2.9848E-09 2.1941E-09 - 1.7783E+03 5.0311E-08 3.0958E-08 1.9862E-09 1.4852E-09 - 1.9953E+03 3.4835E-08 2.1127E-08 1.3445E-09 1.0444E-09 - 2.2387E+03 2.3844E-08 1.4292E-08 9.1717E-10 6.9190E-10 - 2.5119E+03 1.6276E-08 9.6820E-09 5.9410E-10 4.5337E-10 - 2.8184E+03 1.1106E-08 6.6462E-09 4.0438E-10 2.9804E-10 - 3.1623E+03 7.7146E-09 4.5573E-09 2.6572E-10 1.9615E-10 - 3.5481E+03 5.1793E-09 3.0406E-09 1.7950E-10 1.2962E-10 - 3.9811E+03 3.4699E-09 2.0521E-09 1.1862E-10 8.5635E-11 - 4.4668E+03 2.3510E-09 1.3770E-09 7.9551E-11 5.4219E-11 - 5.0119E+03 1.5925E-09 9.2471E-10 5.3249E-11 3.5856E-11 - 5.6234E+03 1.0655E-09 6.1905E-10 3.5565E-11 2.4313E-11 - 6.3096E+03 7.1824E-10 4.1295E-10 2.2423E-11 1.6252E-11 - 7.0795E+03 4.8333E-10 2.7145E-10 1.4835E-11 1.0966E-11 - 7.9433E+03 3.2388E-10 1.8078E-10 9.9162E-12 7.1539E-12 - 8.9125E+03 2.1551E-10 1.2013E-10 6.7401E-12 4.4670E-12 - 1.0000E+04 1.4311E-10 7.8907E-11 4.3022E-12 3.0078E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8363E+04 1.9048E+04 9.3361E+03 8.2579E+03 - 1.1220E-01 1.5586E+04 1.6210E+04 8.1396E+03 7.0909E+03 - 1.2589E-01 1.3267E+04 1.3745E+04 6.9867E+03 5.9781E+03 - 1.4125E-01 1.1240E+04 1.1544E+04 5.8938E+03 5.0136E+03 - 1.5849E-01 9.3715E+03 9.6556E+03 4.9554E+03 4.1776E+03 - 1.7783E-01 7.6938E+03 7.9607E+03 4.1383E+03 3.4248E+03 - 1.9953E-01 6.2755E+03 6.4947E+03 3.4188E+03 2.7825E+03 - 2.2387E-01 5.0739E+03 5.2285E+03 2.8008E+03 2.2639E+03 - 2.5119E-01 4.0625E+03 4.1763E+03 2.2829E+03 1.8300E+03 - 2.8184E-01 3.2117E+03 3.3315E+03 1.8386E+03 1.4329E+03 - 3.1623E-01 2.5030E+03 2.6312E+03 1.4612E+03 1.1287E+03 - 3.5481E-01 1.9516E+03 2.0501E+03 1.1658E+03 8.8514E+02 - 3.9811E-01 1.5327E+03 1.5767E+03 9.1232E+02 6.8337E+02 - 4.4668E-01 1.1880E+03 1.2202E+03 7.0342E+02 5.3044E+02 - 5.0119E-01 9.0432E+02 9.3943E+02 5.4861E+02 4.0880E+02 - 5.6234E-01 6.9535E+02 7.1584E+02 4.2554E+02 3.1223E+02 - 6.3096E-01 5.3349E+02 5.4531E+02 3.2180E+02 2.3966E+02 - 7.0795E-01 3.9862E+02 4.1350E+02 2.4479E+02 1.8416E+02 - 7.9433E-01 3.0197E+02 3.1096E+02 1.8666E+02 1.3698E+02 - 8.9125E-01 2.3010E+02 2.3424E+02 1.4023E+02 1.0204E+02 - 1.0000E+00 1.7375E+02 1.7709E+02 1.0607E+02 7.7125E+01 - 1.1220E+00 1.3192E+02 1.3307E+02 7.9128E+01 5.8556E+01 - 1.2589E+00 9.9211E+01 9.9249E+01 5.8838E+01 4.4286E+01 - 1.4125E+00 7.4226E+01 7.3666E+01 4.3943E+01 3.2746E+01 - 1.5849E+00 5.5998E+01 5.5215E+01 3.2828E+01 2.4146E+01 - 1.7783E+00 4.1862E+01 4.0576E+01 2.4127E+01 1.7593E+01 - 1.9953E+00 3.0876E+01 2.9762E+01 1.7541E+01 1.2820E+01 - 2.2387E+00 2.3003E+01 2.2117E+01 1.2763E+01 9.6212E+00 - 2.5119E+00 1.6906E+01 1.6114E+01 9.1980E+00 7.0983E+00 - 2.8184E+00 1.2177E+01 1.1483E+01 6.5533E+00 5.1028E+00 - 3.1623E+00 9.0886E+00 8.5974E+00 4.8243E+00 3.5879E+00 - 3.5481E+00 6.6711E+00 6.2309E+00 3.4517E+00 2.5732E+00 - 3.9811E+00 4.8554E+00 4.4897E+00 2.4221E+00 1.8321E+00 - 4.4668E+00 3.4995E+00 3.2308E+00 1.7097E+00 1.2961E+00 - 5.0119E+00 2.5192E+00 2.2999E+00 1.2152E+00 9.0979E-01 - 5.6234E+00 1.8217E+00 1.6346E+00 8.4573E-01 6.3716E-01 - 6.3096E+00 1.3027E+00 1.1752E+00 5.9424E-01 4.4009E-01 - 7.0795E+00 9.3070E-01 8.2756E-01 4.1286E-01 3.0001E-01 - 7.9433E+00 6.6438E-01 5.7896E-01 2.8883E-01 2.1101E-01 - 8.9125E+00 4.7801E-01 4.1549E-01 1.9680E-01 1.4289E-01 - 1.0000E+01 3.4236E-01 3.0303E-01 1.3367E-01 9.9678E-02 - 1.1220E+01 2.4745E-01 2.1393E-01 9.3017E-02 6.9074E-02 - 1.2589E+01 1.7723E-01 1.4950E-01 6.2324E-02 4.7770E-02 - 1.4125E+01 1.2659E-01 1.0541E-01 4.2407E-02 3.2446E-02 - 1.5849E+01 9.0700E-02 7.5441E-02 2.8965E-02 2.1539E-02 - 1.7783E+01 6.4051E-02 5.3996E-02 1.8681E-02 1.4352E-02 - 1.9953E+01 4.4973E-02 3.8785E-02 1.2818E-02 9.5650E-03 - 2.2387E+01 3.2094E-02 2.7312E-02 9.0212E-03 6.3916E-03 - 2.5119E+01 2.3100E-02 1.8502E-02 5.9294E-03 4.3079E-03 - 2.8184E+01 1.6768E-02 1.2990E-02 4.0307E-03 2.8971E-03 - 3.1623E+01 1.1859E-02 9.5724E-03 2.6612E-03 2.0290E-03 - 3.5481E+01 8.4740E-03 6.7838E-03 1.7664E-03 1.3664E-03 - 3.9811E+01 6.0414E-03 4.8020E-03 1.1804E-03 9.1445E-04 - 4.4668E+01 4.3111E-03 3.3825E-03 7.8605E-04 6.1263E-04 - 5.0119E+01 3.0743E-03 2.3924E-03 5.2153E-04 4.0985E-04 - 5.6234E+01 2.1899E-03 1.6993E-03 3.4715E-04 2.7155E-04 - 6.3096E+01 1.5576E-03 1.1971E-03 2.3056E-04 1.8206E-04 - 7.0795E+01 1.1040E-03 8.4030E-04 1.5262E-04 1.2220E-04 - 7.9433E+01 7.7905E-04 5.9566E-04 1.0200E-04 8.1841E-05 - 8.9125E+01 5.5469E-04 4.2120E-04 6.7708E-05 5.4958E-05 - 1.0000E+02 3.9289E-04 2.9417E-04 4.4635E-05 3.5505E-05 - 1.1220E+02 2.7820E-04 2.0610E-04 2.9777E-05 2.3735E-05 - 1.2589E+02 1.9707E-04 1.4428E-04 1.9810E-05 1.5868E-05 - 1.4125E+02 1.3925E-04 1.0099E-04 1.3052E-05 1.0605E-05 - 1.5849E+02 9.8073E-05 7.0994E-05 8.7272E-06 7.0621E-06 - 1.7783E+02 6.9300E-05 4.9677E-05 5.8467E-06 4.7397E-06 - 1.9953E+02 4.8694E-05 3.4772E-05 3.9053E-06 3.1411E-06 - 2.2387E+02 3.3966E-05 2.4174E-05 2.5563E-06 2.1391E-06 - 2.5119E+02 2.4037E-05 1.6836E-05 1.7034E-06 1.4595E-06 - 2.8184E+02 1.6846E-05 1.1812E-05 1.1482E-06 9.3717E-07 - 3.1623E+02 1.1743E-05 8.1450E-06 7.6814E-07 6.2403E-07 - 3.5481E+02 8.2432E-06 5.6577E-06 5.1441E-07 4.2370E-07 - 3.9811E+02 5.7766E-06 3.9298E-06 3.4321E-07 2.8193E-07 - 4.4668E+02 4.0231E-06 2.7187E-06 2.3067E-07 1.8660E-07 - 5.0119E+02 2.8072E-06 1.8854E-06 1.5561E-07 1.2487E-07 - 5.6234E+02 1.9695E-06 1.3065E-06 1.0617E-07 8.4682E-08 - 6.3096E+02 1.3680E-06 9.0536E-07 7.1241E-08 5.6214E-08 - 7.0795E+02 9.5190E-07 6.2685E-07 4.7837E-08 3.7333E-08 - 7.9433E+02 6.6550E-07 4.3064E-07 3.2150E-08 2.5511E-08 - 8.9125E+02 4.6322E-07 2.9741E-07 2.1412E-08 1.6983E-08 - 1.0000E+03 3.2257E-07 2.0608E-07 1.4251E-08 1.1611E-08 - 1.1220E+03 2.2313E-07 1.4094E-07 9.6331E-09 7.9409E-09 - 1.2589E+03 1.5382E-07 9.6704E-08 6.5188E-09 5.1865E-09 - 1.4125E+03 1.0606E-07 6.6411E-08 4.4754E-09 3.3628E-09 - 1.5849E+03 7.3188E-08 4.5533E-08 3.0518E-09 2.2708E-09 - 1.7783E+03 5.0502E-08 3.0911E-08 2.0255E-09 1.6223E-09 - 1.9953E+03 3.4885E-08 2.1278E-08 1.3465E-09 1.0711E-09 - 2.2387E+03 2.3886E-08 1.4462E-08 8.9320E-10 6.7486E-10 - 2.5119E+03 1.6441E-08 9.6831E-09 5.8642E-10 4.5176E-10 - 2.8184E+03 1.1241E-08 6.5509E-09 3.9772E-10 3.0926E-10 - 3.1623E+03 7.6744E-09 4.5410E-09 2.6559E-10 2.0419E-10 - 3.5481E+03 5.1256E-09 3.0064E-09 1.7790E-10 1.3268E-10 - 3.9811E+03 3.4858E-09 2.0404E-09 1.1628E-10 8.6594E-11 - 4.4668E+03 2.3595E-09 1.3690E-09 7.4962E-11 5.5247E-11 - 5.0119E+03 1.5835E-09 9.1385E-10 5.0796E-11 3.6261E-11 - 5.6234E+03 1.0599E-09 6.1485E-10 3.4427E-11 2.5585E-11 - 6.3096E+03 7.1895E-10 4.1204E-10 2.2217E-11 1.6769E-11 - 7.0795E+03 4.8125E-10 2.7168E-10 1.4470E-11 1.0684E-11 - 7.9433E+03 3.2039E-10 1.7860E-10 1.0026E-11 6.8688E-12 - 8.9125E+03 2.1384E-10 1.1993E-10 6.3746E-12 4.5894E-12 - 1.0000E+04 1.4226E-10 8.0616E-11 3.9520E-12 2.9611E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8423E+04 1.9186E+04 9.4739E+03 8.2366E+03 - 1.1220E-01 1.5684E+04 1.6329E+04 8.1793E+03 7.0984E+03 - 1.2589E-01 1.3283E+04 1.3830E+04 7.0009E+03 5.9486E+03 - 1.4125E-01 1.1195E+04 1.1651E+04 5.9523E+03 4.9644E+03 - 1.5849E-01 9.3665E+03 9.7019E+03 4.9855E+03 4.1439E+03 - 1.7783E-01 7.7148E+03 8.0086E+03 4.1623E+03 3.3845E+03 - 1.9953E-01 6.2618E+03 6.5593E+03 3.4422E+03 2.7558E+03 - 2.2387E-01 5.0810E+03 5.2916E+03 2.8170E+03 2.2410E+03 - 2.5119E-01 4.0611E+03 4.2077E+03 2.2873E+03 1.7954E+03 - 2.8184E-01 3.2075E+03 3.3622E+03 1.8470E+03 1.4292E+03 - 3.1623E-01 2.5328E+03 2.6604E+03 1.4837E+03 1.1241E+03 - 3.5481E-01 1.9735E+03 2.0708E+03 1.1746E+03 8.7691E+02 - 3.9811E-01 1.5218E+03 1.6033E+03 9.2335E+02 6.8965E+02 - 4.4668E-01 1.1714E+03 1.2352E+03 7.2472E+02 5.3861E+02 - 5.0119E-01 9.0154E+02 9.4900E+02 5.6199E+02 4.0682E+02 - 5.6234E-01 6.9019E+02 7.2637E+02 4.3038E+02 3.0993E+02 - 6.3096E-01 5.2330E+02 5.5813E+02 3.3086E+02 2.3819E+02 - 7.0795E-01 3.9707E+02 4.2616E+02 2.5247E+02 1.8047E+02 - 7.9433E-01 3.0502E+02 3.1812E+02 1.8930E+02 1.3578E+02 - 8.9125E-01 2.3392E+02 2.4035E+02 1.4250E+02 1.0183E+02 - 1.0000E+00 1.7501E+02 1.8027E+02 1.0723E+02 7.7092E+01 - 1.1220E+00 1.3177E+02 1.3513E+02 8.0715E+01 5.8583E+01 - 1.2589E+00 9.8814E+01 1.0120E+02 6.0033E+01 4.3633E+01 - 1.4125E+00 7.4083E+01 7.4516E+01 4.4504E+01 3.2317E+01 - 1.5849E+00 5.6033E+01 5.5609E+01 3.2953E+01 2.4317E+01 - 1.7783E+00 4.2321E+01 4.1498E+01 2.4257E+01 1.7785E+01 - 1.9953E+00 3.1209E+01 3.0315E+01 1.8107E+01 1.2963E+01 - 2.2387E+00 2.2939E+01 2.2313E+01 1.3130E+01 9.6199E+00 - 2.5119E+00 1.6860E+01 1.6241E+01 9.3685E+00 6.9746E+00 - 2.8184E+00 1.2291E+01 1.1761E+01 6.7778E+00 4.9903E+00 - 3.1623E+00 9.1508E+00 8.5485E+00 4.8581E+00 3.6178E+00 - 3.5481E+00 6.6114E+00 6.2098E+00 3.4715E+00 2.5409E+00 - 3.9811E+00 4.7272E+00 4.4695E+00 2.4489E+00 1.8051E+00 - 4.4668E+00 3.4323E+00 3.2299E+00 1.7359E+00 1.2757E+00 - 5.0119E+00 2.5034E+00 2.3278E+00 1.2313E+00 8.8881E-01 - 5.6234E+00 1.8051E+00 1.6345E+00 8.5738E-01 6.2600E-01 - 6.3096E+00 1.2975E+00 1.1748E+00 5.8927E-01 4.4516E-01 - 7.0795E+00 9.3717E-01 8.5379E-01 4.0346E-01 3.1198E-01 - 7.9433E+00 6.7861E-01 5.9750E-01 2.7849E-01 2.1677E-01 - 8.9125E+00 4.8689E-01 4.2327E-01 1.9656E-01 1.4847E-01 - 1.0000E+01 3.4608E-01 3.0053E-01 1.3414E-01 1.0187E-01 - 1.1220E+01 2.4723E-01 2.1410E-01 9.0402E-02 6.8885E-02 - 1.2589E+01 1.7692E-01 1.4895E-01 6.2492E-02 4.6739E-02 - 1.4125E+01 1.2690E-01 1.0540E-01 4.2343E-02 3.1895E-02 - 1.5849E+01 9.0246E-02 7.5856E-02 2.8914E-02 2.1513E-02 - 1.7783E+01 6.3883E-02 5.3690E-02 1.9957E-02 1.4240E-02 - 1.9953E+01 4.5990E-02 3.8030E-02 1.2926E-02 9.6081E-03 - 2.2387E+01 3.2808E-02 2.6967E-02 8.5370E-03 6.7976E-03 - 2.5119E+01 2.3032E-02 1.9289E-02 5.8870E-03 4.5722E-03 - 2.8184E+01 1.6534E-02 1.3699E-02 3.8911E-03 3.1538E-03 - 3.1623E+01 1.1869E-02 9.5356E-03 2.6558E-03 2.0286E-03 - 3.5481E+01 8.4524E-03 6.7297E-03 1.7638E-03 1.3560E-03 - 3.9811E+01 6.0402E-03 4.7681E-03 1.1752E-03 8.9601E-04 - 4.4668E+01 4.3079E-03 3.3787E-03 7.8551E-04 6.0213E-04 - 5.0119E+01 3.0741E-03 2.3733E-03 5.2535E-04 4.0597E-04 - 5.6234E+01 2.1774E-03 1.6745E-03 3.4697E-04 2.7108E-04 - 6.3096E+01 1.5467E-03 1.1842E-03 2.2990E-04 1.7974E-04 - 7.0795E+01 1.1036E-03 8.4130E-04 1.5310E-04 1.2119E-04 - 7.9433E+01 7.8537E-04 5.9300E-04 1.0067E-04 8.0484E-05 - 8.9125E+01 5.5593E-04 4.1861E-04 6.6221E-05 5.3901E-05 - 1.0000E+02 3.9279E-04 2.9370E-04 4.5054E-05 3.5587E-05 - 1.1220E+02 2.7833E-04 2.0593E-04 2.9793E-05 2.3566E-05 - 1.2589E+02 1.9671E-04 1.4452E-04 1.9798E-05 1.5617E-05 - 1.4125E+02 1.3864E-04 1.0141E-04 1.3071E-05 1.0404E-05 - 1.5849E+02 9.7534E-05 7.1072E-05 8.6555E-06 6.9104E-06 - 1.7783E+02 6.9189E-05 4.9509E-05 5.8265E-06 4.5820E-06 - 1.9953E+02 4.8977E-05 3.4411E-05 3.9452E-06 3.0835E-06 - 2.2387E+02 3.4146E-05 2.4026E-05 2.6018E-06 2.0623E-06 - 2.5119E+02 2.3897E-05 1.6740E-05 1.7257E-06 1.4078E-06 - 2.8184E+02 1.6783E-05 1.1601E-05 1.1497E-06 9.2714E-07 - 3.1623E+02 1.1816E-05 8.1328E-06 7.6276E-07 6.1512E-07 - 3.5481E+02 8.2427E-06 5.6498E-06 5.1418E-07 4.1360E-07 - 3.9811E+02 5.7343E-06 3.9249E-06 3.4626E-07 2.8111E-07 - 4.4668E+02 4.0101E-06 2.7168E-06 2.3133E-07 1.8868E-07 - 5.0119E+02 2.8188E-06 1.8716E-06 1.5618E-07 1.2371E-07 - 5.6234E+02 1.9634E-06 1.3103E-06 1.0447E-07 8.3925E-08 - 6.3096E+02 1.3661E-06 9.0444E-07 7.2286E-08 5.5690E-08 - 7.0795E+02 9.5520E-07 6.2218E-07 4.8560E-08 3.8049E-08 - 7.9433E+02 6.6485E-07 4.2789E-07 3.1927E-08 2.5182E-08 - 8.9125E+02 4.6200E-07 2.9676E-07 2.1369E-08 1.6766E-08 - 1.0000E+03 3.2283E-07 2.0638E-07 1.4768E-08 1.1368E-08 - 1.1220E+03 2.2248E-07 1.4107E-07 9.9294E-09 7.5223E-09 - 1.2589E+03 1.5361E-07 9.6644E-08 6.7296E-09 5.1160E-09 - 1.4125E+03 1.0641E-07 6.6377E-08 4.4715E-09 3.5592E-09 - 1.5849E+03 7.3782E-08 4.5148E-08 2.8354E-09 2.3140E-09 - 1.7783E+03 5.0844E-08 3.0875E-08 1.8703E-09 1.5317E-09 - 1.9953E+03 3.4845E-08 2.1279E-08 1.3513E-09 1.0678E-09 - 2.2387E+03 2.3876E-08 1.4455E-08 9.2756E-10 7.1687E-10 - 2.5119E+03 1.6244E-08 9.7442E-09 6.0337E-10 4.5493E-10 - 2.8184E+03 1.1088E-08 6.6054E-09 3.9178E-10 3.0244E-10 - 3.1623E+03 7.6753E-09 4.5528E-09 2.5775E-10 1.9603E-10 - 3.5481E+03 5.1102E-09 3.0446E-09 1.6862E-10 1.3406E-10 - 3.9811E+03 3.4911E-09 2.0651E-09 1.1453E-10 8.9528E-11 - 4.4668E+03 2.3572E-09 1.3755E-09 7.6024E-11 5.8791E-11 - 5.0119E+03 1.5831E-09 9.0918E-10 5.2113E-11 3.8477E-11 - 5.6234E+03 1.0774E-09 6.0728E-10 3.6097E-11 2.4498E-11 - 6.3096E+03 7.2465E-10 4.0959E-10 2.2788E-11 1.6483E-11 - 7.0795E+03 4.8296E-10 2.7263E-10 1.5164E-11 1.0703E-11 - 7.9433E+03 3.2114E-10 1.8150E-10 9.8782E-12 6.9675E-12 - 8.9125E+03 2.1342E-10 1.2013E-10 6.6760E-12 4.8870E-12 - 1.0000E+04 1.4056E-10 7.9835E-11 4.5569E-12 3.1360E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8355E+04 1.9080E+04 9.3486E+03 8.2035E+03 - 1.1220E-01 1.5617E+04 1.6201E+04 8.1042E+03 7.0644E+03 - 1.2589E-01 1.3233E+04 1.3725E+04 6.9235E+03 5.9144E+03 - 1.4125E-01 1.1177E+04 1.1619E+04 5.8620E+03 4.9386E+03 - 1.5849E-01 9.3423E+03 9.7009E+03 4.9478E+03 4.1098E+03 - 1.7783E-01 7.7047E+03 7.9884E+03 4.1327E+03 3.3858E+03 - 1.9953E-01 6.2822E+03 6.5011E+03 3.4323E+03 2.7655E+03 - 2.2387E-01 5.0705E+03 5.2453E+03 2.8267E+03 2.2387E+03 - 2.5119E-01 4.0501E+03 4.2060E+03 2.3004E+03 1.7964E+03 - 2.8184E-01 3.2026E+03 3.3524E+03 1.8470E+03 1.4318E+03 - 3.1623E-01 2.5176E+03 2.6432E+03 1.4722E+03 1.1251E+03 - 3.5481E-01 1.9645E+03 2.0590E+03 1.1668E+03 8.7905E+02 - 3.9811E-01 1.5204E+03 1.5936E+03 9.1963E+02 6.8093E+02 - 4.4668E-01 1.1765E+03 1.2313E+03 7.2205E+02 5.2453E+02 - 5.0119E-01 9.1105E+02 9.5019E+02 5.6091E+02 4.0796E+02 - 5.6234E-01 6.9315E+02 7.2803E+02 4.3114E+02 3.1517E+02 - 6.3096E-01 5.2709E+02 5.5389E+02 3.2837E+02 2.3899E+02 - 7.0795E-01 4.0314E+02 4.2026E+02 2.5024E+02 1.8040E+02 - 7.9433E-01 3.0574E+02 3.1895E+02 1.8812E+02 1.3466E+02 - 8.9125E-01 2.2974E+02 2.3966E+02 1.4234E+02 1.0022E+02 - 1.0000E+00 1.7388E+02 1.7977E+02 1.0734E+02 7.6255E+01 - 1.1220E+00 1.3066E+02 1.3425E+02 8.0418E+01 5.8063E+01 - 1.2589E+00 9.8115E+01 1.0117E+02 5.9705E+01 4.3786E+01 - 1.4125E+00 7.4584E+01 7.5483E+01 4.4448E+01 3.2645E+01 - 1.5849E+00 5.5975E+01 5.5926E+01 3.2941E+01 2.4258E+01 - 1.7783E+00 4.2065E+01 4.1140E+01 2.3977E+01 1.7458E+01 - 1.9953E+00 3.1442E+01 3.0437E+01 1.7799E+01 1.2505E+01 - 2.2387E+00 2.2922E+01 2.2471E+01 1.3028E+01 9.4159E+00 - 2.5119E+00 1.6873E+01 1.6166E+01 9.3867E+00 7.0520E+00 - 2.8184E+00 1.2544E+01 1.1882E+01 6.8715E+00 5.0626E+00 - 3.1623E+00 9.0829E+00 8.5658E+00 4.8757E+00 3.5923E+00 - 3.5481E+00 6.6176E+00 6.1894E+00 3.4676E+00 2.5899E+00 - 3.9811E+00 4.8539E+00 4.4390E+00 2.4337E+00 1.8284E+00 - 4.4668E+00 3.5122E+00 3.2302E+00 1.7192E+00 1.2799E+00 - 5.0119E+00 2.5376E+00 2.3267E+00 1.2293E+00 9.0616E-01 - 5.6234E+00 1.8239E+00 1.6501E+00 8.4834E-01 6.3858E-01 - 6.3096E+00 1.3015E+00 1.1677E+00 5.9121E-01 4.4318E-01 - 7.0795E+00 9.3453E-01 8.3552E-01 4.1087E-01 3.0851E-01 - 7.9433E+00 6.8033E-01 6.0267E-01 2.8407E-01 2.1542E-01 - 8.9125E+00 4.8596E-01 4.2302E-01 1.9566E-01 1.4812E-01 - 1.0000E+01 3.4691E-01 3.0002E-01 1.3224E-01 1.0031E-01 - 1.1220E+01 2.4814E-01 2.1281E-01 9.2067E-02 6.8236E-02 - 1.2589E+01 1.7506E-01 1.5149E-01 6.2177E-02 4.5791E-02 - 1.4125E+01 1.2458E-01 1.0633E-01 4.2201E-02 3.1738E-02 - 1.5849E+01 9.0219E-02 7.4315E-02 2.9102E-02 2.1152E-02 - 1.7783E+01 6.4300E-02 5.2681E-02 1.9152E-02 1.3908E-02 - 1.9953E+01 4.5562E-02 3.7577E-02 1.2797E-02 9.4833E-03 - 2.2387E+01 3.2552E-02 2.6939E-02 8.6080E-03 6.7329E-03 - 2.5119E+01 2.3660E-02 1.9414E-02 5.8564E-03 4.6681E-03 - 2.8184E+01 1.6837E-02 1.3402E-02 4.0380E-03 2.9924E-03 - 3.1623E+01 1.1885E-02 9.5309E-03 2.6362E-03 2.0169E-03 - 3.5481E+01 8.4544E-03 6.7511E-03 1.7649E-03 1.3574E-03 - 3.9811E+01 6.0265E-03 4.7724E-03 1.1638E-03 9.0633E-04 - 4.4668E+01 4.2986E-03 3.3812E-03 7.7306E-04 6.0509E-04 - 5.0119E+01 3.0629E-03 2.3876E-03 5.1921E-04 4.0911E-04 - 5.6234E+01 2.1818E-03 1.6786E-03 3.4452E-04 2.7014E-04 - 6.3096E+01 1.5470E-03 1.1863E-03 2.2847E-04 1.7467E-04 - 7.0795E+01 1.1020E-03 8.4053E-04 1.5185E-04 1.1864E-04 - 7.9433E+01 7.8457E-04 5.9299E-04 1.0167E-04 7.9843E-05 - 8.9125E+01 5.5392E-04 4.1860E-04 6.6552E-05 5.3325E-05 - 1.0000E+02 3.9334E-04 2.9300E-04 4.4650E-05 3.5501E-05 - 1.1220E+02 2.7815E-04 2.0608E-04 2.9593E-05 2.3687E-05 - 1.2589E+02 1.9661E-04 1.4464E-04 1.9555E-05 1.5936E-05 - 1.4125E+02 1.3924E-04 1.0127E-04 1.3073E-05 1.0545E-05 - 1.5849E+02 9.7724E-05 7.0633E-05 8.6837E-06 7.0278E-06 - 1.7783E+02 6.8680E-05 4.9340E-05 5.7821E-06 4.6754E-06 - 1.9953E+02 4.8473E-05 3.4577E-05 3.8972E-06 3.1115E-06 - 2.2387E+02 3.4154E-05 2.4102E-05 2.6010E-06 2.0817E-06 - 2.5119E+02 2.4088E-05 1.6728E-05 1.7118E-06 1.3847E-06 - 2.8184E+02 1.6873E-05 1.1706E-05 1.1210E-06 9.1461E-07 - 3.1623E+02 1.1792E-05 8.1309E-06 7.6233E-07 6.1650E-07 - 3.5481E+02 8.2512E-06 5.6432E-06 5.1612E-07 4.1069E-07 - 3.9811E+02 5.7531E-06 3.9176E-06 3.4683E-07 2.7793E-07 - 4.4668E+02 4.0169E-06 2.7038E-06 2.3104E-07 1.8684E-07 - 5.0119E+02 2.8048E-06 1.8797E-06 1.5544E-07 1.2723E-07 - 5.6234E+02 1.9688E-06 1.3094E-06 1.0665E-07 8.7268E-08 - 6.3096E+02 1.3701E-06 9.0615E-07 7.1248E-08 5.7967E-08 - 7.0795E+02 9.5463E-07 6.2612E-07 4.7868E-08 3.8542E-08 - 7.9433E+02 6.6413E-07 4.3134E-07 3.2700E-08 2.5983E-08 - 8.9125E+02 4.6185E-07 2.9705E-07 2.1763E-08 1.7012E-08 - 1.0000E+03 3.2160E-07 2.0456E-07 1.4647E-08 1.1522E-08 - 1.1220E+03 2.2286E-07 1.4089E-07 9.8145E-09 7.7658E-09 - 1.2589E+03 1.5432E-07 9.7221E-08 6.5747E-09 5.1797E-09 - 1.4125E+03 1.0655E-07 6.6502E-08 4.4227E-09 3.4768E-09 - 1.5849E+03 7.2849E-08 4.5585E-08 2.9269E-09 2.3452E-09 - 1.7783E+03 4.9734E-08 3.1192E-08 1.9599E-09 1.6129E-09 - 1.9953E+03 3.4507E-08 2.1266E-08 1.3597E-09 1.0495E-09 - 2.2387E+03 2.3680E-08 1.4442E-08 9.2590E-10 7.0502E-10 - 2.5119E+03 1.6267E-08 9.7740E-09 6.2342E-10 4.6718E-10 - 2.8184E+03 1.1052E-08 6.6702E-09 4.0631E-10 3.0582E-10 - 3.1623E+03 7.7108E-09 4.5607E-09 2.5712E-10 2.0179E-10 - 3.5481E+03 5.1509E-09 3.0210E-09 1.7232E-10 1.3712E-10 - 3.9811E+03 3.5002E-09 2.0212E-09 1.1897E-10 8.7456E-11 - 4.4668E+03 2.3680E-09 1.3586E-09 7.9165E-11 5.6621E-11 - 5.0119E+03 1.5910E-09 9.0923E-10 5.1262E-11 3.7353E-11 - 5.6234E+03 1.0630E-09 6.0645E-10 3.3662E-11 2.5014E-11 - 6.3096E+03 7.1919E-10 4.0536E-10 2.3205E-11 1.7073E-11 - 7.0795E+03 4.8485E-10 2.7296E-10 1.5259E-11 1.0671E-11 - 7.9433E+03 3.2168E-10 1.8041E-10 9.5992E-12 6.9468E-12 - 8.9125E+03 2.1583E-10 1.1974E-10 6.0430E-12 4.5939E-12 - 1.0000E+04 1.4410E-10 7.8681E-11 4.3589E-12 3.1350E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8100E+04 1.8797E+04 9.1817E+03 8.1809E+03 - 1.1220E-01 1.5412E+04 1.6008E+04 7.9270E+03 7.0172E+03 - 1.2589E-01 1.3073E+04 1.3585E+04 6.7828E+03 5.9157E+03 - 1.4125E-01 1.1054E+04 1.1412E+04 5.7451E+03 4.9580E+03 - 1.5849E-01 9.2372E+03 9.4707E+03 4.8090E+03 4.0952E+03 - 1.7783E-01 7.6277E+03 7.7793E+03 4.0220E+03 3.3533E+03 - 1.9953E-01 6.2229E+03 6.3427E+03 3.3274E+03 2.7369E+03 - 2.2387E-01 5.0105E+03 5.1307E+03 2.7184E+03 2.2342E+03 - 2.5119E-01 3.9934E+03 4.1066E+03 2.2015E+03 1.8013E+03 - 2.8184E-01 3.1579E+03 3.2604E+03 1.7766E+03 1.4245E+03 - 3.1623E-01 2.4750E+03 2.5706E+03 1.4281E+03 1.1235E+03 - 3.5481E-01 1.9395E+03 2.0081E+03 1.1270E+03 8.8244E+02 - 3.9811E-01 1.5096E+03 1.5707E+03 8.8760E+02 6.8557E+02 - 4.4668E-01 1.1686E+03 1.2109E+03 6.9786E+02 5.2900E+02 - 5.0119E-01 8.9996E+02 9.1932E+02 5.3915E+02 4.0772E+02 - 5.6234E-01 6.8953E+02 7.0678E+02 4.1670E+02 3.1398E+02 - 6.3096E-01 5.2620E+02 5.4194E+02 3.2047E+02 2.4060E+02 - 7.0795E-01 3.9685E+02 4.1138E+02 2.4243E+02 1.8176E+02 - 7.9433E-01 3.0409E+02 3.1020E+02 1.8333E+02 1.3654E+02 - 8.9125E-01 2.3186E+02 2.3218E+02 1.3884E+02 1.0423E+02 - 1.0000E+00 1.7305E+02 1.7566E+02 1.0618E+02 7.8159E+01 - 1.1220E+00 1.3129E+02 1.3301E+02 7.9051E+01 5.7846E+01 - 1.2589E+00 9.9010E+01 1.0018E+02 5.8742E+01 4.3084E+01 - 1.4125E+00 7.4358E+01 7.4143E+01 4.4019E+01 3.2768E+01 - 1.5849E+00 5.5429E+01 5.4988E+01 3.2551E+01 2.4358E+01 - 1.7783E+00 4.1278E+01 4.0890E+01 2.3601E+01 1.7931E+01 - 1.9953E+00 3.0608E+01 3.0092E+01 1.7293E+01 1.3176E+01 - 2.2387E+00 2.2665E+01 2.1972E+01 1.2721E+01 9.5793E+00 - 2.5119E+00 1.6883E+01 1.6145E+01 9.3736E+00 6.9149E+00 - 2.8184E+00 1.2376E+01 1.1552E+01 6.7092E+00 4.9534E+00 - 3.1623E+00 9.0513E+00 8.4692E+00 4.8295E+00 3.5932E+00 - 3.5481E+00 6.5880E+00 6.1624E+00 3.3996E+00 2.5593E+00 - 3.9811E+00 4.7734E+00 4.4056E+00 2.4281E+00 1.8349E+00 - 4.4668E+00 3.4976E+00 3.1834E+00 1.7202E+00 1.2877E+00 - 5.0119E+00 2.5645E+00 2.3015E+00 1.2073E+00 8.8499E-01 - 5.6234E+00 1.8250E+00 1.6493E+00 8.3384E-01 6.4046E-01 - 6.3096E+00 1.3022E+00 1.1839E+00 5.8945E-01 4.5615E-01 - 7.0795E+00 9.4824E-01 8.4692E-01 4.2033E-01 3.0905E-01 - 7.9433E+00 6.8412E-01 6.0854E-01 2.8475E-01 2.1386E-01 - 8.9125E+00 4.8422E-01 4.2957E-01 1.9887E-01 1.4784E-01 - 1.0000E+01 3.4696E-01 3.0134E-01 1.3470E-01 9.9878E-02 - 1.1220E+01 2.4791E-01 2.1280E-01 9.1074E-02 6.7993E-02 - 1.2589E+01 1.7619E-01 1.5147E-01 6.1975E-02 4.7064E-02 - 1.4125E+01 1.2488E-01 1.0882E-01 4.1731E-02 3.1666E-02 - 1.5849E+01 8.9352E-02 7.6600E-02 2.8683E-02 2.1708E-02 - 1.7783E+01 6.4023E-02 5.3529E-02 1.9471E-02 1.4812E-02 - 1.9953E+01 4.6074E-02 3.7716E-02 1.3046E-02 9.6407E-03 - 2.2387E+01 3.2654E-02 2.6701E-02 8.8587E-03 6.3721E-03 - 2.5119E+01 2.2953E-02 1.8926E-02 5.7275E-03 4.4372E-03 - 2.8184E+01 1.6634E-02 1.3416E-02 3.8667E-03 2.9264E-03 - 3.1623E+01 1.1875E-02 9.5229E-03 2.6477E-03 2.0102E-03 - 3.5481E+01 8.4796E-03 6.7485E-03 1.7604E-03 1.3515E-03 - 3.9811E+01 6.0168E-03 4.7842E-03 1.1796E-03 9.0770E-04 - 4.4668E+01 4.2894E-03 3.3871E-03 7.8866E-04 6.0455E-04 - 5.0119E+01 3.0581E-03 2.3930E-03 5.2609E-04 4.0369E-04 - 5.6234E+01 2.1708E-03 1.6863E-03 3.4697E-04 2.6964E-04 - 6.3096E+01 1.5500E-03 1.1847E-03 2.3009E-04 1.7956E-04 - 7.0795E+01 1.1020E-03 8.3136E-04 1.5339E-04 1.1946E-04 - 7.9433E+01 7.7995E-04 5.8867E-04 1.0185E-04 8.0258E-05 - 8.9125E+01 5.5120E-04 4.1425E-04 6.7032E-05 5.3469E-05 - 1.0000E+02 3.9237E-04 2.9308E-04 4.4647E-05 3.5701E-05 - 1.1220E+02 2.7826E-04 2.0565E-04 2.9943E-05 2.3902E-05 - 1.2589E+02 1.9661E-04 1.4417E-04 1.9810E-05 1.5775E-05 - 1.4125E+02 1.3842E-04 1.0100E-04 1.2943E-05 1.0377E-05 - 1.5849E+02 9.7682E-05 7.0537E-05 8.5842E-06 6.9518E-06 - 1.7783E+02 6.8958E-05 4.9362E-05 5.7641E-06 4.6472E-06 - 1.9953E+02 4.8462E-05 3.4364E-05 3.8852E-06 3.0904E-06 - 2.2387E+02 3.3974E-05 2.3903E-05 2.6089E-06 2.0711E-06 - 2.5119E+02 2.3917E-05 1.6626E-05 1.7523E-06 1.4302E-06 - 2.8184E+02 1.6748E-05 1.1638E-05 1.1331E-06 9.4485E-07 - 3.1623E+02 1.1766E-05 8.1388E-06 7.7311E-07 6.1842E-07 - 3.5481E+02 8.2092E-06 5.6597E-06 5.1627E-07 4.0860E-07 - 3.9811E+02 5.7588E-06 3.9276E-06 3.4088E-07 2.7363E-07 - 4.4668E+02 4.0354E-06 2.7118E-06 2.2580E-07 1.8815E-07 - 5.0119E+02 2.8121E-06 1.8802E-06 1.5395E-07 1.2718E-07 - 5.6234E+02 1.9742E-06 1.3054E-06 1.0418E-07 8.4768E-08 - 6.3096E+02 1.3657E-06 9.0016E-07 7.0686E-08 5.6825E-08 - 7.0795E+02 9.4978E-07 6.2533E-07 4.7888E-08 3.8007E-08 - 7.9433E+02 6.6635E-07 4.3375E-07 3.1986E-08 2.5848E-08 - 8.9125E+02 4.6319E-07 2.9852E-07 2.1214E-08 1.7274E-08 - 1.0000E+03 3.2263E-07 2.0603E-07 1.4429E-08 1.1506E-08 - 1.1220E+03 2.2273E-07 1.4083E-07 9.7280E-09 7.7020E-09 - 1.2589E+03 1.5334E-07 9.6376E-08 6.6456E-09 5.2120E-09 - 1.4125E+03 1.0622E-07 6.6316E-08 4.5331E-09 3.5319E-09 - 1.5849E+03 7.3488E-08 4.5415E-08 3.0062E-09 2.3407E-09 - 1.7783E+03 5.0812E-08 3.1035E-08 1.9905E-09 1.5483E-09 - 1.9953E+03 3.4748E-08 2.1243E-08 1.3108E-09 1.0434E-09 - 2.2387E+03 2.3684E-08 1.4499E-08 8.9123E-10 6.7758E-10 - 2.5119E+03 1.6213E-08 9.8524E-09 5.9951E-10 4.4261E-10 - 2.8184E+03 1.1133E-08 6.6594E-09 4.2176E-10 3.0032E-10 - 3.1623E+03 7.6729E-09 4.5890E-09 2.6839E-10 1.9515E-10 - 3.5481E+03 5.1377E-09 3.0744E-09 1.7994E-10 1.3067E-10 - 3.9811E+03 3.4628E-09 2.0456E-09 1.2117E-10 8.8487E-11 - 4.4668E+03 2.3357E-09 1.3763E-09 8.4114E-11 5.9871E-11 - 5.0119E+03 1.5858E-09 9.2693E-10 5.5806E-11 3.8368E-11 - 5.6234E+03 1.0767E-09 6.1982E-10 3.6750E-11 2.3869E-11 - 6.3096E+03 7.1490E-10 4.1096E-10 2.3335E-11 1.6627E-11 - 7.0795E+03 4.7873E-10 2.7745E-10 1.5146E-11 1.0865E-11 - 7.9433E+03 3.2284E-10 1.8188E-10 1.0271E-11 7.1495E-12 - 8.9125E+03 2.1573E-10 1.1917E-10 6.4240E-12 4.9084E-12 - 1.0000E+04 1.4277E-10 8.0412E-11 4.2479E-12 3.0893E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5316E+04 2.5704E+04 1.2298E+04 1.1457E+04 - 1.1220E-01 2.1115E+04 2.1476E+04 1.0446E+04 9.7184E+03 - 1.2589E-01 1.7568E+04 1.7846E+04 8.8287E+03 8.0964E+03 - 1.4125E-01 1.4565E+04 1.4719E+04 7.3100E+03 6.6438E+03 - 1.5849E-01 1.1956E+04 1.2023E+04 5.9856E+03 5.4098E+03 - 1.7783E-01 9.7334E+03 9.7132E+03 4.9219E+03 4.3836E+03 - 1.9953E-01 7.8134E+03 7.7906E+03 4.0383E+03 3.5384E+03 - 2.2387E-01 6.1767E+03 6.1950E+03 3.2667E+03 2.8196E+03 - 2.5119E-01 4.8358E+03 4.8450E+03 2.6201E+03 2.2415E+03 - 2.8184E-01 3.7668E+03 3.7709E+03 2.0854E+03 1.7607E+03 - 3.1623E-01 2.9173E+03 2.9281E+03 1.6233E+03 1.3517E+03 - 3.5481E-01 2.2559E+03 2.2424E+03 1.2535E+03 1.0367E+03 - 3.9811E-01 1.7187E+03 1.7124E+03 9.7701E+02 8.0275E+02 - 4.4668E-01 1.3008E+03 1.3092E+03 7.5484E+02 6.1845E+02 - 5.0119E-01 9.9827E+02 9.9222E+02 5.7571E+02 4.6689E+02 - 5.6234E-01 7.4983E+02 7.4870E+02 4.4274E+02 3.4973E+02 - 6.3096E-01 5.6219E+02 5.6917E+02 3.3613E+02 2.5891E+02 - 7.0795E-01 4.2853E+02 4.2870E+02 2.5168E+02 1.9408E+02 - 7.9433E-01 3.2341E+02 3.2265E+02 1.9044E+02 1.4982E+02 - 8.9125E-01 2.4092E+02 2.4522E+02 1.4462E+02 1.1379E+02 - 1.0000E+00 1.8284E+02 1.8378E+02 1.1066E+02 8.6404E+01 - 1.1220E+00 1.3875E+02 1.3643E+02 8.2133E+01 6.4076E+01 - 1.2589E+00 1.0489E+02 1.0266E+02 6.1571E+01 4.7806E+01 - 1.4125E+00 7.8448E+01 7.6567E+01 4.6987E+01 3.5814E+01 - 1.5849E+00 5.7816E+01 5.7769E+01 3.5366E+01 2.6722E+01 - 1.7783E+00 4.3327E+01 4.3338E+01 2.6247E+01 1.9846E+01 - 1.9953E+00 3.2525E+01 3.1850E+01 1.9033E+01 1.4581E+01 - 2.2387E+00 2.4242E+01 2.3829E+01 1.4062E+01 1.0832E+01 - 2.5119E+00 1.8097E+01 1.7614E+01 1.0465E+01 8.0356E+00 - 2.8184E+00 1.3319E+01 1.2829E+01 7.6825E+00 5.9436E+00 - 3.1623E+00 9.6334E+00 9.3330E+00 5.5147E+00 4.2199E+00 - 3.5481E+00 7.0807E+00 6.7921E+00 3.9721E+00 3.0143E+00 - 3.9811E+00 5.1419E+00 4.9592E+00 2.8852E+00 2.1608E+00 - 4.4668E+00 3.7149E+00 3.5887E+00 2.0742E+00 1.5318E+00 - 5.0119E+00 2.7118E+00 2.5863E+00 1.4924E+00 1.1021E+00 - 5.6234E+00 1.9841E+00 1.8809E+00 1.0631E+00 7.8661E-01 - 6.3096E+00 1.4244E+00 1.3473E+00 7.4287E-01 5.3997E-01 - 7.0795E+00 1.0230E+00 9.5856E-01 5.2038E-01 3.8447E-01 - 7.9433E+00 7.3359E-01 6.9234E-01 3.7277E-01 2.7005E-01 - 8.9125E+00 5.4081E-01 4.9389E-01 2.6498E-01 1.9499E-01 - 1.0000E+01 3.8400E-01 3.4668E-01 1.7844E-01 1.3480E-01 - 1.1220E+01 2.7454E-01 2.4599E-01 1.2331E-01 9.1230E-02 - 1.2589E+01 1.9445E-01 1.7457E-01 8.5945E-02 6.2720E-02 - 1.4125E+01 1.4038E-01 1.2401E-01 5.9654E-02 4.5286E-02 - 1.5849E+01 1.0144E-01 8.7623E-02 4.0139E-02 3.1494E-02 - 1.7783E+01 7.1466E-02 6.1717E-02 2.7023E-02 2.0539E-02 - 1.9953E+01 5.0877E-02 4.4208E-02 1.8596E-02 1.3664E-02 - 2.2387E+01 3.6922E-02 3.1204E-02 1.2900E-02 9.5028E-03 - 2.5119E+01 2.6301E-02 2.2284E-02 8.9534E-03 6.6606E-03 - 2.8184E+01 1.8666E-02 1.6092E-02 6.1296E-03 4.4411E-03 - 3.1623E+01 1.3374E-02 1.1266E-02 4.0705E-03 3.1142E-03 - 3.5481E+01 9.5534E-03 8.0049E-03 2.7515E-03 2.1028E-03 - 3.9811E+01 6.8046E-03 5.6691E-03 1.8438E-03 1.4100E-03 - 4.4668E+01 4.8570E-03 4.0064E-03 1.2371E-03 9.4730E-04 - 5.0119E+01 3.4674E-03 2.8337E-03 8.3288E-04 6.4099E-04 - 5.6234E+01 2.4684E-03 1.9977E-03 5.5699E-04 4.3304E-04 - 6.3096E+01 1.7561E-03 1.4116E-03 3.6984E-04 2.9108E-04 - 7.0795E+01 1.2565E-03 1.0020E-03 2.4539E-04 1.9358E-04 - 7.9433E+01 9.0156E-04 7.0783E-04 1.6422E-04 1.2775E-04 - 8.9125E+01 6.4074E-04 4.9680E-04 1.0821E-04 8.5468E-05 - 1.0000E+02 4.5265E-04 3.4977E-04 7.2322E-05 5.6722E-05 - 1.1220E+02 3.2072E-04 2.4655E-04 4.7895E-05 3.7759E-05 - 1.2589E+02 2.2738E-04 1.7305E-04 3.1749E-05 2.4958E-05 - 1.4125E+02 1.6115E-04 1.2137E-04 2.1082E-05 1.6525E-05 - 1.5849E+02 1.1406E-04 8.5362E-05 1.4037E-05 1.1073E-05 - 1.7783E+02 8.0337E-05 5.9907E-05 9.3392E-06 7.3806E-06 - 1.9953E+02 5.6508E-05 4.1763E-05 6.1003E-06 4.8700E-06 - 2.2387E+02 3.9948E-05 2.9129E-05 3.9815E-06 3.2386E-06 - 2.5119E+02 2.8199E-05 2.0575E-05 2.6390E-06 2.1551E-06 - 2.8184E+02 1.9824E-05 1.4405E-05 1.7842E-06 1.4092E-06 - 3.1623E+02 1.3977E-05 9.9488E-06 1.1771E-06 9.4304E-07 - 3.5481E+02 9.7942E-06 6.9166E-06 7.8108E-07 6.2424E-07 - 3.9811E+02 6.8795E-06 4.8233E-06 5.2149E-07 4.1935E-07 - 4.4668E+02 4.8263E-06 3.3617E-06 3.4430E-07 2.8179E-07 - 5.0119E+02 3.3779E-06 2.3385E-06 2.3041E-07 1.8634E-07 - 5.6234E+02 2.3617E-06 1.6153E-06 1.5560E-07 1.2274E-07 - 6.3096E+02 1.6507E-06 1.1182E-06 1.0223E-07 8.1655E-08 - 7.0795E+02 1.1532E-06 7.7610E-07 6.7269E-08 5.4107E-08 - 7.9433E+02 8.0533E-07 5.3787E-07 4.4804E-08 3.6518E-08 - 8.9125E+02 5.6085E-07 3.7153E-07 2.9665E-08 2.4310E-08 - 1.0000E+03 3.9111E-07 2.5526E-07 2.0356E-08 1.6197E-08 - 1.1220E+03 2.7289E-07 1.7575E-07 1.3816E-08 1.1075E-08 - 1.2589E+03 1.8905E-07 1.2159E-07 9.3277E-09 7.4445E-09 - 1.4125E+03 1.3143E-07 8.3791E-08 6.3136E-09 4.9218E-09 - 1.5849E+03 9.1642E-08 5.7981E-08 4.1736E-09 3.2842E-09 - 1.7783E+03 6.2851E-08 3.9985E-08 2.7161E-09 2.2623E-09 - 1.9953E+03 4.3635E-08 2.7235E-08 1.8561E-09 1.4565E-09 - 2.2387E+03 2.9989E-08 1.8645E-08 1.2430E-09 9.6430E-10 - 2.5119E+03 2.0825E-08 1.2715E-08 8.4627E-10 6.5336E-10 - 2.8184E+03 1.4334E-08 8.6196E-09 5.7192E-10 4.2426E-10 - 3.1623E+03 9.8946E-09 5.9180E-09 3.9575E-10 2.7604E-10 - 3.5481E+03 6.6709E-09 3.9798E-09 2.6278E-10 1.8474E-10 - 3.9811E+03 4.5464E-09 2.6878E-09 1.6630E-10 1.2313E-10 - 4.4668E+03 3.1130E-09 1.8300E-09 1.0553E-10 8.2795E-11 - 5.0119E+03 2.1224E-09 1.2373E-09 6.9372E-11 5.3157E-11 - 5.6234E+03 1.4377E-09 8.3327E-10 4.7076E-11 3.5642E-11 - 6.3096E+03 9.6988E-10 5.6026E-10 3.3487E-11 2.4138E-11 - 7.0795E+03 6.5851E-10 3.7396E-10 2.2640E-11 1.6323E-11 - 7.9433E+03 4.4306E-10 2.5057E-10 1.4196E-11 1.0129E-11 - 8.9125E+03 2.9612E-10 1.7012E-10 8.9369E-12 6.8181E-12 - 1.0000E+04 1.9927E-10 1.1350E-10 5.8433E-12 4.4961E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.4918E+04 2.4929E+04 1.1852E+04 1.1464E+04 - 1.1220E-01 2.0829E+04 2.0789E+04 1.0004E+04 9.7023E+03 - 1.2589E-01 1.7332E+04 1.7280E+04 8.4189E+03 8.0884E+03 - 1.4125E-01 1.4362E+04 1.4145E+04 6.9883E+03 6.6330E+03 - 1.5849E-01 1.1771E+04 1.1491E+04 5.7027E+03 5.3586E+03 - 1.7783E-01 9.4892E+03 9.2531E+03 4.6382E+03 4.3282E+03 - 1.9953E-01 7.5844E+03 7.3771E+03 3.7433E+03 3.5208E+03 - 2.2387E-01 5.9808E+03 5.8426E+03 3.0107E+03 2.8065E+03 - 2.5119E-01 4.6970E+03 4.5366E+03 2.3981E+03 2.2070E+03 - 2.8184E-01 3.6532E+03 3.5220E+03 1.8709E+03 1.7289E+03 - 3.1623E-01 2.8086E+03 2.7137E+03 1.4739E+03 1.3432E+03 - 3.5481E-01 2.1590E+03 2.0659E+03 1.1499E+03 1.0409E+03 - 3.9811E-01 1.6465E+03 1.5752E+03 8.8388E+02 7.9793E+02 - 4.4668E-01 1.2448E+03 1.1985E+03 6.8030E+02 6.0992E+02 - 5.0119E-01 9.4477E+02 9.1895E+02 5.1000E+02 4.6592E+02 - 5.6234E-01 7.1826E+02 6.9185E+02 3.8843E+02 3.5088E+02 - 6.3096E-01 5.5024E+02 5.1834E+02 2.9520E+02 2.6613E+02 - 7.0795E-01 4.1228E+02 3.8637E+02 2.2012E+02 2.0203E+02 - 7.9433E-01 3.0977E+02 2.8849E+02 1.6928E+02 1.5111E+02 - 8.9125E-01 2.3458E+02 2.2262E+02 1.3042E+02 1.1347E+02 - 1.0000E+00 1.7871E+02 1.6669E+02 9.6583E+01 8.4891E+01 - 1.1220E+00 1.3560E+02 1.2414E+02 7.3466E+01 6.4680E+01 - 1.2589E+00 1.0187E+02 9.3566E+01 5.5485E+01 4.8887E+01 - 1.4125E+00 7.6851E+01 7.0615E+01 4.1807E+01 3.6105E+01 - 1.5849E+00 5.7761E+01 5.2195E+01 3.1246E+01 2.6685E+01 - 1.7783E+00 4.3235E+01 3.9074E+01 2.3413E+01 2.0126E+01 - 1.9953E+00 3.2007E+01 2.9291E+01 1.7675E+01 1.5019E+01 - 2.2387E+00 2.3568E+01 2.1530E+01 1.3062E+01 1.0975E+01 - 2.5119E+00 1.7799E+01 1.6147E+01 9.7552E+00 7.9834E+00 - 2.8184E+00 1.3028E+01 1.1963E+01 7.2533E+00 5.8252E+00 - 3.1623E+00 9.7196E+00 8.9432E+00 5.3072E+00 4.2084E+00 - 3.5481E+00 7.0570E+00 6.5509E+00 3.8773E+00 3.0389E+00 - 3.9811E+00 5.1375E+00 4.7893E+00 2.8223E+00 2.1867E+00 - 4.4668E+00 3.7955E+00 3.4716E+00 2.0324E+00 1.5787E+00 - 5.0119E+00 2.7694E+00 2.5222E+00 1.4421E+00 1.1235E+00 - 5.6234E+00 1.9867E+00 1.8638E+00 1.0209E+00 7.8955E-01 - 6.3096E+00 1.4454E+00 1.3559E+00 7.2987E-01 5.6225E-01 - 7.0795E+00 1.0469E+00 9.5037E-01 5.2626E-01 3.8722E-01 - 7.9433E+00 7.3972E-01 6.6872E-01 3.6261E-01 2.7228E-01 - 8.9125E+00 5.2836E-01 4.8759E-01 2.5169E-01 1.9500E-01 - 1.0000E+01 3.8155E-01 3.4962E-01 1.8039E-01 1.3481E-01 - 1.1220E+01 2.7233E-01 2.4872E-01 1.2559E-01 9.2237E-02 - 1.2589E+01 1.9432E-01 1.7581E-01 8.5564E-02 6.4183E-02 - 1.4125E+01 1.3970E-01 1.2486E-01 5.9324E-02 4.4944E-02 - 1.5849E+01 1.0098E-01 8.9523E-02 4.0263E-02 3.0624E-02 - 1.7783E+01 7.3085E-02 6.3816E-02 2.7139E-02 2.1387E-02 - 1.9953E+01 5.1315E-02 4.6058E-02 1.9295E-02 1.4367E-02 - 2.2387E+01 3.6598E-02 3.2618E-02 1.3430E-02 9.6473E-03 - 2.5119E+01 2.6544E-02 2.2631E-02 9.1151E-03 6.5121E-03 - 2.8184E+01 1.8846E-02 1.5522E-02 5.8803E-03 4.5163E-03 - 3.1623E+01 1.3342E-02 1.1288E-02 4.0714E-03 3.0981E-03 - 3.5481E+01 9.5369E-03 8.0103E-03 2.7449E-03 2.0960E-03 - 3.9811E+01 6.8041E-03 5.6632E-03 1.8451E-03 1.4105E-03 - 4.4668E+01 4.8505E-03 3.9962E-03 1.2332E-03 9.5610E-04 - 5.0119E+01 3.4569E-03 2.8217E-03 8.2457E-04 6.4009E-04 - 5.6234E+01 2.4644E-03 1.9990E-03 5.5089E-04 4.3012E-04 - 6.3096E+01 1.7636E-03 1.4160E-03 3.6752E-04 2.8620E-04 - 7.0795E+01 1.2573E-03 1.0003E-03 2.4396E-04 1.9032E-04 - 7.9433E+01 8.9639E-04 7.0524E-04 1.6279E-04 1.2758E-04 - 8.9125E+01 6.3767E-04 4.9214E-04 1.0918E-04 8.5614E-05 - 1.0000E+02 4.5271E-04 3.4991E-04 7.2588E-05 5.6850E-05 - 1.1220E+02 3.2088E-04 2.4599E-04 4.8154E-05 3.7815E-05 - 1.2589E+02 2.2778E-04 1.7276E-04 3.1905E-05 2.4912E-05 - 1.4125E+02 1.6104E-04 1.2144E-04 2.1026E-05 1.6634E-05 - 1.5849E+02 1.1370E-04 8.5114E-05 1.3990E-05 1.1116E-05 - 1.7783E+02 8.0440E-05 5.9908E-05 9.2139E-06 7.3584E-06 - 1.9953E+02 5.6763E-05 4.1960E-05 6.0297E-06 4.8218E-06 - 2.2387E+02 4.0064E-05 2.9301E-05 4.0381E-06 3.1904E-06 - 2.5119E+02 2.8221E-05 2.0630E-05 2.6620E-06 2.1705E-06 - 2.8184E+02 1.9711E-05 1.4403E-05 1.7960E-06 1.4685E-06 - 3.1623E+02 1.3918E-05 9.9722E-06 1.1842E-06 9.4284E-07 - 3.5481E+02 9.7695E-06 6.9328E-06 7.8593E-07 6.2288E-07 - 3.9811E+02 6.8574E-06 4.8146E-06 5.1666E-07 4.1877E-07 - 4.4668E+02 4.8027E-06 3.3525E-06 3.4622E-07 2.8211E-07 - 5.0119E+02 3.3593E-06 2.3261E-06 2.3177E-07 1.8829E-07 - 5.6234E+02 2.3664E-06 1.6147E-06 1.5309E-07 1.2593E-07 - 6.3096E+02 1.6515E-06 1.1225E-06 1.0227E-07 8.4419E-08 - 7.0795E+02 1.1548E-06 7.7886E-07 6.8961E-08 5.5548E-08 - 7.9433E+02 8.0929E-07 5.3549E-07 4.6541E-08 3.7287E-08 - 8.9125E+02 5.6621E-07 3.7167E-07 3.1569E-08 2.4295E-08 - 1.0000E+03 3.9355E-07 2.5612E-07 2.0354E-08 1.6135E-08 - 1.1220E+03 2.7329E-07 1.7685E-07 1.3390E-08 1.0982E-08 - 1.2589E+03 1.8955E-07 1.2185E-07 9.0355E-09 7.2761E-09 - 1.4125E+03 1.3174E-07 8.3697E-08 6.1933E-09 4.8622E-09 - 1.5849E+03 9.1440E-08 5.7566E-08 4.1326E-09 3.3655E-09 - 1.7783E+03 6.3467E-08 3.9740E-08 2.8432E-09 2.2944E-09 - 1.9953E+03 4.3463E-08 2.7236E-08 1.8778E-09 1.4825E-09 - 2.2387E+03 2.9927E-08 1.8462E-08 1.2322E-09 9.9665E-10 - 2.5119E+03 2.0649E-08 1.2629E-08 7.9873E-10 6.4946E-10 - 2.8184E+03 1.4076E-08 8.6225E-09 5.6588E-10 4.4356E-10 - 3.1623E+03 9.8578E-09 5.9714E-09 3.8160E-10 2.8646E-10 - 3.5481E+03 6.6774E-09 3.9854E-09 2.5812E-10 1.9178E-10 - 3.9811E+03 4.5649E-09 2.7126E-09 1.7159E-10 1.2958E-10 - 4.4668E+03 3.1086E-09 1.8408E-09 1.1177E-10 8.3552E-11 - 5.0119E+03 2.1124E-09 1.2350E-09 7.5161E-11 5.4399E-11 - 5.6234E+03 1.4430E-09 8.2656E-10 4.8754E-11 3.6206E-11 - 6.3096E+03 9.7407E-10 5.5837E-10 3.2480E-11 2.4493E-11 - 7.0795E+03 6.5848E-10 3.7292E-10 2.1326E-11 1.6404E-11 - 7.9433E+03 4.4007E-10 2.4920E-10 1.4158E-11 1.0648E-11 - 8.9125E+03 2.9582E-10 1.6712E-10 9.0790E-12 6.7738E-12 - 1.0000E+04 1.9832E-10 1.1105E-10 6.1446E-12 4.5135E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.4855E+04 2.4547E+04 1.1556E+04 1.1564E+04 - 1.1220E-01 2.0755E+04 2.0423E+04 9.7735E+03 9.7540E+03 - 1.2589E-01 1.7294E+04 1.6906E+04 8.1029E+03 8.1259E+03 - 1.4125E-01 1.4265E+04 1.3845E+04 6.7116E+03 6.6517E+03 - 1.5849E-01 1.1677E+04 1.1258E+04 5.5450E+03 5.4104E+03 - 1.7783E-01 9.4286E+03 9.0435E+03 4.5039E+03 4.3782E+03 - 1.9953E-01 7.5394E+03 7.1680E+03 3.6234E+03 3.5244E+03 - 2.2387E-01 5.9392E+03 5.6426E+03 2.8967E+03 2.8009E+03 - 2.5119E-01 4.6096E+03 4.3985E+03 2.2928E+03 2.1845E+03 - 2.8184E-01 3.5728E+03 3.3682E+03 1.7925E+03 1.7271E+03 - 3.1623E-01 2.7586E+03 2.5749E+03 1.3873E+03 1.3528E+03 - 3.5481E-01 2.1316E+03 1.9688E+03 1.0725E+03 1.0432E+03 - 3.9811E-01 1.6287E+03 1.4883E+03 8.2068E+02 7.9670E+02 - 4.4668E-01 1.2276E+03 1.1276E+03 6.2327E+02 6.0369E+02 - 5.0119E-01 9.3524E+02 8.4998E+02 4.7146E+02 4.6288E+02 - 5.6234E-01 7.1074E+02 6.3521E+02 3.5949E+02 3.5337E+02 - 6.3096E-01 5.3459E+02 4.7811E+02 2.7328E+02 2.6676E+02 - 7.0795E-01 3.9845E+02 3.6124E+02 2.0758E+02 2.0010E+02 - 7.9433E-01 3.0484E+02 2.6852E+02 1.5676E+02 1.4988E+02 - 8.9125E-01 2.3426E+02 2.0324E+02 1.1531E+02 1.1325E+02 - 1.0000E+00 1.7683E+02 1.5476E+02 8.8373E+01 8.5562E+01 - 1.1220E+00 1.3470E+02 1.1819E+02 6.6638E+01 6.4400E+01 - 1.2589E+00 1.0169E+02 8.9165E+01 4.9951E+01 4.8407E+01 - 1.4125E+00 7.6665E+01 6.6148E+01 3.8124E+01 3.6280E+01 - 1.5849E+00 5.7325E+01 5.0038E+01 2.8552E+01 2.7010E+01 - 1.7783E+00 4.2669E+01 3.7602E+01 2.1404E+01 2.0211E+01 - 1.9953E+00 3.2386E+01 2.8393E+01 1.6233E+01 1.5005E+01 - 2.2387E+00 2.4381E+01 2.1392E+01 1.1924E+01 1.0859E+01 - 2.5119E+00 1.7832E+01 1.5941E+01 9.0226E+00 7.8583E+00 - 2.8184E+00 1.3180E+01 1.2014E+01 6.8885E+00 5.7673E+00 - 3.1623E+00 9.7514E+00 8.6095E+00 5.0714E+00 4.3184E+00 - 3.5481E+00 7.0663E+00 6.3562E+00 3.7234E+00 3.1076E+00 - 3.9811E+00 5.1108E+00 4.6586E+00 2.6919E+00 2.2290E+00 - 4.4668E+00 3.7029E+00 3.4495E+00 1.9476E+00 1.5964E+00 - 5.0119E+00 2.7054E+00 2.5183E+00 1.4572E+00 1.1255E+00 - 5.6234E+00 1.9722E+00 1.8043E+00 1.0430E+00 7.9698E-01 - 6.3096E+00 1.4108E+00 1.2937E+00 7.1612E-01 5.5885E-01 - 7.0795E+00 1.0279E+00 9.4293E-01 5.0647E-01 3.8698E-01 - 7.9433E+00 7.4459E-01 6.7594E-01 3.6948E-01 2.6345E-01 - 8.9125E+00 5.3268E-01 4.8043E-01 2.5634E-01 1.8996E-01 - 1.0000E+01 3.8464E-01 3.4469E-01 1.7704E-01 1.2986E-01 - 1.1220E+01 2.7446E-01 2.4498E-01 1.2303E-01 9.1248E-02 - 1.2589E+01 1.9555E-01 1.7339E-01 8.4624E-02 6.3192E-02 - 1.4125E+01 1.3846E-01 1.2369E-01 5.8508E-02 4.2803E-02 - 1.5849E+01 9.7961E-02 8.7709E-02 4.0655E-02 2.9814E-02 - 1.7783E+01 7.1034E-02 6.1928E-02 2.8044E-02 2.0493E-02 - 1.9953E+01 5.1143E-02 4.3722E-02 1.9044E-02 1.3865E-02 - 2.2387E+01 3.6648E-02 3.1330E-02 1.3150E-02 9.5081E-03 - 2.5119E+01 2.6294E-02 2.2308E-02 8.8487E-03 6.4318E-03 - 2.8184E+01 1.8514E-02 1.5537E-02 5.6588E-03 4.4997E-03 - 3.1623E+01 1.3377E-02 1.1282E-02 4.0500E-03 3.0898E-03 - 3.5481E+01 9.5389E-03 7.9895E-03 2.7252E-03 2.0872E-03 - 3.9811E+01 6.8171E-03 5.6472E-03 1.8487E-03 1.4102E-03 - 4.4668E+01 4.8508E-03 3.9994E-03 1.2466E-03 9.4443E-04 - 5.0119E+01 3.4576E-03 2.8292E-03 8.3463E-04 6.3750E-04 - 5.6234E+01 2.4681E-03 1.9972E-03 5.5583E-04 4.3209E-04 - 6.3096E+01 1.7558E-03 1.4130E-03 3.6885E-04 2.8827E-04 - 7.0795E+01 1.2535E-03 9.9996E-04 2.4553E-04 1.9128E-04 - 7.9433E+01 8.9257E-04 7.0368E-04 1.6303E-04 1.2724E-04 - 8.9125E+01 6.3296E-04 4.9489E-04 1.0704E-04 8.4250E-05 - 1.0000E+02 4.5049E-04 3.4934E-04 7.2376E-05 5.6494E-05 - 1.1220E+02 3.2013E-04 2.4538E-04 4.8238E-05 3.7626E-05 - 1.2589E+02 2.2744E-04 1.7204E-04 3.1637E-05 2.5163E-05 - 1.4125E+02 1.6091E-04 1.2095E-04 2.0811E-05 1.6683E-05 - 1.5849E+02 1.1334E-04 8.4911E-05 1.3987E-05 1.1081E-05 - 1.7783E+02 7.9957E-05 5.9635E-05 9.2577E-06 7.3802E-06 - 1.9953E+02 5.6595E-05 4.1518E-05 6.0408E-06 4.8727E-06 - 2.2387E+02 3.9809E-05 2.9104E-05 4.0062E-06 3.2211E-06 - 2.5119E+02 2.7915E-05 2.0397E-05 2.6770E-06 2.1230E-06 - 2.8184E+02 1.9723E-05 1.4217E-05 1.7601E-06 1.4119E-06 - 3.1623E+02 1.3943E-05 9.9669E-06 1.1819E-06 9.4309E-07 - 3.5481E+02 9.7769E-06 6.9498E-06 7.9335E-07 6.3200E-07 - 3.9811E+02 6.8516E-06 4.8169E-06 5.2587E-07 4.1916E-07 - 4.4668E+02 4.7935E-06 3.3461E-06 3.4936E-07 2.7814E-07 - 5.0119E+02 3.3532E-06 2.3321E-06 2.3019E-07 1.8308E-07 - 5.6234E+02 2.3581E-06 1.6173E-06 1.5193E-07 1.2370E-07 - 6.3096E+02 1.6435E-06 1.1153E-06 1.0225E-07 8.2614E-08 - 7.0795E+02 1.1465E-06 7.7353E-07 6.9259E-08 5.5235E-08 - 7.9433E+02 8.0291E-07 5.3695E-07 4.6433E-08 3.6873E-08 - 8.9125E+02 5.6088E-07 3.7035E-07 3.1255E-08 2.4482E-08 - 1.0000E+03 3.9062E-07 2.5641E-07 2.0574E-08 1.6327E-08 - 1.1220E+03 2.7139E-07 1.7645E-07 1.3979E-08 1.0962E-08 - 1.2589E+03 1.8927E-07 1.2159E-07 9.4711E-09 7.4171E-09 - 1.4125E+03 1.3194E-07 8.4010E-08 6.2303E-09 4.9048E-09 - 1.5849E+03 9.0913E-08 5.7772E-08 4.1427E-09 3.2487E-09 - 1.7783E+03 6.2963E-08 3.9491E-08 2.6877E-09 2.1746E-09 - 1.9953E+03 4.3574E-08 2.7025E-08 1.8709E-09 1.4699E-09 - 2.2387E+03 3.0069E-08 1.8523E-08 1.2717E-09 9.5752E-10 - 2.5119E+03 2.0780E-08 1.2764E-08 8.2336E-10 6.5398E-10 - 2.8184E+03 1.4310E-08 8.6760E-09 5.5331E-10 4.2184E-10 - 3.1623E+03 9.8740E-09 5.9451E-09 3.7592E-10 2.8805E-10 - 3.5481E+03 6.7154E-09 4.0155E-09 2.4820E-10 2.0023E-10 - 3.9811E+03 4.5698E-09 2.7296E-09 1.6336E-10 1.3146E-10 - 4.4668E+03 3.1204E-09 1.8411E-09 1.0984E-10 8.2959E-11 - 5.0119E+03 2.1365E-09 1.2421E-09 7.4571E-11 5.4836E-11 - 5.6234E+03 1.4359E-09 8.3123E-10 4.8807E-11 3.6580E-11 - 6.3096E+03 9.7215E-10 5.5929E-10 3.2734E-11 2.4404E-11 - 7.0795E+03 6.5577E-10 3.7527E-10 2.1733E-11 1.5906E-11 - 7.9433E+03 4.4166E-10 2.5238E-10 1.3759E-11 1.0240E-11 - 8.9125E+03 2.9635E-10 1.6786E-10 9.3217E-12 6.6169E-12 - 1.0000E+04 1.9787E-10 1.1075E-10 6.2363E-12 4.4152E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.4926E+04 2.4505E+04 1.1491E+04 1.1603E+04 - 1.1220E-01 2.0943E+04 2.0361E+04 9.8457E+03 9.8559E+03 - 1.2589E-01 1.7419E+04 1.6799E+04 8.1956E+03 8.1725E+03 - 1.4125E-01 1.4324E+04 1.3791E+04 6.6896E+03 6.7558E+03 - 1.5849E-01 1.1749E+04 1.1268E+04 5.4720E+03 5.5252E+03 - 1.7783E-01 9.5485E+03 9.0736E+03 4.4834E+03 4.4465E+03 - 1.9953E-01 7.6469E+03 7.1777E+03 3.6025E+03 3.5663E+03 - 2.2387E-01 6.0268E+03 5.6437E+03 2.8735E+03 2.8453E+03 - 2.5119E-01 4.6833E+03 4.4172E+03 2.2772E+03 2.2696E+03 - 2.8184E-01 3.6396E+03 3.4171E+03 1.7843E+03 1.7760E+03 - 3.1623E-01 2.8147E+03 2.5906E+03 1.3910E+03 1.3805E+03 - 3.5481E-01 2.1568E+03 1.9682E+03 1.0737E+03 1.0750E+03 - 3.9811E-01 1.6413E+03 1.5022E+03 8.2475E+02 8.2325E+02 - 4.4668E-01 1.2539E+03 1.1331E+03 6.2655E+02 6.2616E+02 - 5.0119E-01 9.6145E+02 8.5052E+02 4.7500E+02 4.7561E+02 - 5.6234E-01 7.2851E+02 6.4660E+02 3.5808E+02 3.6190E+02 - 6.3096E-01 5.4516E+02 4.8724E+02 2.6820E+02 2.7674E+02 - 7.0795E-01 4.1183E+02 3.6248E+02 2.0516E+02 2.1042E+02 - 7.9433E-01 3.0895E+02 2.7144E+02 1.5368E+02 1.5750E+02 - 8.9125E-01 2.3333E+02 2.0814E+02 1.1635E+02 1.1653E+02 - 1.0000E+00 1.7818E+02 1.5466E+02 8.7467E+01 8.7722E+01 - 1.1220E+00 1.3341E+02 1.1555E+02 6.5902E+01 6.5821E+01 - 1.2589E+00 1.0088E+02 8.6722E+01 4.9526E+01 4.9459E+01 - 1.4125E+00 7.7113E+01 6.5819E+01 3.6762E+01 3.6983E+01 - 1.5849E+00 5.7711E+01 4.9979E+01 2.7966E+01 2.7578E+01 - 1.7783E+00 4.3599E+01 3.7180E+01 2.1208E+01 2.0327E+01 - 1.9953E+00 3.2886E+01 2.7628E+01 1.5807E+01 1.5255E+01 - 2.2387E+00 2.3982E+01 2.0691E+01 1.1719E+01 1.1461E+01 - 2.5119E+00 1.7820E+01 1.5597E+01 8.6560E+00 8.2356E+00 - 2.8184E+00 1.3211E+01 1.1529E+01 6.4364E+00 5.9848E+00 - 3.1623E+00 9.6771E+00 8.4646E+00 4.8416E+00 4.3537E+00 - 3.5481E+00 7.0700E+00 6.2216E+00 3.5617E+00 3.1122E+00 - 3.9811E+00 5.1495E+00 4.5777E+00 2.5683E+00 2.2075E+00 - 4.4668E+00 3.7408E+00 3.3662E+00 1.8665E+00 1.5814E+00 - 5.0119E+00 2.6904E+00 2.4629E+00 1.3739E+00 1.1176E+00 - 5.6234E+00 1.9612E+00 1.7686E+00 9.7605E-01 7.8885E-01 - 6.3096E+00 1.4174E+00 1.2718E+00 6.9410E-01 5.4966E-01 - 7.0795E+00 1.0277E+00 9.1451E-01 4.9938E-01 3.7658E-01 - 7.9433E+00 7.4712E-01 6.5785E-01 3.5377E-01 2.6995E-01 - 8.9125E+00 5.2968E-01 4.7235E-01 2.5867E-01 1.9330E-01 - 1.0000E+01 3.7900E-01 3.4329E-01 1.7616E-01 1.3345E-01 - 1.1220E+01 2.7367E-01 2.4443E-01 1.2320E-01 9.2044E-02 - 1.2589E+01 1.9407E-01 1.7511E-01 8.4262E-02 6.5482E-02 - 1.4125E+01 1.3714E-01 1.2420E-01 5.8129E-02 4.5088E-02 - 1.5849E+01 9.8522E-02 8.7879E-02 4.0549E-02 3.0734E-02 - 1.7783E+01 7.0470E-02 6.2938E-02 2.7243E-02 2.1375E-02 - 1.9953E+01 5.0744E-02 4.4014E-02 1.8753E-02 1.4576E-02 - 2.2387E+01 3.6781E-02 3.0703E-02 1.3372E-02 9.8662E-03 - 2.5119E+01 2.6216E-02 2.2093E-02 9.1386E-03 6.6035E-03 - 2.8184E+01 1.8604E-02 1.6420E-02 6.0869E-03 4.3451E-03 - 3.1623E+01 1.3331E-02 1.1286E-02 4.0442E-03 3.0758E-03 - 3.5481E+01 9.5206E-03 8.0000E-03 2.7385E-03 2.0822E-03 - 3.9811E+01 6.8229E-03 5.6503E-03 1.8483E-03 1.4079E-03 - 4.4668E+01 4.8630E-03 3.9927E-03 1.2359E-03 9.4516E-04 - 5.0119E+01 3.4670E-03 2.8203E-03 8.2687E-04 6.3338E-04 - 5.6234E+01 2.4656E-03 1.9876E-03 5.5143E-04 4.2240E-04 - 6.3096E+01 1.7582E-03 1.4076E-03 3.6992E-04 2.8333E-04 - 7.0795E+01 1.2619E-03 9.9754E-04 2.4798E-04 1.9322E-04 - 7.9433E+01 8.9514E-04 7.0297E-04 1.6356E-04 1.3092E-04 - 8.9125E+01 6.3164E-04 4.9672E-04 1.0895E-04 8.5608E-05 - 1.0000E+02 4.5034E-04 3.4852E-04 7.2565E-05 5.6575E-05 - 1.1220E+02 3.2036E-04 2.4508E-04 4.8436E-05 3.7647E-05 - 1.2589E+02 2.2735E-04 1.7264E-04 3.1981E-05 2.5194E-05 - 1.4125E+02 1.6107E-04 1.2101E-04 2.1047E-05 1.6695E-05 - 1.5849E+02 1.1355E-04 8.4943E-05 1.3864E-05 1.1113E-05 - 1.7783E+02 8.0368E-05 5.9845E-05 9.1305E-06 7.3988E-06 - 1.9953E+02 5.6817E-05 4.1798E-05 6.0761E-06 4.9380E-06 - 2.2387E+02 3.9804E-05 2.9242E-05 4.0047E-06 3.2483E-06 - 2.5119E+02 2.8018E-05 2.0431E-05 2.6741E-06 2.1500E-06 - 2.8184E+02 1.9796E-05 1.4213E-05 1.8011E-06 1.4282E-06 - 3.1623E+02 1.3898E-05 9.9519E-06 1.1840E-06 9.5415E-07 - 3.5481E+02 9.7866E-06 6.9459E-06 7.8270E-07 6.3509E-07 - 3.9811E+02 6.8668E-06 4.8414E-06 5.2272E-07 4.1706E-07 - 4.4668E+02 4.8021E-06 3.3582E-06 3.4383E-07 2.8044E-07 - 5.0119E+02 3.3621E-06 2.3267E-06 2.2859E-07 1.8925E-07 - 5.6234E+02 2.3638E-06 1.6153E-06 1.5370E-07 1.2443E-07 - 6.3096E+02 1.6568E-06 1.1208E-06 1.0324E-07 8.2776E-08 - 7.0795E+02 1.1533E-06 7.7740E-07 6.9380E-08 5.4903E-08 - 7.9433E+02 8.0267E-07 5.3685E-07 4.5991E-08 3.6783E-08 - 8.9125E+02 5.5987E-07 3.7095E-07 3.0712E-08 2.4269E-08 - 1.0000E+03 3.9176E-07 2.5823E-07 2.0330E-08 1.6553E-08 - 1.1220E+03 2.7306E-07 1.7762E-07 1.3693E-08 1.1115E-08 - 1.2589E+03 1.8978E-07 1.2190E-07 9.1972E-09 7.4804E-09 - 1.4125E+03 1.3104E-07 8.4292E-08 6.3198E-09 5.0473E-09 - 1.5849E+03 9.0537E-08 5.8007E-08 4.2707E-09 3.3840E-09 - 1.7783E+03 6.2942E-08 3.9556E-08 2.8607E-09 2.2358E-09 - 1.9953E+03 4.3633E-08 2.7076E-08 1.9276E-09 1.4830E-09 - 2.2387E+03 2.9966E-08 1.8512E-08 1.2372E-09 1.0039E-09 - 2.5119E+03 2.0508E-08 1.2540E-08 8.4304E-10 6.4283E-10 - 2.8184E+03 1.4206E-08 8.6142E-09 5.5725E-10 4.2416E-10 - 3.1623E+03 9.8097E-09 6.0126E-09 3.7891E-10 2.8711E-10 - 3.5481E+03 6.6668E-09 4.0282E-09 2.5424E-10 1.9556E-10 - 3.9811E+03 4.5722E-09 2.7266E-09 1.6415E-10 1.2808E-10 - 4.4668E+03 3.1163E-09 1.8419E-09 1.0839E-10 8.5918E-11 - 5.0119E+03 2.1107E-09 1.2329E-09 7.2745E-11 5.7520E-11 - 5.6234E+03 1.4110E-09 8.2934E-10 4.9122E-11 3.5582E-11 - 6.3096E+03 9.6831E-10 5.5917E-10 3.2769E-11 2.3526E-11 - 7.0795E+03 6.5201E-10 3.7519E-10 2.2183E-11 1.5906E-11 - 7.9433E+03 4.3947E-10 2.5092E-10 1.4421E-11 1.0549E-11 - 8.9125E+03 2.9853E-10 1.6715E-10 9.1002E-12 6.5748E-12 - 1.0000E+04 2.0044E-10 1.1263E-10 5.9161E-12 4.4259E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5204E+04 2.4751E+04 1.1669E+04 1.1760E+04 - 1.1220E-01 2.1051E+04 2.0642E+04 9.9843E+03 9.9387E+03 - 1.2589E-01 1.7590E+04 1.7179E+04 8.3366E+03 8.2911E+03 - 1.4125E-01 1.4561E+04 1.4054E+04 6.8733E+03 6.8474E+03 - 1.5849E-01 1.1943E+04 1.1448E+04 5.6206E+03 5.5821E+03 - 1.7783E-01 9.7024E+03 9.3054E+03 4.5678E+03 4.5331E+03 - 1.9953E-01 7.7583E+03 7.3948E+03 3.7007E+03 3.6616E+03 - 2.2387E-01 6.1421E+03 5.8111E+03 2.9633E+03 2.9174E+03 - 2.5119E-01 4.8527E+03 4.5174E+03 2.3552E+03 2.2973E+03 - 2.8184E-01 3.7758E+03 3.4953E+03 1.8569E+03 1.8156E+03 - 3.1623E-01 2.9072E+03 2.7092E+03 1.4515E+03 1.4241E+03 - 3.5481E-01 2.2459E+03 2.0618E+03 1.1242E+03 1.0892E+03 - 3.9811E-01 1.7041E+03 1.5606E+03 8.5940E+02 8.3662E+02 - 4.4668E-01 1.2973E+03 1.1824E+03 6.5874E+02 6.4028E+02 - 5.0119E-01 9.9057E+02 8.8146E+02 5.0056E+02 4.9534E+02 - 5.6234E-01 7.4789E+02 6.5626E+02 3.7301E+02 3.8242E+02 - 6.3096E-01 5.6759E+02 5.0139E+02 2.8082E+02 2.8164E+02 - 7.0795E-01 4.3049E+02 3.8015E+02 2.1448E+02 2.0868E+02 - 7.9433E-01 3.2564E+02 2.8517E+02 1.6067E+02 1.6018E+02 - 8.9125E-01 2.4372E+02 2.1440E+02 1.1937E+02 1.2119E+02 - 1.0000E+00 1.8519E+02 1.6034E+02 9.2514E+01 9.0931E+01 - 1.1220E+00 1.4025E+02 1.2129E+02 6.9160E+01 6.7731E+01 - 1.2589E+00 1.0485E+02 9.0958E+01 5.2009E+01 5.0744E+01 - 1.4125E+00 7.8258E+01 6.7967E+01 3.9148E+01 3.7464E+01 - 1.5849E+00 5.9043E+01 5.0878E+01 2.9342E+01 2.7755E+01 - 1.7783E+00 4.4029E+01 3.7860E+01 2.1908E+01 2.0828E+01 - 1.9953E+00 3.2784E+01 2.8540E+01 1.6538E+01 1.5338E+01 - 2.2387E+00 2.4263E+01 2.1248E+01 1.2156E+01 1.1212E+01 - 2.5119E+00 1.7891E+01 1.5528E+01 8.9109E+00 8.2635E+00 - 2.8184E+00 1.3168E+01 1.1507E+01 6.5505E+00 6.0306E+00 - 3.1623E+00 9.6229E+00 8.4981E+00 4.8990E+00 4.2956E+00 - 3.5481E+00 7.1236E+00 6.2743E+00 3.6198E+00 3.0780E+00 - 3.9811E+00 5.2041E+00 4.6347E+00 2.6116E+00 2.2223E+00 - 4.4668E+00 3.7505E+00 3.3726E+00 1.8961E+00 1.5914E+00 - 5.0119E+00 2.7191E+00 2.4555E+00 1.3858E+00 1.1221E+00 - 5.6234E+00 1.9637E+00 1.7979E+00 1.0003E+00 7.8546E-01 - 6.3096E+00 1.4132E+00 1.2712E+00 7.0999E-01 5.5965E-01 - 7.0795E+00 1.0370E+00 9.1247E-01 5.0100E-01 3.9601E-01 - 7.9433E+00 7.3379E-01 6.6671E-01 3.5735E-01 2.7990E-01 - 8.9125E+00 5.1244E-01 4.8225E-01 2.4598E-01 1.8694E-01 - 1.0000E+01 3.7909E-01 3.4157E-01 1.7713E-01 1.3220E-01 - 1.1220E+01 2.7233E-01 2.4270E-01 1.2262E-01 9.2146E-02 - 1.2589E+01 1.9626E-01 1.7203E-01 8.4715E-02 6.2866E-02 - 1.4125E+01 1.3831E-01 1.2171E-01 5.9682E-02 4.2652E-02 - 1.5849E+01 9.8006E-02 8.6833E-02 4.0744E-02 2.9770E-02 - 1.7783E+01 7.0622E-02 6.2633E-02 2.7419E-02 2.0289E-02 - 1.9953E+01 5.1932E-02 4.4742E-02 1.8819E-02 1.4112E-02 - 2.2387E+01 3.6963E-02 3.1491E-02 1.3098E-02 1.0176E-02 - 2.5119E+01 2.5362E-02 2.2446E-02 8.9767E-03 7.1391E-03 - 2.8184E+01 1.8316E-02 1.6048E-02 6.1812E-03 5.1603E-03 - 3.1623E+01 1.3365E-02 1.1292E-02 4.0658E-03 3.0879E-03 - 3.5481E+01 9.5175E-03 7.9899E-03 2.7454E-03 2.0901E-03 - 3.9811E+01 6.7930E-03 5.6398E-03 1.8486E-03 1.4198E-03 - 4.4668E+01 4.8519E-03 3.9869E-03 1.2320E-03 9.5087E-04 - 5.0119E+01 3.4579E-03 2.8288E-03 8.2442E-04 6.3568E-04 - 5.6234E+01 2.4631E-03 2.0005E-03 5.5613E-04 4.2443E-04 - 6.3096E+01 1.7532E-03 1.4140E-03 3.7061E-04 2.8339E-04 - 7.0795E+01 1.2499E-03 9.9443E-04 2.4967E-04 1.9091E-04 - 7.9433E+01 8.9428E-04 7.0456E-04 1.6758E-04 1.2663E-04 - 8.9125E+01 6.3286E-04 4.9842E-04 1.0968E-04 8.4369E-05 - 1.0000E+02 4.4921E-04 3.4948E-04 7.2723E-05 5.6561E-05 - 1.1220E+02 3.1874E-04 2.4640E-04 4.8057E-05 3.7680E-05 - 1.2589E+02 2.2603E-04 1.7279E-04 3.1560E-05 2.5126E-05 - 1.4125E+02 1.6040E-04 1.2114E-04 2.0870E-05 1.6747E-05 - 1.5849E+02 1.1376E-04 8.5191E-05 1.3843E-05 1.1177E-05 - 1.7783E+02 8.0141E-05 6.0060E-05 9.1022E-06 7.4204E-06 - 1.9953E+02 5.6388E-05 4.2036E-05 6.0226E-06 4.8582E-06 - 2.2387E+02 4.0016E-05 2.9096E-05 4.0429E-06 3.2213E-06 - 2.5119E+02 2.8296E-05 2.0443E-05 2.6935E-06 2.1380E-06 - 2.8184E+02 1.9817E-05 1.4327E-05 1.7579E-06 1.3898E-06 - 3.1623E+02 1.3927E-05 1.0004E-05 1.1753E-06 9.5135E-07 - 3.5481E+02 9.7859E-06 6.9520E-06 7.8221E-07 6.2486E-07 - 3.9811E+02 6.8734E-06 4.8272E-06 5.2008E-07 4.1105E-07 - 4.4668E+02 4.8214E-06 3.3554E-06 3.4518E-07 2.7404E-07 - 5.0119E+02 3.3657E-06 2.3326E-06 2.2909E-07 1.8228E-07 - 5.6234E+02 2.3613E-06 1.6109E-06 1.5338E-07 1.2243E-07 - 6.3096E+02 1.6534E-06 1.1170E-06 1.0304E-07 8.1979E-08 - 7.0795E+02 1.1525E-06 7.7726E-07 6.9385E-08 5.4888E-08 - 7.9433E+02 8.0305E-07 5.3549E-07 4.5960E-08 3.6620E-08 - 8.9125E+02 5.6170E-07 3.7201E-07 3.0129E-08 2.4508E-08 - 1.0000E+03 3.9138E-07 2.5737E-07 2.0343E-08 1.6254E-08 - 1.1220E+03 2.7153E-07 1.7677E-07 1.3868E-08 1.0758E-08 - 1.2589E+03 1.8919E-07 1.2106E-07 9.4014E-09 7.4870E-09 - 1.4125E+03 1.3141E-07 8.3323E-08 6.1450E-09 5.1370E-09 - 1.5849E+03 9.1037E-08 5.7805E-08 4.0663E-09 3.3570E-09 - 1.7783E+03 6.2485E-08 3.9886E-08 2.8025E-09 2.2039E-09 - 1.9953E+03 4.3584E-08 2.7097E-08 1.8923E-09 1.3925E-09 - 2.2387E+03 3.0196E-08 1.8636E-08 1.2338E-09 9.3372E-10 - 2.5119E+03 2.0719E-08 1.2678E-08 8.5192E-10 6.4996E-10 - 2.8184E+03 1.4259E-08 8.5037E-09 5.5055E-10 4.2827E-10 - 3.1623E+03 9.8687E-09 5.9404E-09 3.7244E-10 2.8532E-10 - 3.5481E+03 6.6996E-09 3.9805E-09 2.5044E-10 1.8986E-10 - 3.9811E+03 4.5421E-09 2.7023E-09 1.7012E-10 1.2715E-10 - 4.4668E+03 3.0990E-09 1.8338E-09 1.1472E-10 8.3171E-11 - 5.0119E+03 2.1103E-09 1.2373E-09 7.5745E-11 5.6505E-11 - 5.6234E+03 1.4327E-09 8.4046E-10 5.1550E-11 3.6052E-11 - 6.3096E+03 9.6832E-10 5.6177E-10 3.2227E-11 2.3891E-11 - 7.0795E+03 6.5565E-10 3.7386E-10 2.1777E-11 1.6138E-11 - 7.9433E+03 4.4221E-10 2.5238E-10 1.4348E-11 1.0333E-11 - 8.9125E+03 2.9602E-10 1.6753E-10 9.2988E-12 6.5290E-12 - 1.0000E+04 1.9909E-10 1.0921E-10 6.0253E-12 4.4646E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5523E+04 2.5396E+04 1.1988E+04 1.1760E+04 - 1.1220E-01 2.1303E+04 2.0996E+04 1.0215E+04 1.0017E+04 - 1.2589E-01 1.7716E+04 1.7436E+04 8.5459E+03 8.3780E+03 - 1.4125E-01 1.4742E+04 1.4436E+04 7.0784E+03 6.9350E+03 - 1.5849E-01 1.2119E+04 1.1772E+04 5.7988E+03 5.6839E+03 - 1.7783E-01 9.8564E+03 9.5062E+03 4.7380E+03 4.5826E+03 - 1.9953E-01 7.9376E+03 7.6240E+03 3.8734E+03 3.6869E+03 - 2.2387E-01 6.3053E+03 6.0498E+03 3.1140E+03 2.9758E+03 - 2.5119E-01 4.9419E+03 4.7208E+03 2.4853E+03 2.3472E+03 - 2.8184E-01 3.8512E+03 3.6452E+03 1.9662E+03 1.8253E+03 - 3.1623E-01 2.9588E+03 2.8126E+03 1.5281E+03 1.4135E+03 - 3.5481E-01 2.2613E+03 2.1536E+03 1.1939E+03 1.0977E+03 - 3.9811E-01 1.7305E+03 1.6437E+03 9.2284E+02 8.5379E+02 - 4.4668E-01 1.3226E+03 1.2444E+03 7.1346E+02 6.4898E+02 - 5.0119E-01 1.0095E+03 9.3838E+02 5.4072E+02 4.9466E+02 - 5.6234E-01 7.5946E+02 7.1384E+02 4.0752E+02 3.7340E+02 - 6.3096E-01 5.7599E+02 5.4085E+02 3.0986E+02 2.8088E+02 - 7.0795E-01 4.3625E+02 4.0518E+02 2.2948E+02 2.1293E+02 - 7.9433E-01 3.3082E+02 3.0258E+02 1.7425E+02 1.6047E+02 - 8.9125E-01 2.5210E+02 2.2577E+02 1.3245E+02 1.2000E+02 - 1.0000E+00 1.8762E+02 1.7005E+02 1.0009E+02 9.1632E+01 - 1.1220E+00 1.4027E+02 1.2687E+02 7.5087E+01 6.7852E+01 - 1.2589E+00 1.0548E+02 9.5722E+01 5.5888E+01 4.9886E+01 - 1.4125E+00 7.9168E+01 7.2022E+01 4.1477E+01 3.7293E+01 - 1.5849E+00 5.9371E+01 5.4066E+01 3.0990E+01 2.7750E+01 - 1.7783E+00 4.4843E+01 4.0390E+01 2.3284E+01 2.0690E+01 - 1.9953E+00 3.3417E+01 2.9811E+01 1.7393E+01 1.5395E+01 - 2.2387E+00 2.4468E+01 2.2158E+01 1.3216E+01 1.1356E+01 - 2.5119E+00 1.8237E+01 1.5993E+01 9.6352E+00 8.0286E+00 - 2.8184E+00 1.3603E+01 1.1775E+01 7.0808E+00 5.8731E+00 - 3.1623E+00 9.7927E+00 8.7739E+00 5.0998E+00 4.2822E+00 - 3.5481E+00 7.0918E+00 6.3605E+00 3.7453E+00 3.0909E+00 - 3.9811E+00 5.1295E+00 4.6899E+00 2.7061E+00 2.2178E+00 - 4.4668E+00 3.7188E+00 3.4760E+00 1.9414E+00 1.5484E+00 - 5.0119E+00 2.7312E+00 2.5019E+00 1.4004E+00 1.0971E+00 - 5.6234E+00 1.9778E+00 1.7686E+00 1.0038E+00 8.0255E-01 - 6.3096E+00 1.4099E+00 1.2837E+00 7.2450E-01 5.8046E-01 - 7.0795E+00 1.0273E+00 9.3427E-01 5.1293E-01 3.9815E-01 - 7.9433E+00 7.3271E-01 6.6454E-01 3.4478E-01 2.6937E-01 - 8.9125E+00 5.0995E-01 4.6796E-01 2.4164E-01 1.9056E-01 - 1.0000E+01 3.7770E-01 3.4309E-01 1.7504E-01 1.3363E-01 - 1.1220E+01 2.7032E-01 2.4476E-01 1.2236E-01 9.3839E-02 - 1.2589E+01 1.9331E-01 1.7514E-01 8.5375E-02 6.4372E-02 - 1.4125E+01 1.3859E-01 1.2427E-01 5.9664E-02 4.4188E-02 - 1.5849E+01 9.9710E-02 8.8109E-02 4.1051E-02 3.0561E-02 - 1.7783E+01 7.1732E-02 6.2659E-02 2.7901E-02 2.0607E-02 - 1.9953E+01 5.0865E-02 4.4866E-02 1.9464E-02 1.3892E-02 - 2.2387E+01 3.6665E-02 3.2008E-02 1.3185E-02 9.6085E-03 - 2.5119E+01 2.6035E-02 2.2514E-02 8.8248E-03 6.8034E-03 - 2.8184E+01 1.8101E-02 1.5770E-02 5.9626E-03 4.4120E-03 - 3.1623E+01 1.3343E-02 1.1275E-02 4.0577E-03 3.0793E-03 - 3.5481E+01 9.5382E-03 7.9708E-03 2.7203E-03 2.0814E-03 - 3.9811E+01 6.8011E-03 5.6302E-03 1.8256E-03 1.4099E-03 - 4.4668E+01 4.8543E-03 3.9799E-03 1.2284E-03 9.4639E-04 - 5.0119E+01 3.4676E-03 2.8135E-03 8.2277E-04 6.3496E-04 - 5.6234E+01 2.4675E-03 1.9925E-03 5.5050E-04 4.2617E-04 - 6.3096E+01 1.7586E-03 1.4112E-03 3.6617E-04 2.8427E-04 - 7.0795E+01 1.2494E-03 9.9288E-04 2.4500E-04 1.9250E-04 - 7.9433E+01 8.9053E-04 7.0014E-04 1.6361E-04 1.2999E-04 - 8.9125E+01 6.3564E-04 4.9334E-04 1.0682E-04 8.5682E-05 - 1.0000E+02 4.5145E-04 3.4924E-04 7.2214E-05 5.6654E-05 - 1.1220E+02 3.1864E-04 2.4640E-04 4.8204E-05 3.7738E-05 - 1.2589E+02 2.2593E-04 1.7305E-04 3.1927E-05 2.5230E-05 - 1.4125E+02 1.6049E-04 1.2109E-04 2.1089E-05 1.6800E-05 - 1.5849E+02 1.1353E-04 8.4680E-05 1.4000E-05 1.1147E-05 - 1.7783E+02 8.0362E-05 5.9459E-05 9.2288E-06 7.3308E-06 - 1.9953E+02 5.6612E-05 4.1744E-05 6.1041E-06 4.7942E-06 - 2.2387E+02 3.9877E-05 2.9079E-05 4.0409E-06 3.2040E-06 - 2.5119E+02 2.7963E-05 2.0155E-05 2.7133E-06 2.1512E-06 - 2.8184E+02 1.9748E-05 1.4111E-05 1.8566E-06 1.4073E-06 - 3.1623E+02 1.3954E-05 9.9478E-06 1.1742E-06 9.3004E-07 - 3.5481E+02 9.7771E-06 6.9295E-06 7.8305E-07 6.1995E-07 - 3.9811E+02 6.8468E-06 4.8145E-06 5.2607E-07 4.1300E-07 - 4.4668E+02 4.7998E-06 3.3518E-06 3.4910E-07 2.7680E-07 - 5.0119E+02 3.3720E-06 2.3281E-06 2.2911E-07 1.8438E-07 - 5.6234E+02 2.3574E-06 1.6180E-06 1.5420E-07 1.2356E-07 - 6.3096E+02 1.6446E-06 1.1195E-06 1.0273E-07 8.1053E-08 - 7.0795E+02 1.1559E-06 7.7130E-07 6.8199E-08 5.4258E-08 - 7.9433E+02 8.0692E-07 5.3212E-07 4.5372E-08 3.6965E-08 - 8.9125E+02 5.6126E-07 3.6852E-07 3.0282E-08 2.4782E-08 - 1.0000E+03 3.9076E-07 2.5609E-07 2.0424E-08 1.6341E-08 - 1.1220E+03 2.7199E-07 1.7587E-07 1.3466E-08 1.0797E-08 - 1.2589E+03 1.8971E-07 1.2100E-07 9.0003E-09 7.3508E-09 - 1.4125E+03 1.3151E-07 8.4321E-08 6.1422E-09 4.8659E-09 - 1.5849E+03 9.1191E-08 5.7896E-08 4.0453E-09 3.2578E-09 - 1.7783E+03 6.3036E-08 3.9367E-08 2.6226E-09 2.1496E-09 - 1.9953E+03 4.3916E-08 2.7254E-08 1.8480E-09 1.4829E-09 - 2.2387E+03 3.0224E-08 1.8621E-08 1.2584E-09 9.5434E-10 - 2.5119E+03 2.0633E-08 1.2680E-08 8.4902E-10 6.4262E-10 - 2.8184E+03 1.4205E-08 8.5966E-09 5.6590E-10 4.4706E-10 - 3.1623E+03 9.8338E-09 5.9367E-09 3.7231E-10 2.8938E-10 - 3.5481E+03 6.6755E-09 3.9892E-09 2.5136E-10 1.8880E-10 - 3.9811E+03 4.5622E-09 2.7020E-09 1.6828E-10 1.2378E-10 - 4.4668E+03 3.1069E-09 1.8121E-09 1.1169E-10 8.2339E-11 - 5.0119E+03 2.1246E-09 1.2240E-09 7.4283E-11 5.4732E-11 - 5.6234E+03 1.4357E-09 8.2889E-10 4.9471E-11 3.4862E-11 - 6.3096E+03 9.6600E-10 5.5849E-10 3.2218E-11 2.2607E-11 - 7.0795E+03 6.5770E-10 3.7819E-10 2.1343E-11 1.5234E-11 - 7.9433E+03 4.4396E-10 2.5402E-10 1.4237E-11 1.0561E-11 - 8.9125E+03 2.9659E-10 1.6884E-10 9.1036E-12 7.1660E-12 - 1.0000E+04 1.9939E-10 1.1196E-10 6.2012E-12 4.5062E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5721E+04 2.5834E+04 1.2397E+04 1.1699E+04 - 1.1220E-01 2.1561E+04 2.1591E+04 1.0604E+04 9.9006E+03 - 1.2589E-01 1.8013E+04 1.7980E+04 8.9327E+03 8.3163E+03 - 1.4125E-01 1.4998E+04 1.4865E+04 7.4319E+03 6.9109E+03 - 1.5849E-01 1.2294E+04 1.2146E+04 6.1702E+03 5.6409E+03 - 1.7783E-01 9.9735E+03 9.8709E+03 5.0524E+03 4.5819E+03 - 1.9953E-01 7.9782E+03 7.9247E+03 4.1182E+03 3.6641E+03 - 2.2387E-01 6.3456E+03 6.2710E+03 3.3262E+03 2.9141E+03 - 2.5119E-01 5.0126E+03 4.8950E+03 2.6471E+03 2.3293E+03 - 2.8184E-01 3.8837E+03 3.8061E+03 2.0974E+03 1.8351E+03 - 3.1623E-01 2.9814E+03 2.9735E+03 1.6478E+03 1.4102E+03 - 3.5481E-01 2.2907E+03 2.2864E+03 1.2843E+03 1.0864E+03 - 3.9811E-01 1.7658E+03 1.7280E+03 9.8588E+02 8.4460E+02 - 4.4668E-01 1.3460E+03 1.3121E+03 7.5622E+02 6.4750E+02 - 5.0119E-01 1.0207E+03 9.9918E+02 5.8194E+02 4.9416E+02 - 5.6234E-01 7.7520E+02 7.5554E+02 4.4547E+02 3.7557E+02 - 6.3096E-01 5.8170E+02 5.6942E+02 3.3389E+02 2.8175E+02 - 7.0795E-01 4.3898E+02 4.2619E+02 2.4944E+02 2.1111E+02 - 7.9433E-01 3.3170E+02 3.1739E+02 1.9021E+02 1.5804E+02 - 8.9125E-01 2.4941E+02 2.3887E+02 1.4170E+02 1.1937E+02 - 1.0000E+00 1.8811E+02 1.7889E+02 1.0899E+02 8.9558E+01 - 1.1220E+00 1.4153E+02 1.3413E+02 8.0512E+01 6.7461E+01 - 1.2589E+00 1.0592E+02 1.0106E+02 6.0715E+01 5.0482E+01 - 1.4125E+00 7.9853E+01 7.4840E+01 4.5662E+01 3.7653E+01 - 1.5849E+00 6.0009E+01 5.5618E+01 3.3450E+01 2.7079E+01 - 1.7783E+00 4.4546E+01 4.1468E+01 2.4959E+01 1.9732E+01 - 1.9953E+00 3.3027E+01 3.0777E+01 1.8618E+01 1.5072E+01 - 2.2387E+00 2.4301E+01 2.2925E+01 1.3590E+01 1.1112E+01 - 2.5119E+00 1.8085E+01 1.6861E+01 9.8976E+00 7.9954E+00 - 2.8184E+00 1.3373E+01 1.2231E+01 7.3978E+00 5.8726E+00 - 3.1623E+00 9.6829E+00 8.9962E+00 5.5215E+00 4.2488E+00 - 3.5481E+00 7.1043E+00 6.6198E+00 3.9778E+00 3.0072E+00 - 3.9811E+00 5.1693E+00 4.7855E+00 2.8432E+00 2.1612E+00 - 4.4668E+00 3.8010E+00 3.4488E+00 2.0320E+00 1.5598E+00 - 5.0119E+00 2.7449E+00 2.4970E+00 1.4236E+00 1.1213E+00 - 5.6234E+00 1.9566E+00 1.8047E+00 1.0312E+00 7.8703E-01 - 6.3096E+00 1.3870E+00 1.3044E+00 7.2978E-01 5.5355E-01 - 7.0795E+00 9.9808E-01 9.3380E-01 4.9547E-01 3.8860E-01 - 7.9433E+00 7.2534E-01 6.6926E-01 3.5472E-01 2.7109E-01 - 8.9125E+00 5.2244E-01 4.7005E-01 2.5580E-01 1.9221E-01 - 1.0000E+01 3.8292E-01 3.4530E-01 1.7985E-01 1.3506E-01 - 1.1220E+01 2.7350E-01 2.4694E-01 1.2241E-01 9.0196E-02 - 1.2589E+01 1.9661E-01 1.7691E-01 8.4362E-02 6.1208E-02 - 1.4125E+01 1.4244E-01 1.2482E-01 5.9088E-02 4.3372E-02 - 1.5849E+01 1.0190E-01 8.7078E-02 4.0135E-02 2.9535E-02 - 1.7783E+01 7.1812E-02 6.2372E-02 2.7615E-02 2.0097E-02 - 1.9953E+01 5.0354E-02 4.4034E-02 1.8384E-02 1.4033E-02 - 2.2387E+01 3.6305E-02 3.0701E-02 1.2140E-02 9.5793E-03 - 2.5119E+01 2.6127E-02 2.1966E-02 8.6130E-03 6.8238E-03 - 2.8184E+01 1.8403E-02 1.6168E-02 6.0057E-03 4.7405E-03 - 3.1623E+01 1.3340E-02 1.1251E-02 4.0371E-03 3.0919E-03 - 3.5481E+01 9.5080E-03 7.9675E-03 2.7294E-03 2.0940E-03 - 3.9811E+01 6.8009E-03 5.6534E-03 1.8430E-03 1.4031E-03 - 4.4668E+01 4.8637E-03 4.0062E-03 1.2348E-03 9.4317E-04 - 5.0119E+01 3.4683E-03 2.8287E-03 8.2887E-04 6.3494E-04 - 5.6234E+01 2.4717E-03 1.9988E-03 5.5718E-04 4.2554E-04 - 6.3096E+01 1.7662E-03 1.4165E-03 3.7130E-04 2.8343E-04 - 7.0795E+01 1.2513E-03 1.0006E-03 2.4651E-04 1.9030E-04 - 7.9433E+01 8.8885E-04 7.0422E-04 1.6288E-04 1.2926E-04 - 8.9125E+01 6.3409E-04 4.9532E-04 1.0926E-04 8.5268E-05 - 1.0000E+02 4.5161E-04 3.4921E-04 7.2006E-05 5.6497E-05 - 1.1220E+02 3.2024E-04 2.4577E-04 4.7915E-05 3.7910E-05 - 1.2589E+02 2.2720E-04 1.7275E-04 3.1979E-05 2.5259E-05 - 1.4125E+02 1.6011E-04 1.2163E-04 2.1191E-05 1.6623E-05 - 1.5849E+02 1.1318E-04 8.5286E-05 1.3962E-05 1.1079E-05 - 1.7783E+02 8.0134E-05 5.9592E-05 9.1468E-06 7.3793E-06 - 1.9953E+02 5.6460E-05 4.1811E-05 6.0653E-06 4.8716E-06 - 2.2387E+02 4.0105E-05 2.9106E-05 4.0637E-06 3.2641E-06 - 2.5119E+02 2.8343E-05 2.0250E-05 2.6685E-06 2.1535E-06 - 2.8184E+02 1.9934E-05 1.4193E-05 1.7221E-06 1.4102E-06 - 3.1623E+02 1.3920E-05 9.9394E-06 1.1725E-06 9.3228E-07 - 3.5481E+02 9.7663E-06 6.8962E-06 7.7605E-07 6.2831E-07 - 3.9811E+02 6.8541E-06 4.7961E-06 5.2118E-07 4.2319E-07 - 4.4668E+02 4.8256E-06 3.3372E-06 3.5055E-07 2.7774E-07 - 5.0119E+02 3.3767E-06 2.3139E-06 2.3141E-07 1.8108E-07 - 5.6234E+02 2.3544E-06 1.6055E-06 1.5295E-07 1.2196E-07 - 6.3096E+02 1.6385E-06 1.1193E-06 1.0268E-07 8.3646E-08 - 7.0795E+02 1.1452E-06 7.7502E-07 6.8986E-08 5.6005E-08 - 7.9433E+02 8.0017E-07 5.3384E-07 4.5939E-08 3.6905E-08 - 8.9125E+02 5.5903E-07 3.6753E-07 3.0231E-08 2.4643E-08 - 1.0000E+03 3.9165E-07 2.5557E-07 2.0572E-08 1.6697E-08 - 1.1220E+03 2.7097E-07 1.7641E-07 1.3766E-08 1.0950E-08 - 1.2589E+03 1.8682E-07 1.2108E-07 9.1510E-09 7.2630E-09 - 1.4125E+03 1.3013E-07 8.3240E-08 6.1405E-09 4.9241E-09 - 1.5849E+03 9.0863E-08 5.7557E-08 4.1462E-09 3.3543E-09 - 1.7783E+03 6.2521E-08 3.9449E-08 2.9284E-09 2.2103E-09 - 1.9953E+03 4.3347E-08 2.6910E-08 1.8985E-09 1.4592E-09 - 2.2387E+03 2.9965E-08 1.8510E-08 1.2250E-09 9.6690E-10 - 2.5119E+03 2.0610E-08 1.2781E-08 8.3620E-10 6.5572E-10 - 2.8184E+03 1.4056E-08 8.6521E-09 5.5000E-10 4.2638E-10 - 3.1623E+03 9.8066E-09 5.9257E-09 3.6948E-10 2.8891E-10 - 3.5481E+03 6.6519E-09 4.0071E-09 2.5079E-10 1.9314E-10 - 3.9811E+03 4.5230E-09 2.7025E-09 1.6622E-10 1.2495E-10 - 4.4668E+03 3.0626E-09 1.8249E-09 1.0826E-10 8.1683E-11 - 5.0119E+03 2.0871E-09 1.2313E-09 7.2604E-11 5.3722E-11 - 5.6234E+03 1.4303E-09 8.2453E-10 4.9287E-11 3.5796E-11 - 6.3096E+03 9.7360E-10 5.5915E-10 3.2702E-11 2.4648E-11 - 7.0795E+03 6.5760E-10 3.7574E-10 2.1554E-11 1.5931E-11 - 7.9433E+03 4.4235E-10 2.5015E-10 1.4442E-11 1.0378E-11 - 8.9125E+03 2.9733E-10 1.6658E-10 9.2242E-12 6.9003E-12 - 1.0000E+04 1.9820E-10 1.0970E-10 6.3080E-12 4.6669E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5741E+04 2.6312E+04 1.2775E+04 1.1658E+04 - 1.1220E-01 2.1606E+04 2.2028E+04 1.0946E+04 9.8893E+03 - 1.2589E-01 1.8161E+04 1.8400E+04 9.2434E+03 8.2948E+03 - 1.4125E-01 1.5119E+04 1.5256E+04 7.7364E+03 6.8433E+03 - 1.5849E-01 1.2425E+04 1.2535E+04 6.3976E+03 5.5811E+03 - 1.7783E-01 1.0068E+04 1.0181E+04 5.2591E+03 4.5028E+03 - 1.9953E-01 8.0303E+03 8.1899E+03 4.2923E+03 3.6377E+03 - 2.2387E-01 6.3652E+03 6.4937E+03 3.4501E+03 2.9254E+03 - 2.5119E-01 5.0239E+03 5.1058E+03 2.7589E+03 2.3017E+03 - 2.8184E-01 3.9125E+03 4.0004E+03 2.2083E+03 1.8080E+03 - 3.1623E-01 3.0358E+03 3.0731E+03 1.7422E+03 1.4046E+03 - 3.5481E-01 2.3370E+03 2.3574E+03 1.3546E+03 1.0788E+03 - 3.9811E-01 1.8043E+03 1.8217E+03 1.0550E+03 8.3650E+02 - 4.4668E-01 1.3661E+03 1.3855E+03 8.1392E+02 6.3755E+02 - 5.0119E-01 1.0283E+03 1.0535E+03 6.1450E+02 4.8589E+02 - 5.6234E-01 7.8550E+02 7.9919E+02 4.6945E+02 3.7229E+02 - 6.3096E-01 5.9011E+02 6.0157E+02 3.6016E+02 2.7756E+02 - 7.0795E-01 4.4423E+02 4.4689E+02 2.7505E+02 2.0644E+02 - 7.9433E-01 3.3639E+02 3.3862E+02 2.0795E+02 1.5385E+02 - 8.9125E-01 2.5210E+02 2.5324E+02 1.5684E+02 1.1705E+02 - 1.0000E+00 1.8655E+02 1.8825E+02 1.1593E+02 8.7819E+01 - 1.1220E+00 1.3921E+02 1.4132E+02 8.6774E+01 6.5445E+01 - 1.2589E+00 1.0388E+02 1.0575E+02 6.4241E+01 4.8177E+01 - 1.4125E+00 7.8671E+01 7.8851E+01 4.7733E+01 3.5653E+01 - 1.5849E+00 5.9861E+01 5.8753E+01 3.5264E+01 2.6661E+01 - 1.7783E+00 4.4565E+01 4.4121E+01 2.6162E+01 1.9425E+01 - 1.9953E+00 3.2599E+01 3.2734E+01 1.9669E+01 1.4434E+01 - 2.2387E+00 2.3800E+01 2.3848E+01 1.4422E+01 1.0637E+01 - 2.5119E+00 1.7365E+01 1.7538E+01 1.0658E+01 7.6063E+00 - 2.8184E+00 1.2831E+01 1.3026E+01 7.7854E+00 5.6772E+00 - 3.1623E+00 9.6279E+00 9.3679E+00 5.6514E+00 4.1400E+00 - 3.5481E+00 7.0523E+00 6.7720E+00 4.1139E+00 3.0140E+00 - 3.9811E+00 5.1390E+00 4.9463E+00 2.9805E+00 2.1665E+00 - 4.4668E+00 3.7745E+00 3.5974E+00 2.1056E+00 1.5537E+00 - 5.0119E+00 2.7333E+00 2.5632E+00 1.5204E+00 1.1030E+00 - 5.6234E+00 1.9623E+00 1.8309E+00 1.0795E+00 7.7757E-01 - 6.3096E+00 1.4231E+00 1.3301E+00 7.4474E-01 5.4891E-01 - 7.0795E+00 1.0295E+00 9.5813E-01 5.2332E-01 3.8803E-01 - 7.9433E+00 7.4380E-01 6.7616E-01 3.6927E-01 2.7011E-01 - 8.9125E+00 5.4105E-01 4.7732E-01 2.6129E-01 1.8976E-01 - 1.0000E+01 3.8129E-01 3.4706E-01 1.7991E-01 1.3219E-01 - 1.1220E+01 2.7260E-01 2.4963E-01 1.2443E-01 9.2231E-02 - 1.2589E+01 1.9462E-01 1.7762E-01 8.7627E-02 6.4526E-02 - 1.4125E+01 1.3928E-01 1.2636E-01 6.0031E-02 4.4060E-02 - 1.5849E+01 1.0060E-01 9.0237E-02 4.1181E-02 3.0406E-02 - 1.7783E+01 7.1909E-02 6.4624E-02 2.8584E-02 2.1113E-02 - 1.9953E+01 5.1156E-02 4.5505E-02 1.9278E-02 1.4128E-02 - 2.2387E+01 3.7212E-02 3.2195E-02 1.3144E-02 9.6931E-03 - 2.5119E+01 2.6575E-02 2.3135E-02 8.9835E-03 6.6686E-03 - 2.8184E+01 1.8723E-02 1.6243E-02 5.8324E-03 4.5669E-03 - 3.1623E+01 1.3327E-02 1.1270E-02 4.0622E-03 3.0833E-03 - 3.5481E+01 9.5117E-03 7.9816E-03 2.7284E-03 2.0792E-03 - 3.9811E+01 6.8239E-03 5.6434E-03 1.8380E-03 1.3958E-03 - 4.4668E+01 4.8619E-03 3.9981E-03 1.2277E-03 9.4524E-04 - 5.0119E+01 3.4532E-03 2.8305E-03 8.2155E-04 6.3992E-04 - 5.6234E+01 2.4576E-03 1.9990E-03 5.5219E-04 4.2383E-04 - 6.3096E+01 1.7541E-03 1.4133E-03 3.6542E-04 2.8290E-04 - 7.0795E+01 1.2579E-03 9.9671E-04 2.4331E-04 1.9211E-04 - 7.9433E+01 8.9376E-04 7.0259E-04 1.6447E-04 1.2878E-04 - 8.9125E+01 6.3078E-04 4.9411E-04 1.0906E-04 8.5772E-05 - 1.0000E+02 4.5033E-04 3.4876E-04 7.2280E-05 5.6827E-05 - 1.1220E+02 3.1985E-04 2.4697E-04 4.7961E-05 3.8098E-05 - 1.2589E+02 2.2645E-04 1.7375E-04 3.1812E-05 2.5084E-05 - 1.4125E+02 1.6017E-04 1.2145E-04 2.1111E-05 1.6582E-05 - 1.5849E+02 1.1352E-04 8.5118E-05 1.3830E-05 1.1076E-05 - 1.7783E+02 8.0480E-05 5.9906E-05 9.1722E-06 7.3970E-06 - 1.9953E+02 5.6802E-05 4.1734E-05 6.1418E-06 4.8682E-06 - 2.2387E+02 4.0124E-05 2.9275E-05 4.0935E-06 3.2085E-06 - 2.5119E+02 2.8208E-05 2.0534E-05 2.7274E-06 2.1631E-06 - 2.8184E+02 1.9886E-05 1.4309E-05 1.8135E-06 1.3921E-06 - 3.1623E+02 1.3896E-05 9.9295E-06 1.1870E-06 9.4534E-07 - 3.5481E+02 9.7506E-06 6.9053E-06 7.8025E-07 6.3758E-07 - 3.9811E+02 6.8627E-06 4.8020E-06 5.1641E-07 4.1811E-07 - 4.4668E+02 4.8004E-06 3.3415E-06 3.4652E-07 2.7138E-07 - 5.0119E+02 3.3658E-06 2.3110E-06 2.3034E-07 1.8291E-07 - 5.6234E+02 2.3503E-06 1.6102E-06 1.5423E-07 1.2264E-07 - 6.3096E+02 1.6434E-06 1.1155E-06 1.0433E-07 8.1916E-08 - 7.0795E+02 1.1460E-06 7.7253E-07 6.8580E-08 5.5630E-08 - 7.9433E+02 8.0259E-07 5.3373E-07 4.5683E-08 3.7768E-08 - 8.9125E+02 5.6265E-07 3.6770E-07 3.0432E-08 2.4726E-08 - 1.0000E+03 3.8938E-07 2.5588E-07 2.0508E-08 1.6497E-08 - 1.1220E+03 2.6976E-07 1.7580E-07 1.3561E-08 1.0923E-08 - 1.2589E+03 1.8802E-07 1.2112E-07 9.0880E-09 7.2938E-09 - 1.4125E+03 1.3061E-07 8.3789E-08 6.3605E-09 4.8756E-09 - 1.5849E+03 9.0845E-08 5.7252E-08 4.2868E-09 3.2573E-09 - 1.7783E+03 6.2887E-08 3.9119E-08 2.8177E-09 2.1319E-09 - 1.9953E+03 4.3422E-08 2.7123E-08 1.8998E-09 1.4577E-09 - 2.2387E+03 2.9985E-08 1.8538E-08 1.2385E-09 9.5896E-10 - 2.5119E+03 2.0652E-08 1.2707E-08 8.0650E-10 6.6003E-10 - 2.8184E+03 1.4150E-08 8.6550E-09 5.5667E-10 4.3494E-10 - 3.1623E+03 9.8361E-09 5.9740E-09 3.7218E-10 2.8640E-10 - 3.5481E+03 6.6862E-09 3.9837E-09 2.4785E-10 1.8931E-10 - 3.9811E+03 4.6008E-09 2.7012E-09 1.6732E-10 1.2932E-10 - 4.4668E+03 3.1048E-09 1.8240E-09 1.1244E-10 8.4738E-11 - 5.0119E+03 2.1025E-09 1.2306E-09 7.4721E-11 5.4202E-11 - 5.6234E+03 1.4358E-09 8.2980E-10 4.9944E-11 3.4550E-11 - 6.3096E+03 9.6520E-10 5.6094E-10 3.3487E-11 2.3866E-11 - 7.0795E+03 6.5128E-10 3.8021E-10 2.1843E-11 1.5830E-11 - 7.9433E+03 4.3975E-10 2.5162E-10 1.4173E-11 1.0152E-11 - 8.9125E+03 2.9386E-10 1.6847E-10 9.5125E-12 6.5184E-12 - 1.0000E+04 1.9797E-10 1.1228E-10 6.0982E-12 4.1911E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5836E+04 2.6745E+04 1.3119E+04 1.1656E+04 - 1.1220E-01 2.1747E+04 2.2529E+04 1.1239E+04 9.7673E+03 - 1.2589E-01 1.8211E+04 1.8935E+04 9.5217E+03 8.1733E+03 - 1.4125E-01 1.5135E+04 1.5627E+04 7.9397E+03 6.7817E+03 - 1.5849E-01 1.2402E+04 1.2801E+04 6.6079E+03 5.5576E+03 - 1.7783E-01 1.0053E+04 1.0434E+04 5.4469E+03 4.4820E+03 - 1.9953E-01 8.1172E+03 8.3996E+03 4.4417E+03 3.6080E+03 - 2.2387E-01 6.4448E+03 6.7106E+03 3.6132E+03 2.8995E+03 - 2.5119E-01 5.0636E+03 5.2910E+03 2.8977E+03 2.2811E+03 - 2.8184E-01 3.9433E+03 4.1085E+03 2.3014E+03 1.7808E+03 - 3.1623E-01 3.0453E+03 3.1968E+03 1.8226E+03 1.4032E+03 - 3.5481E-01 2.3386E+03 2.4694E+03 1.4240E+03 1.0845E+03 - 3.9811E-01 1.7937E+03 1.8892E+03 1.0982E+03 8.2931E+02 - 4.4668E-01 1.3578E+03 1.4418E+03 8.4813E+02 6.3181E+02 - 5.0119E-01 1.0304E+03 1.0913E+03 6.5209E+02 4.7307E+02 - 5.6234E-01 7.8640E+02 8.1901E+02 5.0628E+02 3.5909E+02 - 6.3096E-01 5.8882E+02 6.0875E+02 3.8617E+02 2.7083E+02 - 7.0795E-01 4.4040E+02 4.5969E+02 2.9128E+02 2.0233E+02 - 7.9433E-01 3.3414E+02 3.5210E+02 2.2222E+02 1.5232E+02 - 8.9125E-01 2.4957E+02 2.6519E+02 1.6421E+02 1.1417E+02 - 1.0000E+00 1.8751E+02 1.9709E+02 1.2043E+02 8.3374E+01 - 1.1220E+00 1.4027E+02 1.4709E+02 9.0560E+01 6.2767E+01 - 1.2589E+00 1.0489E+02 1.0961E+02 6.7972E+01 4.7569E+01 - 1.4125E+00 7.8746E+01 8.1720E+01 5.0489E+01 3.5669E+01 - 1.5849E+00 5.9236E+01 6.0587E+01 3.7604E+01 2.6223E+01 - 1.7783E+00 4.4261E+01 4.5258E+01 2.7846E+01 1.9191E+01 - 1.9953E+00 3.2676E+01 3.3227E+01 2.0750E+01 1.4180E+01 - 2.2387E+00 2.4423E+01 2.4355E+01 1.5251E+01 1.0614E+01 - 2.5119E+00 1.8183E+01 1.8151E+01 1.0751E+01 7.9169E+00 - 2.8184E+00 1.3311E+01 1.3035E+01 7.8541E+00 5.6778E+00 - 3.1623E+00 9.6827E+00 9.4270E+00 5.7480E+00 4.0512E+00 - 3.5481E+00 7.0128E+00 6.9079E+00 4.1372E+00 2.9047E+00 - 3.9811E+00 5.0749E+00 4.9762E+00 2.9659E+00 2.0893E+00 - 4.4668E+00 3.7064E+00 3.5644E+00 2.0945E+00 1.5141E+00 - 5.0119E+00 2.6806E+00 2.6006E+00 1.4678E+00 1.0475E+00 - 5.6234E+00 1.9378E+00 1.8767E+00 1.0535E+00 7.4113E-01 - 6.3096E+00 1.4191E+00 1.3399E+00 7.6748E-01 5.4232E-01 - 7.0795E+00 1.0276E+00 9.5064E-01 5.2825E-01 3.8339E-01 - 7.9433E+00 7.4845E-01 6.7647E-01 3.5923E-01 2.6066E-01 - 8.9125E+00 5.3945E-01 4.9157E-01 2.5301E-01 1.8207E-01 - 1.0000E+01 3.7789E-01 3.4775E-01 1.8127E-01 1.2988E-01 - 1.1220E+01 2.7060E-01 2.4829E-01 1.2371E-01 9.0929E-02 - 1.2589E+01 1.9588E-01 1.7781E-01 8.4967E-02 6.4775E-02 - 1.4125E+01 1.3967E-01 1.2606E-01 6.0325E-02 4.4811E-02 - 1.5849E+01 1.0028E-01 8.8985E-02 4.1985E-02 3.0311E-02 - 1.7783E+01 7.1949E-02 6.2663E-02 2.8472E-02 2.1277E-02 - 1.9953E+01 5.1063E-02 4.4516E-02 1.9210E-02 1.4500E-02 - 2.2387E+01 3.6929E-02 3.1995E-02 1.3122E-02 9.9244E-03 - 2.5119E+01 2.6422E-02 2.2994E-02 8.9806E-03 7.1246E-03 - 2.8184E+01 1.9065E-02 1.5745E-02 6.0114E-03 4.9085E-03 - 3.1623E+01 1.3365E-02 1.1316E-02 4.0501E-03 3.0885E-03 - 3.5481E+01 9.5543E-03 8.0052E-03 2.7287E-03 2.0967E-03 - 3.9811E+01 6.8241E-03 5.6684E-03 1.8410E-03 1.4115E-03 - 4.4668E+01 4.8674E-03 4.0108E-03 1.2303E-03 9.4998E-04 - 5.0119E+01 3.4692E-03 2.8232E-03 8.2294E-04 6.3775E-04 - 5.6234E+01 2.4702E-03 1.9893E-03 5.5378E-04 4.2915E-04 - 6.3096E+01 1.7522E-03 1.4118E-03 3.6950E-04 2.8742E-04 - 7.0795E+01 1.2472E-03 1.0013E-03 2.4658E-04 1.9127E-04 - 7.9433E+01 8.8742E-04 7.0592E-04 1.6327E-04 1.2798E-04 - 8.9125E+01 6.3216E-04 4.9872E-04 1.0850E-04 8.4661E-05 - 1.0000E+02 4.5066E-04 3.4977E-04 7.2574E-05 5.6719E-05 - 1.1220E+02 3.1915E-04 2.4548E-04 4.7872E-05 3.7552E-05 - 1.2589E+02 2.2636E-04 1.7300E-04 3.1793E-05 2.5039E-05 - 1.4125E+02 1.6062E-04 1.2231E-04 2.1230E-05 1.6752E-05 - 1.5849E+02 1.1407E-04 8.5492E-05 1.4001E-05 1.1141E-05 - 1.7783E+02 8.0578E-05 5.9709E-05 9.1766E-06 7.4893E-06 - 1.9953E+02 5.6756E-05 4.1844E-05 6.1091E-06 4.9707E-06 - 2.2387E+02 4.0096E-05 2.9279E-05 4.0754E-06 3.2782E-06 - 2.5119E+02 2.8229E-05 2.0553E-05 2.6843E-06 2.1328E-06 - 2.8184E+02 1.9715E-05 1.4339E-05 1.7327E-06 1.3839E-06 - 3.1623E+02 1.3890E-05 9.9383E-06 1.1725E-06 9.3733E-07 - 3.5481E+02 9.7460E-06 6.8950E-06 7.7987E-07 6.3007E-07 - 3.9811E+02 6.8487E-06 4.8062E-06 5.1601E-07 4.1679E-07 - 4.4668E+02 4.8009E-06 3.3484E-06 3.4464E-07 2.7939E-07 - 5.0119E+02 3.3589E-06 2.3187E-06 2.2854E-07 1.8657E-07 - 5.6234E+02 2.3628E-06 1.6144E-06 1.5313E-07 1.2189E-07 - 6.3096E+02 1.6514E-06 1.1178E-06 1.0268E-07 8.1123E-08 - 7.0795E+02 1.1509E-06 7.7147E-07 6.9428E-08 5.4346E-08 - 7.9433E+02 8.0204E-07 5.3688E-07 4.6031E-08 3.6238E-08 - 8.9125E+02 5.6034E-07 3.7221E-07 3.1032E-08 2.4179E-08 - 1.0000E+03 3.9158E-07 2.5470E-07 2.1035E-08 1.6414E-08 - 1.1220E+03 2.7182E-07 1.7544E-07 1.3990E-08 1.1041E-08 - 1.2589E+03 1.8809E-07 1.2170E-07 9.4107E-09 7.3252E-09 - 1.4125E+03 1.2994E-07 8.3461E-08 6.2711E-09 4.7683E-09 - 1.5849E+03 9.0954E-08 5.7143E-08 4.1402E-09 3.1962E-09 - 1.7783E+03 6.3185E-08 3.9520E-08 2.8120E-09 2.1312E-09 - 1.9953E+03 4.3682E-08 2.6998E-08 1.8701E-09 1.4651E-09 - 2.2387E+03 3.0278E-08 1.8538E-08 1.2313E-09 9.9067E-10 - 2.5119E+03 2.0686E-08 1.2654E-08 8.2803E-10 6.5942E-10 - 2.8184E+03 1.4107E-08 8.5698E-09 5.6774E-10 4.2723E-10 - 3.1623E+03 9.8242E-09 5.9148E-09 3.7860E-10 2.8600E-10 - 3.5481E+03 6.6677E-09 3.9885E-09 2.5945E-10 1.8591E-10 - 3.9811E+03 4.5642E-09 2.7032E-09 1.7246E-10 1.2412E-10 - 4.4668E+03 3.1127E-09 1.8169E-09 1.1355E-10 8.2537E-11 - 5.0119E+03 2.0964E-09 1.2211E-09 7.3891E-11 5.2969E-11 - 5.6234E+03 1.4163E-09 8.2797E-10 4.7097E-11 3.5826E-11 - 6.3096E+03 9.7702E-10 5.5900E-10 3.2470E-11 2.3794E-11 - 7.0795E+03 6.5923E-10 3.7255E-10 2.2153E-11 1.5459E-11 - 7.9433E+03 4.4098E-10 2.5031E-10 1.4064E-11 9.7335E-12 - 8.9125E+03 2.9574E-10 1.6607E-10 9.5036E-12 6.4824E-12 - 1.0000E+04 1.9786E-10 1.0984E-10 6.6249E-12 4.3436E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5855E+04 2.6990E+04 1.3142E+04 1.1618E+04 - 1.1220E-01 2.1743E+04 2.2648E+04 1.1272E+04 9.8094E+03 - 1.2589E-01 1.8146E+04 1.8907E+04 9.5857E+03 8.1217E+03 - 1.4125E-01 1.5018E+04 1.5698E+04 8.0528E+03 6.6667E+03 - 1.5849E-01 1.2393E+04 1.2939E+04 6.6777E+03 5.4556E+03 - 1.7783E-01 1.0057E+04 1.0553E+04 5.4897E+03 4.4454E+03 - 1.9953E-01 8.0653E+03 8.5084E+03 4.5329E+03 3.6098E+03 - 2.2387E-01 6.4558E+03 6.7629E+03 3.6709E+03 2.9059E+03 - 2.5119E-01 5.0721E+03 5.3457E+03 2.9341E+03 2.2632E+03 - 2.8184E-01 3.9229E+03 4.1868E+03 2.3527E+03 1.7483E+03 - 3.1623E-01 3.0284E+03 3.2464E+03 1.8617E+03 1.3684E+03 - 3.5481E-01 2.3344E+03 2.5010E+03 1.4562E+03 1.0517E+03 - 3.9811E-01 1.7863E+03 1.9230E+03 1.1328E+03 8.1059E+02 - 4.4668E-01 1.3621E+03 1.4645E+03 8.6907E+02 6.2083E+02 - 5.0119E-01 1.0344E+03 1.1109E+03 6.6426E+02 4.6289E+02 - 5.6234E-01 7.7384E+02 8.4265E+02 5.1068E+02 3.5395E+02 - 6.3096E-01 5.8131E+02 6.3986E+02 3.8994E+02 2.7031E+02 - 7.0795E-01 4.3517E+02 4.8104E+02 2.9878E+02 1.9947E+02 - 7.9433E-01 3.3121E+02 3.5809E+02 2.2332E+02 1.4964E+02 - 8.9125E-01 2.5243E+02 2.6868E+02 1.6640E+02 1.1274E+02 - 1.0000E+00 1.8689E+02 2.0111E+02 1.2539E+02 8.3385E+01 - 1.1220E+00 1.3950E+02 1.5035E+02 9.4160E+01 6.1865E+01 - 1.2589E+00 1.0463E+02 1.1173E+02 7.0739E+01 4.5652E+01 - 1.4125E+00 7.7979E+01 8.2444E+01 5.2268E+01 3.4397E+01 - 1.5849E+00 5.8313E+01 6.1593E+01 3.8672E+01 2.5674E+01 - 1.7783E+00 4.4008E+01 4.6320E+01 2.8672E+01 1.8707E+01 - 1.9953E+00 3.2697E+01 3.4124E+01 2.0881E+01 1.4012E+01 - 2.2387E+00 2.4122E+01 2.4675E+01 1.4974E+01 1.0379E+01 - 2.5119E+00 1.7979E+01 1.7949E+01 1.1176E+01 7.6905E+00 - 2.8184E+00 1.3242E+01 1.3302E+01 8.2985E+00 5.5861E+00 - 3.1623E+00 9.6945E+00 9.6929E+00 5.9236E+00 4.0110E+00 - 3.5481E+00 7.0953E+00 7.0753E+00 4.2745E+00 2.8788E+00 - 3.9811E+00 5.1593E+00 5.1429E+00 3.0378E+00 2.0918E+00 - 4.4668E+00 3.7650E+00 3.6749E+00 2.1732E+00 1.5247E+00 - 5.0119E+00 2.7343E+00 2.6560E+00 1.5399E+00 1.0986E+00 - 5.6234E+00 1.9897E+00 1.9196E+00 1.0840E+00 7.6880E-01 - 6.3096E+00 1.4538E+00 1.3549E+00 7.6777E-01 5.4362E-01 - 7.0795E+00 1.0478E+00 9.8289E-01 5.4207E-01 3.8954E-01 - 7.9433E+00 7.3938E-01 7.0862E-01 3.8424E-01 2.7353E-01 - 8.9125E+00 5.2949E-01 5.0826E-01 2.6261E-01 1.9347E-01 - 1.0000E+01 3.8465E-01 3.4916E-01 1.8075E-01 1.3278E-01 - 1.1220E+01 2.7669E-01 2.4943E-01 1.2276E-01 9.0895E-02 - 1.2589E+01 1.9792E-01 1.7773E-01 8.5463E-02 6.4136E-02 - 1.4125E+01 1.4145E-01 1.2691E-01 5.9591E-02 4.4559E-02 - 1.5849E+01 1.0155E-01 8.9308E-02 4.0715E-02 3.0616E-02 - 1.7783E+01 7.2108E-02 6.1830E-02 2.7740E-02 2.1052E-02 - 1.9953E+01 5.0937E-02 4.4244E-02 1.8632E-02 1.4637E-02 - 2.2387E+01 3.6509E-02 3.1693E-02 1.2511E-02 9.8957E-03 - 2.5119E+01 2.5805E-02 2.2447E-02 8.6798E-03 6.8166E-03 - 2.8184E+01 1.8438E-02 1.5976E-02 6.0792E-03 4.5346E-03 - 3.1623E+01 1.3355E-02 1.1242E-02 4.0561E-03 3.0947E-03 - 3.5481E+01 9.5402E-03 7.9668E-03 2.7295E-03 2.1017E-03 - 3.9811E+01 6.7821E-03 5.6398E-03 1.8383E-03 1.4047E-03 - 4.4668E+01 4.8247E-03 3.9900E-03 1.2344E-03 9.4577E-04 - 5.0119E+01 3.4466E-03 2.8203E-03 8.2595E-04 6.3554E-04 - 5.6234E+01 2.4636E-03 1.9936E-03 5.5492E-04 4.2311E-04 - 6.3096E+01 1.7560E-03 1.4079E-03 3.6720E-04 2.8501E-04 - 7.0795E+01 1.2518E-03 9.9688E-04 2.4225E-04 1.9167E-04 - 7.9433E+01 8.8603E-04 7.0593E-04 1.6130E-04 1.2781E-04 - 8.9125E+01 6.2791E-04 4.9726E-04 1.0786E-04 8.5274E-05 - 1.0000E+02 4.5119E-04 3.4974E-04 7.2491E-05 5.7077E-05 - 1.1220E+02 3.2027E-04 2.4635E-04 4.8274E-05 3.7850E-05 - 1.2589E+02 2.2673E-04 1.7264E-04 3.1764E-05 2.4948E-05 - 1.4125E+02 1.6019E-04 1.2106E-04 2.0912E-05 1.6648E-05 - 1.5849E+02 1.1355E-04 8.5035E-05 1.3920E-05 1.1070E-05 - 1.7783E+02 8.0316E-05 5.9676E-05 9.2602E-06 7.3541E-06 - 1.9953E+02 5.6483E-05 4.1766E-05 6.2170E-06 4.9129E-06 - 2.2387E+02 3.9925E-05 2.9186E-05 4.0256E-06 3.2057E-06 - 2.5119E+02 2.8209E-05 2.0322E-05 2.6627E-06 2.1171E-06 - 2.8184E+02 1.9777E-05 1.4173E-05 1.7637E-06 1.4109E-06 - 3.1623E+02 1.3949E-05 9.9491E-06 1.1799E-06 9.5554E-07 - 3.5481E+02 9.7808E-06 6.9152E-06 7.7447E-07 6.2868E-07 - 3.9811E+02 6.8429E-06 4.8267E-06 5.1151E-07 4.1949E-07 - 4.4668E+02 4.8137E-06 3.3581E-06 3.4498E-07 2.7961E-07 - 5.0119E+02 3.3816E-06 2.3284E-06 2.3098E-07 1.8329E-07 - 5.6234E+02 2.3599E-06 1.6153E-06 1.5238E-07 1.2465E-07 - 6.3096E+02 1.6469E-06 1.1202E-06 1.0064E-07 8.3352E-08 - 7.0795E+02 1.1473E-06 7.7359E-07 6.8405E-08 5.5660E-08 - 7.9433E+02 8.0364E-07 5.3465E-07 4.5756E-08 3.7505E-08 - 8.9125E+02 5.6063E-07 3.7065E-07 3.0817E-08 2.5311E-08 - 1.0000E+03 3.9016E-07 2.5582E-07 2.0381E-08 1.6410E-08 - 1.1220E+03 2.7051E-07 1.7689E-07 1.3687E-08 1.1031E-08 - 1.2589E+03 1.8772E-07 1.2130E-07 9.0581E-09 7.4036E-09 - 1.4125E+03 1.3090E-07 8.3353E-08 6.1397E-09 4.8959E-09 - 1.5849E+03 9.1098E-08 5.7737E-08 4.2231E-09 3.2408E-09 - 1.7783E+03 6.3003E-08 3.9930E-08 2.7821E-09 2.1490E-09 - 1.9953E+03 4.3617E-08 2.7178E-08 1.8885E-09 1.4305E-09 - 2.2387E+03 3.0211E-08 1.8478E-08 1.2259E-09 9.7648E-10 - 2.5119E+03 2.0768E-08 1.2618E-08 8.1317E-10 6.2832E-10 - 2.8184E+03 1.4182E-08 8.5875E-09 5.3222E-10 4.1806E-10 - 3.1623E+03 9.8222E-09 5.9861E-09 3.7061E-10 2.9051E-10 - 3.5481E+03 6.6587E-09 4.0322E-09 2.4819E-10 1.9628E-10 - 3.9811E+03 4.5506E-09 2.7251E-09 1.6355E-10 1.2751E-10 - 4.4668E+03 3.1167E-09 1.8354E-09 1.1324E-10 8.1816E-11 - 5.0119E+03 2.1315E-09 1.2235E-09 7.8023E-11 5.6830E-11 - 5.6234E+03 1.4257E-09 8.2522E-10 5.3186E-11 3.6854E-11 - 6.3096E+03 9.7011E-10 5.5929E-10 3.3865E-11 2.3518E-11 - 7.0795E+03 6.5841E-10 3.7651E-10 2.1860E-11 1.6229E-11 - 7.9433E+03 4.4101E-10 2.5121E-10 1.3789E-11 1.0578E-11 - 8.9125E+03 2.9277E-10 1.6581E-10 9.4925E-12 6.3717E-12 - 1.0000E+04 1.9732E-10 1.1172E-10 6.6834E-12 4.0476E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5666E+04 2.6935E+04 1.3214E+04 1.1481E+04 - 1.1220E-01 2.1691E+04 2.2738E+04 1.1248E+04 9.7561E+03 - 1.2589E-01 1.8142E+04 1.8897E+04 9.5073E+03 8.1530E+03 - 1.4125E-01 1.5045E+04 1.5638E+04 7.9824E+03 6.6978E+03 - 1.5849E-01 1.2332E+04 1.2952E+04 6.6058E+03 5.4966E+03 - 1.7783E-01 1.0017E+04 1.0553E+04 5.4588E+03 4.4879E+03 - 1.9953E-01 8.0864E+03 8.4520E+03 4.4763E+03 3.5914E+03 - 2.2387E-01 6.4178E+03 6.7183E+03 3.6283E+03 2.8444E+03 - 2.5119E-01 5.0464E+03 5.2840E+03 2.9379E+03 2.2461E+03 - 2.8184E-01 3.9399E+03 4.1539E+03 2.3481E+03 1.7638E+03 - 3.1623E-01 3.0371E+03 3.2450E+03 1.8607E+03 1.3817E+03 - 3.5481E-01 2.3421E+03 2.4885E+03 1.4590E+03 1.0678E+03 - 3.9811E-01 1.7784E+03 1.9197E+03 1.1198E+03 8.1066E+02 - 4.4668E-01 1.3462E+03 1.4748E+03 8.6527E+02 6.1637E+02 - 5.0119E-01 1.0347E+03 1.1137E+03 6.6173E+02 4.6875E+02 - 5.6234E-01 7.8077E+02 8.5009E+02 5.1019E+02 3.5195E+02 - 6.3096E-01 5.8527E+02 6.3534E+02 3.8785E+02 2.6258E+02 - 7.0795E-01 4.3967E+02 4.7182E+02 2.8925E+02 1.9595E+02 - 7.9433E-01 3.3275E+02 3.5534E+02 2.1928E+02 1.4757E+02 - 8.9125E-01 2.5162E+02 2.6726E+02 1.6245E+02 1.1178E+02 - 1.0000E+00 1.8575E+02 1.9895E+02 1.2311E+02 8.2098E+01 - 1.1220E+00 1.3897E+02 1.4959E+02 9.2492E+01 6.1395E+01 - 1.2589E+00 1.0467E+02 1.1149E+02 6.9280E+01 4.5286E+01 - 1.4125E+00 7.8612E+01 8.3123E+01 5.1823E+01 3.3490E+01 - 1.5849E+00 5.8652E+01 6.1784E+01 3.8327E+01 2.5153E+01 - 1.7783E+00 4.3681E+01 4.5432E+01 2.8234E+01 1.8753E+01 - 1.9953E+00 3.2086E+01 3.3580E+01 2.0729E+01 1.3893E+01 - 2.2387E+00 2.3716E+01 2.4726E+01 1.5100E+01 1.0418E+01 - 2.5119E+00 1.7627E+01 1.8110E+01 1.1082E+01 7.7403E+00 - 2.8184E+00 1.2882E+01 1.3120E+01 8.0945E+00 5.5791E+00 - 3.1623E+00 9.6226E+00 9.6291E+00 5.8115E+00 3.9774E+00 - 3.5481E+00 7.0486E+00 6.9694E+00 4.2022E+00 2.8570E+00 - 3.9811E+00 5.1278E+00 5.0358E+00 3.0271E+00 2.0421E+00 - 4.4668E+00 3.7367E+00 3.6341E+00 2.1724E+00 1.4855E+00 - 5.0119E+00 2.7459E+00 2.6479E+00 1.5227E+00 1.0773E+00 - 5.6234E+00 1.9633E+00 1.9158E+00 1.0915E+00 7.7453E-01 - 6.3096E+00 1.4047E+00 1.3597E+00 7.8217E-01 5.5635E-01 - 7.0795E+00 1.0278E+00 9.6472E-01 5.4529E-01 3.8742E-01 - 7.9433E+00 7.4973E-01 6.8056E-01 3.7993E-01 2.7029E-01 - 8.9125E+00 5.4344E-01 4.8218E-01 2.5823E-01 1.9159E-01 - 1.0000E+01 3.8617E-01 3.5209E-01 1.8159E-01 1.3532E-01 - 1.1220E+01 2.7368E-01 2.4936E-01 1.2598E-01 9.2545E-02 - 1.2589E+01 1.9410E-01 1.7745E-01 8.7221E-02 6.3176E-02 - 1.4125E+01 1.3902E-01 1.2670E-01 5.8468E-02 4.3133E-02 - 1.5849E+01 1.0020E-01 8.8978E-02 3.9732E-02 3.0633E-02 - 1.7783E+01 7.1985E-02 6.2209E-02 2.7307E-02 2.1417E-02 - 1.9953E+01 5.1593E-02 4.4352E-02 1.8414E-02 1.4200E-02 - 2.2387E+01 3.7043E-02 3.1898E-02 1.2997E-02 9.6610E-03 - 2.5119E+01 2.6765E-02 2.3377E-02 8.9180E-03 6.8277E-03 - 2.8184E+01 1.8817E-02 1.6196E-02 5.6462E-03 4.6030E-03 - 3.1623E+01 1.3361E-02 1.1262E-02 4.0688E-03 3.0938E-03 - 3.5481E+01 9.5249E-03 7.9777E-03 2.7414E-03 2.0974E-03 - 3.9811E+01 6.7954E-03 5.6590E-03 1.8397E-03 1.4145E-03 - 4.4668E+01 4.8519E-03 4.0086E-03 1.2333E-03 9.5281E-04 - 5.0119E+01 3.4613E-03 2.8296E-03 8.2963E-04 6.3933E-04 - 5.6234E+01 2.4652E-03 1.9962E-03 5.5556E-04 4.2749E-04 - 6.3096E+01 1.7588E-03 1.4116E-03 3.6703E-04 2.8774E-04 - 7.0795E+01 1.2546E-03 9.9967E-04 2.4394E-04 1.9374E-04 - 7.9433E+01 8.9198E-04 7.0383E-04 1.6433E-04 1.2657E-04 - 8.9125E+01 6.3622E-04 4.9803E-04 1.1038E-04 8.3724E-05 - 1.0000E+02 4.5120E-04 3.4918E-04 7.2307E-05 5.6951E-05 - 1.1220E+02 3.2019E-04 2.4522E-04 4.7801E-05 3.7715E-05 - 1.2589E+02 2.2703E-04 1.7261E-04 3.1842E-05 2.5122E-05 - 1.4125E+02 1.6088E-04 1.2141E-04 2.1112E-05 1.6673E-05 - 1.5849E+02 1.1329E-04 8.5435E-05 1.3773E-05 1.1080E-05 - 1.7783E+02 8.0156E-05 5.9738E-05 9.0989E-06 7.4051E-06 - 1.9953E+02 5.7006E-05 4.1830E-05 6.0560E-06 4.8976E-06 - 2.2387E+02 3.9986E-05 2.9316E-05 4.0423E-06 3.2137E-06 - 2.5119E+02 2.8043E-05 2.0550E-05 2.6997E-06 2.1378E-06 - 2.8184E+02 1.9734E-05 1.4391E-05 1.8034E-06 1.4269E-06 - 3.1623E+02 1.3921E-05 9.9646E-06 1.1859E-06 9.4895E-07 - 3.5481E+02 9.7776E-06 6.9353E-06 7.7647E-07 6.3264E-07 - 3.9811E+02 6.8635E-06 4.8174E-06 5.1965E-07 4.1743E-07 - 4.4668E+02 4.8108E-06 3.3455E-06 3.4354E-07 2.7576E-07 - 5.0119E+02 3.3721E-06 2.3283E-06 2.2606E-07 1.8189E-07 - 5.6234E+02 2.3680E-06 1.6141E-06 1.5386E-07 1.2368E-07 - 6.3096E+02 1.6543E-06 1.1166E-06 1.0320E-07 8.2955E-08 - 7.0795E+02 1.1584E-06 7.7620E-07 6.9102E-08 5.5255E-08 - 7.9433E+02 8.0533E-07 5.3732E-07 4.7162E-08 3.6851E-08 - 8.9125E+02 5.5815E-07 3.7036E-07 3.1320E-08 2.4772E-08 - 1.0000E+03 3.8876E-07 2.5507E-07 2.0669E-08 1.6169E-08 - 1.1220E+03 2.7027E-07 1.7625E-07 1.3732E-08 1.0903E-08 - 1.2589E+03 1.8776E-07 1.2207E-07 9.1478E-09 7.4368E-09 - 1.4125E+03 1.3090E-07 8.4205E-08 6.0945E-09 4.8903E-09 - 1.5849E+03 9.1379E-08 5.7008E-08 4.1319E-09 3.1630E-09 - 1.7783E+03 6.3090E-08 3.8881E-08 2.7934E-09 2.1208E-09 - 1.9953E+03 4.3544E-08 2.7018E-08 1.8691E-09 1.4437E-09 - 2.2387E+03 2.9842E-08 1.8400E-08 1.2347E-09 9.5530E-10 - 2.5119E+03 2.0566E-08 1.2562E-08 8.2030E-10 6.3869E-10 - 2.8184E+03 1.4173E-08 8.5733E-09 5.3720E-10 4.3095E-10 - 3.1623E+03 9.8797E-09 5.9037E-09 3.7485E-10 2.8256E-10 - 3.5481E+03 6.7014E-09 3.9809E-09 2.5438E-10 1.8307E-10 - 3.9811E+03 4.5579E-09 2.6972E-09 1.7014E-10 1.2226E-10 - 4.4668E+03 3.0929E-09 1.8292E-09 1.0909E-10 8.2006E-11 - 5.0119E+03 2.1006E-09 1.2341E-09 7.0738E-11 5.6444E-11 - 5.6234E+03 1.4376E-09 8.3692E-10 4.6795E-11 3.8358E-11 - 6.3096E+03 9.7266E-10 5.6179E-10 3.2772E-11 2.3401E-11 - 7.0795E+03 6.5762E-10 3.7505E-10 2.1896E-11 1.6170E-11 - 7.9433E+03 4.4124E-10 2.5015E-10 1.4471E-11 1.0512E-11 - 8.9125E+03 2.9552E-10 1.6583E-10 9.5690E-12 6.9271E-12 - 1.0000E+04 1.9735E-10 1.0931E-10 6.2760E-12 4.7433E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5551E+04 2.6422E+04 1.2785E+04 1.1473E+04 - 1.1220E-01 2.1397E+04 2.2040E+04 1.0886E+04 9.7511E+03 - 1.2589E-01 1.7857E+04 1.8360E+04 9.1794E+03 8.1242E+03 - 1.4125E-01 1.4840E+04 1.5269E+04 7.6983E+03 6.6458E+03 - 1.5849E-01 1.2165E+04 1.2529E+04 6.4016E+03 5.4579E+03 - 1.7783E-01 9.9072E+03 1.0207E+04 5.2829E+03 4.4234E+03 - 1.9953E-01 7.9799E+03 8.2214E+03 4.3208E+03 3.5321E+03 - 2.2387E-01 6.3486E+03 6.5253E+03 3.4803E+03 2.8349E+03 - 2.5119E-01 4.9684E+03 5.1373E+03 2.8062E+03 2.2241E+03 - 2.8184E-01 3.8652E+03 4.0174E+03 2.2408E+03 1.7331E+03 - 3.1623E-01 2.9927E+03 3.1221E+03 1.7524E+03 1.3630E+03 - 3.5481E-01 2.3087E+03 2.4173E+03 1.3711E+03 1.0514E+03 - 3.9811E-01 1.7660E+03 1.8561E+03 1.0775E+03 8.0118E+02 - 4.4668E-01 1.3448E+03 1.4076E+03 8.2428E+02 6.1502E+02 - 5.0119E-01 1.0209E+03 1.0678E+03 6.2978E+02 4.7244E+02 - 5.6234E-01 7.7219E+02 8.0521E+02 4.8477E+02 3.5417E+02 - 6.3096E-01 5.8790E+02 6.0797E+02 3.7145E+02 2.6203E+02 - 7.0795E-01 4.3812E+02 4.6309E+02 2.8245E+02 1.9799E+02 - 7.9433E-01 3.2605E+02 3.4731E+02 2.1107E+02 1.5291E+02 - 8.9125E-01 2.4633E+02 2.6033E+02 1.5800E+02 1.1369E+02 - 1.0000E+00 1.8395E+02 1.9477E+02 1.1952E+02 8.2594E+01 - 1.1220E+00 1.3825E+02 1.4522E+02 8.9638E+01 6.1849E+01 - 1.2589E+00 1.0426E+02 1.0864E+02 6.8223E+01 4.6550E+01 - 1.4125E+00 7.8487E+01 8.1884E+01 5.0005E+01 3.5206E+01 - 1.5849E+00 5.9321E+01 6.0217E+01 3.6170E+01 2.6229E+01 - 1.7783E+00 4.3900E+01 4.4487E+01 2.7073E+01 1.9351E+01 - 1.9953E+00 3.2101E+01 3.2548E+01 1.9949E+01 1.4121E+01 - 2.2387E+00 2.3911E+01 2.3917E+01 1.4804E+01 1.0402E+01 - 2.5119E+00 1.7731E+01 1.7380E+01 1.0967E+01 7.6175E+00 - 2.8184E+00 1.2992E+01 1.2869E+01 7.6848E+00 5.5606E+00 - 3.1623E+00 9.5388E+00 9.5404E+00 5.6870E+00 4.0801E+00 - 3.5481E+00 6.9803E+00 6.8853E+00 4.1147E+00 2.8837E+00 - 3.9811E+00 5.1118E+00 4.9983E+00 2.9743E+00 2.0708E+00 - 4.4668E+00 3.7750E+00 3.6427E+00 2.1243E+00 1.4715E+00 - 5.0119E+00 2.7663E+00 2.5936E+00 1.4992E+00 1.0525E+00 - 5.6234E+00 1.9636E+00 1.8274E+00 1.0703E+00 7.5868E-01 - 6.3096E+00 1.3868E+00 1.3288E+00 7.6201E-01 5.2812E-01 - 7.0795E+00 1.0013E+00 9.6281E-01 5.2391E-01 3.6897E-01 - 7.9433E+00 7.2522E-01 6.8321E-01 3.6103E-01 2.6388E-01 - 8.9125E+00 5.2004E-01 4.8028E-01 2.5327E-01 1.8954E-01 - 1.0000E+01 3.8470E-01 3.5693E-01 1.8314E-01 1.3614E-01 - 1.1220E+01 2.7473E-01 2.5211E-01 1.2572E-01 9.6378E-02 - 1.2589E+01 1.9712E-01 1.7865E-01 8.4784E-02 6.6034E-02 - 1.4125E+01 1.4362E-01 1.2845E-01 5.8024E-02 4.4633E-02 - 1.5849E+01 1.0400E-01 9.0946E-02 4.0418E-02 3.1670E-02 - 1.7783E+01 7.3105E-02 6.4710E-02 2.8276E-02 2.1684E-02 - 1.9953E+01 5.2651E-02 4.6046E-02 1.9382E-02 1.5024E-02 - 2.2387E+01 3.7913E-02 3.1739E-02 1.3135E-02 1.0364E-02 - 2.5119E+01 2.7545E-02 2.2233E-02 9.1367E-03 6.6614E-03 - 2.8184E+01 2.0203E-02 1.6770E-02 6.0822E-03 4.5566E-03 - 3.1623E+01 1.3395E-02 1.1283E-02 4.0647E-03 3.0868E-03 - 3.5481E+01 9.5595E-03 7.9944E-03 2.7423E-03 2.0958E-03 - 3.9811E+01 6.8341E-03 5.6524E-03 1.8375E-03 1.4092E-03 - 4.4668E+01 4.8911E-03 3.9928E-03 1.2325E-03 9.4930E-04 - 5.0119E+01 3.4826E-03 2.8367E-03 8.3046E-04 6.3930E-04 - 5.6234E+01 2.4686E-03 2.0067E-03 5.5602E-04 4.3139E-04 - 6.3096E+01 1.7653E-03 1.4174E-03 3.7183E-04 2.8881E-04 - 7.0795E+01 1.2655E-03 1.0032E-03 2.4838E-04 1.9136E-04 - 7.9433E+01 8.9598E-04 7.0723E-04 1.6516E-04 1.2787E-04 - 8.9125E+01 6.3386E-04 5.0197E-04 1.0971E-04 8.6074E-05 - 1.0000E+02 4.5110E-04 3.4982E-04 7.2869E-05 5.6392E-05 - 1.1220E+02 3.1899E-04 2.4568E-04 4.8210E-05 3.7578E-05 - 1.2589E+02 2.2638E-04 1.7259E-04 3.1814E-05 2.5275E-05 - 1.4125E+02 1.6054E-04 1.2172E-04 2.0905E-05 1.6851E-05 - 1.5849E+02 1.1340E-04 8.5233E-05 1.3962E-05 1.1056E-05 - 1.7783E+02 8.0181E-05 5.9474E-05 9.2405E-06 7.3099E-06 - 1.9953E+02 5.6702E-05 4.1931E-05 6.0776E-06 4.8859E-06 - 2.2387E+02 3.9930E-05 2.9415E-05 4.0660E-06 3.2499E-06 - 2.5119E+02 2.8255E-05 2.0324E-05 2.7055E-06 2.1707E-06 - 2.8184E+02 1.9902E-05 1.4237E-05 1.7984E-06 1.4403E-06 - 3.1623E+02 1.3934E-05 9.9268E-06 1.1681E-06 9.5237E-07 - 3.5481E+02 9.7791E-06 6.9091E-06 7.8077E-07 6.3164E-07 - 3.9811E+02 6.8718E-06 4.8083E-06 5.1994E-07 4.1570E-07 - 4.4668E+02 4.8132E-06 3.3504E-06 3.4880E-07 2.7983E-07 - 5.0119E+02 3.3640E-06 2.3342E-06 2.2976E-07 1.8956E-07 - 5.6234E+02 2.3605E-06 1.6140E-06 1.5277E-07 1.2335E-07 - 6.3096E+02 1.6451E-06 1.1171E-06 1.0322E-07 8.2322E-08 - 7.0795E+02 1.1513E-06 7.7548E-07 6.9538E-08 5.5342E-08 - 7.9433E+02 8.0471E-07 5.3773E-07 4.6288E-08 3.6584E-08 - 8.9125E+02 5.5946E-07 3.7186E-07 3.0850E-08 2.4251E-08 - 1.0000E+03 3.9118E-07 2.5495E-07 2.0637E-08 1.6397E-08 - 1.1220E+03 2.7096E-07 1.7604E-07 1.3442E-08 1.0997E-08 - 1.2589E+03 1.8929E-07 1.2181E-07 9.1391E-09 7.2357E-09 - 1.4125E+03 1.3152E-07 8.4301E-08 6.1515E-09 4.8603E-09 - 1.5849E+03 9.0553E-08 5.7904E-08 4.0021E-09 3.2546E-09 - 1.7783E+03 6.3005E-08 3.9747E-08 2.7032E-09 2.2391E-09 - 1.9953E+03 4.3681E-08 2.7027E-08 1.9097E-09 1.4233E-09 - 2.2387E+03 3.0020E-08 1.8496E-08 1.2924E-09 9.2691E-10 - 2.5119E+03 2.0749E-08 1.2598E-08 8.4090E-10 6.4481E-10 - 2.8184E+03 1.4369E-08 8.6346E-09 5.4132E-10 4.3781E-10 - 3.1623E+03 9.8769E-09 5.9586E-09 3.7253E-10 2.8692E-10 - 3.5481E+03 6.6779E-09 4.0088E-09 2.5282E-10 1.9015E-10 - 3.9811E+03 4.5519E-09 2.7148E-09 1.7035E-10 1.2320E-10 - 4.4668E+03 3.1063E-09 1.8297E-09 1.1007E-10 8.0766E-11 - 5.0119E+03 2.1205E-09 1.2361E-09 7.3629E-11 5.5609E-11 - 5.6234E+03 1.4135E-09 8.3045E-10 4.7851E-11 3.6628E-11 - 6.3096E+03 9.6739E-10 5.6254E-10 3.2377E-11 2.4248E-11 - 7.0795E+03 6.5481E-10 3.8042E-10 2.1054E-11 1.5896E-11 - 7.9433E+03 4.4180E-10 2.5104E-10 1.4149E-11 1.0783E-11 - 8.9125E+03 2.9410E-10 1.6521E-10 9.7001E-12 6.5409E-12 - 1.0000E+04 1.9658E-10 1.0985E-10 6.4226E-12 4.2541E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2879E+04 4.4130E+04 2.1006E+04 1.9779E+04 - 1.1220E-01 3.5548E+04 3.6530E+04 1.7474E+04 1.6429E+04 - 1.2589E-01 2.9221E+04 2.9785E+04 1.4485E+04 1.3498E+04 - 1.4125E-01 2.3704E+04 2.4110E+04 1.1853E+04 1.0867E+04 - 1.5849E-01 1.9119E+04 1.9289E+04 9.5520E+03 8.6970E+03 - 1.7783E-01 1.5170E+04 1.5205E+04 7.6768E+03 6.9424E+03 - 1.9953E-01 1.1914E+04 1.1965E+04 6.2051E+03 5.4728E+03 - 2.2387E-01 9.2116E+03 9.3468E+03 4.9339E+03 4.3386E+03 - 2.5119E-01 7.1574E+03 7.1245E+03 3.8494E+03 3.3531E+03 - 2.8184E-01 5.4864E+03 5.3890E+03 3.0030E+03 2.5765E+03 - 3.1623E-01 4.0797E+03 4.1070E+03 2.3004E+03 1.9595E+03 - 3.5481E-01 3.0742E+03 3.0706E+03 1.7269E+03 1.4595E+03 - 3.9811E-01 2.3107E+03 2.2942E+03 1.3180E+03 1.0885E+03 - 4.4668E-01 1.6951E+03 1.7101E+03 1.0110E+03 8.0971E+02 - 5.0119E-01 1.2433E+03 1.2780E+03 7.6519E+02 6.2709E+02 - 5.6234E-01 9.2465E+02 9.3814E+02 5.6402E+02 4.6844E+02 - 6.3096E-01 6.9846E+02 6.8933E+02 4.2143E+02 3.2931E+02 - 7.0795E-01 5.1513E+02 5.0754E+02 3.1157E+02 2.4037E+02 - 7.9433E-01 3.8090E+02 3.8183E+02 2.2981E+02 1.7748E+02 - 8.9125E-01 2.8588E+02 2.8644E+02 1.7359E+02 1.3419E+02 - 1.0000E+00 2.0991E+02 2.1132E+02 1.2933E+02 9.8813E+01 - 1.1220E+00 1.5703E+02 1.5649E+02 9.6677E+01 7.2571E+01 - 1.2589E+00 1.1767E+02 1.1575E+02 7.0955E+01 5.3122E+01 - 1.4125E+00 8.5849E+01 8.5387E+01 5.3156E+01 3.8916E+01 - 1.5849E+00 6.3450E+01 6.3566E+01 3.9347E+01 2.9354E+01 - 1.7783E+00 4.6659E+01 4.7734E+01 2.8843E+01 2.2024E+01 - 1.9953E+00 3.3974E+01 3.4221E+01 2.1285E+01 1.5688E+01 - 2.2387E+00 2.5292E+01 2.5202E+01 1.5419E+01 1.1470E+01 - 2.5119E+00 1.8672E+01 1.9294E+01 1.1461E+01 8.6694E+00 - 2.8184E+00 1.4287E+01 1.3935E+01 8.7204E+00 6.3693E+00 - 3.1623E+00 1.0501E+01 1.0091E+01 6.4276E+00 4.6314E+00 - 3.5481E+00 7.4985E+00 7.4202E+00 4.6781E+00 3.3688E+00 - 3.9811E+00 5.5182E+00 5.4680E+00 3.4284E+00 2.4538E+00 - 4.4668E+00 4.0102E+00 3.9447E+00 2.5008E+00 1.7930E+00 - 5.0119E+00 2.9606E+00 2.8902E+00 1.7711E+00 1.2378E+00 - 5.6234E+00 2.1896E+00 2.1122E+00 1.2892E+00 8.8879E-01 - 6.3096E+00 1.5500E+00 1.5367E+00 9.4773E-01 6.6778E-01 - 7.0795E+00 1.1315E+00 1.0890E+00 6.8569E-01 4.8240E-01 - 7.9433E+00 8.0953E-01 7.8464E-01 4.8794E-01 3.3918E-01 - 8.9125E+00 5.8003E-01 5.9009E-01 3.4034E-01 2.5016E-01 - 1.0000E+01 4.1739E-01 4.0860E-01 2.3169E-01 1.7366E-01 - 1.1220E+01 3.0357E-01 2.9157E-01 1.6546E-01 1.2702E-01 - 1.2589E+01 2.1805E-01 2.0838E-01 1.1779E-01 8.9707E-02 - 1.4125E+01 1.5876E-01 1.5029E-01 8.0726E-02 6.0374E-02 - 1.5849E+01 1.1414E-01 1.0814E-01 5.7173E-02 4.2322E-02 - 1.7783E+01 8.2508E-02 7.6625E-02 4.2158E-02 2.8124E-02 - 1.9953E+01 6.0680E-02 5.4067E-02 2.8993E-02 2.1084E-02 - 2.2387E+01 4.3408E-02 3.8547E-02 2.0941E-02 1.5144E-02 - 2.5119E+01 3.0138E-02 2.7312E-02 1.5247E-02 1.0381E-02 - 2.8184E+01 2.1664E-02 1.8524E-02 9.2107E-03 7.1454E-03 - 3.1623E+01 1.5688E-02 1.4132E-02 6.6036E-03 5.0009E-03 - 3.5481E+01 1.1241E-02 1.0051E-02 4.5495E-03 3.4566E-03 - 3.9811E+01 8.0559E-03 7.1446E-03 3.1361E-03 2.3939E-03 - 4.4668E+01 5.7503E-03 5.0549E-03 2.1439E-03 1.6427E-03 - 5.0119E+01 4.1003E-03 3.5849E-03 1.4516E-03 1.1212E-03 - 5.6234E+01 2.9383E-03 2.5421E-03 9.8703E-04 7.6243E-04 - 6.3096E+01 2.0980E-03 1.7971E-03 6.7353E-04 5.1537E-04 - 7.0795E+01 1.4917E-03 1.2671E-03 4.5466E-04 3.4993E-04 - 7.9433E+01 1.0630E-03 8.9656E-04 3.0526E-04 2.3745E-04 - 8.9125E+01 7.5969E-04 6.3495E-04 2.0561E-04 1.6038E-04 - 1.0000E+02 5.3933E-04 4.4496E-04 1.3851E-04 1.0813E-04 - 1.1220E+02 3.8347E-04 3.1374E-04 9.2807E-05 7.1832E-05 - 1.2589E+02 2.7352E-04 2.2081E-04 6.1420E-05 4.7991E-05 - 1.4125E+02 1.9404E-04 1.5519E-04 4.0858E-05 3.2229E-05 - 1.5849E+02 1.3750E-04 1.0916E-04 2.7308E-05 2.1514E-05 - 1.7783E+02 9.7399E-05 7.6383E-05 1.8126E-05 1.4385E-05 - 1.9953E+02 6.8651E-05 5.3538E-05 1.2102E-05 9.4211E-06 - 2.2387E+02 4.8562E-05 3.7606E-05 7.9092E-06 6.1867E-06 - 2.5119E+02 3.4202E-05 2.6189E-05 5.1658E-06 4.0703E-06 - 2.8184E+02 2.4160E-05 1.8247E-05 3.4952E-06 2.7176E-06 - 3.1623E+02 1.7020E-05 1.2779E-05 2.2856E-06 1.8089E-06 - 3.5481E+02 1.1956E-05 8.9126E-06 1.4940E-06 1.1931E-06 - 3.9811E+02 8.4317E-06 6.1972E-06 9.8511E-07 7.7911E-07 - 4.4668E+02 5.9337E-06 4.3129E-06 6.5281E-07 5.0851E-07 - 5.0119E+02 4.1476E-06 2.9997E-06 4.2696E-07 3.3681E-07 - 5.6234E+02 2.9062E-06 2.0768E-06 2.7905E-07 2.2131E-07 - 6.3096E+02 2.0295E-06 1.4369E-06 1.8437E-07 1.4736E-07 - 7.0795E+02 1.4258E-06 9.9449E-07 1.2050E-07 9.6641E-08 - 7.9433E+02 9.9744E-07 6.8919E-07 7.8356E-08 6.2592E-08 - 8.9125E+02 6.9504E-07 4.7969E-07 5.1470E-08 4.1374E-08 - 1.0000E+03 4.8425E-07 3.2870E-07 3.4422E-08 2.7807E-08 - 1.1220E+03 3.3685E-07 2.2699E-07 2.3025E-08 1.8553E-08 - 1.2589E+03 2.3466E-07 1.5725E-07 1.5225E-08 1.2253E-08 - 1.4125E+03 1.6403E-07 1.0800E-07 9.9172E-09 7.8728E-09 - 1.5849E+03 1.1336E-07 7.4251E-08 6.4371E-09 5.1858E-09 - 1.7783E+03 7.9015E-08 5.1124E-08 4.3303E-09 3.5571E-09 - 1.9953E+03 5.5049E-08 3.5567E-08 2.9632E-09 2.2752E-09 - 2.2387E+03 3.8069E-08 2.4149E-08 1.9234E-09 1.4960E-09 - 2.5119E+03 2.6531E-08 1.6520E-08 1.2903E-09 1.0028E-09 - 2.8184E+03 1.8359E-08 1.1341E-08 8.4665E-10 6.5437E-10 - 3.1623E+03 1.2657E-08 7.8005E-09 5.6167E-10 4.2834E-10 - 3.5481E+03 8.6686E-09 5.3102E-09 3.7756E-10 2.8491E-10 - 3.9811E+03 5.9868E-09 3.6305E-09 2.5279E-10 1.8933E-10 - 4.4668E+03 4.1145E-09 2.4698E-09 1.7022E-10 1.2604E-10 - 5.0119E+03 2.8122E-09 1.6729E-09 1.1781E-10 8.3881E-11 - 5.6234E+03 1.9067E-09 1.1311E-09 7.5472E-11 5.5090E-11 - 6.3096E+03 1.3054E-09 7.6641E-10 5.0793E-11 3.7952E-11 - 7.0795E+03 8.8500E-10 5.1649E-10 3.3436E-11 2.5038E-11 - 7.9433E+03 6.0460E-10 3.5016E-10 2.1307E-11 1.6080E-11 - 8.9125E+03 4.1266E-10 2.3439E-10 1.4062E-11 1.0295E-11 - 1.0000E+04 2.7731E-10 1.5742E-10 9.3962E-12 6.7683E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2416E+04 4.2773E+04 1.9951E+04 1.9808E+04 - 1.1220E-01 3.5019E+04 3.5272E+04 1.6747E+04 1.6342E+04 - 1.2589E-01 2.8630E+04 2.8650E+04 1.3704E+04 1.3344E+04 - 1.4125E-01 2.3307E+04 2.3030E+04 1.1347E+04 1.0905E+04 - 1.5849E-01 1.8828E+04 1.8336E+04 9.2117E+03 8.7218E+03 - 1.7783E-01 1.4826E+04 1.4505E+04 7.2707E+03 6.9012E+03 - 1.9953E-01 1.1630E+04 1.1422E+04 5.7749E+03 5.4442E+03 - 2.2387E-01 9.0527E+03 8.7910E+03 4.5670E+03 4.2313E+03 - 2.5119E-01 6.9076E+03 6.7250E+03 3.5467E+03 3.2892E+03 - 2.8184E-01 5.2216E+03 5.0836E+03 2.7116E+03 2.5243E+03 - 3.1623E-01 3.9156E+03 3.7878E+03 2.0898E+03 1.9230E+03 - 3.5481E-01 2.9404E+03 2.8045E+03 1.6066E+03 1.4681E+03 - 3.9811E-01 2.1962E+03 2.0759E+03 1.1875E+03 1.1090E+03 - 4.4668E-01 1.6130E+03 1.5410E+03 8.7994E+02 8.3168E+02 - 5.0119E-01 1.1913E+03 1.1471E+03 6.5774E+02 6.0091E+02 - 5.6234E-01 9.0629E+02 8.3505E+02 4.7669E+02 4.2928E+02 - 6.3096E-01 6.8618E+02 6.0972E+02 3.5175E+02 3.2441E+02 - 7.0795E-01 5.0993E+02 4.6324E+02 2.7528E+02 2.4779E+02 - 7.9433E-01 3.7255E+02 3.3740E+02 2.0320E+02 1.7893E+02 - 8.9125E-01 2.6852E+02 2.4761E+02 1.4567E+02 1.3041E+02 - 1.0000E+00 2.0022E+02 1.8633E+02 1.1059E+02 1.0161E+02 - 1.1220E+00 1.4895E+02 1.3716E+02 8.0813E+01 7.1815E+01 - 1.2589E+00 1.1349E+02 1.0027E+02 5.9690E+01 5.3071E+01 - 1.4125E+00 8.4902E+01 7.3612E+01 4.5253E+01 4.0357E+01 - 1.5849E+00 6.3112E+01 5.5215E+01 3.3961E+01 2.9735E+01 - 1.7783E+00 4.7828E+01 4.1482E+01 2.4897E+01 2.2319E+01 - 1.9953E+00 3.5063E+01 3.0935E+01 1.7977E+01 1.6433E+01 - 2.2387E+00 2.5582E+01 2.3590E+01 1.3899E+01 1.1611E+01 - 2.5119E+00 1.8723E+01 1.7523E+01 1.0575E+01 8.6234E+00 - 2.8184E+00 1.3838E+01 1.2523E+01 7.4763E+00 6.4375E+00 - 3.1623E+00 1.0246E+01 9.3638E+00 5.6976E+00 4.8372E+00 - 3.5481E+00 7.6374E+00 6.8780E+00 4.2594E+00 3.5313E+00 - 3.9811E+00 5.6099E+00 5.1206E+00 3.1140E+00 2.6223E+00 - 4.4668E+00 4.0886E+00 3.7471E+00 2.3302E+00 1.9298E+00 - 5.0119E+00 3.0190E+00 2.6903E+00 1.6635E+00 1.3741E+00 - 5.6234E+00 2.1926E+00 1.9943E+00 1.1998E+00 9.6225E-01 - 6.3096E+00 1.6205E+00 1.4675E+00 8.9130E-01 6.6540E-01 - 7.0795E+00 1.1529E+00 1.0668E+00 6.4355E-01 4.7942E-01 - 7.9433E+00 8.1273E-01 7.5091E-01 4.5594E-01 3.4408E-01 - 8.9125E+00 5.9569E-01 5.5186E-01 3.0790E-01 2.5103E-01 - 1.0000E+01 4.3127E-01 4.0236E-01 2.2781E-01 1.7925E-01 - 1.1220E+01 3.0707E-01 2.8646E-01 1.6419E-01 1.2642E-01 - 1.2589E+01 2.2221E-01 2.0445E-01 1.1529E-01 8.7299E-02 - 1.4125E+01 1.5797E-01 1.5119E-01 8.0557E-02 6.0627E-02 - 1.5849E+01 1.1515E-01 1.0923E-01 5.7193E-02 4.2657E-02 - 1.7783E+01 8.5312E-02 7.5822E-02 4.1798E-02 3.0338E-02 - 1.9953E+01 6.0120E-02 5.2758E-02 2.7428E-02 2.1051E-02 - 2.2387E+01 4.2372E-02 3.9301E-02 1.8884E-02 1.5009E-02 - 2.5119E+01 3.0745E-02 2.8529E-02 1.3860E-02 1.0948E-02 - 2.8184E+01 2.2059E-02 1.9548E-02 9.3511E-03 7.3234E-03 - 3.1623E+01 1.5691E-02 1.4159E-02 6.6407E-03 5.0252E-03 - 3.5481E+01 1.1256E-02 1.0055E-02 4.5633E-03 3.4741E-03 - 3.9811E+01 8.0465E-03 7.1411E-03 3.1255E-03 2.3932E-03 - 4.4668E+01 5.7548E-03 5.0755E-03 2.1414E-03 1.6344E-03 - 5.0119E+01 4.1270E-03 3.6058E-03 1.4570E-03 1.1140E-03 - 5.6234E+01 2.9474E-03 2.5585E-03 9.9167E-04 7.6372E-04 - 6.3096E+01 2.1017E-03 1.8039E-03 6.7447E-04 5.2074E-04 - 7.0795E+01 1.4927E-03 1.2733E-03 4.5666E-04 3.5314E-04 - 7.9433E+01 1.0667E-03 8.9872E-04 3.0782E-04 2.3983E-04 - 8.9125E+01 7.6563E-04 6.3079E-04 2.0554E-04 1.6169E-04 - 1.0000E+02 5.3928E-04 4.4557E-04 1.3872E-04 1.0778E-04 - 1.1220E+02 3.8365E-04 3.1405E-04 9.2660E-05 7.2038E-05 - 1.2589E+02 2.7225E-04 2.2120E-04 6.1780E-05 4.8247E-05 - 1.4125E+02 1.9339E-04 1.5501E-04 4.1456E-05 3.2311E-05 - 1.5849E+02 1.3758E-04 1.0855E-04 2.7621E-05 2.1252E-05 - 1.7783E+02 9.7387E-05 7.6479E-05 1.8286E-05 1.4106E-05 - 1.9953E+02 6.8422E-05 5.3551E-05 1.1992E-05 9.4843E-06 - 2.2387E+02 4.8246E-05 3.7411E-05 7.8648E-06 6.2637E-06 - 2.5119E+02 3.4267E-05 2.6155E-05 5.1751E-06 4.1398E-06 - 2.8184E+02 2.4273E-05 1.8074E-05 3.4195E-06 2.7581E-06 - 3.1623E+02 1.7037E-05 1.2769E-05 2.2740E-06 1.7970E-06 - 3.5481E+02 1.1978E-05 8.8882E-06 1.4930E-06 1.1825E-06 - 3.9811E+02 8.4168E-06 6.1863E-06 9.9028E-07 7.8266E-07 - 4.4668E+02 5.9159E-06 4.3078E-06 6.4241E-07 5.1314E-07 - 5.0119E+02 4.1540E-06 2.9965E-06 4.1566E-07 3.4191E-07 - 5.6234E+02 2.9110E-06 2.0827E-06 2.8188E-07 2.2396E-07 - 6.3096E+02 2.0349E-06 1.4394E-06 1.8536E-07 1.4694E-07 - 7.0795E+02 1.4214E-06 9.9697E-07 1.2117E-07 9.6795E-08 - 7.9433E+02 9.9702E-07 6.9213E-07 7.9467E-08 6.3929E-08 - 8.9125E+02 6.9647E-07 4.8231E-07 5.2108E-08 4.2250E-08 - 1.0000E+03 4.8351E-07 3.3031E-07 3.4837E-08 2.7678E-08 - 1.1220E+03 3.3657E-07 2.2689E-07 2.2985E-08 1.8157E-08 - 1.2589E+03 2.3640E-07 1.5769E-07 1.5128E-08 1.2219E-08 - 1.4125E+03 1.6412E-07 1.0896E-07 9.9968E-09 8.0265E-09 - 1.5849E+03 1.1394E-07 7.4350E-08 6.6562E-09 5.2944E-09 - 1.7783E+03 7.9775E-08 5.1284E-08 4.4446E-09 3.5364E-09 - 1.9953E+03 5.4999E-08 3.5574E-08 2.9810E-09 2.3129E-09 - 2.2387E+03 3.8043E-08 2.4319E-08 2.0020E-09 1.5218E-09 - 2.5119E+03 2.6425E-08 1.6689E-08 1.2988E-09 1.0033E-09 - 2.8184E+03 1.8240E-08 1.1441E-08 8.4776E-10 6.6079E-10 - 3.1623E+03 1.2739E-08 7.8715E-09 5.7626E-10 4.4240E-10 - 3.5481E+03 8.7614E-09 5.3279E-09 3.7935E-10 2.8347E-10 - 3.9811E+03 6.0189E-09 3.6209E-09 2.5237E-10 1.8638E-10 - 4.4668E+03 4.1153E-09 2.4747E-09 1.6749E-10 1.2717E-10 - 5.0119E+03 2.8086E-09 1.6790E-09 1.1472E-10 8.4802E-11 - 5.6234E+03 1.9247E-09 1.1276E-09 7.6542E-11 5.4034E-11 - 6.3096E+03 1.3076E-09 7.6611E-10 4.9957E-11 3.7142E-11 - 7.0795E+03 8.9639E-10 5.1775E-10 3.3326E-11 2.4536E-11 - 7.9433E+03 6.0868E-10 3.5078E-10 2.0771E-11 1.6040E-11 - 8.9125E+03 4.1181E-10 2.3575E-10 1.3947E-11 1.0511E-11 - 1.0000E+04 2.7825E-10 1.5660E-10 9.6327E-12 6.6002E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2192E+04 4.1915E+04 1.9190E+04 1.9613E+04 - 1.1220E-01 3.4636E+04 3.4092E+04 1.6088E+04 1.6328E+04 - 1.2589E-01 2.8313E+04 2.7690E+04 1.3265E+04 1.3278E+04 - 1.4125E-01 2.3067E+04 2.2402E+04 1.0792E+04 1.0804E+04 - 1.5849E-01 1.8522E+04 1.7925E+04 8.5979E+03 8.7243E+03 - 1.7783E-01 1.4638E+04 1.4035E+04 6.8699E+03 6.8874E+03 - 1.9953E-01 1.1483E+04 1.0810E+04 5.4609E+03 5.4228E+03 - 2.2387E-01 8.9291E+03 8.3153E+03 4.2964E+03 4.2772E+03 - 2.5119E-01 6.8132E+03 6.3778E+03 3.3392E+03 3.3543E+03 - 2.8184E-01 5.1033E+03 4.7757E+03 2.5621E+03 2.5401E+03 - 3.1623E-01 3.8524E+03 3.5518E+03 1.9550E+03 1.9129E+03 - 3.5481E-01 2.9138E+03 2.6448E+03 1.4665E+03 1.4437E+03 - 3.9811E-01 2.1696E+03 1.9483E+03 1.1025E+03 1.0708E+03 - 4.4668E-01 1.6040E+03 1.4236E+03 8.0901E+02 8.0187E+02 - 5.0119E-01 1.1813E+03 1.0506E+03 5.9647E+02 6.0569E+02 - 5.6234E-01 8.6645E+02 7.6787E+02 4.3786E+02 4.6342E+02 - 6.3096E-01 6.4765E+02 5.5749E+02 3.1507E+02 3.4134E+02 - 7.0795E-01 4.7454E+02 4.1238E+02 2.2891E+02 2.4346E+02 - 7.9433E-01 3.5033E+02 2.9850E+02 1.6971E+02 1.8373E+02 - 8.9125E-01 2.6380E+02 2.1499E+02 1.2698E+02 1.3745E+02 - 1.0000E+00 1.9676E+02 1.6300E+02 9.4716E+01 9.8885E+01 - 1.1220E+00 1.4694E+02 1.2389E+02 7.0336E+01 7.3381E+01 - 1.2589E+00 1.0884E+02 9.1147E+01 5.1085E+01 5.5943E+01 - 1.4125E+00 8.0589E+01 6.5823E+01 3.8017E+01 4.2124E+01 - 1.5849E+00 5.9568E+01 4.9620E+01 2.8381E+01 3.0559E+01 - 1.7783E+00 4.4602E+01 3.7556E+01 2.0674E+01 2.2669E+01 - 1.9953E+00 3.4413E+01 2.7431E+01 1.5627E+01 1.7524E+01 - 2.2387E+00 2.5806E+01 2.0364E+01 1.1843E+01 1.2882E+01 - 2.5119E+00 1.8828E+01 1.5472E+01 8.5228E+00 9.2097E+00 - 2.8184E+00 1.4172E+01 1.1373E+01 6.2403E+00 6.6872E+00 - 3.1623E+00 1.0334E+01 8.3428E+00 4.9457E+00 4.8266E+00 - 3.5481E+00 7.6025E+00 6.2261E+00 3.5297E+00 3.5158E+00 - 3.9811E+00 5.5911E+00 4.5194E+00 2.5995E+00 2.6269E+00 - 4.4668E+00 4.0796E+00 3.3032E+00 1.9611E+00 1.9203E+00 - 5.0119E+00 2.9456E+00 2.5427E+00 1.4168E+00 1.3798E+00 - 5.6234E+00 2.1521E+00 1.8774E+00 9.9924E-01 1.0053E+00 - 6.3096E+00 1.5546E+00 1.3240E+00 7.6986E-01 7.1889E-01 - 7.0795E+00 1.1461E+00 9.5209E-01 5.6008E-01 4.9301E-01 - 7.9433E+00 8.1560E-01 6.9783E-01 4.1017E-01 3.2704E-01 - 8.9125E+00 5.8404E-01 5.1887E-01 3.1235E-01 2.3858E-01 - 1.0000E+01 4.1776E-01 3.7169E-01 2.1365E-01 1.7422E-01 - 1.1220E+01 2.9196E-01 2.7064E-01 1.4799E-01 1.2366E-01 - 1.2589E+01 2.0972E-01 1.9426E-01 1.0354E-01 8.7177E-02 - 1.4125E+01 1.5289E-01 1.4048E-01 7.5632E-02 6.0833E-02 - 1.5849E+01 1.0924E-01 1.0302E-01 5.3675E-02 3.9746E-02 - 1.7783E+01 7.9820E-02 7.2243E-02 3.6097E-02 2.7653E-02 - 1.9953E+01 5.6245E-02 4.9680E-02 2.4274E-02 2.1490E-02 - 2.2387E+01 3.7521E-02 3.5041E-02 1.8128E-02 1.4407E-02 - 2.5119E+01 2.7505E-02 2.5086E-02 1.2530E-02 9.4491E-03 - 2.8184E+01 2.1476E-02 1.8251E-02 8.3695E-03 6.1350E-03 - 3.1623E+01 1.5656E-02 1.4173E-02 6.6034E-03 5.0046E-03 - 3.5481E+01 1.1203E-02 1.0057E-02 4.5357E-03 3.4661E-03 - 3.9811E+01 8.0028E-03 7.1252E-03 3.1103E-03 2.3868E-03 - 4.4668E+01 5.7197E-03 5.0557E-03 2.1304E-03 1.6293E-03 - 5.0119E+01 4.0977E-03 3.5850E-03 1.4488E-03 1.1175E-03 - 5.6234E+01 2.9269E-03 2.5308E-03 9.8763E-04 7.6201E-04 - 6.3096E+01 2.0812E-03 1.7844E-03 6.7368E-04 5.1621E-04 - 7.0795E+01 1.4863E-03 1.2684E-03 4.5521E-04 3.4965E-04 - 7.9433E+01 1.0654E-03 8.9378E-04 3.0641E-04 2.3800E-04 - 8.9125E+01 7.5544E-04 6.3003E-04 2.0575E-04 1.6130E-04 - 1.0000E+02 5.3970E-04 4.4544E-04 1.3795E-04 1.0686E-04 - 1.1220E+02 3.8369E-04 3.1322E-04 9.2391E-05 7.1894E-05 - 1.2589E+02 2.7210E-04 2.2060E-04 6.1920E-05 4.8220E-05 - 1.4125E+02 1.9296E-04 1.5539E-04 4.1208E-05 3.2183E-05 - 1.5849E+02 1.3675E-04 1.0904E-04 2.7397E-05 2.1448E-05 - 1.7783E+02 9.6948E-05 7.6179E-05 1.8276E-05 1.4225E-05 - 1.9953E+02 6.8999E-05 5.3473E-05 1.2120E-05 9.3993E-06 - 2.2387E+02 4.8664E-05 3.7641E-05 7.9537E-06 6.2164E-06 - 2.5119E+02 3.4188E-05 2.6190E-05 5.2289E-06 4.1091E-06 - 2.8184E+02 2.4122E-05 1.8243E-05 3.4664E-06 2.7012E-06 - 3.1623E+02 1.6996E-05 1.2781E-05 2.2713E-06 1.7962E-06 - 3.5481E+02 1.1953E-05 8.9057E-06 1.4922E-06 1.1846E-06 - 3.9811E+02 8.4154E-06 6.1977E-06 9.7621E-07 7.8255E-07 - 4.4668E+02 5.9287E-06 4.3011E-06 6.4008E-07 5.1128E-07 - 5.0119E+02 4.1447E-06 2.9896E-06 4.2374E-07 3.3745E-07 - 5.6234E+02 2.9027E-06 2.0784E-06 2.8182E-07 2.2294E-07 - 6.3096E+02 2.0343E-06 1.4435E-06 1.8392E-07 1.4585E-07 - 7.0795E+02 1.4265E-06 1.0010E-06 1.1926E-07 9.5157E-08 - 7.9433E+02 9.9669E-07 6.8965E-07 7.9957E-08 6.3159E-08 - 8.9125E+02 6.9439E-07 4.7697E-07 5.3339E-08 4.1827E-08 - 1.0000E+03 4.8598E-07 3.3021E-07 3.4331E-08 2.7326E-08 - 1.1220E+03 3.3850E-07 2.2640E-07 2.2622E-08 1.8095E-08 - 1.2589E+03 2.3458E-07 1.5669E-07 1.5255E-08 1.2179E-08 - 1.4125E+03 1.6254E-07 1.0769E-07 1.0021E-08 8.0281E-09 - 1.5849E+03 1.1360E-07 7.4023E-08 6.5507E-09 5.2518E-09 - 1.7783E+03 7.9516E-08 5.1460E-08 4.3870E-09 3.4346E-09 - 1.9953E+03 5.5388E-08 3.5476E-08 2.9304E-09 2.2868E-09 - 2.2387E+03 3.8399E-08 2.4427E-08 1.9089E-09 1.5318E-09 - 2.5119E+03 2.6607E-08 1.6599E-08 1.2965E-09 1.0250E-09 - 2.8184E+03 1.8294E-08 1.1396E-08 8.8732E-10 6.7245E-10 - 3.1623E+03 1.2714E-08 7.8636E-09 5.6363E-10 4.4333E-10 - 3.5481E+03 8.7101E-09 5.3452E-09 3.7861E-10 2.9673E-10 - 3.9811E+03 5.9830E-09 3.6625E-09 2.5366E-10 1.9185E-10 - 4.4668E+03 4.1122E-09 2.4745E-09 1.6792E-10 1.2568E-10 - 5.0119E+03 2.8052E-09 1.6689E-09 1.1296E-10 8.2594E-11 - 5.6234E+03 1.9200E-09 1.1350E-09 7.2831E-11 5.4635E-11 - 6.3096E+03 1.3168E-09 7.6997E-10 4.8149E-11 3.7249E-11 - 7.0795E+03 8.9801E-10 5.2151E-10 3.1958E-11 2.4091E-11 - 7.9433E+03 6.0890E-10 3.4932E-10 2.1517E-11 1.5627E-11 - 8.9125E+03 4.1433E-10 2.3543E-10 1.3889E-11 1.0361E-11 - 1.0000E+04 2.7927E-10 1.5919E-10 9.2020E-12 6.6107E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2378E+04 4.1625E+04 1.9405E+04 1.9852E+04 - 1.1220E-01 3.4882E+04 3.4043E+04 1.5977E+04 1.6611E+04 - 1.2589E-01 2.8578E+04 2.7593E+04 1.3004E+04 1.3605E+04 - 1.4125E-01 2.3133E+04 2.2243E+04 1.0674E+04 1.0948E+04 - 1.5849E-01 1.8497E+04 1.7754E+04 8.6530E+03 8.7779E+03 - 1.7783E-01 1.4736E+04 1.3973E+04 6.8714E+03 6.9466E+03 - 1.9953E-01 1.1586E+04 1.0852E+04 5.4018E+03 5.5116E+03 - 2.2387E-01 9.0141E+03 8.3060E+03 4.2515E+03 4.3456E+03 - 2.5119E-01 6.8594E+03 6.3026E+03 3.3260E+03 3.3510E+03 - 2.8184E-01 5.1812E+03 4.7721E+03 2.5354E+03 2.5267E+03 - 3.1623E-01 3.9213E+03 3.5697E+03 1.9110E+03 1.9351E+03 - 3.5481E-01 2.9775E+03 2.6192E+03 1.4355E+03 1.4777E+03 - 3.9811E-01 2.2250E+03 1.9312E+03 1.0568E+03 1.1111E+03 - 4.4668E-01 1.6327E+03 1.4263E+03 7.8263E+02 8.3052E+02 - 5.0119E-01 1.2010E+03 1.0477E+03 5.7605E+02 6.1817E+02 - 5.6234E-01 8.9729E+02 7.7240E+02 4.3451E+02 4.6517E+02 - 6.3096E-01 6.6817E+02 5.5324E+02 3.2259E+02 3.4481E+02 - 7.0795E-01 4.8549E+02 4.0251E+02 2.2888E+02 2.4977E+02 - 7.9433E-01 3.6378E+02 3.0429E+02 1.7109E+02 1.7955E+02 - 8.9125E-01 2.7664E+02 2.2621E+02 1.3074E+02 1.3585E+02 - 1.0000E+00 2.0129E+02 1.6010E+02 9.2945E+01 1.0226E+02 - 1.1220E+00 1.4754E+02 1.1920E+02 6.7490E+01 7.6347E+01 - 1.2589E+00 1.1042E+02 8.7557E+01 4.9322E+01 5.6708E+01 - 1.4125E+00 8.3684E+01 6.5509E+01 3.7242E+01 4.2176E+01 - 1.5849E+00 6.2255E+01 4.9961E+01 2.7285E+01 3.0993E+01 - 1.7783E+00 4.5953E+01 3.5322E+01 1.9643E+01 2.2224E+01 - 1.9953E+00 3.4143E+01 2.6073E+01 1.4998E+01 1.7165E+01 - 2.2387E+00 2.5122E+01 2.0143E+01 1.1072E+01 1.3065E+01 - 2.5119E+00 1.9142E+01 1.4705E+01 8.2617E+00 9.5396E+00 - 2.8184E+00 1.4619E+01 1.1058E+01 6.2982E+00 6.8688E+00 - 3.1623E+00 1.0348E+01 8.1587E+00 4.7408E+00 5.1311E+00 - 3.5481E+00 7.6279E+00 6.0850E+00 3.4404E+00 3.7740E+00 - 3.9811E+00 5.5696E+00 4.5054E+00 2.5234E+00 2.6790E+00 - 4.4668E+00 3.9799E+00 3.3062E+00 1.8842E+00 1.9182E+00 - 5.0119E+00 2.9150E+00 2.4405E+00 1.3420E+00 1.4233E+00 - 5.6234E+00 2.1799E+00 1.8180E+00 9.7145E-01 1.0722E+00 - 6.3096E+00 1.6061E+00 1.3344E+00 7.5096E-01 7.5038E-01 - 7.0795E+00 1.0937E+00 9.8450E-01 5.6172E-01 5.0000E-01 - 7.9433E+00 8.0955E-01 7.1863E-01 4.0842E-01 3.7753E-01 - 8.9125E+00 5.9645E-01 5.0395E-01 3.0478E-01 2.5933E-01 - 1.0000E+01 4.2918E-01 3.7846E-01 2.0880E-01 1.7644E-01 - 1.1220E+01 3.1105E-01 2.6932E-01 1.5172E-01 1.2447E-01 - 1.2589E+01 2.2682E-01 1.9120E-01 1.0925E-01 8.9261E-02 - 1.4125E+01 1.6091E-01 1.4064E-01 7.8073E-02 6.4458E-02 - 1.5849E+01 1.1529E-01 1.0524E-01 5.5655E-02 4.3789E-02 - 1.7783E+01 8.4373E-02 7.5886E-02 3.9003E-02 2.9267E-02 - 1.9953E+01 5.9784E-02 5.5357E-02 2.7813E-02 1.9515E-02 - 2.2387E+01 4.2469E-02 3.9401E-02 1.9261E-02 1.4853E-02 - 2.5119E+01 2.9441E-02 2.7958E-02 1.2859E-02 1.0976E-02 - 2.8184E+01 2.1101E-02 1.9854E-02 9.1562E-03 7.3245E-03 - 3.1623E+01 1.5643E-02 1.4120E-02 6.6010E-03 4.9944E-03 - 3.5481E+01 1.1174E-02 1.0039E-02 4.5493E-03 3.4506E-03 - 3.9811E+01 7.9929E-03 7.1249E-03 3.1295E-03 2.3673E-03 - 4.4668E+01 5.7239E-03 5.0352E-03 2.1350E-03 1.6184E-03 - 5.0119E+01 4.1008E-03 3.5613E-03 1.4469E-03 1.1060E-03 - 5.6234E+01 2.9337E-03 2.5287E-03 9.8905E-04 7.5725E-04 - 6.3096E+01 2.0930E-03 1.7870E-03 6.7019E-04 5.2023E-04 - 7.0795E+01 1.4856E-03 1.2647E-03 4.5256E-04 3.5305E-04 - 7.9433E+01 1.0606E-03 8.9503E-04 3.0613E-04 2.3659E-04 - 8.9125E+01 7.5541E-04 6.3055E-04 2.0585E-04 1.5876E-04 - 1.0000E+02 5.4036E-04 4.4557E-04 1.3843E-04 1.0739E-04 - 1.1220E+02 3.8375E-04 3.1427E-04 9.2921E-05 7.1822E-05 - 1.2589E+02 2.7265E-04 2.2098E-04 6.1629E-05 4.7922E-05 - 1.4125E+02 1.9413E-04 1.5541E-04 4.0873E-05 3.2218E-05 - 1.5849E+02 1.3746E-04 1.0906E-04 2.7225E-05 2.1353E-05 - 1.7783E+02 9.7239E-05 7.5911E-05 1.8027E-05 1.4167E-05 - 1.9953E+02 6.8894E-05 5.3129E-05 1.1898E-05 9.4260E-06 - 2.2387E+02 4.8532E-05 3.7181E-05 7.9573E-06 6.2535E-06 - 2.5119E+02 3.4175E-05 2.6082E-05 5.2406E-06 4.1783E-06 - 2.8184E+02 2.4227E-05 1.8089E-05 3.4117E-06 2.7611E-06 - 3.1623E+02 1.7055E-05 1.2769E-05 2.2741E-06 1.7942E-06 - 3.5481E+02 1.2004E-05 8.8949E-06 1.4930E-06 1.1823E-06 - 3.9811E+02 8.4250E-06 6.1709E-06 9.8249E-07 7.8170E-07 - 4.4668E+02 5.9151E-06 4.2905E-06 6.4369E-07 5.1527E-07 - 5.0119E+02 4.1576E-06 2.9832E-06 4.2360E-07 3.3931E-07 - 5.6234E+02 2.9120E-06 2.0786E-06 2.8143E-07 2.2502E-07 - 6.3096E+02 2.0341E-06 1.4375E-06 1.8353E-07 1.4718E-07 - 7.0795E+02 1.4252E-06 9.9758E-07 1.2003E-07 9.7081E-08 - 7.9433E+02 9.9727E-07 6.9173E-07 7.8573E-08 6.4104E-08 - 8.9125E+02 6.9536E-07 4.7815E-07 5.2225E-08 4.2118E-08 - 1.0000E+03 4.8547E-07 3.2875E-07 3.5032E-08 2.7774E-08 - 1.1220E+03 3.3901E-07 2.2653E-07 2.3413E-08 1.7972E-08 - 1.2589E+03 2.3561E-07 1.5745E-07 1.5324E-08 1.1965E-08 - 1.4125E+03 1.6441E-07 1.0832E-07 9.9921E-09 8.0979E-09 - 1.5849E+03 1.1468E-07 7.4709E-08 6.4684E-09 5.3648E-09 - 1.7783E+03 7.9443E-08 5.1401E-08 4.4136E-09 3.4974E-09 - 1.9953E+03 5.4971E-08 3.5261E-08 2.9311E-09 2.2779E-09 - 2.2387E+03 3.8306E-08 2.4230E-08 1.8990E-09 1.4805E-09 - 2.5119E+03 2.6593E-08 1.6614E-08 1.2496E-09 9.6569E-10 - 2.8184E+03 1.8351E-08 1.1341E-08 8.4663E-10 6.6284E-10 - 3.1623E+03 1.2716E-08 7.8799E-09 5.7295E-10 4.4499E-10 - 3.5481E+03 8.7220E-09 5.3390E-09 3.8627E-10 2.9933E-10 - 3.9811E+03 6.0124E-09 3.6454E-09 2.5532E-10 1.9312E-10 - 4.4668E+03 4.1058E-09 2.4779E-09 1.6453E-10 1.2753E-10 - 5.0119E+03 2.7983E-09 1.6952E-09 1.1130E-10 8.5104E-11 - 5.6234E+03 1.9139E-09 1.1551E-09 7.3619E-11 5.4513E-11 - 6.3096E+03 1.3118E-09 7.7154E-10 4.8414E-11 3.6225E-11 - 7.0795E+03 8.9258E-10 5.2047E-10 3.2547E-11 2.4217E-11 - 7.9433E+03 6.0695E-10 3.5001E-10 2.0764E-11 1.5391E-11 - 8.9125E+03 4.1296E-10 2.3464E-10 1.3660E-11 1.0158E-11 - 1.0000E+04 2.7743E-10 1.5730E-10 9.5442E-12 6.5893E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2806E+04 4.2256E+04 1.9428E+04 1.9925E+04 - 1.1220E-01 3.5331E+04 3.4543E+04 1.6349E+04 1.6577E+04 - 1.2589E-01 2.9082E+04 2.7959E+04 1.3597E+04 1.3562E+04 - 1.4125E-01 2.3625E+04 2.2594E+04 1.0941E+04 1.0971E+04 - 1.5849E-01 1.8909E+04 1.8004E+04 8.7100E+03 8.8568E+03 - 1.7783E-01 1.4952E+04 1.4184E+04 7.0279E+03 7.0856E+03 - 1.9953E-01 1.1789E+04 1.1103E+04 5.5870E+03 5.6117E+03 - 2.2387E-01 9.1435E+03 8.5026E+03 4.3760E+03 4.4374E+03 - 2.5119E-01 7.0135E+03 6.4595E+03 3.4243E+03 3.4532E+03 - 2.8184E-01 5.3544E+03 4.9329E+03 2.6609E+03 2.6383E+03 - 3.1623E-01 4.0184E+03 3.7146E+03 2.0104E+03 2.0185E+03 - 3.5481E-01 3.0599E+03 2.7676E+03 1.4955E+03 1.5447E+03 - 3.9811E-01 2.2852E+03 2.0628E+03 1.1252E+03 1.1760E+03 - 4.4668E-01 1.6754E+03 1.5075E+03 8.3502E+02 8.7998E+02 - 5.0119E-01 1.2458E+03 1.0941E+03 6.2003E+02 6.6100E+02 - 5.6234E-01 9.1432E+02 8.1515E+02 4.7211E+02 4.8396E+02 - 6.3096E-01 6.7694E+02 6.0059E+02 3.4255E+02 3.5627E+02 - 7.0795E-01 5.0181E+02 4.2890E+02 2.5052E+02 2.6399E+02 - 7.9433E-01 3.7663E+02 3.1542E+02 1.8433E+02 1.8983E+02 - 8.9125E-01 2.8467E+02 2.3322E+02 1.3108E+02 1.4096E+02 - 1.0000E+00 2.0850E+02 1.7113E+02 9.8604E+01 1.0538E+02 - 1.1220E+00 1.5832E+02 1.2588E+02 7.3179E+01 7.8770E+01 - 1.2589E+00 1.1747E+02 9.0628E+01 5.3867E+01 5.8952E+01 - 1.4125E+00 8.4680E+01 6.7022E+01 3.9736E+01 4.2650E+01 - 1.5849E+00 6.2530E+01 5.0383E+01 2.9280E+01 3.2102E+01 - 1.7783E+00 4.7968E+01 3.7705E+01 2.1501E+01 2.4383E+01 - 1.9953E+00 3.6308E+01 2.7679E+01 1.5867E+01 1.7849E+01 - 2.2387E+00 2.6338E+01 2.0924E+01 1.1917E+01 1.3235E+01 - 2.5119E+00 1.9364E+01 1.5504E+01 8.6654E+00 9.9204E+00 - 2.8184E+00 1.4346E+01 1.1198E+01 6.2240E+00 7.1491E+00 - 3.1623E+00 1.0477E+01 8.4946E+00 4.8743E+00 5.2098E+00 - 3.5481E+00 7.6960E+00 6.2787E+00 3.6831E+00 3.7919E+00 - 3.9811E+00 5.6179E+00 4.5918E+00 2.6890E+00 2.6613E+00 - 4.4668E+00 4.1151E+00 3.3911E+00 1.9759E+00 1.8966E+00 - 5.0119E+00 3.0239E+00 2.5150E+00 1.4367E+00 1.3815E+00 - 5.6234E+00 2.2006E+00 1.8535E+00 1.0672E+00 1.0062E+00 - 6.3096E+00 1.6068E+00 1.3721E+00 7.9328E-01 7.3113E-01 - 7.0795E+00 1.1442E+00 1.0013E+00 5.7106E-01 5.0978E-01 - 7.9433E+00 8.1451E-01 7.1095E-01 3.9446E-01 3.4656E-01 - 8.9125E+00 5.8931E-01 5.1038E-01 2.8405E-01 2.4369E-01 - 1.0000E+01 4.2908E-01 3.8016E-01 2.0922E-01 1.7806E-01 - 1.1220E+01 3.0833E-01 2.7210E-01 1.5368E-01 1.2908E-01 - 1.2589E+01 2.2226E-01 1.9922E-01 1.1264E-01 9.0983E-02 - 1.4125E+01 1.6046E-01 1.4643E-01 7.9840E-02 6.1573E-02 - 1.5849E+01 1.1337E-01 1.0361E-01 5.5764E-02 4.1475E-02 - 1.7783E+01 8.0447E-02 7.3136E-02 3.9110E-02 2.8465E-02 - 1.9953E+01 5.9788E-02 5.3769E-02 2.6789E-02 2.1744E-02 - 2.2387E+01 4.4526E-02 3.9663E-02 1.8611E-02 1.5871E-02 - 2.5119E+01 3.2332E-02 2.7486E-02 1.3083E-02 1.0476E-02 - 2.8184E+01 2.3041E-02 1.9168E-02 9.0013E-03 7.2497E-03 - 3.1623E+01 1.5662E-02 1.4127E-02 6.5836E-03 4.9967E-03 - 3.5481E+01 1.1210E-02 1.0038E-02 4.5293E-03 3.4241E-03 - 3.9811E+01 8.0297E-03 7.1121E-03 3.1036E-03 2.3683E-03 - 4.4668E+01 5.7430E-03 5.0442E-03 2.1246E-03 1.6365E-03 - 5.0119E+01 4.1090E-03 3.5660E-03 1.4527E-03 1.1143E-03 - 5.6234E+01 2.9324E-03 2.5274E-03 9.8904E-04 7.5789E-04 - 6.3096E+01 2.0882E-03 1.8003E-03 6.6912E-04 5.1630E-04 - 7.0795E+01 1.4890E-03 1.2677E-03 4.4951E-04 3.5229E-04 - 7.9433E+01 1.0622E-03 8.8966E-04 3.0345E-04 2.3718E-04 - 8.9125E+01 7.5883E-04 6.2485E-04 2.0553E-04 1.6017E-04 - 1.0000E+02 5.4102E-04 4.4585E-04 1.3902E-04 1.0765E-04 - 1.1220E+02 3.8498E-04 3.1457E-04 9.2433E-05 7.1686E-05 - 1.2589E+02 2.7223E-04 2.2130E-04 6.1819E-05 4.8340E-05 - 1.4125E+02 1.9311E-04 1.5546E-04 4.1412E-05 3.2380E-05 - 1.5849E+02 1.3745E-04 1.0904E-04 2.7516E-05 2.1294E-05 - 1.7783E+02 9.7157E-05 7.6214E-05 1.8261E-05 1.4225E-05 - 1.9953E+02 6.8628E-05 5.3252E-05 1.2000E-05 9.4747E-06 - 2.2387E+02 4.8662E-05 3.7260E-05 7.8986E-06 6.1975E-06 - 2.5119E+02 3.4362E-05 2.6051E-05 5.1851E-06 4.0283E-06 - 2.8184E+02 2.4122E-05 1.8245E-05 3.4362E-06 2.6916E-06 - 3.1623E+02 1.7015E-05 1.2766E-05 2.2651E-06 1.7963E-06 - 3.5481E+02 1.1979E-05 8.8998E-06 1.4919E-06 1.1820E-06 - 3.9811E+02 8.4096E-06 6.1872E-06 9.8021E-07 7.7842E-07 - 4.4668E+02 5.8985E-06 4.3064E-06 6.4329E-07 5.1206E-07 - 5.0119E+02 4.1450E-06 2.9939E-06 4.2252E-07 3.3303E-07 - 5.6234E+02 2.9061E-06 2.0821E-06 2.7874E-07 2.1938E-07 - 6.3096E+02 2.0324E-06 1.4376E-06 1.8157E-07 1.4469E-07 - 7.0795E+02 1.4229E-06 9.9256E-07 1.1887E-07 9.5615E-08 - 7.9433E+02 9.9473E-07 6.8712E-07 7.9246E-08 6.3063E-08 - 8.9125E+02 6.9283E-07 4.7638E-07 5.2526E-08 4.0955E-08 - 1.0000E+03 4.8293E-07 3.3013E-07 3.4450E-08 2.6643E-08 - 1.1220E+03 3.3703E-07 2.2712E-07 2.3029E-08 1.7919E-08 - 1.2589E+03 2.3544E-07 1.5580E-07 1.5205E-08 1.1826E-08 - 1.4125E+03 1.6372E-07 1.0791E-07 9.8098E-09 7.7584E-09 - 1.5849E+03 1.1382E-07 7.4733E-08 6.5411E-09 5.2354E-09 - 1.7783E+03 7.8906E-08 5.1371E-08 4.4642E-09 3.4355E-09 - 1.9953E+03 5.5062E-08 3.5534E-08 2.9896E-09 2.3043E-09 - 2.2387E+03 3.7979E-08 2.4271E-08 1.9613E-09 1.5032E-09 - 2.5119E+03 2.6239E-08 1.6482E-08 1.2966E-09 9.5272E-10 - 2.8184E+03 1.8186E-08 1.1218E-08 8.7254E-10 6.4707E-10 - 3.1623E+03 1.2622E-08 7.8200E-09 5.7764E-10 4.4436E-10 - 3.5481E+03 8.6576E-09 5.3379E-09 3.7503E-10 2.9642E-10 - 3.9811E+03 5.9506E-09 3.6249E-09 2.5283E-10 1.9564E-10 - 4.4668E+03 4.0662E-09 2.4635E-09 1.6819E-10 1.2513E-10 - 5.0119E+03 2.7829E-09 1.6656E-09 1.0863E-10 8.1865E-11 - 5.6234E+03 1.9063E-09 1.1305E-09 7.1989E-11 5.6326E-11 - 6.3096E+03 1.3150E-09 7.6357E-10 5.0519E-11 3.7399E-11 - 7.0795E+03 8.9139E-10 5.1854E-10 3.2963E-11 2.4360E-11 - 7.9433E+03 6.0286E-10 3.4984E-10 2.1400E-11 1.6121E-11 - 8.9125E+03 4.1030E-10 2.3385E-10 1.4510E-11 1.0591E-11 - 1.0000E+04 2.7890E-10 1.5654E-10 9.4893E-12 6.5197E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3299E+04 4.2957E+04 1.9930E+04 1.9905E+04 - 1.1220E-01 3.5634E+04 3.5216E+04 1.6806E+04 1.6670E+04 - 1.2589E-01 2.9295E+04 2.8584E+04 1.4109E+04 1.3894E+04 - 1.4125E-01 2.3903E+04 2.3175E+04 1.1471E+04 1.1341E+04 - 1.5849E-01 1.9335E+04 1.8563E+04 9.1772E+03 9.1123E+03 - 1.7783E-01 1.5410E+04 1.4704E+04 7.3993E+03 7.1720E+03 - 1.9953E-01 1.2071E+04 1.1563E+04 5.8801E+03 5.6260E+03 - 2.2387E-01 9.2758E+03 8.9841E+03 4.6387E+03 4.3920E+03 - 2.5119E-01 7.1652E+03 6.9259E+03 3.6301E+03 3.4132E+03 - 2.8184E-01 5.5163E+03 5.2284E+03 2.8047E+03 2.6608E+03 - 3.1623E-01 4.1359E+03 3.9012E+03 2.1210E+03 2.0323E+03 - 3.5481E-01 3.1424E+03 2.9161E+03 1.6087E+03 1.5342E+03 - 3.9811E-01 2.3710E+03 2.1608E+03 1.2326E+03 1.1693E+03 - 4.4668E-01 1.7496E+03 1.5747E+03 9.3460E+02 8.8281E+02 - 5.0119E-01 1.3004E+03 1.1615E+03 6.8941E+02 6.4562E+02 - 5.6234E-01 9.4214E+02 8.7338E+02 5.0125E+02 4.8171E+02 - 6.3096E-01 6.9595E+02 6.4250E+02 3.7279E+02 3.6772E+02 - 7.0795E-01 5.2951E+02 4.6879E+02 2.6753E+02 2.6786E+02 - 7.9433E-01 3.9338E+02 3.4426E+02 2.0522E+02 1.9354E+02 - 8.9125E-01 2.9026E+02 2.5606E+02 1.5269E+02 1.4116E+02 - 1.0000E+00 2.1623E+02 1.8700E+02 1.0901E+02 1.0835E+02 - 1.1220E+00 1.6168E+02 1.3633E+02 8.1746E+01 7.9872E+01 - 1.2589E+00 1.2133E+02 1.0163E+02 6.2212E+01 5.9268E+01 - 1.4125E+00 9.0372E+01 7.6673E+01 4.4464E+01 4.5311E+01 - 1.5849E+00 6.7516E+01 5.6109E+01 3.1481E+01 3.3332E+01 - 1.7783E+00 4.9816E+01 4.1224E+01 2.4223E+01 2.4349E+01 - 1.9953E+00 3.6848E+01 3.0074E+01 1.7853E+01 1.7689E+01 - 2.2387E+00 2.7095E+01 2.2758E+01 1.3200E+01 1.2990E+01 - 2.5119E+00 1.9771E+01 1.7342E+01 9.5484E+00 9.8145E+00 - 2.8184E+00 1.4966E+01 1.2455E+01 7.1294E+00 6.9991E+00 - 3.1623E+00 1.0695E+01 8.8668E+00 5.4831E+00 4.9916E+00 - 3.5481E+00 7.8348E+00 6.5629E+00 3.9760E+00 3.6046E+00 - 3.9811E+00 5.6461E+00 4.8426E+00 2.8752E+00 2.6182E+00 - 4.4668E+00 4.1131E+00 3.5793E+00 2.1371E+00 1.9350E+00 - 5.0119E+00 3.0111E+00 2.6653E+00 1.5771E+00 1.3992E+00 - 5.6234E+00 2.1815E+00 1.9397E+00 1.1605E+00 1.0021E+00 - 6.3096E+00 1.5909E+00 1.4138E+00 8.6176E-01 6.8384E-01 - 7.0795E+00 1.1573E+00 1.0170E+00 6.1084E-01 4.6513E-01 - 7.9433E+00 8.3401E-01 7.5609E-01 4.5594E-01 3.4106E-01 - 8.9125E+00 5.7930E-01 5.5485E-01 3.1926E-01 2.5028E-01 - 1.0000E+01 4.1728E-01 3.9666E-01 2.1435E-01 1.7741E-01 - 1.1220E+01 3.0268E-01 2.8529E-01 1.5996E-01 1.2339E-01 - 1.2589E+01 2.1938E-01 2.0067E-01 1.1478E-01 8.5026E-02 - 1.4125E+01 1.5769E-01 1.4426E-01 7.6191E-02 5.7477E-02 - 1.5849E+01 1.1302E-01 1.0505E-01 5.2856E-02 4.1551E-02 - 1.7783E+01 8.1679E-02 7.4256E-02 3.9596E-02 2.9731E-02 - 1.9953E+01 5.8083E-02 5.2215E-02 2.7490E-02 2.1290E-02 - 2.2387E+01 4.0665E-02 3.7977E-02 1.9657E-02 1.5760E-02 - 2.5119E+01 3.0814E-02 2.7822E-02 1.4011E-02 1.1092E-02 - 2.8184E+01 2.2781E-02 1.9483E-02 9.0781E-03 7.1989E-03 - 3.1623E+01 1.5680E-02 1.4139E-02 6.6024E-03 4.9979E-03 - 3.5481E+01 1.1251E-02 1.0052E-02 4.5454E-03 3.4402E-03 - 3.9811E+01 8.0298E-03 7.1413E-03 3.1187E-03 2.3728E-03 - 4.4668E+01 5.7415E-03 5.0646E-03 2.1345E-03 1.6307E-03 - 5.0119E+01 4.1077E-03 3.5897E-03 1.4570E-03 1.1159E-03 - 5.6234E+01 2.9300E-03 2.5388E-03 9.9126E-04 7.6223E-04 - 6.3096E+01 2.0887E-03 1.7903E-03 6.7114E-04 5.1983E-04 - 7.0795E+01 1.4830E-03 1.2631E-03 4.5429E-04 3.5099E-04 - 7.9433E+01 1.0582E-03 8.9298E-04 3.0527E-04 2.3425E-04 - 8.9125E+01 7.5397E-04 6.3169E-04 2.0455E-04 1.5817E-04 - 1.0000E+02 5.3896E-04 4.4607E-04 1.3807E-04 1.0726E-04 - 1.1220E+02 3.8330E-04 3.1377E-04 9.2201E-05 7.1466E-05 - 1.2589E+02 2.7255E-04 2.2072E-04 6.1909E-05 4.8025E-05 - 1.4125E+02 1.9354E-04 1.5529E-04 4.1322E-05 3.2257E-05 - 1.5849E+02 1.3742E-04 1.0896E-04 2.7401E-05 2.1454E-05 - 1.7783E+02 9.7221E-05 7.6363E-05 1.8082E-05 1.4190E-05 - 1.9953E+02 6.8420E-05 5.3482E-05 1.2107E-05 9.4159E-06 - 2.2387E+02 4.8447E-05 3.7417E-05 8.0448E-06 6.2411E-06 - 2.5119E+02 3.4332E-05 2.6230E-05 5.2436E-06 4.0610E-06 - 2.8184E+02 2.4175E-05 1.8351E-05 3.4418E-06 2.7024E-06 - 3.1623E+02 1.6976E-05 1.2740E-05 2.2721E-06 1.8144E-06 - 3.5481E+02 1.1966E-05 8.8746E-06 1.4927E-06 1.1889E-06 - 3.9811E+02 8.4007E-06 6.1644E-06 9.8507E-07 7.7494E-07 - 4.4668E+02 5.8925E-06 4.2901E-06 6.4591E-07 5.1063E-07 - 5.0119E+02 4.1219E-06 2.9823E-06 4.2720E-07 3.3596E-07 - 5.6234E+02 2.8942E-06 2.0653E-06 2.7800E-07 2.1847E-07 - 6.3096E+02 2.0258E-06 1.4336E-06 1.8347E-07 1.4463E-07 - 7.0795E+02 1.4171E-06 9.9508E-07 1.2191E-07 9.6638E-08 - 7.9433E+02 9.8928E-07 6.8961E-07 7.9493E-08 6.3234E-08 - 8.9125E+02 6.8946E-07 4.7602E-07 5.2035E-08 4.1400E-08 - 1.0000E+03 4.8346E-07 3.3058E-07 3.4398E-08 2.8022E-08 - 1.1220E+03 3.3867E-07 2.2874E-07 2.2852E-08 1.8072E-08 - 1.2589E+03 2.3542E-07 1.5769E-07 1.5007E-08 1.1806E-08 - 1.4125E+03 1.6381E-07 1.0879E-07 9.8595E-09 7.9548E-09 - 1.5849E+03 1.1342E-07 7.4647E-08 6.6155E-09 5.3162E-09 - 1.7783E+03 7.8368E-08 5.1375E-08 4.4491E-09 3.5067E-09 - 1.9953E+03 5.4788E-08 3.5203E-08 2.9833E-09 2.3140E-09 - 2.2387E+03 3.7983E-08 2.4280E-08 1.9283E-09 1.4722E-09 - 2.5119E+03 2.6456E-08 1.6728E-08 1.2590E-09 9.8380E-10 - 2.8184E+03 1.8334E-08 1.1390E-08 8.4163E-10 6.7152E-10 - 3.1623E+03 1.2697E-08 7.8414E-09 5.7342E-10 4.3710E-10 - 3.5481E+03 8.7134E-09 5.3213E-09 3.7619E-10 2.8983E-10 - 3.9811E+03 5.9794E-09 3.6064E-09 2.4550E-10 1.9814E-10 - 4.4668E+03 4.0918E-09 2.4541E-09 1.6509E-10 1.2486E-10 - 5.0119E+03 2.8070E-09 1.6594E-09 1.1167E-10 7.9623E-11 - 5.6234E+03 1.9086E-09 1.1194E-09 7.3079E-11 5.5496E-11 - 6.3096E+03 1.3132E-09 7.6617E-10 4.8684E-11 3.4957E-11 - 7.0795E+03 8.9596E-10 5.1736E-10 3.2128E-11 2.3403E-11 - 7.9433E+03 6.0555E-10 3.5109E-10 2.1310E-11 1.5984E-11 - 8.9125E+03 4.0927E-10 2.3414E-10 1.4366E-11 1.0325E-11 - 1.0000E+04 2.7610E-10 1.5578E-10 9.3365E-12 6.6076E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3800E+04 4.4154E+04 2.0555E+04 2.0185E+04 - 1.1220E-01 3.6119E+04 3.6392E+04 1.7378E+04 1.6824E+04 - 1.2589E-01 2.9514E+04 2.9706E+04 1.4546E+04 1.3789E+04 - 1.4125E-01 2.4113E+04 2.3959E+04 1.1997E+04 1.1155E+04 - 1.5849E-01 1.9608E+04 1.9136E+04 9.6947E+03 8.9367E+03 - 1.7783E-01 1.5623E+04 1.5281E+04 7.7964E+03 7.1783E+03 - 1.9953E-01 1.2291E+04 1.1996E+04 6.2515E+03 5.6866E+03 - 2.2387E-01 9.4933E+03 9.2712E+03 4.9284E+03 4.4535E+03 - 2.5119E-01 7.2643E+03 7.1705E+03 3.8676E+03 3.4509E+03 - 2.8184E-01 5.6118E+03 5.4873E+03 3.0363E+03 2.7096E+03 - 3.1623E-01 4.2985E+03 4.1561E+03 2.3381E+03 2.0674E+03 - 3.5481E-01 3.1721E+03 3.0907E+03 1.7738E+03 1.5430E+03 - 3.9811E-01 2.3764E+03 2.3055E+03 1.3389E+03 1.1782E+03 - 4.4668E-01 1.8160E+03 1.7499E+03 1.0019E+03 8.7111E+02 - 5.0119E-01 1.3292E+03 1.3173E+03 7.6316E+02 6.4061E+02 - 5.6234E-01 9.6967E+02 9.4866E+02 5.5802E+02 4.8082E+02 - 6.3096E-01 7.3861E+02 6.7665E+02 4.2059E+02 3.5377E+02 - 7.0795E-01 5.3060E+02 5.0835E+02 3.2296E+02 2.6617E+02 - 7.9433E-01 3.8435E+02 3.8427E+02 2.3580E+02 2.0011E+02 - 8.9125E-01 2.9169E+02 2.8442E+02 1.7340E+02 1.4088E+02 - 1.0000E+00 2.1537E+02 2.0767E+02 1.2391E+02 1.0479E+02 - 1.1220E+00 1.6041E+02 1.5253E+02 9.0317E+01 7.8687E+01 - 1.2589E+00 1.1932E+02 1.1250E+02 6.7482E+01 5.8960E+01 - 1.4125E+00 8.8722E+01 8.3228E+01 4.9347E+01 4.3587E+01 - 1.5849E+00 6.5749E+01 6.0357E+01 3.6235E+01 3.1235E+01 - 1.7783E+00 4.8871E+01 4.4740E+01 2.6876E+01 2.2409E+01 - 1.9953E+00 3.4992E+01 3.3395E+01 1.9397E+01 1.7018E+01 - 2.2387E+00 2.5572E+01 2.4975E+01 1.4729E+01 1.2764E+01 - 2.5119E+00 1.9422E+01 1.9177E+01 1.0868E+01 9.4446E+00 - 2.8184E+00 1.4405E+01 1.3563E+01 7.6793E+00 6.8137E+00 - 3.1623E+00 1.0357E+01 9.6537E+00 5.9938E+00 4.9025E+00 - 3.5481E+00 7.7135E+00 7.1350E+00 4.4364E+00 3.4223E+00 - 3.9811E+00 5.6976E+00 5.2125E+00 3.2031E+00 2.4921E+00 - 4.4668E+00 4.1331E+00 3.7123E+00 2.2960E+00 1.8390E+00 - 5.0119E+00 2.9350E+00 2.6546E+00 1.6483E+00 1.3155E+00 - 5.6234E+00 2.0993E+00 1.9398E+00 1.1972E+00 9.3100E-01 - 6.3096E+00 1.5060E+00 1.4316E+00 8.7107E-01 6.7101E-01 - 7.0795E+00 1.0845E+00 1.0692E+00 6.2218E-01 5.0631E-01 - 7.9433E+00 7.8774E-01 7.5579E-01 4.5427E-01 3.6284E-01 - 8.9125E+00 5.9405E-01 5.2111E-01 3.1555E-01 2.4372E-01 - 1.0000E+01 4.2626E-01 3.9639E-01 2.2894E-01 1.7619E-01 - 1.1220E+01 3.0376E-01 2.8527E-01 1.6382E-01 1.2287E-01 - 1.2589E+01 2.1801E-01 2.0382E-01 1.1249E-01 8.8161E-02 - 1.4125E+01 1.5654E-01 1.4531E-01 7.8895E-02 6.2403E-02 - 1.5849E+01 1.1337E-01 1.0447E-01 5.6951E-02 4.4060E-02 - 1.7783E+01 8.3068E-02 7.4851E-02 3.9703E-02 3.1160E-02 - 1.9953E+01 5.8807E-02 5.4006E-02 2.6200E-02 2.1754E-02 - 2.2387E+01 4.3568E-02 3.7287E-02 1.8112E-02 1.4801E-02 - 2.5119E+01 3.0765E-02 2.7337E-02 1.2976E-02 9.7509E-03 - 2.8184E+01 2.1712E-02 1.9712E-02 9.4441E-03 7.2027E-03 - 3.1623E+01 1.5640E-02 1.4114E-02 6.6002E-03 5.0186E-03 - 3.5481E+01 1.1179E-02 1.0015E-02 4.5331E-03 3.4604E-03 - 3.9811E+01 8.0236E-03 7.1211E-03 3.1078E-03 2.3802E-03 - 4.4668E+01 5.7372E-03 5.0406E-03 2.1234E-03 1.6415E-03 - 5.0119E+01 4.1022E-03 3.5751E-03 1.4540E-03 1.1190E-03 - 5.6234E+01 2.9266E-03 2.5380E-03 9.9380E-04 7.5853E-04 - 6.3096E+01 2.0827E-03 1.7970E-03 6.7575E-04 5.1736E-04 - 7.0795E+01 1.4895E-03 1.2709E-03 4.5593E-04 3.5232E-04 - 7.9433E+01 1.0631E-03 8.9344E-04 3.0322E-04 2.3787E-04 - 8.9125E+01 7.5504E-04 6.3290E-04 2.0466E-04 1.5989E-04 - 1.0000E+02 5.3921E-04 4.4583E-04 1.3819E-04 1.0690E-04 - 1.1220E+02 3.8445E-04 3.1451E-04 9.2437E-05 7.1674E-05 - 1.2589E+02 2.7295E-04 2.2127E-04 6.1748E-05 4.8126E-05 - 1.4125E+02 1.9382E-04 1.5527E-04 4.1063E-05 3.2060E-05 - 1.5849E+02 1.3700E-04 1.0915E-04 2.7278E-05 2.1240E-05 - 1.7783E+02 9.6812E-05 7.6573E-05 1.8099E-05 1.4089E-05 - 1.9953E+02 6.8572E-05 5.3670E-05 1.1946E-05 9.4639E-06 - 2.2387E+02 4.8568E-05 3.7491E-05 7.9096E-06 6.2578E-06 - 2.5119E+02 3.4198E-05 2.6101E-05 5.2255E-06 4.1089E-06 - 2.8184E+02 2.4060E-05 1.8206E-05 3.4370E-06 2.7335E-06 - 3.1623E+02 1.7021E-05 1.2737E-05 2.2684E-06 1.7975E-06 - 3.5481E+02 1.1945E-05 8.8971E-06 1.4901E-06 1.1804E-06 - 3.9811E+02 8.3718E-06 6.1809E-06 9.6803E-07 7.7595E-07 - 4.4668E+02 5.8998E-06 4.2957E-06 6.4389E-07 5.1217E-07 - 5.0119E+02 4.1526E-06 2.9811E-06 4.2468E-07 3.3567E-07 - 5.6234E+02 2.8982E-06 2.0731E-06 2.8047E-07 2.2009E-07 - 6.3096E+02 2.0295E-06 1.4391E-06 1.8489E-07 1.4463E-07 - 7.0795E+02 1.4165E-06 9.9687E-07 1.2164E-07 9.5436E-08 - 7.9433E+02 9.9033E-07 6.8951E-07 7.9698E-08 6.3102E-08 - 8.9125E+02 6.9270E-07 4.7769E-07 5.2622E-08 4.2011E-08 - 1.0000E+03 4.8235E-07 3.2912E-07 3.4630E-08 2.7300E-08 - 1.1220E+03 3.3671E-07 2.2816E-07 2.3112E-08 1.7951E-08 - 1.2589E+03 2.3502E-07 1.5712E-07 1.5084E-08 1.1925E-08 - 1.4125E+03 1.6308E-07 1.0827E-07 9.9643E-09 7.9589E-09 - 1.5849E+03 1.1352E-07 7.4714E-08 6.6988E-09 5.3354E-09 - 1.7783E+03 7.9268E-08 5.1133E-08 4.4780E-09 3.5363E-09 - 1.9953E+03 5.4974E-08 3.5205E-08 2.8793E-09 2.3260E-09 - 2.2387E+03 3.8068E-08 2.4178E-08 1.9053E-09 1.5085E-09 - 2.5119E+03 2.6300E-08 1.6590E-08 1.2933E-09 1.0079E-09 - 2.8184E+03 1.8090E-08 1.1350E-08 8.7355E-10 6.6845E-10 - 3.1623E+03 1.2713E-08 7.8236E-09 5.7257E-10 4.3896E-10 - 3.5481E+03 8.6813E-09 5.3091E-09 3.7722E-10 2.9346E-10 - 3.9811E+03 5.9891E-09 3.6216E-09 2.5256E-10 1.8804E-10 - 4.4668E+03 4.1080E-09 2.4795E-09 1.7171E-10 1.2396E-10 - 5.0119E+03 2.8050E-09 1.6764E-09 1.1427E-10 8.3221E-11 - 5.6234E+03 1.9244E-09 1.1383E-09 7.4952E-11 5.5490E-11 - 6.3096E+03 1.3118E-09 7.6927E-10 4.8423E-11 3.6131E-11 - 7.0795E+03 8.9384E-10 5.1868E-10 3.2469E-11 2.4110E-11 - 7.9433E+03 6.0778E-10 3.4893E-10 2.0830E-11 1.5265E-11 - 8.9125E+03 4.1198E-10 2.3425E-10 1.4112E-11 9.8980E-12 - 1.0000E+04 2.7824E-10 1.5468E-10 9.5534E-12 6.9792E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3424E+04 4.5006E+04 2.1375E+04 2.0006E+04 - 1.1220E-01 3.6084E+04 3.7050E+04 1.7950E+04 1.6662E+04 - 1.2589E-01 2.9985E+04 3.0471E+04 1.4997E+04 1.3663E+04 - 1.4125E-01 2.4485E+04 2.4893E+04 1.2503E+04 1.1012E+04 - 1.5849E-01 1.9710E+04 2.0018E+04 1.0169E+04 8.9332E+03 - 1.7783E-01 1.5618E+04 1.6008E+04 8.2195E+03 7.1333E+03 - 1.9953E-01 1.2292E+04 1.2633E+04 6.5782E+03 5.6668E+03 - 2.2387E-01 9.5585E+03 9.7979E+03 5.1715E+03 4.4171E+03 - 2.5119E-01 7.3660E+03 7.5678E+03 4.0325E+03 3.4479E+03 - 2.8184E-01 5.6358E+03 5.7506E+03 3.1578E+03 2.6740E+03 - 3.1623E-01 4.2376E+03 4.3322E+03 2.4537E+03 1.9993E+03 - 3.5481E-01 3.1657E+03 3.2463E+03 1.9217E+03 1.5260E+03 - 3.9811E-01 2.4144E+03 2.4268E+03 1.4827E+03 1.1434E+03 - 4.4668E-01 1.8225E+03 1.8315E+03 1.1106E+03 8.5377E+02 - 5.0119E-01 1.3184E+03 1.3721E+03 8.2082E+02 6.3716E+02 - 5.6234E-01 9.7715E+02 1.0135E+03 6.0768E+02 4.7327E+02 - 6.3096E-01 7.1878E+02 7.4156E+02 4.6288E+02 3.4992E+02 - 7.0795E-01 5.2383E+02 5.3919E+02 3.4455E+02 2.6595E+02 - 7.9433E-01 3.8891E+02 4.0219E+02 2.5463E+02 1.9507E+02 - 8.9125E-01 2.9575E+02 3.1477E+02 1.9272E+02 1.3683E+02 - 1.0000E+00 2.1745E+02 2.2722E+02 1.3957E+02 1.0196E+02 - 1.1220E+00 1.5810E+02 1.6397E+02 1.0341E+02 7.3834E+01 - 1.2589E+00 1.1843E+02 1.1957E+02 7.6525E+01 5.3504E+01 - 1.4125E+00 8.8282E+01 8.8040E+01 5.7008E+01 3.9299E+01 - 1.5849E+00 6.3996E+01 6.4773E+01 4.2869E+01 2.9632E+01 - 1.7783E+00 4.7365E+01 4.7684E+01 3.1309E+01 2.2845E+01 - 1.9953E+00 3.5790E+01 3.5589E+01 2.3331E+01 1.6566E+01 - 2.2387E+00 2.6633E+01 2.6416E+01 1.6871E+01 1.1799E+01 - 2.5119E+00 1.9119E+01 1.9356E+01 1.2501E+01 8.8298E+00 - 2.8184E+00 1.4405E+01 1.4479E+01 9.0008E+00 6.5673E+00 - 3.1623E+00 1.0293E+01 1.0369E+01 6.4643E+00 4.5876E+00 - 3.5481E+00 7.4875E+00 7.6659E+00 4.7533E+00 3.3581E+00 - 3.9811E+00 5.5415E+00 5.5797E+00 3.4487E+00 2.4889E+00 - 4.4668E+00 4.0645E+00 4.0579E+00 2.4840E+00 1.8196E+00 - 5.0119E+00 2.9020E+00 2.9157E+00 1.8618E+00 1.2815E+00 - 5.6234E+00 2.1122E+00 2.0766E+00 1.3101E+00 9.2158E-01 - 6.3096E+00 1.5734E+00 1.4733E+00 9.3286E-01 6.7719E-01 - 7.0795E+00 1.1314E+00 1.0673E+00 6.8435E-01 4.9228E-01 - 7.9433E+00 8.0523E-01 7.7771E-01 4.7096E-01 3.3112E-01 - 8.9125E+00 5.7827E-01 5.6363E-01 3.2060E-01 2.3959E-01 - 1.0000E+01 4.1731E-01 4.1008E-01 2.3356E-01 1.7512E-01 - 1.1220E+01 2.9640E-01 2.8988E-01 1.6712E-01 1.1997E-01 - 1.2589E+01 2.1746E-01 2.0472E-01 1.2022E-01 8.3796E-02 - 1.4125E+01 1.6012E-01 1.4572E-01 8.3101E-02 5.9475E-02 - 1.5849E+01 1.1367E-01 1.0534E-01 5.8693E-02 4.1786E-02 - 1.7783E+01 8.1166E-02 7.6261E-02 3.9197E-02 2.9574E-02 - 1.9953E+01 5.5544E-02 5.2876E-02 2.6959E-02 2.0653E-02 - 2.2387E+01 3.9824E-02 3.7121E-02 1.9358E-02 1.3879E-02 - 2.5119E+01 2.9509E-02 2.7181E-02 1.3310E-02 9.3098E-03 - 2.8184E+01 2.0614E-02 1.9611E-02 9.5594E-03 6.5960E-03 - 3.1623E+01 1.5676E-02 1.4120E-02 6.6070E-03 4.9974E-03 - 3.5481E+01 1.1232E-02 1.0035E-02 4.5341E-03 3.4644E-03 - 3.9811E+01 8.0419E-03 7.1306E-03 3.1168E-03 2.3865E-03 - 4.4668E+01 5.7497E-03 5.0382E-03 2.1322E-03 1.6313E-03 - 5.0119E+01 4.1019E-03 3.5727E-03 1.4539E-03 1.1161E-03 - 5.6234E+01 2.9274E-03 2.5321E-03 9.9234E-04 7.5906E-04 - 6.3096E+01 2.0866E-03 1.7895E-03 6.7072E-04 5.1136E-04 - 7.0795E+01 1.4837E-03 1.2635E-03 4.5459E-04 3.4533E-04 - 7.9433E+01 1.0609E-03 8.9371E-04 3.0724E-04 2.3576E-04 - 8.9125E+01 7.5434E-04 6.3164E-04 2.0529E-04 1.6107E-04 - 1.0000E+02 5.4013E-04 4.4558E-04 1.3801E-04 1.0721E-04 - 1.1220E+02 3.8413E-04 3.1434E-04 9.2115E-05 7.1871E-05 - 1.2589E+02 2.7276E-04 2.2084E-04 6.1640E-05 4.8097E-05 - 1.4125E+02 1.9325E-04 1.5516E-04 4.1500E-05 3.2033E-05 - 1.5849E+02 1.3663E-04 1.0924E-04 2.7629E-05 2.1377E-05 - 1.7783E+02 9.6690E-05 7.6768E-05 1.8153E-05 1.4057E-05 - 1.9953E+02 6.8403E-05 5.3641E-05 1.2014E-05 9.2301E-06 - 2.2387E+02 4.8412E-05 3.7528E-05 7.9401E-06 6.1449E-06 - 2.5119E+02 3.4100E-05 2.6284E-05 5.2267E-06 4.0830E-06 - 2.8184E+02 2.4013E-05 1.8317E-05 3.4613E-06 2.7001E-06 - 3.1623E+02 1.6948E-05 1.2748E-05 2.2607E-06 1.7810E-06 - 3.5481E+02 1.1910E-05 8.8947E-06 1.4945E-06 1.1821E-06 - 3.9811E+02 8.3861E-06 6.1853E-06 9.8339E-07 7.8756E-07 - 4.4668E+02 5.8893E-06 4.2823E-06 6.4747E-07 5.1396E-07 - 5.0119E+02 4.1114E-06 2.9722E-06 4.2538E-07 3.4008E-07 - 5.6234E+02 2.8933E-06 2.0704E-06 2.8054E-07 2.2191E-07 - 6.3096E+02 2.0252E-06 1.4385E-06 1.8350E-07 1.4465E-07 - 7.0795E+02 1.4153E-06 1.0001E-06 1.2084E-07 9.4646E-08 - 7.9433E+02 9.8708E-07 6.9006E-07 7.9455E-08 6.2673E-08 - 8.9125E+02 6.9184E-07 4.7673E-07 5.2440E-08 4.0997E-08 - 1.0000E+03 4.8473E-07 3.2785E-07 3.4411E-08 2.7638E-08 - 1.1220E+03 3.3677E-07 2.2562E-07 2.2737E-08 1.8505E-08 - 1.2589E+03 2.3476E-07 1.5586E-07 1.5213E-08 1.2033E-08 - 1.4125E+03 1.6315E-07 1.0777E-07 1.0071E-08 7.9337E-09 - 1.5849E+03 1.1392E-07 7.4594E-08 6.5822E-09 5.1882E-09 - 1.7783E+03 7.9364E-08 5.1201E-08 4.2729E-09 3.4024E-09 - 1.9953E+03 5.5204E-08 3.5237E-08 2.8800E-09 2.2577E-09 - 2.2387E+03 3.8258E-08 2.4130E-08 1.9499E-09 1.5171E-09 - 2.5119E+03 2.6523E-08 1.6499E-08 1.3044E-09 9.9397E-10 - 2.8184E+03 1.8326E-08 1.1333E-08 8.4521E-10 6.4215E-10 - 3.1623E+03 1.2676E-08 7.8299E-09 5.6624E-10 4.4374E-10 - 3.5481E+03 8.7011E-09 5.3259E-09 3.8580E-10 2.9619E-10 - 3.9811E+03 5.9716E-09 3.6697E-09 2.5672E-10 1.9871E-10 - 4.4668E+03 4.1029E-09 2.4780E-09 1.6793E-10 1.3046E-10 - 5.0119E+03 2.7840E-09 1.6749E-09 1.0947E-10 8.4238E-11 - 5.6234E+03 1.9021E-09 1.1332E-09 7.3629E-11 5.3336E-11 - 6.3096E+03 1.3136E-09 7.7077E-10 4.8114E-11 3.5356E-11 - 7.0795E+03 8.9182E-10 5.2256E-10 3.1477E-11 2.3292E-11 - 7.9433E+03 6.0479E-10 3.5183E-10 2.1021E-11 1.5502E-11 - 8.9125E+03 4.0844E-10 2.3247E-10 1.4605E-11 1.0078E-11 - 1.0000E+04 2.7687E-10 1.5572E-10 9.8340E-12 6.4981E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.4011E+04 4.6032E+04 2.2073E+04 1.9912E+04 - 1.1220E-01 3.6120E+04 3.8094E+04 1.8460E+04 1.6559E+04 - 1.2589E-01 2.9900E+04 3.1317E+04 1.5372E+04 1.3663E+04 - 1.4125E-01 2.4418E+04 2.5210E+04 1.2759E+04 1.0940E+04 - 1.5849E-01 1.9676E+04 2.0305E+04 1.0511E+04 8.7481E+03 - 1.7783E-01 1.5762E+04 1.6316E+04 8.4544E+03 7.0329E+03 - 1.9953E-01 1.2379E+04 1.2807E+04 6.8390E+03 5.5690E+03 - 2.2387E-01 9.6614E+03 1.0036E+04 5.5152E+03 4.3127E+03 - 2.5119E-01 7.4054E+03 7.7554E+03 4.3168E+03 3.3432E+03 - 2.8184E-01 5.6274E+03 5.9276E+03 3.3875E+03 2.5856E+03 - 3.1623E-01 4.2691E+03 4.5227E+03 2.6228E+03 1.9665E+03 - 3.5481E-01 3.2509E+03 3.4354E+03 2.0051E+03 1.5169E+03 - 3.9811E-01 2.4368E+03 2.5965E+03 1.5178E+03 1.1377E+03 - 4.4668E-01 1.8045E+03 1.9512E+03 1.1638E+03 8.3737E+02 - 5.0119E-01 1.3458E+03 1.4386E+03 8.6581E+02 6.1823E+02 - 5.6234E-01 9.9519E+02 1.0641E+03 6.2468E+02 4.6109E+02 - 6.3096E-01 7.2327E+02 7.9279E+02 4.7509E+02 3.4220E+02 - 7.0795E-01 5.2847E+02 5.7513E+02 3.6745E+02 2.4959E+02 - 7.9433E-01 3.8918E+02 4.3409E+02 2.7794E+02 1.7703E+02 - 8.9125E-01 2.8762E+02 3.2983E+02 2.0460E+02 1.2472E+02 - 1.0000E+00 2.1779E+02 2.3499E+02 1.4988E+02 9.6347E+01 - 1.1220E+00 1.5989E+02 1.7294E+02 1.1191E+02 7.1065E+01 - 1.2589E+00 1.2009E+02 1.2799E+02 8.3582E+01 5.2358E+01 - 1.4125E+00 8.9115E+01 9.5753E+01 6.1679E+01 3.9883E+01 - 1.5849E+00 6.4296E+01 7.0494E+01 4.4649E+01 3.0211E+01 - 1.7783E+00 4.7416E+01 5.0930E+01 3.3021E+01 2.1450E+01 - 1.9953E+00 3.5438E+01 3.7714E+01 2.5175E+01 1.4798E+01 - 2.2387E+00 2.6388E+01 2.7471E+01 1.8250E+01 1.1093E+01 - 2.5119E+00 1.9108E+01 2.0260E+01 1.3232E+01 8.2567E+00 - 2.8184E+00 1.4006E+01 1.4860E+01 9.5878E+00 5.9130E+00 - 3.1623E+00 1.0106E+01 1.1123E+01 7.0036E+00 4.3695E+00 - 3.5481E+00 7.3326E+00 8.1970E+00 4.9902E+00 3.2142E+00 - 3.9811E+00 5.3987E+00 5.9398E+00 3.7258E+00 2.3194E+00 - 4.4668E+00 3.9858E+00 4.1687E+00 2.7072E+00 1.6502E+00 - 5.0119E+00 2.9270E+00 2.9722E+00 1.8599E+00 1.1512E+00 - 5.6234E+00 2.1651E+00 2.2098E+00 1.3227E+00 8.4261E-01 - 6.3096E+00 1.5925E+00 1.6191E+00 9.7154E-01 6.3969E-01 - 7.0795E+00 1.1307E+00 1.1551E+00 6.9998E-01 4.7176E-01 - 7.9433E+00 8.2598E-01 8.4418E-01 5.0087E-01 3.3140E-01 - 8.9125E+00 5.9267E-01 6.0380E-01 3.4694E-01 2.2045E-01 - 1.0000E+01 4.1552E-01 4.0935E-01 2.4957E-01 1.5935E-01 - 1.1220E+01 2.9458E-01 2.9054E-01 1.7259E-01 1.1379E-01 - 1.2589E+01 2.1334E-01 2.1252E-01 1.2157E-01 7.9290E-02 - 1.4125E+01 1.5428E-01 1.5747E-01 8.5014E-02 5.4895E-02 - 1.5849E+01 1.1230E-01 1.1054E-01 5.7956E-02 4.0043E-02 - 1.7783E+01 8.1492E-02 7.5727E-02 4.1640E-02 2.8897E-02 - 1.9953E+01 5.8979E-02 5.3974E-02 2.9452E-02 2.1749E-02 - 2.2387E+01 4.4241E-02 3.8646E-02 1.9359E-02 1.4546E-02 - 2.5119E+01 3.1574E-02 2.7714E-02 1.2144E-02 9.8050E-03 - 2.8184E+01 2.0879E-02 2.0006E-02 8.7970E-03 6.5530E-03 - 3.1623E+01 1.5662E-02 1.4144E-02 6.5960E-03 5.0163E-03 - 3.5481E+01 1.1203E-02 1.0068E-02 4.5595E-03 3.4551E-03 - 3.9811E+01 8.0097E-03 7.1227E-03 3.1228E-03 2.3760E-03 - 4.4668E+01 5.7310E-03 5.0529E-03 2.1337E-03 1.6289E-03 - 5.0119E+01 4.1082E-03 3.5753E-03 1.4491E-03 1.1134E-03 - 5.6234E+01 2.9317E-03 2.5315E-03 9.8077E-04 7.5687E-04 - 6.3096E+01 2.0964E-03 1.7940E-03 6.6444E-04 5.1689E-04 - 7.0795E+01 1.4949E-03 1.2658E-03 4.5084E-04 3.5292E-04 - 7.9433E+01 1.0666E-03 8.9037E-04 3.0709E-04 2.3467E-04 - 8.9125E+01 7.5951E-04 6.2689E-04 2.0647E-04 1.5726E-04 - 1.0000E+02 5.3872E-04 4.4506E-04 1.3808E-04 1.0764E-04 - 1.1220E+02 3.8260E-04 3.1397E-04 9.2111E-05 7.2384E-05 - 1.2589E+02 2.7184E-04 2.2059E-04 6.1573E-05 4.8230E-05 - 1.4125E+02 1.9262E-04 1.5466E-04 4.0869E-05 3.1993E-05 - 1.5849E+02 1.3630E-04 1.0869E-04 2.7110E-05 2.1233E-05 - 1.7783E+02 9.6541E-05 7.6016E-05 1.7957E-05 1.4197E-05 - 1.9953E+02 6.8087E-05 5.3178E-05 1.1890E-05 9.4881E-06 - 2.2387E+02 4.8198E-05 3.7275E-05 7.8888E-06 6.1971E-06 - 2.5119E+02 3.4111E-05 2.5965E-05 5.2149E-06 4.0421E-06 - 2.8184E+02 2.4080E-05 1.8077E-05 3.4368E-06 2.6710E-06 - 3.1623E+02 1.7012E-05 1.2727E-05 2.2663E-06 1.7890E-06 - 3.5481E+02 1.1972E-05 8.8666E-06 1.4814E-06 1.1890E-06 - 3.9811E+02 8.4248E-06 6.1662E-06 9.6694E-07 7.8017E-07 - 4.4668E+02 5.9255E-06 4.2771E-06 6.3501E-07 5.1316E-07 - 5.0119E+02 4.1481E-06 2.9727E-06 4.2422E-07 3.4150E-07 - 5.6234E+02 2.9039E-06 2.0733E-06 2.7758E-07 2.2136E-07 - 6.3096E+02 2.0315E-06 1.4364E-06 1.8226E-07 1.4563E-07 - 7.0795E+02 1.4247E-06 9.9468E-07 1.2005E-07 9.5200E-08 - 7.9433E+02 9.9587E-07 6.8863E-07 7.9101E-08 6.1873E-08 - 8.9125E+02 6.9569E-07 4.7481E-07 5.2522E-08 4.1325E-08 - 1.0000E+03 4.8509E-07 3.2864E-07 3.4265E-08 2.7390E-08 - 1.1220E+03 3.3753E-07 2.2686E-07 2.2638E-08 1.7961E-08 - 1.2589E+03 2.3568E-07 1.5556E-07 1.4964E-08 1.2084E-08 - 1.4125E+03 1.6411E-07 1.0705E-07 1.0002E-08 7.9670E-09 - 1.5849E+03 1.1344E-07 7.4312E-08 6.6076E-09 5.1406E-09 - 1.7783E+03 7.8876E-08 5.1009E-08 4.3370E-09 3.4664E-09 - 1.9953E+03 5.5132E-08 3.5299E-08 2.9104E-09 2.3063E-09 - 2.2387E+03 3.8068E-08 2.4232E-08 1.9430E-09 1.5135E-09 - 2.5119E+03 2.6385E-08 1.6619E-08 1.2680E-09 1.0046E-09 - 2.8184E+03 1.8275E-08 1.1382E-08 8.6888E-10 6.6689E-10 - 3.1623E+03 1.2703E-08 7.8463E-09 5.8041E-10 4.4046E-10 - 3.5481E+03 8.6941E-09 5.3485E-09 3.8489E-10 2.9013E-10 - 3.9811E+03 5.9603E-09 3.6202E-09 2.5511E-10 1.9002E-10 - 4.4668E+03 4.0536E-09 2.4548E-09 1.6676E-10 1.2434E-10 - 5.0119E+03 2.7869E-09 1.6786E-09 1.1028E-10 8.3605E-11 - 5.6234E+03 1.9287E-09 1.1347E-09 7.3835E-11 5.7309E-11 - 6.3096E+03 1.3068E-09 7.6829E-10 4.8735E-11 3.6917E-11 - 7.0795E+03 8.8779E-10 5.1925E-10 3.2919E-11 2.3555E-11 - 7.9433E+03 6.0667E-10 3.5064E-10 2.0832E-11 1.5253E-11 - 8.9125E+03 4.1287E-10 2.3116E-10 1.3335E-11 1.0548E-11 - 1.0000E+04 2.7768E-10 1.5395E-10 9.4106E-12 7.0536E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3976E+04 4.5954E+04 2.2225E+04 1.9530E+04 - 1.1220E-01 3.6346E+04 3.8053E+04 1.8646E+04 1.6305E+04 - 1.2589E-01 2.9964E+04 3.1250E+04 1.5649E+04 1.3472E+04 - 1.4125E-01 2.4357E+04 2.5452E+04 1.2954E+04 1.0792E+04 - 1.5849E-01 1.9639E+04 2.0612E+04 1.0597E+04 8.6458E+03 - 1.7783E-01 1.5817E+04 1.6603E+04 8.6445E+03 7.0055E+03 - 1.9953E-01 1.2471E+04 1.3174E+04 6.9756E+03 5.5360E+03 - 2.2387E-01 9.5847E+03 1.0315E+04 5.5955E+03 4.3071E+03 - 2.5119E-01 7.3818E+03 7.9046E+03 4.4311E+03 3.3485E+03 - 2.8184E-01 5.6817E+03 6.0170E+03 3.4686E+03 2.5814E+03 - 3.1623E-01 4.2531E+03 4.5613E+03 2.6628E+03 1.9480E+03 - 3.5481E-01 3.1995E+03 3.4289E+03 2.0587E+03 1.4943E+03 - 3.9811E-01 2.4489E+03 2.5966E+03 1.5764E+03 1.1029E+03 - 4.4668E-01 1.8170E+03 1.9786E+03 1.1975E+03 8.0832E+02 - 5.0119E-01 1.3159E+03 1.4890E+03 9.2427E+02 6.1267E+02 - 5.6234E-01 9.6542E+02 1.0822E+03 6.9732E+02 4.4774E+02 - 6.3096E-01 7.1507E+02 7.9381E+02 5.2147E+02 3.3775E+02 - 7.0795E-01 5.2716E+02 5.8517E+02 3.8810E+02 2.5304E+02 - 7.9433E-01 3.8680E+02 4.4147E+02 2.8265E+02 1.8640E+02 - 8.9125E-01 2.8157E+02 3.2958E+02 2.0715E+02 1.3391E+02 - 1.0000E+00 2.1524E+02 2.4360E+02 1.5682E+02 9.4591E+01 - 1.1220E+00 1.6167E+02 1.7639E+02 1.1720E+02 6.8811E+01 - 1.2589E+00 1.1846E+02 1.3151E+02 8.7907E+01 5.1340E+01 - 1.4125E+00 8.6569E+01 9.9488E+01 6.3975E+01 3.8578E+01 - 1.5849E+00 6.4501E+01 7.2334E+01 4.7119E+01 2.8194E+01 - 1.7783E+00 4.8223E+01 5.2495E+01 3.5471E+01 2.0236E+01 - 1.9953E+00 3.5722E+01 3.9212E+01 2.5385E+01 1.4589E+01 - 2.2387E+00 2.5938E+01 2.9140E+01 1.8249E+01 1.0689E+01 - 2.5119E+00 1.9037E+01 2.0933E+01 1.4152E+01 8.1820E+00 - 2.8184E+00 1.3887E+01 1.5275E+01 1.0483E+01 6.1341E+00 - 3.1623E+00 1.0016E+01 1.1228E+01 7.2160E+00 4.2790E+00 - 3.5481E+00 7.4325E+00 7.9786E+00 5.2180E+00 3.1689E+00 - 3.9811E+00 5.4758E+00 5.8224E+00 3.7686E+00 2.2510E+00 - 4.4668E+00 4.0365E+00 4.3237E+00 2.7612E+00 1.6336E+00 - 5.0119E+00 2.9039E+00 3.0971E+00 2.0486E+00 1.1872E+00 - 5.6234E+00 2.0513E+00 2.2077E+00 1.4766E+00 8.3639E-01 - 6.3096E+00 1.4951E+00 1.6190E+00 9.9444E-01 6.1086E-01 - 7.0795E+00 1.1185E+00 1.1536E+00 6.8192E-01 4.4723E-01 - 7.9433E+00 8.2127E-01 7.9897E-01 5.0741E-01 3.3692E-01 - 8.9125E+00 5.7862E-01 5.8925E-01 3.5975E-01 2.3311E-01 - 1.0000E+01 4.1943E-01 4.2240E-01 2.4184E-01 1.6698E-01 - 1.1220E+01 3.0256E-01 3.0643E-01 1.6992E-01 1.1961E-01 - 1.2589E+01 2.2164E-01 2.1892E-01 1.1909E-01 8.4515E-02 - 1.4125E+01 1.5883E-01 1.5567E-01 8.4881E-02 6.0762E-02 - 1.5849E+01 1.1327E-01 1.0950E-01 5.7745E-02 4.2712E-02 - 1.7783E+01 8.0769E-02 7.6037E-02 4.0367E-02 2.9143E-02 - 1.9953E+01 5.8448E-02 5.4752E-02 2.9308E-02 2.0211E-02 - 2.2387E+01 4.1963E-02 3.9043E-02 1.9870E-02 1.4495E-02 - 2.5119E+01 2.9882E-02 2.7432E-02 1.3915E-02 9.5124E-03 - 2.8184E+01 2.1680E-02 1.9808E-02 9.5116E-03 6.4524E-03 - 3.1623E+01 1.5687E-02 1.4121E-02 6.6133E-03 5.0414E-03 - 3.5481E+01 1.1207E-02 1.0044E-02 4.5507E-03 3.4749E-03 - 3.9811E+01 8.0187E-03 7.1401E-03 3.1199E-03 2.3863E-03 - 4.4668E+01 5.7409E-03 5.0556E-03 2.1428E-03 1.6361E-03 - 5.0119E+01 4.1011E-03 3.5742E-03 1.4604E-03 1.1137E-03 - 5.6234E+01 2.9282E-03 2.5290E-03 9.8924E-04 7.5563E-04 - 6.3096E+01 2.0868E-03 1.7936E-03 6.6808E-04 5.1745E-04 - 7.0795E+01 1.4886E-03 1.2665E-03 4.5171E-04 3.5144E-04 - 7.9433E+01 1.0622E-03 8.9369E-04 3.0595E-04 2.3693E-04 - 8.9125E+01 7.5663E-04 6.2786E-04 2.0600E-04 1.6083E-04 - 1.0000E+02 5.3829E-04 4.4434E-04 1.3740E-04 1.0765E-04 - 1.1220E+02 3.8306E-04 3.1314E-04 9.2407E-05 7.2198E-05 - 1.2589E+02 2.7244E-04 2.2040E-04 6.1995E-05 4.8239E-05 - 1.4125E+02 1.9303E-04 1.5488E-04 4.1150E-05 3.1847E-05 - 1.5849E+02 1.3691E-04 1.0895E-04 2.7221E-05 2.1212E-05 - 1.7783E+02 9.7316E-05 7.6339E-05 1.8149E-05 1.4227E-05 - 1.9953E+02 6.8780E-05 5.3366E-05 1.2141E-05 9.4405E-06 - 2.2387E+02 4.8366E-05 3.7314E-05 7.9690E-06 6.2104E-06 - 2.5119E+02 3.4218E-05 2.6097E-05 5.2604E-06 4.1412E-06 - 2.8184E+02 2.4246E-05 1.8243E-05 3.4969E-06 2.7456E-06 - 3.1623E+02 1.7001E-05 1.2782E-05 2.2877E-06 1.7956E-06 - 3.5481E+02 1.1951E-05 8.9196E-06 1.4968E-06 1.1854E-06 - 3.9811E+02 8.4004E-06 6.2010E-06 9.8052E-07 7.8463E-07 - 4.4668E+02 5.8930E-06 4.2961E-06 6.4237E-07 5.1666E-07 - 5.0119E+02 4.1289E-06 2.9889E-06 4.2207E-07 3.4237E-07 - 5.6234E+02 2.8972E-06 2.0735E-06 2.7697E-07 2.2245E-07 - 6.3096E+02 2.0292E-06 1.4354E-06 1.8426E-07 1.4532E-07 - 7.0795E+02 1.4199E-06 9.9532E-07 1.2041E-07 9.5596E-08 - 7.9433E+02 9.9688E-07 6.8678E-07 7.7969E-08 6.3167E-08 - 8.9125E+02 6.9776E-07 4.7472E-07 5.1843E-08 4.2006E-08 - 1.0000E+03 4.8378E-07 3.2998E-07 3.4694E-08 2.7575E-08 - 1.1220E+03 3.3620E-07 2.2753E-07 2.3035E-08 1.8190E-08 - 1.2589E+03 2.3416E-07 1.5800E-07 1.5304E-08 1.1948E-08 - 1.4125E+03 1.6335E-07 1.0902E-07 1.0006E-08 7.8614E-09 - 1.5849E+03 1.1398E-07 7.4525E-08 6.6050E-09 5.1540E-09 - 1.7783E+03 7.9501E-08 5.1391E-08 4.3014E-09 3.3401E-09 - 1.9953E+03 5.5028E-08 3.5254E-08 2.8698E-09 2.2134E-09 - 2.2387E+03 3.8049E-08 2.4218E-08 1.9017E-09 1.5181E-09 - 2.5119E+03 2.6378E-08 1.6614E-08 1.2287E-09 1.0306E-09 - 2.8184E+03 1.8218E-08 1.1348E-08 8.4139E-10 6.8232E-10 - 3.1623E+03 1.2710E-08 7.8127E-09 5.8312E-10 4.3790E-10 - 3.5481E+03 8.6865E-09 5.2825E-09 3.8060E-10 2.7998E-10 - 3.9811E+03 5.9787E-09 3.5998E-09 2.4691E-10 1.8916E-10 - 4.4668E+03 4.0747E-09 2.4440E-09 1.6030E-10 1.2964E-10 - 5.0119E+03 2.8023E-09 1.6726E-09 1.0796E-10 8.4521E-11 - 5.6234E+03 1.9303E-09 1.1456E-09 7.5689E-11 5.3157E-11 - 6.3096E+03 1.3060E-09 7.6971E-10 4.8857E-11 3.5293E-11 - 7.0795E+03 8.8732E-10 5.2037E-10 3.2503E-11 2.3616E-11 - 7.9433E+03 6.0057E-10 3.5125E-10 2.1283E-11 1.5705E-11 - 8.9125E+03 4.0926E-10 2.3353E-10 1.4119E-11 1.0231E-11 - 1.0000E+04 2.7849E-10 1.5664E-10 9.1761E-12 6.8251E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3859E+04 4.6030E+04 2.2331E+04 1.9634E+04 - 1.1220E-01 3.6114E+04 3.7749E+04 1.8729E+04 1.6233E+04 - 1.2589E-01 2.9777E+04 3.0972E+04 1.5689E+04 1.3310E+04 - 1.4125E-01 2.4507E+04 2.5409E+04 1.2915E+04 1.0803E+04 - 1.5849E-01 1.9801E+04 2.0668E+04 1.0467E+04 8.7601E+03 - 1.7783E-01 1.5751E+04 1.6535E+04 8.5234E+03 7.0181E+03 - 1.9953E-01 1.2383E+04 1.3043E+04 6.9720E+03 5.4674E+03 - 2.2387E-01 9.6150E+03 1.0210E+04 5.5662E+03 4.2674E+03 - 2.5119E-01 7.3782E+03 7.8370E+03 4.3760E+03 3.3279E+03 - 2.8184E-01 5.5835E+03 5.9796E+03 3.4335E+03 2.5888E+03 - 3.1623E-01 4.2158E+03 4.5391E+03 2.6825E+03 1.9891E+03 - 3.5481E-01 3.1831E+03 3.4517E+03 2.0402E+03 1.4752E+03 - 3.9811E-01 2.4272E+03 2.6168E+03 1.5474E+03 1.1087E+03 - 4.4668E-01 1.8216E+03 1.9488E+03 1.1930E+03 8.3197E+02 - 5.0119E-01 1.3360E+03 1.4689E+03 8.9702E+02 6.2118E+02 - 5.6234E-01 9.7842E+02 1.1099E+03 6.7201E+02 4.6523E+02 - 6.3096E-01 7.1756E+02 8.0753E+02 5.2331E+02 3.3964E+02 - 7.0795E-01 5.3491E+02 5.9814E+02 3.8988E+02 2.4888E+02 - 7.9433E-01 3.9163E+02 4.4089E+02 2.8440E+02 1.7635E+02 - 8.9125E-01 2.8673E+02 3.2298E+02 2.0693E+02 1.2258E+02 - 1.0000E+00 2.1488E+02 2.3974E+02 1.5197E+02 9.3394E+01 - 1.1220E+00 1.6052E+02 1.7894E+02 1.1612E+02 7.0278E+01 - 1.2589E+00 1.1920E+02 1.3234E+02 8.6471E+01 5.0805E+01 - 1.4125E+00 8.6995E+01 9.7197E+01 6.2282E+01 3.7670E+01 - 1.5849E+00 6.4058E+01 7.1867E+01 4.6109E+01 2.7701E+01 - 1.7783E+00 4.6594E+01 5.3497E+01 3.3619E+01 2.0348E+01 - 1.9953E+00 3.4225E+01 3.9471E+01 2.4788E+01 1.4582E+01 - 2.2387E+00 2.5603E+01 2.8451E+01 1.8732E+01 1.0625E+01 - 2.5119E+00 1.8583E+01 2.0433E+01 1.3810E+01 7.9007E+00 - 2.8184E+00 1.3758E+01 1.4956E+01 9.8854E+00 5.7195E+00 - 3.1623E+00 9.8011E+00 1.1076E+01 7.1752E+00 4.1339E+00 - 3.5481E+00 7.1982E+00 8.1420E+00 5.2379E+00 2.9790E+00 - 3.9811E+00 5.3958E+00 5.8289E+00 3.6266E+00 2.1510E+00 - 4.4668E+00 3.9468E+00 4.2133E+00 2.5975E+00 1.6052E+00 - 5.0119E+00 2.8306E+00 3.0810E+00 1.9566E+00 1.1514E+00 - 5.6234E+00 2.0650E+00 2.2198E+00 1.4114E+00 8.2650E-01 - 6.3096E+00 1.5089E+00 1.6317E+00 1.0232E+00 6.1160E-01 - 7.0795E+00 1.0650E+00 1.1782E+00 7.1272E-01 4.3870E-01 - 7.9433E+00 7.7539E-01 8.2245E-01 4.8626E-01 3.1011E-01 - 8.9125E+00 5.7719E-01 5.8298E-01 3.4438E-01 2.3008E-01 - 1.0000E+01 4.1754E-01 4.1548E-01 2.4455E-01 1.6615E-01 - 1.1220E+01 2.9953E-01 2.9932E-01 1.7213E-01 1.1592E-01 - 1.2589E+01 2.1058E-01 2.1153E-01 1.2411E-01 8.1893E-02 - 1.4125E+01 1.5599E-01 1.4742E-01 8.5372E-02 5.8888E-02 - 1.5849E+01 1.1646E-01 1.0531E-01 5.9840E-02 4.0892E-02 - 1.7783E+01 8.3996E-02 7.6948E-02 4.0945E-02 2.9254E-02 - 1.9953E+01 5.8882E-02 5.7246E-02 2.7214E-02 2.0706E-02 - 2.2387E+01 4.2323E-02 4.0354E-02 1.9547E-02 1.4255E-02 - 2.5119E+01 3.0211E-02 2.7261E-02 1.3928E-02 9.9194E-03 - 2.8184E+01 2.1414E-02 1.9059E-02 9.6194E-03 6.7183E-03 - 3.1623E+01 1.5690E-02 1.4124E-02 6.5976E-03 5.0007E-03 - 3.5481E+01 1.1234E-02 1.0044E-02 4.5593E-03 3.4522E-03 - 3.9811E+01 8.0533E-03 7.1342E-03 3.1361E-03 2.3841E-03 - 4.4668E+01 5.7565E-03 5.0623E-03 2.1398E-03 1.6324E-03 - 5.0119E+01 4.1193E-03 3.5850E-03 1.4591E-03 1.1170E-03 - 5.6234E+01 2.9526E-03 2.5379E-03 9.8838E-04 7.6449E-04 - 6.3096E+01 2.1047E-03 1.7943E-03 6.6819E-04 5.2063E-04 - 7.0795E+01 1.4947E-03 1.2693E-03 4.5535E-04 3.5122E-04 - 7.9433E+01 1.0628E-03 8.9893E-04 3.0765E-04 2.3856E-04 - 8.9125E+01 7.5992E-04 6.3158E-04 2.0622E-04 1.6058E-04 - 1.0000E+02 5.3900E-04 4.4484E-04 1.3861E-04 1.0726E-04 - 1.1220E+02 3.8387E-04 3.1430E-04 9.2478E-05 7.1729E-05 - 1.2589E+02 2.7245E-04 2.2155E-04 6.1652E-05 4.7854E-05 - 1.4125E+02 1.9327E-04 1.5501E-04 4.1250E-05 3.1794E-05 - 1.5849E+02 1.3737E-04 1.0868E-04 2.7307E-05 2.1199E-05 - 1.7783E+02 9.7298E-05 7.6319E-05 1.8022E-05 1.4316E-05 - 1.9953E+02 6.8458E-05 5.3555E-05 1.1979E-05 9.5022E-06 - 2.2387E+02 4.8578E-05 3.7634E-05 7.9876E-06 6.1698E-06 - 2.5119E+02 3.4477E-05 2.6327E-05 5.2345E-06 4.1267E-06 - 2.8184E+02 2.4176E-05 1.8418E-05 3.4344E-06 2.7165E-06 - 3.1623E+02 1.6992E-05 1.2778E-05 2.2681E-06 1.7906E-06 - 3.5481E+02 1.1955E-05 8.9001E-06 1.4947E-06 1.1908E-06 - 3.9811E+02 8.3893E-06 6.1845E-06 9.8332E-07 7.8009E-07 - 4.4668E+02 5.9147E-06 4.2939E-06 6.4282E-07 5.0250E-07 - 5.0119E+02 4.1480E-06 2.9798E-06 4.2228E-07 3.2781E-07 - 5.6234E+02 2.9079E-06 2.0699E-06 2.7588E-07 2.2030E-07 - 6.3096E+02 2.0298E-06 1.4355E-06 1.8242E-07 1.4523E-07 - 7.0795E+02 1.4134E-06 9.9265E-07 1.2040E-07 9.5618E-08 - 7.9433E+02 9.8756E-07 6.8894E-07 7.8127E-08 6.2793E-08 - 8.9125E+02 6.9263E-07 4.7658E-07 5.2118E-08 4.1046E-08 - 1.0000E+03 4.8526E-07 3.2942E-07 3.4577E-08 2.7282E-08 - 1.1220E+03 3.3828E-07 2.2795E-07 2.2773E-08 1.8075E-08 - 1.2589E+03 2.3567E-07 1.5735E-07 1.5018E-08 1.1830E-08 - 1.4125E+03 1.6305E-07 1.0814E-07 9.8625E-09 7.6565E-09 - 1.5849E+03 1.1328E-07 7.4630E-08 6.6604E-09 5.1380E-09 - 1.7783E+03 7.9614E-08 5.1596E-08 4.4960E-09 3.3835E-09 - 1.9953E+03 5.5493E-08 3.5227E-08 2.9355E-09 2.2598E-09 - 2.2387E+03 3.8431E-08 2.4085E-08 1.9473E-09 1.5289E-09 - 2.5119E+03 2.6449E-08 1.6547E-08 1.2945E-09 1.0099E-09 - 2.8184E+03 1.8308E-08 1.1385E-08 8.4176E-10 6.8176E-10 - 3.1623E+03 1.2679E-08 7.8096E-09 5.7865E-10 4.4875E-10 - 3.5481E+03 8.6759E-09 5.2917E-09 3.8416E-10 2.9445E-10 - 3.9811E+03 5.9729E-09 3.6248E-09 2.5338E-10 1.9354E-10 - 4.4668E+03 4.1097E-09 2.4780E-09 1.6436E-10 1.2631E-10 - 5.0119E+03 2.8164E-09 1.6860E-09 1.0987E-10 8.1174E-11 - 5.6234E+03 1.9246E-09 1.1402E-09 7.3435E-11 5.3050E-11 - 6.3096E+03 1.3115E-09 7.6848E-10 4.8580E-11 3.6310E-11 - 7.0795E+03 8.9497E-10 5.1599E-10 3.2092E-11 2.4728E-11 - 7.9433E+03 6.0550E-10 3.4765E-10 2.1526E-11 1.7093E-11 - 8.9125E+03 4.1049E-10 2.3577E-10 1.4199E-11 1.0291E-11 - 1.0000E+04 2.7710E-10 1.5791E-10 9.0943E-12 6.5503E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3428E+04 4.5547E+04 2.1484E+04 1.9614E+04 - 1.1220E-01 3.5911E+04 3.7447E+04 1.7951E+04 1.6377E+04 - 1.2589E-01 2.9433E+04 3.0597E+04 1.4867E+04 1.3419E+04 - 1.4125E-01 2.4091E+04 2.4775E+04 1.2452E+04 1.0891E+04 - 1.5849E-01 1.9455E+04 2.0115E+04 1.0282E+04 8.7235E+03 - 1.7783E-01 1.5510E+04 1.6135E+04 8.3103E+03 6.9766E+03 - 1.9953E-01 1.2228E+04 1.2672E+04 6.6295E+03 5.5197E+03 - 2.2387E-01 9.5247E+03 9.7867E+03 5.2690E+03 4.2424E+03 - 2.5119E-01 7.3649E+03 7.5601E+03 4.2098E+03 3.2817E+03 - 2.8184E-01 5.5705E+03 5.8238E+03 3.2893E+03 2.5337E+03 - 3.1623E-01 4.2234E+03 4.4150E+03 2.5417E+03 1.9363E+03 - 3.5481E-01 3.2260E+03 3.3180E+03 1.9638E+03 1.4476E+03 - 3.9811E-01 2.4072E+03 2.5033E+03 1.4982E+03 1.0750E+03 - 4.4668E-01 1.7886E+03 1.8837E+03 1.1313E+03 8.0620E+02 - 5.0119E-01 1.3188E+03 1.4029E+03 8.6087E+02 5.9439E+02 - 5.6234E-01 9.6724E+02 1.0288E+03 6.3995E+02 4.4188E+02 - 6.3096E-01 6.9899E+02 7.5321E+02 4.6918E+02 3.3314E+02 - 7.0795E-01 5.2380E+02 5.6398E+02 3.4413E+02 2.4299E+02 - 7.9433E-01 3.9520E+02 4.1715E+02 2.5044E+02 1.7728E+02 - 8.9125E-01 2.8964E+02 3.0948E+02 1.9537E+02 1.2919E+02 - 1.0000E+00 2.1332E+02 2.2769E+02 1.4702E+02 9.6295E+01 - 1.1220E+00 1.6029E+02 1.6666E+02 1.0911E+02 7.0833E+01 - 1.2589E+00 1.1985E+02 1.2576E+02 7.8508E+01 5.0846E+01 - 1.4125E+00 8.7002E+01 9.3759E+01 5.7175E+01 3.7861E+01 - 1.5849E+00 6.3234E+01 6.9212E+01 4.3671E+01 2.8509E+01 - 1.7783E+00 4.6259E+01 5.0162E+01 3.2623E+01 1.9900E+01 - 1.9953E+00 3.4609E+01 3.6090E+01 2.4383E+01 1.3989E+01 - 2.2387E+00 2.5665E+01 2.7345E+01 1.7154E+01 1.0283E+01 - 2.5119E+00 1.7820E+01 2.0442E+01 1.2368E+01 7.5575E+00 - 2.8184E+00 1.2909E+01 1.4620E+01 9.5431E+00 5.5643E+00 - 3.1623E+00 9.9838E+00 1.0590E+01 6.8767E+00 4.3346E+00 - 3.5481E+00 7.3651E+00 7.7304E+00 5.0960E+00 3.0725E+00 - 3.9811E+00 5.4737E+00 5.6594E+00 3.5890E+00 2.2463E+00 - 4.4668E+00 4.0159E+00 4.2061E+00 2.5837E+00 1.6274E+00 - 5.0119E+00 2.9044E+00 3.0856E+00 1.8590E+00 1.2056E+00 - 5.6234E+00 2.1096E+00 2.2350E+00 1.2993E+00 8.9715E-01 - 6.3096E+00 1.5215E+00 1.5535E+00 9.7615E-01 6.7756E-01 - 7.0795E+00 1.0908E+00 1.1336E+00 7.1675E-01 4.6411E-01 - 7.9433E+00 8.2144E-01 8.2143E-01 4.9913E-01 3.1672E-01 - 8.9125E+00 6.0619E-01 5.6345E-01 3.6058E-01 2.4019E-01 - 1.0000E+01 4.2019E-01 4.1108E-01 2.5084E-01 1.6836E-01 - 1.1220E+01 3.0602E-01 2.9199E-01 1.7445E-01 1.1896E-01 - 1.2589E+01 2.1540E-01 2.1160E-01 1.1750E-01 8.2825E-02 - 1.4125E+01 1.5206E-01 1.4997E-01 8.2464E-02 6.0688E-02 - 1.5849E+01 1.1131E-01 1.0910E-01 5.9230E-02 4.1951E-02 - 1.7783E+01 7.9374E-02 7.9591E-02 4.0851E-02 2.9276E-02 - 1.9953E+01 5.7923E-02 5.5257E-02 2.8062E-02 2.1048E-02 - 2.2387E+01 4.2045E-02 3.8605E-02 2.0289E-02 1.4730E-02 - 2.5119E+01 3.0002E-02 2.7227E-02 1.3064E-02 1.0314E-02 - 2.8184E+01 2.1191E-02 1.8866E-02 9.1321E-03 7.3181E-03 - 3.1623E+01 1.5697E-02 1.4127E-02 6.5961E-03 5.0153E-03 - 3.5481E+01 1.1227E-02 1.0057E-02 4.5428E-03 3.4696E-03 - 3.9811E+01 8.0590E-03 7.1604E-03 3.1338E-03 2.3848E-03 - 4.4668E+01 5.7565E-03 5.0863E-03 2.1494E-03 1.6230E-03 - 5.0119E+01 4.1016E-03 3.5937E-03 1.4612E-03 1.1138E-03 - 5.6234E+01 2.9349E-03 2.5362E-03 9.8936E-04 7.6161E-04 - 6.3096E+01 2.0963E-03 1.7934E-03 6.7119E-04 5.1628E-04 - 7.0795E+01 1.4932E-03 1.2639E-03 4.5565E-04 3.4960E-04 - 7.9433E+01 1.0613E-03 8.9250E-04 3.0804E-04 2.3680E-04 - 8.9125E+01 7.5742E-04 6.3237E-04 2.0683E-04 1.6113E-04 - 1.0000E+02 5.3870E-04 4.4685E-04 1.3831E-04 1.0762E-04 - 1.1220E+02 3.8364E-04 3.1425E-04 9.2586E-05 7.2296E-05 - 1.2589E+02 2.7356E-04 2.2105E-04 6.1575E-05 4.8178E-05 - 1.4125E+02 1.9445E-04 1.5549E-04 4.1175E-05 3.2129E-05 - 1.5849E+02 1.3772E-04 1.0928E-04 2.7462E-05 2.1438E-05 - 1.7783E+02 9.7672E-05 7.6828E-05 1.8112E-05 1.4286E-05 - 1.9953E+02 6.9293E-05 5.3665E-05 1.2005E-05 9.4844E-06 - 2.2387E+02 4.8754E-05 3.7449E-05 7.9454E-06 6.1646E-06 - 2.5119E+02 3.4425E-05 2.6320E-05 5.2412E-06 4.0753E-06 - 2.8184E+02 2.4225E-05 1.8368E-05 3.4142E-06 2.7675E-06 - 3.1623E+02 1.7065E-05 1.2732E-05 2.2661E-06 1.8054E-06 - 3.5481E+02 1.1989E-05 8.8859E-06 1.4973E-06 1.1842E-06 - 3.9811E+02 8.4080E-06 6.2045E-06 9.9031E-07 7.7542E-07 - 4.4668E+02 5.9223E-06 4.3149E-06 6.5201E-07 5.1005E-07 - 5.0119E+02 4.1521E-06 3.0080E-06 4.2233E-07 3.3626E-07 - 5.6234E+02 2.8983E-06 2.0811E-06 2.7810E-07 2.2163E-07 - 6.3096E+02 2.0262E-06 1.4386E-06 1.8343E-07 1.4684E-07 - 7.0795E+02 1.4170E-06 9.9677E-07 1.2230E-07 9.7335E-08 - 7.9433E+02 9.9739E-07 6.9285E-07 8.1270E-08 6.3701E-08 - 8.9125E+02 6.9920E-07 4.7846E-07 5.2993E-08 4.1709E-08 - 1.0000E+03 4.8555E-07 3.2985E-07 3.4735E-08 2.7560E-08 - 1.1220E+03 3.3819E-07 2.2672E-07 2.2765E-08 1.8205E-08 - 1.2589E+03 2.3487E-07 1.5624E-07 1.5130E-08 1.1711E-08 - 1.4125E+03 1.6335E-07 1.0800E-07 9.9628E-09 7.6965E-09 - 1.5849E+03 1.1362E-07 7.4517E-08 6.4573E-09 5.2254E-09 - 1.7783E+03 7.8822E-08 5.1549E-08 4.4031E-09 3.4429E-09 - 1.9953E+03 5.5039E-08 3.5431E-08 2.9641E-09 2.2747E-09 - 2.2387E+03 3.8103E-08 2.4369E-08 1.9536E-09 1.4999E-09 - 2.5119E+03 2.6329E-08 1.6710E-08 1.3117E-09 9.9925E-10 - 2.8184E+03 1.8446E-08 1.1368E-08 8.8036E-10 6.6807E-10 - 3.1623E+03 1.2753E-08 7.8420E-09 5.7096E-10 4.4221E-10 - 3.5481E+03 8.7476E-09 5.3374E-09 3.8087E-10 2.8157E-10 - 3.9811E+03 5.9858E-09 3.6383E-09 2.5396E-10 1.9023E-10 - 4.4668E+03 4.1289E-09 2.4581E-09 1.6527E-10 1.3014E-10 - 5.0119E+03 2.8328E-09 1.6611E-09 1.0989E-10 8.3258E-11 - 5.6234E+03 1.9153E-09 1.1410E-09 7.5352E-11 5.4861E-11 - 6.3096E+03 1.3181E-09 7.7048E-10 4.9613E-11 3.7146E-11 - 7.0795E+03 8.9586E-10 5.2250E-10 3.2829E-11 2.3734E-11 - 7.9433E+03 6.0778E-10 3.5111E-10 2.1690E-11 1.4883E-11 - 8.9125E+03 4.1102E-10 2.3592E-10 1.4372E-11 1.0124E-11 - 1.0000E+04 2.7724E-10 1.5618E-10 9.7014E-12 6.8445E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3811E+04 4.4461E+04 2.1454E+04 1.9944E+04 - 1.1220E-01 3.6088E+04 3.6718E+04 1.7943E+04 1.6576E+04 - 1.2589E-01 2.9557E+04 3.0100E+04 1.4826E+04 1.3585E+04 - 1.4125E-01 2.3993E+04 2.4487E+04 1.2109E+04 1.1011E+04 - 1.5849E-01 1.9393E+04 1.9655E+04 9.7433E+03 8.7994E+03 - 1.7783E-01 1.5518E+04 1.5658E+04 7.8523E+03 7.0107E+03 - 1.9953E-01 1.2185E+04 1.2340E+04 6.3386E+03 5.5538E+03 - 2.2387E-01 9.4592E+03 9.5311E+03 5.0375E+03 4.3685E+03 - 2.5119E-01 7.3043E+03 7.3595E+03 3.9806E+03 3.4139E+03 - 2.8184E-01 5.5378E+03 5.6223E+03 3.1216E+03 2.5966E+03 - 3.1623E-01 4.1506E+03 4.2332E+03 2.4067E+03 1.9516E+03 - 3.5481E-01 3.1342E+03 3.1852E+03 1.8277E+03 1.4949E+03 - 3.9811E-01 2.3584E+03 2.3900E+03 1.3884E+03 1.1339E+03 - 4.4668E-01 1.7442E+03 1.7662E+03 1.0331E+03 8.3667E+02 - 5.0119E-01 1.2755E+03 1.3032E+03 7.7178E+02 6.1793E+02 - 5.6234E-01 9.4134E+02 9.6410E+02 5.8691E+02 4.5977E+02 - 6.3096E-01 7.0743E+02 7.2287E+02 4.3906E+02 3.3576E+02 - 7.0795E-01 5.2783E+02 5.3906E+02 3.3346E+02 2.5080E+02 - 7.9433E-01 3.9021E+02 4.0369E+02 2.4680E+02 1.8695E+02 - 8.9125E-01 2.9019E+02 2.9568E+02 1.8233E+02 1.3583E+02 - 1.0000E+00 2.1736E+02 2.1192E+02 1.3428E+02 9.9473E+01 - 1.1220E+00 1.5883E+02 1.5697E+02 9.8528E+01 7.4440E+01 - 1.2589E+00 1.1698E+02 1.1564E+02 7.1915E+01 5.4251E+01 - 1.4125E+00 8.6663E+01 8.6228E+01 5.5432E+01 3.8741E+01 - 1.5849E+00 6.4267E+01 6.4976E+01 4.1326E+01 2.8203E+01 - 1.7783E+00 4.7703E+01 4.8602E+01 3.0527E+01 2.1815E+01 - 1.9953E+00 3.4810E+01 3.5244E+01 2.2184E+01 1.5755E+01 - 2.2387E+00 2.5429E+01 2.6318E+01 1.5825E+01 1.1355E+01 - 2.5119E+00 1.8434E+01 1.9660E+01 1.1585E+01 8.2405E+00 - 2.8184E+00 1.3976E+01 1.3838E+01 8.6672E+00 5.9154E+00 - 3.1623E+00 1.0358E+01 1.0238E+01 6.4330E+00 4.4886E+00 - 3.5481E+00 7.4027E+00 7.5558E+00 4.8435E+00 3.2836E+00 - 3.9811E+00 5.4098E+00 5.4731E+00 3.5305E+00 2.4549E+00 - 4.4668E+00 3.9866E+00 4.0128E+00 2.4784E+00 1.8134E+00 - 5.0119E+00 2.9440E+00 2.9251E+00 1.8113E+00 1.2488E+00 - 5.6234E+00 2.1519E+00 2.1016E+00 1.2793E+00 9.0815E-01 - 6.3096E+00 1.5516E+00 1.4901E+00 9.0922E-01 6.4841E-01 - 7.0795E+00 1.1150E+00 1.0534E+00 6.6615E-01 4.6963E-01 - 7.9433E+00 8.0430E-01 7.5417E-01 4.9066E-01 3.6283E-01 - 8.9125E+00 5.8447E-01 5.6121E-01 3.3036E-01 2.5633E-01 - 1.0000E+01 4.2559E-01 4.0676E-01 2.3406E-01 1.7210E-01 - 1.1220E+01 3.0470E-01 2.8653E-01 1.6507E-01 1.2611E-01 - 1.2589E+01 2.1871E-01 2.0608E-01 1.1667E-01 8.9287E-02 - 1.4125E+01 1.5678E-01 1.4631E-01 8.3795E-02 6.1404E-02 - 1.5849E+01 1.1148E-01 1.0612E-01 6.1269E-02 4.3178E-02 - 1.7783E+01 8.0661E-02 7.6977E-02 4.1890E-02 3.0241E-02 - 1.9953E+01 5.9030E-02 5.3717E-02 2.9487E-02 2.1545E-02 - 2.2387E+01 4.4115E-02 3.8804E-02 2.0768E-02 1.5756E-02 - 2.5119E+01 3.0511E-02 2.8997E-02 1.4415E-02 1.0337E-02 - 2.8184E+01 2.1526E-02 2.0008E-02 9.4987E-03 6.5470E-03 - 3.1623E+01 1.5868E-02 1.4352E-02 6.8187E-03 5.2197E-03 - 3.5481E+01 1.1366E-02 1.0223E-02 4.7198E-03 3.6078E-03 - 3.9811E+01 8.1393E-03 7.2622E-03 3.2579E-03 2.4829E-03 - 4.4668E+01 5.8264E-03 5.1439E-03 2.2321E-03 1.6979E-03 - 5.0119E+01 4.1660E-03 3.6419E-03 1.5279E-03 1.1642E-03 - 5.6234E+01 2.9778E-03 2.5817E-03 1.0437E-03 8.0033E-04 - 6.3096E+01 2.1255E-03 1.8291E-03 7.0996E-04 5.5114E-04 - 7.0795E+01 1.5102E-03 1.2947E-03 4.7961E-04 3.7405E-04 - 7.9433E+01 1.0791E-03 9.1580E-04 3.2499E-04 2.5119E-04 - 8.9125E+01 7.7236E-04 6.4344E-04 2.2126E-04 1.7002E-04 - 1.0000E+02 5.4731E-04 4.5607E-04 1.4875E-04 1.1528E-04 - 1.1220E+02 3.8879E-04 3.2085E-04 9.9936E-05 7.7591E-05 - 1.2589E+02 2.7644E-04 2.2598E-04 6.6818E-05 5.2156E-05 - 1.4125E+02 1.9646E-04 1.5907E-04 4.4542E-05 3.5003E-05 - 1.5849E+02 1.3936E-04 1.1138E-04 2.9667E-05 2.3265E-05 - 1.7783E+02 9.8415E-05 7.7739E-05 1.9616E-05 1.5406E-05 - 1.9953E+02 6.9405E-05 5.4509E-05 1.3012E-05 1.0204E-05 - 2.2387E+02 4.9234E-05 3.8170E-05 8.6830E-06 6.8159E-06 - 2.5119E+02 3.4669E-05 2.6660E-05 5.7236E-06 4.4911E-06 - 2.8184E+02 2.4339E-05 1.8794E-05 3.7731E-06 2.9213E-06 - 3.1623E+02 1.7249E-05 1.3037E-05 2.4821E-06 1.9634E-06 - 3.5481E+02 1.2126E-05 9.0425E-06 1.6436E-06 1.2922E-06 - 3.9811E+02 8.5097E-06 6.2847E-06 1.0844E-06 8.4454E-07 - 4.4668E+02 5.9698E-06 4.3738E-06 7.0268E-07 5.5606E-07 - 5.0119E+02 4.1788E-06 3.0343E-06 4.6649E-07 3.6664E-07 - 5.6234E+02 2.9338E-06 2.1084E-06 3.0265E-07 2.4026E-07 - 6.3096E+02 2.0487E-06 1.4613E-06 2.0084E-07 1.5779E-07 - 7.0795E+02 1.4299E-06 1.0098E-06 1.3125E-07 1.0331E-07 - 7.9433E+02 1.0012E-06 7.0086E-07 8.5321E-08 6.8603E-08 - 8.9125E+02 6.9876E-07 4.8378E-07 5.5939E-08 4.4768E-08 - 1.0000E+03 4.8761E-07 3.3171E-07 3.7058E-08 2.8637E-08 - 1.1220E+03 3.3963E-07 2.2792E-07 2.4501E-08 1.8975E-08 - 1.2589E+03 2.3680E-07 1.5702E-07 1.6037E-08 1.2351E-08 - 1.4125E+03 1.6496E-07 1.0888E-07 1.0445E-08 8.0175E-09 - 1.5849E+03 1.1418E-07 7.5378E-08 6.8584E-09 5.3786E-09 - 1.7783E+03 7.8895E-08 5.2206E-08 4.6246E-09 3.6264E-09 - 1.9953E+03 5.5223E-08 3.5630E-08 3.0395E-09 2.3877E-09 - 2.2387E+03 3.8173E-08 2.4415E-08 2.0132E-09 1.5716E-09 - 2.5119E+03 2.6461E-08 1.6656E-08 1.3733E-09 1.0352E-09 - 2.8184E+03 1.8169E-08 1.1341E-08 9.0184E-10 6.6620E-10 - 3.1623E+03 1.2667E-08 7.8414E-09 5.8076E-10 4.4335E-10 - 3.5481E+03 8.7063E-09 5.3260E-09 3.8612E-10 2.9593E-10 - 3.9811E+03 5.9640E-09 3.6246E-09 2.6018E-10 2.0306E-10 - 4.4668E+03 4.0861E-09 2.4674E-09 1.7149E-10 1.3411E-10 - 5.0119E+03 2.8153E-09 1.6735E-09 1.1108E-10 8.7998E-11 - 5.6234E+03 1.9415E-09 1.1418E-09 7.1789E-11 5.6302E-11 - 6.3096E+03 1.3207E-09 7.7599E-10 4.8624E-11 3.6342E-11 - 7.0795E+03 8.9814E-10 5.2318E-10 3.3236E-11 2.3327E-11 - 7.9433E+03 6.1043E-10 3.5219E-10 2.2480E-11 1.4890E-11 - 8.9125E+03 4.1557E-10 2.3528E-10 1.4539E-11 1.0031E-11 - 1.0000E+04 2.8060E-10 1.5792E-10 9.1538E-12 6.8398E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3365E+04 4.3732E+04 2.0272E+04 2.0024E+04 - 1.1220E-01 3.5770E+04 3.6014E+04 1.7228E+04 1.6647E+04 - 1.2589E-01 2.9227E+04 2.9177E+04 1.4182E+04 1.3638E+04 - 1.4125E-01 2.3887E+04 2.3619E+04 1.1650E+04 1.1220E+04 - 1.5849E-01 1.9248E+04 1.8866E+04 9.4364E+03 8.9086E+03 - 1.7783E-01 1.5234E+04 1.4784E+04 7.4779E+03 7.0247E+03 - 1.9953E-01 1.1939E+04 1.1656E+04 5.9049E+03 5.6528E+03 - 2.2387E-01 9.3443E+03 9.0165E+03 4.7124E+03 4.3810E+03 - 2.5119E-01 7.1301E+03 6.8543E+03 3.7161E+03 3.3596E+03 - 2.8184E-01 5.3454E+03 5.1968E+03 2.8544E+03 2.5734E+03 - 3.1623E-01 4.0444E+03 3.9067E+03 2.2112E+03 1.9615E+03 - 3.5481E-01 3.0527E+03 2.9249E+03 1.6823E+03 1.5085E+03 - 3.9811E-01 2.2904E+03 2.2006E+03 1.2453E+03 1.1337E+03 - 4.4668E-01 1.6845E+03 1.6270E+03 9.2923E+02 8.4436E+02 - 5.0119E-01 1.2562E+03 1.2032E+03 6.8385E+02 6.1658E+02 - 5.6234E-01 9.3661E+02 8.8902E+02 5.0752E+02 4.5322E+02 - 6.3096E-01 6.7999E+02 6.4988E+02 3.7535E+02 3.4035E+02 - 7.0795E-01 5.0836E+02 4.8796E+02 2.8504E+02 2.5727E+02 - 7.9433E-01 3.8284E+02 3.5106E+02 2.1600E+02 1.8697E+02 - 8.9125E-01 2.8318E+02 2.5541E+02 1.5898E+02 1.3087E+02 - 1.0000E+00 2.0705E+02 1.9491E+02 1.1717E+02 9.9816E+01 - 1.1220E+00 1.5434E+02 1.4633E+02 8.5327E+01 7.1823E+01 - 1.2589E+00 1.1620E+02 1.0710E+02 6.2590E+01 5.4572E+01 - 1.4125E+00 8.6469E+01 7.7902E+01 4.6087E+01 4.1251E+01 - 1.5849E+00 6.3462E+01 5.7668E+01 3.4603E+01 3.0494E+01 - 1.7783E+00 4.7536E+01 4.3184E+01 2.6744E+01 2.2614E+01 - 1.9953E+00 3.4640E+01 3.2357E+01 1.9716E+01 1.5888E+01 - 2.2387E+00 2.5862E+01 2.3991E+01 1.4925E+01 1.1290E+01 - 2.5119E+00 1.9082E+01 1.7170E+01 1.0739E+01 8.7378E+00 - 2.8184E+00 1.3714E+01 1.2158E+01 7.4422E+00 6.5342E+00 - 3.1623E+00 1.0248E+01 9.3335E+00 5.7034E+00 4.7656E+00 - 3.5481E+00 7.4287E+00 6.7141E+00 4.2982E+00 3.4602E+00 - 3.9811E+00 5.4593E+00 5.0281E+00 3.1414E+00 2.5475E+00 - 4.4668E+00 3.9783E+00 3.7078E+00 2.3131E+00 1.8795E+00 - 5.0119E+00 2.9263E+00 2.6720E+00 1.6829E+00 1.3438E+00 - 5.6234E+00 2.1057E+00 1.9880E+00 1.2118E+00 9.2605E-01 - 6.3096E+00 1.5418E+00 1.4545E+00 8.8281E-01 6.6215E-01 - 7.0795E+00 1.1308E+00 1.0619E+00 6.1740E-01 4.8683E-01 - 7.9433E+00 7.9327E-01 7.5580E-01 4.3454E-01 3.6365E-01 - 8.9125E+00 5.8420E-01 5.4243E-01 3.1185E-01 2.6269E-01 - 1.0000E+01 4.2740E-01 3.9565E-01 2.3127E-01 1.7894E-01 - 1.1220E+01 3.0918E-01 2.8207E-01 1.6207E-01 1.2541E-01 - 1.2589E+01 2.2359E-01 1.9860E-01 1.1480E-01 8.4095E-02 - 1.4125E+01 1.5960E-01 1.4533E-01 8.0342E-02 5.8376E-02 - 1.5849E+01 1.1544E-01 1.0340E-01 5.6225E-02 4.1588E-02 - 1.7783E+01 8.1885E-02 7.4214E-02 4.0411E-02 3.0639E-02 - 1.9953E+01 5.6912E-02 5.1278E-02 2.7630E-02 2.0167E-02 - 2.2387E+01 4.1195E-02 3.6525E-02 1.9876E-02 1.3316E-02 - 2.5119E+01 2.9356E-02 2.6735E-02 1.3835E-02 9.8800E-03 - 2.8184E+01 2.0858E-02 1.8399E-02 9.2680E-03 6.8329E-03 - 3.1623E+01 1.5893E-02 1.4416E-02 6.8566E-03 5.2059E-03 - 3.5481E+01 1.1384E-02 1.0242E-02 4.7428E-03 3.6079E-03 - 3.9811E+01 8.1682E-03 7.2812E-03 3.2643E-03 2.4879E-03 - 4.4668E+01 5.8544E-03 5.1886E-03 2.2353E-03 1.7162E-03 - 5.0119E+01 4.1798E-03 3.6859E-03 1.5274E-03 1.1773E-03 - 5.6234E+01 2.9896E-03 2.6128E-03 1.0447E-03 8.0066E-04 - 6.3096E+01 2.1351E-03 1.8432E-03 7.1647E-04 5.5114E-04 - 7.0795E+01 1.5175E-03 1.2984E-03 4.8918E-04 3.7439E-04 - 7.9433E+01 1.0835E-03 9.2021E-04 3.2983E-04 2.5045E-04 - 8.9125E+01 7.7538E-04 6.5070E-04 2.2220E-04 1.7016E-04 - 1.0000E+02 5.4809E-04 4.5764E-04 1.4836E-04 1.1556E-04 - 1.1220E+02 3.8984E-04 3.2245E-04 9.9537E-05 7.7194E-05 - 1.2589E+02 2.7728E-04 2.2643E-04 6.7057E-05 5.1533E-05 - 1.4125E+02 1.9657E-04 1.5966E-04 4.4820E-05 3.4833E-05 - 1.5849E+02 1.3920E-04 1.1217E-04 2.9594E-05 2.3439E-05 - 1.7783E+02 9.8517E-05 7.8394E-05 1.9614E-05 1.5532E-05 - 1.9953E+02 6.9647E-05 5.4696E-05 1.3047E-05 1.0313E-05 - 2.2387E+02 4.9165E-05 3.8437E-05 8.6455E-06 6.8094E-06 - 2.5119E+02 3.4702E-05 2.7004E-05 5.6764E-06 4.4949E-06 - 2.8184E+02 2.4383E-05 1.8788E-05 3.7849E-06 2.9561E-06 - 3.1623E+02 1.7194E-05 1.3050E-05 2.4806E-06 1.9503E-06 - 3.5481E+02 1.2092E-05 9.0848E-06 1.6294E-06 1.2790E-06 - 3.9811E+02 8.5053E-06 6.3085E-06 1.0741E-06 8.4441E-07 - 4.4668E+02 5.9576E-06 4.3853E-06 6.9885E-07 5.5644E-07 - 5.0119E+02 4.1829E-06 3.0404E-06 4.5571E-07 3.6540E-07 - 5.6234E+02 2.9361E-06 2.1064E-06 3.0441E-07 2.3842E-07 - 6.3096E+02 2.0510E-06 1.4541E-06 2.0126E-07 1.5735E-07 - 7.0795E+02 1.4316E-06 1.0040E-06 1.3077E-07 1.0315E-07 - 7.9433E+02 1.0006E-06 6.9436E-07 8.5232E-08 6.7888E-08 - 8.9125E+02 6.9780E-07 4.7748E-07 5.5920E-08 4.4392E-08 - 1.0000E+03 4.8713E-07 3.3153E-07 3.6834E-08 2.9245E-08 - 1.1220E+03 3.3922E-07 2.2962E-07 2.4359E-08 1.9228E-08 - 1.2589E+03 2.3639E-07 1.5662E-07 1.5825E-08 1.2662E-08 - 1.4125E+03 1.6531E-07 1.0771E-07 1.0488E-08 8.3951E-09 - 1.5849E+03 1.1549E-07 7.4833E-08 6.9666E-09 5.4753E-09 - 1.7783E+03 7.9767E-08 5.1598E-08 4.5802E-09 3.5328E-09 - 1.9953E+03 5.5399E-08 3.5393E-08 2.9732E-09 2.4203E-09 - 2.2387E+03 3.8433E-08 2.4195E-08 2.0156E-09 1.6244E-09 - 2.5119E+03 2.6450E-08 1.6592E-08 1.3582E-09 1.0274E-09 - 2.8184E+03 1.8244E-08 1.1389E-08 9.1127E-10 6.9110E-10 - 3.1623E+03 1.2732E-08 7.8403E-09 5.9097E-10 4.5863E-10 - 3.5481E+03 8.7125E-09 5.3116E-09 3.9235E-10 3.0303E-10 - 3.9811E+03 6.0063E-09 3.6405E-09 2.6125E-10 1.9991E-10 - 4.4668E+03 4.1276E-09 2.4784E-09 1.7487E-10 1.3196E-10 - 5.0119E+03 2.8184E-09 1.6865E-09 1.1331E-10 8.5454E-11 - 5.6234E+03 1.9255E-09 1.1520E-09 7.4160E-11 5.5328E-11 - 6.3096E+03 1.3125E-09 7.7253E-10 5.1359E-11 3.5652E-11 - 7.0795E+03 8.9712E-10 5.1998E-10 3.2923E-11 2.3562E-11 - 7.9433E+03 6.1081E-10 3.4849E-10 2.1425E-11 1.5952E-11 - 8.9125E+03 4.1191E-10 2.3355E-10 1.4617E-11 1.0380E-11 - 1.0000E+04 2.7932E-10 1.5552E-10 9.7618E-12 6.9659E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2934E+04 4.2486E+04 1.9817E+04 1.9923E+04 - 1.1220E-01 3.5431E+04 3.4800E+04 1.6523E+04 1.6493E+04 - 1.2589E-01 2.8697E+04 2.8168E+04 1.3475E+04 1.3462E+04 - 1.4125E-01 2.3322E+04 2.2906E+04 1.0992E+04 1.0999E+04 - 1.5849E-01 1.8836E+04 1.8343E+04 8.9571E+03 8.9041E+03 - 1.7783E-01 1.4907E+04 1.4336E+04 7.1526E+03 7.0305E+03 - 1.9953E-01 1.1665E+04 1.1141E+04 5.5599E+03 5.5320E+03 - 2.2387E-01 9.0637E+03 8.5965E+03 4.3450E+03 4.3552E+03 - 2.5119E-01 6.9403E+03 6.5590E+03 3.4266E+03 3.3813E+03 - 2.8184E-01 5.2978E+03 4.8988E+03 2.6522E+03 2.5624E+03 - 3.1623E-01 4.0159E+03 3.6605E+03 2.0036E+03 1.9470E+03 - 3.5481E-01 3.0058E+03 2.7359E+03 1.4876E+03 1.4849E+03 - 3.9811E-01 2.2240E+03 2.0403E+03 1.1373E+03 1.1302E+03 - 4.4668E-01 1.6318E+03 1.5079E+03 8.4588E+02 8.4113E+02 - 5.0119E-01 1.2227E+03 1.0981E+03 6.2485E+02 6.2871E+02 - 5.6234E-01 9.0987E+02 8.1302E+02 4.6954E+02 4.7051E+02 - 6.3096E-01 6.7145E+02 5.8789E+02 3.4513E+02 3.4077E+02 - 7.0795E-01 4.9513E+02 4.2880E+02 2.5041E+02 2.4227E+02 - 7.9433E-01 3.6531E+02 3.1601E+02 1.8194E+02 1.8376E+02 - 8.9125E-01 2.7220E+02 2.2991E+02 1.3679E+02 1.4107E+02 - 1.0000E+00 2.0376E+02 1.6872E+02 1.0015E+02 1.0274E+02 - 1.1220E+00 1.5320E+02 1.2631E+02 7.2470E+01 7.5024E+01 - 1.2589E+00 1.1351E+02 9.2702E+01 5.4607E+01 5.6924E+01 - 1.4125E+00 8.5179E+01 6.7991E+01 4.0378E+01 4.2817E+01 - 1.5849E+00 6.3116E+01 5.2270E+01 2.9193E+01 3.1317E+01 - 1.7783E+00 4.8032E+01 3.9355E+01 2.1436E+01 2.3807E+01 - 1.9953E+00 3.6032E+01 2.8564E+01 1.6351E+01 1.7674E+01 - 2.2387E+00 2.6717E+01 2.1184E+01 1.2412E+01 1.2279E+01 - 2.5119E+00 1.9299E+01 1.6066E+01 9.0179E+00 8.8082E+00 - 2.8184E+00 1.3961E+01 1.1536E+01 6.6403E+00 6.7185E+00 - 3.1623E+00 1.0423E+01 8.5303E+00 5.1396E+00 4.9532E+00 - 3.5481E+00 7.7021E+00 6.2591E+00 3.6917E+00 3.6361E+00 - 3.9811E+00 5.6182E+00 4.6869E+00 2.6990E+00 2.6829E+00 - 4.4668E+00 4.1211E+00 3.4843E+00 2.0057E+00 1.9403E+00 - 5.0119E+00 3.0222E+00 2.6022E+00 1.4421E+00 1.4134E+00 - 5.6234E+00 2.2342E+00 1.8876E+00 1.0694E+00 1.0126E+00 - 6.3096E+00 1.6395E+00 1.3505E+00 8.2834E-01 7.1042E-01 - 7.0795E+00 1.1606E+00 9.8074E-01 5.7764E-01 5.0239E-01 - 7.9433E+00 8.3037E-01 7.2925E-01 4.1039E-01 3.6423E-01 - 8.9125E+00 6.1477E-01 5.4571E-01 3.1376E-01 2.6507E-01 - 1.0000E+01 4.2607E-01 3.9044E-01 2.2354E-01 1.8022E-01 - 1.1220E+01 3.0239E-01 2.8031E-01 1.5668E-01 1.2937E-01 - 1.2589E+01 2.1939E-01 2.0619E-01 1.1058E-01 9.1185E-02 - 1.4125E+01 1.6031E-01 1.5065E-01 7.7898E-02 6.2988E-02 - 1.5849E+01 1.1676E-01 1.0668E-01 5.6068E-02 4.4239E-02 - 1.7783E+01 8.5657E-02 7.6088E-02 3.9185E-02 3.1326E-02 - 1.9953E+01 6.0914E-02 5.4837E-02 2.5938E-02 2.3342E-02 - 2.2387E+01 4.2931E-02 3.8678E-02 1.9125E-02 1.5456E-02 - 2.5119E+01 3.0492E-02 2.7582E-02 1.3388E-02 1.0384E-02 - 2.8184E+01 2.2231E-02 1.9899E-02 9.3375E-03 7.2642E-03 - 3.1623E+01 1.5859E-02 1.4358E-02 6.8485E-03 5.1965E-03 - 3.5481E+01 1.1365E-02 1.0224E-02 4.7180E-03 3.5950E-03 - 3.9811E+01 8.1278E-03 7.2582E-03 3.2484E-03 2.4833E-03 - 4.4668E+01 5.8156E-03 5.1542E-03 2.2320E-03 1.7094E-03 - 5.0119E+01 4.1687E-03 3.6640E-03 1.5310E-03 1.1772E-03 - 5.6234E+01 2.9806E-03 2.5953E-03 1.0449E-03 8.0641E-04 - 6.3096E+01 2.1230E-03 1.8297E-03 7.1021E-04 5.4912E-04 - 7.0795E+01 1.5092E-03 1.2902E-03 4.8488E-04 3.7440E-04 - 7.9433E+01 1.0776E-03 9.1226E-04 3.2774E-04 2.5161E-04 - 8.9125E+01 7.6770E-04 6.4574E-04 2.1846E-04 1.6867E-04 - 1.0000E+02 5.4832E-04 4.5708E-04 1.4806E-04 1.1520E-04 - 1.1220E+02 3.9063E-04 3.2190E-04 9.9405E-05 7.7806E-05 - 1.2589E+02 2.7768E-04 2.2636E-04 6.6765E-05 5.2031E-05 - 1.4125E+02 1.9631E-04 1.5896E-04 4.4739E-05 3.4696E-05 - 1.5849E+02 1.3863E-04 1.1158E-04 2.9854E-05 2.3437E-05 - 1.7783E+02 9.8500E-05 7.8324E-05 1.9833E-05 1.5550E-05 - 1.9953E+02 7.0007E-05 5.4889E-05 1.3075E-05 1.0182E-05 - 2.2387E+02 4.9554E-05 3.8324E-05 8.5775E-06 6.7987E-06 - 2.5119E+02 3.4869E-05 2.6763E-05 5.7312E-06 4.4917E-06 - 2.8184E+02 2.4540E-05 1.8533E-05 3.8580E-06 2.9278E-06 - 3.1623E+02 1.7188E-05 1.2981E-05 2.4959E-06 1.9518E-06 - 3.5481E+02 1.2064E-05 9.0660E-06 1.6271E-06 1.2792E-06 - 3.9811E+02 8.5222E-06 6.3229E-06 1.0648E-06 8.3850E-07 - 4.4668E+02 5.9605E-06 4.3878E-06 7.0172E-07 5.5746E-07 - 5.0119E+02 4.1619E-06 3.0348E-06 4.6117E-07 3.6905E-07 - 5.6234E+02 2.9198E-06 2.1047E-06 3.0185E-07 2.4150E-07 - 6.3096E+02 2.0346E-06 1.4564E-06 1.9669E-07 1.5831E-07 - 7.0795E+02 1.4271E-06 1.0089E-06 1.2928E-07 1.0332E-07 - 7.9433E+02 1.0015E-06 6.9600E-07 8.6006E-08 6.7573E-08 - 8.9125E+02 6.9780E-07 4.8130E-07 5.6091E-08 4.4499E-08 - 1.0000E+03 4.8666E-07 3.3278E-07 3.6491E-08 2.9058E-08 - 1.1220E+03 3.3849E-07 2.2942E-07 2.3994E-08 1.9034E-08 - 1.2589E+03 2.3548E-07 1.5917E-07 1.5953E-08 1.2489E-08 - 1.4125E+03 1.6361E-07 1.0859E-07 1.0622E-08 8.2744E-09 - 1.5849E+03 1.1394E-07 7.4264E-08 6.9134E-09 5.5401E-09 - 1.7783E+03 7.9051E-08 5.1576E-08 4.5046E-09 3.5524E-09 - 1.9953E+03 5.4994E-08 3.5554E-08 3.0425E-09 2.3521E-09 - 2.2387E+03 3.8166E-08 2.4452E-08 2.0492E-09 1.5460E-09 - 2.5119E+03 2.6584E-08 1.6711E-08 1.3646E-09 1.0079E-09 - 2.8184E+03 1.8319E-08 1.1400E-08 9.0019E-10 6.8072E-10 - 3.1623E+03 1.2678E-08 7.8897E-09 5.8602E-10 4.4044E-10 - 3.5481E+03 8.6935E-09 5.3767E-09 3.8693E-10 2.8485E-10 - 3.9811E+03 5.9640E-09 3.6480E-09 2.5063E-10 1.8893E-10 - 4.4668E+03 4.0883E-09 2.4706E-09 1.6502E-10 1.2834E-10 - 5.0119E+03 2.8214E-09 1.6820E-09 1.1458E-10 8.6078E-11 - 5.6234E+03 1.9219E-09 1.1453E-09 7.7611E-11 5.6371E-11 - 6.3096E+03 1.3135E-09 7.7162E-10 5.0818E-11 3.7402E-11 - 7.0795E+03 8.9596E-10 5.2384E-10 3.2510E-11 2.4409E-11 - 7.9433E+03 6.0914E-10 3.5308E-10 2.2013E-11 1.6423E-11 - 8.9125E+03 4.1436E-10 2.3724E-10 1.4552E-11 1.1081E-11 - 1.0000E+04 2.7778E-10 1.5979E-10 9.6592E-12 6.8721E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2883E+04 4.2069E+04 1.9351E+04 1.9892E+04 - 1.1220E-01 3.5015E+04 3.4426E+04 1.6131E+04 1.6692E+04 - 1.2589E-01 2.8780E+04 2.7810E+04 1.3270E+04 1.3726E+04 - 1.4125E-01 2.3432E+04 2.2369E+04 1.0884E+04 1.1026E+04 - 1.5849E-01 1.8871E+04 1.7866E+04 8.6936E+03 8.8857E+03 - 1.7783E-01 1.4945E+04 1.3992E+04 6.8740E+03 7.1042E+03 - 1.9953E-01 1.1616E+04 1.0868E+04 5.4632E+03 5.5809E+03 - 2.2387E-01 9.0308E+03 8.3880E+03 4.2914E+03 4.3839E+03 - 2.5119E-01 6.8730E+03 6.4006E+03 3.3831E+03 3.3422E+03 - 2.8184E-01 5.2119E+03 4.7937E+03 2.5923E+03 2.5033E+03 - 3.1623E-01 3.9394E+03 3.5601E+03 1.9203E+03 1.9478E+03 - 3.5481E-01 2.9569E+03 2.6662E+03 1.4607E+03 1.4939E+03 - 3.9811E-01 2.2189E+03 1.9752E+03 1.0977E+03 1.1082E+03 - 4.4668E-01 1.6496E+03 1.4325E+03 8.1677E+02 8.3308E+02 - 5.0119E-01 1.2041E+03 1.0542E+03 6.1111E+02 6.3198E+02 - 5.6234E-01 9.0619E+02 7.7073E+02 4.4788E+02 4.7537E+02 - 6.3096E-01 6.7636E+02 5.5724E+02 3.2683E+02 3.5639E+02 - 7.0795E-01 4.8270E+02 4.1562E+02 2.3417E+02 2.5946E+02 - 7.9433E-01 3.6320E+02 3.0523E+02 1.7028E+02 1.9088E+02 - 8.9125E-01 2.8361E+02 2.2535E+02 1.2784E+02 1.4582E+02 - 1.0000E+00 2.0525E+02 1.6339E+02 9.1004E+01 1.0519E+02 - 1.1220E+00 1.5012E+02 1.1999E+02 6.7239E+01 7.8795E+01 - 1.2589E+00 1.1223E+02 8.9113E+01 4.9618E+01 5.7363E+01 - 1.4125E+00 8.2796E+01 6.7798E+01 3.6060E+01 4.2741E+01 - 1.5849E+00 6.1421E+01 5.0119E+01 2.6362E+01 3.1748E+01 - 1.7783E+00 4.6365E+01 3.5790E+01 2.0087E+01 2.3291E+01 - 1.9953E+00 3.5081E+01 2.6824E+01 1.5208E+01 1.7342E+01 - 2.2387E+00 2.6218E+01 2.0055E+01 1.1166E+01 1.2756E+01 - 2.5119E+00 1.8977E+01 1.5015E+01 8.8221E+00 9.7774E+00 - 2.8184E+00 1.3920E+01 1.1193E+01 6.4974E+00 7.2776E+00 - 3.1623E+00 1.0245E+01 8.1289E+00 4.7831E+00 5.2056E+00 - 3.5481E+00 7.6748E+00 6.1553E+00 3.5278E+00 3.8415E+00 - 3.9811E+00 5.6511E+00 4.5359E+00 2.4903E+00 2.7521E+00 - 4.4668E+00 4.1288E+00 3.3084E+00 1.8620E+00 1.9513E+00 - 5.0119E+00 2.9508E+00 2.4375E+00 1.3770E+00 1.4091E+00 - 5.6234E+00 2.1515E+00 1.8537E+00 9.7567E-01 1.0215E+00 - 6.3096E+00 1.6326E+00 1.3621E+00 7.4607E-01 7.4580E-01 - 7.0795E+00 1.1280E+00 9.7802E-01 5.7110E-01 5.2387E-01 - 7.9433E+00 8.2414E-01 6.9768E-01 3.9780E-01 3.6181E-01 - 8.9125E+00 6.2484E-01 5.1567E-01 2.7747E-01 2.5700E-01 - 1.0000E+01 4.3352E-01 3.7457E-01 2.0969E-01 1.8296E-01 - 1.1220E+01 3.1437E-01 2.6378E-01 1.5698E-01 1.2858E-01 - 1.2589E+01 2.2832E-01 1.9005E-01 1.0875E-01 8.9251E-02 - 1.4125E+01 1.6314E-01 1.4210E-01 7.7336E-02 6.3331E-02 - 1.5849E+01 1.1635E-01 1.0375E-01 5.7088E-02 4.5824E-02 - 1.7783E+01 8.5798E-02 7.4407E-02 3.9571E-02 3.0997E-02 - 1.9953E+01 6.1614E-02 5.4517E-02 2.6953E-02 2.1279E-02 - 2.2387E+01 4.3046E-02 4.0723E-02 1.9454E-02 1.4852E-02 - 2.5119E+01 3.0512E-02 2.7801E-02 1.3119E-02 1.0854E-02 - 2.8184E+01 2.1962E-02 1.9730E-02 8.8420E-03 7.3865E-03 - 3.1623E+01 1.5843E-02 1.4414E-02 6.8487E-03 5.1991E-03 - 3.5481E+01 1.1376E-02 1.0231E-02 4.7279E-03 3.5908E-03 - 3.9811E+01 8.1419E-03 7.2739E-03 3.2657E-03 2.4695E-03 - 4.4668E+01 5.8224E-03 5.1669E-03 2.2363E-03 1.7141E-03 - 5.0119E+01 4.1714E-03 3.6666E-03 1.5260E-03 1.1717E-03 - 5.6234E+01 2.9877E-03 2.6010E-03 1.0402E-03 7.9918E-04 - 6.3096E+01 2.1372E-03 1.8331E-03 7.1007E-04 5.5050E-04 - 7.0795E+01 1.5221E-03 1.2965E-03 4.8478E-04 3.7448E-04 - 7.9433E+01 1.0817E-03 9.1636E-04 3.2728E-04 2.5544E-04 - 8.9125E+01 7.7156E-04 6.4786E-04 2.2324E-04 1.7359E-04 - 1.0000E+02 5.4891E-04 4.5663E-04 1.4831E-04 1.1583E-04 - 1.1220E+02 3.8935E-04 3.2148E-04 9.9560E-05 7.8069E-05 - 1.2589E+02 2.7674E-04 2.2635E-04 6.6343E-05 5.2239E-05 - 1.4125E+02 1.9658E-04 1.5894E-04 4.4204E-05 3.4860E-05 - 1.5849E+02 1.3869E-04 1.1131E-04 2.9687E-05 2.3171E-05 - 1.7783E+02 9.8366E-05 7.7946E-05 1.9822E-05 1.5333E-05 - 1.9953E+02 6.9738E-05 5.4634E-05 1.3081E-05 1.0216E-05 - 2.2387E+02 4.9211E-05 3.8283E-05 8.5598E-06 6.8158E-06 - 2.5119E+02 3.4605E-05 2.6692E-05 5.6873E-06 4.5327E-06 - 2.8184E+02 2.4444E-05 1.8691E-05 3.7700E-06 2.9910E-06 - 3.1623E+02 1.7242E-05 1.3038E-05 2.4753E-06 1.9715E-06 - 3.5481E+02 1.2084E-05 9.0805E-06 1.6218E-06 1.3010E-06 - 3.9811E+02 8.4670E-06 6.3057E-06 1.0673E-06 8.4465E-07 - 4.4668E+02 5.9538E-06 4.3703E-06 7.0714E-07 5.5386E-07 - 5.0119E+02 4.1818E-06 3.0211E-06 4.6154E-07 3.6373E-07 - 5.6234E+02 2.9264E-06 2.1000E-06 3.0401E-07 2.4180E-07 - 6.3096E+02 2.0408E-06 1.4536E-06 1.9742E-07 1.5849E-07 - 7.0795E+02 1.4266E-06 1.0092E-06 1.2896E-07 1.0375E-07 - 7.9433E+02 1.0029E-06 6.9630E-07 8.5561E-08 6.8758E-08 - 8.9125E+02 7.0128E-07 4.7866E-07 5.6502E-08 4.5038E-08 - 1.0000E+03 4.8700E-07 3.3155E-07 3.6899E-08 2.9390E-08 - 1.1220E+03 3.3984E-07 2.2929E-07 2.4120E-08 1.9195E-08 - 1.2589E+03 2.3649E-07 1.5813E-07 1.5569E-08 1.2529E-08 - 1.4125E+03 1.6428E-07 1.0831E-07 1.0333E-08 8.0383E-09 - 1.5849E+03 1.1443E-07 7.4267E-08 6.8695E-09 5.3773E-09 - 1.7783E+03 7.9069E-08 5.1627E-08 4.5316E-09 3.5897E-09 - 1.9953E+03 5.5194E-08 3.5631E-08 3.0484E-09 2.3763E-09 - 2.2387E+03 3.8454E-08 2.4481E-08 2.0048E-09 1.5918E-09 - 2.5119E+03 2.6538E-08 1.6820E-08 1.3129E-09 1.0547E-09 - 2.8184E+03 1.8291E-08 1.1490E-08 8.9156E-10 6.8338E-10 - 3.1623E+03 1.2747E-08 7.8909E-09 5.9016E-10 4.6074E-10 - 3.5481E+03 8.7490E-09 5.3825E-09 3.9553E-10 3.0645E-10 - 3.9811E+03 6.0158E-09 3.6613E-09 2.6319E-10 2.0210E-10 - 4.4668E+03 4.1058E-09 2.4873E-09 1.6829E-10 1.3139E-10 - 5.0119E+03 2.8079E-09 1.6849E-09 1.0935E-10 8.3308E-11 - 5.6234E+03 1.9231E-09 1.1484E-09 7.3645E-11 5.5825E-11 - 6.3096E+03 1.3092E-09 7.7216E-10 4.9288E-11 3.7626E-11 - 7.0795E+03 8.9419E-10 5.2001E-10 3.2126E-11 2.3788E-11 - 7.9433E+03 6.0973E-10 3.5193E-10 2.1719E-11 1.5304E-11 - 8.9125E+03 4.1038E-10 2.3640E-10 1.4904E-11 1.0205E-11 - 1.0000E+04 2.7655E-10 1.5889E-10 9.9296E-12 6.6600E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3250E+04 4.2514E+04 1.9626E+04 1.9942E+04 - 1.1220E-01 3.5423E+04 3.4655E+04 1.6474E+04 1.6699E+04 - 1.2589E-01 2.8876E+04 2.7971E+04 1.3576E+04 1.3679E+04 - 1.4125E-01 2.3471E+04 2.2557E+04 1.1010E+04 1.1075E+04 - 1.5849E-01 1.8985E+04 1.8026E+04 8.9129E+03 8.9804E+03 - 1.7783E-01 1.5043E+04 1.4214E+04 7.0734E+03 7.1657E+03 - 1.9953E-01 1.1836E+04 1.1097E+04 5.5420E+03 5.6691E+03 - 2.2387E-01 9.2255E+03 8.5650E+03 4.3792E+03 4.5171E+03 - 2.5119E-01 7.0883E+03 6.5531E+03 3.4302E+03 3.4870E+03 - 2.8184E-01 5.4134E+03 4.9628E+03 2.6528E+03 2.6338E+03 - 3.1623E-01 4.0668E+03 3.7616E+03 1.9987E+03 2.0235E+03 - 3.5481E-01 3.0173E+03 2.8261E+03 1.4882E+03 1.5322E+03 - 3.9811E-01 2.2463E+03 2.0651E+03 1.1282E+03 1.1464E+03 - 4.4668E-01 1.6694E+03 1.5086E+03 8.6074E+02 8.6555E+02 - 5.0119E-01 1.2456E+03 1.1023E+03 6.3991E+02 6.5271E+02 - 5.6234E-01 9.3619E+02 8.1262E+02 4.6672E+02 4.8585E+02 - 6.3096E-01 6.8465E+02 5.9887E+02 3.2760E+02 3.6455E+02 - 7.0795E-01 5.1059E+02 4.3516E+02 2.4037E+02 2.6952E+02 - 7.9433E-01 3.8459E+02 3.1967E+02 1.7843E+02 1.9558E+02 - 8.9125E-01 2.7805E+02 2.3829E+02 1.2994E+02 1.4420E+02 - 1.0000E+00 2.0817E+02 1.7130E+02 1.0033E+02 1.0623E+02 - 1.1220E+00 1.5554E+02 1.2547E+02 7.4654E+01 8.0172E+01 - 1.2589E+00 1.1585E+02 9.2851E+01 5.5202E+01 5.9137E+01 - 1.4125E+00 8.6172E+01 6.8275E+01 3.9981E+01 4.3668E+01 - 1.5849E+00 6.3607E+01 5.1697E+01 2.9590E+01 3.2759E+01 - 1.7783E+00 4.7622E+01 3.8184E+01 2.1581E+01 2.4782E+01 - 1.9953E+00 3.5752E+01 2.8064E+01 1.5687E+01 1.8188E+01 - 2.2387E+00 2.6296E+01 2.0915E+01 1.2021E+01 1.3411E+01 - 2.5119E+00 1.9695E+01 1.5068E+01 9.0882E+00 9.5691E+00 - 2.8184E+00 1.4956E+01 1.1370E+01 6.6532E+00 6.7927E+00 - 3.1623E+00 1.0536E+01 8.4096E+00 4.7920E+00 5.2309E+00 - 3.5481E+00 7.7027E+00 6.2224E+00 3.5561E+00 3.7929E+00 - 3.9811E+00 5.6100E+00 4.5996E+00 2.5798E+00 2.7108E+00 - 4.4668E+00 4.0919E+00 3.4267E+00 1.9115E+00 1.9062E+00 - 5.0119E+00 2.9830E+00 2.5219E+00 1.4244E+00 1.3899E+00 - 5.6234E+00 2.1683E+00 1.8547E+00 1.0643E+00 1.0166E+00 - 6.3096E+00 1.5662E+00 1.3448E+00 7.9222E-01 7.2800E-01 - 7.0795E+00 1.0952E+00 9.9866E-01 5.8252E-01 4.9164E-01 - 7.9433E+00 7.9547E-01 7.1908E-01 4.1465E-01 3.2177E-01 - 8.9125E+00 5.9727E-01 4.9074E-01 2.9323E-01 2.3540E-01 - 1.0000E+01 4.3340E-01 3.7838E-01 2.1469E-01 1.8372E-01 - 1.1220E+01 3.0572E-01 2.7425E-01 1.6009E-01 1.3540E-01 - 1.2589E+01 2.2217E-01 2.0015E-01 1.1497E-01 9.4306E-02 - 1.4125E+01 1.6109E-01 1.4656E-01 8.1162E-02 6.4507E-02 - 1.5849E+01 1.1582E-01 1.0674E-01 5.8336E-02 4.3396E-02 - 1.7783E+01 8.6126E-02 7.7472E-02 3.9869E-02 3.0459E-02 - 1.9953E+01 6.4171E-02 5.5720E-02 2.6190E-02 2.2288E-02 - 2.2387E+01 4.4899E-02 4.0379E-02 1.8810E-02 1.4788E-02 - 2.5119E+01 3.1866E-02 2.8849E-02 1.4038E-02 1.0669E-02 - 2.8184E+01 2.3234E-02 2.0616E-02 1.0715E-02 7.8215E-03 - 3.1623E+01 1.5813E-02 1.4344E-02 6.8103E-03 5.1846E-03 - 3.5481E+01 1.1324E-02 1.0179E-02 4.7115E-03 3.5768E-03 - 3.9811E+01 8.1173E-03 7.2307E-03 3.2470E-03 2.4665E-03 - 4.4668E+01 5.8050E-03 5.1239E-03 2.2295E-03 1.6972E-03 - 5.0119E+01 4.1424E-03 3.6285E-03 1.5263E-03 1.1625E-03 - 5.6234E+01 2.9574E-03 2.5830E-03 1.0409E-03 8.0026E-04 - 6.3096E+01 2.1202E-03 1.8290E-03 7.0998E-04 5.5018E-04 - 7.0795E+01 1.5162E-03 1.2929E-03 4.8083E-04 3.7431E-04 - 7.9433E+01 1.0779E-03 9.1227E-04 3.2377E-04 2.5170E-04 - 8.9125E+01 7.6302E-04 6.3889E-04 2.2042E-04 1.6822E-04 - 1.0000E+02 5.4773E-04 4.5473E-04 1.4826E-04 1.1513E-04 - 1.1220E+02 3.8967E-04 3.2104E-04 9.9614E-05 7.7343E-05 - 1.2589E+02 2.7631E-04 2.2582E-04 6.6500E-05 5.1817E-05 - 1.4125E+02 1.9589E-04 1.5844E-04 4.4585E-05 3.4648E-05 - 1.5849E+02 1.3881E-04 1.1129E-04 2.9698E-05 2.3067E-05 - 1.7783E+02 9.8279E-05 7.8115E-05 1.9804E-05 1.5359E-05 - 1.9953E+02 6.9657E-05 5.4472E-05 1.3104E-05 1.0116E-05 - 2.2387E+02 4.9089E-05 3.8100E-05 8.6417E-06 6.6829E-06 - 2.5119E+02 3.4718E-05 2.6716E-05 5.7535E-06 4.4469E-06 - 2.8184E+02 2.4389E-05 1.8614E-05 3.7436E-06 2.9184E-06 - 3.1623E+02 1.7147E-05 1.2978E-05 2.4714E-06 1.9544E-06 - 3.5481E+02 1.2055E-05 9.0293E-06 1.6263E-06 1.2851E-06 - 3.9811E+02 8.4551E-06 6.2629E-06 1.0760E-06 8.4481E-07 - 4.4668E+02 5.9515E-06 4.3365E-06 7.0594E-07 5.4958E-07 - 5.0119E+02 4.1632E-06 3.0047E-06 4.6024E-07 3.5977E-07 - 5.6234E+02 2.9174E-06 2.1043E-06 3.0347E-07 2.3737E-07 - 6.3096E+02 2.0397E-06 1.4576E-06 1.9847E-07 1.5725E-07 - 7.0795E+02 1.4290E-06 1.0070E-06 1.2902E-07 1.0432E-07 - 7.9433E+02 9.9859E-07 6.9622E-07 8.4773E-08 6.7630E-08 - 8.9125E+02 6.9647E-07 4.8110E-07 5.6302E-08 4.3877E-08 - 1.0000E+03 4.8623E-07 3.3082E-07 3.6792E-08 2.8958E-08 - 1.1220E+03 3.3765E-07 2.2818E-07 2.4677E-08 1.8959E-08 - 1.2589E+03 2.3659E-07 1.5740E-07 1.6134E-08 1.2573E-08 - 1.4125E+03 1.6504E-07 1.0816E-07 1.0452E-08 8.2896E-09 - 1.5849E+03 1.1460E-07 7.4577E-08 6.9388E-09 5.4532E-09 - 1.7783E+03 7.9504E-08 5.1344E-08 4.4537E-09 3.5846E-09 - 1.9953E+03 5.5030E-08 3.5279E-08 2.9919E-09 2.3776E-09 - 2.2387E+03 3.8299E-08 2.4270E-08 2.0056E-09 1.5475E-09 - 2.5119E+03 2.6516E-08 1.6686E-08 1.3292E-09 1.0414E-09 - 2.8184E+03 1.8243E-08 1.1388E-08 8.9348E-10 7.0544E-10 - 3.1623E+03 1.2725E-08 7.8655E-09 5.8860E-10 4.5174E-10 - 3.5481E+03 8.7226E-09 5.3417E-09 3.9120E-10 2.9960E-10 - 3.9811E+03 5.9691E-09 3.6343E-09 2.5231E-10 1.9956E-10 - 4.4668E+03 4.1011E-09 2.4781E-09 1.6153E-10 1.2801E-10 - 5.0119E+03 2.8202E-09 1.6924E-09 1.0674E-10 8.4723E-11 - 5.6234E+03 1.9285E-09 1.1400E-09 7.1736E-11 5.6759E-11 - 6.3096E+03 1.3174E-09 7.6498E-10 5.0890E-11 3.6652E-11 - 7.0795E+03 8.9620E-10 5.1824E-10 3.3989E-11 2.3858E-11 - 7.9433E+03 6.0854E-10 3.5051E-10 2.2004E-11 1.5707E-11 - 8.9125E+03 4.1116E-10 2.3530E-10 1.4157E-11 1.0303E-11 - 1.0000E+04 2.7871E-10 1.5800E-10 9.0739E-12 6.6085E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3190E+04 4.3360E+04 2.0061E+04 1.9952E+04 - 1.1220E-01 3.5531E+04 3.5654E+04 1.6877E+04 1.6651E+04 - 1.2589E-01 2.9238E+04 2.8924E+04 1.4025E+04 1.3877E+04 - 1.4125E-01 2.3874E+04 2.3318E+04 1.1438E+04 1.1353E+04 - 1.5849E-01 1.9279E+04 1.8674E+04 9.2327E+03 9.0315E+03 - 1.7783E-01 1.5411E+04 1.4823E+04 7.4217E+03 7.1585E+03 - 1.9953E-01 1.2062E+04 1.1623E+04 5.8996E+03 5.7099E+03 - 2.2387E-01 9.2536E+03 9.0270E+03 4.6443E+03 4.4071E+03 - 2.5119E-01 7.1597E+03 6.9300E+03 3.6750E+03 3.4392E+03 - 2.8184E-01 5.5215E+03 5.2344E+03 2.8952E+03 2.6861E+03 - 3.1623E-01 4.2032E+03 3.8998E+03 2.2206E+03 2.0417E+03 - 3.5481E-01 3.1633E+03 2.9236E+03 1.6633E+03 1.5394E+03 - 3.9811E-01 2.3686E+03 2.2109E+03 1.2533E+03 1.1629E+03 - 4.4668E-01 1.7656E+03 1.6225E+03 9.4582E+02 8.8528E+02 - 5.0119E-01 1.2877E+03 1.1637E+03 7.0559E+02 6.5124E+02 - 5.6234E-01 9.4974E+02 8.5744E+02 5.0638E+02 4.8266E+02 - 6.3096E-01 7.1109E+02 6.3501E+02 3.7942E+02 3.5724E+02 - 7.0795E-01 5.2855E+02 4.7231E+02 2.8595E+02 2.5622E+02 - 7.9433E-01 3.8695E+02 3.5311E+02 2.0732E+02 1.9302E+02 - 8.9125E-01 2.8491E+02 2.5580E+02 1.4804E+02 1.4106E+02 - 1.0000E+00 2.1517E+02 1.8680E+02 1.0730E+02 1.0814E+02 - 1.1220E+00 1.5954E+02 1.3749E+02 8.0014E+01 7.9392E+01 - 1.2589E+00 1.1923E+02 1.0348E+02 6.1598E+01 5.8186E+01 - 1.4125E+00 8.9661E+01 7.6596E+01 4.4250E+01 4.3202E+01 - 1.5849E+00 6.5349E+01 5.5933E+01 3.2157E+01 3.3057E+01 - 1.7783E+00 4.8059E+01 4.0851E+01 2.5037E+01 2.5123E+01 - 1.9953E+00 3.6555E+01 2.9584E+01 1.8724E+01 1.7892E+01 - 2.2387E+00 2.6672E+01 2.2415E+01 1.2912E+01 1.3161E+01 - 2.5119E+00 1.9338E+01 1.6689E+01 9.1944E+00 9.9481E+00 - 2.8184E+00 1.4414E+01 1.2357E+01 7.3477E+00 6.9893E+00 - 3.1623E+00 1.0630E+01 8.8892E+00 5.5339E+00 5.0586E+00 - 3.5481E+00 7.7844E+00 6.6656E+00 4.0598E+00 3.6321E+00 - 3.9811E+00 5.6730E+00 4.8656E+00 2.9285E+00 2.6188E+00 - 4.4668E+00 4.1028E+00 3.5662E+00 2.1442E+00 1.9471E+00 - 5.0119E+00 3.0214E+00 2.6171E+00 1.6011E+00 1.4211E+00 - 5.6234E+00 2.2132E+00 1.8831E+00 1.1581E+00 1.0276E+00 - 6.3096E+00 1.6087E+00 1.4095E+00 8.5114E-01 7.1614E-01 - 7.0795E+00 1.1578E+00 1.0053E+00 6.2771E-01 4.9304E-01 - 7.9433E+00 8.5181E-01 7.4470E-01 4.5957E-01 3.4539E-01 - 8.9125E+00 6.3647E-01 5.6873E-01 3.1936E-01 2.6899E-01 - 1.0000E+01 4.3119E-01 3.9422E-01 2.1749E-01 1.8285E-01 - 1.1220E+01 3.0990E-01 2.8661E-01 1.6178E-01 1.2595E-01 - 1.2589E+01 2.2744E-01 2.0337E-01 1.1228E-01 8.9373E-02 - 1.4125E+01 1.6505E-01 1.4870E-01 7.8394E-02 6.0906E-02 - 1.5849E+01 1.1678E-01 1.1065E-01 5.7418E-02 4.2551E-02 - 1.7783E+01 8.2958E-02 7.9276E-02 4.1389E-02 3.1364E-02 - 1.9953E+01 5.9200E-02 5.6003E-02 2.8346E-02 2.1930E-02 - 2.2387E+01 4.1698E-02 3.9422E-02 1.9802E-02 1.6121E-02 - 2.5119E+01 3.0607E-02 2.7678E-02 1.4246E-02 1.1328E-02 - 2.8184E+01 2.2733E-02 2.0333E-02 9.8265E-03 7.4247E-03 - 3.1623E+01 1.5884E-02 1.4383E-02 6.8290E-03 5.1928E-03 - 3.5481E+01 1.1374E-02 1.0225E-02 4.6990E-03 3.5994E-03 - 3.9811E+01 8.1197E-03 7.2663E-03 3.2281E-03 2.4738E-03 - 4.4668E+01 5.8205E-03 5.1585E-03 2.2231E-03 1.7047E-03 - 5.0119E+01 4.1633E-03 3.6594E-03 1.5294E-03 1.1701E-03 - 5.6234E+01 2.9723E-03 2.5867E-03 1.0440E-03 8.0098E-04 - 6.3096E+01 2.1181E-03 1.8321E-03 7.1088E-04 5.4326E-04 - 7.0795E+01 1.5145E-03 1.2983E-03 4.8136E-04 3.7083E-04 - 7.9433E+01 1.0820E-03 9.1745E-04 3.2358E-04 2.5368E-04 - 8.9125E+01 7.6932E-04 6.4895E-04 2.1872E-04 1.6986E-04 - 1.0000E+02 5.4716E-04 4.5579E-04 1.4833E-04 1.1458E-04 - 1.1220E+02 3.8851E-04 3.2085E-04 9.9447E-05 7.6962E-05 - 1.2589E+02 2.7627E-04 2.2545E-04 6.6534E-05 5.1835E-05 - 1.4125E+02 1.9657E-04 1.5809E-04 4.4575E-05 3.4908E-05 - 1.5849E+02 1.3918E-04 1.1111E-04 2.9596E-05 2.3242E-05 - 1.7783E+02 9.8289E-05 7.8322E-05 1.9553E-05 1.5549E-05 - 1.9953E+02 6.9488E-05 5.4719E-05 1.3050E-05 1.0326E-05 - 2.2387E+02 4.8987E-05 3.8044E-05 8.6541E-06 6.8031E-06 - 2.5119E+02 3.4583E-05 2.6530E-05 5.6465E-06 4.4488E-06 - 2.8184E+02 2.4462E-05 1.8576E-05 3.7403E-06 2.9522E-06 - 3.1623E+02 1.7164E-05 1.2959E-05 2.4792E-06 1.9373E-06 - 3.5481E+02 1.2047E-05 8.9998E-06 1.6254E-06 1.2773E-06 - 3.9811E+02 8.4480E-06 6.2458E-06 1.0606E-06 8.4417E-07 - 4.4668E+02 5.9352E-06 4.3387E-06 7.0099E-07 5.5187E-07 - 5.0119E+02 4.1639E-06 3.0117E-06 4.6046E-07 3.6422E-07 - 5.6234E+02 2.9209E-06 2.0991E-06 3.0402E-07 2.3887E-07 - 6.3096E+02 2.0364E-06 1.4502E-06 1.9787E-07 1.5507E-07 - 7.0795E+02 1.4241E-06 1.0012E-06 1.2857E-07 1.0141E-07 - 7.9433E+02 9.9938E-07 6.9460E-07 8.5231E-08 6.6966E-08 - 8.9125E+02 6.9580E-07 4.7908E-07 5.5897E-08 4.4469E-08 - 1.0000E+03 4.8567E-07 3.3120E-07 3.6479E-08 2.9259E-08 - 1.1220E+03 3.3887E-07 2.2900E-07 2.3694E-08 1.8947E-08 - 1.2589E+03 2.3507E-07 1.5737E-07 1.5558E-08 1.2754E-08 - 1.4125E+03 1.6356E-07 1.0792E-07 1.0491E-08 8.7091E-09 - 1.5849E+03 1.1348E-07 7.4505E-08 7.0762E-09 5.6879E-09 - 1.7783E+03 7.8966E-08 5.1391E-08 4.5414E-09 3.6492E-09 - 1.9953E+03 5.5326E-08 3.5469E-08 3.0055E-09 2.3277E-09 - 2.2387E+03 3.8421E-08 2.4507E-08 2.0305E-09 1.5394E-09 - 2.5119E+03 2.6551E-08 1.6670E-08 1.3240E-09 1.0537E-09 - 2.8184E+03 1.8390E-08 1.1370E-08 8.6038E-10 6.9905E-10 - 3.1623E+03 1.2728E-08 7.8639E-09 5.7889E-10 4.4546E-10 - 3.5481E+03 8.6989E-09 5.3285E-09 3.8704E-10 2.9419E-10 - 3.9811E+03 5.9676E-09 3.6387E-09 2.5952E-10 1.9715E-10 - 4.4668E+03 4.0957E-09 2.4669E-09 1.7444E-10 1.2854E-10 - 5.0119E+03 2.8036E-09 1.6616E-09 1.1297E-10 8.6875E-11 - 5.6234E+03 1.9195E-09 1.1237E-09 7.3127E-11 5.6073E-11 - 6.3096E+03 1.3163E-09 7.6473E-10 4.8284E-11 3.5519E-11 - 7.0795E+03 8.9620E-10 5.2106E-10 3.1640E-11 2.3983E-11 - 7.9433E+03 6.0792E-10 3.5261E-10 2.1377E-11 1.6235E-11 - 8.9125E+03 4.0841E-10 2.3398E-10 1.4443E-11 1.0673E-11 - 1.0000E+04 2.7733E-10 1.5667E-10 9.5986E-12 7.1411E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3952E+04 4.4181E+04 2.0546E+04 1.9915E+04 - 1.1220E-01 3.6130E+04 3.6560E+04 1.7467E+04 1.6662E+04 - 1.2589E-01 2.9660E+04 2.9888E+04 1.4599E+04 1.3615E+04 - 1.4125E-01 2.4364E+04 2.4190E+04 1.2076E+04 1.1149E+04 - 1.5849E-01 1.9627E+04 1.9441E+04 9.7401E+03 8.9734E+03 - 1.7783E-01 1.5598E+04 1.5418E+04 7.8356E+03 7.1293E+03 - 1.9953E-01 1.2348E+04 1.2092E+04 6.3341E+03 5.6724E+03 - 2.2387E-01 9.5236E+03 9.4061E+03 4.9507E+03 4.4565E+03 - 2.5119E-01 7.3050E+03 7.2274E+03 3.8854E+03 3.4085E+03 - 2.8184E-01 5.5941E+03 5.4999E+03 3.0549E+03 2.6266E+03 - 3.1623E-01 4.2307E+03 4.1781E+03 2.3247E+03 2.0333E+03 - 3.5481E-01 3.1994E+03 3.1121E+03 1.7675E+03 1.5389E+03 - 3.9811E-01 2.3891E+03 2.3105E+03 1.3469E+03 1.1637E+03 - 4.4668E-01 1.7961E+03 1.7495E+03 1.0173E+03 8.7695E+02 - 5.0119E-01 1.3293E+03 1.3065E+03 7.6241E+02 6.4281E+02 - 5.6234E-01 9.7056E+02 9.4714E+02 5.5960E+02 4.7710E+02 - 6.3096E-01 7.2627E+02 6.9845E+02 4.1380E+02 3.4480E+02 - 7.0795E-01 5.3624E+02 5.1643E+02 3.1138E+02 2.5052E+02 - 7.9433E-01 3.9690E+02 3.7753E+02 2.3548E+02 1.9341E+02 - 8.9125E-01 2.9621E+02 2.7681E+02 1.7368E+02 1.3582E+02 - 1.0000E+00 2.1771E+02 2.0754E+02 1.2389E+02 1.0292E+02 - 1.1220E+00 1.6152E+02 1.5452E+02 9.0267E+01 7.9585E+01 - 1.2589E+00 1.2042E+02 1.1265E+02 6.8720E+01 5.9835E+01 - 1.4125E+00 8.9523E+01 8.3065E+01 5.1259E+01 4.2946E+01 - 1.5849E+00 6.4727E+01 6.1314E+01 3.7195E+01 3.1056E+01 - 1.7783E+00 4.8372E+01 4.6100E+01 2.7423E+01 2.3058E+01 - 1.9953E+00 3.6229E+01 3.3957E+01 1.9898E+01 1.7324E+01 - 2.2387E+00 2.6494E+01 2.4260E+01 1.4719E+01 1.2582E+01 - 2.5119E+00 2.0250E+01 1.8320E+01 1.0837E+01 9.4017E+00 - 2.8184E+00 1.4657E+01 1.3307E+01 7.9207E+00 7.0618E+00 - 3.1623E+00 1.0389E+01 9.5877E+00 5.9868E+00 4.8231E+00 - 3.5481E+00 7.6134E+00 6.9572E+00 4.4329E+00 3.4234E+00 - 3.9811E+00 5.6496E+00 5.0847E+00 3.2120E+00 2.4692E+00 - 4.4668E+00 4.1404E+00 3.7366E+00 2.3598E+00 1.8299E+00 - 5.0119E+00 3.0026E+00 2.7130E+00 1.6861E+00 1.3232E+00 - 5.6234E+00 2.1204E+00 2.0000E+00 1.1180E+00 8.9431E-01 - 6.3096E+00 1.5063E+00 1.4963E+00 8.2443E-01 6.4476E-01 - 7.0795E+00 1.0885E+00 1.0989E+00 6.2257E-01 4.8154E-01 - 7.9433E+00 7.9800E-01 7.9021E-01 4.4949E-01 3.4303E-01 - 8.9125E+00 5.7651E-01 5.4114E-01 3.2293E-01 2.5666E-01 - 1.0000E+01 4.2487E-01 4.0273E-01 2.2954E-01 1.7960E-01 - 1.1220E+01 3.0668E-01 2.9162E-01 1.6592E-01 1.2484E-01 - 1.2589E+01 2.2189E-01 2.0330E-01 1.1745E-01 9.0117E-02 - 1.4125E+01 1.6033E-01 1.4377E-01 8.1005E-02 6.4356E-02 - 1.5849E+01 1.1791E-01 1.0725E-01 5.7885E-02 4.6168E-02 - 1.7783E+01 8.4601E-02 7.7641E-02 4.0956E-02 3.2172E-02 - 1.9953E+01 6.0369E-02 5.4057E-02 2.7475E-02 2.2956E-02 - 2.2387E+01 4.3605E-02 3.7758E-02 1.9137E-02 1.5806E-02 - 2.5119E+01 3.0255E-02 2.8098E-02 1.3116E-02 1.1120E-02 - 2.8184E+01 2.1919E-02 1.9506E-02 9.0681E-03 7.6057E-03 - 3.1623E+01 1.5819E-02 1.4326E-02 6.8098E-03 5.1589E-03 - 3.5481E+01 1.1321E-02 1.0158E-02 4.6993E-03 3.5752E-03 - 3.9811E+01 8.1213E-03 7.2200E-03 3.2379E-03 2.4710E-03 - 4.4668E+01 5.8205E-03 5.1378E-03 2.2237E-03 1.7031E-03 - 5.0119E+01 4.1526E-03 3.6396E-03 1.5150E-03 1.1698E-03 - 5.6234E+01 2.9625E-03 2.5838E-03 1.0345E-03 7.9682E-04 - 6.3096E+01 2.1209E-03 1.8315E-03 7.0726E-04 5.4178E-04 - 7.0795E+01 1.5170E-03 1.2933E-03 4.8394E-04 3.7284E-04 - 7.9433E+01 1.0798E-03 9.0811E-04 3.2710E-04 2.5341E-04 - 8.9125E+01 7.7280E-04 6.4235E-04 2.1896E-04 1.6994E-04 - 1.0000E+02 5.4636E-04 4.5598E-04 1.4794E-04 1.1503E-04 - 1.1220E+02 3.8861E-04 3.2098E-04 9.9356E-05 7.7487E-05 - 1.2589E+02 2.7623E-04 2.2565E-04 6.6210E-05 5.1697E-05 - 1.4125E+02 1.9634E-04 1.5811E-04 4.4114E-05 3.4636E-05 - 1.5849E+02 1.3886E-04 1.1105E-04 2.9301E-05 2.3134E-05 - 1.7783E+02 9.8076E-05 7.7855E-05 1.9435E-05 1.5304E-05 - 1.9953E+02 6.9403E-05 5.4543E-05 1.3059E-05 1.0199E-05 - 2.2387E+02 4.9074E-05 3.8290E-05 8.7866E-06 6.8281E-06 - 2.5119E+02 3.4432E-05 2.6677E-05 5.7408E-06 4.4609E-06 - 2.8184E+02 2.4244E-05 1.8526E-05 3.7251E-06 2.9262E-06 - 3.1623E+02 1.7130E-05 1.2940E-05 2.4707E-06 1.9524E-06 - 3.5481E+02 1.2061E-05 9.0110E-06 1.6307E-06 1.2922E-06 - 3.9811E+02 8.4708E-06 6.3012E-06 1.0705E-06 8.4605E-07 - 4.4668E+02 5.9597E-06 4.3624E-06 7.0488E-07 5.5385E-07 - 5.0119E+02 4.1615E-06 3.0144E-06 4.6337E-07 3.6156E-07 - 5.6234E+02 2.9236E-06 2.0920E-06 3.0463E-07 2.3912E-07 - 6.3096E+02 2.0448E-06 1.4515E-06 1.9721E-07 1.5550E-07 - 7.0795E+02 1.4275E-06 1.0040E-06 1.3134E-07 1.0180E-07 - 7.9433E+02 9.9641E-07 6.9201E-07 8.6880E-08 6.7285E-08 - 8.9125E+02 6.9742E-07 4.7779E-07 5.5555E-08 4.4380E-08 - 1.0000E+03 4.8522E-07 3.3055E-07 3.6314E-08 2.9196E-08 - 1.1220E+03 3.3730E-07 2.2848E-07 2.3318E-08 1.9133E-08 - 1.2589E+03 2.3560E-07 1.5848E-07 1.5546E-08 1.2681E-08 - 1.4125E+03 1.6339E-07 1.0927E-07 1.0491E-08 8.5000E-09 - 1.5849E+03 1.1378E-07 7.5248E-08 6.9488E-09 5.6820E-09 - 1.7783E+03 7.9210E-08 5.1813E-08 4.6290E-09 3.7065E-09 - 1.9953E+03 5.5054E-08 3.5424E-08 3.1176E-09 2.3875E-09 - 2.2387E+03 3.8268E-08 2.4162E-08 2.0234E-09 1.5981E-09 - 2.5119E+03 2.6487E-08 1.6624E-08 1.3665E-09 1.0395E-09 - 2.8184E+03 1.8162E-08 1.1426E-08 9.1837E-10 6.8281E-10 - 3.1623E+03 1.2664E-08 7.8475E-09 5.7661E-10 4.5041E-10 - 3.5481E+03 8.6951E-09 5.3274E-09 3.8512E-10 2.9507E-10 - 3.9811E+03 5.9908E-09 3.6284E-09 2.5362E-10 1.9606E-10 - 4.4668E+03 4.1149E-09 2.4626E-09 1.6633E-10 1.2683E-10 - 5.0119E+03 2.8341E-09 1.6804E-09 1.0920E-10 8.2021E-11 - 5.6234E+03 1.9451E-09 1.1394E-09 7.2623E-11 5.5117E-11 - 6.3096E+03 1.3063E-09 7.7029E-10 4.9076E-11 3.6460E-11 - 7.0795E+03 8.8962E-10 5.1946E-10 3.2700E-11 2.4411E-11 - 7.9433E+03 6.0799E-10 3.4884E-10 2.1633E-11 1.5271E-11 - 8.9125E+03 4.1218E-10 2.3340E-10 1.4026E-11 9.9887E-12 - 1.0000E+04 2.7891E-10 1.5555E-10 9.1471E-12 6.7965E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3790E+04 4.5205E+04 2.1465E+04 2.0029E+04 - 1.1220E-01 3.6490E+04 3.7076E+04 1.7947E+04 1.6617E+04 - 1.2589E-01 3.0156E+04 3.0394E+04 1.4953E+04 1.3624E+04 - 1.4125E-01 2.4369E+04 2.4737E+04 1.2422E+04 1.1010E+04 - 1.5849E-01 1.9613E+04 1.9986E+04 1.0152E+04 8.8520E+03 - 1.7783E-01 1.5694E+04 1.5922E+04 8.1580E+03 7.1033E+03 - 1.9953E-01 1.2259E+04 1.2513E+04 6.5422E+03 5.6362E+03 - 2.2387E-01 9.4622E+03 9.7706E+03 5.2554E+03 4.3639E+03 - 2.5119E-01 7.3859E+03 7.5651E+03 4.1208E+03 3.4252E+03 - 2.8184E-01 5.6819E+03 5.7236E+03 3.1635E+03 2.6541E+03 - 3.1623E-01 4.2519E+03 4.3127E+03 2.4641E+03 1.9943E+03 - 3.5481E-01 3.2097E+03 3.2561E+03 1.9239E+03 1.5366E+03 - 3.9811E-01 2.4162E+03 2.4338E+03 1.4642E+03 1.1644E+03 - 4.4668E-01 1.7885E+03 1.8269E+03 1.1032E+03 8.7334E+02 - 5.0119E-01 1.3254E+03 1.3622E+03 8.2446E+02 6.4013E+02 - 5.6234E-01 9.8981E+02 1.0168E+03 6.1057E+02 4.6333E+02 - 6.3096E-01 7.2228E+02 7.5498E+02 4.6360E+02 3.4621E+02 - 7.0795E-01 5.2370E+02 5.5210E+02 3.4992E+02 2.5964E+02 - 7.9433E-01 3.9019E+02 4.1699E+02 2.5376E+02 1.9442E+02 - 8.9125E-01 2.8903E+02 3.1370E+02 1.9214E+02 1.3878E+02 - 1.0000E+00 2.1565E+02 2.2139E+02 1.3794E+02 1.0014E+02 - 1.1220E+00 1.6047E+02 1.6369E+02 1.0318E+02 7.3410E+01 - 1.2589E+00 1.2086E+02 1.1988E+02 7.8142E+01 5.4641E+01 - 1.4125E+00 8.9016E+01 8.8135E+01 5.6385E+01 4.0083E+01 - 1.5849E+00 6.4307E+01 6.6227E+01 4.1982E+01 2.9016E+01 - 1.7783E+00 4.6523E+01 4.8819E+01 3.0354E+01 2.2086E+01 - 1.9953E+00 3.5036E+01 3.5564E+01 2.1660E+01 1.6981E+01 - 2.2387E+00 2.6575E+01 2.6520E+01 1.6292E+01 1.2255E+01 - 2.5119E+00 1.9247E+01 1.9655E+01 1.2227E+01 8.8897E+00 - 2.8184E+00 1.4209E+01 1.4048E+01 8.9985E+00 6.6569E+00 - 3.1623E+00 1.0388E+01 1.0347E+01 6.6607E+00 4.5992E+00 - 3.5481E+00 7.6936E+00 7.6341E+00 4.7097E+00 3.4202E+00 - 3.9811E+00 5.6960E+00 5.5721E+00 3.3394E+00 2.5639E+00 - 4.4668E+00 4.1107E+00 4.1169E+00 2.4588E+00 1.8377E+00 - 5.0119E+00 2.9690E+00 2.9164E+00 1.8012E+00 1.3288E+00 - 5.6234E+00 2.1721E+00 2.0685E+00 1.3001E+00 9.5479E-01 - 6.3096E+00 1.5656E+00 1.5043E+00 9.2816E-01 6.9866E-01 - 7.0795E+00 1.1204E+00 1.0804E+00 6.6104E-01 5.0295E-01 - 7.9433E+00 8.5784E-01 7.9606E-01 4.6937E-01 3.4199E-01 - 8.9125E+00 6.4742E-01 5.9509E-01 3.3192E-01 2.4132E-01 - 1.0000E+01 4.2968E-01 4.2452E-01 2.3929E-01 1.7810E-01 - 1.1220E+01 3.0891E-01 2.9926E-01 1.7109E-01 1.2482E-01 - 1.2589E+01 2.2271E-01 2.1034E-01 1.2116E-01 8.9858E-02 - 1.4125E+01 1.6250E-01 1.5084E-01 8.3788E-02 6.3888E-02 - 1.5849E+01 1.1889E-01 1.1029E-01 5.7251E-02 4.4248E-02 - 1.7783E+01 8.4621E-02 7.9463E-02 4.0064E-02 3.1270E-02 - 1.9953E+01 5.9277E-02 5.5866E-02 2.8998E-02 2.1740E-02 - 2.2387E+01 4.3122E-02 4.0652E-02 2.0470E-02 1.5117E-02 - 2.5119E+01 3.1354E-02 2.9458E-02 1.3828E-02 1.0542E-02 - 2.8184E+01 2.2167E-02 2.0561E-02 9.4985E-03 7.7344E-03 - 3.1623E+01 1.5872E-02 1.4351E-02 6.8066E-03 5.1939E-03 - 3.5481E+01 1.1400E-02 1.0213E-02 4.6989E-03 3.5917E-03 - 3.9811E+01 8.1531E-03 7.2675E-03 3.2428E-03 2.4653E-03 - 4.4668E+01 5.8148E-03 5.1627E-03 2.2219E-03 1.6960E-03 - 5.0119E+01 4.1529E-03 3.6569E-03 1.5138E-03 1.1703E-03 - 5.6234E+01 2.9711E-03 2.5842E-03 1.0338E-03 8.0136E-04 - 6.3096E+01 2.1317E-03 1.8324E-03 7.0256E-04 5.4894E-04 - 7.0795E+01 1.5179E-03 1.2937E-03 4.8078E-04 3.7345E-04 - 7.9433E+01 1.0793E-03 9.1572E-04 3.2940E-04 2.5212E-04 - 8.9125E+01 7.7105E-04 6.4868E-04 2.2257E-04 1.7043E-04 - 1.0000E+02 5.4695E-04 4.5557E-04 1.4734E-04 1.1496E-04 - 1.1220E+02 3.8914E-04 3.2115E-04 9.8958E-05 7.7338E-05 - 1.2589E+02 2.7601E-04 2.2635E-04 6.6531E-05 5.2068E-05 - 1.4125E+02 1.9567E-04 1.5889E-04 4.4402E-05 3.4914E-05 - 1.5849E+02 1.3914E-04 1.1139E-04 2.9565E-05 2.3151E-05 - 1.7783E+02 9.8620E-05 7.8197E-05 1.9615E-05 1.5364E-05 - 1.9953E+02 6.9512E-05 5.4795E-05 1.3068E-05 1.0204E-05 - 2.2387E+02 4.9144E-05 3.8214E-05 8.5453E-06 6.8356E-06 - 2.5119E+02 3.4723E-05 2.6669E-05 5.6691E-06 4.5531E-06 - 2.8184E+02 2.4418E-05 1.8668E-05 3.7834E-06 2.9726E-06 - 3.1623E+02 1.7203E-05 1.2980E-05 2.4653E-06 1.9559E-06 - 3.5481E+02 1.2093E-05 9.0501E-06 1.6259E-06 1.2866E-06 - 3.9811E+02 8.4796E-06 6.3083E-06 1.0789E-06 8.5081E-07 - 4.4668E+02 5.9610E-06 4.3696E-06 7.1004E-07 5.5252E-07 - 5.0119E+02 4.1799E-06 3.0287E-06 4.6245E-07 3.6180E-07 - 5.6234E+02 2.9326E-06 2.1005E-06 2.9912E-07 2.4045E-07 - 6.3096E+02 2.0503E-06 1.4599E-06 1.9558E-07 1.5607E-07 - 7.0795E+02 1.4305E-06 1.0122E-06 1.3006E-07 1.0210E-07 - 7.9433E+02 1.0004E-06 6.9864E-07 8.6343E-08 6.7657E-08 - 8.9125E+02 6.9922E-07 4.8082E-07 5.7026E-08 4.4892E-08 - 1.0000E+03 4.8735E-07 3.3037E-07 3.7217E-08 2.9447E-08 - 1.1220E+03 3.3797E-07 2.2824E-07 2.4377E-08 1.9197E-08 - 1.2589E+03 2.3538E-07 1.5793E-07 1.5766E-08 1.2757E-08 - 1.4125E+03 1.6430E-07 1.0928E-07 1.0281E-08 8.4116E-09 - 1.5849E+03 1.1403E-07 7.5270E-08 6.7558E-09 5.5233E-09 - 1.7783E+03 7.9447E-08 5.1605E-08 4.5757E-09 3.6585E-09 - 1.9953E+03 5.5501E-08 3.5496E-08 3.0165E-09 2.4458E-09 - 2.2387E+03 3.8368E-08 2.4544E-08 1.9990E-09 1.5759E-09 - 2.5119E+03 2.6457E-08 1.6765E-08 1.3404E-09 1.0394E-09 - 2.8184E+03 1.8224E-08 1.1302E-08 8.8134E-10 6.8227E-10 - 3.1623E+03 1.2664E-08 7.8272E-09 5.8317E-10 4.4118E-10 - 3.5481E+03 8.6961E-09 5.3432E-09 3.9651E-10 2.9729E-10 - 3.9811E+03 5.9689E-09 3.6102E-09 2.6260E-10 1.9778E-10 - 4.4668E+03 4.0856E-09 2.4478E-09 1.6895E-10 1.2982E-10 - 5.0119E+03 2.8226E-09 1.6675E-09 1.1278E-10 8.8413E-11 - 5.6234E+03 1.9302E-09 1.1236E-09 7.6539E-11 5.7514E-11 - 6.3096E+03 1.3158E-09 7.6688E-10 4.9281E-11 3.5629E-11 - 7.0795E+03 8.9188E-10 5.1762E-10 3.2217E-11 2.3636E-11 - 7.9433E+03 6.0596E-10 3.4677E-10 2.1906E-11 1.5447E-11 - 8.9125E+03 4.0938E-10 2.3282E-10 1.4524E-11 1.0045E-11 - 1.0000E+04 2.7440E-10 1.5547E-10 9.4047E-12 6.7638E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.4272E+04 4.5783E+04 2.2055E+04 1.9850E+04 - 1.1220E-01 3.6291E+04 3.7971E+04 1.8734E+04 1.6635E+04 - 1.2589E-01 3.0039E+04 3.1436E+04 1.5496E+04 1.3608E+04 - 1.4125E-01 2.4673E+04 2.5432E+04 1.2795E+04 1.0923E+04 - 1.5849E-01 1.9710E+04 2.0518E+04 1.0568E+04 8.7768E+03 - 1.7783E-01 1.5707E+04 1.6414E+04 8.5454E+03 7.0829E+03 - 1.9953E-01 1.2411E+04 1.2802E+04 6.8653E+03 5.6050E+03 - 2.2387E-01 9.7385E+03 1.0067E+04 5.4755E+03 4.3420E+03 - 2.5119E-01 7.4702E+03 7.7664E+03 4.3355E+03 3.3509E+03 - 2.8184E-01 5.6254E+03 5.9369E+03 3.4090E+03 2.5523E+03 - 3.1623E-01 4.2805E+03 4.5458E+03 2.6029E+03 1.9565E+03 - 3.5481E-01 3.2170E+03 3.4215E+03 2.0004E+03 1.5137E+03 - 3.9811E-01 2.4131E+03 2.5469E+03 1.5555E+03 1.1379E+03 - 4.4668E-01 1.8100E+03 1.9143E+03 1.1730E+03 8.3519E+02 - 5.0119E-01 1.3226E+03 1.4277E+03 8.7734E+02 6.2594E+02 - 5.6234E-01 9.7853E+02 1.0567E+03 6.5029E+02 4.7010E+02 - 6.3096E-01 7.2648E+02 7.9400E+02 4.8476E+02 3.4423E+02 - 7.0795E-01 5.4250E+02 5.7709E+02 3.6968E+02 2.5479E+02 - 7.9433E-01 4.0134E+02 4.2346E+02 2.8206E+02 1.8442E+02 - 8.9125E-01 2.9294E+02 3.1825E+02 2.1348E+02 1.3172E+02 - 1.0000E+00 2.1776E+02 2.3315E+02 1.4904E+02 9.8238E+01 - 1.1220E+00 1.6044E+02 1.7448E+02 1.1006E+02 7.3278E+01 - 1.2589E+00 1.1840E+02 1.2812E+02 8.1476E+01 5.3337E+01 - 1.4125E+00 8.7632E+01 9.3816E+01 6.1088E+01 3.8252E+01 - 1.5849E+00 6.3962E+01 7.0292E+01 4.6135E+01 2.8030E+01 - 1.7783E+00 4.7719E+01 5.1267E+01 3.4196E+01 2.1941E+01 - 1.9953E+00 3.5735E+01 3.7269E+01 2.5625E+01 1.5871E+01 - 2.2387E+00 2.6333E+01 2.7497E+01 1.8464E+01 1.1275E+01 - 2.5119E+00 1.9058E+01 2.0236E+01 1.3207E+01 8.2726E+00 - 2.8184E+00 1.4022E+01 1.4912E+01 9.5707E+00 6.1974E+00 - 3.1623E+00 1.0360E+01 1.0902E+01 6.9112E+00 4.4951E+00 - 3.5481E+00 7.4599E+00 8.0224E+00 5.0008E+00 3.2832E+00 - 3.9811E+00 5.4438E+00 5.8275E+00 3.8120E+00 2.3864E+00 - 4.4668E+00 3.9899E+00 4.2052E+00 2.7106E+00 1.7166E+00 - 5.0119E+00 2.9512E+00 3.0488E+00 1.8753E+00 1.2040E+00 - 5.6234E+00 2.2298E+00 2.2627E+00 1.3623E+00 8.8109E-01 - 6.3096E+00 1.5883E+00 1.6539E+00 9.8866E-01 6.5119E-01 - 7.0795E+00 1.1126E+00 1.1688E+00 6.9843E-01 4.7525E-01 - 7.9433E+00 8.2196E-01 8.2718E-01 4.8804E-01 3.3298E-01 - 8.9125E+00 5.9726E-01 5.9532E-01 3.5669E-01 2.2324E-01 - 1.0000E+01 4.1949E-01 4.1895E-01 2.4995E-01 1.6241E-01 - 1.1220E+01 3.0121E-01 3.0149E-01 1.7372E-01 1.1895E-01 - 1.2589E+01 2.1826E-01 2.1974E-01 1.2224E-01 8.4886E-02 - 1.4125E+01 1.5658E-01 1.5688E-01 8.7585E-02 5.9450E-02 - 1.5849E+01 1.1517E-01 1.0994E-01 6.2353E-02 4.1395E-02 - 1.7783E+01 8.4570E-02 7.7304E-02 4.3461E-02 2.9749E-02 - 1.9953E+01 5.9397E-02 5.5429E-02 2.9606E-02 2.0877E-02 - 2.2387E+01 4.3344E-02 3.9931E-02 2.0571E-02 1.4153E-02 - 2.5119E+01 3.1700E-02 2.8305E-02 1.3532E-02 1.0597E-02 - 2.8184E+01 2.3192E-02 2.0662E-02 9.0339E-03 7.6728E-03 - 3.1623E+01 1.5823E-02 1.4325E-02 6.7789E-03 5.1737E-03 - 3.5481E+01 1.1308E-02 1.0183E-02 4.6935E-03 3.5735E-03 - 3.9811E+01 8.0991E-03 7.2179E-03 3.2403E-03 2.4681E-03 - 4.4668E+01 5.8170E-03 5.1306E-03 2.2247E-03 1.7059E-03 - 5.0119E+01 4.1718E-03 3.6467E-03 1.5152E-03 1.1696E-03 - 5.6234E+01 2.9815E-03 2.5812E-03 1.0353E-03 8.0189E-04 - 6.3096E+01 2.1214E-03 1.8257E-03 7.1075E-04 5.4533E-04 - 7.0795E+01 1.5117E-03 1.2928E-03 4.8414E-04 3.7206E-04 - 7.9433E+01 1.0808E-03 9.0901E-04 3.2449E-04 2.5256E-04 - 8.9125E+01 7.6914E-04 6.4379E-04 2.1996E-04 1.7017E-04 - 1.0000E+02 5.4736E-04 4.5516E-04 1.4798E-04 1.1527E-04 - 1.1220E+02 3.8804E-04 3.2077E-04 9.8946E-05 7.7477E-05 - 1.2589E+02 2.7570E-04 2.2569E-04 6.6292E-05 5.1761E-05 - 1.4125E+02 1.9573E-04 1.5820E-04 4.4289E-05 3.4538E-05 - 1.5849E+02 1.3878E-04 1.1085E-04 2.9629E-05 2.3010E-05 - 1.7783E+02 9.8164E-05 7.7407E-05 1.9832E-05 1.5288E-05 - 1.9953E+02 6.9632E-05 5.4143E-05 1.3153E-05 1.0193E-05 - 2.2387E+02 4.9198E-05 3.7951E-05 8.6566E-06 6.7264E-06 - 2.5119E+02 3.4486E-05 2.6660E-05 5.6853E-06 4.4519E-06 - 2.8184E+02 2.4295E-05 1.8636E-05 3.7253E-06 2.9873E-06 - 3.1623E+02 1.7147E-05 1.2964E-05 2.4686E-06 1.9530E-06 - 3.5481E+02 1.2068E-05 9.0431E-06 1.6258E-06 1.2826E-06 - 3.9811E+02 8.4918E-06 6.2768E-06 1.0718E-06 8.4383E-07 - 4.4668E+02 5.9495E-06 4.3431E-06 7.0419E-07 5.5551E-07 - 5.0119E+02 4.1768E-06 3.0045E-06 4.5994E-07 3.6541E-07 - 5.6234E+02 2.9299E-06 2.0877E-06 3.0017E-07 2.3815E-07 - 6.3096E+02 2.0352E-06 1.4509E-06 1.9626E-07 1.5540E-07 - 7.0795E+02 1.4208E-06 1.0061E-06 1.2838E-07 1.0121E-07 - 7.9433E+02 9.9696E-07 6.9573E-07 8.4068E-08 6.7694E-08 - 8.9125E+02 6.9406E-07 4.8207E-07 5.5904E-08 4.4115E-08 - 1.0000E+03 4.8357E-07 3.3036E-07 3.6565E-08 2.8474E-08 - 1.1220E+03 3.3646E-07 2.2800E-07 2.4122E-08 1.8850E-08 - 1.2589E+03 2.3440E-07 1.5734E-07 1.5786E-08 1.2650E-08 - 1.4125E+03 1.6323E-07 1.0821E-07 1.0203E-08 8.4698E-09 - 1.5849E+03 1.1419E-07 7.5254E-08 6.7815E-09 5.4874E-09 - 1.7783E+03 7.9384E-08 5.1454E-08 4.5157E-09 3.6330E-09 - 1.9953E+03 5.5161E-08 3.5250E-08 3.0498E-09 2.4426E-09 - 2.2387E+03 3.7971E-08 2.4450E-08 2.0210E-09 1.5765E-09 - 2.5119E+03 2.6243E-08 1.6782E-08 1.3314E-09 1.0422E-09 - 2.8184E+03 1.8195E-08 1.1408E-08 8.7135E-10 6.9533E-10 - 3.1623E+03 1.2690E-08 7.8112E-09 5.8104E-10 4.4566E-10 - 3.5481E+03 8.6760E-09 5.3129E-09 3.8173E-10 2.9260E-10 - 3.9811E+03 5.9295E-09 3.6088E-09 2.5790E-10 1.9435E-10 - 4.4668E+03 4.0662E-09 2.4696E-09 1.7324E-10 1.3062E-10 - 5.0119E+03 2.8121E-09 1.6968E-09 1.1171E-10 8.6135E-11 - 5.6234E+03 1.9267E-09 1.1503E-09 7.1945E-11 5.5084E-11 - 6.3096E+03 1.3155E-09 7.7124E-10 4.9778E-11 3.7407E-11 - 7.0795E+03 8.9510E-10 5.1995E-10 3.2722E-11 2.4557E-11 - 7.9433E+03 6.0618E-10 3.5086E-10 2.1608E-11 1.6275E-11 - 8.9125E+03 4.1045E-10 2.3530E-10 1.4175E-11 1.0653E-11 - 1.0000E+04 2.7784E-10 1.5700E-10 9.4345E-12 6.9823E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.4112E+04 4.6394E+04 2.2373E+04 1.9542E+04 - 1.1220E-01 3.6221E+04 3.8175E+04 1.8777E+04 1.6250E+04 - 1.2589E-01 2.9853E+04 3.1337E+04 1.5544E+04 1.3517E+04 - 1.4125E-01 2.4426E+04 2.5538E+04 1.2897E+04 1.0894E+04 - 1.5849E-01 1.9734E+04 2.0644E+04 1.0624E+04 8.7382E+03 - 1.7783E-01 1.5713E+04 1.6645E+04 8.6529E+03 7.0375E+03 - 1.9953E-01 1.2441E+04 1.3107E+04 6.9449E+03 5.5437E+03 - 2.2387E-01 9.6893E+03 1.0197E+04 5.5251E+03 4.3676E+03 - 2.5119E-01 7.3741E+03 7.8880E+03 4.4220E+03 3.4201E+03 - 2.8184E-01 5.6421E+03 6.0229E+03 3.4298E+03 2.6036E+03 - 3.1623E-01 4.3073E+03 4.6079E+03 2.6535E+03 1.9204E+03 - 3.5481E-01 3.2449E+03 3.4889E+03 2.0849E+03 1.4534E+03 - 3.9811E-01 2.4005E+03 2.6119E+03 1.5701E+03 1.0986E+03 - 4.4668E-01 1.7773E+03 1.9480E+03 1.1940E+03 8.0805E+02 - 5.0119E-01 1.3188E+03 1.4653E+03 9.2488E+02 6.0363E+02 - 5.6234E-01 9.7152E+02 1.0982E+03 6.8915E+02 4.5262E+02 - 6.3096E-01 7.2323E+02 8.0505E+02 5.0401E+02 3.3789E+02 - 7.0795E-01 5.3507E+02 5.8944E+02 3.7830E+02 2.4584E+02 - 7.9433E-01 3.9763E+02 4.4181E+02 2.8344E+02 1.7870E+02 - 8.9125E-01 2.8688E+02 3.3494E+02 2.1538E+02 1.3238E+02 - 1.0000E+00 2.1484E+02 2.4337E+02 1.5803E+02 9.5689E+01 - 1.1220E+00 1.5775E+02 1.7790E+02 1.1656E+02 6.9355E+01 - 1.2589E+00 1.1777E+02 1.2944E+02 8.7415E+01 5.1273E+01 - 1.4125E+00 8.7235E+01 9.4912E+01 6.4072E+01 3.8954E+01 - 1.5849E+00 6.3019E+01 7.1272E+01 4.7115E+01 2.8803E+01 - 1.7783E+00 4.7100E+01 5.1783E+01 3.4703E+01 2.0747E+01 - 1.9953E+00 3.5450E+01 3.8275E+01 2.4787E+01 1.4493E+01 - 2.2387E+00 2.5885E+01 2.9473E+01 1.7948E+01 1.0232E+01 - 2.5119E+00 1.8595E+01 2.1274E+01 1.3608E+01 7.7202E+00 - 2.8184E+00 1.3898E+01 1.5117E+01 9.9386E+00 5.8479E+00 - 3.1623E+00 9.9824E+00 1.1008E+01 7.1159E+00 4.3025E+00 - 3.5481E+00 7.3560E+00 7.9735E+00 5.0329E+00 3.1884E+00 - 3.9811E+00 5.5038E+00 5.9316E+00 3.7351E+00 2.2257E+00 - 4.4668E+00 4.0847E+00 4.3415E+00 2.7348E+00 1.6276E+00 - 5.0119E+00 2.8984E+00 3.0870E+00 2.0280E+00 1.1845E+00 - 5.6234E+00 2.0138E+00 2.2142E+00 1.4517E+00 8.5355E-01 - 6.3096E+00 1.4453E+00 1.5855E+00 9.4364E-01 6.2854E-01 - 7.0795E+00 1.0897E+00 1.1400E+00 6.6545E-01 4.4523E-01 - 7.9433E+00 8.1789E-01 8.2246E-01 4.8419E-01 3.3556E-01 - 8.9125E+00 6.0018E-01 5.9640E-01 3.6625E-01 2.5994E-01 - 1.0000E+01 4.1624E-01 4.1962E-01 2.4992E-01 1.6743E-01 - 1.1220E+01 3.0305E-01 3.0411E-01 1.7036E-01 1.1985E-01 - 1.2589E+01 2.1887E-01 2.2157E-01 1.2081E-01 8.4455E-02 - 1.4125E+01 1.5599E-01 1.5397E-01 8.5426E-02 5.9766E-02 - 1.5849E+01 1.1095E-01 1.0855E-01 6.1198E-02 4.2226E-02 - 1.7783E+01 7.8711E-02 7.5231E-02 4.3331E-02 2.9579E-02 - 1.9953E+01 5.7682E-02 5.4678E-02 2.8946E-02 2.0465E-02 - 2.2387E+01 4.2026E-02 3.8711E-02 2.0001E-02 1.4416E-02 - 2.5119E+01 2.9602E-02 2.6340E-02 1.3988E-02 9.9608E-03 - 2.8184E+01 2.0838E-02 1.9247E-02 9.8660E-03 7.0869E-03 - 3.1623E+01 1.5901E-02 1.4428E-02 6.8357E-03 5.1777E-03 - 3.5481E+01 1.1383E-02 1.0275E-02 4.7257E-03 3.5887E-03 - 3.9811E+01 8.1527E-03 7.2907E-03 3.2581E-03 2.4716E-03 - 4.4668E+01 5.8212E-03 5.1613E-03 2.2310E-03 1.7080E-03 - 5.0119E+01 4.1616E-03 3.6645E-03 1.5247E-03 1.1796E-03 - 5.6234E+01 2.9892E-03 2.6004E-03 1.0428E-03 8.0353E-04 - 6.3096E+01 2.1310E-03 1.8409E-03 7.0999E-04 5.5025E-04 - 7.0795E+01 1.5250E-03 1.2994E-03 4.8232E-04 3.7214E-04 - 7.9433E+01 1.0891E-03 9.1884E-04 3.2609E-04 2.5205E-04 - 8.9125E+01 7.7196E-04 6.4856E-04 2.1795E-04 1.7269E-04 - 1.0000E+02 5.4653E-04 4.5501E-04 1.4838E-04 1.1561E-04 - 1.1220E+02 3.8856E-04 3.2121E-04 1.0010E-04 7.7688E-05 - 1.2589E+02 2.7674E-04 2.2613E-04 6.6855E-05 5.2093E-05 - 1.4125E+02 1.9655E-04 1.5907E-04 4.4410E-05 3.4803E-05 - 1.5849E+02 1.3925E-04 1.1162E-04 2.9717E-05 2.3149E-05 - 1.7783E+02 9.8277E-05 7.8090E-05 1.9773E-05 1.5406E-05 - 1.9953E+02 6.9313E-05 5.4471E-05 1.3072E-05 1.0214E-05 - 2.2387E+02 4.9136E-05 3.7997E-05 8.7212E-06 6.8666E-06 - 2.5119E+02 3.4676E-05 2.6701E-05 5.7043E-06 4.5961E-06 - 2.8184E+02 2.4469E-05 1.8703E-05 3.7657E-06 2.9984E-06 - 3.1623E+02 1.7185E-05 1.2948E-05 2.4611E-06 1.9483E-06 - 3.5481E+02 1.2092E-05 9.0382E-06 1.6212E-06 1.2893E-06 - 3.9811E+02 8.4993E-06 6.2740E-06 1.0744E-06 8.5545E-07 - 4.4668E+02 5.9530E-06 4.3320E-06 7.0157E-07 5.5556E-07 - 5.0119E+02 4.1592E-06 3.0144E-06 4.5738E-07 3.6622E-07 - 5.6234E+02 2.9171E-06 2.1006E-06 3.0137E-07 2.4231E-07 - 6.3096E+02 2.0419E-06 1.4504E-06 1.9685E-07 1.5913E-07 - 7.0795E+02 1.4291E-06 1.0026E-06 1.2874E-07 1.0407E-07 - 7.9433E+02 9.9530E-07 6.9349E-07 8.5489E-08 6.8254E-08 - 8.9125E+02 6.9448E-07 4.8096E-07 5.5932E-08 4.4283E-08 - 1.0000E+03 4.8714E-07 3.3163E-07 3.6646E-08 2.8914E-08 - 1.1220E+03 3.3771E-07 2.2786E-07 2.4387E-08 1.9154E-08 - 1.2589E+03 2.3585E-07 1.5729E-07 1.5884E-08 1.2578E-08 - 1.4125E+03 1.6461E-07 1.0886E-07 1.0517E-08 8.1999E-09 - 1.5849E+03 1.1412E-07 7.4884E-08 7.0356E-09 5.3824E-09 - 1.7783E+03 7.9469E-08 5.1513E-08 4.5895E-09 3.6093E-09 - 1.9953E+03 5.5085E-08 3.5283E-08 3.0162E-09 2.3974E-09 - 2.2387E+03 3.8095E-08 2.4228E-08 2.0521E-09 1.5951E-09 - 2.5119E+03 2.6613E-08 1.6533E-08 1.3604E-09 1.0341E-09 - 2.8184E+03 1.8477E-08 1.1334E-08 8.9656E-10 6.8343E-10 - 3.1623E+03 1.2643E-08 7.8020E-09 5.8770E-10 4.5698E-10 - 3.5481E+03 8.6593E-09 5.2956E-09 3.8992E-10 3.0100E-10 - 3.9811E+03 5.9346E-09 3.6071E-09 2.5768E-10 1.9366E-10 - 4.4668E+03 4.0956E-09 2.4627E-09 1.7014E-10 1.2835E-10 - 5.0119E+03 2.8272E-09 1.6847E-09 1.1476E-10 8.5236E-11 - 5.6234E+03 1.9272E-09 1.1340E-09 7.6525E-11 5.7637E-11 - 6.3096E+03 1.3070E-09 7.6510E-10 4.9788E-11 3.7378E-11 - 7.0795E+03 8.9369E-10 5.1796E-10 3.2274E-11 2.4411E-11 - 7.9433E+03 6.0940E-10 3.5115E-10 2.0688E-11 1.5752E-11 - 8.9125E+03 4.1457E-10 2.3467E-10 1.3818E-11 1.0443E-11 - 1.0000E+04 2.7867E-10 1.5671E-10 9.4788E-12 6.7202E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.4248E+04 4.6166E+04 2.2432E+04 1.9933E+04 - 1.1220E-01 3.6552E+04 3.7911E+04 1.8892E+04 1.6370E+04 - 1.2589E-01 2.9952E+04 3.1186E+04 1.5750E+04 1.3379E+04 - 1.4125E-01 2.4355E+04 2.5638E+04 1.2927E+04 1.0935E+04 - 1.5849E-01 1.9800E+04 2.0741E+04 1.0555E+04 8.8725E+03 - 1.7783E-01 1.5861E+04 1.6513E+04 8.5794E+03 7.0424E+03 - 1.9953E-01 1.2460E+04 1.3034E+04 6.9822E+03 5.5038E+03 - 2.2387E-01 9.5979E+03 1.0227E+04 5.5928E+03 4.2908E+03 - 2.5119E-01 7.3201E+03 7.8977E+03 4.4282E+03 3.3384E+03 - 2.8184E-01 5.6150E+03 6.0181E+03 3.4721E+03 2.5861E+03 - 3.1623E-01 4.2978E+03 4.5668E+03 2.6745E+03 1.9575E+03 - 3.5481E-01 3.2342E+03 3.4545E+03 2.0684E+03 1.4996E+03 - 3.9811E-01 2.4375E+03 2.5895E+03 1.5811E+03 1.1444E+03 - 4.4668E-01 1.8065E+03 1.9428E+03 1.1904E+03 8.4796E+02 - 5.0119E-01 1.3477E+03 1.4830E+03 8.9882E+02 6.3254E+02 - 5.6234E-01 9.9934E+02 1.1143E+03 6.6813E+02 4.5746E+02 - 6.3096E-01 7.2925E+02 8.1280E+02 4.9840E+02 3.3029E+02 - 7.0795E-01 5.3334E+02 5.9529E+02 3.7798E+02 2.4358E+02 - 7.9433E-01 3.9939E+02 4.3592E+02 2.8171E+02 1.7988E+02 - 8.9125E-01 2.9615E+02 3.2419E+02 2.0871E+02 1.3326E+02 - 1.0000E+00 2.1742E+02 2.4432E+02 1.5531E+02 9.6371E+01 - 1.1220E+00 1.5988E+02 1.8168E+02 1.1435E+02 7.0365E+01 - 1.2589E+00 1.1665E+02 1.3244E+02 8.4940E+01 5.1252E+01 - 1.4125E+00 8.6380E+01 9.6910E+01 6.2400E+01 3.7459E+01 - 1.5849E+00 6.4624E+01 7.0735E+01 4.6069E+01 2.7541E+01 - 1.7783E+00 4.6446E+01 5.1813E+01 3.3461E+01 2.1206E+01 - 1.9953E+00 3.4052E+01 3.8925E+01 2.4609E+01 1.5061E+01 - 2.2387E+00 2.5928E+01 2.8503E+01 1.8170E+01 1.0852E+01 - 2.5119E+00 1.8980E+01 2.0776E+01 1.3542E+01 8.2287E+00 - 2.8184E+00 1.3538E+01 1.4787E+01 1.0147E+01 6.0709E+00 - 3.1623E+00 9.9895E+00 1.1101E+01 7.2340E+00 4.2264E+00 - 3.5481E+00 7.3992E+00 8.0798E+00 5.2365E+00 3.0602E+00 - 3.9811E+00 5.4931E+00 5.8114E+00 3.6697E+00 2.2268E+00 - 4.4668E+00 3.9283E+00 4.2672E+00 2.6627E+00 1.6329E+00 - 5.0119E+00 2.7976E+00 3.1160E+00 1.9517E+00 1.1510E+00 - 5.6234E+00 2.0178E+00 2.2377E+00 1.3896E+00 7.9988E-01 - 6.3096E+00 1.4823E+00 1.5631E+00 1.0237E+00 5.8473E-01 - 7.0795E+00 1.0730E+00 1.0970E+00 7.3465E-01 4.2821E-01 - 7.9433E+00 7.7394E-01 8.2353E-01 5.0536E-01 3.0748E-01 - 8.9125E+00 5.7254E-01 6.1060E-01 3.7303E-01 2.2756E-01 - 1.0000E+01 4.2197E-01 4.1874E-01 2.5269E-01 1.6445E-01 - 1.1220E+01 3.0212E-01 3.0170E-01 1.7452E-01 1.1781E-01 - 1.2589E+01 2.1300E-01 2.1383E-01 1.2636E-01 8.4457E-02 - 1.4125E+01 1.5629E-01 1.5083E-01 8.9171E-02 6.0230E-02 - 1.5849E+01 1.1459E-01 1.0774E-01 6.1017E-02 4.1407E-02 - 1.7783E+01 8.1359E-02 7.7849E-02 4.1633E-02 2.8921E-02 - 1.9953E+01 5.8198E-02 5.7161E-02 2.8459E-02 2.2028E-02 - 2.2387E+01 4.1319E-02 3.9947E-02 2.0604E-02 1.5657E-02 - 2.5119E+01 2.8783E-02 2.8969E-02 1.3888E-02 1.0414E-02 - 2.8184E+01 2.0210E-02 2.0785E-02 1.0049E-02 7.0181E-03 - 3.1623E+01 1.5875E-02 1.4372E-02 6.8616E-03 5.1819E-03 - 3.5481E+01 1.1373E-02 1.0227E-02 4.7175E-03 3.5975E-03 - 3.9811E+01 8.1327E-03 7.2714E-03 3.2496E-03 2.4757E-03 - 4.4668E+01 5.8038E-03 5.1578E-03 2.2384E-03 1.7021E-03 - 5.0119E+01 4.1568E-03 3.6586E-03 1.5304E-03 1.1712E-03 - 5.6234E+01 2.9818E-03 2.5968E-03 1.0403E-03 7.9960E-04 - 6.3096E+01 2.1292E-03 1.8377E-03 7.0892E-04 5.4973E-04 - 7.0795E+01 1.5177E-03 1.2973E-03 4.8107E-04 3.7355E-04 - 7.9433E+01 1.0841E-03 9.1559E-04 3.2774E-04 2.5258E-04 - 8.9125E+01 7.6998E-04 6.4705E-04 2.2047E-04 1.7015E-04 - 1.0000E+02 5.4674E-04 4.5506E-04 1.4782E-04 1.1491E-04 - 1.1220E+02 3.8806E-04 3.1991E-04 9.9219E-05 7.7481E-05 - 1.2589E+02 2.7575E-04 2.2592E-04 6.6619E-05 5.2051E-05 - 1.4125E+02 1.9607E-04 1.5861E-04 4.4265E-05 3.4794E-05 - 1.5849E+02 1.3903E-04 1.1075E-04 2.9334E-05 2.3196E-05 - 1.7783E+02 9.8380E-05 7.7741E-05 1.9587E-05 1.5441E-05 - 1.9953E+02 6.9516E-05 5.4391E-05 1.2892E-05 1.0387E-05 - 2.2387E+02 4.9025E-05 3.8107E-05 8.4913E-06 6.7786E-06 - 2.5119E+02 3.4460E-05 2.6711E-05 5.6782E-06 4.3684E-06 - 2.8184E+02 2.4220E-05 1.8758E-05 3.7900E-06 2.8963E-06 - 3.1623E+02 1.7197E-05 1.2980E-05 2.4989E-06 1.9538E-06 - 3.5481E+02 1.2079E-05 9.0091E-06 1.6314E-06 1.2796E-06 - 3.9811E+02 8.4853E-06 6.2693E-06 1.0585E-06 8.4369E-07 - 4.4668E+02 5.9684E-06 4.3571E-06 6.9809E-07 5.5642E-07 - 5.0119E+02 4.1860E-06 3.0205E-06 4.6341E-07 3.6730E-07 - 5.6234E+02 2.9284E-06 2.0985E-06 3.0225E-07 2.4002E-07 - 6.3096E+02 2.0457E-06 1.4521E-06 1.9827E-07 1.5733E-07 - 7.0795E+02 1.4242E-06 1.0054E-06 1.2922E-07 1.0336E-07 - 7.9433E+02 9.9429E-07 6.9721E-07 8.5114E-08 6.7757E-08 - 8.9125E+02 6.9670E-07 4.8047E-07 5.5231E-08 4.4389E-08 - 1.0000E+03 4.8600E-07 3.3259E-07 3.6739E-08 2.9010E-08 - 1.1220E+03 3.3969E-07 2.2938E-07 2.4557E-08 1.9248E-08 - 1.2589E+03 2.3627E-07 1.5763E-07 1.6050E-08 1.2615E-08 - 1.4125E+03 1.6401E-07 1.0853E-07 1.0288E-08 8.1303E-09 - 1.5849E+03 1.1357E-07 7.4623E-08 6.8036E-09 5.4579E-09 - 1.7783E+03 7.8966E-08 5.1689E-08 4.6580E-09 3.6315E-09 - 1.9953E+03 5.5089E-08 3.5422E-08 3.0347E-09 2.3742E-09 - 2.2387E+03 3.8164E-08 2.4283E-08 1.9957E-09 1.6034E-09 - 2.5119E+03 2.6462E-08 1.6623E-08 1.3176E-09 1.0507E-09 - 2.8184E+03 1.8444E-08 1.1417E-08 8.5334E-10 6.7699E-10 - 3.1623E+03 1.2723E-08 7.8583E-09 5.8651E-10 4.5138E-10 - 3.5481E+03 8.6925E-09 5.3418E-09 3.9656E-10 2.9863E-10 - 3.9811E+03 5.9708E-09 3.6267E-09 2.6292E-10 1.9908E-10 - 4.4668E+03 4.0980E-09 2.4467E-09 1.7309E-10 1.3082E-10 - 5.0119E+03 2.7923E-09 1.6670E-09 1.1481E-10 8.2380E-11 - 5.6234E+03 1.9078E-09 1.1315E-09 7.4069E-11 5.4604E-11 - 6.3096E+03 1.3161E-09 7.6569E-10 5.0745E-11 3.7417E-11 - 7.0795E+03 8.8967E-10 5.1862E-10 3.3214E-11 2.4647E-11 - 7.9433E+03 6.0314E-10 3.4912E-10 2.1764E-11 1.5940E-11 - 8.9125E+03 4.1096E-10 2.3659E-10 1.4239E-11 1.0438E-11 - 1.0000E+04 2.7851E-10 1.5760E-10 9.0244E-12 7.0251E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3941E+04 4.5788E+04 2.1718E+04 1.9942E+04 - 1.1220E-01 3.6231E+04 3.7584E+04 1.8254E+04 1.6651E+04 - 1.2589E-01 2.9695E+04 3.0717E+04 1.5114E+04 1.3455E+04 - 1.4125E-01 2.4373E+04 2.4998E+04 1.2558E+04 1.0984E+04 - 1.5849E-01 1.9660E+04 2.0287E+04 1.0288E+04 8.8839E+03 - 1.7783E-01 1.5650E+04 1.6274E+04 8.3567E+03 7.0394E+03 - 1.9953E-01 1.2295E+04 1.2779E+04 6.7259E+03 5.5351E+03 - 2.2387E-01 9.5663E+03 9.9180E+03 5.3494E+03 4.2605E+03 - 2.5119E-01 7.3973E+03 7.6372E+03 4.2410E+03 3.3369E+03 - 2.8184E-01 5.5933E+03 5.8211E+03 3.3351E+03 2.6127E+03 - 3.1623E-01 4.2547E+03 4.4514E+03 2.5988E+03 1.9726E+03 - 3.5481E-01 3.2480E+03 3.3895E+03 2.0065E+03 1.4490E+03 - 3.9811E-01 2.4482E+03 2.5498E+03 1.5256E+03 1.0846E+03 - 4.4668E-01 1.8158E+03 1.9047E+03 1.1596E+03 8.0953E+02 - 5.0119E-01 1.3209E+03 1.4295E+03 8.5661E+02 6.1187E+02 - 5.6234E-01 9.6299E+02 1.0427E+03 6.2164E+02 4.5979E+02 - 6.3096E-01 7.1140E+02 7.6125E+02 4.7094E+02 3.3004E+02 - 7.0795E-01 5.2612E+02 5.7702E+02 3.5067E+02 2.3962E+02 - 7.9433E-01 3.9123E+02 4.2889E+02 2.6187E+02 1.7908E+02 - 8.9125E-01 2.8656E+02 3.1568E+02 2.0197E+02 1.3340E+02 - 1.0000E+00 2.1590E+02 2.3120E+02 1.4980E+02 9.9128E+01 - 1.1220E+00 1.6030E+02 1.7262E+02 1.1044E+02 7.2942E+01 - 1.2589E+00 1.1814E+02 1.2764E+02 7.9496E+01 5.1218E+01 - 1.4125E+00 8.7807E+01 9.4088E+01 5.8554E+01 3.6578E+01 - 1.5849E+00 6.3827E+01 7.0278E+01 4.4383E+01 2.7229E+01 - 1.7783E+00 4.5425E+01 5.1295E+01 3.2840E+01 2.0520E+01 - 1.9953E+00 3.4199E+01 3.7339E+01 2.4559E+01 1.5024E+01 - 2.2387E+00 2.5695E+01 2.7422E+01 1.7086E+01 1.1091E+01 - 2.5119E+00 1.8658E+01 2.0154E+01 1.2130E+01 7.9434E+00 - 2.8184E+00 1.3665E+01 1.5100E+01 9.6128E+00 5.7663E+00 - 3.1623E+00 9.9177E+00 1.0825E+01 6.8759E+00 4.3442E+00 - 3.5481E+00 7.3952E+00 7.8199E+00 5.0005E+00 3.1796E+00 - 3.9811E+00 5.3682E+00 5.6918E+00 3.6544E+00 2.2392E+00 - 4.4668E+00 3.8782E+00 4.2461E+00 2.6980E+00 1.6187E+00 - 5.0119E+00 2.9248E+00 3.1242E+00 1.8861E+00 1.1887E+00 - 5.6234E+00 2.1656E+00 2.1602E+00 1.3376E+00 8.7726E-01 - 6.3096E+00 1.5685E+00 1.5195E+00 9.5244E-01 6.4647E-01 - 7.0795E+00 1.1221E+00 1.1522E+00 7.0248E-01 4.7330E-01 - 7.9433E+00 8.1471E-01 8.1930E-01 5.0255E-01 3.3912E-01 - 8.9125E+00 5.8356E-01 5.7069E-01 3.4051E-01 2.3551E-01 - 1.0000E+01 4.1373E-01 4.1840E-01 2.4635E-01 1.6465E-01 - 1.1220E+01 3.0291E-01 2.9928E-01 1.7582E-01 1.2002E-01 - 1.2589E+01 2.1763E-01 2.1098E-01 1.2309E-01 8.7084E-02 - 1.4125E+01 1.5416E-01 1.5239E-01 8.6261E-02 6.0294E-02 - 1.5849E+01 1.1082E-01 1.1059E-01 6.1046E-02 4.0207E-02 - 1.7783E+01 7.7775E-02 7.9282E-02 4.3120E-02 2.9136E-02 - 1.9953E+01 5.7706E-02 5.5475E-02 2.9798E-02 2.1875E-02 - 2.2387E+01 4.4003E-02 3.8799E-02 2.0225E-02 1.5178E-02 - 2.5119E+01 2.9871E-02 2.7275E-02 1.3516E-02 1.0468E-02 - 2.8184E+01 2.1146E-02 1.9535E-02 9.0081E-03 7.1266E-03 - 3.1623E+01 1.5838E-02 1.4340E-02 6.8318E-03 5.1947E-03 - 3.5481E+01 1.1364E-02 1.0203E-02 4.7069E-03 3.5962E-03 - 3.9811E+01 8.1685E-03 7.2713E-03 3.2515E-03 2.4923E-03 - 4.4668E+01 5.8363E-03 5.1681E-03 2.2294E-03 1.7124E-03 - 5.0119E+01 4.1583E-03 3.6568E-03 1.5234E-03 1.1773E-03 - 5.6234E+01 2.9590E-03 2.5886E-03 1.0414E-03 8.0816E-04 - 6.3096E+01 2.1179E-03 1.8305E-03 7.0711E-04 5.4687E-04 - 7.0795E+01 1.5125E-03 1.3000E-03 4.8084E-04 3.7445E-04 - 7.9433E+01 1.0807E-03 9.1951E-04 3.2735E-04 2.5555E-04 - 8.9125E+01 7.7344E-04 6.4465E-04 2.2113E-04 1.7138E-04 - 1.0000E+02 5.4724E-04 4.5631E-04 1.4797E-04 1.1499E-04 - 1.1220E+02 3.8900E-04 3.2129E-04 9.9372E-05 7.7348E-05 - 1.2589E+02 2.7604E-04 2.2615E-04 6.6671E-05 5.2375E-05 - 1.4125E+02 1.9600E-04 1.5930E-04 4.4442E-05 3.5032E-05 - 1.5849E+02 1.3873E-04 1.1164E-04 2.9623E-05 2.3192E-05 - 1.7783E+02 9.8230E-05 7.7970E-05 1.9769E-05 1.5362E-05 - 1.9953E+02 6.9617E-05 5.4485E-05 1.3093E-05 1.0189E-05 - 2.2387E+02 4.9138E-05 3.8024E-05 8.6957E-06 6.7704E-06 - 2.5119E+02 3.4800E-05 2.6535E-05 5.7182E-06 4.4028E-06 - 2.8184E+02 2.4420E-05 1.8508E-05 3.7682E-06 2.8894E-06 - 3.1623E+02 1.7159E-05 1.3001E-05 2.4722E-06 1.9449E-06 - 3.5481E+02 1.2045E-05 9.0090E-06 1.6214E-06 1.2737E-06 - 3.9811E+02 8.4664E-06 6.2404E-06 1.0712E-06 8.4541E-07 - 4.4668E+02 5.9263E-06 4.3506E-06 7.0846E-07 5.5600E-07 - 5.0119E+02 4.1425E-06 3.0304E-06 4.6176E-07 3.6669E-07 - 5.6234E+02 2.9214E-06 2.1048E-06 3.0460E-07 2.3888E-07 - 6.3096E+02 2.0370E-06 1.4560E-06 1.9925E-07 1.5728E-07 - 7.0795E+02 1.4228E-06 1.0030E-06 1.2983E-07 1.0477E-07 - 7.9433E+02 9.9654E-07 6.9211E-07 8.5608E-08 6.8016E-08 - 8.9125E+02 6.9605E-07 4.7900E-07 5.5892E-08 4.4013E-08 - 1.0000E+03 4.8601E-07 3.3232E-07 3.6587E-08 2.9221E-08 - 1.1220E+03 3.3879E-07 2.2889E-07 2.4297E-08 1.9095E-08 - 1.2589E+03 2.3550E-07 1.5737E-07 1.6150E-08 1.2541E-08 - 1.4125E+03 1.6282E-07 1.0781E-07 1.0549E-08 8.3454E-09 - 1.5849E+03 1.1403E-07 7.4540E-08 6.8376E-09 5.3581E-09 - 1.7783E+03 7.9645E-08 5.1546E-08 4.5730E-09 3.4154E-09 - 1.9953E+03 5.4939E-08 3.5310E-08 3.0004E-09 2.3809E-09 - 2.2387E+03 3.8307E-08 2.4245E-08 1.9813E-09 1.5660E-09 - 2.5119E+03 2.6423E-08 1.6693E-08 1.3417E-09 1.0334E-09 - 2.8184E+03 1.8172E-08 1.1428E-08 8.8816E-10 6.9273E-10 - 3.1623E+03 1.2659E-08 7.8583E-09 5.8858E-10 4.5008E-10 - 3.5481E+03 8.7134E-09 5.3202E-09 3.9402E-10 2.9377E-10 - 3.9811E+03 5.9780E-09 3.6209E-09 2.6212E-10 1.9636E-10 - 4.4668E+03 4.0935E-09 2.4823E-09 1.7491E-10 1.2920E-10 - 5.0119E+03 2.8220E-09 1.6861E-09 1.1523E-10 8.2322E-11 - 5.6234E+03 1.9395E-09 1.1380E-09 7.6629E-11 5.3338E-11 - 6.3096E+03 1.3170E-09 7.7150E-10 5.1135E-11 3.5827E-11 - 7.0795E+03 8.8949E-10 5.1805E-10 3.3349E-11 2.3640E-11 - 7.9433E+03 6.0263E-10 3.5022E-10 2.1508E-11 1.5250E-11 - 8.9125E+03 4.0962E-10 2.3765E-10 1.4272E-11 1.0397E-11 - 1.0000E+04 2.7840E-10 1.5868E-10 9.3768E-12 7.0621E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5825E+04 2.6466E+04 1.2822E+04 1.1699E+04 - 1.1220E-01 2.1687E+04 2.2273E+04 1.0915E+04 9.9440E+03 - 1.2589E-01 1.8167E+04 1.8565E+04 9.2126E+03 8.3208E+03 - 1.4125E-01 1.5065E+04 1.5390E+04 7.7199E+03 6.8543E+03 - 1.5849E-01 1.2335E+04 1.2578E+04 6.4155E+03 5.6311E+03 - 1.7783E-01 1.0044E+04 1.0152E+04 5.2720E+03 4.5314E+03 - 1.9953E-01 8.1114E+03 8.1507E+03 4.2878E+03 3.6340E+03 - 2.2387E-01 6.4299E+03 6.4862E+03 3.4757E+03 2.9162E+03 - 2.5119E-01 5.0322E+03 5.1259E+03 2.7749E+03 2.2891E+03 - 2.8184E-01 3.9099E+03 4.0101E+03 2.2038E+03 1.7903E+03 - 3.1623E-01 3.0051E+03 3.0937E+03 1.7510E+03 1.4115E+03 - 3.5481E-01 2.3016E+03 2.3656E+03 1.3639E+03 1.0916E+03 - 3.9811E-01 1.7713E+03 1.8070E+03 1.0439E+03 8.2900E+02 - 4.4668E-01 1.3439E+03 1.3804E+03 7.9933E+02 6.3237E+02 - 5.0119E-01 1.0133E+03 1.0441E+03 6.1752E+02 4.8156E+02 - 5.6234E-01 7.7146E+02 7.8490E+02 4.7518E+02 3.6101E+02 - 6.3096E-01 5.8375E+02 5.9664E+02 3.6414E+02 2.7598E+02 - 7.0795E-01 4.3479E+02 4.4823E+02 2.7961E+02 2.0528E+02 - 7.9433E-01 3.2731E+02 3.3642E+02 2.0821E+02 1.5160E+02 - 8.9125E-01 2.4666E+02 2.5337E+02 1.5650E+02 1.1404E+02 - 1.0000E+00 1.8731E+02 1.9016E+02 1.1730E+02 8.6380E+01 - 1.1220E+00 1.4026E+02 1.4187E+02 8.7860E+01 6.4932E+01 - 1.2589E+00 1.0554E+02 1.0618E+02 6.5601E+01 4.8869E+01 - 1.4125E+00 7.9586E+01 7.9451E+01 4.8917E+01 3.5954E+01 - 1.5849E+00 5.9172E+01 5.8597E+01 3.6292E+01 2.6814E+01 - 1.7783E+00 4.3897E+01 4.3916E+01 2.6829E+01 2.0131E+01 - 1.9953E+00 3.3029E+01 3.2562E+01 1.9839E+01 1.4660E+01 - 2.2387E+00 2.4414E+01 2.3619E+01 1.4590E+01 1.0916E+01 - 2.5119E+00 1.7902E+01 1.7605E+01 1.0672E+01 8.1021E+00 - 2.8184E+00 1.3153E+01 1.2953E+01 7.8348E+00 5.7988E+00 - 3.1623E+00 9.7625E+00 9.4036E+00 5.6788E+00 4.1558E+00 - 3.5481E+00 7.1783E+00 6.8639E+00 4.1139E+00 3.0332E+00 - 3.9811E+00 5.1970E+00 5.0185E+00 2.9829E+00 2.2069E+00 - 4.4668E+00 3.7830E+00 3.6110E+00 2.1415E+00 1.5643E+00 - 5.0119E+00 2.7523E+00 2.5950E+00 1.5183E+00 1.1262E+00 - 5.6234E+00 1.9962E+00 1.8858E+00 1.0933E+00 8.0545E-01 - 6.3096E+00 1.4476E+00 1.3735E+00 7.7455E-01 5.6754E-01 - 7.0795E+00 1.0444E+00 9.9685E-01 5.3762E-01 3.9780E-01 - 7.9433E+00 7.5646E-01 7.0727E-01 3.7717E-01 2.8098E-01 - 8.9125E+00 5.5061E-01 4.8972E-01 2.6367E-01 2.0096E-01 - 1.0000E+01 3.8661E-01 3.5392E-01 1.8816E-01 1.3835E-01 - 1.1220E+01 2.7529E-01 2.5514E-01 1.3083E-01 9.5821E-02 - 1.2589E+01 1.9825E-01 1.8027E-01 8.9857E-02 6.5444E-02 - 1.4125E+01 1.4108E-01 1.2605E-01 6.2070E-02 4.6247E-02 - 1.5849E+01 1.0164E-01 8.9373E-02 4.2255E-02 3.3380E-02 - 1.7783E+01 7.3163E-02 6.3961E-02 2.8957E-02 2.2158E-02 - 1.9953E+01 5.2029E-02 4.6097E-02 1.9732E-02 1.4937E-02 - 2.2387E+01 3.7717E-02 3.2863E-02 1.3350E-02 1.0521E-02 - 2.5119E+01 2.7037E-02 2.3235E-02 8.9604E-03 7.0684E-03 - 2.8184E+01 1.8818E-02 1.6572E-02 6.0216E-03 4.8189E-03 - 3.1623E+01 1.3554E-02 1.1544E-02 4.3232E-03 3.2744E-03 - 3.5481E+01 9.6773E-03 8.1799E-03 2.9220E-03 2.2243E-03 - 3.9811E+01 6.9148E-03 5.7980E-03 1.9730E-03 1.5050E-03 - 4.4668E+01 4.9270E-03 4.1084E-03 1.3277E-03 1.0156E-03 - 5.0119E+01 3.5118E-03 2.9043E-03 8.9081E-04 6.8391E-04 - 5.6234E+01 2.5102E-03 2.0518E-03 5.9855E-04 4.5864E-04 - 6.3096E+01 1.7891E-03 1.4406E-03 3.9644E-04 3.0746E-04 - 7.0795E+01 1.2732E-03 1.0141E-03 2.6294E-04 2.0589E-04 - 7.9433E+01 9.0668E-04 7.1778E-04 1.7684E-04 1.3789E-04 - 8.9125E+01 6.4580E-04 5.0293E-04 1.1754E-04 9.2230E-05 - 1.0000E+02 4.5683E-04 3.5657E-04 7.8536E-05 6.1515E-05 - 1.1220E+02 3.2378E-04 2.5090E-04 5.2402E-05 4.0840E-05 - 1.2589E+02 2.2945E-04 1.7627E-04 3.4675E-05 2.7172E-05 - 1.4125E+02 1.6285E-04 1.2385E-04 2.2812E-05 1.8222E-05 - 1.5849E+02 1.1494E-04 8.7001E-05 1.4969E-05 1.2142E-05 - 1.7783E+02 8.0947E-05 6.0890E-05 9.9220E-06 7.9997E-06 - 1.9953E+02 5.7302E-05 4.2300E-05 6.6032E-06 5.3097E-06 - 2.2387E+02 4.0414E-05 2.9564E-05 4.3262E-06 3.4840E-06 - 2.5119E+02 2.8370E-05 2.0619E-05 2.8639E-06 2.3184E-06 - 2.8184E+02 1.9928E-05 1.4426E-05 1.9014E-06 1.5272E-06 - 3.1623E+02 1.4063E-05 1.0104E-05 1.2671E-06 1.0086E-06 - 3.5481E+02 9.8797E-06 7.0011E-06 8.3799E-07 6.6882E-07 - 3.9811E+02 6.9369E-06 4.8705E-06 5.5315E-07 4.4449E-07 - 4.4668E+02 4.8618E-06 3.3797E-06 3.6504E-07 2.9769E-07 - 5.0119E+02 3.4062E-06 2.3571E-06 2.4268E-07 1.9801E-07 - 5.6234E+02 2.3878E-06 1.6355E-06 1.6257E-07 1.2903E-07 - 6.3096E+02 1.6604E-06 1.1326E-06 1.0953E-07 8.5253E-08 - 7.0795E+02 1.1581E-06 7.8302E-07 7.2831E-08 5.7119E-08 - 7.9433E+02 8.1102E-07 5.4326E-07 4.8033E-08 3.8487E-08 - 8.9125E+02 5.6678E-07 3.7586E-07 3.2301E-08 2.5410E-08 - 1.0000E+03 3.9511E-07 2.5931E-07 2.1242E-08 1.6870E-08 - 1.1220E+03 2.7480E-07 1.7862E-07 1.4056E-08 1.1363E-08 - 1.2589E+03 1.9034E-07 1.2313E-07 9.3680E-09 7.7024E-09 - 1.4125E+03 1.3178E-07 8.4161E-08 6.3258E-09 5.0962E-09 - 1.5849E+03 9.2086E-08 5.7475E-08 4.2340E-09 3.4684E-09 - 1.7783E+03 6.3963E-08 3.9584E-08 2.8842E-09 2.2678E-09 - 1.9953E+03 4.4105E-08 2.7390E-08 1.9098E-09 1.5418E-09 - 2.2387E+03 3.0521E-08 1.8775E-08 1.2474E-09 1.0281E-09 - 2.5119E+03 2.0981E-08 1.2878E-08 8.3791E-10 6.5267E-10 - 2.8184E+03 1.4354E-08 8.7666E-09 5.8400E-10 4.3191E-10 - 3.1623E+03 9.9890E-09 6.0091E-09 3.9029E-10 2.9586E-10 - 3.5481E+03 6.7469E-09 4.0351E-09 2.6357E-10 1.9134E-10 - 3.9811E+03 4.6163E-09 2.7145E-09 1.7307E-10 1.2622E-10 - 4.4668E+03 3.1466E-09 1.8291E-09 1.0995E-10 8.6404E-11 - 5.0119E+03 2.1428E-09 1.2465E-09 7.3207E-11 5.5330E-11 - 5.6234E+03 1.4508E-09 8.3898E-10 4.7683E-11 3.4252E-11 - 6.3096E+03 9.8196E-10 5.6978E-10 3.2593E-11 2.4422E-11 - 7.0795E+03 6.6325E-10 3.8075E-10 2.1902E-11 1.6692E-11 - 7.9433E+03 4.4527E-10 2.5150E-10 1.4989E-11 1.1011E-11 - 8.9125E+03 3.0151E-10 1.6799E-10 9.7560E-12 7.0984E-12 - 1.0000E+04 2.0323E-10 1.1141E-10 6.0439E-12 4.4701E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5668E+04 2.5814E+04 1.2433E+04 1.1701E+04 - 1.1220E-01 2.1508E+04 2.1661E+04 1.0563E+04 9.9354E+03 - 1.2589E-01 1.8032E+04 1.7992E+04 8.9322E+03 8.3430E+03 - 1.4125E-01 1.4932E+04 1.4813E+04 7.4654E+03 6.9039E+03 - 1.5849E-01 1.2188E+04 1.2193E+04 6.1185E+03 5.6322E+03 - 1.7783E-01 9.9293E+03 9.8813E+03 5.0156E+03 4.5340E+03 - 1.9953E-01 8.0151E+03 7.8573E+03 4.1054E+03 3.6403E+03 - 2.2387E-01 6.3565E+03 6.2094E+03 3.3024E+03 2.9203E+03 - 2.5119E-01 4.9735E+03 4.8819E+03 2.6277E+03 2.3173E+03 - 2.8184E-01 3.8811E+03 3.8035E+03 2.0669E+03 1.8202E+03 - 3.1623E-01 3.0006E+03 2.9483E+03 1.6151E+03 1.4100E+03 - 3.5481E-01 2.2767E+03 2.2705E+03 1.2671E+03 1.0901E+03 - 3.9811E-01 1.7553E+03 1.7244E+03 9.7789E+02 8.4142E+02 - 4.4668E-01 1.3507E+03 1.3113E+03 7.5422E+02 6.4195E+02 - 5.0119E-01 1.0207E+03 9.8873E+02 5.8445E+02 4.7981E+02 - 5.6234E-01 7.7767E+02 7.3705E+02 4.4310E+02 3.6484E+02 - 6.3096E-01 5.8164E+02 5.5699E+02 3.3429E+02 2.7561E+02 - 7.0795E-01 4.3583E+02 4.2114E+02 2.5270E+02 2.0737E+02 - 7.9433E-01 3.3254E+02 3.1698E+02 1.8841E+02 1.5599E+02 - 8.9125E-01 2.4909E+02 2.3593E+02 1.4426E+02 1.1698E+02 - 1.0000E+00 1.8709E+02 1.7825E+02 1.0736E+02 8.8164E+01 - 1.1220E+00 1.3947E+02 1.3541E+02 8.0908E+01 6.5485E+01 - 1.2589E+00 1.0495E+02 1.0090E+02 6.0619E+01 4.9187E+01 - 1.4125E+00 7.9410E+01 7.4703E+01 4.5215E+01 3.7122E+01 - 1.5849E+00 5.9581E+01 5.5526E+01 3.3489E+01 2.7982E+01 - 1.7783E+00 4.4137E+01 4.1713E+01 2.5003E+01 2.0439E+01 - 1.9953E+00 3.2649E+01 3.1601E+01 1.8776E+01 1.5120E+01 - 2.2387E+00 2.4444E+01 2.3570E+01 1.3978E+01 1.1229E+01 - 2.5119E+00 1.8231E+01 1.7263E+01 1.0422E+01 8.1397E+00 - 2.8184E+00 1.3147E+01 1.2651E+01 7.7114E+00 5.8694E+00 - 3.1623E+00 9.6887E+00 9.0907E+00 5.4817E+00 4.2820E+00 - 3.5481E+00 7.1260E+00 6.6341E+00 3.9720E+00 3.1085E+00 - 3.9811E+00 5.2078E+00 4.8246E+00 2.8683E+00 2.2329E+00 - 4.4668E+00 3.7964E+00 3.4915E+00 2.0804E+00 1.5939E+00 - 5.0119E+00 2.7229E+00 2.5230E+00 1.4819E+00 1.1277E+00 - 5.6234E+00 1.9574E+00 1.8592E+00 1.0623E+00 7.8942E-01 - 6.3096E+00 1.4241E+00 1.3614E+00 7.4296E-01 5.6221E-01 - 7.0795E+00 1.0442E+00 9.5307E-01 5.2290E-01 4.0231E-01 - 7.9433E+00 7.5878E-01 6.8723E-01 3.7954E-01 2.8216E-01 - 8.9125E+00 5.4257E-01 4.9170E-01 2.7239E-01 1.9578E-01 - 1.0000E+01 3.8843E-01 3.5712E-01 1.8688E-01 1.3756E-01 - 1.1220E+01 2.7799E-01 2.5324E-01 1.2697E-01 9.5994E-02 - 1.2589E+01 1.9951E-01 1.8289E-01 8.8404E-02 6.7655E-02 - 1.4125E+01 1.4375E-01 1.2801E-01 6.1005E-02 4.6111E-02 - 1.5849E+01 1.0191E-01 8.9439E-02 4.1821E-02 3.1974E-02 - 1.7783E+01 7.2553E-02 6.3987E-02 2.9460E-02 2.1953E-02 - 1.9953E+01 5.1930E-02 4.4992E-02 2.0202E-02 1.4606E-02 - 2.2387E+01 3.6827E-02 3.1706E-02 1.3843E-02 1.0004E-02 - 2.5119E+01 2.6334E-02 2.2943E-02 9.7459E-03 7.0295E-03 - 2.8184E+01 1.8865E-02 1.6651E-02 6.5572E-03 4.8196E-03 - 3.1623E+01 1.3562E-02 1.1575E-02 4.3337E-03 3.2960E-03 - 3.5481E+01 9.6977E-03 8.1840E-03 2.9339E-03 2.2208E-03 - 3.9811E+01 6.9470E-03 5.7865E-03 1.9764E-03 1.4993E-03 - 4.4668E+01 4.9445E-03 4.0939E-03 1.3341E-03 1.0208E-03 - 5.0119E+01 3.5207E-03 2.9041E-03 8.9622E-04 6.9425E-04 - 5.6234E+01 2.5194E-03 2.0533E-03 6.0017E-04 4.5984E-04 - 6.3096E+01 1.7928E-03 1.4501E-03 4.0242E-04 3.0555E-04 - 7.0795E+01 1.2770E-03 1.0202E-03 2.6589E-04 2.0725E-04 - 7.9433E+01 9.0593E-04 7.1610E-04 1.7562E-04 1.3773E-04 - 8.9125E+01 6.4454E-04 5.0671E-04 1.1710E-04 9.1205E-05 - 1.0000E+02 4.5919E-04 3.5859E-04 7.8907E-05 6.1359E-05 - 1.1220E+02 3.2539E-04 2.5197E-04 5.2472E-05 4.1454E-05 - 1.2589E+02 2.3006E-04 1.7665E-04 3.4695E-05 2.7608E-05 - 1.4125E+02 1.6286E-04 1.2386E-04 2.3088E-05 1.8077E-05 - 1.5849E+02 1.1511E-04 8.6958E-05 1.5333E-05 1.2043E-05 - 1.7783E+02 8.1315E-05 6.0969E-05 1.0044E-05 8.0749E-06 - 1.9953E+02 5.7367E-05 4.2760E-05 6.6035E-06 5.3116E-06 - 2.2387E+02 4.0284E-05 2.9888E-05 4.3436E-06 3.4902E-06 - 2.5119E+02 2.8346E-05 2.0880E-05 2.8817E-06 2.3349E-06 - 2.8184E+02 1.9925E-05 1.4584E-05 1.9451E-06 1.5572E-06 - 3.1623E+02 1.4092E-05 1.0132E-05 1.2660E-06 1.0141E-06 - 3.5481E+02 9.9122E-06 7.0313E-06 8.3227E-07 6.6980E-07 - 3.9811E+02 6.9482E-06 4.8831E-06 5.4723E-07 4.3721E-07 - 4.4668E+02 4.8611E-06 3.3995E-06 3.6448E-07 2.9112E-07 - 5.0119E+02 3.4051E-06 2.3599E-06 2.4249E-07 1.9264E-07 - 5.6234E+02 2.3886E-06 1.6397E-06 1.6261E-07 1.2917E-07 - 6.3096E+02 1.6705E-06 1.1322E-06 1.0792E-07 8.6087E-08 - 7.0795E+02 1.1653E-06 7.8589E-07 7.2758E-08 5.7603E-08 - 7.9433E+02 8.1384E-07 5.4568E-07 4.8975E-08 3.8439E-08 - 8.9125E+02 5.6570E-07 3.7538E-07 3.2855E-08 2.5306E-08 - 1.0000E+03 3.9471E-07 2.5860E-07 2.1367E-08 1.6885E-08 - 1.1220E+03 2.7405E-07 1.7734E-07 1.4228E-08 1.1284E-08 - 1.2589E+03 1.9121E-07 1.2267E-07 9.5800E-09 7.6972E-09 - 1.4125E+03 1.3348E-07 8.4709E-08 6.4393E-09 5.2508E-09 - 1.5849E+03 9.2748E-08 5.8249E-08 4.1918E-09 3.3968E-09 - 1.7783E+03 6.3899E-08 4.0188E-08 2.7980E-09 2.1729E-09 - 1.9953E+03 4.4046E-08 2.7462E-08 1.9204E-09 1.4571E-09 - 2.2387E+03 3.0314E-08 1.8760E-08 1.3033E-09 9.7936E-10 - 2.5119E+03 2.0955E-08 1.2790E-08 8.8430E-10 6.4670E-10 - 2.8184E+03 1.4462E-08 8.7517E-09 5.7978E-10 4.2664E-10 - 3.1623E+03 9.9909E-09 6.0264E-09 3.8435E-10 2.9068E-10 - 3.5481E+03 6.7760E-09 4.0544E-09 2.4954E-10 1.9505E-10 - 3.9811E+03 4.6430E-09 2.7585E-09 1.6718E-10 1.2909E-10 - 4.4668E+03 3.1600E-09 1.8635E-09 1.1553E-10 8.6290E-11 - 5.0119E+03 2.1360E-09 1.2571E-09 7.5284E-11 5.7059E-11 - 5.6234E+03 1.4436E-09 8.4340E-10 4.7683E-11 3.7632E-11 - 6.3096E+03 9.7767E-10 5.7025E-10 3.2573E-11 2.3714E-11 - 7.0795E+03 6.6203E-10 3.8117E-10 2.0738E-11 1.5939E-11 - 7.9433E+03 4.4900E-10 2.5209E-10 1.3857E-11 1.0114E-11 - 8.9125E+03 3.0080E-10 1.6905E-10 9.9321E-12 6.6315E-12 - 1.0000E+04 2.0103E-10 1.1225E-10 6.3940E-12 4.6122E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5432E+04 2.5099E+04 1.1835E+04 1.1794E+04 - 1.1220E-01 2.1276E+04 2.1004E+04 1.0079E+04 1.0005E+04 - 1.2589E-01 1.7706E+04 1.7403E+04 8.4596E+03 8.3420E+03 - 1.4125E-01 1.4739E+04 1.4325E+04 7.0094E+03 6.8405E+03 - 1.5849E-01 1.2110E+04 1.1683E+04 5.7885E+03 5.6020E+03 - 1.7783E-01 9.7572E+03 9.4306E+03 4.7188E+03 4.5395E+03 - 1.9953E-01 7.8336E+03 7.5192E+03 3.8140E+03 3.6270E+03 - 2.2387E-01 6.2143E+03 5.9482E+03 3.0411E+03 2.9059E+03 - 2.5119E-01 4.8402E+03 4.6326E+03 2.4151E+03 2.3151E+03 - 2.8184E-01 3.7674E+03 3.5699E+03 1.9235E+03 1.8280E+03 - 3.1623E-01 2.9316E+03 2.7624E+03 1.4934E+03 1.4194E+03 - 3.5481E-01 2.2537E+03 2.1131E+03 1.1379E+03 1.0888E+03 - 3.9811E-01 1.7188E+03 1.6116E+03 8.8411E+02 8.3144E+02 - 4.4668E-01 1.3093E+03 1.2212E+03 6.8620E+02 6.3804E+02 - 5.0119E-01 9.9698E+02 9.2232E+02 5.1517E+02 4.8661E+02 - 5.6234E-01 7.6050E+02 6.9744E+02 3.9200E+02 3.7005E+02 - 6.3096E-01 5.7261E+02 5.1935E+02 2.9879E+02 2.8485E+02 - 7.0795E-01 4.3336E+02 3.9022E+02 2.2403E+02 2.1620E+02 - 7.9433E-01 3.2823E+02 2.9491E+02 1.6747E+02 1.6265E+02 - 8.9125E-01 2.4755E+02 2.1924E+02 1.2808E+02 1.2338E+02 - 1.0000E+00 1.8673E+02 1.6465E+02 9.5532E+01 9.0173E+01 - 1.1220E+00 1.4032E+02 1.2318E+02 7.1935E+01 6.8255E+01 - 1.2589E+00 1.0467E+02 9.3301E+01 5.4401E+01 5.1420E+01 - 1.4125E+00 7.7972E+01 7.0585E+01 4.0704E+01 3.8173E+01 - 1.5849E+00 5.8795E+01 5.2607E+01 3.0808E+01 2.8357E+01 - 1.7783E+00 4.4793E+01 3.9608E+01 2.2984E+01 2.0922E+01 - 1.9953E+00 3.3030E+01 2.9571E+01 1.6735E+01 1.4954E+01 - 2.2387E+00 2.3689E+01 2.1852E+01 1.2538E+01 1.1057E+01 - 2.5119E+00 1.7514E+01 1.6283E+01 9.3928E+00 8.4044E+00 - 2.8184E+00 1.3074E+01 1.2269E+01 6.8608E+00 6.1285E+00 - 3.1623E+00 9.7964E+00 8.8113E+00 5.1607E+00 4.3614E+00 - 3.5481E+00 7.1999E+00 6.4747E+00 3.7710E+00 3.1336E+00 - 3.9811E+00 5.2302E+00 4.7543E+00 2.7783E+00 2.2600E+00 - 4.4668E+00 3.8198E+00 3.4490E+00 2.0113E+00 1.6119E+00 - 5.0119E+00 2.7662E+00 2.5255E+00 1.4493E+00 1.1574E+00 - 5.6234E+00 2.0193E+00 1.8443E+00 1.0327E+00 8.1691E-01 - 6.3096E+00 1.4715E+00 1.3166E+00 7.2644E-01 5.8806E-01 - 7.0795E+00 1.0626E+00 9.3603E-01 5.2319E-01 4.1124E-01 - 7.9433E+00 7.6808E-01 6.9015E-01 3.7110E-01 2.8625E-01 - 8.9125E+00 5.4294E-01 4.9923E-01 2.6290E-01 1.9883E-01 - 1.0000E+01 3.8543E-01 3.4832E-01 1.8302E-01 1.3716E-01 - 1.1220E+01 2.7594E-01 2.4912E-01 1.2665E-01 9.4532E-02 - 1.2589E+01 1.9565E-01 1.8041E-01 8.6475E-02 6.5403E-02 - 1.4125E+01 1.4050E-01 1.2724E-01 6.0508E-02 4.5201E-02 - 1.5849E+01 1.0164E-01 8.9218E-02 4.3387E-02 3.1890E-02 - 1.7783E+01 7.1422E-02 6.3531E-02 2.9306E-02 2.2587E-02 - 1.9953E+01 5.0772E-02 4.4808E-02 1.9949E-02 1.5241E-02 - 2.2387E+01 3.7033E-02 3.1309E-02 1.3852E-02 9.9038E-03 - 2.5119E+01 2.6201E-02 2.2147E-02 9.1693E-03 6.7804E-03 - 2.8184E+01 1.8522E-02 1.6040E-02 6.2682E-03 4.9942E-03 - 3.1623E+01 1.3608E-02 1.1604E-02 4.3095E-03 3.3101E-03 - 3.5481E+01 9.7209E-03 8.2032E-03 2.9246E-03 2.2300E-03 - 3.9811E+01 6.9224E-03 5.7867E-03 1.9684E-03 1.5067E-03 - 4.4668E+01 4.9492E-03 4.1008E-03 1.3270E-03 1.0189E-03 - 5.0119E+01 3.5383E-03 2.9101E-03 8.9418E-04 6.8726E-04 - 5.6234E+01 2.5133E-03 2.0594E-03 6.0050E-04 4.6461E-04 - 6.3096E+01 1.7891E-03 1.4495E-03 3.9954E-04 3.1304E-04 - 7.0795E+01 1.2739E-03 1.0233E-03 2.6687E-04 2.0876E-04 - 7.9433E+01 9.0596E-04 7.2087E-04 1.7923E-04 1.3890E-04 - 8.9125E+01 6.4832E-04 5.0489E-04 1.1864E-04 9.2911E-05 - 1.0000E+02 4.5684E-04 3.5752E-04 7.8756E-05 6.1365E-05 - 1.1220E+02 3.2397E-04 2.5192E-04 5.2452E-05 4.0982E-05 - 1.2589E+02 2.3015E-04 1.7642E-04 3.4703E-05 2.7213E-05 - 1.4125E+02 1.6322E-04 1.2386E-04 2.3019E-05 1.8136E-05 - 1.5849E+02 1.1505E-04 8.7040E-05 1.5347E-05 1.2037E-05 - 1.7783E+02 8.1416E-05 6.0781E-05 1.0070E-05 7.9376E-06 - 1.9953E+02 5.7635E-05 4.2623E-05 6.5863E-06 5.2588E-06 - 2.2387E+02 4.0369E-05 2.9882E-05 4.3528E-06 3.5095E-06 - 2.5119E+02 2.8476E-05 2.0701E-05 2.8763E-06 2.3267E-06 - 2.8184E+02 1.9994E-05 1.4471E-05 1.9283E-06 1.5298E-06 - 3.1623E+02 1.4098E-05 1.0123E-05 1.2790E-06 1.0064E-06 - 3.5481E+02 9.9138E-06 7.0363E-06 8.4515E-07 6.7081E-07 - 3.9811E+02 6.9353E-06 4.8897E-06 5.5783E-07 4.4573E-07 - 4.4668E+02 4.8489E-06 3.4042E-06 3.6435E-07 2.9723E-07 - 5.0119E+02 3.3961E-06 2.3616E-06 2.4187E-07 1.9697E-07 - 5.6234E+02 2.3789E-06 1.6407E-06 1.6310E-07 1.3202E-07 - 6.3096E+02 1.6648E-06 1.1366E-06 1.0813E-07 8.7743E-08 - 7.0795E+02 1.1650E-06 7.8552E-07 7.2303E-08 5.8608E-08 - 7.9433E+02 8.1123E-07 5.4222E-07 4.8703E-08 3.9313E-08 - 8.9125E+02 5.6414E-07 3.7349E-07 3.2104E-08 2.5584E-08 - 1.0000E+03 3.9646E-07 2.5877E-07 2.1689E-08 1.7101E-08 - 1.1220E+03 2.7486E-07 1.7786E-07 1.4367E-08 1.1848E-08 - 1.2589E+03 1.9141E-07 1.2272E-07 9.5609E-09 7.8026E-09 - 1.4125E+03 1.3295E-07 8.4028E-08 6.3578E-09 5.0585E-09 - 1.5849E+03 9.1396E-08 5.7817E-08 4.1978E-09 3.3368E-09 - 1.7783E+03 6.3145E-08 4.0059E-08 2.8870E-09 2.2509E-09 - 1.9953E+03 4.3910E-08 2.7538E-08 1.9968E-09 1.5196E-09 - 2.2387E+03 3.0266E-08 1.8793E-08 1.2937E-09 1.0071E-09 - 2.5119E+03 2.1049E-08 1.2950E-08 8.4162E-10 6.7053E-10 - 2.8184E+03 1.4551E-08 8.8484E-09 5.8926E-10 4.5088E-10 - 3.1623E+03 9.9480E-09 6.0163E-09 3.8417E-10 2.9330E-10 - 3.5481E+03 6.7219E-09 4.0369E-09 2.4902E-10 1.9582E-10 - 3.9811E+03 4.6012E-09 2.7429E-09 1.6861E-10 1.2561E-10 - 4.4668E+03 3.1598E-09 1.8607E-09 1.1141E-10 8.4817E-11 - 5.0119E+03 2.1380E-09 1.2618E-09 7.2431E-11 5.7775E-11 - 5.6234E+03 1.4508E-09 8.5155E-10 4.9592E-11 3.6274E-11 - 6.3096E+03 9.8413E-10 5.6458E-10 3.3021E-11 2.4488E-11 - 7.0795E+03 6.6316E-10 3.7730E-10 2.1549E-11 1.5976E-11 - 7.9433E+03 4.4579E-10 2.5238E-10 1.4385E-11 1.0418E-11 - 8.9125E+03 3.0059E-10 1.6977E-10 1.0028E-11 6.7534E-12 - 1.0000E+04 2.0240E-10 1.1324E-10 6.5105E-12 4.3466E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5166E+04 2.4742E+04 1.1535E+04 1.1706E+04 - 1.1220E-01 2.1013E+04 2.0569E+04 9.8018E+03 9.8802E+03 - 1.2589E-01 1.7492E+04 1.7040E+04 8.2973E+03 8.2678E+03 - 1.4125E-01 1.4544E+04 1.4025E+04 6.8415E+03 6.8287E+03 - 1.5849E-01 1.1907E+04 1.1411E+04 5.5646E+03 5.5829E+03 - 1.7783E-01 9.6493E+03 9.1647E+03 4.5432E+03 4.5323E+03 - 1.9953E-01 7.7337E+03 7.3065E+03 3.6685E+03 3.6162E+03 - 2.2387E-01 6.1273E+03 5.7408E+03 2.9491E+03 2.9032E+03 - 2.5119E-01 4.8266E+03 4.4624E+03 2.3400E+03 2.3174E+03 - 2.8184E-01 3.7528E+03 3.4590E+03 1.8243E+03 1.8173E+03 - 3.1623E-01 2.8771E+03 2.6512E+03 1.4177E+03 1.4138E+03 - 3.5481E-01 2.2058E+03 2.0361E+03 1.0907E+03 1.0960E+03 - 3.9811E-01 1.6932E+03 1.5539E+03 8.3237E+02 8.3872E+02 - 4.4668E-01 1.2921E+03 1.1743E+03 6.3867E+02 6.3572E+02 - 5.0119E-01 9.8307E+02 8.9074E+02 4.9152E+02 4.8363E+02 - 5.6234E-01 7.4643E+02 6.6713E+02 3.7404E+02 3.7231E+02 - 6.3096E-01 5.6043E+02 4.9328E+02 2.8446E+02 2.8571E+02 - 7.0795E-01 4.2307E+02 3.7536E+02 2.1226E+02 2.1281E+02 - 7.9433E-01 3.2021E+02 2.8662E+02 1.5729E+02 1.6088E+02 - 8.9125E-01 2.4142E+02 2.1267E+02 1.1864E+02 1.2145E+02 - 1.0000E+00 1.8296E+02 1.5863E+02 8.9726E+01 8.9567E+01 - 1.1220E+00 1.3868E+02 1.1828E+02 6.8131E+01 6.8155E+01 - 1.2589E+00 1.0434E+02 8.9566E+01 5.1160E+01 5.1172E+01 - 1.4125E+00 7.8394E+01 6.7660E+01 3.9039E+01 3.8161E+01 - 1.5849E+00 5.9167E+01 5.0508E+01 2.9455E+01 2.8186E+01 - 1.7783E+00 4.4497E+01 3.7961E+01 2.1720E+01 2.0986E+01 - 1.9953E+00 3.2981E+01 2.8456E+01 1.6393E+01 1.5569E+01 - 2.2387E+00 2.4034E+01 2.1488E+01 1.2309E+01 1.1359E+01 - 2.5119E+00 1.7805E+01 1.6132E+01 9.1633E+00 8.4426E+00 - 2.8184E+00 1.3275E+01 1.1711E+01 6.7012E+00 6.0332E+00 - 3.1623E+00 9.8687E+00 8.4923E+00 4.9714E+00 4.3784E+00 - 3.5481E+00 7.2135E+00 6.2239E+00 3.6254E+00 3.2048E+00 - 3.9811E+00 5.2166E+00 4.5701E+00 2.6384E+00 2.2740E+00 - 4.4668E+00 3.7903E+00 3.3485E+00 1.9585E+00 1.5968E+00 - 5.0119E+00 2.7454E+00 2.4796E+00 1.4332E+00 1.1316E+00 - 5.6234E+00 1.9885E+00 1.8004E+00 1.0108E+00 8.2169E-01 - 6.3096E+00 1.4502E+00 1.3016E+00 7.0633E-01 5.9526E-01 - 7.0795E+00 1.0568E+00 9.3567E-01 5.0327E-01 4.1619E-01 - 7.9433E+00 7.4536E-01 6.7522E-01 3.5888E-01 2.7844E-01 - 8.9125E+00 5.4047E-01 4.9727E-01 2.4857E-01 1.9314E-01 - 1.0000E+01 3.8725E-01 3.4763E-01 1.7856E-01 1.3699E-01 - 1.1220E+01 2.7374E-01 2.4631E-01 1.2593E-01 9.5843E-02 - 1.2589E+01 1.9674E-01 1.7673E-01 8.8280E-02 6.7093E-02 - 1.4125E+01 1.4101E-01 1.2775E-01 6.1022E-02 4.5616E-02 - 1.5849E+01 1.0071E-01 9.1054E-02 4.1666E-02 3.1485E-02 - 1.7783E+01 7.2392E-02 6.4468E-02 2.8705E-02 2.1698E-02 - 1.9953E+01 5.2088E-02 4.5266E-02 1.9313E-02 1.4655E-02 - 2.2387E+01 3.7000E-02 3.2089E-02 1.3205E-02 1.0073E-02 - 2.5119E+01 2.6648E-02 2.2437E-02 9.3058E-03 7.0025E-03 - 2.8184E+01 1.8663E-02 1.5790E-02 6.0037E-03 4.6898E-03 - 3.1623E+01 1.3584E-02 1.1569E-02 4.3093E-03 3.2966E-03 - 3.5481E+01 9.7068E-03 8.1939E-03 2.9194E-03 2.2229E-03 - 3.9811E+01 6.9391E-03 5.8021E-03 1.9782E-03 1.5026E-03 - 4.4668E+01 4.9473E-03 4.0992E-03 1.3248E-03 1.0247E-03 - 5.0119E+01 3.5283E-03 2.9072E-03 8.8243E-04 6.9049E-04 - 5.6234E+01 2.5145E-03 2.0609E-03 5.9400E-04 4.6311E-04 - 6.3096E+01 1.7938E-03 1.4566E-03 4.0007E-04 3.1105E-04 - 7.0795E+01 1.2790E-03 1.0232E-03 2.7069E-04 2.0967E-04 - 7.9433E+01 9.0713E-04 7.2046E-04 1.8107E-04 1.3964E-04 - 8.9125E+01 6.4722E-04 5.0890E-04 1.1899E-04 9.2593E-05 - 1.0000E+02 4.5718E-04 3.5718E-04 7.8914E-05 6.1504E-05 - 1.1220E+02 3.2384E-04 2.5127E-04 5.2278E-05 4.0832E-05 - 1.2589E+02 2.2977E-04 1.7648E-04 3.4677E-05 2.7125E-05 - 1.4125E+02 1.6266E-04 1.2375E-04 2.2961E-05 1.8000E-05 - 1.5849E+02 1.1501E-04 8.7046E-05 1.5058E-05 1.1915E-05 - 1.7783E+02 8.1260E-05 6.1060E-05 9.8369E-06 7.8744E-06 - 1.9953E+02 5.7198E-05 4.2629E-05 6.5458E-06 5.2821E-06 - 2.2387E+02 4.0518E-05 2.9719E-05 4.3775E-06 3.4968E-06 - 2.5119E+02 2.8511E-05 2.0823E-05 2.9522E-06 2.2993E-06 - 2.8184E+02 1.9903E-05 1.4561E-05 1.9850E-06 1.5500E-06 - 3.1623E+02 1.4088E-05 1.0107E-05 1.2607E-06 1.0086E-06 - 3.5481E+02 9.9112E-06 7.0549E-06 8.3321E-07 6.7029E-07 - 3.9811E+02 6.9418E-06 4.9058E-06 5.5024E-07 4.4664E-07 - 4.4668E+02 4.8498E-06 3.4027E-06 3.6293E-07 2.9634E-07 - 5.0119E+02 3.3877E-06 2.3630E-06 2.4159E-07 1.9532E-07 - 5.6234E+02 2.3837E-06 1.6341E-06 1.6368E-07 1.3167E-07 - 6.3096E+02 1.6653E-06 1.1338E-06 1.0846E-07 8.7851E-08 - 7.0795E+02 1.1610E-06 7.8533E-07 7.2476E-08 5.8617E-08 - 7.9433E+02 8.1277E-07 5.4304E-07 4.8585E-08 3.9419E-08 - 8.9125E+02 5.6387E-07 3.7326E-07 3.2429E-08 2.6027E-08 - 1.0000E+03 3.9334E-07 2.5870E-07 2.1171E-08 1.7038E-08 - 1.1220E+03 2.7385E-07 1.7863E-07 1.4156E-08 1.1251E-08 - 1.2589E+03 1.8977E-07 1.2231E-07 9.3734E-09 7.5311E-09 - 1.4125E+03 1.3181E-07 8.4051E-08 6.1643E-09 5.0774E-09 - 1.5849E+03 9.1204E-08 5.8019E-08 4.2594E-09 3.4101E-09 - 1.7783E+03 6.2762E-08 3.9947E-08 2.8657E-09 2.2219E-09 - 1.9953E+03 4.3750E-08 2.7238E-08 1.9236E-09 1.5227E-09 - 2.2387E+03 3.0340E-08 1.8674E-08 1.2528E-09 1.0091E-09 - 2.5119E+03 2.0989E-08 1.2807E-08 8.4139E-10 6.6834E-10 - 2.8184E+03 1.4448E-08 8.7279E-09 5.9400E-10 4.3189E-10 - 3.1623E+03 9.9874E-09 5.9975E-09 3.9089E-10 2.8629E-10 - 3.5481E+03 6.7574E-09 4.0439E-09 2.6159E-10 1.8584E-10 - 3.9811E+03 4.6033E-09 2.7258E-09 1.7169E-10 1.2493E-10 - 4.4668E+03 3.1441E-09 1.8371E-09 1.1452E-10 8.6177E-11 - 5.0119E+03 2.1454E-09 1.2450E-09 7.6169E-11 5.7118E-11 - 5.6234E+03 1.4490E-09 8.3746E-10 5.1206E-11 3.6707E-11 - 6.3096E+03 9.7644E-10 5.6653E-10 3.3865E-11 2.4239E-11 - 7.0795E+03 6.5609E-10 3.7987E-10 2.1936E-11 1.6338E-11 - 7.9433E+03 4.4329E-10 2.5491E-10 1.5077E-11 1.0574E-11 - 8.9125E+03 2.9938E-10 1.6859E-10 9.7407E-12 6.6963E-12 - 1.0000E+04 2.0137E-10 1.1250E-10 6.2558E-12 4.5674E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5126E+04 2.4675E+04 1.1514E+04 1.1671E+04 - 1.1220E-01 2.1032E+04 2.0593E+04 9.7587E+03 9.8786E+03 - 1.2589E-01 1.7569E+04 1.7015E+04 8.2423E+03 8.2897E+03 - 1.4125E-01 1.4618E+04 1.4012E+04 6.8382E+03 6.8504E+03 - 1.5849E-01 1.1958E+04 1.1449E+04 5.6677E+03 5.6025E+03 - 1.7783E-01 9.6579E+03 9.2345E+03 4.5919E+03 4.5603E+03 - 1.9953E-01 7.7438E+03 7.3554E+03 3.6711E+03 3.6688E+03 - 2.2387E-01 6.1648E+03 5.8044E+03 2.9352E+03 2.9127E+03 - 2.5119E-01 4.8347E+03 4.5304E+03 2.3467E+03 2.3052E+03 - 2.8184E-01 3.7575E+03 3.5075E+03 1.8771E+03 1.8201E+03 - 3.1623E-01 2.9073E+03 2.7053E+03 1.4615E+03 1.4178E+03 - 3.5481E-01 2.2204E+03 2.0753E+03 1.1224E+03 1.0966E+03 - 3.9811E-01 1.6943E+03 1.5706E+03 8.5813E+02 8.3156E+02 - 4.4668E-01 1.3075E+03 1.1934E+03 6.6547E+02 6.3894E+02 - 5.0119E-01 9.9720E+02 9.0171E+02 5.1036E+02 4.9889E+02 - 5.6234E-01 7.5970E+02 6.7399E+02 3.8328E+02 3.7823E+02 - 6.3096E-01 5.7497E+02 5.0862E+02 2.9014E+02 2.7758E+02 - 7.0795E-01 4.2702E+02 3.7990E+02 2.1853E+02 2.0899E+02 - 7.9433E-01 3.2375E+02 2.8630E+02 1.6817E+02 1.6293E+02 - 8.9125E-01 2.4473E+02 2.1951E+02 1.2674E+02 1.2292E+02 - 1.0000E+00 1.8319E+02 1.6247E+02 9.2175E+01 8.9290E+01 - 1.1220E+00 1.3828E+02 1.2191E+02 6.9486E+01 6.7351E+01 - 1.2589E+00 1.0419E+02 9.1296E+01 5.2220E+01 5.1209E+01 - 1.4125E+00 7.7998E+01 6.8236E+01 3.9202E+01 3.8221E+01 - 1.5849E+00 5.8231E+01 5.0998E+01 2.9614E+01 2.8273E+01 - 1.7783E+00 4.3870E+01 3.7910E+01 2.2440E+01 2.0846E+01 - 1.9953E+00 3.2751E+01 2.8544E+01 1.6755E+01 1.5359E+01 - 2.2387E+00 2.4592E+01 2.1681E+01 1.2344E+01 1.1593E+01 - 2.5119E+00 1.8173E+01 1.5832E+01 9.1766E+00 8.3540E+00 - 2.8184E+00 1.3265E+01 1.1580E+01 6.8501E+00 5.8288E+00 - 3.1623E+00 9.7164E+00 8.6050E+00 4.9803E+00 4.3784E+00 - 3.5481E+00 7.1463E+00 6.3761E+00 3.6853E+00 3.1783E+00 - 3.9811E+00 5.2229E+00 4.7088E+00 2.7013E+00 2.2529E+00 - 4.4668E+00 3.8249E+00 3.4176E+00 1.9588E+00 1.5999E+00 - 5.0119E+00 2.7624E+00 2.5037E+00 1.4065E+00 1.1456E+00 - 5.6234E+00 1.9899E+00 1.8098E+00 1.0075E+00 8.2142E-01 - 6.3096E+00 1.4379E+00 1.3067E+00 7.2675E-01 5.7762E-01 - 7.0795E+00 1.0383E+00 9.4844E-01 5.1687E-01 4.1229E-01 - 7.9433E+00 7.5428E-01 6.7293E-01 3.6983E-01 2.9283E-01 - 8.9125E+00 5.4150E-01 4.8223E-01 2.5330E-01 1.9999E-01 - 1.0000E+01 3.8497E-01 3.4930E-01 1.7972E-01 1.3904E-01 - 1.1220E+01 2.7776E-01 2.5145E-01 1.2751E-01 9.6348E-02 - 1.2589E+01 1.9784E-01 1.8018E-01 8.9669E-02 6.7260E-02 - 1.4125E+01 1.4144E-01 1.2548E-01 6.2695E-02 4.7689E-02 - 1.5849E+01 1.0101E-01 8.9823E-02 4.2990E-02 3.2849E-02 - 1.7783E+01 7.1599E-02 6.5189E-02 2.9375E-02 2.2048E-02 - 1.9953E+01 5.1193E-02 4.6205E-02 1.9871E-02 1.5353E-02 - 2.2387E+01 3.6787E-02 3.3131E-02 1.3437E-02 1.0526E-02 - 2.5119E+01 2.6013E-02 2.2964E-02 9.3206E-03 6.7809E-03 - 2.8184E+01 1.8869E-02 1.6057E-02 6.2895E-03 4.4287E-03 - 3.1623E+01 1.3538E-02 1.1559E-02 4.3160E-03 3.2678E-03 - 3.5481E+01 9.6837E-03 8.1709E-03 2.9234E-03 2.2263E-03 - 3.9811E+01 6.9307E-03 5.7712E-03 1.9644E-03 1.4989E-03 - 4.4668E+01 4.9354E-03 4.0863E-03 1.3236E-03 1.0129E-03 - 5.0119E+01 3.5162E-03 2.8922E-03 8.8681E-04 6.8352E-04 - 5.6234E+01 2.5143E-03 2.0460E-03 5.9448E-04 4.5864E-04 - 6.3096E+01 1.7883E-03 1.4481E-03 3.9800E-04 3.1096E-04 - 7.0795E+01 1.2736E-03 1.0214E-03 2.6460E-04 2.0927E-04 - 7.9433E+01 9.0626E-04 7.1821E-04 1.7752E-04 1.3886E-04 - 8.9125E+01 6.4155E-04 5.0841E-04 1.1917E-04 9.2900E-05 - 1.0000E+02 4.5791E-04 3.5769E-04 7.8528E-05 6.1555E-05 - 1.1220E+02 3.2446E-04 2.5158E-04 5.1889E-05 4.1090E-05 - 1.2589E+02 2.2972E-04 1.7716E-04 3.4549E-05 2.7036E-05 - 1.4125E+02 1.6271E-04 1.2383E-04 2.2861E-05 1.7904E-05 - 1.5849E+02 1.1509E-04 8.6577E-05 1.4955E-05 1.1915E-05 - 1.7783E+02 8.1101E-05 6.0869E-05 9.9140E-06 7.8537E-06 - 1.9953E+02 5.7319E-05 4.2644E-05 6.5531E-06 5.2343E-06 - 2.2387E+02 4.0494E-05 2.9763E-05 4.3259E-06 3.5191E-06 - 2.5119E+02 2.8351E-05 2.0654E-05 2.8693E-06 2.3240E-06 - 2.8184E+02 2.0018E-05 1.4374E-05 1.8803E-06 1.5377E-06 - 3.1623E+02 1.4042E-05 1.0120E-05 1.2641E-06 1.0161E-06 - 3.5481E+02 9.8840E-06 7.0054E-06 8.3191E-07 6.6705E-07 - 3.9811E+02 6.9219E-06 4.8663E-06 5.4446E-07 4.3963E-07 - 4.4668E+02 4.8279E-06 3.4003E-06 3.6513E-07 2.9388E-07 - 5.0119E+02 3.3896E-06 2.3512E-06 2.4686E-07 1.9598E-07 - 5.6234E+02 2.3780E-06 1.6251E-06 1.6433E-07 1.2896E-07 - 6.3096E+02 1.6615E-06 1.1299E-06 1.0853E-07 8.6238E-08 - 7.0795E+02 1.1620E-06 7.8168E-07 7.2673E-08 5.7599E-08 - 7.9433E+02 8.0672E-07 5.4114E-07 4.8647E-08 3.8429E-08 - 8.9125E+02 5.6166E-07 3.7558E-07 3.2537E-08 2.5309E-08 - 1.0000E+03 3.9422E-07 2.5843E-07 2.1651E-08 1.7112E-08 - 1.1220E+03 2.7425E-07 1.7804E-07 1.4112E-08 1.1131E-08 - 1.2589E+03 1.9188E-07 1.2265E-07 9.5983E-09 7.2269E-09 - 1.4125E+03 1.3290E-07 8.4334E-08 6.5115E-09 4.8891E-09 - 1.5849E+03 9.1463E-08 5.8241E-08 4.3781E-09 3.2706E-09 - 1.7783E+03 6.2941E-08 4.0180E-08 2.8008E-09 2.2393E-09 - 1.9953E+03 4.3806E-08 2.7449E-08 1.8486E-09 1.5159E-09 - 2.2387E+03 3.0505E-08 1.8781E-08 1.2751E-09 1.0101E-09 - 2.5119E+03 2.0927E-08 1.2854E-08 8.7128E-10 6.4458E-10 - 2.8184E+03 1.4226E-08 8.7684E-09 5.7476E-10 4.3126E-10 - 3.1623E+03 9.9329E-09 5.9961E-09 3.8600E-10 2.9079E-10 - 3.5481E+03 6.7305E-09 4.0356E-09 2.5314E-10 1.9833E-10 - 3.9811E+03 4.5946E-09 2.7253E-09 1.6937E-10 1.2977E-10 - 4.4668E+03 3.1259E-09 1.8341E-09 1.1554E-10 8.4295E-11 - 5.0119E+03 2.1351E-09 1.2301E-09 8.0523E-11 5.7789E-11 - 5.6234E+03 1.4523E-09 8.3104E-10 5.1357E-11 3.9457E-11 - 6.3096E+03 9.7937E-10 5.6253E-10 3.3234E-11 2.3277E-11 - 7.0795E+03 6.6247E-10 3.7676E-10 2.1980E-11 1.5855E-11 - 7.9433E+03 4.4631E-10 2.5322E-10 1.4946E-11 1.1188E-11 - 8.9125E+03 2.9878E-10 1.6973E-10 9.5315E-12 6.2786E-12 - 1.0000E+04 1.9958E-10 1.1279E-10 5.8201E-12 4.0226E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5273E+04 2.5150E+04 1.1962E+04 1.1700E+04 - 1.1220E-01 2.1236E+04 2.1080E+04 1.0246E+04 9.8996E+03 - 1.2589E-01 1.7697E+04 1.7556E+04 8.6229E+03 8.2531E+03 - 1.4125E-01 1.4728E+04 1.4446E+04 7.0883E+03 6.8319E+03 - 1.5849E-01 1.2126E+04 1.1799E+04 5.8373E+03 5.6053E+03 - 1.7783E-01 9.8387E+03 9.5928E+03 4.7951E+03 4.5208E+03 - 1.9953E-01 7.8851E+03 7.6854E+03 3.8903E+03 3.6239E+03 - 2.2387E-01 6.2459E+03 6.0559E+03 3.1447E+03 2.9225E+03 - 2.5119E-01 4.8928E+03 4.7081E+03 2.5066E+03 2.3393E+03 - 2.8184E-01 3.8192E+03 3.6550E+03 1.9778E+03 1.8393E+03 - 3.1623E-01 2.9816E+03 2.8127E+03 1.5505E+03 1.4289E+03 - 3.5481E-01 2.3003E+03 2.1482E+03 1.2005E+03 1.1116E+03 - 3.9811E-01 1.7508E+03 1.6456E+03 9.2491E+02 8.5300E+02 - 4.4668E-01 1.3298E+03 1.2565E+03 7.1068E+02 6.4534E+02 - 5.0119E-01 1.0194E+03 9.5336E+02 5.4691E+02 4.9105E+02 - 5.6234E-01 7.7502E+02 7.1717E+02 4.1668E+02 3.7106E+02 - 6.3096E-01 5.8417E+02 5.3887E+02 3.1490E+02 2.8265E+02 - 7.0795E-01 4.4166E+02 4.0184E+02 2.3767E+02 2.1627E+02 - 7.9433E-01 3.3049E+02 2.9961E+02 1.7827E+02 1.6234E+02 - 8.9125E-01 2.4762E+02 2.2802E+02 1.3224E+02 1.2313E+02 - 1.0000E+00 1.8742E+02 1.7201E+02 1.0017E+02 9.1114E+01 - 1.1220E+00 1.4172E+02 1.2907E+02 7.4894E+01 6.7928E+01 - 1.2589E+00 1.0659E+02 9.6110E+01 5.6420E+01 5.0795E+01 - 1.4125E+00 7.9349E+01 7.1251E+01 4.2143E+01 3.7679E+01 - 1.5849E+00 5.9295E+01 5.3559E+01 3.1723E+01 2.8125E+01 - 1.7783E+00 4.4827E+01 4.0079E+01 2.3706E+01 2.0720E+01 - 1.9953E+00 3.3187E+01 2.9658E+01 1.7776E+01 1.5469E+01 - 2.2387E+00 2.4415E+01 2.1992E+01 1.3301E+01 1.1303E+01 - 2.5119E+00 1.8134E+01 1.6218E+01 9.7433E+00 7.9233E+00 - 2.8184E+00 1.3407E+01 1.2027E+01 7.1145E+00 5.8470E+00 - 3.1623E+00 9.7731E+00 8.9404E+00 5.1811E+00 4.4102E+00 - 3.5481E+00 7.1105E+00 6.5534E+00 3.8236E+00 3.1348E+00 - 3.9811E+00 5.1870E+00 4.7656E+00 2.8016E+00 2.2418E+00 - 4.4668E+00 3.8125E+00 3.4780E+00 2.0285E+00 1.6142E+00 - 5.0119E+00 2.7722E+00 2.5296E+00 1.4248E+00 1.1395E+00 - 5.6234E+00 1.9763E+00 1.8300E+00 1.0058E+00 7.9137E-01 - 6.3096E+00 1.4263E+00 1.3057E+00 7.2850E-01 5.6270E-01 - 7.0795E+00 1.0437E+00 9.3424E-01 5.1997E-01 3.9782E-01 - 7.9433E+00 7.4857E-01 6.7454E-01 3.6793E-01 2.7870E-01 - 8.9125E+00 5.2291E-01 4.8252E-01 2.5880E-01 1.9736E-01 - 1.0000E+01 3.8772E-01 3.5204E-01 1.8394E-01 1.3792E-01 - 1.1220E+01 2.7647E-01 2.5288E-01 1.2904E-01 9.5403E-02 - 1.2589E+01 1.9766E-01 1.7950E-01 8.9313E-02 6.6639E-02 - 1.4125E+01 1.4237E-01 1.2885E-01 6.2474E-02 4.6399E-02 - 1.5849E+01 1.0047E-01 9.2183E-02 4.2617E-02 3.1587E-02 - 1.7783E+01 7.1886E-02 6.5056E-02 2.8767E-02 2.1723E-02 - 1.9953E+01 5.1920E-02 4.5750E-02 1.9936E-02 1.4946E-02 - 2.2387E+01 3.7058E-02 3.2925E-02 1.3763E-02 1.0006E-02 - 2.5119E+01 2.7103E-02 2.3766E-02 9.3100E-03 6.6858E-03 - 2.8184E+01 1.9643E-02 1.6901E-02 6.1802E-03 4.7693E-03 - 3.1623E+01 1.3532E-02 1.1522E-02 4.3008E-03 3.2598E-03 - 3.5481E+01 9.6668E-03 8.1560E-03 2.9091E-03 2.2148E-03 - 3.9811E+01 6.9036E-03 5.7785E-03 1.9657E-03 1.4956E-03 - 4.4668E+01 4.9279E-03 4.0882E-03 1.3206E-03 1.0136E-03 - 5.0119E+01 3.5177E-03 2.8902E-03 8.8632E-04 6.8416E-04 - 5.6234E+01 2.5130E-03 2.0350E-03 5.9312E-04 4.5936E-04 - 6.3096E+01 1.7839E-03 1.4450E-03 3.9590E-04 3.0774E-04 - 7.0795E+01 1.2719E-03 1.0237E-03 2.6388E-04 2.0457E-04 - 7.9433E+01 9.0408E-04 7.2033E-04 1.7721E-04 1.3663E-04 - 8.9125E+01 6.4057E-04 5.0848E-04 1.1764E-04 9.3003E-05 - 1.0000E+02 4.5779E-04 3.5673E-04 7.7977E-05 6.1512E-05 - 1.1220E+02 3.2420E-04 2.5099E-04 5.1296E-05 4.0732E-05 - 1.2589E+02 2.2975E-04 1.7573E-04 3.3981E-05 2.7116E-05 - 1.4125E+02 1.6298E-04 1.2324E-04 2.2573E-05 1.8008E-05 - 1.5849E+02 1.1486E-04 8.6844E-05 1.4944E-05 1.1887E-05 - 1.7783E+02 8.1045E-05 6.0842E-05 1.0056E-05 7.8502E-06 - 1.9953E+02 5.7374E-05 4.2361E-05 6.6710E-06 5.1881E-06 - 2.2387E+02 4.0254E-05 2.9551E-05 4.3476E-06 3.4536E-06 - 2.5119E+02 2.8368E-05 2.0640E-05 2.9012E-06 2.2987E-06 - 2.8184E+02 2.0020E-05 1.4424E-05 1.9428E-06 1.5518E-06 - 3.1623E+02 1.4048E-05 1.0049E-05 1.2586E-06 1.0107E-06 - 3.5481E+02 9.8620E-06 7.0023E-06 8.2617E-07 6.6718E-07 - 3.9811E+02 6.9266E-06 4.8738E-06 5.4965E-07 4.4166E-07 - 4.4668E+02 4.8510E-06 3.3882E-06 3.6619E-07 2.9277E-07 - 5.0119E+02 3.3775E-06 2.3536E-06 2.4340E-07 1.9145E-07 - 5.6234E+02 2.3807E-06 1.6314E-06 1.6059E-07 1.2921E-07 - 6.3096E+02 1.6632E-06 1.1267E-06 1.0771E-07 8.6609E-08 - 7.0795E+02 1.1614E-06 7.7834E-07 7.1202E-08 5.8176E-08 - 7.9433E+02 8.0855E-07 5.3826E-07 4.7704E-08 3.8270E-08 - 8.9125E+02 5.6181E-07 3.7083E-07 3.1472E-08 2.5247E-08 - 1.0000E+03 3.9404E-07 2.5755E-07 2.0946E-08 1.7223E-08 - 1.1220E+03 2.7369E-07 1.7733E-07 1.4077E-08 1.1626E-08 - 1.2589E+03 1.8967E-07 1.2150E-07 9.4632E-09 7.7942E-09 - 1.4125E+03 1.3149E-07 8.4159E-08 6.3948E-09 5.0555E-09 - 1.5849E+03 9.1384E-08 5.8296E-08 4.4014E-09 3.3274E-09 - 1.7783E+03 6.3170E-08 4.0101E-08 2.9440E-09 2.2288E-09 - 1.9953E+03 4.3842E-08 2.7435E-08 1.9107E-09 1.4944E-09 - 2.2387E+03 3.0224E-08 1.8794E-08 1.2667E-09 1.0044E-09 - 2.5119E+03 2.0891E-08 1.2870E-08 8.5336E-10 6.6950E-10 - 2.8184E+03 1.4361E-08 8.7915E-09 5.8294E-10 4.5309E-10 - 3.1623E+03 9.9337E-09 5.9814E-09 3.8216E-10 2.8865E-10 - 3.5481E+03 6.7158E-09 4.0069E-09 2.5645E-10 1.9142E-10 - 3.9811E+03 4.5713E-09 2.7071E-09 1.6640E-10 1.2764E-10 - 4.4668E+03 3.1314E-09 1.8338E-09 1.1227E-10 8.1396E-11 - 5.0119E+03 2.1396E-09 1.2405E-09 7.7061E-11 5.5359E-11 - 5.6234E+03 1.4519E-09 8.3347E-10 4.8096E-11 3.8443E-11 - 6.3096E+03 9.7148E-10 5.6157E-10 3.3479E-11 2.4102E-11 - 7.0795E+03 6.5869E-10 3.7644E-10 2.1889E-11 1.5444E-11 - 7.9433E+03 4.4513E-10 2.5221E-10 1.4175E-11 9.9705E-12 - 8.9125E+03 2.9887E-10 1.6817E-10 9.1786E-12 6.6854E-12 - 1.0000E+04 2.0068E-10 1.1040E-10 6.0070E-12 4.7136E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5498E+04 2.5852E+04 1.2337E+04 1.1631E+04 - 1.1220E-01 2.1397E+04 2.1659E+04 1.0531E+04 9.8640E+03 - 1.2589E-01 1.7915E+04 1.8023E+04 8.8409E+03 8.2544E+03 - 1.4125E-01 1.4965E+04 1.4919E+04 7.3956E+03 6.8087E+03 - 1.5849E-01 1.2315E+04 1.2268E+04 6.1497E+03 5.6013E+03 - 1.7783E-01 9.9941E+03 9.9124E+03 5.0474E+03 4.5713E+03 - 1.9953E-01 8.0340E+03 7.9401E+03 4.1151E+03 3.6751E+03 - 2.2387E-01 6.3771E+03 6.2978E+03 3.3218E+03 2.9384E+03 - 2.5119E-01 5.0164E+03 4.9279E+03 2.6562E+03 2.3155E+03 - 2.8184E-01 3.9082E+03 3.8418E+03 2.1112E+03 1.8075E+03 - 3.1623E-01 3.0108E+03 2.9733E+03 1.6544E+03 1.4267E+03 - 3.5481E-01 2.3138E+03 2.2818E+03 1.2815E+03 1.1027E+03 - 3.9811E-01 1.7914E+03 1.7268E+03 9.9275E+02 8.4251E+02 - 4.4668E-01 1.3580E+03 1.3150E+03 7.6399E+02 6.4821E+02 - 5.0119E-01 1.0182E+03 9.9592E+02 5.8406E+02 4.9200E+02 - 5.6234E-01 7.7800E+02 7.5195E+02 4.4088E+02 3.7284E+02 - 6.3096E-01 5.8679E+02 5.7025E+02 3.2763E+02 2.8409E+02 - 7.0795E-01 4.4166E+02 4.2508E+02 2.4830E+02 2.1546E+02 - 7.9433E-01 3.3039E+02 3.1841E+02 1.9112E+02 1.6105E+02 - 8.9125E-01 2.4669E+02 2.4198E+02 1.4600E+02 1.1776E+02 - 1.0000E+00 1.8754E+02 1.8018E+02 1.0814E+02 8.9068E+01 - 1.1220E+00 1.4136E+02 1.3486E+02 8.0725E+01 6.6831E+01 - 1.2589E+00 1.0674E+02 1.0076E+02 6.0748E+01 4.9417E+01 - 1.4125E+00 8.0180E+01 7.5043E+01 4.5519E+01 3.6565E+01 - 1.5849E+00 5.9895E+01 5.5735E+01 3.4232E+01 2.7264E+01 - 1.7783E+00 4.4193E+01 4.1855E+01 2.5498E+01 2.0568E+01 - 1.9953E+00 3.3201E+01 3.1330E+01 1.8774E+01 1.5203E+01 - 2.2387E+00 2.4884E+01 2.3169E+01 1.3946E+01 1.1036E+01 - 2.5119E+00 1.8160E+01 1.7233E+01 1.0368E+01 8.1960E+00 - 2.8184E+00 1.3182E+01 1.2593E+01 7.6160E+00 5.9561E+00 - 3.1623E+00 9.7216E+00 9.0774E+00 5.4539E+00 4.2222E+00 - 3.5481E+00 7.0807E+00 6.6452E+00 3.9496E+00 3.0709E+00 - 3.9811E+00 5.1984E+00 4.8321E+00 2.8598E+00 2.2335E+00 - 4.4668E+00 3.7904E+00 3.5134E+00 2.0582E+00 1.5950E+00 - 5.0119E+00 2.7256E+00 2.5533E+00 1.4824E+00 1.1229E+00 - 5.6234E+00 1.9806E+00 1.8401E+00 1.0760E+00 7.9673E-01 - 6.3096E+00 1.4290E+00 1.3211E+00 7.4745E-01 5.6931E-01 - 7.0795E+00 1.0387E+00 9.6269E-01 5.1778E-01 4.0259E-01 - 7.9433E+00 7.4508E-01 6.9853E-01 3.7752E-01 2.8339E-01 - 8.9125E+00 5.2278E-01 4.9530E-01 2.7111E-01 1.9154E-01 - 1.0000E+01 3.8364E-01 3.4560E-01 1.8632E-01 1.3786E-01 - 1.1220E+01 2.7504E-01 2.4655E-01 1.2844E-01 9.4590E-02 - 1.2589E+01 1.9657E-01 1.7876E-01 8.8893E-02 6.5913E-02 - 1.4125E+01 1.4058E-01 1.2811E-01 6.1353E-02 4.6477E-02 - 1.5849E+01 1.0162E-01 9.0748E-02 4.2084E-02 3.2215E-02 - 1.7783E+01 7.2796E-02 6.4659E-02 2.8912E-02 2.1576E-02 - 1.9953E+01 5.2049E-02 4.4929E-02 2.0078E-02 1.4494E-02 - 2.2387E+01 3.6722E-02 3.1305E-02 1.3834E-02 1.0114E-02 - 2.5119E+01 2.6499E-02 2.1910E-02 9.6009E-03 6.9493E-03 - 2.8184E+01 1.8986E-02 1.5824E-02 6.3872E-03 4.7285E-03 - 3.1623E+01 1.3523E-02 1.1514E-02 4.3032E-03 3.2621E-03 - 3.5481E+01 9.6561E-03 8.1407E-03 2.8984E-03 2.2181E-03 - 3.9811E+01 6.9045E-03 5.7583E-03 1.9577E-03 1.5005E-03 - 4.4668E+01 4.9283E-03 4.0810E-03 1.3208E-03 1.0084E-03 - 5.0119E+01 3.5056E-03 2.8950E-03 8.8021E-04 6.8569E-04 - 5.6234E+01 2.4908E-03 2.0517E-03 5.8872E-04 4.6260E-04 - 6.3096E+01 1.7775E-03 1.4428E-03 3.9563E-04 3.0850E-04 - 7.0795E+01 1.2728E-03 1.0165E-03 2.6707E-04 2.0546E-04 - 7.9433E+01 9.0361E-04 7.1625E-04 1.7853E-04 1.3623E-04 - 8.9125E+01 6.3890E-04 5.0217E-04 1.1981E-04 9.0928E-05 - 1.0000E+02 4.5641E-04 3.5548E-04 7.8246E-05 6.0962E-05 - 1.1220E+02 3.2397E-04 2.4967E-04 5.1915E-05 4.0624E-05 - 1.2589E+02 2.2919E-04 1.7563E-04 3.4268E-05 2.6961E-05 - 1.4125E+02 1.6244E-04 1.2365E-04 2.2442E-05 1.8036E-05 - 1.5849E+02 1.1467E-04 8.6279E-05 1.4769E-05 1.1981E-05 - 1.7783E+02 8.0637E-05 6.0071E-05 9.8574E-06 7.9204E-06 - 1.9953E+02 5.6970E-05 4.2244E-05 6.5769E-06 5.2705E-06 - 2.2387E+02 4.0220E-05 2.9665E-05 4.3941E-06 3.4866E-06 - 2.5119E+02 2.8295E-05 2.0701E-05 2.9126E-06 2.2917E-06 - 2.8184E+02 1.9941E-05 1.4310E-05 1.9236E-06 1.4839E-06 - 3.1623E+02 1.4063E-05 1.0075E-05 1.2469E-06 1.0118E-06 - 3.5481E+02 9.8725E-06 7.0127E-06 8.2947E-07 6.6722E-07 - 3.9811E+02 6.9087E-06 4.8623E-06 5.5078E-07 4.4298E-07 - 4.4668E+02 4.8223E-06 3.3716E-06 3.6301E-07 2.9219E-07 - 5.0119E+02 3.3894E-06 2.3361E-06 2.3941E-07 1.9560E-07 - 5.6234E+02 2.3823E-06 1.6231E-06 1.6136E-07 1.2896E-07 - 6.3096E+02 1.6663E-06 1.1286E-06 1.0777E-07 8.5167E-08 - 7.0795E+02 1.1597E-06 7.7918E-07 7.1133E-08 5.7199E-08 - 7.9433E+02 8.0902E-07 5.3630E-07 4.7600E-08 3.8740E-08 - 8.9125E+02 5.6286E-07 3.7144E-07 3.1907E-08 2.5118E-08 - 1.0000E+03 3.9198E-07 2.5654E-07 2.1171E-08 1.6840E-08 - 1.1220E+03 2.7251E-07 1.7672E-07 1.3915E-08 1.1098E-08 - 1.2589E+03 1.9001E-07 1.2226E-07 9.2827E-09 7.3404E-09 - 1.4125E+03 1.3200E-07 8.4431E-08 6.2148E-09 4.9483E-09 - 1.5849E+03 9.1512E-08 5.7653E-08 4.1499E-09 3.3512E-09 - 1.7783E+03 6.3218E-08 3.9401E-08 2.8699E-09 2.3156E-09 - 1.9953E+03 4.3702E-08 2.7178E-08 1.9289E-09 1.5178E-09 - 2.2387E+03 3.0160E-08 1.8757E-08 1.2835E-09 9.8309E-10 - 2.5119E+03 2.0667E-08 1.2686E-08 8.5865E-10 6.6897E-10 - 2.8184E+03 1.4160E-08 8.6002E-09 5.7515E-10 4.4063E-10 - 3.1623E+03 9.8973E-09 5.9587E-09 3.7629E-10 2.8969E-10 - 3.5481E+03 6.7109E-09 4.0226E-09 2.5354E-10 1.9623E-10 - 3.9811E+03 4.5975E-09 2.7092E-09 1.6960E-10 1.2504E-10 - 4.4668E+03 3.1193E-09 1.8371E-09 1.1324E-10 8.3940E-11 - 5.0119E+03 2.1219E-09 1.2449E-09 7.4126E-11 5.5817E-11 - 5.6234E+03 1.4375E-09 8.3057E-10 4.8121E-11 3.5328E-11 - 6.3096E+03 9.6753E-10 5.6281E-10 3.3173E-11 2.4392E-11 - 7.0795E+03 6.5501E-10 3.7754E-10 2.1295E-11 1.5822E-11 - 7.9433E+03 4.4392E-10 2.5337E-10 1.3887E-11 1.0006E-11 - 8.9125E+03 2.9513E-10 1.6538E-10 9.2339E-12 6.6547E-12 - 1.0000E+04 1.9596E-10 1.0968E-10 6.1259E-12 4.5205E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5545E+04 2.6377E+04 1.2705E+04 1.1746E+04 - 1.1220E-01 2.1536E+04 2.2127E+04 1.0903E+04 1.0000E+04 - 1.2589E-01 1.8113E+04 1.8418E+04 9.2166E+03 8.3068E+03 - 1.4125E-01 1.5098E+04 1.5268E+04 7.6537E+03 6.8308E+03 - 1.5849E-01 1.2469E+04 1.2517E+04 6.3576E+03 5.6074E+03 - 1.7783E-01 1.0113E+04 1.0155E+04 5.2733E+03 4.5423E+03 - 1.9953E-01 8.0789E+03 8.1646E+03 4.3056E+03 3.6655E+03 - 2.2387E-01 6.4032E+03 6.4889E+03 3.4737E+03 2.9604E+03 - 2.5119E-01 5.0448E+03 5.1113E+03 2.7547E+03 2.3416E+03 - 2.8184E-01 3.9409E+03 3.9751E+03 2.1782E+03 1.8134E+03 - 3.1623E-01 3.0597E+03 3.0699E+03 1.7295E+03 1.3992E+03 - 3.5481E-01 2.3406E+03 2.3544E+03 1.3457E+03 1.0853E+03 - 3.9811E-01 1.7836E+03 1.7988E+03 1.0468E+03 8.3819E+02 - 4.4668E-01 1.3714E+03 1.3693E+03 8.0772E+02 6.3805E+02 - 5.0119E-01 1.0391E+03 1.0411E+03 6.1203E+02 4.8899E+02 - 5.6234E-01 7.8067E+02 7.9011E+02 4.7323E+02 3.7373E+02 - 6.3096E-01 5.9127E+02 5.9146E+02 3.6556E+02 2.8202E+02 - 7.0795E-01 4.4184E+02 4.4312E+02 2.7121E+02 2.1031E+02 - 7.9433E-01 3.3383E+02 3.3313E+02 1.9997E+02 1.5573E+02 - 8.9125E-01 2.5149E+02 2.5544E+02 1.5103E+02 1.1865E+02 - 1.0000E+00 1.8848E+02 1.8867E+02 1.1463E+02 8.8511E+01 - 1.1220E+00 1.4060E+02 1.4019E+02 8.5737E+01 6.4972E+01 - 1.2589E+00 1.0548E+02 1.0459E+02 6.3988E+01 4.8290E+01 - 1.4125E+00 7.9826E+01 7.8341E+01 4.8298E+01 3.6587E+01 - 1.5849E+00 5.9513E+01 5.8729E+01 3.5530E+01 2.7770E+01 - 1.7783E+00 4.4497E+01 4.3899E+01 2.6170E+01 2.0186E+01 - 1.9953E+00 3.2990E+01 3.2270E+01 1.9947E+01 1.4731E+01 - 2.2387E+00 2.4179E+01 2.3446E+01 1.4722E+01 1.1136E+01 - 2.5119E+00 1.8018E+01 1.7270E+01 1.0514E+01 8.0040E+00 - 2.8184E+00 1.3044E+01 1.2761E+01 7.5572E+00 5.7512E+00 - 3.1623E+00 9.7377E+00 9.4298E+00 5.5962E+00 4.2184E+00 - 3.5481E+00 7.1485E+00 6.8364E+00 4.0748E+00 3.0247E+00 - 3.9811E+00 5.1709E+00 4.9345E+00 2.8885E+00 2.1810E+00 - 4.4668E+00 3.7167E+00 3.5646E+00 2.0765E+00 1.5532E+00 - 5.0119E+00 2.7024E+00 2.5482E+00 1.5020E+00 1.0925E+00 - 5.6234E+00 1.9646E+00 1.8379E+00 1.0586E+00 7.9355E-01 - 6.3096E+00 1.4388E+00 1.3381E+00 7.5321E-01 5.6185E-01 - 7.0795E+00 1.0311E+00 9.6766E-01 5.3182E-01 3.8788E-01 - 7.9433E+00 7.4537E-01 6.7826E-01 3.7436E-01 2.8013E-01 - 8.9125E+00 5.4394E-01 4.8578E-01 2.5862E-01 2.0322E-01 - 1.0000E+01 3.8371E-01 3.5591E-01 1.8375E-01 1.3679E-01 - 1.1220E+01 2.7636E-01 2.5501E-01 1.2832E-01 9.5199E-02 - 1.2589E+01 2.0008E-01 1.7951E-01 8.9467E-02 6.8549E-02 - 1.4125E+01 1.4202E-01 1.2762E-01 6.1478E-02 4.7754E-02 - 1.5849E+01 1.0194E-01 9.1883E-02 4.2782E-02 3.2403E-02 - 1.7783E+01 7.3402E-02 6.4800E-02 2.9595E-02 2.1783E-02 - 1.9953E+01 5.2235E-02 4.6218E-02 2.0710E-02 1.4643E-02 - 2.2387E+01 3.7279E-02 3.3441E-02 1.4092E-02 1.0135E-02 - 2.5119E+01 2.6804E-02 2.3731E-02 9.5468E-03 7.0918E-03 - 2.8184E+01 1.9093E-02 1.6609E-02 6.6338E-03 4.8532E-03 - 3.1623E+01 1.3550E-02 1.1493E-02 4.2874E-03 3.2711E-03 - 3.5481E+01 9.6751E-03 8.1381E-03 2.9006E-03 2.2210E-03 - 3.9811E+01 6.8866E-03 5.7717E-03 1.9593E-03 1.5042E-03 - 4.4668E+01 4.9083E-03 4.0834E-03 1.3188E-03 1.0108E-03 - 5.0119E+01 3.5096E-03 2.8873E-03 8.8387E-04 6.7944E-04 - 5.6234E+01 2.4991E-03 2.0379E-03 5.9023E-04 4.5702E-04 - 6.3096E+01 1.7784E-03 1.4408E-03 3.9603E-04 3.0700E-04 - 7.0795E+01 1.2673E-03 1.0182E-03 2.6701E-04 2.0540E-04 - 7.9433E+01 9.0383E-04 7.1608E-04 1.7557E-04 1.3709E-04 - 8.9125E+01 6.3984E-04 5.0233E-04 1.1561E-04 9.1572E-05 - 1.0000E+02 4.5520E-04 3.5469E-04 7.8237E-05 6.1349E-05 - 1.1220E+02 3.2331E-04 2.5008E-04 5.2075E-05 4.0741E-05 - 1.2589E+02 2.2867E-04 1.7581E-04 3.4538E-05 2.7071E-05 - 1.4125E+02 1.6215E-04 1.2295E-04 2.2855E-05 1.7770E-05 - 1.5849E+02 1.1467E-04 8.6202E-05 1.5035E-05 1.1690E-05 - 1.7783E+02 8.0802E-05 6.0483E-05 9.8866E-06 7.8180E-06 - 1.9953E+02 5.7009E-05 4.2376E-05 6.4758E-06 5.2277E-06 - 2.2387E+02 4.0244E-05 2.9495E-05 4.2990E-06 3.4901E-06 - 2.5119E+02 2.8236E-05 2.0537E-05 2.8410E-06 2.3222E-06 - 2.8184E+02 1.9648E-05 1.4321E-05 1.8669E-06 1.5351E-06 - 3.1623E+02 1.3969E-05 1.0031E-05 1.2492E-06 1.0146E-06 - 3.5481E+02 9.7956E-06 6.9835E-06 8.3400E-07 6.7291E-07 - 3.9811E+02 6.8582E-06 4.8614E-06 5.4937E-07 4.4703E-07 - 4.4668E+02 4.8242E-06 3.3802E-06 3.6052E-07 2.9540E-07 - 5.0119E+02 3.3799E-06 2.3435E-06 2.4310E-07 1.9467E-07 - 5.6234E+02 2.3653E-06 1.6242E-06 1.6160E-07 1.3012E-07 - 6.3096E+02 1.6584E-06 1.1259E-06 1.0799E-07 8.6651E-08 - 7.0795E+02 1.1562E-06 7.7874E-07 7.1868E-08 5.7399E-08 - 7.9433E+02 8.0645E-07 5.3744E-07 4.8320E-08 3.8312E-08 - 8.9125E+02 5.6120E-07 3.7227E-07 3.2057E-08 2.5501E-08 - 1.0000E+03 3.9334E-07 2.5648E-07 2.1408E-08 1.7047E-08 - 1.1220E+03 2.7366E-07 1.7638E-07 1.4313E-08 1.1304E-08 - 1.2589E+03 1.8995E-07 1.2195E-07 9.4678E-09 7.5351E-09 - 1.4125E+03 1.3181E-07 8.3734E-08 6.2679E-09 5.0131E-09 - 1.5849E+03 9.1160E-08 5.7428E-08 4.2069E-09 3.3182E-09 - 1.7783E+03 6.2787E-08 3.9482E-08 2.7790E-09 2.2734E-09 - 1.9953E+03 4.3716E-08 2.7114E-08 1.8582E-09 1.4975E-09 - 2.2387E+03 2.9944E-08 1.8621E-08 1.2555E-09 9.9394E-10 - 2.5119E+03 2.0693E-08 1.2720E-08 8.4961E-10 6.4879E-10 - 2.8184E+03 1.4272E-08 8.6880E-09 5.6751E-10 4.2475E-10 - 3.1623E+03 9.8625E-09 5.9333E-09 3.8212E-10 2.8605E-10 - 3.5481E+03 6.6769E-09 3.9899E-09 2.4918E-10 1.9822E-10 - 3.9811E+03 4.5661E-09 2.7140E-09 1.6402E-10 1.2909E-10 - 4.4668E+03 3.0848E-09 1.8404E-09 1.1109E-10 8.2153E-11 - 5.0119E+03 2.1116E-09 1.2387E-09 7.2605E-11 5.4861E-11 - 5.6234E+03 1.4347E-09 8.3359E-10 4.7539E-11 3.6163E-11 - 6.3096E+03 9.7333E-10 5.6185E-10 3.2180E-11 2.4183E-11 - 7.0795E+03 6.5566E-10 3.7473E-10 2.1636E-11 1.5610E-11 - 7.9433E+03 4.3967E-10 2.4866E-10 1.4271E-11 1.0289E-11 - 8.9125E+03 2.9669E-10 1.6564E-10 9.3987E-12 6.8017E-12 - 1.0000E+04 1.9947E-10 1.1137E-10 6.4076E-12 4.2208E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5835E+04 2.6711E+04 1.2924E+04 1.1636E+04 - 1.1220E-01 2.1726E+04 2.2381E+04 1.1143E+04 9.8862E+03 - 1.2589E-01 1.8147E+04 1.8645E+04 9.5018E+03 8.2564E+03 - 1.4125E-01 1.5133E+04 1.5512E+04 7.9331E+03 6.8177E+03 - 1.5849E-01 1.2528E+04 1.2748E+04 6.5272E+03 5.5812E+03 - 1.7783E-01 1.0169E+04 1.0393E+04 5.3886E+03 4.5564E+03 - 1.9953E-01 8.1225E+03 8.4141E+03 4.4234E+03 3.6534E+03 - 2.2387E-01 6.4486E+03 6.7020E+03 3.5748E+03 2.8936E+03 - 2.5119E-01 5.0915E+03 5.2630E+03 2.8758E+03 2.3026E+03 - 2.8184E-01 3.9644E+03 4.1054E+03 2.2884E+03 1.8122E+03 - 3.1623E-01 3.0500E+03 3.1834E+03 1.8001E+03 1.4227E+03 - 3.5481E-01 2.3360E+03 2.4457E+03 1.4122E+03 1.0843E+03 - 3.9811E-01 1.7840E+03 1.8685E+03 1.0995E+03 8.1722E+02 - 4.4668E-01 1.3558E+03 1.4280E+03 8.4085E+02 6.1807E+02 - 5.0119E-01 1.0244E+03 1.0898E+03 6.4875E+02 4.6934E+02 - 5.6234E-01 7.7149E+02 8.2287E+02 4.9781E+02 3.5906E+02 - 6.3096E-01 5.8154E+02 6.2262E+02 3.7599E+02 2.7396E+02 - 7.0795E-01 4.4280E+02 4.6857E+02 2.8574E+02 2.0627E+02 - 7.9433E-01 3.3286E+02 3.4824E+02 2.1398E+02 1.5111E+02 - 8.9125E-01 2.5045E+02 2.5588E+02 1.5930E+02 1.1206E+02 - 1.0000E+00 1.8647E+02 1.9519E+02 1.2160E+02 8.5172E+01 - 1.1220E+00 1.3887E+02 1.4609E+02 9.0827E+01 6.3154E+01 - 1.2589E+00 1.0513E+02 1.0904E+02 6.7175E+01 4.7162E+01 - 1.4125E+00 7.8599E+01 8.1588E+01 5.0134E+01 3.5032E+01 - 1.5849E+00 5.8572E+01 6.0905E+01 3.7263E+01 2.6060E+01 - 1.7783E+00 4.3864E+01 4.4535E+01 2.7665E+01 1.9246E+01 - 1.9953E+00 3.2466E+01 3.2660E+01 2.0557E+01 1.4251E+01 - 2.2387E+00 2.4413E+01 2.4217E+01 1.5129E+01 1.0695E+01 - 2.5119E+00 1.7881E+01 1.7827E+01 1.0985E+01 7.7397E+00 - 2.8184E+00 1.3247E+01 1.3341E+01 7.8708E+00 5.5898E+00 - 3.1623E+00 9.6507E+00 9.5345E+00 5.7806E+00 4.1240E+00 - 3.5481E+00 7.0297E+00 6.8736E+00 4.1984E+00 2.9408E+00 - 3.9811E+00 5.2060E+00 4.9575E+00 2.9839E+00 2.1306E+00 - 4.4668E+00 3.7862E+00 3.5890E+00 2.1324E+00 1.5205E+00 - 5.0119E+00 2.7513E+00 2.5791E+00 1.5463E+00 1.0617E+00 - 5.6234E+00 1.9762E+00 1.8800E+00 1.0888E+00 7.7917E-01 - 6.3096E+00 1.4136E+00 1.3749E+00 7.6737E-01 5.7337E-01 - 7.0795E+00 1.0299E+00 9.9351E-01 5.3812E-01 3.9494E-01 - 7.9433E+00 7.2845E-01 7.0437E-01 3.8129E-01 2.7313E-01 - 8.9125E+00 5.2452E-01 4.9470E-01 2.6744E-01 1.9119E-01 - 1.0000E+01 3.8294E-01 3.5666E-01 1.8717E-01 1.3822E-01 - 1.1220E+01 2.7589E-01 2.5336E-01 1.2841E-01 9.4679E-02 - 1.2589E+01 1.9625E-01 1.8235E-01 8.8911E-02 6.5166E-02 - 1.4125E+01 1.3911E-01 1.3041E-01 6.3729E-02 4.5817E-02 - 1.5849E+01 1.0188E-01 9.2067E-02 4.4648E-02 3.1773E-02 - 1.7783E+01 7.2706E-02 6.6301E-02 2.9524E-02 2.1458E-02 - 1.9953E+01 5.2064E-02 4.7046E-02 1.9844E-02 1.4660E-02 - 2.2387E+01 3.7389E-02 3.2992E-02 1.3715E-02 1.0209E-02 - 2.5119E+01 2.6728E-02 2.3204E-02 9.1012E-03 7.1718E-03 - 2.8184E+01 1.9379E-02 1.6122E-02 6.2879E-03 4.8321E-03 - 3.1623E+01 1.3562E-02 1.1551E-02 4.3080E-03 3.2642E-03 - 3.5481E+01 9.7017E-03 8.1805E-03 2.9169E-03 2.2099E-03 - 3.9811E+01 6.9139E-03 5.7866E-03 1.9609E-03 1.5109E-03 - 4.4668E+01 4.9355E-03 4.0861E-03 1.3134E-03 1.0235E-03 - 5.0119E+01 3.5414E-03 2.8973E-03 8.8535E-04 6.8673E-04 - 5.6234E+01 2.5168E-03 2.0442E-03 5.9269E-04 4.5581E-04 - 6.3096E+01 1.7871E-03 1.4431E-03 3.9924E-04 3.0710E-04 - 7.0795E+01 1.2723E-03 1.0180E-03 2.6635E-04 2.0797E-04 - 7.9433E+01 9.0616E-04 7.1565E-04 1.7660E-04 1.3914E-04 - 8.9125E+01 6.4384E-04 5.0501E-04 1.1921E-04 9.2973E-05 - 1.0000E+02 4.5711E-04 3.5664E-04 7.8450E-05 6.1397E-05 - 1.1220E+02 3.2359E-04 2.5120E-04 5.1802E-05 4.0719E-05 - 1.2589E+02 2.2898E-04 1.7606E-04 3.4278E-05 2.7042E-05 - 1.4125E+02 1.6231E-04 1.2351E-04 2.2870E-05 1.8019E-05 - 1.5849E+02 1.1500E-04 8.6733E-05 1.5154E-05 1.1978E-05 - 1.7783E+02 8.1106E-05 6.0805E-05 9.9641E-06 7.9643E-06 - 1.9953E+02 5.7069E-05 4.2438E-05 6.5378E-06 5.1598E-06 - 2.2387E+02 4.0169E-05 2.9524E-05 4.3086E-06 3.4160E-06 - 2.5119E+02 2.8361E-05 2.0599E-05 2.8464E-06 2.2941E-06 - 2.8184E+02 1.9940E-05 1.4409E-05 1.8893E-06 1.4769E-06 - 3.1623E+02 1.4018E-05 1.0051E-05 1.2673E-06 1.0001E-06 - 3.5481E+02 9.8498E-06 6.9616E-06 8.4278E-07 6.6565E-07 - 3.9811E+02 6.9204E-06 4.8376E-06 5.5217E-07 4.4408E-07 - 4.4668E+02 4.8478E-06 3.3802E-06 3.6709E-07 2.9189E-07 - 5.0119E+02 3.3885E-06 2.3375E-06 2.4412E-07 1.9190E-07 - 5.6234E+02 2.3702E-06 1.6271E-06 1.6073E-07 1.2984E-07 - 6.3096E+02 1.6497E-06 1.1320E-06 1.0703E-07 8.6496E-08 - 7.0795E+02 1.1566E-06 7.8417E-07 7.1556E-08 5.7271E-08 - 7.9433E+02 8.0838E-07 5.3971E-07 4.7297E-08 3.8584E-08 - 8.9125E+02 5.6245E-07 3.7112E-07 3.1498E-08 2.5820E-08 - 1.0000E+03 3.9134E-07 2.5740E-07 2.0946E-08 1.7026E-08 - 1.1220E+03 2.7212E-07 1.7738E-07 1.3997E-08 1.1260E-08 - 1.2589E+03 1.8977E-07 1.2136E-07 9.3873E-09 7.4962E-09 - 1.4125E+03 1.3136E-07 8.3294E-08 6.4564E-09 5.0042E-09 - 1.5849E+03 9.1156E-08 5.7641E-08 4.2783E-09 3.3122E-09 - 1.7783E+03 6.3150E-08 3.9720E-08 2.8279E-09 2.1950E-09 - 1.9953E+03 4.3893E-08 2.7139E-08 1.9235E-09 1.4640E-09 - 2.2387E+03 3.0327E-08 1.8603E-08 1.3339E-09 9.7287E-10 - 2.5119E+03 2.0684E-08 1.2660E-08 8.7074E-10 6.3526E-10 - 2.8184E+03 1.4237E-08 8.5535E-09 5.7363E-10 4.3597E-10 - 3.1623E+03 9.8931E-09 5.9510E-09 3.7824E-10 2.8779E-10 - 3.5481E+03 6.6970E-09 4.0005E-09 2.5347E-10 1.8929E-10 - 3.9811E+03 4.5978E-09 2.7079E-09 1.6879E-10 1.2635E-10 - 4.4668E+03 3.1219E-09 1.8263E-09 1.1345E-10 8.5464E-11 - 5.0119E+03 2.1125E-09 1.2454E-09 7.8073E-11 5.5604E-11 - 5.6234E+03 1.4440E-09 8.4651E-10 5.0331E-11 3.5724E-11 - 6.3096E+03 9.7004E-10 5.6200E-10 3.2001E-11 2.3948E-11 - 7.0795E+03 6.5448E-10 3.7651E-10 2.1740E-11 1.5754E-11 - 7.9433E+03 4.4058E-10 2.5211E-10 1.4361E-11 1.0687E-11 - 8.9125E+03 2.9712E-10 1.6817E-10 9.2672E-12 6.9699E-12 - 1.0000E+04 1.9969E-10 1.1142E-10 5.9741E-12 4.5818E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.6001E+04 2.7091E+04 1.3239E+04 1.1683E+04 - 1.1220E-01 2.1857E+04 2.2685E+04 1.1396E+04 9.8610E+03 - 1.2589E-01 1.8328E+04 1.9010E+04 9.6482E+03 8.2474E+03 - 1.4125E-01 1.5261E+04 1.5783E+04 8.0544E+03 6.8017E+03 - 1.5849E-01 1.2590E+04 1.3000E+04 6.7374E+03 5.5175E+03 - 1.7783E-01 1.0210E+04 1.0632E+04 5.5772E+03 4.4694E+03 - 1.9953E-01 8.1634E+03 8.5625E+03 4.5202E+03 3.6193E+03 - 2.2387E-01 6.4688E+03 6.8024E+03 3.6787E+03 2.9192E+03 - 2.5119E-01 5.0743E+03 5.3467E+03 2.9476E+03 2.3035E+03 - 2.8184E-01 3.9865E+03 4.1823E+03 2.3499E+03 1.7702E+03 - 3.1623E-01 3.1015E+03 3.2432E+03 1.8602E+03 1.3799E+03 - 3.5481E-01 2.3679E+03 2.5054E+03 1.4556E+03 1.0671E+03 - 3.9811E-01 1.8039E+03 1.9237E+03 1.1412E+03 8.1392E+02 - 4.4668E-01 1.3708E+03 1.4699E+03 8.7929E+02 6.2368E+02 - 5.0119E-01 1.0359E+03 1.1184E+03 6.6537E+02 4.7141E+02 - 5.6234E-01 7.8262E+02 8.3687E+02 5.0734E+02 3.5565E+02 - 6.3096E-01 5.9635E+02 6.2599E+02 3.8355E+02 2.6936E+02 - 7.0795E-01 4.4184E+02 4.6854E+02 2.9198E+02 2.0259E+02 - 7.9433E-01 3.2785E+02 3.5432E+02 2.2276E+02 1.5130E+02 - 8.9125E-01 2.4761E+02 2.6561E+02 1.6719E+02 1.1292E+02 - 1.0000E+00 1.8639E+02 1.9925E+02 1.2463E+02 8.4530E+01 - 1.1220E+00 1.3951E+02 1.5015E+02 9.3459E+01 6.3130E+01 - 1.2589E+00 1.0473E+02 1.1167E+02 6.8865E+01 4.6971E+01 - 1.4125E+00 7.9501E+01 8.2544E+01 5.1108E+01 3.4925E+01 - 1.5849E+00 5.9452E+01 6.1817E+01 3.8496E+01 2.5965E+01 - 1.7783E+00 4.3640E+01 4.5211E+01 2.8679E+01 1.9111E+01 - 1.9953E+00 3.2431E+01 3.3168E+01 2.0782E+01 1.4061E+01 - 2.2387E+00 2.4304E+01 2.4952E+01 1.5363E+01 1.0151E+01 - 2.5119E+00 1.7972E+01 1.7998E+01 1.1267E+01 7.4820E+00 - 2.8184E+00 1.3299E+01 1.3063E+01 8.0256E+00 5.6410E+00 - 3.1623E+00 9.6005E+00 9.5790E+00 5.8580E+00 4.1274E+00 - 3.5481E+00 7.1046E+00 6.9457E+00 4.2190E+00 2.9659E+00 - 3.9811E+00 5.1787E+00 5.0257E+00 3.0514E+00 2.1328E+00 - 4.4668E+00 3.7620E+00 3.6082E+00 2.1659E+00 1.5434E+00 - 5.0119E+00 2.7309E+00 2.6079E+00 1.5412E+00 1.1060E+00 - 5.6234E+00 1.9843E+00 1.9051E+00 1.0978E+00 7.8477E-01 - 6.3096E+00 1.4343E+00 1.3715E+00 7.5687E-01 5.6031E-01 - 7.0795E+00 1.0406E+00 9.7001E-01 5.3366E-01 4.0330E-01 - 7.9433E+00 7.5220E-01 6.8176E-01 3.8148E-01 2.8241E-01 - 8.9125E+00 5.4272E-01 4.8353E-01 2.6477E-01 1.9339E-01 - 1.0000E+01 3.8547E-01 3.5663E-01 1.8544E-01 1.3641E-01 - 1.1220E+01 2.7745E-01 2.5250E-01 1.2928E-01 9.5101E-02 - 1.2589E+01 1.9882E-01 1.7768E-01 8.9595E-02 6.6809E-02 - 1.4125E+01 1.4267E-01 1.2520E-01 6.0681E-02 4.7303E-02 - 1.5849E+01 1.0171E-01 9.0409E-02 4.2399E-02 3.2719E-02 - 1.7783E+01 7.3519E-02 6.4758E-02 2.8741E-02 2.2366E-02 - 1.9953E+01 5.1419E-02 4.6363E-02 1.9815E-02 1.5497E-02 - 2.2387E+01 3.6606E-02 3.2485E-02 1.3428E-02 1.0355E-02 - 2.5119E+01 2.6763E-02 2.2622E-02 8.9086E-03 6.7011E-03 - 2.8184E+01 1.9041E-02 1.6518E-02 6.2207E-03 4.4856E-03 - 3.1623E+01 1.3559E-02 1.1508E-02 4.3027E-03 3.2654E-03 - 3.5481E+01 9.6990E-03 8.1709E-03 2.8976E-03 2.2128E-03 - 3.9811E+01 6.9176E-03 5.7889E-03 1.9543E-03 1.5058E-03 - 4.4668E+01 4.9198E-03 4.0965E-03 1.3192E-03 1.0225E-03 - 5.0119E+01 3.5152E-03 2.8976E-03 8.8913E-04 6.8614E-04 - 5.6234E+01 2.5125E-03 2.0442E-03 5.9478E-04 4.5946E-04 - 6.3096E+01 1.7877E-03 1.4379E-03 3.9775E-04 3.0622E-04 - 7.0795E+01 1.2707E-03 1.0130E-03 2.6594E-04 2.0362E-04 - 7.9433E+01 8.9980E-04 7.1885E-04 1.7698E-04 1.3640E-04 - 8.9125E+01 6.3765E-04 5.0802E-04 1.1818E-04 9.1577E-05 - 1.0000E+02 4.5677E-04 3.5688E-04 7.8991E-05 6.1109E-05 - 1.1220E+02 3.2403E-04 2.5108E-04 5.2148E-05 4.0616E-05 - 1.2589E+02 2.2974E-04 1.7626E-04 3.4487E-05 2.6897E-05 - 1.4125E+02 1.6232E-04 1.2404E-04 2.2983E-05 1.7972E-05 - 1.5849E+02 1.1493E-04 8.6852E-05 1.5179E-05 1.1963E-05 - 1.7783E+02 8.1097E-05 6.0596E-05 9.9803E-06 7.9064E-06 - 1.9953E+02 5.7220E-05 4.2353E-05 6.6182E-06 5.2472E-06 - 2.2387E+02 4.0290E-05 2.9443E-05 4.3295E-06 3.4114E-06 - 2.5119E+02 2.8157E-05 2.0656E-05 2.8400E-06 2.2722E-06 - 2.8184E+02 1.9783E-05 1.4603E-05 1.9140E-06 1.5192E-06 - 3.1623E+02 1.4071E-05 1.0072E-05 1.2644E-06 9.9652E-07 - 3.5481E+02 9.8839E-06 7.0052E-06 8.3842E-07 6.6671E-07 - 3.9811E+02 6.9312E-06 4.8536E-06 5.5461E-07 4.4109E-07 - 4.4668E+02 4.8445E-06 3.3713E-06 3.6703E-07 2.9408E-07 - 5.0119E+02 3.3825E-06 2.3516E-06 2.4017E-07 1.9584E-07 - 5.6234E+02 2.3679E-06 1.6251E-06 1.6214E-07 1.3069E-07 - 6.3096E+02 1.6518E-06 1.1215E-06 1.0699E-07 8.5868E-08 - 7.0795E+02 1.1517E-06 7.7739E-07 7.0572E-08 5.7103E-08 - 7.9433E+02 8.0457E-07 5.3954E-07 4.6806E-08 3.7741E-08 - 8.9125E+02 5.6043E-07 3.7284E-07 3.1001E-08 2.5090E-08 - 1.0000E+03 3.9285E-07 2.5730E-07 2.1186E-08 1.6463E-08 - 1.1220E+03 2.7354E-07 1.7688E-07 1.4224E-08 1.0935E-08 - 1.2589E+03 1.9070E-07 1.2168E-07 9.6510E-09 7.4740E-09 - 1.4125E+03 1.3199E-07 8.3433E-08 6.4465E-09 5.0152E-09 - 1.5849E+03 9.1208E-08 5.7911E-08 4.1824E-09 3.3937E-09 - 1.7783E+03 6.3125E-08 3.9725E-08 2.8119E-09 2.3061E-09 - 1.9953E+03 4.3645E-08 2.6975E-08 1.9085E-09 1.4925E-09 - 2.2387E+03 3.0031E-08 1.8580E-08 1.2020E-09 9.9199E-10 - 2.5119E+03 2.0612E-08 1.2674E-08 8.1771E-10 6.6170E-10 - 2.8184E+03 1.4130E-08 8.6336E-09 5.8589E-10 4.4242E-10 - 3.1623E+03 9.9511E-09 5.9961E-09 3.8231E-10 2.9278E-10 - 3.5481E+03 6.7240E-09 4.0349E-09 2.5376E-10 1.8685E-10 - 3.9811E+03 4.5983E-09 2.7109E-09 1.6824E-10 1.2198E-10 - 4.4668E+03 3.1278E-09 1.8272E-09 1.1180E-10 8.2145E-11 - 5.0119E+03 2.1202E-09 1.2363E-09 7.7022E-11 5.3054E-11 - 5.6234E+03 1.4311E-09 8.2916E-10 5.2293E-11 3.5375E-11 - 6.3096E+03 9.6803E-10 5.6083E-10 3.3614E-11 2.4855E-11 - 7.0795E+03 6.6123E-10 3.7464E-10 2.0949E-11 1.6298E-11 - 7.9433E+03 4.4369E-10 2.5115E-10 1.4466E-11 1.0857E-11 - 8.9125E+03 2.9710E-10 1.6788E-10 9.9266E-12 6.8745E-12 - 1.0000E+04 1.9856E-10 1.1112E-10 6.1579E-12 4.1905E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.6061E+04 2.7071E+04 1.3211E+04 1.1628E+04 - 1.1220E-01 2.1919E+04 2.2701E+04 1.1375E+04 9.8401E+03 - 1.2589E-01 1.8334E+04 1.9028E+04 9.6580E+03 8.1763E+03 - 1.4125E-01 1.5182E+04 1.5835E+04 8.0733E+03 6.7116E+03 - 1.5849E-01 1.2439E+04 1.2971E+04 6.6739E+03 5.5012E+03 - 1.7783E-01 1.0099E+04 1.0559E+04 5.4737E+03 4.5057E+03 - 1.9953E-01 8.1236E+03 8.4959E+03 4.5344E+03 3.6175E+03 - 2.2387E-01 6.4517E+03 6.7392E+03 3.7064E+03 2.8699E+03 - 2.5119E-01 5.0910E+03 5.3477E+03 2.9646E+03 2.2612E+03 - 2.8184E-01 3.9676E+03 4.1806E+03 2.3639E+03 1.7807E+03 - 3.1623E-01 3.0272E+03 3.2350E+03 1.8620E+03 1.3844E+03 - 3.5481E-01 2.3217E+03 2.4950E+03 1.4411E+03 1.0600E+03 - 3.9811E-01 1.7979E+03 1.9111E+03 1.1132E+03 8.0631E+02 - 4.4668E-01 1.3692E+03 1.4533E+03 8.7409E+02 6.1723E+02 - 5.0119E-01 1.0280E+03 1.1079E+03 6.6602E+02 4.6758E+02 - 5.6234E-01 7.7260E+02 8.3851E+02 5.0000E+02 3.5170E+02 - 6.3096E-01 5.8374E+02 6.2700E+02 3.8382E+02 2.6300E+02 - 7.0795E-01 4.4149E+02 4.7815E+02 2.9103E+02 1.9561E+02 - 7.9433E-01 3.2909E+02 3.5986E+02 2.1980E+02 1.4762E+02 - 8.9125E-01 2.4623E+02 2.6878E+02 1.6596E+02 1.1018E+02 - 1.0000E+00 1.8632E+02 1.9977E+02 1.2420E+02 8.3090E+01 - 1.1220E+00 1.3978E+02 1.5010E+02 9.3215E+01 6.2711E+01 - 1.2589E+00 1.0444E+02 1.1138E+02 6.9785E+01 4.6910E+01 - 1.4125E+00 7.7980E+01 8.1860E+01 5.1267E+01 3.4551E+01 - 1.5849E+00 5.8379E+01 6.0601E+01 3.8383E+01 2.5980E+01 - 1.7783E+00 4.3119E+01 4.5478E+01 2.9044E+01 1.9146E+01 - 1.9953E+00 3.2031E+01 3.3467E+01 2.1062E+01 1.4078E+01 - 2.2387E+00 2.3855E+01 2.4552E+01 1.5453E+01 1.0464E+01 - 2.5119E+00 1.7677E+01 1.8553E+01 1.1354E+01 7.5868E+00 - 2.8184E+00 1.3135E+01 1.3772E+01 8.1594E+00 5.6033E+00 - 3.1623E+00 9.6720E+00 9.7470E+00 5.9428E+00 4.1234E+00 - 3.5481E+00 7.0649E+00 7.0642E+00 4.3075E+00 2.9180E+00 - 3.9811E+00 5.1670E+00 5.0792E+00 3.1016E+00 2.0690E+00 - 4.4668E+00 3.7762E+00 3.6718E+00 2.1869E+00 1.5189E+00 - 5.0119E+00 2.7496E+00 2.6795E+00 1.5662E+00 1.0996E+00 - 5.6234E+00 1.9720E+00 1.9351E+00 1.1258E+00 7.9286E-01 - 6.3096E+00 1.4268E+00 1.4046E+00 7.9148E-01 5.7141E-01 - 7.0795E+00 1.0401E+00 9.8077E-01 5.6557E-01 3.9578E-01 - 7.9433E+00 7.4216E-01 6.9343E-01 3.8644E-01 2.7691E-01 - 8.9125E+00 5.3639E-01 4.9265E-01 2.6334E-01 1.9916E-01 - 1.0000E+01 3.8284E-01 3.5750E-01 1.8559E-01 1.3781E-01 - 1.1220E+01 2.7434E-01 2.5304E-01 1.2759E-01 9.5500E-02 - 1.2589E+01 1.9567E-01 1.7980E-01 8.7443E-02 6.5600E-02 - 1.4125E+01 1.4029E-01 1.2902E-01 5.9957E-02 4.5930E-02 - 1.5849E+01 1.0093E-01 9.2262E-02 4.2036E-02 3.2743E-02 - 1.7783E+01 7.1731E-02 6.4630E-02 2.9270E-02 2.2323E-02 - 1.9953E+01 5.1336E-02 4.5245E-02 2.0123E-02 1.5228E-02 - 2.2387E+01 3.6198E-02 3.0828E-02 1.3848E-02 1.0453E-02 - 2.5119E+01 2.5934E-02 2.1725E-02 9.1206E-03 7.1132E-03 - 2.8184E+01 1.9027E-02 1.5623E-02 6.1474E-03 4.9390E-03 - 3.1623E+01 1.3586E-02 1.1597E-02 4.3082E-03 3.2882E-03 - 3.5481E+01 9.6953E-03 8.1917E-03 2.9153E-03 2.2350E-03 - 3.9811E+01 6.9391E-03 5.8009E-03 1.9798E-03 1.5138E-03 - 4.4668E+01 4.9496E-03 4.1196E-03 1.3331E-03 1.0188E-03 - 5.0119E+01 3.5181E-03 2.9097E-03 8.9547E-04 6.8131E-04 - 5.6234E+01 2.5171E-03 2.0463E-03 5.9753E-04 4.5957E-04 - 6.3096E+01 1.8006E-03 1.4418E-03 3.9946E-04 3.0823E-04 - 7.0795E+01 1.2745E-03 1.0236E-03 2.6783E-04 2.0507E-04 - 7.9433E+01 9.0184E-04 7.2379E-04 1.7832E-04 1.3798E-04 - 8.9125E+01 6.4210E-04 5.0698E-04 1.2004E-04 9.2556E-05 - 1.0000E+02 4.5539E-04 3.5710E-04 7.8458E-05 6.1664E-05 - 1.1220E+02 3.2347E-04 2.5132E-04 5.2043E-05 4.0710E-05 - 1.2589E+02 2.2974E-04 1.7591E-04 3.4689E-05 2.7020E-05 - 1.4125E+02 1.6274E-04 1.2344E-04 2.2901E-05 1.8109E-05 - 1.5849E+02 1.1514E-04 8.6852E-05 1.5054E-05 1.1853E-05 - 1.7783E+02 8.1088E-05 6.0749E-05 9.8844E-06 7.7353E-06 - 1.9953E+02 5.7154E-05 4.2596E-05 6.5151E-06 5.0878E-06 - 2.2387E+02 4.0279E-05 2.9738E-05 4.3945E-06 3.3966E-06 - 2.5119E+02 2.8383E-05 2.0667E-05 2.9111E-06 2.2503E-06 - 2.8184E+02 1.9896E-05 1.4472E-05 1.8964E-06 1.5022E-06 - 3.1623E+02 1.4039E-05 1.0059E-05 1.2604E-06 1.0166E-06 - 3.5481E+02 9.8630E-06 6.9867E-06 8.2796E-07 6.7710E-07 - 3.9811E+02 6.9248E-06 4.8677E-06 5.5276E-07 4.4729E-07 - 4.4668E+02 4.8434E-06 3.3882E-06 3.6606E-07 2.9604E-07 - 5.0119E+02 3.3852E-06 2.3551E-06 2.3933E-07 1.9978E-07 - 5.6234E+02 2.3714E-06 1.6295E-06 1.6107E-07 1.3006E-07 - 6.3096E+02 1.6527E-06 1.1284E-06 1.1029E-07 8.5887E-08 - 7.0795E+02 1.1568E-06 7.8097E-07 7.2346E-08 5.6954E-08 - 7.9433E+02 8.1242E-07 5.3950E-07 4.7596E-08 3.7955E-08 - 8.9125E+02 5.6863E-07 3.7361E-07 3.1436E-08 2.5613E-08 - 1.0000E+03 3.9433E-07 2.5817E-07 2.1170E-08 1.6954E-08 - 1.1220E+03 2.7262E-07 1.7826E-07 1.4428E-08 1.1476E-08 - 1.2589E+03 1.8975E-07 1.2267E-07 9.5551E-09 7.5428E-09 - 1.4125E+03 1.3224E-07 8.4221E-08 6.4204E-09 4.8322E-09 - 1.5849E+03 9.0880E-08 5.7947E-08 4.3691E-09 3.3260E-09 - 1.7783E+03 6.2536E-08 3.9869E-08 2.9220E-09 2.2430E-09 - 1.9953E+03 4.3946E-08 2.7183E-08 1.9027E-09 1.4700E-09 - 2.2387E+03 3.0221E-08 1.8672E-08 1.3019E-09 9.9616E-10 - 2.5119E+03 2.0824E-08 1.2747E-08 8.7975E-10 6.5466E-10 - 2.8184E+03 1.4315E-08 8.6903E-09 5.7772E-10 4.3242E-10 - 3.1623E+03 9.9021E-09 5.9779E-09 3.8995E-10 2.9269E-10 - 3.5481E+03 6.6984E-09 4.0085E-09 2.5134E-10 1.9685E-10 - 3.9811E+03 4.5918E-09 2.7172E-09 1.6624E-10 1.2937E-10 - 4.4668E+03 3.1465E-09 1.8317E-09 1.1020E-10 8.4198E-11 - 5.0119E+03 2.1457E-09 1.2383E-09 7.2329E-11 5.5600E-11 - 5.6234E+03 1.4331E-09 8.3068E-10 4.9201E-11 3.6923E-11 - 6.3096E+03 9.7261E-10 5.6060E-10 3.1905E-11 2.4412E-11 - 7.0795E+03 6.5693E-10 3.7718E-10 2.1319E-11 1.5897E-11 - 7.9433E+03 4.4263E-10 2.5239E-10 1.4298E-11 1.0152E-11 - 8.9125E+03 2.9756E-10 1.6805E-10 9.1273E-12 6.9823E-12 - 1.0000E+04 2.0000E-10 1.1221E-10 6.2323E-12 4.3955E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.6012E+04 2.6830E+04 1.3184E+04 1.1639E+04 - 1.1220E-01 2.1807E+04 2.2452E+04 1.1281E+04 9.8332E+03 - 1.2589E-01 1.8199E+04 1.8773E+04 9.5328E+03 8.1895E+03 - 1.4125E-01 1.5108E+04 1.5595E+04 7.9567E+03 6.7728E+03 - 1.5849E-01 1.2420E+04 1.2826E+04 6.6099E+03 5.5422E+03 - 1.7783E-01 1.0046E+04 1.0489E+04 5.4305E+03 4.4663E+03 - 1.9953E-01 8.0734E+03 8.4090E+03 4.4326E+03 3.6157E+03 - 2.2387E-01 6.4432E+03 6.6751E+03 3.6077E+03 2.9040E+03 - 2.5119E-01 5.0747E+03 5.2365E+03 2.9012E+03 2.2881E+03 - 2.8184E-01 3.9432E+03 4.0836E+03 2.3091E+03 1.7817E+03 - 3.1623E-01 3.0317E+03 3.1946E+03 1.8185E+03 1.3831E+03 - 3.5481E-01 2.3493E+03 2.4585E+03 1.4304E+03 1.0682E+03 - 3.9811E-01 1.8051E+03 1.8777E+03 1.1054E+03 8.2076E+02 - 4.4668E-01 1.3550E+03 1.4268E+03 8.4376E+02 6.3035E+02 - 5.0119E-01 1.0197E+03 1.0808E+03 6.5285E+02 4.7797E+02 - 5.6234E-01 7.6748E+02 8.2273E+02 5.0613E+02 3.5933E+02 - 6.3096E-01 5.7881E+02 6.2646E+02 3.7984E+02 2.6909E+02 - 7.0795E-01 4.4070E+02 4.6915E+02 2.8376E+02 2.0342E+02 - 7.9433E-01 3.2853E+02 3.4606E+02 2.1581E+02 1.5209E+02 - 8.9125E-01 2.4707E+02 2.5619E+02 1.6387E+02 1.1415E+02 - 1.0000E+00 1.8564E+02 1.9395E+02 1.2170E+02 8.4398E+01 - 1.1220E+00 1.3897E+02 1.4609E+02 9.0775E+01 6.2445E+01 - 1.2589E+00 1.0412E+02 1.0958E+02 6.8014E+01 4.6701E+01 - 1.4125E+00 7.8514E+01 8.1212E+01 5.0736E+01 3.5012E+01 - 1.5849E+00 5.8563E+01 5.9748E+01 3.7219E+01 2.5858E+01 - 1.7783E+00 4.2873E+01 4.4527E+01 2.7698E+01 1.9160E+01 - 1.9953E+00 3.2251E+01 3.2832E+01 2.0680E+01 1.4218E+01 - 2.2387E+00 2.4149E+01 2.4390E+01 1.4844E+01 1.0463E+01 - 2.5119E+00 1.7648E+01 1.7943E+01 1.0842E+01 7.8342E+00 - 2.8184E+00 1.3211E+01 1.3212E+01 8.0699E+00 5.6700E+00 - 3.1623E+00 9.6750E+00 9.7357E+00 5.8407E+00 4.0660E+00 - 3.5481E+00 7.0230E+00 7.0112E+00 4.2192E+00 2.9412E+00 - 3.9811E+00 5.0976E+00 5.0550E+00 3.0037E+00 2.1494E+00 - 4.4668E+00 3.7555E+00 3.6508E+00 2.1648E+00 1.5685E+00 - 5.0119E+00 2.7323E+00 2.6330E+00 1.5788E+00 1.1215E+00 - 5.6234E+00 1.9644E+00 1.9221E+00 1.0950E+00 7.8017E-01 - 6.3096E+00 1.4392E+00 1.3752E+00 7.5555E-01 5.6269E-01 - 7.0795E+00 1.0428E+00 9.6628E-01 5.4545E-01 4.0109E-01 - 7.9433E+00 7.4956E-01 7.0101E-01 3.9317E-01 2.7296E-01 - 8.9125E+00 5.4697E-01 5.1188E-01 2.7896E-01 1.8435E-01 - 1.0000E+01 3.8953E-01 3.6070E-01 1.8784E-01 1.3530E-01 - 1.1220E+01 2.8018E-01 2.5516E-01 1.3228E-01 9.3826E-02 - 1.2589E+01 2.0044E-01 1.8106E-01 9.1371E-02 6.6171E-02 - 1.4125E+01 1.4265E-01 1.2927E-01 6.2398E-02 4.6906E-02 - 1.5849E+01 1.0195E-01 9.2164E-02 4.2432E-02 3.2082E-02 - 1.7783E+01 7.3454E-02 6.6504E-02 2.9686E-02 2.1761E-02 - 1.9953E+01 5.2629E-02 4.7201E-02 2.0393E-02 1.5618E-02 - 2.2387E+01 3.8142E-02 3.2424E-02 1.4215E-02 1.1001E-02 - 2.5119E+01 2.7443E-02 2.2813E-02 9.4519E-03 7.1691E-03 - 2.8184E+01 1.9457E-02 1.6368E-02 6.1755E-03 4.7709E-03 - 3.1623E+01 1.3606E-02 1.1594E-02 4.3339E-03 3.2910E-03 - 3.5481E+01 9.7221E-03 8.2370E-03 2.9259E-03 2.2231E-03 - 3.9811E+01 6.9477E-03 5.8263E-03 1.9686E-03 1.5111E-03 - 4.4668E+01 4.9391E-03 4.1180E-03 1.3292E-03 1.0258E-03 - 5.0119E+01 3.5113E-03 2.9136E-03 9.0025E-04 6.9080E-04 - 5.6234E+01 2.5201E-03 2.0574E-03 6.0027E-04 4.6451E-04 - 6.3096E+01 1.8045E-03 1.4498E-03 3.9859E-04 3.1117E-04 - 7.0795E+01 1.2801E-03 1.0258E-03 2.6651E-04 2.0777E-04 - 7.9433E+01 9.1233E-04 7.2695E-04 1.7814E-04 1.3962E-04 - 8.9125E+01 6.4826E-04 5.1343E-04 1.1887E-04 9.3294E-05 - 1.0000E+02 4.5738E-04 3.5731E-04 7.8284E-05 6.1620E-05 - 1.1220E+02 3.2450E-04 2.5107E-04 5.2072E-05 4.0850E-05 - 1.2589E+02 2.3002E-04 1.7609E-04 3.4547E-05 2.7066E-05 - 1.4125E+02 1.6272E-04 1.2357E-04 2.2963E-05 1.7885E-05 - 1.5849E+02 1.1486E-04 8.6500E-05 1.5197E-05 1.1930E-05 - 1.7783E+02 8.1145E-05 6.0811E-05 9.9663E-06 7.8896E-06 - 1.9953E+02 5.7161E-05 4.2419E-05 6.5237E-06 5.1784E-06 - 2.2387E+02 4.0393E-05 2.9462E-05 4.3897E-06 3.4144E-06 - 2.5119E+02 2.8453E-05 2.0530E-05 2.8749E-06 2.2773E-06 - 2.8184E+02 1.9905E-05 1.4318E-05 1.8940E-06 1.5402E-06 - 3.1623E+02 1.4055E-05 1.0070E-05 1.2668E-06 1.0178E-06 - 3.5481E+02 9.8321E-06 7.0180E-06 8.2519E-07 6.7166E-07 - 3.9811E+02 6.9061E-06 4.8911E-06 5.4894E-07 4.4340E-07 - 4.4668E+02 4.8536E-06 3.4110E-06 3.6704E-07 2.9643E-07 - 5.0119E+02 3.3962E-06 2.3638E-06 2.4332E-07 1.9749E-07 - 5.6234E+02 2.3763E-06 1.6347E-06 1.6034E-07 1.3097E-07 - 6.3096E+02 1.6616E-06 1.1314E-06 1.0755E-07 8.6122E-08 - 7.0795E+02 1.1584E-06 7.8295E-07 7.2281E-08 5.7117E-08 - 7.9433E+02 8.0993E-07 5.4293E-07 4.7592E-08 3.8644E-08 - 8.9125E+02 5.6679E-07 3.7599E-07 3.1451E-08 2.6130E-08 - 1.0000E+03 3.9203E-07 2.5835E-07 2.0949E-08 1.7367E-08 - 1.1220E+03 2.7246E-07 1.7819E-07 1.4052E-08 1.1582E-08 - 1.2589E+03 1.8954E-07 1.2296E-07 9.3193E-09 7.5977E-09 - 1.4125E+03 1.3161E-07 8.4653E-08 6.2055E-09 4.9319E-09 - 1.5849E+03 9.1534E-08 5.8562E-08 4.1729E-09 3.3071E-09 - 1.7783E+03 6.3311E-08 4.0051E-08 2.7827E-09 2.2114E-09 - 1.9953E+03 4.4078E-08 2.7369E-08 1.9244E-09 1.4688E-09 - 2.2387E+03 3.0250E-08 1.8755E-08 1.2765E-09 9.8801E-10 - 2.5119E+03 2.0732E-08 1.2707E-08 8.3194E-10 6.6932E-10 - 2.8184E+03 1.4299E-08 8.6767E-09 5.4832E-10 4.3654E-10 - 3.1623E+03 9.9206E-09 5.9881E-09 3.8831E-10 2.8256E-10 - 3.5481E+03 6.7132E-09 4.0295E-09 2.5601E-10 1.9318E-10 - 3.9811E+03 4.5947E-09 2.7258E-09 1.7260E-10 1.3017E-10 - 4.4668E+03 3.1209E-09 1.8418E-09 1.1473E-10 8.5756E-11 - 5.0119E+03 2.1205E-09 1.2422E-09 7.7248E-11 5.6563E-11 - 5.6234E+03 1.4412E-09 8.4004E-10 4.8942E-11 3.6017E-11 - 6.3096E+03 9.8478E-10 5.5916E-10 3.2716E-11 2.3778E-11 - 7.0795E+03 6.6206E-10 3.7710E-10 2.2252E-11 1.5888E-11 - 7.9433E+03 4.4410E-10 2.5201E-10 1.4562E-11 1.0365E-11 - 8.9125E+03 2.9885E-10 1.6811E-10 9.5332E-12 6.5588E-12 - 1.0000E+04 2.0009E-10 1.1257E-10 6.0305E-12 4.3424E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8556E+04 1.9012E+04 9.2829E+03 8.4209E+03 - 1.1220E-01 1.5793E+04 1.6156E+04 8.0586E+03 7.2069E+03 - 1.2589E-01 1.3337E+04 1.3678E+04 6.8792E+03 6.0777E+03 - 1.4125E-01 1.1183E+04 1.1457E+04 5.8256E+03 5.0991E+03 - 1.5849E-01 9.3390E+03 9.5409E+03 4.8794E+03 4.2112E+03 - 1.7783E-01 7.7123E+03 7.8576E+03 4.0547E+03 3.4372E+03 - 1.9953E-01 6.2588E+03 6.4081E+03 3.3513E+03 2.7994E+03 - 2.2387E-01 5.0718E+03 5.1977E+03 2.7408E+03 2.2648E+03 - 2.5119E-01 4.0627E+03 4.1526E+03 2.2212E+03 1.8278E+03 - 2.8184E-01 3.2000E+03 3.2827E+03 1.7938E+03 1.4551E+03 - 3.1623E-01 2.5098E+03 2.5734E+03 1.4327E+03 1.1519E+03 - 3.5481E-01 1.9675E+03 2.0142E+03 1.1291E+03 9.0288E+02 - 3.9811E-01 1.5367E+03 1.5655E+03 8.9070E+02 7.0160E+02 - 4.4668E-01 1.1824E+03 1.2068E+03 6.9125E+02 5.4550E+02 - 5.0119E-01 9.0555E+02 9.2697E+02 5.3438E+02 4.1727E+02 - 5.6234E-01 6.9214E+02 7.0873E+02 4.1362E+02 3.2057E+02 - 6.3096E-01 5.3181E+02 5.4203E+02 3.1934E+02 2.4498E+02 - 7.0795E-01 4.0452E+02 4.1223E+02 2.4484E+02 1.8355E+02 - 7.9433E-01 3.0460E+02 3.1004E+02 1.8424E+02 1.3792E+02 - 8.9125E-01 2.3005E+02 2.3336E+02 1.4072E+02 1.0611E+02 - 1.0000E+00 1.7411E+02 1.7627E+02 1.0511E+02 8.0277E+01 - 1.1220E+00 1.3261E+02 1.3241E+02 7.9566E+01 6.0258E+01 - 1.2589E+00 1.0079E+02 9.9961E+01 5.9349E+01 4.4922E+01 - 1.4125E+00 7.5084E+01 7.5004E+01 4.4293E+01 3.3264E+01 - 1.5849E+00 5.5614E+01 5.5286E+01 3.2969E+01 2.4521E+01 - 1.7783E+00 4.1436E+01 4.0870E+01 2.4313E+01 1.8087E+01 - 1.9953E+00 3.1161E+01 3.0329E+01 1.7871E+01 1.3364E+01 - 2.2387E+00 2.3219E+01 2.2149E+01 1.2983E+01 9.8713E+00 - 2.5119E+00 1.7124E+01 1.6333E+01 9.4655E+00 7.1825E+00 - 2.8184E+00 1.2671E+01 1.1868E+01 6.9208E+00 5.0984E+00 - 3.1623E+00 9.2029E+00 8.6682E+00 4.9438E+00 3.6976E+00 - 3.5481E+00 6.6939E+00 6.2938E+00 3.5466E+00 2.6575E+00 - 3.9811E+00 4.8659E+00 4.5222E+00 2.5539E+00 1.8773E+00 - 4.4668E+00 3.5152E+00 3.2377E+00 1.8100E+00 1.3212E+00 - 5.0119E+00 2.5360E+00 2.3308E+00 1.2696E+00 9.4597E-01 - 5.6234E+00 1.8313E+00 1.6800E+00 8.7288E-01 6.5497E-01 - 6.3096E+00 1.3309E+00 1.1977E+00 6.1296E-01 4.4773E-01 - 7.0795E+00 9.5652E-01 8.6341E-01 4.3091E-01 3.1871E-01 - 7.9433E+00 6.7846E-01 6.2517E-01 2.9750E-01 2.2434E-01 - 8.9125E+00 4.8658E-01 4.4034E-01 2.0475E-01 1.5087E-01 - 1.0000E+01 3.5610E-01 3.0986E-01 1.4099E-01 1.0734E-01 - 1.1220E+01 2.5428E-01 2.2068E-01 9.8519E-02 7.3190E-02 - 1.2589E+01 1.8199E-01 1.5694E-01 6.6807E-02 4.9411E-02 - 1.4125E+01 1.3029E-01 1.0995E-01 4.5538E-02 3.4094E-02 - 1.5849E+01 9.2481E-02 7.8672E-02 3.1021E-02 2.3128E-02 - 1.7783E+01 6.5686E-02 5.5412E-02 2.1292E-02 1.5414E-02 - 1.9953E+01 4.6621E-02 3.8853E-02 1.4807E-02 1.0835E-02 - 2.2387E+01 3.3497E-02 2.8124E-02 9.5976E-03 7.2784E-03 - 2.5119E+01 2.4167E-02 2.0058E-02 6.2991E-03 4.7352E-03 - 2.8184E+01 1.7000E-02 1.4248E-02 4.3495E-03 3.3532E-03 - 3.1623E+01 1.2089E-02 9.8294E-03 2.8961E-03 2.2208E-03 - 3.5481E+01 8.6280E-03 6.9549E-03 1.9425E-03 1.4867E-03 - 3.9811E+01 6.1478E-03 4.9154E-03 1.3044E-03 9.9694E-04 - 4.4668E+01 4.3841E-03 3.4718E-03 8.7048E-04 6.6957E-04 - 5.0119E+01 3.1174E-03 2.4596E-03 5.8236E-04 4.4726E-04 - 5.6234E+01 2.2209E-03 1.7368E-03 3.8767E-04 2.9986E-04 - 6.3096E+01 1.5841E-03 1.2214E-03 2.5828E-04 2.0035E-04 - 7.0795E+01 1.1267E-03 8.6069E-04 1.6925E-04 1.3287E-04 - 7.9433E+01 7.9774E-04 6.0692E-04 1.1221E-04 9.0582E-05 - 8.9125E+01 5.6304E-04 4.2627E-04 7.4956E-05 5.9696E-05 - 1.0000E+02 4.0072E-04 2.9943E-04 4.9374E-05 3.9113E-05 - 1.1220E+02 2.8348E-04 2.1128E-04 3.2759E-05 2.6294E-05 - 1.2589E+02 1.9988E-04 1.4840E-04 2.1518E-05 1.7439E-05 - 1.4125E+02 1.4127E-04 1.0359E-04 1.4270E-05 1.1306E-05 - 1.5849E+02 9.9876E-05 7.2714E-05 9.5705E-06 7.4648E-06 - 1.7783E+02 7.0095E-05 5.0876E-05 6.3475E-06 5.0457E-06 - 1.9953E+02 4.9236E-05 3.5350E-05 4.1777E-06 3.3130E-06 - 2.2387E+02 3.4694E-05 2.4486E-05 2.7294E-06 2.1956E-06 - 2.5119E+02 2.4311E-05 1.7048E-05 1.8562E-06 1.4869E-06 - 2.8184E+02 1.7054E-05 1.1838E-05 1.2617E-06 1.0212E-06 - 3.1623E+02 1.1959E-05 8.3055E-06 8.3779E-07 6.7238E-07 - 3.5481E+02 8.3468E-06 5.7673E-06 5.5297E-07 4.5037E-07 - 3.9811E+02 5.8453E-06 4.0173E-06 3.6984E-07 3.0240E-07 - 4.4668E+02 4.0944E-06 2.7810E-06 2.4714E-07 2.0212E-07 - 5.0119E+02 2.8619E-06 1.9269E-06 1.6627E-07 1.3384E-07 - 5.6234E+02 2.0052E-06 1.3376E-06 1.1197E-07 8.9275E-08 - 6.3096E+02 1.4002E-06 9.2346E-07 7.5012E-08 5.9410E-08 - 7.0795E+02 9.7359E-07 6.4050E-07 5.0169E-08 3.9803E-08 - 7.9433E+02 6.7626E-07 4.4200E-07 3.3089E-08 2.7324E-08 - 8.9125E+02 4.7383E-07 3.0411E-07 2.2415E-08 1.8483E-08 - 1.0000E+03 3.2910E-07 2.0961E-07 1.5293E-08 1.1974E-08 - 1.1220E+03 2.2596E-07 1.4406E-07 1.0189E-08 7.9428E-09 - 1.2589E+03 1.5691E-07 9.8903E-08 6.8372E-09 5.3073E-09 - 1.4125E+03 1.0865E-07 6.7853E-08 4.6571E-09 3.4781E-09 - 1.5849E+03 7.4705E-08 4.6305E-08 3.1446E-09 2.3293E-09 - 1.7783E+03 5.1785E-08 3.1568E-08 2.1012E-09 1.5254E-09 - 1.9953E+03 3.5591E-08 2.1668E-08 1.4045E-09 1.0417E-09 - 2.2387E+03 2.4356E-08 1.4829E-08 9.4926E-10 7.1337E-10 - 2.5119E+03 1.6776E-08 1.0158E-08 6.0771E-10 4.6471E-10 - 2.8184E+03 1.1393E-08 6.8581E-09 3.9405E-10 3.1197E-10 - 3.1623E+03 7.8367E-09 4.6606E-09 2.7844E-10 2.0535E-10 - 3.5481E+03 5.2274E-09 3.1013E-09 1.8389E-10 1.3601E-10 - 3.9811E+03 3.5398E-09 2.0976E-09 1.2374E-10 9.2356E-11 - 4.4668E+03 2.3871E-09 1.4070E-09 8.0474E-11 6.1426E-11 - 5.0119E+03 1.6220E-09 9.3542E-10 5.1864E-11 4.0087E-11 - 5.6234E+03 1.0997E-09 6.3120E-10 3.3384E-11 2.6092E-11 - 6.3096E+03 7.3316E-10 4.1882E-10 2.4080E-11 1.7600E-11 - 7.0795E+03 4.9069E-10 2.7727E-10 1.5976E-11 1.1558E-11 - 7.9433E+03 3.2684E-10 1.8442E-10 1.0927E-11 7.3413E-12 - 8.9125E+03 2.1767E-10 1.2287E-10 7.1764E-12 4.6984E-12 - 1.0000E+04 1.4654E-10 8.1888E-11 4.4772E-12 3.2342E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8472E+04 1.8743E+04 9.0470E+03 8.4353E+03 - 1.1220E-01 1.5693E+04 1.5876E+04 7.8095E+03 7.2173E+03 - 1.2589E-01 1.3321E+04 1.3356E+04 6.6508E+03 6.0961E+03 - 1.4125E-01 1.1194E+04 1.1202E+04 5.6119E+03 5.0962E+03 - 1.5849E-01 9.2962E+03 9.2851E+03 4.7420E+03 4.2360E+03 - 1.7783E-01 7.6642E+03 7.6619E+03 3.9438E+03 3.5054E+03 - 1.9953E-01 6.2505E+03 6.2458E+03 3.2300E+03 2.8638E+03 - 2.2387E-01 5.0652E+03 5.0223E+03 2.6509E+03 2.3108E+03 - 2.5119E-01 4.0283E+03 4.0114E+03 2.1467E+03 1.8473E+03 - 2.8184E-01 3.1731E+03 3.1890E+03 1.7230E+03 1.4617E+03 - 3.1623E-01 2.5038E+03 2.5148E+03 1.3800E+03 1.1600E+03 - 3.5481E-01 1.9541E+03 1.9475E+03 1.0866E+03 9.1781E+02 - 3.9811E-01 1.5128E+03 1.5028E+03 8.4626E+02 7.1447E+02 - 4.4668E-01 1.1720E+03 1.1623E+03 6.6377E+02 5.4891E+02 - 5.0119E-01 9.0396E+02 8.9314E+02 5.1728E+02 4.2166E+02 - 5.6234E-01 6.9076E+02 6.8654E+02 3.9672E+02 3.2591E+02 - 6.3096E-01 5.2753E+02 5.2617E+02 3.0238E+02 2.4612E+02 - 7.0795E-01 4.0367E+02 3.9825E+02 2.3037E+02 1.8521E+02 - 7.9433E-01 3.0902E+02 3.0148E+02 1.7690E+02 1.4106E+02 - 8.9125E-01 2.3418E+02 2.3019E+02 1.3339E+02 1.0686E+02 - 1.0000E+00 1.7525E+02 1.7240E+02 1.0079E+02 8.0761E+01 - 1.1220E+00 1.3288E+02 1.2988E+02 7.6503E+01 6.0919E+01 - 1.2589E+00 9.9865E+01 9.7129E+01 5.8247E+01 4.6323E+01 - 1.4125E+00 7.5311E+01 7.2354E+01 4.2762E+01 3.4570E+01 - 1.5849E+00 5.6672E+01 5.3784E+01 3.1472E+01 2.5497E+01 - 1.7783E+00 4.2261E+01 4.0317E+01 2.3779E+01 1.8604E+01 - 1.9953E+00 3.1410E+01 2.9823E+01 1.7222E+01 1.3388E+01 - 2.2387E+00 2.3169E+01 2.2041E+01 1.2666E+01 9.8486E+00 - 2.5119E+00 1.7024E+01 1.6301E+01 9.3289E+00 7.2336E+00 - 2.8184E+00 1.2503E+01 1.1737E+01 6.6051E+00 5.2227E+00 - 3.1623E+00 9.1856E+00 8.5899E+00 4.8365E+00 3.7320E+00 - 3.5481E+00 6.7032E+00 6.1981E+00 3.4845E+00 2.6476E+00 - 3.9811E+00 4.8627E+00 4.4620E+00 2.4552E+00 1.8820E+00 - 4.4668E+00 3.5181E+00 3.2372E+00 1.7562E+00 1.3293E+00 - 5.0119E+00 2.5651E+00 2.3439E+00 1.2393E+00 9.4815E-01 - 5.6234E+00 1.8449E+00 1.6862E+00 8.6254E-01 6.5847E-01 - 6.3096E+00 1.3190E+00 1.1925E+00 6.0746E-01 4.6886E-01 - 7.0795E+00 9.4376E-01 8.4439E-01 4.3350E-01 3.2468E-01 - 7.9433E+00 6.7823E-01 6.0506E-01 3.0019E-01 2.1924E-01 - 8.9125E+00 4.9112E-01 4.3176E-01 1.9894E-01 1.5271E-01 - 1.0000E+01 3.5357E-01 3.0759E-01 1.4287E-01 1.0670E-01 - 1.1220E+01 2.5382E-01 2.1917E-01 9.6813E-02 7.3137E-02 - 1.2589E+01 1.8120E-01 1.5556E-01 6.6120E-02 4.9303E-02 - 1.4125E+01 1.2858E-01 1.1134E-01 4.6220E-02 3.3732E-02 - 1.5849E+01 9.1164E-02 7.9000E-02 3.1297E-02 2.2990E-02 - 1.7783E+01 6.4429E-02 5.5246E-02 2.0806E-02 1.6011E-02 - 1.9953E+01 4.6127E-02 3.9272E-02 1.4235E-02 1.0700E-02 - 2.2387E+01 3.3490E-02 2.8173E-02 9.8740E-03 7.0629E-03 - 2.5119E+01 2.4293E-02 2.0076E-02 6.2668E-03 4.7743E-03 - 2.8184E+01 1.7104E-02 1.4144E-02 4.1349E-03 3.3821E-03 - 3.1623E+01 1.2154E-02 9.8779E-03 2.9039E-03 2.2199E-03 - 3.5481E+01 8.6629E-03 6.9824E-03 1.9435E-03 1.4938E-03 - 3.9811E+01 6.1704E-03 4.9199E-03 1.2956E-03 9.9380E-04 - 4.4668E+01 4.3998E-03 3.4803E-03 8.6070E-04 6.7141E-04 - 5.0119E+01 3.1287E-03 2.4568E-03 5.7398E-04 4.4752E-04 - 5.6234E+01 2.2249E-03 1.7354E-03 3.8416E-04 2.9783E-04 - 6.3096E+01 1.5822E-03 1.2266E-03 2.5398E-04 2.0094E-04 - 7.0795E+01 1.1269E-03 8.6642E-04 1.6979E-04 1.3227E-04 - 7.9433E+01 8.0143E-04 6.1326E-04 1.1403E-04 8.7009E-05 - 8.9125E+01 5.6817E-04 4.3082E-04 7.4802E-05 5.8641E-05 - 1.0000E+02 4.0111E-04 3.0070E-04 4.9660E-05 3.9338E-05 - 1.1220E+02 2.8317E-04 2.1144E-04 3.2808E-05 2.6179E-05 - 1.2589E+02 2.0044E-04 1.4874E-04 2.1639E-05 1.7281E-05 - 1.4125E+02 1.4153E-04 1.0408E-04 1.4328E-05 1.1466E-05 - 1.5849E+02 9.9448E-05 7.2660E-05 9.4827E-06 7.7073E-06 - 1.7783E+02 7.0052E-05 5.0519E-05 6.2648E-06 5.0605E-06 - 1.9953E+02 4.9326E-05 3.5234E-05 4.1796E-06 3.3670E-06 - 2.2387E+02 3.4715E-05 2.4629E-05 2.7605E-06 2.2358E-06 - 2.5119E+02 2.4434E-05 1.7115E-05 1.8383E-06 1.5077E-06 - 2.8184E+02 1.7084E-05 1.1977E-05 1.2501E-06 1.0097E-06 - 3.1623E+02 1.1937E-05 8.3028E-06 8.2595E-07 6.6570E-07 - 3.5481E+02 8.3788E-06 5.7740E-06 5.4781E-07 4.4299E-07 - 3.9811E+02 5.8807E-06 4.0019E-06 3.6762E-07 2.9614E-07 - 4.4668E+02 4.1051E-06 2.7623E-06 2.4501E-07 2.0027E-07 - 5.0119E+02 2.8614E-06 1.9228E-06 1.6296E-07 1.3487E-07 - 5.6234E+02 2.0013E-06 1.3343E-06 1.1208E-07 9.0698E-08 - 6.3096E+02 1.3961E-06 9.2011E-07 7.6240E-08 5.9827E-08 - 7.0795E+02 9.7348E-07 6.3670E-07 5.1055E-08 3.9746E-08 - 7.9433E+02 6.7946E-07 4.4074E-07 3.4324E-08 2.7121E-08 - 8.9125E+02 4.7283E-07 3.0325E-07 2.3033E-08 1.8079E-08 - 1.0000E+03 3.2933E-07 2.1016E-07 1.5403E-08 1.1803E-08 - 1.1220E+03 2.2688E-07 1.4406E-07 1.0239E-08 7.9890E-09 - 1.2589E+03 1.5634E-07 9.8622E-08 6.7062E-09 5.3450E-09 - 1.4125E+03 1.0875E-07 6.7743E-08 4.6281E-09 3.6113E-09 - 1.5849E+03 7.5082E-08 4.6123E-08 3.1871E-09 2.4266E-09 - 1.7783E+03 5.2032E-08 3.1543E-08 2.0865E-09 1.6086E-09 - 1.9953E+03 3.5566E-08 2.1733E-08 1.3962E-09 1.0523E-09 - 2.2387E+03 2.4249E-08 1.4813E-08 9.1202E-10 6.9835E-10 - 2.5119E+03 1.6662E-08 1.0073E-08 6.2624E-10 4.4697E-10 - 2.8184E+03 1.1401E-08 6.7716E-09 4.2992E-10 3.0435E-10 - 3.1623E+03 7.8638E-09 4.6498E-09 2.8286E-10 2.1304E-10 - 3.5481E+03 5.2279E-09 3.0891E-09 1.8320E-10 1.3880E-10 - 3.9811E+03 3.5533E-09 2.0860E-09 1.2333E-10 9.0688E-11 - 4.4668E+03 2.4122E-09 1.4115E-09 7.9430E-11 5.7489E-11 - 5.0119E+03 1.6175E-09 9.4324E-10 5.1782E-11 3.7435E-11 - 5.6234E+03 1.0961E-09 6.2194E-10 3.6454E-11 2.5936E-11 - 6.3096E+03 7.3590E-10 4.2172E-10 2.3466E-11 1.6494E-11 - 7.0795E+03 4.9116E-10 2.8220E-10 1.4755E-11 1.1179E-11 - 7.9433E+03 3.3012E-10 1.8660E-10 9.4940E-12 7.3024E-12 - 8.9125E+03 2.2350E-10 1.2275E-10 6.4710E-12 4.6944E-12 - 1.0000E+04 1.4979E-10 8.0535E-11 4.5862E-12 3.1760E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8291E+04 1.8242E+04 8.7200E+03 8.4825E+03 - 1.1220E-01 1.5538E+04 1.5481E+04 7.4641E+03 7.2814E+03 - 1.2589E-01 1.3103E+04 1.3015E+04 6.3822E+03 6.1451E+03 - 1.4125E-01 1.1044E+04 1.0903E+04 5.3912E+03 5.1208E+03 - 1.5849E-01 9.2392E+03 9.0558E+03 4.4885E+03 4.2486E+03 - 1.7783E-01 7.6035E+03 7.4468E+03 3.7203E+03 3.4935E+03 - 1.9953E-01 6.1859E+03 6.0621E+03 3.0551E+03 2.8672E+03 - 2.2387E-01 5.0030E+03 4.8477E+03 2.5070E+03 2.3252E+03 - 2.5119E-01 3.9814E+03 3.8474E+03 2.0400E+03 1.8635E+03 - 2.8184E-01 3.1449E+03 3.0467E+03 1.6256E+03 1.4797E+03 - 3.1623E-01 2.4788E+03 2.4022E+03 1.3006E+03 1.1700E+03 - 3.5481E-01 1.9400E+03 1.8684E+03 1.0335E+03 9.1406E+02 - 3.9811E-01 1.5143E+03 1.4465E+03 8.1065E+02 7.1153E+02 - 4.4668E-01 1.1742E+03 1.1210E+03 6.2814E+02 5.5855E+02 - 5.0119E-01 9.0567E+02 8.6202E+02 4.8525E+02 4.3309E+02 - 5.6234E-01 6.9486E+02 6.6010E+02 3.7485E+02 3.2966E+02 - 6.3096E-01 5.3479E+02 5.0475E+02 2.8668E+02 2.5335E+02 - 7.0795E-01 4.0745E+02 3.7985E+02 2.1942E+02 1.9532E+02 - 7.9433E-01 3.0728E+02 2.8591E+02 1.6752E+02 1.4820E+02 - 8.9125E-01 2.3312E+02 2.1733E+02 1.2483E+02 1.1078E+02 - 1.0000E+00 1.7552E+02 1.6467E+02 9.5112E+01 8.1727E+01 - 1.1220E+00 1.3176E+02 1.2398E+02 7.2433E+01 6.1142E+01 - 1.2589E+00 1.0014E+02 9.4312E+01 5.4997E+01 4.5793E+01 - 1.4125E+00 7.5823E+01 7.1096E+01 4.1248E+01 3.4001E+01 - 1.5849E+00 5.6654E+01 5.2908E+01 3.0572E+01 2.5350E+01 - 1.7783E+00 4.2242E+01 3.9167E+01 2.2855E+01 1.8733E+01 - 1.9953E+00 3.1220E+01 2.8946E+01 1.6890E+01 1.3658E+01 - 2.2387E+00 2.2956E+01 2.1255E+01 1.2173E+01 9.7552E+00 - 2.5119E+00 1.6988E+01 1.5765E+01 8.8129E+00 7.1021E+00 - 2.8184E+00 1.2584E+01 1.1528E+01 6.3939E+00 5.2521E+00 - 3.1623E+00 9.1329E+00 8.4547E+00 4.8073E+00 3.7106E+00 - 3.5481E+00 6.6564E+00 6.1618E+00 3.4709E+00 2.6434E+00 - 3.9811E+00 4.8120E+00 4.4779E+00 2.4641E+00 1.8742E+00 - 4.4668E+00 3.4998E+00 3.2148E+00 1.7367E+00 1.3381E+00 - 5.0119E+00 2.5469E+00 2.3151E+00 1.2207E+00 9.5664E-01 - 5.6234E+00 1.8481E+00 1.6724E+00 8.5448E-01 6.6385E-01 - 6.3096E+00 1.3257E+00 1.2026E+00 6.1092E-01 4.6778E-01 - 7.0795E+00 9.5068E-01 8.4259E-01 4.3859E-01 3.2745E-01 - 7.9433E+00 6.8585E-01 6.0106E-01 2.9946E-01 2.2389E-01 - 8.9125E+00 4.9046E-01 4.4051E-01 2.0476E-01 1.5610E-01 - 1.0000E+01 3.5121E-01 3.0886E-01 1.4228E-01 1.0544E-01 - 1.1220E+01 2.5061E-01 2.1805E-01 9.7186E-02 7.2567E-02 - 1.2589E+01 1.8036E-01 1.5516E-01 6.5586E-02 4.9572E-02 - 1.4125E+01 1.2919E-01 1.0983E-01 4.5499E-02 3.3237E-02 - 1.5849E+01 9.2304E-02 7.8328E-02 3.1001E-02 2.3085E-02 - 1.7783E+01 6.5217E-02 5.5827E-02 2.0915E-02 1.6092E-02 - 1.9953E+01 4.6615E-02 3.9321E-02 1.4346E-02 1.0859E-02 - 2.2387E+01 3.3903E-02 2.7400E-02 9.5026E-03 6.9241E-03 - 2.5119E+01 2.4029E-02 1.9632E-02 6.2921E-03 4.7827E-03 - 2.8184E+01 1.6665E-02 1.4022E-02 4.4380E-03 3.2786E-03 - 3.1623E+01 1.2167E-02 9.8828E-03 2.9077E-03 2.2336E-03 - 3.5481E+01 8.6798E-03 6.9803E-03 1.9388E-03 1.5014E-03 - 3.9811E+01 6.1748E-03 4.9264E-03 1.2967E-03 1.0041E-03 - 4.4668E+01 4.3941E-03 3.4824E-03 8.7100E-04 6.7133E-04 - 5.0119E+01 3.1372E-03 2.4606E-03 5.8053E-04 4.4715E-04 - 5.6234E+01 2.2291E-03 1.7436E-03 3.8872E-04 2.9850E-04 - 6.3096E+01 1.5879E-03 1.2386E-03 2.5537E-04 1.9942E-04 - 7.0795E+01 1.1309E-03 8.6829E-04 1.6831E-04 1.3386E-04 - 7.9433E+01 7.9666E-04 6.0993E-04 1.1346E-04 8.9747E-05 - 8.9125E+01 5.6322E-04 4.3247E-04 7.5861E-05 5.8977E-05 - 1.0000E+02 4.0103E-04 3.0212E-04 4.9470E-05 3.8970E-05 - 1.1220E+02 2.8370E-04 2.1262E-04 3.2810E-05 2.6052E-05 - 1.2589E+02 2.0087E-04 1.4917E-04 2.1791E-05 1.7302E-05 - 1.4125E+02 1.4150E-04 1.0451E-04 1.4535E-05 1.1434E-05 - 1.5849E+02 9.9526E-05 7.2977E-05 9.5857E-06 7.6444E-06 - 1.7783E+02 7.0350E-05 5.0801E-05 6.3249E-06 5.1055E-06 - 1.9953E+02 4.9536E-05 3.5469E-05 4.2367E-06 3.4331E-06 - 2.2387E+02 3.4787E-05 2.4860E-05 2.7953E-06 2.2816E-06 - 2.5119E+02 2.4530E-05 1.7390E-05 1.8304E-06 1.5086E-06 - 2.8184E+02 1.7185E-05 1.2033E-05 1.2686E-06 9.8705E-07 - 3.1623E+02 1.1999E-05 8.3226E-06 8.3127E-07 6.6961E-07 - 3.5481E+02 8.4087E-06 5.7762E-06 5.5175E-07 4.4798E-07 - 3.9811E+02 5.8814E-06 4.0166E-06 3.6646E-07 2.9973E-07 - 4.4668E+02 4.1144E-06 2.7915E-06 2.4767E-07 1.9980E-07 - 5.0119E+02 2.8681E-06 1.9244E-06 1.6568E-07 1.3241E-07 - 5.6234E+02 2.0152E-06 1.3321E-06 1.1160E-07 9.0427E-08 - 6.3096E+02 1.3993E-06 9.2477E-07 7.3987E-08 6.0474E-08 - 7.0795E+02 9.7087E-07 6.3956E-07 5.0234E-08 3.9725E-08 - 7.9433E+02 6.7749E-07 4.4248E-07 3.4240E-08 2.7013E-08 - 8.9125E+02 4.7037E-07 3.0513E-07 2.2540E-08 1.8796E-08 - 1.0000E+03 3.2746E-07 2.1027E-07 1.4777E-08 1.1985E-08 - 1.1220E+03 2.2687E-07 1.4391E-07 1.0047E-08 7.8660E-09 - 1.2589E+03 1.5670E-07 9.8378E-08 6.8955E-09 5.2904E-09 - 1.4125E+03 1.0798E-07 6.7351E-08 4.5727E-09 3.6695E-09 - 1.5849E+03 7.4213E-08 4.6049E-08 3.0401E-09 2.4971E-09 - 1.7783E+03 5.1030E-08 3.1294E-08 2.0627E-09 1.6266E-09 - 1.9953E+03 3.5384E-08 2.1690E-08 1.3824E-09 1.0553E-09 - 2.2387E+03 2.4250E-08 1.4697E-08 9.0048E-10 7.2738E-10 - 2.5119E+03 1.6671E-08 9.8881E-09 6.2770E-10 4.8913E-10 - 2.8184E+03 1.1397E-08 6.7497E-09 4.2791E-10 3.2565E-10 - 3.1623E+03 7.8542E-09 4.6869E-09 2.7154E-10 2.0515E-10 - 3.5481E+03 5.2578E-09 3.1059E-09 1.8329E-10 1.3370E-10 - 3.9811E+03 3.5687E-09 2.1096E-09 1.2025E-10 8.7299E-11 - 4.4668E+03 2.4179E-09 1.4327E-09 7.9991E-11 6.0855E-11 - 5.0119E+03 1.6365E-09 9.5066E-10 5.4690E-11 4.0858E-11 - 5.6234E+03 1.1132E-09 6.2863E-10 3.5430E-11 2.5422E-11 - 6.3096E+03 7.3839E-10 4.1956E-10 2.3460E-11 1.7125E-11 - 7.0795E+03 4.9430E-10 2.8143E-10 1.5042E-11 1.1316E-11 - 7.9433E+03 3.3009E-10 1.8836E-10 1.0071E-11 7.5638E-12 - 8.9125E+03 2.1942E-10 1.2234E-10 6.4858E-12 4.8060E-12 - 1.0000E+04 1.4614E-10 8.0351E-11 4.3363E-12 3.2460E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7992E+04 1.7758E+04 8.4362E+03 8.4354E+03 - 1.1220E-01 1.5317E+04 1.5062E+04 7.2253E+03 7.2269E+03 - 1.2589E-01 1.2930E+04 1.2689E+04 6.1393E+03 6.1011E+03 - 1.4125E-01 1.0933E+04 1.0586E+04 5.1713E+03 5.1032E+03 - 1.5849E-01 9.1049E+03 8.7844E+03 4.3164E+03 4.2212E+03 - 1.7783E-01 7.4532E+03 7.1982E+03 3.5710E+03 3.4503E+03 - 1.9953E-01 6.1230E+03 5.8276E+03 2.9146E+03 2.8321E+03 - 2.2387E-01 4.9430E+03 4.7055E+03 2.3704E+03 2.2865E+03 - 2.5119E-01 3.9085E+03 3.7313E+03 1.9261E+03 1.8527E+03 - 2.8184E-01 3.1024E+03 2.9201E+03 1.5481E+03 1.4922E+03 - 3.1623E-01 2.4535E+03 2.2926E+03 1.2224E+03 1.1621E+03 - 3.5481E-01 1.9130E+03 1.7927E+03 9.6579E+02 9.0495E+02 - 3.9811E-01 1.4849E+03 1.3802E+03 7.6363E+02 7.1305E+02 - 4.4668E-01 1.1509E+03 1.0613E+03 5.9443E+02 5.5695E+02 - 5.0119E-01 8.8952E+02 8.2265E+02 4.5770E+02 4.2861E+02 - 5.6234E-01 6.8257E+02 6.2935E+02 3.5099E+02 3.2913E+02 - 6.3096E-01 5.2354E+02 4.7674E+02 2.6927E+02 2.4975E+02 - 7.0795E-01 3.9967E+02 3.6483E+02 2.0566E+02 1.9110E+02 - 7.9433E-01 3.0156E+02 2.8037E+02 1.5550E+02 1.4668E+02 - 8.9125E-01 2.3032E+02 2.1128E+02 1.1799E+02 1.1050E+02 - 1.0000E+00 1.7372E+02 1.6002E+02 9.1609E+01 8.2008E+01 - 1.1220E+00 1.3119E+02 1.2047E+02 6.9133E+01 6.1402E+01 - 1.2589E+00 9.8623E+01 9.1135E+01 5.2172E+01 4.5978E+01 - 1.4125E+00 7.3518E+01 6.8614E+01 3.9440E+01 3.4192E+01 - 1.5849E+00 5.5363E+01 5.1299E+01 2.9686E+01 2.5271E+01 - 1.7783E+00 4.1650E+01 3.8225E+01 2.2209E+01 1.8742E+01 - 1.9953E+00 3.1079E+01 2.8196E+01 1.6358E+01 1.3666E+01 - 2.2387E+00 2.2889E+01 2.0917E+01 1.2121E+01 1.0001E+01 - 2.5119E+00 1.6898E+01 1.5493E+01 8.8799E+00 7.2349E+00 - 2.8184E+00 1.2484E+01 1.1554E+01 6.3287E+00 5.2430E+00 - 3.1623E+00 9.1448E+00 8.3272E+00 4.7140E+00 3.7670E+00 - 3.5481E+00 6.7044E+00 6.0761E+00 3.4141E+00 2.6908E+00 - 3.9811E+00 4.8786E+00 4.4275E+00 2.4217E+00 1.9229E+00 - 4.4668E+00 3.5141E+00 3.2037E+00 1.7294E+00 1.3329E+00 - 5.0119E+00 2.5445E+00 2.3102E+00 1.2421E+00 9.1800E-01 - 5.6234E+00 1.8333E+00 1.6538E+00 8.6935E-01 6.4922E-01 - 6.3096E+00 1.3190E+00 1.1822E+00 6.1090E-01 4.5421E-01 - 7.0795E+00 9.4470E-01 8.5060E-01 4.3094E-01 3.1690E-01 - 7.9433E+00 6.7998E-01 6.2422E-01 3.0494E-01 2.1877E-01 - 8.9125E+00 4.8946E-01 4.4009E-01 2.0713E-01 1.5154E-01 - 1.0000E+01 3.4503E-01 3.0585E-01 1.4019E-01 1.0435E-01 - 1.1220E+01 2.4854E-01 2.1826E-01 9.8952E-02 7.2244E-02 - 1.2589E+01 1.7813E-01 1.5508E-01 6.7526E-02 4.9343E-02 - 1.4125E+01 1.2786E-01 1.0976E-01 4.5363E-02 3.3887E-02 - 1.5849E+01 9.1499E-02 7.8081E-02 3.1306E-02 2.2573E-02 - 1.7783E+01 6.5039E-02 5.5588E-02 2.0849E-02 1.4970E-02 - 1.9953E+01 4.6493E-02 3.9387E-02 1.4136E-02 1.0462E-02 - 2.2387E+01 3.3440E-02 2.7805E-02 9.3336E-03 7.0835E-03 - 2.5119E+01 2.3757E-02 1.9365E-02 6.3777E-03 4.6610E-03 - 2.8184E+01 1.7215E-02 1.3605E-02 4.4075E-03 3.2760E-03 - 3.1623E+01 1.2082E-02 9.8061E-03 2.8906E-03 2.1958E-03 - 3.5481E+01 8.6321E-03 6.9472E-03 1.9337E-03 1.4775E-03 - 3.9811E+01 6.1629E-03 4.9102E-03 1.2959E-03 9.9269E-04 - 4.4668E+01 4.3877E-03 3.4638E-03 8.6504E-04 6.6667E-04 - 5.0119E+01 3.1122E-03 2.4533E-03 5.7561E-04 4.4322E-04 - 5.6234E+01 2.2206E-03 1.7363E-03 3.8517E-04 2.9480E-04 - 6.3096E+01 1.5773E-03 1.2278E-03 2.5581E-04 1.9827E-04 - 7.0795E+01 1.1203E-03 8.6214E-04 1.6949E-04 1.3482E-04 - 7.9433E+01 8.0036E-04 6.0270E-04 1.1269E-04 8.8982E-05 - 8.9125E+01 5.6733E-04 4.2604E-04 7.4276E-05 5.8029E-05 - 1.0000E+02 3.9961E-04 3.0040E-04 4.9450E-05 3.8674E-05 - 1.1220E+02 2.8311E-04 2.1094E-04 3.2889E-05 2.5770E-05 - 1.2589E+02 2.0029E-04 1.4775E-04 2.1717E-05 1.7124E-05 - 1.4125E+02 1.4102E-04 1.0377E-04 1.4405E-05 1.1441E-05 - 1.5849E+02 9.9726E-05 7.2562E-05 9.5313E-06 7.5487E-06 - 1.7783E+02 7.0242E-05 5.0699E-05 6.3352E-06 5.0989E-06 - 1.9953E+02 4.9145E-05 3.5363E-05 4.2439E-06 3.4028E-06 - 2.2387E+02 3.4728E-05 2.4589E-05 2.8390E-06 2.2284E-06 - 2.5119E+02 2.4382E-05 1.7252E-05 1.8644E-06 1.4870E-06 - 2.8184E+02 1.6946E-05 1.1982E-05 1.2204E-06 9.7154E-07 - 3.1623E+02 1.1965E-05 8.2852E-06 8.2881E-07 6.5922E-07 - 3.5481E+02 8.3797E-06 5.7461E-06 5.5158E-07 4.3762E-07 - 3.9811E+02 5.8608E-06 3.9941E-06 3.6924E-07 2.9101E-07 - 4.4668E+02 4.1008E-06 2.7648E-06 2.4806E-07 1.9591E-07 - 5.0119E+02 2.8694E-06 1.9128E-06 1.6439E-07 1.3252E-07 - 5.6234E+02 2.0116E-06 1.3358E-06 1.1050E-07 8.8591E-08 - 6.3096E+02 1.3944E-06 9.2273E-07 7.4164E-08 6.0265E-08 - 7.0795E+02 9.7027E-07 6.3526E-07 4.9412E-08 4.0658E-08 - 7.9433E+02 6.7830E-07 4.3883E-07 3.3967E-08 2.6878E-08 - 8.9125E+02 4.7312E-07 3.0346E-07 2.2452E-08 1.7664E-08 - 1.0000E+03 3.2979E-07 2.0914E-07 1.5224E-08 1.1810E-08 - 1.1220E+03 2.2763E-07 1.4355E-07 1.0358E-08 7.8064E-09 - 1.2589E+03 1.5779E-07 9.8627E-08 6.9418E-09 5.4353E-09 - 1.4125E+03 1.0839E-07 6.7892E-08 4.6817E-09 3.7364E-09 - 1.5849E+03 7.4537E-08 4.6338E-08 3.1673E-09 2.3637E-09 - 1.7783E+03 5.1458E-08 3.1436E-08 2.1189E-09 1.5077E-09 - 1.9953E+03 3.5315E-08 2.1599E-08 1.3953E-09 9.8152E-10 - 2.2387E+03 2.4191E-08 1.4653E-08 9.2192E-10 6.6072E-10 - 2.5119E+03 1.6660E-08 9.9632E-09 6.2176E-10 4.8462E-10 - 2.8184E+03 1.1306E-08 6.7683E-09 4.0730E-10 3.1917E-10 - 3.1623E+03 7.8744E-09 4.6329E-09 2.7806E-10 2.0132E-10 - 3.5481E+03 5.2403E-09 3.0888E-09 1.8716E-10 1.3348E-10 - 3.9811E+03 3.5352E-09 2.0693E-09 1.1958E-10 9.0336E-11 - 4.4668E+03 2.4044E-09 1.3872E-09 8.0597E-11 6.1938E-11 - 5.0119E+03 1.6365E-09 9.3223E-10 5.6921E-11 3.7673E-11 - 5.6234E+03 1.1047E-09 6.3232E-10 3.8605E-11 2.4790E-11 - 6.3096E+03 7.3617E-10 4.1626E-10 2.3383E-11 1.6920E-11 - 7.0795E+03 4.9351E-10 2.7726E-10 1.5613E-11 1.1007E-11 - 7.9433E+03 3.3214E-10 1.8457E-10 1.0796E-11 7.2897E-12 - 8.9125E+03 2.2103E-10 1.2324E-10 6.9385E-12 4.7276E-12 - 1.0000E+04 1.4660E-10 8.1358E-11 4.5899E-12 3.0224E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7966E+04 1.7699E+04 8.4434E+03 8.3751E+03 - 1.1220E-01 1.5269E+04 1.4929E+04 7.2606E+03 7.1637E+03 - 1.2589E-01 1.2921E+04 1.2577E+04 6.1376E+03 6.0334E+03 - 1.4125E-01 1.0870E+04 1.0562E+04 5.1572E+03 5.0743E+03 - 1.5849E-01 9.0363E+03 8.7076E+03 4.3117E+03 4.2135E+03 - 1.7783E-01 7.4240E+03 7.1459E+03 3.5756E+03 3.4603E+03 - 1.9953E-01 6.0927E+03 5.8296E+03 2.9497E+03 2.8247E+03 - 2.2387E-01 4.9351E+03 4.6788E+03 2.4163E+03 2.2895E+03 - 2.5119E-01 3.9132E+03 3.7366E+03 1.9577E+03 1.8448E+03 - 2.8184E-01 3.1036E+03 2.9644E+03 1.5668E+03 1.4667E+03 - 3.1623E-01 2.4488E+03 2.3237E+03 1.2370E+03 1.1628E+03 - 3.5481E-01 1.9115E+03 1.8158E+03 9.7331E+02 9.1004E+02 - 3.9811E-01 1.4948E+03 1.4102E+03 7.7417E+02 7.0921E+02 - 4.4668E-01 1.1622E+03 1.0795E+03 6.0166E+02 5.5055E+02 - 5.0119E-01 8.9535E+02 8.2869E+02 4.6463E+02 4.2606E+02 - 5.6234E-01 6.8635E+02 6.3788E+02 3.6004E+02 3.2605E+02 - 6.3096E-01 5.2356E+02 4.8823E+02 2.7487E+02 2.4591E+02 - 7.0795E-01 4.0103E+02 3.6949E+02 2.1128E+02 1.9087E+02 - 7.9433E-01 3.0641E+02 2.8016E+02 1.6300E+02 1.4614E+02 - 8.9125E-01 2.3029E+02 2.1640E+02 1.2290E+02 1.0906E+02 - 1.0000E+00 1.7563E+02 1.6109E+02 9.2739E+01 8.2366E+01 - 1.1220E+00 1.3244E+02 1.2140E+02 7.0121E+01 6.1402E+01 - 1.2589E+00 9.9821E+01 9.1246E+01 5.2842E+01 4.5840E+01 - 1.4125E+00 7.5410E+01 6.9209E+01 3.9570E+01 3.4310E+01 - 1.5849E+00 5.6208E+01 5.2114E+01 2.9406E+01 2.5756E+01 - 1.7783E+00 4.1902E+01 3.8998E+01 2.2298E+01 1.8807E+01 - 1.9953E+00 3.1354E+01 2.8950E+01 1.6781E+01 1.3507E+01 - 2.2387E+00 2.3288E+01 2.1223E+01 1.2182E+01 9.8429E+00 - 2.5119E+00 1.6977E+01 1.5486E+01 8.9020E+00 7.1864E+00 - 2.8184E+00 1.2241E+01 1.1323E+01 6.5402E+00 5.1290E+00 - 3.1623E+00 9.1504E+00 8.4351E+00 4.7050E+00 3.7121E+00 - 3.5481E+00 6.6766E+00 6.1399E+00 3.3913E+00 2.6729E+00 - 3.9811E+00 4.8690E+00 4.4384E+00 2.4443E+00 1.9004E+00 - 4.4668E+00 3.5296E+00 3.1851E+00 1.7358E+00 1.3259E+00 - 5.0119E+00 2.5297E+00 2.2876E+00 1.2209E+00 9.3243E-01 - 5.6234E+00 1.8293E+00 1.6495E+00 8.6597E-01 6.6204E-01 - 6.3096E+00 1.3114E+00 1.1822E+00 6.0940E-01 4.5421E-01 - 7.0795E+00 9.4816E-01 8.5161E-01 4.2462E-01 3.1592E-01 - 7.9433E+00 6.9545E-01 6.1555E-01 2.9393E-01 2.2552E-01 - 8.9125E+00 4.9341E-01 4.3942E-01 2.0631E-01 1.5205E-01 - 1.0000E+01 3.4607E-01 3.0725E-01 1.4158E-01 1.0361E-01 - 1.1220E+01 2.4697E-01 2.1641E-01 9.7344E-02 7.2796E-02 - 1.2589E+01 1.7777E-01 1.5356E-01 6.6033E-02 4.9865E-02 - 1.4125E+01 1.2757E-01 1.0927E-01 4.5360E-02 3.3523E-02 - 1.5849E+01 9.1233E-02 7.7839E-02 3.0657E-02 2.2707E-02 - 1.7783E+01 6.5749E-02 5.5286E-02 2.0726E-02 1.5391E-02 - 1.9953E+01 4.6717E-02 3.9377E-02 1.4120E-02 1.0743E-02 - 2.2387E+01 3.2602E-02 2.8355E-02 9.6789E-03 7.2260E-03 - 2.5119E+01 2.3215E-02 1.9865E-02 6.3789E-03 4.8326E-03 - 2.8184E+01 1.7166E-02 1.4018E-02 4.4657E-03 3.2811E-03 - 3.1623E+01 1.2109E-02 9.8178E-03 2.8954E-03 2.2005E-03 - 3.5481E+01 8.6422E-03 6.9629E-03 1.9345E-03 1.4846E-03 - 3.9811E+01 6.1367E-03 4.9110E-03 1.2914E-03 1.0044E-03 - 4.4668E+01 4.3660E-03 3.4727E-03 8.5799E-04 6.7236E-04 - 5.0119E+01 3.1253E-03 2.4542E-03 5.7148E-04 4.5059E-04 - 5.6234E+01 2.2337E-03 1.7317E-03 3.8127E-04 3.0074E-04 - 6.3096E+01 1.5845E-03 1.2266E-03 2.5170E-04 2.0002E-04 - 7.0795E+01 1.1265E-03 8.6805E-04 1.6855E-04 1.3271E-04 - 7.9433E+01 7.9878E-04 6.1100E-04 1.1272E-04 8.9228E-05 - 8.9125E+01 5.6436E-04 4.2879E-04 7.4944E-05 5.9434E-05 - 1.0000E+02 4.0028E-04 3.0037E-04 4.9211E-05 3.8704E-05 - 1.1220E+02 2.8391E-04 2.1117E-04 3.2580E-05 2.5981E-05 - 1.2589E+02 2.0061E-04 1.4815E-04 2.1539E-05 1.7202E-05 - 1.4125E+02 1.4129E-04 1.0366E-04 1.4388E-05 1.1409E-05 - 1.5849E+02 9.9655E-05 7.2517E-05 9.5803E-06 7.6453E-06 - 1.7783E+02 6.9937E-05 5.0543E-05 6.3729E-06 5.0852E-06 - 1.9953E+02 4.9235E-05 3.5391E-05 4.2356E-06 3.3473E-06 - 2.2387E+02 3.4712E-05 2.4660E-05 2.8130E-06 2.1683E-06 - 2.5119E+02 2.4246E-05 1.7088E-05 1.8499E-06 1.4336E-06 - 2.8184E+02 1.6918E-05 1.1985E-05 1.2159E-06 9.7343E-07 - 3.1623E+02 1.1910E-05 8.2973E-06 8.2173E-07 6.6609E-07 - 3.5481E+02 8.3615E-06 5.7478E-06 5.5328E-07 4.4398E-07 - 3.9811E+02 5.8633E-06 3.9865E-06 3.7014E-07 2.9992E-07 - 4.4668E+02 4.0835E-06 2.7770E-06 2.4844E-07 2.0375E-07 - 5.0119E+02 2.8723E-06 1.9308E-06 1.6634E-07 1.3258E-07 - 5.6234E+02 2.0034E-06 1.3350E-06 1.0892E-07 8.9355E-08 - 6.3096E+02 1.3888E-06 9.2156E-07 7.3497E-08 5.9047E-08 - 7.0795E+02 9.7008E-07 6.3547E-07 4.9820E-08 3.9860E-08 - 7.9433E+02 6.7443E-07 4.4027E-07 3.3746E-08 2.7091E-08 - 8.9125E+02 4.6975E-07 3.0339E-07 2.2034E-08 1.8005E-08 - 1.0000E+03 3.2691E-07 2.0829E-07 1.5302E-08 1.2192E-08 - 1.1220E+03 2.2630E-07 1.4243E-07 1.0345E-08 8.0286E-09 - 1.2589E+03 1.5609E-07 9.7780E-08 6.9629E-09 5.1094E-09 - 1.4125E+03 1.0762E-07 6.7177E-08 4.6641E-09 3.5151E-09 - 1.5849E+03 7.4681E-08 4.6306E-08 3.0873E-09 2.4746E-09 - 1.7783E+03 5.1649E-08 3.1601E-08 2.0551E-09 1.6130E-09 - 1.9953E+03 3.5212E-08 2.1703E-08 1.3706E-09 1.0747E-09 - 2.2387E+03 2.4252E-08 1.4733E-08 9.0088E-10 6.5966E-10 - 2.5119E+03 1.6650E-08 9.9478E-09 6.2009E-10 4.3426E-10 - 2.8184E+03 1.1306E-08 6.6755E-09 4.2643E-10 3.1292E-10 - 3.1623E+03 7.8041E-09 4.6151E-09 2.8356E-10 2.0062E-10 - 3.5481E+03 5.2439E-09 3.0703E-09 1.8392E-10 1.3515E-10 - 3.9811E+03 3.5462E-09 2.0727E-09 1.1983E-10 9.1543E-11 - 4.4668E+03 2.3870E-09 1.3878E-09 7.9650E-11 6.1299E-11 - 5.0119E+03 1.6214E-09 9.2496E-10 5.1746E-11 3.8070E-11 - 5.6234E+03 1.0878E-09 6.2624E-10 3.5174E-11 2.4416E-11 - 6.3096E+03 7.2868E-10 4.1601E-10 2.3360E-11 1.7797E-11 - 7.0795E+03 4.9149E-10 2.7495E-10 1.5297E-11 1.1589E-11 - 7.9433E+03 3.3005E-10 1.8390E-10 1.0169E-11 7.2698E-12 - 8.9125E+03 2.1917E-10 1.2163E-10 6.8448E-12 4.7260E-12 - 1.0000E+04 1.4646E-10 8.0675E-11 4.4590E-12 3.0483E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8007E+04 1.8114E+04 8.6304E+03 8.3610E+03 - 1.1220E-01 1.5438E+04 1.5316E+04 7.4447E+03 7.1724E+03 - 1.2589E-01 1.3068E+04 1.2925E+04 6.3785E+03 6.0344E+03 - 1.4125E-01 1.0985E+04 1.0849E+04 5.3598E+03 5.0434E+03 - 1.5849E-01 9.1675E+03 9.0235E+03 4.4555E+03 4.2032E+03 - 1.7783E-01 7.5677E+03 7.4366E+03 3.7104E+03 3.4814E+03 - 1.9953E-01 6.1951E+03 6.0237E+03 3.0751E+03 2.8418E+03 - 2.2387E-01 4.9821E+03 4.8440E+03 2.5208E+03 2.2912E+03 - 2.5119E-01 3.9710E+03 3.8675E+03 2.0452E+03 1.8524E+03 - 2.8184E-01 3.1498E+03 3.0585E+03 1.6440E+03 1.4772E+03 - 3.1623E-01 2.4791E+03 2.4033E+03 1.3045E+03 1.1723E+03 - 3.5481E-01 1.9374E+03 1.8838E+03 1.0291E+03 9.1222E+02 - 3.9811E-01 1.5142E+03 1.4629E+03 8.0737E+02 7.0566E+02 - 4.4668E-01 1.1743E+03 1.1189E+03 6.2789E+02 5.5290E+02 - 5.0119E-01 8.9778E+02 8.5905E+02 4.9097E+02 4.2523E+02 - 5.6234E-01 6.8885E+02 6.5951E+02 3.8129E+02 3.2887E+02 - 6.3096E-01 5.2616E+02 5.0755E+02 2.9152E+02 2.5238E+02 - 7.0795E-01 3.9813E+02 3.8622E+02 2.2244E+02 1.8963E+02 - 7.9433E-01 3.0612E+02 2.9098E+02 1.6762E+02 1.4197E+02 - 8.9125E-01 2.3280E+02 2.2056E+02 1.2801E+02 1.0922E+02 - 1.0000E+00 1.7542E+02 1.6613E+02 9.7769E+01 8.2308E+01 - 1.1220E+00 1.3368E+02 1.2513E+02 7.3909E+01 6.1152E+01 - 1.2589E+00 1.0089E+02 9.3974E+01 5.5548E+01 4.5901E+01 - 1.4125E+00 7.5186E+01 7.0703E+01 4.1516E+01 3.3740E+01 - 1.5849E+00 5.6012E+01 5.3369E+01 3.1098E+01 2.4826E+01 - 1.7783E+00 4.1523E+01 3.9518E+01 2.3118E+01 1.8440E+01 - 1.9953E+00 3.0801E+01 2.8934E+01 1.7024E+01 1.3451E+01 - 2.2387E+00 2.3067E+01 2.1592E+01 1.2370E+01 9.8020E+00 - 2.5119E+00 1.7217E+01 1.5795E+01 8.9505E+00 7.1670E+00 - 2.8184E+00 1.2499E+01 1.1484E+01 6.6872E+00 5.2908E+00 - 3.1623E+00 9.0908E+00 8.4348E+00 4.8215E+00 3.7692E+00 - 3.5481E+00 6.6948E+00 6.1474E+00 3.4178E+00 2.6658E+00 - 3.9811E+00 4.8641E+00 4.4586E+00 2.4647E+00 1.8902E+00 - 4.4668E+00 3.5065E+00 3.2196E+00 1.7555E+00 1.3167E+00 - 5.0119E+00 2.5538E+00 2.3142E+00 1.2352E+00 9.1978E-01 - 5.6234E+00 1.8525E+00 1.6526E+00 8.6840E-01 6.5482E-01 - 6.3096E+00 1.3250E+00 1.1962E+00 6.1640E-01 4.5853E-01 - 7.0795E+00 9.5268E-01 8.7074E-01 4.2592E-01 3.1753E-01 - 7.9433E+00 6.8296E-01 6.2017E-01 2.9111E-01 2.1859E-01 - 8.9125E+00 4.8570E-01 4.3695E-01 2.0912E-01 1.5415E-01 - 1.0000E+01 3.5184E-01 3.0995E-01 1.4265E-01 1.0496E-01 - 1.1220E+01 2.5152E-01 2.1979E-01 9.7866E-02 7.1078E-02 - 1.2589E+01 1.7832E-01 1.5558E-01 6.6818E-02 4.8947E-02 - 1.4125E+01 1.2788E-01 1.1025E-01 4.5389E-02 3.3817E-02 - 1.5849E+01 9.1896E-02 7.7516E-02 3.1549E-02 2.3847E-02 - 1.7783E+01 6.5294E-02 5.4958E-02 2.1501E-02 1.6346E-02 - 1.9953E+01 4.6544E-02 3.9006E-02 1.3948E-02 1.0788E-02 - 2.2387E+01 3.3211E-02 2.7628E-02 9.4467E-03 7.0450E-03 - 2.5119E+01 2.3553E-02 1.9999E-02 6.4663E-03 4.8143E-03 - 2.8184E+01 1.7145E-02 1.4515E-02 4.2221E-03 3.3027E-03 - 3.1623E+01 1.2135E-02 9.8418E-03 2.8814E-03 2.2082E-03 - 3.5481E+01 8.6580E-03 6.9654E-03 1.9255E-03 1.4825E-03 - 3.9811E+01 6.1664E-03 4.9244E-03 1.2825E-03 9.9767E-04 - 4.4668E+01 4.3897E-03 3.4722E-03 8.5705E-04 6.6971E-04 - 5.0119E+01 3.1285E-03 2.4563E-03 5.7728E-04 4.4678E-04 - 5.6234E+01 2.2104E-03 1.7356E-03 3.8532E-04 2.9694E-04 - 6.3096E+01 1.5710E-03 1.2273E-03 2.5708E-04 1.9947E-04 - 7.0795E+01 1.1182E-03 8.7046E-04 1.6930E-04 1.3555E-04 - 7.9433E+01 7.9744E-04 6.1016E-04 1.1197E-04 9.0230E-05 - 8.9125E+01 5.6764E-04 4.2926E-04 7.4583E-05 6.0125E-05 - 1.0000E+02 4.0068E-04 3.0053E-04 4.8892E-05 3.8940E-05 - 1.1220E+02 2.8285E-04 2.1113E-04 3.2757E-05 2.5929E-05 - 1.2589E+02 1.9969E-04 1.4807E-04 2.1615E-05 1.7134E-05 - 1.4125E+02 1.4078E-04 1.0373E-04 1.4382E-05 1.1482E-05 - 1.5849E+02 9.9399E-05 7.2760E-05 9.5382E-06 7.6496E-06 - 1.7783E+02 7.0138E-05 5.0687E-05 6.2554E-06 5.0343E-06 - 1.9953E+02 4.9066E-05 3.5164E-05 4.1510E-06 3.2920E-06 - 2.2387E+02 3.4606E-05 2.4485E-05 2.7606E-06 2.2027E-06 - 2.5119E+02 2.4385E-05 1.7084E-05 1.8286E-06 1.5414E-06 - 2.8184E+02 1.6994E-05 1.1892E-05 1.2255E-06 1.0123E-06 - 3.1623E+02 1.1906E-05 8.3030E-06 8.2517E-07 6.6204E-07 - 3.5481E+02 8.3304E-06 5.7698E-06 5.5558E-07 4.4805E-07 - 3.9811E+02 5.8275E-06 3.9918E-06 3.6475E-07 3.0000E-07 - 4.4668E+02 4.0703E-06 2.7604E-06 2.4274E-07 1.9938E-07 - 5.0119E+02 2.8540E-06 1.9249E-06 1.6525E-07 1.3551E-07 - 5.6234E+02 2.0023E-06 1.3350E-06 1.1138E-07 8.7647E-08 - 6.3096E+02 1.3951E-06 9.2351E-07 7.5285E-08 5.9838E-08 - 7.0795E+02 9.6691E-07 6.3523E-07 5.0533E-08 4.1193E-08 - 7.9433E+02 6.7285E-07 4.3446E-07 3.3539E-08 2.7699E-08 - 8.9125E+02 4.6930E-07 2.9921E-07 2.2489E-08 1.8456E-08 - 1.0000E+03 3.2596E-07 2.0740E-07 1.4729E-08 1.2104E-08 - 1.1220E+03 2.2536E-07 1.4262E-07 9.9491E-09 7.9652E-09 - 1.2589E+03 1.5587E-07 9.7565E-08 6.7296E-09 5.2858E-09 - 1.4125E+03 1.0756E-07 6.6924E-08 4.4296E-09 3.6714E-09 - 1.5849E+03 7.4084E-08 4.6102E-08 2.8938E-09 2.4152E-09 - 1.7783E+03 5.0783E-08 3.1608E-08 2.0253E-09 1.4947E-09 - 1.9953E+03 3.5262E-08 2.1544E-08 1.3605E-09 1.0216E-09 - 2.2387E+03 2.4305E-08 1.4695E-08 8.9351E-10 6.8731E-10 - 2.5119E+03 1.6595E-08 9.9033E-09 5.8711E-10 4.4696E-10 - 2.8184E+03 1.1294E-08 6.7695E-09 3.8962E-10 2.8837E-10 - 3.1623E+03 7.8177E-09 4.6328E-09 2.6985E-10 2.0576E-10 - 3.5481E+03 5.2444E-09 3.0758E-09 1.8527E-10 1.3050E-10 - 3.9811E+03 3.5499E-09 2.0596E-09 1.2262E-10 8.7655E-11 - 4.4668E+03 2.3915E-09 1.3792E-09 7.8439E-11 5.9647E-11 - 5.0119E+03 1.6235E-09 9.1984E-10 5.2587E-11 3.8672E-11 - 5.6234E+03 1.0838E-09 6.1791E-10 3.5204E-11 2.5197E-11 - 6.3096E+03 7.2604E-10 4.1449E-10 2.2850E-11 1.5891E-11 - 7.0795E+03 4.8824E-10 2.7358E-10 1.5127E-11 1.0767E-11 - 7.9433E+03 3.2900E-10 1.8330E-10 9.9776E-12 7.1501E-12 - 8.9125E+03 2.1753E-10 1.2275E-10 6.6076E-12 4.8628E-12 - 1.0000E+04 1.4423E-10 8.2001E-11 4.2578E-12 3.1363E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7965E+04 1.8019E+04 8.5998E+03 8.2489E+03 - 1.1220E-01 1.5317E+04 1.5308E+04 7.4502E+03 7.1097E+03 - 1.2589E-01 1.2941E+04 1.2983E+04 6.3696E+03 6.0268E+03 - 1.4125E-01 1.0879E+04 1.0937E+04 5.3870E+03 5.0611E+03 - 1.5849E-01 9.1406E+03 9.1244E+03 4.5274E+03 4.1948E+03 - 1.7783E-01 7.5780E+03 7.5179E+03 3.7935E+03 3.4466E+03 - 1.9953E-01 6.2013E+03 6.1137E+03 3.1426E+03 2.8160E+03 - 2.2387E-01 5.0108E+03 4.9352E+03 2.5689E+03 2.3094E+03 - 2.5119E-01 3.9898E+03 3.9518E+03 2.1021E+03 1.8661E+03 - 2.8184E-01 3.1676E+03 3.1282E+03 1.6883E+03 1.4792E+03 - 3.1623E-01 2.4895E+03 2.4629E+03 1.3319E+03 1.1694E+03 - 3.5481E-01 1.9489E+03 1.9241E+03 1.0553E+03 9.1696E+02 - 3.9811E-01 1.5243E+03 1.4944E+03 8.3890E+02 7.1162E+02 - 4.4668E-01 1.1743E+03 1.1512E+03 6.5400E+02 5.4214E+02 - 5.0119E-01 9.0406E+02 8.8396E+02 5.0422E+02 4.2016E+02 - 5.6234E-01 6.9166E+02 6.7685E+02 3.9035E+02 3.2806E+02 - 6.3096E-01 5.2280E+02 5.1174E+02 2.9899E+02 2.5150E+02 - 7.0795E-01 3.9563E+02 3.9048E+02 2.2609E+02 1.8900E+02 - 7.9433E-01 3.0222E+02 2.9838E+02 1.7334E+02 1.4213E+02 - 8.9125E-01 2.3187E+02 2.2472E+02 1.3337E+02 1.0931E+02 - 1.0000E+00 1.7562E+02 1.6918E+02 9.9237E+01 8.0580E+01 - 1.1220E+00 1.3248E+02 1.2759E+02 7.5333E+01 6.0489E+01 - 1.2589E+00 1.0013E+02 9.6340E+01 5.6445E+01 4.5314E+01 - 1.4125E+00 7.5356E+01 7.2474E+01 4.1880E+01 3.3589E+01 - 1.5849E+00 5.6668E+01 5.3488E+01 3.1477E+01 2.5155E+01 - 1.7783E+00 4.2258E+01 3.9798E+01 2.3459E+01 1.8608E+01 - 1.9953E+00 3.1314E+01 2.9590E+01 1.7314E+01 1.3659E+01 - 2.2387E+00 2.3324E+01 2.1885E+01 1.2652E+01 9.9106E+00 - 2.5119E+00 1.7211E+01 1.5906E+01 9.1746E+00 7.0503E+00 - 2.8184E+00 1.2597E+01 1.1622E+01 6.6086E+00 5.0793E+00 - 3.1623E+00 9.1984E+00 8.4664E+00 4.7914E+00 3.7563E+00 - 3.5481E+00 6.6757E+00 6.1080E+00 3.3960E+00 2.6438E+00 - 3.9811E+00 4.8406E+00 4.4842E+00 2.4268E+00 1.8708E+00 - 4.4668E+00 3.5130E+00 3.2086E+00 1.7515E+00 1.3377E+00 - 5.0119E+00 2.5512E+00 2.3082E+00 1.2455E+00 9.4162E-01 - 5.6234E+00 1.8413E+00 1.6855E+00 8.7240E-01 6.5021E-01 - 6.3096E+00 1.3052E+00 1.2125E+00 6.1983E-01 4.5568E-01 - 7.0795E+00 9.3669E-01 8.6011E-01 4.3428E-01 3.1576E-01 - 7.9433E+00 6.8167E-01 6.0216E-01 2.9537E-01 2.1740E-01 - 8.9125E+00 4.8818E-01 4.3072E-01 2.0090E-01 1.5293E-01 - 1.0000E+01 3.5056E-01 3.0893E-01 1.3963E-01 1.0614E-01 - 1.1220E+01 2.5200E-01 2.1968E-01 9.6725E-02 7.1856E-02 - 1.2589E+01 1.8129E-01 1.5585E-01 6.6709E-02 4.9601E-02 - 1.4125E+01 1.2840E-01 1.0985E-01 4.5001E-02 3.4701E-02 - 1.5849E+01 9.1465E-02 7.6661E-02 3.0626E-02 2.3080E-02 - 1.7783E+01 6.5363E-02 5.3885E-02 2.0454E-02 1.5148E-02 - 1.9953E+01 4.6199E-02 3.8895E-02 1.3664E-02 1.0315E-02 - 2.2387E+01 3.2814E-02 2.7602E-02 9.4713E-03 6.8447E-03 - 2.5119E+01 2.3372E-02 1.9288E-02 6.3939E-03 4.8062E-03 - 2.8184E+01 1.6627E-02 1.3993E-02 4.3226E-03 3.2979E-03 - 3.1623E+01 1.2118E-02 9.8144E-03 2.8887E-03 2.2005E-03 - 3.5481E+01 8.6632E-03 6.9512E-03 1.9329E-03 1.4847E-03 - 3.9811E+01 6.1649E-03 4.9232E-03 1.2836E-03 9.9910E-04 - 4.4668E+01 4.3788E-03 3.4870E-03 8.5544E-04 6.6960E-04 - 5.0119E+01 3.1258E-03 2.4579E-03 5.7189E-04 4.4588E-04 - 5.6234E+01 2.2178E-03 1.7274E-03 3.8480E-04 2.9608E-04 - 6.3096E+01 1.5745E-03 1.2167E-03 2.5552E-04 1.9799E-04 - 7.0795E+01 1.1225E-03 8.6009E-04 1.6949E-04 1.3189E-04 - 7.9433E+01 7.9609E-04 6.0849E-04 1.1203E-04 8.7194E-05 - 8.9125E+01 5.6689E-04 4.2817E-04 7.4012E-05 5.8154E-05 - 1.0000E+02 3.9841E-04 2.9962E-04 4.9466E-05 3.8468E-05 - 1.1220E+02 2.8164E-04 2.1032E-04 3.2885E-05 2.5676E-05 - 1.2589E+02 1.9913E-04 1.4782E-04 2.1750E-05 1.7295E-05 - 1.4125E+02 1.4042E-04 1.0332E-04 1.4294E-05 1.1461E-05 - 1.5849E+02 9.9220E-05 7.2228E-05 9.4494E-06 7.6548E-06 - 1.7783E+02 6.9977E-05 5.0482E-05 6.2928E-06 5.0982E-06 - 1.9953E+02 4.9225E-05 3.5122E-05 4.1741E-06 3.3625E-06 - 2.2387E+02 3.4528E-05 2.4609E-05 2.7976E-06 2.2084E-06 - 2.5119E+02 2.4062E-05 1.7186E-05 1.8608E-06 1.5106E-06 - 2.8184E+02 1.6860E-05 1.1926E-05 1.2338E-06 1.0158E-06 - 3.1623E+02 1.1926E-05 8.2794E-06 8.2216E-07 6.6926E-07 - 3.5481E+02 8.3597E-06 5.7443E-06 5.5058E-07 4.4533E-07 - 3.9811E+02 5.8320E-06 3.9895E-06 3.6400E-07 2.9752E-07 - 4.4668E+02 4.0750E-06 2.7679E-06 2.4531E-07 2.0228E-07 - 5.0119E+02 2.8562E-06 1.9142E-06 1.6402E-07 1.3476E-07 - 5.6234E+02 1.9897E-06 1.3282E-06 1.1058E-07 8.8821E-08 - 6.3096E+02 1.3807E-06 9.1448E-07 7.6128E-08 5.9131E-08 - 7.0795E+02 9.6238E-07 6.3117E-07 5.0314E-08 3.9262E-08 - 7.9433E+02 6.7201E-07 4.3842E-07 3.2793E-08 2.6271E-08 - 8.9125E+02 4.6918E-07 2.9952E-07 2.2259E-08 1.7953E-08 - 1.0000E+03 3.2694E-07 2.0751E-07 1.4951E-08 1.2021E-08 - 1.1220E+03 2.2687E-07 1.4279E-07 1.0045E-08 7.8946E-09 - 1.2589E+03 1.5669E-07 9.7649E-08 6.8707E-09 5.3046E-09 - 1.4125E+03 1.0755E-07 6.6527E-08 4.5666E-09 3.5276E-09 - 1.5849E+03 7.4019E-08 4.5708E-08 3.0292E-09 2.2602E-09 - 1.7783E+03 5.1190E-08 3.1643E-08 2.0092E-09 1.5037E-09 - 1.9953E+03 3.5283E-08 2.1335E-08 1.3601E-09 1.0341E-09 - 2.2387E+03 2.4056E-08 1.4594E-08 9.0416E-10 6.9125E-10 - 2.5119E+03 1.6466E-08 9.9757E-09 5.9418E-10 4.7232E-10 - 2.8184E+03 1.1229E-08 6.7412E-09 4.1569E-10 3.0223E-10 - 3.1623E+03 7.7938E-09 4.6018E-09 2.6934E-10 2.0124E-10 - 3.5481E+03 5.2006E-09 3.0587E-09 1.7495E-10 1.3079E-10 - 3.9811E+03 3.5198E-09 2.0649E-09 1.1448E-10 8.5696E-11 - 4.4668E+03 2.3718E-09 1.3825E-09 7.6249E-11 5.9183E-11 - 5.0119E+03 1.5869E-09 9.2925E-10 5.5482E-11 3.8940E-11 - 5.6234E+03 1.0755E-09 6.1748E-10 3.6953E-11 2.6760E-11 - 6.3096E+03 7.2353E-10 4.1507E-10 2.3149E-11 1.6237E-11 - 7.0795E+03 4.8616E-10 2.7717E-10 1.5104E-11 1.0770E-11 - 7.9433E+03 3.2703E-10 1.8087E-10 1.0063E-11 7.1130E-12 - 8.9125E+03 2.1795E-10 1.2002E-10 6.9362E-12 4.6584E-12 - 1.0000E+04 1.4649E-10 8.0519E-11 4.4735E-12 3.1928E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6885E+04 1.7103E+04 8.1230E+03 7.8440E+03 - 1.1220E-01 1.4504E+04 1.4663E+04 7.0457E+03 6.7848E+03 - 1.2589E-01 1.2344E+04 1.2499E+04 6.0647E+03 5.7208E+03 - 1.4125E-01 1.0451E+04 1.0519E+04 5.1411E+03 4.8073E+03 - 1.5849E-01 8.7534E+03 8.7731E+03 4.3498E+03 4.0171E+03 - 1.7783E-01 7.2449E+03 7.3101E+03 3.6658E+03 3.3193E+03 - 1.9953E-01 5.9492E+03 5.9874E+03 3.0459E+03 2.7369E+03 - 2.2387E-01 4.8281E+03 4.8130E+03 2.5168E+03 2.2191E+03 - 2.5119E-01 3.8901E+03 3.8611E+03 2.0588E+03 1.7823E+03 - 2.8184E-01 3.1014E+03 3.0956E+03 1.6633E+03 1.4272E+03 - 3.1623E-01 2.4657E+03 2.4507E+03 1.3306E+03 1.1341E+03 - 3.5481E-01 1.9476E+03 1.9042E+03 1.0563E+03 8.8499E+02 - 3.9811E-01 1.5117E+03 1.4871E+03 8.3025E+02 6.8128E+02 - 4.4668E-01 1.1707E+03 1.1560E+03 6.5514E+02 5.3081E+02 - 5.0119E-01 9.0667E+02 8.8938E+02 5.1025E+02 4.1681E+02 - 5.6234E-01 6.8801E+02 6.8196E+02 3.9532E+02 3.2189E+02 - 6.3096E-01 5.2530E+02 5.1790E+02 3.0891E+02 2.4223E+02 - 7.0795E-01 4.0446E+02 3.9351E+02 2.3243E+02 1.8465E+02 - 7.9433E-01 3.0622E+02 2.9898E+02 1.7691E+02 1.4206E+02 - 8.9125E-01 2.3347E+02 2.2702E+02 1.3640E+02 1.0840E+02 - 1.0000E+00 1.7577E+02 1.7258E+02 1.0221E+02 8.0498E+01 - 1.1220E+00 1.3266E+02 1.2997E+02 7.6570E+01 5.9533E+01 - 1.2589E+00 1.0041E+02 9.7542E+01 5.7526E+01 4.4725E+01 - 1.4125E+00 7.5616E+01 7.3403E+01 4.2865E+01 3.3160E+01 - 1.5849E+00 5.6443E+01 5.4925E+01 3.2292E+01 2.4601E+01 - 1.7783E+00 4.1954E+01 4.0467E+01 2.4075E+01 1.8514E+01 - 1.9953E+00 3.1048E+01 2.9940E+01 1.7601E+01 1.3531E+01 - 2.2387E+00 2.2750E+01 2.1832E+01 1.2843E+01 9.9582E+00 - 2.5119E+00 1.6712E+01 1.5970E+01 9.4043E+00 7.2084E+00 - 2.8184E+00 1.2503E+01 1.1918E+01 6.8967E+00 5.1012E+00 - 3.1623E+00 9.1992E+00 8.5539E+00 4.8413E+00 3.6935E+00 - 3.5481E+00 6.6822E+00 6.1566E+00 3.4643E+00 2.6531E+00 - 3.9811E+00 4.8040E+00 4.4400E+00 2.4728E+00 1.8795E+00 - 4.4668E+00 3.5168E+00 3.1884E+00 1.7541E+00 1.3117E+00 - 5.0119E+00 2.5396E+00 2.3023E+00 1.2288E+00 9.1119E-01 - 5.6234E+00 1.8279E+00 1.6592E+00 8.6454E-01 6.4363E-01 - 6.3096E+00 1.3390E+00 1.1845E+00 6.1061E-01 4.6054E-01 - 7.0795E+00 9.6319E-01 8.4420E-01 4.2655E-01 3.2159E-01 - 7.9433E+00 6.8156E-01 6.0011E-01 2.9898E-01 2.2086E-01 - 8.9125E+00 4.8039E-01 4.2668E-01 2.0380E-01 1.5396E-01 - 1.0000E+01 3.4842E-01 3.0587E-01 1.3927E-01 1.0537E-01 - 1.1220E+01 2.5028E-01 2.1885E-01 9.5059E-02 7.2982E-02 - 1.2589E+01 1.7786E-01 1.5543E-01 6.5996E-02 4.9827E-02 - 1.4125E+01 1.2728E-01 1.0950E-01 4.5372E-02 3.3896E-02 - 1.5849E+01 9.0715E-02 7.8099E-02 3.0692E-02 2.3129E-02 - 1.7783E+01 6.4423E-02 5.5080E-02 2.0591E-02 1.5377E-02 - 1.9953E+01 4.6007E-02 3.8943E-02 1.4000E-02 1.0492E-02 - 2.2387E+01 3.2542E-02 2.7733E-02 9.3334E-03 7.3534E-03 - 2.5119E+01 2.3241E-02 1.9304E-02 6.3287E-03 4.8684E-03 - 2.8184E+01 1.6769E-02 1.3602E-02 4.2763E-03 3.2354E-03 - 3.1623E+01 1.2091E-02 9.8021E-03 2.8793E-03 2.2052E-03 - 3.5481E+01 8.6274E-03 6.9213E-03 1.9276E-03 1.4834E-03 - 3.9811E+01 6.1540E-03 4.8872E-03 1.2891E-03 9.9352E-04 - 4.4668E+01 4.3713E-03 3.4625E-03 8.6498E-04 6.6122E-04 - 5.0119E+01 3.1138E-03 2.4576E-03 5.7835E-04 4.4452E-04 - 5.6234E+01 2.2186E-03 1.7286E-03 3.8026E-04 2.9763E-04 - 6.3096E+01 1.5683E-03 1.2182E-03 2.5445E-04 1.9454E-04 - 7.0795E+01 1.1092E-03 8.5940E-04 1.6992E-04 1.2879E-04 - 7.9433E+01 7.9253E-04 6.0446E-04 1.1223E-04 8.5423E-05 - 8.9125E+01 5.6127E-04 4.2711E-04 7.4030E-05 5.8283E-05 - 1.0000E+02 3.9837E-04 2.9954E-04 4.9365E-05 3.8897E-05 - 1.1220E+02 2.8160E-04 2.1048E-04 3.2438E-05 2.6083E-05 - 1.2589E+02 1.9970E-04 1.4742E-04 2.1544E-05 1.7484E-05 - 1.4125E+02 1.4147E-04 1.0281E-04 1.4442E-05 1.1545E-05 - 1.5849E+02 9.9623E-05 7.2147E-05 9.4607E-06 7.5998E-06 - 1.7783E+02 6.9968E-05 5.0610E-05 6.2616E-06 5.0019E-06 - 1.9953E+02 4.8988E-05 3.5097E-05 4.1811E-06 3.3738E-06 - 2.2387E+02 3.4382E-05 2.4428E-05 2.7267E-06 2.3048E-06 - 2.5119E+02 2.4120E-05 1.7092E-05 1.8054E-06 1.5580E-06 - 2.8184E+02 1.6905E-05 1.1884E-05 1.2280E-06 1.0007E-06 - 3.1623E+02 1.1888E-05 8.2396E-06 8.2162E-07 6.6769E-07 - 3.5481E+02 8.3163E-06 5.7269E-06 5.5151E-07 4.4355E-07 - 3.9811E+02 5.8211E-06 3.9798E-06 3.7410E-07 2.9476E-07 - 4.4668E+02 4.0711E-06 2.7671E-06 2.4672E-07 1.9831E-07 - 5.0119E+02 2.8537E-06 1.9198E-06 1.6489E-07 1.3308E-07 - 5.6234E+02 1.9930E-06 1.3238E-06 1.1039E-07 8.7688E-08 - 6.3096E+02 1.3903E-06 9.1324E-07 7.4365E-08 5.7516E-08 - 7.0795E+02 9.7007E-07 6.3278E-07 4.9926E-08 3.9369E-08 - 7.9433E+02 6.7053E-07 4.3732E-07 3.3032E-08 2.7009E-08 - 8.9125E+02 4.6752E-07 3.0077E-07 2.1501E-08 1.8110E-08 - 1.0000E+03 3.2543E-07 2.0842E-07 1.4711E-08 1.2066E-08 - 1.1220E+03 2.2400E-07 1.4287E-07 1.0202E-08 7.8069E-09 - 1.2589E+03 1.5534E-07 9.8465E-08 6.7154E-09 5.3025E-09 - 1.4125E+03 1.0776E-07 6.7206E-08 4.3719E-09 3.6207E-09 - 1.5849E+03 7.4097E-08 4.5822E-08 3.0548E-09 2.4181E-09 - 1.7783E+03 5.1183E-08 3.1187E-08 2.0521E-09 1.5324E-09 - 1.9953E+03 3.5091E-08 2.1359E-08 1.3651E-09 1.0117E-09 - 2.2387E+03 2.3997E-08 1.4538E-08 9.1307E-10 6.6659E-10 - 2.5119E+03 1.6498E-08 9.8917E-09 6.1711E-10 4.3865E-10 - 2.8184E+03 1.1326E-08 6.8016E-09 4.1555E-10 2.9198E-10 - 3.1623E+03 7.7811E-09 4.5982E-09 2.7270E-10 2.1280E-10 - 3.5481E+03 5.1597E-09 3.0651E-09 1.7791E-10 1.3808E-10 - 3.9811E+03 3.4804E-09 2.0752E-09 1.1925E-10 9.2232E-11 - 4.4668E+03 2.3727E-09 1.3932E-09 8.1459E-11 6.1373E-11 - 5.0119E+03 1.6137E-09 9.3740E-10 5.1164E-11 3.8835E-11 - 5.6234E+03 1.0865E-09 6.2156E-10 3.3631E-11 2.5256E-11 - 6.3096E+03 7.2469E-10 4.0853E-10 2.3603E-11 1.7347E-11 - 7.0795E+03 4.8714E-10 2.7389E-10 1.6085E-11 1.1065E-11 - 7.9433E+03 3.2605E-10 1.8090E-10 1.0356E-11 7.1824E-12 - 8.9125E+03 2.1811E-10 1.2023E-10 6.6236E-12 4.8424E-12 - 1.0000E+04 1.4685E-10 8.0339E-11 4.2258E-12 3.0430E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6063E+04 1.6568E+04 7.8787E+03 7.4861E+03 - 1.1220E-01 1.3802E+04 1.4155E+04 6.8857E+03 6.4277E+03 - 1.2589E-01 1.1760E+04 1.2103E+04 5.9042E+03 5.4364E+03 - 1.4125E-01 1.0002E+04 1.0270E+04 5.0526E+03 4.5618E+03 - 1.5849E-01 8.4110E+03 8.5825E+03 4.3014E+03 3.8409E+03 - 1.7783E-01 7.0362E+03 7.1160E+03 3.6079E+03 3.1755E+03 - 1.9953E-01 5.8164E+03 5.8501E+03 3.0192E+03 2.5948E+03 - 2.2387E-01 4.7081E+03 4.7736E+03 2.5049E+03 2.1294E+03 - 2.5119E-01 3.7933E+03 3.8544E+03 2.0426E+03 1.7176E+03 - 2.8184E-01 3.0387E+03 3.0906E+03 1.6747E+03 1.3752E+03 - 3.1623E-01 2.3979E+03 2.4600E+03 1.3539E+03 1.0921E+03 - 3.5481E-01 1.8763E+03 1.9282E+03 1.0744E+03 8.6459E+02 - 3.9811E-01 1.4670E+03 1.4988E+03 8.4976E+02 6.7987E+02 - 4.4668E-01 1.1590E+03 1.1805E+03 6.7077E+02 5.2839E+02 - 5.0119E-01 8.9842E+02 9.1321E+02 5.2451E+02 4.0809E+02 - 5.6234E-01 6.8755E+02 6.9247E+02 4.0667E+02 3.1306E+02 - 6.3096E-01 5.2592E+02 5.3459E+02 3.1664E+02 2.4078E+02 - 7.0795E-01 4.0158E+02 4.0664E+02 2.4193E+02 1.8538E+02 - 7.9433E-01 3.0839E+02 3.0699E+02 1.8308E+02 1.4140E+02 - 8.9125E-01 2.3408E+02 2.3529E+02 1.3989E+02 1.0458E+02 - 1.0000E+00 1.7461E+02 1.7578E+02 1.0511E+02 7.9457E+01 - 1.1220E+00 1.3247E+02 1.3264E+02 7.9147E+01 5.9419E+01 - 1.2589E+00 9.9287E+01 9.9805E+01 5.9428E+01 4.4246E+01 - 1.4125E+00 7.4700E+01 7.4381E+01 4.3782E+01 3.3278E+01 - 1.5849E+00 5.6608E+01 5.5691E+01 3.2492E+01 2.4747E+01 - 1.7783E+00 4.2242E+01 4.1029E+01 2.4201E+01 1.8072E+01 - 1.9953E+00 3.1227E+01 2.9953E+01 1.7751E+01 1.3136E+01 - 2.2387E+00 2.3242E+01 2.2114E+01 1.2941E+01 9.6990E+00 - 2.5119E+00 1.7064E+01 1.6143E+01 9.5526E+00 7.1292E+00 - 2.8184E+00 1.2385E+01 1.1784E+01 6.9770E+00 5.1413E+00 - 3.1623E+00 9.1829E+00 8.6612E+00 4.9301E+00 3.6934E+00 - 3.5481E+00 6.6972E+00 6.2917E+00 3.5063E+00 2.6397E+00 - 3.9811E+00 4.8428E+00 4.5085E+00 2.4939E+00 1.8714E+00 - 4.4668E+00 3.5308E+00 3.2344E+00 1.7764E+00 1.3361E+00 - 5.0119E+00 2.5789E+00 2.3383E+00 1.2472E+00 9.5450E-01 - 5.6234E+00 1.8564E+00 1.6825E+00 8.6404E-01 6.7777E-01 - 6.3096E+00 1.3257E+00 1.1893E+00 6.0783E-01 4.6567E-01 - 7.0795E+00 9.4904E-01 8.4971E-01 4.2124E-01 3.1744E-01 - 7.9433E+00 6.8146E-01 6.1284E-01 2.9686E-01 2.1608E-01 - 8.9125E+00 4.9855E-01 4.3380E-01 2.0910E-01 1.4665E-01 - 1.0000E+01 3.5059E-01 3.0808E-01 1.4075E-01 1.0610E-01 - 1.1220E+01 2.5048E-01 2.1820E-01 9.7189E-02 7.2761E-02 - 1.2589E+01 1.8010E-01 1.5564E-01 6.6509E-02 4.9390E-02 - 1.4125E+01 1.2887E-01 1.0920E-01 4.5593E-02 3.3408E-02 - 1.5849E+01 9.2218E-02 7.7137E-02 3.1283E-02 2.3252E-02 - 1.7783E+01 6.5823E-02 5.5085E-02 2.0679E-02 1.5737E-02 - 1.9953E+01 4.7182E-02 3.8854E-02 1.3721E-02 1.0466E-02 - 2.2387E+01 3.3353E-02 2.7636E-02 9.4625E-03 7.0950E-03 - 2.5119E+01 2.3511E-02 1.9766E-02 6.5198E-03 4.9037E-03 - 2.8184E+01 1.7001E-02 1.4057E-02 4.3989E-03 3.3099E-03 - 3.1623E+01 1.2097E-02 9.8245E-03 2.8813E-03 2.2045E-03 - 3.5481E+01 8.6194E-03 6.9565E-03 1.9254E-03 1.4851E-03 - 3.9811E+01 6.1425E-03 4.9341E-03 1.2874E-03 1.0011E-03 - 4.4668E+01 4.3903E-03 3.4881E-03 8.5814E-04 6.7495E-04 - 5.0119E+01 3.1271E-03 2.4495E-03 5.7298E-04 4.4703E-04 - 5.6234E+01 2.2140E-03 1.7226E-03 3.8197E-04 2.9574E-04 - 6.3096E+01 1.5763E-03 1.2143E-03 2.5619E-04 1.9702E-04 - 7.0795E+01 1.1164E-03 8.5701E-04 1.6888E-04 1.3136E-04 - 7.9433E+01 7.8628E-04 6.0488E-04 1.1127E-04 8.7060E-05 - 8.9125E+01 5.5877E-04 4.2809E-04 7.3812E-05 5.7595E-05 - 1.0000E+02 4.0004E-04 2.9933E-04 4.9367E-05 3.8786E-05 - 1.1220E+02 2.8234E-04 2.1016E-04 3.2758E-05 2.5541E-05 - 1.2589E+02 1.9922E-04 1.4735E-04 2.1598E-05 1.7062E-05 - 1.4125E+02 1.4073E-04 1.0334E-04 1.4330E-05 1.1443E-05 - 1.5849E+02 9.9063E-05 7.2190E-05 9.5226E-06 7.5765E-06 - 1.7783E+02 7.0005E-05 5.0531E-05 6.2963E-06 4.9507E-06 - 1.9953E+02 4.9378E-05 3.5257E-05 4.1431E-06 3.3251E-06 - 2.2387E+02 3.4497E-05 2.4593E-05 2.8178E-06 2.2527E-06 - 2.5119E+02 2.4095E-05 1.7115E-05 1.8881E-06 1.4840E-06 - 2.8184E+02 1.6995E-05 1.1876E-05 1.2498E-06 1.0143E-06 - 3.1623E+02 1.1907E-05 8.2668E-06 8.2247E-07 6.6033E-07 - 3.5481E+02 8.3236E-06 5.7281E-06 5.5138E-07 4.4340E-07 - 3.9811E+02 5.8123E-06 3.9685E-06 3.6682E-07 2.9652E-07 - 4.4668E+02 4.0554E-06 2.7588E-06 2.4190E-07 1.9796E-07 - 5.0119E+02 2.8290E-06 1.9139E-06 1.6151E-07 1.3586E-07 - 5.6234E+02 1.9930E-06 1.3281E-06 1.0943E-07 8.9378E-08 - 6.3096E+02 1.3865E-06 9.1473E-07 7.3780E-08 5.9163E-08 - 7.0795E+02 9.6213E-07 6.2894E-07 5.0851E-08 3.9430E-08 - 7.9433E+02 6.7099E-07 4.3498E-07 3.3756E-08 2.5774E-08 - 8.9125E+02 4.6788E-07 3.0053E-07 2.1577E-08 1.7464E-08 - 1.0000E+03 3.2480E-07 2.0688E-07 1.4997E-08 1.1921E-08 - 1.1220E+03 2.2454E-07 1.4272E-07 1.0329E-08 7.8976E-09 - 1.2589E+03 1.5534E-07 9.8273E-08 6.9708E-09 5.2997E-09 - 1.4125E+03 1.0708E-07 6.6819E-08 4.5939E-09 3.5815E-09 - 1.5849E+03 7.4361E-08 4.6366E-08 2.9988E-09 2.4805E-09 - 1.7783E+03 5.1678E-08 3.1550E-08 2.0279E-09 1.6294E-09 - 1.9953E+03 3.5390E-08 2.1399E-08 1.3905E-09 1.0551E-09 - 2.2387E+03 2.3993E-08 1.4684E-08 9.0273E-10 7.2461E-10 - 2.5119E+03 1.6480E-08 9.9818E-09 5.6851E-10 4.8437E-10 - 2.8184E+03 1.1289E-08 6.7602E-09 4.0471E-10 3.0081E-10 - 3.1623E+03 7.8423E-09 4.6007E-09 2.7291E-10 1.9035E-10 - 3.5481E+03 5.2188E-09 3.0794E-09 1.8174E-10 1.2717E-10 - 3.9811E+03 3.5067E-09 2.0704E-09 1.2248E-10 8.7973E-11 - 4.4668E+03 2.3807E-09 1.3961E-09 8.0794E-11 5.8130E-11 - 5.0119E+03 1.6144E-09 9.3476E-10 5.2776E-11 3.9144E-11 - 5.6234E+03 1.0884E-09 6.2197E-10 3.7034E-11 2.6154E-11 - 6.3096E+03 7.2828E-10 4.1369E-10 2.2381E-11 1.7271E-11 - 7.0795E+03 4.9237E-10 2.7728E-10 1.4350E-11 1.0888E-11 - 7.9433E+03 3.2654E-10 1.8383E-10 9.7007E-12 6.6338E-12 - 8.9125E+03 2.1534E-10 1.2059E-10 6.0210E-12 4.4686E-12 - 1.0000E+04 1.4322E-10 7.9513E-11 4.1283E-12 3.1144E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7024E+04 1.7700E+04 8.5018E+03 7.7639E+03 - 1.1220E-01 1.4574E+04 1.5129E+04 7.4221E+03 6.6872E+03 - 1.2589E-01 1.2459E+04 1.2887E+04 6.3946E+03 5.6733E+03 - 1.4125E-01 1.0567E+04 1.0890E+04 5.4406E+03 4.7587E+03 - 1.5849E-01 8.8884E+03 9.1435E+03 4.6028E+03 3.9751E+03 - 1.7783E-01 7.3905E+03 7.6052E+03 3.8852E+03 3.2794E+03 - 1.9953E-01 6.0121E+03 6.2384E+03 3.2416E+03 2.6910E+03 - 2.2387E-01 4.8738E+03 5.0782E+03 2.6623E+03 2.1912E+03 - 2.5119E-01 3.9157E+03 4.0900E+03 2.1797E+03 1.7667E+03 - 2.8184E-01 3.1142E+03 3.2475E+03 1.7813E+03 1.4115E+03 - 3.1623E-01 2.4683E+03 2.5551E+03 1.4304E+03 1.1193E+03 - 3.5481E-01 1.9347E+03 2.0153E+03 1.1379E+03 8.8365E+02 - 3.9811E-01 1.5095E+03 1.5849E+03 8.9994E+02 6.8785E+02 - 4.4668E-01 1.1683E+03 1.2260E+03 7.0241E+02 5.3238E+02 - 5.0119E-01 9.0118E+02 9.4428E+02 5.4570E+02 4.1039E+02 - 5.6234E-01 6.9501E+02 7.2480E+02 4.2328E+02 3.1570E+02 - 6.3096E-01 5.2901E+02 5.5180E+02 3.2757E+02 2.4356E+02 - 7.0795E-01 4.0236E+02 4.2072E+02 2.4802E+02 1.8546E+02 - 7.9433E-01 3.0534E+02 3.1741E+02 1.8901E+02 1.3780E+02 - 8.9125E-01 2.2712E+02 2.3798E+02 1.4596E+02 1.0250E+02 - 1.0000E+00 1.7419E+02 1.8006E+02 1.0833E+02 7.9076E+01 - 1.1220E+00 1.3183E+02 1.3516E+02 7.9981E+01 5.9536E+01 - 1.2589E+00 9.9403E+01 1.0125E+02 5.9695E+01 4.4708E+01 - 1.4125E+00 7.5030E+01 7.5007E+01 4.5003E+01 3.2730E+01 - 1.5849E+00 5.6260E+01 5.5165E+01 3.3560E+01 2.4137E+01 - 1.7783E+00 4.1775E+01 4.1001E+01 2.4959E+01 1.7747E+01 - 1.9953E+00 3.0739E+01 3.0468E+01 1.8211E+01 1.2931E+01 - 2.2387E+00 2.2841E+01 2.2321E+01 1.2993E+01 9.5524E+00 - 2.5119E+00 1.7164E+01 1.6409E+01 9.4598E+00 7.0532E+00 - 2.8184E+00 1.2468E+01 1.1915E+01 6.7969E+00 5.1598E+00 - 3.1623E+00 9.1979E+00 8.6409E+00 5.0013E+00 3.7201E+00 - 3.5481E+00 6.7455E+00 6.2842E+00 3.5250E+00 2.6420E+00 - 3.9811E+00 4.8731E+00 4.5347E+00 2.5181E+00 1.8664E+00 - 4.4668E+00 3.5317E+00 3.2619E+00 1.7797E+00 1.3277E+00 - 5.0119E+00 2.5488E+00 2.3471E+00 1.2334E+00 9.4782E-01 - 5.6234E+00 1.8272E+00 1.6853E+00 8.7871E-01 6.6405E-01 - 6.3096E+00 1.3314E+00 1.2170E+00 6.2330E-01 4.6311E-01 - 7.0795E+00 9.5721E-01 8.6343E-01 4.3645E-01 3.1793E-01 - 7.9433E+00 6.8746E-01 6.1346E-01 3.0246E-01 2.2316E-01 - 8.9125E+00 4.9302E-01 4.3668E-01 2.0556E-01 1.6005E-01 - 1.0000E+01 3.5535E-01 3.1082E-01 1.4129E-01 1.0602E-01 - 1.1220E+01 2.5383E-01 2.2173E-01 9.6588E-02 7.3221E-02 - 1.2589E+01 1.8358E-01 1.5664E-01 6.6241E-02 5.0540E-02 - 1.4125E+01 1.3172E-01 1.1095E-01 4.5232E-02 3.4162E-02 - 1.5849E+01 9.2381E-02 7.8771E-02 3.0962E-02 2.3341E-02 - 1.7783E+01 6.5212E-02 5.5680E-02 2.1083E-02 1.5946E-02 - 1.9953E+01 4.7320E-02 4.0041E-02 1.4441E-02 1.0748E-02 - 2.2387E+01 3.4470E-02 2.8001E-02 9.7982E-03 7.4279E-03 - 2.5119E+01 2.4459E-02 1.9654E-02 6.6538E-03 5.0634E-03 - 2.8184E+01 1.7503E-02 1.4003E-02 4.5131E-03 3.3593E-03 - 3.1623E+01 1.2134E-02 9.7809E-03 2.8912E-03 2.2201E-03 - 3.5481E+01 8.6395E-03 6.9364E-03 1.9399E-03 1.4937E-03 - 3.9811E+01 6.1501E-03 4.9074E-03 1.2905E-03 9.9814E-04 - 4.4668E+01 4.3876E-03 3.4696E-03 8.6056E-04 6.6698E-04 - 5.0119E+01 3.1164E-03 2.4458E-03 5.7661E-04 4.4376E-04 - 5.6234E+01 2.2207E-03 1.7240E-03 3.8584E-04 2.9666E-04 - 6.3096E+01 1.5821E-03 1.2211E-03 2.5407E-04 1.9987E-04 - 7.0795E+01 1.1266E-03 8.6290E-04 1.6733E-04 1.3025E-04 - 7.9433E+01 7.9555E-04 6.0691E-04 1.1253E-04 8.7857E-05 - 8.9125E+01 5.6076E-04 4.2440E-04 7.5917E-05 6.0238E-05 - 1.0000E+02 3.9884E-04 3.0060E-04 4.9543E-05 3.9142E-05 - 1.1220E+02 2.8222E-04 2.1093E-04 3.2791E-05 2.6056E-05 - 1.2589E+02 1.9983E-04 1.4733E-04 2.1810E-05 1.7167E-05 - 1.4125E+02 1.4133E-04 1.0319E-04 1.4341E-05 1.1401E-05 - 1.5849E+02 9.9403E-05 7.2467E-05 9.4992E-06 7.6780E-06 - 1.7783E+02 7.0142E-05 5.0771E-05 6.3358E-06 5.1093E-06 - 1.9953E+02 4.9488E-05 3.5239E-05 4.1620E-06 3.4185E-06 - 2.2387E+02 3.4738E-05 2.4570E-05 2.7705E-06 2.2671E-06 - 2.5119E+02 2.4402E-05 1.7222E-05 1.8473E-06 1.4872E-06 - 2.8184E+02 1.7145E-05 1.1912E-05 1.2134E-06 9.8946E-07 - 3.1623E+02 1.1942E-05 8.2502E-06 8.1473E-07 6.6168E-07 - 3.5481E+02 8.3395E-06 5.7247E-06 5.4865E-07 4.4513E-07 - 3.9811E+02 5.8259E-06 3.9854E-06 3.6682E-07 2.9839E-07 - 4.4668E+02 4.0856E-06 2.7687E-06 2.4425E-07 1.9946E-07 - 5.0119E+02 2.8622E-06 1.9195E-06 1.6203E-07 1.3255E-07 - 5.6234E+02 1.9913E-06 1.3237E-06 1.1118E-07 8.7148E-08 - 6.3096E+02 1.3884E-06 9.1597E-07 7.4328E-08 5.9011E-08 - 7.0795E+02 9.6907E-07 6.3710E-07 5.0116E-08 3.9865E-08 - 7.9433E+02 6.7554E-07 4.3606E-07 3.3812E-08 2.6503E-08 - 8.9125E+02 4.7195E-07 2.9969E-07 2.2313E-08 1.7823E-08 - 1.0000E+03 3.2650E-07 2.0803E-07 1.4808E-08 1.2239E-08 - 1.1220E+03 2.2594E-07 1.4303E-07 1.0102E-08 8.1256E-09 - 1.2589E+03 1.5625E-07 9.7800E-08 6.8544E-09 5.3948E-09 - 1.4125E+03 1.0714E-07 6.7201E-08 4.7306E-09 3.5018E-09 - 1.5849E+03 7.3567E-08 4.6019E-08 3.1254E-09 2.2754E-09 - 1.7783E+03 5.1093E-08 3.1245E-08 1.9863E-09 1.5679E-09 - 1.9953E+03 3.5245E-08 2.1352E-08 1.3900E-09 1.0516E-09 - 2.2387E+03 2.4160E-08 1.4594E-08 9.3688E-10 6.9650E-10 - 2.5119E+03 1.6531E-08 9.9461E-09 6.1942E-10 4.7760E-10 - 2.8184E+03 1.1257E-08 6.7094E-09 4.1392E-10 3.0225E-10 - 3.1623E+03 7.8232E-09 4.6175E-09 2.7121E-10 2.0391E-10 - 3.5481E+03 5.2307E-09 3.0947E-09 1.7728E-10 1.3710E-10 - 3.9811E+03 3.5205E-09 2.0961E-09 1.1759E-10 8.9259E-11 - 4.4668E+03 2.3755E-09 1.4108E-09 7.8445E-11 5.7249E-11 - 5.0119E+03 1.5960E-09 9.4269E-10 5.3107E-11 3.8661E-11 - 5.6234E+03 1.0710E-09 6.2304E-10 3.4764E-11 2.6709E-11 - 6.3096E+03 7.3170E-10 4.1933E-10 2.1925E-11 1.6033E-11 - 7.0795E+03 4.8977E-10 2.7953E-10 1.5761E-11 1.0243E-11 - 7.9433E+03 3.2484E-10 1.8394E-10 1.0472E-11 6.9837E-12 - 8.9125E+03 2.1879E-10 1.2165E-10 6.5772E-12 4.9668E-12 - 1.0000E+04 1.4676E-10 7.9941E-11 4.4527E-12 3.1219E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8222E+04 1.8893E+04 9.2880E+03 8.2787E+03 - 1.1220E-01 1.5544E+04 1.6180E+04 8.0456E+03 7.1075E+03 - 1.2589E-01 1.3229E+04 1.3755E+04 6.9091E+03 6.0059E+03 - 1.4125E-01 1.1144E+04 1.1575E+04 5.8765E+03 5.0361E+03 - 1.5849E-01 9.3164E+03 9.6585E+03 4.9318E+03 4.1794E+03 - 1.7783E-01 7.6794E+03 8.0109E+03 4.1164E+03 3.4415E+03 - 1.9953E-01 6.2510E+03 6.5563E+03 3.4036E+03 2.8051E+03 - 2.2387E-01 5.0626E+03 5.2912E+03 2.8085E+03 2.2492E+03 - 2.5119E-01 4.0547E+03 4.2169E+03 2.2987E+03 1.8155E+03 - 2.8184E-01 3.2272E+03 3.3353E+03 1.8548E+03 1.4547E+03 - 3.1623E-01 2.5407E+03 2.6325E+03 1.4848E+03 1.1390E+03 - 3.5481E-01 1.9880E+03 2.0526E+03 1.1738E+03 8.9228E+02 - 3.9811E-01 1.5435E+03 1.5893E+03 9.1807E+02 6.9313E+02 - 4.4668E-01 1.1825E+03 1.2308E+03 7.1555E+02 5.2819E+02 - 5.0119E-01 9.0186E+02 9.4657E+02 5.5476E+02 4.0627E+02 - 5.6234E-01 6.9175E+02 7.2443E+02 4.2658E+02 3.1689E+02 - 6.3096E-01 5.3098E+02 5.5390E+02 3.2808E+02 2.4212E+02 - 7.0795E-01 3.9982E+02 4.1912E+02 2.4745E+02 1.7955E+02 - 7.9433E-01 3.0131E+02 3.1329E+02 1.8823E+02 1.3705E+02 - 8.9125E-01 2.2998E+02 2.3318E+02 1.4305E+02 1.0581E+02 - 1.0000E+00 1.7443E+02 1.7904E+02 1.0819E+02 7.8309E+01 - 1.1220E+00 1.3169E+02 1.3499E+02 8.1265E+01 5.8182E+01 - 1.2589E+00 9.9424E+01 1.0069E+02 5.9654E+01 4.3885E+01 - 1.4125E+00 7.4735E+01 7.4876E+01 4.4390E+01 3.2804E+01 - 1.5849E+00 5.6681E+01 5.5600E+01 3.3430E+01 2.4223E+01 - 1.7783E+00 4.2334E+01 4.1648E+01 2.4623E+01 1.7776E+01 - 1.9953E+00 3.1355E+01 3.0573E+01 1.8129E+01 1.3128E+01 - 2.2387E+00 2.3144E+01 2.2114E+01 1.3135E+01 9.7850E+00 - 2.5119E+00 1.7119E+01 1.6303E+01 9.4668E+00 7.1776E+00 - 2.8184E+00 1.2650E+01 1.1865E+01 6.8844E+00 5.0262E+00 - 3.1623E+00 9.2202E+00 8.6218E+00 4.9016E+00 3.6968E+00 - 3.5481E+00 6.7218E+00 6.2218E+00 3.5481E+00 2.6369E+00 - 3.9811E+00 4.8647E+00 4.5565E+00 2.5126E+00 1.8683E+00 - 4.4668E+00 3.5117E+00 3.2852E+00 1.7703E+00 1.3140E+00 - 5.0119E+00 2.5576E+00 2.3638E+00 1.2695E+00 9.1956E-01 - 5.6234E+00 1.8508E+00 1.6930E+00 8.9204E-01 6.5793E-01 - 6.3096E+00 1.3241E+00 1.2049E+00 6.2242E-01 4.7496E-01 - 7.0795E+00 9.5803E-01 8.6413E-01 4.3413E-01 3.2630E-01 - 7.9433E+00 6.9122E-01 6.0658E-01 3.0011E-01 2.1978E-01 - 8.9125E+00 4.8998E-01 4.3955E-01 2.0290E-01 1.5480E-01 - 1.0000E+01 3.5707E-01 3.0743E-01 1.4147E-01 1.0594E-01 - 1.1220E+01 2.5551E-01 2.1965E-01 9.7634E-02 7.2338E-02 - 1.2589E+01 1.8107E-01 1.5647E-01 6.6730E-02 4.9976E-02 - 1.4125E+01 1.2969E-01 1.0978E-01 4.5238E-02 3.4525E-02 - 1.5849E+01 9.1626E-02 7.7223E-02 3.0913E-02 2.2839E-02 - 1.7783E+01 6.4952E-02 5.5020E-02 2.0927E-02 1.5456E-02 - 1.9953E+01 4.6721E-02 3.9316E-02 1.4120E-02 1.0691E-02 - 2.2387E+01 3.3121E-02 2.7662E-02 9.3756E-03 7.4021E-03 - 2.5119E+01 2.3599E-02 1.9572E-02 6.3043E-03 4.9662E-03 - 2.8184E+01 1.6852E-02 1.3674E-02 4.2963E-03 3.3695E-03 - 3.1623E+01 1.2107E-02 9.8227E-03 2.9045E-03 2.2285E-03 - 3.5481E+01 8.6186E-03 6.9562E-03 1.9509E-03 1.4856E-03 - 3.9811E+01 6.1553E-03 4.9302E-03 1.3039E-03 9.9373E-04 - 4.4668E+01 4.3935E-03 3.4893E-03 8.6720E-04 6.6682E-04 - 5.0119E+01 3.1309E-03 2.4635E-03 5.7579E-04 4.4844E-04 - 5.6234E+01 2.2316E-03 1.7336E-03 3.8028E-04 2.9750E-04 - 6.3096E+01 1.5871E-03 1.2208E-03 2.5384E-04 1.9652E-04 - 7.0795E+01 1.1236E-03 8.6066E-04 1.7050E-04 1.3073E-04 - 7.9433E+01 7.9586E-04 6.1046E-04 1.1129E-04 8.7857E-05 - 8.9125E+01 5.6539E-04 4.2944E-04 7.3446E-05 5.9061E-05 - 1.0000E+02 3.9877E-04 3.0034E-04 4.9445E-05 3.8762E-05 - 1.1220E+02 2.8188E-04 2.1027E-04 3.2860E-05 2.5757E-05 - 1.2589E+02 1.9951E-04 1.4756E-04 2.1690E-05 1.7316E-05 - 1.4125E+02 1.4074E-04 1.0349E-04 1.4438E-05 1.1482E-05 - 1.5849E+02 9.9534E-05 7.2150E-05 9.5381E-06 7.6062E-06 - 1.7783E+02 7.0189E-05 5.0403E-05 6.2461E-06 4.9824E-06 - 1.9953E+02 4.9289E-05 3.5282E-05 4.1383E-06 3.3016E-06 - 2.2387E+02 3.4588E-05 2.4634E-05 2.7583E-06 2.2342E-06 - 2.5119E+02 2.4227E-05 1.7225E-05 1.8711E-06 1.5098E-06 - 2.8184E+02 1.6961E-05 1.1968E-05 1.2433E-06 1.0010E-06 - 3.1623E+02 1.1911E-05 8.2965E-06 8.3635E-07 6.7553E-07 - 3.5481E+02 8.3356E-06 5.7485E-06 5.5535E-07 4.5031E-07 - 3.9811E+02 5.8407E-06 4.0034E-06 3.6777E-07 3.0451E-07 - 4.4668E+02 4.1110E-06 2.7805E-06 2.4496E-07 2.0041E-07 - 5.0119E+02 2.8662E-06 1.9324E-06 1.6627E-07 1.3276E-07 - 5.6234E+02 1.9976E-06 1.3343E-06 1.1215E-07 8.9098E-08 - 6.3096E+02 1.3872E-06 9.2026E-07 7.3831E-08 5.9881E-08 - 7.0795E+02 9.7004E-07 6.3488E-07 4.8894E-08 3.9166E-08 - 7.9433E+02 6.7328E-07 4.3821E-07 3.3130E-08 2.6187E-08 - 8.9125E+02 4.6740E-07 3.0350E-07 2.2172E-08 1.8132E-08 - 1.0000E+03 3.2561E-07 2.0936E-07 1.5232E-08 1.2235E-08 - 1.1220E+03 2.2574E-07 1.4401E-07 1.0267E-08 8.2007E-09 - 1.2589E+03 1.5677E-07 9.8927E-08 6.9511E-09 5.2874E-09 - 1.4125E+03 1.0835E-07 6.7417E-08 4.6813E-09 3.4756E-09 - 1.5849E+03 7.4579E-08 4.6230E-08 3.0253E-09 2.3256E-09 - 1.7783E+03 5.1207E-08 3.1611E-08 2.0194E-09 1.5546E-09 - 1.9953E+03 3.5098E-08 2.1675E-08 1.3932E-09 1.0266E-09 - 2.2387E+03 2.4105E-08 1.4732E-08 9.1441E-10 6.6924E-10 - 2.5119E+03 1.6601E-08 9.9159E-09 6.0800E-10 4.4445E-10 - 2.8184E+03 1.1381E-08 6.6884E-09 4.0481E-10 3.0655E-10 - 3.1623E+03 7.8194E-09 4.6433E-09 2.7388E-10 2.1019E-10 - 3.5481E+03 5.2353E-09 3.1032E-09 1.8369E-10 1.3790E-10 - 3.9811E+03 3.5488E-09 2.0731E-09 1.1968E-10 9.2136E-11 - 4.4668E+03 2.4037E-09 1.3948E-09 8.0831E-11 6.0367E-11 - 5.0119E+03 1.6186E-09 9.3092E-10 5.2826E-11 3.9865E-11 - 5.6234E+03 1.0836E-09 6.1478E-10 3.4909E-11 2.5117E-11 - 6.3096E+03 7.3162E-10 4.1870E-10 2.2713E-11 1.6724E-11 - 7.0795E+03 4.9056E-10 2.7904E-10 1.5430E-11 1.1330E-11 - 7.9433E+03 3.2770E-10 1.8550E-10 1.0267E-11 7.3848E-12 - 8.9125E+03 2.1732E-10 1.2373E-10 6.9525E-12 4.7045E-12 - 1.0000E+04 1.4453E-10 8.1397E-11 4.7077E-12 3.2817E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8582E+04 1.9165E+04 9.4578E+03 8.3333E+03 - 1.1220E-01 1.5889E+04 1.6337E+04 8.1643E+03 7.1447E+03 - 1.2589E-01 1.3462E+04 1.3741E+04 6.9677E+03 6.0365E+03 - 1.4125E-01 1.1312E+04 1.1553E+04 5.8907E+03 5.0424E+03 - 1.5849E-01 9.3948E+03 9.6821E+03 4.9642E+03 4.1674E+03 - 1.7783E-01 7.7413E+03 7.9886E+03 4.1456E+03 3.4059E+03 - 1.9953E-01 6.2963E+03 6.5234E+03 3.4231E+03 2.7916E+03 - 2.2387E-01 5.0752E+03 5.2621E+03 2.8161E+03 2.2695E+03 - 2.5119E-01 4.0443E+03 4.2030E+03 2.2972E+03 1.8144E+03 - 2.8184E-01 3.1933E+03 3.3146E+03 1.8528E+03 1.4468E+03 - 3.1623E-01 2.5127E+03 2.6104E+03 1.4721E+03 1.1531E+03 - 3.5481E-01 1.9716E+03 2.0564E+03 1.1634E+03 9.0374E+02 - 3.9811E-01 1.5388E+03 1.6017E+03 9.1425E+02 6.9774E+02 - 4.4668E-01 1.1819E+03 1.2419E+03 7.1429E+02 5.4236E+02 - 5.0119E-01 9.0361E+02 9.4954E+02 5.5409E+02 4.1886E+02 - 5.6234E-01 6.9146E+02 7.1976E+02 4.2737E+02 3.1589E+02 - 6.3096E-01 5.2991E+02 5.4664E+02 3.2492E+02 2.4135E+02 - 7.0795E-01 4.0434E+02 4.1592E+02 2.4476E+02 1.8331E+02 - 7.9433E-01 3.0714E+02 3.1981E+02 1.8730E+02 1.3719E+02 - 8.9125E-01 2.3313E+02 2.3979E+02 1.4187E+02 1.0453E+02 - 1.0000E+00 1.7534E+02 1.7877E+02 1.0716E+02 7.8918E+01 - 1.1220E+00 1.3144E+02 1.3404E+02 8.0689E+01 5.9044E+01 - 1.2589E+00 9.9162E+01 1.0063E+02 6.0362E+01 4.4428E+01 - 1.4125E+00 7.5126E+01 7.5056E+01 4.5086E+01 3.3122E+01 - 1.5849E+00 5.5938E+01 5.5357E+01 3.3281E+01 2.4180E+01 - 1.7783E+00 4.1601E+01 4.1088E+01 2.4497E+01 1.7868E+01 - 1.9953E+00 3.1159E+01 3.0522E+01 1.8101E+01 1.3219E+01 - 2.2387E+00 2.2831E+01 2.2471E+01 1.3144E+01 9.7792E+00 - 2.5119E+00 1.6779E+01 1.6329E+01 9.4861E+00 7.0770E+00 - 2.8184E+00 1.2442E+01 1.1788E+01 6.9129E+00 4.9733E+00 - 3.1623E+00 9.1292E+00 8.6603E+00 4.9749E+00 3.7017E+00 - 3.5481E+00 6.6322E+00 6.2498E+00 3.5180E+00 2.6586E+00 - 3.9811E+00 4.8377E+00 4.5134E+00 2.4950E+00 1.8714E+00 - 4.4668E+00 3.5239E+00 3.2636E+00 1.7769E+00 1.3280E+00 - 5.0119E+00 2.5525E+00 2.3409E+00 1.2493E+00 9.4030E-01 - 5.6234E+00 1.8407E+00 1.6863E+00 8.7665E-01 6.6774E-01 - 6.3096E+00 1.3433E+00 1.2217E+00 6.1883E-01 4.6656E-01 - 7.0795E+00 9.6446E-01 8.6005E-01 4.2682E-01 3.2576E-01 - 7.9433E+00 6.9023E-01 6.0808E-01 2.9292E-01 2.2530E-01 - 8.9125E+00 4.8859E-01 4.3463E-01 2.0150E-01 1.5324E-01 - 1.0000E+01 3.4871E-01 3.0532E-01 1.4046E-01 1.0533E-01 - 1.1220E+01 2.5197E-01 2.1597E-01 9.6090E-02 7.2136E-02 - 1.2589E+01 1.7882E-01 1.5380E-01 6.5616E-02 4.9682E-02 - 1.4125E+01 1.2760E-01 1.0947E-01 4.5539E-02 3.4258E-02 - 1.5849E+01 9.1603E-02 7.7008E-02 3.0852E-02 2.3374E-02 - 1.7783E+01 6.5512E-02 5.4127E-02 2.0591E-02 1.5953E-02 - 1.9953E+01 4.6705E-02 3.8706E-02 1.4063E-02 1.0709E-02 - 2.2387E+01 3.2931E-02 2.7686E-02 9.9154E-03 7.0492E-03 - 2.5119E+01 2.3673E-02 1.9345E-02 6.6373E-03 4.7084E-03 - 2.8184E+01 1.6771E-02 1.3694E-02 4.3543E-03 3.1921E-03 - 3.1623E+01 1.2108E-02 9.8375E-03 2.9038E-03 2.2251E-03 - 3.5481E+01 8.6392E-03 6.9549E-03 1.9382E-03 1.4907E-03 - 3.9811E+01 6.1685E-03 4.9209E-03 1.2878E-03 9.9176E-04 - 4.4668E+01 4.3889E-03 3.4709E-03 8.6131E-04 6.6156E-04 - 5.0119E+01 3.1241E-03 2.4426E-03 5.7776E-04 4.4441E-04 - 5.6234E+01 2.2196E-03 1.7314E-03 3.8495E-04 2.9711E-04 - 6.3096E+01 1.5768E-03 1.2250E-03 2.5519E-04 1.9855E-04 - 7.0795E+01 1.1226E-03 8.6211E-04 1.7043E-04 1.3343E-04 - 7.9433E+01 7.9422E-04 6.0741E-04 1.1398E-04 8.9071E-05 - 8.9125E+01 5.6310E-04 4.2640E-04 7.5523E-05 5.8761E-05 - 1.0000E+02 3.9985E-04 3.0064E-04 4.9550E-05 3.9126E-05 - 1.1220E+02 2.8290E-04 2.1080E-04 3.2924E-05 2.6117E-05 - 1.2589E+02 2.0040E-04 1.4769E-04 2.1661E-05 1.7343E-05 - 1.4125E+02 1.4166E-04 1.0333E-04 1.4293E-05 1.1422E-05 - 1.5849E+02 9.9799E-05 7.1879E-05 9.4463E-06 7.6049E-06 - 1.7783E+02 7.0129E-05 5.0294E-05 6.2390E-06 5.0644E-06 - 1.9953E+02 4.9213E-05 3.5161E-05 4.1319E-06 3.3832E-06 - 2.2387E+02 3.4466E-05 2.4473E-05 2.7953E-06 2.2769E-06 - 2.5119E+02 2.4177E-05 1.7169E-05 1.8742E-06 1.5084E-06 - 2.8184E+02 1.6971E-05 1.1970E-05 1.2161E-06 9.7993E-07 - 3.1623E+02 1.1966E-05 8.2986E-06 8.2841E-07 6.6190E-07 - 3.5481E+02 8.3524E-06 5.7547E-06 5.5605E-07 4.4364E-07 - 3.9811E+02 5.8418E-06 3.9960E-06 3.6912E-07 2.9775E-07 - 4.4668E+02 4.0919E-06 2.7747E-06 2.4667E-07 2.0024E-07 - 5.0119E+02 2.8680E-06 1.9192E-06 1.6601E-07 1.3230E-07 - 5.6234E+02 2.0011E-06 1.3241E-06 1.1116E-07 8.9636E-08 - 6.3096E+02 1.3888E-06 9.1965E-07 7.4563E-08 5.9986E-08 - 7.0795E+02 9.6755E-07 6.3818E-07 4.9848E-08 3.9693E-08 - 7.9433E+02 6.7607E-07 4.4057E-07 3.3008E-08 2.5898E-08 - 8.9125E+02 4.6979E-07 3.0255E-07 2.2279E-08 1.7684E-08 - 1.0000E+03 3.2648E-07 2.0916E-07 1.5078E-08 1.2294E-08 - 1.1220E+03 2.2580E-07 1.4332E-07 9.9577E-09 8.2049E-09 - 1.2589E+03 1.5657E-07 9.8426E-08 6.6484E-09 5.4482E-09 - 1.4125E+03 1.0769E-07 6.7668E-08 4.4390E-09 3.5343E-09 - 1.5849E+03 7.4218E-08 4.6320E-08 2.9294E-09 2.3201E-09 - 1.7783E+03 5.1285E-08 3.1802E-08 1.9339E-09 1.5235E-09 - 1.9953E+03 3.5345E-08 2.1655E-08 1.3585E-09 1.0659E-09 - 2.2387E+03 2.4203E-08 1.4737E-08 8.8790E-10 6.8474E-10 - 2.5119E+03 1.6514E-08 1.0030E-08 5.9775E-10 4.5116E-10 - 2.8184E+03 1.1339E-08 6.6885E-09 4.1434E-10 3.1582E-10 - 3.1623E+03 7.8716E-09 4.6459E-09 2.6909E-10 2.0803E-10 - 3.5481E+03 5.2572E-09 3.0911E-09 1.8121E-10 1.3927E-10 - 3.9811E+03 3.5797E-09 2.0779E-09 1.2318E-10 9.4372E-11 - 4.4668E+03 2.4117E-09 1.3896E-09 8.2655E-11 5.9841E-11 - 5.0119E+03 1.6222E-09 9.3552E-10 5.4248E-11 3.7332E-11 - 5.6234E+03 1.0887E-09 6.2528E-10 3.6756E-11 2.5876E-11 - 6.3096E+03 7.3149E-10 4.1968E-10 2.3198E-11 1.6872E-11 - 7.0795E+03 4.9026E-10 2.8137E-10 1.4920E-11 1.0944E-11 - 7.9433E+03 3.2677E-10 1.8549E-10 9.7275E-12 7.2642E-12 - 8.9125E+03 2.1724E-10 1.2242E-10 6.1769E-12 4.7025E-12 - 1.0000E+04 1.4627E-10 8.0158E-11 4.2077E-12 3.0125E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4999E+04 1.5369E+04 7.5746E+03 6.8424E+03 - 1.1220E-01 1.2912E+04 1.3225E+04 6.5951E+03 5.8990E+03 - 1.2589E-01 1.1068E+04 1.1339E+04 5.6710E+03 5.0174E+03 - 1.4125E-01 9.4359E+03 9.6335E+03 4.8453E+03 4.2541E+03 - 1.5849E-01 7.9877E+03 8.1172E+03 4.1133E+03 3.5800E+03 - 1.7783E-01 6.6655E+03 6.8153E+03 3.4697E+03 2.9699E+03 - 1.9953E-01 5.5008E+03 5.6053E+03 2.9035E+03 2.4423E+03 - 2.2387E-01 4.4906E+03 4.5616E+03 2.4119E+03 2.0036E+03 - 2.5119E-01 3.6223E+03 3.7061E+03 1.9773E+03 1.6307E+03 - 2.8184E-01 2.8884E+03 2.9567E+03 1.6112E+03 1.3087E+03 - 3.1623E-01 2.2914E+03 2.3482E+03 1.3005E+03 1.0437E+03 - 3.5481E-01 1.8144E+03 1.8576E+03 1.0363E+03 8.2982E+02 - 3.9811E-01 1.4258E+03 1.4489E+03 8.2013E+02 6.4761E+02 - 4.4668E-01 1.1090E+03 1.1202E+03 6.4240E+02 5.0157E+02 - 5.0119E-01 8.5890E+02 8.6902E+02 4.9797E+02 3.8615E+02 - 5.6234E-01 6.6329E+02 6.6761E+02 3.8489E+02 2.9497E+02 - 6.3096E-01 5.1018E+02 5.0756E+02 2.9728E+02 2.2849E+02 - 7.0795E-01 3.8915E+02 3.8744E+02 2.2727E+02 1.7546E+02 - 7.9433E-01 2.9470E+02 2.9449E+02 1.7025E+02 1.3317E+02 - 8.9125E-01 2.2103E+02 2.2150E+02 1.3038E+02 1.0053E+02 - 1.0000E+00 1.6709E+02 1.6742E+02 9.6952E+01 7.5123E+01 - 1.1220E+00 1.2627E+02 1.2631E+02 7.2064E+01 5.6580E+01 - 1.2589E+00 9.6193E+01 9.4274E+01 5.3849E+01 4.1908E+01 - 1.4125E+00 7.2530E+01 7.0112E+01 4.0173E+01 3.1122E+01 - 1.5849E+00 5.4392E+01 5.1900E+01 2.9437E+01 2.3272E+01 - 1.7783E+00 4.0428E+01 3.8428E+01 2.1735E+01 1.6693E+01 - 1.9953E+00 2.9887E+01 2.8783E+01 1.5927E+01 1.1962E+01 - 2.2387E+00 2.2056E+01 2.1048E+01 1.1354E+01 8.7193E+00 - 2.5119E+00 1.6215E+01 1.5030E+01 8.2931E+00 6.2944E+00 - 2.8184E+00 1.1954E+01 1.0939E+01 5.9666E+00 4.5608E+00 - 3.1623E+00 8.6497E+00 8.0066E+00 4.2264E+00 3.2332E+00 - 3.5481E+00 6.3399E+00 5.7762E+00 3.0376E+00 2.3042E+00 - 3.9811E+00 4.6251E+00 4.1482E+00 2.1489E+00 1.6221E+00 - 4.4668E+00 3.3367E+00 2.9859E+00 1.5074E+00 1.1150E+00 - 5.0119E+00 2.4010E+00 2.1241E+00 1.0640E+00 7.8173E-01 - 5.6234E+00 1.7266E+00 1.5064E+00 7.3007E-01 5.4311E-01 - 6.3096E+00 1.2364E+00 1.0847E+00 5.0253E-01 3.7736E-01 - 7.0795E+00 8.8650E-01 7.7388E-01 3.4310E-01 2.5900E-01 - 7.9433E+00 6.3309E-01 5.4013E-01 2.3798E-01 1.7712E-01 - 8.9125E+00 4.4925E-01 3.8263E-01 1.6671E-01 1.2477E-01 - 1.0000E+01 3.2708E-01 2.7405E-01 1.1281E-01 8.5078E-02 - 1.1220E+01 2.3437E-01 1.9450E-01 7.6058E-02 5.7437E-02 - 1.2589E+01 1.6686E-01 1.3863E-01 5.1433E-02 3.8920E-02 - 1.4125E+01 1.1910E-01 9.8167E-02 3.5181E-02 2.6746E-02 - 1.5849E+01 8.5442E-02 6.9241E-02 2.4009E-02 1.7854E-02 - 1.7783E+01 5.9833E-02 4.9104E-02 1.5882E-02 1.2190E-02 - 1.9953E+01 4.2813E-02 3.5188E-02 1.0717E-02 8.2095E-03 - 2.2387E+01 3.0807E-02 2.4599E-02 7.2811E-03 5.1930E-03 - 2.5119E+01 2.2162E-02 1.7292E-02 4.7280E-03 3.5270E-03 - 2.8184E+01 1.6050E-02 1.2696E-02 3.2572E-03 2.5587E-03 - 3.1623E+01 1.1152E-02 8.7792E-03 2.1188E-03 1.6434E-03 - 3.5481E+01 7.9611E-03 6.2076E-03 1.4159E-03 1.0980E-03 - 3.9811E+01 5.6756E-03 4.3815E-03 9.4853E-04 7.2579E-04 - 4.4668E+01 4.0304E-03 3.0860E-03 6.3374E-04 4.8394E-04 - 5.0119E+01 2.8687E-03 2.1759E-03 4.2047E-04 3.2218E-04 - 5.6234E+01 2.0321E-03 1.5416E-03 2.7892E-04 2.1479E-04 - 6.3096E+01 1.4381E-03 1.0871E-03 1.8459E-04 1.4193E-04 - 7.0795E+01 1.0178E-03 7.6079E-04 1.2219E-04 9.4190E-05 - 7.9433E+01 7.1732E-04 5.3475E-04 8.1594E-05 6.3351E-05 - 8.9125E+01 5.0908E-04 3.7815E-04 5.4044E-05 4.2744E-05 - 1.0000E+02 3.6114E-04 2.6454E-04 3.5586E-05 2.8642E-05 - 1.1220E+02 2.5539E-04 1.8522E-04 2.3517E-05 1.9023E-05 - 1.2589E+02 1.8013E-04 1.2982E-04 1.5839E-05 1.2713E-05 - 1.4125E+02 1.2673E-04 9.0366E-05 1.0604E-05 8.4282E-06 - 1.5849E+02 8.8927E-05 6.3056E-05 7.0539E-06 5.5722E-06 - 1.7783E+02 6.2392E-05 4.4155E-05 4.7155E-06 3.8048E-06 - 1.9953E+02 4.3544E-05 3.0821E-05 3.1105E-06 2.5207E-06 - 2.2387E+02 3.0683E-05 2.1398E-05 2.0286E-06 1.6833E-06 - 2.5119E+02 2.1723E-05 1.4866E-05 1.3979E-06 1.1342E-06 - 2.8184E+02 1.5194E-05 1.0360E-05 9.6288E-07 7.5973E-07 - 3.1623E+02 1.0544E-05 7.1810E-06 6.3235E-07 5.1076E-07 - 3.5481E+02 7.3547E-06 4.9644E-06 4.2326E-07 3.3970E-07 - 3.9811E+02 5.1344E-06 3.4276E-06 2.8544E-07 2.2908E-07 - 4.4668E+02 3.5923E-06 2.3641E-06 1.8958E-07 1.5616E-07 - 5.0119E+02 2.5004E-06 1.6347E-06 1.2726E-07 1.0494E-07 - 5.6234E+02 1.7488E-06 1.1338E-06 8.5721E-08 6.9200E-08 - 6.3096E+02 1.2137E-06 7.8459E-07 5.7851E-08 4.5742E-08 - 7.0795E+02 8.4296E-07 5.4192E-07 3.8476E-08 3.0919E-08 - 7.9433E+02 5.8792E-07 3.7360E-07 2.6353E-08 2.0958E-08 - 8.9125E+02 4.0572E-07 2.5663E-07 1.7551E-08 1.4195E-08 - 1.0000E+03 2.8155E-07 1.7738E-07 1.2024E-08 9.4016E-09 - 1.1220E+03 1.9437E-07 1.2092E-07 8.1041E-09 6.3134E-09 - 1.2589E+03 1.3447E-07 8.2069E-08 5.4318E-09 4.1135E-09 - 1.4125E+03 9.2110E-08 5.5944E-08 3.7280E-09 2.7323E-09 - 1.5849E+03 6.2904E-08 3.8586E-08 2.4055E-09 1.9060E-09 - 1.7783E+03 4.3278E-08 2.6556E-08 1.5972E-09 1.2536E-09 - 1.9953E+03 2.9711E-08 1.7943E-08 1.0959E-09 7.8705E-10 - 2.2387E+03 2.0124E-08 1.2094E-08 7.3627E-10 5.2612E-10 - 2.5119E+03 1.3698E-08 8.2634E-09 4.8329E-10 3.4431E-10 - 2.8184E+03 9.3530E-09 5.6091E-09 3.1679E-10 2.4483E-10 - 3.1623E+03 6.4313E-09 3.7547E-09 2.0758E-10 1.6253E-10 - 3.5481E+03 4.2576E-09 2.4836E-09 1.3885E-10 1.0400E-10 - 3.9811E+03 2.8676E-09 1.6756E-09 9.5749E-11 6.4748E-11 - 4.4668E+03 1.9135E-09 1.1183E-09 6.4983E-11 4.3258E-11 - 5.0119E+03 1.3011E-09 7.4288E-10 4.2486E-11 3.0536E-11 - 5.6234E+03 8.7889E-10 4.9497E-10 2.6561E-11 2.0212E-11 - 6.3096E+03 5.7480E-10 3.3069E-10 1.7597E-11 1.2896E-11 - 7.0795E+03 3.8535E-10 2.1833E-10 1.1987E-11 8.3494E-12 - 7.9433E+03 2.5535E-10 1.4429E-10 7.6105E-12 5.7361E-12 - 8.9125E+03 1.6835E-10 9.6805E-11 5.3016E-12 3.6170E-12 - 1.0000E+04 1.1266E-10 6.4158E-11 3.4951E-12 2.2527E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5092E+04 1.5346E+04 7.4717E+03 6.9371E+03 - 1.1220E-01 1.2956E+04 1.3186E+04 6.5516E+03 5.9612E+03 - 1.2589E-01 1.1157E+04 1.1238E+04 5.6541E+03 5.0692E+03 - 1.4125E-01 9.5249E+03 9.5910E+03 4.8193E+03 4.3161E+03 - 1.5849E-01 8.0186E+03 8.0914E+03 4.0873E+03 3.6043E+03 - 1.7783E-01 6.6678E+03 6.7408E+03 3.4400E+03 2.9863E+03 - 1.9953E-01 5.4862E+03 5.5490E+03 2.8712E+03 2.4770E+03 - 2.2387E-01 4.4788E+03 4.5053E+03 2.3737E+03 2.0237E+03 - 2.5119E-01 3.6091E+03 3.6238E+03 1.9422E+03 1.6397E+03 - 2.8184E-01 2.8944E+03 2.9121E+03 1.5714E+03 1.3128E+03 - 3.1623E-01 2.2963E+03 2.3187E+03 1.2620E+03 1.0458E+03 - 3.5481E-01 1.8123E+03 1.8228E+03 1.0012E+03 8.2741E+02 - 3.9811E-01 1.4304E+03 1.4200E+03 7.9305E+02 6.5131E+02 - 4.4668E-01 1.1065E+03 1.1035E+03 6.2191E+02 5.1327E+02 - 5.0119E-01 8.5293E+02 8.5335E+02 4.8324E+02 3.9511E+02 - 5.6234E-01 6.6187E+02 6.5403E+02 3.7488E+02 3.0125E+02 - 6.3096E-01 5.0956E+02 5.0269E+02 2.8857E+02 2.2984E+02 - 7.0795E-01 3.8989E+02 3.8273E+02 2.2136E+02 1.7495E+02 - 7.9433E-01 2.9664E+02 2.9217E+02 1.6671E+02 1.3511E+02 - 8.9125E-01 2.2374E+02 2.2055E+02 1.2582E+02 1.0099E+02 - 1.0000E+00 1.6834E+02 1.6467E+02 9.6304E+01 7.5153E+01 - 1.1220E+00 1.2769E+02 1.2386E+02 7.1870E+01 5.6666E+01 - 1.2589E+00 9.6710E+01 9.2948E+01 5.3384E+01 4.2488E+01 - 1.4125E+00 7.2865E+01 6.9339E+01 3.9839E+01 3.1077E+01 - 1.5849E+00 5.4377E+01 5.1754E+01 2.9867E+01 2.2844E+01 - 1.7783E+00 4.0296E+01 3.8243E+01 2.2115E+01 1.6908E+01 - 1.9953E+00 2.9911E+01 2.8625E+01 1.6075E+01 1.2364E+01 - 2.2387E+00 2.2127E+01 2.1235E+01 1.1585E+01 8.8885E+00 - 2.5119E+00 1.6357E+01 1.5277E+01 8.2257E+00 6.3390E+00 - 2.8184E+00 1.1886E+01 1.0921E+01 5.8490E+00 4.6315E+00 - 3.1623E+00 8.7065E+00 7.9565E+00 4.2847E+00 3.2625E+00 - 3.5481E+00 6.3641E+00 5.7624E+00 3.0170E+00 2.2951E+00 - 3.9811E+00 4.5713E+00 4.1417E+00 2.1168E+00 1.6236E+00 - 4.4668E+00 3.2965E+00 2.9914E+00 1.4893E+00 1.1440E+00 - 5.0119E+00 2.4153E+00 2.1278E+00 1.0347E+00 7.8944E-01 - 5.6234E+00 1.7308E+00 1.5138E+00 7.1948E-01 5.4804E-01 - 6.3096E+00 1.2356E+00 1.0894E+00 4.9960E-01 3.8544E-01 - 7.0795E+00 8.9278E-01 7.7842E-01 3.5266E-01 2.6332E-01 - 7.9433E+00 6.4720E-01 5.4997E-01 2.4343E-01 1.7869E-01 - 8.9125E+00 4.6417E-01 3.9234E-01 1.6248E-01 1.2536E-01 - 1.0000E+01 3.2550E-01 2.7570E-01 1.1218E-01 8.4376E-02 - 1.1220E+01 2.3341E-01 1.9419E-01 7.6568E-02 5.8112E-02 - 1.2589E+01 1.6531E-01 1.3782E-01 5.1427E-02 3.9122E-02 - 1.4125E+01 1.1822E-01 9.7115E-02 3.4486E-02 2.6328E-02 - 1.5849E+01 8.4842E-02 6.9463E-02 2.3755E-02 1.8097E-02 - 1.7783E+01 6.0409E-02 4.9394E-02 1.5894E-02 1.1907E-02 - 1.9953E+01 4.3153E-02 3.4810E-02 1.0665E-02 7.9232E-03 - 2.2387E+01 3.0589E-02 2.4737E-02 7.0668E-03 5.3219E-03 - 2.5119E+01 2.1634E-02 1.7463E-02 4.6307E-03 3.5937E-03 - 2.8184E+01 1.5162E-02 1.2535E-02 3.1087E-03 2.3465E-03 - 3.1623E+01 1.1139E-02 8.7768E-03 2.1270E-03 1.6400E-03 - 3.5481E+01 7.9365E-03 6.2040E-03 1.4191E-03 1.0966E-03 - 3.9811E+01 5.6540E-03 4.3843E-03 9.5179E-04 7.2766E-04 - 4.4668E+01 4.0287E-03 3.0856E-03 6.3341E-04 4.8494E-04 - 5.0119E+01 2.8638E-03 2.1742E-03 4.1958E-04 3.2356E-04 - 5.6234E+01 2.0229E-03 1.5394E-03 2.7800E-04 2.1534E-04 - 6.3096E+01 1.4313E-03 1.0835E-03 1.8502E-04 1.4515E-04 - 7.0795E+01 1.0143E-03 7.6312E-04 1.2393E-04 9.7550E-05 - 7.9433E+01 7.1886E-04 5.4023E-04 8.1873E-05 6.5261E-05 - 8.9125E+01 5.0616E-04 3.7897E-04 5.4660E-05 4.3215E-05 - 1.0000E+02 3.6074E-04 2.6502E-04 3.6177E-05 2.8385E-05 - 1.1220E+02 2.5474E-04 1.8570E-04 2.4042E-05 1.9079E-05 - 1.2589E+02 1.8006E-04 1.2984E-04 1.5822E-05 1.2676E-05 - 1.4125E+02 1.2643E-04 9.0381E-05 1.0414E-05 8.4257E-06 - 1.5849E+02 8.8547E-05 6.3062E-05 6.9778E-06 5.7304E-06 - 1.7783E+02 6.2404E-05 4.4069E-05 4.7512E-06 3.7926E-06 - 1.9953E+02 4.3770E-05 3.0695E-05 3.2162E-06 2.5009E-06 - 2.2387E+02 3.0506E-05 2.1350E-05 2.0740E-06 1.7042E-06 - 2.5119E+02 2.1388E-05 1.4888E-05 1.3807E-06 1.1265E-06 - 2.8184E+02 1.4968E-05 1.0283E-05 9.5671E-07 7.5900E-07 - 3.1623E+02 1.0563E-05 7.1746E-06 6.2165E-07 5.1167E-07 - 3.5481E+02 7.3813E-06 4.9615E-06 4.2142E-07 3.4205E-07 - 3.9811E+02 5.1318E-06 3.4372E-06 2.8177E-07 2.2955E-07 - 4.4668E+02 3.5924E-06 2.3808E-06 1.8971E-07 1.5550E-07 - 5.0119E+02 2.5184E-06 1.6415E-06 1.2721E-07 1.0456E-07 - 5.6234E+02 1.7496E-06 1.1373E-06 8.6232E-08 6.8831E-08 - 6.3096E+02 1.2117E-06 7.8542E-07 5.7423E-08 4.5929E-08 - 7.0795E+02 8.4733E-07 5.4225E-07 3.8742E-08 3.1286E-08 - 7.9433E+02 5.8627E-07 3.7362E-07 2.6076E-08 2.1495E-08 - 8.9125E+02 4.0421E-07 2.5720E-07 1.7419E-08 1.4060E-08 - 1.0000E+03 2.8056E-07 1.7759E-07 1.1898E-08 9.4845E-09 - 1.1220E+03 1.9327E-07 1.2069E-07 8.1197E-09 6.5050E-09 - 1.2589E+03 1.3343E-07 8.2719E-08 5.5470E-09 4.4007E-09 - 1.4125E+03 9.1608E-08 5.6537E-08 3.6508E-09 2.7970E-09 - 1.5849E+03 6.3053E-08 3.8081E-08 2.3615E-09 1.7429E-09 - 1.7783E+03 4.3059E-08 2.5943E-08 1.6215E-09 1.2494E-09 - 1.9953E+03 2.9494E-08 1.7810E-08 1.0689E-09 8.4647E-10 - 2.2387E+03 2.0082E-08 1.2086E-08 7.2420E-10 5.5818E-10 - 2.5119E+03 1.3617E-08 8.1502E-09 4.8670E-10 3.4085E-10 - 2.8184E+03 9.2379E-09 5.4827E-09 3.0865E-10 2.1991E-10 - 3.1623E+03 6.4294E-09 3.7758E-09 2.1513E-10 1.6050E-10 - 3.5481E+03 4.2806E-09 2.4913E-09 1.4319E-10 1.0609E-10 - 3.9811E+03 2.8878E-09 1.6877E-09 9.3981E-11 6.7043E-11 - 4.4668E+03 1.9419E-09 1.1356E-09 6.3623E-11 4.3599E-11 - 5.0119E+03 1.2918E-09 7.6362E-10 4.0762E-11 3.0024E-11 - 5.6234E+03 8.6316E-10 5.1241E-10 2.7583E-11 1.9022E-11 - 6.3096E+03 5.8452E-10 3.3196E-10 1.7586E-11 1.2274E-11 - 7.0795E+03 3.8828E-10 2.1921E-10 1.1664E-11 8.2017E-12 - 7.9433E+03 2.5895E-10 1.4530E-10 8.0550E-12 5.4920E-12 - 8.9125E+03 1.7291E-10 9.6769E-11 4.5761E-12 3.3322E-12 - 1.0000E+04 1.1403E-10 6.1909E-11 2.9682E-12 2.1570E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5112E+04 1.5095E+04 7.2576E+03 6.9442E+03 - 1.1220E-01 1.3013E+04 1.2959E+04 6.3134E+03 5.9777E+03 - 1.2589E-01 1.1117E+04 1.1030E+04 5.4394E+03 5.1220E+03 - 1.4125E-01 9.4793E+03 9.3635E+03 4.6374E+03 4.3089E+03 - 1.5849E-01 7.9937E+03 7.8443E+03 3.9299E+03 3.6062E+03 - 1.7783E-01 6.6723E+03 6.5093E+03 3.2965E+03 3.0219E+03 - 1.9953E-01 5.4841E+03 5.3784E+03 2.7413E+03 2.5001E+03 - 2.2387E-01 4.4682E+03 4.3929E+03 2.2727E+03 2.0437E+03 - 2.5119E-01 3.6175E+03 3.5379E+03 1.8503E+03 1.6553E+03 - 2.8184E-01 2.8872E+03 2.8356E+03 1.5050E+03 1.3333E+03 - 3.1623E-01 2.2891E+03 2.2516E+03 1.2196E+03 1.0566E+03 - 3.5481E-01 1.8088E+03 1.7661E+03 9.7220E+02 8.3500E+02 - 3.9811E-01 1.4227E+03 1.3826E+03 7.6466E+02 6.5919E+02 - 4.4668E-01 1.1077E+03 1.0718E+03 5.9560E+02 5.0940E+02 - 5.0119E-01 8.5332E+02 8.2661E+02 4.6444E+02 3.9556E+02 - 5.6234E-01 6.5478E+02 6.3556E+02 3.6111E+02 3.0609E+02 - 6.3096E-01 5.0481E+02 4.8732E+02 2.7902E+02 2.3407E+02 - 7.0795E-01 3.8776E+02 3.6961E+02 2.1544E+02 1.7773E+02 - 7.9433E-01 2.9569E+02 2.8239E+02 1.6400E+02 1.3439E+02 - 8.9125E-01 2.2433E+02 2.1439E+02 1.2354E+02 9.9896E+01 - 1.0000E+00 1.6853E+02 1.6211E+02 9.2885E+01 7.5491E+01 - 1.1220E+00 1.2766E+02 1.2244E+02 6.9886E+01 5.6051E+01 - 1.2589E+00 9.6409E+01 9.1414E+01 5.2436E+01 4.1874E+01 - 1.4125E+00 7.2432E+01 6.8049E+01 3.9154E+01 3.1238E+01 - 1.5849E+00 5.3970E+01 5.1047E+01 2.8887E+01 2.2967E+01 - 1.7783E+00 4.0242E+01 3.7991E+01 2.1078E+01 1.6599E+01 - 1.9953E+00 2.9872E+01 2.7707E+01 1.5695E+01 1.2068E+01 - 2.2387E+00 2.1922E+01 2.0464E+01 1.1489E+01 8.9293E+00 - 2.5119E+00 1.6016E+01 1.4908E+01 8.3161E+00 6.3409E+00 - 2.8184E+00 1.1656E+01 1.0716E+01 5.9395E+00 4.4620E+00 - 3.1623E+00 8.7542E+00 7.8813E+00 4.2134E+00 3.2460E+00 - 3.5481E+00 6.3391E+00 5.7186E+00 2.9955E+00 2.3008E+00 - 3.9811E+00 4.5771E+00 4.1051E+00 2.1327E+00 1.6250E+00 - 4.4668E+00 3.3108E+00 2.9325E+00 1.4889E+00 1.1358E+00 - 5.0119E+00 2.3797E+00 2.1174E+00 1.0367E+00 7.9600E-01 - 5.6234E+00 1.7192E+00 1.5175E+00 7.2582E-01 5.5970E-01 - 6.3096E+00 1.2344E+00 1.0935E+00 5.0358E-01 3.8726E-01 - 7.0795E+00 8.8765E-01 7.9158E-01 3.5309E-01 2.6132E-01 - 7.9433E+00 6.4327E-01 5.5774E-01 2.3995E-01 1.8171E-01 - 8.9125E+00 4.6032E-01 3.9337E-01 1.6218E-01 1.2764E-01 - 1.0000E+01 3.2831E-01 2.7673E-01 1.1263E-01 8.3504E-02 - 1.1220E+01 2.3489E-01 1.9557E-01 7.7188E-02 5.6462E-02 - 1.2589E+01 1.6737E-01 1.3962E-01 5.2409E-02 3.8461E-02 - 1.4125E+01 1.1863E-01 9.9361E-02 3.5379E-02 2.6308E-02 - 1.5849E+01 8.4912E-02 6.9997E-02 2.3595E-02 1.7757E-02 - 1.7783E+01 6.1005E-02 4.9675E-02 1.5804E-02 1.1746E-02 - 1.9953E+01 4.3847E-02 3.5472E-02 1.0508E-02 7.9011E-03 - 2.2387E+01 3.1095E-02 2.5122E-02 6.9427E-03 5.3489E-03 - 2.5119E+01 2.1871E-02 1.7668E-02 4.8653E-03 3.7395E-03 - 2.8184E+01 1.5450E-02 1.2478E-02 3.3253E-03 2.4830E-03 - 3.1623E+01 1.1140E-02 8.7989E-03 2.1388E-03 1.6324E-03 - 3.5481E+01 7.9512E-03 6.2000E-03 1.4275E-03 1.0948E-03 - 3.9811E+01 5.6683E-03 4.3837E-03 9.4536E-04 7.3151E-04 - 4.4668E+01 4.0315E-03 3.1079E-03 6.2650E-04 4.8918E-04 - 5.0119E+01 2.8680E-03 2.1970E-03 4.1474E-04 3.2707E-04 - 5.6234E+01 2.0375E-03 1.5480E-03 2.7605E-04 2.1999E-04 - 6.3096E+01 1.4534E-03 1.0885E-03 1.8571E-04 1.4676E-04 - 7.0795E+01 1.0275E-03 7.6705E-04 1.2366E-04 9.7275E-05 - 7.9433E+01 7.2343E-04 5.3899E-04 8.1057E-05 6.4348E-05 - 8.9125E+01 5.1637E-04 3.7837E-04 5.3343E-05 4.2413E-05 - 1.0000E+02 3.6046E-04 2.6485E-04 3.5671E-05 2.8289E-05 - 1.1220E+02 2.5354E-04 1.8581E-04 2.3891E-05 1.8801E-05 - 1.2589E+02 1.7882E-04 1.3038E-04 1.5800E-05 1.2652E-05 - 1.4125E+02 1.2637E-04 9.0567E-05 1.0426E-05 8.4566E-06 - 1.5849E+02 8.9122E-05 6.2920E-05 6.9276E-06 5.6033E-06 - 1.7783E+02 6.2489E-05 4.3987E-05 4.6372E-06 3.7818E-06 - 1.9953E+02 4.3817E-05 3.0635E-05 3.0886E-06 2.5625E-06 - 2.2387E+02 3.0605E-05 2.1227E-05 2.0605E-06 1.6762E-06 - 2.5119E+02 2.1413E-05 1.4836E-05 1.3665E-06 1.1267E-06 - 2.8184E+02 1.5037E-05 1.0315E-05 9.5186E-07 7.7903E-07 - 3.1623E+02 1.0507E-05 7.1409E-06 6.2581E-07 5.0910E-07 - 3.5481E+02 7.3411E-06 4.9566E-06 4.2262E-07 3.4074E-07 - 3.9811E+02 5.1233E-06 3.4203E-06 2.8663E-07 2.2663E-07 - 4.4668E+02 3.5823E-06 2.3723E-06 1.8988E-07 1.5271E-07 - 5.0119E+02 2.4996E-06 1.6418E-06 1.2828E-07 1.0245E-07 - 5.6234E+02 1.7419E-06 1.1291E-06 8.6182E-08 6.9025E-08 - 6.3096E+02 1.2077E-06 7.7825E-07 5.7652E-08 4.6013E-08 - 7.0795E+02 8.3727E-07 5.3906E-07 4.0172E-08 3.0767E-08 - 7.9433E+02 5.8229E-07 3.7238E-07 2.6834E-08 2.1184E-08 - 8.9125E+02 4.0206E-07 2.5619E-07 1.7487E-08 1.4058E-08 - 1.0000E+03 2.7895E-07 1.7778E-07 1.1796E-08 9.0628E-09 - 1.1220E+03 1.9272E-07 1.2023E-07 7.9553E-09 6.2178E-09 - 1.2589E+03 1.3280E-07 8.1642E-08 5.3365E-09 4.2804E-09 - 1.4125E+03 9.1175E-08 5.5878E-08 3.5641E-09 2.8271E-09 - 1.5849E+03 6.2902E-08 3.8125E-08 2.3011E-09 1.7977E-09 - 1.7783E+03 4.3259E-08 2.6107E-08 1.5085E-09 1.2466E-09 - 1.9953E+03 2.9734E-08 1.7863E-08 1.0620E-09 8.4704E-10 - 2.2387E+03 2.0125E-08 1.2048E-08 7.0776E-10 5.3747E-10 - 2.5119E+03 1.3652E-08 8.1265E-09 4.6733E-10 3.4133E-10 - 2.8184E+03 9.3214E-09 5.4718E-09 3.2330E-10 2.3895E-10 - 3.1623E+03 6.4582E-09 3.7844E-09 2.1831E-10 1.5730E-10 - 3.5481E+03 4.2645E-09 2.4967E-09 1.4244E-10 1.0216E-10 - 3.9811E+03 2.8687E-09 1.6746E-09 9.2107E-11 6.6494E-11 - 4.4668E+03 1.9307E-09 1.1204E-09 6.0447E-11 4.4859E-11 - 5.0119E+03 1.2967E-09 7.5435E-10 4.2295E-11 3.0043E-11 - 5.6234E+03 8.6376E-10 4.9595E-10 2.7716E-11 1.9514E-11 - 6.3096E+03 5.7839E-10 3.3023E-10 1.8029E-11 1.2873E-11 - 7.0795E+03 3.8507E-10 2.1755E-10 1.1926E-11 8.6124E-12 - 7.9433E+03 2.5610E-10 1.4374E-10 7.9694E-12 5.7404E-12 - 8.9125E+03 1.7151E-10 9.5507E-11 5.2170E-12 3.8130E-12 - 1.0000E+04 1.1461E-10 6.3077E-11 3.1985E-12 2.2768E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4879E+04 1.4688E+04 7.0521E+03 6.8842E+03 - 1.1220E-01 1.2781E+04 1.2612E+04 6.1177E+03 5.9472E+03 - 1.2589E-01 1.0942E+04 1.0714E+04 5.2487E+03 5.0994E+03 - 1.4125E-01 9.3134E+03 9.0861E+03 4.4694E+03 4.3223E+03 - 1.5849E-01 7.8683E+03 7.6510E+03 3.7744E+03 3.6232E+03 - 1.7783E-01 6.5791E+03 6.3683E+03 3.1748E+03 3.0110E+03 - 1.9953E-01 5.4293E+03 5.2431E+03 2.6551E+03 2.4783E+03 - 2.2387E-01 4.4217E+03 4.2614E+03 2.1902E+03 2.0319E+03 - 2.5119E-01 3.5719E+03 3.4365E+03 1.7823E+03 1.6518E+03 - 2.8184E-01 2.8524E+03 2.7456E+03 1.4519E+03 1.3258E+03 - 3.1623E-01 2.2629E+03 2.1735E+03 1.1730E+03 1.0621E+03 - 3.5481E-01 1.7901E+03 1.7190E+03 9.3856E+02 8.4422E+02 - 3.9811E-01 1.3980E+03 1.3493E+03 7.4371E+02 6.5938E+02 - 4.4668E-01 1.0896E+03 1.0521E+03 5.7606E+02 5.1472E+02 - 5.0119E-01 8.5215E+02 8.1671E+02 4.4624E+02 3.9972E+02 - 5.6234E-01 6.5985E+02 6.2834E+02 3.4546E+02 3.0839E+02 - 6.3096E-01 5.0644E+02 4.8412E+02 2.6975E+02 2.3748E+02 - 7.0795E-01 3.8852E+02 3.6946E+02 2.0836E+02 1.7970E+02 - 7.9433E-01 2.9416E+02 2.7951E+02 1.5776E+02 1.3518E+02 - 8.9125E-01 2.2075E+02 2.0931E+02 1.2024E+02 1.0090E+02 - 1.0000E+00 1.6746E+02 1.5839E+02 9.0778E+01 7.5802E+01 - 1.1220E+00 1.2698E+02 1.2014E+02 6.8491E+01 5.6562E+01 - 1.2589E+00 9.5291E+01 8.9971E+01 5.0946E+01 4.2287E+01 - 1.4125E+00 7.1685E+01 6.6752E+01 3.7965E+01 3.1102E+01 - 1.5849E+00 5.3509E+01 5.0369E+01 2.8223E+01 2.2616E+01 - 1.7783E+00 3.9864E+01 3.7067E+01 2.0634E+01 1.6658E+01 - 1.9953E+00 2.9468E+01 2.7144E+01 1.5176E+01 1.2114E+01 - 2.2387E+00 2.1728E+01 2.0184E+01 1.1275E+01 8.6761E+00 - 2.5119E+00 1.5968E+01 1.4811E+01 8.3239E+00 6.3643E+00 - 2.8184E+00 1.1598E+01 1.0905E+01 6.0515E+00 4.6108E+00 - 3.1623E+00 8.6331E+00 7.8491E+00 4.1861E+00 3.2079E+00 - 3.5481E+00 6.2380E+00 5.6321E+00 2.9722E+00 2.2670E+00 - 3.9811E+00 4.5291E+00 4.0403E+00 2.1167E+00 1.5938E+00 - 4.4668E+00 3.2803E+00 2.9322E+00 1.4894E+00 1.1150E+00 - 5.0119E+00 2.3665E+00 2.1020E+00 1.0311E+00 7.7654E-01 - 5.6234E+00 1.7110E+00 1.4949E+00 7.2596E-01 5.4391E-01 - 6.3096E+00 1.2323E+00 1.0663E+00 5.0960E-01 3.7759E-01 - 7.0795E+00 8.7603E-01 7.6437E-01 3.4666E-01 2.5911E-01 - 7.9433E+00 6.2682E-01 5.4811E-01 2.3841E-01 1.7875E-01 - 8.9125E+00 4.5109E-01 3.9168E-01 1.5802E-01 1.2235E-01 - 1.0000E+01 3.2688E-01 2.7864E-01 1.1082E-01 8.3650E-02 - 1.1220E+01 2.3461E-01 1.9525E-01 7.5391E-02 5.7065E-02 - 1.2589E+01 1.6766E-01 1.3813E-01 5.1909E-02 3.8660E-02 - 1.4125E+01 1.1892E-01 9.8457E-02 3.5430E-02 2.6343E-02 - 1.5849E+01 8.4553E-02 6.9678E-02 2.3514E-02 1.7888E-02 - 1.7783E+01 6.0456E-02 4.9229E-02 1.5429E-02 1.1999E-02 - 1.9953E+01 4.2808E-02 3.4764E-02 1.0396E-02 8.1431E-03 - 2.2387E+01 3.0553E-02 2.4517E-02 7.1470E-03 5.5959E-03 - 2.5119E+01 2.2010E-02 1.7642E-02 4.8047E-03 3.8729E-03 - 2.8184E+01 1.5548E-02 1.2600E-02 3.1197E-03 2.3633E-03 - 3.1623E+01 1.1147E-02 8.7630E-03 2.1220E-03 1.6364E-03 - 3.5481E+01 7.9422E-03 6.1996E-03 1.4190E-03 1.0921E-03 - 3.9811E+01 5.6566E-03 4.3732E-03 9.4486E-04 7.2795E-04 - 4.4668E+01 4.0150E-03 3.0924E-03 6.2482E-04 4.8564E-04 - 5.0119E+01 2.8564E-03 2.1844E-03 4.1548E-04 3.2435E-04 - 5.6234E+01 2.0259E-03 1.5376E-03 2.7756E-04 2.1509E-04 - 6.3096E+01 1.4434E-03 1.0864E-03 1.8280E-04 1.4251E-04 - 7.0795E+01 1.0261E-03 7.6646E-04 1.2203E-04 9.6325E-05 - 7.9433E+01 7.2135E-04 5.3496E-04 8.0650E-05 6.4752E-05 - 8.9125E+01 5.0704E-04 3.7386E-04 5.3033E-05 4.2984E-05 - 1.0000E+02 3.5953E-04 2.6429E-04 3.5527E-05 2.8386E-05 - 1.1220E+02 2.5331E-04 1.8493E-04 2.3624E-05 1.8752E-05 - 1.2589E+02 1.7938E-04 1.2953E-04 1.5871E-05 1.2577E-05 - 1.4125E+02 1.2644E-04 9.0389E-05 1.0540E-05 8.5638E-06 - 1.5849E+02 8.8637E-05 6.3047E-05 6.9635E-06 5.7378E-06 - 1.7783E+02 6.2198E-05 4.4129E-05 4.6315E-06 3.8693E-06 - 1.9953E+02 4.3625E-05 3.0686E-05 3.0717E-06 2.5651E-06 - 2.2387E+02 3.0650E-05 2.1351E-05 2.0361E-06 1.7070E-06 - 2.5119E+02 2.1419E-05 1.4848E-05 1.4045E-06 1.1068E-06 - 2.8184E+02 1.5015E-05 1.0219E-05 9.6005E-07 7.3916E-07 - 3.1623E+02 1.0488E-05 7.1209E-06 6.2515E-07 5.0459E-07 - 3.5481E+02 7.3090E-06 4.9534E-06 4.1899E-07 3.3962E-07 - 3.9811E+02 5.0979E-06 3.4439E-06 2.8098E-07 2.2928E-07 - 4.4668E+02 3.5736E-06 2.3943E-06 1.8997E-07 1.5488E-07 - 5.0119E+02 2.4870E-06 1.6518E-06 1.2828E-07 1.0483E-07 - 5.6234E+02 1.7377E-06 1.1334E-06 8.6375E-08 6.9072E-08 - 6.3096E+02 1.2124E-06 7.7923E-07 5.7403E-08 4.6119E-08 - 7.0795E+02 8.4165E-07 5.3976E-07 3.9028E-08 3.1229E-08 - 7.9433E+02 5.8300E-07 3.7571E-07 2.5738E-08 2.1667E-08 - 8.9125E+02 4.0369E-07 2.5841E-07 1.7310E-08 1.4301E-08 - 1.0000E+03 2.8056E-07 1.7759E-07 1.1762E-08 9.3594E-09 - 1.1220E+03 1.9279E-07 1.2100E-07 8.1360E-09 6.2206E-09 - 1.2589E+03 1.3403E-07 8.2742E-08 5.4177E-09 4.0661E-09 - 1.4125E+03 9.1823E-08 5.6864E-08 3.5172E-09 2.8220E-09 - 1.5849E+03 6.2188E-08 3.8548E-08 2.4223E-09 1.8559E-09 - 1.7783E+03 4.2909E-08 2.5924E-08 1.5934E-09 1.2182E-09 - 1.9953E+03 2.9574E-08 1.7761E-08 1.0698E-09 8.1410E-10 - 2.2387E+03 2.0256E-08 1.2083E-08 7.3450E-10 5.3382E-10 - 2.5119E+03 1.3774E-08 8.2108E-09 4.9373E-10 3.6182E-10 - 2.8184E+03 9.2499E-09 5.5086E-09 3.3404E-10 2.3582E-10 - 3.1623E+03 6.4068E-09 3.7547E-09 2.1197E-10 1.4863E-10 - 3.5481E+03 4.2542E-09 2.4635E-09 1.4005E-10 1.0019E-10 - 3.9811E+03 2.8499E-09 1.6478E-09 9.4396E-11 6.9757E-11 - 4.4668E+03 1.9234E-09 1.1134E-09 6.2012E-11 4.6002E-11 - 5.0119E+03 1.2969E-09 7.5058E-10 4.2198E-11 2.9929E-11 - 5.6234E+03 8.5893E-10 4.9975E-10 2.8538E-11 1.8844E-11 - 6.3096E+03 5.7671E-10 3.2755E-10 1.7837E-11 1.2524E-11 - 7.0795E+03 3.8569E-10 2.1497E-10 1.1658E-11 8.1713E-12 - 7.9433E+03 2.5913E-10 1.4334E-10 7.6254E-12 5.4109E-12 - 8.9125E+03 1.7191E-10 9.5678E-11 4.9743E-12 3.6311E-12 - 1.0000E+04 1.1372E-10 6.3941E-11 3.1936E-12 2.4133E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4456E+04 1.4377E+04 6.8116E+03 6.8147E+03 - 1.1220E-01 1.2489E+04 1.2364E+04 5.9599E+03 5.8833E+03 - 1.2589E-01 1.0771E+04 1.0569E+04 5.1355E+03 4.9967E+03 - 1.4125E-01 9.1872E+03 8.9520E+03 4.3675E+03 4.2197E+03 - 1.5849E-01 7.7599E+03 7.5494E+03 3.6927E+03 3.5638E+03 - 1.7783E-01 6.4621E+03 6.3185E+03 3.1113E+03 2.9597E+03 - 1.9953E-01 5.3481E+03 5.1983E+03 2.6033E+03 2.4503E+03 - 2.2387E-01 4.3973E+03 4.2389E+03 2.1677E+03 2.0141E+03 - 2.5119E-01 3.5431E+03 3.4205E+03 1.7832E+03 1.6424E+03 - 2.8184E-01 2.8463E+03 2.7456E+03 1.4408E+03 1.3204E+03 - 3.1623E-01 2.2685E+03 2.1810E+03 1.1582E+03 1.0483E+03 - 3.5481E-01 1.7885E+03 1.7224E+03 9.2434E+02 8.2794E+02 - 3.9811E-01 1.4073E+03 1.3534E+03 7.3087E+02 6.4907E+02 - 4.4668E-01 1.0984E+03 1.0515E+03 5.7613E+02 5.1130E+02 - 5.0119E-01 8.4923E+02 8.1124E+02 4.5145E+02 3.9526E+02 - 5.6234E-01 6.5625E+02 6.2659E+02 3.5086E+02 3.0532E+02 - 6.3096E-01 5.0536E+02 4.8299E+02 2.7100E+02 2.3581E+02 - 7.0795E-01 3.8765E+02 3.6918E+02 2.0592E+02 1.7814E+02 - 7.9433E-01 2.9542E+02 2.7956E+02 1.5832E+02 1.3439E+02 - 8.9125E-01 2.2203E+02 2.1029E+02 1.2261E+02 9.9942E+01 - 1.0000E+00 1.6761E+02 1.5975E+02 9.1991E+01 7.6231E+01 - 1.1220E+00 1.2743E+02 1.2033E+02 6.8765E+01 5.6982E+01 - 1.2589E+00 9.5438E+01 9.0366E+01 5.1760E+01 4.2344E+01 - 1.4125E+00 7.1943E+01 6.7445E+01 3.8603E+01 3.1159E+01 - 1.5849E+00 5.4204E+01 5.0398E+01 2.8534E+01 2.2916E+01 - 1.7783E+00 3.9745E+01 3.7541E+01 2.1085E+01 1.6651E+01 - 1.9953E+00 2.9467E+01 2.7541E+01 1.5430E+01 1.2181E+01 - 2.2387E+00 2.1931E+01 2.0226E+01 1.1317E+01 8.8065E+00 - 2.5119E+00 1.6009E+01 1.4857E+01 8.1526E+00 6.2783E+00 - 2.8184E+00 1.1630E+01 1.0849E+01 5.8381E+00 4.6066E+00 - 3.1623E+00 8.6073E+00 7.8727E+00 4.2030E+00 3.2489E+00 - 3.5481E+00 6.2906E+00 5.6804E+00 2.9815E+00 2.2834E+00 - 3.9811E+00 4.5574E+00 4.1127E+00 2.1256E+00 1.5958E+00 - 4.4668E+00 3.2936E+00 2.9670E+00 1.4904E+00 1.1197E+00 - 5.0119E+00 2.3752E+00 2.1244E+00 1.0404E+00 7.8511E-01 - 5.6234E+00 1.7016E+00 1.5087E+00 7.3149E-01 5.3961E-01 - 6.3096E+00 1.2272E+00 1.0705E+00 5.1059E-01 3.7663E-01 - 7.0795E+00 8.8272E-01 7.7177E-01 3.5141E-01 2.6492E-01 - 7.9433E+00 6.3178E-01 5.5363E-01 2.4235E-01 1.7556E-01 - 8.9125E+00 4.5494E-01 3.8920E-01 1.6973E-01 1.1873E-01 - 1.0000E+01 3.2410E-01 2.7484E-01 1.1237E-01 8.3264E-02 - 1.1220E+01 2.3151E-01 1.9533E-01 7.6597E-02 5.6169E-02 - 1.2589E+01 1.6375E-01 1.3822E-01 5.1948E-02 3.8108E-02 - 1.4125E+01 1.1658E-01 9.7556E-02 3.4858E-02 2.5700E-02 - 1.5849E+01 8.3912E-02 6.8944E-02 2.2902E-02 1.7259E-02 - 1.7783E+01 5.9935E-02 4.8884E-02 1.5606E-02 1.1890E-02 - 1.9953E+01 4.3569E-02 3.4930E-02 1.0812E-02 7.9337E-03 - 2.2387E+01 3.1149E-02 2.4776E-02 7.2137E-03 5.4890E-03 - 2.5119E+01 2.1726E-02 1.7422E-02 4.6789E-03 3.7124E-03 - 2.8184E+01 1.5352E-02 1.2321E-02 3.1012E-03 2.4012E-03 - 3.1623E+01 1.1152E-02 8.7608E-03 2.1309E-03 1.6303E-03 - 3.5481E+01 7.9368E-03 6.1914E-03 1.4198E-03 1.0961E-03 - 3.9811E+01 5.6417E-03 4.3763E-03 9.4341E-04 7.3398E-04 - 4.4668E+01 4.0177E-03 3.0900E-03 6.2894E-04 4.8778E-04 - 5.0119E+01 2.8514E-03 2.1779E-03 4.1451E-04 3.2484E-04 - 5.6234E+01 2.0296E-03 1.5386E-03 2.7523E-04 2.1619E-04 - 6.3096E+01 1.4401E-03 1.0827E-03 1.8473E-04 1.4411E-04 - 7.0795E+01 1.0209E-03 7.6254E-04 1.2234E-04 9.6573E-05 - 7.9433E+01 7.2846E-04 5.3738E-04 8.0654E-05 6.3906E-05 - 8.9125E+01 5.1675E-04 3.7587E-04 5.3692E-05 4.2852E-05 - 1.0000E+02 3.6007E-04 2.6503E-04 3.5964E-05 2.8621E-05 - 1.1220E+02 2.5387E-04 1.8542E-04 2.3675E-05 1.8854E-05 - 1.2589E+02 1.7910E-04 1.2939E-04 1.5712E-05 1.2445E-05 - 1.4125E+02 1.2629E-04 9.0722E-05 1.0488E-05 8.2871E-06 - 1.5849E+02 8.8616E-05 6.3479E-05 6.9893E-06 5.5510E-06 - 1.7783E+02 6.2564E-05 4.4122E-05 4.7026E-06 3.7338E-06 - 1.9953E+02 4.3819E-05 3.0726E-05 3.1347E-06 2.4587E-06 - 2.2387E+02 3.0738E-05 2.1427E-05 2.1024E-06 1.6612E-06 - 2.5119E+02 2.1560E-05 1.4912E-05 1.4100E-06 1.0797E-06 - 2.8184E+02 1.4986E-05 1.0354E-05 9.5636E-07 7.1935E-07 - 3.1623E+02 1.0510E-05 7.1640E-06 6.3228E-07 5.0771E-07 - 3.5481E+02 7.3545E-06 4.9508E-06 4.2262E-07 3.4122E-07 - 3.9811E+02 5.1469E-06 3.4236E-06 2.8191E-07 2.2363E-07 - 4.4668E+02 3.5812E-06 2.3750E-06 1.8714E-07 1.4918E-07 - 5.0119E+02 2.4828E-06 1.6306E-06 1.2707E-07 1.0179E-07 - 5.6234E+02 1.7385E-06 1.1346E-06 8.6066E-08 6.7503E-08 - 6.3096E+02 1.2082E-06 7.8491E-07 5.8089E-08 4.5958E-08 - 7.0795E+02 8.3741E-07 5.3984E-07 3.9218E-08 3.1720E-08 - 7.9433E+02 5.8063E-07 3.7097E-07 2.6644E-08 2.1132E-08 - 8.9125E+02 4.0201E-07 2.5444E-07 1.7607E-08 1.4179E-08 - 1.0000E+03 2.7966E-07 1.7633E-07 1.1764E-08 9.3480E-09 - 1.1220E+03 1.9259E-07 1.2011E-07 8.0005E-09 6.2456E-09 - 1.2589E+03 1.3229E-07 8.1773E-08 5.2723E-09 4.1505E-09 - 1.4125E+03 9.1627E-08 5.6056E-08 3.5056E-09 2.6984E-09 - 1.5849E+03 6.3971E-08 3.8300E-08 2.4360E-09 1.8153E-09 - 1.7783E+03 4.3785E-08 2.6150E-08 1.6318E-09 1.2444E-09 - 1.9953E+03 2.9631E-08 1.7653E-08 1.0732E-09 7.7584E-10 - 2.2387E+03 2.0065E-08 1.2044E-08 7.0463E-10 5.2850E-10 - 2.5119E+03 1.3749E-08 8.2320E-09 4.5359E-10 3.5527E-10 - 2.8184E+03 9.3914E-09 5.5041E-09 3.1369E-10 2.3432E-10 - 3.1623E+03 6.4330E-09 3.7614E-09 2.1679E-10 1.5601E-10 - 3.5481E+03 4.2484E-09 2.4719E-09 1.4439E-10 1.0487E-10 - 3.9811E+03 2.8549E-09 1.6517E-09 9.4970E-11 6.8162E-11 - 4.4668E+03 1.9144E-09 1.1107E-09 6.2920E-11 4.4503E-11 - 5.0119E+03 1.2882E-09 7.4064E-10 4.2160E-11 3.2691E-11 - 5.6234E+03 8.6212E-10 4.8771E-10 2.8867E-11 2.0678E-11 - 6.3096E+03 5.7611E-10 3.2757E-10 1.8077E-11 1.2367E-11 - 7.0795E+03 3.8040E-10 2.1672E-10 1.1579E-11 8.1434E-12 - 7.9433E+03 2.5444E-10 1.4359E-10 7.6136E-12 5.2238E-12 - 8.9125E+03 1.6981E-10 9.5904E-11 5.2173E-12 3.4916E-12 - 1.0000E+04 1.1087E-10 6.3210E-11 3.3783E-12 2.3166E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4235E+04 1.4308E+04 6.7843E+03 6.6387E+03 - 1.1220E-01 1.2281E+04 1.2285E+04 5.9496E+03 5.7677E+03 - 1.2589E-01 1.0557E+04 1.0516E+04 5.1135E+03 4.9379E+03 - 1.4125E-01 9.0255E+03 8.9970E+03 4.3567E+03 4.1735E+03 - 1.5849E-01 7.6398E+03 7.6048E+03 3.7128E+03 3.5141E+03 - 1.7783E-01 6.4074E+03 6.3358E+03 3.1477E+03 2.9366E+03 - 1.9953E-01 5.3241E+03 5.2196E+03 2.6348E+03 2.4450E+03 - 2.2387E-01 4.3574E+03 4.2635E+03 2.1806E+03 2.0018E+03 - 2.5119E-01 3.5367E+03 3.4532E+03 1.7906E+03 1.6206E+03 - 2.8184E-01 2.8533E+03 2.7713E+03 1.4668E+03 1.3046E+03 - 3.1623E-01 2.2559E+03 2.2106E+03 1.1898E+03 1.0440E+03 - 3.5481E-01 1.7839E+03 1.7525E+03 9.4835E+02 8.2844E+02 - 3.9811E-01 1.4126E+03 1.3713E+03 7.5364E+02 6.5530E+02 - 4.4668E-01 1.1028E+03 1.0722E+03 5.9601E+02 5.1072E+02 - 5.0119E-01 8.4928E+02 8.3044E+02 4.6428E+02 3.9312E+02 - 5.6234E-01 6.5308E+02 6.3737E+02 3.6199E+02 3.0388E+02 - 6.3096E-01 5.0498E+02 4.8994E+02 2.7745E+02 2.3354E+02 - 7.0795E-01 3.8562E+02 3.7339E+02 2.1012E+02 1.7839E+02 - 7.9433E-01 2.9243E+02 2.8341E+02 1.6183E+02 1.3533E+02 - 8.9125E-01 2.2243E+02 2.1498E+02 1.2360E+02 1.0161E+02 - 1.0000E+00 1.6725E+02 1.6232E+02 9.3215E+01 7.5720E+01 - 1.1220E+00 1.2686E+02 1.2142E+02 6.9486E+01 5.6257E+01 - 1.2589E+00 9.6328E+01 9.0464E+01 5.2148E+01 4.1874E+01 - 1.4125E+00 7.1731E+01 6.7808E+01 3.8831E+01 3.1029E+01 - 1.5849E+00 5.3924E+01 5.0311E+01 2.8718E+01 2.2756E+01 - 1.7783E+00 3.9967E+01 3.7570E+01 2.1062E+01 1.6665E+01 - 1.9953E+00 2.9562E+01 2.7860E+01 1.5339E+01 1.1996E+01 - 2.2387E+00 2.2005E+01 2.0143E+01 1.1077E+01 8.7162E+00 - 2.5119E+00 1.6187E+01 1.4719E+01 7.9530E+00 6.3788E+00 - 2.8184E+00 1.1943E+01 1.0825E+01 5.8210E+00 4.5288E+00 - 3.1623E+00 8.6784E+00 7.8554E+00 4.2058E+00 3.2106E+00 - 3.5481E+00 6.2997E+00 5.7104E+00 2.9877E+00 2.2903E+00 - 3.9811E+00 4.5213E+00 4.0760E+00 2.1198E+00 1.6139E+00 - 4.4668E+00 3.2768E+00 2.9178E+00 1.4818E+00 1.1221E+00 - 5.0119E+00 2.3891E+00 2.1010E+00 1.0261E+00 7.8379E-01 - 5.6234E+00 1.7144E+00 1.5057E+00 7.1959E-01 5.4504E-01 - 6.3096E+00 1.2261E+00 1.0796E+00 5.0455E-01 3.7456E-01 - 7.0795E+00 8.8574E-01 7.6274E-01 3.5081E-01 2.5935E-01 - 7.9433E+00 6.3899E-01 5.4899E-01 2.4002E-01 1.7834E-01 - 8.9125E+00 4.5424E-01 3.9184E-01 1.6613E-01 1.2077E-01 - 1.0000E+01 3.2526E-01 2.7445E-01 1.1228E-01 8.3190E-02 - 1.1220E+01 2.3358E-01 1.9452E-01 7.5978E-02 5.6199E-02 - 1.2589E+01 1.6710E-01 1.3784E-01 5.0753E-02 3.9152E-02 - 1.4125E+01 1.1833E-01 9.7967E-02 3.4473E-02 2.6650E-02 - 1.5849E+01 8.4316E-02 6.9385E-02 2.3548E-02 1.7587E-02 - 1.7783E+01 6.0923E-02 4.8469E-02 1.5567E-02 1.1980E-02 - 1.9953E+01 4.3309E-02 3.3958E-02 1.0452E-02 7.8868E-03 - 2.2387E+01 3.0339E-02 2.4004E-02 7.1455E-03 5.1983E-03 - 2.5119E+01 2.1538E-02 1.7059E-02 4.8353E-03 3.5242E-03 - 2.8184E+01 1.5620E-02 1.2398E-02 3.2093E-03 2.4646E-03 - 3.1623E+01 1.1105E-02 8.7473E-03 2.1179E-03 1.6358E-03 - 3.5481E+01 7.9220E-03 6.1894E-03 1.4061E-03 1.0879E-03 - 3.9811E+01 5.6462E-03 4.3642E-03 9.3584E-04 7.2523E-04 - 4.4668E+01 4.0217E-03 3.0761E-03 6.2477E-04 4.8595E-04 - 5.0119E+01 2.8545E-03 2.1672E-03 4.1685E-04 3.2274E-04 - 5.6234E+01 2.0212E-03 1.5336E-03 2.7568E-04 2.1639E-04 - 6.3096E+01 1.4319E-03 1.0800E-03 1.8106E-04 1.4501E-04 - 7.0795E+01 1.0197E-03 7.5961E-04 1.1913E-04 9.6346E-05 - 7.9433E+01 7.2545E-04 5.3225E-04 8.0438E-05 6.3597E-05 - 8.9125E+01 5.1236E-04 3.7491E-04 5.3607E-05 4.2646E-05 - 1.0000E+02 3.5916E-04 2.6365E-04 3.5584E-05 2.8266E-05 - 1.1220E+02 2.5398E-04 1.8449E-04 2.3727E-05 1.9065E-05 - 1.2589E+02 1.7903E-04 1.2946E-04 1.5587E-05 1.2769E-05 - 1.4125E+02 1.2608E-04 9.0477E-05 1.0422E-05 8.5753E-06 - 1.5849E+02 8.8533E-05 6.3229E-05 6.9904E-06 5.7167E-06 - 1.7783E+02 6.2029E-05 4.3943E-05 4.6347E-06 3.7790E-06 - 1.9953E+02 4.3405E-05 3.0411E-05 3.1402E-06 2.5034E-06 - 2.2387E+02 3.0412E-05 2.1242E-05 2.1009E-06 1.6742E-06 - 2.5119E+02 2.1223E-05 1.4885E-05 1.3810E-06 1.1110E-06 - 2.8184E+02 1.4805E-05 1.0289E-05 9.4749E-07 7.5106E-07 - 3.1623E+02 1.0484E-05 7.1208E-06 6.2668E-07 5.0769E-07 - 3.5481E+02 7.2979E-06 4.9381E-06 4.1698E-07 3.4390E-07 - 3.9811E+02 5.0964E-06 3.4262E-06 2.8118E-07 2.2724E-07 - 4.4668E+02 3.5836E-06 2.3636E-06 1.9124E-07 1.5121E-07 - 5.0119E+02 2.5087E-06 1.6345E-06 1.3043E-07 1.0322E-07 - 5.6234E+02 1.7487E-06 1.1338E-06 8.5544E-08 6.9327E-08 - 6.3096E+02 1.2087E-06 7.8270E-07 5.7121E-08 4.5893E-08 - 7.0795E+02 8.4016E-07 5.3939E-07 3.8271E-08 3.2037E-08 - 7.9433E+02 5.8327E-07 3.7194E-07 2.6065E-08 2.1495E-08 - 8.9125E+02 4.0385E-07 2.5504E-07 1.7774E-08 1.4098E-08 - 1.0000E+03 2.8035E-07 1.7680E-07 1.1922E-08 9.2705E-09 - 1.1220E+03 1.9379E-07 1.1999E-07 8.0668E-09 6.1275E-09 - 1.2589E+03 1.3319E-07 8.2098E-08 5.3517E-09 3.9886E-09 - 1.4125E+03 9.0807E-08 5.6080E-08 3.4793E-09 2.6185E-09 - 1.5849E+03 6.2315E-08 3.7989E-08 2.3608E-09 1.7654E-09 - 1.7783E+03 4.3315E-08 2.5723E-08 1.5756E-09 1.2044E-09 - 1.9953E+03 2.9443E-08 1.7592E-08 1.0372E-09 8.0063E-10 - 2.2387E+03 1.9994E-08 1.2049E-08 7.3601E-10 5.0769E-10 - 2.5119E+03 1.3718E-08 8.0725E-09 4.8262E-10 3.3181E-10 - 2.8184E+03 9.3248E-09 5.4135E-09 3.1077E-10 2.1703E-10 - 3.1623E+03 6.3975E-09 3.7460E-09 2.0888E-10 1.5593E-10 - 3.5481E+03 4.2075E-09 2.4529E-09 1.4183E-10 1.0273E-10 - 3.9811E+03 2.8384E-09 1.6404E-09 9.0402E-11 6.5858E-11 - 4.4668E+03 1.9116E-09 1.1054E-09 5.9253E-11 4.2908E-11 - 5.0119E+03 1.2778E-09 7.3241E-10 3.9617E-11 2.9826E-11 - 5.6234E+03 8.5615E-10 4.8367E-10 2.5405E-11 1.9112E-11 - 6.3096E+03 5.7090E-10 3.2648E-10 1.6969E-11 1.2563E-11 - 7.0795E+03 3.8293E-10 2.1690E-10 1.1187E-11 8.1248E-12 - 7.9433E+03 2.5458E-10 1.4228E-10 7.0684E-12 5.3315E-12 - 8.9125E+03 1.6759E-10 9.4506E-11 4.4374E-12 3.2659E-12 - 1.0000E+04 1.1246E-10 6.3355E-11 3.2187E-12 2.0182E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3311E+04 1.3443E+04 6.3914E+03 6.2848E+03 - 1.1220E-01 1.1568E+04 1.1604E+04 5.5694E+03 5.4080E+03 - 1.2589E-01 9.9604E+03 9.9554E+03 4.8102E+03 4.6440E+03 - 1.4125E-01 8.5316E+03 8.5229E+03 4.1394E+03 3.9356E+03 - 1.5849E-01 7.2826E+03 7.2521E+03 3.5266E+03 3.3271E+03 - 1.7783E-01 6.1331E+03 6.0705E+03 2.9821E+03 2.8021E+03 - 1.9953E-01 5.1220E+03 5.0158E+03 2.5061E+03 2.3296E+03 - 2.2387E-01 4.1997E+03 4.1130E+03 2.0967E+03 1.9188E+03 - 2.5119E-01 3.4077E+03 3.3318E+03 1.7293E+03 1.5728E+03 - 2.8184E-01 2.7718E+03 2.6852E+03 1.4229E+03 1.2699E+03 - 3.1623E-01 2.2037E+03 2.1572E+03 1.1613E+03 1.0170E+03 - 3.5481E-01 1.7442E+03 1.7218E+03 9.2812E+02 8.1002E+02 - 3.9811E-01 1.3889E+03 1.3586E+03 7.4272E+02 6.3830E+02 - 4.4668E-01 1.0875E+03 1.0568E+03 5.8484E+02 5.0323E+02 - 5.0119E-01 8.4617E+02 8.2549E+02 4.5638E+02 3.9385E+02 - 5.6234E-01 6.5343E+02 6.4423E+02 3.6001E+02 3.0460E+02 - 6.3096E-01 5.0202E+02 4.9634E+02 2.7912E+02 2.3135E+02 - 7.0795E-01 3.8663E+02 3.7586E+02 2.1216E+02 1.7627E+02 - 7.9433E-01 2.9348E+02 2.8517E+02 1.6515E+02 1.3309E+02 - 8.9125E-01 2.2286E+02 2.1751E+02 1.2546E+02 9.9171E+01 - 1.0000E+00 1.6887E+02 1.6308E+02 9.3537E+01 7.5891E+01 - 1.1220E+00 1.2725E+02 1.2301E+02 7.0390E+01 5.6233E+01 - 1.2589E+00 9.5762E+01 9.1650E+01 5.2565E+01 4.1612E+01 - 1.4125E+00 7.1662E+01 6.8000E+01 3.9022E+01 3.1287E+01 - 1.5849E+00 5.3963E+01 5.0716E+01 2.8845E+01 2.3201E+01 - 1.7783E+00 4.0280E+01 3.7804E+01 2.1317E+01 1.6708E+01 - 1.9953E+00 2.9755E+01 2.7934E+01 1.5600E+01 1.2189E+01 - 2.2387E+00 2.2129E+01 2.0394E+01 1.1347E+01 8.9952E+00 - 2.5119E+00 1.6236E+01 1.4895E+01 8.2431E+00 6.3928E+00 - 2.8184E+00 1.1760E+01 1.0848E+01 5.8763E+00 4.4896E+00 - 3.1623E+00 8.5919E+00 7.8260E+00 4.2190E+00 3.2351E+00 - 3.5481E+00 6.2414E+00 5.6978E+00 2.9817E+00 2.2534E+00 - 3.9811E+00 4.5126E+00 4.1072E+00 2.0880E+00 1.5865E+00 - 4.4668E+00 3.2591E+00 2.9474E+00 1.4752E+00 1.1236E+00 - 5.0119E+00 2.3610E+00 2.1053E+00 1.0393E+00 7.8704E-01 - 5.6234E+00 1.7193E+00 1.5110E+00 7.1592E-01 5.4801E-01 - 6.3096E+00 1.2234E+00 1.0741E+00 4.9517E-01 3.7414E-01 - 7.0795E+00 8.7199E-01 7.5452E-01 3.4426E-01 2.5514E-01 - 7.9433E+00 6.3490E-01 5.4703E-01 2.3988E-01 1.7470E-01 - 8.9125E+00 4.5926E-01 3.8949E-01 1.6114E-01 1.2257E-01 - 1.0000E+01 3.2465E-01 2.7498E-01 1.1089E-01 8.2841E-02 - 1.1220E+01 2.3399E-01 1.9440E-01 7.5679E-02 5.5441E-02 - 1.2589E+01 1.6741E-01 1.3842E-01 5.1289E-02 3.8371E-02 - 1.4125E+01 1.1817E-01 9.7753E-02 3.4740E-02 2.6011E-02 - 1.5849E+01 8.3982E-02 6.9779E-02 2.3546E-02 1.7450E-02 - 1.7783E+01 6.0458E-02 4.9300E-02 1.5668E-02 1.2040E-02 - 1.9953E+01 4.3570E-02 3.4298E-02 1.0542E-02 8.0743E-03 - 2.2387E+01 3.1123E-02 2.4248E-02 7.0719E-03 5.5346E-03 - 2.5119E+01 2.1910E-02 1.7135E-02 4.7858E-03 3.6676E-03 - 2.8184E+01 1.5517E-02 1.2088E-02 3.1571E-03 2.4221E-03 - 3.1623E+01 1.1107E-02 8.7254E-03 2.1125E-03 1.6392E-03 - 3.5481E+01 7.9154E-03 6.1649E-03 1.4134E-03 1.0940E-03 - 3.9811E+01 5.6493E-03 4.3533E-03 9.4087E-04 7.2915E-04 - 4.4668E+01 4.0155E-03 3.0698E-03 6.2411E-04 4.8282E-04 - 5.0119E+01 2.8515E-03 2.1703E-03 4.1506E-04 3.2361E-04 - 5.6234E+01 2.0244E-03 1.5320E-03 2.7608E-04 2.1814E-04 - 6.3096E+01 1.4387E-03 1.0807E-03 1.8222E-04 1.4451E-04 - 7.0795E+01 1.0190E-03 7.5959E-04 1.1936E-04 9.5562E-05 - 7.9433E+01 7.2053E-04 5.3263E-04 7.9263E-05 6.4047E-05 - 8.9125E+01 5.0769E-04 3.7410E-04 5.3465E-05 4.2689E-05 - 1.0000E+02 3.5926E-04 2.6318E-04 3.5392E-05 2.8015E-05 - 1.1220E+02 2.5363E-04 1.8379E-04 2.3497E-05 1.8874E-05 - 1.2589E+02 1.7866E-04 1.2845E-04 1.5545E-05 1.2611E-05 - 1.4125E+02 1.2557E-04 8.9983E-05 1.0366E-05 8.3550E-06 - 1.5849E+02 8.8251E-05 6.2741E-05 6.9172E-06 5.6429E-06 - 1.7783E+02 6.2218E-05 4.3538E-05 4.5769E-06 3.7759E-06 - 1.9953E+02 4.3589E-05 3.0418E-05 3.0546E-06 2.4504E-06 - 2.2387E+02 3.0488E-05 2.1143E-05 2.0433E-06 1.6136E-06 - 2.5119E+02 2.1498E-05 1.4644E-05 1.3885E-06 1.1035E-06 - 2.8184E+02 1.4971E-05 1.0219E-05 9.7288E-07 7.6536E-07 - 3.1623E+02 1.0484E-05 7.1201E-06 6.2417E-07 5.0140E-07 - 3.5481E+02 7.3311E-06 4.9266E-06 4.1940E-07 3.4100E-07 - 3.9811E+02 5.1024E-06 3.4031E-06 2.7852E-07 2.2839E-07 - 4.4668E+02 3.5601E-06 2.3533E-06 1.8612E-07 1.5315E-07 - 5.0119E+02 2.4889E-06 1.6375E-06 1.2804E-07 1.0275E-07 - 5.6234E+02 1.7401E-06 1.1337E-06 8.6277E-08 6.9180E-08 - 6.3096E+02 1.2094E-06 7.8027E-07 5.7700E-08 4.6339E-08 - 7.0795E+02 8.4088E-07 5.3807E-07 3.8723E-08 3.0822E-08 - 7.9433E+02 5.8306E-07 3.6973E-07 2.6059E-08 2.0585E-08 - 8.9125E+02 4.0232E-07 2.5606E-07 1.7644E-08 1.3951E-08 - 1.0000E+03 2.7955E-07 1.7668E-07 1.2061E-08 9.4010E-09 - 1.1220E+03 1.9240E-07 1.2031E-07 8.1800E-09 6.0873E-09 - 1.2589E+03 1.3315E-07 8.2507E-08 5.5029E-09 4.1476E-09 - 1.4125E+03 9.1685E-08 5.6154E-08 3.5887E-09 2.7643E-09 - 1.5849E+03 6.2888E-08 3.8106E-08 2.3230E-09 1.8267E-09 - 1.7783E+03 4.3039E-08 2.5915E-08 1.5639E-09 1.2232E-09 - 1.9953E+03 2.9628E-08 1.7634E-08 1.0657E-09 8.5435E-10 - 2.2387E+03 2.0126E-08 1.1898E-08 7.1805E-10 5.3986E-10 - 2.5119E+03 1.3616E-08 8.0923E-09 4.6547E-10 3.4290E-10 - 2.8184E+03 9.2784E-09 5.4824E-09 3.0751E-10 2.4097E-10 - 3.1623E+03 6.3455E-09 3.7203E-09 2.1254E-10 1.5821E-10 - 3.5481E+03 4.2135E-09 2.4676E-09 1.4090E-10 1.0592E-10 - 3.9811E+03 2.8474E-09 1.6411E-09 9.0255E-11 7.0398E-11 - 4.4668E+03 1.9142E-09 1.0858E-09 6.2783E-11 4.5748E-11 - 5.0119E+03 1.2951E-09 7.2586E-10 4.4041E-11 3.0247E-11 - 5.6234E+03 8.6640E-10 4.7903E-10 2.7474E-11 2.0430E-11 - 6.3096E+03 5.7106E-10 3.2358E-10 1.7299E-11 1.2734E-11 - 7.0795E+03 3.8086E-10 2.1354E-10 1.0889E-11 8.3940E-12 - 7.9433E+03 2.5228E-10 1.4167E-10 7.7343E-12 4.9596E-12 - 8.9125E+03 1.6787E-10 9.2972E-11 5.4499E-12 3.2116E-12 - 1.0000E+04 1.1241E-10 6.1403E-11 3.4342E-12 2.3856E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0971E+04 1.1186E+04 5.2111E+03 5.2272E+03 - 1.1220E-01 9.5460E+03 9.6893E+03 4.5780E+03 4.5527E+03 - 1.2589E-01 8.2549E+03 8.3655E+03 3.9696E+03 3.9163E+03 - 1.4125E-01 7.1124E+03 7.1639E+03 3.4442E+03 3.3477E+03 - 1.5849E-01 6.0619E+03 6.1022E+03 2.9632E+03 2.8375E+03 - 1.7783E-01 5.1364E+03 5.1568E+03 2.5166E+03 2.3992E+03 - 1.9953E-01 4.3291E+03 4.3041E+03 2.1362E+03 2.0069E+03 - 2.2387E-01 3.5791E+03 3.5632E+03 1.7953E+03 1.6488E+03 - 2.5119E-01 2.9365E+03 2.9301E+03 1.4899E+03 1.3547E+03 - 2.8184E-01 2.4046E+03 2.3868E+03 1.2262E+03 1.1183E+03 - 3.1623E-01 1.9507E+03 1.9238E+03 1.0038E+03 9.0589E+02 - 3.5481E-01 1.5625E+03 1.5369E+03 8.1750E+02 7.2315E+02 - 3.9811E-01 1.2476E+03 1.2321E+03 6.5974E+02 5.7660E+02 - 4.4668E-01 9.9701E+02 9.7733E+02 5.3272E+02 4.5818E+02 - 5.0119E-01 7.8416E+02 7.6717E+02 4.2505E+02 3.5772E+02 - 5.6234E-01 6.0884E+02 5.9851E+02 3.3243E+02 2.8011E+02 - 6.3096E-01 4.7192E+02 4.6213E+02 2.5892E+02 2.1884E+02 - 7.0795E-01 3.6700E+02 3.5746E+02 2.0126E+02 1.6798E+02 - 7.9433E-01 2.8544E+02 2.7436E+02 1.5589E+02 1.2831E+02 - 8.9125E-01 2.1847E+02 2.1297E+02 1.1889E+02 9.7712E+01 - 1.0000E+00 1.6571E+02 1.6113E+02 9.1641E+01 7.3608E+01 - 1.1220E+00 1.2580E+02 1.2200E+02 6.9007E+01 5.5124E+01 - 1.2589E+00 9.5398E+01 9.1404E+01 5.1833E+01 4.1341E+01 - 1.4125E+00 7.1814E+01 6.8138E+01 3.8713E+01 3.1048E+01 - 1.5849E+00 5.3299E+01 5.1075E+01 2.8691E+01 2.2983E+01 - 1.7783E+00 4.0003E+01 3.8053E+01 2.1051E+01 1.6677E+01 - 1.9953E+00 2.9582E+01 2.8215E+01 1.5635E+01 1.2069E+01 - 2.2387E+00 2.1782E+01 2.0754E+01 1.1432E+01 8.8387E+00 - 2.5119E+00 1.6118E+01 1.5054E+01 8.1827E+00 6.3349E+00 - 2.8184E+00 1.1844E+01 1.0970E+01 5.9610E+00 4.5032E+00 - 3.1623E+00 8.6522E+00 7.8906E+00 4.2304E+00 3.2226E+00 - 3.5481E+00 6.3004E+00 5.7201E+00 2.9645E+00 2.2693E+00 - 3.9811E+00 4.5672E+00 4.1075E+00 2.1187E+00 1.5964E+00 - 4.4668E+00 3.3111E+00 2.9334E+00 1.4970E+00 1.1211E+00 - 5.0119E+00 2.3870E+00 2.1043E+00 1.0309E+00 7.9341E-01 - 5.6234E+00 1.7198E+00 1.4955E+00 7.1593E-01 5.5305E-01 - 6.3096E+00 1.2355E+00 1.0757E+00 5.0366E-01 3.8074E-01 - 7.0795E+00 8.8988E-01 7.7570E-01 3.4502E-01 2.5873E-01 - 7.9433E+00 6.3896E-01 5.5016E-01 2.3850E-01 1.7628E-01 - 8.9125E+00 4.5730E-01 3.9991E-01 1.6849E-01 1.2216E-01 - 1.0000E+01 3.2579E-01 2.7672E-01 1.1193E-01 8.3845E-02 - 1.1220E+01 2.3107E-01 1.9502E-01 7.6245E-02 5.7229E-02 - 1.2589E+01 1.6465E-01 1.3989E-01 5.1840E-02 3.8412E-02 - 1.4125E+01 1.1850E-01 9.8227E-02 3.4514E-02 2.6114E-02 - 1.5849E+01 8.4472E-02 6.8955E-02 2.3349E-02 1.7665E-02 - 1.7783E+01 6.0798E-02 4.9521E-02 1.5775E-02 1.1650E-02 - 1.9953E+01 4.4156E-02 3.5174E-02 1.0325E-02 7.8990E-03 - 2.2387E+01 3.1434E-02 2.5155E-02 6.9996E-03 5.3719E-03 - 2.5119E+01 2.1943E-02 1.7651E-02 4.5486E-03 3.6780E-03 - 2.8184E+01 1.5441E-02 1.2197E-02 3.0824E-03 2.4347E-03 - 3.1623E+01 1.1086E-02 8.7367E-03 2.1097E-03 1.6248E-03 - 3.5481E+01 7.9229E-03 6.1566E-03 1.4077E-03 1.0800E-03 - 3.9811E+01 5.6564E-03 4.3480E-03 9.3471E-04 7.2498E-04 - 4.4668E+01 4.0060E-03 3.0801E-03 6.2645E-04 4.8422E-04 - 5.0119E+01 2.8490E-03 2.1780E-03 4.1560E-04 3.2020E-04 - 5.6234E+01 2.0143E-03 1.5340E-03 2.7273E-04 2.1526E-04 - 6.3096E+01 1.4247E-03 1.0775E-03 1.8240E-04 1.4496E-04 - 7.0795E+01 1.0151E-03 7.5483E-04 1.1947E-04 9.7362E-05 - 7.9433E+01 7.1407E-04 5.2821E-04 7.9357E-05 6.4879E-05 - 8.9125E+01 5.0651E-04 3.7054E-04 5.3693E-05 4.2739E-05 - 1.0000E+02 3.5929E-04 2.6283E-04 3.5264E-05 2.8534E-05 - 1.1220E+02 2.5285E-04 1.8396E-04 2.3414E-05 1.9117E-05 - 1.2589E+02 1.7773E-04 1.2873E-04 1.5361E-05 1.2564E-05 - 1.4125E+02 1.2493E-04 9.0021E-05 1.0377E-05 8.4287E-06 - 1.5849E+02 8.8103E-05 6.2868E-05 7.0332E-06 5.5915E-06 - 1.7783E+02 6.1947E-05 4.3637E-05 4.6976E-06 3.7129E-06 - 1.9953E+02 4.3403E-05 3.0320E-05 3.1673E-06 2.5038E-06 - 2.2387E+02 3.0524E-05 2.1281E-05 2.0895E-06 1.6693E-06 - 2.5119E+02 2.1381E-05 1.4759E-05 1.3839E-06 1.0900E-06 - 2.8184E+02 1.4956E-05 1.0224E-05 9.4325E-07 7.2857E-07 - 3.1623E+02 1.0473E-05 7.1232E-06 6.1586E-07 5.0169E-07 - 3.5481E+02 7.3177E-06 4.9220E-06 4.1893E-07 3.3303E-07 - 3.9811E+02 5.1028E-06 3.4014E-06 2.8145E-07 2.2161E-07 - 4.4668E+02 3.5555E-06 2.3588E-06 1.8965E-07 1.4993E-07 - 5.0119E+02 2.4881E-06 1.6326E-06 1.2827E-07 1.0125E-07 - 5.6234E+02 1.7384E-06 1.1346E-06 8.5223E-08 6.7968E-08 - 6.3096E+02 1.2049E-06 7.7868E-07 5.7092E-08 4.5886E-08 - 7.0795E+02 8.3664E-07 5.3469E-07 3.9215E-08 3.0934E-08 - 7.9433E+02 5.7956E-07 3.7126E-07 2.5944E-08 2.1041E-08 - 8.9125E+02 4.0329E-07 2.5502E-07 1.6949E-08 1.3769E-08 - 1.0000E+03 2.7994E-07 1.7581E-07 1.1921E-08 9.1482E-09 - 1.1220E+03 1.9246E-07 1.2005E-07 8.1458E-09 6.0613E-09 - 1.2589E+03 1.3295E-07 8.1487E-08 5.4291E-09 4.0984E-09 - 1.4125E+03 9.1235E-08 5.5639E-08 3.6340E-09 2.7718E-09 - 1.5849E+03 6.2620E-08 3.8096E-08 2.3602E-09 1.8064E-09 - 1.7783E+03 4.3120E-08 2.6025E-08 1.5412E-09 1.1929E-09 - 1.9953E+03 2.9309E-08 1.7606E-08 1.0707E-09 8.1289E-10 - 2.2387E+03 2.0068E-08 1.1837E-08 7.2991E-10 5.5116E-10 - 2.5119E+03 1.3626E-08 8.0387E-09 4.9399E-10 3.6552E-10 - 2.8184E+03 9.1840E-09 5.4354E-09 3.3736E-10 2.4911E-10 - 3.1623E+03 6.3606E-09 3.7526E-09 2.0918E-10 1.5513E-10 - 3.5481E+03 4.2170E-09 2.4837E-09 1.3446E-10 9.7657E-11 - 3.9811E+03 2.8533E-09 1.6683E-09 9.0653E-11 6.7549E-11 - 4.4668E+03 1.9254E-09 1.1163E-09 6.2130E-11 4.6143E-11 - 5.0119E+03 1.2810E-09 7.3611E-10 4.1746E-11 2.9635E-11 - 5.6234E+03 8.5077E-10 4.8617E-10 2.6631E-11 1.9143E-11 - 6.3096E+03 5.7174E-10 3.2296E-10 1.6877E-11 1.2861E-11 - 7.0795E+03 3.8173E-10 2.1337E-10 1.0739E-11 8.2511E-12 - 7.9433E+03 2.5009E-10 1.4266E-10 7.3669E-12 5.3711E-12 - 8.9125E+03 1.6668E-10 9.4565E-11 5.1972E-12 3.6030E-12 - 1.0000E+04 1.1162E-10 6.1852E-11 3.3131E-12 2.1481E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.2385E+03 9.4662E+03 4.4852E+03 4.3224E+03 - 1.1220E-01 8.0982E+03 8.2715E+03 3.9685E+03 3.7962E+03 - 1.2589E-01 7.0800E+03 7.2056E+03 3.4706E+03 3.2969E+03 - 1.4125E-01 6.1411E+03 6.2815E+03 3.0288E+03 2.8412E+03 - 1.5849E-01 5.2611E+03 5.4027E+03 2.6272E+03 2.4392E+03 - 1.7783E-01 4.4739E+03 4.5806E+03 2.2534E+03 2.0555E+03 - 1.9953E-01 3.7812E+03 3.8628E+03 1.9211E+03 1.7328E+03 - 2.2387E-01 3.1559E+03 3.2289E+03 1.6354E+03 1.4533E+03 - 2.5119E-01 2.6248E+03 2.6733E+03 1.3721E+03 1.2060E+03 - 2.8184E-01 2.1762E+03 2.1862E+03 1.1351E+03 9.8963E+02 - 3.1623E-01 1.7671E+03 1.7762E+03 9.2667E+02 8.0040E+02 - 3.5481E-01 1.4209E+03 1.4435E+03 7.5303E+02 6.4856E+02 - 3.9811E-01 1.1476E+03 1.1630E+03 6.1414E+02 5.2686E+02 - 4.4668E-01 9.2396E+02 9.2910E+02 4.9867E+02 4.2033E+02 - 5.0119E-01 7.3333E+02 7.3499E+02 4.0374E+02 3.2882E+02 - 5.6234E-01 5.7573E+02 5.7437E+02 3.1987E+02 2.5987E+02 - 6.3096E-01 4.5283E+02 4.4979E+02 2.4912E+02 2.0728E+02 - 7.0795E-01 3.5706E+02 3.5157E+02 1.9512E+02 1.6300E+02 - 7.9433E-01 2.7515E+02 2.7228E+02 1.5243E+02 1.2367E+02 - 8.9125E-01 2.1281E+02 2.0852E+02 1.1784E+02 9.2878E+01 - 1.0000E+00 1.6255E+02 1.5941E+02 9.0556E+01 7.1751E+01 - 1.1220E+00 1.2348E+02 1.2100E+02 6.8808E+01 5.3926E+01 - 1.2589E+00 9.3754E+01 9.0797E+01 5.2094E+01 4.0669E+01 - 1.4125E+00 7.0949E+01 6.7962E+01 3.8977E+01 3.0342E+01 - 1.5849E+00 5.3825E+01 5.0622E+01 2.8663E+01 2.2317E+01 - 1.7783E+00 4.0287E+01 3.7498E+01 2.1442E+01 1.6426E+01 - 1.9953E+00 2.9661E+01 2.7787E+01 1.5584E+01 1.2030E+01 - 2.2387E+00 2.1856E+01 2.0424E+01 1.1291E+01 8.5196E+00 - 2.5119E+00 1.6148E+01 1.4800E+01 8.3924E+00 6.1337E+00 - 2.8184E+00 1.1768E+01 1.0679E+01 5.9539E+00 4.4731E+00 - 3.1623E+00 8.6109E+00 7.9096E+00 4.2351E+00 3.2410E+00 - 3.5481E+00 6.2625E+00 5.7537E+00 2.9879E+00 2.2819E+00 - 3.9811E+00 4.5819E+00 4.1768E+00 2.0947E+00 1.5939E+00 - 4.4668E+00 3.3072E+00 2.9678E+00 1.5098E+00 1.1235E+00 - 5.0119E+00 2.3628E+00 2.1305E+00 1.0594E+00 7.8761E-01 - 5.6234E+00 1.7253E+00 1.5037E+00 7.3453E-01 5.4701E-01 - 6.3096E+00 1.2429E+00 1.0684E+00 5.1010E-01 3.8078E-01 - 7.0795E+00 8.8387E-01 7.8132E-01 3.4639E-01 2.6469E-01 - 7.9433E+00 6.3205E-01 5.6057E-01 2.4024E-01 1.8241E-01 - 8.9125E+00 4.4847E-01 3.9500E-01 1.6366E-01 1.2293E-01 - 1.0000E+01 3.2473E-01 2.7918E-01 1.1116E-01 8.4987E-02 - 1.1220E+01 2.3273E-01 1.9587E-01 7.6594E-02 5.7119E-02 - 1.2589E+01 1.6622E-01 1.3792E-01 5.1919E-02 3.8219E-02 - 1.4125E+01 1.1766E-01 9.7979E-02 3.4701E-02 2.6740E-02 - 1.5849E+01 8.5145E-02 6.9288E-02 2.2995E-02 1.8152E-02 - 1.7783E+01 6.0844E-02 4.9068E-02 1.5811E-02 1.1849E-02 - 1.9953E+01 4.3357E-02 3.4722E-02 1.0632E-02 7.9819E-03 - 2.2387E+01 3.1244E-02 2.4191E-02 7.1104E-03 5.4336E-03 - 2.5119E+01 2.2276E-02 1.7233E-02 4.9602E-03 3.5612E-03 - 2.8184E+01 1.5804E-02 1.2539E-02 3.3270E-03 2.3743E-03 - 3.1623E+01 1.1153E-02 8.7441E-03 2.1179E-03 1.6274E-03 - 3.5481E+01 7.9383E-03 6.1915E-03 1.4195E-03 1.0892E-03 - 3.9811E+01 5.6472E-03 4.3869E-03 9.4720E-04 7.3704E-04 - 4.4668E+01 4.0166E-03 3.0927E-03 6.2785E-04 4.9339E-04 - 5.0119E+01 2.8518E-03 2.1794E-03 4.1800E-04 3.2497E-04 - 5.6234E+01 2.0270E-03 1.5366E-03 2.7485E-04 2.1485E-04 - 6.3096E+01 1.4405E-03 1.0799E-03 1.8388E-04 1.4183E-04 - 7.0795E+01 1.0169E-03 7.6139E-04 1.2139E-04 9.5296E-05 - 7.9433E+01 7.2063E-04 5.3494E-04 8.0394E-05 6.4691E-05 - 8.9125E+01 5.1005E-04 3.7310E-04 5.3455E-05 4.2465E-05 - 1.0000E+02 3.5993E-04 2.6339E-04 3.5456E-05 2.8447E-05 - 1.1220E+02 2.5380E-04 1.8458E-04 2.3677E-05 1.8883E-05 - 1.2589E+02 1.7909E-04 1.2954E-04 1.5728E-05 1.2434E-05 - 1.4125E+02 1.2617E-04 9.0610E-05 1.0400E-05 8.3147E-06 - 1.5849E+02 8.8646E-05 6.2960E-05 6.9296E-06 5.6658E-06 - 1.7783E+02 6.1922E-05 4.3808E-05 4.6696E-06 3.8101E-06 - 1.9953E+02 4.3473E-05 3.0678E-05 3.1090E-06 2.5504E-06 - 2.2387E+02 3.0500E-05 2.1315E-05 2.0999E-06 1.6716E-06 - 2.5119E+02 2.1381E-05 1.4827E-05 1.4086E-06 1.1064E-06 - 2.8184E+02 1.4907E-05 1.0322E-05 9.1303E-07 7.4685E-07 - 3.1623E+02 1.0477E-05 7.1621E-06 6.1664E-07 5.0439E-07 - 3.5481E+02 7.3532E-06 4.9454E-06 4.1482E-07 3.3967E-07 - 3.9811E+02 5.1250E-06 3.4308E-06 2.8192E-07 2.3013E-07 - 4.4668E+02 3.5599E-06 2.3835E-06 1.8728E-07 1.5245E-07 - 5.0119E+02 2.4799E-06 1.6447E-06 1.2296E-07 9.9476E-08 - 5.6234E+02 1.7305E-06 1.1364E-06 8.5744E-08 6.7465E-08 - 6.3096E+02 1.2049E-06 7.8147E-07 5.8133E-08 4.5787E-08 - 7.0795E+02 8.3880E-07 5.3725E-07 3.8440E-08 3.1268E-08 - 7.9433E+02 5.8274E-07 3.7073E-07 2.6122E-08 2.0815E-08 - 8.9125E+02 4.0361E-07 2.5533E-07 1.7468E-08 1.3909E-08 - 1.0000E+03 2.8064E-07 1.7615E-07 1.1617E-08 9.4599E-09 - 1.1220E+03 1.9327E-07 1.1973E-07 7.8330E-09 6.3878E-09 - 1.2589E+03 1.3362E-07 8.1761E-08 5.4248E-09 4.1710E-09 - 1.4125E+03 9.1615E-08 5.5748E-08 3.6161E-09 2.7330E-09 - 1.5849E+03 6.2820E-08 3.8310E-08 2.3577E-09 1.9171E-09 - 1.7783E+03 4.3146E-08 2.6043E-08 1.5932E-09 1.2644E-09 - 1.9953E+03 2.9286E-08 1.7894E-08 1.0606E-09 8.0626E-10 - 2.2387E+03 1.9886E-08 1.1998E-08 6.8873E-10 5.5849E-10 - 2.5119E+03 1.3535E-08 8.0352E-09 4.6391E-10 3.5945E-10 - 2.8184E+03 9.2123E-09 5.4876E-09 3.0915E-10 2.2072E-10 - 3.1623E+03 6.3765E-09 3.7670E-09 2.1656E-10 1.5246E-10 - 3.5481E+03 4.2316E-09 2.4653E-09 1.4427E-10 1.0356E-10 - 3.9811E+03 2.8600E-09 1.6493E-09 9.2132E-11 6.9083E-11 - 4.4668E+03 1.9076E-09 1.0961E-09 5.8346E-11 4.4067E-11 - 5.0119E+03 1.2831E-09 7.2479E-10 3.9055E-11 2.7370E-11 - 5.6234E+03 8.7037E-10 4.7765E-10 2.6634E-11 1.8495E-11 - 6.3096E+03 5.7370E-10 3.2230E-10 1.7465E-11 1.2990E-11 - 7.0795E+03 3.7891E-10 2.1214E-10 1.1507E-11 8.1215E-12 - 7.9433E+03 2.5376E-10 1.4047E-10 7.4469E-12 5.2307E-12 - 8.9125E+03 1.7037E-10 9.2953E-11 4.7826E-12 3.6280E-12 - 1.0000E+04 1.1198E-10 6.0716E-11 3.2384E-12 2.2610E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0127E+04 1.0485E+04 5.0124E+03 4.7488E+03 - 1.1220E-01 8.9011E+03 9.2043E+03 4.4395E+03 4.1554E+03 - 1.2589E-01 7.7550E+03 8.0468E+03 3.9072E+03 3.6161E+03 - 1.4125E-01 6.6898E+03 6.9771E+03 3.3732E+03 3.1016E+03 - 1.5849E-01 5.7438E+03 5.9515E+03 2.9143E+03 2.6422E+03 - 1.7783E-01 4.9015E+03 5.0500E+03 2.5097E+03 2.2315E+03 - 1.9953E-01 4.1428E+03 4.2705E+03 2.1338E+03 1.8722E+03 - 2.2387E-01 3.4513E+03 3.5419E+03 1.8111E+03 1.5603E+03 - 2.5119E-01 2.8511E+03 2.9063E+03 1.5172E+03 1.2966E+03 - 2.8184E-01 2.3334E+03 2.3888E+03 1.2558E+03 1.0555E+03 - 3.1623E-01 1.8941E+03 1.9390E+03 1.0260E+03 8.5234E+02 - 3.5481E-01 1.5316E+03 1.5612E+03 8.3829E+02 6.9754E+02 - 3.9811E-01 1.2369E+03 1.2536E+03 6.8204E+02 5.5576E+02 - 4.4668E-01 9.8115E+02 9.9751E+02 5.4578E+02 4.4187E+02 - 5.0119E-01 7.6952E+02 7.8607E+02 4.3742E+02 3.5049E+02 - 5.6234E-01 6.0965E+02 6.1107E+02 3.4441E+02 2.7316E+02 - 6.3096E-01 4.7440E+02 4.7343E+02 2.6820E+02 2.1247E+02 - 7.0795E-01 3.6755E+02 3.6617E+02 2.0911E+02 1.6284E+02 - 7.9433E-01 2.8351E+02 2.8145E+02 1.6038E+02 1.2463E+02 - 8.9125E-01 2.1495E+02 2.1398E+02 1.2327E+02 9.4887E+01 - 1.0000E+00 1.6461E+02 1.6329E+02 9.4001E+01 7.3121E+01 - 1.1220E+00 1.2496E+02 1.2365E+02 7.0967E+01 5.5203E+01 - 1.2589E+00 9.4434E+01 9.3181E+01 5.3120E+01 4.1515E+01 - 1.4125E+00 7.1156E+01 6.9529E+01 3.9292E+01 3.0857E+01 - 1.5849E+00 5.3651E+01 5.1618E+01 2.8986E+01 2.2650E+01 - 1.7783E+00 4.0269E+01 3.8215E+01 2.1521E+01 1.6634E+01 - 1.9953E+00 3.0039E+01 2.8314E+01 1.5970E+01 1.2248E+01 - 2.2387E+00 2.2117E+01 2.0834E+01 1.1662E+01 8.7668E+00 - 2.5119E+00 1.6041E+01 1.5048E+01 8.3409E+00 6.2682E+00 - 2.8184E+00 1.1792E+01 1.0874E+01 5.9848E+00 4.5367E+00 - 3.1623E+00 8.5877E+00 7.8901E+00 4.2573E+00 3.2412E+00 - 3.5481E+00 6.2471E+00 5.7210E+00 3.0170E+00 2.2942E+00 - 3.9811E+00 4.5533E+00 4.1181E+00 2.1400E+00 1.5951E+00 - 4.4668E+00 3.2894E+00 2.9489E+00 1.5035E+00 1.1067E+00 - 5.0119E+00 2.3861E+00 2.1247E+00 1.0607E+00 7.8366E-01 - 5.6234E+00 1.7247E+00 1.5188E+00 7.3709E-01 5.5132E-01 - 6.3096E+00 1.2328E+00 1.0889E+00 5.0145E-01 3.8539E-01 - 7.0795E+00 8.8187E-01 7.7855E-01 3.4267E-01 2.6561E-01 - 7.9433E+00 6.3792E-01 5.5397E-01 2.3772E-01 1.7831E-01 - 8.9125E+00 4.5344E-01 3.9012E-01 1.6583E-01 1.2077E-01 - 1.0000E+01 3.2541E-01 2.7372E-01 1.1059E-01 8.3739E-02 - 1.1220E+01 2.3405E-01 1.9411E-01 7.4910E-02 5.6574E-02 - 1.2589E+01 1.6571E-01 1.3831E-01 5.0910E-02 3.9207E-02 - 1.4125E+01 1.1711E-01 9.7805E-02 3.4488E-02 2.6581E-02 - 1.5849E+01 8.4064E-02 6.8578E-02 2.3130E-02 1.7931E-02 - 1.7783E+01 6.0562E-02 4.9361E-02 1.5755E-02 1.1990E-02 - 1.9953E+01 4.2721E-02 3.5532E-02 1.0784E-02 7.8373E-03 - 2.2387E+01 3.0039E-02 2.4967E-02 7.3541E-03 5.3514E-03 - 2.5119E+01 2.1522E-02 1.7349E-02 5.0002E-03 3.6743E-03 - 2.8184E+01 1.5583E-02 1.2157E-02 3.3226E-03 2.3599E-03 - 3.1623E+01 1.1183E-02 8.7715E-03 2.1239E-03 1.6296E-03 - 3.5481E+01 7.9735E-03 6.2140E-03 1.4231E-03 1.0907E-03 - 3.9811E+01 5.6740E-03 4.3821E-03 9.5176E-04 7.2840E-04 - 4.4668E+01 4.0272E-03 3.0884E-03 6.2900E-04 4.8839E-04 - 5.0119E+01 2.8627E-03 2.1850E-03 4.1374E-04 3.2461E-04 - 5.6234E+01 2.0368E-03 1.5461E-03 2.7690E-04 2.1787E-04 - 6.3096E+01 1.4446E-03 1.0917E-03 1.8290E-04 1.4657E-04 - 7.0795E+01 1.0247E-03 7.6715E-04 1.2072E-04 9.7380E-05 - 7.9433E+01 7.2528E-04 5.3961E-04 8.0221E-05 6.3199E-05 - 8.9125E+01 5.1313E-04 3.7953E-04 5.4258E-05 4.2038E-05 - 1.0000E+02 3.6060E-04 2.6390E-04 3.5393E-05 2.8364E-05 - 1.1220E+02 2.5360E-04 1.8416E-04 2.3521E-05 1.8915E-05 - 1.2589E+02 1.7842E-04 1.2931E-04 1.5659E-05 1.2528E-05 - 1.4125E+02 1.2617E-04 9.0331E-05 1.0499E-05 8.3039E-06 - 1.5849E+02 8.8643E-05 6.2827E-05 7.0161E-06 5.5384E-06 - 1.7783E+02 6.2042E-05 4.4031E-05 4.6511E-06 3.7275E-06 - 1.9953E+02 4.3429E-05 3.0660E-05 3.1304E-06 2.4748E-06 - 2.2387E+02 3.0520E-05 2.1281E-05 2.0954E-06 1.6545E-06 - 2.5119E+02 2.1422E-05 1.4806E-05 1.3767E-06 1.1183E-06 - 2.8184E+02 1.4924E-05 1.0241E-05 9.3899E-07 7.5602E-07 - 3.1623E+02 1.0528E-05 7.1494E-06 6.2623E-07 5.0151E-07 - 3.5481E+02 7.3686E-06 4.9566E-06 4.1825E-07 3.3711E-07 - 3.9811E+02 5.1163E-06 3.4366E-06 2.7955E-07 2.2677E-07 - 4.4668E+02 3.5593E-06 2.3670E-06 1.8943E-07 1.5174E-07 - 5.0119E+02 2.4851E-06 1.6384E-06 1.2557E-07 1.0252E-07 - 5.6234E+02 1.7374E-06 1.1370E-06 8.5220E-08 6.9506E-08 - 6.3096E+02 1.2045E-06 7.8580E-07 5.7407E-08 4.6469E-08 - 7.0795E+02 8.3603E-07 5.4043E-07 3.8487E-08 3.0357E-08 - 7.9433E+02 5.8176E-07 3.6999E-07 2.5721E-08 2.0385E-08 - 8.9125E+02 4.0380E-07 2.5490E-07 1.7336E-08 1.3457E-08 - 1.0000E+03 2.8050E-07 1.7624E-07 1.1417E-08 9.2417E-09 - 1.1220E+03 1.9257E-07 1.2001E-07 7.7133E-09 6.0259E-09 - 1.2589E+03 1.3299E-07 8.2350E-08 5.3453E-09 4.0864E-09 - 1.4125E+03 9.2218E-08 5.6250E-08 3.4830E-09 2.8861E-09 - 1.5849E+03 6.3065E-08 3.8202E-08 2.3036E-09 1.8247E-09 - 1.7783E+03 4.2542E-08 2.5975E-08 1.5950E-09 1.2118E-09 - 1.9953E+03 2.9429E-08 1.7558E-08 1.0712E-09 8.1423E-10 - 2.2387E+03 2.0219E-08 1.1860E-08 7.0591E-10 5.4472E-10 - 2.5119E+03 1.3736E-08 8.1195E-09 4.7338E-10 3.4644E-10 - 2.8184E+03 9.2877E-09 5.5124E-09 3.0035E-10 2.2135E-10 - 3.1623E+03 6.4046E-09 3.7617E-09 2.0025E-10 1.5879E-10 - 3.5481E+03 4.2469E-09 2.4642E-09 1.3447E-10 1.0268E-10 - 3.9811E+03 2.8627E-09 1.6604E-09 9.2869E-11 6.2368E-11 - 4.4668E+03 1.9139E-09 1.1139E-09 6.2841E-11 4.3317E-11 - 5.0119E+03 1.2876E-09 7.3463E-10 4.1658E-11 2.9775E-11 - 5.6234E+03 8.6585E-10 4.8257E-10 2.7078E-11 1.9913E-11 - 6.3096E+03 5.7368E-10 3.2537E-10 1.7394E-11 1.3434E-11 - 7.0795E+03 3.7933E-10 2.1327E-10 1.1512E-11 9.1887E-12 - 7.9433E+03 2.5429E-10 1.4269E-10 7.9538E-12 5.9166E-12 - 8.9125E+03 1.6913E-10 9.4517E-11 4.8019E-12 3.6538E-12 - 1.0000E+04 1.1093E-10 6.2160E-11 3.2160E-12 2.3911E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2408E+04 1.2847E+04 6.2047E+03 5.7531E+03 - 1.1220E-01 1.0757E+04 1.1171E+04 5.4542E+03 5.0255E+03 - 1.2589E-01 9.3452E+03 9.6577E+03 4.7397E+03 4.3468E+03 - 1.4125E-01 8.0611E+03 8.3131E+03 4.0848E+03 3.7034E+03 - 1.5849E-01 6.8765E+03 7.1141E+03 3.5242E+03 3.1187E+03 - 1.7783E-01 5.8127E+03 6.0093E+03 3.0025E+03 2.6134E+03 - 1.9953E-01 4.8522E+03 4.9867E+03 2.5158E+03 2.1754E+03 - 2.2387E-01 3.9949E+03 4.0986E+03 2.1207E+03 1.8050E+03 - 2.5119E-01 3.2743E+03 3.3488E+03 1.7680E+03 1.4789E+03 - 2.8184E-01 2.6546E+03 2.7262E+03 1.4295E+03 1.1931E+03 - 3.1623E-01 2.1359E+03 2.1896E+03 1.1715E+03 9.5865E+02 - 3.5481E-01 1.7081E+03 1.7375E+03 9.5405E+02 7.7668E+02 - 3.9811E-01 1.3482E+03 1.3763E+03 7.5939E+02 6.1474E+02 - 4.4668E-01 1.0611E+03 1.0852E+03 6.0126E+02 4.8038E+02 - 5.0119E-01 8.3511E+02 8.4738E+02 4.7490E+02 3.7787E+02 - 5.6234E-01 6.4505E+02 6.5590E+02 3.7405E+02 2.8865E+02 - 6.3096E-01 4.9601E+02 5.0135E+02 2.9019E+02 2.2198E+02 - 7.0795E-01 3.8179E+02 3.8636E+02 2.2327E+02 1.7131E+02 - 7.9433E-01 2.9054E+02 2.9405E+02 1.6996E+02 1.3233E+02 - 8.9125E-01 2.2172E+02 2.1992E+02 1.2777E+02 1.0024E+02 - 1.0000E+00 1.6872E+02 1.6712E+02 9.7129E+01 7.4366E+01 - 1.1220E+00 1.2647E+02 1.2620E+02 7.2640E+01 5.5552E+01 - 1.2589E+00 9.5577E+01 9.4630E+01 5.3540E+01 4.1616E+01 - 1.4125E+00 7.2205E+01 7.0267E+01 3.9901E+01 3.0625E+01 - 1.5849E+00 5.4028E+01 5.2262E+01 2.9695E+01 2.2417E+01 - 1.7783E+00 4.0316E+01 3.8664E+01 2.1905E+01 1.6297E+01 - 1.9953E+00 2.9598E+01 2.8480E+01 1.6177E+01 1.1945E+01 - 2.2387E+00 2.1597E+01 2.0752E+01 1.1820E+01 8.9280E+00 - 2.5119E+00 1.5953E+01 1.5307E+01 8.6048E+00 6.4747E+00 - 2.8184E+00 1.1866E+01 1.1109E+01 6.1714E+00 4.5871E+00 - 3.1623E+00 8.6304E+00 7.9235E+00 4.2508E+00 3.2289E+00 - 3.5481E+00 6.3084E+00 5.7041E+00 3.0162E+00 2.2798E+00 - 3.9811E+00 4.5587E+00 4.1127E+00 2.1201E+00 1.6085E+00 - 4.4668E+00 3.3141E+00 2.9591E+00 1.4953E+00 1.1466E+00 - 5.0119E+00 2.4038E+00 2.0994E+00 1.0434E+00 7.9584E-01 - 5.6234E+00 1.7246E+00 1.5224E+00 7.3335E-01 5.5330E-01 - 6.3096E+00 1.2360E+00 1.0890E+00 5.1923E-01 3.8506E-01 - 7.0795E+00 8.8447E-01 7.7214E-01 3.5176E-01 2.6517E-01 - 7.9433E+00 6.4042E-01 5.4934E-01 2.3782E-01 1.8319E-01 - 8.9125E+00 4.5992E-01 3.8278E-01 1.6384E-01 1.2660E-01 - 1.0000E+01 3.2563E-01 2.7526E-01 1.1216E-01 8.4312E-02 - 1.1220E+01 2.3158E-01 1.9653E-01 7.6604E-02 5.7701E-02 - 1.2589E+01 1.6549E-01 1.4004E-01 5.2178E-02 3.9738E-02 - 1.4125E+01 1.1858E-01 9.9105E-02 3.5016E-02 2.6864E-02 - 1.5849E+01 8.5183E-02 6.9554E-02 2.3453E-02 1.7752E-02 - 1.7783E+01 6.0597E-02 4.9140E-02 1.5862E-02 1.1933E-02 - 1.9953E+01 4.2630E-02 3.4289E-02 1.0774E-02 8.0828E-03 - 2.2387E+01 3.0545E-02 2.4166E-02 7.2532E-03 5.1690E-03 - 2.5119E+01 2.1984E-02 1.7514E-02 4.7370E-03 3.4209E-03 - 2.8184E+01 1.5610E-02 1.2436E-02 3.1544E-03 2.2737E-03 - 3.1623E+01 1.1168E-02 8.7756E-03 2.1253E-03 1.6450E-03 - 3.5481E+01 7.9729E-03 6.2101E-03 1.4175E-03 1.0953E-03 - 3.9811E+01 5.6751E-03 4.3859E-03 9.4597E-04 7.3172E-04 - 4.4668E+01 4.0406E-03 3.1105E-03 6.2901E-04 4.8977E-04 - 5.0119E+01 2.8722E-03 2.1933E-03 4.1618E-04 3.2447E-04 - 5.6234E+01 2.0376E-03 1.5407E-03 2.7692E-04 2.1692E-04 - 6.3096E+01 1.4433E-03 1.0849E-03 1.8677E-04 1.4385E-04 - 7.0795E+01 1.0218E-03 7.6686E-04 1.2428E-04 9.5674E-05 - 7.9433E+01 7.2485E-04 5.4197E-04 8.1652E-05 6.5056E-05 - 8.9125E+01 5.1136E-04 3.7859E-04 5.4048E-05 4.3186E-05 - 1.0000E+02 3.6121E-04 2.6489E-04 3.5456E-05 2.8316E-05 - 1.1220E+02 2.5495E-04 1.8557E-04 2.3611E-05 1.8867E-05 - 1.2589E+02 1.7963E-04 1.2950E-04 1.5711E-05 1.2723E-05 - 1.4125E+02 1.2631E-04 9.0251E-05 1.0445E-05 8.5101E-06 - 1.5849E+02 8.8918E-05 6.2875E-05 6.9411E-06 5.6368E-06 - 1.7783E+02 6.2237E-05 4.3881E-05 4.5894E-06 3.7545E-06 - 1.9953E+02 4.3664E-05 3.0566E-05 3.0967E-06 2.5022E-06 - 2.2387E+02 3.0930E-05 2.1453E-05 2.0850E-06 1.6788E-06 - 2.5119E+02 2.1605E-05 1.4923E-05 1.4363E-06 1.1192E-06 - 2.8184E+02 1.4913E-05 1.0260E-05 9.5548E-07 7.5767E-07 - 3.1623E+02 1.0508E-05 7.1356E-06 6.1871E-07 5.0262E-07 - 3.5481E+02 7.3495E-06 4.9471E-06 4.1647E-07 3.3732E-07 - 3.9811E+02 5.1152E-06 3.4403E-06 2.8298E-07 2.2668E-07 - 4.4668E+02 3.5810E-06 2.3891E-06 1.9164E-07 1.5045E-07 - 5.0119E+02 2.5126E-06 1.6508E-06 1.2556E-07 1.0344E-07 - 5.6234E+02 1.7431E-06 1.1359E-06 8.4806E-08 6.9315E-08 - 6.3096E+02 1.2119E-06 7.8132E-07 5.6240E-08 4.6584E-08 - 7.0795E+02 8.4123E-07 5.3834E-07 3.7676E-08 3.1488E-08 - 7.9433E+02 5.8540E-07 3.7141E-07 2.5470E-08 2.0737E-08 - 8.9125E+02 4.0438E-07 2.5717E-07 1.7271E-08 1.4096E-08 - 1.0000E+03 2.8095E-07 1.7664E-07 1.1988E-08 9.2677E-09 - 1.1220E+03 1.9417E-07 1.2007E-07 8.0936E-09 6.0741E-09 - 1.2589E+03 1.3345E-07 8.2178E-08 5.4751E-09 4.0090E-09 - 1.4125E+03 9.1492E-08 5.6364E-08 3.5910E-09 2.7983E-09 - 1.5849E+03 6.2904E-08 3.9008E-08 2.4451E-09 1.7931E-09 - 1.7783E+03 4.3117E-08 2.6436E-08 1.6531E-09 1.1890E-09 - 1.9953E+03 2.9534E-08 1.7630E-08 1.0756E-09 8.1894E-10 - 2.2387E+03 2.0191E-08 1.2006E-08 7.1634E-10 5.4550E-10 - 2.5119E+03 1.3562E-08 8.1354E-09 4.7850E-10 3.6995E-10 - 2.8184E+03 9.2184E-09 5.4730E-09 3.2666E-10 2.3167E-10 - 3.1623E+03 6.4281E-09 3.7944E-09 2.1622E-10 1.5309E-10 - 3.5481E+03 4.2529E-09 2.4928E-09 1.4228E-10 1.1017E-10 - 3.9811E+03 2.8458E-09 1.6543E-09 9.7789E-11 7.5799E-11 - 4.4668E+03 1.9223E-09 1.1010E-09 6.3091E-11 4.6912E-11 - 5.0119E+03 1.3050E-09 7.3311E-10 4.1568E-11 2.9223E-11 - 5.6234E+03 8.6450E-10 4.9198E-10 2.7644E-11 1.8385E-11 - 6.3096E+03 5.7213E-10 3.2587E-10 1.8070E-11 1.2875E-11 - 7.0795E+03 3.8425E-10 2.1652E-10 1.1031E-11 8.3619E-12 - 7.9433E+03 2.5682E-10 1.4298E-10 6.7111E-12 5.6000E-12 - 8.9125E+03 1.7011E-10 9.4758E-11 4.7728E-12 3.5930E-12 - 1.0000E+04 1.1279E-10 6.1976E-11 3.4576E-12 2.2937E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4122E+04 1.4617E+04 7.0728E+03 6.5124E+03 - 1.1220E-01 1.2247E+04 1.2636E+04 6.2014E+03 5.6153E+03 - 1.2589E-01 1.0557E+04 1.0849E+04 5.3734E+03 4.8104E+03 - 1.4125E-01 9.0342E+03 9.3161E+03 4.6163E+03 4.1001E+03 - 1.5849E-01 7.6714E+03 7.8689E+03 3.9501E+03 3.4343E+03 - 1.7783E-01 6.4263E+03 6.5666E+03 3.3586E+03 2.8670E+03 - 1.9953E-01 5.3101E+03 5.4418E+03 2.8242E+03 2.3821E+03 - 2.2387E-01 4.3694E+03 4.4460E+03 2.3416E+03 1.9561E+03 - 2.5119E-01 3.5486E+03 3.6022E+03 1.9267E+03 1.5926E+03 - 2.8184E-01 2.8352E+03 2.9031E+03 1.5714E+03 1.2813E+03 - 3.1623E-01 2.2589E+03 2.3138E+03 1.2635E+03 1.0224E+03 - 3.5481E-01 1.7974E+03 1.8349E+03 1.0163E+03 8.0819E+02 - 3.9811E-01 1.4182E+03 1.4419E+03 8.0764E+02 6.3598E+02 - 4.4668E-01 1.1017E+03 1.1223E+03 6.3715E+02 5.0177E+02 - 5.0119E-01 8.4932E+02 8.7379E+02 5.0108E+02 3.8840E+02 - 5.6234E-01 6.5213E+02 6.7722E+02 3.8926E+02 2.9621E+02 - 6.3096E-01 5.0237E+02 5.1329E+02 2.9981E+02 2.2949E+02 - 7.0795E-01 3.8641E+02 3.9142E+02 2.2895E+02 1.7399E+02 - 7.9433E-01 2.9726E+02 2.9702E+02 1.7189E+02 1.3158E+02 - 8.9125E-01 2.2441E+02 2.2257E+02 1.2872E+02 9.9010E+01 - 1.0000E+00 1.6924E+02 1.6849E+02 9.8075E+01 7.4586E+01 - 1.1220E+00 1.2733E+02 1.2582E+02 7.3321E+01 5.5645E+01 - 1.2589E+00 9.5587E+01 9.3622E+01 5.4462E+01 4.1659E+01 - 1.4125E+00 7.1639E+01 6.9812E+01 3.9503E+01 3.0972E+01 - 1.5849E+00 5.3692E+01 5.1957E+01 2.9061E+01 2.2579E+01 - 1.7783E+00 4.0468E+01 3.8382E+01 2.1857E+01 1.6575E+01 - 1.9953E+00 3.0135E+01 2.8465E+01 1.5947E+01 1.2034E+01 - 2.2387E+00 2.2109E+01 2.0747E+01 1.1554E+01 8.6639E+00 - 2.5119E+00 1.6185E+01 1.4983E+01 8.3531E+00 6.3324E+00 - 2.8184E+00 1.1693E+01 1.0934E+01 5.9611E+00 4.5924E+00 - 3.1623E+00 8.6354E+00 7.9277E+00 4.2862E+00 3.2424E+00 - 3.5481E+00 6.2857E+00 5.7345E+00 3.0421E+00 2.2929E+00 - 3.9811E+00 4.5551E+00 4.1226E+00 2.1389E+00 1.6232E+00 - 4.4668E+00 3.3206E+00 2.9721E+00 1.5008E+00 1.1451E+00 - 5.0119E+00 2.3872E+00 2.1480E+00 1.0343E+00 8.0274E-01 - 5.6234E+00 1.7273E+00 1.5177E+00 7.2470E-01 5.5389E-01 - 6.3096E+00 1.2585E+00 1.0854E+00 5.0292E-01 3.8754E-01 - 7.0795E+00 8.9390E-01 7.8248E-01 3.4221E-01 2.6970E-01 - 7.9433E+00 6.3999E-01 5.5587E-01 2.3827E-01 1.8196E-01 - 8.9125E+00 4.6551E-01 3.9264E-01 1.6702E-01 1.2527E-01 - 1.0000E+01 3.3072E-01 2.7908E-01 1.1138E-01 8.5164E-02 - 1.1220E+01 2.3505E-01 1.9873E-01 7.6239E-02 5.7741E-02 - 1.2589E+01 1.6735E-01 1.4049E-01 5.1918E-02 3.9377E-02 - 1.4125E+01 1.1887E-01 9.8532E-02 3.4937E-02 2.6880E-02 - 1.5849E+01 8.5456E-02 7.0229E-02 2.3570E-02 1.7701E-02 - 1.7783E+01 6.1289E-02 5.0128E-02 1.5858E-02 1.1890E-02 - 1.9953E+01 4.3351E-02 3.5800E-02 1.0789E-02 8.1767E-03 - 2.2387E+01 3.1062E-02 2.5615E-02 7.2989E-03 5.6053E-03 - 2.5119E+01 2.2236E-02 1.7700E-02 4.9694E-03 3.6562E-03 - 2.8184E+01 1.5866E-02 1.2381E-02 3.2825E-03 2.5011E-03 - 3.1623E+01 1.1136E-02 8.7496E-03 2.1276E-03 1.6385E-03 - 3.5481E+01 7.9504E-03 6.1751E-03 1.4195E-03 1.0901E-03 - 3.9811E+01 5.6662E-03 4.3791E-03 9.4462E-04 7.2711E-04 - 4.4668E+01 4.0280E-03 3.1014E-03 6.2412E-04 4.8888E-04 - 5.0119E+01 2.8663E-03 2.1834E-03 4.1143E-04 3.2541E-04 - 5.6234E+01 2.0296E-03 1.5389E-03 2.7443E-04 2.1782E-04 - 6.3096E+01 1.4370E-03 1.0852E-03 1.8613E-04 1.4552E-04 - 7.0795E+01 1.0188E-03 7.6252E-04 1.2282E-04 9.7023E-05 - 7.9433E+01 7.2147E-04 5.3396E-04 8.0025E-05 6.3728E-05 - 8.9125E+01 5.1078E-04 3.7311E-04 5.3492E-05 4.2611E-05 - 1.0000E+02 3.6123E-04 2.6405E-04 3.5865E-05 2.8791E-05 - 1.1220E+02 2.5525E-04 1.8566E-04 2.3822E-05 1.9113E-05 - 1.2589E+02 1.7992E-04 1.3017E-04 1.5838E-05 1.2648E-05 - 1.4125E+02 1.2675E-04 9.0535E-05 1.0562E-05 8.5197E-06 - 1.5849E+02 8.9304E-05 6.2965E-05 7.0042E-06 5.7371E-06 - 1.7783E+02 6.2339E-05 4.4047E-05 4.6177E-06 3.8090E-06 - 1.9953E+02 4.3638E-05 3.0668E-05 3.0809E-06 2.5880E-06 - 2.2387E+02 3.0690E-05 2.1276E-05 2.1015E-06 1.7545E-06 - 2.5119E+02 2.1485E-05 1.4792E-05 1.4251E-06 1.1609E-06 - 2.8184E+02 1.4969E-05 1.0278E-05 9.3992E-07 7.5634E-07 - 3.1623E+02 1.0537E-05 7.1457E-06 6.2475E-07 5.0081E-07 - 3.5481E+02 7.3537E-06 4.9503E-06 4.2102E-07 3.3678E-07 - 3.9811E+02 5.1348E-06 3.4396E-06 2.7786E-07 2.2821E-07 - 4.4668E+02 3.5990E-06 2.3794E-06 1.8589E-07 1.5331E-07 - 5.0119E+02 2.5096E-06 1.6400E-06 1.2551E-07 1.0466E-07 - 5.6234E+02 1.7485E-06 1.1391E-06 8.5568E-08 6.9561E-08 - 6.3096E+02 1.2131E-06 7.8630E-07 5.7925E-08 4.6859E-08 - 7.0795E+02 8.4522E-07 5.4102E-07 3.9152E-08 3.1735E-08 - 7.9433E+02 5.8544E-07 3.7078E-07 2.6402E-08 2.1450E-08 - 8.9125E+02 4.0583E-07 2.5587E-07 1.7766E-08 1.4293E-08 - 1.0000E+03 2.8219E-07 1.7648E-07 1.2021E-08 9.3615E-09 - 1.1220E+03 1.9437E-07 1.2026E-07 7.9886E-09 6.2319E-09 - 1.2589E+03 1.3472E-07 8.2506E-08 5.3939E-09 4.1342E-09 - 1.4125E+03 9.2194E-08 5.6104E-08 3.5511E-09 2.7864E-09 - 1.5849E+03 6.2752E-08 3.8414E-08 2.2967E-09 1.8424E-09 - 1.7783E+03 4.3064E-08 2.6532E-08 1.5228E-09 1.2016E-09 - 1.9953E+03 2.9634E-08 1.7770E-08 1.0902E-09 8.4477E-10 - 2.2387E+03 2.0271E-08 1.2078E-08 6.9459E-10 5.5549E-10 - 2.5119E+03 1.3857E-08 8.1794E-09 4.8189E-10 3.5545E-10 - 2.8184E+03 9.4291E-09 5.5075E-09 3.3616E-10 2.3919E-10 - 3.1623E+03 6.4233E-09 3.7892E-09 2.0838E-10 1.6337E-10 - 3.5481E+03 4.2432E-09 2.4831E-09 1.4059E-10 1.0830E-10 - 3.9811E+03 2.8663E-09 1.6537E-09 9.4510E-11 6.5161E-11 - 4.4668E+03 1.9218E-09 1.1094E-09 6.0549E-11 4.1642E-11 - 5.0119E+03 1.2817E-09 7.4587E-10 4.0981E-11 2.9879E-11 - 5.6234E+03 8.5952E-10 4.9335E-10 2.8129E-11 2.1033E-11 - 6.3096E+03 5.7706E-10 3.2685E-10 1.7110E-11 1.2714E-11 - 7.0795E+03 3.8609E-10 2.1862E-10 1.1508E-11 8.2244E-12 - 7.9433E+03 2.5624E-10 1.4582E-10 8.0079E-12 5.4546E-12 - 8.9125E+03 1.6996E-10 9.5007E-11 5.0881E-12 3.3085E-12 - 1.0000E+04 1.1301E-10 6.1573E-11 3.3042E-12 2.2882E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0335E+04 1.0664E+04 5.1057E+03 4.9044E+03 - 1.1220E-01 9.0667E+03 9.3583E+03 4.5325E+03 4.3033E+03 - 1.2589E-01 7.9538E+03 8.1794E+03 3.9676E+03 3.7088E+03 - 1.4125E-01 6.9182E+03 7.0959E+03 3.4537E+03 3.1611E+03 - 1.5849E-01 5.9388E+03 6.1171E+03 2.9912E+03 2.6985E+03 - 1.7783E-01 5.0599E+03 5.1884E+03 2.5674E+03 2.3022E+03 - 1.9953E-01 4.2701E+03 4.3591E+03 2.1886E+03 1.9474E+03 - 2.2387E-01 3.5819E+03 3.6400E+03 1.8480E+03 1.6211E+03 - 2.5119E-01 2.9594E+03 2.9972E+03 1.5453E+03 1.3356E+03 - 2.8184E-01 2.4170E+03 2.4488E+03 1.2835E+03 1.0884E+03 - 3.1623E-01 1.9591E+03 1.9841E+03 1.0475E+03 8.7997E+02 - 3.5481E-01 1.5764E+03 1.5962E+03 8.5083E+02 7.0989E+02 - 3.9811E-01 1.2596E+03 1.2753E+03 6.8509E+02 5.6730E+02 - 4.4668E-01 1.0025E+03 1.0054E+03 5.4249E+02 4.4887E+02 - 5.0119E-01 7.8828E+02 7.8627E+02 4.3184E+02 3.5178E+02 - 5.6234E-01 6.1322E+02 6.1332E+02 3.3816E+02 2.7183E+02 - 6.3096E-01 4.7563E+02 4.7566E+02 2.6126E+02 2.1085E+02 - 7.0795E-01 3.6624E+02 3.6286E+02 2.0194E+02 1.6220E+02 - 7.9433E-01 2.8076E+02 2.7532E+02 1.5533E+02 1.2238E+02 - 8.9125E-01 2.1299E+02 2.0963E+02 1.1770E+02 9.1884E+01 - 1.0000E+00 1.6198E+02 1.5823E+02 8.9101E+01 6.9182E+01 - 1.1220E+00 1.2278E+02 1.1871E+02 6.6346E+01 5.1881E+01 - 1.2589E+00 9.2152E+01 8.8433E+01 4.8805E+01 3.9018E+01 - 1.4125E+00 6.9272E+01 6.6377E+01 3.6428E+01 2.8820E+01 - 1.5849E+00 5.2015E+01 4.9368E+01 2.6926E+01 2.0941E+01 - 1.7783E+00 3.8830E+01 3.6073E+01 1.9509E+01 1.5161E+01 - 1.9953E+00 2.8764E+01 2.6445E+01 1.4017E+01 1.1041E+01 - 2.2387E+00 2.1070E+01 1.9559E+01 1.0272E+01 8.1120E+00 - 2.5119E+00 1.5537E+01 1.4280E+01 7.4853E+00 5.7736E+00 - 2.8184E+00 1.1450E+01 1.0233E+01 5.3898E+00 4.0673E+00 - 3.1623E+00 8.2039E+00 7.3701E+00 3.7135E+00 2.8197E+00 - 3.5481E+00 5.9926E+00 5.3323E+00 2.6035E+00 1.9769E+00 - 3.9811E+00 4.3401E+00 3.8274E+00 1.8549E+00 1.3989E+00 - 4.4668E+00 3.1341E+00 2.7344E+00 1.3083E+00 9.7737E-01 - 5.0119E+00 2.2680E+00 1.9628E+00 9.0558E-01 6.6723E-01 - 5.6234E+00 1.6383E+00 1.4153E+00 6.1730E-01 4.5087E-01 - 6.3096E+00 1.1774E+00 1.0078E+00 4.2724E-01 3.1470E-01 - 7.0795E+00 8.3825E-01 7.0380E-01 2.8963E-01 2.1964E-01 - 7.9433E+00 6.0171E-01 4.9370E-01 1.9555E-01 1.4945E-01 - 8.9125E+00 4.3121E-01 3.5268E-01 1.3319E-01 1.0060E-01 - 1.0000E+01 3.0523E-01 2.5317E-01 9.1583E-02 6.9138E-02 - 1.1220E+01 2.1793E-01 1.7977E-01 6.1890E-02 4.6363E-02 - 1.2589E+01 1.5612E-01 1.2778E-01 4.1422E-02 3.1356E-02 - 1.4125E+01 1.1155E-01 8.9592E-02 2.7411E-02 2.1718E-02 - 1.5849E+01 7.9972E-02 6.3654E-02 1.8095E-02 1.4448E-02 - 1.7783E+01 5.7234E-02 4.5291E-02 1.2277E-02 9.4158E-03 - 1.9953E+01 4.1001E-02 3.1772E-02 8.3197E-03 6.3342E-03 - 2.2387E+01 2.9122E-02 2.2745E-02 5.5550E-03 4.2402E-03 - 2.5119E+01 2.0297E-02 1.6138E-02 3.8387E-03 2.8022E-03 - 2.8184E+01 1.4576E-02 1.1207E-02 2.5093E-03 1.8297E-03 - 3.1623E+01 1.0439E-02 8.0220E-03 1.6643E-03 1.2928E-03 - 3.5481E+01 7.4239E-03 5.6821E-03 1.1060E-03 8.6161E-04 - 3.9811E+01 5.2869E-03 4.0139E-03 7.2973E-04 5.7319E-04 - 4.4668E+01 3.7490E-03 2.8092E-03 4.8439E-04 3.8154E-04 - 5.0119E+01 2.6473E-03 1.9736E-03 3.2329E-04 2.5437E-04 - 5.6234E+01 1.8820E-03 1.3967E-03 2.1515E-04 1.6881E-04 - 6.3096E+01 1.3380E-03 9.8553E-04 1.4249E-04 1.1168E-04 - 7.0795E+01 9.4468E-04 6.9282E-04 9.4570E-05 7.4907E-05 - 7.9433E+01 6.6713E-04 4.8208E-04 6.3536E-05 5.0322E-05 - 8.9125E+01 4.7268E-04 3.3906E-04 4.1272E-05 3.3618E-05 - 1.0000E+02 3.2973E-04 2.3735E-04 2.7919E-05 2.2217E-05 - 1.1220E+02 2.3151E-04 1.6531E-04 1.8557E-05 1.5099E-05 - 1.2589E+02 1.6310E-04 1.1539E-04 1.2534E-05 1.0060E-05 - 1.4125E+02 1.1461E-04 8.0923E-05 8.4289E-06 6.6452E-06 - 1.5849E+02 8.0398E-05 5.6307E-05 5.6444E-06 4.4570E-06 - 1.7783E+02 5.6397E-05 3.9126E-05 3.7610E-06 3.0089E-06 - 1.9953E+02 3.9414E-05 2.7301E-05 2.5188E-06 2.0113E-06 - 2.2387E+02 2.7597E-05 1.8853E-05 1.6831E-06 1.3505E-06 - 2.5119E+02 1.9442E-05 1.2974E-05 1.1196E-06 9.0580E-07 - 2.8184E+02 1.3549E-05 9.0111E-06 7.5978E-07 6.2629E-07 - 3.1623E+02 9.4300E-06 6.3402E-06 5.0929E-07 4.1388E-07 - 3.5481E+02 6.5779E-06 4.3786E-06 3.3913E-07 2.8022E-07 - 3.9811E+02 4.5949E-06 3.0145E-06 2.2997E-07 1.8599E-07 - 4.4668E+02 3.1916E-06 2.0811E-06 1.5887E-07 1.2431E-07 - 5.0119E+02 2.2218E-06 1.4386E-06 1.0496E-07 8.4165E-08 - 5.6234E+02 1.5483E-06 9.9708E-07 7.0693E-08 5.6410E-08 - 6.3096E+02 1.0753E-06 6.8432E-07 4.8019E-08 3.7830E-08 - 7.0795E+02 7.4507E-07 4.6942E-07 3.2142E-08 2.5640E-08 - 7.9433E+02 5.1423E-07 3.2347E-07 2.1696E-08 1.7294E-08 - 8.9125E+02 3.5582E-07 2.2284E-07 1.4872E-08 1.1779E-08 - 1.0000E+03 2.4834E-07 1.5299E-07 9.9847E-09 7.5556E-09 - 1.1220E+03 1.6945E-07 1.0362E-07 6.5383E-09 4.9989E-09 - 1.2589E+03 1.1550E-07 7.0765E-08 4.3974E-09 3.4380E-09 - 1.4125E+03 7.9210E-08 4.8565E-08 2.9927E-09 2.3202E-09 - 1.5849E+03 5.4578E-08 3.3049E-08 1.9858E-09 1.5920E-09 - 1.7783E+03 3.7112E-08 2.2555E-08 1.2627E-09 1.0442E-09 - 1.9953E+03 2.5171E-08 1.5163E-08 8.6604E-10 6.9198E-10 - 2.2387E+03 1.7144E-08 1.0161E-08 6.0444E-10 4.7243E-10 - 2.5119E+03 1.1749E-08 6.9413E-09 3.7816E-10 2.9777E-10 - 2.8184E+03 8.0000E-09 4.6244E-09 2.4639E-10 1.8899E-10 - 3.1623E+03 5.4250E-09 3.1599E-09 1.7102E-10 1.2530E-10 - 3.5481E+03 3.5353E-09 2.0810E-09 1.0878E-10 8.6264E-11 - 3.9811E+03 2.3719E-09 1.3757E-09 7.1899E-11 5.7587E-11 - 4.4668E+03 1.6098E-09 9.2526E-10 4.8688E-11 3.5482E-11 - 5.0119E+03 1.0729E-09 6.2272E-10 3.3026E-11 2.3640E-11 - 5.6234E+03 7.1176E-10 4.0849E-10 2.1122E-11 1.6473E-11 - 6.3096E+03 4.7627E-10 2.6462E-10 1.4694E-11 1.0702E-11 - 7.0795E+03 3.1940E-10 1.7662E-10 9.6350E-12 6.9887E-12 - 7.9433E+03 2.1051E-10 1.1890E-10 6.1823E-12 4.3490E-12 - 8.9125E+03 1.3735E-10 7.7019E-11 4.0104E-12 2.8420E-12 - 1.0000E+04 9.0373E-11 5.0874E-11 2.5118E-12 2.1866E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1370E+04 1.1595E+04 5.5605E+03 5.3578E+03 - 1.1220E-01 9.9478E+03 1.0151E+04 4.9371E+03 4.6861E+03 - 1.2589E-01 8.6803E+03 8.8499E+03 4.3203E+03 4.0550E+03 - 1.4125E-01 7.5406E+03 7.6334E+03 3.7491E+03 3.4713E+03 - 1.5849E-01 6.4778E+03 6.5379E+03 3.2352E+03 2.9521E+03 - 1.7783E-01 5.4974E+03 5.5541E+03 2.7505E+03 2.4976E+03 - 1.9953E-01 4.6154E+03 4.6451E+03 2.3293E+03 2.0804E+03 - 2.2387E-01 3.8437E+03 3.8334E+03 1.9599E+03 1.7201E+03 - 2.5119E-01 3.1573E+03 3.1519E+03 1.6292E+03 1.4257E+03 - 2.8184E-01 2.5646E+03 2.5777E+03 1.3405E+03 1.1656E+03 - 3.1623E-01 2.0751E+03 2.0896E+03 1.0960E+03 9.3810E+02 - 3.5481E-01 1.6637E+03 1.6623E+03 8.8991E+02 7.5053E+02 - 3.9811E-01 1.3160E+03 1.3091E+03 7.1374E+02 5.9613E+02 - 4.4668E-01 1.0404E+03 1.0329E+03 5.6035E+02 4.6888E+02 - 5.0119E-01 8.1450E+02 8.0875E+02 4.3901E+02 3.6457E+02 - 5.6234E-01 6.2837E+02 6.2394E+02 3.4504E+02 2.8181E+02 - 6.3096E-01 4.8461E+02 4.7685E+02 2.6762E+02 2.1599E+02 - 7.0795E-01 3.7312E+02 3.6424E+02 2.0715E+02 1.6501E+02 - 7.9433E-01 2.8626E+02 2.7809E+02 1.5923E+02 1.2505E+02 - 8.9125E-01 2.1615E+02 2.1151E+02 1.1936E+02 9.3955E+01 - 1.0000E+00 1.6393E+02 1.5894E+02 8.9469E+01 7.0225E+01 - 1.1220E+00 1.2350E+02 1.1833E+02 6.6458E+01 5.2321E+01 - 1.2589E+00 9.2535E+01 8.8306E+01 4.9013E+01 3.8733E+01 - 1.4125E+00 6.9945E+01 6.5830E+01 3.6309E+01 2.8392E+01 - 1.5849E+00 5.2303E+01 4.8767E+01 2.6505E+01 2.0731E+01 - 1.7783E+00 3.8615E+01 3.6064E+01 1.9508E+01 1.5204E+01 - 1.9953E+00 2.8511E+01 2.6733E+01 1.4403E+01 1.1000E+01 - 2.2387E+00 2.1012E+01 1.9522E+01 1.0379E+01 7.8826E+00 - 2.5119E+00 1.5455E+01 1.4117E+01 7.4371E+00 5.7292E+00 - 2.8184E+00 1.1307E+01 1.0347E+01 5.2597E+00 4.1428E+00 - 3.1623E+00 8.2403E+00 7.3867E+00 3.7039E+00 2.8416E+00 - 3.5481E+00 6.0232E+00 5.3069E+00 2.6250E+00 1.9976E+00 - 3.9811E+00 4.3569E+00 3.8406E+00 1.8380E+00 1.3936E+00 - 4.4668E+00 3.1433E+00 2.7721E+00 1.2963E+00 9.6574E-01 - 5.0119E+00 2.2614E+00 1.9763E+00 8.9553E-01 6.7786E-01 - 5.6234E+00 1.6128E+00 1.4163E+00 6.1691E-01 4.6420E-01 - 6.3096E+00 1.1530E+00 1.0028E+00 4.2951E-01 3.1536E-01 - 7.0795E+00 8.3190E-01 7.0522E-01 2.9417E-01 2.2217E-01 - 7.9433E+00 6.0072E-01 5.0455E-01 2.0433E-01 1.5088E-01 - 8.9125E+00 4.3437E-01 3.6190E-01 1.4382E-01 1.0148E-01 - 1.0000E+01 3.0741E-01 2.5673E-01 9.1898E-02 6.8681E-02 - 1.1220E+01 2.1893E-01 1.8024E-01 6.2124E-02 4.6465E-02 - 1.2589E+01 1.5661E-01 1.2705E-01 4.2145E-02 3.1364E-02 - 1.4125E+01 1.1192E-01 9.0458E-02 2.8224E-02 2.1064E-02 - 1.5849E+01 7.9893E-02 6.3591E-02 1.9231E-02 1.4264E-02 - 1.7783E+01 5.6630E-02 4.5484E-02 1.2638E-02 9.5498E-03 - 1.9953E+01 4.0725E-02 3.2075E-02 8.3998E-03 6.1370E-03 - 2.2387E+01 2.9312E-02 2.2582E-02 5.7484E-03 4.1212E-03 - 2.5119E+01 2.0886E-02 1.6133E-02 3.8210E-03 2.8751E-03 - 2.8184E+01 1.4882E-02 1.1240E-02 2.5162E-03 1.9455E-03 - 3.1623E+01 1.0441E-02 7.9772E-03 1.6550E-03 1.2803E-03 - 3.5481E+01 7.4179E-03 5.6533E-03 1.1027E-03 8.5102E-04 - 3.9811E+01 5.2741E-03 4.0001E-03 7.3505E-04 5.6510E-04 - 4.4668E+01 3.7449E-03 2.8185E-03 4.8937E-04 3.7746E-04 - 5.0119E+01 2.6516E-03 1.9861E-03 3.2214E-04 2.5578E-04 - 5.6234E+01 1.8805E-03 1.4031E-03 2.1589E-04 1.7206E-04 - 6.3096E+01 1.3309E-03 9.9514E-04 1.4274E-04 1.1387E-04 - 7.0795E+01 9.3841E-04 6.9319E-04 9.4660E-05 7.5739E-05 - 7.9433E+01 6.6363E-04 4.8415E-04 6.3610E-05 5.2025E-05 - 8.9125E+01 4.7119E-04 3.4034E-04 4.2759E-05 3.4724E-05 - 1.0000E+02 3.3022E-04 2.3762E-04 2.8009E-05 2.2396E-05 - 1.1220E+02 2.3261E-04 1.6561E-04 1.8622E-05 1.4897E-05 - 1.2589E+02 1.6329E-04 1.1545E-04 1.2557E-05 9.9179E-06 - 1.4125E+02 1.1450E-04 8.0906E-05 8.3176E-06 6.6910E-06 - 1.5849E+02 8.0740E-05 5.6550E-05 5.4868E-06 4.4920E-06 - 1.7783E+02 5.6763E-05 3.9283E-05 3.7109E-06 2.9831E-06 - 1.9953E+02 3.9681E-05 2.7203E-05 2.5257E-06 1.9849E-06 - 2.2387E+02 2.7760E-05 1.8854E-05 1.6561E-06 1.3624E-06 - 2.5119E+02 1.9335E-05 1.3028E-05 1.1276E-06 9.2422E-07 - 2.8184E+02 1.3479E-05 9.1111E-06 7.5233E-07 6.0968E-07 - 3.1623E+02 9.4499E-06 6.3118E-06 5.0804E-07 4.1177E-07 - 3.5481E+02 6.5833E-06 4.3804E-06 3.4572E-07 2.7737E-07 - 3.9811E+02 4.5822E-06 3.0267E-06 2.3026E-07 1.8750E-07 - 4.4668E+02 3.1916E-06 2.0891E-06 1.5415E-07 1.2708E-07 - 5.0119E+02 2.2283E-06 1.4361E-06 1.0620E-07 8.4123E-08 - 5.6234E+02 1.5547E-06 9.9037E-07 7.1159E-08 5.5032E-08 - 6.3096E+02 1.0755E-06 6.8104E-07 4.8632E-08 3.7380E-08 - 7.0795E+02 7.3946E-07 4.7088E-07 3.2352E-08 2.5461E-08 - 7.9433E+02 5.1187E-07 3.2261E-07 2.1294E-08 1.6635E-08 - 8.9125E+02 3.5543E-07 2.2186E-07 1.4305E-08 1.1439E-08 - 1.0000E+03 2.4761E-07 1.5255E-07 9.7273E-09 7.6260E-09 - 1.1220E+03 1.6898E-07 1.0395E-07 6.4976E-09 4.9874E-09 - 1.2589E+03 1.1546E-07 7.0825E-08 4.4698E-09 3.2768E-09 - 1.4125E+03 7.9100E-08 4.8175E-08 2.9375E-09 2.1776E-09 - 1.5849E+03 5.4452E-08 3.2858E-08 1.9171E-09 1.4503E-09 - 1.7783E+03 3.6972E-08 2.2361E-08 1.3131E-09 9.8702E-10 - 1.9953E+03 2.5242E-08 1.5080E-08 8.8404E-10 6.6479E-10 - 2.2387E+03 1.7160E-08 1.0174E-08 5.9747E-10 4.3379E-10 - 2.5119E+03 1.1614E-08 6.8452E-09 3.9001E-10 2.8754E-10 - 2.8184E+03 7.8535E-09 4.6704E-09 2.4873E-10 1.8942E-10 - 3.1623E+03 5.4116E-09 3.1872E-09 1.6843E-10 1.3079E-10 - 3.5481E+03 3.5714E-09 2.0837E-09 1.0648E-10 8.7863E-11 - 3.9811E+03 2.4110E-09 1.3703E-09 6.8547E-11 5.7346E-11 - 4.4668E+03 1.5896E-09 9.0119E-10 4.7602E-11 3.6922E-11 - 5.0119E+03 1.0578E-09 6.0043E-10 3.3250E-11 2.4747E-11 - 5.6234E+03 7.0286E-10 4.1070E-10 2.1061E-11 1.4914E-11 - 6.3096E+03 4.7342E-10 2.7139E-10 1.3888E-11 9.5884E-12 - 7.0795E+03 3.1391E-10 1.7812E-10 9.0733E-12 6.7404E-12 - 7.9433E+03 2.0794E-10 1.1590E-10 6.1086E-12 4.5381E-12 - 8.9125E+03 1.3882E-10 7.6693E-11 4.0994E-12 2.9157E-12 - 1.0000E+04 9.0408E-11 5.0289E-11 2.7110E-12 1.7863E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1628E+04 1.1716E+04 5.6057E+03 5.4712E+03 - 1.1220E-01 1.0150E+04 1.0266E+04 4.9435E+03 4.7856E+03 - 1.2589E-01 8.8291E+03 8.9544E+03 4.3323E+03 4.1509E+03 - 1.4125E-01 7.6591E+03 7.7189E+03 3.7728E+03 3.5633E+03 - 1.5849E-01 6.5906E+03 6.5505E+03 3.2408E+03 3.0231E+03 - 1.7783E-01 5.5998E+03 5.5679E+03 2.7460E+03 2.5441E+03 - 1.9953E-01 4.6983E+03 4.6731E+03 2.3201E+03 2.1353E+03 - 2.2387E-01 3.8901E+03 3.8647E+03 1.9482E+03 1.7718E+03 - 2.5119E-01 3.1891E+03 3.1686E+03 1.6167E+03 1.4562E+03 - 2.8184E-01 2.5942E+03 2.5656E+03 1.3374E+03 1.1818E+03 - 3.1623E-01 2.0907E+03 2.0682E+03 1.0889E+03 9.4635E+02 - 3.5481E-01 1.6715E+03 1.6520E+03 8.6999E+02 7.5914E+02 - 3.9811E-01 1.3239E+03 1.3045E+03 6.9685E+02 6.0606E+02 - 4.4668E-01 1.0404E+03 1.0278E+03 5.5336E+02 4.7578E+02 - 5.0119E-01 8.1210E+02 8.0626E+02 4.3632E+02 3.6725E+02 - 5.6234E-01 6.3051E+02 6.1985E+02 3.4111E+02 2.8246E+02 - 6.3096E-01 4.8532E+02 4.7536E+02 2.6369E+02 2.1913E+02 - 7.0795E-01 3.7215E+02 3.6544E+02 2.0402E+02 1.6690E+02 - 7.9433E-01 2.8341E+02 2.7774E+02 1.5456E+02 1.2580E+02 - 8.9125E-01 2.1612E+02 2.1017E+02 1.1559E+02 9.4656E+01 - 1.0000E+00 1.6307E+02 1.5867E+02 8.8404E+01 7.0902E+01 - 1.1220E+00 1.2321E+02 1.1882E+02 6.5472E+01 5.2739E+01 - 1.2589E+00 9.2652E+01 8.8189E+01 4.8288E+01 3.8810E+01 - 1.4125E+00 6.9520E+01 6.5472E+01 3.5808E+01 2.8221E+01 - 1.5849E+00 5.2091E+01 4.8289E+01 2.6536E+01 2.0750E+01 - 1.7783E+00 3.8578E+01 3.5640E+01 1.9451E+01 1.5339E+01 - 1.9953E+00 2.8350E+01 2.6143E+01 1.4035E+01 1.1177E+01 - 2.2387E+00 2.0962E+01 1.9198E+01 1.0056E+01 7.9869E+00 - 2.5119E+00 1.5397E+01 1.4001E+01 7.2504E+00 5.6219E+00 - 2.8184E+00 1.1236E+01 1.0146E+01 5.2487E+00 4.0370E+00 - 3.1623E+00 8.2166E+00 7.3333E+00 3.7183E+00 2.8424E+00 - 3.5481E+00 5.9818E+00 5.2962E+00 2.6093E+00 1.9848E+00 - 3.9811E+00 4.2805E+00 3.8098E+00 1.8261E+00 1.3924E+00 - 4.4668E+00 3.1103E+00 2.7202E+00 1.2825E+00 9.6873E-01 - 5.0119E+00 2.2694E+00 1.9595E+00 8.8445E-01 6.6983E-01 - 5.6234E+00 1.6224E+00 1.3973E+00 6.1239E-01 4.5914E-01 - 6.3096E+00 1.1684E+00 9.9120E-01 4.2956E-01 3.1202E-01 - 7.0795E+00 8.4006E-01 7.0568E-01 2.9548E-01 2.1445E-01 - 7.9433E+00 6.0131E-01 5.0278E-01 1.9923E-01 1.5062E-01 - 8.9125E+00 4.3074E-01 3.6096E-01 1.3744E-01 1.0200E-01 - 1.0000E+01 3.0638E-01 2.5251E-01 9.1601E-02 6.7669E-02 - 1.1220E+01 2.1637E-01 1.7803E-01 6.2762E-02 4.6131E-02 - 1.2589E+01 1.5512E-01 1.2593E-01 4.1782E-02 3.1069E-02 - 1.4125E+01 1.1129E-01 8.9968E-02 2.7593E-02 2.0935E-02 - 1.5849E+01 7.8635E-02 6.3133E-02 1.8687E-02 1.4084E-02 - 1.7783E+01 5.6360E-02 4.4801E-02 1.2359E-02 9.3950E-03 - 1.9953E+01 4.0399E-02 3.2066E-02 8.3648E-03 6.3246E-03 - 2.2387E+01 2.8821E-02 2.2765E-02 5.7206E-03 4.2721E-03 - 2.5119E+01 2.0465E-02 1.6137E-02 3.7657E-03 2.9383E-03 - 2.8184E+01 1.4640E-02 1.1207E-02 2.4919E-03 1.9519E-03 - 3.1623E+01 1.0436E-02 7.9962E-03 1.6606E-03 1.2826E-03 - 3.5481E+01 7.4023E-03 5.6441E-03 1.1081E-03 8.5519E-04 - 3.9811E+01 5.2571E-03 3.9860E-03 7.3222E-04 5.6713E-04 - 4.4668E+01 3.7262E-03 2.8142E-03 4.8822E-04 3.8008E-04 - 5.0119E+01 2.6452E-03 1.9803E-03 3.2841E-04 2.5639E-04 - 5.6234E+01 1.8726E-03 1.3961E-03 2.1660E-04 1.7158E-04 - 6.3096E+01 1.3172E-03 9.7915E-04 1.4251E-04 1.1259E-04 - 7.0795E+01 9.3022E-04 6.8763E-04 9.5969E-05 7.3657E-05 - 7.9433E+01 6.6156E-04 4.8488E-04 6.4253E-05 4.9086E-05 - 8.9125E+01 4.7045E-04 3.3933E-04 4.2751E-05 3.2876E-05 - 1.0000E+02 3.3063E-04 2.3798E-04 2.7730E-05 2.2304E-05 - 1.1220E+02 2.3211E-04 1.6634E-04 1.8342E-05 1.4833E-05 - 1.2589E+02 1.6321E-04 1.1581E-04 1.2387E-05 9.9985E-06 - 1.4125E+02 1.1419E-04 8.0755E-05 8.3608E-06 6.7501E-06 - 1.5849E+02 8.0087E-05 5.6370E-05 5.4937E-06 4.5583E-06 - 1.7783E+02 5.6586E-05 3.9544E-05 3.6717E-06 3.0082E-06 - 1.9953E+02 3.9844E-05 2.7444E-05 2.4406E-06 2.0299E-06 - 2.2387E+02 2.7721E-05 1.9016E-05 1.6073E-06 1.3583E-06 - 2.5119E+02 1.9342E-05 1.3210E-05 1.1077E-06 9.1446E-07 - 2.8184E+02 1.3510E-05 9.1266E-06 7.7085E-07 6.1057E-07 - 3.1623E+02 9.4419E-06 6.3127E-06 5.0884E-07 4.0424E-07 - 3.5481E+02 6.5752E-06 4.3525E-06 3.3993E-07 2.7368E-07 - 3.9811E+02 4.5781E-06 3.0172E-06 2.2817E-07 1.8447E-07 - 4.4668E+02 3.2060E-06 2.0958E-06 1.5580E-07 1.2361E-07 - 5.0119E+02 2.2366E-06 1.4398E-06 1.0602E-07 8.2215E-08 - 5.6234E+02 1.5564E-06 9.9895E-07 7.2353E-08 5.6419E-08 - 6.3096E+02 1.0778E-06 6.8822E-07 4.7701E-08 3.8175E-08 - 7.0795E+02 7.4422E-07 4.7389E-07 3.1271E-08 2.5492E-08 - 7.9433E+02 5.1198E-07 3.2540E-07 2.1330E-08 1.7205E-08 - 8.9125E+02 3.5381E-07 2.2244E-07 1.4624E-08 1.1538E-08 - 1.0000E+03 2.4509E-07 1.5357E-07 9.8687E-09 7.5035E-09 - 1.1220E+03 1.6875E-07 1.0426E-07 6.4549E-09 5.0168E-09 - 1.2589E+03 1.1650E-07 7.0845E-08 4.3300E-09 3.4844E-09 - 1.4125E+03 7.9651E-08 4.8368E-08 2.9834E-09 2.2834E-09 - 1.5849E+03 5.4537E-08 3.2509E-08 1.9443E-09 1.5102E-09 - 1.7783E+03 3.7352E-08 2.2327E-08 1.3191E-09 1.0074E-09 - 1.9953E+03 2.5266E-08 1.5245E-08 9.3005E-10 6.4559E-10 - 2.2387E+03 1.7120E-08 1.0218E-08 6.0901E-10 4.2952E-10 - 2.5119E+03 1.1628E-08 6.9332E-09 3.8894E-10 2.8533E-10 - 2.8184E+03 7.9254E-09 4.6090E-09 2.6436E-10 1.9429E-10 - 3.1623E+03 5.4622E-09 3.1463E-09 1.6959E-10 1.2789E-10 - 3.5481E+03 3.5610E-09 2.0751E-09 1.0984E-10 8.5989E-11 - 3.9811E+03 2.3717E-09 1.3901E-09 7.0839E-11 5.8514E-11 - 4.4668E+03 1.5992E-09 9.2230E-10 4.8345E-11 3.7643E-11 - 5.0119E+03 1.0640E-09 6.1006E-10 3.3161E-11 2.3698E-11 - 5.6234E+03 7.0453E-10 4.0030E-10 1.9672E-11 1.5136E-11 - 6.3096E+03 4.7251E-10 2.6516E-10 1.4744E-11 1.0128E-11 - 7.0795E+03 3.1468E-10 1.7554E-10 9.5167E-12 6.4781E-12 - 7.9433E+03 2.0683E-10 1.1639E-10 6.0602E-12 4.3905E-12 - 8.9125E+03 1.3720E-10 7.6470E-11 3.9843E-12 2.9472E-12 - 1.0000E+04 9.1231E-11 4.9233E-11 2.5927E-12 1.9775E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1228E+04 1.1208E+04 5.3055E+03 5.3829E+03 - 1.1220E-01 9.8998E+03 9.7948E+03 4.7006E+03 4.6848E+03 - 1.2589E-01 8.6256E+03 8.5019E+03 4.0959E+03 4.0754E+03 - 1.4125E-01 7.4502E+03 7.3424E+03 3.5523E+03 3.4944E+03 - 1.5849E-01 6.3883E+03 6.3141E+03 3.0559E+03 2.9648E+03 - 1.7783E-01 5.3999E+03 5.3374E+03 2.6021E+03 2.5054E+03 - 1.9953E-01 4.5447E+03 4.4534E+03 2.2121E+03 2.1019E+03 - 2.2387E-01 3.7849E+03 3.6964E+03 1.8626E+03 1.7493E+03 - 2.5119E-01 3.1106E+03 3.0363E+03 1.5447E+03 1.4292E+03 - 2.8184E-01 2.5399E+03 2.4738E+03 1.2749E+03 1.1636E+03 - 3.1623E-01 2.0506E+03 2.0025E+03 1.0441E+03 9.4843E+02 - 3.5481E-01 1.6395E+03 1.5996E+03 8.4468E+02 7.5683E+02 - 3.9811E-01 1.3080E+03 1.2703E+03 6.7993E+02 5.9770E+02 - 4.4668E-01 1.0319E+03 1.0034E+03 5.3962E+02 4.6538E+02 - 5.0119E-01 8.0745E+02 7.8484E+02 4.2349E+02 3.6302E+02 - 5.6234E-01 6.2771E+02 6.1034E+02 3.3506E+02 2.8435E+02 - 6.3096E-01 4.8540E+02 4.6917E+02 2.6020E+02 2.1962E+02 - 7.0795E-01 3.7264E+02 3.5727E+02 1.9866E+02 1.6670E+02 - 7.9433E-01 2.8492E+02 2.7088E+02 1.5050E+02 1.2438E+02 - 8.9125E-01 2.1607E+02 2.0586E+02 1.1450E+02 9.4581E+01 - 1.0000E+00 1.6312E+02 1.5620E+02 8.6543E+01 7.1386E+01 - 1.1220E+00 1.2395E+02 1.1752E+02 6.5356E+01 5.2614E+01 - 1.2589E+00 9.2714E+01 8.8029E+01 4.8674E+01 3.8682E+01 - 1.4125E+00 6.9171E+01 6.5616E+01 3.5584E+01 2.8622E+01 - 1.5849E+00 5.2109E+01 4.8574E+01 2.6344E+01 2.0995E+01 - 1.7783E+00 3.8774E+01 3.6034E+01 1.9394E+01 1.5252E+01 - 1.9953E+00 2.8554E+01 2.6556E+01 1.4194E+01 1.1031E+01 - 2.2387E+00 2.1012E+01 1.9344E+01 1.0164E+01 7.9637E+00 - 2.5119E+00 1.5326E+01 1.4010E+01 7.2325E+00 5.8072E+00 - 2.8184E+00 1.1229E+01 1.0101E+01 5.2088E+00 4.1037E+00 - 3.1623E+00 8.2111E+00 7.3528E+00 3.7005E+00 2.8171E+00 - 3.5481E+00 5.9543E+00 5.2911E+00 2.6283E+00 1.9938E+00 - 3.9811E+00 4.3380E+00 3.8106E+00 1.8497E+00 1.4055E+00 - 4.4668E+00 3.1406E+00 2.7453E+00 1.2789E+00 9.7217E-01 - 5.0119E+00 2.2734E+00 1.9553E+00 8.8344E-01 6.5934E-01 - 5.6234E+00 1.6270E+00 1.3970E+00 6.1381E-01 4.5959E-01 - 6.3096E+00 1.1628E+00 9.9472E-01 4.2362E-01 3.2367E-01 - 7.0795E+00 8.3897E-01 7.1004E-01 2.9391E-01 2.2172E-01 - 7.9433E+00 5.9815E-01 5.0719E-01 1.9918E-01 1.5278E-01 - 8.9125E+00 4.3373E-01 3.6073E-01 1.3278E-01 1.0304E-01 - 1.0000E+01 3.0684E-01 2.5193E-01 9.2257E-02 6.9393E-02 - 1.1220E+01 2.1834E-01 1.7901E-01 6.2137E-02 4.6893E-02 - 1.2589E+01 1.5574E-01 1.2593E-01 4.1729E-02 3.1187E-02 - 1.4125E+01 1.1142E-01 8.8505E-02 2.8087E-02 2.1084E-02 - 1.5849E+01 7.9526E-02 6.2993E-02 1.9154E-02 1.4010E-02 - 1.7783E+01 5.6093E-02 4.4123E-02 1.2568E-02 9.3940E-03 - 1.9953E+01 4.0381E-02 3.1527E-02 8.1802E-03 6.3715E-03 - 2.2387E+01 2.8536E-02 2.2427E-02 5.5108E-03 4.1436E-03 - 2.5119E+01 2.0113E-02 1.6053E-02 3.6380E-03 2.7106E-03 - 2.8184E+01 1.4455E-02 1.1513E-02 2.3968E-03 1.8524E-03 - 3.1623E+01 1.0398E-02 7.9589E-03 1.6623E-03 1.2746E-03 - 3.5481E+01 7.4029E-03 5.6286E-03 1.1057E-03 8.5641E-04 - 3.9811E+01 5.2541E-03 3.9765E-03 7.3347E-04 5.6671E-04 - 4.4668E+01 3.7302E-03 2.8025E-03 4.8385E-04 3.7673E-04 - 5.0119E+01 2.6407E-03 1.9754E-03 3.2292E-04 2.5093E-04 - 5.6234E+01 1.8736E-03 1.3943E-03 2.1419E-04 1.6834E-04 - 6.3096E+01 1.3271E-03 9.8251E-04 1.4050E-04 1.1299E-04 - 7.0795E+01 9.3710E-04 6.8908E-04 9.1867E-05 7.5745E-05 - 7.9433E+01 6.6418E-04 4.8389E-04 6.1658E-05 4.9930E-05 - 8.9125E+01 4.6918E-04 3.4111E-04 4.1763E-05 3.3848E-05 - 1.0000E+02 3.2931E-04 2.3747E-04 2.7851E-05 2.2416E-05 - 1.1220E+02 2.3147E-04 1.6608E-04 1.8599E-05 1.4803E-05 - 1.2589E+02 1.6311E-04 1.1614E-04 1.2453E-05 1.0008E-05 - 1.4125E+02 1.1436E-04 8.0624E-05 8.2744E-06 6.7396E-06 - 1.5849E+02 8.0199E-05 5.6337E-05 5.5668E-06 4.5404E-06 - 1.7783E+02 5.6266E-05 3.9393E-05 3.8152E-06 2.9621E-06 - 1.9953E+02 3.9526E-05 2.7261E-05 2.5440E-06 1.9748E-06 - 2.2387E+02 2.7661E-05 1.8993E-05 1.6833E-06 1.3568E-06 - 2.5119E+02 1.9243E-05 1.3104E-05 1.1157E-06 9.1864E-07 - 2.8184E+02 1.3468E-05 9.0539E-06 7.5113E-07 5.9748E-07 - 3.1623E+02 9.4452E-06 6.3325E-06 5.0772E-07 4.1046E-07 - 3.5481E+02 6.5806E-06 4.3693E-06 3.4380E-07 2.7559E-07 - 3.9811E+02 4.5891E-06 3.0166E-06 2.3020E-07 1.8480E-07 - 4.4668E+02 3.2022E-06 2.0870E-06 1.5553E-07 1.2147E-07 - 5.0119E+02 2.2329E-06 1.4451E-06 1.0496E-07 8.3080E-08 - 5.6234E+02 1.5516E-06 9.9994E-07 7.0840E-08 5.6568E-08 - 6.3096E+02 1.0731E-06 6.8708E-07 4.7067E-08 3.7305E-08 - 7.0795E+02 7.4420E-07 4.7079E-07 3.2024E-08 2.4678E-08 - 7.9433E+02 5.1300E-07 3.2276E-07 2.2104E-08 1.6895E-08 - 8.9125E+02 3.5464E-07 2.2228E-07 1.4655E-08 1.1504E-08 - 1.0000E+03 2.4721E-07 1.5368E-07 9.6079E-09 7.7721E-09 - 1.1220E+03 1.6939E-07 1.0475E-07 6.3462E-09 5.0866E-09 - 1.2589E+03 1.1652E-07 7.1007E-08 4.4382E-09 3.4506E-09 - 1.4125E+03 8.0240E-08 4.8308E-08 2.9604E-09 2.2837E-09 - 1.5849E+03 5.4687E-08 3.2904E-08 1.9599E-09 1.5101E-09 - 1.7783E+03 3.7105E-08 2.2340E-08 1.2655E-09 9.8827E-10 - 1.9953E+03 2.5219E-08 1.5190E-08 8.6600E-10 6.4919E-10 - 2.2387E+03 1.7089E-08 1.0262E-08 5.9416E-10 4.1019E-10 - 2.5119E+03 1.1562E-08 6.8357E-09 4.1450E-10 2.7831E-10 - 2.8184E+03 7.8625E-09 4.6289E-09 2.7048E-10 1.8869E-10 - 3.1623E+03 5.4162E-09 3.1776E-09 1.6964E-10 1.2956E-10 - 3.5481E+03 3.5533E-09 2.0878E-09 1.1568E-10 8.0505E-11 - 3.9811E+03 2.3826E-09 1.3879E-09 7.6972E-11 5.4682E-11 - 4.4668E+03 1.5977E-09 9.2557E-10 5.2041E-11 3.4625E-11 - 5.0119E+03 1.0763E-09 6.1510E-10 3.3514E-11 2.4034E-11 - 5.6234E+03 7.2266E-10 4.0532E-10 2.1769E-11 1.5691E-11 - 6.3096E+03 4.7269E-10 2.6645E-10 1.4310E-11 9.5624E-12 - 7.0795E+03 3.1371E-10 1.7778E-10 9.5158E-12 6.1732E-12 - 7.9433E+03 2.0613E-10 1.1944E-10 6.0835E-12 4.0764E-12 - 8.9125E+03 1.3444E-10 7.7754E-11 4.2373E-12 2.6610E-12 - 1.0000E+04 8.8395E-11 4.9296E-11 2.8299E-12 1.5802E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0679E+04 1.0682E+04 5.0171E+03 5.0810E+03 - 1.1220E-01 9.3805E+03 9.3431E+03 4.4421E+03 4.4635E+03 - 1.2589E-01 8.1695E+03 8.1438E+03 3.8996E+03 3.8876E+03 - 1.4125E-01 7.0909E+03 7.0377E+03 3.3885E+03 3.3342E+03 - 1.5849E-01 6.0991E+03 6.0181E+03 2.9106E+03 2.8455E+03 - 1.7783E-01 5.1857E+03 5.1283E+03 2.4801E+03 2.4236E+03 - 1.9953E-01 4.3700E+03 4.3013E+03 2.1121E+03 2.0280E+03 - 2.2387E-01 3.6531E+03 3.5684E+03 1.7854E+03 1.6746E+03 - 2.5119E-01 3.0128E+03 2.9400E+03 1.4822E+03 1.3842E+03 - 2.8184E-01 2.4505E+03 2.3897E+03 1.2206E+03 1.1362E+03 - 3.1623E-01 1.9854E+03 1.9395E+03 1.0070E+03 9.2183E+02 - 3.5481E-01 1.6025E+03 1.5650E+03 8.2377E+02 7.3528E+02 - 3.9811E-01 1.2855E+03 1.2417E+03 6.5981E+02 5.8495E+02 - 4.4668E-01 1.0199E+03 9.8134E+02 5.2756E+02 4.6175E+02 - 5.0119E-01 7.9905E+02 7.6912E+02 4.1738E+02 3.5986E+02 - 5.6234E-01 6.2472E+02 5.9841E+02 3.2628E+02 2.8090E+02 - 6.3096E-01 4.8480E+02 4.6402E+02 2.5528E+02 2.1828E+02 - 7.0795E-01 3.6979E+02 3.5731E+02 1.9519E+02 1.6463E+02 - 7.9433E-01 2.8046E+02 2.7194E+02 1.4842E+02 1.2393E+02 - 8.9125E-01 2.1552E+02 2.0721E+02 1.1487E+02 9.4636E+01 - 1.0000E+00 1.6381E+02 1.5589E+02 8.6296E+01 7.0954E+01 - 1.1220E+00 1.2323E+02 1.1716E+02 6.5008E+01 5.2771E+01 - 1.2589E+00 9.2400E+01 8.8460E+01 4.8684E+01 3.8950E+01 - 1.4125E+00 6.9363E+01 6.5934E+01 3.5974E+01 2.8451E+01 - 1.5849E+00 5.2130E+01 4.8301E+01 2.6455E+01 2.0850E+01 - 1.7783E+00 3.8865E+01 3.5701E+01 1.9452E+01 1.5344E+01 - 1.9953E+00 2.8475E+01 2.6531E+01 1.4081E+01 1.1173E+01 - 2.2387E+00 2.0977E+01 1.9408E+01 1.0191E+01 7.9809E+00 - 2.5119E+00 1.5440E+01 1.4092E+01 7.2927E+00 5.6326E+00 - 2.8184E+00 1.1205E+01 1.0234E+01 5.2244E+00 3.9629E+00 - 3.1623E+00 8.1852E+00 7.3299E+00 3.6751E+00 2.8359E+00 - 3.5481E+00 5.9519E+00 5.3102E+00 2.5791E+00 1.9945E+00 - 3.9811E+00 4.3278E+00 3.8473E+00 1.8196E+00 1.3876E+00 - 4.4668E+00 3.1210E+00 2.7549E+00 1.2748E+00 9.6423E-01 - 5.0119E+00 2.2460E+00 1.9560E+00 8.8845E-01 6.7104E-01 - 5.6234E+00 1.6249E+00 1.3874E+00 6.1932E-01 4.5971E-01 - 6.3096E+00 1.1597E+00 9.8703E-01 4.2115E-01 3.2114E-01 - 7.0795E+00 8.2881E-01 7.0221E-01 2.8649E-01 2.1935E-01 - 7.9433E+00 5.9884E-01 4.9587E-01 1.9816E-01 1.4841E-01 - 8.9125E+00 4.2837E-01 3.5151E-01 1.3437E-01 1.0103E-01 - 1.0000E+01 3.0734E-01 2.5364E-01 9.0068E-02 6.7907E-02 - 1.1220E+01 2.1999E-01 1.8095E-01 6.1092E-02 4.6393E-02 - 1.2589E+01 1.5660E-01 1.2746E-01 4.1595E-02 3.1734E-02 - 1.4125E+01 1.1175E-01 9.0054E-02 2.8034E-02 2.1393E-02 - 1.5849E+01 7.9925E-02 6.4209E-02 1.8900E-02 1.4428E-02 - 1.7783E+01 5.6915E-02 4.5043E-02 1.2637E-02 9.5733E-03 - 1.9953E+01 4.0145E-02 3.1342E-02 8.2411E-03 6.3778E-03 - 2.2387E+01 2.8523E-02 2.1970E-02 5.5410E-03 4.3228E-03 - 2.5119E+01 2.0403E-02 1.5842E-02 3.6104E-03 3.0186E-03 - 2.8184E+01 1.4642E-02 1.1382E-02 2.4163E-03 1.9272E-03 - 3.1623E+01 1.0424E-02 7.9934E-03 1.6563E-03 1.2771E-03 - 3.5481E+01 7.4148E-03 5.6536E-03 1.0996E-03 8.5815E-04 - 3.9811E+01 5.2443E-03 3.9834E-03 7.3927E-04 5.7276E-04 - 4.4668E+01 3.7141E-03 2.8081E-03 4.9401E-04 3.8226E-04 - 5.0119E+01 2.6350E-03 1.9756E-03 3.2696E-04 2.5440E-04 - 5.6234E+01 1.8714E-03 1.3830E-03 2.1546E-04 1.6999E-04 - 6.3096E+01 1.3262E-03 9.7307E-04 1.4364E-04 1.1178E-04 - 7.0795E+01 9.3700E-04 6.8518E-04 9.4716E-05 7.3733E-05 - 7.9433E+01 6.6238E-04 4.8358E-04 6.1930E-05 4.9871E-05 - 8.9125E+01 4.6566E-04 3.3865E-04 4.2147E-05 3.3823E-05 - 1.0000E+02 3.2953E-04 2.3652E-04 2.7810E-05 2.2389E-05 - 1.1220E+02 2.3163E-04 1.6518E-04 1.8419E-05 1.5048E-05 - 1.2589E+02 1.6267E-04 1.1510E-04 1.2450E-05 1.0029E-05 - 1.4125E+02 1.1475E-04 8.0626E-05 8.3343E-06 6.6679E-06 - 1.5849E+02 8.0566E-05 5.6276E-05 5.5887E-06 4.4818E-06 - 1.7783E+02 5.6198E-05 3.8995E-05 3.7630E-06 3.0513E-06 - 1.9953E+02 3.9325E-05 2.6995E-05 2.5188E-06 2.0669E-06 - 2.2387E+02 2.7626E-05 1.8729E-05 1.6679E-06 1.3721E-06 - 2.5119E+02 1.9271E-05 1.3045E-05 1.1055E-06 9.4025E-07 - 2.8184E+02 1.3495E-05 9.0337E-06 7.5947E-07 6.2360E-07 - 3.1623E+02 9.4375E-06 6.3249E-06 5.0698E-07 4.0707E-07 - 3.5481E+02 6.5779E-06 4.3576E-06 3.4158E-07 2.7668E-07 - 3.9811E+02 4.5795E-06 3.0248E-06 2.3273E-07 1.8625E-07 - 4.4668E+02 3.1954E-06 2.0880E-06 1.5734E-07 1.2642E-07 - 5.0119E+02 2.2282E-06 1.4394E-06 1.0432E-07 8.5625E-08 - 5.6234E+02 1.5554E-06 9.9368E-07 7.0665E-08 5.6451E-08 - 6.3096E+02 1.0754E-06 6.8153E-07 4.7689E-08 3.8295E-08 - 7.0795E+02 7.4205E-07 4.6944E-07 3.2235E-08 2.5791E-08 - 7.9433E+02 5.1273E-07 3.2443E-07 2.1946E-08 1.6813E-08 - 8.9125E+02 3.5403E-07 2.2275E-07 1.4696E-08 1.1248E-08 - 1.0000E+03 2.4697E-07 1.5300E-07 1.0180E-08 7.4845E-09 - 1.1220E+03 1.6927E-07 1.0387E-07 6.6882E-09 5.0509E-09 - 1.2589E+03 1.1613E-07 7.1306E-08 4.3684E-09 3.4679E-09 - 1.4125E+03 7.9789E-08 4.8333E-08 2.8939E-09 2.3475E-09 - 1.5849E+03 5.4585E-08 3.2799E-08 2.0217E-09 1.5706E-09 - 1.7783E+03 3.7034E-08 2.2282E-08 1.3980E-09 1.0082E-09 - 1.9953E+03 2.5172E-08 1.5006E-08 8.5909E-10 6.4682E-10 - 2.2387E+03 1.7101E-08 1.0173E-08 5.9410E-10 4.2450E-10 - 2.5119E+03 1.1641E-08 6.8920E-09 3.9470E-10 2.9821E-10 - 2.8184E+03 7.9249E-09 4.6123E-09 2.3742E-10 2.0769E-10 - 3.1623E+03 5.3890E-09 3.1759E-09 1.7370E-10 1.2431E-10 - 3.5481E+03 3.5229E-09 2.0585E-09 1.1548E-10 8.1522E-11 - 3.9811E+03 2.3687E-09 1.3646E-09 7.3290E-11 5.4467E-11 - 4.4668E+03 1.5845E-09 9.1450E-10 4.6448E-11 3.7235E-11 - 5.0119E+03 1.0563E-09 5.9989E-10 3.0266E-11 2.3857E-11 - 5.6234E+03 7.0593E-10 3.9824E-10 2.0100E-11 1.3612E-11 - 6.3096E+03 4.7320E-10 2.6584E-10 1.3281E-11 1.0499E-11 - 7.0795E+03 3.1256E-10 1.7500E-10 8.6826E-12 6.8165E-12 - 7.9433E+03 2.0844E-10 1.1410E-10 6.0112E-12 4.2730E-12 - 8.9125E+03 1.3726E-10 7.5576E-11 3.9356E-12 2.8748E-12 - 1.0000E+04 9.0293E-11 4.9919E-11 2.6130E-12 1.9763E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0658E+04 1.0735E+04 5.0762E+03 5.0647E+03 - 1.1220E-01 9.3387E+03 9.3889E+03 4.5393E+03 4.4339E+03 - 1.2589E-01 8.1561E+03 8.1876E+03 3.9679E+03 3.8720E+03 - 1.4125E-01 7.0883E+03 7.0824E+03 3.4122E+03 3.3366E+03 - 1.5849E-01 6.0881E+03 6.0849E+03 2.9422E+03 2.8324E+03 - 1.7783E-01 5.1653E+03 5.1485E+03 2.5192E+03 2.3815E+03 - 1.9953E-01 4.3660E+03 4.3285E+03 2.1347E+03 1.9912E+03 - 2.2387E-01 3.6549E+03 3.6129E+03 1.8117E+03 1.6696E+03 - 2.5119E-01 3.0041E+03 2.9788E+03 1.5211E+03 1.3815E+03 - 2.8184E-01 2.4569E+03 2.4333E+03 1.2501E+03 1.1347E+03 - 3.1623E-01 2.0042E+03 1.9636E+03 1.0219E+03 9.1573E+02 - 3.5481E-01 1.6092E+03 1.5809E+03 8.2865E+02 7.2821E+02 - 3.9811E-01 1.2775E+03 1.2647E+03 6.6383E+02 5.8421E+02 - 4.4668E-01 1.0112E+03 9.9240E+02 5.3122E+02 4.6123E+02 - 5.0119E-01 7.9308E+02 7.7440E+02 4.1896E+02 3.5540E+02 - 5.6234E-01 6.1475E+02 6.0147E+02 3.2618E+02 2.7786E+02 - 6.3096E-01 4.8103E+02 4.6596E+02 2.5776E+02 2.1615E+02 - 7.0795E-01 3.7184E+02 3.6053E+02 1.9885E+02 1.6411E+02 - 7.9433E-01 2.8212E+02 2.7649E+02 1.5140E+02 1.2407E+02 - 8.9125E-01 2.1566E+02 2.0960E+02 1.1395E+02 9.3680E+01 - 1.0000E+00 1.6392E+02 1.5685E+02 8.6754E+01 7.0405E+01 - 1.1220E+00 1.2342E+02 1.1770E+02 6.5000E+01 5.2868E+01 - 1.2589E+00 9.2222E+01 8.8160E+01 4.8533E+01 3.8598E+01 - 1.4125E+00 6.9237E+01 6.5495E+01 3.6039E+01 2.8119E+01 - 1.5849E+00 5.1922E+01 4.8187E+01 2.6646E+01 2.0648E+01 - 1.7783E+00 3.8513E+01 3.5427E+01 1.9522E+01 1.5139E+01 - 1.9953E+00 2.8442E+01 2.6402E+01 1.4162E+01 1.0900E+01 - 2.2387E+00 2.0936E+01 1.9404E+01 1.0319E+01 7.7897E+00 - 2.5119E+00 1.5344E+01 1.4011E+01 7.4132E+00 5.6988E+00 - 2.8184E+00 1.1296E+01 1.0118E+01 5.2725E+00 3.9821E+00 - 3.1623E+00 8.2015E+00 7.2903E+00 3.7080E+00 2.8389E+00 - 3.5481E+00 5.9148E+00 5.2569E+00 2.5857E+00 1.9734E+00 - 3.9811E+00 4.3071E+00 3.7969E+00 1.8182E+00 1.3855E+00 - 4.4668E+00 3.1209E+00 2.7403E+00 1.2827E+00 9.6968E-01 - 5.0119E+00 2.2360E+00 1.9467E+00 8.8630E-01 6.6146E-01 - 5.6234E+00 1.6115E+00 1.3926E+00 6.0540E-01 4.6001E-01 - 6.3096E+00 1.1665E+00 9.9997E-01 4.1317E-01 3.2398E-01 - 7.0795E+00 8.4060E-01 7.0729E-01 2.8071E-01 2.2089E-01 - 7.9433E+00 6.0287E-01 4.9943E-01 1.9590E-01 1.4801E-01 - 8.9125E+00 4.3109E-01 3.5608E-01 1.3689E-01 9.9672E-02 - 1.0000E+01 3.0776E-01 2.5398E-01 9.2387E-02 6.8559E-02 - 1.1220E+01 2.1948E-01 1.7865E-01 6.2407E-02 4.6346E-02 - 1.2589E+01 1.5677E-01 1.2620E-01 4.1954E-02 3.1241E-02 - 1.4125E+01 1.1070E-01 8.9727E-02 2.8331E-02 2.1178E-02 - 1.5849E+01 7.9254E-02 6.3249E-02 1.9057E-02 1.4163E-02 - 1.7783E+01 5.7081E-02 4.4601E-02 1.2256E-02 9.5867E-03 - 1.9953E+01 4.0377E-02 3.1615E-02 8.1472E-03 6.3550E-03 - 2.2387E+01 2.8394E-02 2.2655E-02 5.4575E-03 4.0567E-03 - 2.5119E+01 2.0485E-02 1.5828E-02 3.6983E-03 2.8356E-03 - 2.8184E+01 1.4555E-02 1.1155E-02 2.4836E-03 2.0451E-03 - 3.1623E+01 1.0429E-02 7.9740E-03 1.6503E-03 1.2742E-03 - 3.5481E+01 7.3824E-03 5.6386E-03 1.1020E-03 8.5029E-04 - 3.9811E+01 5.2544E-03 3.9824E-03 7.3213E-04 5.6552E-04 - 4.4668E+01 3.7503E-03 2.8186E-03 4.8491E-04 3.7541E-04 - 5.0119E+01 2.6594E-03 1.9799E-03 3.2185E-04 2.4961E-04 - 5.6234E+01 1.8826E-03 1.3881E-03 2.1120E-04 1.6680E-04 - 6.3096E+01 1.3297E-03 9.7289E-04 1.3985E-04 1.1257E-04 - 7.0795E+01 9.3706E-04 6.8304E-04 9.5092E-05 7.6647E-05 - 7.9433E+01 6.6335E-04 4.8132E-04 6.3753E-05 5.0075E-05 - 8.9125E+01 4.6733E-04 3.3889E-04 4.1693E-05 3.2590E-05 - 1.0000E+02 3.2960E-04 2.3582E-04 2.7916E-05 2.2498E-05 - 1.1220E+02 2.3175E-04 1.6462E-04 1.8568E-05 1.5040E-05 - 1.2589E+02 1.6298E-04 1.1579E-04 1.2457E-05 1.0036E-05 - 1.4125E+02 1.1479E-04 8.0943E-05 8.1726E-06 6.6465E-06 - 1.5849E+02 8.0583E-05 5.6238E-05 5.4837E-06 4.5363E-06 - 1.7783E+02 5.6350E-05 3.9058E-05 3.7448E-06 3.0681E-06 - 1.9953E+02 3.9359E-05 2.7315E-05 2.4867E-06 2.0490E-06 - 2.2387E+02 2.7547E-05 1.8967E-05 1.6961E-06 1.3851E-06 - 2.5119E+02 1.9360E-05 1.3160E-05 1.1590E-06 9.1197E-07 - 2.8184E+02 1.3610E-05 9.0878E-06 7.5944E-07 6.1321E-07 - 3.1623E+02 9.4345E-06 6.2886E-06 5.1673E-07 4.1516E-07 - 3.5481E+02 6.5720E-06 4.3499E-06 3.4352E-07 2.7623E-07 - 3.9811E+02 4.5724E-06 3.0207E-06 2.3013E-07 1.8629E-07 - 4.4668E+02 3.1715E-06 2.0950E-06 1.5457E-07 1.2371E-07 - 5.0119E+02 2.2113E-06 1.4377E-06 1.0313E-07 8.2996E-08 - 5.6234E+02 1.5447E-06 9.9363E-07 6.9093E-08 5.6947E-08 - 6.3096E+02 1.0680E-06 6.7835E-07 4.7046E-08 3.7741E-08 - 7.0795E+02 7.4060E-07 4.6734E-07 3.2275E-08 2.4655E-08 - 7.9433E+02 5.1293E-07 3.2307E-07 2.2129E-08 1.6448E-08 - 8.9125E+02 3.5570E-07 2.2261E-07 1.4890E-08 1.1547E-08 - 1.0000E+03 2.4544E-07 1.5350E-07 9.7437E-09 7.5027E-09 - 1.1220E+03 1.6750E-07 1.0408E-07 6.5470E-09 4.8986E-09 - 1.2589E+03 1.1520E-07 7.0714E-08 4.3815E-09 3.3409E-09 - 1.4125E+03 7.8947E-08 4.8270E-08 2.8709E-09 2.2405E-09 - 1.5849E+03 5.4481E-08 3.2895E-08 1.9423E-09 1.5062E-09 - 1.7783E+03 3.7474E-08 2.2194E-08 1.3353E-09 9.7453E-10 - 1.9953E+03 2.4957E-08 1.4957E-08 8.3953E-10 6.5499E-10 - 2.2387E+03 1.6951E-08 1.0029E-08 5.6094E-10 4.3144E-10 - 2.5119E+03 1.1544E-08 6.7522E-09 3.9528E-10 2.7013E-10 - 2.8184E+03 7.7691E-09 4.5318E-09 2.6439E-10 1.8635E-10 - 3.1623E+03 5.3635E-09 3.1225E-09 1.7632E-10 1.3053E-10 - 3.5481E+03 3.5282E-09 2.0318E-09 1.1480E-10 8.4855E-11 - 3.9811E+03 2.3536E-09 1.3577E-09 7.4259E-11 5.4513E-11 - 4.4668E+03 1.5598E-09 8.9756E-10 4.7995E-11 3.8101E-11 - 5.0119E+03 1.0473E-09 5.9117E-10 3.2013E-11 2.5957E-11 - 5.6234E+03 7.1150E-10 4.0272E-10 2.0513E-11 1.5993E-11 - 6.3096E+03 4.6862E-10 2.6540E-10 1.3745E-11 9.8682E-12 - 7.0795E+03 3.1053E-10 1.7365E-10 9.9387E-12 6.2282E-12 - 7.9433E+03 2.0535E-10 1.1422E-10 6.5136E-12 4.3308E-12 - 8.9125E+03 1.3787E-10 7.4888E-11 3.9511E-12 2.9474E-12 - 1.0000E+04 9.3162E-11 4.9206E-11 2.6831E-12 1.8972E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7418E+03 9.7815E+03 4.6297E+03 4.6405E+03 - 1.1220E-01 8.5535E+03 8.6013E+03 4.0768E+03 4.0466E+03 - 1.2589E-01 7.4567E+03 7.4928E+03 3.5739E+03 3.5223E+03 - 1.4125E-01 6.4865E+03 6.4948E+03 3.1397E+03 3.0383E+03 - 1.5849E-01 5.6109E+03 5.5893E+03 2.7072E+03 2.6095E+03 - 1.7783E-01 4.7757E+03 4.7643E+03 2.3089E+03 2.2092E+03 - 1.9953E-01 4.0305E+03 4.0108E+03 1.9684E+03 1.8456E+03 - 2.2387E-01 3.3692E+03 3.3350E+03 1.6524E+03 1.5492E+03 - 2.5119E-01 2.7971E+03 2.7617E+03 1.3918E+03 1.2829E+03 - 2.8184E-01 2.2992E+03 2.2673E+03 1.1608E+03 1.0566E+03 - 3.1623E-01 1.8638E+03 1.8335E+03 9.4971E+02 8.5507E+02 - 3.5481E-01 1.5120E+03 1.4760E+03 7.7412E+02 6.8758E+02 - 3.9811E-01 1.2110E+03 1.1866E+03 6.2984E+02 5.5284E+02 - 4.4668E-01 9.6167E+02 9.4234E+02 5.0473E+02 4.3470E+02 - 5.0119E-01 7.6215E+02 7.4449E+02 3.9954E+02 3.4239E+02 - 5.6234E-01 5.9477E+02 5.8531E+02 3.1796E+02 2.6851E+02 - 6.3096E-01 4.6508E+02 4.5546E+02 2.4987E+02 2.0733E+02 - 7.0795E-01 3.6351E+02 3.5223E+02 1.9303E+02 1.5888E+02 - 7.9433E-01 2.7816E+02 2.6979E+02 1.4804E+02 1.2082E+02 - 8.9125E-01 2.1202E+02 2.0506E+02 1.1237E+02 9.1838E+01 - 1.0000E+00 1.6016E+02 1.5541E+02 8.5581E+01 6.8909E+01 - 1.1220E+00 1.2089E+02 1.1699E+02 6.4496E+01 5.1471E+01 - 1.2589E+00 9.1329E+01 8.7495E+01 4.8106E+01 3.8251E+01 - 1.4125E+00 6.9155E+01 6.4997E+01 3.5627E+01 2.8267E+01 - 1.5849E+00 5.1706E+01 4.8151E+01 2.6200E+01 2.0888E+01 - 1.7783E+00 3.8397E+01 3.5610E+01 1.9018E+01 1.5104E+01 - 1.9953E+00 2.8720E+01 2.6346E+01 1.3954E+01 1.0903E+01 - 2.2387E+00 2.1006E+01 1.9140E+01 1.0191E+01 7.8288E+00 - 2.5119E+00 1.5329E+01 1.3798E+01 7.2548E+00 5.6357E+00 - 2.8184E+00 1.1251E+01 1.0052E+01 5.2364E+00 4.0053E+00 - 3.1623E+00 8.2105E+00 7.3747E+00 3.7073E+00 2.8274E+00 - 3.5481E+00 5.9601E+00 5.2957E+00 2.6126E+00 1.9939E+00 - 3.9811E+00 4.2830E+00 3.7948E+00 1.8254E+00 1.3905E+00 - 4.4668E+00 3.0978E+00 2.7361E+00 1.2736E+00 9.6081E-01 - 5.0119E+00 2.2478E+00 1.9530E+00 8.9072E-01 6.6881E-01 - 5.6234E+00 1.6264E+00 1.3883E+00 6.2157E-01 4.5955E-01 - 6.3096E+00 1.1728E+00 9.8363E-01 4.2559E-01 3.1617E-01 - 7.0795E+00 8.4385E-01 6.9817E-01 2.9050E-01 2.1772E-01 - 7.9433E+00 6.0306E-01 5.0044E-01 2.0067E-01 1.4445E-01 - 8.9125E+00 4.3187E-01 3.5753E-01 1.3644E-01 9.6451E-02 - 1.0000E+01 3.0967E-01 2.5477E-01 9.1788E-02 6.6995E-02 - 1.1220E+01 2.1909E-01 1.8144E-01 6.2380E-02 4.5956E-02 - 1.2589E+01 1.5584E-01 1.2840E-01 4.2216E-02 3.1433E-02 - 1.4125E+01 1.1250E-01 9.0373E-02 2.8029E-02 2.1118E-02 - 1.5849E+01 8.0555E-02 6.3915E-02 1.8933E-02 1.4214E-02 - 1.7783E+01 5.7159E-02 4.5480E-02 1.2653E-02 9.5849E-03 - 1.9953E+01 4.0587E-02 3.2521E-02 8.3270E-03 6.3361E-03 - 2.2387E+01 2.8683E-02 2.2963E-02 5.4732E-03 4.1731E-03 - 2.5119E+01 2.0602E-02 1.6246E-02 3.6798E-03 2.8621E-03 - 2.8184E+01 1.4964E-02 1.1695E-02 2.4833E-03 1.9778E-03 - 3.1623E+01 1.0369E-02 7.9612E-03 1.6518E-03 1.2716E-03 - 3.5481E+01 7.3728E-03 5.6087E-03 1.1020E-03 8.4582E-04 - 3.9811E+01 5.2472E-03 3.9645E-03 7.3378E-04 5.6104E-04 - 4.4668E+01 3.7284E-03 2.8064E-03 4.8627E-04 3.7819E-04 - 5.0119E+01 2.6440E-03 1.9820E-03 3.2599E-04 2.4993E-04 - 5.6234E+01 1.8739E-03 1.3910E-03 2.1642E-04 1.6641E-04 - 6.3096E+01 1.3261E-03 9.8031E-04 1.4297E-04 1.1238E-04 - 7.0795E+01 9.4065E-04 6.8952E-04 9.4102E-05 7.3541E-05 - 7.9433E+01 6.6829E-04 4.8179E-04 6.2304E-05 4.8664E-05 - 8.9125E+01 4.6686E-04 3.3720E-04 4.1815E-05 3.3768E-05 - 1.0000E+02 3.2918E-04 2.3672E-04 2.7543E-05 2.2309E-05 - 1.1220E+02 2.3196E-04 1.6579E-04 1.8637E-05 1.4992E-05 - 1.2589E+02 1.6319E-04 1.1625E-04 1.2367E-05 9.9541E-06 - 1.4125E+02 1.1464E-04 8.0775E-05 8.1579E-06 6.7400E-06 - 1.5849E+02 8.0640E-05 5.6328E-05 5.5395E-06 4.5554E-06 - 1.7783E+02 5.6703E-05 3.9169E-05 3.7551E-06 3.0563E-06 - 1.9953E+02 3.9616E-05 2.7259E-05 2.5034E-06 2.0231E-06 - 2.2387E+02 2.7706E-05 1.8904E-05 1.6691E-06 1.3747E-06 - 2.5119E+02 1.9402E-05 1.3145E-05 1.1201E-06 9.3619E-07 - 2.8184E+02 1.3521E-05 9.1304E-06 7.6961E-07 6.1536E-07 - 3.1623E+02 9.4313E-06 6.2757E-06 5.0825E-07 4.1460E-07 - 3.5481E+02 6.5781E-06 4.3374E-06 3.3785E-07 2.7641E-07 - 3.9811E+02 4.5885E-06 3.0186E-06 2.2773E-07 1.8216E-07 - 4.4668E+02 3.1840E-06 2.0846E-06 1.5292E-07 1.2248E-07 - 5.0119E+02 2.2132E-06 1.4364E-06 1.0449E-07 8.4576E-08 - 5.6234E+02 1.5461E-06 9.9708E-07 6.9563E-08 5.7105E-08 - 6.3096E+02 1.0739E-06 6.8282E-07 4.7237E-08 3.7400E-08 - 7.0795E+02 7.4558E-07 4.7047E-07 3.1859E-08 2.5263E-08 - 7.9433E+02 5.1527E-07 3.2189E-07 2.1084E-08 1.7319E-08 - 8.9125E+02 3.5619E-07 2.2056E-07 1.4678E-08 1.1630E-08 - 1.0000E+03 2.4579E-07 1.5164E-07 9.7442E-09 7.7005E-09 - 1.1220E+03 1.6862E-07 1.0351E-07 6.5111E-09 5.1311E-09 - 1.2589E+03 1.1569E-07 7.0750E-08 4.4531E-09 3.4422E-09 - 1.4125E+03 7.8476E-08 4.8581E-08 3.0880E-09 2.3058E-09 - 1.5849E+03 5.4031E-08 3.2996E-08 2.0359E-09 1.4917E-09 - 1.7783E+03 3.7222E-08 2.2371E-08 1.3122E-09 1.0001E-09 - 1.9953E+03 2.5059E-08 1.5107E-08 8.6916E-10 6.8514E-10 - 2.2387E+03 1.6946E-08 1.0159E-08 5.9352E-10 4.3715E-10 - 2.5119E+03 1.1480E-08 6.8333E-09 4.1645E-10 2.9311E-10 - 2.8184E+03 7.7541E-09 4.5825E-09 2.8259E-10 1.9068E-10 - 3.1623E+03 5.3962E-09 3.1377E-09 1.7283E-10 1.2533E-10 - 3.5481E+03 3.5383E-09 2.0361E-09 1.1296E-10 8.4240E-11 - 3.9811E+03 2.3816E-09 1.3730E-09 7.1852E-11 5.5617E-11 - 4.4668E+03 1.5939E-09 9.1000E-10 4.8238E-11 3.5452E-11 - 5.0119E+03 1.0549E-09 6.0938E-10 3.1951E-11 2.3123E-11 - 5.6234E+03 7.0133E-10 4.0421E-10 2.0534E-11 1.6368E-11 - 6.3096E+03 4.6761E-10 2.6484E-10 1.4063E-11 1.0640E-11 - 7.0795E+03 3.0939E-10 1.7480E-10 9.4954E-12 6.5082E-12 - 7.9433E+03 2.0576E-10 1.1615E-10 6.3185E-12 4.2120E-12 - 8.9125E+03 1.3609E-10 7.5782E-11 4.1573E-12 2.8741E-12 - 1.0000E+04 9.0677E-11 4.9799E-11 2.5345E-12 1.6879E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.1199E+03 7.1912E+03 3.3835E+03 3.4440E+03 - 1.1220E-01 6.2674E+03 6.3009E+03 2.9949E+03 3.0181E+03 - 1.2589E-01 5.4945E+03 5.5614E+03 2.6400E+03 2.6359E+03 - 1.4125E-01 4.8046E+03 4.8562E+03 2.3035E+03 2.2855E+03 - 1.5849E-01 4.1587E+03 4.1643E+03 1.9855E+03 1.9619E+03 - 1.7783E-01 3.5521E+03 3.5537E+03 1.7200E+03 1.6680E+03 - 1.9953E-01 3.0181E+03 2.9985E+03 1.4747E+03 1.4113E+03 - 2.2387E-01 2.5411E+03 2.5180E+03 1.2465E+03 1.1810E+03 - 2.5119E-01 2.1251E+03 2.1019E+03 1.0535E+03 9.8906E+02 - 2.8184E-01 1.7639E+03 1.7407E+03 8.8053E+02 8.1844E+02 - 3.1623E-01 1.4510E+03 1.4392E+03 7.3041E+02 6.6901E+02 - 3.5481E-01 1.1880E+03 1.1743E+03 6.0258E+02 5.4896E+02 - 3.9811E-01 9.6111E+02 9.4964E+02 4.9376E+02 4.4818E+02 - 4.4668E-01 7.7500E+02 7.6652E+02 3.9970E+02 3.6138E+02 - 5.0119E-01 6.2968E+02 6.1659E+02 3.2179E+02 2.8631E+02 - 5.6234E-01 5.0591E+02 4.9100E+02 2.5628E+02 2.2555E+02 - 6.3096E-01 3.9810E+02 3.8812E+02 2.0463E+02 1.7801E+02 - 7.0795E-01 3.1338E+02 3.0492E+02 1.6262E+02 1.3997E+02 - 7.9433E-01 2.4666E+02 2.3770E+02 1.2652E+02 1.0789E+02 - 8.9125E-01 1.9155E+02 1.8380E+02 9.8623E+01 8.1923E+01 - 1.0000E+00 1.4722E+02 1.4184E+02 7.6036E+01 6.3076E+01 - 1.1220E+00 1.1371E+02 1.0792E+02 5.7794E+01 4.8083E+01 - 1.2589E+00 8.6821E+01 8.2029E+01 4.4104E+01 3.6321E+01 - 1.4125E+00 6.5905E+01 6.2112E+01 3.3411E+01 2.7355E+01 - 1.5849E+00 4.9922E+01 4.6796E+01 2.4907E+01 2.0049E+01 - 1.7783E+00 3.7550E+01 3.4802E+01 1.8446E+01 1.4487E+01 - 1.9953E+00 2.7870E+01 2.5762E+01 1.3548E+01 1.0555E+01 - 2.2387E+00 2.0627E+01 1.9126E+01 9.9398E+00 7.7800E+00 - 2.5119E+00 1.5197E+01 1.3924E+01 7.2827E+00 5.7064E+00 - 2.8184E+00 1.1279E+01 9.9952E+00 5.2077E+00 3.9739E+00 - 3.1623E+00 8.1053E+00 7.3438E+00 3.6659E+00 2.8012E+00 - 3.5481E+00 5.8869E+00 5.2910E+00 2.5981E+00 1.9708E+00 - 3.9811E+00 4.3143E+00 3.7921E+00 1.8124E+00 1.3619E+00 - 4.4668E+00 3.1386E+00 2.7385E+00 1.2546E+00 9.5466E-01 - 5.0119E+00 2.2529E+00 1.9539E+00 8.8846E-01 6.6624E-01 - 5.6234E+00 1.6241E+00 1.3926E+00 6.2066E-01 4.6246E-01 - 6.3096E+00 1.1790E+00 9.9711E-01 4.2299E-01 3.2083E-01 - 7.0795E+00 8.5474E-01 7.0833E-01 2.8986E-01 2.1478E-01 - 7.9433E+00 6.0410E-01 5.0325E-01 1.9912E-01 1.4597E-01 - 8.9125E+00 4.2322E-01 3.5858E-01 1.3465E-01 9.9872E-02 - 1.0000E+01 3.0570E-01 2.5029E-01 9.0923E-02 6.8540E-02 - 1.1220E+01 2.1776E-01 1.7824E-01 6.1037E-02 4.6412E-02 - 1.2589E+01 1.5414E-01 1.2500E-01 4.1125E-02 3.1274E-02 - 1.4125E+01 1.0974E-01 8.7290E-02 2.7569E-02 2.0599E-02 - 1.5849E+01 7.8404E-02 6.2947E-02 1.8484E-02 1.3822E-02 - 1.7783E+01 5.5788E-02 4.4771E-02 1.2348E-02 9.2336E-03 - 1.9953E+01 3.9282E-02 3.1120E-02 8.1412E-03 6.1708E-03 - 2.2387E+01 2.7971E-02 2.2136E-02 5.4789E-03 4.2217E-03 - 2.5119E+01 2.0301E-02 1.5953E-02 3.7066E-03 2.8016E-03 - 2.8184E+01 1.4382E-02 1.1248E-02 2.5197E-03 1.8878E-03 - 3.1623E+01 1.0411E-02 8.0121E-03 1.6554E-03 1.2785E-03 - 3.5481E+01 7.3965E-03 5.6512E-03 1.0960E-03 8.4740E-04 - 3.9811E+01 5.2690E-03 3.9802E-03 7.2721E-04 5.6114E-04 - 4.4668E+01 3.7436E-03 2.8086E-03 4.8094E-04 3.7247E-04 - 5.0119E+01 2.6540E-03 1.9731E-03 3.1948E-04 2.5167E-04 - 5.6234E+01 1.8818E-03 1.3930E-03 2.1205E-04 1.6812E-04 - 6.3096E+01 1.3293E-03 9.8593E-04 1.4248E-04 1.1124E-04 - 7.0795E+01 9.3777E-04 6.9106E-04 9.4127E-05 7.4112E-05 - 7.9433E+01 6.6136E-04 4.8435E-04 6.1226E-05 4.9990E-05 - 8.9125E+01 4.6555E-04 3.3799E-04 4.0138E-05 3.3391E-05 - 1.0000E+02 3.2994E-04 2.3632E-04 2.7984E-05 2.2242E-05 - 1.1220E+02 2.3148E-04 1.6544E-04 1.8747E-05 1.4941E-05 - 1.2589E+02 1.6302E-04 1.1525E-04 1.2439E-05 1.0031E-05 - 1.4125E+02 1.1467E-04 8.0428E-05 8.2954E-06 6.7069E-06 - 1.5849E+02 8.0303E-05 5.6139E-05 5.5343E-06 4.5225E-06 - 1.7783E+02 5.6452E-05 3.9158E-05 3.7080E-06 3.0005E-06 - 1.9953E+02 3.9345E-05 2.7254E-05 2.4919E-06 2.0077E-06 - 2.2387E+02 2.7395E-05 1.9104E-05 1.6821E-06 1.3137E-06 - 2.5119E+02 1.9274E-05 1.3231E-05 1.1357E-06 9.0314E-07 - 2.8184E+02 1.3488E-05 9.0972E-06 7.6017E-07 6.1109E-07 - 3.1623E+02 9.4255E-06 6.2803E-06 4.9898E-07 4.0906E-07 - 3.5481E+02 6.5620E-06 4.3426E-06 3.3487E-07 2.7529E-07 - 3.9811E+02 4.5878E-06 3.0130E-06 2.3386E-07 1.8211E-07 - 4.4668E+02 3.1891E-06 2.0908E-06 1.5268E-07 1.2078E-07 - 5.0119E+02 2.2179E-06 1.4477E-06 1.0078E-07 8.3431E-08 - 5.6234E+02 1.5534E-06 9.9525E-07 7.0641E-08 5.6705E-08 - 6.3096E+02 1.0693E-06 6.8004E-07 4.7380E-08 3.7565E-08 - 7.0795E+02 7.3956E-07 4.6684E-07 3.2026E-08 2.5177E-08 - 7.9433E+02 5.1259E-07 3.2146E-07 2.1466E-08 1.7284E-08 - 8.9125E+02 3.5451E-07 2.2259E-07 1.3992E-08 1.1211E-08 - 1.0000E+03 2.4648E-07 1.5224E-07 9.6307E-09 7.6457E-09 - 1.1220E+03 1.6841E-07 1.0353E-07 6.5497E-09 5.2142E-09 - 1.2589E+03 1.1543E-07 7.0980E-08 4.4826E-09 3.4378E-09 - 1.4125E+03 7.8762E-08 4.8383E-08 3.0378E-09 2.1520E-09 - 1.5849E+03 5.3863E-08 3.2536E-08 1.9980E-09 1.3830E-09 - 1.7783E+03 3.6768E-08 2.2114E-08 1.3143E-09 9.5030E-10 - 1.9953E+03 2.5147E-08 1.4945E-08 9.1117E-10 6.4851E-10 - 2.2387E+03 1.7211E-08 1.0092E-08 6.0861E-10 4.1996E-10 - 2.5119E+03 1.1597E-08 6.8024E-09 3.9337E-10 2.7516E-10 - 2.8184E+03 7.7932E-09 4.5705E-09 2.7014E-10 1.8442E-10 - 3.1623E+03 5.3633E-09 3.1383E-09 1.7061E-10 1.2217E-10 - 3.5481E+03 3.5075E-09 2.0642E-09 1.0834E-10 8.1099E-11 - 3.9811E+03 2.3759E-09 1.3711E-09 7.3213E-11 5.3248E-11 - 4.4668E+03 1.5826E-09 9.0611E-10 4.7505E-11 3.4950E-11 - 5.0119E+03 1.0448E-09 6.0523E-10 3.0855E-11 2.4803E-11 - 5.6234E+03 6.9977E-10 3.9949E-10 2.1181E-11 1.5888E-11 - 6.3096E+03 4.6780E-10 2.6198E-10 1.4216E-11 9.7894E-12 - 7.0795E+03 3.0801E-10 1.7303E-10 9.2383E-12 6.5831E-12 - 7.9433E+03 2.0303E-10 1.1338E-10 5.7855E-12 4.0376E-12 - 8.9125E+03 1.3609E-10 7.4770E-11 3.4968E-12 2.4806E-12 - 1.0000E+04 8.9442E-11 4.9256E-11 2.2586E-12 1.7619E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.8451E+03 5.9445E+03 2.8118E+03 2.8285E+03 - 1.1220E-01 5.1720E+03 5.2870E+03 2.5171E+03 2.5046E+03 - 1.2589E-01 4.5588E+03 4.6698E+03 2.2414E+03 2.1839E+03 - 1.4125E-01 4.0183E+03 4.1051E+03 1.9665E+03 1.9004E+03 - 1.5849E-01 3.5267E+03 3.5896E+03 1.7112E+03 1.6439E+03 - 1.7783E-01 3.0333E+03 3.0909E+03 1.4946E+03 1.4098E+03 - 1.9953E-01 2.6112E+03 2.6490E+03 1.2963E+03 1.2067E+03 - 2.2387E-01 2.2281E+03 2.2406E+03 1.1076E+03 1.0270E+03 - 2.5119E-01 1.8676E+03 1.8797E+03 9.3048E+02 8.6751E+02 - 2.8184E-01 1.5603E+03 1.5663E+03 7.8620E+02 7.2042E+02 - 3.1623E-01 1.2910E+03 1.2954E+03 6.6545E+02 5.9592E+02 - 3.5481E-01 1.0572E+03 1.0692E+03 5.4810E+02 4.8950E+02 - 3.9811E-01 8.7074E+02 8.7176E+02 4.5046E+02 3.9725E+02 - 4.4668E-01 7.1434E+02 7.0674E+02 3.7192E+02 3.2227E+02 - 5.0119E-01 5.7731E+02 5.7326E+02 3.0228E+02 2.5845E+02 - 5.6234E-01 4.6279E+02 4.5788E+02 2.4136E+02 2.0682E+02 - 6.3096E-01 3.6958E+02 3.6186E+02 1.9159E+02 1.6312E+02 - 7.0795E-01 2.9385E+02 2.8604E+02 1.5249E+02 1.2880E+02 - 7.9433E-01 2.3261E+02 2.2590E+02 1.2022E+02 1.0255E+02 - 8.9125E-01 1.8162E+02 1.7669E+02 9.5050E+01 7.8946E+01 - 1.0000E+00 1.4111E+02 1.3632E+02 7.2885E+01 6.0443E+01 - 1.1220E+00 1.0945E+02 1.0494E+02 5.5785E+01 4.6272E+01 - 1.2589E+00 8.4145E+01 8.0421E+01 4.2507E+01 3.4876E+01 - 1.4125E+00 6.3939E+01 6.1035E+01 3.2121E+01 2.6258E+01 - 1.5849E+00 4.8722E+01 4.5950E+01 2.4232E+01 1.9186E+01 - 1.7783E+00 3.6667E+01 3.4255E+01 1.8050E+01 1.4084E+01 - 1.9953E+00 2.7284E+01 2.5301E+01 1.3226E+01 1.0667E+01 - 2.2387E+00 2.0084E+01 1.8600E+01 9.7338E+00 7.7417E+00 - 2.5119E+00 1.4846E+01 1.3729E+01 7.2035E+00 5.5542E+00 - 2.8184E+00 1.1095E+01 1.0185E+01 5.1472E+00 3.9720E+00 - 3.1623E+00 8.1260E+00 7.2962E+00 3.6441E+00 2.8134E+00 - 3.5481E+00 5.9345E+00 5.2699E+00 2.5613E+00 1.9713E+00 - 3.9811E+00 4.3048E+00 3.7919E+00 1.7886E+00 1.3745E+00 - 4.4668E+00 3.1294E+00 2.7178E+00 1.2545E+00 9.6052E-01 - 5.0119E+00 2.2544E+00 1.9495E+00 8.8404E-01 6.6631E-01 - 5.6234E+00 1.6071E+00 1.4065E+00 6.1232E-01 4.5926E-01 - 6.3096E+00 1.1617E+00 9.9518E-01 4.2320E-01 3.1428E-01 - 7.0795E+00 8.3822E-01 7.0352E-01 2.9573E-01 2.1458E-01 - 7.9433E+00 6.0310E-01 5.0759E-01 1.9935E-01 1.4664E-01 - 8.9125E+00 4.3168E-01 3.6115E-01 1.3122E-01 9.9663E-02 - 1.0000E+01 3.1030E-01 2.5560E-01 9.1521E-02 6.8826E-02 - 1.1220E+01 2.2166E-01 1.8107E-01 6.1066E-02 4.6494E-02 - 1.2589E+01 1.5762E-01 1.2816E-01 4.1803E-02 3.0792E-02 - 1.4125E+01 1.1191E-01 9.0978E-02 2.8204E-02 2.0811E-02 - 1.5849E+01 7.9185E-02 6.3930E-02 1.8762E-02 1.4172E-02 - 1.7783E+01 5.6268E-02 4.5034E-02 1.2642E-02 9.4701E-03 - 1.9953E+01 4.0081E-02 3.2087E-02 8.2780E-03 6.4222E-03 - 2.2387E+01 2.8905E-02 2.2721E-02 5.4989E-03 4.3139E-03 - 2.5119E+01 2.0915E-02 1.5813E-02 3.7700E-03 2.8480E-03 - 2.8184E+01 1.4752E-02 1.1082E-02 2.4257E-03 1.8865E-03 - 3.1623E+01 1.0393E-02 7.9811E-03 1.6524E-03 1.2748E-03 - 3.5481E+01 7.3861E-03 5.6258E-03 1.1010E-03 8.4543E-04 - 3.9811E+01 5.2439E-03 3.9742E-03 7.3589E-04 5.6703E-04 - 4.4668E+01 3.7179E-03 2.8050E-03 4.8512E-04 3.8137E-04 - 5.0119E+01 2.6373E-03 1.9734E-03 3.2210E-04 2.5584E-04 - 5.6234E+01 1.8691E-03 1.3858E-03 2.1536E-04 1.7039E-04 - 6.3096E+01 1.3228E-03 9.8265E-04 1.4294E-04 1.1259E-04 - 7.0795E+01 9.3404E-04 6.9071E-04 9.4146E-05 7.4517E-05 - 7.9433E+01 6.5656E-04 4.8082E-04 6.2078E-05 4.8749E-05 - 8.9125E+01 4.6146E-04 3.3657E-04 4.2411E-05 3.2426E-05 - 1.0000E+02 3.2839E-04 2.3586E-04 2.7839E-05 2.2284E-05 - 1.1220E+02 2.3082E-04 1.6476E-04 1.8392E-05 1.4699E-05 - 1.2589E+02 1.6238E-04 1.1512E-04 1.2281E-05 9.9617E-06 - 1.4125E+02 1.1402E-04 8.0158E-05 8.1336E-06 6.7383E-06 - 1.5849E+02 7.9902E-05 5.6081E-05 5.4846E-06 4.4911E-06 - 1.7783E+02 5.6046E-05 3.8966E-05 3.6911E-06 2.9495E-06 - 1.9953E+02 3.9274E-05 2.7063E-05 2.4591E-06 1.9593E-06 - 2.2387E+02 2.7533E-05 1.8819E-05 1.6559E-06 1.3195E-06 - 2.5119E+02 1.9422E-05 1.3069E-05 1.1212E-06 8.7074E-07 - 2.8184E+02 1.3542E-05 8.9900E-06 7.9410E-07 5.7170E-07 - 3.1623E+02 9.4095E-06 6.2853E-06 5.0423E-07 4.0609E-07 - 3.5481E+02 6.5653E-06 4.3525E-06 3.3983E-07 2.7583E-07 - 3.9811E+02 4.5907E-06 3.0090E-06 2.3182E-07 1.8926E-07 - 4.4668E+02 3.2064E-06 2.0755E-06 1.5898E-07 1.2659E-07 - 5.0119E+02 2.2308E-06 1.4414E-06 1.0898E-07 8.6516E-08 - 5.6234E+02 1.5488E-06 1.0002E-06 7.2566E-08 5.6484E-08 - 6.3096E+02 1.0701E-06 6.8406E-07 4.7874E-08 3.6313E-08 - 7.0795E+02 7.4501E-07 4.7240E-07 3.2617E-08 2.4551E-08 - 7.9433E+02 5.1769E-07 3.2567E-07 2.2319E-08 1.6590E-08 - 8.9125E+02 3.5669E-07 2.2484E-07 1.4590E-08 1.1135E-08 - 1.0000E+03 2.4637E-07 1.5268E-07 9.6546E-09 7.4015E-09 - 1.1220E+03 1.6857E-07 1.0329E-07 6.5583E-09 4.9896E-09 - 1.2589E+03 1.1524E-07 7.0693E-08 4.5346E-09 3.2909E-09 - 1.4125E+03 7.8954E-08 4.7219E-08 2.9694E-09 2.2163E-09 - 1.5849E+03 5.4127E-08 3.1925E-08 1.9951E-09 1.5592E-09 - 1.7783E+03 3.7001E-08 2.1995E-08 1.4094E-09 1.0716E-09 - 1.9953E+03 2.5317E-08 1.5013E-08 8.9433E-10 6.4608E-10 - 2.2387E+03 1.7062E-08 1.0067E-08 6.0122E-10 4.4000E-10 - 2.5119E+03 1.1483E-08 6.7687E-09 3.9075E-10 2.9656E-10 - 2.8184E+03 7.7333E-09 4.6047E-09 2.4612E-10 1.9076E-10 - 3.1623E+03 5.3692E-09 3.1058E-09 1.6974E-10 1.1865E-10 - 3.5481E+03 3.5499E-09 2.0268E-09 1.1016E-10 7.7175E-11 - 3.9811E+03 2.3664E-09 1.3561E-09 7.2792E-11 5.4089E-11 - 4.4668E+03 1.5782E-09 9.0456E-10 4.9838E-11 3.5700E-11 - 5.0119E+03 1.0482E-09 6.0199E-10 3.4243E-11 2.1663E-11 - 5.6234E+03 7.0661E-10 3.9325E-10 2.2293E-11 1.4807E-11 - 6.3096E+03 4.7205E-10 2.6144E-10 1.4524E-11 1.0251E-11 - 7.0795E+03 3.1390E-10 1.7517E-10 9.8720E-12 7.0657E-12 - 7.9433E+03 2.0748E-10 1.1487E-10 6.3491E-12 4.6323E-12 - 8.9125E+03 1.3627E-10 7.4713E-11 4.0327E-12 2.6650E-12 - 1.0000E+04 8.8231E-11 4.8488E-11 2.7232E-12 1.7193E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.9849E+03 6.2505E+03 2.9935E+03 2.8895E+03 - 1.1220E-01 5.3916E+03 5.5909E+03 2.6937E+03 2.5853E+03 - 1.2589E-01 4.7929E+03 4.9517E+03 2.3932E+03 2.2876E+03 - 1.4125E-01 4.2429E+03 4.3678E+03 2.1211E+03 1.9974E+03 - 1.5849E-01 3.7354E+03 3.8411E+03 1.8617E+03 1.7340E+03 - 1.7783E-01 3.2430E+03 3.3396E+03 1.6266E+03 1.5014E+03 - 1.9953E-01 2.8043E+03 2.8650E+03 1.4185E+03 1.2836E+03 - 2.2387E-01 2.3830E+03 2.4319E+03 1.2121E+03 1.1012E+03 - 2.5119E-01 2.0116E+03 2.0440E+03 1.0310E+03 9.2648E+02 - 2.8184E-01 1.6844E+03 1.6968E+03 8.6935E+02 7.6929E+02 - 3.1623E-01 1.4040E+03 1.4161E+03 7.2370E+02 6.3914E+02 - 3.5481E-01 1.1623E+03 1.1742E+03 6.0417E+02 5.2639E+02 - 3.9811E-01 9.4417E+02 9.5915E+02 4.9848E+02 4.2979E+02 - 4.4668E-01 7.6784E+02 7.8051E+02 4.0469E+02 3.4938E+02 - 5.0119E-01 6.2654E+02 6.2462E+02 3.2789E+02 2.7888E+02 - 5.6234E-01 5.0239E+02 4.9881E+02 2.6344E+02 2.1968E+02 - 6.3096E-01 3.9714E+02 3.9612E+02 2.0993E+02 1.7563E+02 - 7.0795E-01 3.1379E+02 3.0829E+02 1.6627E+02 1.3835E+02 - 7.9433E-01 2.4508E+02 2.4127E+02 1.2920E+02 1.0950E+02 - 8.9125E-01 1.9052E+02 1.8714E+02 1.0075E+02 8.4911E+01 - 1.0000E+00 1.4767E+02 1.4400E+02 7.7897E+01 6.3268E+01 - 1.1220E+00 1.1418E+02 1.0981E+02 5.9759E+01 4.7934E+01 - 1.2589E+00 8.7129E+01 8.3032E+01 4.5382E+01 3.6399E+01 - 1.4125E+00 6.5887E+01 6.2728E+01 3.3949E+01 2.7201E+01 - 1.5849E+00 4.9599E+01 4.7114E+01 2.5304E+01 2.0032E+01 - 1.7783E+00 3.7424E+01 3.5124E+01 1.8721E+01 1.4714E+01 - 1.9953E+00 2.8019E+01 2.5988E+01 1.3966E+01 1.0756E+01 - 2.2387E+00 2.0763E+01 1.8863E+01 1.0090E+01 7.7698E+00 - 2.5119E+00 1.5268E+01 1.3880E+01 7.1779E+00 5.5127E+00 - 2.8184E+00 1.1095E+01 1.0207E+01 5.1249E+00 3.9678E+00 - 3.1623E+00 8.2309E+00 7.3934E+00 3.7152E+00 2.8462E+00 - 3.5481E+00 6.0131E+00 5.3489E+00 2.6284E+00 1.9925E+00 - 3.9811E+00 4.3356E+00 3.8415E+00 1.8349E+00 1.3910E+00 - 4.4668E+00 3.1479E+00 2.7712E+00 1.2848E+00 9.7719E-01 - 5.0119E+00 2.2793E+00 1.9783E+00 8.9350E-01 6.6956E-01 - 5.6234E+00 1.6419E+00 1.4072E+00 6.2022E-01 4.6764E-01 - 6.3096E+00 1.1825E+00 1.0040E+00 4.2484E-01 3.2589E-01 - 7.0795E+00 8.4842E-01 7.1384E-01 2.9179E-01 2.2091E-01 - 7.9433E+00 6.0836E-01 5.0658E-01 1.9809E-01 1.5088E-01 - 8.9125E+00 4.3242E-01 3.5974E-01 1.3169E-01 1.0252E-01 - 1.0000E+01 3.0999E-01 2.5517E-01 9.0912E-02 6.8685E-02 - 1.1220E+01 2.2061E-01 1.8062E-01 6.1547E-02 4.6125E-02 - 1.2589E+01 1.5651E-01 1.2729E-01 4.1812E-02 3.1479E-02 - 1.4125E+01 1.1132E-01 9.0030E-02 2.8241E-02 2.0919E-02 - 1.5849E+01 7.9526E-02 6.3822E-02 1.8835E-02 1.3947E-02 - 1.7783E+01 5.7039E-02 4.5110E-02 1.2531E-02 9.6624E-03 - 1.9953E+01 4.0352E-02 3.2372E-02 8.4050E-03 6.3571E-03 - 2.2387E+01 2.8853E-02 2.2903E-02 5.6588E-03 4.0889E-03 - 2.5119E+01 2.0875E-02 1.6165E-02 3.8495E-03 2.7890E-03 - 2.8184E+01 1.4776E-02 1.1480E-02 2.5618E-03 1.8522E-03 - 3.1623E+01 1.0429E-02 7.9668E-03 1.6493E-03 1.2887E-03 - 3.5481E+01 7.3809E-03 5.6463E-03 1.0969E-03 8.5795E-04 - 3.9811E+01 5.2504E-03 3.9925E-03 7.3196E-04 5.7127E-04 - 4.4668E+01 3.7335E-03 2.8093E-03 4.8928E-04 3.7897E-04 - 5.0119E+01 2.6523E-03 1.9838E-03 3.2383E-04 2.5231E-04 - 5.6234E+01 1.8812E-03 1.3934E-03 2.1217E-04 1.6984E-04 - 6.3096E+01 1.3254E-03 9.7810E-04 1.4106E-04 1.1543E-04 - 7.0795E+01 9.3383E-04 6.8514E-04 9.4274E-05 7.5773E-05 - 7.9433E+01 6.6161E-04 4.7965E-04 6.2432E-05 4.9770E-05 - 8.9125E+01 4.7170E-04 3.3767E-04 4.1698E-05 3.2934E-05 - 1.0000E+02 3.2869E-04 2.3689E-04 2.7823E-05 2.2112E-05 - 1.1220E+02 2.3159E-04 1.6606E-04 1.8382E-05 1.4966E-05 - 1.2589E+02 1.6349E-04 1.1583E-04 1.2451E-05 1.0076E-05 - 1.4125E+02 1.1477E-04 8.0968E-05 8.3384E-06 6.6607E-06 - 1.5849E+02 8.0399E-05 5.6177E-05 5.5518E-06 4.4615E-06 - 1.7783E+02 5.6256E-05 3.9070E-05 3.7130E-06 3.0582E-06 - 1.9953E+02 3.9373E-05 2.7318E-05 2.5160E-06 2.0593E-06 - 2.2387E+02 2.7538E-05 1.8893E-05 1.6794E-06 1.3777E-06 - 2.5119E+02 1.9280E-05 1.3107E-05 1.1208E-06 9.1620E-07 - 2.8184E+02 1.3490E-05 9.1209E-06 7.5648E-07 6.1922E-07 - 3.1623E+02 9.4561E-06 6.3351E-06 5.1081E-07 4.1499E-07 - 3.5481E+02 6.5984E-06 4.3583E-06 3.4286E-07 2.7811E-07 - 3.9811E+02 4.5880E-06 3.0037E-06 2.3006E-07 1.8337E-07 - 4.4668E+02 3.1785E-06 2.0731E-06 1.5543E-07 1.2313E-07 - 5.0119E+02 2.2191E-06 1.4268E-06 1.0665E-07 8.5070E-08 - 5.6234E+02 1.5430E-06 9.9644E-07 7.0711E-08 5.6558E-08 - 6.3096E+02 1.0720E-06 6.8545E-07 4.7419E-08 3.8190E-08 - 7.0795E+02 7.4359E-07 4.7082E-07 3.2370E-08 2.5018E-08 - 7.9433E+02 5.1356E-07 3.2353E-07 2.2118E-08 1.6368E-08 - 8.9125E+02 3.5456E-07 2.2092E-07 1.4743E-08 1.1211E-08 - 1.0000E+03 2.4487E-07 1.5212E-07 9.9846E-09 7.6836E-09 - 1.1220E+03 1.6798E-07 1.0416E-07 6.5812E-09 5.2431E-09 - 1.2589E+03 1.1579E-07 7.1345E-08 4.3191E-09 3.5566E-09 - 1.4125E+03 7.9056E-08 4.8060E-08 2.8141E-09 2.3011E-09 - 1.5849E+03 5.4188E-08 3.2396E-08 1.9036E-09 1.5012E-09 - 1.7783E+03 3.7015E-08 2.2088E-08 1.3149E-09 9.6047E-10 - 1.9953E+03 2.5224E-08 1.5055E-08 9.1540E-10 6.5182E-10 - 2.2387E+03 1.7097E-08 1.0077E-08 6.0676E-10 4.4742E-10 - 2.5119E+03 1.1507E-08 6.8069E-09 4.0040E-10 3.0356E-10 - 2.8184E+03 7.8967E-09 4.5528E-09 2.5895E-10 1.9812E-10 - 3.1623E+03 5.4076E-09 3.1193E-09 1.6452E-10 1.2905E-10 - 3.5481E+03 3.5530E-09 2.0448E-09 1.1016E-10 8.6717E-11 - 3.9811E+03 2.3802E-09 1.3716E-09 7.6025E-11 5.8179E-11 - 4.4668E+03 1.5917E-09 9.1285E-10 5.0802E-11 3.7748E-11 - 5.0119E+03 1.0615E-09 6.1598E-10 3.2046E-11 2.3652E-11 - 5.6234E+03 7.0534E-10 4.0517E-10 2.0218E-11 1.5628E-11 - 6.3096E+03 4.6853E-10 2.6508E-10 1.3892E-11 9.9016E-12 - 7.0795E+03 3.1149E-10 1.7435E-10 9.8464E-12 6.5094E-12 - 7.9433E+03 2.0748E-10 1.1495E-10 6.3976E-12 4.2194E-12 - 8.9125E+03 1.3687E-10 7.5999E-11 4.0575E-12 2.6427E-12 - 1.0000E+04 9.0344E-11 4.9070E-11 2.6054E-12 1.7578E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.3327E+03 7.5909E+03 3.6653E+03 3.4955E+03 - 1.1220E-01 6.5305E+03 6.7702E+03 3.2833E+03 3.0901E+03 - 1.2589E-01 5.7674E+03 5.9907E+03 2.9253E+03 2.7232E+03 - 1.4125E-01 5.0719E+03 5.2452E+03 2.5444E+03 2.3742E+03 - 1.5849E-01 4.4226E+03 4.5610E+03 2.2073E+03 2.0493E+03 - 1.7783E-01 3.8296E+03 3.9417E+03 1.9297E+03 1.7546E+03 - 1.9953E-01 3.2756E+03 3.3653E+03 1.6693E+03 1.4977E+03 - 2.2387E-01 2.7709E+03 2.8310E+03 1.4264E+03 1.2762E+03 - 2.5119E-01 2.3329E+03 2.3677E+03 1.2008E+03 1.0694E+03 - 2.8184E-01 1.9424E+03 1.9666E+03 1.0096E+03 8.7937E+02 - 3.1623E-01 1.5971E+03 1.6226E+03 8.4046E+02 7.2346E+02 - 3.5481E-01 1.3078E+03 1.3283E+03 6.8773E+02 5.9229E+02 - 3.9811E-01 1.0594E+03 1.0718E+03 5.6383E+02 4.8032E+02 - 4.4668E-01 8.5392E+02 8.5878E+02 4.5695E+02 3.8373E+02 - 5.0119E-01 6.8638E+02 6.8474E+02 3.6409E+02 3.0580E+02 - 5.6234E-01 5.4655E+02 5.4231E+02 2.8977E+02 2.4363E+02 - 6.3096E-01 4.3071E+02 4.2661E+02 2.2970E+02 1.8987E+02 - 7.0795E-01 3.3592E+02 3.2930E+02 1.8284E+02 1.4768E+02 - 7.9433E-01 2.6086E+02 2.5508E+02 1.4140E+02 1.1391E+02 - 8.9125E-01 2.0087E+02 1.9679E+02 1.0823E+02 8.7594E+01 - 1.0000E+00 1.5490E+02 1.5097E+02 8.3152E+01 6.6452E+01 - 1.1220E+00 1.1821E+02 1.1490E+02 6.3067E+01 4.9819E+01 - 1.2589E+00 8.9179E+01 8.7124E+01 4.7157E+01 3.7400E+01 - 1.4125E+00 6.7495E+01 6.5172E+01 3.5302E+01 2.7772E+01 - 1.5849E+00 5.0853E+01 4.8415E+01 2.6173E+01 2.0335E+01 - 1.7783E+00 3.8198E+01 3.5839E+01 1.9092E+01 1.4836E+01 - 1.9953E+00 2.8298E+01 2.6279E+01 1.3963E+01 1.0790E+01 - 2.2387E+00 2.0981E+01 1.9276E+01 1.0182E+01 7.8106E+00 - 2.5119E+00 1.5487E+01 1.4178E+01 7.3283E+00 5.5674E+00 - 2.8184E+00 1.1287E+01 1.0297E+01 5.2234E+00 3.9904E+00 - 3.1623E+00 8.2470E+00 7.3777E+00 3.6814E+00 2.8503E+00 - 3.5481E+00 5.9632E+00 5.3133E+00 2.5914E+00 2.0143E+00 - 3.9811E+00 4.3144E+00 3.8189E+00 1.8323E+00 1.4070E+00 - 4.4668E+00 3.1279E+00 2.7447E+00 1.2652E+00 9.6891E-01 - 5.0119E+00 2.2543E+00 1.9659E+00 8.8483E-01 6.7423E-01 - 5.6234E+00 1.6152E+00 1.3955E+00 6.2234E-01 4.6986E-01 - 6.3096E+00 1.1596E+00 1.0033E+00 4.2162E-01 3.2106E-01 - 7.0795E+00 8.2618E-01 7.1094E-01 2.8560E-01 2.1599E-01 - 7.9433E+00 5.8778E-01 4.9635E-01 1.9429E-01 1.4783E-01 - 8.9125E+00 4.2501E-01 3.5246E-01 1.3665E-01 1.0326E-01 - 1.0000E+01 3.0562E-01 2.5296E-01 9.0605E-02 6.9427E-02 - 1.1220E+01 2.1722E-01 1.7865E-01 6.1307E-02 4.6056E-02 - 1.2589E+01 1.5574E-01 1.2632E-01 4.1657E-02 3.1439E-02 - 1.4125E+01 1.1110E-01 9.0163E-02 2.8088E-02 2.1092E-02 - 1.5849E+01 7.8842E-02 6.3156E-02 1.8674E-02 1.3868E-02 - 1.7783E+01 5.6099E-02 4.4613E-02 1.2658E-02 9.2780E-03 - 1.9953E+01 3.9363E-02 3.1648E-02 8.4908E-03 6.3500E-03 - 2.2387E+01 2.8296E-02 2.2394E-02 5.6576E-03 4.2426E-03 - 2.5119E+01 2.0093E-02 1.5696E-02 3.6777E-03 2.9231E-03 - 2.8184E+01 1.4418E-02 1.1264E-02 2.3228E-03 1.9065E-03 - 3.1623E+01 1.0417E-02 7.9938E-03 1.6505E-03 1.2793E-03 - 3.5481E+01 7.4237E-03 5.6444E-03 1.0966E-03 8.5391E-04 - 3.9811E+01 5.2741E-03 3.9879E-03 7.3153E-04 5.6556E-04 - 4.4668E+01 3.7406E-03 2.8176E-03 4.8627E-04 3.7791E-04 - 5.0119E+01 2.6637E-03 1.9888E-03 3.2311E-04 2.5207E-04 - 5.6234E+01 1.8831E-03 1.3993E-03 2.1380E-04 1.6851E-04 - 6.3096E+01 1.3307E-03 9.8246E-04 1.4079E-04 1.1458E-04 - 7.0795E+01 9.4122E-04 6.9157E-04 9.4240E-05 7.6813E-05 - 7.9433E+01 6.6490E-04 4.8496E-04 6.3276E-05 4.9453E-05 - 8.9125E+01 4.6609E-04 3.3917E-04 4.1815E-05 3.2464E-05 - 1.0000E+02 3.2873E-04 2.3652E-04 2.7495E-05 2.2303E-05 - 1.1220E+02 2.3100E-04 1.6552E-04 1.8445E-05 1.4932E-05 - 1.2589E+02 1.6259E-04 1.1622E-04 1.2306E-05 1.0004E-05 - 1.4125E+02 1.1458E-04 8.0628E-05 8.1272E-06 6.6912E-06 - 1.5849E+02 8.0440E-05 5.5883E-05 5.4316E-06 4.4282E-06 - 1.7783E+02 5.6703E-05 3.8982E-05 3.6986E-06 2.9992E-06 - 1.9953E+02 3.9622E-05 2.7170E-05 2.4846E-06 2.0611E-06 - 2.2387E+02 2.7614E-05 1.8866E-05 1.6835E-06 1.4008E-06 - 2.5119E+02 1.9446E-05 1.3095E-05 1.1430E-06 9.1568E-07 - 2.8184E+02 1.3503E-05 9.0651E-06 7.4197E-07 6.1558E-07 - 3.1623E+02 9.4450E-06 6.3138E-06 5.1094E-07 4.1026E-07 - 3.5481E+02 6.5923E-06 4.3770E-06 3.4713E-07 2.7766E-07 - 3.9811E+02 4.6006E-06 3.0326E-06 2.3451E-07 1.8489E-07 - 4.4668E+02 3.2009E-06 2.0854E-06 1.5667E-07 1.2455E-07 - 5.0119E+02 2.2352E-06 1.4446E-06 1.0524E-07 8.3838E-08 - 5.6234E+02 1.5529E-06 1.0026E-06 7.0938E-08 5.5163E-08 - 6.3096E+02 1.0762E-06 6.8397E-07 4.8282E-08 3.7278E-08 - 7.0795E+02 7.4502E-07 4.6916E-07 3.2950E-08 2.4782E-08 - 7.9433E+02 5.1109E-07 3.2233E-07 2.1489E-08 1.6637E-08 - 8.9125E+02 3.5121E-07 2.2105E-07 1.4250E-08 1.1401E-08 - 1.0000E+03 2.4518E-07 1.5283E-07 9.8005E-09 7.6844E-09 - 1.1220E+03 1.6804E-07 1.0396E-07 6.6123E-09 5.0524E-09 - 1.2589E+03 1.1521E-07 7.1170E-08 4.5309E-09 3.4533E-09 - 1.4125E+03 7.8960E-08 4.8634E-08 2.9429E-09 2.3949E-09 - 1.5849E+03 5.4074E-08 3.2891E-08 1.9092E-09 1.5807E-09 - 1.7783E+03 3.6902E-08 2.2138E-08 1.3638E-09 9.6941E-10 - 1.9953E+03 2.5093E-08 1.5096E-08 8.7863E-10 6.2489E-10 - 2.2387E+03 1.7034E-08 1.0126E-08 5.8690E-10 4.3485E-10 - 2.5119E+03 1.1476E-08 6.8595E-09 4.0197E-10 2.8123E-10 - 2.8184E+03 7.7577E-09 4.6380E-09 2.5914E-10 1.9062E-10 - 3.1623E+03 5.3949E-09 3.1552E-09 1.7813E-10 1.3297E-10 - 3.5481E+03 3.5368E-09 2.0559E-09 1.1457E-10 8.5958E-11 - 3.9811E+03 2.3563E-09 1.3714E-09 7.4385E-11 5.3718E-11 - 4.4668E+03 1.5816E-09 9.1449E-10 4.8876E-11 3.7681E-11 - 5.0119E+03 1.0578E-09 6.0456E-10 3.2016E-11 2.5875E-11 - 5.6234E+03 7.0129E-10 4.0396E-10 2.1515E-11 1.5481E-11 - 6.3096E+03 4.7030E-10 2.6657E-10 1.4179E-11 1.0642E-11 - 7.0795E+03 3.1314E-10 1.7746E-10 9.0356E-12 6.2360E-12 - 7.9433E+03 2.0789E-10 1.1661E-10 5.9968E-12 3.9609E-12 - 8.9125E+03 1.3788E-10 7.5424E-11 3.8084E-12 2.9007E-12 - 1.0000E+04 9.1513E-11 4.9365E-11 2.4207E-12 1.8053E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.7905E+03 9.1402E+03 4.3625E+03 4.1593E+03 - 1.1220E-01 7.7631E+03 8.0667E+03 3.9036E+03 3.6527E+03 - 1.2589E-01 6.8561E+03 7.0828E+03 3.4618E+03 3.2104E+03 - 1.4125E-01 5.9851E+03 6.1723E+03 3.0101E+03 2.7911E+03 - 1.5849E-01 5.1876E+03 5.3159E+03 2.5899E+03 2.3827E+03 - 1.7783E-01 4.4474E+03 4.5466E+03 2.2435E+03 2.0390E+03 - 1.9953E-01 3.7663E+03 3.8682E+03 1.9296E+03 1.7258E+03 - 2.2387E-01 3.1740E+03 3.2449E+03 1.6321E+03 1.4395E+03 - 2.5119E-01 2.6388E+03 2.6926E+03 1.3734E+03 1.1971E+03 - 2.8184E-01 2.1786E+03 2.2087E+03 1.1437E+03 9.9472E+02 - 3.1623E-01 1.7905E+03 1.7951E+03 9.4569E+02 8.1562E+02 - 3.5481E-01 1.4489E+03 1.4649E+03 7.7222E+02 6.5779E+02 - 3.9811E-01 1.1657E+03 1.1829E+03 6.1911E+02 5.2509E+02 - 4.4668E-01 9.3514E+02 9.3743E+02 4.9690E+02 4.1443E+02 - 5.0119E-01 7.4581E+02 7.3982E+02 4.0272E+02 3.2900E+02 - 5.6234E-01 5.8718E+02 5.7879E+02 3.1817E+02 2.6105E+02 - 6.3096E-01 4.5657E+02 4.4755E+02 2.4490E+02 2.0264E+02 - 7.0795E-01 3.5348E+02 3.4914E+02 1.9192E+02 1.5390E+02 - 7.9433E-01 2.6988E+02 2.6792E+02 1.4997E+02 1.1859E+02 - 8.9125E-01 2.0641E+02 2.0377E+02 1.1457E+02 9.1337E+01 - 1.0000E+00 1.5954E+02 1.5563E+02 8.5593E+01 6.8189E+01 - 1.1220E+00 1.2131E+02 1.1679E+02 6.4723E+01 5.1200E+01 - 1.2589E+00 9.1044E+01 8.7811E+01 4.8262E+01 3.8399E+01 - 1.4125E+00 6.8532E+01 6.5695E+01 3.5607E+01 2.8163E+01 - 1.5849E+00 5.1980E+01 4.8388E+01 2.6305E+01 2.0442E+01 - 1.7783E+00 3.8707E+01 3.5801E+01 1.9268E+01 1.4944E+01 - 1.9953E+00 2.8374E+01 2.6400E+01 1.4039E+01 1.0843E+01 - 2.2387E+00 2.0766E+01 1.9198E+01 1.0253E+01 7.8007E+00 - 2.5119E+00 1.5197E+01 1.4149E+01 7.3877E+00 5.6264E+00 - 2.8184E+00 1.1114E+01 1.0261E+01 5.2727E+00 4.0038E+00 - 3.1623E+00 8.1778E+00 7.3626E+00 3.6915E+00 2.8169E+00 - 3.5481E+00 5.9646E+00 5.2919E+00 2.6209E+00 1.9863E+00 - 3.9811E+00 4.3056E+00 3.8031E+00 1.8258E+00 1.4020E+00 - 4.4668E+00 3.1106E+00 2.7437E+00 1.2677E+00 9.7489E-01 - 5.0119E+00 2.2762E+00 1.9640E+00 8.7835E-01 6.8064E-01 - 5.6234E+00 1.6399E+00 1.4074E+00 6.0175E-01 4.7456E-01 - 6.3096E+00 1.1696E+00 9.9812E-01 4.1495E-01 3.2382E-01 - 7.0795E+00 8.3158E-01 7.0329E-01 2.8970E-01 2.1837E-01 - 7.9433E+00 5.9659E-01 4.9887E-01 2.0039E-01 1.4876E-01 - 8.9125E+00 4.2678E-01 3.5026E-01 1.3533E-01 9.7808E-02 - 1.0000E+01 3.0631E-01 2.5268E-01 9.0633E-02 6.8696E-02 - 1.1220E+01 2.1911E-01 1.7932E-01 6.1456E-02 4.6347E-02 - 1.2589E+01 1.5760E-01 1.2712E-01 4.1492E-02 3.1156E-02 - 1.4125E+01 1.1128E-01 8.9866E-02 2.8107E-02 2.1153E-02 - 1.5849E+01 7.8836E-02 6.3472E-02 1.8983E-02 1.4321E-02 - 1.7783E+01 5.6559E-02 4.5224E-02 1.2523E-02 9.5806E-03 - 1.9953E+01 4.0556E-02 3.1979E-02 8.2988E-03 6.3145E-03 - 2.2387E+01 2.9043E-02 2.2553E-02 5.4808E-03 4.1997E-03 - 2.5119E+01 2.0952E-02 1.5899E-02 3.6583E-03 2.8014E-03 - 2.8184E+01 1.4871E-02 1.1216E-02 2.4363E-03 1.9381E-03 - 3.1623E+01 1.0422E-02 7.9938E-03 1.6598E-03 1.2692E-03 - 3.5481E+01 7.4106E-03 5.6472E-03 1.1038E-03 8.5325E-04 - 3.9811E+01 5.2489E-03 3.9883E-03 7.3184E-04 5.7163E-04 - 4.4668E+01 3.7251E-03 2.8130E-03 4.8604E-04 3.7946E-04 - 5.0119E+01 2.6482E-03 1.9895E-03 3.2143E-04 2.5601E-04 - 5.6234E+01 1.8829E-03 1.4052E-03 2.1437E-04 1.6971E-04 - 6.3096E+01 1.3313E-03 9.9025E-04 1.4364E-04 1.1198E-04 - 7.0795E+01 9.4402E-04 6.9333E-04 9.4932E-05 7.3774E-05 - 7.9433E+01 6.6634E-04 4.8040E-04 6.2772E-05 4.9732E-05 - 8.9125E+01 4.6922E-04 3.3566E-04 4.2194E-05 3.4244E-05 - 1.0000E+02 3.2940E-04 2.3675E-04 2.7858E-05 2.2546E-05 - 1.1220E+02 2.3157E-04 1.6543E-04 1.8251E-05 1.4945E-05 - 1.2589E+02 1.6296E-04 1.1562E-04 1.2267E-05 1.0040E-05 - 1.4125E+02 1.1414E-04 8.0522E-05 8.2190E-06 6.6596E-06 - 1.5849E+02 8.0013E-05 5.6038E-05 5.4943E-06 4.4713E-06 - 1.7783E+02 5.6464E-05 3.8927E-05 3.6307E-06 2.9614E-06 - 1.9953E+02 3.9355E-05 2.6887E-05 2.4815E-06 1.9322E-06 - 2.2387E+02 2.7459E-05 1.8629E-05 1.7034E-06 1.3142E-06 - 2.5119E+02 1.9320E-05 1.3020E-05 1.1255E-06 9.2988E-07 - 2.8184E+02 1.3416E-05 9.0699E-06 7.6621E-07 6.2533E-07 - 3.1623E+02 9.4340E-06 6.3208E-06 5.1348E-07 4.1673E-07 - 3.5481E+02 6.5845E-06 4.3635E-06 3.4052E-07 2.8162E-07 - 3.9811E+02 4.5871E-06 3.0098E-06 2.2796E-07 1.8604E-07 - 4.4668E+02 3.1821E-06 2.0921E-06 1.5708E-07 1.2627E-07 - 5.0119E+02 2.2205E-06 1.4448E-06 1.0686E-07 8.2766E-08 - 5.6234E+02 1.5500E-06 9.9550E-07 7.1435E-08 5.6427E-08 - 6.3096E+02 1.0708E-06 6.8572E-07 4.8980E-08 3.8022E-08 - 7.0795E+02 7.4522E-07 4.7070E-07 3.2915E-08 2.5466E-08 - 7.9433E+02 5.1684E-07 3.2268E-07 2.1505E-08 1.7096E-08 - 8.9125E+02 3.5498E-07 2.2004E-07 1.4735E-08 1.1537E-08 - 1.0000E+03 2.4689E-07 1.5201E-07 1.0071E-08 7.6271E-09 - 1.1220E+03 1.6989E-07 1.0439E-07 6.6377E-09 5.1749E-09 - 1.2589E+03 1.1616E-07 7.1078E-08 4.4863E-09 3.3819E-09 - 1.4125E+03 7.9143E-08 4.8385E-08 2.9874E-09 2.2123E-09 - 1.5849E+03 5.4284E-08 3.2918E-08 1.9870E-09 1.4654E-09 - 1.7783E+03 3.7318E-08 2.2083E-08 1.3000E-09 1.0197E-09 - 1.9953E+03 2.5355E-08 1.5078E-08 8.7736E-10 6.9338E-10 - 2.2387E+03 1.7221E-08 1.0142E-08 6.0816E-10 4.4178E-10 - 2.5119E+03 1.1683E-08 6.8821E-09 4.0846E-10 2.7167E-10 - 2.8184E+03 7.8051E-09 4.5818E-09 2.6255E-10 1.8001E-10 - 3.1623E+03 5.3950E-09 3.1566E-09 1.6929E-10 1.3154E-10 - 3.5481E+03 3.5555E-09 2.0740E-09 1.1009E-10 8.8672E-11 - 3.9811E+03 2.3842E-09 1.3888E-09 7.6051E-11 5.2122E-11 - 4.4668E+03 1.5942E-09 9.2136E-10 5.2156E-11 3.1966E-11 - 5.0119E+03 1.0551E-09 6.0814E-10 3.2882E-11 2.3001E-11 - 5.6234E+03 6.9518E-10 4.0127E-10 2.1010E-11 1.5445E-11 - 6.3096E+03 4.7062E-10 2.6940E-10 1.4059E-11 1.0366E-11 - 7.0795E+03 3.1235E-10 1.7865E-10 9.1143E-12 6.7562E-12 - 7.9433E+03 2.0787E-10 1.1730E-10 6.0204E-12 4.1584E-12 - 8.9125E+03 1.3783E-10 7.7548E-11 3.8103E-12 2.7579E-12 - 1.0000E+04 8.9903E-11 4.9994E-11 2.5348E-12 1.8842E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.5331E+03 5.6899E+03 2.7569E+03 2.6769E+03 - 1.1220E-01 4.9607E+03 5.1355E+03 2.4675E+03 2.4007E+03 - 1.2589E-01 4.4489E+03 4.5872E+03 2.2007E+03 2.1457E+03 - 1.4125E-01 3.9853E+03 4.0560E+03 1.9640E+03 1.8841E+03 - 1.5849E-01 3.5062E+03 3.5740E+03 1.7348E+03 1.6256E+03 - 1.7783E-01 3.0399E+03 3.1220E+03 1.5150E+03 1.4054E+03 - 1.9953E-01 2.6270E+03 2.6936E+03 1.3189E+03 1.2053E+03 - 2.2387E-01 2.2515E+03 2.2995E+03 1.1234E+03 1.0293E+03 - 2.5119E-01 1.9057E+03 1.9323E+03 9.5901E+02 8.7264E+02 - 2.8184E-01 1.6082E+03 1.6165E+03 8.2193E+02 7.3217E+02 - 3.1623E-01 1.3391E+03 1.3511E+03 6.8072E+02 6.0780E+02 - 3.5481E-01 1.1024E+03 1.1126E+03 5.6081E+02 4.9950E+02 - 3.9811E-01 9.0775E+02 9.1439E+02 4.6660E+02 4.0746E+02 - 4.4668E-01 7.3922E+02 7.4327E+02 3.7996E+02 3.2940E+02 - 5.0119E-01 5.9550E+02 5.9381E+02 3.0581E+02 2.6422E+02 - 5.6234E-01 4.7822E+02 4.7290E+02 2.4552E+02 2.0946E+02 - 6.3096E-01 3.8176E+02 3.7415E+02 1.9484E+02 1.6578E+02 - 7.0795E-01 3.0263E+02 2.9554E+02 1.5220E+02 1.2941E+02 - 7.9433E-01 2.3770E+02 2.3169E+02 1.1878E+02 9.9913E+01 - 8.9125E-01 1.8416E+02 1.7820E+02 9.2769E+01 7.7124E+01 - 1.0000E+00 1.4104E+02 1.3650E+02 7.1751E+01 5.8375E+01 - 1.1220E+00 1.0828E+02 1.0415E+02 5.4777E+01 4.4315E+01 - 1.2589E+00 8.2862E+01 7.8706E+01 4.1125E+01 3.3343E+01 - 1.4125E+00 6.3154E+01 5.9549E+01 3.0565E+01 2.4818E+01 - 1.5849E+00 4.7496E+01 4.4682E+01 2.2551E+01 1.8336E+01 - 1.7783E+00 3.5504E+01 3.2853E+01 1.6729E+01 1.3282E+01 - 1.9953E+00 2.6485E+01 2.4298E+01 1.2363E+01 9.6463E+00 - 2.2387E+00 1.9736E+01 1.7956E+01 8.9771E+00 7.0157E+00 - 2.5119E+00 1.4487E+01 1.3055E+01 6.4516E+00 4.9964E+00 - 2.8184E+00 1.0575E+01 9.4946E+00 4.6143E+00 3.5507E+00 - 3.1623E+00 7.7965E+00 6.9142E+00 3.2125E+00 2.4948E+00 - 3.5481E+00 5.6937E+00 4.9507E+00 2.2711E+00 1.7445E+00 - 3.9811E+00 4.1463E+00 3.5414E+00 1.5851E+00 1.2096E+00 - 4.4668E+00 2.9828E+00 2.5334E+00 1.0904E+00 8.3746E-01 - 5.0119E+00 2.1438E+00 1.7987E+00 7.4627E-01 5.7798E-01 - 5.6234E+00 1.5580E+00 1.2895E+00 5.2263E-01 3.9352E-01 - 6.3096E+00 1.1234E+00 9.2652E-01 3.5762E-01 2.7280E-01 - 7.0795E+00 7.9877E-01 6.5207E-01 2.4717E-01 1.8916E-01 - 7.9433E+00 5.6910E-01 4.6596E-01 1.7157E-01 1.2839E-01 - 8.9125E+00 4.0873E-01 3.3759E-01 1.1524E-01 8.4346E-02 - 1.0000E+01 2.9145E-01 2.3634E-01 7.7287E-02 5.7392E-02 - 1.1220E+01 2.0753E-01 1.6576E-01 5.1978E-02 3.9467E-02 - 1.2589E+01 1.4849E-01 1.1624E-01 3.4458E-02 2.6260E-02 - 1.4125E+01 1.0581E-01 8.2560E-02 2.2815E-02 1.7152E-02 - 1.5849E+01 7.5157E-02 5.9057E-02 1.5461E-02 1.1520E-02 - 1.7783E+01 5.3653E-02 4.1716E-02 1.0322E-02 7.7491E-03 - 1.9953E+01 3.8374E-02 2.9672E-02 6.8528E-03 5.1684E-03 - 2.2387E+01 2.7270E-02 2.1201E-02 4.6187E-03 3.3301E-03 - 2.5119E+01 1.9298E-02 1.4848E-02 3.0258E-03 2.2065E-03 - 2.8184E+01 1.3804E-02 1.0459E-02 1.9881E-03 1.5858E-03 - 3.1623E+01 9.8147E-03 7.3816E-03 1.3456E-03 1.0236E-03 - 3.5481E+01 6.9564E-03 5.2222E-03 8.9060E-04 6.8782E-04 - 3.9811E+01 4.9402E-03 3.6702E-03 5.9616E-04 4.6116E-04 - 4.4668E+01 3.5116E-03 2.5898E-03 3.9654E-04 3.0872E-04 - 5.0119E+01 2.4802E-03 1.8247E-03 2.6145E-04 2.0851E-04 - 5.6234E+01 1.7499E-03 1.2838E-03 1.7301E-04 1.4021E-04 - 6.3096E+01 1.2359E-03 9.0089E-04 1.1475E-04 9.3435E-05 - 7.0795E+01 8.7765E-04 6.2953E-04 7.6605E-05 6.3608E-05 - 7.9433E+01 6.1678E-04 4.4183E-04 5.1099E-05 4.2595E-05 - 8.9125E+01 4.3216E-04 3.0936E-04 3.4393E-05 2.8121E-05 - 1.0000E+02 3.0502E-04 2.1638E-04 2.2921E-05 1.8359E-05 - 1.1220E+02 2.1489E-04 1.5086E-04 1.5280E-05 1.2282E-05 - 1.2589E+02 1.5119E-04 1.0521E-04 1.0230E-05 8.2311E-06 - 1.4125E+02 1.0534E-04 7.3186E-05 6.7831E-06 5.5536E-06 - 1.5849E+02 7.3589E-05 5.1124E-05 4.5883E-06 3.7578E-06 - 1.7783E+02 5.1658E-05 3.5682E-05 3.0842E-06 2.4819E-06 - 1.9953E+02 3.6192E-05 2.4561E-05 2.0361E-06 1.6666E-06 - 2.2387E+02 2.5256E-05 1.7027E-05 1.3843E-06 1.1301E-06 - 2.5119E+02 1.7583E-05 1.1912E-05 9.3236E-07 7.5963E-07 - 2.8184E+02 1.2260E-05 8.1705E-06 6.2383E-07 5.1570E-07 - 3.1623E+02 8.5959E-06 5.6676E-06 4.2694E-07 3.5068E-07 - 3.5481E+02 5.9918E-06 3.9285E-06 2.8879E-07 2.3696E-07 - 3.9811E+02 4.1770E-06 2.7078E-06 1.9670E-07 1.5880E-07 - 4.4668E+02 2.8989E-06 1.8646E-06 1.3468E-07 1.0702E-07 - 5.0119E+02 2.0096E-06 1.2870E-06 9.0342E-08 7.1773E-08 - 5.6234E+02 1.3993E-06 8.9174E-07 6.0906E-08 4.7499E-08 - 6.3096E+02 9.6718E-07 6.1000E-07 4.1741E-08 3.2229E-08 - 7.0795E+02 6.7116E-07 4.1882E-07 2.7787E-08 2.1995E-08 - 7.9433E+02 4.6136E-07 2.8837E-07 1.8612E-08 1.4971E-08 - 8.9125E+02 3.1538E-07 1.9615E-07 1.2612E-08 9.8225E-09 - 1.0000E+03 2.1884E-07 1.3536E-07 8.2868E-09 6.4021E-09 - 1.1220E+03 1.4997E-07 9.1808E-08 5.5221E-09 4.3594E-09 - 1.2589E+03 1.0280E-07 6.2723E-08 3.6630E-09 2.8882E-09 - 1.4125E+03 6.9848E-08 4.2331E-08 2.4699E-09 1.8400E-09 - 1.5849E+03 4.7417E-08 2.8602E-08 1.6295E-09 1.2011E-09 - 1.7783E+03 3.2289E-08 1.9200E-08 1.0975E-09 8.1517E-10 - 1.9953E+03 2.1932E-08 1.2910E-08 7.6926E-10 5.4411E-10 - 2.2387E+03 1.4816E-08 8.6248E-09 4.9676E-10 3.5793E-10 - 2.5119E+03 1.0074E-08 5.8302E-09 3.2748E-10 2.3018E-10 - 2.8184E+03 6.7351E-09 3.8924E-09 2.2404E-10 1.4594E-10 - 3.1623E+03 4.6117E-09 2.6682E-09 1.4794E-10 1.0447E-10 - 3.5481E+03 3.0210E-09 1.7347E-09 9.6195E-11 7.0766E-11 - 3.9811E+03 2.0151E-09 1.1558E-09 6.4288E-11 4.6224E-11 - 4.4668E+03 1.3531E-09 7.6867E-10 4.2738E-11 3.0838E-11 - 5.0119E+03 9.0429E-10 5.0688E-10 2.8694E-11 2.0924E-11 - 5.6234E+03 6.0381E-10 3.3754E-10 1.8083E-11 1.3763E-11 - 6.3096E+03 3.9958E-10 2.2395E-10 1.1520E-11 8.3683E-12 - 7.0795E+03 2.6421E-10 1.4433E-10 7.6435E-12 5.7271E-12 - 7.9433E+03 1.7317E-10 9.5764E-11 5.3862E-12 3.5188E-12 - 8.9125E+03 1.1458E-10 6.3922E-11 3.4510E-12 2.3501E-12 - 1.0000E+04 7.5998E-11 4.1830E-11 2.2442E-12 1.5471E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.0384E+03 6.1717E+03 2.9523E+03 2.9019E+03 - 1.1220E-01 5.4012E+03 5.5096E+03 2.6815E+03 2.6013E+03 - 1.2589E-01 4.8216E+03 4.8858E+03 2.3693E+03 2.2990E+03 - 1.4125E-01 4.2642E+03 4.3405E+03 2.0863E+03 2.0015E+03 - 1.5849E-01 3.7436E+03 3.8125E+03 1.8411E+03 1.7387E+03 - 1.7783E-01 3.2652E+03 3.3184E+03 1.6168E+03 1.5038E+03 - 1.9953E-01 2.8189E+03 2.8519E+03 1.4066E+03 1.2864E+03 - 2.2387E-01 2.4060E+03 2.4310E+03 1.1975E+03 1.0986E+03 - 2.5119E-01 2.0284E+03 2.0544E+03 1.0073E+03 9.2743E+02 - 2.8184E-01 1.6831E+03 1.7074E+03 8.4821E+02 7.7056E+02 - 3.1623E-01 1.3949E+03 1.4033E+03 7.0825E+02 6.3556E+02 - 3.5481E-01 1.1573E+03 1.1533E+03 5.8980E+02 5.2033E+02 - 3.9811E-01 9.4630E+02 9.4845E+02 4.8611E+02 4.2502E+02 - 4.4668E-01 7.6444E+02 7.6808E+02 3.9473E+02 3.4363E+02 - 5.0119E-01 6.1906E+02 6.1053E+02 3.1788E+02 2.7274E+02 - 5.6234E-01 4.9628E+02 4.8851E+02 2.5214E+02 2.1527E+02 - 6.3096E-01 3.9062E+02 3.8731E+02 1.9933E+02 1.7138E+02 - 7.0795E-01 3.0800E+02 3.0066E+02 1.5652E+02 1.3474E+02 - 7.9433E-01 2.4009E+02 2.3236E+02 1.2196E+02 1.0257E+02 - 8.9125E-01 1.8569E+02 1.8104E+02 9.5303E+01 7.7747E+01 - 1.0000E+00 1.4371E+02 1.3974E+02 7.2998E+01 6.0092E+01 - 1.1220E+00 1.1035E+02 1.0614E+02 5.5407E+01 4.4928E+01 - 1.2589E+00 8.4565E+01 8.0150E+01 4.1849E+01 3.3772E+01 - 1.4125E+00 6.4316E+01 6.0003E+01 3.1202E+01 2.5299E+01 - 1.5849E+00 4.8677E+01 4.5098E+01 2.3098E+01 1.8596E+01 - 1.7783E+00 3.6266E+01 3.3355E+01 1.7106E+01 1.3372E+01 - 1.9953E+00 2.6806E+01 2.4490E+01 1.2309E+01 9.6167E+00 - 2.2387E+00 1.9839E+01 1.8057E+01 8.8570E+00 6.9089E+00 - 2.5119E+00 1.4614E+01 1.3127E+01 6.4894E+00 4.9361E+00 - 2.8184E+00 1.0700E+01 9.5602E+00 4.6250E+00 3.5441E+00 - 3.1623E+00 7.7980E+00 6.8986E+00 3.2373E+00 2.4979E+00 - 3.5481E+00 5.6832E+00 4.9698E+00 2.2698E+00 1.7412E+00 - 3.9811E+00 4.1417E+00 3.5543E+00 1.5840E+00 1.2050E+00 - 4.4668E+00 3.0029E+00 2.5323E+00 1.0976E+00 8.3575E-01 - 5.0119E+00 2.1427E+00 1.8133E+00 7.6089E-01 5.7828E-01 - 5.6234E+00 1.5513E+00 1.3045E+00 5.2520E-01 3.9623E-01 - 6.3096E+00 1.1298E+00 9.2717E-01 3.6793E-01 2.6878E-01 - 7.0795E+00 7.9469E-01 6.5768E-01 2.5169E-01 1.8605E-01 - 7.9433E+00 5.6895E-01 4.6965E-01 1.6819E-01 1.2807E-01 - 8.9125E+00 4.1191E-01 3.3047E-01 1.1586E-01 8.6439E-02 - 1.0000E+01 2.9064E-01 2.3597E-01 7.6747E-02 5.7703E-02 - 1.1220E+01 2.0761E-01 1.6642E-01 5.0840E-02 3.8895E-02 - 1.2589E+01 1.4855E-01 1.1724E-01 3.4409E-02 2.6196E-02 - 1.4125E+01 1.0581E-01 8.3503E-02 2.3007E-02 1.7541E-02 - 1.5849E+01 7.5133E-02 5.8696E-02 1.5329E-02 1.1850E-02 - 1.7783E+01 5.3398E-02 4.1426E-02 1.0259E-02 7.7302E-03 - 1.9953E+01 3.8353E-02 2.9401E-02 6.7072E-03 5.0802E-03 - 2.2387E+01 2.7069E-02 2.0609E-02 4.4283E-03 3.5053E-03 - 2.5119E+01 1.9207E-02 1.4670E-02 3.0629E-03 2.2687E-03 - 2.8184E+01 1.3737E-02 1.0500E-02 2.0477E-03 1.4812E-03 - 3.1623E+01 9.8321E-03 7.3684E-03 1.3541E-03 1.0494E-03 - 3.5481E+01 6.9926E-03 5.2171E-03 9.0106E-04 7.0588E-04 - 3.9811E+01 4.9506E-03 3.6876E-03 5.9325E-04 4.6931E-04 - 4.4668E+01 3.5050E-03 2.6098E-03 3.9257E-04 3.1019E-04 - 5.0119E+01 2.4839E-03 1.8379E-03 2.6179E-04 2.0577E-04 - 5.6234E+01 1.7552E-03 1.2816E-03 1.7495E-04 1.3699E-04 - 6.3096E+01 1.2384E-03 9.0072E-04 1.1616E-04 9.2168E-05 - 7.0795E+01 8.7728E-04 6.3333E-04 7.6980E-05 6.2330E-05 - 7.9433E+01 6.1928E-04 4.4316E-04 5.1379E-05 4.2655E-05 - 8.9125E+01 4.3324E-04 3.0966E-04 3.4326E-05 2.7468E-05 - 1.0000E+02 3.0465E-04 2.1562E-04 2.3060E-05 1.8620E-05 - 1.1220E+02 2.1350E-04 1.5008E-04 1.5237E-05 1.2453E-05 - 1.2589E+02 1.4923E-04 1.0469E-04 1.0292E-05 8.2946E-06 - 1.4125E+02 1.0483E-04 7.2851E-05 6.9335E-06 5.5111E-06 - 1.5849E+02 7.3820E-05 5.0791E-05 4.5622E-06 3.6487E-06 - 1.7783E+02 5.1624E-05 3.5317E-05 3.0706E-06 2.4940E-06 - 1.9953E+02 3.5979E-05 2.4444E-05 2.1446E-06 1.7253E-06 - 2.2387E+02 2.5112E-05 1.6882E-05 1.4877E-06 1.1364E-06 - 2.5119E+02 1.7539E-05 1.1649E-05 9.9079E-07 7.4860E-07 - 2.8184E+02 1.2302E-05 8.0470E-06 6.4401E-07 5.0903E-07 - 3.1623E+02 8.5877E-06 5.6742E-06 4.2710E-07 3.4563E-07 - 3.5481E+02 5.9634E-06 3.9302E-06 2.8823E-07 2.3378E-07 - 3.9811E+02 4.1440E-06 2.7105E-06 1.9552E-07 1.5778E-07 - 4.4668E+02 2.8902E-06 1.8744E-06 1.3281E-07 1.0718E-07 - 5.0119E+02 2.0200E-06 1.2944E-06 9.0333E-08 7.2447E-08 - 5.6234E+02 1.3975E-06 8.8894E-07 6.0776E-08 4.7677E-08 - 6.3096E+02 9.5929E-07 6.0917E-07 4.0528E-08 3.2146E-08 - 7.0795E+02 6.6482E-07 4.1982E-07 2.6488E-08 2.1585E-08 - 7.9433E+02 4.6263E-07 2.8645E-07 1.7496E-08 1.4381E-08 - 8.9125E+02 3.1739E-07 1.9559E-07 1.2136E-08 9.6500E-09 - 1.0000E+03 2.1765E-07 1.3499E-07 8.3247E-09 6.5726E-09 - 1.1220E+03 1.4820E-07 9.1374E-08 5.6208E-09 4.3588E-09 - 1.2589E+03 1.0155E-07 6.1788E-08 3.7132E-09 2.8572E-09 - 1.4125E+03 6.9650E-08 4.1845E-08 2.5306E-09 1.9194E-09 - 1.5849E+03 4.7657E-08 2.8271E-08 1.6859E-09 1.2096E-09 - 1.7783E+03 3.2543E-08 1.9059E-08 1.0961E-09 8.2610E-10 - 1.9953E+03 2.1822E-08 1.3055E-08 7.1528E-10 5.7183E-10 - 2.2387E+03 1.4674E-08 8.7648E-09 4.7477E-10 3.5391E-10 - 2.5119E+03 9.9358E-09 5.8448E-09 3.2672E-10 2.3220E-10 - 2.8184E+03 6.6920E-09 3.9172E-09 2.0981E-10 1.5986E-10 - 3.1623E+03 4.6384E-09 2.6928E-09 1.4693E-10 1.0543E-10 - 3.5481E+03 3.0306E-09 1.7399E-09 9.9080E-11 6.5051E-11 - 3.9811E+03 2.0172E-09 1.1562E-09 6.2313E-11 4.5126E-11 - 4.4668E+03 1.3462E-09 7.6879E-10 4.0369E-11 3.1046E-11 - 5.0119E+03 8.9681E-10 5.1313E-10 2.6979E-11 1.9637E-11 - 5.6234E+03 5.9278E-10 3.4280E-10 1.7061E-11 1.1340E-11 - 6.3096E+03 3.9142E-10 2.2364E-10 1.1988E-11 8.2238E-12 - 7.0795E+03 2.5849E-10 1.4770E-10 8.0575E-12 5.5651E-12 - 7.9433E+03 1.7430E-10 9.7579E-11 5.3037E-12 3.5458E-12 - 8.9125E+03 1.1527E-10 6.4335E-11 3.4437E-12 2.3483E-12 - 1.0000E+04 7.5517E-11 4.1304E-11 2.3921E-12 1.4719E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.0890E+03 6.2484E+03 2.9708E+03 2.9511E+03 - 1.1220E-01 5.4609E+03 5.5659E+03 2.6601E+03 2.6349E+03 - 1.2589E-01 4.8630E+03 4.9391E+03 2.3724E+03 2.3309E+03 - 1.4125E-01 4.2939E+03 4.3625E+03 2.1001E+03 2.0475E+03 - 1.5849E-01 3.7614E+03 3.8137E+03 1.8406E+03 1.7800E+03 - 1.7783E-01 3.2786E+03 3.3058E+03 1.6024E+03 1.5340E+03 - 1.9953E-01 2.8365E+03 2.8388E+03 1.3857E+03 1.3096E+03 - 2.2387E-01 2.4131E+03 2.4154E+03 1.1911E+03 1.1078E+03 - 2.5119E-01 2.0332E+03 2.0336E+03 1.0125E+03 9.3481E+02 - 2.8184E-01 1.6978E+03 1.6989E+03 8.4977E+02 7.8494E+02 - 3.1623E-01 1.4065E+03 1.4186E+03 7.0893E+02 6.4564E+02 - 3.5481E-01 1.1643E+03 1.1654E+03 5.8526E+02 5.2260E+02 - 3.9811E-01 9.5391E+02 9.4425E+02 4.7813E+02 4.2447E+02 - 4.4668E-01 7.6790E+02 7.6521E+02 3.8690E+02 3.4513E+02 - 5.0119E-01 6.2090E+02 6.1625E+02 3.1402E+02 2.7660E+02 - 5.6234E-01 4.9698E+02 4.8786E+02 2.5365E+02 2.1949E+02 - 6.3096E-01 3.9276E+02 3.8166E+02 2.0174E+02 1.7215E+02 - 7.0795E-01 3.0835E+02 2.9911E+02 1.5815E+02 1.3236E+02 - 7.9433E-01 2.3955E+02 2.3214E+02 1.2186E+02 1.0150E+02 - 8.9125E-01 1.8708E+02 1.7882E+02 9.4206E+01 7.8851E+01 - 1.0000E+00 1.4438E+02 1.3752E+02 7.2491E+01 5.9814E+01 - 1.1220E+00 1.1087E+02 1.0478E+02 5.5496E+01 4.4813E+01 - 1.2589E+00 8.4463E+01 7.9112E+01 4.1440E+01 3.3771E+01 - 1.4125E+00 6.3734E+01 5.9789E+01 3.0832E+01 2.5126E+01 - 1.5849E+00 4.7649E+01 4.4916E+01 2.3161E+01 1.8373E+01 - 1.7783E+00 3.5599E+01 3.3275E+01 1.7032E+01 1.3311E+01 - 1.9953E+00 2.6663E+01 2.4426E+01 1.2420E+01 9.5898E+00 - 2.2387E+00 1.9771E+01 1.7901E+01 9.0744E+00 6.8316E+00 - 2.5119E+00 1.4477E+01 1.3123E+01 6.5370E+00 4.8800E+00 - 2.8184E+00 1.0721E+01 9.4233E+00 4.7111E+00 3.4810E+00 - 3.1623E+00 7.7842E+00 6.8700E+00 3.2651E+00 2.4771E+00 - 3.5481E+00 5.6423E+00 4.9624E+00 2.2735E+00 1.7334E+00 - 3.9811E+00 4.1063E+00 3.5532E+00 1.5969E+00 1.1926E+00 - 4.4668E+00 2.9763E+00 2.5480E+00 1.1251E+00 8.2571E-01 - 5.0119E+00 2.1365E+00 1.8360E+00 7.7285E-01 5.7745E-01 - 5.6234E+00 1.5493E+00 1.3086E+00 5.2363E-01 3.9168E-01 - 6.3096E+00 1.1218E+00 9.2708E-01 3.5713E-01 2.6678E-01 - 7.0795E+00 8.0719E-01 6.4902E-01 2.4600E-01 1.8601E-01 - 7.9433E+00 5.7276E-01 4.6538E-01 1.6853E-01 1.2569E-01 - 8.9125E+00 4.0930E-01 3.3481E-01 1.1349E-01 8.4498E-02 - 1.0000E+01 2.9337E-01 2.3410E-01 7.6384E-02 5.6960E-02 - 1.1220E+01 2.0826E-01 1.6495E-01 5.2004E-02 3.8258E-02 - 1.2589E+01 1.4781E-01 1.1721E-01 3.4404E-02 2.5822E-02 - 1.4125E+01 1.0586E-01 8.2959E-02 2.2651E-02 1.7604E-02 - 1.5849E+01 7.5372E-02 5.8431E-02 1.5495E-02 1.1641E-02 - 1.7783E+01 5.3392E-02 4.1223E-02 1.0443E-02 7.7694E-03 - 1.9953E+01 3.8205E-02 2.9605E-02 6.7404E-03 5.3879E-03 - 2.2387E+01 2.7219E-02 2.0996E-02 4.4621E-03 3.4376E-03 - 2.5119E+01 1.9298E-02 1.4863E-02 2.9744E-03 2.1542E-03 - 2.8184E+01 1.3680E-02 1.0614E-02 1.9729E-03 1.4739E-03 - 3.1623E+01 9.8102E-03 7.3779E-03 1.3303E-03 1.0455E-03 - 3.5481E+01 6.9552E-03 5.2148E-03 8.7945E-04 6.9375E-04 - 3.9811E+01 4.9219E-03 3.6659E-03 5.8559E-04 4.6692E-04 - 4.4668E+01 3.4926E-03 2.5850E-03 3.9715E-04 3.1504E-04 - 5.0119E+01 2.4789E-03 1.8217E-03 2.6569E-04 2.0714E-04 - 5.6234E+01 1.7532E-03 1.2830E-03 1.7755E-04 1.3975E-04 - 6.3096E+01 1.2372E-03 9.0262E-04 1.1701E-04 9.3996E-05 - 7.0795E+01 8.6914E-04 6.3229E-04 7.8253E-05 6.1546E-05 - 7.9433E+01 6.1352E-04 4.3972E-04 5.1762E-05 4.0968E-05 - 8.9125E+01 4.3143E-04 3.0956E-04 3.4946E-05 2.7796E-05 - 1.0000E+02 3.0388E-04 2.1637E-04 2.3071E-05 1.8677E-05 - 1.1220E+02 2.1380E-04 1.5113E-04 1.5383E-05 1.2551E-05 - 1.2589E+02 1.5081E-04 1.0517E-04 1.0373E-05 8.4060E-06 - 1.4125E+02 1.0504E-04 7.3078E-05 6.9180E-06 5.5498E-06 - 1.5849E+02 7.3603E-05 5.0827E-05 4.6736E-06 3.6915E-06 - 1.7783E+02 5.1805E-05 3.5455E-05 3.1838E-06 2.5332E-06 - 1.9953E+02 3.6286E-05 2.4418E-05 2.1321E-06 1.7024E-06 - 2.2387E+02 2.5214E-05 1.7009E-05 1.4251E-06 1.1635E-06 - 2.5119E+02 1.7574E-05 1.1812E-05 9.7207E-07 7.8911E-07 - 2.8184E+02 1.2346E-05 8.1545E-06 6.3795E-07 5.3258E-07 - 3.1623E+02 8.5948E-06 5.6872E-06 4.2540E-07 3.4887E-07 - 3.5481E+02 5.9750E-06 3.9225E-06 2.8722E-07 2.3324E-07 - 3.9811E+02 4.1534E-06 2.7088E-06 1.9875E-07 1.5518E-07 - 4.4668E+02 2.8909E-06 1.8662E-06 1.3718E-07 1.0440E-07 - 5.0119E+02 2.0143E-06 1.2927E-06 9.0500E-08 7.0657E-08 - 5.6234E+02 1.4035E-06 8.9137E-07 6.0928E-08 4.7346E-08 - 6.3096E+02 9.6417E-07 6.1125E-07 4.1210E-08 3.1863E-08 - 7.0795E+02 6.6816E-07 4.1944E-07 2.7209E-08 2.1106E-08 - 7.9433E+02 4.6385E-07 2.8666E-07 1.8596E-08 1.4076E-08 - 8.9125E+02 3.1623E-07 1.9505E-07 1.2468E-08 9.6816E-09 - 1.0000E+03 2.1865E-07 1.3431E-07 8.1472E-09 6.3675E-09 - 1.1220E+03 1.4925E-07 9.1004E-08 5.4500E-09 4.1928E-09 - 1.2589E+03 1.0215E-07 6.2101E-08 3.8296E-09 2.8838E-09 - 1.4125E+03 6.9760E-08 4.2139E-08 2.5608E-09 1.9400E-09 - 1.5849E+03 4.7568E-08 2.8391E-08 1.7084E-09 1.2047E-09 - 1.7783E+03 3.2290E-08 1.9174E-08 1.1596E-09 7.9920E-10 - 1.9953E+03 2.1896E-08 1.2942E-08 7.4848E-10 5.5884E-10 - 2.2387E+03 1.4641E-08 8.6438E-09 4.8829E-10 3.9059E-10 - 2.5119E+03 9.8243E-09 5.7334E-09 3.3775E-10 2.5422E-10 - 2.8184E+03 6.6789E-09 3.8891E-09 2.1418E-10 1.5773E-10 - 3.1623E+03 4.5932E-09 2.7146E-09 1.4257E-10 1.0490E-10 - 3.5481E+03 2.9985E-09 1.7581E-09 9.6532E-11 6.7099E-11 - 3.9811E+03 2.0225E-09 1.1540E-09 6.3561E-11 4.3894E-11 - 4.4668E+03 1.3425E-09 7.7600E-10 4.0699E-11 2.9451E-11 - 5.0119E+03 8.8973E-10 5.1395E-10 2.6292E-11 2.1058E-11 - 5.6234E+03 6.0272E-10 3.3489E-10 1.7480E-11 1.4375E-11 - 6.3096E+03 3.9782E-10 2.2387E-10 1.1154E-11 8.0440E-12 - 7.0795E+03 2.6277E-10 1.4416E-10 7.3231E-12 5.4327E-12 - 7.9433E+03 1.7322E-10 9.5061E-11 5.0279E-12 3.6477E-12 - 8.9125E+03 1.1518E-10 6.3178E-11 3.1680E-12 2.4430E-12 - 1.0000E+04 7.7003E-11 4.1377E-11 2.1052E-12 1.5738E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.1029E+03 6.1908E+03 2.9172E+03 2.9730E+03 - 1.1220E-01 5.4589E+03 5.5174E+03 2.6351E+03 2.6467E+03 - 1.2589E-01 4.8418E+03 4.8666E+03 2.3528E+03 2.3195E+03 - 1.4125E-01 4.2724E+03 4.2914E+03 2.0857E+03 2.0308E+03 - 1.5849E-01 3.7444E+03 3.7799E+03 1.8176E+03 1.7667E+03 - 1.7783E-01 3.2570E+03 3.2795E+03 1.5716E+03 1.5226E+03 - 1.9953E-01 2.8149E+03 2.8184E+03 1.3549E+03 1.3107E+03 - 2.2387E-01 2.4100E+03 2.4010E+03 1.1558E+03 1.1117E+03 - 2.5119E-01 2.0305E+03 2.0258E+03 9.8418E+02 9.3499E+02 - 2.8184E-01 1.6919E+03 1.6909E+03 8.3133E+02 7.8613E+02 - 3.1623E-01 1.4027E+03 1.3952E+03 6.9817E+02 6.4917E+02 - 3.5481E-01 1.1659E+03 1.1468E+03 5.8149E+02 5.2751E+02 - 3.9811E-01 9.5626E+02 9.3527E+02 4.7342E+02 4.2574E+02 - 4.4668E-01 7.6714E+02 7.5764E+02 3.8502E+02 3.4409E+02 - 5.0119E-01 6.1533E+02 6.0950E+02 3.1252E+02 2.7586E+02 - 5.6234E-01 4.9241E+02 4.8210E+02 2.4809E+02 2.1816E+02 - 6.3096E-01 3.9309E+02 3.7835E+02 1.9661E+02 1.7175E+02 - 7.0795E-01 3.0960E+02 2.9781E+02 1.5499E+02 1.3335E+02 - 7.9433E-01 2.3961E+02 2.3305E+02 1.2108E+02 1.0307E+02 - 8.9125E-01 1.8514E+02 1.8001E+02 9.4537E+01 7.8819E+01 - 1.0000E+00 1.4365E+02 1.3812E+02 7.2332E+01 6.0279E+01 - 1.1220E+00 1.1131E+02 1.0515E+02 5.4935E+01 4.5584E+01 - 1.2589E+00 8.4668E+01 7.9040E+01 4.1594E+01 3.4013E+01 - 1.4125E+00 6.4067E+01 5.9831E+01 3.1255E+01 2.4934E+01 - 1.5849E+00 4.8585E+01 4.5355E+01 2.3197E+01 1.8293E+01 - 1.7783E+00 3.6312E+01 3.3563E+01 1.6949E+01 1.3536E+01 - 1.9953E+00 2.7047E+01 2.4506E+01 1.2402E+01 9.8840E+00 - 2.2387E+00 1.9969E+01 1.7949E+01 9.0501E+00 7.1393E+00 - 2.5119E+00 1.4545E+01 1.3156E+01 6.4876E+00 5.0457E+00 - 2.8184E+00 1.0691E+01 9.5926E+00 4.6062E+00 3.5306E+00 - 3.1623E+00 7.8172E+00 6.9040E+00 3.2654E+00 2.4924E+00 - 3.5481E+00 5.7077E+00 4.9718E+00 2.3119E+00 1.7677E+00 - 3.9811E+00 4.1386E+00 3.5781E+00 1.6132E+00 1.2254E+00 - 4.4668E+00 2.9907E+00 2.5682E+00 1.1170E+00 8.4431E-01 - 5.0119E+00 2.1594E+00 1.8383E+00 7.6313E-01 5.8491E-01 - 5.6234E+00 1.5576E+00 1.3154E+00 5.3476E-01 3.9927E-01 - 6.3096E+00 1.1212E+00 9.3939E-01 3.6651E-01 2.7352E-01 - 7.0795E+00 7.9990E-01 6.6449E-01 2.4733E-01 1.8575E-01 - 7.9433E+00 5.7600E-01 4.7191E-01 1.6643E-01 1.2589E-01 - 8.9125E+00 4.1719E-01 3.3262E-01 1.1191E-01 8.4818E-02 - 1.0000E+01 2.9345E-01 2.3582E-01 7.6834E-02 5.6910E-02 - 1.1220E+01 2.0893E-01 1.6614E-01 5.1737E-02 3.8563E-02 - 1.2589E+01 1.4815E-01 1.1855E-01 3.4737E-02 2.6094E-02 - 1.4125E+01 1.0615E-01 8.3959E-02 2.2943E-02 1.7715E-02 - 1.5849E+01 7.5991E-02 5.8953E-02 1.5419E-02 1.2006E-02 - 1.7783E+01 5.3988E-02 4.1881E-02 1.0446E-02 7.9045E-03 - 1.9953E+01 3.8085E-02 2.9825E-02 6.8344E-03 5.1780E-03 - 2.2387E+01 2.6781E-02 2.0706E-02 4.5581E-03 3.4857E-03 - 2.5119E+01 1.9144E-02 1.4511E-02 3.0995E-03 2.2379E-03 - 2.8184E+01 1.3643E-02 1.0467E-02 2.0605E-03 1.4648E-03 - 3.1623E+01 9.8123E-03 7.3904E-03 1.3448E-03 1.0447E-03 - 3.5481E+01 6.9562E-03 5.2101E-03 8.9114E-04 7.0034E-04 - 3.9811E+01 4.9485E-03 3.6704E-03 5.9013E-04 4.5999E-04 - 4.4668E+01 3.5216E-03 2.5931E-03 3.9389E-04 3.0585E-04 - 5.0119E+01 2.4836E-03 1.8261E-03 2.6278E-04 2.0473E-04 - 5.6234E+01 1.7543E-03 1.2849E-03 1.7280E-04 1.3892E-04 - 6.3096E+01 1.2405E-03 9.0367E-04 1.1580E-04 9.2356E-05 - 7.0795E+01 8.7447E-04 6.3587E-04 7.7867E-05 6.0869E-05 - 7.9433E+01 6.1363E-04 4.4600E-04 5.2484E-05 4.1268E-05 - 8.9125E+01 4.3359E-04 3.0994E-04 3.5054E-05 2.7983E-05 - 1.0000E+02 3.0631E-04 2.1561E-04 2.2944E-05 1.8582E-05 - 1.1220E+02 2.1449E-04 1.5055E-04 1.5220E-05 1.2452E-05 - 1.2589E+02 1.4989E-04 1.0514E-04 1.0221E-05 8.2879E-06 - 1.4125E+02 1.0528E-04 7.3357E-05 6.8225E-06 5.6316E-06 - 1.5849E+02 7.3920E-05 5.0727E-05 4.6571E-06 3.7433E-06 - 1.7783E+02 5.1751E-05 3.5132E-05 3.1512E-06 2.5070E-06 - 1.9953E+02 3.6023E-05 2.4535E-05 2.1004E-06 1.7129E-06 - 2.2387E+02 2.5076E-05 1.7160E-05 1.3964E-06 1.1540E-06 - 2.5119E+02 1.7660E-05 1.1806E-05 9.0851E-07 7.7148E-07 - 2.8184E+02 1.2352E-05 8.1641E-06 6.5184E-07 5.0105E-07 - 3.1623E+02 8.5747E-06 5.6664E-06 4.4082E-07 3.4643E-07 - 3.5481E+02 5.9350E-06 3.9113E-06 2.9309E-07 2.3487E-07 - 3.9811E+02 4.1459E-06 2.6941E-06 1.9657E-07 1.5627E-07 - 4.4668E+02 2.8904E-06 1.8584E-06 1.3415E-07 1.0491E-07 - 5.0119E+02 2.0061E-06 1.2841E-06 8.9828E-08 7.1156E-08 - 5.6234E+02 1.3991E-06 8.8811E-07 6.0697E-08 4.7777E-08 - 6.3096E+02 9.6516E-07 6.1022E-07 4.0806E-08 3.1805E-08 - 7.0795E+02 6.6904E-07 4.1872E-07 2.7263E-08 2.1049E-08 - 7.9433E+02 4.6265E-07 2.8714E-07 1.7965E-08 1.4262E-08 - 8.9125E+02 3.1764E-07 1.9646E-07 1.2191E-08 9.6427E-09 - 1.0000E+03 2.1999E-07 1.3490E-07 8.0716E-09 6.4050E-09 - 1.1220E+03 1.5003E-07 9.1306E-08 5.3779E-09 4.2029E-09 - 1.2589E+03 1.0195E-07 6.2277E-08 3.6309E-09 2.8358E-09 - 1.4125E+03 6.9123E-08 4.2092E-08 2.4696E-09 1.9778E-09 - 1.5849E+03 4.6974E-08 2.8458E-08 1.6690E-09 1.3239E-09 - 1.7783E+03 3.2126E-08 1.9318E-08 1.0951E-09 8.4156E-10 - 1.9953E+03 2.1867E-08 1.2931E-08 7.2000E-10 5.4077E-10 - 2.2387E+03 1.4757E-08 8.7188E-09 4.8462E-10 3.6375E-10 - 2.5119E+03 9.9655E-09 5.8148E-09 3.2161E-10 2.4147E-10 - 2.8184E+03 6.7367E-09 3.8187E-09 2.1855E-10 1.5914E-10 - 3.1623E+03 4.6289E-09 2.6852E-09 1.4086E-10 1.1505E-10 - 3.5481E+03 3.0127E-09 1.7438E-09 9.5878E-11 7.2869E-11 - 3.9811E+03 2.0204E-09 1.1526E-09 6.4752E-11 4.4368E-11 - 4.4668E+03 1.3561E-09 7.6884E-10 4.1727E-11 2.8467E-11 - 5.0119E+03 8.9647E-10 5.0523E-10 2.7303E-11 1.9637E-11 - 5.6234E+03 5.8512E-10 3.2821E-10 1.6999E-11 1.3086E-11 - 6.3096E+03 3.9286E-10 2.2021E-10 1.1775E-11 8.0684E-12 - 7.0795E+03 2.6226E-10 1.4781E-10 7.7677E-12 5.3794E-12 - 7.9433E+03 1.7396E-10 9.8584E-11 5.2127E-12 3.1576E-12 - 8.9125E+03 1.1400E-10 6.4919E-11 3.3392E-12 2.0633E-12 - 1.0000E+04 7.4936E-11 4.1785E-11 2.0314E-12 1.5936E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.1183E+03 6.1919E+03 2.9465E+03 3.0102E+03 - 1.1220E-01 5.5011E+03 5.5434E+03 2.6558E+03 2.6805E+03 - 1.2589E-01 4.9003E+03 4.9263E+03 2.3613E+03 2.3594E+03 - 1.4125E-01 4.3433E+03 4.3442E+03 2.0829E+03 2.0567E+03 - 1.5849E-01 3.8110E+03 3.8037E+03 1.8258E+03 1.7947E+03 - 1.7783E-01 3.3016E+03 3.3067E+03 1.5924E+03 1.5561E+03 - 1.9953E-01 2.8433E+03 2.8417E+03 1.3809E+03 1.3242E+03 - 2.2387E-01 2.4340E+03 2.4038E+03 1.1788E+03 1.1202E+03 - 2.5119E-01 2.0540E+03 2.0189E+03 9.9688E+02 9.4481E+02 - 2.8184E-01 1.7144E+03 1.6955E+03 8.4501E+02 7.8650E+02 - 3.1623E-01 1.4261E+03 1.4093E+03 7.1383E+02 6.5281E+02 - 3.5481E-01 1.1771E+03 1.1611E+03 5.9146E+02 5.3393E+02 - 3.9811E-01 9.6689E+02 9.4968E+02 4.8264E+02 4.3000E+02 - 4.4668E-01 7.8307E+02 7.6340E+02 3.9209E+02 3.4817E+02 - 5.0119E-01 6.2760E+02 6.0996E+02 3.1625E+02 2.7744E+02 - 5.6234E-01 4.9996E+02 4.8791E+02 2.5400E+02 2.1977E+02 - 6.3096E-01 3.9634E+02 3.8834E+02 2.0179E+02 1.7331E+02 - 7.0795E-01 3.1087E+02 3.0331E+02 1.5699E+02 1.3542E+02 - 7.9433E-01 2.4336E+02 2.3365E+02 1.2168E+02 1.0461E+02 - 8.9125E-01 1.8943E+02 1.7972E+02 9.3791E+01 7.9358E+01 - 1.0000E+00 1.4457E+02 1.3878E+02 7.2694E+01 6.0117E+01 - 1.1220E+00 1.1061E+02 1.0554E+02 5.5914E+01 4.5108E+01 - 1.2589E+00 8.4748E+01 7.9861E+01 4.2053E+01 3.3684E+01 - 1.4125E+00 6.3992E+01 6.0180E+01 3.1211E+01 2.4890E+01 - 1.5849E+00 4.8152E+01 4.4986E+01 2.3019E+01 1.8500E+01 - 1.7783E+00 3.6106E+01 3.3289E+01 1.6810E+01 1.3580E+01 - 1.9953E+00 2.6823E+01 2.4519E+01 1.2245E+01 9.6835E+00 - 2.2387E+00 1.9919E+01 1.7916E+01 8.8705E+00 6.9684E+00 - 2.5119E+00 1.4549E+01 1.2934E+01 6.4753E+00 5.0489E+00 - 2.8184E+00 1.0655E+01 9.4268E+00 4.6212E+00 3.4846E+00 - 3.1623E+00 7.8191E+00 6.8785E+00 3.2483E+00 2.4618E+00 - 3.5481E+00 5.6617E+00 4.9276E+00 2.2827E+00 1.7305E+00 - 3.9811E+00 4.0941E+00 3.5432E+00 1.5957E+00 1.2188E+00 - 4.4668E+00 2.9622E+00 2.5642E+00 1.1027E+00 8.4601E-01 - 5.0119E+00 2.1394E+00 1.8382E+00 7.5598E-01 5.7970E-01 - 5.6234E+00 1.5351E+00 1.3104E+00 5.2027E-01 3.9530E-01 - 6.3096E+00 1.1016E+00 9.2244E-01 3.6188E-01 2.7028E-01 - 7.0795E+00 7.8829E-01 6.4961E-01 2.4767E-01 1.8206E-01 - 7.9433E+00 5.6789E-01 4.6339E-01 1.6770E-01 1.2195E-01 - 8.9125E+00 4.0825E-01 3.2916E-01 1.1138E-01 8.3084E-02 - 1.0000E+01 2.9332E-01 2.3517E-01 7.6203E-02 5.7560E-02 - 1.1220E+01 2.0860E-01 1.6613E-01 5.0717E-02 3.8951E-02 - 1.2589E+01 1.4907E-01 1.1776E-01 3.4142E-02 2.6178E-02 - 1.4125E+01 1.0648E-01 8.3834E-02 2.3280E-02 1.7283E-02 - 1.5849E+01 7.5125E-02 5.9494E-02 1.5459E-02 1.1712E-02 - 1.7783E+01 5.3665E-02 4.2188E-02 1.0342E-02 8.0117E-03 - 1.9953E+01 3.8598E-02 2.9794E-02 6.8957E-03 5.2883E-03 - 2.2387E+01 2.7409E-02 2.1064E-02 4.5284E-03 3.4410E-03 - 2.5119E+01 1.9404E-02 1.4847E-02 3.0289E-03 2.2927E-03 - 2.8184E+01 1.3813E-02 1.0445E-02 2.0343E-03 1.5440E-03 - 3.1623E+01 9.7954E-03 7.3850E-03 1.3344E-03 1.0368E-03 - 3.5481E+01 6.9529E-03 5.2156E-03 8.8181E-04 6.9237E-04 - 3.9811E+01 4.9441E-03 3.6657E-03 5.8809E-04 4.6514E-04 - 4.4668E+01 3.5060E-03 2.5882E-03 3.9294E-04 3.0970E-04 - 5.0119E+01 2.4742E-03 1.8236E-03 2.6002E-04 2.0421E-04 - 5.6234E+01 1.7497E-03 1.2696E-03 1.7088E-04 1.3635E-04 - 6.3096E+01 1.2381E-03 8.8873E-04 1.1654E-04 9.2424E-05 - 7.0795E+01 8.7238E-04 6.2648E-04 7.7707E-05 6.1264E-05 - 7.9433E+01 6.1326E-04 4.3837E-04 5.0540E-05 4.0353E-05 - 8.9125E+01 4.3100E-04 3.0618E-04 3.3958E-05 2.7430E-05 - 1.0000E+02 3.0415E-04 2.1571E-04 2.2987E-05 1.8514E-05 - 1.1220E+02 2.1340E-04 1.5003E-04 1.5161E-05 1.2392E-05 - 1.2589E+02 1.4980E-04 1.0506E-04 1.0234E-05 8.3726E-06 - 1.4125E+02 1.0512E-04 7.3252E-05 6.9987E-06 5.6757E-06 - 1.5849E+02 7.3636E-05 5.0785E-05 4.6769E-06 3.8059E-06 - 1.7783E+02 5.1434E-05 3.5326E-05 3.1366E-06 2.5471E-06 - 1.9953E+02 3.6143E-05 2.4482E-05 2.0449E-06 1.7155E-06 - 2.2387E+02 2.5372E-05 1.6990E-05 1.3600E-06 1.1490E-06 - 2.5119E+02 1.7714E-05 1.1805E-05 9.3939E-07 7.6397E-07 - 2.8184E+02 1.2248E-05 8.1138E-06 6.5566E-07 5.1106E-07 - 3.1623E+02 8.5704E-06 5.6585E-06 4.2858E-07 3.4492E-07 - 3.5481E+02 5.9410E-06 3.9276E-06 2.8871E-07 2.3460E-07 - 3.9811E+02 4.1472E-06 2.7115E-06 1.9813E-07 1.5692E-07 - 4.4668E+02 2.8938E-06 1.8677E-06 1.3380E-07 1.0583E-07 - 5.0119E+02 2.0071E-06 1.2879E-06 8.9141E-08 7.1063E-08 - 5.6234E+02 1.3984E-06 8.8567E-07 6.1164E-08 4.8143E-08 - 6.3096E+02 9.6463E-07 6.0925E-07 4.1119E-08 3.2386E-08 - 7.0795E+02 6.6547E-07 4.1762E-07 2.7448E-08 2.1174E-08 - 7.9433E+02 4.6040E-07 2.8685E-07 1.8151E-08 1.4133E-08 - 8.9125E+02 3.1560E-07 1.9522E-07 1.2067E-08 9.9127E-09 - 1.0000E+03 2.1805E-07 1.3336E-07 8.2598E-09 6.4796E-09 - 1.1220E+03 1.4915E-07 9.0397E-08 5.4467E-09 4.3397E-09 - 1.2589E+03 1.0177E-07 6.1835E-08 3.7700E-09 2.8474E-09 - 1.4125E+03 6.9302E-08 4.2390E-08 2.4327E-09 1.8710E-09 - 1.5849E+03 4.7451E-08 2.8381E-08 1.5828E-09 1.2507E-09 - 1.7783E+03 3.2223E-08 1.9072E-08 1.0936E-09 7.8308E-10 - 1.9953E+03 2.1818E-08 1.3015E-08 7.4186E-10 5.4649E-10 - 2.2387E+03 1.4802E-08 8.6660E-09 4.8755E-10 3.4088E-10 - 2.5119E+03 1.0053E-08 5.8007E-09 3.0608E-10 2.4235E-10 - 2.8184E+03 6.7379E-09 3.8778E-09 1.9784E-10 1.7592E-10 - 3.1623E+03 4.6664E-09 2.6844E-09 1.4172E-10 1.0419E-10 - 3.5481E+03 3.0080E-09 1.7373E-09 9.1225E-11 6.8238E-11 - 3.9811E+03 1.9983E-09 1.1574E-09 6.1796E-11 4.5830E-11 - 4.4668E+03 1.3434E-09 7.6566E-10 4.2905E-11 3.1373E-11 - 5.0119E+03 8.9177E-10 5.1409E-10 2.7455E-11 1.9020E-11 - 5.6234E+03 5.8598E-10 3.3497E-10 1.7445E-11 1.2421E-11 - 6.3096E+03 3.9194E-10 2.2342E-10 1.1810E-11 8.4889E-12 - 7.0795E+03 2.5884E-10 1.4812E-10 7.6878E-12 5.8659E-12 - 7.9433E+03 1.6872E-10 9.5549E-11 4.8167E-12 3.4550E-12 - 8.9125E+03 1.1333E-10 6.2048E-11 3.2672E-12 2.2044E-12 - 1.0000E+04 7.5859E-11 4.0694E-11 2.2374E-12 1.5452E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.7758E+03 6.8839E+03 3.2689E+03 3.2756E+03 - 1.1220E-01 6.0411E+03 6.1402E+03 2.9323E+03 2.9130E+03 - 1.2589E-01 5.3852E+03 5.4601E+03 2.5963E+03 2.5699E+03 - 1.4125E-01 4.7623E+03 4.8071E+03 2.2998E+03 2.2462E+03 - 1.5849E-01 4.1668E+03 4.2072E+03 2.0248E+03 1.9479E+03 - 1.7783E-01 3.6265E+03 3.6485E+03 1.7566E+03 1.6837E+03 - 1.9953E-01 3.1241E+03 3.1180E+03 1.5188E+03 1.4357E+03 - 2.2387E-01 2.6545E+03 2.6520E+03 1.3054E+03 1.2175E+03 - 2.5119E-01 2.2349E+03 2.2251E+03 1.1067E+03 1.0238E+03 - 2.8184E-01 1.8631E+03 1.8518E+03 9.2946E+02 8.4533E+02 - 3.1623E-01 1.5453E+03 1.5399E+03 7.7167E+02 6.9561E+02 - 3.5481E-01 1.2693E+03 1.2595E+03 6.3655E+02 5.6889E+02 - 3.9811E-01 1.0255E+03 1.0229E+03 5.2065E+02 4.6463E+02 - 4.4668E-01 8.2740E+02 8.2487E+02 4.2024E+02 3.7451E+02 - 5.0119E-01 6.7096E+02 6.5844E+02 3.3764E+02 2.9623E+02 - 5.6234E-01 5.2818E+02 5.1957E+02 2.6911E+02 2.3290E+02 - 6.3096E-01 4.1425E+02 4.0649E+02 2.1317E+02 1.8126E+02 - 7.0795E-01 3.2652E+02 3.1600E+02 1.6758E+02 1.4072E+02 - 7.9433E-01 2.5383E+02 2.4343E+02 1.3014E+02 1.0824E+02 - 8.9125E-01 1.9582E+02 1.8664E+02 9.9562E+01 8.1819E+01 - 1.0000E+00 1.4990E+02 1.4330E+02 7.5757E+01 6.1989E+01 - 1.1220E+00 1.1486E+02 1.0931E+02 5.7204E+01 4.6416E+01 - 1.2589E+00 8.6642E+01 8.2168E+01 4.2704E+01 3.4698E+01 - 1.4125E+00 6.5051E+01 6.1327E+01 3.1832E+01 2.5491E+01 - 1.5849E+00 4.9244E+01 4.5599E+01 2.3618E+01 1.8701E+01 - 1.7783E+00 3.6905E+01 3.3699E+01 1.7559E+01 1.3573E+01 - 1.9953E+00 2.7117E+01 2.4936E+01 1.2870E+01 9.7935E+00 - 2.2387E+00 2.0028E+01 1.8362E+01 9.1524E+00 7.0302E+00 - 2.5119E+00 1.4747E+01 1.3294E+01 6.5332E+00 4.9386E+00 - 2.8184E+00 1.0807E+01 9.5783E+00 4.6582E+00 3.5156E+00 - 3.1623E+00 7.8770E+00 6.9101E+00 3.2480E+00 2.5073E+00 - 3.5481E+00 5.7113E+00 4.9670E+00 2.2952E+00 1.7485E+00 - 3.9811E+00 4.1440E+00 3.5716E+00 1.6048E+00 1.2061E+00 - 4.4668E+00 2.9985E+00 2.5603E+00 1.1097E+00 8.4742E-01 - 5.0119E+00 2.1425E+00 1.8244E+00 7.6301E-01 5.8800E-01 - 5.6234E+00 1.5380E+00 1.2997E+00 5.2768E-01 3.9996E-01 - 6.3096E+00 1.1202E+00 9.2568E-01 3.6303E-01 2.7157E-01 - 7.0795E+00 8.0766E-01 6.5582E-01 2.4883E-01 1.8405E-01 - 7.9433E+00 5.7398E-01 4.6881E-01 1.6578E-01 1.2542E-01 - 8.9125E+00 4.1323E-01 3.3758E-01 1.0960E-01 8.5292E-02 - 1.0000E+01 2.9138E-01 2.3555E-01 7.6371E-02 5.7416E-02 - 1.1220E+01 2.0747E-01 1.6634E-01 5.1458E-02 3.8521E-02 - 1.2589E+01 1.4786E-01 1.1792E-01 3.4289E-02 2.6013E-02 - 1.4125E+01 1.0603E-01 8.3273E-02 2.3245E-02 1.7683E-02 - 1.5849E+01 7.6436E-02 5.8969E-02 1.5555E-02 1.1689E-02 - 1.7783E+01 5.4626E-02 4.1671E-02 1.0298E-02 7.6360E-03 - 1.9953E+01 3.8350E-02 2.9293E-02 6.9307E-03 5.1994E-03 - 2.2387E+01 2.7107E-02 2.0465E-02 4.5212E-03 3.4871E-03 - 2.5119E+01 1.9444E-02 1.4478E-02 3.0698E-03 2.3782E-03 - 2.8184E+01 1.3934E-02 1.0424E-02 2.0381E-03 1.5045E-03 - 3.1623E+01 9.8276E-03 7.3747E-03 1.3323E-03 1.0407E-03 - 3.5481E+01 6.9856E-03 5.2120E-03 8.9435E-04 6.9363E-04 - 3.9811E+01 4.9635E-03 3.6798E-03 5.9719E-04 4.6300E-04 - 4.4668E+01 3.5062E-03 2.5833E-03 3.9515E-04 3.1083E-04 - 5.0119E+01 2.4844E-03 1.8164E-03 2.6308E-04 2.0769E-04 - 5.6234E+01 1.7623E-03 1.2750E-03 1.7212E-04 1.3853E-04 - 6.3096E+01 1.2419E-03 8.9464E-04 1.1492E-04 9.1013E-05 - 7.0795E+01 8.7114E-04 6.2785E-04 7.7459E-05 6.0175E-05 - 7.9433E+01 6.1062E-04 4.4143E-04 5.1220E-05 4.0878E-05 - 8.9125E+01 4.3075E-04 3.1048E-04 3.4394E-05 2.7058E-05 - 1.0000E+02 3.0496E-04 2.1513E-04 2.3088E-05 1.8696E-05 - 1.1220E+02 2.1378E-04 1.5015E-04 1.5288E-05 1.2565E-05 - 1.2589E+02 1.4966E-04 1.0509E-04 1.0280E-05 8.3737E-06 - 1.4125E+02 1.0498E-04 7.3045E-05 6.8775E-06 5.5447E-06 - 1.5849E+02 7.3681E-05 5.0737E-05 4.5905E-06 3.7239E-06 - 1.7783E+02 5.1570E-05 3.5131E-05 3.0770E-06 2.4973E-06 - 1.9953E+02 3.6095E-05 2.4455E-05 2.1083E-06 1.6485E-06 - 2.2387E+02 2.5170E-05 1.7083E-05 1.4464E-06 1.1343E-06 - 2.5119E+02 1.7420E-05 1.1800E-05 9.4666E-07 7.9058E-07 - 2.8184E+02 1.2230E-05 8.1492E-06 6.0972E-07 5.2195E-07 - 3.1623E+02 8.5959E-06 5.6836E-06 4.2898E-07 3.4801E-07 - 3.5481E+02 5.9502E-06 3.9016E-06 2.9228E-07 2.3342E-07 - 3.9811E+02 4.1363E-06 2.6916E-06 1.9492E-07 1.5646E-07 - 4.4668E+02 2.8891E-06 1.8642E-06 1.3273E-07 1.0547E-07 - 5.0119E+02 2.0061E-06 1.2806E-06 9.1894E-08 7.2081E-08 - 5.6234E+02 1.3952E-06 8.8479E-07 6.1068E-08 4.7793E-08 - 6.3096E+02 9.6030E-07 6.0668E-07 4.0975E-08 3.1756E-08 - 7.0795E+02 6.6138E-07 4.1726E-07 2.7701E-08 2.1619E-08 - 7.9433E+02 4.5896E-07 2.8661E-07 1.8537E-08 1.4669E-08 - 8.9125E+02 3.1757E-07 1.9602E-07 1.2260E-08 9.4520E-09 - 1.0000E+03 2.1949E-07 1.3388E-07 8.2590E-09 6.3347E-09 - 1.1220E+03 1.4938E-07 9.0329E-08 5.5717E-09 4.2807E-09 - 1.2589E+03 1.0256E-07 6.1255E-08 3.7339E-09 2.8295E-09 - 1.4125E+03 6.9794E-08 4.1909E-08 2.4475E-09 1.9103E-09 - 1.5849E+03 4.7351E-08 2.8683E-08 1.6507E-09 1.2336E-09 - 1.7783E+03 3.2283E-08 1.9296E-08 1.0267E-09 8.0446E-10 - 1.9953E+03 2.1931E-08 1.3006E-08 7.1908E-10 5.5358E-10 - 2.2387E+03 1.4799E-08 8.7306E-09 5.1077E-10 3.8182E-10 - 2.5119E+03 9.8960E-09 5.8162E-09 3.3836E-10 2.6260E-10 - 2.8184E+03 6.6442E-09 3.9298E-09 2.2507E-10 1.6904E-10 - 3.1623E+03 4.6118E-09 2.6690E-09 1.4393E-10 1.0499E-10 - 3.5481E+03 3.0132E-09 1.7214E-09 9.3704E-11 6.8176E-11 - 3.9811E+03 2.0243E-09 1.1492E-09 6.3290E-11 4.2155E-11 - 4.4668E+03 1.3434E-09 7.6351E-10 4.0420E-11 2.9335E-11 - 5.0119E+03 8.8873E-10 5.0337E-10 2.6003E-11 2.1002E-11 - 5.6234E+03 5.8431E-10 3.3315E-10 1.7022E-11 1.3845E-11 - 6.3096E+03 3.9115E-10 2.2397E-10 1.1901E-11 8.6616E-12 - 7.0795E+03 2.5731E-10 1.4770E-10 7.8104E-12 5.6771E-12 - 7.9433E+03 1.7383E-10 9.6988E-11 4.8064E-12 3.2249E-12 - 8.9125E+03 1.1624E-10 6.2745E-11 2.8169E-12 1.8209E-12 - 1.0000E+04 7.4484E-11 3.9588E-11 1.7262E-12 1.4512E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.4084E+03 6.4872E+03 3.0729E+03 3.1280E+03 - 1.1220E-01 5.7101E+03 5.7573E+03 2.7436E+03 2.7795E+03 - 1.2589E-01 5.0704E+03 5.0878E+03 2.4345E+03 2.4383E+03 - 1.4125E-01 4.4733E+03 4.4934E+03 2.1412E+03 2.1336E+03 - 1.5849E-01 3.9101E+03 3.9323E+03 1.8801E+03 1.8374E+03 - 1.7783E-01 3.3894E+03 3.3902E+03 1.6337E+03 1.5753E+03 - 1.9953E-01 2.9123E+03 2.8990E+03 1.4073E+03 1.3556E+03 - 2.2387E-01 2.4715E+03 2.4605E+03 1.2024E+03 1.1437E+03 - 2.5119E-01 2.0775E+03 2.0681E+03 1.0205E+03 9.5465E+02 - 2.8184E-01 1.7399E+03 1.7192E+03 8.6161E+02 7.9480E+02 - 3.1623E-01 1.4435E+03 1.4211E+03 7.1377E+02 6.5317E+02 - 3.5481E-01 1.1843E+03 1.1671E+03 5.8692E+02 5.3346E+02 - 3.9811E-01 9.6398E+02 9.4981E+02 4.8413E+02 4.3078E+02 - 4.4668E-01 7.7440E+02 7.6871E+02 3.9343E+02 3.5062E+02 - 5.0119E-01 6.1928E+02 6.1677E+02 3.1681E+02 2.8037E+02 - 5.6234E-01 4.9816E+02 4.8664E+02 2.5263E+02 2.1932E+02 - 6.3096E-01 3.9461E+02 3.8079E+02 1.9852E+02 1.7274E+02 - 7.0795E-01 3.0958E+02 2.9987E+02 1.5710E+02 1.3426E+02 - 7.9433E-01 2.4142E+02 2.3585E+02 1.2292E+02 1.0364E+02 - 8.9125E-01 1.8735E+02 1.8099E+02 9.5296E+01 7.8677E+01 - 1.0000E+00 1.4410E+02 1.3899E+02 7.2210E+01 5.9681E+01 - 1.1220E+00 1.1034E+02 1.0571E+02 5.5078E+01 4.4735E+01 - 1.2589E+00 8.4918E+01 7.9943E+01 4.1722E+01 3.3486E+01 - 1.4125E+00 6.4514E+01 6.0178E+01 3.1058E+01 2.5109E+01 - 1.5849E+00 4.8434E+01 4.5016E+01 2.2879E+01 1.8436E+01 - 1.7783E+00 3.6334E+01 3.3416E+01 1.6858E+01 1.3361E+01 - 1.9953E+00 2.6951E+01 2.4495E+01 1.2375E+01 9.8156E+00 - 2.2387E+00 1.9918E+01 1.7853E+01 8.9198E+00 7.0245E+00 - 2.5119E+00 1.4756E+01 1.2957E+01 6.4301E+00 4.9128E+00 - 2.8184E+00 1.0816E+01 9.4910E+00 4.5819E+00 3.4984E+00 - 3.1623E+00 7.8115E+00 6.9034E+00 3.2387E+00 2.4827E+00 - 3.5481E+00 5.6326E+00 4.9748E+00 2.2952E+00 1.7568E+00 - 3.9811E+00 4.0930E+00 3.5859E+00 1.6004E+00 1.2255E+00 - 4.4668E+00 2.9997E+00 2.5790E+00 1.1102E+00 8.5435E-01 - 5.0119E+00 2.1854E+00 1.8225E+00 7.6792E-01 5.8585E-01 - 5.6234E+00 1.5624E+00 1.2883E+00 5.2897E-01 3.9686E-01 - 6.3096E+00 1.1107E+00 9.2545E-01 3.6527E-01 2.7232E-01 - 7.0795E+00 8.0248E-01 6.6141E-01 2.5220E-01 1.8415E-01 - 7.9433E+00 5.7598E-01 4.7206E-01 1.7229E-01 1.2478E-01 - 8.9125E+00 4.1239E-01 3.3694E-01 1.1467E-01 8.5374E-02 - 1.0000E+01 2.9330E-01 2.3695E-01 7.6794E-02 5.8161E-02 - 1.1220E+01 2.0937E-01 1.6853E-01 5.1117E-02 3.8680E-02 - 1.2589E+01 1.4924E-01 1.1870E-01 3.4521E-02 2.6178E-02 - 1.4125E+01 1.0596E-01 8.3772E-02 2.3421E-02 1.7499E-02 - 1.5849E+01 7.5342E-02 5.9357E-02 1.5550E-02 1.1506E-02 - 1.7783E+01 5.3345E-02 4.2030E-02 1.0438E-02 7.6476E-03 - 1.9953E+01 3.8116E-02 2.9680E-02 6.9122E-03 5.0794E-03 - 2.2387E+01 2.7625E-02 2.0908E-02 4.5426E-03 3.3447E-03 - 2.5119E+01 1.9533E-02 1.4812E-02 3.0318E-03 2.2557E-03 - 2.8184E+01 1.3934E-02 1.0520E-02 2.0870E-03 1.5295E-03 - 3.1623E+01 9.8560E-03 7.4254E-03 1.3346E-03 1.0391E-03 - 3.5481E+01 7.0040E-03 5.2340E-03 8.8141E-04 6.9957E-04 - 3.9811E+01 4.9705E-03 3.6782E-03 5.8966E-04 4.6344E-04 - 4.4668E+01 3.5106E-03 2.5847E-03 3.9670E-04 3.1026E-04 - 5.0119E+01 2.4815E-03 1.8226E-03 2.6397E-04 2.0896E-04 - 5.6234E+01 1.7657E-03 1.2854E-03 1.7374E-04 1.3914E-04 - 6.3096E+01 1.2446E-03 9.0519E-04 1.1505E-04 9.2947E-05 - 7.0795E+01 8.7653E-04 6.3224E-04 7.6823E-05 6.1782E-05 - 7.9433E+01 6.1885E-04 4.4333E-04 5.0725E-05 4.1088E-05 - 8.9125E+01 4.3524E-04 3.1202E-04 3.4259E-05 2.7800E-05 - 1.0000E+02 3.0525E-04 2.1660E-04 2.2782E-05 1.8724E-05 - 1.1220E+02 2.1424E-04 1.5097E-04 1.5245E-05 1.2413E-05 - 1.2589E+02 1.5019E-04 1.0500E-04 1.0255E-05 8.2194E-06 - 1.4125E+02 1.0542E-04 7.3042E-05 6.9806E-06 5.5031E-06 - 1.5849E+02 7.3862E-05 5.0481E-05 4.6211E-06 3.7112E-06 - 1.7783E+02 5.1631E-05 3.5087E-05 3.0329E-06 2.5145E-06 - 1.9953E+02 3.6061E-05 2.4540E-05 2.0162E-06 1.6897E-06 - 2.2387E+02 2.5152E-05 1.6992E-05 1.3611E-06 1.1198E-06 - 2.5119E+02 1.7512E-05 1.1765E-05 9.0921E-07 7.5359E-07 - 2.8184E+02 1.2242E-05 8.1810E-06 6.2479E-07 5.1867E-07 - 3.1623E+02 8.6080E-06 5.6815E-06 4.2716E-07 3.5271E-07 - 3.5481E+02 5.9797E-06 3.9387E-06 2.8578E-07 2.3648E-07 - 3.9811E+02 4.1574E-06 2.7083E-06 1.9545E-07 1.5650E-07 - 4.4668E+02 2.8968E-06 1.8486E-06 1.3544E-07 1.0739E-07 - 5.0119E+02 2.0034E-06 1.2827E-06 9.0808E-08 7.3404E-08 - 5.6234E+02 1.4050E-06 8.9407E-07 5.9296E-08 4.8060E-08 - 6.3096E+02 9.6498E-07 6.1045E-07 3.9716E-08 3.2156E-08 - 7.0795E+02 6.6778E-07 4.1731E-07 2.7185E-08 2.1570E-08 - 7.9433E+02 4.6009E-07 2.8554E-07 1.8708E-08 1.4540E-08 - 8.9125E+02 3.1508E-07 1.9497E-07 1.2391E-08 9.6468E-09 - 1.0000E+03 2.1803E-07 1.3445E-07 8.2172E-09 6.5489E-09 - 1.1220E+03 1.5048E-07 9.1781E-08 5.6155E-09 4.1406E-09 - 1.2589E+03 1.0285E-07 6.2410E-08 3.8671E-09 2.7639E-09 - 1.4125E+03 6.9680E-08 4.1957E-08 2.5603E-09 2.0021E-09 - 1.5849E+03 4.7364E-08 2.8548E-08 1.6593E-09 1.3825E-09 - 1.7783E+03 3.2053E-08 1.9134E-08 1.0998E-09 8.7171E-10 - 1.9953E+03 2.1862E-08 1.2910E-08 7.5226E-10 5.4322E-10 - 2.2387E+03 1.4750E-08 8.7430E-09 4.8225E-10 3.8162E-10 - 2.5119E+03 9.9076E-09 5.8988E-09 3.1344E-10 2.5676E-10 - 2.8184E+03 6.6734E-09 3.9288E-09 2.0420E-10 1.5446E-10 - 3.1623E+03 4.6331E-09 2.6522E-09 1.4062E-10 1.0350E-10 - 3.5481E+03 3.0236E-09 1.7170E-09 9.5384E-11 6.9914E-11 - 3.9811E+03 2.0244E-09 1.1397E-09 6.3058E-11 4.3373E-11 - 4.4668E+03 1.3420E-09 7.6764E-10 4.1303E-11 2.9281E-11 - 5.0119E+03 8.8821E-10 5.1223E-10 2.6443E-11 2.0910E-11 - 5.6234E+03 5.9219E-10 3.3314E-10 1.7717E-11 1.3386E-11 - 6.3096E+03 3.9150E-10 2.1885E-10 1.1730E-11 8.6392E-12 - 7.0795E+03 2.5929E-10 1.4353E-10 7.4118E-12 5.6151E-12 - 7.9433E+03 1.7139E-10 9.3967E-11 5.0641E-12 3.3661E-12 - 8.9125E+03 1.1221E-10 6.2443E-11 3.3874E-12 2.2137E-12 - 1.0000E+04 7.4862E-11 4.2223E-11 2.2134E-12 1.4927E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.8249E+03 4.8711E+03 2.2650E+03 2.3686E+03 - 1.1220E-01 4.2782E+03 4.3175E+03 2.0375E+03 2.0889E+03 - 1.2589E-01 3.8013E+03 3.8051E+03 1.8019E+03 1.8380E+03 - 1.4125E-01 3.3590E+03 3.3465E+03 1.5847E+03 1.6095E+03 - 1.5849E-01 2.9307E+03 2.9077E+03 1.3851E+03 1.3960E+03 - 1.7783E-01 2.5410E+03 2.5020E+03 1.2003E+03 1.2000E+03 - 1.9953E-01 2.1765E+03 2.1529E+03 1.0299E+03 1.0156E+03 - 2.2387E-01 1.8505E+03 1.8304E+03 8.8474E+02 8.5881E+02 - 2.5119E-01 1.5639E+03 1.5419E+03 7.5870E+02 7.2505E+02 - 2.8184E-01 1.3091E+03 1.2954E+03 6.3655E+02 6.0601E+02 - 3.1623E-01 1.0909E+03 1.0772E+03 5.2737E+02 5.0073E+02 - 3.5481E-01 9.0470E+02 8.8823E+02 4.4010E+02 4.1213E+02 - 3.9811E-01 7.4036E+02 7.2778E+02 3.6306E+02 3.3831E+02 - 4.4668E-01 6.0267E+02 5.8880E+02 2.9977E+02 2.7552E+02 - 5.0119E-01 4.9432E+02 4.7887E+02 2.4278E+02 2.2349E+02 - 5.6234E-01 3.9837E+02 3.8716E+02 1.9549E+02 1.7983E+02 - 6.3096E-01 3.1690E+02 3.0925E+02 1.5695E+02 1.4147E+02 - 7.0795E-01 2.5450E+02 2.4625E+02 1.2269E+02 1.0987E+02 - 7.9433E-01 2.0036E+02 1.9286E+02 9.6761E+01 8.6663E+01 - 8.9125E-01 1.5696E+02 1.5171E+02 7.6758E+01 6.7422E+01 - 1.0000E+00 1.2413E+02 1.1889E+02 5.9928E+01 5.1487E+01 - 1.1220E+00 9.6198E+01 9.2159E+01 4.6132E+01 3.9435E+01 - 1.2589E+00 7.4196E+01 7.0805E+01 3.5481E+01 3.0069E+01 - 1.4125E+00 5.7396E+01 5.4302E+01 2.6979E+01 2.2687E+01 - 1.5849E+00 4.4088E+01 4.1153E+01 2.0470E+01 1.6888E+01 - 1.7783E+00 3.3458E+01 3.0870E+01 1.5274E+01 1.2344E+01 - 1.9953E+00 2.5268E+01 2.2951E+01 1.1323E+01 9.0872E+00 - 2.2387E+00 1.9031E+01 1.6975E+01 8.2783E+00 6.7780E+00 - 2.5119E+00 1.4027E+01 1.2614E+01 5.9642E+00 4.9013E+00 - 2.8184E+00 1.0296E+01 9.2467E+00 4.3074E+00 3.4032E+00 - 3.1623E+00 7.6038E+00 6.7124E+00 3.1153E+00 2.4190E+00 - 3.5481E+00 5.5985E+00 4.8822E+00 2.2104E+00 1.7013E+00 - 3.9811E+00 4.0786E+00 3.5208E+00 1.5621E+00 1.2046E+00 - 4.4668E+00 2.9598E+00 2.5257E+00 1.0920E+00 8.4345E-01 - 5.0119E+00 2.1309E+00 1.8048E+00 7.5392E-01 5.7771E-01 - 5.6234E+00 1.5367E+00 1.2924E+00 5.1400E-01 3.9480E-01 - 6.3096E+00 1.1111E+00 9.2745E-01 3.5468E-01 2.7320E-01 - 7.0795E+00 7.9289E-01 6.5624E-01 2.4535E-01 1.8402E-01 - 7.9433E+00 5.7566E-01 4.6644E-01 1.7232E-01 1.2506E-01 - 8.9125E+00 4.0833E-01 3.3298E-01 1.1501E-01 8.5643E-02 - 1.0000E+01 2.9254E-01 2.3674E-01 7.6326E-02 5.7797E-02 - 1.1220E+01 2.0876E-01 1.6686E-01 5.1868E-02 3.8740E-02 - 1.2589E+01 1.4910E-01 1.1633E-01 3.4768E-02 2.5726E-02 - 1.4125E+01 1.0654E-01 8.2847E-02 2.3343E-02 1.7192E-02 - 1.5849E+01 7.6006E-02 5.9496E-02 1.5598E-02 1.1772E-02 - 1.7783E+01 5.3755E-02 4.2018E-02 1.0338E-02 7.9645E-03 - 1.9953E+01 3.8170E-02 2.9693E-02 6.8729E-03 5.2921E-03 - 2.2387E+01 2.7290E-02 2.0950E-02 4.6191E-03 3.4598E-03 - 2.5119E+01 1.9678E-02 1.4862E-02 3.0964E-03 2.3473E-03 - 2.8184E+01 1.3952E-02 1.0410E-02 1.9781E-03 1.5788E-03 - 3.1623E+01 9.8568E-03 7.4033E-03 1.3488E-03 1.0515E-03 - 3.5481E+01 6.9870E-03 5.2248E-03 8.8944E-04 6.9843E-04 - 3.9811E+01 4.9596E-03 3.6929E-03 5.9285E-04 4.6608E-04 - 4.4668E+01 3.5152E-03 2.5868E-03 3.9727E-04 3.1181E-04 - 5.0119E+01 2.4832E-03 1.8163E-03 2.6370E-04 2.0789E-04 - 5.6234E+01 1.7630E-03 1.2767E-03 1.7274E-04 1.3769E-04 - 6.3096E+01 1.2439E-03 8.9568E-04 1.1513E-04 9.1857E-05 - 7.0795E+01 8.7466E-04 6.3212E-04 7.7258E-05 6.1403E-05 - 7.9433E+01 6.1808E-04 4.4255E-04 5.1837E-05 4.1459E-05 - 8.9125E+01 4.3516E-04 3.0713E-04 3.4444E-05 2.7922E-05 - 1.0000E+02 3.0564E-04 2.1533E-04 2.2854E-05 1.8392E-05 - 1.1220E+02 2.1429E-04 1.5046E-04 1.5355E-05 1.2241E-05 - 1.2589E+02 1.5028E-04 1.0523E-04 1.0292E-05 8.2183E-06 - 1.4125E+02 1.0538E-04 7.3197E-05 6.7694E-06 5.4331E-06 - 1.5849E+02 7.3661E-05 5.0984E-05 4.5505E-06 3.6644E-06 - 1.7783E+02 5.1672E-05 3.5489E-05 3.0798E-06 2.5589E-06 - 1.9953E+02 3.6154E-05 2.4494E-05 2.0704E-06 1.7145E-06 - 2.2387E+02 2.5371E-05 1.7002E-05 1.4097E-06 1.1517E-06 - 2.5119E+02 1.7727E-05 1.1790E-05 9.4792E-07 7.7460E-07 - 2.8184E+02 1.2359E-05 8.1651E-06 6.3383E-07 5.2055E-07 - 3.1623E+02 8.5784E-06 5.6775E-06 4.3184E-07 3.4190E-07 - 3.5481E+02 5.9661E-06 3.9094E-06 2.8976E-07 2.3198E-07 - 3.9811E+02 4.1548E-06 2.7017E-06 1.9528E-07 1.5455E-07 - 4.4668E+02 2.8776E-06 1.8547E-06 1.3359E-07 1.0494E-07 - 5.0119E+02 2.0014E-06 1.2846E-06 8.8174E-08 7.1036E-08 - 5.6234E+02 1.3928E-06 8.9535E-07 5.9765E-08 4.7410E-08 - 6.3096E+02 9.5961E-07 6.1275E-07 4.0819E-08 3.1265E-08 - 7.0795E+02 6.6276E-07 4.2078E-07 2.6891E-08 2.1098E-08 - 7.9433E+02 4.5767E-07 2.8735E-07 1.8203E-08 1.4107E-08 - 8.9125E+02 3.1673E-07 1.9510E-07 1.2511E-08 9.1721E-09 - 1.0000E+03 2.2047E-07 1.3501E-07 8.2699E-09 6.3563E-09 - 1.1220E+03 1.4970E-07 9.1336E-08 5.4753E-09 4.2195E-09 - 1.2589E+03 1.0219E-07 6.2375E-08 3.7417E-09 2.9325E-09 - 1.4125E+03 6.9418E-08 4.2087E-08 2.4705E-09 1.9070E-09 - 1.5849E+03 4.7431E-08 2.8417E-08 1.5900E-09 1.2410E-09 - 1.7783E+03 3.2400E-08 1.9139E-08 1.1037E-09 8.4213E-10 - 1.9953E+03 2.2087E-08 1.2878E-08 7.5903E-10 5.6586E-10 - 2.2387E+03 1.4932E-08 8.6691E-09 4.9944E-10 3.7341E-10 - 2.5119E+03 1.0042E-08 5.7738E-09 3.4556E-10 2.4751E-10 - 2.8184E+03 6.7529E-09 3.9241E-09 2.2122E-10 1.5692E-10 - 3.1623E+03 4.6526E-09 2.6864E-09 1.3936E-10 1.0544E-10 - 3.5481E+03 3.0315E-09 1.7318E-09 9.2769E-11 7.0289E-11 - 3.9811E+03 2.0269E-09 1.1459E-09 6.0985E-11 4.3572E-11 - 4.4668E+03 1.3327E-09 7.6778E-10 4.2308E-11 3.0193E-11 - 5.0119E+03 8.9025E-10 5.1193E-10 2.8410E-11 2.2030E-11 - 5.6234E+03 5.9156E-10 3.3658E-10 1.7942E-11 1.3640E-11 - 6.3096E+03 3.9155E-10 2.2138E-10 1.2186E-11 8.1733E-12 - 7.0795E+03 2.5908E-10 1.4303E-10 7.6463E-12 5.0805E-12 - 7.9433E+03 1.7134E-10 9.4880E-11 4.7668E-12 3.4947E-12 - 8.9125E+03 1.1350E-10 6.2689E-11 2.9273E-12 2.2746E-12 - 1.0000E+04 7.4495E-11 4.0138E-11 2.0210E-12 1.4025E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2361E+03 4.2996E+03 2.0354E+03 2.0912E+03 - 1.1220E-01 3.7766E+03 3.8476E+03 1.8295E+03 1.8723E+03 - 1.2589E-01 3.3513E+03 3.4268E+03 1.6314E+03 1.6435E+03 - 1.4125E-01 2.9669E+03 3.0247E+03 1.4384E+03 1.4252E+03 - 1.5849E-01 2.6227E+03 2.6395E+03 1.2551E+03 1.2506E+03 - 1.7783E-01 2.2851E+03 2.2822E+03 1.0864E+03 1.0821E+03 - 1.9953E-01 1.9702E+03 1.9646E+03 9.4458E+02 9.2542E+02 - 2.2387E-01 1.6878E+03 1.6746E+03 8.1377E+02 7.8393E+02 - 2.5119E-01 1.4289E+03 1.4137E+03 6.9732E+02 6.6620E+02 - 2.8184E-01 1.2008E+03 1.1862E+03 5.9384E+02 5.6273E+02 - 3.1623E-01 1.0074E+03 9.9638E+02 4.9758E+02 4.6609E+02 - 3.5481E-01 8.3939E+02 8.3017E+02 4.1288E+02 3.8219E+02 - 3.9811E-01 6.8978E+02 6.8416E+02 3.4029E+02 3.1380E+02 - 4.4668E-01 5.6494E+02 5.6083E+02 2.7764E+02 2.5845E+02 - 5.0119E-01 4.6198E+02 4.5619E+02 2.2726E+02 2.0992E+02 - 5.6234E-01 3.7193E+02 3.6768E+02 1.8665E+02 1.6704E+02 - 6.3096E-01 2.9948E+02 2.9528E+02 1.4921E+02 1.3214E+02 - 7.0795E-01 2.4057E+02 2.3353E+02 1.1822E+02 1.0509E+02 - 7.9433E-01 1.8991E+02 1.8279E+02 9.4030E+01 8.1358E+01 - 8.9125E-01 1.5063E+02 1.4494E+02 7.3636E+01 6.3025E+01 - 1.0000E+00 1.1959E+02 1.1400E+02 5.6898E+01 4.9366E+01 - 1.1220E+00 9.3126E+01 8.8791E+01 4.4492E+01 3.7986E+01 - 1.2589E+00 7.2260E+01 6.9126E+01 3.4287E+01 2.8780E+01 - 1.4125E+00 5.5845E+01 5.2592E+01 2.5971E+01 2.1889E+01 - 1.5849E+00 4.2507E+01 3.9801E+01 1.9656E+01 1.6667E+01 - 1.7783E+00 3.2524E+01 3.0253E+01 1.4882E+01 1.2232E+01 - 1.9953E+00 2.4796E+01 2.2621E+01 1.1126E+01 8.8834E+00 - 2.2387E+00 1.8523E+01 1.6686E+01 8.2523E+00 6.4941E+00 - 2.5119E+00 1.3666E+01 1.2327E+01 5.9363E+00 4.7928E+00 - 2.8184E+00 1.0173E+01 9.0321E+00 4.2523E+00 3.4360E+00 - 3.1623E+00 7.5778E+00 6.7032E+00 3.0801E+00 2.4167E+00 - 3.5481E+00 5.5663E+00 4.8680E+00 2.1940E+00 1.6944E+00 - 3.9811E+00 4.0544E+00 3.5136E+00 1.5408E+00 1.1965E+00 - 4.4668E+00 2.9549E+00 2.5199E+00 1.0859E+00 8.3738E-01 - 5.0119E+00 2.1462E+00 1.8096E+00 7.5997E-01 5.7472E-01 - 5.6234E+00 1.5573E+00 1.2951E+00 5.2250E-01 3.9786E-01 - 6.3096E+00 1.1242E+00 9.2455E-01 3.5783E-01 2.7078E-01 - 7.0795E+00 8.0257E-01 6.6015E-01 2.4709E-01 1.8143E-01 - 7.9433E+00 5.6564E-01 4.6722E-01 1.6997E-01 1.2280E-01 - 8.9125E+00 4.0552E-01 3.3519E-01 1.1586E-01 8.5152E-02 - 1.0000E+01 2.9014E-01 2.3564E-01 7.6072E-02 5.7567E-02 - 1.1220E+01 2.0684E-01 1.6682E-01 5.0944E-02 3.8454E-02 - 1.2589E+01 1.4858E-01 1.1747E-01 3.4531E-02 2.6085E-02 - 1.4125E+01 1.0614E-01 8.2808E-02 2.3144E-02 1.7687E-02 - 1.5849E+01 7.5528E-02 5.9269E-02 1.5546E-02 1.1601E-02 - 1.7783E+01 5.4180E-02 4.1988E-02 1.0272E-02 7.6610E-03 - 1.9953E+01 3.8584E-02 2.9538E-02 6.8426E-03 5.2619E-03 - 2.2387E+01 2.7156E-02 2.0849E-02 4.6049E-03 3.5474E-03 - 2.5119E+01 1.9277E-02 1.4735E-02 3.0159E-03 2.3575E-03 - 2.8184E+01 1.3845E-02 1.0359E-02 1.9886E-03 1.4938E-03 - 3.1623E+01 9.8440E-03 7.3878E-03 1.3499E-03 1.0451E-03 - 3.5481E+01 6.9976E-03 5.2066E-03 8.9142E-04 6.9509E-04 - 3.9811E+01 4.9515E-03 3.6959E-03 5.9123E-04 4.6505E-04 - 4.4668E+01 3.5064E-03 2.6148E-03 3.9454E-04 3.1311E-04 - 5.0119E+01 2.4896E-03 1.8326E-03 2.6004E-04 2.0587E-04 - 5.6234E+01 1.7643E-03 1.2805E-03 1.7033E-04 1.3705E-04 - 6.3096E+01 1.2421E-03 9.0152E-04 1.1386E-04 9.2458E-05 - 7.0795E+01 8.7600E-04 6.3471E-04 7.7143E-05 6.1939E-05 - 7.9433E+01 6.2028E-04 4.4049E-04 5.1541E-05 4.1577E-05 - 8.9125E+01 4.3482E-04 3.0854E-04 3.4260E-05 2.7646E-05 - 1.0000E+02 3.0540E-04 2.1628E-04 2.2837E-05 1.8266E-05 - 1.1220E+02 2.1446E-04 1.5078E-04 1.5341E-05 1.2239E-05 - 1.2589E+02 1.5058E-04 1.0503E-04 1.0186E-05 8.2717E-06 - 1.4125E+02 1.0568E-04 7.3341E-05 6.8475E-06 5.6215E-06 - 1.5849E+02 7.4081E-05 5.1163E-05 4.5963E-06 3.7806E-06 - 1.7783E+02 5.1580E-05 3.5711E-05 3.0746E-06 2.5494E-06 - 1.9953E+02 3.6069E-05 2.4595E-05 2.1179E-06 1.7119E-06 - 2.2387E+02 2.5334E-05 1.6866E-05 1.4222E-06 1.1275E-06 - 2.5119E+02 1.7657E-05 1.1652E-05 9.5202E-07 7.5924E-07 - 2.8184E+02 1.2336E-05 8.1683E-06 6.3517E-07 5.0761E-07 - 3.1623E+02 8.5802E-06 5.6789E-06 4.2532E-07 3.4465E-07 - 3.5481E+02 5.9556E-06 3.9185E-06 2.8838E-07 2.3791E-07 - 3.9811E+02 4.1578E-06 2.7093E-06 1.9497E-07 1.5875E-07 - 4.4668E+02 2.8977E-06 1.8699E-06 1.3145E-07 1.0602E-07 - 5.0119E+02 2.0184E-06 1.2957E-06 8.8515E-08 7.2102E-08 - 5.6234E+02 1.3982E-06 8.9089E-07 6.0053E-08 4.7878E-08 - 6.3096E+02 9.6276E-07 6.1128E-07 4.0501E-08 3.2076E-08 - 7.0795E+02 6.6718E-07 4.1625E-07 2.6443E-08 2.1315E-08 - 7.9433E+02 4.6181E-07 2.8267E-07 1.7527E-08 1.3807E-08 - 8.9125E+02 3.1807E-07 1.9431E-07 1.2223E-08 9.0845E-09 - 1.0000E+03 2.1997E-07 1.3392E-07 8.3111E-09 6.1860E-09 - 1.1220E+03 1.5018E-07 9.1018E-08 5.6795E-09 4.1266E-09 - 1.2589E+03 1.0202E-07 6.2110E-08 3.7183E-09 2.7687E-09 - 1.4125E+03 6.9577E-08 4.2056E-08 2.4866E-09 1.8247E-09 - 1.5849E+03 4.7655E-08 2.8172E-08 1.6547E-09 1.2663E-09 - 1.7783E+03 3.2357E-08 1.9158E-08 1.1053E-09 8.8962E-10 - 1.9953E+03 2.1793E-08 1.3004E-08 7.0392E-10 5.4160E-10 - 2.2387E+03 1.4821E-08 8.7558E-09 4.9122E-10 3.6573E-10 - 2.5119E+03 9.9776E-09 5.8504E-09 3.2697E-10 2.2970E-10 - 2.8184E+03 6.6836E-09 3.9233E-09 2.1109E-10 1.4729E-10 - 3.1623E+03 4.6354E-09 2.6600E-09 1.4364E-10 1.0738E-10 - 3.5481E+03 3.0044E-09 1.7223E-09 9.7511E-11 7.0182E-11 - 3.9811E+03 1.9893E-09 1.1605E-09 6.1788E-11 4.8308E-11 - 4.4668E+03 1.3401E-09 7.7353E-10 3.8988E-11 3.0021E-11 - 5.0119E+03 8.8473E-10 5.0374E-10 2.7093E-11 1.8266E-11 - 5.6234E+03 5.8312E-10 3.3001E-10 1.8740E-11 1.3180E-11 - 6.3096E+03 3.9187E-10 2.2212E-10 1.1988E-11 8.2943E-12 - 7.0795E+03 2.6227E-10 1.4654E-10 7.3818E-12 5.4007E-12 - 7.9433E+03 1.7381E-10 9.6101E-11 4.9009E-12 3.5154E-12 - 8.9125E+03 1.1567E-10 6.2111E-11 3.5378E-12 2.3718E-12 - 1.0000E+04 7.5565E-11 4.1048E-11 2.2126E-12 1.3597E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2430E+03 4.3946E+03 2.0856E+03 2.0801E+03 - 1.1220E-01 3.8486E+03 3.9436E+03 1.8878E+03 1.8737E+03 - 1.2589E-01 3.4705E+03 3.5097E+03 1.6940E+03 1.6684E+03 - 1.4125E-01 3.0856E+03 3.1130E+03 1.5037E+03 1.4677E+03 - 1.5849E-01 2.7250E+03 2.7665E+03 1.3366E+03 1.2752E+03 - 1.7783E-01 2.3889E+03 2.4224E+03 1.1799E+03 1.1038E+03 - 1.9953E-01 2.0692E+03 2.1052E+03 1.0242E+03 9.6143E+02 - 2.2387E-01 1.7801E+03 1.8096E+03 8.8398E+02 8.1972E+02 - 2.5119E-01 1.5096E+03 1.5370E+03 7.5663E+02 6.9719E+02 - 2.8184E-01 1.2782E+03 1.2970E+03 6.4313E+02 5.9529E+02 - 3.1623E-01 1.0807E+03 1.0818E+03 5.4215E+02 4.9845E+02 - 3.5481E-01 8.9869E+02 8.9671E+02 4.4985E+02 4.1315E+02 - 3.9811E-01 7.4635E+02 7.4042E+02 3.7285E+02 3.3827E+02 - 4.4668E-01 6.1220E+02 6.0817E+02 3.0695E+02 2.7401E+02 - 5.0119E-01 4.9454E+02 4.9218E+02 2.5051E+02 2.2219E+02 - 5.6234E-01 4.0045E+02 3.9683E+02 2.0117E+02 1.7816E+02 - 6.3096E-01 3.2545E+02 3.2059E+02 1.6101E+02 1.4092E+02 - 7.0795E-01 2.6151E+02 2.5376E+02 1.2902E+02 1.1230E+02 - 7.9433E-01 2.0629E+02 2.0147E+02 1.0067E+02 8.8635E+01 - 8.9125E-01 1.6177E+02 1.5901E+02 7.9544E+01 6.8310E+01 - 1.0000E+00 1.2692E+02 1.2190E+02 6.2218E+01 5.2944E+01 - 1.1220E+00 9.8985E+01 9.4447E+01 4.8044E+01 4.0611E+01 - 1.2589E+00 7.7087E+01 7.2723E+01 3.6881E+01 3.0545E+01 - 1.4125E+00 5.9373E+01 5.5676E+01 2.7784E+01 2.2733E+01 - 1.5849E+00 4.5003E+01 4.2292E+01 2.0736E+01 1.7088E+01 - 1.7783E+00 3.3812E+01 3.1821E+01 1.5366E+01 1.2778E+01 - 1.9953E+00 2.5509E+01 2.3516E+01 1.1429E+01 9.3445E+00 - 2.2387E+00 1.9100E+01 1.7262E+01 8.4888E+00 6.6555E+00 - 2.5119E+00 1.4093E+01 1.2647E+01 6.1433E+00 4.7486E+00 - 2.8184E+00 1.0388E+01 9.1706E+00 4.4011E+00 3.3857E+00 - 3.1623E+00 7.6539E+00 6.7650E+00 3.1514E+00 2.4350E+00 - 3.5481E+00 5.6162E+00 4.9029E+00 2.2350E+00 1.7291E+00 - 3.9811E+00 4.1069E+00 3.5213E+00 1.5632E+00 1.2194E+00 - 4.4668E+00 2.9714E+00 2.5274E+00 1.0949E+00 8.4864E-01 - 5.0119E+00 2.1484E+00 1.8095E+00 7.6777E-01 5.8525E-01 - 5.6234E+00 1.5573E+00 1.2909E+00 5.2502E-01 3.9974E-01 - 6.3096E+00 1.1241E+00 9.2211E-01 3.5963E-01 2.7526E-01 - 7.0795E+00 8.0312E-01 6.6346E-01 2.4566E-01 1.8839E-01 - 7.9433E+00 5.7538E-01 4.7407E-01 1.6542E-01 1.2443E-01 - 8.9125E+00 4.1681E-01 3.3451E-01 1.1150E-01 8.3839E-02 - 1.0000E+01 2.9372E-01 2.3671E-01 7.6620E-02 5.6826E-02 - 1.1220E+01 2.1045E-01 1.6825E-01 5.1638E-02 3.8322E-02 - 1.2589E+01 1.4930E-01 1.1847E-01 3.4292E-02 2.6275E-02 - 1.4125E+01 1.0652E-01 8.3486E-02 2.3246E-02 1.7753E-02 - 1.5849E+01 7.6224E-02 5.9760E-02 1.5788E-02 1.1736E-02 - 1.7783E+01 5.4164E-02 4.2532E-02 1.0584E-02 7.6945E-03 - 1.9953E+01 3.8852E-02 3.0203E-02 6.8884E-03 5.3503E-03 - 2.2387E+01 2.7816E-02 2.1218E-02 4.6094E-03 3.7519E-03 - 2.5119E+01 1.9676E-02 1.4964E-02 3.0814E-03 2.4646E-03 - 2.8184E+01 1.3794E-02 1.0517E-02 1.9518E-03 1.5325E-03 - 3.1623E+01 9.7879E-03 7.3832E-03 1.3285E-03 1.0475E-03 - 3.5481E+01 6.9453E-03 5.2125E-03 8.8489E-04 6.9635E-04 - 3.9811E+01 4.9301E-03 3.6855E-03 5.9375E-04 4.6421E-04 - 4.4668E+01 3.5006E-03 2.5916E-03 3.9516E-04 3.1212E-04 - 5.0119E+01 2.4789E-03 1.8310E-03 2.6081E-04 2.0729E-04 - 5.6234E+01 1.7555E-03 1.2867E-03 1.7346E-04 1.3695E-04 - 6.3096E+01 1.2441E-03 8.9594E-04 1.1439E-04 9.0605E-05 - 7.0795E+01 8.7546E-04 6.2959E-04 7.6588E-05 6.1099E-05 - 7.9433E+01 6.1069E-04 4.4233E-04 5.2045E-05 4.1530E-05 - 8.9125E+01 4.2953E-04 3.0936E-04 3.4708E-05 2.7757E-05 - 1.0000E+02 3.0436E-04 2.1714E-04 2.3123E-05 1.8468E-05 - 1.1220E+02 2.1395E-04 1.5091E-04 1.5336E-05 1.2349E-05 - 1.2589E+02 1.5033E-04 1.0519E-04 1.0074E-05 8.2385E-06 - 1.4125E+02 1.0537E-04 7.3231E-05 6.8126E-06 5.5248E-06 - 1.5849E+02 7.3631E-05 5.0717E-05 4.7713E-06 3.7785E-06 - 1.7783E+02 5.1583E-05 3.5199E-05 3.2258E-06 2.5482E-06 - 1.9953E+02 3.6167E-05 2.4618E-05 2.1194E-06 1.6862E-06 - 2.2387E+02 2.5357E-05 1.7165E-05 1.3716E-06 1.1071E-06 - 2.5119E+02 1.7642E-05 1.1801E-05 9.2051E-07 7.6235E-07 - 2.8184E+02 1.2341E-05 8.1233E-06 6.5197E-07 5.2014E-07 - 3.1623E+02 8.6255E-06 5.6681E-06 4.3129E-07 3.5366E-07 - 3.5481E+02 5.9710E-06 3.8999E-06 2.9312E-07 2.3595E-07 - 3.9811E+02 4.1608E-06 2.7005E-06 1.9955E-07 1.5606E-07 - 4.4668E+02 2.8937E-06 1.8754E-06 1.3467E-07 1.0323E-07 - 5.0119E+02 2.0014E-06 1.2849E-06 8.9784E-08 7.0858E-08 - 5.6234E+02 1.3961E-06 8.8555E-07 6.0815E-08 4.8413E-08 - 6.3096E+02 9.6378E-07 6.0574E-07 4.0783E-08 3.1873E-08 - 7.0795E+02 6.6348E-07 4.1690E-07 2.6735E-08 2.1365E-08 - 7.9433E+02 4.5641E-07 2.8580E-07 1.7667E-08 1.4071E-08 - 8.9125E+02 3.1579E-07 1.9652E-07 1.2083E-08 9.3867E-09 - 1.0000E+03 2.1816E-07 1.3454E-07 8.2954E-09 6.6232E-09 - 1.1220E+03 1.4872E-07 9.0600E-08 5.6219E-09 4.3494E-09 - 1.2589E+03 1.0174E-07 6.1942E-08 3.8904E-09 2.8796E-09 - 1.4125E+03 6.9540E-08 4.2173E-08 2.6092E-09 1.8837E-09 - 1.5849E+03 4.7644E-08 2.8639E-08 1.7626E-09 1.2399E-09 - 1.7783E+03 3.2237E-08 1.9218E-08 1.0968E-09 7.8077E-10 - 1.9953E+03 2.2009E-08 1.3015E-08 7.2120E-10 5.2487E-10 - 2.2387E+03 1.4940E-08 8.7637E-09 4.6719E-10 3.7104E-10 - 2.5119E+03 9.9448E-09 5.8444E-09 3.0632E-10 2.4381E-10 - 2.8184E+03 6.7074E-09 3.9352E-09 2.2223E-10 1.5376E-10 - 3.1623E+03 4.6505E-09 2.6666E-09 1.4014E-10 1.0421E-10 - 3.5481E+03 2.9909E-09 1.7249E-09 8.9302E-11 6.7811E-11 - 3.9811E+03 1.9910E-09 1.1493E-09 5.8996E-11 4.6971E-11 - 4.4668E+03 1.3286E-09 7.6567E-10 4.1928E-11 3.4182E-11 - 5.0119E+03 8.8904E-10 5.1232E-10 2.8645E-11 1.8917E-11 - 5.6234E+03 5.9512E-10 3.3612E-10 1.8062E-11 1.1712E-11 - 6.3096E+03 3.9216E-10 2.1974E-10 1.1445E-11 8.5803E-12 - 7.0795E+03 2.5867E-10 1.4617E-10 7.2838E-12 5.9042E-12 - 7.9433E+03 1.7219E-10 9.5865E-11 4.8901E-12 3.5736E-12 - 8.9125E+03 1.1465E-10 6.3195E-11 3.2110E-12 2.2305E-12 - 1.0000E+04 7.5668E-11 4.2035E-11 1.9430E-12 1.4854E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.5154E+03 4.6314E+03 2.2218E+03 2.1705E+03 - 1.1220E-01 4.0648E+03 4.1825E+03 2.0143E+03 1.9713E+03 - 1.2589E-01 3.6593E+03 3.7466E+03 1.8285E+03 1.7530E+03 - 1.4125E-01 3.2736E+03 3.3496E+03 1.6204E+03 1.5531E+03 - 1.5849E-01 2.8951E+03 2.9627E+03 1.4198E+03 1.3703E+03 - 1.7783E-01 2.5499E+03 2.5892E+03 1.2548E+03 1.1875E+03 - 1.9953E-01 2.2084E+03 2.2488E+03 1.0978E+03 1.0225E+03 - 2.2387E-01 1.8990E+03 1.9377E+03 9.5030E+02 8.7519E+02 - 2.5119E-01 1.6262E+03 1.6492E+03 8.1355E+02 7.4804E+02 - 2.8184E-01 1.3808E+03 1.3958E+03 6.8886E+02 6.2993E+02 - 3.1623E-01 1.1664E+03 1.1672E+03 5.8101E+02 5.2130E+02 - 3.5481E-01 9.6651E+02 9.6168E+02 4.8671E+02 4.3046E+02 - 3.9811E-01 7.9146E+02 7.9483E+02 4.0259E+02 3.5319E+02 - 4.4668E-01 6.5341E+02 6.5542E+02 3.3295E+02 2.9201E+02 - 5.0119E-01 5.3501E+02 5.3163E+02 2.7087E+02 2.3727E+02 - 5.6234E-01 4.2771E+02 4.2388E+02 2.1653E+02 1.8943E+02 - 6.3096E-01 3.4074E+02 3.3873E+02 1.7357E+02 1.4998E+02 - 7.0795E-01 2.7173E+02 2.6941E+02 1.3684E+02 1.1773E+02 - 7.9433E-01 2.1468E+02 2.1118E+02 1.0727E+02 9.2386E+01 - 8.9125E-01 1.7017E+02 1.6544E+02 8.4603E+01 7.2040E+01 - 1.0000E+00 1.3306E+02 1.2764E+02 6.5248E+01 5.4971E+01 - 1.1220E+00 1.0373E+02 9.8463E+01 5.0273E+01 4.1792E+01 - 1.2589E+00 7.9664E+01 7.5183E+01 3.7855E+01 3.1424E+01 - 1.4125E+00 6.0571E+01 5.7318E+01 2.8641E+01 2.3539E+01 - 1.5849E+00 4.5916E+01 4.3163E+01 2.1580E+01 1.7526E+01 - 1.7783E+00 3.4610E+01 3.2002E+01 1.5879E+01 1.2957E+01 - 1.9953E+00 2.5999E+01 2.3777E+01 1.1664E+01 9.4478E+00 - 2.2387E+00 1.9380E+01 1.7755E+01 8.5363E+00 6.8392E+00 - 2.5119E+00 1.4338E+01 1.3010E+01 6.2161E+00 4.8764E+00 - 2.8184E+00 1.0453E+01 9.3557E+00 4.5427E+00 3.4606E+00 - 3.1623E+00 7.7266E+00 6.8647E+00 3.2161E+00 2.4589E+00 - 3.5481E+00 5.6729E+00 4.9332E+00 2.2575E+00 1.7290E+00 - 3.9811E+00 4.1290E+00 3.5662E+00 1.5829E+00 1.2104E+00 - 4.4668E+00 3.0041E+00 2.5532E+00 1.1189E+00 8.3941E-01 - 5.0119E+00 2.1670E+00 1.8316E+00 7.7404E-01 5.8067E-01 - 5.6234E+00 1.5681E+00 1.3130E+00 5.2240E-01 4.0375E-01 - 6.3096E+00 1.1335E+00 9.2926E-01 3.5816E-01 2.7834E-01 - 7.0795E+00 8.0675E-01 6.6051E-01 2.4523E-01 1.8683E-01 - 7.9433E+00 5.8252E-01 4.6845E-01 1.6543E-01 1.2577E-01 - 8.9125E+00 4.1709E-01 3.3610E-01 1.1420E-01 8.6561E-02 - 1.0000E+01 2.9322E-01 2.3565E-01 7.7292E-02 5.6918E-02 - 1.1220E+01 2.0868E-01 1.6600E-01 5.1888E-02 3.8978E-02 - 1.2589E+01 1.4941E-01 1.1803E-01 3.4076E-02 2.6249E-02 - 1.4125E+01 1.0742E-01 8.2995E-02 2.2941E-02 1.7032E-02 - 1.5849E+01 7.6565E-02 5.8880E-02 1.5482E-02 1.1237E-02 - 1.7783E+01 5.4303E-02 4.2291E-02 1.0411E-02 7.6402E-03 - 1.9953E+01 3.8666E-02 2.9961E-02 7.0363E-03 5.2652E-03 - 2.2387E+01 2.7661E-02 2.1223E-02 4.6583E-03 3.5125E-03 - 2.5119E+01 1.9607E-02 1.5174E-02 3.0748E-03 2.3228E-03 - 2.8184E+01 1.3801E-02 1.0777E-02 2.0121E-03 1.5532E-03 - 3.1623E+01 9.8089E-03 7.4105E-03 1.3369E-03 1.0384E-03 - 3.5481E+01 6.9796E-03 5.2193E-03 8.8640E-04 6.9155E-04 - 3.9811E+01 4.9532E-03 3.6808E-03 5.9300E-04 4.6341E-04 - 4.4668E+01 3.5100E-03 2.6011E-03 3.9878E-04 3.1164E-04 - 5.0119E+01 2.4804E-03 1.8293E-03 2.6580E-04 2.0680E-04 - 5.6234E+01 1.7610E-03 1.2871E-03 1.7657E-04 1.3777E-04 - 6.3096E+01 1.2450E-03 8.9863E-04 1.1656E-04 9.1818E-05 - 7.0795E+01 8.7345E-04 6.2637E-04 7.7144E-05 6.1924E-05 - 7.9433E+01 6.1436E-04 4.4018E-04 5.2293E-05 4.2471E-05 - 8.9125E+01 4.3456E-04 3.0802E-04 3.5304E-05 2.8115E-05 - 1.0000E+02 3.0575E-04 2.1601E-04 2.3146E-05 1.8528E-05 - 1.1220E+02 2.1438E-04 1.5095E-04 1.5463E-05 1.2512E-05 - 1.2589E+02 1.5093E-04 1.0531E-04 1.0326E-05 8.3180E-06 - 1.4125E+02 1.0566E-04 7.3068E-05 6.8814E-06 5.5427E-06 - 1.5849E+02 7.3794E-05 5.0983E-05 4.5614E-06 3.7397E-06 - 1.7783E+02 5.1696E-05 3.5519E-05 3.0954E-06 2.4771E-06 - 1.9953E+02 3.6243E-05 2.4562E-05 2.1397E-06 1.6380E-06 - 2.2387E+02 2.5407E-05 1.7132E-05 1.4558E-06 1.1221E-06 - 2.5119E+02 1.7653E-05 1.1955E-05 9.7852E-07 7.4748E-07 - 2.8184E+02 1.2326E-05 8.2468E-06 6.3793E-07 4.9546E-07 - 3.1623E+02 8.5816E-06 5.6457E-06 4.3991E-07 3.4676E-07 - 3.5481E+02 5.9749E-06 3.9096E-06 2.9742E-07 2.3410E-07 - 3.9811E+02 4.1658E-06 2.7128E-06 2.0215E-07 1.5672E-07 - 4.4668E+02 2.8897E-06 1.8726E-06 1.3463E-07 1.0387E-07 - 5.0119E+02 2.0027E-06 1.2834E-06 9.1077E-08 7.0147E-08 - 5.6234E+02 1.3987E-06 8.9131E-07 6.0648E-08 4.7903E-08 - 6.3096E+02 9.6542E-07 6.1125E-07 4.0040E-08 3.2270E-08 - 7.0795E+02 6.6606E-07 4.2086E-07 2.6988E-08 2.1985E-08 - 7.9433E+02 4.6148E-07 2.8793E-07 1.8243E-08 1.4573E-08 - 8.9125E+02 3.1890E-07 1.9637E-07 1.2575E-08 9.7340E-09 - 1.0000E+03 2.1840E-07 1.3415E-07 8.5642E-09 6.4585E-09 - 1.1220E+03 1.4937E-07 9.1099E-08 5.6039E-09 4.2589E-09 - 1.2589E+03 1.0189E-07 6.2050E-08 3.6688E-09 2.7526E-09 - 1.4125E+03 6.9296E-08 4.1646E-08 2.4650E-09 1.8242E-09 - 1.5849E+03 4.7446E-08 2.8443E-08 1.6720E-09 1.2834E-09 - 1.7783E+03 3.2531E-08 1.9377E-08 1.1328E-09 7.9947E-10 - 1.9953E+03 2.1993E-08 1.2914E-08 7.3973E-10 5.3733E-10 - 2.2387E+03 1.4836E-08 8.6320E-09 4.7743E-10 3.6462E-10 - 2.5119E+03 1.0018E-08 5.8797E-09 3.1862E-10 2.4700E-10 - 2.8184E+03 6.7365E-09 3.9261E-09 2.1309E-10 1.6623E-10 - 3.1623E+03 4.6212E-09 2.6850E-09 1.4296E-10 1.0247E-10 - 3.5481E+03 3.0282E-09 1.7436E-09 9.6474E-11 6.5086E-11 - 3.9811E+03 2.0330E-09 1.1552E-09 6.4239E-11 4.3979E-11 - 4.4668E+03 1.3504E-09 7.6301E-10 4.1008E-11 2.9180E-11 - 5.0119E+03 8.9507E-10 5.0718E-10 2.5235E-11 1.9683E-11 - 5.6234E+03 5.9209E-10 3.4229E-10 1.7787E-11 1.2606E-11 - 6.3096E+03 3.9510E-10 2.2117E-10 1.1945E-11 8.3318E-12 - 7.0795E+03 2.6194E-10 1.4491E-10 7.7657E-12 5.7298E-12 - 7.9433E+03 1.7356E-10 9.5855E-11 5.1936E-12 3.5725E-12 - 8.9125E+03 1.1359E-10 6.3319E-11 3.3602E-12 2.3086E-12 - 1.0000E+04 7.5058E-11 4.1122E-11 1.9922E-12 1.5154E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.9308E+03 5.0795E+03 2.4437E+03 2.3839E+03 - 1.1220E-01 4.4566E+03 4.5636E+03 2.2126E+03 2.1329E+03 - 1.2589E-01 4.0026E+03 4.1016E+03 1.9866E+03 1.9055E+03 - 1.4125E-01 3.5678E+03 3.6465E+03 1.7603E+03 1.6809E+03 - 1.5849E-01 3.1649E+03 3.2297E+03 1.5550E+03 1.4724E+03 - 1.7783E-01 2.7649E+03 2.8197E+03 1.3729E+03 1.2708E+03 - 1.9953E-01 2.3890E+03 2.4351E+03 1.1993E+03 1.1018E+03 - 2.2387E-01 2.0472E+03 2.0901E+03 1.0298E+03 9.5092E+02 - 2.5119E-01 1.7474E+03 1.7774E+03 8.7329E+02 7.9914E+02 - 2.8184E-01 1.4768E+03 1.4931E+03 7.4338E+02 6.6898E+02 - 3.1623E-01 1.2417E+03 1.2504E+03 6.2593E+02 5.5931E+02 - 3.5481E-01 1.0300E+03 1.0347E+03 5.1853E+02 4.6239E+02 - 3.9811E-01 8.3924E+02 8.4577E+02 4.2690E+02 3.7808E+02 - 4.4668E-01 6.8688E+02 6.8811E+02 3.5101E+02 3.0691E+02 - 5.0119E-01 5.5811E+02 5.5778E+02 2.8677E+02 2.4707E+02 - 5.6234E-01 4.4678E+02 4.4921E+02 2.3131E+02 1.9753E+02 - 6.3096E-01 3.5727E+02 3.5654E+02 1.8507E+02 1.5738E+02 - 7.0795E-01 2.8453E+02 2.8156E+02 1.4436E+02 1.2389E+02 - 7.9433E-01 2.2261E+02 2.1893E+02 1.1091E+02 9.5800E+01 - 8.9125E-01 1.7365E+02 1.6971E+02 8.7265E+01 7.4224E+01 - 1.0000E+00 1.3723E+02 1.3221E+02 6.8845E+01 5.6500E+01 - 1.1220E+00 1.0575E+02 1.0145E+02 5.2782E+01 4.2779E+01 - 1.2589E+00 8.1017E+01 7.7015E+01 3.9751E+01 3.2346E+01 - 1.4125E+00 6.1632E+01 5.8080E+01 2.9698E+01 2.4127E+01 - 1.5849E+00 4.6983E+01 4.3550E+01 2.2241E+01 1.7787E+01 - 1.7783E+00 3.5490E+01 3.2380E+01 1.6543E+01 1.3222E+01 - 1.9953E+00 2.6442E+01 2.4094E+01 1.2274E+01 9.6512E+00 - 2.2387E+00 1.9658E+01 1.7845E+01 8.7792E+00 6.9258E+00 - 2.5119E+00 1.4542E+01 1.3078E+01 6.2466E+00 4.9812E+00 - 2.8184E+00 1.0604E+01 9.5405E+00 4.4636E+00 3.5587E+00 - 3.1623E+00 7.7854E+00 6.8243E+00 3.2221E+00 2.5162E+00 - 3.5481E+00 5.6521E+00 4.9381E+00 2.2338E+00 1.7627E+00 - 3.9811E+00 4.0884E+00 3.5557E+00 1.5510E+00 1.2262E+00 - 4.4668E+00 2.9628E+00 2.5440E+00 1.0836E+00 8.4393E-01 - 5.0119E+00 2.1424E+00 1.8223E+00 7.6399E-01 5.7253E-01 - 5.6234E+00 1.5386E+00 1.2980E+00 5.2843E-01 3.9811E-01 - 6.3096E+00 1.1070E+00 9.2962E-01 3.5786E-01 2.7585E-01 - 7.0795E+00 8.0339E-01 6.6606E-01 2.4150E-01 1.8752E-01 - 7.9433E+00 5.7780E-01 4.7290E-01 1.6365E-01 1.2471E-01 - 8.9125E+00 4.0791E-01 3.3390E-01 1.1364E-01 8.2712E-02 - 1.0000E+01 2.9149E-01 2.3606E-01 7.6669E-02 5.7894E-02 - 1.1220E+01 2.0810E-01 1.6750E-01 5.2141E-02 3.8413E-02 - 1.2589E+01 1.4897E-01 1.1876E-01 3.4979E-02 2.5589E-02 - 1.4125E+01 1.0651E-01 8.3704E-02 2.3274E-02 1.7515E-02 - 1.5849E+01 7.6085E-02 5.8854E-02 1.5147E-02 1.1771E-02 - 1.7783E+01 5.4047E-02 4.1577E-02 9.8785E-03 7.9170E-03 - 1.9953E+01 3.8605E-02 2.9992E-02 6.8062E-03 5.3326E-03 - 2.2387E+01 2.7407E-02 2.1048E-02 4.4316E-03 3.6655E-03 - 2.5119E+01 1.9662E-02 1.4930E-02 2.9986E-03 2.3509E-03 - 2.8184E+01 1.3979E-02 1.0600E-02 2.0330E-03 1.5162E-03 - 3.1623E+01 9.8252E-03 7.4120E-03 1.3448E-03 1.0410E-03 - 3.5481E+01 6.9832E-03 5.2293E-03 8.9709E-04 6.9873E-04 - 3.9811E+01 4.9571E-03 3.6856E-03 5.9405E-04 4.7104E-04 - 4.4668E+01 3.5114E-03 2.6033E-03 3.9290E-04 3.1507E-04 - 5.0119E+01 2.4873E-03 1.8369E-03 2.6359E-04 2.1006E-04 - 5.6234E+01 1.7662E-03 1.2913E-03 1.7433E-04 1.3784E-04 - 6.3096E+01 1.2463E-03 9.0386E-04 1.1594E-04 9.1732E-05 - 7.0795E+01 8.7867E-04 6.3008E-04 7.7687E-05 6.2518E-05 - 7.9433E+01 6.1767E-04 4.4331E-04 5.2657E-05 4.0599E-05 - 8.9125E+01 4.3436E-04 3.0921E-04 3.5782E-05 2.7106E-05 - 1.0000E+02 3.0514E-04 2.1698E-04 2.3207E-05 1.8479E-05 - 1.1220E+02 2.1409E-04 1.5125E-04 1.5485E-05 1.2501E-05 - 1.2589E+02 1.5043E-04 1.0511E-04 1.0347E-05 8.3993E-06 - 1.4125E+02 1.0544E-04 7.3195E-05 6.9397E-06 5.5246E-06 - 1.5849E+02 7.3616E-05 5.0940E-05 4.6580E-06 3.7337E-06 - 1.7783E+02 5.1756E-05 3.5448E-05 3.0967E-06 2.5143E-06 - 1.9953E+02 3.6255E-05 2.4606E-05 2.0838E-06 1.7078E-06 - 2.2387E+02 2.5216E-05 1.7001E-05 1.4194E-06 1.1410E-06 - 2.5119E+02 1.7637E-05 1.1765E-05 9.5688E-07 7.5298E-07 - 2.8184E+02 1.2360E-05 8.2396E-06 6.3123E-07 5.2037E-07 - 3.1623E+02 8.6001E-06 5.6883E-06 4.2664E-07 3.5180E-07 - 3.5481E+02 5.9964E-06 3.9067E-06 2.8971E-07 2.3777E-07 - 3.9811E+02 4.1730E-06 2.7223E-06 1.9657E-07 1.5984E-07 - 4.4668E+02 2.8960E-06 1.8728E-06 1.3430E-07 1.0625E-07 - 5.0119E+02 2.0100E-06 1.2895E-06 9.1295E-08 7.1037E-08 - 5.6234E+02 1.3999E-06 8.9346E-07 6.0175E-08 4.9033E-08 - 6.3096E+02 9.7196E-07 6.1194E-07 4.0679E-08 3.2665E-08 - 7.0795E+02 6.6964E-07 4.2200E-07 2.7876E-08 2.1879E-08 - 7.9433E+02 4.5640E-07 2.8795E-07 1.8364E-08 1.4846E-08 - 8.9125E+02 3.1482E-07 1.9466E-07 1.2211E-08 9.5795E-09 - 1.0000E+03 2.1936E-07 1.3398E-07 8.3276E-09 6.3939E-09 - 1.1220E+03 1.4914E-07 9.0970E-08 5.4493E-09 4.4125E-09 - 1.2589E+03 1.0181E-07 6.1949E-08 3.5783E-09 2.8880E-09 - 1.4125E+03 6.9565E-08 4.2091E-08 2.4102E-09 1.9110E-09 - 1.5849E+03 4.7529E-08 2.8728E-08 1.5933E-09 1.2624E-09 - 1.7783E+03 3.2414E-08 1.9330E-08 1.0594E-09 8.2059E-10 - 1.9953E+03 2.1956E-08 1.2831E-08 7.3440E-10 5.1611E-10 - 2.2387E+03 1.4739E-08 8.6438E-09 4.9489E-10 3.5571E-10 - 2.5119E+03 9.9296E-09 5.7861E-09 3.2510E-10 2.3929E-10 - 2.8184E+03 6.7033E-09 3.8822E-09 2.0950E-10 1.5990E-10 - 3.1623E+03 4.6004E-09 2.6788E-09 1.3926E-10 1.1024E-10 - 3.5481E+03 2.9985E-09 1.7335E-09 9.1799E-11 7.1595E-11 - 3.9811E+03 2.0147E-09 1.1705E-09 6.2897E-11 4.8676E-11 - 4.4668E+03 1.3533E-09 7.8589E-10 4.3105E-11 3.1410E-11 - 5.0119E+03 8.9734E-10 5.1623E-10 2.8201E-11 2.0345E-11 - 5.6234E+03 5.9989E-10 3.3776E-10 1.9123E-11 1.1848E-11 - 6.3096E+03 3.9643E-10 2.2332E-10 1.1744E-11 8.1330E-12 - 7.0795E+03 2.6358E-10 1.4657E-10 7.8923E-12 5.5027E-12 - 7.9433E+03 1.7241E-10 9.6802E-11 5.0260E-12 3.6207E-12 - 8.9125E+03 1.1332E-10 6.3105E-11 3.4106E-12 2.3019E-12 - 1.0000E+04 7.5640E-11 4.0710E-11 2.2444E-12 1.4374E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.4628E+03 3.5611E+03 1.6963E+03 1.7132E+03 - 1.1220E-01 3.1537E+03 3.2334E+03 1.5382E+03 1.5454E+03 - 1.2589E-01 2.8501E+03 2.9073E+03 1.3937E+03 1.3884E+03 - 1.4125E-01 2.5623E+03 2.5987E+03 1.2503E+03 1.2455E+03 - 1.5849E-01 2.2870E+03 2.3080E+03 1.1156E+03 1.0945E+03 - 1.7783E-01 2.0120E+03 2.0444E+03 9.7602E+02 9.4261E+02 - 1.9953E-01 1.7551E+03 1.7843E+03 8.4565E+02 8.2461E+02 - 2.2387E-01 1.5263E+03 1.5323E+03 7.3667E+02 7.1169E+02 - 2.5119E-01 1.3122E+03 1.3119E+03 6.3591E+02 6.0241E+02 - 2.8184E-01 1.1167E+03 1.1119E+03 5.4439E+02 5.0741E+02 - 3.1623E-01 9.4248E+02 9.3342E+02 4.6348E+02 4.2792E+02 - 3.5481E-01 7.8553E+02 7.8073E+02 3.8759E+02 3.5601E+02 - 3.9811E-01 6.5198E+02 6.4890E+02 3.2133E+02 2.9438E+02 - 4.4668E-01 5.4258E+02 5.3422E+02 2.6354E+02 2.4077E+02 - 5.0119E-01 4.4472E+02 4.3827E+02 2.1479E+02 1.9398E+02 - 5.6234E-01 3.6216E+02 3.5492E+02 1.7446E+02 1.5724E+02 - 6.3096E-01 2.9308E+02 2.8426E+02 1.4017E+02 1.2669E+02 - 7.0795E-01 2.3547E+02 2.2769E+02 1.1197E+02 1.0048E+02 - 7.9433E-01 1.8844E+02 1.8100E+02 8.8191E+01 7.8877E+01 - 8.9125E-01 1.4999E+02 1.4317E+02 6.9066E+01 6.0907E+01 - 1.0000E+00 1.1623E+02 1.1100E+02 5.3885E+01 4.6745E+01 - 1.1220E+00 9.0494E+01 8.5736E+01 4.1600E+01 3.5661E+01 - 1.2589E+00 7.0283E+01 6.6547E+01 3.1847E+01 2.6880E+01 - 1.4125E+00 5.4281E+01 5.1123E+01 2.4143E+01 2.0163E+01 - 1.5849E+00 4.1313E+01 3.8671E+01 1.8207E+01 1.5118E+01 - 1.7783E+00 3.1473E+01 2.8975E+01 1.3481E+01 1.1296E+01 - 1.9953E+00 2.3916E+01 2.1662E+01 9.9593E+00 8.2166E+00 - 2.2387E+00 1.7929E+01 1.6209E+01 7.3712E+00 5.8906E+00 - 2.5119E+00 1.3360E+01 1.1938E+01 5.3718E+00 4.2603E+00 - 2.8184E+00 9.9064E+00 8.6780E+00 3.8616E+00 3.0519E+00 - 3.1623E+00 7.2896E+00 6.3434E+00 2.7338E+00 2.1550E+00 - 3.5481E+00 5.3532E+00 4.5947E+00 1.9407E+00 1.5136E+00 - 3.9811E+00 3.9159E+00 3.3147E+00 1.3752E+00 1.0497E+00 - 4.4668E+00 2.8441E+00 2.3935E+00 9.6688E-01 7.3094E-01 - 5.0119E+00 2.0413E+00 1.7074E+00 6.6879E-01 5.0912E-01 - 5.6234E+00 1.4765E+00 1.2213E+00 4.6107E-01 3.4920E-01 - 6.3096E+00 1.0692E+00 8.7377E-01 3.1885E-01 2.3528E-01 - 7.0795E+00 7.5834E-01 6.1861E-01 2.1487E-01 1.5833E-01 - 7.9433E+00 5.4306E-01 4.3938E-01 1.4423E-01 1.0759E-01 - 8.9125E+00 3.9341E-01 3.1324E-01 9.6349E-02 7.3371E-02 - 1.0000E+01 2.7973E-01 2.2171E-01 6.5598E-02 4.9390E-02 - 1.1220E+01 1.9904E-01 1.5624E-01 4.3499E-02 3.2834E-02 - 1.2589E+01 1.4194E-01 1.1036E-01 2.8620E-02 2.2091E-02 - 1.4125E+01 1.0100E-01 7.9021E-02 1.9408E-02 1.4918E-02 - 1.5849E+01 7.2119E-02 5.6017E-02 1.3025E-02 9.8790E-03 - 1.7783E+01 5.1109E-02 3.9025E-02 8.6440E-03 6.5733E-03 - 1.9953E+01 3.6155E-02 2.7170E-02 5.7192E-03 4.4288E-03 - 2.2387E+01 2.5699E-02 1.9341E-02 3.8253E-03 2.8791E-03 - 2.5119E+01 1.8304E-02 1.3778E-02 2.4592E-03 1.9493E-03 - 2.8184E+01 1.2975E-02 9.6324E-03 1.6271E-03 1.3708E-03 - 3.1623E+01 9.3195E-03 6.9176E-03 1.1309E-03 8.8133E-04 - 3.5481E+01 6.6106E-03 4.8801E-03 7.4604E-04 5.8183E-04 - 3.9811E+01 4.6804E-03 3.4248E-03 4.9620E-04 3.9142E-04 - 4.4668E+01 3.3124E-03 2.4099E-03 3.3075E-04 2.6542E-04 - 5.0119E+01 2.3497E-03 1.7045E-03 2.2122E-04 1.7786E-04 - 5.6234E+01 1.6561E-03 1.2005E-03 1.4643E-04 1.2011E-04 - 6.3096E+01 1.1686E-03 8.3366E-04 9.6721E-05 8.0553E-05 - 7.0795E+01 8.1811E-04 5.8199E-04 6.4087E-05 5.3771E-05 - 7.9433E+01 5.6912E-04 4.0950E-04 4.2772E-05 3.6672E-05 - 8.9125E+01 4.0125E-04 2.8557E-04 2.8536E-05 2.3924E-05 - 1.0000E+02 2.8622E-04 1.9950E-04 1.9520E-05 1.5861E-05 - 1.1220E+02 2.0087E-04 1.3865E-04 1.3170E-05 1.0681E-05 - 1.2589E+02 1.4015E-04 9.6546E-05 9.0605E-06 7.0763E-06 - 1.4125E+02 9.8079E-05 6.7195E-05 6.0338E-06 4.7631E-06 - 1.5849E+02 6.8661E-05 4.6718E-05 3.9462E-06 3.2506E-06 - 1.7783E+02 4.7972E-05 3.2562E-05 2.7031E-06 2.1315E-06 - 1.9953E+02 3.3611E-05 2.2620E-05 1.8443E-06 1.4597E-06 - 2.2387E+02 2.3321E-05 1.5631E-05 1.2165E-06 1.0086E-06 - 2.5119E+02 1.6275E-05 1.0787E-05 8.2344E-07 6.7524E-07 - 2.8184E+02 1.1397E-05 7.4703E-06 5.6109E-07 4.4986E-07 - 3.1623E+02 7.9654E-06 5.1786E-06 3.7383E-07 3.0195E-07 - 3.5481E+02 5.5189E-06 3.5798E-06 2.5278E-07 2.0305E-07 - 3.9811E+02 3.8183E-06 2.4727E-06 1.7221E-07 1.3655E-07 - 4.4668E+02 2.6557E-06 1.6948E-06 1.1654E-07 9.3921E-08 - 5.0119E+02 1.8430E-06 1.1648E-06 8.0133E-08 6.2989E-08 - 5.6234E+02 1.2832E-06 8.0249E-07 5.3441E-08 4.1591E-08 - 6.3096E+02 8.8103E-07 5.4824E-07 3.5730E-08 2.7990E-08 - 7.0795E+02 6.0664E-07 3.7711E-07 2.3765E-08 1.8562E-08 - 7.9433E+02 4.1902E-07 2.5884E-07 1.6218E-08 1.2152E-08 - 8.9125E+02 2.8865E-07 1.7655E-07 1.1108E-08 8.0600E-09 - 1.0000E+03 1.9875E-07 1.2162E-07 7.3583E-09 5.4095E-09 - 1.1220E+03 1.3498E-07 8.1700E-08 4.8384E-09 3.5168E-09 - 1.2589E+03 9.2044E-08 5.5746E-08 3.3359E-09 2.4689E-09 - 1.4125E+03 6.2981E-08 3.8183E-08 2.1639E-09 1.7563E-09 - 1.5849E+03 4.2492E-08 2.5738E-08 1.4421E-09 1.1507E-09 - 1.7783E+03 2.8583E-08 1.7425E-08 9.9931E-10 7.4406E-10 - 1.9953E+03 1.9346E-08 1.1613E-08 6.8350E-10 4.8975E-10 - 2.2387E+03 1.2908E-08 7.6996E-09 4.4001E-10 3.3391E-10 - 2.5119E+03 8.7030E-09 5.1685E-09 2.7257E-10 2.2148E-10 - 2.8184E+03 5.9085E-09 3.4315E-09 1.7792E-10 1.4036E-10 - 3.1623E+03 4.0496E-09 2.3355E-09 1.2301E-10 9.0899E-11 - 3.5481E+03 2.6363E-09 1.5225E-09 8.2107E-11 5.8324E-11 - 3.9811E+03 1.7544E-09 1.0083E-09 5.4141E-11 3.6722E-11 - 4.4668E+03 1.1543E-09 6.7067E-10 3.5550E-11 2.3433E-11 - 5.0119E+03 7.6936E-10 4.3254E-10 2.2757E-11 1.4868E-11 - 5.6234E+03 5.1808E-10 2.8420E-10 1.5650E-11 1.0354E-11 - 6.3096E+03 3.4162E-10 1.9343E-10 1.0422E-11 6.8710E-12 - 7.0795E+03 2.2287E-10 1.2710E-10 6.5744E-12 4.5490E-12 - 7.9433E+03 1.4560E-10 8.3930E-11 4.1755E-12 3.0566E-12 - 8.9125E+03 9.7062E-11 5.4669E-11 2.8759E-12 1.9114E-12 - 1.0000E+04 6.3872E-11 3.5523E-11 1.8264E-12 1.2727E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.3750E+03 3.4373E+03 1.6438E+03 1.6708E+03 - 1.1220E-01 3.0672E+03 3.1152E+03 1.4815E+03 1.5145E+03 - 1.2589E-01 2.7789E+03 2.8180E+03 1.3415E+03 1.3566E+03 - 1.4125E-01 2.4958E+03 2.5178E+03 1.2014E+03 1.2032E+03 - 1.5849E-01 2.2099E+03 2.2353E+03 1.0695E+03 1.0654E+03 - 1.7783E-01 1.9474E+03 1.9868E+03 9.4812E+02 9.2343E+02 - 1.9953E-01 1.7056E+03 1.7367E+03 8.2668E+02 7.9810E+02 - 2.2387E-01 1.4734E+03 1.4908E+03 7.1623E+02 6.9430E+02 - 2.5119E-01 1.2640E+03 1.2673E+03 6.1697E+02 5.9256E+02 - 2.8184E-01 1.0771E+03 1.0770E+03 5.2685E+02 4.9896E+02 - 3.1623E-01 9.1124E+02 9.0647E+02 4.4284E+02 4.1385E+02 - 3.5481E-01 7.6533E+02 7.5979E+02 3.7106E+02 3.4623E+02 - 3.9811E-01 6.3700E+02 6.3075E+02 3.1050E+02 2.8850E+02 - 4.4668E-01 5.2253E+02 5.1842E+02 2.5475E+02 2.3455E+02 - 5.0119E-01 4.2538E+02 4.2623E+02 2.0814E+02 1.9078E+02 - 5.6234E-01 3.4998E+02 3.4405E+02 1.6888E+02 1.5317E+02 - 6.3096E-01 2.8333E+02 2.7533E+02 1.3500E+02 1.2168E+02 - 7.0795E-01 2.2611E+02 2.2187E+02 1.0845E+02 9.7268E+01 - 7.9433E-01 1.8138E+02 1.7686E+02 8.5965E+01 7.5934E+01 - 8.9125E-01 1.4352E+02 1.3834E+02 6.7360E+01 5.8715E+01 - 1.0000E+00 1.1288E+02 1.0795E+02 5.2839E+01 4.5411E+01 - 1.1220E+00 8.8498E+01 8.4459E+01 4.0971E+01 3.4642E+01 - 1.2589E+00 6.9026E+01 6.4971E+01 3.1344E+01 2.6189E+01 - 1.4125E+00 5.3331E+01 4.9412E+01 2.3726E+01 1.9824E+01 - 1.5849E+00 4.0923E+01 3.7498E+01 1.8058E+01 1.4761E+01 - 1.7783E+00 3.1227E+01 2.8333E+01 1.3498E+01 1.0893E+01 - 1.9953E+00 2.3803E+01 2.1286E+01 9.8641E+00 8.0557E+00 - 2.2387E+00 1.7836E+01 1.6018E+01 7.2569E+00 5.9203E+00 - 2.5119E+00 1.3185E+01 1.1885E+01 5.3139E+00 4.2121E+00 - 2.8184E+00 9.7865E+00 8.6629E+00 3.8704E+00 2.9879E+00 - 3.1623E+00 7.2384E+00 6.2913E+00 2.7327E+00 2.1362E+00 - 3.5481E+00 5.3382E+00 4.5535E+00 1.9301E+00 1.4994E+00 - 3.9811E+00 3.8921E+00 3.2948E+00 1.3615E+00 1.0472E+00 - 4.4668E+00 2.8398E+00 2.3918E+00 9.5948E-01 7.2928E-01 - 5.0119E+00 2.0549E+00 1.7233E+00 6.6036E-01 5.0467E-01 - 5.6234E+00 1.4836E+00 1.2250E+00 4.5322E-01 3.4789E-01 - 6.3096E+00 1.0701E+00 8.6825E-01 3.1279E-01 2.3641E-01 - 7.0795E+00 7.5894E-01 6.1671E-01 2.1217E-01 1.5881E-01 - 7.9433E+00 5.4126E-01 4.3853E-01 1.4449E-01 1.0856E-01 - 8.9125E+00 3.9055E-01 3.1565E-01 9.7762E-02 7.3944E-02 - 1.0000E+01 2.8090E-01 2.2203E-01 6.5408E-02 4.9319E-02 - 1.1220E+01 2.0057E-01 1.5616E-01 4.4188E-02 3.3475E-02 - 1.2589E+01 1.4212E-01 1.0989E-01 2.9613E-02 2.1866E-02 - 1.4125E+01 1.0101E-01 7.7637E-02 1.9410E-02 1.4243E-02 - 1.5849E+01 7.2019E-02 5.4851E-02 1.2966E-02 9.8366E-03 - 1.7783E+01 5.1075E-02 3.9087E-02 8.8299E-03 6.5823E-03 - 1.9953E+01 3.6509E-02 2.7337E-02 5.7662E-03 4.3234E-03 - 2.2387E+01 2.6018E-02 1.9212E-02 3.8444E-03 2.9629E-03 - 2.5119E+01 1.8463E-02 1.3630E-02 2.4922E-03 1.9674E-03 - 2.8184E+01 1.3050E-02 9.6008E-03 1.5968E-03 1.2913E-03 - 3.1623E+01 9.3237E-03 6.9396E-03 1.1307E-03 8.8329E-04 - 3.5481E+01 6.6200E-03 4.8606E-03 7.4902E-04 5.8586E-04 - 3.9811E+01 4.6760E-03 3.4270E-03 5.0183E-04 3.9195E-04 - 4.4668E+01 3.3039E-03 2.4146E-03 3.3219E-04 2.6102E-04 - 5.0119E+01 2.3409E-03 1.6978E-03 2.2189E-04 1.7535E-04 - 5.6234E+01 1.6527E-03 1.1955E-03 1.4866E-04 1.1805E-04 - 6.3096E+01 1.1679E-03 8.3348E-04 9.7416E-05 7.8858E-05 - 7.0795E+01 8.2095E-04 5.8250E-04 6.5741E-05 5.2814E-05 - 7.9433E+01 5.7565E-04 4.1120E-04 4.4768E-05 3.4671E-05 - 8.9125E+01 4.0477E-04 2.8917E-04 2.9554E-05 2.3735E-05 - 1.0000E+02 2.8474E-04 1.9960E-04 1.9587E-05 1.5846E-05 - 1.1220E+02 1.9948E-04 1.3882E-04 1.3040E-05 1.0733E-05 - 1.2589E+02 1.4006E-04 9.6618E-05 8.6710E-06 7.2425E-06 - 1.4125E+02 9.7994E-05 6.7231E-05 5.8503E-06 4.7959E-06 - 1.5849E+02 6.8287E-05 4.6786E-05 4.0163E-06 3.1612E-06 - 1.7783E+02 4.7861E-05 3.2611E-05 2.7429E-06 2.1492E-06 - 1.9953E+02 3.3566E-05 2.2404E-05 1.8505E-06 1.4658E-06 - 2.2387E+02 2.3427E-05 1.5452E-05 1.2317E-06 1.0108E-06 - 2.5119E+02 1.6423E-05 1.0785E-05 8.4018E-07 6.6783E-07 - 2.8184E+02 1.1490E-05 7.4825E-06 5.6179E-07 4.5559E-07 - 3.1623E+02 7.9737E-06 5.2166E-06 3.7985E-07 3.0242E-07 - 3.5481E+02 5.5179E-06 3.5837E-06 2.5518E-07 2.0434E-07 - 3.9811E+02 3.8179E-06 2.4815E-06 1.7232E-07 1.3807E-07 - 4.4668E+02 2.6452E-06 1.7149E-06 1.1450E-07 9.3465E-08 - 5.0119E+02 1.8306E-06 1.1764E-06 7.4134E-08 6.3980E-08 - 5.6234E+02 1.2862E-06 8.1291E-07 5.2798E-08 4.2394E-08 - 6.3096E+02 8.8266E-07 5.5656E-07 3.5298E-08 2.7551E-08 - 7.0795E+02 6.0767E-07 3.7990E-07 2.3669E-08 1.8197E-08 - 7.9433E+02 4.1735E-07 2.5907E-07 1.6065E-08 1.2478E-08 - 8.9125E+02 2.8783E-07 1.7545E-07 1.1266E-08 8.5653E-09 - 1.0000E+03 1.9938E-07 1.2203E-07 7.3683E-09 5.7066E-09 - 1.1220E+03 1.3456E-07 8.2789E-08 4.7363E-09 3.6867E-09 - 1.2589E+03 9.1500E-08 5.5773E-08 3.2430E-09 2.5147E-09 - 1.4125E+03 6.2321E-08 3.7574E-08 2.1421E-09 1.6411E-09 - 1.5849E+03 4.2656E-08 2.5341E-08 1.4072E-09 1.0548E-09 - 1.7783E+03 2.8757E-08 1.7199E-08 9.1932E-10 7.2568E-10 - 1.9953E+03 1.9452E-08 1.1551E-08 6.2337E-10 4.8581E-10 - 2.2387E+03 1.3074E-08 7.6925E-09 4.2839E-10 3.2009E-10 - 2.5119E+03 8.7599E-09 5.1669E-09 2.7794E-10 2.0879E-10 - 2.8184E+03 5.9072E-09 3.4661E-09 1.8093E-10 1.3670E-10 - 3.1623E+03 4.0476E-09 2.3612E-09 1.2164E-10 9.6225E-11 - 3.5481E+03 2.6167E-09 1.5303E-09 8.0635E-11 6.4520E-11 - 3.9811E+03 1.7542E-09 1.0110E-09 5.3743E-11 3.8839E-11 - 4.4668E+03 1.1650E-09 6.6196E-10 3.5508E-11 2.3739E-11 - 5.0119E+03 7.7419E-10 4.4709E-10 2.4437E-11 1.5887E-11 - 5.6234E+03 5.1421E-10 2.9652E-10 1.6679E-11 1.0696E-11 - 6.3096E+03 3.4043E-10 1.9146E-10 1.0747E-11 7.2573E-12 - 7.0795E+03 2.2265E-10 1.2587E-10 6.9004E-12 4.8698E-12 - 7.9433E+03 1.4682E-10 8.2659E-11 4.3237E-12 3.0420E-12 - 8.9125E+03 9.7048E-11 5.4417E-11 2.7393E-12 2.1509E-12 - 1.0000E+04 6.4096E-11 3.5052E-11 1.8942E-12 1.5310E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2440E+03 3.3012E+03 1.5678E+03 1.5894E+03 - 1.1220E-01 2.9334E+03 3.0062E+03 1.4359E+03 1.4382E+03 - 1.2589E-01 2.6502E+03 2.7045E+03 1.2923E+03 1.2985E+03 - 1.4125E-01 2.3807E+03 2.4246E+03 1.1535E+03 1.1573E+03 - 1.5849E-01 2.1112E+03 2.1555E+03 1.0212E+03 1.0161E+03 - 1.7783E-01 1.8701E+03 1.8920E+03 9.0266E+02 8.8952E+02 - 1.9953E-01 1.6369E+03 1.6439E+03 7.9498E+02 7.6460E+02 - 2.2387E-01 1.4078E+03 1.4227E+03 6.8171E+02 6.5431E+02 - 2.5119E-01 1.2098E+03 1.2223E+03 5.8431E+02 5.6162E+02 - 2.8184E-01 1.0347E+03 1.0337E+03 5.0195E+02 4.7634E+02 - 3.1623E-01 8.7714E+02 8.6546E+02 4.2160E+02 4.0221E+02 - 3.5481E-01 7.3042E+02 7.2160E+02 3.5258E+02 3.3291E+02 - 3.9811E-01 6.0317E+02 6.0121E+02 2.9584E+02 2.7396E+02 - 4.4668E-01 5.0105E+02 4.9679E+02 2.4506E+02 2.2337E+02 - 5.0119E-01 4.1338E+02 4.0537E+02 1.9948E+02 1.8037E+02 - 5.6234E-01 3.3654E+02 3.2994E+02 1.6072E+02 1.4771E+02 - 6.3096E-01 2.7310E+02 2.6650E+02 1.2921E+02 1.1742E+02 - 7.0795E-01 2.2022E+02 2.1265E+02 1.0400E+02 9.1878E+01 - 7.9433E-01 1.7442E+02 1.6831E+02 8.3367E+01 7.3204E+01 - 8.9125E-01 1.3772E+02 1.3363E+02 6.5379E+01 5.7443E+01 - 1.0000E+00 1.0965E+02 1.0485E+02 5.0740E+01 4.3883E+01 - 1.1220E+00 8.6043E+01 8.1851E+01 3.9355E+01 3.3628E+01 - 1.2589E+00 6.7233E+01 6.3400E+01 3.0369E+01 2.5746E+01 - 1.4125E+00 5.1958E+01 4.8870E+01 2.3117E+01 1.9453E+01 - 1.5849E+00 4.0076E+01 3.7031E+01 1.7391E+01 1.4641E+01 - 1.7783E+00 3.0548E+01 2.7957E+01 1.3001E+01 1.0787E+01 - 1.9953E+00 2.3226E+01 2.0792E+01 9.6360E+00 7.8813E+00 - 2.2387E+00 1.7537E+01 1.5498E+01 7.0246E+00 5.8142E+00 - 2.5119E+00 1.3051E+01 1.1534E+01 5.1522E+00 4.2504E+00 - 2.8184E+00 9.6991E+00 8.5204E+00 3.7226E+00 3.0050E+00 - 3.1623E+00 7.1584E+00 6.2319E+00 2.6859E+00 2.1357E+00 - 3.5481E+00 5.2522E+00 4.5348E+00 1.9179E+00 1.5013E+00 - 3.9811E+00 3.8597E+00 3.2824E+00 1.3505E+00 1.0464E+00 - 4.4668E+00 2.8096E+00 2.3651E+00 9.5248E-01 7.2310E-01 - 5.0119E+00 2.0274E+00 1.6935E+00 6.5865E-01 4.9652E-01 - 5.6234E+00 1.4652E+00 1.2103E+00 4.5021E-01 3.4193E-01 - 6.3096E+00 1.0607E+00 8.7191E-01 3.0791E-01 2.3612E-01 - 7.0795E+00 7.6729E-01 6.2836E-01 2.1377E-01 1.5886E-01 - 7.9433E+00 5.4558E-01 4.4141E-01 1.4621E-01 1.0884E-01 - 8.9125E+00 3.8327E-01 3.0942E-01 9.8558E-02 7.2780E-02 - 1.0000E+01 2.7940E-01 2.2167E-01 6.4897E-02 4.8368E-02 - 1.1220E+01 1.9976E-01 1.5618E-01 4.3705E-02 3.2828E-02 - 1.2589E+01 1.4275E-01 1.1090E-01 2.9346E-02 2.2253E-02 - 1.4125E+01 1.0132E-01 7.8256E-02 1.9643E-02 1.4983E-02 - 1.5849E+01 7.1937E-02 5.5157E-02 1.2950E-02 9.9585E-03 - 1.7783E+01 5.1545E-02 3.8920E-02 8.6146E-03 6.4842E-03 - 1.9953E+01 3.6566E-02 2.7162E-02 5.7519E-03 4.2390E-03 - 2.2387E+01 2.5662E-02 1.9492E-02 3.8830E-03 2.9097E-03 - 2.5119E+01 1.8456E-02 1.4031E-02 2.5606E-03 1.9370E-03 - 2.8184E+01 1.3292E-02 9.8484E-03 1.6529E-03 1.2637E-03 - 3.1623E+01 9.3248E-03 6.9185E-03 1.1241E-03 8.8725E-04 - 3.5481E+01 6.6294E-03 4.8747E-03 7.4588E-04 5.9501E-04 - 3.9811E+01 4.6936E-03 3.4359E-03 4.9817E-04 3.9355E-04 - 4.4668E+01 3.3144E-03 2.4164E-03 3.3478E-04 2.6002E-04 - 5.0119E+01 2.3421E-03 1.7041E-03 2.2342E-04 1.7426E-04 - 5.6234E+01 1.6500E-03 1.1957E-03 1.4608E-04 1.1714E-04 - 6.3096E+01 1.1647E-03 8.3841E-04 9.7729E-05 7.8766E-05 - 7.0795E+01 8.2083E-04 5.8662E-04 6.6205E-05 5.2565E-05 - 7.9433E+01 5.7700E-04 4.0936E-04 4.4241E-05 3.5197E-05 - 8.9125E+01 4.0737E-04 2.8886E-04 2.8766E-05 2.4311E-05 - 1.0000E+02 2.8644E-04 2.0000E-04 1.9535E-05 1.5884E-05 - 1.1220E+02 2.0017E-04 1.3924E-04 1.3044E-05 1.0699E-05 - 1.2589E+02 1.4012E-04 9.7068E-05 8.8482E-06 7.2640E-06 - 1.4125E+02 9.7965E-05 6.7719E-05 5.9387E-06 4.8400E-06 - 1.5849E+02 6.8359E-05 4.7030E-05 3.9438E-06 3.2131E-06 - 1.7783E+02 4.8077E-05 3.2679E-05 2.6633E-06 2.1908E-06 - 1.9953E+02 3.3726E-05 2.2660E-05 1.8629E-06 1.4857E-06 - 2.2387E+02 2.3450E-05 1.5666E-05 1.2437E-06 1.0063E-06 - 2.5119E+02 1.6244E-05 1.0814E-05 8.1184E-07 6.7344E-07 - 2.8184E+02 1.1338E-05 7.4836E-06 5.6358E-07 4.5650E-07 - 3.1623E+02 7.9409E-06 5.1700E-06 3.8541E-07 3.0361E-07 - 3.5481E+02 5.5235E-06 3.5526E-06 2.6040E-07 2.0431E-07 - 3.9811E+02 3.8263E-06 2.4562E-06 1.7270E-07 1.3490E-07 - 4.4668E+02 2.6473E-06 1.7016E-06 1.1347E-07 9.0426E-08 - 5.0119E+02 1.8470E-06 1.1723E-06 7.6612E-08 6.2484E-08 - 5.6234E+02 1.2834E-06 8.0822E-07 5.2647E-08 4.1196E-08 - 6.3096E+02 8.8275E-07 5.4893E-07 3.5588E-08 2.6923E-08 - 7.0795E+02 6.0634E-07 3.7493E-07 2.4508E-08 1.8227E-08 - 7.9433E+02 4.1897E-07 2.5768E-07 1.6376E-08 1.2687E-08 - 8.9125E+02 2.8935E-07 1.7570E-07 1.1076E-08 8.7196E-09 - 1.0000E+03 1.9912E-07 1.2028E-07 7.3408E-09 5.6342E-09 - 1.1220E+03 1.3472E-07 8.1170E-08 4.7669E-09 3.5897E-09 - 1.2589E+03 9.2328E-08 5.4861E-08 3.0950E-09 2.4633E-09 - 1.4125E+03 6.2489E-08 3.7290E-08 2.0454E-09 1.7022E-09 - 1.5849E+03 4.2171E-08 2.5379E-08 1.4273E-09 1.0697E-09 - 1.7783E+03 2.8453E-08 1.7129E-08 1.0000E-09 7.1419E-10 - 1.9953E+03 1.9320E-08 1.1482E-08 6.7408E-10 4.7687E-10 - 2.2387E+03 1.2995E-08 7.6509E-09 4.4297E-10 3.1668E-10 - 2.5119E+03 8.7657E-09 5.1504E-09 2.7558E-10 2.1099E-10 - 2.8184E+03 5.9307E-09 3.4448E-09 1.9489E-10 1.2927E-10 - 3.1623E+03 4.0663E-09 2.3386E-09 1.2501E-10 8.9080E-11 - 3.5481E+03 2.6283E-09 1.5171E-09 8.1219E-11 6.0032E-11 - 3.9811E+03 1.7431E-09 1.0123E-09 5.4439E-11 3.9467E-11 - 4.4668E+03 1.1664E-09 6.7304E-10 3.5646E-11 2.5050E-11 - 5.0119E+03 7.7284E-10 4.4430E-10 2.3621E-11 1.5699E-11 - 5.6234E+03 5.0773E-10 2.9076E-10 1.5559E-11 1.1169E-11 - 6.3096E+03 3.4040E-10 1.9164E-10 1.0013E-11 6.9793E-12 - 7.0795E+03 2.2534E-10 1.2624E-10 6.2868E-12 4.8385E-12 - 7.9433E+03 1.4835E-10 8.1538E-11 4.3876E-12 2.9261E-12 - 8.9125E+03 9.7096E-11 5.3871E-11 2.8013E-12 1.9587E-12 - 1.0000E+04 6.4521E-11 3.6095E-11 1.7926E-12 1.3065E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2728E+03 3.3012E+03 1.5806E+03 1.6370E+03 - 1.1220E-01 2.9661E+03 2.9830E+03 1.4353E+03 1.4640E+03 - 1.2589E-01 2.6771E+03 2.6998E+03 1.2911E+03 1.3035E+03 - 1.4125E-01 2.3934E+03 2.4141E+03 1.1489E+03 1.1607E+03 - 1.5849E-01 2.1246E+03 2.1369E+03 1.0210E+03 1.0226E+03 - 1.7783E-01 1.8703E+03 1.8829E+03 9.0329E+02 8.8881E+02 - 1.9953E-01 1.6323E+03 1.6405E+03 7.9119E+02 7.6710E+02 - 2.2387E-01 1.4105E+03 1.4056E+03 6.7711E+02 6.6048E+02 - 2.5119E-01 1.2084E+03 1.2020E+03 5.8009E+02 5.6059E+02 - 2.8184E-01 1.0246E+03 1.0287E+03 4.9694E+02 4.7221E+02 - 3.1623E-01 8.6427E+02 8.6718E+02 4.1375E+02 3.9397E+02 - 3.5481E-01 7.2540E+02 7.1669E+02 3.4600E+02 3.2758E+02 - 3.9811E-01 6.0377E+02 5.9007E+02 2.8857E+02 2.7150E+02 - 4.4668E-01 4.9811E+02 4.9152E+02 2.3677E+02 2.2226E+02 - 5.0119E-01 4.0693E+02 4.0408E+02 1.9637E+02 1.8165E+02 - 5.6234E-01 3.3007E+02 3.2775E+02 1.6141E+02 1.4534E+02 - 6.3096E-01 2.6810E+02 2.6440E+02 1.2951E+02 1.1460E+02 - 7.0795E-01 2.1763E+02 2.1146E+02 1.0377E+02 9.1886E+01 - 7.9433E-01 1.7459E+02 1.6908E+02 8.2329E+01 7.2100E+01 - 8.9125E-01 1.3817E+02 1.3343E+02 6.4430E+01 5.6740E+01 - 1.0000E+00 1.0904E+02 1.0414E+02 5.0179E+01 4.3844E+01 - 1.1220E+00 8.5709E+01 8.1373E+01 3.8902E+01 3.3502E+01 - 1.2589E+00 6.6878E+01 6.2718E+01 2.9772E+01 2.5429E+01 - 1.4125E+00 5.2056E+01 4.8071E+01 2.2761E+01 1.9219E+01 - 1.5849E+00 4.0102E+01 3.6784E+01 1.7189E+01 1.4476E+01 - 1.7783E+00 3.0417E+01 2.7921E+01 1.2904E+01 1.0758E+01 - 1.9953E+00 2.2884E+01 2.1030E+01 9.6752E+00 7.8858E+00 - 2.2387E+00 1.7301E+01 1.5570E+01 7.0751E+00 5.7658E+00 - 2.5119E+00 1.3047E+01 1.1521E+01 5.0943E+00 4.1524E+00 - 2.8184E+00 9.7540E+00 8.5597E+00 3.7020E+00 2.9948E+00 - 3.1623E+00 7.1864E+00 6.2542E+00 2.6871E+00 2.1004E+00 - 3.5481E+00 5.2843E+00 4.5458E+00 1.9155E+00 1.4911E+00 - 3.9811E+00 3.8586E+00 3.2960E+00 1.3511E+00 1.0453E+00 - 4.4668E+00 2.8051E+00 2.3694E+00 9.4336E-01 7.2039E-01 - 5.0119E+00 2.0295E+00 1.7070E+00 6.5320E-01 4.9535E-01 - 5.6234E+00 1.4709E+00 1.2208E+00 4.5512E-01 3.4867E-01 - 6.3096E+00 1.0694E+00 8.7797E-01 3.1070E-01 2.4003E-01 - 7.0795E+00 7.6444E-01 6.3100E-01 2.0850E-01 1.5962E-01 - 7.9433E+00 5.4212E-01 4.4743E-01 1.4007E-01 1.0830E-01 - 8.9125E+00 3.9054E-01 3.0902E-01 9.5372E-02 7.2403E-02 - 1.0000E+01 2.7988E-01 2.2133E-01 6.5865E-02 4.8903E-02 - 1.1220E+01 1.9969E-01 1.5735E-01 4.4061E-02 3.2804E-02 - 1.2589E+01 1.4255E-01 1.1132E-01 2.9317E-02 2.2095E-02 - 1.4125E+01 1.0182E-01 7.8980E-02 1.9481E-02 1.4545E-02 - 1.5849E+01 7.2358E-02 5.5772E-02 1.2883E-02 9.7776E-03 - 1.7783E+01 5.1219E-02 3.9423E-02 8.6173E-03 6.5819E-03 - 1.9953E+01 3.6659E-02 2.7665E-02 5.7502E-03 4.2775E-03 - 2.2387E+01 2.5843E-02 1.9446E-02 3.9039E-03 2.8513E-03 - 2.5119E+01 1.8006E-02 1.3823E-02 2.5057E-03 1.9663E-03 - 2.8184E+01 1.2863E-02 9.8788E-03 1.6551E-03 1.3142E-03 - 3.1623E+01 9.3273E-03 6.9303E-03 1.1269E-03 8.8260E-04 - 3.5481E+01 6.6126E-03 4.9006E-03 7.5463E-04 5.8899E-04 - 3.9811E+01 4.6845E-03 3.4522E-03 5.0166E-04 3.9131E-04 - 4.4668E+01 3.3173E-03 2.4226E-03 3.3244E-04 2.6060E-04 - 5.0119E+01 2.3397E-03 1.7016E-03 2.2086E-04 1.7426E-04 - 5.6234E+01 1.6462E-03 1.1886E-03 1.4687E-04 1.1703E-04 - 6.3096E+01 1.1601E-03 8.3415E-04 9.9152E-05 7.7587E-05 - 7.0795E+01 8.2093E-04 5.8424E-04 6.6388E-05 5.1741E-05 - 7.9433E+01 5.8016E-04 4.1062E-04 4.4870E-05 3.4918E-05 - 8.9125E+01 4.0713E-04 2.8830E-04 3.0410E-05 2.3662E-05 - 1.0000E+02 2.8560E-04 1.9948E-04 1.9768E-05 1.5924E-05 - 1.1220E+02 2.0049E-04 1.3972E-04 1.3233E-05 1.0755E-05 - 1.2589E+02 1.4024E-04 9.7210E-05 8.8377E-06 7.2227E-06 - 1.4125E+02 9.8182E-05 6.7492E-05 5.9406E-06 4.7561E-06 - 1.5849E+02 6.8676E-05 4.6804E-05 3.9663E-06 3.1884E-06 - 1.7783E+02 4.7975E-05 3.2479E-05 2.6831E-06 2.2432E-06 - 1.9953E+02 3.3343E-05 2.2514E-05 1.8463E-06 1.5188E-06 - 2.2387E+02 2.3418E-05 1.5637E-05 1.2574E-06 1.0267E-06 - 2.5119E+02 1.6458E-05 1.1028E-05 8.3235E-07 6.8457E-07 - 2.8184E+02 1.1460E-05 7.5604E-06 5.5445E-07 4.3724E-07 - 3.1623E+02 7.9676E-06 5.1991E-06 3.7956E-07 3.0114E-07 - 3.5481E+02 5.5305E-06 3.5833E-06 2.5962E-07 2.0794E-07 - 3.9811E+02 3.8397E-06 2.4722E-06 1.7533E-07 1.3983E-07 - 4.4668E+02 2.6696E-06 1.6981E-06 1.1684E-07 9.2682E-08 - 5.0119E+02 1.8607E-06 1.1686E-06 7.8862E-08 6.2358E-08 - 5.6234E+02 1.2868E-06 8.0847E-07 5.3155E-08 4.2951E-08 - 6.3096E+02 8.7828E-07 5.5107E-07 3.5917E-08 2.8402E-08 - 7.0795E+02 6.0694E-07 3.7812E-07 2.3746E-08 1.8905E-08 - 7.9433E+02 4.1991E-07 2.5929E-07 1.5866E-08 1.3124E-08 - 8.9125E+02 2.8724E-07 1.7645E-07 1.0634E-08 8.6149E-09 - 1.0000E+03 1.9862E-07 1.2116E-07 7.2151E-09 5.6644E-09 - 1.1220E+03 1.3413E-07 8.1022E-08 4.9020E-09 3.7690E-09 - 1.2589E+03 9.0921E-08 5.5031E-08 3.2892E-09 2.5289E-09 - 1.4125E+03 6.2007E-08 3.7154E-08 2.2465E-09 1.6644E-09 - 1.5849E+03 4.2178E-08 2.4923E-08 1.4847E-09 1.0239E-09 - 1.7783E+03 2.8711E-08 1.6860E-08 9.7082E-10 6.6191E-10 - 1.9953E+03 1.9451E-08 1.1481E-08 6.4414E-10 4.8277E-10 - 2.2387E+03 1.2998E-08 7.6246E-09 4.2547E-10 3.1395E-10 - 2.5119E+03 8.6639E-09 5.0615E-09 2.8122E-10 2.0824E-10 - 2.8184E+03 5.7933E-09 3.3681E-09 1.8320E-10 1.3064E-10 - 3.1623E+03 4.0347E-09 2.3084E-09 1.1874E-10 8.5379E-11 - 3.5481E+03 2.6424E-09 1.5044E-09 7.7276E-11 5.6522E-11 - 3.9811E+03 1.7545E-09 1.0023E-09 5.0770E-11 4.0201E-11 - 4.4668E+03 1.1756E-09 6.6156E-10 3.3402E-11 2.3492E-11 - 5.0119E+03 7.8557E-10 4.3799E-10 2.2078E-11 1.4831E-11 - 5.6234E+03 5.0805E-10 2.8880E-10 1.5050E-11 1.1002E-11 - 6.3096E+03 3.3839E-10 1.9161E-10 1.0379E-11 6.9428E-12 - 7.0795E+03 2.2507E-10 1.2723E-10 6.3852E-12 4.2232E-12 - 7.9433E+03 1.4744E-10 8.3403E-11 4.1873E-12 2.9271E-12 - 8.9125E+03 9.6556E-11 5.3841E-11 2.8062E-12 1.9557E-12 - 1.0000E+04 6.4083E-11 3.5331E-11 1.9617E-12 1.3903E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5818E+03 3.6385E+03 1.7303E+03 1.7756E+03 - 1.1220E-01 3.2452E+03 3.2823E+03 1.5763E+03 1.5899E+03 - 1.2589E-01 2.9242E+03 2.9498E+03 1.4214E+03 1.4085E+03 - 1.4125E-01 2.5973E+03 2.6466E+03 1.2649E+03 1.2612E+03 - 1.5849E-01 2.2983E+03 2.3328E+03 1.1191E+03 1.1077E+03 - 1.7783E-01 2.0359E+03 2.0360E+03 9.8489E+02 9.5749E+02 - 1.9953E-01 1.7717E+03 1.7780E+03 8.5335E+02 8.2950E+02 - 2.2387E-01 1.5198E+03 1.5286E+03 7.4369E+02 7.0833E+02 - 2.5119E-01 1.3017E+03 1.3000E+03 6.3883E+02 6.0105E+02 - 2.8184E-01 1.1101E+03 1.0978E+03 5.3434E+02 5.1030E+02 - 3.1623E-01 9.3462E+02 9.2192E+02 4.5332E+02 4.2614E+02 - 3.5481E-01 7.7584E+02 7.7105E+02 3.8038E+02 3.5093E+02 - 3.9811E-01 6.4130E+02 6.3976E+02 3.1318E+02 2.9105E+02 - 4.4668E-01 5.2818E+02 5.2638E+02 2.5830E+02 2.3883E+02 - 5.0119E-01 4.3366E+02 4.2941E+02 2.1150E+02 1.9163E+02 - 5.6234E-01 3.5521E+02 3.4772E+02 1.6973E+02 1.5299E+02 - 6.3096E-01 2.8731E+02 2.7790E+02 1.3596E+02 1.2175E+02 - 7.0795E-01 2.2829E+02 2.2125E+02 1.0987E+02 9.6410E+01 - 7.9433E-01 1.8114E+02 1.7695E+02 8.7503E+01 7.5338E+01 - 8.9125E-01 1.4476E+02 1.3980E+02 6.7722E+01 5.8369E+01 - 1.0000E+00 1.1366E+02 1.0911E+02 5.2602E+01 4.5684E+01 - 1.1220E+00 8.8439E+01 8.4543E+01 4.0661E+01 3.5133E+01 - 1.2589E+00 6.9133E+01 6.5599E+01 3.1411E+01 2.6755E+01 - 1.4125E+00 5.3619E+01 5.0084E+01 2.4129E+01 2.0139E+01 - 1.5849E+00 4.0791E+01 3.7826E+01 1.8063E+01 1.4993E+01 - 1.7783E+00 3.1009E+01 2.8665E+01 1.3389E+01 1.0965E+01 - 1.9953E+00 2.3567E+01 2.1357E+01 9.8914E+00 7.9898E+00 - 2.2387E+00 1.7658E+01 1.5741E+01 7.2120E+00 5.8556E+00 - 2.5119E+00 1.3095E+01 1.1735E+01 5.2787E+00 4.2912E+00 - 2.8184E+00 9.7098E+00 8.6372E+00 3.8550E+00 3.0702E+00 - 3.1623E+00 7.2110E+00 6.2605E+00 2.7310E+00 2.1337E+00 - 3.5481E+00 5.3111E+00 4.5610E+00 1.9371E+00 1.5102E+00 - 3.9811E+00 3.8665E+00 3.3060E+00 1.3641E+00 1.0524E+00 - 4.4668E+00 2.8007E+00 2.3818E+00 9.4304E-01 7.2338E-01 - 5.0119E+00 2.0276E+00 1.7033E+00 6.5259E-01 4.9961E-01 - 5.6234E+00 1.4611E+00 1.2182E+00 4.5279E-01 3.4344E-01 - 6.3096E+00 1.0517E+00 8.6401E-01 3.1067E-01 2.3495E-01 - 7.0795E+00 7.5369E-01 6.1081E-01 2.1166E-01 1.5835E-01 - 7.9433E+00 5.4297E-01 4.3846E-01 1.4413E-01 1.0695E-01 - 8.9125E+00 3.9017E-01 3.1038E-01 9.6750E-02 7.2972E-02 - 1.0000E+01 2.8023E-01 2.2165E-01 6.5354E-02 4.8205E-02 - 1.1220E+01 2.0018E-01 1.5728E-01 4.4316E-02 3.2194E-02 - 1.2589E+01 1.4255E-01 1.1091E-01 2.9433E-02 2.2327E-02 - 1.4125E+01 1.0113E-01 7.8536E-02 1.9450E-02 1.5130E-02 - 1.5849E+01 7.1944E-02 5.6085E-02 1.2950E-02 9.9110E-03 - 1.7783E+01 5.1535E-02 3.9703E-02 8.5640E-03 6.6290E-03 - 1.9953E+01 3.6768E-02 2.7861E-02 5.7237E-03 4.4113E-03 - 2.2387E+01 2.6486E-02 1.9677E-02 3.8100E-03 2.9173E-03 - 2.5119E+01 1.8761E-02 1.3730E-02 2.6150E-03 2.0103E-03 - 2.8184E+01 1.3096E-02 9.8099E-03 1.7144E-03 1.3972E-03 - 3.1623E+01 9.3349E-03 6.9355E-03 1.1301E-03 8.7412E-04 - 3.5481E+01 6.6148E-03 4.8870E-03 7.4768E-04 5.8584E-04 - 3.9811E+01 4.6833E-03 3.4492E-03 4.9786E-04 3.9156E-04 - 4.4668E+01 3.3009E-03 2.4175E-03 3.3005E-04 2.5894E-04 - 5.0119E+01 2.3409E-03 1.6902E-03 2.2059E-04 1.7278E-04 - 5.6234E+01 1.6527E-03 1.1879E-03 1.4701E-04 1.1811E-04 - 6.3096E+01 1.1656E-03 8.3423E-04 9.7537E-05 7.8501E-05 - 7.0795E+01 8.2066E-04 5.8489E-04 6.4424E-05 5.1487E-05 - 7.9433E+01 5.7742E-04 4.0932E-04 4.4019E-05 3.4802E-05 - 8.9125E+01 4.0583E-04 2.8284E-04 2.9606E-05 2.3531E-05 - 1.0000E+02 2.8545E-04 1.9955E-04 1.9347E-05 1.5874E-05 - 1.1220E+02 1.9967E-04 1.3856E-04 1.3064E-05 1.0799E-05 - 1.2589E+02 1.4008E-04 9.6520E-05 8.9550E-06 7.2385E-06 - 1.4125E+02 9.8308E-05 6.7118E-05 6.0023E-06 4.8470E-06 - 1.5849E+02 6.8749E-05 4.6879E-05 4.0202E-06 3.2172E-06 - 1.7783E+02 4.8058E-05 3.2759E-05 2.7292E-06 2.2117E-06 - 1.9953E+02 3.3560E-05 2.2594E-05 1.8151E-06 1.5395E-06 - 2.2387E+02 2.3410E-05 1.5644E-05 1.2285E-06 9.9937E-07 - 2.5119E+02 1.6285E-05 1.0862E-05 8.2823E-07 6.5268E-07 - 2.8184E+02 1.1305E-05 7.5437E-06 5.5220E-07 4.4925E-07 - 3.1623E+02 7.9180E-06 5.1978E-06 3.8046E-07 3.0207E-07 - 3.5481E+02 5.5250E-06 3.5829E-06 2.5304E-07 2.0008E-07 - 3.9811E+02 3.8500E-06 2.4563E-06 1.7343E-07 1.3564E-07 - 4.4668E+02 2.6513E-06 1.6857E-06 1.2026E-07 9.1717E-08 - 5.0119E+02 1.8362E-06 1.1673E-06 7.9081E-08 6.1560E-08 - 5.6234E+02 1.2794E-06 8.0641E-07 5.2316E-08 4.1187E-08 - 6.3096E+02 8.8053E-07 5.5104E-07 3.5523E-08 2.7500E-08 - 7.0795E+02 6.0817E-07 3.7818E-07 2.3879E-08 1.8567E-08 - 7.9433E+02 4.1643E-07 2.5885E-07 1.6005E-08 1.2698E-08 - 8.9125E+02 2.8710E-07 1.7585E-07 1.0802E-08 8.6095E-09 - 1.0000E+03 1.9823E-07 1.1979E-07 7.2176E-09 5.6441E-09 - 1.1220E+03 1.3492E-07 8.0733E-08 4.9591E-09 3.7009E-09 - 1.2589E+03 9.2334E-08 5.5148E-08 3.1823E-09 2.4475E-09 - 1.4125E+03 6.2291E-08 3.7621E-08 2.0414E-09 1.5943E-09 - 1.5849E+03 4.2065E-08 2.5557E-08 1.4312E-09 1.0508E-09 - 1.7783E+03 2.8461E-08 1.7026E-08 9.4529E-10 6.9809E-10 - 1.9953E+03 1.9339E-08 1.1411E-08 6.1393E-10 4.4019E-10 - 2.2387E+03 1.3009E-08 7.7131E-09 4.4141E-10 2.9517E-10 - 2.5119E+03 8.6896E-09 5.1496E-09 2.9480E-10 2.0977E-10 - 2.8184E+03 5.8498E-09 3.4294E-09 1.9170E-10 1.3674E-10 - 3.1623E+03 4.0480E-09 2.3602E-09 1.1816E-10 8.9039E-11 - 3.5481E+03 2.6149E-09 1.5142E-09 8.1180E-11 5.9198E-11 - 3.9811E+03 1.7538E-09 1.0027E-09 5.3493E-11 4.0696E-11 - 4.4668E+03 1.1703E-09 6.6207E-10 3.3661E-11 2.6973E-11 - 5.0119E+03 7.7188E-10 4.3514E-10 2.2931E-11 1.6379E-11 - 5.6234E+03 5.0843E-10 2.8262E-10 1.4345E-11 1.0639E-11 - 6.3096E+03 3.3657E-10 1.8787E-10 9.9494E-12 7.3153E-12 - 7.0795E+03 2.2176E-10 1.2545E-10 6.4355E-12 4.6816E-12 - 7.9433E+03 1.4715E-10 8.2632E-11 3.9702E-12 2.8105E-12 - 8.9125E+03 9.8014E-11 5.4832E-11 2.7295E-12 1.8781E-12 - 1.0000E+04 6.4633E-11 3.5567E-11 1.8613E-12 1.3331E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.0580E+03 4.1304E+03 1.9775E+03 2.0010E+03 - 1.1220E-01 3.6742E+03 3.7496E+03 1.7853E+03 1.8029E+03 - 1.2589E-01 3.3001E+03 3.3697E+03 1.5873E+03 1.6169E+03 - 1.4125E-01 2.9710E+03 2.9913E+03 1.4292E+03 1.4250E+03 - 1.5849E-01 2.6433E+03 2.6502E+03 1.2727E+03 1.2510E+03 - 1.7783E-01 2.3142E+03 2.3242E+03 1.1167E+03 1.0911E+03 - 1.9953E-01 2.0065E+03 2.0069E+03 9.6981E+02 9.3363E+02 - 2.2387E-01 1.7411E+03 1.7281E+03 8.3456E+02 7.9976E+02 - 2.5119E-01 1.4915E+03 1.4827E+03 7.1821E+02 6.8194E+02 - 2.8184E-01 1.2528E+03 1.2530E+03 6.0630E+02 5.7403E+02 - 3.1623E-01 1.0476E+03 1.0455E+03 5.0935E+02 4.8002E+02 - 3.5481E-01 8.7158E+02 8.6784E+02 4.3061E+02 3.9563E+02 - 3.9811E-01 7.2258E+02 7.1516E+02 3.5672E+02 3.2092E+02 - 4.4668E-01 5.9217E+02 5.8683E+02 2.9098E+02 2.6012E+02 - 5.0119E-01 4.8291E+02 4.7768E+02 2.3546E+02 2.1133E+02 - 5.6234E-01 3.9224E+02 3.8601E+02 1.8783E+02 1.6859E+02 - 6.3096E-01 3.1504E+02 3.0825E+02 1.5175E+02 1.3507E+02 - 7.0795E-01 2.5091E+02 2.4388E+02 1.2122E+02 1.0722E+02 - 7.9433E-01 1.9791E+02 1.9134E+02 9.4059E+01 8.2883E+01 - 8.9125E-01 1.5555E+02 1.5008E+02 7.3918E+01 6.4299E+01 - 1.0000E+00 1.2169E+02 1.1697E+02 5.7574E+01 4.9566E+01 - 1.1220E+00 9.4456E+01 9.0312E+01 4.4019E+01 3.7377E+01 - 1.2589E+00 7.3238E+01 6.8872E+01 3.3531E+01 2.8065E+01 - 1.4125E+00 5.6171E+01 5.2407E+01 2.5463E+01 2.1037E+01 - 1.5849E+00 4.2842E+01 3.9722E+01 1.9008E+01 1.5581E+01 - 1.7783E+00 3.2567E+01 2.9836E+01 1.4012E+01 1.1407E+01 - 1.9953E+00 2.4663E+01 2.2132E+01 1.0342E+01 8.3214E+00 - 2.2387E+00 1.8504E+01 1.6383E+01 7.5259E+00 6.0661E+00 - 2.5119E+00 1.3597E+01 1.2090E+01 5.3895E+00 4.3540E+00 - 2.8184E+00 1.0010E+01 8.8248E+00 3.8655E+00 3.0771E+00 - 3.1623E+00 7.3577E+00 6.3916E+00 2.7842E+00 2.1579E+00 - 3.5481E+00 5.4100E+00 4.6325E+00 1.9748E+00 1.5214E+00 - 3.9811E+00 3.9471E+00 3.3379E+00 1.3806E+00 1.0659E+00 - 4.4668E+00 2.8504E+00 2.3986E+00 9.6374E-01 7.4206E-01 - 5.0119E+00 2.0477E+00 1.7274E+00 6.6707E-01 5.0947E-01 - 5.6234E+00 1.4796E+00 1.2329E+00 4.5655E-01 3.4835E-01 - 6.3096E+00 1.0653E+00 8.7761E-01 3.1435E-01 2.3630E-01 - 7.0795E+00 7.6414E-01 6.2380E-01 2.1342E-01 1.6004E-01 - 7.9433E+00 5.5487E-01 4.3920E-01 1.4311E-01 1.0790E-01 - 8.9125E+00 3.9545E-01 3.0829E-01 9.6959E-02 7.3032E-02 - 1.0000E+01 2.7896E-01 2.2170E-01 6.5530E-02 4.9560E-02 - 1.1220E+01 1.9945E-01 1.5651E-01 4.4208E-02 3.3172E-02 - 1.2589E+01 1.4267E-01 1.1036E-01 2.9443E-02 2.2190E-02 - 1.4125E+01 1.0191E-01 7.8549E-02 1.9539E-02 1.4871E-02 - 1.5849E+01 7.2574E-02 5.6135E-02 1.2967E-02 9.9130E-03 - 1.7783E+01 5.1739E-02 3.9357E-02 8.4783E-03 6.6863E-03 - 1.9953E+01 3.6602E-02 2.7505E-02 5.7175E-03 4.4359E-03 - 2.2387E+01 2.5968E-02 1.9320E-02 3.8889E-03 2.9613E-03 - 2.5119E+01 1.8535E-02 1.3699E-02 2.5745E-03 1.9834E-03 - 2.8184E+01 1.3104E-02 9.7976E-03 1.7943E-03 1.3053E-03 - 3.1623E+01 9.3539E-03 6.9426E-03 1.1245E-03 8.7438E-04 - 3.5481E+01 6.6337E-03 4.8958E-03 7.4730E-04 5.8698E-04 - 3.9811E+01 4.6842E-03 3.4421E-03 4.9756E-04 3.9173E-04 - 4.4668E+01 3.3072E-03 2.4161E-03 3.2997E-04 2.5985E-04 - 5.0119E+01 2.3400E-03 1.6920E-03 2.2036E-04 1.7441E-04 - 5.6234E+01 1.6477E-03 1.1889E-03 1.4713E-04 1.1648E-04 - 6.3096E+01 1.1603E-03 8.4190E-04 9.9112E-05 7.7072E-05 - 7.0795E+01 8.1951E-04 5.8979E-04 6.6474E-05 5.1929E-05 - 7.9433E+01 5.7534E-04 4.1133E-04 4.4182E-05 3.5042E-05 - 8.9125E+01 4.0375E-04 2.8600E-04 2.9614E-05 2.3796E-05 - 1.0000E+02 2.8543E-04 1.9966E-04 1.9393E-05 1.5879E-05 - 1.1220E+02 2.0058E-04 1.3945E-04 1.3123E-05 1.0709E-05 - 1.2589E+02 1.4020E-04 9.7383E-05 8.8749E-06 7.2164E-06 - 1.4125E+02 9.7738E-05 6.7875E-05 5.9795E-06 4.7328E-06 - 1.5849E+02 6.8291E-05 4.6953E-05 4.0133E-06 3.2692E-06 - 1.7783E+02 4.8031E-05 3.2356E-05 2.7165E-06 2.2396E-06 - 1.9953E+02 3.3628E-05 2.2510E-05 1.8390E-06 1.4417E-06 - 2.2387E+02 2.3366E-05 1.5648E-05 1.2371E-06 9.5768E-07 - 2.5119E+02 1.6242E-05 1.0772E-05 8.3485E-07 6.5336E-07 - 2.8184E+02 1.1365E-05 7.4157E-06 5.6969E-07 4.4750E-07 - 3.1623E+02 7.9429E-06 5.1867E-06 3.9147E-07 3.0441E-07 - 3.5481E+02 5.5132E-06 3.5797E-06 2.6651E-07 2.1042E-07 - 3.9811E+02 3.8268E-06 2.4771E-06 1.7696E-07 1.4140E-07 - 4.4668E+02 2.6607E-06 1.7080E-06 1.1840E-07 9.2098E-08 - 5.0119E+02 1.8470E-06 1.1691E-06 7.8713E-08 6.1036E-08 - 5.6234E+02 1.2870E-06 8.0529E-07 5.2950E-08 4.1384E-08 - 6.3096E+02 8.8477E-07 5.4977E-07 3.4765E-08 2.7688E-08 - 7.0795E+02 6.0698E-07 3.7678E-07 2.3577E-08 1.8635E-08 - 7.9433E+02 4.1688E-07 2.5850E-07 1.6042E-08 1.2964E-08 - 8.9125E+02 2.8623E-07 1.7742E-07 1.0776E-08 8.4844E-09 - 1.0000E+03 1.9747E-07 1.2058E-07 7.1351E-09 5.5067E-09 - 1.1220E+03 1.3480E-07 8.1269E-08 4.7177E-09 3.8158E-09 - 1.2589E+03 9.1676E-08 5.5437E-08 3.2283E-09 2.6164E-09 - 1.4125E+03 6.1974E-08 3.7146E-08 2.1482E-09 1.7266E-09 - 1.5849E+03 4.2142E-08 2.5337E-08 1.4397E-09 1.0708E-09 - 1.7783E+03 2.8568E-08 1.7242E-08 9.4331E-10 7.3459E-10 - 1.9953E+03 1.9313E-08 1.1366E-08 6.4145E-10 4.9691E-10 - 2.2387E+03 1.3097E-08 7.6598E-09 4.5154E-10 3.0237E-10 - 2.5119E+03 8.7418E-09 5.1721E-09 3.1717E-10 2.0372E-10 - 2.8184E+03 5.8407E-09 3.4194E-09 1.9595E-10 1.3272E-10 - 3.1623E+03 4.0284E-09 2.3308E-09 1.1769E-10 8.6960E-11 - 3.5481E+03 2.6061E-09 1.5102E-09 7.6788E-11 5.6589E-11 - 3.9811E+03 1.7402E-09 9.9550E-10 5.1454E-11 3.8706E-11 - 4.4668E+03 1.1661E-09 6.5379E-10 3.3411E-11 2.5636E-11 - 5.0119E+03 7.8058E-10 4.2857E-10 2.3970E-11 1.7871E-11 - 5.6234E+03 5.1457E-10 2.8438E-10 1.6857E-11 1.1569E-11 - 6.3096E+03 3.3863E-10 1.8881E-10 9.9897E-12 7.2962E-12 - 7.0795E+03 2.2516E-10 1.2452E-10 5.9967E-12 4.1821E-12 - 7.9433E+03 1.4827E-10 8.2200E-11 3.9976E-12 2.7329E-12 - 8.9125E+03 9.7257E-11 5.3764E-11 2.8408E-12 2.0075E-12 - 1.0000E+04 6.3267E-11 3.5325E-11 1.9227E-12 1.3174E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.1077E+03 4.1287E+03 1.9724E+03 2.0257E+03 - 1.1220E-01 3.7037E+03 3.7228E+03 1.7774E+03 1.8212E+03 - 1.2589E-01 3.3124E+03 3.3330E+03 1.5921E+03 1.6073E+03 - 1.4125E-01 2.9602E+03 2.9591E+03 1.4054E+03 1.4178E+03 - 1.5849E-01 2.6320E+03 2.6092E+03 1.2413E+03 1.2382E+03 - 1.7783E-01 2.2917E+03 2.2733E+03 1.0993E+03 1.0650E+03 - 1.9953E-01 1.9856E+03 1.9689E+03 9.5250E+02 9.2317E+02 - 2.2387E-01 1.7154E+03 1.6929E+03 8.1286E+02 7.9487E+02 - 2.5119E-01 1.4545E+03 1.4386E+03 6.9694E+02 6.7277E+02 - 2.8184E-01 1.2217E+03 1.2174E+03 5.8913E+02 5.6155E+02 - 3.1623E-01 1.0232E+03 1.0216E+03 4.8950E+02 4.6613E+02 - 3.5481E-01 8.5173E+02 8.4749E+02 4.1030E+02 3.8601E+02 - 3.9811E-01 7.0372E+02 7.0046E+02 3.4328E+02 3.1618E+02 - 4.4668E-01 5.7668E+02 5.7397E+02 2.8148E+02 2.5705E+02 - 5.0119E-01 4.7133E+02 4.6339E+02 2.2790E+02 2.0698E+02 - 5.6234E-01 3.8288E+02 3.7217E+02 1.8278E+02 1.6601E+02 - 6.3096E-01 3.0590E+02 2.9876E+02 1.4760E+02 1.3162E+02 - 7.0795E-01 2.4256E+02 2.3575E+02 1.1800E+02 1.0289E+02 - 7.9433E-01 1.9352E+02 1.8533E+02 9.2593E+01 8.0964E+01 - 8.9125E-01 1.5255E+02 1.4565E+02 7.1598E+01 6.2928E+01 - 1.0000E+00 1.1978E+02 1.1376E+02 5.5718E+01 4.8342E+01 - 1.1220E+00 9.3494E+01 8.8414E+01 4.3047E+01 3.6830E+01 - 1.2589E+00 7.1970E+01 6.7722E+01 3.2897E+01 2.7644E+01 - 1.4125E+00 5.5198E+01 5.1612E+01 2.4594E+01 2.0769E+01 - 1.5849E+00 4.2171E+01 3.9198E+01 1.8482E+01 1.5483E+01 - 1.7783E+00 3.2053E+01 2.9250E+01 1.3850E+01 1.1343E+01 - 1.9953E+00 2.4233E+01 2.1874E+01 1.0220E+01 8.2541E+00 - 2.2387E+00 1.8082E+01 1.6311E+01 7.5222E+00 5.9334E+00 - 2.5119E+00 1.3333E+01 1.2070E+01 5.4668E+00 4.1909E+00 - 2.8184E+00 9.9137E+00 8.8026E+00 3.9067E+00 2.9835E+00 - 3.1623E+00 7.3426E+00 6.3513E+00 2.7746E+00 2.1369E+00 - 3.5481E+00 5.3723E+00 4.5978E+00 1.9524E+00 1.5163E+00 - 3.9811E+00 3.8909E+00 3.3309E+00 1.3723E+00 1.0618E+00 - 4.4668E+00 2.8235E+00 2.3963E+00 9.5345E-01 7.3158E-01 - 5.0119E+00 2.0469E+00 1.7181E+00 6.6223E-01 5.0580E-01 - 5.6234E+00 1.4780E+00 1.2274E+00 4.5550E-01 3.4236E-01 - 6.3096E+00 1.0631E+00 8.7050E-01 3.0893E-01 2.3436E-01 - 7.0795E+00 7.5938E-01 6.1544E-01 2.1244E-01 1.6056E-01 - 7.9433E+00 5.4204E-01 4.3971E-01 1.4539E-01 1.0730E-01 - 8.9125E+00 3.8616E-01 3.1058E-01 9.5980E-02 7.4091E-02 - 1.0000E+01 2.7850E-01 2.2137E-01 6.4436E-02 4.8896E-02 - 1.1220E+01 1.9901E-01 1.5603E-01 4.3578E-02 3.2709E-02 - 1.2589E+01 1.4240E-01 1.1057E-01 2.9224E-02 2.2062E-02 - 1.4125E+01 1.0176E-01 7.8406E-02 1.9775E-02 1.4655E-02 - 1.5849E+01 7.2194E-02 5.4906E-02 1.3077E-02 9.6778E-03 - 1.7783E+01 5.1163E-02 3.9043E-02 8.6355E-03 6.5093E-03 - 1.9953E+01 3.6630E-02 2.8051E-02 5.6971E-03 4.3726E-03 - 2.2387E+01 2.6198E-02 1.9739E-02 3.7948E-03 2.8696E-03 - 2.5119E+01 1.8651E-02 1.3995E-02 2.5590E-03 1.9345E-03 - 2.8184E+01 1.3145E-02 9.8829E-03 1.7215E-03 1.2845E-03 - 3.1623E+01 9.3247E-03 6.9403E-03 1.1205E-03 8.7984E-04 - 3.5481E+01 6.6324E-03 4.8982E-03 7.4927E-04 5.8729E-04 - 3.9811E+01 4.6929E-03 3.4475E-03 4.9991E-04 3.8908E-04 - 4.4668E+01 3.3139E-03 2.4197E-03 3.3266E-04 2.5920E-04 - 5.0119E+01 2.3403E-03 1.7019E-03 2.1908E-04 1.7544E-04 - 5.6234E+01 1.6553E-03 1.1980E-03 1.4576E-04 1.1577E-04 - 6.3096E+01 1.1721E-03 8.3839E-04 9.8535E-05 7.7200E-05 - 7.0795E+01 8.2368E-04 5.8456E-04 6.5514E-05 5.3186E-05 - 7.9433E+01 5.7698E-04 4.0949E-04 4.3156E-05 3.5664E-05 - 8.9125E+01 4.0516E-04 2.8453E-04 2.9332E-05 2.3150E-05 - 1.0000E+02 2.8589E-04 1.9892E-04 1.9495E-05 1.5790E-05 - 1.1220E+02 1.9958E-04 1.3890E-04 1.3092E-05 1.0654E-05 - 1.2589E+02 1.3899E-04 9.6652E-05 8.9121E-06 7.2720E-06 - 1.4125E+02 9.7735E-05 6.7101E-05 5.9483E-06 4.8852E-06 - 1.5849E+02 6.8535E-05 4.6673E-05 3.9377E-06 3.2390E-06 - 1.7783E+02 4.8018E-05 3.2383E-05 2.6732E-06 2.1992E-06 - 1.9953E+02 3.3630E-05 2.2534E-05 1.8214E-06 1.4911E-06 - 2.2387E+02 2.3511E-05 1.5645E-05 1.2411E-06 1.0109E-06 - 2.5119E+02 1.6360E-05 1.0787E-05 8.5616E-07 6.8168E-07 - 2.8184E+02 1.1277E-05 7.4482E-06 5.4943E-07 4.4628E-07 - 3.1623E+02 7.9651E-06 5.1721E-06 3.7993E-07 3.0534E-07 - 3.5481E+02 5.5012E-06 3.5868E-06 2.5434E-07 2.0456E-07 - 3.9811E+02 3.8131E-06 2.4822E-06 1.6846E-07 1.3722E-07 - 4.4668E+02 2.6539E-06 1.7039E-06 1.1783E-07 9.0222E-08 - 5.0119E+02 1.8437E-06 1.1628E-06 7.9599E-08 5.9997E-08 - 5.6234E+02 1.2785E-06 8.0392E-07 5.2849E-08 4.1164E-08 - 6.3096E+02 8.7592E-07 5.5144E-07 3.5333E-08 2.8278E-08 - 7.0795E+02 6.0435E-07 3.7678E-07 2.4405E-08 1.8913E-08 - 7.9433E+02 4.1720E-07 2.5797E-07 1.6297E-08 1.2391E-08 - 8.9125E+02 2.8827E-07 1.7704E-07 1.0408E-08 8.0034E-09 - 1.0000E+03 1.9815E-07 1.2164E-07 7.1556E-09 5.4920E-09 - 1.1220E+03 1.3422E-07 8.1621E-08 4.8419E-09 3.6791E-09 - 1.2589E+03 9.2330E-08 5.5503E-08 3.1213E-09 2.4161E-09 - 1.4125E+03 6.3069E-08 3.7730E-08 2.0731E-09 1.6619E-09 - 1.5849E+03 4.2710E-08 2.4933E-08 1.4883E-09 1.1366E-09 - 1.7783E+03 2.8886E-08 1.6658E-08 9.8321E-10 7.8557E-10 - 1.9953E+03 1.9444E-08 1.1437E-08 5.9971E-10 4.9054E-10 - 2.2387E+03 1.3080E-08 7.7069E-09 4.0444E-10 3.1428E-10 - 2.5119E+03 8.7436E-09 5.1551E-09 2.9893E-10 2.0959E-10 - 2.8184E+03 5.9268E-09 3.4144E-09 1.9586E-10 1.4645E-10 - 3.1623E+03 4.0647E-09 2.3140E-09 1.2055E-10 9.0165E-11 - 3.5481E+03 2.6216E-09 1.4933E-09 7.9039E-11 6.1999E-11 - 3.9811E+03 1.7437E-09 9.8968E-10 5.2902E-11 4.1459E-11 - 4.4668E+03 1.1644E-09 6.5415E-10 3.5702E-11 2.5269E-11 - 5.0119E+03 7.7056E-10 4.3477E-10 2.2273E-11 1.6645E-11 - 5.6234E+03 5.0968E-10 2.8621E-10 1.5244E-11 1.1353E-11 - 6.3096E+03 3.4273E-10 1.9216E-10 1.0179E-11 7.1941E-12 - 7.0795E+03 2.2549E-10 1.2775E-10 6.3812E-12 4.5728E-12 - 7.9433E+03 1.4756E-10 8.2264E-11 3.8813E-12 2.8907E-12 - 8.9125E+03 9.6986E-11 5.3612E-11 2.6998E-12 1.8420E-12 - 1.0000E+04 6.3528E-11 3.5482E-11 1.8170E-12 1.0871E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5912E+03 3.6107E+03 1.6938E+03 1.7893E+03 - 1.1220E-01 3.2292E+03 3.2296E+03 1.5229E+03 1.5989E+03 - 1.2589E-01 2.9026E+03 2.8531E+03 1.3692E+03 1.4105E+03 - 1.4125E-01 2.5722E+03 2.5433E+03 1.2090E+03 1.2426E+03 - 1.5849E-01 2.2619E+03 2.2625E+03 1.0569E+03 1.0820E+03 - 1.7783E-01 1.9673E+03 1.9735E+03 9.2457E+02 9.4103E+02 - 1.9953E-01 1.7086E+03 1.6829E+03 7.9719E+02 8.1154E+02 - 2.2387E-01 1.4620E+03 1.4340E+03 6.8648E+02 6.8327E+02 - 2.5119E-01 1.2383E+03 1.2250E+03 5.9076E+02 5.7966E+02 - 2.8184E-01 1.0502E+03 1.0366E+03 4.9585E+02 4.8935E+02 - 3.1623E-01 8.8408E+02 8.6733E+02 4.1706E+02 4.0638E+02 - 3.5481E-01 7.3763E+02 7.1750E+02 3.5154E+02 3.3731E+02 - 3.9811E-01 6.0975E+02 5.9272E+02 2.9056E+02 2.7699E+02 - 4.4668E-01 4.9957E+02 4.8686E+02 2.3863E+02 2.2548E+02 - 5.0119E-01 4.0961E+02 3.9580E+02 1.9571E+02 1.8228E+02 - 5.6234E-01 3.3363E+02 3.2085E+02 1.5927E+02 1.4544E+02 - 6.3096E-01 2.6954E+02 2.5827E+02 1.2742E+02 1.1500E+02 - 7.0795E-01 2.1582E+02 2.0745E+02 1.0149E+02 9.1366E+01 - 7.9433E-01 1.7106E+02 1.6466E+02 8.0345E+01 7.2168E+01 - 8.9125E-01 1.3602E+02 1.3017E+02 6.3264E+01 5.6438E+01 - 1.0000E+00 1.0812E+02 1.0274E+02 4.9523E+01 4.3322E+01 - 1.1220E+00 8.4612E+01 8.0051E+01 3.8478E+01 3.3250E+01 - 1.2589E+00 6.6409E+01 6.1887E+01 2.9547E+01 2.5462E+01 - 1.4125E+00 5.1624E+01 4.7829E+01 2.2800E+01 1.9401E+01 - 1.5849E+00 3.9773E+01 3.6587E+01 1.7174E+01 1.4389E+01 - 1.7783E+00 3.0323E+01 2.7837E+01 1.2709E+01 1.0667E+01 - 1.9953E+00 2.2769E+01 2.0960E+01 9.4932E+00 7.9383E+00 - 2.2387E+00 1.7216E+01 1.5573E+01 7.0636E+00 5.7960E+00 - 2.5119E+00 1.2999E+01 1.1595E+01 5.1894E+00 4.2210E+00 - 2.8184E+00 9.7475E+00 8.5174E+00 3.7369E+00 3.0050E+00 - 3.1623E+00 7.1664E+00 6.2309E+00 2.6713E+00 2.1187E+00 - 3.5481E+00 5.2417E+00 4.5235E+00 1.8818E+00 1.4902E+00 - 3.9811E+00 3.8496E+00 3.2858E+00 1.3153E+00 1.0427E+00 - 4.4668E+00 2.8198E+00 2.3662E+00 9.2624E-01 7.2980E-01 - 5.0119E+00 2.0409E+00 1.6948E+00 6.4723E-01 5.0279E-01 - 5.6234E+00 1.4778E+00 1.2217E+00 4.5094E-01 3.4263E-01 - 6.3096E+00 1.0628E+00 8.7678E-01 3.1067E-01 2.3595E-01 - 7.0795E+00 7.6147E-01 6.2136E-01 2.1349E-01 1.6176E-01 - 7.9433E+00 5.4958E-01 4.4220E-01 1.4036E-01 1.0797E-01 - 8.9125E+00 3.9573E-01 3.1499E-01 9.3786E-02 7.2358E-02 - 1.0000E+01 2.8073E-01 2.2256E-01 6.5156E-02 5.0164E-02 - 1.1220E+01 1.9888E-01 1.5762E-01 4.3874E-02 3.2903E-02 - 1.2589E+01 1.4218E-01 1.1109E-01 2.8855E-02 2.1943E-02 - 1.4125E+01 1.0197E-01 7.8554E-02 1.9167E-02 1.4828E-02 - 1.5849E+01 7.2761E-02 5.6115E-02 1.3017E-02 9.9387E-03 - 1.7783E+01 5.1433E-02 3.9914E-02 8.7267E-03 6.7361E-03 - 1.9953E+01 3.6804E-02 2.7958E-02 5.8988E-03 4.3907E-03 - 2.2387E+01 2.6322E-02 1.9637E-02 3.8747E-03 2.9368E-03 - 2.5119E+01 1.8564E-02 1.4092E-02 2.5092E-03 1.9688E-03 - 2.8184E+01 1.3059E-02 1.0053E-02 1.6748E-03 1.2346E-03 - 3.1623E+01 9.3645E-03 6.9104E-03 1.1315E-03 8.8047E-04 - 3.5481E+01 6.6446E-03 4.8774E-03 7.4966E-04 5.8825E-04 - 3.9811E+01 4.7072E-03 3.4398E-03 4.9421E-04 3.8860E-04 - 4.4668E+01 3.3245E-03 2.4199E-03 3.2889E-04 2.6009E-04 - 5.0119E+01 2.3416E-03 1.6991E-03 2.2005E-04 1.7554E-04 - 5.6234E+01 1.6557E-03 1.1967E-03 1.4730E-04 1.1766E-04 - 6.3096E+01 1.1710E-03 8.4209E-04 9.7974E-05 7.7692E-05 - 7.0795E+01 8.2395E-04 5.8936E-04 6.4840E-05 5.1648E-05 - 7.9433E+01 5.7807E-04 4.1085E-04 4.3411E-05 3.4583E-05 - 8.9125E+01 4.0763E-04 2.8501E-04 3.0002E-05 2.3728E-05 - 1.0000E+02 2.8557E-04 1.9977E-04 1.9451E-05 1.6044E-05 - 1.1220E+02 2.0051E-04 1.3911E-04 1.3100E-05 1.0705E-05 - 1.2589E+02 1.4027E-04 9.6700E-05 8.7884E-06 7.1613E-06 - 1.4125E+02 9.7909E-05 6.7282E-05 5.9017E-06 4.7851E-06 - 1.5849E+02 6.8569E-05 4.6630E-05 4.0139E-06 3.2501E-06 - 1.7783E+02 4.8013E-05 3.2268E-05 2.6917E-06 2.2006E-06 - 1.9953E+02 3.3525E-05 2.2383E-05 1.7546E-06 1.4568E-06 - 2.2387E+02 2.3376E-05 1.5542E-05 1.2007E-06 9.6728E-07 - 2.5119E+02 1.6393E-05 1.0815E-05 8.1809E-07 6.8406E-07 - 2.8184E+02 1.1414E-05 7.5304E-06 5.6119E-07 4.6925E-07 - 3.1623E+02 7.9334E-06 5.1693E-06 3.7535E-07 3.1052E-07 - 3.5481E+02 5.5178E-06 3.5830E-06 2.5500E-07 2.0756E-07 - 3.9811E+02 3.8357E-06 2.4821E-06 1.7172E-07 1.3921E-07 - 4.4668E+02 2.6522E-06 1.7130E-06 1.1458E-07 9.4013E-08 - 5.0119E+02 1.8486E-06 1.1799E-06 7.7833E-08 6.3099E-08 - 5.6234E+02 1.2820E-06 8.1317E-07 5.3815E-08 4.1633E-08 - 6.3096E+02 8.7844E-07 5.5376E-07 3.6009E-08 2.8290E-08 - 7.0795E+02 6.0797E-07 3.7777E-07 2.3820E-08 1.9182E-08 - 7.9433E+02 4.1819E-07 2.5769E-07 1.5991E-08 1.2851E-08 - 8.9125E+02 2.8553E-07 1.7727E-07 1.0751E-08 8.3630E-09 - 1.0000E+03 1.9772E-07 1.2231E-07 7.3708E-09 5.4168E-09 - 1.1220E+03 1.3459E-07 8.1603E-08 4.9379E-09 3.8153E-09 - 1.2589E+03 9.2588E-08 5.5075E-08 3.0851E-09 2.5781E-09 - 1.4125E+03 6.2695E-08 3.7699E-08 2.0760E-09 1.7146E-09 - 1.5849E+03 4.2491E-08 2.5484E-08 1.3876E-09 1.1501E-09 - 1.7783E+03 2.8680E-08 1.6944E-08 9.0944E-10 7.2784E-10 - 1.9953E+03 1.9306E-08 1.1433E-08 6.0419E-10 4.7206E-10 - 2.2387E+03 1.2933E-08 7.7285E-09 4.3755E-10 3.3315E-10 - 2.5119E+03 8.6738E-09 5.1583E-09 2.8981E-10 2.1546E-10 - 2.8184E+03 5.8899E-09 3.4232E-09 1.8423E-10 1.3933E-10 - 3.1623E+03 4.0374E-09 2.3395E-09 1.2293E-10 9.4757E-11 - 3.5481E+03 2.6261E-09 1.5007E-09 8.1905E-11 5.9787E-11 - 3.9811E+03 1.7445E-09 9.9929E-10 5.1999E-11 3.8745E-11 - 4.4668E+03 1.1625E-09 6.6435E-10 3.5385E-11 2.5602E-11 - 5.0119E+03 7.7337E-10 4.3774E-10 2.2716E-11 1.6557E-11 - 5.6234E+03 5.1094E-10 2.8779E-10 1.3778E-11 1.1609E-11 - 6.3096E+03 3.3960E-10 1.8889E-10 9.6366E-12 6.9308E-12 - 7.0795E+03 2.2541E-10 1.2301E-10 6.5805E-12 4.5739E-12 - 7.9433E+03 1.4887E-10 8.0651E-11 4.3474E-12 2.9254E-12 - 8.9125E+03 9.6978E-11 5.2596E-11 3.0232E-12 1.8951E-12 - 1.0000E+04 6.3428E-11 3.4377E-11 1.8873E-12 1.2946E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5219E+03 3.5419E+03 1.6480E+03 1.7208E+03 - 1.1220E-01 3.1665E+03 3.1636E+03 1.5027E+03 1.5478E+03 - 1.2589E-01 2.8141E+03 2.8229E+03 1.3401E+03 1.3794E+03 - 1.4125E-01 2.5070E+03 2.5095E+03 1.1750E+03 1.2227E+03 - 1.5849E-01 2.2132E+03 2.1950E+03 1.0370E+03 1.0637E+03 - 1.7783E-01 1.9387E+03 1.9116E+03 9.0901E+02 9.1348E+02 - 1.9953E-01 1.6858E+03 1.6600E+03 7.9072E+02 7.9263E+02 - 2.2387E-01 1.4444E+03 1.4245E+03 6.7849E+02 6.7721E+02 - 2.5119E-01 1.2262E+03 1.2135E+03 5.7470E+02 5.6822E+02 - 2.8184E-01 1.0324E+03 1.0189E+03 4.8887E+02 4.7610E+02 - 3.1623E-01 8.6283E+02 8.4789E+02 4.1467E+02 3.9720E+02 - 3.5481E-01 7.2164E+02 7.0738E+02 3.4607E+02 3.3148E+02 - 3.9811E-01 5.9791E+02 5.8395E+02 2.8544E+02 2.7357E+02 - 4.4668E-01 4.9329E+02 4.7841E+02 2.3635E+02 2.2307E+02 - 5.0119E-01 4.0358E+02 3.9256E+02 1.9298E+02 1.8059E+02 - 5.6234E-01 3.2779E+02 3.1636E+02 1.5485E+02 1.4411E+02 - 6.3096E-01 2.6527E+02 2.5589E+02 1.2448E+02 1.1394E+02 - 7.0795E-01 2.1347E+02 2.0585E+02 9.9730E+01 9.1303E+01 - 7.9433E-01 1.7076E+02 1.6420E+02 7.9117E+01 7.2520E+01 - 8.9125E-01 1.3553E+02 1.3064E+02 6.1709E+01 5.6824E+01 - 1.0000E+00 1.0770E+02 1.0197E+02 4.8889E+01 4.3656E+01 - 1.1220E+00 8.4187E+01 7.9434E+01 3.8283E+01 3.3386E+01 - 1.2589E+00 6.5911E+01 6.1447E+01 2.9472E+01 2.5309E+01 - 1.4125E+00 5.1045E+01 4.7229E+01 2.2552E+01 1.9051E+01 - 1.5849E+00 3.9386E+01 3.6231E+01 1.7145E+01 1.4329E+01 - 1.7783E+00 3.0185E+01 2.7482E+01 1.2671E+01 1.0610E+01 - 1.9953E+00 2.2712E+01 2.0708E+01 9.3317E+00 7.9035E+00 - 2.2387E+00 1.7128E+01 1.5489E+01 6.9937E+00 5.6815E+00 - 2.5119E+00 1.2884E+01 1.1385E+01 5.2228E+00 4.0256E+00 - 2.8184E+00 9.5421E+00 8.4254E+00 3.8147E+00 2.9248E+00 - 3.1623E+00 7.1025E+00 6.2103E+00 2.6694E+00 2.0928E+00 - 3.5481E+00 5.2657E+00 4.5218E+00 1.8825E+00 1.4744E+00 - 3.9811E+00 3.8542E+00 3.2737E+00 1.3343E+00 1.0365E+00 - 4.4668E+00 2.8140E+00 2.3556E+00 9.4451E-01 7.2229E-01 - 5.0119E+00 2.0341E+00 1.7005E+00 6.5657E-01 4.9752E-01 - 5.6234E+00 1.4671E+00 1.2134E+00 4.5529E-01 3.4405E-01 - 6.3096E+00 1.0682E+00 8.6248E-01 3.1104E-01 2.3430E-01 - 7.0795E+00 7.6906E-01 6.1788E-01 2.0972E-01 1.5493E-01 - 7.9433E+00 5.4714E-01 4.3996E-01 1.4366E-01 1.0597E-01 - 8.9125E+00 3.9192E-01 3.1087E-01 9.6986E-02 7.3243E-02 - 1.0000E+01 2.8018E-01 2.2116E-01 6.4592E-02 4.8456E-02 - 1.1220E+01 1.9960E-01 1.5631E-01 4.3909E-02 3.2458E-02 - 1.2589E+01 1.4193E-01 1.1092E-01 2.9754E-02 2.1938E-02 - 1.4125E+01 1.0067E-01 7.8132E-02 1.9735E-02 1.4855E-02 - 1.5849E+01 7.1945E-02 5.4788E-02 1.3039E-02 9.9861E-03 - 1.7783E+01 5.1578E-02 3.8850E-02 8.5752E-03 6.6510E-03 - 1.9953E+01 3.6577E-02 2.7644E-02 5.7309E-03 4.4147E-03 - 2.2387E+01 2.6044E-02 1.9403E-02 3.9379E-03 2.9374E-03 - 2.5119E+01 1.8319E-02 1.3570E-02 2.6128E-03 1.9676E-03 - 2.8184E+01 1.2898E-02 9.7003E-03 1.6121E-03 1.3297E-03 - 3.1623E+01 9.3434E-03 6.9367E-03 1.1278E-03 8.8645E-04 - 3.5481E+01 6.6435E-03 4.8765E-03 7.5220E-04 5.9057E-04 - 3.9811E+01 4.7070E-03 3.4271E-03 4.9219E-04 3.9605E-04 - 4.4668E+01 3.3192E-03 2.4203E-03 3.2663E-04 2.6369E-04 - 5.0119E+01 2.3447E-03 1.7100E-03 2.1824E-04 1.7532E-04 - 5.6234E+01 1.6532E-03 1.1979E-03 1.4624E-04 1.1697E-04 - 6.3096E+01 1.1623E-03 8.3765E-04 9.9205E-05 7.8289E-05 - 7.0795E+01 8.2064E-04 5.8388E-04 6.5894E-05 5.2335E-05 - 7.9433E+01 5.7747E-04 4.0751E-04 4.4018E-05 3.5497E-05 - 8.9125E+01 4.0497E-04 2.8536E-04 2.9168E-05 2.4876E-05 - 1.0000E+02 2.8442E-04 1.9951E-04 1.9618E-05 1.6018E-05 - 1.1220E+02 2.0015E-04 1.3885E-04 1.3182E-05 1.0771E-05 - 1.2589E+02 1.4000E-04 9.6414E-05 8.9146E-06 7.1533E-06 - 1.4125E+02 9.7428E-05 6.6922E-05 5.9646E-06 4.7159E-06 - 1.5849E+02 6.8274E-05 4.6736E-05 3.9952E-06 3.1418E-06 - 1.7783E+02 4.8046E-05 3.2590E-05 2.6617E-06 2.1741E-06 - 1.9953E+02 3.3514E-05 2.2609E-05 1.8016E-06 1.4547E-06 - 2.2387E+02 2.3298E-05 1.5586E-05 1.2677E-06 9.8476E-07 - 2.5119E+02 1.6244E-05 1.0680E-05 8.6202E-07 6.6539E-07 - 2.8184E+02 1.1325E-05 7.4084E-06 5.5224E-07 4.4374E-07 - 3.1623E+02 7.9337E-06 5.1844E-06 3.7833E-07 3.0172E-07 - 3.5481E+02 5.5002E-06 3.5640E-06 2.5633E-07 2.0092E-07 - 3.9811E+02 3.8221E-06 2.4598E-06 1.7322E-07 1.3533E-07 - 4.4668E+02 2.6499E-06 1.6960E-06 1.1656E-07 9.3198E-08 - 5.0119E+02 1.8324E-06 1.1711E-06 7.8832E-08 6.1810E-08 - 5.6234E+02 1.2825E-06 8.1061E-07 5.2612E-08 4.1350E-08 - 6.3096E+02 8.8241E-07 5.5466E-07 3.5025E-08 2.7705E-08 - 7.0795E+02 6.1008E-07 3.8215E-07 2.3733E-08 1.8259E-08 - 7.9433E+02 4.1903E-07 2.6016E-07 1.6085E-08 1.2143E-08 - 8.9125E+02 2.8646E-07 1.7601E-07 1.1167E-08 8.5151E-09 - 1.0000E+03 1.9776E-07 1.2087E-07 7.3778E-09 5.5241E-09 - 1.1220E+03 1.3349E-07 8.1004E-08 4.7421E-09 3.7630E-09 - 1.2589E+03 9.0635E-08 5.4871E-08 3.3366E-09 2.5404E-09 - 1.4125E+03 6.1745E-08 3.7131E-08 2.2109E-09 1.5774E-09 - 1.5849E+03 4.2401E-08 2.5229E-08 1.4933E-09 1.0596E-09 - 1.7783E+03 2.8950E-08 1.7295E-08 9.7181E-10 7.6799E-10 - 1.9953E+03 1.9522E-08 1.1395E-08 6.2568E-10 4.8806E-10 - 2.2387E+03 1.3172E-08 7.5853E-09 4.3791E-10 3.1605E-10 - 2.5119E+03 8.7456E-09 5.0948E-09 2.8559E-10 2.1412E-10 - 2.8184E+03 5.8395E-09 3.3845E-09 1.8390E-10 1.3796E-10 - 3.1623E+03 4.0450E-09 2.3467E-09 1.1979E-10 8.8134E-11 - 3.5481E+03 2.6167E-09 1.5130E-09 7.9379E-11 5.8414E-11 - 3.9811E+03 1.7483E-09 1.0108E-09 5.3426E-11 3.6549E-11 - 4.4668E+03 1.1648E-09 6.7580E-10 3.6552E-11 2.2977E-11 - 5.0119E+03 7.7162E-10 4.4262E-10 2.5391E-11 1.7135E-11 - 5.6234E+03 5.1782E-10 2.9296E-10 1.6753E-11 1.1068E-11 - 6.3096E+03 3.3562E-10 1.9119E-10 1.0002E-11 7.3930E-12 - 7.0795E+03 2.2026E-10 1.2448E-10 6.3364E-12 5.1096E-12 - 7.9433E+03 1.4658E-10 8.0404E-11 4.1275E-12 2.9197E-12 - 8.9125E+03 9.6895E-11 5.2548E-11 2.7262E-12 1.5497E-12 - 1.0000E+04 6.4378E-11 3.4946E-11 1.8750E-12 1.1921E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5781E+03 3.6484E+03 1.7355E+03 1.7623E+03 - 1.1220E-01 3.2404E+03 3.2920E+03 1.5570E+03 1.5722E+03 - 1.2589E-01 2.9184E+03 2.9347E+03 1.3960E+03 1.4079E+03 - 1.4125E-01 2.6137E+03 2.6137E+03 1.2591E+03 1.2531E+03 - 1.5849E-01 2.3278E+03 2.3198E+03 1.1128E+03 1.0962E+03 - 1.7783E-01 2.0396E+03 2.0292E+03 9.6970E+02 9.5798E+02 - 1.9953E-01 1.7691E+03 1.7622E+03 8.5512E+02 8.3291E+02 - 2.2387E-01 1.5223E+03 1.5228E+03 7.3336E+02 7.0930E+02 - 2.5119E-01 1.2967E+03 1.2994E+03 6.2131E+02 6.0115E+02 - 2.8184E-01 1.0987E+03 1.0991E+03 5.3036E+02 5.1228E+02 - 3.1623E-01 9.2541E+02 9.2146E+02 4.4820E+02 4.2823E+02 - 3.5481E-01 7.7423E+02 7.6491E+02 3.7757E+02 3.5431E+02 - 3.9811E-01 6.3969E+02 6.3228E+02 3.1277E+02 2.9030E+02 - 4.4668E-01 5.2739E+02 5.1880E+02 2.5273E+02 2.3685E+02 - 5.0119E-01 4.3379E+02 4.2597E+02 2.0527E+02 1.9391E+02 - 5.6234E-01 3.5041E+02 3.4606E+02 1.6906E+02 1.5404E+02 - 6.3096E-01 2.8228E+02 2.7625E+02 1.3643E+02 1.2182E+02 - 7.0795E-01 2.2874E+02 2.2096E+02 1.0847E+02 9.6180E+01 - 7.9433E-01 1.8269E+02 1.7492E+02 8.5203E+01 7.5947E+01 - 8.9125E-01 1.4442E+02 1.3639E+02 6.6939E+01 6.0100E+01 - 1.0000E+00 1.1337E+02 1.0806E+02 5.2840E+01 4.5585E+01 - 1.1220E+00 8.8645E+01 8.4408E+01 4.0519E+01 3.4815E+01 - 1.2589E+00 6.8782E+01 6.4817E+01 3.1082E+01 2.6373E+01 - 1.4125E+00 5.2955E+01 4.9489E+01 2.3552E+01 1.9633E+01 - 1.5849E+00 4.0767E+01 3.7615E+01 1.7765E+01 1.4756E+01 - 1.7783E+00 3.1148E+01 2.8530E+01 1.3420E+01 1.0986E+01 - 1.9953E+00 2.3470E+01 2.1368E+01 9.8796E+00 8.0589E+00 - 2.2387E+00 1.7753E+01 1.5934E+01 7.2144E+00 5.9259E+00 - 2.5119E+00 1.3171E+01 1.1840E+01 5.2937E+00 4.2571E+00 - 2.8184E+00 9.7005E+00 8.6332E+00 3.8395E+00 3.0086E+00 - 3.1623E+00 7.2483E+00 6.2938E+00 2.7326E+00 2.1421E+00 - 3.5481E+00 5.3090E+00 4.5804E+00 1.9420E+00 1.4937E+00 - 3.9811E+00 3.8652E+00 3.3162E+00 1.3742E+00 1.0467E+00 - 4.4668E+00 2.8129E+00 2.3875E+00 9.6089E-01 7.2151E-01 - 5.0119E+00 2.0503E+00 1.6998E+00 6.6660E-01 4.9853E-01 - 5.6234E+00 1.4774E+00 1.2089E+00 4.5571E-01 3.4436E-01 - 6.3096E+00 1.0563E+00 8.6754E-01 3.0654E-01 2.3260E-01 - 7.0795E+00 7.5740E-01 6.1514E-01 2.1030E-01 1.6270E-01 - 7.9433E+00 5.4418E-01 4.3559E-01 1.4157E-01 1.0998E-01 - 8.9125E+00 3.9420E-01 3.0862E-01 9.3995E-02 7.2131E-02 - 1.0000E+01 2.8037E-01 2.2123E-01 6.6500E-02 4.8745E-02 - 1.1220E+01 1.9910E-01 1.5647E-01 4.4766E-02 3.3271E-02 - 1.2589E+01 1.4249E-01 1.1135E-01 2.9459E-02 2.2298E-02 - 1.4125E+01 1.0134E-01 7.8825E-02 1.9635E-02 1.4670E-02 - 1.5849E+01 7.2259E-02 5.5699E-02 1.3206E-02 9.8803E-03 - 1.7783E+01 5.1680E-02 3.9144E-02 8.7184E-03 6.7127E-03 - 1.9953E+01 3.6817E-02 2.7534E-02 5.5364E-03 4.5492E-03 - 2.2387E+01 2.6080E-02 1.9486E-02 3.7058E-03 3.0638E-03 - 2.5119E+01 1.8549E-02 1.3735E-02 2.5345E-03 2.0250E-03 - 2.8184E+01 1.3202E-02 9.9267E-03 1.6310E-03 1.3337E-03 - 3.1623E+01 9.3571E-03 6.9512E-03 1.1211E-03 8.8259E-04 - 3.5481E+01 6.6274E-03 4.9003E-03 7.4820E-04 5.9097E-04 - 3.9811E+01 4.6943E-03 3.4524E-03 5.0045E-04 3.9143E-04 - 4.4668E+01 3.3174E-03 2.4301E-03 3.3291E-04 2.6200E-04 - 5.0119E+01 2.3536E-03 1.7069E-03 2.2148E-04 1.7713E-04 - 5.6234E+01 1.6646E-03 1.1978E-03 1.4859E-04 1.1729E-04 - 6.3096E+01 1.1685E-03 8.3814E-04 9.8334E-05 7.7777E-05 - 7.0795E+01 8.2146E-04 5.8666E-04 6.3971E-05 5.3131E-05 - 7.9433E+01 5.8007E-04 4.1358E-04 4.2562E-05 3.5828E-05 - 8.9125E+01 4.1241E-04 2.8835E-04 2.9453E-05 2.4046E-05 - 1.0000E+02 2.8601E-04 2.0004E-04 1.9716E-05 1.5891E-05 - 1.1220E+02 1.9982E-04 1.3930E-04 1.3212E-05 1.0639E-05 - 1.2589E+02 1.4089E-04 9.6994E-05 8.8853E-06 7.2379E-06 - 1.4125E+02 9.8777E-05 6.7383E-05 6.0219E-06 4.8566E-06 - 1.5849E+02 6.8853E-05 4.6812E-05 4.0801E-06 3.2942E-06 - 1.7783E+02 4.8424E-05 3.2604E-05 2.6821E-06 2.1876E-06 - 1.9953E+02 3.3819E-05 2.2665E-05 1.7966E-06 1.4612E-06 - 2.2387E+02 2.3568E-05 1.5648E-05 1.2194E-06 1.0052E-06 - 2.5119E+02 1.6577E-05 1.0868E-05 8.1504E-07 6.7531E-07 - 2.8184E+02 1.1504E-05 7.5179E-06 5.6637E-07 4.4900E-07 - 3.1623E+02 7.9274E-06 5.1960E-06 3.7489E-07 3.0362E-07 - 3.5481E+02 5.4928E-06 3.5856E-06 2.5435E-07 2.0822E-07 - 3.9811E+02 3.8147E-06 2.4747E-06 1.7375E-07 1.3840E-07 - 4.4668E+02 2.6431E-06 1.7037E-06 1.1680E-07 9.0879E-08 - 5.0119E+02 1.8240E-06 1.1725E-06 7.9563E-08 6.1318E-08 - 5.6234E+02 1.2799E-06 8.0409E-07 5.3486E-08 4.0870E-08 - 6.3096E+02 8.8028E-07 5.4741E-07 3.6053E-08 2.7894E-08 - 7.0795E+02 6.0525E-07 3.7388E-07 2.4093E-08 1.8924E-08 - 7.9433E+02 4.1741E-07 2.5697E-07 1.5977E-08 1.2593E-08 - 8.9125E+02 2.8671E-07 1.7682E-07 1.0671E-08 8.2953E-09 - 1.0000E+03 1.9852E-07 1.2121E-07 7.2506E-09 5.4620E-09 - 1.1220E+03 1.3466E-07 8.1372E-08 4.9250E-09 3.7355E-09 - 1.2589E+03 9.1728E-08 5.5341E-08 3.2865E-09 2.4447E-09 - 1.4125E+03 6.2314E-08 3.7144E-08 2.1894E-09 1.5558E-09 - 1.5849E+03 4.2322E-08 2.5010E-08 1.4588E-09 1.0886E-09 - 1.7783E+03 2.9102E-08 1.6825E-08 9.7951E-10 7.3537E-10 - 1.9953E+03 1.9595E-08 1.1363E-08 6.4908E-10 4.9263E-10 - 2.2387E+03 1.3089E-08 7.6638E-09 4.0838E-10 3.0404E-10 - 2.5119E+03 8.8058E-09 5.1730E-09 2.5757E-10 1.9513E-10 - 2.8184E+03 5.9062E-09 3.4476E-09 1.7711E-10 1.2790E-10 - 3.1623E+03 4.0427E-09 2.3387E-09 1.3011E-10 8.8286E-11 - 3.5481E+03 2.6254E-09 1.5096E-09 8.6326E-11 5.8905E-11 - 3.9811E+03 1.7523E-09 1.0146E-09 5.7404E-11 3.6810E-11 - 4.4668E+03 1.1767E-09 6.6801E-10 3.6463E-11 2.5294E-11 - 5.0119E+03 7.8884E-10 4.3607E-10 2.3292E-11 1.5982E-11 - 5.6234E+03 5.1876E-10 2.8755E-10 1.5086E-11 9.3639E-12 - 6.3096E+03 3.4221E-10 1.9195E-10 9.3925E-12 7.1329E-12 - 7.0795E+03 2.2607E-10 1.2592E-10 5.9871E-12 4.8865E-12 - 7.9433E+03 1.4867E-10 8.2799E-11 4.0547E-12 3.2619E-12 - 8.9125E+03 9.6967E-11 5.3883E-11 2.9186E-12 2.0090E-12 - 1.0000E+04 6.4150E-11 3.5135E-11 1.7494E-12 1.1785E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5177E+03 3.5801E+03 1.7083E+03 1.7480E+03 - 1.1220E-01 3.1999E+03 3.2410E+03 1.5550E+03 1.5698E+03 - 1.2589E-01 2.8931E+03 2.9056E+03 1.3979E+03 1.4003E+03 - 1.4125E-01 2.5876E+03 2.6149E+03 1.2474E+03 1.2409E+03 - 1.5849E-01 2.3130E+03 2.3285E+03 1.1150E+03 1.0928E+03 - 1.7783E-01 2.0534E+03 2.0526E+03 9.8733E+02 9.5190E+02 - 1.9953E-01 1.7919E+03 1.7874E+03 8.5942E+02 8.3037E+02 - 2.2387E-01 1.5443E+03 1.5366E+03 7.4290E+02 7.2042E+02 - 2.5119E-01 1.3204E+03 1.3169E+03 6.3481E+02 6.1339E+02 - 2.8184E-01 1.1191E+03 1.1162E+03 5.4105E+02 5.1522E+02 - 3.1623E-01 9.3765E+02 9.3731E+02 4.6062E+02 4.3163E+02 - 3.5481E-01 7.8599E+02 7.8276E+02 3.8543E+02 3.5572E+02 - 3.9811E-01 6.5656E+02 6.4873E+02 3.1738E+02 2.8966E+02 - 4.4668E-01 5.4374E+02 5.3224E+02 2.6099E+02 2.4097E+02 - 5.0119E-01 4.4627E+02 4.3268E+02 2.1355E+02 1.9846E+02 - 5.6234E-01 3.6158E+02 3.5188E+02 1.7334E+02 1.5811E+02 - 6.3096E-01 2.8996E+02 2.8488E+02 1.4075E+02 1.2436E+02 - 7.0795E-01 2.3217E+02 2.2629E+02 1.1126E+02 9.8825E+01 - 7.9433E-01 1.8509E+02 1.7806E+02 8.7462E+01 7.8335E+01 - 8.9125E-01 1.4745E+02 1.3973E+02 6.8393E+01 6.0630E+01 - 1.0000E+00 1.1601E+02 1.1025E+02 5.3595E+01 4.6379E+01 - 1.1220E+00 9.0805E+01 8.5594E+01 4.1395E+01 3.5418E+01 - 1.2589E+00 7.0447E+01 6.5962E+01 3.1688E+01 2.6889E+01 - 1.4125E+00 5.4217E+01 5.0527E+01 2.4243E+01 2.0115E+01 - 1.5849E+00 4.1702E+01 3.8299E+01 1.8348E+01 1.4994E+01 - 1.7783E+00 3.1710E+01 2.8920E+01 1.3711E+01 1.0994E+01 - 1.9953E+00 2.3907E+01 2.1674E+01 1.0072E+01 8.1144E+00 - 2.2387E+00 1.7810E+01 1.6178E+01 7.4725E+00 5.9075E+00 - 2.5119E+00 1.3277E+01 1.1957E+01 5.4981E+00 4.2297E+00 - 2.8184E+00 9.9317E+00 8.7605E+00 3.9211E+00 3.0677E+00 - 3.1623E+00 7.2590E+00 6.3037E+00 2.7422E+00 2.1630E+00 - 3.5481E+00 5.3067E+00 4.5726E+00 1.9422E+00 1.5127E+00 - 3.9811E+00 3.8921E+00 3.3202E+00 1.3773E+00 1.0575E+00 - 4.4668E+00 2.8445E+00 2.3941E+00 9.5134E-01 7.3356E-01 - 5.0119E+00 2.0542E+00 1.7180E+00 6.5539E-01 5.1115E-01 - 5.6234E+00 1.4737E+00 1.2262E+00 4.5870E-01 3.5745E-01 - 6.3096E+00 1.0553E+00 8.7553E-01 3.1725E-01 2.4139E-01 - 7.0795E+00 7.6664E-01 6.2389E-01 2.1504E-01 1.6112E-01 - 7.9433E+00 5.5374E-01 4.4525E-01 1.4272E-01 1.0615E-01 - 8.9125E+00 3.9770E-01 3.1175E-01 9.5686E-02 7.1581E-02 - 1.0000E+01 2.7962E-01 2.2142E-01 6.5351E-02 4.9232E-02 - 1.1220E+01 1.9998E-01 1.5618E-01 4.3542E-02 3.3285E-02 - 1.2589E+01 1.4256E-01 1.1066E-01 2.9207E-02 2.2411E-02 - 1.4125E+01 1.0161E-01 7.8379E-02 1.9665E-02 1.4828E-02 - 1.5849E+01 7.2787E-02 5.5440E-02 1.3052E-02 9.8681E-03 - 1.7783E+01 5.2126E-02 3.9690E-02 8.4250E-03 6.7592E-03 - 1.9953E+01 3.6567E-02 2.7855E-02 5.6899E-03 4.4930E-03 - 2.2387E+01 2.5756E-02 1.9596E-02 3.9057E-03 2.9994E-03 - 2.5119E+01 1.8388E-02 1.3948E-02 2.5867E-03 2.0211E-03 - 2.8184E+01 1.3165E-02 9.7687E-03 1.6626E-03 1.3358E-03 - 3.1623E+01 9.3753E-03 6.9189E-03 1.1242E-03 8.7967E-04 - 3.5481E+01 6.6146E-03 4.8781E-03 7.4761E-04 5.8763E-04 - 3.9811E+01 4.6790E-03 3.4348E-03 5.0054E-04 3.8777E-04 - 4.4668E+01 3.3074E-03 2.4191E-03 3.3163E-04 2.5900E-04 - 5.0119E+01 2.3287E-03 1.7053E-03 2.1790E-04 1.7680E-04 - 5.6234E+01 1.6552E-03 1.1963E-03 1.4493E-04 1.1843E-04 - 6.3096E+01 1.1749E-03 8.3510E-04 9.8245E-05 7.8623E-05 - 7.0795E+01 8.2561E-04 5.8559E-04 6.6884E-05 5.2679E-05 - 7.9433E+01 5.7991E-04 4.1012E-04 4.4267E-05 3.4977E-05 - 8.9125E+01 4.0662E-04 2.8719E-04 2.9356E-05 2.2778E-05 - 1.0000E+02 2.8537E-04 1.9892E-04 1.9609E-05 1.5788E-05 - 1.1220E+02 2.0036E-04 1.3821E-04 1.3072E-05 1.0630E-05 - 1.2589E+02 1.4092E-04 9.6300E-05 8.7562E-06 7.1948E-06 - 1.4125E+02 9.8190E-05 6.6983E-05 5.9969E-06 4.8144E-06 - 1.5849E+02 6.8525E-05 4.6738E-05 4.0118E-06 3.2150E-06 - 1.7783E+02 4.7762E-05 3.2480E-05 2.7271E-06 2.1725E-06 - 1.9953E+02 3.3544E-05 2.2568E-05 1.8372E-06 1.4543E-06 - 2.2387E+02 2.3590E-05 1.5658E-05 1.2218E-06 9.9889E-07 - 2.5119E+02 1.6356E-05 1.0739E-05 8.2823E-07 6.6874E-07 - 2.8184E+02 1.1328E-05 7.4624E-06 5.5438E-07 4.3478E-07 - 3.1623E+02 7.9613E-06 5.1951E-06 3.7997E-07 3.0283E-07 - 3.5481E+02 5.5327E-06 3.5698E-06 2.5195E-07 2.0547E-07 - 3.9811E+02 3.8244E-06 2.4565E-06 1.7027E-07 1.3478E-07 - 4.4668E+02 2.6549E-06 1.6940E-06 1.1417E-07 9.3061E-08 - 5.0119E+02 1.8511E-06 1.1731E-06 7.7903E-08 6.3316E-08 - 5.6234E+02 1.2819E-06 8.1128E-07 5.3425E-08 4.2030E-08 - 6.3096E+02 8.8066E-07 5.5431E-07 3.5347E-08 2.8391E-08 - 7.0795E+02 6.0681E-07 3.8001E-07 2.3885E-08 1.8711E-08 - 7.9433E+02 4.1569E-07 2.5980E-07 1.6132E-08 1.2564E-08 - 8.9125E+02 2.8619E-07 1.7704E-07 1.0421E-08 8.7189E-09 - 1.0000E+03 1.9872E-07 1.2168E-07 7.1152E-09 5.4269E-09 - 1.1220E+03 1.3458E-07 8.2067E-08 4.9319E-09 3.6437E-09 - 1.2589E+03 9.1073E-08 5.5506E-08 3.3031E-09 2.5208E-09 - 1.4125E+03 6.2011E-08 3.7431E-08 2.2400E-09 1.6713E-09 - 1.5849E+03 4.2585E-08 2.5305E-08 1.5065E-09 1.0689E-09 - 1.7783E+03 2.8794E-08 1.6882E-08 1.0213E-09 7.2626E-10 - 1.9953E+03 1.9311E-08 1.1446E-08 6.6225E-10 4.8904E-10 - 2.2387E+03 1.3042E-08 7.6242E-09 4.3876E-10 3.0911E-10 - 2.5119E+03 8.7786E-09 5.0677E-09 2.9874E-10 2.0200E-10 - 2.8184E+03 5.8603E-09 3.3584E-09 1.9601E-10 1.4449E-10 - 3.1623E+03 4.0421E-09 2.3477E-09 1.2098E-10 9.5342E-11 - 3.5481E+03 2.6302E-09 1.5254E-09 8.2980E-11 5.8301E-11 - 3.9811E+03 1.7578E-09 1.0149E-09 5.3909E-11 3.5794E-11 - 4.4668E+03 1.1739E-09 6.5900E-10 3.4377E-11 2.4611E-11 - 5.0119E+03 7.8168E-10 4.3606E-10 2.3031E-11 1.6985E-11 - 5.6234E+03 5.1234E-10 2.8500E-10 1.5082E-11 9.9500E-12 - 6.3096E+03 3.3854E-10 1.9147E-10 9.7530E-12 7.2271E-12 - 7.0795E+03 2.2290E-10 1.2511E-10 6.4846E-12 4.6920E-12 - 7.9433E+03 1.4658E-10 8.1069E-11 4.2346E-12 2.7718E-12 - 8.9125E+03 9.6264E-11 5.4140E-11 2.6893E-12 1.8464E-12 - 1.0000E+04 6.4418E-11 3.5564E-11 1.9144E-12 1.2802E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.4711E+03 3.5553E+03 1.7013E+03 1.7037E+03 - 1.1220E-01 3.1758E+03 3.2184E+03 1.5407E+03 1.5521E+03 - 1.2589E-01 2.8516E+03 2.8938E+03 1.3827E+03 1.3827E+03 - 1.4125E-01 2.5437E+03 2.6048E+03 1.2397E+03 1.2268E+03 - 1.5849E-01 2.2703E+03 2.3184E+03 1.1059E+03 1.0872E+03 - 1.7783E-01 2.0094E+03 2.0353E+03 9.7253E+02 9.4803E+02 - 1.9953E-01 1.7590E+03 1.7722E+03 8.4352E+02 8.1863E+02 - 2.2387E-01 1.5266E+03 1.5287E+03 7.2952E+02 7.0658E+02 - 2.5119E-01 1.3102E+03 1.3104E+03 6.3116E+02 6.0589E+02 - 2.8184E-01 1.1167E+03 1.1152E+03 5.3948E+02 5.1437E+02 - 3.1623E-01 9.3443E+02 9.3932E+02 4.5511E+02 4.3012E+02 - 3.5481E-01 7.8220E+02 7.8482E+02 3.7763E+02 3.5798E+02 - 3.9811E-01 6.5331E+02 6.5003E+02 3.1480E+02 2.9198E+02 - 4.4668E-01 5.3803E+02 5.3272E+02 2.6257E+02 2.3748E+02 - 5.0119E-01 4.3968E+02 4.3215E+02 2.1157E+02 1.9498E+02 - 5.6234E-01 3.5862E+02 3.5152E+02 1.7090E+02 1.5696E+02 - 6.3096E-01 2.9040E+02 2.8338E+02 1.3907E+02 1.2503E+02 - 7.0795E-01 2.3256E+02 2.2592E+02 1.1172E+02 9.8730E+01 - 7.9433E-01 1.8564E+02 1.7885E+02 8.8859E+01 7.6367E+01 - 8.9125E-01 1.4652E+02 1.4131E+02 6.9287E+01 5.9686E+01 - 1.0000E+00 1.1483E+02 1.1051E+02 5.3406E+01 4.6868E+01 - 1.1220E+00 8.9645E+01 8.5782E+01 4.1428E+01 3.5347E+01 - 1.2589E+00 6.9977E+01 6.5944E+01 3.1973E+01 2.6761E+01 - 1.4125E+00 5.4501E+01 5.0304E+01 2.4199E+01 2.0088E+01 - 1.5849E+00 4.1559E+01 3.8344E+01 1.8149E+01 1.5092E+01 - 1.7783E+00 3.1539E+01 2.9011E+01 1.3457E+01 1.1133E+01 - 1.9953E+00 2.3722E+01 2.1640E+01 1.0026E+01 8.0889E+00 - 2.2387E+00 1.7728E+01 1.6118E+01 7.4217E+00 5.8797E+00 - 2.5119E+00 1.3367E+01 1.1937E+01 5.4219E+00 4.2259E+00 - 2.8184E+00 9.8883E+00 8.7576E+00 3.8870E+00 2.9894E+00 - 3.1623E+00 7.2771E+00 6.3749E+00 2.7749E+00 2.1456E+00 - 3.5481E+00 5.3385E+00 4.6217E+00 1.9506E+00 1.5172E+00 - 3.9811E+00 3.8889E+00 3.3319E+00 1.3673E+00 1.0539E+00 - 4.4668E+00 2.8265E+00 2.4098E+00 9.5990E-01 7.2338E-01 - 5.0119E+00 2.0557E+00 1.7187E+00 6.6224E-01 5.0130E-01 - 5.6234E+00 1.4867E+00 1.2240E+00 4.5452E-01 3.5167E-01 - 6.3096E+00 1.0696E+00 8.7049E-01 3.1155E-01 2.3803E-01 - 7.0795E+00 7.6658E-01 6.1924E-01 2.1193E-01 1.6071E-01 - 7.9433E+00 5.4956E-01 4.4149E-01 1.4316E-01 1.1080E-01 - 8.9125E+00 3.9420E-01 3.1230E-01 9.6976E-02 7.3459E-02 - 1.0000E+01 2.8040E-01 2.2173E-01 6.5256E-02 4.9477E-02 - 1.1220E+01 1.9943E-01 1.5751E-01 4.3595E-02 3.2822E-02 - 1.2589E+01 1.4230E-01 1.1066E-01 2.9423E-02 2.1772E-02 - 1.4125E+01 1.0066E-01 7.7500E-02 1.9393E-02 1.4718E-02 - 1.5849E+01 7.1849E-02 5.5076E-02 1.2997E-02 1.0061E-02 - 1.7783E+01 5.1733E-02 3.9598E-02 8.6371E-03 6.8291E-03 - 1.9953E+01 3.7042E-02 2.7833E-02 5.7110E-03 4.4040E-03 - 2.2387E+01 2.6212E-02 1.9513E-02 3.9397E-03 2.9107E-03 - 2.5119E+01 1.8349E-02 1.3812E-02 2.6545E-03 2.0173E-03 - 2.8184E+01 1.3217E-02 9.9365E-03 1.7640E-03 1.3514E-03 - 3.1623E+01 9.3539E-03 6.9228E-03 1.1297E-03 8.8539E-04 - 3.5481E+01 6.6185E-03 4.8758E-03 7.5285E-04 5.8701E-04 - 3.9811E+01 4.6856E-03 3.4400E-03 4.9942E-04 3.9384E-04 - 4.4668E+01 3.3090E-03 2.4111E-03 3.3107E-04 2.6180E-04 - 5.0119E+01 2.3426E-03 1.6947E-03 2.2032E-04 1.7150E-04 - 5.6234E+01 1.6542E-03 1.1926E-03 1.4755E-04 1.1509E-04 - 6.3096E+01 1.1683E-03 8.3867E-04 9.8771E-05 7.6881E-05 - 7.0795E+01 8.2666E-04 5.8689E-04 6.5335E-05 5.0993E-05 - 7.9433E+01 5.7984E-04 4.0985E-04 4.3926E-05 3.4323E-05 - 8.9125E+01 4.0599E-04 2.8706E-04 2.9754E-05 2.3728E-05 - 1.0000E+02 2.8594E-04 1.9986E-04 1.9708E-05 1.6109E-05 - 1.1220E+02 2.0037E-04 1.3940E-04 1.3151E-05 1.0805E-05 - 1.2589E+02 1.4026E-04 9.7052E-05 8.6875E-06 7.2312E-06 - 1.4125E+02 9.8328E-05 6.7786E-05 5.9477E-06 4.7930E-06 - 1.5849E+02 6.8845E-05 4.7053E-05 4.0469E-06 3.2329E-06 - 1.7783E+02 4.8240E-05 3.2552E-05 2.7217E-06 2.2187E-06 - 1.9953E+02 3.3636E-05 2.2622E-05 1.8562E-06 1.4995E-06 - 2.2387E+02 2.3354E-05 1.5614E-05 1.2753E-06 9.7213E-07 - 2.5119E+02 1.6357E-05 1.0789E-05 8.4936E-07 6.7259E-07 - 2.8184E+02 1.1437E-05 7.4859E-06 5.4812E-07 4.7567E-07 - 3.1623E+02 7.9755E-06 5.2093E-06 3.7751E-07 3.0477E-07 - 3.5481E+02 5.5192E-06 3.5915E-06 2.5408E-07 2.0991E-07 - 3.9811E+02 3.8279E-06 2.4769E-06 1.7219E-07 1.3902E-07 - 4.4668E+02 2.6552E-06 1.6953E-06 1.1665E-07 9.4338E-08 - 5.0119E+02 1.8556E-06 1.1661E-06 7.8643E-08 6.3327E-08 - 5.6234E+02 1.2892E-06 8.1273E-07 5.2776E-08 4.1996E-08 - 6.3096E+02 8.8262E-07 5.5654E-07 3.5338E-08 2.8119E-08 - 7.0795E+02 6.0674E-07 3.8178E-07 2.3191E-08 1.8721E-08 - 7.9433E+02 4.1606E-07 2.5940E-07 1.5580E-08 1.2950E-08 - 8.9125E+02 2.8595E-07 1.7600E-07 1.0714E-08 8.2769E-09 - 1.0000E+03 1.9867E-07 1.2050E-07 7.0046E-09 5.4625E-09 - 1.1220E+03 1.3489E-07 8.1383E-08 4.9007E-09 3.6963E-09 - 1.2589E+03 9.1895E-08 5.5788E-08 3.2568E-09 2.4993E-09 - 1.4125E+03 6.2724E-08 3.7849E-08 2.1325E-09 1.7116E-09 - 1.5849E+03 4.2535E-08 2.5423E-08 1.4430E-09 1.1302E-09 - 1.7783E+03 2.8874E-08 1.7129E-08 9.4930E-10 7.1590E-10 - 1.9953E+03 1.9538E-08 1.1546E-08 6.1197E-10 4.8821E-10 - 2.2387E+03 1.3096E-08 7.7902E-09 4.0025E-10 3.2450E-10 - 2.5119E+03 8.8237E-09 5.1237E-09 2.7584E-10 2.0725E-10 - 2.8184E+03 5.9299E-09 3.3843E-09 1.8641E-10 1.2801E-10 - 3.1623E+03 4.0257E-09 2.3543E-09 1.2649E-10 9.0303E-11 - 3.5481E+03 2.6016E-09 1.5245E-09 8.3146E-11 5.9664E-11 - 3.9811E+03 1.7404E-09 1.0016E-09 5.6025E-11 3.9332E-11 - 4.4668E+03 1.1735E-09 6.7254E-10 3.5631E-11 2.5573E-11 - 5.0119E+03 7.7120E-10 4.4818E-10 2.2086E-11 1.6359E-11 - 5.6234E+03 5.0337E-10 2.9498E-10 1.4172E-11 1.1711E-11 - 6.3096E+03 3.3958E-10 1.9466E-10 9.8003E-12 7.1187E-12 - 7.0795E+03 2.2503E-10 1.2682E-10 6.5503E-12 4.4078E-12 - 7.9433E+03 1.4940E-10 8.1908E-11 4.3117E-12 2.8940E-12 - 8.9125E+03 9.8575E-11 5.4229E-11 2.7770E-12 1.8062E-12 - 1.0000E+04 6.4259E-11 3.5624E-11 1.7875E-12 1.1691E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.9997E+03 3.0131E+03 1.4405E+03 1.4891E+03 - 1.1220E-01 2.7156E+03 2.7393E+03 1.3122E+03 1.3465E+03 - 1.2589E-01 2.4681E+03 2.4758E+03 1.1908E+03 1.2080E+03 - 1.4125E-01 2.2382E+03 2.2337E+03 1.0722E+03 1.0843E+03 - 1.5849E-01 1.9891E+03 1.9969E+03 9.4360E+02 9.5440E+02 - 1.7783E-01 1.7563E+03 1.7688E+03 8.1938E+02 8.3398E+02 - 1.9953E-01 1.5450E+03 1.5363E+03 7.1227E+02 7.2771E+02 - 2.2387E-01 1.3376E+03 1.3241E+03 6.2353E+02 6.2210E+02 - 2.5119E-01 1.1467E+03 1.1386E+03 5.3894E+02 5.2310E+02 - 2.8184E-01 9.8252E+02 9.7092E+02 4.5863E+02 4.4349E+02 - 3.1623E-01 8.2840E+02 8.2008E+02 3.8826E+02 3.7724E+02 - 3.5481E-01 6.9148E+02 6.8198E+02 3.2486E+02 3.1308E+02 - 3.9811E-01 5.7655E+02 5.6490E+02 2.7320E+02 2.5650E+02 - 4.4668E-01 4.7565E+02 4.6799E+02 2.2493E+02 2.0916E+02 - 5.0119E-01 3.8958E+02 3.8223E+02 1.8125E+02 1.7005E+02 - 5.6234E-01 3.1846E+02 3.0864E+02 1.4710E+02 1.3644E+02 - 6.3096E-01 2.5713E+02 2.4837E+02 1.1810E+02 1.0832E+02 - 7.0795E-01 2.0772E+02 2.0016E+02 9.4145E+01 8.6047E+01 - 7.9433E-01 1.6719E+02 1.5856E+02 7.4287E+01 6.7994E+01 - 8.9125E-01 1.3291E+02 1.2528E+02 5.8484E+01 5.2685E+01 - 1.0000E+00 1.0531E+02 9.9438E+01 4.6247E+01 4.0543E+01 - 1.1220E+00 8.2467E+01 7.7715E+01 3.5557E+01 3.1189E+01 - 1.2589E+00 6.4026E+01 6.0213E+01 2.7327E+01 2.3630E+01 - 1.4125E+00 4.9425E+01 4.6145E+01 2.0937E+01 1.7771E+01 - 1.5849E+00 3.8118E+01 3.5032E+01 1.5775E+01 1.3220E+01 - 1.7783E+00 2.9426E+01 2.6526E+01 1.1698E+01 9.7280E+00 - 1.9953E+00 2.2371E+01 1.9981E+01 8.7069E+00 7.1586E+00 - 2.2387E+00 1.6785E+01 1.4954E+01 6.3785E+00 5.2126E+00 - 2.5119E+00 1.2579E+01 1.1052E+01 4.5973E+00 3.7641E+00 - 2.8184E+00 9.3479E+00 8.1767E+00 3.3534E+00 2.6859E+00 - 3.1623E+00 6.9017E+00 5.9442E+00 2.3974E+00 1.9021E+00 - 3.5481E+00 5.0989E+00 4.3440E+00 1.6921E+00 1.3307E+00 - 3.9811E+00 3.7290E+00 3.1546E+00 1.2032E+00 9.2691E-01 - 4.4668E+00 2.7089E+00 2.2820E+00 8.4421E-01 6.4609E-01 - 5.0119E+00 1.9772E+00 1.6389E+00 5.7714E-01 4.4761E-01 - 5.6234E+00 1.4381E+00 1.1636E+00 3.9602E-01 3.0868E-01 - 6.3096E+00 1.0367E+00 8.2425E-01 2.6868E-01 2.0940E-01 - 7.0795E+00 7.4094E-01 5.8659E-01 1.8097E-01 1.4047E-01 - 7.9433E+00 5.3288E-01 4.2299E-01 1.2704E-01 9.4283E-02 - 8.9125E+00 3.7899E-01 2.9702E-01 8.6516E-02 6.5071E-02 - 1.0000E+01 2.7155E-01 2.1169E-01 5.7099E-02 4.3926E-02 - 1.1220E+01 1.9299E-01 1.5042E-01 3.7600E-02 2.9284E-02 - 1.2589E+01 1.3841E-01 1.0593E-01 2.5171E-02 1.9656E-02 - 1.4125E+01 9.9319E-02 7.4226E-02 1.7028E-02 1.3231E-02 - 1.5849E+01 7.0011E-02 5.2933E-02 1.1387E-02 8.6877E-03 - 1.7783E+01 4.9669E-02 3.7921E-02 7.7259E-03 5.6840E-03 - 1.9953E+01 3.5860E-02 2.6969E-02 5.0712E-03 3.8988E-03 - 2.2387E+01 2.5507E-02 1.8868E-02 3.2421E-03 2.5504E-03 - 2.5119E+01 1.7994E-02 1.3266E-02 2.1682E-03 1.6840E-03 - 2.8184E+01 1.2720E-02 9.3452E-03 1.4469E-03 1.1696E-03 - 3.1623E+01 8.9821E-03 6.5905E-03 9.7126E-04 7.6487E-04 - 3.5481E+01 6.3573E-03 4.6451E-03 6.5131E-04 5.1003E-04 - 3.9811E+01 4.4978E-03 3.2664E-03 4.3496E-04 3.4167E-04 - 4.4668E+01 3.1839E-03 2.2924E-03 2.9072E-04 2.2724E-04 - 5.0119E+01 2.2428E-03 1.6080E-03 1.9078E-04 1.5411E-04 - 5.6234E+01 1.5817E-03 1.1285E-03 1.2585E-04 1.0305E-04 - 6.3096E+01 1.1191E-03 7.9412E-04 8.5832E-05 6.7687E-05 - 7.0795E+01 7.8469E-04 5.5499E-04 5.7811E-05 4.5562E-05 - 7.9433E+01 5.4947E-04 3.8597E-04 3.8097E-05 3.1628E-05 - 8.9125E+01 3.8661E-04 2.6655E-04 2.6305E-05 2.1886E-05 - 1.0000E+02 2.7018E-04 1.8637E-04 1.7455E-05 1.4273E-05 - 1.1220E+02 1.8967E-04 1.2961E-04 1.1672E-05 9.5633E-06 - 1.2589E+02 1.3305E-04 9.0297E-05 7.7760E-06 6.4502E-06 - 1.4125E+02 9.3080E-05 6.2862E-05 5.3281E-06 4.3064E-06 - 1.5849E+02 6.5167E-05 4.3856E-05 3.5677E-06 2.8854E-06 - 1.7783E+02 4.5393E-05 3.0503E-05 2.4032E-06 1.9574E-06 - 1.9953E+02 3.1511E-05 2.1111E-05 1.6646E-06 1.2991E-06 - 2.2387E+02 2.2020E-05 1.4516E-05 1.1027E-06 8.8774E-07 - 2.5119E+02 1.5352E-05 9.9921E-06 7.5066E-07 6.3368E-07 - 2.8184E+02 1.0694E-05 6.9130E-06 5.1149E-07 4.3307E-07 - 3.1623E+02 7.4762E-06 4.8217E-06 3.4440E-07 2.7532E-07 - 3.5481E+02 5.1767E-06 3.3123E-06 2.3600E-07 1.8536E-07 - 3.9811E+02 3.5825E-06 2.2759E-06 1.5658E-07 1.2307E-07 - 4.4668E+02 2.4843E-06 1.5734E-06 1.0267E-07 8.4313E-08 - 5.0119E+02 1.7151E-06 1.0764E-06 6.8155E-08 5.9152E-08 - 5.6234E+02 1.1920E-06 7.4528E-07 4.7132E-08 3.8219E-08 - 6.3096E+02 8.1868E-07 5.0935E-07 3.2131E-08 2.4850E-08 - 7.0795E+02 5.6383E-07 3.4920E-07 2.1418E-08 1.6467E-08 - 7.9433E+02 3.8509E-07 2.3612E-07 1.3918E-08 1.0683E-08 - 8.9125E+02 2.6412E-07 1.6012E-07 9.4903E-09 7.1260E-09 - 1.0000E+03 1.8207E-07 1.1058E-07 6.3700E-09 5.0482E-09 - 1.1220E+03 1.2296E-07 7.4290E-08 4.2494E-09 3.4511E-09 - 1.2589E+03 8.3487E-08 5.0098E-08 2.9770E-09 2.2710E-09 - 1.4125E+03 5.6576E-08 3.3843E-08 1.9778E-09 1.4986E-09 - 1.5849E+03 3.8458E-08 2.2591E-08 1.2335E-09 9.8741E-10 - 1.7783E+03 2.6240E-08 1.5288E-08 7.9753E-10 6.4927E-10 - 1.9953E+03 1.7397E-08 1.0204E-08 5.9333E-10 4.2362E-10 - 2.2387E+03 1.1662E-08 6.7721E-09 3.8586E-10 2.8098E-10 - 2.5119E+03 7.9688E-09 4.5591E-09 2.3274E-10 1.8778E-10 - 2.8184E+03 5.2617E-09 3.1065E-09 1.6157E-10 1.2524E-10 - 3.1623E+03 3.6069E-09 2.0841E-09 1.0835E-10 8.0522E-11 - 3.5481E+03 2.3530E-09 1.3368E-09 7.2089E-11 5.3001E-11 - 3.9811E+03 1.5698E-09 8.7806E-10 4.6983E-11 3.1749E-11 - 4.4668E+03 1.0425E-09 5.8396E-10 2.9065E-11 2.0455E-11 - 5.0119E+03 6.9300E-10 3.9308E-10 1.9261E-11 1.3432E-11 - 5.6234E+03 4.5367E-10 2.6725E-10 1.4384E-11 8.1793E-12 - 6.3096E+03 2.9558E-10 1.6946E-10 8.9880E-12 6.3086E-12 - 7.0795E+03 1.9481E-10 1.1001E-10 5.6511E-12 3.5916E-12 - 7.9433E+03 1.3029E-10 7.1639E-11 3.3207E-12 2.3098E-12 - 8.9125E+03 8.6756E-11 4.6974E-11 2.2155E-12 1.6296E-12 - 1.0000E+04 5.7084E-11 3.1692E-11 1.5676E-12 1.0124E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.7408E+03 2.7422E+03 1.3001E+03 1.3726E+03 - 1.1220E-01 2.5082E+03 2.4860E+03 1.1829E+03 1.2502E+03 - 1.2589E-01 2.2675E+03 2.2622E+03 1.0729E+03 1.1190E+03 - 1.4125E-01 2.0245E+03 2.0356E+03 9.6490E+02 9.8897E+02 - 1.5849E-01 1.8219E+03 1.8127E+03 8.4573E+02 8.6830E+02 - 1.7783E-01 1.6244E+03 1.5956E+03 7.4815E+02 7.6416E+02 - 1.9953E-01 1.4177E+03 1.3971E+03 6.6440E+02 6.6863E+02 - 2.2387E-01 1.2229E+03 1.2147E+03 5.7787E+02 5.6765E+02 - 2.5119E-01 1.0502E+03 1.0399E+03 4.9425E+02 4.8590E+02 - 2.8184E-01 8.9587E+02 8.8202E+02 4.2037E+02 4.1710E+02 - 3.1623E-01 7.6016E+02 7.4404E+02 3.5481E+02 3.4572E+02 - 3.5481E-01 6.3736E+02 6.2571E+02 2.9423E+02 2.8610E+02 - 3.9811E-01 5.2622E+02 5.1849E+02 2.4876E+02 2.3780E+02 - 4.4668E-01 4.3837E+02 4.2676E+02 2.0621E+02 1.9440E+02 - 5.0119E-01 3.6257E+02 3.5152E+02 1.6738E+02 1.5602E+02 - 5.6234E-01 2.9430E+02 2.8529E+02 1.3707E+02 1.2649E+02 - 6.3096E-01 2.3822E+02 2.2946E+02 1.0996E+02 1.0209E+02 - 7.0795E-01 1.9299E+02 1.8505E+02 8.7646E+01 8.0952E+01 - 7.9433E-01 1.5601E+02 1.4859E+02 6.9461E+01 6.4022E+01 - 8.9125E-01 1.2396E+02 1.1863E+02 5.5045E+01 4.9735E+01 - 1.0000E+00 9.7861E+01 9.3302E+01 4.2888E+01 3.8267E+01 - 1.1220E+00 7.6989E+01 7.2960E+01 3.3368E+01 2.9133E+01 - 1.2589E+00 6.0278E+01 5.6649E+01 2.5708E+01 2.2096E+01 - 1.4125E+00 4.7372E+01 4.3666E+01 1.9500E+01 1.6726E+01 - 1.5849E+00 3.6810E+01 3.3556E+01 1.4612E+01 1.2596E+01 - 1.7783E+00 2.8180E+01 2.5559E+01 1.1089E+01 9.3573E+00 - 1.9953E+00 2.1363E+01 1.9242E+01 8.3422E+00 6.8573E+00 - 2.2387E+00 1.6150E+01 1.4368E+01 6.1188E+00 5.0162E+00 - 2.5119E+00 1.2156E+01 1.0728E+01 4.5099E+00 3.6552E+00 - 2.8184E+00 9.0635E+00 7.8905E+00 3.2060E+00 2.6445E+00 - 3.1623E+00 6.7426E+00 5.8362E+00 2.3100E+00 1.8530E+00 - 3.5481E+00 4.9866E+00 4.2608E+00 1.6494E+00 1.3037E+00 - 3.9811E+00 3.6770E+00 3.0681E+00 1.1718E+00 9.1879E-01 - 4.4668E+00 2.6938E+00 2.2211E+00 8.2484E-01 6.4312E-01 - 5.0119E+00 1.9574E+00 1.6009E+00 5.7300E-01 4.4088E-01 - 5.6234E+00 1.4206E+00 1.1497E+00 3.9688E-01 2.9658E-01 - 6.3096E+00 1.0312E+00 8.2088E-01 2.7334E-01 1.9939E-01 - 7.0795E+00 7.4131E-01 5.8688E-01 1.8707E-01 1.3763E-01 - 7.9433E+00 5.3491E-01 4.1990E-01 1.2752E-01 9.6324E-02 - 8.9125E+00 3.8120E-01 2.9936E-01 8.5510E-02 6.4395E-02 - 1.0000E+01 2.7196E-01 2.1208E-01 5.6607E-02 4.2500E-02 - 1.1220E+01 1.9380E-01 1.5050E-01 3.7600E-02 2.8245E-02 - 1.2589E+01 1.3871E-01 1.0613E-01 2.5584E-02 1.9092E-02 - 1.4125E+01 9.8554E-02 7.4850E-02 1.7268E-02 1.2902E-02 - 1.5849E+01 6.9740E-02 5.3144E-02 1.1219E-02 8.6032E-03 - 1.7783E+01 4.9855E-02 3.7802E-02 7.5342E-03 5.7857E-03 - 1.9953E+01 3.5589E-02 2.6599E-02 4.9965E-03 3.8762E-03 - 2.2387E+01 2.5271E-02 1.8739E-02 3.2839E-03 2.5742E-03 - 2.5119E+01 1.7849E-02 1.3196E-02 2.1917E-03 1.7063E-03 - 2.8184E+01 1.2765E-02 9.2483E-03 1.4441E-03 1.1509E-03 - 3.1623E+01 8.9623E-03 6.5806E-03 9.6870E-04 7.7124E-04 - 3.5481E+01 6.3571E-03 4.6289E-03 6.4466E-04 5.0694E-04 - 3.9811E+01 4.4980E-03 3.2550E-03 4.3064E-04 3.3551E-04 - 4.4668E+01 3.1640E-03 2.2779E-03 2.8829E-04 2.2935E-04 - 5.0119E+01 2.2289E-03 1.5975E-03 1.9531E-04 1.5334E-04 - 5.6234E+01 1.5789E-03 1.1301E-03 1.3000E-04 1.0006E-04 - 6.3096E+01 1.1112E-03 7.9020E-04 8.5346E-05 6.7518E-05 - 7.0795E+01 7.8119E-04 5.4999E-04 5.6667E-05 4.5277E-05 - 7.9433E+01 5.5127E-04 3.8531E-04 3.8033E-05 3.0432E-05 - 8.9125E+01 3.8609E-04 2.6842E-04 2.5478E-05 2.0707E-05 - 1.0000E+02 2.6993E-04 1.8764E-04 1.7087E-05 1.4144E-05 - 1.1220E+02 1.8938E-04 1.3002E-04 1.1541E-05 9.5508E-06 - 1.2589E+02 1.3266E-04 9.0251E-05 7.7995E-06 6.4528E-06 - 1.4125E+02 9.2758E-05 6.2871E-05 5.3625E-06 4.3203E-06 - 1.5849E+02 6.4904E-05 4.3552E-05 3.6094E-06 2.9193E-06 - 1.7783E+02 4.5181E-05 3.0224E-05 2.3852E-06 2.0056E-06 - 1.9953E+02 3.1409E-05 2.0932E-05 1.6172E-06 1.3840E-06 - 2.2387E+02 2.1961E-05 1.4558E-05 1.0789E-06 9.1663E-07 - 2.5119E+02 1.5380E-05 1.0060E-05 7.3757E-07 6.0270E-07 - 2.8184E+02 1.0718E-05 6.9592E-06 5.0004E-07 4.3517E-07 - 3.1623E+02 7.4259E-06 4.8125E-06 3.3800E-07 2.7602E-07 - 3.5481E+02 5.1427E-06 3.3179E-06 2.2975E-07 1.8415E-07 - 3.9811E+02 3.5774E-06 2.2868E-06 1.5238E-07 1.2602E-07 - 4.4668E+02 2.4713E-06 1.5734E-06 1.0398E-07 8.6354E-08 - 5.0119E+02 1.7113E-06 1.0844E-06 7.1385E-08 5.6465E-08 - 5.6234E+02 1.1909E-06 7.4902E-07 4.7553E-08 3.7191E-08 - 6.3096E+02 8.1177E-07 5.0959E-07 3.2224E-08 2.4117E-08 - 7.0795E+02 5.5939E-07 3.4980E-07 2.1326E-08 1.6121E-08 - 7.9433E+02 3.8477E-07 2.3659E-07 1.4310E-08 1.0962E-08 - 8.9125E+02 2.6340E-07 1.5947E-07 9.5221E-09 7.2716E-09 - 1.0000E+03 1.8234E-07 1.1078E-07 6.5269E-09 4.8714E-09 - 1.1220E+03 1.2338E-07 7.3194E-08 4.5178E-09 3.2123E-09 - 1.2589E+03 8.3948E-08 4.9778E-08 2.8470E-09 2.2078E-09 - 1.4125E+03 5.6552E-08 3.3978E-08 1.9046E-09 1.4418E-09 - 1.5849E+03 3.8156E-08 2.2710E-08 1.2925E-09 8.8257E-10 - 1.7783E+03 2.5861E-08 1.5222E-08 8.4262E-10 5.9045E-10 - 1.9953E+03 1.7500E-08 1.0275E-08 5.7977E-10 4.1389E-10 - 2.2387E+03 1.1787E-08 6.9298E-09 3.7693E-10 2.5837E-10 - 2.5119E+03 7.8508E-09 4.6235E-09 2.6163E-10 1.7745E-10 - 2.8184E+03 5.2898E-09 3.0702E-09 1.7323E-10 1.0555E-10 - 3.1623E+03 3.5883E-09 2.0659E-09 1.0858E-10 7.6892E-11 - 3.5481E+03 2.3026E-09 1.3213E-09 7.0600E-11 4.8521E-11 - 3.9811E+03 1.5301E-09 8.8362E-10 4.3964E-11 3.2770E-11 - 4.4668E+03 1.0220E-09 5.8416E-10 2.9116E-11 2.2454E-11 - 5.0119E+03 6.8106E-10 3.8773E-10 2.0595E-11 1.5691E-11 - 5.6234E+03 4.4350E-10 2.6048E-10 1.3378E-11 1.0217E-11 - 6.3096E+03 2.9968E-10 1.6984E-10 8.2477E-12 5.5779E-12 - 7.0795E+03 1.9915E-10 1.1220E-10 5.3433E-12 3.7829E-12 - 7.9433E+03 1.3133E-10 7.3217E-11 3.6226E-12 2.7441E-12 - 8.9125E+03 8.5522E-11 4.7169E-11 2.4507E-12 1.7397E-12 - 1.0000E+04 5.6218E-11 3.1449E-11 1.5522E-12 1.1314E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5685E+03 2.5811E+03 1.2168E+03 1.3034E+03 - 1.1220E-01 2.3364E+03 2.3376E+03 1.1101E+03 1.1794E+03 - 1.2589E-01 2.1118E+03 2.1219E+03 9.9317E+02 1.0485E+03 - 1.4125E-01 1.8972E+03 1.9060E+03 8.8689E+02 9.2983E+02 - 1.5849E-01 1.6950E+03 1.6894E+03 7.9539E+02 8.1860E+02 - 1.7783E-01 1.4965E+03 1.4904E+03 6.9930E+02 7.1354E+02 - 1.9953E-01 1.3089E+03 1.3044E+03 6.0905E+02 6.2617E+02 - 2.2387E-01 1.1402E+03 1.1288E+03 5.3244E+02 5.4102E+02 - 2.5119E-01 9.8233E+02 9.6554E+02 4.5890E+02 4.5665E+02 - 2.8184E-01 8.3857E+02 8.2182E+02 3.8861E+02 3.8238E+02 - 3.1623E-01 7.1044E+02 6.9559E+02 3.2696E+02 3.2000E+02 - 3.5481E-01 5.9891E+02 5.8338E+02 2.7536E+02 2.6692E+02 - 3.9811E-01 5.0137E+02 4.8501E+02 2.2957E+02 2.2160E+02 - 4.4668E-01 4.1181E+02 4.0263E+02 1.8948E+02 1.8247E+02 - 5.0119E-01 3.3826E+02 3.3152E+02 1.5577E+02 1.4737E+02 - 5.6234E-01 2.7927E+02 2.7006E+02 1.2611E+02 1.1833E+02 - 6.3096E-01 2.2648E+02 2.1948E+02 1.0209E+02 9.5840E+01 - 7.0795E-01 1.8244E+02 1.7596E+02 8.2193E+01 7.6131E+01 - 7.9433E-01 1.4752E+02 1.4044E+02 6.5460E+01 6.0290E+01 - 8.9125E-01 1.1920E+02 1.1159E+02 5.2017E+01 4.7931E+01 - 1.0000E+00 9.4000E+01 8.8855E+01 4.0601E+01 3.6364E+01 - 1.1220E+00 7.4295E+01 6.9565E+01 3.1290E+01 2.8370E+01 - 1.2589E+00 5.8087E+01 5.4093E+01 2.4200E+01 2.1509E+01 - 1.4125E+00 4.5073E+01 4.1950E+01 1.8729E+01 1.5983E+01 - 1.5849E+00 3.5084E+01 3.2300E+01 1.4235E+01 1.2014E+01 - 1.7783E+00 2.7046E+01 2.4679E+01 1.0571E+01 8.9849E+00 - 1.9953E+00 2.0679E+01 1.8628E+01 7.8780E+00 6.6364E+00 - 2.2387E+00 1.5777E+01 1.3949E+01 5.8845E+00 4.9399E+00 - 2.5119E+00 1.1870E+01 1.0323E+01 4.3057E+00 3.5941E+00 - 2.8184E+00 8.8428E+00 7.6916E+00 3.1903E+00 2.5672E+00 - 3.1623E+00 6.6428E+00 5.7189E+00 2.2965E+00 1.8251E+00 - 3.5481E+00 4.9409E+00 4.1828E+00 1.6278E+00 1.2893E+00 - 3.9811E+00 3.6416E+00 3.0509E+00 1.1557E+00 9.0001E-01 - 4.4668E+00 2.6726E+00 2.2122E+00 8.1469E-01 6.2927E-01 - 5.0119E+00 1.9472E+00 1.6063E+00 5.6805E-01 4.3780E-01 - 5.6234E+00 1.4137E+00 1.1521E+00 3.9386E-01 2.9926E-01 - 6.3096E+00 1.0216E+00 8.1921E-01 2.7297E-01 2.0479E-01 - 7.0795E+00 7.3297E-01 5.8296E-01 1.8614E-01 1.4154E-01 - 7.9433E+00 5.3048E-01 4.1842E-01 1.2304E-01 9.6827E-02 - 8.9125E+00 3.8390E-01 2.9984E-01 8.2940E-02 6.5494E-02 - 1.0000E+01 2.7070E-01 2.1010E-01 5.6199E-02 4.3023E-02 - 1.1220E+01 1.9293E-01 1.4887E-01 3.7985E-02 2.8663E-02 - 1.2589E+01 1.3807E-01 1.0585E-01 2.5559E-02 1.9384E-02 - 1.4125E+01 9.8811E-02 7.4693E-02 1.6915E-02 1.3075E-02 - 1.5849E+01 6.9876E-02 5.2755E-02 1.1283E-02 8.5185E-03 - 1.7783E+01 4.9702E-02 3.7389E-02 7.6226E-03 5.6790E-03 - 1.9953E+01 3.5312E-02 2.6439E-02 5.0621E-03 3.7994E-03 - 2.2387E+01 2.5011E-02 1.8897E-02 3.3810E-03 2.5534E-03 - 2.5119E+01 1.7660E-02 1.3247E-02 2.2440E-03 1.8002E-03 - 2.8184E+01 1.2400E-02 9.2135E-03 1.5104E-03 1.1523E-03 - 3.1623E+01 8.9749E-03 6.5674E-03 9.7973E-04 7.6903E-04 - 3.5481E+01 6.3650E-03 4.6157E-03 6.5467E-04 5.0875E-04 - 3.9811E+01 4.5042E-03 3.2684E-03 4.2960E-04 3.4183E-04 - 4.4668E+01 3.1770E-03 2.3009E-03 2.8584E-04 2.2673E-04 - 5.0119E+01 2.2433E-03 1.6136E-03 1.9060E-04 1.4999E-04 - 5.6234E+01 1.5800E-03 1.1342E-03 1.2667E-04 1.0245E-04 - 6.3096E+01 1.1102E-03 7.9183E-04 8.5826E-05 6.9935E-05 - 7.0795E+01 7.7987E-04 5.5005E-04 5.8757E-05 4.5933E-05 - 7.9433E+01 5.4833E-04 3.8509E-04 3.9173E-05 3.0620E-05 - 8.9125E+01 3.8411E-04 2.6776E-04 2.5184E-05 2.0916E-05 - 1.0000E+02 2.7009E-04 1.8750E-04 1.7248E-05 1.4209E-05 - 1.1220E+02 1.8913E-04 1.3050E-04 1.1619E-05 9.3889E-06 - 1.2589E+02 1.3260E-04 9.0910E-05 7.9697E-06 6.3393E-06 - 1.4125E+02 9.2848E-05 6.2958E-05 5.3594E-06 4.3168E-06 - 1.5849E+02 6.4975E-05 4.3563E-05 3.5620E-06 2.9062E-06 - 1.7783E+02 4.5427E-05 3.0198E-05 2.4204E-06 1.9882E-06 - 1.9953E+02 3.1734E-05 2.0966E-05 1.6333E-06 1.3522E-06 - 2.2387E+02 2.2129E-05 1.4507E-05 1.1338E-06 8.9418E-07 - 2.5119E+02 1.5408E-05 1.0054E-05 7.6458E-07 5.8370E-07 - 2.8184E+02 1.0628E-05 6.9707E-06 4.9717E-07 4.0481E-07 - 3.1623E+02 7.4414E-06 4.8160E-06 3.4493E-07 2.7023E-07 - 3.5481E+02 5.1490E-06 3.3276E-06 2.3379E-07 1.8160E-07 - 3.9811E+02 3.5669E-06 2.2938E-06 1.5942E-07 1.2408E-07 - 4.4668E+02 2.4679E-06 1.5653E-06 1.0686E-07 8.4059E-08 - 5.0119E+02 1.7148E-06 1.0782E-06 7.0674E-08 5.7461E-08 - 5.6234E+02 1.1894E-06 7.4895E-07 4.6995E-08 3.7281E-08 - 6.3096E+02 8.1517E-07 5.1142E-07 3.1919E-08 2.5187E-08 - 7.0795E+02 5.6056E-07 3.4953E-07 2.2044E-08 1.7071E-08 - 7.9433E+02 3.8378E-07 2.3836E-07 1.4315E-08 1.1492E-08 - 8.9125E+02 2.6403E-07 1.6176E-07 9.5427E-09 7.6897E-09 - 1.0000E+03 1.8241E-07 1.1067E-07 6.4767E-09 5.0330E-09 - 1.1220E+03 1.2274E-07 7.4224E-08 4.1969E-09 3.3548E-09 - 1.2589E+03 8.3110E-08 4.9424E-08 2.9109E-09 2.2642E-09 - 1.4125E+03 5.6127E-08 3.3448E-08 1.9543E-09 1.4743E-09 - 1.5849E+03 3.7778E-08 2.3011E-08 1.2429E-09 9.6939E-10 - 1.7783E+03 2.5761E-08 1.5263E-08 8.4313E-10 6.5166E-10 - 1.9953E+03 1.7282E-08 1.0254E-08 5.6638E-10 4.2563E-10 - 2.2387E+03 1.1503E-08 6.8448E-09 3.8219E-10 2.7948E-10 - 2.5119E+03 7.7243E-09 4.5209E-09 2.4719E-10 1.8677E-10 - 2.8184E+03 5.1995E-09 3.0596E-09 1.5975E-10 1.2293E-10 - 3.1623E+03 3.6043E-09 2.0932E-09 1.0932E-10 7.7212E-11 - 3.5481E+03 2.3382E-09 1.3524E-09 6.6772E-11 4.9668E-11 - 3.9811E+03 1.5528E-09 8.9721E-10 4.3892E-11 3.3268E-11 - 4.4668E+03 1.0327E-09 5.8960E-10 2.8384E-11 2.1607E-11 - 5.0119E+03 6.9091E-10 3.8896E-10 1.8436E-11 1.3192E-11 - 5.6234E+03 4.5853E-10 2.5666E-10 1.2142E-11 8.9674E-12 - 6.3096E+03 3.0104E-10 1.6741E-10 8.2140E-12 6.0792E-12 - 7.0795E+03 1.9927E-10 1.1139E-10 5.9527E-12 3.8182E-12 - 7.9433E+03 1.2945E-10 7.3603E-11 3.7684E-12 2.4532E-12 - 8.9125E+03 8.5065E-11 4.7963E-11 2.3334E-12 1.6464E-12 - 1.0000E+04 5.7445E-11 3.0662E-11 1.4339E-12 9.3257E-13 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5884E+03 2.5769E+03 1.2159E+03 1.3012E+03 - 1.1220E-01 2.3629E+03 2.3526E+03 1.1183E+03 1.1800E+03 - 1.2589E-01 2.1327E+03 2.1204E+03 1.0140E+03 1.0583E+03 - 1.4125E-01 1.9186E+03 1.8944E+03 8.9483E+02 9.3669E+02 - 1.5849E-01 1.7095E+03 1.6852E+03 7.9636E+02 8.1863E+02 - 1.7783E-01 1.5079E+03 1.4901E+03 7.0317E+02 7.2174E+02 - 1.9953E-01 1.3178E+03 1.3048E+03 6.1428E+02 6.2716E+02 - 2.2387E-01 1.1491E+03 1.1209E+03 5.3161E+02 5.3535E+02 - 2.5119E-01 9.9057E+02 9.6559E+02 4.5535E+02 4.5602E+02 - 2.8184E-01 8.3939E+02 8.2296E+02 3.8751E+02 3.8692E+02 - 3.1623E-01 7.0713E+02 6.9220E+02 3.2843E+02 3.2599E+02 - 3.5481E-01 5.9442E+02 5.7904E+02 2.7433E+02 2.7077E+02 - 3.9811E-01 4.9748E+02 4.7933E+02 2.2619E+02 2.2319E+02 - 4.4668E-01 4.1355E+02 3.9943E+02 1.8779E+02 1.8426E+02 - 5.0119E-01 3.3951E+02 3.2979E+02 1.5572E+02 1.4790E+02 - 5.6234E-01 2.7789E+02 2.6835E+02 1.2515E+02 1.1796E+02 - 6.3096E-01 2.2596E+02 2.1696E+02 1.0036E+02 9.5733E+01 - 7.0795E-01 1.8241E+02 1.7718E+02 8.1665E+01 7.5978E+01 - 7.9433E-01 1.4689E+02 1.4276E+02 6.4819E+01 5.8978E+01 - 8.9125E-01 1.1795E+02 1.1152E+02 5.1114E+01 4.6087E+01 - 1.0000E+00 9.4066E+01 8.7999E+01 4.0528E+01 3.6335E+01 - 1.1220E+00 7.3976E+01 6.9815E+01 3.1459E+01 2.8406E+01 - 1.2589E+00 5.7921E+01 5.4771E+01 2.4456E+01 2.1759E+01 - 1.4125E+00 4.5174E+01 4.2066E+01 1.8696E+01 1.6288E+01 - 1.5849E+00 3.5124E+01 3.2572E+01 1.4308E+01 1.2125E+01 - 1.7783E+00 2.7179E+01 2.5010E+01 1.0795E+01 9.0098E+00 - 1.9953E+00 2.0576E+01 1.8788E+01 7.9249E+00 6.7491E+00 - 2.2387E+00 1.5547E+01 1.4040E+01 5.9026E+00 4.9815E+00 - 2.5119E+00 1.1792E+01 1.0466E+01 4.3533E+00 3.5506E+00 - 2.8184E+00 8.9806E+00 7.7809E+00 3.0977E+00 2.5674E+00 - 3.1623E+00 6.6680E+00 5.7291E+00 2.2633E+00 1.8378E+00 - 3.5481E+00 4.9218E+00 4.1856E+00 1.6423E+00 1.2991E+00 - 3.9811E+00 3.6202E+00 3.0404E+00 1.1703E+00 9.1049E-01 - 4.4668E+00 2.6602E+00 2.2177E+00 8.1775E-01 6.3626E-01 - 5.0119E+00 1.9395E+00 1.6173E+00 5.6097E-01 4.3802E-01 - 5.6234E+00 1.4134E+00 1.1666E+00 3.8360E-01 3.0014E-01 - 6.3096E+00 1.0210E+00 8.2942E-01 2.6434E-01 2.0573E-01 - 7.0795E+00 7.3483E-01 5.8778E-01 1.8087E-01 1.4180E-01 - 7.9433E+00 5.2692E-01 4.2012E-01 1.2308E-01 9.6281E-02 - 8.9125E+00 3.8081E-01 3.0405E-01 8.3243E-02 6.3077E-02 - 1.0000E+01 2.7029E-01 2.1080E-01 5.6344E-02 4.2825E-02 - 1.1220E+01 1.9228E-01 1.4918E-01 3.8154E-02 2.8991E-02 - 1.2589E+01 1.3744E-01 1.0553E-01 2.5619E-02 1.9331E-02 - 1.4125E+01 9.7918E-02 7.4655E-02 1.6753E-02 1.2906E-02 - 1.5849E+01 6.9626E-02 5.2960E-02 1.0920E-02 8.7221E-03 - 1.7783E+01 4.9591E-02 3.7590E-02 7.3395E-03 5.7726E-03 - 1.9953E+01 3.4876E-02 2.6595E-02 4.8548E-03 3.7965E-03 - 2.2387E+01 2.4644E-02 1.8811E-02 3.1356E-03 2.6385E-03 - 2.5119E+01 1.7680E-02 1.3177E-02 2.2180E-03 1.7614E-03 - 2.8184E+01 1.2684E-02 9.2953E-03 1.5193E-03 1.1700E-03 - 3.1623E+01 8.9439E-03 6.5558E-03 9.6729E-04 7.6260E-04 - 3.5481E+01 6.3460E-03 4.6098E-03 6.4391E-04 5.0652E-04 - 3.9811E+01 4.4960E-03 3.2411E-03 4.2706E-04 3.3770E-04 - 4.4668E+01 3.1670E-03 2.2879E-03 2.8402E-04 2.2960E-04 - 5.0119E+01 2.2336E-03 1.6073E-03 1.8875E-04 1.5455E-04 - 5.6234E+01 1.5738E-03 1.1248E-03 1.2727E-04 1.0224E-04 - 6.3096E+01 1.1037E-03 7.8742E-04 8.6127E-05 6.9662E-05 - 7.0795E+01 7.7347E-04 5.4959E-04 5.7283E-05 4.7361E-05 - 7.9433E+01 5.4304E-04 3.8247E-04 3.8606E-05 3.0906E-05 - 8.9125E+01 3.8188E-04 2.6400E-04 2.5716E-05 2.0533E-05 - 1.0000E+02 2.7023E-04 1.8747E-04 1.7044E-05 1.3990E-05 - 1.1220E+02 1.8945E-04 1.3093E-04 1.1481E-05 9.4326E-06 - 1.2589E+02 1.3287E-04 9.0724E-05 7.8400E-06 6.3931E-06 - 1.4125E+02 9.3347E-05 6.3013E-05 5.3195E-06 4.3145E-06 - 1.5849E+02 6.4959E-05 4.3660E-05 3.6026E-06 2.8807E-06 - 1.7783E+02 4.5358E-05 3.0189E-05 2.3813E-06 1.9650E-06 - 1.9953E+02 3.1713E-05 2.1115E-05 1.6429E-06 1.3155E-06 - 2.2387E+02 2.1998E-05 1.4635E-05 1.1095E-06 8.7182E-07 - 2.5119E+02 1.5324E-05 1.0023E-05 7.2925E-07 5.9782E-07 - 2.8184E+02 1.0685E-05 6.9370E-06 5.0589E-07 3.9253E-07 - 3.1623E+02 7.4632E-06 4.8328E-06 3.4485E-07 2.6929E-07 - 3.5481E+02 5.1719E-06 3.3275E-06 2.3224E-07 1.8260E-07 - 3.9811E+02 3.5834E-06 2.2839E-06 1.5915E-07 1.2287E-07 - 4.4668E+02 2.4801E-06 1.5673E-06 1.0527E-07 8.3198E-08 - 5.0119E+02 1.7245E-06 1.0825E-06 7.1647E-08 5.6578E-08 - 5.6234E+02 1.1971E-06 7.4893E-07 4.8349E-08 3.8172E-08 - 6.3096E+02 8.1867E-07 5.0992E-07 3.2404E-08 2.5343E-08 - 7.0795E+02 5.5934E-07 3.4778E-07 2.1870E-08 1.6570E-08 - 7.9433E+02 3.8435E-07 2.3655E-07 1.4832E-08 1.1591E-08 - 8.9125E+02 2.6483E-07 1.6081E-07 1.0122E-08 7.3612E-09 - 1.0000E+03 1.8195E-07 1.1157E-07 6.5020E-09 4.8118E-09 - 1.1220E+03 1.2356E-07 7.4550E-08 4.3056E-09 3.3789E-09 - 1.2589E+03 8.3985E-08 5.0698E-08 2.9596E-09 2.1906E-09 - 1.4125E+03 5.6840E-08 3.4279E-08 1.9607E-09 1.4440E-09 - 1.5849E+03 3.8610E-08 2.2549E-08 1.2909E-09 9.9066E-10 - 1.7783E+03 2.5901E-08 1.5261E-08 8.5001E-10 6.2555E-10 - 1.9953E+03 1.7527E-08 1.0268E-08 5.6750E-10 4.1523E-10 - 2.2387E+03 1.1836E-08 6.9007E-09 3.6528E-10 2.6196E-10 - 2.5119E+03 7.9148E-09 4.6239E-09 2.3729E-10 1.7832E-10 - 2.8184E+03 5.2475E-09 3.1151E-09 1.6235E-10 1.1744E-10 - 3.1623E+03 3.5923E-09 2.1060E-09 1.0503E-10 7.8824E-11 - 3.5481E+03 2.3284E-09 1.3470E-09 6.6804E-11 4.6526E-11 - 3.9811E+03 1.5567E-09 8.8563E-10 4.4558E-11 3.0479E-11 - 4.4668E+03 1.0293E-09 5.9027E-10 3.2773E-11 2.0972E-11 - 5.0119E+03 6.7859E-10 3.8287E-10 2.2102E-11 1.3873E-11 - 5.6234E+03 4.4993E-10 2.5465E-10 1.4208E-11 9.8192E-12 - 6.3096E+03 2.9817E-10 1.6946E-10 8.8288E-12 6.2676E-12 - 7.0795E+03 1.9757E-10 1.0916E-10 5.3910E-12 4.3152E-12 - 7.9433E+03 1.2978E-10 7.1505E-11 3.8199E-12 2.8282E-12 - 8.9125E+03 8.4285E-11 4.6928E-11 2.5932E-12 1.6649E-12 - 1.0000E+04 5.5648E-11 3.0445E-11 1.5387E-12 1.0861E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.7929E+03 2.7977E+03 1.3263E+03 1.4072E+03 - 1.1220E-01 2.5383E+03 2.5519E+03 1.2050E+03 1.2713E+03 - 1.2589E-01 2.3054E+03 2.3106E+03 1.0869E+03 1.1290E+03 - 1.4125E-01 2.0740E+03 2.0618E+03 9.6814E+02 1.0011E+03 - 1.5849E-01 1.8413E+03 1.8318E+03 8.5913E+02 8.8480E+02 - 1.7783E-01 1.6239E+03 1.6215E+03 7.5606E+02 7.7222E+02 - 1.9953E-01 1.4205E+03 1.4058E+03 6.5409E+02 6.7096E+02 - 2.2387E-01 1.2369E+03 1.2030E+03 5.6762E+02 5.7423E+02 - 2.5119E-01 1.0559E+03 1.0307E+03 4.9079E+02 4.8590E+02 - 2.8184E-01 8.9353E+02 8.7963E+02 4.1736E+02 4.1156E+02 - 3.1623E-01 7.5168E+02 7.4009E+02 3.5347E+02 3.4312E+02 - 3.5481E-01 6.3163E+02 6.1881E+02 2.9551E+02 2.8289E+02 - 3.9811E-01 5.3021E+02 5.1621E+02 2.4533E+02 2.3341E+02 - 4.4668E-01 4.3980E+02 4.2642E+02 2.0378E+02 1.9315E+02 - 5.0119E-01 3.5951E+02 3.5114E+02 1.6521E+02 1.5869E+02 - 5.6234E-01 2.9317E+02 2.8605E+02 1.3447E+02 1.2765E+02 - 6.3096E-01 2.4016E+02 2.2957E+02 1.0958E+02 1.0218E+02 - 7.0795E-01 1.9567E+02 1.8503E+02 8.7245E+01 8.1042E+01 - 7.9433E-01 1.5526E+02 1.4899E+02 6.8978E+01 6.2813E+01 - 8.9125E-01 1.2287E+02 1.1801E+02 5.4513E+01 4.8643E+01 - 1.0000E+00 9.8040E+01 9.3159E+01 4.2789E+01 3.7874E+01 - 1.1220E+00 7.7453E+01 7.2380E+01 3.3191E+01 2.9059E+01 - 1.2589E+00 6.0372E+01 5.6172E+01 2.5498E+01 2.2094E+01 - 1.4125E+00 4.6776E+01 4.3473E+01 1.9327E+01 1.6869E+01 - 1.5849E+00 3.6140E+01 3.3185E+01 1.4693E+01 1.2614E+01 - 1.7783E+00 2.7909E+01 2.5077E+01 1.1125E+01 9.2744E+00 - 1.9953E+00 2.1258E+01 1.8949E+01 8.2521E+00 6.8347E+00 - 2.2387E+00 1.6065E+01 1.4297E+01 6.0790E+00 5.0181E+00 - 2.5119E+00 1.2062E+01 1.0656E+01 4.5080E+00 3.6240E+00 - 2.8184E+00 9.1118E+00 7.9464E+00 3.2390E+00 2.6313E+00 - 3.1623E+00 6.7723E+00 5.8409E+00 2.3203E+00 1.8558E+00 - 3.5481E+00 5.0030E+00 4.2766E+00 1.6476E+00 1.3146E+00 - 3.9811E+00 3.6740E+00 3.1069E+00 1.1646E+00 9.2862E-01 - 4.4668E+00 2.6893E+00 2.2463E+00 8.1967E-01 6.4341E-01 - 5.0119E+00 1.9585E+00 1.6167E+00 5.7314E-01 4.3756E-01 - 5.6234E+00 1.4144E+00 1.1622E+00 3.9647E-01 3.0292E-01 - 6.3096E+00 1.0256E+00 8.3502E-01 2.7249E-01 2.1055E-01 - 7.0795E+00 7.4427E-01 5.9453E-01 1.8821E-01 1.4286E-01 - 7.9433E+00 5.4076E-01 4.2904E-01 1.2794E-01 9.6537E-02 - 8.9125E+00 3.8682E-01 3.0440E-01 8.6533E-02 6.4461E-02 - 1.0000E+01 2.7052E-01 2.1211E-01 5.6514E-02 4.3393E-02 - 1.1220E+01 1.9187E-01 1.4985E-01 3.7770E-02 2.9067E-02 - 1.2589E+01 1.3747E-01 1.0560E-01 2.5580E-02 1.9358E-02 - 1.4125E+01 9.8448E-02 7.4274E-02 1.7216E-02 1.2901E-02 - 1.5849E+01 7.0159E-02 5.2199E-02 1.1371E-02 8.6232E-03 - 1.7783E+01 4.9727E-02 3.6964E-02 7.5573E-03 5.7544E-03 - 1.9953E+01 3.5319E-02 2.6343E-02 4.9920E-03 3.8905E-03 - 2.2387E+01 2.5478E-02 1.8712E-02 3.2538E-03 2.5633E-03 - 2.5119E+01 1.7713E-02 1.3208E-02 2.0830E-03 1.6476E-03 - 2.8184E+01 1.2518E-02 9.4134E-03 1.4481E-03 1.1776E-03 - 3.1623E+01 8.9547E-03 6.5648E-03 9.7259E-04 7.6544E-04 - 3.5481E+01 6.3350E-03 4.6212E-03 6.4363E-04 5.1224E-04 - 3.9811E+01 4.4775E-03 3.2416E-03 4.3030E-04 3.4090E-04 - 4.4668E+01 3.1623E-03 2.2808E-03 2.8645E-04 2.2808E-04 - 5.0119E+01 2.2315E-03 1.5991E-03 1.9140E-04 1.5397E-04 - 5.6234E+01 1.5769E-03 1.1119E-03 1.2703E-04 1.0230E-04 - 6.3096E+01 1.1110E-03 7.8191E-04 8.3877E-05 6.7449E-05 - 7.0795E+01 7.8075E-04 5.5219E-04 5.6193E-05 4.5150E-05 - 7.9433E+01 5.4856E-04 3.8513E-04 3.7708E-05 3.0526E-05 - 8.9125E+01 3.8488E-04 2.6644E-04 2.5170E-05 2.0687E-05 - 1.0000E+02 2.7003E-04 1.8725E-04 1.7469E-05 1.3974E-05 - 1.1220E+02 1.8898E-04 1.2982E-04 1.1702E-05 9.3692E-06 - 1.2589E+02 1.3191E-04 9.0703E-05 7.8604E-06 6.2727E-06 - 1.4125E+02 9.2362E-05 6.3295E-05 5.2958E-06 4.2685E-06 - 1.5849E+02 6.4592E-05 4.3897E-05 3.5339E-06 2.9358E-06 - 1.7783E+02 4.4940E-05 3.0507E-05 2.3666E-06 1.9747E-06 - 1.9953E+02 3.1472E-05 2.1007E-05 1.6310E-06 1.3429E-06 - 2.2387E+02 2.1997E-05 1.4389E-05 1.1293E-06 8.9937E-07 - 2.5119E+02 1.5218E-05 9.9034E-06 7.5669E-07 5.9702E-07 - 2.8184E+02 1.0625E-05 6.8746E-06 4.9176E-07 4.0143E-07 - 3.1623E+02 7.4509E-06 4.8104E-06 3.3638E-07 2.6816E-07 - 3.5481E+02 5.1284E-06 3.3192E-06 2.2581E-07 1.8197E-07 - 3.9811E+02 3.5585E-06 2.2866E-06 1.5205E-07 1.2061E-07 - 4.4668E+02 2.4754E-06 1.5643E-06 1.0102E-07 8.1049E-08 - 5.0119E+02 1.7058E-06 1.0782E-06 6.9299E-08 5.5911E-08 - 5.6234E+02 1.1870E-06 7.4270E-07 4.8320E-08 3.6917E-08 - 6.3096E+02 8.1502E-07 5.0921E-07 3.2538E-08 2.5559E-08 - 7.0795E+02 5.5982E-07 3.4898E-07 2.1524E-08 1.6899E-08 - 7.9433E+02 3.8506E-07 2.3660E-07 1.4715E-08 1.0961E-08 - 8.9125E+02 2.6244E-07 1.6089E-07 9.6976E-09 7.5041E-09 - 1.0000E+03 1.8111E-07 1.1071E-07 6.3911E-09 4.8488E-09 - 1.1220E+03 1.2314E-07 7.3940E-08 4.2950E-09 3.2212E-09 - 1.2589E+03 8.3325E-08 4.9866E-08 2.8802E-09 2.1489E-09 - 1.4125E+03 5.6400E-08 3.3938E-08 1.9484E-09 1.4021E-09 - 1.5849E+03 3.8172E-08 2.2867E-08 1.2925E-09 9.1713E-10 - 1.7783E+03 2.5763E-08 1.5376E-08 8.5273E-10 6.0691E-10 - 1.9953E+03 1.7415E-08 1.0281E-08 5.4914E-10 3.9033E-10 - 2.2387E+03 1.1661E-08 6.9006E-09 3.6945E-10 2.6465E-10 - 2.5119E+03 7.8863E-09 4.6182E-09 2.5168E-10 1.7684E-10 - 2.8184E+03 5.2954E-09 3.0717E-09 1.6813E-10 1.1336E-10 - 3.1623E+03 3.6115E-09 2.0990E-09 1.1109E-10 8.1366E-11 - 3.5481E+03 2.3480E-09 1.3713E-09 6.9284E-11 5.2888E-11 - 3.9811E+03 1.5527E-09 8.9247E-10 4.5824E-11 3.4053E-11 - 4.4668E+03 1.0284E-09 5.8942E-10 3.3711E-11 2.4697E-11 - 5.0119E+03 6.8614E-10 3.9103E-10 2.1573E-11 1.5710E-11 - 5.6234E+03 4.5340E-10 2.5468E-10 1.3167E-11 8.2967E-12 - 6.3096E+03 2.9829E-10 1.6841E-10 8.2808E-12 6.0540E-12 - 7.0795E+03 1.9682E-10 1.1216E-10 5.6488E-12 4.1744E-12 - 7.9433E+03 1.2948E-10 7.2642E-11 3.9262E-12 2.7939E-12 - 8.9125E+03 8.4499E-11 4.7368E-11 2.4466E-12 1.9129E-12 - 1.0000E+04 5.6199E-11 3.0930E-11 1.5347E-12 1.3495E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0416E+03 3.0378E+03 1.4458E+03 1.5136E+03 - 1.1220E-01 2.7564E+03 2.7656E+03 1.3032E+03 1.3575E+03 - 1.2589E-01 2.5030E+03 2.4864E+03 1.1827E+03 1.2107E+03 - 1.4125E-01 2.2387E+03 2.2228E+03 1.0584E+03 1.0822E+03 - 1.5849E-01 1.9937E+03 1.9831E+03 9.3431E+02 9.5344E+02 - 1.7783E-01 1.7704E+03 1.7472E+03 8.2452E+02 8.3326E+02 - 1.9953E-01 1.5422E+03 1.5219E+03 7.1844E+02 7.1805E+02 - 2.2387E-01 1.3312E+03 1.3159E+03 6.2018E+02 6.1237E+02 - 2.5119E-01 1.1369E+03 1.1257E+03 5.3257E+02 5.2177E+02 - 2.8184E-01 9.6656E+02 9.5549E+02 4.5102E+02 4.4257E+02 - 3.1623E-01 8.1618E+02 8.0480E+02 3.8247E+02 3.7126E+02 - 3.5481E-01 6.8391E+02 6.7209E+02 3.2205E+02 3.0390E+02 - 3.9811E-01 5.6646E+02 5.5556E+02 2.6534E+02 2.5083E+02 - 4.4668E-01 4.6852E+02 4.5881E+02 2.1540E+02 2.0617E+02 - 5.0119E-01 3.8406E+02 3.7772E+02 1.7622E+02 1.6588E+02 - 5.6234E-01 3.1185E+02 3.0490E+02 1.4381E+02 1.3322E+02 - 6.3096E-01 2.5373E+02 2.4600E+02 1.1602E+02 1.0701E+02 - 7.0795E-01 2.0543E+02 1.9572E+02 9.2923E+01 8.5565E+01 - 7.9433E-01 1.6502E+02 1.5647E+02 7.3027E+01 6.7045E+01 - 8.9125E-01 1.3103E+02 1.2534E+02 5.7362E+01 5.1435E+01 - 1.0000E+00 1.0288E+02 9.7324E+01 4.5190E+01 3.9873E+01 - 1.1220E+00 8.0347E+01 7.5547E+01 3.4879E+01 3.0566E+01 - 1.2589E+00 6.2821E+01 5.8819E+01 2.6959E+01 2.3320E+01 - 1.4125E+00 4.9027E+01 4.5578E+01 2.0265E+01 1.7345E+01 - 1.5849E+00 3.7622E+01 3.4599E+01 1.5247E+01 1.2863E+01 - 1.7783E+00 2.8762E+01 2.6006E+01 1.1656E+01 9.5799E+00 - 1.9953E+00 2.2052E+01 1.9581E+01 8.7116E+00 6.9358E+00 - 2.2387E+00 1.6622E+01 1.4611E+01 6.3787E+00 5.0632E+00 - 2.5119E+00 1.2316E+01 1.0858E+01 4.6151E+00 3.7397E+00 - 2.8184E+00 9.1020E+00 8.0846E+00 3.2627E+00 2.6648E+00 - 3.1623E+00 6.8435E+00 5.9025E+00 2.3754E+00 1.8983E+00 - 3.5481E+00 5.0556E+00 4.2956E+00 1.6904E+00 1.3173E+00 - 3.9811E+00 3.6990E+00 3.1149E+00 1.1950E+00 9.1192E-01 - 4.4668E+00 2.7052E+00 2.2537E+00 8.4541E-01 6.4029E-01 - 5.0119E+00 1.9647E+00 1.6235E+00 5.8284E-01 4.4668E-01 - 5.6234E+00 1.4188E+00 1.1609E+00 4.0067E-01 3.0149E-01 - 6.3096E+00 1.0230E+00 8.2844E-01 2.7679E-01 2.0574E-01 - 7.0795E+00 7.3658E-01 5.9311E-01 1.8774E-01 1.3961E-01 - 7.9433E+00 5.2776E-01 4.2129E-01 1.2597E-01 9.5690E-02 - 8.9125E+00 3.7886E-01 2.9785E-01 8.2900E-02 6.5179E-02 - 1.0000E+01 2.6962E-01 2.1197E-01 5.6980E-02 4.3481E-02 - 1.1220E+01 1.9306E-01 1.5004E-01 3.8239E-02 2.9332E-02 - 1.2589E+01 1.3828E-01 1.0590E-01 2.5555E-02 1.9222E-02 - 1.4125E+01 9.7827E-02 7.4600E-02 1.7008E-02 1.3040E-02 - 1.5849E+01 6.9346E-02 5.2309E-02 1.1204E-02 8.5000E-03 - 1.7783E+01 4.9511E-02 3.6889E-02 7.4413E-03 5.6578E-03 - 1.9953E+01 3.5058E-02 2.6339E-02 5.0461E-03 3.7961E-03 - 2.2387E+01 2.4764E-02 1.8737E-02 3.3843E-03 2.4935E-03 - 2.5119E+01 1.7821E-02 1.3050E-02 2.1990E-03 1.7026E-03 - 2.8184E+01 1.2765E-02 9.0659E-03 1.4234E-03 1.1536E-03 - 3.1623E+01 8.9979E-03 6.6164E-03 9.7461E-04 7.6788E-04 - 3.5481E+01 6.3713E-03 4.6468E-03 6.4591E-04 5.1072E-04 - 3.9811E+01 4.4983E-03 3.2638E-03 4.2634E-04 3.4263E-04 - 4.4668E+01 3.1861E-03 2.2999E-03 2.8533E-04 2.3207E-04 - 5.0119E+01 2.2543E-03 1.6114E-03 1.9111E-04 1.5599E-04 - 5.6234E+01 1.5866E-03 1.1327E-03 1.2752E-04 1.0414E-04 - 6.3096E+01 1.1112E-03 7.9018E-04 8.6288E-05 6.9701E-05 - 7.0795E+01 7.8607E-04 5.5268E-04 5.7681E-05 4.6753E-05 - 7.9433E+01 5.5583E-04 3.9026E-04 3.8300E-05 3.2144E-05 - 8.9125E+01 3.8860E-04 2.7219E-04 2.5803E-05 2.1494E-05 - 1.0000E+02 2.7008E-04 1.8798E-04 1.7654E-05 1.4139E-05 - 1.1220E+02 1.8918E-04 1.3028E-04 1.1848E-05 9.6387E-06 - 1.2589E+02 1.3301E-04 9.0706E-05 7.8609E-06 6.4702E-06 - 1.4125E+02 9.2978E-05 6.3241E-05 5.2029E-06 4.3277E-06 - 1.5849E+02 6.4884E-05 4.3711E-05 3.5932E-06 2.8871E-06 - 1.7783E+02 4.5393E-05 3.0225E-05 2.4406E-06 1.9391E-06 - 1.9953E+02 3.1512E-05 2.1110E-05 1.6064E-06 1.3255E-06 - 2.2387E+02 2.1883E-05 1.4601E-05 1.0753E-06 8.7208E-07 - 2.5119E+02 1.5312E-05 1.0070E-05 7.2358E-07 5.8025E-07 - 2.8184E+02 1.0751E-05 6.9471E-06 5.0971E-07 4.1105E-07 - 3.1623E+02 7.4337E-06 4.8434E-06 3.4592E-07 2.7463E-07 - 3.5481E+02 5.1581E-06 3.3228E-06 2.3391E-07 1.8324E-07 - 3.9811E+02 3.5813E-06 2.2827E-06 1.5731E-07 1.2299E-07 - 4.4668E+02 2.4711E-06 1.5715E-06 1.0759E-07 8.2748E-08 - 5.0119E+02 1.7150E-06 1.0817E-06 7.2904E-08 5.6551E-08 - 5.6234E+02 1.1999E-06 7.4822E-07 4.7127E-08 3.7483E-08 - 6.3096E+02 8.2066E-07 5.0668E-07 3.1774E-08 2.5499E-08 - 7.0795E+02 5.6265E-07 3.4703E-07 2.1920E-08 1.6893E-08 - 7.9433E+02 3.8450E-07 2.3759E-07 1.4598E-08 1.0885E-08 - 8.9125E+02 2.6279E-07 1.6116E-07 9.6113E-09 7.2937E-09 - 1.0000E+03 1.8220E-07 1.1071E-07 6.3343E-09 4.9806E-09 - 1.1220E+03 1.2262E-07 7.4336E-08 4.1299E-09 3.3399E-09 - 1.2589E+03 8.2984E-08 5.0140E-08 2.8898E-09 2.2660E-09 - 1.4125E+03 5.6388E-08 3.3696E-08 1.8814E-09 1.5309E-09 - 1.5849E+03 3.8340E-08 2.2815E-08 1.1809E-09 9.8547E-10 - 1.7783E+03 2.5922E-08 1.5191E-08 8.3973E-10 6.3109E-10 - 1.9953E+03 1.7592E-08 1.0319E-08 5.7608E-10 4.0786E-10 - 2.2387E+03 1.1821E-08 6.9476E-09 3.7675E-10 2.6892E-10 - 2.5119E+03 7.8987E-09 4.5768E-09 2.3712E-10 1.8203E-10 - 2.8184E+03 5.2723E-09 3.0512E-09 1.5361E-10 1.3072E-10 - 3.1623E+03 3.6438E-09 2.0766E-09 1.0835E-10 8.0969E-11 - 3.5481E+03 2.3688E-09 1.3418E-09 7.1811E-11 5.3004E-11 - 3.9811E+03 1.5445E-09 8.9177E-10 4.7180E-11 3.6231E-11 - 4.4668E+03 1.0231E-09 5.8620E-10 3.0616E-11 2.4593E-11 - 5.0119E+03 6.9188E-10 3.8159E-10 1.9002E-11 1.3268E-11 - 5.6234E+03 4.5258E-10 2.5109E-10 1.1526E-11 8.8093E-12 - 6.3096E+03 2.9795E-10 1.6800E-10 8.9883E-12 6.4110E-12 - 7.0795E+03 1.9860E-10 1.0870E-10 5.7630E-12 3.9234E-12 - 7.9433E+03 1.3102E-10 6.9947E-11 3.5406E-12 2.3950E-12 - 8.9125E+03 8.5497E-11 4.6887E-11 2.2070E-12 1.6339E-12 - 1.0000E+04 5.6767E-11 3.1225E-11 1.5008E-12 1.0931E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1552E+03 3.1606E+03 1.4970E+03 1.5848E+03 - 1.1220E-01 2.8654E+03 2.8591E+03 1.3568E+03 1.4199E+03 - 1.2589E-01 2.5867E+03 2.5891E+03 1.2231E+03 1.2702E+03 - 1.4125E-01 2.3241E+03 2.3242E+03 1.0980E+03 1.1314E+03 - 1.5849E-01 2.0602E+03 2.0532E+03 9.6562E+02 9.9212E+02 - 1.7783E-01 1.8204E+03 1.7913E+03 8.4559E+02 8.6141E+02 - 1.9953E-01 1.5865E+03 1.5542E+03 7.3636E+02 7.4122E+02 - 2.2387E-01 1.3597E+03 1.3478E+03 6.3767E+02 6.3374E+02 - 2.5119E-01 1.1628E+03 1.1537E+03 5.4888E+02 5.3617E+02 - 2.8184E-01 9.8627E+02 9.7425E+02 4.6318E+02 4.4985E+02 - 3.1623E-01 8.2821E+02 8.2169E+02 3.8427E+02 3.7757E+02 - 3.5481E-01 6.9566E+02 6.8317E+02 3.2268E+02 3.1402E+02 - 3.9811E-01 5.7877E+02 5.6214E+02 2.6999E+02 2.5770E+02 - 4.4668E-01 4.7727E+02 4.6640E+02 2.2329E+02 2.1017E+02 - 5.0119E-01 3.9264E+02 3.8410E+02 1.8160E+02 1.6897E+02 - 5.6234E-01 3.1988E+02 3.0957E+02 1.4530E+02 1.3539E+02 - 6.3096E-01 2.5929E+02 2.4745E+02 1.1682E+02 1.0842E+02 - 7.0795E-01 2.0741E+02 1.9997E+02 9.4604E+01 8.4396E+01 - 7.9433E-01 1.6497E+02 1.6038E+02 7.5010E+01 6.6365E+01 - 8.9125E-01 1.3155E+02 1.2654E+02 5.8186E+01 5.1943E+01 - 1.0000E+00 1.0392E+02 9.8804E+01 4.5595E+01 4.0414E+01 - 1.1220E+00 8.1450E+01 7.6899E+01 3.5365E+01 3.0932E+01 - 1.2589E+00 6.3715E+01 5.9560E+01 2.7206E+01 2.3608E+01 - 1.4125E+00 4.9451E+01 4.5647E+01 2.0918E+01 1.7758E+01 - 1.5849E+00 3.8158E+01 3.4508E+01 1.5722E+01 1.3231E+01 - 1.7783E+00 2.9149E+01 2.6323E+01 1.1661E+01 9.7618E+00 - 1.9953E+00 2.2146E+01 1.9948E+01 8.6226E+00 7.0909E+00 - 2.2387E+00 1.6767E+01 1.4818E+01 6.3019E+00 5.1417E+00 - 2.5119E+00 1.2400E+01 1.1023E+01 4.6008E+00 3.7494E+00 - 2.8184E+00 9.1755E+00 8.1904E+00 3.3094E+00 2.6772E+00 - 3.1623E+00 6.8326E+00 5.9167E+00 2.3876E+00 1.8809E+00 - 3.5481E+00 5.0426E+00 4.2968E+00 1.7042E+00 1.3327E+00 - 3.9811E+00 3.7051E+00 3.1145E+00 1.1931E+00 9.3126E-01 - 4.4668E+00 2.7052E+00 2.2482E+00 8.2797E-01 6.4211E-01 - 5.0119E+00 1.9723E+00 1.6108E+00 5.7582E-01 4.4034E-01 - 5.6234E+00 1.4242E+00 1.1445E+00 3.9196E-01 3.0490E-01 - 6.3096E+00 1.0181E+00 8.1733E-01 2.6483E-01 2.0797E-01 - 7.0795E+00 7.3563E-01 5.8120E-01 1.8188E-01 1.4122E-01 - 7.9433E+00 5.2688E-01 4.1282E-01 1.2264E-01 9.4230E-02 - 8.9125E+00 3.8097E-01 2.9518E-01 8.2354E-02 6.2730E-02 - 1.0000E+01 2.6992E-01 2.1024E-01 5.6480E-02 4.2645E-02 - 1.1220E+01 1.9064E-01 1.4854E-01 3.8079E-02 2.8932E-02 - 1.2589E+01 1.3649E-01 1.0512E-01 2.5179E-02 1.9398E-02 - 1.4125E+01 9.7878E-02 7.4424E-02 1.7026E-02 1.2878E-02 - 1.5849E+01 6.9511E-02 5.2960E-02 1.1181E-02 8.4734E-03 - 1.7783E+01 4.9179E-02 3.7533E-02 7.2309E-03 5.8292E-03 - 1.9953E+01 3.5179E-02 2.6267E-02 4.8399E-03 3.9166E-03 - 2.2387E+01 2.5104E-02 1.8521E-02 3.2498E-03 2.5461E-03 - 2.5119E+01 1.7614E-02 1.3133E-02 2.1552E-03 1.6497E-03 - 2.8184E+01 1.2461E-02 9.2956E-03 1.4285E-03 1.0443E-03 - 3.1623E+01 8.9844E-03 6.5660E-03 9.6926E-04 7.6408E-04 - 3.5481E+01 6.3374E-03 4.6198E-03 6.4140E-04 5.1006E-04 - 3.9811E+01 4.4699E-03 3.2609E-03 4.2562E-04 3.4000E-04 - 4.4668E+01 3.1680E-03 2.2890E-03 2.8515E-04 2.2755E-04 - 5.0119E+01 2.2409E-03 1.5951E-03 1.8832E-04 1.5051E-04 - 5.6234E+01 1.5753E-03 1.1205E-03 1.2627E-04 9.9756E-05 - 6.3096E+01 1.1097E-03 7.9014E-04 8.4648E-05 6.6736E-05 - 7.0795E+01 7.8204E-04 5.5322E-04 5.6607E-05 4.4544E-05 - 7.9433E+01 5.5142E-04 3.8583E-04 3.8694E-05 3.0423E-05 - 8.9125E+01 3.8638E-04 2.7012E-04 2.6153E-05 2.0510E-05 - 1.0000E+02 2.7001E-04 1.8686E-04 1.7236E-05 1.4037E-05 - 1.1220E+02 1.8849E-04 1.3019E-04 1.1637E-05 9.3694E-06 - 1.2589E+02 1.3188E-04 9.0855E-05 7.8461E-06 6.3543E-06 - 1.4125E+02 9.2350E-05 6.3145E-05 5.1918E-06 4.3714E-06 - 1.5849E+02 6.4545E-05 4.3735E-05 3.4744E-06 2.9235E-06 - 1.7783E+02 4.5445E-05 3.0340E-05 2.4047E-06 1.9597E-06 - 1.9953E+02 3.1793E-05 2.0921E-05 1.6889E-06 1.3166E-06 - 2.2387E+02 2.2173E-05 1.4482E-05 1.1188E-06 8.9295E-07 - 2.5119E+02 1.5399E-05 1.0069E-05 7.3159E-07 6.0291E-07 - 2.8184E+02 1.0620E-05 7.0249E-06 5.0359E-07 4.0225E-07 - 3.1623E+02 7.4315E-06 4.7965E-06 3.4018E-07 2.7061E-07 - 3.5481E+02 5.1490E-06 3.3119E-06 2.3123E-07 1.8667E-07 - 3.9811E+02 3.5934E-06 2.2863E-06 1.5531E-07 1.2478E-07 - 4.4668E+02 2.4994E-06 1.5736E-06 1.0600E-07 8.2498E-08 - 5.0119E+02 1.7185E-06 1.0887E-06 7.1196E-08 5.6513E-08 - 5.6234E+02 1.1931E-06 7.4768E-07 4.7302E-08 3.6681E-08 - 6.3096E+02 8.1392E-07 5.0903E-07 3.1741E-08 2.5035E-08 - 7.0795E+02 5.6005E-07 3.4579E-07 2.1864E-08 1.6855E-08 - 7.9433E+02 3.8823E-07 2.3573E-07 1.4456E-08 1.1289E-08 - 8.9125E+02 2.6549E-07 1.6071E-07 9.1623E-09 7.6511E-09 - 1.0000E+03 1.8114E-07 1.0987E-07 6.2775E-09 4.9217E-09 - 1.1220E+03 1.2228E-07 7.3878E-08 4.1067E-09 3.3417E-09 - 1.2589E+03 8.3248E-08 5.0011E-08 2.7958E-09 2.2486E-09 - 1.4125E+03 5.6467E-08 3.3762E-08 1.9042E-09 1.5612E-09 - 1.5849E+03 3.8626E-08 2.2752E-08 1.3593E-09 9.9973E-10 - 1.7783E+03 2.6255E-08 1.5306E-08 9.1929E-10 5.8983E-10 - 1.9953E+03 1.7566E-08 1.0164E-08 5.7040E-10 4.2182E-10 - 2.2387E+03 1.1780E-08 6.8811E-09 3.7516E-10 2.9023E-10 - 2.5119E+03 7.8290E-09 4.6457E-09 2.5849E-10 1.8251E-10 - 2.8184E+03 5.2342E-09 3.0453E-09 1.7339E-10 1.2166E-10 - 3.1623E+03 3.6220E-09 2.0953E-09 1.0357E-10 7.7369E-11 - 3.5481E+03 2.3394E-09 1.3692E-09 6.9453E-11 5.1997E-11 - 3.9811E+03 1.5664E-09 9.0461E-10 4.7261E-11 3.5938E-11 - 4.4668E+03 1.0527E-09 5.8726E-10 3.2048E-11 2.3338E-11 - 5.0119E+03 6.9113E-10 3.8291E-10 2.0962E-11 1.4193E-11 - 5.6234E+03 4.5195E-10 2.5508E-10 1.4339E-11 1.0440E-11 - 6.3096E+03 2.9945E-10 1.6802E-10 8.5395E-12 6.1430E-12 - 7.0795E+03 1.9492E-10 1.0994E-10 5.4777E-12 3.9483E-12 - 7.9433E+03 1.2899E-10 7.3037E-11 3.6027E-12 2.6313E-12 - 8.9125E+03 8.5937E-11 4.7500E-11 2.1754E-12 1.8178E-12 - 1.0000E+04 5.6007E-11 3.0389E-11 1.4393E-12 1.2343E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1762E+03 3.1560E+03 1.4724E+03 1.5904E+03 - 1.1220E-01 2.8823E+03 2.8415E+03 1.3527E+03 1.4375E+03 - 1.2589E-01 2.5890E+03 2.5645E+03 1.2199E+03 1.2722E+03 - 1.4125E-01 2.3090E+03 2.2883E+03 1.0808E+03 1.1221E+03 - 1.5849E-01 2.0462E+03 2.0105E+03 9.4564E+02 9.8475E+02 - 1.7783E-01 1.7997E+03 1.7602E+03 8.2409E+02 8.5143E+02 - 1.9953E-01 1.5643E+03 1.5264E+03 7.1563E+02 7.3632E+02 - 2.2387E-01 1.3466E+03 1.3126E+03 6.1800E+02 6.2796E+02 - 2.5119E-01 1.1465E+03 1.1261E+03 5.2916E+02 5.3310E+02 - 2.8184E-01 9.7145E+02 9.5072E+02 4.4936E+02 4.4657E+02 - 3.1623E-01 8.1520E+02 7.9820E+02 3.7908E+02 3.6966E+02 - 3.5481E-01 6.7985E+02 6.6825E+02 3.1923E+02 3.1002E+02 - 3.9811E-01 5.6472E+02 5.4967E+02 2.6598E+02 2.5360E+02 - 4.4668E-01 4.6776E+02 4.5373E+02 2.1514E+02 2.0369E+02 - 5.0119E-01 3.8245E+02 3.7340E+02 1.7275E+02 1.6641E+02 - 5.6234E-01 3.1007E+02 3.0043E+02 1.4075E+02 1.3458E+02 - 6.3096E-01 2.5193E+02 2.4090E+02 1.1463E+02 1.0645E+02 - 7.0795E-01 2.0281E+02 1.9414E+02 9.1599E+01 8.3899E+01 - 7.9433E-01 1.6235E+02 1.5411E+02 7.2624E+01 6.5001E+01 - 8.9125E-01 1.2986E+02 1.2182E+02 5.6748E+01 5.0553E+01 - 1.0000E+00 1.0225E+02 9.6286E+01 4.4227E+01 3.9711E+01 - 1.1220E+00 8.0158E+01 7.5303E+01 3.4411E+01 3.0392E+01 - 1.2589E+00 6.2596E+01 5.8475E+01 2.6546E+01 2.2758E+01 - 1.4125E+00 4.8799E+01 4.5132E+01 2.0255E+01 1.7131E+01 - 1.5849E+00 3.7418E+01 3.4509E+01 1.5291E+01 1.3017E+01 - 1.7783E+00 2.8515E+01 2.6051E+01 1.1436E+01 9.6809E+00 - 1.9953E+00 2.1809E+01 1.9466E+01 8.5025E+00 7.0887E+00 - 2.2387E+00 1.6522E+01 1.4638E+01 6.3256E+00 5.2007E+00 - 2.5119E+00 1.2324E+01 1.0824E+01 4.5575E+00 3.7439E+00 - 2.8184E+00 9.2139E+00 7.9970E+00 3.2656E+00 2.6153E+00 - 3.1623E+00 6.8244E+00 5.8827E+00 2.3740E+00 1.8602E+00 - 3.5481E+00 5.0455E+00 4.2919E+00 1.6855E+00 1.3171E+00 - 3.9811E+00 3.7082E+00 3.1199E+00 1.1852E+00 9.1948E-01 - 4.4668E+00 2.7079E+00 2.2496E+00 8.2128E-01 6.3717E-01 - 5.0119E+00 1.9731E+00 1.6081E+00 5.7323E-01 4.4153E-01 - 5.6234E+00 1.4282E+00 1.1584E+00 4.0054E-01 3.0594E-01 - 6.3096E+00 1.0268E+00 8.2874E-01 2.7133E-01 2.0626E-01 - 7.0795E+00 7.2955E-01 5.9027E-01 1.8450E-01 1.3813E-01 - 7.9433E+00 5.2643E-01 4.1779E-01 1.2433E-01 9.3925E-02 - 8.9125E+00 3.8016E-01 2.9430E-01 8.2295E-02 6.3665E-02 - 1.0000E+01 2.7164E-01 2.0993E-01 5.6573E-02 4.2933E-02 - 1.1220E+01 1.9275E-01 1.4971E-01 3.8037E-02 2.8700E-02 - 1.2589E+01 1.3624E-01 1.0597E-01 2.5336E-02 1.9605E-02 - 1.4125E+01 9.6929E-02 7.4429E-02 1.6758E-02 1.2898E-02 - 1.5849E+01 6.8810E-02 5.2751E-02 1.1107E-02 8.4522E-03 - 1.7783E+01 4.8686E-02 3.7537E-02 7.5071E-03 5.5405E-03 - 1.9953E+01 3.4946E-02 2.6471E-02 4.9570E-03 3.7513E-03 - 2.2387E+01 2.5099E-02 1.8514E-02 3.2080E-03 2.6090E-03 - 2.5119E+01 1.7796E-02 1.2999E-02 2.1529E-03 1.7028E-03 - 2.8184E+01 1.2533E-02 9.3181E-03 1.4510E-03 1.1479E-03 - 3.1623E+01 8.9572E-03 6.5516E-03 9.6502E-04 7.6426E-04 - 3.5481E+01 6.3511E-03 4.6268E-03 6.4276E-04 5.0947E-04 - 3.9811E+01 4.4902E-03 3.2615E-03 4.3096E-04 3.3978E-04 - 4.4668E+01 3.1762E-03 2.2891E-03 2.8783E-04 2.2952E-04 - 5.0119E+01 2.2429E-03 1.6106E-03 1.9137E-04 1.5289E-04 - 5.6234E+01 1.5784E-03 1.1297E-03 1.2677E-04 1.0210E-04 - 6.3096E+01 1.1119E-03 7.8957E-04 8.5595E-05 6.9008E-05 - 7.0795E+01 7.8178E-04 5.5100E-04 5.8816E-05 4.5648E-05 - 7.9433E+01 5.4736E-04 3.8456E-04 3.9974E-05 3.0905E-05 - 8.9125E+01 3.8372E-04 2.6840E-04 2.5957E-05 2.1043E-05 - 1.0000E+02 2.6997E-04 1.8673E-04 1.7501E-05 1.3935E-05 - 1.1220E+02 1.8935E-04 1.2984E-04 1.1777E-05 9.4600E-06 - 1.2589E+02 1.3279E-04 9.0298E-05 7.9110E-06 6.4270E-06 - 1.4125E+02 9.2734E-05 6.2887E-05 5.3539E-06 4.3580E-06 - 1.5849E+02 6.4825E-05 4.3863E-05 3.5756E-06 2.9715E-06 - 1.7783E+02 4.5415E-05 3.0424E-05 2.4359E-06 1.9542E-06 - 1.9953E+02 3.1488E-05 2.1086E-05 1.6411E-06 1.2979E-06 - 2.2387E+02 2.1945E-05 1.4566E-05 1.1108E-06 8.8205E-07 - 2.5119E+02 1.5337E-05 1.0065E-05 7.3335E-07 6.1658E-07 - 2.8184E+02 1.0635E-05 6.9893E-06 5.0923E-07 4.2266E-07 - 3.1623E+02 7.4494E-06 4.8325E-06 3.4237E-07 2.7411E-07 - 3.5481E+02 5.1587E-06 3.3175E-06 2.2617E-07 1.8415E-07 - 3.9811E+02 3.5800E-06 2.2853E-06 1.5146E-07 1.2280E-07 - 4.4668E+02 2.4828E-06 1.5799E-06 1.0273E-07 8.2715E-08 - 5.0119E+02 1.7151E-06 1.0966E-06 6.9858E-08 5.6123E-08 - 5.6234E+02 1.1962E-06 7.4830E-07 4.7872E-08 3.6380E-08 - 6.3096E+02 8.1528E-07 5.0839E-07 3.2360E-08 2.5098E-08 - 7.0795E+02 5.5838E-07 3.4557E-07 2.1576E-08 1.6997E-08 - 7.9433E+02 3.8533E-07 2.3764E-07 1.4183E-08 1.1057E-08 - 8.9125E+02 2.6464E-07 1.6293E-07 9.5862E-09 7.7281E-09 - 1.0000E+03 1.8188E-07 1.1118E-07 6.7377E-09 5.0328E-09 - 1.1220E+03 1.2289E-07 7.5159E-08 4.4935E-09 3.2106E-09 - 1.2589E+03 8.3369E-08 5.0757E-08 2.9251E-09 2.1027E-09 - 1.4125E+03 5.6524E-08 3.3891E-08 1.9387E-09 1.3384E-09 - 1.5849E+03 3.8050E-08 2.2678E-08 1.2710E-09 9.4046E-10 - 1.7783E+03 2.5717E-08 1.5261E-08 8.0381E-10 6.7004E-10 - 1.9953E+03 1.7383E-08 1.0221E-08 5.5886E-10 4.1069E-10 - 2.2387E+03 1.1780E-08 6.9658E-09 3.5449E-10 2.8741E-10 - 2.5119E+03 7.8624E-09 4.6043E-09 2.3858E-10 1.8773E-10 - 2.8184E+03 5.2158E-09 3.0084E-09 1.7371E-10 1.2016E-10 - 3.1623E+03 3.6229E-09 2.0941E-09 1.0966E-10 7.9255E-11 - 3.5481E+03 2.3315E-09 1.3319E-09 6.9585E-11 5.0540E-11 - 3.9811E+03 1.5480E-09 8.7954E-10 4.4758E-11 3.2064E-11 - 4.4668E+03 1.0126E-09 5.8734E-10 2.8033E-11 2.0836E-11 - 5.0119E+03 6.6908E-10 3.9139E-10 1.8139E-11 1.3472E-11 - 5.6234E+03 4.5138E-10 2.5324E-10 1.3049E-11 8.8149E-12 - 6.3096E+03 3.0085E-10 1.6606E-10 8.9640E-12 6.6220E-12 - 7.0795E+03 1.9810E-10 1.0924E-10 5.8520E-12 4.1148E-12 - 7.9433E+03 1.3257E-10 7.1590E-11 3.7143E-12 2.6116E-12 - 8.9125E+03 8.6850E-11 4.6383E-11 2.4243E-12 1.6449E-12 - 1.0000E+04 5.7020E-11 3.0551E-11 1.4941E-12 1.1472E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.7143E+03 3.7363E+03 1.7437E+03 1.8567E+03 - 1.1220E-01 3.3801E+03 3.3572E+03 1.5862E+03 1.6575E+03 - 1.2589E-01 3.0419E+03 3.0168E+03 1.4245E+03 1.4847E+03 - 1.4125E-01 2.7076E+03 2.6736E+03 1.2631E+03 1.3126E+03 - 1.5849E-01 2.3972E+03 2.3623E+03 1.1138E+03 1.1456E+03 - 1.7783E-01 2.1017E+03 2.0693E+03 9.7529E+02 9.8853E+02 - 1.9953E-01 1.8237E+03 1.7927E+03 8.4521E+02 8.5190E+02 - 2.2387E-01 1.5700E+03 1.5450E+03 7.2775E+02 7.3089E+02 - 2.5119E-01 1.3346E+03 1.3059E+03 6.2445E+02 6.1623E+02 - 2.8184E-01 1.1244E+03 1.0915E+03 5.2710E+02 5.1778E+02 - 3.1623E-01 9.4692E+02 9.1350E+02 4.3738E+02 4.3486E+02 - 3.5481E-01 7.8865E+02 7.6204E+02 3.6388E+02 3.5575E+02 - 3.9811E-01 6.4512E+02 6.3092E+02 3.0197E+02 2.8881E+02 - 4.4668E-01 5.3163E+02 5.1599E+02 2.4808E+02 2.3476E+02 - 5.0119E-01 4.3336E+02 4.1789E+02 2.0144E+02 1.8556E+02 - 5.6234E-01 3.4817E+02 3.3813E+02 1.6149E+02 1.4856E+02 - 6.3096E-01 2.8112E+02 2.7180E+02 1.2812E+02 1.2028E+02 - 7.0795E-01 2.2421E+02 2.1656E+02 1.0303E+02 9.3749E+01 - 7.9433E-01 1.7729E+02 1.7069E+02 8.1189E+01 7.2258E+01 - 8.9125E-01 1.4100E+02 1.3308E+02 6.2796E+01 5.5886E+01 - 1.0000E+00 1.1075E+02 1.0427E+02 4.8663E+01 4.2971E+01 - 1.1220E+00 8.6328E+01 8.0623E+01 3.7742E+01 3.2767E+01 - 1.2589E+00 6.6922E+01 6.2308E+01 2.8995E+01 2.4559E+01 - 1.4125E+00 5.1709E+01 4.7589E+01 2.1699E+01 1.8345E+01 - 1.5849E+00 3.9706E+01 3.5863E+01 1.6181E+01 1.3782E+01 - 1.7783E+00 3.0180E+01 2.7181E+01 1.2082E+01 1.0220E+01 - 1.9953E+00 2.2774E+01 2.0472E+01 8.9757E+00 7.3834E+00 - 2.2387E+00 1.7175E+01 1.5191E+01 6.5846E+00 5.3162E+00 - 2.5119E+00 1.2863E+01 1.1144E+01 4.8275E+00 3.7926E+00 - 2.8184E+00 9.5545E+00 8.1488E+00 3.5087E+00 2.6930E+00 - 3.1623E+00 7.0095E+00 5.9599E+00 2.4160E+00 1.9176E+00 - 3.5481E+00 5.1217E+00 4.3404E+00 1.7175E+00 1.3527E+00 - 3.9811E+00 3.7427E+00 3.1461E+00 1.2059E+00 9.3593E-01 - 4.4668E+00 2.7266E+00 2.2607E+00 8.4014E-01 6.5004E-01 - 5.0119E+00 1.9745E+00 1.6283E+00 5.7941E-01 4.4821E-01 - 5.6234E+00 1.4309E+00 1.1597E+00 3.9844E-01 3.0486E-01 - 6.3096E+00 1.0391E+00 8.3295E-01 2.6962E-01 2.0873E-01 - 7.0795E+00 7.5002E-01 5.9385E-01 1.8229E-01 1.4209E-01 - 7.9433E+00 5.3428E-01 4.1907E-01 1.2324E-01 9.3249E-02 - 8.9125E+00 3.7745E-01 3.0111E-01 8.4029E-02 6.4098E-02 - 1.0000E+01 2.6966E-01 2.1070E-01 5.6502E-02 4.2707E-02 - 1.1220E+01 1.9309E-01 1.4935E-01 3.8129E-02 2.8259E-02 - 1.2589E+01 1.3742E-01 1.0645E-01 2.5708E-02 1.9228E-02 - 1.4125E+01 9.8254E-02 7.5498E-02 1.7012E-02 1.3058E-02 - 1.5849E+01 7.0464E-02 5.3122E-02 1.1552E-02 8.6879E-03 - 1.7783E+01 4.9563E-02 3.7646E-02 7.6195E-03 5.6788E-03 - 1.9953E+01 3.5268E-02 2.6861E-02 4.9747E-03 3.8189E-03 - 2.2387E+01 2.5225E-02 1.8879E-02 3.3134E-03 2.5797E-03 - 2.5119E+01 1.7807E-02 1.3262E-02 2.1315E-03 1.6957E-03 - 2.8184E+01 1.2729E-02 9.3606E-03 1.4307E-03 1.1470E-03 - 3.1623E+01 8.9725E-03 6.5840E-03 9.7932E-04 7.6282E-04 - 3.5481E+01 6.3451E-03 4.6410E-03 6.5188E-04 5.1236E-04 - 3.9811E+01 4.4973E-03 3.2614E-03 4.3226E-04 3.4354E-04 - 4.4668E+01 3.1856E-03 2.2882E-03 2.8676E-04 2.2809E-04 - 5.0119E+01 2.2486E-03 1.6035E-03 1.9184E-04 1.5000E-04 - 5.6234E+01 1.5823E-03 1.1293E-03 1.2791E-04 1.0170E-04 - 6.3096E+01 1.1124E-03 7.9345E-04 8.5695E-05 6.9574E-05 - 7.0795E+01 7.8153E-04 5.5091E-04 5.6425E-05 4.6301E-05 - 7.9433E+01 5.5130E-04 3.8439E-04 3.8606E-05 3.0900E-05 - 8.9125E+01 3.8867E-04 2.6774E-04 2.6353E-05 2.1216E-05 - 1.0000E+02 2.7040E-04 1.8749E-04 1.7307E-05 1.4054E-05 - 1.1220E+02 1.8970E-04 1.3023E-04 1.1577E-05 9.4615E-06 - 1.2589E+02 1.3326E-04 9.0781E-05 7.7800E-06 6.4227E-06 - 1.4125E+02 9.3471E-05 6.3354E-05 5.2575E-06 4.3287E-06 - 1.5849E+02 6.5045E-05 4.3920E-05 3.5780E-06 2.9086E-06 - 1.7783E+02 4.5292E-05 3.0476E-05 2.4325E-06 1.9206E-06 - 1.9953E+02 3.1522E-05 2.1285E-05 1.6666E-06 1.2817E-06 - 2.2387E+02 2.1865E-05 1.4650E-05 1.1161E-06 9.0354E-07 - 2.5119E+02 1.5234E-05 1.0152E-05 7.5247E-07 6.0861E-07 - 2.8184E+02 1.0651E-05 7.0764E-06 5.1306E-07 4.0087E-07 - 3.1623E+02 7.4401E-06 4.8155E-06 3.3789E-07 2.7549E-07 - 3.5481E+02 5.1693E-06 3.3234E-06 2.2719E-07 1.8352E-07 - 3.9811E+02 3.5812E-06 2.2892E-06 1.5452E-07 1.2012E-07 - 4.4668E+02 2.4712E-06 1.5749E-06 1.0321E-07 8.3657E-08 - 5.0119E+02 1.7144E-06 1.0874E-06 6.9662E-08 5.7602E-08 - 5.6234E+02 1.1955E-06 7.4431E-07 4.8522E-08 3.8440E-08 - 6.3096E+02 8.1719E-07 5.0400E-07 3.2207E-08 2.5483E-08 - 7.0795E+02 5.6007E-07 3.4763E-07 2.1550E-08 1.6843E-08 - 7.9433E+02 3.8466E-07 2.3971E-07 1.4719E-08 1.1264E-08 - 8.9125E+02 2.6310E-07 1.6164E-07 9.5312E-09 7.5363E-09 - 1.0000E+03 1.8239E-07 1.1022E-07 6.3604E-09 4.9628E-09 - 1.1220E+03 1.2289E-07 7.4542E-08 4.3761E-09 3.3698E-09 - 1.2589E+03 8.3667E-08 5.0601E-08 2.9397E-09 2.2093E-09 - 1.4125E+03 5.7090E-08 3.4206E-08 1.9231E-09 1.4498E-09 - 1.5849E+03 3.8263E-08 2.3086E-08 1.3379E-09 9.5031E-10 - 1.7783E+03 2.5884E-08 1.5371E-08 8.7354E-10 6.2774E-10 - 1.9953E+03 1.7554E-08 1.0226E-08 5.6445E-10 4.0899E-10 - 2.2387E+03 1.1786E-08 6.8273E-09 3.7618E-10 2.6300E-10 - 2.5119E+03 7.8848E-09 4.5324E-09 2.4215E-10 1.7808E-10 - 2.8184E+03 5.3071E-09 3.0463E-09 1.5976E-10 1.2572E-10 - 3.1623E+03 3.6166E-09 2.0792E-09 1.0995E-10 8.1947E-11 - 3.5481E+03 2.3397E-09 1.3378E-09 7.6502E-11 5.3000E-11 - 3.9811E+03 1.5522E-09 8.8902E-10 4.8843E-11 3.4385E-11 - 4.4668E+03 1.0338E-09 5.9374E-10 3.1046E-11 2.2166E-11 - 5.0119E+03 6.8917E-10 3.9493E-10 2.0566E-11 1.4822E-11 - 5.6234E+03 4.4844E-10 2.6230E-10 1.2470E-11 9.9323E-12 - 6.3096E+03 2.9848E-10 1.6929E-10 8.7925E-12 6.1042E-12 - 7.0795E+03 1.9716E-10 1.1051E-10 5.5920E-12 4.0766E-12 - 7.9433E+03 1.3139E-10 7.3147E-11 3.7781E-12 2.4763E-12 - 8.9125E+03 8.6790E-11 4.7651E-11 2.4217E-12 1.6601E-12 - 1.0000E+04 5.5978E-11 3.0697E-11 1.4514E-12 1.0801E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.8967E+03 3.9285E+03 1.8721E+03 1.9309E+03 - 1.1220E-01 3.5460E+03 3.5595E+03 1.6968E+03 1.7444E+03 - 1.2589E-01 3.2003E+03 3.2174E+03 1.5300E+03 1.5621E+03 - 1.4125E-01 2.8796E+03 2.8873E+03 1.3730E+03 1.3849E+03 - 1.5849E-01 2.5708E+03 2.5493E+03 1.2171E+03 1.2089E+03 - 1.7783E-01 2.2592E+03 2.2444E+03 1.0570E+03 1.0537E+03 - 1.9953E-01 1.9668E+03 1.9549E+03 9.1889E+02 9.1226E+02 - 2.2387E-01 1.7043E+03 1.6873E+03 7.9498E+02 7.8521E+02 - 2.5119E-01 1.4512E+03 1.4383E+03 6.8098E+02 6.6958E+02 - 2.8184E-01 1.2199E+03 1.2116E+03 5.7811E+02 5.5933E+02 - 3.1623E-01 1.0286E+03 1.0197E+03 4.8557E+02 4.6310E+02 - 3.5481E-01 8.5737E+02 8.4522E+02 4.0260E+02 3.8186E+02 - 3.9811E-01 7.1167E+02 6.9200E+02 3.3124E+02 3.1488E+02 - 4.4668E-01 5.8163E+02 5.6515E+02 2.7467E+02 2.5364E+02 - 5.0119E-01 4.6990E+02 4.6065E+02 2.2398E+02 2.0414E+02 - 5.6234E-01 3.8222E+02 3.7338E+02 1.7816E+02 1.6403E+02 - 6.3096E-01 3.0847E+02 2.9749E+02 1.4170E+02 1.2791E+02 - 7.0795E-01 2.4451E+02 2.3485E+02 1.1300E+02 1.0100E+02 - 7.9433E-01 1.9328E+02 1.8503E+02 8.8264E+01 7.8996E+01 - 8.9125E-01 1.5154E+02 1.4399E+02 6.8092E+01 6.0518E+01 - 1.0000E+00 1.1794E+02 1.1170E+02 5.2600E+01 4.6190E+01 - 1.1220E+00 9.1842E+01 8.5920E+01 4.0208E+01 3.5227E+01 - 1.2589E+00 7.1012E+01 6.5888E+01 3.0918E+01 2.5959E+01 - 1.4125E+00 5.4623E+01 5.0288E+01 2.3482E+01 1.9337E+01 - 1.5849E+00 4.1447E+01 3.8003E+01 1.7375E+01 1.4309E+01 - 1.7783E+00 3.1501E+01 2.8631E+01 1.2805E+01 1.0431E+01 - 1.9953E+00 2.3726E+01 2.1324E+01 9.4295E+00 7.5399E+00 - 2.2387E+00 1.7683E+01 1.5563E+01 6.9136E+00 5.4952E+00 - 2.5119E+00 1.3187E+01 1.1365E+01 4.9499E+00 3.9816E+00 - 2.8184E+00 9.7388E+00 8.3239E+00 3.5487E+00 2.7993E+00 - 3.1623E+00 7.1110E+00 6.0600E+00 2.5034E+00 1.9365E+00 - 3.5481E+00 5.1800E+00 4.3786E+00 1.7490E+00 1.3538E+00 - 3.9811E+00 3.7638E+00 3.1463E+00 1.2318E+00 9.4297E-01 - 4.4668E+00 2.7310E+00 2.2620E+00 8.5578E-01 6.4013E-01 - 5.0119E+00 1.9823E+00 1.6256E+00 5.7865E-01 4.3693E-01 - 5.6234E+00 1.4382E+00 1.1597E+00 3.9168E-01 3.0609E-01 - 6.3096E+00 1.0259E+00 8.2593E-01 2.6920E-01 2.1122E-01 - 7.0795E+00 7.2912E-01 5.8738E-01 1.8269E-01 1.4425E-01 - 7.9433E+00 5.2385E-01 4.1695E-01 1.2387E-01 9.6717E-02 - 8.9125E+00 3.7830E-01 2.9573E-01 8.5211E-02 6.4488E-02 - 1.0000E+01 2.7048E-01 2.0977E-01 5.7008E-02 4.2818E-02 - 1.1220E+01 1.9253E-01 1.4775E-01 3.8017E-02 2.8852E-02 - 1.2589E+01 1.3745E-01 1.0440E-01 2.5236E-02 1.9459E-02 - 1.4125E+01 9.7714E-02 7.4134E-02 1.6781E-02 1.2889E-02 - 1.5849E+01 6.9444E-02 5.2639E-02 1.1384E-02 8.6324E-03 - 1.7783E+01 4.9057E-02 3.7163E-02 7.5739E-03 5.8292E-03 - 1.9953E+01 3.4966E-02 2.6360E-02 4.9303E-03 3.9486E-03 - 2.2387E+01 2.5033E-02 1.8682E-02 3.2899E-03 2.5914E-03 - 2.5119E+01 1.7528E-02 1.3165E-02 2.0903E-03 1.6774E-03 - 2.8184E+01 1.2504E-02 9.1246E-03 1.4376E-03 1.1166E-03 - 3.1623E+01 8.9596E-03 6.5621E-03 9.7593E-04 7.6253E-04 - 3.5481E+01 6.3442E-03 4.6253E-03 6.5219E-04 5.1017E-04 - 3.9811E+01 4.4810E-03 3.2544E-03 4.3551E-04 3.4160E-04 - 4.4668E+01 3.1596E-03 2.2962E-03 2.8966E-04 2.2945E-04 - 5.0119E+01 2.2300E-03 1.6098E-03 1.9144E-04 1.5424E-04 - 5.6234E+01 1.5765E-03 1.1267E-03 1.2755E-04 1.0336E-04 - 6.3096E+01 1.1178E-03 7.9067E-04 8.5241E-05 6.9524E-05 - 7.0795E+01 7.8392E-04 5.5024E-04 5.7046E-05 4.6527E-05 - 7.9433E+01 5.4659E-04 3.8273E-04 3.9369E-05 3.1764E-05 - 8.9125E+01 3.8503E-04 2.6783E-04 2.5847E-05 2.1126E-05 - 1.0000E+02 2.7103E-04 1.8831E-04 1.7354E-05 1.3893E-05 - 1.1220E+02 1.9006E-04 1.3118E-04 1.1769E-05 9.4548E-06 - 1.2589E+02 1.3311E-04 9.0999E-05 7.9187E-06 6.4182E-06 - 1.4125E+02 9.2619E-05 6.3032E-05 5.3456E-06 4.3197E-06 - 1.5849E+02 6.4412E-05 4.3968E-05 3.6106E-06 2.8751E-06 - 1.7783E+02 4.5295E-05 3.0479E-05 2.4096E-06 1.9033E-06 - 1.9953E+02 3.1700E-05 2.0972E-05 1.6162E-06 1.2998E-06 - 2.2387E+02 2.2079E-05 1.4430E-05 1.0804E-06 9.0062E-07 - 2.5119E+02 1.5334E-05 1.0024E-05 7.2368E-07 5.9785E-07 - 2.8184E+02 1.0689E-05 7.0190E-06 4.9629E-07 4.1026E-07 - 3.1623E+02 7.4719E-06 4.8199E-06 3.4423E-07 2.7586E-07 - 3.5481E+02 5.1659E-06 3.3101E-06 2.2718E-07 1.8550E-07 - 3.9811E+02 3.5915E-06 2.2837E-06 1.5378E-07 1.2203E-07 - 4.4668E+02 2.4967E-06 1.5654E-06 1.0457E-07 8.3004E-08 - 5.0119E+02 1.7263E-06 1.0823E-06 7.0769E-08 5.8027E-08 - 5.6234E+02 1.1961E-06 7.4933E-07 4.8174E-08 3.8085E-08 - 6.3096E+02 8.2012E-07 5.0955E-07 3.1360E-08 2.5498E-08 - 7.0795E+02 5.6475E-07 3.4934E-07 2.0799E-08 1.6768E-08 - 7.9433E+02 3.8857E-07 2.3809E-07 1.4383E-08 1.1016E-08 - 8.9125E+02 2.6621E-07 1.6145E-07 9.8455E-09 7.6611E-09 - 1.0000E+03 1.8188E-07 1.1009E-07 6.1480E-09 5.1921E-09 - 1.1220E+03 1.2278E-07 7.4406E-08 4.1121E-09 3.5074E-09 - 1.2589E+03 8.3053E-08 5.0195E-08 2.8982E-09 2.2563E-09 - 1.4125E+03 5.6356E-08 3.3734E-08 1.9699E-09 1.4386E-09 - 1.5849E+03 3.8493E-08 2.2643E-08 1.3150E-09 1.0176E-09 - 1.7783E+03 2.6120E-08 1.5240E-08 8.8030E-10 6.6096E-10 - 1.9953E+03 1.7556E-08 1.0253E-08 5.7729E-10 4.0821E-10 - 2.2387E+03 1.1844E-08 6.7829E-09 3.6474E-10 2.9119E-10 - 2.5119E+03 7.8974E-09 4.5775E-09 2.3899E-10 1.9608E-10 - 2.8184E+03 5.2007E-09 3.0822E-09 1.6555E-10 1.1952E-10 - 3.1623E+03 3.6244E-09 2.1008E-09 1.0993E-10 7.6779E-11 - 3.5481E+03 2.3475E-09 1.3457E-09 7.4028E-11 5.1715E-11 - 3.9811E+03 1.5678E-09 8.9244E-10 5.0161E-11 3.5307E-11 - 4.4668E+03 1.0265E-09 5.9049E-10 3.1475E-11 2.2315E-11 - 5.0119E+03 6.7928E-10 3.8756E-10 1.9945E-11 1.3328E-11 - 5.6234E+03 4.5394E-10 2.5462E-10 1.3502E-11 9.1169E-12 - 6.3096E+03 2.9570E-10 1.6836E-10 8.5593E-12 6.0047E-12 - 7.0795E+03 1.9411E-10 1.1048E-10 5.8895E-12 3.7324E-12 - 7.9433E+03 1.3041E-10 7.1275E-11 3.8975E-12 2.4934E-12 - 8.9125E+03 8.6639E-11 4.6026E-11 2.4152E-12 1.6757E-12 - 1.0000E+04 5.7530E-11 3.0358E-11 1.5570E-12 1.1106E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.4226E+03 3.4576E+03 1.6515E+03 1.7108E+03 - 1.1220E-01 3.1150E+03 3.1486E+03 1.5117E+03 1.5406E+03 - 1.2589E-01 2.8215E+03 2.8342E+03 1.3617E+03 1.3722E+03 - 1.4125E-01 2.5357E+03 2.5549E+03 1.2045E+03 1.2273E+03 - 1.5849E-01 2.2656E+03 2.2751E+03 1.0635E+03 1.0860E+03 - 1.7783E-01 2.0067E+03 1.9932E+03 9.3931E+02 9.4632E+02 - 1.9953E-01 1.7443E+03 1.7378E+03 8.2583E+02 8.2403E+02 - 2.2387E-01 1.5155E+03 1.5044E+03 7.1804E+02 7.0372E+02 - 2.5119E-01 1.3000E+03 1.2866E+03 6.1250E+02 5.9155E+02 - 2.8184E-01 1.0996E+03 1.0878E+03 5.2086E+02 5.0201E+02 - 3.1623E-01 9.2867E+02 9.1656E+02 4.4043E+02 4.1588E+02 - 3.5481E-01 7.7819E+02 7.6539E+02 3.6653E+02 3.4338E+02 - 3.9811E-01 6.4616E+02 6.3323E+02 3.0324E+02 2.8669E+02 - 4.4668E-01 5.3346E+02 5.1997E+02 2.4741E+02 2.3297E+02 - 5.0119E-01 4.3428E+02 4.2408E+02 2.0193E+02 1.8794E+02 - 5.6234E-01 3.5223E+02 3.4410E+02 1.6494E+02 1.5071E+02 - 6.3096E-01 2.8611E+02 2.7562E+02 1.3205E+02 1.1887E+02 - 7.0795E-01 2.2868E+02 2.1711E+02 1.0531E+02 9.3435E+01 - 7.9433E-01 1.8045E+02 1.7223E+02 8.2634E+01 7.3655E+01 - 8.9125E-01 1.4244E+02 1.3725E+02 6.4777E+01 5.7684E+01 - 1.0000E+00 1.1293E+02 1.0662E+02 5.0013E+01 4.3665E+01 - 1.1220E+00 8.8495E+01 8.2734E+01 3.8210E+01 3.3381E+01 - 1.2589E+00 6.8463E+01 6.3793E+01 2.9057E+01 2.5106E+01 - 1.4125E+00 5.3024E+01 4.8604E+01 2.2123E+01 1.8918E+01 - 1.5849E+00 4.0381E+01 3.6806E+01 1.6703E+01 1.4101E+01 - 1.7783E+00 3.0587E+01 2.7670E+01 1.2425E+01 1.0280E+01 - 1.9953E+00 2.3095E+01 2.0723E+01 9.1838E+00 7.5694E+00 - 2.2387E+00 1.7267E+01 1.5229E+01 6.7463E+00 5.4735E+00 - 2.5119E+00 1.2862E+01 1.1214E+01 4.8740E+00 3.8380E+00 - 2.8184E+00 9.5063E+00 8.3205E+00 3.4545E+00 2.7350E+00 - 3.1623E+00 6.9953E+00 6.0315E+00 2.4452E+00 1.9337E+00 - 3.5481E+00 5.1710E+00 4.3923E+00 1.7246E+00 1.3570E+00 - 3.9811E+00 3.7838E+00 3.1707E+00 1.2095E+00 9.4231E-01 - 4.4668E+00 2.7270E+00 2.2734E+00 8.4251E-01 6.4372E-01 - 5.0119E+00 1.9841E+00 1.6304E+00 5.8296E-01 4.4470E-01 - 5.6234E+00 1.4340E+00 1.1705E+00 4.0314E-01 3.0540E-01 - 6.3096E+00 1.0317E+00 8.2990E-01 2.7567E-01 2.0608E-01 - 7.0795E+00 7.4083E-01 5.9315E-01 1.8736E-01 1.4092E-01 - 7.9433E+00 5.2988E-01 4.2316E-01 1.2720E-01 9.7951E-02 - 8.9125E+00 3.7664E-01 2.9858E-01 8.3323E-02 6.6662E-02 - 1.0000E+01 2.6951E-01 2.1036E-01 5.6091E-02 4.3202E-02 - 1.1220E+01 1.9183E-01 1.4880E-01 3.7939E-02 2.8624E-02 - 1.2589E+01 1.3709E-01 1.0479E-01 2.5399E-02 1.8994E-02 - 1.4125E+01 9.7379E-02 7.3836E-02 1.6607E-02 1.2805E-02 - 1.5849E+01 6.9098E-02 5.2394E-02 1.1109E-02 8.4601E-03 - 1.7783E+01 4.9397E-02 3.7627E-02 7.6486E-03 5.6515E-03 - 1.9953E+01 3.5078E-02 2.6661E-02 5.0495E-03 3.7456E-03 - 2.2387E+01 2.4932E-02 1.8652E-02 3.2136E-03 2.5244E-03 - 2.5119E+01 1.7565E-02 1.2976E-02 2.1233E-03 1.6968E-03 - 2.8184E+01 1.2482E-02 9.1375E-03 1.4293E-03 1.1255E-03 - 3.1623E+01 8.9875E-03 6.5502E-03 9.7075E-04 7.6290E-04 - 3.5481E+01 6.3533E-03 4.6353E-03 6.4758E-04 5.1292E-04 - 3.9811E+01 4.4917E-03 3.2676E-03 4.3302E-04 3.4559E-04 - 4.4668E+01 3.1743E-03 2.2908E-03 2.8938E-04 2.2947E-04 - 5.0119E+01 2.2389E-03 1.6137E-03 1.9138E-04 1.5178E-04 - 5.6234E+01 1.5721E-03 1.1323E-03 1.2780E-04 1.0182E-04 - 6.3096E+01 1.1097E-03 7.9045E-04 8.5480E-05 6.9520E-05 - 7.0795E+01 7.7979E-04 5.5030E-04 5.7527E-05 4.6412E-05 - 7.9433E+01 5.4772E-04 3.8287E-04 3.8560E-05 3.0962E-05 - 8.9125E+01 3.8528E-04 2.6871E-04 2.6359E-05 2.1103E-05 - 1.0000E+02 2.7050E-04 1.8769E-04 1.7086E-05 1.4035E-05 - 1.1220E+02 1.8924E-04 1.3070E-04 1.1555E-05 9.5246E-06 - 1.2589E+02 1.3253E-04 9.0756E-05 7.8775E-06 6.4154E-06 - 1.4125E+02 9.2906E-05 6.3176E-05 5.3073E-06 4.3023E-06 - 1.5849E+02 6.5083E-05 4.3780E-05 3.6049E-06 2.9040E-06 - 1.7783E+02 4.5540E-05 3.0205E-05 2.4520E-06 1.9381E-06 - 1.9953E+02 3.1664E-05 2.0830E-05 1.6854E-06 1.2881E-06 - 2.2387E+02 2.2047E-05 1.4356E-05 1.1242E-06 8.7936E-07 - 2.5119E+02 1.5312E-05 1.0029E-05 7.4987E-07 6.2433E-07 - 2.8184E+02 1.0678E-05 6.9162E-06 5.2311E-07 4.2954E-07 - 3.1623E+02 7.4666E-06 4.8667E-06 3.4689E-07 2.7852E-07 - 3.5481E+02 5.1512E-06 3.3371E-06 2.3356E-07 1.8480E-07 - 3.9811E+02 3.5786E-06 2.2965E-06 1.5557E-07 1.2351E-07 - 4.4668E+02 2.4860E-06 1.5885E-06 1.0391E-07 8.1972E-08 - 5.0119E+02 1.7265E-06 1.0939E-06 6.7976E-08 5.5228E-08 - 5.6234E+02 1.2003E-06 7.4728E-07 4.7409E-08 3.7973E-08 - 6.3096E+02 8.1520E-07 5.0900E-07 3.1992E-08 2.5481E-08 - 7.0795E+02 5.5652E-07 3.4811E-07 2.1728E-08 1.6598E-08 - 7.9433E+02 3.8361E-07 2.3796E-07 1.4626E-08 1.0756E-08 - 8.9125E+02 2.6509E-07 1.6285E-07 9.8889E-09 7.1332E-09 - 1.0000E+03 1.8331E-07 1.0987E-07 6.5396E-09 4.9042E-09 - 1.1220E+03 1.2360E-07 7.4187E-08 4.3482E-09 3.2640E-09 - 1.2589E+03 8.3910E-08 5.0423E-08 2.9131E-09 2.1236E-09 - 1.4125E+03 5.6772E-08 3.3694E-08 2.0006E-09 1.4759E-09 - 1.5849E+03 3.8269E-08 2.2959E-08 1.3316E-09 9.9611E-10 - 1.7783E+03 2.5903E-08 1.5493E-08 8.3334E-10 6.6799E-10 - 1.9953E+03 1.7504E-08 1.0199E-08 5.5771E-10 4.0181E-10 - 2.2387E+03 1.1780E-08 6.8549E-09 3.6510E-10 2.6310E-10 - 2.5119E+03 7.9084E-09 4.5983E-09 2.4929E-10 1.7759E-10 - 2.8184E+03 5.2817E-09 3.0562E-09 1.5959E-10 1.1211E-10 - 3.1623E+03 3.6245E-09 2.1147E-09 1.0505E-10 7.7796E-11 - 3.5481E+03 2.3620E-09 1.3624E-09 7.1569E-11 4.9821E-11 - 3.9811E+03 1.5574E-09 8.8466E-10 4.6893E-11 3.3696E-11 - 4.4668E+03 1.0281E-09 5.8491E-10 3.1427E-11 1.9956E-11 - 5.0119E+03 6.8449E-10 3.8557E-10 2.0759E-11 1.3466E-11 - 5.6234E+03 4.5694E-10 2.5600E-10 1.3950E-11 8.6845E-12 - 6.3096E+03 2.9788E-10 1.6575E-10 8.9477E-12 6.2969E-12 - 7.0795E+03 1.9780E-10 1.1152E-10 6.1021E-12 3.8825E-12 - 7.9433E+03 1.3076E-10 7.3559E-11 3.9395E-12 2.5475E-12 - 8.9125E+03 8.5659E-11 4.7078E-11 2.3974E-12 1.6318E-12 - 1.0000E+04 5.6507E-11 3.0685E-11 1.4122E-12 9.6926E-13 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1758E+03 3.2063E+03 1.5461E+03 1.5826E+03 - 1.1220E-01 2.9029E+03 2.9279E+03 1.4026E+03 1.4241E+03 - 1.2589E-01 2.6274E+03 2.6594E+03 1.2603E+03 1.2794E+03 - 1.4125E-01 2.3635E+03 2.3903E+03 1.1249E+03 1.1441E+03 - 1.5849E-01 2.1170E+03 2.1199E+03 1.0021E+03 1.0022E+03 - 1.7783E-01 1.8669E+03 1.8667E+03 8.8734E+02 8.7471E+02 - 1.9953E-01 1.6423E+03 1.6242E+03 7.6902E+02 7.5630E+02 - 2.2387E-01 1.4230E+03 1.4018E+03 6.6605E+02 6.5240E+02 - 2.5119E-01 1.2177E+03 1.1991E+03 5.7712E+02 5.6034E+02 - 2.8184E-01 1.0375E+03 1.0158E+03 4.8663E+02 4.7416E+02 - 3.1623E-01 8.7167E+02 8.5992E+02 4.0794E+02 3.9707E+02 - 3.5481E-01 7.3077E+02 7.1938E+02 3.4366E+02 3.2847E+02 - 3.9811E-01 6.0611E+02 5.9592E+02 2.8552E+02 2.7088E+02 - 4.4668E-01 4.9887E+02 4.8952E+02 2.3409E+02 2.2236E+02 - 5.0119E-01 4.1013E+02 4.0073E+02 1.9189E+02 1.7940E+02 - 5.6234E-01 3.3513E+02 3.2580E+02 1.5716E+02 1.4350E+02 - 6.3096E-01 2.7097E+02 2.6096E+02 1.2508E+02 1.1390E+02 - 7.0795E-01 2.1581E+02 2.0943E+02 9.8409E+01 8.9000E+01 - 7.9433E-01 1.7177E+02 1.6774E+02 7.8951E+01 6.9296E+01 - 8.9125E-01 1.3671E+02 1.3084E+02 6.2459E+01 5.4138E+01 - 1.0000E+00 1.0767E+02 1.0231E+02 4.7859E+01 4.1979E+01 - 1.1220E+00 8.4386E+01 7.9474E+01 3.6813E+01 3.1746E+01 - 1.2589E+00 6.6082E+01 6.1655E+01 2.8265E+01 2.4170E+01 - 1.4125E+00 5.1465E+01 4.7620E+01 2.1380E+01 1.8160E+01 - 1.5849E+00 3.9322E+01 3.5762E+01 1.5996E+01 1.3449E+01 - 1.7783E+00 2.9878E+01 2.6902E+01 1.1916E+01 9.8560E+00 - 1.9953E+00 2.2540E+01 2.0259E+01 8.8814E+00 7.1622E+00 - 2.2387E+00 1.6904E+01 1.5131E+01 6.5233E+00 5.2145E+00 - 2.5119E+00 1.2687E+01 1.1184E+01 4.7268E+00 3.7248E+00 - 2.8184E+00 9.3865E+00 8.1554E+00 3.4232E+00 2.6532E+00 - 3.1623E+00 6.9839E+00 5.9866E+00 2.4451E+00 1.9127E+00 - 3.5481E+00 5.1149E+00 4.3710E+00 1.7238E+00 1.3402E+00 - 3.9811E+00 3.7459E+00 3.1581E+00 1.2051E+00 9.3750E-01 - 4.4668E+00 2.7312E+00 2.2655E+00 8.4757E-01 6.5504E-01 - 5.0119E+00 1.9829E+00 1.6181E+00 5.9355E-01 4.5175E-01 - 5.6234E+00 1.4364E+00 1.1598E+00 4.0701E-01 3.0830E-01 - 6.3096E+00 1.0327E+00 8.3676E-01 2.7279E-01 2.1033E-01 - 7.0795E+00 7.4746E-01 5.8840E-01 1.8587E-01 1.4213E-01 - 7.9433E+00 5.3431E-01 4.1954E-01 1.2790E-01 9.6370E-02 - 8.9125E+00 3.8230E-01 3.0225E-01 8.6990E-02 6.2907E-02 - 1.0000E+01 2.7269E-01 2.1145E-01 5.7072E-02 4.2535E-02 - 1.1220E+01 1.9446E-01 1.4984E-01 3.7839E-02 2.8752E-02 - 1.2589E+01 1.3886E-01 1.0622E-01 2.5479E-02 1.9525E-02 - 1.4125E+01 9.8712E-02 7.5554E-02 1.7186E-02 1.3087E-02 - 1.5849E+01 7.0000E-02 5.3955E-02 1.1337E-02 8.6539E-03 - 1.7783E+01 4.9543E-02 3.8095E-02 7.4410E-03 5.7615E-03 - 1.9953E+01 3.5343E-02 2.7019E-02 4.9979E-03 3.8755E-03 - 2.2387E+01 2.5140E-02 1.9079E-02 3.3704E-03 2.5887E-03 - 2.5119E+01 1.7917E-02 1.3435E-02 2.2565E-03 1.6825E-03 - 2.8184E+01 1.2925E-02 9.5079E-03 1.4538E-03 1.0865E-03 - 3.1623E+01 8.9484E-03 6.5842E-03 9.6778E-04 7.6035E-04 - 3.5481E+01 6.3686E-03 4.6394E-03 6.4335E-04 5.1118E-04 - 3.9811E+01 4.5020E-03 3.2431E-03 4.2822E-04 3.3954E-04 - 4.4668E+01 3.1694E-03 2.2851E-03 2.8278E-04 2.2487E-04 - 5.0119E+01 2.2403E-03 1.6044E-03 1.9149E-04 1.5099E-04 - 5.6234E+01 1.5841E-03 1.1248E-03 1.2756E-04 1.0115E-04 - 6.3096E+01 1.1148E-03 7.9064E-04 8.5078E-05 6.7634E-05 - 7.0795E+01 7.8024E-04 5.4946E-04 5.7217E-05 4.6278E-05 - 7.9433E+01 5.5078E-04 3.8472E-04 3.8569E-05 3.0910E-05 - 8.9125E+01 3.8639E-04 2.7172E-04 2.5908E-05 2.0775E-05 - 1.0000E+02 2.6968E-04 1.8713E-04 1.7130E-05 1.4104E-05 - 1.1220E+02 1.8904E-04 1.2998E-04 1.1482E-05 9.6372E-06 - 1.2589E+02 1.3247E-04 9.0220E-05 7.7471E-06 6.4615E-06 - 1.4125E+02 9.2855E-05 6.2941E-05 5.2826E-06 4.2006E-06 - 1.5849E+02 6.5130E-05 4.3717E-05 3.5907E-06 2.8624E-06 - 1.7783E+02 4.5384E-05 3.0138E-05 2.3902E-06 1.9678E-06 - 1.9953E+02 3.1653E-05 2.0951E-05 1.6524E-06 1.2985E-06 - 2.2387E+02 2.2056E-05 1.4553E-05 1.1180E-06 8.7297E-07 - 2.5119E+02 1.5264E-05 1.0070E-05 7.2923E-07 6.0142E-07 - 2.8184E+02 1.0659E-05 6.9200E-06 4.7869E-07 4.1372E-07 - 3.1623E+02 7.4728E-06 4.8417E-06 3.4046E-07 2.7693E-07 - 3.5481E+02 5.1494E-06 3.3129E-06 2.3094E-07 1.8713E-07 - 3.9811E+02 3.5773E-06 2.2868E-06 1.5398E-07 1.2257E-07 - 4.4668E+02 2.4911E-06 1.5815E-06 1.0352E-07 8.3886E-08 - 5.0119E+02 1.7174E-06 1.0920E-06 7.2388E-08 5.6492E-08 - 5.6234E+02 1.1911E-06 7.4856E-07 4.9371E-08 3.6457E-08 - 6.3096E+02 8.1932E-07 5.0814E-07 3.2615E-08 2.4696E-08 - 7.0795E+02 5.6125E-07 3.4713E-07 2.1626E-08 1.6499E-08 - 7.9433E+02 3.8522E-07 2.3673E-07 1.4329E-08 1.1245E-08 - 8.9125E+02 2.6428E-07 1.6108E-07 9.5015E-09 7.6446E-09 - 1.0000E+03 1.8138E-07 1.1039E-07 6.4918E-09 4.9610E-09 - 1.1220E+03 1.2253E-07 7.4069E-08 4.2577E-09 3.2404E-09 - 1.2589E+03 8.4167E-08 4.9806E-08 2.8902E-09 2.1598E-09 - 1.4125E+03 5.7292E-08 3.3829E-08 1.9596E-09 1.4398E-09 - 1.5849E+03 3.8304E-08 2.2820E-08 1.2234E-09 9.4763E-10 - 1.7783E+03 2.5644E-08 1.5321E-08 7.7936E-10 6.1807E-10 - 1.9953E+03 1.7335E-08 1.0243E-08 5.7633E-10 4.2238E-10 - 2.2387E+03 1.1607E-08 6.8001E-09 3.8808E-10 2.7611E-10 - 2.5119E+03 7.8734E-09 4.5387E-09 2.5121E-10 1.8875E-10 - 2.8184E+03 5.2549E-09 3.0350E-09 1.7026E-10 1.3071E-10 - 3.1623E+03 3.5953E-09 2.0697E-09 1.0523E-10 8.0938E-11 - 3.5481E+03 2.3364E-09 1.3319E-09 7.0013E-11 5.4031E-11 - 3.9811E+03 1.5581E-09 8.8039E-10 4.6704E-11 3.6092E-11 - 4.4668E+03 1.0369E-09 5.8607E-10 2.8051E-11 2.1450E-11 - 5.0119E+03 6.7998E-10 3.8780E-10 1.8624E-11 1.3141E-11 - 5.6234E+03 4.4868E-10 2.5315E-10 1.2535E-11 1.0066E-11 - 6.3096E+03 2.9849E-10 1.6913E-10 8.2989E-12 6.1227E-12 - 7.0795E+03 1.9574E-10 1.0963E-10 5.4878E-12 3.9780E-12 - 7.9433E+03 1.2844E-10 7.0321E-11 3.7491E-12 2.7701E-12 - 8.9125E+03 8.5096E-11 4.5556E-11 2.5749E-12 1.6606E-12 - 1.0000E+04 5.7344E-11 2.9449E-11 1.5573E-12 9.9383E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5985E+03 3.6121E+03 1.7147E+03 1.7933E+03 - 1.1220E-01 3.2891E+03 3.2942E+03 1.5510E+03 1.6194E+03 - 1.2589E-01 2.9731E+03 2.9686E+03 1.3959E+03 1.4521E+03 - 1.4125E-01 2.6739E+03 2.6658E+03 1.2513E+03 1.2796E+03 - 1.5849E-01 2.3873E+03 2.3774E+03 1.1140E+03 1.1187E+03 - 1.7783E-01 2.1006E+03 2.1003E+03 9.7946E+02 9.7975E+02 - 1.9953E-01 1.8410E+03 1.8321E+03 8.5205E+02 8.5131E+02 - 2.2387E-01 1.5980E+03 1.5777E+03 7.3665E+02 7.2861E+02 - 2.5119E-01 1.3627E+03 1.3411E+03 6.2725E+02 6.1268E+02 - 2.8184E-01 1.1549E+03 1.1327E+03 5.3016E+02 5.1577E+02 - 3.1623E-01 9.7095E+02 9.4911E+02 4.4591E+02 4.3194E+02 - 3.5481E-01 8.0246E+02 7.9074E+02 3.7023E+02 3.5448E+02 - 3.9811E-01 6.6403E+02 6.5185E+02 3.0518E+02 2.8872E+02 - 4.4668E-01 5.5045E+02 5.3284E+02 2.5026E+02 2.3392E+02 - 5.0119E-01 4.4695E+02 4.3489E+02 2.0432E+02 1.8688E+02 - 5.6234E-01 3.5968E+02 3.5188E+02 1.6593E+02 1.4805E+02 - 6.3096E-01 2.8957E+02 2.8209E+02 1.3145E+02 1.1754E+02 - 7.0795E-01 2.2975E+02 2.2352E+02 1.0288E+02 9.1309E+01 - 7.9433E-01 1.8122E+02 1.7490E+02 8.0674E+01 7.0773E+01 - 8.9125E-01 1.4375E+02 1.3581E+02 6.2417E+01 5.4985E+01 - 1.0000E+00 1.1273E+02 1.0549E+02 4.8000E+01 4.1937E+01 - 1.1220E+00 8.7119E+01 8.1534E+01 3.6919E+01 3.1588E+01 - 1.2589E+00 6.7203E+01 6.2211E+01 2.8109E+01 2.3605E+01 - 1.4125E+00 5.1785E+01 4.7109E+01 2.1033E+01 1.7602E+01 - 1.5849E+00 3.9574E+01 3.5636E+01 1.5759E+01 1.3008E+01 - 1.7783E+00 3.0004E+01 2.6841E+01 1.1686E+01 9.5556E+00 - 1.9953E+00 2.2620E+01 2.0058E+01 8.5199E+00 6.9540E+00 - 2.2387E+00 1.6871E+01 1.4853E+01 6.1567E+00 4.9352E+00 - 2.5119E+00 1.2572E+01 1.0825E+01 4.4296E+00 3.4909E+00 - 2.8184E+00 9.1952E+00 7.9182E+00 3.1804E+00 2.5172E+00 - 3.1623E+00 6.8218E+00 5.7739E+00 2.2431E+00 1.7586E+00 - 3.5481E+00 4.9886E+00 4.1763E+00 1.5824E+00 1.2233E+00 - 3.9811E+00 3.6510E+00 3.0241E+00 1.1098E+00 8.5839E-01 - 4.4668E+00 2.6651E+00 2.1648E+00 7.5908E-01 5.9530E-01 - 5.0119E+00 1.9108E+00 1.5508E+00 5.1559E-01 4.0147E-01 - 5.6234E+00 1.3659E+00 1.1130E+00 3.5558E-01 2.6782E-01 - 6.3096E+00 9.8189E-01 7.8847E-01 2.4633E-01 1.7957E-01 - 7.0795E+00 7.0937E-01 5.5884E-01 1.6549E-01 1.2109E-01 - 7.9433E+00 5.0908E-01 3.9596E-01 1.1278E-01 8.3001E-02 - 8.9125E+00 3.6304E-01 2.8175E-01 7.5994E-02 5.8245E-02 - 1.0000E+01 2.6288E-01 2.0294E-01 5.0176E-02 3.8630E-02 - 1.1220E+01 1.8702E-01 1.4376E-01 3.3410E-02 2.5638E-02 - 1.2589E+01 1.3328E-01 1.0124E-01 2.2351E-02 1.7189E-02 - 1.4125E+01 9.4725E-02 7.1131E-02 1.5108E-02 1.1525E-02 - 1.5849E+01 6.7384E-02 5.0554E-02 1.0207E-02 7.5511E-03 - 1.7783E+01 4.8146E-02 3.5609E-02 6.7503E-03 5.0419E-03 - 1.9953E+01 3.4129E-02 2.5410E-02 4.4624E-03 3.4613E-03 - 2.2387E+01 2.4256E-02 1.7953E-02 2.8632E-03 2.2536E-03 - 2.5119E+01 1.7149E-02 1.2723E-02 1.8389E-03 1.4856E-03 - 2.8184E+01 1.2177E-02 9.0802E-03 1.2853E-03 1.0331E-03 - 3.1623E+01 8.6449E-03 6.2813E-03 8.5424E-04 6.7217E-04 - 3.5481E+01 6.1150E-03 4.4255E-03 5.7101E-04 4.5275E-04 - 3.9811E+01 4.3416E-03 3.1011E-03 3.8009E-04 3.0249E-04 - 4.4668E+01 3.0695E-03 2.1805E-03 2.5377E-04 2.0253E-04 - 5.0119E+01 2.1622E-03 1.5342E-03 1.7108E-04 1.3749E-04 - 5.6234E+01 1.5201E-03 1.0724E-03 1.1696E-04 9.2252E-05 - 6.3096E+01 1.0640E-03 7.5245E-04 7.8247E-05 6.1879E-05 - 7.0795E+01 7.5090E-04 5.2597E-04 5.1168E-05 4.2092E-05 - 7.9433E+01 5.2701E-04 3.6427E-04 3.4007E-05 2.8694E-05 - 8.9125E+01 3.6813E-04 2.5261E-04 2.2853E-05 1.8677E-05 - 1.0000E+02 2.5944E-04 1.7826E-04 1.5618E-05 1.2775E-05 - 1.1220E+02 1.8107E-04 1.2398E-04 1.0468E-05 8.6751E-06 - 1.2589E+02 1.2682E-04 8.6218E-05 7.0514E-06 5.7991E-06 - 1.4125E+02 8.8677E-05 5.9780E-05 4.8342E-06 3.9297E-06 - 1.5849E+02 6.1670E-05 4.1386E-05 3.2481E-06 2.7053E-06 - 1.7783E+02 4.3170E-05 2.8763E-05 2.1888E-06 1.8423E-06 - 1.9953E+02 3.0206E-05 1.9896E-05 1.4545E-06 1.2036E-06 - 2.2387E+02 2.1084E-05 1.3759E-05 9.9442E-07 7.9712E-07 - 2.5119E+02 1.4546E-05 9.5676E-06 6.7257E-07 5.3419E-07 - 2.8184E+02 1.0179E-05 6.5569E-06 4.5087E-07 3.6013E-07 - 3.1623E+02 7.0532E-06 4.5632E-06 3.1124E-07 2.4815E-07 - 3.5481E+02 4.8943E-06 3.1201E-06 2.1271E-07 1.6833E-07 - 3.9811E+02 3.3970E-06 2.1481E-06 1.4355E-07 1.1243E-07 - 4.4668E+02 2.3424E-06 1.4761E-06 9.7831E-08 7.4434E-08 - 5.0119E+02 1.6136E-06 1.0127E-06 6.7143E-08 5.1063E-08 - 5.6234E+02 1.1223E-06 6.9808E-07 4.3960E-08 3.3207E-08 - 6.3096E+02 7.6564E-07 4.7417E-07 2.9814E-08 2.2624E-08 - 7.0795E+02 5.2515E-07 3.2321E-07 1.9960E-08 1.5551E-08 - 7.9433E+02 3.5917E-07 2.2058E-07 1.3732E-08 1.0509E-08 - 8.9125E+02 2.4784E-07 1.4955E-07 9.2019E-09 6.9676E-09 - 1.0000E+03 1.7177E-07 1.0291E-07 6.0698E-09 4.3353E-09 - 1.1220E+03 1.1555E-07 6.9061E-08 4.0581E-09 2.9945E-09 - 1.2589E+03 7.7780E-08 4.6407E-08 2.6712E-09 2.0708E-09 - 1.4125E+03 5.2463E-08 3.0933E-08 1.8324E-09 1.3193E-09 - 1.5849E+03 3.5548E-08 2.0955E-08 1.2401E-09 8.4790E-10 - 1.7783E+03 2.3977E-08 1.4210E-08 7.6506E-10 5.2477E-10 - 1.9953E+03 1.6120E-08 9.4546E-09 4.9759E-10 3.6426E-10 - 2.2387E+03 1.0829E-08 6.2979E-09 3.1647E-10 2.6313E-10 - 2.5119E+03 7.1994E-09 4.1850E-09 2.0064E-10 1.7710E-10 - 2.8184E+03 4.7772E-09 2.8049E-09 1.2766E-10 1.1527E-10 - 3.1623E+03 3.2867E-09 1.8893E-09 9.8575E-11 7.1238E-11 - 3.5481E+03 2.1199E-09 1.2089E-09 6.7602E-11 4.5252E-11 - 3.9811E+03 1.3996E-09 8.0629E-10 4.2514E-11 2.8515E-11 - 4.4668E+03 9.2483E-10 5.3082E-10 2.7397E-11 1.8428E-11 - 5.0119E+03 6.2419E-10 3.4684E-10 1.8509E-11 1.2509E-11 - 5.6234E+03 4.1189E-10 2.3263E-10 1.2257E-11 7.2833E-12 - 6.3096E+03 2.6957E-10 1.5293E-10 7.9319E-12 5.4117E-12 - 7.0795E+03 1.7875E-10 9.8455E-11 4.9648E-12 3.6059E-12 - 7.9433E+03 1.1729E-10 6.4119E-11 3.2918E-12 2.3654E-12 - 8.9125E+03 7.6596E-11 4.1898E-11 2.1264E-12 1.5315E-12 - 1.0000E+04 5.0245E-11 2.7226E-11 1.4064E-12 9.7822E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1933E+03 3.1598E+03 1.4947E+03 1.5969E+03 - 1.1220E-01 2.9021E+03 2.8784E+03 1.3603E+03 1.4407E+03 - 1.2589E-01 2.6327E+03 2.6232E+03 1.2298E+03 1.2948E+03 - 1.4125E-01 2.3780E+03 2.3600E+03 1.0987E+03 1.1572E+03 - 1.5849E-01 2.1177E+03 2.0921E+03 9.7402E+02 1.0156E+03 - 1.7783E-01 1.8682E+03 1.8370E+03 8.5965E+02 8.8135E+02 - 1.9953E-01 1.6355E+03 1.6083E+03 7.4861E+02 7.5826E+02 - 2.2387E-01 1.4137E+03 1.3888E+03 6.4681E+02 6.5415E+02 - 2.5119E-01 1.2075E+03 1.1839E+03 5.5218E+02 5.5495E+02 - 2.8184E-01 1.0240E+03 1.0035E+03 4.6761E+02 4.6283E+02 - 3.1623E-01 8.6464E+02 8.4209E+02 3.9358E+02 3.8953E+02 - 3.5481E-01 7.2320E+02 6.9759E+02 3.2712E+02 3.2225E+02 - 3.9811E-01 6.0216E+02 5.7591E+02 2.6961E+02 2.6188E+02 - 4.4668E-01 4.9450E+02 4.7439E+02 2.2298E+02 2.1100E+02 - 5.0119E-01 4.0270E+02 3.8856E+02 1.8118E+02 1.7024E+02 - 5.6234E-01 3.2671E+02 3.1465E+02 1.4504E+02 1.3694E+02 - 6.3096E-01 2.6202E+02 2.5208E+02 1.1604E+02 1.0834E+02 - 7.0795E-01 2.1017E+02 2.0132E+02 9.2340E+01 8.4913E+01 - 7.9433E-01 1.6853E+02 1.5826E+02 7.3451E+01 6.6034E+01 - 8.9125E-01 1.3334E+02 1.2460E+02 5.7415E+01 5.1252E+01 - 1.0000E+00 1.0491E+02 9.8635E+01 4.4005E+01 3.8901E+01 - 1.1220E+00 8.2004E+01 7.6048E+01 3.4129E+01 2.9408E+01 - 1.2589E+00 6.3759E+01 5.8415E+01 2.5920E+01 2.2436E+01 - 1.4125E+00 4.9133E+01 4.4958E+01 1.9600E+01 1.6788E+01 - 1.5849E+00 3.7941E+01 3.4237E+01 1.4777E+01 1.2482E+01 - 1.7783E+00 2.8971E+01 2.5760E+01 1.0861E+01 9.0895E+00 - 1.9953E+00 2.1685E+01 1.9190E+01 8.0617E+00 6.5464E+00 - 2.2387E+00 1.6244E+01 1.4301E+01 5.9919E+00 4.7484E+00 - 2.5119E+00 1.2194E+01 1.0533E+01 4.3378E+00 3.4226E+00 - 2.8184E+00 9.0556E+00 7.7724E+00 3.0379E+00 2.4559E+00 - 3.1623E+00 6.7325E+00 5.7043E+00 2.2006E+00 1.7309E+00 - 3.5481E+00 4.9396E+00 4.1376E+00 1.5571E+00 1.2117E+00 - 3.9811E+00 3.6284E+00 2.9881E+00 1.0899E+00 8.4766E-01 - 4.4668E+00 2.6417E+00 2.1594E+00 7.5337E-01 5.8675E-01 - 5.0119E+00 1.9125E+00 1.5547E+00 5.1744E-01 3.9543E-01 - 5.6234E+00 1.3765E+00 1.1028E+00 3.5670E-01 2.6976E-01 - 6.3096E+00 9.8987E-01 7.8630E-01 2.4357E-01 1.8247E-01 - 7.0795E+00 7.2038E-01 5.6494E-01 1.6500E-01 1.2366E-01 - 7.9433E+00 5.2081E-01 4.0350E-01 1.1205E-01 8.5382E-02 - 8.9125E+00 3.6834E-01 2.8783E-01 7.6254E-02 5.7235E-02 - 1.0000E+01 2.6395E-01 2.0330E-01 5.0387E-02 3.7541E-02 - 1.1220E+01 1.8787E-01 1.4367E-01 3.3833E-02 2.5202E-02 - 1.2589E+01 1.3307E-01 1.0172E-01 2.2477E-02 1.7134E-02 - 1.4125E+01 9.4913E-02 7.2070E-02 1.4860E-02 1.1433E-02 - 1.5849E+01 6.7955E-02 5.1154E-02 9.8128E-03 7.5290E-03 - 1.7783E+01 4.7996E-02 3.6417E-02 6.5540E-03 5.0449E-03 - 1.9953E+01 3.4131E-02 2.5695E-02 4.4970E-03 3.3862E-03 - 2.2387E+01 2.4466E-02 1.7947E-02 2.9865E-03 2.2782E-03 - 2.5119E+01 1.7079E-02 1.2684E-02 1.9303E-03 1.5239E-03 - 2.8184E+01 1.2109E-02 8.9176E-03 1.2808E-03 1.0070E-03 - 3.1623E+01 8.6852E-03 6.2954E-03 8.6238E-04 6.7247E-04 - 3.5481E+01 6.1247E-03 4.4311E-03 5.6698E-04 4.5019E-04 - 3.9811E+01 4.3156E-03 3.1055E-03 3.7809E-04 3.0185E-04 - 4.4668E+01 3.0517E-03 2.1771E-03 2.5480E-04 2.0371E-04 - 5.0119E+01 2.1502E-03 1.5317E-03 1.6912E-04 1.3529E-04 - 5.6234E+01 1.5143E-03 1.0759E-03 1.1310E-04 9.0465E-05 - 6.3096E+01 1.0658E-03 7.5119E-04 7.6265E-05 6.0623E-05 - 7.0795E+01 7.4883E-04 5.2519E-04 5.1069E-05 4.1111E-05 - 7.9433E+01 5.2938E-04 3.6749E-04 3.4895E-05 2.7968E-05 - 8.9125E+01 3.6970E-04 2.5715E-04 2.3127E-05 1.8560E-05 - 1.0000E+02 2.5802E-04 1.7804E-04 1.5779E-05 1.2750E-05 - 1.1220E+02 1.8121E-04 1.2388E-04 1.0643E-05 8.6429E-06 - 1.2589E+02 1.2675E-04 8.6142E-05 7.1266E-06 5.9278E-06 - 1.4125E+02 8.8203E-05 5.9594E-05 4.7147E-06 3.9871E-06 - 1.5849E+02 6.1994E-05 4.1331E-05 3.1736E-06 2.5727E-06 - 1.7783E+02 4.3101E-05 2.8834E-05 2.1876E-06 1.7289E-06 - 1.9953E+02 2.9968E-05 1.9961E-05 1.5073E-06 1.1939E-06 - 2.2387E+02 2.0992E-05 1.3688E-05 1.0216E-06 7.9600E-07 - 2.5119E+02 1.4654E-05 9.4827E-06 6.6507E-07 5.3816E-07 - 2.8184E+02 1.0216E-05 6.5371E-06 4.5792E-07 3.7181E-07 - 3.1623E+02 7.0748E-06 4.5354E-06 3.1593E-07 2.5174E-07 - 3.5481E+02 4.8987E-06 3.1142E-06 2.1591E-07 1.6600E-07 - 3.9811E+02 3.3953E-06 2.1475E-06 1.4437E-07 1.0959E-07 - 4.4668E+02 2.3480E-06 1.4800E-06 9.3948E-08 7.4433E-08 - 5.0119E+02 1.6151E-06 1.0163E-06 6.3085E-08 5.1331E-08 - 5.6234E+02 1.1246E-06 6.9739E-07 4.4116E-08 3.4249E-08 - 6.3096E+02 7.6662E-07 4.7443E-07 2.9299E-08 2.2967E-08 - 7.0795E+02 5.2285E-07 3.2332E-07 1.9288E-08 1.5064E-08 - 7.9433E+02 3.6102E-07 2.1985E-07 1.3009E-08 9.9491E-09 - 8.9125E+02 2.4845E-07 1.5081E-07 8.6003E-09 6.8446E-09 - 1.0000E+03 1.6952E-07 1.0300E-07 5.8897E-09 4.5037E-09 - 1.1220E+03 1.1466E-07 6.8948E-08 3.9186E-09 2.9840E-09 - 1.2589E+03 7.8088E-08 4.6455E-08 2.5957E-09 2.0349E-09 - 1.4125E+03 5.2807E-08 3.1159E-08 1.7394E-09 1.2778E-09 - 1.5849E+03 3.5655E-08 2.0839E-08 1.1801E-09 8.4696E-10 - 1.7783E+03 2.3967E-08 1.3969E-08 7.7979E-10 5.1593E-10 - 1.9953E+03 1.5927E-08 9.4339E-09 5.2538E-10 3.7966E-10 - 2.2387E+03 1.0715E-08 6.3472E-09 3.4588E-10 2.3948E-10 - 2.5119E+03 7.2094E-09 4.2120E-09 2.2425E-10 1.5322E-10 - 2.8184E+03 4.8168E-09 2.7716E-09 1.5245E-10 1.0942E-10 - 3.1623E+03 3.2979E-09 1.9048E-09 9.1205E-11 7.2961E-11 - 3.5481E+03 2.1333E-09 1.2059E-09 5.7865E-11 4.8193E-11 - 3.9811E+03 1.4206E-09 8.0094E-10 4.0704E-11 3.0806E-11 - 4.4668E+03 9.3399E-10 5.4197E-10 2.7522E-11 1.8893E-11 - 5.0119E+03 6.2598E-10 3.5762E-10 1.8033E-11 1.3077E-11 - 5.6234E+03 4.1758E-10 2.3158E-10 1.2103E-11 8.9070E-12 - 6.3096E+03 2.7357E-10 1.5495E-10 8.0758E-12 6.0115E-12 - 7.0795E+03 1.8053E-10 1.0218E-10 5.5777E-12 3.5982E-12 - 7.9433E+03 1.1825E-10 6.6612E-11 3.6740E-12 2.1138E-12 - 8.9125E+03 7.8117E-11 4.2102E-11 2.3604E-12 1.3819E-12 - 1.0000E+04 5.1042E-11 2.7205E-11 1.3857E-12 1.0052E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1631E+03 3.1443E+03 1.4857E+03 1.5906E+03 - 1.1220E-01 2.8954E+03 2.8750E+03 1.3524E+03 1.4420E+03 - 1.2589E-01 2.6339E+03 2.5971E+03 1.2244E+03 1.2819E+03 - 1.4125E-01 2.3610E+03 2.3271E+03 1.0891E+03 1.1373E+03 - 1.5849E-01 2.0913E+03 2.0687E+03 9.6404E+02 1.0020E+03 - 1.7783E-01 1.8409E+03 1.8267E+03 8.4988E+02 8.7205E+02 - 1.9953E-01 1.6230E+03 1.5930E+03 7.3794E+02 7.5082E+02 - 2.2387E-01 1.4014E+03 1.3695E+03 6.3685E+02 6.4895E+02 - 2.5119E-01 1.1932E+03 1.1695E+03 5.4449E+02 5.5197E+02 - 2.8184E-01 1.0201E+03 9.8980E+02 4.6322E+02 4.5741E+02 - 3.1623E-01 8.5691E+02 8.3120E+02 3.9077E+02 3.8243E+02 - 3.5481E-01 7.1188E+02 6.9123E+02 3.2424E+02 3.2081E+02 - 3.9811E-01 5.9026E+02 5.7007E+02 2.6686E+02 2.6125E+02 - 4.4668E-01 4.8558E+02 4.6961E+02 2.1861E+02 2.0888E+02 - 5.0119E-01 3.9827E+02 3.8527E+02 1.7761E+02 1.6860E+02 - 5.6234E-01 3.2217E+02 3.1216E+02 1.4283E+02 1.3489E+02 - 6.3096E-01 2.6171E+02 2.4920E+02 1.1330E+02 1.0727E+02 - 7.0795E-01 2.0934E+02 1.9889E+02 9.1232E+01 8.4551E+01 - 7.9433E-01 1.6517E+02 1.5826E+02 7.2497E+01 6.6280E+01 - 8.9125E-01 1.3139E+02 1.2498E+02 5.6579E+01 5.0836E+01 - 1.0000E+00 1.0288E+02 9.7028E+01 4.3399E+01 3.8557E+01 - 1.1220E+00 8.0702E+01 7.5130E+01 3.3303E+01 2.9437E+01 - 1.2589E+00 6.3015E+01 5.7801E+01 2.5630E+01 2.2035E+01 - 1.4125E+00 4.8689E+01 4.4502E+01 1.9327E+01 1.6393E+01 - 1.5849E+00 3.7311E+01 3.3951E+01 1.4339E+01 1.2168E+01 - 1.7783E+00 2.8535E+01 2.5579E+01 1.0685E+01 9.0849E+00 - 1.9953E+00 2.1339E+01 1.9292E+01 7.9261E+00 6.6596E+00 - 2.2387E+00 1.5999E+01 1.4453E+01 5.8285E+00 4.8100E+00 - 2.5119E+00 1.2220E+01 1.0661E+01 4.1878E+00 3.5392E+00 - 2.8184E+00 9.1674E+00 7.7479E+00 3.0167E+00 2.5151E+00 - 3.1623E+00 6.7091E+00 5.6618E+00 2.1489E+00 1.7237E+00 - 3.5481E+00 4.9415E+00 4.1213E+00 1.5299E+00 1.2107E+00 - 3.9811E+00 3.6100E+00 2.9804E+00 1.0818E+00 8.4199E-01 - 4.4668E+00 2.6231E+00 2.1532E+00 7.4683E-01 5.8494E-01 - 5.0119E+00 1.8994E+00 1.5508E+00 5.1683E-01 3.9458E-01 - 5.6234E+00 1.3808E+00 1.1010E+00 3.5011E-01 2.7027E-01 - 6.3096E+00 1.0034E+00 7.9110E-01 2.4038E-01 1.8862E-01 - 7.0795E+00 7.2477E-01 5.6834E-01 1.6740E-01 1.2571E-01 - 7.9433E+00 5.2177E-01 4.0185E-01 1.1281E-01 8.2502E-02 - 8.9125E+00 3.7308E-01 2.8754E-01 7.3352E-02 5.6791E-02 - 1.0000E+01 2.6476E-01 2.0117E-01 5.0600E-02 3.7961E-02 - 1.1220E+01 1.8718E-01 1.4252E-01 3.4373E-02 2.5473E-02 - 1.2589E+01 1.3306E-01 1.0184E-01 2.2720E-02 1.6922E-02 - 1.4125E+01 9.5637E-02 7.2089E-02 1.4929E-02 1.1181E-02 - 1.5849E+01 6.7818E-02 5.0793E-02 9.7358E-03 7.4816E-03 - 1.7783E+01 4.7922E-02 3.5784E-02 6.5661E-03 5.0255E-03 - 1.9953E+01 3.4203E-02 2.5307E-02 4.4195E-03 3.4239E-03 - 2.2387E+01 2.4251E-02 1.7959E-02 2.8234E-03 2.3573E-03 - 2.5119E+01 1.7049E-02 1.2685E-02 1.8994E-03 1.5905E-03 - 2.8184E+01 1.2271E-02 8.8923E-03 1.2689E-03 1.0482E-03 - 3.1623E+01 8.6445E-03 6.2850E-03 8.5530E-04 6.7058E-04 - 3.5481E+01 6.1126E-03 4.4099E-03 5.6745E-04 4.5070E-04 - 3.9811E+01 4.3087E-03 3.1023E-03 3.8080E-04 3.0437E-04 - 4.4668E+01 3.0369E-03 2.1819E-03 2.5586E-04 2.0421E-04 - 5.0119E+01 2.1410E-03 1.5251E-03 1.6849E-04 1.3762E-04 - 5.6234E+01 1.5099E-03 1.0672E-03 1.1455E-04 9.0975E-05 - 6.3096E+01 1.0693E-03 7.4546E-04 7.7777E-05 6.0627E-05 - 7.0795E+01 7.4957E-04 5.1755E-04 5.0494E-05 4.1528E-05 - 7.9433E+01 5.2591E-04 3.6319E-04 3.3148E-05 2.7728E-05 - 8.9125E+01 3.6950E-04 2.5329E-04 2.2392E-05 1.8918E-05 - 1.0000E+02 2.5786E-04 1.7786E-04 1.5611E-05 1.2625E-05 - 1.1220E+02 1.8128E-04 1.2363E-04 1.0606E-05 8.5538E-06 - 1.2589E+02 1.2667E-04 8.5537E-05 7.0927E-06 5.8433E-06 - 1.4125E+02 8.8439E-05 5.9758E-05 4.7177E-06 3.9378E-06 - 1.5849E+02 6.1772E-05 4.1736E-05 3.2446E-06 2.5805E-06 - 1.7783E+02 4.3306E-05 2.8624E-05 2.2472E-06 1.7694E-06 - 1.9953E+02 3.0153E-05 1.9865E-05 1.4892E-06 1.1976E-06 - 2.2387E+02 2.0970E-05 1.3845E-05 1.0132E-06 7.9927E-07 - 2.5119E+02 1.4671E-05 9.5568E-06 6.9819E-07 5.4762E-07 - 2.8184E+02 1.0255E-05 6.5484E-06 4.7570E-07 3.7824E-07 - 3.1623E+02 7.0721E-06 4.5451E-06 3.1082E-07 2.5028E-07 - 3.5481E+02 4.9098E-06 3.1280E-06 2.0999E-07 1.6882E-07 - 3.9811E+02 3.3985E-06 2.1496E-06 1.4192E-07 1.1257E-07 - 4.4668E+02 2.3399E-06 1.4673E-06 9.6070E-08 7.3537E-08 - 5.0119E+02 1.6156E-06 1.0054E-06 6.5643E-08 5.2009E-08 - 5.6234E+02 1.1211E-06 6.9617E-07 4.5277E-08 3.5189E-08 - 6.3096E+02 7.6727E-07 4.7437E-07 3.0280E-08 2.3486E-08 - 7.0795E+02 5.2782E-07 3.2592E-07 1.9899E-08 1.5839E-08 - 7.9433E+02 3.6187E-07 2.2235E-07 1.2613E-08 1.0473E-08 - 8.9125E+02 2.4663E-07 1.5030E-07 8.6027E-09 6.9990E-09 - 1.0000E+03 1.6921E-07 1.0298E-07 6.1316E-09 4.5171E-09 - 1.1220E+03 1.1466E-07 6.9360E-08 3.9733E-09 2.8933E-09 - 1.2589E+03 7.7687E-08 4.6702E-08 2.6455E-09 1.8951E-09 - 1.4125E+03 5.2448E-08 3.1215E-08 1.7352E-09 1.3776E-09 - 1.5849E+03 3.6025E-08 2.0893E-08 1.1127E-09 8.9585E-10 - 1.7783E+03 2.4165E-08 1.3917E-08 7.2815E-10 5.2878E-10 - 1.9953E+03 1.6109E-08 9.3771E-09 5.0953E-10 3.7409E-10 - 2.2387E+03 1.0838E-08 6.1918E-09 3.4934E-10 2.5484E-10 - 2.5119E+03 7.2293E-09 4.1583E-09 2.2319E-10 1.7400E-10 - 2.8184E+03 4.8252E-09 2.7754E-09 1.4778E-10 1.2095E-10 - 3.1623E+03 3.3177E-09 1.9003E-09 9.9175E-11 7.3756E-11 - 3.5481E+03 2.1299E-09 1.2240E-09 6.0264E-11 4.6567E-11 - 3.9811E+03 1.4103E-09 7.9976E-10 3.8228E-11 2.9923E-11 - 4.4668E+03 9.3867E-10 5.3768E-10 2.5937E-11 1.8170E-11 - 5.0119E+03 6.1962E-10 3.5476E-10 1.7981E-11 1.1274E-11 - 5.6234E+03 4.0464E-10 2.3213E-10 1.1547E-11 7.3244E-12 - 6.3096E+03 2.6774E-10 1.5189E-10 7.9883E-12 5.5560E-12 - 7.0795E+03 1.7558E-10 9.9204E-11 5.2430E-12 3.6607E-12 - 7.9433E+03 1.1566E-10 6.4902E-11 3.2396E-12 2.3286E-12 - 8.9125E+03 7.7923E-11 4.2322E-11 2.1453E-12 1.3861E-12 - 1.0000E+04 5.2342E-11 2.8146E-11 1.2567E-12 9.0078E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.3145E+03 3.3091E+03 1.5602E+03 1.6619E+03 - 1.1220E-01 3.0214E+03 3.0244E+03 1.4180E+03 1.5004E+03 - 1.2589E-01 2.7417E+03 2.7289E+03 1.2751E+03 1.3508E+03 - 1.4125E-01 2.4700E+03 2.4421E+03 1.1413E+03 1.1950E+03 - 1.5849E-01 2.1998E+03 2.1757E+03 1.0193E+03 1.0469E+03 - 1.7783E-01 1.9425E+03 1.9185E+03 8.9332E+02 9.1186E+02 - 1.9953E-01 1.6978E+03 1.6751E+03 7.7395E+02 7.9121E+02 - 2.2387E-01 1.4688E+03 1.4449E+03 6.7128E+02 6.7515E+02 - 2.5119E-01 1.2535E+03 1.2309E+03 5.7509E+02 5.6995E+02 - 2.8184E-01 1.0575E+03 1.0405E+03 4.8573E+02 4.8021E+02 - 3.1623E-01 8.9289E+02 8.6959E+02 4.0644E+02 3.9924E+02 - 3.5481E-01 7.4850E+02 7.2188E+02 3.4084E+02 3.2833E+02 - 3.9811E-01 6.1706E+02 5.9501E+02 2.8288E+02 2.6804E+02 - 4.4668E-01 5.0556E+02 4.8519E+02 2.2907E+02 2.1653E+02 - 5.0119E-01 4.1220E+02 3.9494E+02 1.8356E+02 1.7339E+02 - 5.6234E-01 3.3402E+02 3.1984E+02 1.4822E+02 1.3771E+02 - 6.3096E-01 2.6820E+02 2.5696E+02 1.1891E+02 1.0979E+02 - 7.0795E-01 2.1492E+02 2.0452E+02 9.3770E+01 8.5956E+01 - 7.9433E-01 1.7219E+02 1.6205E+02 7.3324E+01 6.6340E+01 - 8.9125E-01 1.3413E+02 1.2822E+02 5.7798E+01 5.1509E+01 - 1.0000E+00 1.0517E+02 9.9617E+01 4.4770E+01 3.9446E+01 - 1.1220E+00 8.2134E+01 7.6804E+01 3.4204E+01 2.9909E+01 - 1.2589E+00 6.4311E+01 5.9047E+01 2.6063E+01 2.2510E+01 - 1.4125E+00 4.9455E+01 4.5148E+01 1.9714E+01 1.6875E+01 - 1.5849E+00 3.7739E+01 3.4393E+01 1.4733E+01 1.2435E+01 - 1.7783E+00 2.8799E+01 2.5879E+01 1.0959E+01 9.1892E+00 - 1.9953E+00 2.1754E+01 1.9388E+01 8.0676E+00 6.6566E+00 - 2.2387E+00 1.6356E+01 1.4395E+01 5.8611E+00 4.7840E+00 - 2.5119E+00 1.2241E+01 1.0651E+01 4.2463E+00 3.5018E+00 - 2.8184E+00 9.0894E+00 7.8590E+00 3.0812E+00 2.5276E+00 - 3.1623E+00 6.7324E+00 5.6670E+00 2.1976E+00 1.7238E+00 - 3.5481E+00 4.9425E+00 4.1165E+00 1.5546E+00 1.2108E+00 - 3.9811E+00 3.6162E+00 2.9887E+00 1.0808E+00 8.3492E-01 - 4.4668E+00 2.6393E+00 2.1619E+00 7.3763E-01 5.8332E-01 - 5.0119E+00 1.9117E+00 1.5482E+00 5.0362E-01 4.0161E-01 - 5.6234E+00 1.3847E+00 1.1075E+00 3.4999E-01 2.6907E-01 - 6.3096E+00 9.9949E-01 7.9046E-01 2.4328E-01 1.8444E-01 - 7.0795E+00 7.1245E-01 5.6531E-01 1.6695E-01 1.2604E-01 - 7.9433E+00 5.0908E-01 4.0280E-01 1.1412E-01 8.3709E-02 - 8.9125E+00 3.6665E-01 2.8363E-01 7.8282E-02 5.6879E-02 - 1.0000E+01 2.6338E-01 2.0233E-01 5.0061E-02 3.8231E-02 - 1.1220E+01 1.8717E-01 1.4267E-01 3.3633E-02 2.5100E-02 - 1.2589E+01 1.3294E-01 1.0094E-01 2.2594E-02 1.7033E-02 - 1.4125E+01 9.5128E-02 7.1674E-02 1.4874E-02 1.1350E-02 - 1.5849E+01 6.7564E-02 5.0747E-02 9.8752E-03 7.4829E-03 - 1.7783E+01 4.7936E-02 3.6229E-02 6.6685E-03 5.0063E-03 - 1.9953E+01 3.4253E-02 2.5486E-02 4.3604E-03 3.3439E-03 - 2.2387E+01 2.4437E-02 1.8019E-02 2.8958E-03 2.2902E-03 - 2.5119E+01 1.7541E-02 1.2605E-02 1.9608E-03 1.5959E-03 - 2.8184E+01 1.2380E-02 8.7931E-03 1.2662E-03 1.0275E-03 - 3.1623E+01 8.6508E-03 6.2886E-03 8.5841E-04 6.7544E-04 - 3.5481E+01 6.1025E-03 4.4251E-03 5.7308E-04 4.5413E-04 - 3.9811E+01 4.3062E-03 3.1100E-03 3.8194E-04 3.0273E-04 - 4.4668E+01 3.0310E-03 2.1873E-03 2.5462E-04 2.0293E-04 - 5.0119E+01 2.1383E-03 1.5308E-03 1.6795E-04 1.3766E-04 - 5.6234E+01 1.5159E-03 1.0707E-03 1.1326E-04 9.2605E-05 - 6.3096E+01 1.0641E-03 7.5129E-04 7.5500E-05 6.2276E-05 - 7.0795E+01 7.4968E-04 5.2605E-04 5.0513E-05 4.1490E-05 - 7.9433E+01 5.2478E-04 3.6680E-04 3.4493E-05 2.8263E-05 - 8.9125E+01 3.6777E-04 2.5353E-04 2.3154E-05 1.8782E-05 - 1.0000E+02 2.5934E-04 1.7811E-04 1.5588E-05 1.2839E-05 - 1.1220E+02 1.8157E-04 1.2411E-04 1.0460E-05 8.6635E-06 - 1.2589E+02 1.2683E-04 8.6305E-05 7.1336E-06 5.8627E-06 - 1.4125E+02 8.8749E-05 5.9716E-05 4.8799E-06 3.9183E-06 - 1.5849E+02 6.2039E-05 4.1248E-05 3.2986E-06 2.6126E-06 - 1.7783E+02 4.3165E-05 2.8748E-05 2.2159E-06 1.7660E-06 - 1.9953E+02 3.0030E-05 1.9925E-05 1.4509E-06 1.2077E-06 - 2.2387E+02 2.1036E-05 1.3858E-05 9.7774E-07 7.9267E-07 - 2.5119E+02 1.4644E-05 9.5414E-06 6.8466E-07 5.4385E-07 - 2.8184E+02 1.0157E-05 6.5375E-06 4.6192E-07 3.7262E-07 - 3.1623E+02 7.0570E-06 4.5455E-06 3.1227E-07 2.5274E-07 - 3.5481E+02 4.8732E-06 3.1208E-06 2.0861E-07 1.7065E-07 - 3.9811E+02 3.3829E-06 2.1422E-06 1.4286E-07 1.1342E-07 - 4.4668E+02 2.3449E-06 1.4691E-06 9.5965E-08 7.5657E-08 - 5.0119E+02 1.6141E-06 1.0134E-06 6.4317E-08 5.0782E-08 - 5.6234E+02 1.1239E-06 7.0036E-07 4.3398E-08 3.4434E-08 - 6.3096E+02 7.6575E-07 4.7677E-07 2.9737E-08 2.2586E-08 - 7.0795E+02 5.2432E-07 3.2272E-07 1.9962E-08 1.5046E-08 - 7.9433E+02 3.6219E-07 2.1998E-07 1.2728E-08 1.0209E-08 - 8.9125E+02 2.4799E-07 1.4963E-07 8.6628E-09 6.9231E-09 - 1.0000E+03 1.6984E-07 1.0116E-07 5.9215E-09 4.5531E-09 - 1.1220E+03 1.1471E-07 6.8319E-08 3.9449E-09 2.9395E-09 - 1.2589E+03 7.7698E-08 4.6695E-08 2.5947E-09 1.9726E-09 - 1.4125E+03 5.2321E-08 3.1525E-08 1.7702E-09 1.3306E-09 - 1.5849E+03 3.5361E-08 2.1032E-08 1.1463E-09 8.2909E-10 - 1.7783E+03 2.3795E-08 1.3906E-08 7.7355E-10 5.3276E-10 - 1.9953E+03 1.5972E-08 9.4122E-09 5.1966E-10 3.9139E-10 - 2.2387E+03 1.0752E-08 6.2766E-09 3.6376E-10 2.5265E-10 - 2.5119E+03 7.1742E-09 4.1981E-09 2.4240E-10 1.6190E-10 - 2.8184E+03 4.8004E-09 2.8327E-09 1.5611E-10 1.0688E-10 - 3.1623E+03 3.3043E-09 1.9089E-09 9.9330E-11 7.2358E-11 - 3.5481E+03 2.1301E-09 1.2221E-09 6.7194E-11 4.7814E-11 - 3.9811E+03 1.4206E-09 8.0448E-10 4.4378E-11 3.0974E-11 - 4.4668E+03 9.3552E-10 5.2675E-10 2.7932E-11 2.1390E-11 - 5.0119E+03 6.2147E-10 3.4719E-10 1.9226E-11 1.3571E-11 - 5.6234E+03 4.0513E-10 2.2694E-10 1.3139E-11 7.5933E-12 - 6.3096E+03 2.7212E-10 1.5162E-10 7.9010E-12 5.2927E-12 - 7.0795E+03 1.7825E-10 9.9579E-11 5.0367E-12 3.9424E-12 - 7.9433E+03 1.1694E-10 6.5863E-11 3.5784E-12 2.6464E-12 - 8.9125E+03 7.7041E-11 4.1982E-11 2.2887E-12 1.5858E-12 - 1.0000E+04 5.0613E-11 2.7623E-11 1.4084E-12 1.0346E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5705E+03 3.5637E+03 1.6890E+03 1.7871E+03 - 1.1220E-01 3.2506E+03 3.2533E+03 1.5418E+03 1.6105E+03 - 1.2589E-01 2.9614E+03 2.9356E+03 1.3902E+03 1.4383E+03 - 1.4125E-01 2.6748E+03 2.6276E+03 1.2426E+03 1.2784E+03 - 1.5849E-01 2.3767E+03 2.3457E+03 1.0961E+03 1.1205E+03 - 1.7783E-01 2.0942E+03 2.0705E+03 9.6091E+02 9.7304E+02 - 1.9953E-01 1.8265E+03 1.8046E+03 8.4160E+02 8.4317E+02 - 2.2387E-01 1.5739E+03 1.5516E+03 7.2491E+02 7.3157E+02 - 2.5119E-01 1.3500E+03 1.3237E+03 6.1728E+02 6.1996E+02 - 2.8184E-01 1.1471E+03 1.1167E+03 5.2158E+02 5.1709E+02 - 3.1623E-01 9.6029E+02 9.3185E+02 4.3714E+02 4.3034E+02 - 3.5481E-01 7.9695E+02 7.7207E+02 3.6206E+02 3.5269E+02 - 3.9811E-01 6.5513E+02 6.3437E+02 2.9684E+02 2.8592E+02 - 4.4668E-01 5.3851E+02 5.1843E+02 2.4331E+02 2.3042E+02 - 5.0119E-01 4.3928E+02 4.2263E+02 1.9714E+02 1.8481E+02 - 5.6234E-01 3.5455E+02 3.4143E+02 1.5798E+02 1.4694E+02 - 6.3096E-01 2.8308E+02 2.7050E+02 1.2628E+02 1.1581E+02 - 7.0795E-01 2.2460E+02 2.1338E+02 9.9974E+01 9.0644E+01 - 7.9433E-01 1.7828E+02 1.6947E+02 7.8370E+01 7.0150E+01 - 8.9125E-01 1.4103E+02 1.3323E+02 6.0857E+01 5.3818E+01 - 1.0000E+00 1.1059E+02 1.0322E+02 4.6890E+01 4.1055E+01 - 1.1220E+00 8.5601E+01 7.9662E+01 3.5681E+01 3.1095E+01 - 1.2589E+00 6.6173E+01 6.1141E+01 2.7135E+01 2.3417E+01 - 1.4125E+00 5.1033E+01 4.6842E+01 2.0608E+01 1.7477E+01 - 1.5849E+00 3.8936E+01 3.5092E+01 1.5400E+01 1.2783E+01 - 1.7783E+00 2.9426E+01 2.6210E+01 1.1378E+01 9.3368E+00 - 1.9953E+00 2.2171E+01 1.9689E+01 8.3556E+00 6.8601E+00 - 2.2387E+00 1.6772E+01 1.4621E+01 6.0581E+00 4.9038E+00 - 2.5119E+00 1.2520E+01 1.0777E+01 4.4301E+00 3.4580E+00 - 2.8184E+00 9.2069E+00 7.9040E+00 3.1271E+00 2.4847E+00 - 3.1623E+00 6.7835E+00 5.7310E+00 2.2225E+00 1.7507E+00 - 3.5481E+00 4.9933E+00 4.1655E+00 1.5659E+00 1.2092E+00 - 3.9811E+00 3.6430E+00 3.0156E+00 1.0949E+00 8.4181E-01 - 4.4668E+00 2.6381E+00 2.1550E+00 7.6539E-01 5.8274E-01 - 5.0119E+00 1.9142E+00 1.5398E+00 5.2844E-01 3.9869E-01 - 5.6234E+00 1.3903E+00 1.1055E+00 3.5607E-01 2.7148E-01 - 6.3096E+00 1.0033E+00 7.8607E-01 2.4331E-01 1.8603E-01 - 7.0795E+00 7.1734E-01 5.5940E-01 1.6632E-01 1.2693E-01 - 7.9433E+00 5.1398E-01 3.9777E-01 1.1128E-01 8.4753E-02 - 8.9125E+00 3.6831E-01 2.8256E-01 7.4596E-02 5.6390E-02 - 1.0000E+01 2.6283E-01 2.0240E-01 4.9485E-02 3.7890E-02 - 1.1220E+01 1.8758E-01 1.4319E-01 3.3415E-02 2.5331E-02 - 1.2589E+01 1.3351E-01 1.0138E-01 2.2641E-02 1.6762E-02 - 1.4125E+01 9.4188E-02 7.2146E-02 1.5283E-02 1.1246E-02 - 1.5849E+01 6.7173E-02 5.0947E-02 9.8760E-03 7.6809E-03 - 1.7783E+01 4.8112E-02 3.6036E-02 6.5822E-03 5.1792E-03 - 1.9953E+01 3.4036E-02 2.5583E-02 4.5572E-03 3.4250E-03 - 2.2387E+01 2.4175E-02 1.8176E-02 2.9870E-03 2.2854E-03 - 2.5119E+01 1.7387E-02 1.2742E-02 1.9282E-03 1.4836E-03 - 2.8184E+01 1.2340E-02 8.7990E-03 1.2212E-03 9.6920E-04 - 3.1623E+01 8.6774E-03 6.2828E-03 8.5121E-04 6.7783E-04 - 3.5481E+01 6.1228E-03 4.4193E-03 5.6337E-04 4.5166E-04 - 3.9811E+01 4.3180E-03 3.1036E-03 3.7670E-04 3.0288E-04 - 4.4668E+01 3.0583E-03 2.1747E-03 2.5200E-04 2.0447E-04 - 5.0119E+01 2.1537E-03 1.5241E-03 1.6988E-04 1.3757E-04 - 5.6234E+01 1.5190E-03 1.0722E-03 1.1289E-04 9.3442E-05 - 6.3096E+01 1.0634E-03 7.4924E-04 7.4823E-05 6.1670E-05 - 7.0795E+01 7.4341E-04 5.2099E-04 5.1390E-05 4.0645E-05 - 7.9433E+01 5.2512E-04 3.6567E-04 3.4573E-05 2.8777E-05 - 8.9125E+01 3.6782E-04 2.5489E-04 2.3927E-05 1.8818E-05 - 1.0000E+02 2.5846E-04 1.7783E-04 1.5729E-05 1.2448E-05 - 1.1220E+02 1.8087E-04 1.2357E-04 1.0559E-05 8.6222E-06 - 1.2589E+02 1.2683E-04 8.5998E-05 7.0531E-06 5.7907E-06 - 1.4125E+02 8.8784E-05 5.9717E-05 4.7588E-06 3.7991E-06 - 1.5849E+02 6.1986E-05 4.1310E-05 3.2269E-06 2.6145E-06 - 1.7783E+02 4.3050E-05 2.8544E-05 2.1798E-06 1.8157E-06 - 1.9953E+02 3.0177E-05 1.9865E-05 1.4826E-06 1.2168E-06 - 2.2387E+02 2.1054E-05 1.3835E-05 9.9444E-07 7.9398E-07 - 2.5119E+02 1.4391E-05 9.5925E-06 6.7607E-07 5.4325E-07 - 2.8184E+02 1.0087E-05 6.5624E-06 4.6500E-07 3.7634E-07 - 3.1623E+02 7.1081E-06 4.5348E-06 3.1345E-07 2.5232E-07 - 3.5481E+02 4.8932E-06 3.1123E-06 2.0946E-07 1.7043E-07 - 3.9811E+02 3.3759E-06 2.1417E-06 1.4031E-07 1.1290E-07 - 4.4668E+02 2.3308E-06 1.4819E-06 9.6136E-08 7.7440E-08 - 5.0119E+02 1.6198E-06 1.0210E-06 6.5644E-08 5.1240E-08 - 5.6234E+02 1.1203E-06 7.0025E-07 4.3843E-08 3.3726E-08 - 6.3096E+02 7.6221E-07 4.7522E-07 2.9563E-08 2.2608E-08 - 7.0795E+02 5.2411E-07 3.2676E-07 2.0045E-08 1.5127E-08 - 7.9433E+02 3.6090E-07 2.2285E-07 1.3500E-08 1.0058E-08 - 8.9125E+02 2.4704E-07 1.5122E-07 8.8213E-09 6.6560E-09 - 1.0000E+03 1.7068E-07 1.0237E-07 5.8696E-09 4.5757E-09 - 1.1220E+03 1.1502E-07 6.8671E-08 3.9053E-09 2.9374E-09 - 1.2589E+03 7.7579E-08 4.6747E-08 2.6368E-09 1.8920E-09 - 1.4125E+03 5.2325E-08 3.1468E-08 1.7012E-09 1.2681E-09 - 1.5849E+03 3.5532E-08 2.0891E-08 1.1336E-09 8.3185E-10 - 1.7783E+03 2.3594E-08 1.3906E-08 7.4646E-10 5.5217E-10 - 1.9953E+03 1.5968E-08 9.3457E-09 4.9276E-10 3.6772E-10 - 2.2387E+03 1.0693E-08 6.2223E-09 3.4881E-10 2.4389E-10 - 2.5119E+03 7.1635E-09 4.1924E-09 2.3534E-10 1.6250E-10 - 2.8184E+03 4.7774E-09 2.8660E-09 1.4924E-10 1.1471E-10 - 3.1623E+03 3.3080E-09 1.8884E-09 1.0418E-10 7.3465E-11 - 3.5481E+03 2.1363E-09 1.2110E-09 6.8844E-11 4.7411E-11 - 3.9811E+03 1.4050E-09 8.0723E-10 4.2039E-11 3.1609E-11 - 4.4668E+03 9.3625E-10 5.2720E-10 2.7027E-11 1.9040E-11 - 5.0119E+03 6.2273E-10 3.4615E-10 1.6997E-11 1.1680E-11 - 5.6234E+03 4.1014E-10 2.2896E-10 1.0932E-11 7.4585E-12 - 6.3096E+03 2.7006E-10 1.5283E-10 7.6919E-12 5.3730E-12 - 7.0795E+03 1.7911E-10 9.9385E-11 4.7001E-12 3.7050E-12 - 7.9433E+03 1.1697E-10 6.5289E-11 3.3034E-12 2.2310E-12 - 8.9125E+03 7.6884E-11 4.2887E-11 2.1697E-12 1.5781E-12 - 1.0000E+04 5.1007E-11 2.7334E-11 1.4113E-12 1.1806E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.7321E+03 3.7271E+03 1.7617E+03 1.8461E+03 - 1.1220E-01 3.3986E+03 3.3899E+03 1.6149E+03 1.6757E+03 - 1.2589E-01 3.0804E+03 3.0581E+03 1.4518E+03 1.5015E+03 - 1.4125E-01 2.7607E+03 2.7480E+03 1.2952E+03 1.3353E+03 - 1.5849E-01 2.4674E+03 2.4474E+03 1.1453E+03 1.1726E+03 - 1.7783E-01 2.1769E+03 2.1499E+03 9.9575E+02 1.0148E+03 - 1.9953E-01 1.8966E+03 1.8657E+03 8.6763E+02 8.7800E+02 - 2.2387E-01 1.6385E+03 1.6046E+03 7.5515E+02 7.5346E+02 - 2.5119E-01 1.3987E+03 1.3694E+03 6.4419E+02 6.3876E+02 - 2.8184E-01 1.1792E+03 1.1599E+03 5.4250E+02 5.3660E+02 - 3.1623E-01 9.9012E+02 9.6906E+02 4.5646E+02 4.4553E+02 - 3.5481E-01 8.2596E+02 8.0573E+02 3.7859E+02 3.6419E+02 - 3.9811E-01 6.8087E+02 6.6333E+02 3.0898E+02 2.9592E+02 - 4.4668E-01 5.5842E+02 5.3967E+02 2.5190E+02 2.3756E+02 - 5.0119E-01 4.5479E+02 4.3752E+02 2.0337E+02 1.8869E+02 - 5.6234E-01 3.6550E+02 3.5224E+02 1.6300E+02 1.4991E+02 - 6.3096E-01 2.9125E+02 2.8046E+02 1.3055E+02 1.1880E+02 - 7.0795E-01 2.3206E+02 2.2215E+02 1.0342E+02 9.3432E+01 - 7.9433E-01 1.8500E+02 1.7506E+02 8.1052E+01 7.2939E+01 - 8.9125E-01 1.4511E+02 1.3584E+02 6.2306E+01 5.5732E+01 - 1.0000E+00 1.1245E+02 1.0537E+02 4.8128E+01 4.1761E+01 - 1.1220E+00 8.7746E+01 8.1715E+01 3.6843E+01 3.1661E+01 - 1.2589E+00 6.7957E+01 6.2215E+01 2.7825E+01 2.3755E+01 - 1.4125E+00 5.1939E+01 4.7022E+01 2.0865E+01 1.7558E+01 - 1.5849E+00 3.9759E+01 3.5626E+01 1.5582E+01 1.2887E+01 - 1.7783E+00 3.0203E+01 2.6742E+01 1.1546E+01 9.5118E+00 - 1.9953E+00 2.2737E+01 2.0081E+01 8.5042E+00 6.8888E+00 - 2.2387E+00 1.6957E+01 1.4833E+01 6.1939E+00 4.9663E+00 - 2.5119E+00 1.2658E+01 1.0855E+01 4.4185E+00 3.5570E+00 - 2.8184E+00 9.3181E+00 7.9572E+00 3.1317E+00 2.5107E+00 - 3.1623E+00 6.8492E+00 5.7752E+00 2.2443E+00 1.7563E+00 - 3.5481E+00 5.0507E+00 4.1670E+00 1.5760E+00 1.2180E+00 - 3.9811E+00 3.6731E+00 3.0173E+00 1.1033E+00 8.4277E-01 - 4.4668E+00 2.6719E+00 2.1731E+00 7.6770E-01 5.8440E-01 - 5.0119E+00 1.9393E+00 1.5495E+00 5.2461E-01 3.9993E-01 - 5.6234E+00 1.3876E+00 1.1122E+00 3.5792E-01 2.7498E-01 - 6.3096E+00 9.9336E-01 7.9252E-01 2.4906E-01 1.8861E-01 - 7.0795E+00 7.1527E-01 5.6520E-01 1.6836E-01 1.2391E-01 - 7.9433E+00 5.1305E-01 4.0459E-01 1.1231E-01 8.2101E-02 - 8.9125E+00 3.6829E-01 2.8278E-01 7.6270E-02 5.5684E-02 - 1.0000E+01 2.6450E-01 2.0227E-01 5.0522E-02 3.7934E-02 - 1.1220E+01 1.8798E-01 1.4390E-01 3.3620E-02 2.5464E-02 - 1.2589E+01 1.3417E-01 1.0188E-01 2.2435E-02 1.7072E-02 - 1.4125E+01 9.5801E-02 7.2118E-02 1.4973E-02 1.1371E-02 - 1.5849E+01 6.7877E-02 5.0917E-02 1.0014E-02 7.6094E-03 - 1.7783E+01 4.7823E-02 3.5621E-02 6.5148E-03 5.0878E-03 - 1.9953E+01 3.3900E-02 2.5059E-02 4.3220E-03 3.3863E-03 - 2.2387E+01 2.4152E-02 1.7710E-02 2.9376E-03 2.2327E-03 - 2.5119E+01 1.7300E-02 1.2635E-02 2.0216E-03 1.4972E-03 - 2.8184E+01 1.2405E-02 8.8903E-03 1.3008E-03 9.9695E-04 - 3.1623E+01 8.6764E-03 6.2971E-03 8.6022E-04 6.7014E-04 - 3.5481E+01 6.1196E-03 4.4263E-03 5.7390E-04 4.5013E-04 - 3.9811E+01 4.3113E-03 3.1163E-03 3.7805E-04 3.0259E-04 - 4.4668E+01 3.0542E-03 2.1819E-03 2.5122E-04 2.0390E-04 - 5.0119E+01 2.1544E-03 1.5282E-03 1.6830E-04 1.3632E-04 - 5.6234E+01 1.5128E-03 1.0741E-03 1.1403E-04 9.1663E-05 - 6.3096E+01 1.0620E-03 7.5490E-04 7.6840E-05 6.2045E-05 - 7.0795E+01 7.4410E-04 5.2529E-04 5.1442E-05 4.1135E-05 - 7.9433E+01 5.2424E-04 3.6681E-04 3.4579E-05 2.7479E-05 - 8.9125E+01 3.6818E-04 2.5503E-04 2.3469E-05 1.8766E-05 - 1.0000E+02 2.5836E-04 1.7830E-04 1.5799E-05 1.2798E-05 - 1.1220E+02 1.8032E-04 1.2400E-04 1.0575E-05 8.5385E-06 - 1.2589E+02 1.2643E-04 8.5676E-05 7.0573E-06 5.7377E-06 - 1.4125E+02 8.8458E-05 5.9137E-05 4.8019E-06 3.8592E-06 - 1.5849E+02 6.1716E-05 4.1509E-05 3.2408E-06 2.6119E-06 - 1.7783E+02 4.3275E-05 2.9014E-05 2.2156E-06 1.7420E-06 - 1.9953E+02 3.0092E-05 2.0029E-05 1.5483E-06 1.1877E-06 - 2.2387E+02 2.0680E-05 1.3762E-05 1.0101E-06 7.8088E-07 - 2.5119E+02 1.4457E-05 9.4574E-06 6.8213E-07 5.2960E-07 - 2.8184E+02 1.0103E-05 6.5572E-06 4.6347E-07 3.6163E-07 - 3.1623E+02 7.0597E-06 4.5532E-06 3.1737E-07 2.4681E-07 - 3.5481E+02 4.8815E-06 3.1266E-06 2.1717E-07 1.6482E-07 - 3.9811E+02 3.3862E-06 2.1475E-06 1.4671E-07 1.1526E-07 - 4.4668E+02 2.3409E-06 1.4698E-06 9.8421E-08 7.7150E-08 - 5.0119E+02 1.6076E-06 1.0135E-06 6.7033E-08 5.1040E-08 - 5.6234E+02 1.1263E-06 6.9808E-07 4.3978E-08 3.4655E-08 - 6.3096E+02 7.7058E-07 4.7392E-07 2.8950E-08 2.3048E-08 - 7.0795E+02 5.2434E-07 3.2482E-07 1.9581E-08 1.5231E-08 - 7.9433E+02 3.5880E-07 2.2185E-07 1.3752E-08 1.0364E-08 - 8.9125E+02 2.4736E-07 1.5000E-07 9.1936E-09 6.8315E-09 - 1.0000E+03 1.6936E-07 1.0190E-07 6.0466E-09 4.5279E-09 - 1.1220E+03 1.1376E-07 6.8390E-08 4.0270E-09 3.0532E-09 - 1.2589E+03 7.7202E-08 4.6549E-08 2.6543E-09 2.0484E-09 - 1.4125E+03 5.2271E-08 3.1179E-08 1.7002E-09 1.3173E-09 - 1.5849E+03 3.5231E-08 2.0772E-08 1.1290E-09 8.5078E-10 - 1.7783E+03 2.3622E-08 1.3931E-08 7.5190E-10 5.7287E-10 - 1.9953E+03 1.6003E-08 9.4168E-09 5.1921E-10 3.8006E-10 - 2.2387E+03 1.0689E-08 6.3238E-09 3.4839E-10 2.4428E-10 - 2.5119E+03 7.1559E-09 4.1351E-09 2.2739E-10 1.5140E-10 - 2.8184E+03 4.7573E-09 2.7366E-09 1.5392E-10 9.9957E-11 - 3.1623E+03 3.2899E-09 1.9117E-09 1.0040E-10 7.0997E-11 - 3.5481E+03 2.1357E-09 1.2309E-09 6.3550E-11 4.9638E-11 - 3.9811E+03 1.4182E-09 8.1625E-10 3.9587E-11 3.0888E-11 - 4.4668E+03 9.4285E-10 5.3700E-10 2.6813E-11 2.0014E-11 - 5.0119E+03 6.2416E-10 3.5311E-10 1.7236E-11 1.2277E-11 - 5.6234E+03 4.0875E-10 2.3209E-10 1.2103E-11 8.1035E-12 - 6.3096E+03 2.7135E-10 1.5182E-10 7.7562E-12 5.2327E-12 - 7.0795E+03 1.7841E-10 1.0028E-10 5.2419E-12 3.6499E-12 - 7.9433E+03 1.1655E-10 6.6282E-11 3.1657E-12 2.6613E-12 - 8.9125E+03 7.6957E-11 4.2550E-11 2.0563E-12 2.0021E-12 - 1.0000E+04 5.0725E-11 2.7764E-11 1.5555E-12 1.0992E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.8091E+03 3.8204E+03 1.7892E+03 1.9110E+03 - 1.1220E-01 3.4681E+03 3.4883E+03 1.6253E+03 1.7193E+03 - 1.2589E-01 3.1491E+03 3.1489E+03 1.4653E+03 1.5299E+03 - 1.4125E-01 2.8277E+03 2.8094E+03 1.3117E+03 1.3524E+03 - 1.5849E-01 2.5116E+03 2.4979E+03 1.1626E+03 1.1835E+03 - 1.7783E-01 2.2218E+03 2.1970E+03 1.0190E+03 1.0273E+03 - 1.9953E-01 1.9324E+03 1.9092E+03 8.8608E+02 8.9261E+02 - 2.2387E-01 1.6614E+03 1.6409E+03 7.6927E+02 7.6539E+02 - 2.5119E-01 1.4128E+03 1.3944E+03 6.5054E+02 6.4680E+02 - 2.8184E-01 1.1897E+03 1.1757E+03 5.4281E+02 5.3996E+02 - 3.1623E-01 9.9936E+02 9.8133E+02 4.6072E+02 4.4645E+02 - 3.5481E-01 8.3400E+02 8.1302E+02 3.8114E+02 3.6487E+02 - 3.9811E-01 6.8731E+02 6.7105E+02 3.1318E+02 2.9824E+02 - 4.4668E-01 5.5991E+02 5.4859E+02 2.5795E+02 2.4300E+02 - 5.0119E-01 4.5586E+02 4.4136E+02 2.0739E+02 1.9359E+02 - 5.6234E-01 3.6940E+02 3.5181E+02 1.6349E+02 1.5431E+02 - 6.3096E-01 2.9567E+02 2.8201E+02 1.2930E+02 1.2054E+02 - 7.0795E-01 2.3366E+02 2.2541E+02 1.0301E+02 9.3031E+01 - 7.9433E-01 1.8419E+02 1.7652E+02 8.0846E+01 7.2818E+01 - 8.9125E-01 1.4561E+02 1.3784E+02 6.2753E+01 5.6527E+01 - 1.0000E+00 1.1328E+02 1.0607E+02 4.8371E+01 4.2349E+01 - 1.1220E+00 8.8068E+01 8.1745E+01 3.6958E+01 3.1928E+01 - 1.2589E+00 6.8496E+01 6.2959E+01 2.8204E+01 2.4168E+01 - 1.4125E+00 5.2524E+01 4.7768E+01 2.1148E+01 1.7911E+01 - 1.5849E+00 3.9863E+01 3.5865E+01 1.5729E+01 1.2988E+01 - 1.7783E+00 3.0090E+01 2.6899E+01 1.1577E+01 9.4894E+00 - 1.9953E+00 2.2644E+01 2.0133E+01 8.4747E+00 6.8403E+00 - 2.2387E+00 1.6935E+01 1.4955E+01 6.1416E+00 4.8781E+00 - 2.5119E+00 1.2542E+01 1.0935E+01 4.3943E+00 3.4915E+00 - 2.8184E+00 9.2770E+00 7.8855E+00 3.1149E+00 2.4826E+00 - 3.1623E+00 6.8676E+00 5.8005E+00 2.2451E+00 1.7433E+00 - 3.5481E+00 5.0479E+00 4.2093E+00 1.5876E+00 1.2239E+00 - 3.9811E+00 3.6715E+00 3.0423E+00 1.1094E+00 8.4573E-01 - 4.4668E+00 2.6631E+00 2.1829E+00 7.6684E-01 5.8441E-01 - 5.0119E+00 1.9323E+00 1.5598E+00 5.2186E-01 4.0075E-01 - 5.6234E+00 1.3937E+00 1.1187E+00 3.5513E-01 2.7338E-01 - 6.3096E+00 1.0048E+00 8.0139E-01 2.4594E-01 1.8812E-01 - 7.0795E+00 7.1634E-01 5.6602E-01 1.6880E-01 1.2377E-01 - 7.9433E+00 5.1374E-01 4.0018E-01 1.1253E-01 8.1913E-02 - 8.9125E+00 3.6867E-01 2.8575E-01 7.4066E-02 5.7107E-02 - 1.0000E+01 2.6365E-01 2.0140E-01 5.0099E-02 3.8219E-02 - 1.1220E+01 1.8762E-01 1.4272E-01 3.3549E-02 2.5452E-02 - 1.2589E+01 1.3362E-01 1.0101E-01 2.2206E-02 1.6897E-02 - 1.4125E+01 9.5752E-02 7.1429E-02 1.4691E-02 1.1312E-02 - 1.5849E+01 6.7934E-02 5.1124E-02 9.8947E-03 7.6871E-03 - 1.7783E+01 4.8069E-02 3.6072E-02 6.5792E-03 5.1263E-03 - 1.9953E+01 3.4472E-02 2.5268E-02 4.2154E-03 3.2912E-03 - 2.2387E+01 2.4350E-02 1.7936E-02 2.8611E-03 2.2141E-03 - 2.5119E+01 1.7099E-02 1.2672E-02 1.9770E-03 1.4830E-03 - 2.8184E+01 1.2145E-02 8.9803E-03 1.2711E-03 1.0122E-03 - 3.1623E+01 8.6531E-03 6.3043E-03 8.5337E-04 6.7688E-04 - 3.5481E+01 6.1278E-03 4.4416E-03 5.6933E-04 4.5028E-04 - 3.9811E+01 4.3153E-03 3.0961E-03 3.8112E-04 3.0293E-04 - 4.4668E+01 3.0410E-03 2.1744E-03 2.5669E-04 2.0489E-04 - 5.0119E+01 2.1415E-03 1.5284E-03 1.7312E-04 1.3668E-04 - 5.6234E+01 1.5028E-03 1.0719E-03 1.1481E-04 9.0894E-05 - 6.3096E+01 1.0631E-03 7.5307E-04 7.7000E-05 6.1498E-05 - 7.0795E+01 7.5101E-04 5.2632E-04 5.1403E-05 4.2338E-05 - 7.9433E+01 5.2346E-04 3.6577E-04 3.4166E-05 2.8527E-05 - 8.9125E+01 3.6772E-04 2.5272E-04 2.2386E-05 1.9272E-05 - 1.0000E+02 2.5817E-04 1.7752E-04 1.5510E-05 1.2606E-05 - 1.1220E+02 1.8076E-04 1.2349E-04 1.0518E-05 8.6774E-06 - 1.2589E+02 1.2630E-04 8.5829E-05 7.0828E-06 5.8886E-06 - 1.4125E+02 8.8364E-05 5.9584E-05 4.8034E-06 3.9303E-06 - 1.5849E+02 6.1663E-05 4.1329E-05 3.2118E-06 2.6545E-06 - 1.7783E+02 4.2827E-05 2.8804E-05 2.1778E-06 1.7584E-06 - 1.9953E+02 2.9849E-05 1.9957E-05 1.4784E-06 1.1661E-06 - 2.2387E+02 2.0791E-05 1.3747E-05 1.0012E-06 8.0649E-07 - 2.5119E+02 1.4427E-05 9.4611E-06 6.9228E-07 5.4664E-07 - 2.8184E+02 9.9680E-06 6.4525E-06 4.7595E-07 3.7838E-07 - 3.1623E+02 7.0625E-06 4.5268E-06 3.1219E-07 2.5025E-07 - 3.5481E+02 4.8983E-06 3.1266E-06 2.0982E-07 1.7089E-07 - 3.9811E+02 3.3955E-06 2.1624E-06 1.4359E-07 1.1158E-07 - 4.4668E+02 2.3276E-06 1.4866E-06 9.6969E-08 7.3655E-08 - 5.0119E+02 1.6077E-06 1.0201E-06 6.4501E-08 5.0786E-08 - 5.6234E+02 1.1236E-06 7.0142E-07 4.4657E-08 3.3911E-08 - 6.3096E+02 7.7064E-07 4.7867E-07 3.0106E-08 2.2601E-08 - 7.0795E+02 5.2646E-07 3.2653E-07 1.9753E-08 1.4926E-08 - 7.9433E+02 3.6058E-07 2.2200E-07 1.3365E-08 1.0085E-08 - 8.9125E+02 2.4783E-07 1.5183E-07 8.6233E-09 6.7247E-09 - 1.0000E+03 1.6948E-07 1.0308E-07 5.7695E-09 4.4814E-09 - 1.1220E+03 1.1487E-07 6.8925E-08 3.8785E-09 3.0809E-09 - 1.2589E+03 7.8180E-08 4.6678E-08 2.5638E-09 2.0370E-09 - 1.4125E+03 5.2888E-08 3.1398E-08 1.7636E-09 1.3267E-09 - 1.5849E+03 3.5699E-08 2.0894E-08 1.1503E-09 8.6915E-10 - 1.7783E+03 2.3619E-08 1.4051E-08 7.4048E-10 6.1970E-10 - 1.9953E+03 1.6035E-08 9.4826E-09 4.9210E-10 3.8602E-10 - 2.2387E+03 1.0802E-08 6.2850E-09 3.1693E-10 2.3690E-10 - 2.5119E+03 7.2092E-09 4.2269E-09 2.1766E-10 1.5562E-10 - 2.8184E+03 4.7052E-09 2.8399E-09 1.4377E-10 1.0777E-10 - 3.1623E+03 3.2639E-09 1.8817E-09 9.5021E-11 7.3728E-11 - 3.5481E+03 2.1154E-09 1.2019E-09 6.6438E-11 4.7426E-11 - 3.9811E+03 1.4093E-09 8.0870E-10 4.3136E-11 3.1925E-11 - 4.4668E+03 9.2805E-10 5.3386E-10 2.6397E-11 2.1838E-11 - 5.0119E+03 6.1997E-10 3.4396E-10 1.7466E-11 1.2634E-11 - 5.6234E+03 4.0842E-10 2.2718E-10 1.2101E-11 7.8420E-12 - 6.3096E+03 2.6989E-10 1.5050E-10 7.8403E-12 5.8103E-12 - 7.0795E+03 1.7882E-10 9.9324E-11 5.0703E-12 3.9668E-12 - 7.9433E+03 1.1759E-10 6.6455E-11 3.3906E-12 2.3770E-12 - 8.9125E+03 7.6937E-11 4.2690E-11 2.1796E-12 1.4630E-12 - 1.0000E+04 5.1070E-11 2.6758E-11 1.4939E-12 9.7221E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.6481E+03 4.6156E+03 2.1846E+03 2.2896E+03 - 1.1220E-01 4.2293E+03 4.1930E+03 1.9716E+03 2.0517E+03 - 1.2589E-01 3.8180E+03 3.7749E+03 1.7730E+03 1.8328E+03 - 1.4125E-01 3.4104E+03 3.3541E+03 1.5790E+03 1.6200E+03 - 1.5849E-01 3.0034E+03 2.9685E+03 1.3909E+03 1.4163E+03 - 1.7783E-01 2.6263E+03 2.5915E+03 1.2127E+03 1.2195E+03 - 1.9953E-01 2.2826E+03 2.2454E+03 1.0481E+03 1.0443E+03 - 2.2387E-01 1.9622E+03 1.9253E+03 8.9758E+02 8.8879E+02 - 2.5119E-01 1.6660E+03 1.6238E+03 7.6139E+02 7.4156E+02 - 2.8184E-01 1.3925E+03 1.3627E+03 6.4487E+02 6.1697E+02 - 3.1623E-01 1.1631E+03 1.1315E+03 5.4059E+02 5.0768E+02 - 3.5481E-01 9.6479E+02 9.3234E+02 4.4258E+02 4.1653E+02 - 3.9811E-01 7.8940E+02 7.6706E+02 3.6177E+02 3.4200E+02 - 4.4668E-01 6.3766E+02 6.1943E+02 2.9349E+02 2.7550E+02 - 5.0119E-01 5.1181E+02 4.9700E+02 2.3453E+02 2.1769E+02 - 5.6234E-01 4.1110E+02 3.9726E+02 1.8666E+02 1.7027E+02 - 6.3096E-01 3.2818E+02 3.1071E+02 1.4699E+02 1.3185E+02 - 7.0795E-01 2.5765E+02 2.4232E+02 1.1498E+02 1.0199E+02 - 7.9433E-01 1.9976E+02 1.8979E+02 8.9375E+01 7.8745E+01 - 8.9125E-01 1.5531E+02 1.4772E+02 6.8117E+01 5.9033E+01 - 1.0000E+00 1.2097E+02 1.1319E+02 5.2637E+01 4.4578E+01 - 1.1220E+00 9.3311E+01 8.6229E+01 3.9896E+01 3.3581E+01 - 1.2589E+00 7.1322E+01 6.5403E+01 2.9991E+01 2.5097E+01 - 1.4125E+00 5.4206E+01 4.9472E+01 2.2404E+01 1.8459E+01 - 1.5849E+00 4.1189E+01 3.7073E+01 1.6601E+01 1.3562E+01 - 1.7783E+00 3.1208E+01 2.7577E+01 1.2111E+01 9.7872E+00 - 1.9953E+00 2.3285E+01 2.0437E+01 8.7787E+00 6.9462E+00 - 2.2387E+00 1.7354E+01 1.5065E+01 6.2880E+00 5.0384E+00 - 2.5119E+00 1.2861E+01 1.0902E+01 4.5099E+00 3.6156E+00 - 2.8184E+00 9.4138E+00 8.0035E+00 3.2632E+00 2.5439E+00 - 3.1623E+00 6.9185E+00 5.8650E+00 2.3021E+00 1.7733E+00 - 3.5481E+00 5.0445E+00 4.2385E+00 1.6063E+00 1.2308E+00 - 3.9811E+00 3.6744E+00 3.0422E+00 1.1069E+00 8.5330E-01 - 4.4668E+00 2.6680E+00 2.1750E+00 7.6588E-01 5.8547E-01 - 5.0119E+00 1.9348E+00 1.5513E+00 5.3146E-01 3.9965E-01 - 5.6234E+00 1.3966E+00 1.1075E+00 3.6496E-01 2.7168E-01 - 6.3096E+00 9.9686E-01 7.8882E-01 2.4455E-01 1.8726E-01 - 7.0795E+00 7.1535E-01 5.6171E-01 1.6510E-01 1.2607E-01 - 7.9433E+00 5.1501E-01 4.0182E-01 1.1131E-01 8.3035E-02 - 8.9125E+00 3.6562E-01 2.8652E-01 7.2483E-02 5.5959E-02 - 1.0000E+01 2.6265E-01 2.0232E-01 4.9637E-02 3.7721E-02 - 1.1220E+01 1.8764E-01 1.4324E-01 3.3643E-02 2.5062E-02 - 1.2589E+01 1.3395E-01 1.0112E-01 2.2598E-02 1.7176E-02 - 1.4125E+01 9.5411E-02 7.1490E-02 1.5220E-02 1.1635E-02 - 1.5849E+01 6.7510E-02 5.0555E-02 1.0017E-02 7.4512E-03 - 1.7783E+01 4.8231E-02 3.5963E-02 6.4084E-03 4.9614E-03 - 1.9953E+01 3.4420E-02 2.5619E-02 4.2965E-03 3.4452E-03 - 2.2387E+01 2.4574E-02 1.7912E-02 2.9473E-03 2.2163E-03 - 2.5119E+01 1.7298E-02 1.2627E-02 1.9340E-03 1.4996E-03 - 2.8184E+01 1.2184E-02 8.9741E-03 1.2807E-03 1.0118E-03 - 3.1623E+01 8.6357E-03 6.3158E-03 8.6042E-04 6.6486E-04 - 3.5481E+01 6.1133E-03 4.4346E-03 5.6873E-04 4.4515E-04 - 3.9811E+01 4.3175E-03 3.1035E-03 3.7741E-04 3.0155E-04 - 4.4668E+01 3.0457E-03 2.1844E-03 2.5539E-04 2.0533E-04 - 5.0119E+01 2.1517E-03 1.5330E-03 1.6967E-04 1.3947E-04 - 5.6234E+01 1.5125E-03 1.0719E-03 1.1302E-04 9.2462E-05 - 6.3096E+01 1.0650E-03 7.5078E-04 7.5925E-05 6.0660E-05 - 7.0795E+01 7.5284E-04 5.2291E-04 5.1129E-05 4.1148E-05 - 7.9433E+01 5.3022E-04 3.6583E-04 3.4584E-05 2.8192E-05 - 8.9125E+01 3.7193E-04 2.5519E-04 2.3820E-05 1.8873E-05 - 1.0000E+02 2.5807E-04 1.7822E-04 1.5714E-05 1.2682E-05 - 1.1220E+02 1.8024E-04 1.2336E-04 1.0481E-05 8.6794E-06 - 1.2589E+02 1.2625E-04 8.5443E-05 7.0213E-06 5.8102E-06 - 1.4125E+02 8.8364E-05 5.9471E-05 4.6457E-06 3.8717E-06 - 1.5849E+02 6.1916E-05 4.1418E-05 3.1569E-06 2.6257E-06 - 1.7783E+02 4.3235E-05 2.8752E-05 2.1962E-06 1.7800E-06 - 1.9953E+02 3.0093E-05 1.9924E-05 1.4816E-06 1.1897E-06 - 2.2387E+02 2.0816E-05 1.3706E-05 9.9601E-07 8.2389E-07 - 2.5119E+02 1.4436E-05 9.3966E-06 6.8784E-07 5.4950E-07 - 2.8184E+02 1.0092E-05 6.4195E-06 4.7684E-07 3.6397E-07 - 3.1623E+02 7.0784E-06 4.5306E-06 3.1316E-07 2.4615E-07 - 3.5481E+02 4.8686E-06 3.1274E-06 2.1333E-07 1.6689E-07 - 3.9811E+02 3.3721E-06 2.1573E-06 1.4492E-07 1.1342E-07 - 4.4668E+02 2.3430E-06 1.4770E-06 9.8245E-08 7.5798E-08 - 5.0119E+02 1.6185E-06 1.0110E-06 6.6266E-08 5.2091E-08 - 5.6234E+02 1.1214E-06 6.9922E-07 4.4683E-08 3.4250E-08 - 6.3096E+02 7.6937E-07 4.7574E-07 3.0353E-08 2.2832E-08 - 7.0795E+02 5.2680E-07 3.2261E-07 2.0282E-08 1.5265E-08 - 7.9433E+02 3.5905E-07 2.1870E-07 1.3498E-08 1.0221E-08 - 8.9125E+02 2.4772E-07 1.4947E-07 8.9864E-09 6.7404E-09 - 1.0000E+03 1.6986E-07 1.0208E-07 6.0478E-09 4.5157E-09 - 1.1220E+03 1.1371E-07 6.8479E-08 4.0510E-09 3.0616E-09 - 1.2589E+03 7.7488E-08 4.6458E-08 2.5927E-09 1.9861E-09 - 1.4125E+03 5.2238E-08 3.1068E-08 1.7473E-09 1.2642E-09 - 1.5849E+03 3.5647E-08 2.0773E-08 1.1100E-09 8.5373E-10 - 1.7783E+03 2.4062E-08 1.3960E-08 7.4169E-10 6.1545E-10 - 1.9953E+03 1.6051E-08 9.2779E-09 4.9715E-10 3.9441E-10 - 2.2387E+03 1.0711E-08 6.2358E-09 3.3998E-10 2.4740E-10 - 2.5119E+03 7.2134E-09 4.2065E-09 2.2295E-10 1.5615E-10 - 2.8184E+03 4.8404E-09 2.7703E-09 1.4170E-10 1.0735E-10 - 3.1623E+03 3.3013E-09 1.9241E-09 9.9635E-11 6.7685E-11 - 3.5481E+03 2.1120E-09 1.2448E-09 7.1152E-11 4.5295E-11 - 3.9811E+03 1.4144E-09 8.0978E-10 4.5522E-11 3.1776E-11 - 4.4668E+03 9.5316E-10 5.3125E-10 2.9120E-11 2.0094E-11 - 5.0119E+03 6.2902E-10 3.5214E-10 1.8488E-11 1.3252E-11 - 5.6234E+03 4.1271E-10 2.2838E-10 1.1425E-11 9.5654E-12 - 6.3096E+03 2.7285E-10 1.5159E-10 7.4201E-12 6.0068E-12 - 7.0795E+03 1.7982E-10 9.8848E-11 5.0907E-12 3.8086E-12 - 7.9433E+03 1.1679E-10 6.5271E-11 3.3719E-12 2.4093E-12 - 8.9125E+03 7.5796E-11 4.3055E-11 1.9307E-12 1.4417E-12 - 1.0000E+04 5.0462E-11 2.7367E-11 1.3489E-12 1.0754E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.8742E+03 6.9154E+03 3.3005E+03 3.3160E+03 - 1.1220E-01 6.2108E+03 6.2513E+03 2.9737E+03 2.9946E+03 - 1.2589E-01 5.5626E+03 5.5895E+03 2.6632E+03 2.6491E+03 - 1.4125E-01 4.9617E+03 4.9594E+03 2.3646E+03 2.3031E+03 - 1.5849E-01 4.3874E+03 4.3713E+03 2.0753E+03 2.0050E+03 - 1.7783E-01 3.8184E+03 3.7993E+03 1.8132E+03 1.7251E+03 - 1.9953E-01 3.2796E+03 3.2617E+03 1.5566E+03 1.4607E+03 - 2.2387E-01 2.7947E+03 2.7595E+03 1.3195E+03 1.2387E+03 - 2.5119E-01 2.3476E+03 2.3088E+03 1.1097E+03 1.0347E+03 - 2.8184E-01 1.9461E+03 1.9136E+03 9.2800E+02 8.4693E+02 - 3.1623E-01 1.5966E+03 1.5759E+03 7.6565E+02 6.8677E+02 - 3.5481E-01 1.2993E+03 1.2778E+03 6.2217E+02 5.5506E+02 - 3.9811E-01 1.0472E+03 1.0255E+03 5.0216E+02 4.4255E+02 - 4.4668E-01 8.3812E+02 8.1894E+02 4.0298E+02 3.4919E+02 - 5.0119E-01 6.6476E+02 6.4293E+02 3.1861E+02 2.7415E+02 - 5.6234E-01 5.2095E+02 5.0159E+02 2.4849E+02 2.1316E+02 - 6.3096E-01 4.0452E+02 3.8991E+02 1.9113E+02 1.6390E+02 - 7.0795E-01 3.1329E+02 2.9937E+02 1.4746E+02 1.2342E+02 - 7.9433E-01 2.4211E+02 2.2832E+02 1.1289E+02 9.2169E+01 - 8.9125E-01 1.8430E+02 1.7360E+02 8.4751E+01 6.9767E+01 - 1.0000E+00 1.3864E+02 1.3059E+02 6.3563E+01 5.1863E+01 - 1.1220E+00 1.0460E+02 9.8075E+01 4.7104E+01 3.8214E+01 - 1.2589E+00 7.9433E+01 7.3075E+01 3.4688E+01 2.7866E+01 - 1.4125E+00 5.9702E+01 5.4375E+01 2.5443E+01 2.0188E+01 - 1.5849E+00 4.4492E+01 4.0322E+01 1.8577E+01 1.4514E+01 - 1.7783E+00 3.3258E+01 2.9578E+01 1.3487E+01 1.0430E+01 - 1.9953E+00 2.4749E+01 2.1582E+01 9.7229E+00 7.5257E+00 - 2.2387E+00 1.8031E+01 1.5748E+01 6.8688E+00 5.3332E+00 - 2.5119E+00 1.3190E+01 1.1479E+01 4.8110E+00 3.7521E+00 - 2.8184E+00 9.7023E+00 8.2806E+00 3.4415E+00 2.6173E+00 - 3.1623E+00 7.0334E+00 5.9310E+00 2.3659E+00 1.8115E+00 - 3.5481E+00 5.1338E+00 4.2657E+00 1.6345E+00 1.2569E+00 - 3.9811E+00 3.7282E+00 3.0499E+00 1.1280E+00 8.6492E-01 - 4.4668E+00 2.6827E+00 2.1841E+00 7.6922E-01 5.8954E-01 - 5.0119E+00 1.9334E+00 1.5641E+00 5.2522E-01 4.0342E-01 - 5.6234E+00 1.3955E+00 1.1132E+00 3.5713E-01 2.7392E-01 - 6.3096E+00 1.0075E+00 7.9460E-01 2.4534E-01 1.8748E-01 - 7.0795E+00 7.2793E-01 5.7254E-01 1.6757E-01 1.2755E-01 - 7.9433E+00 5.1415E-01 4.0450E-01 1.1119E-01 8.4076E-02 - 8.9125E+00 3.6162E-01 2.8689E-01 7.1857E-02 5.6241E-02 - 1.0000E+01 2.6467E-01 2.0257E-01 5.0045E-02 3.8110E-02 - 1.1220E+01 1.8889E-01 1.4301E-01 3.3650E-02 2.5484E-02 - 1.2589E+01 1.3405E-01 1.0119E-01 2.2290E-02 1.6668E-02 - 1.4125E+01 9.5214E-02 7.1357E-02 1.4633E-02 1.1194E-02 - 1.5849E+01 6.7958E-02 5.0305E-02 9.5061E-03 7.7473E-03 - 1.7783E+01 4.7985E-02 3.5788E-02 6.4405E-03 5.1602E-03 - 1.9953E+01 3.3899E-02 2.5631E-02 4.3176E-03 3.3386E-03 - 2.2387E+01 2.4136E-02 1.8065E-02 2.8819E-03 2.2306E-03 - 2.5119E+01 1.7136E-02 1.2527E-02 1.8672E-03 1.5118E-03 - 2.8184E+01 1.2293E-02 8.8436E-03 1.2592E-03 1.0439E-03 - 3.1623E+01 8.6534E-03 6.2940E-03 8.4959E-04 6.7232E-04 - 3.5481E+01 6.1089E-03 4.4094E-03 5.7096E-04 4.5023E-04 - 3.9811E+01 4.3100E-03 3.1018E-03 3.8585E-04 3.0491E-04 - 4.4668E+01 3.0455E-03 2.1883E-03 2.5316E-04 2.0281E-04 - 5.0119E+01 2.1401E-03 1.5329E-03 1.6719E-04 1.3423E-04 - 5.6234E+01 1.5082E-03 1.0777E-03 1.1346E-04 9.1264E-05 - 6.3096E+01 1.0672E-03 7.5245E-04 7.6278E-05 6.1695E-05 - 7.0795E+01 7.4749E-04 5.2263E-04 5.1553E-05 4.1353E-05 - 7.9433E+01 5.2279E-04 3.6531E-04 3.5346E-05 2.7876E-05 - 8.9125E+01 3.6600E-04 2.5631E-04 2.3607E-05 1.8707E-05 - 1.0000E+02 2.5787E-04 1.7807E-04 1.5864E-05 1.2720E-05 - 1.1220E+02 1.8068E-04 1.2347E-04 1.0579E-05 8.5198E-06 - 1.2589E+02 1.2631E-04 8.5541E-05 7.1428E-06 5.8241E-06 - 1.4125E+02 8.8252E-05 5.9296E-05 4.8436E-06 3.9869E-06 - 1.5849E+02 6.1735E-05 4.1187E-05 3.2308E-06 2.6681E-06 - 1.7783E+02 4.3203E-05 2.8644E-05 2.2184E-06 1.7137E-06 - 1.9953E+02 3.0113E-05 1.9844E-05 1.5281E-06 1.1578E-06 - 2.2387E+02 2.0995E-05 1.3630E-05 1.0296E-06 7.9403E-07 - 2.5119E+02 1.4631E-05 9.5235E-06 7.0941E-07 5.3231E-07 - 2.8184E+02 1.0080E-05 6.6401E-06 4.7331E-07 3.7224E-07 - 3.1623E+02 7.0430E-06 4.5434E-06 3.1052E-07 2.4627E-07 - 3.5481E+02 4.8630E-06 3.1294E-06 2.1038E-07 1.6313E-07 - 3.9811E+02 3.3809E-06 2.1455E-06 1.4429E-07 1.1265E-07 - 4.4668E+02 2.3502E-06 1.4715E-06 9.7868E-08 7.5714E-08 - 5.0119E+02 1.6235E-06 1.0124E-06 6.4604E-08 5.1598E-08 - 5.6234E+02 1.1220E-06 6.9386E-07 4.3747E-08 3.4213E-08 - 6.3096E+02 7.7079E-07 4.7042E-07 2.9522E-08 2.2663E-08 - 7.0795E+02 5.2902E-07 3.2446E-07 2.0015E-08 1.4973E-08 - 7.9433E+02 3.6127E-07 2.2182E-07 1.3053E-08 9.8007E-09 - 8.9125E+02 2.4590E-07 1.5047E-07 8.5912E-09 6.7924E-09 - 1.0000E+03 1.6980E-07 1.0267E-07 5.8461E-09 4.8230E-09 - 1.1220E+03 1.1365E-07 6.8838E-08 3.8707E-09 3.0582E-09 - 1.2589E+03 7.7251E-08 4.6384E-08 2.6204E-09 1.9674E-09 - 1.4125E+03 5.2778E-08 3.1555E-08 1.7826E-09 1.2979E-09 - 1.5849E+03 3.5638E-08 2.1044E-08 1.1854E-09 9.3983E-10 - 1.7783E+03 2.4161E-08 1.3996E-08 7.7248E-10 6.4268E-10 - 1.9953E+03 1.6099E-08 9.5200E-09 5.0162E-10 3.8101E-10 - 2.2387E+03 1.0757E-08 6.2491E-09 3.2689E-10 2.5486E-10 - 2.5119E+03 7.2796E-09 4.1063E-09 2.3075E-10 1.7412E-10 - 2.8184E+03 4.8869E-09 2.7589E-09 1.5104E-10 1.1102E-10 - 3.1623E+03 3.3458E-09 1.9122E-09 9.9473E-11 7.1347E-11 - 3.5481E+03 2.1437E-09 1.2277E-09 6.4427E-11 4.7877E-11 - 3.9811E+03 1.4044E-09 8.0814E-10 4.1074E-11 3.2490E-11 - 4.4668E+03 9.2726E-10 5.3828E-10 2.7287E-11 2.0495E-11 - 5.0119E+03 6.1725E-10 3.4957E-10 1.7562E-11 1.2567E-11 - 5.6234E+03 4.1750E-10 2.2887E-10 1.1015E-11 8.6349E-12 - 6.3096E+03 2.7000E-10 1.4921E-10 7.5031E-12 5.7082E-12 - 7.0795E+03 1.7748E-10 9.7792E-11 5.1422E-12 3.6366E-12 - 7.9433E+03 1.1801E-10 6.5769E-11 3.6479E-12 2.3292E-12 - 8.9125E+03 7.7341E-11 4.3809E-11 2.2718E-12 1.4900E-12 - 1.0000E+04 5.1255E-11 2.7685E-11 1.2841E-12 9.8050E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.7105E+03 6.7626E+03 3.2594E+03 3.2218E+03 - 1.1220E-01 6.1055E+03 6.0953E+03 2.9483E+03 2.9198E+03 - 1.2589E-01 5.4907E+03 5.4901E+03 2.6438E+03 2.6038E+03 - 1.4125E-01 4.8941E+03 4.9138E+03 2.3362E+03 2.2800E+03 - 1.5849E-01 4.3334E+03 4.3253E+03 2.0534E+03 1.9841E+03 - 1.7783E-01 3.7825E+03 3.7748E+03 1.7926E+03 1.7185E+03 - 1.9953E-01 3.2587E+03 3.2511E+03 1.5461E+03 1.4631E+03 - 2.2387E-01 2.7803E+03 2.7653E+03 1.3266E+03 1.2312E+03 - 2.5119E-01 2.3342E+03 2.3129E+03 1.1169E+03 1.0282E+03 - 2.8184E-01 1.9349E+03 1.9062E+03 9.3105E+02 8.4781E+02 - 3.1623E-01 1.5984E+03 1.5756E+03 7.6869E+02 6.8927E+02 - 3.5481E-01 1.3056E+03 1.2875E+03 6.2507E+02 5.5855E+02 - 3.9811E-01 1.0553E+03 1.0336E+03 5.0426E+02 4.4393E+02 - 4.4668E-01 8.4430E+02 8.2351E+02 4.0330E+02 3.5109E+02 - 5.0119E-01 6.6779E+02 6.4764E+02 3.2022E+02 2.7541E+02 - 5.6234E-01 5.2510E+02 5.0726E+02 2.5186E+02 2.1418E+02 - 6.3096E-01 4.0967E+02 3.9481E+02 1.9518E+02 1.6553E+02 - 7.0795E-01 3.1508E+02 3.0136E+02 1.5040E+02 1.2616E+02 - 7.9433E-01 2.4147E+02 2.3050E+02 1.1451E+02 9.4847E+01 - 8.9125E-01 1.8517E+02 1.7593E+02 8.6723E+01 7.0359E+01 - 1.0000E+00 1.4097E+02 1.3273E+02 6.4282E+01 5.2122E+01 - 1.1220E+00 1.0666E+02 9.9514E+01 4.7728E+01 3.8424E+01 - 1.2589E+00 8.0463E+01 7.4159E+01 3.5144E+01 2.8174E+01 - 1.4125E+00 6.0361E+01 5.4747E+01 2.5680E+01 2.0432E+01 - 1.5849E+00 4.4901E+01 4.0423E+01 1.8583E+01 1.4860E+01 - 1.7783E+00 3.3353E+01 2.9849E+01 1.3390E+01 1.0637E+01 - 1.9953E+00 2.4774E+01 2.1794E+01 9.6238E+00 7.5787E+00 - 2.2387E+00 1.8279E+01 1.5758E+01 6.7884E+00 5.3573E+00 - 2.5119E+00 1.3255E+01 1.1399E+01 4.8308E+00 3.7263E+00 - 2.8184E+00 9.5950E+00 8.2497E+00 3.4223E+00 2.5831E+00 - 3.1623E+00 7.0598E+00 5.9692E+00 2.3735E+00 1.8060E+00 - 3.5481E+00 5.1407E+00 4.2709E+00 1.6452E+00 1.2593E+00 - 3.9811E+00 3.7282E+00 3.0511E+00 1.1343E+00 8.6728E-01 - 4.4668E+00 2.7034E+00 2.1854E+00 7.8043E-01 5.9722E-01 - 5.0119E+00 1.9518E+00 1.5592E+00 5.3118E-01 4.1614E-01 - 5.6234E+00 1.4019E+00 1.1086E+00 3.5964E-01 2.7904E-01 - 6.3096E+00 1.0064E+00 7.9227E-01 2.4414E-01 1.8734E-01 - 7.0795E+00 7.1587E-01 5.6559E-01 1.6827E-01 1.2812E-01 - 7.9433E+00 5.1396E-01 4.0110E-01 1.1335E-01 8.4095E-02 - 8.9125E+00 3.7003E-01 2.8191E-01 7.5906E-02 5.6282E-02 - 1.0000E+01 2.6410E-01 2.0119E-01 5.0789E-02 3.7950E-02 - 1.1220E+01 1.8711E-01 1.4286E-01 3.3214E-02 2.5869E-02 - 1.2589E+01 1.3343E-01 1.0076E-01 2.2204E-02 1.7179E-02 - 1.4125E+01 9.4690E-02 7.1087E-02 1.5102E-02 1.1271E-02 - 1.5849E+01 6.7371E-02 5.0692E-02 9.9542E-03 7.5996E-03 - 1.7783E+01 4.7990E-02 3.5887E-02 6.4891E-03 5.0560E-03 - 1.9953E+01 3.4204E-02 2.5159E-02 4.2734E-03 3.2541E-03 - 2.2387E+01 2.4407E-02 1.7701E-02 2.9000E-03 2.1562E-03 - 2.5119E+01 1.7260E-02 1.2682E-02 1.9769E-03 1.4524E-03 - 2.8184E+01 1.2149E-02 8.8894E-03 1.2835E-03 1.0043E-03 - 3.1623E+01 8.6533E-03 6.2666E-03 8.4820E-04 6.6319E-04 - 3.5481E+01 6.1235E-03 4.4039E-03 5.6706E-04 4.4330E-04 - 3.9811E+01 4.3286E-03 3.0968E-03 3.8422E-04 3.0476E-04 - 4.4668E+01 3.0527E-03 2.1828E-03 2.5615E-04 2.0774E-04 - 5.0119E+01 2.1489E-03 1.5313E-03 1.7118E-04 1.3639E-04 - 5.6234E+01 1.5183E-03 1.0716E-03 1.1361E-04 9.1216E-05 - 6.3096E+01 1.0685E-03 7.4734E-04 7.5745E-05 6.2633E-05 - 7.0795E+01 7.5543E-04 5.2347E-04 5.0854E-05 4.2343E-05 - 7.9433E+01 5.2984E-04 3.6662E-04 3.4828E-05 2.8322E-05 - 8.9125E+01 3.6873E-04 2.5470E-04 2.3391E-05 1.9188E-05 - 1.0000E+02 2.5839E-04 1.7798E-04 1.5648E-05 1.2660E-05 - 1.1220E+02 1.8056E-04 1.2316E-04 1.0644E-05 8.4268E-06 - 1.2589E+02 1.2596E-04 8.5678E-05 7.1543E-06 5.6980E-06 - 1.4125E+02 8.8042E-05 5.9459E-05 4.8131E-06 3.8801E-06 - 1.5849E+02 6.1540E-05 4.1010E-05 3.2550E-06 2.6032E-06 - 1.7783E+02 4.3208E-05 2.8511E-05 2.1466E-06 1.7404E-06 - 1.9953E+02 3.0184E-05 1.9803E-05 1.4232E-06 1.2320E-06 - 2.2387E+02 2.0991E-05 1.3634E-05 9.8590E-07 8.5015E-07 - 2.5119E+02 1.4605E-05 9.5112E-06 6.9794E-07 5.6637E-07 - 2.8184E+02 1.0160E-05 6.6098E-06 4.7404E-07 3.7948E-07 - 3.1623E+02 7.0683E-06 4.5542E-06 3.1533E-07 2.5406E-07 - 3.5481E+02 4.8827E-06 3.1282E-06 2.1302E-07 1.7075E-07 - 3.9811E+02 3.3888E-06 2.1380E-06 1.4516E-07 1.1318E-07 - 4.4668E+02 2.3433E-06 1.4698E-06 1.0015E-07 7.7323E-08 - 5.0119E+02 1.6152E-06 1.0110E-06 6.5582E-08 5.1616E-08 - 5.6234E+02 1.1206E-06 6.9524E-07 4.3951E-08 3.4227E-08 - 6.3096E+02 7.6562E-07 4.7196E-07 2.9310E-08 2.3025E-08 - 7.0795E+02 5.2757E-07 3.2139E-07 1.9812E-08 1.5165E-08 - 7.9433E+02 3.6082E-07 2.1805E-07 1.3089E-08 1.0105E-08 - 8.9125E+02 2.4543E-07 1.4940E-07 8.5822E-09 6.9451E-09 - 1.0000E+03 1.6897E-07 1.0247E-07 6.1308E-09 4.6094E-09 - 1.1220E+03 1.1377E-07 6.8873E-08 4.1062E-09 3.1370E-09 - 1.2589E+03 7.7312E-08 4.6382E-08 2.7661E-09 2.0766E-09 - 1.4125E+03 5.2280E-08 3.0806E-08 1.8514E-09 1.2655E-09 - 1.5849E+03 3.5199E-08 2.0689E-08 1.1916E-09 7.7270E-10 - 1.7783E+03 2.3750E-08 1.3806E-08 7.5139E-10 5.2758E-10 - 1.9953E+03 1.6292E-08 9.4591E-09 5.0450E-10 3.7752E-10 - 2.2387E+03 1.0826E-08 6.2333E-09 3.2719E-10 2.5325E-10 - 2.5119E+03 7.2190E-09 4.1501E-09 2.1212E-10 1.6340E-10 - 2.8184E+03 4.7864E-09 2.7747E-09 1.4338E-10 9.8265E-11 - 3.1623E+03 3.2803E-09 1.8929E-09 9.2654E-11 7.2348E-11 - 3.5481E+03 2.1278E-09 1.2086E-09 6.1190E-11 4.8576E-11 - 3.9811E+03 1.4175E-09 8.0577E-10 4.1249E-11 3.1624E-11 - 4.4668E+03 9.3033E-10 5.4281E-10 2.8924E-11 2.2433E-11 - 5.0119E+03 6.1851E-10 3.5493E-10 1.7978E-11 1.3902E-11 - 5.6234E+03 4.1417E-10 2.3198E-10 1.1550E-11 8.7487E-12 - 6.3096E+03 2.7012E-10 1.5484E-10 7.5618E-12 5.8500E-12 - 7.0795E+03 1.7874E-10 1.0253E-10 5.0315E-12 3.6268E-12 - 7.9433E+03 1.1681E-10 6.7539E-11 3.4569E-12 2.2329E-12 - 8.9125E+03 7.7477E-11 4.3806E-11 2.1094E-12 1.5007E-12 - 1.0000E+04 5.1685E-11 2.8649E-11 1.4217E-12 1.0103E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.1349E+03 5.1893E+03 2.4734E+03 2.5055E+03 - 1.1220E-01 4.6741E+03 4.7313E+03 2.2408E+03 2.2602E+03 - 1.2589E-01 4.2423E+03 4.2633E+03 2.0078E+03 2.0279E+03 - 1.4125E-01 3.8133E+03 3.8152E+03 1.7981E+03 1.7884E+03 - 1.5849E-01 3.3890E+03 3.3764E+03 1.5940E+03 1.5635E+03 - 1.7783E-01 2.9787E+03 2.9526E+03 1.3960E+03 1.3621E+03 - 1.9953E-01 2.5886E+03 2.5630E+03 1.2089E+03 1.1744E+03 - 2.2387E-01 2.2161E+03 2.1950E+03 1.0409E+03 9.9527E+02 - 2.5119E-01 1.8772E+03 1.8595E+03 8.8542E+02 8.3459E+02 - 2.8184E-01 1.5756E+03 1.5541E+03 7.4203E+02 6.9148E+02 - 3.1623E-01 1.3064E+03 1.2844E+03 6.1998E+02 5.7166E+02 - 3.5481E-01 1.0730E+03 1.0583E+03 5.1173E+02 4.6852E+02 - 3.9811E-01 8.7873E+02 8.6490E+02 4.1593E+02 3.7669E+02 - 4.4668E-01 7.1509E+02 6.9576E+02 3.3507E+02 2.9819E+02 - 5.0119E-01 5.7049E+02 5.5531E+02 2.6707E+02 2.3747E+02 - 5.6234E-01 4.5423E+02 4.3937E+02 2.1116E+02 1.8741E+02 - 6.3096E-01 3.5920E+02 3.4551E+02 1.6739E+02 1.4597E+02 - 7.0795E-01 2.8145E+02 2.7156E+02 1.3006E+02 1.1304E+02 - 7.9433E-01 2.1984E+02 2.0960E+02 1.0060E+02 8.4830E+01 - 8.9125E-01 1.7012E+02 1.5907E+02 7.7343E+01 6.3509E+01 - 1.0000E+00 1.3024E+02 1.2212E+02 5.7531E+01 4.8463E+01 - 1.1220E+00 9.9929E+01 9.2841E+01 4.3598E+01 3.6243E+01 - 1.2589E+00 7.6011E+01 7.0159E+01 3.2431E+01 2.6693E+01 - 1.4125E+00 5.7643E+01 5.2580E+01 2.3850E+01 1.9531E+01 - 1.5849E+00 4.3369E+01 3.8927E+01 1.7584E+01 1.4126E+01 - 1.7783E+00 3.2375E+01 2.8880E+01 1.2874E+01 1.0252E+01 - 1.9953E+00 2.4119E+01 2.1206E+01 9.2043E+00 7.3418E+00 - 2.2387E+00 1.7810E+01 1.5418E+01 6.5849E+00 5.2276E+00 - 2.5119E+00 1.3190E+01 1.1291E+01 4.7466E+00 3.7255E+00 - 2.8184E+00 9.7579E+00 8.1904E+00 3.3500E+00 2.5901E+00 - 3.1623E+00 7.0831E+00 5.9431E+00 2.3447E+00 1.8167E+00 - 3.5481E+00 5.1329E+00 4.2620E+00 1.6434E+00 1.2485E+00 - 3.9811E+00 3.7309E+00 3.0672E+00 1.1326E+00 8.5317E-01 - 4.4668E+00 2.7080E+00 2.2189E+00 7.7630E-01 5.8574E-01 - 5.0119E+00 1.9548E+00 1.5874E+00 5.3518E-01 4.0281E-01 - 5.6234E+00 1.4083E+00 1.1241E+00 3.6431E-01 2.7806E-01 - 6.3096E+00 1.0147E+00 8.0234E-01 2.4513E-01 1.9017E-01 - 7.0795E+00 7.3180E-01 5.7558E-01 1.6777E-01 1.2858E-01 - 7.9433E+00 5.2024E-01 4.1076E-01 1.1390E-01 8.5828E-02 - 8.9125E+00 3.7238E-01 2.9056E-01 7.6813E-02 5.7082E-02 - 1.0000E+01 2.6296E-01 2.0129E-01 5.0587E-02 3.8142E-02 - 1.1220E+01 1.8786E-01 1.4235E-01 3.3682E-02 2.5529E-02 - 1.2589E+01 1.3445E-01 1.0074E-01 2.2331E-02 1.6707E-02 - 1.4125E+01 9.5748E-02 7.0943E-02 1.4911E-02 1.1223E-02 - 1.5849E+01 6.7695E-02 5.0391E-02 9.8171E-03 7.8108E-03 - 1.7783E+01 4.8013E-02 3.5601E-02 6.3544E-03 5.0129E-03 - 1.9953E+01 3.4451E-02 2.5219E-02 4.3055E-03 3.2838E-03 - 2.2387E+01 2.4483E-02 1.7953E-02 2.9009E-03 2.3354E-03 - 2.5119E+01 1.7231E-02 1.2631E-02 1.9598E-03 1.4852E-03 - 2.8184E+01 1.2174E-02 8.7848E-03 1.2783E-03 9.7758E-04 - 3.1623E+01 8.6798E-03 6.2778E-03 8.5608E-04 6.7374E-04 - 3.5481E+01 6.1232E-03 4.4291E-03 5.6844E-04 4.5251E-04 - 3.9811E+01 4.3123E-03 3.1140E-03 3.7947E-04 3.0316E-04 - 4.4668E+01 3.0373E-03 2.1775E-03 2.5465E-04 2.0068E-04 - 5.0119E+01 2.1501E-03 1.5178E-03 1.7188E-04 1.3429E-04 - 5.6234E+01 1.5172E-03 1.0660E-03 1.1538E-04 9.0958E-05 - 6.3096E+01 1.0649E-03 7.5035E-04 7.6417E-05 6.2127E-05 - 7.0795E+01 7.5112E-04 5.2182E-04 5.1150E-05 4.2576E-05 - 7.9433E+01 5.2815E-04 3.6499E-04 3.4729E-05 2.8147E-05 - 8.9125E+01 3.6725E-04 2.5470E-04 2.2919E-05 1.8763E-05 - 1.0000E+02 2.5800E-04 1.7788E-04 1.5624E-05 1.2693E-05 - 1.1220E+02 1.8043E-04 1.2419E-04 1.0557E-05 8.6188E-06 - 1.2589E+02 1.2589E-04 8.6480E-05 7.0978E-06 5.8557E-06 - 1.4125E+02 8.8314E-05 5.9841E-05 4.7530E-06 3.9157E-06 - 1.5849E+02 6.1898E-05 4.1197E-05 3.2154E-06 2.6537E-06 - 1.7783E+02 4.3555E-05 2.8698E-05 2.2173E-06 1.7431E-06 - 1.9953E+02 3.0415E-05 1.9955E-05 1.4920E-06 1.1725E-06 - 2.2387E+02 2.1043E-05 1.3659E-05 9.7808E-07 8.2480E-07 - 2.5119E+02 1.4589E-05 9.4164E-06 6.4800E-07 5.4240E-07 - 2.8184E+02 1.0170E-05 6.5224E-06 4.4401E-07 3.4871E-07 - 3.1623E+02 7.0730E-06 4.5496E-06 3.0838E-07 2.4909E-07 - 3.5481E+02 4.8744E-06 3.1194E-06 2.0724E-07 1.6664E-07 - 3.9811E+02 3.3811E-06 2.1490E-06 1.3968E-07 1.1035E-07 - 4.4668E+02 2.3450E-06 1.4762E-06 9.6836E-08 7.5511E-08 - 5.0119E+02 1.6233E-06 1.0113E-06 6.6295E-08 5.0873E-08 - 5.6234E+02 1.1214E-06 6.9790E-07 4.3848E-08 3.3711E-08 - 6.3096E+02 7.6513E-07 4.6954E-07 2.9993E-08 2.2220E-08 - 7.0795E+02 5.2673E-07 3.1933E-07 1.9266E-08 1.5250E-08 - 7.9433E+02 3.6000E-07 2.2063E-07 1.3017E-08 1.0134E-08 - 8.9125E+02 2.4616E-07 1.5065E-07 9.2700E-09 6.8131E-09 - 1.0000E+03 1.7042E-07 1.0312E-07 6.0754E-09 4.3902E-09 - 1.1220E+03 1.1433E-07 6.7969E-08 4.1539E-09 2.8803E-09 - 1.2589E+03 7.7152E-08 4.5951E-08 2.6363E-09 1.9351E-09 - 1.4125E+03 5.2428E-08 3.1437E-08 1.8038E-09 1.2950E-09 - 1.5849E+03 3.5478E-08 2.1102E-08 1.2792E-09 8.3813E-10 - 1.7783E+03 2.3845E-08 1.4047E-08 7.6263E-10 5.6627E-10 - 1.9953E+03 1.6056E-08 9.4767E-09 5.2033E-10 3.7751E-10 - 2.2387E+03 1.0727E-08 6.3688E-09 3.5318E-10 2.3921E-10 - 2.5119E+03 7.1498E-09 4.1731E-09 2.2875E-10 1.7003E-10 - 2.8184E+03 4.8268E-09 2.7822E-09 1.4409E-10 1.2024E-10 - 3.1623E+03 3.3059E-09 1.9075E-09 1.0064E-10 7.0875E-11 - 3.5481E+03 2.1335E-09 1.2258E-09 6.5545E-11 4.6237E-11 - 3.9811E+03 1.4245E-09 8.1010E-10 4.2436E-11 3.1485E-11 - 4.4668E+03 9.3623E-10 5.2913E-10 2.7301E-11 2.0380E-11 - 5.0119E+03 6.1562E-10 3.4513E-10 1.8687E-11 1.4073E-11 - 5.6234E+03 4.0518E-10 2.3005E-10 1.1424E-11 8.0292E-12 - 6.3096E+03 2.6953E-10 1.5001E-10 7.5755E-12 5.4581E-12 - 7.0795E+03 1.7718E-10 1.0121E-10 5.5215E-12 3.5238E-12 - 7.9433E+03 1.1806E-10 6.6069E-11 3.5571E-12 2.3801E-12 - 8.9125E+03 7.8113E-11 4.2499E-11 1.9797E-12 1.5392E-12 - 1.0000E+04 5.0508E-11 2.7634E-11 1.2789E-12 9.6148E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2184E+03 4.2289E+03 2.0274E+03 2.0696E+03 - 1.1220E-01 3.8378E+03 3.8451E+03 1.8337E+03 1.8770E+03 - 1.2589E-01 3.4731E+03 3.4829E+03 1.6500E+03 1.6857E+03 - 1.4125E-01 3.1278E+03 3.1402E+03 1.4810E+03 1.4942E+03 - 1.5849E-01 2.7864E+03 2.7876E+03 1.3200E+03 1.2964E+03 - 1.7783E-01 2.4556E+03 2.4425E+03 1.1567E+03 1.1264E+03 - 1.9953E-01 2.1378E+03 2.1212E+03 9.9708E+02 9.7129E+02 - 2.2387E-01 1.8443E+03 1.8204E+03 8.5345E+02 8.2985E+02 - 2.5119E-01 1.5681E+03 1.5457E+03 7.2703E+02 7.0500E+02 - 2.8184E-01 1.3252E+03 1.3125E+03 6.1573E+02 5.8659E+02 - 3.1623E-01 1.1096E+03 1.0991E+03 5.1535E+02 4.8809E+02 - 3.5481E-01 9.1792E+02 8.9937E+02 4.2477E+02 4.0151E+02 - 3.9811E-01 7.5428E+02 7.3620E+02 3.4916E+02 3.2599E+02 - 4.4668E-01 6.1553E+02 6.0075E+02 2.8397E+02 2.6456E+02 - 5.0119E-01 4.9827E+02 4.8729E+02 2.2847E+02 2.1019E+02 - 5.6234E-01 3.9852E+02 3.9051E+02 1.8277E+02 1.6441E+02 - 6.3096E-01 3.1825E+02 3.0591E+02 1.4516E+02 1.2893E+02 - 7.0795E-01 2.5405E+02 2.4046E+02 1.1412E+02 1.0109E+02 - 7.9433E-01 1.9979E+02 1.8931E+02 8.8539E+01 7.8314E+01 - 8.9125E-01 1.5562E+02 1.4656E+02 6.8329E+01 5.9471E+01 - 1.0000E+00 1.2042E+02 1.1348E+02 5.2348E+01 4.4814E+01 - 1.1220E+00 9.3019E+01 8.6770E+01 3.9668E+01 3.3352E+01 - 1.2589E+00 7.1730E+01 6.6052E+01 2.9973E+01 2.5132E+01 - 1.4125E+00 5.4485E+01 4.9768E+01 2.2317E+01 1.8677E+01 - 1.5849E+00 4.1076E+01 3.7199E+01 1.6467E+01 1.3579E+01 - 1.7783E+00 3.1005E+01 2.7868E+01 1.2200E+01 9.8085E+00 - 1.9953E+00 2.3383E+01 2.0641E+01 8.9162E+00 7.0982E+00 - 2.2387E+00 1.7415E+01 1.5222E+01 6.4984E+00 5.0844E+00 - 2.5119E+00 1.2835E+01 1.1170E+01 4.5947E+00 3.6448E+00 - 2.8184E+00 9.4574E+00 8.0745E+00 3.2064E+00 2.5861E+00 - 3.1623E+00 6.9590E+00 5.8291E+00 2.2889E+00 1.7715E+00 - 3.5481E+00 5.0842E+00 4.2253E+00 1.6066E+00 1.2218E+00 - 3.9811E+00 3.7007E+00 3.0511E+00 1.1159E+00 8.5080E-01 - 4.4668E+00 2.6793E+00 2.1827E+00 7.6955E-01 5.8992E-01 - 5.0119E+00 1.9331E+00 1.5613E+00 5.2835E-01 3.9929E-01 - 5.6234E+00 1.3928E+00 1.1064E+00 3.6395E-01 2.7135E-01 - 6.3096E+00 9.9101E-01 7.9110E-01 2.4877E-01 1.8776E-01 - 7.0795E+00 7.1801E-01 5.6312E-01 1.6619E-01 1.2656E-01 - 7.9433E+00 5.1578E-01 3.9931E-01 1.1089E-01 8.2208E-02 - 8.9125E+00 3.6385E-01 2.8349E-01 7.4970E-02 5.4937E-02 - 1.0000E+01 2.6342E-01 2.0186E-01 4.9941E-02 3.8154E-02 - 1.1220E+01 1.8790E-01 1.4191E-01 3.3335E-02 2.5443E-02 - 1.2589E+01 1.3345E-01 1.0021E-01 2.2177E-02 1.6830E-02 - 1.4125E+01 9.4610E-02 7.1362E-02 1.4721E-02 1.1183E-02 - 1.5849E+01 6.6929E-02 5.0559E-02 9.7179E-03 7.6146E-03 - 1.7783E+01 4.7206E-02 3.5956E-02 6.5482E-03 5.0529E-03 - 1.9953E+01 3.3671E-02 2.5410E-02 4.4230E-03 3.2860E-03 - 2.2387E+01 2.4178E-02 1.7772E-02 2.8121E-03 2.1937E-03 - 2.5119E+01 1.7217E-02 1.2424E-02 1.8712E-03 1.4717E-03 - 2.8184E+01 1.2204E-02 8.6753E-03 1.2121E-03 1.0129E-03 - 3.1623E+01 8.6579E-03 6.2952E-03 8.5059E-04 6.7778E-04 - 3.5481E+01 6.1155E-03 4.4042E-03 5.7193E-04 4.5531E-04 - 3.9811E+01 4.3133E-03 3.1025E-03 3.8169E-04 3.0019E-04 - 4.4668E+01 3.0565E-03 2.1830E-03 2.5286E-04 2.0195E-04 - 5.0119E+01 2.1571E-03 1.5345E-03 1.7114E-04 1.3802E-04 - 5.6234E+01 1.5098E-03 1.0769E-03 1.1491E-04 9.2284E-05 - 6.3096E+01 1.0593E-03 7.5311E-04 7.7498E-05 6.1497E-05 - 7.0795E+01 7.4821E-04 5.2573E-04 5.1717E-05 4.1238E-05 - 7.9433E+01 5.2980E-04 3.6853E-04 3.4228E-05 2.8073E-05 - 8.9125E+01 3.7235E-04 2.5697E-04 2.2817E-05 1.8701E-05 - 1.0000E+02 2.5828E-04 1.7769E-04 1.5605E-05 1.2717E-05 - 1.1220E+02 1.8114E-04 1.2299E-04 1.0442E-05 8.4748E-06 - 1.2589E+02 1.2692E-04 8.5162E-05 7.0351E-06 5.7724E-06 - 1.4125E+02 8.8870E-05 5.9189E-05 4.7574E-06 3.9196E-06 - 1.5849E+02 6.2246E-05 4.1490E-05 3.2767E-06 2.6580E-06 - 1.7783E+02 4.3173E-05 2.8985E-05 2.2662E-06 1.7904E-06 - 1.9953E+02 3.0126E-05 1.9965E-05 1.5260E-06 1.1933E-06 - 2.2387E+02 2.0992E-05 1.3809E-05 1.0012E-06 8.1321E-07 - 2.5119E+02 1.4537E-05 9.4945E-06 6.8295E-07 5.5448E-07 - 2.8184E+02 1.0130E-05 6.5354E-06 4.6133E-07 3.4319E-07 - 3.1623E+02 7.0486E-06 4.5776E-06 3.0897E-07 2.5117E-07 - 3.5481E+02 4.8706E-06 3.1290E-06 2.1174E-07 1.6979E-07 - 3.9811E+02 3.3818E-06 2.1487E-06 1.4158E-07 1.1303E-07 - 4.4668E+02 2.3453E-06 1.4840E-06 9.4501E-08 7.6870E-08 - 5.0119E+02 1.6192E-06 1.0154E-06 6.3422E-08 5.2181E-08 - 5.6234E+02 1.1219E-06 6.9672E-07 4.3641E-08 3.4574E-08 - 6.3096E+02 7.6703E-07 4.7403E-07 2.8693E-08 2.3141E-08 - 7.0795E+02 5.2553E-07 3.2307E-07 1.9096E-08 1.5187E-08 - 7.9433E+02 3.6027E-07 2.1970E-07 1.3142E-08 9.9112E-09 - 8.9125E+02 2.4603E-07 1.4990E-07 8.7032E-09 6.6398E-09 - 1.0000E+03 1.6955E-07 1.0194E-07 5.8061E-09 4.4437E-09 - 1.1220E+03 1.1448E-07 6.8484E-08 3.9932E-09 2.9386E-09 - 1.2589E+03 7.7751E-08 4.6751E-08 2.7605E-09 1.9911E-09 - 1.4125E+03 5.2969E-08 3.1614E-08 1.8076E-09 1.2590E-09 - 1.5849E+03 3.5836E-08 2.1240E-08 1.1473E-09 8.4710E-10 - 1.7783E+03 2.3901E-08 1.4141E-08 7.3099E-10 5.8023E-10 - 1.9953E+03 1.6066E-08 9.4906E-09 4.7651E-10 3.8834E-10 - 2.2387E+03 1.0728E-08 6.2917E-09 3.1492E-10 2.6111E-10 - 2.5119E+03 7.0681E-09 4.1265E-09 2.2634E-10 1.7192E-10 - 2.8184E+03 4.6634E-09 2.8172E-09 1.5137E-10 1.0316E-10 - 3.1623E+03 3.3011E-09 1.9136E-09 9.8986E-11 6.9588E-11 - 3.5481E+03 2.1250E-09 1.2268E-09 6.5164E-11 4.5165E-11 - 3.9811E+03 1.4050E-09 8.0914E-10 4.2557E-11 3.0843E-11 - 4.4668E+03 9.4092E-10 5.3571E-10 2.7974E-11 1.9613E-11 - 5.0119E+03 6.2311E-10 3.5362E-10 1.8398E-11 1.1485E-11 - 5.6234E+03 4.1009E-10 2.3512E-10 1.2449E-11 8.3699E-12 - 6.3096E+03 2.6975E-10 1.5090E-10 7.7955E-12 5.7972E-12 - 7.0795E+03 1.7906E-10 9.7149E-11 5.1230E-12 3.6091E-12 - 7.9433E+03 1.1727E-10 6.4158E-11 3.3875E-12 2.2917E-12 - 8.9125E+03 7.6854E-11 4.2386E-11 2.0083E-12 1.6641E-12 - 1.0000E+04 5.0197E-11 2.7866E-11 1.2361E-12 1.1262E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.3125E+03 8.3777E+03 4.0815E+03 3.8881E+03 - 1.1220E-01 7.4926E+03 7.5712E+03 3.6790E+03 3.4766E+03 - 1.2589E-01 6.7126E+03 6.7841E+03 3.2815E+03 3.0684E+03 - 1.4125E-01 5.9610E+03 5.9956E+03 2.8823E+03 2.6816E+03 - 1.5849E-01 5.2378E+03 5.2511E+03 2.5075E+03 2.3235E+03 - 1.7783E-01 4.5438E+03 4.5478E+03 2.1771E+03 1.9892E+03 - 1.9953E-01 3.8739E+03 3.8671E+03 1.8644E+03 1.6789E+03 - 2.2387E-01 3.2580E+03 3.2359E+03 1.5672E+03 1.3993E+03 - 2.5119E-01 2.7011E+03 2.6793E+03 1.3095E+03 1.1516E+03 - 2.8184E-01 2.2113E+03 2.2012E+03 1.0833E+03 9.3925E+02 - 3.1623E-01 1.8036E+03 1.7837E+03 8.7885E+02 7.5503E+02 - 3.5481E-01 1.4522E+03 1.4305E+03 7.0294E+02 5.9780E+02 - 3.9811E-01 1.1549E+03 1.1364E+03 5.5962E+02 4.7312E+02 - 4.4668E-01 9.0910E+02 8.9050E+02 4.4165E+02 3.7184E+02 - 5.0119E-01 7.0989E+02 6.8985E+02 3.4414E+02 2.8508E+02 - 5.6234E-01 5.4976E+02 5.3040E+02 2.6444E+02 2.1765E+02 - 6.3096E-01 4.2282E+02 4.0784E+02 2.0194E+02 1.6677E+02 - 7.0795E-01 3.2367E+02 3.1163E+02 1.5326E+02 1.2527E+02 - 7.9433E-01 2.4756E+02 2.3477E+02 1.1496E+02 9.2597E+01 - 8.9125E-01 1.8741E+02 1.7629E+02 8.5109E+01 6.8335E+01 - 1.0000E+00 1.4096E+02 1.3128E+02 6.2950E+01 5.0051E+01 - 1.1220E+00 1.0590E+02 9.8356E+01 4.6417E+01 3.6667E+01 - 1.2589E+00 7.9552E+01 7.3196E+01 3.3890E+01 2.6632E+01 - 1.4125E+00 5.9667E+01 5.3743E+01 2.4532E+01 1.9307E+01 - 1.5849E+00 4.4394E+01 3.9310E+01 1.7659E+01 1.3902E+01 - 1.7783E+00 3.2854E+01 2.8787E+01 1.2537E+01 9.8821E+00 - 1.9953E+00 2.4307E+01 2.1035E+01 8.8988E+00 7.0346E+00 - 2.2387E+00 1.7696E+01 1.5295E+01 6.2500E+00 4.9119E+00 - 2.5119E+00 1.2943E+01 1.1089E+01 4.3983E+00 3.3884E+00 - 2.8184E+00 9.5780E+00 8.0231E+00 3.0793E+00 2.3815E+00 - 3.1623E+00 6.9205E+00 5.7162E+00 2.1627E+00 1.6523E+00 - 3.5481E+00 5.0034E+00 4.1002E+00 1.4883E+00 1.1523E+00 - 3.9811E+00 3.6165E+00 2.9362E+00 1.0167E+00 7.8694E-01 - 4.4668E+00 2.6125E+00 2.1136E+00 7.0343E-01 5.2659E-01 - 5.0119E+00 1.8855E+00 1.5118E+00 4.7655E-01 3.5506E-01 - 5.6234E+00 1.3571E+00 1.0689E+00 3.1744E-01 2.4280E-01 - 6.3096E+00 9.7237E-01 7.6546E-01 2.1403E-01 1.6337E-01 - 7.0795E+00 6.9714E-01 5.4723E-01 1.4627E-01 1.0969E-01 - 7.9433E+00 5.0328E-01 3.8621E-01 1.0054E-01 7.5263E-02 - 8.9125E+00 3.6447E-01 2.7485E-01 6.6827E-02 5.1086E-02 - 1.0000E+01 2.5677E-01 1.9463E-01 4.4235E-02 3.3773E-02 - 1.1220E+01 1.8310E-01 1.3785E-01 2.9557E-02 2.2551E-02 - 1.2589E+01 1.3111E-01 9.8055E-02 1.9711E-02 1.4920E-02 - 1.4125E+01 9.2441E-02 6.9887E-02 1.3163E-02 9.8043E-03 - 1.5849E+01 6.5377E-02 4.9246E-02 8.9531E-03 6.7061E-03 - 1.7783E+01 4.6879E-02 3.4538E-02 5.9635E-03 4.5471E-03 - 1.9953E+01 3.3494E-02 2.4139E-02 3.9173E-03 3.0158E-03 - 2.2387E+01 2.3808E-02 1.7047E-02 2.6169E-03 1.9837E-03 - 2.5119E+01 1.6910E-02 1.2058E-02 1.7204E-03 1.2986E-03 - 2.8184E+01 1.1951E-02 8.4602E-03 1.1059E-03 8.5170E-04 - 3.1623E+01 8.4192E-03 6.0333E-03 7.5946E-04 6.0257E-04 - 3.5481E+01 5.9350E-03 4.2371E-03 5.1293E-04 4.0369E-04 - 3.9811E+01 4.1821E-03 2.9875E-03 3.4411E-04 2.7092E-04 - 4.4668E+01 2.9532E-03 2.1012E-03 2.2643E-04 1.8134E-04 - 5.0119E+01 2.0778E-03 1.4656E-03 1.5169E-04 1.2361E-04 - 5.6234E+01 1.4581E-03 1.0236E-03 1.0356E-04 8.2602E-05 - 6.3096E+01 1.0279E-03 7.1623E-04 6.9847E-05 5.4165E-05 - 7.0795E+01 7.2684E-04 4.9996E-04 4.7598E-05 3.6924E-05 - 7.9433E+01 5.1022E-04 3.5063E-04 3.1522E-05 2.5508E-05 - 8.9125E+01 3.5507E-04 2.4666E-04 2.0804E-05 1.7715E-05 - 1.0000E+02 2.4963E-04 1.6977E-04 1.4329E-05 1.1702E-05 - 1.1220E+02 1.7458E-04 1.1772E-04 9.5518E-06 7.8399E-06 - 1.2589E+02 1.2213E-04 8.2069E-05 6.4846E-06 5.3767E-06 - 1.4125E+02 8.5136E-05 5.7100E-05 4.3892E-06 3.6721E-06 - 1.5849E+02 5.9070E-05 3.9496E-05 2.9056E-06 2.4666E-06 - 1.7783E+02 4.1382E-05 2.7386E-05 2.0174E-06 1.6616E-06 - 1.9953E+02 2.8960E-05 1.8833E-05 1.4162E-06 1.1052E-06 - 2.2387E+02 1.9992E-05 1.2994E-05 9.4373E-07 7.4897E-07 - 2.5119E+02 1.3946E-05 9.0304E-06 6.2138E-07 5.2566E-07 - 2.8184E+02 9.7504E-06 6.1824E-06 4.3523E-07 3.5154E-07 - 3.1623E+02 6.7479E-06 4.3318E-06 2.9107E-07 2.3581E-07 - 3.5481E+02 4.6632E-06 2.9779E-06 1.9857E-07 1.5618E-07 - 3.9811E+02 3.2257E-06 2.0439E-06 1.3660E-07 1.0462E-07 - 4.4668E+02 2.2356E-06 1.4022E-06 8.9282E-08 7.0401E-08 - 5.0119E+02 1.5424E-06 9.5568E-07 5.8489E-08 4.5080E-08 - 5.6234E+02 1.0679E-06 6.5902E-07 4.0535E-08 3.0305E-08 - 6.3096E+02 7.3035E-07 4.5117E-07 2.7311E-08 2.0558E-08 - 7.0795E+02 5.0045E-07 3.0818E-07 1.8276E-08 1.3978E-08 - 7.9433E+02 3.4140E-07 2.0876E-07 1.2400E-08 9.3951E-09 - 8.9125E+02 2.3177E-07 1.4272E-07 8.1718E-09 6.1111E-09 - 1.0000E+03 1.6098E-07 9.6521E-08 5.3338E-09 4.1633E-09 - 1.1220E+03 1.0830E-07 6.4440E-08 3.6735E-09 2.7307E-09 - 1.2589E+03 7.3034E-08 4.3812E-08 2.4153E-09 1.8504E-09 - 1.4125E+03 4.8471E-08 2.8985E-08 1.6164E-09 1.1933E-09 - 1.5849E+03 3.2688E-08 1.9333E-08 1.1137E-09 7.8100E-10 - 1.7783E+03 2.2220E-08 1.3119E-08 7.3286E-10 5.4863E-10 - 1.9953E+03 1.5059E-08 8.7850E-09 4.8481E-10 3.4025E-10 - 2.2387E+03 1.0141E-08 5.8522E-09 3.2272E-10 2.3178E-10 - 2.5119E+03 6.7382E-09 3.9205E-09 2.0193E-10 1.6322E-10 - 2.8184E+03 4.5281E-09 2.6607E-09 1.3497E-10 1.0180E-10 - 3.1623E+03 3.0825E-09 1.7797E-09 9.3239E-11 7.1459E-11 - 3.5481E+03 1.9968E-09 1.1436E-09 6.1326E-11 4.2429E-11 - 3.9811E+03 1.3190E-09 7.6407E-10 3.7406E-11 2.7440E-11 - 4.4668E+03 8.6893E-10 5.0372E-10 2.4966E-11 2.0002E-11 - 5.0119E+03 5.7187E-10 3.2748E-10 1.7038E-11 1.3299E-11 - 5.6234E+03 3.7983E-10 2.1590E-10 1.0440E-11 8.7007E-12 - 6.3096E+03 2.5138E-10 1.4100E-10 6.7971E-12 5.4282E-12 - 7.0795E+03 1.6622E-10 9.1391E-11 4.6697E-12 3.2446E-12 - 7.9433E+03 1.0949E-10 6.1449E-11 3.0408E-12 2.0416E-12 - 8.9125E+03 7.0738E-11 3.8881E-11 1.7890E-12 1.4320E-12 - 1.0000E+04 4.6089E-11 2.3942E-11 1.2878E-12 9.7060E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.1658E+03 8.2441E+03 4.0166E+03 3.8449E+03 - 1.1220E-01 7.3871E+03 7.4340E+03 3.6278E+03 3.4379E+03 - 1.2589E-01 6.6409E+03 6.6585E+03 3.2310E+03 3.0385E+03 - 1.4125E-01 5.8911E+03 5.9014E+03 2.8387E+03 2.6481E+03 - 1.5849E-01 5.1625E+03 5.1682E+03 2.4704E+03 2.2792E+03 - 1.7783E-01 4.4685E+03 4.4697E+03 2.1322E+03 1.9534E+03 - 1.9953E-01 3.8088E+03 3.7998E+03 1.8240E+03 1.6555E+03 - 2.2387E-01 3.2036E+03 3.1896E+03 1.5415E+03 1.3827E+03 - 2.5119E-01 2.6612E+03 2.6428E+03 1.2828E+03 1.1412E+03 - 2.8184E-01 2.1824E+03 2.1678E+03 1.0587E+03 9.2845E+02 - 3.1623E-01 1.7735E+03 1.7570E+03 8.6253E+02 7.4590E+02 - 3.5481E-01 1.4264E+03 1.4072E+03 6.9233E+02 5.9522E+02 - 3.9811E-01 1.1370E+03 1.1178E+03 5.5077E+02 4.6942E+02 - 4.4668E-01 8.9771E+02 8.7723E+02 4.3111E+02 3.6561E+02 - 5.0119E-01 7.0246E+02 6.7988E+02 3.3585E+02 2.8233E+02 - 5.6234E-01 5.4696E+02 5.2586E+02 2.6047E+02 2.1527E+02 - 6.3096E-01 4.2036E+02 4.0568E+02 1.9943E+02 1.6256E+02 - 7.0795E-01 3.2066E+02 3.0735E+02 1.5092E+02 1.2303E+02 - 7.9433E-01 2.4456E+02 2.3125E+02 1.1224E+02 9.2752E+01 - 8.9125E-01 1.8614E+02 1.7446E+02 8.3368E+01 6.8134E+01 - 1.0000E+00 1.3988E+02 1.3061E+02 6.2110E+01 4.9956E+01 - 1.1220E+00 1.0585E+02 9.7259E+01 4.5551E+01 3.6642E+01 - 1.2589E+00 7.9555E+01 7.1856E+01 3.3361E+01 2.6553E+01 - 1.4125E+00 5.9179E+01 5.3110E+01 2.4114E+01 1.9100E+01 - 1.5849E+00 4.3807E+01 3.9077E+01 1.7339E+01 1.3675E+01 - 1.7783E+00 3.2356E+01 2.8765E+01 1.2447E+01 9.7534E+00 - 1.9953E+00 2.3989E+01 2.1057E+01 8.8388E+00 6.9302E+00 - 2.2387E+00 1.7679E+01 1.5283E+01 6.2515E+00 4.8636E+00 - 2.5119E+00 1.2986E+01 1.1024E+01 4.3985E+00 3.3889E+00 - 2.8184E+00 9.4350E+00 7.8783E+00 3.1028E+00 2.3912E+00 - 3.1623E+00 6.8681E+00 5.7059E+00 2.1675E+00 1.6309E+00 - 3.5481E+00 4.9729E+00 4.0811E+00 1.4992E+00 1.1297E+00 - 3.9811E+00 3.6099E+00 2.9245E+00 1.0248E+00 7.8049E-01 - 4.4668E+00 2.6012E+00 2.0938E+00 6.9539E-01 5.2513E-01 - 5.0119E+00 1.8766E+00 1.4927E+00 4.6777E-01 3.5876E-01 - 5.6234E+00 1.3590E+00 1.0599E+00 3.1919E-01 2.4688E-01 - 6.3096E+00 9.6806E-01 7.5716E-01 2.1717E-01 1.6640E-01 - 7.0795E+00 6.8814E-01 5.4170E-01 1.4671E-01 1.1130E-01 - 7.9433E+00 4.9660E-01 3.8116E-01 9.8940E-02 7.4755E-02 - 8.9125E+00 3.5954E-01 2.7048E-01 6.6603E-02 4.9005E-02 - 1.0000E+01 2.5723E-01 1.9434E-01 4.4008E-02 3.3227E-02 - 1.1220E+01 1.8248E-01 1.3719E-01 2.9336E-02 2.2231E-02 - 1.2589E+01 1.2882E-01 9.6641E-02 1.9672E-02 1.4881E-02 - 1.4125E+01 9.1812E-02 6.8399E-02 1.3225E-02 9.8268E-03 - 1.5849E+01 6.5654E-02 4.8937E-02 8.9207E-03 6.6398E-03 - 1.7783E+01 4.6685E-02 3.4484E-02 5.8968E-03 4.5453E-03 - 1.9953E+01 3.3362E-02 2.4199E-02 3.8251E-03 3.0378E-03 - 2.2387E+01 2.3738E-02 1.7161E-02 2.5149E-03 1.9990E-03 - 2.5119E+01 1.6608E-02 1.2239E-02 1.7118E-03 1.3968E-03 - 2.8184E+01 1.1655E-02 8.5926E-03 1.1553E-03 9.2922E-04 - 3.1623E+01 8.3869E-03 6.0421E-03 7.5961E-04 6.0011E-04 - 3.5481E+01 5.9246E-03 4.2487E-03 5.1230E-04 4.0437E-04 - 3.9811E+01 4.1893E-03 2.9809E-03 3.3837E-04 2.7488E-04 - 4.4668E+01 2.9585E-03 2.0865E-03 2.2227E-04 1.8495E-04 - 5.0119E+01 2.0736E-03 1.4640E-03 1.4923E-04 1.2362E-04 - 5.6234E+01 1.4570E-03 1.0287E-03 1.0183E-04 8.3176E-05 - 6.3096E+01 1.0264E-03 7.1404E-04 6.9704E-05 5.6103E-05 - 7.0795E+01 7.2077E-04 4.9976E-04 4.6314E-05 3.7805E-05 - 7.9433E+01 5.0405E-04 3.5178E-04 3.0800E-05 2.5465E-05 - 8.9125E+01 3.5528E-04 2.4393E-04 2.1050E-05 1.7302E-05 - 1.0000E+02 2.4923E-04 1.7013E-04 1.4467E-05 1.1667E-05 - 1.1220E+02 1.7413E-04 1.1821E-04 9.7394E-06 7.8508E-06 - 1.2589E+02 1.2173E-04 8.2702E-05 6.6013E-06 5.3240E-06 - 1.4125E+02 8.5378E-05 5.7437E-05 4.4991E-06 3.6684E-06 - 1.5849E+02 5.9648E-05 3.9710E-05 3.0311E-06 2.5236E-06 - 1.7783E+02 4.1431E-05 2.7595E-05 2.0085E-06 1.6879E-06 - 1.9953E+02 2.8852E-05 1.9061E-05 1.3780E-06 1.0989E-06 - 2.2387E+02 2.0177E-05 1.3093E-05 9.1869E-07 7.1757E-07 - 2.5119E+02 1.4124E-05 9.0041E-06 6.1317E-07 4.7745E-07 - 2.8184E+02 9.7688E-06 6.2198E-06 4.2076E-07 3.3089E-07 - 3.1623E+02 6.7684E-06 4.3382E-06 2.9692E-07 2.3394E-07 - 3.5481E+02 4.6851E-06 2.9664E-06 1.9987E-07 1.5943E-07 - 3.9811E+02 3.2295E-06 2.0414E-06 1.2899E-07 1.0761E-07 - 4.4668E+02 2.2388E-06 1.4072E-06 8.8004E-08 7.0069E-08 - 5.0119E+02 1.5467E-06 9.6453E-07 6.0926E-08 4.6983E-08 - 5.6234E+02 1.0720E-06 6.6713E-07 4.0348E-08 3.2042E-08 - 6.3096E+02 7.3128E-07 4.5130E-07 2.7103E-08 2.1244E-08 - 7.0795E+02 4.9794E-07 3.0771E-07 1.8368E-08 1.4287E-08 - 7.9433E+02 3.3904E-07 2.0900E-07 1.2275E-08 9.3326E-09 - 8.9125E+02 2.3314E-07 1.4088E-07 8.2957E-09 6.1466E-09 - 1.0000E+03 1.6048E-07 9.6052E-08 5.4518E-09 4.2704E-09 - 1.1220E+03 1.0756E-07 6.4988E-08 3.5649E-09 2.7161E-09 - 1.2589E+03 7.2375E-08 4.3442E-08 2.3388E-09 1.7453E-09 - 1.4125E+03 4.9264E-08 2.8935E-08 1.6183E-09 1.2332E-09 - 1.5849E+03 3.3431E-08 1.9446E-08 1.1470E-09 8.7685E-10 - 1.7783E+03 2.2531E-08 1.2956E-08 7.0821E-10 5.5506E-10 - 1.9953E+03 1.5067E-08 8.7038E-09 4.4940E-10 3.5466E-10 - 2.2387E+03 1.0097E-08 5.7992E-09 3.0792E-10 2.3488E-10 - 2.5119E+03 6.7113E-09 3.8511E-09 2.0457E-10 1.5777E-10 - 2.8184E+03 4.4552E-09 2.5726E-09 1.3295E-10 1.0393E-10 - 3.1623E+03 3.0636E-09 1.7698E-09 8.9568E-11 6.5592E-11 - 3.5481E+03 1.9829E-09 1.1284E-09 5.7151E-11 4.7756E-11 - 3.9811E+03 1.3042E-09 7.4249E-10 3.8146E-11 2.9052E-11 - 4.4668E+03 8.5211E-10 4.8562E-10 2.6934E-11 1.7107E-11 - 5.0119E+03 5.6470E-10 3.1559E-10 1.6784E-11 1.1956E-11 - 5.6234E+03 3.7922E-10 2.0715E-10 9.8192E-12 8.2509E-12 - 6.3096E+03 2.5015E-10 1.3975E-10 6.6800E-12 5.0789E-12 - 7.0795E+03 1.6399E-10 9.3489E-11 4.7507E-12 3.1606E-12 - 7.9433E+03 1.0763E-10 6.0387E-11 3.2846E-12 2.0657E-12 - 8.9125E+03 7.0149E-11 3.9150E-11 2.1292E-12 1.3810E-12 - 1.0000E+04 4.6516E-11 2.5350E-11 1.5132E-12 9.8576E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.4286E+03 8.5510E+03 4.1464E+03 3.9567E+03 - 1.1220E-01 7.6202E+03 7.6909E+03 3.7291E+03 3.5376E+03 - 1.2589E-01 6.8109E+03 6.8636E+03 3.3207E+03 3.1132E+03 - 1.4125E-01 6.0506E+03 6.0894E+03 2.9443E+03 2.7242E+03 - 1.5849E-01 5.3062E+03 5.3162E+03 2.5668E+03 2.3559E+03 - 1.7783E-01 4.5754E+03 4.5716E+03 2.2058E+03 2.0027E+03 - 1.9953E-01 3.9050E+03 3.9003E+03 1.8808E+03 1.6840E+03 - 2.2387E-01 3.2896E+03 3.2815E+03 1.5868E+03 1.4049E+03 - 2.5119E-01 2.7302E+03 2.7141E+03 1.3225E+03 1.1602E+03 - 2.8184E-01 2.2438E+03 2.2217E+03 1.0852E+03 9.4718E+02 - 3.1623E-01 1.8163E+03 1.7939E+03 8.7954E+02 7.6619E+02 - 3.5481E-01 1.4567E+03 1.4306E+03 7.0822E+02 6.1086E+02 - 3.9811E-01 1.1587E+03 1.1339E+03 5.6378E+02 4.7825E+02 - 4.4668E-01 9.1015E+02 8.8902E+02 4.4179E+02 3.6941E+02 - 5.0119E-01 7.1443E+02 6.8991E+02 3.4233E+02 2.8324E+02 - 5.6234E-01 5.5610E+02 5.3212E+02 2.6375E+02 2.1679E+02 - 6.3096E-01 4.2643E+02 4.0767E+02 2.0125E+02 1.6552E+02 - 7.0795E-01 3.2421E+02 3.1173E+02 1.5183E+02 1.2470E+02 - 7.9433E-01 2.4455E+02 2.3629E+02 1.1402E+02 9.2477E+01 - 8.9125E-01 1.8601E+02 1.7688E+02 8.5520E+01 6.8007E+01 - 1.0000E+00 1.4099E+02 1.3083E+02 6.2470E+01 4.9897E+01 - 1.1220E+00 1.0621E+02 9.7597E+01 4.5889E+01 3.6737E+01 - 1.2589E+00 7.9631E+01 7.2449E+01 3.3745E+01 2.6794E+01 - 1.4125E+00 5.9558E+01 5.3060E+01 2.4302E+01 1.9277E+01 - 1.5849E+00 4.4528E+01 3.9113E+01 1.7371E+01 1.3780E+01 - 1.7783E+00 3.3018E+01 2.8831E+01 1.2458E+01 9.7258E+00 - 1.9953E+00 2.4342E+01 2.0995E+01 8.9303E+00 6.8942E+00 - 2.2387E+00 1.7776E+01 1.5272E+01 6.3327E+00 4.8941E+00 - 2.5119E+00 1.3010E+01 1.0962E+01 4.4073E+00 3.4162E+00 - 2.8184E+00 9.5240E+00 7.9500E+00 3.0850E+00 2.3341E+00 - 3.1623E+00 6.8832E+00 5.7206E+00 2.1485E+00 1.6346E+00 - 3.5481E+00 5.0062E+00 4.1001E+00 1.4736E+00 1.1200E+00 - 3.9811E+00 3.6353E+00 2.9338E+00 1.0102E+00 7.7612E-01 - 4.4668E+00 2.6291E+00 2.1066E+00 6.9571E-01 5.3780E-01 - 5.0119E+00 1.8890E+00 1.5080E+00 4.7216E-01 3.6353E-01 - 5.6234E+00 1.3618E+00 1.0710E+00 3.2017E-01 2.4563E-01 - 6.3096E+00 9.8218E-01 7.6226E-01 2.1511E-01 1.6327E-01 - 7.0795E+00 6.9787E-01 5.4258E-01 1.4552E-01 1.1095E-01 - 7.9433E+00 4.9807E-01 3.8588E-01 9.8705E-02 7.4243E-02 - 8.9125E+00 3.5841E-01 2.7421E-01 6.5596E-02 4.9832E-02 - 1.0000E+01 2.5649E-01 1.9578E-01 4.4030E-02 3.4304E-02 - 1.1220E+01 1.8360E-01 1.3866E-01 2.9556E-02 2.2848E-02 - 1.2589E+01 1.3129E-01 9.8339E-02 1.9630E-02 1.4937E-02 - 1.4125E+01 9.3229E-02 6.9317E-02 1.3010E-02 9.8772E-03 - 1.5849E+01 6.5943E-02 4.9391E-02 8.6885E-03 6.6635E-03 - 1.7783E+01 4.6974E-02 3.5149E-02 5.7918E-03 4.4896E-03 - 1.9953E+01 3.3469E-02 2.4614E-02 3.9615E-03 2.9475E-03 - 2.2387E+01 2.3621E-02 1.7217E-02 2.6444E-03 1.9538E-03 - 2.5119E+01 1.6776E-02 1.2210E-02 1.7281E-03 1.3208E-03 - 2.8184E+01 1.2066E-02 8.5984E-03 1.1389E-03 8.9895E-04 - 3.1623E+01 8.4133E-03 6.0731E-03 7.6121E-04 6.0277E-04 - 3.5481E+01 5.9404E-03 4.2654E-03 5.1253E-04 4.0105E-04 - 3.9811E+01 4.1928E-03 2.9901E-03 3.4134E-04 2.6898E-04 - 4.4668E+01 2.9647E-03 2.0992E-03 2.3028E-04 1.8255E-04 - 5.0119E+01 2.0898E-03 1.4709E-03 1.5178E-04 1.2321E-04 - 5.6234E+01 1.4600E-03 1.0327E-03 1.0343E-04 8.1956E-05 - 6.3096E+01 1.0247E-03 7.2628E-04 6.9476E-05 5.5786E-05 - 7.0795E+01 7.2430E-04 5.0793E-04 4.6043E-05 3.7105E-05 - 7.9433E+01 5.0817E-04 3.5181E-04 3.1345E-05 2.5376E-05 - 8.9125E+01 3.5589E-04 2.4474E-04 2.1115E-05 1.8028E-05 - 1.0000E+02 2.4830E-04 1.7010E-04 1.4146E-05 1.1806E-05 - 1.1220E+02 1.7389E-04 1.1848E-04 9.4508E-06 7.9807E-06 - 1.2589E+02 1.2125E-04 8.2556E-05 6.4129E-06 5.3524E-06 - 1.4125E+02 8.4948E-05 5.7253E-05 4.4079E-06 3.6387E-06 - 1.5849E+02 5.9368E-05 3.9672E-05 3.0037E-06 2.4146E-06 - 1.7783E+02 4.1410E-05 2.7475E-05 2.0199E-06 1.5987E-06 - 1.9953E+02 2.8977E-05 1.8938E-05 1.3454E-06 1.0844E-06 - 2.2387E+02 2.0175E-05 1.3101E-05 9.1237E-07 7.4943E-07 - 2.5119E+02 1.3988E-05 9.0499E-06 6.3365E-07 5.0395E-07 - 2.8184E+02 9.6224E-06 6.2813E-06 4.3225E-07 3.3942E-07 - 3.1623E+02 6.7307E-06 4.3438E-06 2.9001E-07 2.2914E-07 - 3.5481E+02 4.6470E-06 2.9660E-06 1.9676E-07 1.5776E-07 - 3.9811E+02 3.2210E-06 2.0297E-06 1.3343E-07 1.0676E-07 - 4.4668E+02 2.2337E-06 1.3921E-06 9.2306E-08 7.0128E-08 - 5.0119E+02 1.5414E-06 9.6121E-07 6.2584E-08 4.6194E-08 - 5.6234E+02 1.0686E-06 6.6031E-07 4.2316E-08 3.1340E-08 - 6.3096E+02 7.2780E-07 4.4791E-07 2.8228E-08 2.1162E-08 - 7.0795E+02 4.9571E-07 3.0635E-07 1.8253E-08 1.3951E-08 - 7.9433E+02 3.4118E-07 2.0855E-07 1.2070E-08 9.3347E-09 - 8.9125E+02 2.3293E-07 1.3999E-07 8.3261E-09 6.1169E-09 - 1.0000E+03 1.5912E-07 9.5770E-08 5.4776E-09 3.9876E-09 - 1.1220E+03 1.0631E-07 6.4364E-08 3.5110E-09 2.7240E-09 - 1.2589E+03 7.2314E-08 4.3605E-08 2.3236E-09 1.9380E-09 - 1.4125E+03 4.8969E-08 2.9339E-08 1.6115E-09 1.2557E-09 - 1.5849E+03 3.2934E-08 1.9659E-08 1.0905E-09 7.8434E-10 - 1.7783E+03 2.2340E-08 1.3379E-08 6.7924E-10 5.2554E-10 - 1.9953E+03 1.5044E-08 8.7540E-09 4.5785E-10 3.5663E-10 - 2.2387E+03 1.0134E-08 5.8257E-09 3.0342E-10 2.3807E-10 - 2.5119E+03 6.7077E-09 3.8765E-09 1.9827E-10 1.3924E-10 - 2.8184E+03 4.4591E-09 2.5773E-09 1.3122E-10 8.7676E-11 - 3.1623E+03 3.0660E-09 1.7498E-09 8.9636E-11 6.6994E-11 - 3.5481E+03 1.9726E-09 1.1252E-09 6.1159E-11 4.4384E-11 - 3.9811E+03 1.3057E-09 7.4416E-10 3.4896E-11 2.7581E-11 - 4.4668E+03 8.6343E-10 4.9204E-10 2.2677E-11 1.8419E-11 - 5.0119E+03 5.7216E-10 3.2545E-10 1.6125E-11 1.1302E-11 - 5.6234E+03 3.8044E-10 2.1062E-10 1.1592E-11 6.9920E-12 - 6.3096E+03 2.4940E-10 1.3830E-10 7.0713E-12 4.9751E-12 - 7.0795E+03 1.6280E-10 9.1727E-11 4.6068E-12 3.6304E-12 - 7.9433E+03 1.0764E-10 5.9068E-11 3.1554E-12 2.3523E-12 - 8.9125E+03 7.0848E-11 3.8686E-11 2.2956E-12 1.5970E-12 - 1.0000E+04 4.6430E-11 2.5390E-11 1.4510E-12 1.2212E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.6262E+03 8.6991E+03 4.2442E+03 4.0307E+03 - 1.1220E-01 7.7696E+03 7.8614E+03 3.8181E+03 3.5952E+03 - 1.2589E-01 6.9458E+03 7.0293E+03 3.3956E+03 3.1759E+03 - 1.4125E-01 6.1506E+03 6.2049E+03 2.9974E+03 2.7653E+03 - 1.5849E-01 5.3945E+03 5.4132E+03 2.6210E+03 2.3788E+03 - 1.7783E-01 4.6747E+03 4.6696E+03 2.2574E+03 2.0300E+03 - 1.9953E-01 3.9713E+03 3.9729E+03 1.9157E+03 1.7096E+03 - 2.2387E-01 3.3309E+03 3.3309E+03 1.6159E+03 1.4228E+03 - 2.5119E-01 2.7719E+03 2.7551E+03 1.3455E+03 1.1745E+03 - 2.8184E-01 2.2679E+03 2.2430E+03 1.1026E+03 9.5385E+02 - 3.1623E-01 1.8418E+03 1.8117E+03 8.9243E+02 7.6807E+02 - 3.5481E-01 1.4745E+03 1.4494E+03 7.1625E+02 6.1471E+02 - 3.9811E-01 1.1681E+03 1.1430E+03 5.6744E+02 4.8103E+02 - 4.4668E-01 9.2264E+02 9.0135E+02 4.4528E+02 3.7334E+02 - 5.0119E-01 7.1907E+02 6.9941E+02 3.4930E+02 2.8854E+02 - 5.6234E-01 5.5615E+02 5.3415E+02 2.6725E+02 2.2001E+02 - 6.3096E-01 4.2643E+02 4.0912E+02 2.0206E+02 1.6636E+02 - 7.0795E-01 3.2648E+02 3.1134E+02 1.5360E+02 1.2415E+02 - 7.9433E-01 2.4914E+02 2.3509E+02 1.1550E+02 9.2177E+01 - 8.9125E-01 1.8769E+02 1.7719E+02 8.5516E+01 6.8317E+01 - 1.0000E+00 1.4181E+02 1.3176E+02 6.2786E+01 5.0422E+01 - 1.1220E+00 1.0638E+02 9.7808E+01 4.6086E+01 3.7027E+01 - 1.2589E+00 7.9490E+01 7.2570E+01 3.3687E+01 2.6660E+01 - 1.4125E+00 5.9667E+01 5.3663E+01 2.4363E+01 1.9159E+01 - 1.5849E+00 4.4492E+01 3.9326E+01 1.7395E+01 1.3719E+01 - 1.7783E+00 3.2745E+01 2.8693E+01 1.2397E+01 9.7134E+00 - 1.9953E+00 2.4093E+01 2.1001E+01 8.8678E+00 6.9442E+00 - 2.2387E+00 1.7634E+01 1.5322E+01 6.3195E+00 4.8884E+00 - 2.5119E+00 1.2879E+01 1.1002E+01 4.4407E+00 3.4455E+00 - 2.8184E+00 9.4077E+00 7.8876E+00 3.0830E+00 2.4269E+00 - 3.1623E+00 6.8778E+00 5.6907E+00 2.1565E+00 1.6453E+00 - 3.5481E+00 4.9604E+00 4.0768E+00 1.4937E+00 1.1340E+00 - 3.9811E+00 3.6152E+00 2.9353E+00 1.0224E+00 7.6864E-01 - 4.4668E+00 2.6301E+00 2.1043E+00 6.9343E-01 5.2508E-01 - 5.0119E+00 1.8838E+00 1.4948E+00 4.7594E-01 3.6392E-01 - 5.6234E+00 1.3479E+00 1.0611E+00 3.2372E-01 2.4760E-01 - 6.3096E+00 9.6896E-01 7.6318E-01 2.1947E-01 1.6304E-01 - 7.0795E+00 6.9442E-01 5.4919E-01 1.4770E-01 1.0990E-01 - 7.9433E+00 4.9654E-01 3.8543E-01 9.8919E-02 7.5295E-02 - 8.9125E+00 3.5805E-01 2.7343E-01 6.5557E-02 4.9195E-02 - 1.0000E+01 2.5694E-01 1.9440E-01 4.4565E-02 3.3537E-02 - 1.1220E+01 1.8266E-01 1.3705E-01 2.9410E-02 2.2455E-02 - 1.2589E+01 1.2947E-01 9.6863E-02 1.9229E-02 1.4814E-02 - 1.4125E+01 9.2140E-02 6.8763E-02 1.2869E-02 9.9974E-03 - 1.5849E+01 6.5585E-02 4.8695E-02 8.7156E-03 6.7370E-03 - 1.7783E+01 4.6830E-02 3.4574E-02 5.6522E-03 4.4091E-03 - 1.9953E+01 3.3140E-02 2.4307E-02 3.7566E-03 2.9906E-03 - 2.2387E+01 2.3319E-02 1.7027E-02 2.5712E-03 2.0045E-03 - 2.5119E+01 1.6572E-02 1.2004E-02 1.6938E-03 1.3659E-03 - 2.8184E+01 1.1825E-02 8.4252E-03 1.1182E-03 9.0247E-04 - 3.1623E+01 8.3538E-03 5.9992E-03 7.6441E-04 5.9511E-04 - 3.5481E+01 5.9078E-03 4.2073E-03 5.0717E-04 4.0252E-04 - 3.9811E+01 4.1778E-03 2.9601E-03 3.4157E-04 2.7298E-04 - 4.4668E+01 2.9416E-03 2.0891E-03 2.2868E-04 1.8375E-04 - 5.0119E+01 2.0651E-03 1.4695E-03 1.4998E-04 1.2354E-04 - 5.6234E+01 1.4543E-03 1.0270E-03 1.0039E-04 8.3481E-05 - 6.3096E+01 1.0210E-03 7.1722E-04 6.7058E-05 5.6803E-05 - 7.0795E+01 7.1505E-04 5.0235E-04 4.5361E-05 3.7972E-05 - 7.9433E+01 5.0401E-04 3.4767E-04 3.1482E-05 2.4933E-05 - 8.9125E+01 3.5794E-04 2.4242E-04 2.1319E-05 1.6652E-05 - 1.0000E+02 2.4910E-04 1.6950E-04 1.4329E-05 1.1426E-05 - 1.1220E+02 1.7374E-04 1.1754E-04 9.7649E-06 7.7521E-06 - 1.2589E+02 1.2144E-04 8.2108E-05 6.5708E-06 5.3935E-06 - 1.4125E+02 8.5106E-05 5.6909E-05 4.4132E-06 3.6529E-06 - 1.5849E+02 5.9200E-05 3.9551E-05 2.9546E-06 2.4458E-06 - 1.7783E+02 4.1176E-05 2.7282E-05 2.0177E-06 1.6391E-06 - 1.9953E+02 2.8764E-05 1.8931E-05 1.4139E-06 1.0877E-06 - 2.2387E+02 2.0055E-05 1.3077E-05 9.4502E-07 7.4280E-07 - 2.5119E+02 1.4047E-05 8.9110E-06 6.2158E-07 5.0172E-07 - 2.8184E+02 9.7124E-06 6.1683E-06 4.0985E-07 3.4169E-07 - 3.1623E+02 6.7343E-06 4.3100E-06 2.8589E-07 2.3567E-07 - 3.5481E+02 4.6591E-06 2.9686E-06 1.9376E-07 1.5945E-07 - 3.9811E+02 3.2077E-06 2.0410E-06 1.2843E-07 1.0862E-07 - 4.4668E+02 2.2186E-06 1.3928E-06 8.7137E-08 7.3884E-08 - 5.0119E+02 1.5387E-06 9.5254E-07 5.9273E-08 4.9197E-08 - 5.6234E+02 1.0603E-06 6.6264E-07 4.0567E-08 3.1814E-08 - 6.3096E+02 7.2216E-07 4.4891E-07 2.7397E-08 2.2003E-08 - 7.0795E+02 4.9446E-07 3.0526E-07 1.8236E-08 1.4900E-08 - 7.9433E+02 3.3912E-07 2.0790E-07 1.1934E-08 9.2497E-09 - 8.9125E+02 2.3273E-07 1.4007E-07 7.8624E-09 6.1400E-09 - 1.0000E+03 1.5942E-07 9.5612E-08 5.2945E-09 4.4163E-09 - 1.1220E+03 1.0656E-07 6.3677E-08 3.6826E-09 2.8691E-09 - 1.2589E+03 7.2138E-08 4.2939E-08 2.4153E-09 1.9070E-09 - 1.4125E+03 4.8766E-08 2.9232E-08 1.5797E-09 1.2208E-09 - 1.5849E+03 3.2572E-08 1.9680E-08 1.0585E-09 7.0643E-10 - 1.7783E+03 2.1874E-08 1.3131E-08 7.0106E-10 4.9239E-10 - 1.9953E+03 1.4941E-08 8.6470E-09 4.7320E-10 3.7140E-10 - 2.2387E+03 1.0039E-08 5.8683E-09 3.0454E-10 2.3973E-10 - 2.5119E+03 6.6642E-09 3.9006E-09 1.9804E-10 1.6285E-10 - 2.8184E+03 4.4125E-09 2.5409E-09 1.4072E-10 1.0044E-10 - 3.1623E+03 3.0521E-09 1.7404E-09 8.5474E-11 6.4218E-11 - 3.5481E+03 1.9873E-09 1.1222E-09 5.9495E-11 4.2369E-11 - 3.9811E+03 1.3037E-09 7.4068E-10 3.9623E-11 2.7028E-11 - 4.4668E+03 8.5997E-10 4.8273E-10 2.5214E-11 1.8701E-11 - 5.0119E+03 5.7786E-10 3.1841E-10 1.5714E-11 1.2754E-11 - 5.6234E+03 3.8225E-10 2.0965E-10 1.0734E-11 7.3643E-12 - 6.3096E+03 2.4941E-10 1.4088E-10 7.1897E-12 4.6661E-12 - 7.0795E+03 1.6571E-10 9.2417E-11 4.6249E-12 3.3476E-12 - 7.9433E+03 1.0817E-10 6.0025E-11 2.8813E-12 2.2258E-12 - 8.9125E+03 6.9826E-11 3.9022E-11 1.8826E-12 1.3863E-12 - 1.0000E+04 4.6833E-11 2.5787E-11 1.2966E-12 8.7272E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.6999E+03 8.8071E+03 4.2720E+03 4.0717E+03 - 1.1220E-01 7.8679E+03 7.9451E+03 3.8615E+03 3.6200E+03 - 1.2589E-01 7.0478E+03 7.1260E+03 3.4397E+03 3.1973E+03 - 1.4125E-01 6.2495E+03 6.3109E+03 3.0253E+03 2.7927E+03 - 1.5849E-01 5.4764E+03 5.4911E+03 2.6458E+03 2.4129E+03 - 1.7783E-01 4.7157E+03 4.7211E+03 2.2793E+03 2.0572E+03 - 1.9953E-01 4.0165E+03 4.0045E+03 1.9351E+03 1.7277E+03 - 2.2387E-01 3.3886E+03 3.3540E+03 1.6353E+03 1.4440E+03 - 2.5119E-01 2.8004E+03 2.7823E+03 1.3581E+03 1.1932E+03 - 2.8184E-01 2.2894E+03 2.2734E+03 1.1125E+03 9.6831E+02 - 3.1623E-01 1.8592E+03 1.8329E+03 9.0844E+02 7.7772E+02 - 3.5481E-01 1.4886E+03 1.4639E+03 7.3045E+02 6.1994E+02 - 3.9811E-01 1.1817E+03 1.1612E+03 5.7924E+02 4.8672E+02 - 4.4668E-01 9.2756E+02 9.0952E+02 4.5369E+02 3.7773E+02 - 5.0119E-01 7.2211E+02 7.0475E+02 3.4965E+02 2.9179E+02 - 5.6234E-01 5.6087E+02 5.4167E+02 2.6867E+02 2.2348E+02 - 6.3096E-01 4.3093E+02 4.1464E+02 2.0618E+02 1.6843E+02 - 7.0795E-01 3.2969E+02 3.1435E+02 1.5498E+02 1.2513E+02 - 7.9433E-01 2.5037E+02 2.3673E+02 1.1463E+02 9.2899E+01 - 8.9125E-01 1.8880E+02 1.7724E+02 8.5689E+01 6.8688E+01 - 1.0000E+00 1.4217E+02 1.3232E+02 6.3465E+01 5.0075E+01 - 1.1220E+00 1.0677E+02 9.8404E+01 4.6194E+01 3.6742E+01 - 1.2589E+00 7.9594E+01 7.2705E+01 3.3637E+01 2.6758E+01 - 1.4125E+00 5.9381E+01 5.3482E+01 2.4357E+01 1.9060E+01 - 1.5849E+00 4.4307E+01 3.9242E+01 1.7667E+01 1.3706E+01 - 1.7783E+00 3.2938E+01 2.8704E+01 1.2593E+01 9.8323E+00 - 1.9953E+00 2.4320E+01 2.0975E+01 8.8357E+00 6.8520E+00 - 2.2387E+00 1.7781E+01 1.5191E+01 6.2474E+00 4.8201E+00 - 2.5119E+00 1.3004E+01 1.0960E+01 4.3347E+00 3.4375E+00 - 2.8184E+00 9.5399E+00 7.9157E+00 3.0336E+00 2.4195E+00 - 3.1623E+00 6.9153E+00 5.7182E+00 2.1324E+00 1.6517E+00 - 3.5481E+00 5.0137E+00 4.0951E+00 1.4726E+00 1.1386E+00 - 3.9811E+00 3.6241E+00 2.9318E+00 1.0161E+00 7.7568E-01 - 4.4668E+00 2.6219E+00 2.1052E+00 6.9699E-01 5.2283E-01 - 5.0119E+00 1.8830E+00 1.4976E+00 4.7474E-01 3.5859E-01 - 5.6234E+00 1.3511E+00 1.0671E+00 3.2194E-01 2.4762E-01 - 6.3096E+00 9.7503E-01 7.6793E-01 2.1827E-01 1.6531E-01 - 7.0795E+00 6.9734E-01 5.4567E-01 1.4751E-01 1.1105E-01 - 7.9433E+00 4.9782E-01 3.8730E-01 9.9725E-02 7.4787E-02 - 8.9125E+00 3.6149E-01 2.7355E-01 6.4631E-02 5.0560E-02 - 1.0000E+01 2.5790E-01 1.9361E-01 4.3654E-02 3.3713E-02 - 1.1220E+01 1.8295E-01 1.3692E-01 2.9433E-02 2.2321E-02 - 1.2589E+01 1.2980E-01 9.7046E-02 1.9528E-02 1.4869E-02 - 1.4125E+01 9.2164E-02 6.9099E-02 1.3148E-02 1.0061E-02 - 1.5849E+01 6.5613E-02 4.8849E-02 8.7880E-03 6.7237E-03 - 1.7783E+01 4.6797E-02 3.4746E-02 5.7498E-03 4.4546E-03 - 1.9953E+01 3.3070E-02 2.4556E-02 3.8157E-03 3.0171E-03 - 2.2387E+01 2.3520E-02 1.7276E-02 2.5724E-03 1.9567E-03 - 2.5119E+01 1.6645E-02 1.2050E-02 1.7208E-03 1.3162E-03 - 2.8184E+01 1.1737E-02 8.4791E-03 1.1310E-03 8.7700E-04 - 3.1623E+01 8.3651E-03 6.0318E-03 7.5532E-04 5.9543E-04 - 3.5481E+01 5.8970E-03 4.2273E-03 5.0484E-04 3.9693E-04 - 3.9811E+01 4.1739E-03 2.9765E-03 3.3764E-04 2.6911E-04 - 4.4668E+01 2.9536E-03 2.0946E-03 2.2515E-04 1.8511E-04 - 5.0119E+01 2.0760E-03 1.4679E-03 1.5017E-04 1.2228E-04 - 5.6234E+01 1.4569E-03 1.0244E-03 1.0024E-04 8.1708E-05 - 6.3096E+01 1.0250E-03 7.1491E-04 6.7621E-05 5.5392E-05 - 7.0795E+01 7.2169E-04 4.9902E-04 4.6395E-05 3.6612E-05 - 7.9433E+01 5.0387E-04 3.4892E-04 3.1696E-05 2.4270E-05 - 8.9125E+01 3.5244E-04 2.4300E-04 2.1052E-05 1.7038E-05 - 1.0000E+02 2.4884E-04 1.6946E-04 1.4020E-05 1.1710E-05 - 1.1220E+02 1.7339E-04 1.1755E-04 9.4855E-06 7.8408E-06 - 1.2589E+02 1.2151E-04 8.1795E-05 6.3929E-06 5.3030E-06 - 1.4125E+02 8.4617E-05 5.6763E-05 4.3955E-06 3.5842E-06 - 1.5849E+02 5.8994E-05 3.9337E-05 3.0650E-06 2.4448E-06 - 1.7783E+02 4.1264E-05 2.7278E-05 2.0276E-06 1.6482E-06 - 1.9953E+02 2.8713E-05 1.8858E-05 1.3277E-06 1.0870E-06 - 2.2387E+02 2.0091E-05 1.3093E-05 9.3564E-07 7.3183E-07 - 2.5119E+02 1.3957E-05 9.0321E-06 6.3293E-07 5.0247E-07 - 2.8184E+02 9.6195E-06 6.2052E-06 4.1037E-07 3.3922E-07 - 3.1623E+02 6.7204E-06 4.2999E-06 2.8664E-07 2.3603E-07 - 3.5481E+02 4.6462E-06 2.9610E-06 1.9241E-07 1.5321E-07 - 3.9811E+02 3.2200E-06 2.0367E-06 1.3213E-07 1.0311E-07 - 4.4668E+02 2.2174E-06 1.3929E-06 8.8752E-08 6.9918E-08 - 5.0119E+02 1.5268E-06 9.5460E-07 6.2095E-08 4.7197E-08 - 5.6234E+02 1.0663E-06 6.5774E-07 4.0467E-08 3.1526E-08 - 6.3096E+02 7.2958E-07 4.4703E-07 2.6695E-08 2.2000E-08 - 7.0795E+02 4.9719E-07 3.0454E-07 1.8036E-08 1.4212E-08 - 7.9433E+02 3.4024E-07 2.0697E-07 1.1939E-08 9.2143E-09 - 8.9125E+02 2.3423E-07 1.3964E-07 8.0621E-09 6.3184E-09 - 1.0000E+03 1.6035E-07 9.5210E-08 5.5527E-09 4.0765E-09 - 1.1220E+03 1.0702E-07 6.4221E-08 3.5932E-09 2.6271E-09 - 1.2589E+03 7.2538E-08 4.3671E-08 2.3807E-09 1.7966E-09 - 1.4125E+03 4.8920E-08 2.9174E-08 1.5134E-09 1.2364E-09 - 1.5849E+03 3.2734E-08 1.9425E-08 1.0244E-09 7.5411E-10 - 1.7783E+03 2.1934E-08 1.2953E-08 7.0252E-10 4.9161E-10 - 1.9953E+03 1.4909E-08 8.7281E-09 4.6027E-10 3.4210E-10 - 2.2387E+03 9.9637E-09 5.7981E-09 3.0281E-10 2.2221E-10 - 2.5119E+03 6.6712E-09 3.8472E-09 2.0078E-10 1.5358E-10 - 2.8184E+03 4.4835E-09 2.6068E-09 1.3706E-10 9.2461E-11 - 3.1623E+03 3.0325E-09 1.7649E-09 8.6911E-11 6.6901E-11 - 3.5481E+03 1.9550E-09 1.1297E-09 5.6012E-11 4.4798E-11 - 3.9811E+03 1.2983E-09 7.4789E-10 3.8752E-11 2.7605E-11 - 4.4668E+03 8.5692E-10 4.9758E-10 2.5741E-11 1.9115E-11 - 5.0119E+03 5.7093E-10 3.2353E-10 1.6384E-11 1.3861E-11 - 5.6234E+03 3.8365E-10 2.0987E-10 1.1223E-11 9.0446E-12 - 6.3096E+03 2.4874E-10 1.3930E-10 7.0021E-12 5.2407E-12 - 7.0795E+03 1.6229E-10 9.0499E-11 4.7260E-12 3.1867E-12 - 7.9433E+03 1.0642E-10 5.9382E-11 3.3772E-12 2.0273E-12 - 8.9125E+03 7.0704E-11 3.9308E-11 2.0590E-12 1.4256E-12 - 1.0000E+04 4.6340E-11 2.5586E-11 1.2713E-12 1.0862E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.7092E+03 8.8545E+03 4.2992E+03 4.0696E+03 - 1.1220E-01 7.8498E+03 7.9843E+03 3.8765E+03 3.6313E+03 - 1.2589E-01 7.0326E+03 7.1376E+03 3.4600E+03 3.1959E+03 - 1.4125E-01 6.2475E+03 6.3192E+03 3.0381E+03 2.8014E+03 - 1.5849E-01 5.4834E+03 5.5161E+03 2.6481E+03 2.4292E+03 - 1.7783E-01 4.7429E+03 4.7450E+03 2.2865E+03 2.0747E+03 - 1.9953E-01 4.0287E+03 4.0296E+03 1.9478E+03 1.7503E+03 - 2.2387E-01 3.3819E+03 3.3727E+03 1.6400E+03 1.4555E+03 - 2.5119E-01 2.8104E+03 2.7937E+03 1.3643E+03 1.1947E+03 - 2.8184E-01 2.3049E+03 2.2866E+03 1.1221E+03 9.6913E+02 - 3.1623E-01 1.8658E+03 1.8417E+03 9.1457E+02 7.7993E+02 - 3.5481E-01 1.4911E+03 1.4685E+03 7.3286E+02 6.1991E+02 - 3.9811E-01 1.1861E+03 1.1627E+03 5.7859E+02 4.8438E+02 - 4.4668E-01 9.3302E+02 9.1124E+02 4.5434E+02 3.7644E+02 - 5.0119E-01 7.2578E+02 7.0467E+02 3.5404E+02 2.8923E+02 - 5.6234E-01 5.6107E+02 5.4318E+02 2.7043E+02 2.2053E+02 - 6.3096E-01 4.3039E+02 4.1401E+02 2.0479E+02 1.6733E+02 - 7.0795E-01 3.2797E+02 3.1347E+02 1.5488E+02 1.2545E+02 - 7.9433E-01 2.4898E+02 2.3719E+02 1.1597E+02 9.2760E+01 - 8.9125E-01 1.8904E+02 1.7720E+02 8.4915E+01 6.8345E+01 - 1.0000E+00 1.4179E+02 1.3189E+02 6.2974E+01 5.0082E+01 - 1.1220E+00 1.0648E+02 9.8190E+01 4.6224E+01 3.6457E+01 - 1.2589E+00 7.9626E+01 7.2915E+01 3.3626E+01 2.6532E+01 - 1.4125E+00 5.9647E+01 5.3817E+01 2.4460E+01 1.9114E+01 - 1.5849E+00 4.4494E+01 3.9504E+01 1.7677E+01 1.3689E+01 - 1.7783E+00 3.2745E+01 2.8960E+01 1.2513E+01 9.8178E+00 - 1.9953E+00 2.4198E+01 2.1093E+01 8.8412E+00 6.9116E+00 - 2.2387E+00 1.7835E+01 1.5316E+01 6.2821E+00 4.8347E+00 - 2.5119E+00 1.3018E+01 1.1075E+01 4.4594E+00 3.4087E+00 - 2.8184E+00 9.4639E+00 7.9288E+00 3.1182E+00 2.3868E+00 - 3.1623E+00 6.9005E+00 5.6806E+00 2.1445E+00 1.6212E+00 - 3.5481E+00 5.0190E+00 4.1026E+00 1.4895E+00 1.1247E+00 - 3.9811E+00 3.6326E+00 2.9336E+00 1.0184E+00 7.7183E-01 - 4.4668E+00 2.6203E+00 2.1044E+00 6.9537E-01 5.2813E-01 - 5.0119E+00 1.8956E+00 1.5125E+00 4.7720E-01 3.6165E-01 - 5.6234E+00 1.3669E+00 1.0775E+00 3.2210E-01 2.4523E-01 - 6.3096E+00 9.8013E-01 7.7174E-01 2.1492E-01 1.6434E-01 - 7.0795E+00 7.0012E-01 5.4714E-01 1.4461E-01 1.1043E-01 - 7.9433E+00 5.0044E-01 3.8331E-01 9.8947E-02 7.5424E-02 - 8.9125E+00 3.5648E-01 2.7393E-01 6.6621E-02 5.0525E-02 - 1.0000E+01 2.5666E-01 1.9390E-01 4.4304E-02 3.3515E-02 - 1.1220E+01 1.8232E-01 1.3762E-01 2.9544E-02 2.2327E-02 - 1.2589E+01 1.3030E-01 9.7457E-02 1.9599E-02 1.4884E-02 - 1.4125E+01 9.3051E-02 6.9324E-02 1.2979E-02 1.0111E-02 - 1.5849E+01 6.6041E-02 4.9199E-02 8.7323E-03 6.7952E-03 - 1.7783E+01 4.7319E-02 3.4449E-02 5.8495E-03 4.4816E-03 - 1.9953E+01 3.3800E-02 2.4564E-02 3.8487E-03 2.9859E-03 - 2.2387E+01 2.3870E-02 1.7633E-02 2.5624E-03 2.0236E-03 - 2.5119E+01 1.6623E-02 1.2377E-02 1.7268E-03 1.3298E-03 - 2.8184E+01 1.1710E-02 8.5459E-03 1.1898E-03 9.0258E-04 - 3.1623E+01 8.3666E-03 6.0176E-03 7.5170E-04 6.0121E-04 - 3.5481E+01 5.9252E-03 4.2454E-03 5.0273E-04 4.0031E-04 - 3.9811E+01 4.1812E-03 2.9862E-03 3.3403E-04 2.6900E-04 - 4.4668E+01 2.9403E-03 2.0905E-03 2.2377E-04 1.8192E-04 - 5.0119E+01 2.0730E-03 1.4619E-03 1.4887E-04 1.2153E-04 - 5.6234E+01 1.4595E-03 1.0212E-03 1.0023E-04 8.1968E-05 - 6.3096E+01 1.0236E-03 7.1367E-04 6.8581E-05 5.5821E-05 - 7.0795E+01 7.1935E-04 4.9827E-04 4.6310E-05 3.7145E-05 - 7.9433E+01 5.0384E-04 3.4905E-04 3.0818E-05 2.5342E-05 - 8.9125E+01 3.5489E-04 2.4421E-04 2.0529E-05 1.7024E-05 - 1.0000E+02 2.4782E-04 1.7008E-04 1.4276E-05 1.1523E-05 - 1.1220E+02 1.7317E-04 1.1769E-04 9.5931E-06 7.7399E-06 - 1.2589E+02 1.2154E-04 8.1977E-05 6.4641E-06 5.2669E-06 - 1.4125E+02 8.4965E-05 5.6501E-05 4.4239E-06 3.5603E-06 - 1.5849E+02 5.9216E-05 3.9163E-05 2.9512E-06 2.3813E-06 - 1.7783E+02 4.1365E-05 2.7329E-05 2.0272E-06 1.6124E-06 - 1.9953E+02 2.8804E-05 1.8905E-05 1.3958E-06 1.0742E-06 - 2.2387E+02 2.0097E-05 1.3100E-05 9.2632E-07 7.2444E-07 - 2.5119E+02 1.3990E-05 9.0134E-06 6.0409E-07 4.9934E-07 - 2.8184E+02 9.7000E-06 6.2051E-06 4.1313E-07 3.2401E-07 - 3.1623E+02 6.7657E-06 4.3271E-06 2.8622E-07 2.2573E-07 - 3.5481E+02 4.6541E-06 2.9602E-06 1.9934E-07 1.5064E-07 - 3.9811E+02 3.2315E-06 2.0270E-06 1.3373E-07 1.0308E-07 - 4.4668E+02 2.2369E-06 1.3961E-06 8.8838E-08 7.0210E-08 - 5.0119E+02 1.5378E-06 9.5819E-07 6.0972E-08 4.6638E-08 - 5.6234E+02 1.0641E-06 6.5906E-07 4.0960E-08 3.1283E-08 - 6.3096E+02 7.2566E-07 4.4892E-07 2.6650E-08 2.1278E-08 - 7.0795E+02 4.9662E-07 3.0565E-07 1.8141E-08 1.3795E-08 - 7.9433E+02 3.3775E-07 2.0571E-07 1.2459E-08 8.7848E-09 - 8.9125E+02 2.3105E-07 1.3991E-07 8.0635E-09 5.9511E-09 - 1.0000E+03 1.5918E-07 9.5609E-08 5.2029E-09 4.1398E-09 - 1.1220E+03 1.0560E-07 6.3965E-08 3.4933E-09 2.8285E-09 - 1.2589E+03 7.2376E-08 4.2814E-08 2.3692E-09 1.8772E-09 - 1.4125E+03 4.9227E-08 2.8864E-08 1.5394E-09 1.2379E-09 - 1.5849E+03 3.2824E-08 1.9488E-08 1.0020E-09 8.0081E-10 - 1.7783E+03 2.2091E-08 1.2888E-08 7.0454E-10 4.8009E-10 - 1.9953E+03 1.4897E-08 8.6412E-09 4.7758E-10 3.1530E-10 - 2.2387E+03 9.9574E-09 5.7868E-09 2.9472E-10 2.2012E-10 - 2.5119E+03 6.5712E-09 3.8011E-09 1.9781E-10 1.5204E-10 - 2.8184E+03 4.3603E-09 2.5214E-09 1.3659E-10 1.0174E-10 - 3.1623E+03 3.0409E-09 1.7363E-09 8.9481E-11 6.3142E-11 - 3.5481E+03 1.9696E-09 1.1270E-09 6.0322E-11 4.1953E-11 - 3.9811E+03 1.3008E-09 7.3582E-10 4.1519E-11 2.7737E-11 - 4.4668E+03 8.6127E-10 4.8885E-10 2.8266E-11 1.7534E-11 - 5.0119E+03 5.7161E-10 3.2196E-10 1.6475E-11 1.1812E-11 - 5.6234E+03 3.7685E-10 2.1107E-10 1.0376E-11 8.9279E-12 - 6.3096E+03 2.4628E-10 1.4076E-10 6.9959E-12 5.0687E-12 - 7.0795E+03 1.6164E-10 9.1956E-11 4.5947E-12 3.4145E-12 - 7.9433E+03 1.0738E-10 5.8616E-11 3.1392E-12 2.0005E-12 - 8.9125E+03 7.0466E-11 3.8086E-11 2.0947E-12 1.2417E-12 - 1.0000E+04 4.6438E-11 2.5474E-11 1.3003E-12 8.3081E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.8725E+03 8.9671E+03 4.3881E+03 4.1385E+03 - 1.1220E-01 8.0229E+03 8.0889E+03 3.9388E+03 3.7043E+03 - 1.2589E-01 7.2027E+03 7.2157E+03 3.4947E+03 3.2723E+03 - 1.4125E-01 6.3741E+03 6.3866E+03 3.0776E+03 2.8518E+03 - 1.5849E-01 5.5720E+03 5.5851E+03 2.6824E+03 2.4531E+03 - 1.7783E-01 4.8033E+03 4.8083E+03 2.3216E+03 2.0894E+03 - 1.9953E-01 4.0773E+03 4.0852E+03 1.9813E+03 1.7613E+03 - 2.2387E-01 3.4254E+03 3.4149E+03 1.6625E+03 1.4654E+03 - 2.5119E-01 2.8413E+03 2.8150E+03 1.3805E+03 1.2082E+03 - 2.8184E-01 2.3282E+03 2.3003E+03 1.1381E+03 9.8020E+02 - 3.1623E-01 1.8812E+03 1.8563E+03 9.2486E+02 7.8579E+02 - 3.5481E-01 1.5031E+03 1.4798E+03 7.3817E+02 6.2659E+02 - 3.9811E-01 1.1969E+03 1.1696E+03 5.8528E+02 4.9226E+02 - 4.4668E-01 9.3697E+02 9.1628E+02 4.5633E+02 3.8271E+02 - 5.0119E-01 7.2672E+02 7.1284E+02 3.5328E+02 2.9441E+02 - 5.6234E-01 5.6256E+02 5.4659E+02 2.7393E+02 2.2256E+02 - 6.3096E-01 4.3327E+02 4.1614E+02 2.0844E+02 1.6677E+02 - 7.0795E-01 3.3204E+02 3.1635E+02 1.5626E+02 1.2419E+02 - 7.9433E-01 2.5103E+02 2.3640E+02 1.1621E+02 9.2618E+01 - 8.9125E-01 1.8902E+02 1.7708E+02 8.6283E+01 6.9071E+01 - 1.0000E+00 1.4251E+02 1.3247E+02 6.3593E+01 5.0799E+01 - 1.1220E+00 1.0661E+02 9.8258E+01 4.6710E+01 3.6767E+01 - 1.2589E+00 7.9503E+01 7.2833E+01 3.3990E+01 2.6516E+01 - 1.4125E+00 5.9578E+01 5.3628E+01 2.4533E+01 1.9203E+01 - 1.5849E+00 4.4511E+01 3.9293E+01 1.7666E+01 1.3792E+01 - 1.7783E+00 3.2740E+01 2.8981E+01 1.2630E+01 9.8358E+00 - 1.9953E+00 2.4035E+01 2.1177E+01 8.9265E+00 6.9665E+00 - 2.2387E+00 1.7707E+01 1.5215E+01 6.3161E+00 4.8462E+00 - 2.5119E+00 1.2972E+01 1.0947E+01 4.4561E+00 3.4014E+00 - 2.8184E+00 9.5023E+00 7.8800E+00 3.0847E+00 2.3811E+00 - 3.1623E+00 6.9072E+00 5.6935E+00 2.1459E+00 1.6523E+00 - 3.5481E+00 5.0119E+00 4.0714E+00 1.4718E+00 1.1285E+00 - 3.9811E+00 3.6156E+00 2.9235E+00 1.0103E+00 7.7353E-01 - 4.4668E+00 2.5908E+00 2.0856E+00 6.9209E-01 5.2803E-01 - 5.0119E+00 1.8743E+00 1.4878E+00 4.7332E-01 3.5764E-01 - 5.6234E+00 1.3607E+00 1.0559E+00 3.2366E-01 2.4099E-01 - 6.3096E+00 9.7228E-01 7.5016E-01 2.2013E-01 1.6406E-01 - 7.0795E+00 6.9588E-01 5.3615E-01 1.4791E-01 1.1204E-01 - 7.9433E+00 5.0316E-01 3.8320E-01 1.0028E-01 7.6964E-02 - 8.9125E+00 3.5839E-01 2.7139E-01 6.7381E-02 5.1143E-02 - 1.0000E+01 2.5513E-01 1.9347E-01 4.4458E-02 3.3257E-02 - 1.1220E+01 1.8265E-01 1.3722E-01 2.9460E-02 2.2201E-02 - 1.2589E+01 1.3012E-01 9.6854E-02 1.9639E-02 1.5030E-02 - 1.4125E+01 9.1900E-02 6.8456E-02 1.3057E-02 1.0069E-02 - 1.5849E+01 6.5309E-02 4.7986E-02 8.7875E-03 6.6652E-03 - 1.7783E+01 4.6399E-02 3.3839E-02 5.8921E-03 4.4709E-03 - 1.9953E+01 3.2982E-02 2.4048E-02 3.8680E-03 3.0252E-03 - 2.2387E+01 2.3548E-02 1.7007E-02 2.5624E-03 1.9873E-03 - 2.5119E+01 1.6650E-02 1.2065E-02 1.7201E-03 1.3150E-03 - 2.8184E+01 1.1670E-02 8.4847E-03 1.1605E-03 9.1753E-04 - 3.1623E+01 8.3649E-03 6.0362E-03 7.6552E-04 5.9871E-04 - 3.5481E+01 5.9086E-03 4.2397E-03 5.1159E-04 3.9634E-04 - 3.9811E+01 4.1939E-03 2.9783E-03 3.4074E-04 2.6778E-04 - 4.4668E+01 2.9515E-03 2.0905E-03 2.2755E-04 1.7965E-04 - 5.0119E+01 2.0676E-03 1.4725E-03 1.5249E-04 1.2232E-04 - 5.6234E+01 1.4578E-03 1.0277E-03 1.0275E-04 8.4447E-05 - 6.3096E+01 1.0278E-03 7.1507E-04 6.8903E-05 5.6525E-05 - 7.0795E+01 7.2136E-04 5.0174E-04 4.5768E-05 3.7503E-05 - 7.9433E+01 5.0559E-04 3.5186E-04 3.0478E-05 2.5802E-05 - 8.9125E+01 3.5488E-04 2.4463E-04 2.0333E-05 1.7464E-05 - 1.0000E+02 2.4856E-04 1.6977E-04 1.4122E-05 1.1681E-05 - 1.1220E+02 1.7314E-04 1.1817E-04 9.6661E-06 7.8659E-06 - 1.2589E+02 1.2133E-04 8.2200E-05 6.5390E-06 5.2872E-06 - 1.4125E+02 8.4771E-05 5.7060E-05 4.4003E-06 3.4991E-06 - 1.5849E+02 5.9121E-05 3.9602E-05 2.9665E-06 2.4087E-06 - 1.7783E+02 4.1357E-05 2.7483E-05 2.0383E-06 1.6228E-06 - 1.9953E+02 2.8809E-05 1.9063E-05 1.3911E-06 1.0817E-06 - 2.2387E+02 2.0013E-05 1.3179E-05 9.2208E-07 7.3532E-07 - 2.5119E+02 1.3927E-05 9.1247E-06 6.2514E-07 4.9824E-07 - 2.8184E+02 9.7562E-06 6.2350E-06 4.3202E-07 3.3893E-07 - 3.1623E+02 6.7603E-06 4.2876E-06 2.8701E-07 2.3127E-07 - 3.5481E+02 4.6570E-06 2.9425E-06 1.9785E-07 1.5433E-07 - 3.9811E+02 3.2150E-06 2.0365E-06 1.3379E-07 1.0020E-07 - 4.4668E+02 2.2232E-06 1.3928E-06 8.9817E-08 6.7423E-08 - 5.0119E+02 1.5308E-06 9.5651E-07 6.1674E-08 4.7268E-08 - 5.6234E+02 1.0547E-06 6.5865E-07 4.0296E-08 3.0710E-08 - 6.3096E+02 7.1944E-07 4.4747E-07 2.7808E-08 2.0328E-08 - 7.0795E+02 4.9362E-07 3.0311E-07 1.9017E-08 1.3747E-08 - 7.9433E+02 3.3864E-07 2.0796E-07 1.2109E-08 9.2662E-09 - 8.9125E+02 2.3271E-07 1.4316E-07 8.1234E-09 6.2089E-09 - 1.0000E+03 1.5967E-07 9.6120E-08 5.3328E-09 4.1091E-09 - 1.1220E+03 1.0574E-07 6.4052E-08 3.5526E-09 2.7899E-09 - 1.2589E+03 7.1653E-08 4.3537E-08 2.3817E-09 1.7179E-09 - 1.4125E+03 4.8812E-08 2.9613E-08 1.5511E-09 1.1720E-09 - 1.5849E+03 3.2648E-08 1.9887E-08 1.0424E-09 8.0151E-10 - 1.7783E+03 2.2133E-08 1.3142E-08 6.7199E-10 5.3175E-10 - 1.9953E+03 1.4912E-08 8.7280E-09 4.5968E-10 3.3713E-10 - 2.2387E+03 9.9658E-09 5.8049E-09 3.1037E-10 2.2415E-10 - 2.5119E+03 6.6438E-09 3.8878E-09 2.0197E-10 1.5882E-10 - 2.8184E+03 4.3766E-09 2.6017E-09 1.3939E-10 9.7840E-11 - 3.1623E+03 3.0154E-09 1.7713E-09 8.5322E-11 6.5473E-11 - 3.5481E+03 1.9559E-09 1.1318E-09 5.4117E-11 4.5849E-11 - 3.9811E+03 1.2953E-09 7.3453E-10 3.7195E-11 2.9369E-11 - 4.4668E+03 8.5999E-10 4.8069E-10 2.6742E-11 1.7956E-11 - 5.0119E+03 5.6468E-10 3.2271E-10 1.7569E-11 1.2153E-11 - 5.6234E+03 3.7261E-10 2.1522E-10 1.0535E-11 8.2096E-12 - 6.3096E+03 2.4612E-10 1.3719E-10 7.0761E-12 5.0187E-12 - 7.0795E+03 1.6107E-10 8.9902E-11 4.7359E-12 3.4009E-12 - 7.9433E+03 1.0701E-10 5.9943E-11 3.1109E-12 2.1414E-12 - 8.9125E+03 7.0468E-11 3.9224E-11 1.9907E-12 1.3521E-12 - 1.0000E+04 4.6548E-11 2.5407E-11 1.2730E-12 9.1364E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.4602E+03 9.5665E+03 4.6756E+03 4.3781E+03 - 1.1220E-01 8.4898E+03 8.5935E+03 4.1932E+03 3.9038E+03 - 1.2589E-01 7.5831E+03 7.6467E+03 3.7236E+03 3.4322E+03 - 1.4125E-01 6.7275E+03 6.7516E+03 3.2702E+03 2.9883E+03 - 1.5849E-01 5.8820E+03 5.8763E+03 2.8450E+03 2.5797E+03 - 1.7783E-01 5.0534E+03 5.0509E+03 2.4560E+03 2.1897E+03 - 1.9953E-01 4.2844E+03 4.2815E+03 2.0906E+03 1.8357E+03 - 2.2387E-01 3.5863E+03 3.5858E+03 1.7469E+03 1.5264E+03 - 2.5119E-01 2.9519E+03 2.9528E+03 1.4487E+03 1.2555E+03 - 2.8184E-01 2.4038E+03 2.3927E+03 1.1868E+03 1.0159E+03 - 3.1623E-01 1.9425E+03 1.9264E+03 9.5723E+02 8.1246E+02 - 3.5481E-01 1.5518E+03 1.5324E+03 7.6747E+02 6.3897E+02 - 3.9811E-01 1.2243E+03 1.2075E+03 6.0553E+02 4.9927E+02 - 4.4668E-01 9.6073E+02 9.4276E+02 4.7155E+02 3.8928E+02 - 5.0119E-01 7.4532E+02 7.2608E+02 3.6643E+02 2.9781E+02 - 5.6234E-01 5.7325E+02 5.5207E+02 2.7909E+02 2.2647E+02 - 6.3096E-01 4.3809E+02 4.1893E+02 2.0943E+02 1.7150E+02 - 7.0795E-01 3.3219E+02 3.1779E+02 1.5771E+02 1.2884E+02 - 7.9433E-01 2.5252E+02 2.3815E+02 1.1834E+02 9.4641E+01 - 8.9125E-01 1.9054E+02 1.7819E+02 8.7633E+01 6.8981E+01 - 1.0000E+00 1.4340E+02 1.3401E+02 6.4561E+01 5.0496E+01 - 1.1220E+00 1.0736E+02 9.9306E+01 4.7089E+01 3.6938E+01 - 1.2589E+00 8.0195E+01 7.3049E+01 3.4427E+01 2.6998E+01 - 1.4125E+00 5.9734E+01 5.3875E+01 2.4794E+01 1.9502E+01 - 1.5849E+00 4.4247E+01 3.9542E+01 1.7648E+01 1.3908E+01 - 1.7783E+00 3.2766E+01 2.8910E+01 1.2591E+01 9.7869E+00 - 1.9953E+00 2.4181E+01 2.1132E+01 9.0207E+00 6.8831E+00 - 2.2387E+00 1.7691E+01 1.5177E+01 6.4302E+00 4.8518E+00 - 2.5119E+00 1.2991E+01 1.0973E+01 4.5179E+00 3.4015E+00 - 2.8184E+00 9.5648E+00 7.9718E+00 3.0952E+00 2.3583E+00 - 3.1623E+00 6.9287E+00 5.7097E+00 2.1407E+00 1.6389E+00 - 3.5481E+00 5.0199E+00 4.1050E+00 1.4848E+00 1.1429E+00 - 3.9811E+00 3.6233E+00 2.9401E+00 1.0182E+00 7.8645E-01 - 4.4668E+00 2.6235E+00 2.1008E+00 6.9424E-01 5.3056E-01 - 5.0119E+00 1.8871E+00 1.5093E+00 4.7037E-01 3.5866E-01 - 5.6234E+00 1.3593E+00 1.0652E+00 3.1880E-01 2.4438E-01 - 6.3096E+00 9.8398E-01 7.5793E-01 2.1953E-01 1.6529E-01 - 7.0795E+00 7.0342E-01 5.3946E-01 1.4805E-01 1.1245E-01 - 7.9433E+00 4.9972E-01 3.8028E-01 9.8852E-02 7.5596E-02 - 8.9125E+00 3.6182E-01 2.7159E-01 6.4601E-02 5.0902E-02 - 1.0000E+01 2.5659E-01 1.9313E-01 4.4413E-02 3.3122E-02 - 1.1220E+01 1.8241E-01 1.3687E-01 2.9599E-02 2.2450E-02 - 1.2589E+01 1.3062E-01 9.6734E-02 1.9680E-02 1.5144E-02 - 1.4125E+01 9.3249E-02 6.8632E-02 1.3245E-02 1.0087E-02 - 1.5849E+01 6.5703E-02 4.8501E-02 8.5312E-03 6.6513E-03 - 1.7783E+01 4.6435E-02 3.4437E-02 5.7134E-03 4.4561E-03 - 1.9953E+01 3.3123E-02 2.4591E-02 3.9861E-03 3.0447E-03 - 2.2387E+01 2.3647E-02 1.7491E-02 2.6310E-03 2.0412E-03 - 2.5119E+01 1.6823E-02 1.2395E-02 1.7278E-03 1.4072E-03 - 2.8184E+01 1.1685E-02 8.7047E-03 1.1822E-03 9.4204E-04 - 3.1623E+01 8.3772E-03 6.0361E-03 7.6301E-04 5.9591E-04 - 3.5481E+01 5.9099E-03 4.2458E-03 5.0969E-04 3.9834E-04 - 3.9811E+01 4.1813E-03 2.9828E-03 3.4173E-04 2.6665E-04 - 4.4668E+01 2.9401E-03 2.0880E-03 2.2661E-04 1.8064E-04 - 5.0119E+01 2.0674E-03 1.4562E-03 1.4981E-04 1.2360E-04 - 5.6234E+01 1.4587E-03 1.0235E-03 1.0118E-04 8.2500E-05 - 6.3096E+01 1.0246E-03 7.1722E-04 6.9194E-05 5.5403E-05 - 7.0795E+01 7.1674E-04 5.0201E-04 4.6092E-05 3.7454E-05 - 7.9433E+01 5.0353E-04 3.5088E-04 3.0428E-05 2.5676E-05 - 8.9125E+01 3.5325E-04 2.4333E-04 2.0260E-05 1.7450E-05 - 1.0000E+02 2.4828E-04 1.6986E-04 1.4292E-05 1.1608E-05 - 1.1220E+02 1.7326E-04 1.1825E-04 9.6752E-06 7.8967E-06 - 1.2589E+02 1.2105E-04 8.2060E-05 6.4980E-06 5.3366E-06 - 1.4125E+02 8.4519E-05 5.6981E-05 4.3861E-06 3.5083E-06 - 1.5849E+02 5.8961E-05 3.9407E-05 2.9840E-06 2.3886E-06 - 1.7783E+02 4.1183E-05 2.7552E-05 2.0040E-06 1.6428E-06 - 1.9953E+02 2.8801E-05 1.9062E-05 1.3620E-06 1.1212E-06 - 2.2387E+02 1.9906E-05 1.2905E-05 9.3304E-07 7.5912E-07 - 2.5119E+02 1.3815E-05 8.9713E-06 6.0375E-07 4.9830E-07 - 2.8184E+02 9.6201E-06 6.2252E-06 4.2346E-07 3.3569E-07 - 3.1623E+02 6.7360E-06 4.3138E-06 2.9251E-07 2.2673E-07 - 3.5481E+02 4.6608E-06 2.9652E-06 1.9827E-07 1.5160E-07 - 3.9811E+02 3.2264E-06 2.0338E-06 1.3150E-07 1.0053E-07 - 4.4668E+02 2.2298E-06 1.3978E-06 8.8015E-08 6.7639E-08 - 5.0119E+02 1.5322E-06 9.6745E-07 5.9792E-08 4.4887E-08 - 5.6234E+02 1.0662E-06 6.6174E-07 4.0356E-08 3.1336E-08 - 6.3096E+02 7.2649E-07 4.4793E-07 2.6845E-08 2.1644E-08 - 7.0795E+02 4.9857E-07 3.0401E-07 1.8474E-08 1.4226E-08 - 7.9433E+02 3.4158E-07 2.0680E-07 1.2599E-08 9.1416E-09 - 8.9125E+02 2.3323E-07 1.4057E-07 8.5999E-09 5.9997E-09 - 1.0000E+03 1.5990E-07 9.6343E-08 5.5547E-09 4.0745E-09 - 1.1220E+03 1.0645E-07 6.4257E-08 3.6301E-09 2.6589E-09 - 1.2589E+03 7.1964E-08 4.3372E-08 2.4216E-09 1.7209E-09 - 1.4125E+03 4.8962E-08 2.9259E-08 1.5054E-09 1.2289E-09 - 1.5849E+03 3.3338E-08 1.9494E-08 1.0105E-09 8.0108E-10 - 1.7783E+03 2.2232E-08 1.3118E-08 6.6352E-10 5.0964E-10 - 1.9953E+03 1.4827E-08 8.7912E-09 4.4675E-10 3.4112E-10 - 2.2387E+03 9.9102E-09 5.9199E-09 3.1717E-10 2.2179E-10 - 2.5119E+03 6.6120E-09 3.9335E-09 2.1450E-10 1.5139E-10 - 2.8184E+03 4.3942E-09 2.5740E-09 1.3574E-10 9.8338E-11 - 3.1623E+03 3.0164E-09 1.7592E-09 9.1198E-11 6.5933E-11 - 3.5481E+03 1.9422E-09 1.1273E-09 5.9777E-11 4.5906E-11 - 3.9811E+03 1.2935E-09 7.4698E-10 3.5569E-11 2.9079E-11 - 4.4668E+03 8.6071E-10 4.9365E-10 2.3793E-11 1.8219E-11 - 5.0119E+03 5.7442E-10 3.2279E-10 1.5359E-11 1.1315E-11 - 5.6234E+03 3.7612E-10 2.0901E-10 1.0889E-11 7.8162E-12 - 6.3096E+03 2.4722E-10 1.3723E-10 7.3407E-12 5.3280E-12 - 7.0795E+03 1.6288E-10 8.8531E-11 4.7814E-12 3.4960E-12 - 7.9433E+03 1.0611E-10 5.8561E-11 2.8438E-12 2.2503E-12 - 8.9125E+03 6.9429E-11 3.8932E-11 2.1002E-12 1.5081E-12 - 1.0000E+04 4.6415E-11 2.4424E-11 1.2583E-12 1.0178E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8888E+03 9.9641E+03 4.9185E+03 4.5299E+03 - 1.1220E-01 8.8688E+03 8.9572E+03 4.4005E+03 4.0308E+03 - 1.2589E-01 7.8994E+03 7.9794E+03 3.9144E+03 3.5486E+03 - 1.4125E-01 6.9653E+03 7.0304E+03 3.4396E+03 3.0991E+03 - 1.5849E-01 6.0759E+03 6.1173E+03 2.9713E+03 2.6689E+03 - 1.7783E-01 5.2254E+03 5.2324E+03 2.5569E+03 2.2593E+03 - 1.9953E-01 4.4208E+03 4.4228E+03 2.1694E+03 1.8972E+03 - 2.2387E-01 3.6893E+03 3.6908E+03 1.8115E+03 1.5731E+03 - 2.5119E-01 3.0348E+03 3.0260E+03 1.4988E+03 1.2792E+03 - 2.8184E-01 2.4669E+03 2.4510E+03 1.2240E+03 1.0356E+03 - 3.1623E-01 1.9811E+03 1.9696E+03 9.8669E+02 8.2994E+02 - 3.5481E-01 1.5741E+03 1.5660E+03 7.8718E+02 6.5277E+02 - 3.9811E-01 1.2439E+03 1.2267E+03 6.1875E+02 5.0896E+02 - 4.4668E-01 9.7425E+02 9.5286E+02 4.8122E+02 3.9341E+02 - 5.0119E-01 7.5171E+02 7.3424E+02 3.7170E+02 3.0141E+02 - 5.6234E-01 5.7607E+02 5.5989E+02 2.8290E+02 2.2856E+02 - 6.3096E-01 4.4036E+02 4.2610E+02 2.1496E+02 1.7227E+02 - 7.0795E-01 3.3429E+02 3.2222E+02 1.6155E+02 1.2911E+02 - 7.9433E-01 2.5246E+02 2.4097E+02 1.1935E+02 9.5114E+01 - 8.9125E-01 1.9088E+02 1.7946E+02 8.7479E+01 6.9183E+01 - 1.0000E+00 1.4306E+02 1.3310E+02 6.4563E+01 5.0930E+01 - 1.1220E+00 1.0689E+02 9.9004E+01 4.7153E+01 3.7297E+01 - 1.2589E+00 8.0122E+01 7.3144E+01 3.4179E+01 2.7010E+01 - 1.4125E+00 5.9838E+01 5.3804E+01 2.4791E+01 1.9304E+01 - 1.5849E+00 4.4521E+01 3.9585E+01 1.7719E+01 1.3905E+01 - 1.7783E+00 3.2828E+01 2.8958E+01 1.2563E+01 9.9535E+00 - 1.9953E+00 2.4125E+01 2.1026E+01 8.9653E+00 6.9889E+00 - 2.2387E+00 1.7760E+01 1.5275E+01 6.3535E+00 4.9132E+00 - 2.5119E+00 1.3008E+01 1.1053E+01 4.4809E+00 3.4022E+00 - 2.8184E+00 9.5171E+00 8.0094E+00 3.0980E+00 2.3605E+00 - 3.1623E+00 6.9041E+00 5.7199E+00 2.1533E+00 1.6503E+00 - 3.5481E+00 5.0021E+00 4.1020E+00 1.4903E+00 1.1311E+00 - 3.9811E+00 3.6225E+00 2.9546E+00 1.0228E+00 7.7053E-01 - 4.4668E+00 2.6185E+00 2.1099E+00 7.0206E-01 5.2850E-01 - 5.0119E+00 1.8897E+00 1.5046E+00 4.7657E-01 3.6272E-01 - 5.6234E+00 1.3642E+00 1.0717E+00 3.2327E-01 2.4618E-01 - 6.3096E+00 9.8233E-01 7.6841E-01 2.1963E-01 1.6684E-01 - 7.0795E+00 7.0238E-01 5.5090E-01 1.4442E-01 1.1427E-01 - 7.9433E+00 4.9903E-01 3.9430E-01 9.5730E-02 7.5019E-02 - 8.9125E+00 3.6025E-01 2.7897E-01 6.4890E-02 5.0045E-02 - 1.0000E+01 2.5897E-01 1.9570E-01 4.4016E-02 3.3812E-02 - 1.1220E+01 1.8354E-01 1.3804E-01 2.9499E-02 2.2565E-02 - 1.2589E+01 1.3041E-01 9.8034E-02 1.9860E-02 1.4869E-02 - 1.4125E+01 9.3514E-02 6.9605E-02 1.3236E-02 1.0067E-02 - 1.5849E+01 6.6620E-02 4.9531E-02 8.6951E-03 6.7416E-03 - 1.7783E+01 4.7526E-02 3.5225E-02 5.8278E-03 4.4749E-03 - 1.9953E+01 3.3607E-02 2.4487E-02 3.9166E-03 2.9878E-03 - 2.2387E+01 2.3604E-02 1.7300E-02 2.6883E-03 2.0029E-03 - 2.5119E+01 1.6708E-02 1.2268E-02 1.7523E-03 1.3415E-03 - 2.8184E+01 1.1761E-02 8.5396E-03 1.1539E-03 8.7729E-04 - 3.1623E+01 8.3678E-03 6.0455E-03 7.5678E-04 6.0268E-04 - 3.5481E+01 5.9191E-03 4.2404E-03 5.1022E-04 4.0321E-04 - 3.9811E+01 4.1888E-03 2.9722E-03 3.4203E-04 2.6972E-04 - 4.4668E+01 2.9561E-03 2.0958E-03 2.2600E-04 1.8002E-04 - 5.0119E+01 2.0793E-03 1.4811E-03 1.5152E-04 1.2139E-04 - 5.6234E+01 1.4602E-03 1.0370E-03 1.0223E-04 8.2958E-05 - 6.3096E+01 1.0290E-03 7.2359E-04 6.9435E-05 5.5939E-05 - 7.0795E+01 7.2173E-04 5.0338E-04 4.6500E-05 3.7497E-05 - 7.9433E+01 5.0566E-04 3.5302E-04 3.0883E-05 2.5774E-05 - 8.9125E+01 3.5383E-04 2.4737E-04 2.1173E-05 1.7875E-05 - 1.0000E+02 2.4888E-04 1.7009E-04 1.4228E-05 1.1588E-05 - 1.1220E+02 1.7407E-04 1.1799E-04 9.7497E-06 7.8448E-06 - 1.2589E+02 1.2151E-04 8.2092E-05 6.5166E-06 5.4007E-06 - 1.4125E+02 8.4840E-05 5.7191E-05 4.4397E-06 3.6946E-06 - 1.5849E+02 5.9385E-05 3.9486E-05 3.0298E-06 2.4730E-06 - 1.7783E+02 4.1368E-05 2.7267E-05 2.0109E-06 1.6878E-06 - 1.9953E+02 2.8692E-05 1.8896E-05 1.3529E-06 1.1098E-06 - 2.2387E+02 2.0073E-05 1.3086E-05 9.1291E-07 7.1417E-07 - 2.5119E+02 1.4050E-05 9.0765E-06 6.2686E-07 4.9302E-07 - 2.8184E+02 9.6894E-06 6.2769E-06 4.2538E-07 3.5032E-07 - 3.1623E+02 6.7576E-06 4.2955E-06 2.8626E-07 2.3382E-07 - 3.5481E+02 4.6546E-06 2.9506E-06 1.9448E-07 1.5708E-07 - 3.9811E+02 3.2248E-06 2.0409E-06 1.2901E-07 1.0460E-07 - 4.4668E+02 2.2333E-06 1.4053E-06 8.8031E-08 7.0147E-08 - 5.0119E+02 1.5367E-06 9.6023E-07 6.1115E-08 4.6381E-08 - 5.6234E+02 1.0675E-06 6.6211E-07 4.1283E-08 3.1474E-08 - 6.3096E+02 7.2717E-07 4.4887E-07 2.7267E-08 2.1464E-08 - 7.0795E+02 5.0200E-07 3.0573E-07 1.8598E-08 1.4380E-08 - 7.9433E+02 3.4306E-07 2.0789E-07 1.2341E-08 9.6465E-09 - 8.9125E+02 2.3245E-07 1.4065E-07 8.1245E-09 6.0898E-09 - 1.0000E+03 1.5935E-07 9.6428E-08 5.3293E-09 4.1568E-09 - 1.1220E+03 1.0743E-07 6.4469E-08 3.6704E-09 2.7665E-09 - 1.2589E+03 7.2864E-08 4.2815E-08 2.3794E-09 1.8635E-09 - 1.4125E+03 4.8936E-08 2.8589E-08 1.5403E-09 1.1906E-09 - 1.5849E+03 3.2872E-08 1.9406E-08 1.0424E-09 7.3394E-10 - 1.7783E+03 2.2070E-08 1.3058E-08 7.0706E-10 5.2457E-10 - 1.9953E+03 1.5018E-08 8.7358E-09 4.8613E-10 3.3275E-10 - 2.2387E+03 1.0081E-08 5.8379E-09 3.2133E-10 2.2849E-10 - 2.5119E+03 6.7043E-09 3.9180E-09 2.1097E-10 1.5287E-10 - 2.8184E+03 4.4901E-09 2.5632E-09 1.4466E-10 9.4290E-11 - 3.1623E+03 3.0382E-09 1.7595E-09 8.9996E-11 6.7681E-11 - 3.5481E+03 1.9459E-09 1.1270E-09 6.1691E-11 4.3870E-11 - 3.9811E+03 1.2960E-09 7.4130E-10 4.0652E-11 2.7878E-11 - 4.4668E+03 8.6310E-10 4.9585E-10 2.5166E-11 1.6465E-11 - 5.0119E+03 5.6706E-10 3.2542E-10 1.6651E-11 1.0171E-11 - 5.6234E+03 3.7716E-10 2.1124E-10 1.0493E-11 7.7304E-12 - 6.3096E+03 2.4888E-10 1.3931E-10 7.1040E-12 5.3152E-12 - 7.0795E+03 1.6409E-10 9.1564E-11 4.7898E-12 3.5096E-12 - 7.9433E+03 1.0688E-10 5.9699E-11 2.8139E-12 2.0961E-12 - 8.9125E+03 6.9985E-11 3.9171E-11 1.8834E-12 1.4102E-12 - 1.0000E+04 4.6030E-11 2.5009E-11 1.3028E-12 9.7625E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.8636E+03 1.0004E+04 4.9154E+03 4.5317E+03 - 1.1220E-01 8.8354E+03 8.9854E+03 4.4122E+03 4.0443E+03 - 1.2589E-01 7.8836E+03 7.9816E+03 3.9126E+03 3.5542E+03 - 1.4125E-01 6.9679E+03 7.0348E+03 3.4214E+03 3.0949E+03 - 1.5849E-01 6.0771E+03 6.1144E+03 2.9743E+03 2.6557E+03 - 1.7783E-01 5.2191E+03 5.2357E+03 2.5648E+03 2.2475E+03 - 1.9953E-01 4.4073E+03 4.4241E+03 2.1738E+03 1.8888E+03 - 2.2387E-01 3.6853E+03 3.6783E+03 1.8182E+03 1.5697E+03 - 2.5119E-01 3.0430E+03 3.0134E+03 1.5050E+03 1.2893E+03 - 2.8184E-01 2.4764E+03 2.4521E+03 1.2262E+03 1.0436E+03 - 3.1623E-01 1.9928E+03 1.9752E+03 9.9014E+02 8.3293E+02 - 3.5481E-01 1.5841E+03 1.5690E+03 7.8764E+02 6.5722E+02 - 3.9811E-01 1.2465E+03 1.2265E+03 6.1850E+02 5.0995E+02 - 4.4668E-01 9.7046E+02 9.5523E+02 4.8049E+02 3.9494E+02 - 5.0119E-01 7.5125E+02 7.3745E+02 3.7172E+02 3.0404E+02 - 5.6234E-01 5.7913E+02 5.6208E+02 2.8330E+02 2.2871E+02 - 6.3096E-01 4.4169E+02 4.2659E+02 2.1373E+02 1.7200E+02 - 7.0795E-01 3.3580E+02 3.2180E+02 1.5994E+02 1.2907E+02 - 7.9433E-01 2.5356E+02 2.4140E+02 1.1892E+02 9.5517E+01 - 8.9125E-01 1.9038E+02 1.7986E+02 8.7823E+01 7.0271E+01 - 1.0000E+00 1.4354E+02 1.3342E+02 6.4705E+01 5.0926E+01 - 1.1220E+00 1.0717E+02 9.8822E+01 4.7020E+01 3.7242E+01 - 1.2589E+00 7.9934E+01 7.3208E+01 3.4126E+01 2.6922E+01 - 1.4125E+00 5.9725E+01 5.3847E+01 2.4626E+01 1.9264E+01 - 1.5849E+00 4.4491E+01 3.9534E+01 1.7685E+01 1.3870E+01 - 1.7783E+00 3.2835E+01 2.8896E+01 1.2642E+01 9.9122E+00 - 1.9953E+00 2.4159E+01 2.0976E+01 8.9571E+00 6.9524E+00 - 2.2387E+00 1.7745E+01 1.5255E+01 6.3330E+00 4.8529E+00 - 2.5119E+00 1.3023E+01 1.0993E+01 4.4272E+00 3.3953E+00 - 2.8184E+00 9.5080E+00 7.9782E+00 3.1128E+00 2.3511E+00 - 3.1623E+00 6.9105E+00 5.7082E+00 2.1682E+00 1.6520E+00 - 3.5481E+00 5.0028E+00 4.1107E+00 1.4806E+00 1.1429E+00 - 3.9811E+00 3.6286E+00 2.9425E+00 1.0093E+00 7.8191E-01 - 4.4668E+00 2.6203E+00 2.1075E+00 6.9429E-01 5.2990E-01 - 5.0119E+00 1.8922E+00 1.5044E+00 4.7781E-01 3.6277E-01 - 5.6234E+00 1.3648E+00 1.0703E+00 3.2121E-01 2.4664E-01 - 6.3096E+00 9.8161E-01 7.6318E-01 2.1573E-01 1.6610E-01 - 7.0795E+00 7.0373E-01 5.4323E-01 1.4879E-01 1.1370E-01 - 7.9433E+00 5.0051E-01 3.8985E-01 9.9187E-02 7.6638E-02 - 8.9125E+00 3.5666E-01 2.7552E-01 6.7079E-02 4.8640E-02 - 1.0000E+01 2.5545E-01 1.9303E-01 4.4796E-02 3.3644E-02 - 1.1220E+01 1.8291E-01 1.3730E-01 2.9968E-02 2.2741E-02 - 1.2589E+01 1.3052E-01 9.7212E-02 2.0118E-02 1.5228E-02 - 1.4125E+01 9.2744E-02 6.8965E-02 1.3362E-02 1.0285E-02 - 1.5849E+01 6.6203E-02 4.8837E-02 8.5619E-03 6.8178E-03 - 1.7783E+01 4.6856E-02 3.4472E-02 5.5998E-03 4.5010E-03 - 1.9953E+01 3.3336E-02 2.4191E-02 3.7974E-03 3.0389E-03 - 2.2387E+01 2.3901E-02 1.6955E-02 2.5882E-03 2.0535E-03 - 2.5119E+01 1.6717E-02 1.1979E-02 1.7010E-03 1.3863E-03 - 2.8184E+01 1.1827E-02 8.5273E-03 1.1193E-03 8.7929E-04 - 3.1623E+01 8.3985E-03 6.0573E-03 7.6426E-04 5.9933E-04 - 3.5481E+01 5.9166E-03 4.2460E-03 5.0571E-04 4.0143E-04 - 3.9811E+01 4.1748E-03 2.9897E-03 3.3708E-04 2.7183E-04 - 4.4668E+01 2.9611E-03 2.1014E-03 2.2655E-04 1.8353E-04 - 5.0119E+01 2.0818E-03 1.4760E-03 1.5206E-04 1.2200E-04 - 5.6234E+01 1.4628E-03 1.0292E-03 1.0217E-04 8.2547E-05 - 6.3096E+01 1.0351E-03 7.1505E-04 6.9384E-05 5.5640E-05 - 7.0795E+01 7.2494E-04 4.9942E-04 4.7094E-05 3.7527E-05 - 7.9433E+01 5.0858E-04 3.4865E-04 3.0614E-05 2.5843E-05 - 8.9125E+01 3.5675E-04 2.4386E-04 2.1314E-05 1.7885E-05 - 1.0000E+02 2.4880E-04 1.7059E-04 1.4418E-05 1.1657E-05 - 1.1220E+02 1.7389E-04 1.1859E-04 9.7558E-06 7.9002E-06 - 1.2589E+02 1.2155E-04 8.2354E-05 6.4809E-06 5.3656E-06 - 1.4125E+02 8.5128E-05 5.7040E-05 4.3232E-06 3.6143E-06 - 1.5849E+02 5.9444E-05 3.9441E-05 3.0086E-06 2.4688E-06 - 1.7783E+02 4.1376E-05 2.7430E-05 2.0311E-06 1.6417E-06 - 1.9953E+02 2.8766E-05 1.9081E-05 1.3636E-06 1.0995E-06 - 2.2387E+02 2.0065E-05 1.3139E-05 9.1752E-07 7.6783E-07 - 2.5119E+02 1.3941E-05 9.0673E-06 6.1200E-07 4.9784E-07 - 2.8184E+02 9.6819E-06 6.2330E-06 4.2070E-07 3.3331E-07 - 3.1623E+02 6.7768E-06 4.3308E-06 2.9102E-07 2.3316E-07 - 3.5481E+02 4.6903E-06 2.9745E-06 1.9895E-07 1.6027E-07 - 3.9811E+02 3.2269E-06 2.0409E-06 1.3285E-07 1.0732E-07 - 4.4668E+02 2.2169E-06 1.3967E-06 9.0903E-08 6.9486E-08 - 5.0119E+02 1.5347E-06 9.5763E-07 6.2692E-08 4.5822E-08 - 5.6234E+02 1.0624E-06 6.6289E-07 4.0853E-08 3.1976E-08 - 6.3096E+02 7.2698E-07 4.4801E-07 2.7239E-08 2.1814E-08 - 7.0795E+02 5.0062E-07 3.0587E-07 1.8763E-08 1.4413E-08 - 7.9433E+02 3.4495E-07 2.0922E-07 1.2851E-08 9.4429E-09 - 8.9125E+02 2.3428E-07 1.4016E-07 8.3925E-09 6.2409E-09 - 1.0000E+03 1.6089E-07 9.6433E-08 5.7645E-09 4.0458E-09 - 1.1220E+03 1.0804E-07 6.4942E-08 3.8113E-09 2.8001E-09 - 1.2589E+03 7.3157E-08 4.3692E-08 2.4239E-09 1.8383E-09 - 1.4125E+03 4.8812E-08 2.8907E-08 1.5732E-09 1.1546E-09 - 1.5849E+03 3.2751E-08 1.9270E-08 1.0673E-09 7.6905E-10 - 1.7783E+03 2.2230E-08 1.2970E-08 7.7396E-10 5.2396E-10 - 1.9953E+03 1.4966E-08 8.6956E-09 4.9961E-10 3.4691E-10 - 2.2387E+03 1.0049E-08 5.8060E-09 3.0611E-10 2.3719E-10 - 2.5119E+03 6.7237E-09 3.8716E-09 2.0855E-10 1.6270E-10 - 2.8184E+03 4.4176E-09 2.5770E-09 1.4164E-10 1.0256E-10 - 3.1623E+03 3.0087E-09 1.7686E-09 8.8859E-11 6.8149E-11 - 3.5481E+03 1.9441E-09 1.1334E-09 5.5993E-11 4.4816E-11 - 3.9811E+03 1.3186E-09 7.5002E-10 3.8458E-11 2.9324E-11 - 4.4668E+03 8.6717E-10 4.9199E-10 2.7405E-11 1.9606E-11 - 5.0119E+03 5.6949E-10 3.2257E-10 1.6419E-11 1.2010E-11 - 5.6234E+03 3.7706E-10 2.1645E-10 9.4364E-12 7.4005E-12 - 6.3096E+03 2.5001E-10 1.4015E-10 7.1538E-12 4.9279E-12 - 7.0795E+03 1.6653E-10 9.2157E-11 5.1508E-12 3.2975E-12 - 7.9433E+03 1.0937E-10 5.9842E-11 3.5730E-12 2.2236E-12 - 8.9125E+03 7.0584E-11 3.9525E-11 2.0070E-12 1.5859E-12 - 1.0000E+04 4.6548E-11 2.6404E-11 1.2403E-12 9.3220E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.4388E+03 9.5894E+03 4.7082E+03 4.3641E+03 - 1.1220E-01 8.4983E+03 8.6141E+03 4.2301E+03 3.8942E+03 - 1.2589E-01 7.6005E+03 7.6927E+03 3.7522E+03 3.4414E+03 - 1.4125E-01 6.7308E+03 6.7815E+03 3.2979E+03 3.0059E+03 - 1.5849E-01 5.8906E+03 5.8961E+03 2.8678E+03 2.5878E+03 - 1.7783E-01 5.0753E+03 5.0689E+03 2.4683E+03 2.1999E+03 - 1.9953E-01 4.2978E+03 4.2854E+03 2.1051E+03 1.8448E+03 - 2.2387E-01 3.6010E+03 3.5780E+03 1.7626E+03 1.5325E+03 - 2.5119E-01 2.9725E+03 2.9532E+03 1.4564E+03 1.2584E+03 - 2.8184E-01 2.4182E+03 2.4087E+03 1.1965E+03 1.0183E+03 - 3.1623E-01 1.9561E+03 1.9352E+03 9.6570E+02 8.1579E+02 - 3.5481E-01 1.5639E+03 1.5368E+03 7.6945E+02 6.4441E+02 - 3.9811E-01 1.2318E+03 1.2113E+03 6.1024E+02 5.0487E+02 - 4.4668E-01 9.6317E+02 9.4435E+02 4.7752E+02 3.9079E+02 - 5.0119E-01 7.4629E+02 7.2905E+02 3.6577E+02 2.9869E+02 - 5.6234E-01 5.7402E+02 5.5777E+02 2.8010E+02 2.2744E+02 - 6.3096E-01 4.4115E+02 4.2342E+02 2.1386E+02 1.7061E+02 - 7.0795E-01 3.3603E+02 3.2017E+02 1.6055E+02 1.2785E+02 - 7.9433E-01 2.5402E+02 2.4108E+02 1.1930E+02 9.5114E+01 - 8.9125E-01 1.9157E+02 1.8041E+02 8.7449E+01 6.9931E+01 - 1.0000E+00 1.4315E+02 1.3351E+02 6.4604E+01 5.0974E+01 - 1.1220E+00 1.0716E+02 9.9147E+01 4.7331E+01 3.7189E+01 - 1.2589E+00 8.0423E+01 7.3396E+01 3.4474E+01 2.6785E+01 - 1.4125E+00 6.0060E+01 5.3682E+01 2.4866E+01 1.9105E+01 - 1.5849E+00 4.4223E+01 3.9145E+01 1.7723E+01 1.3777E+01 - 1.7783E+00 3.2772E+01 2.8759E+01 1.2616E+01 9.8479E+00 - 1.9953E+00 2.4148E+01 2.1018E+01 8.8652E+00 6.9152E+00 - 2.2387E+00 1.7783E+01 1.5228E+01 6.3481E+00 4.8223E+00 - 2.5119E+00 1.3022E+01 1.1025E+01 4.4743E+00 3.4174E+00 - 2.8184E+00 9.4252E+00 7.9020E+00 3.0623E+00 2.3995E+00 - 3.1623E+00 6.8730E+00 5.6941E+00 2.1506E+00 1.6619E+00 - 3.5481E+00 4.9962E+00 4.1029E+00 1.4916E+00 1.1358E+00 - 3.9811E+00 3.6180E+00 2.9519E+00 1.0106E+00 7.8024E-01 - 4.4668E+00 2.6226E+00 2.1045E+00 6.9000E-01 5.3227E-01 - 5.0119E+00 1.8871E+00 1.4990E+00 4.7208E-01 3.6097E-01 - 5.6234E+00 1.3570E+00 1.0774E+00 3.1964E-01 2.4578E-01 - 6.3096E+00 9.7842E-01 7.6446E-01 2.1651E-01 1.6672E-01 - 7.0795E+00 7.0225E-01 5.3455E-01 1.4493E-01 1.1229E-01 - 7.9433E+00 5.0266E-01 3.7998E-01 9.8021E-02 7.4415E-02 - 8.9125E+00 3.5910E-01 2.7204E-01 6.6019E-02 4.9736E-02 - 1.0000E+01 2.5777E-01 1.9433E-01 4.4816E-02 3.3565E-02 - 1.1220E+01 1.8322E-01 1.3703E-01 2.9795E-02 2.2597E-02 - 1.2589E+01 1.3015E-01 9.7263E-02 1.9727E-02 1.4970E-02 - 1.4125E+01 9.2794E-02 6.9203E-02 1.3192E-02 9.8607E-03 - 1.5849E+01 6.5851E-02 4.8912E-02 8.9219E-03 6.6942E-03 - 1.7783E+01 4.6701E-02 3.4645E-02 5.7800E-03 4.4728E-03 - 1.9953E+01 3.3368E-02 2.4596E-02 3.8051E-03 2.9894E-03 - 2.2387E+01 2.3755E-02 1.7367E-02 2.6066E-03 2.0136E-03 - 2.5119E+01 1.6788E-02 1.2273E-02 1.6992E-03 1.3187E-03 - 2.8184E+01 1.1900E-02 8.6909E-03 1.1357E-03 8.8662E-04 - 3.1623E+01 8.4090E-03 6.0311E-03 7.6487E-04 5.9714E-04 - 3.5481E+01 5.9301E-03 4.2317E-03 5.1193E-04 3.9957E-04 - 3.9811E+01 4.1829E-03 2.9900E-03 3.4385E-04 2.6590E-04 - 4.4668E+01 2.9549E-03 2.0933E-03 2.2970E-04 1.8114E-04 - 5.0119E+01 2.0804E-03 1.4691E-03 1.5162E-04 1.2143E-04 - 5.6234E+01 1.4571E-03 1.0357E-03 1.0122E-04 8.2492E-05 - 6.3096E+01 1.0233E-03 7.1927E-04 6.8398E-05 5.7431E-05 - 7.0795E+01 7.2364E-04 4.9842E-04 4.6141E-05 3.8841E-05 - 7.9433E+01 5.0800E-04 3.4866E-04 3.0958E-05 2.6431E-05 - 8.9125E+01 3.5576E-04 2.4501E-04 2.0768E-05 1.7070E-05 - 1.0000E+02 2.4913E-04 1.7080E-04 1.4152E-05 1.1632E-05 - 1.1220E+02 1.7420E-04 1.1837E-04 9.4491E-06 7.8977E-06 - 1.2589E+02 1.2214E-04 8.2242E-05 6.5552E-06 5.3566E-06 - 1.4125E+02 8.5019E-05 5.7069E-05 4.5340E-06 3.5995E-06 - 1.5849E+02 5.9439E-05 3.9473E-05 3.0148E-06 2.4746E-06 - 1.7783E+02 4.1729E-05 2.7406E-05 2.0332E-06 1.6764E-06 - 1.9953E+02 2.8952E-05 1.8989E-05 1.3710E-06 1.1285E-06 - 2.2387E+02 2.0076E-05 1.3085E-05 9.1987E-07 7.6856E-07 - 2.5119E+02 1.3909E-05 9.0521E-06 6.2222E-07 5.1787E-07 - 2.8184E+02 9.5877E-06 6.2696E-06 4.2551E-07 3.3783E-07 - 3.1623E+02 6.7605E-06 4.3437E-06 2.8906E-07 2.3394E-07 - 3.5481E+02 4.6659E-06 2.9724E-06 1.8924E-07 1.6045E-07 - 3.9811E+02 3.2302E-06 2.0474E-06 1.2845E-07 1.0689E-07 - 4.4668E+02 2.2325E-06 1.3998E-06 9.0076E-08 6.9643E-08 - 5.0119E+02 1.5395E-06 9.6134E-07 6.2591E-08 4.6451E-08 - 5.6234E+02 1.0707E-06 6.6251E-07 4.1020E-08 3.1640E-08 - 6.3096E+02 7.3070E-07 4.4764E-07 2.8096E-08 2.1093E-08 - 7.0795E+02 5.0214E-07 3.0563E-07 1.9521E-08 1.3581E-08 - 7.9433E+02 3.4336E-07 2.0860E-07 1.3027E-08 8.9820E-09 - 8.9125E+02 2.3405E-07 1.4247E-07 8.4420E-09 6.1067E-09 - 1.0000E+03 1.6159E-07 9.5785E-08 5.4227E-09 4.2775E-09 - 1.1220E+03 1.0790E-07 6.4444E-08 3.7699E-09 2.9426E-09 - 1.2589E+03 7.2987E-08 4.4057E-08 2.5812E-09 1.9094E-09 - 1.4125E+03 4.8872E-08 2.9455E-08 1.6729E-09 1.2562E-09 - 1.5849E+03 3.2863E-08 1.9570E-08 1.0837E-09 8.4582E-10 - 1.7783E+03 2.2294E-08 1.3111E-08 6.9922E-10 5.6377E-10 - 1.9953E+03 1.4971E-08 8.8441E-09 4.8272E-10 3.6229E-10 - 2.2387E+03 9.9766E-09 5.8877E-09 3.4581E-10 2.2139E-10 - 2.5119E+03 6.5754E-09 3.8920E-09 2.2408E-10 1.4162E-10 - 2.8184E+03 4.4423E-09 2.5710E-09 1.3466E-10 9.5520E-11 - 3.1623E+03 3.0775E-09 1.7865E-09 9.4386E-11 5.9008E-11 - 3.5481E+03 1.9970E-09 1.1416E-09 5.8792E-11 4.0403E-11 - 3.9811E+03 1.3173E-09 7.4434E-10 3.6570E-11 2.8678E-11 - 4.4668E+03 8.7132E-10 5.0136E-10 2.5269E-11 1.8902E-11 - 5.0119E+03 5.7946E-10 3.3593E-10 1.6638E-11 1.1803E-11 - 5.6234E+03 3.7563E-10 2.2026E-10 1.1993E-11 8.2144E-12 - 6.3096E+03 2.4889E-10 1.4466E-10 7.2249E-12 5.1474E-12 - 7.0795E+03 1.6591E-10 9.4595E-11 4.6798E-12 2.9012E-12 - 7.9433E+03 1.1085E-10 6.1102E-11 2.9917E-12 2.0635E-12 - 8.9125E+03 7.2121E-11 3.9384E-11 1.9992E-12 1.5266E-12 - 1.0000E+04 4.6685E-11 2.4459E-11 1.3282E-12 8.3752E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 8.8123E+03 8.9370E+03 4.3379E+03 4.1143E+03 - 1.1220E-01 7.9635E+03 8.0546E+03 3.9213E+03 3.6739E+03 - 1.2589E-01 7.1399E+03 7.2085E+03 3.4967E+03 3.2440E+03 - 1.4125E-01 6.3407E+03 6.3754E+03 3.0824E+03 2.8351E+03 - 1.5849E-01 5.5461E+03 5.5650E+03 2.6797E+03 2.4442E+03 - 1.7783E-01 4.7813E+03 4.7972E+03 2.3193E+03 2.0776E+03 - 1.9953E-01 4.0751E+03 4.0750E+03 1.9908E+03 1.7569E+03 - 2.2387E-01 3.4274E+03 3.4097E+03 1.6708E+03 1.4688E+03 - 2.5119E-01 2.8417E+03 2.8227E+03 1.3876E+03 1.2103E+03 - 2.8184E-01 2.3221E+03 2.3063E+03 1.1416E+03 9.8099E+02 - 3.1623E-01 1.8762E+03 1.8636E+03 9.2339E+02 7.8957E+02 - 3.5481E-01 1.4985E+03 1.4875E+03 7.4064E+02 6.3126E+02 - 3.9811E-01 1.1900E+03 1.1737E+03 5.8629E+02 4.9558E+02 - 4.4668E-01 9.3952E+02 9.1703E+02 4.5963E+02 3.8096E+02 - 5.0119E-01 7.2908E+02 7.1058E+02 3.5604E+02 2.9357E+02 - 5.6234E-01 5.6215E+02 5.4737E+02 2.7232E+02 2.2487E+02 - 6.3096E-01 4.3386E+02 4.1751E+02 2.0846E+02 1.7022E+02 - 7.0795E-01 3.3128E+02 3.1698E+02 1.5649E+02 1.2718E+02 - 7.9433E-01 2.5155E+02 2.3850E+02 1.1630E+02 9.3594E+01 - 8.9125E-01 1.9043E+02 1.7780E+02 8.6661E+01 6.8876E+01 - 1.0000E+00 1.4231E+02 1.3299E+02 6.4109E+01 5.0721E+01 - 1.1220E+00 1.0708E+02 9.8791E+01 4.6688E+01 3.6916E+01 - 1.2589E+00 8.0490E+01 7.2865E+01 3.4047E+01 2.6761E+01 - 1.4125E+00 6.0058E+01 5.4034E+01 2.4720E+01 1.9350E+01 - 1.5849E+00 4.4476E+01 3.9714E+01 1.7681E+01 1.3855E+01 - 1.7783E+00 3.2709E+01 2.8972E+01 1.2737E+01 9.8343E+00 - 1.9953E+00 2.4111E+01 2.1027E+01 9.0713E+00 6.9897E+00 - 2.2387E+00 1.7776E+01 1.5211E+01 6.3550E+00 4.9622E+00 - 2.5119E+00 1.3001E+01 1.1117E+01 4.4490E+00 3.4891E+00 - 2.8184E+00 9.4304E+00 8.0166E+00 3.1374E+00 2.4148E+00 - 3.1623E+00 6.9353E+00 5.7532E+00 2.1735E+00 1.6603E+00 - 3.5481E+00 5.0417E+00 4.1325E+00 1.4941E+00 1.1427E+00 - 3.9811E+00 3.6299E+00 2.9751E+00 1.0304E+00 7.7975E-01 - 4.4668E+00 2.6300E+00 2.1297E+00 7.1035E-01 5.2904E-01 - 5.0119E+00 1.8963E+00 1.5029E+00 4.7961E-01 3.6127E-01 - 5.6234E+00 1.3655E+00 1.0654E+00 3.2089E-01 2.4681E-01 - 6.3096E+00 9.8403E-01 7.7069E-01 2.1870E-01 1.6678E-01 - 7.0795E+00 7.0146E-01 5.5454E-01 1.4840E-01 1.1126E-01 - 7.9433E+00 5.0091E-01 3.9298E-01 9.8817E-02 7.5316E-02 - 8.9125E+00 3.5656E-01 2.8002E-01 6.7472E-02 5.0953E-02 - 1.0000E+01 2.5706E-01 1.9457E-01 4.4498E-02 3.3510E-02 - 1.1220E+01 1.8308E-01 1.3692E-01 2.9353E-02 2.2550E-02 - 1.2589E+01 1.2991E-01 9.7709E-02 1.9574E-02 1.4871E-02 - 1.4125E+01 9.2761E-02 6.9060E-02 1.2972E-02 1.0217E-02 - 1.5849E+01 6.6180E-02 4.8853E-02 8.7905E-03 6.7517E-03 - 1.7783E+01 4.6890E-02 3.4733E-02 5.8833E-03 4.3014E-03 - 1.9953E+01 3.3181E-02 2.4464E-02 3.8992E-03 2.9133E-03 - 2.2387E+01 2.3769E-02 1.7183E-02 2.5408E-03 1.9555E-03 - 2.5119E+01 1.7002E-02 1.2202E-02 1.6891E-03 1.3136E-03 - 2.8184E+01 1.1983E-02 8.6098E-03 1.1329E-03 8.9338E-04 - 3.1623E+01 8.4122E-03 6.0512E-03 7.5546E-04 6.0543E-04 - 3.5481E+01 5.9490E-03 4.2633E-03 5.0716E-04 4.0238E-04 - 3.9811E+01 4.1918E-03 2.9915E-03 3.3780E-04 2.7055E-04 - 4.4668E+01 2.9669E-03 2.1027E-03 2.2830E-04 1.8302E-04 - 5.0119E+01 2.0853E-03 1.4790E-03 1.5270E-04 1.2370E-04 - 5.6234E+01 1.4558E-03 1.0286E-03 1.0368E-04 8.4099E-05 - 6.3096E+01 1.0271E-03 7.2037E-04 7.0582E-05 5.7248E-05 - 7.0795E+01 7.2232E-04 5.0754E-04 4.6858E-05 3.8220E-05 - 7.9433E+01 5.0697E-04 3.5027E-04 3.1153E-05 2.4871E-05 - 8.9125E+01 3.5595E-04 2.4290E-04 2.1076E-05 1.7035E-05 - 1.0000E+02 2.5007E-04 1.7095E-04 1.4422E-05 1.1536E-05 - 1.1220E+02 1.7475E-04 1.1896E-04 9.7314E-06 7.8837E-06 - 1.2589E+02 1.2218E-04 8.2886E-05 6.6415E-06 5.3917E-06 - 1.4125E+02 8.5282E-05 5.7547E-05 4.4831E-06 3.6367E-06 - 1.5849E+02 5.9509E-05 3.9881E-05 3.0637E-06 2.4285E-06 - 1.7783E+02 4.1434E-05 2.7635E-05 2.0613E-06 1.6177E-06 - 1.9953E+02 2.8821E-05 1.9182E-05 1.3897E-06 1.0867E-06 - 2.2387E+02 2.0155E-05 1.3223E-05 9.3777E-07 7.4813E-07 - 2.5119E+02 1.3994E-05 9.1582E-06 6.3373E-07 5.0521E-07 - 2.8184E+02 9.7367E-06 6.3819E-06 4.3137E-07 3.4434E-07 - 3.1623E+02 6.7824E-06 4.3444E-06 2.9262E-07 2.3492E-07 - 3.5481E+02 4.6857E-06 2.9829E-06 1.9752E-07 1.5589E-07 - 3.9811E+02 3.2511E-06 2.0484E-06 1.3043E-07 1.0227E-07 - 4.4668E+02 2.2282E-06 1.4083E-06 9.0101E-08 6.7932E-08 - 5.0119E+02 1.5312E-06 9.6953E-07 6.1780E-08 4.5957E-08 - 5.6234E+02 1.0709E-06 6.6430E-07 4.1249E-08 3.1230E-08 - 6.3096E+02 7.3148E-07 4.5054E-07 2.7688E-08 2.1009E-08 - 7.0795E+02 5.0008E-07 3.0694E-07 1.8091E-08 1.4372E-08 - 7.9433E+02 3.4300E-07 2.0778E-07 1.2065E-08 9.4741E-09 - 8.9125E+02 2.3314E-07 1.4101E-07 8.5521E-09 6.1447E-09 - 1.0000E+03 1.6033E-07 9.6682E-08 5.5947E-09 4.1376E-09 - 1.1220E+03 1.0805E-07 6.5051E-08 3.7967E-09 2.7389E-09 - 1.2589E+03 7.3064E-08 4.4039E-08 2.5313E-09 1.7401E-09 - 1.4125E+03 4.9320E-08 2.9621E-08 1.6548E-09 1.0941E-09 - 1.5849E+03 3.3300E-08 1.9887E-08 1.0634E-09 7.5856E-10 - 1.7783E+03 2.2428E-08 1.3275E-08 6.5305E-10 5.0609E-10 - 1.9953E+03 1.5113E-08 8.8211E-09 4.5156E-10 3.5471E-10 - 2.2387E+03 1.0110E-08 5.8324E-09 3.0154E-10 2.4652E-10 - 2.5119E+03 6.6563E-09 3.8447E-09 2.1405E-10 1.4190E-10 - 2.8184E+03 4.4350E-09 2.5973E-09 1.3476E-10 9.3486E-11 - 3.1623E+03 3.0710E-09 1.7702E-09 9.0390E-11 7.1611E-11 - 3.5481E+03 1.9888E-09 1.1344E-09 6.2613E-11 4.8411E-11 - 3.9811E+03 1.3168E-09 7.5266E-10 3.9292E-11 3.0221E-11 - 4.4668E+03 8.7095E-10 4.9618E-10 2.4428E-11 1.7730E-11 - 5.0119E+03 5.7400E-10 3.2745E-10 1.6205E-11 1.1605E-11 - 5.6234E+03 3.7795E-10 2.1876E-10 9.9980E-12 7.2329E-12 - 6.3096E+03 2.4842E-10 1.4233E-10 6.9873E-12 4.9385E-12 - 7.0795E+03 1.6314E-10 9.2423E-11 4.6868E-12 3.3645E-12 - 7.9433E+03 1.0923E-10 5.9505E-11 3.1184E-12 2.2974E-12 - 8.9125E+03 7.1489E-11 3.8686E-11 1.9816E-12 1.6876E-12 - 1.0000E+04 4.5560E-11 2.6066E-11 1.1588E-12 1.0499E-12 diff --git a/pisa_examples/resources/flux/honda-2015-spl-solmin-aa.d b/pisa_examples/resources/flux/honda-2015-spl-solmin-aa.d deleted file mode 100644 index 3d15693c1..000000000 --- a/pisa_examples/resources/flux/honda-2015-spl-solmin-aa.d +++ /dev/null @@ -1,2060 +0,0 @@ -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2001E+04 1.2116E+04 6.0562E+03 5.2780E+03 - 1.1220E-01 1.0740E+04 1.0816E+04 5.4098E+03 4.6805E+03 - 1.2589E-01 9.5284E+03 9.5736E+03 4.7709E+03 4.0952E+03 - 1.4125E-01 8.3663E+03 8.3872E+03 4.1541E+03 3.5340E+03 - 1.5849E-01 7.2390E+03 7.2444E+03 3.5787E+03 3.0111E+03 - 1.7783E-01 6.1662E+03 6.1596E+03 3.0482E+03 2.5429E+03 - 1.9953E-01 5.1759E+03 5.1639E+03 2.5633E+03 2.1181E+03 - 2.2387E-01 4.2801E+03 4.2637E+03 2.1262E+03 1.7421E+03 - 2.5119E-01 3.4840E+03 3.4676E+03 1.7410E+03 1.4183E+03 - 2.8184E-01 2.8032E+03 2.7848E+03 1.4039E+03 1.1350E+03 - 3.1623E-01 2.2313E+03 2.2099E+03 1.1182E+03 8.9702E+02 - 3.5481E-01 1.7544E+03 1.7356E+03 8.8081E+02 7.0155E+02 - 3.9811E-01 1.3677E+03 1.3470E+03 6.8410E+02 5.4192E+02 - 4.4668E-01 1.0578E+03 1.0338E+03 5.2482E+02 4.1395E+02 - 5.0119E-01 8.0939E+02 7.8740E+02 3.9819E+02 3.1292E+02 - 5.6234E-01 6.1387E+02 5.9560E+02 2.9947E+02 2.3463E+02 - 6.3096E-01 4.6401E+02 4.4669E+02 2.2311E+02 1.7432E+02 - 7.0795E-01 3.4901E+02 3.3294E+02 1.6488E+02 1.2861E+02 - 7.9433E-01 2.6172E+02 2.4771E+02 1.2108E+02 9.4398E+01 - 8.9125E-01 1.9561E+02 1.8321E+02 8.8273E+01 6.8695E+01 - 1.0000E+00 1.4586E+02 1.3505E+02 6.3863E+01 4.9533E+01 - 1.1220E+00 1.0863E+02 9.9381E+01 4.6065E+01 3.5653E+01 - 1.2589E+00 8.0796E+01 7.2930E+01 3.2995E+01 2.5581E+01 - 1.4125E+00 5.9898E+01 5.3429E+01 2.3544E+01 1.8159E+01 - 1.5849E+00 4.4224E+01 3.8980E+01 1.6735E+01 1.2903E+01 - 1.7783E+00 3.2569E+01 2.8300E+01 1.1848E+01 9.1129E+00 - 1.9953E+00 2.3917E+01 2.0517E+01 8.3531E+00 6.3733E+00 - 2.2387E+00 1.7502E+01 1.4811E+01 5.8514E+00 4.4629E+00 - 2.5119E+00 1.2764E+01 1.0656E+01 4.0717E+00 3.1003E+00 - 2.8184E+00 9.3041E+00 7.6507E+00 2.8221E+00 2.1383E+00 - 3.1623E+00 6.7519E+00 5.5036E+00 1.9421E+00 1.4764E+00 - 3.5481E+00 4.8922E+00 3.9436E+00 1.3299E+00 1.0106E+00 - 3.9811E+00 3.5405E+00 2.8186E+00 9.0710E-01 6.8706E-01 - 4.4668E+00 2.5590E+00 2.0133E+00 6.1664E-01 4.6704E-01 - 5.0119E+00 1.8450E+00 1.4393E+00 4.1884E-01 3.1695E-01 - 5.6234E+00 1.3286E+00 1.0288E+00 2.8343E-01 2.1421E-01 - 6.3096E+00 9.5491E-01 7.3277E-01 1.9061E-01 1.4394E-01 - 7.0795E+00 6.8444E-01 5.2133E-01 1.2797E-01 9.6658E-02 - 7.9433E+00 4.8953E-01 3.7016E-01 8.5530E-02 6.5043E-02 - 8.9125E+00 3.4987E-01 2.6271E-01 5.6935E-02 4.3635E-02 - 1.0000E+01 2.4951E-01 1.8620E-01 3.8317E-02 2.9152E-02 - 1.1220E+01 1.7794E-01 1.3229E-01 2.5584E-02 1.9513E-02 - 1.2589E+01 1.2699E-01 9.3896E-02 1.6987E-02 1.3000E-02 - 1.4125E+01 9.0343E-02 6.6459E-02 1.1251E-02 8.6969E-03 - 1.5849E+01 6.4277E-02 4.6992E-02 7.4967E-03 5.8347E-03 - 1.7783E+01 4.5773E-02 3.3284E-02 4.9738E-03 3.8873E-03 - 1.9953E+01 3.2436E-02 2.3617E-02 3.3007E-03 2.6108E-03 - 2.2387E+01 2.3012E-02 1.6766E-02 2.2034E-03 1.7469E-03 - 2.5119E+01 1.6383E-02 1.1801E-02 1.4659E-03 1.1706E-03 - 2.8184E+01 1.1583E-02 8.2671E-03 9.7890E-04 7.8750E-04 - 3.1623E+01 8.2020E-03 5.8551E-03 6.6537E-04 5.2729E-04 - 3.5481E+01 5.7930E-03 4.1147E-03 4.4711E-04 3.5707E-04 - 3.9811E+01 4.0931E-03 2.8932E-03 3.0027E-04 2.4149E-04 - 4.4668E+01 2.8870E-03 2.0345E-03 2.0126E-04 1.6290E-04 - 5.0119E+01 2.0327E-03 1.4271E-03 1.3576E-04 1.1025E-04 - 5.6234E+01 1.4303E-03 9.9780E-04 9.1674E-05 7.4861E-05 - 6.3096E+01 1.0046E-03 6.9810E-04 6.1946E-05 5.0605E-05 - 7.0795E+01 7.0606E-04 4.8764E-04 4.1981E-05 3.4376E-05 - 7.9433E+01 4.9593E-04 3.4112E-04 2.8619E-05 2.3319E-05 - 8.9125E+01 3.4765E-04 2.3807E-04 1.9550E-05 1.5721E-05 - 1.0000E+02 2.4307E-04 1.6541E-04 1.3177E-05 1.0743E-05 - 1.1220E+02 1.6984E-04 1.1490E-04 8.9255E-06 7.3381E-06 - 1.2589E+02 1.1877E-04 7.9889E-05 6.0575E-06 4.9939E-06 - 1.4125E+02 8.2969E-05 5.5477E-05 4.1100E-06 3.3852E-06 - 1.5849E+02 5.7893E-05 3.8435E-05 2.8018E-06 2.2951E-06 - 1.7783E+02 4.0366E-05 2.6626E-05 1.9161E-06 1.5552E-06 - 1.9953E+02 2.8163E-05 1.8453E-05 1.3065E-06 1.0561E-06 - 2.2387E+02 1.9600E-05 1.2753E-05 8.9173E-07 7.1227E-07 - 2.5119E+02 1.3640E-05 8.7909E-06 6.0568E-07 4.8262E-07 - 2.8184E+02 9.5106E-06 6.0642E-06 4.0808E-07 3.2100E-07 - 3.1623E+02 6.6020E-06 4.2052E-06 2.7665E-07 2.1941E-07 - 3.5481E+02 4.5498E-06 2.8836E-06 1.8721E-07 1.4887E-07 - 3.9811E+02 3.1475E-06 1.9839E-06 1.2626E-07 1.0043E-07 - 4.4668E+02 2.1743E-06 1.3588E-06 8.5795E-08 6.6823E-08 - 5.0119E+02 1.4975E-06 9.2850E-07 5.7850E-08 4.4853E-08 - 5.6234E+02 1.0377E-06 6.4088E-07 3.8670E-08 3.0030E-08 - 6.3096E+02 7.0735E-07 4.3531E-07 2.6049E-08 1.9995E-08 - 7.0795E+02 4.8378E-07 2.9661E-07 1.7484E-08 1.3399E-08 - 7.9433E+02 3.3060E-07 2.0164E-07 1.1787E-08 8.9795E-09 - 8.9125E+02 2.2535E-07 1.3653E-07 7.8606E-09 5.9382E-09 - 1.0000E+03 1.5479E-07 9.3048E-08 5.2478E-09 3.9332E-09 - 1.1220E+03 1.0422E-07 6.2330E-08 3.4822E-09 2.6640E-09 - 1.2589E+03 7.0498E-08 4.1999E-08 2.3057E-09 1.7774E-09 - 1.4125E+03 4.7629E-08 2.8208E-08 1.5558E-09 1.1576E-09 - 1.5849E+03 3.2103E-08 1.8881E-08 1.0435E-09 7.6832E-10 - 1.7783E+03 2.1538E-08 1.2641E-08 6.8047E-10 5.1076E-10 - 1.9953E+03 1.4453E-08 8.4688E-09 4.5401E-10 3.3557E-10 - 2.2387E+03 9.6623E-09 5.6494E-09 3.0198E-10 2.1832E-10 - 2.5119E+03 6.4658E-09 3.7436E-09 2.0228E-10 1.4342E-10 - 2.8184E+03 4.3006E-09 2.4846E-09 1.3407E-10 9.6077E-11 - 3.1623E+03 2.9241E-09 1.6894E-09 8.5752E-11 6.2913E-11 - 3.5481E+03 1.9002E-09 1.0926E-09 5.5724E-11 4.0787E-11 - 3.9811E+03 1.2637E-09 7.2169E-10 3.7172E-11 2.6826E-11 - 4.4668E+03 8.3534E-10 4.7777E-10 2.4498E-11 1.7631E-11 - 5.0119E+03 5.5092E-10 3.1398E-10 1.6019E-11 1.1360E-11 - 5.6234E+03 3.6399E-10 2.0554E-10 1.0290E-11 7.3803E-12 - 6.3096E+03 2.3990E-10 1.3554E-10 6.9013E-12 5.0361E-12 - 7.0795E+03 1.5771E-10 8.8690E-11 4.4149E-12 3.2702E-12 - 7.9433E+03 1.0343E-10 5.7884E-11 2.8406E-12 2.0935E-12 - 8.9125E+03 6.7890E-11 3.7902E-11 1.8922E-12 1.3537E-12 - 1.0000E+04 4.4742E-11 2.4609E-11 1.2741E-12 8.8027E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2365E+04 1.2485E+04 6.2527E+03 5.4589E+03 - 1.1220E-01 1.1023E+04 1.1108E+04 5.5736E+03 4.8309E+03 - 1.2589E-01 9.7504E+03 9.7973E+03 4.9021E+03 4.2187E+03 - 1.4125E-01 8.5299E+03 8.5555E+03 4.2649E+03 3.6396E+03 - 1.5849E-01 7.3651E+03 7.3772E+03 3.6721E+03 3.1057E+03 - 1.7783E-01 6.2715E+03 6.2670E+03 3.1286E+03 2.6197E+03 - 1.9953E-01 5.2568E+03 5.2456E+03 2.6345E+03 2.1837E+03 - 2.2387E-01 4.3403E+03 4.3296E+03 2.1890E+03 1.7974E+03 - 2.5119E-01 3.5357E+03 3.5227E+03 1.7950E+03 1.4627E+03 - 2.8184E-01 2.8461E+03 2.8320E+03 1.4522E+03 1.1748E+03 - 3.1623E-01 2.2668E+03 2.2515E+03 1.1602E+03 9.3244E+02 - 3.5481E-01 1.7865E+03 1.7691E+03 9.1594E+02 7.3040E+02 - 3.9811E-01 1.3929E+03 1.3767E+03 7.1347E+02 5.6502E+02 - 4.4668E-01 1.0775E+03 1.0606E+03 5.4875E+02 4.3355E+02 - 5.0119E-01 8.2692E+02 8.1045E+02 4.1881E+02 3.2931E+02 - 5.6234E-01 6.2830E+02 6.1333E+02 3.1640E+02 2.4837E+02 - 6.3096E-01 4.7497E+02 4.6014E+02 2.3670E+02 1.8517E+02 - 7.0795E-01 3.5835E+02 3.4314E+02 1.7551E+02 1.3663E+02 - 7.9433E-01 2.6877E+02 2.5525E+02 1.2923E+02 1.0053E+02 - 8.9125E-01 2.0098E+02 1.8965E+02 9.4577E+01 7.3480E+01 - 1.0000E+00 1.5006E+02 1.4022E+02 6.8794E+01 5.3407E+01 - 1.1220E+00 1.1164E+02 1.0318E+02 4.9743E+01 3.8567E+01 - 1.2589E+00 8.3009E+01 7.5796E+01 3.5753E+01 2.7681E+01 - 1.4125E+00 6.1723E+01 5.5630E+01 2.5588E+01 1.9813E+01 - 1.5849E+00 4.5678E+01 4.0639E+01 1.8267E+01 1.4090E+01 - 1.7783E+00 3.3604E+01 2.9514E+01 1.2950E+01 9.9905E+00 - 1.9953E+00 2.4666E+01 2.1408E+01 9.1523E+00 7.0417E+00 - 2.2387E+00 1.8060E+01 1.5496E+01 6.4356E+00 4.9178E+00 - 2.5119E+00 1.3169E+01 1.1133E+01 4.4854E+00 3.4351E+00 - 2.8184E+00 9.5767E+00 7.9903E+00 3.1185E+00 2.3751E+00 - 3.1623E+00 6.9527E+00 5.7395E+00 2.1538E+00 1.6388E+00 - 3.5481E+00 5.0371E+00 4.1080E+00 1.4836E+00 1.1226E+00 - 3.9811E+00 3.6425E+00 2.9379E+00 1.0171E+00 7.6716E-01 - 4.4668E+00 2.6246E+00 2.0985E+00 6.9164E-01 5.2311E-01 - 5.0119E+00 1.8923E+00 1.4995E+00 4.6765E-01 3.5262E-01 - 5.6234E+00 1.3626E+00 1.0700E+00 3.1664E-01 2.3888E-01 - 6.3096E+00 9.7823E-01 7.6078E-01 2.1344E-01 1.6194E-01 - 7.0795E+00 7.0139E-01 5.4124E-01 1.4348E-01 1.0860E-01 - 7.9433E+00 5.0289E-01 3.8516E-01 9.6652E-02 7.2867E-02 - 8.9125E+00 3.5924E-01 2.7408E-01 6.4911E-02 4.9111E-02 - 1.0000E+01 2.5646E-01 1.9394E-01 4.3228E-02 3.2699E-02 - 1.1220E+01 1.8267E-01 1.3736E-01 2.8847E-02 2.1862E-02 - 1.2589E+01 1.3009E-01 9.7061E-02 1.9246E-02 1.4654E-02 - 1.4125E+01 9.2795E-02 6.8818E-02 1.2860E-02 9.8378E-03 - 1.5849E+01 6.6086E-02 4.8845E-02 8.5075E-03 6.4977E-03 - 1.7783E+01 4.6990E-02 3.4620E-02 5.6326E-03 4.3477E-03 - 1.9953E+01 3.3420E-02 2.4545E-02 3.7772E-03 2.9463E-03 - 2.2387E+01 2.3792E-02 1.7368E-02 2.5113E-03 1.9469E-03 - 2.5119E+01 1.6929E-02 1.2221E-02 1.6648E-03 1.3238E-03 - 2.8184E+01 1.2026E-02 8.5671E-03 1.1171E-03 8.8556E-04 - 3.1623E+01 8.4938E-03 6.1141E-03 7.4592E-04 5.8946E-04 - 3.5481E+01 6.0113E-03 4.3078E-03 5.0019E-04 3.9625E-04 - 3.9811E+01 4.2465E-03 3.0298E-03 3.3506E-04 2.6692E-04 - 4.4668E+01 2.9945E-03 2.1306E-03 2.2473E-04 1.8030E-04 - 5.0119E+01 2.1116E-03 1.4967E-03 1.5093E-04 1.2132E-04 - 5.6234E+01 1.4887E-03 1.0479E-03 1.0153E-04 8.2224E-05 - 6.3096E+01 1.0470E-03 7.3312E-04 6.8447E-05 5.5796E-05 - 7.0795E+01 7.3694E-04 5.1216E-04 4.5758E-05 3.7612E-05 - 7.9433E+01 5.1851E-04 3.5751E-04 3.0999E-05 2.5447E-05 - 8.9125E+01 3.6270E-04 2.4909E-04 2.1256E-05 1.7340E-05 - 1.0000E+02 2.5446E-04 1.7449E-04 1.4329E-05 1.1777E-05 - 1.1220E+02 1.7819E-04 1.2138E-04 9.7326E-06 7.9830E-06 - 1.2589E+02 1.2469E-04 8.4289E-05 6.6324E-06 5.4196E-06 - 1.4125E+02 8.7125E-05 5.8537E-05 4.5024E-06 3.6697E-06 - 1.5849E+02 6.0973E-05 4.0631E-05 3.0632E-06 2.4915E-06 - 1.7783E+02 4.2567E-05 2.8198E-05 2.0708E-06 1.6952E-06 - 1.9953E+02 2.9626E-05 1.9552E-05 1.3987E-06 1.1540E-06 - 2.2387E+02 2.0616E-05 1.3494E-05 9.5257E-07 7.8581E-07 - 2.5119E+02 1.4357E-05 9.3209E-06 6.4738E-07 5.2269E-07 - 2.8184E+02 1.0003E-05 6.4684E-06 4.4045E-07 3.5034E-07 - 3.1623E+02 6.9627E-06 4.4803E-06 3.0212E-07 2.3987E-07 - 3.5481E+02 4.8098E-06 3.0754E-06 2.0483E-07 1.5992E-07 - 3.9811E+02 3.3276E-06 2.1158E-06 1.3822E-07 1.0737E-07 - 4.4668E+02 2.2999E-06 1.4541E-06 9.2965E-08 7.2822E-08 - 5.0119E+02 1.5885E-06 9.9629E-07 6.2631E-08 4.8826E-08 - 5.6234E+02 1.1039E-06 6.8595E-07 4.2163E-08 3.3139E-08 - 6.3096E+02 7.5668E-07 4.6679E-07 2.8562E-08 2.2085E-08 - 7.0795E+02 5.1853E-07 3.1862E-07 1.9334E-08 1.4770E-08 - 7.9433E+02 3.5454E-07 2.1649E-07 1.2876E-08 9.8384E-09 - 8.9125E+02 2.4296E-07 1.4705E-07 8.4671E-09 6.6608E-09 - 1.0000E+03 1.6676E-07 1.0073E-07 5.7504E-09 4.4149E-09 - 1.1220E+03 1.1206E-07 6.7669E-08 3.8838E-09 2.9035E-09 - 1.2589E+03 7.6105E-08 4.5541E-08 2.5825E-09 1.9262E-09 - 1.4125E+03 5.1512E-08 3.0613E-08 1.7129E-09 1.2783E-09 - 1.5849E+03 3.4697E-08 2.0523E-08 1.1329E-09 8.3758E-10 - 1.7783E+03 2.3378E-08 1.3732E-08 7.3740E-10 5.4788E-10 - 1.9953E+03 1.5729E-08 9.2167E-09 4.9885E-10 3.6932E-10 - 2.2387E+03 1.0543E-08 6.1618E-09 3.3598E-10 2.4833E-10 - 2.5119E+03 7.0718E-09 4.1061E-09 2.2197E-10 1.6269E-10 - 2.8184E+03 4.7162E-09 2.7170E-09 1.4365E-10 1.0501E-10 - 3.1623E+03 3.2171E-09 1.8550E-09 9.5253E-11 7.0382E-11 - 3.5481E+03 2.0874E-09 1.2005E-09 6.3204E-11 4.5446E-11 - 3.9811E+03 1.3828E-09 7.9320E-10 4.1682E-11 2.9594E-11 - 4.4668E+03 9.1480E-10 5.2369E-10 2.7446E-11 1.9791E-11 - 5.0119E+03 6.0651E-10 3.4444E-10 1.8080E-11 1.3205E-11 - 5.6234E+03 4.0261E-10 2.2640E-10 1.1823E-11 8.6689E-12 - 6.3096E+03 2.6514E-10 1.4910E-10 7.5908E-12 5.5348E-12 - 7.0795E+03 1.7461E-10 9.7592E-11 4.9310E-12 3.6665E-12 - 7.9433E+03 1.1500E-10 6.3857E-11 3.1973E-12 2.3889E-12 - 8.9125E+03 7.5768E-11 4.2020E-11 2.1168E-12 1.5396E-12 - 1.0000E+04 4.9575E-11 2.7482E-11 1.4040E-12 9.9851E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2862E+04 1.2976E+04 6.4972E+03 5.6897E+03 - 1.1220E-01 1.1393E+04 1.1483E+04 5.7656E+03 5.0139E+03 - 1.2589E-01 1.0024E+04 1.0076E+04 5.0665E+03 4.3643E+03 - 1.4125E-01 8.7349E+03 8.7556E+03 4.4029E+03 3.7592E+03 - 1.5849E-01 7.5227E+03 7.5306E+03 3.7813E+03 3.2020E+03 - 1.7783E-01 6.3929E+03 6.3848E+03 3.2169E+03 2.6988E+03 - 1.9953E-01 5.3507E+03 5.3347E+03 2.7121E+03 2.2518E+03 - 2.2387E-01 4.4142E+03 4.4013E+03 2.2576E+03 1.8550E+03 - 2.5119E-01 3.5971E+03 3.5856E+03 1.8508E+03 1.5092E+03 - 2.8184E-01 2.8940E+03 2.8863E+03 1.4995E+03 1.2164E+03 - 3.1623E-01 2.3030E+03 2.2961E+03 1.2003E+03 9.6730E+02 - 3.5481E-01 1.8151E+03 1.8057E+03 9.4852E+02 7.5774E+02 - 3.9811E-01 1.4196E+03 1.4060E+03 7.4201E+02 5.9011E+02 - 4.4668E-01 1.0993E+03 1.0860E+03 5.7450E+02 4.5499E+02 - 5.0119E-01 8.4382E+02 8.3020E+02 4.3961E+02 3.4642E+02 - 5.6234E-01 6.4412E+02 6.2948E+02 3.3350E+02 2.6151E+02 - 6.3096E-01 4.8754E+02 4.7484E+02 2.5062E+02 1.9606E+02 - 7.0795E-01 3.6640E+02 3.5516E+02 1.8644E+02 1.4597E+02 - 7.9433E-01 2.7504E+02 2.6434E+02 1.3778E+02 1.0750E+02 - 8.9125E-01 2.0636E+02 1.9632E+02 1.0114E+02 7.8559E+01 - 1.0000E+00 1.5422E+02 1.4549E+02 7.4101E+01 5.7319E+01 - 1.1220E+00 1.1511E+02 1.0746E+02 5.3664E+01 4.1649E+01 - 1.2589E+00 8.5730E+01 7.9156E+01 3.8720E+01 3.0066E+01 - 1.4125E+00 6.3626E+01 5.8017E+01 2.7849E+01 2.1585E+01 - 1.5849E+00 4.7124E+01 4.2386E+01 1.9971E+01 1.5439E+01 - 1.7783E+00 3.4743E+01 3.0846E+01 1.4255E+01 1.0983E+01 - 1.9953E+00 2.5491E+01 2.2384E+01 1.0115E+01 7.7616E+00 - 2.2387E+00 1.8640E+01 1.6213E+01 7.1447E+00 5.4449E+00 - 2.5119E+00 1.3601E+01 1.1692E+01 5.0172E+00 3.8324E+00 - 2.8184E+00 9.8965E+00 8.4064E+00 3.5024E+00 2.6772E+00 - 3.1623E+00 7.1861E+00 6.0239E+00 2.4147E+00 1.8419E+00 - 3.5481E+00 5.2060E+00 4.3171E+00 1.6628E+00 1.2671E+00 - 3.9811E+00 3.7657E+00 3.0876E+00 1.1428E+00 8.6538E-01 - 4.4668E+00 2.7154E+00 2.2028E+00 7.8073E-01 5.8948E-01 - 5.0119E+00 1.9553E+00 1.5738E+00 5.3054E-01 4.0159E-01 - 5.6234E+00 1.4053E+00 1.1233E+00 3.5974E-01 2.7131E-01 - 6.3096E+00 1.0094E+00 7.9789E-01 2.4383E-01 1.8401E-01 - 7.0795E+00 7.2400E-01 5.6824E-01 1.6392E-01 1.2464E-01 - 7.9433E+00 5.1749E-01 4.0350E-01 1.1008E-01 8.3954E-02 - 8.9125E+00 3.7085E-01 2.8581E-01 7.3810E-02 5.6110E-02 - 1.0000E+01 2.6472E-01 2.0307E-01 4.9392E-02 3.7403E-02 - 1.1220E+01 1.8887E-01 1.4433E-01 3.2864E-02 2.4887E-02 - 1.2589E+01 1.3493E-01 1.0240E-01 2.1883E-02 1.6599E-02 - 1.4125E+01 9.6121E-02 7.2407E-02 1.4628E-02 1.1165E-02 - 1.5849E+01 6.8568E-02 5.1262E-02 9.7315E-03 7.4682E-03 - 1.7783E+01 4.8745E-02 3.6423E-02 6.4713E-03 4.9840E-03 - 1.9953E+01 3.4658E-02 2.5784E-02 4.3072E-03 3.3459E-03 - 2.2387E+01 2.4743E-02 1.8257E-02 2.8931E-03 2.2444E-03 - 2.5119E+01 1.7607E-02 1.2930E-02 1.9414E-03 1.4976E-03 - 2.8184E+01 1.2459E-02 9.1384E-03 1.2851E-03 9.9558E-04 - 3.1623E+01 8.8295E-03 6.4155E-03 8.4889E-04 6.6741E-04 - 3.5481E+01 6.2523E-03 4.5235E-03 5.6708E-04 4.4840E-04 - 3.9811E+01 4.4215E-03 3.1841E-03 3.7843E-04 3.0252E-04 - 4.4668E+01 3.1257E-03 2.2412E-03 2.5302E-04 2.0336E-04 - 5.0119E+01 2.2049E-03 1.5760E-03 1.6960E-04 1.3642E-04 - 5.6234E+01 1.5563E-03 1.1073E-03 1.1437E-04 9.1824E-05 - 6.3096E+01 1.0970E-03 7.7630E-04 7.7024E-05 6.1721E-05 - 7.0795E+01 7.7163E-04 5.4347E-04 5.1554E-05 4.1919E-05 - 7.9433E+01 5.4234E-04 3.7987E-04 3.4988E-05 2.8640E-05 - 8.9125E+01 3.8107E-04 2.6502E-04 2.3460E-05 1.9176E-05 - 1.0000E+02 2.6783E-04 1.8497E-04 1.5891E-05 1.2974E-05 - 1.1220E+02 1.8757E-04 1.2864E-04 1.0791E-05 8.7871E-06 - 1.2589E+02 1.3145E-04 8.9626E-05 7.3258E-06 5.9681E-06 - 1.4125E+02 9.1953E-05 6.2388E-05 4.9533E-06 4.0515E-06 - 1.5849E+02 6.4318E-05 4.3363E-05 3.3495E-06 2.7468E-06 - 1.7783E+02 4.4973E-05 3.0064E-05 2.2712E-06 1.8545E-06 - 1.9953E+02 3.1388E-05 2.0828E-05 1.5391E-06 1.2685E-06 - 2.2387E+02 2.1878E-05 1.4430E-05 1.0352E-06 8.6636E-07 - 2.5119E+02 1.5247E-05 9.9966E-06 7.0247E-07 5.7557E-07 - 2.8184E+02 1.0606E-05 6.9155E-06 4.8583E-07 3.9023E-07 - 3.1623E+02 7.4004E-06 4.7805E-06 3.3043E-07 2.6257E-07 - 3.5481E+02 5.1234E-06 3.2860E-06 2.2336E-07 1.7763E-07 - 3.9811E+02 3.5557E-06 2.2667E-06 1.5066E-07 1.2095E-07 - 4.4668E+02 2.4651E-06 1.5615E-06 1.0211E-07 8.1086E-08 - 5.0119E+02 1.7035E-06 1.0715E-06 6.8468E-08 5.4210E-08 - 5.6234E+02 1.1826E-06 7.3889E-07 4.6454E-08 3.6551E-08 - 6.3096E+02 8.1169E-07 5.0462E-07 3.1372E-08 2.4464E-08 - 7.0795E+02 5.5747E-07 3.4480E-07 2.1046E-08 1.6351E-08 - 7.9433E+02 3.8204E-07 2.3511E-07 1.4225E-08 1.0913E-08 - 8.9125E+02 2.6201E-07 1.6023E-07 9.5909E-09 7.2809E-09 - 1.0000E+03 1.8024E-07 1.0928E-07 6.3719E-09 4.8786E-09 - 1.1220E+03 1.2197E-07 7.3469E-08 4.2564E-09 3.2380E-09 - 1.2589E+03 8.3008E-08 4.9687E-08 2.8455E-09 2.1639E-09 - 1.4125E+03 5.6313E-08 3.3540E-08 1.8866E-09 1.4213E-09 - 1.5849E+03 3.8085E-08 2.2572E-08 1.2530E-09 9.5069E-10 - 1.7783E+03 2.5689E-08 1.5133E-08 8.3809E-10 6.3305E-10 - 1.9953E+03 1.7313E-08 1.0223E-08 5.6380E-10 4.2047E-10 - 2.2387E+03 1.1654E-08 6.8491E-09 3.7389E-10 2.7436E-10 - 2.5119E+03 7.8119E-09 4.5590E-09 2.4237E-10 1.7996E-10 - 2.8184E+03 5.2182E-09 3.0369E-09 1.5883E-10 1.1996E-10 - 3.1623E+03 3.5615E-09 2.0551E-09 1.0658E-10 7.7155E-11 - 3.5481E+03 2.3216E-09 1.3365E-09 7.1004E-11 5.0529E-11 - 3.9811E+03 1.5460E-09 8.8642E-10 4.5770E-11 3.3438E-11 - 4.4668E+03 1.0243E-09 5.8589E-10 2.9719E-11 2.1947E-11 - 5.0119E+03 6.7836E-10 3.8577E-10 2.0341E-11 1.4425E-11 - 5.6234E+03 4.4832E-10 2.5467E-10 1.3393E-11 9.0560E-12 - 6.3096E+03 2.9702E-10 1.6686E-10 8.6608E-12 5.9945E-12 - 7.0795E+03 1.9616E-10 1.0920E-10 5.6623E-12 4.0446E-12 - 7.9433E+03 1.2915E-10 7.1589E-11 3.7823E-12 2.5520E-12 - 8.9125E+03 8.5305E-11 4.6949E-11 2.4578E-12 1.6516E-12 - 1.0000E+04 5.6051E-11 3.0698E-11 1.5915E-12 1.1108E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3511E+04 1.3642E+04 6.8386E+03 5.9975E+03 - 1.1220E-01 1.1884E+04 1.2000E+04 6.0468E+03 5.2565E+03 - 1.2589E-01 1.0410E+04 1.0478E+04 5.2841E+03 4.5561E+03 - 1.4125E-01 9.0297E+03 9.0547E+03 4.5734E+03 3.9131E+03 - 1.5849E-01 7.7382E+03 7.7448E+03 3.9196E+03 3.3265E+03 - 1.7783E-01 6.5544E+03 6.5525E+03 3.3277E+03 2.7968E+03 - 1.9953E-01 5.4694E+03 5.4646E+03 2.7949E+03 2.3284E+03 - 2.2387E-01 4.5015E+03 4.4952E+03 2.3239E+03 1.9207E+03 - 2.5119E-01 3.6608E+03 3.6589E+03 1.9098E+03 1.5647E+03 - 2.8184E-01 2.9428E+03 2.9442E+03 1.5472E+03 1.2592E+03 - 3.1623E-01 2.3431E+03 2.3423E+03 1.2416E+03 1.0018E+03 - 3.5481E-01 1.8479E+03 1.8428E+03 9.8412E+02 7.8821E+02 - 3.9811E-01 1.4453E+03 1.4343E+03 7.7015E+02 6.1421E+02 - 4.4668E-01 1.1225E+03 1.1087E+03 5.9765E+02 4.7370E+02 - 5.0119E-01 8.6245E+02 8.5129E+02 4.5937E+02 3.6247E+02 - 5.6234E-01 6.5769E+02 6.4744E+02 3.5037E+02 2.7593E+02 - 6.3096E-01 4.9980E+02 4.8796E+02 2.6434E+02 2.0749E+02 - 7.0795E-01 3.7667E+02 3.6599E+02 1.9792E+02 1.5486E+02 - 7.9433E-01 2.8337E+02 2.7353E+02 1.4706E+02 1.1516E+02 - 8.9125E-01 2.1258E+02 2.0358E+02 1.0841E+02 8.4823E+01 - 1.0000E+00 1.5912E+02 1.5145E+02 7.9603E+01 6.2039E+01 - 1.1220E+00 1.1870E+02 1.1216E+02 5.8186E+01 4.5128E+01 - 1.2589E+00 8.8420E+01 8.2762E+01 4.2346E+01 3.2693E+01 - 1.4125E+00 6.5823E+01 6.0712E+01 3.0562E+01 2.3599E+01 - 1.5849E+00 4.8852E+01 4.4472E+01 2.1906E+01 1.6935E+01 - 1.7783E+00 3.5943E+01 3.2483E+01 1.5664E+01 1.2133E+01 - 1.9953E+00 2.6332E+01 2.3584E+01 1.1184E+01 8.6361E+00 - 2.2387E+00 1.9341E+01 1.7110E+01 7.9396E+00 6.0744E+00 - 2.5119E+00 1.4118E+01 1.2275E+01 5.5828E+00 4.2566E+00 - 2.8184E+00 1.0272E+01 8.8173E+00 3.8910E+00 2.9559E+00 - 3.1623E+00 7.4544E+00 6.3448E+00 2.7262E+00 2.0633E+00 - 3.5481E+00 5.4023E+00 4.5467E+00 1.8889E+00 1.4266E+00 - 3.9811E+00 3.8989E+00 3.2588E+00 1.2982E+00 9.8008E-01 - 4.4668E+00 2.8074E+00 2.3287E+00 8.9110E-01 6.7058E-01 - 5.0119E+00 2.0222E+00 1.6596E+00 6.0799E-01 4.5757E-01 - 5.6234E+00 1.4579E+00 1.1792E+00 4.1228E-01 3.1250E-01 - 6.3096E+00 1.0458E+00 8.4083E-01 2.7977E-01 2.1188E-01 - 7.0795E+00 7.4802E-01 5.9720E-01 1.8948E-01 1.4276E-01 - 7.9433E+00 5.3614E-01 4.2312E-01 1.2707E-01 9.6154E-02 - 8.9125E+00 3.8397E-01 3.0058E-01 8.4553E-02 6.4790E-02 - 1.0000E+01 2.7415E-01 2.1327E-01 5.7355E-02 4.3257E-02 - 1.1220E+01 1.9554E-01 1.5116E-01 3.8256E-02 2.8979E-02 - 1.2589E+01 1.3945E-01 1.0690E-01 2.5581E-02 1.9316E-02 - 1.4125E+01 9.9574E-02 7.5781E-02 1.7040E-02 1.2899E-02 - 1.5849E+01 7.1064E-02 5.3830E-02 1.1326E-02 8.6609E-03 - 1.7783E+01 5.0527E-02 3.8238E-02 7.5391E-03 5.7985E-03 - 1.9953E+01 3.5860E-02 2.7043E-02 4.9886E-03 3.8680E-03 - 2.2387E+01 2.5612E-02 1.9120E-02 3.3289E-03 2.5886E-03 - 2.5119E+01 1.8209E-02 1.3480E-02 2.2319E-03 1.7386E-03 - 2.8184E+01 1.2959E-02 9.5604E-03 1.4823E-03 1.1626E-03 - 3.1623E+01 9.2086E-03 6.7761E-03 9.8690E-04 7.7031E-04 - 3.5481E+01 6.5267E-03 4.7781E-03 6.5575E-04 5.1563E-04 - 3.9811E+01 4.6286E-03 3.3692E-03 4.3801E-04 3.4651E-04 - 4.4668E+01 3.2756E-03 2.3729E-03 2.9378E-04 2.3270E-04 - 5.0119E+01 2.3132E-03 1.6682E-03 1.9651E-04 1.5709E-04 - 5.6234E+01 1.6352E-03 1.1712E-03 1.3086E-04 1.0531E-04 - 6.3096E+01 1.1542E-03 8.2254E-04 8.7890E-05 7.0866E-05 - 7.0795E+01 8.1261E-04 5.7643E-04 5.8981E-05 4.7652E-05 - 7.9433E+01 5.7149E-04 4.0327E-04 3.9208E-05 3.2062E-05 - 8.9125E+01 4.0174E-04 2.8183E-04 2.6339E-05 2.1585E-05 - 1.0000E+02 2.8274E-04 1.9717E-04 1.7955E-05 1.4598E-05 - 1.1220E+02 1.9844E-04 1.3762E-04 1.2111E-05 9.8809E-06 - 1.2589E+02 1.3905E-04 9.5852E-05 8.1570E-06 6.7005E-06 - 1.4125E+02 9.7306E-05 6.6666E-05 5.5279E-06 4.5189E-06 - 1.5849E+02 6.8088E-05 4.6403E-05 3.7528E-06 3.0453E-06 - 1.7783E+02 4.7583E-05 3.2207E-05 2.5328E-06 2.0650E-06 - 1.9953E+02 3.3274E-05 2.2309E-05 1.7049E-06 1.4082E-06 - 2.2387E+02 2.3256E-05 1.5477E-05 1.1604E-06 9.4434E-07 - 2.5119E+02 1.6224E-05 1.0751E-05 7.8870E-07 6.3324E-07 - 2.8184E+02 1.1316E-05 7.4435E-06 5.3416E-07 4.2993E-07 - 3.1623E+02 7.9029E-06 5.1463E-06 3.6459E-07 2.9380E-07 - 3.5481E+02 5.4771E-06 3.5446E-06 2.4635E-07 1.9834E-07 - 3.9811E+02 3.8005E-06 2.4466E-06 1.6736E-07 1.3369E-07 - 4.4668E+02 2.6417E-06 1.6861E-06 1.1340E-07 9.0201E-08 - 5.0119E+02 1.8307E-06 1.1596E-06 7.6276E-08 6.0399E-08 - 5.6234E+02 1.2730E-06 8.0250E-07 5.1452E-08 4.0626E-08 - 6.3096E+02 8.7467E-07 5.4824E-07 3.4591E-08 2.7294E-08 - 7.0795E+02 6.0274E-07 3.7466E-07 2.3333E-08 1.8232E-08 - 7.9433E+02 4.1551E-07 2.5626E-07 1.5901E-08 1.2221E-08 - 8.9125E+02 2.8515E-07 1.7490E-07 1.0736E-08 8.2034E-09 - 1.0000E+03 1.9660E-07 1.2005E-07 7.0790E-09 5.5057E-09 - 1.1220E+03 1.3320E-07 8.0983E-08 4.7850E-09 3.6990E-09 - 1.2589E+03 9.0909E-08 5.4860E-08 3.2107E-09 2.4427E-09 - 1.4125E+03 6.1728E-08 3.7112E-08 2.1284E-09 1.6171E-09 - 1.5849E+03 4.1844E-08 2.5052E-08 1.4176E-09 1.0440E-09 - 1.7783E+03 2.8368E-08 1.6828E-08 9.5649E-10 6.9164E-10 - 1.9953E+03 1.9165E-08 1.1321E-08 6.2562E-10 4.6274E-10 - 2.2387E+03 1.2944E-08 7.5721E-09 4.1484E-10 3.1303E-10 - 2.5119E+03 8.7137E-09 5.0645E-09 2.7173E-10 2.0134E-10 - 2.8184E+03 5.8385E-09 3.3825E-09 1.8153E-10 1.3092E-10 - 3.1623E+03 4.0051E-09 2.3134E-09 1.2032E-10 8.8910E-11 - 3.5481E+03 2.6067E-09 1.5009E-09 8.0527E-11 5.7926E-11 - 3.9811E+03 1.7361E-09 9.9397E-10 5.3801E-11 3.6987E-11 - 4.4668E+03 1.1536E-09 6.5714E-10 3.4611E-11 2.4329E-11 - 5.0119E+03 7.6456E-10 4.3434E-10 2.2619E-11 1.6204E-11 - 5.6234E+03 5.0862E-10 2.8662E-10 1.4837E-11 1.0604E-11 - 6.3096E+03 3.3616E-10 1.8894E-10 9.8425E-12 6.9863E-12 - 7.0795E+03 2.2233E-10 1.2398E-10 6.4229E-12 4.6378E-12 - 7.9433E+03 1.4663E-10 8.1473E-11 4.2701E-12 3.0182E-12 - 8.9125E+03 9.6464E-11 5.3602E-11 2.7745E-12 1.9464E-12 - 1.0000E+04 6.3575E-11 3.5066E-11 1.8037E-12 1.2483E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4461E+04 1.4611E+04 7.3023E+03 6.4346E+03 - 1.1220E-01 1.2626E+04 1.2743E+04 6.4265E+03 5.6106E+03 - 1.2589E-01 1.0963E+04 1.1041E+04 5.5837E+03 4.8381E+03 - 1.4125E-01 9.4487E+03 9.4881E+03 4.8053E+03 4.1288E+03 - 1.5849E-01 8.0566E+03 8.0646E+03 4.1053E+03 3.4920E+03 - 1.7783E-01 6.7820E+03 6.7764E+03 3.4697E+03 2.9237E+03 - 1.9953E-01 5.6297E+03 5.6280E+03 2.9052E+03 2.4293E+03 - 2.2387E-01 4.6177E+03 4.6206E+03 2.4122E+03 1.9946E+03 - 2.5119E-01 3.7506E+03 3.7462E+03 1.9789E+03 1.6219E+03 - 2.8184E-01 3.0107E+03 3.0034E+03 1.6038E+03 1.3085E+03 - 3.1623E-01 2.3917E+03 2.3883E+03 1.2865E+03 1.0427E+03 - 3.5481E-01 1.8855E+03 1.8824E+03 1.0210E+03 8.2177E+02 - 3.9811E-01 1.4713E+03 1.4708E+03 7.9995E+02 6.4153E+02 - 4.4668E-01 1.1406E+03 1.1379E+03 6.2214E+02 4.9626E+02 - 5.0119E-01 8.8061E+02 8.7162E+02 4.7998E+02 3.8104E+02 - 5.6234E-01 6.7274E+02 6.6475E+02 3.6650E+02 2.9018E+02 - 6.3096E-01 5.1098E+02 5.0336E+02 2.7869E+02 2.1955E+02 - 7.0795E-01 3.8651E+02 3.7802E+02 2.1008E+02 1.6444E+02 - 7.9433E-01 2.9112E+02 2.8259E+02 1.5670E+02 1.2239E+02 - 8.9125E-01 2.1913E+02 2.1122E+02 1.1629E+02 9.0493E+01 - 1.0000E+00 1.6431E+02 1.5764E+02 8.5942E+01 6.6778E+01 - 1.1220E+00 1.2267E+02 1.1699E+02 6.2816E+01 4.9003E+01 - 1.2589E+00 9.1687E+01 8.6342E+01 4.5879E+01 3.5772E+01 - 1.4125E+00 6.8340E+01 6.3577E+01 3.3413E+01 2.5919E+01 - 1.5849E+00 5.0670E+01 4.6705E+01 2.4201E+01 1.8655E+01 - 1.7783E+00 3.7426E+01 3.4269E+01 1.7432E+01 1.3407E+01 - 1.9953E+00 2.7531E+01 2.4965E+01 1.2514E+01 9.6062E+00 - 2.2387E+00 2.0161E+01 1.8064E+01 8.9268E+00 6.7869E+00 - 2.5119E+00 1.4729E+01 1.3044E+01 6.3006E+00 4.7866E+00 - 2.8184E+00 1.0733E+01 9.3853E+00 4.4043E+00 3.3753E+00 - 3.1623E+00 7.7792E+00 6.7524E+00 3.0905E+00 2.3451E+00 - 3.5481E+00 5.6303E+00 4.8432E+00 2.1520E+00 1.6332E+00 - 3.9811E+00 4.0647E+00 3.4681E+00 1.4900E+00 1.1323E+00 - 4.4668E+00 2.9267E+00 2.4773E+00 1.0278E+00 7.7720E-01 - 5.0119E+00 2.1108E+00 1.7688E+00 7.0233E-01 5.3129E-01 - 5.6234E+00 1.5177E+00 1.2582E+00 4.8031E-01 3.6353E-01 - 6.3096E+00 1.0863E+00 8.9378E-01 3.2881E-01 2.4787E-01 - 7.0795E+00 7.7968E-01 6.3669E-01 2.2231E-01 1.6698E-01 - 7.9433E+00 5.5970E-01 4.5207E-01 1.5013E-01 1.1358E-01 - 8.9125E+00 3.9979E-01 3.2049E-01 1.0132E-01 7.6961E-02 - 1.0000E+01 2.8540E-01 2.2645E-01 6.8128E-02 5.1255E-02 - 1.1220E+01 2.0407E-01 1.6055E-01 4.5466E-02 3.4347E-02 - 1.2589E+01 1.4565E-01 1.1371E-01 3.0379E-02 2.3065E-02 - 1.4125E+01 1.0381E-01 8.0650E-02 2.0299E-02 1.5484E-02 - 1.5849E+01 7.4075E-02 5.7158E-02 1.3515E-02 1.0362E-02 - 1.7783E+01 5.2807E-02 4.0552E-02 9.0710E-03 6.8877E-03 - 1.9953E+01 3.7737E-02 2.8716E-02 6.0421E-03 4.5354E-03 - 2.2387E+01 2.6864E-02 2.0315E-02 3.9993E-03 3.0259E-03 - 2.5119E+01 1.9102E-02 1.4404E-02 2.6622E-03 2.0449E-03 - 2.8184E+01 1.3584E-02 1.0205E-02 1.7521E-03 1.3807E-03 - 3.1623E+01 9.6587E-03 7.2000E-03 1.1783E-03 9.2072E-04 - 3.5481E+01 6.8595E-03 5.0887E-03 7.8323E-04 6.1399E-04 - 3.9811E+01 4.8696E-03 3.5917E-03 5.2083E-04 4.0941E-04 - 4.4668E+01 3.4515E-03 2.5329E-03 3.4640E-04 2.7478E-04 - 5.0119E+01 2.4441E-03 1.7824E-03 2.3148E-04 1.8513E-04 - 5.6234E+01 1.7297E-03 1.2547E-03 1.5474E-04 1.2342E-04 - 6.3096E+01 1.2226E-03 8.8290E-04 1.0321E-04 8.2476E-05 - 7.0795E+01 8.6241E-04 6.2040E-04 6.9276E-05 5.5245E-05 - 7.9433E+01 6.0812E-04 4.3418E-04 4.6522E-05 3.7375E-05 - 8.9125E+01 4.2860E-04 3.0376E-04 3.1058E-05 2.4996E-05 - 1.0000E+02 3.0158E-04 2.1245E-04 2.0842E-05 1.6884E-05 - 1.1220E+02 2.1178E-04 1.4834E-04 1.4014E-05 1.1399E-05 - 1.2589E+02 1.4868E-04 1.0352E-04 9.4155E-06 7.7074E-06 - 1.4125E+02 1.0416E-04 7.2087E-05 6.3485E-06 5.1981E-06 - 1.5849E+02 7.2968E-05 5.0192E-05 4.2874E-06 3.5091E-06 - 1.7783E+02 5.1148E-05 3.4898E-05 2.8971E-06 2.3516E-06 - 1.9953E+02 3.5781E-05 2.4211E-05 1.9593E-06 1.5867E-06 - 2.2387E+02 2.5009E-05 1.6809E-05 1.3351E-06 1.0795E-06 - 2.5119E+02 1.7453E-05 1.1663E-05 9.0337E-07 7.3474E-07 - 2.8184E+02 1.2190E-05 8.0971E-06 6.0567E-07 4.9778E-07 - 3.1623E+02 8.5147E-06 5.6048E-06 4.1165E-07 3.3225E-07 - 3.5481E+02 5.9207E-06 3.8688E-06 2.7900E-07 2.2447E-07 - 3.9811E+02 4.1172E-06 2.6766E-06 1.8919E-07 1.5220E-07 - 4.4668E+02 2.8613E-06 1.8480E-06 1.2739E-07 1.0266E-07 - 5.0119E+02 1.9895E-06 1.2753E-06 8.5956E-08 6.9028E-08 - 5.6234E+02 1.3848E-06 8.8023E-07 5.8662E-08 4.6405E-08 - 6.3096E+02 9.5340E-07 6.0285E-07 3.9639E-08 3.1228E-08 - 7.0795E+02 6.6026E-07 4.1459E-07 2.6608E-08 2.0791E-08 - 7.9433E+02 4.5580E-07 2.8456E-07 1.7859E-08 1.3915E-08 - 8.9125E+02 3.1308E-07 1.9417E-07 1.2057E-08 9.3138E-09 - 1.0000E+03 2.1678E-07 1.3296E-07 8.0623E-09 6.2492E-09 - 1.1220E+03 1.4789E-07 8.9796E-08 5.4595E-09 4.1528E-09 - 1.2589E+03 1.0100E-07 6.1169E-08 3.6742E-09 2.7764E-09 - 1.4125E+03 6.8853E-08 4.1532E-08 2.4699E-09 1.8561E-09 - 1.5849E+03 4.6893E-08 2.8061E-08 1.6482E-09 1.2280E-09 - 1.7783E+03 3.1885E-08 1.8978E-08 1.0773E-09 8.2675E-10 - 1.9953E+03 2.1608E-08 1.2807E-08 7.1761E-10 5.5076E-10 - 2.2387E+03 1.4617E-08 8.6119E-09 4.7926E-10 3.6059E-10 - 2.5119E+03 9.8365E-09 5.7891E-09 3.1630E-10 2.3607E-10 - 2.8184E+03 6.6109E-09 3.8748E-09 2.0980E-10 1.5614E-10 - 3.1623E+03 4.5433E-09 2.6461E-09 1.3924E-10 1.0251E-10 - 3.5481E+03 2.9692E-09 1.7208E-09 9.2468E-11 6.7061E-11 - 3.9811E+03 1.9826E-09 1.1401E-09 6.1370E-11 4.4622E-11 - 4.4668E+03 1.3212E-09 7.5838E-10 3.9613E-11 2.9369E-11 - 5.0119E+03 8.8232E-10 5.0104E-10 2.6237E-11 1.9349E-11 - 5.6234E+03 5.8536E-10 3.3053E-10 1.7341E-11 1.2927E-11 - 6.3096E+03 3.8897E-10 2.1901E-10 1.1497E-11 8.2356E-12 - 7.0795E+03 2.5826E-10 1.4414E-10 7.5286E-12 5.3225E-12 - 7.9433E+03 1.7006E-10 9.4873E-11 4.9071E-12 3.5683E-12 - 8.9125E+03 1.1237E-10 6.2555E-11 3.2181E-12 2.3332E-12 - 1.0000E+04 7.4128E-11 4.0923E-11 2.0983E-12 1.4866E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5866E+04 1.6052E+04 8.0115E+03 7.0547E+03 - 1.1220E-01 1.3718E+04 1.3884E+04 6.9973E+03 6.1164E+03 - 1.2589E-01 1.1816E+04 1.1925E+04 6.0350E+03 5.2428E+03 - 1.4125E-01 1.0104E+04 1.0153E+04 5.1540E+03 4.4462E+03 - 1.5849E-01 8.5499E+03 8.5667E+03 4.3757E+03 3.7314E+03 - 1.7783E-01 7.1503E+03 7.1493E+03 3.6792E+03 3.1115E+03 - 1.9953E-01 5.9035E+03 5.8974E+03 3.0615E+03 2.5736E+03 - 2.2387E-01 4.8122E+03 4.8100E+03 2.5296E+03 2.1017E+03 - 2.5119E-01 3.8812E+03 3.8802E+03 2.0701E+03 1.7039E+03 - 2.8184E-01 3.0998E+03 3.0982E+03 1.6773E+03 1.3687E+03 - 3.1623E-01 2.4539E+03 2.4538E+03 1.3427E+03 1.0873E+03 - 3.5481E-01 1.9309E+03 1.9288E+03 1.0628E+03 8.5741E+02 - 3.9811E-01 1.5092E+03 1.5046E+03 8.3395E+02 6.7030E+02 - 4.4668E-01 1.1703E+03 1.1646E+03 6.4909E+02 5.1866E+02 - 5.0119E-01 9.0122E+02 8.9336E+02 5.0114E+02 3.9811E+02 - 5.6234E-01 6.9037E+02 6.8137E+02 3.8489E+02 3.0394E+02 - 6.3096E-01 5.2469E+02 5.1754E+02 2.9330E+02 2.3091E+02 - 7.0795E-01 3.9768E+02 3.9085E+02 2.2213E+02 1.7414E+02 - 7.9433E-01 3.0032E+02 2.9307E+02 1.6674E+02 1.3025E+02 - 8.9125E-01 2.2607E+02 2.1952E+02 1.2402E+02 9.6815E+01 - 1.0000E+00 1.6963E+02 1.6420E+02 9.2256E+01 7.2197E+01 - 1.1220E+00 1.2684E+02 1.2226E+02 6.8080E+01 5.3131E+01 - 1.2589E+00 9.4877E+01 9.0643E+01 5.0012E+01 3.8977E+01 - 1.4125E+00 7.0955E+01 6.6909E+01 3.6612E+01 2.8540E+01 - 1.5849E+00 5.2714E+01 4.9272E+01 2.6690E+01 2.0706E+01 - 1.7783E+00 3.8972E+01 3.6162E+01 1.9337E+01 1.4940E+01 - 1.9953E+00 2.8628E+01 2.6444E+01 1.3966E+01 1.0730E+01 - 2.2387E+00 2.0976E+01 1.9250E+01 1.0041E+01 7.6903E+00 - 2.5119E+00 1.5369E+01 1.3933E+01 7.1369E+00 5.4612E+00 - 2.8184E+00 1.1199E+01 1.0047E+01 5.0728E+00 3.8465E+00 - 3.1623E+00 8.1629E+00 7.2370E+00 3.5594E+00 2.7051E+00 - 3.5481E+00 5.9142E+00 5.1975E+00 2.4939E+00 1.8887E+00 - 3.9811E+00 4.2722E+00 3.7305E+00 1.7381E+00 1.3108E+00 - 4.4668E+00 3.0829E+00 2.6667E+00 1.2004E+00 9.1115E-01 - 5.0119E+00 2.2223E+00 1.9009E+00 8.2939E-01 6.2844E-01 - 5.6234E+00 1.5967E+00 1.3549E+00 5.7000E-01 4.3142E-01 - 6.3096E+00 1.1445E+00 9.6426E-01 3.8950E-01 2.9320E-01 - 7.0795E+00 8.1917E-01 6.8357E-01 2.6539E-01 1.9858E-01 - 7.9433E+00 5.8673E-01 4.8670E-01 1.8016E-01 1.3491E-01 - 8.9125E+00 4.2045E-01 3.4668E-01 1.2173E-01 9.1521E-02 - 1.0000E+01 3.0081E-01 2.4492E-01 8.2335E-02 6.2280E-02 - 1.1220E+01 2.1486E-01 1.7322E-01 5.5443E-02 4.1805E-02 - 1.2589E+01 1.5340E-01 1.2247E-01 3.7365E-02 2.8014E-02 - 1.4125E+01 1.0935E-01 8.6816E-02 2.5062E-02 1.8834E-02 - 1.5849E+01 7.7879E-02 6.1661E-02 1.6672E-02 1.2637E-02 - 1.7783E+01 5.5600E-02 4.3652E-02 1.1126E-02 8.5050E-03 - 1.9953E+01 3.9714E-02 3.0940E-02 7.4454E-03 5.6987E-03 - 2.2387E+01 2.8318E-02 2.2060E-02 4.9719E-03 3.7692E-03 - 2.5119E+01 2.0189E-02 1.5607E-02 3.2827E-03 2.5316E-03 - 2.8184E+01 1.4420E-02 1.0967E-02 2.1813E-03 1.6986E-03 - 3.1623E+01 1.0205E-02 7.7463E-03 1.4590E-03 1.1295E-03 - 3.5481E+01 7.2596E-03 5.4727E-03 9.7045E-04 7.5407E-04 - 3.9811E+01 5.1606E-03 3.8695E-03 6.4610E-04 5.0457E-04 - 4.4668E+01 3.6664E-03 2.7344E-03 4.2996E-04 3.3790E-04 - 5.0119E+01 2.6005E-03 1.9257E-03 2.8596E-04 2.2538E-04 - 5.6234E+01 1.8430E-03 1.3542E-03 1.9019E-04 1.5013E-04 - 6.3096E+01 1.3032E-03 9.5439E-04 1.2662E-04 1.0006E-04 - 7.0795E+01 9.2241E-04 6.7230E-04 8.4226E-05 6.7273E-05 - 7.9433E+01 6.5228E-04 4.7260E-04 5.6008E-05 4.4815E-05 - 8.9125E+01 4.6066E-04 3.3191E-04 3.7651E-05 2.9809E-05 - 1.0000E+02 3.2389E-04 2.3154E-04 2.5116E-05 2.0228E-05 - 1.1220E+02 2.2794E-04 1.6181E-04 1.6797E-05 1.3587E-05 - 1.2589E+02 1.6041E-04 1.1304E-04 1.1245E-05 9.1355E-06 - 1.4125E+02 1.1271E-04 7.8980E-05 7.5387E-06 6.1547E-06 - 1.5849E+02 7.9082E-05 5.5031E-05 5.0669E-06 4.1363E-06 - 1.7783E+02 5.5481E-05 3.8303E-05 3.4124E-06 2.7905E-06 - 1.9953E+02 3.8835E-05 2.6641E-05 2.2906E-06 1.8881E-06 - 2.2387E+02 2.7182E-05 1.8552E-05 1.5510E-06 1.2624E-06 - 2.5119E+02 1.9030E-05 1.2883E-05 1.0489E-06 8.4693E-07 - 2.8184E+02 1.3264E-05 8.9180E-06 7.1166E-07 5.7110E-07 - 3.1623E+02 9.2814E-06 6.1845E-06 4.8148E-07 3.8928E-07 - 3.5481E+02 6.4672E-06 4.2787E-06 3.2321E-07 2.6124E-07 - 3.9811E+02 4.5103E-06 2.9643E-06 2.1791E-07 1.7621E-07 - 4.4668E+02 3.1396E-06 2.0480E-06 1.4818E-07 1.1905E-07 - 5.0119E+02 2.1819E-06 1.4130E-06 1.0059E-07 7.9887E-08 - 5.6234E+02 1.5226E-06 9.7889E-07 6.7999E-08 5.3772E-08 - 6.3096E+02 1.0539E-06 6.7228E-07 4.5816E-08 3.6209E-08 - 7.0795E+02 7.3054E-07 4.6272E-07 3.0778E-08 2.4485E-08 - 7.9433E+02 5.0538E-07 3.1832E-07 2.0772E-08 1.6394E-08 - 8.9125E+02 3.4951E-07 2.1825E-07 1.3968E-08 1.0833E-08 - 1.0000E+03 2.4208E-07 1.5000E-07 9.4340E-09 7.3219E-09 - 1.1220E+03 1.6571E-07 1.0178E-07 6.3747E-09 4.9584E-09 - 1.2589E+03 1.1348E-07 6.9399E-08 4.2837E-09 3.2948E-09 - 1.4125E+03 7.7534E-08 4.7241E-08 2.8387E-09 2.1569E-09 - 1.5849E+03 5.3130E-08 3.2078E-08 1.8915E-09 1.4382E-09 - 1.7783E+03 3.6230E-08 2.1682E-08 1.2722E-09 9.6138E-10 - 1.9953E+03 2.4650E-08 1.4686E-08 8.4313E-10 6.3852E-10 - 2.2387E+03 1.6740E-08 9.9257E-09 5.6333E-10 4.2584E-10 - 2.5119E+03 1.1312E-08 6.6783E-09 3.8318E-10 2.8315E-10 - 2.8184E+03 7.6122E-09 4.4748E-09 2.5158E-10 1.8824E-10 - 3.1623E+03 5.2603E-09 3.0649E-09 1.6587E-10 1.2265E-10 - 3.5481E+03 3.4557E-09 2.0042E-09 1.0927E-10 8.0679E-11 - 3.9811E+03 2.3182E-09 1.3406E-09 7.1976E-11 5.3332E-11 - 4.4668E+03 1.5533E-09 8.9457E-10 4.8237E-11 3.5077E-11 - 5.0119E+03 1.0388E-09 5.9511E-10 3.2089E-11 2.3382E-11 - 5.6234E+03 6.9144E-10 3.9432E-10 2.0932E-11 1.5278E-11 - 6.3096E+03 4.6081E-10 2.5974E-10 1.3730E-11 9.6856E-12 - 7.0795E+03 3.0639E-10 1.7149E-10 9.0772E-12 6.3401E-12 - 7.9433E+03 2.0255E-10 1.1302E-10 5.9291E-12 4.1384E-12 - 8.9125E+03 1.3399E-10 7.4280E-11 3.8972E-12 2.6849E-12 - 1.0000E+04 8.8897E-11 4.8741E-11 2.5053E-12 1.7766E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8175E+04 1.8377E+04 9.1450E+03 8.0862E+03 - 1.1220E-01 1.5547E+04 1.5715E+04 7.9197E+03 6.9559E+03 - 1.2589E-01 1.3250E+04 1.3352E+04 6.7815E+03 5.9019E+03 - 1.4125E-01 1.1215E+04 1.1267E+04 5.7566E+03 4.9643E+03 - 1.5849E-01 9.4060E+03 9.4286E+03 4.8328E+03 4.1371E+03 - 1.7783E-01 7.7821E+03 7.7870E+03 4.0252E+03 3.4177E+03 - 1.9953E-01 6.3550E+03 6.3613E+03 3.3304E+03 2.7998E+03 - 2.2387E-01 5.1390E+03 5.1459E+03 2.7350E+03 2.2778E+03 - 2.5119E-01 4.1154E+03 4.1188E+03 2.2260E+03 1.8361E+03 - 2.8184E-01 3.2649E+03 3.2676E+03 1.7861E+03 1.4652E+03 - 3.1623E-01 2.5727E+03 2.5751E+03 1.4216E+03 1.1587E+03 - 3.5481E-01 2.0128E+03 2.0132E+03 1.1234E+03 9.0860E+02 - 3.9811E-01 1.5622E+03 1.5602E+03 8.7617E+02 7.0791E+02 - 4.4668E-01 1.2067E+03 1.2035E+03 6.8064E+02 5.4843E+02 - 5.0119E-01 9.2722E+02 9.2204E+02 5.2669E+02 4.2136E+02 - 5.6234E-01 7.0811E+02 7.0123E+02 4.0381E+02 3.2119E+02 - 6.3096E-01 5.3957E+02 5.3248E+02 3.0775E+02 2.4401E+02 - 7.0795E-01 4.0963E+02 4.0344E+02 2.3334E+02 1.8455E+02 - 7.9433E-01 3.0950E+02 3.0341E+02 1.7653E+02 1.3936E+02 - 8.9125E-01 2.3389E+02 2.2840E+02 1.3243E+02 1.0433E+02 - 1.0000E+00 1.7497E+02 1.7051E+02 9.8434E+01 7.7419E+01 - 1.1220E+00 1.3138E+02 1.2729E+02 7.3156E+01 5.7419E+01 - 1.2589E+00 9.8711E+01 9.4834E+01 5.4183E+01 4.2430E+01 - 1.4125E+00 7.3659E+01 7.0430E+01 3.9908E+01 3.1157E+01 - 1.5849E+00 5.4798E+01 5.1971E+01 2.9313E+01 2.2850E+01 - 1.7783E+00 4.0730E+01 3.8214E+01 2.1453E+01 1.6694E+01 - 1.9953E+00 3.0136E+01 2.8053E+01 1.5611E+01 1.2092E+01 - 2.2387E+00 2.2219E+01 2.0518E+01 1.1304E+01 8.7031E+00 - 2.5119E+00 1.6219E+01 1.4946E+01 8.1467E+00 6.2548E+00 - 2.8184E+00 1.1802E+01 1.0849E+01 5.8330E+00 4.4626E+00 - 3.1623E+00 8.5912E+00 7.8078E+00 4.1181E+00 3.1368E+00 - 3.5481E+00 6.2449E+00 5.6344E+00 2.9055E+00 2.2073E+00 - 3.9811E+00 4.5248E+00 4.0511E+00 2.0374E+00 1.5426E+00 - 4.4668E+00 3.2675E+00 2.9023E+00 1.4269E+00 1.0754E+00 - 5.0119E+00 2.3555E+00 2.0771E+00 9.9345E-01 7.4976E-01 - 5.6234E+00 1.6946E+00 1.4793E+00 6.8559E-01 5.1487E-01 - 6.3096E+00 1.2151E+00 1.0531E+00 4.7291E-01 3.5140E-01 - 7.0795E+00 8.6957E-01 7.4791E-01 3.2629E-01 2.4134E-01 - 7.9433E+00 6.2330E-01 5.2954E-01 2.2287E-01 1.6644E-01 - 8.9125E+00 4.4663E-01 3.7412E-01 1.5096E-01 1.1373E-01 - 1.0000E+01 3.1917E-01 2.6682E-01 1.0290E-01 7.7531E-02 - 1.1220E+01 2.2807E-01 1.8922E-01 6.9602E-02 5.2550E-02 - 1.2589E+01 1.6262E-01 1.3446E-01 4.7155E-02 3.5621E-02 - 1.4125E+01 1.1577E-01 9.5140E-02 3.1941E-02 2.3789E-02 - 1.5849E+01 8.2909E-02 6.7275E-02 2.1423E-02 1.5941E-02 - 1.7783E+01 5.9455E-02 4.7574E-02 1.4303E-02 1.0769E-02 - 1.9953E+01 4.2306E-02 3.3589E-02 9.6069E-03 7.2488E-03 - 2.2387E+01 3.0144E-02 2.3794E-02 6.3961E-03 4.8353E-03 - 2.5119E+01 2.1529E-02 1.6917E-02 4.2655E-03 3.2614E-03 - 2.8184E+01 1.5378E-02 1.1952E-02 2.8730E-03 2.2084E-03 - 3.1623E+01 1.0917E-02 8.4790E-03 1.8955E-03 1.4614E-03 - 3.5481E+01 7.7767E-03 6.0015E-03 1.2628E-03 9.7464E-04 - 3.9811E+01 5.5364E-03 4.2446E-03 8.3849E-04 6.5123E-04 - 4.4668E+01 3.9389E-03 2.9997E-03 5.5801E-04 4.3579E-04 - 5.0119E+01 2.8034E-03 2.1193E-03 3.7114E-04 2.9088E-04 - 5.6234E+01 1.9915E-03 1.4951E-03 2.4671E-04 1.9327E-04 - 6.3096E+01 1.4108E-03 1.0529E-03 1.6420E-04 1.2884E-04 - 7.0795E+01 9.9955E-04 7.4281E-04 1.0901E-04 8.6611E-05 - 7.9433E+01 7.0763E-04 5.2224E-04 7.2323E-05 5.7957E-05 - 8.9125E+01 5.0139E-04 3.6615E-04 4.8049E-05 3.8468E-05 - 1.0000E+02 3.5321E-04 2.5695E-04 3.2018E-05 2.5662E-05 - 1.1220E+02 2.4918E-04 1.8012E-04 2.1340E-05 1.7176E-05 - 1.2589E+02 1.7567E-04 1.2605E-04 1.4282E-05 1.1477E-05 - 1.4125E+02 1.2365E-04 8.7992E-05 9.5202E-06 7.6907E-06 - 1.5849E+02 8.6967E-05 6.1426E-05 6.3597E-06 5.1604E-06 - 1.7783E+02 6.1069E-05 4.2936E-05 4.2652E-06 3.4540E-06 - 1.9953E+02 4.2833E-05 2.9936E-05 2.8509E-06 2.3322E-06 - 2.2387E+02 3.0078E-05 2.0833E-05 1.8986E-06 1.5678E-06 - 2.5119E+02 2.1094E-05 1.4477E-05 1.2888E-06 1.0387E-06 - 2.8184E+02 1.4747E-05 1.0080E-05 8.6471E-07 7.0415E-07 - 3.1623E+02 1.0323E-05 6.9941E-06 5.8091E-07 4.7275E-07 - 3.5481E+02 7.1977E-06 4.8533E-06 3.9106E-07 3.1861E-07 - 3.9811E+02 5.0252E-06 3.3612E-06 2.6527E-07 2.1521E-07 - 4.4668E+02 3.5110E-06 2.3252E-06 1.8017E-07 1.4484E-07 - 5.0119E+02 2.4488E-06 1.6068E-06 1.2084E-07 9.7250E-08 - 5.6234E+02 1.7073E-06 1.1136E-06 8.1653E-08 6.5351E-08 - 6.3096E+02 1.1869E-06 7.6651E-07 5.5155E-08 4.4110E-08 - 7.0795E+02 8.2579E-07 5.2856E-07 3.7121E-08 2.9585E-08 - 7.9433E+02 5.7263E-07 3.6400E-07 2.5129E-08 1.9642E-08 - 8.9125E+02 3.9661E-07 2.4976E-07 1.6993E-08 1.3257E-08 - 1.0000E+03 2.7510E-07 1.7194E-07 1.1351E-08 8.9477E-09 - 1.1220E+03 1.8905E-07 1.1760E-07 7.5980E-09 5.9993E-09 - 1.2589E+03 1.3022E-07 8.0602E-08 5.0853E-09 3.9906E-09 - 1.4125E+03 8.9566E-08 5.5121E-08 3.4642E-09 2.6758E-09 - 1.5849E+03 6.1475E-08 3.7539E-08 2.3434E-09 1.7964E-09 - 1.7783E+03 4.2150E-08 2.5585E-08 1.5498E-09 1.1788E-09 - 1.9953E+03 2.8846E-08 1.7356E-08 1.0403E-09 7.9253E-10 - 2.2387E+03 1.9629E-08 1.1746E-08 6.9357E-10 5.3167E-10 - 2.5119E+03 1.3414E-08 7.9493E-09 4.6318E-10 3.5106E-10 - 2.8184E+03 9.1037E-09 5.3392E-09 3.0375E-10 2.3212E-10 - 3.1623E+03 6.2583E-09 3.6667E-09 2.0292E-10 1.5446E-10 - 3.5481E+03 4.1475E-09 2.4181E-09 1.3651E-10 1.0101E-10 - 3.9811E+03 2.7964E-09 1.6164E-09 9.0769E-11 6.6186E-11 - 4.4668E+03 1.8789E-09 1.0776E-09 6.0494E-11 4.3477E-11 - 5.0119E+03 1.2563E-09 7.2132E-10 4.0113E-11 2.8638E-11 - 5.6234E+03 8.4173E-10 4.7968E-10 2.6208E-11 1.8843E-11 - 6.3096E+03 5.6245E-10 3.1784E-10 1.7282E-11 1.2422E-11 - 7.0795E+03 3.7501E-10 2.1118E-10 1.1354E-11 8.1780E-12 - 7.9433E+03 2.4958E-10 1.3943E-10 7.5472E-12 5.1716E-12 - 8.9125E+03 1.6598E-10 9.1470E-11 4.9580E-12 3.3844E-12 - 1.0000E+04 1.0982E-10 6.0507E-11 3.2142E-12 2.2949E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2355E+04 2.2634E+04 1.1229E+04 9.9299E+03 - 1.1220E-01 1.8889E+04 1.9095E+04 9.6427E+03 8.4638E+03 - 1.2589E-01 1.5906E+04 1.6021E+04 8.1611E+03 7.1033E+03 - 1.4125E-01 1.3301E+04 1.3359E+04 6.8339E+03 5.9130E+03 - 1.5849E-01 1.1013E+04 1.1032E+04 5.6797E+03 4.8759E+03 - 1.7783E-01 9.0032E+03 8.9961E+03 4.6777E+03 3.9797E+03 - 1.9953E-01 7.2730E+03 7.2605E+03 3.8289E+03 3.2287E+03 - 2.2387E-01 5.8114E+03 5.7975E+03 3.1112E+03 2.6062E+03 - 2.5119E-01 4.5932E+03 4.5870E+03 2.5011E+03 2.0798E+03 - 2.8184E-01 3.5996E+03 3.6052E+03 1.9913E+03 1.6413E+03 - 3.1623E-01 2.8026E+03 2.8139E+03 1.5704E+03 1.2838E+03 - 3.5481E-01 2.1700E+03 2.1743E+03 1.2296E+03 9.9565E+02 - 3.9811E-01 1.6684E+03 1.6663E+03 9.5499E+02 7.6878E+02 - 4.4668E-01 1.2790E+03 1.2742E+03 7.3613E+02 5.9088E+02 - 5.0119E-01 9.7737E+02 9.6980E+02 5.6451E+02 4.5126E+02 - 5.6234E-01 7.4278E+02 7.3521E+02 4.3164E+02 3.4393E+02 - 6.3096E-01 5.6365E+02 5.5635E+02 3.2742E+02 2.6145E+02 - 7.0795E-01 4.2533E+02 4.2004E+02 2.4742E+02 1.9704E+02 - 7.9433E-01 3.2070E+02 3.1502E+02 1.8639E+02 1.4728E+02 - 8.9125E-01 2.4158E+02 2.3646E+02 1.3956E+02 1.1056E+02 - 1.0000E+00 1.8167E+02 1.7691E+02 1.0507E+02 8.2728E+01 - 1.1220E+00 1.3664E+02 1.3256E+02 7.8456E+01 6.1719E+01 - 1.2589E+00 1.0227E+02 9.9205E+01 5.8347E+01 4.6031E+01 - 1.4125E+00 7.6635E+01 7.3750E+01 4.3410E+01 3.4173E+01 - 1.5849E+00 5.7281E+01 5.4706E+01 3.2209E+01 2.5231E+01 - 1.7783E+00 4.2660E+01 4.0503E+01 2.3755E+01 1.8464E+01 - 1.9953E+00 3.1602E+01 2.9968E+01 1.7448E+01 1.3424E+01 - 2.2387E+00 2.3299E+01 2.2030E+01 1.2697E+01 9.7959E+00 - 2.5119E+00 1.7112E+01 1.6046E+01 9.2257E+00 7.1039E+00 - 2.8184E+00 1.2516E+01 1.1664E+01 6.6841E+00 5.1048E+00 - 3.1623E+00 9.1632E+00 8.4936E+00 4.8038E+00 3.6649E+00 - 3.5481E+00 6.6704E+00 6.1631E+00 3.4208E+00 2.5981E+00 - 3.9811E+00 4.8424E+00 4.4414E+00 2.4226E+00 1.8396E+00 - 4.4668E+00 3.5092E+00 3.1991E+00 1.7115E+00 1.2904E+00 - 5.0119E+00 2.5330E+00 2.3014E+00 1.2102E+00 9.0293E-01 - 5.6234E+00 1.8197E+00 1.6424E+00 8.4453E-01 6.3435E-01 - 6.3096E+00 1.3068E+00 1.1765E+00 5.8918E-01 4.4214E-01 - 7.0795E+00 9.4327E-01 8.3557E-01 4.0889E-01 3.0502E-01 - 7.9433E+00 6.7611E-01 5.9223E-01 2.8225E-01 2.1130E-01 - 8.9125E+00 4.8193E-01 4.2401E-01 1.9465E-01 1.4645E-01 - 1.0000E+01 3.4479E-01 3.0018E-01 1.3321E-01 1.0003E-01 - 1.1220E+01 2.4646E-01 2.1305E-01 9.1189E-02 6.8226E-02 - 1.2589E+01 1.7558E-01 1.5076E-01 6.2217E-02 4.6628E-02 - 1.4125E+01 1.2567E-01 1.0680E-01 4.2452E-02 3.1624E-02 - 1.5849E+01 8.9899E-02 7.5724E-02 2.8841E-02 2.1348E-02 - 1.7783E+01 6.4073E-02 5.3699E-02 1.9307E-02 1.4407E-02 - 1.9953E+01 4.5746E-02 3.8228E-02 1.3038E-02 9.7175E-03 - 2.2387E+01 3.2569E-02 2.6928E-02 8.8389E-03 6.6450E-03 - 2.5119E+01 2.3224E-02 1.9058E-02 5.9375E-03 4.4944E-03 - 2.8184E+01 1.6540E-02 1.3480E-02 3.9719E-03 3.0124E-03 - 3.1623E+01 1.1871E-02 9.5373E-03 2.6468E-03 2.0196E-03 - 3.5481E+01 8.4672E-03 6.7523E-03 1.7662E-03 1.3567E-03 - 3.9811E+01 6.0387E-03 4.7769E-03 1.1779E-03 9.0827E-04 - 4.4668E+01 4.3053E-03 3.3772E-03 7.8470E-04 6.0743E-04 - 5.0119E+01 3.0656E-03 2.3878E-03 5.2252E-04 4.0662E-04 - 5.6234E+01 2.1802E-03 1.6868E-03 3.4711E-04 2.7052E-04 - 6.3096E+01 1.5517E-03 1.1884E-03 2.3052E-04 1.7956E-04 - 7.0795E+01 1.1020E-03 8.3892E-04 1.5346E-04 1.1977E-04 - 7.9433E+01 7.8152E-04 5.9146E-04 1.0238E-04 7.9833E-05 - 8.9125E+01 5.5431E-04 4.1686E-04 6.7590E-05 5.3263E-05 - 1.0000E+02 3.9306E-04 2.9321E-04 4.4804E-05 3.5518E-05 - 1.1220E+02 2.7817E-04 2.0575E-04 2.9753E-05 2.3688E-05 - 1.2589E+02 1.9646E-04 1.4429E-04 1.9732E-05 1.5798E-05 - 1.4125E+02 1.3866E-04 1.0114E-04 1.3081E-05 1.0483E-05 - 1.5849E+02 9.7762E-05 7.0756E-05 8.7213E-06 6.9852E-06 - 1.7783E+02 6.8939E-05 4.9423E-05 5.8153E-06 4.6625E-06 - 1.9953E+02 4.8494E-05 3.4502E-05 3.8767E-06 3.0986E-06 - 2.2387E+02 3.4029E-05 2.4079E-05 2.5801E-06 2.0703E-06 - 2.5119E+02 2.3925E-05 1.6743E-05 1.7243E-06 1.3939E-06 - 2.8184E+02 1.6791E-05 1.1678E-05 1.1463E-06 9.2932E-07 - 3.1623E+02 1.1770E-05 8.1373E-06 7.7018E-07 6.2057E-07 - 3.5481E+02 8.2334E-06 5.6450E-06 5.1620E-07 4.1558E-07 - 3.9811E+02 5.7623E-06 3.9244E-06 3.4551E-07 2.7962E-07 - 4.4668E+02 4.0311E-06 2.7202E-06 2.3177E-07 1.8767E-07 - 5.0119E+02 2.8144E-06 1.8846E-06 1.5568E-07 1.2577E-07 - 5.6234E+02 1.9693E-06 1.3083E-06 1.0511E-07 8.4756E-08 - 6.3096E+02 1.3716E-06 9.0420E-07 7.0789E-08 5.6891E-08 - 7.0795E+02 9.5555E-07 6.2500E-07 4.7537E-08 3.8289E-08 - 7.9433E+02 6.6486E-07 4.3099E-07 3.1901E-08 2.5685E-08 - 8.9125E+02 4.6263E-07 2.9690E-07 2.1501E-08 1.7112E-08 - 1.0000E+03 3.2200E-07 2.0536E-07 1.4601E-08 1.1538E-08 - 1.1220E+03 2.2258E-07 1.4103E-07 9.7995E-09 7.7384E-09 - 1.2589E+03 1.5392E-07 9.6852E-08 6.5914E-09 5.1618E-09 - 1.4125E+03 1.0632E-07 6.6437E-08 4.4314E-09 3.4712E-09 - 1.5849E+03 7.3294E-08 4.5521E-08 2.9872E-09 2.3071E-09 - 1.7783E+03 5.0454E-08 3.1060E-08 1.9911E-09 1.5383E-09 - 1.9953E+03 3.4797E-08 2.1206E-08 1.3378E-09 1.0414E-09 - 2.2387E+03 2.3838E-08 1.4429E-08 9.0409E-10 6.8862E-10 - 2.5119E+03 1.6291E-08 9.7941E-09 6.0195E-10 4.5048E-10 - 2.8184E+03 1.1138E-08 6.6263E-09 4.0192E-10 2.9968E-10 - 3.1623E+03 7.6924E-09 4.5522E-09 2.6445E-10 1.9965E-10 - 3.5481E+03 5.1440E-09 3.0332E-09 1.7627E-10 1.3203E-10 - 3.9811E+03 3.4799E-09 2.0430E-09 1.1664E-10 8.6955E-11 - 4.4668E+03 2.3519E-09 1.3732E-09 7.7586E-11 5.6623E-11 - 5.0119E+03 1.5890E-09 9.1916E-10 5.2275E-11 3.7955E-11 - 5.6234E+03 1.0701E-09 6.1466E-10 3.5168E-11 2.5339E-11 - 6.3096E+03 7.1902E-10 4.1074E-10 2.2893E-11 1.6342E-11 - 7.0795E+03 4.8145E-10 2.7305E-10 1.5138E-11 1.0639E-11 - 7.9433E+03 3.2150E-10 1.8103E-10 9.9660E-12 6.9995E-12 - 8.9125E+03 2.1457E-10 1.2000E-10 6.4996E-12 4.6758E-12 - 1.0000E+04 1.4293E-10 7.9493E-11 4.2883E-12 3.0439E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1413E+04 3.1810E+04 1.5690E+04 1.3954E+04 - 1.1220E-01 2.6164E+04 2.6451E+04 1.3314E+04 1.1772E+04 - 1.2589E-01 2.1703E+04 2.1887E+04 1.1129E+04 9.7709E+03 - 1.4125E-01 1.7881E+04 1.7954E+04 9.1978E+03 8.0116E+03 - 1.5849E-01 1.4571E+04 1.4602E+04 7.5309E+03 6.5073E+03 - 1.7783E-01 1.1732E+04 1.1756E+04 6.1279E+03 5.2364E+03 - 1.9953E-01 9.3338E+03 9.3440E+03 4.9542E+03 4.1907E+03 - 2.2387E-01 7.3353E+03 7.3494E+03 3.9599E+03 3.3281E+03 - 2.5119E-01 5.7028E+03 5.7111E+03 3.1385E+03 2.6071E+03 - 2.8184E-01 4.3935E+03 4.4023E+03 2.4653E+03 2.0285E+03 - 3.1623E-01 3.3587E+03 3.3733E+03 1.9146E+03 1.5681E+03 - 3.5481E-01 2.5600E+03 2.5625E+03 1.4752E+03 1.1997E+03 - 3.9811E-01 1.9378E+03 1.9393E+03 1.1283E+03 9.1469E+02 - 4.4668E-01 1.4580E+03 1.4598E+03 8.5765E+02 6.9273E+02 - 5.0119E-01 1.0999E+03 1.0940E+03 6.4575E+02 5.2259E+02 - 5.6234E-01 8.2494E+02 8.1859E+02 4.8828E+02 3.9311E+02 - 6.3096E-01 6.1621E+02 6.1122E+02 3.6723E+02 2.9261E+02 - 7.0795E-01 4.5975E+02 4.5459E+02 2.7451E+02 2.1758E+02 - 7.9433E-01 3.4494E+02 3.3857E+02 2.0557E+02 1.6305E+02 - 8.9125E-01 2.5850E+02 2.5358E+02 1.5275E+02 1.2192E+02 - 1.0000E+00 1.9289E+02 1.8830E+02 1.1422E+02 9.0434E+01 - 1.1220E+00 1.4424E+02 1.4015E+02 8.5000E+01 6.7278E+01 - 1.2589E+00 1.0786E+02 1.0449E+02 6.3368E+01 4.9977E+01 - 1.4125E+00 8.0797E+01 7.7688E+01 4.7056E+01 3.7131E+01 - 1.5849E+00 6.0385E+01 5.7745E+01 3.4784E+01 2.7434E+01 - 1.7783E+00 4.4981E+01 4.2931E+01 2.5816E+01 2.0230E+01 - 1.9953E+00 3.3298E+01 3.1717E+01 1.9112E+01 1.4993E+01 - 2.2387E+00 2.4538E+01 2.3367E+01 1.4010E+01 1.1048E+01 - 2.5119E+00 1.8163E+01 1.7166E+01 1.0281E+01 8.0363E+00 - 2.8184E+00 1.3351E+01 1.2596E+01 7.5422E+00 5.8569E+00 - 3.1623E+00 9.7764E+00 9.2066E+00 5.4997E+00 4.2264E+00 - 3.5481E+00 7.1289E+00 6.7080E+00 3.9894E+00 3.0251E+00 - 3.9811E+00 5.1757E+00 4.8840E+00 2.8704E+00 2.1689E+00 - 4.4668E+00 3.7708E+00 3.5437E+00 2.0547E+00 1.5533E+00 - 5.0119E+00 2.7405E+00 2.5617E+00 1.4697E+00 1.1038E+00 - 5.6234E+00 1.9753E+00 1.8445E+00 1.0482E+00 7.8235E-01 - 6.3096E+00 1.4202E+00 1.3235E+00 7.4220E-01 5.5334E-01 - 7.0795E+00 1.0290E+00 9.4904E-01 5.2031E-01 3.8704E-01 - 7.9433E+00 7.3973E-01 6.7766E-01 3.6485E-01 2.6990E-01 - 8.9125E+00 5.2956E-01 4.8311E-01 2.5566E-01 1.9091E-01 - 1.0000E+01 3.8197E-01 3.4727E-01 1.7937E-01 1.3334E-01 - 1.1220E+01 2.7329E-01 2.4728E-01 1.2379E-01 9.2160E-02 - 1.2589E+01 1.9535E-01 1.7602E-01 8.5409E-02 6.3889E-02 - 1.4125E+01 1.3984E-01 1.2517E-01 5.9207E-02 4.4127E-02 - 1.5849E+01 1.0043E-01 8.8601E-02 4.0630E-02 3.0514E-02 - 1.7783E+01 7.1773E-02 6.2842E-02 2.7730E-02 2.0944E-02 - 1.9953E+01 5.1219E-02 4.4692E-02 1.8939E-02 1.4250E-02 - 2.2387E+01 3.6874E-02 3.1631E-02 1.3015E-02 9.7855E-03 - 2.5119E+01 2.6333E-02 2.2536E-02 8.9307E-03 6.7561E-03 - 2.8184E+01 1.8725E-02 1.6041E-02 5.9631E-03 4.6070E-03 - 3.1623E+01 1.3356E-02 1.1276E-02 4.0582E-03 3.0903E-03 - 3.5481E+01 9.5337E-03 7.9882E-03 2.7355E-03 2.0920E-03 - 3.9811E+01 6.8086E-03 5.6513E-03 1.8414E-03 1.4089E-03 - 4.4668E+01 4.8574E-03 3.9973E-03 1.2338E-03 9.4804E-04 - 5.0119E+01 3.4629E-03 2.8264E-03 8.2713E-04 6.3745E-04 - 5.6234E+01 2.4661E-03 1.9965E-03 5.5428E-04 4.2740E-04 - 6.3096E+01 1.7582E-03 1.4127E-03 3.6877E-04 2.8599E-04 - 7.0795E+01 1.2547E-03 9.9878E-04 2.4571E-04 1.9185E-04 - 7.9433E+01 8.9288E-04 7.0451E-04 1.6385E-04 1.2820E-04 - 8.9125E+01 6.3388E-04 4.9648E-04 1.0872E-04 8.5147E-05 - 1.0000E+02 4.5108E-04 3.4940E-04 7.2443E-05 5.6693E-05 - 1.1220E+02 3.1985E-04 2.4594E-04 4.8085E-05 3.7747E-05 - 1.2589E+02 2.2684E-04 1.7281E-04 3.1813E-05 2.5109E-05 - 1.4125E+02 1.6063E-04 1.2138E-04 2.1032E-05 1.6684E-05 - 1.5849E+02 1.1358E-04 8.5150E-05 1.3931E-05 1.1101E-05 - 1.7783E+02 8.0288E-05 5.9742E-05 9.1973E-06 7.3837E-06 - 1.9953E+02 5.6658E-05 4.1811E-05 6.0867E-06 4.8802E-06 - 2.2387E+02 3.9974E-05 2.9211E-05 4.0401E-06 3.2286E-06 - 2.5119E+02 2.8158E-05 2.0430E-05 2.6839E-06 2.1469E-06 - 2.8184E+02 1.9798E-05 1.4276E-05 1.7825E-06 1.4149E-06 - 3.1623E+02 1.3927E-05 9.9533E-06 1.1785E-06 9.4469E-07 - 3.5481E+02 9.7742E-06 6.9235E-06 7.8135E-07 6.2899E-07 - 3.9811E+02 6.8599E-06 4.8162E-06 5.1980E-07 4.1743E-07 - 4.4668E+02 4.8092E-06 3.3506E-06 3.4642E-07 2.7809E-07 - 5.0119E+02 3.3674E-06 2.3266E-06 2.2969E-07 1.8491E-07 - 5.6234E+02 2.3604E-06 1.6138E-06 1.5344E-07 1.2341E-07 - 6.3096E+02 1.6483E-06 1.1183E-06 1.0271E-07 8.2484E-08 - 7.0795E+02 1.1513E-06 7.7489E-07 6.8874E-08 5.5098E-08 - 7.9433E+02 8.0405E-07 5.3574E-07 4.5997E-08 3.6908E-08 - 8.9125E+02 5.6092E-07 3.7045E-07 3.0691E-08 2.4544E-08 - 1.0000E+03 3.9099E-07 2.5595E-07 2.0515E-08 1.6366E-08 - 1.1220E+03 2.7153E-07 1.7635E-07 1.3699E-08 1.0961E-08 - 1.2589E+03 1.8869E-07 1.2151E-07 9.2023E-09 7.3678E-09 - 1.4125E+03 1.3109E-07 8.3815E-08 6.2085E-09 4.9128E-09 - 1.5849E+03 9.1038E-08 5.7636E-08 4.1468E-09 3.2803E-09 - 1.7783E+03 6.2953E-08 3.9556E-08 2.7808E-09 2.1919E-09 - 1.9953E+03 4.3592E-08 2.7098E-08 1.8840E-09 1.4539E-09 - 2.2387E+03 3.0056E-08 1.8530E-08 1.2437E-09 9.6547E-10 - 2.5119E+03 2.0679E-08 1.2661E-08 8.2979E-10 6.4827E-10 - 2.8184E+03 1.4202E-08 8.6087E-09 5.5416E-10 4.3038E-10 - 3.1623E+03 9.8487E-09 5.9489E-09 3.7626E-10 2.8614E-10 - 3.5481E+03 6.6791E-09 3.9983E-09 2.5322E-10 1.9074E-10 - 3.9811E+03 4.5588E-09 2.7088E-09 1.6782E-10 1.2621E-10 - 4.4668E+03 3.1050E-09 1.8300E-09 1.1072E-10 8.2857E-11 - 5.0119E+03 2.1130E-09 1.2321E-09 7.3790E-11 5.5077E-11 - 5.6234E+03 1.4296E-09 8.3039E-10 4.9078E-11 3.6078E-11 - 6.3096E+03 9.7039E-10 5.6000E-10 3.2799E-11 2.3878E-11 - 7.0795E+03 6.5642E-10 3.7582E-10 2.1780E-11 1.5952E-11 - 7.9433E+03 4.4146E-10 2.5116E-10 1.4184E-11 1.0383E-11 - 8.9125E+03 2.9573E-10 1.6722E-10 9.3202E-12 6.6850E-12 - 1.0000E+04 1.9830E-10 1.1098E-10 6.2317E-12 4.4223E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3284E+04 5.4319E+04 2.6295E+04 2.3851E+04 - 1.1220E-01 4.3696E+04 4.4438E+04 2.1923E+04 1.9783E+04 - 1.2589E-01 3.5697E+04 3.6061E+04 1.8103E+04 1.6168E+04 - 1.4125E-01 2.8924E+04 2.9046E+04 1.4812E+04 1.3007E+04 - 1.5849E-01 2.3161E+04 2.3188E+04 1.1929E+04 1.0398E+04 - 1.7783E-01 1.8279E+04 1.8322E+04 9.5327E+03 8.2466E+03 - 1.9953E-01 1.4256E+04 1.4287E+04 7.5768E+03 6.4722E+03 - 2.2387E-01 1.0971E+04 1.0994E+04 5.9589E+03 5.0280E+03 - 2.5119E-01 8.3570E+03 8.3738E+03 4.6364E+03 3.8790E+03 - 2.8184E-01 6.3061E+03 6.3136E+03 3.5730E+03 2.9699E+03 - 3.1623E-01 4.7056E+03 4.7188E+03 2.7171E+03 2.2437E+03 - 3.5481E-01 3.5186E+03 3.4996E+03 2.0526E+03 1.6845E+03 - 3.9811E-01 2.6227E+03 2.5932E+03 1.5384E+03 1.2534E+03 - 4.4668E-01 1.9281E+03 1.9157E+03 1.1468E+03 9.2634E+02 - 5.0119E-01 1.4047E+03 1.4105E+03 8.5107E+02 6.8467E+02 - 5.6234E-01 1.0267E+03 1.0288E+03 6.2271E+02 5.0495E+02 - 6.3096E-01 7.5513E+02 7.4429E+02 4.6003E+02 3.7105E+02 - 7.0795E-01 5.5240E+02 5.4362E+02 3.3872E+02 2.7148E+02 - 7.9433E-01 4.0541E+02 4.0103E+02 2.4821E+02 1.9631E+02 - 8.9125E-01 2.9957E+02 2.9654E+02 1.8278E+02 1.4153E+02 - 1.0000E+00 2.2102E+02 2.1575E+02 1.3353E+02 1.0508E+02 - 1.1220E+00 1.6360E+02 1.5775E+02 9.8477E+01 7.6919E+01 - 1.2589E+00 1.2143E+02 1.1582E+02 7.2391E+01 5.6544E+01 - 1.4125E+00 8.9206E+01 8.5456E+01 5.2947E+01 4.1973E+01 - 1.5849E+00 6.5520E+01 6.2953E+01 3.8909E+01 3.0945E+01 - 1.7783E+00 4.8472E+01 4.6209E+01 2.8615E+01 2.2634E+01 - 1.9953E+00 3.5866E+01 3.3897E+01 2.1069E+01 1.6495E+01 - 2.2387E+00 2.6395E+01 2.5188E+01 1.5465E+01 1.2081E+01 - 2.5119E+00 1.9259E+01 1.8662E+01 1.1388E+01 8.9614E+00 - 2.8184E+00 1.4314E+01 1.3537E+01 8.3243E+00 6.5201E+00 - 3.1623E+00 1.0373E+01 9.8851E+00 6.1601E+00 4.7356E+00 - 3.5481E+00 7.6022E+00 7.2553E+00 4.4938E+00 3.4295E+00 - 3.9811E+00 5.5846E+00 5.2948E+00 3.2463E+00 2.4853E+00 - 4.4668E+00 4.0712E+00 3.8512E+00 2.3694E+00 1.8078E+00 - 5.0119E+00 2.9537E+00 2.8082E+00 1.7143E+00 1.2963E+00 - 5.6234E+00 2.1494E+00 2.0474E+00 1.2312E+00 9.3560E-01 - 6.3096E+00 1.5647E+00 1.4854E+00 9.0180E-01 6.7708E-01 - 7.0795E+00 1.1229E+00 1.0744E+00 6.4755E-01 4.8007E-01 - 7.9433E+00 8.1246E-01 7.7092E-01 4.6186E-01 3.3913E-01 - 8.9125E+00 5.8806E-01 5.5489E-01 3.2678E-01 2.4180E-01 - 1.0000E+01 4.2154E-01 4.0025E-01 2.2968E-01 1.7261E-01 - 1.1220E+01 3.0229E-01 2.8657E-01 1.6360E-01 1.2210E-01 - 1.2589E+01 2.1790E-01 2.0511E-01 1.1569E-01 8.5828E-02 - 1.4125E+01 1.5721E-01 1.4791E-01 8.0895E-02 6.0204E-02 - 1.5849E+01 1.1338E-01 1.0655E-01 5.6894E-02 4.1915E-02 - 1.7783E+01 8.2000E-02 7.5615E-02 4.0039E-02 2.9240E-02 - 1.9953E+01 5.8607E-02 5.3830E-02 2.7498E-02 2.1024E-02 - 2.2387E+01 4.2077E-02 3.8416E-02 1.9335E-02 1.4812E-02 - 2.5119E+01 3.0243E-02 2.7362E-02 1.3411E-02 1.0161E-02 - 2.8184E+01 2.1634E-02 1.9324E-02 9.1859E-03 6.9348E-03 - 3.1623E+01 1.5673E-02 1.4133E-02 6.6037E-03 5.0091E-03 - 3.5481E+01 1.1218E-02 1.0046E-02 4.5460E-03 3.4574E-03 - 3.9811E+01 8.0303E-03 7.1332E-03 3.1218E-03 2.3817E-03 - 4.4668E+01 5.7421E-03 5.0555E-03 2.1359E-03 1.6321E-03 - 5.0119E+01 4.1064E-03 3.5807E-03 1.4543E-03 1.1152E-03 - 5.6234E+01 2.9342E-03 2.5359E-03 9.8913E-04 7.6014E-04 - 6.3096E+01 2.0920E-03 1.7937E-03 6.7088E-04 5.1739E-04 - 7.0795E+01 1.4894E-03 1.2670E-03 4.5391E-04 3.5099E-04 - 7.9433E+01 1.0627E-03 8.9412E-04 3.0613E-04 2.3699E-04 - 8.9125E+01 7.5765E-04 6.3051E-04 2.0569E-04 1.6010E-04 - 1.0000E+02 5.3939E-04 4.4550E-04 1.3827E-04 1.0745E-04 - 1.1220E+02 3.8371E-04 3.1401E-04 9.2462E-05 7.1908E-05 - 1.2589E+02 2.7261E-04 2.2094E-04 6.1722E-05 4.8122E-05 - 1.4125E+02 1.9347E-04 1.5519E-04 4.1178E-05 3.2119E-05 - 1.5849E+02 1.3717E-04 1.0898E-04 2.7373E-05 2.1334E-05 - 1.7783E+02 9.7140E-05 7.6364E-05 1.8129E-05 1.4206E-05 - 1.9953E+02 6.8634E-05 5.3458E-05 1.2016E-05 9.4359E-06 - 2.2387E+02 4.8499E-05 3.7434E-05 7.9391E-06 6.2086E-06 - 2.5119E+02 3.4255E-05 2.6166E-05 5.2202E-06 4.0970E-06 - 2.8184E+02 2.4157E-05 1.8240E-05 3.4460E-06 2.7222E-06 - 3.1623E+02 1.7011E-05 1.2759E-05 2.2716E-06 1.7972E-06 - 3.5481E+02 1.1963E-05 8.8950E-06 1.4926E-06 1.1854E-06 - 3.9811E+02 8.4066E-06 6.1855E-06 9.8099E-07 7.8027E-07 - 4.4668E+02 5.9108E-06 4.2974E-06 6.4431E-07 5.1162E-07 - 5.0119E+02 4.1427E-06 2.9873E-06 4.2339E-07 3.3735E-07 - 5.6234E+02 2.9026E-06 2.0754E-06 2.7920E-07 2.2157E-07 - 6.3096E+02 2.0302E-06 1.4377E-06 1.8358E-07 1.4575E-07 - 7.0795E+02 1.4205E-06 9.9617E-07 1.2062E-07 9.5980E-08 - 7.9433E+02 9.9396E-07 6.8968E-07 7.9226E-08 6.3116E-08 - 8.9125E+02 6.9445E-07 4.7738E-07 5.2353E-08 4.1585E-08 - 1.0000E+03 4.8436E-07 3.2946E-07 3.4565E-08 2.7500E-08 - 1.1220E+03 3.3752E-07 2.2712E-07 2.2916E-08 1.8138E-08 - 1.2589E+03 2.3519E-07 1.5689E-07 1.5155E-08 1.1982E-08 - 1.4125E+03 1.6356E-07 1.0816E-07 9.9553E-09 7.9010E-09 - 1.5849E+03 1.1371E-07 7.4500E-08 6.5734E-09 5.2358E-09 - 1.7783E+03 7.9206E-08 5.1324E-08 4.3981E-09 3.4616E-09 - 1.9953E+03 5.5094E-08 3.5356E-08 2.9348E-09 2.2841E-09 - 2.2387E+03 3.8146E-08 2.4241E-08 1.9353E-09 1.5076E-09 - 2.5119E+03 2.6435E-08 1.6601E-08 1.2826E-09 9.9828E-10 - 2.8184E+03 1.8286E-08 1.1358E-08 8.5781E-10 6.6489E-10 - 3.1623E+03 1.2698E-08 7.8367E-09 5.7313E-10 4.4105E-10 - 3.5481E+03 8.7016E-09 5.3230E-09 3.8055E-10 2.9054E-10 - 3.9811E+03 5.9824E-09 3.6304E-09 2.5259E-10 1.9202E-10 - 4.4668E+03 4.0986E-09 2.4672E-09 1.6665E-10 1.2677E-10 - 5.0119E+03 2.8035E-09 1.6742E-09 1.1157E-10 8.3157E-11 - 5.6234E+03 1.9171E-09 1.1360E-09 7.4202E-11 5.4775E-11 - 6.3096E+03 1.3115E-09 7.6840E-10 4.9070E-11 3.6507E-11 - 7.0795E+03 8.9258E-10 5.1929E-10 3.2554E-11 2.4057E-11 - 7.9433E+03 6.0589E-10 3.5022E-10 2.1188E-11 1.5745E-11 - 8.9125E+03 4.1128E-10 2.3427E-10 1.4098E-11 1.0284E-11 - 1.0000E+04 2.7774E-10 1.5649E-10 9.4475E-12 6.7039E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3804E+04 5.4706E+04 2.6532E+04 2.3974E+04 - 1.1220E-01 4.4060E+04 4.4766E+04 2.2219E+04 1.9896E+04 - 1.2589E-01 3.5927E+04 3.6344E+04 1.8283E+04 1.6245E+04 - 1.4125E-01 2.9129E+04 2.9327E+04 1.4937E+04 1.3130E+04 - 1.5849E-01 2.3349E+04 2.3438E+04 1.2076E+04 1.0500E+04 - 1.7783E-01 1.8443E+04 1.8489E+04 9.6440E+03 8.3164E+03 - 1.9953E-01 1.4374E+04 1.4404E+04 7.6464E+03 6.5421E+03 - 2.2387E-01 1.1073E+04 1.1114E+04 6.0144E+03 5.0792E+03 - 2.5119E-01 8.4337E+03 8.4792E+03 4.7129E+03 3.9120E+03 - 2.8184E-01 6.3662E+03 6.3819E+03 3.6366E+03 2.9770E+03 - 3.1623E-01 4.7731E+03 4.7811E+03 2.7612E+03 2.2479E+03 - 3.5481E-01 3.5599E+03 3.5627E+03 2.0908E+03 1.6980E+03 - 3.9811E-01 2.6408E+03 2.6358E+03 1.5709E+03 1.2683E+03 - 4.4668E-01 1.9410E+03 1.9404E+03 1.1703E+03 9.3810E+02 - 5.0119E-01 1.4190E+03 1.4259E+03 8.6578E+02 6.9217E+02 - 5.6234E-01 1.0415E+03 1.0431E+03 6.3234E+02 5.0955E+02 - 6.3096E-01 7.6388E+02 7.6013E+02 4.6334E+02 3.7249E+02 - 7.0795E-01 5.5925E+02 5.5661E+02 3.4348E+02 2.7121E+02 - 7.9433E-01 4.1252E+02 4.0823E+02 2.5316E+02 1.9954E+02 - 8.9125E-01 3.0303E+02 2.9956E+02 1.8745E+02 1.4493E+02 - 1.0000E+00 2.2376E+02 2.1753E+02 1.3547E+02 1.0617E+02 - 1.1220E+00 1.6458E+02 1.6024E+02 9.8996E+01 7.8064E+01 - 1.2589E+00 1.2162E+02 1.1715E+02 7.3155E+01 5.7187E+01 - 1.4125E+00 8.9938E+01 8.5873E+01 5.3571E+01 4.1850E+01 - 1.5849E+00 6.5685E+01 6.3746E+01 3.9429E+01 3.0771E+01 - 1.7783E+00 4.8430E+01 4.6793E+01 2.9101E+01 2.3144E+01 - 1.9953E+00 3.6041E+01 3.4272E+01 2.1319E+01 1.6812E+01 - 2.2387E+00 2.6658E+01 2.5358E+01 1.5523E+01 1.2090E+01 - 2.5119E+00 1.9434E+01 1.8631E+01 1.1398E+01 8.9295E+00 - 2.8184E+00 1.4256E+01 1.3487E+01 8.4248E+00 6.5679E+00 - 3.1623E+00 1.0400E+01 9.8823E+00 6.1856E+00 4.7572E+00 - 3.5481E+00 7.6188E+00 7.2360E+00 4.5027E+00 3.4633E+00 - 3.9811E+00 5.5885E+00 5.2971E+00 3.2635E+00 2.5077E+00 - 4.4668E+00 4.0695E+00 3.8905E+00 2.3798E+00 1.8189E+00 - 5.0119E+00 2.9637E+00 2.8278E+00 1.7247E+00 1.3063E+00 - 5.6234E+00 2.1532E+00 2.0496E+00 1.2322E+00 9.3403E-01 - 6.3096E+00 1.5622E+00 1.4817E+00 8.9239E-01 6.7371E-01 - 7.0795E+00 1.1184E+00 1.0700E+00 6.4572E-01 4.8202E-01 - 7.9433E+00 8.1665E-01 7.7437E-01 4.5981E-01 3.4365E-01 - 8.9125E+00 6.0199E-01 5.6153E-01 3.2855E-01 2.4927E-01 - 1.0000E+01 4.2526E-01 4.0360E-01 2.3330E-01 1.7480E-01 - 1.1220E+01 3.0593E-01 2.8925E-01 1.6618E-01 1.2477E-01 - 1.2589E+01 2.2100E-01 2.0702E-01 1.1743E-01 8.8196E-02 - 1.4125E+01 1.5932E-01 1.4903E-01 8.2680E-02 6.1624E-02 - 1.5849E+01 1.1508E-01 1.0764E-01 5.8930E-02 4.3036E-02 - 1.7783E+01 8.2893E-02 7.7100E-02 4.1240E-02 3.0488E-02 - 1.9953E+01 5.9539E-02 5.4895E-02 2.8152E-02 2.1708E-02 - 2.2387E+01 4.2942E-02 3.9194E-02 1.9904E-02 1.5051E-02 - 2.5119E+01 3.0409E-02 2.8007E-02 1.3742E-02 1.0546E-02 - 2.8184E+01 2.1835E-02 1.9940E-02 9.5009E-03 7.2934E-03 - 3.1623E+01 1.5857E-02 1.4367E-02 6.8280E-03 5.1899E-03 - 3.5481E+01 1.1362E-02 1.0215E-02 4.7134E-03 3.5917E-03 - 3.9811E+01 8.1368E-03 7.2593E-03 3.2493E-03 2.4757E-03 - 4.4668E+01 5.8215E-03 5.1545E-03 2.2298E-03 1.7056E-03 - 5.0119E+01 4.1621E-03 3.6558E-03 1.5242E-03 1.1717E-03 - 5.6234E+01 2.9759E-03 2.5913E-03 1.0405E-03 8.0160E-04 - 6.3096E+01 2.1259E-03 1.8329E-03 7.0951E-04 5.4819E-04 - 7.0795E+01 1.5160E-03 1.2956E-03 4.8281E-04 3.7341E-04 - 7.9433E+01 1.0813E-03 9.1510E-04 3.2661E-04 2.5269E-04 - 8.9125E+01 7.7064E-04 6.4589E-04 2.2044E-04 1.7044E-04 - 1.0000E+02 5.4739E-04 4.5592E-04 1.4813E-04 1.1520E-04 - 1.1220E+02 3.8902E-04 3.2116E-04 9.9454E-05 7.7482E-05 - 1.2589E+02 2.7643E-04 2.2602E-04 6.6600E-05 5.1971E-05 - 1.4125E+02 1.9623E-04 1.5878E-04 4.4449E-05 3.4805E-05 - 1.5849E+02 1.3897E-04 1.1135E-04 2.9605E-05 2.3204E-05 - 1.7783E+02 9.8343E-05 7.8008E-05 1.9688E-05 1.5408E-05 - 1.9953E+02 6.9578E-05 5.4562E-05 1.3059E-05 1.0229E-05 - 2.2387E+02 4.9163E-05 3.8162E-05 8.6382E-06 6.7943E-06 - 2.5119E+02 3.4644E-05 2.6693E-05 5.7012E-06 4.4783E-06 - 2.8184E+02 2.4385E-05 1.8650E-05 3.7690E-06 2.9448E-06 - 3.1623E+02 1.7184E-05 1.2988E-05 2.4768E-06 1.9531E-06 - 3.5481E+02 1.2075E-05 9.0386E-06 1.6275E-06 1.2848E-06 - 3.9811E+02 8.4834E-06 6.2834E-06 1.0710E-06 8.4553E-07 - 4.4668E+02 5.9539E-06 4.3589E-06 7.0371E-07 5.5459E-07 - 5.0119E+02 4.1699E-06 3.0216E-06 4.6116E-07 3.6482E-07 - 5.6234E+02 2.9256E-06 2.1006E-06 3.0271E-07 2.3976E-07 - 6.3096E+02 2.0422E-06 1.4545E-06 1.9800E-07 1.5708E-07 - 7.0795E+02 1.4269E-06 1.0061E-06 1.2962E-07 1.0305E-07 - 7.9433E+02 9.9868E-07 6.9563E-07 8.5469E-08 6.7840E-08 - 8.9125E+02 6.9715E-07 4.8021E-07 5.6016E-08 4.4426E-08 - 1.0000E+03 4.8630E-07 3.3145E-07 3.6718E-08 2.9067E-08 - 1.1220E+03 3.3847E-07 2.2869E-07 2.4200E-08 1.9085E-08 - 1.2589E+03 2.3582E-07 1.5765E-07 1.5855E-08 1.2598E-08 - 1.4125E+03 1.6409E-07 1.0846E-07 1.0430E-08 8.3151E-09 - 1.5849E+03 1.1415E-07 7.4803E-08 6.8988E-09 5.4836E-09 - 1.7783E+03 7.9281E-08 5.1614E-08 4.5648E-09 3.5991E-09 - 1.9953E+03 5.5166E-08 3.5428E-08 3.0280E-09 2.3892E-09 - 2.2387E+03 3.8260E-08 2.4353E-08 2.0159E-09 1.5780E-09 - 2.5119E+03 2.6482E-08 1.6680E-08 1.3433E-09 1.0383E-09 - 2.8184E+03 1.8277E-08 1.1391E-08 8.8899E-10 6.8662E-10 - 3.1623E+03 1.2693E-08 7.8497E-09 5.8492E-10 4.4967E-10 - 3.5481E+03 8.7013E-09 5.3340E-09 3.9025E-10 2.9687E-10 - 3.9811E+03 5.9716E-09 3.6291E-09 2.5866E-10 1.9733E-10 - 4.4668E+03 4.0965E-09 2.4684E-09 1.7019E-10 1.2983E-10 - 5.0119E+03 2.8164E-09 1.6803E-09 1.1221E-10 8.5079E-11 - 5.6234E+03 1.9280E-09 1.1390E-09 7.4200E-11 5.5829E-11 - 6.3096E+03 1.3139E-09 7.6939E-10 4.9922E-11 3.6609E-11 - 7.0795E+03 8.9394E-10 5.1983E-10 3.2742E-11 2.4019E-11 - 7.9433E+03 6.0766E-10 3.5048E-10 2.1677E-11 1.5704E-11 - 8.9125E+03 4.1158E-10 2.3518E-10 1.4355E-11 1.0386E-11 - 1.0000E+04 2.7808E-10 1.5732E-10 9.4203E-12 6.8698E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1604E+04 3.2045E+04 1.5786E+04 1.4042E+04 - 1.1220E-01 2.6361E+04 2.6718E+04 1.3438E+04 1.1860E+04 - 1.2589E-01 2.1914E+04 2.2130E+04 1.1299E+04 9.8616E+03 - 1.4125E-01 1.8121E+04 1.8206E+04 9.3443E+03 8.0917E+03 - 1.5849E-01 1.4794E+04 1.4828E+04 7.6746E+03 6.5909E+03 - 1.7783E-01 1.1909E+04 1.1950E+04 6.2608E+03 5.3146E+03 - 1.9953E-01 9.4855E+03 9.5149E+03 5.0631E+03 4.2450E+03 - 2.2387E-01 7.4636E+03 7.4834E+03 4.0579E+03 3.3794E+03 - 2.5119E-01 5.8090E+03 5.8258E+03 3.2137E+03 2.6595E+03 - 2.8184E-01 4.4876E+03 4.4993E+03 2.5280E+03 2.0677E+03 - 3.1623E-01 3.4326E+03 3.4492E+03 1.9667E+03 1.5998E+03 - 3.5481E-01 2.6071E+03 2.6229E+03 1.5121E+03 1.2245E+03 - 3.9811E-01 1.9805E+03 1.9820E+03 1.1568E+03 9.2795E+02 - 4.4668E-01 1.4944E+03 1.4941E+03 8.8250E+02 7.0270E+02 - 5.0119E-01 1.1200E+03 1.1221E+03 6.6880E+02 5.2994E+02 - 5.6234E-01 8.4136E+02 8.3736E+02 5.0448E+02 3.9834E+02 - 6.3096E-01 6.2911E+02 6.2409E+02 3.7866E+02 2.9916E+02 - 7.0795E-01 4.6878E+02 4.6482E+02 2.8290E+02 2.2325E+02 - 7.9433E-01 3.4998E+02 3.4596E+02 2.1097E+02 1.6610E+02 - 8.9125E-01 2.6121E+02 2.5756E+02 1.5786E+02 1.2383E+02 - 1.0000E+00 1.9550E+02 1.9166E+02 1.1701E+02 9.1748E+01 - 1.1220E+00 1.4590E+02 1.4277E+02 8.7048E+01 6.8233E+01 - 1.2589E+00 1.0911E+02 1.0615E+02 6.4646E+01 5.0834E+01 - 1.4125E+00 8.1595E+01 7.8690E+01 4.8002E+01 3.7685E+01 - 1.5849E+00 6.0764E+01 5.8308E+01 3.5656E+01 2.7979E+01 - 1.7783E+00 4.5126E+01 4.3315E+01 2.6449E+01 2.0607E+01 - 1.9953E+00 3.3460E+01 3.2040E+01 1.9531E+01 1.5118E+01 - 2.2387E+00 2.4728E+01 2.3686E+01 1.4380E+01 1.1147E+01 - 2.5119E+00 1.8204E+01 1.7454E+01 1.0540E+01 8.1356E+00 - 2.8184E+00 1.3373E+01 1.2829E+01 7.6631E+00 5.8807E+00 - 3.1623E+00 9.8295E+00 9.3057E+00 5.5728E+00 4.2824E+00 - 3.5481E+00 7.1845E+00 6.7690E+00 4.0449E+00 3.0814E+00 - 3.9811E+00 5.2290E+00 4.9128E+00 2.9171E+00 2.2131E+00 - 4.4668E+00 3.8072E+00 3.5535E+00 2.0965E+00 1.5824E+00 - 5.0119E+00 2.7555E+00 2.5750E+00 1.5034E+00 1.1242E+00 - 5.6234E+00 1.9879E+00 1.8693E+00 1.0681E+00 8.0050E-01 - 6.3096E+00 1.4405E+00 1.3495E+00 7.5097E-01 5.7252E-01 - 7.0795E+00 1.0448E+00 9.6389E-01 5.3123E-01 4.0270E-01 - 7.9433E+00 7.5064E-01 6.8964E-01 3.7731E-01 2.8105E-01 - 8.9125E+00 5.3866E-01 4.9246E-01 2.6401E-01 1.9584E-01 - 1.0000E+01 3.8571E-01 3.5344E-01 1.8484E-01 1.3745E-01 - 1.1220E+01 2.7637E-01 2.5198E-01 1.2845E-01 9.5236E-02 - 1.2589E+01 1.9779E-01 1.7993E-01 8.8973E-02 6.6475E-02 - 1.4125E+01 1.4145E-01 1.2775E-01 6.1614E-02 4.6454E-02 - 1.5849E+01 1.0145E-01 9.0885E-02 4.2593E-02 3.2259E-02 - 1.7783E+01 7.2552E-02 6.4820E-02 2.9192E-02 2.1953E-02 - 1.9953E+01 5.1805E-02 4.5843E-02 1.9997E-02 1.4990E-02 - 2.2387E+01 3.7063E-02 3.2292E-02 1.3715E-02 1.0275E-02 - 2.5119E+01 2.6626E-02 2.2791E-02 9.2952E-03 6.9620E-03 - 2.8184E+01 1.9030E-02 1.6256E-02 6.2644E-03 4.7608E-03 - 3.1623E+01 1.3564E-02 1.1552E-02 4.3113E-03 3.2789E-03 - 3.5481E+01 9.6919E-03 8.1789E-03 2.9156E-03 2.2216E-03 - 3.9811E+01 6.9222E-03 5.7880E-03 1.9672E-03 1.5045E-03 - 4.4668E+01 4.9343E-03 4.0968E-03 1.3244E-03 1.0180E-03 - 5.0119E+01 3.5195E-03 2.9007E-03 8.8925E-04 6.8614E-04 - 5.6234E+01 2.5118E-03 2.0490E-03 5.9542E-04 4.6027E-04 - 6.3096E+01 1.7894E-03 1.4455E-03 3.9826E-04 3.0867E-04 - 7.0795E+01 1.2739E-03 1.0201E-03 2.6630E-04 2.0673E-04 - 7.9433E+01 9.0530E-04 7.1928E-04 1.7763E-04 1.3801E-04 - 8.9125E+01 6.4322E-04 5.0652E-04 1.1840E-04 9.2312E-05 - 1.0000E+02 4.5700E-04 3.5687E-04 7.8524E-05 6.1409E-05 - 1.1220E+02 3.2404E-04 2.5109E-04 5.2070E-05 4.0849E-05 - 1.2589E+02 2.2960E-04 1.7621E-04 3.4507E-05 2.7111E-05 - 1.4125E+02 1.6266E-04 1.2363E-04 2.2861E-05 1.8012E-05 - 1.5849E+02 1.1495E-04 8.6740E-05 1.5083E-05 1.1945E-05 - 1.7783E+02 8.1080E-05 6.0744E-05 9.9484E-06 7.9021E-06 - 1.9953E+02 5.7231E-05 4.2479E-05 6.5675E-06 5.2296E-06 - 2.2387E+02 4.0327E-05 2.9641E-05 4.3491E-06 3.4640E-06 - 2.5119E+02 2.8359E-05 2.0667E-05 2.8809E-06 2.3008E-06 - 2.8184E+02 1.9908E-05 1.4439E-05 1.9139E-06 1.5259E-06 - 3.1623E+02 1.4054E-05 1.0083E-05 1.2625E-06 1.0102E-06 - 3.5481E+02 9.8717E-06 7.0083E-06 8.3371E-07 6.6960E-07 - 3.9811E+02 6.9217E-06 4.8719E-06 5.5093E-07 4.4344E-07 - 4.4668E+02 4.8447E-06 3.3898E-06 3.6491E-07 2.9459E-07 - 5.0119E+02 3.3903E-06 2.3528E-06 2.4236E-07 1.9547E-07 - 5.6234E+02 2.3776E-06 1.6309E-06 1.6201E-07 1.3006E-07 - 6.3096E+02 1.6605E-06 1.1300E-06 1.0816E-07 8.6331E-08 - 7.0795E+02 1.1594E-06 7.8193E-07 7.2000E-08 5.7564E-08 - 7.9433E+02 8.0957E-07 5.4075E-07 4.7988E-08 3.8528E-08 - 8.9125E+02 5.6386E-07 3.7347E-07 3.1921E-08 2.5513E-08 - 1.0000E+03 3.9365E-07 2.5797E-07 2.1241E-08 1.6994E-08 - 1.1220E+03 2.7353E-07 1.7764E-07 1.4160E-08 1.1346E-08 - 1.2589E+03 1.9033E-07 1.2232E-07 9.4672E-09 7.5617E-09 - 1.4125E+03 1.3212E-07 8.4101E-08 6.3504E-09 5.0144E-09 - 1.5849E+03 9.1478E-08 5.7937E-08 4.2518E-09 3.3516E-09 - 1.7783E+03 6.3167E-08 3.9859E-08 2.8478E-09 2.2438E-09 - 1.9953E+03 4.3870E-08 2.7289E-08 1.9130E-09 1.4968E-09 - 2.2387E+03 3.0259E-08 1.8714E-08 1.2744E-09 9.9703E-10 - 2.5119E+03 2.0834E-08 1.2779E-08 8.5319E-10 6.5758E-10 - 2.8184E+03 1.4318E-08 8.7081E-09 5.7775E-10 4.3653E-10 - 3.1623E+03 9.9340E-09 5.9860E-09 3.8459E-10 2.8976E-10 - 3.5481E+03 6.7224E-09 4.0249E-09 2.5422E-10 1.9320E-10 - 3.9811E+03 4.5980E-09 2.7216E-09 1.6882E-10 1.2710E-10 - 4.4668E+03 3.1324E-09 1.8386E-09 1.1281E-10 8.4420E-11 - 5.0119E+03 2.1308E-09 1.2439E-09 7.5507E-11 5.5994E-11 - 5.6234E+03 1.4433E-09 8.3720E-10 4.9337E-11 3.6525E-11 - 6.3096E+03 9.7562E-10 5.6354E-10 3.2863E-11 2.4151E-11 - 7.0795E+03 6.5926E-10 3.7750E-10 2.1599E-11 1.5959E-11 - 7.9433E+03 4.4412E-10 2.5217E-10 1.4439E-11 1.0469E-11 - 8.9125E+03 2.9853E-10 1.6804E-10 9.5545E-12 6.7488E-12 - 1.0000E+04 2.0017E-10 1.1175E-10 6.1633E-12 4.4153E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.1631E+04 2.1916E+04 1.0779E+04 9.7256E+03 - 1.1220E-01 1.8378E+04 1.8570E+04 9.2818E+03 8.3213E+03 - 1.2589E-01 1.5508E+04 1.5645E+04 7.8999E+03 7.0031E+03 - 1.4125E-01 1.3007E+04 1.3086E+04 6.6496E+03 5.8397E+03 - 1.5849E-01 1.0809E+04 1.0842E+04 5.5555E+03 4.8299E+03 - 1.7783E-01 8.8711E+03 8.9029E+03 4.6081E+03 3.9544E+03 - 1.9953E-01 7.2000E+03 7.2201E+03 3.7846E+03 3.2197E+03 - 2.2387E-01 5.7818E+03 5.7897E+03 3.0877E+03 2.5974E+03 - 2.5119E-01 4.5815E+03 4.5978E+03 2.4974E+03 2.0794E+03 - 2.8184E-01 3.6042E+03 3.6173E+03 1.9989E+03 1.6474E+03 - 3.1623E-01 2.8193E+03 2.8272E+03 1.5808E+03 1.2946E+03 - 3.5481E-01 2.1889E+03 2.1924E+03 1.2399E+03 1.0077E+03 - 3.9811E-01 1.6911E+03 1.6886E+03 9.6806E+02 7.7789E+02 - 4.4668E-01 1.2977E+03 1.2940E+03 7.4848E+02 5.9835E+02 - 5.0119E-01 9.9005E+02 9.8654E+02 5.7516E+02 4.5875E+02 - 5.6234E-01 7.5167E+02 7.4833E+02 4.4028E+02 3.5034E+02 - 6.3096E-01 5.6990E+02 5.6641E+02 3.3540E+02 2.6521E+02 - 7.0795E-01 4.3059E+02 4.2664E+02 2.5261E+02 1.9990E+02 - 7.9433E-01 3.2470E+02 3.2055E+02 1.9058E+02 1.5038E+02 - 8.9125E-01 2.4460E+02 2.4078E+02 1.4389E+02 1.1315E+02 - 1.0000E+00 1.8352E+02 1.8027E+02 1.0763E+02 8.4388E+01 - 1.1220E+00 1.3795E+02 1.3486E+02 8.0520E+01 6.2735E+01 - 1.2589E+00 1.0361E+02 1.0086E+02 5.9997E+01 4.6833E+01 - 1.4125E+00 7.7566E+01 7.5198E+01 4.4472E+01 3.4645E+01 - 1.5849E+00 5.7875E+01 5.5694E+01 3.2987E+01 2.5550E+01 - 1.7783E+00 4.2979E+01 4.1209E+01 2.4460E+01 1.8781E+01 - 1.9953E+00 3.1828E+01 3.0343E+01 1.7924E+01 1.3671E+01 - 2.2387E+00 2.3489E+01 2.2235E+01 1.2989E+01 9.9950E+00 - 2.5119E+00 1.7297E+01 1.6275E+01 9.4310E+00 7.2602E+00 - 2.8184E+00 1.2671E+01 1.1857E+01 6.8293E+00 5.2092E+00 - 3.1623E+00 9.2720E+00 8.6372E+00 4.9270E+00 3.7602E+00 - 3.5481E+00 6.7523E+00 6.2494E+00 3.5159E+00 2.6775E+00 - 3.9811E+00 4.8875E+00 4.5173E+00 2.5015E+00 1.8946E+00 - 4.4668E+00 3.5385E+00 3.2465E+00 1.7751E+00 1.3340E+00 - 5.0119E+00 2.5622E+00 2.3353E+00 1.2496E+00 9.4059E-01 - 5.6234E+00 1.8467E+00 1.6795E+00 8.7455E-01 6.6111E-01 - 6.3096E+00 1.3285E+00 1.2017E+00 6.1664E-01 4.6272E-01 - 7.0795E+00 9.5402E-01 8.5697E-01 4.3161E-01 3.2113E-01 - 7.9433E+00 6.8561E-01 6.1191E-01 2.9847E-01 2.2138E-01 - 8.9125E+00 4.9011E-01 4.3606E-01 2.0487E-01 1.5333E-01 - 1.0000E+01 3.5121E-01 3.0798E-01 1.4124E-01 1.0561E-01 - 1.1220E+01 2.5165E-01 2.1887E-01 9.7169E-02 7.2526E-02 - 1.2589E+01 1.8004E-01 1.5548E-01 6.6391E-02 4.9621E-02 - 1.4125E+01 1.2874E-01 1.0993E-01 4.5445E-02 3.3937E-02 - 1.5849E+01 9.1715E-02 7.7861E-02 3.1013E-02 2.3112E-02 - 1.7783E+01 6.5225E-02 5.5100E-02 2.0868E-02 1.5653E-02 - 1.9953E+01 4.6604E-02 3.9164E-02 1.4133E-02 1.0651E-02 - 2.2387E+01 3.3281E-02 2.7817E-02 9.5658E-03 7.1494E-03 - 2.5119E+01 2.3739E-02 1.9660E-02 6.4099E-03 4.8264E-03 - 2.8184E+01 1.6985E-02 1.3964E-02 4.3483E-03 3.3032E-03 - 3.1623E+01 1.2116E-02 9.8282E-03 2.8937E-03 2.2136E-03 - 3.5481E+01 8.6425E-03 6.9558E-03 1.9361E-03 1.4875E-03 - 3.9811E+01 6.1579E-03 4.9175E-03 1.2924E-03 9.9725E-04 - 4.4668E+01 4.3860E-03 3.4759E-03 8.6249E-04 6.6852E-04 - 5.0119E+01 3.1239E-03 2.4548E-03 5.7622E-04 4.4638E-04 - 5.6234E+01 2.2218E-03 1.7323E-03 3.8420E-04 2.9745E-04 - 6.3096E+01 1.5793E-03 1.2237E-03 2.5512E-04 1.9858E-04 - 7.0795E+01 1.1225E-03 8.6319E-04 1.6927E-04 1.3238E-04 - 7.9433E+01 7.9608E-04 6.0805E-04 1.1253E-04 8.8353E-05 - 8.9125E+01 5.6416E-04 4.2811E-04 7.4680E-05 5.8916E-05 - 1.0000E+02 3.9981E-04 3.0030E-04 4.9400E-05 3.8910E-05 - 1.1220E+02 2.8273E-04 2.1096E-04 3.2772E-05 2.5953E-05 - 1.2589E+02 1.9997E-04 1.4795E-04 2.1656E-05 1.7263E-05 - 1.4125E+02 1.4114E-04 1.0357E-04 1.4371E-05 1.1441E-05 - 1.5849E+02 9.9523E-05 7.2438E-05 9.5171E-06 7.6150E-06 - 1.7783E+02 7.0102E-05 5.0601E-05 6.2977E-06 5.0531E-06 - 1.9953E+02 4.9260E-05 3.5261E-05 4.1796E-06 3.3600E-06 - 2.2387E+02 3.4620E-05 2.4585E-05 2.7803E-06 2.2380E-06 - 2.5119E+02 2.4281E-05 1.7166E-05 1.8512E-06 1.5019E-06 - 2.8184E+02 1.7001E-05 1.1937E-05 1.2355E-06 9.9804E-07 - 3.1623E+02 1.1935E-05 8.2873E-06 8.2637E-07 6.6595E-07 - 3.5481E+02 8.3528E-06 5.7507E-06 5.5221E-07 4.4520E-07 - 3.9811E+02 5.8444E-06 3.9942E-06 3.6806E-07 2.9822E-07 - 4.4668E+02 4.0882E-06 2.7712E-06 2.4574E-07 1.9999E-07 - 5.0119E+02 2.8602E-06 1.9218E-06 1.6464E-07 1.3359E-07 - 5.6234E+02 2.0004E-06 1.3310E-06 1.1094E-07 8.8980E-08 - 6.3096E+02 1.3913E-06 9.1954E-07 7.4598E-08 5.9462E-08 - 7.0795E+02 9.6887E-07 6.3548E-07 5.0098E-08 3.9814E-08 - 7.9433E+02 6.7477E-07 4.3869E-07 3.3536E-08 2.6731E-08 - 8.9125E+02 4.7024E-07 3.0209E-07 2.2255E-08 1.8054E-08 - 1.0000E+03 3.2703E-07 2.0868E-07 1.5042E-08 1.2054E-08 - 1.1220E+03 2.2599E-07 1.4328E-07 1.0169E-08 7.9774E-09 - 1.2589E+03 1.5639E-07 9.8285E-08 6.8403E-09 5.3175E-09 - 1.4125E+03 1.0788E-07 6.7315E-08 4.5847E-09 3.5769E-09 - 1.5849E+03 7.4345E-08 4.6141E-08 3.0569E-09 2.3822E-09 - 1.7783E+03 5.1364E-08 3.1507E-08 2.0399E-09 1.5573E-09 - 1.9953E+03 3.5315E-08 2.1559E-08 1.3806E-09 1.0393E-09 - 2.2387E+03 2.4176E-08 1.4691E-08 9.1143E-10 6.8998E-10 - 2.5119E+03 1.6592E-08 9.9729E-09 6.0796E-10 4.6127E-10 - 2.8184E+03 1.1327E-08 6.7485E-09 4.1202E-10 3.0684E-10 - 3.1623E+03 7.8319E-09 4.6321E-09 2.7445E-10 2.0481E-10 - 3.5481E+03 5.2287E-09 3.0853E-09 1.8196E-10 1.3483E-10 - 3.9811E+03 3.5374E-09 2.0794E-09 1.2050E-10 9.0129E-11 - 4.4668E+03 2.3930E-09 1.3977E-09 7.9918E-11 5.9900E-11 - 5.0119E+03 1.6174E-09 9.3474E-10 5.3266E-11 3.8798E-11 - 5.6234E+03 1.0899E-09 6.2353E-10 3.5692E-11 2.5644E-11 - 6.3096E+03 7.3080E-10 4.1682E-10 2.3131E-11 1.6859E-11 - 7.0795E+03 4.9047E-10 2.7791E-10 1.5288E-11 1.1055E-11 - 7.9433E+03 3.2810E-10 1.8431E-10 1.0168E-11 7.2066E-12 - 8.9125E+03 2.1859E-10 1.2202E-10 6.6510E-12 4.7382E-12 - 1.0000E+04 1.4616E-10 8.0723E-11 4.4085E-12 3.1358E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5557E+04 1.5763E+04 7.6805E+03 7.1084E+03 - 1.1220E-01 1.3416E+04 1.3571E+04 6.7044E+03 6.1389E+03 - 1.2589E-01 1.1521E+04 1.1609E+04 5.7764E+03 5.2475E+03 - 1.4125E-01 9.8330E+03 9.8906E+03 4.9336E+03 4.4429E+03 - 1.5849E-01 8.3114E+03 8.3433E+03 4.1906E+03 3.7301E+03 - 1.7783E-01 6.9446E+03 6.9612E+03 3.5334E+03 3.1070E+03 - 1.9953E-01 5.7416E+03 5.7405E+03 2.9542E+03 2.5709E+03 - 2.2387E-01 4.6895E+03 4.6794E+03 2.4519E+03 2.1061E+03 - 2.5119E-01 3.7911E+03 3.7802E+03 2.0098E+03 1.7117E+03 - 2.8184E-01 3.0400E+03 3.0324E+03 1.6316E+03 1.3761E+03 - 3.1623E-01 2.4119E+03 2.4103E+03 1.3146E+03 1.0955E+03 - 3.5481E-01 1.9040E+03 1.9018E+03 1.0490E+03 8.6890E+02 - 3.9811E-01 1.4974E+03 1.4899E+03 8.3056E+02 6.8238E+02 - 4.4668E-01 1.1657E+03 1.1578E+03 6.5142E+02 5.3254E+02 - 5.0119E-01 9.0083E+02 8.9539E+02 5.0804E+02 4.1164E+02 - 5.6234E-01 6.9277E+02 6.8768E+02 3.9375E+02 3.1591E+02 - 6.3096E-01 5.3105E+02 5.2487E+02 3.0261E+02 2.4246E+02 - 7.0795E-01 4.0625E+02 3.9912E+02 2.3085E+02 1.8415E+02 - 7.9433E-01 3.0831E+02 3.0233E+02 1.7506E+02 1.3923E+02 - 8.9125E-01 2.3238E+02 2.2748E+02 1.3238E+02 1.0403E+02 - 1.0000E+00 1.7497E+02 1.7110E+02 9.9587E+01 7.8106E+01 - 1.1220E+00 1.3177E+02 1.2834E+02 7.4234E+01 5.8153E+01 - 1.2589E+00 9.9090E+01 9.5572E+01 5.5154E+01 4.3254E+01 - 1.4125E+00 7.4213E+01 7.0898E+01 4.0790E+01 3.1959E+01 - 1.5849E+00 5.5429E+01 5.2656E+01 3.0020E+01 2.3422E+01 - 1.7783E+00 4.1177E+01 3.8907E+01 2.2079E+01 1.7023E+01 - 1.9953E+00 3.0383E+01 2.8680E+01 1.6149E+01 1.2352E+01 - 2.2387E+00 2.2350E+01 2.0981E+01 1.1709E+01 8.9463E+00 - 2.5119E+00 1.6374E+01 1.5207E+01 8.4540E+00 6.4261E+00 - 2.8184E+00 1.1941E+01 1.1024E+01 6.0528E+00 4.6085E+00 - 3.1623E+00 8.7418E+00 7.9833E+00 4.2955E+00 3.2702E+00 - 3.5481E+00 6.3512E+00 5.7673E+00 3.0369E+00 2.3046E+00 - 3.9811E+00 4.5932E+00 4.1431E+00 2.1434E+00 1.6181E+00 - 4.4668E+00 3.3194E+00 2.9710E+00 1.5063E+00 1.1330E+00 - 5.0119E+00 2.3957E+00 2.1264E+00 1.0485E+00 7.9218E-01 - 5.6234E+00 1.7266E+00 1.5145E+00 7.2986E-01 5.5080E-01 - 6.3096E+00 1.2386E+00 1.0830E+00 5.0727E-01 3.8207E-01 - 7.0795E+00 8.8668E-01 7.7531E-01 3.4853E-01 2.6270E-01 - 7.9433E+00 6.3811E-01 5.5193E-01 2.4006E-01 1.7915E-01 - 8.9125E+00 4.5685E-01 3.9107E-01 1.6485E-01 1.2338E-01 - 1.0000E+01 3.2617E-01 2.7611E-01 1.1188E-01 8.3996E-02 - 1.1220E+01 2.3340E-01 1.9534E-01 7.6174E-02 5.6937E-02 - 1.2589E+01 1.6624E-01 1.3878E-01 5.1661E-02 3.8812E-02 - 1.4125E+01 1.1822E-01 9.8169E-02 3.4850E-02 2.6439E-02 - 1.5849E+01 8.4690E-02 6.9424E-02 2.3447E-02 1.7758E-02 - 1.7783E+01 6.0593E-02 4.9273E-02 1.5742E-02 1.1922E-02 - 1.9953E+01 4.3274E-02 3.4911E-02 1.0616E-02 8.0041E-03 - 2.2387E+01 3.0832E-02 2.4675E-02 7.1571E-03 5.3844E-03 - 2.5119E+01 2.1901E-02 1.7427E-02 4.7954E-03 3.6357E-03 - 2.8184E+01 1.5584E-02 1.2402E-02 3.2040E-03 2.4153E-03 - 3.1623E+01 1.1139E-02 8.7607E-03 2.1227E-03 1.6352E-03 - 3.5481E+01 7.9436E-03 6.1920E-03 1.4173E-03 1.0921E-03 - 3.9811E+01 5.6592E-03 4.3749E-03 9.4458E-04 7.2921E-04 - 4.4668E+01 4.0232E-03 3.0901E-03 6.2773E-04 4.8707E-04 - 5.0119E+01 2.8597E-03 2.1805E-03 4.1597E-04 3.2400E-04 - 5.6234E+01 2.0283E-03 1.5389E-03 2.7611E-04 2.1656E-04 - 6.3096E+01 1.4389E-03 1.0840E-03 1.8402E-04 1.4439E-04 - 7.0795E+01 1.0202E-03 7.6266E-04 1.2178E-04 9.6380E-05 - 7.9433E+01 7.2181E-04 5.3582E-04 8.0598E-05 6.4235E-05 - 8.9125E+01 5.1061E-04 3.7576E-04 5.3733E-05 4.2715E-05 - 1.0000E+02 3.6022E-04 2.6413E-04 3.5611E-05 2.8421E-05 - 1.1220E+02 2.5407E-04 1.8494E-04 2.3668E-05 1.8945E-05 - 1.2589E+02 1.7917E-04 1.2951E-04 1.5706E-05 1.2612E-05 - 1.4125E+02 1.2619E-04 9.0386E-05 1.0462E-05 8.4308E-06 - 1.5849E+02 8.8687E-05 6.3002E-05 6.9787E-06 5.6437E-06 - 1.7783E+02 6.2232E-05 4.3946E-05 4.6563E-06 3.7793E-06 - 1.9953E+02 4.3598E-05 3.0607E-05 3.1167E-06 2.5151E-06 - 2.2387E+02 3.0604E-05 2.1312E-05 2.0764E-06 1.6790E-06 - 2.5119E+02 2.1458E-05 1.4832E-05 1.3966E-06 1.1153E-06 - 2.8184E+02 1.4970E-05 1.0280E-05 9.4991E-07 7.5151E-07 - 3.1623E+02 1.0508E-05 7.1449E-06 6.2419E-07 5.0533E-07 - 3.5481E+02 7.3427E-06 4.9477E-06 4.1956E-07 3.3935E-07 - 3.9811E+02 5.1189E-06 3.4275E-06 2.8168E-07 2.2727E-07 - 4.4668E+02 3.5767E-06 2.3734E-06 1.8896E-07 1.5256E-07 - 5.0119E+02 2.4968E-06 1.6399E-06 1.2704E-07 1.0299E-07 - 5.6234E+02 1.7419E-06 1.1349E-06 8.5746E-08 6.8829E-08 - 6.3096E+02 1.2092E-06 7.8241E-07 5.7503E-08 4.6132E-08 - 7.0795E+02 8.4047E-07 5.3933E-07 3.8800E-08 3.1214E-08 - 7.9433E+02 5.8344E-07 3.7185E-07 2.6119E-08 2.1079E-08 - 8.9125E+02 4.0373E-07 2.5602E-07 1.7465E-08 1.4030E-08 - 1.0000E+03 2.8045E-07 1.7679E-07 1.1849E-08 9.3172E-09 - 1.1220E+03 1.9323E-07 1.2028E-07 8.0281E-09 6.2082E-09 - 1.2589E+03 1.3342E-07 8.2153E-08 5.4107E-09 4.1372E-09 - 1.4125E+03 9.1632E-08 5.6135E-08 3.5757E-09 2.7696E-09 - 1.5849E+03 6.2865E-08 3.8314E-08 2.3645E-09 1.8245E-09 - 1.7783E+03 4.3136E-08 2.6111E-08 1.5831E-09 1.2249E-09 - 1.9953E+03 2.9534E-08 1.7726E-08 1.0701E-09 8.1855E-10 - 2.2387E+03 2.0117E-08 1.2007E-08 7.1641E-10 5.4058E-10 - 2.5119E+03 1.3678E-08 8.1380E-09 4.7703E-10 3.5126E-10 - 2.8184E+03 9.2907E-09 5.4907E-09 3.1870E-10 2.3282E-10 - 3.1623E+03 6.4079E-09 3.7635E-09 2.1182E-10 1.5683E-10 - 3.5481E+03 4.2432E-09 2.4764E-09 1.4065E-10 1.0403E-10 - 3.9811E+03 2.8586E-09 1.6588E-09 9.3318E-11 6.7702E-11 - 4.4668E+03 1.9201E-09 1.1105E-09 6.1915E-11 4.4413E-11 - 5.0119E+03 1.2905E-09 7.4040E-10 4.1547E-11 2.9932E-11 - 5.6234E+03 8.6337E-10 4.9043E-10 2.7355E-11 1.9565E-11 - 6.3096E+03 5.7507E-10 3.2678E-10 1.7526E-11 1.2759E-11 - 7.0795E+03 3.8324E-10 2.1593E-10 1.1432E-11 8.3454E-12 - 7.9433E+03 2.5517E-10 1.4324E-10 7.5970E-12 5.4556E-12 - 8.9125E+03 1.6968E-10 9.4995E-11 4.9847E-12 3.5124E-12 - 1.0000E+04 1.1259E-10 6.2444E-11 3.2847E-12 2.2669E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0246E+04 1.0406E+04 4.9837E+03 4.8370E+03 - 1.1220E-01 9.0041E+03 9.1360E+03 4.4222E+03 4.2376E+03 - 1.2589E-01 7.8705E+03 7.9797E+03 3.8806E+03 3.6867E+03 - 1.4125E-01 6.8456E+03 6.9154E+03 3.3736E+03 3.1720E+03 - 1.5849E-01 5.9010E+03 5.9412E+03 2.9078E+03 2.7051E+03 - 1.7783E-01 5.0221E+03 5.0543E+03 2.4907E+03 2.2944E+03 - 1.9953E-01 4.2393E+03 4.2521E+03 2.1235E+03 1.9282E+03 - 2.2387E-01 3.5448E+03 3.5399E+03 1.7912E+03 1.6089E+03 - 2.5119E-01 2.9284E+03 2.9214E+03 1.4957E+03 1.3309E+03 - 2.8184E-01 2.3976E+03 2.3882E+03 1.2394E+03 1.0899E+03 - 3.1623E-01 1.9473E+03 1.9386E+03 1.0171E+03 8.8374E+02 - 3.5481E-01 1.5693E+03 1.5621E+03 8.2605E+02 7.1033E+02 - 3.9811E-01 1.2539E+03 1.2463E+03 6.6557E+02 5.6784E+02 - 4.4668E-01 9.9630E+02 9.8639E+02 5.3116E+02 4.4848E+02 - 5.0119E-01 7.8653E+02 7.7557E+02 4.2082E+02 3.5080E+02 - 5.6234E-01 6.1446E+02 6.0443E+02 3.3086E+02 2.7382E+02 - 6.3096E-01 4.7728E+02 4.6777E+02 2.5796E+02 2.1236E+02 - 7.0795E-01 3.6862E+02 3.6000E+02 1.9999E+02 1.6259E+02 - 7.9433E-01 2.8239E+02 2.7545E+02 1.5318E+02 1.2375E+02 - 8.9125E-01 2.1545E+02 2.0970E+02 1.1648E+02 9.3823E+01 - 1.0000E+00 1.6386E+02 1.5869E+02 8.8160E+01 7.0404E+01 - 1.1220E+00 1.2416E+02 1.1924E+02 6.6129E+01 5.2598E+01 - 1.2589E+00 9.3320E+01 8.9343E+01 4.9202E+01 3.9050E+01 - 1.4125E+00 7.0123E+01 6.6624E+01 3.6452E+01 2.8756E+01 - 1.5849E+00 5.2618E+01 4.9283E+01 2.6895E+01 2.1005E+01 - 1.7783E+00 3.9142E+01 3.6351E+01 1.9678E+01 1.5302E+01 - 1.9953E+00 2.8880E+01 2.6768E+01 1.4325E+01 1.1117E+01 - 2.2387E+00 2.1221E+01 1.9553E+01 1.0376E+01 8.0057E+00 - 2.5119E+00 1.5554E+01 1.4221E+01 7.4561E+00 5.7382E+00 - 2.8184E+00 1.1383E+01 1.0306E+01 5.3239E+00 4.0678E+00 - 3.1623E+00 8.2852E+00 7.4259E+00 3.7472E+00 2.8592E+00 - 3.5481E+00 6.0157E+00 5.3445E+00 2.6352E+00 2.0047E+00 - 3.9811E+00 4.3494E+00 3.8399E+00 1.8453E+00 1.4008E+00 - 4.4668E+00 3.1455E+00 2.7576E+00 1.2874E+00 9.7357E-01 - 5.0119E+00 2.2705E+00 1.9681E+00 8.9444E-01 6.7247E-01 - 5.6234E+00 1.6302E+00 1.4047E+00 6.1853E-01 4.6391E-01 - 6.3096E+00 1.1710E+00 9.9938E-01 4.2481E-01 3.2028E-01 - 7.0795E+00 8.4021E-01 7.0720E-01 2.9118E-01 2.1882E-01 - 7.9433E+00 6.0149E-01 5.0189E-01 1.9914E-01 1.4894E-01 - 8.9125E+00 4.3042E-01 3.5704E-01 1.3558E-01 1.0070E-01 - 1.0000E+01 3.0739E-01 2.5362E-01 9.1425E-02 6.8546E-02 - 1.1220E+01 2.1887E-01 1.7967E-01 6.1770E-02 4.6332E-02 - 1.2589E+01 1.5620E-01 1.2688E-01 4.1728E-02 3.1294E-02 - 1.4125E+01 1.1137E-01 8.9750E-02 2.7993E-02 2.1089E-02 - 1.5849E+01 7.9380E-02 6.3506E-02 1.8816E-02 1.4145E-02 - 1.7783E+01 5.6602E-02 4.4965E-02 1.2507E-02 9.4770E-03 - 1.9953E+01 4.0271E-02 3.1844E-02 8.2995E-03 6.3209E-03 - 2.2387E+01 2.8705E-02 2.2568E-02 5.5651E-03 4.1997E-03 - 2.5119E+01 2.0532E-02 1.5992E-02 3.7262E-03 2.8505E-03 - 2.8184E+01 1.4659E-02 1.1307E-02 2.4636E-03 1.9167E-03 - 3.1623E+01 1.0417E-02 7.9859E-03 1.6557E-03 1.2786E-03 - 3.5481E+01 7.4012E-03 5.6437E-03 1.1017E-03 8.5304E-04 - 3.9811E+01 5.2587E-03 3.9858E-03 7.3284E-04 5.6734E-04 - 4.4668E+01 3.7336E-03 2.8109E-03 4.8656E-04 3.7849E-04 - 5.0119E+01 2.6482E-03 1.9801E-03 3.2346E-04 2.5328E-04 - 5.6234E+01 1.8779E-03 1.3941E-03 2.1439E-04 1.6921E-04 - 6.3096E+01 1.3279E-03 9.8233E-04 1.4213E-04 1.1281E-04 - 7.0795E+01 9.3800E-04 6.8936E-04 9.4391E-05 7.4913E-05 - 7.9433E+01 6.6344E-04 4.8266E-04 6.2736E-05 4.9806E-05 - 8.9125E+01 4.6812E-04 3.3847E-04 4.1871E-05 3.3392E-05 - 1.0000E+02 3.2945E-04 2.3682E-04 2.7815E-05 2.2335E-05 - 1.1220E+02 2.3162E-04 1.6551E-04 1.8497E-05 1.4933E-05 - 1.2589E+02 1.6300E-04 1.1566E-04 1.2413E-05 1.0010E-05 - 1.4125E+02 1.1450E-04 8.0688E-05 8.2633E-06 6.6947E-06 - 1.5849E+02 8.0356E-05 5.6227E-05 5.5250E-06 4.4996E-06 - 1.7783E+02 5.6432E-05 3.9139E-05 3.7219E-06 3.0089E-06 - 1.9953E+02 3.9478E-05 2.7206E-05 2.4976E-06 2.0133E-06 - 2.2387E+02 2.7596E-05 1.8886E-05 1.6723E-06 1.3571E-06 - 2.5119E+02 1.9345E-05 1.3099E-05 1.1251E-06 9.1560E-07 - 2.8184E+02 1.3506E-05 9.0748E-06 7.6180E-07 6.1159E-07 - 3.1623E+02 9.4367E-06 6.3102E-06 5.0869E-07 4.1119E-07 - 3.5481E+02 6.5789E-06 4.3600E-06 3.4139E-07 2.7706E-07 - 3.9811E+02 4.5866E-06 3.0173E-06 2.3062E-07 1.8526E-07 - 4.4668E+02 3.1916E-06 2.0865E-06 1.5584E-07 1.2420E-07 - 5.0119E+02 2.2246E-06 1.4399E-06 1.0522E-07 8.4033E-08 - 5.6234E+02 1.5504E-06 9.9672E-07 7.0888E-08 5.6356E-08 - 6.3096E+02 1.0731E-06 6.8355E-07 4.7777E-08 3.7625E-08 - 7.0795E+02 7.4330E-07 4.7018E-07 3.2253E-08 2.5165E-08 - 7.9433E+02 5.1365E-07 3.2327E-07 2.1707E-08 1.6882E-08 - 8.9125E+02 3.5480E-07 2.2206E-07 1.4586E-08 1.1432E-08 - 1.0000E+03 2.4635E-07 1.5273E-07 9.8332E-09 7.5989E-09 - 1.1220E+03 1.6874E-07 1.0395E-07 6.5435E-09 5.0704E-09 - 1.2589E+03 1.1573E-07 7.0957E-08 4.4327E-09 3.4184E-09 - 1.4125E+03 7.9191E-08 4.8273E-08 2.9565E-09 2.2696E-09 - 1.5849E+03 5.4324E-08 3.2723E-08 1.9667E-09 1.5100E-09 - 1.7783E+03 3.7106E-08 2.2237E-08 1.3257E-09 9.9843E-10 - 1.9953E+03 2.5185E-08 1.5078E-08 8.8257E-10 6.5860E-10 - 2.2387E+03 1.7095E-08 1.0140E-08 5.9711E-10 4.3525E-10 - 2.5119E+03 1.1580E-08 6.8461E-09 3.9775E-10 2.8655E-10 - 2.8184E+03 7.8396E-09 4.6006E-09 2.5927E-10 1.9084E-10 - 3.1623E+03 5.3995E-09 3.1485E-09 1.7115E-10 1.2734E-10 - 3.5481E+03 3.5427E-09 2.0600E-09 1.1144E-10 8.4238E-11 - 3.9811E+03 2.3754E-09 1.3732E-09 7.3344E-11 5.5340E-11 - 4.4668E+03 1.5886E-09 9.1298E-10 4.9044E-11 3.6126E-11 - 5.0119E+03 1.0581E-09 6.0705E-10 3.2435E-11 2.4004E-11 - 5.6234E+03 7.0573E-10 4.0276E-10 2.0916E-11 1.5453E-11 - 6.3096E+03 4.7113E-10 2.6568E-10 1.4133E-11 1.0162E-11 - 7.0795E+03 3.1276E-10 1.7585E-10 9.4137E-12 6.5903E-12 - 7.9433E+03 2.0706E-10 1.1602E-10 6.1523E-12 4.2649E-12 - 8.9125E+03 1.3700E-10 7.6053E-11 3.9651E-12 2.7924E-12 - 1.0000E+04 9.0331E-11 4.9566E-11 2.5849E-12 1.8350E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.7396E+03 5.8561E+03 2.7892E+03 2.7846E+03 - 1.1220E-01 5.1396E+03 5.2332E+03 2.5106E+03 2.4868E+03 - 1.2589E-01 4.5851E+03 4.6485E+03 2.2370E+03 2.1966E+03 - 1.4125E-01 4.0631E+03 4.1094E+03 1.9780E+03 1.9227E+03 - 1.5849E-01 3.5673E+03 3.6069E+03 1.7370E+03 1.6716E+03 - 1.7783E-01 3.1045E+03 3.1312E+03 1.5153E+03 1.4427E+03 - 1.9953E-01 2.6772E+03 2.6929E+03 1.3130E+03 1.2365E+03 - 2.2387E-01 2.2857E+03 2.2947E+03 1.1249E+03 1.0503E+03 - 2.5119E-01 1.9313E+03 1.9347E+03 9.5616E+02 8.8583E+02 - 2.8184E-01 1.6177E+03 1.6184E+03 8.0829E+02 7.4095E+02 - 3.1623E-01 1.3475E+03 1.3452E+03 6.7535E+02 6.1256E+02 - 3.5481E-01 1.1138E+03 1.1069E+03 5.5941E+02 5.0161E+02 - 3.9811E-01 9.1109E+02 9.0493E+02 4.5974E+02 4.0822E+02 - 4.4668E-01 7.3867E+02 7.3408E+02 3.7458E+02 3.3126E+02 - 5.0119E-01 5.9692E+02 5.8993E+02 3.0306E+02 2.6555E+02 - 5.6234E-01 4.7742E+02 4.7007E+02 2.4281E+02 2.1045E+02 - 6.3096E-01 3.7928E+02 3.7181E+02 1.9289E+02 1.6587E+02 - 7.0795E-01 3.0002E+02 2.9211E+02 1.5148E+02 1.2954E+02 - 7.9433E-01 2.3440E+02 2.2749E+02 1.1794E+02 1.0012E+02 - 8.9125E-01 1.8245E+02 1.7626E+02 9.1832E+01 7.6771E+01 - 1.0000E+00 1.4141E+02 1.3589E+02 7.0754E+01 5.8590E+01 - 1.1220E+00 1.0889E+02 1.0391E+02 5.4092E+01 4.4247E+01 - 1.2589E+00 8.3349E+01 7.8793E+01 4.0824E+01 3.3221E+01 - 1.4125E+00 6.3328E+01 5.9492E+01 3.0518E+01 2.4721E+01 - 1.5849E+00 4.7845E+01 4.4663E+01 2.2714E+01 1.8276E+01 - 1.7783E+00 3.5897E+01 3.3145E+01 1.6778E+01 1.3358E+01 - 1.9953E+00 2.6761E+01 2.4436E+01 1.2311E+01 9.6856E+00 - 2.2387E+00 1.9858E+01 1.7957E+01 8.9294E+00 6.9815E+00 - 2.5119E+00 1.4589E+01 1.3101E+01 6.4298E+00 4.9836E+00 - 2.8184E+00 1.0693E+01 9.5085E+00 4.5977E+00 3.5255E+00 - 3.1623E+00 7.8297E+00 6.9071E+00 3.2486E+00 2.4949E+00 - 3.5481E+00 5.6997E+00 4.9739E+00 2.2853E+00 1.7505E+00 - 3.9811E+00 4.1382E+00 3.5718E+00 1.5962E+00 1.2198E+00 - 4.4668E+00 2.9973E+00 2.5588E+00 1.1106E+00 8.4656E-01 - 5.0119E+00 2.1583E+00 1.8279E+00 7.6714E-01 5.8280E-01 - 5.6234E+00 1.5563E+00 1.3043E+00 5.2721E-01 3.9862E-01 - 6.3096E+00 1.1222E+00 9.2921E-01 3.6205E-01 2.7319E-01 - 7.0795E+00 8.0235E-01 6.5911E-01 2.4791E-01 1.8582E-01 - 7.9433E+00 5.7437E-01 4.6938E-01 1.6849E-01 1.2541E-01 - 8.9125E+00 4.1176E-01 3.3441E-01 1.1371E-01 8.4865E-02 - 1.0000E+01 2.9233E-01 2.3589E-01 7.6696E-02 5.7425E-02 - 1.1220E+01 2.0838E-01 1.6664E-01 5.1532E-02 3.8687E-02 - 1.2589E+01 1.4871E-01 1.1772E-01 3.4467E-02 2.6055E-02 - 1.4125E+01 1.0627E-01 8.3308E-02 2.3109E-02 1.7471E-02 - 1.5849E+01 7.5747E-02 5.9101E-02 1.5486E-02 1.1670E-02 - 1.7783E+01 5.3876E-02 4.1878E-02 1.0336E-02 7.7771E-03 - 1.9953E+01 3.8413E-02 2.9722E-02 6.8600E-03 5.2403E-03 - 2.2387E+01 2.7317E-02 2.0936E-02 4.5486E-03 3.4974E-03 - 2.5119E+01 1.9436E-02 1.4808E-02 3.0467E-03 2.3031E-03 - 2.8184E+01 1.3826E-02 1.0508E-02 2.0160E-03 1.5215E-03 - 3.1623E+01 9.8226E-03 7.3917E-03 1.3404E-03 1.0420E-03 - 3.5481E+01 6.9746E-03 5.2182E-03 8.8909E-04 6.9613E-04 - 3.9811E+01 4.9492E-03 3.6799E-03 5.9208E-04 4.6490E-04 - 4.4668E+01 3.5081E-03 2.5943E-03 3.9530E-04 3.1119E-04 - 5.0119E+01 2.4822E-03 1.8266E-03 2.6273E-04 2.0708E-04 - 5.6234E+01 1.7584E-03 1.2821E-03 1.7354E-04 1.3810E-04 - 6.3096E+01 1.2415E-03 8.9934E-04 1.1551E-04 9.2234E-05 - 7.0795E+01 8.7473E-04 6.3087E-04 7.7293E-05 6.1705E-05 - 7.9433E+01 6.1558E-04 4.4189E-04 5.1632E-05 4.1453E-05 - 8.9125E+01 4.3299E-04 3.0912E-04 3.4652E-05 2.7684E-05 - 1.0000E+02 3.0504E-04 2.1610E-04 2.3002E-05 1.8525E-05 - 1.1220E+02 2.1410E-04 1.5068E-04 1.5316E-05 1.2413E-05 - 1.2589E+02 1.5028E-04 1.0510E-04 1.0259E-05 8.3026E-06 - 1.4125E+02 1.0530E-04 7.3154E-05 6.8804E-06 5.5514E-06 - 1.5849E+02 7.3741E-05 5.0855E-05 4.6256E-06 3.7316E-06 - 1.7783E+02 5.1647E-05 3.5375E-05 3.1091E-06 2.5186E-06 - 1.9953E+02 3.6139E-05 2.4526E-05 2.0928E-06 1.6933E-06 - 2.2387E+02 2.5253E-05 1.7026E-05 1.4117E-06 1.1364E-06 - 2.5119E+02 1.7610E-05 1.1793E-05 9.4624E-07 7.6447E-07 - 2.8184E+02 1.2309E-05 8.1603E-06 6.3650E-07 5.1451E-07 - 3.1623E+02 8.5911E-06 5.6731E-06 4.3000E-07 3.4800E-07 - 3.5481E+02 5.9667E-06 3.9171E-06 2.9021E-07 2.3509E-07 - 3.9811E+02 4.1561E-06 2.7066E-06 1.9705E-07 1.5698E-07 - 4.4668E+02 2.8921E-06 1.8658E-06 1.3412E-07 1.0554E-07 - 5.0119E+02 2.0084E-06 1.2873E-06 9.0141E-08 7.1480E-08 - 5.6234E+02 1.3986E-06 8.9010E-07 6.0524E-08 4.7911E-08 - 6.3096E+02 9.6410E-07 6.1000E-07 4.0743E-08 3.2041E-08 - 7.0795E+02 6.6641E-07 4.1881E-07 2.7168E-08 2.1478E-08 - 7.9433E+02 4.6031E-07 2.8661E-07 1.8172E-08 1.4370E-08 - 8.9125E+02 3.1660E-07 1.9554E-07 1.2311E-08 9.5638E-09 - 1.0000E+03 2.1892E-07 1.3440E-07 8.2779E-09 6.4274E-09 - 1.1220E+03 1.4946E-07 9.1085E-08 5.5362E-09 4.2702E-09 - 1.2589E+03 1.0211E-07 6.2068E-08 3.7338E-09 2.8439E-09 - 1.4125E+03 6.9546E-08 4.2060E-08 2.4927E-09 1.9009E-09 - 1.5849E+03 4.7457E-08 2.8478E-08 1.6548E-09 1.2583E-09 - 1.7783E+03 3.2312E-08 1.9206E-08 1.0972E-09 8.2282E-10 - 1.9953E+03 2.1914E-08 1.2951E-08 7.3537E-10 5.4538E-10 - 2.2387E+03 1.4792E-08 8.6964E-09 4.8793E-10 3.6675E-10 - 2.5119E+03 9.9640E-09 5.8228E-09 3.2450E-10 2.4392E-10 - 2.8184E+03 6.7068E-09 3.9037E-09 2.1424E-10 1.5885E-10 - 3.1623E+03 4.6286E-09 2.6786E-09 1.4250E-10 1.0602E-10 - 3.5481E+03 3.0134E-09 1.7340E-09 9.4654E-11 6.8923E-11 - 3.9811E+03 2.0148E-09 1.1539E-09 6.2663E-11 4.5206E-11 - 4.4668E+03 1.3443E-09 7.6958E-10 4.1458E-11 3.0398E-11 - 5.0119E+03 8.9270E-10 5.1002E-10 2.7229E-11 2.0119E-11 - 5.6234E+03 5.9239E-10 3.3562E-10 1.7789E-11 1.2934E-11 - 6.3096E+03 3.9362E-10 2.2214E-10 1.1766E-11 8.3339E-12 - 7.0795E+03 2.6072E-10 1.4588E-10 7.6393E-12 5.5733E-12 - 7.9433E+03 1.7266E-10 9.6083E-11 5.0329E-12 3.4744E-12 - 8.9125E+03 1.1430E-10 6.3167E-11 3.2767E-12 2.2443E-12 - 1.0000E+04 7.5424E-11 4.1155E-11 2.1136E-12 1.4897E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6377E+03 3.6927E+03 1.7566E+03 1.7960E+03 - 1.1220E-01 3.2947E+03 3.3353E+03 1.5908E+03 1.6155E+03 - 1.2589E-01 2.9644E+03 2.9911E+03 1.4287E+03 1.4407E+03 - 1.4125E-01 2.6504E+03 2.6715E+03 1.2737E+03 1.2789E+03 - 1.5849E-01 2.3531E+03 2.3661E+03 1.1294E+03 1.1224E+03 - 1.7783E-01 2.0685E+03 2.0759E+03 9.9384E+02 9.7375E+02 - 1.9953E-01 1.8012E+03 1.8024E+03 8.6505E+02 8.4265E+02 - 2.2387E-01 1.5535E+03 1.5493E+03 7.4526E+02 7.2312E+02 - 2.5119E-01 1.3274E+03 1.3233E+03 6.3895E+02 6.1432E+02 - 2.8184E-01 1.1250E+03 1.1206E+03 5.4310E+02 5.1805E+02 - 3.1623E-01 9.4575E+02 9.3964E+02 4.5762E+02 4.3273E+02 - 3.5481E-01 7.8962E+02 7.8234E+02 3.8347E+02 3.5872E+02 - 3.9811E-01 6.5485E+02 6.4739E+02 3.1831E+02 2.9479E+02 - 4.4668E-01 5.3963E+02 5.3216E+02 2.6150E+02 2.4065E+02 - 5.0119E-01 4.4180E+02 4.3417E+02 2.1315E+02 1.9538E+02 - 5.6234E-01 3.5944E+02 3.5148E+02 1.7245E+02 1.5658E+02 - 6.3096E-01 2.9005E+02 2.8236E+02 1.3883E+02 1.2432E+02 - 7.0795E-01 2.3238E+02 2.2528E+02 1.1104E+02 9.8527E+01 - 7.9433E-01 1.8509E+02 1.7851E+02 8.7678E+01 7.7354E+01 - 8.9125E-01 1.4656E+02 1.4062E+02 6.8508E+01 6.0284E+01 - 1.0000E+00 1.1528E+02 1.1002E+02 5.3498E+01 4.6417E+01 - 1.1220E+00 9.0027E+01 8.5508E+01 4.1357E+01 3.5390E+01 - 1.2589E+00 7.0055E+01 6.5863E+01 3.1713E+01 2.6804E+01 - 1.4125E+00 5.4118E+01 5.0383E+01 2.4118E+01 2.0156E+01 - 1.5849E+00 4.1463E+01 3.8273E+01 1.8162E+01 1.5062E+01 - 1.7783E+00 3.1550E+01 2.8882E+01 1.3516E+01 1.1111E+01 - 1.9953E+00 2.3831E+01 2.1596E+01 9.9878E+00 8.1424E+00 - 2.2387E+00 1.7886E+01 1.6071E+01 7.3467E+00 5.9265E+00 - 2.5119E+00 1.3318E+01 1.1893E+01 5.3640E+00 4.2605E+00 - 2.8184E+00 9.8798E+00 8.7151E+00 3.8698E+00 3.0385E+00 - 3.1623E+00 7.2896E+00 6.3375E+00 2.7513E+00 2.1504E+00 - 3.5481E+00 5.3496E+00 4.5968E+00 1.9463E+00 1.5131E+00 - 3.9811E+00 3.9035E+00 3.3240E+00 1.3700E+00 1.0563E+00 - 4.4668E+00 2.8376E+00 2.3939E+00 9.5791E-01 7.3108E-01 - 5.0119E+00 2.0505E+00 1.7151E+00 6.6265E-01 5.0463E-01 - 5.6234E+00 1.4794E+00 1.2240E+00 4.5696E-01 3.4794E-01 - 6.3096E+00 1.0661E+00 8.7318E-01 3.1290E-01 2.3691E-01 - 7.0795E+00 7.6375E-01 6.2117E-01 2.1287E-01 1.5996E-01 - 7.9433E+00 5.4716E-01 4.4119E-01 1.4358E-01 1.0816E-01 - 8.9125E+00 3.9228E-01 3.1127E-01 9.6416E-02 7.2985E-02 - 1.0000E+01 2.7991E-01 2.2163E-01 6.5391E-02 4.9060E-02 - 1.1220E+01 1.9956E-01 1.5665E-01 4.3941E-02 3.2896E-02 - 1.2589E+01 1.4237E-01 1.1075E-01 2.9308E-02 2.2104E-02 - 1.4125E+01 1.0135E-01 7.8398E-02 1.9525E-02 1.4770E-02 - 1.5849E+01 7.2229E-02 5.5503E-02 1.3011E-02 9.8906E-03 - 1.7783E+01 5.1494E-02 3.9313E-02 8.6222E-03 6.6445E-03 - 1.9953E+01 3.6641E-02 2.7631E-02 5.7244E-03 4.3950E-03 - 2.2387E+01 2.6024E-02 1.9488E-02 3.8595E-03 2.9333E-03 - 2.5119E+01 1.8445E-02 1.3820E-02 2.5553E-03 1.9790E-03 - 2.8184E+01 1.3089E-02 9.8197E-03 1.6756E-03 1.3177E-03 - 3.1623E+01 9.3419E-03 6.9304E-03 1.1268E-03 8.8145E-04 - 3.5481E+01 6.6252E-03 4.8838E-03 7.4919E-04 5.8802E-04 - 3.9811E+01 4.6890E-03 3.4394E-03 4.9833E-04 3.9152E-04 - 4.4668E+01 3.3123E-03 2.4181E-03 3.3116E-04 2.6097E-04 - 5.0119E+01 2.3421E-03 1.7007E-03 2.2045E-04 1.7505E-04 - 5.6234E+01 1.6536E-03 1.1947E-03 1.4688E-04 1.1734E-04 - 6.3096E+01 1.1670E-03 8.3715E-04 9.8228E-05 7.8150E-05 - 7.0795E+01 8.2192E-04 5.8558E-04 6.5480E-05 5.2357E-05 - 7.9433E+01 5.7725E-04 4.1023E-04 4.3849E-05 3.5181E-05 - 8.9125E+01 4.0607E-04 2.8652E-04 2.9463E-05 2.3772E-05 - 1.0000E+02 2.8559E-04 1.9957E-04 1.9562E-05 1.5909E-05 - 1.1220E+02 2.0017E-04 1.3902E-04 1.3124E-05 1.0715E-05 - 1.2589E+02 1.4018E-04 9.6788E-05 8.8493E-06 7.2092E-06 - 1.4125E+02 9.8053E-05 6.7341E-05 5.9605E-06 4.7987E-06 - 1.5849E+02 6.8552E-05 4.6818E-05 3.9993E-06 3.2227E-06 - 1.7783E+02 4.8040E-05 3.2527E-05 2.6996E-06 2.1932E-06 - 1.9953E+02 3.3592E-05 2.2557E-05 1.8271E-06 1.4774E-06 - 2.2387E+02 2.3424E-05 1.5614E-05 1.2367E-06 9.9571E-07 - 2.5119E+02 1.6351E-05 1.0811E-05 8.3332E-07 6.7124E-07 - 2.8184E+02 1.1387E-05 7.4841E-06 5.5788E-07 4.5122E-07 - 3.1623E+02 7.9504E-06 5.1896E-06 3.7971E-07 3.0370E-07 - 3.5481E+02 5.5161E-06 3.5785E-06 2.5613E-07 2.0556E-07 - 3.9811E+02 3.8264E-06 2.4707E-06 1.7271E-07 1.3753E-07 - 4.4668E+02 2.6532E-06 1.7008E-06 1.1638E-07 9.2502E-08 - 5.0119E+02 1.8433E-06 1.1703E-06 7.8326E-08 6.2273E-08 - 5.6234E+02 1.2833E-06 8.0830E-07 5.3022E-08 4.1645E-08 - 6.3096E+02 8.8086E-07 5.5198E-07 3.5494E-08 2.7894E-08 - 7.0795E+02 6.0700E-07 3.7812E-07 2.3856E-08 1.8650E-08 - 7.9433E+02 4.1768E-07 2.5869E-07 1.6053E-08 1.2633E-08 - 8.9125E+02 2.8713E-07 1.7647E-07 1.0816E-08 8.4355E-09 - 1.0000E+03 1.9843E-07 1.2114E-07 7.2425E-09 5.5291E-09 - 1.1220E+03 1.3454E-07 8.1478E-08 4.8500E-09 3.7010E-09 - 1.2589E+03 9.1754E-08 5.5340E-08 3.2302E-09 2.5033E-09 - 1.4125E+03 6.2385E-08 3.7496E-08 2.1425E-09 1.6648E-09 - 1.5849E+03 4.2396E-08 2.5305E-08 1.4508E-09 1.0879E-09 - 1.7783E+03 2.8735E-08 1.7051E-08 9.6605E-10 7.2812E-10 - 1.9953E+03 1.9411E-08 1.1460E-08 6.3611E-10 4.8274E-10 - 2.2387E+03 1.3041E-08 7.6783E-09 4.2976E-10 3.1527E-10 - 2.5119E+03 8.7412E-09 5.1368E-09 2.8548E-10 2.0888E-10 - 2.8184E+03 5.8819E-09 3.4143E-09 1.8734E-10 1.3588E-10 - 3.1623E+03 4.0444E-09 2.3396E-09 1.2209E-10 9.0381E-11 - 3.5481E+03 2.6222E-09 1.5138E-09 8.0998E-11 5.9355E-11 - 3.9811E+03 1.7489E-09 1.0053E-09 5.3642E-11 3.8610E-11 - 4.4668E+03 1.1678E-09 6.6474E-10 3.5107E-11 2.4804E-11 - 5.0119E+03 7.7597E-10 4.3842E-10 2.3215E-11 1.6267E-11 - 5.6234E+03 5.1200E-10 2.8848E-10 1.5355E-11 1.0874E-11 - 6.3096E+03 3.3953E-10 1.9126E-10 1.0022E-11 7.1382E-12 - 7.0795E+03 2.2400E-10 1.2579E-10 6.4083E-12 4.6322E-12 - 7.9433E+03 1.4761E-10 8.2121E-11 4.1666E-12 2.9299E-12 - 8.9125E+03 9.7142E-11 5.3867E-11 2.8023E-12 1.9009E-12 - 1.0000E+04 6.4053E-11 3.5335E-11 1.8575E-12 1.2794E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1587E+03 3.1682E+03 1.5018E+03 1.5796E+03 - 1.1220E-01 2.8732E+03 2.8739E+03 1.3670E+03 1.4239E+03 - 1.2589E-01 2.5971E+03 2.5962E+03 1.2330E+03 1.2718E+03 - 1.4125E-01 2.3304E+03 2.3259E+03 1.0999E+03 1.1302E+03 - 1.5849E-01 2.0754E+03 2.0628E+03 9.7217E+02 9.9199E+02 - 1.7783E-01 1.8318E+03 1.8143E+03 8.5311E+02 8.6467E+02 - 1.9953E-01 1.5983E+03 1.5789E+03 7.4332E+02 7.4990E+02 - 2.2387E-01 1.3826E+03 1.3624E+03 6.4441E+02 6.4193E+02 - 2.5119E-01 1.1825E+03 1.1650E+03 5.5364E+02 5.4446E+02 - 2.8184E-01 1.0030E+03 9.8626E+02 4.6940E+02 4.5953E+02 - 3.1623E-01 8.4526E+02 8.3073E+02 3.9493E+02 3.8396E+02 - 3.5481E-01 7.0764E+02 6.9352E+02 3.3022E+02 3.1760E+02 - 3.9811E-01 5.8768E+02 5.7322E+02 2.7445E+02 2.6166E+02 - 4.4668E-01 4.8505E+02 4.7247E+02 2.2569E+02 2.1350E+02 - 5.0119E-01 3.9689E+02 3.8721E+02 1.8380E+02 1.7214E+02 - 5.6234E-01 3.2298E+02 3.1365E+02 1.4884E+02 1.3823E+02 - 6.3096E-01 2.6180E+02 2.5191E+02 1.1951E+02 1.1036E+02 - 7.0795E-01 2.1028E+02 2.0179E+02 9.5590E+01 8.7037E+01 - 7.9433E-01 1.6782E+02 1.6079E+02 7.5551E+01 6.8057E+01 - 8.9125E-01 1.3340E+02 1.2681E+02 5.9224E+01 5.2894E+01 - 1.0000E+00 1.0523E+02 9.9482E+01 4.6178E+01 4.0820E+01 - 1.1220E+00 8.2475E+01 7.7441E+01 3.5641E+01 3.1281E+01 - 1.2589E+00 6.4247E+01 6.0008E+01 2.7416E+01 2.3632E+01 - 1.4125E+00 4.9863E+01 4.6116E+01 2.0847E+01 1.7734E+01 - 1.5849E+00 3.8338E+01 3.5065E+01 1.5683E+01 1.3240E+01 - 1.7783E+00 2.9312E+01 2.6543E+01 1.1728E+01 9.7704E+00 - 1.9953E+00 2.2235E+01 1.9950E+01 8.7051E+00 7.1460E+00 - 2.2387E+00 1.6745E+01 1.4851E+01 6.4057E+00 5.2152E+00 - 2.5119E+00 1.2521E+01 1.0983E+01 4.6607E+00 3.7578E+00 - 2.8184E+00 9.3177E+00 8.1103E+00 3.3484E+00 2.6790E+00 - 3.1623E+00 6.9048E+00 5.9348E+00 2.3959E+00 1.8964E+00 - 3.5481E+00 5.0859E+00 4.3233E+00 1.6996E+00 1.3333E+00 - 3.9811E+00 3.7259E+00 3.1295E+00 1.1983E+00 9.3017E-01 - 4.4668E+00 2.7163E+00 2.2576E+00 8.3800E-01 6.4496E-01 - 5.0119E+00 1.9748E+00 1.6236E+00 5.7929E-01 4.4428E-01 - 5.6234E+00 1.4300E+00 1.1617E+00 3.9831E-01 3.0463E-01 - 6.3096E+00 1.0302E+00 8.2894E-01 2.7192E-01 2.0768E-01 - 7.0795E+00 7.3998E-01 5.8968E-01 1.8514E-01 1.4130E-01 - 7.9433E+00 5.3154E-01 4.2041E-01 1.2559E-01 9.5802E-02 - 8.9125E+00 3.8081E-01 2.9915E-01 8.4459E-02 6.4394E-02 - 1.0000E+01 2.7071E-01 2.1093E-01 5.6679E-02 4.2999E-02 - 1.1220E+01 1.9268E-01 1.4940E-01 3.7952E-02 2.8808E-02 - 1.2589E+01 1.3766E-01 1.0566E-01 2.5450E-02 1.9354E-02 - 1.4125E+01 9.8145E-02 7.4598E-02 1.6963E-02 1.2972E-02 - 1.5849E+01 6.9674E-02 5.2843E-02 1.1254E-02 8.5845E-03 - 1.7783E+01 4.9457E-02 3.7513E-02 7.5202E-03 5.7187E-03 - 1.9953E+01 3.5233E-02 2.6577E-02 4.9810E-03 3.8428E-03 - 2.2387E+01 2.5101E-02 1.8757E-02 3.2771E-03 2.5677E-03 - 2.5119E+01 1.7745E-02 1.3176E-02 2.1678E-03 1.7006E-03 - 2.8184E+01 1.2624E-02 9.2772E-03 1.4519E-03 1.1368E-03 - 3.1623E+01 8.9688E-03 6.5728E-03 9.7185E-04 7.6483E-04 - 3.5481E+01 6.3526E-03 4.6296E-03 6.4694E-04 5.1011E-04 - 3.9811E+01 4.4920E-03 3.2571E-03 4.3037E-04 3.4086E-04 - 4.4668E+01 3.1728E-03 2.2898E-03 2.8685E-04 2.2850E-04 - 5.0119E+01 2.2397E-03 1.6061E-03 1.9115E-04 1.5270E-04 - 5.6234E+01 1.5789E-03 1.1271E-03 1.2735E-04 1.0201E-04 - 6.3096E+01 1.1119E-03 7.9005E-04 8.5419E-05 6.8662E-05 - 7.0795E+01 7.8128E-04 5.5122E-04 5.7336E-05 4.5979E-05 - 7.9433E+01 5.4931E-04 3.8494E-04 3.8641E-05 3.1010E-05 - 8.9125E+01 3.8564E-04 2.6832E-04 2.5853E-05 2.1000E-05 - 1.0000E+02 2.7018E-04 1.8737E-04 1.7298E-05 1.4066E-05 - 1.1220E+02 1.8931E-04 1.3027E-04 1.1638E-05 9.4876E-06 - 1.2589E+02 1.3268E-04 9.0625E-05 7.8489E-06 6.4064E-06 - 1.4125E+02 9.2859E-05 6.3064E-05 5.3006E-06 4.3112E-06 - 1.5849E+02 6.4877E-05 4.3769E-05 3.5752E-06 2.9050E-06 - 1.7783E+02 4.5339E-05 3.0326E-05 2.4102E-06 1.9561E-06 - 1.9953E+02 3.1597E-05 2.1024E-05 1.6455E-06 1.3168E-06 - 2.2387E+02 2.2013E-05 1.4520E-05 1.1081E-06 8.8944E-07 - 2.5119E+02 1.5323E-05 1.0043E-05 7.4021E-07 6.0391E-07 - 2.8184E+02 1.0670E-05 6.9623E-06 5.0334E-07 4.1311E-07 - 3.1623E+02 7.4520E-06 4.8258E-06 3.4221E-07 2.7376E-07 - 3.5481E+02 5.1559E-06 3.3200E-06 2.3065E-07 1.8422E-07 - 3.9811E+02 3.5793E-06 2.2865E-06 1.5512E-07 1.2295E-07 - 4.4668E+02 2.4815E-06 1.5733E-06 1.0428E-07 8.3288E-08 - 5.0119E+02 1.7170E-06 1.0852E-06 7.0493E-08 5.6842E-08 - 5.6234E+02 1.1941E-06 7.4738E-07 4.7844E-08 3.7440E-08 - 6.3096E+02 8.1675E-07 5.0869E-07 3.2105E-08 2.5154E-08 - 7.0795E+02 5.6055E-07 3.4799E-07 2.1604E-08 1.6715E-08 - 7.9433E+02 3.8526E-07 2.3731E-07 1.4449E-08 1.1100E-08 - 8.9125E+02 2.6420E-07 1.6124E-07 9.6251E-09 7.4667E-09 - 1.0000E+03 1.8200E-07 1.1055E-07 6.4297E-09 4.9640E-09 - 1.1220E+03 1.2295E-07 7.4231E-08 4.2824E-09 3.3243E-09 - 1.2589E+03 8.3521E-08 5.0150E-08 2.9022E-09 2.2041E-09 - 1.4125E+03 5.6615E-08 3.3858E-08 1.9436E-09 1.4579E-09 - 1.5849E+03 3.8293E-08 2.2790E-08 1.2810E-09 9.6537E-10 - 1.7783E+03 2.5914E-08 1.5300E-08 8.4295E-10 6.3246E-10 - 1.9953E+03 1.7468E-08 1.0242E-08 5.6977E-10 4.1254E-10 - 2.2387E+03 1.1737E-08 6.8673E-09 3.7335E-10 2.7378E-10 - 2.5119E+03 7.8749E-09 4.5849E-09 2.4553E-10 1.8333E-10 - 2.8184E+03 5.2550E-09 3.0623E-09 1.6507E-10 1.2043E-10 - 3.1623E+03 3.6127E-09 2.0899E-09 1.0784E-10 7.9156E-11 - 3.5481E+03 2.3413E-09 1.3458E-09 7.0709E-11 5.1226E-11 - 3.9811E+03 1.5547E-09 8.8828E-10 4.6418E-11 3.3836E-11 - 4.4668E+03 1.0307E-09 5.8778E-10 3.0479E-11 2.2070E-11 - 5.0119E+03 6.8456E-10 3.8795E-10 1.9997E-11 1.3966E-11 - 5.6234E+03 4.5191E-10 2.5660E-10 1.3221E-11 9.2787E-12 - 6.3096E+03 2.9846E-10 1.6827E-10 8.6375E-12 6.1660E-12 - 7.0795E+03 1.9701E-10 1.1041E-10 5.6793E-12 3.9449E-12 - 7.9433E+03 1.3033E-10 7.2124E-11 3.7233E-12 2.5879E-12 - 8.9125E+03 8.5716E-11 4.6957E-11 2.3879E-12 1.6932E-12 - 1.0000E+04 5.6645E-11 3.0711E-11 1.5033E-12 1.0950E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.5425E+03 4.5467E+03 2.1647E+03 2.2303E+03 - 1.1220E-01 4.1313E+03 4.1318E+03 1.9619E+03 2.0134E+03 - 1.2589E-01 3.7344E+03 3.7233E+03 1.7632E+03 1.7983E+03 - 1.4125E-01 3.3479E+03 3.3284E+03 1.5718E+03 1.5857E+03 - 1.5849E-01 2.9707E+03 2.9488E+03 1.3893E+03 1.3849E+03 - 1.7783E-01 2.6071E+03 2.5832E+03 1.2158E+03 1.2004E+03 - 1.9953E-01 2.2645E+03 2.2392E+03 1.0524E+03 1.0317E+03 - 2.2387E-01 1.9454E+03 1.9167E+03 9.0473E+02 8.8004E+02 - 2.5119E-01 1.6498E+03 1.6214E+03 7.6741E+02 7.4036E+02 - 2.8184E-01 1.3852E+03 1.3596E+03 6.4517E+02 6.1477E+02 - 3.1623E-01 1.1546E+03 1.1302E+03 5.3899E+02 5.0760E+02 - 3.5481E-01 9.5343E+02 9.3040E+02 4.4371E+02 4.1548E+02 - 3.9811E-01 7.8060E+02 7.5975E+02 3.6222E+02 3.3582E+02 - 4.4668E-01 6.3438E+02 6.1515E+02 2.9388E+02 2.6892E+02 - 5.0119E-01 5.1090E+02 4.9419E+02 2.3559E+02 2.1353E+02 - 5.6234E-01 4.0834E+02 3.9395E+02 1.8724E+02 1.6829E+02 - 6.3096E-01 3.2419E+02 3.1087E+02 1.4761E+02 1.3167E+02 - 7.0795E-01 2.5535E+02 2.4381E+02 1.1564E+02 1.0190E+02 - 7.9433E-01 2.0023E+02 1.9015E+02 8.9876E+01 7.8194E+01 - 8.9125E-01 1.5605E+02 1.4723E+02 6.9098E+01 5.9499E+01 - 1.0000E+00 1.2061E+02 1.1319E+02 5.2581E+01 4.4831E+01 - 1.1220E+00 9.2936E+01 8.6494E+01 3.9843E+01 3.3607E+01 - 1.2589E+00 7.1431E+01 6.5656E+01 2.9966E+01 2.5055E+01 - 1.4125E+00 5.4427E+01 4.9569E+01 2.2319E+01 1.8487E+01 - 1.5849E+00 4.1217E+01 3.7164E+01 1.6508E+01 1.3505E+01 - 1.7783E+00 3.1086E+01 2.7710E+01 1.2118E+01 9.8275E+00 - 1.9953E+00 2.3266E+01 2.0558E+01 8.8280E+00 7.0885E+00 - 2.2387E+00 1.7303E+01 1.5141E+01 6.3695E+00 5.0688E+00 - 2.5119E+00 1.2832E+01 1.1067E+01 4.5578E+00 3.6168E+00 - 2.8184E+00 9.4450E+00 8.0566E+00 3.2370E+00 2.5593E+00 - 3.1623E+00 6.9383E+00 5.8477E+00 2.2894E+00 1.7789E+00 - 3.5481E+00 5.0739E+00 4.2225E+00 1.6059E+00 1.2361E+00 - 3.9811E+00 3.6940E+00 3.0420E+00 1.1163E+00 8.5562E-01 - 4.4668E+00 2.6791E+00 2.1838E+00 7.6850E-01 5.9055E-01 - 5.0119E+00 1.9355E+00 1.5616E+00 5.2637E-01 4.0284E-01 - 5.6234E+00 1.3942E+00 1.1129E+00 3.5936E-01 2.7348E-01 - 6.3096E+00 1.0020E+00 7.9370E-01 2.4594E-01 1.8697E-01 - 7.0795E+00 7.2020E-01 5.6639E-01 1.6745E-01 1.2593E-01 - 7.9433E+00 5.1585E-01 4.0231E-01 1.1264E-01 8.3678E-02 - 8.9125E+00 3.6786E-01 2.8513E-01 7.5193E-02 5.6610E-02 - 1.0000E+01 2.6365E-01 2.0209E-01 5.0250E-02 3.8040E-02 - 1.1220E+01 1.8765E-01 1.4298E-01 3.3616E-02 2.5420E-02 - 1.2589E+01 1.3358E-01 1.0117E-01 2.2419E-02 1.6964E-02 - 1.4125E+01 9.5151E-02 7.1575E-02 1.4942E-02 1.1327E-02 - 1.5849E+01 6.7597E-02 5.0728E-02 9.8690E-03 7.6038E-03 - 1.7783E+01 4.7953E-02 3.5914E-02 6.5380E-03 5.0629E-03 - 1.9953E+01 3.4147E-02 2.5404E-02 4.3708E-03 3.3605E-03 - 2.2387E+01 2.4322E-02 1.7925E-02 2.8997E-03 2.2536E-03 - 2.5119E+01 1.7229E-02 1.2637E-02 1.9304E-03 1.5067E-03 - 2.8184E+01 1.2236E-02 8.8767E-03 1.2673E-03 1.0121E-03 - 3.1623E+01 8.6594E-03 6.2903E-03 8.5500E-04 6.7228E-04 - 3.5481E+01 6.1175E-03 4.4217E-03 5.6935E-04 4.5053E-04 - 3.9811E+01 4.3165E-03 3.1045E-03 3.8045E-04 3.0287E-04 - 4.4668E+01 3.0484E-03 2.1812E-03 2.5426E-04 2.0376E-04 - 5.0119E+01 2.1491E-03 1.5293E-03 1.6992E-04 1.3675E-04 - 5.6234E+01 1.5134E-03 1.0724E-03 1.1416E-04 9.1707E-05 - 6.3096E+01 1.0647E-03 7.5097E-04 7.6526E-05 6.1603E-05 - 7.0795E+01 7.4938E-04 5.2366E-04 5.1157E-05 4.1583E-05 - 7.9433E+01 5.2673E-04 3.6594E-04 3.4465E-05 2.8171E-05 - 8.9125E+01 3.6876E-04 2.5476E-04 2.3155E-05 1.8835E-05 - 1.0000E+02 2.5835E-04 1.7798E-04 1.5674E-05 1.2693E-05 - 1.1220E+02 1.8085E-04 1.2365E-04 1.0544E-05 8.5911E-06 - 1.2589E+02 1.2650E-04 8.5834E-05 7.0874E-06 5.8175E-06 - 1.4125E+02 8.8459E-05 5.9545E-05 4.7770E-06 3.9113E-06 - 1.5849E+02 6.1848E-05 4.1346E-05 3.2316E-06 2.6300E-06 - 1.7783E+02 4.3189E-05 2.8743E-05 2.2048E-06 1.7659E-06 - 1.9953E+02 3.0117E-05 1.9916E-05 1.4885E-06 1.1932E-06 - 2.2387E+02 2.0954E-05 1.3744E-05 1.0003E-06 8.0604E-07 - 2.5119E+02 1.4549E-05 9.5001E-06 6.8309E-07 5.4403E-07 - 2.8184E+02 1.0133E-05 6.5399E-06 4.6503E-07 3.6723E-07 - 3.1623E+02 7.0666E-06 4.5466E-06 3.1247E-07 2.4992E-07 - 3.5481E+02 4.8840E-06 3.1235E-06 2.1161E-07 1.6809E-07 - 3.9811E+02 3.3863E-06 2.1481E-06 1.4325E-07 1.1253E-07 - 4.4668E+02 2.3418E-06 1.4758E-06 9.6912E-08 7.5627E-08 - 5.0119E+02 1.6161E-06 1.0136E-06 6.5295E-08 5.1384E-08 - 5.6234E+02 1.1224E-06 6.9789E-07 4.4092E-08 3.4196E-08 - 6.3096E+02 7.6722E-07 4.7410E-07 2.9635E-08 2.2817E-08 - 7.0795E+02 5.2589E-07 3.2368E-07 1.9747E-08 1.5219E-08 - 7.9433E+02 3.6049E-07 2.2070E-07 1.3208E-08 1.0151E-08 - 8.9125E+02 2.4703E-07 1.5027E-07 8.8199E-09 6.8231E-09 - 1.0000E+03 1.6987E-07 1.0247E-07 5.9670E-09 4.5230E-09 - 1.1220E+03 1.1443E-07 6.8693E-08 3.9901E-09 2.9965E-09 - 1.2589E+03 7.7597E-08 4.6513E-08 2.6448E-09 1.9923E-09 - 1.4125E+03 5.2518E-08 3.1280E-08 1.7696E-09 1.2999E-09 - 1.5849E+03 3.5571E-08 2.0927E-08 1.1671E-09 8.5192E-10 - 1.7783E+03 2.3871E-08 1.3987E-08 7.5372E-10 5.6493E-10 - 1.9953E+03 1.6058E-08 9.4289E-09 5.0470E-10 3.8017E-10 - 2.2387E+03 1.0756E-08 6.2769E-09 3.3764E-10 2.4925E-10 - 2.5119E+03 7.1892E-09 4.1725E-09 2.2431E-10 1.6428E-10 - 2.8184E+03 4.7886E-09 2.7942E-09 1.4688E-10 1.0958E-10 - 3.1623E+03 3.3002E-09 1.9029E-09 9.8272E-11 7.1695E-11 - 3.5481E+03 2.1286E-09 1.2199E-09 6.4936E-11 4.7121E-11 - 3.9811E+03 1.4124E-09 8.0721E-10 4.1952E-11 3.1072E-11 - 4.4668E+03 9.3567E-10 5.3437E-10 2.7469E-11 2.0066E-11 - 5.0119E+03 6.2180E-10 3.5042E-10 1.8047E-11 1.2692E-11 - 5.6234E+03 4.1051E-10 2.3049E-10 1.1837E-11 8.1550E-12 - 6.3096E+03 2.7055E-10 1.5192E-10 7.7535E-12 5.6257E-12 - 7.0795E+03 1.7848E-10 9.9660E-11 5.1453E-12 3.6945E-12 - 7.9433E+03 1.1718E-10 6.5694E-11 3.4221E-12 2.3639E-12 - 8.9125E+03 7.7170E-11 4.2665E-11 2.1355E-12 1.5470E-12 - 1.0000E+04 5.0929E-11 2.7605E-11 1.3740E-12 1.0271E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 0 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0523E+04 1.0625E+04 5.2714E+03 4.7924E+03 - 1.1220E-01 9.4548E+03 9.5420E+03 4.7299E+03 4.2649E+03 - 1.2589E-01 8.4348E+03 8.4958E+03 4.1941E+03 3.7503E+03 - 1.4125E-01 7.4495E+03 7.4835E+03 3.6774E+03 3.2639E+03 - 1.5849E-01 6.4959E+03 6.5012E+03 3.1889E+03 2.8059E+03 - 1.7783E-01 5.5763E+03 5.5697E+03 2.7398E+03 2.3802E+03 - 1.9953E-01 4.7121E+03 4.7045E+03 2.3246E+03 1.9954E+03 - 2.2387E-01 3.9321E+03 3.9163E+03 1.9435E+03 1.6547E+03 - 2.5119E-01 3.2335E+03 3.2151E+03 1.6052E+03 1.3553E+03 - 2.8184E-01 2.6252E+03 2.6079E+03 1.3102E+03 1.0946E+03 - 3.1623E-01 2.1103E+03 2.0897E+03 1.0552E+03 8.7436E+02 - 3.5481E-01 1.6759E+03 1.6549E+03 8.3876E+02 6.9039E+02 - 3.9811E-01 1.3189E+03 1.2974E+03 6.5922E+02 5.3793E+02 - 4.4668E-01 1.0281E+03 1.0076E+03 5.1202E+02 4.1492E+02 - 5.0119E-01 7.9341E+02 7.7403E+02 3.9401E+02 3.1701E+02 - 5.6234E-01 6.0871E+02 5.8923E+02 2.9980E+02 2.3997E+02 - 6.3096E-01 4.6383E+02 4.4653E+02 2.2634E+02 1.8030E+02 - 7.0795E-01 3.5126E+02 3.3651E+02 1.6924E+02 1.3426E+02 - 7.9433E-01 2.6484E+02 2.5150E+02 1.2522E+02 9.8930E+01 - 8.9125E-01 1.9901E+02 1.8708E+02 9.2062E+01 7.2392E+01 - 1.0000E+00 1.4878E+02 1.3855E+02 6.7477E+01 5.2770E+01 - 1.1220E+00 1.1107E+02 1.0247E+02 4.9058E+01 3.8398E+01 - 1.2589E+00 8.2768E+01 7.5479E+01 3.5568E+01 2.7711E+01 - 1.4125E+00 6.1610E+01 5.5337E+01 2.5585E+01 1.9843E+01 - 1.5849E+00 4.5641E+01 4.0440E+01 1.8263E+01 1.4188E+01 - 1.7783E+00 3.3598E+01 2.9527E+01 1.2974E+01 1.0067E+01 - 1.9953E+00 2.4695E+01 2.1462E+01 9.1753E+00 7.0874E+00 - 2.2387E+00 1.8071E+01 1.5511E+01 6.4761E+00 4.9621E+00 - 2.5119E+00 1.3197E+01 1.1174E+01 4.5320E+00 3.4699E+00 - 2.8184E+00 9.6210E+00 8.0386E+00 3.1475E+00 2.4155E+00 - 3.1623E+00 6.9810E+00 5.7637E+00 2.1872E+00 1.6647E+00 - 3.5481E+00 5.0516E+00 4.1297E+00 1.5052E+00 1.1459E+00 - 3.9811E+00 3.6503E+00 2.9580E+00 1.0284E+00 7.8355E-01 - 4.4668E+00 2.6343E+00 2.1155E+00 7.0290E-01 5.3187E-01 - 5.0119E+00 1.8959E+00 1.5076E+00 4.7775E-01 3.6223E-01 - 5.6234E+00 1.3647E+00 1.0705E+00 3.2275E-01 2.4650E-01 - 6.3096E+00 9.8025E-01 7.6503E-01 2.1836E-01 1.6562E-01 - 7.0795E+00 7.0020E-01 5.4513E-01 1.4719E-01 1.1185E-01 - 7.9433E+00 5.0073E-01 3.8605E-01 9.9109E-02 7.5415E-02 - 8.9125E+00 3.5971E-01 2.7416E-01 6.6215E-02 5.0170E-02 - 1.0000E+01 2.5691E-01 1.9424E-01 4.4368E-02 3.3583E-02 - 1.1220E+01 1.8291E-01 1.3739E-01 2.9547E-02 2.2486E-02 - 1.2589E+01 1.3021E-01 9.7351E-02 1.9664E-02 1.4951E-02 - 1.4125E+01 9.2650E-02 6.9059E-02 1.3121E-02 1.0022E-02 - 1.5849E+01 6.5840E-02 4.8911E-02 8.7572E-03 6.7156E-03 - 1.7783E+01 4.6858E-02 3.4608E-02 5.8000E-03 4.4670E-03 - 1.9953E+01 3.3328E-02 2.4396E-02 3.8664E-03 2.9995E-03 - 2.2387E+01 2.3675E-02 1.7222E-02 2.5916E-03 1.9979E-03 - 2.5119E+01 1.6735E-02 1.2177E-02 1.7159E-03 1.3425E-03 - 2.8184E+01 1.1814E-02 8.5549E-03 1.1436E-03 8.9651E-04 - 3.1623E+01 8.3862E-03 6.0379E-03 7.6013E-04 5.9970E-04 - 3.5481E+01 5.9219E-03 4.2415E-03 5.0907E-04 4.0084E-04 - 3.9811E+01 4.1842E-03 2.9821E-03 3.4002E-04 2.6986E-04 - 4.4668E+01 2.9535E-03 2.0944E-03 2.2677E-04 1.8230E-04 - 5.0119E+01 2.0764E-03 1.4695E-03 1.5099E-04 1.2269E-04 - 5.6234E+01 1.4582E-03 1.0283E-03 1.0191E-04 8.2828E-05 - 6.3096E+01 1.0263E-03 7.1774E-04 6.9015E-05 5.6021E-05 - 7.0795E+01 7.2156E-04 5.0165E-04 4.6373E-05 3.7550E-05 - 7.9433E+01 5.0604E-04 3.5027E-04 3.1015E-05 2.5441E-05 - 8.9125E+01 3.5516E-04 2.4434E-04 2.0899E-05 1.7378E-05 - 1.0000E+02 2.4889E-04 1.7009E-04 1.4267E-05 1.1628E-05 - 1.1220E+02 1.7385E-04 1.1813E-04 9.6344E-06 7.8578E-06 - 1.2589E+02 1.2161E-04 8.2253E-05 6.5132E-06 5.3462E-06 - 1.4125E+02 8.4976E-05 5.7071E-05 4.4246E-06 3.6108E-06 - 1.5849E+02 5.9280E-05 3.9518E-05 2.9982E-06 2.4432E-06 - 1.7783E+02 4.1373E-05 2.7426E-05 2.0248E-06 1.6448E-06 - 1.9953E+02 2.8826E-05 1.8983E-05 1.3756E-06 1.0971E-06 - 2.2387E+02 2.0073E-05 1.3090E-05 9.2708E-07 7.4235E-07 - 2.5119E+02 1.3974E-05 9.0409E-06 6.2088E-07 5.0176E-07 - 2.8184E+02 9.6871E-06 6.2403E-06 4.2334E-07 3.3893E-07 - 3.1623E+02 6.7534E-06 4.3222E-06 2.8960E-07 2.3251E-07 - 3.5481E+02 4.6641E-06 2.9657E-06 1.9642E-07 1.5636E-07 - 3.9811E+02 3.2258E-06 2.0390E-06 1.3161E-07 1.0463E-07 - 4.4668E+02 2.2287E-06 1.3986E-06 8.9272E-08 6.9740E-08 - 5.0119E+02 1.5366E-06 9.5995E-07 6.1165E-08 4.6504E-08 - 5.6234E+02 1.0660E-06 6.6151E-07 4.0854E-08 3.1390E-08 - 6.3096E+02 7.2742E-07 4.4881E-07 2.7360E-08 2.1300E-08 - 7.0795E+02 4.9828E-07 3.0575E-07 1.8481E-08 1.4153E-08 - 7.9433E+02 3.4111E-07 2.0793E-07 1.2339E-08 9.2720E-09 - 8.9125E+02 2.3298E-07 1.4094E-07 8.2513E-09 6.1312E-09 - 1.0000E+03 1.6010E-07 9.6047E-08 5.4427E-09 4.1546E-09 - 1.1220E+03 1.0708E-07 6.4406E-08 3.6458E-09 2.7660E-09 - 1.2589E+03 7.2539E-08 4.3483E-08 2.4135E-09 1.8254E-09 - 1.4125E+03 4.8944E-08 2.9164E-08 1.5814E-09 1.2061E-09 - 1.5849E+03 3.2913E-08 1.9546E-08 1.0621E-09 7.8446E-10 - 1.7783E+03 2.2198E-08 1.3092E-08 6.9977E-10 5.2109E-10 - 1.9953E+03 1.4977E-08 8.7396E-09 4.6913E-10 3.4627E-10 - 2.2387E+03 1.0035E-08 5.8349E-09 3.1154E-10 2.3053E-10 - 2.5119E+03 6.6649E-09 3.8787E-09 2.0630E-10 1.5317E-10 - 2.8184E+03 4.4379E-09 2.5803E-09 1.3703E-10 9.7507E-11 - 3.1623E+03 3.0471E-09 1.7630E-09 8.9538E-11 6.6347E-11 - 3.5481E+03 1.9699E-09 1.1309E-09 5.9037E-11 4.4412E-11 - 3.9811E+03 1.3058E-09 7.4541E-10 3.8173E-11 2.8416E-11 - 4.4668E+03 8.6299E-10 4.9252E-10 2.5550E-11 1.8313E-11 - 5.0119E+03 5.7152E-10 3.2411E-10 1.6447E-11 1.2003E-11 - 5.6234E+03 3.7823E-10 2.1293E-10 1.0627E-11 7.9904E-12 - 6.3096E+03 2.4874E-10 1.4007E-10 7.0519E-12 5.0945E-12 - 7.0795E+03 1.6386E-10 9.1721E-11 4.7331E-12 3.3295E-12 - 7.9433E+03 1.0802E-10 5.9798E-11 3.1108E-12 2.1488E-12 - 8.9125E+03 7.0567E-11 3.9005E-11 2.0177E-12 1.4612E-12 - 1.0000E+04 4.6369E-11 2.5275E-11 1.3068E-12 9.7455E-13 diff --git a/pisa_examples/resources/flux/honda-2015-spl-solmin.d b/pisa_examples/resources/flux/honda-2015-spl-solmin.d deleted file mode 100644 index 466e2f177..000000000 --- a/pisa_examples/resources/flux/honda-2015-spl-solmin.d +++ /dev/null @@ -1,24720 +0,0 @@ -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1982E+04 1.2139E+04 6.0763E+03 5.2496E+03 - 1.1220E-01 1.0713E+04 1.0804E+04 5.4203E+03 4.6507E+03 - 1.2589E-01 9.5255E+03 9.5785E+03 4.7897E+03 4.0854E+03 - 1.4125E-01 8.3489E+03 8.4113E+03 4.1672E+03 3.5276E+03 - 1.5849E-01 7.2239E+03 7.2673E+03 3.5749E+03 3.0141E+03 - 1.7783E-01 6.1582E+03 6.1707E+03 3.0412E+03 2.5457E+03 - 1.9953E-01 5.1663E+03 5.1665E+03 2.5708E+03 2.1098E+03 - 2.2387E-01 4.2793E+03 4.2732E+03 2.1368E+03 1.7367E+03 - 2.5119E-01 3.4927E+03 3.4761E+03 1.7454E+03 1.4175E+03 - 2.8184E-01 2.8084E+03 2.7862E+03 1.4073E+03 1.1302E+03 - 3.1623E-01 2.2267E+03 2.2155E+03 1.1169E+03 8.9493E+02 - 3.5481E-01 1.7529E+03 1.7390E+03 8.8017E+02 7.0227E+02 - 3.9811E-01 1.3644E+03 1.3455E+03 6.8431E+02 5.4348E+02 - 4.4668E-01 1.0532E+03 1.0342E+03 5.2538E+02 4.1658E+02 - 5.0119E-01 8.0900E+02 7.9060E+02 3.9906E+02 3.1562E+02 - 5.6234E-01 6.1251E+02 5.9726E+02 2.9954E+02 2.3564E+02 - 6.3096E-01 4.6217E+02 4.4545E+02 2.2291E+02 1.7444E+02 - 7.0795E-01 3.4724E+02 3.3246E+02 1.6471E+02 1.2901E+02 - 7.9433E-01 2.6051E+02 2.4752E+02 1.2058E+02 9.4136E+01 - 8.9125E-01 1.9517E+02 1.8163E+02 8.8200E+01 6.8642E+01 - 1.0000E+00 1.4568E+02 1.3476E+02 6.3846E+01 4.9636E+01 - 1.1220E+00 1.0896E+02 9.9402E+01 4.6207E+01 3.6086E+01 - 1.2589E+00 8.0905E+01 7.3101E+01 3.3217E+01 2.5724E+01 - 1.4125E+00 5.9818E+01 5.3470E+01 2.3696E+01 1.8143E+01 - 1.5849E+00 4.4363E+01 3.9113E+01 1.6857E+01 1.2926E+01 - 1.7783E+00 3.2692E+01 2.8295E+01 1.1844E+01 9.0895E+00 - 1.9953E+00 2.3902E+01 2.0449E+01 8.3086E+00 6.2791E+00 - 2.2387E+00 1.7442E+01 1.4885E+01 5.8159E+00 4.3825E+00 - 2.5119E+00 1.2761E+01 1.0757E+01 4.0997E+00 3.0720E+00 - 2.8184E+00 9.3322E+00 7.7662E+00 2.8333E+00 2.1311E+00 - 3.1623E+00 6.7489E+00 5.5180E+00 1.9378E+00 1.4648E+00 - 3.5481E+00 4.8948E+00 3.9512E+00 1.3256E+00 9.9934E-01 - 3.9811E+00 3.5403E+00 2.8191E+00 8.9965E-01 6.7319E-01 - 4.4668E+00 2.5528E+00 2.0071E+00 6.1395E-01 4.5747E-01 - 5.0119E+00 1.8369E+00 1.4305E+00 4.1256E-01 3.1608E-01 - 5.6234E+00 1.3255E+00 1.0247E+00 2.8077E-01 2.1343E-01 - 6.3096E+00 9.5885E-01 7.3342E-01 1.9139E-01 1.4225E-01 - 7.0795E+00 6.8445E-01 5.2345E-01 1.2702E-01 9.5286E-02 - 7.9433E+00 4.8493E-01 3.7529E-01 8.5009E-02 6.3226E-02 - 8.9125E+00 3.5026E-01 2.6482E-01 5.6994E-02 4.3784E-02 - 1.0000E+01 2.4879E-01 1.8547E-01 3.8925E-02 2.9536E-02 - 1.1220E+01 1.7739E-01 1.3166E-01 2.5565E-02 1.9535E-02 - 1.2589E+01 1.2661E-01 9.3779E-02 1.6955E-02 1.2793E-02 - 1.4125E+01 9.0152E-02 6.6522E-02 1.1596E-02 8.4501E-03 - 1.5849E+01 6.4139E-02 4.7084E-02 7.5886E-03 5.7487E-03 - 1.7783E+01 4.5766E-02 3.3350E-02 4.8078E-03 3.8713E-03 - 1.9953E+01 3.2654E-02 2.3693E-02 3.2749E-03 2.6351E-03 - 2.2387E+01 2.3063E-02 1.6644E-02 2.2111E-03 1.7796E-03 - 2.5119E+01 1.6495E-02 1.1614E-02 1.4159E-03 1.1635E-03 - 2.8184E+01 1.1684E-02 8.2302E-03 9.5578E-04 7.4071E-04 - 3.1623E+01 8.2063E-03 5.8239E-03 6.6238E-04 5.2964E-04 - 3.5481E+01 5.7919E-03 4.1033E-03 4.4489E-04 3.5641E-04 - 3.9811E+01 4.0870E-03 2.8838E-03 3.0199E-04 2.3880E-04 - 4.4668E+01 2.8825E-03 2.0308E-03 2.0002E-04 1.6159E-04 - 5.0119E+01 2.0303E-03 1.4311E-03 1.3398E-04 1.1108E-04 - 5.6234E+01 1.4284E-03 9.9987E-04 8.9808E-05 7.4729E-05 - 6.3096E+01 9.9888E-04 6.9558E-04 6.0488E-05 5.0566E-05 - 7.0795E+01 7.0251E-04 4.8505E-04 4.1769E-05 3.4773E-05 - 7.9433E+01 4.9793E-04 3.3939E-04 2.8623E-05 2.3352E-05 - 8.9125E+01 3.4919E-04 2.3628E-04 1.9426E-05 1.4887E-05 - 1.0000E+02 2.4282E-04 1.6553E-04 1.3037E-05 1.0677E-05 - 1.1220E+02 1.6954E-04 1.1461E-04 8.8837E-06 7.2761E-06 - 1.2589E+02 1.1838E-04 7.9501E-05 6.0884E-06 4.9912E-06 - 1.4125E+02 8.2457E-05 5.5082E-05 4.0945E-06 3.4084E-06 - 1.5849E+02 5.7820E-05 3.8180E-05 2.8270E-06 2.3643E-06 - 1.7783E+02 4.0498E-05 2.6495E-05 1.9084E-06 1.5920E-06 - 1.9953E+02 2.8279E-05 1.8522E-05 1.2920E-06 1.0488E-06 - 2.2387E+02 1.9526E-05 1.2926E-05 8.8288E-07 7.1537E-07 - 2.5119E+02 1.3553E-05 8.8251E-06 5.9087E-07 4.7324E-07 - 2.8184E+02 9.4726E-06 6.0055E-06 3.9479E-07 3.1288E-07 - 3.1623E+02 6.6045E-06 4.2046E-06 2.7281E-07 2.2220E-07 - 3.5481E+02 4.5503E-06 2.8738E-06 1.8622E-07 1.5043E-07 - 3.9811E+02 3.1498E-06 1.9742E-06 1.2487E-07 1.0288E-07 - 4.4668E+02 2.1752E-06 1.3603E-06 8.5765E-08 6.7648E-08 - 5.0119E+02 1.4979E-06 9.3357E-07 5.8414E-08 4.3987E-08 - 5.6234E+02 1.0386E-06 6.4529E-07 3.9186E-08 3.1006E-08 - 6.3096E+02 7.0807E-07 4.3701E-07 2.6825E-08 2.0398E-08 - 7.0795E+02 4.8667E-07 2.9826E-07 1.7613E-08 1.3140E-08 - 7.9433E+02 3.3010E-07 2.0217E-07 1.1703E-08 9.0273E-09 - 8.9125E+02 2.2368E-07 1.3553E-07 7.9212E-09 6.0485E-09 - 1.0000E+03 1.5547E-07 9.2260E-08 5.2462E-09 3.9322E-09 - 1.1220E+03 1.0393E-07 6.1673E-08 3.5382E-09 2.7380E-09 - 1.2589E+03 7.0687E-08 4.1884E-08 2.3808E-09 1.9160E-09 - 1.4125E+03 4.7949E-08 2.8318E-08 1.6220E-09 1.1176E-09 - 1.5849E+03 3.1983E-08 1.8915E-08 1.0338E-09 7.3376E-10 - 1.7783E+03 2.1402E-08 1.2766E-08 6.5543E-10 5.1570E-10 - 1.9953E+03 1.4461E-08 8.4148E-09 4.4185E-10 3.6165E-10 - 2.2387E+03 9.6352E-09 5.6597E-09 3.0205E-10 2.3538E-10 - 2.5119E+03 6.5259E-09 3.7167E-09 1.9442E-10 1.4203E-10 - 2.8184E+03 4.2879E-09 2.4937E-09 1.2485E-10 8.3033E-11 - 3.1623E+03 2.9274E-09 1.7056E-09 8.3664E-11 5.7652E-11 - 3.5481E+03 1.8962E-09 1.1049E-09 5.4599E-11 3.8127E-11 - 3.9811E+03 1.2642E-09 7.2161E-10 3.7670E-11 2.5393E-11 - 4.4668E+03 8.3094E-10 4.7583E-10 2.6697E-11 1.6256E-11 - 5.0119E+03 5.4607E-10 3.1222E-10 1.7816E-11 1.0583E-11 - 5.6234E+03 3.6525E-10 2.0388E-10 1.0782E-11 7.1339E-12 - 6.3096E+03 2.3938E-10 1.3434E-10 6.6903E-12 4.8784E-12 - 7.0795E+03 1.5770E-10 8.9930E-11 4.4610E-12 3.1750E-12 - 7.9433E+03 1.0176E-10 5.9084E-11 2.8924E-12 2.1565E-12 - 8.9125E+03 6.6442E-11 3.7742E-11 2.0040E-12 1.3614E-12 - 1.0000E+04 4.4359E-11 2.4214E-11 1.3689E-12 8.7610E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2019E+04 1.2085E+04 6.0403E+03 5.2629E+03 - 1.1220E-01 1.0734E+04 1.0768E+04 5.3867E+03 4.6646E+03 - 1.2589E-01 9.5142E+03 9.5265E+03 4.7439E+03 4.0879E+03 - 1.4125E-01 8.3590E+03 8.3482E+03 4.1347E+03 3.5443E+03 - 1.5849E-01 7.2318E+03 7.2222E+03 3.5574E+03 3.0229E+03 - 1.7783E-01 6.1536E+03 6.1482E+03 3.0288E+03 2.5361E+03 - 1.9953E-01 5.1604E+03 5.1583E+03 2.5408E+03 2.1161E+03 - 2.2387E-01 4.2708E+03 4.2561E+03 2.1167E+03 1.7462E+03 - 2.5119E-01 3.4802E+03 3.4561E+03 1.7457E+03 1.4252E+03 - 2.8184E-01 2.8017E+03 2.7833E+03 1.4016E+03 1.1407E+03 - 3.1623E-01 2.2359E+03 2.2106E+03 1.1177E+03 8.9909E+02 - 3.5481E-01 1.7602E+03 1.7368E+03 8.8467E+02 7.0022E+02 - 3.9811E-01 1.3718E+03 1.3490E+03 6.8557E+02 5.4018E+02 - 4.4668E-01 1.0613E+03 1.0360E+03 5.2544E+02 4.1594E+02 - 5.0119E-01 8.1101E+02 7.8701E+02 3.9910E+02 3.1302E+02 - 5.6234E-01 6.1366E+02 5.9238E+02 3.0077E+02 2.3389E+02 - 6.3096E-01 4.6306E+02 4.4516E+02 2.2266E+02 1.7383E+02 - 7.0795E-01 3.4978E+02 3.3201E+02 1.6311E+02 1.2693E+02 - 7.9433E-01 2.6183E+02 2.4844E+02 1.2039E+02 9.2977E+01 - 8.9125E-01 1.9512E+02 1.8483E+02 8.7362E+01 6.7855E+01 - 1.0000E+00 1.4714E+02 1.3522E+02 6.3704E+01 4.9740E+01 - 1.1220E+00 1.0937E+02 9.9498E+01 4.6082E+01 3.6006E+01 - 1.2589E+00 8.0985E+01 7.3359E+01 3.3042E+01 2.5684E+01 - 1.4125E+00 5.9877E+01 5.3720E+01 2.3586E+01 1.8191E+01 - 1.5849E+00 4.3990E+01 3.9202E+01 1.6735E+01 1.2880E+01 - 1.7783E+00 3.2571E+01 2.8416E+01 1.1861E+01 9.0771E+00 - 1.9953E+00 2.3857E+01 2.0580E+01 8.3300E+00 6.3769E+00 - 2.2387E+00 1.7344E+01 1.4819E+01 5.8769E+00 4.5311E+00 - 2.5119E+00 1.2674E+01 1.0667E+01 4.0997E+00 3.1508E+00 - 2.8184E+00 9.3585E+00 7.6607E+00 2.8331E+00 2.1272E+00 - 3.1623E+00 6.7520E+00 5.5117E+00 1.9405E+00 1.4866E+00 - 3.5481E+00 4.9016E+00 3.9638E+00 1.3258E+00 1.0155E+00 - 3.9811E+00 3.5575E+00 2.8456E+00 9.1043E-01 6.8789E-01 - 4.4668E+00 2.5695E+00 2.0326E+00 6.1587E-01 4.6628E-01 - 5.0119E+00 1.8540E+00 1.4426E+00 4.1775E-01 3.1436E-01 - 5.6234E+00 1.3378E+00 1.0331E+00 2.8641E-01 2.1193E-01 - 6.3096E+00 9.6362E-01 7.4190E-01 1.9215E-01 1.4612E-01 - 7.0795E+00 6.9072E-01 5.2606E-01 1.2795E-01 9.9351E-02 - 7.9433E+00 4.9403E-01 3.7279E-01 8.5118E-02 6.6082E-02 - 8.9125E+00 3.5575E-01 2.6646E-01 5.7850E-02 4.3526E-02 - 1.0000E+01 2.4984E-01 1.8715E-01 3.8165E-02 2.8622E-02 - 1.1220E+01 1.7821E-01 1.3291E-01 2.5364E-02 1.9318E-02 - 1.2589E+01 1.2763E-01 9.3687E-02 1.6975E-02 1.2974E-02 - 1.4125E+01 9.1295E-02 6.5861E-02 1.1320E-02 8.6432E-03 - 1.5849E+01 6.4413E-02 4.6768E-02 7.5659E-03 5.8075E-03 - 1.7783E+01 4.5524E-02 3.3195E-02 4.8200E-03 3.9946E-03 - 1.9953E+01 3.1990E-02 2.3611E-02 3.1769E-03 2.6520E-03 - 2.2387E+01 2.2649E-02 1.6754E-02 2.2386E-03 1.7358E-03 - 2.5119E+01 1.6243E-02 1.1804E-02 1.5250E-03 1.1254E-03 - 2.8184E+01 1.1521E-02 8.2796E-03 9.9664E-04 7.6082E-04 - 3.1623E+01 8.2180E-03 5.8721E-03 6.6878E-04 5.2763E-04 - 3.5481E+01 5.8066E-03 4.1213E-03 4.4362E-04 3.5815E-04 - 3.9811E+01 4.1099E-03 2.8924E-03 2.9716E-04 2.4179E-04 - 4.4668E+01 2.8911E-03 2.0414E-03 1.9996E-04 1.6454E-04 - 5.0119E+01 2.0365E-03 1.4316E-03 1.3598E-04 1.1171E-04 - 5.6234E+01 1.4380E-03 9.9452E-04 9.1974E-05 7.4949E-05 - 6.3096E+01 1.0116E-03 6.9883E-04 6.1339E-05 5.1027E-05 - 7.0795E+01 7.0931E-04 4.9057E-04 4.1268E-05 3.4880E-05 - 7.9433E+01 4.9845E-04 3.4526E-04 2.8352E-05 2.3324E-05 - 8.9125E+01 3.5245E-04 2.4174E-04 1.9475E-05 1.5916E-05 - 1.0000E+02 2.4290E-04 1.6515E-04 1.3102E-05 1.0751E-05 - 1.1220E+02 1.6908E-04 1.1469E-04 8.7279E-06 7.2560E-06 - 1.2589E+02 1.1809E-04 7.9634E-05 5.9861E-06 4.9847E-06 - 1.4125E+02 8.2923E-05 5.4959E-05 4.1491E-06 3.4370E-06 - 1.5849E+02 5.7843E-05 3.8197E-05 2.8158E-06 2.3140E-06 - 1.7783E+02 4.0142E-05 2.6404E-05 1.9032E-06 1.5515E-06 - 1.9953E+02 2.8038E-05 1.8199E-05 1.3048E-06 1.0818E-06 - 2.2387E+02 1.9468E-05 1.2593E-05 9.0053E-07 7.0893E-07 - 2.5119E+02 1.3536E-05 8.7311E-06 6.1832E-07 4.5900E-07 - 2.8184E+02 9.5302E-06 6.0298E-06 4.0419E-07 3.2109E-07 - 3.1623E+02 6.6000E-06 4.2168E-06 2.7487E-07 2.2346E-07 - 3.5481E+02 4.5534E-06 2.8879E-06 1.8663E-07 1.4728E-07 - 3.9811E+02 3.1460E-06 1.9788E-06 1.2753E-07 9.7248E-08 - 4.4668E+02 2.1786E-06 1.3635E-06 8.6163E-08 6.5871E-08 - 5.0119E+02 1.5004E-06 9.3691E-07 5.8509E-08 4.3796E-08 - 5.6234E+02 1.0371E-06 6.4460E-07 3.8931E-08 2.9563E-08 - 6.3096E+02 7.0892E-07 4.3632E-07 2.6028E-08 1.9759E-08 - 7.0795E+02 4.8493E-07 2.9540E-07 1.7135E-08 1.3413E-08 - 7.9433E+02 3.2999E-07 2.0069E-07 1.1398E-08 9.0970E-09 - 8.9125E+02 2.2488E-07 1.3643E-07 7.7094E-09 6.2172E-09 - 1.0000E+03 1.5490E-07 9.3057E-08 5.1887E-09 4.0514E-09 - 1.1220E+03 1.0444E-07 6.2326E-08 3.6081E-09 2.6471E-09 - 1.2589E+03 7.0711E-08 4.2181E-08 2.5228E-09 1.7905E-09 - 1.4125E+03 4.7507E-08 2.8368E-08 1.6797E-09 1.1553E-09 - 1.5849E+03 3.1947E-08 1.9051E-08 1.1299E-09 7.2684E-10 - 1.7783E+03 2.1875E-08 1.2508E-08 7.0773E-10 4.8371E-10 - 1.9953E+03 1.4651E-08 8.3932E-09 4.3661E-10 3.3727E-10 - 2.2387E+03 9.7778E-09 5.7034E-09 2.9144E-10 2.3495E-10 - 2.5119E+03 6.5150E-09 3.7256E-09 2.0197E-10 1.4931E-10 - 2.8184E+03 4.3458E-09 2.4271E-09 1.3371E-10 9.3712E-11 - 3.1623E+03 2.9104E-09 1.6707E-09 8.8739E-11 6.6621E-11 - 3.5481E+03 1.9000E-09 1.0799E-09 5.3190E-11 4.1936E-11 - 3.9811E+03 1.2648E-09 7.2079E-10 3.4152E-11 2.8813E-11 - 4.4668E+03 8.3319E-10 4.7471E-10 2.5037E-11 1.8582E-11 - 5.0119E+03 5.5202E-10 3.1202E-10 1.5486E-11 1.1696E-11 - 5.6234E+03 3.6549E-10 2.0325E-10 9.9379E-12 8.0504E-12 - 6.3096E+03 2.4245E-10 1.3601E-10 6.8034E-12 5.2910E-12 - 7.0795E+03 1.5819E-10 8.8071E-11 4.4681E-12 3.5190E-12 - 7.9433E+03 1.0331E-10 5.7243E-11 2.9926E-12 2.1484E-12 - 8.9125E+03 6.7552E-11 3.7655E-11 1.9100E-12 1.2620E-12 - 1.0000E+04 4.5257E-11 2.4521E-11 1.3112E-12 9.5802E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1970E+04 1.2008E+04 5.9846E+03 5.2962E+03 - 1.1220E-01 1.0717E+04 1.0746E+04 5.3678E+03 4.6801E+03 - 1.2589E-01 9.5263E+03 9.5130E+03 4.7573E+03 4.0897E+03 - 1.4125E-01 8.3668E+03 8.3265E+03 4.1329E+03 3.5355E+03 - 1.5849E-01 7.2111E+03 7.2049E+03 3.5456E+03 3.0089E+03 - 1.7783E-01 6.1434E+03 6.1346E+03 3.0199E+03 2.5363E+03 - 1.9953E-01 5.1748E+03 5.1496E+03 2.5505E+03 2.1127E+03 - 2.2387E-01 4.2866E+03 4.2595E+03 2.1123E+03 1.7370E+03 - 2.5119E-01 3.4844E+03 3.4589E+03 1.7315E+03 1.4156E+03 - 2.8184E-01 2.7959E+03 2.7863E+03 1.3991E+03 1.1298E+03 - 3.1623E-01 2.2276E+03 2.2107E+03 1.1079E+03 8.9182E+02 - 3.5481E-01 1.7610E+03 1.7269E+03 8.7213E+02 7.0150E+02 - 3.9811E-01 1.3753E+03 1.3419E+03 6.8177E+02 5.4206E+02 - 4.4668E-01 1.0551E+03 1.0364E+03 5.2438E+02 4.1334E+02 - 5.0119E-01 8.0620E+02 7.8963E+02 3.9648E+02 3.1148E+02 - 5.6234E-01 6.1438E+02 5.9794E+02 2.9829E+02 2.3360E+02 - 6.3096E-01 4.6453E+02 4.4919E+02 2.2308E+02 1.7330E+02 - 7.0795E-01 3.4899E+02 3.3373E+02 1.6481E+02 1.2906E+02 - 7.9433E-01 2.6206E+02 2.4659E+02 1.1976E+02 9.4553E+01 - 8.9125E-01 1.9497E+02 1.8149E+02 8.7905E+01 6.8256E+01 - 1.0000E+00 1.4577E+02 1.3462E+02 6.3769E+01 4.9563E+01 - 1.1220E+00 1.0867E+02 9.9191E+01 4.5828E+01 3.5655E+01 - 1.2589E+00 8.0953E+01 7.2752E+01 3.2978E+01 2.5487E+01 - 1.4125E+00 5.9877E+01 5.3301E+01 2.3715E+01 1.8154E+01 - 1.5849E+00 4.4184E+01 3.9058E+01 1.6694E+01 1.3025E+01 - 1.7783E+00 3.2580E+01 2.8279E+01 1.1740E+01 9.0857E+00 - 1.9953E+00 2.3930E+01 2.0409E+01 8.2948E+00 6.2799E+00 - 2.2387E+00 1.7474E+01 1.4846E+01 5.8016E+00 4.4220E+00 - 2.5119E+00 1.2766E+01 1.0604E+01 4.0551E+00 3.0424E+00 - 2.8184E+00 9.4019E+00 7.5976E+00 2.8452E+00 2.1043E+00 - 3.1623E+00 6.7658E+00 5.5144E+00 1.9475E+00 1.4639E+00 - 3.5481E+00 4.8720E+00 3.9443E+00 1.3264E+00 9.9970E-01 - 3.9811E+00 3.5277E+00 2.8043E+00 9.0414E-01 6.8741E-01 - 4.4668E+00 2.5493E+00 1.9989E+00 6.1691E-01 4.7133E-01 - 5.0119E+00 1.8299E+00 1.4422E+00 4.1903E-01 3.1896E-01 - 5.6234E+00 1.3178E+00 1.0323E+00 2.8535E-01 2.1393E-01 - 6.3096E+00 9.4737E-01 7.2790E-01 1.8833E-01 1.4477E-01 - 7.0795E+00 6.8058E-01 5.1110E-01 1.2746E-01 9.5642E-02 - 7.9433E+00 4.9003E-01 3.6303E-01 8.6430E-02 6.4161E-02 - 8.9125E+00 3.5103E-01 2.5692E-01 5.6702E-02 4.4658E-02 - 1.0000E+01 2.4862E-01 1.8536E-01 3.7796E-02 2.8949E-02 - 1.1220E+01 1.7811E-01 1.3115E-01 2.5673E-02 1.9501E-02 - 1.2589E+01 1.2732E-01 9.3127E-02 1.6975E-02 1.2932E-02 - 1.4125E+01 9.0288E-02 6.6465E-02 1.1171E-02 8.7120E-03 - 1.5849E+01 6.4658E-02 4.7296E-02 7.7180E-03 5.8223E-03 - 1.7783E+01 4.6101E-02 3.3404E-02 5.0756E-03 3.8570E-03 - 1.9953E+01 3.2506E-02 2.3655E-02 3.2070E-03 2.6922E-03 - 2.2387E+01 2.2935E-02 1.6731E-02 2.1830E-03 1.7817E-03 - 2.5119E+01 1.6181E-02 1.1680E-02 1.5174E-03 1.1401E-03 - 2.8184E+01 1.1465E-02 8.2831E-03 1.0248E-03 7.4567E-04 - 3.1623E+01 8.1784E-03 5.8673E-03 6.6593E-04 5.2221E-04 - 3.5481E+01 5.7752E-03 4.1086E-03 4.4803E-04 3.5555E-04 - 3.9811E+01 4.0733E-03 2.8801E-03 3.0100E-04 2.4101E-04 - 4.4668E+01 2.8780E-03 2.0275E-03 2.0436E-04 1.6523E-04 - 5.0119E+01 2.0270E-03 1.4323E-03 1.3706E-04 1.1126E-04 - 5.6234E+01 1.4276E-03 1.0032E-03 9.2268E-05 7.4109E-05 - 6.3096E+01 1.0013E-03 6.9549E-04 6.2382E-05 4.9181E-05 - 7.0795E+01 7.0235E-04 4.8381E-04 4.2539E-05 3.4095E-05 - 7.9433E+01 4.9351E-04 3.3908E-04 2.9775E-05 2.3914E-05 - 8.9125E+01 3.4765E-04 2.3738E-04 2.0322E-05 1.6028E-05 - 1.0000E+02 2.4264E-04 1.6593E-04 1.3276E-05 1.0756E-05 - 1.1220E+02 1.6967E-04 1.1473E-04 8.9087E-06 7.2641E-06 - 1.2589E+02 1.1917E-04 8.0175E-05 5.9614E-06 4.9892E-06 - 1.4125E+02 8.3204E-05 5.6007E-05 4.1026E-06 3.4016E-06 - 1.5849E+02 5.8127E-05 3.8540E-05 2.7769E-06 2.2902E-06 - 1.7783E+02 4.0400E-05 2.6629E-05 1.8887E-06 1.5109E-06 - 1.9953E+02 2.8076E-05 1.8475E-05 1.2955E-06 1.0314E-06 - 2.2387E+02 1.9654E-05 1.2770E-05 8.6781E-07 7.0589E-07 - 2.5119E+02 1.3768E-05 8.7984E-06 6.0175E-07 4.7764E-07 - 2.8184E+02 9.5926E-06 6.1356E-06 4.3400E-07 3.1766E-07 - 3.1623E+02 6.6193E-06 4.1914E-06 2.7489E-07 2.1363E-07 - 3.5481E+02 4.5605E-06 2.8794E-06 1.8858E-07 1.4542E-07 - 3.9811E+02 3.1637E-06 1.9874E-06 1.2866E-07 9.9295E-08 - 4.4668E+02 2.1783E-06 1.3679E-06 8.5450E-08 6.5163E-08 - 5.0119E+02 1.4859E-06 9.3019E-07 5.5490E-08 4.3856E-08 - 5.6234E+02 1.0349E-06 6.3707E-07 3.7553E-08 2.9643E-08 - 6.3096E+02 7.0524E-07 4.3302E-07 2.5334E-08 1.9686E-08 - 7.0795E+02 4.7902E-07 2.9530E-07 1.7309E-08 1.3309E-08 - 7.9433E+02 3.2910E-07 2.0190E-07 1.2167E-08 8.6508E-09 - 8.9125E+02 2.2545E-07 1.3722E-07 8.1723E-09 5.6294E-09 - 1.0000E+03 1.5494E-07 9.3168E-08 5.3330E-09 3.8745E-09 - 1.1220E+03 1.0498E-07 6.2540E-08 3.6316E-09 2.6338E-09 - 1.2589E+03 7.0999E-08 4.2329E-08 2.4045E-09 1.8589E-09 - 1.4125E+03 4.7570E-08 2.8360E-08 1.5761E-09 1.1463E-09 - 1.5849E+03 3.2047E-08 1.9229E-08 1.1019E-09 7.3925E-10 - 1.7783E+03 2.1466E-08 1.2874E-08 7.2502E-10 5.0263E-10 - 1.9953E+03 1.4376E-08 8.4871E-09 4.2461E-10 3.4464E-10 - 2.2387E+03 9.6179E-09 5.6604E-09 2.8238E-10 2.2885E-10 - 2.5119E+03 6.3993E-09 3.7836E-09 1.9457E-10 1.5333E-10 - 2.8184E+03 4.2272E-09 2.5057E-09 1.1879E-10 1.0716E-10 - 3.1623E+03 2.9041E-09 1.6928E-09 8.3868E-11 7.0482E-11 - 3.5481E+03 1.8861E-09 1.1007E-09 5.5030E-11 4.4285E-11 - 3.9811E+03 1.2526E-09 7.2183E-10 3.7460E-11 2.7514E-11 - 4.4668E+03 8.3049E-10 4.7713E-10 2.7323E-11 1.8859E-11 - 5.0119E+03 5.5290E-10 3.2171E-10 1.7169E-11 1.3180E-11 - 5.6234E+03 3.6521E-10 2.1120E-10 9.6422E-12 7.8573E-12 - 6.3096E+03 2.4075E-10 1.3653E-10 6.7348E-12 4.9936E-12 - 7.0795E+03 1.5794E-10 8.8137E-11 4.3773E-12 3.2512E-12 - 7.9433E+03 1.0353E-10 5.7640E-11 2.6369E-12 1.9742E-12 - 8.9125E+03 6.8044E-11 3.7767E-11 1.6738E-12 1.3520E-12 - 1.0000E+04 4.3826E-11 2.4611E-11 1.1565E-12 7.9483E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1975E+04 1.2006E+04 6.0004E+03 5.2892E+03 - 1.1220E-01 1.0728E+04 1.0693E+04 5.3450E+03 4.6864E+03 - 1.2589E-01 9.5206E+03 9.4649E+03 4.7071E+03 4.1079E+03 - 1.4125E-01 8.3525E+03 8.3218E+03 4.1036E+03 3.5489E+03 - 1.5849E-01 7.2306E+03 7.1928E+03 3.5483E+03 3.0205E+03 - 1.7783E-01 6.1615E+03 6.1051E+03 3.0333E+03 2.5406E+03 - 1.9953E-01 5.1549E+03 5.1286E+03 2.5458E+03 2.1163E+03 - 2.2387E-01 4.2642E+03 4.2443E+03 2.1073E+03 1.7438E+03 - 2.5119E-01 3.4864E+03 3.4583E+03 1.7305E+03 1.4223E+03 - 2.8184E-01 2.8059E+03 2.7758E+03 1.3964E+03 1.1364E+03 - 3.1623E-01 2.2251E+03 2.2011E+03 1.1090E+03 8.9723E+02 - 3.5481E-01 1.7515E+03 1.7324E+03 8.7086E+02 7.0065E+02 - 3.9811E-01 1.3688E+03 1.3435E+03 6.8023E+02 5.4042E+02 - 4.4668E-01 1.0567E+03 1.0305E+03 5.2481E+02 4.1428E+02 - 5.0119E-01 8.0714E+02 7.8521E+02 3.9786E+02 3.1289E+02 - 5.6234E-01 6.1300E+02 5.9409E+02 2.9927E+02 2.3416E+02 - 6.3096E-01 4.6435E+02 4.4704E+02 2.2242E+02 1.7395E+02 - 7.0795E-01 3.4846E+02 3.3343E+02 1.6453E+02 1.2903E+02 - 7.9433E-01 2.6157E+02 2.4772E+02 1.2059E+02 9.5837E+01 - 8.9125E-01 1.9673E+02 1.8486E+02 8.7914E+01 6.9943E+01 - 1.0000E+00 1.4567E+02 1.3499E+02 6.3898E+01 4.9482E+01 - 1.1220E+00 1.0835E+02 9.8648E+01 4.5941E+01 3.5654E+01 - 1.2589E+00 8.0575E+01 7.2299E+01 3.2773E+01 2.5645E+01 - 1.4125E+00 5.9955E+01 5.3248E+01 2.3342E+01 1.8262E+01 - 1.5849E+00 4.4337E+01 3.9138E+01 1.6647E+01 1.2887E+01 - 1.7783E+00 3.2572E+01 2.8321E+01 1.1849E+01 9.0709E+00 - 1.9953E+00 2.3929E+01 2.0418E+01 8.4305E+00 6.3580E+00 - 2.2387E+00 1.7451E+01 1.4664E+01 5.9400E+00 4.4201E+00 - 2.5119E+00 1.2743E+01 1.0556E+01 4.0671E+00 3.0765E+00 - 2.8184E+00 9.2155E+00 7.6190E+00 2.7524E+00 2.1449E+00 - 3.1623E+00 6.7030E+00 5.5047E+00 1.9404E+00 1.4846E+00 - 3.5481E+00 4.8733E+00 3.9381E+00 1.3353E+00 1.0192E+00 - 3.9811E+00 3.5166E+00 2.8001E+00 9.1352E-01 6.8864E-01 - 4.4668E+00 2.5311E+00 2.0096E+00 6.2000E-01 4.6761E-01 - 5.0119E+00 1.8286E+00 1.4369E+00 4.1847E-01 3.1383E-01 - 5.6234E+00 1.3251E+00 1.0272E+00 2.7863E-01 2.1137E-01 - 6.3096E+00 9.5132E-01 7.2781E-01 1.8690E-01 1.4438E-01 - 7.0795E+00 6.7842E-01 5.1638E-01 1.2737E-01 9.7595E-02 - 7.9433E+00 4.8279E-01 3.6352E-01 8.4750E-02 6.5511E-02 - 8.9125E+00 3.4286E-01 2.5915E-01 5.5996E-02 4.3647E-02 - 1.0000E+01 2.4943E-01 1.8529E-01 3.8258E-02 2.8810E-02 - 1.1220E+01 1.7860E-01 1.3225E-01 2.5539E-02 1.9613E-02 - 1.2589E+01 1.2774E-01 9.4082E-02 1.6841E-02 1.3040E-02 - 1.4125E+01 9.0607E-02 6.6601E-02 1.1238E-02 8.8944E-03 - 1.5849E+01 6.4017E-02 4.6815E-02 7.4342E-03 5.9180E-03 - 1.7783E+01 4.5320E-02 3.2976E-02 4.9594E-03 3.8335E-03 - 1.9953E+01 3.2170E-02 2.3276E-02 3.3304E-03 2.5376E-03 - 2.2387E+01 2.2921E-02 1.6480E-02 2.2257E-03 1.7527E-03 - 2.5119E+01 1.6481E-02 1.1693E-02 1.4955E-03 1.2165E-03 - 2.8184E+01 1.1638E-02 8.1636E-03 9.8052E-04 7.5240E-04 - 3.1623E+01 8.2033E-03 5.8591E-03 6.6407E-04 5.2366E-04 - 3.5481E+01 5.7826E-03 4.1109E-03 4.4960E-04 3.5410E-04 - 3.9811E+01 4.0885E-03 2.8912E-03 2.9787E-04 2.4464E-04 - 4.4668E+01 2.8936E-03 2.0272E-03 2.0074E-04 1.6647E-04 - 5.0119E+01 2.0372E-03 1.4209E-03 1.3493E-04 1.1140E-04 - 5.6234E+01 1.4300E-03 9.9870E-04 9.1016E-05 7.4834E-05 - 6.3096E+01 1.0004E-03 6.9512E-04 6.1626E-05 4.9854E-05 - 7.0795E+01 7.0277E-04 4.8512E-04 4.0939E-05 3.4094E-05 - 7.9433E+01 4.9424E-04 3.3953E-04 2.9186E-05 2.3381E-05 - 8.9125E+01 3.4511E-04 2.3562E-04 2.0367E-05 1.5582E-05 - 1.0000E+02 2.4320E-04 1.6539E-04 1.2935E-05 1.0638E-05 - 1.1220E+02 1.6957E-04 1.1466E-04 8.7845E-06 7.3171E-06 - 1.2589E+02 1.1862E-04 7.9733E-05 5.9914E-06 5.0308E-06 - 1.4125E+02 8.2942E-05 5.5272E-05 4.1322E-06 3.4113E-06 - 1.5849E+02 5.7936E-05 3.8356E-05 2.7855E-06 2.2893E-06 - 1.7783E+02 4.0670E-05 2.6661E-05 1.8874E-06 1.5239E-06 - 1.9953E+02 2.8273E-05 1.8331E-05 1.3118E-06 1.0393E-06 - 2.2387E+02 1.9623E-05 1.2772E-05 8.9924E-07 7.2411E-07 - 2.5119E+02 1.3636E-05 8.8571E-06 6.0661E-07 4.9790E-07 - 2.8184E+02 9.5096E-06 6.0611E-06 4.0483E-07 3.3171E-07 - 3.1623E+02 6.5830E-06 4.2138E-06 2.7970E-07 2.1726E-07 - 3.5481E+02 4.5504E-06 2.8784E-06 1.8857E-07 1.4999E-07 - 3.9811E+02 3.1431E-06 1.9765E-06 1.2617E-07 9.8554E-08 - 4.4668E+02 2.1694E-06 1.3662E-06 8.4275E-08 6.5562E-08 - 5.0119E+02 1.5042E-06 9.3778E-07 5.8420E-08 4.5103E-08 - 5.6234E+02 1.0419E-06 6.4332E-07 3.7589E-08 2.9607E-08 - 6.3096E+02 7.1025E-07 4.3442E-07 2.5038E-08 1.9952E-08 - 7.0795E+02 4.8446E-07 2.9571E-07 1.7686E-08 1.3538E-08 - 7.9433E+02 3.3156E-07 2.0195E-07 1.2032E-08 9.4449E-09 - 8.9125E+02 2.2552E-07 1.3748E-07 8.0713E-09 6.2651E-09 - 1.0000E+03 1.5501E-07 9.3718E-08 5.1104E-09 4.0497E-09 - 1.1220E+03 1.0418E-07 6.2590E-08 3.3278E-09 2.7317E-09 - 1.2589E+03 7.0124E-08 4.2064E-08 2.1874E-09 1.7650E-09 - 1.4125E+03 4.7303E-08 2.8212E-08 1.5071E-09 1.1842E-09 - 1.5849E+03 3.1760E-08 1.8986E-08 1.0238E-09 7.5549E-10 - 1.7783E+03 2.1430E-08 1.2692E-08 6.8374E-10 5.1124E-10 - 1.9953E+03 1.4441E-08 8.4895E-09 4.6686E-10 3.4603E-10 - 2.2387E+03 9.6625E-09 5.6154E-09 2.8131E-10 2.0496E-10 - 2.5119E+03 6.4613E-09 3.7096E-09 1.8960E-10 1.3642E-10 - 2.8184E+03 4.2812E-09 2.4467E-09 1.3712E-10 1.0101E-10 - 3.1623E+03 2.9248E-09 1.7175E-09 8.5601E-11 6.6069E-11 - 3.5481E+03 1.9255E-09 1.1069E-09 5.6092E-11 4.2058E-11 - 3.9811E+03 1.2745E-09 7.2664E-10 3.5658E-11 2.7440E-11 - 4.4668E+03 8.3648E-10 4.8316E-10 2.2352E-11 1.8237E-11 - 5.0119E+03 5.4836E-10 3.2122E-10 1.5449E-11 1.0453E-11 - 5.6234E+03 3.5590E-10 2.0934E-10 1.0191E-11 6.6074E-12 - 6.3096E+03 2.3894E-10 1.3501E-10 7.0267E-12 5.1059E-12 - 7.0795E+03 1.5781E-10 8.8273E-11 4.8612E-12 3.3453E-12 - 7.9433E+03 1.0251E-10 5.7192E-11 3.0816E-12 2.0929E-12 - 8.9125E+03 6.7274E-11 3.8237E-11 1.7680E-12 1.3055E-12 - 1.0000E+04 4.4910E-11 2.5319E-11 1.1597E-12 8.2852E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1982E+04 1.2029E+04 6.0164E+03 5.3016E+03 - 1.1220E-01 1.0729E+04 1.0767E+04 5.3665E+03 4.7015E+03 - 1.2589E-01 9.5137E+03 9.5449E+03 4.7322E+03 4.0932E+03 - 1.4125E-01 8.3534E+03 8.3490E+03 4.1431E+03 3.5231E+03 - 1.5849E-01 7.2295E+03 7.2008E+03 3.5772E+03 3.0018E+03 - 1.7783E-01 6.1553E+03 6.1329E+03 3.0263E+03 2.5604E+03 - 1.9953E-01 5.1659E+03 5.1371E+03 2.5374E+03 2.1471E+03 - 2.2387E-01 4.2658E+03 4.2348E+03 2.1072E+03 1.7504E+03 - 2.5119E-01 3.4712E+03 3.4478E+03 1.7243E+03 1.4168E+03 - 2.8184E-01 2.7953E+03 2.7700E+03 1.3950E+03 1.1352E+03 - 3.1623E-01 2.2253E+03 2.1981E+03 1.1131E+03 8.9867E+02 - 3.5481E-01 1.7532E+03 1.7317E+03 8.7486E+02 7.0346E+02 - 3.9811E-01 1.3694E+03 1.3461E+03 6.8087E+02 5.4262E+02 - 4.4668E-01 1.0609E+03 1.0337E+03 5.2400E+02 4.1321E+02 - 5.0119E-01 8.0917E+02 7.8653E+02 3.9827E+02 3.1323E+02 - 5.6234E-01 6.1327E+02 5.9378E+02 2.9990E+02 2.3456E+02 - 6.3096E-01 4.6623E+02 4.4765E+02 2.2403E+02 1.7340E+02 - 7.0795E-01 3.5049E+02 3.3473E+02 1.6500E+02 1.2858E+02 - 7.9433E-01 2.6166E+02 2.4752E+02 1.2158E+02 9.4370E+01 - 8.9125E-01 1.9507E+02 1.8187E+02 9.0044E+01 6.8755E+01 - 1.0000E+00 1.4550E+02 1.3481E+02 6.4119E+01 4.9587E+01 - 1.1220E+00 1.0848E+02 9.9189E+01 4.6173E+01 3.5413E+01 - 1.2589E+00 8.0533E+01 7.2962E+01 3.2902E+01 2.5524E+01 - 1.4125E+00 5.9967E+01 5.3689E+01 2.3651E+01 1.8284E+01 - 1.5849E+00 4.4341E+01 3.9133E+01 1.6874E+01 1.2859E+01 - 1.7783E+00 3.2475E+01 2.8377E+01 1.1835E+01 9.0544E+00 - 1.9953E+00 2.3984E+01 2.0534E+01 8.3863E+00 6.4341E+00 - 2.2387E+00 1.7678E+01 1.4804E+01 5.8508E+00 4.5443E+00 - 2.5119E+00 1.2830E+01 1.0580E+01 4.0715E+00 3.1652E+00 - 2.8184E+00 9.2594E+00 7.5954E+00 2.8328E+00 2.1435E+00 - 3.1623E+00 6.7186E+00 5.5158E+00 1.9485E+00 1.4883E+00 - 3.5481E+00 4.8961E+00 3.9588E+00 1.3352E+00 1.0113E+00 - 3.9811E+00 3.5631E+00 2.8264E+00 9.1154E-01 6.8843E-01 - 4.4668E+00 2.5804E+00 2.0151E+00 6.2059E-01 4.6622E-01 - 5.0119E+00 1.8675E+00 1.4398E+00 4.1773E-01 3.1344E-01 - 5.6234E+00 1.3365E+00 1.0297E+00 2.8135E-01 2.1728E-01 - 6.3096E+00 9.5337E-01 7.3916E-01 1.8998E-01 1.4782E-01 - 7.0795E+00 6.8469E-01 5.2363E-01 1.2826E-01 9.6328E-02 - 7.9433E+00 4.8881E-01 3.6823E-01 8.4774E-02 6.4540E-02 - 8.9125E+00 3.5026E-01 2.6437E-01 5.7966E-02 4.4236E-02 - 1.0000E+01 2.5117E-01 1.8674E-01 3.8957E-02 2.9393E-02 - 1.1220E+01 1.7880E-01 1.3267E-01 2.5768E-02 1.9524E-02 - 1.2589E+01 1.2755E-01 9.4472E-02 1.7087E-02 1.2996E-02 - 1.4125E+01 9.0552E-02 6.7215E-02 1.1205E-02 8.7618E-03 - 1.5849E+01 6.4816E-02 4.7613E-02 7.5531E-03 5.7917E-03 - 1.7783E+01 4.6023E-02 3.3975E-02 5.0548E-03 3.8597E-03 - 1.9953E+01 3.2583E-02 2.4508E-02 3.3221E-03 2.7101E-03 - 2.2387E+01 2.3064E-02 1.7122E-02 2.1626E-03 1.8391E-03 - 2.5119E+01 1.6209E-02 1.1957E-02 1.4241E-03 1.1829E-03 - 2.8184E+01 1.1492E-02 8.4316E-03 9.5721E-04 8.2112E-04 - 3.1623E+01 8.1969E-03 5.8478E-03 6.6763E-04 5.2517E-04 - 3.5481E+01 5.7863E-03 4.0979E-03 4.5243E-04 3.5575E-04 - 3.9811E+01 4.1022E-03 2.8952E-03 3.0625E-04 2.4362E-04 - 4.4668E+01 2.8882E-03 2.0407E-03 2.0317E-04 1.6351E-04 - 5.0119E+01 2.0389E-03 1.4195E-03 1.3599E-04 1.1025E-04 - 5.6234E+01 1.4358E-03 9.9176E-04 9.2030E-05 7.5970E-05 - 6.3096E+01 1.0052E-03 6.9935E-04 6.1693E-05 5.0408E-05 - 7.0795E+01 7.0700E-04 4.9051E-04 4.1522E-05 3.4053E-05 - 7.9433E+01 4.9444E-04 3.4030E-04 2.8103E-05 2.3544E-05 - 8.9125E+01 3.4801E-04 2.3815E-04 1.9576E-05 1.5790E-05 - 1.0000E+02 2.4279E-04 1.6518E-04 1.3535E-05 1.0809E-05 - 1.1220E+02 1.6969E-04 1.1511E-04 9.1153E-06 7.4217E-06 - 1.2589E+02 1.1885E-04 8.0240E-05 6.1400E-06 4.9222E-06 - 1.4125E+02 8.2785E-05 5.5786E-05 4.1251E-06 3.3771E-06 - 1.5849E+02 5.7689E-05 3.8458E-05 2.7577E-06 2.3588E-06 - 1.7783E+02 4.0403E-05 2.6687E-05 1.9058E-06 1.5645E-06 - 1.9953E+02 2.8409E-05 1.8499E-05 1.3176E-06 1.0598E-06 - 2.2387E+02 1.9778E-05 1.2751E-05 9.0114E-07 7.2977E-07 - 2.5119E+02 1.3644E-05 8.8002E-06 6.0218E-07 4.8793E-07 - 2.8184E+02 9.4570E-06 6.0506E-06 4.0496E-07 3.2027E-07 - 3.1623E+02 6.5977E-06 4.1992E-06 2.7528E-07 2.1865E-07 - 3.5481E+02 4.5254E-06 2.8990E-06 1.8380E-07 1.5073E-07 - 3.9811E+02 3.1408E-06 1.9928E-06 1.2346E-07 1.0272E-07 - 4.4668E+02 2.1868E-06 1.3631E-06 8.5598E-08 6.8447E-08 - 5.0119E+02 1.5063E-06 9.3461E-07 5.7527E-08 4.5859E-08 - 5.6234E+02 1.0384E-06 6.4199E-07 3.9317E-08 2.9989E-08 - 6.3096E+02 7.0854E-07 4.3407E-07 2.7100E-08 1.9663E-08 - 7.0795E+02 4.8661E-07 2.9600E-07 1.7338E-08 1.3758E-08 - 7.9433E+02 3.3171E-07 2.0251E-07 1.1615E-08 9.1156E-09 - 8.9125E+02 2.2536E-07 1.3710E-07 7.5879E-09 5.7165E-09 - 1.0000E+03 1.5522E-07 9.2547E-08 5.2005E-09 3.8782E-09 - 1.1220E+03 1.0417E-07 6.2261E-08 3.3798E-09 2.6038E-09 - 1.2589E+03 7.0474E-08 4.2054E-08 2.1957E-09 1.7630E-09 - 1.4125E+03 4.7583E-08 2.8279E-08 1.5495E-09 1.1438E-09 - 1.5849E+03 3.2112E-08 1.8768E-08 1.0471E-09 7.6241E-10 - 1.7783E+03 2.1559E-08 1.2573E-08 6.7058E-10 4.9144E-10 - 1.9953E+03 1.4442E-08 8.5201E-09 4.5770E-10 3.1413E-10 - 2.2387E+03 9.5963E-09 5.6492E-09 2.8661E-10 2.0374E-10 - 2.5119E+03 6.4584E-09 3.6866E-09 1.8134E-10 1.2013E-10 - 2.8184E+03 4.3188E-09 2.4664E-09 1.2813E-10 8.3233E-11 - 3.1623E+03 2.9278E-09 1.6952E-09 8.2587E-11 6.3387E-11 - 3.5481E+03 1.8871E-09 1.0902E-09 5.4969E-11 4.0307E-11 - 3.9811E+03 1.2621E-09 7.1299E-10 3.6207E-11 2.5666E-11 - 4.4668E+03 8.3714E-10 4.7226E-10 2.3370E-11 1.7683E-11 - 5.0119E+03 5.4800E-10 3.0774E-10 1.5442E-11 1.1295E-11 - 5.6234E+03 3.6636E-10 1.9940E-10 1.0907E-11 6.9839E-12 - 6.3096E+03 2.3945E-10 1.3648E-10 7.2150E-12 4.7277E-12 - 7.0795E+03 1.5713E-10 8.9162E-11 4.5958E-12 3.2488E-12 - 7.9433E+03 1.0247E-10 5.8926E-11 2.6187E-12 2.0846E-12 - 8.9125E+03 6.7564E-11 3.8171E-11 1.5956E-12 1.2666E-12 - 1.0000E+04 4.5204E-11 2.4355E-11 1.1139E-12 9.1577E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1999E+04 1.2094E+04 6.0276E+03 5.2928E+03 - 1.1220E-01 1.0730E+04 1.0789E+04 5.3902E+03 4.6871E+03 - 1.2589E-01 9.5233E+03 9.5509E+03 4.7491E+03 4.1043E+03 - 1.4125E-01 8.3514E+03 8.3373E+03 4.1211E+03 3.5495E+03 - 1.5849E-01 7.2270E+03 7.1979E+03 3.5487E+03 3.0269E+03 - 1.7783E-01 6.1688E+03 6.1299E+03 3.0287E+03 2.5416E+03 - 1.9953E-01 5.1773E+03 5.1427E+03 2.5478E+03 2.1104E+03 - 2.2387E-01 4.2825E+03 4.2411E+03 2.1117E+03 1.7425E+03 - 2.5119E-01 3.4812E+03 3.4582E+03 1.7340E+03 1.4145E+03 - 2.8184E-01 2.8013E+03 2.7811E+03 1.4001E+03 1.1328E+03 - 3.1623E-01 2.2321E+03 2.2027E+03 1.1123E+03 8.9886E+02 - 3.5481E-01 1.7514E+03 1.7330E+03 8.7974E+02 7.0045E+02 - 3.9811E-01 1.3674E+03 1.3488E+03 6.8647E+02 5.3917E+02 - 4.4668E-01 1.0621E+03 1.0369E+03 5.2544E+02 4.1297E+02 - 5.0119E-01 8.1441E+02 7.8772E+02 3.9789E+02 3.1421E+02 - 5.6234E-01 6.1845E+02 5.9405E+02 2.9778E+02 2.3551E+02 - 6.3096E-01 4.6724E+02 4.4478E+02 2.2185E+02 1.7606E+02 - 7.0795E-01 3.5069E+02 3.3162E+02 1.6552E+02 1.2932E+02 - 7.9433E-01 2.6390E+02 2.4799E+02 1.2192E+02 9.4917E+01 - 8.9125E-01 1.9667E+02 1.8378E+02 8.8930E+01 6.9403E+01 - 1.0000E+00 1.4517E+02 1.3519E+02 6.3911E+01 4.9767E+01 - 1.1220E+00 1.0862E+02 9.9619E+01 4.6275E+01 3.5503E+01 - 1.2589E+00 8.1185E+01 7.2803E+01 3.3230E+01 2.5356E+01 - 1.4125E+00 5.9977E+01 5.3498E+01 2.3853E+01 1.8180E+01 - 1.5849E+00 4.4158E+01 3.9026E+01 1.6959E+01 1.3005E+01 - 1.7783E+00 3.2529E+01 2.8277E+01 1.1946E+01 9.1699E+00 - 1.9953E+00 2.3961E+01 2.0651E+01 8.3805E+00 6.3937E+00 - 2.2387E+00 1.7591E+01 1.4900E+01 5.8625E+00 4.4747E+00 - 2.5119E+00 1.2851E+01 1.0683E+01 4.0941E+00 3.0843E+00 - 2.8184E+00 9.4208E+00 7.6581E+00 2.8391E+00 2.1183E+00 - 3.1623E+00 6.8011E+00 5.5320E+00 1.9325E+00 1.4656E+00 - 3.5481E+00 4.9025E+00 3.9394E+00 1.3250E+00 1.0147E+00 - 3.9811E+00 3.5457E+00 2.8134E+00 9.0244E-01 6.9027E-01 - 4.4668E+00 2.5717E+00 2.0171E+00 6.1517E-01 4.6379E-01 - 5.0119E+00 1.8529E+00 1.4450E+00 4.1760E-01 3.1329E-01 - 5.6234E+00 1.3315E+00 1.0392E+00 2.8431E-01 2.1471E-01 - 6.3096E+00 9.5675E-01 7.3848E-01 1.9131E-01 1.4582E-01 - 7.0795E+00 6.8685E-01 5.2453E-01 1.2951E-01 9.6967E-02 - 7.9433E+00 4.9209E-01 3.7381E-01 8.7112E-02 6.6226E-02 - 8.9125E+00 3.4959E-01 2.6362E-01 5.7085E-02 4.4903E-02 - 1.0000E+01 2.4905E-01 1.8659E-01 3.7723E-02 2.9360E-02 - 1.1220E+01 1.7741E-01 1.3277E-01 2.5123E-02 1.9636E-02 - 1.2589E+01 1.2570E-01 9.3475E-02 1.6845E-02 1.3059E-02 - 1.4125E+01 8.9618E-02 6.5875E-02 1.1153E-02 8.4701E-03 - 1.5849E+01 6.4330E-02 4.6682E-02 7.5180E-03 5.7124E-03 - 1.7783E+01 4.6276E-02 3.3173E-02 5.0522E-03 3.9183E-03 - 1.9953E+01 3.2667E-02 2.3505E-02 3.3113E-03 2.6183E-03 - 2.2387E+01 2.3162E-02 1.6682E-02 2.2206E-03 1.7550E-03 - 2.5119E+01 1.6570E-02 1.1700E-02 1.4681E-03 1.2020E-03 - 2.8184E+01 1.1539E-02 8.2199E-03 9.6816E-04 8.1455E-04 - 3.1623E+01 8.1773E-03 5.8274E-03 6.6745E-04 5.2360E-04 - 3.5481E+01 5.7740E-03 4.1072E-03 4.4703E-04 3.5429E-04 - 3.9811E+01 4.0841E-03 2.8775E-03 3.0340E-04 2.4088E-04 - 4.4668E+01 2.8787E-03 2.0239E-03 2.0261E-04 1.5933E-04 - 5.0119E+01 2.0224E-03 1.4256E-03 1.3490E-04 1.0675E-04 - 5.6234E+01 1.4181E-03 9.9404E-04 9.2407E-05 7.4285E-05 - 6.3096E+01 1.0000E-03 6.9694E-04 6.2537E-05 5.1242E-05 - 7.0795E+01 7.0272E-04 4.8366E-04 4.1502E-05 3.4502E-05 - 7.9433E+01 4.9186E-04 3.3729E-04 2.7405E-05 2.3195E-05 - 8.9125E+01 3.4502E-04 2.3639E-04 1.8338E-05 1.5552E-05 - 1.0000E+02 2.4315E-04 1.6481E-04 1.3110E-05 1.0887E-05 - 1.1220E+02 1.6970E-04 1.1430E-04 8.9603E-06 7.3683E-06 - 1.2589E+02 1.1878E-04 7.9593E-05 6.1269E-06 4.9799E-06 - 1.4125E+02 8.3017E-05 5.5370E-05 4.1645E-06 3.3540E-06 - 1.5849E+02 5.7597E-05 3.8617E-05 2.7882E-06 2.2513E-06 - 1.7783E+02 3.9928E-05 2.6769E-05 1.9294E-06 1.5645E-06 - 1.9953E+02 2.7880E-05 1.8551E-05 1.3147E-06 1.0655E-06 - 2.2387E+02 1.9464E-05 1.2714E-05 9.0067E-07 7.1422E-07 - 2.5119E+02 1.3570E-05 8.7916E-06 6.3063E-07 4.9989E-07 - 2.8184E+02 9.4153E-06 6.0585E-06 4.1611E-07 3.3594E-07 - 3.1623E+02 6.5842E-06 4.1866E-06 2.7520E-07 2.2505E-07 - 3.5481E+02 4.5503E-06 2.8784E-06 1.8706E-07 1.4969E-07 - 3.9811E+02 3.1450E-06 1.9876E-06 1.2553E-07 9.7692E-08 - 4.4668E+02 2.1758E-06 1.3602E-06 8.5139E-08 6.5687E-08 - 5.0119E+02 1.5021E-06 9.2833E-07 5.7505E-08 4.4575E-08 - 5.6234E+02 1.0366E-06 6.3883E-07 3.9007E-08 2.9591E-08 - 6.3096E+02 7.0595E-07 4.3435E-07 2.6377E-08 1.9960E-08 - 7.0795E+02 4.8442E-07 2.9750E-07 1.8060E-08 1.3321E-08 - 7.9433E+02 3.3103E-07 2.0148E-07 1.2109E-08 8.9856E-09 - 8.9125E+02 2.2466E-07 1.3573E-07 7.8111E-09 5.9208E-09 - 1.0000E+03 1.5433E-07 9.2688E-08 5.3481E-09 3.9737E-09 - 1.1220E+03 1.0395E-07 6.2508E-08 3.5250E-09 2.5362E-09 - 1.2589E+03 7.0141E-08 4.2037E-08 2.2574E-09 1.5793E-09 - 1.4125E+03 4.7542E-08 2.8064E-08 1.4968E-09 1.1749E-09 - 1.5849E+03 3.2071E-08 1.8828E-08 9.8056E-10 7.9771E-10 - 1.7783E+03 2.1534E-08 1.2593E-08 6.4294E-10 5.0832E-10 - 1.9953E+03 1.4503E-08 8.4734E-09 4.6203E-10 3.3099E-10 - 2.2387E+03 9.7130E-09 5.6320E-09 3.1568E-10 2.2299E-10 - 2.5119E+03 6.4400E-09 3.7324E-09 2.1162E-10 1.5186E-10 - 2.8184E+03 4.2948E-09 2.4471E-09 1.3925E-10 1.0157E-10 - 3.1623E+03 2.9126E-09 1.6769E-09 8.9937E-11 6.0799E-11 - 3.5481E+03 1.8957E-09 1.0959E-09 5.8276E-11 4.0260E-11 - 3.9811E+03 1.2617E-09 7.2742E-10 3.7639E-11 2.7637E-11 - 4.4668E+03 8.3575E-10 4.8027E-10 2.5406E-11 1.7583E-11 - 5.0119E+03 5.5604E-10 3.1765E-10 1.7182E-11 1.1471E-11 - 5.6234E+03 3.6909E-10 2.0595E-10 1.0722E-11 6.7467E-12 - 6.3096E+03 2.4059E-10 1.3519E-10 6.6779E-12 5.0002E-12 - 7.0795E+03 1.5717E-10 8.8780E-11 4.3365E-12 3.4091E-12 - 7.9433E+03 1.0439E-10 5.7514E-11 2.9014E-12 2.3405E-12 - 8.9125E+03 6.7956E-11 3.7532E-11 2.0904E-12 1.4147E-12 - 1.0000E+04 4.4845E-11 2.4823E-11 1.3901E-12 8.3202E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2023E+04 1.2089E+04 6.0599E+03 5.2788E+03 - 1.1220E-01 1.0756E+04 1.0796E+04 5.4281E+03 4.6794E+03 - 1.2589E-01 9.5363E+03 9.5687E+03 4.7893E+03 4.0908E+03 - 1.4125E-01 8.3690E+03 8.3945E+03 4.1455E+03 3.5297E+03 - 1.5849E-01 7.2488E+03 7.2599E+03 3.5713E+03 3.0154E+03 - 1.7783E-01 6.1608E+03 6.1670E+03 3.0493E+03 2.5561E+03 - 1.9953E-01 5.1579E+03 5.1722E+03 2.5647E+03 2.1273E+03 - 2.2387E-01 4.2779E+03 4.2667E+03 2.1235E+03 1.7508E+03 - 2.5119E-01 3.4889E+03 3.4669E+03 1.7472E+03 1.4203E+03 - 2.8184E-01 2.8106E+03 2.7853E+03 1.4077E+03 1.1358E+03 - 3.1623E-01 2.2348E+03 2.2110E+03 1.1211E+03 8.9700E+02 - 3.5481E-01 1.7569E+03 1.7365E+03 8.8414E+02 7.0094E+02 - 3.9811E-01 1.3680E+03 1.3450E+03 6.8074E+02 5.4245E+02 - 4.4668E-01 1.0550E+03 1.0341E+03 5.2193E+02 4.1392E+02 - 5.0119E-01 8.0770E+02 7.8951E+02 3.9883E+02 3.1434E+02 - 5.6234E-01 6.1003E+02 5.9592E+02 2.9964E+02 2.3559E+02 - 6.3096E-01 4.6262E+02 4.4843E+02 2.2387E+02 1.7580E+02 - 7.0795E-01 3.4926E+02 3.3466E+02 1.6569E+02 1.2994E+02 - 7.9433E-01 2.6251E+02 2.4704E+02 1.2089E+02 9.5430E+01 - 8.9125E-01 1.9629E+02 1.8237E+02 8.7525E+01 6.9333E+01 - 1.0000E+00 1.4574E+02 1.3459E+02 6.3763E+01 4.9091E+01 - 1.1220E+00 1.0869E+02 9.9200E+01 4.6032E+01 3.5439E+01 - 1.2589E+00 8.0808E+01 7.2867E+01 3.2954E+01 2.5561E+01 - 1.4125E+00 5.9798E+01 5.3397E+01 2.3505E+01 1.7866E+01 - 1.5849E+00 4.3904E+01 3.9017E+01 1.6634E+01 1.2710E+01 - 1.7783E+00 3.2516E+01 2.8404E+01 1.1734E+01 9.1072E+00 - 1.9953E+00 2.3999E+01 2.0622E+01 8.3249E+00 6.3325E+00 - 2.2387E+00 1.7527E+01 1.4809E+01 5.8218E+00 4.4217E+00 - 2.5119E+00 1.2767E+01 1.0587E+01 4.0222E+00 3.1105E+00 - 2.8184E+00 9.1995E+00 7.5614E+00 2.7932E+00 2.1259E+00 - 3.1623E+00 6.7652E+00 5.4949E+00 1.9339E+00 1.4728E+00 - 3.5481E+00 4.9043E+00 3.9453E+00 1.3363E+00 1.0000E+00 - 3.9811E+00 3.5411E+00 2.8139E+00 9.1345E-01 6.7979E-01 - 4.4668E+00 2.5577E+00 2.0118E+00 6.1954E-01 4.7066E-01 - 5.0119E+00 1.8385E+00 1.4479E+00 4.2297E-01 3.1912E-01 - 5.6234E+00 1.3241E+00 1.0348E+00 2.8306E-01 2.1456E-01 - 6.3096E+00 9.5098E-01 7.3347E-01 1.8816E-01 1.4312E-01 - 7.0795E+00 6.8074E-01 5.2150E-01 1.2724E-01 9.5496E-02 - 7.9433E+00 4.8849E-01 3.7366E-01 8.6518E-02 6.5607E-02 - 8.9125E+00 3.4991E-01 2.6325E-01 5.7070E-02 4.3748E-02 - 1.0000E+01 2.4923E-01 1.8614E-01 3.8683E-02 2.9167E-02 - 1.1220E+01 1.7784E-01 1.3271E-01 2.5944E-02 1.9467E-02 - 1.2589E+01 1.2730E-01 9.3675E-02 1.7210E-02 1.2950E-02 - 1.4125E+01 9.1024E-02 6.6134E-02 1.1227E-02 8.8047E-03 - 1.5849E+01 6.4573E-02 4.6729E-02 7.3804E-03 5.8560E-03 - 1.7783E+01 4.5977E-02 3.3130E-02 4.9664E-03 3.9127E-03 - 1.9953E+01 3.2509E-02 2.3699E-02 3.2688E-03 2.6084E-03 - 2.2387E+01 2.3051E-02 1.6841E-02 2.2026E-03 1.7544E-03 - 2.5119E+01 1.6278E-02 1.1926E-02 1.4739E-03 1.1862E-03 - 2.8184E+01 1.1520E-02 8.3263E-03 9.1167E-04 7.9330E-04 - 3.1623E+01 8.2198E-03 5.8612E-03 6.6568E-04 5.3120E-04 - 3.5481E+01 5.8093E-03 4.1209E-03 4.4723E-04 3.6060E-04 - 3.9811E+01 4.1044E-03 2.9053E-03 2.9871E-04 2.3808E-04 - 4.4668E+01 2.8976E-03 2.0467E-03 1.9990E-04 1.6332E-04 - 5.0119E+01 2.0395E-03 1.4296E-03 1.3607E-04 1.1265E-04 - 5.6234E+01 1.4362E-03 1.0019E-03 9.1103E-05 7.4054E-05 - 6.3096E+01 1.0082E-03 7.0285E-04 6.2702E-05 5.0844E-05 - 7.0795E+01 7.0582E-04 4.9202E-04 4.3045E-05 3.4664E-05 - 7.9433E+01 4.9346E-04 3.4635E-04 2.9000E-05 2.3915E-05 - 8.9125E+01 3.4779E-04 2.3976E-04 1.9997E-05 1.6240E-05 - 1.0000E+02 2.4299E-04 1.6552E-04 1.3210E-05 1.0675E-05 - 1.1220E+02 1.6997E-04 1.1500E-04 8.9613E-06 7.4674E-06 - 1.2589E+02 1.1902E-04 7.9951E-05 6.0579E-06 5.0723E-06 - 1.4125E+02 8.2865E-05 5.5808E-05 4.0114E-06 3.3766E-06 - 1.5849E+02 5.7881E-05 3.8686E-05 2.7900E-06 2.2973E-06 - 1.7783E+02 4.0457E-05 2.6530E-05 1.9620E-06 1.6050E-06 - 1.9953E+02 2.8200E-05 1.8329E-05 1.3219E-06 1.0885E-06 - 2.2387E+02 1.9601E-05 1.2737E-05 8.9098E-07 7.1497E-07 - 2.5119E+02 1.3678E-05 8.8645E-06 5.8104E-07 4.8157E-07 - 2.8184E+02 9.4942E-06 6.1275E-06 3.9365E-07 3.2061E-07 - 3.1623E+02 6.5874E-06 4.2004E-06 2.7513E-07 2.1871E-07 - 3.5481E+02 4.5480E-06 2.8830E-06 1.8367E-07 1.4716E-07 - 3.9811E+02 3.1630E-06 1.9778E-06 1.2317E-07 9.9154E-08 - 4.4668E+02 2.1858E-06 1.3545E-06 8.4630E-08 6.5277E-08 - 5.0119E+02 1.4979E-06 9.2918E-07 5.7889E-08 4.3690E-08 - 5.6234E+02 1.0351E-06 6.4352E-07 3.9031E-08 2.9472E-08 - 6.3096E+02 7.0465E-07 4.3900E-07 2.5522E-08 1.9882E-08 - 7.0795E+02 4.7732E-07 2.9655E-07 1.7268E-08 1.3151E-08 - 7.9433E+02 3.2720E-07 2.0137E-07 1.1815E-08 8.3323E-09 - 8.9125E+02 2.2486E-07 1.3674E-07 7.8924E-09 5.5532E-09 - 1.0000E+03 1.5348E-07 9.3295E-08 5.2793E-09 3.8605E-09 - 1.1220E+03 1.0327E-07 6.2460E-08 3.5617E-09 2.6754E-09 - 1.2589E+03 7.0122E-08 4.1859E-08 2.2703E-09 1.7721E-09 - 1.4125E+03 4.7781E-08 2.8136E-08 1.5497E-09 1.1539E-09 - 1.5849E+03 3.2203E-08 1.8663E-08 1.0731E-09 7.6752E-10 - 1.7783E+03 2.1478E-08 1.2493E-08 6.9122E-10 5.1949E-10 - 1.9953E+03 1.4467E-08 8.5451E-09 4.5895E-10 3.3699E-10 - 2.2387E+03 9.6869E-09 5.7266E-09 3.0167E-10 2.1683E-10 - 2.5119E+03 6.4754E-09 3.8528E-09 2.0882E-10 1.4357E-10 - 2.8184E+03 4.2833E-09 2.5491E-09 1.4356E-10 8.9540E-11 - 3.1623E+03 2.9284E-09 1.7018E-09 8.9424E-11 6.2423E-11 - 3.5481E+03 1.9060E-09 1.0997E-09 5.9822E-11 4.1575E-11 - 3.9811E+03 1.2652E-09 7.1343E-10 3.9736E-11 2.6410E-11 - 4.4668E+03 8.3825E-10 4.7336E-10 2.2512E-11 1.7256E-11 - 5.0119E+03 5.5437E-10 3.1214E-10 1.4082E-11 1.1249E-11 - 5.6234E+03 3.6414E-10 2.0491E-10 9.1577E-12 8.2940E-12 - 6.3096E+03 2.3839E-10 1.3685E-10 6.5005E-12 4.8483E-12 - 7.0795E+03 1.5723E-10 8.8548E-11 4.2517E-12 3.0585E-12 - 7.9433E+03 1.0349E-10 5.7972E-11 2.9007E-12 2.0981E-12 - 8.9125E+03 6.7630E-11 3.7989E-11 1.9501E-12 1.4157E-12 - 1.0000E+04 4.5168E-11 2.5074E-11 1.2930E-12 8.9274E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2016E+04 1.2187E+04 6.0850E+03 5.2903E+03 - 1.1220E-01 1.0747E+04 1.0857E+04 5.4454E+03 4.6998E+03 - 1.2589E-01 9.5397E+03 9.6170E+03 4.7807E+03 4.1142E+03 - 1.4125E-01 8.3925E+03 8.4353E+03 4.1579E+03 3.5437E+03 - 1.5849E-01 7.2582E+03 7.2701E+03 3.5939E+03 3.0120E+03 - 1.7783E-01 6.1751E+03 6.1708E+03 3.0706E+03 2.5430E+03 - 1.9953E-01 5.1813E+03 5.1609E+03 2.5765E+03 2.1187E+03 - 2.2387E-01 4.2788E+03 4.2673E+03 2.1391E+03 1.7438E+03 - 2.5119E-01 3.4828E+03 3.4758E+03 1.7507E+03 1.4153E+03 - 2.8184E-01 2.8065E+03 2.7828E+03 1.4056E+03 1.1321E+03 - 3.1623E-01 2.2340E+03 2.2108E+03 1.1210E+03 8.9756E+02 - 3.5481E-01 1.7527E+03 1.7333E+03 8.8166E+02 7.0201E+02 - 3.9811E-01 1.3674E+03 1.3456E+03 6.8217E+02 5.4286E+02 - 4.4668E-01 1.0632E+03 1.0344E+03 5.2447E+02 4.1282E+02 - 5.0119E-01 8.1497E+02 7.8425E+02 3.9806E+02 3.1074E+02 - 5.6234E-01 6.1595E+02 5.9479E+02 3.0017E+02 2.3466E+02 - 6.3096E-01 4.6325E+02 4.4358E+02 2.2440E+02 1.7530E+02 - 7.0795E-01 3.4763E+02 3.3138E+02 1.6538E+02 1.2840E+02 - 7.9433E-01 2.6201E+02 2.4819E+02 1.2102E+02 9.3883E+01 - 8.9125E-01 1.9603E+02 1.8426E+02 8.8273E+01 6.8064E+01 - 1.0000E+00 1.4591E+02 1.3562E+02 6.3651E+01 4.9561E+01 - 1.1220E+00 1.0842E+02 9.9883E+01 4.6025E+01 3.5805E+01 - 1.2589E+00 8.0822E+01 7.3216E+01 3.3065E+01 2.5740E+01 - 1.4125E+00 5.9828E+01 5.3260E+01 2.3482E+01 1.8162E+01 - 1.5849E+00 4.4231E+01 3.8809E+01 1.6726E+01 1.2843E+01 - 1.7783E+00 3.2620E+01 2.8308E+01 1.1905E+01 9.1120E+00 - 1.9953E+00 2.4001E+01 2.0496E+01 8.3682E+00 6.4250E+00 - 2.2387E+00 1.7640E+01 1.4853E+01 5.8589E+00 4.4747E+00 - 2.5119E+00 1.2805E+01 1.0717E+01 4.0472E+00 3.0861E+00 - 2.8184E+00 9.2702E+00 7.6946E+00 2.8152E+00 2.1556E+00 - 3.1623E+00 6.7741E+00 5.5286E+00 1.9488E+00 1.4735E+00 - 3.5481E+00 4.9006E+00 3.9738E+00 1.3339E+00 1.0163E+00 - 3.9811E+00 3.5437E+00 2.8359E+00 9.0328E-01 6.9287E-01 - 4.4668E+00 2.5728E+00 2.0209E+00 6.1162E-01 4.6990E-01 - 5.0119E+00 1.8549E+00 1.4428E+00 4.1765E-01 3.2210E-01 - 5.6234E+00 1.3303E+00 1.0327E+00 2.8643E-01 2.1568E-01 - 6.3096E+00 9.6051E-01 7.3786E-01 1.9392E-01 1.4361E-01 - 7.0795E+00 6.8905E-01 5.2661E-01 1.2822E-01 9.8012E-02 - 7.9433E+00 4.9497E-01 3.7119E-01 8.4640E-02 6.7047E-02 - 8.9125E+00 3.5453E-01 2.6436E-01 5.6229E-02 4.4476E-02 - 1.0000E+01 2.4897E-01 1.8768E-01 3.8251E-02 2.9393E-02 - 1.1220E+01 1.7764E-01 1.3294E-01 2.5746E-02 1.9351E-02 - 1.2589E+01 1.2703E-01 9.4415E-02 1.6999E-02 1.2915E-02 - 1.4125E+01 9.0309E-02 6.6628E-02 1.1212E-02 8.8680E-03 - 1.5849E+01 6.4325E-02 4.7211E-02 7.3938E-03 6.0012E-03 - 1.7783E+01 4.5684E-02 3.3788E-02 4.9036E-03 3.8975E-03 - 1.9953E+01 3.2403E-02 2.3813E-02 3.2836E-03 2.5975E-03 - 2.2387E+01 2.3146E-02 1.6949E-02 2.1771E-03 1.7769E-03 - 2.5119E+01 1.6484E-02 1.1966E-02 1.4547E-03 1.2118E-03 - 2.8184E+01 1.1691E-02 8.3939E-03 9.9815E-04 8.1561E-04 - 3.1623E+01 8.2144E-03 5.8731E-03 6.6306E-04 5.2795E-04 - 3.5481E+01 5.7963E-03 4.1253E-03 4.4696E-04 3.5669E-04 - 3.9811E+01 4.0976E-03 2.9020E-03 2.9693E-04 2.4292E-04 - 4.4668E+01 2.8916E-03 2.0470E-03 1.9959E-04 1.6284E-04 - 5.0119E+01 2.0388E-03 1.4253E-03 1.3729E-04 1.0893E-04 - 5.6234E+01 1.4414E-03 1.0006E-03 9.1891E-05 7.3811E-05 - 6.3096E+01 1.0107E-03 7.0337E-04 6.1600E-05 5.1026E-05 - 7.0795E+01 7.0999E-04 4.8724E-04 4.2172E-05 3.4863E-05 - 7.9433E+01 4.9775E-04 3.4232E-04 2.8667E-05 2.3248E-05 - 8.9125E+01 3.4829E-04 2.4122E-04 1.9283E-05 1.6548E-05 - 1.0000E+02 2.4424E-04 1.6565E-04 1.3210E-05 1.0819E-05 - 1.1220E+02 1.7091E-04 1.1560E-04 8.8910E-06 7.3557E-06 - 1.2589E+02 1.1930E-04 8.0549E-05 6.0569E-06 5.0265E-06 - 1.4125E+02 8.2995E-05 5.5563E-05 4.0987E-06 3.4310E-06 - 1.5849E+02 5.7728E-05 3.8193E-05 2.7849E-06 2.2802E-06 - 1.7783E+02 4.0251E-05 2.6526E-05 1.9232E-06 1.5466E-06 - 1.9953E+02 2.8079E-05 1.8433E-05 1.3055E-06 1.0863E-06 - 2.2387E+02 1.9536E-05 1.2755E-05 8.8537E-07 7.1841E-07 - 2.5119E+02 1.3726E-05 8.7990E-06 6.1193E-07 4.7889E-07 - 2.8184E+02 9.5549E-06 6.0901E-06 4.1251E-07 3.2167E-07 - 3.1623E+02 6.6112E-06 4.2065E-06 2.8069E-07 2.1691E-07 - 3.5481E+02 4.5457E-06 2.8771E-06 1.8975E-07 1.4921E-07 - 3.9811E+02 3.1486E-06 1.9858E-06 1.2551E-07 1.0276E-07 - 4.4668E+02 2.1655E-06 1.3563E-06 8.6121E-08 6.7342E-08 - 5.0119E+02 1.4896E-06 9.1855E-07 5.8240E-08 4.4688E-08 - 5.6234E+02 1.0375E-06 6.3657E-07 3.8793E-08 3.0054E-08 - 6.3096E+02 7.0586E-07 4.3398E-07 2.6544E-08 2.0144E-08 - 7.0795E+02 4.8262E-07 2.9465E-07 1.7692E-08 1.3343E-08 - 7.9433E+02 3.3081E-07 2.0130E-07 1.1580E-08 9.0666E-09 - 8.9125E+02 2.2628E-07 1.3708E-07 7.8471E-09 6.1843E-09 - 1.0000E+03 1.5468E-07 9.3123E-08 5.1961E-09 3.9192E-09 - 1.1220E+03 1.0434E-07 6.2480E-08 3.3541E-09 2.7383E-09 - 1.2589E+03 7.0355E-08 4.1869E-08 2.2534E-09 1.7989E-09 - 1.4125E+03 4.7576E-08 2.8202E-08 1.5592E-09 1.1187E-09 - 1.5849E+03 3.1895E-08 1.8932E-08 1.0426E-09 7.7250E-10 - 1.7783E+03 2.1223E-08 1.2545E-08 6.3141E-10 5.4813E-10 - 1.9953E+03 1.4374E-08 8.4876E-09 4.5004E-10 3.3189E-10 - 2.2387E+03 9.7464E-09 5.6276E-09 3.1819E-10 2.0409E-10 - 2.5119E+03 6.5263E-09 3.7266E-09 2.1878E-10 1.3739E-10 - 2.8184E+03 4.3717E-09 2.5089E-09 1.3780E-10 9.2884E-11 - 3.1623E+03 2.9419E-09 1.6782E-09 8.3818E-11 5.6613E-11 - 3.5481E+03 1.9164E-09 1.0705E-09 5.6294E-11 3.5985E-11 - 3.9811E+03 1.2863E-09 7.3301E-10 3.7381E-11 2.4469E-11 - 4.4668E+03 8.4643E-10 4.8917E-10 2.5653E-11 1.6126E-11 - 5.0119E+03 5.5796E-10 3.1557E-10 1.5805E-11 1.1142E-11 - 5.6234E+03 3.6889E-10 2.0766E-10 9.1079E-12 7.6050E-12 - 6.3096E+03 2.3978E-10 1.3442E-10 7.1664E-12 5.3391E-12 - 7.0795E+03 1.5882E-10 8.9141E-11 4.5834E-12 3.3868E-12 - 7.9433E+03 1.0443E-10 5.8286E-11 2.8998E-12 1.8997E-12 - 8.9125E+03 6.8675E-11 3.8587E-11 1.9412E-12 1.2495E-12 - 1.0000E+04 4.4709E-11 2.4551E-11 1.1689E-12 8.6914E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2025E+04 1.2191E+04 6.0953E+03 5.2787E+03 - 1.1220E-01 1.0803E+04 1.0885E+04 5.4381E+03 4.6856E+03 - 1.2589E-01 9.5429E+03 9.6215E+03 4.7904E+03 4.1055E+03 - 1.4125E-01 8.3502E+03 8.4370E+03 4.1884E+03 3.5377E+03 - 1.5849E-01 7.2365E+03 7.2698E+03 3.6098E+03 3.0117E+03 - 1.7783E-01 6.1831E+03 6.1809E+03 3.0803E+03 2.5484E+03 - 1.9953E-01 5.2038E+03 5.1906E+03 2.5909E+03 2.1123E+03 - 2.2387E-01 4.2949E+03 4.2801E+03 2.1355E+03 1.7367E+03 - 2.5119E-01 3.4896E+03 3.4777E+03 1.7428E+03 1.4186E+03 - 2.8184E-01 2.8075E+03 2.7900E+03 1.4064E+03 1.1341E+03 - 3.1623E-01 2.2337E+03 2.2102E+03 1.1222E+03 8.9742E+02 - 3.5481E-01 1.7490E+03 1.7354E+03 8.8562E+02 7.0505E+02 - 3.9811E-01 1.3653E+03 1.3531E+03 6.8818E+02 5.4317E+02 - 4.4668E-01 1.0580E+03 1.0385E+03 5.2660E+02 4.1494E+02 - 5.0119E-01 8.0700E+02 7.8915E+02 3.9921E+02 3.1576E+02 - 5.6234E-01 6.1345E+02 5.9730E+02 3.0144E+02 2.3618E+02 - 6.3096E-01 4.6409E+02 4.4822E+02 2.2428E+02 1.7490E+02 - 7.0795E-01 3.4879E+02 3.3317E+02 1.6508E+02 1.2813E+02 - 7.9433E-01 2.6062E+02 2.4770E+02 1.2095E+02 9.3836E+01 - 8.9125E-01 1.9498E+02 1.8293E+02 8.7852E+01 6.9022E+01 - 1.0000E+00 1.4579E+02 1.3515E+02 6.3668E+01 4.9541E+01 - 1.1220E+00 1.0896E+02 9.9388E+01 4.5974E+01 3.5794E+01 - 1.2589E+00 8.1014E+01 7.2816E+01 3.3040E+01 2.5723E+01 - 1.4125E+00 5.9936E+01 5.3570E+01 2.3527E+01 1.8059E+01 - 1.5849E+00 4.4149E+01 3.9037E+01 1.6655E+01 1.2794E+01 - 1.7783E+00 3.2516E+01 2.8354E+01 1.1779E+01 9.1575E+00 - 1.9953E+00 2.3984E+01 2.0566E+01 8.3170E+00 6.3465E+00 - 2.2387E+00 1.7549E+01 1.4815E+01 5.8431E+00 4.4279E+00 - 2.5119E+00 1.2713E+01 1.0651E+01 4.0714E+00 3.1229E+00 - 2.8184E+00 9.3349E+00 7.6806E+00 2.8300E+00 2.1860E+00 - 3.1623E+00 6.7619E+00 5.5051E+00 1.9562E+00 1.4799E+00 - 3.5481E+00 4.8934E+00 3.9409E+00 1.3310E+00 1.0178E+00 - 3.9811E+00 3.5479E+00 2.8239E+00 9.0490E-01 6.9188E-01 - 4.4668E+00 2.5629E+00 2.0231E+00 6.2142E-01 4.6829E-01 - 5.0119E+00 1.8471E+00 1.4475E+00 4.2792E-01 3.1684E-01 - 5.6234E+00 1.3318E+00 1.0201E+00 2.8577E-01 2.1548E-01 - 6.3096E+00 9.5632E-01 7.2186E-01 1.9274E-01 1.4404E-01 - 7.0795E+00 6.8574E-01 5.2068E-01 1.2963E-01 9.6821E-02 - 7.9433E+00 4.8946E-01 3.7165E-01 8.5620E-02 6.5559E-02 - 8.9125E+00 3.4580E-01 2.6246E-01 5.7121E-02 4.3614E-02 - 1.0000E+01 2.4925E-01 1.8639E-01 3.7868E-02 2.9057E-02 - 1.1220E+01 1.7772E-01 1.3240E-01 2.5392E-02 1.9498E-02 - 1.2589E+01 1.2737E-01 9.4356E-02 1.7082E-02 1.3095E-02 - 1.4125E+01 9.0098E-02 6.6257E-02 1.1197E-02 8.5944E-03 - 1.5849E+01 6.3779E-02 4.6815E-02 7.3791E-03 5.8424E-03 - 1.7783E+01 4.5973E-02 3.3254E-02 4.9307E-03 3.9313E-03 - 1.9953E+01 3.2859E-02 2.3408E-02 3.2293E-03 2.6403E-03 - 2.2387E+01 2.3278E-02 1.6690E-02 2.1528E-03 1.7458E-03 - 2.5119E+01 1.6426E-02 1.1823E-02 1.4440E-03 1.1798E-03 - 2.8184E+01 1.1535E-02 8.2324E-03 1.0113E-03 8.0696E-04 - 3.1623E+01 8.1898E-03 5.8637E-03 6.6727E-04 5.2788E-04 - 3.5481E+01 5.8021E-03 4.1370E-03 4.4700E-04 3.5541E-04 - 3.9811E+01 4.0960E-03 2.9054E-03 2.9929E-04 2.4018E-04 - 4.4668E+01 2.8817E-03 2.0382E-03 2.0095E-04 1.6332E-04 - 5.0119E+01 2.0283E-03 1.4332E-03 1.3705E-04 1.0936E-04 - 5.6234E+01 1.4264E-03 9.9667E-04 9.0922E-05 7.3721E-05 - 6.3096E+01 1.0044E-03 6.9546E-04 6.1990E-05 5.0327E-05 - 7.0795E+01 7.0765E-04 4.8825E-04 4.2989E-05 3.4723E-05 - 7.9433E+01 4.9766E-04 3.3940E-04 2.8748E-05 2.3135E-05 - 8.9125E+01 3.4623E-04 2.3669E-04 1.9474E-05 1.5771E-05 - 1.0000E+02 2.4258E-04 1.6529E-04 1.3258E-05 1.0685E-05 - 1.1220E+02 1.7023E-04 1.1480E-04 8.9846E-06 7.2217E-06 - 1.2589E+02 1.1905E-04 7.9871E-05 5.9753E-06 4.8976E-06 - 1.4125E+02 8.3063E-05 5.5558E-05 4.0785E-06 3.3086E-06 - 1.5849E+02 5.8144E-05 3.8367E-05 2.8314E-06 2.2479E-06 - 1.7783E+02 4.0486E-05 2.6626E-05 1.9507E-06 1.4989E-06 - 1.9953E+02 2.8211E-05 1.8441E-05 1.3321E-06 1.0224E-06 - 2.2387E+02 1.9677E-05 1.2614E-05 8.8689E-07 6.9491E-07 - 2.5119E+02 1.3623E-05 8.6715E-06 6.0959E-07 4.7668E-07 - 2.8184E+02 9.5254E-06 6.0268E-06 4.0377E-07 3.1197E-07 - 3.1623E+02 6.5862E-06 4.2209E-06 2.7597E-07 2.1852E-07 - 3.5481E+02 4.5410E-06 2.8923E-06 1.8441E-07 1.4505E-07 - 3.9811E+02 3.1382E-06 1.9861E-06 1.2664E-07 1.0007E-07 - 4.4668E+02 2.1651E-06 1.3568E-06 8.6062E-08 6.6854E-08 - 5.0119E+02 1.4929E-06 9.2593E-07 5.9096E-08 4.3440E-08 - 5.6234E+02 1.0440E-06 6.3747E-07 3.8985E-08 3.0284E-08 - 6.3096E+02 7.1162E-07 4.3586E-07 2.6259E-08 2.0658E-08 - 7.0795E+02 4.8286E-07 2.9709E-07 1.7719E-08 1.3489E-08 - 7.9433E+02 3.3072E-07 2.0017E-07 1.1603E-08 9.1130E-09 - 8.9125E+02 2.2621E-07 1.3480E-07 7.7833E-09 6.1163E-09 - 1.0000E+03 1.5439E-07 9.2457E-08 5.3304E-09 3.9224E-09 - 1.1220E+03 1.0406E-07 6.1477E-08 3.4590E-09 2.6859E-09 - 1.2589E+03 7.0648E-08 4.1360E-08 2.3304E-09 1.7968E-09 - 1.4125E+03 4.7683E-08 2.7811E-08 1.5030E-09 1.2102E-09 - 1.5849E+03 3.2248E-08 1.8674E-08 9.8710E-10 7.9356E-10 - 1.7783E+03 2.1472E-08 1.2480E-08 6.5999E-10 4.8977E-10 - 1.9953E+03 1.4448E-08 8.4196E-09 4.2713E-10 3.1911E-10 - 2.2387E+03 9.6006E-09 5.6178E-09 2.9617E-10 2.0958E-10 - 2.5119E+03 6.3573E-09 3.7166E-09 2.0924E-10 1.4284E-10 - 2.8184E+03 4.2559E-09 2.4519E-09 1.4227E-10 9.8401E-11 - 3.1623E+03 2.9379E-09 1.6799E-09 8.4061E-11 6.1870E-11 - 3.5481E+03 1.8914E-09 1.0900E-09 5.5637E-11 3.7768E-11 - 3.9811E+03 1.2486E-09 7.1416E-10 3.7872E-11 2.5790E-11 - 4.4668E+03 8.2012E-10 4.7784E-10 2.2047E-11 1.8254E-11 - 5.0119E+03 5.4299E-10 3.1297E-10 1.5080E-11 1.1980E-11 - 5.6234E+03 3.5724E-10 2.0604E-10 1.1288E-11 6.9916E-12 - 6.3096E+03 2.4014E-10 1.3536E-10 6.6776E-12 4.8707E-12 - 7.0795E+03 1.5638E-10 8.7510E-11 4.1728E-12 3.4254E-12 - 7.9433E+03 1.0383E-10 5.7335E-11 2.7481E-12 2.3863E-12 - 8.9125E+03 6.9215E-11 3.8164E-11 2.0163E-12 1.6720E-12 - 1.0000E+04 4.4921E-11 2.4403E-11 1.4866E-12 1.1374E-12 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2011E+04 1.2190E+04 6.0972E+03 5.2775E+03 - 1.1220E-01 1.0755E+04 1.0904E+04 5.4409E+03 4.7060E+03 - 1.2589E-01 9.5509E+03 9.6426E+03 4.8075E+03 4.1118E+03 - 1.4125E-01 8.3959E+03 8.4373E+03 4.1905E+03 3.5292E+03 - 1.5849E-01 7.2655E+03 7.2926E+03 3.6042E+03 3.0095E+03 - 1.7783E-01 6.1749E+03 6.1956E+03 3.0675E+03 2.5468E+03 - 1.9953E-01 5.1798E+03 5.1829E+03 2.5743E+03 2.1236E+03 - 2.2387E-01 4.2836E+03 4.2794E+03 2.1346E+03 1.7402E+03 - 2.5119E-01 3.4828E+03 3.4791E+03 1.7452E+03 1.4145E+03 - 2.8184E-01 2.7989E+03 2.7917E+03 1.4092E+03 1.1345E+03 - 3.1623E-01 2.2403E+03 2.2224E+03 1.1290E+03 8.9462E+02 - 3.5481E-01 1.7599E+03 1.7399E+03 8.8987E+02 7.0072E+02 - 3.9811E-01 1.3665E+03 1.3455E+03 6.8793E+02 5.4107E+02 - 4.4668E-01 1.0570E+03 1.0300E+03 5.2768E+02 4.1072E+02 - 5.0119E-01 8.0880E+02 7.8542E+02 3.9895E+02 3.0919E+02 - 5.6234E-01 6.1477E+02 5.9652E+02 2.9946E+02 2.3267E+02 - 6.3096E-01 4.6499E+02 4.4819E+02 2.2471E+02 1.7340E+02 - 7.0795E-01 3.5071E+02 3.3258E+02 1.6641E+02 1.2897E+02 - 7.9433E-01 2.6220E+02 2.4722E+02 1.2216E+02 9.4994E+01 - 8.9125E-01 1.9587E+02 1.8324E+02 8.9057E+01 6.8811E+01 - 1.0000E+00 1.4660E+02 1.3550E+02 6.4015E+01 4.9626E+01 - 1.1220E+00 1.0862E+02 1.0002E+02 4.5995E+01 3.5715E+01 - 1.2589E+00 8.0670E+01 7.3377E+01 3.2849E+01 2.5551E+01 - 1.4125E+00 5.9985E+01 5.3420E+01 2.3494E+01 1.8201E+01 - 1.5849E+00 4.4587E+01 3.8929E+01 1.6937E+01 1.2921E+01 - 1.7783E+00 3.2755E+01 2.8432E+01 1.2045E+01 9.0794E+00 - 1.9953E+00 2.3795E+01 2.0568E+01 8.4042E+00 6.4541E+00 - 2.2387E+00 1.7525E+01 1.4704E+01 5.9174E+00 4.5110E+00 - 2.5119E+00 1.2809E+01 1.0676E+01 4.1067E+00 3.0863E+00 - 2.8184E+00 9.2665E+00 7.6692E+00 2.8234E+00 2.1131E+00 - 3.1623E+00 6.7470E+00 5.4783E+00 1.9415E+00 1.4769E+00 - 3.5481E+00 4.8917E+00 3.9454E+00 1.3280E+00 1.0176E+00 - 3.9811E+00 3.5321E+00 2.8285E+00 9.1522E-01 6.9104E-01 - 4.4668E+00 2.5483E+00 2.0116E+00 6.2062E-01 4.7266E-01 - 5.0119E+00 1.8424E+00 1.4385E+00 4.1920E-01 3.2182E-01 - 5.6234E+00 1.3312E+00 1.0248E+00 2.8468E-01 2.1342E-01 - 6.3096E+00 9.5116E-01 7.3194E-01 1.9061E-01 1.3984E-01 - 7.0795E+00 6.8288E-01 5.2519E-01 1.2847E-01 9.6423E-02 - 7.9433E+00 4.9257E-01 3.7403E-01 8.7123E-02 6.4158E-02 - 8.9125E+00 3.5203E-01 2.6466E-01 5.5679E-02 4.1737E-02 - 1.0000E+01 2.4966E-01 1.8695E-01 3.8294E-02 2.9206E-02 - 1.1220E+01 1.7761E-01 1.3240E-01 2.5687E-02 1.9638E-02 - 1.2589E+01 1.2582E-01 9.3652E-02 1.6914E-02 1.3105E-02 - 1.4125E+01 8.9551E-02 6.6325E-02 1.0985E-02 8.6437E-03 - 1.5849E+01 6.3947E-02 4.6692E-02 7.4002E-03 5.8465E-03 - 1.7783E+01 4.5312E-02 3.2949E-02 5.0059E-03 3.9266E-03 - 1.9953E+01 3.2057E-02 2.3260E-02 3.3513E-03 2.5615E-03 - 2.2387E+01 2.2898E-02 1.6599E-02 2.2449E-03 1.6709E-03 - 2.5119E+01 1.6412E-02 1.1693E-02 1.4798E-03 1.1243E-03 - 2.8184E+01 1.1588E-02 8.0896E-03 9.7256E-04 7.8959E-04 - 3.1623E+01 8.2229E-03 5.8517E-03 6.6317E-04 5.2971E-04 - 3.5481E+01 5.8039E-03 4.0970E-03 4.4655E-04 3.5836E-04 - 3.9811E+01 4.0920E-03 2.8945E-03 3.0043E-04 2.4143E-04 - 4.4668E+01 2.8848E-03 2.0338E-03 2.0278E-04 1.6176E-04 - 5.0119E+01 2.0258E-03 1.4192E-03 1.3405E-04 1.0795E-04 - 5.6234E+01 1.4261E-03 9.9698E-04 9.1234E-05 7.3702E-05 - 6.3096E+01 1.0085E-03 6.9721E-04 6.2958E-05 5.0246E-05 - 7.0795E+01 7.0651E-04 4.8642E-04 4.2803E-05 3.3833E-05 - 7.9433E+01 4.9603E-04 3.4257E-04 2.8990E-05 2.3062E-05 - 8.9125E+01 3.4631E-04 2.3739E-04 1.9435E-05 1.5506E-05 - 1.0000E+02 2.4357E-04 1.6565E-04 1.3231E-05 1.0682E-05 - 1.1220E+02 1.7028E-04 1.1501E-04 9.0557E-06 7.4154E-06 - 1.2589E+02 1.1885E-04 7.9550E-05 6.2044E-06 5.0344E-06 - 1.4125E+02 8.3157E-05 5.5403E-05 4.1211E-06 3.3935E-06 - 1.5849E+02 5.8108E-05 3.8547E-05 2.7597E-06 2.2986E-06 - 1.7783E+02 4.0615E-05 2.6605E-05 1.8846E-06 1.5573E-06 - 1.9953E+02 2.8072E-05 1.8556E-05 1.2957E-06 1.0369E-06 - 2.2387E+02 1.9516E-05 1.2878E-05 9.0765E-07 7.0716E-07 - 2.5119E+02 1.3516E-05 8.8264E-06 6.0550E-07 4.9376E-07 - 2.8184E+02 9.4365E-06 6.0449E-06 3.9983E-07 3.1422E-07 - 3.1623E+02 6.6084E-06 4.2040E-06 2.7855E-07 2.1891E-07 - 3.5481E+02 4.5462E-06 2.8906E-06 1.8612E-07 1.5174E-07 - 3.9811E+02 3.1265E-06 1.9932E-06 1.2777E-07 1.0232E-07 - 4.4668E+02 2.1740E-06 1.3492E-06 8.9859E-08 6.8822E-08 - 5.0119E+02 1.5055E-06 9.2742E-07 5.8760E-08 4.7519E-08 - 5.6234E+02 1.0319E-06 6.4179E-07 3.8189E-08 3.0822E-08 - 6.3096E+02 7.0396E-07 4.3362E-07 2.5597E-08 1.9191E-08 - 7.0795E+02 4.8533E-07 2.9783E-07 1.7343E-08 1.2929E-08 - 7.9433E+02 3.3273E-07 2.0279E-07 1.1920E-08 8.9347E-09 - 8.9125E+02 2.2610E-07 1.3690E-07 7.9888E-09 5.7354E-09 - 1.0000E+03 1.5515E-07 9.3868E-08 5.4247E-09 3.8645E-09 - 1.1220E+03 1.0463E-07 6.3037E-08 3.4878E-09 2.7107E-09 - 1.2589E+03 7.0733E-08 4.2322E-08 2.2264E-09 1.8205E-09 - 1.4125E+03 4.7780E-08 2.8281E-08 1.5060E-09 1.1348E-09 - 1.5849E+03 3.2397E-08 1.8960E-08 1.0220E-09 7.7835E-10 - 1.7783E+03 2.1788E-08 1.2558E-08 6.9627E-10 5.3648E-10 - 1.9953E+03 1.4419E-08 8.4537E-09 4.8724E-10 3.3440E-10 - 2.2387E+03 9.5978E-09 5.5901E-09 3.2329E-10 2.1790E-10 - 2.5119E+03 6.4975E-09 3.7089E-09 2.1359E-10 1.4499E-10 - 2.8184E+03 4.3389E-09 2.4866E-09 1.4011E-10 9.8150E-11 - 3.1623E+03 2.9336E-09 1.6640E-09 8.6186E-11 6.4896E-11 - 3.5481E+03 1.9098E-09 1.0823E-09 5.8420E-11 4.0246E-11 - 3.9811E+03 1.2591E-09 7.2704E-10 3.8173E-11 2.6664E-11 - 4.4668E+03 8.3175E-10 4.8329E-10 2.3675E-11 1.7393E-11 - 5.0119E+03 5.4554E-10 3.1188E-10 1.6011E-11 1.0935E-11 - 5.6234E+03 3.6377E-10 2.0615E-10 9.9015E-12 7.8082E-12 - 6.3096E+03 2.4147E-10 1.3574E-10 6.9292E-12 5.4534E-12 - 7.0795E+03 1.5865E-10 8.9407E-11 4.3880E-12 3.1646E-12 - 7.9433E+03 1.0304E-10 5.7211E-11 3.1022E-12 1.8872E-12 - 8.9125E+03 6.7823E-11 3.7008E-11 2.0907E-12 1.1844E-12 - 1.0000E+04 4.4418E-11 2.4601E-11 1.3367E-12 7.1549E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1989E+04 1.2215E+04 6.1056E+03 5.2686E+03 - 1.1220E-01 1.0719E+04 1.0890E+04 5.4493E+03 4.6646E+03 - 1.2589E-01 9.5246E+03 9.6192E+03 4.8117E+03 4.0738E+03 - 1.4125E-01 8.3929E+03 8.4316E+03 4.1929E+03 3.5221E+03 - 1.5849E-01 7.2651E+03 7.2910E+03 3.6176E+03 2.9953E+03 - 1.7783E-01 6.1822E+03 6.1951E+03 3.0651E+03 2.5270E+03 - 1.9953E-01 5.1988E+03 5.2028E+03 2.5798E+03 2.1056E+03 - 2.2387E-01 4.2961E+03 4.2938E+03 2.1431E+03 1.7370E+03 - 2.5119E-01 3.4893E+03 3.4849E+03 1.7446E+03 1.4190E+03 - 2.8184E-01 2.8055E+03 2.7961E+03 1.4096E+03 1.1379E+03 - 3.1623E-01 2.2344E+03 2.2171E+03 1.1266E+03 8.9871E+02 - 3.5481E-01 1.7559E+03 1.7463E+03 8.8552E+02 6.9883E+02 - 3.9811E-01 1.3657E+03 1.3480E+03 6.8504E+02 5.4094E+02 - 4.4668E-01 1.0556E+03 1.0273E+03 5.2375E+02 4.1357E+02 - 5.0119E-01 8.0891E+02 7.8397E+02 3.9768E+02 3.1153E+02 - 5.6234E-01 6.1455E+02 5.9626E+02 2.9764E+02 2.3391E+02 - 6.3096E-01 4.6377E+02 4.4837E+02 2.2201E+02 1.7329E+02 - 7.0795E-01 3.4777E+02 3.3325E+02 1.6504E+02 1.2788E+02 - 7.9433E-01 2.6012E+02 2.4828E+02 1.2150E+02 9.3988E+01 - 8.9125E-01 1.9544E+02 1.8405E+02 8.8270E+01 6.8241E+01 - 1.0000E+00 1.4532E+02 1.3521E+02 6.4172E+01 4.9552E+01 - 1.1220E+00 1.0809E+02 9.9218E+01 4.5985E+01 3.5379E+01 - 1.2589E+00 8.0785E+01 7.2775E+01 3.2847E+01 2.5477E+01 - 1.4125E+00 5.9988E+01 5.3381E+01 2.3435E+01 1.8267E+01 - 1.5849E+00 4.4206E+01 3.8710E+01 1.6751E+01 1.3067E+01 - 1.7783E+00 3.2508E+01 2.8098E+01 1.1950E+01 9.1579E+00 - 1.9953E+00 2.3906E+01 2.0414E+01 8.3917E+00 6.4040E+00 - 2.2387E+00 1.7426E+01 1.4771E+01 5.8261E+00 4.4890E+00 - 2.5119E+00 1.2754E+01 1.0689E+01 4.0522E+00 3.1168E+00 - 2.8184E+00 9.2812E+00 7.6281E+00 2.8240E+00 2.1977E+00 - 3.1623E+00 6.7206E+00 5.4544E+00 1.9354E+00 1.4914E+00 - 3.5481E+00 4.8810E+00 3.9069E+00 1.3200E+00 1.0073E+00 - 3.9811E+00 3.5278E+00 2.8095E+00 9.0163E-01 6.8615E-01 - 4.4668E+00 2.5499E+00 1.9979E+00 6.1383E-01 4.6451E-01 - 5.0119E+00 1.8496E+00 1.4268E+00 4.1691E-01 3.1561E-01 - 5.6234E+00 1.3245E+00 1.0280E+00 2.8069E-01 2.1324E-01 - 6.3096E+00 9.4928E-01 7.3033E-01 1.9137E-01 1.4397E-01 - 7.0795E+00 6.8168E-01 5.1536E-01 1.2699E-01 9.7483E-02 - 7.9433E+00 4.8429E-01 3.6327E-01 8.3108E-02 6.3482E-02 - 8.9125E+00 3.4819E-01 2.5906E-01 5.6302E-02 4.2333E-02 - 1.0000E+01 2.5064E-01 1.8621E-01 3.8164E-02 2.9371E-02 - 1.1220E+01 1.7825E-01 1.3214E-01 2.5517E-02 1.9792E-02 - 1.2589E+01 1.2740E-01 9.4249E-02 1.6893E-02 1.3332E-02 - 1.4125E+01 9.0508E-02 6.6720E-02 1.1169E-02 8.8733E-03 - 1.5849E+01 6.4444E-02 4.6973E-02 7.5740E-03 5.8669E-03 - 1.7783E+01 4.5758E-02 3.3161E-02 5.0747E-03 3.8087E-03 - 1.9953E+01 3.2506E-02 2.3503E-02 3.3884E-03 2.4988E-03 - 2.2387E+01 2.2957E-02 1.6852E-02 2.1984E-03 1.6919E-03 - 2.5119E+01 1.6331E-02 1.2009E-02 1.4325E-03 1.1643E-03 - 2.8184E+01 1.1684E-02 8.4212E-03 1.0119E-03 8.3263E-04 - 3.1623E+01 8.2080E-03 5.8673E-03 6.5841E-04 5.3031E-04 - 3.5481E+01 5.7927E-03 4.1320E-03 4.4196E-04 3.6199E-04 - 3.9811E+01 4.0914E-03 2.9062E-03 2.9899E-04 2.4387E-04 - 4.4668E+01 2.8965E-03 2.0366E-03 2.0119E-04 1.6477E-04 - 5.0119E+01 2.0341E-03 1.4247E-03 1.3659E-04 1.1272E-04 - 5.6234E+01 1.4320E-03 9.9487E-04 9.3674E-05 7.7844E-05 - 6.3096E+01 1.0091E-03 7.0379E-04 6.2873E-05 5.1949E-05 - 7.0795E+01 7.0947E-04 4.9295E-04 4.1048E-05 3.3864E-05 - 7.9433E+01 4.9787E-04 3.4014E-04 2.7646E-05 2.2894E-05 - 8.9125E+01 3.5035E-04 2.3825E-04 1.9164E-05 1.5362E-05 - 1.0000E+02 2.4288E-04 1.6568E-04 1.3062E-05 1.0651E-05 - 1.1220E+02 1.6941E-04 1.1488E-04 8.9079E-06 7.3334E-06 - 1.2589E+02 1.1866E-04 7.9724E-05 6.0616E-06 5.0265E-06 - 1.4125E+02 8.3329E-05 5.5458E-05 4.1422E-06 3.3940E-06 - 1.5849E+02 5.8081E-05 3.8469E-05 2.8746E-06 2.2667E-06 - 1.7783E+02 4.0324E-05 2.6699E-05 1.9043E-06 1.5752E-06 - 1.9953E+02 2.8388E-05 1.8598E-05 1.2686E-06 1.0668E-06 - 2.2387E+02 1.9753E-05 1.2794E-05 8.9231E-07 7.1703E-07 - 2.5119E+02 1.3692E-05 8.7775E-06 5.9555E-07 4.9022E-07 - 2.8184E+02 9.5265E-06 6.0798E-06 4.0753E-07 3.3227E-07 - 3.1623E+02 6.6265E-06 4.2024E-06 2.7522E-07 2.2126E-07 - 3.5481E+02 4.5578E-06 2.8763E-06 1.8966E-07 1.5089E-07 - 3.9811E+02 3.1439E-06 1.9799E-06 1.2698E-07 1.0206E-07 - 4.4668E+02 2.1666E-06 1.3496E-06 8.4128E-08 6.7526E-08 - 5.0119E+02 1.5018E-06 9.2114E-07 5.6975E-08 4.5372E-08 - 5.6234E+02 1.0369E-06 6.4046E-07 3.8461E-08 3.0089E-08 - 6.3096E+02 7.0503E-07 4.3752E-07 2.6034E-08 1.9779E-08 - 7.0795E+02 4.8261E-07 2.9774E-07 1.7497E-08 1.3480E-08 - 7.9433E+02 3.2982E-07 2.0169E-07 1.1787E-08 8.9371E-09 - 8.9125E+02 2.2537E-07 1.3743E-07 7.7932E-09 6.0346E-09 - 1.0000E+03 1.5464E-07 9.3332E-08 5.1978E-09 4.0332E-09 - 1.1220E+03 1.0408E-07 6.2730E-08 3.4102E-09 2.6838E-09 - 1.2589E+03 7.0709E-08 4.2252E-08 2.2701E-09 1.7390E-09 - 1.4125E+03 4.7746E-08 2.8300E-08 1.5439E-09 1.1466E-09 - 1.5849E+03 3.2441E-08 1.8796E-08 1.0409E-09 8.0063E-10 - 1.7783E+03 2.1596E-08 1.2778E-08 7.2278E-10 5.2058E-10 - 1.9953E+03 1.4460E-08 8.4143E-09 4.7038E-10 3.2844E-10 - 2.2387E+03 9.6266E-09 5.6281E-09 3.0152E-10 2.1253E-10 - 2.5119E+03 6.4289E-09 3.8071E-09 1.8940E-10 1.5283E-10 - 2.8184E+03 4.2715E-09 2.5774E-09 1.2909E-10 1.0904E-10 - 3.1623E+03 2.9146E-09 1.7052E-09 8.5983E-11 5.9938E-11 - 3.5481E+03 1.8892E-09 1.0929E-09 5.2251E-11 4.2096E-11 - 3.9811E+03 1.2601E-09 7.2137E-10 3.6414E-11 2.7592E-11 - 4.4668E+03 8.4241E-10 4.7563E-10 2.5023E-11 1.7058E-11 - 5.0119E+03 5.5326E-10 3.1074E-10 1.6279E-11 1.1635E-11 - 5.6234E+03 3.6220E-10 2.0213E-10 1.0972E-11 8.1774E-12 - 6.3096E+03 2.3892E-10 1.3705E-10 7.1581E-12 4.8509E-12 - 7.0795E+03 1.5855E-10 8.9717E-11 4.1689E-12 2.6298E-12 - 7.9433E+03 1.0492E-10 5.8352E-11 2.8520E-12 1.9491E-12 - 8.9125E+03 6.8240E-11 3.8312E-11 2.0415E-12 1.5400E-12 - 1.0000E+04 4.4935E-11 2.5166E-11 1.2972E-12 8.1241E-13 -average flux in [cosZ = 0.90 -- 1.00, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2023E+04 1.2153E+04 6.0858E+03 5.2499E+03 - 1.1220E-01 1.0746E+04 1.0888E+04 5.4389E+03 4.6599E+03 - 1.2589E-01 9.5226E+03 9.6357E+03 4.7915E+03 4.0782E+03 - 1.4125E-01 8.3633E+03 8.4164E+03 4.1713E+03 3.5169E+03 - 1.5849E-01 7.2402E+03 7.2641E+03 3.5952E+03 2.9945E+03 - 1.7783E-01 6.1773E+03 6.1841E+03 3.0677E+03 2.5333E+03 - 1.9953E-01 5.1893E+03 5.1746E+03 2.5801E+03 2.1174E+03 - 2.2387E-01 4.2809E+03 4.2679E+03 2.1460E+03 1.7399E+03 - 2.5119E-01 3.4785E+03 3.4719E+03 1.7496E+03 1.4198E+03 - 2.8184E-01 2.8010E+03 2.7890E+03 1.4083E+03 1.1403E+03 - 3.1623E-01 2.2257E+03 2.2083E+03 1.1213E+03 8.9836E+02 - 3.5481E-01 1.7478E+03 1.7359E+03 8.8052E+02 7.0250E+02 - 3.9811E-01 1.3629E+03 1.3515E+03 6.8595E+02 5.4470E+02 - 4.4668E-01 1.0553E+03 1.0340E+03 5.2395E+02 4.1513E+02 - 5.0119E-01 8.0835E+02 7.8980E+02 3.9695E+02 3.1306E+02 - 5.6234E-01 6.1237E+02 5.9692E+02 2.9979E+02 2.3517E+02 - 6.3096E-01 4.6189E+02 4.4418E+02 2.2113E+02 1.7418E+02 - 7.0795E-01 3.4832E+02 3.3229E+02 1.6333E+02 1.2807E+02 - 7.9433E-01 2.6170E+02 2.4828E+02 1.2155E+02 9.3859E+01 - 8.9125E-01 1.9499E+02 1.8320E+02 8.7941E+01 6.8019E+01 - 1.0000E+00 1.4598E+02 1.3488E+02 6.3836E+01 4.9252E+01 - 1.1220E+00 1.0829E+02 9.9315E+01 4.6260E+01 3.5389E+01 - 1.2589E+00 8.0318E+01 7.2828E+01 3.3039E+01 2.5500E+01 - 1.4125E+00 5.9771E+01 5.3196E+01 2.3244E+01 1.8139E+01 - 1.5849E+00 4.4237E+01 3.8586E+01 1.6349E+01 1.2917E+01 - 1.7783E+00 3.2494E+01 2.8042E+01 1.1693E+01 9.1928E+00 - 1.9953E+00 2.3752E+01 2.0494E+01 8.3012E+00 6.3955E+00 - 2.2387E+00 1.7375E+01 1.4859E+01 5.8019E+00 4.4563E+00 - 2.5119E+00 1.2691E+01 1.0701E+01 4.0737E+00 3.0897E+00 - 2.8184E+00 9.3080E+00 7.6777E+00 2.8430E+00 2.1120E+00 - 3.1623E+00 6.7642E+00 5.4853E+00 1.9422E+00 1.4687E+00 - 3.5481E+00 4.8950E+00 3.9151E+00 1.3358E+00 1.0078E+00 - 3.9811E+00 3.5423E+00 2.8029E+00 9.0505E-01 6.8719E-01 - 4.4668E+00 2.5612E+00 2.0139E+00 6.1014E-01 4.6573E-01 - 5.0119E+00 1.8379E+00 1.4316E+00 4.1825E-01 3.1798E-01 - 5.6234E+00 1.3267E+00 1.0184E+00 2.8376E-01 2.1549E-01 - 6.3096E+00 9.5938E-01 7.2917E-01 1.9042E-01 1.4155E-01 - 7.0795E+00 6.8751E-01 5.2146E-01 1.2748E-01 9.4499E-02 - 7.9433E+00 4.9191E-01 3.7142E-01 8.6163E-02 6.4919E-02 - 8.9125E+00 3.4828E-01 2.6340E-01 5.8221E-02 4.2958E-02 - 1.0000E+01 2.4942E-01 1.8439E-01 3.8722E-02 2.8962E-02 - 1.1220E+01 1.7774E-01 1.3151E-01 2.5693E-02 1.9286E-02 - 1.2589E+01 1.2645E-01 9.3780E-02 1.7072E-02 1.2804E-02 - 1.4125E+01 9.0107E-02 6.6904E-02 1.1542E-02 8.6476E-03 - 1.5849E+01 6.3876E-02 4.7222E-02 7.4547E-03 5.8028E-03 - 1.7783E+01 4.5561E-02 3.3050E-02 5.0339E-03 3.8361E-03 - 1.9953E+01 3.2331E-02 2.3471E-02 3.4646E-03 2.5779E-03 - 2.2387E+01 2.3015E-02 1.6842E-02 2.2230E-03 1.6787E-03 - 2.5119E+01 1.6488E-02 1.1746E-02 1.4593E-03 1.1500E-03 - 2.8184E+01 1.1639E-02 8.1344E-03 9.5814E-04 7.7658E-04 - 3.1623E+01 8.1889E-03 5.8467E-03 6.7061E-04 5.2849E-04 - 3.5481E+01 5.7955E-03 4.1146E-03 4.5000E-04 3.5753E-04 - 3.9811E+01 4.0903E-03 2.8849E-03 3.0121E-04 2.4071E-04 - 4.4668E+01 2.8793E-03 2.0209E-03 1.9980E-04 1.5814E-04 - 5.0119E+01 2.0336E-03 1.4321E-03 1.3529E-04 1.0898E-04 - 5.6234E+01 1.4234E-03 1.0004E-03 9.1765E-05 7.6326E-05 - 6.3096E+01 9.9722E-04 6.9322E-04 6.1170E-05 5.0592E-05 - 7.0795E+01 7.0664E-04 4.8605E-04 4.2174E-05 3.4168E-05 - 7.9433E+01 4.9799E-04 3.4174E-04 2.8937E-05 2.2860E-05 - 8.9125E+01 3.4544E-04 2.3800E-04 1.9745E-05 1.5472E-05 - 1.0000E+02 2.4311E-04 1.6516E-04 1.3162E-05 1.0885E-05 - 1.1220E+02 1.6997E-04 1.1543E-04 8.9252E-06 7.3599E-06 - 1.2589E+02 1.1852E-04 8.0145E-05 6.0401E-06 4.9714E-06 - 1.4125E+02 8.2890E-05 5.5460E-05 4.1003E-06 3.3297E-06 - 1.5849E+02 5.7761E-05 3.8610E-05 2.8298E-06 2.2825E-06 - 1.7783E+02 4.0221E-05 2.6879E-05 1.9455E-06 1.5726E-06 - 1.9953E+02 2.8050E-05 1.8506E-05 1.3183E-06 1.0454E-06 - 2.2387E+02 1.9600E-05 1.2734E-05 8.8525E-07 6.9645E-07 - 2.5119E+02 1.3744E-05 8.7479E-06 6.1424E-07 4.7477E-07 - 2.8184E+02 9.6122E-06 6.0602E-06 4.2080E-07 3.1175E-07 - 3.1623E+02 6.6157E-06 4.2155E-06 2.8145E-07 2.1832E-07 - 3.5481E+02 4.5686E-06 2.8868E-06 1.9209E-07 1.4880E-07 - 3.9811E+02 3.1612E-06 1.9870E-06 1.2888E-07 1.0043E-07 - 4.4668E+02 2.1708E-06 1.3580E-06 8.6345E-08 6.7679E-08 - 5.0119E+02 1.4852E-06 9.1840E-07 5.7373E-08 4.6345E-08 - 5.6234E+02 1.0390E-06 6.3966E-07 3.8993E-08 3.0243E-08 - 6.3096E+02 7.1012E-07 4.3454E-07 2.5923E-08 2.0864E-08 - 7.0795E+02 4.8852E-07 2.9730E-07 1.7148E-08 1.3920E-08 - 7.9433E+02 3.3246E-07 2.0169E-07 1.1716E-08 9.0492E-09 - 8.9125E+02 2.2586E-07 1.3593E-07 7.7497E-09 5.8369E-09 - 1.0000E+03 1.5522E-07 9.3066E-08 5.1179E-09 3.8385E-09 - 1.1220E+03 1.0460E-07 6.1875E-08 3.5033E-09 2.5827E-09 - 1.2589E+03 7.0271E-08 4.1783E-08 2.3694E-09 1.7293E-09 - 1.4125E+03 4.7529E-08 2.8166E-08 1.5766E-09 1.2047E-09 - 1.5849E+03 3.2133E-08 1.8776E-08 1.0392E-09 7.9181E-10 - 1.7783E+03 2.1630E-08 1.2836E-08 6.7858E-10 5.0168E-10 - 1.9953E+03 1.4395E-08 8.5273E-09 4.6468E-10 3.4131E-10 - 2.2387E+03 9.6871E-09 5.6823E-09 3.2342E-10 2.2805E-10 - 2.5119E+03 6.5048E-09 3.7571E-09 2.1398E-10 1.4633E-10 - 2.8184E+03 4.3302E-09 2.4549E-09 1.3413E-10 9.5193E-11 - 3.1623E+03 2.9253E-09 1.6852E-09 8.5153E-11 6.4212E-11 - 3.5481E+03 1.8990E-09 1.0967E-09 5.4108E-11 4.4800E-11 - 3.9811E+03 1.2656E-09 7.1996E-10 3.7701E-11 2.8531E-11 - 4.4668E+03 8.4110E-10 4.7060E-10 2.4873E-11 1.8280E-11 - 5.0119E+03 5.5357E-10 3.1188E-10 1.6429E-11 1.0694E-11 - 5.6234E+03 3.6435E-10 2.0661E-10 1.0875E-11 6.3082E-12 - 6.3096E+03 2.3853E-10 1.3346E-10 7.2359E-12 5.0740E-12 - 7.0795E+03 1.5700E-10 8.7608E-11 4.3141E-12 3.6289E-12 - 7.9433E+03 1.0346E-10 5.7859E-11 2.4609E-12 2.1042E-12 - 8.9125E+03 6.8269E-11 3.7661E-11 1.6248E-12 1.2207E-12 - 1.0000E+04 4.4351E-11 2.3670E-11 1.2062E-12 9.3078E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2328E+04 1.2474E+04 6.2557E+03 5.4519E+03 - 1.1220E-01 1.1014E+04 1.1081E+04 5.5775E+03 4.8247E+03 - 1.2589E-01 9.7683E+03 9.7776E+03 4.8964E+03 4.1994E+03 - 1.4125E-01 8.5113E+03 8.5501E+03 4.2579E+03 3.6264E+03 - 1.5849E-01 7.3496E+03 7.3770E+03 3.6713E+03 3.0978E+03 - 1.7783E-01 6.2704E+03 6.2569E+03 3.1351E+03 2.6030E+03 - 1.9953E-01 5.2466E+03 5.2448E+03 2.6292E+03 2.1779E+03 - 2.2387E-01 4.3307E+03 4.3299E+03 2.1829E+03 1.8015E+03 - 2.5119E-01 3.5253E+03 3.5271E+03 1.7975E+03 1.4596E+03 - 2.8184E-01 2.8417E+03 2.8350E+03 1.4536E+03 1.1725E+03 - 3.1623E-01 2.2704E+03 2.2457E+03 1.1655E+03 9.3165E+02 - 3.5481E-01 1.7916E+03 1.7682E+03 9.2000E+02 7.2907E+02 - 3.9811E-01 1.3970E+03 1.3788E+03 7.1544E+02 5.6565E+02 - 4.4668E-01 1.0785E+03 1.0616E+03 5.5205E+02 4.3410E+02 - 5.0119E-01 8.2588E+02 8.1141E+02 4.2093E+02 3.2874E+02 - 5.6234E-01 6.3082E+02 6.1325E+02 3.1809E+02 2.4712E+02 - 6.3096E-01 4.7790E+02 4.6037E+02 2.3764E+02 1.8454E+02 - 7.0795E-01 3.5886E+02 3.4343E+02 1.7648E+02 1.3725E+02 - 7.9433E-01 2.6803E+02 2.5514E+02 1.2945E+02 1.0069E+02 - 8.9125E-01 1.9949E+02 1.8942E+02 9.5031E+01 7.3138E+01 - 1.0000E+00 1.4943E+02 1.4006E+02 6.8709E+01 5.3325E+01 - 1.1220E+00 1.1155E+02 1.0331E+02 4.9500E+01 3.8659E+01 - 1.2589E+00 8.3156E+01 7.5805E+01 3.5861E+01 2.7847E+01 - 1.4125E+00 6.1709E+01 5.5535E+01 2.5759E+01 1.9924E+01 - 1.5849E+00 4.5707E+01 4.0760E+01 1.8151E+01 1.4077E+01 - 1.7783E+00 3.3696E+01 2.9331E+01 1.2906E+01 9.9915E+00 - 1.9953E+00 2.4745E+01 2.1182E+01 9.1645E+00 7.1451E+00 - 2.2387E+00 1.8000E+01 1.5492E+01 6.4166E+00 4.9707E+00 - 2.5119E+00 1.3103E+01 1.1145E+01 4.4748E+00 3.4249E+00 - 2.8184E+00 9.5282E+00 8.0465E+00 3.1631E+00 2.3736E+00 - 3.1623E+00 6.9781E+00 5.7397E+00 2.1586E+00 1.6425E+00 - 3.5481E+00 5.0738E+00 4.1079E+00 1.4905E+00 1.1182E+00 - 3.9811E+00 3.6702E+00 2.9355E+00 1.0249E+00 7.6411E-01 - 4.4668E+00 2.6383E+00 2.0860E+00 7.0057E-01 5.2823E-01 - 5.0119E+00 1.8941E+00 1.4939E+00 4.6702E-01 3.5550E-01 - 5.6234E+00 1.3672E+00 1.0660E+00 3.1494E-01 2.3591E-01 - 6.3096E+00 9.8033E-01 7.5911E-01 2.1170E-01 1.5916E-01 - 7.0795E+00 7.0331E-01 5.4009E-01 1.4058E-01 1.0730E-01 - 7.9433E+00 5.0709E-01 3.8278E-01 9.6230E-02 7.1830E-02 - 8.9125E+00 3.6237E-01 2.7253E-01 6.3432E-02 4.9063E-02 - 1.0000E+01 2.5748E-01 1.9475E-01 4.3446E-02 3.2974E-02 - 1.1220E+01 1.8384E-01 1.3745E-01 2.8960E-02 2.1686E-02 - 1.2589E+01 1.3086E-01 9.7487E-02 1.9376E-02 1.4409E-02 - 1.4125E+01 9.3521E-02 6.9202E-02 1.3196E-02 9.9191E-03 - 1.5849E+01 6.6605E-02 4.8937E-02 8.6398E-03 6.6165E-03 - 1.7783E+01 4.7092E-02 3.5086E-02 5.7053E-03 4.4588E-03 - 1.9953E+01 3.3526E-02 2.4826E-02 3.8458E-03 3.0504E-03 - 2.2387E+01 2.3739E-02 1.7364E-02 2.6530E-03 1.9597E-03 - 2.5119E+01 1.6829E-02 1.2260E-02 1.7339E-03 1.3788E-03 - 2.8184E+01 1.2002E-02 8.5779E-03 1.1103E-03 9.3444E-04 - 3.1623E+01 8.4752E-03 6.1017E-03 7.5072E-04 5.8851E-04 - 3.5481E+01 6.0121E-03 4.3052E-03 5.0253E-04 3.9683E-04 - 3.9811E+01 4.2396E-03 3.0372E-03 3.3565E-04 2.6744E-04 - 4.4668E+01 2.9897E-03 2.1336E-03 2.2480E-04 1.7850E-04 - 5.0119E+01 2.1088E-03 1.4957E-03 1.5154E-04 1.1908E-04 - 5.6234E+01 1.4873E-03 1.0439E-03 1.0139E-04 8.0728E-05 - 6.3096E+01 1.0455E-03 7.2797E-04 6.7669E-05 5.5200E-05 - 7.0795E+01 7.3408E-04 5.1206E-04 4.5778E-05 3.7748E-05 - 7.9433E+01 5.1344E-04 3.5665E-04 3.1033E-05 2.5560E-05 - 8.9125E+01 3.6143E-04 2.4678E-04 2.1085E-05 1.7383E-05 - 1.0000E+02 2.5418E-04 1.7420E-04 1.4388E-05 1.1790E-05 - 1.1220E+02 1.7837E-04 1.2125E-04 9.7459E-06 7.9982E-06 - 1.2589E+02 1.2433E-04 8.4093E-05 6.5827E-06 5.4265E-06 - 1.4125E+02 8.6944E-05 5.8552E-05 4.4895E-06 3.7138E-06 - 1.5849E+02 6.0999E-05 4.0673E-05 3.0593E-06 2.4997E-06 - 1.7783E+02 4.2552E-05 2.8121E-05 2.0444E-06 1.6998E-06 - 1.9953E+02 2.9678E-05 1.9556E-05 1.3950E-06 1.1653E-06 - 2.2387E+02 2.0559E-05 1.3471E-05 9.3686E-07 7.5602E-07 - 2.5119E+02 1.4380E-05 9.2831E-06 6.1818E-07 5.0357E-07 - 2.8184E+02 9.9872E-06 6.4110E-06 4.2072E-07 3.5844E-07 - 3.1623E+02 6.9530E-06 4.4940E-06 2.9948E-07 2.4313E-07 - 3.5481E+02 4.8057E-06 3.0618E-06 2.0256E-07 1.6164E-07 - 3.9811E+02 3.3387E-06 2.1114E-06 1.3632E-07 1.1005E-07 - 4.4668E+02 2.3229E-06 1.4472E-06 9.1856E-08 7.3778E-08 - 5.0119E+02 1.6027E-06 9.9333E-07 6.2882E-08 4.9649E-08 - 5.6234E+02 1.1001E-06 6.8631E-07 4.2230E-08 3.4294E-08 - 6.3096E+02 7.5336E-07 4.6537E-07 2.8720E-08 2.3019E-08 - 7.0795E+02 5.1575E-07 3.1632E-07 1.9590E-08 1.5121E-08 - 7.9433E+02 3.5145E-07 2.1545E-07 1.3034E-08 1.0036E-08 - 8.9125E+02 2.4249E-07 1.4746E-07 8.6144E-09 6.8606E-09 - 1.0000E+03 1.6665E-07 1.0138E-07 5.9482E-09 4.4512E-09 - 1.1220E+03 1.1217E-07 6.7872E-08 3.9303E-09 2.9895E-09 - 1.2589E+03 7.6003E-08 4.5506E-08 2.6566E-09 1.9394E-09 - 1.4125E+03 5.1465E-08 3.0305E-08 1.7554E-09 1.2497E-09 - 1.5849E+03 3.4606E-08 2.0371E-08 1.0931E-09 8.4561E-10 - 1.7783E+03 2.3198E-08 1.3626E-08 7.0520E-10 5.6202E-10 - 1.9953E+03 1.5504E-08 9.1361E-09 5.0692E-10 3.6854E-10 - 2.2387E+03 1.0422E-08 6.1235E-09 3.3710E-10 2.4127E-10 - 2.5119E+03 7.0240E-09 4.1145E-09 2.3155E-10 1.5721E-10 - 2.8184E+03 4.7322E-09 2.7130E-09 1.5198E-10 1.1294E-10 - 3.1623E+03 3.2211E-09 1.8345E-09 9.5667E-11 7.1862E-11 - 3.5481E+03 2.0986E-09 1.1933E-09 6.3606E-11 4.6923E-11 - 3.9811E+03 1.3813E-09 7.9820E-10 4.2133E-11 3.0802E-11 - 4.4668E+03 9.0582E-10 5.2887E-10 2.8370E-11 1.9412E-11 - 5.0119E+03 5.9260E-10 3.4907E-10 2.0029E-11 1.2469E-11 - 5.6234E+03 3.9533E-10 2.2638E-10 1.2510E-11 9.0267E-12 - 6.3096E+03 2.6518E-10 1.5019E-10 7.8865E-12 6.1188E-12 - 7.0795E+03 1.7454E-10 9.7056E-11 5.2518E-12 3.8580E-12 - 7.9433E+03 1.1446E-10 6.3734E-11 3.1702E-12 2.5288E-12 - 8.9125E+03 7.5522E-11 4.2554E-11 1.9970E-12 1.6636E-12 - 1.0000E+04 4.9734E-11 2.8131E-11 1.2706E-12 1.0209E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2318E+04 1.2364E+04 6.1914E+03 5.4532E+03 - 1.1220E-01 1.0985E+04 1.1000E+04 5.5143E+03 4.8105E+03 - 1.2589E-01 9.7100E+03 9.6895E+03 4.8539E+03 4.2028E+03 - 1.4125E-01 8.4930E+03 8.4713E+03 4.2067E+03 3.6282E+03 - 1.5849E-01 7.3216E+03 7.3288E+03 3.6309E+03 3.1036E+03 - 1.7783E-01 6.2342E+03 6.2344E+03 3.1083E+03 2.6233E+03 - 1.9953E-01 5.2415E+03 5.2122E+03 2.6182E+03 2.1892E+03 - 2.2387E-01 4.3340E+03 4.3034E+03 2.1735E+03 1.7946E+03 - 2.5119E-01 3.5270E+03 3.5021E+03 1.7880E+03 1.4568E+03 - 2.8184E-01 2.8417E+03 2.8223E+03 1.4482E+03 1.1788E+03 - 3.1623E-01 2.2633E+03 2.2463E+03 1.1532E+03 9.3779E+02 - 3.5481E-01 1.7805E+03 1.7633E+03 9.1524E+02 7.3242E+02 - 3.9811E-01 1.3915E+03 1.3759E+03 7.1669E+02 5.6217E+02 - 4.4668E-01 1.0773E+03 1.0611E+03 5.5210E+02 4.3009E+02 - 5.0119E-01 8.2726E+02 8.0956E+02 4.2199E+02 3.2839E+02 - 5.6234E-01 6.2968E+02 6.1397E+02 3.1753E+02 2.4950E+02 - 6.3096E-01 4.7797E+02 4.6074E+02 2.3661E+02 1.8666E+02 - 7.0795E-01 3.6241E+02 3.4391E+02 1.7626E+02 1.3669E+02 - 7.9433E-01 2.7069E+02 2.5536E+02 1.3017E+02 1.0014E+02 - 8.9125E-01 2.0097E+02 1.8886E+02 9.4696E+01 7.3312E+01 - 1.0000E+00 1.4966E+02 1.4002E+02 6.8792E+01 5.3066E+01 - 1.1220E+00 1.1159E+02 1.0289E+02 4.9905E+01 3.8521E+01 - 1.2589E+00 8.2923E+01 7.5561E+01 3.5668E+01 2.7863E+01 - 1.4125E+00 6.1676E+01 5.5526E+01 2.5570E+01 1.9783E+01 - 1.5849E+00 4.5626E+01 4.0694E+01 1.8433E+01 1.4039E+01 - 1.7783E+00 3.3696E+01 2.9565E+01 1.3065E+01 9.9440E+00 - 1.9953E+00 2.4829E+01 2.1578E+01 9.1833E+00 7.0061E+00 - 2.2387E+00 1.8058E+01 1.5629E+01 6.4463E+00 4.9092E+00 - 2.5119E+00 1.3293E+01 1.1113E+01 4.4865E+00 3.4319E+00 - 2.8184E+00 9.6882E+00 7.9891E+00 3.1457E+00 2.3625E+00 - 3.1623E+00 6.9655E+00 5.7588E+00 2.1425E+00 1.6368E+00 - 3.5481E+00 5.0463E+00 4.1264E+00 1.4770E+00 1.1259E+00 - 3.9811E+00 3.6399E+00 2.9511E+00 1.0152E+00 7.6884E-01 - 4.4668E+00 2.6117E+00 2.1043E+00 6.8658E-01 5.1942E-01 - 5.0119E+00 1.8921E+00 1.5068E+00 4.6597E-01 3.4692E-01 - 5.6234E+00 1.3746E+00 1.0759E+00 3.1813E-01 2.3586E-01 - 6.3096E+00 9.8596E-01 7.6816E-01 2.1321E-01 1.6190E-01 - 7.0795E+00 6.9990E-01 5.4816E-01 1.4307E-01 1.0853E-01 - 7.9433E+00 5.0341E-01 3.8850E-01 9.5325E-02 7.2246E-02 - 8.9125E+00 3.6019E-01 2.7421E-01 6.2985E-02 4.8211E-02 - 1.0000E+01 2.5474E-01 1.9225E-01 4.3074E-02 3.2785E-02 - 1.1220E+01 1.8248E-01 1.3772E-01 2.8553E-02 2.1994E-02 - 1.2589E+01 1.3104E-01 9.8014E-02 1.8979E-02 1.4835E-02 - 1.4125E+01 9.3408E-02 6.9107E-02 1.2726E-02 9.9059E-03 - 1.5849E+01 6.6837E-02 4.8890E-02 8.6347E-03 6.4376E-03 - 1.7783E+01 4.7718E-02 3.5009E-02 5.7310E-03 4.3481E-03 - 1.9953E+01 3.3834E-02 2.4974E-02 3.6680E-03 2.9388E-03 - 2.2387E+01 2.3935E-02 1.7296E-02 2.5427E-03 1.9606E-03 - 2.5119E+01 1.7026E-02 1.2188E-02 1.7768E-03 1.3431E-03 - 2.8184E+01 1.2152E-02 8.7228E-03 1.1258E-03 8.9117E-04 - 3.1623E+01 8.5127E-03 6.1141E-03 7.4752E-04 5.8678E-04 - 3.5481E+01 6.0212E-03 4.3171E-03 5.0250E-04 3.9242E-04 - 3.9811E+01 4.2626E-03 3.0377E-03 3.3823E-04 2.6462E-04 - 4.4668E+01 3.0021E-03 2.1297E-03 2.2779E-04 1.7962E-04 - 5.0119E+01 2.1042E-03 1.4911E-03 1.4966E-04 1.2068E-04 - 5.6234E+01 1.4897E-03 1.0458E-03 1.0170E-04 8.1935E-05 - 6.3096E+01 1.0478E-03 7.3648E-04 7.0360E-05 5.5560E-05 - 7.0795E+01 7.3504E-04 5.1607E-04 4.5131E-05 3.7454E-05 - 7.9433E+01 5.1817E-04 3.5886E-04 2.9886E-05 2.5663E-05 - 8.9125E+01 3.6140E-04 2.5008E-04 2.0369E-05 1.7524E-05 - 1.0000E+02 2.5439E-04 1.7435E-04 1.4096E-05 1.1738E-05 - 1.1220E+02 1.7812E-04 1.2131E-04 9.7919E-06 7.9596E-06 - 1.2589E+02 1.2511E-04 8.4119E-05 6.7344E-06 5.3655E-06 - 1.4125E+02 8.7389E-05 5.8363E-05 4.5172E-06 3.6641E-06 - 1.5849E+02 6.1071E-05 4.0433E-05 3.0233E-06 2.5357E-06 - 1.7783E+02 4.2455E-05 2.8186E-05 2.0515E-06 1.7192E-06 - 1.9953E+02 2.9562E-05 1.9551E-05 1.3784E-06 1.1546E-06 - 2.2387E+02 2.0697E-05 1.3443E-05 9.5602E-07 7.9657E-07 - 2.5119E+02 1.4381E-05 9.2639E-06 6.4503E-07 5.4267E-07 - 2.8184E+02 9.9864E-06 6.4672E-06 4.4009E-07 3.6132E-07 - 3.1623E+02 6.9639E-06 4.4916E-06 3.0262E-07 2.3993E-07 - 3.5481E+02 4.8065E-06 3.0772E-06 2.0352E-07 1.6113E-07 - 3.9811E+02 3.3266E-06 2.1006E-06 1.3960E-07 1.0504E-07 - 4.4668E+02 2.2995E-06 1.4551E-06 9.4812E-08 7.1325E-08 - 5.0119E+02 1.5876E-06 1.0010E-06 6.4095E-08 5.0036E-08 - 5.6234E+02 1.1043E-06 6.8315E-07 4.2134E-08 3.3037E-08 - 6.3096E+02 7.5814E-07 4.6430E-07 2.8399E-08 2.1718E-08 - 7.0795E+02 5.1919E-07 3.1724E-07 1.8269E-08 1.4775E-08 - 7.9433E+02 3.5588E-07 2.1571E-07 1.2408E-08 9.7778E-09 - 8.9125E+02 2.4576E-07 1.4668E-07 8.8129E-09 6.4656E-09 - 1.0000E+03 1.6723E-07 1.0118E-07 5.7839E-09 4.5171E-09 - 1.1220E+03 1.1162E-07 6.7332E-08 3.8557E-09 2.8300E-09 - 1.2589E+03 7.5496E-08 4.5310E-08 2.5304E-09 1.8865E-09 - 1.4125E+03 5.1463E-08 3.0706E-08 1.6380E-09 1.3130E-09 - 1.5849E+03 3.4527E-08 2.0685E-08 1.0994E-09 8.7017E-10 - 1.7783E+03 2.3373E-08 1.3834E-08 7.0836E-10 5.3620E-10 - 1.9953E+03 1.5753E-08 9.1697E-09 4.8159E-10 3.8034E-10 - 2.2387E+03 1.0478E-08 6.0965E-09 3.1744E-10 2.5216E-10 - 2.5119E+03 7.0884E-09 4.0309E-09 2.1321E-10 1.5185E-10 - 2.8184E+03 4.7098E-09 2.6967E-09 1.4988E-10 1.0184E-10 - 3.1623E+03 3.2155E-09 1.8396E-09 9.6280E-11 6.8149E-11 - 3.5481E+03 2.0742E-09 1.1956E-09 6.2565E-11 4.3568E-11 - 3.9811E+03 1.3887E-09 7.9356E-10 4.0717E-11 2.8354E-11 - 4.4668E+03 9.1688E-10 5.2387E-10 2.4542E-11 2.0493E-11 - 5.0119E+03 6.0201E-10 3.4780E-10 1.5195E-11 1.4669E-11 - 5.6234E+03 3.9925E-10 2.2491E-10 1.1079E-11 9.9930E-12 - 6.3096E+03 2.6601E-10 1.4594E-10 7.3431E-12 5.4277E-12 - 7.0795E+03 1.7785E-10 9.7266E-11 4.8832E-12 3.7165E-12 - 7.9433E+03 1.1733E-10 6.5057E-11 3.1759E-12 2.6303E-12 - 8.9125E+03 7.6759E-11 4.2620E-11 2.1035E-12 1.7412E-12 - 1.0000E+04 4.9397E-11 2.7421E-11 1.5209E-12 1.0227E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2263E+04 1.2310E+04 6.1309E+03 5.4834E+03 - 1.1220E-01 1.0959E+04 1.0965E+04 5.4749E+03 4.8578E+03 - 1.2589E-01 9.7271E+03 9.6741E+03 4.8372E+03 4.2373E+03 - 1.4125E-01 8.5203E+03 8.4410E+03 4.2001E+03 3.6371E+03 - 1.5849E-01 7.3574E+03 7.2899E+03 3.6119E+03 3.1023E+03 - 1.7783E-01 6.2573E+03 6.1895E+03 3.0658E+03 2.6248E+03 - 1.9953E-01 5.2449E+03 5.1800E+03 2.5866E+03 2.1833E+03 - 2.2387E-01 4.3384E+03 4.2883E+03 2.1533E+03 1.7995E+03 - 2.5119E-01 3.5316E+03 3.4989E+03 1.7655E+03 1.4645E+03 - 2.8184E-01 2.8358E+03 2.8139E+03 1.4393E+03 1.1756E+03 - 3.1623E-01 2.2598E+03 2.2348E+03 1.1494E+03 9.3562E+02 - 3.5481E-01 1.7870E+03 1.7596E+03 9.0328E+02 7.2764E+02 - 3.9811E-01 1.3945E+03 1.3667E+03 7.0380E+02 5.6513E+02 - 4.4668E-01 1.0759E+03 1.0541E+03 5.4262E+02 4.3647E+02 - 5.0119E-01 8.2616E+02 8.0631E+02 4.1484E+02 3.3010E+02 - 5.6234E-01 6.2882E+02 6.1008E+02 3.1409E+02 2.4893E+02 - 6.3096E-01 4.7540E+02 4.5859E+02 2.3516E+02 1.8469E+02 - 7.0795E-01 3.5799E+02 3.4287E+02 1.7543E+02 1.3695E+02 - 7.9433E-01 2.6853E+02 2.5636E+02 1.2937E+02 1.0091E+02 - 8.9125E-01 2.0158E+02 1.9001E+02 9.3463E+01 7.2750E+01 - 1.0000E+00 1.5042E+02 1.3947E+02 6.8409E+01 5.2952E+01 - 1.1220E+00 1.1175E+02 1.0260E+02 4.9527E+01 3.8076E+01 - 1.2589E+00 8.2953E+01 7.5614E+01 3.5772E+01 2.7450E+01 - 1.4125E+00 6.1712E+01 5.5523E+01 2.5747E+01 1.9713E+01 - 1.5849E+00 4.5521E+01 4.0670E+01 1.8245E+01 1.4007E+01 - 1.7783E+00 3.3292E+01 2.9651E+01 1.2771E+01 1.0031E+01 - 1.9953E+00 2.4430E+01 2.1411E+01 9.0334E+00 6.9345E+00 - 2.2387E+00 1.7972E+01 1.5465E+01 6.3615E+00 4.8003E+00 - 2.5119E+00 1.3136E+01 1.1107E+01 4.4447E+00 3.4125E+00 - 2.8184E+00 9.6100E+00 8.0122E+00 3.0910E+00 2.4166E+00 - 3.1623E+00 6.9157E+00 5.7164E+00 2.1566E+00 1.6379E+00 - 3.5481E+00 5.0331E+00 4.0865E+00 1.4865E+00 1.1187E+00 - 3.9811E+00 3.6416E+00 2.9391E+00 1.0155E+00 7.6372E-01 - 4.4668E+00 2.6223E+00 2.1122E+00 6.9092E-01 5.2291E-01 - 5.0119E+00 1.8947E+00 1.4909E+00 4.6353E-01 3.5049E-01 - 5.6234E+00 1.3582E+00 1.0532E+00 3.1705E-01 2.3580E-01 - 6.3096E+00 9.7484E-01 7.5481E-01 2.1603E-01 1.6119E-01 - 7.0795E+00 6.9973E-01 5.3929E-01 1.4647E-01 1.0702E-01 - 7.9433E+00 4.9858E-01 3.8655E-01 9.8392E-02 7.3495E-02 - 8.9125E+00 3.5848E-01 2.7499E-01 6.5259E-02 5.1067E-02 - 1.0000E+01 2.5741E-01 1.9497E-01 4.3321E-02 3.2889E-02 - 1.1220E+01 1.8327E-01 1.3779E-01 2.9006E-02 2.2193E-02 - 1.2589E+01 1.3098E-01 9.6910E-02 1.9431E-02 1.4787E-02 - 1.4125E+01 9.3471E-02 6.8792E-02 1.2571E-02 9.7962E-03 - 1.5849E+01 6.6538E-02 4.9047E-02 8.3113E-03 6.4884E-03 - 1.7783E+01 4.7285E-02 3.4787E-02 5.6151E-03 4.3497E-03 - 1.9953E+01 3.3799E-02 2.4909E-02 3.7628E-03 2.9715E-03 - 2.2387E+01 2.4220E-02 1.7857E-02 2.4759E-03 2.0071E-03 - 2.5119E+01 1.7017E-02 1.2482E-02 1.6309E-03 1.3298E-03 - 2.8184E+01 1.2124E-02 8.7290E-03 1.1119E-03 8.8254E-04 - 3.1623E+01 8.4983E-03 6.0968E-03 7.3979E-04 5.8883E-04 - 3.5481E+01 5.9991E-03 4.2973E-03 4.9700E-04 3.9585E-04 - 3.9811E+01 4.2456E-03 3.0342E-03 3.3424E-04 2.6634E-04 - 4.4668E+01 3.0026E-03 2.1283E-03 2.2422E-04 1.7928E-04 - 5.0119E+01 2.1183E-03 1.4896E-03 1.4775E-04 1.2123E-04 - 5.6234E+01 1.4901E-03 1.0439E-03 9.9318E-05 8.2013E-05 - 6.3096E+01 1.0470E-03 7.3025E-04 6.8578E-05 5.5330E-05 - 7.0795E+01 7.3985E-04 5.0984E-04 4.5475E-05 3.7758E-05 - 7.9433E+01 5.2311E-04 3.5758E-04 3.0912E-05 2.5776E-05 - 8.9125E+01 3.6383E-04 2.4792E-04 2.1805E-05 1.7454E-05 - 1.0000E+02 2.5406E-04 1.7470E-04 1.4512E-05 1.1800E-05 - 1.1220E+02 1.7803E-04 1.2108E-04 9.8476E-06 7.9877E-06 - 1.2589E+02 1.2460E-04 8.4080E-05 6.7347E-06 5.4158E-06 - 1.4125E+02 8.7057E-05 5.8381E-05 4.5782E-06 3.6512E-06 - 1.5849E+02 6.1106E-05 4.0626E-05 3.0991E-06 2.4415E-06 - 1.7783E+02 4.2529E-05 2.8134E-05 2.0255E-06 1.6843E-06 - 1.9953E+02 2.9508E-05 1.9502E-05 1.3651E-06 1.1768E-06 - 2.2387E+02 2.0528E-05 1.3490E-05 9.3472E-07 7.9417E-07 - 2.5119E+02 1.4324E-05 9.3167E-06 6.3850E-07 5.3007E-07 - 2.8184E+02 1.0036E-05 6.5012E-06 4.2694E-07 3.4694E-07 - 3.1623E+02 6.9523E-06 4.4769E-06 2.9995E-07 2.4091E-07 - 3.5481E+02 4.8008E-06 3.0668E-06 2.0476E-07 1.6031E-07 - 3.9811E+02 3.3070E-06 2.1202E-06 1.3562E-07 1.0721E-07 - 4.4668E+02 2.3031E-06 1.4629E-06 9.3453E-08 7.1674E-08 - 5.0119E+02 1.5898E-06 1.0007E-06 6.3190E-08 4.7456E-08 - 5.6234E+02 1.0991E-06 6.8503E-07 4.2235E-08 3.2637E-08 - 6.3096E+02 7.5068E-07 4.6467E-07 2.9113E-08 2.1699E-08 - 7.0795E+02 5.1672E-07 3.1691E-07 1.9251E-08 1.4834E-08 - 7.9433E+02 3.5379E-07 2.1570E-07 1.2729E-08 9.6879E-09 - 8.9125E+02 2.4266E-07 1.4699E-07 8.2400E-09 6.7580E-09 - 1.0000E+03 1.6632E-07 1.0138E-07 5.6154E-09 4.5698E-09 - 1.1220E+03 1.1214E-07 6.8395E-08 3.8805E-09 2.9284E-09 - 1.2589E+03 7.5795E-08 4.5972E-08 2.6372E-09 1.9061E-09 - 1.4125E+03 5.1127E-08 3.0898E-08 1.7618E-09 1.3360E-09 - 1.5849E+03 3.4839E-08 2.0343E-08 1.1087E-09 8.5239E-10 - 1.7783E+03 2.3680E-08 1.3671E-08 6.9909E-10 5.3206E-10 - 1.9953E+03 1.5727E-08 9.3469E-09 5.0868E-10 3.7221E-10 - 2.2387E+03 1.0542E-08 6.2046E-09 3.4712E-10 2.5157E-10 - 2.5119E+03 7.1285E-09 4.1048E-09 2.2689E-10 1.6379E-10 - 2.8184E+03 4.7567E-09 2.7397E-09 1.4261E-10 1.0520E-10 - 3.1623E+03 3.2238E-09 1.8698E-09 9.7452E-11 7.2770E-11 - 3.5481E+03 2.0746E-09 1.2247E-09 6.4212E-11 4.7434E-11 - 3.9811E+03 1.3761E-09 8.0285E-10 4.1437E-11 3.0383E-11 - 4.4668E+03 9.1494E-10 5.2605E-10 2.8310E-11 2.0221E-11 - 5.0119E+03 6.0441E-10 3.4631E-10 1.9191E-11 1.3487E-11 - 5.6234E+03 4.0415E-10 2.3328E-10 1.1374E-11 8.0298E-12 - 6.3096E+03 2.6645E-10 1.5071E-10 7.8073E-12 5.3500E-12 - 7.0795E+03 1.7387E-10 9.7734E-11 5.4146E-12 3.3084E-12 - 7.9433E+03 1.1235E-10 6.4174E-11 3.3053E-12 2.0549E-12 - 8.9125E+03 7.4739E-11 4.1759E-11 2.2944E-12 1.5000E-12 - 1.0000E+04 5.0494E-11 2.7312E-11 1.3222E-12 1.0091E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2289E+04 1.2303E+04 6.1412E+03 5.4498E+03 - 1.1220E-01 1.0955E+04 1.0967E+04 5.4757E+03 4.8366E+03 - 1.2589E-01 9.6901E+03 9.6592E+03 4.8212E+03 4.2342E+03 - 1.4125E-01 8.4903E+03 8.4306E+03 4.1817E+03 3.6598E+03 - 1.5849E-01 7.3320E+03 7.2751E+03 3.5946E+03 3.1189E+03 - 1.7783E-01 6.2503E+03 6.1828E+03 3.0723E+03 2.6284E+03 - 1.9953E-01 5.2478E+03 5.1925E+03 2.5876E+03 2.1897E+03 - 2.2387E-01 4.3275E+03 4.2907E+03 2.1542E+03 1.7982E+03 - 2.5119E-01 3.5289E+03 3.4826E+03 1.7723E+03 1.4593E+03 - 2.8184E-01 2.8417E+03 2.8021E+03 1.4291E+03 1.1741E+03 - 3.1623E-01 2.2573E+03 2.2379E+03 1.1412E+03 9.3353E+02 - 3.5481E-01 1.7815E+03 1.7618E+03 9.0657E+02 7.3372E+02 - 3.9811E-01 1.3898E+03 1.3684E+03 7.0909E+02 5.6578E+02 - 4.4668E-01 1.0775E+03 1.0538E+03 5.4331E+02 4.3352E+02 - 5.0119E-01 8.2679E+02 8.0720E+02 4.1445E+02 3.2943E+02 - 5.6234E-01 6.2521E+02 6.1280E+02 3.1519E+02 2.4863E+02 - 6.3096E-01 4.7385E+02 4.6227E+02 2.3585E+02 1.8683E+02 - 7.0795E-01 3.5857E+02 3.4547E+02 1.7364E+02 1.3696E+02 - 7.9433E-01 2.6869E+02 2.5488E+02 1.2651E+02 9.9212E+01 - 8.9125E-01 2.0168E+02 1.8986E+02 9.2146E+01 7.3006E+01 - 1.0000E+00 1.4996E+02 1.4019E+02 6.8107E+01 5.3385E+01 - 1.1220E+00 1.1107E+02 1.0273E+02 4.9616E+01 3.8559E+01 - 1.2589E+00 8.2391E+01 7.5578E+01 3.5766E+01 2.7622E+01 - 1.4125E+00 6.1384E+01 5.5572E+01 2.5546E+01 1.9843E+01 - 1.5849E+00 4.5654E+01 4.0543E+01 1.8123E+01 1.4089E+01 - 1.7783E+00 3.3545E+01 2.9496E+01 1.2864E+01 1.0028E+01 - 1.9953E+00 2.4557E+01 2.1337E+01 9.1846E+00 7.0665E+00 - 2.2387E+00 1.8045E+01 1.5311E+01 6.4888E+00 4.9180E+00 - 2.5119E+00 1.3155E+01 1.1081E+01 4.4545E+00 3.4460E+00 - 2.8184E+00 9.5183E+00 8.0373E+00 3.0904E+00 2.3659E+00 - 3.1623E+00 6.9441E+00 5.7747E+00 2.1517E+00 1.6282E+00 - 3.5481E+00 5.0315E+00 4.1343E+00 1.4873E+00 1.1192E+00 - 3.9811E+00 3.6606E+00 2.9373E+00 1.0165E+00 7.6146E-01 - 4.4668E+00 2.6543E+00 2.1147E+00 6.8950E-01 5.1997E-01 - 5.0119E+00 1.9000E+00 1.5189E+00 4.7071E-01 3.5204E-01 - 5.6234E+00 1.3616E+00 1.0790E+00 3.1490E-01 2.3773E-01 - 6.3096E+00 9.8235E-01 7.6506E-01 2.1429E-01 1.6061E-01 - 7.0795E+00 7.0265E-01 5.4500E-01 1.4366E-01 1.0674E-01 - 7.9433E+00 5.0856E-01 3.8527E-01 9.4936E-02 7.2742E-02 - 8.9125E+00 3.6411E-01 2.7529E-01 6.6128E-02 4.8710E-02 - 1.0000E+01 2.5739E-01 1.9549E-01 4.3308E-02 3.2384E-02 - 1.1220E+01 1.8285E-01 1.3866E-01 2.9092E-02 2.1988E-02 - 1.2589E+01 1.3065E-01 9.7919E-02 1.9516E-02 1.4982E-02 - 1.4125E+01 9.3288E-02 6.9189E-02 1.3071E-02 9.8231E-03 - 1.5849E+01 6.6146E-02 4.8894E-02 8.6411E-03 6.3947E-03 - 1.7783E+01 4.7742E-02 3.4691E-02 5.7132E-03 4.2465E-03 - 1.9953E+01 3.4279E-02 2.4735E-02 3.9262E-03 2.9372E-03 - 2.2387E+01 2.4181E-02 1.7519E-02 2.5561E-03 1.9144E-03 - 2.5119E+01 1.6891E-02 1.2203E-02 1.6596E-03 1.3182E-03 - 2.8184E+01 1.1964E-02 8.6547E-03 1.1007E-03 8.9225E-04 - 3.1623E+01 8.4944E-03 6.1137E-03 7.5045E-04 5.9106E-04 - 3.5481E+01 6.0047E-03 4.3142E-03 5.0272E-04 4.0079E-04 - 3.9811E+01 4.2347E-03 3.0281E-03 3.3679E-04 2.6836E-04 - 4.4668E+01 2.9891E-03 2.1256E-03 2.2271E-04 1.8017E-04 - 5.0119E+01 2.1158E-03 1.4922E-03 1.4897E-04 1.2182E-04 - 5.6234E+01 1.4914E-03 1.0475E-03 1.0100E-04 8.1767E-05 - 6.3096E+01 1.0447E-03 7.3050E-04 6.8271E-05 5.5430E-05 - 7.0795E+01 7.3272E-04 5.0895E-04 4.5783E-05 3.7878E-05 - 7.9433E+01 5.1496E-04 3.5714E-04 3.1330E-05 2.5469E-05 - 8.9125E+01 3.5943E-04 2.4941E-04 2.1430E-05 1.7834E-05 - 1.0000E+02 2.5367E-04 1.7478E-04 1.4367E-05 1.1901E-05 - 1.1220E+02 1.7762E-04 1.2124E-04 9.6980E-06 7.9784E-06 - 1.2589E+02 1.2441E-04 8.4223E-05 6.5285E-06 5.3820E-06 - 1.4125E+02 8.7128E-05 5.8599E-05 4.3850E-06 3.6025E-06 - 1.5849E+02 6.0972E-05 4.0670E-05 3.0306E-06 2.4612E-06 - 1.7783E+02 4.2550E-05 2.8143E-05 2.1244E-06 1.7319E-06 - 1.9953E+02 2.9636E-05 1.9451E-05 1.4003E-06 1.1738E-06 - 2.2387E+02 2.0669E-05 1.3463E-05 9.2367E-07 7.6411E-07 - 2.5119E+02 1.4383E-05 9.3288E-06 6.4991E-07 5.0070E-07 - 2.8184E+02 9.9228E-06 6.5022E-06 4.4248E-07 3.4881E-07 - 3.1623E+02 6.9613E-06 4.4782E-06 2.9927E-07 2.4179E-07 - 3.5481E+02 4.8189E-06 3.0808E-06 2.0757E-07 1.5727E-07 - 3.9811E+02 3.3272E-06 2.1220E-06 1.4207E-07 1.0430E-07 - 4.4668E+02 2.2913E-06 1.4581E-06 9.4781E-08 7.1063E-08 - 5.0119E+02 1.5792E-06 9.9700E-07 6.2162E-08 4.7439E-08 - 5.6234E+02 1.1038E-06 6.8434E-07 4.3009E-08 3.2534E-08 - 6.3096E+02 7.5698E-07 4.6689E-07 2.9070E-08 2.2047E-08 - 7.0795E+02 5.1838E-07 3.1880E-07 1.9621E-08 1.5183E-08 - 7.9433E+02 3.5374E-07 2.1665E-07 1.2144E-08 1.0050E-08 - 8.9125E+02 2.4253E-07 1.4801E-07 8.0893E-09 6.4903E-09 - 1.0000E+03 1.6675E-07 1.0124E-07 5.6579E-09 4.2986E-09 - 1.1220E+03 1.1150E-07 6.8218E-08 3.9152E-09 2.8619E-09 - 1.2589E+03 7.5860E-08 4.5872E-08 2.6563E-09 1.9397E-09 - 1.4125E+03 5.1567E-08 3.0484E-08 1.7331E-09 1.2738E-09 - 1.5849E+03 3.4378E-08 2.0576E-08 1.1640E-09 8.6738E-10 - 1.7783E+03 2.3035E-08 1.3816E-08 7.7081E-10 5.9072E-10 - 1.9953E+03 1.5636E-08 9.1605E-09 4.8568E-10 3.7068E-10 - 2.2387E+03 1.0558E-08 6.1333E-09 3.3402E-10 2.5462E-10 - 2.5119E+03 7.1161E-09 4.1415E-09 2.2692E-10 1.6364E-10 - 2.8184E+03 4.7467E-09 2.7112E-09 1.4926E-10 9.8455E-11 - 3.1623E+03 3.2198E-09 1.8555E-09 9.2173E-11 6.8890E-11 - 3.5481E+03 2.0905E-09 1.1955E-09 5.9659E-11 4.3063E-11 - 3.9811E+03 1.3776E-09 7.8504E-10 4.1809E-11 2.7915E-11 - 4.4668E+03 9.0567E-10 5.1863E-10 2.7712E-11 1.8939E-11 - 5.0119E+03 6.0338E-10 3.3975E-10 1.7267E-11 1.3006E-11 - 5.6234E+03 4.0034E-10 2.2054E-10 1.0795E-11 8.8101E-12 - 6.3096E+03 2.6459E-10 1.4850E-10 7.2245E-12 5.5754E-12 - 7.0795E+03 1.7439E-10 9.6672E-11 4.6663E-12 3.6568E-12 - 7.9433E+03 1.1366E-10 6.2948E-11 3.0885E-12 2.2778E-12 - 8.9125E+03 7.3621E-11 4.2011E-11 1.8820E-12 1.4799E-12 - 1.0000E+04 4.8525E-11 2.7379E-11 1.3828E-12 9.4581E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2363E+04 1.2352E+04 6.1321E+03 5.4787E+03 - 1.1220E-01 1.0992E+04 1.0969E+04 5.4829E+03 4.8487E+03 - 1.2589E-01 9.7302E+03 9.6824E+03 4.8216E+03 4.2262E+03 - 1.4125E-01 8.4961E+03 8.4502E+03 4.1895E+03 3.6459E+03 - 1.5849E-01 7.3244E+03 7.2737E+03 3.6164E+03 3.1037E+03 - 1.7783E-01 6.2558E+03 6.1843E+03 3.0802E+03 2.6239E+03 - 1.9953E-01 5.2412E+03 5.1870E+03 2.5944E+03 2.1927E+03 - 2.2387E-01 4.3316E+03 4.2853E+03 2.1598E+03 1.8081E+03 - 2.5119E-01 3.5290E+03 3.4924E+03 1.7685E+03 1.4659E+03 - 2.8184E-01 2.8342E+03 2.8069E+03 1.4320E+03 1.1740E+03 - 3.1623E-01 2.2619E+03 2.2276E+03 1.1500E+03 9.3302E+02 - 3.5481E-01 1.7814E+03 1.7560E+03 9.0970E+02 7.3066E+02 - 3.9811E-01 1.3850E+03 1.3725E+03 7.0746E+02 5.6665E+02 - 4.4668E-01 1.0744E+03 1.0577E+03 5.4594E+02 4.3629E+02 - 5.0119E-01 8.2718E+02 8.0737E+02 4.1719E+02 3.3232E+02 - 5.6234E-01 6.2972E+02 6.0931E+02 3.1304E+02 2.4856E+02 - 6.3096E-01 4.7633E+02 4.5450E+02 2.3544E+02 1.8408E+02 - 7.0795E-01 3.5711E+02 3.3810E+02 1.7455E+02 1.3601E+02 - 7.9433E-01 2.6686E+02 2.5278E+02 1.2857E+02 1.0011E+02 - 8.9125E-01 1.9914E+02 1.8794E+02 9.4580E+01 7.3672E+01 - 1.0000E+00 1.4960E+02 1.4047E+02 6.8914E+01 5.3659E+01 - 1.1220E+00 1.1172E+02 1.0360E+02 4.9927E+01 3.8919E+01 - 1.2589E+00 8.3448E+01 7.5996E+01 3.5699E+01 2.7747E+01 - 1.4125E+00 6.1982E+01 5.5747E+01 2.5440E+01 1.9640E+01 - 1.5849E+00 4.5763E+01 4.0677E+01 1.8189E+01 1.4048E+01 - 1.7783E+00 3.3795E+01 2.9471E+01 1.2928E+01 1.0008E+01 - 1.9953E+00 2.4708E+01 2.1474E+01 9.2108E+00 7.0251E+00 - 2.2387E+00 1.7951E+01 1.5523E+01 6.5026E+00 4.9105E+00 - 2.5119E+00 1.3173E+01 1.1159E+01 4.4947E+00 3.4524E+00 - 2.8184E+00 9.5932E+00 8.0880E+00 3.0608E+00 2.3792E+00 - 3.1623E+00 6.9593E+00 5.7802E+00 2.1602E+00 1.6383E+00 - 3.5481E+00 5.0610E+00 4.1315E+00 1.4942E+00 1.1253E+00 - 3.9811E+00 3.6591E+00 2.9447E+00 1.0251E+00 7.6587E-01 - 4.4668E+00 2.6230E+00 2.1039E+00 6.9539E-01 5.2313E-01 - 5.0119E+00 1.8911E+00 1.5093E+00 4.6683E-01 3.5504E-01 - 5.6234E+00 1.3638E+00 1.0779E+00 3.1279E-01 2.4003E-01 - 6.3096E+00 9.8438E-01 7.6889E-01 2.1384E-01 1.6257E-01 - 7.0795E+00 7.0678E-01 5.4999E-01 1.4458E-01 1.0941E-01 - 7.9433E+00 5.0818E-01 3.9137E-01 9.7561E-02 7.3359E-02 - 8.9125E+00 3.6289E-01 2.7762E-01 6.5264E-02 4.8459E-02 - 1.0000E+01 2.5590E-01 1.9523E-01 4.2960E-02 3.2435E-02 - 1.1220E+01 1.8204E-01 1.3848E-01 2.8508E-02 2.1629E-02 - 1.2589E+01 1.3043E-01 9.7587E-02 1.9179E-02 1.4415E-02 - 1.4125E+01 9.2411E-02 6.9271E-02 1.2795E-02 9.5279E-03 - 1.5849E+01 6.5301E-02 4.9363E-02 8.5316E-03 6.4590E-03 - 1.7783E+01 4.6307E-02 3.4690E-02 5.6806E-03 4.4243E-03 - 1.9953E+01 3.3063E-02 2.4532E-02 3.8138E-03 2.9086E-03 - 2.2387E+01 2.3728E-02 1.7327E-02 2.4875E-03 1.9222E-03 - 2.5119E+01 1.6953E-02 1.1983E-02 1.6620E-03 1.3151E-03 - 2.8184E+01 1.2098E-02 8.4625E-03 1.1254E-03 8.7516E-04 - 3.1623E+01 8.4929E-03 6.1197E-03 7.3934E-04 5.8702E-04 - 3.5481E+01 6.0123E-03 4.3234E-03 5.0234E-04 3.9566E-04 - 3.9811E+01 4.2469E-03 3.0313E-03 3.3368E-04 2.6723E-04 - 4.4668E+01 3.0004E-03 2.1328E-03 2.2264E-04 1.8088E-04 - 5.0119E+01 2.1136E-03 1.5018E-03 1.5341E-04 1.2244E-04 - 5.6234E+01 1.4868E-03 1.0481E-03 1.0343E-04 8.3109E-05 - 6.3096E+01 1.0530E-03 7.3231E-04 6.8369E-05 5.5934E-05 - 7.0795E+01 7.4001E-04 5.1224E-04 4.5920E-05 3.7633E-05 - 7.9433E+01 5.1792E-04 3.5863E-04 3.1580E-05 2.5158E-05 - 8.9125E+01 3.6170E-04 2.4905E-04 2.1604E-05 1.6965E-05 - 1.0000E+02 2.5414E-04 1.7407E-04 1.4334E-05 1.1770E-05 - 1.1220E+02 1.7814E-04 1.2129E-04 9.7036E-06 8.0579E-06 - 1.2589E+02 1.2490E-04 8.3823E-05 6.6028E-06 5.4620E-06 - 1.4125E+02 8.7209E-05 5.8023E-05 4.4480E-06 3.6887E-06 - 1.5849E+02 6.0820E-05 4.0513E-05 3.0650E-06 2.5574E-06 - 1.7783E+02 4.2656E-05 2.8309E-05 2.1070E-06 1.7175E-06 - 1.9953E+02 2.9588E-05 1.9542E-05 1.4137E-06 1.1550E-06 - 2.2387E+02 2.0435E-05 1.3397E-05 9.6501E-07 7.8168E-07 - 2.5119E+02 1.4278E-05 9.2169E-06 6.4813E-07 5.1517E-07 - 2.8184E+02 1.0005E-05 6.4182E-06 4.4286E-07 3.5273E-07 - 3.1623E+02 6.9634E-06 4.4618E-06 3.0648E-07 2.4404E-07 - 3.5481E+02 4.7973E-06 3.0602E-06 2.0670E-07 1.6209E-07 - 3.9811E+02 3.3089E-06 2.1093E-06 1.3977E-07 1.0945E-07 - 4.4668E+02 2.2869E-06 1.4514E-06 9.4334E-08 7.4181E-08 - 5.0119E+02 1.5903E-06 9.9587E-07 6.1912E-08 5.0748E-08 - 5.6234E+02 1.1072E-06 6.8538E-07 4.0558E-08 3.3815E-08 - 6.3096E+02 7.5611E-07 4.6724E-07 2.7686E-08 2.1982E-08 - 7.0795E+02 5.1917E-07 3.1901E-07 1.9717E-08 1.4517E-08 - 7.9433E+02 3.5581E-07 2.1640E-07 1.3226E-08 1.0220E-08 - 8.9125E+02 2.4196E-07 1.4598E-07 8.4019E-09 7.0315E-09 - 1.0000E+03 1.6638E-07 1.0014E-07 5.9187E-09 4.3261E-09 - 1.1220E+03 1.1218E-07 6.7273E-08 3.9015E-09 2.8768E-09 - 1.2589E+03 7.6280E-08 4.5661E-08 2.6101E-09 1.9177E-09 - 1.4125E+03 5.1586E-08 3.0964E-08 1.7508E-09 1.2621E-09 - 1.5849E+03 3.4703E-08 2.0412E-08 1.1425E-09 8.0610E-10 - 1.7783E+03 2.3443E-08 1.3470E-08 7.4596E-10 5.4530E-10 - 1.9953E+03 1.5641E-08 9.2253E-09 5.0797E-10 3.5535E-10 - 2.2387E+03 1.0472E-08 6.1594E-09 3.2926E-10 2.4053E-10 - 2.5119E+03 7.1157E-09 4.0678E-09 2.1169E-10 1.5870E-10 - 2.8184E+03 4.7934E-09 2.6876E-09 1.3879E-10 1.0440E-10 - 3.1623E+03 3.2205E-09 1.8459E-09 9.6098E-11 6.7724E-11 - 3.5481E+03 2.1008E-09 1.1868E-09 6.1496E-11 4.6475E-11 - 3.9811E+03 1.3874E-09 7.8693E-10 4.0082E-11 3.2004E-11 - 4.4668E+03 9.0898E-10 5.2290E-10 2.7704E-11 2.0547E-11 - 5.0119E+03 6.0369E-10 3.4625E-10 1.8301E-11 1.3048E-11 - 5.6234E+03 3.9748E-10 2.2556E-10 1.2165E-11 8.0949E-12 - 6.3096E+03 2.6106E-10 1.4953E-10 7.6893E-12 5.3666E-12 - 7.0795E+03 1.7405E-10 9.7204E-11 4.7309E-12 3.5435E-12 - 7.9433E+03 1.1513E-10 6.3513E-11 3.3281E-12 2.2071E-12 - 8.9125E+03 7.6538E-11 4.1439E-11 2.1493E-12 1.5213E-12 - 1.0000E+04 5.0009E-11 2.7042E-11 1.2273E-12 1.0455E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2329E+04 1.2416E+04 6.1889E+03 5.4856E+03 - 1.1220E-01 1.0991E+04 1.1048E+04 5.5155E+03 4.8344E+03 - 1.2589E-01 9.7421E+03 9.7355E+03 4.8490E+03 4.2164E+03 - 1.4125E-01 8.5288E+03 8.4972E+03 4.2300E+03 3.6399E+03 - 1.5849E-01 7.3547E+03 7.3275E+03 3.6424E+03 3.1225E+03 - 1.7783E-01 6.2553E+03 6.2282E+03 3.1011E+03 2.6314E+03 - 1.9953E-01 5.2463E+03 5.2048E+03 2.6122E+03 2.1792E+03 - 2.2387E-01 4.3341E+03 4.3089E+03 2.1747E+03 1.7926E+03 - 2.5119E-01 3.5324E+03 3.5099E+03 1.7831E+03 1.4671E+03 - 2.8184E-01 2.8467E+03 2.8150E+03 1.4390E+03 1.1767E+03 - 3.1623E-01 2.2723E+03 2.2377E+03 1.1522E+03 9.2941E+02 - 3.5481E-01 1.7832E+03 1.7559E+03 9.1053E+02 7.2857E+02 - 3.9811E-01 1.3857E+03 1.3725E+03 7.0901E+02 5.6381E+02 - 4.4668E-01 1.0752E+03 1.0578E+03 5.4842E+02 4.3326E+02 - 5.0119E-01 8.2472E+02 8.0900E+02 4.1875E+02 3.2970E+02 - 5.6234E-01 6.2663E+02 6.1159E+02 3.1335E+02 2.4941E+02 - 6.3096E-01 4.7319E+02 4.5822E+02 2.3430E+02 1.8508E+02 - 7.0795E-01 3.5721E+02 3.4163E+02 1.7544E+02 1.3699E+02 - 7.9433E-01 2.6855E+02 2.5421E+02 1.2870E+02 1.0115E+02 - 8.9125E-01 2.0040E+02 1.8818E+02 9.3650E+01 7.3220E+01 - 1.0000E+00 1.4974E+02 1.3998E+02 6.8745E+01 5.3464E+01 - 1.1220E+00 1.1132E+02 1.0338E+02 4.9656E+01 3.8716E+01 - 1.2589E+00 8.2405E+01 7.5635E+01 3.5739E+01 2.7830E+01 - 1.4125E+00 6.1217E+01 5.5450E+01 2.5444E+01 1.9857E+01 - 1.5849E+00 4.5412E+01 4.0616E+01 1.8296E+01 1.4146E+01 - 1.7783E+00 3.3504E+01 2.9525E+01 1.3095E+01 1.0012E+01 - 1.9953E+00 2.4592E+01 2.1312E+01 9.2073E+00 7.0732E+00 - 2.2387E+00 1.8030E+01 1.5440E+01 6.3607E+00 4.9778E+00 - 2.5119E+00 1.3145E+01 1.1142E+01 4.4203E+00 3.4008E+00 - 2.8184E+00 9.5259E+00 7.9412E+00 3.0931E+00 2.3476E+00 - 3.1623E+00 6.9312E+00 5.7057E+00 2.1406E+00 1.6274E+00 - 3.5481E+00 5.0319E+00 4.1015E+00 1.4751E+00 1.1079E+00 - 3.9811E+00 3.6270E+00 2.9395E+00 1.0115E+00 7.6024E-01 - 4.4668E+00 2.6043E+00 2.0886E+00 6.9165E-01 5.2075E-01 - 5.0119E+00 1.8825E+00 1.4919E+00 4.6745E-01 3.5373E-01 - 5.6234E+00 1.3574E+00 1.0707E+00 3.1733E-01 2.4081E-01 - 6.3096E+00 9.6985E-01 7.6373E-01 2.1155E-01 1.5981E-01 - 7.0795E+00 6.9642E-01 5.4029E-01 1.4081E-01 1.0648E-01 - 7.9433E+00 5.0037E-01 3.8153E-01 9.6465E-02 7.0487E-02 - 8.9125E+00 3.5985E-01 2.7098E-01 6.5114E-02 4.8641E-02 - 1.0000E+01 2.5465E-01 1.9289E-01 4.3326E-02 3.2836E-02 - 1.1220E+01 1.8073E-01 1.3642E-01 2.9032E-02 2.1750E-02 - 1.2589E+01 1.2904E-01 9.6552E-02 1.9471E-02 1.4507E-02 - 1.4125E+01 9.2664E-02 6.8512E-02 1.2842E-02 9.7093E-03 - 1.5849E+01 6.5627E-02 4.8415E-02 8.2393E-03 6.4325E-03 - 1.7783E+01 4.6447E-02 3.3906E-02 5.4907E-03 4.3505E-03 - 1.9953E+01 3.3343E-02 2.4069E-02 3.8874E-03 2.9772E-03 - 2.2387E+01 2.3719E-02 1.7090E-02 2.5577E-03 1.9599E-03 - 2.5119E+01 1.6683E-02 1.2001E-02 1.6279E-03 1.2844E-03 - 2.8184E+01 1.1858E-02 8.4285E-03 1.0813E-03 8.4593E-04 - 3.1623E+01 8.5132E-03 6.1213E-03 7.5351E-04 5.8959E-04 - 3.5481E+01 6.0343E-03 4.3054E-03 5.0071E-04 3.9479E-04 - 3.9811E+01 4.2572E-03 3.0274E-03 3.3288E-04 2.6521E-04 - 4.4668E+01 2.9991E-03 2.1354E-03 2.2441E-04 1.8129E-04 - 5.0119E+01 2.1140E-03 1.5049E-03 1.5056E-04 1.2145E-04 - 5.6234E+01 1.4902E-03 1.0523E-03 1.0220E-04 8.2330E-05 - 6.3096E+01 1.0503E-03 7.3363E-04 6.9257E-05 5.6464E-05 - 7.0795E+01 7.4681E-04 5.1435E-04 4.6817E-05 3.8375E-05 - 7.9433E+01 5.2579E-04 3.6019E-04 3.1686E-05 2.5805E-05 - 8.9125E+01 3.6646E-04 2.5288E-04 2.1694E-05 1.7736E-05 - 1.0000E+02 2.5509E-04 1.7447E-04 1.4254E-05 1.1792E-05 - 1.1220E+02 1.7849E-04 1.2159E-04 9.5733E-06 8.0049E-06 - 1.2589E+02 1.2472E-04 8.4798E-05 6.5887E-06 5.5124E-06 - 1.4125E+02 8.7290E-05 5.8713E-05 4.5394E-06 3.7295E-06 - 1.5849E+02 6.1188E-05 4.0532E-05 3.0813E-06 2.5069E-06 - 1.7783E+02 4.2751E-05 2.8136E-05 1.9926E-06 1.6480E-06 - 1.9953E+02 2.9786E-05 1.9643E-05 1.3517E-06 1.1504E-06 - 2.2387E+02 2.0809E-05 1.3641E-05 9.5837E-07 8.1112E-07 - 2.5119E+02 1.4440E-05 9.3960E-06 6.5642E-07 5.4131E-07 - 2.8184E+02 1.0039E-05 6.5258E-06 4.2823E-07 3.4719E-07 - 3.1623E+02 6.9671E-06 4.4864E-06 2.9859E-07 2.3367E-07 - 3.5481E+02 4.8199E-06 3.0895E-06 2.0242E-07 1.5701E-07 - 3.9811E+02 3.3288E-06 2.1369E-06 1.3556E-07 1.0612E-07 - 4.4668E+02 2.2969E-06 1.4535E-06 9.2380E-08 7.0837E-08 - 5.0119E+02 1.5881E-06 9.9595E-07 6.2517E-08 4.8079E-08 - 5.6234E+02 1.1024E-06 6.8782E-07 4.1587E-08 3.3365E-08 - 6.3096E+02 7.5453E-07 4.6697E-07 2.8502E-08 2.2183E-08 - 7.0795E+02 5.1836E-07 3.1894E-07 1.9660E-08 1.5150E-08 - 7.9433E+02 3.5622E-07 2.1740E-07 1.3491E-08 1.0213E-08 - 8.9125E+02 2.4379E-07 1.4753E-07 8.6951E-09 6.9098E-09 - 1.0000E+03 1.6669E-07 1.0103E-07 5.6590E-09 4.5117E-09 - 1.1220E+03 1.1223E-07 6.8223E-08 3.8824E-09 2.9725E-09 - 1.2589E+03 7.6527E-08 4.5890E-08 2.5706E-09 1.9791E-09 - 1.4125E+03 5.1793E-08 3.0497E-08 1.6497E-09 1.2145E-09 - 1.5849E+03 3.4808E-08 2.0510E-08 1.0356E-09 7.8094E-10 - 1.7783E+03 2.3461E-08 1.3937E-08 6.9418E-10 5.1772E-10 - 1.9953E+03 1.5654E-08 9.3084E-09 4.9153E-10 3.5684E-10 - 2.2387E+03 1.0487E-08 6.1803E-09 3.4530E-10 2.4153E-10 - 2.5119E+03 6.9842E-09 4.1519E-09 2.1467E-10 1.6493E-10 - 2.8184E+03 4.7036E-09 2.7181E-09 1.2978E-10 1.1246E-10 - 3.1623E+03 3.1935E-09 1.8496E-09 9.8447E-11 7.1085E-11 - 3.5481E+03 2.0812E-09 1.2032E-09 6.5229E-11 4.3542E-11 - 3.9811E+03 1.3897E-09 8.0235E-10 4.3367E-11 2.7664E-11 - 4.4668E+03 9.3212E-10 5.2772E-10 2.7449E-11 1.9354E-11 - 5.0119E+03 6.2216E-10 3.3617E-10 1.7341E-11 1.3957E-11 - 5.6234E+03 4.0359E-10 2.2229E-10 1.2476E-11 8.7984E-12 - 6.3096E+03 2.6499E-10 1.4958E-10 7.3911E-12 5.4240E-12 - 7.0795E+03 1.7206E-10 9.7320E-11 4.9374E-12 3.4677E-12 - 7.9433E+03 1.1377E-10 6.3364E-11 3.2573E-12 2.2739E-12 - 8.9125E+03 7.5435E-11 4.2062E-11 2.1451E-12 1.4371E-12 - 1.0000E+04 4.9307E-11 2.7953E-11 1.4963E-12 9.5454E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2414E+04 1.2507E+04 6.2407E+03 5.4956E+03 - 1.1220E-01 1.1070E+04 1.1127E+04 5.5578E+03 4.8578E+03 - 1.2589E-01 9.7889E+03 9.8053E+03 4.9016E+03 4.2232E+03 - 1.4125E-01 8.5357E+03 8.5616E+03 4.2748E+03 3.6325E+03 - 1.5849E-01 7.3674E+03 7.3853E+03 3.6753E+03 3.0933E+03 - 1.7783E-01 6.2741E+03 6.2732E+03 3.1329E+03 2.6154E+03 - 1.9953E-01 5.2525E+03 5.2590E+03 2.6366E+03 2.1844E+03 - 2.2387E-01 4.3371E+03 4.3429E+03 2.1897E+03 1.7980E+03 - 2.5119E-01 3.5333E+03 3.5256E+03 1.7905E+03 1.4676E+03 - 2.8184E-01 2.8409E+03 2.8336E+03 1.4479E+03 1.1787E+03 - 3.1623E-01 2.2639E+03 2.2571E+03 1.1578E+03 9.3304E+02 - 3.5481E-01 1.7911E+03 1.7703E+03 9.1103E+02 7.3039E+02 - 3.9811E-01 1.3982E+03 1.3710E+03 7.0777E+02 5.6594E+02 - 4.4668E-01 1.0788E+03 1.0522E+03 5.4673E+02 4.3328E+02 - 5.0119E-01 8.2681E+02 8.0548E+02 4.2042E+02 3.2825E+02 - 5.6234E-01 6.2766E+02 6.1025E+02 3.1821E+02 2.4791E+02 - 6.3096E-01 4.7351E+02 4.5969E+02 2.3790E+02 1.8368E+02 - 7.0795E-01 3.5859E+02 3.4329E+02 1.7555E+02 1.3545E+02 - 7.9433E-01 2.6941E+02 2.5434E+02 1.2911E+02 1.0137E+02 - 8.9125E-01 2.0093E+02 1.8898E+02 9.5129E+01 7.4472E+01 - 1.0000E+00 1.5028E+02 1.4037E+02 6.8879E+01 5.3609E+01 - 1.1220E+00 1.1175E+02 1.0347E+02 5.0049E+01 3.8574E+01 - 1.2589E+00 8.2918E+01 7.5745E+01 3.5805E+01 2.7595E+01 - 1.4125E+00 6.1498E+01 5.5581E+01 2.5416E+01 1.9842E+01 - 1.5849E+00 4.5519E+01 4.0724E+01 1.8167E+01 1.4037E+01 - 1.7783E+00 3.3637E+01 2.9557E+01 1.2847E+01 9.9976E+00 - 1.9953E+00 2.4705E+01 2.1392E+01 9.0275E+00 7.0577E+00 - 2.2387E+00 1.8039E+01 1.5510E+01 6.4363E+00 4.8817E+00 - 2.5119E+00 1.3101E+01 1.1135E+01 4.5248E+00 3.4389E+00 - 2.8184E+00 9.4917E+00 7.9254E+00 3.1313E+00 2.3832E+00 - 3.1623E+00 6.9516E+00 5.7005E+00 2.1366E+00 1.6415E+00 - 3.5481E+00 5.0485E+00 4.0940E+00 1.4741E+00 1.1321E+00 - 3.9811E+00 3.6383E+00 2.9299E+00 1.0149E+00 7.7363E-01 - 4.4668E+00 2.6150E+00 2.0859E+00 6.9254E-01 5.2641E-01 - 5.0119E+00 1.8933E+00 1.4975E+00 4.6948E-01 3.5253E-01 - 5.6234E+00 1.3549E+00 1.0652E+00 3.1502E-01 2.3582E-01 - 6.3096E+00 9.6974E-01 7.5598E-01 2.1097E-01 1.6044E-01 - 7.0795E+00 6.9666E-01 5.3648E-01 1.4213E-01 1.0772E-01 - 7.9433E+00 4.9996E-01 3.8421E-01 9.7962E-02 7.3446E-02 - 8.9125E+00 3.5617E-01 2.7429E-01 6.4946E-02 4.8581E-02 - 1.0000E+01 2.5561E-01 1.9505E-01 4.3205E-02 3.2620E-02 - 1.1220E+01 1.8310E-01 1.3795E-01 2.8781E-02 2.1500E-02 - 1.2589E+01 1.3048E-01 9.6926E-02 1.9124E-02 1.4600E-02 - 1.4125E+01 9.2692E-02 6.9152E-02 1.3064E-02 9.9781E-03 - 1.5849E+01 6.6053E-02 4.8726E-02 8.5546E-03 6.4891E-03 - 1.7783E+01 4.7008E-02 3.4207E-02 5.6491E-03 4.3115E-03 - 1.9953E+01 3.3437E-02 2.4201E-02 3.8547E-03 2.9520E-03 - 2.2387E+01 2.3798E-02 1.7119E-02 2.5484E-03 1.9405E-03 - 2.5119E+01 1.6942E-02 1.2239E-02 1.7028E-03 1.2787E-03 - 2.8184E+01 1.1897E-02 8.5523E-03 1.1794E-03 8.6984E-04 - 3.1623E+01 8.4975E-03 6.1098E-03 7.4469E-04 5.9137E-04 - 3.5481E+01 6.0167E-03 4.3143E-03 5.0009E-04 3.9144E-04 - 3.9811E+01 4.2586E-03 3.0369E-03 3.3720E-04 2.6482E-04 - 4.4668E+01 3.0050E-03 2.1385E-03 2.2436E-04 1.7950E-04 - 5.0119E+01 2.1114E-03 1.5028E-03 1.5102E-04 1.1967E-04 - 5.6234E+01 1.4906E-03 1.0474E-03 1.0030E-04 8.3237E-05 - 6.3096E+01 1.0471E-03 7.3004E-04 6.7770E-05 5.6936E-05 - 7.0795E+01 7.3229E-04 5.1004E-04 4.6539E-05 3.6799E-05 - 7.9433E+01 5.1760E-04 3.5564E-04 3.0667E-05 2.4705E-05 - 8.9125E+01 3.6360E-04 2.4685E-04 2.0810E-05 1.6883E-05 - 1.0000E+02 2.5510E-04 1.7463E-04 1.4259E-05 1.1746E-05 - 1.1220E+02 1.7854E-04 1.2168E-04 9.7689E-06 7.9162E-06 - 1.2589E+02 1.2438E-04 8.4112E-05 6.7962E-06 5.3414E-06 - 1.4125E+02 8.6895E-05 5.8346E-05 4.5965E-06 3.6407E-06 - 1.5849E+02 6.0915E-05 4.0598E-05 3.1262E-06 2.5013E-06 - 1.7783E+02 4.2729E-05 2.8335E-05 2.1142E-06 1.7363E-06 - 1.9953E+02 2.9640E-05 1.9536E-05 1.4291E-06 1.1792E-06 - 2.2387E+02 2.0564E-05 1.3437E-05 9.6840E-07 7.8821E-07 - 2.5119E+02 1.4334E-05 9.3149E-06 6.5018E-07 5.0881E-07 - 2.8184E+02 9.9452E-06 6.4666E-06 4.4048E-07 3.3230E-07 - 3.1623E+02 6.9518E-06 4.4885E-06 3.0040E-07 2.3894E-07 - 3.5481E+02 4.8271E-06 3.0879E-06 2.0626E-07 1.5830E-07 - 3.9811E+02 3.3507E-06 2.1212E-06 1.4061E-07 1.0853E-07 - 4.4668E+02 2.3108E-06 1.4574E-06 9.3275E-08 7.6223E-08 - 5.0119E+02 1.5928E-06 9.9563E-07 6.3754E-08 5.0221E-08 - 5.6234E+02 1.1112E-06 6.8844E-07 4.3330E-08 3.2292E-08 - 6.3096E+02 7.6179E-07 4.6897E-07 2.9181E-08 2.1726E-08 - 7.0795E+02 5.1727E-07 3.2043E-07 1.9359E-08 1.4579E-08 - 7.9433E+02 3.5343E-07 2.1603E-07 1.2764E-08 9.6546E-09 - 8.9125E+02 2.4298E-07 1.4587E-07 8.5155E-09 6.6045E-09 - 1.0000E+03 1.6778E-07 1.0100E-07 5.8222E-09 4.4585E-09 - 1.1220E+03 1.1279E-07 6.7457E-08 3.7927E-09 2.9178E-09 - 1.2589E+03 7.6063E-08 4.5227E-08 2.5523E-09 1.8391E-09 - 1.4125E+03 5.1317E-08 3.0609E-08 1.6985E-09 1.1920E-09 - 1.5849E+03 3.4972E-08 2.0419E-08 1.1367E-09 7.9930E-10 - 1.7783E+03 2.3750E-08 1.3673E-08 7.5651E-10 5.4246E-10 - 1.9953E+03 1.5814E-08 9.1762E-09 4.8726E-10 3.8583E-10 - 2.2387E+03 1.0507E-08 6.2608E-09 3.4796E-10 2.5880E-10 - 2.5119E+03 6.9807E-09 4.2339E-09 2.2842E-10 1.6654E-10 - 2.8184E+03 4.7002E-09 2.7453E-09 1.5301E-10 9.8141E-11 - 3.1623E+03 3.2463E-09 1.8666E-09 9.8374E-11 7.3286E-11 - 3.5481E+03 2.0804E-09 1.2193E-09 6.5565E-11 4.6144E-11 - 3.9811E+03 1.3687E-09 7.9290E-10 4.1530E-11 3.0504E-11 - 4.4668E+03 9.1030E-10 5.2465E-10 2.7118E-11 1.9454E-11 - 5.0119E+03 6.0491E-10 3.4878E-10 1.9735E-11 1.2440E-11 - 5.6234E+03 4.0685E-10 2.2786E-10 1.2606E-11 8.5382E-12 - 6.3096E+03 2.6579E-10 1.5126E-10 7.3944E-12 5.5196E-12 - 7.0795E+03 1.7446E-10 1.0004E-10 4.9120E-12 3.8305E-12 - 7.9433E+03 1.1551E-10 6.4755E-11 3.0620E-12 2.2853E-12 - 8.9125E+03 7.4692E-11 4.1912E-11 1.9910E-12 1.3713E-12 - 1.0000E+04 4.8911E-11 2.7627E-11 1.2102E-12 9.8709E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2415E+04 1.2612E+04 6.3046E+03 5.4754E+03 - 1.1220E-01 1.1066E+04 1.1220E+04 5.6311E+03 4.8381E+03 - 1.2589E-01 9.7644E+03 9.8816E+03 4.9532E+03 4.2340E+03 - 1.4125E-01 8.5371E+03 8.6292E+03 4.3141E+03 3.6530E+03 - 1.5849E-01 7.3834E+03 7.4407E+03 3.7114E+03 3.1139E+03 - 1.7783E-01 6.2922E+03 6.3082E+03 3.1583E+03 2.6266E+03 - 1.9953E-01 5.2604E+03 5.2665E+03 2.6623E+03 2.1861E+03 - 2.2387E-01 4.3325E+03 4.3421E+03 2.2074E+03 1.7942E+03 - 2.5119E-01 3.5457E+03 3.5379E+03 1.8058E+03 1.4584E+03 - 2.8184E-01 2.8606E+03 2.8439E+03 1.4594E+03 1.1717E+03 - 3.1623E-01 2.2706E+03 2.2562E+03 1.1669E+03 9.3428E+02 - 3.5481E-01 1.7838E+03 1.7689E+03 9.1982E+02 7.3178E+02 - 3.9811E-01 1.3908E+03 1.3792E+03 7.1408E+02 5.6339E+02 - 4.4668E-01 1.0787E+03 1.0639E+03 5.4845E+02 4.3195E+02 - 5.0119E-01 8.2363E+02 8.1190E+02 4.1717E+02 3.2845E+02 - 5.6234E-01 6.2283E+02 6.1705E+02 3.1702E+02 2.4685E+02 - 6.3096E-01 4.7346E+02 4.6267E+02 2.3717E+02 1.8475E+02 - 7.0795E-01 3.5829E+02 3.4343E+02 1.7574E+02 1.3632E+02 - 7.9433E-01 2.6840E+02 2.5527E+02 1.2982E+02 1.0074E+02 - 8.9125E-01 2.0059E+02 1.8931E+02 9.5093E+01 7.3440E+01 - 1.0000E+00 1.5005E+02 1.4003E+02 6.9028E+01 5.3336E+01 - 1.1220E+00 1.1153E+02 1.0349E+02 4.9675E+01 3.8585E+01 - 1.2589E+00 8.2732E+01 7.6050E+01 3.5697E+01 2.7681E+01 - 1.4125E+00 6.1613E+01 5.5497E+01 2.5708E+01 1.9838E+01 - 1.5849E+00 4.5807E+01 4.0294E+01 1.8412E+01 1.4061E+01 - 1.7783E+00 3.3553E+01 2.9483E+01 1.2916E+01 9.9483E+00 - 1.9953E+00 2.4686E+01 2.1384E+01 9.0874E+00 7.0124E+00 - 2.2387E+00 1.8202E+01 1.5418E+01 6.4271E+00 4.8669E+00 - 2.5119E+00 1.3222E+01 1.1123E+01 4.4553E+00 3.3770E+00 - 2.8184E+00 9.6350E+00 8.0059E+00 3.1008E+00 2.3613E+00 - 3.1623E+00 6.9690E+00 5.7430E+00 2.1571E+00 1.6451E+00 - 3.5481E+00 5.0230E+00 4.1152E+00 1.4810E+00 1.1215E+00 - 3.9811E+00 3.6171E+00 2.9551E+00 1.0073E+00 7.6613E-01 - 4.4668E+00 2.6195E+00 2.1009E+00 6.8181E-01 5.2163E-01 - 5.0119E+00 1.8936E+00 1.4995E+00 4.6372E-01 3.5845E-01 - 5.6234E+00 1.3714E+00 1.0702E+00 3.1886E-01 2.4407E-01 - 6.3096E+00 9.8361E-01 7.5851E-01 2.1806E-01 1.6407E-01 - 7.0795E+00 7.0046E-01 5.3862E-01 1.4702E-01 1.1176E-01 - 7.9433E+00 5.0237E-01 3.8377E-01 9.6007E-02 7.4061E-02 - 8.9125E+00 3.5613E-01 2.7299E-01 6.4822E-02 5.0511E-02 - 1.0000E+01 2.5676E-01 1.9421E-01 4.3483E-02 3.2766E-02 - 1.1220E+01 1.8320E-01 1.3672E-01 2.9008E-02 2.1723E-02 - 1.2589E+01 1.3035E-01 9.6010E-02 1.9295E-02 1.4517E-02 - 1.4125E+01 9.2737E-02 6.8478E-02 1.2855E-02 9.9573E-03 - 1.5849E+01 6.6279E-02 4.9046E-02 8.4463E-03 6.6185E-03 - 1.7783E+01 4.7015E-02 3.5081E-02 5.6647E-03 4.4007E-03 - 1.9953E+01 3.3115E-02 2.4795E-02 3.7347E-03 2.9596E-03 - 2.2387E+01 2.3713E-02 1.7409E-02 2.4659E-03 1.9455E-03 - 2.5119E+01 1.6998E-02 1.2325E-02 1.6364E-03 1.3367E-03 - 2.8184E+01 1.2067E-02 8.6973E-03 1.0754E-03 9.0314E-04 - 3.1623E+01 8.4717E-03 6.1084E-03 7.4525E-04 5.8781E-04 - 3.5481E+01 6.0142E-03 4.2926E-03 4.9939E-04 3.9623E-04 - 3.9811E+01 4.2503E-03 3.0301E-03 3.3653E-04 2.6520E-04 - 4.4668E+01 2.9832E-03 2.1392E-03 2.2557E-04 1.8024E-04 - 5.0119E+01 2.1090E-03 1.4968E-03 1.5154E-04 1.2090E-04 - 5.6234E+01 1.4875E-03 1.0447E-03 1.0342E-04 8.1727E-05 - 6.3096E+01 1.0426E-03 7.3569E-04 6.8229E-05 5.5862E-05 - 7.0795E+01 7.3799E-04 5.1498E-04 4.4999E-05 3.7364E-05 - 7.9433E+01 5.1694E-04 3.5712E-04 3.0600E-05 2.5068E-05 - 8.9125E+01 3.5960E-04 2.4823E-04 2.1406E-05 1.6783E-05 - 1.0000E+02 2.5526E-04 1.7398E-04 1.4236E-05 1.1741E-05 - 1.1220E+02 1.7831E-04 1.2114E-04 9.5474E-06 7.9566E-06 - 1.2589E+02 1.2488E-04 8.4224E-05 6.5333E-06 5.3771E-06 - 1.4125E+02 8.6979E-05 5.8551E-05 4.5332E-06 3.6993E-06 - 1.5849E+02 6.0946E-05 4.0602E-05 3.0764E-06 2.4997E-06 - 1.7783E+02 4.2674E-05 2.7997E-05 2.0630E-06 1.6803E-06 - 1.9953E+02 2.9656E-05 1.9423E-05 1.4230E-06 1.1467E-06 - 2.2387E+02 2.0589E-05 1.3432E-05 9.7276E-07 7.6032E-07 - 2.5119E+02 1.4375E-05 9.3008E-06 6.6156E-07 5.0104E-07 - 2.8184E+02 1.0121E-05 6.4631E-06 4.4302E-07 3.5198E-07 - 3.1623E+02 6.9580E-06 4.4727E-06 3.0430E-07 2.3962E-07 - 3.5481E+02 4.8159E-06 3.0766E-06 2.0409E-07 1.6074E-07 - 3.9811E+02 3.3319E-06 2.1226E-06 1.3862E-07 1.0867E-07 - 4.4668E+02 2.2970E-06 1.4578E-06 9.4376E-08 7.3212E-08 - 5.0119E+02 1.5830E-06 1.0008E-06 6.3107E-08 4.6870E-08 - 5.6234E+02 1.1045E-06 6.8733E-07 4.2838E-08 3.2427E-08 - 6.3096E+02 7.5836E-07 4.6598E-07 2.8653E-08 2.1671E-08 - 7.0795E+02 5.1907E-07 3.1811E-07 1.9322E-08 1.4598E-08 - 7.9433E+02 3.5407E-07 2.1593E-07 1.3121E-08 9.9507E-09 - 8.9125E+02 2.4208E-07 1.4576E-07 8.7301E-09 6.4999E-09 - 1.0000E+03 1.6579E-07 1.0030E-07 5.7665E-09 4.1178E-09 - 1.1220E+03 1.1116E-07 6.7403E-08 3.8747E-09 2.8267E-09 - 1.2589E+03 7.5765E-08 4.5042E-08 2.4443E-09 1.9495E-09 - 1.4125E+03 5.1427E-08 3.0306E-08 1.5881E-09 1.3101E-09 - 1.5849E+03 3.4726E-08 2.0524E-08 1.0797E-09 8.5455E-10 - 1.7783E+03 2.3488E-08 1.3637E-08 7.4913E-10 5.3690E-10 - 1.9953E+03 1.5713E-08 9.1583E-09 5.0899E-10 3.8000E-10 - 2.2387E+03 1.0463E-08 6.1947E-09 3.3679E-10 2.5068E-10 - 2.5119E+03 7.0725E-09 4.1713E-09 2.2075E-10 1.7439E-10 - 2.8184E+03 4.6849E-09 2.7631E-09 1.3167E-10 1.1895E-10 - 3.1623E+03 3.2014E-09 1.8596E-09 9.1896E-11 7.4892E-11 - 3.5481E+03 2.0968E-09 1.1983E-09 6.3879E-11 4.6124E-11 - 3.9811E+03 1.3900E-09 7.8908E-10 4.0936E-11 2.9137E-11 - 4.4668E+03 9.1232E-10 5.2443E-10 2.7305E-11 2.0394E-11 - 5.0119E+03 6.0435E-10 3.4209E-10 1.7794E-11 1.4451E-11 - 5.6234E+03 4.0694E-10 2.2330E-10 1.1441E-11 1.0164E-11 - 6.3096E+03 2.6950E-10 1.4812E-10 7.4298E-12 5.6826E-12 - 7.0795E+03 1.7473E-10 9.6786E-11 4.8589E-12 3.6096E-12 - 7.9433E+03 1.1443E-10 6.3708E-11 3.1781E-12 2.2783E-12 - 8.9125E+03 7.4806E-11 4.2008E-11 2.2194E-12 1.6945E-12 - 1.0000E+04 4.9028E-11 2.7482E-11 1.5913E-12 1.1626E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2453E+04 1.2636E+04 6.3699E+03 5.4406E+03 - 1.1220E-01 1.1089E+04 1.1244E+04 5.6678E+03 4.8103E+03 - 1.2589E-01 9.7936E+03 9.9180E+03 4.9789E+03 4.2083E+03 - 1.4125E-01 8.5776E+03 8.6732E+03 4.3472E+03 3.6442E+03 - 1.5849E-01 7.4093E+03 7.4814E+03 3.7320E+03 3.1113E+03 - 1.7783E-01 6.3119E+03 6.3560E+03 3.1688E+03 2.6116E+03 - 1.9953E-01 5.2816E+03 5.3065E+03 2.6738E+03 2.1720E+03 - 2.2387E-01 4.3466E+03 4.3668E+03 2.2196E+03 1.7958E+03 - 2.5119E-01 3.5412E+03 3.5416E+03 1.8169E+03 1.4663E+03 - 2.8184E-01 2.8484E+03 2.8461E+03 1.4670E+03 1.1746E+03 - 3.1623E-01 2.2630E+03 2.2662E+03 1.1706E+03 9.2752E+02 - 3.5481E-01 1.7817E+03 1.7783E+03 9.2351E+02 7.2479E+02 - 3.9811E-01 1.3921E+03 1.3864E+03 7.2086E+02 5.6347E+02 - 4.4668E-01 1.0802E+03 1.0676E+03 5.5340E+02 4.3264E+02 - 5.0119E-01 8.3244E+02 8.1459E+02 4.2057E+02 3.2852E+02 - 5.6234E-01 6.3117E+02 6.1579E+02 3.1666E+02 2.4987E+02 - 6.3096E-01 4.7428E+02 4.6222E+02 2.3642E+02 1.8625E+02 - 7.0795E-01 3.5677E+02 3.4472E+02 1.7533E+02 1.3619E+02 - 7.9433E-01 2.6911E+02 2.5665E+02 1.2998E+02 1.0062E+02 - 8.9125E-01 2.0250E+02 1.9221E+02 9.5668E+01 7.4454E+01 - 1.0000E+00 1.5004E+02 1.4091E+02 6.9369E+01 5.3745E+01 - 1.1220E+00 1.1121E+02 1.0317E+02 5.0048E+01 3.8265E+01 - 1.2589E+00 8.3037E+01 7.5554E+01 3.5720E+01 2.7512E+01 - 1.4125E+00 6.2072E+01 5.5573E+01 2.5399E+01 1.9858E+01 - 1.5849E+00 4.5854E+01 4.0616E+01 1.8307E+01 1.4193E+01 - 1.7783E+00 3.3694E+01 2.9576E+01 1.3039E+01 9.9525E+00 - 1.9953E+00 2.4672E+01 2.1430E+01 9.1602E+00 7.1028E+00 - 2.2387E+00 1.8046E+01 1.5366E+01 6.4616E+00 5.0403E+00 - 2.5119E+00 1.3137E+01 1.1081E+01 4.5140E+00 3.4470E+00 - 2.8184E+00 9.5839E+00 7.9404E+00 3.1403E+00 2.3513E+00 - 3.1623E+00 6.9530E+00 5.7182E+00 2.1424E+00 1.6389E+00 - 3.5481E+00 5.0228E+00 4.0914E+00 1.4706E+00 1.1257E+00 - 3.9811E+00 3.6377E+00 2.9178E+00 1.0153E+00 7.7309E-01 - 4.4668E+00 2.6246E+00 2.0874E+00 6.9297E-01 5.2128E-01 - 5.0119E+00 1.8962E+00 1.4989E+00 4.6672E-01 3.5068E-01 - 5.6234E+00 1.3586E+00 1.0663E+00 3.1561E-01 2.4086E-01 - 6.3096E+00 9.6968E-01 7.4792E-01 2.1182E-01 1.6215E-01 - 7.0795E+00 7.0023E-01 5.3396E-01 1.4047E-01 1.0791E-01 - 7.9433E+00 4.9822E-01 3.8267E-01 9.3177E-02 7.3418E-02 - 8.9125E+00 3.5314E-01 2.7250E-01 6.3507E-02 4.9107E-02 - 1.0000E+01 2.5645E-01 1.9304E-01 4.3093E-02 3.2426E-02 - 1.1220E+01 1.8235E-01 1.3714E-01 2.8719E-02 2.1902E-02 - 1.2589E+01 1.3005E-01 9.7353E-02 1.9206E-02 1.4416E-02 - 1.4125E+01 9.2579E-02 6.8422E-02 1.2787E-02 9.6827E-03 - 1.5849E+01 6.6190E-02 4.8426E-02 8.5728E-03 6.4881E-03 - 1.7783E+01 4.6872E-02 3.4331E-02 5.5867E-03 4.3696E-03 - 1.9953E+01 3.2948E-02 2.4321E-02 3.6771E-03 2.9165E-03 - 2.2387E+01 2.3547E-02 1.7399E-02 2.4103E-03 2.0137E-03 - 2.5119E+01 1.6876E-02 1.2020E-02 1.5736E-03 1.3661E-03 - 2.8184E+01 1.1961E-02 8.3552E-03 1.0894E-03 8.6308E-04 - 3.1623E+01 8.4843E-03 6.1164E-03 7.4728E-04 5.9158E-04 - 3.5481E+01 5.9967E-03 4.3005E-03 4.9745E-04 3.9929E-04 - 3.9811E+01 4.2349E-03 3.0233E-03 3.3218E-04 2.6970E-04 - 4.4668E+01 2.9910E-03 2.1288E-03 2.2583E-04 1.8198E-04 - 5.0119E+01 2.1181E-03 1.4946E-03 1.5336E-04 1.2217E-04 - 5.6234E+01 1.4928E-03 1.0510E-03 1.0160E-04 8.1669E-05 - 6.3096E+01 1.0445E-03 7.3482E-04 6.7214E-05 5.4962E-05 - 7.0795E+01 7.3337E-04 5.1179E-04 4.4748E-05 3.6862E-05 - 7.9433E+01 5.1889E-04 3.5961E-04 3.1084E-05 2.5796E-05 - 8.9125E+01 3.6545E-04 2.4890E-04 2.1186E-05 1.8102E-05 - 1.0000E+02 2.5456E-04 1.7476E-04 1.4329E-05 1.1839E-05 - 1.1220E+02 1.7834E-04 1.2159E-04 9.8175E-06 7.9423E-06 - 1.2589E+02 1.2479E-04 8.4306E-05 6.6818E-06 5.3816E-06 - 1.4125E+02 8.6957E-05 5.8674E-05 4.5131E-06 3.5740E-06 - 1.5849E+02 6.0779E-05 4.0622E-05 3.0511E-06 2.4444E-06 - 1.7783E+02 4.2497E-05 2.8195E-05 2.0711E-06 1.7002E-06 - 1.9953E+02 2.9591E-05 1.9671E-05 1.3939E-06 1.1846E-06 - 2.2387E+02 2.0445E-05 1.3519E-05 9.4731E-07 8.3347E-07 - 2.5119E+02 1.4246E-05 9.3493E-06 6.4136E-07 5.4757E-07 - 2.8184E+02 1.0023E-05 6.5046E-06 4.3398E-07 3.5542E-07 - 3.1623E+02 6.9951E-06 4.4621E-06 3.0449E-07 2.3488E-07 - 3.5481E+02 4.8064E-06 3.0635E-06 2.0609E-07 1.5987E-07 - 3.9811E+02 3.3263E-06 2.1014E-06 1.3776E-07 1.0923E-07 - 4.4668E+02 2.3085E-06 1.4513E-06 9.2933E-08 7.4572E-08 - 5.0119E+02 1.5935E-06 9.9696E-07 6.2600E-08 5.0362E-08 - 5.6234E+02 1.1006E-06 6.8794E-07 4.2667E-08 3.3396E-08 - 6.3096E+02 7.5620E-07 4.6650E-07 2.7811E-08 2.2275E-08 - 7.0795E+02 5.2021E-07 3.1810E-07 1.8679E-08 1.4874E-08 - 7.9433E+02 3.5467E-07 2.1654E-07 1.3035E-08 9.7484E-09 - 8.9125E+02 2.4079E-07 1.4726E-07 8.4615E-09 6.4769E-09 - 1.0000E+03 1.6656E-07 1.0027E-07 5.7280E-09 4.3664E-09 - 1.1220E+03 1.1251E-07 6.7108E-08 4.0484E-09 2.9259E-09 - 1.2589E+03 7.6914E-08 4.4838E-08 2.5365E-09 1.8296E-09 - 1.4125E+03 5.1631E-08 3.0517E-08 1.6875E-09 1.2037E-09 - 1.5849E+03 3.4526E-08 2.0561E-08 1.2053E-09 8.2419E-10 - 1.7783E+03 2.3345E-08 1.3759E-08 7.5774E-10 5.8464E-10 - 1.9953E+03 1.5886E-08 9.1526E-09 5.0702E-10 3.7757E-10 - 2.2387E+03 1.0701E-08 6.0473E-09 3.3379E-10 2.5126E-10 - 2.5119E+03 7.0360E-09 4.0310E-09 2.2035E-10 1.6660E-10 - 2.8184E+03 4.6490E-09 2.6874E-09 1.3388E-10 1.1304E-10 - 3.1623E+03 3.2097E-09 1.8725E-09 9.5233E-11 7.1215E-11 - 3.5481E+03 2.0922E-09 1.2075E-09 6.3799E-11 4.7140E-11 - 3.9811E+03 1.3831E-09 7.9276E-10 4.0214E-11 3.0149E-11 - 4.4668E+03 9.1177E-10 5.1734E-10 2.6810E-11 1.8862E-11 - 5.0119E+03 6.0910E-10 3.3901E-10 1.8635E-11 1.2069E-11 - 5.6234E+03 4.1094E-10 2.2994E-10 1.1949E-11 8.0032E-12 - 6.3096E+03 2.6675E-10 1.4940E-10 7.6108E-12 5.4002E-12 - 7.0795E+03 1.7379E-10 9.7082E-11 5.2593E-12 3.6016E-12 - 7.9433E+03 1.1542E-10 6.4436E-11 3.2097E-12 2.5750E-12 - 8.9125E+03 7.7385E-11 4.2316E-11 2.0987E-12 1.6301E-12 - 1.0000E+04 5.0083E-11 2.6929E-11 1.5006E-12 9.1355E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2432E+04 1.2628E+04 6.4010E+03 5.4226E+03 - 1.1220E-01 1.1054E+04 1.1228E+04 5.6897E+03 4.8089E+03 - 1.2589E-01 9.7759E+03 9.9207E+03 4.9780E+03 4.2195E+03 - 1.4125E-01 8.5664E+03 8.6708E+03 4.3325E+03 3.6379E+03 - 1.5849E-01 7.4023E+03 7.4635E+03 3.7454E+03 3.0959E+03 - 1.7783E-01 6.2872E+03 6.3481E+03 3.1884E+03 2.6118E+03 - 1.9953E-01 5.2729E+03 5.3155E+03 2.6713E+03 2.1828E+03 - 2.2387E-01 4.3612E+03 4.3714E+03 2.2181E+03 1.8014E+03 - 2.5119E-01 3.5479E+03 3.5544E+03 1.8218E+03 1.4665E+03 - 2.8184E-01 2.8648E+03 2.8627E+03 1.4752E+03 1.1737E+03 - 3.1623E-01 2.2826E+03 2.2808E+03 1.1773E+03 9.3280E+02 - 3.5481E-01 1.7941E+03 1.7882E+03 9.2690E+02 7.3418E+02 - 3.9811E-01 1.3978E+03 1.3876E+03 7.2284E+02 5.6442E+02 - 4.4668E-01 1.0770E+03 1.0725E+03 5.5189E+02 4.3176E+02 - 5.0119E-01 8.2646E+02 8.1577E+02 4.1804E+02 3.3007E+02 - 5.6234E-01 6.3080E+02 6.1340E+02 3.1695E+02 2.4983E+02 - 6.3096E-01 4.7684E+02 4.6229E+02 2.3818E+02 1.8585E+02 - 7.0795E-01 3.5896E+02 3.4614E+02 1.7626E+02 1.3695E+02 - 7.9433E-01 2.6945E+02 2.5645E+02 1.3000E+02 1.0156E+02 - 8.9125E-01 2.0218E+02 1.8994E+02 9.5395E+01 7.3695E+01 - 1.0000E+00 1.5033E+02 1.4012E+02 6.8867E+01 5.3446E+01 - 1.1220E+00 1.1197E+02 1.0299E+02 4.9344E+01 3.8716E+01 - 1.2589E+00 8.3503E+01 7.5960E+01 3.5649E+01 2.7769E+01 - 1.4125E+00 6.1918E+01 5.5598E+01 2.5632E+01 1.9863E+01 - 1.5849E+00 4.5648E+01 4.0471E+01 1.8202E+01 1.4126E+01 - 1.7783E+00 3.3553E+01 2.9390E+01 1.3022E+01 9.9757E+00 - 1.9953E+00 2.4813E+01 2.1367E+01 9.2145E+00 6.9897E+00 - 2.2387E+00 1.8124E+01 1.5507E+01 6.4109E+00 4.9341E+00 - 2.5119E+00 1.3161E+01 1.1141E+01 4.4837E+00 3.5060E+00 - 2.8184E+00 9.5866E+00 8.0007E+00 3.1384E+00 2.3897E+00 - 3.1623E+00 6.9566E+00 5.7514E+00 2.1601E+00 1.6373E+00 - 3.5481E+00 5.0362E+00 4.0920E+00 1.4979E+00 1.1136E+00 - 3.9811E+00 3.6586E+00 2.9216E+00 1.0253E+00 7.6947E-01 - 4.4668E+00 2.6410E+00 2.0913E+00 6.9429E-01 5.2776E-01 - 5.0119E+00 1.9009E+00 1.4936E+00 4.7282E-01 3.5492E-01 - 5.6234E+00 1.3697E+00 1.0665E+00 3.1615E-01 2.4284E-01 - 6.3096E+00 9.8306E-01 7.5836E-01 2.1039E-01 1.6463E-01 - 7.0795E+00 7.0520E-01 5.4591E-01 1.4253E-01 1.1114E-01 - 7.9433E+00 5.0028E-01 3.9022E-01 9.6616E-02 7.4548E-02 - 8.9125E+00 3.5869E-01 2.7774E-01 6.5330E-02 4.9407E-02 - 1.0000E+01 2.5709E-01 1.9285E-01 4.3018E-02 3.2870E-02 - 1.1220E+01 1.8263E-01 1.3637E-01 2.8931E-02 2.2102E-02 - 1.2589E+01 1.2940E-01 9.6370E-02 1.9051E-02 1.4850E-02 - 1.4125E+01 9.2166E-02 6.8679E-02 1.2620E-02 9.9551E-03 - 1.5849E+01 6.5314E-02 4.9052E-02 8.4965E-03 6.4247E-03 - 1.7783E+01 4.6726E-02 3.4543E-02 5.6232E-03 4.2343E-03 - 1.9953E+01 3.3424E-02 2.4221E-02 3.7037E-03 2.8012E-03 - 2.2387E+01 2.3821E-02 1.7208E-02 2.4816E-03 1.8086E-03 - 2.5119E+01 1.6982E-02 1.2283E-02 1.6852E-03 1.2566E-03 - 2.8184E+01 1.2145E-02 8.4558E-03 1.1539E-03 8.7359E-04 - 3.1623E+01 8.4745E-03 6.1018E-03 7.3995E-04 5.8365E-04 - 3.5481E+01 5.9958E-03 4.2937E-03 4.9737E-04 3.9358E-04 - 3.9811E+01 4.2435E-03 3.0167E-03 3.3570E-04 2.6699E-04 - 4.4668E+01 2.9948E-03 2.1153E-03 2.2651E-04 1.7881E-04 - 5.0119E+01 2.1091E-03 1.4928E-03 1.5130E-04 1.1970E-04 - 5.6234E+01 1.4876E-03 1.0464E-03 9.9827E-05 8.1064E-05 - 6.3096E+01 1.0468E-03 7.3118E-04 6.8378E-05 5.5878E-05 - 7.0795E+01 7.3527E-04 5.1098E-04 4.6626E-05 3.8331E-05 - 7.9433E+01 5.1766E-04 3.5796E-04 3.1677E-05 2.5222E-05 - 8.9125E+01 3.6428E-04 2.4954E-04 2.1340E-05 1.6874E-05 - 1.0000E+02 2.5434E-04 1.7414E-04 1.4337E-05 1.1774E-05 - 1.1220E+02 1.7783E-04 1.2082E-04 9.7287E-06 7.9193E-06 - 1.2589E+02 1.2441E-04 8.3997E-05 6.5971E-06 5.3503E-06 - 1.4125E+02 8.6875E-05 5.8553E-05 4.4354E-06 3.6846E-06 - 1.5849E+02 6.0776E-05 4.0689E-05 2.9587E-06 2.5044E-06 - 1.7783E+02 4.2333E-05 2.8051E-05 2.0096E-06 1.6574E-06 - 1.9953E+02 2.9463E-05 1.9437E-05 1.3798E-06 1.0979E-06 - 2.2387E+02 2.0664E-05 1.3435E-05 9.4440E-07 7.7283E-07 - 2.5119E+02 1.4335E-05 9.2742E-06 6.3139E-07 5.3742E-07 - 2.8184E+02 9.9132E-06 6.4743E-06 4.2444E-07 3.6417E-07 - 3.1623E+02 6.9514E-06 4.4935E-06 2.9815E-07 2.4414E-07 - 3.5481E+02 4.8054E-06 3.0954E-06 2.0395E-07 1.6225E-07 - 3.9811E+02 3.3268E-06 2.1263E-06 1.3737E-07 1.0615E-07 - 4.4668E+02 2.2951E-06 1.4520E-06 9.2021E-08 7.0547E-08 - 5.0119E+02 1.5947E-06 9.8835E-07 6.2074E-08 4.7796E-08 - 5.6234E+02 1.1075E-06 6.8162E-07 4.1716E-08 3.3727E-08 - 6.3096E+02 7.5784E-07 4.6462E-07 2.8295E-08 2.2712E-08 - 7.0795E+02 5.1856E-07 3.1764E-07 1.9560E-08 1.4304E-08 - 7.9433E+02 3.5507E-07 2.1661E-07 1.2881E-08 9.2992E-09 - 8.9125E+02 2.4378E-07 1.4796E-07 8.1829E-09 6.4831E-09 - 1.0000E+03 1.6750E-07 1.0026E-07 5.7608E-09 4.4538E-09 - 1.1220E+03 1.1277E-07 6.7070E-08 3.8340E-09 3.0154E-09 - 1.2589E+03 7.6469E-08 4.5606E-08 2.5737E-09 2.0422E-09 - 1.4125E+03 5.1598E-08 3.0813E-08 1.8210E-09 1.3348E-09 - 1.5849E+03 3.4843E-08 2.0694E-08 1.2179E-09 8.8318E-10 - 1.7783E+03 2.3164E-08 1.3721E-08 7.8676E-10 5.6468E-10 - 1.9953E+03 1.5873E-08 9.2646E-09 5.0570E-10 3.5391E-10 - 2.2387E+03 1.0682E-08 6.0511E-09 3.4077E-10 2.5423E-10 - 2.5119E+03 7.1028E-09 3.9946E-09 2.3043E-10 1.7496E-10 - 2.8184E+03 4.6851E-09 2.7253E-09 1.4797E-10 1.0420E-10 - 3.1623E+03 3.2228E-09 1.8669E-09 9.5840E-11 6.7455E-11 - 3.5481E+03 2.0923E-09 1.2015E-09 6.4497E-11 4.3255E-11 - 3.9811E+03 1.3779E-09 7.8698E-10 4.1004E-11 2.8725E-11 - 4.4668E+03 9.1981E-10 5.1806E-10 2.6251E-11 1.9879E-11 - 5.0119E+03 6.1343E-10 3.4352E-10 1.7024E-11 1.1725E-11 - 5.6234E+03 4.0325E-10 2.2776E-10 1.0643E-11 7.0571E-12 - 6.3096E+03 2.6380E-10 1.4702E-10 7.4882E-12 5.5420E-12 - 7.0795E+03 1.7614E-10 9.6491E-11 4.7315E-12 3.8175E-12 - 7.9433E+03 1.1558E-10 6.3114E-11 3.3414E-12 2.4157E-12 - 8.9125E+03 7.5771E-11 4.2092E-11 2.2965E-12 1.3122E-12 - 1.0000E+04 4.9567E-11 2.7668E-11 1.3917E-12 1.0094E-12 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2403E+04 1.2632E+04 6.3483E+03 5.4507E+03 - 1.1220E-01 1.1054E+04 1.1242E+04 5.6567E+03 4.8225E+03 - 1.2589E-01 9.7487E+03 9.9305E+03 4.9855E+03 4.2153E+03 - 1.4125E-01 8.5514E+03 8.6674E+03 4.3351E+03 3.6439E+03 - 1.5849E-01 7.4011E+03 7.4718E+03 3.7258E+03 3.1038E+03 - 1.7783E-01 6.2994E+03 6.3358E+03 3.1756E+03 2.6213E+03 - 1.9953E-01 5.2778E+03 5.2908E+03 2.6830E+03 2.1915E+03 - 2.2387E-01 4.3613E+03 4.3669E+03 2.2297E+03 1.7975E+03 - 2.5119E-01 3.5527E+03 3.5549E+03 1.8249E+03 1.4588E+03 - 2.8184E-01 2.8512E+03 2.8545E+03 1.4777E+03 1.1720E+03 - 3.1623E-01 2.2711E+03 2.2668E+03 1.1715E+03 9.3158E+02 - 3.5481E-01 1.7916E+03 1.7790E+03 9.2386E+02 7.2940E+02 - 3.9811E-01 1.3934E+03 1.3796E+03 7.1918E+02 5.6424E+02 - 4.4668E-01 1.0775E+03 1.0607E+03 5.4942E+02 4.3488E+02 - 5.0119E-01 8.2752E+02 8.1474E+02 4.2071E+02 3.2930E+02 - 5.6234E-01 6.2797E+02 6.1862E+02 3.1882E+02 2.4590E+02 - 6.3096E-01 4.7336E+02 4.6106E+02 2.3868E+02 1.8582E+02 - 7.0795E-01 3.5801E+02 3.4292E+02 1.7596E+02 1.3774E+02 - 7.9433E-01 2.6839E+02 2.5634E+02 1.2896E+02 1.0009E+02 - 8.9125E-01 2.0073E+02 1.9068E+02 9.4898E+01 7.3657E+01 - 1.0000E+00 1.5020E+02 1.4016E+02 6.8924E+01 5.3574E+01 - 1.1220E+00 1.1189E+02 1.0303E+02 4.9914E+01 3.8726E+01 - 1.2589E+00 8.3239E+01 7.5920E+01 3.5942E+01 2.7670E+01 - 1.4125E+00 6.1872E+01 5.5934E+01 2.5818E+01 1.9902E+01 - 1.5849E+00 4.5921E+01 4.0845E+01 1.8328E+01 1.4082E+01 - 1.7783E+00 3.3823E+01 2.9613E+01 1.2989E+01 9.9024E+00 - 1.9953E+00 2.4647E+01 2.1634E+01 9.2222E+00 6.9631E+00 - 2.2387E+00 1.8082E+01 1.5688E+01 6.4744E+00 4.8648E+00 - 2.5119E+00 1.3268E+01 1.1148E+01 4.5518E+00 3.4229E+00 - 2.8184E+00 9.6364E+00 7.9353E+00 3.1338E+00 2.3912E+00 - 3.1623E+00 6.9640E+00 5.7585E+00 2.1620E+00 1.6510E+00 - 3.5481E+00 5.0205E+00 4.1113E+00 1.4761E+00 1.1295E+00 - 3.9811E+00 3.6201E+00 2.9400E+00 1.0147E+00 7.6928E-01 - 4.4668E+00 2.6106E+00 2.1044E+00 6.9091E-01 5.2695E-01 - 5.0119E+00 1.8805E+00 1.5036E+00 4.7119E-01 3.5223E-01 - 5.6234E+00 1.3624E+00 1.0819E+00 3.2313E-01 2.3804E-01 - 6.3096E+00 9.8305E-01 7.6579E-01 2.1451E-01 1.6558E-01 - 7.0795E+00 7.0250E-01 5.3782E-01 1.4635E-01 1.1208E-01 - 7.9433E+00 5.0482E-01 3.8116E-01 9.8893E-02 7.3122E-02 - 8.9125E+00 3.5831E-01 2.7443E-01 6.5745E-02 4.8653E-02 - 1.0000E+01 2.5769E-01 1.9348E-01 4.3194E-02 3.2711E-02 - 1.1220E+01 1.8408E-01 1.3715E-01 2.8629E-02 2.2090E-02 - 1.2589E+01 1.2981E-01 9.7334E-02 1.9194E-02 1.4760E-02 - 1.4125E+01 9.2587E-02 6.9046E-02 1.2759E-02 1.0031E-02 - 1.5849E+01 6.6574E-02 4.8990E-02 8.3757E-03 6.6149E-03 - 1.7783E+01 4.7199E-02 3.4643E-02 5.5775E-03 4.3564E-03 - 1.9953E+01 3.3195E-02 2.4552E-02 3.7912E-03 2.9899E-03 - 2.2387E+01 2.3554E-02 1.7406E-02 2.5089E-03 1.9513E-03 - 2.5119E+01 1.7050E-02 1.2293E-02 1.6557E-03 1.3042E-03 - 2.8184E+01 1.2114E-02 8.6821E-03 1.1353E-03 8.7457E-04 - 3.1623E+01 8.5060E-03 6.1331E-03 7.4874E-04 5.8553E-04 - 3.5481E+01 6.0074E-03 4.3127E-03 5.0386E-04 3.9867E-04 - 3.9811E+01 4.2359E-03 3.0176E-03 3.3691E-04 2.6628E-04 - 4.4668E+01 2.9818E-03 2.1322E-03 2.2500E-04 1.7958E-04 - 5.0119E+01 2.1045E-03 1.5045E-03 1.5137E-04 1.2416E-04 - 5.6234E+01 1.4888E-03 1.0560E-03 1.0089E-04 8.3158E-05 - 6.3096E+01 1.0484E-03 7.3835E-04 6.8028E-05 5.5615E-05 - 7.0795E+01 7.3911E-04 5.1360E-04 4.5585E-05 3.7534E-05 - 7.9433E+01 5.2043E-04 3.5741E-04 3.0340E-05 2.5553E-05 - 8.9125E+01 3.6377E-04 2.5006E-04 2.1404E-05 1.7551E-05 - 1.0000E+02 2.5432E-04 1.7500E-04 1.4454E-05 1.1776E-05 - 1.1220E+02 1.7835E-04 1.2208E-04 9.8919E-06 7.9816E-06 - 1.2589E+02 1.2479E-04 8.5161E-05 6.6721E-06 5.4875E-06 - 1.4125E+02 8.7300E-05 5.8835E-05 4.5001E-06 3.6819E-06 - 1.5849E+02 6.1018E-05 4.0671E-05 3.1030E-06 2.4376E-06 - 1.7783E+02 4.2755E-05 2.8356E-05 2.1404E-06 1.6485E-06 - 1.9953E+02 2.9869E-05 1.9687E-05 1.4612E-06 1.1169E-06 - 2.2387E+02 2.0773E-05 1.3656E-05 9.7375E-07 7.9289E-07 - 2.5119E+02 1.4376E-05 9.4252E-06 6.6345E-07 5.2196E-07 - 2.8184E+02 9.9863E-06 6.4560E-06 4.6893E-07 3.4499E-07 - 3.1623E+02 6.9690E-06 4.4706E-06 3.0303E-07 2.3346E-07 - 3.5481E+02 4.8073E-06 3.0753E-06 2.0145E-07 1.5892E-07 - 3.9811E+02 3.3323E-06 2.1220E-06 1.3515E-07 1.0889E-07 - 4.4668E+02 2.2910E-06 1.4526E-06 9.0539E-08 7.3215E-08 - 5.0119E+02 1.5705E-06 9.9654E-07 6.1753E-08 4.8031E-08 - 5.6234E+02 1.0985E-06 6.8928E-07 4.1517E-08 3.3194E-08 - 6.3096E+02 7.5875E-07 4.7063E-07 2.8296E-08 2.1830E-08 - 7.0795E+02 5.2077E-07 3.1988E-07 1.9451E-08 1.4496E-08 - 7.9433E+02 3.5549E-07 2.1649E-07 1.2858E-08 9.5646E-09 - 8.9125E+02 2.4343E-07 1.4711E-07 8.3580E-09 6.6094E-09 - 1.0000E+03 1.6593E-07 1.0011E-07 5.6724E-09 4.5301E-09 - 1.1220E+03 1.1133E-07 6.7724E-08 3.7588E-09 2.8961E-09 - 1.2589E+03 7.5686E-08 4.5814E-08 2.5298E-09 1.9092E-09 - 1.4125E+03 5.1560E-08 3.0862E-08 1.6734E-09 1.3279E-09 - 1.5849E+03 3.5179E-08 2.0752E-08 1.1384E-09 8.2836E-10 - 1.7783E+03 2.3508E-08 1.3809E-08 7.4268E-10 5.4372E-10 - 1.9953E+03 1.5784E-08 9.1581E-09 4.9049E-10 3.7092E-10 - 2.2387E+03 1.0665E-08 6.2291E-09 3.2652E-10 2.3742E-10 - 2.5119E+03 7.1112E-09 4.1412E-09 2.1756E-10 1.5386E-10 - 2.8184E+03 4.6937E-09 2.7046E-09 1.4668E-10 9.9556E-11 - 3.1623E+03 3.2197E-09 1.8438E-09 9.3812E-11 6.7274E-11 - 3.5481E+03 2.0730E-09 1.1792E-09 6.0024E-11 4.6223E-11 - 3.9811E+03 1.3776E-09 7.8126E-10 4.2345E-11 2.9622E-11 - 4.4668E+03 9.1901E-10 5.2163E-10 2.9107E-11 1.8542E-11 - 5.0119E+03 6.0698E-10 3.4860E-10 1.8055E-11 1.3042E-11 - 5.6234E+03 4.0133E-10 2.3137E-10 1.2039E-11 8.3552E-12 - 6.3096E+03 2.6360E-10 1.5207E-10 7.7709E-12 5.3427E-12 - 7.0795E+03 1.7351E-10 9.9296E-11 4.8024E-12 3.6415E-12 - 7.9433E+03 1.1581E-10 6.4081E-11 3.1683E-12 2.4696E-12 - 8.9125E+03 7.6786E-11 4.2481E-11 2.0203E-12 1.4700E-12 - 1.0000E+04 5.0141E-11 2.7813E-11 1.4031E-12 9.5369E-13 -average flux in [cosZ = 0.80 -- 0.90, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2372E+04 1.2591E+04 6.3281E+03 5.4190E+03 - 1.1220E-01 1.1042E+04 1.1209E+04 5.6391E+03 4.8201E+03 - 1.2589E-01 9.7649E+03 9.8933E+03 4.9479E+03 4.2074E+03 - 1.4125E-01 8.5506E+03 8.6241E+03 4.3088E+03 3.6257E+03 - 1.5849E-01 7.3774E+03 7.4120E+03 3.7074E+03 3.1010E+03 - 1.7783E-01 6.2696E+03 6.3069E+03 3.1557E+03 2.6142E+03 - 1.9953E-01 5.2679E+03 5.2877E+03 2.6593E+03 2.1752E+03 - 2.2387E-01 4.3488E+03 4.3582E+03 2.2048E+03 1.7874E+03 - 2.5119E-01 3.5341E+03 3.5450E+03 1.8045E+03 1.4620E+03 - 2.8184E-01 2.8458E+03 2.8482E+03 1.4583E+03 1.1758E+03 - 3.1623E-01 2.2651E+03 2.2609E+03 1.1666E+03 9.2908E+02 - 3.5481E-01 1.7912E+03 1.7800E+03 9.2087E+02 7.3219E+02 - 3.9811E-01 1.3986E+03 1.3817E+03 7.1545E+02 5.6957E+02 - 4.4668E-01 1.0787E+03 1.0644E+03 5.5069E+02 4.3436E+02 - 5.0119E-01 8.2817E+02 8.1212E+02 4.2066E+02 3.2851E+02 - 5.6234E-01 6.2834E+02 6.1391E+02 3.1785E+02 2.4787E+02 - 6.3096E-01 4.7357E+02 4.5905E+02 2.3710E+02 1.8381E+02 - 7.0795E-01 3.5741E+02 3.4181E+02 1.7546E+02 1.3609E+02 - 7.9433E-01 2.6909E+02 2.5522E+02 1.3015E+02 9.9791E+01 - 8.9125E-01 2.0153E+02 1.9046E+02 9.5172E+01 7.2937E+01 - 1.0000E+00 1.5103E+02 1.4091E+02 6.8789E+01 5.3325E+01 - 1.1220E+00 1.1239E+02 1.0352E+02 4.9750E+01 3.8485E+01 - 1.2589E+00 8.3402E+01 7.6132E+01 3.5712E+01 2.7581E+01 - 1.4125E+00 6.2023E+01 5.6027E+01 2.5583E+01 1.9686E+01 - 1.5849E+00 4.5702E+01 4.0758E+01 1.8350E+01 1.4172E+01 - 1.7783E+00 3.3460E+01 2.9507E+01 1.2958E+01 1.0095E+01 - 1.9953E+00 2.4607E+01 2.1401E+01 9.1312E+00 7.1241E+00 - 2.2387E+00 1.8169E+01 1.5609E+01 6.4399E+00 4.9393E+00 - 2.5119E+00 1.3136E+01 1.1217E+01 4.5200E+00 3.4606E+00 - 2.8184E+00 9.5226E+00 7.9618E+00 3.1332E+00 2.3795E+00 - 3.1623E+00 6.9441E+00 5.7272E+00 2.1768E+00 1.6407E+00 - 3.5481E+00 5.0171E+00 4.1038E+00 1.4923E+00 1.1331E+00 - 3.9811E+00 3.6399E+00 2.9428E+00 1.0189E+00 7.7006E-01 - 4.4668E+00 2.6309E+00 2.1028E+00 6.9259E-01 5.1892E-01 - 5.0119E+00 1.8892E+00 1.4895E+00 4.6641E-01 3.4891E-01 - 5.6234E+00 1.3518E+00 1.0674E+00 3.1572E-01 2.3875E-01 - 6.3096E+00 9.7191E-01 7.6301E-01 2.1493E-01 1.6117E-01 - 7.0795E+00 7.0282E-01 5.3930E-01 1.4409E-01 1.0715E-01 - 7.9433E+00 5.0283E-01 3.8385E-01 9.8258E-02 7.1653E-02 - 8.9125E+00 3.6059E-01 2.7135E-01 6.6402E-02 4.8918E-02 - 1.0000E+01 2.5633E-01 1.9309E-01 4.3312E-02 3.2698E-02 - 1.1220E+01 1.8147E-01 1.3652E-01 2.8948E-02 2.1788E-02 - 1.2589E+01 1.2801E-01 9.6269E-02 1.9131E-02 1.4771E-02 - 1.4125E+01 9.2016E-02 6.7964E-02 1.3033E-02 9.7678E-03 - 1.5849E+01 6.5564E-02 4.8353E-02 8.6462E-03 6.5083E-03 - 1.7783E+01 4.6467E-02 3.4462E-02 5.5546E-03 4.3225E-03 - 1.9953E+01 3.3075E-02 2.4403E-02 3.6614E-03 2.9531E-03 - 2.2387E+01 2.3544E-02 1.7423E-02 2.4470E-03 1.9799E-03 - 2.5119E+01 1.6903E-02 1.2379E-02 1.6325E-03 1.3742E-03 - 2.8184E+01 1.1935E-02 8.4872E-03 1.1157E-03 9.2099E-04 - 3.1623E+01 8.5047E-03 6.1331E-03 7.4384E-04 6.0181E-04 - 3.5481E+01 6.0204E-03 4.3173E-03 4.9635E-04 3.9940E-04 - 3.9811E+01 4.2482E-03 3.0369E-03 3.3071E-04 2.7086E-04 - 4.4668E+01 2.9952E-03 2.1277E-03 2.2294E-04 1.8380E-04 - 5.0119E+01 2.1129E-03 1.4932E-03 1.5066E-04 1.2261E-04 - 5.6234E+01 1.4815E-03 1.0484E-03 1.0323E-04 8.3950E-05 - 6.3096E+01 1.0457E-03 7.3627E-04 6.9238E-05 5.6375E-05 - 7.0795E+01 7.3672E-04 5.1102E-04 4.5694E-05 3.7611E-05 - 7.9433E+01 5.1727E-04 3.5334E-04 3.1193E-05 2.5586E-05 - 8.9125E+01 3.6148E-04 2.4943E-04 2.0936E-05 1.6989E-05 - 1.0000E+02 2.5437E-04 1.7487E-04 1.4382E-05 1.1651E-05 - 1.1220E+02 1.7812E-04 1.2150E-04 9.6760E-06 8.0934E-06 - 1.2589E+02 1.2493E-04 8.4530E-05 6.5366E-06 5.5339E-06 - 1.4125E+02 8.7477E-05 5.8860E-05 4.4929E-06 3.7068E-06 - 1.5849E+02 6.1085E-05 4.0937E-05 3.0845E-06 2.5077E-06 - 1.7783E+02 4.2326E-05 2.8409E-05 2.1056E-06 1.7196E-06 - 1.9953E+02 2.9530E-05 1.9624E-05 1.3933E-06 1.1467E-06 - 2.2387E+02 2.0662E-05 1.3546E-05 9.4959E-07 7.7832E-07 - 2.5119E+02 1.4437E-05 9.3814E-06 6.6443E-07 5.2199E-07 - 2.8184E+02 1.0075E-05 6.4308E-06 4.7327E-07 3.3973E-07 - 3.1623E+02 6.9665E-06 4.4876E-06 3.0867E-07 2.4395E-07 - 3.5481E+02 4.8069E-06 3.0693E-06 2.0857E-07 1.5945E-07 - 3.9811E+02 3.3256E-06 2.0955E-06 1.4021E-07 1.0477E-07 - 4.4668E+02 2.2958E-06 1.4502E-06 9.0814E-08 7.3236E-08 - 5.0119E+02 1.5902E-06 9.9333E-07 6.1520E-08 4.9224E-08 - 5.6234E+02 1.1075E-06 6.8471E-07 4.2139E-08 3.2949E-08 - 6.3096E+02 7.5741E-07 4.6936E-07 2.9020E-08 2.2156E-08 - 7.0795E+02 5.1894E-07 3.2208E-07 1.9529E-08 1.4814E-08 - 7.9433E+02 3.5480E-07 2.1898E-07 1.2823E-08 9.8586E-09 - 8.9125E+02 2.4323E-07 1.4802E-07 8.5041E-09 6.7405E-09 - 1.0000E+03 1.6752E-07 1.0050E-07 5.6714E-09 4.3775E-09 - 1.1220E+03 1.1234E-07 6.7947E-08 3.9314E-09 2.8015E-09 - 1.2589E+03 7.6397E-08 4.5757E-08 2.6923E-09 1.9768E-09 - 1.4125E+03 5.1611E-08 3.0390E-08 1.7971E-09 1.3218E-09 - 1.5849E+03 3.4263E-08 2.0427E-08 1.1734E-09 8.3878E-10 - 1.7783E+03 2.3088E-08 1.3827E-08 7.3241E-10 5.1809E-10 - 1.9953E+03 1.5761E-08 9.3431E-09 5.0435E-10 3.5969E-10 - 2.2387E+03 1.0536E-08 6.2607E-09 3.3569E-10 2.4588E-10 - 2.5119E+03 7.1021E-09 4.0900E-09 2.2124E-10 1.5581E-10 - 2.8184E+03 4.7392E-09 2.7123E-09 1.4831E-10 9.0902E-11 - 3.1623E+03 3.2113E-09 1.8563E-09 9.1768E-11 6.9979E-11 - 3.5481E+03 2.0941E-09 1.2016E-09 6.3921E-11 4.5466E-11 - 3.9811E+03 1.3957E-09 8.0647E-10 4.4604E-11 2.9866E-11 - 4.4668E+03 9.1996E-10 5.3008E-10 2.8679E-11 2.1397E-11 - 5.0119E+03 6.1106E-10 3.4591E-10 1.8392E-11 1.4096E-11 - 5.6234E+03 4.0185E-10 2.2358E-10 1.2801E-11 9.1561E-12 - 6.3096E+03 2.6400E-10 1.4687E-10 8.0535E-12 5.6682E-12 - 7.0795E+03 1.7589E-10 9.8158E-11 4.7243E-12 3.9461E-12 - 7.9433E+03 1.1651E-10 6.3400E-11 3.0830E-12 2.6708E-12 - 8.9125E+03 7.7155E-11 4.0991E-11 2.2043E-12 1.6536E-12 - 1.0000E+04 4.9702E-11 2.7023E-11 1.5312E-12 9.5733E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2807E+04 1.2925E+04 6.4526E+03 5.6609E+03 - 1.1220E-01 1.1343E+04 1.1426E+04 5.7801E+03 4.9970E+03 - 1.2589E-01 9.9942E+03 1.0031E+04 5.0914E+03 4.3512E+03 - 1.4125E-01 8.7285E+03 8.7166E+03 4.3991E+03 3.7410E+03 - 1.5849E-01 7.5245E+03 7.4954E+03 3.7714E+03 3.1883E+03 - 1.7783E-01 6.4015E+03 6.3667E+03 3.2190E+03 2.6859E+03 - 1.9953E-01 5.3572E+03 5.3331E+03 2.7290E+03 2.2478E+03 - 2.2387E-01 4.4191E+03 4.4039E+03 2.2707E+03 1.8523E+03 - 2.5119E-01 3.5955E+03 3.5940E+03 1.8511E+03 1.5041E+03 - 2.8184E-01 2.8875E+03 2.8887E+03 1.4994E+03 1.2143E+03 - 3.1623E-01 2.2954E+03 2.2967E+03 1.1984E+03 9.6524E+02 - 3.5481E-01 1.8085E+03 1.8068E+03 9.4926E+02 7.5821E+02 - 3.9811E-01 1.4177E+03 1.4048E+03 7.4368E+02 5.9035E+02 - 4.4668E-01 1.0982E+03 1.0887E+03 5.7790E+02 4.5534E+02 - 5.0119E-01 8.4119E+02 8.3349E+02 4.4206E+02 3.4709E+02 - 5.6234E-01 6.3963E+02 6.2963E+02 3.3108E+02 2.5956E+02 - 6.3096E-01 4.8414E+02 4.7389E+02 2.4776E+02 1.9376E+02 - 7.0795E-01 3.6486E+02 3.5566E+02 1.8510E+02 1.4691E+02 - 7.9433E-01 2.7402E+02 2.6497E+02 1.3817E+02 1.0852E+02 - 8.9125E-01 2.0605E+02 1.9639E+02 1.0184E+02 7.8468E+01 - 1.0000E+00 1.5399E+02 1.4565E+02 7.4507E+01 5.7275E+01 - 1.1220E+00 1.1453E+02 1.0712E+02 5.3440E+01 4.1257E+01 - 1.2589E+00 8.5543E+01 7.9068E+01 3.8252E+01 2.9748E+01 - 1.4125E+00 6.3147E+01 5.7766E+01 2.7584E+01 2.1468E+01 - 1.5849E+00 4.6739E+01 4.2105E+01 2.0006E+01 1.5325E+01 - 1.7783E+00 3.4835E+01 3.0795E+01 1.4378E+01 1.0882E+01 - 1.9953E+00 2.5627E+01 2.2234E+01 1.0145E+01 7.7652E+00 - 2.2387E+00 1.8785E+01 1.6120E+01 7.1282E+00 5.4385E+00 - 2.5119E+00 1.3637E+01 1.1635E+01 4.9731E+00 3.7966E+00 - 2.8184E+00 9.8488E+00 8.4049E+00 3.4606E+00 2.6735E+00 - 3.1623E+00 7.2210E+00 6.0196E+00 2.4319E+00 1.8587E+00 - 3.5481E+00 5.2230E+00 4.3201E+00 1.6756E+00 1.2642E+00 - 3.9811E+00 3.7558E+00 3.0988E+00 1.1387E+00 8.6451E-01 - 4.4668E+00 2.7227E+00 2.2067E+00 7.7309E-01 5.9650E-01 - 5.0119E+00 1.9688E+00 1.5810E+00 5.2806E-01 4.0516E-01 - 5.6234E+00 1.4108E+00 1.1280E+00 3.6488E-01 2.6955E-01 - 6.3096E+00 1.0181E+00 7.9994E-01 2.5113E-01 1.8033E-01 - 7.0795E+00 7.3321E-01 5.7204E-01 1.6921E-01 1.2211E-01 - 7.9433E+00 5.2127E-01 4.0373E-01 1.1381E-01 8.2167E-02 - 8.9125E+00 3.7089E-01 2.8692E-01 7.4258E-02 5.5937E-02 - 1.0000E+01 2.6607E-01 2.0336E-01 4.8881E-02 3.7509E-02 - 1.1220E+01 1.8892E-01 1.4374E-01 3.2516E-02 2.4580E-02 - 1.2589E+01 1.3453E-01 1.0203E-01 2.1844E-02 1.6505E-02 - 1.4125E+01 9.5925E-02 7.2275E-02 1.4793E-02 1.1393E-02 - 1.5849E+01 6.8652E-02 5.1175E-02 9.6475E-03 7.5888E-03 - 1.7783E+01 4.8716E-02 3.6439E-02 6.4623E-03 4.9232E-03 - 1.9953E+01 3.4521E-02 2.5762E-02 4.3844E-03 3.3863E-03 - 2.2387E+01 2.4567E-02 1.8097E-02 2.9357E-03 2.2476E-03 - 2.5119E+01 1.7324E-02 1.2864E-02 1.9653E-03 1.4778E-03 - 2.8184E+01 1.2324E-02 9.1746E-03 1.2600E-03 1.0305E-03 - 3.1623E+01 8.8499E-03 6.4222E-03 8.4925E-04 6.7055E-04 - 3.5481E+01 6.2669E-03 4.5248E-03 5.6624E-04 4.4867E-04 - 3.9811E+01 4.4298E-03 3.1902E-03 3.7722E-04 3.0006E-04 - 4.4668E+01 3.1264E-03 2.2419E-03 2.5179E-04 2.0568E-04 - 5.0119E+01 2.1999E-03 1.5810E-03 1.6931E-04 1.3672E-04 - 5.6234E+01 1.5486E-03 1.1122E-03 1.1449E-04 8.8732E-05 - 6.3096E+01 1.0956E-03 7.7582E-04 7.6058E-05 6.0298E-05 - 7.0795E+01 7.6986E-04 5.4178E-04 5.0776E-05 4.2237E-05 - 7.9433E+01 5.4028E-04 3.8334E-04 3.5271E-05 2.8541E-05 - 8.9125E+01 3.8093E-04 2.6736E-04 2.2997E-05 1.9024E-05 - 1.0000E+02 2.6804E-04 1.8390E-04 1.5802E-05 1.3056E-05 - 1.1220E+02 1.8768E-04 1.2775E-04 1.0658E-05 8.7041E-06 - 1.2589E+02 1.3139E-04 8.9362E-05 7.2416E-06 5.8304E-06 - 1.4125E+02 9.1590E-05 6.1954E-05 5.0005E-06 4.0844E-06 - 1.5849E+02 6.4123E-05 4.3092E-05 3.3770E-06 2.7374E-06 - 1.7783E+02 4.5087E-05 3.0133E-05 2.2257E-06 1.8483E-06 - 1.9953E+02 3.1309E-05 2.0790E-05 1.5390E-06 1.2851E-06 - 2.2387E+02 2.1797E-05 1.4401E-05 1.0450E-06 8.4312E-07 - 2.5119E+02 1.5234E-05 9.9057E-06 7.1837E-07 5.5197E-07 - 2.8184E+02 1.0622E-05 6.8268E-06 5.0088E-07 4.0874E-07 - 3.1623E+02 7.3924E-06 4.8003E-06 3.2550E-07 2.6799E-07 - 3.5481E+02 5.1154E-06 3.2881E-06 2.2273E-07 1.8006E-07 - 3.9811E+02 3.5469E-06 2.2573E-06 1.5007E-07 1.2089E-07 - 4.4668E+02 2.4535E-06 1.5567E-06 1.0137E-07 8.1525E-08 - 5.0119E+02 1.6985E-06 1.0751E-06 6.7575E-08 5.3916E-08 - 5.6234E+02 1.1851E-06 7.3813E-07 4.6610E-08 3.6229E-08 - 6.3096E+02 8.0790E-07 5.0299E-07 3.2653E-08 2.4631E-08 - 7.0795E+02 5.5533E-07 3.4586E-07 2.1638E-08 1.6789E-08 - 7.9433E+02 3.8216E-07 2.3678E-07 1.4214E-08 1.1118E-08 - 8.9125E+02 2.6247E-07 1.5954E-07 9.6696E-09 7.4368E-09 - 1.0000E+03 1.8108E-07 1.0886E-07 6.5649E-09 4.9326E-09 - 1.1220E+03 1.2274E-07 7.3759E-08 4.4133E-09 3.2521E-09 - 1.2589E+03 8.3035E-08 5.0122E-08 2.8751E-09 2.0616E-09 - 1.4125E+03 5.6714E-08 3.4162E-08 1.9180E-09 1.3714E-09 - 1.5849E+03 3.8602E-08 2.2840E-08 1.2825E-09 9.7817E-10 - 1.7783E+03 2.5905E-08 1.5251E-08 8.5054E-10 6.6152E-10 - 1.9953E+03 1.7175E-08 1.0171E-08 5.5586E-10 4.1116E-10 - 2.2387E+03 1.1713E-08 6.8629E-09 3.5515E-10 2.6398E-10 - 2.5119E+03 7.9489E-09 4.6397E-09 2.4094E-10 1.7387E-10 - 2.8184E+03 5.2180E-09 3.0220E-09 1.5600E-10 1.1755E-10 - 3.1623E+03 3.5870E-09 2.0565E-09 1.0493E-10 7.4539E-11 - 3.5481E+03 2.3305E-09 1.3380E-09 6.7197E-11 4.6969E-11 - 3.9811E+03 1.5442E-09 8.8386E-10 4.2687E-11 3.1742E-11 - 4.4668E+03 1.0122E-09 5.8952E-10 2.9495E-11 2.0749E-11 - 5.0119E+03 6.7478E-10 3.8691E-10 2.0400E-11 1.3880E-11 - 5.6234E+03 4.4725E-10 2.5412E-10 1.3678E-11 9.5568E-12 - 6.3096E+03 2.9564E-10 1.6739E-10 8.5292E-12 5.8444E-12 - 7.0795E+03 1.9683E-10 1.0890E-10 5.6346E-12 4.1277E-12 - 7.9433E+03 1.2845E-10 7.0527E-11 3.8831E-12 2.7298E-12 - 8.9125E+03 8.4926E-11 4.6484E-11 2.5950E-12 1.7677E-12 - 1.0000E+04 5.6887E-11 3.1032E-11 1.8827E-12 1.1809E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2767E+04 1.2818E+04 6.3668E+03 5.6424E+03 - 1.1220E-01 1.1304E+04 1.1381E+04 5.6596E+03 4.9801E+03 - 1.2589E-01 9.9379E+03 9.9804E+03 4.9656E+03 4.3340E+03 - 1.4125E-01 8.6463E+03 8.6718E+03 4.3149E+03 3.7454E+03 - 1.5849E-01 7.4503E+03 7.4579E+03 3.7304E+03 3.1782E+03 - 1.7783E-01 6.3447E+03 6.3316E+03 3.1764E+03 2.6660E+03 - 1.9953E-01 5.3103E+03 5.2906E+03 2.6732E+03 2.2350E+03 - 2.2387E-01 4.3910E+03 4.3504E+03 2.2204E+03 1.8489E+03 - 2.5119E-01 3.5808E+03 3.5467E+03 1.8169E+03 1.5022E+03 - 2.8184E-01 2.8910E+03 2.8622E+03 1.4782E+03 1.2147E+03 - 3.1623E-01 2.3037E+03 2.2828E+03 1.1948E+03 9.6997E+02 - 3.5481E-01 1.8169E+03 1.7938E+03 9.4198E+02 7.5666E+02 - 3.9811E-01 1.4213E+03 1.3971E+03 7.3473E+02 5.8837E+02 - 4.4668E-01 1.0982E+03 1.0866E+03 5.7166E+02 4.5558E+02 - 5.0119E-01 8.4438E+02 8.2992E+02 4.3864E+02 3.4660E+02 - 5.6234E-01 6.4633E+02 6.2665E+02 3.3343E+02 2.6205E+02 - 6.3096E-01 4.9082E+02 4.7439E+02 2.5191E+02 1.9630E+02 - 7.0795E-01 3.6622E+02 3.5591E+02 1.8697E+02 1.4487E+02 - 7.9433E-01 2.7316E+02 2.6677E+02 1.3710E+02 1.0781E+02 - 8.9125E-01 2.0627E+02 1.9795E+02 1.0087E+02 7.8576E+01 - 1.0000E+00 1.5496E+02 1.4557E+02 7.3913E+01 5.7053E+01 - 1.1220E+00 1.1523E+02 1.0764E+02 5.3875E+01 4.1450E+01 - 1.2589E+00 8.5911E+01 7.9528E+01 3.8600E+01 2.9947E+01 - 1.4125E+00 6.3951E+01 5.8330E+01 2.7734E+01 2.1705E+01 - 1.5849E+00 4.7295E+01 4.2562E+01 2.0091E+01 1.5462E+01 - 1.7783E+00 3.4808E+01 3.0834E+01 1.4404E+01 1.1001E+01 - 1.9953E+00 2.5459E+01 2.2250E+01 1.0178E+01 7.7783E+00 - 2.2387E+00 1.8412E+01 1.6196E+01 7.2398E+00 5.4417E+00 - 2.5119E+00 1.3427E+01 1.1686E+01 5.0903E+00 3.8664E+00 - 2.8184E+00 9.9280E+00 8.4361E+00 3.5005E+00 2.7005E+00 - 3.1623E+00 7.2220E+00 6.0385E+00 2.4138E+00 1.8422E+00 - 3.5481E+00 5.2342E+00 4.3123E+00 1.6729E+00 1.2674E+00 - 3.9811E+00 3.7994E+00 3.0806E+00 1.1497E+00 8.5825E-01 - 4.4668E+00 2.7243E+00 2.1958E+00 7.9399E-01 5.9077E-01 - 5.0119E+00 1.9557E+00 1.5765E+00 5.3524E-01 4.0701E-01 - 5.6234E+00 1.4131E+00 1.1283E+00 3.6257E-01 2.7413E-01 - 6.3096E+00 1.0184E+00 8.0135E-01 2.4563E-01 1.8561E-01 - 7.0795E+00 7.2828E-01 5.7169E-01 1.6386E-01 1.2518E-01 - 7.9433E+00 5.1698E-01 4.0815E-01 1.1007E-01 8.2932E-02 - 8.9125E+00 3.6948E-01 2.8853E-01 7.3194E-02 5.4605E-02 - 1.0000E+01 2.6484E-01 2.0180E-01 4.9189E-02 3.6914E-02 - 1.1220E+01 1.8853E-01 1.4501E-01 3.3113E-02 2.5008E-02 - 1.2589E+01 1.3452E-01 1.0313E-01 2.1883E-02 1.6769E-02 - 1.4125E+01 9.5894E-02 7.2775E-02 1.4485E-02 1.1100E-02 - 1.5849E+01 6.8423E-02 5.1516E-02 9.8155E-03 7.3876E-03 - 1.7783E+01 4.8714E-02 3.6199E-02 6.5483E-03 5.0361E-03 - 1.9953E+01 3.4613E-02 2.5803E-02 4.3372E-03 3.3688E-03 - 2.2387E+01 2.4869E-02 1.8346E-02 2.9799E-03 2.1988E-03 - 2.5119E+01 1.7444E-02 1.2761E-02 1.9924E-03 1.4582E-03 - 2.8184E+01 1.2111E-02 9.2090E-03 1.2971E-03 1.0047E-03 - 3.1623E+01 8.8579E-03 6.4391E-03 8.5251E-04 6.6655E-04 - 3.5481E+01 6.2543E-03 4.5517E-03 5.7310E-04 4.4946E-04 - 3.9811E+01 4.4218E-03 3.1995E-03 3.7904E-04 3.0209E-04 - 4.4668E+01 3.1284E-03 2.2446E-03 2.5042E-04 2.0275E-04 - 5.0119E+01 2.2153E-03 1.5740E-03 1.7007E-04 1.3752E-04 - 5.6234E+01 1.5611E-03 1.1108E-03 1.1490E-04 9.1215E-05 - 6.3096E+01 1.1024E-03 7.8019E-04 7.6527E-05 6.0482E-05 - 7.0795E+01 7.7724E-04 5.4501E-04 5.1064E-05 4.2007E-05 - 7.9433E+01 5.4554E-04 3.8207E-04 3.5075E-05 2.8187E-05 - 8.9125E+01 3.8292E-04 2.6638E-04 2.3695E-05 1.9129E-05 - 1.0000E+02 2.6768E-04 1.8518E-04 1.5934E-05 1.3096E-05 - 1.1220E+02 1.8724E-04 1.2899E-04 1.0822E-05 8.8432E-06 - 1.2589E+02 1.3126E-04 8.9792E-05 7.3191E-06 5.9890E-06 - 1.4125E+02 9.1751E-05 6.2676E-05 4.9640E-06 4.0109E-06 - 1.5849E+02 6.4191E-05 4.3440E-05 3.3819E-06 2.7025E-06 - 1.7783E+02 4.4738E-05 2.9936E-05 2.2877E-06 1.8344E-06 - 1.9953E+02 3.1277E-05 2.0839E-05 1.5078E-06 1.2532E-06 - 2.2387E+02 2.1980E-05 1.4547E-05 1.0211E-06 8.5391E-07 - 2.5119E+02 1.5343E-05 1.0076E-05 7.0575E-07 5.6252E-07 - 2.8184E+02 1.0668E-05 6.9366E-06 4.8669E-07 3.9015E-07 - 3.1623E+02 7.4054E-06 4.7884E-06 3.2548E-07 2.6236E-07 - 3.5481E+02 5.1302E-06 3.2932E-06 2.1748E-07 1.7739E-07 - 3.9811E+02 3.5621E-06 2.2660E-06 1.5046E-07 1.2162E-07 - 4.4668E+02 2.4625E-06 1.5614E-06 1.0028E-07 8.1347E-08 - 5.0119E+02 1.7002E-06 1.0637E-06 6.9247E-08 5.3548E-08 - 5.6234E+02 1.1830E-06 7.3609E-07 4.7004E-08 3.6232E-08 - 6.3096E+02 8.1367E-07 5.0046E-07 3.1697E-08 2.4467E-08 - 7.0795E+02 5.5853E-07 3.4188E-07 2.1544E-08 1.6794E-08 - 7.9433E+02 3.8086E-07 2.3569E-07 1.4402E-08 1.0801E-08 - 8.9125E+02 2.6206E-07 1.6241E-07 9.5714E-09 6.9468E-09 - 1.0000E+03 1.8048E-07 1.1001E-07 6.2860E-09 5.1538E-09 - 1.1220E+03 1.2176E-07 7.3539E-08 4.1607E-09 3.3733E-09 - 1.2589E+03 8.2705E-08 4.9805E-08 2.8616E-09 2.1627E-09 - 1.4125E+03 5.6389E-08 3.3779E-08 1.9087E-09 1.4975E-09 - 1.5849E+03 3.8296E-08 2.2526E-08 1.2715E-09 1.0007E-09 - 1.7783E+03 2.6169E-08 1.5235E-08 8.3537E-10 6.2962E-10 - 1.9953E+03 1.7554E-08 1.0365E-08 5.6420E-10 3.9622E-10 - 2.2387E+03 1.1809E-08 7.0033E-09 3.7811E-10 2.6426E-10 - 2.5119E+03 7.8806E-09 4.5991E-09 2.4408E-10 1.8266E-10 - 2.8184E+03 5.1942E-09 3.0890E-09 1.5899E-10 1.1698E-10 - 3.1623E+03 3.5592E-09 2.0922E-09 1.0939E-10 8.0985E-11 - 3.5481E+03 2.3302E-09 1.3414E-09 7.1146E-11 5.0653E-11 - 3.9811E+03 1.5465E-09 8.8301E-10 4.5243E-11 3.3738E-11 - 4.4668E+03 1.0169E-09 5.8705E-10 2.9254E-11 2.2666E-11 - 5.0119E+03 6.7854E-10 3.9353E-10 2.0072E-11 1.3564E-11 - 5.6234E+03 4.5689E-10 2.5806E-10 1.3981E-11 8.0794E-12 - 6.3096E+03 2.9890E-10 1.6472E-10 8.6163E-12 6.2204E-12 - 7.0795E+03 1.9552E-10 1.0783E-10 5.7431E-12 3.9846E-12 - 7.9433E+03 1.2802E-10 7.1140E-11 3.8141E-12 2.5787E-12 - 8.9125E+03 8.4768E-11 4.7387E-11 2.3855E-12 1.6072E-12 - 1.0000E+04 5.5105E-11 3.1021E-11 1.4182E-12 1.0538E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2734E+04 1.2709E+04 6.3126E+03 5.6852E+03 - 1.1220E-01 1.1315E+04 1.1270E+04 5.6134E+03 5.0119E+03 - 1.2589E-01 9.9318E+03 9.8913E+03 4.9424E+03 4.3584E+03 - 1.4125E-01 8.6559E+03 8.5760E+03 4.2905E+03 3.7553E+03 - 1.5849E-01 7.4553E+03 7.3863E+03 3.6748E+03 3.2035E+03 - 1.7783E-01 6.3236E+03 6.2679E+03 3.1334E+03 2.6979E+03 - 1.9953E-01 5.2922E+03 5.2341E+03 2.6482E+03 2.2418E+03 - 2.2387E-01 4.3681E+03 4.3262E+03 2.2061E+03 1.8467E+03 - 2.5119E-01 3.5791E+03 3.5314E+03 1.8100E+03 1.5105E+03 - 2.8184E-01 2.8924E+03 2.8501E+03 1.4689E+03 1.2198E+03 - 3.1623E-01 2.3027E+03 2.2716E+03 1.1761E+03 9.6636E+02 - 3.5481E-01 1.8098E+03 1.7843E+03 9.3468E+02 7.5462E+02 - 3.9811E-01 1.4147E+03 1.3931E+03 7.3666E+02 5.9017E+02 - 4.4668E-01 1.0996E+03 1.0781E+03 5.7270E+02 4.5438E+02 - 5.0119E-01 8.4520E+02 8.2760E+02 4.3785E+02 3.4662E+02 - 5.6234E-01 6.4652E+02 6.3109E+02 3.3249E+02 2.6297E+02 - 6.3096E-01 4.8902E+02 4.7631E+02 2.4912E+02 1.9662E+02 - 7.0795E-01 3.6699E+02 3.5670E+02 1.8565E+02 1.4569E+02 - 7.9433E-01 2.7613E+02 2.6508E+02 1.3801E+02 1.0718E+02 - 8.9125E-01 2.0713E+02 1.9639E+02 1.0103E+02 7.8448E+01 - 1.0000E+00 1.5446E+02 1.4517E+02 7.3471E+01 5.7326E+01 - 1.1220E+00 1.1537E+02 1.0747E+02 5.3489E+01 4.1741E+01 - 1.2589E+00 8.5728E+01 7.9275E+01 3.8889E+01 2.9950E+01 - 1.4125E+00 6.3522E+01 5.7743E+01 2.7840E+01 2.1379E+01 - 1.5849E+00 4.7007E+01 4.2111E+01 1.9911E+01 1.5349E+01 - 1.7783E+00 3.4711E+01 3.0912E+01 1.4160E+01 1.1072E+01 - 1.9953E+00 2.5434E+01 2.2399E+01 1.0120E+01 7.8863E+00 - 2.2387E+00 1.8674E+01 1.6244E+01 7.1948E+00 5.4695E+00 - 2.5119E+00 1.3616E+01 1.1869E+01 5.0218E+00 3.8319E+00 - 2.8184E+00 9.8755E+00 8.3821E+00 3.5059E+00 2.6664E+00 - 3.1623E+00 7.1784E+00 6.0531E+00 2.4197E+00 1.8555E+00 - 3.5481E+00 5.2038E+00 4.3162E+00 1.6629E+00 1.2671E+00 - 3.9811E+00 3.7676E+00 3.0914E+00 1.1556E+00 8.5788E-01 - 4.4668E+00 2.7139E+00 2.2131E+00 7.8516E-01 5.8303E-01 - 5.0119E+00 1.9528E+00 1.5806E+00 5.2829E-01 4.0120E-01 - 5.6234E+00 1.3996E+00 1.1269E+00 3.5895E-01 2.7255E-01 - 6.3096E+00 1.0090E+00 8.0432E-01 2.4476E-01 1.8616E-01 - 7.0795E+00 7.2475E-01 5.7808E-01 1.6524E-01 1.2582E-01 - 7.9433E+00 5.1675E-01 4.0807E-01 1.1084E-01 8.4002E-02 - 8.9125E+00 3.7127E-01 2.8750E-01 7.5169E-02 5.6063E-02 - 1.0000E+01 2.6530E-01 2.0364E-01 4.9569E-02 3.7862E-02 - 1.1220E+01 1.8849E-01 1.4438E-01 3.3008E-02 2.4947E-02 - 1.2589E+01 1.3432E-01 1.0209E-01 2.2206E-02 1.6518E-02 - 1.4125E+01 9.6676E-02 7.2783E-02 1.4864E-02 1.1230E-02 - 1.5849E+01 6.8965E-02 5.1829E-02 9.9006E-03 7.4234E-03 - 1.7783E+01 4.8511E-02 3.6500E-02 6.5321E-03 4.8769E-03 - 1.9953E+01 3.4687E-02 2.5631E-02 4.3202E-03 3.3494E-03 - 2.2387E+01 2.4810E-02 1.8214E-02 2.8860E-03 2.3434E-03 - 2.5119E+01 1.7646E-02 1.3024E-02 1.9167E-03 1.5957E-03 - 2.8184E+01 1.2525E-02 9.2326E-03 1.2649E-03 1.0220E-03 - 3.1623E+01 8.8168E-03 6.4338E-03 8.4810E-04 6.6751E-04 - 3.5481E+01 6.2384E-03 4.5314E-03 5.7083E-04 4.5208E-04 - 3.9811E+01 4.4107E-03 3.1843E-03 3.8064E-04 3.0338E-04 - 4.4668E+01 3.1250E-03 2.2442E-03 2.5699E-04 2.0357E-04 - 5.0119E+01 2.2072E-03 1.5778E-03 1.7025E-04 1.3683E-04 - 5.6234E+01 1.5584E-03 1.1106E-03 1.1292E-04 9.1778E-05 - 6.3096E+01 1.0961E-03 7.8201E-04 7.5417E-05 6.2011E-05 - 7.0795E+01 7.6836E-04 5.4440E-04 5.0881E-05 4.2131E-05 - 7.9433E+01 5.4130E-04 3.7847E-04 3.5105E-05 2.8650E-05 - 8.9125E+01 3.8100E-04 2.6573E-04 2.3634E-05 1.9358E-05 - 1.0000E+02 2.6740E-04 1.8476E-04 1.5898E-05 1.3064E-05 - 1.1220E+02 1.8784E-04 1.2812E-04 1.0881E-05 8.8963E-06 - 1.2589E+02 1.3179E-04 8.9319E-05 7.2814E-06 5.8761E-06 - 1.4125E+02 9.2140E-05 6.2333E-05 4.9007E-06 3.9714E-06 - 1.5849E+02 6.4282E-05 4.3464E-05 3.3284E-06 2.7536E-06 - 1.7783E+02 4.5066E-05 3.0326E-05 2.2498E-06 1.8685E-06 - 1.9953E+02 3.1475E-05 2.0990E-05 1.5529E-06 1.3073E-06 - 2.2387E+02 2.1831E-05 1.4439E-05 1.0600E-06 8.7358E-07 - 2.5119E+02 1.5233E-05 9.9367E-06 7.0840E-07 5.8573E-07 - 2.8184E+02 1.0597E-05 6.8547E-06 4.6435E-07 4.0662E-07 - 3.1623E+02 7.4047E-06 4.7793E-06 3.2694E-07 2.6229E-07 - 3.5481E+02 5.1262E-06 3.2901E-06 2.2741E-07 1.7666E-07 - 3.9811E+02 3.5536E-06 2.2571E-06 1.4987E-07 1.2119E-07 - 4.4668E+02 2.4627E-06 1.5525E-06 1.0002E-07 8.1569E-08 - 5.0119E+02 1.7019E-06 1.0696E-06 6.8166E-08 5.5042E-08 - 5.6234E+02 1.1818E-06 7.3821E-07 4.6769E-08 3.6243E-08 - 6.3096E+02 8.0955E-07 5.0541E-07 3.1419E-08 2.4214E-08 - 7.0795E+02 5.5479E-07 3.4391E-07 2.1358E-08 1.6429E-08 - 7.9433E+02 3.7941E-07 2.3374E-07 1.4446E-08 1.0712E-08 - 8.9125E+02 2.6142E-07 1.5963E-07 9.7273E-09 7.0298E-09 - 1.0000E+03 1.7975E-07 1.0928E-07 6.2160E-09 4.6918E-09 - 1.1220E+03 1.2125E-07 7.3459E-08 4.0444E-09 3.2395E-09 - 1.2589E+03 8.2587E-08 4.9791E-08 2.8015E-09 2.1525E-09 - 1.4125E+03 5.5867E-08 3.3548E-08 1.8972E-09 1.4393E-09 - 1.5849E+03 3.7533E-08 2.2673E-08 1.2548E-09 9.2869E-10 - 1.7783E+03 2.5337E-08 1.5391E-08 8.4790E-10 6.1349E-10 - 1.9953E+03 1.7272E-08 1.0254E-08 5.6725E-10 4.3428E-10 - 2.2387E+03 1.1544E-08 6.7659E-09 3.7881E-10 2.8902E-10 - 2.5119E+03 7.7442E-09 4.4814E-09 2.5487E-10 1.7171E-10 - 2.8184E+03 5.2167E-09 3.0335E-09 1.6135E-10 1.1167E-10 - 3.1623E+03 3.5813E-09 2.0570E-09 1.0813E-10 7.6813E-11 - 3.5481E+03 2.3368E-09 1.3246E-09 7.2452E-11 5.0636E-11 - 3.9811E+03 1.5372E-09 8.7538E-10 4.4836E-11 3.1487E-11 - 4.4668E+03 1.0207E-09 5.7868E-10 2.9104E-11 2.1260E-11 - 5.0119E+03 6.8018E-10 3.7931E-10 2.1923E-11 1.5402E-11 - 5.6234E+03 4.4560E-10 2.5075E-10 1.2893E-11 9.5392E-12 - 6.3096E+03 2.9687E-10 1.6777E-10 8.3235E-12 6.0598E-12 - 7.0795E+03 1.9786E-10 1.0929E-10 5.7517E-12 4.0072E-12 - 7.9433E+03 1.3062E-10 7.1241E-11 4.0543E-12 2.6355E-12 - 8.9125E+03 8.5633E-11 4.6874E-11 2.5721E-12 1.7448E-12 - 1.0000E+04 5.6192E-11 3.0253E-11 1.4215E-12 1.1807E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2780E+04 1.2742E+04 6.3349E+03 5.7217E+03 - 1.1220E-01 1.1305E+04 1.1264E+04 5.6223E+03 5.0098E+03 - 1.2589E-01 9.9671E+03 9.8946E+03 4.9356E+03 4.3569E+03 - 1.4125E-01 8.6805E+03 8.5940E+03 4.2824E+03 3.7612E+03 - 1.5849E-01 7.4568E+03 7.3878E+03 3.6668E+03 3.2103E+03 - 1.7783E-01 6.3430E+03 6.2698E+03 3.1251E+03 2.7038E+03 - 1.9953E-01 5.3223E+03 5.2288E+03 2.6484E+03 2.2562E+03 - 2.2387E-01 4.4014E+03 4.3184E+03 2.2095E+03 1.8618E+03 - 2.5119E-01 3.5992E+03 3.5312E+03 1.8111E+03 1.5058E+03 - 2.8184E-01 2.8901E+03 2.8489E+03 1.4657E+03 1.2111E+03 - 3.1623E-01 2.2865E+03 2.2637E+03 1.1740E+03 9.6899E+02 - 3.5481E-01 1.8075E+03 1.7843E+03 9.2932E+02 7.6213E+02 - 3.9811E-01 1.4181E+03 1.3970E+03 7.3019E+02 5.9215E+02 - 4.4668E-01 1.0990E+03 1.0818E+03 5.6669E+02 4.5379E+02 - 5.0119E-01 8.4279E+02 8.2622E+02 4.3519E+02 3.4356E+02 - 5.6234E-01 6.4261E+02 6.2395E+02 3.3084E+02 2.5964E+02 - 6.3096E-01 4.8547E+02 4.7083E+02 2.4779E+02 1.9624E+02 - 7.0795E-01 3.6591E+02 3.5345E+02 1.8374E+02 1.4688E+02 - 7.9433E-01 2.7537E+02 2.6187E+02 1.3638E+02 1.0735E+02 - 8.9125E-01 2.0624E+02 1.9509E+02 1.0119E+02 7.8516E+01 - 1.0000E+00 1.5459E+02 1.4549E+02 7.4402E+01 5.7327E+01 - 1.1220E+00 1.1578E+02 1.0694E+02 5.3639E+01 4.1894E+01 - 1.2589E+00 8.5989E+01 7.8763E+01 3.8807E+01 3.0230E+01 - 1.4125E+00 6.3221E+01 5.8130E+01 2.8108E+01 2.1813E+01 - 1.5849E+00 4.7005E+01 4.2581E+01 2.0041E+01 1.5681E+01 - 1.7783E+00 3.4780E+01 3.0962E+01 1.4254E+01 1.1074E+01 - 1.9953E+00 2.5556E+01 2.2456E+01 1.0131E+01 7.7722E+00 - 2.2387E+00 1.8627E+01 1.6255E+01 7.1677E+00 5.4917E+00 - 2.5119E+00 1.3521E+01 1.1726E+01 5.0486E+00 3.8625E+00 - 2.8184E+00 9.8147E+00 8.4792E+00 3.5168E+00 2.6544E+00 - 3.1623E+00 7.1671E+00 6.0291E+00 2.4182E+00 1.8407E+00 - 3.5481E+00 5.2055E+00 4.3391E+00 1.6701E+00 1.2637E+00 - 3.9811E+00 3.7702E+00 3.1132E+00 1.1500E+00 8.5438E-01 - 4.4668E+00 2.7086E+00 2.2164E+00 7.8024E-01 5.8259E-01 - 5.0119E+00 1.9444E+00 1.5760E+00 5.2675E-01 4.0432E-01 - 5.6234E+00 1.3969E+00 1.1159E+00 3.5060E-01 2.7448E-01 - 6.3096E+00 1.0103E+00 7.8959E-01 2.4142E-01 1.8460E-01 - 7.0795E+00 7.2941E-01 5.6690E-01 1.6592E-01 1.2405E-01 - 7.9433E+00 5.2130E-01 4.0301E-01 1.1026E-01 8.5699E-02 - 8.9125E+00 3.7153E-01 2.8647E-01 7.4235E-02 5.7778E-02 - 1.0000E+01 2.6342E-01 2.0322E-01 4.9157E-02 3.7605E-02 - 1.1220E+01 1.9007E-01 1.4444E-01 3.2771E-02 2.5056E-02 - 1.2589E+01 1.3576E-01 1.0287E-01 2.2074E-02 1.6604E-02 - 1.4125E+01 9.6265E-02 7.2767E-02 1.4474E-02 1.1019E-02 - 1.5849E+01 6.8592E-02 5.1314E-02 9.5685E-03 7.5265E-03 - 1.7783E+01 4.9064E-02 3.6645E-02 6.4093E-03 5.0873E-03 - 1.9953E+01 3.5196E-02 2.6028E-02 4.2747E-03 3.4251E-03 - 2.2387E+01 2.4744E-02 1.8356E-02 2.9187E-03 2.3116E-03 - 2.5119E+01 1.7662E-02 1.2968E-02 1.9802E-03 1.5025E-03 - 2.8184E+01 1.2600E-02 9.0294E-03 1.3003E-03 9.7163E-04 - 3.1623E+01 8.8366E-03 6.4118E-03 8.5106E-04 6.6233E-04 - 3.5481E+01 6.2771E-03 4.5289E-03 5.6673E-04 4.4404E-04 - 3.9811E+01 4.4278E-03 3.1998E-03 3.7632E-04 3.0271E-04 - 4.4668E+01 3.1189E-03 2.2516E-03 2.5271E-04 2.0535E-04 - 5.0119E+01 2.2002E-03 1.5791E-03 1.7105E-04 1.3724E-04 - 5.6234E+01 1.5600E-03 1.1106E-03 1.1541E-04 9.3559E-05 - 6.3096E+01 1.1036E-03 7.8017E-04 7.6454E-05 6.3426E-05 - 7.0795E+01 7.7692E-04 5.4803E-04 5.1217E-05 4.2206E-05 - 7.9433E+01 5.4268E-04 3.7980E-04 3.4435E-05 2.8082E-05 - 8.9125E+01 3.8119E-04 2.6216E-04 2.3350E-05 1.8993E-05 - 1.0000E+02 2.6725E-04 1.8508E-04 1.5765E-05 1.2968E-05 - 1.1220E+02 1.8713E-04 1.2871E-04 1.0660E-05 8.7484E-06 - 1.2589E+02 1.3143E-04 8.9310E-05 7.2335E-06 5.9447E-06 - 1.4125E+02 9.2083E-05 6.2289E-05 4.8891E-06 4.1251E-06 - 1.5849E+02 6.4052E-05 4.3521E-05 3.2881E-06 2.7268E-06 - 1.7783E+02 4.4704E-05 3.0052E-05 2.2228E-06 1.7735E-06 - 1.9953E+02 3.1233E-05 2.0545E-05 1.5061E-06 1.2313E-06 - 2.2387E+02 2.1818E-05 1.4297E-05 1.0377E-06 8.1842E-07 - 2.5119E+02 1.5339E-05 9.9877E-06 6.9285E-07 5.5137E-07 - 2.8184E+02 1.0610E-05 6.8984E-06 4.7924E-07 3.8303E-07 - 3.1623E+02 7.4039E-06 4.7666E-06 3.2687E-07 2.6098E-07 - 3.5481E+02 5.1126E-06 3.2833E-06 2.1890E-07 1.7744E-07 - 3.9811E+02 3.5494E-06 2.2634E-06 1.4835E-07 1.2063E-07 - 4.4668E+02 2.4709E-06 1.5480E-06 1.0361E-07 8.1023E-08 - 5.0119E+02 1.7097E-06 1.0635E-06 6.9041E-08 5.4504E-08 - 5.6234E+02 1.1852E-06 7.3915E-07 4.5701E-08 3.6481E-08 - 6.3096E+02 8.1315E-07 5.0509E-07 3.1062E-08 2.4432E-08 - 7.0795E+02 5.5958E-07 3.4620E-07 2.1501E-08 1.6306E-08 - 7.9433E+02 3.8517E-07 2.3603E-07 1.4775E-08 1.1187E-08 - 8.9125E+02 2.6522E-07 1.5990E-07 9.3939E-09 7.5395E-09 - 1.0000E+03 1.8034E-07 1.0902E-07 6.3341E-09 4.6681E-09 - 1.1220E+03 1.2215E-07 7.3371E-08 4.4082E-09 3.0774E-09 - 1.2589E+03 8.3108E-08 4.9876E-08 2.9749E-09 2.1515E-09 - 1.4125E+03 5.6044E-08 3.3488E-08 1.8860E-09 1.4775E-09 - 1.5849E+03 3.7913E-08 2.2786E-08 1.1990E-09 9.3698E-10 - 1.7783E+03 2.5788E-08 1.5196E-08 8.1298E-10 6.0357E-10 - 1.9953E+03 1.7368E-08 1.0147E-08 5.4649E-10 4.2220E-10 - 2.2387E+03 1.1643E-08 6.8921E-09 3.7365E-10 2.6491E-10 - 2.5119E+03 7.7320E-09 4.6071E-09 2.5537E-10 1.7527E-10 - 2.8184E+03 5.1558E-09 3.0405E-09 1.6727E-10 1.2723E-10 - 3.1623E+03 3.5699E-09 2.0578E-09 1.0408E-10 7.8433E-11 - 3.5481E+03 2.3234E-09 1.3321E-09 7.0367E-11 4.9623E-11 - 3.9811E+03 1.5399E-09 8.7750E-10 4.5353E-11 3.4421E-11 - 4.4668E+03 1.0262E-09 5.8564E-10 3.3042E-11 2.3562E-11 - 5.0119E+03 6.8154E-10 3.8480E-10 2.2220E-11 1.4071E-11 - 5.6234E+03 4.4852E-10 2.5350E-10 1.1801E-11 8.4949E-12 - 6.3096E+03 2.9959E-10 1.6816E-10 8.3162E-12 5.9316E-12 - 7.0795E+03 1.9758E-10 1.0835E-10 5.5078E-12 4.0537E-12 - 7.9433E+03 1.2962E-10 7.1602E-11 3.8626E-12 2.5118E-12 - 8.9125E+03 8.6691E-11 4.6773E-11 2.6290E-12 1.6877E-12 - 1.0000E+04 5.6342E-11 3.0507E-11 1.5992E-12 1.0463E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2831E+04 1.2793E+04 6.3236E+03 5.7136E+03 - 1.1220E-01 1.1350E+04 1.1327E+04 5.6138E+03 5.0253E+03 - 1.2589E-01 9.9806E+03 9.9261E+03 4.9487E+03 4.3725E+03 - 1.4125E-01 8.7156E+03 8.6384E+03 4.2950E+03 3.7501E+03 - 1.5849E-01 7.4928E+03 7.4244E+03 3.6877E+03 3.2118E+03 - 1.7783E-01 6.3792E+03 6.2859E+03 3.1392E+03 2.7172E+03 - 1.9953E-01 5.3523E+03 5.2671E+03 2.6482E+03 2.2557E+03 - 2.2387E-01 4.4038E+03 4.3479E+03 2.2117E+03 1.8583E+03 - 2.5119E-01 3.5821E+03 3.5365E+03 1.8223E+03 1.5188E+03 - 2.8184E-01 2.8871E+03 2.8449E+03 1.4738E+03 1.2213E+03 - 3.1623E-01 2.3058E+03 2.2668E+03 1.1782E+03 9.6965E+02 - 3.5481E-01 1.8165E+03 1.7896E+03 9.3366E+02 7.5960E+02 - 3.9811E-01 1.4181E+03 1.3981E+03 7.3333E+02 5.8848E+02 - 4.4668E-01 1.0986E+03 1.0752E+03 5.6801E+02 4.5503E+02 - 5.0119E-01 8.4365E+02 8.1921E+02 4.3320E+02 3.4753E+02 - 5.6234E-01 6.4470E+02 6.2235E+02 3.3056E+02 2.6145E+02 - 6.3096E-01 4.8757E+02 4.6721E+02 2.4985E+02 1.9630E+02 - 7.0795E-01 3.6525E+02 3.4965E+02 1.8560E+02 1.4516E+02 - 7.9433E-01 2.7349E+02 2.6117E+02 1.3694E+02 1.0692E+02 - 8.9125E-01 2.0486E+02 1.9464E+02 9.9868E+01 7.8174E+01 - 1.0000E+00 1.5428E+02 1.4467E+02 7.3443E+01 5.7081E+01 - 1.1220E+00 1.1541E+02 1.0711E+02 5.3509E+01 4.1624E+01 - 1.2589E+00 8.5722E+01 7.9021E+01 3.8847E+01 2.9935E+01 - 1.4125E+00 6.3469E+01 5.7889E+01 2.7924E+01 2.1398E+01 - 1.5849E+00 4.6919E+01 4.2132E+01 1.9998E+01 1.5419E+01 - 1.7783E+00 3.4551E+01 3.0679E+01 1.4432E+01 1.0963E+01 - 1.9953E+00 2.5298E+01 2.2471E+01 1.0114E+01 7.7068E+00 - 2.2387E+00 1.8476E+01 1.6271E+01 7.0592E+00 5.4516E+00 - 2.5119E+00 1.3549E+01 1.1534E+01 5.0132E+00 3.8317E+00 - 2.8184E+00 9.8716E+00 8.3052E+00 3.5309E+00 2.6246E+00 - 3.1623E+00 7.1991E+00 6.0103E+00 2.4133E+00 1.8165E+00 - 3.5481E+00 5.1961E+00 4.3236E+00 1.6628E+00 1.2568E+00 - 3.9811E+00 3.7422E+00 3.0915E+00 1.1417E+00 8.5981E-01 - 4.4668E+00 2.7162E+00 2.2105E+00 7.8105E-01 5.8171E-01 - 5.0119E+00 1.9609E+00 1.5866E+00 5.3376E-01 3.9831E-01 - 5.6234E+00 1.3983E+00 1.1276E+00 3.6040E-01 2.6701E-01 - 6.3096E+00 1.0061E+00 7.9705E-01 2.4530E-01 1.8107E-01 - 7.0795E+00 7.2632E-01 5.6298E-01 1.6344E-01 1.2387E-01 - 7.9433E+00 5.1531E-01 3.9551E-01 1.0973E-01 8.2036E-02 - 8.9125E+00 3.6768E-01 2.8231E-01 7.5423E-02 5.5343E-02 - 1.0000E+01 2.6414E-01 2.0224E-01 4.8840E-02 3.7024E-02 - 1.1220E+01 1.8932E-01 1.4392E-01 3.2606E-02 2.4867E-02 - 1.2589E+01 1.3527E-01 1.0226E-01 2.1901E-02 1.6560E-02 - 1.4125E+01 9.5911E-02 7.2329E-02 1.4693E-02 1.1104E-02 - 1.5849E+01 6.8950E-02 5.1255E-02 9.7764E-03 7.4751E-03 - 1.7783E+01 4.8637E-02 3.6492E-02 6.4297E-03 5.0292E-03 - 1.9953E+01 3.4326E-02 2.5739E-02 4.3126E-03 3.2297E-03 - 2.2387E+01 2.4699E-02 1.8051E-02 2.8652E-03 2.1116E-03 - 2.5119E+01 1.7560E-02 1.2807E-02 1.9325E-03 1.4493E-03 - 2.8184E+01 1.2488E-02 9.0927E-03 1.3120E-03 9.6910E-04 - 3.1623E+01 8.8232E-03 6.4025E-03 8.4686E-04 6.6814E-04 - 3.5481E+01 6.2473E-03 4.5156E-03 5.6485E-04 4.4603E-04 - 3.9811E+01 4.4092E-03 3.1772E-03 3.7537E-04 2.9871E-04 - 4.4668E+01 3.1229E-03 2.2360E-03 2.5361E-04 2.0182E-04 - 5.0119E+01 2.1977E-03 1.5804E-03 1.6842E-04 1.3466E-04 - 5.6234E+01 1.5485E-03 1.1050E-03 1.1318E-04 9.0925E-05 - 6.3096E+01 1.0942E-03 7.6900E-04 7.7258E-05 6.1268E-05 - 7.0795E+01 7.6604E-04 5.4059E-04 5.2695E-05 4.1714E-05 - 7.9433E+01 5.3728E-04 3.7891E-04 3.6454E-05 2.8724E-05 - 8.9125E+01 3.7861E-04 2.6379E-04 2.4051E-05 1.9089E-05 - 1.0000E+02 2.6828E-04 1.8517E-04 1.5780E-05 1.3090E-05 - 1.1220E+02 1.8746E-04 1.2929E-04 1.0702E-05 8.8729E-06 - 1.2589E+02 1.3149E-04 9.0175E-05 7.3823E-06 5.9523E-06 - 1.4125E+02 9.1936E-05 6.2689E-05 4.9846E-06 4.0146E-06 - 1.5849E+02 6.4035E-05 4.3464E-05 3.2966E-06 2.7306E-06 - 1.7783E+02 4.4734E-05 3.0234E-05 2.2969E-06 1.8496E-06 - 1.9953E+02 3.1289E-05 2.1017E-05 1.5707E-06 1.2483E-06 - 2.2387E+02 2.1899E-05 1.4455E-05 9.8167E-07 8.5793E-07 - 2.5119E+02 1.5299E-05 9.9436E-06 6.5725E-07 5.9714E-07 - 2.8184E+02 1.0620E-05 6.8485E-06 4.8672E-07 3.9711E-07 - 3.1623E+02 7.4200E-06 4.7721E-06 3.3149E-07 2.6061E-07 - 3.5481E+02 5.1284E-06 3.2919E-06 2.2208E-07 1.7317E-07 - 3.9811E+02 3.5630E-06 2.2795E-06 1.5083E-07 1.1842E-07 - 4.4668E+02 2.4764E-06 1.5688E-06 1.0400E-07 8.1310E-08 - 5.0119E+02 1.7071E-06 1.0775E-06 7.1610E-08 5.4726E-08 - 5.6234E+02 1.1827E-06 7.4729E-07 4.7871E-08 3.6250E-08 - 6.3096E+02 8.1629E-07 5.1122E-07 3.1841E-08 2.4874E-08 - 7.0795E+02 5.6046E-07 3.4661E-07 2.0934E-08 1.6847E-08 - 7.9433E+02 3.8228E-07 2.3673E-07 1.4235E-08 1.1276E-08 - 8.9125E+02 2.6005E-07 1.6070E-07 9.8718E-09 7.3102E-09 - 1.0000E+03 1.7927E-07 1.0985E-07 6.5890E-09 4.8926E-09 - 1.1220E+03 1.2173E-07 7.3452E-08 4.3523E-09 3.2939E-09 - 1.2589E+03 8.3300E-08 4.9163E-08 2.8315E-09 2.1674E-09 - 1.4125E+03 5.6355E-08 3.3237E-08 1.8174E-09 1.3239E-09 - 1.5849E+03 3.8181E-08 2.2540E-08 1.1911E-09 9.2848E-10 - 1.7783E+03 2.5881E-08 1.5162E-08 8.2241E-10 6.4871E-10 - 1.9953E+03 1.7544E-08 1.0283E-08 5.5504E-10 4.0403E-10 - 2.2387E+03 1.1731E-08 6.8973E-09 3.5581E-10 2.7637E-10 - 2.5119E+03 7.7969E-09 4.6286E-09 2.3619E-10 1.8625E-10 - 2.8184E+03 5.2308E-09 3.1115E-09 1.6626E-10 1.1899E-10 - 3.1623E+03 3.5544E-09 2.0541E-09 1.1058E-10 7.4216E-11 - 3.5481E+03 2.3135E-09 1.3317E-09 7.5950E-11 5.0596E-11 - 3.9811E+03 1.5434E-09 8.8548E-10 4.5379E-11 3.3719E-11 - 4.4668E+03 1.0211E-09 5.8558E-10 2.8082E-11 2.2224E-11 - 5.0119E+03 6.7934E-10 3.8676E-10 2.0105E-11 1.4526E-11 - 5.6234E+03 4.5037E-10 2.5191E-10 1.3913E-11 9.0840E-12 - 6.3096E+03 2.9711E-10 1.6764E-10 9.0656E-12 6.4935E-12 - 7.0795E+03 1.9808E-10 1.1134E-10 5.7415E-12 4.2291E-12 - 7.9433E+03 1.3009E-10 7.2260E-11 3.7599E-12 2.5243E-12 - 8.9125E+03 8.5545E-11 4.6831E-11 2.4991E-12 1.5936E-12 - 1.0000E+04 5.6233E-11 3.1281E-11 1.6671E-12 1.1689E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2869E+04 1.2843E+04 6.4358E+03 5.7141E+03 - 1.1220E-01 1.1373E+04 1.1374E+04 5.6821E+03 5.0452E+03 - 1.2589E-01 1.0008E+04 9.9852E+03 4.9902E+03 4.3973E+03 - 1.4125E-01 8.7396E+03 8.7031E+03 4.3485E+03 3.7891E+03 - 1.5849E-01 7.5157E+03 7.5029E+03 3.7344E+03 3.2369E+03 - 1.7783E-01 6.3842E+03 6.3278E+03 3.1758E+03 2.7272E+03 - 1.9953E-01 5.3489E+03 5.2708E+03 2.6831E+03 2.2683E+03 - 2.2387E-01 4.4222E+03 4.3667E+03 2.2390E+03 1.8605E+03 - 2.5119E-01 3.6063E+03 3.5562E+03 1.8316E+03 1.5135E+03 - 2.8184E-01 2.8966E+03 2.8579E+03 1.4785E+03 1.2231E+03 - 3.1623E-01 2.3036E+03 2.2742E+03 1.1848E+03 9.7064E+02 - 3.5481E-01 1.8153E+03 1.7857E+03 9.4148E+02 7.6343E+02 - 3.9811E-01 1.4155E+03 1.3854E+03 7.4014E+02 5.9708E+02 - 4.4668E-01 1.0963E+03 1.0765E+03 5.7136E+02 4.6091E+02 - 5.0119E-01 8.4065E+02 8.2727E+02 4.3716E+02 3.4795E+02 - 5.6234E-01 6.3726E+02 6.2624E+02 3.3194E+02 2.6042E+02 - 6.3096E-01 4.8384E+02 4.7335E+02 2.4970E+02 1.9593E+02 - 7.0795E-01 3.6748E+02 3.5488E+02 1.8520E+02 1.4499E+02 - 7.9433E-01 2.7516E+02 2.6474E+02 1.3660E+02 1.0582E+02 - 8.9125E-01 2.0529E+02 1.9620E+02 1.0187E+02 7.8056E+01 - 1.0000E+00 1.5317E+02 1.4471E+02 7.4124E+01 5.7366E+01 - 1.1220E+00 1.1445E+02 1.0645E+02 5.3675E+01 4.1522E+01 - 1.2589E+00 8.5302E+01 7.9021E+01 3.8617E+01 2.9755E+01 - 1.4125E+00 6.3375E+01 5.7831E+01 2.7861E+01 2.1341E+01 - 1.5849E+00 4.6784E+01 4.2108E+01 2.0113E+01 1.5337E+01 - 1.7783E+00 3.4472E+01 3.0760E+01 1.4169E+01 1.0934E+01 - 1.9953E+00 2.5298E+01 2.2329E+01 9.9052E+00 7.7852E+00 - 2.2387E+00 1.8603E+01 1.6182E+01 6.9977E+00 5.4441E+00 - 2.5119E+00 1.3603E+01 1.1658E+01 4.9043E+00 3.7845E+00 - 2.8184E+00 9.8495E+00 8.3995E+00 3.4618E+00 2.6758E+00 - 3.1623E+00 7.1603E+00 6.0412E+00 2.4081E+00 1.8356E+00 - 3.5481E+00 5.1963E+00 4.3153E+00 1.6644E+00 1.2634E+00 - 3.9811E+00 3.7611E+00 3.0809E+00 1.1391E+00 8.6078E-01 - 4.4668E+00 2.6987E+00 2.2023E+00 7.7931E-01 5.8711E-01 - 5.0119E+00 1.9389E+00 1.5717E+00 5.3492E-01 4.0412E-01 - 5.6234E+00 1.4015E+00 1.1266E+00 3.5774E-01 2.7428E-01 - 6.3096E+00 9.9910E-01 7.9670E-01 2.3961E-01 1.8263E-01 - 7.0795E+00 7.1556E-01 5.6153E-01 1.6513E-01 1.2373E-01 - 7.9433E+00 5.1673E-01 3.9913E-01 1.1390E-01 8.4620E-02 - 8.9125E+00 3.7258E-01 2.8379E-01 7.4644E-02 5.6478E-02 - 1.0000E+01 2.6474E-01 2.0258E-01 4.9380E-02 3.7386E-02 - 1.1220E+01 1.8848E-01 1.4381E-01 3.2593E-02 2.4482E-02 - 1.2589E+01 1.3461E-01 1.0172E-01 2.1445E-02 1.6334E-02 - 1.4125E+01 9.5704E-02 7.2057E-02 1.4539E-02 1.0973E-02 - 1.5849E+01 6.7903E-02 5.1201E-02 9.8446E-03 7.4223E-03 - 1.7783E+01 4.8274E-02 3.6050E-02 6.3817E-03 4.9406E-03 - 1.9953E+01 3.4229E-02 2.5556E-02 4.1349E-03 3.1562E-03 - 2.2387E+01 2.4438E-02 1.8185E-02 2.7908E-03 2.2460E-03 - 2.5119E+01 1.7555E-02 1.2777E-02 1.8561E-03 1.5567E-03 - 2.8184E+01 1.2569E-02 9.0719E-03 1.2515E-03 1.0157E-03 - 3.1623E+01 8.8289E-03 6.4007E-03 8.5014E-04 6.6390E-04 - 3.5481E+01 6.2584E-03 4.5018E-03 5.6996E-04 4.4710E-04 - 3.9811E+01 4.4257E-03 3.1774E-03 3.7902E-04 3.0375E-04 - 4.4668E+01 3.1224E-03 2.2347E-03 2.4826E-04 2.0503E-04 - 5.0119E+01 2.2040E-03 1.5667E-03 1.6781E-04 1.3761E-04 - 5.6234E+01 1.5573E-03 1.0997E-03 1.1478E-04 9.2203E-05 - 6.3096E+01 1.0994E-03 7.6969E-04 7.6758E-05 6.2923E-05 - 7.0795E+01 7.7468E-04 5.4234E-04 5.1048E-05 4.2572E-05 - 7.9433E+01 5.4245E-04 3.8037E-04 3.5068E-05 2.8802E-05 - 8.9125E+01 3.8058E-04 2.6327E-04 2.3602E-05 1.9011E-05 - 1.0000E+02 2.6826E-04 1.8475E-04 1.5870E-05 1.2901E-05 - 1.1220E+02 1.8797E-04 1.2867E-04 1.0829E-05 8.8908E-06 - 1.2589E+02 1.3138E-04 9.0016E-05 7.4033E-06 6.0314E-06 - 1.4125E+02 9.1676E-05 6.2615E-05 4.9329E-06 4.0570E-06 - 1.5849E+02 6.4305E-05 4.3274E-05 3.3260E-06 2.7523E-06 - 1.7783E+02 4.5044E-05 3.0118E-05 2.2829E-06 1.8416E-06 - 1.9953E+02 3.1401E-05 2.0844E-05 1.5342E-06 1.2741E-06 - 2.2387E+02 2.1795E-05 1.4295E-05 1.0426E-06 8.9843E-07 - 2.5119E+02 1.5223E-05 1.0000E-05 6.9673E-07 5.8664E-07 - 2.8184E+02 1.0709E-05 6.9451E-06 4.7395E-07 3.8319E-07 - 3.1623E+02 7.3924E-06 4.8059E-06 3.3105E-07 2.6516E-07 - 3.5481E+02 5.1263E-06 3.3080E-06 2.2377E-07 1.7754E-07 - 3.9811E+02 3.5630E-06 2.2728E-06 1.4881E-07 1.2054E-07 - 4.4668E+02 2.4626E-06 1.5642E-06 9.9192E-08 8.1838E-08 - 5.0119E+02 1.6963E-06 1.0716E-06 6.7458E-08 5.3692E-08 - 5.6234E+02 1.1839E-06 7.3661E-07 4.6330E-08 3.6377E-08 - 6.3096E+02 8.1146E-07 5.0251E-07 3.1591E-08 2.4189E-08 - 7.0795E+02 5.5806E-07 3.4351E-07 2.0916E-08 1.6054E-08 - 7.9433E+02 3.8507E-07 2.3405E-07 1.3915E-08 1.0691E-08 - 8.9125E+02 2.6424E-07 1.6095E-07 9.4294E-09 7.1228E-09 - 1.0000E+03 1.8172E-07 1.0998E-07 6.1237E-09 4.8825E-09 - 1.1220E+03 1.2282E-07 7.3126E-08 4.1120E-09 3.1729E-09 - 1.2589E+03 8.3510E-08 4.9118E-08 2.8310E-09 2.1570E-09 - 1.4125E+03 5.7140E-08 3.3368E-08 1.9802E-09 1.4370E-09 - 1.5849E+03 3.8537E-08 2.2695E-08 1.3275E-09 9.2398E-10 - 1.7783E+03 2.5771E-08 1.5266E-08 8.5530E-10 5.9291E-10 - 1.9953E+03 1.7346E-08 1.0297E-08 5.5273E-10 4.0939E-10 - 2.2387E+03 1.1651E-08 6.8616E-09 3.6298E-10 2.7980E-10 - 2.5119E+03 7.8262E-09 4.5029E-09 2.2930E-10 1.8665E-10 - 2.8184E+03 5.2877E-09 2.9828E-09 1.5186E-10 1.1960E-10 - 3.1623E+03 3.5542E-09 2.0521E-09 1.1072E-10 7.7696E-11 - 3.5481E+03 2.3203E-09 1.3374E-09 7.5348E-11 5.1782E-11 - 3.9811E+03 1.5459E-09 8.8792E-10 5.0402E-11 3.3686E-11 - 4.4668E+03 1.0136E-09 5.8700E-10 3.1929E-11 2.1789E-11 - 5.0119E+03 6.7213E-10 3.8419E-10 2.1908E-11 1.4340E-11 - 5.6234E+03 4.4689E-10 2.5178E-10 1.3108E-11 8.5363E-12 - 6.3096E+03 2.9562E-10 1.6425E-10 9.2709E-12 5.9505E-12 - 7.0795E+03 1.9581E-10 1.0898E-10 5.5832E-12 4.2884E-12 - 7.9433E+03 1.2930E-10 7.1708E-11 3.7225E-12 2.7743E-12 - 8.9125E+03 8.5078E-11 4.6509E-11 2.5929E-12 1.7811E-12 - 1.0000E+04 5.6631E-11 3.0028E-11 1.6661E-12 1.2070E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2887E+04 1.3018E+04 6.4914E+03 5.7247E+03 - 1.1220E-01 1.1440E+04 1.1502E+04 5.7634E+03 5.0358E+03 - 1.2589E-01 1.0065E+04 1.0088E+04 5.0648E+03 4.3721E+03 - 1.4125E-01 8.7662E+03 8.7568E+03 4.4155E+03 3.7710E+03 - 1.5849E-01 7.5673E+03 7.5190E+03 3.7966E+03 3.2169E+03 - 1.7783E-01 6.4301E+03 6.3886E+03 3.2283E+03 2.7168E+03 - 1.9953E-01 5.3716E+03 5.3560E+03 2.7133E+03 2.2760E+03 - 2.2387E-01 4.4265E+03 4.4140E+03 2.2567E+03 1.8794E+03 - 2.5119E-01 3.6089E+03 3.5845E+03 1.8492E+03 1.5228E+03 - 2.8184E-01 2.9014E+03 2.8742E+03 1.5000E+03 1.2168E+03 - 3.1623E-01 2.3003E+03 2.2833E+03 1.2014E+03 9.6382E+02 - 3.5481E-01 1.8127E+03 1.8025E+03 9.4837E+02 7.5461E+02 - 3.9811E-01 1.4196E+03 1.4030E+03 7.4191E+02 5.9006E+02 - 4.4668E-01 1.0987E+03 1.0822E+03 5.7342E+02 4.5476E+02 - 5.0119E-01 8.4596E+02 8.2784E+02 4.3713E+02 3.4774E+02 - 5.6234E-01 6.4611E+02 6.3060E+02 3.3200E+02 2.6339E+02 - 6.3096E-01 4.8611E+02 4.7723E+02 2.5152E+02 1.9581E+02 - 7.0795E-01 3.6558E+02 3.5594E+02 1.8716E+02 1.4492E+02 - 7.9433E-01 2.7665E+02 2.6449E+02 1.3812E+02 1.0758E+02 - 8.9125E-01 2.0810E+02 1.9651E+02 1.0102E+02 7.9188E+01 - 1.0000E+00 1.5429E+02 1.4493E+02 7.4307E+01 5.7149E+01 - 1.1220E+00 1.1542E+02 1.0683E+02 5.3773E+01 4.1596E+01 - 1.2589E+00 8.5716E+01 7.8894E+01 3.8926E+01 3.0213E+01 - 1.4125E+00 6.3642E+01 5.8118E+01 2.7790E+01 2.1488E+01 - 1.5849E+00 4.7260E+01 4.2483E+01 1.9660E+01 1.5229E+01 - 1.7783E+00 3.4752E+01 3.0811E+01 1.4044E+01 1.0918E+01 - 1.9953E+00 2.5437E+01 2.2241E+01 1.0142E+01 7.6828E+00 - 2.2387E+00 1.8659E+01 1.5966E+01 7.1497E+00 5.3418E+00 - 2.5119E+00 1.3624E+01 1.1748E+01 5.0475E+00 3.7728E+00 - 2.8184E+00 9.9534E+00 8.5077E+00 3.4901E+00 2.6932E+00 - 3.1623E+00 7.1650E+00 6.0023E+00 2.4070E+00 1.8369E+00 - 3.5481E+00 5.1940E+00 4.2892E+00 1.6648E+00 1.2616E+00 - 3.9811E+00 3.7527E+00 3.0654E+00 1.1384E+00 8.7037E-01 - 4.4668E+00 2.7085E+00 2.1849E+00 7.7897E-01 5.9424E-01 - 5.0119E+00 1.9586E+00 1.5659E+00 5.3426E-01 4.0324E-01 - 5.6234E+00 1.4129E+00 1.1174E+00 3.5685E-01 2.6920E-01 - 6.3096E+00 1.0069E+00 7.9304E-01 2.4100E-01 1.8664E-01 - 7.0795E+00 7.1995E-01 5.6894E-01 1.6218E-01 1.2692E-01 - 7.9433E+00 5.1913E-01 4.0558E-01 1.0701E-01 8.4320E-02 - 8.9125E+00 3.7602E-01 2.8295E-01 7.2319E-02 5.6655E-02 - 1.0000E+01 2.6688E-01 2.0435E-01 5.0126E-02 3.7783E-02 - 1.1220E+01 1.8922E-01 1.4535E-01 3.3079E-02 2.5229E-02 - 1.2589E+01 1.3563E-01 1.0330E-01 2.1748E-02 1.6658E-02 - 1.4125E+01 9.6488E-02 7.2420E-02 1.4708E-02 1.1070E-02 - 1.5849E+01 6.8722E-02 5.0924E-02 9.8802E-03 7.4585E-03 - 1.7783E+01 4.8839E-02 3.6458E-02 6.5650E-03 5.0755E-03 - 1.9953E+01 3.4743E-02 2.5893E-02 4.2935E-03 3.5415E-03 - 2.2387E+01 2.4983E-02 1.8283E-02 2.8639E-03 2.2828E-03 - 2.5119E+01 1.7663E-02 1.3043E-02 1.9477E-03 1.4854E-03 - 2.8184E+01 1.2446E-02 9.2733E-03 1.3314E-03 1.0094E-03 - 3.1623E+01 8.8279E-03 6.4124E-03 8.4308E-04 6.7299E-04 - 3.5481E+01 6.2544E-03 4.5211E-03 5.6171E-04 4.5369E-04 - 3.9811E+01 4.4236E-03 3.1864E-03 3.7780E-04 3.0406E-04 - 4.4668E+01 3.1293E-03 2.2434E-03 2.5200E-04 2.0327E-04 - 5.0119E+01 2.2056E-03 1.5778E-03 1.6638E-04 1.3756E-04 - 5.6234E+01 1.5519E-03 1.1044E-03 1.1356E-04 9.1386E-05 - 6.3096E+01 1.0959E-03 7.7214E-04 7.7532E-05 6.0751E-05 - 7.0795E+01 7.7047E-04 5.4220E-04 5.1591E-05 4.1291E-05 - 7.9433E+01 5.4366E-04 3.8151E-04 3.4480E-05 2.8961E-05 - 8.9125E+01 3.8556E-04 2.6763E-04 2.3664E-05 1.9252E-05 - 1.0000E+02 2.6797E-04 1.8512E-04 1.6143E-05 1.2905E-05 - 1.1220E+02 1.8733E-04 1.2850E-04 1.0901E-05 8.8523E-06 - 1.2589E+02 1.3126E-04 8.9873E-05 7.3694E-06 6.0608E-06 - 1.4125E+02 9.2556E-05 6.2728E-05 5.0091E-06 4.0682E-06 - 1.5849E+02 6.4950E-05 4.3587E-05 3.3749E-06 2.7980E-06 - 1.7783E+02 4.5178E-05 3.0175E-05 2.2713E-06 1.9101E-06 - 1.9953E+02 3.1648E-05 2.0844E-05 1.5470E-06 1.2845E-06 - 2.2387E+02 2.1954E-05 1.4449E-05 1.0371E-06 8.7950E-07 - 2.5119E+02 1.5199E-05 1.0040E-05 7.0538E-07 5.7730E-07 - 2.8184E+02 1.0573E-05 6.9538E-06 4.8737E-07 3.9748E-07 - 3.1623E+02 7.3960E-06 4.7763E-06 3.3083E-07 2.6382E-07 - 3.5481E+02 5.1199E-06 3.2695E-06 2.2195E-07 1.7667E-07 - 3.9811E+02 3.5625E-06 2.2578E-06 1.5000E-07 1.1840E-07 - 4.4668E+02 2.4730E-06 1.5610E-06 1.0310E-07 7.9107E-08 - 5.0119E+02 1.7014E-06 1.0740E-06 6.7378E-08 5.2538E-08 - 5.6234E+02 1.1839E-06 7.3885E-07 4.5795E-08 3.6654E-08 - 6.3096E+02 8.1337E-07 5.0710E-07 3.0887E-08 2.4526E-08 - 7.0795E+02 5.5840E-07 3.4674E-07 2.0549E-08 1.6329E-08 - 7.9433E+02 3.8458E-07 2.3560E-07 1.3346E-08 1.0959E-08 - 8.9125E+02 2.6364E-07 1.6073E-07 9.3346E-09 7.5356E-09 - 1.0000E+03 1.8035E-07 1.1008E-07 6.3965E-09 4.8806E-09 - 1.1220E+03 1.2210E-07 7.3661E-08 4.3372E-09 3.2213E-09 - 1.2589E+03 8.3046E-08 4.9764E-08 2.8335E-09 2.2048E-09 - 1.4125E+03 5.6238E-08 3.3643E-08 1.8904E-09 1.4396E-09 - 1.5849E+03 3.8023E-08 2.2384E-08 1.2826E-09 9.3410E-10 - 1.7783E+03 2.5787E-08 1.4873E-08 8.2729E-10 6.0026E-10 - 1.9953E+03 1.7175E-08 1.0178E-08 5.4801E-10 4.2421E-10 - 2.2387E+03 1.1634E-08 6.8656E-09 3.6576E-10 2.7731E-10 - 2.5119E+03 7.7766E-09 4.5557E-09 2.3302E-10 1.9434E-10 - 2.8184E+03 5.2175E-09 3.0515E-09 1.5237E-10 1.2573E-10 - 3.1623E+03 3.5674E-09 2.0453E-09 1.0602E-10 7.5768E-11 - 3.5481E+03 2.3119E-09 1.3332E-09 7.1315E-11 4.9999E-11 - 3.9811E+03 1.5372E-09 9.0187E-10 4.6581E-11 3.3001E-11 - 4.4668E+03 1.0277E-09 5.9195E-10 2.9088E-11 2.2485E-11 - 5.0119E+03 6.7337E-10 3.9023E-10 1.8532E-11 1.5757E-11 - 5.6234E+03 4.4330E-10 2.5876E-10 1.4199E-11 9.7611E-12 - 6.3096E+03 2.9479E-10 1.6755E-10 8.3661E-12 6.2827E-12 - 7.0795E+03 1.9679E-10 1.0962E-10 5.8263E-12 3.8563E-12 - 7.9433E+03 1.3027E-10 7.2287E-11 4.0704E-12 2.3560E-12 - 8.9125E+03 8.5902E-11 4.5988E-11 2.3188E-12 1.5162E-12 - 1.0000E+04 5.5901E-11 2.9590E-11 1.5439E-12 1.0656E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2947E+04 1.3082E+04 6.6144E+03 5.6940E+03 - 1.1220E-01 1.1457E+04 1.1567E+04 5.8572E+03 5.0232E+03 - 1.2589E-01 1.0084E+04 1.0184E+04 5.1278E+03 4.3648E+03 - 1.4125E-01 8.7745E+03 8.8201E+03 4.4478E+03 3.7516E+03 - 1.5849E-01 7.5569E+03 7.5764E+03 3.8167E+03 3.1937E+03 - 1.7783E-01 6.4139E+03 6.4483E+03 3.2426E+03 2.6987E+03 - 1.9953E-01 5.3568E+03 5.3719E+03 2.7392E+03 2.2679E+03 - 2.2387E-01 4.4208E+03 4.4265E+03 2.2801E+03 1.8618E+03 - 2.5119E-01 3.5990E+03 3.6071E+03 1.8670E+03 1.5077E+03 - 2.8184E-01 2.8899E+03 2.9101E+03 1.5113E+03 1.2183E+03 - 3.1623E-01 2.2997E+03 2.3127E+03 1.2037E+03 9.6851E+02 - 3.5481E-01 1.8113E+03 1.8204E+03 9.5103E+02 7.5552E+02 - 3.9811E-01 1.4172E+03 1.4154E+03 7.4392E+02 5.8742E+02 - 4.4668E-01 1.1018E+03 1.0888E+03 5.7396E+02 4.5486E+02 - 5.0119E-01 8.4659E+02 8.2964E+02 4.4024E+02 3.4622E+02 - 5.6234E-01 6.4335E+02 6.2654E+02 3.3363E+02 2.6201E+02 - 6.3096E-01 4.8505E+02 4.7221E+02 2.4987E+02 1.9711E+02 - 7.0795E-01 3.6525E+02 3.5344E+02 1.8725E+02 1.4582E+02 - 7.9433E-01 2.7390E+02 2.6356E+02 1.3868E+02 1.0781E+02 - 8.9125E-01 2.0561E+02 1.9687E+02 1.0088E+02 7.8716E+01 - 1.0000E+00 1.5351E+02 1.4565E+02 7.4108E+01 5.7075E+01 - 1.1220E+00 1.1460E+02 1.0702E+02 5.3509E+01 4.1246E+01 - 1.2589E+00 8.5676E+01 7.8631E+01 3.8622E+01 3.0067E+01 - 1.4125E+00 6.3677E+01 5.7630E+01 2.7853E+01 2.1736E+01 - 1.5849E+00 4.7031E+01 4.2117E+01 1.9954E+01 1.5481E+01 - 1.7783E+00 3.4638E+01 3.0801E+01 1.4165E+01 1.1014E+01 - 1.9953E+00 2.5394E+01 2.2342E+01 9.9952E+00 7.7313E+00 - 2.2387E+00 1.8610E+01 1.6307E+01 7.0679E+00 5.4359E+00 - 2.5119E+00 1.3646E+01 1.1741E+01 5.0328E+00 3.8583E+00 - 2.8184E+00 9.8720E+00 8.3041E+00 3.5043E+00 2.6999E+00 - 3.1623E+00 7.1666E+00 6.0149E+00 2.4237E+00 1.8555E+00 - 3.5481E+00 5.2045E+00 4.3125E+00 1.6602E+00 1.2755E+00 - 3.9811E+00 3.7853E+00 3.0896E+00 1.1428E+00 8.7351E-01 - 4.4668E+00 2.7255E+00 2.1927E+00 7.8786E-01 5.8847E-01 - 5.0119E+00 1.9572E+00 1.5704E+00 5.3385E-01 3.9251E-01 - 5.6234E+00 1.4057E+00 1.1264E+00 3.6519E-01 2.6983E-01 - 6.3096E+00 1.0094E+00 7.9458E-01 2.4070E-01 1.8474E-01 - 7.0795E+00 7.2652E-01 5.6239E-01 1.5893E-01 1.2464E-01 - 7.9433E+00 5.2361E-01 4.0310E-01 1.0928E-01 8.4455E-02 - 8.9125E+00 3.7479E-01 2.8827E-01 7.4742E-02 5.6493E-02 - 1.0000E+01 2.6491E-01 2.0320E-01 4.9481E-02 3.7340E-02 - 1.1220E+01 1.8903E-01 1.4515E-01 3.3128E-02 2.5028E-02 - 1.2589E+01 1.3604E-01 1.0360E-01 2.2024E-02 1.6600E-02 - 1.4125E+01 9.6582E-02 7.2863E-02 1.4493E-02 1.1130E-02 - 1.5849E+01 6.8408E-02 5.1716E-02 9.7428E-03 7.2987E-03 - 1.7783E+01 4.8991E-02 3.6955E-02 6.5503E-03 4.8228E-03 - 1.9953E+01 3.4932E-02 2.5992E-02 4.2306E-03 3.3684E-03 - 2.2387E+01 2.4799E-02 1.8721E-02 2.8312E-03 2.2910E-03 - 2.5119E+01 1.7792E-02 1.3345E-02 1.9229E-03 1.5053E-03 - 2.8184E+01 1.2556E-02 9.2273E-03 1.2498E-03 1.0214E-03 - 3.1623E+01 8.8032E-03 6.4223E-03 8.4588E-04 6.6563E-04 - 3.5481E+01 6.2368E-03 4.5299E-03 5.6692E-04 4.4209E-04 - 3.9811E+01 4.4127E-03 3.1867E-03 3.8312E-04 3.0327E-04 - 4.4668E+01 3.1165E-03 2.2370E-03 2.5264E-04 2.0372E-04 - 5.0119E+01 2.2044E-03 1.5715E-03 1.6949E-04 1.3425E-04 - 5.6234E+01 1.5576E-03 1.1027E-03 1.1503E-04 9.2225E-05 - 6.3096E+01 1.0941E-03 7.6940E-04 7.6856E-05 6.3278E-05 - 7.0795E+01 7.7235E-04 5.3869E-04 5.0855E-05 4.2085E-05 - 7.9433E+01 5.4489E-04 3.7899E-04 3.4646E-05 2.8280E-05 - 8.9125E+01 3.8173E-04 2.6503E-04 2.3800E-05 1.8670E-05 - 1.0000E+02 2.6742E-04 1.8551E-04 1.5947E-05 1.2814E-05 - 1.1220E+02 1.8826E-04 1.2883E-04 1.0807E-05 8.6421E-06 - 1.2589E+02 1.3182E-04 8.9564E-05 7.3366E-06 5.9800E-06 - 1.4125E+02 9.2078E-05 6.2393E-05 4.9291E-06 4.0298E-06 - 1.5849E+02 6.4498E-05 4.3339E-05 3.3834E-06 2.7222E-06 - 1.7783E+02 4.5058E-05 2.9967E-05 2.2462E-06 1.8235E-06 - 1.9953E+02 3.1369E-05 2.0839E-05 1.5128E-06 1.2221E-06 - 2.2387E+02 2.1973E-05 1.4512E-05 1.0727E-06 8.6181E-07 - 2.5119E+02 1.5356E-05 1.0053E-05 7.3229E-07 5.7935E-07 - 2.8184E+02 1.0621E-05 6.9109E-06 4.9189E-07 3.7809E-07 - 3.1623E+02 7.4039E-06 4.7655E-06 3.3560E-07 2.5634E-07 - 3.5481E+02 5.1339E-06 3.2874E-06 2.2321E-07 1.7590E-07 - 3.9811E+02 3.5802E-06 2.2765E-06 1.4948E-07 1.1925E-07 - 4.4668E+02 2.4781E-06 1.5595E-06 1.0227E-07 7.9919E-08 - 5.0119E+02 1.7048E-06 1.0721E-06 6.8446E-08 5.3378E-08 - 5.6234E+02 1.1840E-06 7.4092E-07 4.6743E-08 3.6359E-08 - 6.3096E+02 8.1697E-07 5.0474E-07 3.1422E-08 2.4715E-08 - 7.0795E+02 5.6169E-07 3.4541E-07 2.0650E-08 1.6387E-08 - 7.9433E+02 3.8146E-07 2.3615E-07 1.4128E-08 1.0928E-08 - 8.9125E+02 2.6079E-07 1.6050E-07 9.6077E-09 7.1465E-09 - 1.0000E+03 1.8015E-07 1.0826E-07 6.2352E-09 4.8306E-09 - 1.1220E+03 1.2121E-07 7.3423E-08 4.0285E-09 3.2706E-09 - 1.2589E+03 8.2496E-08 5.0225E-08 2.7870E-09 2.2140E-09 - 1.4125E+03 5.6297E-08 3.3904E-08 1.9453E-09 1.4565E-09 - 1.5849E+03 3.7930E-08 2.2665E-08 1.3090E-09 9.5610E-10 - 1.7783E+03 2.5390E-08 1.5276E-08 8.8568E-10 6.4007E-10 - 1.9953E+03 1.7188E-08 1.0358E-08 5.8182E-10 4.2980E-10 - 2.2387E+03 1.1521E-08 6.8173E-09 3.7838E-10 2.6839E-10 - 2.5119E+03 7.7509E-09 4.5152E-09 2.4988E-10 1.8464E-10 - 2.8184E+03 5.2216E-09 3.0497E-09 1.7002E-10 1.2201E-10 - 3.1623E+03 3.5376E-09 2.0591E-09 1.0455E-10 7.7923E-11 - 3.5481E+03 2.2987E-09 1.3529E-09 7.0524E-11 5.2037E-11 - 3.9811E+03 1.5476E-09 8.9734E-10 4.6179E-11 3.3985E-11 - 4.4668E+03 1.0274E-09 5.9013E-10 2.9483E-11 2.1478E-11 - 5.0119E+03 6.7684E-10 3.8859E-10 1.9920E-11 1.3482E-11 - 5.6234E+03 4.4502E-10 2.5288E-10 1.3784E-11 8.2894E-12 - 6.3096E+03 2.9839E-10 1.6772E-10 8.6200E-12 5.6748E-12 - 7.0795E+03 1.9553E-10 1.0977E-10 5.8206E-12 3.8079E-12 - 7.9433E+03 1.2859E-10 7.2031E-11 3.9486E-12 2.3990E-12 - 8.9125E+03 8.5134E-11 4.7333E-11 2.5327E-12 1.5217E-12 - 1.0000E+04 5.5397E-11 3.0970E-11 1.6091E-12 1.1079E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2930E+04 1.3221E+04 6.6570E+03 5.6903E+03 - 1.1220E-01 1.1449E+04 1.1680E+04 5.8821E+03 5.0058E+03 - 1.2589E-01 1.0090E+04 1.0241E+04 5.1887E+03 4.3659E+03 - 1.4125E-01 8.7944E+03 8.9148E+03 4.5239E+03 3.7706E+03 - 1.5849E-01 7.5798E+03 7.6642E+03 3.8706E+03 3.2062E+03 - 1.7783E-01 6.4404E+03 6.4751E+03 3.2798E+03 2.6991E+03 - 1.9953E-01 5.3841E+03 5.4029E+03 2.7613E+03 2.2507E+03 - 2.2387E-01 4.4301E+03 4.4611E+03 2.2968E+03 1.8540E+03 - 2.5119E-01 3.6020E+03 3.6421E+03 1.8867E+03 1.5102E+03 - 2.8184E-01 2.9025E+03 2.9290E+03 1.5315E+03 1.2170E+03 - 3.1623E-01 2.3089E+03 2.3183E+03 1.2244E+03 9.6717E+02 - 3.5481E-01 1.8230E+03 1.8137E+03 9.6261E+02 7.5944E+02 - 3.9811E-01 1.4300E+03 1.4142E+03 7.5136E+02 5.9084E+02 - 4.4668E-01 1.1013E+03 1.0958E+03 5.8010E+02 4.5349E+02 - 5.0119E-01 8.4220E+02 8.3799E+02 4.4136E+02 3.4704E+02 - 5.6234E-01 6.4405E+02 6.3453E+02 3.3466E+02 2.6283E+02 - 6.3096E-01 4.8845E+02 4.7765E+02 2.5263E+02 1.9786E+02 - 7.0795E-01 3.6687E+02 3.5506E+02 1.8757E+02 1.4704E+02 - 7.9433E-01 2.7428E+02 2.6385E+02 1.3838E+02 1.0775E+02 - 8.9125E-01 2.0542E+02 1.9777E+02 1.0110E+02 7.8777E+01 - 1.0000E+00 1.5443E+02 1.4596E+02 7.4197E+01 5.7557E+01 - 1.1220E+00 1.1527E+02 1.0842E+02 5.3807E+01 4.1861E+01 - 1.2589E+00 8.5825E+01 7.9795E+01 3.8832E+01 3.0333E+01 - 1.4125E+00 6.3927E+01 5.8499E+01 2.8005E+01 2.1877E+01 - 1.5849E+00 4.7538E+01 4.2949E+01 2.0000E+01 1.5664E+01 - 1.7783E+00 3.5071E+01 3.0982E+01 1.4303E+01 1.1046E+01 - 1.9953E+00 2.5600E+01 2.2337E+01 1.0289E+01 7.7445E+00 - 2.2387E+00 1.8557E+01 1.6207E+01 7.1763E+00 5.4853E+00 - 2.5119E+00 1.3505E+01 1.1678E+01 5.0273E+00 3.8820E+00 - 2.8184E+00 9.8669E+00 8.3867E+00 3.5547E+00 2.6608E+00 - 3.1623E+00 7.2348E+00 6.0149E+00 2.4119E+00 1.8466E+00 - 3.5481E+00 5.2173E+00 4.3272E+00 1.6576E+00 1.2678E+00 - 3.9811E+00 3.7528E+00 3.0862E+00 1.1450E+00 8.6468E-01 - 4.4668E+00 2.7066E+00 2.1873E+00 7.7640E-01 5.9401E-01 - 5.0119E+00 1.9547E+00 1.5639E+00 5.2249E-01 4.0644E-01 - 5.6234E+00 1.4007E+00 1.1252E+00 3.5678E-01 2.7565E-01 - 6.3096E+00 1.0006E+00 8.0091E-01 2.4305E-01 1.8479E-01 - 7.0795E+00 7.2018E-01 5.6541E-01 1.6452E-01 1.2250E-01 - 7.9433E+00 5.1689E-01 4.0173E-01 1.0711E-01 8.3708E-02 - 8.9125E+00 3.6918E-01 2.8540E-01 6.9782E-02 5.5616E-02 - 1.0000E+01 2.6431E-01 2.0304E-01 4.9640E-02 3.7161E-02 - 1.1220E+01 1.8774E-01 1.4323E-01 3.2986E-02 2.4660E-02 - 1.2589E+01 1.3403E-01 1.0139E-01 2.1812E-02 1.6750E-02 - 1.4125E+01 9.5997E-02 7.1691E-02 1.4529E-02 1.1230E-02 - 1.5849E+01 6.8767E-02 5.0604E-02 9.7743E-03 7.4478E-03 - 1.7783E+01 4.9056E-02 3.6329E-02 6.6149E-03 5.0228E-03 - 1.9953E+01 3.4794E-02 2.5629E-02 4.3114E-03 3.3128E-03 - 2.2387E+01 2.4817E-02 1.8053E-02 2.8332E-03 2.2473E-03 - 2.5119E+01 1.7582E-02 1.2764E-02 1.9841E-03 1.5240E-03 - 2.8184E+01 1.2422E-02 9.0841E-03 1.3136E-03 9.9862E-04 - 3.1623E+01 8.8316E-03 6.4055E-03 8.4577E-04 6.7044E-04 - 3.5481E+01 6.2520E-03 4.5166E-03 5.6225E-04 4.5026E-04 - 3.9811E+01 4.4202E-03 3.1731E-03 3.7889E-04 3.0609E-04 - 4.4668E+01 3.1251E-03 2.2348E-03 2.5273E-04 2.0459E-04 - 5.0119E+01 2.1922E-03 1.5699E-03 1.6718E-04 1.3674E-04 - 5.6234E+01 1.5509E-03 1.1058E-03 1.1327E-04 9.2957E-05 - 6.3096E+01 1.0965E-03 7.7747E-04 7.7060E-05 6.1618E-05 - 7.0795E+01 7.6996E-04 5.4266E-04 5.2154E-05 4.1328E-05 - 7.9433E+01 5.4189E-04 3.7552E-04 3.5836E-05 2.8985E-05 - 8.9125E+01 3.8084E-04 2.6240E-04 2.4176E-05 1.9702E-05 - 1.0000E+02 2.6881E-04 1.8423E-04 1.5869E-05 1.3129E-05 - 1.1220E+02 1.8829E-04 1.2819E-04 1.0890E-05 8.8692E-06 - 1.2589E+02 1.3157E-04 8.9735E-05 7.2942E-06 5.9466E-06 - 1.4125E+02 9.2188E-05 6.2361E-05 4.9098E-06 3.9837E-06 - 1.5849E+02 6.4429E-05 4.3196E-05 3.3943E-06 2.7615E-06 - 1.7783E+02 4.4984E-05 2.9886E-05 2.3104E-06 1.8959E-06 - 1.9953E+02 3.1337E-05 2.0695E-05 1.5539E-06 1.2854E-06 - 2.2387E+02 2.1853E-05 1.4395E-05 1.0323E-06 8.8525E-07 - 2.5119E+02 1.5276E-05 9.9783E-06 6.9288E-07 5.9270E-07 - 2.8184E+02 1.0644E-05 6.8848E-06 4.9820E-07 3.9152E-07 - 3.1623E+02 7.3950E-06 4.7643E-06 3.3569E-07 2.6141E-07 - 3.5481E+02 5.1082E-06 3.2664E-06 2.2765E-07 1.7868E-07 - 3.9811E+02 3.5351E-06 2.2722E-06 1.5240E-07 1.2349E-07 - 4.4668E+02 2.4682E-06 1.5688E-06 1.0153E-07 8.2374E-08 - 5.0119E+02 1.7101E-06 1.0712E-06 6.9156E-08 5.4606E-08 - 5.6234E+02 1.1764E-06 7.3686E-07 4.6256E-08 3.7318E-08 - 6.3096E+02 8.0702E-07 5.0284E-07 3.0386E-08 2.4737E-08 - 7.0795E+02 5.5047E-07 3.4277E-07 2.0865E-08 1.5614E-08 - 7.9433E+02 3.7698E-07 2.3459E-07 1.4492E-08 1.0450E-08 - 8.9125E+02 2.5968E-07 1.5991E-07 9.7443E-09 7.4937E-09 - 1.0000E+03 1.7936E-07 1.0875E-07 6.2711E-09 4.8958E-09 - 1.1220E+03 1.2209E-07 7.2944E-08 4.2079E-09 3.1148E-09 - 1.2589E+03 8.3469E-08 4.8976E-08 2.6977E-09 2.1020E-09 - 1.4125E+03 5.6205E-08 3.3043E-08 1.8094E-09 1.2826E-09 - 1.5849E+03 3.7781E-08 2.2084E-08 1.2672E-09 8.8707E-10 - 1.7783E+03 2.5484E-08 1.4817E-08 8.9075E-10 6.6733E-10 - 1.9953E+03 1.7280E-08 1.0181E-08 5.7101E-10 4.2307E-10 - 2.2387E+03 1.1529E-08 6.8164E-09 3.9225E-10 2.6532E-10 - 2.5119E+03 7.7739E-09 4.5310E-09 2.4653E-10 1.5562E-10 - 2.8184E+03 5.2853E-09 3.0501E-09 1.5495E-10 1.0852E-10 - 3.1623E+03 3.5890E-09 2.0600E-09 1.0136E-10 7.7789E-11 - 3.5481E+03 2.3381E-09 1.3627E-09 6.6738E-11 5.1002E-11 - 3.9811E+03 1.5532E-09 8.9670E-10 4.4878E-11 3.5300E-11 - 4.4668E+03 1.0351E-09 5.8411E-10 3.0678E-11 2.3550E-11 - 5.0119E+03 6.8337E-10 3.8571E-10 2.1607E-11 1.5707E-11 - 5.6234E+03 4.4900E-10 2.5747E-10 1.5294E-11 1.0122E-11 - 6.3096E+03 2.9604E-10 1.6620E-10 8.6397E-12 6.0459E-12 - 7.0795E+03 1.9365E-10 1.0881E-10 5.4546E-12 4.0684E-12 - 7.9433E+03 1.2915E-10 7.1179E-11 3.6520E-12 2.4280E-12 - 8.9125E+03 8.5675E-11 4.7566E-11 2.3477E-12 1.6376E-12 - 1.0000E+04 5.6376E-11 3.1955E-11 1.6017E-12 9.9349E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3001E+04 1.3233E+04 6.7070E+03 5.6886E+03 - 1.1220E-01 1.1519E+04 1.1701E+04 5.9303E+03 5.0354E+03 - 1.2589E-01 1.0130E+04 1.0270E+04 5.2197E+03 4.3893E+03 - 1.4125E-01 8.7992E+03 8.9335E+03 4.5486E+03 3.7729E+03 - 1.5849E-01 7.5852E+03 7.7015E+03 3.8895E+03 3.1898E+03 - 1.7783E-01 6.4488E+03 6.5161E+03 3.2939E+03 2.6866E+03 - 1.9953E-01 5.3804E+03 5.4308E+03 2.7715E+03 2.2422E+03 - 2.2387E-01 4.4345E+03 4.4795E+03 2.3100E+03 1.8439E+03 - 2.5119E-01 3.6072E+03 3.6478E+03 1.8990E+03 1.5084E+03 - 2.8184E-01 2.8993E+03 2.9347E+03 1.5332E+03 1.2172E+03 - 3.1623E-01 2.3149E+03 2.3318E+03 1.2233E+03 9.6598E+02 - 3.5481E-01 1.8223E+03 1.8282E+03 9.6663E+02 7.5670E+02 - 3.9811E-01 1.4227E+03 1.4203E+03 7.5075E+02 5.8861E+02 - 4.4668E-01 1.1038E+03 1.0948E+03 5.7966E+02 4.5274E+02 - 5.0119E-01 8.4504E+02 8.3775E+02 4.4715E+02 3.4423E+02 - 5.6234E-01 6.4559E+02 6.3644E+02 3.3932E+02 2.6086E+02 - 6.3096E-01 4.8893E+02 4.8036E+02 2.5276E+02 1.9628E+02 - 7.0795E-01 3.6801E+02 3.5684E+02 1.8688E+02 1.4793E+02 - 7.9433E-01 2.7682E+02 2.6474E+02 1.3829E+02 1.0851E+02 - 8.9125E-01 2.0712E+02 1.9731E+02 1.0175E+02 7.8819E+01 - 1.0000E+00 1.5508E+02 1.4615E+02 7.4470E+01 5.7552E+01 - 1.1220E+00 1.1555E+02 1.0851E+02 5.3819E+01 4.1814E+01 - 1.2589E+00 8.5971E+01 7.9872E+01 3.8651E+01 3.0102E+01 - 1.4125E+00 6.4151E+01 5.8391E+01 2.7822E+01 2.1562E+01 - 1.5849E+00 4.7209E+01 4.2809E+01 2.0063E+01 1.5465E+01 - 1.7783E+00 3.4755E+01 3.1056E+01 1.4322E+01 1.0952E+01 - 1.9953E+00 2.5694E+01 2.2546E+01 1.0165E+01 7.7537E+00 - 2.2387E+00 1.8786E+01 1.6286E+01 7.1898E+00 5.5245E+00 - 2.5119E+00 1.3737E+01 1.1742E+01 5.0112E+00 3.8856E+00 - 2.8184E+00 9.9446E+00 8.4909E+00 3.5439E+00 2.6880E+00 - 3.1623E+00 7.1680E+00 6.0266E+00 2.4158E+00 1.8469E+00 - 3.5481E+00 5.1956E+00 4.3148E+00 1.6639E+00 1.2754E+00 - 3.9811E+00 3.7652E+00 3.0772E+00 1.1382E+00 8.7128E-01 - 4.4668E+00 2.7348E+00 2.2075E+00 7.7245E-01 5.8793E-01 - 5.0119E+00 1.9682E+00 1.5713E+00 5.2241E-01 4.0091E-01 - 5.6234E+00 1.4138E+00 1.1212E+00 3.5556E-01 2.6824E-01 - 6.3096E+00 1.0170E+00 8.0181E-01 2.4326E-01 1.8403E-01 - 7.0795E+00 7.2327E-01 5.6657E-01 1.6428E-01 1.2655E-01 - 7.9433E+00 5.1448E-01 4.0076E-01 1.0990E-01 8.5705E-02 - 8.9125E+00 3.6747E-01 2.8561E-01 7.2888E-02 5.6885E-02 - 1.0000E+01 2.6348E-01 2.0370E-01 4.9147E-02 3.7468E-02 - 1.1220E+01 1.8815E-01 1.4450E-01 3.2785E-02 2.5053E-02 - 1.2589E+01 1.3441E-01 1.0225E-01 2.2195E-02 1.6498E-02 - 1.4125E+01 9.6029E-02 7.2745E-02 1.4702E-02 1.0992E-02 - 1.5849E+01 6.8496E-02 5.1652E-02 9.6041E-03 7.3802E-03 - 1.7783E+01 4.8698E-02 3.6366E-02 6.3552E-03 5.0258E-03 - 1.9953E+01 3.4502E-02 2.5652E-02 4.3102E-03 3.4051E-03 - 2.2387E+01 2.4647E-02 1.8232E-02 2.9108E-03 2.2384E-03 - 2.5119E+01 1.7737E-02 1.2906E-02 1.9152E-03 1.4492E-03 - 2.8184E+01 1.2507E-02 9.1717E-03 1.2864E-03 9.7587E-04 - 3.1623E+01 8.8263E-03 6.4012E-03 8.5007E-04 6.6819E-04 - 3.5481E+01 6.2437E-03 4.5040E-03 5.6423E-04 4.4972E-04 - 3.9811E+01 4.4327E-03 3.1771E-03 3.7680E-04 3.0199E-04 - 4.4668E+01 3.1438E-03 2.2462E-03 2.5327E-04 2.0149E-04 - 5.0119E+01 2.2143E-03 1.5823E-03 1.7202E-04 1.3601E-04 - 5.6234E+01 1.5596E-03 1.1148E-03 1.1647E-04 9.1674E-05 - 6.3096E+01 1.0929E-03 7.8481E-04 7.8492E-05 6.2000E-05 - 7.0795E+01 7.6722E-04 5.4928E-04 5.1367E-05 4.2057E-05 - 7.9433E+01 5.3942E-04 3.8000E-04 3.4030E-05 2.8483E-05 - 8.9125E+01 3.7948E-04 2.6410E-04 2.2928E-05 1.9366E-05 - 1.0000E+02 2.6833E-04 1.8568E-04 1.5887E-05 1.2833E-05 - 1.1220E+02 1.8755E-04 1.2904E-04 1.0783E-05 8.7384E-06 - 1.2589E+02 1.3119E-04 8.9470E-05 7.2982E-06 5.9218E-06 - 1.4125E+02 9.1587E-05 6.2058E-05 4.9507E-06 3.9824E-06 - 1.5849E+02 6.4333E-05 4.3339E-05 3.3943E-06 2.7932E-06 - 1.7783E+02 4.4994E-05 2.9979E-05 2.3200E-06 1.8980E-06 - 1.9953E+02 3.1434E-05 2.0726E-05 1.5354E-06 1.2662E-06 - 2.2387E+02 2.1930E-05 1.4424E-05 1.0033E-06 8.8425E-07 - 2.5119E+02 1.5117E-05 9.9869E-06 6.7485E-07 5.7229E-07 - 2.8184E+02 1.0508E-05 6.9532E-06 4.7359E-07 3.7404E-07 - 3.1623E+02 7.3969E-06 4.7932E-06 3.2925E-07 2.6535E-07 - 3.5481E+02 5.1233E-06 3.2846E-06 2.2674E-07 1.8017E-07 - 3.9811E+02 3.5501E-06 2.2570E-06 1.5220E-07 1.2071E-07 - 4.4668E+02 2.4520E-06 1.5607E-06 1.0287E-07 8.0486E-08 - 5.0119E+02 1.6988E-06 1.0684E-06 6.7101E-08 5.5016E-08 - 5.6234E+02 1.1830E-06 7.3879E-07 4.6009E-08 3.6602E-08 - 6.3096E+02 8.1385E-07 5.0673E-07 3.1442E-08 2.4641E-08 - 7.0795E+02 5.5506E-07 3.4348E-07 2.1066E-08 1.6609E-08 - 7.9433E+02 3.8029E-07 2.3374E-07 1.4319E-08 1.0839E-08 - 8.9125E+02 2.6267E-07 1.6040E-07 9.5009E-09 7.2453E-09 - 1.0000E+03 1.8086E-07 1.0928E-07 6.4829E-09 4.8964E-09 - 1.1220E+03 1.2178E-07 7.3806E-08 4.1612E-09 3.2382E-09 - 1.2589E+03 8.2685E-08 4.9769E-08 2.7752E-09 2.1317E-09 - 1.4125E+03 5.5910E-08 3.3559E-08 1.8654E-09 1.4029E-09 - 1.5849E+03 3.7828E-08 2.2563E-08 1.1962E-09 9.9546E-10 - 1.7783E+03 2.5581E-08 1.5082E-08 7.5872E-10 6.7290E-10 - 1.9953E+03 1.7464E-08 1.0195E-08 5.6116E-10 4.3802E-10 - 2.2387E+03 1.1829E-08 6.8280E-09 3.7679E-10 2.7488E-10 - 2.5119E+03 7.8832E-09 4.5777E-09 2.2685E-10 1.7813E-10 - 2.8184E+03 5.1642E-09 3.0105E-09 1.4349E-10 1.2394E-10 - 3.1623E+03 3.5470E-09 2.0414E-09 1.0270E-10 7.6140E-11 - 3.5481E+03 2.3158E-09 1.3328E-09 6.9183E-11 5.1652E-11 - 3.9811E+03 1.5343E-09 8.8213E-10 4.8854E-11 3.3113E-11 - 4.4668E+03 1.0192E-09 5.8486E-10 2.9652E-11 1.9265E-11 - 5.0119E+03 6.7517E-10 3.8693E-10 1.9405E-11 1.3105E-11 - 5.6234E+03 4.4603E-10 2.5817E-10 1.3704E-11 9.3188E-12 - 6.3096E+03 2.9712E-10 1.6704E-10 8.4275E-12 5.5756E-12 - 7.0795E+03 1.9594E-10 1.0943E-10 5.6381E-12 3.9880E-12 - 7.9433E+03 1.2857E-10 7.2230E-11 3.4275E-12 2.5483E-12 - 8.9125E+03 8.4270E-11 4.7020E-11 2.1507E-12 1.5248E-12 - 1.0000E+04 5.5669E-11 3.0555E-11 1.5666E-12 9.8193E-13 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2889E+04 1.3238E+04 6.6621E+03 5.6710E+03 - 1.1220E-01 1.1441E+04 1.1703E+04 5.9114E+03 4.9997E+03 - 1.2589E-01 1.0080E+04 1.0255E+04 5.1797E+03 4.3562E+03 - 1.4125E-01 8.7854E+03 8.8962E+03 4.5110E+03 3.7538E+03 - 1.5849E-01 7.5670E+03 7.6411E+03 3.8914E+03 3.2009E+03 - 1.7783E-01 6.4215E+03 6.4904E+03 3.3072E+03 2.6905E+03 - 1.9953E-01 5.3701E+03 5.4389E+03 2.7789E+03 2.2352E+03 - 2.2387E-01 4.4276E+03 4.4678E+03 2.3079E+03 1.8446E+03 - 2.5119E-01 3.6017E+03 3.6272E+03 1.8892E+03 1.5080E+03 - 2.8184E-01 2.8949E+03 2.9226E+03 1.5327E+03 1.2145E+03 - 3.1623E-01 2.3108E+03 2.3321E+03 1.2302E+03 9.6505E+02 - 3.5481E-01 1.8225E+03 1.8363E+03 9.6763E+02 7.5751E+02 - 3.9811E-01 1.4259E+03 1.4243E+03 7.4758E+02 5.9191E+02 - 4.4668E-01 1.1028E+03 1.0932E+03 5.7752E+02 4.5666E+02 - 5.0119E-01 8.4711E+02 8.3384E+02 4.4292E+02 3.4506E+02 - 5.6234E-01 6.4708E+02 6.3500E+02 3.3643E+02 2.6193E+02 - 6.3096E-01 4.8993E+02 4.7931E+02 2.5280E+02 1.9599E+02 - 7.0795E-01 3.6749E+02 3.5873E+02 1.8764E+02 1.4528E+02 - 7.9433E-01 2.7494E+02 2.6474E+02 1.3806E+02 1.0711E+02 - 8.9125E-01 2.0613E+02 1.9422E+02 1.0151E+02 7.8343E+01 - 1.0000E+00 1.5354E+02 1.4530E+02 7.4065E+01 5.7275E+01 - 1.1220E+00 1.1481E+02 1.0754E+02 5.3558E+01 4.1710E+01 - 1.2589E+00 8.5512E+01 7.8832E+01 3.8886E+01 3.0123E+01 - 1.4125E+00 6.3617E+01 5.7900E+01 2.7915E+01 2.1537E+01 - 1.5849E+00 4.7426E+01 4.2194E+01 1.9913E+01 1.5476E+01 - 1.7783E+00 3.4890E+01 3.0670E+01 1.4286E+01 1.0947E+01 - 1.9953E+00 2.5526E+01 2.2533E+01 1.0105E+01 7.7768E+00 - 2.2387E+00 1.8630E+01 1.6313E+01 7.1300E+00 5.4212E+00 - 2.5119E+00 1.3649E+01 1.1649E+01 4.9893E+00 3.7883E+00 - 2.8184E+00 9.9234E+00 8.4081E+00 3.4804E+00 2.6998E+00 - 3.1623E+00 7.1820E+00 6.0257E+00 2.4056E+00 1.8342E+00 - 3.5481E+00 5.2205E+00 4.3280E+00 1.6455E+00 1.2630E+00 - 3.9811E+00 3.7775E+00 3.0958E+00 1.1358E+00 8.7081E-01 - 4.4668E+00 2.7114E+00 2.2088E+00 7.8120E-01 5.9223E-01 - 5.0119E+00 1.9514E+00 1.5734E+00 5.3386E-01 3.9742E-01 - 5.6234E+00 1.4038E+00 1.1257E+00 3.6188E-01 2.7136E-01 - 6.3096E+00 1.0057E+00 8.0596E-01 2.4472E-01 1.8301E-01 - 7.0795E+00 7.2090E-01 5.7679E-01 1.6438E-01 1.2544E-01 - 7.9433E+00 5.1659E-01 4.0723E-01 1.1170E-01 8.4222E-02 - 8.9125E+00 3.7284E-01 2.8559E-01 7.5499E-02 5.6669E-02 - 1.0000E+01 2.6528E-01 2.0284E-01 4.9542E-02 3.7556E-02 - 1.1220E+01 1.9010E-01 1.4383E-01 3.2679E-02 2.4982E-02 - 1.2589E+01 1.3544E-01 1.0146E-01 2.1352E-02 1.6543E-02 - 1.4125E+01 9.5986E-02 7.1948E-02 1.4479E-02 1.1261E-02 - 1.5849E+01 6.8028E-02 5.1076E-02 9.5819E-03 7.6254E-03 - 1.7783E+01 4.8412E-02 3.6491E-02 6.3090E-03 4.9565E-03 - 1.9953E+01 3.4653E-02 2.5846E-02 4.3510E-03 3.2180E-03 - 2.2387E+01 2.4758E-02 1.8191E-02 2.9336E-03 2.1749E-03 - 2.5119E+01 1.7758E-02 1.2904E-02 1.8972E-03 1.4835E-03 - 2.8184E+01 1.2619E-02 9.1075E-03 1.2294E-03 9.6785E-04 - 3.1623E+01 8.8111E-03 6.4098E-03 8.5397E-04 6.6634E-04 - 3.5481E+01 6.2347E-03 4.5231E-03 5.7144E-04 4.4603E-04 - 3.9811E+01 4.4169E-03 3.1704E-03 3.7853E-04 2.9930E-04 - 4.4668E+01 3.1233E-03 2.2324E-03 2.5575E-04 1.9930E-04 - 5.0119E+01 2.2051E-03 1.5697E-03 1.7180E-04 1.3577E-04 - 5.6234E+01 1.5578E-03 1.1053E-03 1.1481E-04 9.2695E-05 - 6.3096E+01 1.0941E-03 7.7976E-04 7.7933E-05 6.1168E-05 - 7.0795E+01 7.7063E-04 5.4242E-04 5.2813E-05 4.1186E-05 - 7.9433E+01 5.4313E-04 3.7904E-04 3.4861E-05 2.8794E-05 - 8.9125E+01 3.7969E-04 2.6662E-04 2.2423E-05 1.9246E-05 - 1.0000E+02 2.6762E-04 1.8476E-04 1.5883E-05 1.2670E-05 - 1.1220E+02 1.8695E-04 1.2860E-04 1.0613E-05 8.6178E-06 - 1.2589E+02 1.3147E-04 8.9601E-05 7.3005E-06 6.0411E-06 - 1.4125E+02 9.1953E-05 6.2396E-05 5.0293E-06 4.1528E-06 - 1.5849E+02 6.4231E-05 4.3227E-05 3.3166E-06 2.7523E-06 - 1.7783E+02 4.5051E-05 3.0087E-05 2.2477E-06 1.8697E-06 - 1.9953E+02 3.1479E-05 2.1036E-05 1.5715E-06 1.2953E-06 - 2.2387E+02 2.1944E-05 1.4513E-05 1.0690E-06 8.7063E-07 - 2.5119E+02 1.5297E-05 1.0121E-05 7.4450E-07 5.7574E-07 - 2.8184E+02 1.0595E-05 7.0053E-06 5.0864E-07 3.9525E-07 - 3.1623E+02 7.3875E-06 4.7815E-06 3.3416E-07 2.6445E-07 - 3.5481E+02 5.1081E-06 3.2824E-06 2.2368E-07 1.8065E-07 - 3.9811E+02 3.5370E-06 2.2660E-06 1.5335E-07 1.2427E-07 - 4.4668E+02 2.4617E-06 1.5630E-06 1.0290E-07 8.0787E-08 - 5.0119E+02 1.7066E-06 1.0716E-06 6.7010E-08 5.2957E-08 - 5.6234E+02 1.1792E-06 7.4080E-07 4.5409E-08 3.6509E-08 - 6.3096E+02 8.0860E-07 5.0506E-07 3.0728E-08 2.4008E-08 - 7.0795E+02 5.6122E-07 3.4705E-07 2.0664E-08 1.5640E-08 - 7.9433E+02 3.8492E-07 2.3567E-07 1.3882E-08 1.0668E-08 - 8.9125E+02 2.6108E-07 1.5909E-07 9.3402E-09 7.0828E-09 - 1.0000E+03 1.7948E-07 1.0838E-07 6.4450E-09 4.8069E-09 - 1.1220E+03 1.2199E-07 7.3322E-08 4.3803E-09 3.3310E-09 - 1.2589E+03 8.2961E-08 4.9693E-08 2.9186E-09 2.2336E-09 - 1.4125E+03 5.6005E-08 3.3442E-08 1.8990E-09 1.5093E-09 - 1.5849E+03 3.8217E-08 2.2370E-08 1.2246E-09 1.0412E-09 - 1.7783E+03 2.5680E-08 1.4873E-08 8.1812E-10 6.6679E-10 - 1.9953E+03 1.7224E-08 1.0120E-08 5.7847E-10 4.2982E-10 - 2.2387E+03 1.1643E-08 6.7700E-09 3.7063E-10 2.7558E-10 - 2.5119E+03 7.8376E-09 4.5473E-09 2.3658E-10 1.7935E-10 - 2.8184E+03 5.2536E-09 3.0226E-09 1.6644E-10 1.3121E-10 - 3.1623E+03 3.5478E-09 2.0389E-09 1.0966E-10 7.7495E-11 - 3.5481E+03 2.3256E-09 1.3289E-09 7.2618E-11 5.1184E-11 - 3.9811E+03 1.5697E-09 8.8633E-10 4.3335E-11 3.3631E-11 - 4.4668E+03 1.0330E-09 5.8553E-10 2.7090E-11 2.0779E-11 - 5.0119E+03 6.8094E-10 3.7978E-10 1.8896E-11 1.3984E-11 - 5.6234E+03 4.4823E-10 2.5262E-10 1.2038E-11 9.0110E-12 - 6.3096E+03 2.9658E-10 1.6790E-10 8.7688E-12 6.1777E-12 - 7.0795E+03 1.9617E-10 1.0890E-10 5.6653E-12 4.3606E-12 - 7.9433E+03 1.2904E-10 7.1148E-11 3.6471E-12 2.5985E-12 - 8.9125E+03 8.3769E-11 4.7288E-11 2.2544E-12 1.7524E-12 - 1.0000E+04 5.5190E-11 3.0814E-11 1.5046E-12 1.2346E-12 -average flux in [cosZ = 0.70 -- 0.80, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2897E+04 1.3092E+04 6.6081E+03 5.6702E+03 - 1.1220E-01 1.1414E+04 1.1597E+04 5.8711E+03 4.9981E+03 - 1.2589E-01 1.0024E+04 1.0166E+04 5.1436E+03 4.3534E+03 - 1.4125E-01 8.7325E+03 8.8459E+03 4.4570E+03 3.7484E+03 - 1.5849E-01 7.5206E+03 7.6098E+03 3.8451E+03 3.1871E+03 - 1.7783E-01 6.3839E+03 6.4498E+03 3.2826E+03 2.6958E+03 - 1.9953E-01 5.3623E+03 5.3920E+03 2.7507E+03 2.2446E+03 - 2.2387E-01 4.4256E+03 4.4535E+03 2.2818E+03 1.8480E+03 - 2.5119E-01 3.6038E+03 3.6228E+03 1.8750E+03 1.4988E+03 - 2.8184E-01 2.8957E+03 2.9122E+03 1.5200E+03 1.2088E+03 - 3.1623E-01 2.3034E+03 2.3191E+03 1.2145E+03 9.6620E+02 - 3.5481E-01 1.8151E+03 1.8231E+03 9.5565E+02 7.5447E+02 - 3.9811E-01 1.4145E+03 1.4199E+03 7.4991E+02 5.8586E+02 - 4.4668E-01 1.0933E+03 1.0906E+03 5.8109E+02 4.5235E+02 - 5.0119E-01 8.4113E+02 8.3165E+02 4.4247E+02 3.4741E+02 - 5.6234E-01 6.4625E+02 6.3076E+02 3.3568E+02 2.6103E+02 - 6.3096E-01 4.9119E+02 4.7536E+02 2.5170E+02 1.9454E+02 - 7.0795E-01 3.6693E+02 3.5562E+02 1.8850E+02 1.4616E+02 - 7.9433E-01 2.7653E+02 2.6615E+02 1.3862E+02 1.0761E+02 - 8.9125E-01 2.0805E+02 1.9655E+02 1.0083E+02 7.8629E+01 - 1.0000E+00 1.5437E+02 1.4661E+02 7.4207E+01 5.7785E+01 - 1.1220E+00 1.1487E+02 1.0845E+02 5.3881E+01 4.2070E+01 - 1.2589E+00 8.5867E+01 7.9173E+01 3.8711E+01 3.0383E+01 - 1.4125E+00 6.3807E+01 5.7973E+01 2.7747E+01 2.1715E+01 - 1.5849E+00 4.7272E+01 4.2481E+01 1.9897E+01 1.5376E+01 - 1.7783E+00 3.4656E+01 3.0892E+01 1.4146E+01 1.0995E+01 - 1.9953E+00 2.5573E+01 2.2474E+01 1.0095E+01 7.7559E+00 - 2.2387E+00 1.8858E+01 1.6214E+01 7.2346E+00 5.3930E+00 - 2.5119E+00 1.3694E+01 1.1643E+01 5.0469E+00 3.8282E+00 - 2.8184E+00 1.0010E+01 8.3727E+00 3.4793E+00 2.6902E+00 - 3.1623E+00 7.1693E+00 6.0103E+00 2.4072E+00 1.8339E+00 - 3.5481E+00 5.1808E+00 4.3070E+00 1.6530E+00 1.2799E+00 - 3.9811E+00 3.7585E+00 3.0808E+00 1.1389E+00 8.7832E-01 - 4.4668E+00 2.7135E+00 2.2081E+00 7.7897E-01 5.9518E-01 - 5.0119E+00 1.9522E+00 1.5685E+00 5.3256E-01 3.9842E-01 - 5.6234E+00 1.4061E+00 1.1106E+00 3.6545E-01 2.6945E-01 - 6.3096E+00 1.0121E+00 7.8949E-01 2.4539E-01 1.8448E-01 - 7.0795E+00 7.1960E-01 5.6556E-01 1.5998E-01 1.2489E-01 - 7.9433E+00 5.1090E-01 4.0599E-01 1.0737E-01 8.3579E-02 - 8.9125E+00 3.6643E-01 2.8634E-01 7.3562E-02 5.4802E-02 - 1.0000E+01 2.6333E-01 2.0286E-01 4.9759E-02 3.7230E-02 - 1.1220E+01 1.8845E-01 1.4460E-01 3.3100E-02 2.4751E-02 - 1.2589E+01 1.3455E-01 1.0271E-01 2.2109E-02 1.6852E-02 - 1.4125E+01 9.6000E-02 7.2226E-02 1.4777E-02 1.1473E-02 - 1.5849E+01 6.8911E-02 5.0885E-02 9.6415E-03 7.5841E-03 - 1.7783E+01 4.9028E-02 3.6156E-02 6.4974E-03 5.0110E-03 - 1.9953E+01 3.4704E-02 2.5880E-02 4.4250E-03 3.3899E-03 - 2.2387E+01 2.4781E-02 1.8359E-02 2.9684E-03 2.2397E-03 - 2.5119E+01 1.7558E-02 1.2995E-02 1.9869E-03 1.4839E-03 - 2.8184E+01 1.2339E-02 8.9869E-03 1.3247E-03 9.6008E-04 - 3.1623E+01 8.8410E-03 6.4250E-03 8.4997E-04 6.6630E-04 - 3.5481E+01 6.2629E-03 4.5324E-03 5.6669E-04 4.5160E-04 - 3.9811E+01 4.4266E-03 3.1872E-03 3.7839E-04 3.0487E-04 - 4.4668E+01 3.1269E-03 2.2479E-03 2.5606E-04 2.0380E-04 - 5.0119E+01 2.2137E-03 1.5811E-03 1.7147E-04 1.3612E-04 - 5.6234E+01 1.5644E-03 1.1056E-03 1.1359E-04 9.2540E-05 - 6.3096E+01 1.0991E-03 7.7510E-04 7.7945E-05 6.1432E-05 - 7.0795E+01 7.7579E-04 5.4431E-04 5.2191E-05 4.2209E-05 - 7.9433E+01 5.4561E-04 3.8041E-04 3.4598E-05 2.9195E-05 - 8.9125E+01 3.8027E-04 2.6576E-04 2.3197E-05 1.9274E-05 - 1.0000E+02 2.6687E-04 1.8547E-04 1.5915E-05 1.3169E-05 - 1.1220E+02 1.8716E-04 1.2900E-04 1.0943E-05 8.7699E-06 - 1.2589E+02 1.3135E-04 8.9295E-05 7.4490E-06 6.0428E-06 - 1.4125E+02 9.1898E-05 6.2168E-05 4.9398E-06 4.1378E-06 - 1.5849E+02 6.4393E-05 4.3406E-05 3.3329E-06 2.7305E-06 - 1.7783E+02 4.5043E-05 2.9877E-05 2.2930E-06 1.8402E-06 - 1.9953E+02 3.1408E-05 2.0776E-05 1.5376E-06 1.2698E-06 - 2.2387E+02 2.1759E-05 1.4433E-05 1.0198E-06 8.6945E-07 - 2.5119E+02 1.5053E-05 9.9298E-06 7.0035E-07 5.7405E-07 - 2.8184E+02 1.0508E-05 6.9674E-06 4.7850E-07 3.7750E-07 - 3.1623E+02 7.4073E-06 4.7729E-06 3.3226E-07 2.6014E-07 - 3.5481E+02 5.1481E-06 3.2874E-06 2.2480E-07 1.7718E-07 - 3.9811E+02 3.5658E-06 2.2747E-06 1.5214E-07 1.2197E-07 - 4.4668E+02 2.4596E-06 1.5730E-06 1.0422E-07 8.1748E-08 - 5.0119E+02 1.7063E-06 1.0802E-06 6.9433E-08 5.6599E-08 - 5.6234E+02 1.1828E-06 7.3502E-07 4.6957E-08 3.7363E-08 - 6.3096E+02 8.0848E-07 5.0129E-07 3.1331E-08 2.4129E-08 - 7.0795E+02 5.5606E-07 3.4423E-07 2.0867E-08 1.6408E-08 - 7.9433E+02 3.8134E-07 2.3258E-07 1.4547E-08 1.1327E-08 - 8.9125E+02 2.6081E-07 1.5905E-07 9.8999E-09 7.4806E-09 - 1.0000E+03 1.8000E-07 1.0964E-07 6.5191E-09 5.0112E-09 - 1.1220E+03 1.2200E-07 7.3771E-08 4.4704E-09 3.2706E-09 - 1.2589E+03 8.3192E-08 4.9942E-08 2.9590E-09 2.2276E-09 - 1.4125E+03 5.6587E-08 3.3311E-08 1.8229E-09 1.4178E-09 - 1.5849E+03 3.8175E-08 2.2737E-08 1.2299E-09 8.9729E-10 - 1.7783E+03 2.5491E-08 1.5168E-08 8.5198E-10 5.9946E-10 - 1.9953E+03 1.7169E-08 1.0132E-08 5.8361E-10 4.2344E-10 - 2.2387E+03 1.1594E-08 6.8090E-09 3.9841E-10 2.9254E-10 - 2.5119E+03 7.7922E-09 4.5221E-09 2.5484E-10 1.9099E-10 - 2.8184E+03 5.1725E-09 2.9799E-09 1.5699E-10 1.1603E-10 - 3.1623E+03 3.5436E-09 2.0473E-09 1.0683E-10 7.8059E-11 - 3.5481E+03 2.3147E-09 1.3229E-09 6.9209E-11 5.0221E-11 - 3.9811E+03 1.5525E-09 8.7956E-10 4.5518E-11 3.3437E-11 - 4.4668E+03 1.0381E-09 5.8060E-10 2.9737E-11 2.3555E-11 - 5.0119E+03 6.8412E-10 3.8254E-10 1.9107E-11 1.5277E-11 - 5.6234E+03 4.5279E-10 2.5597E-10 1.2321E-11 8.8800E-12 - 6.3096E+03 2.9762E-10 1.6600E-10 8.9860E-12 5.6776E-12 - 7.0795E+03 1.9412E-10 1.0920E-10 5.5810E-12 3.7630E-12 - 7.9433E+03 1.2807E-10 7.1717E-11 3.5460E-12 2.5404E-12 - 8.9125E+03 8.6275E-11 4.7336E-11 2.6156E-12 1.6848E-12 - 1.0000E+04 5.6688E-11 3.0367E-11 1.6173E-12 1.1086E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3446E+04 1.3608E+04 6.8291E+03 5.9534E+03 - 1.1220E-01 1.1833E+04 1.1941E+04 6.0609E+03 5.2227E+03 - 1.2589E-01 1.0347E+04 1.0420E+04 5.2904E+03 4.5312E+03 - 1.4125E-01 8.9786E+03 9.0252E+03 4.5569E+03 3.8945E+03 - 1.5849E-01 7.7188E+03 7.7315E+03 3.8926E+03 3.3069E+03 - 1.7783E-01 6.5269E+03 6.5379E+03 3.3128E+03 2.7768E+03 - 1.9953E-01 5.4541E+03 5.4489E+03 2.7913E+03 2.3166E+03 - 2.2387E-01 4.5120E+03 4.4938E+03 2.3261E+03 1.9128E+03 - 2.5119E-01 3.6594E+03 3.6595E+03 1.9057E+03 1.5617E+03 - 2.8184E-01 2.9416E+03 2.9490E+03 1.5453E+03 1.2576E+03 - 3.1623E-01 2.3398E+03 2.3574E+03 1.2469E+03 9.9752E+02 - 3.5481E-01 1.8403E+03 1.8518E+03 9.9150E+02 7.8459E+02 - 3.9811E-01 1.4391E+03 1.4369E+03 7.7521E+02 6.1199E+02 - 4.4668E-01 1.1189E+03 1.1085E+03 5.9950E+02 4.7118E+02 - 5.0119E-01 8.6041E+02 8.5432E+02 4.6055E+02 3.6328E+02 - 5.6234E-01 6.5913E+02 6.4956E+02 3.4931E+02 2.7798E+02 - 6.3096E-01 5.0381E+02 4.8692E+02 2.6356E+02 2.0848E+02 - 7.0795E-01 3.7932E+02 3.6552E+02 2.0044E+02 1.5487E+02 - 7.9433E-01 2.8507E+02 2.7435E+02 1.4878E+02 1.1456E+02 - 8.9125E-01 2.1275E+02 2.0390E+02 1.0833E+02 8.4418E+01 - 1.0000E+00 1.5886E+02 1.5205E+02 7.9615E+01 6.2171E+01 - 1.1220E+00 1.1872E+02 1.1265E+02 5.8514E+01 4.5180E+01 - 1.2589E+00 8.8466E+01 8.2726E+01 4.2531E+01 3.2733E+01 - 1.4125E+00 6.5968E+01 6.0679E+01 3.0685E+01 2.3686E+01 - 1.5849E+00 4.9132E+01 4.4747E+01 2.2257E+01 1.6985E+01 - 1.7783E+00 3.6041E+01 3.2602E+01 1.5754E+01 1.2094E+01 - 1.9953E+00 2.6441E+01 2.3638E+01 1.1202E+01 8.6582E+00 - 2.2387E+00 1.9461E+01 1.7285E+01 8.0856E+00 6.0857E+00 - 2.5119E+00 1.4111E+01 1.2397E+01 5.7062E+00 4.2245E+00 - 2.8184E+00 1.0278E+01 8.8923E+00 3.9002E+00 2.9116E+00 - 3.1623E+00 7.4757E+00 6.3633E+00 2.7106E+00 2.0633E+00 - 3.5481E+00 5.4109E+00 4.5556E+00 1.8901E+00 1.4238E+00 - 3.9811E+00 3.9063E+00 3.2597E+00 1.3056E+00 9.7617E-01 - 4.4668E+00 2.8087E+00 2.3204E+00 8.9380E-01 6.6766E-01 - 5.0119E+00 2.0248E+00 1.6637E+00 6.1346E-01 4.5781E-01 - 5.6234E+00 1.4572E+00 1.1903E+00 4.1767E-01 3.1340E-01 - 6.3096E+00 1.0388E+00 8.4079E-01 2.8070E-01 2.1086E-01 - 7.0795E+00 7.4757E-01 5.8798E-01 1.8634E-01 1.4084E-01 - 7.9433E+00 5.3962E-01 4.2196E-01 1.2451E-01 9.7297E-02 - 8.9125E+00 3.8482E-01 3.0162E-01 8.4660E-02 6.6871E-02 - 1.0000E+01 2.7463E-01 2.1358E-01 5.7409E-02 4.3620E-02 - 1.1220E+01 1.9498E-01 1.5154E-01 3.7908E-02 2.8940E-02 - 1.2589E+01 1.3835E-01 1.0694E-01 2.5385E-02 1.9266E-02 - 1.4125E+01 9.8788E-02 7.5478E-02 1.7196E-02 1.3117E-02 - 1.5849E+01 7.1151E-02 5.3520E-02 1.1538E-02 8.8372E-03 - 1.7783E+01 5.0333E-02 3.8250E-02 7.6780E-03 5.9004E-03 - 1.9953E+01 3.5600E-02 2.6928E-02 5.0615E-03 3.8822E-03 - 2.2387E+01 2.5532E-02 1.9026E-02 3.2742E-03 2.5674E-03 - 2.5119E+01 1.8353E-02 1.3349E-02 2.1482E-03 1.7702E-03 - 2.8184E+01 1.3041E-02 9.3076E-03 1.4551E-03 1.1702E-03 - 3.1623E+01 9.2037E-03 6.7732E-03 9.8627E-04 7.6883E-04 - 3.5481E+01 6.5211E-03 4.7688E-03 6.5110E-04 5.1644E-04 - 3.9811E+01 4.6123E-03 3.3616E-03 4.3407E-04 3.4887E-04 - 4.4668E+01 3.2592E-03 2.3623E-03 2.8877E-04 2.3415E-04 - 5.0119E+01 2.3072E-03 1.6620E-03 1.9627E-04 1.5543E-04 - 5.6234E+01 1.6339E-03 1.1668E-03 1.2989E-04 1.0538E-04 - 6.3096E+01 1.1529E-03 8.1700E-04 8.6125E-05 7.2201E-05 - 7.0795E+01 8.1470E-04 5.7275E-04 5.8739E-05 4.7342E-05 - 7.9433E+01 5.7265E-04 4.0309E-04 3.9198E-05 3.0873E-05 - 8.9125E+01 4.0030E-04 2.8428E-04 2.6848E-05 2.1157E-05 - 1.0000E+02 2.8233E-04 1.9661E-04 1.7996E-05 1.4462E-05 - 1.1220E+02 1.9842E-04 1.3680E-04 1.2026E-05 9.8440E-06 - 1.2589E+02 1.3894E-04 9.5292E-05 8.1742E-06 6.7102E-06 - 1.4125E+02 9.7214E-05 6.6360E-05 5.5638E-06 4.4625E-06 - 1.5849E+02 6.7798E-05 4.6153E-05 3.7394E-06 3.0294E-06 - 1.7783E+02 4.7156E-05 3.2085E-05 2.5388E-06 2.0501E-06 - 1.9953E+02 3.3047E-05 2.2226E-05 1.7043E-06 1.3846E-06 - 2.2387E+02 2.3226E-05 1.5276E-05 1.1532E-06 9.1287E-07 - 2.5119E+02 1.6188E-05 1.0638E-05 8.0888E-07 6.2362E-07 - 2.8184E+02 1.1212E-05 7.4124E-06 5.3709E-07 4.2502E-07 - 3.1623E+02 7.8969E-06 5.1539E-06 3.6272E-07 2.9471E-07 - 3.5481E+02 5.4595E-06 3.5635E-06 2.4849E-07 2.0055E-07 - 3.9811E+02 3.7789E-06 2.4542E-06 1.6651E-07 1.3354E-07 - 4.4668E+02 2.6324E-06 1.6840E-06 1.1369E-07 8.8844E-08 - 5.0119E+02 1.8295E-06 1.1498E-06 7.9631E-08 6.0438E-08 - 5.6234E+02 1.2684E-06 7.9616E-07 5.0763E-08 4.0688E-08 - 6.3096E+02 8.7391E-07 5.4741E-07 3.3749E-08 2.7427E-08 - 7.0795E+02 6.0077E-07 3.7667E-07 2.3412E-08 1.8708E-08 - 7.9433E+02 4.1324E-07 2.5706E-07 1.6166E-08 1.2555E-08 - 8.9125E+02 2.8542E-07 1.7481E-07 1.0792E-08 8.2756E-09 - 1.0000E+03 1.9630E-07 1.1943E-07 6.9540E-09 5.4484E-09 - 1.1220E+03 1.3282E-07 8.0358E-08 4.7274E-09 3.6093E-09 - 1.2589E+03 9.0238E-08 5.4186E-08 3.3070E-09 2.3598E-09 - 1.4125E+03 6.1895E-08 3.6650E-08 2.1802E-09 1.5593E-09 - 1.5849E+03 4.2314E-08 2.4789E-08 1.3904E-09 1.0330E-09 - 1.7783E+03 2.8589E-08 1.6821E-08 9.1707E-10 6.8020E-10 - 1.9953E+03 1.9175E-08 1.1306E-08 6.1134E-10 4.4707E-10 - 2.2387E+03 1.2811E-08 7.5985E-09 4.0172E-10 3.0089E-10 - 2.5119E+03 8.6556E-09 5.1090E-09 2.6802E-10 1.9299E-10 - 2.8184E+03 5.8712E-09 3.3875E-09 1.7504E-10 1.2529E-10 - 3.1623E+03 4.0123E-09 2.3142E-09 1.1599E-10 9.0169E-11 - 3.5481E+03 2.5988E-09 1.4980E-09 8.0461E-11 5.6363E-11 - 3.9811E+03 1.7371E-09 1.0012E-09 5.4720E-11 3.4665E-11 - 4.4668E+03 1.1368E-09 6.6045E-10 3.3677E-11 2.4526E-11 - 5.0119E+03 7.5454E-10 4.3014E-10 2.1524E-11 1.6292E-11 - 5.6234E+03 5.0732E-10 2.8419E-10 1.4712E-11 1.0364E-11 - 6.3096E+03 3.3535E-10 1.8904E-10 9.8271E-12 6.9310E-12 - 7.0795E+03 2.2128E-10 1.2493E-10 6.3058E-12 4.8490E-12 - 7.9433E+03 1.4778E-10 8.1894E-11 4.3829E-12 3.3905E-12 - 8.9125E+03 9.8562E-11 5.3351E-11 2.8144E-12 2.0815E-12 - 1.0000E+04 6.3843E-11 3.5095E-11 1.7129E-12 1.3150E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3388E+04 1.3429E+04 6.7332E+03 5.9652E+03 - 1.1220E-01 1.1769E+04 1.1801E+04 5.9305E+03 5.2150E+03 - 1.2589E-01 1.0296E+04 1.0285E+04 5.1707E+03 4.5414E+03 - 1.4125E-01 8.9335E+03 8.8837E+03 4.5136E+03 3.9031E+03 - 1.5849E-01 7.6626E+03 7.6066E+03 3.8642E+03 3.3060E+03 - 1.7783E-01 6.4924E+03 6.4431E+03 3.2599E+03 2.7835E+03 - 1.9953E-01 5.4142E+03 5.3777E+03 2.7455E+03 2.3170E+03 - 2.2387E-01 4.4504E+03 4.4316E+03 2.2872E+03 1.9109E+03 - 2.5119E-01 3.6179E+03 3.6064E+03 1.8800E+03 1.5520E+03 - 2.8184E-01 2.9170E+03 2.9144E+03 1.5270E+03 1.2454E+03 - 3.1623E-01 2.3284E+03 2.3256E+03 1.2265E+03 9.9440E+02 - 3.5481E-01 1.8416E+03 1.8242E+03 9.7231E+02 7.8203E+02 - 3.9811E-01 1.4417E+03 1.4237E+03 7.5859E+02 6.0901E+02 - 4.4668E-01 1.1187E+03 1.1043E+03 5.8816E+02 4.7237E+02 - 5.0119E-01 8.5872E+02 8.4921E+02 4.5544E+02 3.6468E+02 - 5.6234E-01 6.5755E+02 6.4716E+02 3.4912E+02 2.7721E+02 - 6.3096E-01 5.0128E+02 4.8711E+02 2.6293E+02 2.0590E+02 - 7.0795E-01 3.7848E+02 3.6562E+02 1.9520E+02 1.5335E+02 - 7.9433E-01 2.8391E+02 2.7195E+02 1.4648E+02 1.1505E+02 - 8.9125E-01 2.1133E+02 2.0179E+02 1.0867E+02 8.5018E+01 - 1.0000E+00 1.5994E+02 1.5154E+02 7.9349E+01 6.2714E+01 - 1.1220E+00 1.1939E+02 1.1269E+02 5.8160E+01 4.5419E+01 - 1.2589E+00 8.9001E+01 8.3218E+01 4.2538E+01 3.2630E+01 - 1.4125E+00 6.6238E+01 6.0915E+01 3.0822E+01 2.3544E+01 - 1.5849E+00 4.9008E+01 4.4769E+01 2.1866E+01 1.6809E+01 - 1.7783E+00 3.6190E+01 3.2635E+01 1.5559E+01 1.2098E+01 - 1.9953E+00 2.6516E+01 2.3563E+01 1.1244E+01 8.6569E+00 - 2.2387E+00 1.9530E+01 1.7299E+01 7.9370E+00 6.1223E+00 - 2.5119E+00 1.4351E+01 1.2512E+01 5.5087E+00 4.3373E+00 - 2.8184E+00 1.0525E+01 8.9528E+00 3.9149E+00 3.0273E+00 - 3.1623E+00 7.5238E+00 6.3631E+00 2.7489E+00 2.0807E+00 - 3.5481E+00 5.4313E+00 4.5623E+00 1.9058E+00 1.4466E+00 - 3.9811E+00 3.8984E+00 3.2842E+00 1.3032E+00 9.7886E-01 - 4.4668E+00 2.8210E+00 2.3427E+00 9.0042E-01 6.6661E-01 - 5.0119E+00 2.0378E+00 1.6615E+00 6.1963E-01 4.5995E-01 - 5.6234E+00 1.4647E+00 1.1907E+00 4.1828E-01 3.1903E-01 - 6.3096E+00 1.0647E+00 8.5324E-01 2.8487E-01 2.1568E-01 - 7.0795E+00 7.6232E-01 6.0126E-01 1.9521E-01 1.4519E-01 - 7.9433E+00 5.4302E-01 4.2903E-01 1.2909E-01 9.8475E-02 - 8.9125E+00 3.8609E-01 3.1010E-01 8.7871E-02 6.5353E-02 - 1.0000E+01 2.7481E-01 2.1393E-01 5.7299E-02 4.2539E-02 - 1.1220E+01 1.9622E-01 1.5185E-01 3.8056E-02 2.8617E-02 - 1.2589E+01 1.3924E-01 1.0735E-01 2.5802E-02 1.9468E-02 - 1.4125E+01 9.9248E-02 7.6164E-02 1.7180E-02 1.2802E-02 - 1.5849E+01 7.1474E-02 5.4401E-02 1.1328E-02 8.7087E-03 - 1.7783E+01 5.0570E-02 3.8546E-02 7.5815E-03 5.8936E-03 - 1.9953E+01 3.5878E-02 2.7259E-02 4.9939E-03 3.9949E-03 - 2.2387E+01 2.5760E-02 1.9096E-02 3.3174E-03 2.6784E-03 - 2.5119E+01 1.8314E-02 1.3454E-02 2.3210E-03 1.7042E-03 - 2.8184E+01 1.3019E-02 9.5866E-03 1.5279E-03 1.1811E-03 - 3.1623E+01 9.2020E-03 6.7834E-03 9.8213E-04 7.7172E-04 - 3.5481E+01 6.5280E-03 4.7816E-03 6.5329E-04 5.1256E-04 - 3.9811E+01 4.6278E-03 3.3776E-03 4.3807E-04 3.4158E-04 - 4.4668E+01 3.2760E-03 2.3781E-03 2.9476E-04 2.3605E-04 - 5.0119E+01 2.3105E-03 1.6715E-03 1.9906E-04 1.5971E-04 - 5.6234E+01 1.6325E-03 1.1758E-03 1.3314E-04 1.0410E-04 - 6.3096E+01 1.1478E-03 8.2818E-04 8.8787E-05 7.0181E-05 - 7.0795E+01 8.0558E-04 5.7734E-04 6.0128E-05 4.7984E-05 - 7.9433E+01 5.6960E-04 4.0086E-04 3.9496E-05 3.2408E-05 - 8.9125E+01 4.0233E-04 2.7996E-04 2.6309E-05 2.2249E-05 - 1.0000E+02 2.8261E-04 1.9648E-04 1.7834E-05 1.4681E-05 - 1.1220E+02 1.9852E-04 1.3705E-04 1.2022E-05 9.9986E-06 - 1.2589E+02 1.3958E-04 9.5351E-05 8.0937E-06 6.7691E-06 - 1.4125E+02 9.7495E-05 6.6594E-05 5.5356E-06 4.5296E-06 - 1.5849E+02 6.7976E-05 4.6311E-05 3.7924E-06 3.0339E-06 - 1.7783E+02 4.7250E-05 3.1988E-05 2.5702E-06 2.0941E-06 - 1.9953E+02 3.2939E-05 2.2291E-05 1.7333E-06 1.4241E-06 - 2.2387E+02 2.3135E-05 1.5463E-05 1.1578E-06 9.6208E-07 - 2.5119E+02 1.6134E-05 1.0708E-05 8.1240E-07 6.4331E-07 - 2.8184E+02 1.1201E-05 7.3899E-06 5.5444E-07 4.4127E-07 - 3.1623E+02 7.8867E-06 5.1445E-06 3.6370E-07 2.8932E-07 - 3.5481E+02 5.4667E-06 3.5377E-06 2.4439E-07 1.9820E-07 - 3.9811E+02 3.7925E-06 2.4447E-06 1.6786E-07 1.3680E-07 - 4.4668E+02 2.6302E-06 1.6836E-06 1.1387E-07 9.0422E-08 - 5.0119E+02 1.8242E-06 1.1587E-06 7.4601E-08 6.1425E-08 - 5.6234E+02 1.2743E-06 8.0752E-07 5.1197E-08 4.0949E-08 - 6.3096E+02 8.7626E-07 5.5021E-07 3.4854E-08 2.6984E-08 - 7.0795E+02 6.0420E-07 3.7739E-07 2.3109E-08 1.8024E-08 - 7.9433E+02 4.1643E-07 2.5680E-07 1.6162E-08 1.2364E-08 - 8.9125E+02 2.8710E-07 1.7412E-07 1.1005E-08 8.3822E-09 - 1.0000E+03 1.9814E-07 1.2111E-07 7.1192E-09 5.6711E-09 - 1.1220E+03 1.3429E-07 8.1679E-08 4.7775E-09 3.8236E-09 - 1.2589E+03 9.1802E-08 5.5635E-08 3.1994E-09 2.4504E-09 - 1.4125E+03 6.2019E-08 3.7465E-08 2.1566E-09 1.6126E-09 - 1.5849E+03 4.2034E-08 2.4814E-08 1.4515E-09 1.0734E-09 - 1.7783E+03 2.8430E-08 1.6845E-08 1.0033E-09 7.1821E-10 - 1.9953E+03 1.9174E-08 1.1411E-08 6.4112E-10 4.5639E-10 - 2.2387E+03 1.2971E-08 7.6411E-09 4.3127E-10 3.2861E-10 - 2.5119E+03 8.6901E-09 5.1086E-09 2.8533E-10 2.0393E-10 - 2.8184E+03 5.8080E-09 3.3808E-09 1.7919E-10 1.2416E-10 - 3.1623E+03 3.9957E-09 2.2995E-09 1.2674E-10 8.9665E-11 - 3.5481E+03 2.6083E-09 1.5060E-09 8.3979E-11 5.7888E-11 - 3.9811E+03 1.7389E-09 9.9749E-10 5.3742E-11 3.5951E-11 - 4.4668E+03 1.1540E-09 6.5608E-10 3.4422E-11 2.3427E-11 - 5.0119E+03 7.5931E-10 4.3657E-10 2.3137E-11 1.6769E-11 - 5.6234E+03 5.0410E-10 2.8338E-10 1.4987E-11 1.1370E-11 - 6.3096E+03 3.3710E-10 1.9186E-10 9.5195E-12 7.1060E-12 - 7.0795E+03 2.2233E-10 1.2372E-10 6.2146E-12 4.5402E-12 - 7.9433E+03 1.4597E-10 8.1852E-11 4.3543E-12 3.0357E-12 - 8.9125E+03 9.6157E-11 5.4174E-11 2.9908E-12 2.0769E-12 - 1.0000E+04 6.3672E-11 3.5878E-11 1.9525E-12 1.3821E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3353E+04 1.3291E+04 6.6338E+03 5.9735E+03 - 1.1220E-01 1.1760E+04 1.1692E+04 5.8381E+03 5.2706E+03 - 1.2589E-01 1.0330E+04 1.0194E+04 5.0903E+03 4.5577E+03 - 1.4125E-01 8.9194E+03 8.8056E+03 4.4116E+03 3.9014E+03 - 1.5849E-01 7.6247E+03 7.5643E+03 3.7798E+03 3.3098E+03 - 1.7783E-01 6.4664E+03 6.4016E+03 3.2014E+03 2.7787E+03 - 1.9953E-01 5.4095E+03 5.3216E+03 2.6992E+03 2.3215E+03 - 2.2387E-01 4.4652E+03 4.3918E+03 2.2513E+03 1.9225E+03 - 2.5119E-01 3.6337E+03 3.5852E+03 1.8559E+03 1.5646E+03 - 2.8184E-01 2.9253E+03 2.8786E+03 1.4993E+03 1.2554E+03 - 3.1623E-01 2.3401E+03 2.3016E+03 1.2030E+03 1.0024E+03 - 3.5481E-01 1.8400E+03 1.8149E+03 9.6066E+02 7.8994E+02 - 3.9811E-01 1.4379E+03 1.4060E+03 7.5772E+02 6.1122E+02 - 4.4668E-01 1.1209E+03 1.0966E+03 5.9109E+02 4.7468E+02 - 5.0119E-01 8.6167E+02 8.4721E+02 4.5461E+02 3.6529E+02 - 5.6234E-01 6.5728E+02 6.4518E+02 3.4844E+02 2.7756E+02 - 6.3096E-01 5.0124E+02 4.8574E+02 2.6365E+02 2.0899E+02 - 7.0795E-01 3.7681E+02 3.6175E+02 1.9528E+02 1.5511E+02 - 7.9433E-01 2.8298E+02 2.7137E+02 1.4525E+02 1.1592E+02 - 8.9125E-01 2.1387E+02 2.0205E+02 1.0875E+02 8.5632E+01 - 1.0000E+00 1.5883E+02 1.5103E+02 7.8921E+01 6.2284E+01 - 1.1220E+00 1.1855E+02 1.1280E+02 5.7743E+01 4.5270E+01 - 1.2589E+00 8.8421E+01 8.3247E+01 4.2143E+01 3.2837E+01 - 1.4125E+00 6.5808E+01 6.0929E+01 3.0390E+01 2.3733E+01 - 1.5849E+00 4.8870E+01 4.4390E+01 2.1751E+01 1.7051E+01 - 1.7783E+00 3.5834E+01 3.2367E+01 1.5742E+01 1.2258E+01 - 1.9953E+00 2.6311E+01 2.3530E+01 1.1312E+01 8.6534E+00 - 2.2387E+00 1.9460E+01 1.7249E+01 7.9858E+00 6.0125E+00 - 2.5119E+00 1.4181E+01 1.2345E+01 5.5714E+00 4.2583E+00 - 2.8184E+00 1.0281E+01 8.7732E+00 3.8897E+00 2.9727E+00 - 3.1623E+00 7.4297E+00 6.3390E+00 2.7375E+00 2.0610E+00 - 3.5481E+00 5.4017E+00 4.5650E+00 1.8928E+00 1.4224E+00 - 3.9811E+00 3.9036E+00 3.2475E+00 1.2932E+00 9.6869E-01 - 4.4668E+00 2.8033E+00 2.3274E+00 8.8972E-01 6.7323E-01 - 5.0119E+00 2.0123E+00 1.6517E+00 6.1653E-01 4.5891E-01 - 5.6234E+00 1.4525E+00 1.1759E+00 4.1808E-01 3.1194E-01 - 6.3096E+00 1.0359E+00 8.4688E-01 2.8155E-01 2.1503E-01 - 7.0795E+00 7.4696E-01 6.0051E-01 1.8986E-01 1.4249E-01 - 7.9433E+00 5.3606E-01 4.2301E-01 1.2690E-01 9.5517E-02 - 8.9125E+00 3.7900E-01 3.0240E-01 8.2605E-02 6.4904E-02 - 1.0000E+01 2.7484E-01 2.1442E-01 5.6897E-02 4.3285E-02 - 1.1220E+01 1.9766E-01 1.5261E-01 3.9154E-02 2.8778E-02 - 1.2589E+01 1.4027E-01 1.0779E-01 2.5839E-02 1.9405E-02 - 1.4125E+01 1.0009E-01 7.6201E-02 1.6907E-02 1.2971E-02 - 1.5849E+01 7.1450E-02 5.3694E-02 1.1324E-02 8.7704E-03 - 1.7783E+01 5.0502E-02 3.8298E-02 7.5235E-03 5.9691E-03 - 1.9953E+01 3.5511E-02 2.7151E-02 4.9958E-03 3.9430E-03 - 2.2387E+01 2.5320E-02 1.9148E-02 3.3490E-03 2.6920E-03 - 2.5119E+01 1.8340E-02 1.3603E-02 2.2620E-03 1.8416E-03 - 2.8184E+01 1.3361E-02 9.6974E-03 1.4837E-03 1.1889E-03 - 3.1623E+01 9.1964E-03 6.7961E-03 9.9171E-04 7.7316E-04 - 3.5481E+01 6.5204E-03 4.7760E-03 6.5787E-04 5.1315E-04 - 3.9811E+01 4.6335E-03 3.3613E-03 4.3945E-04 3.4469E-04 - 4.4668E+01 3.2825E-03 2.3666E-03 2.9330E-04 2.3017E-04 - 5.0119E+01 2.3223E-03 1.6614E-03 1.9476E-04 1.5574E-04 - 5.6234E+01 1.6376E-03 1.1678E-03 1.3063E-04 1.0478E-04 - 6.3096E+01 1.1528E-03 8.2140E-04 8.7820E-05 7.1165E-05 - 7.0795E+01 8.1477E-04 5.7285E-04 5.9055E-05 4.8258E-05 - 7.9433E+01 5.7619E-04 3.9892E-04 3.9334E-05 3.2023E-05 - 8.9125E+01 4.0521E-04 2.8258E-04 2.5503E-05 2.1635E-05 - 1.0000E+02 2.8253E-04 1.9714E-04 1.8037E-05 1.4591E-05 - 1.1220E+02 1.9789E-04 1.3765E-04 1.2337E-05 9.7614E-06 - 1.2589E+02 1.3896E-04 9.5919E-05 8.3720E-06 6.5653E-06 - 1.4125E+02 9.7500E-05 6.6559E-05 5.5862E-06 4.5168E-06 - 1.5849E+02 6.8202E-05 4.6361E-05 3.7567E-06 3.1231E-06 - 1.7783E+02 4.7625E-05 3.2249E-05 2.5115E-06 2.0813E-06 - 1.9953E+02 3.3277E-05 2.2285E-05 1.6544E-06 1.4569E-06 - 2.2387E+02 2.3276E-05 1.5415E-05 1.1403E-06 9.8607E-07 - 2.5119E+02 1.6236E-05 1.0697E-05 7.7104E-07 6.5592E-07 - 2.8184E+02 1.1321E-05 7.4143E-06 5.2235E-07 4.4490E-07 - 3.1623E+02 7.9025E-06 5.1364E-06 3.6520E-07 2.9313E-07 - 3.5481E+02 5.4833E-06 3.5581E-06 2.4577E-07 1.9504E-07 - 3.9811E+02 3.8097E-06 2.4691E-06 1.6820E-07 1.3353E-07 - 4.4668E+02 2.6499E-06 1.6954E-06 1.1536E-07 8.9981E-08 - 5.0119E+02 1.8389E-06 1.1561E-06 7.6512E-08 6.1101E-08 - 5.6234E+02 1.2799E-06 8.0548E-07 5.1282E-08 4.0738E-08 - 6.3096E+02 8.7984E-07 5.5028E-07 3.4647E-08 2.7424E-08 - 7.0795E+02 6.0270E-07 3.7386E-07 2.3708E-08 1.7898E-08 - 7.9433E+02 4.1584E-07 2.5601E-07 1.5804E-08 1.2310E-08 - 8.9125E+02 2.8583E-07 1.7556E-07 1.0385E-08 8.3767E-09 - 1.0000E+03 1.9721E-07 1.2011E-07 7.0473E-09 5.4585E-09 - 1.1220E+03 1.3290E-07 8.0867E-08 4.8267E-09 3.7842E-09 - 1.2589E+03 9.0604E-08 5.4844E-08 3.2806E-09 2.4595E-09 - 1.4125E+03 6.1438E-08 3.7112E-08 2.1359E-09 1.6072E-09 - 1.5849E+03 4.1470E-08 2.4953E-08 1.3710E-09 1.0069E-09 - 1.7783E+03 2.8242E-08 1.6768E-08 9.1752E-10 6.7872E-10 - 1.9953E+03 1.9102E-08 1.1303E-08 6.3123E-10 4.6878E-10 - 2.2387E+03 1.2961E-08 7.5094E-09 4.2025E-10 3.0837E-10 - 2.5119E+03 8.7459E-09 5.0529E-09 2.6832E-10 1.9515E-10 - 2.8184E+03 5.8203E-09 3.3488E-09 1.7778E-10 1.3428E-10 - 3.1623E+03 3.9968E-09 2.3094E-09 1.1974E-10 8.8904E-11 - 3.5481E+03 2.5963E-09 1.4930E-09 8.0393E-11 5.6588E-11 - 3.9811E+03 1.7208E-09 9.9135E-10 5.4177E-11 3.5038E-11 - 4.4668E+03 1.1543E-09 6.6937E-10 3.4631E-11 2.3427E-11 - 5.0119E+03 7.6927E-10 4.3913E-10 2.2974E-11 1.6851E-11 - 5.6234E+03 5.0284E-10 2.8676E-10 1.4085E-11 1.2197E-11 - 6.3096E+03 3.3618E-10 1.8899E-10 9.8739E-12 7.0643E-12 - 7.0795E+03 2.2043E-10 1.2369E-10 6.4814E-12 4.4483E-12 - 7.9433E+03 1.4545E-10 7.9751E-11 4.2439E-12 2.9956E-12 - 8.9125E+03 9.5257E-11 5.2225E-11 2.5762E-12 1.9130E-12 - 1.0000E+04 6.3468E-11 3.4478E-11 1.6341E-12 1.2641E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3405E+04 1.3305E+04 6.6018E+03 6.0235E+03 - 1.1220E-01 1.1779E+04 1.1704E+04 5.8158E+03 5.2849E+03 - 1.2589E-01 1.0318E+04 1.0207E+04 5.0709E+03 4.5738E+03 - 1.4125E-01 8.9478E+03 8.8130E+03 4.4017E+03 3.9282E+03 - 1.5849E-01 7.6604E+03 7.5328E+03 3.7834E+03 3.3359E+03 - 1.7783E-01 6.4867E+03 6.3766E+03 3.2088E+03 2.7975E+03 - 1.9953E-01 5.4135E+03 5.3322E+03 2.6938E+03 2.3232E+03 - 2.2387E-01 4.4586E+03 4.3816E+03 2.2522E+03 1.9163E+03 - 2.5119E-01 3.6240E+03 3.5659E+03 1.8508E+03 1.5631E+03 - 2.8184E-01 2.9077E+03 2.8746E+03 1.5025E+03 1.2640E+03 - 3.1623E-01 2.3193E+03 2.2935E+03 1.2067E+03 1.0124E+03 - 3.5481E-01 1.8315E+03 1.8118E+03 9.4973E+02 7.9405E+02 - 3.9811E-01 1.4368E+03 1.4135E+03 7.4667E+02 6.1461E+02 - 4.4668E-01 1.1221E+03 1.0939E+03 5.8390E+02 4.7187E+02 - 5.0119E-01 8.6258E+02 8.3993E+02 4.4977E+02 3.6315E+02 - 5.6234E-01 6.5728E+02 6.4105E+02 3.4407E+02 2.7960E+02 - 6.3096E-01 4.9812E+02 4.8637E+02 2.5969E+02 2.1062E+02 - 7.0795E-01 3.7486E+02 3.6462E+02 1.9612E+02 1.5676E+02 - 7.9433E-01 2.8259E+02 2.7249E+02 1.4598E+02 1.1645E+02 - 8.9125E-01 2.1417E+02 2.0363E+02 1.0669E+02 8.5818E+01 - 1.0000E+00 1.5970E+02 1.5078E+02 7.9052E+01 6.1924E+01 - 1.1220E+00 1.1862E+02 1.1141E+02 5.7496E+01 4.4793E+01 - 1.2589E+00 8.8199E+01 8.2682E+01 4.2096E+01 3.2592E+01 - 1.4125E+00 6.5568E+01 6.0929E+01 3.0560E+01 2.3554E+01 - 1.5849E+00 4.8719E+01 4.4692E+01 2.1914E+01 1.7171E+01 - 1.7783E+00 3.5777E+01 3.2711E+01 1.5680E+01 1.2238E+01 - 1.9953E+00 2.6322E+01 2.3645E+01 1.1191E+01 8.6409E+00 - 2.2387E+00 1.9345E+01 1.7053E+01 7.9878E+00 6.1645E+00 - 2.5119E+00 1.4129E+01 1.2143E+01 5.5764E+00 4.2810E+00 - 2.8184E+00 1.0293E+01 8.6982E+00 3.8894E+00 2.9720E+00 - 3.1623E+00 7.4268E+00 6.3506E+00 2.7359E+00 2.0484E+00 - 3.5481E+00 5.3769E+00 4.5382E+00 1.8993E+00 1.4085E+00 - 3.9811E+00 3.8904E+00 3.2537E+00 1.2972E+00 9.6924E-01 - 4.4668E+00 2.8055E+00 2.3454E+00 8.9306E-01 6.6763E-01 - 5.0119E+00 2.0188E+00 1.6778E+00 6.1153E-01 4.4819E-01 - 5.6234E+00 1.4594E+00 1.1846E+00 4.1236E-01 3.0215E-01 - 6.3096E+00 1.0485E+00 8.3784E-01 2.8357E-01 2.0298E-01 - 7.0795E+00 7.5198E-01 5.9613E-01 1.9087E-01 1.3952E-01 - 7.9433E+00 5.3697E-01 4.2715E-01 1.2597E-01 9.6701E-02 - 8.9125E+00 3.8537E-01 3.0491E-01 8.6373E-02 6.4707E-02 - 1.0000E+01 2.7487E-01 2.1390E-01 5.7269E-02 4.3266E-02 - 1.1220E+01 1.9556E-01 1.5129E-01 3.7908E-02 2.9301E-02 - 1.2589E+01 1.3972E-01 1.0723E-01 2.5535E-02 1.9869E-02 - 1.4125E+01 9.9783E-02 7.5660E-02 1.6991E-02 1.3078E-02 - 1.5849E+01 7.0924E-02 5.3786E-02 1.1256E-02 8.6110E-03 - 1.7783E+01 5.0523E-02 3.8331E-02 7.6315E-03 5.7420E-03 - 1.9953E+01 3.5892E-02 2.6849E-02 4.9749E-03 3.8236E-03 - 2.2387E+01 2.5589E-02 1.8807E-02 3.3105E-03 2.5135E-03 - 2.5119E+01 1.8142E-02 1.3523E-02 2.2154E-03 1.6861E-03 - 2.8184E+01 1.2979E-02 9.6312E-03 1.4760E-03 1.1367E-03 - 3.1623E+01 9.2424E-03 6.7886E-03 9.7571E-04 7.6795E-04 - 3.5481E+01 6.5486E-03 4.8004E-03 6.5431E-04 5.1954E-04 - 3.9811E+01 4.6430E-03 3.3765E-03 4.4327E-04 3.4907E-04 - 4.4668E+01 3.2802E-03 2.3799E-03 2.9452E-04 2.3248E-04 - 5.0119E+01 2.3092E-03 1.6758E-03 1.9499E-04 1.5834E-04 - 5.6234E+01 1.6413E-03 1.1776E-03 1.3175E-04 1.0494E-04 - 6.3096E+01 1.1583E-03 8.2580E-04 8.9526E-05 6.9224E-05 - 7.0795E+01 8.1200E-04 5.7767E-04 5.8782E-05 4.7284E-05 - 7.9433E+01 5.7621E-04 4.0609E-04 3.9138E-05 3.2043E-05 - 8.9125E+01 4.0566E-04 2.8276E-04 2.6442E-05 2.1485E-05 - 1.0000E+02 2.8368E-04 1.9754E-04 1.7967E-05 1.4618E-05 - 1.1220E+02 1.9872E-04 1.3756E-04 1.2060E-05 9.8391E-06 - 1.2589E+02 1.3851E-04 9.5875E-05 8.1657E-06 6.6574E-06 - 1.4125E+02 9.7116E-05 6.6567E-05 5.5287E-06 4.4558E-06 - 1.5849E+02 6.7961E-05 4.6437E-05 3.8010E-06 3.0301E-06 - 1.7783E+02 4.7535E-05 3.2400E-05 2.5578E-06 2.0354E-06 - 1.9953E+02 3.3293E-05 2.2247E-05 1.6854E-06 1.3636E-06 - 2.2387E+02 2.3350E-05 1.5396E-05 1.1701E-06 9.3448E-07 - 2.5119E+02 1.6324E-05 1.0794E-05 8.2434E-07 6.2167E-07 - 2.8184E+02 1.1281E-05 7.4539E-06 5.5784E-07 4.1577E-07 - 3.1623E+02 7.8894E-06 5.1433E-06 3.6433E-07 2.9409E-07 - 3.5481E+02 5.4668E-06 3.5465E-06 2.5099E-07 1.9889E-07 - 3.9811E+02 3.7961E-06 2.4507E-06 1.6962E-07 1.3373E-07 - 4.4668E+02 2.6391E-06 1.6893E-06 1.1308E-07 9.1693E-08 - 5.0119E+02 1.8315E-06 1.1557E-06 7.6922E-08 6.1440E-08 - 5.6234E+02 1.2749E-06 8.0298E-07 5.2079E-08 4.0320E-08 - 6.3096E+02 8.7567E-07 5.4739E-07 3.4598E-08 2.6470E-08 - 7.0795E+02 6.0292E-07 3.7516E-07 2.3052E-08 1.8024E-08 - 7.9433E+02 4.1469E-07 2.5798E-07 1.5685E-08 1.2674E-08 - 8.9125E+02 2.8258E-07 1.7568E-07 1.0609E-08 8.2952E-09 - 1.0000E+03 1.9526E-07 1.2000E-07 7.0601E-09 5.5404E-09 - 1.1220E+03 1.3256E-07 8.1151E-08 4.7779E-09 3.7197E-09 - 1.2589E+03 9.1128E-08 5.4821E-08 3.2005E-09 2.4437E-09 - 1.4125E+03 6.2195E-08 3.7098E-08 2.1402E-09 1.6617E-09 - 1.5849E+03 4.2041E-08 2.5304E-08 1.4503E-09 1.1105E-09 - 1.7783E+03 2.8571E-08 1.6981E-08 9.7599E-10 7.1004E-10 - 1.9953E+03 1.9148E-08 1.1369E-08 6.2316E-10 4.5480E-10 - 2.2387E+03 1.2950E-08 7.6762E-09 4.1232E-10 3.0024E-10 - 2.5119E+03 8.7367E-09 5.2308E-09 2.5432E-10 1.9526E-10 - 2.8184E+03 5.8534E-09 3.4647E-09 1.8019E-10 1.2682E-10 - 3.1623E+03 3.9866E-09 2.3152E-09 1.1990E-10 8.7651E-11 - 3.5481E+03 2.6075E-09 1.5134E-09 7.7723E-11 5.7877E-11 - 3.9811E+03 1.7456E-09 9.9772E-10 5.2368E-11 3.7220E-11 - 4.4668E+03 1.1484E-09 6.5047E-10 3.4096E-11 2.3967E-11 - 5.0119E+03 7.6715E-10 4.3774E-10 2.2512E-11 1.5775E-11 - 5.6234E+03 5.1788E-10 2.9112E-10 1.5193E-11 1.0407E-11 - 6.3096E+03 3.3351E-10 1.8827E-10 1.0018E-11 7.9178E-12 - 7.0795E+03 2.2100E-10 1.2163E-10 6.5776E-12 5.4131E-12 - 7.9433E+03 1.4698E-10 8.0423E-11 3.9872E-12 3.0269E-12 - 8.9125E+03 9.6929E-11 5.3489E-11 2.6129E-12 1.8556E-12 - 1.0000E+04 6.4030E-11 3.4854E-11 1.8466E-12 1.2480E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3455E+04 1.3387E+04 6.5892E+03 6.0622E+03 - 1.1220E-01 1.1856E+04 1.1754E+04 5.8419E+03 5.2833E+03 - 1.2589E-01 1.0363E+04 1.0240E+04 5.1313E+03 4.5646E+03 - 1.4125E-01 8.9718E+03 8.8776E+03 4.4169E+03 3.9389E+03 - 1.5849E-01 7.6913E+03 7.5997E+03 3.7821E+03 3.3615E+03 - 1.7783E-01 6.5155E+03 6.4121E+03 3.2138E+03 2.8167E+03 - 1.9953E-01 5.4572E+03 5.3427E+03 2.7101E+03 2.3491E+03 - 2.2387E-01 4.4889E+03 4.3942E+03 2.2643E+03 1.9337E+03 - 2.5119E-01 3.6404E+03 3.5877E+03 1.8583E+03 1.5750E+03 - 2.8184E-01 2.9362E+03 2.8928E+03 1.5060E+03 1.2688E+03 - 3.1623E-01 2.3362E+03 2.2935E+03 1.2129E+03 1.0020E+03 - 3.5481E-01 1.8363E+03 1.8074E+03 9.6633E+02 7.9110E+02 - 3.9811E-01 1.4394E+03 1.4163E+03 7.5861E+02 6.2031E+02 - 4.4668E-01 1.1225E+03 1.0950E+03 5.8623E+02 4.7709E+02 - 5.0119E-01 8.6327E+02 8.3855E+02 4.5032E+02 3.6233E+02 - 5.6234E-01 6.5644E+02 6.4182E+02 3.4563E+02 2.7658E+02 - 6.3096E-01 5.0059E+02 4.8438E+02 2.6107E+02 2.0943E+02 - 7.0795E-01 3.7775E+02 3.6332E+02 1.9638E+02 1.5593E+02 - 7.9433E-01 2.8174E+02 2.7251E+02 1.4659E+02 1.1516E+02 - 8.9125E-01 2.1180E+02 2.0358E+02 1.0700E+02 8.5249E+01 - 1.0000E+00 1.5872E+02 1.5095E+02 7.9035E+01 6.1514E+01 - 1.1220E+00 1.1857E+02 1.1211E+02 5.7882E+01 4.4895E+01 - 1.2589E+00 8.8386E+01 8.2449E+01 4.1964E+01 3.2694E+01 - 1.4125E+00 6.5535E+01 6.0312E+01 3.0544E+01 2.3626E+01 - 1.5849E+00 4.8529E+01 4.4175E+01 2.1893E+01 1.6828E+01 - 1.7783E+00 3.5778E+01 3.2229E+01 1.5614E+01 1.2119E+01 - 1.9953E+00 2.6298E+01 2.3429E+01 1.1127E+01 8.6991E+00 - 2.2387E+00 1.9288E+01 1.6970E+01 7.8279E+00 6.0533E+00 - 2.5119E+00 1.3976E+01 1.2196E+01 5.4979E+00 4.2067E+00 - 2.8184E+00 1.0215E+01 8.8248E+00 3.8445E+00 2.9247E+00 - 3.1623E+00 7.4628E+00 6.3132E+00 2.7270E+00 2.0554E+00 - 3.5481E+00 5.3886E+00 4.5399E+00 1.8772E+00 1.4230E+00 - 3.9811E+00 3.8868E+00 3.2768E+00 1.2989E+00 9.8650E-01 - 4.4668E+00 2.7982E+00 2.3358E+00 8.8796E-01 6.6808E-01 - 5.0119E+00 2.0092E+00 1.6560E+00 6.0280E-01 4.5609E-01 - 5.6234E+00 1.4641E+00 1.1862E+00 4.1170E-01 3.1595E-01 - 6.3096E+00 1.0506E+00 8.5082E-01 2.7766E-01 2.1245E-01 - 7.0795E+00 7.4179E-01 6.0322E-01 1.8821E-01 1.4044E-01 - 7.9433E+00 5.3609E-01 4.1981E-01 1.2914E-01 9.5786E-02 - 8.9125E+00 3.8692E-01 2.9433E-01 8.4499E-02 6.4778E-02 - 1.0000E+01 2.7450E-01 2.1394E-01 5.7966E-02 4.3616E-02 - 1.1220E+01 1.9747E-01 1.5221E-01 3.8403E-02 2.9402E-02 - 1.2589E+01 1.4145E-01 1.0812E-01 2.5796E-02 1.9601E-02 - 1.4125E+01 1.0056E-01 7.7169E-02 1.7207E-02 1.3016E-02 - 1.5849E+01 7.1677E-02 5.4883E-02 1.1402E-02 8.5443E-03 - 1.7783E+01 5.1381E-02 3.8965E-02 7.5385E-03 5.7062E-03 - 1.9953E+01 3.6413E-02 2.7690E-02 5.1298E-03 3.8224E-03 - 2.2387E+01 2.5910E-02 1.9480E-02 3.4920E-03 2.6180E-03 - 2.5119E+01 1.8489E-02 1.3487E-02 2.3724E-03 1.8308E-03 - 2.8184E+01 1.3267E-02 9.7597E-03 1.5330E-03 1.1726E-03 - 3.1623E+01 9.2178E-03 6.7992E-03 9.8916E-04 7.6792E-04 - 3.5481E+01 6.5446E-03 4.7961E-03 6.5783E-04 5.1427E-04 - 3.9811E+01 4.6332E-03 3.3717E-03 4.3712E-04 3.4262E-04 - 4.4668E+01 3.2785E-03 2.3728E-03 2.9469E-04 2.3411E-04 - 5.0119E+01 2.3235E-03 1.6694E-03 1.9742E-04 1.6041E-04 - 5.6234E+01 1.6366E-03 1.1712E-03 1.2973E-04 1.0701E-04 - 6.3096E+01 1.1542E-03 8.1742E-04 8.7657E-05 7.1407E-05 - 7.0795E+01 8.1577E-04 5.7446E-04 5.8594E-05 4.7823E-05 - 7.9433E+01 5.7197E-04 4.0213E-04 3.8495E-05 3.3088E-05 - 8.9125E+01 4.0155E-04 2.8210E-04 2.6257E-05 2.2103E-05 - 1.0000E+02 2.8303E-04 1.9780E-04 1.7959E-05 1.4617E-05 - 1.1220E+02 1.9886E-04 1.3750E-04 1.2050E-05 9.8481E-06 - 1.2589E+02 1.3919E-04 9.5466E-05 8.1463E-06 6.6704E-06 - 1.4125E+02 9.7330E-05 6.6793E-05 5.5488E-06 4.4960E-06 - 1.5849E+02 6.8450E-05 4.6634E-05 3.7846E-06 3.0096E-06 - 1.7783E+02 4.7830E-05 3.2167E-05 2.5881E-06 2.0495E-06 - 1.9953E+02 3.3074E-05 2.2316E-05 1.7397E-06 1.4095E-06 - 2.2387E+02 2.3076E-05 1.5550E-05 1.1526E-06 9.4382E-07 - 2.5119E+02 1.6116E-05 1.0810E-05 7.6829E-07 6.2116E-07 - 2.8184E+02 1.1255E-05 7.4638E-06 5.3402E-07 4.2669E-07 - 3.1623E+02 7.9106E-06 5.1414E-06 3.6844E-07 2.9316E-07 - 3.5481E+02 5.4899E-06 3.5318E-06 2.4673E-07 1.9625E-07 - 3.9811E+02 3.7971E-06 2.4389E-06 1.7029E-07 1.3387E-07 - 4.4668E+02 2.6293E-06 1.6760E-06 1.1273E-07 9.1512E-08 - 5.0119E+02 1.8209E-06 1.1530E-06 7.4877E-08 5.9710E-08 - 5.6234E+02 1.2699E-06 8.0308E-07 5.1067E-08 4.1140E-08 - 6.3096E+02 8.7599E-07 5.4829E-07 3.4803E-08 2.7974E-08 - 7.0795E+02 6.0467E-07 3.7296E-07 2.3459E-08 1.8116E-08 - 7.9433E+02 4.1608E-07 2.5409E-07 1.5726E-08 1.1656E-08 - 8.9125E+02 2.8651E-07 1.7406E-07 1.0661E-08 7.9933E-09 - 1.0000E+03 1.9762E-07 1.2022E-07 6.9606E-09 5.5368E-09 - 1.1220E+03 1.3313E-07 8.1023E-08 4.8299E-09 3.5905E-09 - 1.2589E+03 9.0645E-08 5.4747E-08 3.3060E-09 2.3612E-09 - 1.4125E+03 6.2065E-08 3.7196E-08 2.2124E-09 1.6165E-09 - 1.5849E+03 4.1913E-08 2.5344E-08 1.4819E-09 1.0531E-09 - 1.7783E+03 2.8294E-08 1.6819E-08 9.2965E-10 6.8695E-10 - 1.9953E+03 1.9142E-08 1.1235E-08 6.0545E-10 4.6298E-10 - 2.2387E+03 1.2981E-08 7.5280E-09 4.1218E-10 3.1376E-10 - 2.5119E+03 8.7224E-09 5.0794E-09 2.7999E-10 1.8323E-10 - 2.8184E+03 5.8901E-09 3.3979E-09 1.8565E-10 1.2684E-10 - 3.1623E+03 4.0005E-09 2.2908E-09 1.2503E-10 8.7643E-11 - 3.5481E+03 2.5904E-09 1.4839E-09 8.1942E-11 5.8068E-11 - 3.9811E+03 1.7154E-09 9.8237E-10 5.3892E-11 3.9402E-11 - 4.4668E+03 1.1413E-09 6.5346E-10 3.4619E-11 2.6588E-11 - 5.0119E+03 7.6754E-10 4.3251E-10 2.1753E-11 1.6905E-11 - 5.6234E+03 5.1283E-10 2.8312E-10 1.5628E-11 1.0754E-11 - 6.3096E+03 3.3142E-10 1.8556E-10 9.7295E-12 7.0182E-12 - 7.0795E+03 2.2132E-10 1.2302E-10 5.9267E-12 4.5940E-12 - 7.9433E+03 1.4661E-10 8.2013E-11 4.1491E-12 3.0153E-12 - 8.9125E+03 9.6637E-11 5.3733E-11 2.8977E-12 2.1037E-12 - 1.0000E+04 6.4654E-11 3.5115E-11 1.8111E-12 1.2847E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3581E+04 1.3492E+04 6.7138E+03 6.0346E+03 - 1.1220E-01 1.1936E+04 1.1854E+04 5.9616E+03 5.2934E+03 - 1.2589E-01 1.0422E+04 1.0379E+04 5.2260E+03 4.5825E+03 - 1.4125E-01 9.0396E+03 8.9625E+03 4.5004E+03 3.9328E+03 - 1.5849E-01 7.7713E+03 7.6487E+03 3.8551E+03 3.3467E+03 - 1.7783E-01 6.5608E+03 6.4848E+03 3.2788E+03 2.8201E+03 - 1.9953E-01 5.4586E+03 5.4157E+03 2.7513E+03 2.3501E+03 - 2.2387E-01 4.4974E+03 4.4663E+03 2.2868E+03 1.9408E+03 - 2.5119E-01 3.6679E+03 3.6310E+03 1.8872E+03 1.5735E+03 - 2.8184E-01 2.9408E+03 2.9125E+03 1.5274E+03 1.2662E+03 - 3.1623E-01 2.3327E+03 2.3129E+03 1.2213E+03 1.0073E+03 - 3.5481E-01 1.8470E+03 1.8265E+03 9.6838E+02 7.9461E+02 - 3.9811E-01 1.4480E+03 1.4266E+03 7.6292E+02 6.2256E+02 - 4.4668E-01 1.1245E+03 1.1014E+03 5.9273E+02 4.7850E+02 - 5.0119E-01 8.6468E+02 8.4558E+02 4.5424E+02 3.6375E+02 - 5.6234E-01 6.5967E+02 6.4268E+02 3.4573E+02 2.7574E+02 - 6.3096E-01 4.9929E+02 4.8334E+02 2.6186E+02 2.0802E+02 - 7.0795E-01 3.7500E+02 3.6404E+02 1.9646E+02 1.5656E+02 - 7.9433E-01 2.8180E+02 2.7314E+02 1.4623E+02 1.1622E+02 - 8.9125E-01 2.1225E+02 2.0270E+02 1.0788E+02 8.4298E+01 - 1.0000E+00 1.5871E+02 1.4981E+02 7.9239E+01 6.1660E+01 - 1.1220E+00 1.1874E+02 1.1116E+02 5.7851E+01 4.4862E+01 - 1.2589E+00 8.8069E+01 8.2365E+01 4.2316E+01 3.2416E+01 - 1.4125E+00 6.5113E+01 6.0161E+01 3.0389E+01 2.3398E+01 - 1.5849E+00 4.8494E+01 4.3970E+01 2.1576E+01 1.6871E+01 - 1.7783E+00 3.6004E+01 3.2298E+01 1.5508E+01 1.2025E+01 - 1.9953E+00 2.6419E+01 2.3453E+01 1.1189E+01 8.4441E+00 - 2.2387E+00 1.9254E+01 1.6883E+01 7.9690E+00 5.9540E+00 - 2.5119E+00 1.4060E+01 1.2155E+01 5.6472E+00 4.2177E+00 - 2.8184E+00 1.0236E+01 8.7614E+00 3.9537E+00 2.8648E+00 - 3.1623E+00 7.4299E+00 6.3594E+00 2.7538E+00 2.0480E+00 - 3.5481E+00 5.4062E+00 4.5646E+00 1.9136E+00 1.4132E+00 - 3.9811E+00 3.8859E+00 3.2569E+00 1.3031E+00 9.7212E-01 - 4.4668E+00 2.7816E+00 2.3277E+00 8.9719E-01 6.6738E-01 - 5.0119E+00 2.0157E+00 1.6557E+00 6.0974E-01 4.5551E-01 - 5.6234E+00 1.4604E+00 1.1690E+00 4.0939E-01 3.1054E-01 - 6.3096E+00 1.0477E+00 8.3392E-01 2.7756E-01 2.1363E-01 - 7.0795E+00 7.4689E-01 5.9962E-01 1.8790E-01 1.4534E-01 - 7.9433E+00 5.3366E-01 4.2258E-01 1.2853E-01 9.5515E-02 - 8.9125E+00 3.8476E-01 2.9771E-01 8.4919E-02 6.4391E-02 - 1.0000E+01 2.7530E-01 2.1182E-01 5.6951E-02 4.3112E-02 - 1.1220E+01 1.9552E-01 1.5052E-01 3.8371E-02 2.8856E-02 - 1.2589E+01 1.3933E-01 1.0675E-01 2.5546E-02 1.9080E-02 - 1.4125E+01 9.9911E-02 7.5744E-02 1.6991E-02 1.2659E-02 - 1.5849E+01 7.0962E-02 5.3212E-02 1.1509E-02 8.4338E-03 - 1.7783E+01 5.0250E-02 3.7640E-02 7.5911E-03 5.6726E-03 - 1.9953E+01 3.6047E-02 2.6884E-02 4.8960E-03 3.8723E-03 - 2.2387E+01 2.5722E-02 1.9215E-02 3.2693E-03 2.5952E-03 - 2.5119E+01 1.8273E-02 1.3523E-02 2.2210E-03 1.7957E-03 - 2.8184E+01 1.2934E-02 9.6324E-03 1.5154E-03 1.2446E-03 - 3.1623E+01 9.1963E-03 6.7672E-03 9.8446E-04 7.6992E-04 - 3.5481E+01 6.5048E-03 4.7750E-03 6.4929E-04 5.1318E-04 - 3.9811E+01 4.6238E-03 3.3681E-03 4.3714E-04 3.4710E-04 - 4.4668E+01 3.2934E-03 2.3755E-03 2.9917E-04 2.3224E-04 - 5.0119E+01 2.3180E-03 1.6714E-03 2.0096E-04 1.5816E-04 - 5.6234E+01 1.6349E-03 1.1785E-03 1.3154E-04 1.0535E-04 - 6.3096E+01 1.1566E-03 8.2455E-04 8.7661E-05 7.0523E-05 - 7.0795E+01 8.1234E-04 5.7736E-04 5.9319E-05 4.6967E-05 - 7.9433E+01 5.7026E-04 4.0731E-04 3.9933E-05 3.1628E-05 - 8.9125E+01 4.0126E-04 2.8287E-04 2.6855E-05 2.1640E-05 - 1.0000E+02 2.8215E-04 1.9707E-04 1.8027E-05 1.4585E-05 - 1.1220E+02 1.9829E-04 1.3817E-04 1.2137E-05 9.7463E-06 - 1.2589E+02 1.3894E-04 9.6108E-05 7.9722E-06 6.6930E-06 - 1.4125E+02 9.7286E-05 6.6614E-05 5.5081E-06 4.5820E-06 - 1.5849E+02 6.8364E-05 4.6194E-05 3.8010E-06 3.0636E-06 - 1.7783E+02 4.8068E-05 3.1991E-05 2.5326E-06 2.0674E-06 - 1.9953E+02 3.3445E-05 2.2349E-05 1.7319E-06 1.4112E-06 - 2.2387E+02 2.3274E-05 1.5558E-05 1.1728E-06 9.3821E-07 - 2.5119E+02 1.6363E-05 1.0734E-05 7.8022E-07 6.3031E-07 - 2.8184E+02 1.1398E-05 7.5033E-06 5.3683E-07 4.4486E-07 - 3.1623E+02 7.8890E-06 5.1565E-06 3.6256E-07 2.9267E-07 - 3.5481E+02 5.4794E-06 3.5465E-06 2.4400E-07 1.9633E-07 - 3.9811E+02 3.8134E-06 2.4471E-06 1.6440E-07 1.3172E-07 - 4.4668E+02 2.6425E-06 1.6857E-06 1.1187E-07 8.7636E-08 - 5.0119E+02 1.8221E-06 1.1588E-06 7.7243E-08 5.8909E-08 - 5.6234E+02 1.2674E-06 8.0129E-07 5.2444E-08 4.0325E-08 - 6.3096E+02 8.6899E-07 5.4708E-07 3.4754E-08 2.7241E-08 - 7.0795E+02 6.0091E-07 3.7453E-07 2.3001E-08 1.7992E-08 - 7.9433E+02 4.1365E-07 2.5588E-07 1.5544E-08 1.2058E-08 - 8.9125E+02 2.8390E-07 1.7471E-07 1.0759E-08 8.1395E-09 - 1.0000E+03 1.9599E-07 1.1949E-07 7.1466E-09 5.3106E-09 - 1.1220E+03 1.3338E-07 8.0480E-08 4.6786E-09 3.6247E-09 - 1.2589E+03 9.0766E-08 5.4560E-08 3.1067E-09 2.4386E-09 - 1.4125E+03 6.1832E-08 3.6986E-08 2.1099E-09 1.5908E-09 - 1.5849E+03 4.1742E-08 2.5233E-08 1.4145E-09 9.9868E-10 - 1.7783E+03 2.8150E-08 1.6957E-08 9.7643E-10 6.5321E-10 - 1.9953E+03 1.9085E-08 1.1463E-08 6.2521E-10 4.6989E-10 - 2.2387E+03 1.2958E-08 7.6602E-09 4.0480E-10 3.1861E-10 - 2.5119E+03 8.7744E-09 5.0686E-09 2.6381E-10 2.0788E-10 - 2.8184E+03 5.8439E-09 3.3799E-09 1.8675E-10 1.2806E-10 - 3.1623E+03 3.9993E-09 2.3166E-09 1.2030E-10 9.1175E-11 - 3.5481E+03 2.6299E-09 1.4913E-09 7.8695E-11 5.9565E-11 - 3.9811E+03 1.7391E-09 9.8637E-10 4.9946E-11 3.6323E-11 - 4.4668E+03 1.1527E-09 6.5851E-10 3.3769E-11 2.1961E-11 - 5.0119E+03 7.6474E-10 4.3609E-10 2.3197E-11 1.4279E-11 - 5.6234E+03 5.0323E-10 2.8916E-10 1.4706E-11 1.1078E-11 - 6.3096E+03 3.3766E-10 1.9223E-10 9.7683E-12 6.9954E-12 - 7.0795E+03 2.2171E-10 1.2586E-10 6.4272E-12 4.4389E-12 - 7.9433E+03 1.4407E-10 8.1389E-11 4.4263E-12 2.9891E-12 - 8.9125E+03 9.6230E-11 5.3144E-11 2.8086E-12 1.8955E-12 - 1.0000E+04 6.3432E-11 3.4964E-11 1.7167E-12 1.1896E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3587E+04 1.3660E+04 6.8690E+03 6.0503E+03 - 1.1220E-01 1.1926E+04 1.2023E+04 6.0835E+03 5.3040E+03 - 1.2589E-01 1.0453E+04 1.0507E+04 5.3004E+03 4.6150E+03 - 1.4125E-01 9.0825E+03 9.0727E+03 4.5719E+03 3.9564E+03 - 1.5849E-01 7.7664E+03 7.7611E+03 3.9178E+03 3.3552E+03 - 1.7783E-01 6.5761E+03 6.5539E+03 3.3295E+03 2.8302E+03 - 1.9953E-01 5.5052E+03 5.4560E+03 2.8053E+03 2.3554E+03 - 2.2387E-01 4.5255E+03 4.4981E+03 2.3177E+03 1.9340E+03 - 2.5119E-01 3.6772E+03 3.6689E+03 1.9023E+03 1.5806E+03 - 2.8184E-01 2.9492E+03 2.9420E+03 1.5460E+03 1.2703E+03 - 3.1623E-01 2.3482E+03 2.3393E+03 1.2347E+03 1.0044E+03 - 3.5481E-01 1.8537E+03 1.8472E+03 9.8147E+02 7.8714E+02 - 3.9811E-01 1.4510E+03 1.4334E+03 7.6846E+02 6.1327E+02 - 4.4668E-01 1.1276E+03 1.1046E+03 5.9595E+02 4.7622E+02 - 5.0119E-01 8.6222E+02 8.4669E+02 4.6024E+02 3.6524E+02 - 5.6234E-01 6.5459E+02 6.4170E+02 3.5036E+02 2.7444E+02 - 6.3096E-01 4.9791E+02 4.8579E+02 2.6375E+02 2.0603E+02 - 7.0795E-01 3.7630E+02 3.6474E+02 1.9719E+02 1.5504E+02 - 7.9433E-01 2.8351E+02 2.7313E+02 1.4546E+02 1.1511E+02 - 8.9125E-01 2.1131E+02 2.0391E+02 1.0750E+02 8.4748E+01 - 1.0000E+00 1.5889E+02 1.5088E+02 7.9150E+01 6.2157E+01 - 1.1220E+00 1.1849E+02 1.1149E+02 5.8099E+01 4.5278E+01 - 1.2589E+00 8.8004E+01 8.2320E+01 4.2112E+01 3.2603E+01 - 1.4125E+00 6.5691E+01 6.0668E+01 3.0201E+01 2.3635E+01 - 1.5849E+00 4.8849E+01 4.4428E+01 2.1918E+01 1.6931E+01 - 1.7783E+00 3.5841E+01 3.2549E+01 1.5715E+01 1.2075E+01 - 1.9953E+00 2.6199E+01 2.3702E+01 1.1035E+01 8.6926E+00 - 2.2387E+00 1.9235E+01 1.6995E+01 7.7963E+00 6.1193E+00 - 2.5119E+00 1.4053E+01 1.2163E+01 5.5330E+00 4.2247E+00 - 2.8184E+00 1.0229E+01 8.7219E+00 3.8774E+00 2.9375E+00 - 3.1623E+00 7.4259E+00 6.3476E+00 2.7126E+00 2.0675E+00 - 3.5481E+00 5.3775E+00 4.5360E+00 1.8870E+00 1.4356E+00 - 3.9811E+00 3.8982E+00 3.2588E+00 1.2944E+00 9.8570E-01 - 4.4668E+00 2.8098E+00 2.3405E+00 8.7672E-01 6.7354E-01 - 5.0119E+00 2.0387E+00 1.6742E+00 5.9701E-01 4.6309E-01 - 5.6234E+00 1.4683E+00 1.1856E+00 4.1098E-01 3.1205E-01 - 6.3096E+00 1.0382E+00 8.4759E-01 2.8009E-01 2.1299E-01 - 7.0795E+00 7.4236E-01 6.0182E-01 1.8895E-01 1.4462E-01 - 7.9433E+00 5.3535E-01 4.2545E-01 1.2690E-01 9.7743E-02 - 8.9125E+00 3.8714E-01 3.0104E-01 8.4235E-02 6.5618E-02 - 1.0000E+01 2.7601E-01 2.1368E-01 5.6932E-02 4.2937E-02 - 1.1220E+01 1.9564E-01 1.5109E-01 3.8023E-02 2.8487E-02 - 1.2589E+01 1.3936E-01 1.0660E-01 2.5307E-02 1.8726E-02 - 1.4125E+01 9.9853E-02 7.5671E-02 1.6762E-02 1.2599E-02 - 1.5849E+01 7.0542E-02 5.3592E-02 1.1236E-02 8.7045E-03 - 1.7783E+01 5.0189E-02 3.8068E-02 7.5184E-03 5.7975E-03 - 1.9953E+01 3.6049E-02 2.7076E-02 5.0017E-03 3.8357E-03 - 2.2387E+01 2.5736E-02 1.9053E-02 3.2590E-03 2.5463E-03 - 2.5119E+01 1.8100E-02 1.3532E-02 2.1351E-03 1.7264E-03 - 2.8184E+01 1.2816E-02 9.6612E-03 1.4501E-03 1.1757E-03 - 3.1623E+01 9.2090E-03 6.7507E-03 9.8677E-04 7.7124E-04 - 3.5481E+01 6.5351E-03 4.7648E-03 6.5649E-04 5.1748E-04 - 3.9811E+01 4.6351E-03 3.3552E-03 4.3701E-04 3.5074E-04 - 4.4668E+01 3.2659E-03 2.3652E-03 2.9025E-04 2.3523E-04 - 5.0119E+01 2.3101E-03 1.6712E-03 1.9576E-04 1.5868E-04 - 5.6234E+01 1.6411E-03 1.1709E-03 1.3035E-04 1.0670E-04 - 6.3096E+01 1.1602E-03 8.1905E-04 8.7908E-05 7.0603E-05 - 7.0795E+01 8.1613E-04 5.7692E-04 6.0215E-05 4.6581E-05 - 7.9433E+01 5.7095E-04 4.0287E-04 3.9399E-05 3.1063E-05 - 8.9125E+01 3.9944E-04 2.8042E-04 2.6250E-05 2.1358E-05 - 1.0000E+02 2.8167E-04 1.9672E-04 1.7816E-05 1.4443E-05 - 1.1220E+02 1.9766E-04 1.3715E-04 1.2036E-05 9.8418E-06 - 1.2589E+02 1.3924E-04 9.5948E-05 8.1063E-06 6.7671E-06 - 1.4125E+02 9.7351E-05 6.6730E-05 5.5419E-06 4.5523E-06 - 1.5849E+02 6.7847E-05 4.6481E-05 3.7379E-06 3.0297E-06 - 1.7783E+02 4.7572E-05 3.2313E-05 2.4937E-06 2.0580E-06 - 1.9953E+02 3.3312E-05 2.2301E-05 1.6968E-06 1.3889E-06 - 2.2387E+02 2.3175E-05 1.5532E-05 1.1648E-06 9.2439E-07 - 2.5119E+02 1.6222E-05 1.0836E-05 7.8793E-07 6.3698E-07 - 2.8184E+02 1.1380E-05 7.4424E-06 5.3672E-07 4.3031E-07 - 3.1623E+02 7.9226E-06 5.1415E-06 3.6494E-07 2.9306E-07 - 3.5481E+02 5.4677E-06 3.5453E-06 2.4683E-07 1.9832E-07 - 3.9811E+02 3.8073E-06 2.4308E-06 1.6545E-07 1.3248E-07 - 4.4668E+02 2.6507E-06 1.6774E-06 1.1290E-07 9.0473E-08 - 5.0119E+02 1.8325E-06 1.1651E-06 7.5687E-08 5.9929E-08 - 5.6234E+02 1.2713E-06 8.0336E-07 5.1660E-08 4.0148E-08 - 6.3096E+02 8.7354E-07 5.4803E-07 3.4699E-08 2.7351E-08 - 7.0795E+02 6.0072E-07 3.7343E-07 2.3158E-08 1.8640E-08 - 7.9433E+02 4.1509E-07 2.5686E-07 1.5689E-08 1.2397E-08 - 8.9125E+02 2.8635E-07 1.7465E-07 1.0657E-08 8.1471E-09 - 1.0000E+03 1.9713E-07 1.1946E-07 7.1076E-09 5.6699E-09 - 1.1220E+03 1.3294E-07 8.1175E-08 4.6837E-09 3.8417E-09 - 1.2589E+03 9.1009E-08 5.4860E-08 3.0334E-09 2.5375E-09 - 1.4125E+03 6.1726E-08 3.6886E-08 1.9813E-09 1.6639E-09 - 1.5849E+03 4.1653E-08 2.5144E-08 1.3477E-09 9.8960E-10 - 1.7783E+03 2.8249E-08 1.6882E-08 1.0152E-09 6.7881E-10 - 1.9953E+03 1.9495E-08 1.1378E-08 6.5186E-10 4.7740E-10 - 2.2387E+03 1.3081E-08 7.5962E-09 4.2529E-10 3.3128E-10 - 2.5119E+03 8.7644E-09 5.0714E-09 2.8933E-10 2.2133E-10 - 2.8184E+03 5.8778E-09 3.4258E-09 1.8603E-10 1.5028E-10 - 3.1623E+03 4.0107E-09 2.3202E-09 1.2148E-10 8.6234E-11 - 3.5481E+03 2.6150E-09 1.4994E-09 7.8412E-11 5.5114E-11 - 3.9811E+03 1.7432E-09 1.0086E-09 5.4160E-11 3.7829E-11 - 4.4668E+03 1.1588E-09 6.7259E-10 3.4849E-11 2.5269E-11 - 5.0119E+03 7.6636E-10 4.4398E-10 2.3167E-11 1.5516E-11 - 5.6234E+03 5.0862E-10 2.8956E-10 1.5825E-11 9.5647E-12 - 6.3096E+03 3.3516E-10 1.8908E-10 1.0038E-11 6.2445E-12 - 7.0795E+03 2.2143E-10 1.2582E-10 6.5994E-12 4.3263E-12 - 7.9433E+03 1.4685E-10 8.1905E-11 4.3212E-12 2.9795E-12 - 8.9125E+03 9.5672E-11 5.4521E-11 2.9259E-12 1.9528E-12 - 1.0000E+04 6.3122E-11 3.6179E-11 1.8144E-12 1.3146E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3583E+04 1.3805E+04 6.9680E+03 6.0209E+03 - 1.1220E-01 1.1976E+04 1.2136E+04 6.1439E+03 5.2700E+03 - 1.2589E-01 1.0483E+04 1.0627E+04 5.3753E+03 4.5710E+03 - 1.4125E-01 9.0710E+03 9.1703E+03 4.6671E+03 3.9195E+03 - 1.5849E-01 7.7879E+03 7.8253E+03 3.9985E+03 3.3284E+03 - 1.7783E-01 6.6133E+03 6.6405E+03 3.3853E+03 2.8036E+03 - 1.9953E-01 5.5084E+03 5.5363E+03 2.8394E+03 2.3313E+03 - 2.2387E-01 4.5235E+03 4.5368E+03 2.3680E+03 1.9225E+03 - 2.5119E-01 3.6826E+03 3.6892E+03 1.9420E+03 1.5697E+03 - 2.8184E-01 2.9595E+03 2.9727E+03 1.5682E+03 1.2627E+03 - 3.1623E-01 2.3485E+03 2.3622E+03 1.2600E+03 1.0052E+03 - 3.5481E-01 1.8518E+03 1.8537E+03 9.9701E+02 7.8554E+02 - 3.9811E-01 1.4512E+03 1.4374E+03 7.8003E+02 6.0999E+02 - 4.4668E-01 1.1271E+03 1.1097E+03 6.0915E+02 4.7438E+02 - 5.0119E-01 8.5978E+02 8.5300E+02 4.6404E+02 3.6610E+02 - 5.6234E-01 6.5494E+02 6.4878E+02 3.5227E+02 2.7757E+02 - 6.3096E-01 4.9958E+02 4.9020E+02 2.6748E+02 2.0550E+02 - 7.0795E-01 3.7489E+02 3.6776E+02 2.0009E+02 1.5391E+02 - 7.9433E-01 2.8179E+02 2.7431E+02 1.4800E+02 1.1510E+02 - 8.9125E-01 2.1281E+02 2.0322E+02 1.0870E+02 8.4816E+01 - 1.0000E+00 1.5925E+02 1.5147E+02 8.0164E+01 6.2088E+01 - 1.1220E+00 1.1863E+02 1.1179E+02 5.8443E+01 4.5259E+01 - 1.2589E+00 8.8287E+01 8.2698E+01 4.2297E+01 3.2646E+01 - 1.4125E+00 6.5894E+01 6.0862E+01 3.0338E+01 2.3251E+01 - 1.5849E+00 4.8839E+01 4.4591E+01 2.1777E+01 1.6679E+01 - 1.7783E+00 3.5842E+01 3.2462E+01 1.5757E+01 1.2082E+01 - 1.9953E+00 2.6145E+01 2.3592E+01 1.1156E+01 8.6202E+00 - 2.2387E+00 1.9204E+01 1.7067E+01 7.8990E+00 6.1656E+00 - 2.5119E+00 1.4144E+01 1.2293E+01 5.6234E+00 4.3202E+00 - 2.8184E+00 1.0287E+01 8.8596E+00 3.8082E+00 2.9603E+00 - 3.1623E+00 7.4768E+00 6.3384E+00 2.6907E+00 2.0825E+00 - 3.5481E+00 5.4324E+00 4.5034E+00 1.8883E+00 1.4413E+00 - 3.9811E+00 3.9392E+00 3.2096E+00 1.3020E+00 9.9102E-01 - 4.4668E+00 2.8383E+00 2.3092E+00 8.8635E-01 6.7293E-01 - 5.0119E+00 2.0392E+00 1.6528E+00 6.0679E-01 4.6034E-01 - 5.6234E+00 1.4581E+00 1.1675E+00 4.1418E-01 3.1281E-01 - 6.3096E+00 1.0442E+00 8.3618E-01 2.8102E-01 2.1265E-01 - 7.0795E+00 7.5137E-01 5.9860E-01 1.8890E-01 1.4403E-01 - 7.9433E+00 5.3731E-01 4.2182E-01 1.2486E-01 9.4523E-02 - 8.9125E+00 3.8454E-01 2.9586E-01 8.3010E-02 6.4326E-02 - 1.0000E+01 2.7291E-01 2.1217E-01 5.7120E-02 4.3182E-02 - 1.1220E+01 1.9468E-01 1.4973E-01 3.8369E-02 2.9146E-02 - 1.2589E+01 1.3854E-01 1.0594E-01 2.5568E-02 1.9419E-02 - 1.4125E+01 9.9036E-02 7.5179E-02 1.7223E-02 1.3043E-02 - 1.5849E+01 7.0815E-02 5.3776E-02 1.1382E-02 8.6518E-03 - 1.7783E+01 5.0833E-02 3.8192E-02 7.4453E-03 5.6942E-03 - 1.9953E+01 3.5857E-02 2.6729E-02 4.9176E-03 3.7718E-03 - 2.2387E+01 2.5430E-02 1.9014E-02 3.3159E-03 2.5461E-03 - 2.5119E+01 1.7943E-02 1.3245E-02 2.2408E-03 1.7028E-03 - 2.8184E+01 1.2652E-02 9.3113E-03 1.5107E-03 1.1308E-03 - 3.1623E+01 9.2075E-03 6.7778E-03 9.9622E-04 7.7125E-04 - 3.5481E+01 6.5329E-03 4.7802E-03 6.6282E-04 5.1667E-04 - 3.9811E+01 4.6210E-03 3.3808E-03 4.3786E-04 3.4381E-04 - 4.4668E+01 3.2811E-03 2.3898E-03 2.9120E-04 2.2933E-04 - 5.0119E+01 2.3229E-03 1.6749E-03 1.9441E-04 1.5586E-04 - 5.6234E+01 1.6354E-03 1.1693E-03 1.2986E-04 1.0493E-04 - 6.3096E+01 1.1549E-03 8.2430E-04 8.7067E-05 7.1699E-05 - 7.0795E+01 8.1265E-04 5.7593E-04 5.7996E-05 4.9173E-05 - 7.9433E+01 5.7221E-04 4.0138E-04 3.9842E-05 3.3543E-05 - 8.9125E+01 4.0313E-04 2.8049E-04 2.6781E-05 2.2030E-05 - 1.0000E+02 2.8291E-04 1.9712E-04 1.7785E-05 1.4693E-05 - 1.1220E+02 1.9858E-04 1.3755E-04 1.2062E-05 9.8679E-06 - 1.2589E+02 1.3873E-04 9.5664E-05 8.1044E-06 6.6952E-06 - 1.4125E+02 9.7038E-05 6.6649E-05 5.3935E-06 4.5071E-06 - 1.5849E+02 6.7615E-05 4.6438E-05 3.6627E-06 2.9840E-06 - 1.7783E+02 4.7100E-05 3.2280E-05 2.4900E-06 2.0399E-06 - 1.9953E+02 3.3245E-05 2.2403E-05 1.6768E-06 1.4246E-06 - 2.2387E+02 2.3310E-05 1.5449E-05 1.1355E-06 9.7053E-07 - 2.5119E+02 1.6245E-05 1.0728E-05 7.6397E-07 6.2631E-07 - 2.8184E+02 1.1361E-05 7.4765E-06 5.0354E-07 4.2480E-07 - 3.1623E+02 7.8953E-06 5.1543E-06 3.6400E-07 2.9557E-07 - 3.5481E+02 5.4625E-06 3.5235E-06 2.4914E-07 2.0120E-07 - 3.9811E+02 3.7973E-06 2.4278E-06 1.6934E-07 1.3564E-07 - 4.4668E+02 2.6489E-06 1.6771E-06 1.1261E-07 9.1022E-08 - 5.0119E+02 1.8325E-06 1.1611E-06 7.6001E-08 5.9734E-08 - 5.6234E+02 1.2741E-06 8.0138E-07 5.1764E-08 3.9445E-08 - 6.3096E+02 8.7513E-07 5.4651E-07 3.4681E-08 2.5974E-08 - 7.0795E+02 6.0209E-07 3.7400E-07 2.3230E-08 1.7722E-08 - 7.9433E+02 4.1464E-07 2.5528E-07 1.5759E-08 1.1914E-08 - 8.9125E+02 2.8494E-07 1.7508E-07 1.0594E-08 8.1264E-09 - 1.0000E+03 1.9668E-07 1.2027E-07 6.8255E-09 5.5905E-09 - 1.1220E+03 1.3305E-07 8.1268E-08 4.6682E-09 3.7542E-09 - 1.2589E+03 9.0467E-08 5.4943E-08 3.2126E-09 2.5282E-09 - 1.4125E+03 6.1610E-08 3.7003E-08 2.1658E-09 1.6331E-09 - 1.5849E+03 4.2102E-08 2.4786E-08 1.4551E-09 1.0778E-09 - 1.7783E+03 2.8420E-08 1.6570E-08 9.6197E-10 7.1730E-10 - 1.9953E+03 1.9333E-08 1.1239E-08 6.2027E-10 4.6260E-10 - 2.2387E+03 1.3063E-08 7.5453E-09 4.2144E-10 3.1054E-10 - 2.5119E+03 8.6377E-09 5.0184E-09 2.8203E-10 2.1123E-10 - 2.8184E+03 5.7532E-09 3.3530E-09 1.8139E-10 1.3431E-10 - 3.1623E+03 3.9952E-09 2.3059E-09 1.1978E-10 8.9993E-11 - 3.5481E+03 2.5905E-09 1.5038E-09 8.0532E-11 5.9057E-11 - 3.9811E+03 1.7294E-09 9.9446E-10 5.5488E-11 3.9782E-11 - 4.4668E+03 1.1529E-09 6.5795E-10 3.6244E-11 2.4661E-11 - 5.0119E+03 7.6034E-10 4.3703E-10 2.2293E-11 1.4527E-11 - 5.6234E+03 5.0926E-10 2.8820E-10 1.3739E-11 9.0593E-12 - 6.3096E+03 3.3710E-10 1.8821E-10 9.4556E-12 6.8728E-12 - 7.0795E+03 2.2422E-10 1.2394E-10 6.2705E-12 4.4879E-12 - 7.9433E+03 1.4720E-10 8.2285E-11 4.1722E-12 2.9922E-12 - 8.9125E+03 9.6616E-11 5.3872E-11 2.6831E-12 2.0356E-12 - 1.0000E+04 6.3724E-11 3.4453E-11 1.7971E-12 1.2564E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3604E+04 1.3968E+04 7.0285E+03 5.9613E+03 - 1.1220E-01 1.1968E+04 1.2295E+04 6.2152E+03 5.2495E+03 - 1.2589E-01 1.0533E+04 1.0734E+04 5.4356E+03 4.5705E+03 - 1.4125E-01 9.1509E+03 9.2781E+03 4.7297E+03 3.9127E+03 - 1.5849E-01 7.8119E+03 7.9295E+03 4.0611E+03 3.3333E+03 - 1.7783E-01 6.5945E+03 6.6914E+03 3.4511E+03 2.7951E+03 - 1.9953E-01 5.4866E+03 5.5796E+03 2.8860E+03 2.3209E+03 - 2.2387E-01 4.5238E+03 4.5864E+03 2.3910E+03 1.9123E+03 - 2.5119E-01 3.6818E+03 3.7224E+03 1.9618E+03 1.5556E+03 - 2.8184E-01 2.9570E+03 2.9962E+03 1.5881E+03 1.2592E+03 - 3.1623E-01 2.3557E+03 2.3723E+03 1.2795E+03 1.0015E+03 - 3.5481E-01 1.8592E+03 1.8616E+03 1.0079E+03 7.8866E+02 - 3.9811E-01 1.4529E+03 1.4485E+03 7.8024E+02 6.1676E+02 - 4.4668E-01 1.1215E+03 1.1150E+03 6.0504E+02 4.7101E+02 - 5.0119E-01 8.6077E+02 8.5527E+02 4.6717E+02 3.5851E+02 - 5.6234E-01 6.5613E+02 6.5161E+02 3.5504E+02 2.7388E+02 - 6.3096E-01 4.9609E+02 4.9043E+02 2.6551E+02 2.0602E+02 - 7.0795E-01 3.7550E+02 3.6674E+02 1.9822E+02 1.5288E+02 - 7.9433E-01 2.8391E+02 2.7408E+02 1.4731E+02 1.1354E+02 - 8.9125E-01 2.1271E+02 2.0417E+02 1.0851E+02 8.3804E+01 - 1.0000E+00 1.5914E+02 1.5277E+02 8.0064E+01 6.1680E+01 - 1.1220E+00 1.1855E+02 1.1233E+02 5.8234E+01 4.5247E+01 - 1.2589E+00 8.8397E+01 8.2506E+01 4.2501E+01 3.2941E+01 - 1.4125E+00 6.5948E+01 6.0541E+01 3.0817E+01 2.3631E+01 - 1.5849E+00 4.8966E+01 4.4299E+01 2.1956E+01 1.6888E+01 - 1.7783E+00 3.5890E+01 3.2423E+01 1.5473E+01 1.2125E+01 - 1.9953E+00 2.6264E+01 2.3610E+01 1.1171E+01 8.6420E+00 - 2.2387E+00 1.9344E+01 1.7248E+01 7.9976E+00 5.9790E+00 - 2.5119E+00 1.4090E+01 1.2363E+01 5.5627E+00 4.1742E+00 - 2.8184E+00 1.0230E+01 8.8346E+00 3.9064E+00 2.9484E+00 - 3.1623E+00 7.4411E+00 6.3570E+00 2.7496E+00 2.0728E+00 - 3.5481E+00 5.4170E+00 4.5653E+00 1.9013E+00 1.4199E+00 - 3.9811E+00 3.9192E+00 3.2758E+00 1.3136E+00 9.7851E-01 - 4.4668E+00 2.8176E+00 2.3311E+00 8.9851E-01 6.7966E-01 - 5.0119E+00 2.0196E+00 1.6581E+00 6.0570E-01 4.6037E-01 - 5.6234E+00 1.4574E+00 1.1828E+00 4.1869E-01 3.1060E-01 - 6.3096E+00 1.0499E+00 8.4534E-01 2.8544E-01 2.0942E-01 - 7.0795E+00 7.4391E-01 6.0455E-01 1.9060E-01 1.4355E-01 - 7.9433E+00 5.2978E-01 4.2749E-01 1.2839E-01 9.7715E-02 - 8.9125E+00 3.8287E-01 3.0173E-01 8.3267E-02 6.5162E-02 - 1.0000E+01 2.7288E-01 2.1248E-01 5.7132E-02 4.3236E-02 - 1.1220E+01 1.9425E-01 1.4997E-01 3.8080E-02 2.9064E-02 - 1.2589E+01 1.3907E-01 1.0627E-01 2.5426E-02 1.9018E-02 - 1.4125E+01 9.9199E-02 7.5499E-02 1.7094E-02 1.2633E-02 - 1.5849E+01 7.0476E-02 5.3830E-02 1.1365E-02 8.6055E-03 - 1.7783E+01 5.0217E-02 3.8318E-02 7.5137E-03 5.8239E-03 - 1.9953E+01 3.5717E-02 2.7085E-02 4.9656E-03 3.8924E-03 - 2.2387E+01 2.5426E-02 1.9157E-02 3.3264E-03 2.5717E-03 - 2.5119E+01 1.8028E-02 1.3480E-02 2.1856E-03 1.6974E-03 - 2.8184E+01 1.2737E-02 9.4116E-03 1.4702E-03 1.1156E-03 - 3.1623E+01 9.2167E-03 6.7618E-03 9.8779E-04 7.6930E-04 - 3.5481E+01 6.5202E-03 4.7566E-03 6.5570E-04 5.1498E-04 - 3.9811E+01 4.6260E-03 3.3504E-03 4.3699E-04 3.4532E-04 - 4.4668E+01 3.2757E-03 2.3612E-03 2.9430E-04 2.3025E-04 - 5.0119E+01 2.3089E-03 1.6634E-03 1.9509E-04 1.5477E-04 - 5.6234E+01 1.6320E-03 1.1680E-03 1.3111E-04 1.0523E-04 - 6.3096E+01 1.1554E-03 8.2004E-04 8.9076E-05 7.0218E-05 - 7.0795E+01 8.1490E-04 5.7828E-04 5.8355E-05 4.7520E-05 - 7.9433E+01 5.6893E-04 4.0413E-04 3.8021E-05 3.1780E-05 - 8.9125E+01 3.9800E-04 2.7895E-04 2.5506E-05 2.1174E-05 - 1.0000E+02 2.8271E-04 1.9721E-04 1.8013E-05 1.4619E-05 - 1.1220E+02 1.9853E-04 1.3836E-04 1.2226E-05 9.9322E-06 - 1.2589E+02 1.3935E-04 9.6599E-05 8.2832E-06 6.6660E-06 - 1.4125E+02 9.7653E-05 6.6816E-05 5.5999E-06 4.4923E-06 - 1.5849E+02 6.8310E-05 4.6316E-05 3.7654E-06 3.0661E-06 - 1.7783E+02 4.7667E-05 3.2201E-05 2.5461E-06 2.0656E-06 - 1.9953E+02 3.3421E-05 2.2332E-05 1.7136E-06 1.4114E-06 - 2.2387E+02 2.3254E-05 1.5528E-05 1.1912E-06 9.4646E-07 - 2.5119E+02 1.6175E-05 1.0806E-05 8.0599E-07 6.3996E-07 - 2.8184E+02 1.1366E-05 7.4262E-06 5.2861E-07 4.4535E-07 - 3.1623E+02 7.9269E-06 5.1441E-06 3.6502E-07 3.0025E-07 - 3.5481E+02 5.4745E-06 3.5303E-06 2.4574E-07 2.0359E-07 - 3.9811E+02 3.7994E-06 2.4497E-06 1.6979E-07 1.3503E-07 - 4.4668E+02 2.6450E-06 1.6894E-06 1.1509E-07 9.0339E-08 - 5.0119E+02 1.8300E-06 1.1569E-06 7.4665E-08 6.1232E-08 - 5.6234E+02 1.2776E-06 8.0143E-07 5.0705E-08 4.1990E-08 - 6.3096E+02 8.7191E-07 5.4883E-07 3.4687E-08 2.8150E-08 - 7.0795E+02 6.0041E-07 3.7401E-07 2.3763E-08 1.8358E-08 - 7.9433E+02 4.1478E-07 2.5618E-07 1.6140E-08 1.1694E-08 - 8.9125E+02 2.8445E-07 1.7632E-07 1.0968E-08 8.0540E-09 - 1.0000E+03 1.9612E-07 1.2023E-07 7.1837E-09 5.3971E-09 - 1.1220E+03 1.3296E-07 8.0385E-08 4.7330E-09 3.6626E-09 - 1.2589E+03 9.0708E-08 5.4548E-08 3.2011E-09 2.4600E-09 - 1.4125E+03 6.1381E-08 3.7148E-08 2.2471E-09 1.6137E-09 - 1.5849E+03 4.1622E-08 2.5259E-08 1.4146E-09 1.0130E-09 - 1.7783E+03 2.8299E-08 1.6849E-08 9.3687E-10 6.4939E-10 - 1.9953E+03 1.9041E-08 1.1190E-08 6.3361E-10 4.4565E-10 - 2.2387E+03 1.2833E-08 7.4915E-09 4.1401E-10 3.0560E-10 - 2.5119E+03 8.6661E-09 4.9874E-09 2.4703E-10 2.1143E-10 - 2.8184E+03 5.8365E-09 3.3619E-09 1.7556E-10 1.4360E-10 - 3.1623E+03 4.0172E-09 2.3349E-09 1.1691E-10 9.0780E-11 - 3.5481E+03 2.6053E-09 1.5066E-09 8.1666E-11 6.0097E-11 - 3.9811E+03 1.7196E-09 9.9315E-10 5.3240E-11 3.5993E-11 - 4.4668E+03 1.1441E-09 6.5432E-10 3.3520E-11 2.2573E-11 - 5.0119E+03 7.5516E-10 4.2073E-10 2.3542E-11 1.6381E-11 - 5.6234E+03 5.0774E-10 2.8313E-10 1.5226E-11 1.1537E-11 - 6.3096E+03 3.4020E-10 1.9004E-10 9.1863E-12 6.6454E-12 - 7.0795E+03 2.2414E-10 1.2344E-10 6.0720E-12 4.3290E-12 - 7.9433E+03 1.4553E-10 8.0510E-11 4.3100E-12 3.2491E-12 - 8.9125E+03 9.5347E-11 5.2942E-11 2.6093E-12 2.0615E-12 - 1.0000E+04 6.3067E-11 3.5308E-11 1.6927E-12 1.2920E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3653E+04 1.4011E+04 7.0955E+03 5.9910E+03 - 1.1220E-01 1.2007E+04 1.2336E+04 6.2823E+03 5.2470E+03 - 1.2589E-01 1.0513E+04 1.0770E+04 5.4987E+03 4.5367E+03 - 1.4125E-01 9.1119E+03 9.2927E+03 4.7438E+03 3.9126E+03 - 1.5849E-01 7.7985E+03 7.9476E+03 4.0621E+03 3.3250E+03 - 1.7783E-01 6.6037E+03 6.7385E+03 3.4531E+03 2.7924E+03 - 1.9953E-01 5.5139E+03 5.6175E+03 2.8935E+03 2.3296E+03 - 2.2387E-01 4.5367E+03 4.6013E+03 2.3988E+03 1.9232E+03 - 2.5119E-01 3.6869E+03 3.7454E+03 1.9718E+03 1.5549E+03 - 2.8184E-01 2.9603E+03 3.0135E+03 1.5987E+03 1.2465E+03 - 3.1623E-01 2.3585E+03 2.3881E+03 1.2707E+03 9.9555E+02 - 3.5481E-01 1.8573E+03 1.8725E+03 1.0050E+03 7.8388E+02 - 3.9811E-01 1.4471E+03 1.4598E+03 7.8529E+02 6.1302E+02 - 4.4668E-01 1.1225E+03 1.1305E+03 6.0531E+02 4.7061E+02 - 5.0119E-01 8.6700E+02 8.6392E+02 4.6602E+02 3.5740E+02 - 5.6234E-01 6.5813E+02 6.5269E+02 3.5679E+02 2.7327E+02 - 6.3096E-01 4.9673E+02 4.9218E+02 2.6698E+02 2.0565E+02 - 7.0795E-01 3.7497E+02 3.6861E+02 1.9899E+02 1.5316E+02 - 7.9433E-01 2.8231E+02 2.7246E+02 1.4958E+02 1.1447E+02 - 8.9125E-01 2.1215E+02 2.0274E+02 1.1039E+02 8.4816E+01 - 1.0000E+00 1.5901E+02 1.5179E+02 8.0490E+01 6.2230E+01 - 1.1220E+00 1.1847E+02 1.1237E+02 5.8900E+01 4.4993E+01 - 1.2589E+00 8.8488E+01 8.3219E+01 4.2777E+01 3.2541E+01 - 1.4125E+00 6.5780E+01 6.1041E+01 3.0701E+01 2.3586E+01 - 1.5849E+00 4.8794E+01 4.4766E+01 2.1918E+01 1.6998E+01 - 1.7783E+00 3.6077E+01 3.2793E+01 1.5739E+01 1.2128E+01 - 1.9953E+00 2.6456E+01 2.3861E+01 1.1210E+01 8.5627E+00 - 2.2387E+00 1.9377E+01 1.7270E+01 7.8588E+00 6.0744E+00 - 2.5119E+00 1.4004E+01 1.2255E+01 5.5832E+00 4.3655E+00 - 2.8184E+00 1.0106E+01 8.7500E+00 3.9484E+00 3.0641E+00 - 3.1623E+00 7.4176E+00 6.3073E+00 2.7378E+00 2.0539E+00 - 3.5481E+00 5.3875E+00 4.5405E+00 1.8793E+00 1.4232E+00 - 3.9811E+00 3.8976E+00 3.2563E+00 1.2859E+00 9.7565E-01 - 4.4668E+00 2.8015E+00 2.3112E+00 8.8357E-01 6.6063E-01 - 5.0119E+00 2.0034E+00 1.6468E+00 5.9562E-01 4.5119E-01 - 5.6234E+00 1.4363E+00 1.1627E+00 3.9775E-01 3.1367E-01 - 6.3096E+00 1.0404E+00 8.2874E-01 2.7370E-01 2.1193E-01 - 7.0795E+00 7.4664E-01 5.8988E-01 1.8890E-01 1.4268E-01 - 7.9433E+00 5.2641E-01 4.1377E-01 1.2814E-01 9.5618E-02 - 8.9125E+00 3.7580E-01 2.9391E-01 8.3970E-02 6.3765E-02 - 1.0000E+01 2.7246E-01 2.1289E-01 5.7612E-02 4.3572E-02 - 1.1220E+01 1.9415E-01 1.5023E-01 3.8579E-02 2.8831E-02 - 1.2589E+01 1.3891E-01 1.0628E-01 2.6051E-02 1.9298E-02 - 1.4125E+01 9.9327E-02 7.5995E-02 1.7265E-02 1.3049E-02 - 1.5849E+01 7.0843E-02 5.4155E-02 1.1091E-02 8.7208E-03 - 1.7783E+01 5.0583E-02 3.8319E-02 7.3045E-03 5.7826E-03 - 1.9953E+01 3.5878E-02 2.7178E-02 4.9331E-03 3.8244E-03 - 2.2387E+01 2.5409E-02 1.9392E-02 3.3710E-03 2.5821E-03 - 2.5119E+01 1.7840E-02 1.3551E-02 2.2822E-03 1.7700E-03 - 2.8184E+01 1.2653E-02 9.3553E-03 1.4878E-03 1.1139E-03 - 3.1623E+01 9.1860E-03 6.7673E-03 9.9499E-04 7.7337E-04 - 3.5481E+01 6.4932E-03 4.7777E-03 6.5952E-04 5.1670E-04 - 3.9811E+01 4.6150E-03 3.3756E-03 4.4179E-04 3.4973E-04 - 4.4668E+01 3.2666E-03 2.3640E-03 2.9876E-04 2.3332E-04 - 5.0119E+01 2.3099E-03 1.6510E-03 1.9762E-04 1.5586E-04 - 5.6234E+01 1.6320E-03 1.1647E-03 1.2948E-04 1.0334E-04 - 6.3096E+01 1.1509E-03 8.2751E-04 8.7457E-05 7.0071E-05 - 7.0795E+01 8.0753E-04 5.7790E-04 5.8907E-05 4.8457E-05 - 7.9433E+01 5.6483E-04 4.0126E-04 3.9221E-05 3.1842E-05 - 8.9125E+01 3.9763E-04 2.8087E-04 2.6289E-05 2.1241E-05 - 1.0000E+02 2.8272E-04 1.9691E-04 1.7820E-05 1.4778E-05 - 1.1220E+02 1.9829E-04 1.3748E-04 1.2198E-05 1.0038E-05 - 1.2589E+02 1.3903E-04 9.5481E-05 8.2080E-06 6.7445E-06 - 1.4125E+02 9.7301E-05 6.6344E-05 5.4622E-06 4.5916E-06 - 1.5849E+02 6.8123E-05 4.6385E-05 3.7220E-06 3.1227E-06 - 1.7783E+02 4.7562E-05 3.2388E-05 2.5172E-06 2.1313E-06 - 1.9953E+02 3.3438E-05 2.2308E-05 1.6918E-06 1.4055E-06 - 2.2387E+02 2.3461E-05 1.5504E-05 1.1549E-06 9.4742E-07 - 2.5119E+02 1.6309E-05 1.0791E-05 7.7878E-07 6.3785E-07 - 2.8184E+02 1.1385E-05 7.4519E-06 5.4634E-07 4.0351E-07 - 3.1623E+02 7.9204E-06 5.1261E-06 3.6284E-07 2.9270E-07 - 3.5481E+02 5.4929E-06 3.5393E-06 2.4518E-07 1.9539E-07 - 3.9811E+02 3.7970E-06 2.4380E-06 1.6482E-07 1.3246E-07 - 4.4668E+02 2.6383E-06 1.6902E-06 1.1125E-07 9.0669E-08 - 5.0119E+02 1.8395E-06 1.1697E-06 7.5686E-08 6.2468E-08 - 5.6234E+02 1.2746E-06 8.0352E-07 5.2053E-08 4.0999E-08 - 6.3096E+02 8.7648E-07 5.4927E-07 3.5230E-08 2.7278E-08 - 7.0795E+02 6.0540E-07 3.7666E-07 2.3772E-08 1.8142E-08 - 7.9433E+02 4.1753E-07 2.5798E-07 1.6412E-08 1.2147E-08 - 8.9125E+02 2.8623E-07 1.7456E-07 1.1041E-08 8.0137E-09 - 1.0000E+03 1.9674E-07 1.2056E-07 7.1385E-09 5.5238E-09 - 1.1220E+03 1.3385E-07 8.1483E-08 4.8299E-09 3.7610E-09 - 1.2589E+03 9.1424E-08 5.4700E-08 3.2876E-09 2.5084E-09 - 1.4125E+03 6.1707E-08 3.7105E-08 2.1008E-09 1.6460E-09 - 1.5849E+03 4.1645E-08 2.5210E-08 1.3881E-09 1.0884E-09 - 1.7783E+03 2.8385E-08 1.7008E-08 9.5612E-10 7.1209E-10 - 1.9953E+03 1.9088E-08 1.1359E-08 6.1889E-10 4.5629E-10 - 2.2387E+03 1.2856E-08 7.6058E-09 3.8835E-10 3.1042E-10 - 2.5119E+03 8.7152E-09 5.0728E-09 2.7026E-10 2.0737E-10 - 2.8184E+03 5.8386E-09 3.3858E-09 1.9024E-10 1.2989E-10 - 3.1623E+03 4.0142E-09 2.3129E-09 1.2029E-10 9.0679E-11 - 3.5481E+03 2.6217E-09 1.4858E-09 8.0570E-11 6.0828E-11 - 3.9811E+03 1.7628E-09 9.9340E-10 5.5312E-11 3.7076E-11 - 4.4668E+03 1.1668E-09 6.5552E-10 3.6232E-11 2.5588E-11 - 5.0119E+03 7.5970E-10 4.3664E-10 2.2704E-11 1.7467E-11 - 5.6234E+03 5.1036E-10 2.9303E-10 1.5537E-11 9.0232E-12 - 6.3096E+03 3.3936E-10 1.8821E-10 1.0550E-11 6.5725E-12 - 7.0795E+03 2.2106E-10 1.2402E-10 6.9719E-12 4.7078E-12 - 7.9433E+03 1.4724E-10 8.0928E-11 4.3747E-12 3.0380E-12 - 8.9125E+03 9.6783E-11 5.3819E-11 2.8339E-12 1.7343E-12 - 1.0000E+04 6.3530E-11 3.4995E-11 1.9156E-12 1.0297E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3569E+04 1.3955E+04 7.0475E+03 5.9650E+03 - 1.1220E-01 1.1939E+04 1.2316E+04 6.2293E+03 5.2205E+03 - 1.2589E-01 1.0459E+04 1.0729E+04 5.4357E+03 4.5109E+03 - 1.4125E-01 9.1006E+03 9.2868E+03 4.7096E+03 3.8685E+03 - 1.5849E-01 7.8090E+03 7.9445E+03 4.0401E+03 3.3036E+03 - 1.7783E-01 6.6205E+03 6.7027E+03 3.4392E+03 2.7900E+03 - 1.9953E-01 5.5071E+03 5.5923E+03 2.8796E+03 2.3248E+03 - 2.2387E-01 4.5229E+03 4.5882E+03 2.3828E+03 1.9144E+03 - 2.5119E-01 3.6875E+03 3.7298E+03 1.9585E+03 1.5647E+03 - 2.8184E-01 2.9641E+03 3.0013E+03 1.5832E+03 1.2589E+03 - 3.1623E-01 2.3591E+03 2.3900E+03 1.2737E+03 9.9590E+02 - 3.5481E-01 1.8620E+03 1.8782E+03 1.0121E+03 7.9093E+02 - 3.9811E-01 1.4519E+03 1.4610E+03 7.8685E+02 6.1899E+02 - 4.4668E-01 1.1255E+03 1.1292E+03 6.0796E+02 4.7300E+02 - 5.0119E-01 8.6471E+02 8.6300E+02 4.6670E+02 3.5857E+02 - 5.6234E-01 6.5915E+02 6.5261E+02 3.5474E+02 2.7247E+02 - 6.3096E-01 5.0137E+02 4.9337E+02 2.6943E+02 2.0790E+02 - 7.0795E-01 3.7853E+02 3.7075E+02 2.0117E+02 1.5647E+02 - 7.9433E-01 2.8565E+02 2.7609E+02 1.4719E+02 1.1557E+02 - 8.9125E-01 2.1305E+02 2.0605E+02 1.0909E+02 8.4606E+01 - 1.0000E+00 1.5912E+02 1.5226E+02 7.9648E+01 6.2050E+01 - 1.1220E+00 1.1853E+02 1.1238E+02 5.8391E+01 4.5121E+01 - 1.2589E+00 8.8359E+01 8.2711E+01 4.2574E+01 3.2833E+01 - 1.4125E+00 6.6161E+01 6.0891E+01 3.0590E+01 2.3731E+01 - 1.5849E+00 4.8903E+01 4.4390E+01 2.1934E+01 1.7057E+01 - 1.7783E+00 3.5926E+01 3.2158E+01 1.5596E+01 1.2201E+01 - 1.9953E+00 2.6346E+01 2.3495E+01 1.1169E+01 8.6568E+00 - 2.2387E+00 1.9293E+01 1.7010E+01 7.9701E+00 6.0481E+00 - 2.5119E+00 1.4135E+01 1.2195E+01 5.6012E+00 4.1850E+00 - 2.8184E+00 1.0348E+01 8.8241E+00 3.9097E+00 2.9482E+00 - 3.1623E+00 7.4646E+00 6.3485E+00 2.7109E+00 2.0582E+00 - 3.5481E+00 5.4024E+00 4.5480E+00 1.8709E+00 1.4298E+00 - 3.9811E+00 3.8802E+00 3.2673E+00 1.2882E+00 9.9805E-01 - 4.4668E+00 2.7991E+00 2.3308E+00 8.9253E-01 6.7670E-01 - 5.0119E+00 2.0218E+00 1.6579E+00 6.0756E-01 4.6119E-01 - 5.6234E+00 1.4589E+00 1.1770E+00 4.1009E-01 3.1496E-01 - 6.3096E+00 1.0475E+00 8.3312E-01 2.7716E-01 2.1115E-01 - 7.0795E+00 7.4819E-01 5.9212E-01 1.9002E-01 1.4140E-01 - 7.9433E+00 5.3598E-01 4.2311E-01 1.2731E-01 9.4011E-02 - 8.9125E+00 3.8159E-01 2.9916E-01 8.4779E-02 6.4259E-02 - 1.0000E+01 2.7183E-01 2.1287E-01 5.7675E-02 4.3652E-02 - 1.1220E+01 1.9470E-01 1.5132E-01 3.8006E-02 2.9129E-02 - 1.2589E+01 1.3905E-01 1.0643E-01 2.5601E-02 1.9180E-02 - 1.4125E+01 9.9077E-02 7.4880E-02 1.7058E-02 1.2982E-02 - 1.5849E+01 7.1404E-02 5.3485E-02 1.1291E-02 8.7560E-03 - 1.7783E+01 5.0574E-02 3.8068E-02 7.5969E-03 5.7399E-03 - 1.9953E+01 3.5450E-02 2.6867E-02 4.9447E-03 3.8345E-03 - 2.2387E+01 2.5750E-02 1.9018E-02 3.3195E-03 2.5958E-03 - 2.5119E+01 1.8338E-02 1.3437E-02 2.1832E-03 1.6472E-03 - 2.8184E+01 1.2792E-02 9.5418E-03 1.3811E-03 1.1063E-03 - 3.1623E+01 9.2197E-03 6.7862E-03 9.9038E-04 7.6819E-04 - 3.5481E+01 6.5392E-03 4.7840E-03 6.5861E-04 5.1350E-04 - 3.9811E+01 4.6322E-03 3.3859E-03 4.3805E-04 3.4553E-04 - 4.4668E+01 3.2612E-03 2.3880E-03 2.9642E-04 2.3260E-04 - 5.0119E+01 2.3043E-03 1.6751E-03 1.9678E-04 1.5675E-04 - 5.6234E+01 1.6373E-03 1.1740E-03 1.2984E-04 1.0644E-04 - 6.3096E+01 1.1547E-03 8.2510E-04 8.5882E-05 7.2003E-05 - 7.0795E+01 8.1031E-04 5.7629E-04 5.7830E-05 4.7955E-05 - 7.9433E+01 5.6770E-04 4.0519E-04 3.8959E-05 3.2393E-05 - 8.9125E+01 4.0116E-04 2.8464E-04 2.6100E-05 2.0967E-05 - 1.0000E+02 2.8270E-04 1.9719E-04 1.7846E-05 1.4453E-05 - 1.1220E+02 1.9864E-04 1.3770E-04 1.1990E-05 9.8540E-06 - 1.2589E+02 1.3886E-04 9.6113E-05 8.0865E-06 6.7035E-06 - 1.4125E+02 9.6772E-05 6.6841E-05 5.5088E-06 4.5261E-06 - 1.5849E+02 6.7756E-05 4.6411E-05 3.7275E-06 3.0323E-06 - 1.7783E+02 4.7581E-05 3.2224E-05 2.5925E-06 2.0630E-06 - 1.9953E+02 3.3242E-05 2.2298E-05 1.7605E-06 1.4228E-06 - 2.2387E+02 2.3136E-05 1.5545E-05 1.1578E-06 9.4715E-07 - 2.5119E+02 1.6159E-05 1.0755E-05 7.6778E-07 6.3398E-07 - 2.8184E+02 1.1340E-05 7.4017E-06 5.2645E-07 4.2330E-07 - 3.1623E+02 7.9222E-06 5.1452E-06 3.6434E-07 2.9212E-07 - 3.5481E+02 5.4953E-06 3.5614E-06 2.4356E-07 1.9769E-07 - 3.9811E+02 3.8049E-06 2.4565E-06 1.6733E-07 1.3230E-07 - 4.4668E+02 2.6481E-06 1.6865E-06 1.1555E-07 9.0176E-08 - 5.0119E+02 1.8300E-06 1.1664E-06 7.7711E-08 5.9450E-08 - 5.6234E+02 1.2723E-06 8.0523E-07 5.1039E-08 4.1183E-08 - 6.3096E+02 8.7687E-07 5.4891E-07 3.4182E-08 2.7873E-08 - 7.0795E+02 6.0663E-07 3.7411E-07 2.3075E-08 1.8400E-08 - 7.9433E+02 4.1754E-07 2.5541E-07 1.5774E-08 1.2382E-08 - 8.9125E+02 2.8421E-07 1.7399E-07 1.0640E-08 8.1924E-09 - 1.0000E+03 1.9613E-07 1.1883E-07 7.0363E-09 5.4735E-09 - 1.1220E+03 1.3309E-07 8.0743E-08 4.8900E-09 3.6339E-09 - 1.2589E+03 9.0864E-08 5.5002E-08 3.1416E-09 2.4274E-09 - 1.4125E+03 6.1520E-08 3.7076E-08 2.0484E-09 1.6217E-09 - 1.5849E+03 4.1773E-08 2.4795E-08 1.4685E-09 1.0127E-09 - 1.7783E+03 2.8223E-08 1.6779E-08 9.9845E-10 6.9092E-10 - 1.9953E+03 1.8982E-08 1.1308E-08 6.4424E-10 4.7248E-10 - 2.2387E+03 1.3015E-08 7.5054E-09 4.2484E-10 3.0312E-10 - 2.5119E+03 8.7999E-09 4.9449E-09 2.6877E-10 1.9829E-10 - 2.8184E+03 5.8151E-09 3.3349E-09 1.7844E-10 1.2660E-10 - 3.1623E+03 4.0056E-09 2.3215E-09 1.2048E-10 8.6855E-11 - 3.5481E+03 2.6164E-09 1.5253E-09 8.1034E-11 5.6573E-11 - 3.9811E+03 1.7452E-09 9.8615E-10 5.3982E-11 3.6057E-11 - 4.4668E+03 1.1641E-09 6.3881E-10 3.4280E-11 2.4447E-11 - 5.0119E+03 7.7553E-10 4.2675E-10 2.1547E-11 1.7210E-11 - 5.6234E+03 5.0558E-10 2.8086E-10 1.4517E-11 1.0917E-11 - 6.3096E+03 3.3604E-10 1.8830E-10 1.0017E-11 7.1783E-12 - 7.0795E+03 2.2551E-10 1.2442E-10 6.4692E-12 4.6849E-12 - 7.9433E+03 1.4754E-10 8.2421E-11 4.1944E-12 2.6886E-12 - 8.9125E+03 9.6189E-11 5.3977E-11 2.7490E-12 1.8406E-12 - 1.0000E+04 6.3122E-11 3.4757E-11 1.8224E-12 1.2598E-12 -average flux in [cosZ = 0.60 -- 0.70, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3505E+04 1.3792E+04 6.9538E+03 5.9689E+03 - 1.1220E-01 1.1860E+04 1.2155E+04 6.1589E+03 5.2177E+03 - 1.2589E-01 1.0405E+04 1.0645E+04 5.3842E+03 4.5185E+03 - 1.4125E-01 9.0485E+03 9.1888E+03 4.6577E+03 3.8881E+03 - 1.5849E-01 7.7553E+03 7.8460E+03 3.9980E+03 3.3058E+03 - 1.7783E-01 6.5954E+03 6.6466E+03 3.3981E+03 2.7774E+03 - 1.9953E-01 5.5041E+03 5.5540E+03 2.8436E+03 2.3019E+03 - 2.2387E-01 4.5127E+03 4.5725E+03 2.3602E+03 1.9055E+03 - 2.5119E-01 3.6701E+03 3.7155E+03 1.9437E+03 1.5614E+03 - 2.8184E-01 2.9544E+03 2.9821E+03 1.5746E+03 1.2559E+03 - 3.1623E-01 2.3512E+03 2.3708E+03 1.2628E+03 1.0029E+03 - 3.5481E-01 1.8539E+03 1.8642E+03 9.9708E+02 7.8606E+02 - 3.9811E-01 1.4462E+03 1.4488E+03 7.8123E+02 6.0882E+02 - 4.4668E-01 1.1179E+03 1.1157E+03 6.0674E+02 4.7354E+02 - 5.0119E-01 8.6364E+02 8.5876E+02 4.6334E+02 3.6131E+02 - 5.6234E-01 6.6196E+02 6.5440E+02 3.5294E+02 2.7488E+02 - 6.3096E-01 5.0154E+02 4.8966E+02 2.6620E+02 2.0730E+02 - 7.0795E-01 3.7758E+02 3.6836E+02 1.9953E+02 1.5434E+02 - 7.9433E-01 2.8522E+02 2.7652E+02 1.4794E+02 1.1482E+02 - 8.9125E-01 2.1280E+02 2.0524E+02 1.0940E+02 8.4653E+01 - 1.0000E+00 1.5925E+02 1.5204E+02 8.0510E+01 6.1996E+01 - 1.1220E+00 1.1912E+02 1.1275E+02 5.8521E+01 4.5221E+01 - 1.2589E+00 8.8959E+01 8.3003E+01 4.2302E+01 3.2855E+01 - 1.4125E+00 6.6168E+01 6.0617E+01 3.0707E+01 2.3808E+01 - 1.5849E+00 4.9126E+01 4.4446E+01 2.2111E+01 1.6951E+01 - 1.7783E+00 3.6110E+01 3.2566E+01 1.5831E+01 1.2153E+01 - 1.9953E+00 2.6263E+01 2.3492E+01 1.1204E+01 8.7059E+00 - 2.2387E+00 1.9302E+01 1.6988E+01 7.9601E+00 6.1142E+00 - 2.5119E+00 1.4185E+01 1.2285E+01 5.5819E+00 4.2842E+00 - 2.8184E+00 1.0236E+01 8.9151E+00 3.8501E+00 2.9386E+00 - 3.1623E+00 7.4779E+00 6.3497E+00 2.6992E+00 2.0675E+00 - 3.5481E+00 5.3951E+00 4.5420E+00 1.8614E+00 1.4324E+00 - 3.9811E+00 3.8813E+00 3.2593E+00 1.2933E+00 9.8051E-01 - 4.4668E+00 2.8047E+00 2.3228E+00 8.9338E-01 6.7288E-01 - 5.0119E+00 2.0257E+00 1.6590E+00 6.0957E-01 4.5819E-01 - 5.6234E+00 1.4576E+00 1.1776E+00 4.0814E-01 3.1291E-01 - 6.3096E+00 1.0434E+00 8.3557E-01 2.7395E-01 2.1384E-01 - 7.0795E+00 7.4632E-01 5.9068E-01 1.8793E-01 1.4307E-01 - 7.9433E+00 5.4348E-01 4.2223E-01 1.2510E-01 9.4948E-02 - 8.9125E+00 3.8871E-01 3.0419E-01 8.4453E-02 6.3342E-02 - 1.0000E+01 2.7480E-01 2.1349E-01 5.7995E-02 4.3066E-02 - 1.1220E+01 1.9561E-01 1.5162E-01 3.8211E-02 2.9201E-02 - 1.2589E+01 1.4012E-01 1.0705E-01 2.5119E-02 1.9468E-02 - 1.4125E+01 1.0002E-01 7.5730E-02 1.6600E-02 1.2840E-02 - 1.5849E+01 7.1044E-02 5.3629E-02 1.1191E-02 8.5871E-03 - 1.7783E+01 5.0368E-02 3.7856E-02 7.5469E-03 5.8602E-03 - 1.9953E+01 3.6028E-02 2.6815E-02 5.0491E-03 3.9188E-03 - 2.2387E+01 2.5758E-02 1.9038E-02 3.3426E-03 2.5570E-03 - 2.5119E+01 1.8351E-02 1.3576E-02 2.2162E-03 1.6910E-03 - 2.8184E+01 1.3256E-02 9.8288E-03 1.4969E-03 1.2143E-03 - 3.1623E+01 9.2061E-03 6.7615E-03 9.7717E-04 7.7088E-04 - 3.5481E+01 6.5324E-03 4.7757E-03 6.5216E-04 5.1910E-04 - 3.9811E+01 4.6409E-03 3.3664E-03 4.3533E-04 3.4908E-04 - 4.4668E+01 3.2865E-03 2.3712E-03 2.8927E-04 2.3247E-04 - 5.0119E+01 2.3114E-03 1.6712E-03 1.9500E-04 1.5543E-04 - 5.6234E+01 1.6279E-03 1.1701E-03 1.3301E-04 1.0554E-04 - 6.3096E+01 1.1517E-03 8.2014E-04 8.9718E-05 7.1102E-05 - 7.0795E+01 8.1466E-04 5.7942E-04 5.9854E-05 4.6474E-05 - 7.9433E+01 5.7637E-04 4.0600E-04 3.9463E-05 3.2057E-05 - 8.9125E+01 4.0522E-04 2.8202E-04 2.6929E-05 2.1980E-05 - 1.0000E+02 2.8388E-04 1.9823E-04 1.8365E-05 1.4641E-05 - 1.1220E+02 1.9891E-04 1.3850E-04 1.2186E-05 9.9988E-06 - 1.2589E+02 1.3927E-04 9.6412E-05 8.1719E-06 6.7645E-06 - 1.4125E+02 9.7618E-05 6.7123E-05 5.5576E-06 4.5144E-06 - 1.5849E+02 6.8653E-05 4.6708E-05 3.7436E-06 3.0194E-06 - 1.7783E+02 4.8046E-05 3.2193E-05 2.4558E-06 2.0442E-06 - 1.9953E+02 3.3551E-05 2.2355E-05 1.6697E-06 1.3950E-06 - 2.2387E+02 2.3399E-05 1.5505E-05 1.1732E-06 9.1865E-07 - 2.5119E+02 1.6218E-05 1.0719E-05 7.9474E-07 6.2774E-07 - 2.8184E+02 1.1292E-05 7.4862E-06 5.2564E-07 4.3334E-07 - 3.1623E+02 7.8724E-06 5.1684E-06 3.6694E-07 2.9483E-07 - 3.5481E+02 5.4864E-06 3.5509E-06 2.4534E-07 1.9858E-07 - 3.9811E+02 3.8122E-06 2.4519E-06 1.6475E-07 1.3323E-07 - 4.4668E+02 2.6460E-06 1.6991E-06 1.1276E-07 8.9647E-08 - 5.0119E+02 1.8372E-06 1.1639E-06 7.5783E-08 5.8957E-08 - 5.6234E+02 1.2714E-06 7.9857E-07 5.1371E-08 3.9588E-08 - 6.3096E+02 8.7140E-07 5.4672E-07 3.4213E-08 2.7380E-08 - 7.0795E+02 6.0143E-07 3.7311E-07 2.3252E-08 1.8761E-08 - 7.9433E+02 4.1661E-07 2.5558E-07 1.5951E-08 1.2504E-08 - 8.9125E+02 2.8432E-07 1.7521E-07 1.0718E-08 8.4451E-09 - 1.0000E+03 1.9584E-07 1.2091E-07 7.3688E-09 5.4482E-09 - 1.1220E+03 1.3342E-07 8.1182E-08 4.9974E-09 3.5833E-09 - 1.2589E+03 9.1254E-08 5.5477E-08 3.2520E-09 2.3375E-09 - 1.4125E+03 6.1351E-08 3.7622E-08 2.0625E-09 1.5792E-09 - 1.5849E+03 4.1822E-08 2.4991E-08 1.3783E-09 1.0717E-09 - 1.7783E+03 2.8560E-08 1.6656E-08 8.8936E-10 7.2382E-10 - 1.9953E+03 1.9213E-08 1.1293E-08 6.0107E-10 4.7859E-10 - 2.2387E+03 1.2851E-08 7.5077E-09 4.2163E-10 3.2492E-10 - 2.5119E+03 8.6554E-09 5.0297E-09 2.8354E-10 1.8791E-10 - 2.8184E+03 5.8532E-09 3.3688E-09 1.8204E-10 1.2088E-10 - 3.1623E+03 4.0266E-09 2.3192E-09 1.1720E-10 8.7167E-11 - 3.5481E+03 2.6005E-09 1.5044E-09 8.0917E-11 5.7096E-11 - 3.9811E+03 1.7362E-09 9.9547E-10 5.4583E-11 3.8507E-11 - 4.4668E+03 1.1684E-09 6.5817E-10 3.4996E-11 2.5517E-11 - 5.0119E+03 7.7514E-10 4.3475E-10 2.3075E-11 1.6476E-11 - 5.6234E+03 5.1375E-10 2.8700E-10 1.3887E-11 1.0981E-11 - 6.3096E+03 3.3490E-10 1.8754E-10 1.0128E-11 7.2889E-12 - 7.0795E+03 2.2349E-10 1.2329E-10 6.7584E-12 4.8339E-12 - 7.9433E+03 1.4830E-10 8.2305E-11 4.3251E-12 2.8177E-12 - 8.9125E+03 9.7186E-11 5.3977E-11 2.7919E-12 1.8063E-12 - 1.0000E+04 6.3230E-11 3.4713E-11 1.9288E-12 1.1438E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4388E+04 1.4533E+04 7.2982E+03 6.4083E+03 - 1.1220E-01 1.2585E+04 1.2731E+04 6.4042E+03 5.5632E+03 - 1.2589E-01 1.0888E+04 1.1018E+04 5.5655E+03 4.7990E+03 - 1.4125E-01 9.3691E+03 9.4321E+03 4.8096E+03 4.0859E+03 - 1.5849E-01 8.0126E+03 8.0339E+03 4.0940E+03 3.4602E+03 - 1.7783E-01 6.7364E+03 6.7628E+03 3.4547E+03 2.8995E+03 - 1.9953E-01 5.5929E+03 5.6201E+03 2.8989E+03 2.4091E+03 - 2.2387E-01 4.5963E+03 4.6136E+03 2.4064E+03 1.9738E+03 - 2.5119E-01 3.7453E+03 3.7524E+03 1.9711E+03 1.6014E+03 - 2.8184E-01 3.0145E+03 2.9979E+03 1.5999E+03 1.2958E+03 - 3.1623E-01 2.3857E+03 2.3788E+03 1.2877E+03 1.0370E+03 - 3.5481E-01 1.8816E+03 1.8856E+03 1.0204E+03 8.1508E+02 - 3.9811E-01 1.4723E+03 1.4738E+03 7.9900E+02 6.3635E+02 - 4.4668E-01 1.1378E+03 1.1430E+03 6.2303E+02 4.9586E+02 - 5.0119E-01 8.7807E+02 8.7942E+02 4.8301E+02 3.8044E+02 - 5.6234E-01 6.7443E+02 6.7025E+02 3.6967E+02 2.9054E+02 - 6.3096E-01 5.1324E+02 5.0624E+02 2.8207E+02 2.2140E+02 - 7.0795E-01 3.8740E+02 3.7949E+02 2.1251E+02 1.6594E+02 - 7.9433E-01 2.9154E+02 2.8321E+02 1.5809E+02 1.2332E+02 - 8.9125E-01 2.1912E+02 2.1172E+02 1.1753E+02 8.9848E+01 - 1.0000E+00 1.6441E+02 1.5784E+02 8.6285E+01 6.6827E+01 - 1.1220E+00 1.2300E+02 1.1741E+02 6.3182E+01 4.9454E+01 - 1.2589E+00 9.2014E+01 8.6984E+01 4.6274E+01 3.6077E+01 - 1.4125E+00 6.8162E+01 6.3643E+01 3.3480E+01 2.6040E+01 - 1.5849E+00 5.0658E+01 4.6778E+01 2.4453E+01 1.8733E+01 - 1.7783E+00 3.7842E+01 3.4401E+01 1.7640E+01 1.3403E+01 - 1.9953E+00 2.7891E+01 2.5115E+01 1.2585E+01 9.5728E+00 - 2.2387E+00 2.0224E+01 1.8270E+01 9.0890E+00 6.7768E+00 - 2.5119E+00 1.4812E+01 1.3227E+01 6.3930E+00 4.8315E+00 - 2.8184E+00 1.0897E+01 9.5175E+00 4.3713E+00 3.3838E+00 - 3.1623E+00 7.7943E+00 6.7424E+00 3.0557E+00 2.3567E+00 - 3.5481E+00 5.6280E+00 4.8515E+00 2.1547E+00 1.6357E+00 - 3.9811E+00 4.0829E+00 3.4872E+00 1.4962E+00 1.1447E+00 - 4.4668E+00 2.9409E+00 2.4648E+00 1.0283E+00 7.7475E-01 - 5.0119E+00 2.1078E+00 1.7574E+00 7.0456E-01 5.2666E-01 - 5.6234E+00 1.5211E+00 1.2606E+00 4.8185E-01 3.7003E-01 - 6.3096E+00 1.0963E+00 8.9817E-01 3.2840E-01 2.5030E-01 - 7.0795E+00 7.8438E-01 6.3768E-01 2.1901E-01 1.6479E-01 - 7.9433E+00 5.6354E-01 4.5350E-01 1.4753E-01 1.1243E-01 - 8.9125E+00 4.0508E-01 3.1897E-01 1.0174E-01 7.7079E-02 - 1.0000E+01 2.8599E-01 2.2738E-01 6.7598E-02 5.1054E-02 - 1.1220E+01 2.0365E-01 1.6293E-01 4.5589E-02 3.4848E-02 - 1.2589E+01 1.4520E-01 1.1478E-01 3.0566E-02 2.3742E-02 - 1.4125E+01 1.0440E-01 8.1166E-02 2.0116E-02 1.5659E-02 - 1.5849E+01 7.5022E-02 5.7354E-02 1.3295E-02 1.0454E-02 - 1.7783E+01 5.3140E-02 4.0454E-02 8.9979E-03 6.9609E-03 - 1.9953E+01 3.7940E-02 2.8870E-02 6.0024E-03 4.6599E-03 - 2.2387E+01 2.7184E-02 2.0564E-02 4.0349E-03 3.1280E-03 - 2.5119E+01 1.9165E-02 1.4502E-02 2.6897E-03 2.0635E-03 - 2.8184E+01 1.3480E-02 1.0248E-02 1.7633E-03 1.3506E-03 - 3.1623E+01 9.6826E-03 7.1936E-03 1.1680E-03 9.2089E-04 - 3.5481E+01 6.8889E-03 5.0808E-03 7.7476E-04 6.1474E-04 - 3.9811E+01 4.8823E-03 3.6023E-03 5.1794E-04 4.1096E-04 - 4.4668E+01 3.4543E-03 2.5478E-03 3.5074E-04 2.7219E-04 - 5.0119E+01 2.4468E-03 1.7870E-03 2.3556E-04 1.8189E-04 - 5.6234E+01 1.7346E-03 1.2606E-03 1.5465E-04 1.2234E-04 - 6.3096E+01 1.2272E-03 8.8663E-04 1.0315E-04 8.3317E-05 - 7.0795E+01 8.6599E-04 6.2062E-04 6.9565E-05 5.7195E-05 - 7.9433E+01 6.1070E-04 4.3167E-04 4.6325E-05 3.7870E-05 - 8.9125E+01 4.2963E-04 3.0110E-04 3.1072E-05 2.4784E-05 - 1.0000E+02 3.0115E-04 2.1212E-04 2.0860E-05 1.6835E-05 - 1.1220E+02 2.1156E-04 1.4830E-04 1.3945E-05 1.1548E-05 - 1.2589E+02 1.4857E-04 1.0381E-04 9.3122E-06 7.7197E-06 - 1.4125E+02 1.0431E-04 7.2252E-05 6.3021E-06 5.1148E-06 - 1.5849E+02 7.3146E-05 5.0329E-05 4.2237E-06 3.4808E-06 - 1.7783E+02 5.1194E-05 3.4978E-05 2.8146E-06 2.3294E-06 - 1.9953E+02 3.5944E-05 2.4244E-05 1.9397E-06 1.5826E-06 - 2.2387E+02 2.5069E-05 1.6824E-05 1.3352E-06 1.1056E-06 - 2.5119E+02 1.7445E-05 1.1587E-05 9.0936E-07 7.3534E-07 - 2.8184E+02 1.2251E-05 8.0011E-06 5.9744E-07 4.8745E-07 - 3.1623E+02 8.5690E-06 5.5725E-06 4.1340E-07 3.3132E-07 - 3.5481E+02 5.9402E-06 3.8576E-06 2.8391E-07 2.2271E-07 - 3.9811E+02 4.1181E-06 2.6771E-06 1.9343E-07 1.5410E-07 - 4.4668E+02 2.8447E-06 1.8483E-06 1.2814E-07 9.9448E-08 - 5.0119E+02 1.9667E-06 1.2760E-06 8.6412E-08 6.5371E-08 - 5.6234E+02 1.3799E-06 8.8318E-07 5.9390E-08 4.6076E-08 - 6.3096E+02 9.5359E-07 6.0234E-07 4.0267E-08 3.1232E-08 - 7.0795E+02 6.6312E-07 4.1468E-07 2.6672E-08 2.0778E-08 - 7.9433E+02 4.5584E-07 2.8604E-07 1.8113E-08 1.3940E-08 - 8.9125E+02 3.1206E-07 1.9510E-07 1.1968E-08 9.3098E-09 - 1.0000E+03 2.1665E-07 1.3221E-07 8.1902E-09 6.3256E-09 - 1.1220E+03 1.4883E-07 8.9778E-08 5.4210E-09 4.0263E-09 - 1.2589E+03 1.0094E-07 6.1727E-08 3.7172E-09 2.7117E-09 - 1.4125E+03 6.8420E-08 4.1478E-08 2.5618E-09 1.8305E-09 - 1.5849E+03 4.6935E-08 2.7897E-08 1.5957E-09 1.2203E-09 - 1.7783E+03 3.1912E-08 1.8959E-08 1.0413E-09 8.0852E-10 - 1.9953E+03 2.1546E-08 1.2701E-08 7.4023E-10 5.3532E-10 - 2.2387E+03 1.4605E-08 8.5639E-09 4.7872E-10 3.3833E-10 - 2.5119E+03 9.8596E-09 5.7342E-09 3.0736E-10 2.3034E-10 - 2.8184E+03 6.5946E-09 3.8647E-09 2.0993E-10 1.6212E-10 - 3.1623E+03 4.5214E-09 2.6278E-09 1.3950E-10 1.0144E-10 - 3.5481E+03 2.9849E-09 1.7054E-09 9.3238E-11 6.7231E-11 - 3.9811E+03 2.0121E-09 1.1277E-09 5.9356E-11 4.4669E-11 - 4.4668E+03 1.3455E-09 7.5176E-10 3.6935E-11 2.9957E-11 - 5.0119E+03 8.9376E-10 5.0500E-10 2.4590E-11 2.0310E-11 - 5.6234E+03 5.8382E-10 3.3884E-10 1.7482E-11 1.3121E-11 - 6.3096E+03 3.9118E-10 2.1900E-10 1.1863E-11 8.8918E-12 - 7.0795E+03 2.6148E-10 1.4297E-10 7.5450E-12 5.9735E-12 - 7.9433E+03 1.7324E-10 9.5520E-11 5.0625E-12 3.8623E-12 - 8.9125E+03 1.1323E-10 6.2730E-11 3.1410E-12 2.5029E-12 - 1.0000E+04 7.3436E-11 3.9900E-11 1.8956E-12 1.7321E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4286E+04 1.4353E+04 7.1165E+03 6.4051E+03 - 1.1220E-01 1.2439E+04 1.2476E+04 6.2515E+03 5.5958E+03 - 1.2589E-01 1.0810E+04 1.0797E+04 5.4147E+03 4.8151E+03 - 1.4125E-01 9.2939E+03 9.2848E+03 4.6544E+03 4.1089E+03 - 1.5849E-01 7.9328E+03 7.8882E+03 3.9782E+03 3.4718E+03 - 1.7783E-01 6.6899E+03 6.6389E+03 3.3643E+03 2.8994E+03 - 1.9953E-01 5.5498E+03 5.5159E+03 2.8161E+03 2.4134E+03 - 2.2387E-01 4.5651E+03 4.5176E+03 2.3463E+03 1.9852E+03 - 2.5119E-01 3.7132E+03 3.6552E+03 1.9352E+03 1.6075E+03 - 2.8184E-01 2.9815E+03 2.9356E+03 1.5692E+03 1.3033E+03 - 3.1623E-01 2.3654E+03 2.3352E+03 1.2494E+03 1.0433E+03 - 3.5481E-01 1.8580E+03 1.8418E+03 9.8973E+02 8.1525E+02 - 3.9811E-01 1.4559E+03 1.4441E+03 7.7927E+02 6.3277E+02 - 4.4668E-01 1.1331E+03 1.1182E+03 6.1323E+02 4.9189E+02 - 5.0119E-01 8.7718E+02 8.5610E+02 4.7380E+02 3.8087E+02 - 5.6234E-01 6.7276E+02 6.5297E+02 3.6062E+02 2.8988E+02 - 6.3096E-01 5.1392E+02 5.0113E+02 2.7592E+02 2.1879E+02 - 7.0795E-01 3.8998E+02 3.7836E+02 2.0793E+02 1.6431E+02 - 7.9433E-01 2.9252E+02 2.8165E+02 1.5503E+02 1.2211E+02 - 8.9125E-01 2.2102E+02 2.1027E+02 1.1567E+02 9.1451E+01 - 1.0000E+00 1.6467E+02 1.5731E+02 8.5349E+01 6.7334E+01 - 1.1220E+00 1.2286E+02 1.1718E+02 6.3117E+01 4.9242E+01 - 1.2589E+00 9.2329E+01 8.6501E+01 4.6362E+01 3.5963E+01 - 1.4125E+00 6.8963E+01 6.3908E+01 3.3586E+01 2.6143E+01 - 1.5849E+00 5.1033E+01 4.7025E+01 2.4307E+01 1.8794E+01 - 1.7783E+00 3.7494E+01 3.4236E+01 1.7531E+01 1.3531E+01 - 1.9953E+00 2.7498E+01 2.5069E+01 1.2733E+01 9.7298E+00 - 2.2387E+00 2.0318E+01 1.8231E+01 9.0475E+00 6.9328E+00 - 2.5119E+00 1.4925E+01 1.3091E+01 6.2995E+00 4.8931E+00 - 2.8184E+00 1.0750E+01 9.4041E+00 4.3992E+00 3.4339E+00 - 3.1623E+00 7.8210E+00 6.8108E+00 3.0802E+00 2.3404E+00 - 3.5481E+00 5.6534E+00 4.8675E+00 2.1577E+00 1.6176E+00 - 3.9811E+00 4.0582E+00 3.4799E+00 1.5003E+00 1.1189E+00 - 4.4668E+00 2.9214E+00 2.5011E+00 1.0364E+00 7.7570E-01 - 5.0119E+00 2.1234E+00 1.7828E+00 7.0809E-01 5.3276E-01 - 5.6234E+00 1.5240E+00 1.2669E+00 4.8212E-01 3.6579E-01 - 6.3096E+00 1.0895E+00 8.9917E-01 3.2456E-01 2.4837E-01 - 7.0795E+00 7.9323E-01 6.4430E-01 2.2177E-01 1.6623E-01 - 7.9433E+00 5.8084E-01 4.6019E-01 1.5144E-01 1.1432E-01 - 8.9125E+00 4.0841E-01 3.2674E-01 1.0298E-01 7.7958E-02 - 1.0000E+01 2.8606E-01 2.2666E-01 6.8527E-02 5.1179E-02 - 1.1220E+01 2.0567E-01 1.6128E-01 4.5331E-02 3.3777E-02 - 1.2589E+01 1.4701E-01 1.1454E-01 3.0563E-02 2.2838E-02 - 1.4125E+01 1.0423E-01 8.1540E-02 2.0880E-02 1.5587E-02 - 1.5849E+01 7.4141E-02 5.8325E-02 1.3702E-02 1.0277E-02 - 1.7783E+01 5.2878E-02 4.0756E-02 9.1461E-03 7.0575E-03 - 1.9953E+01 3.7545E-02 2.8222E-02 6.0568E-03 4.8263E-03 - 2.2387E+01 2.6830E-02 2.0279E-02 4.0016E-03 3.1904E-03 - 2.5119E+01 1.9245E-02 1.4523E-02 2.6819E-03 2.1124E-03 - 2.8184E+01 1.3869E-02 9.9854E-03 1.7960E-03 1.4309E-03 - 3.1623E+01 9.6426E-03 7.1931E-03 1.1891E-03 9.2580E-04 - 3.5481E+01 6.8598E-03 5.0855E-03 7.8806E-04 6.1359E-04 - 3.9811E+01 4.8713E-03 3.5836E-03 5.2381E-04 4.0880E-04 - 4.4668E+01 3.4537E-03 2.5345E-03 3.4435E-04 2.7197E-04 - 5.0119E+01 2.4527E-03 1.7857E-03 2.2645E-04 1.8179E-04 - 5.6234E+01 1.7336E-03 1.2526E-03 1.5310E-04 1.2366E-04 - 6.3096E+01 1.2236E-03 8.7514E-04 1.0274E-04 8.2521E-05 - 7.0795E+01 8.6341E-04 6.1506E-04 6.9641E-05 5.5996E-05 - 7.9433E+01 6.0864E-04 4.3483E-04 4.7615E-05 3.8170E-05 - 8.9125E+01 4.3085E-04 3.0350E-04 3.1168E-05 2.4895E-05 - 1.0000E+02 3.0205E-04 2.1219E-04 2.0737E-05 1.6780E-05 - 1.1220E+02 2.1200E-04 1.4836E-04 1.3878E-05 1.1315E-05 - 1.2589E+02 1.4863E-04 1.0319E-04 9.4057E-06 7.7380E-06 - 1.4125E+02 1.0408E-04 7.1590E-05 6.4382E-06 5.2659E-06 - 1.5849E+02 7.3047E-05 5.0065E-05 4.2982E-06 3.5024E-06 - 1.7783E+02 5.1184E-05 3.4801E-05 2.8811E-06 2.3420E-06 - 1.9953E+02 3.5939E-05 2.4155E-05 1.9554E-06 1.6250E-06 - 2.2387E+02 2.5115E-05 1.6858E-05 1.3242E-06 1.0798E-06 - 2.5119E+02 1.7500E-05 1.1692E-05 8.9480E-07 7.0348E-07 - 2.8184E+02 1.2215E-05 8.1150E-06 6.0235E-07 4.8533E-07 - 3.1623E+02 8.5134E-06 5.5901E-06 4.1781E-07 3.3334E-07 - 3.5481E+02 5.9047E-06 3.8609E-06 2.7652E-07 2.2276E-07 - 3.9811E+02 4.0995E-06 2.6787E-06 1.8979E-07 1.4922E-07 - 4.4668E+02 2.8597E-06 1.8468E-06 1.2942E-07 9.9886E-08 - 5.0119E+02 1.9840E-06 1.2741E-06 8.4520E-08 6.7334E-08 - 5.6234E+02 1.3819E-06 8.8574E-07 5.8155E-08 4.5897E-08 - 6.3096E+02 9.5279E-07 6.0673E-07 3.9563E-08 3.1647E-08 - 7.0795E+02 6.5911E-07 4.1502E-07 2.6705E-08 2.1157E-08 - 7.9433E+02 4.5675E-07 2.8354E-07 1.8003E-08 1.3991E-08 - 8.9125E+02 3.1299E-07 1.9493E-07 1.2141E-08 9.5190E-09 - 1.0000E+03 2.1726E-07 1.3310E-07 7.9853E-09 6.2619E-09 - 1.1220E+03 1.4844E-07 9.0291E-08 5.3456E-09 4.1982E-09 - 1.2589E+03 1.0103E-07 6.1503E-08 3.6581E-09 2.8166E-09 - 1.4125E+03 6.8717E-08 4.1503E-08 2.4841E-09 1.8548E-09 - 1.5849E+03 4.6915E-08 2.8130E-08 1.6610E-09 1.2085E-09 - 1.7783E+03 3.1809E-08 1.8858E-08 1.0930E-09 8.4432E-10 - 1.9953E+03 2.1693E-08 1.2742E-08 7.4064E-10 5.6755E-10 - 2.2387E+03 1.4747E-08 8.6620E-09 5.0058E-10 3.6071E-10 - 2.5119E+03 9.8409E-09 5.8016E-09 3.1032E-10 2.3589E-10 - 2.8184E+03 6.6295E-09 3.8753E-09 2.0156E-10 1.6071E-10 - 3.1623E+03 4.5510E-09 2.6724E-09 1.3883E-10 9.8651E-11 - 3.5481E+03 2.9458E-09 1.7428E-09 8.7615E-11 6.4290E-11 - 3.9811E+03 1.9706E-09 1.1401E-09 6.0951E-11 4.2753E-11 - 4.4668E+03 1.3150E-09 7.5352E-10 4.1725E-11 2.9192E-11 - 5.0119E+03 8.8694E-10 5.0263E-10 2.6571E-11 2.0182E-11 - 5.6234E+03 5.9392E-10 3.3360E-10 1.8282E-11 1.3329E-11 - 6.3096E+03 3.8861E-10 2.1867E-10 1.1702E-11 8.3494E-12 - 7.0795E+03 2.5937E-10 1.4324E-10 7.5877E-12 5.2819E-12 - 7.9433E+03 1.7097E-10 9.4175E-11 4.9055E-12 3.3526E-12 - 8.9125E+03 1.1299E-10 6.1758E-11 3.4348E-12 2.1027E-12 - 1.0000E+04 7.4087E-11 4.0225E-11 2.2139E-12 1.4382E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4237E+04 1.4222E+04 6.9767E+03 6.3922E+03 - 1.1220E-01 1.2407E+04 1.2354E+04 6.1286E+03 5.5869E+03 - 1.2589E-01 1.0782E+04 1.0698E+04 5.3411E+03 4.8225E+03 - 1.4125E-01 9.2972E+03 9.1796E+03 4.5849E+03 4.1013E+03 - 1.5849E-01 7.9224E+03 7.7828E+03 3.9011E+03 3.4758E+03 - 1.7783E-01 6.6728E+03 6.5431E+03 3.3048E+03 2.9116E+03 - 1.9953E-01 5.5398E+03 5.4219E+03 2.7773E+03 2.4166E+03 - 2.2387E-01 4.5373E+03 4.4504E+03 2.3119E+03 1.9884E+03 - 2.5119E-01 3.6796E+03 3.6203E+03 1.8916E+03 1.6132E+03 - 2.8184E-01 2.9578E+03 2.9065E+03 1.5273E+03 1.3049E+03 - 3.1623E-01 2.3632E+03 2.3235E+03 1.2220E+03 1.0398E+03 - 3.5481E-01 1.8668E+03 1.8355E+03 9.7667E+02 8.1621E+02 - 3.9811E-01 1.4499E+03 1.4361E+03 7.7157E+02 6.4006E+02 - 4.4668E-01 1.1293E+03 1.1114E+03 6.0028E+02 4.9606E+02 - 5.0119E-01 8.7741E+02 8.5080E+02 4.6513E+02 3.8182E+02 - 5.6234E-01 6.6808E+02 6.5560E+02 3.5772E+02 2.9220E+02 - 6.3096E-01 5.0625E+02 4.9828E+02 2.7211E+02 2.1922E+02 - 7.0795E-01 3.8402E+02 3.7780E+02 2.0739E+02 1.6455E+02 - 7.9433E-01 2.8963E+02 2.8242E+02 1.5529E+02 1.2372E+02 - 8.9125E-01 2.1823E+02 2.0882E+02 1.1439E+02 9.0496E+01 - 1.0000E+00 1.6362E+02 1.5658E+02 8.4936E+01 6.6854E+01 - 1.1220E+00 1.2270E+02 1.1694E+02 6.2416E+01 4.9187E+01 - 1.2589E+00 9.1465E+01 8.5898E+01 4.5648E+01 3.6053E+01 - 1.4125E+00 6.8212E+01 6.3302E+01 3.3293E+01 2.6091E+01 - 1.5849E+00 5.0765E+01 4.6789E+01 2.4110E+01 1.8511E+01 - 1.7783E+00 3.7486E+01 3.4457E+01 1.7486E+01 1.3217E+01 - 1.9953E+00 2.7643E+01 2.5181E+01 1.2518E+01 9.6407E+00 - 2.2387E+00 2.0160E+01 1.8213E+01 8.8806E+00 6.9404E+00 - 2.5119E+00 1.4797E+01 1.3182E+01 6.2777E+00 4.8736E+00 - 2.8184E+00 1.0689E+01 9.4901E+00 4.3817E+00 3.4063E+00 - 3.1623E+00 7.7326E+00 6.7484E+00 3.0971E+00 2.3395E+00 - 3.5481E+00 5.6150E+00 4.8665E+00 2.1578E+00 1.6166E+00 - 3.9811E+00 4.0595E+00 3.4832E+00 1.4809E+00 1.1148E+00 - 4.4668E+00 2.9261E+00 2.4574E+00 1.0120E+00 7.6838E-01 - 5.0119E+00 2.1117E+00 1.7624E+00 6.9629E-01 5.3266E-01 - 5.6234E+00 1.5171E+00 1.2591E+00 4.7589E-01 3.6549E-01 - 6.3096E+00 1.0918E+00 8.9748E-01 3.2311E-01 2.4657E-01 - 7.0795E+00 7.7623E-01 6.4024E-01 2.2390E-01 1.6487E-01 - 7.9433E+00 5.5966E-01 4.4915E-01 1.5132E-01 1.1329E-01 - 8.9125E+00 4.0082E-01 3.1981E-01 1.0074E-01 7.8237E-02 - 1.0000E+01 2.8520E-01 2.2757E-01 6.8664E-02 5.0744E-02 - 1.1220E+01 2.0502E-01 1.6040E-01 4.5274E-02 3.4440E-02 - 1.2589E+01 1.4589E-01 1.1433E-01 3.0289E-02 2.3296E-02 - 1.4125E+01 1.0387E-01 8.1464E-02 2.0296E-02 1.5518E-02 - 1.5849E+01 7.4297E-02 5.7747E-02 1.3725E-02 1.0230E-02 - 1.7783E+01 5.2389E-02 4.1226E-02 9.0905E-03 6.7986E-03 - 1.9953E+01 3.7615E-02 2.8883E-02 5.9415E-03 4.6756E-03 - 2.2387E+01 2.6580E-02 2.0198E-02 4.0463E-03 3.0533E-03 - 2.5119E+01 1.8964E-02 1.4500E-02 2.5898E-03 1.9855E-03 - 2.8184E+01 1.3692E-02 1.0335E-02 1.7440E-03 1.3598E-03 - 3.1623E+01 9.6517E-03 7.1916E-03 1.1732E-03 9.1940E-04 - 3.5481E+01 6.8560E-03 5.0827E-03 7.8716E-04 6.1016E-04 - 3.9811E+01 4.8704E-03 3.5840E-03 5.2605E-04 4.0568E-04 - 4.4668E+01 3.4561E-03 2.5272E-03 3.4726E-04 2.7452E-04 - 5.0119E+01 2.4431E-03 1.7812E-03 2.3026E-04 1.8636E-04 - 5.6234E+01 1.7301E-03 1.2543E-03 1.5395E-04 1.2426E-04 - 6.3096E+01 1.2244E-03 8.7923E-04 1.0491E-04 8.3384E-05 - 7.0795E+01 8.6182E-04 6.1851E-04 6.9177E-05 5.5386E-05 - 7.9433E+01 6.0489E-04 4.3474E-04 4.5811E-05 3.7467E-05 - 8.9125E+01 4.2607E-04 3.0688E-04 3.1691E-05 2.5811E-05 - 1.0000E+02 3.0177E-04 2.1332E-04 2.0777E-05 1.6777E-05 - 1.1220E+02 2.1197E-04 1.4859E-04 1.4086E-05 1.1274E-05 - 1.2589E+02 1.4892E-04 1.0362E-04 9.4280E-06 7.5717E-06 - 1.4125E+02 1.0473E-04 7.2132E-05 6.3170E-06 5.1625E-06 - 1.5849E+02 7.3298E-05 5.0431E-05 4.3319E-06 3.5416E-06 - 1.7783E+02 5.1389E-05 3.5289E-05 2.9481E-06 2.3332E-06 - 1.9953E+02 3.6000E-05 2.4451E-05 2.0168E-06 1.5773E-06 - 2.2387E+02 2.5115E-05 1.6940E-05 1.3854E-06 1.1117E-06 - 2.5119E+02 1.7539E-05 1.1696E-05 9.1363E-07 7.4192E-07 - 2.8184E+02 1.2187E-05 8.1220E-06 6.0214E-07 5.1990E-07 - 3.1623E+02 8.4988E-06 5.6165E-06 4.1206E-07 3.3847E-07 - 3.5481E+02 5.9139E-06 3.8807E-06 2.7741E-07 2.2671E-07 - 3.9811E+02 4.1248E-06 2.6713E-06 1.8911E-07 1.5260E-07 - 4.4668E+02 2.8620E-06 1.8405E-06 1.2818E-07 1.0243E-07 - 5.0119E+02 1.9870E-06 1.2759E-06 8.6448E-08 6.9200E-08 - 5.6234E+02 1.3888E-06 8.7896E-07 5.9150E-08 4.7006E-08 - 6.3096E+02 9.5829E-07 6.0378E-07 3.9969E-08 3.1019E-08 - 7.0795E+02 6.6248E-07 4.1522E-07 2.6151E-08 2.0272E-08 - 7.9433E+02 4.5635E-07 2.8675E-07 1.7790E-08 1.3264E-08 - 8.9125E+02 3.1502E-07 1.9650E-07 1.2039E-08 9.0682E-09 - 1.0000E+03 2.1738E-07 1.3323E-07 8.0329E-09 6.2808E-09 - 1.1220E+03 1.4805E-07 9.0019E-08 5.4404E-09 4.2176E-09 - 1.2589E+03 1.0135E-07 6.0895E-08 3.6972E-09 2.9391E-09 - 1.4125E+03 6.9782E-08 4.1382E-08 2.4491E-09 1.8847E-09 - 1.5849E+03 4.7062E-08 2.8537E-08 1.6109E-09 1.2288E-09 - 1.7783E+03 3.1692E-08 1.9281E-08 1.1164E-09 8.5469E-10 - 1.9953E+03 2.1713E-08 1.2764E-08 7.4273E-10 5.6825E-10 - 2.2387E+03 1.4651E-08 8.5555E-09 4.9290E-10 3.6627E-10 - 2.5119E+03 9.8358E-09 5.7984E-09 3.0651E-10 2.2835E-10 - 2.8184E+03 6.5963E-09 3.9188E-09 2.0016E-10 1.4768E-10 - 3.1623E+03 4.5151E-09 2.6564E-09 1.3645E-10 9.9830E-11 - 3.5481E+03 2.9492E-09 1.7060E-09 9.4035E-11 6.6260E-11 - 3.9811E+03 1.9763E-09 1.1315E-09 6.2738E-11 4.5757E-11 - 4.4668E+03 1.3165E-09 7.5200E-10 3.8378E-11 2.9179E-11 - 5.0119E+03 8.7971E-10 5.0013E-10 2.4421E-11 2.0191E-11 - 5.6234E+03 5.9272E-10 3.3445E-10 1.7117E-11 1.3242E-11 - 6.3096E+03 3.9044E-10 2.2221E-10 1.1592E-11 8.4218E-12 - 7.0795E+03 2.5803E-10 1.4555E-10 7.5826E-12 5.1324E-12 - 7.9433E+03 1.6936E-10 9.5276E-11 4.9268E-12 3.3204E-12 - 8.9125E+03 1.1155E-10 6.2554E-11 3.3502E-12 2.1908E-12 - 1.0000E+04 7.3560E-11 4.1364E-11 2.1405E-12 1.3113E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4264E+04 1.4188E+04 6.9871E+03 6.4464E+03 - 1.1220E-01 1.2430E+04 1.2322E+04 6.1242E+03 5.6211E+03 - 1.2589E-01 1.0798E+04 1.0644E+04 5.3126E+03 4.8289E+03 - 1.4125E-01 9.3088E+03 9.1454E+03 4.5788E+03 4.1259E+03 - 1.5849E-01 7.9381E+03 7.7639E+03 3.9015E+03 3.4992E+03 - 1.7783E-01 6.6815E+03 6.5147E+03 3.2926E+03 2.9271E+03 - 1.9953E-01 5.5381E+03 5.4300E+03 2.7622E+03 2.4311E+03 - 2.2387E-01 4.5382E+03 4.4765E+03 2.2945E+03 2.0008E+03 - 2.5119E-01 3.7013E+03 3.6237E+03 1.8850E+03 1.6313E+03 - 2.8184E-01 2.9858E+03 2.9080E+03 1.5338E+03 1.3118E+03 - 3.1623E-01 2.3713E+03 2.3109E+03 1.2343E+03 1.0428E+03 - 3.5481E-01 1.8737E+03 1.8302E+03 9.8359E+02 8.2471E+02 - 3.9811E-01 1.4665E+03 1.4361E+03 7.7548E+02 6.4430E+02 - 4.4668E-01 1.1425E+03 1.1115E+03 6.0300E+02 4.9813E+02 - 5.0119E-01 8.8165E+02 8.5475E+02 4.6777E+02 3.8243E+02 - 5.6234E-01 6.7000E+02 6.5182E+02 3.5771E+02 2.9300E+02 - 6.3096E-01 5.1323E+02 4.9453E+02 2.7213E+02 2.2301E+02 - 7.0795E-01 3.8902E+02 3.7505E+02 2.0615E+02 1.6652E+02 - 7.9433E-01 2.9349E+02 2.7962E+02 1.5479E+02 1.2402E+02 - 8.9125E-01 2.2080E+02 2.0880E+02 1.1574E+02 9.1352E+01 - 1.0000E+00 1.6396E+02 1.5616E+02 8.4730E+01 6.7475E+01 - 1.1220E+00 1.2288E+02 1.1603E+02 6.2066E+01 4.9190E+01 - 1.2589E+00 9.1472E+01 8.5650E+01 4.5015E+01 3.5857E+01 - 1.4125E+00 6.8055E+01 6.2671E+01 3.2733E+01 2.5915E+01 - 1.5849E+00 5.0901E+01 4.6221E+01 2.3990E+01 1.8511E+01 - 1.7783E+00 3.7654E+01 3.4220E+01 1.7436E+01 1.3378E+01 - 1.9953E+00 2.7613E+01 2.4991E+01 1.2451E+01 9.5598E+00 - 2.2387E+00 2.0144E+01 1.8062E+01 8.8850E+00 6.6743E+00 - 2.5119E+00 1.4682E+01 1.3079E+01 6.2699E+00 4.7854E+00 - 2.8184E+00 1.0784E+01 9.3912E+00 4.3404E+00 3.3610E+00 - 3.1623E+00 7.7868E+00 6.7408E+00 3.1081E+00 2.3475E+00 - 3.5481E+00 5.6308E+00 4.8580E+00 2.1510E+00 1.6474E+00 - 3.9811E+00 4.0546E+00 3.4594E+00 1.4922E+00 1.1332E+00 - 4.4668E+00 2.9274E+00 2.4671E+00 1.0320E+00 7.6702E-01 - 5.0119E+00 2.1174E+00 1.7639E+00 7.0208E-01 5.2518E-01 - 5.6234E+00 1.5162E+00 1.2496E+00 4.8384E-01 3.6122E-01 - 6.3096E+00 1.0784E+00 8.8780E-01 3.2765E-01 2.4233E-01 - 7.0795E+00 7.7561E-01 6.3415E-01 2.2255E-01 1.6448E-01 - 7.9433E+00 5.5345E-01 4.4869E-01 1.5260E-01 1.1183E-01 - 8.9125E+00 3.9472E-01 3.1866E-01 1.0216E-01 7.4886E-02 - 1.0000E+01 2.8498E-01 2.2756E-01 6.8558E-02 5.1353E-02 - 1.1220E+01 2.0420E-01 1.6068E-01 4.5369E-02 3.4223E-02 - 1.2589E+01 1.4551E-01 1.1356E-01 3.0416E-02 2.2665E-02 - 1.4125E+01 1.0297E-01 8.0984E-02 2.0478E-02 1.5201E-02 - 1.5849E+01 7.3822E-02 5.6991E-02 1.3379E-02 1.0334E-02 - 1.7783E+01 5.2960E-02 4.0047E-02 8.9925E-03 6.8008E-03 - 1.9953E+01 3.7323E-02 2.8879E-02 6.1193E-03 4.3721E-03 - 2.2387E+01 2.6410E-02 2.0484E-02 3.9427E-03 2.9950E-03 - 2.5119E+01 1.9208E-02 1.4210E-02 2.5941E-03 2.0338E-03 - 2.8184E+01 1.3532E-02 1.0106E-02 1.7573E-03 1.3709E-03 - 3.1623E+01 9.6825E-03 7.2062E-03 1.1810E-03 9.1838E-04 - 3.5481E+01 6.8637E-03 5.0888E-03 7.8836E-04 6.1323E-04 - 3.9811E+01 4.8757E-03 3.5961E-03 5.1992E-04 4.0895E-04 - 4.4668E+01 3.4684E-03 2.5436E-03 3.4435E-04 2.7668E-04 - 5.0119E+01 2.4520E-03 1.7879E-03 2.3066E-04 1.8688E-04 - 5.6234E+01 1.7254E-03 1.2542E-03 1.5510E-04 1.2420E-04 - 6.3096E+01 1.2190E-03 8.8415E-04 1.0183E-04 8.2259E-05 - 7.0795E+01 8.6058E-04 6.2097E-04 6.8419E-05 5.5279E-05 - 7.9433E+01 6.0721E-04 4.3615E-04 4.6626E-05 3.8150E-05 - 8.9125E+01 4.3139E-04 3.0582E-04 3.0854E-05 2.4806E-05 - 1.0000E+02 3.0182E-04 2.1315E-04 2.0889E-05 1.6910E-05 - 1.1220E+02 2.1260E-04 1.4952E-04 1.4150E-05 1.1275E-05 - 1.2589E+02 1.4924E-04 1.0424E-04 9.4692E-06 7.5899E-06 - 1.4125E+02 1.0414E-04 7.2272E-05 6.3338E-06 5.2085E-06 - 1.5849E+02 7.2678E-05 5.0154E-05 4.2484E-06 3.5275E-06 - 1.7783E+02 5.1064E-05 3.4830E-05 2.8579E-06 2.3179E-06 - 1.9953E+02 3.5716E-05 2.4092E-05 1.9468E-06 1.5431E-06 - 2.2387E+02 2.4965E-05 1.6728E-05 1.3454E-06 1.0859E-06 - 2.5119E+02 1.7400E-05 1.1639E-05 8.8722E-07 7.5106E-07 - 2.8184E+02 1.2252E-05 8.1222E-06 5.9548E-07 5.0171E-07 - 3.1623E+02 8.5116E-06 5.6023E-06 4.1163E-07 3.3673E-07 - 3.5481E+02 5.9258E-06 3.8753E-06 2.8101E-07 2.2016E-07 - 3.9811E+02 4.1223E-06 2.6802E-06 1.8932E-07 1.4914E-07 - 4.4668E+02 2.8641E-06 1.8418E-06 1.2521E-07 1.0612E-07 - 5.0119E+02 1.9919E-06 1.2734E-06 8.4952E-08 7.1312E-08 - 5.6234E+02 1.3862E-06 8.7799E-07 5.7872E-08 4.6689E-08 - 6.3096E+02 9.5639E-07 5.9937E-07 3.9750E-08 3.1220E-08 - 7.0795E+02 6.6178E-07 4.1455E-07 2.6625E-08 2.0732E-08 - 7.9433E+02 4.5507E-07 2.8419E-07 1.7222E-08 1.4393E-08 - 8.9125E+02 3.1218E-07 1.9412E-07 1.2099E-08 9.6302E-09 - 1.0000E+03 2.1697E-07 1.3380E-07 7.9176E-09 6.3294E-09 - 1.1220E+03 1.4833E-07 8.9850E-08 5.2850E-09 4.1144E-09 - 1.2589E+03 1.0083E-07 6.1129E-08 3.7539E-09 2.7104E-09 - 1.4125E+03 6.8764E-08 4.1815E-08 2.5589E-09 1.8079E-09 - 1.5849E+03 4.6896E-08 2.8298E-08 1.6601E-09 1.2198E-09 - 1.7783E+03 3.1958E-08 1.8954E-08 1.0416E-09 8.1553E-10 - 1.9953E+03 2.1530E-08 1.2787E-08 6.9024E-10 5.3442E-10 - 2.2387E+03 1.4506E-08 8.6096E-09 4.7522E-10 3.6417E-10 - 2.5119E+03 9.7415E-09 5.8127E-09 3.3363E-10 2.3000E-10 - 2.8184E+03 6.5702E-09 3.8468E-09 2.0539E-10 1.5301E-10 - 3.1623E+03 4.5357E-09 2.6425E-09 1.3820E-10 1.0211E-10 - 3.5481E+03 2.9740E-09 1.7249E-09 9.4048E-11 6.8093E-11 - 3.9811E+03 1.9819E-09 1.1379E-09 6.2167E-11 4.5355E-11 - 4.4668E+03 1.3266E-09 7.6306E-10 4.1456E-11 2.9222E-11 - 5.0119E+03 8.8256E-10 5.0355E-10 2.7798E-11 1.8284E-11 - 5.6234E+03 5.7732E-10 3.3085E-10 1.5387E-11 1.3279E-11 - 6.3096E+03 3.8774E-10 2.1885E-10 1.1521E-11 8.0697E-12 - 7.0795E+03 2.5814E-10 1.4469E-10 7.6817E-12 5.2384E-12 - 7.9433E+03 1.6850E-10 9.5236E-11 4.9326E-12 3.5543E-12 - 8.9125E+03 1.1168E-10 6.2686E-11 3.3064E-12 2.4619E-12 - 1.0000E+04 7.4650E-11 4.1358E-11 2.1175E-12 1.5169E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4365E+04 1.4254E+04 7.0553E+03 6.4634E+03 - 1.1220E-01 1.2519E+04 1.2430E+04 6.2143E+03 5.6206E+03 - 1.2589E-01 1.0908E+04 1.0770E+04 5.3804E+03 4.8607E+03 - 1.4125E-01 9.4093E+03 9.2221E+03 4.6281E+03 4.1479E+03 - 1.5849E-01 8.0026E+03 7.8387E+03 3.9642E+03 3.5118E+03 - 1.7783E-01 6.7393E+03 6.6043E+03 3.3455E+03 2.9521E+03 - 1.9953E-01 5.6073E+03 5.4743E+03 2.7976E+03 2.4566E+03 - 2.2387E-01 4.6099E+03 4.4917E+03 2.3284E+03 2.0206E+03 - 2.5119E-01 3.7360E+03 3.6365E+03 1.9090E+03 1.6397E+03 - 2.8184E-01 2.9924E+03 2.9165E+03 1.5424E+03 1.3123E+03 - 3.1623E-01 2.3761E+03 2.3342E+03 1.2424E+03 1.0412E+03 - 3.5481E-01 1.8780E+03 1.8371E+03 9.9071E+02 8.2279E+02 - 3.9811E-01 1.4708E+03 1.4333E+03 7.7531E+02 6.4480E+02 - 4.4668E-01 1.1374E+03 1.1195E+03 6.0534E+02 4.9973E+02 - 5.0119E-01 8.7446E+02 8.6497E+02 4.6448E+02 3.8371E+02 - 5.6234E-01 6.7099E+02 6.5276E+02 3.5436E+02 2.9075E+02 - 6.3096E-01 5.0977E+02 4.9321E+02 2.7166E+02 2.1869E+02 - 7.0795E-01 3.8392E+02 3.7275E+02 2.0417E+02 1.6391E+02 - 7.9433E-01 2.8868E+02 2.8179E+02 1.5241E+02 1.2116E+02 - 8.9125E-01 2.1856E+02 2.1170E+02 1.1400E+02 9.0142E+01 - 1.0000E+00 1.6511E+02 1.5692E+02 8.4971E+01 6.7433E+01 - 1.1220E+00 1.2336E+02 1.1560E+02 6.2216E+01 4.8990E+01 - 1.2589E+00 9.1953E+01 8.5562E+01 4.5274E+01 3.5676E+01 - 1.4125E+00 6.8505E+01 6.3406E+01 3.3154E+01 2.6211E+01 - 1.5849E+00 5.0517E+01 4.6697E+01 2.4135E+01 1.8872E+01 - 1.7783E+00 3.6920E+01 3.4175E+01 1.7388E+01 1.3406E+01 - 1.9953E+00 2.7362E+01 2.4773E+01 1.2565E+01 9.5744E+00 - 2.2387E+00 2.0281E+01 1.7801E+01 8.8818E+00 6.7657E+00 - 2.5119E+00 1.4703E+01 1.2843E+01 6.1822E+00 4.7548E+00 - 2.8184E+00 1.0690E+01 9.2679E+00 4.3473E+00 3.3366E+00 - 3.1623E+00 7.7815E+00 6.7526E+00 3.0802E+00 2.3311E+00 - 3.5481E+00 5.6399E+00 4.8424E+00 2.1531E+00 1.6231E+00 - 3.9811E+00 4.0592E+00 3.4700E+00 1.4939E+00 1.1194E+00 - 4.4668E+00 2.9041E+00 2.4821E+00 1.0279E+00 7.7194E-01 - 5.0119E+00 2.0890E+00 1.7710E+00 6.9837E-01 5.3624E-01 - 5.6234E+00 1.5134E+00 1.2669E+00 4.7558E-01 3.6087E-01 - 6.3096E+00 1.0841E+00 8.9266E-01 3.2917E-01 2.4457E-01 - 7.0795E+00 7.7294E-01 6.2888E-01 2.2261E-01 1.6611E-01 - 7.9433E+00 5.5126E-01 4.5044E-01 1.5240E-01 1.1380E-01 - 8.9125E+00 3.9342E-01 3.1832E-01 1.0067E-01 7.6599E-02 - 1.0000E+01 2.8464E-01 2.2659E-01 6.7966E-02 5.1686E-02 - 1.1220E+01 2.0352E-01 1.6075E-01 4.6409E-02 3.4349E-02 - 1.2589E+01 1.4532E-01 1.1407E-01 3.0628E-02 2.2929E-02 - 1.4125E+01 1.0445E-01 8.1454E-02 2.0155E-02 1.5345E-02 - 1.5849E+01 7.4640E-02 5.7758E-02 1.3698E-02 1.0304E-02 - 1.7783E+01 5.3155E-02 4.1153E-02 9.1110E-03 6.6872E-03 - 1.9953E+01 3.8004E-02 2.9095E-02 6.0185E-03 4.4377E-03 - 2.2387E+01 2.7204E-02 2.0380E-02 3.9704E-03 3.1306E-03 - 2.5119E+01 1.9430E-02 1.4503E-02 2.7172E-03 2.1669E-03 - 2.8184E+01 1.3648E-02 1.0393E-02 1.7667E-03 1.4466E-03 - 3.1623E+01 9.6454E-03 7.1922E-03 1.1779E-03 9.1890E-04 - 3.5481E+01 6.8402E-03 5.0797E-03 7.7916E-04 6.1326E-04 - 3.9811E+01 4.8475E-03 3.5902E-03 5.1853E-04 4.0810E-04 - 4.4668E+01 3.4437E-03 2.5311E-03 3.4858E-04 2.7418E-04 - 5.0119E+01 2.4422E-03 1.7797E-03 2.3309E-04 1.8552E-04 - 5.6234E+01 1.7324E-03 1.2503E-03 1.5543E-04 1.2320E-04 - 6.3096E+01 1.2230E-03 8.8697E-04 1.0286E-04 8.0385E-05 - 7.0795E+01 8.6015E-04 6.2300E-04 6.8799E-05 5.4092E-05 - 7.9433E+01 6.0951E-04 4.3368E-04 4.6483E-05 3.7008E-05 - 8.9125E+01 4.2705E-04 3.0493E-04 3.1033E-05 2.4158E-05 - 1.0000E+02 3.0142E-04 2.1179E-04 2.0844E-05 1.6942E-05 - 1.1220E+02 2.1216E-04 1.4821E-04 1.4050E-05 1.1333E-05 - 1.2589E+02 1.4836E-04 1.0343E-04 9.3384E-06 7.7646E-06 - 1.4125E+02 1.0372E-04 7.1969E-05 6.2772E-06 5.2671E-06 - 1.5849E+02 7.2785E-05 5.0140E-05 4.2390E-06 3.4793E-06 - 1.7783E+02 5.1005E-05 3.4704E-05 2.8307E-06 2.3103E-06 - 1.9953E+02 3.5689E-05 2.4208E-05 1.9204E-06 1.5871E-06 - 2.2387E+02 2.5020E-05 1.6748E-05 1.3355E-06 1.0866E-06 - 2.5119E+02 1.7562E-05 1.1546E-05 9.2093E-07 7.3914E-07 - 2.8184E+02 1.2261E-05 8.0454E-06 6.1166E-07 5.1015E-07 - 3.1623E+02 8.5233E-06 5.6248E-06 4.1058E-07 3.3588E-07 - 3.5481E+02 5.9385E-06 3.8636E-06 2.7878E-07 2.2551E-07 - 3.9811E+02 4.1227E-06 2.6614E-06 1.8965E-07 1.5308E-07 - 4.4668E+02 2.8692E-06 1.8492E-06 1.2745E-07 1.0464E-07 - 5.0119E+02 1.9928E-06 1.2716E-06 8.6929E-08 6.8532E-08 - 5.6234E+02 1.3840E-06 8.7644E-07 5.9425E-08 4.6602E-08 - 6.3096E+02 9.5155E-07 6.0387E-07 3.9741E-08 3.1904E-08 - 7.0795E+02 6.5822E-07 4.1443E-07 2.6471E-08 2.0575E-08 - 7.9433E+02 4.5547E-07 2.8353E-07 1.7559E-08 1.3315E-08 - 8.9125E+02 3.1229E-07 1.9378E-07 1.1776E-08 8.9247E-09 - 1.0000E+03 2.1728E-07 1.3187E-07 7.9393E-09 6.0496E-09 - 1.1220E+03 1.4749E-07 8.8583E-08 5.3636E-09 4.2162E-09 - 1.2589E+03 1.0096E-07 6.0739E-08 3.5966E-09 2.7660E-09 - 1.4125E+03 6.9058E-08 4.1521E-08 2.4472E-09 1.8684E-09 - 1.5849E+03 4.6662E-08 2.7933E-08 1.7213E-09 1.2723E-09 - 1.7783E+03 3.1709E-08 1.8753E-08 1.0762E-09 7.9880E-10 - 1.9953E+03 2.1560E-08 1.2731E-08 6.6273E-10 5.6058E-10 - 2.2387E+03 1.4494E-08 8.6238E-09 4.5193E-10 3.6814E-10 - 2.5119E+03 9.8216E-09 5.8482E-09 3.1111E-10 2.3742E-10 - 2.8184E+03 6.6643E-09 3.8965E-09 2.0705E-10 1.5941E-10 - 3.1623E+03 4.5204E-09 2.6554E-09 1.3393E-10 1.0471E-10 - 3.5481E+03 2.9418E-09 1.7383E-09 9.1586E-11 7.0397E-11 - 3.9811E+03 1.9905E-09 1.1484E-09 6.4110E-11 4.6894E-11 - 4.4668E+03 1.3274E-09 7.6503E-10 4.1228E-11 3.2275E-11 - 5.0119E+03 8.7589E-10 4.9834E-10 2.6191E-11 2.1062E-11 - 5.6234E+03 5.7690E-10 3.3020E-10 1.6750E-11 1.3249E-11 - 6.3096E+03 3.8476E-10 2.1855E-10 1.1781E-11 7.8653E-12 - 7.0795E+03 2.5518E-10 1.4448E-10 7.8853E-12 5.2864E-12 - 7.9433E+03 1.6878E-10 9.5469E-11 4.9175E-12 3.4754E-12 - 8.9125E+03 1.1199E-10 6.2530E-11 3.0084E-12 2.1661E-12 - 1.0000E+04 7.4320E-11 4.0294E-11 2.1547E-12 1.5099E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4509E+04 1.4455E+04 7.1678E+03 6.5082E+03 - 1.1220E-01 1.2669E+04 1.2577E+04 6.3170E+03 5.6769E+03 - 1.2589E-01 1.0955E+04 1.0894E+04 5.4829E+03 4.8915E+03 - 1.4125E-01 9.4478E+03 9.3698E+03 4.7055E+03 4.1686E+03 - 1.5849E-01 8.0662E+03 7.9615E+03 4.0166E+03 3.5132E+03 - 1.7783E-01 6.7922E+03 6.6869E+03 3.3951E+03 2.9495E+03 - 1.9953E-01 5.6520E+03 5.5515E+03 2.8479E+03 2.4601E+03 - 2.2387E-01 4.6338E+03 4.5511E+03 2.3696E+03 2.0105E+03 - 2.5119E-01 3.7624E+03 3.6908E+03 1.9463E+03 1.6421E+03 - 2.8184E-01 3.0134E+03 2.9611E+03 1.5765E+03 1.3308E+03 - 3.1623E-01 2.3917E+03 2.3597E+03 1.2664E+03 1.0602E+03 - 3.5481E-01 1.8945E+03 1.8622E+03 1.0032E+03 8.3048E+02 - 3.9811E-01 1.4768E+03 1.4514E+03 7.8355E+02 6.4454E+02 - 4.4668E-01 1.1414E+03 1.1218E+03 6.0936E+02 5.0166E+02 - 5.0119E-01 8.8159E+02 8.6024E+02 4.7344E+02 3.8639E+02 - 5.6234E-01 6.7470E+02 6.6149E+02 3.6419E+02 2.9196E+02 - 6.3096E-01 5.1216E+02 5.0197E+02 2.7481E+02 2.1847E+02 - 7.0795E-01 3.8517E+02 3.7543E+02 2.0728E+02 1.6451E+02 - 7.9433E-01 2.9131E+02 2.8048E+02 1.5445E+02 1.2380E+02 - 8.9125E-01 2.1993E+02 2.1004E+02 1.1401E+02 9.0891E+01 - 1.0000E+00 1.6409E+02 1.5716E+02 8.4629E+01 6.6250E+01 - 1.1220E+00 1.2161E+02 1.1637E+02 6.1726E+01 4.8993E+01 - 1.2589E+00 9.0675E+01 8.5733E+01 4.5235E+01 3.5678E+01 - 1.4125E+00 6.7901E+01 6.3269E+01 3.3333E+01 2.5806E+01 - 1.5849E+00 5.0663E+01 4.6605E+01 2.4082E+01 1.8778E+01 - 1.7783E+00 3.7531E+01 3.4262E+01 1.7333E+01 1.3710E+01 - 1.9953E+00 2.7314E+01 2.4947E+01 1.2477E+01 9.7542E+00 - 2.2387E+00 1.9917E+01 1.8057E+01 8.9127E+00 6.7239E+00 - 2.5119E+00 1.4676E+01 1.3036E+01 6.3263E+00 4.7734E+00 - 2.8184E+00 1.0745E+01 9.4529E+00 4.4019E+00 3.4115E+00 - 3.1623E+00 7.7487E+00 6.7390E+00 3.1122E+00 2.3517E+00 - 3.5481E+00 5.6228E+00 4.8180E+00 2.1454E+00 1.6335E+00 - 3.9811E+00 4.0562E+00 3.4678E+00 1.4902E+00 1.1250E+00 - 4.4668E+00 2.9202E+00 2.4872E+00 1.0347E+00 7.7841E-01 - 5.0119E+00 2.1059E+00 1.7763E+00 7.0256E-01 5.3110E-01 - 5.6234E+00 1.5217E+00 1.2574E+00 4.8491E-01 3.5907E-01 - 6.3096E+00 1.0939E+00 8.8844E-01 3.3100E-01 2.4741E-01 - 7.0795E+00 7.8495E-01 6.3061E-01 2.2231E-01 1.6661E-01 - 7.9433E+00 5.6189E-01 4.4952E-01 1.5165E-01 1.1493E-01 - 8.9125E+00 4.0106E-01 3.2251E-01 1.0328E-01 7.9933E-02 - 1.0000E+01 2.8651E-01 2.2686E-01 6.8469E-02 5.1165E-02 - 1.1220E+01 2.0324E-01 1.6170E-01 4.5197E-02 3.3964E-02 - 1.2589E+01 1.4530E-01 1.1390E-01 3.0241E-02 2.2799E-02 - 1.4125E+01 1.0418E-01 7.9864E-02 2.0110E-02 1.5594E-02 - 1.5849E+01 7.4077E-02 5.6129E-02 1.3523E-02 1.0350E-02 - 1.7783E+01 5.2716E-02 4.0113E-02 9.0488E-03 6.8467E-03 - 1.9953E+01 3.7705E-02 2.8724E-02 5.9255E-03 4.3588E-03 - 2.2387E+01 2.6683E-02 2.0356E-02 4.0169E-03 2.8984E-03 - 2.5119E+01 1.8778E-02 1.4336E-02 2.7672E-03 2.0652E-03 - 2.8184E+01 1.3402E-02 1.0059E-02 1.7706E-03 1.3784E-03 - 3.1623E+01 9.6339E-03 7.1875E-03 1.1800E-03 9.2063E-04 - 3.5481E+01 6.8579E-03 5.0895E-03 7.8609E-04 6.1846E-04 - 3.9811E+01 4.8724E-03 3.5919E-03 5.2302E-04 4.0950E-04 - 4.4668E+01 3.4560E-03 2.5306E-03 3.4698E-04 2.7372E-04 - 5.0119E+01 2.4479E-03 1.7797E-03 2.3150E-04 1.8283E-04 - 5.6234E+01 1.7303E-03 1.2511E-03 1.5601E-04 1.2232E-04 - 6.3096E+01 1.2205E-03 8.8055E-04 1.0469E-04 8.4659E-05 - 7.0795E+01 8.6082E-04 6.2122E-04 7.0115E-05 5.4614E-05 - 7.9433E+01 6.0441E-04 4.3006E-04 4.6873E-05 3.6208E-05 - 8.9125E+01 4.2230E-04 3.0140E-04 3.2089E-05 2.4834E-05 - 1.0000E+02 3.0041E-04 2.1188E-04 2.0981E-05 1.6974E-05 - 1.1220E+02 2.1110E-04 1.4858E-04 1.4168E-05 1.1418E-05 - 1.2589E+02 1.4845E-04 1.0355E-04 9.5350E-06 7.6931E-06 - 1.4125E+02 1.0395E-04 7.2218E-05 6.4025E-06 5.1489E-06 - 1.5849E+02 7.3141E-05 5.0376E-05 4.3533E-06 3.5120E-06 - 1.7783E+02 5.1425E-05 3.4893E-05 2.9175E-06 2.4031E-06 - 1.9953E+02 3.5833E-05 2.4165E-05 1.9258E-06 1.5844E-06 - 2.2387E+02 2.4965E-05 1.6885E-05 1.3493E-06 1.0564E-06 - 2.5119E+02 1.7374E-05 1.1791E-05 9.1499E-07 7.2278E-07 - 2.8184E+02 1.2187E-05 8.1810E-06 6.2842E-07 4.9420E-07 - 3.1623E+02 8.4974E-06 5.5985E-06 4.1304E-07 3.3745E-07 - 3.5481E+02 5.9119E-06 3.8598E-06 2.7871E-07 2.2887E-07 - 3.9811E+02 4.1137E-06 2.6864E-06 1.8969E-07 1.5372E-07 - 4.4668E+02 2.8558E-06 1.8589E-06 1.2976E-07 1.0392E-07 - 5.0119E+02 1.9961E-06 1.2745E-06 8.7181E-08 7.1577E-08 - 5.6234E+02 1.3894E-06 8.7872E-07 5.8091E-08 4.7612E-08 - 6.3096E+02 9.5398E-07 6.0153E-07 3.9184E-08 3.2257E-08 - 7.0795E+02 6.5850E-07 4.1337E-07 2.6791E-08 2.1332E-08 - 7.9433E+02 4.5474E-07 2.8325E-07 1.7696E-08 1.3766E-08 - 8.9125E+02 3.1439E-07 1.9342E-07 1.1845E-08 9.0270E-09 - 1.0000E+03 2.1725E-07 1.3262E-07 8.1063E-09 6.4761E-09 - 1.1220E+03 1.4794E-07 8.9244E-08 5.5332E-09 4.1427E-09 - 1.2589E+03 1.0127E-07 6.1180E-08 3.7028E-09 2.7058E-09 - 1.4125E+03 6.8998E-08 4.1762E-08 2.5796E-09 1.8287E-09 - 1.5849E+03 4.7109E-08 2.7872E-08 1.7483E-09 1.2031E-09 - 1.7783E+03 3.1978E-08 1.8996E-08 1.0633E-09 8.3937E-10 - 1.9953E+03 2.1508E-08 1.2967E-08 7.1630E-10 5.3635E-10 - 2.2387E+03 1.4558E-08 8.5921E-09 5.0885E-10 3.4861E-10 - 2.5119E+03 9.7745E-09 5.7074E-09 3.3703E-10 2.2869E-10 - 2.8184E+03 6.5471E-09 3.8519E-09 2.2476E-10 1.4648E-10 - 3.1623E+03 4.5565E-09 2.6446E-09 1.4260E-10 1.0362E-10 - 3.5481E+03 2.9492E-09 1.7134E-09 9.3322E-11 6.8372E-11 - 3.9811E+03 1.9736E-09 1.1387E-09 6.0634E-11 4.3818E-11 - 4.4668E+03 1.3223E-09 7.6034E-10 3.9284E-11 2.8461E-11 - 5.0119E+03 8.8253E-10 4.9731E-10 2.5807E-11 1.7861E-11 - 5.6234E+03 5.8346E-10 3.2161E-10 1.7502E-11 1.2089E-11 - 6.3096E+03 3.9140E-10 2.1670E-10 1.1965E-11 8.0437E-12 - 7.0795E+03 2.5682E-10 1.4224E-10 7.8284E-12 5.1780E-12 - 7.9433E+03 1.6956E-10 9.5358E-11 5.1903E-12 3.5143E-12 - 8.9125E+03 1.1204E-10 6.3806E-11 3.2252E-12 2.1645E-12 - 1.0000E+04 7.3327E-11 4.0928E-11 2.1554E-12 1.4167E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4586E+04 1.4646E+04 7.3140E+03 6.4686E+03 - 1.1220E-01 1.2729E+04 1.2767E+04 6.4203E+03 5.6527E+03 - 1.2589E-01 1.1064E+04 1.1079E+04 5.5627E+03 4.9026E+03 - 1.4125E-01 9.5241E+03 9.5227E+03 4.8125E+03 4.1586E+03 - 1.5849E-01 8.0813E+03 8.0826E+03 4.1287E+03 3.5212E+03 - 1.7783E-01 6.8009E+03 6.7966E+03 3.4863E+03 2.9610E+03 - 1.9953E-01 5.6433E+03 5.6431E+03 2.9069E+03 2.4506E+03 - 2.2387E-01 4.6289E+03 4.6276E+03 2.4026E+03 2.0143E+03 - 2.5119E-01 3.7813E+03 3.7558E+03 1.9682E+03 1.6467E+03 - 2.8184E-01 3.0371E+03 3.0077E+03 1.5977E+03 1.3262E+03 - 3.1623E-01 2.3957E+03 2.3898E+03 1.2911E+03 1.0515E+03 - 3.5481E-01 1.8923E+03 1.8812E+03 1.0238E+03 8.2792E+02 - 3.9811E-01 1.4766E+03 1.4687E+03 7.9807E+02 6.4488E+02 - 4.4668E-01 1.1378E+03 1.1364E+03 6.2369E+02 4.9594E+02 - 5.0119E-01 8.8116E+02 8.6821E+02 4.8270E+02 3.8063E+02 - 5.6234E-01 6.7169E+02 6.6001E+02 3.6587E+02 2.9189E+02 - 6.3096E-01 5.0794E+02 4.9915E+02 2.7787E+02 2.2009E+02 - 7.0795E-01 3.8370E+02 3.7725E+02 2.0930E+02 1.6193E+02 - 7.9433E-01 2.9139E+02 2.8250E+02 1.5662E+02 1.2088E+02 - 8.9125E-01 2.1975E+02 2.1049E+02 1.1660E+02 9.0164E+01 - 1.0000E+00 1.6450E+02 1.5708E+02 8.5807E+01 6.6508E+01 - 1.1220E+00 1.2310E+02 1.1675E+02 6.2764E+01 4.8917E+01 - 1.2589E+00 9.1786E+01 8.5969E+01 4.5706E+01 3.5642E+01 - 1.4125E+00 6.8158E+01 6.2995E+01 3.3194E+01 2.5828E+01 - 1.5849E+00 5.0380E+01 4.6113E+01 2.4127E+01 1.8568E+01 - 1.7783E+00 3.7538E+01 3.3697E+01 1.7368E+01 1.3318E+01 - 1.9953E+00 2.7642E+01 2.4666E+01 1.2448E+01 9.6406E+00 - 2.2387E+00 2.0021E+01 1.8042E+01 8.7193E+00 6.8681E+00 - 2.5119E+00 1.4687E+01 1.3091E+01 6.1992E+00 4.8091E+00 - 2.8184E+00 1.0655E+01 9.3632E+00 4.3708E+00 3.3993E+00 - 3.1623E+00 7.7619E+00 6.7526E+00 3.0634E+00 2.3313E+00 - 3.5481E+00 5.5971E+00 4.8181E+00 2.1441E+00 1.6325E+00 - 3.9811E+00 4.0292E+00 3.4313E+00 1.4732E+00 1.1332E+00 - 4.4668E+00 2.9126E+00 2.4729E+00 1.0179E+00 7.8648E-01 - 5.0119E+00 2.1048E+00 1.7718E+00 7.0350E-01 5.3117E-01 - 5.6234E+00 1.5208E+00 1.2487E+00 4.7763E-01 3.5127E-01 - 6.3096E+00 1.0795E+00 8.8489E-01 3.2711E-01 2.4117E-01 - 7.0795E+00 7.7007E-01 6.2987E-01 2.2175E-01 1.6197E-01 - 7.9433E+00 5.5324E-01 4.4982E-01 1.4623E-01 1.1042E-01 - 8.9125E+00 3.9786E-01 3.1994E-01 9.7744E-02 7.6523E-02 - 1.0000E+01 2.8509E-01 2.2556E-01 6.8084E-02 5.1575E-02 - 1.1220E+01 2.0371E-01 1.5932E-01 4.5475E-02 3.4404E-02 - 1.2589E+01 1.4468E-01 1.1188E-01 3.0386E-02 2.2341E-02 - 1.4125E+01 1.0243E-01 7.9573E-02 2.0199E-02 1.5056E-02 - 1.5849E+01 7.3131E-02 5.6638E-02 1.3396E-02 1.0183E-02 - 1.7783E+01 5.2355E-02 3.9750E-02 8.9619E-03 6.7327E-03 - 1.9953E+01 3.7457E-02 2.8059E-02 5.9648E-03 4.5037E-03 - 2.2387E+01 2.6822E-02 2.0157E-02 3.9555E-03 2.9733E-03 - 2.5119E+01 1.8994E-02 1.4456E-02 2.6083E-03 1.9973E-03 - 2.8184E+01 1.3495E-02 1.0306E-02 1.7118E-03 1.4355E-03 - 3.1623E+01 9.6418E-03 7.2029E-03 1.1794E-03 9.1303E-04 - 3.5481E+01 6.8394E-03 5.0860E-03 7.8360E-04 6.0839E-04 - 3.9811E+01 4.8559E-03 3.5933E-03 5.2301E-04 4.0846E-04 - 4.4668E+01 3.4389E-03 2.5355E-03 3.4650E-04 2.7390E-04 - 5.0119E+01 2.4346E-03 1.7827E-03 2.3099E-04 1.8315E-04 - 5.6234E+01 1.7212E-03 1.2568E-03 1.5449E-04 1.2469E-04 - 6.3096E+01 1.2182E-03 8.8249E-04 1.0480E-04 8.3150E-05 - 7.0795E+01 8.6283E-04 6.1845E-04 6.9728E-05 5.4670E-05 - 7.9433E+01 6.0770E-04 4.3282E-04 4.5235E-05 3.7128E-05 - 8.9125E+01 4.3005E-04 3.0288E-04 3.0071E-05 2.5135E-05 - 1.0000E+02 3.0236E-04 2.1271E-04 2.0926E-05 1.6873E-05 - 1.1220E+02 2.1132E-04 1.4795E-04 1.4121E-05 1.1430E-05 - 1.2589E+02 1.4841E-04 1.0325E-04 9.4441E-06 7.8159E-06 - 1.4125E+02 1.0448E-04 7.2382E-05 6.2872E-06 5.2657E-06 - 1.5849E+02 7.3187E-05 5.0240E-05 4.2217E-06 3.5626E-06 - 1.7783E+02 5.1159E-05 3.4812E-05 2.9100E-06 2.4195E-06 - 1.9953E+02 3.5814E-05 2.4230E-05 2.0105E-06 1.6167E-06 - 2.2387E+02 2.5029E-05 1.6838E-05 1.3334E-06 1.0940E-06 - 2.5119E+02 1.7473E-05 1.1770E-05 8.9484E-07 7.5122E-07 - 2.8184E+02 1.2153E-05 8.2104E-06 6.0690E-07 5.0411E-07 - 3.1623E+02 8.4962E-06 5.5942E-06 4.1073E-07 3.3234E-07 - 3.5481E+02 5.9163E-06 3.8597E-06 2.7627E-07 2.2165E-07 - 3.9811E+02 4.1145E-06 2.6853E-06 1.8698E-07 1.5299E-07 - 4.4668E+02 2.8637E-06 1.8587E-06 1.2525E-07 1.0244E-07 - 5.0119E+02 1.9905E-06 1.2760E-06 8.5365E-08 6.8928E-08 - 5.6234E+02 1.3845E-06 8.7468E-07 5.8290E-08 4.6563E-08 - 6.3096E+02 9.5134E-07 6.0029E-07 3.9282E-08 3.1160E-08 - 7.0795E+02 6.5994E-07 4.1525E-07 2.6257E-08 2.0429E-08 - 7.9433E+02 4.5693E-07 2.8579E-07 1.7532E-08 1.4096E-08 - 8.9125E+02 3.1441E-07 1.9369E-07 1.1855E-08 9.4964E-09 - 1.0000E+03 2.1736E-07 1.3213E-07 7.9695E-09 6.2919E-09 - 1.1220E+03 1.4707E-07 9.0282E-08 5.5050E-09 4.2336E-09 - 1.2589E+03 1.0059E-07 6.1428E-08 3.7457E-09 2.6889E-09 - 1.4125E+03 6.8850E-08 4.1283E-08 2.4378E-09 1.7493E-09 - 1.5849E+03 4.6798E-08 2.7609E-08 1.5211E-09 1.1884E-09 - 1.7783E+03 3.1911E-08 1.8722E-08 1.0395E-09 8.4671E-10 - 1.9953E+03 2.1642E-08 1.2923E-08 7.1024E-10 5.2342E-10 - 2.2387E+03 1.4684E-08 8.6049E-09 4.9983E-10 3.2367E-10 - 2.5119E+03 9.8834E-09 5.7902E-09 3.3601E-10 2.2956E-10 - 2.8184E+03 6.5702E-09 3.9520E-09 2.1531E-10 1.6251E-10 - 3.1623E+03 4.5467E-09 2.6239E-09 1.4400E-10 1.0216E-10 - 3.5481E+03 2.9823E-09 1.6963E-09 9.6846E-11 6.7765E-11 - 3.9811E+03 1.9926E-09 1.1411E-09 6.3284E-11 4.6314E-11 - 4.4668E+03 1.3211E-09 7.7013E-10 3.9456E-11 3.0037E-11 - 5.0119E+03 8.8143E-10 5.0540E-10 2.5532E-11 1.9611E-11 - 5.6234E+03 5.9260E-10 3.2276E-10 1.7292E-11 1.2612E-11 - 6.3096E+03 3.8689E-10 2.1959E-10 1.1372E-11 8.2821E-12 - 7.0795E+03 2.5576E-10 1.4597E-10 7.4801E-12 5.4779E-12 - 7.9433E+03 1.6986E-10 9.4177E-11 4.8036E-12 3.4225E-12 - 8.9125E+03 1.1279E-10 6.2154E-11 3.0864E-12 2.1101E-12 - 1.0000E+04 7.4924E-11 4.1594E-11 1.9467E-12 1.3970E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4600E+04 1.4888E+04 7.4858E+03 6.4902E+03 - 1.1220E-01 1.2759E+04 1.2981E+04 6.5960E+03 5.6558E+03 - 1.2589E-01 1.1088E+04 1.1236E+04 5.7237E+03 4.8695E+03 - 1.4125E-01 9.5760E+03 9.6945E+03 4.9195E+03 4.1727E+03 - 1.5849E-01 8.1614E+03 8.2731E+03 4.2171E+03 3.5179E+03 - 1.7783E-01 6.8402E+03 6.9283E+03 3.5589E+03 2.9414E+03 - 1.9953E-01 5.6755E+03 5.7250E+03 2.9760E+03 2.4541E+03 - 2.2387E-01 4.6589E+03 4.6973E+03 2.4736E+03 2.0080E+03 - 2.5119E-01 3.7716E+03 3.8030E+03 2.0195E+03 1.6248E+03 - 2.8184E-01 3.0144E+03 3.0391E+03 1.6372E+03 1.3159E+03 - 3.1623E-01 2.4001E+03 2.4178E+03 1.3092E+03 1.0466E+03 - 3.5481E-01 1.8940E+03 1.9058E+03 1.0329E+03 8.2594E+02 - 3.9811E-01 1.4725E+03 1.4809E+03 8.1296E+02 6.4440E+02 - 4.4668E-01 1.1403E+03 1.1464E+03 6.3297E+02 4.9457E+02 - 5.0119E-01 8.7925E+02 8.8183E+02 4.8599E+02 3.7846E+02 - 5.6234E-01 6.7145E+02 6.7100E+02 3.6818E+02 2.8767E+02 - 6.3096E-01 5.1144E+02 5.0532E+02 2.8107E+02 2.1862E+02 - 7.0795E-01 3.8688E+02 3.7813E+02 2.1287E+02 1.6500E+02 - 7.9433E-01 2.9037E+02 2.8307E+02 1.5750E+02 1.2177E+02 - 8.9125E-01 2.1811E+02 2.1175E+02 1.1702E+02 8.9721E+01 - 1.0000E+00 1.6422E+02 1.5794E+02 8.6434E+01 6.6561E+01 - 1.1220E+00 1.2277E+02 1.1769E+02 6.3112E+01 4.9109E+01 - 1.2589E+00 9.1679E+01 8.6561E+01 4.5937E+01 3.6046E+01 - 1.4125E+00 6.8363E+01 6.3411E+01 3.3227E+01 2.6008E+01 - 1.5849E+00 5.0817E+01 4.6523E+01 2.4103E+01 1.8795E+01 - 1.7783E+00 3.7500E+01 3.4233E+01 1.7288E+01 1.3477E+01 - 1.9953E+00 2.7415E+01 2.4985E+01 1.2480E+01 9.6307E+00 - 2.2387E+00 2.0049E+01 1.8131E+01 9.0130E+00 6.8513E+00 - 2.5119E+00 1.4661E+01 1.2984E+01 6.2794E+00 4.7078E+00 - 2.8184E+00 1.0684E+01 9.2884E+00 4.3816E+00 3.3015E+00 - 3.1623E+00 7.7723E+00 6.6892E+00 3.0792E+00 2.3415E+00 - 3.5481E+00 5.6293E+00 4.7775E+00 2.1475E+00 1.6378E+00 - 3.9811E+00 4.0506E+00 3.4325E+00 1.4869E+00 1.1353E+00 - 4.4668E+00 2.9089E+00 2.4518E+00 1.0212E+00 7.7169E-01 - 5.0119E+00 2.0994E+00 1.7586E+00 6.9109E-01 5.3279E-01 - 5.6234E+00 1.4978E+00 1.2562E+00 4.8051E-01 3.6376E-01 - 6.3096E+00 1.0761E+00 8.8970E-01 3.3559E-01 2.4888E-01 - 7.0795E+00 7.7844E-01 6.3080E-01 2.2353E-01 1.7017E-01 - 7.9433E+00 5.5868E-01 4.4896E-01 1.4913E-01 1.1250E-01 - 8.9125E+00 3.9846E-01 3.1593E-01 1.0082E-01 7.5053E-02 - 1.0000E+01 2.8570E-01 2.2633E-01 6.8762E-02 5.1084E-02 - 1.1220E+01 2.0503E-01 1.5958E-01 4.5830E-02 3.4066E-02 - 1.2589E+01 1.4663E-01 1.1326E-01 3.0848E-02 2.3500E-02 - 1.4125E+01 1.0403E-01 8.0225E-02 2.0843E-02 1.5730E-02 - 1.5849E+01 7.3771E-02 5.6860E-02 1.3548E-02 1.0533E-02 - 1.7783E+01 5.2898E-02 4.0623E-02 8.9684E-03 6.7653E-03 - 1.9953E+01 3.8149E-02 2.8965E-02 6.1012E-03 4.4046E-03 - 2.2387E+01 2.6965E-02 2.0330E-02 4.0131E-03 3.0363E-03 - 2.5119E+01 1.9272E-02 1.4292E-02 2.6514E-03 2.0674E-03 - 2.8184E+01 1.3731E-02 1.0187E-02 1.7376E-03 1.3743E-03 - 3.1623E+01 9.6578E-03 7.1945E-03 1.1815E-03 9.2378E-04 - 3.5481E+01 6.8479E-03 5.0889E-03 7.8725E-04 6.0942E-04 - 3.9811E+01 4.8531E-03 3.5850E-03 5.2278E-04 4.0603E-04 - 4.4668E+01 3.4382E-03 2.5146E-03 3.4727E-04 2.7473E-04 - 5.0119E+01 2.4395E-03 1.7688E-03 2.3277E-04 1.8577E-04 - 5.6234E+01 1.7209E-03 1.2540E-03 1.5452E-04 1.2147E-04 - 6.3096E+01 1.2173E-03 8.8548E-04 1.0349E-04 8.0862E-05 - 7.0795E+01 8.6109E-04 6.2262E-04 6.9638E-05 5.6471E-05 - 7.9433E+01 6.0563E-04 4.3709E-04 4.6615E-05 3.8761E-05 - 8.9125E+01 4.2744E-04 3.0447E-04 3.1325E-05 2.5782E-05 - 1.0000E+02 3.0072E-04 2.1196E-04 2.0702E-05 1.6791E-05 - 1.1220E+02 2.1144E-04 1.4793E-04 1.3976E-05 1.1401E-05 - 1.2589E+02 1.4810E-04 1.0338E-04 9.5304E-06 7.7221E-06 - 1.4125E+02 1.0335E-04 7.1896E-05 6.3309E-06 5.1851E-06 - 1.5849E+02 7.2374E-05 4.9934E-05 4.2733E-06 3.4829E-06 - 1.7783E+02 5.0721E-05 3.4731E-05 2.8925E-06 2.3610E-06 - 1.9953E+02 3.5593E-05 2.4085E-05 1.9097E-06 1.5634E-06 - 2.2387E+02 2.4861E-05 1.6731E-05 1.2972E-06 1.0324E-06 - 2.5119E+02 1.7392E-05 1.1596E-05 8.9007E-07 7.2484E-07 - 2.8184E+02 1.2134E-05 8.0423E-06 6.1800E-07 4.9809E-07 - 3.1623E+02 8.5200E-06 5.6115E-06 4.1093E-07 3.2564E-07 - 3.5481E+02 5.9367E-06 3.8615E-06 2.8109E-07 2.2432E-07 - 3.9811E+02 4.1159E-06 2.6669E-06 1.8455E-07 1.5185E-07 - 4.4668E+02 2.8638E-06 1.8462E-06 1.2432E-07 1.0214E-07 - 5.0119E+02 1.9987E-06 1.2783E-06 8.6825E-08 6.8952E-08 - 5.6234E+02 1.3819E-06 8.8242E-07 5.8746E-08 4.6306E-08 - 6.3096E+02 9.4667E-07 6.0590E-07 4.0008E-08 3.1151E-08 - 7.0795E+02 6.5531E-07 4.1475E-07 2.6991E-08 2.0902E-08 - 7.9433E+02 4.5528E-07 2.8366E-07 1.8119E-08 1.4217E-08 - 8.9125E+02 3.1374E-07 1.9313E-07 1.2260E-08 9.6476E-09 - 1.0000E+03 2.1698E-07 1.3256E-07 8.0967E-09 6.3216E-09 - 1.1220E+03 1.4779E-07 8.9080E-08 5.4972E-09 4.0839E-09 - 1.2589E+03 1.0044E-07 6.0837E-08 3.5996E-09 2.7822E-09 - 1.4125E+03 6.8435E-08 4.1455E-08 2.4513E-09 1.9282E-09 - 1.5849E+03 4.6490E-08 2.8232E-08 1.6734E-09 1.3191E-09 - 1.7783E+03 3.1981E-08 1.8963E-08 1.1135E-09 8.7461E-10 - 1.9953E+03 2.1834E-08 1.2706E-08 7.2523E-10 5.3565E-10 - 2.2387E+03 1.4773E-08 8.6351E-09 4.5071E-10 3.5251E-10 - 2.5119E+03 9.8608E-09 5.7756E-09 2.9711E-10 2.3513E-10 - 2.8184E+03 6.6523E-09 3.8185E-09 2.0523E-10 1.4807E-10 - 3.1623E+03 4.5654E-09 2.6619E-09 1.3917E-10 1.0341E-10 - 3.5481E+03 2.9990E-09 1.7208E-09 9.4058E-11 6.7072E-11 - 3.9811E+03 1.9966E-09 1.1305E-09 6.2341E-11 4.4452E-11 - 4.4668E+03 1.3224E-09 7.4897E-10 4.0496E-11 2.7423E-11 - 5.0119E+03 8.8056E-10 4.9759E-10 2.7862E-11 1.7805E-11 - 5.6234E+03 5.8116E-10 3.3317E-10 1.7507E-11 1.1705E-11 - 6.3096E+03 3.9232E-10 2.1750E-10 1.1125E-11 8.3609E-12 - 7.0795E+03 2.6032E-10 1.4268E-10 7.1717E-12 5.0660E-12 - 7.9433E+03 1.7125E-10 9.3326E-11 4.6537E-12 3.3769E-12 - 8.9125E+03 1.1303E-10 6.2765E-11 3.0437E-12 2.1575E-12 - 1.0000E+04 7.3647E-11 4.1759E-11 2.0299E-12 1.3797E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4636E+04 1.5006E+04 7.6064E+03 6.4493E+03 - 1.1220E-01 1.2819E+04 1.3100E+04 6.7013E+03 5.6528E+03 - 1.2589E-01 1.1112E+04 1.1327E+04 5.8205E+03 4.8547E+03 - 1.4125E-01 9.5734E+03 9.7668E+03 5.0171E+03 4.1351E+03 - 1.5849E-01 8.1773E+03 8.3176E+03 4.2824E+03 3.4953E+03 - 1.7783E-01 6.8743E+03 6.9736E+03 3.6145E+03 2.9159E+03 - 1.9953E-01 5.7032E+03 5.7841E+03 3.0276E+03 2.4266E+03 - 2.2387E-01 4.6719E+03 4.7549E+03 2.5094E+03 1.9962E+03 - 2.5119E-01 3.7825E+03 3.8639E+03 2.0478E+03 1.6211E+03 - 2.8184E-01 3.0262E+03 3.0950E+03 1.6554E+03 1.3089E+03 - 3.1623E-01 2.4027E+03 2.4531E+03 1.3296E+03 1.0408E+03 - 3.5481E-01 1.8942E+03 1.9252E+03 1.0518E+03 8.2203E+02 - 3.9811E-01 1.4763E+03 1.5011E+03 8.2275E+02 6.3850E+02 - 4.4668E-01 1.1426E+03 1.1584E+03 6.3568E+02 4.9316E+02 - 5.0119E-01 8.8203E+02 8.8061E+02 4.8669E+02 3.8165E+02 - 5.6234E-01 6.7377E+02 6.7026E+02 3.7376E+02 2.9097E+02 - 6.3096E-01 5.0938E+02 5.0674E+02 2.8251E+02 2.2069E+02 - 7.0795E-01 3.8493E+02 3.7956E+02 2.1179E+02 1.6396E+02 - 7.9433E-01 2.9096E+02 2.8418E+02 1.5896E+02 1.2143E+02 - 8.9125E-01 2.1897E+02 2.1185E+02 1.1773E+02 8.9821E+01 - 1.0000E+00 1.6426E+02 1.5784E+02 8.6560E+01 6.6324E+01 - 1.1220E+00 1.2242E+02 1.1730E+02 6.3099E+01 4.8660E+01 - 1.2589E+00 9.1569E+01 8.6643E+01 4.6057E+01 3.5528E+01 - 1.4125E+00 6.8190E+01 6.3713E+01 3.3283E+01 2.5663E+01 - 1.5849E+00 5.0558E+01 4.6691E+01 2.4172E+01 1.8555E+01 - 1.7783E+00 3.7446E+01 3.4269E+01 1.7560E+01 1.3441E+01 - 1.9953E+00 2.7438E+01 2.4752E+01 1.2524E+01 9.5721E+00 - 2.2387E+00 2.0034E+01 1.7833E+01 8.9774E+00 6.7052E+00 - 2.5119E+00 1.4653E+01 1.2903E+01 6.3477E+00 4.7643E+00 - 2.8184E+00 1.0717E+01 9.3193E+00 4.4692E+00 3.3954E+00 - 3.1623E+00 7.8206E+00 6.8021E+00 3.0977E+00 2.3496E+00 - 3.5481E+00 5.6581E+00 4.8719E+00 2.1476E+00 1.6348E+00 - 3.9811E+00 4.0939E+00 3.4873E+00 1.4872E+00 1.1477E+00 - 4.4668E+00 2.9614E+00 2.4999E+00 1.0320E+00 7.8144E-01 - 5.0119E+00 2.1332E+00 1.7719E+00 7.1173E-01 5.3078E-01 - 5.6234E+00 1.5289E+00 1.2558E+00 4.8297E-01 3.7147E-01 - 6.3096E+00 1.1018E+00 8.9976E-01 3.3054E-01 2.5234E-01 - 7.0795E+00 7.9193E-01 6.4664E-01 2.2698E-01 1.6896E-01 - 7.9433E+00 5.6546E-01 4.5737E-01 1.5200E-01 1.1470E-01 - 8.9125E+00 3.9924E-01 3.2636E-01 1.0267E-01 7.5462E-02 - 1.0000E+01 2.8610E-01 2.2612E-01 6.8010E-02 5.1265E-02 - 1.1220E+01 2.0544E-01 1.6114E-01 4.5779E-02 3.4876E-02 - 1.2589E+01 1.4686E-01 1.1446E-01 3.0466E-02 2.3533E-02 - 1.4125E+01 1.0483E-01 8.1135E-02 2.0169E-02 1.5680E-02 - 1.5849E+01 7.4540E-02 5.7455E-02 1.3824E-02 1.0428E-02 - 1.7783E+01 5.2891E-02 4.1295E-02 9.4018E-03 7.0047E-03 - 1.9953E+01 3.8073E-02 2.9080E-02 6.2271E-03 4.5597E-03 - 2.2387E+01 2.7310E-02 2.0261E-02 4.0693E-03 2.9784E-03 - 2.5119E+01 1.9265E-02 1.4545E-02 2.6902E-03 1.9817E-03 - 2.8184E+01 1.3486E-02 1.0214E-02 1.7779E-03 1.3088E-03 - 3.1623E+01 9.6696E-03 7.1963E-03 1.1721E-03 9.2180E-04 - 3.5481E+01 6.8690E-03 5.0822E-03 7.8108E-04 6.1820E-04 - 3.9811E+01 4.8625E-03 3.5942E-03 5.2067E-04 4.0957E-04 - 4.4668E+01 3.4521E-03 2.5252E-03 3.4511E-04 2.7276E-04 - 5.0119E+01 2.4507E-03 1.7777E-03 2.3122E-04 1.8637E-04 - 5.6234E+01 1.7337E-03 1.2576E-03 1.5502E-04 1.2374E-04 - 6.3096E+01 1.2211E-03 8.8586E-04 1.0242E-04 8.2798E-05 - 7.0795E+01 8.5472E-04 6.2180E-04 6.8292E-05 5.5077E-05 - 7.9433E+01 6.0697E-04 4.3364E-04 4.6326E-05 3.6907E-05 - 8.9125E+01 4.3086E-04 3.0264E-04 3.0549E-05 2.5347E-05 - 1.0000E+02 3.0231E-04 2.1152E-04 2.0808E-05 1.6948E-05 - 1.1220E+02 2.1163E-04 1.4722E-04 1.3816E-05 1.1477E-05 - 1.2589E+02 1.4840E-04 1.0291E-04 9.4331E-06 7.6997E-06 - 1.4125E+02 1.0432E-04 7.1989E-05 6.3772E-06 5.2210E-06 - 1.5849E+02 7.3025E-05 4.9999E-05 4.2271E-06 3.5375E-06 - 1.7783E+02 5.1068E-05 3.4546E-05 2.8869E-06 2.3320E-06 - 1.9953E+02 3.5603E-05 2.4036E-05 1.9556E-06 1.5809E-06 - 2.2387E+02 2.4756E-05 1.6872E-05 1.3002E-06 1.0717E-06 - 2.5119E+02 1.7304E-05 1.1735E-05 8.8556E-07 7.2703E-07 - 2.8184E+02 1.2045E-05 8.0772E-06 6.1490E-07 4.9513E-07 - 3.1623E+02 8.5107E-06 5.5900E-06 4.1359E-07 3.3006E-07 - 3.5481E+02 5.9173E-06 3.8543E-06 2.8018E-07 2.2749E-07 - 3.9811E+02 4.0974E-06 2.6664E-06 1.8814E-07 1.5354E-07 - 4.4668E+02 2.8457E-06 1.8471E-06 1.2656E-07 1.0468E-07 - 5.0119E+02 1.9851E-06 1.2747E-06 8.6009E-08 7.0581E-08 - 5.6234E+02 1.3847E-06 8.7830E-07 5.8869E-08 4.5202E-08 - 6.3096E+02 9.5050E-07 6.0226E-07 3.9798E-08 3.0530E-08 - 7.0795E+02 6.5768E-07 4.1660E-07 2.6884E-08 2.0827E-08 - 7.9433E+02 4.5367E-07 2.8606E-07 1.8146E-08 1.3967E-08 - 8.9125E+02 3.1091E-07 1.9406E-07 1.2486E-08 9.3104E-09 - 1.0000E+03 2.1648E-07 1.3344E-07 8.1822E-09 6.3338E-09 - 1.1220E+03 1.4786E-07 9.0178E-08 5.4952E-09 4.1208E-09 - 1.2589E+03 1.0094E-07 6.1189E-08 3.6647E-09 2.8671E-09 - 1.4125E+03 6.8680E-08 4.1310E-08 2.4585E-09 1.9541E-09 - 1.5849E+03 4.6635E-08 2.7760E-08 1.6410E-09 1.1680E-09 - 1.7783E+03 3.1640E-08 1.9026E-08 1.0621E-09 7.5149E-10 - 1.9953E+03 2.1573E-08 1.2977E-08 7.2402E-10 5.5020E-10 - 2.2387E+03 1.4623E-08 8.7287E-09 4.7585E-10 3.7299E-10 - 2.5119E+03 9.8697E-09 5.8305E-09 3.2822E-10 2.4266E-10 - 2.8184E+03 6.6566E-09 3.8183E-09 2.2193E-10 1.5891E-10 - 3.1623E+03 4.5212E-09 2.6368E-09 1.4111E-10 1.0420E-10 - 3.5481E+03 2.9755E-09 1.7314E-09 9.1744E-11 6.5592E-11 - 3.9811E+03 1.9830E-09 1.1415E-09 5.9620E-11 4.5200E-11 - 4.4668E+03 1.3113E-09 7.5976E-10 4.0165E-11 3.0028E-11 - 5.0119E+03 8.7960E-10 5.0339E-10 2.7326E-11 1.9218E-11 - 5.6234E+03 5.8664E-10 3.2485E-10 1.8460E-11 1.3681E-11 - 6.3096E+03 3.8850E-10 2.1787E-10 1.1224E-11 8.3599E-12 - 7.0795E+03 2.6108E-10 1.4319E-10 7.2896E-12 5.2971E-12 - 7.9433E+03 1.7120E-10 9.4548E-11 5.0337E-12 3.7403E-12 - 8.9125E+03 1.1143E-10 6.1724E-11 3.5112E-12 2.7513E-12 - 1.0000E+04 7.3316E-11 3.9734E-11 2.3095E-12 1.6843E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4643E+04 1.5040E+04 7.6245E+03 6.4210E+03 - 1.1220E-01 1.2777E+04 1.3152E+04 6.7222E+03 5.5860E+03 - 1.2589E-01 1.1099E+04 1.1440E+04 5.8652E+03 4.8057E+03 - 1.4125E-01 9.5650E+03 9.8467E+03 5.0374E+03 4.1239E+03 - 1.5849E-01 8.1520E+03 8.3306E+03 4.3015E+03 3.4924E+03 - 1.7783E-01 6.8666E+03 6.9719E+03 3.6454E+03 2.9166E+03 - 1.9953E-01 5.6976E+03 5.8158E+03 3.0455E+03 2.4136E+03 - 2.2387E-01 4.6617E+03 4.7842E+03 2.5297E+03 1.9829E+03 - 2.5119E-01 3.7871E+03 3.8669E+03 2.0890E+03 1.6194E+03 - 2.8184E-01 3.0458E+03 3.1058E+03 1.6866E+03 1.3012E+03 - 3.1623E-01 2.4245E+03 2.4664E+03 1.3410E+03 1.0377E+03 - 3.5481E-01 1.9105E+03 1.9347E+03 1.0661E+03 8.2104E+02 - 3.9811E-01 1.4859E+03 1.5144E+03 8.3414E+02 6.4162E+02 - 4.4668E-01 1.1448E+03 1.1674E+03 6.4186E+02 4.9533E+02 - 5.0119E-01 8.8238E+02 8.9156E+02 4.9376E+02 3.7943E+02 - 5.6234E-01 6.7372E+02 6.7895E+02 3.7808E+02 2.8781E+02 - 6.3096E-01 5.0863E+02 5.0969E+02 2.8596E+02 2.1836E+02 - 7.0795E-01 3.8605E+02 3.7750E+02 2.1474E+02 1.6463E+02 - 7.9433E-01 2.9014E+02 2.8196E+02 1.5928E+02 1.2220E+02 - 8.9125E-01 2.1733E+02 2.1219E+02 1.1646E+02 8.9847E+01 - 1.0000E+00 1.6400E+02 1.5911E+02 8.6766E+01 6.6106E+01 - 1.1220E+00 1.2258E+02 1.1759E+02 6.3323E+01 4.8366E+01 - 1.2589E+00 9.1974E+01 8.6715E+01 4.6548E+01 3.5246E+01 - 1.4125E+00 6.8280E+01 6.3889E+01 3.3935E+01 2.5641E+01 - 1.5849E+00 5.0502E+01 4.6850E+01 2.4442E+01 1.8432E+01 - 1.7783E+00 3.7418E+01 3.4343E+01 1.7407E+01 1.3221E+01 - 1.9953E+00 2.7694E+01 2.4847E+01 1.2367E+01 9.5128E+00 - 2.2387E+00 2.0420E+01 1.7910E+01 8.8273E+00 6.6649E+00 - 2.5119E+00 1.4672E+01 1.3021E+01 6.2401E+00 4.7055E+00 - 2.8184E+00 1.0594E+01 9.3936E+00 4.4169E+00 3.3251E+00 - 3.1623E+00 7.7638E+00 6.7169E+00 3.0934E+00 2.3483E+00 - 3.5481E+00 5.6119E+00 4.8098E+00 2.1507E+00 1.6532E+00 - 3.9811E+00 4.0442E+00 3.4503E+00 1.4883E+00 1.1411E+00 - 4.4668E+00 2.9053E+00 2.4752E+00 1.0263E+00 7.8486E-01 - 5.0119E+00 2.0927E+00 1.7570E+00 7.0482E-01 5.3669E-01 - 5.6234E+00 1.5108E+00 1.2563E+00 4.8109E-01 3.6532E-01 - 6.3096E+00 1.0804E+00 8.9877E-01 3.2924E-01 2.5486E-01 - 7.0795E+00 7.6885E-01 6.3798E-01 2.2146E-01 1.7161E-01 - 7.9433E+00 5.5002E-01 4.5205E-01 1.4497E-01 1.1465E-01 - 8.9125E+00 3.9685E-01 3.1542E-01 9.5894E-02 7.7058E-02 - 1.0000E+01 2.8453E-01 2.2450E-01 6.7521E-02 5.1268E-02 - 1.1220E+01 2.0316E-01 1.5916E-01 4.5201E-02 3.4871E-02 - 1.2589E+01 1.4566E-01 1.1306E-01 3.0330E-02 2.3146E-02 - 1.4125E+01 1.0405E-01 8.0293E-02 2.0058E-02 1.5428E-02 - 1.5849E+01 7.4352E-02 5.7042E-02 1.3434E-02 1.0516E-02 - 1.7783E+01 5.2750E-02 4.0539E-02 8.9487E-03 7.1833E-03 - 1.9953E+01 3.7490E-02 2.8904E-02 5.9136E-03 4.7049E-03 - 2.2387E+01 2.6650E-02 2.0447E-02 3.9960E-03 3.0616E-03 - 2.5119E+01 1.9141E-02 1.4488E-02 2.6318E-03 2.0230E-03 - 2.8184E+01 1.3640E-02 1.0277E-02 1.7088E-03 1.3691E-03 - 3.1623E+01 9.6428E-03 7.2030E-03 1.1803E-03 9.2124E-04 - 3.5481E+01 6.8549E-03 5.1061E-03 7.8188E-04 6.1879E-04 - 3.9811E+01 4.8723E-03 3.6073E-03 5.1804E-04 4.1567E-04 - 4.4668E+01 3.4416E-03 2.5444E-03 3.4230E-04 2.8076E-04 - 5.0119E+01 2.4375E-03 1.7802E-03 2.3119E-04 1.8735E-04 - 5.6234E+01 1.7344E-03 1.2452E-03 1.5519E-04 1.2279E-04 - 6.3096E+01 1.2295E-03 8.7984E-04 1.0245E-04 8.2002E-05 - 7.0795E+01 8.6301E-04 6.2151E-04 6.9229E-05 5.5081E-05 - 7.9433E+01 6.0718E-04 4.3340E-04 4.6539E-05 3.7287E-05 - 8.9125E+01 4.2660E-04 3.0094E-04 3.0571E-05 2.4568E-05 - 1.0000E+02 3.0097E-04 2.1318E-04 2.0701E-05 1.7000E-05 - 1.1220E+02 2.1152E-04 1.4882E-04 1.4025E-05 1.1494E-05 - 1.2589E+02 1.4875E-04 1.0393E-04 9.3952E-06 7.7983E-06 - 1.4125E+02 1.0403E-04 7.2359E-05 6.2940E-06 5.2350E-06 - 1.5849E+02 7.2879E-05 5.0247E-05 4.2727E-06 3.5345E-06 - 1.7783E+02 5.1123E-05 3.5186E-05 2.9120E-06 2.3806E-06 - 1.9953E+02 3.5659E-05 2.4348E-05 1.9710E-06 1.6014E-06 - 2.2387E+02 2.5025E-05 1.6760E-05 1.3593E-06 1.0859E-06 - 2.5119E+02 1.7548E-05 1.1682E-05 9.0813E-07 7.4422E-07 - 2.8184E+02 1.2213E-05 8.0898E-06 5.9176E-07 4.8823E-07 - 3.1623E+02 8.5020E-06 5.6053E-06 4.0214E-07 3.2765E-07 - 3.5481E+02 5.9060E-06 3.8751E-06 2.7752E-07 2.2323E-07 - 3.9811E+02 4.1131E-06 2.6857E-06 1.9180E-07 1.5300E-07 - 4.4668E+02 2.8737E-06 1.8451E-06 1.2758E-07 1.0261E-07 - 5.0119E+02 1.9939E-06 1.2706E-06 8.4738E-08 6.8708E-08 - 5.6234E+02 1.3860E-06 8.7888E-07 5.8818E-08 4.7169E-08 - 6.3096E+02 9.6017E-07 6.0198E-07 3.9610E-08 3.1427E-08 - 7.0795E+02 6.6402E-07 4.1442E-07 2.6717E-08 2.1149E-08 - 7.9433E+02 4.5637E-07 2.8478E-07 1.8603E-08 1.4431E-08 - 8.9125E+02 3.1550E-07 1.9437E-07 1.2138E-08 9.5528E-09 - 1.0000E+03 2.1698E-07 1.3413E-07 7.9778E-09 6.2019E-09 - 1.1220E+03 1.4718E-07 9.0441E-08 5.4419E-09 4.1984E-09 - 1.2589E+03 1.0121E-07 6.1099E-08 3.6402E-09 2.6897E-09 - 1.4125E+03 6.9290E-08 4.1339E-08 2.4040E-09 1.7300E-09 - 1.5849E+03 4.7487E-08 2.7925E-08 1.6427E-09 1.2173E-09 - 1.7783E+03 3.2255E-08 1.8986E-08 1.0956E-09 8.7697E-10 - 1.9953E+03 2.1584E-08 1.2818E-08 7.0950E-10 5.6071E-10 - 2.2387E+03 1.4561E-08 8.5395E-09 4.4716E-10 3.6439E-10 - 2.5119E+03 9.7696E-09 5.7378E-09 3.0751E-10 2.5137E-10 - 2.8184E+03 6.5965E-09 3.8664E-09 2.0479E-10 1.6103E-10 - 3.1623E+03 4.5412E-09 2.6457E-09 1.3845E-10 1.0448E-10 - 3.5481E+03 2.9745E-09 1.7272E-09 9.0972E-11 6.5904E-11 - 3.9811E+03 1.9779E-09 1.1524E-09 5.9585E-11 4.4184E-11 - 4.4668E+03 1.3126E-09 7.6036E-10 3.8796E-11 3.0506E-11 - 5.0119E+03 8.8618E-10 4.9971E-10 2.5228E-11 1.8441E-11 - 5.6234E+03 5.8701E-10 3.3281E-10 1.6459E-11 1.2401E-11 - 6.3096E+03 3.8984E-10 2.1856E-10 1.1395E-11 7.9781E-12 - 7.0795E+03 2.5743E-10 1.4497E-10 7.6775E-12 5.0993E-12 - 7.9433E+03 1.6854E-10 9.4027E-11 4.9050E-12 3.8830E-12 - 8.9125E+03 1.1206E-10 6.1857E-11 3.3522E-12 2.6771E-12 - 1.0000E+04 7.4444E-11 4.1162E-11 2.2212E-12 1.5602E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4571E+04 1.4976E+04 7.5643E+03 6.3922E+03 - 1.1220E-01 1.2720E+04 1.3057E+04 6.6739E+03 5.5630E+03 - 1.2589E-01 1.1029E+04 1.1379E+04 5.8086E+03 4.8022E+03 - 1.4125E-01 9.5357E+03 9.7862E+03 5.0069E+03 4.1030E+03 - 1.5849E-01 8.1319E+03 8.3001E+03 4.2824E+03 3.4714E+03 - 1.7783E-01 6.8490E+03 6.9827E+03 3.6221E+03 2.9121E+03 - 1.9953E-01 5.6943E+03 5.8031E+03 3.0343E+03 2.4132E+03 - 2.2387E-01 4.6693E+03 4.7602E+03 2.5085E+03 1.9814E+03 - 2.5119E-01 3.7833E+03 3.8629E+03 2.0584E+03 1.6101E+03 - 2.8184E-01 3.0339E+03 3.0915E+03 1.6778E+03 1.2933E+03 - 3.1623E-01 2.4122E+03 2.4541E+03 1.3393E+03 1.0390E+03 - 3.5481E-01 1.8943E+03 1.9399E+03 1.0546E+03 8.2257E+02 - 3.9811E-01 1.4780E+03 1.5167E+03 8.2387E+02 6.4337E+02 - 4.4668E-01 1.1509E+03 1.1694E+03 6.4366E+02 4.9655E+02 - 5.0119E-01 8.8759E+02 8.9297E+02 4.9339E+02 3.7737E+02 - 5.6234E-01 6.7567E+02 6.8079E+02 3.7381E+02 2.8576E+02 - 6.3096E-01 5.1295E+02 5.1525E+02 2.8576E+02 2.1608E+02 - 7.0795E-01 3.8783E+02 3.8417E+02 2.1437E+02 1.6337E+02 - 7.9433E-01 2.9194E+02 2.8525E+02 1.5946E+02 1.2322E+02 - 8.9125E-01 2.2047E+02 2.1363E+02 1.1892E+02 9.1567E+01 - 1.0000E+00 1.6469E+02 1.5944E+02 8.7690E+01 6.7140E+01 - 1.1220E+00 1.2231E+02 1.1766E+02 6.3590E+01 4.9115E+01 - 1.2589E+00 9.1331E+01 8.7008E+01 4.6445E+01 3.5738E+01 - 1.4125E+00 6.8636E+01 6.4617E+01 3.3978E+01 2.5934E+01 - 1.5849E+00 5.0818E+01 4.7270E+01 2.4388E+01 1.8763E+01 - 1.7783E+00 3.7163E+01 3.4543E+01 1.7469E+01 1.3512E+01 - 1.9953E+00 2.7412E+01 2.5035E+01 1.2554E+01 9.5284E+00 - 2.2387E+00 2.0267E+01 1.8086E+01 8.9997E+00 6.7389E+00 - 2.5119E+00 1.4795E+01 1.3066E+01 6.4450E+00 4.8166E+00 - 2.8184E+00 1.0856E+01 9.3601E+00 4.5077E+00 3.3974E+00 - 3.1623E+00 7.8110E+00 6.7814E+00 3.1116E+00 2.3673E+00 - 3.5481E+00 5.6421E+00 4.8741E+00 2.1456E+00 1.6396E+00 - 3.9811E+00 4.0984E+00 3.4853E+00 1.4830E+00 1.1406E+00 - 4.4668E+00 2.9556E+00 2.4874E+00 1.0403E+00 7.8882E-01 - 5.0119E+00 2.1210E+00 1.7866E+00 7.0218E-01 5.3419E-01 - 5.6234E+00 1.5232E+00 1.2713E+00 4.7357E-01 3.6714E-01 - 6.3096E+00 1.0878E+00 9.0228E-01 3.3038E-01 2.5114E-01 - 7.0795E+00 7.7520E-01 6.4799E-01 2.2049E-01 1.6740E-01 - 7.9433E+00 5.5881E-01 4.5336E-01 1.5198E-01 1.1355E-01 - 8.9125E+00 4.0327E-01 3.2222E-01 1.0613E-01 7.7359E-02 - 1.0000E+01 2.8505E-01 2.2590E-01 6.7362E-02 5.1235E-02 - 1.1220E+01 2.0170E-01 1.5909E-01 4.5178E-02 3.4222E-02 - 1.2589E+01 1.4398E-01 1.1308E-01 3.0186E-02 2.3149E-02 - 1.4125E+01 1.0365E-01 7.9597E-02 1.9934E-02 1.5745E-02 - 1.5849E+01 7.3983E-02 5.6528E-02 1.3283E-02 1.0608E-02 - 1.7783E+01 5.2551E-02 4.0381E-02 9.1171E-03 6.9811E-03 - 1.9953E+01 3.7819E-02 2.8321E-02 6.1303E-03 4.5367E-03 - 2.2387E+01 2.7042E-02 1.9985E-02 4.0743E-03 3.0346E-03 - 2.5119E+01 1.8818E-02 1.4089E-02 2.7131E-03 1.9717E-03 - 2.8184E+01 1.3413E-02 1.0126E-02 1.7481E-03 1.3412E-03 - 3.1623E+01 9.6746E-03 7.2239E-03 1.1753E-03 9.1963E-04 - 3.5481E+01 6.8559E-03 5.0897E-03 7.7780E-04 6.1453E-04 - 3.9811E+01 4.8781E-03 3.5823E-03 5.1967E-04 4.1289E-04 - 4.4668E+01 3.4528E-03 2.5346E-03 3.4787E-04 2.7765E-04 - 5.0119E+01 2.4412E-03 1.7882E-03 2.3087E-04 1.8731E-04 - 5.6234E+01 1.7380E-03 1.2593E-03 1.5321E-04 1.2468E-04 - 6.3096E+01 1.2279E-03 8.8864E-04 1.0315E-04 8.3142E-05 - 7.0795E+01 8.6853E-04 6.2476E-04 6.9412E-05 5.5046E-05 - 7.9433E+01 6.1284E-04 4.3575E-04 4.6931E-05 3.6759E-05 - 8.9125E+01 4.3036E-04 3.0320E-04 3.2056E-05 2.4928E-05 - 1.0000E+02 3.0171E-04 2.1251E-04 2.1055E-05 1.6960E-05 - 1.1220E+02 2.1254E-04 1.4837E-04 1.3941E-05 1.1462E-05 - 1.2589E+02 1.4962E-04 1.0336E-04 9.3010E-06 7.7284E-06 - 1.4125E+02 1.0433E-04 7.2095E-05 6.4391E-06 5.1807E-06 - 1.5849E+02 7.2969E-05 5.0280E-05 4.4501E-06 3.5040E-06 - 1.7783E+02 5.1158E-05 3.4937E-05 3.0136E-06 2.3678E-06 - 1.9953E+02 3.5766E-05 2.4218E-05 1.9813E-06 1.5899E-06 - 2.2387E+02 2.5044E-05 1.6752E-05 1.3201E-06 1.0556E-06 - 2.5119E+02 1.7398E-05 1.1576E-05 9.1123E-07 7.4179E-07 - 2.8184E+02 1.2226E-05 8.0598E-06 5.8967E-07 5.0402E-07 - 3.1623E+02 8.5298E-06 5.6312E-06 4.0811E-07 3.3037E-07 - 3.5481E+02 5.9220E-06 3.8819E-06 2.7706E-07 2.2623E-07 - 3.9811E+02 4.1350E-06 2.6676E-06 1.8751E-07 1.5019E-07 - 4.4668E+02 2.8647E-06 1.8425E-06 1.2818E-07 1.0069E-07 - 5.0119E+02 1.9860E-06 1.2774E-06 8.7390E-08 6.7453E-08 - 5.6234E+02 1.3790E-06 8.8297E-07 5.9314E-08 4.4982E-08 - 6.3096E+02 9.4791E-07 6.0300E-07 3.9487E-08 2.9807E-08 - 7.0795E+02 6.5972E-07 4.1227E-07 2.6989E-08 2.0577E-08 - 7.9433E+02 4.5526E-07 2.8334E-07 1.8011E-08 1.4305E-08 - 8.9125E+02 3.1181E-07 1.9387E-07 1.2075E-08 9.5822E-09 - 1.0000E+03 2.1545E-07 1.3356E-07 8.1744E-09 6.1540E-09 - 1.1220E+03 1.4724E-07 9.0190E-08 5.4448E-09 4.1830E-09 - 1.2589E+03 1.0090E-07 6.1342E-08 3.5429E-09 2.7409E-09 - 1.4125E+03 6.8479E-08 4.1621E-08 2.3675E-09 1.8609E-09 - 1.5849E+03 4.6952E-08 2.8045E-08 1.6747E-09 1.2272E-09 - 1.7783E+03 3.1800E-08 1.8938E-08 1.1392E-09 7.8825E-10 - 1.9953E+03 2.1664E-08 1.2699E-08 7.2638E-10 5.6221E-10 - 2.2387E+03 1.4675E-08 8.6078E-09 4.7901E-10 3.8062E-10 - 2.5119E+03 9.8725E-09 5.8356E-09 3.1736E-10 2.3443E-10 - 2.8184E+03 6.6658E-09 3.8671E-09 2.1072E-10 1.5424E-10 - 3.1623E+03 4.5890E-09 2.6161E-09 1.3967E-10 1.0386E-10 - 3.5481E+03 2.9736E-09 1.7151E-09 9.3342E-11 6.6663E-11 - 3.9811E+03 1.9682E-09 1.1481E-09 6.0373E-11 4.3483E-11 - 4.4668E+03 1.3129E-09 7.5710E-10 3.6723E-11 2.8905E-11 - 5.0119E+03 8.7990E-10 4.9785E-10 2.5920E-11 1.9991E-11 - 5.6234E+03 5.8965E-10 3.2721E-10 1.8108E-11 1.3115E-11 - 6.3096E+03 3.8752E-10 2.2050E-10 1.1286E-11 8.7462E-12 - 7.0795E+03 2.5696E-10 1.4570E-10 7.2962E-12 5.9819E-12 - 7.9433E+03 1.6918E-10 9.5836E-11 4.7474E-12 3.8804E-12 - 8.9125E+03 1.1250E-10 6.3632E-11 3.1347E-12 2.2170E-12 - 1.0000E+04 7.5339E-11 4.2443E-11 2.0559E-12 1.3551E-12 -average flux in [cosZ = 0.50 -- 0.60, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4449E+04 1.4773E+04 7.4307E+03 6.3705E+03 - 1.1220E-01 1.2663E+04 1.2969E+04 6.5644E+03 5.5521E+03 - 1.2589E-01 1.1024E+04 1.1209E+04 5.7268E+03 4.8042E+03 - 1.4125E-01 9.4843E+03 9.6073E+03 4.9089E+03 4.1140E+03 - 1.5849E-01 8.1010E+03 8.2016E+03 4.1952E+03 3.4737E+03 - 1.7783E-01 6.8408E+03 6.9134E+03 3.5515E+03 2.8984E+03 - 1.9953E-01 5.6627E+03 5.7511E+03 2.9718E+03 2.4065E+03 - 2.2387E-01 4.6411E+03 4.7219E+03 2.4656E+03 1.9731E+03 - 2.5119E-01 3.7640E+03 3.8227E+03 2.0252E+03 1.6052E+03 - 2.8184E-01 3.0257E+03 3.0765E+03 1.6423E+03 1.2976E+03 - 3.1623E-01 2.4118E+03 2.4353E+03 1.3259E+03 1.0328E+03 - 3.5481E-01 1.8889E+03 1.9096E+03 1.0585E+03 8.1725E+02 - 3.9811E-01 1.4747E+03 1.4935E+03 8.2341E+02 6.4273E+02 - 4.4668E-01 1.1493E+03 1.1510E+03 6.3361E+02 4.9622E+02 - 5.0119E-01 8.8460E+02 8.7801E+02 4.8958E+02 3.7923E+02 - 5.6234E-01 6.7564E+02 6.7115E+02 3.7398E+02 2.8972E+02 - 6.3096E-01 5.1281E+02 5.0881E+02 2.8238E+02 2.2118E+02 - 7.0795E-01 3.8928E+02 3.8073E+02 2.1241E+02 1.6465E+02 - 7.9433E-01 2.9149E+02 2.8496E+02 1.5845E+02 1.2103E+02 - 8.9125E-01 2.1723E+02 2.1339E+02 1.1744E+02 9.0621E+01 - 1.0000E+00 1.6414E+02 1.5828E+02 8.7147E+01 6.6527E+01 - 1.1220E+00 1.2238E+02 1.1738E+02 6.3184E+01 4.8815E+01 - 1.2589E+00 9.2002E+01 8.6878E+01 4.6053E+01 3.5754E+01 - 1.4125E+00 6.8651E+01 6.4097E+01 3.3754E+01 2.5754E+01 - 1.5849E+00 5.0429E+01 4.6899E+01 2.4101E+01 1.8553E+01 - 1.7783E+00 3.7126E+01 3.4391E+01 1.7277E+01 1.3268E+01 - 1.9953E+00 2.7451E+01 2.5212E+01 1.2463E+01 9.5582E+00 - 2.2387E+00 2.0101E+01 1.8134E+01 8.8888E+00 6.8010E+00 - 2.5119E+00 1.4681E+01 1.3002E+01 6.3472E+00 4.7238E+00 - 2.8184E+00 1.0737E+01 9.3751E+00 4.4632E+00 3.3518E+00 - 3.1623E+00 7.7561E+00 6.7531E+00 3.1065E+00 2.3368E+00 - 3.5481E+00 5.6355E+00 4.8630E+00 2.1688E+00 1.6267E+00 - 3.9811E+00 4.0899E+00 3.4831E+00 1.5081E+00 1.1340E+00 - 4.4668E+00 2.9369E+00 2.4803E+00 1.0245E+00 7.7688E-01 - 5.0119E+00 2.1233E+00 1.7653E+00 7.0271E-01 5.2523E-01 - 5.6234E+00 1.5178E+00 1.2497E+00 4.8378E-01 3.6092E-01 - 6.3096E+00 1.0763E+00 8.8621E-01 3.2894E-01 2.4655E-01 - 7.0795E+00 7.8436E-01 6.3111E-01 2.2137E-01 1.7049E-01 - 7.9433E+00 5.5955E-01 4.5181E-01 1.5024E-01 1.1659E-01 - 8.9125E+00 3.9834E-01 3.2098E-01 1.0102E-01 7.7389E-02 - 1.0000E+01 2.8490E-01 2.2644E-01 6.8017E-02 5.1458E-02 - 1.1220E+01 2.0450E-01 1.6054E-01 4.4960E-02 3.4125E-02 - 1.2589E+01 1.4572E-01 1.1361E-01 2.9631E-02 2.2845E-02 - 1.4125E+01 1.0264E-01 8.0510E-02 2.0345E-02 1.5266E-02 - 1.5849E+01 7.3129E-02 5.7074E-02 1.3371E-02 1.0129E-02 - 1.7783E+01 5.2998E-02 4.0292E-02 9.0667E-03 6.8337E-03 - 1.9953E+01 3.7723E-02 2.8585E-02 6.1035E-03 4.3846E-03 - 2.2387E+01 2.6690E-02 2.0342E-02 3.8700E-03 2.8306E-03 - 2.5119E+01 1.8947E-02 1.4402E-02 2.6114E-03 2.0703E-03 - 2.8184E+01 1.3616E-02 1.0229E-02 1.7427E-03 1.4019E-03 - 3.1623E+01 9.6787E-03 7.2150E-03 1.1814E-03 9.2516E-04 - 3.5481E+01 6.8809E-03 5.1047E-03 7.8362E-04 6.1512E-04 - 3.9811E+01 4.8939E-03 3.5906E-03 5.1656E-04 4.0831E-04 - 4.4668E+01 3.4616E-03 2.5261E-03 3.4553E-04 2.7424E-04 - 5.0119E+01 2.4404E-03 1.7894E-03 2.3316E-04 1.8635E-04 - 5.6234E+01 1.7219E-03 1.2598E-03 1.5620E-04 1.2365E-04 - 6.3096E+01 1.2200E-03 8.7979E-04 1.0207E-04 8.1227E-05 - 7.0795E+01 8.6602E-04 6.1629E-04 6.9297E-05 5.4041E-05 - 7.9433E+01 6.1177E-04 4.3631E-04 4.6886E-05 3.6787E-05 - 8.9125E+01 4.3064E-04 3.0734E-04 3.0222E-05 2.4905E-05 - 1.0000E+02 3.0222E-04 2.1305E-04 2.0832E-05 1.6818E-05 - 1.1220E+02 2.1147E-04 1.4827E-04 1.4014E-05 1.1358E-05 - 1.2589E+02 1.4872E-04 1.0350E-04 9.3932E-06 7.6473E-06 - 1.4125E+02 1.0450E-04 7.1896E-05 6.3829E-06 5.1214E-06 - 1.5849E+02 7.3084E-05 5.0106E-05 4.3100E-06 3.4443E-06 - 1.7783E+02 5.1285E-05 3.5069E-05 2.9003E-06 2.3219E-06 - 1.9953E+02 3.5815E-05 2.4294E-05 1.9789E-06 1.5889E-06 - 2.2387E+02 2.5143E-05 1.6766E-05 1.3357E-06 1.0882E-06 - 2.5119E+02 1.7497E-05 1.1645E-05 9.0966E-07 7.3399E-07 - 2.8184E+02 1.2162E-05 8.0993E-06 6.0934E-07 4.8510E-07 - 3.1623E+02 8.5048E-06 5.6214E-06 4.1575E-07 3.2777E-07 - 3.5481E+02 5.9149E-06 3.8952E-06 2.7947E-07 2.2403E-07 - 3.9811E+02 4.1289E-06 2.6917E-06 1.9035E-07 1.5295E-07 - 4.4668E+02 2.8688E-06 1.8506E-06 1.2862E-07 1.0295E-07 - 5.0119E+02 2.0007E-06 1.2808E-06 8.4709E-08 7.0387E-08 - 5.6234E+02 1.3907E-06 8.8450E-07 5.7828E-08 4.6751E-08 - 6.3096E+02 9.5761E-07 6.0321E-07 3.9011E-08 3.1379E-08 - 7.0795E+02 6.6323E-07 4.1448E-07 2.6046E-08 2.0764E-08 - 7.9433E+02 4.5782E-07 2.8382E-07 1.7518E-08 1.3298E-08 - 8.9125E+02 3.1170E-07 1.9307E-07 1.1997E-08 8.6979E-09 - 1.0000E+03 2.1533E-07 1.3288E-07 8.1757E-09 5.9636E-09 - 1.1220E+03 1.4844E-07 8.9613E-08 5.7409E-09 4.0980E-09 - 1.2589E+03 1.0157E-07 6.0957E-08 3.7714E-09 2.8977E-09 - 1.4125E+03 6.8763E-08 4.1921E-08 2.4389E-09 1.9760E-09 - 1.5849E+03 4.6772E-08 2.8497E-08 1.6279E-09 1.2635E-09 - 1.7783E+03 3.1970E-08 1.9304E-08 1.0459E-09 8.2169E-10 - 1.9953E+03 2.1448E-08 1.2865E-08 7.2301E-10 5.7442E-10 - 2.2387E+03 1.4526E-08 8.6198E-09 4.9040E-10 3.8672E-10 - 2.5119E+03 9.9084E-09 5.7977E-09 3.0344E-10 2.4903E-10 - 2.8184E+03 6.5872E-09 3.9218E-09 2.1073E-10 1.5949E-10 - 3.1623E+03 4.5557E-09 2.6700E-09 1.3894E-10 1.0161E-10 - 3.5481E+03 2.9802E-09 1.7281E-09 8.8816E-11 6.7093E-11 - 3.9811E+03 1.9680E-09 1.1431E-09 6.1282E-11 4.2582E-11 - 4.4668E+03 1.3210E-09 7.5849E-10 4.0720E-11 2.7245E-11 - 5.0119E+03 8.7880E-10 5.0154E-10 2.7597E-11 1.9236E-11 - 5.6234E+03 5.7909E-10 3.3598E-10 1.7749E-11 1.3299E-11 - 6.3096E+03 3.8844E-10 2.2017E-10 1.1138E-11 7.4580E-12 - 7.0795E+03 2.5853E-10 1.4402E-10 7.3175E-12 4.8567E-12 - 7.9433E+03 1.7026E-10 9.5527E-11 4.8066E-12 3.4374E-12 - 8.9125E+03 1.1319E-10 6.2458E-11 3.0234E-12 2.4966E-12 - 1.0000E+04 7.4487E-11 4.0315E-11 1.9385E-12 1.5379E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5750E+04 1.6002E+04 7.9932E+03 6.9870E+03 - 1.1220E-01 1.3611E+04 1.3845E+04 6.9503E+03 6.0582E+03 - 1.2589E-01 1.1742E+04 1.1862E+04 6.0203E+03 5.1871E+03 - 1.4125E-01 1.0029E+04 1.0114E+04 5.1533E+03 4.3920E+03 - 1.5849E-01 8.4892E+03 8.5733E+03 4.3533E+03 3.6921E+03 - 1.7783E-01 7.0966E+03 7.1253E+03 3.6567E+03 3.0838E+03 - 1.9953E-01 5.8673E+03 5.8657E+03 3.0536E+03 2.5396E+03 - 2.2387E-01 4.7913E+03 4.7966E+03 2.5230E+03 2.0739E+03 - 2.5119E-01 3.8542E+03 3.8721E+03 2.0571E+03 1.6902E+03 - 2.8184E-01 3.0754E+03 3.0886E+03 1.6726E+03 1.3606E+03 - 3.1623E-01 2.4425E+03 2.4580E+03 1.3384E+03 1.0737E+03 - 3.5481E-01 1.9239E+03 1.9341E+03 1.0593E+03 8.4327E+02 - 3.9811E-01 1.4997E+03 1.5029E+03 8.3308E+02 6.6501E+02 - 4.4668E-01 1.1630E+03 1.1655E+03 6.4935E+02 5.1696E+02 - 5.0119E-01 8.9479E+02 8.9528E+02 5.0287E+02 3.9685E+02 - 5.6234E-01 6.8848E+02 6.8466E+02 3.8564E+02 3.0204E+02 - 6.3096E-01 5.2525E+02 5.1879E+02 2.9214E+02 2.2929E+02 - 7.0795E-01 3.9742E+02 3.9130E+02 2.2137E+02 1.7419E+02 - 7.9433E-01 3.0196E+02 2.9398E+02 1.6573E+02 1.3100E+02 - 8.9125E-01 2.2768E+02 2.2162E+02 1.2474E+02 9.7960E+01 - 1.0000E+00 1.7057E+02 1.6535E+02 9.3144E+01 7.2657E+01 - 1.1220E+00 1.2721E+02 1.2371E+02 6.8277E+01 5.3650E+01 - 1.2589E+00 9.5027E+01 9.1618E+01 5.0187E+01 3.9355E+01 - 1.4125E+00 7.0893E+01 6.7136E+01 3.6984E+01 2.8582E+01 - 1.5849E+00 5.2951E+01 4.9475E+01 2.7060E+01 2.0506E+01 - 1.7783E+00 3.9519E+01 3.6489E+01 1.9478E+01 1.4799E+01 - 1.9953E+00 2.8981E+01 2.6805E+01 1.3938E+01 1.0739E+01 - 2.2387E+00 2.1011E+01 1.9632E+01 1.0032E+01 7.6498E+00 - 2.5119E+00 1.5213E+01 1.4057E+01 7.2803E+00 5.5315E+00 - 2.8184E+00 1.1210E+01 9.9782E+00 5.1852E+00 3.9170E+00 - 3.1623E+00 8.1946E+00 7.2599E+00 3.5774E+00 2.6854E+00 - 3.5481E+00 5.9302E+00 5.1925E+00 2.4981E+00 1.8854E+00 - 3.9811E+00 4.3026E+00 3.7441E+00 1.7363E+00 1.3226E+00 - 4.4668E+00 3.1161E+00 2.6885E+00 1.2024E+00 9.1907E-01 - 5.0119E+00 2.2245E+00 1.9082E+00 8.4044E-01 6.3734E-01 - 5.6234E+00 1.6016E+00 1.3659E+00 5.7577E-01 4.4638E-01 - 6.3096E+00 1.1652E+00 9.7984E-01 3.8671E-01 3.0106E-01 - 7.0795E+00 8.2486E-01 6.8390E-01 2.6590E-01 1.9780E-01 - 7.9433E+00 5.9458E-01 4.8670E-01 1.8454E-01 1.3481E-01 - 8.9125E+00 4.2728E-01 3.5000E-01 1.2465E-01 9.0288E-02 - 1.0000E+01 3.0084E-01 2.4363E-01 8.2635E-02 6.2420E-02 - 1.1220E+01 2.1376E-01 1.7180E-01 5.5597E-02 4.1602E-02 - 1.2589E+01 1.5259E-01 1.2071E-01 3.7511E-02 2.7752E-02 - 1.4125E+01 1.0888E-01 8.6021E-02 2.5362E-02 1.8595E-02 - 1.5849E+01 7.7051E-02 6.1630E-02 1.6443E-02 1.2298E-02 - 1.7783E+01 5.4691E-02 4.3433E-02 1.0626E-02 8.2736E-03 - 1.9953E+01 3.9459E-02 3.0524E-02 7.2972E-03 5.5524E-03 - 2.2387E+01 2.8254E-02 2.1586E-02 4.8323E-03 3.7599E-03 - 2.5119E+01 1.9597E-02 1.5414E-02 3.2019E-03 2.4484E-03 - 2.8184E+01 1.3898E-02 1.1084E-02 2.2519E-03 1.6109E-03 - 3.1623E+01 1.0220E-02 7.7484E-03 1.4495E-03 1.1332E-03 - 3.5481E+01 7.2606E-03 5.4724E-03 9.7534E-04 7.5089E-04 - 3.9811E+01 5.1459E-03 3.8635E-03 6.4826E-04 5.0703E-04 - 4.4668E+01 3.6625E-03 2.7374E-03 4.3028E-04 3.3961E-04 - 5.0119E+01 2.5988E-03 1.9276E-03 2.8645E-04 2.2781E-04 - 5.6234E+01 1.8351E-03 1.3548E-03 1.8931E-04 1.5216E-04 - 6.3096E+01 1.3038E-03 9.5700E-04 1.2754E-04 1.0095E-04 - 7.0795E+01 9.2276E-04 6.7472E-04 8.5074E-05 6.7399E-05 - 7.9433E+01 6.4913E-04 4.7630E-04 5.6152E-05 4.5804E-05 - 8.9125E+01 4.5973E-04 3.3183E-04 3.7901E-05 3.0520E-05 - 1.0000E+02 3.2300E-04 2.3113E-04 2.5288E-05 2.0213E-05 - 1.1220E+02 2.2761E-04 1.6256E-04 1.6862E-05 1.3595E-05 - 1.2589E+02 1.6036E-04 1.1365E-04 1.1347E-05 9.0941E-06 - 1.4125E+02 1.1236E-04 7.9059E-05 7.5573E-06 6.1910E-06 - 1.5849E+02 7.9041E-05 5.5253E-05 5.0865E-06 4.1215E-06 - 1.7783E+02 5.5748E-05 3.8342E-05 3.3728E-06 2.7644E-06 - 1.9953E+02 3.8844E-05 2.6641E-05 2.2271E-06 1.8708E-06 - 2.2387E+02 2.7205E-05 1.8569E-05 1.5064E-06 1.2332E-06 - 2.5119E+02 1.9006E-05 1.2887E-05 1.0193E-06 8.3934E-07 - 2.8184E+02 1.3190E-05 8.8930E-06 7.0574E-07 5.7431E-07 - 3.1623E+02 9.3104E-06 6.1723E-06 4.8774E-07 3.8517E-07 - 3.5481E+02 6.5056E-06 4.2706E-06 3.2662E-07 2.5778E-07 - 3.9811E+02 4.5252E-06 2.9776E-06 2.2111E-07 1.7566E-07 - 4.4668E+02 3.1449E-06 2.0515E-06 1.5071E-07 1.2105E-07 - 5.0119E+02 2.1970E-06 1.4153E-06 1.0211E-07 8.2051E-08 - 5.6234E+02 1.5281E-06 9.8271E-07 6.7718E-08 5.3756E-08 - 6.3096E+02 1.0551E-06 6.7390E-07 4.6056E-08 3.5501E-08 - 7.0795E+02 7.3217E-07 4.6587E-07 3.1099E-08 2.4048E-08 - 7.9433E+02 5.0682E-07 3.2030E-07 2.0871E-08 1.6543E-08 - 8.9125E+02 3.5190E-07 2.1734E-07 1.4061E-08 1.1068E-08 - 1.0000E+03 2.4312E-07 1.4970E-07 9.3720E-09 7.3396E-09 - 1.1220E+03 1.6543E-07 1.0190E-07 6.3170E-09 5.0655E-09 - 1.2589E+03 1.1366E-07 6.9649E-08 4.2815E-09 3.4284E-09 - 1.4125E+03 7.7507E-08 4.7438E-08 2.8008E-09 2.1577E-09 - 1.5849E+03 5.2878E-08 3.2152E-08 1.9120E-09 1.3047E-09 - 1.7783E+03 3.6215E-08 2.1566E-08 1.3348E-09 9.1249E-10 - 1.9953E+03 2.4577E-08 1.4813E-08 8.9447E-10 6.3413E-10 - 2.2387E+03 1.6734E-08 9.9673E-09 5.8666E-10 4.3260E-10 - 2.5119E+03 1.1355E-08 6.5959E-09 3.8009E-10 2.8232E-10 - 2.8184E+03 7.6807E-09 4.4771E-09 2.4975E-10 1.8381E-10 - 3.1623E+03 5.2699E-09 3.0632E-09 1.6106E-10 1.2199E-10 - 3.5481E+03 3.4725E-09 1.9907E-09 1.0892E-10 8.2580E-11 - 3.9811E+03 2.3338E-09 1.3313E-09 7.5162E-11 5.2330E-11 - 4.4668E+03 1.5487E-09 8.8953E-10 5.0349E-11 3.3961E-11 - 5.0119E+03 1.0260E-09 5.9818E-10 3.2485E-11 2.2544E-11 - 5.6234E+03 6.9052E-10 3.9818E-10 2.0422E-11 1.3956E-11 - 6.3096E+03 4.6104E-10 2.6206E-10 1.3270E-11 9.8748E-12 - 7.0795E+03 3.0456E-10 1.7294E-10 9.0279E-12 6.5709E-12 - 7.9433E+03 2.0349E-10 1.1283E-10 5.9246E-12 4.1950E-12 - 8.9125E+03 1.3545E-10 7.4543E-11 3.7976E-12 2.7895E-12 - 1.0000E+04 8.8564E-11 4.8759E-11 2.5063E-12 1.9250E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5570E+04 1.5686E+04 7.7358E+03 6.9930E+03 - 1.1220E-01 1.3467E+04 1.3549E+04 6.7347E+03 6.0481E+03 - 1.2589E-01 1.1598E+04 1.1588E+04 5.8323E+03 5.1916E+03 - 1.4125E-01 9.9042E+03 9.8130E+03 4.9655E+03 4.4221E+03 - 1.5849E-01 8.3743E+03 8.2558E+03 4.1816E+03 3.6873E+03 - 1.7783E-01 7.0142E+03 6.8922E+03 3.5123E+03 3.0720E+03 - 1.9953E-01 5.7871E+03 5.7126E+03 2.9383E+03 2.5523E+03 - 2.2387E-01 4.6967E+03 4.6740E+03 2.4370E+03 2.0827E+03 - 2.5119E-01 3.7919E+03 3.7679E+03 1.9937E+03 1.6817E+03 - 2.8184E-01 3.0453E+03 3.0067E+03 1.6125E+03 1.3478E+03 - 3.1623E-01 2.4166E+03 2.3936E+03 1.2852E+03 1.0746E+03 - 3.5481E-01 1.8950E+03 1.8856E+03 1.0185E+03 8.4432E+02 - 3.9811E-01 1.4818E+03 1.4690E+03 8.0314E+02 6.5950E+02 - 4.4668E-01 1.1460E+03 1.1391E+03 6.2518E+02 5.1213E+02 - 5.0119E-01 8.7908E+02 8.7372E+02 4.8059E+02 3.9616E+02 - 5.6234E-01 6.8037E+02 6.6605E+02 3.7007E+02 3.0348E+02 - 6.3096E-01 5.2429E+02 5.0787E+02 2.8139E+02 2.2856E+02 - 7.0795E-01 3.9744E+02 3.8546E+02 2.1654E+02 1.7209E+02 - 7.9433E-01 2.9827E+02 2.8949E+02 1.6621E+02 1.2942E+02 - 8.9125E-01 2.2601E+02 2.1992E+02 1.2280E+02 9.7008E+01 - 1.0000E+00 1.6904E+02 1.6434E+02 9.0672E+01 7.2997E+01 - 1.1220E+00 1.2654E+02 1.2204E+02 6.7419E+01 5.3090E+01 - 1.2589E+00 9.4842E+01 9.0315E+01 4.9218E+01 3.8993E+01 - 1.4125E+00 7.1188E+01 6.7053E+01 3.6148E+01 2.8922E+01 - 1.5849E+00 5.3167E+01 4.9426E+01 2.6581E+01 2.1055E+01 - 1.7783E+00 3.9074E+01 3.6038E+01 1.9234E+01 1.5047E+01 - 1.9953E+00 2.8609E+01 2.6435E+01 1.3928E+01 1.0617E+01 - 2.2387E+00 2.1134E+01 1.9346E+01 1.0109E+01 7.6666E+00 - 2.5119E+00 1.5425E+01 1.3924E+01 7.2463E+00 5.4176E+00 - 2.8184E+00 1.1133E+01 1.0072E+01 5.0814E+00 3.8186E+00 - 3.1623E+00 8.1639E+00 7.2164E+00 3.5547E+00 2.7143E+00 - 3.5481E+00 5.8711E+00 5.2004E+00 2.5159E+00 1.9022E+00 - 3.9811E+00 4.2457E+00 3.7420E+00 1.7749E+00 1.3140E+00 - 4.4668E+00 3.0799E+00 2.6721E+00 1.2156E+00 9.1769E-01 - 5.0119E+00 2.2096E+00 1.9136E+00 8.1545E-01 6.2808E-01 - 5.6234E+00 1.5865E+00 1.3611E+00 5.6028E-01 4.2775E-01 - 6.3096E+00 1.1375E+00 9.6043E-01 3.9202E-01 2.8303E-01 - 7.0795E+00 8.1586E-01 6.7858E-01 2.6564E-01 1.9240E-01 - 7.9433E+00 5.8008E-01 4.8319E-01 1.8128E-01 1.3456E-01 - 8.9125E+00 4.1246E-01 3.4746E-01 1.2308E-01 9.0679E-02 - 1.0000E+01 2.9952E-01 2.4512E-01 8.1795E-02 6.1771E-02 - 1.1220E+01 2.1539E-01 1.7279E-01 5.4992E-02 4.1108E-02 - 1.2589E+01 1.5428E-01 1.2201E-01 3.7308E-02 2.8300E-02 - 1.4125E+01 1.0944E-01 8.6838E-02 2.5079E-02 1.8880E-02 - 1.5849E+01 7.7516E-02 6.1652E-02 1.6671E-02 1.2523E-02 - 1.7783E+01 5.5512E-02 4.3349E-02 1.1048E-02 8.5758E-03 - 1.9953E+01 3.9634E-02 3.0958E-02 7.3206E-03 5.8369E-03 - 2.2387E+01 2.8022E-02 2.2281E-02 5.0237E-03 3.8942E-03 - 2.5119E+01 2.0170E-02 1.5499E-02 3.2515E-03 2.4920E-03 - 2.8184E+01 1.4525E-02 1.0909E-02 2.2157E-03 1.6171E-03 - 3.1623E+01 1.0215E-02 7.7456E-03 1.4577E-03 1.1310E-03 - 3.5481E+01 7.2405E-03 5.4560E-03 9.6940E-04 7.5211E-04 - 3.9811E+01 5.1414E-03 3.8569E-03 6.4642E-04 4.9863E-04 - 4.4668E+01 3.6696E-03 2.7353E-03 4.2961E-04 3.3423E-04 - 5.0119E+01 2.6070E-03 1.9312E-03 2.8424E-04 2.2173E-04 - 5.6234E+01 1.8436E-03 1.3531E-03 1.9087E-04 1.4833E-04 - 6.3096E+01 1.3000E-03 9.4883E-04 1.2600E-04 1.0036E-04 - 7.0795E+01 9.2271E-04 6.7059E-04 8.2812E-05 6.7042E-05 - 7.9433E+01 6.5561E-04 4.7085E-04 5.4754E-05 4.4336E-05 - 8.9125E+01 4.6235E-04 3.2996E-04 3.6192E-05 2.9984E-05 - 1.0000E+02 3.2421E-04 2.3111E-04 2.5142E-05 2.0348E-05 - 1.1220E+02 2.2769E-04 1.6171E-04 1.6799E-05 1.3663E-05 - 1.2589E+02 1.5978E-04 1.1287E-04 1.1204E-05 9.2587E-06 - 1.4125E+02 1.1243E-04 7.8871E-05 7.5291E-06 6.2993E-06 - 1.5849E+02 7.9274E-05 5.4857E-05 5.0836E-06 4.1861E-06 - 1.7783E+02 5.5665E-05 3.8394E-05 3.3670E-06 2.8232E-06 - 1.9953E+02 3.8696E-05 2.6658E-05 2.3019E-06 1.9286E-06 - 2.2387E+02 2.7060E-05 1.8523E-05 1.6099E-06 1.2441E-06 - 2.5119E+02 1.9003E-05 1.2975E-05 1.0546E-06 8.6029E-07 - 2.8184E+02 1.3148E-05 8.9539E-06 7.0270E-07 5.9620E-07 - 3.1623E+02 9.2773E-06 6.1657E-06 4.7990E-07 3.8914E-07 - 3.5481E+02 6.4646E-06 4.2880E-06 3.1791E-07 2.6341E-07 - 3.9811E+02 4.5022E-06 2.9732E-06 2.1417E-07 1.7438E-07 - 4.4668E+02 3.1379E-06 2.0424E-06 1.4591E-07 1.1858E-07 - 5.0119E+02 2.1785E-06 1.4037E-06 9.7585E-08 7.9877E-08 - 5.6234E+02 1.5176E-06 9.8107E-07 6.7132E-08 5.4314E-08 - 6.3096E+02 1.0500E-06 6.7312E-07 4.6132E-08 3.6664E-08 - 7.0795E+02 7.2827E-07 4.6221E-07 3.1522E-08 2.4871E-08 - 7.9433E+02 5.0466E-07 3.1695E-07 2.0867E-08 1.6351E-08 - 8.9125E+02 3.5013E-07 2.1788E-07 1.3592E-08 1.0812E-08 - 1.0000E+03 2.4361E-07 1.4997E-07 9.3467E-09 7.5933E-09 - 1.1220E+03 1.6657E-07 1.0171E-07 6.5262E-09 5.1845E-09 - 1.2589E+03 1.1433E-07 6.9101E-08 4.2543E-09 3.3482E-09 - 1.4125E+03 7.8219E-08 4.6842E-08 2.8140E-09 2.1258E-09 - 1.5849E+03 5.2992E-08 3.1810E-08 1.8489E-09 1.4093E-09 - 1.7783E+03 3.5807E-08 2.1360E-08 1.2671E-09 9.5351E-10 - 1.9953E+03 2.4661E-08 1.4662E-08 8.2140E-10 6.4273E-10 - 2.2387E+03 1.6825E-08 1.0049E-08 5.5734E-10 4.3988E-10 - 2.5119E+03 1.1339E-08 6.6568E-09 3.7810E-10 2.8724E-10 - 2.8184E+03 7.5749E-09 4.4009E-09 2.4529E-10 1.9528E-10 - 3.1623E+03 5.2367E-09 3.0456E-09 1.6545E-10 1.2467E-10 - 3.5481E+03 3.4650E-09 2.0078E-09 1.1003E-10 7.9394E-11 - 3.9811E+03 2.3210E-09 1.3461E-09 7.1663E-11 5.0134E-11 - 4.4668E+03 1.5489E-09 8.9222E-10 4.7913E-11 3.3738E-11 - 5.0119E+03 1.0445E-09 5.8932E-10 3.2632E-11 2.4264E-11 - 5.6234E+03 7.0086E-10 3.9204E-10 2.1319E-11 1.4814E-11 - 6.3096E+03 4.6035E-10 2.6075E-10 1.4285E-11 9.4160E-12 - 7.0795E+03 3.0587E-10 1.7106E-10 9.0063E-12 6.0201E-12 - 7.9433E+03 2.0421E-10 1.1344E-10 5.9240E-12 4.1934E-12 - 8.9125E+03 1.3387E-10 7.5223E-11 3.6461E-12 2.5995E-12 - 1.0000E+04 8.8632E-11 4.9241E-11 2.3877E-12 1.5365E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5538E+04 1.5473E+04 7.5962E+03 7.0339E+03 - 1.1220E-01 1.3421E+04 1.3339E+04 6.6225E+03 6.0971E+03 - 1.2589E-01 1.1565E+04 1.1433E+04 5.6991E+03 5.2266E+03 - 1.4125E-01 9.8600E+03 9.7143E+03 4.8696E+03 4.4149E+03 - 1.5849E-01 8.3447E+03 8.1704E+03 4.1177E+03 3.7076E+03 - 1.7783E-01 6.9761E+03 6.7980E+03 3.4339E+03 3.0766E+03 - 1.9953E-01 5.7450E+03 5.5878E+03 2.8509E+03 2.5387E+03 - 2.2387E-01 4.6884E+03 4.5665E+03 2.3629E+03 2.0802E+03 - 2.5119E-01 3.7882E+03 3.6887E+03 1.9441E+03 1.6933E+03 - 2.8184E-01 3.0193E+03 2.9284E+03 1.5762E+03 1.3588E+03 - 3.1623E-01 2.3973E+03 2.3260E+03 1.2630E+03 1.0817E+03 - 3.5481E-01 1.8956E+03 1.8403E+03 1.0018E+03 8.6006E+02 - 3.9811E-01 1.4863E+03 1.4361E+03 7.8549E+02 6.6925E+02 - 4.4668E-01 1.1621E+03 1.1136E+03 6.0936E+02 5.1084E+02 - 5.0119E-01 8.9359E+02 8.6092E+02 4.7437E+02 3.9162E+02 - 5.6234E-01 6.8128E+02 6.6054E+02 3.7011E+02 3.0185E+02 - 6.3096E-01 5.1914E+02 5.0391E+02 2.8353E+02 2.3110E+02 - 7.0795E-01 3.9514E+02 3.8143E+02 2.1397E+02 1.7264E+02 - 7.9433E-01 2.9742E+02 2.8427E+02 1.6030E+02 1.2988E+02 - 8.9125E-01 2.2345E+02 2.1446E+02 1.2013E+02 9.6357E+01 - 1.0000E+00 1.6840E+02 1.6171E+02 9.0538E+01 7.1196E+01 - 1.1220E+00 1.2633E+02 1.2030E+02 6.7427E+01 5.2347E+01 - 1.2589E+00 9.4322E+01 8.9406E+01 4.9524E+01 3.8716E+01 - 1.4125E+00 7.0554E+01 6.6210E+01 3.6065E+01 2.8613E+01 - 1.5849E+00 5.2434E+01 4.9101E+01 2.6398E+01 2.0776E+01 - 1.7783E+00 3.8846E+01 3.6375E+01 1.9245E+01 1.4861E+01 - 1.9953E+00 2.8731E+01 2.6460E+01 1.3816E+01 1.0599E+01 - 2.2387E+00 2.0876E+01 1.9026E+01 9.8751E+00 7.6029E+00 - 2.5119E+00 1.5274E+01 1.3840E+01 7.1075E+00 5.5052E+00 - 2.8184E+00 1.1261E+01 1.0046E+01 5.1233E+00 3.8525E+00 - 3.1623E+00 8.1152E+00 7.1976E+00 3.5715E+00 2.6951E+00 - 3.5481E+00 5.9245E+00 5.1942E+00 2.4859E+00 1.8774E+00 - 3.9811E+00 4.2769E+00 3.7104E+00 1.7279E+00 1.3031E+00 - 4.4668E+00 3.0862E+00 2.6596E+00 1.1867E+00 8.9615E-01 - 5.0119E+00 2.2277E+00 1.9007E+00 8.3282E-01 6.2013E-01 - 5.6234E+00 1.5993E+00 1.3490E+00 5.8163E-01 4.2939E-01 - 6.3096E+00 1.1390E+00 9.5258E-01 3.9334E-01 2.9111E-01 - 7.0795E+00 8.1391E-01 6.7890E-01 2.6179E-01 1.9659E-01 - 7.9433E+00 5.7857E-01 4.9265E-01 1.7456E-01 1.3278E-01 - 8.9125E+00 4.1448E-01 3.4623E-01 1.1825E-01 8.9016E-02 - 1.0000E+01 3.0060E-01 2.4560E-01 8.1843E-02 6.1495E-02 - 1.1220E+01 2.1516E-01 1.7406E-01 5.5183E-02 4.1474E-02 - 1.2589E+01 1.5404E-01 1.2386E-01 3.7303E-02 2.7938E-02 - 1.4125E+01 1.0968E-01 8.7776E-02 2.5301E-02 1.9116E-02 - 1.5849E+01 7.7794E-02 6.2250E-02 1.6661E-02 1.2894E-02 - 1.7783E+01 5.5673E-02 4.4391E-02 1.1153E-02 8.5603E-03 - 1.9953E+01 3.9231E-02 3.1436E-02 7.6068E-03 5.7713E-03 - 2.2387E+01 2.7894E-02 2.2620E-02 4.9125E-03 3.7978E-03 - 2.5119E+01 2.0319E-02 1.5974E-02 3.3082E-03 2.5461E-03 - 2.8184E+01 1.4624E-02 1.0978E-02 2.2208E-03 1.7164E-03 - 3.1623E+01 1.0206E-02 7.7730E-03 1.4598E-03 1.1241E-03 - 3.5481E+01 7.2657E-03 5.4780E-03 9.6886E-04 7.5310E-04 - 3.9811E+01 5.1668E-03 3.8710E-03 6.4570E-04 5.0789E-04 - 4.4668E+01 3.6663E-03 2.7384E-03 4.3086E-04 3.3863E-04 - 5.0119E+01 2.6014E-03 1.9176E-03 2.8853E-04 2.2782E-04 - 5.6234E+01 1.8448E-03 1.3497E-03 1.9173E-04 1.5408E-04 - 6.3096E+01 1.2973E-03 9.5412E-04 1.2560E-04 1.0051E-04 - 7.0795E+01 9.1763E-04 6.7200E-04 8.2794E-05 6.7094E-05 - 7.9433E+01 6.4894E-04 4.7393E-04 5.5759E-05 4.5354E-05 - 8.9125E+01 4.5803E-04 3.3244E-04 3.7983E-05 3.0087E-05 - 1.0000E+02 3.2312E-04 2.3145E-04 2.5057E-05 2.0304E-05 - 1.1220E+02 2.2790E-04 1.6151E-04 1.6757E-05 1.3630E-05 - 1.2589E+02 1.6121E-04 1.1287E-04 1.1210E-05 9.2091E-06 - 1.4125E+02 1.1298E-04 7.9059E-05 7.5425E-06 6.2268E-06 - 1.5849E+02 7.8815E-05 5.5044E-05 5.0545E-06 4.2112E-06 - 1.7783E+02 5.5190E-05 3.8343E-05 3.4543E-06 2.7975E-06 - 1.9953E+02 3.8789E-05 2.6641E-05 2.2781E-06 1.8775E-06 - 2.2387E+02 2.7287E-05 1.8458E-05 1.5136E-06 1.2658E-06 - 2.5119E+02 1.9090E-05 1.2756E-05 1.0357E-06 8.4559E-07 - 2.8184E+02 1.3244E-05 8.8781E-06 7.1874E-07 5.6952E-07 - 3.1623E+02 9.2658E-06 6.1687E-06 4.8041E-07 3.8661E-07 - 3.5481E+02 6.4470E-06 4.2740E-06 3.1884E-07 2.6233E-07 - 3.9811E+02 4.5108E-06 2.9543E-06 2.1381E-07 1.7827E-07 - 4.4668E+02 3.1299E-06 2.0427E-06 1.4850E-07 1.1836E-07 - 5.0119E+02 2.1672E-06 1.4125E-06 1.0113E-07 7.9294E-08 - 5.6234E+02 1.5175E-06 9.7803E-07 6.8550E-08 5.3358E-08 - 6.3096E+02 1.0518E-06 6.7083E-07 4.6770E-08 3.6471E-08 - 7.0795E+02 7.3124E-07 4.6403E-07 3.1190E-08 2.4931E-08 - 7.9433E+02 5.0684E-07 3.2010E-07 2.0807E-08 1.6473E-08 - 8.9125E+02 3.5007E-07 2.2023E-07 1.3841E-08 1.0785E-08 - 1.0000E+03 2.4236E-07 1.5058E-07 9.2982E-09 7.4277E-09 - 1.1220E+03 1.6489E-07 1.0186E-07 6.2567E-09 4.9631E-09 - 1.2589E+03 1.1303E-07 6.9385E-08 4.3062E-09 3.3264E-09 - 1.4125E+03 7.7924E-08 4.6938E-08 2.8876E-09 2.2292E-09 - 1.5849E+03 5.3751E-08 3.1885E-08 1.9872E-09 1.4788E-09 - 1.7783E+03 3.6588E-08 2.1738E-08 1.3459E-09 1.0158E-09 - 1.9953E+03 2.4538E-08 1.4807E-08 8.6144E-10 6.2815E-10 - 2.2387E+03 1.6636E-08 9.9862E-09 5.8390E-10 4.2361E-10 - 2.5119E+03 1.1293E-08 6.7490E-09 4.0670E-10 2.8737E-10 - 2.8184E+03 7.6890E-09 4.5204E-09 2.6125E-10 1.9075E-10 - 3.1623E+03 5.2637E-09 3.0706E-09 1.6648E-10 1.2178E-10 - 3.5481E+03 3.4683E-09 1.9930E-09 1.0871E-10 7.9647E-11 - 3.9811E+03 2.3183E-09 1.3293E-09 7.0366E-11 5.2289E-11 - 4.4668E+03 1.5523E-09 9.0022E-10 4.7944E-11 3.6141E-11 - 5.0119E+03 1.0430E-09 6.0025E-10 3.2110E-11 2.5005E-11 - 5.6234E+03 6.8907E-10 3.9754E-10 2.0297E-11 1.6428E-11 - 6.3096E+03 4.6399E-10 2.6069E-10 1.3342E-11 1.0012E-11 - 7.0795E+03 3.0502E-10 1.7245E-10 9.0771E-12 6.7044E-12 - 7.9433E+03 2.0016E-10 1.1313E-10 5.8617E-12 4.3271E-12 - 8.9125E+03 1.3353E-10 7.3853E-11 3.6587E-12 2.7297E-12 - 1.0000E+04 8.9942E-11 4.8764E-11 2.4704E-12 1.7066E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5663E+04 1.5484E+04 7.6080E+03 7.0551E+03 - 1.1220E-01 1.3537E+04 1.3362E+04 6.6369E+03 6.0992E+03 - 1.2589E-01 1.1588E+04 1.1427E+04 5.7076E+03 5.2583E+03 - 1.4125E-01 9.8718E+03 9.6977E+03 4.8410E+03 4.4612E+03 - 1.5849E-01 8.3795E+03 8.1792E+03 4.0971E+03 3.7362E+03 - 1.7783E-01 7.0067E+03 6.8120E+03 3.4426E+03 3.1303E+03 - 1.9953E-01 5.7786E+03 5.6133E+03 2.8657E+03 2.5872E+03 - 2.2387E-01 4.7278E+03 4.5718E+03 2.3689E+03 2.1119E+03 - 2.5119E-01 3.8145E+03 3.6773E+03 1.9264E+03 1.7096E+03 - 2.8184E-01 3.0434E+03 2.9528E+03 1.5564E+03 1.3766E+03 - 3.1623E-01 2.4091E+03 2.3325E+03 1.2537E+03 1.0935E+03 - 3.5481E-01 1.9017E+03 1.8264E+03 9.9228E+02 8.6253E+02 - 3.9811E-01 1.4959E+03 1.4400E+03 7.7376E+02 6.7358E+02 - 4.4668E-01 1.1581E+03 1.1143E+03 6.1001E+02 5.2028E+02 - 5.0119E-01 8.9341E+02 8.5387E+02 4.7718E+02 4.0202E+02 - 5.6234E-01 6.8845E+02 6.5779E+02 3.6705E+02 3.0703E+02 - 6.3096E-01 5.2004E+02 5.0172E+02 2.7977E+02 2.3241E+02 - 7.0795E-01 3.9602E+02 3.7887E+02 2.1233E+02 1.7400E+02 - 7.9433E-01 3.0060E+02 2.8547E+02 1.6046E+02 1.3025E+02 - 8.9125E-01 2.2446E+02 2.1388E+02 1.2206E+02 9.6619E+01 - 1.0000E+00 1.6899E+02 1.6157E+02 9.0140E+01 7.2104E+01 - 1.1220E+00 1.2732E+02 1.2069E+02 6.6676E+01 5.3395E+01 - 1.2589E+00 9.5040E+01 8.9868E+01 4.9509E+01 3.9141E+01 - 1.4125E+00 7.0779E+01 6.6625E+01 3.6188E+01 2.8544E+01 - 1.5849E+00 5.2928E+01 4.8894E+01 2.6421E+01 2.0590E+01 - 1.7783E+00 3.9257E+01 3.5819E+01 1.9127E+01 1.4972E+01 - 1.9953E+00 2.8614E+01 2.6292E+01 1.3802E+01 1.0742E+01 - 2.2387E+00 2.0863E+01 1.9182E+01 1.0035E+01 7.6749E+00 - 2.5119E+00 1.5262E+01 1.3836E+01 7.2086E+00 5.5055E+00 - 2.8184E+00 1.1060E+01 1.0090E+01 5.0868E+00 3.8861E+00 - 3.1623E+00 8.0837E+00 7.2391E+00 3.5606E+00 2.7070E+00 - 3.5481E+00 5.8712E+00 5.1688E+00 2.4957E+00 1.8993E+00 - 3.9811E+00 4.2654E+00 3.7285E+00 1.7375E+00 1.2998E+00 - 4.4668E+00 3.0781E+00 2.6695E+00 1.2046E+00 9.0144E-01 - 5.0119E+00 2.2278E+00 1.9013E+00 8.4225E-01 6.2232E-01 - 5.6234E+00 1.5920E+00 1.3700E+00 5.7893E-01 4.2455E-01 - 6.3096E+00 1.1445E+00 9.6993E-01 3.8992E-01 2.9036E-01 - 7.0795E+00 8.2209E-01 6.8567E-01 2.6717E-01 1.9619E-01 - 7.9433E+00 5.8779E-01 4.9160E-01 1.8015E-01 1.3162E-01 - 8.9125E+00 4.2031E-01 3.4829E-01 1.2465E-01 9.1065E-02 - 1.0000E+01 3.0109E-01 2.4747E-01 8.3902E-02 6.2877E-02 - 1.1220E+01 2.1624E-01 1.7504E-01 5.5977E-02 4.2022E-02 - 1.2589E+01 1.5259E-01 1.2371E-01 3.7388E-02 2.8199E-02 - 1.4125E+01 1.0911E-01 8.7187E-02 2.5325E-02 1.8868E-02 - 1.5849E+01 7.8790E-02 6.1734E-02 1.6923E-02 1.2596E-02 - 1.7783E+01 5.6476E-02 4.4204E-02 1.1075E-02 8.5071E-03 - 1.9953E+01 4.0702E-02 3.1197E-02 7.3338E-03 5.7753E-03 - 2.2387E+01 2.8564E-02 2.2254E-02 4.8749E-03 3.8348E-03 - 2.5119E+01 1.9928E-02 1.5829E-02 3.1833E-03 2.5013E-03 - 2.8184E+01 1.4401E-02 1.1121E-02 2.1029E-03 1.5697E-03 - 3.1623E+01 1.0187E-02 7.7369E-03 1.4551E-03 1.1375E-03 - 3.5481E+01 7.2668E-03 5.4609E-03 9.7008E-04 7.5617E-04 - 3.9811E+01 5.1565E-03 3.8523E-03 6.4957E-04 4.9638E-04 - 4.4668E+01 3.6490E-03 2.7173E-03 4.3204E-04 3.3274E-04 - 5.0119E+01 2.5942E-03 1.9166E-03 2.8669E-04 2.2332E-04 - 5.6234E+01 1.8422E-03 1.3472E-03 1.9172E-04 1.4768E-04 - 6.3096E+01 1.3044E-03 9.5041E-04 1.2813E-04 9.9104E-05 - 7.0795E+01 9.2505E-04 6.6989E-04 8.4999E-05 6.7780E-05 - 7.9433E+01 6.5117E-04 4.6827E-04 5.6607E-05 4.5529E-05 - 8.9125E+01 4.6017E-04 3.2968E-04 3.7514E-05 2.9871E-05 - 1.0000E+02 3.2411E-04 2.3084E-04 2.5182E-05 2.0113E-05 - 1.1220E+02 2.2822E-04 1.6125E-04 1.7017E-05 1.3737E-05 - 1.2589E+02 1.6020E-04 1.1287E-04 1.1361E-05 9.2167E-06 - 1.4125E+02 1.1246E-04 7.9058E-05 7.5202E-06 6.1650E-06 - 1.5849E+02 7.9021E-05 5.5247E-05 5.0423E-06 4.1398E-06 - 1.7783E+02 5.5380E-05 3.8445E-05 3.4406E-06 2.7888E-06 - 1.9953E+02 3.8704E-05 2.6744E-05 2.3325E-06 1.9114E-06 - 2.2387E+02 2.7069E-05 1.8602E-05 1.5714E-06 1.2559E-06 - 2.5119E+02 1.9097E-05 1.2819E-05 1.0394E-06 8.4892E-07 - 2.8184E+02 1.3217E-05 8.8855E-06 6.9825E-07 5.7283E-07 - 3.1623E+02 9.2565E-06 6.1906E-06 4.8205E-07 3.8994E-07 - 3.5481E+02 6.4648E-06 4.2677E-06 3.3149E-07 2.6738E-07 - 3.9811E+02 4.5094E-06 2.9616E-06 2.2192E-07 1.7936E-07 - 4.4668E+02 3.1314E-06 2.0494E-06 1.4728E-07 1.1940E-07 - 5.0119E+02 2.1825E-06 1.4158E-06 1.0016E-07 7.8812E-08 - 5.6234E+02 1.5228E-06 9.8130E-07 6.7474E-08 5.2917E-08 - 6.3096E+02 1.0523E-06 6.7364E-07 4.5916E-08 3.6315E-08 - 7.0795E+02 7.2859E-07 4.6476E-07 3.0950E-08 2.4553E-08 - 7.9433E+02 5.0296E-07 3.1944E-07 2.0961E-08 1.6204E-08 - 8.9125E+02 3.4866E-07 2.1870E-07 1.4074E-08 1.0810E-08 - 1.0000E+03 2.4259E-07 1.5069E-07 9.7455E-09 7.3851E-09 - 1.1220E+03 1.6618E-07 1.0227E-07 6.5528E-09 4.8526E-09 - 1.2589E+03 1.1361E-07 6.9516E-08 4.3101E-09 3.0970E-09 - 1.4125E+03 7.6918E-08 4.7123E-08 2.8621E-09 2.1517E-09 - 1.5849E+03 5.2759E-08 3.2135E-08 1.8794E-09 1.4993E-09 - 1.7783E+03 3.6373E-08 2.1939E-08 1.1928E-09 9.0509E-10 - 1.9953E+03 2.4695E-08 1.4656E-08 8.1255E-10 6.2328E-10 - 2.2387E+03 1.6662E-08 9.7394E-09 5.7077E-10 4.2741E-10 - 2.5119E+03 1.1264E-08 6.5141E-09 3.7166E-10 2.7863E-10 - 2.8184E+03 7.5542E-09 4.4468E-09 2.4479E-10 1.8887E-10 - 3.1623E+03 5.2378E-09 3.0891E-09 1.6278E-10 1.2803E-10 - 3.5481E+03 3.4376E-09 2.0164E-09 1.0661E-10 8.5054E-11 - 3.9811E+03 2.3029E-09 1.3412E-09 7.0627E-11 5.2877E-11 - 4.4668E+03 1.5464E-09 8.9241E-10 4.8564E-11 3.5605E-11 - 5.0119E+03 1.0401E-09 5.9239E-10 3.0774E-11 2.3988E-11 - 5.6234E+03 6.9283E-10 3.9468E-10 1.9872E-11 1.5849E-11 - 6.3096E+03 4.6081E-10 2.6100E-10 1.3664E-11 9.2655E-12 - 7.0795E+03 3.0831E-10 1.7214E-10 9.5369E-12 6.1531E-12 - 7.9433E+03 2.0165E-10 1.1419E-10 5.9860E-12 4.5233E-12 - 8.9125E+03 1.3358E-10 7.4453E-11 3.9207E-12 2.9128E-12 - 1.0000E+04 8.8850E-11 4.9179E-11 2.7194E-12 1.9157E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5801E+04 1.5584E+04 7.6774E+03 7.0952E+03 - 1.1220E-01 1.3630E+04 1.3452E+04 6.6962E+03 6.1705E+03 - 1.2589E-01 1.1704E+04 1.1495E+04 5.7553E+03 5.2952E+03 - 1.4125E-01 9.9989E+03 9.7592E+03 4.9092E+03 4.4817E+03 - 1.5849E-01 8.4587E+03 8.2408E+03 4.1694E+03 3.7719E+03 - 1.7783E-01 7.0954E+03 6.9000E+03 3.5078E+03 3.1435E+03 - 1.9953E-01 5.8613E+03 5.6832E+03 2.9140E+03 2.6033E+03 - 2.2387E-01 4.7767E+03 4.6293E+03 2.4060E+03 2.1222E+03 - 2.5119E-01 3.8613E+03 3.7281E+03 1.9641E+03 1.7260E+03 - 2.8184E-01 3.0938E+03 2.9856E+03 1.5939E+03 1.3840E+03 - 3.1623E-01 2.4518E+03 2.3811E+03 1.2865E+03 1.0943E+03 - 3.5481E-01 1.9251E+03 1.8699E+03 1.0195E+03 8.7012E+02 - 3.9811E-01 1.5015E+03 1.4570E+03 7.9722E+02 6.7596E+02 - 4.4668E-01 1.1665E+03 1.1309E+03 6.2127E+02 5.2140E+02 - 5.0119E-01 8.9912E+02 8.7185E+02 4.7999E+02 4.0272E+02 - 5.6234E-01 6.9147E+02 6.6495E+02 3.7104E+02 3.0615E+02 - 6.3096E-01 5.2699E+02 5.0416E+02 2.8525E+02 2.3134E+02 - 7.0795E-01 3.9944E+02 3.8211E+02 2.1568E+02 1.7529E+02 - 7.9433E-01 3.0065E+02 2.8804E+02 1.6241E+02 1.3060E+02 - 8.9125E-01 2.2530E+02 2.1562E+02 1.2112E+02 9.6772E+01 - 1.0000E+00 1.7071E+02 1.6122E+02 9.0305E+01 7.2170E+01 - 1.1220E+00 1.2764E+02 1.2043E+02 6.6334E+01 5.3799E+01 - 1.2589E+00 9.5436E+01 8.9505E+01 4.9098E+01 3.9561E+01 - 1.4125E+00 7.1437E+01 6.5966E+01 3.5979E+01 2.8728E+01 - 1.5849E+00 5.2454E+01 4.8780E+01 2.6347E+01 2.0592E+01 - 1.7783E+00 3.8492E+01 3.5849E+01 1.9082E+01 1.4938E+01 - 1.9953E+00 2.8542E+01 2.6388E+01 1.3754E+01 1.0778E+01 - 2.2387E+00 2.1115E+01 1.9250E+01 1.0038E+01 7.6873E+00 - 2.5119E+00 1.5495E+01 1.3942E+01 7.0623E+00 5.3889E+00 - 2.8184E+00 1.1208E+01 1.0077E+01 5.0330E+00 3.8426E+00 - 3.1623E+00 8.0602E+00 7.2524E+00 3.5572E+00 2.7045E+00 - 3.5481E+00 5.8662E+00 5.1940E+00 2.5033E+00 1.8775E+00 - 3.9811E+00 4.2494E+00 3.7075E+00 1.7472E+00 1.3099E+00 - 4.4668E+00 3.0393E+00 2.6600E+00 1.2046E+00 9.1144E-01 - 5.0119E+00 2.2034E+00 1.8987E+00 8.2459E-01 6.2170E-01 - 5.6234E+00 1.5876E+00 1.3469E+00 5.6352E-01 4.2689E-01 - 6.3096E+00 1.1321E+00 9.6458E-01 3.9310E-01 2.8902E-01 - 7.0795E+00 8.0983E-01 6.8733E-01 2.6611E-01 1.9614E-01 - 7.9433E+00 5.8047E-01 4.8310E-01 1.8211E-01 1.3494E-01 - 8.9125E+00 4.1245E-01 3.4402E-01 1.2751E-01 9.1819E-02 - 1.0000E+01 2.9887E-01 2.4459E-01 8.2335E-02 6.1819E-02 - 1.1220E+01 2.1405E-01 1.7298E-01 5.5002E-02 4.1632E-02 - 1.2589E+01 1.5303E-01 1.2305E-01 3.7118E-02 2.8072E-02 - 1.4125E+01 1.0909E-01 8.6378E-02 2.4793E-02 1.8710E-02 - 1.5849E+01 7.7619E-02 6.1173E-02 1.6566E-02 1.2434E-02 - 1.7783E+01 5.5453E-02 4.3557E-02 1.1180E-02 8.5222E-03 - 1.9953E+01 3.9834E-02 3.1201E-02 7.3802E-03 5.6602E-03 - 2.2387E+01 2.8397E-02 2.2053E-02 4.8703E-03 3.6915E-03 - 2.5119E+01 2.0119E-02 1.5456E-02 3.2859E-03 2.5512E-03 - 2.8184E+01 1.4219E-02 1.1070E-02 2.2132E-03 1.7118E-03 - 3.1623E+01 1.0188E-02 7.7509E-03 1.4536E-03 1.1218E-03 - 3.5481E+01 7.2459E-03 5.4728E-03 9.6969E-04 7.4588E-04 - 3.9811E+01 5.1697E-03 3.8531E-03 6.4672E-04 5.0217E-04 - 4.4668E+01 3.6704E-03 2.7273E-03 4.3013E-04 3.4062E-04 - 5.0119E+01 2.6020E-03 1.9309E-03 2.8633E-04 2.2575E-04 - 5.6234E+01 1.8462E-03 1.3535E-03 1.8787E-04 1.5083E-04 - 6.3096E+01 1.3040E-03 9.5120E-04 1.2460E-04 1.0054E-04 - 7.0795E+01 9.2213E-04 6.6994E-04 8.4709E-05 6.5039E-05 - 7.9433E+01 6.5357E-04 4.7115E-04 5.6165E-05 4.3574E-05 - 8.9125E+01 4.6041E-04 3.3134E-04 3.7600E-05 3.0062E-05 - 1.0000E+02 3.2434E-04 2.3148E-04 2.5066E-05 2.0255E-05 - 1.1220E+02 2.2778E-04 1.6173E-04 1.6778E-05 1.3709E-05 - 1.2589E+02 1.6025E-04 1.1283E-04 1.1321E-05 9.1808E-06 - 1.4125E+02 1.1245E-04 7.9140E-05 7.5685E-06 6.0796E-06 - 1.5849E+02 7.9060E-05 5.5095E-05 5.1052E-06 4.1594E-06 - 1.7783E+02 5.5431E-05 3.8255E-05 3.4424E-06 2.8512E-06 - 1.9953E+02 3.8675E-05 2.6718E-05 2.3264E-06 1.9020E-06 - 2.2387E+02 2.7096E-05 1.8662E-05 1.5666E-06 1.2737E-06 - 2.5119E+02 1.9025E-05 1.3001E-05 1.0644E-06 8.2724E-07 - 2.8184E+02 1.3299E-05 9.0296E-06 7.2459E-07 5.4952E-07 - 3.1623E+02 9.2705E-06 6.1814E-06 4.8609E-07 3.8715E-07 - 3.5481E+02 6.4498E-06 4.2621E-06 3.2340E-07 2.6032E-07 - 3.9811E+02 4.5093E-06 2.9589E-06 2.1839E-07 1.7333E-07 - 4.4668E+02 3.1530E-06 2.0619E-06 1.4671E-07 1.1815E-07 - 5.0119E+02 2.1840E-06 1.4188E-06 1.0108E-07 8.0082E-08 - 5.6234E+02 1.5203E-06 9.7443E-07 6.8772E-08 5.3240E-08 - 6.3096E+02 1.0549E-06 6.7226E-07 4.5004E-08 3.5688E-08 - 7.0795E+02 7.3167E-07 4.6241E-07 2.9823E-08 2.4802E-08 - 7.9433E+02 5.0496E-07 3.1758E-07 2.0579E-08 1.6505E-08 - 8.9125E+02 3.4900E-07 2.1909E-07 1.4092E-08 1.0632E-08 - 1.0000E+03 2.4181E-07 1.4990E-07 9.5587E-09 7.1752E-09 - 1.1220E+03 1.6560E-07 1.0144E-07 6.4181E-09 4.9006E-09 - 1.2589E+03 1.1253E-07 6.9371E-08 4.1989E-09 3.4314E-09 - 1.4125E+03 7.7144E-08 4.7428E-08 2.6813E-09 2.1877E-09 - 1.5849E+03 5.3199E-08 3.2054E-08 1.8553E-09 1.4127E-09 - 1.7783E+03 3.6239E-08 2.1602E-08 1.3043E-09 9.8899E-10 - 1.9953E+03 2.4631E-08 1.4733E-08 8.1688E-10 6.4451E-10 - 2.2387E+03 1.6819E-08 1.0008E-08 5.5786E-10 4.0522E-10 - 2.5119E+03 1.1388E-08 6.6996E-09 3.7585E-10 2.7526E-10 - 2.8184E+03 7.6654E-09 4.4795E-09 2.3593E-10 1.9197E-10 - 3.1623E+03 5.2761E-09 3.0593E-09 1.6543E-10 1.1923E-10 - 3.5481E+03 3.4756E-09 2.0090E-09 1.1242E-10 7.6085E-11 - 3.9811E+03 2.3361E-09 1.3551E-09 7.1104E-11 5.3313E-11 - 4.4668E+03 1.5691E-09 8.9927E-10 4.6707E-11 3.6364E-11 - 5.0119E+03 1.0402E-09 6.0390E-10 3.2632E-11 2.2827E-11 - 5.6234E+03 6.8977E-10 3.9403E-10 2.2996E-11 1.4823E-11 - 6.3096E+03 4.5904E-10 2.5934E-10 1.5077E-11 9.6076E-12 - 7.0795E+03 3.0529E-10 1.6996E-10 9.5340E-12 6.1130E-12 - 7.9433E+03 2.0385E-10 1.1240E-10 5.8583E-12 3.7306E-12 - 8.9125E+03 1.3387E-10 7.4769E-11 3.8655E-12 2.5315E-12 - 1.0000E+04 8.9444E-11 4.9035E-11 2.1930E-12 1.7414E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5879E+04 1.5845E+04 7.8458E+03 7.1386E+03 - 1.1220E-01 1.3736E+04 1.3716E+04 6.8561E+03 6.1938E+03 - 1.2589E-01 1.1867E+04 1.1774E+04 5.8892E+03 5.2927E+03 - 1.4125E-01 1.0134E+04 9.9786E+03 5.0198E+03 4.4914E+03 - 1.5849E-01 8.5505E+03 8.4087E+03 4.2794E+03 3.7807E+03 - 1.7783E-01 7.1581E+03 7.0226E+03 3.5914E+03 3.1541E+03 - 1.9953E-01 5.9383E+03 5.7925E+03 2.9703E+03 2.6126E+03 - 2.2387E-01 4.8393E+03 4.7307E+03 2.4557E+03 2.1428E+03 - 2.5119E-01 3.9016E+03 3.8187E+03 2.0143E+03 1.7353E+03 - 2.8184E-01 3.1131E+03 3.0532E+03 1.6318E+03 1.3924E+03 - 3.1623E-01 2.4518E+03 2.4089E+03 1.3072E+03 1.1054E+03 - 3.5481E-01 1.9344E+03 1.8916E+03 1.0391E+03 8.6345E+02 - 3.9811E-01 1.5171E+03 1.4870E+03 8.1809E+02 6.7840E+02 - 4.4668E-01 1.1751E+03 1.1520E+03 6.3586E+02 5.3040E+02 - 5.0119E-01 9.0690E+02 8.7729E+02 4.8704E+02 4.0249E+02 - 5.6234E-01 6.8983E+02 6.6712E+02 3.7514E+02 3.0736E+02 - 6.3096E-01 5.2339E+02 5.0897E+02 2.8935E+02 2.3408E+02 - 7.0795E-01 3.9849E+02 3.8519E+02 2.2008E+02 1.7825E+02 - 7.9433E-01 3.0231E+02 2.8858E+02 1.6493E+02 1.3295E+02 - 8.9125E-01 2.2932E+02 2.1714E+02 1.2266E+02 9.8457E+01 - 1.0000E+00 1.6921E+02 1.6265E+02 9.0833E+01 7.3162E+01 - 1.1220E+00 1.2595E+02 1.2088E+02 6.6709E+01 5.3205E+01 - 1.2589E+00 9.4281E+01 8.9693E+01 4.9215E+01 3.8757E+01 - 1.4125E+00 7.0733E+01 6.6519E+01 3.6285E+01 2.8284E+01 - 1.5849E+00 5.2591E+01 4.9002E+01 2.6304E+01 2.0727E+01 - 1.7783E+00 3.8803E+01 3.6216E+01 1.9224E+01 1.4978E+01 - 1.9953E+00 2.8695E+01 2.6337E+01 1.4003E+01 1.0807E+01 - 2.2387E+00 2.0801E+01 1.9011E+01 9.9608E+00 7.6367E+00 - 2.5119E+00 1.5208E+01 1.3742E+01 7.0669E+00 5.3485E+00 - 2.8184E+00 1.1005E+01 9.9012E+00 4.9925E+00 3.7493E+00 - 3.1623E+00 8.2070E+00 7.2231E+00 3.5385E+00 2.6951E+00 - 3.5481E+00 5.9636E+00 5.1864E+00 2.4915E+00 1.8801E+00 - 3.9811E+00 4.2922E+00 3.7366E+00 1.7482E+00 1.3010E+00 - 4.4668E+00 3.0708E+00 2.6642E+00 1.2001E+00 9.0968E-01 - 5.0119E+00 2.2118E+00 1.8970E+00 8.2064E-01 6.3864E-01 - 5.6234E+00 1.5995E+00 1.3551E+00 5.6454E-01 4.3691E-01 - 6.3096E+00 1.1453E+00 9.6555E-01 3.7938E-01 2.9758E-01 - 7.0795E+00 8.2657E-01 6.8222E-01 2.6301E-01 2.0032E-01 - 7.9433E+00 5.9120E-01 4.9026E-01 1.8090E-01 1.3398E-01 - 8.9125E+00 4.2154E-01 3.5459E-01 1.1971E-01 9.0536E-02 - 1.0000E+01 2.9872E-01 2.4653E-01 8.2344E-02 6.1920E-02 - 1.1220E+01 2.1353E-01 1.7250E-01 5.5645E-02 4.1434E-02 - 1.2589E+01 1.5230E-01 1.2134E-01 3.7589E-02 2.7567E-02 - 1.4125E+01 1.0847E-01 8.6030E-02 2.5183E-02 1.8446E-02 - 1.5849E+01 7.7524E-02 6.1182E-02 1.6777E-02 1.2300E-02 - 1.7783E+01 5.5440E-02 4.3366E-02 1.1233E-02 8.4626E-03 - 1.9953E+01 3.9274E-02 3.0587E-02 7.3968E-03 5.8699E-03 - 2.2387E+01 2.7949E-02 2.1887E-02 4.8453E-03 3.8220E-03 - 2.5119E+01 1.9577E-02 1.5492E-02 3.2303E-03 2.5466E-03 - 2.8184E+01 1.4141E-02 1.0955E-02 2.2005E-03 1.7577E-03 - 3.1623E+01 1.0208E-02 7.7169E-03 1.4663E-03 1.1323E-03 - 3.5481E+01 7.2635E-03 5.4859E-03 9.7046E-04 7.5060E-04 - 3.9811E+01 5.1658E-03 3.8907E-03 6.4826E-04 5.0496E-04 - 4.4668E+01 3.6761E-03 2.7462E-03 4.2796E-04 3.3938E-04 - 5.0119E+01 2.6023E-03 1.9338E-03 2.8130E-04 2.2479E-04 - 5.6234E+01 1.8405E-03 1.3611E-03 1.8920E-04 1.5078E-04 - 6.3096E+01 1.2983E-03 9.5970E-04 1.2645E-04 1.0044E-04 - 7.0795E+01 9.2196E-04 6.7380E-04 8.4072E-05 6.7700E-05 - 7.9433E+01 6.5663E-04 4.7344E-04 5.6672E-05 4.4177E-05 - 8.9125E+01 4.6284E-04 3.3400E-04 3.7441E-05 2.9027E-05 - 1.0000E+02 3.2436E-04 2.3248E-04 2.5004E-05 2.0233E-05 - 1.1220E+02 2.2788E-04 1.6231E-04 1.6806E-05 1.3428E-05 - 1.2589E+02 1.6045E-04 1.1340E-04 1.1235E-05 9.0783E-06 - 1.4125E+02 1.1265E-04 7.9264E-05 7.6110E-06 6.1811E-06 - 1.5849E+02 7.8815E-05 5.5121E-05 5.1162E-06 4.1654E-06 - 1.7783E+02 5.5404E-05 3.8183E-05 3.4034E-06 2.8045E-06 - 1.9953E+02 3.8862E-05 2.6630E-05 2.2641E-06 1.8948E-06 - 2.2387E+02 2.7046E-05 1.8561E-05 1.5143E-06 1.2777E-06 - 2.5119E+02 1.8998E-05 1.2807E-05 1.0588E-06 8.4076E-07 - 2.8184E+02 1.3270E-05 8.8453E-06 7.3444E-07 5.6678E-07 - 3.1623E+02 9.2940E-06 6.1666E-06 4.7877E-07 3.9678E-07 - 3.5481E+02 6.4767E-06 4.2832E-06 3.2016E-07 2.6168E-07 - 3.9811E+02 4.5147E-06 2.9649E-06 2.1617E-07 1.7660E-07 - 4.4668E+02 3.1538E-06 2.0506E-06 1.4706E-07 1.1946E-07 - 5.0119E+02 2.1853E-06 1.4187E-06 9.9418E-08 7.9046E-08 - 5.6234E+02 1.5192E-06 9.7776E-07 6.7516E-08 5.3452E-08 - 6.3096E+02 1.0525E-06 6.7142E-07 4.5410E-08 3.6271E-08 - 7.0795E+02 7.2974E-07 4.6340E-07 3.0458E-08 2.4760E-08 - 7.9433E+02 5.0371E-07 3.1881E-07 2.0719E-08 1.6688E-08 - 8.9125E+02 3.4743E-07 2.1932E-07 1.3764E-08 1.0858E-08 - 1.0000E+03 2.4012E-07 1.5083E-07 9.2452E-09 7.0668E-09 - 1.1220E+03 1.6440E-07 1.0254E-07 6.4098E-09 4.8580E-09 - 1.2589E+03 1.1344E-07 6.9886E-08 4.3710E-09 3.2880E-09 - 1.4125E+03 7.8010E-08 4.7393E-08 2.8466E-09 2.1571E-09 - 1.5849E+03 5.3455E-08 3.2338E-08 1.8775E-09 1.4572E-09 - 1.7783E+03 3.5917E-08 2.1848E-08 1.2558E-09 9.7909E-10 - 1.9953E+03 2.4584E-08 1.4557E-08 8.3306E-10 6.0527E-10 - 2.2387E+03 1.6770E-08 9.7720E-09 5.5951E-10 4.1937E-10 - 2.5119E+03 1.1237E-08 6.6319E-09 4.0094E-10 2.8470E-10 - 2.8184E+03 7.5634E-09 4.5601E-09 2.6551E-10 1.8584E-10 - 3.1623E+03 5.2671E-09 3.0720E-09 1.6390E-10 1.2401E-10 - 3.5481E+03 3.4476E-09 1.9926E-09 1.0383E-10 8.2270E-11 - 3.9811E+03 2.3122E-09 1.3240E-09 6.8364E-11 5.3238E-11 - 4.4668E+03 1.5526E-09 8.8263E-10 4.5570E-11 3.4009E-11 - 5.0119E+03 1.0280E-09 5.8490E-10 3.1656E-11 2.2684E-11 - 5.6234E+03 6.7468E-10 3.9182E-10 2.2064E-11 1.5104E-11 - 6.3096E+03 4.6206E-10 2.5656E-10 1.3467E-11 9.5499E-12 - 7.0795E+03 3.0923E-10 1.6917E-10 8.8758E-12 5.9948E-12 - 7.9433E+03 2.0233E-10 1.1234E-10 5.9995E-12 3.7545E-12 - 8.9125E+03 1.3328E-10 7.3247E-11 3.9479E-12 2.3925E-12 - 1.0000E+04 8.9474E-11 4.8403E-11 2.5447E-12 1.6278E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5981E+04 1.6127E+04 8.0488E+03 7.1226E+03 - 1.1220E-01 1.3778E+04 1.3936E+04 7.0257E+03 6.2086E+03 - 1.2589E-01 1.1912E+04 1.1997E+04 6.0486E+03 5.3493E+03 - 1.4125E-01 1.0216E+04 1.0203E+04 5.1640E+03 4.5157E+03 - 1.5849E-01 8.6534E+03 8.5929E+03 4.3885E+03 3.7612E+03 - 1.7783E-01 7.2513E+03 7.1972E+03 3.6940E+03 3.1416E+03 - 1.9953E-01 5.9834E+03 5.9409E+03 3.0751E+03 2.6128E+03 - 2.2387E-01 4.8821E+03 4.8414E+03 2.5397E+03 2.1323E+03 - 2.5119E-01 3.9269E+03 3.8943E+03 2.0757E+03 1.7208E+03 - 2.8184E-01 3.1135E+03 3.1038E+03 1.6820E+03 1.3872E+03 - 3.1623E-01 2.4653E+03 2.4562E+03 1.3379E+03 1.1039E+03 - 3.5481E-01 1.9460E+03 1.9240E+03 1.0596E+03 8.6690E+02 - 3.9811E-01 1.5253E+03 1.5050E+03 8.3891E+02 6.7373E+02 - 4.4668E-01 1.1807E+03 1.1632E+03 6.5842E+02 5.1917E+02 - 5.0119E-01 9.0689E+02 8.9291E+02 5.0941E+02 3.9848E+02 - 5.6234E-01 6.9461E+02 6.8009E+02 3.8608E+02 3.0107E+02 - 6.3096E-01 5.2917E+02 5.1589E+02 2.9378E+02 2.2874E+02 - 7.0795E-01 3.9856E+02 3.9058E+02 2.2500E+02 1.7588E+02 - 7.9433E-01 2.9816E+02 2.9530E+02 1.6959E+02 1.3205E+02 - 8.9125E-01 2.2494E+02 2.1966E+02 1.2427E+02 9.7689E+01 - 1.0000E+00 1.6984E+02 1.6350E+02 9.1336E+01 7.2321E+01 - 1.1220E+00 1.2720E+02 1.2200E+02 6.7826E+01 5.3264E+01 - 1.2589E+00 9.4997E+01 9.0409E+01 4.9468E+01 3.9366E+01 - 1.4125E+00 7.0757E+01 6.6521E+01 3.6379E+01 2.8727E+01 - 1.5849E+00 5.2467E+01 4.8972E+01 2.6578E+01 2.0783E+01 - 1.7783E+00 3.8857E+01 3.5990E+01 1.9209E+01 1.4929E+01 - 1.9953E+00 2.8489E+01 2.6269E+01 1.4010E+01 1.0702E+01 - 2.2387E+00 2.1008E+01 1.9140E+01 1.0032E+01 7.7488E+00 - 2.5119E+00 1.5368E+01 1.3963E+01 7.0011E+00 5.5452E+00 - 2.8184E+00 1.1094E+01 1.0073E+01 5.0535E+00 3.8637E+00 - 3.1623E+00 8.1494E+00 7.2605E+00 3.5388E+00 2.7089E+00 - 3.5481E+00 5.9322E+00 5.2283E+00 2.4713E+00 1.8965E+00 - 3.9811E+00 4.2700E+00 3.7504E+00 1.7307E+00 1.3152E+00 - 4.4668E+00 3.0771E+00 2.6786E+00 1.2046E+00 9.0812E-01 - 5.0119E+00 2.2202E+00 1.9043E+00 8.3036E-01 6.1866E-01 - 5.6234E+00 1.6000E+00 1.3477E+00 5.6677E-01 4.2367E-01 - 6.3096E+00 1.1526E+00 9.6429E-01 3.9210E-01 2.9700E-01 - 7.0795E+00 8.2517E-01 6.8397E-01 2.7004E-01 2.0148E-01 - 7.9433E+00 5.9282E-01 4.8735E-01 1.8362E-01 1.3477E-01 - 8.9125E+00 4.2620E-01 3.4792E-01 1.2285E-01 9.2564E-02 - 1.0000E+01 3.0107E-01 2.4326E-01 8.3104E-02 6.2240E-02 - 1.1220E+01 2.1474E-01 1.7118E-01 5.5798E-02 4.1804E-02 - 1.2589E+01 1.5297E-01 1.2064E-01 3.7519E-02 2.8033E-02 - 1.4125E+01 1.0886E-01 8.5633E-02 2.5041E-02 1.9092E-02 - 1.5849E+01 7.7825E-02 6.0983E-02 1.6558E-02 1.2556E-02 - 1.7783E+01 5.5508E-02 4.3436E-02 1.1148E-02 8.3747E-03 - 1.9953E+01 3.9679E-02 3.0904E-02 7.4417E-03 5.4807E-03 - 2.2387E+01 2.8199E-02 2.2105E-02 4.9994E-03 3.6838E-03 - 2.5119E+01 2.0187E-02 1.5746E-02 3.3566E-03 2.5956E-03 - 2.8184E+01 1.4479E-02 1.0885E-02 2.1221E-03 1.7318E-03 - 3.1623E+01 1.0194E-02 7.7222E-03 1.4581E-03 1.1289E-03 - 3.5481E+01 7.2774E-03 5.4695E-03 9.6667E-04 7.5619E-04 - 3.9811E+01 5.1687E-03 3.8754E-03 6.4354E-04 5.0458E-04 - 4.4668E+01 3.6523E-03 2.7311E-03 4.2942E-04 3.3635E-04 - 5.0119E+01 2.5946E-03 1.9166E-03 2.8351E-04 2.2529E-04 - 5.6234E+01 1.8448E-03 1.3479E-03 1.8938E-04 1.4919E-04 - 6.3096E+01 1.3032E-03 9.5048E-04 1.2660E-04 9.9495E-05 - 7.0795E+01 9.2462E-04 6.7126E-04 8.3956E-05 6.7237E-05 - 7.9433E+01 6.5139E-04 4.7352E-04 5.5608E-05 4.4557E-05 - 8.9125E+01 4.5749E-04 3.3090E-04 3.7481E-05 2.9227E-05 - 1.0000E+02 3.2315E-04 2.3122E-04 2.4992E-05 2.0234E-05 - 1.1220E+02 2.2734E-04 1.6177E-04 1.6581E-05 1.3634E-05 - 1.2589E+02 1.6004E-04 1.1272E-04 1.0974E-05 9.0539E-06 - 1.4125E+02 1.1271E-04 7.8436E-05 7.4729E-06 6.0487E-06 - 1.5849E+02 7.9127E-05 5.4510E-05 4.9866E-06 4.1024E-06 - 1.7783E+02 5.5595E-05 3.8003E-05 3.3337E-06 2.8093E-06 - 1.9953E+02 3.8985E-05 2.6493E-05 2.2908E-06 1.9010E-06 - 2.2387E+02 2.7250E-05 1.8507E-05 1.5543E-06 1.2594E-06 - 2.5119E+02 1.9014E-05 1.2884E-05 1.0271E-06 8.4277E-07 - 2.8184E+02 1.3309E-05 8.9193E-06 6.8068E-07 5.7264E-07 - 3.1623E+02 9.2690E-06 6.1828E-06 4.7482E-07 3.8789E-07 - 3.5481E+02 6.4524E-06 4.2792E-06 3.2444E-07 2.6285E-07 - 3.9811E+02 4.5079E-06 2.9478E-06 2.2233E-07 1.8002E-07 - 4.4668E+02 3.1359E-06 2.0466E-06 1.5115E-07 1.2079E-07 - 5.0119E+02 2.1813E-06 1.4111E-06 1.0154E-07 7.9743E-08 - 5.6234E+02 1.5254E-06 9.7523E-07 6.8265E-08 5.3147E-08 - 6.3096E+02 1.0568E-06 6.7307E-07 4.5674E-08 3.5359E-08 - 7.0795E+02 7.3215E-07 4.6215E-07 3.0730E-08 2.4208E-08 - 7.9433E+02 5.0617E-07 3.1856E-07 2.1225E-08 1.6229E-08 - 8.9125E+02 3.5049E-07 2.1984E-07 1.4277E-08 1.0801E-08 - 1.0000E+03 2.4219E-07 1.5038E-07 9.2144E-09 7.2405E-09 - 1.1220E+03 1.6529E-07 1.0256E-07 6.1788E-09 5.0013E-09 - 1.2589E+03 1.1261E-07 6.9117E-08 4.3163E-09 3.3074E-09 - 1.4125E+03 7.6821E-08 4.6705E-08 2.9593E-09 2.1174E-09 - 1.5849E+03 5.3008E-08 3.2128E-08 1.9135E-09 1.4324E-09 - 1.7783E+03 3.6002E-08 2.1774E-08 1.2812E-09 9.6486E-10 - 1.9953E+03 2.4560E-08 1.4605E-08 8.6096E-10 6.5158E-10 - 2.2387E+03 1.6711E-08 9.8403E-09 5.2976E-10 4.3791E-10 - 2.5119E+03 1.1266E-08 6.7185E-09 3.5194E-10 2.7994E-10 - 2.8184E+03 7.5531E-09 4.4514E-09 2.4641E-10 1.8676E-10 - 3.1623E+03 5.2717E-09 3.0568E-09 1.7131E-10 1.2030E-10 - 3.5481E+03 3.4550E-09 2.0083E-09 1.0988E-10 7.8849E-11 - 3.9811E+03 2.3025E-09 1.3509E-09 6.9927E-11 5.4645E-11 - 4.4668E+03 1.5425E-09 8.9972E-10 4.7107E-11 3.5980E-11 - 5.0119E+03 1.0360E-09 5.9291E-10 3.0944E-11 2.2384E-11 - 5.6234E+03 6.9408E-10 3.9771E-10 1.9818E-11 1.5420E-11 - 6.3096E+03 4.5885E-10 2.6055E-10 1.3298E-11 9.5072E-12 - 7.0795E+03 3.0457E-10 1.7339E-10 9.0352E-12 6.2924E-12 - 7.9433E+03 2.0223E-10 1.1272E-10 6.1114E-12 4.2642E-12 - 8.9125E+03 1.3444E-10 7.3010E-11 3.9481E-12 2.6683E-12 - 1.0000E+04 8.9918E-11 4.7620E-11 2.6249E-12 1.8209E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6086E+04 1.6337E+04 8.1934E+03 7.1034E+03 - 1.1220E-01 1.3905E+04 1.4184E+04 7.1982E+03 6.1449E+03 - 1.2589E-01 1.1973E+04 1.2250E+04 6.2221E+03 5.2619E+03 - 1.4125E-01 1.0242E+04 1.0443E+04 5.3169E+03 4.4637E+03 - 1.5849E-01 8.6750E+03 8.8095E+03 4.5159E+03 3.7461E+03 - 1.7783E-01 7.2507E+03 7.3264E+03 3.8041E+03 3.1243E+03 - 1.9953E-01 5.9883E+03 6.0232E+03 3.1596E+03 2.5927E+03 - 2.2387E-01 4.8644E+03 4.9116E+03 2.6036E+03 2.1201E+03 - 2.5119E-01 3.9133E+03 3.9711E+03 2.1357E+03 1.7159E+03 - 2.8184E-01 3.1303E+03 3.1697E+03 1.7266E+03 1.3742E+03 - 3.1623E-01 2.4703E+03 2.4943E+03 1.3818E+03 1.0975E+03 - 3.5481E-01 1.9482E+03 1.9577E+03 1.0924E+03 8.6444E+02 - 3.9811E-01 1.5230E+03 1.5309E+03 8.5350E+02 6.7034E+02 - 4.4668E-01 1.1721E+03 1.1843E+03 6.6052E+02 5.1929E+02 - 5.0119E-01 9.0304E+02 9.0317E+02 5.0801E+02 4.0212E+02 - 5.6234E-01 6.9270E+02 6.8826E+02 3.9155E+02 3.0722E+02 - 6.3096E-01 5.2473E+02 5.2456E+02 3.0013E+02 2.3169E+02 - 7.0795E-01 3.9666E+02 3.9486E+02 2.2506E+02 1.7244E+02 - 7.9433E-01 3.0010E+02 2.9585E+02 1.6669E+02 1.3042E+02 - 8.9125E-01 2.2407E+02 2.2111E+02 1.2436E+02 9.6136E+01 - 1.0000E+00 1.6924E+02 1.6471E+02 9.3211E+01 7.1917E+01 - 1.1220E+00 1.2577E+02 1.2286E+02 6.9026E+01 5.2880E+01 - 1.2589E+00 9.4695E+01 9.1170E+01 5.0425E+01 3.8538E+01 - 1.4125E+00 7.1105E+01 6.7189E+01 3.6629E+01 2.8428E+01 - 1.5849E+00 5.2518E+01 4.9485E+01 2.6621E+01 2.0813E+01 - 1.7783E+00 3.8784E+01 3.6163E+01 1.9223E+01 1.4944E+01 - 1.9953E+00 2.8601E+01 2.6608E+01 1.3938E+01 1.0708E+01 - 2.2387E+00 2.1123E+01 1.9417E+01 1.0097E+01 7.6380E+00 - 2.5119E+00 1.5513E+01 1.3990E+01 7.1889E+00 5.4656E+00 - 2.8184E+00 1.1312E+01 1.0212E+01 5.0884E+00 3.9566E+00 - 3.1623E+00 8.1744E+00 7.2251E+00 3.5689E+00 2.6850E+00 - 3.5481E+00 5.9226E+00 5.1950E+00 2.4836E+00 1.8733E+00 - 3.9811E+00 4.2484E+00 3.7278E+00 1.7213E+00 1.2916E+00 - 4.4668E+00 3.0622E+00 2.6567E+00 1.1914E+00 9.0167E-01 - 5.0119E+00 2.2066E+00 1.8817E+00 8.3103E-01 6.3135E-01 - 5.6234E+00 1.5897E+00 1.3400E+00 5.6673E-01 4.3125E-01 - 6.3096E+00 1.1439E+00 9.6633E-01 3.8517E-01 2.9060E-01 - 7.0795E+00 8.1502E-01 6.8642E-01 2.6515E-01 1.9702E-01 - 7.9433E+00 5.7720E-01 4.8009E-01 1.7757E-01 1.3439E-01 - 8.9125E+00 4.1921E-01 3.4060E-01 1.1905E-01 9.3839E-02 - 1.0000E+01 3.0147E-01 2.4506E-01 8.2313E-02 6.2543E-02 - 1.1220E+01 2.1501E-01 1.7508E-01 5.5534E-02 4.1835E-02 - 1.2589E+01 1.5462E-01 1.2397E-01 3.7082E-02 2.7946E-02 - 1.4125E+01 1.1099E-01 8.8065E-02 2.4730E-02 1.8936E-02 - 1.5849E+01 7.8618E-02 6.2390E-02 1.6518E-02 1.2929E-02 - 1.7783E+01 5.5745E-02 4.3523E-02 1.1293E-02 8.5848E-03 - 1.9953E+01 3.9877E-02 3.0935E-02 7.9048E-03 5.6810E-03 - 2.2387E+01 2.8510E-02 2.1958E-02 5.1480E-03 3.6734E-03 - 2.5119E+01 2.0558E-02 1.5608E-02 3.1926E-03 2.5257E-03 - 2.8184E+01 1.4615E-02 1.0843E-02 2.0982E-03 1.7796E-03 - 3.1623E+01 1.0192E-02 7.7261E-03 1.4515E-03 1.1358E-03 - 3.5481E+01 7.2391E-03 5.4600E-03 9.6729E-04 7.5531E-04 - 3.9811E+01 5.1488E-03 3.8646E-03 6.4508E-04 5.0683E-04 - 4.4668E+01 3.6690E-03 2.7347E-03 4.2846E-04 3.3708E-04 - 5.0119E+01 2.5977E-03 1.9317E-03 2.8583E-04 2.2427E-04 - 5.6234E+01 1.8360E-03 1.3514E-03 1.8798E-04 1.4938E-04 - 6.3096E+01 1.3014E-03 9.4932E-04 1.2473E-04 9.8374E-05 - 7.0795E+01 9.2017E-04 6.6929E-04 8.3528E-05 6.6894E-05 - 7.9433E+01 6.4974E-04 4.6827E-04 5.5816E-05 4.4987E-05 - 8.9125E+01 4.5992E-04 3.2923E-04 3.7745E-05 3.0070E-05 - 1.0000E+02 3.2360E-04 2.3234E-04 2.5016E-05 2.0353E-05 - 1.1220E+02 2.2796E-04 1.6163E-04 1.6679E-05 1.3602E-05 - 1.2589E+02 1.6024E-04 1.1285E-04 1.1206E-05 9.1423E-06 - 1.4125E+02 1.1252E-04 7.9015E-05 7.4530E-06 6.1241E-06 - 1.5849E+02 7.9149E-05 5.4993E-05 4.9587E-06 4.1286E-06 - 1.7783E+02 5.5468E-05 3.8265E-05 3.4492E-06 2.7982E-06 - 1.9953E+02 3.8806E-05 2.6618E-05 2.3537E-06 1.8400E-06 - 2.2387E+02 2.7092E-05 1.8567E-05 1.5984E-06 1.2416E-06 - 2.5119E+02 1.8926E-05 1.2867E-05 1.0889E-06 8.3685E-07 - 2.8184E+02 1.3357E-05 8.8893E-06 7.0945E-07 5.8381E-07 - 3.1623E+02 9.3039E-06 6.2145E-06 4.8456E-07 3.9247E-07 - 3.5481E+02 6.4660E-06 4.2949E-06 3.2811E-07 2.5494E-07 - 3.9811E+02 4.4981E-06 2.9621E-06 2.1925E-07 1.7401E-07 - 4.4668E+02 3.1293E-06 2.0372E-06 1.5133E-07 1.1977E-07 - 5.0119E+02 2.1752E-06 1.4146E-06 1.0096E-07 7.9844E-08 - 5.6234E+02 1.5252E-06 9.8214E-07 6.8281E-08 5.3733E-08 - 6.3096E+02 1.0554E-06 6.7139E-07 4.6276E-08 3.6641E-08 - 7.0795E+02 7.3114E-07 4.6244E-07 3.0523E-08 2.4508E-08 - 7.9433E+02 5.0564E-07 3.1799E-07 2.0250E-08 1.6065E-08 - 8.9125E+02 3.4997E-07 2.1686E-07 1.3572E-08 1.1096E-08 - 1.0000E+03 2.4188E-07 1.4925E-07 9.2183E-09 7.4989E-09 - 1.1220E+03 1.6562E-07 1.0163E-07 6.3646E-09 5.0626E-09 - 1.2589E+03 1.1348E-07 6.9302E-08 4.4180E-09 3.3418E-09 - 1.4125E+03 7.7729E-08 4.7741E-08 2.8660E-09 2.2167E-09 - 1.5849E+03 5.3466E-08 3.2200E-08 1.8806E-09 1.4732E-09 - 1.7783E+03 3.6390E-08 2.1600E-08 1.2427E-09 9.5446E-10 - 1.9953E+03 2.4547E-08 1.4726E-08 8.5592E-10 6.3127E-10 - 2.2387E+03 1.6703E-08 9.9947E-09 5.7612E-10 4.2071E-10 - 2.5119E+03 1.1312E-08 6.7042E-09 3.9769E-10 2.9032E-10 - 2.8184E+03 7.6566E-09 4.4675E-09 2.5167E-10 1.9010E-10 - 3.1623E+03 5.2626E-09 3.0615E-09 1.6567E-10 1.2144E-10 - 3.5481E+03 3.4569E-09 1.9984E-09 1.0958E-10 8.0733E-11 - 3.9811E+03 2.3211E-09 1.3484E-09 7.2437E-11 5.3704E-11 - 4.4668E+03 1.5647E-09 8.9987E-10 4.9407E-11 3.3893E-11 - 5.0119E+03 1.0420E-09 6.0218E-10 3.2582E-11 2.3017E-11 - 5.6234E+03 6.8984E-10 3.9698E-10 2.1792E-11 1.6532E-11 - 6.3096E+03 4.5943E-10 2.6019E-10 1.3627E-11 1.0304E-11 - 7.0795E+03 3.0572E-10 1.7159E-10 9.0142E-12 6.4720E-12 - 7.9433E+03 2.0343E-10 1.1138E-10 5.9917E-12 4.1999E-12 - 8.9125E+03 1.3413E-10 7.4038E-11 3.9548E-12 2.9845E-12 - 1.0000E+04 8.7873E-11 4.9675E-11 2.4549E-12 1.9974E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6090E+04 1.6576E+04 8.3848E+03 7.0309E+03 - 1.1220E-01 1.3975E+04 1.4389E+04 7.3172E+03 6.1000E+03 - 1.2589E-01 1.2034E+04 1.2365E+04 6.3181E+03 5.2484E+03 - 1.4125E-01 1.0256E+04 1.0536E+04 5.4146E+03 4.4521E+03 - 1.5849E-01 8.6863E+03 8.9112E+03 4.5984E+03 3.7334E+03 - 1.7783E-01 7.2731E+03 7.4608E+03 3.8701E+03 3.1136E+03 - 1.9953E-01 6.0012E+03 6.1593E+03 3.2210E+03 2.5728E+03 - 2.2387E-01 4.8818E+03 5.0196E+03 2.6693E+03 2.0896E+03 - 2.5119E-01 3.9364E+03 4.0437E+03 2.1842E+03 1.6958E+03 - 2.8184E-01 3.1437E+03 3.2166E+03 1.7677E+03 1.3670E+03 - 3.1623E-01 2.4832E+03 2.5478E+03 1.4172E+03 1.0887E+03 - 3.5481E-01 1.9545E+03 2.0034E+03 1.1151E+03 8.5583E+02 - 3.9811E-01 1.5242E+03 1.5518E+03 8.7538E+02 6.7080E+02 - 4.4668E-01 1.1789E+03 1.1985E+03 6.8128E+02 5.2364E+02 - 5.0119E-01 9.0907E+02 9.2007E+02 5.2199E+02 3.9775E+02 - 5.6234E-01 6.9420E+02 6.9919E+02 3.9584E+02 3.0386E+02 - 6.3096E-01 5.2341E+02 5.2894E+02 2.9826E+02 2.3163E+02 - 7.0795E-01 3.9646E+02 3.9640E+02 2.2554E+02 1.7444E+02 - 7.9433E-01 3.0281E+02 2.9578E+02 1.6872E+02 1.3039E+02 - 8.9125E-01 2.2877E+02 2.2142E+02 1.2627E+02 9.6509E+01 - 1.0000E+00 1.6991E+02 1.6598E+02 9.4069E+01 7.2525E+01 - 1.1220E+00 1.2735E+02 1.2377E+02 6.9100E+01 5.3194E+01 - 1.2589E+00 9.4844E+01 9.1734E+01 5.0901E+01 3.8812E+01 - 1.4125E+00 7.0912E+01 6.7466E+01 3.6996E+01 2.8425E+01 - 1.5849E+00 5.2628E+01 4.9662E+01 2.6979E+01 2.0711E+01 - 1.7783E+00 3.8904E+01 3.6473E+01 1.9604E+01 1.4889E+01 - 1.9953E+00 2.8350E+01 2.6659E+01 1.4119E+01 1.0721E+01 - 2.2387E+00 2.0749E+01 1.9384E+01 1.0028E+01 7.7146E+00 - 2.5119E+00 1.5371E+01 1.3998E+01 7.1742E+00 5.3997E+00 - 2.8184E+00 1.1364E+01 1.0056E+01 5.1274E+00 3.8222E+00 - 3.1623E+00 8.2015E+00 7.2561E+00 3.5912E+00 2.7348E+00 - 3.5481E+00 5.9146E+00 5.2199E+00 2.5123E+00 1.9046E+00 - 3.9811E+00 4.2857E+00 3.7354E+00 1.7259E+00 1.3228E+00 - 4.4668E+00 3.0933E+00 2.6466E+00 1.1901E+00 9.2304E-01 - 5.0119E+00 2.2355E+00 1.8989E+00 8.3063E-01 6.3619E-01 - 5.6234E+00 1.6145E+00 1.3672E+00 5.7360E-01 4.4015E-01 - 6.3096E+00 1.1489E+00 9.6244E-01 3.9474E-01 2.9708E-01 - 7.0795E+00 8.1644E-01 6.7661E-01 2.6870E-01 2.0022E-01 - 7.9433E+00 5.8913E-01 4.8547E-01 1.8002E-01 1.3743E-01 - 8.9125E+00 4.2752E-01 3.5281E-01 1.2063E-01 9.1123E-02 - 1.0000E+01 3.0177E-01 2.4543E-01 8.3333E-02 6.2545E-02 - 1.1220E+01 2.1486E-01 1.7321E-01 5.5438E-02 4.2430E-02 - 1.2589E+01 1.5306E-01 1.2206E-01 3.7480E-02 2.8116E-02 - 1.4125E+01 1.0882E-01 8.6495E-02 2.5187E-02 1.8902E-02 - 1.5849E+01 7.8271E-02 6.0911E-02 1.6597E-02 1.2875E-02 - 1.7783E+01 5.6744E-02 4.3038E-02 1.1144E-02 8.4069E-03 - 1.9953E+01 4.0260E-02 3.0747E-02 7.2646E-03 5.4971E-03 - 2.2387E+01 2.8431E-02 2.2075E-02 4.9361E-03 3.6780E-03 - 2.5119E+01 2.0185E-02 1.5687E-02 3.3231E-03 2.4470E-03 - 2.8184E+01 1.4392E-02 1.0834E-02 2.1867E-03 1.6594E-03 - 3.1623E+01 1.0207E-02 7.7765E-03 1.4615E-03 1.1298E-03 - 3.5481E+01 7.2611E-03 5.4822E-03 9.7430E-04 7.5326E-04 - 3.9811E+01 5.1701E-03 3.8799E-03 6.4773E-04 5.0464E-04 - 4.4668E+01 3.6740E-03 2.7389E-03 4.2866E-04 3.4121E-04 - 5.0119E+01 2.6082E-03 1.9334E-03 2.8506E-04 2.2882E-04 - 5.6234E+01 1.8463E-03 1.3667E-03 1.8818E-04 1.5055E-04 - 6.3096E+01 1.3068E-03 9.6260E-04 1.2497E-04 9.9519E-05 - 7.0795E+01 9.2660E-04 6.7327E-04 8.4053E-05 6.7329E-05 - 7.9433E+01 6.5481E-04 4.7304E-04 5.6224E-05 4.4443E-05 - 8.9125E+01 4.5956E-04 3.3276E-04 3.7460E-05 2.9592E-05 - 1.0000E+02 3.2369E-04 2.3140E-04 2.5123E-05 2.0120E-05 - 1.1220E+02 2.2754E-04 1.6134E-04 1.6819E-05 1.3552E-05 - 1.2589E+02 1.5953E-04 1.1303E-04 1.1167E-05 9.1818E-06 - 1.4125E+02 1.1236E-04 7.8854E-05 7.4728E-06 6.1700E-06 - 1.5849E+02 7.8991E-05 5.4861E-05 4.9993E-06 4.1306E-06 - 1.7783E+02 5.5500E-05 3.8078E-05 3.3769E-06 2.7782E-06 - 1.9953E+02 3.8920E-05 2.6449E-05 2.2609E-06 1.8687E-06 - 2.2387E+02 2.7149E-05 1.8455E-05 1.5015E-06 1.2683E-06 - 2.5119E+02 1.8916E-05 1.2780E-05 1.0196E-06 8.5105E-07 - 2.8184E+02 1.3276E-05 8.8646E-06 7.2191E-07 5.5311E-07 - 3.1623E+02 9.2770E-06 6.2087E-06 4.8297E-07 3.8578E-07 - 3.5481E+02 6.4576E-06 4.2910E-06 3.2233E-07 2.6118E-07 - 3.9811E+02 4.5087E-06 2.9797E-06 2.1700E-07 1.7792E-07 - 4.4668E+02 3.1442E-06 2.0490E-06 1.4873E-07 1.1970E-07 - 5.0119E+02 2.1895E-06 1.4092E-06 1.0378E-07 7.9992E-08 - 5.6234E+02 1.5285E-06 9.7543E-07 6.7758E-08 5.3894E-08 - 6.3096E+02 1.0605E-06 6.7144E-07 4.5169E-08 3.6361E-08 - 7.0795E+02 7.3108E-07 4.6322E-07 3.0867E-08 2.4620E-08 - 7.9433E+02 5.0497E-07 3.1884E-07 2.0694E-08 1.7009E-08 - 8.9125E+02 3.5035E-07 2.1726E-07 1.3775E-08 1.1175E-08 - 1.0000E+03 2.4306E-07 1.4933E-07 9.4968E-09 7.4091E-09 - 1.1220E+03 1.6668E-07 1.0119E-07 6.3495E-09 4.9241E-09 - 1.2589E+03 1.1399E-07 6.9830E-08 4.2719E-09 3.1961E-09 - 1.4125E+03 7.7758E-08 4.7797E-08 2.8481E-09 2.0633E-09 - 1.5849E+03 5.3308E-08 3.1969E-08 1.8373E-09 1.4341E-09 - 1.7783E+03 3.6394E-08 2.1728E-08 1.2812E-09 9.7396E-10 - 1.9953E+03 2.4757E-08 1.4770E-08 8.6286E-10 6.5141E-10 - 2.2387E+03 1.6854E-08 1.0045E-08 5.6742E-10 4.3052E-10 - 2.5119E+03 1.1416E-08 6.7529E-09 4.0029E-10 2.9387E-10 - 2.8184E+03 7.7116E-09 4.4768E-09 2.6551E-10 1.9452E-10 - 3.1623E+03 5.2581E-09 3.0643E-09 1.6883E-10 1.2099E-10 - 3.5481E+03 3.4384E-09 2.0095E-09 1.0928E-10 8.2263E-11 - 3.9811E+03 2.3092E-09 1.3457E-09 7.3098E-11 5.5884E-11 - 4.4668E+03 1.5528E-09 8.9329E-10 4.7013E-11 3.5901E-11 - 5.0119E+03 1.0406E-09 5.9172E-10 3.0346E-11 2.2886E-11 - 5.6234E+03 6.9006E-10 3.9135E-10 2.0011E-11 1.4394E-11 - 6.3096E+03 4.5945E-10 2.5855E-10 1.3588E-11 9.7834E-12 - 7.0795E+03 3.0554E-10 1.7197E-10 8.7124E-12 6.3073E-12 - 7.9433E+03 2.0087E-10 1.1455E-10 5.8250E-12 4.1051E-12 - 8.9125E+03 1.3453E-10 7.4892E-11 3.9578E-12 2.6608E-12 - 1.0000E+04 9.0039E-11 4.9226E-11 2.3235E-12 1.7416E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6062E+04 1.6638E+04 8.4701E+03 6.9898E+03 - 1.1220E-01 1.3895E+04 1.4348E+04 7.4138E+03 6.0484E+03 - 1.2589E-01 1.2000E+04 1.2376E+04 6.3939E+03 5.2103E+03 - 1.4125E-01 1.0292E+04 1.0610E+04 5.4700E+03 4.4457E+03 - 1.5849E-01 8.7175E+03 8.9561E+03 4.6591E+03 3.7291E+03 - 1.7783E-01 7.2643E+03 7.4726E+03 3.9282E+03 3.1001E+03 - 1.9953E-01 5.9766E+03 6.1885E+03 3.2777E+03 2.5512E+03 - 2.2387E-01 4.8794E+03 5.0518E+03 2.6884E+03 2.0814E+03 - 2.5119E-01 3.9432E+03 4.0732E+03 2.1871E+03 1.6968E+03 - 2.8184E-01 3.1467E+03 3.2422E+03 1.7713E+03 1.3623E+03 - 3.1623E-01 2.4945E+03 2.5624E+03 1.4197E+03 1.0760E+03 - 3.5481E-01 1.9493E+03 2.0225E+03 1.1262E+03 8.4976E+02 - 3.9811E-01 1.5181E+03 1.5703E+03 8.8293E+02 6.6782E+02 - 4.4668E-01 1.1844E+03 1.2075E+03 6.8462E+02 5.1620E+02 - 5.0119E-01 9.1264E+02 9.2661E+02 5.2714E+02 3.9462E+02 - 5.6234E-01 6.9626E+02 7.0812E+02 4.0405E+02 3.0196E+02 - 6.3096E-01 5.2813E+02 5.3375E+02 3.0452E+02 2.3264E+02 - 7.0795E-01 3.9863E+02 4.0192E+02 2.2844E+02 1.7462E+02 - 7.9433E-01 3.0125E+02 3.0045E+02 1.7118E+02 1.2920E+02 - 8.9125E-01 2.2725E+02 2.2336E+02 1.2618E+02 9.6676E+01 - 1.0000E+00 1.7010E+02 1.6704E+02 9.4290E+01 7.1905E+01 - 1.1220E+00 1.2694E+02 1.2372E+02 6.9454E+01 5.2923E+01 - 1.2589E+00 9.4925E+01 9.1710E+01 5.0838E+01 3.8836E+01 - 1.4125E+00 7.0916E+01 6.7530E+01 3.7098E+01 2.8357E+01 - 1.5849E+00 5.2660E+01 4.9366E+01 2.7078E+01 2.0631E+01 - 1.7783E+00 3.9131E+01 3.6148E+01 1.9540E+01 1.5137E+01 - 1.9953E+00 2.8793E+01 2.6446E+01 1.4092E+01 1.0748E+01 - 2.2387E+00 2.1047E+01 1.9265E+01 1.0229E+01 7.7241E+00 - 2.5119E+00 1.5444E+01 1.3977E+01 7.1890E+00 5.4851E+00 - 2.8184E+00 1.1237E+01 1.0045E+01 5.0710E+00 3.8217E+00 - 3.1623E+00 8.1894E+00 7.2729E+00 3.5633E+00 2.7252E+00 - 3.5481E+00 5.9252E+00 5.2367E+00 2.4961E+00 1.8909E+00 - 3.9811E+00 4.2660E+00 3.7378E+00 1.7270E+00 1.3151E+00 - 4.4668E+00 3.0910E+00 2.6567E+00 1.1963E+00 9.2402E-01 - 5.0119E+00 2.2386E+00 1.8953E+00 8.2936E-01 6.3829E-01 - 5.6234E+00 1.6010E+00 1.3504E+00 5.6365E-01 4.3679E-01 - 6.3096E+00 1.1494E+00 9.6790E-01 3.8952E-01 2.9662E-01 - 7.0795E+00 8.2831E-01 6.9283E-01 2.6713E-01 2.0156E-01 - 7.9433E+00 5.9203E-01 4.8952E-01 1.7882E-01 1.3371E-01 - 8.9125E+00 4.2328E-01 3.4464E-01 1.1829E-01 9.1632E-02 - 1.0000E+01 3.0107E-01 2.4359E-01 8.1390E-02 6.3245E-02 - 1.1220E+01 2.1432E-01 1.7261E-01 5.5640E-02 4.2630E-02 - 1.2589E+01 1.5290E-01 1.2207E-01 3.7199E-02 2.8574E-02 - 1.4125E+01 1.0920E-01 8.6081E-02 2.4836E-02 1.8711E-02 - 1.5849E+01 7.7757E-02 6.1394E-02 1.6956E-02 1.2399E-02 - 1.7783E+01 5.5370E-02 4.3844E-02 1.1345E-02 8.4475E-03 - 1.9953E+01 3.9967E-02 3.1157E-02 7.5100E-03 5.6590E-03 - 2.2387E+01 2.8848E-02 2.1924E-02 5.0120E-03 3.7537E-03 - 2.5119E+01 2.0509E-02 1.5379E-02 3.3250E-03 2.5150E-03 - 2.8184E+01 1.4495E-02 1.0847E-02 2.1802E-03 1.6839E-03 - 3.1623E+01 1.0217E-02 7.7371E-03 1.4698E-03 1.1283E-03 - 3.5481E+01 7.2547E-03 5.4732E-03 9.7266E-04 7.5814E-04 - 3.9811E+01 5.1419E-03 3.8725E-03 6.4004E-04 5.0746E-04 - 4.4668E+01 3.6565E-03 2.7324E-03 4.2596E-04 3.3700E-04 - 5.0119E+01 2.6005E-03 1.9205E-03 2.8629E-04 2.2417E-04 - 5.6234E+01 1.8462E-03 1.3513E-03 1.9064E-04 1.5014E-04 - 6.3096E+01 1.3048E-03 9.5662E-04 1.2864E-04 1.0009E-04 - 7.0795E+01 9.2067E-04 6.7438E-04 8.5716E-05 6.7272E-05 - 7.9433E+01 6.5147E-04 4.7060E-04 5.5995E-05 4.4605E-05 - 8.9125E+01 4.6284E-04 3.3112E-04 3.8113E-05 2.9846E-05 - 1.0000E+02 3.2391E-04 2.3164E-04 2.5270E-05 2.0193E-05 - 1.1220E+02 2.2813E-04 1.6238E-04 1.6771E-05 1.3411E-05 - 1.2589E+02 1.6094E-04 1.1304E-04 1.1222E-05 9.0125E-06 - 1.4125E+02 1.1320E-04 7.8993E-05 7.5456E-06 6.1014E-06 - 1.5849E+02 7.9154E-05 5.5199E-05 5.0733E-06 4.0996E-06 - 1.7783E+02 5.5398E-05 3.8493E-05 3.4061E-06 2.7208E-06 - 1.9953E+02 3.8875E-05 2.6757E-05 2.2635E-06 1.8618E-06 - 2.2387E+02 2.7285E-05 1.8545E-05 1.5402E-06 1.3127E-06 - 2.5119E+02 1.9124E-05 1.2885E-05 1.0529E-06 8.6759E-07 - 2.8184E+02 1.3357E-05 8.9153E-06 6.9456E-07 5.7654E-07 - 3.1623E+02 9.2854E-06 6.1790E-06 4.8229E-07 3.9348E-07 - 3.5481E+02 6.4871E-06 4.2775E-06 3.2238E-07 2.6137E-07 - 3.9811E+02 4.5027E-06 2.9605E-06 2.1380E-07 1.7268E-07 - 4.4668E+02 3.1253E-06 2.0376E-06 1.4468E-07 1.1683E-07 - 5.0119E+02 2.1753E-06 1.4002E-06 9.8913E-08 7.9942E-08 - 5.6234E+02 1.5170E-06 9.7878E-07 6.8263E-08 5.3671E-08 - 6.3096E+02 1.0498E-06 6.7263E-07 4.5655E-08 3.6068E-08 - 7.0795E+02 7.2961E-07 4.6284E-07 3.0043E-08 2.4081E-08 - 7.9433E+02 5.0574E-07 3.1831E-07 2.0672E-08 1.5859E-08 - 8.9125E+02 3.4870E-07 2.1837E-07 1.4273E-08 1.0498E-08 - 1.0000E+03 2.4083E-07 1.5010E-07 9.6110E-09 7.1595E-09 - 1.1220E+03 1.6572E-07 1.0178E-07 6.2729E-09 4.7531E-09 - 1.2589E+03 1.1341E-07 6.9220E-08 4.1327E-09 3.2157E-09 - 1.4125E+03 7.7262E-08 4.6902E-08 2.8211E-09 2.2059E-09 - 1.5849E+03 5.2940E-08 3.2181E-08 1.8882E-09 1.4751E-09 - 1.7783E+03 3.6346E-08 2.1898E-08 1.2451E-09 9.6212E-10 - 1.9953E+03 2.5054E-08 1.4701E-08 7.9910E-10 6.5826E-10 - 2.2387E+03 1.6905E-08 9.8860E-09 5.4462E-10 4.4825E-10 - 2.5119E+03 1.1312E-08 6.6448E-09 3.7417E-10 2.9216E-10 - 2.8184E+03 7.5179E-09 4.4280E-09 2.4661E-10 1.9531E-10 - 3.1623E+03 5.2421E-09 3.0806E-09 1.6739E-10 1.2433E-10 - 3.5481E+03 3.4456E-09 2.0114E-09 1.1110E-10 7.6867E-11 - 3.9811E+03 2.3265E-09 1.3283E-09 7.2554E-11 5.1391E-11 - 4.4668E+03 1.5500E-09 8.8071E-10 4.7254E-11 3.5197E-11 - 5.0119E+03 1.0438E-09 5.8855E-10 3.2236E-11 2.3874E-11 - 5.6234E+03 6.9792E-10 3.9522E-10 2.1291E-11 1.5281E-11 - 6.3096E+03 4.6059E-10 2.5902E-10 1.3823E-11 9.3736E-12 - 7.0795E+03 3.0806E-10 1.7133E-10 8.9564E-12 6.1965E-12 - 7.9433E+03 2.0281E-10 1.1294E-10 5.7337E-12 4.1392E-12 - 8.9125E+03 1.3275E-10 7.4388E-11 4.0584E-12 2.7038E-12 - 1.0000E+04 8.6714E-11 4.8514E-11 2.7042E-12 1.7669E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6081E+04 1.6551E+04 8.3727E+03 7.0783E+03 - 1.1220E-01 1.3924E+04 1.4352E+04 7.3366E+03 6.1307E+03 - 1.2589E-01 1.1955E+04 1.2363E+04 6.3477E+03 5.1978E+03 - 1.4125E-01 1.0241E+04 1.0567E+04 5.4379E+03 4.4028E+03 - 1.5849E-01 8.6753E+03 8.9310E+03 4.6321E+03 3.7341E+03 - 1.7783E-01 7.2504E+03 7.4522E+03 3.8993E+03 3.1254E+03 - 1.9953E-01 5.9793E+03 6.1549E+03 3.2476E+03 2.5675E+03 - 2.2387E-01 4.8758E+03 5.0087E+03 2.6864E+03 2.0872E+03 - 2.5119E-01 3.9382E+03 4.0522E+03 2.2159E+03 1.6856E+03 - 2.8184E-01 3.1451E+03 3.2435E+03 1.7979E+03 1.3538E+03 - 3.1623E-01 2.4860E+03 2.5511E+03 1.4273E+03 1.0788E+03 - 3.5481E-01 1.9538E+03 2.0074E+03 1.1217E+03 8.5556E+02 - 3.9811E-01 1.5240E+03 1.5668E+03 8.7942E+02 6.6966E+02 - 4.4668E-01 1.1802E+03 1.2110E+03 6.8235E+02 5.1604E+02 - 5.0119E-01 9.0784E+02 9.2806E+02 5.2551E+02 3.9747E+02 - 5.6234E-01 6.9443E+02 7.0733E+02 4.0279E+02 3.0374E+02 - 6.3096E-01 5.2533E+02 5.3408E+02 3.0798E+02 2.2980E+02 - 7.0795E-01 3.9846E+02 4.0112E+02 2.3381E+02 1.7410E+02 - 7.9433E-01 3.0162E+02 3.0089E+02 1.7401E+02 1.2902E+02 - 8.9125E-01 2.2673E+02 2.2428E+02 1.2757E+02 9.5468E+01 - 1.0000E+00 1.6972E+02 1.6687E+02 9.4640E+01 7.1742E+01 - 1.1220E+00 1.2714E+02 1.2350E+02 6.9360E+01 5.2845E+01 - 1.2589E+00 9.4988E+01 9.0879E+01 5.0855E+01 3.8631E+01 - 1.4125E+00 7.0909E+01 6.7084E+01 3.7211E+01 2.8211E+01 - 1.5849E+00 5.2763E+01 4.9486E+01 2.6821E+01 2.0569E+01 - 1.7783E+00 3.8934E+01 3.6231E+01 1.9509E+01 1.4893E+01 - 1.9953E+00 2.8370E+01 2.6220E+01 1.4112E+01 1.0814E+01 - 2.2387E+00 2.0864E+01 1.9160E+01 1.0047E+01 7.8124E+00 - 2.5119E+00 1.5392E+01 1.3918E+01 7.0260E+00 5.4080E+00 - 2.8184E+00 1.1279E+01 9.9840E+00 4.9685E+00 3.7751E+00 - 3.1623E+00 8.2197E+00 7.2276E+00 3.5420E+00 2.7106E+00 - 3.5481E+00 5.9211E+00 5.2193E+00 2.4718E+00 1.8882E+00 - 3.9811E+00 4.2976E+00 3.7455E+00 1.7312E+00 1.3255E+00 - 4.4668E+00 3.1133E+00 2.6672E+00 1.2025E+00 9.2322E-01 - 5.0119E+00 2.2464E+00 1.9056E+00 8.2776E-01 6.2454E-01 - 5.6234E+00 1.6024E+00 1.3525E+00 5.7526E-01 4.2045E-01 - 6.3096E+00 1.1386E+00 9.5632E-01 3.8968E-01 2.8731E-01 - 7.0795E+00 8.1298E-01 6.8052E-01 2.6030E-01 1.9895E-01 - 7.9433E+00 5.8950E-01 4.8309E-01 1.7555E-01 1.3635E-01 - 8.9125E+00 4.2216E-01 3.4141E-01 1.1906E-01 9.0942E-02 - 1.0000E+01 3.0186E-01 2.4283E-01 8.1655E-02 6.1969E-02 - 1.1220E+01 2.1519E-01 1.7304E-01 5.6118E-02 4.2003E-02 - 1.2589E+01 1.5439E-01 1.2343E-01 3.7911E-02 2.7966E-02 - 1.4125E+01 1.0993E-01 8.8218E-02 2.5058E-02 1.8933E-02 - 1.5849E+01 7.7646E-02 6.2300E-02 1.6823E-02 1.2909E-02 - 1.7783E+01 5.5003E-02 4.3125E-02 1.1362E-02 8.7336E-03 - 1.9953E+01 3.8817E-02 3.0642E-02 7.5417E-03 5.7397E-03 - 2.2387E+01 2.8132E-02 2.1973E-02 5.1575E-03 3.7373E-03 - 2.5119E+01 2.0650E-02 1.5542E-02 3.4323E-03 2.6337E-03 - 2.8184E+01 1.4787E-02 1.1146E-02 2.2207E-03 1.8560E-03 - 3.1623E+01 1.0226E-02 7.7770E-03 1.4612E-03 1.1289E-03 - 3.5481E+01 7.2786E-03 5.4845E-03 9.6653E-04 7.6032E-04 - 3.9811E+01 5.1809E-03 3.8802E-03 6.4669E-04 5.0750E-04 - 4.4668E+01 3.6764E-03 2.7437E-03 4.3659E-04 3.4039E-04 - 5.0119E+01 2.5969E-03 1.9258E-03 2.8901E-04 2.2672E-04 - 5.6234E+01 1.8486E-03 1.3546E-03 1.9117E-04 1.4924E-04 - 6.3096E+01 1.3101E-03 9.5522E-04 1.2735E-04 1.0105E-04 - 7.0795E+01 9.2198E-04 6.7746E-04 8.4002E-05 6.9419E-05 - 7.9433E+01 6.5265E-04 4.7638E-04 5.5878E-05 4.5200E-05 - 8.9125E+01 4.6451E-04 3.3346E-04 3.7599E-05 2.9435E-05 - 1.0000E+02 3.2517E-04 2.3171E-04 2.5025E-05 2.0282E-05 - 1.1220E+02 2.2900E-04 1.6180E-04 1.6848E-05 1.3543E-05 - 1.2589E+02 1.6098E-04 1.1341E-04 1.1435E-05 9.0318E-06 - 1.4125E+02 1.1334E-04 7.9080E-05 7.6300E-06 6.1146E-06 - 1.5849E+02 7.9350E-05 5.4986E-05 5.1376E-06 4.0986E-06 - 1.7783E+02 5.5485E-05 3.8411E-05 3.4508E-06 2.7822E-06 - 1.9953E+02 3.9017E-05 2.6821E-05 2.3015E-06 1.8969E-06 - 2.2387E+02 2.7384E-05 1.8671E-05 1.5641E-06 1.2397E-06 - 2.5119E+02 1.9117E-05 1.3045E-05 1.0640E-06 8.5941E-07 - 2.8184E+02 1.3277E-05 8.9820E-06 7.2477E-07 5.9911E-07 - 3.1623E+02 9.2984E-06 6.1934E-06 4.8273E-07 3.9188E-07 - 3.5481E+02 6.4582E-06 4.2688E-06 3.2246E-07 2.6028E-07 - 3.9811E+02 4.5086E-06 2.9606E-06 2.1861E-07 1.7508E-07 - 4.4668E+02 3.1446E-06 2.0572E-06 1.4866E-07 1.1684E-07 - 5.0119E+02 2.1866E-06 1.4229E-06 9.9720E-08 8.0305E-08 - 5.6234E+02 1.5274E-06 9.8222E-07 6.8382E-08 5.5834E-08 - 6.3096E+02 1.0535E-06 6.7065E-07 4.5795E-08 3.7320E-08 - 7.0795E+02 7.2803E-07 4.5889E-07 3.0738E-08 2.4482E-08 - 7.9433E+02 5.0457E-07 3.1643E-07 2.0596E-08 1.6197E-08 - 8.9125E+02 3.4720E-07 2.1699E-07 1.4067E-08 1.0559E-08 - 1.0000E+03 2.4119E-07 1.4994E-07 9.6444E-09 7.2242E-09 - 1.1220E+03 1.6561E-07 1.0157E-07 6.3926E-09 4.9159E-09 - 1.2589E+03 1.1377E-07 6.9516E-08 4.2689E-09 3.2844E-09 - 1.4125E+03 7.7603E-08 4.7503E-08 2.8503E-09 2.1630E-09 - 1.5849E+03 5.3108E-08 3.2223E-08 1.9349E-09 1.4538E-09 - 1.7783E+03 3.6210E-08 2.1731E-08 1.2985E-09 9.4405E-10 - 1.9953E+03 2.4495E-08 1.4657E-08 8.6286E-10 6.2478E-10 - 2.2387E+03 1.6552E-08 9.9598E-09 5.6939E-10 4.1401E-10 - 2.5119E+03 1.1352E-08 6.7139E-09 3.6626E-10 2.7124E-10 - 2.8184E+03 7.6196E-09 4.4534E-09 2.3961E-10 1.7310E-10 - 3.1623E+03 5.2643E-09 3.0462E-09 1.6378E-10 1.2007E-10 - 3.5481E+03 3.4479E-09 2.0119E-09 1.0943E-10 8.0437E-11 - 3.9811E+03 2.3123E-09 1.3479E-09 7.2940E-11 5.5897E-11 - 4.4668E+03 1.5504E-09 8.9743E-10 4.9850E-11 3.6628E-11 - 5.0119E+03 1.0371E-09 5.8803E-10 3.2866E-11 2.4020E-11 - 5.6234E+03 6.8955E-10 3.8381E-10 2.1477E-11 1.5012E-11 - 6.3096E+03 4.6032E-10 2.5935E-10 1.4038E-11 9.7035E-12 - 7.0795E+03 3.0735E-10 1.7123E-10 9.6094E-12 6.6844E-12 - 7.9433E+03 2.0298E-10 1.1249E-10 5.9517E-12 4.0173E-12 - 8.9125E+03 1.3392E-10 7.4748E-11 3.7786E-12 2.6815E-12 - 1.0000E+04 8.8194E-11 4.8698E-11 2.5354E-12 1.8785E-12 -average flux in [cosZ = 0.40 -- 0.50, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5894E+04 1.6318E+04 8.2125E+03 7.0283E+03 - 1.1220E-01 1.3736E+04 1.4135E+04 7.1794E+03 6.0977E+03 - 1.2589E-01 1.1859E+04 1.2177E+04 6.1853E+03 5.1946E+03 - 1.4125E-01 1.0202E+04 1.0404E+04 5.2863E+03 4.4116E+03 - 1.5849E-01 8.5942E+03 8.7717E+03 4.5164E+03 3.6971E+03 - 1.7783E-01 7.1669E+03 7.3326E+03 3.8098E+03 3.0728E+03 - 1.9953E-01 5.9356E+03 6.0473E+03 3.1644E+03 2.5521E+03 - 2.2387E-01 4.8427E+03 4.9181E+03 2.6142E+03 2.0958E+03 - 2.5119E-01 3.9044E+03 3.9752E+03 2.1425E+03 1.6956E+03 - 2.8184E-01 3.1274E+03 3.1870E+03 1.7390E+03 1.3601E+03 - 3.1623E-01 2.4786E+03 2.5338E+03 1.3944E+03 1.0792E+03 - 3.5481E-01 1.9430E+03 1.9829E+03 1.1076E+03 8.5271E+02 - 3.9811E-01 1.5133E+03 1.5378E+03 8.6650E+02 6.6951E+02 - 4.4668E-01 1.1768E+03 1.1954E+03 6.7083E+02 5.1764E+02 - 5.0119E-01 9.0830E+02 9.1656E+02 5.1964E+02 3.9504E+02 - 5.6234E-01 6.9238E+02 6.9234E+02 3.9929E+02 3.0146E+02 - 6.3096E-01 5.2638E+02 5.2780E+02 3.0352E+02 2.2959E+02 - 7.0795E-01 3.9945E+02 4.0098E+02 2.2779E+02 1.7177E+02 - 7.9433E-01 2.9868E+02 2.9876E+02 1.7060E+02 1.2785E+02 - 8.9125E-01 2.2482E+02 2.2180E+02 1.2603E+02 9.6126E+01 - 1.0000E+00 1.6984E+02 1.6545E+02 9.3888E+01 7.1663E+01 - 1.1220E+00 1.2670E+02 1.2325E+02 6.9356E+01 5.2977E+01 - 1.2589E+00 9.5130E+01 9.1404E+01 5.0905E+01 3.9016E+01 - 1.4125E+00 7.1272E+01 6.7606E+01 3.7386E+01 2.8659E+01 - 1.5849E+00 5.3007E+01 4.9616E+01 2.7097E+01 2.0717E+01 - 1.7783E+00 3.9069E+01 3.6159E+01 1.9571E+01 1.4897E+01 - 1.9953E+00 2.8767E+01 2.6409E+01 1.4078E+01 1.0778E+01 - 2.2387E+00 2.1124E+01 1.9186E+01 1.0012E+01 7.7274E+00 - 2.5119E+00 1.5459E+01 1.4012E+01 7.0923E+00 5.5338E+00 - 2.8184E+00 1.1228E+01 1.0031E+01 5.0630E+00 3.8530E+00 - 3.1623E+00 8.1963E+00 7.2138E+00 3.5489E+00 2.6958E+00 - 3.5481E+00 5.9277E+00 5.1343E+00 2.5012E+00 1.8888E+00 - 3.9811E+00 4.2670E+00 3.7005E+00 1.7485E+00 1.3095E+00 - 4.4668E+00 3.0870E+00 2.6813E+00 1.2056E+00 8.9822E-01 - 5.0119E+00 2.2154E+00 1.9056E+00 8.2731E-01 6.2408E-01 - 5.6234E+00 1.5866E+00 1.3532E+00 5.6929E-01 4.3290E-01 - 6.3096E+00 1.1367E+00 9.6095E-01 3.8837E-01 2.9768E-01 - 7.0795E+00 8.1903E-01 6.8595E-01 2.6374E-01 2.0425E-01 - 7.9433E+00 5.8735E-01 4.8737E-01 1.8276E-01 1.3954E-01 - 8.9125E+00 4.1853E-01 3.4217E-01 1.2300E-01 9.4748E-02 - 1.0000E+01 3.0282E-01 2.4598E-01 8.1369E-02 6.2514E-02 - 1.1220E+01 2.1606E-01 1.7439E-01 5.4397E-02 4.1692E-02 - 1.2589E+01 1.5405E-01 1.2279E-01 3.6976E-02 2.7699E-02 - 1.4125E+01 1.0968E-01 8.7076E-02 2.4844E-02 1.8815E-02 - 1.5849E+01 7.8134E-02 6.2330E-02 1.6570E-02 1.2930E-02 - 1.7783E+01 5.5591E-02 4.4559E-02 1.0906E-02 8.6112E-03 - 1.9953E+01 3.9834E-02 3.0992E-02 7.3469E-03 5.8604E-03 - 2.2387E+01 2.8622E-02 2.2000E-02 5.0511E-03 3.9038E-03 - 2.5119E+01 2.0476E-02 1.5663E-02 3.3016E-03 2.5769E-03 - 2.8184E+01 1.4463E-02 1.0928E-02 2.1624E-03 1.6891E-03 - 3.1623E+01 1.0206E-02 7.7456E-03 1.4641E-03 1.1228E-03 - 3.5481E+01 7.2608E-03 5.4774E-03 9.7408E-04 7.5688E-04 - 3.9811E+01 5.1710E-03 3.8746E-03 6.4515E-04 5.0682E-04 - 4.4668E+01 3.6750E-03 2.7308E-03 4.2952E-04 3.3763E-04 - 5.0119E+01 2.6019E-03 1.9234E-03 2.8828E-04 2.2407E-04 - 5.6234E+01 1.8417E-03 1.3597E-03 1.9419E-04 1.4924E-04 - 6.3096E+01 1.3049E-03 9.5717E-04 1.2876E-04 1.0033E-04 - 7.0795E+01 9.2263E-04 6.7104E-04 8.4997E-05 6.7066E-05 - 7.9433E+01 6.5232E-04 4.7540E-04 5.6466E-05 4.5220E-05 - 8.9125E+01 4.6001E-04 3.3622E-04 3.8781E-05 2.9983E-05 - 1.0000E+02 3.2403E-04 2.3174E-04 2.5226E-05 2.0091E-05 - 1.1220E+02 2.2819E-04 1.6176E-04 1.6850E-05 1.3536E-05 - 1.2589E+02 1.6093E-04 1.1286E-04 1.1260E-05 9.1659E-06 - 1.4125E+02 1.1300E-04 7.8932E-05 7.5619E-06 6.1555E-06 - 1.5849E+02 7.9190E-05 5.5210E-05 5.1586E-06 4.0924E-06 - 1.7783E+02 5.5508E-05 3.8421E-05 3.4513E-06 2.7674E-06 - 1.9953E+02 3.8841E-05 2.6519E-05 2.2874E-06 1.9043E-06 - 2.2387E+02 2.7261E-05 1.8506E-05 1.5715E-06 1.2766E-06 - 2.5119E+02 1.9041E-05 1.2884E-05 1.0628E-06 8.4335E-07 - 2.8184E+02 1.3230E-05 8.9604E-06 7.2408E-07 5.3887E-07 - 3.1623E+02 9.2685E-06 6.1902E-06 4.7545E-07 3.8501E-07 - 3.5481E+02 6.4760E-06 4.2878E-06 3.2044E-07 2.6135E-07 - 3.9811E+02 4.5264E-06 2.9702E-06 2.1839E-07 1.7715E-07 - 4.4668E+02 3.1449E-06 2.0494E-06 1.4747E-07 1.1964E-07 - 5.0119E+02 2.1812E-06 1.4137E-06 1.0064E-07 7.9656E-08 - 5.6234E+02 1.5225E-06 9.7754E-07 6.7878E-08 5.3947E-08 - 6.3096E+02 1.0540E-06 6.7303E-07 4.5940E-08 3.5847E-08 - 7.0795E+02 7.3274E-07 4.6045E-07 3.1392E-08 2.3959E-08 - 7.9433E+02 5.0757E-07 3.1648E-07 2.1017E-08 1.6609E-08 - 8.9125E+02 3.5024E-07 2.1716E-07 1.4227E-08 1.0906E-08 - 1.0000E+03 2.4226E-07 1.4934E-07 9.4574E-09 7.3431E-09 - 1.1220E+03 1.6656E-07 1.0089E-07 6.4573E-09 5.0191E-09 - 1.2589E+03 1.1392E-07 6.8897E-08 4.2745E-09 3.2724E-09 - 1.4125E+03 7.7515E-08 4.7079E-08 2.8278E-09 2.1071E-09 - 1.5849E+03 5.2692E-08 3.1863E-08 1.8827E-09 1.4273E-09 - 1.7783E+03 3.6285E-08 2.1402E-08 1.2166E-09 9.8213E-10 - 1.9953E+03 2.4706E-08 1.4548E-08 8.3607E-10 6.6684E-10 - 2.2387E+03 1.6708E-08 9.8611E-09 5.5656E-10 4.1064E-10 - 2.5119E+03 1.1212E-08 6.7585E-09 3.9443E-10 2.7473E-10 - 2.8184E+03 7.5605E-09 4.5357E-09 2.6661E-10 1.8257E-10 - 3.1623E+03 5.2731E-09 3.0695E-09 1.6835E-10 1.2491E-10 - 3.5481E+03 3.4578E-09 2.0013E-09 1.1146E-10 8.3969E-11 - 3.9811E+03 2.3222E-09 1.3385E-09 7.5477E-11 5.4279E-11 - 4.4668E+03 1.5608E-09 9.0751E-10 5.1165E-11 3.3507E-11 - 5.0119E+03 1.0439E-09 6.0899E-10 3.3802E-11 2.3093E-11 - 5.6234E+03 6.9807E-10 3.9844E-10 1.9828E-11 1.5723E-11 - 6.3096E+03 4.6381E-10 2.5887E-10 1.3277E-11 9.8297E-12 - 7.0795E+03 3.0712E-10 1.7060E-10 8.5411E-12 6.5728E-12 - 7.9433E+03 2.0256E-10 1.1389E-10 5.9815E-12 4.2116E-12 - 8.9125E+03 1.3449E-10 7.4198E-11 4.2320E-12 2.5645E-12 - 1.0000E+04 8.9123E-11 4.7774E-11 2.5998E-12 1.6607E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8029E+04 1.8280E+04 9.0789E+03 8.0003E+03 - 1.1220E-01 1.5418E+04 1.5674E+04 7.8393E+03 6.8704E+03 - 1.2589E-01 1.3125E+04 1.3296E+04 6.7275E+03 5.8667E+03 - 1.4125E-01 1.1098E+04 1.1158E+04 5.7335E+03 4.9296E+03 - 1.5849E-01 9.3097E+03 9.3425E+03 4.8118E+03 4.0986E+03 - 1.7783E-01 7.7191E+03 7.7304E+03 4.0114E+03 3.3618E+03 - 1.9953E-01 6.3035E+03 6.3354E+03 3.3152E+03 2.7406E+03 - 2.2387E-01 5.0813E+03 5.1305E+03 2.7122E+03 2.2536E+03 - 2.5119E-01 4.0816E+03 4.1008E+03 2.2101E+03 1.8270E+03 - 2.8184E-01 3.2435E+03 3.2560E+03 1.7715E+03 1.4507E+03 - 3.1623E-01 2.5434E+03 2.5762E+03 1.4093E+03 1.1435E+03 - 3.5481E-01 2.0041E+03 2.0218E+03 1.1219E+03 8.9490E+02 - 3.9811E-01 1.5517E+03 1.5681E+03 8.7689E+02 6.9912E+02 - 4.4668E-01 1.1919E+03 1.2034E+03 6.8103E+02 5.4401E+02 - 5.0119E-01 9.2205E+02 9.2554E+02 5.2548E+02 4.1982E+02 - 5.6234E-01 7.0335E+02 7.0764E+02 4.0566E+02 3.1878E+02 - 6.3096E-01 5.3546E+02 5.3417E+02 3.1121E+02 2.4242E+02 - 7.0795E-01 4.1128E+02 4.0679E+02 2.3429E+02 1.8520E+02 - 7.9433E-01 3.1136E+02 3.0699E+02 1.7660E+02 1.4005E+02 - 8.9125E-01 2.3295E+02 2.2907E+02 1.3375E+02 1.0340E+02 - 1.0000E+00 1.7604E+02 1.7171E+02 9.9145E+01 7.7658E+01 - 1.1220E+00 1.3199E+02 1.2917E+02 7.3790E+01 5.7460E+01 - 1.2589E+00 9.8718E+01 9.6198E+01 5.5018E+01 4.2200E+01 - 1.4125E+00 7.4229E+01 7.1132E+01 4.0451E+01 3.0957E+01 - 1.5849E+00 5.4990E+01 5.2559E+01 2.9644E+01 2.2887E+01 - 1.7783E+00 4.0348E+01 3.8506E+01 2.1579E+01 1.6707E+01 - 1.9953E+00 2.9875E+01 2.8401E+01 1.5720E+01 1.1999E+01 - 2.2387E+00 2.2044E+01 2.0740E+01 1.1461E+01 8.6977E+00 - 2.5119E+00 1.6240E+01 1.5031E+01 8.2192E+00 6.2926E+00 - 2.8184E+00 1.1774E+01 1.0827E+01 5.9566E+00 4.5033E+00 - 3.1623E+00 8.6181E+00 7.8156E+00 4.1278E+00 3.0886E+00 - 3.5481E+00 6.2696E+00 5.6469E+00 2.9109E+00 2.1857E+00 - 3.9811E+00 4.5246E+00 4.0344E+00 2.0645E+00 1.5492E+00 - 4.4668E+00 3.2604E+00 2.8613E+00 1.4253E+00 1.0789E+00 - 5.0119E+00 2.3286E+00 2.0547E+00 9.7898E-01 7.4255E-01 - 5.6234E+00 1.6733E+00 1.4787E+00 6.7271E-01 5.1030E-01 - 6.3096E+00 1.2089E+00 1.0487E+00 4.6990E-01 3.5136E-01 - 7.0795E+00 8.5873E-01 7.3823E-01 3.2401E-01 2.4176E-01 - 7.9433E+00 6.1805E-01 5.1356E-01 2.1470E-01 1.6212E-01 - 8.9125E+00 4.4508E-01 3.6351E-01 1.4513E-01 1.1067E-01 - 1.0000E+01 3.2117E-01 2.6901E-01 1.0238E-01 7.6792E-02 - 1.1220E+01 2.2892E-01 1.8990E-01 6.9186E-02 5.2035E-02 - 1.2589E+01 1.6322E-01 1.3576E-01 4.7315E-02 3.6139E-02 - 1.4125E+01 1.1626E-01 9.5788E-02 3.2071E-02 2.4187E-02 - 1.5849E+01 8.2969E-02 6.7052E-02 2.1594E-02 1.6226E-02 - 1.7783E+01 5.9549E-02 4.7344E-02 1.4480E-02 1.0638E-02 - 1.9953E+01 4.2348E-02 3.3259E-02 9.6184E-03 7.0875E-03 - 2.2387E+01 3.0382E-02 2.3744E-02 6.4895E-03 4.8810E-03 - 2.5119E+01 2.1943E-02 1.7124E-02 4.3513E-03 3.3901E-03 - 2.8184E+01 1.5703E-02 1.1954E-02 2.8479E-03 2.2262E-03 - 3.1623E+01 1.0920E-02 8.4664E-03 1.9007E-03 1.4584E-03 - 3.5481E+01 7.8060E-03 5.9926E-03 1.2608E-03 9.6884E-04 - 3.9811E+01 5.5346E-03 4.2454E-03 8.3472E-04 6.4983E-04 - 4.4668E+01 3.9349E-03 3.0028E-03 5.5723E-04 4.3492E-04 - 5.0119E+01 2.8043E-03 2.1225E-03 3.7136E-04 2.9108E-04 - 5.6234E+01 1.9942E-03 1.4997E-03 2.4631E-04 1.9498E-04 - 6.3096E+01 1.4112E-03 1.0585E-03 1.6405E-04 1.2828E-04 - 7.0795E+01 1.0003E-03 7.4757E-04 1.0807E-04 8.6463E-05 - 7.9433E+01 7.0980E-04 5.2230E-04 7.2156E-05 5.8843E-05 - 8.9125E+01 5.0103E-04 3.6563E-04 4.8591E-05 3.8049E-05 - 1.0000E+02 3.5263E-04 2.5632E-04 3.1811E-05 2.5450E-05 - 1.1220E+02 2.4940E-04 1.7978E-04 2.1352E-05 1.7071E-05 - 1.2589E+02 1.7570E-04 1.2557E-04 1.4237E-05 1.1519E-05 - 1.4125E+02 1.2373E-04 8.7690E-05 9.4759E-06 7.7456E-06 - 1.5849E+02 8.6768E-05 6.1553E-05 6.3703E-06 5.2381E-06 - 1.7783E+02 6.0754E-05 4.3017E-05 4.3087E-06 3.4563E-06 - 1.9953E+02 4.2805E-05 2.9916E-05 2.8983E-06 2.2968E-06 - 2.2387E+02 3.0155E-05 2.0852E-05 1.8625E-06 1.5495E-06 - 2.5119E+02 2.1191E-05 1.4335E-05 1.2587E-06 1.0257E-06 - 2.8184E+02 1.4838E-05 9.9138E-06 8.7179E-07 7.0360E-07 - 3.1623E+02 1.0335E-05 7.0136E-06 5.7915E-07 4.8222E-07 - 3.5481E+02 7.2276E-06 4.8542E-06 3.9007E-07 3.1692E-07 - 3.9811E+02 5.0568E-06 3.3801E-06 2.6411E-07 2.1255E-07 - 4.4668E+02 3.5254E-06 2.3380E-06 1.7902E-07 1.4421E-07 - 5.0119E+02 2.4510E-06 1.6029E-06 1.1557E-07 9.8172E-08 - 5.6234E+02 1.7075E-06 1.1172E-06 7.9794E-08 6.5978E-08 - 6.3096E+02 1.1843E-06 7.7073E-07 5.4903E-08 4.4850E-08 - 7.0795E+02 8.2301E-07 5.3065E-07 3.7970E-08 2.9890E-08 - 7.9433E+02 5.7216E-07 3.6332E-07 2.5597E-08 1.9904E-08 - 8.9125E+02 3.9645E-07 2.4949E-07 1.7257E-08 1.3723E-08 - 1.0000E+03 2.7546E-07 1.7276E-07 1.1683E-08 9.0578E-09 - 1.1220E+03 1.8985E-07 1.1844E-07 7.7628E-09 6.1208E-09 - 1.2589E+03 1.3108E-07 8.0911E-08 5.0471E-09 3.9963E-09 - 1.4125E+03 9.0003E-08 5.5569E-08 3.3504E-09 2.5686E-09 - 1.5849E+03 6.1748E-08 3.7954E-08 2.3259E-09 1.7184E-09 - 1.7783E+03 4.2049E-08 2.5609E-08 1.5395E-09 1.1795E-09 - 1.9953E+03 2.8877E-08 1.7309E-08 1.0506E-09 7.3698E-10 - 2.2387E+03 1.9640E-08 1.1755E-08 6.9832E-10 5.0203E-10 - 2.5119E+03 1.3419E-08 7.9010E-09 4.5681E-10 3.4516E-10 - 2.8184E+03 9.0861E-09 5.3566E-09 3.0580E-10 2.2572E-10 - 3.1623E+03 6.2560E-09 3.6933E-09 2.1003E-10 1.5617E-10 - 3.5481E+03 4.1690E-09 2.4296E-09 1.4238E-10 1.0166E-10 - 3.9811E+03 2.8038E-09 1.6127E-09 9.4667E-11 6.8058E-11 - 4.4668E+03 1.8798E-09 1.0651E-09 6.1813E-11 4.5287E-11 - 5.0119E+03 1.2648E-09 7.1367E-10 3.9775E-11 2.8827E-11 - 5.6234E+03 8.4931E-10 4.7972E-10 2.5932E-11 2.0006E-11 - 6.3096E+03 5.6461E-10 3.1816E-10 1.8399E-11 1.2402E-11 - 7.0795E+03 3.7354E-10 2.1336E-10 1.1575E-11 8.2411E-12 - 7.9433E+03 2.4850E-10 1.4260E-10 7.1258E-12 5.4874E-12 - 8.9125E+03 1.6547E-10 9.2190E-11 4.5893E-12 3.5282E-12 - 1.0000E+04 1.1124E-10 5.9955E-11 3.1554E-12 2.2146E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7820E+04 1.7885E+04 8.8095E+03 7.9778E+03 - 1.1220E-01 1.5228E+04 1.5238E+04 7.6064E+03 6.8483E+03 - 1.2589E-01 1.2957E+04 1.2893E+04 6.4686E+03 5.7720E+03 - 1.4125E-01 1.0938E+04 1.0859E+04 5.5088E+03 4.8675E+03 - 1.5849E-01 9.1806E+03 9.0868E+03 4.6106E+03 4.0646E+03 - 1.7783E-01 7.5578E+03 7.4431E+03 3.8106E+03 3.3518E+03 - 1.9953E-01 6.1438E+03 6.0554E+03 3.1444E+03 2.7525E+03 - 2.2387E-01 4.9676E+03 4.8896E+03 2.5794E+03 2.2403E+03 - 2.5119E-01 3.9801E+03 3.9029E+03 2.0897E+03 1.8038E+03 - 2.8184E-01 3.1759E+03 3.1047E+03 1.6757E+03 1.4337E+03 - 3.1623E-01 2.5038E+03 2.4571E+03 1.3400E+03 1.1323E+03 - 3.5481E-01 1.9572E+03 1.9147E+03 1.0602E+03 8.9457E+02 - 3.9811E-01 1.5192E+03 1.4878E+03 8.3077E+02 6.9680E+02 - 4.4668E-01 1.1760E+03 1.1561E+03 6.3920E+02 5.4201E+02 - 5.0119E-01 9.1277E+02 8.8729E+02 4.9335E+02 4.1686E+02 - 5.6234E-01 6.9934E+02 6.7409E+02 3.8337E+02 3.1718E+02 - 6.3096E-01 5.3255E+02 5.1424E+02 2.9368E+02 2.4283E+02 - 7.0795E-01 4.0289E+02 3.9013E+02 2.2356E+02 1.8343E+02 - 7.9433E-01 3.0453E+02 2.9518E+02 1.7021E+02 1.3687E+02 - 8.9125E-01 2.3214E+02 2.2275E+02 1.2786E+02 1.0273E+02 - 1.0000E+00 1.7314E+02 1.6721E+02 9.5940E+01 7.7368E+01 - 1.1220E+00 1.2973E+02 1.2528E+02 7.1462E+01 5.7245E+01 - 1.2589E+00 9.8632E+01 9.3833E+01 5.2861E+01 4.2141E+01 - 1.4125E+00 7.3376E+01 6.9594E+01 3.8859E+01 3.1038E+01 - 1.5849E+00 5.4156E+01 5.1366E+01 2.8894E+01 2.2928E+01 - 1.7783E+00 4.0678E+01 3.7943E+01 2.1382E+01 1.6791E+01 - 1.9953E+00 3.0451E+01 2.7888E+01 1.5438E+01 1.2023E+01 - 2.2387E+00 2.2217E+01 2.0376E+01 1.1187E+01 8.5609E+00 - 2.5119E+00 1.6081E+01 1.5012E+01 8.1367E+00 6.1542E+00 - 2.8184E+00 1.1828E+01 1.0941E+01 5.8403E+00 4.4661E+00 - 3.1623E+00 8.5595E+00 7.8001E+00 4.1183E+00 3.1376E+00 - 3.5481E+00 6.2273E+00 5.5868E+00 2.9225E+00 2.2070E+00 - 3.9811E+00 4.5248E+00 4.0062E+00 2.0567E+00 1.5389E+00 - 4.4668E+00 3.2522E+00 2.8878E+00 1.4594E+00 1.0699E+00 - 5.0119E+00 2.3198E+00 2.0586E+00 9.9999E-01 7.4476E-01 - 5.6234E+00 1.6758E+00 1.4675E+00 6.9198E-01 5.2036E-01 - 6.3096E+00 1.2148E+00 1.0517E+00 4.7474E-01 3.5209E-01 - 7.0795E+00 8.6928E-01 7.4152E-01 3.1962E-01 2.4059E-01 - 7.9433E+00 6.2050E-01 5.2226E-01 2.2055E-01 1.6679E-01 - 8.9125E+00 4.4805E-01 3.7041E-01 1.5311E-01 1.0974E-01 - 1.0000E+01 3.1748E-01 2.6559E-01 1.0416E-01 7.7465E-02 - 1.1220E+01 2.2671E-01 1.8872E-01 7.0495E-02 5.2720E-02 - 1.2589E+01 1.6240E-01 1.3360E-01 4.7493E-02 3.4827E-02 - 1.4125E+01 1.1601E-01 9.4323E-02 3.1925E-02 2.3598E-02 - 1.5849E+01 8.3504E-02 6.6920E-02 2.1479E-02 1.5781E-02 - 1.7783E+01 5.9687E-02 4.7863E-02 1.4507E-02 1.0579E-02 - 1.9953E+01 4.2005E-02 3.3106E-02 9.7556E-03 7.2467E-03 - 2.2387E+01 3.0063E-02 2.2981E-02 6.5786E-03 4.9145E-03 - 2.5119E+01 2.1641E-02 1.6312E-02 4.4182E-03 3.2789E-03 - 2.8184E+01 1.5309E-02 1.1872E-02 3.0228E-03 2.1414E-03 - 3.1623E+01 1.0947E-02 8.4891E-03 1.8980E-03 1.4690E-03 - 3.5481E+01 7.7832E-03 6.0157E-03 1.2641E-03 9.7171E-04 - 3.9811E+01 5.5462E-03 4.2546E-03 8.4678E-04 6.4902E-04 - 4.4668E+01 3.9458E-03 3.0010E-03 5.6385E-04 4.4037E-04 - 5.0119E+01 2.8057E-03 2.1185E-03 3.7106E-04 2.9505E-04 - 5.6234E+01 1.9942E-03 1.4956E-03 2.4606E-04 1.9504E-04 - 6.3096E+01 1.4147E-03 1.0488E-03 1.6321E-04 1.2894E-04 - 7.0795E+01 1.0011E-03 7.4202E-04 1.0809E-04 8.6702E-05 - 7.9433E+01 7.0869E-04 5.2495E-04 7.2381E-05 5.8269E-05 - 8.9125E+01 5.0290E-04 3.6932E-04 4.8637E-05 3.9264E-05 - 1.0000E+02 3.5400E-04 2.5831E-04 3.2298E-05 2.5592E-05 - 1.1220E+02 2.4933E-04 1.8051E-04 2.1511E-05 1.7069E-05 - 1.2589E+02 1.7578E-04 1.2614E-04 1.4276E-05 1.1449E-05 - 1.4125E+02 1.2377E-04 8.8008E-05 9.4427E-06 7.5986E-06 - 1.5849E+02 8.6895E-05 6.1313E-05 6.4141E-06 5.1071E-06 - 1.7783E+02 6.1208E-05 4.3021E-05 4.3039E-06 3.4129E-06 - 1.9953E+02 4.3011E-05 2.9938E-05 2.8997E-06 2.3172E-06 - 2.2387E+02 3.0124E-05 2.0762E-05 1.9252E-06 1.5853E-06 - 2.5119E+02 2.1136E-05 1.4522E-05 1.2978E-06 1.0533E-06 - 2.8184E+02 1.4777E-05 1.0154E-05 8.6769E-07 7.1221E-07 - 3.1623E+02 1.0338E-05 7.0077E-06 5.7853E-07 4.7481E-07 - 3.5481E+02 7.2133E-06 4.8584E-06 3.8671E-07 3.1915E-07 - 3.9811E+02 5.0204E-06 3.3741E-06 2.6900E-07 2.1237E-07 - 4.4668E+02 3.5005E-06 2.3346E-06 1.8303E-07 1.4419E-07 - 5.0119E+02 2.4496E-06 1.6111E-06 1.2094E-07 9.8522E-08 - 5.6234E+02 1.7060E-06 1.1159E-06 8.0896E-08 6.6565E-08 - 6.3096E+02 1.1855E-06 7.6617E-07 5.4516E-08 4.4447E-08 - 7.0795E+02 8.2452E-07 5.3445E-07 3.7080E-08 2.9828E-08 - 7.9433E+02 5.7390E-07 3.6897E-07 2.4710E-08 1.8993E-08 - 8.9125E+02 3.9767E-07 2.5067E-07 1.6451E-08 1.2647E-08 - 1.0000E+03 2.7485E-07 1.7136E-07 1.1152E-08 8.9804E-09 - 1.1220E+03 1.8945E-07 1.1706E-07 7.5203E-09 6.1335E-09 - 1.2589E+03 1.3011E-07 8.0658E-08 5.0401E-09 4.1404E-09 - 1.4125E+03 8.9665E-08 5.5054E-08 3.5350E-09 2.7536E-09 - 1.5849E+03 6.1587E-08 3.7550E-08 2.4461E-09 1.8115E-09 - 1.7783E+03 4.1961E-08 2.5909E-08 1.5500E-09 1.1592E-09 - 1.9953E+03 2.8745E-08 1.7184E-08 9.9708E-10 7.9450E-10 - 2.2387E+03 1.9625E-08 1.1623E-08 6.6402E-10 5.2962E-10 - 2.5119E+03 1.3471E-08 7.8891E-09 4.4830E-10 3.3701E-10 - 2.8184E+03 9.1756E-09 5.3132E-09 2.9258E-10 2.3031E-10 - 3.1623E+03 6.2736E-09 3.6826E-09 1.9992E-10 1.5323E-10 - 3.5481E+03 4.1194E-09 2.4022E-09 1.3379E-10 1.0005E-10 - 3.9811E+03 2.7891E-09 1.6086E-09 9.0434E-11 6.4576E-11 - 4.4668E+03 1.8765E-09 1.0750E-09 6.1348E-11 4.3279E-11 - 5.0119E+03 1.2624E-09 7.1755E-10 4.0013E-11 3.0068E-11 - 5.6234E+03 8.4481E-10 4.7577E-10 2.5652E-11 1.8432E-11 - 6.3096E+03 5.6240E-10 3.1800E-10 1.6952E-11 1.2184E-11 - 7.0795E+03 3.7673E-10 2.0967E-10 1.1042E-11 8.0307E-12 - 7.9433E+03 2.4795E-10 1.3878E-10 7.4530E-12 5.2271E-12 - 8.9125E+03 1.6629E-10 9.2343E-11 5.2670E-12 3.5064E-12 - 1.0000E+04 1.1103E-10 6.0863E-11 3.4096E-12 2.2023E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7770E+04 1.7697E+04 8.5985E+03 8.0727E+03 - 1.1220E-01 1.5189E+04 1.5029E+04 7.4474E+03 6.8979E+03 - 1.2589E-01 1.2901E+04 1.2698E+04 6.3351E+03 5.8182E+03 - 1.4125E-01 1.0895E+04 1.0678E+04 5.3527E+03 4.9031E+03 - 1.5849E-01 9.1089E+03 8.8808E+03 4.4666E+03 4.0854E+03 - 1.7783E-01 7.5050E+03 7.3204E+03 3.6917E+03 3.3568E+03 - 1.9953E-01 6.1199E+03 5.9543E+03 3.0444E+03 2.7550E+03 - 2.2387E-01 4.9330E+03 4.8080E+03 2.4980E+03 2.2502E+03 - 2.5119E-01 3.9499E+03 3.8441E+03 2.0228E+03 1.8152E+03 - 2.8184E-01 3.1454E+03 3.0361E+03 1.6164E+03 1.4470E+03 - 3.1623E-01 2.4924E+03 2.3915E+03 1.2849E+03 1.1393E+03 - 3.5481E-01 1.9593E+03 1.8814E+03 1.0174E+03 9.0242E+02 - 3.9811E-01 1.5208E+03 1.4505E+03 7.9683E+02 7.0632E+02 - 4.4668E-01 1.1741E+03 1.1153E+03 6.2276E+02 5.4330E+02 - 5.0119E-01 8.9920E+02 8.5558E+02 4.8278E+02 4.1756E+02 - 5.6234E-01 6.9055E+02 6.5650E+02 3.7103E+02 3.1812E+02 - 6.3096E-01 5.2993E+02 5.0372E+02 2.8205E+02 2.4112E+02 - 7.0795E-01 4.0075E+02 3.8245E+02 2.1334E+02 1.8471E+02 - 7.9433E-01 3.0360E+02 2.8894E+02 1.6344E+02 1.4053E+02 - 8.9125E-01 2.3159E+02 2.1905E+02 1.2373E+02 1.0461E+02 - 1.0000E+00 1.7401E+02 1.6457E+02 9.2505E+01 7.7717E+01 - 1.1220E+00 1.3082E+02 1.2348E+02 6.9253E+01 5.7791E+01 - 1.2589E+00 9.8198E+01 9.1920E+01 5.2001E+01 4.2287E+01 - 1.4125E+00 7.3494E+01 6.8644E+01 3.8347E+01 3.1208E+01 - 1.5849E+00 5.4745E+01 5.0612E+01 2.8104E+01 2.2727E+01 - 1.7783E+00 4.0390E+01 3.7594E+01 2.0831E+01 1.6454E+01 - 1.9953E+00 2.9718E+01 2.7733E+01 1.5237E+01 1.2075E+01 - 2.2387E+00 2.2139E+01 2.0392E+01 1.1259E+01 8.7896E+00 - 2.5119E+00 1.6154E+01 1.4886E+01 8.2439E+00 6.2993E+00 - 2.8184E+00 1.1710E+01 1.0779E+01 5.8672E+00 4.4294E+00 - 3.1623E+00 8.5337E+00 7.7871E+00 4.0871E+00 3.1448E+00 - 3.5481E+00 6.1700E+00 5.6114E+00 2.8783E+00 2.2288E+00 - 3.9811E+00 4.4999E+00 4.0359E+00 2.0186E+00 1.5420E+00 - 4.4668E+00 3.2480E+00 2.8943E+00 1.4147E+00 1.0715E+00 - 5.0119E+00 2.3444E+00 2.0386E+00 1.0007E+00 7.5246E-01 - 5.6234E+00 1.6883E+00 1.4504E+00 6.8300E-01 5.0697E-01 - 6.3096E+00 1.2023E+00 1.0415E+00 4.6721E-01 3.4998E-01 - 7.0795E+00 8.5842E-01 7.4168E-01 3.2492E-01 2.4174E-01 - 7.9433E+00 6.1820E-01 5.3180E-01 2.2031E-01 1.6563E-01 - 8.9125E+00 4.4392E-01 3.7492E-01 1.5054E-01 1.1327E-01 - 1.0000E+01 3.1799E-01 2.6628E-01 1.0426E-01 7.7098E-02 - 1.1220E+01 2.2793E-01 1.9062E-01 7.0666E-02 5.2191E-02 - 1.2589E+01 1.6201E-01 1.3565E-01 4.8027E-02 3.5749E-02 - 1.4125E+01 1.1526E-01 9.5709E-02 3.2949E-02 2.3674E-02 - 1.5849E+01 8.1980E-02 6.7681E-02 2.1863E-02 1.5641E-02 - 1.7783E+01 5.9186E-02 4.7452E-02 1.4451E-02 1.0792E-02 - 1.9953E+01 4.2298E-02 3.3737E-02 9.7630E-03 7.1547E-03 - 2.2387E+01 2.9554E-02 2.4018E-02 6.4913E-03 4.7528E-03 - 2.5119E+01 2.0913E-02 1.6955E-02 4.2601E-03 3.2471E-03 - 2.8184E+01 1.5128E-02 1.2164E-02 2.8794E-03 2.1470E-03 - 3.1623E+01 1.0895E-02 8.4582E-03 1.8970E-03 1.4661E-03 - 3.5481E+01 7.7755E-03 5.9858E-03 1.2675E-03 9.7435E-04 - 3.9811E+01 5.5334E-03 4.2256E-03 8.3620E-04 6.4788E-04 - 4.4668E+01 3.9324E-03 2.9864E-03 5.5113E-04 4.3520E-04 - 5.0119E+01 2.8026E-03 2.1088E-03 3.6549E-04 2.9103E-04 - 5.6234E+01 1.9837E-03 1.4964E-03 2.4539E-04 1.9184E-04 - 6.3096E+01 1.4046E-03 1.0491E-03 1.6374E-04 1.2698E-04 - 7.0795E+01 9.9385E-04 7.3460E-04 1.0948E-04 8.5488E-05 - 7.9433E+01 7.0095E-04 5.1869E-04 7.2327E-05 5.7942E-05 - 8.9125E+01 4.9734E-04 3.6583E-04 4.7345E-05 3.7451E-05 - 1.0000E+02 3.5255E-04 2.5538E-04 3.1678E-05 2.5631E-05 - 1.1220E+02 2.4912E-04 1.7887E-04 2.1193E-05 1.7172E-05 - 1.2589E+02 1.7524E-04 1.2571E-04 1.4258E-05 1.1379E-05 - 1.4125E+02 1.2340E-04 8.7865E-05 9.5184E-06 7.6868E-06 - 1.5849E+02 8.6979E-05 6.1011E-05 6.3996E-06 5.1967E-06 - 1.7783E+02 6.0887E-05 4.2596E-05 4.2511E-06 3.4498E-06 - 1.9953E+02 4.2830E-05 2.9997E-05 2.8128E-06 2.3575E-06 - 2.2387E+02 3.0259E-05 2.0807E-05 1.8896E-06 1.5886E-06 - 2.5119E+02 2.1121E-05 1.4384E-05 1.2668E-06 1.0168E-06 - 2.8184E+02 1.4616E-05 1.0050E-05 8.5355E-07 6.8127E-07 - 3.1623E+02 1.0296E-05 7.0235E-06 5.7898E-07 4.6777E-07 - 3.5481E+02 7.1631E-06 4.8804E-06 3.9505E-07 3.1933E-07 - 3.9811E+02 5.0072E-06 3.3663E-06 2.6354E-07 2.1731E-07 - 4.4668E+02 3.5127E-06 2.3250E-06 1.7657E-07 1.4656E-07 - 5.0119E+02 2.4494E-06 1.6135E-06 1.2190E-07 9.7286E-08 - 5.6234E+02 1.7088E-06 1.1144E-06 8.2189E-08 6.5246E-08 - 6.3096E+02 1.1851E-06 7.6470E-07 5.6360E-08 4.3907E-08 - 7.0795E+02 8.2531E-07 5.2889E-07 3.7946E-08 3.0084E-08 - 7.9433E+02 5.6935E-07 3.6321E-07 2.5213E-08 1.9780E-08 - 8.9125E+02 3.9422E-07 2.4983E-07 1.7383E-08 1.3321E-08 - 1.0000E+03 2.7416E-07 1.7368E-07 1.1386E-08 9.0888E-09 - 1.1220E+03 1.8853E-07 1.1825E-07 7.6029E-09 5.9048E-09 - 1.2589E+03 1.3011E-07 8.0889E-08 5.0465E-09 3.8943E-09 - 1.4125E+03 8.9757E-08 5.5130E-08 3.3746E-09 2.7614E-09 - 1.5849E+03 6.1364E-08 3.7550E-08 2.3124E-09 1.8645E-09 - 1.7783E+03 4.1701E-08 2.5805E-08 1.5170E-09 1.1852E-09 - 1.9953E+03 2.8965E-08 1.7368E-08 1.0453E-09 7.8819E-10 - 2.2387E+03 1.9631E-08 1.1744E-08 6.7018E-10 5.3895E-10 - 2.5119E+03 1.3399E-08 7.9607E-09 4.4906E-10 3.5707E-10 - 2.8184E+03 9.1030E-09 5.3498E-09 3.0081E-10 2.2913E-10 - 3.1623E+03 6.2835E-09 3.6292E-09 2.0271E-10 1.5475E-10 - 3.5481E+03 4.1407E-09 2.4096E-09 1.3590E-10 1.0182E-10 - 3.9811E+03 2.7711E-09 1.6334E-09 8.8530E-11 6.6280E-11 - 4.4668E+03 1.8666E-09 1.0866E-09 6.2591E-11 4.6122E-11 - 5.0119E+03 1.2555E-09 7.1811E-10 4.3719E-11 3.0446E-11 - 5.6234E+03 8.4707E-10 4.8157E-10 2.7138E-11 1.8673E-11 - 6.3096E+03 5.5999E-10 3.1600E-10 1.7087E-11 1.2165E-11 - 7.0795E+03 3.7239E-10 2.0972E-10 1.1578E-11 8.1371E-12 - 7.9433E+03 2.4799E-10 1.3917E-10 7.7192E-12 5.6031E-12 - 8.9125E+03 1.6686E-10 9.1447E-11 4.7217E-12 3.7845E-12 - 1.0000E+04 1.0936E-10 6.1236E-11 3.1421E-12 2.5059E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7906E+04 1.7548E+04 8.5833E+03 8.0534E+03 - 1.1220E-01 1.5236E+04 1.4962E+04 7.3972E+03 6.9151E+03 - 1.2589E-01 1.2938E+04 1.2692E+04 6.3364E+03 5.8746E+03 - 1.4125E-01 1.0946E+04 1.0685E+04 5.3574E+03 4.9485E+03 - 1.5849E-01 9.1754E+03 8.8893E+03 4.4511E+03 4.1081E+03 - 1.7783E-01 7.5939E+03 7.3012E+03 3.7063E+03 3.3955E+03 - 1.9953E-01 6.2133E+03 5.9682E+03 3.0720E+03 2.8037E+03 - 2.2387E-01 5.0261E+03 4.8159E+03 2.5038E+03 2.2745E+03 - 2.5119E-01 4.0321E+03 3.8381E+03 2.0245E+03 1.8257E+03 - 2.8184E-01 3.1890E+03 3.0460E+03 1.6296E+03 1.4677E+03 - 3.1623E-01 2.5141E+03 2.3977E+03 1.3026E+03 1.1609E+03 - 3.5481E-01 1.9740E+03 1.8762E+03 1.0246E+03 9.0345E+02 - 3.9811E-01 1.5287E+03 1.4584E+03 7.9705E+02 7.0649E+02 - 4.4668E-01 1.1761E+03 1.1277E+03 6.2204E+02 5.4828E+02 - 5.0119E-01 9.0826E+02 8.6513E+02 4.8245E+02 4.2028E+02 - 5.6234E-01 6.9680E+02 6.5856E+02 3.7082E+02 3.2100E+02 - 6.3096E-01 5.3180E+02 5.0317E+02 2.8400E+02 2.4450E+02 - 7.0795E-01 4.0565E+02 3.8388E+02 2.1775E+02 1.8537E+02 - 7.9433E-01 3.0465E+02 2.8871E+02 1.6502E+02 1.4018E+02 - 8.9125E-01 2.3140E+02 2.1794E+02 1.2326E+02 1.0530E+02 - 1.0000E+00 1.7400E+02 1.6367E+02 9.3069E+01 7.7669E+01 - 1.1220E+00 1.3091E+02 1.2276E+02 7.0025E+01 5.8119E+01 - 1.2589E+00 9.8104E+01 9.2029E+01 5.2335E+01 4.3138E+01 - 1.4125E+00 7.3256E+01 6.8714E+01 3.8806E+01 3.1282E+01 - 1.5849E+00 5.5040E+01 5.0734E+01 2.8793E+01 2.2751E+01 - 1.7783E+00 4.1104E+01 3.7638E+01 2.1134E+01 1.6594E+01 - 1.9953E+00 2.9931E+01 2.7864E+01 1.5319E+01 1.1971E+01 - 2.2387E+00 2.2132E+01 2.0349E+01 1.0973E+01 8.7773E+00 - 2.5119E+00 1.6332E+01 1.4733E+01 8.0295E+00 6.3026E+00 - 2.8184E+00 1.1889E+01 1.0672E+01 5.7778E+00 4.4122E+00 - 3.1623E+00 8.5541E+00 7.7123E+00 4.0727E+00 3.1184E+00 - 3.5481E+00 6.2245E+00 5.5997E+00 2.9007E+00 2.2078E+00 - 3.9811E+00 4.5399E+00 4.0384E+00 2.0321E+00 1.5371E+00 - 4.4668E+00 3.2850E+00 2.9203E+00 1.4113E+00 1.0571E+00 - 5.0119E+00 2.3774E+00 2.1025E+00 9.8724E-01 7.3916E-01 - 5.6234E+00 1.6945E+00 1.4818E+00 6.9230E-01 5.1655E-01 - 6.3096E+00 1.1992E+00 1.0613E+00 4.7664E-01 3.5311E-01 - 7.0795E+00 8.7869E-01 7.5368E-01 3.3217E-01 2.3797E-01 - 7.9433E+00 6.3271E-01 5.2836E-01 2.2852E-01 1.6345E-01 - 8.9125E+00 4.4235E-01 3.6950E-01 1.5349E-01 1.1459E-01 - 1.0000E+01 3.2049E-01 2.6785E-01 1.0351E-01 7.7705E-02 - 1.1220E+01 2.2951E-01 1.9077E-01 6.9892E-02 5.1840E-02 - 1.2589E+01 1.6310E-01 1.3584E-01 4.6672E-02 3.5925E-02 - 1.4125E+01 1.1564E-01 9.5913E-02 3.1774E-02 2.4066E-02 - 1.5849E+01 8.3033E-02 6.7516E-02 2.1355E-02 1.5896E-02 - 1.7783E+01 5.8977E-02 4.8054E-02 1.4287E-02 1.0545E-02 - 1.9953E+01 4.2256E-02 3.4067E-02 9.6662E-03 7.1287E-03 - 2.2387E+01 3.0683E-02 2.3997E-02 6.4182E-03 5.0380E-03 - 2.5119E+01 2.1997E-02 1.7050E-02 4.3017E-03 3.3772E-03 - 2.8184E+01 1.5798E-02 1.1907E-02 2.9046E-03 2.1766E-03 - 3.1623E+01 1.0954E-02 8.4866E-03 1.8989E-03 1.4595E-03 - 3.5481E+01 7.7897E-03 6.0065E-03 1.2626E-03 9.7433E-04 - 3.9811E+01 5.5414E-03 4.2601E-03 8.4026E-04 6.5197E-04 - 4.4668E+01 3.9454E-03 3.0152E-03 5.6554E-04 4.3977E-04 - 5.0119E+01 2.8078E-03 2.1198E-03 3.7755E-04 2.9187E-04 - 5.6234E+01 1.9908E-03 1.4866E-03 2.4905E-04 1.9306E-04 - 6.3096E+01 1.4095E-03 1.0559E-03 1.6410E-04 1.3020E-04 - 7.0795E+01 1.0017E-03 7.4771E-04 1.0909E-04 8.7265E-05 - 7.9433E+01 7.0984E-04 5.2341E-04 7.3718E-05 5.8457E-05 - 8.9125E+01 5.0325E-04 3.6733E-04 4.8109E-05 3.8319E-05 - 1.0000E+02 3.5400E-04 2.5804E-04 3.2169E-05 2.5689E-05 - 1.1220E+02 2.4991E-04 1.8078E-04 2.1436E-05 1.7219E-05 - 1.2589E+02 1.7635E-04 1.2636E-04 1.4337E-05 1.1539E-05 - 1.4125E+02 1.2410E-04 8.8742E-05 9.6640E-06 7.6454E-06 - 1.5849E+02 8.7247E-05 6.1813E-05 6.4338E-06 5.1332E-06 - 1.7783E+02 6.1227E-05 4.3238E-05 4.2828E-06 3.4716E-06 - 1.9953E+02 4.2902E-05 3.0102E-05 2.8009E-06 2.3544E-06 - 2.2387E+02 3.0166E-05 2.0764E-05 1.8743E-06 1.5327E-06 - 2.5119E+02 2.1159E-05 1.4486E-05 1.2809E-06 1.0386E-06 - 2.8184E+02 1.4776E-05 1.0152E-05 8.4338E-07 7.3354E-07 - 3.1623E+02 1.0318E-05 7.0375E-06 5.7255E-07 4.7267E-07 - 3.5481E+02 7.1833E-06 4.8727E-06 3.8648E-07 3.1912E-07 - 3.9811E+02 5.0233E-06 3.3683E-06 2.6278E-07 2.1901E-07 - 4.4668E+02 3.5148E-06 2.3323E-06 1.8031E-07 1.4626E-07 - 5.0119E+02 2.4577E-06 1.6171E-06 1.2125E-07 9.7675E-08 - 5.6234E+02 1.7122E-06 1.1110E-06 8.1603E-08 6.4657E-08 - 6.3096E+02 1.1856E-06 7.6277E-07 5.4995E-08 4.4070E-08 - 7.0795E+02 8.2546E-07 5.2676E-07 3.6972E-08 3.0144E-08 - 7.9433E+02 5.7261E-07 3.6448E-07 2.5305E-08 2.0233E-08 - 8.9125E+02 3.9649E-07 2.5041E-07 1.6775E-08 1.3727E-08 - 1.0000E+03 2.7474E-07 1.7194E-07 1.1133E-08 9.0481E-09 - 1.1220E+03 1.8780E-07 1.1782E-07 7.4595E-09 6.0399E-09 - 1.2589E+03 1.3029E-07 8.0793E-08 5.0933E-09 3.9902E-09 - 1.4125E+03 9.0431E-08 5.4828E-08 3.5665E-09 2.6961E-09 - 1.5849E+03 6.1636E-08 3.7082E-08 2.3447E-09 1.8205E-09 - 1.7783E+03 4.2167E-08 2.5016E-08 1.5633E-09 1.2112E-09 - 1.9953E+03 2.8788E-08 1.7378E-08 1.0141E-09 7.7706E-10 - 2.2387E+03 1.9659E-08 1.1783E-08 7.0455E-10 5.3791E-10 - 2.5119E+03 1.3359E-08 7.9038E-09 5.0130E-10 3.5903E-10 - 2.8184E+03 9.0699E-09 5.2993E-09 3.1358E-10 2.4185E-10 - 3.1623E+03 6.2605E-09 3.6524E-09 2.0743E-10 1.5475E-10 - 3.5481E+03 4.1659E-09 2.4053E-09 1.3718E-10 1.0121E-10 - 3.9811E+03 2.8129E-09 1.6224E-09 9.0216E-11 6.7743E-11 - 4.4668E+03 1.8892E-09 1.0798E-09 6.1005E-11 4.4954E-11 - 5.0119E+03 1.2547E-09 7.2469E-10 3.8508E-11 2.7511E-11 - 5.6234E+03 8.3915E-10 4.8675E-10 2.4755E-11 1.7920E-11 - 6.3096E+03 5.6580E-10 3.2003E-10 1.6804E-11 1.2177E-11 - 7.0795E+03 3.8031E-10 2.1055E-10 1.0915E-11 8.1016E-12 - 7.9433E+03 2.5474E-10 1.3986E-10 7.6765E-12 5.3840E-12 - 8.9125E+03 1.6673E-10 9.1957E-11 4.6297E-12 3.6044E-12 - 1.0000E+04 1.0873E-10 6.0806E-11 2.8679E-12 2.3000E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7984E+04 1.7700E+04 8.7607E+03 8.1452E+03 - 1.1220E-01 1.5332E+04 1.5069E+04 7.5536E+03 7.0452E+03 - 1.2589E-01 1.3078E+04 1.2804E+04 6.4328E+03 6.0068E+03 - 1.4125E-01 1.1103E+04 1.0782E+04 5.4233E+03 5.0133E+03 - 1.5849E-01 9.2975E+03 8.9969E+03 4.5548E+03 4.1668E+03 - 1.7783E-01 7.6771E+03 7.4223E+03 3.7780E+03 3.4730E+03 - 1.9953E-01 6.2749E+03 6.0649E+03 3.1032E+03 2.8442E+03 - 2.2387E-01 5.0985E+03 4.9181E+03 2.5559E+03 2.3044E+03 - 2.5119E-01 4.0847E+03 3.9427E+03 2.0858E+03 1.8660E+03 - 2.8184E-01 3.2295E+03 3.1190E+03 1.6666E+03 1.4887E+03 - 3.1623E-01 2.5459E+03 2.4561E+03 1.3244E+03 1.1708E+03 - 3.5481E-01 1.9988E+03 1.9246E+03 1.0456E+03 9.1970E+02 - 3.9811E-01 1.5514E+03 1.4923E+03 8.1155E+02 7.1946E+02 - 4.4668E-01 1.2004E+03 1.1553E+03 6.3103E+02 5.5546E+02 - 5.0119E-01 9.2095E+02 8.8709E+02 4.9299E+02 4.2903E+02 - 5.6234E-01 7.0744E+02 6.7382E+02 3.7882E+02 3.2772E+02 - 6.3096E-01 5.4036E+02 5.1025E+02 2.8698E+02 2.4702E+02 - 7.0795E-01 4.0859E+02 3.8498E+02 2.1986E+02 1.8623E+02 - 7.9433E-01 3.1050E+02 2.9207E+02 1.6852E+02 1.3881E+02 - 8.9125E-01 2.3445E+02 2.1962E+02 1.2800E+02 1.0381E+02 - 1.0000E+00 1.7525E+02 1.6501E+02 9.4783E+01 7.8419E+01 - 1.1220E+00 1.3137E+02 1.2389E+02 7.0206E+01 5.7961E+01 - 1.2589E+00 9.8610E+01 9.2556E+01 5.2216E+01 4.3202E+01 - 1.4125E+00 7.3322E+01 6.8742E+01 3.8709E+01 3.1922E+01 - 1.5849E+00 5.4623E+01 5.1109E+01 2.8473E+01 2.3218E+01 - 1.7783E+00 4.0574E+01 3.7544E+01 2.1179E+01 1.6861E+01 - 1.9953E+00 3.0183E+01 2.7424E+01 1.5611E+01 1.2137E+01 - 2.2387E+00 2.2341E+01 2.0407E+01 1.1191E+01 8.5902E+00 - 2.5119E+00 1.6281E+01 1.5015E+01 8.0325E+00 6.2365E+00 - 2.8184E+00 1.1823E+01 1.0814E+01 5.7401E+00 4.4425E+00 - 3.1623E+00 8.5552E+00 7.6993E+00 4.0774E+00 3.1382E+00 - 3.5481E+00 6.1977E+00 5.5910E+00 2.8897E+00 2.2044E+00 - 3.9811E+00 4.4746E+00 4.0709E+00 2.0348E+00 1.5356E+00 - 4.4668E+00 3.2567E+00 2.8899E+00 1.4205E+00 1.0711E+00 - 5.0119E+00 2.3367E+00 2.0695E+00 9.9396E-01 7.4403E-01 - 5.6234E+00 1.6729E+00 1.4866E+00 6.8381E-01 5.0546E-01 - 6.3096E+00 1.2046E+00 1.0519E+00 4.6507E-01 3.4382E-01 - 7.0795E+00 8.5745E-01 7.5259E-01 3.1774E-01 2.3392E-01 - 7.9433E+00 6.0953E-01 5.2681E-01 2.2249E-01 1.6067E-01 - 8.9125E+00 4.4169E-01 3.6925E-01 1.5174E-01 1.1230E-01 - 1.0000E+01 3.1482E-01 2.6682E-01 1.0330E-01 7.6648E-02 - 1.1220E+01 2.2438E-01 1.8837E-01 7.0266E-02 5.2434E-02 - 1.2589E+01 1.6161E-01 1.3325E-01 4.7567E-02 3.5468E-02 - 1.4125E+01 1.1541E-01 9.3795E-02 3.1628E-02 2.3217E-02 - 1.5849E+01 8.2357E-02 6.5683E-02 2.1482E-02 1.5363E-02 - 1.7783E+01 5.9238E-02 4.6850E-02 1.4256E-02 1.0440E-02 - 1.9953E+01 4.1622E-02 3.3443E-02 9.4579E-03 7.0691E-03 - 2.2387E+01 2.9459E-02 2.3615E-02 6.1922E-03 4.8329E-03 - 2.5119E+01 2.1416E-02 1.6609E-02 4.1218E-03 3.1686E-03 - 2.8184E+01 1.5428E-02 1.1813E-02 2.8308E-03 2.2102E-03 - 3.1623E+01 1.0878E-02 8.4637E-03 1.8832E-03 1.4521E-03 - 3.5481E+01 7.7521E-03 6.0006E-03 1.2588E-03 9.7068E-04 - 3.9811E+01 5.5201E-03 4.2375E-03 8.3580E-04 6.5505E-04 - 4.4668E+01 3.9264E-03 2.9907E-03 5.5503E-04 4.3455E-04 - 5.0119E+01 2.7931E-03 2.1183E-03 3.7179E-04 2.8612E-04 - 5.6234E+01 1.9922E-03 1.4951E-03 2.4852E-04 1.9107E-04 - 6.3096E+01 1.4087E-03 1.0520E-03 1.6421E-04 1.2981E-04 - 7.0795E+01 9.9540E-04 7.4281E-04 1.0790E-04 8.6980E-05 - 7.9433E+01 7.0730E-04 5.2128E-04 7.0469E-05 5.7321E-05 - 8.9125E+01 5.0367E-04 3.6559E-04 4.7762E-05 3.8418E-05 - 1.0000E+02 3.5252E-04 2.5697E-04 3.2267E-05 2.5877E-05 - 1.1220E+02 2.4870E-04 1.8028E-04 2.1502E-05 1.7265E-05 - 1.2589E+02 1.7540E-04 1.2596E-04 1.4196E-05 1.1390E-05 - 1.4125E+02 1.2324E-04 8.7803E-05 9.2991E-06 7.6927E-06 - 1.5849E+02 8.6844E-05 6.1156E-05 6.2215E-06 5.2108E-06 - 1.7783E+02 6.1023E-05 4.2795E-05 4.2505E-06 3.4783E-06 - 1.9953E+02 4.2794E-05 2.9943E-05 2.8640E-06 2.3219E-06 - 2.2387E+02 3.0121E-05 2.0875E-05 1.8780E-06 1.5638E-06 - 2.5119E+02 2.1129E-05 1.4589E-05 1.3064E-06 1.0490E-06 - 2.8184E+02 1.4753E-05 1.0106E-05 8.6399E-07 7.2309E-07 - 3.1623E+02 1.0311E-05 6.9873E-06 5.8833E-07 4.7990E-07 - 3.5481E+02 7.1976E-06 4.8623E-06 3.9297E-07 3.1964E-07 - 3.9811E+02 5.0357E-06 3.3635E-06 2.6470E-07 2.1424E-07 - 4.4668E+02 3.5049E-06 2.3198E-06 1.8331E-07 1.4453E-07 - 5.0119E+02 2.4418E-06 1.6102E-06 1.2361E-07 9.5864E-08 - 5.6234E+02 1.7070E-06 1.1082E-06 8.1006E-08 6.5306E-08 - 6.3096E+02 1.1852E-06 7.6433E-07 5.5371E-08 4.3217E-08 - 7.0795E+02 8.2642E-07 5.2681E-07 3.7135E-08 2.7933E-08 - 7.9433E+02 5.7292E-07 3.6367E-07 2.4883E-08 1.9090E-08 - 8.9125E+02 3.9389E-07 2.5094E-07 1.6623E-08 1.3262E-08 - 1.0000E+03 2.7379E-07 1.7211E-07 1.1312E-08 9.0377E-09 - 1.1220E+03 1.8868E-07 1.1738E-07 7.6715E-09 6.0740E-09 - 1.2589E+03 1.3034E-07 8.0969E-08 5.1487E-09 4.0427E-09 - 1.4125E+03 8.9048E-08 5.5657E-08 3.6226E-09 2.6672E-09 - 1.5849E+03 6.1008E-08 3.7936E-08 2.4059E-09 1.7408E-09 - 1.7783E+03 4.2178E-08 2.5784E-08 1.5625E-09 1.1314E-09 - 1.9953E+03 2.8902E-08 1.7284E-08 1.0534E-09 8.0510E-10 - 2.2387E+03 1.9705E-08 1.1716E-08 7.0245E-10 5.3641E-10 - 2.5119E+03 1.3538E-08 8.0360E-09 4.8412E-10 3.5367E-10 - 2.8184E+03 9.0986E-09 5.3664E-09 3.2116E-10 2.3827E-10 - 3.1623E+03 6.2258E-09 3.6556E-09 2.0548E-10 1.5427E-10 - 3.5481E+03 4.1387E-09 2.4068E-09 1.3466E-10 1.0439E-10 - 3.9811E+03 2.7811E-09 1.6183E-09 8.8065E-11 6.7986E-11 - 4.4668E+03 1.8697E-09 1.0812E-09 5.7411E-11 4.0135E-11 - 5.0119E+03 1.2567E-09 7.2704E-10 3.8984E-11 2.6940E-11 - 5.6234E+03 8.3628E-10 4.8092E-10 2.6450E-11 1.9412E-11 - 6.3096E+03 5.6280E-10 3.1845E-10 1.7279E-11 1.2933E-11 - 7.0795E+03 3.7278E-10 2.1050E-10 1.1897E-11 8.3644E-12 - 7.9433E+03 2.4883E-10 1.3945E-10 7.5944E-12 4.9366E-12 - 8.9125E+03 1.6631E-10 9.1487E-11 4.9900E-12 3.3172E-12 - 1.0000E+04 1.0964E-10 6.0005E-11 3.0877E-12 2.4981E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8203E+04 1.8140E+04 8.9406E+03 8.1870E+03 - 1.1220E-01 1.5592E+04 1.5508E+04 7.7265E+03 7.0747E+03 - 1.2589E-01 1.3251E+04 1.3160E+04 6.6046E+03 6.0112E+03 - 1.4125E-01 1.1192E+04 1.1086E+04 5.5951E+03 5.0504E+03 - 1.5849E-01 9.4209E+03 9.2512E+03 4.6839E+03 4.2077E+03 - 1.7783E-01 7.8279E+03 7.6445E+03 3.8936E+03 3.4828E+03 - 1.9953E-01 6.3884E+03 6.2524E+03 3.2254E+03 2.8588E+03 - 2.2387E-01 5.1523E+03 5.0458E+03 2.6451E+03 2.2997E+03 - 2.5119E-01 4.1051E+03 4.0346E+03 2.1494E+03 1.8497E+03 - 2.8184E-01 3.2582E+03 3.1954E+03 1.7320E+03 1.4936E+03 - 3.1623E-01 2.5797E+03 2.5137E+03 1.3807E+03 1.1893E+03 - 3.5481E-01 2.0175E+03 1.9601E+03 1.0866E+03 9.3583E+02 - 3.9811E-01 1.5737E+03 1.5231E+03 8.4398E+02 7.2564E+02 - 4.4668E-01 1.2197E+03 1.1847E+03 6.5090E+02 5.5926E+02 - 5.0119E-01 9.3674E+02 9.0714E+02 5.0727E+02 4.3179E+02 - 5.6234E-01 7.1389E+02 6.8608E+02 3.9157E+02 3.3087E+02 - 6.3096E-01 5.4089E+02 5.1847E+02 3.0054E+02 2.4872E+02 - 7.0795E-01 4.0997E+02 3.9327E+02 2.2743E+02 1.8704E+02 - 7.9433E-01 3.1087E+02 2.9679E+02 1.7197E+02 1.4206E+02 - 8.9125E-01 2.3436E+02 2.2575E+02 1.2889E+02 1.0755E+02 - 1.0000E+00 1.7502E+02 1.6760E+02 9.5602E+01 7.9169E+01 - 1.1220E+00 1.3163E+02 1.2547E+02 7.1275E+01 5.8739E+01 - 1.2589E+00 9.9009E+01 9.3427E+01 5.2590E+01 4.3205E+01 - 1.4125E+00 7.3485E+01 6.9632E+01 3.9168E+01 3.1131E+01 - 1.5849E+00 5.4668E+01 5.1455E+01 2.9105E+01 2.2897E+01 - 1.7783E+00 4.0826E+01 3.7617E+01 2.1320E+01 1.6838E+01 - 1.9953E+00 3.0128E+01 2.7727E+01 1.5438E+01 1.2014E+01 - 2.2387E+00 2.2142E+01 1.9989E+01 1.1071E+01 8.6026E+00 - 2.5119E+00 1.6084E+01 1.4434E+01 8.1128E+00 6.2973E+00 - 2.8184E+00 1.1534E+01 1.0736E+01 5.8842E+00 4.5627E+00 - 3.1623E+00 8.5967E+00 7.7956E+00 4.0867E+00 3.1384E+00 - 3.5481E+00 6.2220E+00 5.5903E+00 2.9106E+00 2.2047E+00 - 3.9811E+00 4.5046E+00 4.0101E+00 2.0238E+00 1.5574E+00 - 4.4668E+00 3.2481E+00 2.8861E+00 1.4075E+00 1.0924E+00 - 5.0119E+00 2.3505E+00 2.0739E+00 9.8100E-01 7.5940E-01 - 5.6234E+00 1.6987E+00 1.4865E+00 6.8347E-01 5.1321E-01 - 6.3096E+00 1.2105E+00 1.0536E+00 4.8034E-01 3.5420E-01 - 7.0795E+00 8.5901E-01 7.4809E-01 3.2336E-01 2.4273E-01 - 7.9433E+00 6.1237E-01 5.3046E-01 2.1731E-01 1.6877E-01 - 8.9125E+00 4.4020E-01 3.7383E-01 1.5271E-01 1.1640E-01 - 1.0000E+01 3.2044E-01 2.6635E-01 1.0329E-01 7.8231E-02 - 1.1220E+01 2.2819E-01 1.8927E-01 6.9531E-02 5.2493E-02 - 1.2589E+01 1.6297E-01 1.3579E-01 4.6949E-02 3.5883E-02 - 1.4125E+01 1.1642E-01 9.5430E-02 3.1881E-02 2.4178E-02 - 1.5849E+01 8.3625E-02 6.7148E-02 2.1417E-02 1.5916E-02 - 1.7783E+01 5.9807E-02 4.7666E-02 1.4257E-02 1.0865E-02 - 1.9953E+01 4.2597E-02 3.3858E-02 9.5435E-03 7.3309E-03 - 2.2387E+01 2.9813E-02 2.4125E-02 6.2923E-03 4.7200E-03 - 2.5119E+01 2.0765E-02 1.6999E-02 4.2210E-03 3.3500E-03 - 2.8184E+01 1.5122E-02 1.1968E-02 2.9207E-03 2.3453E-03 - 3.1623E+01 1.0924E-02 8.4997E-03 1.8873E-03 1.4677E-03 - 3.5481E+01 7.7754E-03 6.0031E-03 1.2526E-03 9.7733E-04 - 3.9811E+01 5.5430E-03 4.2423E-03 8.3661E-04 6.4873E-04 - 4.4668E+01 3.9313E-03 2.9897E-03 5.5584E-04 4.3580E-04 - 5.0119E+01 2.7909E-03 2.1099E-03 3.6822E-04 2.8933E-04 - 5.6234E+01 1.9866E-03 1.4926E-03 2.4361E-04 1.9125E-04 - 6.3096E+01 1.4084E-03 1.0550E-03 1.6143E-04 1.2869E-04 - 7.0795E+01 1.0031E-03 7.4223E-04 1.0869E-04 8.7188E-05 - 7.9433E+01 7.1289E-04 5.2290E-04 7.3020E-05 5.8259E-05 - 8.9125E+01 5.0206E-04 3.6530E-04 4.7535E-05 3.8022E-05 - 1.0000E+02 3.5323E-04 2.5653E-04 3.1946E-05 2.5789E-05 - 1.1220E+02 2.4850E-04 1.8047E-04 2.1323E-05 1.7231E-05 - 1.2589E+02 1.7567E-04 1.2615E-04 1.4391E-05 1.1496E-05 - 1.4125E+02 1.2390E-04 8.7644E-05 9.5436E-06 7.6869E-06 - 1.5849E+02 8.6929E-05 6.1490E-05 6.2823E-06 5.1949E-06 - 1.7783E+02 6.1052E-05 4.3143E-05 4.1734E-06 3.4415E-06 - 1.9953E+02 4.2642E-05 2.9985E-05 2.8110E-06 2.3085E-06 - 2.2387E+02 2.9857E-05 2.0800E-05 1.8663E-06 1.5898E-06 - 2.5119E+02 2.1065E-05 1.4463E-05 1.2829E-06 1.0715E-06 - 2.8184E+02 1.4731E-05 1.0023E-05 8.9206E-07 6.8391E-07 - 3.1623E+02 1.0370E-05 6.9712E-06 5.8596E-07 4.6710E-07 - 3.5481E+02 7.2103E-06 4.8380E-06 3.9182E-07 3.1796E-07 - 3.9811E+02 5.0052E-06 3.3358E-06 2.6399E-07 2.2061E-07 - 4.4668E+02 3.4877E-06 2.3119E-06 1.7813E-07 1.4988E-07 - 5.0119E+02 2.4389E-06 1.5984E-06 1.1873E-07 9.6450E-08 - 5.6234E+02 1.7090E-06 1.1117E-06 8.2355E-08 6.5372E-08 - 6.3096E+02 1.1865E-06 7.6549E-07 5.4605E-08 4.4402E-08 - 7.0795E+02 8.2578E-07 5.2749E-07 3.6378E-08 2.9647E-08 - 7.9433E+02 5.7315E-07 3.6336E-07 2.5405E-08 1.9561E-08 - 8.9125E+02 3.9735E-07 2.4850E-07 1.7080E-08 1.3135E-08 - 1.0000E+03 2.7519E-07 1.7205E-07 1.1223E-08 8.8313E-09 - 1.1220E+03 1.8788E-07 1.1863E-07 7.6242E-09 5.9256E-09 - 1.2589E+03 1.2917E-07 8.1051E-08 5.0796E-09 3.9732E-09 - 1.4125E+03 8.8738E-08 5.5156E-08 3.4660E-09 2.7293E-09 - 1.5849E+03 6.1135E-08 3.7268E-08 2.3855E-09 1.9033E-09 - 1.7783E+03 4.2181E-08 2.5486E-08 1.5312E-09 1.1700E-09 - 1.9953E+03 2.8799E-08 1.7410E-08 1.0030E-09 8.0279E-10 - 2.2387E+03 1.9509E-08 1.1707E-08 6.9290E-10 5.1885E-10 - 2.5119E+03 1.3262E-08 7.8817E-09 4.7585E-10 3.4799E-10 - 2.8184E+03 9.0653E-09 5.2754E-09 3.0688E-10 2.4323E-10 - 3.1623E+03 6.2469E-09 3.6587E-09 1.9941E-10 1.5600E-10 - 3.5481E+03 4.1653E-09 2.4290E-09 1.3297E-10 1.0444E-10 - 3.9811E+03 2.8163E-09 1.6213E-09 9.2194E-11 6.6889E-11 - 4.4668E+03 1.8796E-09 1.0824E-09 6.1079E-11 4.1096E-11 - 5.0119E+03 1.2602E-09 7.2430E-10 3.9419E-11 2.6140E-11 - 5.6234E+03 8.4669E-10 4.8287E-10 2.5841E-11 1.7962E-11 - 6.3096E+03 5.6187E-10 3.1886E-10 1.6755E-11 1.2390E-11 - 7.0795E+03 3.7621E-10 2.1431E-10 1.0551E-11 8.1058E-12 - 7.9433E+03 2.5126E-10 1.3970E-10 7.4124E-12 5.3304E-12 - 8.9125E+03 1.6517E-10 9.0782E-11 5.1607E-12 3.5369E-12 - 1.0000E+04 1.0888E-10 6.0571E-11 3.1252E-12 2.3553E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8340E+04 1.8527E+04 9.1797E+03 8.1853E+03 - 1.1220E-01 1.5684E+04 1.5835E+04 7.9415E+03 7.0553E+03 - 1.2589E-01 1.3416E+04 1.3420E+04 6.8196E+03 6.0049E+03 - 1.4125E-01 1.1374E+04 1.1310E+04 5.7801E+03 5.0407E+03 - 1.5849E-01 9.5520E+03 9.4948E+03 4.8773E+03 4.1847E+03 - 1.7783E-01 7.9134E+03 7.8220E+03 4.0681E+03 3.4739E+03 - 1.9953E-01 6.4358E+03 6.3642E+03 3.3415E+03 2.8465E+03 - 2.2387E-01 5.2057E+03 5.1583E+03 2.7506E+03 2.3028E+03 - 2.5119E-01 4.1679E+03 4.1396E+03 2.2434E+03 1.8675E+03 - 2.8184E-01 3.3002E+03 3.2841E+03 1.7976E+03 1.4880E+03 - 3.1623E-01 2.6098E+03 2.5909E+03 1.4338E+03 1.1792E+03 - 3.5481E-01 2.0407E+03 2.0261E+03 1.1384E+03 9.1870E+02 - 3.9811E-01 1.5738E+03 1.5664E+03 8.8855E+02 7.1525E+02 - 4.4668E-01 1.2179E+03 1.2081E+03 6.8750E+02 5.6135E+02 - 5.0119E-01 9.3832E+02 9.2689E+02 5.3250E+02 4.2929E+02 - 5.6234E-01 7.1421E+02 7.0437E+02 4.0816E+02 3.2608E+02 - 6.3096E-01 5.4258E+02 5.3464E+02 3.1356E+02 2.4721E+02 - 7.0795E-01 4.1137E+02 4.0603E+02 2.3832E+02 1.8596E+02 - 7.9433E-01 3.1197E+02 3.0410E+02 1.7751E+02 1.4190E+02 - 8.9125E-01 2.3626E+02 2.3018E+02 1.3141E+02 1.0537E+02 - 1.0000E+00 1.7567E+02 1.7046E+02 9.8151E+01 7.8332E+01 - 1.1220E+00 1.3146E+02 1.2674E+02 7.3388E+01 5.8086E+01 - 1.2589E+00 9.8896E+01 9.4584E+01 5.4061E+01 4.2712E+01 - 1.4125E+00 7.4113E+01 7.0469E+01 3.9591E+01 3.1171E+01 - 1.5849E+00 5.5427E+01 5.2076E+01 2.9240E+01 2.2807E+01 - 1.7783E+00 4.1025E+01 3.8066E+01 2.1614E+01 1.6694E+01 - 1.9953E+00 3.0264E+01 2.8012E+01 1.5734E+01 1.2267E+01 - 2.2387E+00 2.2390E+01 2.0596E+01 1.1335E+01 8.9140E+00 - 2.5119E+00 1.6223E+01 1.5055E+01 8.1412E+00 6.3212E+00 - 2.8184E+00 1.1667E+01 1.0864E+01 5.7793E+00 4.4562E+00 - 3.1623E+00 8.5557E+00 7.8353E+00 4.0971E+00 3.1829E+00 - 3.5481E+00 6.2530E+00 5.6350E+00 2.8963E+00 2.2302E+00 - 3.9811E+00 4.5171E+00 4.0437E+00 2.0372E+00 1.5544E+00 - 4.4668E+00 3.2604E+00 2.9164E+00 1.4296E+00 1.0817E+00 - 5.0119E+00 2.3710E+00 2.0762E+00 9.8911E-01 7.5341E-01 - 5.6234E+00 1.7045E+00 1.4703E+00 6.8810E-01 5.2569E-01 - 6.3096E+00 1.2078E+00 1.0565E+00 4.6475E-01 3.5087E-01 - 7.0795E+00 8.6776E-01 7.5647E-01 3.2546E-01 2.4025E-01 - 7.9433E+00 6.2828E-01 5.3499E-01 2.2655E-01 1.7047E-01 - 8.9125E+00 4.5030E-01 3.7822E-01 1.4777E-01 1.1526E-01 - 1.0000E+01 3.2023E-01 2.6698E-01 1.0323E-01 7.7093E-02 - 1.1220E+01 2.2991E-01 1.8948E-01 7.0258E-02 5.1631E-02 - 1.2589E+01 1.6358E-01 1.3321E-01 4.7231E-02 3.4744E-02 - 1.4125E+01 1.1547E-01 9.4949E-02 3.1626E-02 2.3441E-02 - 1.5849E+01 8.2323E-02 6.7860E-02 2.0921E-02 1.5697E-02 - 1.7783E+01 5.9100E-02 4.6602E-02 1.4190E-02 1.0599E-02 - 1.9953E+01 4.2160E-02 3.2738E-02 9.7495E-03 7.3499E-03 - 2.2387E+01 3.0303E-02 2.3791E-02 6.3784E-03 4.8377E-03 - 2.5119E+01 2.1930E-02 1.7108E-02 4.2214E-03 3.2466E-03 - 2.8184E+01 1.5617E-02 1.2028E-02 2.8732E-03 2.2501E-03 - 3.1623E+01 1.0923E-02 8.4968E-03 1.8992E-03 1.4600E-03 - 3.5481E+01 7.7752E-03 6.0145E-03 1.2634E-03 9.7186E-04 - 3.9811E+01 5.5278E-03 4.2494E-03 8.3904E-04 6.5172E-04 - 4.4668E+01 3.9313E-03 2.9984E-03 5.5947E-04 4.3631E-04 - 5.0119E+01 2.7978E-03 2.1190E-03 3.7102E-04 2.9097E-04 - 5.6234E+01 1.9868E-03 1.4979E-03 2.4631E-04 1.9168E-04 - 6.3096E+01 1.4119E-03 1.0616E-03 1.6386E-04 1.2651E-04 - 7.0795E+01 1.0015E-03 7.4378E-04 1.0903E-04 8.5782E-05 - 7.9433E+01 7.0870E-04 5.2153E-04 7.2916E-05 5.8174E-05 - 8.9125E+01 5.0122E-04 3.6530E-04 4.7892E-05 3.8713E-05 - 1.0000E+02 3.5408E-04 2.5676E-04 3.1917E-05 2.5536E-05 - 1.1220E+02 2.5014E-04 1.8019E-04 2.1299E-05 1.7198E-05 - 1.2589E+02 1.7583E-04 1.2606E-04 1.4260E-05 1.1585E-05 - 1.4125E+02 1.2371E-04 8.7955E-05 9.5216E-06 7.8083E-06 - 1.5849E+02 8.7011E-05 6.1533E-05 6.4162E-06 5.1943E-06 - 1.7783E+02 6.1277E-05 4.2887E-05 4.3404E-06 3.4170E-06 - 1.9953E+02 4.2994E-05 2.9835E-05 2.9181E-06 2.3217E-06 - 2.2387E+02 3.0095E-05 2.0861E-05 1.9352E-06 1.5990E-06 - 2.5119E+02 2.1057E-05 1.4428E-05 1.2832E-06 1.0441E-06 - 2.8184E+02 1.4766E-05 1.0070E-05 8.7710E-07 7.0706E-07 - 3.1623E+02 1.0326E-05 6.9879E-06 5.8634E-07 4.7316E-07 - 3.5481E+02 7.2135E-06 4.8549E-06 3.9236E-07 3.1972E-07 - 3.9811E+02 5.0262E-06 3.3585E-06 2.6517E-07 2.1519E-07 - 4.4668E+02 3.5057E-06 2.3262E-06 1.8114E-07 1.4256E-07 - 5.0119E+02 2.4443E-06 1.6145E-06 1.2217E-07 9.7316E-08 - 5.6234E+02 1.7038E-06 1.1138E-06 8.1687E-08 6.5037E-08 - 6.3096E+02 1.1829E-06 7.6446E-07 5.5786E-08 4.3368E-08 - 7.0795E+02 8.2425E-07 5.2750E-07 3.7332E-08 2.9100E-08 - 7.9433E+02 5.7231E-07 3.6366E-07 2.4793E-08 1.9104E-08 - 8.9125E+02 3.9549E-07 2.4848E-07 1.6688E-08 1.3222E-08 - 1.0000E+03 2.7503E-07 1.7145E-07 1.1441E-08 8.8395E-09 - 1.1220E+03 1.8926E-07 1.1744E-07 7.7535E-09 6.0834E-09 - 1.2589E+03 1.3016E-07 8.0542E-08 5.1231E-09 4.0857E-09 - 1.4125E+03 8.9060E-08 5.5127E-08 3.3989E-09 2.6683E-09 - 1.5849E+03 6.0936E-08 3.7434E-08 2.2297E-09 1.7876E-09 - 1.7783E+03 4.2331E-08 2.5306E-08 1.5117E-09 1.2406E-09 - 1.9953E+03 2.8858E-08 1.7409E-08 1.0714E-09 7.9489E-10 - 2.2387E+03 1.9554E-08 1.1890E-08 7.0402E-10 5.3825E-10 - 2.5119E+03 1.3374E-08 8.0159E-09 4.7030E-10 3.6120E-10 - 2.8184E+03 9.1181E-09 5.3397E-09 3.1916E-10 2.2435E-10 - 3.1623E+03 6.2423E-09 3.6735E-09 2.0256E-10 1.5350E-10 - 3.5481E+03 4.1540E-09 2.4230E-09 1.3162E-10 1.0207E-10 - 3.9811E+03 2.7926E-09 1.6232E-09 8.5382E-11 6.6404E-11 - 4.4668E+03 1.8741E-09 1.0809E-09 5.7386E-11 4.4426E-11 - 5.0119E+03 1.2594E-09 7.1627E-10 3.7854E-11 2.8318E-11 - 5.6234E+03 8.4325E-10 4.7577E-10 2.6188E-11 1.6971E-11 - 6.3096E+03 5.6393E-10 3.1585E-10 1.7327E-11 1.2097E-11 - 7.0795E+03 3.7825E-10 2.0870E-10 1.1196E-11 7.7091E-12 - 7.9433E+03 2.5037E-10 1.3720E-10 7.4948E-12 5.2148E-12 - 8.9125E+03 1.6616E-10 8.9780E-11 4.8052E-12 3.3018E-12 - 1.0000E+04 1.1000E-10 6.0579E-11 3.1938E-12 2.1420E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8458E+04 1.8873E+04 9.4067E+03 8.1419E+03 - 1.1220E-01 1.5761E+04 1.6153E+04 8.1752E+03 7.0104E+03 - 1.2589E-01 1.3453E+04 1.3726E+04 7.0329E+03 5.9547E+03 - 1.4125E-01 1.1382E+04 1.1597E+04 5.9578E+03 5.0150E+03 - 1.5849E-01 9.5626E+03 9.7478E+03 4.9966E+03 4.1880E+03 - 1.7783E-01 7.9516E+03 8.0742E+03 4.1930E+03 3.4718E+03 - 1.9953E-01 6.5135E+03 6.5784E+03 3.4694E+03 2.8353E+03 - 2.2387E-01 5.2558E+03 5.3129E+03 2.8547E+03 2.3023E+03 - 2.5119E-01 4.2023E+03 4.2573E+03 2.3376E+03 1.8526E+03 - 2.8184E-01 3.3341E+03 3.3711E+03 1.8707E+03 1.4781E+03 - 3.1623E-01 2.6116E+03 2.6455E+03 1.4749E+03 1.1790E+03 - 3.5481E-01 2.0310E+03 2.0710E+03 1.1610E+03 9.2605E+02 - 3.9811E-01 1.5859E+03 1.6113E+03 9.1407E+02 7.1717E+02 - 4.4668E-01 1.2312E+03 1.2461E+03 7.1447E+02 5.5036E+02 - 5.0119E-01 9.3909E+02 9.5048E+02 5.4841E+02 4.2026E+02 - 5.6234E-01 7.1380E+02 7.1912E+02 4.1535E+02 3.2177E+02 - 6.3096E-01 5.4516E+02 5.4375E+02 3.1540E+02 2.4758E+02 - 7.0795E-01 4.1204E+02 4.1095E+02 2.3985E+02 1.8703E+02 - 7.9433E-01 3.1018E+02 3.1047E+02 1.8067E+02 1.3972E+02 - 8.9125E-01 2.3329E+02 2.3338E+02 1.3606E+02 1.0476E+02 - 1.0000E+00 1.7486E+02 1.7219E+02 1.0161E+02 7.6745E+01 - 1.1220E+00 1.3183E+02 1.2840E+02 7.5165E+01 5.6876E+01 - 1.2589E+00 9.8702E+01 9.5698E+01 5.5472E+01 4.2595E+01 - 1.4125E+00 7.3318E+01 7.0543E+01 4.0577E+01 3.1407E+01 - 1.5849E+00 5.4249E+01 5.1962E+01 2.9505E+01 2.2862E+01 - 1.7783E+00 4.0275E+01 3.8119E+01 2.1407E+01 1.6738E+01 - 1.9953E+00 3.0057E+01 2.7663E+01 1.5543E+01 1.2082E+01 - 2.2387E+00 2.2359E+01 2.0289E+01 1.1322E+01 8.5806E+00 - 2.5119E+00 1.6428E+01 1.4934E+01 8.0389E+00 6.0984E+00 - 2.8184E+00 1.1839E+01 1.0838E+01 5.7313E+00 4.4257E+00 - 3.1623E+00 8.6028E+00 7.8272E+00 4.1269E+00 3.1496E+00 - 3.5481E+00 6.2752E+00 5.6751E+00 2.9087E+00 2.1994E+00 - 3.9811E+00 4.5338E+00 4.0800E+00 2.0285E+00 1.5358E+00 - 4.4668E+00 3.2659E+00 2.9139E+00 1.4280E+00 1.0772E+00 - 5.0119E+00 2.3501E+00 2.0891E+00 1.0051E+00 7.4192E-01 - 5.6234E+00 1.6995E+00 1.4709E+00 6.9516E-01 5.0535E-01 - 6.3096E+00 1.2330E+00 1.0456E+00 4.7570E-01 3.4999E-01 - 7.0795E+00 8.8386E-01 7.4462E-01 3.2750E-01 2.4282E-01 - 7.9433E+00 6.3559E-01 5.3237E-01 2.1897E-01 1.6540E-01 - 8.9125E+00 4.5073E-01 3.7451E-01 1.4567E-01 1.1364E-01 - 1.0000E+01 3.1983E-01 2.6573E-01 1.0052E-01 7.7109E-02 - 1.1220E+01 2.2959E-01 1.8876E-01 6.7723E-02 5.2777E-02 - 1.2589E+01 1.6320E-01 1.3369E-01 4.6407E-02 3.5792E-02 - 1.4125E+01 1.1586E-01 9.4532E-02 3.1875E-02 2.3987E-02 - 1.5849E+01 8.3688E-02 6.7128E-02 2.1503E-02 1.6454E-02 - 1.7783E+01 6.0109E-02 4.7571E-02 1.4253E-02 1.1010E-02 - 1.9953E+01 4.2133E-02 3.3730E-02 9.5977E-03 7.2716E-03 - 2.2387E+01 2.9756E-02 2.3629E-02 6.3829E-03 4.7105E-03 - 2.5119E+01 2.1127E-02 1.6707E-02 4.2392E-03 3.0630E-03 - 2.8184E+01 1.4969E-02 1.1975E-02 2.8165E-03 2.1390E-03 - 3.1623E+01 1.0932E-02 8.4782E-03 1.9034E-03 1.4577E-03 - 3.5481E+01 7.7961E-03 5.9986E-03 1.2653E-03 9.7870E-04 - 3.9811E+01 5.5518E-03 4.2604E-03 8.3744E-04 6.5131E-04 - 4.4668E+01 3.9524E-03 3.0124E-03 5.5553E-04 4.3399E-04 - 5.0119E+01 2.8120E-03 2.1195E-03 3.6905E-04 2.9110E-04 - 5.6234E+01 1.9955E-03 1.4917E-03 2.4661E-04 1.9382E-04 - 6.3096E+01 1.4138E-03 1.0535E-03 1.6663E-04 1.3155E-04 - 7.0795E+01 1.0032E-03 7.4488E-04 1.1027E-04 8.6981E-05 - 7.9433E+01 7.0797E-04 5.2053E-04 7.2626E-05 5.6112E-05 - 8.9125E+01 5.0075E-04 3.6802E-04 4.7856E-05 3.7409E-05 - 1.0000E+02 3.5350E-04 2.5728E-04 3.1881E-05 2.5399E-05 - 1.1220E+02 2.4925E-04 1.8013E-04 2.1219E-05 1.7014E-05 - 1.2589E+02 1.7600E-04 1.2618E-04 1.4285E-05 1.1317E-05 - 1.4125E+02 1.2376E-04 8.8449E-05 9.4717E-06 7.6268E-06 - 1.5849E+02 8.6826E-05 6.1918E-05 6.2800E-06 5.1166E-06 - 1.7783E+02 6.0973E-05 4.3283E-05 4.2294E-06 3.4783E-06 - 1.9953E+02 4.2656E-05 3.0141E-05 2.8678E-06 2.3068E-06 - 2.2387E+02 2.9909E-05 2.1008E-05 1.9390E-06 1.5078E-06 - 2.5119E+02 2.1023E-05 1.4606E-05 1.3049E-06 1.0437E-06 - 2.8184E+02 1.4742E-05 1.0070E-05 8.7478E-07 7.1496E-07 - 3.1623E+02 1.0275E-05 6.9782E-06 5.8109E-07 4.7655E-07 - 3.5481E+02 7.2044E-06 4.8276E-06 3.8601E-07 3.2455E-07 - 3.9811E+02 5.0339E-06 3.3416E-06 2.6287E-07 2.1661E-07 - 4.4668E+02 3.5148E-06 2.3206E-06 1.7756E-07 1.4229E-07 - 5.0119E+02 2.4539E-06 1.6038E-06 1.2033E-07 9.5826E-08 - 5.6234E+02 1.7078E-06 1.1134E-06 8.2216E-08 6.5697E-08 - 6.3096E+02 1.1929E-06 7.6846E-07 5.4884E-08 4.4506E-08 - 7.0795E+02 8.2938E-07 5.3093E-07 3.7499E-08 2.9965E-08 - 7.9433E+02 5.7231E-07 3.6425E-07 2.5315E-08 1.9679E-08 - 8.9125E+02 3.9543E-07 2.4844E-07 1.7105E-08 1.3328E-08 - 1.0000E+03 2.7509E-07 1.7220E-07 1.1420E-08 8.9078E-09 - 1.1220E+03 1.8991E-07 1.1760E-07 7.6635E-09 5.8155E-09 - 1.2589E+03 1.3014E-07 7.9976E-08 5.1217E-09 4.0021E-09 - 1.4125E+03 8.9513E-08 5.4285E-08 3.4297E-09 2.7230E-09 - 1.5849E+03 6.1716E-08 3.7297E-08 2.3355E-09 1.7545E-09 - 1.7783E+03 4.2361E-08 2.5774E-08 1.5571E-09 1.1705E-09 - 1.9953E+03 2.8938E-08 1.7390E-08 1.0672E-09 8.0841E-10 - 2.2387E+03 1.9631E-08 1.1665E-08 7.1642E-10 5.4818E-10 - 2.5119E+03 1.3423E-08 7.8900E-09 4.6212E-10 3.5375E-10 - 2.8184E+03 9.1086E-09 5.3423E-09 2.8791E-10 2.2887E-10 - 3.1623E+03 6.2698E-09 3.6867E-09 1.9821E-10 1.5555E-10 - 3.5481E+03 4.1169E-09 2.4310E-09 1.3550E-10 9.5484E-11 - 3.9811E+03 2.7925E-09 1.6113E-09 9.3183E-11 6.5680E-11 - 4.4668E+03 1.8831E-09 1.0775E-09 5.9934E-11 4.2680E-11 - 5.0119E+03 1.2554E-09 7.2906E-10 3.8904E-11 2.8549E-11 - 5.6234E+03 8.4102E-10 4.7309E-10 2.5484E-11 2.0425E-11 - 6.3096E+03 5.6162E-10 3.1565E-10 1.7317E-11 1.2957E-11 - 7.0795E+03 3.7449E-10 2.1235E-10 1.1804E-11 8.9527E-12 - 7.9433E+03 2.4898E-10 1.3896E-10 8.1825E-12 5.4787E-12 - 8.9125E+03 1.6551E-10 9.0157E-11 4.9348E-12 3.3304E-12 - 1.0000E+04 1.1016E-10 5.9847E-11 3.2058E-12 2.3544E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8476E+04 1.9015E+04 9.6150E+03 8.1540E+03 - 1.1220E-01 1.5844E+04 1.6320E+04 8.3307E+03 6.9703E+03 - 1.2589E-01 1.3515E+04 1.3950E+04 7.1783E+03 5.9099E+03 - 1.4125E-01 1.1445E+04 1.1813E+04 6.1285E+03 4.9685E+03 - 1.5849E-01 9.6135E+03 9.8890E+03 5.1441E+03 4.1507E+03 - 1.7783E-01 7.9541E+03 8.1748E+03 4.2962E+03 3.4335E+03 - 1.9953E-01 6.5202E+03 6.6923E+03 3.5765E+03 2.8082E+03 - 2.2387E-01 5.2795E+03 5.4011E+03 2.9230E+03 2.2818E+03 - 2.5119E-01 4.2185E+03 4.3509E+03 2.3811E+03 1.8356E+03 - 2.8184E-01 3.3345E+03 3.4728E+03 1.9214E+03 1.4632E+03 - 3.1623E-01 2.6236E+03 2.7173E+03 1.5222E+03 1.1562E+03 - 3.5481E-01 2.0477E+03 2.1157E+03 1.2025E+03 9.0175E+02 - 3.9811E-01 1.5873E+03 1.6363E+03 9.3768E+02 7.0194E+02 - 4.4668E-01 1.2311E+03 1.2600E+03 7.2700E+02 5.4994E+02 - 5.0119E-01 9.4176E+02 9.6740E+02 5.6152E+02 4.2140E+02 - 5.6234E-01 7.1755E+02 7.3425E+02 4.2923E+02 3.1867E+02 - 6.3096E-01 5.4788E+02 5.5249E+02 3.2200E+02 2.4354E+02 - 7.0795E-01 4.1394E+02 4.1684E+02 2.4390E+02 1.8308E+02 - 7.9433E-01 3.0959E+02 3.1278E+02 1.8552E+02 1.3741E+02 - 8.9125E-01 2.3295E+02 2.3337E+02 1.3740E+02 1.0268E+02 - 1.0000E+00 1.7582E+02 1.7499E+02 1.0203E+02 7.6974E+01 - 1.1220E+00 1.3202E+02 1.2913E+02 7.5225E+01 5.6983E+01 - 1.2589E+00 9.9587E+01 9.6879E+01 5.5687E+01 4.2142E+01 - 1.4125E+00 7.4577E+01 7.2274E+01 4.0913E+01 3.1280E+01 - 1.5849E+00 5.5124E+01 5.3228E+01 2.9754E+01 2.2956E+01 - 1.7783E+00 4.0728E+01 3.9012E+01 2.1717E+01 1.6645E+01 - 1.9953E+00 2.9881E+01 2.8415E+01 1.5815E+01 1.2265E+01 - 2.2387E+00 2.2200E+01 2.0835E+01 1.1393E+01 8.8024E+00 - 2.5119E+00 1.6276E+01 1.5282E+01 8.1364E+00 6.2240E+00 - 2.8184E+00 1.1765E+01 1.1130E+01 5.8078E+00 4.3801E+00 - 3.1623E+00 8.6574E+00 7.8152E+00 4.1726E+00 3.1354E+00 - 3.5481E+00 6.2789E+00 5.6632E+00 2.9287E+00 2.2212E+00 - 3.9811E+00 4.5392E+00 4.0863E+00 2.0558E+00 1.5457E+00 - 4.4668E+00 3.2603E+00 2.9182E+00 1.4352E+00 1.0702E+00 - 5.0119E+00 2.3595E+00 2.0916E+00 9.9880E-01 7.5574E-01 - 5.6234E+00 1.7035E+00 1.4911E+00 6.8933E-01 5.2273E-01 - 6.3096E+00 1.2156E+00 1.0523E+00 4.7569E-01 3.5749E-01 - 7.0795E+00 8.6709E-01 7.4418E-01 3.2892E-01 2.4821E-01 - 7.9433E+00 6.1711E-01 5.2757E-01 2.2443E-01 1.7222E-01 - 8.9125E+00 4.4485E-01 3.7786E-01 1.5277E-01 1.1570E-01 - 1.0000E+01 3.1982E-01 2.6696E-01 1.0361E-01 7.8274E-02 - 1.1220E+01 2.2932E-01 1.9011E-01 6.9446E-02 5.3980E-02 - 1.2589E+01 1.6280E-01 1.3589E-01 4.7599E-02 3.6236E-02 - 1.4125E+01 1.1478E-01 9.5856E-02 3.2818E-02 2.3853E-02 - 1.5849E+01 8.2337E-02 6.8364E-02 2.1817E-02 1.5959E-02 - 1.7783E+01 5.9505E-02 4.8560E-02 1.4488E-02 1.0821E-02 - 1.9953E+01 4.2826E-02 3.4367E-02 9.8727E-03 7.2698E-03 - 2.2387E+01 3.0487E-02 2.4305E-02 6.5940E-03 4.8843E-03 - 2.5119E+01 2.1401E-02 1.7172E-02 4.2671E-03 3.4261E-03 - 2.8184E+01 1.5151E-02 1.1895E-02 2.8036E-03 2.1709E-03 - 3.1623E+01 1.0915E-02 8.4491E-03 1.8977E-03 1.4573E-03 - 3.5481E+01 7.7807E-03 5.9853E-03 1.2723E-03 9.7194E-04 - 3.9811E+01 5.5340E-03 4.2316E-03 8.3999E-04 6.5429E-04 - 4.4668E+01 3.9372E-03 3.0024E-03 5.6149E-04 4.3769E-04 - 5.0119E+01 2.8101E-03 2.1328E-03 3.7398E-04 2.9096E-04 - 5.6234E+01 1.9945E-03 1.4997E-03 2.4572E-04 1.9323E-04 - 6.3096E+01 1.4067E-03 1.0456E-03 1.6490E-04 1.2812E-04 - 7.0795E+01 9.9817E-04 7.3682E-04 1.1015E-04 8.5080E-05 - 7.9433E+01 7.0574E-04 5.2060E-04 7.1628E-05 5.7294E-05 - 8.9125E+01 5.0102E-04 3.6453E-04 4.7163E-05 3.8535E-05 - 1.0000E+02 3.5268E-04 2.5691E-04 3.2303E-05 2.5797E-05 - 1.1220E+02 2.4920E-04 1.7988E-04 2.1655E-05 1.7223E-05 - 1.2589E+02 1.7581E-04 1.2612E-04 1.4445E-05 1.1523E-05 - 1.4125E+02 1.2357E-04 8.8161E-05 9.6243E-06 7.7615E-06 - 1.5849E+02 8.6998E-05 6.1406E-05 6.4336E-06 5.1617E-06 - 1.7783E+02 6.1182E-05 4.2776E-05 4.3406E-06 3.4377E-06 - 1.9953E+02 4.2884E-05 2.9749E-05 2.8685E-06 2.3480E-06 - 2.2387E+02 3.0046E-05 2.0757E-05 1.9149E-06 1.6011E-06 - 2.5119E+02 2.1070E-05 1.4462E-05 1.2993E-06 1.0385E-06 - 2.8184E+02 1.4789E-05 1.0153E-05 8.5871E-07 6.9158E-07 - 3.1623E+02 1.0316E-05 6.9899E-06 5.7900E-07 4.7202E-07 - 3.5481E+02 7.1962E-06 4.8580E-06 3.9155E-07 3.1972E-07 - 3.9811E+02 5.0353E-06 3.3670E-06 2.6490E-07 2.1828E-07 - 4.4668E+02 3.5156E-06 2.3282E-06 1.7866E-07 1.4570E-07 - 5.0119E+02 2.4539E-06 1.6069E-06 1.2014E-07 9.6080E-08 - 5.6234E+02 1.7087E-06 1.1103E-06 8.1938E-08 6.5043E-08 - 6.3096E+02 1.1886E-06 7.6368E-07 5.4713E-08 4.4029E-08 - 7.0795E+02 8.2963E-07 5.2420E-07 3.6359E-08 2.9481E-08 - 7.9433E+02 5.7503E-07 3.6179E-07 2.5073E-08 2.0060E-08 - 8.9125E+02 3.9690E-07 2.5055E-07 1.7118E-08 1.3133E-08 - 1.0000E+03 2.7530E-07 1.7149E-07 1.1236E-08 8.6601E-09 - 1.1220E+03 1.8847E-07 1.1705E-07 7.4917E-09 5.7623E-09 - 1.2589E+03 1.3028E-07 8.0008E-08 5.1663E-09 3.8259E-09 - 1.4125E+03 9.0061E-08 5.5084E-08 3.4516E-09 2.5769E-09 - 1.5849E+03 6.1812E-08 3.7444E-08 2.2376E-09 1.7537E-09 - 1.7783E+03 4.2265E-08 2.5406E-08 1.5291E-09 1.2125E-09 - 1.9953E+03 2.8765E-08 1.7566E-08 1.0453E-09 8.0836E-10 - 2.2387E+03 1.9627E-08 1.1951E-08 6.8638E-10 5.3507E-10 - 2.5119E+03 1.3474E-08 8.0000E-09 4.5185E-10 3.5476E-10 - 2.8184E+03 9.0944E-09 5.3103E-09 2.9733E-10 2.3021E-10 - 3.1623E+03 6.2667E-09 3.6643E-09 2.0106E-10 1.5275E-10 - 3.5481E+03 4.1527E-09 2.4126E-09 1.3555E-10 9.8801E-11 - 3.9811E+03 2.8123E-09 1.6122E-09 9.3725E-11 6.2877E-11 - 4.4668E+03 1.8897E-09 1.0945E-09 6.3542E-11 4.1956E-11 - 5.0119E+03 1.2586E-09 7.3189E-10 4.0659E-11 2.8986E-11 - 5.6234E+03 8.4357E-10 4.7683E-10 2.6964E-11 1.8847E-11 - 6.3096E+03 5.6332E-10 3.2159E-10 1.7031E-11 1.2096E-11 - 7.0795E+03 3.7455E-10 2.1427E-10 1.1464E-11 8.1249E-12 - 7.9433E+03 2.4821E-10 1.3909E-10 7.5518E-12 4.6862E-12 - 8.9125E+03 1.6623E-10 9.1813E-11 4.9966E-12 3.0218E-12 - 1.0000E+04 1.0994E-10 6.0984E-11 3.0443E-12 2.3243E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8541E+04 1.9131E+04 9.7062E+03 8.0724E+03 - 1.1220E-01 1.5900E+04 1.6424E+04 8.4464E+03 6.9592E+03 - 1.2589E-01 1.3569E+04 1.3991E+04 7.2540E+03 5.8801E+03 - 1.4125E-01 1.1509E+04 1.1885E+04 6.1447E+03 4.9624E+03 - 1.5849E-01 9.6334E+03 9.9819E+03 5.1854E+03 4.1524E+03 - 1.7783E-01 7.9453E+03 8.2667E+03 4.3432E+03 3.4235E+03 - 1.9953E-01 6.4912E+03 6.7686E+03 3.6035E+03 2.7898E+03 - 2.2387E-01 5.2506E+03 5.4918E+03 2.9814E+03 2.2887E+03 - 2.5119E-01 4.1922E+03 4.3867E+03 2.4344E+03 1.8464E+03 - 2.8184E-01 3.3187E+03 3.4770E+03 1.9452E+03 1.4673E+03 - 3.1623E-01 2.6123E+03 2.7514E+03 1.5561E+03 1.1634E+03 - 3.5481E-01 2.0367E+03 2.1504E+03 1.2270E+03 9.0848E+02 - 3.9811E-01 1.5848E+03 1.6590E+03 9.4520E+02 7.0431E+02 - 4.4668E-01 1.2262E+03 1.2713E+03 7.3582E+02 5.4566E+02 - 5.0119E-01 9.4240E+02 9.6972E+02 5.6968E+02 4.1878E+02 - 5.6234E-01 7.1574E+02 7.3654E+02 4.3498E+02 3.1891E+02 - 6.3096E-01 5.4698E+02 5.5949E+02 3.2934E+02 2.4247E+02 - 7.0795E-01 4.1595E+02 4.2342E+02 2.4885E+02 1.8271E+02 - 7.9433E-01 3.1213E+02 3.1715E+02 1.8887E+02 1.3821E+02 - 8.9125E-01 2.3645E+02 2.3728E+02 1.4112E+02 1.0398E+02 - 1.0000E+00 1.7444E+02 1.7622E+02 1.0347E+02 7.6115E+01 - 1.1220E+00 1.3135E+02 1.3091E+02 7.6680E+01 5.6314E+01 - 1.2589E+00 9.8878E+01 9.6669E+01 5.6411E+01 4.1216E+01 - 1.4125E+00 7.3325E+01 7.1683E+01 4.1569E+01 3.0613E+01 - 1.5849E+00 5.4667E+01 5.3288E+01 3.0338E+01 2.2889E+01 - 1.7783E+00 4.1054E+01 3.8995E+01 2.1552E+01 1.6814E+01 - 1.9953E+00 3.0466E+01 2.8510E+01 1.5699E+01 1.2233E+01 - 2.2387E+00 2.2278E+01 2.0786E+01 1.1624E+01 8.6568E+00 - 2.5119E+00 1.6258E+01 1.4960E+01 8.3734E+00 6.2216E+00 - 2.8184E+00 1.2044E+01 1.0973E+01 5.9072E+00 4.5932E+00 - 3.1623E+00 8.6283E+00 7.9278E+00 4.1205E+00 3.1548E+00 - 3.5481E+00 6.2810E+00 5.6903E+00 2.8834E+00 2.1886E+00 - 3.9811E+00 4.5539E+00 4.0615E+00 2.0245E+00 1.5274E+00 - 4.4668E+00 3.3000E+00 2.9155E+00 1.4218E+00 1.0738E+00 - 5.0119E+00 2.3799E+00 2.0867E+00 9.8639E-01 7.5115E-01 - 5.6234E+00 1.7057E+00 1.4848E+00 6.7934E-01 5.0818E-01 - 6.3096E+00 1.2400E+00 1.0625E+00 4.7963E-01 3.4562E-01 - 7.0795E+00 8.8697E-01 7.5688E-01 3.2733E-01 2.4079E-01 - 7.9433E+00 6.3244E-01 5.3420E-01 2.2653E-01 1.6863E-01 - 8.9125E+00 4.5901E-01 3.8437E-01 1.5820E-01 1.1489E-01 - 1.0000E+01 3.2025E-01 2.6919E-01 1.0304E-01 7.8835E-02 - 1.1220E+01 2.2805E-01 1.9023E-01 6.8931E-02 5.3854E-02 - 1.2589E+01 1.6307E-01 1.3544E-01 4.5706E-02 3.6157E-02 - 1.4125E+01 1.1766E-01 9.6242E-02 3.1177E-02 2.4010E-02 - 1.5849E+01 8.4435E-02 6.7655E-02 2.1543E-02 1.6234E-02 - 1.7783E+01 6.0349E-02 4.7625E-02 1.4199E-02 1.1156E-02 - 1.9953E+01 4.3346E-02 3.3532E-02 9.5032E-03 7.4445E-03 - 2.2387E+01 3.0733E-02 2.4113E-02 6.4823E-03 4.9059E-03 - 2.5119E+01 2.1779E-02 1.7306E-02 4.3269E-03 3.3732E-03 - 2.8184E+01 1.5425E-02 1.2031E-02 2.8926E-03 2.3079E-03 - 3.1623E+01 1.0878E-02 8.4771E-03 1.8886E-03 1.4605E-03 - 3.5481E+01 7.7533E-03 5.9935E-03 1.2601E-03 9.8375E-04 - 3.9811E+01 5.5389E-03 4.2349E-03 8.3734E-04 6.5540E-04 - 4.4668E+01 3.9474E-03 2.9852E-03 5.5778E-04 4.3383E-04 - 5.0119E+01 2.8093E-03 2.1177E-03 3.7196E-04 2.9082E-04 - 5.6234E+01 1.9865E-03 1.4987E-03 2.4687E-04 1.9641E-04 - 6.3096E+01 1.4081E-03 1.0508E-03 1.6385E-04 1.2962E-04 - 7.0795E+01 9.9797E-04 7.4413E-04 1.0893E-04 8.6535E-05 - 7.9433E+01 7.0624E-04 5.2465E-04 7.2990E-05 5.8078E-05 - 8.9125E+01 5.0150E-04 3.6460E-04 4.8857E-05 3.9169E-05 - 1.0000E+02 3.5250E-04 2.5698E-04 3.1646E-05 2.5775E-05 - 1.1220E+02 2.4897E-04 1.8044E-04 2.1240E-05 1.7144E-05 - 1.2589E+02 1.7570E-04 1.2589E-04 1.4279E-05 1.1482E-05 - 1.4125E+02 1.2384E-04 8.7722E-05 9.4491E-06 7.6495E-06 - 1.5849E+02 8.7212E-05 6.1240E-05 6.3292E-06 5.0946E-06 - 1.7783E+02 6.1169E-05 4.2666E-05 4.2404E-06 3.5007E-06 - 1.9953E+02 4.2866E-05 2.9837E-05 2.8140E-06 2.3636E-06 - 2.2387E+02 2.9952E-05 2.0914E-05 1.8658E-06 1.5800E-06 - 2.5119E+02 2.1068E-05 1.4458E-05 1.2638E-06 1.0272E-06 - 2.8184E+02 1.4789E-05 9.9956E-06 8.7098E-07 6.7766E-07 - 3.1623E+02 1.0351E-05 6.9781E-06 5.8243E-07 4.6366E-07 - 3.5481E+02 7.1863E-06 4.8554E-06 3.9831E-07 3.1390E-07 - 3.9811E+02 5.0058E-06 3.3757E-06 2.7043E-07 2.1216E-07 - 4.4668E+02 3.5194E-06 2.3243E-06 1.7999E-07 1.4487E-07 - 5.0119E+02 2.4523E-06 1.5973E-06 1.1981E-07 9.8621E-08 - 5.6234E+02 1.7041E-06 1.1169E-06 8.1487E-08 6.4638E-08 - 6.3096E+02 1.1869E-06 7.6845E-07 5.4867E-08 4.3563E-08 - 7.0795E+02 8.2449E-07 5.2712E-07 3.7296E-08 2.9197E-08 - 7.9433E+02 5.7535E-07 3.6373E-07 2.5350E-08 1.9200E-08 - 8.9125E+02 3.9885E-07 2.5003E-07 1.7154E-08 1.3073E-08 - 1.0000E+03 2.7471E-07 1.7012E-07 1.1258E-08 8.9666E-09 - 1.1220E+03 1.8893E-07 1.1675E-07 7.5114E-09 5.9882E-09 - 1.2589E+03 1.3013E-07 8.0300E-08 5.2085E-09 3.9812E-09 - 1.4125E+03 8.9825E-08 5.5068E-08 3.6033E-09 2.6621E-09 - 1.5849E+03 6.1527E-08 3.7686E-08 2.3631E-09 1.7763E-09 - 1.7783E+03 4.2017E-08 2.5531E-08 1.4955E-09 1.1729E-09 - 1.9953E+03 2.8711E-08 1.7370E-08 1.0284E-09 8.0136E-10 - 2.2387E+03 1.9631E-08 1.1681E-08 7.0441E-10 5.2312E-10 - 2.5119E+03 1.3464E-08 7.9126E-09 4.5687E-10 3.3843E-10 - 2.8184E+03 9.1300E-09 5.3734E-09 3.0159E-10 2.2773E-10 - 3.1623E+03 6.2329E-09 3.6822E-09 2.0401E-10 1.5467E-10 - 3.5481E+03 4.1109E-09 2.4184E-09 1.4172E-10 1.0086E-10 - 3.9811E+03 2.7638E-09 1.6176E-09 9.2625E-11 6.4556E-11 - 4.4668E+03 1.8835E-09 1.0812E-09 6.1218E-11 4.2441E-11 - 5.0119E+03 1.2613E-09 7.2147E-10 4.1589E-11 2.9396E-11 - 5.6234E+03 8.3513E-10 4.8433E-10 2.6517E-11 1.9023E-11 - 6.3096E+03 5.5777E-10 3.1838E-10 1.8238E-11 1.2748E-11 - 7.0795E+03 3.7309E-10 2.1071E-10 1.2099E-11 8.0255E-12 - 7.9433E+03 2.4988E-10 1.4068E-10 7.4890E-12 4.6939E-12 - 8.9125E+03 1.6593E-10 9.3173E-11 5.1315E-12 3.3015E-12 - 1.0000E+04 1.1020E-10 6.0771E-11 3.4970E-12 2.2531E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8369E+04 1.9012E+04 9.6253E+03 8.0368E+03 - 1.1220E-01 1.5805E+04 1.6304E+04 8.3714E+03 6.9269E+03 - 1.2589E-01 1.3481E+04 1.3930E+04 7.1584E+03 5.8632E+03 - 1.4125E-01 1.1433E+04 1.1789E+04 6.1103E+03 4.9263E+03 - 1.5849E-01 9.5826E+03 9.8760E+03 5.1628E+03 4.1148E+03 - 1.7783E-01 7.9339E+03 8.2103E+03 4.2991E+03 3.4155E+03 - 1.9953E-01 6.4852E+03 6.7225E+03 3.5778E+03 2.8024E+03 - 2.2387E-01 5.2423E+03 5.4394E+03 2.9530E+03 2.2693E+03 - 2.5119E-01 4.1959E+03 4.3549E+03 2.4069E+03 1.8256E+03 - 2.8184E-01 3.3294E+03 3.4587E+03 1.9312E+03 1.4575E+03 - 3.1623E-01 2.6302E+03 2.7295E+03 1.5389E+03 1.1482E+03 - 3.5481E-01 2.0527E+03 2.1230E+03 1.2148E+03 8.9901E+02 - 3.9811E-01 1.5890E+03 1.6493E+03 9.4857E+02 7.0355E+02 - 4.4668E-01 1.2230E+03 1.2715E+03 7.4132E+02 5.4157E+02 - 5.0119E-01 9.3384E+02 9.6965E+02 5.7292E+02 4.1451E+02 - 5.6234E-01 7.1328E+02 7.3750E+02 4.3426E+02 3.1645E+02 - 6.3096E-01 5.4443E+02 5.6006E+02 3.3085E+02 2.3887E+02 - 7.0795E-01 4.1529E+02 4.2318E+02 2.4936E+02 1.8018E+02 - 7.9433E-01 3.1390E+02 3.1447E+02 1.8577E+02 1.3788E+02 - 8.9125E-01 2.3550E+02 2.3625E+02 1.3942E+02 1.0467E+02 - 1.0000E+00 1.7471E+02 1.7674E+02 1.0310E+02 7.6266E+01 - 1.1220E+00 1.3135E+02 1.3164E+02 7.5531E+01 5.6504E+01 - 1.2589E+00 9.8427E+01 9.7210E+01 5.5572E+01 4.1987E+01 - 1.4125E+00 7.3932E+01 7.1986E+01 4.1008E+01 3.0941E+01 - 1.5849E+00 5.5115E+01 5.2776E+01 2.9750E+01 2.2629E+01 - 1.7783E+00 4.0719E+01 3.8670E+01 2.1673E+01 1.6683E+01 - 1.9953E+00 3.0161E+01 2.8479E+01 1.5836E+01 1.2009E+01 - 2.2387E+00 2.2099E+01 2.0771E+01 1.1421E+01 8.7270E+00 - 2.5119E+00 1.6065E+01 1.5084E+01 8.1177E+00 6.3137E+00 - 2.8184E+00 1.1927E+01 1.0838E+01 5.8502E+00 4.4701E+00 - 3.1623E+00 8.5800E+00 7.8517E+00 4.1755E+00 3.1306E+00 - 3.5481E+00 6.2481E+00 5.6796E+00 2.9137E+00 2.1924E+00 - 3.9811E+00 4.5468E+00 4.0662E+00 2.0298E+00 1.5264E+00 - 4.4668E+00 3.2913E+00 2.9013E+00 1.4198E+00 1.0737E+00 - 5.0119E+00 2.3579E+00 2.0913E+00 9.9256E-01 7.4775E-01 - 5.6234E+00 1.6976E+00 1.4909E+00 6.8096E-01 5.1456E-01 - 6.3096E+00 1.2210E+00 1.0465E+00 4.6621E-01 3.5260E-01 - 7.0795E+00 8.6946E-01 7.4182E-01 3.3093E-01 2.3949E-01 - 7.9433E+00 6.2289E-01 5.4111E-01 2.2827E-01 1.6339E-01 - 8.9125E+00 4.4840E-01 3.8116E-01 1.4993E-01 1.1343E-01 - 1.0000E+01 3.2023E-01 2.6501E-01 1.0189E-01 7.8123E-02 - 1.1220E+01 2.2802E-01 1.8686E-01 6.9702E-02 5.3370E-02 - 1.2589E+01 1.6298E-01 1.3372E-01 4.7317E-02 3.5929E-02 - 1.4125E+01 1.1560E-01 9.6029E-02 3.1839E-02 2.3760E-02 - 1.5849E+01 8.2816E-02 6.8036E-02 2.1207E-02 1.5752E-02 - 1.7783E+01 5.9414E-02 4.8180E-02 1.4265E-02 1.0791E-02 - 1.9953E+01 4.2067E-02 3.3647E-02 9.4270E-03 7.3480E-03 - 2.2387E+01 3.0328E-02 2.3642E-02 6.1097E-03 4.8621E-03 - 2.5119E+01 2.1798E-02 1.6989E-02 4.0724E-03 3.1517E-03 - 2.8184E+01 1.5480E-02 1.1862E-02 2.7878E-03 2.1628E-03 - 3.1623E+01 1.0919E-02 8.4805E-03 1.8954E-03 1.4666E-03 - 3.5481E+01 7.7529E-03 5.9927E-03 1.2632E-03 9.7797E-04 - 3.9811E+01 5.5292E-03 4.2372E-03 8.3957E-04 6.5215E-04 - 4.4668E+01 3.9452E-03 3.0022E-03 5.5282E-04 4.3479E-04 - 5.0119E+01 2.8102E-03 2.1274E-03 3.6873E-04 2.9246E-04 - 5.6234E+01 2.0022E-03 1.5004E-03 2.5159E-04 1.9404E-04 - 6.3096E+01 1.4167E-03 1.0500E-03 1.6752E-04 1.2975E-04 - 7.0795E+01 9.9717E-04 7.4172E-04 1.0849E-04 8.8003E-05 - 7.9433E+01 7.0743E-04 5.2400E-04 7.1217E-05 5.9314E-05 - 8.9125E+01 5.0073E-04 3.6608E-04 4.8216E-05 3.9768E-05 - 1.0000E+02 3.5320E-04 2.5664E-04 3.2112E-05 2.5750E-05 - 1.1220E+02 2.4902E-04 1.7997E-04 2.1233E-05 1.7077E-05 - 1.2589E+02 1.7573E-04 1.2615E-04 1.4231E-05 1.1446E-05 - 1.4125E+02 1.2373E-04 8.7691E-05 9.5172E-06 7.7027E-06 - 1.5849E+02 8.7016E-05 6.1055E-05 6.2578E-06 5.1264E-06 - 1.7783E+02 6.0991E-05 4.2811E-05 4.1858E-06 3.4595E-06 - 1.9953E+02 4.2859E-05 2.9780E-05 2.7833E-06 2.3741E-06 - 2.2387E+02 3.0166E-05 2.0663E-05 1.8786E-06 1.5920E-06 - 2.5119E+02 2.1001E-05 1.4450E-05 1.3032E-06 1.0342E-06 - 2.8184E+02 1.4651E-05 1.0121E-05 8.4604E-07 6.9535E-07 - 3.1623E+02 1.0318E-05 6.9956E-06 5.8016E-07 4.6805E-07 - 3.5481E+02 7.1823E-06 4.8468E-06 3.9086E-07 3.1373E-07 - 3.9811E+02 5.0284E-06 3.3472E-06 2.6540E-07 2.1043E-07 - 4.4668E+02 3.5253E-06 2.3154E-06 1.8061E-07 1.4331E-07 - 5.0119E+02 2.4525E-06 1.6026E-06 1.2184E-07 9.7874E-08 - 5.6234E+02 1.7084E-06 1.1144E-06 8.2575E-08 6.5373E-08 - 6.3096E+02 1.1933E-06 7.6918E-07 5.5168E-08 4.4027E-08 - 7.0795E+02 8.2660E-07 5.2885E-07 3.6366E-08 3.0084E-08 - 7.9433E+02 5.7044E-07 3.6342E-07 2.4994E-08 1.9875E-08 - 8.9125E+02 3.9863E-07 2.5018E-07 1.7454E-08 1.2943E-08 - 1.0000E+03 2.7694E-07 1.7167E-07 1.1600E-08 8.8696E-09 - 1.1220E+03 1.9041E-07 1.1707E-07 7.4880E-09 6.0143E-09 - 1.2589E+03 1.3039E-07 8.0650E-08 4.9575E-09 3.9172E-09 - 1.4125E+03 8.9075E-08 5.5345E-08 3.4221E-09 2.6554E-09 - 1.5849E+03 6.1670E-08 3.7850E-08 2.4634E-09 1.8841E-09 - 1.7783E+03 4.2303E-08 2.5969E-08 1.6747E-09 1.2141E-09 - 1.9953E+03 2.8810E-08 1.7251E-08 1.0558E-09 8.0301E-10 - 2.2387E+03 1.9588E-08 1.1703E-08 6.9112E-10 5.4199E-10 - 2.5119E+03 1.3400E-08 8.0508E-09 4.3801E-10 3.5524E-10 - 2.8184E+03 9.1408E-09 5.3403E-09 2.9241E-10 2.3617E-10 - 3.1623E+03 6.2766E-09 3.6416E-09 2.0410E-10 1.5210E-10 - 3.5481E+03 4.1639E-09 2.4177E-09 1.3800E-10 1.0183E-10 - 3.9811E+03 2.8097E-09 1.5929E-09 8.7873E-11 6.6947E-11 - 4.4668E+03 1.8849E-09 1.0548E-09 6.0520E-11 4.3036E-11 - 5.0119E+03 1.2506E-09 7.1857E-10 4.2609E-11 2.8515E-11 - 5.6234E+03 8.4226E-10 4.8220E-10 2.7646E-11 1.9188E-11 - 6.3096E+03 5.6086E-10 3.1646E-10 1.7439E-11 1.2251E-11 - 7.0795E+03 3.7329E-10 2.0985E-10 1.1051E-11 7.7830E-12 - 7.9433E+03 2.4792E-10 1.3862E-10 7.4462E-12 4.8930E-12 - 8.9125E+03 1.6348E-10 9.1898E-11 4.9705E-12 3.1755E-12 - 1.0000E+04 1.0942E-10 6.0357E-11 3.3375E-12 2.2100E-12 -average flux in [cosZ = 0.30 -- 0.40, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8202E+04 1.8714E+04 9.4362E+03 8.0076E+03 - 1.1220E-01 1.5579E+04 1.6062E+04 8.2004E+03 6.8971E+03 - 1.2589E-01 1.3321E+04 1.3668E+04 7.0299E+03 5.8604E+03 - 1.4125E-01 1.1264E+04 1.1558E+04 5.9863E+03 4.9467E+03 - 1.5849E-01 9.4348E+03 9.7065E+03 5.0483E+03 4.1229E+03 - 1.7783E-01 7.8056E+03 8.0335E+03 4.2112E+03 3.3726E+03 - 1.9953E-01 6.3703E+03 6.5788E+03 3.4914E+03 2.7602E+03 - 2.2387E-01 5.1752E+03 5.3393E+03 2.8626E+03 2.2664E+03 - 2.5119E-01 4.1742E+03 4.2729E+03 2.3265E+03 1.8183E+03 - 2.8184E-01 3.3203E+03 3.3904E+03 1.8754E+03 1.4465E+03 - 3.1623E-01 2.6054E+03 2.6741E+03 1.4915E+03 1.1428E+03 - 3.5481E-01 2.0334E+03 2.0933E+03 1.1810E+03 8.9831E+02 - 3.9811E-01 1.5799E+03 1.6198E+03 9.2287E+02 6.9887E+02 - 4.4668E-01 1.2130E+03 1.2419E+03 7.1465E+02 5.4000E+02 - 5.0119E-01 9.3120E+02 9.5258E+02 5.5088E+02 4.1668E+02 - 5.6234E-01 7.1134E+02 7.2633E+02 4.2248E+02 3.1879E+02 - 6.3096E-01 5.3680E+02 5.5535E+02 3.2341E+02 2.4187E+02 - 7.0795E-01 4.0787E+02 4.1930E+02 2.4352E+02 1.8365E+02 - 7.9433E-01 3.1065E+02 3.1329E+02 1.8428E+02 1.3873E+02 - 8.9125E-01 2.3538E+02 2.3617E+02 1.3823E+02 1.0306E+02 - 1.0000E+00 1.7666E+02 1.7581E+02 1.0181E+02 7.6599E+01 - 1.1220E+00 1.3207E+02 1.3057E+02 7.5876E+01 5.6950E+01 - 1.2589E+00 9.8769E+01 9.7003E+01 5.5970E+01 4.2339E+01 - 1.4125E+00 7.3477E+01 7.1749E+01 4.0903E+01 3.0939E+01 - 1.5849E+00 5.4775E+01 5.2488E+01 3.0159E+01 2.2643E+01 - 1.7783E+00 4.1032E+01 3.8863E+01 2.2053E+01 1.6507E+01 - 1.9953E+00 3.0515E+01 2.8519E+01 1.5935E+01 1.2034E+01 - 2.2387E+00 2.2290E+01 2.0684E+01 1.1406E+01 8.7381E+00 - 2.5119E+00 1.6203E+01 1.4926E+01 8.1784E+00 6.2968E+00 - 2.8184E+00 1.1820E+01 1.0776E+01 5.8539E+00 4.4095E+00 - 3.1623E+00 8.6529E+00 7.8262E+00 4.1552E+00 3.1227E+00 - 3.5481E+00 6.2916E+00 5.6441E+00 2.9230E+00 2.2170E+00 - 3.9811E+00 4.5386E+00 4.0794E+00 2.0428E+00 1.5608E+00 - 4.4668E+00 3.2811E+00 2.9223E+00 1.4497E+00 1.0872E+00 - 5.0119E+00 2.3899E+00 2.0928E+00 1.0075E+00 7.6475E-01 - 5.6234E+00 1.7214E+00 1.4923E+00 6.8687E-01 5.2914E-01 - 6.3096E+00 1.2240E+00 1.0656E+00 4.7902E-01 3.5564E-01 - 7.0795E+00 8.7808E-01 7.5514E-01 3.3352E-01 2.4584E-01 - 7.9433E+00 6.3190E-01 5.3102E-01 2.2576E-01 1.6970E-01 - 8.9125E+00 4.4496E-01 3.7198E-01 1.5048E-01 1.1488E-01 - 1.0000E+01 3.1726E-01 2.6602E-01 1.0168E-01 7.6994E-02 - 1.1220E+01 2.2634E-01 1.8751E-01 6.9130E-02 5.1273E-02 - 1.2589E+01 1.6048E-01 1.3168E-01 4.7572E-02 3.4604E-02 - 1.4125E+01 1.1484E-01 9.3109E-02 3.1734E-02 2.3500E-02 - 1.5849E+01 8.1842E-02 6.6257E-02 2.0894E-02 1.6374E-02 - 1.7783E+01 5.8537E-02 4.7125E-02 1.4007E-02 1.0989E-02 - 1.9953E+01 4.2015E-02 3.3577E-02 9.3283E-03 7.2843E-03 - 2.2387E+01 3.0167E-02 2.3571E-02 6.3441E-03 4.6836E-03 - 2.5119E+01 2.1638E-02 1.6673E-02 4.3856E-03 3.0646E-03 - 2.8184E+01 1.5410E-02 1.1960E-02 2.8961E-03 2.2235E-03 - 3.1623E+01 1.0915E-02 8.5023E-03 1.8967E-03 1.4625E-03 - 3.5481E+01 7.7806E-03 6.0295E-03 1.2631E-03 9.7419E-04 - 3.9811E+01 5.5362E-03 4.2569E-03 8.3807E-04 6.4743E-04 - 4.4668E+01 3.9374E-03 3.0100E-03 5.6037E-04 4.3231E-04 - 5.0119E+01 2.7975E-03 2.1173E-03 3.7347E-04 2.8977E-04 - 5.6234E+01 1.9901E-03 1.4868E-03 2.4448E-04 1.9280E-04 - 6.3096E+01 1.4157E-03 1.0542E-03 1.6291E-04 1.2766E-04 - 7.0795E+01 1.0010E-03 7.4540E-04 1.0996E-04 8.6863E-05 - 7.9433E+01 7.0604E-04 5.2210E-04 7.2434E-05 5.7424E-05 - 8.9125E+01 5.0118E-04 3.6629E-04 4.8623E-05 3.8500E-05 - 1.0000E+02 3.5362E-04 2.5725E-04 3.2189E-05 2.5661E-05 - 1.1220E+02 2.4867E-04 1.8013E-04 2.1118E-05 1.7436E-05 - 1.2589E+02 1.7479E-04 1.2636E-04 1.4183E-05 1.1605E-05 - 1.4125E+02 1.2309E-04 8.8179E-05 9.7141E-06 7.6837E-06 - 1.5849E+02 8.6874E-05 6.1620E-05 6.4779E-06 5.1510E-06 - 1.7783E+02 6.1087E-05 4.2998E-05 4.2747E-06 3.4441E-06 - 1.9953E+02 4.2756E-05 3.0007E-05 2.8717E-06 2.3153E-06 - 2.2387E+02 3.0093E-05 2.0926E-05 1.9533E-06 1.5242E-06 - 2.5119E+02 2.1108E-05 1.4539E-05 1.3174E-06 1.0216E-06 - 2.8184E+02 1.4730E-05 1.0158E-05 8.5641E-07 7.2562E-07 - 3.1623E+02 1.0319E-05 6.9581E-06 5.7840E-07 4.7513E-07 - 3.5481E+02 7.1940E-06 4.8307E-06 3.9058E-07 3.1962E-07 - 3.9811E+02 5.0240E-06 3.3568E-06 2.6629E-07 2.1378E-07 - 4.4668E+02 3.5057E-06 2.3256E-06 1.8369E-07 1.4372E-07 - 5.0119E+02 2.4403E-06 1.6034E-06 1.2380E-07 9.7316E-08 - 5.6234E+02 1.7041E-06 1.1160E-06 8.2085E-08 6.5304E-08 - 6.3096E+02 1.1863E-06 7.6972E-07 5.5691E-08 4.4935E-08 - 7.0795E+02 8.2466E-07 5.2902E-07 3.7126E-08 2.9671E-08 - 7.9433E+02 5.7201E-07 3.6415E-07 2.4916E-08 2.0222E-08 - 8.9125E+02 3.9799E-07 2.4959E-07 1.6825E-08 1.3576E-08 - 1.0000E+03 2.7591E-07 1.7247E-07 1.1367E-08 9.0844E-09 - 1.1220E+03 1.8946E-07 1.1768E-07 7.6270E-09 6.1288E-09 - 1.2589E+03 1.3045E-07 8.0480E-08 4.9914E-09 4.0376E-09 - 1.4125E+03 8.9621E-08 5.5146E-08 3.3499E-09 2.6474E-09 - 1.5849E+03 6.1560E-08 3.7411E-08 2.2710E-09 1.7420E-09 - 1.7783E+03 4.2285E-08 2.5422E-08 1.5665E-09 1.0983E-09 - 1.9953E+03 2.8990E-08 1.7355E-08 1.0525E-09 7.8975E-10 - 2.2387E+03 1.9748E-08 1.1732E-08 6.8806E-10 5.2967E-10 - 2.5119E+03 1.3384E-08 7.9503E-09 4.6352E-10 3.4942E-10 - 2.8184E+03 9.0540E-09 5.4041E-09 3.0578E-10 2.2960E-10 - 3.1623E+03 6.2651E-09 3.6809E-09 2.0015E-10 1.5577E-10 - 3.5481E+03 4.1720E-09 2.4316E-09 1.3887E-10 9.9471E-11 - 3.9811E+03 2.8119E-09 1.6224E-09 9.2334E-11 6.6241E-11 - 4.4668E+03 1.8698E-09 1.0717E-09 5.8080E-11 4.6314E-11 - 5.0119E+03 1.2355E-09 7.1315E-10 3.9321E-11 2.9964E-11 - 5.6234E+03 8.3227E-10 4.7631E-10 2.5935E-11 1.9253E-11 - 6.3096E+03 5.6444E-10 3.1668E-10 1.6754E-11 1.2668E-11 - 7.0795E+03 3.7454E-10 2.1016E-10 1.1074E-11 8.5597E-12 - 7.9433E+03 2.5035E-10 1.3909E-10 7.4207E-12 5.1240E-12 - 8.9125E+03 1.6763E-10 9.0618E-11 5.2988E-12 3.2039E-12 - 1.0000E+04 1.0919E-10 6.0116E-11 3.5041E-12 2.1786E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2140E+04 2.2556E+04 1.1132E+04 9.7901E+03 - 1.1220E-01 1.8657E+04 1.8898E+04 9.6109E+03 8.3010E+03 - 1.2589E-01 1.5771E+04 1.5794E+04 8.1033E+03 6.9653E+03 - 1.4125E-01 1.3133E+04 1.3249E+04 6.7316E+03 5.7880E+03 - 1.5849E-01 1.0808E+04 1.0965E+04 5.6041E+03 4.8000E+03 - 1.7783E-01 8.8530E+03 8.9239E+03 4.6332E+03 3.9389E+03 - 1.9953E-01 7.1756E+03 7.1796E+03 3.8046E+03 3.1825E+03 - 2.2387E-01 5.7255E+03 5.7346E+03 3.0846E+03 2.5514E+03 - 2.5119E-01 4.5058E+03 4.5505E+03 2.4766E+03 2.0280E+03 - 2.8184E-01 3.5278E+03 3.5813E+03 1.9822E+03 1.6140E+03 - 3.1623E-01 2.7517E+03 2.8060E+03 1.5721E+03 1.2726E+03 - 3.5481E-01 2.1430E+03 2.1696E+03 1.2395E+03 9.8568E+02 - 3.9811E-01 1.6573E+03 1.6584E+03 9.6295E+02 7.5415E+02 - 4.4668E-01 1.2685E+03 1.2691E+03 7.3379E+02 5.7843E+02 - 5.0119E-01 9.7225E+02 9.7600E+02 5.5860E+02 4.4608E+02 - 5.6234E-01 7.3947E+02 7.3857E+02 4.3001E+02 3.3972E+02 - 6.3096E-01 5.6061E+02 5.5589E+02 3.2747E+02 2.5882E+02 - 7.0795E-01 4.2832E+02 4.2138E+02 2.4858E+02 1.9533E+02 - 7.9433E-01 3.2402E+02 3.1399E+02 1.8940E+02 1.4763E+02 - 8.9125E-01 2.4402E+02 2.3870E+02 1.4304E+02 1.1051E+02 - 1.0000E+00 1.8103E+02 1.7920E+02 1.0779E+02 8.2793E+01 - 1.1220E+00 1.3607E+02 1.3407E+02 8.0108E+01 6.1889E+01 - 1.2589E+00 1.0214E+02 1.0065E+02 5.9417E+01 4.5797E+01 - 1.4125E+00 7.6539E+01 7.5036E+01 4.4225E+01 3.3648E+01 - 1.5849E+00 5.7287E+01 5.5091E+01 3.2631E+01 2.5037E+01 - 1.7783E+00 4.2677E+01 4.0975E+01 2.4153E+01 1.8345E+01 - 1.9953E+00 3.1601E+01 3.0326E+01 1.7833E+01 1.3536E+01 - 2.2387E+00 2.3349E+01 2.2060E+01 1.2828E+01 9.7310E+00 - 2.5119E+00 1.7023E+01 1.5923E+01 9.1765E+00 6.8643E+00 - 2.8184E+00 1.2394E+01 1.1604E+01 6.6294E+00 5.0223E+00 - 3.1623E+00 9.0748E+00 8.5197E+00 4.8140E+00 3.7136E+00 - 3.5481E+00 6.6243E+00 6.1643E+00 3.4313E+00 2.6272E+00 - 3.9811E+00 4.8330E+00 4.4752E+00 2.4005E+00 1.8309E+00 - 4.4668E+00 3.5211E+00 3.1929E+00 1.6976E+00 1.2902E+00 - 5.0119E+00 2.5542E+00 2.2768E+00 1.2014E+00 9.2564E-01 - 5.6234E+00 1.8505E+00 1.6240E+00 8.4183E-01 6.3859E-01 - 6.3096E+00 1.3131E+00 1.1558E+00 5.9458E-01 4.3576E-01 - 7.0795E+00 9.2795E-01 8.2124E-01 4.0998E-01 3.0036E-01 - 7.9433E+00 6.6624E-01 5.8309E-01 2.7263E-01 2.1027E-01 - 8.9125E+00 4.7694E-01 4.1942E-01 1.9259E-01 1.4607E-01 - 1.0000E+01 3.4413E-01 3.0132E-01 1.3375E-01 1.0014E-01 - 1.1220E+01 2.4456E-01 2.1375E-01 9.0592E-02 6.7915E-02 - 1.2589E+01 1.7432E-01 1.5122E-01 6.1402E-02 4.6212E-02 - 1.4125E+01 1.2478E-01 1.0784E-01 4.2392E-02 3.1377E-02 - 1.5849E+01 8.9796E-02 7.6405E-02 2.9281E-02 2.1086E-02 - 1.7783E+01 6.3696E-02 5.3260E-02 1.9750E-02 1.4619E-02 - 1.9953E+01 4.5092E-02 3.7850E-02 1.3303E-02 1.0302E-02 - 2.2387E+01 3.2310E-02 2.6974E-02 9.1416E-03 6.8251E-03 - 2.5119E+01 2.3225E-02 1.9252E-02 6.0800E-03 4.5088E-03 - 2.8184E+01 1.6758E-02 1.3653E-02 3.9572E-03 3.0761E-03 - 3.1623E+01 1.1866E-02 9.5311E-03 2.6402E-03 2.0251E-03 - 3.5481E+01 8.4637E-03 6.7539E-03 1.7627E-03 1.3601E-03 - 3.9811E+01 6.0512E-03 4.7803E-03 1.1801E-03 9.1667E-04 - 4.4668E+01 4.3140E-03 3.3773E-03 7.9258E-04 6.1330E-04 - 5.0119E+01 3.0607E-03 2.3898E-03 5.2454E-04 4.0722E-04 - 5.6234E+01 2.1729E-03 1.6857E-03 3.4789E-04 2.7073E-04 - 6.3096E+01 1.5474E-03 1.1894E-03 2.3172E-04 1.7923E-04 - 7.0795E+01 1.1009E-03 8.4347E-04 1.5431E-04 1.1937E-04 - 7.9433E+01 7.8020E-04 5.9093E-04 1.0373E-04 7.9774E-05 - 8.9125E+01 5.5291E-04 4.1412E-04 6.8887E-05 5.3202E-05 - 1.0000E+02 3.9266E-04 2.9276E-04 4.5073E-05 3.5519E-05 - 1.1220E+02 2.7844E-04 2.0628E-04 2.9841E-05 2.3567E-05 - 1.2589E+02 1.9652E-04 1.4412E-04 1.9857E-05 1.5853E-05 - 1.4125E+02 1.3836E-04 1.0017E-04 1.3206E-05 1.0572E-05 - 1.5849E+02 9.7948E-05 7.0236E-05 8.6825E-06 7.0472E-06 - 1.7783E+02 6.9194E-05 4.9311E-05 5.7399E-06 4.6463E-06 - 1.9953E+02 4.8411E-05 3.4408E-05 3.9025E-06 3.0596E-06 - 2.2387E+02 3.4035E-05 2.4010E-05 2.6002E-06 2.0383E-06 - 2.5119E+02 2.4007E-05 1.6728E-05 1.7587E-06 1.3438E-06 - 2.8184E+02 1.6710E-05 1.1669E-05 1.1588E-06 9.0222E-07 - 3.1623E+02 1.1746E-05 8.1405E-06 7.6748E-07 6.2187E-07 - 3.5481E+02 8.2337E-06 5.6391E-06 5.1519E-07 4.1779E-07 - 3.9811E+02 5.7524E-06 3.9167E-06 3.4786E-07 2.8084E-07 - 4.4668E+02 4.0365E-06 2.7181E-06 2.3327E-07 1.8750E-07 - 5.0119E+02 2.8268E-06 1.8831E-06 1.5460E-07 1.2885E-07 - 5.6234E+02 1.9719E-06 1.3011E-06 1.0432E-07 8.5210E-08 - 6.3096E+02 1.3731E-06 9.0036E-07 6.9344E-08 5.6880E-08 - 7.0795E+02 9.5708E-07 6.2317E-07 4.6492E-08 3.8146E-08 - 7.9433E+02 6.6849E-07 4.2802E-07 3.1748E-08 2.5362E-08 - 8.9125E+02 4.6433E-07 2.9531E-07 2.1868E-08 1.7071E-08 - 1.0000E+03 3.2183E-07 2.0496E-07 1.4533E-08 1.1544E-08 - 1.1220E+03 2.2199E-07 1.4055E-07 9.6189E-09 7.6130E-09 - 1.2589E+03 1.5355E-07 9.6448E-08 6.4341E-09 5.0379E-09 - 1.4125E+03 1.0655E-07 6.5966E-08 4.4767E-09 3.4062E-09 - 1.5849E+03 7.3473E-08 4.5469E-08 3.0537E-09 2.2831E-09 - 1.7783E+03 5.0668E-08 3.1181E-08 1.9501E-09 1.5412E-09 - 1.9953E+03 3.4856E-08 2.1166E-08 1.3031E-09 1.0316E-09 - 2.2387E+03 2.3747E-08 1.4504E-08 8.6832E-10 6.7519E-10 - 2.5119E+03 1.6193E-08 9.8825E-09 5.7539E-10 4.2145E-10 - 2.8184E+03 1.1136E-08 6.6606E-09 3.9106E-10 2.7975E-10 - 3.1623E+03 7.7298E-09 4.5638E-09 2.6081E-10 2.0357E-10 - 3.5481E+03 5.1889E-09 3.0372E-09 1.7478E-10 1.3260E-10 - 3.9811E+03 3.5047E-09 2.0549E-09 1.1641E-10 8.5490E-11 - 4.4668E+03 2.3570E-09 1.3906E-09 7.6608E-11 5.7319E-11 - 5.0119E+03 1.5807E-09 9.1806E-10 5.2642E-11 3.9602E-11 - 5.6234E+03 1.0675E-09 6.0831E-10 3.6059E-11 2.7271E-11 - 6.3096E+03 7.2316E-10 4.1017E-10 2.3904E-11 1.6378E-11 - 7.0795E+03 4.8055E-10 2.7343E-10 1.6144E-11 1.0834E-11 - 7.9433E+03 3.1944E-10 1.8191E-10 1.0070E-11 7.0420E-12 - 8.9125E+03 2.1387E-10 1.2110E-10 6.3444E-12 4.5236E-12 - 1.0000E+04 1.4418E-10 8.0512E-11 4.2471E-12 2.9365E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.1848E+04 2.1927E+04 1.0723E+04 9.7880E+03 - 1.1220E-01 1.8420E+04 1.8428E+04 9.1779E+03 8.3046E+03 - 1.2589E-01 1.5435E+04 1.5379E+04 7.7327E+03 6.9652E+03 - 1.4125E-01 1.2866E+04 1.2747E+04 6.4293E+03 5.8056E+03 - 1.5849E-01 1.0637E+04 1.0466E+04 5.3299E+03 4.7740E+03 - 1.7783E-01 8.6887E+03 8.4916E+03 4.3573E+03 3.8898E+03 - 1.9953E-01 7.0056E+03 6.8386E+03 3.5453E+03 3.1705E+03 - 2.2387E-01 5.5701E+03 5.4721E+03 2.8916E+03 2.5284E+03 - 2.5119E-01 4.4086E+03 4.2992E+03 2.3271E+03 1.9952E+03 - 2.8184E-01 3.4587E+03 3.3648E+03 1.8383E+03 1.5838E+03 - 3.1623E-01 2.6871E+03 2.6443E+03 1.4455E+03 1.2451E+03 - 3.5481E-01 2.0736E+03 2.0427E+03 1.1279E+03 9.6527E+02 - 3.9811E-01 1.5985E+03 1.5550E+03 8.6560E+02 7.5061E+02 - 4.4668E-01 1.2286E+03 1.1954E+03 6.6710E+02 5.7735E+02 - 5.0119E-01 9.3974E+02 9.1232E+02 5.1558E+02 4.3958E+02 - 5.6234E-01 7.2009E+02 6.9224E+02 3.9900E+02 3.3656E+02 - 6.3096E-01 5.5008E+02 5.2276E+02 3.0595E+02 2.5712E+02 - 7.0795E-01 4.1603E+02 3.9599E+02 2.3052E+02 1.9381E+02 - 7.9433E-01 3.1525E+02 3.0126E+02 1.7484E+02 1.4599E+02 - 8.9125E-01 2.3615E+02 2.2627E+02 1.3033E+02 1.1095E+02 - 1.0000E+00 1.7885E+02 1.6881E+02 9.8405E+01 8.1584E+01 - 1.1220E+00 1.3466E+02 1.2768E+02 7.4005E+01 6.1196E+01 - 1.2589E+00 1.0172E+02 9.5671E+01 5.5275E+01 4.6224E+01 - 1.4125E+00 7.6787E+01 7.1379E+01 4.1417E+01 3.4106E+01 - 1.5849E+00 5.7114E+01 5.3183E+01 3.1357E+01 2.5083E+01 - 1.7783E+00 4.2298E+01 3.9582E+01 2.3400E+01 1.8351E+01 - 1.9953E+00 3.1197E+01 2.9521E+01 1.6945E+01 1.3586E+01 - 2.2387E+00 2.3157E+01 2.1432E+01 1.2258E+01 9.8516E+00 - 2.5119E+00 1.7101E+01 1.5681E+01 9.0889E+00 7.0126E+00 - 2.8184E+00 1.2482E+01 1.1478E+01 6.6511E+00 5.0344E+00 - 3.1623E+00 9.1631E+00 8.4849E+00 4.7815E+00 3.6717E+00 - 3.5481E+00 6.6240E+00 6.1430E+00 3.4295E+00 2.5896E+00 - 3.9811E+00 4.8362E+00 4.4502E+00 2.4412E+00 1.8202E+00 - 4.4668E+00 3.5134E+00 3.1819E+00 1.7172E+00 1.2962E+00 - 5.0119E+00 2.5291E+00 2.2752E+00 1.1984E+00 9.2192E-01 - 5.6234E+00 1.8183E+00 1.6474E+00 8.4985E-01 6.3908E-01 - 6.3096E+00 1.3040E+00 1.1754E+00 5.9351E-01 4.3234E-01 - 7.0795E+00 9.5451E-01 8.3504E-01 4.0444E-01 3.0198E-01 - 7.9433E+00 6.8248E-01 6.0850E-01 2.7732E-01 2.1105E-01 - 8.9125E+00 4.7959E-01 4.3493E-01 1.8571E-01 1.4568E-01 - 1.0000E+01 3.4244E-01 2.9879E-01 1.3166E-01 9.8908E-02 - 1.1220E+01 2.4579E-01 2.1195E-01 8.9580E-02 6.8105E-02 - 1.2589E+01 1.7609E-01 1.5115E-01 6.1309E-02 4.6484E-02 - 1.4125E+01 1.2440E-01 1.0641E-01 4.1469E-02 3.1731E-02 - 1.5849E+01 8.8668E-02 7.4619E-02 2.8259E-02 2.1653E-02 - 1.7783E+01 6.3536E-02 5.3627E-02 1.8961E-02 1.4365E-02 - 1.9953E+01 4.5229E-02 3.7947E-02 1.2740E-02 9.6620E-03 - 2.2387E+01 3.2315E-02 2.6425E-02 8.6429E-03 6.8007E-03 - 2.5119E+01 2.3248E-02 1.8901E-02 5.7759E-03 4.5730E-03 - 2.8184E+01 1.6353E-02 1.3457E-02 3.8592E-03 3.0017E-03 - 3.1623E+01 1.1862E-02 9.5158E-03 2.6401E-03 2.0148E-03 - 3.5481E+01 8.4482E-03 6.7508E-03 1.7576E-03 1.3548E-03 - 3.9811E+01 6.0177E-03 4.7739E-03 1.1758E-03 9.1235E-04 - 4.4668E+01 4.2972E-03 3.3753E-03 7.8924E-04 6.0709E-04 - 5.0119E+01 3.0661E-03 2.3942E-03 5.2659E-04 4.0434E-04 - 5.6234E+01 2.1810E-03 1.6902E-03 3.5143E-04 2.7130E-04 - 6.3096E+01 1.5569E-03 1.1872E-03 2.3423E-04 1.8159E-04 - 7.0795E+01 1.1040E-03 8.4210E-04 1.5526E-04 1.1974E-04 - 7.9433E+01 7.8430E-04 5.9271E-04 1.0265E-04 8.0031E-05 - 8.9125E+01 5.5789E-04 4.1571E-04 6.8198E-05 5.3414E-05 - 1.0000E+02 3.9245E-04 2.9222E-04 4.4966E-05 3.5302E-05 - 1.1220E+02 2.7795E-04 2.0537E-04 2.9607E-05 2.3539E-05 - 1.2589E+02 1.9689E-04 1.4401E-04 1.9678E-05 1.5692E-05 - 1.4125E+02 1.3862E-04 1.0126E-04 1.3095E-05 1.0551E-05 - 1.5849E+02 9.7648E-05 7.0941E-05 8.7542E-06 7.0315E-06 - 1.7783E+02 6.8880E-05 4.9297E-05 5.8287E-06 4.6047E-06 - 1.9953E+02 4.8461E-05 3.4487E-05 3.8614E-06 3.0630E-06 - 2.2387E+02 3.4131E-05 2.4140E-05 2.5785E-06 2.0496E-06 - 2.5119E+02 2.3925E-05 1.6754E-05 1.7294E-06 1.3897E-06 - 2.8184E+02 1.6796E-05 1.1670E-05 1.1310E-06 9.2830E-07 - 3.1623E+02 1.1799E-05 8.1370E-06 7.7105E-07 6.2154E-07 - 3.5481E+02 8.2516E-06 5.6512E-06 5.1385E-07 4.1574E-07 - 3.9811E+02 5.7668E-06 3.9419E-06 3.4246E-07 2.8244E-07 - 4.4668E+02 4.0265E-06 2.7189E-06 2.3228E-07 1.8771E-07 - 5.0119E+02 2.8132E-06 1.8843E-06 1.5511E-07 1.2189E-07 - 5.6234E+02 1.9728E-06 1.3153E-06 1.0505E-07 8.6453E-08 - 6.3096E+02 1.3743E-06 9.0644E-07 7.0702E-08 5.7032E-08 - 7.0795E+02 9.5811E-07 6.2649E-07 4.7740E-08 3.8002E-08 - 7.9433E+02 6.6381E-07 4.3284E-07 3.1780E-08 2.6320E-08 - 8.9125E+02 4.6208E-07 2.9680E-07 2.1555E-08 1.7779E-08 - 1.0000E+03 3.2106E-07 2.0501E-07 1.4780E-08 1.1671E-08 - 1.1220E+03 2.2209E-07 1.4173E-07 9.7883E-09 7.8849E-09 - 1.2589E+03 1.5360E-07 9.7438E-08 6.5465E-09 5.1944E-09 - 1.4125E+03 1.0593E-07 6.6809E-08 4.4004E-09 3.5465E-09 - 1.5849E+03 7.3098E-08 4.5806E-08 2.9979E-09 2.2599E-09 - 1.7783E+03 5.0114E-08 3.1173E-08 2.0683E-09 1.4965E-09 - 1.9953E+03 3.4818E-08 2.1111E-08 1.3907E-09 1.0650E-09 - 2.2387E+03 2.4006E-08 1.4405E-08 9.1207E-10 6.8168E-10 - 2.5119E+03 1.6399E-08 9.8008E-09 5.9210E-10 4.3474E-10 - 2.8184E+03 1.1168E-08 6.5620E-09 3.8879E-10 2.9847E-10 - 3.1623E+03 7.7152E-09 4.5402E-09 2.6448E-10 2.0165E-10 - 3.5481E+03 5.1337E-09 3.0111E-09 1.7363E-10 1.3080E-10 - 3.9811E+03 3.4605E-09 2.0242E-09 1.1096E-10 8.6621E-11 - 4.4668E+03 2.3500E-09 1.3691E-09 7.5762E-11 5.4552E-11 - 5.0119E+03 1.5954E-09 9.2718E-10 5.3039E-11 3.6715E-11 - 5.6234E+03 1.0685E-09 6.1922E-10 3.6541E-11 2.4243E-11 - 6.3096E+03 7.2033E-10 4.1036E-10 2.4037E-11 1.6036E-11 - 7.0795E+03 4.7778E-10 2.7094E-10 1.5495E-11 1.0260E-11 - 7.9433E+03 3.2037E-10 1.8044E-10 1.0061E-11 6.9053E-12 - 8.9125E+03 2.1571E-10 1.2061E-10 6.8199E-12 4.7229E-12 - 1.0000E+04 1.4303E-10 7.9149E-11 4.5038E-12 3.1126E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.1776E+04 2.1532E+04 1.0468E+04 9.8163E+03 - 1.1220E-01 1.8301E+04 1.8086E+04 8.9543E+03 8.3579E+03 - 1.2589E-01 1.5377E+04 1.5071E+04 7.5734E+03 7.0359E+03 - 1.4125E-01 1.2825E+04 1.2481E+04 6.3064E+03 5.7970E+03 - 1.5849E-01 1.0574E+04 1.0252E+04 5.1832E+03 4.7658E+03 - 1.7783E-01 8.5892E+03 8.3089E+03 4.2443E+03 3.9012E+03 - 1.9953E-01 6.9262E+03 6.6761E+03 3.4491E+03 3.1748E+03 - 2.2387E-01 5.5125E+03 5.3102E+03 2.7878E+03 2.5602E+03 - 2.5119E-01 4.3342E+03 4.1690E+03 2.2256E+03 2.0358E+03 - 2.8184E-01 3.3973E+03 3.2522E+03 1.7580E+03 1.6061E+03 - 3.1623E-01 2.6510E+03 2.5347E+03 1.3781E+03 1.2492E+03 - 3.5481E-01 2.0539E+03 1.9570E+03 1.0698E+03 9.7038E+02 - 3.9811E-01 1.5875E+03 1.4908E+03 8.2887E+02 7.4873E+02 - 4.4668E-01 1.2183E+03 1.1412E+03 6.3978E+02 5.7402E+02 - 5.0119E-01 9.3033E+02 8.6661E+02 4.9090E+02 4.3867E+02 - 5.6234E-01 7.0893E+02 6.5986E+02 3.7673E+02 3.3166E+02 - 6.3096E-01 5.3885E+02 5.0459E+02 2.8583E+02 2.5450E+02 - 7.0795E-01 4.0802E+02 3.8046E+02 2.1449E+02 1.9429E+02 - 7.9433E-01 3.0946E+02 2.8702E+02 1.6402E+02 1.4591E+02 - 8.9125E-01 2.3569E+02 2.1806E+02 1.2380E+02 1.0843E+02 - 1.0000E+00 1.7710E+02 1.6364E+02 9.3932E+01 8.2539E+01 - 1.1220E+00 1.3414E+02 1.2342E+02 7.0737E+01 6.1293E+01 - 1.2589E+00 1.0041E+02 9.2828E+01 5.3119E+01 4.6007E+01 - 1.4125E+00 7.5361E+01 6.9928E+01 3.9960E+01 3.4402E+01 - 1.5849E+00 5.6936E+01 5.2435E+01 2.9734E+01 2.5283E+01 - 1.7783E+00 4.2376E+01 3.8989E+01 2.2312E+01 1.8701E+01 - 1.9953E+00 3.1333E+01 2.9277E+01 1.6735E+01 1.3474E+01 - 2.2387E+00 2.3247E+01 2.1488E+01 1.2146E+01 9.7339E+00 - 2.5119E+00 1.7099E+01 1.5593E+01 8.6560E+00 7.1425E+00 - 2.8184E+00 1.2465E+01 1.1421E+01 6.4251E+00 5.1716E+00 - 3.1623E+00 9.1581E+00 8.2718E+00 4.6710E+00 3.6973E+00 - 3.5481E+00 6.6945E+00 6.0143E+00 3.3690E+00 2.6080E+00 - 3.9811E+00 4.8384E+00 4.3627E+00 2.3825E+00 1.8449E+00 - 4.4668E+00 3.4951E+00 3.1616E+00 1.6968E+00 1.2826E+00 - 5.0119E+00 2.5090E+00 2.2993E+00 1.2031E+00 8.9365E-01 - 5.6234E+00 1.8077E+00 1.6561E+00 8.2416E-01 6.3236E-01 - 6.3096E+00 1.3090E+00 1.1795E+00 5.7325E-01 4.4720E-01 - 7.0795E+00 9.4066E-01 8.2874E-01 4.0579E-01 3.0849E-01 - 7.9433E+00 6.6844E-01 5.8384E-01 2.8422E-01 2.0960E-01 - 8.9125E+00 4.8023E-01 4.2106E-01 1.9234E-01 1.4401E-01 - 1.0000E+01 3.4508E-01 3.0144E-01 1.3160E-01 1.0036E-01 - 1.1220E+01 2.4487E-01 2.1427E-01 9.1281E-02 6.7991E-02 - 1.2589E+01 1.7353E-01 1.5147E-01 6.2538E-02 4.6179E-02 - 1.4125E+01 1.2450E-01 1.0764E-01 4.2610E-02 3.1464E-02 - 1.5849E+01 8.8336E-02 7.5967E-02 2.8623E-02 2.1441E-02 - 1.7783E+01 6.3934E-02 5.2959E-02 1.9294E-02 1.4416E-02 - 1.9953E+01 4.6253E-02 3.7901E-02 1.3219E-02 9.7925E-03 - 2.2387E+01 3.2662E-02 2.6808E-02 8.9381E-03 6.8791E-03 - 2.5119E+01 2.2999E-02 1.9147E-02 6.0077E-03 4.6408E-03 - 2.8184E+01 1.6408E-02 1.3725E-02 4.0072E-03 3.2858E-03 - 3.1623E+01 1.1844E-02 9.5498E-03 2.6564E-03 2.0163E-03 - 3.5481E+01 8.4642E-03 6.7635E-03 1.7795E-03 1.3465E-03 - 3.9811E+01 6.0577E-03 4.7860E-03 1.1848E-03 9.0462E-04 - 4.4668E+01 4.3132E-03 3.3702E-03 7.8479E-04 6.1049E-04 - 5.0119E+01 3.0672E-03 2.3793E-03 5.1905E-04 4.0638E-04 - 5.6234E+01 2.1848E-03 1.6906E-03 3.4460E-04 2.6959E-04 - 6.3096E+01 1.5520E-03 1.1914E-03 2.2835E-04 1.8038E-04 - 7.0795E+01 1.1023E-03 8.3775E-04 1.5280E-04 1.2041E-04 - 7.9433E+01 7.8065E-04 5.9618E-04 1.0361E-04 8.0189E-05 - 8.9125E+01 5.5574E-04 4.2048E-04 6.8915E-05 5.3521E-05 - 1.0000E+02 3.9372E-04 2.9313E-04 4.4663E-05 3.5920E-05 - 1.1220E+02 2.7827E-04 2.0567E-04 2.9698E-05 2.3694E-05 - 1.2589E+02 1.9572E-04 1.4487E-04 1.9821E-05 1.5815E-05 - 1.4125E+02 1.3843E-04 1.0157E-04 1.3090E-05 1.0602E-05 - 1.5849E+02 9.7942E-05 7.0601E-05 8.7256E-06 6.9818E-06 - 1.7783E+02 6.8851E-05 4.9279E-05 5.8752E-06 4.6998E-06 - 1.9953E+02 4.8436E-05 3.4426E-05 3.8748E-06 3.1366E-06 - 2.2387E+02 3.3877E-05 2.3963E-05 2.5361E-06 2.0362E-06 - 2.5119E+02 2.3666E-05 1.6618E-05 1.7408E-06 1.3646E-06 - 2.8184E+02 1.6664E-05 1.1677E-05 1.1943E-06 9.2978E-07 - 3.1623E+02 1.1764E-05 8.1361E-06 7.8652E-07 6.2491E-07 - 3.5481E+02 8.2364E-06 5.6376E-06 5.2396E-07 4.1487E-07 - 3.9811E+02 5.7736E-06 3.9224E-06 3.4720E-07 2.7756E-07 - 4.4668E+02 4.0514E-06 2.7277E-06 2.3414E-07 1.8803E-07 - 5.0119E+02 2.8251E-06 1.8897E-06 1.5706E-07 1.2637E-07 - 5.6234E+02 1.9752E-06 1.3160E-06 1.0555E-07 8.4318E-08 - 6.3096E+02 1.3808E-06 9.0978E-07 7.0368E-08 5.7727E-08 - 7.0795E+02 9.5905E-07 6.2412E-07 4.6718E-08 3.8726E-08 - 7.9433E+02 6.6482E-07 4.3214E-07 3.1779E-08 2.6068E-08 - 8.9125E+02 4.6191E-07 2.9726E-07 2.1465E-08 1.7214E-08 - 1.0000E+03 3.2199E-07 2.0663E-07 1.4666E-08 1.1375E-08 - 1.1220E+03 2.2308E-07 1.4262E-07 9.8685E-09 7.5598E-09 - 1.2589E+03 1.5447E-07 9.7093E-08 6.6831E-09 5.1510E-09 - 1.4125E+03 1.0614E-07 6.6098E-08 4.3719E-09 3.6299E-09 - 1.5849E+03 7.3155E-08 4.5605E-08 2.8943E-09 2.4257E-09 - 1.7783E+03 5.0451E-08 3.1327E-08 1.9795E-09 1.5215E-09 - 1.9953E+03 3.4734E-08 2.1327E-08 1.3046E-09 1.0175E-09 - 2.2387E+03 2.3771E-08 1.4549E-08 9.1122E-10 6.9036E-10 - 2.5119E+03 1.6201E-08 9.8179E-09 6.2949E-10 4.5924E-10 - 2.8184E+03 1.1057E-08 6.6570E-09 4.0208E-10 3.0139E-10 - 3.1623E+03 7.7045E-09 4.5608E-09 2.6382E-10 2.0133E-10 - 3.5481E+03 5.1629E-09 3.0444E-09 1.7173E-10 1.2767E-10 - 3.9811E+03 3.4894E-09 2.0437E-09 1.1038E-10 8.3053E-11 - 4.4668E+03 2.3472E-09 1.3731E-09 7.6494E-11 5.4808E-11 - 5.0119E+03 1.5885E-09 9.1950E-10 5.1544E-11 3.9837E-11 - 5.6234E+03 1.0650E-09 6.1689E-10 3.5315E-11 2.6895E-11 - 6.3096E+03 7.1738E-10 4.0911E-10 2.2520E-11 1.6155E-11 - 7.0795E+03 4.8391E-10 2.6986E-10 1.4509E-11 1.0624E-11 - 7.9433E+03 3.2288E-10 1.8111E-10 9.9331E-12 6.5888E-12 - 8.9125E+03 2.1484E-10 1.2065E-10 6.4052E-12 4.4974E-12 - 1.0000E+04 1.4367E-10 7.9770E-11 4.1131E-12 3.1014E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.1888E+04 2.1514E+04 1.0462E+04 9.9055E+03 - 1.1220E-01 1.8533E+04 1.8082E+04 8.9350E+03 8.4276E+03 - 1.2589E-01 1.5529E+04 1.5127E+04 7.4976E+03 7.1151E+03 - 1.4125E-01 1.2891E+04 1.2556E+04 6.2668E+03 5.9369E+03 - 1.5849E-01 1.0678E+04 1.0320E+04 5.1924E+03 4.8552E+03 - 1.7783E-01 8.7390E+03 8.3683E+03 4.2454E+03 3.9382E+03 - 1.9953E-01 7.0031E+03 6.7087E+03 3.4433E+03 3.1908E+03 - 2.2387E-01 5.5761E+03 5.3117E+03 2.7869E+03 2.5851E+03 - 2.5119E-01 4.4131E+03 4.1966E+03 2.2234E+03 2.0745E+03 - 2.8184E-01 3.4668E+03 3.2824E+03 1.7574E+03 1.6450E+03 - 3.1623E-01 2.7048E+03 2.5446E+03 1.3818E+03 1.2800E+03 - 3.5481E-01 2.0813E+03 1.9621E+03 1.0806E+03 9.9882E+02 - 3.9811E-01 1.5952E+03 1.5160E+03 8.4018E+02 7.7520E+02 - 4.4668E-01 1.2338E+03 1.1595E+03 6.4410E+02 5.9048E+02 - 5.0119E-01 9.4776E+02 8.7341E+02 4.8875E+02 4.4595E+02 - 5.6234E-01 7.2060E+02 6.6230E+02 3.7267E+02 3.4275E+02 - 6.3096E-01 5.4791E+02 5.0603E+02 2.8588E+02 2.6120E+02 - 7.0795E-01 4.1369E+02 3.8532E+02 2.1706E+02 1.9481E+02 - 7.9433E-01 3.1349E+02 2.8993E+02 1.6293E+02 1.4606E+02 - 8.9125E-01 2.3850E+02 2.1728E+02 1.2327E+02 1.1159E+02 - 1.0000E+00 1.7900E+02 1.6271E+02 9.3257E+01 8.3817E+01 - 1.1220E+00 1.3495E+02 1.2193E+02 7.0546E+01 6.2753E+01 - 1.2589E+00 1.0113E+02 9.2549E+01 5.2959E+01 4.6471E+01 - 1.4125E+00 7.6362E+01 6.9777E+01 3.9255E+01 3.4180E+01 - 1.5849E+00 5.6710E+01 5.1896E+01 2.9769E+01 2.5158E+01 - 1.7783E+00 4.2235E+01 3.8264E+01 2.2385E+01 1.8521E+01 - 1.9953E+00 3.1788E+01 2.8342E+01 1.6290E+01 1.3639E+01 - 2.2387E+00 2.3031E+01 2.1166E+01 1.2113E+01 9.9060E+00 - 2.5119E+00 1.6868E+01 1.5434E+01 8.9897E+00 7.2129E+00 - 2.8184E+00 1.2555E+01 1.1347E+01 6.4655E+00 5.1620E+00 - 3.1623E+00 9.1618E+00 8.3797E+00 4.6900E+00 3.6923E+00 - 3.5481E+00 6.6927E+00 6.0831E+00 3.3551E+00 2.6227E+00 - 3.9811E+00 4.8704E+00 4.3601E+00 2.3904E+00 1.8610E+00 - 4.4668E+00 3.5264E+00 3.1682E+00 1.6925E+00 1.3040E+00 - 5.0119E+00 2.5266E+00 2.3111E+00 1.1976E+00 9.0420E-01 - 5.6234E+00 1.8203E+00 1.6544E+00 8.4016E-01 6.3724E-01 - 6.3096E+00 1.3140E+00 1.1819E+00 5.8793E-01 4.4665E-01 - 7.0795E+00 9.4809E-01 8.2841E-01 4.0893E-01 3.0650E-01 - 7.9433E+00 6.7817E-01 5.9457E-01 2.8243E-01 2.1108E-01 - 8.9125E+00 4.8530E-01 4.3516E-01 1.9642E-01 1.4694E-01 - 1.0000E+01 3.4518E-01 3.0031E-01 1.3358E-01 9.9613E-02 - 1.1220E+01 2.4531E-01 2.1176E-01 9.1077E-02 6.8799E-02 - 1.2589E+01 1.7382E-01 1.5069E-01 6.2307E-02 4.8196E-02 - 1.4125E+01 1.2546E-01 1.0754E-01 4.3621E-02 3.2073E-02 - 1.5849E+01 9.0125E-02 7.6656E-02 2.9247E-02 2.1115E-02 - 1.7783E+01 6.4269E-02 5.3940E-02 1.8722E-02 1.4474E-02 - 1.9953E+01 4.6009E-02 3.8171E-02 1.2791E-02 9.8948E-03 - 2.2387E+01 3.3173E-02 2.7105E-02 8.7708E-03 6.4102E-03 - 2.5119E+01 2.3572E-02 1.9175E-02 5.8269E-03 4.1706E-03 - 2.8184E+01 1.6362E-02 1.3587E-02 3.8775E-03 2.9477E-03 - 3.1623E+01 1.1880E-02 9.5327E-03 2.6537E-03 2.0127E-03 - 3.5481E+01 8.4870E-03 6.7556E-03 1.7704E-03 1.3513E-03 - 3.9811E+01 6.0469E-03 4.7834E-03 1.1789E-03 9.0750E-04 - 4.4668E+01 4.3048E-03 3.3797E-03 7.8737E-04 6.0789E-04 - 5.0119E+01 3.0732E-03 2.3918E-03 5.2434E-04 4.0665E-04 - 5.6234E+01 2.1851E-03 1.6918E-03 3.4674E-04 2.6939E-04 - 6.3096E+01 1.5533E-03 1.1898E-03 2.3017E-04 1.8098E-04 - 7.0795E+01 1.1023E-03 8.3817E-04 1.5236E-04 1.2035E-04 - 7.9433E+01 7.8192E-04 5.8938E-04 1.0286E-04 7.8990E-05 - 8.9125E+01 5.5628E-04 4.1693E-04 6.8120E-05 5.1937E-05 - 1.0000E+02 3.9255E-04 2.9364E-04 4.4868E-05 3.5392E-05 - 1.1220E+02 2.7712E-04 2.0585E-04 2.9829E-05 2.3672E-05 - 1.2589E+02 1.9575E-04 1.4403E-04 1.9841E-05 1.5867E-05 - 1.4125E+02 1.3832E-04 1.0091E-04 1.3164E-05 1.0389E-05 - 1.5849E+02 9.7685E-05 7.0635E-05 8.8643E-06 6.9377E-06 - 1.7783E+02 6.8904E-05 4.9367E-05 5.9635E-06 4.6598E-06 - 1.9953E+02 4.8349E-05 3.4502E-05 3.8930E-06 3.1139E-06 - 2.2387E+02 3.3976E-05 2.4170E-05 2.5375E-06 2.1222E-06 - 2.5119E+02 2.3806E-05 1.6883E-05 1.7111E-06 1.4277E-06 - 2.8184E+02 1.6633E-05 1.1705E-05 1.1642E-06 9.3523E-07 - 3.1623E+02 1.1754E-05 8.1641E-06 7.7364E-07 6.1711E-07 - 3.5481E+02 8.2402E-06 5.6611E-06 5.2113E-07 4.1704E-07 - 3.9811E+02 5.7769E-06 3.9183E-06 3.4483E-07 2.7991E-07 - 4.4668E+02 4.0324E-06 2.7236E-06 2.3027E-07 1.9062E-07 - 5.0119E+02 2.8132E-06 1.8932E-06 1.5477E-07 1.2748E-07 - 5.6234E+02 1.9698E-06 1.3061E-06 1.0473E-07 8.4843E-08 - 6.3096E+02 1.3758E-06 9.0786E-07 7.0767E-08 5.7917E-08 - 7.0795E+02 9.5578E-07 6.3174E-07 4.8226E-08 3.9238E-08 - 7.9433E+02 6.6508E-07 4.3393E-07 3.1811E-08 2.6004E-08 - 8.9125E+02 4.6349E-07 2.9675E-07 2.1580E-08 1.7314E-08 - 1.0000E+03 3.2119E-07 2.0548E-07 1.4692E-08 1.1696E-08 - 1.1220E+03 2.2228E-07 1.4079E-07 9.7227E-09 7.8665E-09 - 1.2589E+03 1.5429E-07 9.6486E-08 6.4617E-09 5.2872E-09 - 1.4125E+03 1.0730E-07 6.6766E-08 4.3680E-09 3.4753E-09 - 1.5849E+03 7.3678E-08 4.5949E-08 3.0626E-09 2.3003E-09 - 1.7783E+03 5.0525E-08 3.1147E-08 2.1237E-09 1.5434E-09 - 1.9953E+03 3.4947E-08 2.1281E-08 1.3678E-09 1.0702E-09 - 2.2387E+03 2.3924E-08 1.4427E-08 9.0015E-10 7.1876E-10 - 2.5119E+03 1.6284E-08 9.8818E-09 6.1654E-10 4.5710E-10 - 2.8184E+03 1.1140E-08 6.7017E-09 4.1410E-10 3.0719E-10 - 3.1623E+03 7.6931E-09 4.5560E-09 2.6669E-10 1.9945E-10 - 3.5481E+03 5.1401E-09 3.0538E-09 1.8339E-10 1.3159E-10 - 3.9811E+03 3.4646E-09 2.0584E-09 1.1896E-10 8.8764E-11 - 4.4668E+03 2.3550E-09 1.3806E-09 7.6844E-11 6.0945E-11 - 5.0119E+03 1.5959E-09 9.2379E-10 5.1752E-11 4.1131E-11 - 5.6234E+03 1.0709E-09 6.1678E-10 3.4888E-11 2.5946E-11 - 6.3096E+03 7.1791E-10 4.1212E-10 2.2249E-11 1.5798E-11 - 7.0795E+03 4.7880E-10 2.7380E-10 1.4706E-11 1.0819E-11 - 7.9433E+03 3.1976E-10 1.8105E-10 9.7352E-12 7.1159E-12 - 8.9125E+03 2.1284E-10 1.1865E-10 6.4284E-12 4.7707E-12 - 1.0000E+04 1.4211E-10 7.8294E-11 4.1644E-12 3.1307E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2160E+04 2.1758E+04 1.0723E+04 1.0034E+04 - 1.1220E-01 1.8684E+04 1.8321E+04 9.1042E+03 8.5441E+03 - 1.2589E-01 1.5704E+04 1.5294E+04 7.6686E+03 7.1761E+03 - 1.4125E-01 1.3094E+04 1.2671E+04 6.3976E+03 5.9984E+03 - 1.5849E-01 1.0860E+04 1.0446E+04 5.2808E+03 4.9339E+03 - 1.7783E-01 8.8845E+03 8.5065E+03 4.3331E+03 4.0047E+03 - 1.9953E-01 7.1609E+03 6.8355E+03 3.5360E+03 3.2624E+03 - 2.2387E-01 5.7628E+03 5.4361E+03 2.8571E+03 2.6445E+03 - 2.5119E-01 4.5663E+03 4.2819E+03 2.2844E+03 2.1022E+03 - 2.8184E-01 3.5584E+03 3.3573E+03 1.8024E+03 1.6641E+03 - 3.1623E-01 2.7585E+03 2.6150E+03 1.4288E+03 1.3124E+03 - 3.5481E-01 2.1514E+03 2.0267E+03 1.1228E+03 1.0109E+03 - 3.9811E-01 1.6453E+03 1.5555E+03 8.6498E+02 7.7730E+02 - 4.4668E-01 1.2528E+03 1.1905E+03 6.6668E+02 5.9908E+02 - 5.0119E-01 9.6480E+02 9.1025E+02 5.1097E+02 4.5888E+02 - 5.6234E-01 7.3485E+02 6.8507E+02 3.9160E+02 3.5101E+02 - 6.3096E-01 5.5823E+02 5.1467E+02 2.9631E+02 2.6616E+02 - 7.0795E-01 4.2314E+02 3.8998E+02 2.2582E+02 2.0086E+02 - 7.9433E-01 3.1828E+02 2.9400E+02 1.7275E+02 1.5172E+02 - 8.9125E-01 2.3859E+02 2.2251E+02 1.2891E+02 1.1428E+02 - 1.0000E+00 1.8216E+02 1.6676E+02 9.7299E+01 8.5171E+01 - 1.1220E+00 1.3738E+02 1.2496E+02 7.2969E+01 6.3317E+01 - 1.2589E+00 1.0239E+02 9.3373E+01 5.4319E+01 4.7648E+01 - 1.4125E+00 7.6061E+01 7.0399E+01 4.0479E+01 3.5434E+01 - 1.5849E+00 5.7273E+01 5.2780E+01 3.0515E+01 2.5982E+01 - 1.7783E+00 4.2902E+01 3.9324E+01 2.2892E+01 1.9414E+01 - 1.9953E+00 3.2008E+01 2.9196E+01 1.6878E+01 1.4041E+01 - 2.2387E+00 2.3688E+01 2.1650E+01 1.2267E+01 1.0018E+01 - 2.5119E+00 1.7481E+01 1.5868E+01 8.9342E+00 7.2539E+00 - 2.8184E+00 1.2850E+01 1.1568E+01 6.5579E+00 5.2351E+00 - 3.1623E+00 9.1627E+00 8.3171E+00 4.6799E+00 3.6631E+00 - 3.5481E+00 6.6637E+00 6.0604E+00 3.2939E+00 2.5998E+00 - 3.9811E+00 4.8395E+00 4.3721E+00 2.3563E+00 1.8466E+00 - 4.4668E+00 3.4996E+00 3.1757E+00 1.6865E+00 1.2889E+00 - 5.0119E+00 2.5249E+00 2.2970E+00 1.1924E+00 9.0565E-01 - 5.6234E+00 1.7849E+00 1.6360E+00 8.4027E-01 6.4537E-01 - 6.3096E+00 1.2926E+00 1.1703E+00 5.9069E-01 4.4538E-01 - 7.0795E+00 9.5413E-01 8.3205E-01 4.1502E-01 3.0080E-01 - 7.9433E+00 6.8747E-01 5.8522E-01 2.9520E-01 2.1318E-01 - 8.9125E+00 4.8551E-01 4.2569E-01 2.0170E-01 1.5001E-01 - 1.0000E+01 3.4412E-01 2.9740E-01 1.3125E-01 1.0080E-01 - 1.1220E+01 2.4738E-01 2.1433E-01 9.0199E-02 6.9187E-02 - 1.2589E+01 1.7581E-01 1.5236E-01 6.2665E-02 4.6905E-02 - 1.4125E+01 1.2606E-01 1.0648E-01 4.2521E-02 3.1327E-02 - 1.5849E+01 9.0465E-02 7.6273E-02 2.8923E-02 2.1167E-02 - 1.7783E+01 6.3853E-02 5.4862E-02 1.9208E-02 1.4460E-02 - 1.9953E+01 4.5777E-02 3.9074E-02 1.2965E-02 9.4398E-03 - 2.2387E+01 3.2757E-02 2.7175E-02 8.9860E-03 6.5258E-03 - 2.5119E+01 2.3037E-02 1.9112E-02 6.2980E-03 4.5984E-03 - 2.8184E+01 1.6283E-02 1.3550E-02 4.1554E-03 3.0400E-03 - 3.1623E+01 1.1862E-02 9.4960E-03 2.6454E-03 2.0183E-03 - 3.5481E+01 8.4483E-03 6.7160E-03 1.7687E-03 1.3589E-03 - 3.9811E+01 6.0361E-03 4.7502E-03 1.1788E-03 9.1016E-04 - 4.4668E+01 4.3029E-03 3.3681E-03 7.8251E-04 6.0382E-04 - 5.0119E+01 3.0574E-03 2.3817E-03 5.2204E-04 4.0301E-04 - 5.6234E+01 2.1699E-03 1.6854E-03 3.4745E-04 2.7130E-04 - 6.3096E+01 1.5424E-03 1.1920E-03 2.3119E-04 1.8022E-04 - 7.0795E+01 1.0984E-03 8.3932E-04 1.5498E-04 1.1750E-04 - 7.9433E+01 7.7730E-04 5.9026E-04 1.0339E-04 7.7731E-05 - 8.9125E+01 5.5219E-04 4.1599E-04 6.8405E-05 5.3184E-05 - 1.0000E+02 3.9390E-04 2.9389E-04 4.4946E-05 3.5676E-05 - 1.1220E+02 2.7862E-04 2.0567E-04 2.9957E-05 2.3897E-05 - 1.2589E+02 1.9650E-04 1.4477E-04 1.9684E-05 1.5979E-05 - 1.4125E+02 1.3888E-04 1.0159E-04 1.3011E-05 1.0489E-05 - 1.5849E+02 9.7822E-05 7.0727E-05 8.7709E-06 6.9128E-06 - 1.7783E+02 6.8791E-05 4.9326E-05 5.7786E-06 4.6566E-06 - 1.9953E+02 4.8606E-05 3.4520E-05 3.8490E-06 3.0973E-06 - 2.2387E+02 3.4207E-05 2.4224E-05 2.6129E-06 2.0978E-06 - 2.5119E+02 2.4045E-05 1.6832E-05 1.7329E-06 1.4375E-06 - 2.8184E+02 1.6846E-05 1.1702E-05 1.1528E-06 9.5989E-07 - 3.1623E+02 1.1785E-05 8.1541E-06 7.6621E-07 6.2037E-07 - 3.5481E+02 8.2352E-06 5.6427E-06 5.1172E-07 4.1459E-07 - 3.9811E+02 5.7657E-06 3.9182E-06 3.4483E-07 2.7894E-07 - 4.4668E+02 4.0328E-06 2.7112E-06 2.3074E-07 1.8670E-07 - 5.0119E+02 2.8072E-06 1.8801E-06 1.5377E-07 1.2772E-07 - 5.6234E+02 1.9665E-06 1.3091E-06 1.0337E-07 8.4114E-08 - 6.3096E+02 1.3735E-06 9.0316E-07 6.9257E-08 5.6486E-08 - 7.0795E+02 9.5882E-07 6.2521E-07 4.6742E-08 3.8021E-08 - 7.9433E+02 6.6824E-07 4.3005E-07 3.1305E-08 2.5527E-08 - 8.9125E+02 4.6597E-07 2.9684E-07 2.1045E-08 1.6865E-08 - 1.0000E+03 3.2172E-07 2.0488E-07 1.4587E-08 1.1241E-08 - 1.1220E+03 2.2193E-07 1.4128E-07 9.8569E-09 7.6741E-09 - 1.2589E+03 1.5396E-07 9.7810E-08 6.7123E-09 5.1889E-09 - 1.4125E+03 1.0644E-07 6.6854E-08 4.3496E-09 3.4557E-09 - 1.5849E+03 7.3509E-08 4.5456E-08 2.9934E-09 2.3785E-09 - 1.7783E+03 5.0631E-08 3.0791E-08 2.0013E-09 1.5302E-09 - 1.9953E+03 3.4759E-08 2.1086E-08 1.2949E-09 9.8273E-10 - 2.2387E+03 2.3945E-08 1.4409E-08 8.7569E-10 6.5442E-10 - 2.5119E+03 1.6410E-08 9.8040E-09 6.0877E-10 4.5236E-10 - 2.8184E+03 1.1227E-08 6.5856E-09 4.1918E-10 3.0342E-10 - 3.1623E+03 7.6733E-09 4.5357E-09 2.7389E-10 1.9185E-10 - 3.5481E+03 5.1409E-09 3.0153E-09 1.8405E-10 1.2978E-10 - 3.9811E+03 3.4856E-09 2.0215E-09 1.1884E-10 8.9668E-11 - 4.4668E+03 2.3626E-09 1.3617E-09 7.4220E-11 5.7699E-11 - 5.0119E+03 1.5913E-09 9.1284E-10 4.9019E-11 3.8669E-11 - 5.6234E+03 1.0784E-09 6.1134E-10 3.3856E-11 2.5830E-11 - 6.3096E+03 7.1935E-10 4.1529E-10 2.3029E-11 1.4948E-11 - 7.0795E+03 4.8331E-10 2.7635E-10 1.5154E-11 9.7478E-12 - 7.9433E+03 3.2259E-10 1.8221E-10 9.6836E-12 7.0601E-12 - 8.9125E+03 2.1356E-10 1.1969E-10 6.3809E-12 4.7938E-12 - 1.0000E+04 1.4259E-10 7.9102E-11 4.6008E-12 2.9000E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2445E+04 2.2311E+04 1.0937E+04 1.0123E+04 - 1.1220E-01 1.8983E+04 1.8733E+04 9.3803E+03 8.6051E+03 - 1.2589E-01 1.5898E+04 1.5697E+04 7.8998E+03 7.2127E+03 - 1.4125E-01 1.3255E+04 1.3063E+04 6.6095E+03 6.0193E+03 - 1.5849E-01 1.1029E+04 1.0764E+04 5.4886E+03 4.9658E+03 - 1.7783E-01 9.0272E+03 8.7516E+03 4.4755E+03 4.0449E+03 - 1.9953E-01 7.3073E+03 7.0835E+03 3.6708E+03 3.2774E+03 - 2.2387E-01 5.8201E+03 5.6539E+03 2.9941E+03 2.6640E+03 - 2.5119E-01 4.5830E+03 4.4691E+03 2.4030E+03 2.1424E+03 - 2.8184E-01 3.6092E+03 3.5026E+03 1.9164E+03 1.6828E+03 - 3.1623E-01 2.8291E+03 2.7210E+03 1.5010E+03 1.3151E+03 - 3.5481E-01 2.1929E+03 2.1044E+03 1.1689E+03 1.0283E+03 - 3.9811E-01 1.6726E+03 1.6088E+03 9.1031E+02 7.9684E+02 - 4.4668E-01 1.2874E+03 1.2272E+03 7.0418E+02 6.1233E+02 - 5.0119E-01 9.8882E+02 9.3332E+02 5.4155E+02 4.6787E+02 - 5.6234E-01 7.4543E+02 7.0766E+02 4.1195E+02 3.5638E+02 - 6.3096E-01 5.7124E+02 5.4066E+02 3.1442E+02 2.7070E+02 - 7.0795E-01 4.3580E+02 4.0729E+02 2.3680E+02 2.0602E+02 - 7.9433E-01 3.2460E+02 3.0452E+02 1.7550E+02 1.5312E+02 - 8.9125E-01 2.4238E+02 2.2931E+02 1.3215E+02 1.1463E+02 - 1.0000E+00 1.8301E+02 1.7155E+02 1.0002E+02 8.5388E+01 - 1.1220E+00 1.3736E+02 1.2926E+02 7.4536E+01 6.2346E+01 - 1.2589E+00 1.0277E+02 9.6265E+01 5.5761E+01 4.6251E+01 - 1.4125E+00 7.6898E+01 7.1172E+01 4.1868E+01 3.4781E+01 - 1.5849E+00 5.6979E+01 5.2764E+01 3.1106E+01 2.5653E+01 - 1.7783E+00 4.2735E+01 3.9295E+01 2.2799E+01 1.8790E+01 - 1.9953E+00 3.1580E+01 2.9152E+01 1.6723E+01 1.3482E+01 - 2.2387E+00 2.2950E+01 2.1527E+01 1.2160E+01 9.8414E+00 - 2.5119E+00 1.7070E+01 1.5939E+01 8.9766E+00 7.1963E+00 - 2.8184E+00 1.2637E+01 1.1762E+01 6.5860E+00 5.1702E+00 - 3.1623E+00 9.1107E+00 8.3505E+00 4.6825E+00 3.6504E+00 - 3.5481E+00 6.6209E+00 6.0907E+00 3.3447E+00 2.5996E+00 - 3.9811E+00 4.8350E+00 4.3940E+00 2.3980E+00 1.8334E+00 - 4.4668E+00 3.4975E+00 3.1246E+00 1.6917E+00 1.2715E+00 - 5.0119E+00 2.5041E+00 2.2384E+00 1.1854E+00 8.9014E-01 - 5.6234E+00 1.8027E+00 1.6083E+00 8.2336E-01 6.2615E-01 - 6.3096E+00 1.3094E+00 1.1677E+00 5.7861E-01 4.3437E-01 - 7.0795E+00 9.4182E-01 8.4371E-01 3.9950E-01 3.0317E-01 - 7.9433E+00 6.6825E-01 5.8670E-01 2.7237E-01 2.0976E-01 - 8.9125E+00 4.7499E-01 4.1129E-01 1.8779E-01 1.4388E-01 - 1.0000E+01 3.4763E-01 2.9919E-01 1.3518E-01 9.9622E-02 - 1.1220E+01 2.4757E-01 2.1301E-01 9.2503E-02 6.6827E-02 - 1.2589E+01 1.7615E-01 1.5132E-01 6.3159E-02 4.5729E-02 - 1.4125E+01 1.2691E-01 1.0663E-01 4.3774E-02 3.1373E-02 - 1.5849E+01 9.0657E-02 7.5864E-02 2.9331E-02 2.1127E-02 - 1.7783E+01 6.5208E-02 5.4521E-02 1.9538E-02 1.4592E-02 - 1.9953E+01 4.6243E-02 3.8814E-02 1.3559E-02 9.6523E-03 - 2.2387E+01 3.2383E-02 2.7228E-02 9.1380E-03 6.4505E-03 - 2.5119E+01 2.3383E-02 1.9284E-02 6.0501E-03 4.5333E-03 - 2.8184E+01 1.6729E-02 1.3542E-02 4.1933E-03 2.9636E-03 - 3.1623E+01 1.1868E-02 9.5623E-03 2.6426E-03 2.0307E-03 - 3.5481E+01 8.4778E-03 6.7625E-03 1.7591E-03 1.3601E-03 - 3.9811E+01 6.0522E-03 4.7699E-03 1.1794E-03 9.0407E-04 - 4.4668E+01 4.3162E-03 3.3660E-03 7.8089E-04 6.0676E-04 - 5.0119E+01 3.0606E-03 2.3856E-03 5.1953E-04 4.1020E-04 - 5.6234E+01 2.1824E-03 1.6902E-03 3.4893E-04 2.7054E-04 - 6.3096E+01 1.5631E-03 1.1906E-03 2.3063E-04 1.7796E-04 - 7.0795E+01 1.1041E-03 8.3950E-04 1.5235E-04 1.1930E-04 - 7.9433E+01 7.8053E-04 5.9163E-04 1.0125E-04 7.9306E-05 - 8.9125E+01 5.5247E-04 4.1633E-04 6.6708E-05 5.2360E-05 - 1.0000E+02 3.9332E-04 2.9345E-04 4.4718E-05 3.5029E-05 - 1.1220E+02 2.7814E-04 2.0586E-04 2.9602E-05 2.3399E-05 - 1.2589E+02 1.9619E-04 1.4391E-04 1.9603E-05 1.5551E-05 - 1.4125E+02 1.3831E-04 1.0093E-04 1.3186E-05 1.0222E-05 - 1.5849E+02 9.7634E-05 7.0819E-05 8.7582E-06 6.8448E-06 - 1.7783E+02 6.8982E-05 4.9588E-05 5.7508E-06 4.6082E-06 - 1.9953E+02 4.8650E-05 3.4537E-05 3.7992E-06 3.0866E-06 - 2.2387E+02 3.4112E-05 2.4146E-05 2.5253E-06 2.0239E-06 - 2.5119E+02 2.3854E-05 1.6852E-05 1.6858E-06 1.3559E-06 - 2.8184E+02 1.6763E-05 1.1641E-05 1.1410E-06 9.1545E-07 - 3.1623E+02 1.1751E-05 8.1116E-06 7.7060E-07 6.1498E-07 - 3.5481E+02 8.2284E-06 5.6109E-06 5.1502E-07 4.1447E-07 - 3.9811E+02 5.7562E-06 3.9343E-06 3.4649E-07 2.7705E-07 - 4.4668E+02 4.0356E-06 2.7411E-06 2.3500E-07 1.8555E-07 - 5.0119E+02 2.8208E-06 1.8863E-06 1.5708E-07 1.2329E-07 - 5.6234E+02 1.9682E-06 1.3092E-06 1.0475E-07 8.4019E-08 - 6.3096E+02 1.3659E-06 9.0177E-07 7.0860E-08 5.7194E-08 - 7.0795E+02 9.5254E-07 6.2180E-07 4.7241E-08 3.9210E-08 - 7.9433E+02 6.6441E-07 4.3023E-07 3.1772E-08 2.5458E-08 - 8.9125E+02 4.6237E-07 2.9667E-07 2.1630E-08 1.6619E-08 - 1.0000E+03 3.2166E-07 2.0419E-07 1.4631E-08 1.1493E-08 - 1.1220E+03 2.2246E-07 1.4012E-07 9.8517E-09 7.6920E-09 - 1.2589E+03 1.5460E-07 9.6972E-08 6.5284E-09 5.0578E-09 - 1.4125E+03 1.0638E-07 6.6624E-08 4.3955E-09 3.3619E-09 - 1.5849E+03 7.3039E-08 4.5372E-08 3.0733E-09 2.3147E-09 - 1.7783E+03 5.0430E-08 3.1066E-08 1.9538E-09 1.5176E-09 - 1.9953E+03 3.4604E-08 2.1219E-08 1.3220E-09 1.0112E-09 - 2.2387E+03 2.3791E-08 1.4478E-08 9.1111E-10 6.7450E-10 - 2.5119E+03 1.6300E-08 9.8592E-09 5.7635E-10 4.4859E-10 - 2.8184E+03 1.1149E-08 6.5970E-09 3.8629E-10 2.9054E-10 - 3.1623E+03 7.6770E-09 4.5489E-09 2.6643E-10 2.0338E-10 - 3.5481E+03 5.1223E-09 3.0489E-09 1.7107E-10 1.3342E-10 - 3.9811E+03 3.4737E-09 2.0381E-09 1.1484E-10 8.6534E-11 - 4.4668E+03 2.3486E-09 1.3580E-09 7.8709E-11 5.6505E-11 - 5.0119E+03 1.5908E-09 9.1420E-10 5.4142E-11 3.7152E-11 - 5.6234E+03 1.0692E-09 6.1757E-10 3.4650E-11 2.4693E-11 - 6.3096E+03 7.1482E-10 4.1120E-10 2.2591E-11 1.6996E-11 - 7.0795E+03 4.8213E-10 2.7418E-10 1.5282E-11 1.0876E-11 - 7.9433E+03 3.2218E-10 1.8121E-10 1.0191E-11 7.2114E-12 - 8.9125E+03 2.1551E-10 1.1964E-10 6.7045E-12 4.6687E-12 - 1.0000E+04 1.4449E-10 7.9144E-11 4.1196E-12 3.0440E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2542E+04 2.2748E+04 1.1289E+04 1.0010E+04 - 1.1220E-01 1.9071E+04 1.9281E+04 9.7304E+03 8.5423E+03 - 1.2589E-01 1.6133E+04 1.6175E+04 8.2430E+03 7.2207E+03 - 1.4125E-01 1.3529E+04 1.3462E+04 6.8919E+03 6.0111E+03 - 1.5849E-01 1.1183E+04 1.1144E+04 5.7219E+03 4.9630E+03 - 1.7783E-01 9.1363E+03 9.1149E+03 4.7083E+03 4.0757E+03 - 1.9953E-01 7.4184E+03 7.3488E+03 3.8662E+03 3.3123E+03 - 2.2387E-01 5.9261E+03 5.8651E+03 3.1373E+03 2.6834E+03 - 2.5119E-01 4.6672E+03 4.6606E+03 2.5191E+03 2.1378E+03 - 2.8184E-01 3.6619E+03 3.6443E+03 2.0152E+03 1.6757E+03 - 3.1623E-01 2.8590E+03 2.8401E+03 1.5825E+03 1.3072E+03 - 3.5481E-01 2.2118E+03 2.1969E+03 1.2416E+03 1.0104E+03 - 3.9811E-01 1.6939E+03 1.6812E+03 9.6012E+02 7.8412E+02 - 4.4668E-01 1.3003E+03 1.2794E+03 7.3672E+02 6.0361E+02 - 5.0119E-01 9.9475E+02 9.7277E+02 5.6837E+02 4.6363E+02 - 5.6234E-01 7.5633E+02 7.4070E+02 4.3165E+02 3.5314E+02 - 6.3096E-01 5.7261E+02 5.5575E+02 3.2493E+02 2.6621E+02 - 7.0795E-01 4.3364E+02 4.2131E+02 2.4852E+02 2.0040E+02 - 7.9433E-01 3.2249E+02 3.1751E+02 1.8864E+02 1.5029E+02 - 8.9125E-01 2.4158E+02 2.3611E+02 1.4028E+02 1.1244E+02 - 1.0000E+00 1.8419E+02 1.7676E+02 1.0563E+02 8.4334E+01 - 1.1220E+00 1.3821E+02 1.3303E+02 7.9584E+01 6.2696E+01 - 1.2589E+00 1.0320E+02 9.9757E+01 5.9147E+01 4.6373E+01 - 1.4125E+00 7.7033E+01 7.4245E+01 4.3816E+01 3.4611E+01 - 1.5849E+00 5.7572E+01 5.4378E+01 3.2210E+01 2.5511E+01 - 1.7783E+00 4.2503E+01 4.0428E+01 2.3699E+01 1.8694E+01 - 1.9953E+00 3.1624E+01 3.0158E+01 1.7573E+01 1.3640E+01 - 2.2387E+00 2.3715E+01 2.2065E+01 1.2935E+01 9.8591E+00 - 2.5119E+00 1.7097E+01 1.6240E+01 9.3262E+00 7.1227E+00 - 2.8184E+00 1.2347E+01 1.1781E+01 6.7000E+00 5.1129E+00 - 3.1623E+00 9.1754E+00 8.4972E+00 4.8164E+00 3.6645E+00 - 3.5481E+00 6.6921E+00 6.1939E+00 3.4329E+00 2.5829E+00 - 3.9811E+00 4.8586E+00 4.5047E+00 2.4477E+00 1.8344E+00 - 4.4668E+00 3.5169E+00 3.2423E+00 1.6946E+00 1.2867E+00 - 5.0119E+00 2.5352E+00 2.3101E+00 1.2039E+00 8.9566E-01 - 5.6234E+00 1.8414E+00 1.6467E+00 8.6642E-01 6.2812E-01 - 6.3096E+00 1.3210E+00 1.1962E+00 5.9137E-01 4.4322E-01 - 7.0795E+00 9.4517E-01 8.4191E-01 4.0393E-01 3.0333E-01 - 7.9433E+00 6.7578E-01 5.8920E-01 2.7938E-01 2.0725E-01 - 8.9125E+00 4.8359E-01 4.2325E-01 1.9290E-01 1.4967E-01 - 1.0000E+01 3.4244E-01 2.9710E-01 1.3166E-01 1.0063E-01 - 1.1220E+01 2.4459E-01 2.1031E-01 9.1301E-02 6.8194E-02 - 1.2589E+01 1.7586E-01 1.4947E-01 6.1878E-02 4.6230E-02 - 1.4125E+01 1.2713E-01 1.0654E-01 4.2165E-02 3.1614E-02 - 1.5849E+01 9.0585E-02 7.5426E-02 2.8208E-02 2.1547E-02 - 1.7783E+01 6.3569E-02 5.3396E-02 1.9156E-02 1.4454E-02 - 1.9953E+01 4.5307E-02 3.8172E-02 1.3046E-02 9.9093E-03 - 2.2387E+01 3.2288E-02 2.6971E-02 8.7737E-03 6.7823E-03 - 2.5119E+01 2.3128E-02 1.9186E-02 5.8569E-03 4.3283E-03 - 2.8184E+01 1.6494E-02 1.3545E-02 3.8337E-03 2.8663E-03 - 3.1623E+01 1.1878E-02 9.5519E-03 2.6315E-03 2.0117E-03 - 3.5481E+01 8.4563E-03 6.7597E-03 1.7642E-03 1.3584E-03 - 3.9811E+01 6.0335E-03 4.7727E-03 1.1754E-03 9.0942E-04 - 4.4668E+01 4.3027E-03 3.3779E-03 7.8279E-04 6.0686E-04 - 5.0119E+01 3.0637E-03 2.3900E-03 5.2350E-04 4.0232E-04 - 5.6234E+01 2.1792E-03 1.6799E-03 3.4863E-04 2.6782E-04 - 6.3096E+01 1.5489E-03 1.1810E-03 2.3152E-04 1.7866E-04 - 7.0795E+01 1.1008E-03 8.3430E-04 1.5365E-04 1.1917E-04 - 7.9433E+01 7.8314E-04 5.8885E-04 1.0205E-04 7.9483E-05 - 8.9125E+01 5.5329E-04 4.1494E-04 6.6873E-05 5.2754E-05 - 1.0000E+02 3.9288E-04 2.9279E-04 4.4869E-05 3.5522E-05 - 1.1220E+02 2.7774E-04 2.0526E-04 2.9767E-05 2.3773E-05 - 1.2589E+02 1.9646E-04 1.4423E-04 1.9722E-05 1.5846E-05 - 1.4125E+02 1.3882E-04 1.0145E-04 1.3044E-05 1.0574E-05 - 1.5849E+02 9.7793E-05 7.0860E-05 8.7232E-06 6.9926E-06 - 1.7783E+02 6.8869E-05 4.9404E-05 5.8252E-06 4.6824E-06 - 1.9953E+02 4.8121E-05 3.4500E-05 3.8922E-06 3.1368E-06 - 2.2387E+02 3.3797E-05 2.4057E-05 2.6071E-06 2.0633E-06 - 2.5119E+02 2.3979E-05 1.6589E-05 1.7161E-06 1.3421E-06 - 2.8184E+02 1.6903E-05 1.1577E-05 1.1307E-06 9.2996E-07 - 3.1623E+02 1.1742E-05 8.1325E-06 7.6837E-07 6.2845E-07 - 3.5481E+02 8.2256E-06 5.6480E-06 5.1877E-07 4.1981E-07 - 3.9811E+02 5.7775E-06 3.9235E-06 3.4984E-07 2.8207E-07 - 4.4668E+02 4.0361E-06 2.7218E-06 2.3578E-07 1.8790E-07 - 5.0119E+02 2.8136E-06 1.8854E-06 1.5739E-07 1.2496E-07 - 5.6234E+02 1.9678E-06 1.3081E-06 1.0438E-07 8.4215E-08 - 6.3096E+02 1.3727E-06 9.0257E-07 7.1071E-08 5.6497E-08 - 7.0795E+02 9.5676E-07 6.2284E-07 4.7247E-08 3.7837E-08 - 7.9433E+02 6.6193E-07 4.3191E-07 3.2049E-08 2.5283E-08 - 8.9125E+02 4.6203E-07 2.9706E-07 2.1587E-08 1.7462E-08 - 1.0000E+03 3.2400E-07 2.0509E-07 1.4508E-08 1.1751E-08 - 1.1220E+03 2.2291E-07 1.4120E-07 9.9938E-09 7.6794E-09 - 1.2589E+03 1.5382E-07 9.7167E-08 6.6685E-09 5.0376E-09 - 1.4125E+03 1.0624E-07 6.6770E-08 4.4946E-09 3.3498E-09 - 1.5849E+03 7.3158E-08 4.5631E-08 2.9660E-09 2.2580E-09 - 1.7783E+03 5.0427E-08 3.1061E-08 1.9842E-09 1.5087E-09 - 1.9953E+03 3.5025E-08 2.1091E-08 1.3571E-09 1.0419E-09 - 2.2387E+03 2.3897E-08 1.4230E-08 9.1551E-10 7.0224E-10 - 2.5119E+03 1.6264E-08 9.7474E-09 6.1789E-10 4.6242E-10 - 2.8184E+03 1.1156E-08 6.6196E-09 3.9962E-10 2.9950E-10 - 3.1623E+03 7.6678E-09 4.5203E-09 2.6266E-10 2.0119E-10 - 3.5481E+03 5.1360E-09 3.0013E-09 1.7827E-10 1.3432E-10 - 3.9811E+03 3.4701E-09 2.0504E-09 1.1970E-10 8.5626E-11 - 4.4668E+03 2.3311E-09 1.3888E-09 7.8582E-11 5.2894E-11 - 5.0119E+03 1.5901E-09 9.3050E-10 5.1930E-11 3.6045E-11 - 5.6234E+03 1.0795E-09 6.1833E-10 3.4204E-11 2.5906E-11 - 6.3096E+03 7.1928E-10 4.0976E-10 2.2417E-11 1.6587E-11 - 7.0795E+03 4.7981E-10 2.7190E-10 1.5494E-11 1.0623E-11 - 7.9433E+03 3.2083E-10 1.8130E-10 1.0227E-11 6.9845E-12 - 8.9125E+03 2.1423E-10 1.2062E-10 6.6541E-12 4.6864E-12 - 1.0000E+04 1.4234E-10 7.9497E-11 4.2931E-12 2.9722E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2736E+04 2.3161E+04 1.1634E+04 1.0110E+04 - 1.1220E-01 1.9297E+04 1.9642E+04 9.9884E+03 8.5747E+03 - 1.2589E-01 1.6306E+04 1.6567E+04 8.4623E+03 7.1735E+03 - 1.4125E-01 1.3636E+04 1.3831E+04 7.1138E+03 5.9758E+03 - 1.5849E-01 1.1257E+04 1.1439E+04 5.9497E+03 4.9095E+03 - 1.7783E-01 9.2220E+03 9.3581E+03 4.8958E+03 4.0289E+03 - 1.9953E-01 7.4567E+03 7.5579E+03 4.0074E+03 3.2727E+03 - 2.2387E-01 5.9588E+03 6.0409E+03 3.2783E+03 2.6313E+03 - 2.5119E-01 4.7263E+03 4.8002E+03 2.6622E+03 2.1049E+03 - 2.8184E-01 3.6973E+03 3.7824E+03 2.1251E+03 1.6730E+03 - 3.1623E-01 2.8725E+03 2.9393E+03 1.6619E+03 1.3084E+03 - 3.5481E-01 2.2304E+03 2.2744E+03 1.2966E+03 1.0055E+03 - 3.9811E-01 1.7189E+03 1.7483E+03 1.0200E+03 7.7535E+02 - 4.4668E-01 1.3133E+03 1.3356E+03 7.8722E+02 5.9978E+02 - 5.0119E-01 9.9917E+02 1.0200E+03 6.0091E+02 4.5953E+02 - 5.6234E-01 7.6199E+02 7.7188E+02 4.5934E+02 3.5153E+02 - 6.3096E-01 5.7839E+02 5.8072E+02 3.4655E+02 2.6727E+02 - 7.0795E-01 4.3123E+02 4.3512E+02 2.6198E+02 1.9988E+02 - 7.9433E-01 3.2431E+02 3.2482E+02 1.9675E+02 1.4816E+02 - 8.9125E-01 2.4313E+02 2.4429E+02 1.4578E+02 1.1190E+02 - 1.0000E+00 1.8380E+02 1.8219E+02 1.0889E+02 8.2873E+01 - 1.1220E+00 1.3794E+02 1.3569E+02 8.0914E+01 6.1899E+01 - 1.2589E+00 1.0284E+02 1.0106E+02 6.0767E+01 4.6107E+01 - 1.4125E+00 7.7149E+01 7.4755E+01 4.5156E+01 3.4117E+01 - 1.5849E+00 5.7459E+01 5.5471E+01 3.2841E+01 2.5265E+01 - 1.7783E+00 4.2347E+01 4.0773E+01 2.4258E+01 1.8253E+01 - 1.9953E+00 3.1154E+01 3.0295E+01 1.7631E+01 1.3097E+01 - 2.2387E+00 2.3134E+01 2.2367E+01 1.2735E+01 9.6478E+00 - 2.5119E+00 1.6997E+01 1.6158E+01 9.4395E+00 6.9561E+00 - 2.8184E+00 1.2400E+01 1.1689E+01 6.8001E+00 4.9812E+00 - 3.1623E+00 9.1598E+00 8.5359E+00 4.8318E+00 3.6780E+00 - 3.5481E+00 6.6936E+00 6.1876E+00 3.4296E+00 2.5918E+00 - 3.9811E+00 4.8411E+00 4.4425E+00 2.4225E+00 1.8492E+00 - 4.4668E+00 3.5135E+00 3.1940E+00 1.7180E+00 1.2957E+00 - 5.0119E+00 2.5396E+00 2.3096E+00 1.2240E+00 8.9200E-01 - 5.6234E+00 1.8080E+00 1.6436E+00 8.4588E-01 6.1375E-01 - 6.3096E+00 1.3008E+00 1.1775E+00 5.8664E-01 4.3144E-01 - 7.0795E+00 9.4882E-01 8.2583E-01 4.0634E-01 3.0359E-01 - 7.9433E+00 6.7539E-01 5.8505E-01 2.8452E-01 2.0531E-01 - 8.9125E+00 4.8049E-01 4.2469E-01 1.9705E-01 1.4375E-01 - 1.0000E+01 3.4417E-01 3.0169E-01 1.3462E-01 9.8539E-02 - 1.1220E+01 2.4675E-01 2.1357E-01 9.1124E-02 6.7507E-02 - 1.2589E+01 1.7592E-01 1.4998E-01 6.2377E-02 4.6230E-02 - 1.4125E+01 1.2584E-01 1.0651E-01 4.2194E-02 3.0786E-02 - 1.5849E+01 8.9644E-02 7.5269E-02 2.8556E-02 2.1133E-02 - 1.7783E+01 6.4547E-02 5.3925E-02 1.9790E-02 1.4187E-02 - 1.9953E+01 4.6448E-02 3.8705E-02 1.3240E-02 9.6595E-03 - 2.2387E+01 3.2828E-02 2.6536E-02 8.6513E-03 6.7722E-03 - 2.5119E+01 2.3354E-02 1.8513E-02 5.9549E-03 4.5943E-03 - 2.8184E+01 1.6326E-02 1.3189E-02 3.9527E-03 2.9983E-03 - 3.1623E+01 1.1898E-02 9.5460E-03 2.6507E-03 2.0205E-03 - 3.5481E+01 8.5008E-03 6.7525E-03 1.7768E-03 1.3585E-03 - 3.9811E+01 6.0448E-03 4.7801E-03 1.1822E-03 9.0991E-04 - 4.4668E+01 4.3060E-03 3.3825E-03 7.8301E-04 6.0853E-04 - 5.0119E+01 3.0694E-03 2.3944E-03 5.1845E-04 4.1066E-04 - 5.6234E+01 2.1871E-03 1.6887E-03 3.4407E-04 2.7313E-04 - 6.3096E+01 1.5547E-03 1.1876E-03 2.2936E-04 1.7974E-04 - 7.0795E+01 1.1001E-03 8.3898E-04 1.5489E-04 1.1990E-04 - 7.9433E+01 7.8127E-04 5.8722E-04 1.0285E-04 8.0069E-05 - 8.9125E+01 5.5525E-04 4.1522E-04 6.7459E-05 5.3132E-05 - 1.0000E+02 3.9387E-04 2.9268E-04 4.4556E-05 3.5557E-05 - 1.1220E+02 2.7877E-04 2.0522E-04 2.9627E-05 2.3821E-05 - 1.2589E+02 1.9652E-04 1.4399E-04 1.9609E-05 1.5772E-05 - 1.4125E+02 1.3860E-04 1.0114E-04 1.3040E-05 1.0462E-05 - 1.5849E+02 9.7662E-05 7.1020E-05 8.7261E-06 7.1215E-06 - 1.7783E+02 6.8673E-05 4.9620E-05 5.8020E-06 4.7483E-06 - 1.9953E+02 4.8282E-05 3.4525E-05 3.8161E-06 3.0634E-06 - 2.2387E+02 3.3977E-05 2.4028E-05 2.5959E-06 2.0581E-06 - 2.5119E+02 2.3872E-05 1.6734E-05 1.7236E-06 1.3834E-06 - 2.8184E+02 1.6930E-05 1.1744E-05 1.1309E-06 9.2720E-07 - 3.1623E+02 1.1783E-05 8.1248E-06 7.7192E-07 6.2357E-07 - 3.5481E+02 8.2033E-06 5.6387E-06 5.1381E-07 4.1608E-07 - 3.9811E+02 5.7555E-06 3.9179E-06 3.4538E-07 2.8202E-07 - 4.4668E+02 4.0358E-06 2.7283E-06 2.3097E-07 1.8779E-07 - 5.0119E+02 2.8105E-06 1.8958E-06 1.5722E-07 1.2572E-07 - 5.6234E+02 1.9629E-06 1.3037E-06 1.0765E-07 8.3264E-08 - 6.3096E+02 1.3729E-06 9.0238E-07 7.1633E-08 5.6259E-08 - 7.0795E+02 9.5693E-07 6.2410E-07 4.7890E-08 3.8355E-08 - 7.9433E+02 6.6077E-07 4.2915E-07 3.1806E-08 2.5669E-08 - 8.9125E+02 4.5913E-07 2.9635E-07 2.1525E-08 1.6992E-08 - 1.0000E+03 3.2089E-07 2.0501E-07 1.4717E-08 1.1676E-08 - 1.1220E+03 2.2305E-07 1.4029E-07 9.7886E-09 7.9594E-09 - 1.2589E+03 1.5369E-07 9.5866E-08 6.5939E-09 5.2920E-09 - 1.4125E+03 1.0567E-07 6.5750E-08 4.4173E-09 3.4978E-09 - 1.5849E+03 7.3117E-08 4.5279E-08 2.9848E-09 2.1941E-09 - 1.7783E+03 5.0311E-08 3.0958E-08 1.9862E-09 1.4852E-09 - 1.9953E+03 3.4835E-08 2.1127E-08 1.3445E-09 1.0444E-09 - 2.2387E+03 2.3844E-08 1.4292E-08 9.1717E-10 6.9190E-10 - 2.5119E+03 1.6276E-08 9.6820E-09 5.9410E-10 4.5337E-10 - 2.8184E+03 1.1106E-08 6.6462E-09 4.0438E-10 2.9804E-10 - 3.1623E+03 7.7146E-09 4.5573E-09 2.6572E-10 1.9615E-10 - 3.5481E+03 5.1793E-09 3.0406E-09 1.7950E-10 1.2962E-10 - 3.9811E+03 3.4699E-09 2.0521E-09 1.1862E-10 8.5635E-11 - 4.4668E+03 2.3510E-09 1.3770E-09 7.9551E-11 5.4219E-11 - 5.0119E+03 1.5925E-09 9.2471E-10 5.3249E-11 3.5856E-11 - 5.6234E+03 1.0655E-09 6.1905E-10 3.5565E-11 2.4313E-11 - 6.3096E+03 7.1824E-10 4.1295E-10 2.2423E-11 1.6252E-11 - 7.0795E+03 4.8333E-10 2.7145E-10 1.4835E-11 1.0966E-11 - 7.9433E+03 3.2388E-10 1.8078E-10 9.9162E-12 7.1539E-12 - 8.9125E+03 2.1551E-10 1.2013E-10 6.7401E-12 4.4670E-12 - 1.0000E+04 1.4311E-10 7.8907E-11 4.3022E-12 3.0078E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2781E+04 2.3600E+04 1.1881E+04 9.9475E+03 - 1.1220E-01 1.9222E+04 1.9988E+04 1.0304E+04 8.5113E+03 - 1.2589E-01 1.6264E+04 1.6853E+04 8.7960E+03 7.1453E+03 - 1.4125E-01 1.3706E+04 1.4076E+04 7.3749E+03 5.9643E+03 - 1.5849E-01 1.1348E+04 1.1699E+04 6.1540E+03 4.9416E+03 - 1.7783E-01 9.2475E+03 9.5867E+03 5.1041E+03 4.0272E+03 - 1.9953E-01 7.4857E+03 7.7637E+03 4.1862E+03 3.2534E+03 - 2.2387E-01 5.9953E+03 6.2043E+03 3.3982E+03 2.6331E+03 - 2.5119E-01 4.7588E+03 4.9205E+03 2.7456E+03 2.1136E+03 - 2.8184E-01 3.7262E+03 3.8881E+03 2.1938E+03 1.6426E+03 - 3.1623E-01 2.8740E+03 3.0416E+03 1.7265E+03 1.2837E+03 - 3.5481E-01 2.2193E+03 2.3462E+03 1.3622E+03 9.9743E+02 - 3.9811E-01 1.7270E+03 1.7870E+03 1.0548E+03 7.6470E+02 - 4.4668E-01 1.3247E+03 1.3705E+03 8.0412E+02 5.8978E+02 - 5.0119E-01 9.9720E+02 1.0445E+03 6.2036E+02 4.4996E+02 - 5.6234E-01 7.5986E+02 7.8787E+02 4.7652E+02 3.4017E+02 - 6.3096E-01 5.7780E+02 5.9410E+02 3.5683E+02 2.5925E+02 - 7.0795E-01 4.2804E+02 4.4623E+02 2.6880E+02 1.9750E+02 - 7.9433E-01 3.2179E+02 3.3262E+02 2.0291E+02 1.4562E+02 - 8.9125E-01 2.4321E+02 2.4860E+02 1.5103E+02 1.0793E+02 - 1.0000E+00 1.8251E+02 1.8665E+02 1.1335E+02 8.0972E+01 - 1.1220E+00 1.3770E+02 1.3933E+02 8.3847E+01 6.1040E+01 - 1.2589E+00 1.0302E+02 1.0338E+02 6.1871E+01 4.5919E+01 - 1.4125E+00 7.6737E+01 7.6290E+01 4.5898E+01 3.3790E+01 - 1.5849E+00 5.7648E+01 5.6878E+01 3.4090E+01 2.4804E+01 - 1.7783E+00 4.2951E+01 4.1636E+01 2.4951E+01 1.8031E+01 - 1.9953E+00 3.1579E+01 3.0433E+01 1.8041E+01 1.3097E+01 - 2.2387E+00 2.3451E+01 2.2541E+01 1.3074E+01 9.8019E+00 - 2.5119E+00 1.7185E+01 1.6376E+01 9.3943E+00 7.2103E+00 - 2.8184E+00 1.2342E+01 1.1641E+01 6.6705E+00 5.1690E+00 - 3.1623E+00 9.1929E+00 8.6933E+00 4.8974E+00 3.6253E+00 - 3.5481E+00 6.7352E+00 6.2874E+00 3.4954E+00 2.5957E+00 - 3.9811E+00 4.8934E+00 4.5229E+00 2.4473E+00 1.8445E+00 - 4.4668E+00 3.5212E+00 3.2491E+00 1.7235E+00 1.3032E+00 - 5.0119E+00 2.5312E+00 2.3102E+00 1.2226E+00 9.1398E-01 - 5.6234E+00 1.8279E+00 1.6403E+00 8.4994E-01 6.3945E-01 - 6.3096E+00 1.3061E+00 1.1781E+00 5.9677E-01 4.4117E-01 - 7.0795E+00 9.3249E-01 8.2914E-01 4.1430E-01 3.0053E-01 - 7.9433E+00 6.6516E-01 5.7972E-01 2.8961E-01 2.1113E-01 - 8.9125E+00 4.7826E-01 4.1570E-01 1.9718E-01 1.4289E-01 - 1.0000E+01 3.4236E-01 3.0303E-01 1.3383E-01 9.9678E-02 - 1.1220E+01 2.4745E-01 2.1393E-01 9.3060E-02 6.9074E-02 - 1.2589E+01 1.7723E-01 1.4950E-01 6.2324E-02 4.7770E-02 - 1.4125E+01 1.2659E-01 1.0541E-01 4.2407E-02 3.2446E-02 - 1.5849E+01 9.0700E-02 7.5441E-02 2.8965E-02 2.1539E-02 - 1.7783E+01 6.4051E-02 5.3996E-02 1.8681E-02 1.4352E-02 - 1.9953E+01 4.4973E-02 3.8785E-02 1.2818E-02 9.5650E-03 - 2.2387E+01 3.2094E-02 2.7312E-02 9.0212E-03 6.3916E-03 - 2.5119E+01 2.3100E-02 1.8502E-02 5.9294E-03 4.3079E-03 - 2.8184E+01 1.6768E-02 1.2990E-02 4.0307E-03 2.8971E-03 - 3.1623E+01 1.1859E-02 9.5724E-03 2.6612E-03 2.0290E-03 - 3.5481E+01 8.4740E-03 6.7838E-03 1.7664E-03 1.3664E-03 - 3.9811E+01 6.0414E-03 4.8020E-03 1.1804E-03 9.1445E-04 - 4.4668E+01 4.3111E-03 3.3825E-03 7.8605E-04 6.1263E-04 - 5.0119E+01 3.0743E-03 2.3924E-03 5.2153E-04 4.0985E-04 - 5.6234E+01 2.1899E-03 1.6993E-03 3.4715E-04 2.7155E-04 - 6.3096E+01 1.5576E-03 1.1971E-03 2.3056E-04 1.8206E-04 - 7.0795E+01 1.1040E-03 8.4030E-04 1.5262E-04 1.2220E-04 - 7.9433E+01 7.7905E-04 5.9566E-04 1.0200E-04 8.1841E-05 - 8.9125E+01 5.5469E-04 4.2120E-04 6.7708E-05 5.4958E-05 - 1.0000E+02 3.9289E-04 2.9417E-04 4.4635E-05 3.5505E-05 - 1.1220E+02 2.7820E-04 2.0610E-04 2.9777E-05 2.3735E-05 - 1.2589E+02 1.9707E-04 1.4428E-04 1.9810E-05 1.5868E-05 - 1.4125E+02 1.3925E-04 1.0099E-04 1.3052E-05 1.0605E-05 - 1.5849E+02 9.8073E-05 7.0994E-05 8.7272E-06 7.0621E-06 - 1.7783E+02 6.9300E-05 4.9677E-05 5.8467E-06 4.7397E-06 - 1.9953E+02 4.8694E-05 3.4772E-05 3.9053E-06 3.1411E-06 - 2.2387E+02 3.3966E-05 2.4174E-05 2.5563E-06 2.1391E-06 - 2.5119E+02 2.4037E-05 1.6836E-05 1.7034E-06 1.4595E-06 - 2.8184E+02 1.6846E-05 1.1812E-05 1.1482E-06 9.3717E-07 - 3.1623E+02 1.1743E-05 8.1450E-06 7.6814E-07 6.2403E-07 - 3.5481E+02 8.2432E-06 5.6577E-06 5.1441E-07 4.2370E-07 - 3.9811E+02 5.7766E-06 3.9298E-06 3.4321E-07 2.8193E-07 - 4.4668E+02 4.0231E-06 2.7187E-06 2.3067E-07 1.8660E-07 - 5.0119E+02 2.8072E-06 1.8854E-06 1.5561E-07 1.2487E-07 - 5.6234E+02 1.9695E-06 1.3065E-06 1.0617E-07 8.4682E-08 - 6.3096E+02 1.3680E-06 9.0536E-07 7.1241E-08 5.6214E-08 - 7.0795E+02 9.5190E-07 6.2685E-07 4.7837E-08 3.7333E-08 - 7.9433E+02 6.6550E-07 4.3064E-07 3.2150E-08 2.5511E-08 - 8.9125E+02 4.6322E-07 2.9741E-07 2.1412E-08 1.6983E-08 - 1.0000E+03 3.2257E-07 2.0608E-07 1.4251E-08 1.1611E-08 - 1.1220E+03 2.2313E-07 1.4094E-07 9.6331E-09 7.9409E-09 - 1.2589E+03 1.5382E-07 9.6704E-08 6.5188E-09 5.1865E-09 - 1.4125E+03 1.0606E-07 6.6411E-08 4.4754E-09 3.3628E-09 - 1.5849E+03 7.3188E-08 4.5533E-08 3.0518E-09 2.2708E-09 - 1.7783E+03 5.0502E-08 3.0911E-08 2.0255E-09 1.6223E-09 - 1.9953E+03 3.4885E-08 2.1278E-08 1.3465E-09 1.0711E-09 - 2.2387E+03 2.3886E-08 1.4462E-08 8.9320E-10 6.7486E-10 - 2.5119E+03 1.6441E-08 9.6831E-09 5.8642E-10 4.5176E-10 - 2.8184E+03 1.1241E-08 6.5509E-09 3.9772E-10 3.0926E-10 - 3.1623E+03 7.6744E-09 4.5410E-09 2.6559E-10 2.0419E-10 - 3.5481E+03 5.1256E-09 3.0064E-09 1.7790E-10 1.3268E-10 - 3.9811E+03 3.4858E-09 2.0404E-09 1.1628E-10 8.6594E-11 - 4.4668E+03 2.3595E-09 1.3690E-09 7.4962E-11 5.5247E-11 - 5.0119E+03 1.5835E-09 9.1385E-10 5.0796E-11 3.6261E-11 - 5.6234E+03 1.0599E-09 6.1485E-10 3.4427E-11 2.5585E-11 - 6.3096E+03 7.1895E-10 4.1204E-10 2.2217E-11 1.6769E-11 - 7.0795E+03 4.8125E-10 2.7168E-10 1.4470E-11 1.0684E-11 - 7.9433E+03 3.2039E-10 1.7860E-10 1.0026E-11 6.8688E-12 - 8.9125E+03 2.1384E-10 1.1993E-10 6.3746E-12 4.5894E-12 - 1.0000E+04 1.4226E-10 8.0616E-11 3.9520E-12 2.9611E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2841E+04 2.3748E+04 1.2036E+04 9.9293E+03 - 1.1220E-01 1.9330E+04 2.0120E+04 1.0339E+04 8.5268E+03 - 1.2589E-01 1.6283E+04 1.6951E+04 8.7964E+03 7.1166E+03 - 1.4125E-01 1.3652E+04 1.4203E+04 7.4358E+03 5.9043E+03 - 1.5849E-01 1.1350E+04 1.1753E+04 6.1891E+03 4.9055E+03 - 1.7783E-01 9.2780E+03 9.6395E+03 5.1307E+03 3.9913E+03 - 1.9953E-01 7.4686E+03 7.8448E+03 4.2106E+03 3.2275E+03 - 2.2387E-01 6.0078E+03 6.2803E+03 3.4197E+03 2.6069E+03 - 2.5119E-01 4.7615E+03 4.9544E+03 2.7540E+03 2.0757E+03 - 2.8184E-01 3.7268E+03 3.9250E+03 2.2035E+03 1.6393E+03 - 3.1623E-01 2.9128E+03 3.0755E+03 1.7531E+03 1.2793E+03 - 3.5481E-01 2.2462E+03 2.3708E+03 1.3740E+03 9.8943E+02 - 3.9811E-01 1.7149E+03 1.8186E+03 1.0689E+03 7.7108E+02 - 4.4668E-01 1.3069E+03 1.3870E+03 8.2982E+02 5.9844E+02 - 5.0119E-01 9.9579E+02 1.0548E+03 6.3634E+02 4.4838E+02 - 5.6234E-01 7.5509E+02 7.9989E+02 4.8273E+02 3.3812E+02 - 6.3096E-01 5.6729E+02 6.0875E+02 3.6710E+02 2.5775E+02 - 7.0795E-01 4.2678E+02 4.6057E+02 2.7707E+02 1.9370E+02 - 7.9433E-01 3.2503E+02 3.4109E+02 2.0588E+02 1.4442E+02 - 8.9125E-01 2.4736E+02 2.5562E+02 1.5347E+02 1.0775E+02 - 1.0000E+00 1.8391E+02 1.9004E+02 1.1442E+02 8.1040E+01 - 1.1220E+00 1.3776E+02 1.4146E+02 8.5420E+01 6.1178E+01 - 1.2589E+00 1.0280E+02 1.0533E+02 6.3077E+01 4.5331E+01 - 1.4125E+00 7.6636E+01 7.7117E+01 4.6469E+01 3.3419E+01 - 1.5849E+00 5.7735E+01 5.7281E+01 3.4245E+01 2.5007E+01 - 1.7783E+00 4.3445E+01 4.2585E+01 2.5080E+01 1.8208E+01 - 1.9953E+00 3.1923E+01 3.1011E+01 1.8636E+01 1.3246E+01 - 2.2387E+00 2.3395E+01 2.2742E+01 1.3462E+01 9.8035E+00 - 2.5119E+00 1.7137E+01 1.6509E+01 9.5657E+00 7.0789E+00 - 2.8184E+00 1.2460E+01 1.1931E+01 6.9012E+00 5.0538E+00 - 3.1623E+00 9.2586E+00 8.6484E+00 4.9323E+00 3.6590E+00 - 3.5481E+00 6.6751E+00 6.2691E+00 3.5151E+00 2.5651E+00 - 3.9811E+00 4.7640E+00 4.5025E+00 2.4744E+00 1.8184E+00 - 4.4668E+00 3.4535E+00 3.2483E+00 1.7513E+00 1.2832E+00 - 5.0119E+00 2.5156E+00 2.3388E+00 1.2403E+00 8.9286E-01 - 5.6234E+00 1.8119E+00 1.6407E+00 8.6192E-01 6.2838E-01 - 6.3096E+00 1.3010E+00 1.1778E+00 5.9144E-01 4.4643E-01 - 7.0795E+00 9.3916E-01 8.5519E-01 4.0458E-01 3.1272E-01 - 7.9433E+00 6.7968E-01 5.9841E-01 2.7904E-01 2.1715E-01 - 8.9125E+00 4.8743E-01 4.2380E-01 1.9687E-01 1.4847E-01 - 1.0000E+01 3.4608E-01 3.0053E-01 1.3422E-01 1.0187E-01 - 1.1220E+01 2.4723E-01 2.1410E-01 9.0402E-02 6.8885E-02 - 1.2589E+01 1.7692E-01 1.4895E-01 6.2492E-02 4.6739E-02 - 1.4125E+01 1.2690E-01 1.0540E-01 4.2343E-02 3.1895E-02 - 1.5849E+01 9.0246E-02 7.5856E-02 2.8914E-02 2.1513E-02 - 1.7783E+01 6.3883E-02 5.3690E-02 1.9957E-02 1.4240E-02 - 1.9953E+01 4.5990E-02 3.8030E-02 1.2926E-02 9.6081E-03 - 2.2387E+01 3.2808E-02 2.6967E-02 8.5370E-03 6.7976E-03 - 2.5119E+01 2.3032E-02 1.9289E-02 5.8870E-03 4.5722E-03 - 2.8184E+01 1.6534E-02 1.3699E-02 3.8911E-03 3.1538E-03 - 3.1623E+01 1.1869E-02 9.5356E-03 2.6558E-03 2.0286E-03 - 3.5481E+01 8.4524E-03 6.7297E-03 1.7638E-03 1.3560E-03 - 3.9811E+01 6.0402E-03 4.7681E-03 1.1752E-03 8.9601E-04 - 4.4668E+01 4.3079E-03 3.3787E-03 7.8551E-04 6.0213E-04 - 5.0119E+01 3.0741E-03 2.3733E-03 5.2535E-04 4.0597E-04 - 5.6234E+01 2.1774E-03 1.6745E-03 3.4697E-04 2.7108E-04 - 6.3096E+01 1.5467E-03 1.1842E-03 2.2990E-04 1.7974E-04 - 7.0795E+01 1.1036E-03 8.4130E-04 1.5310E-04 1.2119E-04 - 7.9433E+01 7.8537E-04 5.9300E-04 1.0067E-04 8.0484E-05 - 8.9125E+01 5.5593E-04 4.1861E-04 6.6221E-05 5.3901E-05 - 1.0000E+02 3.9279E-04 2.9370E-04 4.5054E-05 3.5587E-05 - 1.1220E+02 2.7833E-04 2.0593E-04 2.9793E-05 2.3566E-05 - 1.2589E+02 1.9671E-04 1.4452E-04 1.9798E-05 1.5617E-05 - 1.4125E+02 1.3864E-04 1.0141E-04 1.3071E-05 1.0404E-05 - 1.5849E+02 9.7534E-05 7.1072E-05 8.6555E-06 6.9104E-06 - 1.7783E+02 6.9189E-05 4.9509E-05 5.8265E-06 4.5820E-06 - 1.9953E+02 4.8977E-05 3.4411E-05 3.9452E-06 3.0835E-06 - 2.2387E+02 3.4146E-05 2.4026E-05 2.6018E-06 2.0623E-06 - 2.5119E+02 2.3897E-05 1.6740E-05 1.7257E-06 1.4078E-06 - 2.8184E+02 1.6783E-05 1.1601E-05 1.1497E-06 9.2714E-07 - 3.1623E+02 1.1816E-05 8.1328E-06 7.6276E-07 6.1512E-07 - 3.5481E+02 8.2427E-06 5.6498E-06 5.1418E-07 4.1360E-07 - 3.9811E+02 5.7343E-06 3.9249E-06 3.4626E-07 2.8111E-07 - 4.4668E+02 4.0101E-06 2.7168E-06 2.3133E-07 1.8868E-07 - 5.0119E+02 2.8188E-06 1.8716E-06 1.5618E-07 1.2371E-07 - 5.6234E+02 1.9634E-06 1.3103E-06 1.0447E-07 8.3925E-08 - 6.3096E+02 1.3661E-06 9.0444E-07 7.2286E-08 5.5690E-08 - 7.0795E+02 9.5520E-07 6.2218E-07 4.8560E-08 3.8049E-08 - 7.9433E+02 6.6485E-07 4.2789E-07 3.1927E-08 2.5182E-08 - 8.9125E+02 4.6200E-07 2.9676E-07 2.1369E-08 1.6766E-08 - 1.0000E+03 3.2283E-07 2.0638E-07 1.4768E-08 1.1368E-08 - 1.1220E+03 2.2248E-07 1.4107E-07 9.9294E-09 7.5223E-09 - 1.2589E+03 1.5361E-07 9.6644E-08 6.7296E-09 5.1160E-09 - 1.4125E+03 1.0641E-07 6.6377E-08 4.4715E-09 3.5592E-09 - 1.5849E+03 7.3782E-08 4.5148E-08 2.8354E-09 2.3140E-09 - 1.7783E+03 5.0844E-08 3.0875E-08 1.8703E-09 1.5317E-09 - 1.9953E+03 3.4845E-08 2.1279E-08 1.3513E-09 1.0678E-09 - 2.2387E+03 2.3876E-08 1.4455E-08 9.2756E-10 7.1687E-10 - 2.5119E+03 1.6244E-08 9.7442E-09 6.0337E-10 4.5493E-10 - 2.8184E+03 1.1088E-08 6.6054E-09 3.9178E-10 3.0244E-10 - 3.1623E+03 7.6753E-09 4.5528E-09 2.5775E-10 1.9603E-10 - 3.5481E+03 5.1102E-09 3.0446E-09 1.6862E-10 1.3406E-10 - 3.9811E+03 3.4911E-09 2.0651E-09 1.1453E-10 8.9528E-11 - 4.4668E+03 2.3572E-09 1.3755E-09 7.6024E-11 5.8791E-11 - 5.0119E+03 1.5831E-09 9.0918E-10 5.2113E-11 3.8477E-11 - 5.6234E+03 1.0774E-09 6.0728E-10 3.6097E-11 2.4498E-11 - 6.3096E+03 7.2465E-10 4.0959E-10 2.2788E-11 1.6483E-11 - 7.0795E+03 4.8296E-10 2.7263E-10 1.5164E-11 1.0703E-11 - 7.9433E+03 3.2114E-10 1.8150E-10 9.8782E-12 6.9675E-12 - 8.9125E+03 2.1342E-10 1.2013E-10 6.6760E-12 4.8870E-12 - 1.0000E+04 1.4056E-10 7.9835E-11 4.5569E-12 3.1360E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2725E+04 2.3564E+04 1.1857E+04 9.8770E+03 - 1.1220E-01 1.9238E+04 1.9914E+04 1.0228E+04 8.4771E+03 - 1.2589E-01 1.6219E+04 1.6787E+04 8.6847E+03 7.0667E+03 - 1.4125E-01 1.3618E+04 1.4137E+04 7.3094E+03 5.8740E+03 - 1.5849E-01 1.1307E+04 1.1730E+04 6.1297E+03 4.8627E+03 - 1.7783E-01 9.2541E+03 9.5931E+03 5.0830E+03 3.9818E+03 - 1.9953E-01 7.4870E+03 7.7520E+03 4.1869E+03 3.2288E+03 - 2.2387E-01 5.9862E+03 6.2092E+03 3.4215E+03 2.5974E+03 - 2.5119E-01 4.7363E+03 4.9392E+03 2.7598E+03 2.0746E+03 - 2.8184E-01 3.7129E+03 3.9031E+03 2.1976E+03 1.6414E+03 - 3.1623E-01 2.8934E+03 3.0517E+03 1.7364E+03 1.2781E+03 - 3.5481E-01 2.2370E+03 2.3539E+03 1.3621E+03 9.9027E+02 - 3.9811E-01 1.7134E+03 1.8028E+03 1.0633E+03 7.6209E+02 - 4.4668E-01 1.3117E+03 1.3804E+03 8.2630E+02 5.8236E+02 - 5.0119E-01 1.0062E+03 1.0549E+03 6.3489E+02 4.4887E+02 - 5.6234E-01 7.5874E+02 8.0053E+02 4.8290E+02 3.4425E+02 - 6.3096E-01 5.7180E+02 6.0351E+02 3.6394E+02 2.5865E+02 - 7.0795E-01 4.3341E+02 4.5385E+02 2.7423E+02 1.9333E+02 - 7.9433E-01 3.2587E+02 3.4183E+02 2.0422E+02 1.4343E+02 - 8.9125E-01 2.4323E+02 2.5446E+02 1.5333E+02 1.0610E+02 - 1.0000E+00 1.8272E+02 1.8951E+02 1.1461E+02 8.0214E+01 - 1.1220E+00 1.3649E+02 1.4064E+02 8.5132E+01 6.0684E+01 - 1.2589E+00 1.0201E+02 1.0532E+02 6.2761E+01 4.5479E+01 - 1.4125E+00 7.7154E+01 7.8163E+01 4.6415E+01 3.3729E+01 - 1.5849E+00 5.7627E+01 5.7666E+01 3.4193E+01 2.4946E+01 - 1.7783E+00 4.3147E+01 4.2236E+01 2.4747E+01 1.7892E+01 - 1.9953E+00 3.2160E+01 3.1137E+01 1.8298E+01 1.2780E+01 - 2.2387E+00 2.3372E+01 2.2917E+01 1.3360E+01 9.5976E+00 - 2.5119E+00 1.7135E+01 1.6418E+01 9.5901E+00 7.1671E+00 - 2.8184E+00 1.2710E+01 1.2034E+01 6.9888E+00 5.1251E+00 - 3.1623E+00 9.1864E+00 8.6603E+00 4.9449E+00 3.6325E+00 - 3.5481E+00 6.6782E+00 6.2447E+00 3.5114E+00 2.6139E+00 - 3.9811E+00 4.8898E+00 4.4721E+00 2.4592E+00 1.8427E+00 - 4.4668E+00 3.5335E+00 3.2486E+00 1.7340E+00 1.2875E+00 - 5.0119E+00 2.5500E+00 2.3375E+00 1.2375E+00 9.1070E-01 - 5.6234E+00 1.8306E+00 1.6559E+00 8.5220E-01 6.4116E-01 - 6.3096E+00 1.3053E+00 1.1707E+00 5.9350E-01 4.4438E-01 - 7.0795E+00 9.3661E-01 8.3708E-01 4.1213E-01 3.0918E-01 - 7.9433E+00 6.8138E-01 6.0311E-01 2.8470E-01 2.1568E-01 - 8.9125E+00 4.8629E-01 4.2325E-01 1.9596E-01 1.4812E-01 - 1.0000E+01 3.4691E-01 3.0002E-01 1.3239E-01 1.0031E-01 - 1.1220E+01 2.4814E-01 2.1281E-01 9.2067E-02 6.8236E-02 - 1.2589E+01 1.7506E-01 1.5149E-01 6.2177E-02 4.5791E-02 - 1.4125E+01 1.2458E-01 1.0633E-01 4.2201E-02 3.1738E-02 - 1.5849E+01 9.0219E-02 7.4315E-02 2.9102E-02 2.1152E-02 - 1.7783E+01 6.4300E-02 5.2681E-02 1.9152E-02 1.3908E-02 - 1.9953E+01 4.5562E-02 3.7577E-02 1.2797E-02 9.4833E-03 - 2.2387E+01 3.2552E-02 2.6939E-02 8.6080E-03 6.7329E-03 - 2.5119E+01 2.3660E-02 1.9414E-02 5.8564E-03 4.6681E-03 - 2.8184E+01 1.6837E-02 1.3402E-02 4.0380E-03 2.9924E-03 - 3.1623E+01 1.1885E-02 9.5309E-03 2.6362E-03 2.0169E-03 - 3.5481E+01 8.4544E-03 6.7511E-03 1.7649E-03 1.3574E-03 - 3.9811E+01 6.0265E-03 4.7724E-03 1.1638E-03 9.0633E-04 - 4.4668E+01 4.2986E-03 3.3812E-03 7.7306E-04 6.0509E-04 - 5.0119E+01 3.0629E-03 2.3876E-03 5.1921E-04 4.0911E-04 - 5.6234E+01 2.1818E-03 1.6786E-03 3.4452E-04 2.7014E-04 - 6.3096E+01 1.5470E-03 1.1863E-03 2.2847E-04 1.7467E-04 - 7.0795E+01 1.1020E-03 8.4053E-04 1.5185E-04 1.1864E-04 - 7.9433E+01 7.8457E-04 5.9299E-04 1.0167E-04 7.9843E-05 - 8.9125E+01 5.5392E-04 4.1860E-04 6.6552E-05 5.3325E-05 - 1.0000E+02 3.9334E-04 2.9300E-04 4.4650E-05 3.5501E-05 - 1.1220E+02 2.7815E-04 2.0608E-04 2.9593E-05 2.3687E-05 - 1.2589E+02 1.9661E-04 1.4464E-04 1.9555E-05 1.5936E-05 - 1.4125E+02 1.3924E-04 1.0127E-04 1.3073E-05 1.0545E-05 - 1.5849E+02 9.7724E-05 7.0633E-05 8.6837E-06 7.0278E-06 - 1.7783E+02 6.8680E-05 4.9340E-05 5.7821E-06 4.6754E-06 - 1.9953E+02 4.8473E-05 3.4577E-05 3.8972E-06 3.1115E-06 - 2.2387E+02 3.4154E-05 2.4102E-05 2.6010E-06 2.0817E-06 - 2.5119E+02 2.4088E-05 1.6728E-05 1.7118E-06 1.3847E-06 - 2.8184E+02 1.6873E-05 1.1706E-05 1.1210E-06 9.1461E-07 - 3.1623E+02 1.1792E-05 8.1309E-06 7.6233E-07 6.1650E-07 - 3.5481E+02 8.2512E-06 5.6432E-06 5.1612E-07 4.1069E-07 - 3.9811E+02 5.7531E-06 3.9176E-06 3.4683E-07 2.7793E-07 - 4.4668E+02 4.0169E-06 2.7038E-06 2.3104E-07 1.8684E-07 - 5.0119E+02 2.8048E-06 1.8797E-06 1.5544E-07 1.2723E-07 - 5.6234E+02 1.9688E-06 1.3094E-06 1.0665E-07 8.7268E-08 - 6.3096E+02 1.3701E-06 9.0615E-07 7.1248E-08 5.7967E-08 - 7.0795E+02 9.5463E-07 6.2612E-07 4.7868E-08 3.8542E-08 - 7.9433E+02 6.6413E-07 4.3134E-07 3.2700E-08 2.5983E-08 - 8.9125E+02 4.6185E-07 2.9705E-07 2.1763E-08 1.7012E-08 - 1.0000E+03 3.2160E-07 2.0456E-07 1.4647E-08 1.1522E-08 - 1.1220E+03 2.2286E-07 1.4089E-07 9.8145E-09 7.7658E-09 - 1.2589E+03 1.5432E-07 9.7221E-08 6.5747E-09 5.1797E-09 - 1.4125E+03 1.0655E-07 6.6502E-08 4.4227E-09 3.4768E-09 - 1.5849E+03 7.2849E-08 4.5585E-08 2.9269E-09 2.3452E-09 - 1.7783E+03 4.9734E-08 3.1192E-08 1.9599E-09 1.6129E-09 - 1.9953E+03 3.4507E-08 2.1266E-08 1.3597E-09 1.0495E-09 - 2.2387E+03 2.3680E-08 1.4442E-08 9.2590E-10 7.0502E-10 - 2.5119E+03 1.6267E-08 9.7740E-09 6.2342E-10 4.6718E-10 - 2.8184E+03 1.1052E-08 6.6702E-09 4.0631E-10 3.0582E-10 - 3.1623E+03 7.7108E-09 4.5607E-09 2.5712E-10 2.0179E-10 - 3.5481E+03 5.1509E-09 3.0210E-09 1.7232E-10 1.3712E-10 - 3.9811E+03 3.5002E-09 2.0212E-09 1.1897E-10 8.7456E-11 - 4.4668E+03 2.3680E-09 1.3586E-09 7.9165E-11 5.6621E-11 - 5.0119E+03 1.5910E-09 9.0923E-10 5.1262E-11 3.7353E-11 - 5.6234E+03 1.0630E-09 6.0645E-10 3.3662E-11 2.5014E-11 - 6.3096E+03 7.1919E-10 4.0536E-10 2.3205E-11 1.7073E-11 - 7.0795E+03 4.8485E-10 2.7296E-10 1.5259E-11 1.0671E-11 - 7.9433E+03 3.2168E-10 1.8041E-10 9.5992E-12 6.9468E-12 - 8.9125E+03 2.1583E-10 1.1974E-10 6.0430E-12 4.5939E-12 - 1.0000E+04 1.4410E-10 7.8681E-11 4.3589E-12 3.1350E-12 -average flux in [cosZ = 0.20 -- 0.30, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2374E+04 2.3191E+04 1.1609E+04 9.8283E+03 - 1.1220E-01 1.8935E+04 1.9647E+04 9.9611E+03 8.3935E+03 - 1.2589E-01 1.5954E+04 1.6560E+04 8.4749E+03 7.0466E+03 - 1.4125E-01 1.3405E+04 1.3829E+04 7.1396E+03 5.8812E+03 - 1.5849E-01 1.1127E+04 1.1412E+04 5.9332E+03 4.8345E+03 - 1.7783E-01 9.1185E+03 9.3104E+03 4.9220E+03 3.9338E+03 - 1.9953E-01 7.3808E+03 7.5365E+03 4.0407E+03 3.1907E+03 - 2.2387E-01 5.8956E+03 6.0521E+03 3.2778E+03 2.5891E+03 - 2.5119E-01 4.6571E+03 4.8021E+03 2.6329E+03 2.0731E+03 - 2.8184E-01 3.6514E+03 3.7783E+03 2.1057E+03 1.6277E+03 - 3.1623E-01 2.8373E+03 2.9537E+03 1.6770E+03 1.2750E+03 - 3.5481E-01 2.1987E+03 2.2866E+03 1.3095E+03 9.9536E+02 - 3.9811E-01 1.6959E+03 1.7735E+03 1.0199E+03 7.6525E+02 - 4.4668E-01 1.3011E+03 1.3550E+03 7.9368E+02 5.8487E+02 - 5.0119E-01 9.9159E+02 1.0187E+03 6.0687E+02 4.4767E+02 - 5.6234E-01 7.5200E+02 7.7599E+02 4.6454E+02 3.4182E+02 - 6.3096E-01 5.6903E+02 5.8880E+02 3.5383E+02 2.5979E+02 - 7.0795E-01 4.2583E+02 4.4299E+02 2.6523E+02 1.9457E+02 - 7.9433E-01 3.2381E+02 3.3164E+02 1.9889E+02 1.4507E+02 - 8.9125E-01 2.4509E+02 2.4627E+02 1.4938E+02 1.1021E+02 - 1.0000E+00 1.8177E+02 1.8513E+02 1.1324E+02 8.2011E+01 - 1.1220E+00 1.3705E+02 1.3929E+02 8.3679E+01 6.0345E+01 - 1.2589E+00 1.0284E+02 1.0428E+02 6.1689E+01 4.4761E+01 - 1.4125E+00 7.6907E+01 7.6745E+01 4.5958E+01 3.3863E+01 - 1.5849E+00 5.7032E+01 5.6654E+01 3.3816E+01 2.5042E+01 - 1.7783E+00 4.2303E+01 4.1947E+01 2.4378E+01 1.8371E+01 - 1.9953E+00 3.1284E+01 3.0764E+01 1.7787E+01 1.3470E+01 - 2.2387E+00 2.3100E+01 2.2401E+01 1.3026E+01 9.7590E+00 - 2.5119E+00 1.7153E+01 1.6409E+01 9.5714E+00 7.0288E+00 - 2.8184E+00 1.2544E+01 1.1706E+01 6.8330E+00 5.0197E+00 - 3.1623E+00 9.1536E+00 8.5639E+00 4.9042E+00 3.6313E+00 - 3.5481E+00 6.6505E+00 6.2182E+00 3.4419E+00 2.5815E+00 - 3.9811E+00 4.8098E+00 4.4382E+00 2.4519E+00 1.8484E+00 - 4.4668E+00 3.5183E+00 3.2018E+00 1.7338E+00 1.2955E+00 - 5.0119E+00 2.5765E+00 2.3123E+00 1.2155E+00 8.8875E-01 - 5.6234E+00 1.8321E+00 1.6559E+00 8.3834E-01 6.4248E-01 - 6.3096E+00 1.3057E+00 1.1872E+00 5.9181E-01 4.5729E-01 - 7.0795E+00 9.4980E-01 8.4848E-01 4.2174E-01 3.0965E-01 - 7.9433E+00 6.8492E-01 6.0935E-01 2.8563E-01 2.1419E-01 - 8.9125E+00 4.8454E-01 4.2982E-01 1.9924E-01 1.4793E-01 - 1.0000E+01 3.4696E-01 3.0134E-01 1.3476E-01 9.9878E-02 - 1.1220E+01 2.4791E-01 2.1280E-01 9.1074E-02 6.7993E-02 - 1.2589E+01 1.7619E-01 1.5147E-01 6.1975E-02 4.7064E-02 - 1.4125E+01 1.2488E-01 1.0882E-01 4.1731E-02 3.1666E-02 - 1.5849E+01 8.9352E-02 7.6600E-02 2.8683E-02 2.1708E-02 - 1.7783E+01 6.4023E-02 5.3529E-02 1.9471E-02 1.4812E-02 - 1.9953E+01 4.6074E-02 3.7716E-02 1.3046E-02 9.6407E-03 - 2.2387E+01 3.2654E-02 2.6701E-02 8.8587E-03 6.3721E-03 - 2.5119E+01 2.2953E-02 1.8926E-02 5.7275E-03 4.4372E-03 - 2.8184E+01 1.6634E-02 1.3416E-02 3.8667E-03 2.9264E-03 - 3.1623E+01 1.1875E-02 9.5229E-03 2.6477E-03 2.0102E-03 - 3.5481E+01 8.4796E-03 6.7485E-03 1.7604E-03 1.3515E-03 - 3.9811E+01 6.0168E-03 4.7842E-03 1.1796E-03 9.0770E-04 - 4.4668E+01 4.2894E-03 3.3871E-03 7.8866E-04 6.0455E-04 - 5.0119E+01 3.0581E-03 2.3930E-03 5.2609E-04 4.0369E-04 - 5.6234E+01 2.1708E-03 1.6863E-03 3.4697E-04 2.6964E-04 - 6.3096E+01 1.5500E-03 1.1847E-03 2.3009E-04 1.7956E-04 - 7.0795E+01 1.1020E-03 8.3136E-04 1.5339E-04 1.1946E-04 - 7.9433E+01 7.7995E-04 5.8867E-04 1.0185E-04 8.0258E-05 - 8.9125E+01 5.5120E-04 4.1425E-04 6.7032E-05 5.3469E-05 - 1.0000E+02 3.9237E-04 2.9308E-04 4.4647E-05 3.5701E-05 - 1.1220E+02 2.7826E-04 2.0565E-04 2.9943E-05 2.3902E-05 - 1.2589E+02 1.9661E-04 1.4417E-04 1.9810E-05 1.5775E-05 - 1.4125E+02 1.3842E-04 1.0100E-04 1.2943E-05 1.0377E-05 - 1.5849E+02 9.7682E-05 7.0537E-05 8.5842E-06 6.9518E-06 - 1.7783E+02 6.8958E-05 4.9362E-05 5.7641E-06 4.6472E-06 - 1.9953E+02 4.8462E-05 3.4364E-05 3.8852E-06 3.0904E-06 - 2.2387E+02 3.3974E-05 2.3903E-05 2.6089E-06 2.0711E-06 - 2.5119E+02 2.3917E-05 1.6626E-05 1.7523E-06 1.4302E-06 - 2.8184E+02 1.6748E-05 1.1638E-05 1.1331E-06 9.4485E-07 - 3.1623E+02 1.1766E-05 8.1388E-06 7.7311E-07 6.1842E-07 - 3.5481E+02 8.2092E-06 5.6597E-06 5.1627E-07 4.0860E-07 - 3.9811E+02 5.7588E-06 3.9276E-06 3.4088E-07 2.7363E-07 - 4.4668E+02 4.0354E-06 2.7118E-06 2.2580E-07 1.8815E-07 - 5.0119E+02 2.8121E-06 1.8802E-06 1.5395E-07 1.2718E-07 - 5.6234E+02 1.9742E-06 1.3054E-06 1.0418E-07 8.4768E-08 - 6.3096E+02 1.3657E-06 9.0016E-07 7.0686E-08 5.6825E-08 - 7.0795E+02 9.4978E-07 6.2533E-07 4.7888E-08 3.8007E-08 - 7.9433E+02 6.6635E-07 4.3375E-07 3.1986E-08 2.5848E-08 - 8.9125E+02 4.6319E-07 2.9852E-07 2.1214E-08 1.7274E-08 - 1.0000E+03 3.2263E-07 2.0603E-07 1.4429E-08 1.1506E-08 - 1.1220E+03 2.2273E-07 1.4083E-07 9.7280E-09 7.7020E-09 - 1.2589E+03 1.5334E-07 9.6376E-08 6.6456E-09 5.2120E-09 - 1.4125E+03 1.0622E-07 6.6316E-08 4.5331E-09 3.5319E-09 - 1.5849E+03 7.3488E-08 4.5415E-08 3.0062E-09 2.3407E-09 - 1.7783E+03 5.0812E-08 3.1035E-08 1.9905E-09 1.5483E-09 - 1.9953E+03 3.4748E-08 2.1243E-08 1.3108E-09 1.0434E-09 - 2.2387E+03 2.3684E-08 1.4499E-08 8.9123E-10 6.7758E-10 - 2.5119E+03 1.6213E-08 9.8524E-09 5.9951E-10 4.4261E-10 - 2.8184E+03 1.1133E-08 6.6594E-09 4.2176E-10 3.0032E-10 - 3.1623E+03 7.6729E-09 4.5890E-09 2.6839E-10 1.9515E-10 - 3.5481E+03 5.1377E-09 3.0744E-09 1.7994E-10 1.3067E-10 - 3.9811E+03 3.4628E-09 2.0456E-09 1.2117E-10 8.8487E-11 - 4.4668E+03 2.3357E-09 1.3763E-09 8.4114E-11 5.9871E-11 - 5.0119E+03 1.5858E-09 9.2693E-10 5.5806E-11 3.8368E-11 - 5.6234E+03 1.0767E-09 6.1982E-10 3.6750E-11 2.3869E-11 - 6.3096E+03 7.1490E-10 4.1096E-10 2.3335E-11 1.6627E-11 - 7.0795E+03 4.7873E-10 2.7745E-10 1.5146E-11 1.0865E-11 - 7.9433E+03 3.2284E-10 1.8188E-10 1.0271E-11 7.1495E-12 - 8.9125E+03 2.1573E-10 1.1917E-10 6.4240E-12 4.9084E-12 - 1.0000E+04 1.4277E-10 8.0412E-11 4.2479E-12 3.0893E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1201E+04 3.1640E+04 1.5570E+04 1.3761E+04 - 1.1220E-01 2.5870E+04 2.6304E+04 1.3148E+04 1.1621E+04 - 1.2589E-01 2.1383E+04 2.1734E+04 1.1033E+04 9.6403E+03 - 1.4125E-01 1.7594E+04 1.7800E+04 9.0867E+03 7.8813E+03 - 1.5849E-01 1.4358E+04 1.4456E+04 7.3824E+03 6.3758E+03 - 1.7783E-01 1.1598E+04 1.1597E+04 6.0172E+03 5.1306E+03 - 1.9953E-01 9.2259E+03 9.2233E+03 4.8969E+03 4.1151E+03 - 2.2387E-01 7.2301E+03 7.2762E+03 3.9295E+03 3.2590E+03 - 2.5119E-01 5.6099E+03 5.6382E+03 3.1228E+03 2.5741E+03 - 2.8184E-01 4.3256E+03 4.3487E+03 2.4588E+03 2.0073E+03 - 3.1623E-01 3.3143E+03 3.3477E+03 1.8921E+03 1.5303E+03 - 3.5481E-01 2.5394E+03 2.5384E+03 1.4467E+03 1.1631E+03 - 3.9811E-01 1.9176E+03 1.9197E+03 1.1168E+03 8.9239E+02 - 4.4668E-01 1.4393E+03 1.4531E+03 8.5396E+02 6.8204E+02 - 5.0119E-01 1.0955E+03 1.0915E+03 6.4382E+02 5.1068E+02 - 5.6234E-01 8.1531E+02 8.1667E+02 4.8953E+02 3.7913E+02 - 6.3096E-01 6.0604E+02 6.1546E+02 3.6856E+02 2.7840E+02 - 7.0795E-01 4.5871E+02 4.5944E+02 2.7313E+02 2.0731E+02 - 7.9433E-01 3.4350E+02 3.4309E+02 2.0504E+02 1.5896E+02 - 8.9125E-01 2.5384E+02 2.5920E+02 1.5483E+02 1.1985E+02 - 1.0000E+00 1.9163E+02 1.9288E+02 1.1733E+02 9.0370E+01 - 1.1220E+00 1.4465E+02 1.4234E+02 8.6523E+01 6.6653E+01 - 1.2589E+00 1.0889E+02 1.0651E+02 6.4457E+01 4.9523E+01 - 1.4125E+00 8.1103E+01 7.9130E+01 4.8912E+01 3.6940E+01 - 1.5849E+00 5.9527E+01 5.9513E+01 3.6648E+01 2.7434E+01 - 1.7783E+00 4.4456E+01 4.4440E+01 2.7064E+01 2.0305E+01 - 1.9953E+00 3.3257E+01 3.2544E+01 1.9538E+01 1.4889E+01 - 2.2387E+00 2.4696E+01 2.4277E+01 1.4374E+01 1.1040E+01 - 2.5119E+00 1.8372E+01 1.7897E+01 1.0671E+01 8.1666E+00 - 2.8184E+00 1.3496E+01 1.3007E+01 7.8196E+00 6.0211E+00 - 3.1623E+00 9.7415E+00 9.4385E+00 5.5927E+00 4.2652E+00 - 3.5481E+00 7.1442E+00 6.8558E+00 4.0193E+00 3.0419E+00 - 3.9811E+00 5.1791E+00 4.9968E+00 2.9160E+00 2.1768E+00 - 4.4668E+00 3.7367E+00 3.6094E+00 2.0930E+00 1.5404E+00 - 5.0119E+00 2.7235E+00 2.5976E+00 1.5021E+00 1.1066E+00 - 5.6234E+00 1.9905E+00 1.8874E+00 1.0683E+00 7.8897E-01 - 6.3096E+00 1.4281E+00 1.3510E+00 7.4562E-01 5.4126E-01 - 7.0795E+00 1.0249E+00 9.6047E-01 5.2188E-01 3.8535E-01 - 7.9433E+00 7.3464E-01 6.9286E-01 3.7357E-01 2.7029E-01 - 8.9125E+00 5.4109E-01 4.9389E-01 2.6538E-01 1.9499E-01 - 1.0000E+01 3.8400E-01 3.4668E-01 1.7866E-01 1.3480E-01 - 1.1220E+01 2.7454E-01 2.4599E-01 1.2338E-01 9.1230E-02 - 1.2589E+01 1.9445E-01 1.7457E-01 8.5945E-02 6.2720E-02 - 1.4125E+01 1.4038E-01 1.2401E-01 5.9654E-02 4.5286E-02 - 1.5849E+01 1.0144E-01 8.7623E-02 4.0139E-02 3.1494E-02 - 1.7783E+01 7.1466E-02 6.1717E-02 2.7023E-02 2.0539E-02 - 1.9953E+01 5.0877E-02 4.4208E-02 1.8596E-02 1.3664E-02 - 2.2387E+01 3.6922E-02 3.1204E-02 1.2900E-02 9.5028E-03 - 2.5119E+01 2.6301E-02 2.2284E-02 8.9534E-03 6.6606E-03 - 2.8184E+01 1.8666E-02 1.6092E-02 6.1296E-03 4.4411E-03 - 3.1623E+01 1.3374E-02 1.1266E-02 4.0705E-03 3.1142E-03 - 3.5481E+01 9.5534E-03 8.0049E-03 2.7515E-03 2.1028E-03 - 3.9811E+01 6.8046E-03 5.6691E-03 1.8438E-03 1.4100E-03 - 4.4668E+01 4.8570E-03 4.0064E-03 1.2371E-03 9.4730E-04 - 5.0119E+01 3.4674E-03 2.8337E-03 8.3288E-04 6.4099E-04 - 5.6234E+01 2.4684E-03 1.9977E-03 5.5699E-04 4.3304E-04 - 6.3096E+01 1.7561E-03 1.4116E-03 3.6984E-04 2.9108E-04 - 7.0795E+01 1.2565E-03 1.0020E-03 2.4539E-04 1.9358E-04 - 7.9433E+01 9.0156E-04 7.0783E-04 1.6422E-04 1.2775E-04 - 8.9125E+01 6.4074E-04 4.9680E-04 1.0821E-04 8.5468E-05 - 1.0000E+02 4.5265E-04 3.4977E-04 7.2322E-05 5.6722E-05 - 1.1220E+02 3.2072E-04 2.4655E-04 4.7895E-05 3.7759E-05 - 1.2589E+02 2.2738E-04 1.7305E-04 3.1749E-05 2.4958E-05 - 1.4125E+02 1.6115E-04 1.2137E-04 2.1082E-05 1.6525E-05 - 1.5849E+02 1.1406E-04 8.5362E-05 1.4037E-05 1.1073E-05 - 1.7783E+02 8.0337E-05 5.9907E-05 9.3392E-06 7.3806E-06 - 1.9953E+02 5.6508E-05 4.1763E-05 6.1003E-06 4.8700E-06 - 2.2387E+02 3.9948E-05 2.9129E-05 3.9815E-06 3.2386E-06 - 2.5119E+02 2.8199E-05 2.0575E-05 2.6390E-06 2.1551E-06 - 2.8184E+02 1.9824E-05 1.4405E-05 1.7842E-06 1.4092E-06 - 3.1623E+02 1.3977E-05 9.9488E-06 1.1771E-06 9.4304E-07 - 3.5481E+02 9.7942E-06 6.9166E-06 7.8108E-07 6.2424E-07 - 3.9811E+02 6.8795E-06 4.8233E-06 5.2149E-07 4.1935E-07 - 4.4668E+02 4.8263E-06 3.3617E-06 3.4430E-07 2.8179E-07 - 5.0119E+02 3.3779E-06 2.3385E-06 2.3041E-07 1.8634E-07 - 5.6234E+02 2.3617E-06 1.6153E-06 1.5560E-07 1.2274E-07 - 6.3096E+02 1.6507E-06 1.1182E-06 1.0223E-07 8.1655E-08 - 7.0795E+02 1.1532E-06 7.7610E-07 6.7269E-08 5.4107E-08 - 7.9433E+02 8.0533E-07 5.3787E-07 4.4804E-08 3.6518E-08 - 8.9125E+02 5.6085E-07 3.7153E-07 2.9665E-08 2.4310E-08 - 1.0000E+03 3.9111E-07 2.5526E-07 2.0356E-08 1.6197E-08 - 1.1220E+03 2.7289E-07 1.7575E-07 1.3816E-08 1.1075E-08 - 1.2589E+03 1.8905E-07 1.2159E-07 9.3277E-09 7.4445E-09 - 1.4125E+03 1.3143E-07 8.3791E-08 6.3136E-09 4.9218E-09 - 1.5849E+03 9.1642E-08 5.7981E-08 4.1736E-09 3.2842E-09 - 1.7783E+03 6.2851E-08 3.9985E-08 2.7161E-09 2.2623E-09 - 1.9953E+03 4.3635E-08 2.7235E-08 1.8561E-09 1.4565E-09 - 2.2387E+03 2.9989E-08 1.8645E-08 1.2430E-09 9.6430E-10 - 2.5119E+03 2.0825E-08 1.2715E-08 8.4627E-10 6.5336E-10 - 2.8184E+03 1.4334E-08 8.6196E-09 5.7192E-10 4.2426E-10 - 3.1623E+03 9.8946E-09 5.9180E-09 3.9575E-10 2.7604E-10 - 3.5481E+03 6.6709E-09 3.9798E-09 2.6278E-10 1.8474E-10 - 3.9811E+03 4.5464E-09 2.6878E-09 1.6630E-10 1.2313E-10 - 4.4668E+03 3.1130E-09 1.8300E-09 1.0553E-10 8.2795E-11 - 5.0119E+03 2.1224E-09 1.2373E-09 6.9372E-11 5.3157E-11 - 5.6234E+03 1.4377E-09 8.3327E-10 4.7076E-11 3.5642E-11 - 6.3096E+03 9.6988E-10 5.6026E-10 3.3487E-11 2.4138E-11 - 7.0795E+03 6.5851E-10 3.7396E-10 2.2640E-11 1.6323E-11 - 7.9433E+03 4.4306E-10 2.5057E-10 1.4196E-11 1.0129E-11 - 8.9125E+03 2.9612E-10 1.7012E-10 8.9369E-12 6.8181E-12 - 1.0000E+04 1.9927E-10 1.1350E-10 5.8433E-12 4.4961E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0636E+04 3.0661E+04 1.4967E+04 1.3749E+04 - 1.1220E-01 2.5426E+04 2.5435E+04 1.2569E+04 1.1590E+04 - 1.2589E-01 2.1024E+04 2.1011E+04 1.0502E+04 9.6159E+03 - 1.4125E-01 1.7293E+04 1.7087E+04 8.6560E+03 7.8437E+03 - 1.5849E-01 1.4063E+04 1.3775E+04 7.0119E+03 6.2947E+03 - 1.7783E-01 1.1251E+04 1.1004E+04 5.6428E+03 5.0502E+03 - 1.9953E-01 8.9065E+03 8.7019E+03 4.5091E+03 4.0768E+03 - 2.2387E-01 6.9545E+03 6.8317E+03 3.5998E+03 3.2262E+03 - 2.5119E-01 5.4087E+03 5.2574E+03 2.8426E+03 2.5206E+03 - 2.8184E-01 4.1714E+03 4.0409E+03 2.1978E+03 1.9596E+03 - 3.1623E-01 3.1768E+03 3.0849E+03 1.7077E+03 1.5083E+03 - 3.5481E-01 2.4156E+03 2.3261E+03 1.3157E+03 1.1605E+03 - 3.9811E-01 1.8238E+03 1.7567E+03 1.0032E+03 8.8228E+02 - 4.4668E-01 1.3667E+03 1.3214E+03 7.6456E+02 6.6876E+02 - 5.0119E-01 1.0297E+03 1.0025E+03 5.6683E+02 5.0672E+02 - 5.6234E-01 7.7571E+02 7.4885E+02 4.2643E+02 3.7852E+02 - 6.3096E-01 5.8857E+02 5.5626E+02 3.2125E+02 2.8537E+02 - 7.0795E-01 4.3763E+02 4.1138E+02 2.3782E+02 2.1464E+02 - 7.9433E-01 3.2653E+02 3.0481E+02 1.8116E+02 1.5928E+02 - 8.9125E-01 2.4598E+02 2.3355E+02 1.3852E+02 1.1897E+02 - 1.0000E+00 1.8644E+02 1.7385E+02 1.0161E+02 8.8578E+01 - 1.1220E+00 1.4076E+02 1.2885E+02 7.6856E+01 6.7128E+01 - 1.2589E+00 1.0520E+02 9.6718E+01 5.7773E+01 5.0498E+01 - 1.4125E+00 7.9094E+01 7.2701E+01 4.3289E+01 3.7154E+01 - 1.5849E+00 5.9321E+01 5.3524E+01 3.2179E+01 2.7340E+01 - 1.7783E+00 4.4281E+01 3.9959E+01 2.4046E+01 2.0554E+01 - 1.9953E+00 3.2659E+01 2.9866E+01 1.8122E+01 1.5312E+01 - 2.2387E+00 2.3959E+01 2.1899E+01 1.3347E+01 1.1160E+01 - 2.5119E+00 1.8047E+01 1.6394E+01 9.9362E+00 8.1034E+00 - 2.8184E+00 1.3204E+01 1.2107E+01 7.3737E+00 5.8956E+00 - 3.1623E+00 9.8171E+00 9.0332E+00 5.3752E+00 4.2482E+00 - 3.5481E+00 7.1155E+00 6.6048E+00 3.9185E+00 3.0626E+00 - 3.9811E+00 5.1715E+00 4.8212E+00 2.8485E+00 2.2003E+00 - 4.4668E+00 3.8172E+00 3.4914E+00 2.0477E+00 1.5875E+00 - 5.0119E+00 2.7817E+00 2.5339E+00 1.4505E+00 1.1289E+00 - 5.6234E+00 1.9939E+00 1.8700E+00 1.0258E+00 7.9221E-01 - 6.3096E+00 1.4500E+00 1.3590E+00 7.3263E-01 5.6347E-01 - 7.0795E+00 1.0492E+00 9.5223E-01 5.2788E-01 3.8783E-01 - 7.9433E+00 7.4080E-01 6.6962E-01 3.6321E-01 2.7270E-01 - 8.9125E+00 5.2836E-01 4.8759E-01 2.5189E-01 1.9515E-01 - 1.0000E+01 3.8155E-01 3.4962E-01 1.8049E-01 1.3481E-01 - 1.1220E+01 2.7233E-01 2.4872E-01 1.2559E-01 9.2237E-02 - 1.2589E+01 1.9432E-01 1.7581E-01 8.5564E-02 6.4183E-02 - 1.4125E+01 1.3970E-01 1.2486E-01 5.9324E-02 4.4944E-02 - 1.5849E+01 1.0098E-01 8.9523E-02 4.0263E-02 3.0624E-02 - 1.7783E+01 7.3085E-02 6.3816E-02 2.7139E-02 2.1387E-02 - 1.9953E+01 5.1315E-02 4.6058E-02 1.9295E-02 1.4367E-02 - 2.2387E+01 3.6598E-02 3.2618E-02 1.3430E-02 9.6473E-03 - 2.5119E+01 2.6544E-02 2.2631E-02 9.1151E-03 6.5121E-03 - 2.8184E+01 1.8846E-02 1.5522E-02 5.8803E-03 4.5163E-03 - 3.1623E+01 1.3342E-02 1.1288E-02 4.0714E-03 3.0981E-03 - 3.5481E+01 9.5369E-03 8.0103E-03 2.7449E-03 2.0960E-03 - 3.9811E+01 6.8041E-03 5.6632E-03 1.8451E-03 1.4105E-03 - 4.4668E+01 4.8505E-03 3.9962E-03 1.2332E-03 9.5610E-04 - 5.0119E+01 3.4569E-03 2.8217E-03 8.2457E-04 6.4009E-04 - 5.6234E+01 2.4644E-03 1.9990E-03 5.5089E-04 4.3012E-04 - 6.3096E+01 1.7636E-03 1.4160E-03 3.6752E-04 2.8620E-04 - 7.0795E+01 1.2573E-03 1.0003E-03 2.4396E-04 1.9032E-04 - 7.9433E+01 8.9639E-04 7.0524E-04 1.6279E-04 1.2758E-04 - 8.9125E+01 6.3767E-04 4.9214E-04 1.0918E-04 8.5614E-05 - 1.0000E+02 4.5271E-04 3.4991E-04 7.2588E-05 5.6850E-05 - 1.1220E+02 3.2088E-04 2.4599E-04 4.8154E-05 3.7815E-05 - 1.2589E+02 2.2778E-04 1.7276E-04 3.1905E-05 2.4912E-05 - 1.4125E+02 1.6104E-04 1.2144E-04 2.1026E-05 1.6634E-05 - 1.5849E+02 1.1370E-04 8.5114E-05 1.3990E-05 1.1116E-05 - 1.7783E+02 8.0440E-05 5.9908E-05 9.2139E-06 7.3584E-06 - 1.9953E+02 5.6763E-05 4.1960E-05 6.0297E-06 4.8218E-06 - 2.2387E+02 4.0064E-05 2.9301E-05 4.0381E-06 3.1904E-06 - 2.5119E+02 2.8221E-05 2.0630E-05 2.6620E-06 2.1705E-06 - 2.8184E+02 1.9711E-05 1.4403E-05 1.7960E-06 1.4685E-06 - 3.1623E+02 1.3918E-05 9.9722E-06 1.1842E-06 9.4284E-07 - 3.5481E+02 9.7695E-06 6.9328E-06 7.8593E-07 6.2288E-07 - 3.9811E+02 6.8574E-06 4.8146E-06 5.1666E-07 4.1877E-07 - 4.4668E+02 4.8027E-06 3.3525E-06 3.4622E-07 2.8211E-07 - 5.0119E+02 3.3593E-06 2.3261E-06 2.3177E-07 1.8829E-07 - 5.6234E+02 2.3664E-06 1.6147E-06 1.5309E-07 1.2593E-07 - 6.3096E+02 1.6515E-06 1.1225E-06 1.0227E-07 8.4419E-08 - 7.0795E+02 1.1548E-06 7.7886E-07 6.8961E-08 5.5548E-08 - 7.9433E+02 8.0929E-07 5.3549E-07 4.6541E-08 3.7287E-08 - 8.9125E+02 5.6621E-07 3.7167E-07 3.1569E-08 2.4295E-08 - 1.0000E+03 3.9355E-07 2.5612E-07 2.0354E-08 1.6135E-08 - 1.1220E+03 2.7329E-07 1.7685E-07 1.3390E-08 1.0982E-08 - 1.2589E+03 1.8955E-07 1.2185E-07 9.0355E-09 7.2761E-09 - 1.4125E+03 1.3174E-07 8.3697E-08 6.1933E-09 4.8622E-09 - 1.5849E+03 9.1440E-08 5.7566E-08 4.1326E-09 3.3655E-09 - 1.7783E+03 6.3467E-08 3.9740E-08 2.8432E-09 2.2944E-09 - 1.9953E+03 4.3463E-08 2.7236E-08 1.8778E-09 1.4825E-09 - 2.2387E+03 2.9927E-08 1.8462E-08 1.2322E-09 9.9665E-10 - 2.5119E+03 2.0649E-08 1.2629E-08 7.9873E-10 6.4946E-10 - 2.8184E+03 1.4076E-08 8.6225E-09 5.6588E-10 4.4356E-10 - 3.1623E+03 9.8578E-09 5.9714E-09 3.8160E-10 2.8646E-10 - 3.5481E+03 6.6774E-09 3.9854E-09 2.5812E-10 1.9178E-10 - 3.9811E+03 4.5649E-09 2.7126E-09 1.7159E-10 1.2958E-10 - 4.4668E+03 3.1086E-09 1.8408E-09 1.1177E-10 8.3552E-11 - 5.0119E+03 2.1124E-09 1.2350E-09 7.5161E-11 5.4399E-11 - 5.6234E+03 1.4430E-09 8.2656E-10 4.8754E-11 3.6206E-11 - 6.3096E+03 9.7407E-10 5.5837E-10 3.2480E-11 2.4493E-11 - 7.0795E+03 6.5848E-10 3.7292E-10 2.1326E-11 1.6404E-11 - 7.9433E+03 4.4007E-10 2.4920E-10 1.4158E-11 1.0648E-11 - 8.9125E+03 2.9582E-10 1.6712E-10 9.0790E-12 6.7738E-12 - 1.0000E+04 1.9832E-10 1.1105E-10 6.1446E-12 4.5135E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0513E+04 3.0169E+04 1.4604E+04 1.3861E+04 - 1.1220E-01 2.5293E+04 2.4976E+04 1.2298E+04 1.1630E+04 - 1.2589E-01 2.0934E+04 2.0545E+04 1.0132E+04 9.6253E+03 - 1.4125E-01 1.7158E+04 1.6704E+04 8.3272E+03 7.8358E+03 - 1.5849E-01 1.3933E+04 1.3482E+04 6.8133E+03 6.3410E+03 - 1.7783E-01 1.1163E+04 1.0739E+04 5.4814E+03 5.0934E+03 - 1.9953E-01 8.8517E+03 8.4402E+03 4.3718E+03 4.0727E+03 - 2.2387E-01 6.9026E+03 6.5929E+03 3.4634E+03 3.2154E+03 - 2.5119E-01 5.3039E+03 5.0970E+03 2.7159E+03 2.4892E+03 - 2.8184E-01 4.0738E+03 3.8652E+03 2.1044E+03 1.9528E+03 - 3.1623E-01 3.1139E+03 2.9275E+03 1.6125E+03 1.5159E+03 - 3.5481E-01 2.3800E+03 2.2174E+03 1.2322E+03 1.1595E+03 - 3.9811E-01 1.8000E+03 1.6566E+03 9.3186E+02 8.7846E+02 - 4.4668E-01 1.3459E+03 1.2420E+03 6.9874E+02 6.6024E+02 - 5.0119E-01 1.0161E+03 9.2700E+02 5.2237E+02 5.0208E+02 - 5.6234E-01 7.6476E+02 6.8580E+02 3.9378E+02 3.8061E+02 - 6.3096E-01 5.7054E+02 5.1180E+02 2.9662E+02 2.8523E+02 - 7.0795E-01 4.2225E+02 3.8358E+02 2.2359E+02 2.1175E+02 - 7.9433E-01 3.2092E+02 2.8315E+02 1.6735E+02 1.5767E+02 - 8.9125E-01 2.4493E+02 2.1309E+02 1.2201E+02 1.1863E+02 - 1.0000E+00 1.8391E+02 1.6113E+02 9.2845E+01 8.8917E+01 - 1.1220E+00 1.3943E+02 1.2239E+02 6.9604E+01 6.6621E+01 - 1.2589E+00 1.0491E+02 9.1904E+01 5.1855E+01 4.9887E+01 - 1.4125E+00 7.8840E+01 6.7826E+01 3.9338E+01 3.7249E+01 - 1.5849E+00 5.8724E+01 5.1151E+01 2.9351E+01 2.7624E+01 - 1.7783E+00 4.3583E+01 3.8359E+01 2.1945E+01 2.0606E+01 - 1.9953E+00 3.2984E+01 2.8892E+01 1.6605E+01 1.5255E+01 - 2.2387E+00 2.4765E+01 2.1712E+01 1.2166E+01 1.1014E+01 - 2.5119E+00 1.8092E+01 1.6142E+01 9.1728E+00 7.9540E+00 - 2.8184E+00 1.3337E+01 1.2146E+01 6.9854E+00 5.8320E+00 - 3.1623E+00 9.8477E+00 8.6934E+00 5.1315E+00 4.3600E+00 - 3.5481E+00 7.1248E+00 6.4054E+00 3.7598E+00 3.1319E+00 - 3.9811E+00 5.1454E+00 4.6867E+00 2.7137E+00 2.2443E+00 - 4.4668E+00 3.7233E+00 3.4669E+00 1.9612E+00 1.6044E+00 - 5.0119E+00 2.7178E+00 2.5281E+00 1.4661E+00 1.1294E+00 - 5.6234E+00 1.9794E+00 1.8096E+00 1.0475E+00 7.9905E-01 - 6.3096E+00 1.4148E+00 1.2969E+00 7.1848E-01 5.5985E-01 - 7.0795E+00 1.0301E+00 9.4496E-01 5.0792E-01 3.8721E-01 - 7.9433E+00 7.4586E-01 6.7691E-01 3.7019E-01 2.6362E-01 - 8.9125E+00 5.3300E-01 4.8043E-01 2.5682E-01 1.9006E-01 - 1.0000E+01 3.8464E-01 3.4469E-01 1.7725E-01 1.2986E-01 - 1.1220E+01 2.7446E-01 2.4498E-01 1.2303E-01 9.1248E-02 - 1.2589E+01 1.9555E-01 1.7339E-01 8.4624E-02 6.3192E-02 - 1.4125E+01 1.3846E-01 1.2369E-01 5.8508E-02 4.2803E-02 - 1.5849E+01 9.7961E-02 8.7709E-02 4.0655E-02 2.9814E-02 - 1.7783E+01 7.1034E-02 6.1928E-02 2.8044E-02 2.0493E-02 - 1.9953E+01 5.1143E-02 4.3722E-02 1.9044E-02 1.3865E-02 - 2.2387E+01 3.6648E-02 3.1330E-02 1.3150E-02 9.5081E-03 - 2.5119E+01 2.6294E-02 2.2308E-02 8.8487E-03 6.4318E-03 - 2.8184E+01 1.8514E-02 1.5537E-02 5.6588E-03 4.4997E-03 - 3.1623E+01 1.3377E-02 1.1282E-02 4.0500E-03 3.0898E-03 - 3.5481E+01 9.5389E-03 7.9895E-03 2.7252E-03 2.0872E-03 - 3.9811E+01 6.8171E-03 5.6472E-03 1.8487E-03 1.4102E-03 - 4.4668E+01 4.8508E-03 3.9994E-03 1.2466E-03 9.4443E-04 - 5.0119E+01 3.4576E-03 2.8292E-03 8.3463E-04 6.3750E-04 - 5.6234E+01 2.4681E-03 1.9972E-03 5.5583E-04 4.3209E-04 - 6.3096E+01 1.7558E-03 1.4130E-03 3.6885E-04 2.8827E-04 - 7.0795E+01 1.2535E-03 9.9996E-04 2.4553E-04 1.9128E-04 - 7.9433E+01 8.9257E-04 7.0368E-04 1.6303E-04 1.2724E-04 - 8.9125E+01 6.3296E-04 4.9489E-04 1.0704E-04 8.4250E-05 - 1.0000E+02 4.5049E-04 3.4934E-04 7.2376E-05 5.6494E-05 - 1.1220E+02 3.2013E-04 2.4538E-04 4.8238E-05 3.7626E-05 - 1.2589E+02 2.2744E-04 1.7204E-04 3.1637E-05 2.5163E-05 - 1.4125E+02 1.6091E-04 1.2095E-04 2.0811E-05 1.6683E-05 - 1.5849E+02 1.1334E-04 8.4911E-05 1.3987E-05 1.1081E-05 - 1.7783E+02 7.9957E-05 5.9635E-05 9.2577E-06 7.3802E-06 - 1.9953E+02 5.6595E-05 4.1518E-05 6.0408E-06 4.8727E-06 - 2.2387E+02 3.9809E-05 2.9104E-05 4.0062E-06 3.2211E-06 - 2.5119E+02 2.7915E-05 2.0397E-05 2.6770E-06 2.1230E-06 - 2.8184E+02 1.9723E-05 1.4217E-05 1.7601E-06 1.4119E-06 - 3.1623E+02 1.3943E-05 9.9669E-06 1.1819E-06 9.4309E-07 - 3.5481E+02 9.7769E-06 6.9498E-06 7.9335E-07 6.3200E-07 - 3.9811E+02 6.8516E-06 4.8169E-06 5.2587E-07 4.1916E-07 - 4.4668E+02 4.7935E-06 3.3461E-06 3.4936E-07 2.7814E-07 - 5.0119E+02 3.3532E-06 2.3321E-06 2.3019E-07 1.8308E-07 - 5.6234E+02 2.3581E-06 1.6173E-06 1.5193E-07 1.2370E-07 - 6.3096E+02 1.6435E-06 1.1153E-06 1.0225E-07 8.2614E-08 - 7.0795E+02 1.1465E-06 7.7353E-07 6.9259E-08 5.5235E-08 - 7.9433E+02 8.0291E-07 5.3695E-07 4.6433E-08 3.6873E-08 - 8.9125E+02 5.6088E-07 3.7035E-07 3.1255E-08 2.4482E-08 - 1.0000E+03 3.9062E-07 2.5641E-07 2.0574E-08 1.6327E-08 - 1.1220E+03 2.7139E-07 1.7645E-07 1.3979E-08 1.0962E-08 - 1.2589E+03 1.8927E-07 1.2159E-07 9.4711E-09 7.4171E-09 - 1.4125E+03 1.3194E-07 8.4010E-08 6.2303E-09 4.9048E-09 - 1.5849E+03 9.0913E-08 5.7772E-08 4.1427E-09 3.2487E-09 - 1.7783E+03 6.2963E-08 3.9491E-08 2.6877E-09 2.1746E-09 - 1.9953E+03 4.3574E-08 2.7025E-08 1.8709E-09 1.4699E-09 - 2.2387E+03 3.0069E-08 1.8523E-08 1.2717E-09 9.5752E-10 - 2.5119E+03 2.0780E-08 1.2764E-08 8.2336E-10 6.5398E-10 - 2.8184E+03 1.4310E-08 8.6760E-09 5.5331E-10 4.2184E-10 - 3.1623E+03 9.8740E-09 5.9451E-09 3.7592E-10 2.8805E-10 - 3.5481E+03 6.7154E-09 4.0155E-09 2.4820E-10 2.0023E-10 - 3.9811E+03 4.5698E-09 2.7296E-09 1.6336E-10 1.3146E-10 - 4.4668E+03 3.1204E-09 1.8411E-09 1.0984E-10 8.2959E-11 - 5.0119E+03 2.1365E-09 1.2421E-09 7.4571E-11 5.4836E-11 - 5.6234E+03 1.4359E-09 8.3123E-10 4.8807E-11 3.6580E-11 - 6.3096E+03 9.7215E-10 5.5929E-10 3.2734E-11 2.4404E-11 - 7.0795E+03 6.5577E-10 3.7527E-10 2.1733E-11 1.5906E-11 - 7.9433E+03 4.4166E-10 2.5238E-10 1.3759E-11 1.0240E-11 - 8.9125E+03 2.9635E-10 1.6786E-10 9.3217E-12 6.6169E-12 - 1.0000E+04 1.9787E-10 1.1075E-10 6.2363E-12 4.4152E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0632E+04 3.0174E+04 1.4573E+04 1.3914E+04 - 1.1220E-01 2.5567E+04 2.4905E+04 1.2380E+04 1.1759E+04 - 1.2589E-01 2.1122E+04 2.0421E+04 1.0218E+04 9.6835E+03 - 1.4125E-01 1.7251E+04 1.6665E+04 8.2913E+03 7.9561E+03 - 1.5849E-01 1.4044E+04 1.3519E+04 6.7369E+03 6.4701E+03 - 1.7783E-01 1.1303E+04 1.0796E+04 5.4851E+03 5.1796E+03 - 1.9953E-01 8.9706E+03 8.4794E+03 4.3756E+03 4.1298E+03 - 2.2387E-01 7.0186E+03 6.6147E+03 3.4555E+03 3.2717E+03 - 2.5119E-01 5.4059E+03 5.1332E+03 2.7108E+03 2.5902E+03 - 2.8184E-01 4.1629E+03 3.9326E+03 2.0989E+03 2.0137E+03 - 3.1623E-01 3.1884E+03 2.9517E+03 1.6212E+03 1.5537E+03 - 3.5481E-01 2.4166E+03 2.2206E+03 1.2402E+03 1.1992E+03 - 3.9811E-01 1.8201E+03 1.6775E+03 9.4054E+02 9.0910E+02 - 4.4668E-01 1.3768E+03 1.2531E+03 7.0661E+02 6.8629E+02 - 5.0119E-01 1.0457E+03 9.3219E+02 5.2997E+02 5.1775E+02 - 5.6234E-01 7.8571E+02 7.0263E+02 3.9593E+02 3.9069E+02 - 6.3096E-01 5.8303E+02 5.2340E+02 2.9369E+02 2.9629E+02 - 7.0795E-01 4.3769E+02 3.8582E+02 2.2190E+02 2.2328E+02 - 7.9433E-01 3.2634E+02 2.8747E+02 1.6460E+02 1.6572E+02 - 8.9125E-01 2.4457E+02 2.1863E+02 1.2364E+02 1.2213E+02 - 1.0000E+00 1.8561E+02 1.6145E+02 9.2206E+01 9.1428E+01 - 1.1220E+00 1.3834E+02 1.1995E+02 6.8993E+01 6.8199E+01 - 1.2589E+00 1.0412E+02 8.9602E+01 5.1539E+01 5.0985E+01 - 1.4125E+00 7.9299E+01 6.7659E+01 3.8054E+01 3.8007E+01 - 1.5849E+00 5.9185E+01 5.1154E+01 2.8821E+01 2.8223E+01 - 1.7783E+00 4.4532E+01 3.7954E+01 2.1755E+01 2.0738E+01 - 1.9953E+00 3.3502E+01 2.8131E+01 1.6156E+01 1.5547E+01 - 2.2387E+00 2.4383E+01 2.1030E+01 1.1967E+01 1.1639E+01 - 2.5119E+00 1.8064E+01 1.5806E+01 8.8158E+00 8.3385E+00 - 2.8184E+00 1.3364E+01 1.1656E+01 6.5332E+00 6.0498E+00 - 3.1623E+00 9.7737E+00 8.5465E+00 4.9007E+00 4.3977E+00 - 3.5481E+00 7.1286E+00 6.2711E+00 3.5995E+00 3.1376E+00 - 3.9811E+00 5.1843E+00 4.6051E+00 2.5933E+00 2.2223E+00 - 4.4668E+00 3.7608E+00 3.3826E+00 1.8814E+00 1.5905E+00 - 5.0119E+00 2.7023E+00 2.4726E+00 1.3820E+00 1.1229E+00 - 5.6234E+00 1.9684E+00 1.7739E+00 9.8045E-01 7.9151E-01 - 6.3096E+00 1.4215E+00 1.2745E+00 6.9656E-01 5.5122E-01 - 7.0795E+00 1.0297E+00 9.1594E-01 5.0058E-01 3.7737E-01 - 7.9433E+00 7.4811E-01 6.5875E-01 3.5410E-01 2.7028E-01 - 8.9125E+00 5.3000E-01 4.7259E-01 2.5881E-01 1.9330E-01 - 1.0000E+01 3.7900E-01 3.4329E-01 1.7625E-01 1.3345E-01 - 1.1220E+01 2.7367E-01 2.4443E-01 1.2326E-01 9.2044E-02 - 1.2589E+01 1.9407E-01 1.7511E-01 8.4262E-02 6.5482E-02 - 1.4125E+01 1.3714E-01 1.2420E-01 5.8129E-02 4.5088E-02 - 1.5849E+01 9.8522E-02 8.7879E-02 4.0549E-02 3.0734E-02 - 1.7783E+01 7.0470E-02 6.2938E-02 2.7243E-02 2.1375E-02 - 1.9953E+01 5.0744E-02 4.4014E-02 1.8753E-02 1.4576E-02 - 2.2387E+01 3.6781E-02 3.0703E-02 1.3372E-02 9.8662E-03 - 2.5119E+01 2.6216E-02 2.2093E-02 9.1386E-03 6.6035E-03 - 2.8184E+01 1.8604E-02 1.6420E-02 6.0869E-03 4.3451E-03 - 3.1623E+01 1.3331E-02 1.1286E-02 4.0442E-03 3.0758E-03 - 3.5481E+01 9.5206E-03 8.0000E-03 2.7385E-03 2.0822E-03 - 3.9811E+01 6.8229E-03 5.6503E-03 1.8483E-03 1.4079E-03 - 4.4668E+01 4.8630E-03 3.9927E-03 1.2359E-03 9.4516E-04 - 5.0119E+01 3.4670E-03 2.8203E-03 8.2687E-04 6.3338E-04 - 5.6234E+01 2.4656E-03 1.9876E-03 5.5143E-04 4.2240E-04 - 6.3096E+01 1.7582E-03 1.4076E-03 3.6992E-04 2.8333E-04 - 7.0795E+01 1.2619E-03 9.9754E-04 2.4798E-04 1.9322E-04 - 7.9433E+01 8.9514E-04 7.0297E-04 1.6356E-04 1.3092E-04 - 8.9125E+01 6.3164E-04 4.9672E-04 1.0895E-04 8.5608E-05 - 1.0000E+02 4.5034E-04 3.4852E-04 7.2565E-05 5.6575E-05 - 1.1220E+02 3.2036E-04 2.4508E-04 4.8436E-05 3.7647E-05 - 1.2589E+02 2.2735E-04 1.7264E-04 3.1981E-05 2.5194E-05 - 1.4125E+02 1.6107E-04 1.2101E-04 2.1047E-05 1.6695E-05 - 1.5849E+02 1.1355E-04 8.4943E-05 1.3864E-05 1.1113E-05 - 1.7783E+02 8.0368E-05 5.9845E-05 9.1305E-06 7.3988E-06 - 1.9953E+02 5.6817E-05 4.1798E-05 6.0761E-06 4.9380E-06 - 2.2387E+02 3.9804E-05 2.9242E-05 4.0047E-06 3.2483E-06 - 2.5119E+02 2.8018E-05 2.0431E-05 2.6741E-06 2.1500E-06 - 2.8184E+02 1.9796E-05 1.4213E-05 1.8011E-06 1.4282E-06 - 3.1623E+02 1.3898E-05 9.9519E-06 1.1840E-06 9.5415E-07 - 3.5481E+02 9.7866E-06 6.9459E-06 7.8270E-07 6.3509E-07 - 3.9811E+02 6.8668E-06 4.8414E-06 5.2272E-07 4.1706E-07 - 4.4668E+02 4.8021E-06 3.3582E-06 3.4383E-07 2.8044E-07 - 5.0119E+02 3.3621E-06 2.3267E-06 2.2859E-07 1.8925E-07 - 5.6234E+02 2.3638E-06 1.6153E-06 1.5370E-07 1.2443E-07 - 6.3096E+02 1.6568E-06 1.1208E-06 1.0324E-07 8.2776E-08 - 7.0795E+02 1.1533E-06 7.7740E-07 6.9380E-08 5.4903E-08 - 7.9433E+02 8.0267E-07 5.3685E-07 4.5991E-08 3.6783E-08 - 8.9125E+02 5.5987E-07 3.7095E-07 3.0712E-08 2.4269E-08 - 1.0000E+03 3.9176E-07 2.5823E-07 2.0330E-08 1.6553E-08 - 1.1220E+03 2.7306E-07 1.7762E-07 1.3693E-08 1.1115E-08 - 1.2589E+03 1.8978E-07 1.2190E-07 9.1972E-09 7.4804E-09 - 1.4125E+03 1.3104E-07 8.4292E-08 6.3198E-09 5.0473E-09 - 1.5849E+03 9.0537E-08 5.8007E-08 4.2707E-09 3.3840E-09 - 1.7783E+03 6.2942E-08 3.9556E-08 2.8607E-09 2.2358E-09 - 1.9953E+03 4.3633E-08 2.7076E-08 1.9276E-09 1.4830E-09 - 2.2387E+03 2.9966E-08 1.8512E-08 1.2372E-09 1.0039E-09 - 2.5119E+03 2.0508E-08 1.2540E-08 8.4304E-10 6.4283E-10 - 2.8184E+03 1.4206E-08 8.6142E-09 5.5725E-10 4.2416E-10 - 3.1623E+03 9.8097E-09 6.0126E-09 3.7891E-10 2.8711E-10 - 3.5481E+03 6.6668E-09 4.0282E-09 2.5424E-10 1.9556E-10 - 3.9811E+03 4.5722E-09 2.7266E-09 1.6415E-10 1.2808E-10 - 4.4668E+03 3.1163E-09 1.8419E-09 1.0839E-10 8.5918E-11 - 5.0119E+03 2.1107E-09 1.2329E-09 7.2745E-11 5.7520E-11 - 5.6234E+03 1.4110E-09 8.2934E-10 4.9122E-11 3.5582E-11 - 6.3096E+03 9.6831E-10 5.5917E-10 3.2769E-11 2.3526E-11 - 7.0795E+03 6.5201E-10 3.7519E-10 2.2183E-11 1.5906E-11 - 7.9433E+03 4.3947E-10 2.5092E-10 1.4421E-11 1.0549E-11 - 8.9125E+03 2.9853E-10 1.6715E-10 9.1002E-12 6.5748E-12 - 1.0000E+04 2.0044E-10 1.1263E-10 5.9161E-12 4.4259E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1017E+04 3.0530E+04 1.4811E+04 1.4074E+04 - 1.1220E-01 2.5744E+04 2.5320E+04 1.2614E+04 1.1860E+04 - 1.2589E-01 2.1386E+04 2.0946E+04 1.0467E+04 9.8541E+03 - 1.4125E-01 1.7594E+04 1.7033E+04 8.5632E+03 8.1071E+03 - 1.5849E-01 1.4322E+04 1.3778E+04 6.9355E+03 6.5649E+03 - 1.7783E-01 1.1533E+04 1.1115E+04 5.5929E+03 5.2906E+03 - 1.9953E-01 9.1431E+03 8.7771E+03 4.4965E+03 4.2464E+03 - 2.2387E-01 7.1736E+03 6.8470E+03 3.5702E+03 3.3633E+03 - 2.5119E-01 5.6178E+03 5.2750E+03 2.8148E+03 2.6322E+03 - 2.8184E-01 4.3288E+03 4.0467E+03 2.1978E+03 2.0651E+03 - 3.1623E-01 3.3033E+03 3.1052E+03 1.6996E+03 1.6062E+03 - 3.5481E-01 2.5273E+03 2.3391E+03 1.3029E+03 1.2187E+03 - 3.9811E-01 1.8998E+03 1.7532E+03 9.8651E+02 9.2797E+02 - 4.4668E-01 1.4342E+03 1.3136E+03 7.4792E+02 7.0425E+02 - 5.0119E-01 1.0834E+03 9.7064E+02 5.6255E+02 5.4014E+02 - 5.6234E-01 8.1091E+02 7.1641E+02 4.1513E+02 4.1275E+02 - 6.3096E-01 6.1031E+02 5.4158E+02 3.0939E+02 3.0207E+02 - 7.0795E-01 4.5924E+02 4.0670E+02 2.3345E+02 2.2242E+02 - 7.9433E-01 3.4486E+02 3.0302E+02 1.7312E+02 1.6936E+02 - 8.9125E-01 2.5633E+02 2.2647E+02 1.2771E+02 1.2753E+02 - 1.0000E+00 1.9372E+02 1.6808E+02 9.8193E+01 9.5065E+01 - 1.1220E+00 1.4581E+02 1.2640E+02 7.2847E+01 7.0424E+01 - 1.2589E+00 1.0843E+02 9.4314E+01 5.4427E+01 5.2500E+01 - 1.4125E+00 8.0680E+01 7.0127E+01 4.0779E+01 3.8578E+01 - 1.5849E+00 6.0696E+01 5.2238E+01 3.0392E+01 2.8468E+01 - 1.7783E+00 4.5097E+01 3.8757E+01 2.2557E+01 2.1300E+01 - 1.9953E+00 3.3485E+01 2.9139E+01 1.6957E+01 1.5649E+01 - 2.2387E+00 2.4698E+01 2.1612E+01 1.2434E+01 1.1400E+01 - 2.5119E+00 1.8155E+01 1.5745E+01 9.0877E+00 8.3750E+00 - 2.8184E+00 1.3335E+01 1.1648E+01 6.6584E+00 6.1033E+00 - 3.1623E+00 9.7277E+00 8.5888E+00 4.9650E+00 4.3384E+00 - 3.5481E+00 7.1839E+00 6.3302E+00 3.6603E+00 3.1036E+00 - 3.9811E+00 5.2396E+00 4.6680E+00 2.6362E+00 2.2378E+00 - 4.4668E+00 3.7714E+00 3.3911E+00 1.9107E+00 1.6007E+00 - 5.0119E+00 2.7320E+00 2.4659E+00 1.3936E+00 1.1266E+00 - 5.6234E+00 1.9709E+00 1.8036E+00 1.0046E+00 7.8788E-01 - 6.3096E+00 1.4167E+00 1.2741E+00 7.1242E-01 5.6117E-01 - 7.0795E+00 1.0389E+00 9.1409E-01 5.0248E-01 3.9688E-01 - 7.9433E+00 7.3501E-01 6.6775E-01 3.5819E-01 2.8025E-01 - 8.9125E+00 5.1308E-01 4.8292E-01 2.4640E-01 1.8709E-01 - 1.0000E+01 3.7909E-01 3.4157E-01 1.7713E-01 1.3220E-01 - 1.1220E+01 2.7233E-01 2.4270E-01 1.2262E-01 9.2146E-02 - 1.2589E+01 1.9626E-01 1.7203E-01 8.4715E-02 6.2866E-02 - 1.4125E+01 1.3831E-01 1.2171E-01 5.9682E-02 4.2652E-02 - 1.5849E+01 9.8006E-02 8.6833E-02 4.0744E-02 2.9770E-02 - 1.7783E+01 7.0622E-02 6.2633E-02 2.7419E-02 2.0289E-02 - 1.9953E+01 5.1932E-02 4.4742E-02 1.8819E-02 1.4112E-02 - 2.2387E+01 3.6963E-02 3.1491E-02 1.3098E-02 1.0176E-02 - 2.5119E+01 2.5362E-02 2.2446E-02 8.9767E-03 7.1391E-03 - 2.8184E+01 1.8316E-02 1.6048E-02 6.1812E-03 5.1603E-03 - 3.1623E+01 1.3365E-02 1.1292E-02 4.0658E-03 3.0879E-03 - 3.5481E+01 9.5175E-03 7.9899E-03 2.7454E-03 2.0901E-03 - 3.9811E+01 6.7930E-03 5.6398E-03 1.8486E-03 1.4198E-03 - 4.4668E+01 4.8519E-03 3.9869E-03 1.2320E-03 9.5087E-04 - 5.0119E+01 3.4579E-03 2.8288E-03 8.2442E-04 6.3568E-04 - 5.6234E+01 2.4631E-03 2.0005E-03 5.5613E-04 4.2443E-04 - 6.3096E+01 1.7532E-03 1.4140E-03 3.7061E-04 2.8339E-04 - 7.0795E+01 1.2499E-03 9.9443E-04 2.4967E-04 1.9091E-04 - 7.9433E+01 8.9428E-04 7.0456E-04 1.6758E-04 1.2663E-04 - 8.9125E+01 6.3286E-04 4.9842E-04 1.0968E-04 8.4369E-05 - 1.0000E+02 4.4921E-04 3.4948E-04 7.2723E-05 5.6561E-05 - 1.1220E+02 3.1874E-04 2.4640E-04 4.8057E-05 3.7680E-05 - 1.2589E+02 2.2603E-04 1.7279E-04 3.1560E-05 2.5126E-05 - 1.4125E+02 1.6040E-04 1.2114E-04 2.0870E-05 1.6747E-05 - 1.5849E+02 1.1376E-04 8.5191E-05 1.3843E-05 1.1177E-05 - 1.7783E+02 8.0141E-05 6.0060E-05 9.1022E-06 7.4204E-06 - 1.9953E+02 5.6388E-05 4.2036E-05 6.0226E-06 4.8582E-06 - 2.2387E+02 4.0016E-05 2.9096E-05 4.0429E-06 3.2213E-06 - 2.5119E+02 2.8296E-05 2.0443E-05 2.6935E-06 2.1380E-06 - 2.8184E+02 1.9817E-05 1.4327E-05 1.7579E-06 1.3898E-06 - 3.1623E+02 1.3927E-05 1.0004E-05 1.1753E-06 9.5135E-07 - 3.5481E+02 9.7859E-06 6.9520E-06 7.8221E-07 6.2486E-07 - 3.9811E+02 6.8734E-06 4.8272E-06 5.2008E-07 4.1105E-07 - 4.4668E+02 4.8214E-06 3.3554E-06 3.4518E-07 2.7404E-07 - 5.0119E+02 3.3657E-06 2.3326E-06 2.2909E-07 1.8228E-07 - 5.6234E+02 2.3613E-06 1.6109E-06 1.5338E-07 1.2243E-07 - 6.3096E+02 1.6534E-06 1.1170E-06 1.0304E-07 8.1979E-08 - 7.0795E+02 1.1525E-06 7.7726E-07 6.9385E-08 5.4888E-08 - 7.9433E+02 8.0305E-07 5.3549E-07 4.5960E-08 3.6620E-08 - 8.9125E+02 5.6170E-07 3.7201E-07 3.0129E-08 2.4508E-08 - 1.0000E+03 3.9138E-07 2.5737E-07 2.0343E-08 1.6254E-08 - 1.1220E+03 2.7153E-07 1.7677E-07 1.3868E-08 1.0758E-08 - 1.2589E+03 1.8919E-07 1.2106E-07 9.4014E-09 7.4870E-09 - 1.4125E+03 1.3141E-07 8.3323E-08 6.1450E-09 5.1370E-09 - 1.5849E+03 9.1037E-08 5.7805E-08 4.0663E-09 3.3570E-09 - 1.7783E+03 6.2485E-08 3.9886E-08 2.8025E-09 2.2039E-09 - 1.9953E+03 4.3584E-08 2.7097E-08 1.8923E-09 1.3925E-09 - 2.2387E+03 3.0196E-08 1.8636E-08 1.2338E-09 9.3372E-10 - 2.5119E+03 2.0719E-08 1.2678E-08 8.5192E-10 6.4996E-10 - 2.8184E+03 1.4259E-08 8.5037E-09 5.5055E-10 4.2827E-10 - 3.1623E+03 9.8687E-09 5.9404E-09 3.7244E-10 2.8532E-10 - 3.5481E+03 6.6996E-09 3.9805E-09 2.5044E-10 1.8986E-10 - 3.9811E+03 4.5421E-09 2.7023E-09 1.7012E-10 1.2715E-10 - 4.4668E+03 3.0990E-09 1.8338E-09 1.1472E-10 8.3171E-11 - 5.0119E+03 2.1103E-09 1.2373E-09 7.5745E-11 5.6505E-11 - 5.6234E+03 1.4327E-09 8.4046E-10 5.1550E-11 3.6052E-11 - 6.3096E+03 9.6832E-10 5.6177E-10 3.2227E-11 2.3891E-11 - 7.0795E+03 6.5565E-10 3.7386E-10 2.1777E-11 1.6138E-11 - 7.9433E+03 4.4221E-10 2.5238E-10 1.4348E-11 1.0333E-11 - 8.9125E+03 2.9602E-10 1.6753E-10 9.2988E-12 6.5290E-12 - 1.0000E+04 1.9909E-10 1.0921E-10 6.0253E-12 4.4646E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1515E+04 3.1358E+04 1.5217E+04 1.4135E+04 - 1.1220E-01 2.6139E+04 2.5798E+04 1.2910E+04 1.1997E+04 - 1.2589E-01 2.1608E+04 2.1295E+04 1.0745E+04 9.9770E+03 - 1.4125E-01 1.7859E+04 1.7538E+04 8.8331E+03 8.2191E+03 - 1.5849E-01 1.4572E+04 1.4221E+04 7.2004E+03 6.7080E+03 - 1.7783E-01 1.1762E+04 1.1395E+04 5.8439E+03 5.3732E+03 - 1.9953E-01 9.3937E+03 9.0689E+03 4.7277E+03 4.2938E+03 - 2.2387E-01 7.3972E+03 7.1457E+03 3.7729E+03 3.4426E+03 - 2.5119E-01 5.7500E+03 5.5366E+03 2.9908E+03 2.6985E+03 - 2.8184E-01 4.4369E+03 4.2374E+03 2.3419E+03 2.0842E+03 - 3.1623E-01 3.3759E+03 3.2370E+03 1.7989E+03 1.6013E+03 - 3.5481E-01 2.5572E+03 2.4580E+03 1.3913E+03 1.2321E+03 - 3.9811E-01 1.9374E+03 1.8592E+03 1.0645E+03 9.4991E+02 - 4.4668E-01 1.4651E+03 1.3939E+03 8.1348E+02 7.1708E+02 - 5.0119E-01 1.1083E+03 1.0397E+03 6.0999E+02 5.4214E+02 - 5.6234E-01 8.2741E+02 7.8288E+02 4.5560E+02 4.0564E+02 - 6.3096E-01 6.2182E+02 5.8746E+02 3.4317E+02 3.0291E+02 - 7.0795E-01 4.6632E+02 4.3587E+02 2.5158E+02 2.2781E+02 - 7.9433E-01 3.5122E+02 3.2309E+02 1.8921E+02 1.7042E+02 - 8.9125E-01 2.6629E+02 2.3926E+02 1.4231E+02 1.2642E+02 - 1.0000E+00 1.9669E+02 1.7893E+02 1.0653E+02 9.5922E+01 - 1.1220E+00 1.4612E+02 1.3256E+02 7.9269E+01 7.0593E+01 - 1.2589E+00 1.0941E+02 9.9409E+01 5.8616E+01 5.1618E+01 - 1.4125E+00 8.1758E+01 7.4457E+01 4.3288E+01 3.8443E+01 - 1.5849E+00 6.1051E+01 5.5660E+01 3.2159E+01 2.8505E+01 - 1.7783E+00 4.5964E+01 4.1406E+01 2.4002E+01 2.1171E+01 - 1.9953E+00 3.4124E+01 3.0458E+01 1.7845E+01 1.5699E+01 - 2.2387E+00 2.4909E+01 2.2569E+01 1.3507E+01 1.1570E+01 - 2.5119E+00 1.8541E+01 1.6235E+01 9.8207E+00 8.1700E+00 - 2.8184E+00 1.3790E+01 1.1922E+01 7.2039E+00 5.9550E+00 - 3.1623E+00 9.8951E+00 8.8715E+00 5.1774E+00 4.3289E+00 - 3.5481E+00 7.1550E+00 6.4138E+00 3.7907E+00 3.1191E+00 - 3.9811E+00 5.1662E+00 4.7198E+00 2.7311E+00 2.2334E+00 - 4.4668E+00 3.7404E+00 3.4932E+00 1.9565E+00 1.5568E+00 - 5.0119E+00 2.7445E+00 2.5127E+00 1.4094E+00 1.1019E+00 - 5.6234E+00 1.9850E+00 1.7747E+00 1.0086E+00 8.0506E-01 - 6.3096E+00 1.4139E+00 1.2872E+00 7.2727E-01 5.8174E-01 - 7.0795E+00 1.0296E+00 9.3627E-01 5.1452E-01 3.9896E-01 - 7.9433E+00 7.3372E-01 6.6547E-01 3.4568E-01 2.6986E-01 - 8.9125E+00 5.1029E-01 4.6855E-01 2.4208E-01 1.9068E-01 - 1.0000E+01 3.7770E-01 3.4309E-01 1.7515E-01 1.3363E-01 - 1.1220E+01 2.7032E-01 2.4476E-01 1.2242E-01 9.3839E-02 - 1.2589E+01 1.9331E-01 1.7514E-01 8.5375E-02 6.4372E-02 - 1.4125E+01 1.3859E-01 1.2427E-01 5.9664E-02 4.4188E-02 - 1.5849E+01 9.9710E-02 8.8109E-02 4.1051E-02 3.0561E-02 - 1.7783E+01 7.1732E-02 6.2659E-02 2.7901E-02 2.0607E-02 - 1.9953E+01 5.0865E-02 4.4866E-02 1.9464E-02 1.3892E-02 - 2.2387E+01 3.6665E-02 3.2008E-02 1.3185E-02 9.6085E-03 - 2.5119E+01 2.6035E-02 2.2514E-02 8.8248E-03 6.8034E-03 - 2.8184E+01 1.8101E-02 1.5770E-02 5.9626E-03 4.4120E-03 - 3.1623E+01 1.3343E-02 1.1275E-02 4.0577E-03 3.0793E-03 - 3.5481E+01 9.5382E-03 7.9708E-03 2.7203E-03 2.0814E-03 - 3.9811E+01 6.8011E-03 5.6302E-03 1.8256E-03 1.4099E-03 - 4.4668E+01 4.8543E-03 3.9799E-03 1.2284E-03 9.4639E-04 - 5.0119E+01 3.4676E-03 2.8135E-03 8.2277E-04 6.3496E-04 - 5.6234E+01 2.4675E-03 1.9925E-03 5.5050E-04 4.2617E-04 - 6.3096E+01 1.7586E-03 1.4112E-03 3.6617E-04 2.8427E-04 - 7.0795E+01 1.2494E-03 9.9288E-04 2.4500E-04 1.9250E-04 - 7.9433E+01 8.9053E-04 7.0014E-04 1.6361E-04 1.2999E-04 - 8.9125E+01 6.3564E-04 4.9334E-04 1.0682E-04 8.5682E-05 - 1.0000E+02 4.5145E-04 3.4924E-04 7.2214E-05 5.6654E-05 - 1.1220E+02 3.1864E-04 2.4640E-04 4.8204E-05 3.7738E-05 - 1.2589E+02 2.2593E-04 1.7305E-04 3.1927E-05 2.5230E-05 - 1.4125E+02 1.6049E-04 1.2109E-04 2.1089E-05 1.6800E-05 - 1.5849E+02 1.1353E-04 8.4680E-05 1.4000E-05 1.1147E-05 - 1.7783E+02 8.0362E-05 5.9459E-05 9.2288E-06 7.3308E-06 - 1.9953E+02 5.6612E-05 4.1744E-05 6.1041E-06 4.7942E-06 - 2.2387E+02 3.9877E-05 2.9079E-05 4.0409E-06 3.2040E-06 - 2.5119E+02 2.7963E-05 2.0155E-05 2.7133E-06 2.1512E-06 - 2.8184E+02 1.9748E-05 1.4111E-05 1.8566E-06 1.4073E-06 - 3.1623E+02 1.3954E-05 9.9478E-06 1.1742E-06 9.3004E-07 - 3.5481E+02 9.7771E-06 6.9295E-06 7.8305E-07 6.1995E-07 - 3.9811E+02 6.8468E-06 4.8145E-06 5.2607E-07 4.1300E-07 - 4.4668E+02 4.7998E-06 3.3518E-06 3.4910E-07 2.7680E-07 - 5.0119E+02 3.3720E-06 2.3281E-06 2.2911E-07 1.8438E-07 - 5.6234E+02 2.3574E-06 1.6180E-06 1.5420E-07 1.2356E-07 - 6.3096E+02 1.6446E-06 1.1195E-06 1.0273E-07 8.1053E-08 - 7.0795E+02 1.1559E-06 7.7130E-07 6.8199E-08 5.4258E-08 - 7.9433E+02 8.0692E-07 5.3212E-07 4.5372E-08 3.6965E-08 - 8.9125E+02 5.6126E-07 3.6852E-07 3.0282E-08 2.4782E-08 - 1.0000E+03 3.9076E-07 2.5609E-07 2.0424E-08 1.6341E-08 - 1.1220E+03 2.7199E-07 1.7587E-07 1.3466E-08 1.0797E-08 - 1.2589E+03 1.8971E-07 1.2100E-07 9.0003E-09 7.3508E-09 - 1.4125E+03 1.3151E-07 8.4321E-08 6.1422E-09 4.8659E-09 - 1.5849E+03 9.1191E-08 5.7896E-08 4.0453E-09 3.2578E-09 - 1.7783E+03 6.3036E-08 3.9367E-08 2.6226E-09 2.1496E-09 - 1.9953E+03 4.3916E-08 2.7254E-08 1.8480E-09 1.4829E-09 - 2.2387E+03 3.0224E-08 1.8621E-08 1.2584E-09 9.5434E-10 - 2.5119E+03 2.0633E-08 1.2680E-08 8.4902E-10 6.4262E-10 - 2.8184E+03 1.4205E-08 8.5966E-09 5.6590E-10 4.4706E-10 - 3.1623E+03 9.8338E-09 5.9367E-09 3.7231E-10 2.8938E-10 - 3.5481E+03 6.6755E-09 3.9892E-09 2.5136E-10 1.8880E-10 - 3.9811E+03 4.5622E-09 2.7020E-09 1.6828E-10 1.2378E-10 - 4.4668E+03 3.1069E-09 1.8121E-09 1.1169E-10 8.2339E-11 - 5.0119E+03 2.1246E-09 1.2240E-09 7.4283E-11 5.4732E-11 - 5.6234E+03 1.4357E-09 8.2889E-10 4.9471E-11 3.4862E-11 - 6.3096E+03 9.6600E-10 5.5849E-10 3.2218E-11 2.2607E-11 - 7.0795E+03 6.5770E-10 3.7819E-10 2.1343E-11 1.5234E-11 - 7.9433E+03 4.4396E-10 2.5402E-10 1.4237E-11 1.0561E-11 - 8.9125E+03 2.9659E-10 1.6884E-10 9.1036E-12 7.1660E-12 - 1.0000E+04 1.9939E-10 1.1196E-10 6.2012E-12 4.5062E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1842E+04 3.1942E+04 1.5786E+04 1.4087E+04 - 1.1220E-01 2.6530E+04 2.6598E+04 1.3446E+04 1.1878E+04 - 1.2589E-01 2.2024E+04 2.2041E+04 1.1240E+04 9.9285E+03 - 1.4125E-01 1.8224E+04 1.8114E+04 9.2923E+03 8.2078E+03 - 1.5849E-01 1.4842E+04 1.4710E+04 7.6671E+03 6.6613E+03 - 1.7783E-01 1.1945E+04 1.1870E+04 6.2346E+03 5.3796E+03 - 1.9953E-01 9.4752E+03 9.4653E+03 5.0456E+03 4.2776E+03 - 2.2387E-01 7.4756E+03 7.4346E+03 4.0463E+03 3.3808E+03 - 2.5119E-01 5.8484E+03 5.7570E+03 3.1927E+03 2.6859E+03 - 2.8184E-01 4.4856E+03 4.4385E+03 2.5074E+03 2.1018E+03 - 3.1623E-01 3.4109E+03 3.4347E+03 1.9494E+03 1.6036E+03 - 3.5481E-01 2.5982E+03 2.6146E+03 1.5033E+03 1.2259E+03 - 3.9811E-01 1.9844E+03 1.9565E+03 1.1413E+03 9.4544E+02 - 4.4668E-01 1.4983E+03 1.4715E+03 8.6484E+02 7.1858E+02 - 5.0119E-01 1.1269E+03 1.1085E+03 6.5797E+02 5.4286E+02 - 5.6234E-01 8.4776E+02 8.3020E+02 4.9903E+02 4.0950E+02 - 6.3096E-01 6.3040E+02 6.1972E+02 3.7026E+02 3.0495E+02 - 7.0795E-01 4.7117E+02 4.5953E+02 2.7344E+02 2.2634E+02 - 7.9433E-01 3.5311E+02 3.3977E+02 2.0682E+02 1.6806E+02 - 8.9125E-01 2.6395E+02 2.5392E+02 1.5271E+02 1.2600E+02 - 1.0000E+00 1.9740E+02 1.8845E+02 1.1628E+02 9.4021E+01 - 1.1220E+00 1.4769E+02 1.4032E+02 8.5209E+01 7.0350E+01 - 1.2589E+00 1.1005E+02 1.0514E+02 6.3763E+01 5.2329E+01 - 1.4125E+00 8.2558E+01 7.7553E+01 4.7613E+01 3.8885E+01 - 1.5849E+00 6.1751E+01 5.7343E+01 3.4706E+01 2.7870E+01 - 1.7783E+00 4.5647E+01 4.2574E+01 2.5807E+01 2.0210E+01 - 1.9953E+00 3.3714E+01 3.1477E+01 1.9165E+01 1.5386E+01 - 2.2387E+00 2.4758E+01 2.3347E+01 1.3912E+01 1.1319E+01 - 2.5119E+00 1.8379E+01 1.7110E+01 1.0099E+01 8.1227E+00 - 2.8184E+00 1.3551E+01 1.2390E+01 7.5174E+00 5.9452E+00 - 3.1623E+00 9.7965E+00 9.0992E+00 5.6017E+00 4.2896E+00 - 3.5481E+00 7.1732E+00 6.6773E+00 4.0255E+00 3.0335E+00 - 3.9811E+00 5.2093E+00 4.8197E+00 2.8707E+00 2.1780E+00 - 4.4668E+00 3.8247E+00 3.4684E+00 2.0484E+00 1.5690E+00 - 5.0119E+00 2.7572E+00 2.5087E+00 1.4332E+00 1.1268E+00 - 5.6234E+00 1.9633E+00 1.8114E+00 1.0368E+00 7.8982E-01 - 6.3096E+00 1.3905E+00 1.3076E+00 7.3297E-01 5.5495E-01 - 7.0795E+00 1.0004E+00 9.3554E-01 4.9705E-01 3.8940E-01 - 7.9433E+00 7.2676E-01 6.7038E-01 3.5566E-01 2.7151E-01 - 8.9125E+00 5.2314E-01 4.7062E-01 2.5643E-01 1.9248E-01 - 1.0000E+01 3.8292E-01 3.4530E-01 1.8006E-01 1.3506E-01 - 1.1220E+01 2.7350E-01 2.4694E-01 1.2241E-01 9.0196E-02 - 1.2589E+01 1.9661E-01 1.7691E-01 8.4362E-02 6.1208E-02 - 1.4125E+01 1.4244E-01 1.2482E-01 5.9088E-02 4.3372E-02 - 1.5849E+01 1.0190E-01 8.7078E-02 4.0135E-02 2.9535E-02 - 1.7783E+01 7.1812E-02 6.2372E-02 2.7615E-02 2.0097E-02 - 1.9953E+01 5.0354E-02 4.4034E-02 1.8384E-02 1.4033E-02 - 2.2387E+01 3.6305E-02 3.0701E-02 1.2140E-02 9.5793E-03 - 2.5119E+01 2.6127E-02 2.1966E-02 8.6130E-03 6.8238E-03 - 2.8184E+01 1.8403E-02 1.6168E-02 6.0057E-03 4.7405E-03 - 3.1623E+01 1.3340E-02 1.1251E-02 4.0371E-03 3.0919E-03 - 3.5481E+01 9.5080E-03 7.9675E-03 2.7294E-03 2.0940E-03 - 3.9811E+01 6.8009E-03 5.6534E-03 1.8430E-03 1.4031E-03 - 4.4668E+01 4.8637E-03 4.0062E-03 1.2348E-03 9.4317E-04 - 5.0119E+01 3.4683E-03 2.8287E-03 8.2887E-04 6.3494E-04 - 5.6234E+01 2.4717E-03 1.9988E-03 5.5718E-04 4.2554E-04 - 6.3096E+01 1.7662E-03 1.4165E-03 3.7130E-04 2.8343E-04 - 7.0795E+01 1.2513E-03 1.0006E-03 2.4651E-04 1.9030E-04 - 7.9433E+01 8.8885E-04 7.0422E-04 1.6288E-04 1.2926E-04 - 8.9125E+01 6.3409E-04 4.9532E-04 1.0926E-04 8.5268E-05 - 1.0000E+02 4.5161E-04 3.4921E-04 7.2006E-05 5.6497E-05 - 1.1220E+02 3.2024E-04 2.4577E-04 4.7915E-05 3.7910E-05 - 1.2589E+02 2.2720E-04 1.7275E-04 3.1979E-05 2.5259E-05 - 1.4125E+02 1.6011E-04 1.2163E-04 2.1191E-05 1.6623E-05 - 1.5849E+02 1.1318E-04 8.5286E-05 1.3962E-05 1.1079E-05 - 1.7783E+02 8.0134E-05 5.9592E-05 9.1468E-06 7.3793E-06 - 1.9953E+02 5.6460E-05 4.1811E-05 6.0653E-06 4.8716E-06 - 2.2387E+02 4.0105E-05 2.9106E-05 4.0637E-06 3.2641E-06 - 2.5119E+02 2.8343E-05 2.0250E-05 2.6685E-06 2.1535E-06 - 2.8184E+02 1.9934E-05 1.4193E-05 1.7221E-06 1.4102E-06 - 3.1623E+02 1.3920E-05 9.9394E-06 1.1725E-06 9.3228E-07 - 3.5481E+02 9.7663E-06 6.8962E-06 7.7605E-07 6.2831E-07 - 3.9811E+02 6.8541E-06 4.7961E-06 5.2118E-07 4.2319E-07 - 4.4668E+02 4.8256E-06 3.3372E-06 3.5055E-07 2.7774E-07 - 5.0119E+02 3.3767E-06 2.3139E-06 2.3141E-07 1.8108E-07 - 5.6234E+02 2.3544E-06 1.6055E-06 1.5295E-07 1.2196E-07 - 6.3096E+02 1.6385E-06 1.1193E-06 1.0268E-07 8.3646E-08 - 7.0795E+02 1.1452E-06 7.7502E-07 6.8986E-08 5.6005E-08 - 7.9433E+02 8.0017E-07 5.3384E-07 4.5939E-08 3.6905E-08 - 8.9125E+02 5.5903E-07 3.6753E-07 3.0231E-08 2.4643E-08 - 1.0000E+03 3.9165E-07 2.5557E-07 2.0572E-08 1.6697E-08 - 1.1220E+03 2.7097E-07 1.7641E-07 1.3766E-08 1.0950E-08 - 1.2589E+03 1.8682E-07 1.2108E-07 9.1510E-09 7.2630E-09 - 1.4125E+03 1.3013E-07 8.3240E-08 6.1405E-09 4.9241E-09 - 1.5849E+03 9.0863E-08 5.7557E-08 4.1462E-09 3.3543E-09 - 1.7783E+03 6.2521E-08 3.9449E-08 2.9284E-09 2.2103E-09 - 1.9953E+03 4.3347E-08 2.6910E-08 1.8985E-09 1.4592E-09 - 2.2387E+03 2.9965E-08 1.8510E-08 1.2250E-09 9.6690E-10 - 2.5119E+03 2.0610E-08 1.2781E-08 8.3620E-10 6.5572E-10 - 2.8184E+03 1.4056E-08 8.6521E-09 5.5000E-10 4.2638E-10 - 3.1623E+03 9.8066E-09 5.9257E-09 3.6948E-10 2.8891E-10 - 3.5481E+03 6.6519E-09 4.0071E-09 2.5079E-10 1.9314E-10 - 3.9811E+03 4.5230E-09 2.7025E-09 1.6622E-10 1.2495E-10 - 4.4668E+03 3.0626E-09 1.8249E-09 1.0826E-10 8.1683E-11 - 5.0119E+03 2.0871E-09 1.2313E-09 7.2604E-11 5.3722E-11 - 5.6234E+03 1.4303E-09 8.2453E-10 4.9287E-11 3.5796E-11 - 6.3096E+03 9.7360E-10 5.5915E-10 3.2702E-11 2.4648E-11 - 7.0795E+03 6.5760E-10 3.7574E-10 2.1554E-11 1.5931E-11 - 7.9433E+03 4.4235E-10 2.5015E-10 1.4442E-11 1.0378E-11 - 8.9125E+03 2.9733E-10 1.6658E-10 9.2242E-12 6.9003E-12 - 1.0000E+04 1.9820E-10 1.0970E-10 6.3080E-12 4.6669E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1921E+04 3.2596E+04 1.6272E+04 1.4057E+04 - 1.1220E-01 2.6634E+04 2.7157E+04 1.3879E+04 1.1895E+04 - 1.2589E-01 2.2252E+04 2.2563E+04 1.1651E+04 9.9171E+03 - 1.4125E-01 1.8415E+04 1.8613E+04 9.7005E+03 8.1350E+03 - 1.5849E-01 1.5029E+04 1.5199E+04 7.9626E+03 6.6120E+03 - 1.7783E-01 1.2094E+04 1.2274E+04 6.5011E+03 5.3105E+03 - 1.9953E-01 9.5762E+03 9.8177E+03 5.2705E+03 4.2644E+03 - 2.2387E-01 7.5213E+03 7.7262E+03 4.2040E+03 3.4012E+03 - 2.5119E-01 5.8782E+03 6.0211E+03 3.3309E+03 2.6575E+03 - 2.8184E-01 4.5341E+03 4.6737E+03 2.6423E+03 2.0751E+03 - 3.1623E-01 3.4892E+03 3.5600E+03 2.0670E+03 1.6005E+03 - 3.5481E-01 2.6630E+03 2.7052E+03 1.5911E+03 1.2186E+03 - 3.9811E-01 2.0332E+03 2.0702E+03 1.2255E+03 9.3707E+02 - 4.4668E-01 1.5227E+03 1.5596E+03 9.3425E+02 7.0861E+02 - 5.0119E-01 1.1356E+03 1.1742E+03 6.9824E+02 5.3573E+02 - 5.6234E-01 8.5932E+02 8.8119E+02 5.2830E+02 4.0674E+02 - 6.3096E-01 6.4000E+02 6.5697E+02 4.0080E+02 3.0036E+02 - 7.0795E-01 4.7812E+02 4.8292E+02 3.0251E+02 2.2158E+02 - 7.9433E-01 3.5901E+02 3.6236E+02 2.2625E+02 1.6372E+02 - 8.9125E-01 2.6694E+02 2.6901E+02 1.6883E+02 1.2374E+02 - 1.0000E+00 1.9621E+02 1.9861E+02 1.2378E+02 9.2358E+01 - 1.1220E+00 1.4550E+02 1.4807E+02 9.1926E+01 6.8333E+01 - 1.2589E+00 1.0803E+02 1.1021E+02 6.7576E+01 5.0024E+01 - 1.4125E+00 8.1369E+01 8.1714E+01 4.9894E+01 3.6843E+01 - 1.5849E+00 6.1604E+01 6.0587E+01 3.6606E+01 2.7429E+01 - 1.7783E+00 4.5710E+01 4.5287E+01 2.7023E+01 1.9897E+01 - 1.9953E+00 3.3364E+01 3.3482E+01 2.0223E+01 1.4729E+01 - 2.2387E+00 2.4268E+01 2.4321E+01 1.4779E+01 1.0829E+01 - 2.5119E+00 1.7634E+01 1.7831E+01 1.0894E+01 7.7336E+00 - 2.8184E+00 1.3005E+01 1.3212E+01 7.9286E+00 5.7603E+00 - 3.1623E+00 9.7381E+00 9.4766E+00 5.7364E+00 4.1870E+00 - 3.5481E+00 7.1202E+00 6.8355E+00 4.1651E+00 3.0405E+00 - 3.9811E+00 5.1803E+00 4.9836E+00 3.0111E+00 2.1818E+00 - 4.4668E+00 3.7985E+00 3.6188E+00 2.1233E+00 1.5623E+00 - 5.0119E+00 2.7469E+00 2.5749E+00 1.5302E+00 1.1079E+00 - 5.6234E+00 1.9694E+00 1.8374E+00 1.0845E+00 7.8023E-01 - 6.3096E+00 1.4271E+00 1.3333E+00 7.4740E-01 5.5025E-01 - 7.0795E+00 1.0317E+00 9.5974E-01 5.2489E-01 3.8891E-01 - 7.9433E+00 7.4501E-01 6.7720E-01 3.6995E-01 2.7067E-01 - 8.9125E+00 5.4170E-01 4.7762E-01 2.6167E-01 1.9011E-01 - 1.0000E+01 3.8129E-01 3.4706E-01 1.8013E-01 1.3219E-01 - 1.1220E+01 2.7260E-01 2.4963E-01 1.2449E-01 9.2231E-02 - 1.2589E+01 1.9462E-01 1.7762E-01 8.7627E-02 6.4526E-02 - 1.4125E+01 1.3928E-01 1.2636E-01 6.0031E-02 4.4060E-02 - 1.5849E+01 1.0060E-01 9.0237E-02 4.1181E-02 3.0406E-02 - 1.7783E+01 7.1909E-02 6.4624E-02 2.8584E-02 2.1113E-02 - 1.9953E+01 5.1156E-02 4.5505E-02 1.9278E-02 1.4128E-02 - 2.2387E+01 3.7212E-02 3.2195E-02 1.3144E-02 9.6931E-03 - 2.5119E+01 2.6575E-02 2.3135E-02 8.9835E-03 6.6686E-03 - 2.8184E+01 1.8723E-02 1.6243E-02 5.8324E-03 4.5669E-03 - 3.1623E+01 1.3327E-02 1.1270E-02 4.0622E-03 3.0833E-03 - 3.5481E+01 9.5117E-03 7.9816E-03 2.7284E-03 2.0792E-03 - 3.9811E+01 6.8239E-03 5.6434E-03 1.8380E-03 1.3958E-03 - 4.4668E+01 4.8619E-03 3.9981E-03 1.2277E-03 9.4524E-04 - 5.0119E+01 3.4532E-03 2.8305E-03 8.2155E-04 6.3992E-04 - 5.6234E+01 2.4576E-03 1.9990E-03 5.5219E-04 4.2383E-04 - 6.3096E+01 1.7541E-03 1.4133E-03 3.6542E-04 2.8290E-04 - 7.0795E+01 1.2579E-03 9.9671E-04 2.4331E-04 1.9211E-04 - 7.9433E+01 8.9376E-04 7.0259E-04 1.6447E-04 1.2878E-04 - 8.9125E+01 6.3078E-04 4.9411E-04 1.0906E-04 8.5772E-05 - 1.0000E+02 4.5033E-04 3.4876E-04 7.2280E-05 5.6827E-05 - 1.1220E+02 3.1985E-04 2.4697E-04 4.7961E-05 3.8098E-05 - 1.2589E+02 2.2645E-04 1.7375E-04 3.1812E-05 2.5084E-05 - 1.4125E+02 1.6017E-04 1.2145E-04 2.1111E-05 1.6582E-05 - 1.5849E+02 1.1352E-04 8.5118E-05 1.3830E-05 1.1076E-05 - 1.7783E+02 8.0480E-05 5.9906E-05 9.1722E-06 7.3970E-06 - 1.9953E+02 5.6802E-05 4.1734E-05 6.1418E-06 4.8682E-06 - 2.2387E+02 4.0124E-05 2.9275E-05 4.0935E-06 3.2085E-06 - 2.5119E+02 2.8208E-05 2.0534E-05 2.7274E-06 2.1631E-06 - 2.8184E+02 1.9886E-05 1.4309E-05 1.8135E-06 1.3921E-06 - 3.1623E+02 1.3896E-05 9.9295E-06 1.1870E-06 9.4534E-07 - 3.5481E+02 9.7506E-06 6.9053E-06 7.8025E-07 6.3758E-07 - 3.9811E+02 6.8627E-06 4.8020E-06 5.1641E-07 4.1811E-07 - 4.4668E+02 4.8004E-06 3.3415E-06 3.4652E-07 2.7138E-07 - 5.0119E+02 3.3658E-06 2.3110E-06 2.3034E-07 1.8291E-07 - 5.6234E+02 2.3503E-06 1.6102E-06 1.5423E-07 1.2264E-07 - 6.3096E+02 1.6434E-06 1.1155E-06 1.0433E-07 8.1916E-08 - 7.0795E+02 1.1460E-06 7.7253E-07 6.8580E-08 5.5630E-08 - 7.9433E+02 8.0259E-07 5.3373E-07 4.5683E-08 3.7768E-08 - 8.9125E+02 5.6265E-07 3.6770E-07 3.0432E-08 2.4726E-08 - 1.0000E+03 3.8938E-07 2.5588E-07 2.0508E-08 1.6497E-08 - 1.1220E+03 2.6976E-07 1.7580E-07 1.3561E-08 1.0923E-08 - 1.2589E+03 1.8802E-07 1.2112E-07 9.0880E-09 7.2938E-09 - 1.4125E+03 1.3061E-07 8.3789E-08 6.3605E-09 4.8756E-09 - 1.5849E+03 9.0845E-08 5.7252E-08 4.2868E-09 3.2573E-09 - 1.7783E+03 6.2887E-08 3.9119E-08 2.8177E-09 2.1319E-09 - 1.9953E+03 4.3422E-08 2.7123E-08 1.8998E-09 1.4577E-09 - 2.2387E+03 2.9985E-08 1.8538E-08 1.2385E-09 9.5896E-10 - 2.5119E+03 2.0652E-08 1.2707E-08 8.0650E-10 6.6003E-10 - 2.8184E+03 1.4150E-08 8.6550E-09 5.5667E-10 4.3494E-10 - 3.1623E+03 9.8361E-09 5.9740E-09 3.7218E-10 2.8640E-10 - 3.5481E+03 6.6862E-09 3.9837E-09 2.4785E-10 1.8931E-10 - 3.9811E+03 4.6008E-09 2.7012E-09 1.6732E-10 1.2932E-10 - 4.4668E+03 3.1048E-09 1.8240E-09 1.1244E-10 8.4738E-11 - 5.0119E+03 2.1025E-09 1.2306E-09 7.4721E-11 5.4202E-11 - 5.6234E+03 1.4358E-09 8.2980E-10 4.9944E-11 3.4550E-11 - 6.3096E+03 9.6520E-10 5.6094E-10 3.3487E-11 2.3866E-11 - 7.0795E+03 6.5128E-10 3.8021E-10 2.1843E-11 1.5830E-11 - 7.9433E+03 4.3975E-10 2.5162E-10 1.4173E-11 1.0152E-11 - 8.9125E+03 2.9386E-10 1.6847E-10 9.5125E-12 6.5184E-12 - 1.0000E+04 1.9797E-10 1.1228E-10 6.0982E-12 4.1911E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2115E+04 3.3155E+04 1.6733E+04 1.4079E+04 - 1.1220E-01 2.6857E+04 2.7813E+04 1.4262E+04 1.1766E+04 - 1.2589E-01 2.2355E+04 2.3255E+04 1.2002E+04 9.7920E+03 - 1.4125E-01 1.8472E+04 1.9076E+04 9.9425E+03 8.0860E+03 - 1.5849E-01 1.5038E+04 1.5539E+04 8.2228E+03 6.5908E+03 - 1.7783E-01 1.2105E+04 1.2590E+04 6.7341E+03 5.2832E+03 - 1.9953E-01 9.6971E+03 1.0069E+04 5.4511E+03 4.2323E+03 - 2.2387E-01 7.6318E+03 7.9873E+03 4.3961E+03 3.3798E+03 - 2.5119E-01 5.9373E+03 6.2500E+03 3.4969E+03 2.6409E+03 - 2.8184E-01 4.5810E+03 4.8149E+03 2.7578E+03 2.0512E+03 - 3.1623E-01 3.5073E+03 3.7122E+03 2.1628E+03 1.6049E+03 - 3.5481E-01 2.6670E+03 2.8408E+03 1.6708E+03 1.2294E+03 - 3.9811E-01 2.0258E+03 2.1527E+03 1.2777E+03 9.3097E+02 - 4.4668E-01 1.5180E+03 1.6238E+03 9.7577E+02 7.0491E+02 - 5.0119E-01 1.1393E+03 1.2154E+03 7.4025E+02 5.2448E+02 - 5.6234E-01 8.6290E+02 9.0373E+02 5.6787E+02 3.9424E+02 - 6.3096E-01 6.3969E+02 6.6622E+02 4.2892E+02 2.9419E+02 - 7.0795E-01 4.7385E+02 4.9808E+02 3.2067E+02 2.1763E+02 - 7.9433E-01 3.5712E+02 3.7761E+02 2.4219E+02 1.6258E+02 - 8.9125E-01 2.6453E+02 2.8213E+02 1.7745E+02 1.2113E+02 - 1.0000E+00 1.9739E+02 2.0816E+02 1.2881E+02 8.7651E+01 - 1.1220E+00 1.4675E+02 1.5425E+02 9.6032E+01 6.5519E+01 - 1.2589E+00 1.0910E+02 1.1419E+02 7.1489E+01 4.9392E+01 - 1.4125E+00 8.1548E+01 8.4648E+01 5.2670E+01 3.6853E+01 - 1.5849E+00 6.1086E+01 6.2482E+01 3.9016E+01 2.6978E+01 - 1.7783E+00 4.5451E+01 4.6535E+01 2.8794E+01 1.9668E+01 - 1.9953E+00 3.3450E+01 3.4040E+01 2.1390E+01 1.4477E+01 - 2.2387E+00 2.4923E+01 2.4836E+01 1.5648E+01 1.0812E+01 - 2.5119E+00 1.8468E+01 1.8458E+01 1.0973E+01 8.0513E+00 - 2.8184E+00 1.3484E+01 1.3224E+01 7.9885E+00 5.7555E+00 - 3.1623E+00 9.7961E+00 9.5352E+00 5.8324E+00 4.0955E+00 - 3.5481E+00 7.0808E+00 6.9717E+00 4.1859E+00 2.9322E+00 - 3.9811E+00 5.1148E+00 5.0127E+00 2.9941E+00 2.1061E+00 - 4.4668E+00 3.7286E+00 3.5858E+00 2.1105E+00 1.5235E+00 - 5.0119E+00 2.6932E+00 2.6133E+00 1.4765E+00 1.0523E+00 - 5.6234E+00 1.9445E+00 1.8836E+00 1.0584E+00 7.4351E-01 - 6.3096E+00 1.4226E+00 1.3433E+00 7.7034E-01 5.4356E-01 - 7.0795E+00 1.0294E+00 9.5275E-01 5.2975E-01 3.8420E-01 - 7.9433E+00 7.4940E-01 6.7763E-01 3.5991E-01 2.6094E-01 - 8.9125E+00 5.3977E-01 4.9182E-01 2.5344E-01 1.8219E-01 - 1.0000E+01 3.7789E-01 3.4775E-01 1.8148E-01 1.2988E-01 - 1.1220E+01 2.7060E-01 2.4829E-01 1.2371E-01 9.0929E-02 - 1.2589E+01 1.9588E-01 1.7781E-01 8.4967E-02 6.4775E-02 - 1.4125E+01 1.3967E-01 1.2606E-01 6.0325E-02 4.4811E-02 - 1.5849E+01 1.0028E-01 8.8985E-02 4.1985E-02 3.0311E-02 - 1.7783E+01 7.1949E-02 6.2663E-02 2.8472E-02 2.1277E-02 - 1.9953E+01 5.1063E-02 4.4516E-02 1.9210E-02 1.4500E-02 - 2.2387E+01 3.6929E-02 3.1995E-02 1.3122E-02 9.9244E-03 - 2.5119E+01 2.6422E-02 2.2994E-02 8.9806E-03 7.1246E-03 - 2.8184E+01 1.9065E-02 1.5745E-02 6.0114E-03 4.9085E-03 - 3.1623E+01 1.3365E-02 1.1316E-02 4.0501E-03 3.0885E-03 - 3.5481E+01 9.5543E-03 8.0052E-03 2.7287E-03 2.0967E-03 - 3.9811E+01 6.8241E-03 5.6684E-03 1.8410E-03 1.4115E-03 - 4.4668E+01 4.8674E-03 4.0108E-03 1.2303E-03 9.4998E-04 - 5.0119E+01 3.4692E-03 2.8232E-03 8.2294E-04 6.3775E-04 - 5.6234E+01 2.4702E-03 1.9893E-03 5.5378E-04 4.2915E-04 - 6.3096E+01 1.7522E-03 1.4118E-03 3.6950E-04 2.8742E-04 - 7.0795E+01 1.2472E-03 1.0013E-03 2.4658E-04 1.9127E-04 - 7.9433E+01 8.8742E-04 7.0592E-04 1.6327E-04 1.2798E-04 - 8.9125E+01 6.3216E-04 4.9872E-04 1.0850E-04 8.4661E-05 - 1.0000E+02 4.5066E-04 3.4977E-04 7.2574E-05 5.6719E-05 - 1.1220E+02 3.1915E-04 2.4548E-04 4.7872E-05 3.7552E-05 - 1.2589E+02 2.2636E-04 1.7300E-04 3.1793E-05 2.5039E-05 - 1.4125E+02 1.6062E-04 1.2231E-04 2.1230E-05 1.6752E-05 - 1.5849E+02 1.1407E-04 8.5492E-05 1.4001E-05 1.1141E-05 - 1.7783E+02 8.0578E-05 5.9709E-05 9.1766E-06 7.4893E-06 - 1.9953E+02 5.6756E-05 4.1844E-05 6.1091E-06 4.9707E-06 - 2.2387E+02 4.0096E-05 2.9279E-05 4.0754E-06 3.2782E-06 - 2.5119E+02 2.8229E-05 2.0553E-05 2.6843E-06 2.1328E-06 - 2.8184E+02 1.9715E-05 1.4339E-05 1.7327E-06 1.3839E-06 - 3.1623E+02 1.3890E-05 9.9383E-06 1.1725E-06 9.3733E-07 - 3.5481E+02 9.7460E-06 6.8950E-06 7.7987E-07 6.3007E-07 - 3.9811E+02 6.8487E-06 4.8062E-06 5.1601E-07 4.1679E-07 - 4.4668E+02 4.8009E-06 3.3484E-06 3.4464E-07 2.7939E-07 - 5.0119E+02 3.3589E-06 2.3187E-06 2.2854E-07 1.8657E-07 - 5.6234E+02 2.3628E-06 1.6144E-06 1.5313E-07 1.2189E-07 - 6.3096E+02 1.6514E-06 1.1178E-06 1.0268E-07 8.1123E-08 - 7.0795E+02 1.1509E-06 7.7147E-07 6.9428E-08 5.4346E-08 - 7.9433E+02 8.0204E-07 5.3688E-07 4.6031E-08 3.6238E-08 - 8.9125E+02 5.6034E-07 3.7221E-07 3.1032E-08 2.4179E-08 - 1.0000E+03 3.9158E-07 2.5470E-07 2.1035E-08 1.6414E-08 - 1.1220E+03 2.7182E-07 1.7544E-07 1.3990E-08 1.1041E-08 - 1.2589E+03 1.8809E-07 1.2170E-07 9.4107E-09 7.3252E-09 - 1.4125E+03 1.2994E-07 8.3461E-08 6.2711E-09 4.7683E-09 - 1.5849E+03 9.0954E-08 5.7143E-08 4.1402E-09 3.1962E-09 - 1.7783E+03 6.3185E-08 3.9520E-08 2.8120E-09 2.1312E-09 - 1.9953E+03 4.3682E-08 2.6998E-08 1.8701E-09 1.4651E-09 - 2.2387E+03 3.0278E-08 1.8538E-08 1.2313E-09 9.9067E-10 - 2.5119E+03 2.0686E-08 1.2654E-08 8.2803E-10 6.5942E-10 - 2.8184E+03 1.4107E-08 8.5698E-09 5.6774E-10 4.2723E-10 - 3.1623E+03 9.8242E-09 5.9148E-09 3.7860E-10 2.8600E-10 - 3.5481E+03 6.6677E-09 3.9885E-09 2.5945E-10 1.8591E-10 - 3.9811E+03 4.5642E-09 2.7032E-09 1.7246E-10 1.2412E-10 - 4.4668E+03 3.1127E-09 1.8169E-09 1.1355E-10 8.2537E-11 - 5.0119E+03 2.0964E-09 1.2211E-09 7.3891E-11 5.2969E-11 - 5.6234E+03 1.4163E-09 8.2797E-10 4.7097E-11 3.5826E-11 - 6.3096E+03 9.7702E-10 5.5900E-10 3.2470E-11 2.3794E-11 - 7.0795E+03 6.5923E-10 3.7255E-10 2.2153E-11 1.5459E-11 - 7.9433E+03 4.4098E-10 2.5031E-10 1.4064E-11 9.7335E-12 - 8.9125E+03 2.9574E-10 1.6607E-10 9.5036E-12 6.4824E-12 - 1.0000E+04 1.9786E-10 1.0984E-10 6.6249E-12 4.3436E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2106E+04 3.3495E+04 1.6750E+04 1.4031E+04 - 1.1220E-01 2.6850E+04 2.7984E+04 1.4298E+04 1.1813E+04 - 1.2589E-01 2.2284E+04 2.3238E+04 1.2083E+04 9.7460E+03 - 1.4125E-01 1.8344E+04 1.9180E+04 1.0093E+04 7.9663E+03 - 1.5849E-01 1.5046E+04 1.5710E+04 8.3119E+03 6.4851E+03 - 1.7783E-01 1.2125E+04 1.2733E+04 6.7857E+03 5.2493E+03 - 1.9953E-01 9.6464E+03 1.0189E+04 5.5606E+03 4.2357E+03 - 2.2387E-01 7.6535E+03 8.0483E+03 4.4669E+03 3.3868E+03 - 2.5119E-01 5.9621E+03 6.3113E+03 3.5419E+03 2.6235E+03 - 2.8184E-01 4.5717E+03 4.8998E+03 2.8144E+03 2.0133E+03 - 3.1623E-01 3.4915E+03 3.7659E+03 2.2045E+03 1.5641E+03 - 3.5481E-01 2.6639E+03 2.8752E+03 1.7080E+03 1.1930E+03 - 3.9811E-01 2.0183E+03 2.1898E+03 1.3152E+03 9.1292E+02 - 4.4668E-01 1.5247E+03 1.6507E+03 9.9836E+02 6.9215E+02 - 5.0119E-01 1.1470E+03 1.2399E+03 7.5571E+02 5.1210E+02 - 5.6234E-01 8.4969E+02 9.3099E+02 5.7494E+02 3.8877E+02 - 6.3096E-01 6.3241E+02 6.9964E+02 4.3388E+02 2.9392E+02 - 7.0795E-01 4.6895E+02 5.2102E+02 3.2875E+02 2.1488E+02 - 7.9433E-01 3.5388E+02 3.8455E+02 2.4328E+02 1.5998E+02 - 8.9125E-01 2.6757E+02 2.8610E+02 1.7943E+02 1.1936E+02 - 1.0000E+00 1.9665E+02 2.1252E+02 1.3403E+02 8.7627E+01 - 1.1220E+00 1.4590E+02 1.5764E+02 9.9808E+01 6.4716E+01 - 1.2589E+00 1.0881E+02 1.1647E+02 7.4382E+01 4.7474E+01 - 1.4125E+00 8.0706E+01 8.5467E+01 5.4599E+01 3.5583E+01 - 1.5849E+00 6.0100E+01 6.3504E+01 4.0194E+01 2.6428E+01 - 1.7783E+00 4.5169E+01 4.7568E+01 2.9634E+01 1.9180E+01 - 1.9953E+00 3.3441E+01 3.4917E+01 2.1486E+01 1.4315E+01 - 2.2387E+00 2.4586E+01 2.5168E+01 1.5354E+01 1.0573E+01 - 2.5119E+00 1.8278E+01 1.8267E+01 1.1419E+01 7.8086E+00 - 2.8184E+00 1.3425E+01 1.3493E+01 8.4494E+00 5.6643E+00 - 3.1623E+00 9.8031E+00 9.8050E+00 6.0135E+00 4.0553E+00 - 3.5481E+00 7.1608E+00 7.1427E+00 4.3305E+00 2.9041E+00 - 3.9811E+00 5.2008E+00 5.1830E+00 3.0692E+00 2.1062E+00 - 4.4668E+00 3.7900E+00 3.6967E+00 2.1913E+00 1.5335E+00 - 5.0119E+00 2.7481E+00 2.6679E+00 1.5507E+00 1.1039E+00 - 5.6234E+00 1.9973E+00 1.9261E+00 1.0902E+00 7.7175E-01 - 6.3096E+00 1.4579E+00 1.3589E+00 7.7147E-01 5.4528E-01 - 7.0795E+00 1.0499E+00 9.8510E-01 5.4400E-01 3.9038E-01 - 7.9433E+00 7.4047E-01 7.0958E-01 3.8505E-01 2.7375E-01 - 8.9125E+00 5.2979E-01 5.0857E-01 2.6298E-01 1.9357E-01 - 1.0000E+01 3.8465E-01 3.4916E-01 1.8088E-01 1.3278E-01 - 1.1220E+01 2.7669E-01 2.4943E-01 1.2276E-01 9.0895E-02 - 1.2589E+01 1.9792E-01 1.7773E-01 8.5463E-02 6.4136E-02 - 1.4125E+01 1.4145E-01 1.2691E-01 5.9591E-02 4.4559E-02 - 1.5849E+01 1.0155E-01 8.9308E-02 4.0715E-02 3.0616E-02 - 1.7783E+01 7.2108E-02 6.1830E-02 2.7740E-02 2.1052E-02 - 1.9953E+01 5.0937E-02 4.4244E-02 1.8632E-02 1.4637E-02 - 2.2387E+01 3.6509E-02 3.1693E-02 1.2511E-02 9.8957E-03 - 2.5119E+01 2.5805E-02 2.2447E-02 8.6798E-03 6.8166E-03 - 2.8184E+01 1.8438E-02 1.5976E-02 6.0792E-03 4.5346E-03 - 3.1623E+01 1.3355E-02 1.1242E-02 4.0561E-03 3.0947E-03 - 3.5481E+01 9.5402E-03 7.9668E-03 2.7295E-03 2.1017E-03 - 3.9811E+01 6.7821E-03 5.6398E-03 1.8383E-03 1.4047E-03 - 4.4668E+01 4.8247E-03 3.9900E-03 1.2344E-03 9.4577E-04 - 5.0119E+01 3.4466E-03 2.8203E-03 8.2595E-04 6.3554E-04 - 5.6234E+01 2.4636E-03 1.9936E-03 5.5492E-04 4.2311E-04 - 6.3096E+01 1.7560E-03 1.4079E-03 3.6720E-04 2.8501E-04 - 7.0795E+01 1.2518E-03 9.9688E-04 2.4225E-04 1.9167E-04 - 7.9433E+01 8.8603E-04 7.0593E-04 1.6130E-04 1.2781E-04 - 8.9125E+01 6.2791E-04 4.9726E-04 1.0786E-04 8.5274E-05 - 1.0000E+02 4.5119E-04 3.4974E-04 7.2491E-05 5.7077E-05 - 1.1220E+02 3.2027E-04 2.4635E-04 4.8274E-05 3.7850E-05 - 1.2589E+02 2.2673E-04 1.7264E-04 3.1764E-05 2.4948E-05 - 1.4125E+02 1.6019E-04 1.2106E-04 2.0912E-05 1.6648E-05 - 1.5849E+02 1.1355E-04 8.5035E-05 1.3920E-05 1.1070E-05 - 1.7783E+02 8.0316E-05 5.9676E-05 9.2602E-06 7.3541E-06 - 1.9953E+02 5.6483E-05 4.1766E-05 6.2170E-06 4.9129E-06 - 2.2387E+02 3.9925E-05 2.9186E-05 4.0256E-06 3.2057E-06 - 2.5119E+02 2.8209E-05 2.0322E-05 2.6627E-06 2.1171E-06 - 2.8184E+02 1.9777E-05 1.4173E-05 1.7637E-06 1.4109E-06 - 3.1623E+02 1.3949E-05 9.9491E-06 1.1799E-06 9.5554E-07 - 3.5481E+02 9.7808E-06 6.9152E-06 7.7447E-07 6.2868E-07 - 3.9811E+02 6.8429E-06 4.8267E-06 5.1151E-07 4.1949E-07 - 4.4668E+02 4.8137E-06 3.3581E-06 3.4498E-07 2.7961E-07 - 5.0119E+02 3.3816E-06 2.3284E-06 2.3098E-07 1.8329E-07 - 5.6234E+02 2.3599E-06 1.6153E-06 1.5238E-07 1.2465E-07 - 6.3096E+02 1.6469E-06 1.1202E-06 1.0064E-07 8.3352E-08 - 7.0795E+02 1.1473E-06 7.7359E-07 6.8405E-08 5.5660E-08 - 7.9433E+02 8.0364E-07 5.3465E-07 4.5756E-08 3.7505E-08 - 8.9125E+02 5.6063E-07 3.7065E-07 3.0817E-08 2.5311E-08 - 1.0000E+03 3.9016E-07 2.5582E-07 2.0381E-08 1.6410E-08 - 1.1220E+03 2.7051E-07 1.7689E-07 1.3687E-08 1.1031E-08 - 1.2589E+03 1.8772E-07 1.2130E-07 9.0581E-09 7.4036E-09 - 1.4125E+03 1.3090E-07 8.3353E-08 6.1397E-09 4.8959E-09 - 1.5849E+03 9.1098E-08 5.7737E-08 4.2231E-09 3.2408E-09 - 1.7783E+03 6.3003E-08 3.9930E-08 2.7821E-09 2.1490E-09 - 1.9953E+03 4.3617E-08 2.7178E-08 1.8885E-09 1.4305E-09 - 2.2387E+03 3.0211E-08 1.8478E-08 1.2259E-09 9.7648E-10 - 2.5119E+03 2.0768E-08 1.2618E-08 8.1317E-10 6.2832E-10 - 2.8184E+03 1.4182E-08 8.5875E-09 5.3222E-10 4.1806E-10 - 3.1623E+03 9.8222E-09 5.9861E-09 3.7061E-10 2.9051E-10 - 3.5481E+03 6.6587E-09 4.0322E-09 2.4819E-10 1.9628E-10 - 3.9811E+03 4.5506E-09 2.7251E-09 1.6355E-10 1.2751E-10 - 4.4668E+03 3.1167E-09 1.8354E-09 1.1324E-10 8.1816E-11 - 5.0119E+03 2.1315E-09 1.2235E-09 7.8023E-11 5.6830E-11 - 5.6234E+03 1.4257E-09 8.2522E-10 5.3186E-11 3.6854E-11 - 6.3096E+03 9.7011E-10 5.5929E-10 3.3865E-11 2.3518E-11 - 7.0795E+03 6.5841E-10 3.7651E-10 2.1860E-11 1.6229E-11 - 7.9433E+03 4.4101E-10 2.5121E-10 1.3789E-11 1.0578E-11 - 8.9125E+03 2.9277E-10 1.6581E-10 9.4925E-12 6.3717E-12 - 1.0000E+04 1.9732E-10 1.1172E-10 6.6834E-12 4.0476E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1844E+04 3.3362E+04 1.6796E+04 1.3872E+04 - 1.1220E-01 2.6741E+04 2.8031E+04 1.4242E+04 1.1752E+04 - 1.2589E-01 2.2242E+04 2.3155E+04 1.1971E+04 9.7630E+03 - 1.4125E-01 1.8346E+04 1.9069E+04 9.9892E+03 7.9812E+03 - 1.5849E-01 1.4932E+04 1.5694E+04 8.2097E+03 6.5183E+03 - 1.7783E-01 1.2037E+04 1.2706E+04 6.7339E+03 5.2931E+03 - 1.9953E-01 9.6453E+03 1.0109E+04 5.4770E+03 4.2132E+03 - 2.2387E-01 7.5904E+03 7.9754E+03 4.4056E+03 3.3142E+03 - 2.5119E-01 5.9162E+03 6.2309E+03 3.5371E+03 2.6028E+03 - 2.8184E-01 4.5794E+03 4.8561E+03 2.8004E+03 2.0301E+03 - 3.1623E-01 3.4986E+03 3.7553E+03 2.1991E+03 1.5772E+03 - 3.5481E-01 2.6709E+03 2.8541E+03 1.7038E+03 1.2095E+03 - 3.9811E-01 2.0080E+03 2.1798E+03 1.2955E+03 9.1077E+02 - 4.4668E-01 1.5060E+03 1.6582E+03 9.9325E+02 6.8641E+02 - 5.0119E-01 1.1455E+03 1.2419E+03 7.5092E+02 5.1764E+02 - 5.6234E-01 8.5566E+02 9.3888E+02 5.7247E+02 3.8494E+02 - 6.3096E-01 6.3495E+02 6.9388E+02 4.3003E+02 2.8433E+02 - 7.0795E-01 4.7240E+02 5.1043E+02 3.1740E+02 2.1075E+02 - 7.9433E-01 3.5499E+02 3.8188E+02 2.3861E+02 1.5766E+02 - 8.9125E-01 2.6642E+02 2.8508E+02 1.7541E+02 1.1878E+02 - 1.0000E+00 1.9557E+02 2.1015E+02 1.3159E+02 8.6426E+01 - 1.1220E+00 1.4538E+02 1.5695E+02 9.8123E+01 6.4205E+01 - 1.2589E+00 1.0891E+02 1.1630E+02 7.2933E+01 4.7143E+01 - 1.4125E+00 8.1363E+01 8.6177E+01 5.4134E+01 3.4648E+01 - 1.5849E+00 6.0445E+01 6.3739E+01 3.9825E+01 2.5910E+01 - 1.7783E+00 4.4852E+01 4.6666E+01 2.9190E+01 1.9270E+01 - 1.9953E+00 3.2808E+01 3.4353E+01 2.1331E+01 1.4213E+01 - 2.2387E+00 2.4156E+01 2.5239E+01 1.5470E+01 1.0627E+01 - 2.5119E+00 1.7910E+01 1.8436E+01 1.1311E+01 7.8751E+00 - 2.8184E+00 1.3059E+01 1.3300E+01 8.2346E+00 5.6622E+00 - 3.1623E+00 9.7360E+00 9.7393E+00 5.8985E+00 4.0256E+00 - 3.5481E+00 7.1186E+00 7.0381E+00 4.2526E+00 2.8850E+00 - 3.9811E+00 5.1677E+00 5.0766E+00 3.0563E+00 2.0563E+00 - 4.4668E+00 3.7596E+00 3.6568E+00 2.1915E+00 1.4926E+00 - 5.0119E+00 2.7595E+00 2.6599E+00 1.5333E+00 1.0816E+00 - 5.6234E+00 1.9705E+00 1.9227E+00 1.0969E+00 7.7696E-01 - 6.3096E+00 1.4088E+00 1.3637E+00 7.8565E-01 5.5788E-01 - 7.0795E+00 1.0303E+00 9.6664E-01 5.4709E-01 3.8832E-01 - 7.9433E+00 7.5081E-01 6.8140E-01 3.8075E-01 2.7048E-01 - 8.9125E+00 5.4380E-01 4.8218E-01 2.5844E-01 1.9159E-01 - 1.0000E+01 3.8617E-01 3.5209E-01 1.8168E-01 1.3532E-01 - 1.1220E+01 2.7368E-01 2.4936E-01 1.2598E-01 9.2545E-02 - 1.2589E+01 1.9410E-01 1.7745E-01 8.7221E-02 6.3176E-02 - 1.4125E+01 1.3902E-01 1.2670E-01 5.8468E-02 4.3133E-02 - 1.5849E+01 1.0020E-01 8.8978E-02 3.9732E-02 3.0633E-02 - 1.7783E+01 7.1985E-02 6.2209E-02 2.7307E-02 2.1417E-02 - 1.9953E+01 5.1593E-02 4.4352E-02 1.8414E-02 1.4200E-02 - 2.2387E+01 3.7043E-02 3.1898E-02 1.2997E-02 9.6610E-03 - 2.5119E+01 2.6765E-02 2.3377E-02 8.9180E-03 6.8277E-03 - 2.8184E+01 1.8817E-02 1.6196E-02 5.6462E-03 4.6030E-03 - 3.1623E+01 1.3361E-02 1.1262E-02 4.0688E-03 3.0938E-03 - 3.5481E+01 9.5249E-03 7.9777E-03 2.7414E-03 2.0974E-03 - 3.9811E+01 6.7954E-03 5.6590E-03 1.8397E-03 1.4145E-03 - 4.4668E+01 4.8519E-03 4.0086E-03 1.2333E-03 9.5281E-04 - 5.0119E+01 3.4613E-03 2.8296E-03 8.2963E-04 6.3933E-04 - 5.6234E+01 2.4652E-03 1.9962E-03 5.5556E-04 4.2749E-04 - 6.3096E+01 1.7588E-03 1.4116E-03 3.6703E-04 2.8774E-04 - 7.0795E+01 1.2546E-03 9.9967E-04 2.4394E-04 1.9374E-04 - 7.9433E+01 8.9198E-04 7.0383E-04 1.6433E-04 1.2657E-04 - 8.9125E+01 6.3622E-04 4.9803E-04 1.1038E-04 8.3724E-05 - 1.0000E+02 4.5120E-04 3.4918E-04 7.2307E-05 5.6951E-05 - 1.1220E+02 3.2019E-04 2.4522E-04 4.7801E-05 3.7715E-05 - 1.2589E+02 2.2703E-04 1.7261E-04 3.1842E-05 2.5122E-05 - 1.4125E+02 1.6088E-04 1.2141E-04 2.1112E-05 1.6673E-05 - 1.5849E+02 1.1329E-04 8.5435E-05 1.3773E-05 1.1080E-05 - 1.7783E+02 8.0156E-05 5.9738E-05 9.0989E-06 7.4051E-06 - 1.9953E+02 5.7006E-05 4.1830E-05 6.0560E-06 4.8976E-06 - 2.2387E+02 3.9986E-05 2.9316E-05 4.0423E-06 3.2137E-06 - 2.5119E+02 2.8043E-05 2.0550E-05 2.6997E-06 2.1378E-06 - 2.8184E+02 1.9734E-05 1.4391E-05 1.8034E-06 1.4269E-06 - 3.1623E+02 1.3921E-05 9.9646E-06 1.1859E-06 9.4895E-07 - 3.5481E+02 9.7776E-06 6.9353E-06 7.7647E-07 6.3264E-07 - 3.9811E+02 6.8635E-06 4.8174E-06 5.1965E-07 4.1743E-07 - 4.4668E+02 4.8108E-06 3.3455E-06 3.4354E-07 2.7576E-07 - 5.0119E+02 3.3721E-06 2.3283E-06 2.2606E-07 1.8189E-07 - 5.6234E+02 2.3680E-06 1.6141E-06 1.5386E-07 1.2368E-07 - 6.3096E+02 1.6543E-06 1.1166E-06 1.0320E-07 8.2955E-08 - 7.0795E+02 1.1584E-06 7.7620E-07 6.9102E-08 5.5255E-08 - 7.9433E+02 8.0533E-07 5.3732E-07 4.7162E-08 3.6851E-08 - 8.9125E+02 5.5815E-07 3.7036E-07 3.1320E-08 2.4772E-08 - 1.0000E+03 3.8876E-07 2.5507E-07 2.0669E-08 1.6169E-08 - 1.1220E+03 2.7027E-07 1.7625E-07 1.3732E-08 1.0903E-08 - 1.2589E+03 1.8776E-07 1.2207E-07 9.1478E-09 7.4368E-09 - 1.4125E+03 1.3090E-07 8.4205E-08 6.0945E-09 4.8903E-09 - 1.5849E+03 9.1379E-08 5.7008E-08 4.1319E-09 3.1630E-09 - 1.7783E+03 6.3090E-08 3.8881E-08 2.7934E-09 2.1208E-09 - 1.9953E+03 4.3544E-08 2.7018E-08 1.8691E-09 1.4437E-09 - 2.2387E+03 2.9842E-08 1.8400E-08 1.2347E-09 9.5530E-10 - 2.5119E+03 2.0566E-08 1.2562E-08 8.2030E-10 6.3869E-10 - 2.8184E+03 1.4173E-08 8.5733E-09 5.3720E-10 4.3095E-10 - 3.1623E+03 9.8797E-09 5.9037E-09 3.7485E-10 2.8256E-10 - 3.5481E+03 6.7014E-09 3.9809E-09 2.5438E-10 1.8307E-10 - 3.9811E+03 4.5579E-09 2.6972E-09 1.7014E-10 1.2226E-10 - 4.4668E+03 3.0929E-09 1.8292E-09 1.0909E-10 8.2006E-11 - 5.0119E+03 2.1006E-09 1.2341E-09 7.0738E-11 5.6444E-11 - 5.6234E+03 1.4376E-09 8.3692E-10 4.6795E-11 3.8358E-11 - 6.3096E+03 9.7266E-10 5.6179E-10 3.2772E-11 2.3401E-11 - 7.0795E+03 6.5762E-10 3.7505E-10 2.1896E-11 1.6170E-11 - 7.9433E+03 4.4124E-10 2.5015E-10 1.4471E-11 1.0512E-11 - 8.9125E+03 2.9552E-10 1.6583E-10 9.5690E-12 6.9271E-12 - 1.0000E+04 1.9735E-10 1.0931E-10 6.2760E-12 4.7433E-12 -average flux in [cosZ = 0.10 -- 0.20, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1609E+04 3.2634E+04 1.6202E+04 1.3831E+04 - 1.1220E-01 2.6320E+04 2.7086E+04 1.3720E+04 1.1707E+04 - 1.2589E-01 2.1828E+04 2.2443E+04 1.1507E+04 9.7078E+03 - 1.4125E-01 1.8017E+04 1.8567E+04 9.5986E+03 7.9206E+03 - 1.5849E-01 1.4676E+04 1.5142E+04 7.9160E+03 6.4656E+03 - 1.7783E-01 1.1861E+04 1.2248E+04 6.4821E+03 5.2036E+03 - 1.9953E-01 9.4732E+03 9.7865E+03 5.2685E+03 4.1310E+03 - 2.2387E-01 7.4741E+03 7.7131E+03 4.2090E+03 3.2966E+03 - 2.5119E-01 5.7955E+03 6.0260E+03 3.3644E+03 2.5698E+03 - 2.8184E-01 4.4712E+03 4.6734E+03 2.6622E+03 1.9879E+03 - 3.1623E-01 3.4345E+03 3.5978E+03 2.0610E+03 1.5513E+03 - 3.5481E-01 2.6214E+03 2.7601E+03 1.5961E+03 1.1869E+03 - 3.9811E-01 1.9853E+03 2.1000E+03 1.2415E+03 8.9897E+02 - 4.4668E-01 1.4983E+03 1.5764E+03 9.4013E+02 6.8346E+02 - 5.0119E-01 1.1258E+03 1.1843E+03 7.1038E+02 5.1874E+02 - 5.6234E-01 8.4418E+02 8.8489E+02 5.4039E+02 3.8574E+02 - 6.3096E-01 6.3680E+02 6.6227E+02 4.1016E+02 2.8324E+02 - 7.0795E-01 4.7073E+02 5.0031E+02 3.0992E+02 2.1256E+02 - 7.9433E-01 3.4780E+02 3.7207E+02 2.2920E+02 1.6324E+02 - 8.9125E-01 2.6066E+02 2.7656E+02 1.7009E+02 1.2048E+02 - 1.0000E+00 1.9349E+02 2.0542E+02 1.2738E+02 8.6843E+01 - 1.1220E+00 1.4458E+02 1.5207E+02 9.4806E+01 6.4597E+01 - 1.2589E+00 1.0843E+02 1.1313E+02 7.1603E+01 4.8354E+01 - 1.4125E+00 8.1249E+01 8.4800E+01 5.2103E+01 3.6392E+01 - 1.5849E+00 6.1132E+01 6.2039E+01 3.7507E+01 2.6996E+01 - 1.7783E+00 4.5030E+01 4.5662E+01 2.7972E+01 1.9867E+01 - 1.9953E+00 3.2794E+01 3.3308E+01 2.0529E+01 1.4449E+01 - 2.2387E+00 2.4349E+01 2.4395E+01 1.5157E+01 1.0589E+01 - 2.5119E+00 1.8018E+01 1.7665E+01 1.1172E+01 7.7370E+00 - 2.8184E+00 1.3165E+01 1.3045E+01 7.8132E+00 5.6386E+00 - 3.1623E+00 9.6438E+00 9.6522E+00 5.7709E+00 4.1259E+00 - 3.5481E+00 7.0409E+00 6.9498E+00 4.1649E+00 2.9096E+00 - 3.9811E+00 5.1495E+00 5.0350E+00 3.0044E+00 2.0836E+00 - 4.4668E+00 3.7979E+00 3.6632E+00 2.1410E+00 1.4787E+00 - 5.0119E+00 2.7794E+00 2.6044E+00 1.5090E+00 1.0567E+00 - 5.6234E+00 1.9704E+00 1.8340E+00 1.0764E+00 7.6130E-01 - 6.3096E+00 1.3902E+00 1.3324E+00 7.6557E-01 5.2948E-01 - 7.0795E+00 1.0032E+00 9.6476E-01 5.2574E-01 3.6967E-01 - 7.9433E+00 7.2623E-01 6.8434E-01 3.6192E-01 2.6442E-01 - 8.9125E+00 5.2068E-01 4.8060E-01 2.5362E-01 1.8971E-01 - 1.0000E+01 3.8470E-01 3.5693E-01 1.8324E-01 1.3614E-01 - 1.1220E+01 2.7473E-01 2.5211E-01 1.2579E-01 9.6378E-02 - 1.2589E+01 1.9712E-01 1.7865E-01 8.4784E-02 6.6034E-02 - 1.4125E+01 1.4362E-01 1.2845E-01 5.8024E-02 4.4633E-02 - 1.5849E+01 1.0400E-01 9.0946E-02 4.0418E-02 3.1670E-02 - 1.7783E+01 7.3105E-02 6.4710E-02 2.8276E-02 2.1684E-02 - 1.9953E+01 5.2651E-02 4.6046E-02 1.9382E-02 1.5024E-02 - 2.2387E+01 3.7913E-02 3.1739E-02 1.3135E-02 1.0364E-02 - 2.5119E+01 2.7545E-02 2.2233E-02 9.1367E-03 6.6614E-03 - 2.8184E+01 2.0203E-02 1.6770E-02 6.0822E-03 4.5566E-03 - 3.1623E+01 1.3395E-02 1.1283E-02 4.0647E-03 3.0868E-03 - 3.5481E+01 9.5595E-03 7.9944E-03 2.7423E-03 2.0958E-03 - 3.9811E+01 6.8341E-03 5.6524E-03 1.8375E-03 1.4092E-03 - 4.4668E+01 4.8911E-03 3.9928E-03 1.2325E-03 9.4930E-04 - 5.0119E+01 3.4826E-03 2.8367E-03 8.3046E-04 6.3930E-04 - 5.6234E+01 2.4686E-03 2.0067E-03 5.5602E-04 4.3139E-04 - 6.3096E+01 1.7653E-03 1.4174E-03 3.7183E-04 2.8881E-04 - 7.0795E+01 1.2655E-03 1.0032E-03 2.4838E-04 1.9136E-04 - 7.9433E+01 8.9598E-04 7.0723E-04 1.6516E-04 1.2787E-04 - 8.9125E+01 6.3386E-04 5.0197E-04 1.0971E-04 8.6074E-05 - 1.0000E+02 4.5110E-04 3.4982E-04 7.2869E-05 5.6392E-05 - 1.1220E+02 3.1899E-04 2.4568E-04 4.8210E-05 3.7578E-05 - 1.2589E+02 2.2638E-04 1.7259E-04 3.1814E-05 2.5275E-05 - 1.4125E+02 1.6054E-04 1.2172E-04 2.0905E-05 1.6851E-05 - 1.5849E+02 1.1340E-04 8.5233E-05 1.3962E-05 1.1056E-05 - 1.7783E+02 8.0181E-05 5.9474E-05 9.2405E-06 7.3099E-06 - 1.9953E+02 5.6702E-05 4.1931E-05 6.0776E-06 4.8859E-06 - 2.2387E+02 3.9930E-05 2.9415E-05 4.0660E-06 3.2499E-06 - 2.5119E+02 2.8255E-05 2.0324E-05 2.7055E-06 2.1707E-06 - 2.8184E+02 1.9902E-05 1.4237E-05 1.7984E-06 1.4403E-06 - 3.1623E+02 1.3934E-05 9.9268E-06 1.1681E-06 9.5237E-07 - 3.5481E+02 9.7791E-06 6.9091E-06 7.8077E-07 6.3164E-07 - 3.9811E+02 6.8718E-06 4.8083E-06 5.1994E-07 4.1570E-07 - 4.4668E+02 4.8132E-06 3.3504E-06 3.4880E-07 2.7983E-07 - 5.0119E+02 3.3640E-06 2.3342E-06 2.2976E-07 1.8956E-07 - 5.6234E+02 2.3605E-06 1.6140E-06 1.5277E-07 1.2335E-07 - 6.3096E+02 1.6451E-06 1.1171E-06 1.0322E-07 8.2322E-08 - 7.0795E+02 1.1513E-06 7.7548E-07 6.9538E-08 5.5342E-08 - 7.9433E+02 8.0471E-07 5.3773E-07 4.6288E-08 3.6584E-08 - 8.9125E+02 5.5946E-07 3.7186E-07 3.0850E-08 2.4251E-08 - 1.0000E+03 3.9118E-07 2.5495E-07 2.0637E-08 1.6397E-08 - 1.1220E+03 2.7096E-07 1.7604E-07 1.3442E-08 1.0997E-08 - 1.2589E+03 1.8929E-07 1.2181E-07 9.1391E-09 7.2357E-09 - 1.4125E+03 1.3152E-07 8.4301E-08 6.1515E-09 4.8603E-09 - 1.5849E+03 9.0553E-08 5.7904E-08 4.0021E-09 3.2546E-09 - 1.7783E+03 6.3005E-08 3.9747E-08 2.7032E-09 2.2391E-09 - 1.9953E+03 4.3681E-08 2.7027E-08 1.9097E-09 1.4233E-09 - 2.2387E+03 3.0020E-08 1.8496E-08 1.2924E-09 9.2691E-10 - 2.5119E+03 2.0749E-08 1.2598E-08 8.4090E-10 6.4481E-10 - 2.8184E+03 1.4369E-08 8.6346E-09 5.4132E-10 4.3781E-10 - 3.1623E+03 9.8769E-09 5.9586E-09 3.7253E-10 2.8692E-10 - 3.5481E+03 6.6779E-09 4.0088E-09 2.5282E-10 1.9015E-10 - 3.9811E+03 4.5519E-09 2.7148E-09 1.7035E-10 1.2320E-10 - 4.4668E+03 3.1063E-09 1.8297E-09 1.1007E-10 8.0766E-11 - 5.0119E+03 2.1205E-09 1.2361E-09 7.3629E-11 5.5609E-11 - 5.6234E+03 1.4135E-09 8.3045E-10 4.7851E-11 3.6628E-11 - 6.3096E+03 9.6739E-10 5.6254E-10 3.2377E-11 2.4248E-11 - 7.0795E+03 6.5481E-10 3.8042E-10 2.1054E-11 1.5896E-11 - 7.9433E+03 4.4180E-10 2.5104E-10 1.4149E-11 1.0783E-11 - 8.9125E+03 2.9410E-10 1.6521E-10 9.7001E-12 6.5409E-12 - 1.0000E+04 1.9658E-10 1.0985E-10 6.4226E-12 4.2541E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.2820E+04 5.4346E+04 2.6515E+04 2.3845E+04 - 1.1220E-01 4.3489E+04 4.4726E+04 2.1943E+04 1.9723E+04 - 1.2589E-01 3.5531E+04 3.6252E+04 1.8078E+04 1.6080E+04 - 1.4125E-01 2.8645E+04 2.9102E+04 1.4704E+04 1.2881E+04 - 1.5849E-01 2.2904E+04 2.3139E+04 1.1792E+04 1.0274E+04 - 1.7783E-01 1.8028E+04 1.8142E+04 9.4021E+03 8.1626E+03 - 1.9953E-01 1.4068E+04 1.4179E+04 7.5179E+03 6.3812E+03 - 2.2387E-01 1.0787E+04 1.0994E+04 5.9263E+03 5.0166E+03 - 2.5119E-01 8.3046E+03 8.3185E+03 4.5946E+03 3.8492E+03 - 2.8184E-01 6.3044E+03 6.2478E+03 3.5581E+03 2.9371E+03 - 3.1623E-01 4.6501E+03 4.7159E+03 2.6900E+03 2.2246E+03 - 3.5481E-01 3.4762E+03 3.4877E+03 1.9974E+03 1.6439E+03 - 3.9811E-01 2.5817E+03 2.5810E+03 1.5133E+03 1.2157E+03 - 4.4668E-01 1.8746E+03 1.9060E+03 1.1477E+03 8.9491E+02 - 5.0119E-01 1.3629E+03 1.4106E+03 8.5557E+02 6.8430E+02 - 5.6234E-01 1.0054E+03 1.0261E+03 6.2282E+02 5.0907E+02 - 6.3096E-01 7.5476E+02 7.4700E+02 4.5994E+02 3.5640E+02 - 7.0795E-01 5.5185E+02 5.4492E+02 3.3766E+02 2.5719E+02 - 7.9433E-01 4.0538E+02 4.0624E+02 2.4828E+02 1.8839E+02 - 8.9125E-01 3.0254E+02 3.0257E+02 1.8622E+02 1.4164E+02 - 1.0000E+00 2.2015E+02 2.2175E+02 1.3727E+02 1.0357E+02 - 1.1220E+00 1.6411E+02 1.6337E+02 1.0189E+02 7.5641E+01 - 1.2589E+00 1.2222E+02 1.2039E+02 7.4252E+01 5.5182E+01 - 1.4125E+00 8.8650E+01 8.8357E+01 5.5409E+01 4.0194E+01 - 1.5849E+00 6.5368E+01 6.5424E+01 4.0852E+01 3.0187E+01 - 1.7783E+00 4.7887E+01 4.8973E+01 2.9839E+01 2.2605E+01 - 1.9953E+00 3.4719E+01 3.5018E+01 2.1913E+01 1.6023E+01 - 2.2387E+00 2.5788E+01 2.5695E+01 1.5793E+01 1.1662E+01 - 2.5119E+00 1.8950E+01 1.9607E+01 1.1718E+01 8.8107E+00 - 2.8184E+00 1.4472E+01 1.4107E+01 8.8671E+00 6.4889E+00 - 3.1623E+00 1.0627E+01 1.0201E+01 6.5239E+00 4.6828E+00 - 3.5481E+00 7.5698E+00 7.4888E+00 4.7397E+00 3.4045E+00 - 3.9811E+00 5.5556E+00 5.5082E+00 3.4628E+00 2.4758E+00 - 4.4668E+00 4.0306E+00 3.9699E+00 2.5196E+00 1.8035E+00 - 5.0119E+00 2.9751E+00 2.9046E+00 1.7834E+00 1.2427E+00 - 5.6234E+00 2.1993E+00 2.1200E+00 1.2974E+00 8.9167E-01 - 6.3096E+00 1.5548E+00 1.5410E+00 9.5160E-01 6.6979E-01 - 7.0795E+00 1.1336E+00 1.0910E+00 6.8697E-01 4.8357E-01 - 7.9433E+00 8.1080E-01 7.8581E-01 4.8883E-01 3.3968E-01 - 8.9125E+00 5.8081E-01 5.9081E-01 3.4092E-01 2.5030E-01 - 1.0000E+01 4.1739E-01 4.0860E-01 2.3198E-01 1.7366E-01 - 1.1220E+01 3.0357E-01 2.9157E-01 1.6557E-01 1.2702E-01 - 1.2589E+01 2.1805E-01 2.0838E-01 1.1779E-01 8.9707E-02 - 1.4125E+01 1.5876E-01 1.5029E-01 8.0726E-02 6.0374E-02 - 1.5849E+01 1.1414E-01 1.0814E-01 5.7173E-02 4.2322E-02 - 1.7783E+01 8.2508E-02 7.6625E-02 4.2158E-02 2.8124E-02 - 1.9953E+01 6.0680E-02 5.4067E-02 2.8993E-02 2.1084E-02 - 2.2387E+01 4.3408E-02 3.8547E-02 2.0941E-02 1.5144E-02 - 2.5119E+01 3.0138E-02 2.7312E-02 1.5247E-02 1.0381E-02 - 2.8184E+01 2.1664E-02 1.8524E-02 9.2107E-03 7.1454E-03 - 3.1623E+01 1.5688E-02 1.4132E-02 6.6036E-03 5.0009E-03 - 3.5481E+01 1.1241E-02 1.0051E-02 4.5495E-03 3.4566E-03 - 3.9811E+01 8.0559E-03 7.1446E-03 3.1361E-03 2.3939E-03 - 4.4668E+01 5.7503E-03 5.0549E-03 2.1439E-03 1.6427E-03 - 5.0119E+01 4.1003E-03 3.5849E-03 1.4516E-03 1.1212E-03 - 5.6234E+01 2.9383E-03 2.5421E-03 9.8703E-04 7.6243E-04 - 6.3096E+01 2.0980E-03 1.7971E-03 6.7353E-04 5.1537E-04 - 7.0795E+01 1.4917E-03 1.2671E-03 4.5466E-04 3.4993E-04 - 7.9433E+01 1.0630E-03 8.9656E-04 3.0526E-04 2.3745E-04 - 8.9125E+01 7.5969E-04 6.3495E-04 2.0561E-04 1.6038E-04 - 1.0000E+02 5.3933E-04 4.4496E-04 1.3851E-04 1.0813E-04 - 1.1220E+02 3.8347E-04 3.1374E-04 9.2807E-05 7.1832E-05 - 1.2589E+02 2.7352E-04 2.2081E-04 6.1420E-05 4.7991E-05 - 1.4125E+02 1.9404E-04 1.5519E-04 4.0858E-05 3.2229E-05 - 1.5849E+02 1.3750E-04 1.0916E-04 2.7308E-05 2.1514E-05 - 1.7783E+02 9.7399E-05 7.6383E-05 1.8126E-05 1.4385E-05 - 1.9953E+02 6.8651E-05 5.3538E-05 1.2102E-05 9.4211E-06 - 2.2387E+02 4.8562E-05 3.7606E-05 7.9092E-06 6.1867E-06 - 2.5119E+02 3.4202E-05 2.6189E-05 5.1658E-06 4.0703E-06 - 2.8184E+02 2.4160E-05 1.8247E-05 3.4952E-06 2.7176E-06 - 3.1623E+02 1.7020E-05 1.2779E-05 2.2856E-06 1.8089E-06 - 3.5481E+02 1.1956E-05 8.9126E-06 1.4940E-06 1.1931E-06 - 3.9811E+02 8.4317E-06 6.1972E-06 9.8511E-07 7.7911E-07 - 4.4668E+02 5.9337E-06 4.3129E-06 6.5281E-07 5.0851E-07 - 5.0119E+02 4.1476E-06 2.9997E-06 4.2696E-07 3.3681E-07 - 5.6234E+02 2.9062E-06 2.0768E-06 2.7905E-07 2.2131E-07 - 6.3096E+02 2.0295E-06 1.4369E-06 1.8437E-07 1.4736E-07 - 7.0795E+02 1.4258E-06 9.9449E-07 1.2050E-07 9.6641E-08 - 7.9433E+02 9.9744E-07 6.8919E-07 7.8356E-08 6.2592E-08 - 8.9125E+02 6.9504E-07 4.7969E-07 5.1470E-08 4.1374E-08 - 1.0000E+03 4.8425E-07 3.2870E-07 3.4422E-08 2.7807E-08 - 1.1220E+03 3.3685E-07 2.2699E-07 2.3025E-08 1.8553E-08 - 1.2589E+03 2.3466E-07 1.5725E-07 1.5225E-08 1.2253E-08 - 1.4125E+03 1.6403E-07 1.0800E-07 9.9172E-09 7.8728E-09 - 1.5849E+03 1.1336E-07 7.4251E-08 6.4371E-09 5.1858E-09 - 1.7783E+03 7.9015E-08 5.1124E-08 4.3303E-09 3.5571E-09 - 1.9953E+03 5.5049E-08 3.5567E-08 2.9632E-09 2.2752E-09 - 2.2387E+03 3.8069E-08 2.4149E-08 1.9234E-09 1.4960E-09 - 2.5119E+03 2.6531E-08 1.6520E-08 1.2903E-09 1.0028E-09 - 2.8184E+03 1.8359E-08 1.1341E-08 8.4665E-10 6.5437E-10 - 3.1623E+03 1.2657E-08 7.8005E-09 5.6167E-10 4.2834E-10 - 3.5481E+03 8.6686E-09 5.3102E-09 3.7756E-10 2.8491E-10 - 3.9811E+03 5.9868E-09 3.6305E-09 2.5279E-10 1.8933E-10 - 4.4668E+03 4.1145E-09 2.4698E-09 1.7022E-10 1.2604E-10 - 5.0119E+03 2.8122E-09 1.6729E-09 1.1781E-10 8.3881E-11 - 5.6234E+03 1.9067E-09 1.1311E-09 7.5472E-11 5.5090E-11 - 6.3096E+03 1.3054E-09 7.6641E-10 5.0793E-11 3.7952E-11 - 7.0795E+03 8.8500E-10 5.1649E-10 3.3436E-11 2.5038E-11 - 7.9433E+03 6.0460E-10 3.5016E-10 2.1307E-11 1.6080E-11 - 8.9125E+03 4.1266E-10 2.3439E-10 1.4062E-11 1.0295E-11 - 1.0000E+04 2.7731E-10 1.5742E-10 9.3962E-12 6.7683E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.2140E+04 5.2568E+04 2.5223E+04 2.3785E+04 - 1.1220E-01 4.2689E+04 4.3112E+04 2.1036E+04 1.9567E+04 - 1.2589E-01 3.4668E+04 3.4748E+04 1.7089E+04 1.5894E+04 - 1.4125E-01 2.8059E+04 2.7748E+04 1.4020E+04 1.2881E+04 - 1.5849E-01 2.2499E+04 2.1955E+04 1.1293E+04 1.0250E+04 - 1.7783E-01 1.7556E+04 1.7230E+04 8.8581E+03 8.0658E+03 - 1.9953E-01 1.3641E+04 1.3442E+04 6.9826E+03 6.3081E+03 - 2.2387E-01 1.0550E+04 1.0283E+04 5.4697E+03 4.8698E+03 - 2.5119E-01 7.9831E+03 7.8065E+03 4.2123E+03 3.7634E+03 - 2.8184E-01 5.9698E+03 5.8386E+03 3.1843E+03 2.8697E+03 - 3.1623E-01 4.4304E+03 4.3123E+03 2.4294E+03 2.1686E+03 - 3.5481E-01 3.2923E+03 3.1642E+03 1.8487E+03 1.6372E+03 - 3.9811E-01 2.4324E+03 2.3177E+03 1.3507E+03 1.2259E+03 - 4.4668E-01 1.7714E+03 1.7022E+03 9.9105E+02 9.1184E+02 - 5.0119E-01 1.2968E+03 1.2586E+03 7.3063E+02 6.5265E+02 - 5.6234E-01 9.7667E+02 9.0665E+02 5.2307E+02 4.6369E+02 - 6.3096E-01 7.3276E+02 6.5240E+02 3.8342E+02 3.4864E+02 - 7.0795E-01 5.4021E+02 4.9177E+02 2.9755E+02 2.6369E+02 - 7.9433E-01 3.9316E+02 3.5542E+02 2.1728E+02 1.8887E+02 - 8.9125E-01 2.8194E+02 2.5872E+02 1.5455E+02 1.3661E+02 - 1.0000E+00 2.0857E+02 1.9440E+02 1.1629E+02 1.0603E+02 - 1.1220E+00 1.5442E+02 1.4226E+02 8.4513E+01 7.4636E+01 - 1.2589E+00 1.1721E+02 1.0344E+02 6.2144E+01 5.4828E+01 - 1.4125E+00 8.7209E+01 7.5657E+01 4.6939E+01 4.1392E+01 - 1.5849E+00 6.4684E+01 5.6586E+01 3.5068E+01 3.0398E+01 - 1.7783E+00 4.8950E+01 4.2414E+01 2.5568E+01 2.2853E+01 - 1.9953E+00 3.5785E+01 3.1559E+01 1.8378E+01 1.6792E+01 - 2.2387E+00 2.6003E+01 2.3981E+01 1.4168E+01 1.1785E+01 - 2.5119E+00 1.8977E+01 1.7794E+01 1.0774E+01 8.7229E+00 - 2.8184E+00 1.4005E+01 1.2688E+01 7.5894E+00 6.5115E+00 - 3.1623E+00 1.0343E+01 9.4479E+00 5.7661E+00 4.8856E+00 - 3.5481E+00 7.6990E+00 6.9300E+00 4.3078E+00 3.5589E+00 - 3.9811E+00 5.6471E+00 5.1549E+00 3.1404E+00 2.6410E+00 - 4.4668E+00 4.1101E+00 3.7666E+00 2.3448E+00 1.9408E+00 - 5.0119E+00 3.0324E+00 2.7012E+00 1.6734E+00 1.3781E+00 - 5.6234E+00 2.2002E+00 2.0004E+00 1.2052E+00 9.6429E-01 - 6.3096E+00 1.6248E+00 1.4710E+00 8.9361E-01 6.6702E-01 - 7.0795E+00 1.1554E+00 1.0688E+00 6.4504E-01 4.8055E-01 - 7.9433E+00 8.1423E-01 7.5190E-01 4.5684E-01 3.4487E-01 - 8.9125E+00 5.9619E-01 5.5218E-01 3.0813E-01 2.5121E-01 - 1.0000E+01 4.3127E-01 4.0236E-01 2.2793E-01 1.7925E-01 - 1.1220E+01 3.0707E-01 2.8646E-01 1.6419E-01 1.2642E-01 - 1.2589E+01 2.2221E-01 2.0445E-01 1.1529E-01 8.7299E-02 - 1.4125E+01 1.5797E-01 1.5119E-01 8.0557E-02 6.0627E-02 - 1.5849E+01 1.1515E-01 1.0923E-01 5.7193E-02 4.2657E-02 - 1.7783E+01 8.5312E-02 7.5822E-02 4.1798E-02 3.0338E-02 - 1.9953E+01 6.0120E-02 5.2758E-02 2.7428E-02 2.1051E-02 - 2.2387E+01 4.2372E-02 3.9301E-02 1.8884E-02 1.5009E-02 - 2.5119E+01 3.0745E-02 2.8529E-02 1.3860E-02 1.0948E-02 - 2.8184E+01 2.2059E-02 1.9548E-02 9.3511E-03 7.3234E-03 - 3.1623E+01 1.5691E-02 1.4159E-02 6.6407E-03 5.0252E-03 - 3.5481E+01 1.1256E-02 1.0055E-02 4.5633E-03 3.4741E-03 - 3.9811E+01 8.0465E-03 7.1411E-03 3.1255E-03 2.3932E-03 - 4.4668E+01 5.7548E-03 5.0755E-03 2.1414E-03 1.6344E-03 - 5.0119E+01 4.1270E-03 3.6058E-03 1.4570E-03 1.1140E-03 - 5.6234E+01 2.9474E-03 2.5585E-03 9.9167E-04 7.6372E-04 - 6.3096E+01 2.1017E-03 1.8039E-03 6.7447E-04 5.2074E-04 - 7.0795E+01 1.4927E-03 1.2733E-03 4.5666E-04 3.5314E-04 - 7.9433E+01 1.0667E-03 8.9872E-04 3.0782E-04 2.3983E-04 - 8.9125E+01 7.6563E-04 6.3079E-04 2.0554E-04 1.6169E-04 - 1.0000E+02 5.3928E-04 4.4557E-04 1.3872E-04 1.0778E-04 - 1.1220E+02 3.8365E-04 3.1405E-04 9.2660E-05 7.2038E-05 - 1.2589E+02 2.7225E-04 2.2120E-04 6.1780E-05 4.8247E-05 - 1.4125E+02 1.9339E-04 1.5501E-04 4.1456E-05 3.2311E-05 - 1.5849E+02 1.3758E-04 1.0855E-04 2.7621E-05 2.1252E-05 - 1.7783E+02 9.7387E-05 7.6479E-05 1.8286E-05 1.4106E-05 - 1.9953E+02 6.8422E-05 5.3551E-05 1.1992E-05 9.4843E-06 - 2.2387E+02 4.8246E-05 3.7411E-05 7.8648E-06 6.2637E-06 - 2.5119E+02 3.4267E-05 2.6155E-05 5.1751E-06 4.1398E-06 - 2.8184E+02 2.4273E-05 1.8074E-05 3.4195E-06 2.7581E-06 - 3.1623E+02 1.7037E-05 1.2769E-05 2.2740E-06 1.7970E-06 - 3.5481E+02 1.1978E-05 8.8882E-06 1.4930E-06 1.1825E-06 - 3.9811E+02 8.4168E-06 6.1863E-06 9.9028E-07 7.8266E-07 - 4.4668E+02 5.9159E-06 4.3078E-06 6.4241E-07 5.1314E-07 - 5.0119E+02 4.1540E-06 2.9965E-06 4.1566E-07 3.4191E-07 - 5.6234E+02 2.9110E-06 2.0827E-06 2.8188E-07 2.2396E-07 - 6.3096E+02 2.0349E-06 1.4394E-06 1.8536E-07 1.4694E-07 - 7.0795E+02 1.4214E-06 9.9697E-07 1.2117E-07 9.6795E-08 - 7.9433E+02 9.9702E-07 6.9213E-07 7.9467E-08 6.3929E-08 - 8.9125E+02 6.9647E-07 4.8231E-07 5.2108E-08 4.2250E-08 - 1.0000E+03 4.8351E-07 3.3031E-07 3.4837E-08 2.7678E-08 - 1.1220E+03 3.3657E-07 2.2689E-07 2.2985E-08 1.8157E-08 - 1.2589E+03 2.3640E-07 1.5769E-07 1.5128E-08 1.2219E-08 - 1.4125E+03 1.6412E-07 1.0896E-07 9.9968E-09 8.0265E-09 - 1.5849E+03 1.1394E-07 7.4350E-08 6.6562E-09 5.2944E-09 - 1.7783E+03 7.9775E-08 5.1284E-08 4.4446E-09 3.5364E-09 - 1.9953E+03 5.4999E-08 3.5574E-08 2.9810E-09 2.3129E-09 - 2.2387E+03 3.8043E-08 2.4319E-08 2.0020E-09 1.5218E-09 - 2.5119E+03 2.6425E-08 1.6689E-08 1.2988E-09 1.0033E-09 - 2.8184E+03 1.8240E-08 1.1441E-08 8.4776E-10 6.6079E-10 - 3.1623E+03 1.2739E-08 7.8715E-09 5.7626E-10 4.4240E-10 - 3.5481E+03 8.7614E-09 5.3279E-09 3.7935E-10 2.8347E-10 - 3.9811E+03 6.0189E-09 3.6209E-09 2.5237E-10 1.8638E-10 - 4.4668E+03 4.1153E-09 2.4747E-09 1.6749E-10 1.2717E-10 - 5.0119E+03 2.8086E-09 1.6790E-09 1.1472E-10 8.4802E-11 - 5.6234E+03 1.9247E-09 1.1276E-09 7.6542E-11 5.4034E-11 - 6.3096E+03 1.3076E-09 7.6611E-10 4.9957E-11 3.7142E-11 - 7.0795E+03 8.9639E-10 5.1775E-10 3.3326E-11 2.4536E-11 - 7.9433E+03 6.0868E-10 3.5078E-10 2.0771E-11 1.6040E-11 - 8.9125E+03 4.1181E-10 2.3575E-10 1.3947E-11 1.0511E-11 - 1.0000E+04 2.7825E-10 1.5660E-10 9.6327E-12 6.6002E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.1810E+04 5.1481E+04 2.4190E+04 2.3479E+04 - 1.1220E-01 4.2189E+04 4.1608E+04 2.0169E+04 1.9452E+04 - 1.2589E-01 3.4209E+04 3.3591E+04 1.6535E+04 1.5766E+04 - 1.4125E-01 2.7717E+04 2.7012E+04 1.3361E+04 1.2738E+04 - 1.5849E-01 2.2108E+04 2.1444E+04 1.0595E+04 1.0214E+04 - 1.7783E-01 1.7333E+04 1.6673E+04 8.3948E+03 8.0178E+03 - 1.9953E-01 1.3464E+04 1.2763E+04 6.6024E+03 6.2715E+03 - 2.2387E-01 1.0372E+04 9.7208E+03 5.1520E+03 4.9109E+03 - 2.5119E-01 7.8511E+03 7.3903E+03 3.9591E+03 3.8240E+03 - 2.8184E-01 5.8214E+03 5.4813E+03 3.0002E+03 2.8747E+03 - 3.1623E-01 4.3398E+03 4.0344E+03 2.2675E+03 2.1481E+03 - 3.5481E-01 3.2444E+03 2.9699E+03 1.6900E+03 1.6103E+03 - 3.9811E-01 2.3934E+03 2.1663E+03 1.2535E+03 1.1825E+03 - 4.4668E-01 1.7553E+03 1.5698E+03 9.0621E+02 8.7689E+02 - 5.0119E-01 1.2812E+03 1.1474E+03 6.6241E+02 6.5825E+02 - 5.6234E-01 9.3113E+02 8.2993E+02 4.8251E+02 4.9877E+02 - 6.3096E-01 6.9117E+02 5.9619E+02 3.4211E+02 3.6389E+02 - 7.0795E-01 5.0292E+02 4.3710E+02 2.4566E+02 2.5782E+02 - 7.9433E-01 3.6756E+02 3.1391E+02 1.8133E+02 1.9402E+02 - 8.9125E-01 2.7481E+02 2.2481E+02 1.3507E+02 1.4420E+02 - 1.0000E+00 2.0434E+02 1.6935E+02 9.9621E+01 1.0268E+02 - 1.1220E+00 1.5206E+02 1.2791E+02 7.3308E+01 7.5813E+01 - 1.2589E+00 1.1202E+02 9.3756E+01 5.2942E+01 5.7541E+01 - 1.4125E+00 8.2573E+01 6.7539E+01 3.9206E+01 4.3157E+01 - 1.5849E+00 6.0910E+01 5.0697E+01 2.9143E+01 3.1183E+01 - 1.7783E+00 4.5441E+01 3.8263E+01 2.1169E+01 2.3092E+01 - 1.9953E+00 3.4907E+01 2.7915E+01 1.5935E+01 1.7818E+01 - 2.2387E+00 2.6144E+01 2.0663E+01 1.2062E+01 1.3062E+01 - 2.5119E+00 1.9067E+01 1.5657E+01 8.6695E+00 9.3157E+00 - 2.8184E+00 1.4322E+01 1.1504E+01 6.3230E+00 6.7447E+00 - 3.1623E+00 1.0419E+01 8.4149E+00 4.9968E+00 4.8704E+00 - 3.5481E+00 7.6574E+00 6.2698E+00 3.5584E+00 3.5441E+00 - 3.9811E+00 5.6245E+00 4.5453E+00 2.6178E+00 2.6462E+00 - 4.4668E+00 4.1001E+00 3.3185E+00 1.9734E+00 1.9294E+00 - 5.0119E+00 2.9583E+00 2.5518E+00 1.4235E+00 1.3834E+00 - 5.6234E+00 2.1584E+00 1.8820E+00 1.0033E+00 1.0078E+00 - 6.3096E+00 1.5580E+00 1.3271E+00 7.7203E-01 7.2076E-01 - 7.0795E+00 1.1487E+00 9.5402E-01 5.6135E-01 4.9396E-01 - 7.9433E+00 8.1692E-01 6.9839E-01 4.1105E-01 3.2737E-01 - 8.9125E+00 5.8450E-01 5.1887E-01 3.1256E-01 2.3875E-01 - 1.0000E+01 4.1776E-01 3.7169E-01 2.1380E-01 1.7422E-01 - 1.1220E+01 2.9196E-01 2.7064E-01 1.4799E-01 1.2366E-01 - 1.2589E+01 2.0972E-01 1.9426E-01 1.0354E-01 8.7177E-02 - 1.4125E+01 1.5289E-01 1.4048E-01 7.5632E-02 6.0833E-02 - 1.5849E+01 1.0924E-01 1.0302E-01 5.3675E-02 3.9746E-02 - 1.7783E+01 7.9820E-02 7.2243E-02 3.6097E-02 2.7653E-02 - 1.9953E+01 5.6245E-02 4.9680E-02 2.4274E-02 2.1490E-02 - 2.2387E+01 3.7521E-02 3.5041E-02 1.8128E-02 1.4407E-02 - 2.5119E+01 2.7505E-02 2.5086E-02 1.2530E-02 9.4491E-03 - 2.8184E+01 2.1476E-02 1.8251E-02 8.3695E-03 6.1350E-03 - 3.1623E+01 1.5656E-02 1.4173E-02 6.6034E-03 5.0046E-03 - 3.5481E+01 1.1203E-02 1.0057E-02 4.5357E-03 3.4661E-03 - 3.9811E+01 8.0028E-03 7.1252E-03 3.1103E-03 2.3868E-03 - 4.4668E+01 5.7197E-03 5.0557E-03 2.1304E-03 1.6293E-03 - 5.0119E+01 4.0977E-03 3.5850E-03 1.4488E-03 1.1175E-03 - 5.6234E+01 2.9269E-03 2.5308E-03 9.8763E-04 7.6201E-04 - 6.3096E+01 2.0812E-03 1.7844E-03 6.7368E-04 5.1621E-04 - 7.0795E+01 1.4863E-03 1.2684E-03 4.5521E-04 3.4965E-04 - 7.9433E+01 1.0654E-03 8.9378E-04 3.0641E-04 2.3800E-04 - 8.9125E+01 7.5544E-04 6.3003E-04 2.0575E-04 1.6130E-04 - 1.0000E+02 5.3970E-04 4.4544E-04 1.3795E-04 1.0686E-04 - 1.1220E+02 3.8369E-04 3.1322E-04 9.2391E-05 7.1894E-05 - 1.2589E+02 2.7210E-04 2.2060E-04 6.1920E-05 4.8220E-05 - 1.4125E+02 1.9296E-04 1.5539E-04 4.1208E-05 3.2183E-05 - 1.5849E+02 1.3675E-04 1.0904E-04 2.7397E-05 2.1448E-05 - 1.7783E+02 9.6948E-05 7.6179E-05 1.8276E-05 1.4225E-05 - 1.9953E+02 6.8999E-05 5.3473E-05 1.2120E-05 9.3993E-06 - 2.2387E+02 4.8664E-05 3.7641E-05 7.9537E-06 6.2164E-06 - 2.5119E+02 3.4188E-05 2.6190E-05 5.2289E-06 4.1091E-06 - 2.8184E+02 2.4122E-05 1.8243E-05 3.4664E-06 2.7012E-06 - 3.1623E+02 1.6996E-05 1.2781E-05 2.2713E-06 1.7962E-06 - 3.5481E+02 1.1953E-05 8.9057E-06 1.4922E-06 1.1846E-06 - 3.9811E+02 8.4154E-06 6.1977E-06 9.7621E-07 7.8255E-07 - 4.4668E+02 5.9287E-06 4.3011E-06 6.4008E-07 5.1128E-07 - 5.0119E+02 4.1447E-06 2.9896E-06 4.2374E-07 3.3745E-07 - 5.6234E+02 2.9027E-06 2.0784E-06 2.8182E-07 2.2294E-07 - 6.3096E+02 2.0343E-06 1.4435E-06 1.8392E-07 1.4585E-07 - 7.0795E+02 1.4265E-06 1.0010E-06 1.1926E-07 9.5157E-08 - 7.9433E+02 9.9669E-07 6.8965E-07 7.9957E-08 6.3159E-08 - 8.9125E+02 6.9439E-07 4.7697E-07 5.3339E-08 4.1827E-08 - 1.0000E+03 4.8598E-07 3.3021E-07 3.4331E-08 2.7326E-08 - 1.1220E+03 3.3850E-07 2.2640E-07 2.2622E-08 1.8095E-08 - 1.2589E+03 2.3458E-07 1.5669E-07 1.5255E-08 1.2179E-08 - 1.4125E+03 1.6254E-07 1.0769E-07 1.0021E-08 8.0281E-09 - 1.5849E+03 1.1360E-07 7.4023E-08 6.5507E-09 5.2518E-09 - 1.7783E+03 7.9516E-08 5.1460E-08 4.3870E-09 3.4346E-09 - 1.9953E+03 5.5388E-08 3.5476E-08 2.9304E-09 2.2868E-09 - 2.2387E+03 3.8399E-08 2.4427E-08 1.9089E-09 1.5318E-09 - 2.5119E+03 2.6607E-08 1.6599E-08 1.2965E-09 1.0250E-09 - 2.8184E+03 1.8294E-08 1.1396E-08 8.8732E-10 6.7245E-10 - 3.1623E+03 1.2714E-08 7.8636E-09 5.6363E-10 4.4333E-10 - 3.5481E+03 8.7101E-09 5.3452E-09 3.7861E-10 2.9673E-10 - 3.9811E+03 5.9830E-09 3.6625E-09 2.5366E-10 1.9185E-10 - 4.4668E+03 4.1122E-09 2.4745E-09 1.6792E-10 1.2568E-10 - 5.0119E+03 2.8052E-09 1.6689E-09 1.1296E-10 8.2594E-11 - 5.6234E+03 1.9200E-09 1.1350E-09 7.2831E-11 5.4635E-11 - 6.3096E+03 1.3168E-09 7.6997E-10 4.8149E-11 3.7249E-11 - 7.0795E+03 8.9801E-10 5.2151E-10 3.1958E-11 2.4091E-11 - 7.9433E+03 6.0890E-10 3.4932E-10 2.1517E-11 1.5627E-11 - 8.9125E+03 4.1433E-10 2.3543E-10 1.3889E-11 1.0361E-11 - 1.0000E+04 2.7927E-10 1.5919E-10 9.2020E-12 6.6107E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.1989E+04 5.1132E+04 2.4475E+04 2.3774E+04 - 1.1220E-01 4.2521E+04 4.1564E+04 2.0046E+04 1.9811E+04 - 1.2589E-01 3.4608E+04 3.3523E+04 1.6252E+04 1.6127E+04 - 1.4125E-01 2.7819E+04 2.6854E+04 1.3244E+04 1.2909E+04 - 1.5849E-01 2.2103E+04 2.1281E+04 1.0649E+04 1.0293E+04 - 1.7783E-01 1.7459E+04 1.6630E+04 8.3929E+03 8.0993E+03 - 1.9953E-01 1.3597E+04 1.2823E+04 6.5440E+03 6.3944E+03 - 2.2387E-01 1.0482E+04 9.7341E+03 5.1097E+03 5.0056E+03 - 2.5119E-01 7.9115E+03 7.3262E+03 3.9582E+03 3.8279E+03 - 2.8184E-01 5.9182E+03 5.4955E+03 2.9834E+03 2.8706E+03 - 3.1623E-01 4.4396E+03 4.0634E+03 2.2267E+03 2.1833E+03 - 3.5481E-01 3.3364E+03 2.9580E+03 1.6547E+03 1.6498E+03 - 3.9811E-01 2.4680E+03 2.1628E+03 1.2061E+03 1.2289E+03 - 4.4668E-01 1.7937E+03 1.5805E+03 8.8400E+02 9.0985E+02 - 5.0119E-01 1.3070E+03 1.1500E+03 6.4428E+02 6.7070E+02 - 5.6234E-01 9.6892E+02 8.4022E+02 4.8183E+02 5.0107E+02 - 6.3096E-01 7.1518E+02 5.9500E+02 3.5381E+02 3.6841E+02 - 7.0795E-01 5.1656E+02 4.2825E+02 2.4803E+02 2.6465E+02 - 7.9433E-01 3.8453E+02 3.2226E+02 1.8327E+02 1.8950E+02 - 8.9125E-01 2.8969E+02 2.3824E+02 1.3934E+02 1.4267E+02 - 1.0000E+00 2.0958E+02 1.6692E+02 9.7947E+01 1.0634E+02 - 1.1220E+00 1.5289E+02 1.2348E+02 7.0688E+01 7.8918E+01 - 1.2589E+00 1.1380E+02 9.0343E+01 5.1373E+01 5.8422E+01 - 1.4125E+00 8.5899E+01 6.7320E+01 3.8463E+01 4.3297E+01 - 1.5849E+00 6.3682E+01 5.1074E+01 2.7979E+01 3.1717E+01 - 1.7783E+00 4.6820E+01 3.6019E+01 2.0061E+01 2.2705E+01 - 1.9953E+00 3.4701E+01 2.6495E+01 1.5283E+01 1.7465E+01 - 2.2387E+00 2.5503E+01 2.0396E+01 1.1252E+01 1.3248E+01 - 2.5119E+00 1.9389E+01 1.4885E+01 8.3703E+00 9.6435E+00 - 2.8184E+00 1.4760E+01 1.1164E+01 6.3658E+00 6.9333E+00 - 3.1623E+00 1.0444E+01 8.2236E+00 4.7902E+00 5.1723E+00 - 3.5481E+00 7.6829E+00 6.1269E+00 3.4702E+00 3.7989E+00 - 3.9811E+00 5.6030E+00 4.5279E+00 2.5423E+00 2.6938E+00 - 4.4668E+00 3.9992E+00 3.3198E+00 1.8963E+00 1.9258E+00 - 5.0119E+00 2.9268E+00 2.4492E+00 1.3490E+00 1.4291E+00 - 5.6234E+00 2.1870E+00 1.8232E+00 9.7563E-01 1.0760E+00 - 6.3096E+00 1.6096E+00 1.3374E+00 7.5286E-01 7.5177E-01 - 7.0795E+00 1.0961E+00 9.8625E-01 5.6279E-01 5.0045E-01 - 7.9433E+00 8.1101E-01 7.1965E-01 4.0878E-01 3.7787E-01 - 8.9125E+00 5.9645E-01 5.0426E-01 3.0500E-01 2.5952E-01 - 1.0000E+01 4.2918E-01 3.7846E-01 2.0880E-01 1.7644E-01 - 1.1220E+01 3.1105E-01 2.6932E-01 1.5172E-01 1.2447E-01 - 1.2589E+01 2.2682E-01 1.9120E-01 1.0925E-01 8.9261E-02 - 1.4125E+01 1.6091E-01 1.4064E-01 7.8073E-02 6.4458E-02 - 1.5849E+01 1.1529E-01 1.0524E-01 5.5655E-02 4.3789E-02 - 1.7783E+01 8.4373E-02 7.5886E-02 3.9003E-02 2.9267E-02 - 1.9953E+01 5.9784E-02 5.5357E-02 2.7813E-02 1.9515E-02 - 2.2387E+01 4.2469E-02 3.9401E-02 1.9261E-02 1.4853E-02 - 2.5119E+01 2.9441E-02 2.7958E-02 1.2859E-02 1.0976E-02 - 2.8184E+01 2.1101E-02 1.9854E-02 9.1562E-03 7.3245E-03 - 3.1623E+01 1.5643E-02 1.4120E-02 6.6010E-03 4.9944E-03 - 3.5481E+01 1.1174E-02 1.0039E-02 4.5493E-03 3.4506E-03 - 3.9811E+01 7.9929E-03 7.1249E-03 3.1295E-03 2.3673E-03 - 4.4668E+01 5.7239E-03 5.0352E-03 2.1350E-03 1.6184E-03 - 5.0119E+01 4.1008E-03 3.5613E-03 1.4469E-03 1.1060E-03 - 5.6234E+01 2.9337E-03 2.5287E-03 9.8905E-04 7.5725E-04 - 6.3096E+01 2.0930E-03 1.7870E-03 6.7019E-04 5.2023E-04 - 7.0795E+01 1.4856E-03 1.2647E-03 4.5256E-04 3.5305E-04 - 7.9433E+01 1.0606E-03 8.9503E-04 3.0613E-04 2.3659E-04 - 8.9125E+01 7.5541E-04 6.3055E-04 2.0585E-04 1.5876E-04 - 1.0000E+02 5.4036E-04 4.4557E-04 1.3843E-04 1.0739E-04 - 1.1220E+02 3.8375E-04 3.1427E-04 9.2921E-05 7.1822E-05 - 1.2589E+02 2.7265E-04 2.2098E-04 6.1629E-05 4.7922E-05 - 1.4125E+02 1.9413E-04 1.5541E-04 4.0873E-05 3.2218E-05 - 1.5849E+02 1.3746E-04 1.0906E-04 2.7225E-05 2.1353E-05 - 1.7783E+02 9.7239E-05 7.5911E-05 1.8027E-05 1.4167E-05 - 1.9953E+02 6.8894E-05 5.3129E-05 1.1898E-05 9.4260E-06 - 2.2387E+02 4.8532E-05 3.7181E-05 7.9573E-06 6.2535E-06 - 2.5119E+02 3.4175E-05 2.6082E-05 5.2406E-06 4.1783E-06 - 2.8184E+02 2.4227E-05 1.8089E-05 3.4117E-06 2.7611E-06 - 3.1623E+02 1.7055E-05 1.2769E-05 2.2741E-06 1.7942E-06 - 3.5481E+02 1.2004E-05 8.8949E-06 1.4930E-06 1.1823E-06 - 3.9811E+02 8.4250E-06 6.1709E-06 9.8249E-07 7.8170E-07 - 4.4668E+02 5.9151E-06 4.2905E-06 6.4369E-07 5.1527E-07 - 5.0119E+02 4.1576E-06 2.9832E-06 4.2360E-07 3.3931E-07 - 5.6234E+02 2.9120E-06 2.0786E-06 2.8143E-07 2.2502E-07 - 6.3096E+02 2.0341E-06 1.4375E-06 1.8353E-07 1.4718E-07 - 7.0795E+02 1.4252E-06 9.9758E-07 1.2003E-07 9.7081E-08 - 7.9433E+02 9.9727E-07 6.9173E-07 7.8573E-08 6.4104E-08 - 8.9125E+02 6.9536E-07 4.7815E-07 5.2225E-08 4.2118E-08 - 1.0000E+03 4.8547E-07 3.2875E-07 3.5032E-08 2.7774E-08 - 1.1220E+03 3.3901E-07 2.2653E-07 2.3413E-08 1.7972E-08 - 1.2589E+03 2.3561E-07 1.5745E-07 1.5324E-08 1.1965E-08 - 1.4125E+03 1.6441E-07 1.0832E-07 9.9921E-09 8.0979E-09 - 1.5849E+03 1.1468E-07 7.4709E-08 6.4684E-09 5.3648E-09 - 1.7783E+03 7.9443E-08 5.1401E-08 4.4136E-09 3.4974E-09 - 1.9953E+03 5.4971E-08 3.5261E-08 2.9311E-09 2.2779E-09 - 2.2387E+03 3.8306E-08 2.4230E-08 1.8990E-09 1.4805E-09 - 2.5119E+03 2.6593E-08 1.6614E-08 1.2496E-09 9.6569E-10 - 2.8184E+03 1.8351E-08 1.1341E-08 8.4663E-10 6.6284E-10 - 3.1623E+03 1.2716E-08 7.8799E-09 5.7295E-10 4.4499E-10 - 3.5481E+03 8.7220E-09 5.3390E-09 3.8627E-10 2.9933E-10 - 3.9811E+03 6.0124E-09 3.6454E-09 2.5532E-10 1.9312E-10 - 4.4668E+03 4.1058E-09 2.4779E-09 1.6453E-10 1.2753E-10 - 5.0119E+03 2.7983E-09 1.6952E-09 1.1130E-10 8.5104E-11 - 5.6234E+03 1.9139E-09 1.1551E-09 7.3619E-11 5.4513E-11 - 6.3096E+03 1.3118E-09 7.7154E-10 4.8414E-11 3.6225E-11 - 7.0795E+03 8.9258E-10 5.2047E-10 3.2547E-11 2.4217E-11 - 7.9433E+03 6.0695E-10 3.5001E-10 2.0764E-11 1.5391E-11 - 8.9125E+03 4.1296E-10 2.3464E-10 1.3660E-11 1.0158E-11 - 1.0000E+04 2.7743E-10 1.5730E-10 9.5442E-12 6.5893E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.2562E+04 5.1980E+04 2.4589E+04 2.3914E+04 - 1.1220E-01 4.3067E+04 4.2242E+04 2.0600E+04 1.9798E+04 - 1.2589E-01 3.5238E+04 3.4016E+04 1.6985E+04 1.6138E+04 - 1.4125E-01 2.8438E+04 2.7344E+04 1.3570E+04 1.2982E+04 - 1.5849E-01 2.2619E+04 2.1636E+04 1.0757E+04 1.0413E+04 - 1.7783E-01 1.7754E+04 1.6903E+04 8.6187E+03 8.3055E+03 - 1.9953E-01 1.3865E+04 1.3149E+04 6.8003E+03 6.5375E+03 - 2.2387E-01 1.0683E+04 9.9921E+03 5.2643E+03 5.1214E+03 - 2.5119E-01 8.1270E+03 7.5294E+03 4.0839E+03 3.9586E+03 - 2.8184E-01 6.1418E+03 5.7054E+03 3.1568E+03 3.0062E+03 - 3.1623E-01 4.5628E+03 4.2565E+03 2.3671E+03 2.2777E+03 - 3.5481E-01 3.4348E+03 3.1430E+03 1.7408E+03 1.7296E+03 - 3.9811E-01 2.5402E+03 2.3189E+03 1.2918E+03 1.3071E+03 - 4.4668E-01 1.8494E+03 1.6794E+03 9.4645E+02 9.7091E+02 - 5.0119E-01 1.3658E+03 1.2087E+03 6.9678E+02 7.2380E+02 - 5.6234E-01 9.9088E+02 8.8773E+02 5.2508E+02 5.2364E+02 - 6.3096E-01 7.2621E+02 6.4793E+02 3.7689E+02 3.8139E+02 - 7.0795E-01 5.3462E+02 4.6100E+02 2.7373E+02 2.8072E+02 - 7.9433E-01 3.9885E+02 3.3563E+02 1.9965E+02 2.0045E+02 - 8.9125E-01 2.9943E+02 2.4607E+02 1.4073E+02 1.4784E+02 - 1.0000E+00 2.1778E+02 1.7937E+02 1.0469E+02 1.0999E+02 - 1.1220E+00 1.6437E+02 1.3107E+02 7.7128E+01 8.1683E+01 - 1.2589E+00 1.2133E+02 9.3756E+01 5.6431E+01 6.0952E+01 - 1.4125E+00 8.7102E+01 6.9021E+01 4.1294E+01 4.3939E+01 - 1.5849E+00 6.4156E+01 5.1694E+01 3.0235E+01 3.2899E+01 - 1.7783E+00 4.9086E+01 3.8583E+01 2.2092E+01 2.4902E+01 - 1.9953E+00 3.6992E+01 2.8200E+01 1.6242E+01 1.8165E+01 - 2.2387E+00 2.6756E+01 2.1245E+01 1.2181E+01 1.3430E+01 - 2.5119E+00 1.9642E+01 1.5739E+01 8.8416E+00 1.0053E+01 - 2.8184E+00 1.4519E+01 1.1338E+01 6.3349E+00 7.2478E+00 - 3.1623E+00 1.0577E+01 8.5705E+00 4.9376E+00 5.2558E+00 - 3.5481E+00 7.7610E+00 6.3291E+00 3.7196E+00 3.8188E+00 - 3.9811E+00 5.6591E+00 4.6253E+00 2.7100E+00 2.6776E+00 - 4.4668E+00 4.1359E+00 3.4120E+00 1.9894E+00 1.9078E+00 - 5.0119E+00 3.0335E+00 2.5273E+00 1.4452E+00 1.3893E+00 - 5.6234E+00 2.2076E+00 1.8596E+00 1.0714E+00 1.0104E+00 - 6.3096E+00 1.6108E+00 1.3756E+00 7.9657E-01 7.3302E-01 - 7.0795E+00 1.1464E+00 1.0031E+00 5.7342E-01 5.1070E-01 - 7.9433E+00 8.1604E-01 7.1169E-01 3.9530E-01 3.4711E-01 - 8.9125E+00 5.9008E-01 5.1079E-01 2.8431E-01 2.4369E-01 - 1.0000E+01 4.2908E-01 3.8016E-01 2.0932E-01 1.7806E-01 - 1.1220E+01 3.0833E-01 2.7210E-01 1.5368E-01 1.2908E-01 - 1.2589E+01 2.2226E-01 1.9922E-01 1.1264E-01 9.0983E-02 - 1.4125E+01 1.6046E-01 1.4643E-01 7.9840E-02 6.1573E-02 - 1.5849E+01 1.1337E-01 1.0361E-01 5.5764E-02 4.1475E-02 - 1.7783E+01 8.0447E-02 7.3136E-02 3.9110E-02 2.8465E-02 - 1.9953E+01 5.9788E-02 5.3769E-02 2.6789E-02 2.1744E-02 - 2.2387E+01 4.4526E-02 3.9663E-02 1.8611E-02 1.5871E-02 - 2.5119E+01 3.2332E-02 2.7486E-02 1.3083E-02 1.0476E-02 - 2.8184E+01 2.3041E-02 1.9168E-02 9.0013E-03 7.2497E-03 - 3.1623E+01 1.5662E-02 1.4127E-02 6.5836E-03 4.9967E-03 - 3.5481E+01 1.1210E-02 1.0038E-02 4.5293E-03 3.4241E-03 - 3.9811E+01 8.0297E-03 7.1121E-03 3.1036E-03 2.3683E-03 - 4.4668E+01 5.7430E-03 5.0442E-03 2.1246E-03 1.6365E-03 - 5.0119E+01 4.1090E-03 3.5660E-03 1.4527E-03 1.1143E-03 - 5.6234E+01 2.9324E-03 2.5274E-03 9.8904E-04 7.5789E-04 - 6.3096E+01 2.0882E-03 1.8003E-03 6.6912E-04 5.1630E-04 - 7.0795E+01 1.4890E-03 1.2677E-03 4.4951E-04 3.5229E-04 - 7.9433E+01 1.0622E-03 8.8966E-04 3.0345E-04 2.3718E-04 - 8.9125E+01 7.5883E-04 6.2485E-04 2.0553E-04 1.6017E-04 - 1.0000E+02 5.4102E-04 4.4585E-04 1.3902E-04 1.0765E-04 - 1.1220E+02 3.8498E-04 3.1457E-04 9.2433E-05 7.1686E-05 - 1.2589E+02 2.7223E-04 2.2130E-04 6.1819E-05 4.8340E-05 - 1.4125E+02 1.9311E-04 1.5546E-04 4.1412E-05 3.2380E-05 - 1.5849E+02 1.3745E-04 1.0904E-04 2.7516E-05 2.1294E-05 - 1.7783E+02 9.7157E-05 7.6214E-05 1.8261E-05 1.4225E-05 - 1.9953E+02 6.8628E-05 5.3252E-05 1.2000E-05 9.4747E-06 - 2.2387E+02 4.8662E-05 3.7260E-05 7.8986E-06 6.1975E-06 - 2.5119E+02 3.4362E-05 2.6051E-05 5.1851E-06 4.0283E-06 - 2.8184E+02 2.4122E-05 1.8245E-05 3.4362E-06 2.6916E-06 - 3.1623E+02 1.7015E-05 1.2766E-05 2.2651E-06 1.7963E-06 - 3.5481E+02 1.1979E-05 8.8998E-06 1.4919E-06 1.1820E-06 - 3.9811E+02 8.4096E-06 6.1872E-06 9.8021E-07 7.7842E-07 - 4.4668E+02 5.8985E-06 4.3064E-06 6.4329E-07 5.1206E-07 - 5.0119E+02 4.1450E-06 2.9939E-06 4.2252E-07 3.3303E-07 - 5.6234E+02 2.9061E-06 2.0821E-06 2.7874E-07 2.1938E-07 - 6.3096E+02 2.0324E-06 1.4376E-06 1.8157E-07 1.4469E-07 - 7.0795E+02 1.4229E-06 9.9256E-07 1.1887E-07 9.5615E-08 - 7.9433E+02 9.9473E-07 6.8712E-07 7.9246E-08 6.3063E-08 - 8.9125E+02 6.9283E-07 4.7638E-07 5.2526E-08 4.0955E-08 - 1.0000E+03 4.8293E-07 3.3013E-07 3.4450E-08 2.6643E-08 - 1.1220E+03 3.3703E-07 2.2712E-07 2.3029E-08 1.7919E-08 - 1.2589E+03 2.3544E-07 1.5580E-07 1.5205E-08 1.1826E-08 - 1.4125E+03 1.6372E-07 1.0791E-07 9.8098E-09 7.7584E-09 - 1.5849E+03 1.1382E-07 7.4733E-08 6.5411E-09 5.2354E-09 - 1.7783E+03 7.8906E-08 5.1371E-08 4.4642E-09 3.4355E-09 - 1.9953E+03 5.5062E-08 3.5534E-08 2.9896E-09 2.3043E-09 - 2.2387E+03 3.7979E-08 2.4271E-08 1.9613E-09 1.5032E-09 - 2.5119E+03 2.6239E-08 1.6482E-08 1.2966E-09 9.5272E-10 - 2.8184E+03 1.8186E-08 1.1218E-08 8.7254E-10 6.4707E-10 - 3.1623E+03 1.2622E-08 7.8200E-09 5.7764E-10 4.4436E-10 - 3.5481E+03 8.6576E-09 5.3379E-09 3.7503E-10 2.9642E-10 - 3.9811E+03 5.9506E-09 3.6249E-09 2.5283E-10 1.9564E-10 - 4.4668E+03 4.0662E-09 2.4635E-09 1.6819E-10 1.2513E-10 - 5.0119E+03 2.7829E-09 1.6656E-09 1.0863E-10 8.1865E-11 - 5.6234E+03 1.9063E-09 1.1305E-09 7.1989E-11 5.6326E-11 - 6.3096E+03 1.3150E-09 7.6357E-10 5.0519E-11 3.7399E-11 - 7.0795E+03 8.9139E-10 5.1854E-10 3.2963E-11 2.4360E-11 - 7.9433E+03 6.0286E-10 3.4984E-10 2.1400E-11 1.6121E-11 - 8.9125E+03 4.1030E-10 2.3385E-10 1.4510E-11 1.0591E-11 - 1.0000E+04 2.7890E-10 1.5654E-10 9.4893E-12 6.5197E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3317E+04 5.3012E+04 2.5335E+04 2.3953E+04 - 1.1220E-01 4.3686E+04 4.3178E+04 2.1249E+04 1.9972E+04 - 1.2589E-01 3.5700E+04 3.4895E+04 1.7700E+04 1.6574E+04 - 1.4125E-01 2.8961E+04 2.8145E+04 1.4302E+04 1.3453E+04 - 1.5849E-01 2.3254E+04 2.2384E+04 1.1368E+04 1.0747E+04 - 1.7783E-01 1.8384E+04 1.7617E+04 9.0965E+03 8.4200E+03 - 1.9953E-01 1.4289E+04 1.3759E+04 7.1716E+03 6.5702E+03 - 2.2387E-01 1.0887E+04 1.0612E+04 5.6235E+03 5.1040E+03 - 2.5119E-01 8.3455E+03 8.1225E+03 4.3681E+03 3.9312E+03 - 2.8184E-01 6.3699E+03 6.0784E+03 3.3399E+03 3.0352E+03 - 3.1623E-01 4.7221E+03 4.4918E+03 2.4997E+03 2.3031E+03 - 3.5481E-01 3.5475E+03 3.3277E+03 1.8821E+03 1.7279E+03 - 3.9811E-01 2.6577E+03 2.4412E+03 1.4263E+03 1.3032E+03 - 4.4668E-01 1.9421E+03 1.7593E+03 1.0723E+03 9.7498E+02 - 5.0119E-01 1.4265E+03 1.2853E+03 7.8236E+02 7.0977E+02 - 5.6234E-01 1.0250E+03 9.5655E+02 5.6073E+02 5.2490E+02 - 6.3096E-01 7.5213E+02 6.9578E+02 4.1229E+02 3.9660E+02 - 7.0795E-01 5.6731E+02 5.0516E+02 2.9247E+02 2.8672E+02 - 7.9433E-01 4.1826E+02 3.6989E+02 2.2228E+02 2.0597E+02 - 8.9125E-01 3.0714E+02 2.7268E+02 1.6418E+02 1.4917E+02 - 1.0000E+00 2.2698E+02 1.9674E+02 1.1645E+02 1.1326E+02 - 1.1220E+00 1.6855E+02 1.4256E+02 8.6576E+01 8.2807E+01 - 1.2589E+00 1.2567E+02 1.0573E+02 6.5347E+01 6.1211E+01 - 1.4125E+00 9.3238E+01 7.9379E+01 4.6386E+01 4.6697E+01 - 1.5849E+00 6.9347E+01 5.7840E+01 3.2637E+01 3.4269E+01 - 1.7783E+00 5.0989E+01 4.2276E+01 2.5019E+01 2.4926E+01 - 1.9953E+00 3.7647E+01 3.0732E+01 1.8350E+01 1.8022E+01 - 2.2387E+00 2.7571E+01 2.3179E+01 1.3501E+01 1.3203E+01 - 2.5119E+00 2.0046E+01 1.7600E+01 9.7669E+00 9.9578E+00 - 2.8184E+00 1.5141E+01 1.2614E+01 7.2554E+00 7.0793E+00 - 3.1623E+00 1.0803E+01 8.9627E+00 5.5528E+00 5.0419E+00 - 3.5481E+00 7.9027E+00 6.6208E+00 4.0187E+00 3.6359E+00 - 3.9811E+00 5.6881E+00 4.8721E+00 2.9026E+00 2.6352E+00 - 4.4668E+00 4.1385E+00 3.5971E+00 2.1537E+00 1.9457E+00 - 5.0119E+00 3.0258E+00 2.6760E+00 1.5877E+00 1.4046E+00 - 5.6234E+00 2.1885E+00 1.9458E+00 1.1659E+00 1.0044E+00 - 6.3096E+00 1.5948E+00 1.4177E+00 8.6435E-01 6.8572E-01 - 7.0795E+00 1.1597E+00 1.0190E+00 6.1168E-01 4.6620E-01 - 7.9433E+00 8.3548E-01 7.5675E-01 4.5618E-01 3.4135E-01 - 8.9125E+00 5.7960E-01 5.5516E-01 3.1965E-01 2.5039E-01 - 1.0000E+01 4.1728E-01 3.9666E-01 2.1452E-01 1.7741E-01 - 1.1220E+01 3.0268E-01 2.8529E-01 1.5996E-01 1.2339E-01 - 1.2589E+01 2.1938E-01 2.0067E-01 1.1478E-01 8.5026E-02 - 1.4125E+01 1.5769E-01 1.4426E-01 7.6191E-02 5.7477E-02 - 1.5849E+01 1.1302E-01 1.0505E-01 5.2856E-02 4.1551E-02 - 1.7783E+01 8.1679E-02 7.4256E-02 3.9596E-02 2.9731E-02 - 1.9953E+01 5.8083E-02 5.2215E-02 2.7490E-02 2.1290E-02 - 2.2387E+01 4.0665E-02 3.7977E-02 1.9657E-02 1.5760E-02 - 2.5119E+01 3.0814E-02 2.7822E-02 1.4011E-02 1.1092E-02 - 2.8184E+01 2.2781E-02 1.9483E-02 9.0781E-03 7.1989E-03 - 3.1623E+01 1.5680E-02 1.4139E-02 6.6024E-03 4.9979E-03 - 3.5481E+01 1.1251E-02 1.0052E-02 4.5454E-03 3.4402E-03 - 3.9811E+01 8.0298E-03 7.1413E-03 3.1187E-03 2.3728E-03 - 4.4668E+01 5.7415E-03 5.0646E-03 2.1345E-03 1.6307E-03 - 5.0119E+01 4.1077E-03 3.5897E-03 1.4570E-03 1.1159E-03 - 5.6234E+01 2.9300E-03 2.5388E-03 9.9126E-04 7.6223E-04 - 6.3096E+01 2.0887E-03 1.7903E-03 6.7114E-04 5.1983E-04 - 7.0795E+01 1.4830E-03 1.2631E-03 4.5429E-04 3.5099E-04 - 7.9433E+01 1.0582E-03 8.9298E-04 3.0527E-04 2.3425E-04 - 8.9125E+01 7.5397E-04 6.3169E-04 2.0455E-04 1.5817E-04 - 1.0000E+02 5.3896E-04 4.4607E-04 1.3807E-04 1.0726E-04 - 1.1220E+02 3.8330E-04 3.1377E-04 9.2201E-05 7.1466E-05 - 1.2589E+02 2.7255E-04 2.2072E-04 6.1909E-05 4.8025E-05 - 1.4125E+02 1.9354E-04 1.5529E-04 4.1322E-05 3.2257E-05 - 1.5849E+02 1.3742E-04 1.0896E-04 2.7401E-05 2.1454E-05 - 1.7783E+02 9.7221E-05 7.6363E-05 1.8082E-05 1.4190E-05 - 1.9953E+02 6.8420E-05 5.3482E-05 1.2107E-05 9.4159E-06 - 2.2387E+02 4.8447E-05 3.7417E-05 8.0448E-06 6.2411E-06 - 2.5119E+02 3.4332E-05 2.6230E-05 5.2436E-06 4.0610E-06 - 2.8184E+02 2.4175E-05 1.8351E-05 3.4418E-06 2.7024E-06 - 3.1623E+02 1.6976E-05 1.2740E-05 2.2721E-06 1.8144E-06 - 3.5481E+02 1.1966E-05 8.8746E-06 1.4927E-06 1.1889E-06 - 3.9811E+02 8.4007E-06 6.1644E-06 9.8507E-07 7.7494E-07 - 4.4668E+02 5.8925E-06 4.2901E-06 6.4591E-07 5.1063E-07 - 5.0119E+02 4.1219E-06 2.9823E-06 4.2720E-07 3.3596E-07 - 5.6234E+02 2.8942E-06 2.0653E-06 2.7800E-07 2.1847E-07 - 6.3096E+02 2.0258E-06 1.4336E-06 1.8347E-07 1.4463E-07 - 7.0795E+02 1.4171E-06 9.9508E-07 1.2191E-07 9.6638E-08 - 7.9433E+02 9.8928E-07 6.8961E-07 7.9493E-08 6.3234E-08 - 8.9125E+02 6.8946E-07 4.7602E-07 5.2035E-08 4.1400E-08 - 1.0000E+03 4.8346E-07 3.3058E-07 3.4398E-08 2.8022E-08 - 1.1220E+03 3.3867E-07 2.2874E-07 2.2852E-08 1.8072E-08 - 1.2589E+03 2.3542E-07 1.5769E-07 1.5007E-08 1.1806E-08 - 1.4125E+03 1.6381E-07 1.0879E-07 9.8595E-09 7.9548E-09 - 1.5849E+03 1.1342E-07 7.4647E-08 6.6155E-09 5.3162E-09 - 1.7783E+03 7.8368E-08 5.1375E-08 4.4491E-09 3.5067E-09 - 1.9953E+03 5.4788E-08 3.5203E-08 2.9833E-09 2.3140E-09 - 2.2387E+03 3.7983E-08 2.4280E-08 1.9283E-09 1.4722E-09 - 2.5119E+03 2.6456E-08 1.6728E-08 1.2590E-09 9.8380E-10 - 2.8184E+03 1.8334E-08 1.1390E-08 8.4163E-10 6.7152E-10 - 3.1623E+03 1.2697E-08 7.8414E-09 5.7342E-10 4.3710E-10 - 3.5481E+03 8.7134E-09 5.3213E-09 3.7619E-10 2.8983E-10 - 3.9811E+03 5.9794E-09 3.6064E-09 2.4550E-10 1.9814E-10 - 4.4668E+03 4.0918E-09 2.4541E-09 1.6509E-10 1.2486E-10 - 5.0119E+03 2.8070E-09 1.6594E-09 1.1167E-10 7.9623E-11 - 5.6234E+03 1.9086E-09 1.1194E-09 7.3079E-11 5.5496E-11 - 6.3096E+03 1.3132E-09 7.6617E-10 4.8684E-11 3.4957E-11 - 7.0795E+03 8.9596E-10 5.1736E-10 3.2128E-11 2.3403E-11 - 7.9433E+03 6.0555E-10 3.5109E-10 2.1310E-11 1.5984E-11 - 8.9125E+03 4.0927E-10 2.3414E-10 1.4366E-11 1.0325E-11 - 1.0000E+04 2.7610E-10 1.5578E-10 9.3365E-12 6.6076E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4016E+04 5.4555E+04 2.6168E+04 2.4313E+04 - 1.1220E-01 4.4300E+04 4.4792E+04 2.1978E+04 2.0199E+04 - 1.2589E-01 3.5990E+04 3.6323E+04 1.8291E+04 1.6472E+04 - 1.4125E-01 2.9238E+04 2.9151E+04 1.5013E+04 1.3262E+04 - 1.5849E-01 2.3620E+04 2.3171E+04 1.2058E+04 1.0576E+04 - 1.7783E-01 1.8649E+04 1.8358E+04 9.6245E+03 8.4328E+03 - 1.9953E-01 1.4565E+04 1.4312E+04 7.6597E+03 6.6422E+03 - 2.2387E-01 1.1184E+04 1.0996E+04 5.9905E+03 5.1721E+03 - 2.5119E-01 8.4957E+03 8.4395E+03 4.6686E+03 3.9798E+03 - 2.8184E-01 6.5053E+03 6.3977E+03 3.6293E+03 3.0986E+03 - 3.1623E-01 4.9293E+03 4.8005E+03 2.7634E+03 2.3520E+03 - 3.5481E-01 3.6004E+03 3.5409E+03 2.0855E+03 1.7407E+03 - 3.9811E-01 2.6753E+03 2.6197E+03 1.5581E+03 1.3134E+03 - 4.4668E-01 2.0242E+03 1.9663E+03 1.1511E+03 9.6548E+02 - 5.0119E-01 1.4673E+03 1.4618E+03 8.6688E+02 7.0654E+02 - 5.6234E-01 1.0600E+03 1.0432E+03 6.2625E+02 5.2478E+02 - 6.3096E-01 7.9937E+02 7.3751E+02 4.6654E+02 3.8256E+02 - 7.0795E-01 5.6944E+02 5.5004E+02 3.5388E+02 2.8601E+02 - 7.9433E-01 4.0947E+02 4.1209E+02 2.5629E+02 2.1311E+02 - 8.9125E-01 3.0885E+02 3.0251E+02 1.8677E+02 1.4887E+02 - 1.0000E+00 2.2691E+02 2.1922E+02 1.3231E+02 1.1006E+02 - 1.1220E+00 1.6753E+02 1.5981E+02 9.5540E+01 8.2110E+01 - 1.2589E+00 1.2398E+02 1.1708E+02 7.0939E+01 6.1104E+01 - 1.4125E+00 9.1700E+01 8.6169E+01 5.1557E+01 4.4956E+01 - 1.5849E+00 6.7606E+01 6.2173E+01 3.7632E+01 3.2106E+01 - 1.7783E+00 5.0078E+01 4.5946E+01 2.7748E+01 2.2905E+01 - 1.9953E+00 3.5684E+01 3.4202E+01 1.9913E+01 1.7309E+01 - 2.2387E+00 2.6038E+01 2.5456E+01 1.5075E+01 1.2977E+01 - 2.5119E+00 1.9753E+01 1.9482E+01 1.1079E+01 9.5972E+00 - 2.8184E+00 1.4594E+01 1.3741E+01 7.7986E+00 6.8983E+00 - 3.1623E+00 1.0466E+01 9.7608E+00 6.0883E+00 4.9513E+00 - 3.5481E+00 7.7820E+00 7.1979E+00 4.4933E+00 3.4495E+00 - 3.9811E+00 5.7397E+00 5.2475E+00 3.2355E+00 2.5080E+00 - 4.4668E+00 4.1575E+00 3.7305E+00 2.3162E+00 1.8495E+00 - 5.0119E+00 2.9470E+00 2.6656E+00 1.6603E+00 1.3213E+00 - 5.6234E+00 2.1053E+00 1.9470E+00 1.2030E+00 9.3394E-01 - 6.3096E+00 1.5093E+00 1.4354E+00 8.7438E-01 6.7292E-01 - 7.0795E+00 1.0865E+00 1.0715E+00 6.2396E-01 5.0738E-01 - 7.9433E+00 7.8876E-01 7.5705E-01 4.5537E-01 3.6332E-01 - 8.9125E+00 5.9405E-01 5.2175E-01 3.1618E-01 2.4394E-01 - 1.0000E+01 4.2626E-01 3.9639E-01 2.2894E-01 1.7619E-01 - 1.1220E+01 3.0376E-01 2.8527E-01 1.6382E-01 1.2287E-01 - 1.2589E+01 2.1801E-01 2.0382E-01 1.1249E-01 8.8161E-02 - 1.4125E+01 1.5654E-01 1.4531E-01 7.8895E-02 6.2403E-02 - 1.5849E+01 1.1337E-01 1.0447E-01 5.6951E-02 4.4060E-02 - 1.7783E+01 8.3068E-02 7.4851E-02 3.9703E-02 3.1160E-02 - 1.9953E+01 5.8807E-02 5.4006E-02 2.6200E-02 2.1754E-02 - 2.2387E+01 4.3568E-02 3.7287E-02 1.8112E-02 1.4801E-02 - 2.5119E+01 3.0765E-02 2.7337E-02 1.2976E-02 9.7509E-03 - 2.8184E+01 2.1712E-02 1.9712E-02 9.4441E-03 7.2027E-03 - 3.1623E+01 1.5640E-02 1.4114E-02 6.6002E-03 5.0186E-03 - 3.5481E+01 1.1179E-02 1.0015E-02 4.5331E-03 3.4604E-03 - 3.9811E+01 8.0236E-03 7.1211E-03 3.1078E-03 2.3802E-03 - 4.4668E+01 5.7372E-03 5.0406E-03 2.1234E-03 1.6415E-03 - 5.0119E+01 4.1022E-03 3.5751E-03 1.4540E-03 1.1190E-03 - 5.6234E+01 2.9266E-03 2.5380E-03 9.9380E-04 7.5853E-04 - 6.3096E+01 2.0827E-03 1.7970E-03 6.7575E-04 5.1736E-04 - 7.0795E+01 1.4895E-03 1.2709E-03 4.5593E-04 3.5232E-04 - 7.9433E+01 1.0631E-03 8.9344E-04 3.0322E-04 2.3787E-04 - 8.9125E+01 7.5504E-04 6.3290E-04 2.0466E-04 1.5989E-04 - 1.0000E+02 5.3921E-04 4.4583E-04 1.3819E-04 1.0690E-04 - 1.1220E+02 3.8445E-04 3.1451E-04 9.2437E-05 7.1674E-05 - 1.2589E+02 2.7295E-04 2.2127E-04 6.1748E-05 4.8126E-05 - 1.4125E+02 1.9382E-04 1.5527E-04 4.1063E-05 3.2060E-05 - 1.5849E+02 1.3700E-04 1.0915E-04 2.7278E-05 2.1240E-05 - 1.7783E+02 9.6812E-05 7.6573E-05 1.8099E-05 1.4089E-05 - 1.9953E+02 6.8572E-05 5.3670E-05 1.1946E-05 9.4639E-06 - 2.2387E+02 4.8568E-05 3.7491E-05 7.9096E-06 6.2578E-06 - 2.5119E+02 3.4198E-05 2.6101E-05 5.2255E-06 4.1089E-06 - 2.8184E+02 2.4060E-05 1.8206E-05 3.4370E-06 2.7335E-06 - 3.1623E+02 1.7021E-05 1.2737E-05 2.2684E-06 1.7975E-06 - 3.5481E+02 1.1945E-05 8.8971E-06 1.4901E-06 1.1804E-06 - 3.9811E+02 8.3718E-06 6.1809E-06 9.6803E-07 7.7595E-07 - 4.4668E+02 5.8998E-06 4.2957E-06 6.4389E-07 5.1217E-07 - 5.0119E+02 4.1526E-06 2.9811E-06 4.2468E-07 3.3567E-07 - 5.6234E+02 2.8982E-06 2.0731E-06 2.8047E-07 2.2009E-07 - 6.3096E+02 2.0295E-06 1.4391E-06 1.8489E-07 1.4463E-07 - 7.0795E+02 1.4165E-06 9.9687E-07 1.2164E-07 9.5436E-08 - 7.9433E+02 9.9033E-07 6.8951E-07 7.9698E-08 6.3102E-08 - 8.9125E+02 6.9270E-07 4.7769E-07 5.2622E-08 4.2011E-08 - 1.0000E+03 4.8235E-07 3.2912E-07 3.4630E-08 2.7300E-08 - 1.1220E+03 3.3671E-07 2.2816E-07 2.3112E-08 1.7951E-08 - 1.2589E+03 2.3502E-07 1.5712E-07 1.5084E-08 1.1925E-08 - 1.4125E+03 1.6308E-07 1.0827E-07 9.9643E-09 7.9589E-09 - 1.5849E+03 1.1352E-07 7.4714E-08 6.6988E-09 5.3354E-09 - 1.7783E+03 7.9268E-08 5.1133E-08 4.4780E-09 3.5363E-09 - 1.9953E+03 5.4974E-08 3.5205E-08 2.8793E-09 2.3260E-09 - 2.2387E+03 3.8068E-08 2.4178E-08 1.9053E-09 1.5085E-09 - 2.5119E+03 2.6300E-08 1.6590E-08 1.2933E-09 1.0079E-09 - 2.8184E+03 1.8090E-08 1.1350E-08 8.7355E-10 6.6845E-10 - 3.1623E+03 1.2713E-08 7.8236E-09 5.7257E-10 4.3896E-10 - 3.5481E+03 8.6813E-09 5.3091E-09 3.7722E-10 2.9346E-10 - 3.9811E+03 5.9891E-09 3.6216E-09 2.5256E-10 1.8804E-10 - 4.4668E+03 4.1080E-09 2.4795E-09 1.7171E-10 1.2396E-10 - 5.0119E+03 2.8050E-09 1.6764E-09 1.1427E-10 8.3221E-11 - 5.6234E+03 1.9244E-09 1.1383E-09 7.4952E-11 5.5490E-11 - 6.3096E+03 1.3118E-09 7.6927E-10 4.8423E-11 3.6131E-11 - 7.0795E+03 8.9384E-10 5.1868E-10 3.2469E-11 2.4110E-11 - 7.9433E+03 6.0778E-10 3.4893E-10 2.0830E-11 1.5265E-11 - 8.9125E+03 4.1198E-10 2.3425E-10 1.4112E-11 9.8980E-12 - 1.0000E+04 2.7824E-10 1.5468E-10 9.5534E-12 6.9792E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3790E+04 5.5662E+04 2.7186E+04 2.4147E+04 - 1.1220E-01 4.4410E+04 4.5628E+04 2.2741E+04 2.0051E+04 - 1.2589E-01 3.6660E+04 3.7340E+04 1.8888E+04 1.6372E+04 - 1.4125E-01 2.9781E+04 3.0332E+04 1.5689E+04 1.3107E+04 - 1.5849E-01 2.3809E+04 2.4266E+04 1.2673E+04 1.0572E+04 - 1.7783E-01 1.8740E+04 1.9314E+04 1.0153E+04 8.3842E+03 - 1.9953E-01 1.4654E+04 1.5131E+04 8.0766E+03 6.6306E+03 - 2.2387E-01 1.1302E+04 1.1635E+04 6.3062E+03 5.1524E+03 - 2.5119E-01 8.6234E+03 8.9192E+03 4.8756E+03 3.9969E+03 - 2.8184E-01 6.5418E+03 6.7276E+03 3.7880E+03 3.0810E+03 - 3.1623E-01 4.8752E+03 5.0323E+03 2.9166E+03 2.2893E+03 - 3.5481E-01 3.6125E+03 3.7346E+03 2.2590E+03 1.7315E+03 - 3.9811E-01 2.7279E+03 2.7642E+03 1.7237E+03 1.2804E+03 - 4.4668E-01 2.0333E+03 2.0655E+03 1.2783E+03 9.4879E+02 - 5.0119E-01 1.4570E+03 1.5293E+03 9.3472E+02 7.0385E+02 - 5.6234E-01 1.0705E+03 1.1175E+03 6.8439E+02 5.1878E+02 - 6.3096E-01 7.8185E+02 8.0821E+02 5.1404E+02 3.8114E+02 - 7.0795E-01 5.6523E+02 5.8313E+02 3.7789E+02 2.8723E+02 - 7.9433E-01 4.1557E+02 4.3175E+02 2.7719E+02 2.0800E+02 - 8.9125E-01 3.1384E+02 3.3462E+02 2.0788E+02 1.4462E+02 - 1.0000E+00 2.2941E+02 2.4003E+02 1.4938E+02 1.0738E+02 - 1.1220E+00 1.6559E+02 1.7222E+02 1.0974E+02 7.7280E+01 - 1.2589E+00 1.2311E+02 1.2480E+02 8.0763E+01 5.5653E+01 - 1.4125E+00 9.1379E+01 9.1352E+01 5.9857E+01 4.0669E+01 - 1.5849E+00 6.5996E+01 6.6891E+01 4.4603E+01 3.0476E+01 - 1.7783E+00 4.8612E+01 4.9098E+01 3.2383E+01 2.3398E+01 - 1.9953E+00 3.6600E+01 3.6481E+01 2.4074E+01 1.6948E+01 - 2.2387E+00 2.7187E+01 2.6941E+01 1.7306E+01 1.2031E+01 - 2.5119E+00 1.9465E+01 1.9692E+01 1.2752E+01 8.9702E+00 - 2.8184E+00 1.4603E+01 1.4681E+01 9.1631E+00 6.6446E+00 - 3.1623E+00 1.0411E+01 1.0482E+01 6.5658E+00 4.6417E+00 - 3.5481E+00 7.5573E+00 7.7336E+00 4.8118E+00 3.3885E+00 - 3.9811E+00 5.5856E+00 5.6207E+00 3.4810E+00 2.5080E+00 - 4.4668E+00 4.0932E+00 4.0835E+00 2.5006E+00 1.8335E+00 - 5.0119E+00 2.9171E+00 2.9303E+00 1.8722E+00 1.2892E+00 - 5.6234E+00 2.1211E+00 2.0854E+00 1.3177E+00 9.2553E-01 - 6.3096E+00 1.5780E+00 1.4785E+00 9.3699E-01 6.7939E-01 - 7.0795E+00 1.1342E+00 1.0692E+00 6.8610E-01 4.9345E-01 - 7.9433E+00 8.0697E-01 7.7815E-01 4.7237E-01 3.3162E-01 - 8.9125E+00 5.7867E-01 5.6363E-01 3.2116E-01 2.3959E-01 - 1.0000E+01 4.1731E-01 4.1008E-01 2.3367E-01 1.7512E-01 - 1.1220E+01 2.9640E-01 2.8988E-01 1.6712E-01 1.1997E-01 - 1.2589E+01 2.1746E-01 2.0472E-01 1.2022E-01 8.3796E-02 - 1.4125E+01 1.6012E-01 1.4572E-01 8.3101E-02 5.9475E-02 - 1.5849E+01 1.1367E-01 1.0534E-01 5.8693E-02 4.1786E-02 - 1.7783E+01 8.1166E-02 7.6261E-02 3.9197E-02 2.9574E-02 - 1.9953E+01 5.5544E-02 5.2876E-02 2.6959E-02 2.0653E-02 - 2.2387E+01 3.9824E-02 3.7121E-02 1.9358E-02 1.3879E-02 - 2.5119E+01 2.9509E-02 2.7181E-02 1.3310E-02 9.3098E-03 - 2.8184E+01 2.0614E-02 1.9611E-02 9.5594E-03 6.5960E-03 - 3.1623E+01 1.5676E-02 1.4120E-02 6.6070E-03 4.9974E-03 - 3.5481E+01 1.1232E-02 1.0035E-02 4.5341E-03 3.4644E-03 - 3.9811E+01 8.0419E-03 7.1306E-03 3.1168E-03 2.3865E-03 - 4.4668E+01 5.7497E-03 5.0382E-03 2.1322E-03 1.6313E-03 - 5.0119E+01 4.1019E-03 3.5727E-03 1.4539E-03 1.1161E-03 - 5.6234E+01 2.9274E-03 2.5321E-03 9.9234E-04 7.5906E-04 - 6.3096E+01 2.0866E-03 1.7895E-03 6.7072E-04 5.1136E-04 - 7.0795E+01 1.4837E-03 1.2635E-03 4.5459E-04 3.4533E-04 - 7.9433E+01 1.0609E-03 8.9371E-04 3.0724E-04 2.3576E-04 - 8.9125E+01 7.5434E-04 6.3164E-04 2.0529E-04 1.6107E-04 - 1.0000E+02 5.4013E-04 4.4558E-04 1.3801E-04 1.0721E-04 - 1.1220E+02 3.8413E-04 3.1434E-04 9.2115E-05 7.1871E-05 - 1.2589E+02 2.7276E-04 2.2084E-04 6.1640E-05 4.8097E-05 - 1.4125E+02 1.9325E-04 1.5516E-04 4.1500E-05 3.2033E-05 - 1.5849E+02 1.3663E-04 1.0924E-04 2.7629E-05 2.1377E-05 - 1.7783E+02 9.6690E-05 7.6768E-05 1.8153E-05 1.4057E-05 - 1.9953E+02 6.8403E-05 5.3641E-05 1.2014E-05 9.2301E-06 - 2.2387E+02 4.8412E-05 3.7528E-05 7.9401E-06 6.1449E-06 - 2.5119E+02 3.4100E-05 2.6284E-05 5.2267E-06 4.0830E-06 - 2.8184E+02 2.4013E-05 1.8317E-05 3.4613E-06 2.7001E-06 - 3.1623E+02 1.6948E-05 1.2748E-05 2.2607E-06 1.7810E-06 - 3.5481E+02 1.1910E-05 8.8947E-06 1.4945E-06 1.1821E-06 - 3.9811E+02 8.3861E-06 6.1853E-06 9.8339E-07 7.8756E-07 - 4.4668E+02 5.8893E-06 4.2823E-06 6.4747E-07 5.1396E-07 - 5.0119E+02 4.1114E-06 2.9722E-06 4.2538E-07 3.4008E-07 - 5.6234E+02 2.8933E-06 2.0704E-06 2.8054E-07 2.2191E-07 - 6.3096E+02 2.0252E-06 1.4385E-06 1.8350E-07 1.4465E-07 - 7.0795E+02 1.4153E-06 1.0001E-06 1.2084E-07 9.4646E-08 - 7.9433E+02 9.8708E-07 6.9006E-07 7.9455E-08 6.2673E-08 - 8.9125E+02 6.9184E-07 4.7673E-07 5.2440E-08 4.0997E-08 - 1.0000E+03 4.8473E-07 3.2785E-07 3.4411E-08 2.7638E-08 - 1.1220E+03 3.3677E-07 2.2562E-07 2.2737E-08 1.8505E-08 - 1.2589E+03 2.3476E-07 1.5586E-07 1.5213E-08 1.2033E-08 - 1.4125E+03 1.6315E-07 1.0777E-07 1.0071E-08 7.9337E-09 - 1.5849E+03 1.1392E-07 7.4594E-08 6.5822E-09 5.1882E-09 - 1.7783E+03 7.9364E-08 5.1201E-08 4.2729E-09 3.4024E-09 - 1.9953E+03 5.5204E-08 3.5237E-08 2.8800E-09 2.2577E-09 - 2.2387E+03 3.8258E-08 2.4130E-08 1.9499E-09 1.5171E-09 - 2.5119E+03 2.6523E-08 1.6499E-08 1.3044E-09 9.9397E-10 - 2.8184E+03 1.8326E-08 1.1333E-08 8.4521E-10 6.4215E-10 - 3.1623E+03 1.2676E-08 7.8299E-09 5.6624E-10 4.4374E-10 - 3.5481E+03 8.7011E-09 5.3259E-09 3.8580E-10 2.9619E-10 - 3.9811E+03 5.9716E-09 3.6697E-09 2.5672E-10 1.9871E-10 - 4.4668E+03 4.1029E-09 2.4780E-09 1.6793E-10 1.3046E-10 - 5.0119E+03 2.7840E-09 1.6749E-09 1.0947E-10 8.4238E-11 - 5.6234E+03 1.9021E-09 1.1332E-09 7.3629E-11 5.3336E-11 - 6.3096E+03 1.3136E-09 7.7077E-10 4.8114E-11 3.5356E-11 - 7.0795E+03 8.9182E-10 5.2256E-10 3.1477E-11 2.3292E-11 - 7.9433E+03 6.0479E-10 3.5183E-10 2.1021E-11 1.5502E-11 - 8.9125E+03 4.0844E-10 2.3247E-10 1.4605E-11 1.0078E-11 - 1.0000E+04 2.7687E-10 1.5572E-10 9.8340E-12 6.4981E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4475E+04 5.6994E+04 2.8088E+04 2.4062E+04 - 1.1220E-01 4.4531E+04 4.6966E+04 2.3416E+04 1.9931E+04 - 1.2589E-01 3.6632E+04 3.8432E+04 1.9384E+04 1.6377E+04 - 1.4125E-01 2.9724E+04 3.0782E+04 1.5987E+04 1.3077E+04 - 1.5849E-01 2.3838E+04 2.4665E+04 1.3083E+04 1.0404E+04 - 1.7783E-01 1.8967E+04 1.9705E+04 1.0451E+04 8.3103E+03 - 1.9953E-01 1.4796E+04 1.5371E+04 8.3918E+03 6.5456E+03 - 2.2387E-01 1.1453E+04 1.1963E+04 6.7070E+03 5.0322E+03 - 2.5119E-01 8.6930E+03 9.1644E+03 5.2181E+03 3.8768E+03 - 2.8184E-01 6.5489E+03 6.9431E+03 4.0654E+03 2.9837E+03 - 3.1623E-01 4.9174E+03 5.2585E+03 3.1132E+03 2.2518E+03 - 3.5481E-01 3.7102E+03 3.9595E+03 2.3567E+03 1.7227E+03 - 3.9811E-01 2.7587E+03 2.9639E+03 1.7697E+03 1.2792E+03 - 4.4668E-01 2.0209E+03 2.2070E+03 1.3413E+03 9.3505E+02 - 5.0119E-01 1.4928E+03 1.6096E+03 9.8860E+02 6.8537E+02 - 5.6234E-01 1.0939E+03 1.1771E+03 7.0785E+02 5.0578E+02 - 6.3096E-01 7.8695E+02 8.6775E+02 5.3100E+02 3.7275E+02 - 7.0795E-01 5.6906E+02 6.2267E+02 4.0525E+02 2.6940E+02 - 7.9433E-01 4.1528E+02 4.6575E+02 3.0270E+02 1.8934E+02 - 8.9125E-01 3.0492E+02 3.5190E+02 2.2130E+02 1.3304E+02 - 1.0000E+00 2.2982E+02 2.4843E+02 1.6091E+02 1.0180E+02 - 1.1220E+00 1.6776E+02 1.8173E+02 1.1898E+02 7.4390E+01 - 1.2589E+00 1.2504E+02 1.3375E+02 8.8165E+01 5.4467E+01 - 1.4125E+00 9.2409E+01 9.9391E+01 6.4510E+01 4.1459E+01 - 1.5849E+00 6.6480E+01 7.2781E+01 4.6462E+01 3.1262E+01 - 1.7783E+00 4.8752E+01 5.2371E+01 3.4266E+01 2.2064E+01 - 1.9953E+00 3.6282E+01 3.8585E+01 2.5988E+01 1.5181E+01 - 2.2387E+00 2.6909E+01 2.8015E+01 1.8700E+01 1.1330E+01 - 2.5119E+00 1.9394E+01 2.0624E+01 1.3471E+01 8.4022E+00 - 2.8184E+00 1.4205E+01 1.5079E+01 9.7643E+00 6.0137E+00 - 3.1623E+00 1.0228E+01 1.1259E+01 7.1144E+00 4.4222E+00 - 3.5481E+00 7.4011E+00 8.2785E+00 5.0530E+00 3.2429E+00 - 3.9811E+00 5.4368E+00 5.9867E+00 3.7634E+00 2.3379E+00 - 4.4668E+00 4.0111E+00 4.1937E+00 2.7267E+00 1.6609E+00 - 5.0119E+00 2.9419E+00 2.9863E+00 1.8712E+00 1.1565E+00 - 5.6234E+00 2.1741E+00 2.2171E+00 1.3290E+00 8.4528E-01 - 6.3096E+00 1.5981E+00 1.6226E+00 9.7515E-01 6.4092E-01 - 7.0795E+00 1.1333E+00 1.1572E+00 7.0198E-01 4.7269E-01 - 7.9433E+00 8.2725E-01 8.4480E-01 5.0199E-01 3.3160E-01 - 8.9125E+00 5.9315E-01 6.0380E-01 3.4748E-01 2.2057E-01 - 1.0000E+01 4.1574E-01 4.0935E-01 2.4970E-01 1.5935E-01 - 1.1220E+01 2.9458E-01 2.9054E-01 1.7269E-01 1.1379E-01 - 1.2589E+01 2.1334E-01 2.1252E-01 1.2157E-01 7.9290E-02 - 1.4125E+01 1.5428E-01 1.5747E-01 8.5014E-02 5.4895E-02 - 1.5849E+01 1.1230E-01 1.1054E-01 5.7956E-02 4.0043E-02 - 1.7783E+01 8.1492E-02 7.5727E-02 4.1640E-02 2.8897E-02 - 1.9953E+01 5.8979E-02 5.3974E-02 2.9452E-02 2.1749E-02 - 2.2387E+01 4.4241E-02 3.8646E-02 1.9359E-02 1.4546E-02 - 2.5119E+01 3.1574E-02 2.7714E-02 1.2144E-02 9.8050E-03 - 2.8184E+01 2.0879E-02 2.0006E-02 8.7970E-03 6.5530E-03 - 3.1623E+01 1.5662E-02 1.4144E-02 6.5960E-03 5.0163E-03 - 3.5481E+01 1.1203E-02 1.0068E-02 4.5595E-03 3.4551E-03 - 3.9811E+01 8.0097E-03 7.1227E-03 3.1228E-03 2.3760E-03 - 4.4668E+01 5.7310E-03 5.0529E-03 2.1337E-03 1.6289E-03 - 5.0119E+01 4.1082E-03 3.5753E-03 1.4491E-03 1.1134E-03 - 5.6234E+01 2.9317E-03 2.5315E-03 9.8077E-04 7.5687E-04 - 6.3096E+01 2.0964E-03 1.7940E-03 6.6444E-04 5.1689E-04 - 7.0795E+01 1.4949E-03 1.2658E-03 4.5084E-04 3.5292E-04 - 7.9433E+01 1.0666E-03 8.9037E-04 3.0709E-04 2.3467E-04 - 8.9125E+01 7.5951E-04 6.2689E-04 2.0647E-04 1.5726E-04 - 1.0000E+02 5.3872E-04 4.4506E-04 1.3808E-04 1.0764E-04 - 1.1220E+02 3.8260E-04 3.1397E-04 9.2111E-05 7.2384E-05 - 1.2589E+02 2.7184E-04 2.2059E-04 6.1573E-05 4.8230E-05 - 1.4125E+02 1.9262E-04 1.5466E-04 4.0869E-05 3.1993E-05 - 1.5849E+02 1.3630E-04 1.0869E-04 2.7110E-05 2.1233E-05 - 1.7783E+02 9.6541E-05 7.6016E-05 1.7957E-05 1.4197E-05 - 1.9953E+02 6.8087E-05 5.3178E-05 1.1890E-05 9.4881E-06 - 2.2387E+02 4.8198E-05 3.7275E-05 7.8888E-06 6.1971E-06 - 2.5119E+02 3.4111E-05 2.5965E-05 5.2149E-06 4.0421E-06 - 2.8184E+02 2.4080E-05 1.8077E-05 3.4368E-06 2.6710E-06 - 3.1623E+02 1.7012E-05 1.2727E-05 2.2663E-06 1.7890E-06 - 3.5481E+02 1.1972E-05 8.8666E-06 1.4814E-06 1.1890E-06 - 3.9811E+02 8.4248E-06 6.1662E-06 9.6694E-07 7.8017E-07 - 4.4668E+02 5.9255E-06 4.2771E-06 6.3501E-07 5.1316E-07 - 5.0119E+02 4.1481E-06 2.9727E-06 4.2422E-07 3.4150E-07 - 5.6234E+02 2.9039E-06 2.0733E-06 2.7758E-07 2.2136E-07 - 6.3096E+02 2.0315E-06 1.4364E-06 1.8226E-07 1.4563E-07 - 7.0795E+02 1.4247E-06 9.9468E-07 1.2005E-07 9.5200E-08 - 7.9433E+02 9.9587E-07 6.8863E-07 7.9101E-08 6.1873E-08 - 8.9125E+02 6.9569E-07 4.7481E-07 5.2522E-08 4.1325E-08 - 1.0000E+03 4.8509E-07 3.2864E-07 3.4265E-08 2.7390E-08 - 1.1220E+03 3.3753E-07 2.2686E-07 2.2638E-08 1.7961E-08 - 1.2589E+03 2.3568E-07 1.5556E-07 1.4964E-08 1.2084E-08 - 1.4125E+03 1.6411E-07 1.0705E-07 1.0002E-08 7.9670E-09 - 1.5849E+03 1.1344E-07 7.4312E-08 6.6076E-09 5.1406E-09 - 1.7783E+03 7.8876E-08 5.1009E-08 4.3370E-09 3.4664E-09 - 1.9953E+03 5.5132E-08 3.5299E-08 2.9104E-09 2.3063E-09 - 2.2387E+03 3.8068E-08 2.4232E-08 1.9430E-09 1.5135E-09 - 2.5119E+03 2.6385E-08 1.6619E-08 1.2680E-09 1.0046E-09 - 2.8184E+03 1.8275E-08 1.1382E-08 8.6888E-10 6.6689E-10 - 3.1623E+03 1.2703E-08 7.8463E-09 5.8041E-10 4.4046E-10 - 3.5481E+03 8.6941E-09 5.3485E-09 3.8489E-10 2.9013E-10 - 3.9811E+03 5.9603E-09 3.6202E-09 2.5511E-10 1.9002E-10 - 4.4668E+03 4.0536E-09 2.4548E-09 1.6676E-10 1.2434E-10 - 5.0119E+03 2.7869E-09 1.6786E-09 1.1028E-10 8.3605E-11 - 5.6234E+03 1.9287E-09 1.1347E-09 7.3835E-11 5.7309E-11 - 6.3096E+03 1.3068E-09 7.6829E-10 4.8735E-11 3.6917E-11 - 7.0795E+03 8.8779E-10 5.1925E-10 3.2919E-11 2.3555E-11 - 7.9433E+03 6.0667E-10 3.5064E-10 2.0832E-11 1.5253E-11 - 8.9125E+03 4.1287E-10 2.3116E-10 1.3335E-11 1.0548E-11 - 1.0000E+04 2.7768E-10 1.5395E-10 9.4106E-12 7.0536E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4476E+04 5.6944E+04 2.8219E+04 2.3628E+04 - 1.1220E-01 4.4810E+04 4.6974E+04 2.3575E+04 1.9635E+04 - 1.2589E-01 3.6712E+04 3.8314E+04 1.9685E+04 1.6150E+04 - 1.4125E-01 2.9634E+04 3.1018E+04 1.6248E+04 1.2903E+04 - 1.5849E-01 2.3787E+04 2.5030E+04 1.3194E+04 1.0297E+04 - 1.7783E-01 1.9032E+04 2.0047E+04 1.0682E+04 8.2709E+03 - 1.9953E-01 1.4875E+04 1.5781E+04 8.5681E+03 6.4932E+03 - 2.2387E-01 1.1351E+04 1.2268E+04 6.8176E+03 5.0248E+03 - 2.5119E-01 8.6872E+03 9.3429E+03 5.3529E+03 3.8829E+03 - 2.8184E-01 6.6209E+03 7.0587E+03 4.1580E+03 2.9744E+03 - 3.1623E-01 4.9023E+03 5.2980E+03 3.1659E+03 2.2294E+03 - 3.5481E-01 3.6559E+03 3.9474E+03 2.4288E+03 1.6951E+03 - 3.9811E-01 2.7778E+03 2.9632E+03 1.8417E+03 1.2428E+03 - 4.4668E-01 2.0410E+03 2.2359E+03 1.3808E+03 9.0408E+02 - 5.0119E-01 1.4593E+03 1.6664E+03 1.0533E+03 6.7902E+02 - 5.6234E-01 1.0629E+03 1.1977E+03 7.8496E+02 4.9262E+02 - 6.3096E-01 7.8206E+02 8.7096E+02 5.7804E+02 3.6887E+02 - 7.0795E-01 5.7042E+02 6.3668E+02 4.2566E+02 2.7470E+02 - 7.9433E-01 4.1450E+02 4.7554E+02 3.0817E+02 2.0002E+02 - 8.9125E-01 3.0036E+02 3.5185E+02 2.2359E+02 1.4220E+02 - 1.0000E+00 2.2723E+02 2.5808E+02 1.6783E+02 9.9706E+01 - 1.1220E+00 1.6955E+02 1.8550E+02 1.2433E+02 7.1860E+01 - 1.2589E+00 1.2357E+02 1.3734E+02 9.2495E+01 5.3314E+01 - 1.4125E+00 8.9913E+01 1.0322E+02 6.6836E+01 3.9782E+01 - 1.5849E+00 6.6715E+01 7.4775E+01 4.9001E+01 2.8921E+01 - 1.7783E+00 4.9632E+01 5.4007E+01 3.6691E+01 2.0792E+01 - 1.9953E+00 3.6583E+01 4.0182E+01 2.6142E+01 1.4951E+01 - 2.2387E+00 2.6466E+01 2.9761E+01 1.8731E+01 1.0888E+01 - 2.5119E+00 1.9372E+01 2.1291E+01 1.4443E+01 8.3190E+00 - 2.8184E+00 1.4090E+01 1.5496E+01 1.0656E+01 6.2231E+00 - 3.1623E+00 1.0133E+01 1.1365E+01 7.3251E+00 4.3297E+00 - 3.5481E+00 7.5034E+00 8.0598E+00 5.2855E+00 3.2004E+00 - 3.9811E+00 5.5199E+00 5.8702E+00 3.8059E+00 2.2689E+00 - 4.4668E+00 4.0635E+00 4.3502E+00 2.7842E+00 1.6445E+00 - 5.0119E+00 2.9184E+00 3.1101E+00 2.0631E+00 1.1925E+00 - 5.6234E+00 2.0593E+00 2.2156E+00 1.4833E+00 8.3842E-01 - 6.3096E+00 1.4996E+00 1.6241E+00 9.9843E-01 6.1206E-01 - 7.0795E+00 1.1207E+00 1.1560E+00 6.8383E-01 4.4790E-01 - 7.9433E+00 8.2270E-01 7.9993E-01 5.0784E-01 3.3734E-01 - 8.9125E+00 5.7910E-01 5.8955E-01 3.5991E-01 2.3334E-01 - 1.0000E+01 4.1943E-01 4.2240E-01 2.4184E-01 1.6707E-01 - 1.1220E+01 3.0256E-01 3.0643E-01 1.6992E-01 1.1961E-01 - 1.2589E+01 2.2164E-01 2.1892E-01 1.1909E-01 8.4515E-02 - 1.4125E+01 1.5883E-01 1.5567E-01 8.4881E-02 6.0762E-02 - 1.5849E+01 1.1327E-01 1.0950E-01 5.7745E-02 4.2712E-02 - 1.7783E+01 8.0769E-02 7.6037E-02 4.0367E-02 2.9143E-02 - 1.9953E+01 5.8448E-02 5.4752E-02 2.9308E-02 2.0211E-02 - 2.2387E+01 4.1963E-02 3.9043E-02 1.9870E-02 1.4495E-02 - 2.5119E+01 2.9882E-02 2.7432E-02 1.3915E-02 9.5124E-03 - 2.8184E+01 2.1680E-02 1.9808E-02 9.5116E-03 6.4524E-03 - 3.1623E+01 1.5687E-02 1.4121E-02 6.6133E-03 5.0414E-03 - 3.5481E+01 1.1207E-02 1.0044E-02 4.5507E-03 3.4749E-03 - 3.9811E+01 8.0187E-03 7.1401E-03 3.1199E-03 2.3863E-03 - 4.4668E+01 5.7409E-03 5.0556E-03 2.1428E-03 1.6361E-03 - 5.0119E+01 4.1011E-03 3.5742E-03 1.4604E-03 1.1137E-03 - 5.6234E+01 2.9282E-03 2.5290E-03 9.8924E-04 7.5563E-04 - 6.3096E+01 2.0868E-03 1.7936E-03 6.6808E-04 5.1745E-04 - 7.0795E+01 1.4886E-03 1.2665E-03 4.5171E-04 3.5144E-04 - 7.9433E+01 1.0622E-03 8.9369E-04 3.0595E-04 2.3693E-04 - 8.9125E+01 7.5663E-04 6.2786E-04 2.0600E-04 1.6083E-04 - 1.0000E+02 5.3829E-04 4.4434E-04 1.3740E-04 1.0765E-04 - 1.1220E+02 3.8306E-04 3.1314E-04 9.2407E-05 7.2198E-05 - 1.2589E+02 2.7244E-04 2.2040E-04 6.1995E-05 4.8239E-05 - 1.4125E+02 1.9303E-04 1.5488E-04 4.1150E-05 3.1847E-05 - 1.5849E+02 1.3691E-04 1.0895E-04 2.7221E-05 2.1212E-05 - 1.7783E+02 9.7316E-05 7.6339E-05 1.8149E-05 1.4227E-05 - 1.9953E+02 6.8780E-05 5.3366E-05 1.2141E-05 9.4405E-06 - 2.2387E+02 4.8366E-05 3.7314E-05 7.9690E-06 6.2104E-06 - 2.5119E+02 3.4218E-05 2.6097E-05 5.2604E-06 4.1412E-06 - 2.8184E+02 2.4246E-05 1.8243E-05 3.4969E-06 2.7456E-06 - 3.1623E+02 1.7001E-05 1.2782E-05 2.2877E-06 1.7956E-06 - 3.5481E+02 1.1951E-05 8.9196E-06 1.4968E-06 1.1854E-06 - 3.9811E+02 8.4004E-06 6.2010E-06 9.8052E-07 7.8463E-07 - 4.4668E+02 5.8930E-06 4.2961E-06 6.4237E-07 5.1666E-07 - 5.0119E+02 4.1289E-06 2.9889E-06 4.2207E-07 3.4237E-07 - 5.6234E+02 2.8972E-06 2.0735E-06 2.7697E-07 2.2245E-07 - 6.3096E+02 2.0292E-06 1.4354E-06 1.8426E-07 1.4532E-07 - 7.0795E+02 1.4199E-06 9.9532E-07 1.2041E-07 9.5596E-08 - 7.9433E+02 9.9688E-07 6.8678E-07 7.7969E-08 6.3167E-08 - 8.9125E+02 6.9776E-07 4.7472E-07 5.1843E-08 4.2006E-08 - 1.0000E+03 4.8378E-07 3.2998E-07 3.4694E-08 2.7575E-08 - 1.1220E+03 3.3620E-07 2.2753E-07 2.3035E-08 1.8190E-08 - 1.2589E+03 2.3416E-07 1.5800E-07 1.5304E-08 1.1948E-08 - 1.4125E+03 1.6335E-07 1.0902E-07 1.0006E-08 7.8614E-09 - 1.5849E+03 1.1398E-07 7.4525E-08 6.6050E-09 5.1540E-09 - 1.7783E+03 7.9501E-08 5.1391E-08 4.3014E-09 3.3401E-09 - 1.9953E+03 5.5028E-08 3.5254E-08 2.8698E-09 2.2134E-09 - 2.2387E+03 3.8049E-08 2.4218E-08 1.9017E-09 1.5181E-09 - 2.5119E+03 2.6378E-08 1.6614E-08 1.2287E-09 1.0306E-09 - 2.8184E+03 1.8218E-08 1.1348E-08 8.4139E-10 6.8232E-10 - 3.1623E+03 1.2710E-08 7.8127E-09 5.8312E-10 4.3790E-10 - 3.5481E+03 8.6865E-09 5.2825E-09 3.8060E-10 2.7998E-10 - 3.9811E+03 5.9787E-09 3.5998E-09 2.4691E-10 1.8916E-10 - 4.4668E+03 4.0747E-09 2.4440E-09 1.6030E-10 1.2964E-10 - 5.0119E+03 2.8023E-09 1.6726E-09 1.0796E-10 8.4521E-11 - 5.6234E+03 1.9303E-09 1.1456E-09 7.5689E-11 5.3157E-11 - 6.3096E+03 1.3060E-09 7.6971E-10 4.8857E-11 3.5293E-11 - 7.0795E+03 8.8732E-10 5.2037E-10 3.2503E-11 2.3616E-11 - 7.9433E+03 6.0057E-10 3.5125E-10 2.1283E-11 1.5705E-11 - 8.9125E+03 4.0926E-10 2.3353E-10 1.4119E-11 1.0231E-11 - 1.0000E+04 2.7849E-10 1.5664E-10 9.1761E-12 6.8251E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4310E+04 5.6979E+04 2.8315E+04 2.3696E+04 - 1.1220E-01 4.4516E+04 4.6460E+04 2.3695E+04 1.9590E+04 - 1.2589E-01 3.6473E+04 3.7914E+04 1.9715E+04 1.6027E+04 - 1.4125E-01 2.9845E+04 3.0954E+04 1.6099E+04 1.2919E+04 - 1.5849E-01 2.3955E+04 2.5020E+04 1.2975E+04 1.0402E+04 - 1.7783E-01 1.8907E+04 1.9913E+04 1.0506E+04 8.2914E+03 - 1.9953E-01 1.4770E+04 1.5634E+04 8.5180E+03 6.4289E+03 - 2.2387E-01 1.1387E+04 1.2139E+04 6.7640E+03 4.9779E+03 - 2.5119E-01 8.6530E+03 9.2410E+03 5.2867E+03 3.8593E+03 - 2.8184E-01 6.4901E+03 7.0003E+03 4.1016E+03 2.9860E+03 - 3.1623E-01 4.8549E+03 5.2676E+03 3.1746E+03 2.2764E+03 - 3.5481E-01 3.6400E+03 3.9668E+03 2.3910E+03 1.6789E+03 - 3.9811E-01 2.7483E+03 2.9794E+03 1.7913E+03 1.2527E+03 - 4.4668E-01 2.0383E+03 2.1987E+03 1.3691E+03 9.2678E+02 - 5.0119E-01 1.4840E+03 1.6402E+03 1.0222E+03 6.8562E+02 - 5.6234E-01 1.0760E+03 1.2279E+03 7.5599E+02 5.1134E+02 - 6.3096E-01 7.7968E+02 8.8618E+02 5.8216E+02 3.6960E+02 - 7.0795E-01 5.7679E+02 6.5033E+02 4.2913E+02 2.6789E+02 - 7.9433E-01 4.1976E+02 4.7592E+02 3.1017E+02 1.8869E+02 - 8.9125E-01 3.0501E+02 3.4545E+02 2.2351E+02 1.3080E+02 - 1.0000E+00 2.2694E+02 2.5413E+02 1.6268E+02 9.8695E+01 - 1.1220E+00 1.6845E+02 1.8809E+02 1.2368E+02 7.3696E+01 - 1.2589E+00 1.2441E+02 1.3812E+02 9.1352E+01 5.2966E+01 - 1.4125E+00 9.0281E+01 1.0094E+02 6.5132E+01 3.9053E+01 - 1.5849E+00 6.6059E+01 7.4274E+01 4.7946E+01 2.8588E+01 - 1.7783E+00 4.7860E+01 5.5004E+01 3.4888E+01 2.0923E+01 - 1.9953E+00 3.5030E+01 4.0407E+01 2.5557E+01 1.4951E+01 - 2.2387E+00 2.6105E+01 2.9030E+01 1.9201E+01 1.0855E+01 - 2.5119E+00 1.8876E+01 2.0787E+01 1.4106E+01 8.0340E+00 - 2.8184E+00 1.3955E+01 1.5170E+01 1.0045E+01 5.8019E+00 - 3.1623E+00 9.9246E+00 1.1214E+01 7.2840E+00 4.1845E+00 - 3.5481E+00 7.2743E+00 8.2236E+00 5.3046E+00 3.0078E+00 - 3.9811E+00 5.4364E+00 5.8758E+00 3.6649E+00 2.1686E+00 - 4.4668E+00 3.9699E+00 4.2408E+00 2.6189E+00 1.6159E+00 - 5.0119E+00 2.8449E+00 3.0964E+00 1.9684E+00 1.1573E+00 - 5.6234E+00 2.0729E+00 2.2288E+00 1.4169E+00 8.2886E-01 - 6.3096E+00 1.5130E+00 1.6368E+00 1.0262E+00 6.1291E-01 - 7.0795E+00 1.0677E+00 1.1810E+00 7.1494E-01 4.3988E-01 - 7.9433E+00 7.7722E-01 8.2386E-01 4.8736E-01 3.1065E-01 - 8.9125E+00 5.7758E-01 5.8339E-01 3.4488E-01 2.3008E-01 - 1.0000E+01 4.1754E-01 4.1572E-01 2.4470E-01 1.6615E-01 - 1.1220E+01 2.9953E-01 2.9932E-01 1.7213E-01 1.1592E-01 - 1.2589E+01 2.1058E-01 2.1153E-01 1.2411E-01 8.1893E-02 - 1.4125E+01 1.5599E-01 1.4742E-01 8.5372E-02 5.8888E-02 - 1.5849E+01 1.1646E-01 1.0531E-01 5.9840E-02 4.0892E-02 - 1.7783E+01 8.3996E-02 7.6948E-02 4.0945E-02 2.9254E-02 - 1.9953E+01 5.8882E-02 5.7246E-02 2.7214E-02 2.0706E-02 - 2.2387E+01 4.2323E-02 4.0354E-02 1.9547E-02 1.4255E-02 - 2.5119E+01 3.0211E-02 2.7261E-02 1.3928E-02 9.9194E-03 - 2.8184E+01 2.1414E-02 1.9059E-02 9.6194E-03 6.7183E-03 - 3.1623E+01 1.5690E-02 1.4124E-02 6.5976E-03 5.0007E-03 - 3.5481E+01 1.1234E-02 1.0044E-02 4.5593E-03 3.4522E-03 - 3.9811E+01 8.0533E-03 7.1342E-03 3.1361E-03 2.3841E-03 - 4.4668E+01 5.7565E-03 5.0623E-03 2.1398E-03 1.6324E-03 - 5.0119E+01 4.1193E-03 3.5850E-03 1.4591E-03 1.1170E-03 - 5.6234E+01 2.9526E-03 2.5379E-03 9.8838E-04 7.6449E-04 - 6.3096E+01 2.1047E-03 1.7943E-03 6.6819E-04 5.2063E-04 - 7.0795E+01 1.4947E-03 1.2693E-03 4.5535E-04 3.5122E-04 - 7.9433E+01 1.0628E-03 8.9893E-04 3.0765E-04 2.3856E-04 - 8.9125E+01 7.5992E-04 6.3158E-04 2.0622E-04 1.6058E-04 - 1.0000E+02 5.3900E-04 4.4484E-04 1.3861E-04 1.0726E-04 - 1.1220E+02 3.8387E-04 3.1430E-04 9.2478E-05 7.1729E-05 - 1.2589E+02 2.7245E-04 2.2155E-04 6.1652E-05 4.7854E-05 - 1.4125E+02 1.9327E-04 1.5501E-04 4.1250E-05 3.1794E-05 - 1.5849E+02 1.3737E-04 1.0868E-04 2.7307E-05 2.1199E-05 - 1.7783E+02 9.7298E-05 7.6319E-05 1.8022E-05 1.4316E-05 - 1.9953E+02 6.8458E-05 5.3555E-05 1.1979E-05 9.5022E-06 - 2.2387E+02 4.8578E-05 3.7634E-05 7.9876E-06 6.1698E-06 - 2.5119E+02 3.4477E-05 2.6327E-05 5.2345E-06 4.1267E-06 - 2.8184E+02 2.4176E-05 1.8418E-05 3.4344E-06 2.7165E-06 - 3.1623E+02 1.6992E-05 1.2778E-05 2.2681E-06 1.7906E-06 - 3.5481E+02 1.1955E-05 8.9001E-06 1.4947E-06 1.1908E-06 - 3.9811E+02 8.3893E-06 6.1845E-06 9.8332E-07 7.8009E-07 - 4.4668E+02 5.9147E-06 4.2939E-06 6.4282E-07 5.0250E-07 - 5.0119E+02 4.1480E-06 2.9798E-06 4.2228E-07 3.2781E-07 - 5.6234E+02 2.9079E-06 2.0699E-06 2.7588E-07 2.2030E-07 - 6.3096E+02 2.0298E-06 1.4355E-06 1.8242E-07 1.4523E-07 - 7.0795E+02 1.4134E-06 9.9265E-07 1.2040E-07 9.5618E-08 - 7.9433E+02 9.8756E-07 6.8894E-07 7.8127E-08 6.2793E-08 - 8.9125E+02 6.9263E-07 4.7658E-07 5.2118E-08 4.1046E-08 - 1.0000E+03 4.8526E-07 3.2942E-07 3.4577E-08 2.7282E-08 - 1.1220E+03 3.3828E-07 2.2795E-07 2.2773E-08 1.8075E-08 - 1.2589E+03 2.3567E-07 1.5735E-07 1.5018E-08 1.1830E-08 - 1.4125E+03 1.6305E-07 1.0814E-07 9.8625E-09 7.6565E-09 - 1.5849E+03 1.1328E-07 7.4630E-08 6.6604E-09 5.1380E-09 - 1.7783E+03 7.9614E-08 5.1596E-08 4.4960E-09 3.3835E-09 - 1.9953E+03 5.5493E-08 3.5227E-08 2.9355E-09 2.2598E-09 - 2.2387E+03 3.8431E-08 2.4085E-08 1.9473E-09 1.5289E-09 - 2.5119E+03 2.6449E-08 1.6547E-08 1.2945E-09 1.0099E-09 - 2.8184E+03 1.8308E-08 1.1385E-08 8.4176E-10 6.8176E-10 - 3.1623E+03 1.2679E-08 7.8096E-09 5.7865E-10 4.4875E-10 - 3.5481E+03 8.6759E-09 5.2917E-09 3.8416E-10 2.9445E-10 - 3.9811E+03 5.9729E-09 3.6248E-09 2.5338E-10 1.9354E-10 - 4.4668E+03 4.1097E-09 2.4780E-09 1.6436E-10 1.2631E-10 - 5.0119E+03 2.8164E-09 1.6860E-09 1.0987E-10 8.1174E-11 - 5.6234E+03 1.9246E-09 1.1402E-09 7.3435E-11 5.3050E-11 - 6.3096E+03 1.3115E-09 7.6848E-10 4.8580E-11 3.6310E-11 - 7.0795E+03 8.9497E-10 5.1599E-10 3.2092E-11 2.4728E-11 - 7.9433E+03 6.0550E-10 3.4765E-10 2.1526E-11 1.7093E-11 - 8.9125E+03 4.1049E-10 2.3577E-10 1.4199E-11 1.0291E-11 - 1.0000E+04 2.7710E-10 1.5791E-10 9.0943E-12 6.5503E-12 -average flux in [cosZ = 0.00 -- 0.10, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3699E+04 5.6176E+04 2.7241E+04 2.3620E+04 - 1.1220E-01 4.4138E+04 4.6001E+04 2.2627E+04 1.9669E+04 - 1.2589E-01 3.5944E+04 3.7385E+04 1.8630E+04 1.6044E+04 - 1.4125E-01 2.9222E+04 3.0105E+04 1.5506E+04 1.2976E+04 - 1.5849E-01 2.3436E+04 2.4269E+04 1.2714E+04 1.0337E+04 - 1.7783E-01 1.8539E+04 1.9333E+04 1.0214E+04 8.1986E+03 - 1.9953E-01 1.4493E+04 1.5095E+04 8.0879E+03 6.4632E+03 - 2.2387E-01 1.1220E+04 1.1587E+04 6.3762E+03 4.9478E+03 - 2.5119E-01 8.6084E+03 8.8848E+03 5.0585E+03 3.7976E+03 - 2.8184E-01 6.4407E+03 6.7890E+03 3.9116E+03 2.9221E+03 - 3.1623E-01 4.8435E+03 5.0948E+03 2.9908E+03 2.2205E+03 - 3.5481E-01 3.6729E+03 3.7952E+03 2.2971E+03 1.6458E+03 - 3.9811E-01 2.7106E+03 2.8406E+03 1.7343E+03 1.2090E+03 - 4.4668E-01 1.9929E+03 2.1179E+03 1.2929E+03 8.9645E+02 - 5.0119E-01 1.4552E+03 1.5586E+03 9.7515E+02 6.5623E+02 - 5.6234E-01 1.0590E+03 1.1346E+03 7.1710E+02 4.8492E+02 - 6.3096E-01 7.5940E+02 8.2664E+02 5.2010E+02 3.6232E+02 - 7.0795E-01 5.6435E+02 6.1236E+02 3.7774E+02 2.6178E+02 - 7.9433E-01 4.2263E+02 4.4794E+02 2.7190E+02 1.8931E+02 - 8.9125E-01 3.0631E+02 3.2899E+02 2.1024E+02 1.3676E+02 - 1.0000E+00 2.2456E+02 2.4065E+02 1.5693E+02 1.0151E+02 - 1.1220E+00 1.6793E+02 1.7500E+02 1.1535E+02 7.4193E+01 - 1.2589E+00 1.2476E+02 1.3129E+02 8.2491E+01 5.2886E+01 - 1.4125E+00 9.0114E+01 9.7132E+01 5.9775E+01 3.9082E+01 - 1.5849E+00 6.5235E+01 7.1233E+01 4.5347E+01 2.9335E+01 - 1.7783E+00 4.7551E+01 5.1560E+01 3.3655E+01 2.0446E+01 - 1.9953E+00 3.5460E+01 3.6986E+01 2.5058E+01 1.4316E+01 - 2.2387E+00 2.6266E+01 2.7896E+01 1.7604E+01 1.0495E+01 - 2.5119E+00 1.8173E+01 2.0783E+01 1.2664E+01 7.7097E+00 - 2.8184E+00 1.3103E+01 1.4855E+01 9.7289E+00 5.6544E+00 - 3.1623E+00 1.0103E+01 1.0720E+01 6.9762E+00 4.3887E+00 - 3.5481E+00 7.4355E+00 7.8043E+00 5.1626E+00 3.1043E+00 - 3.9811E+00 5.5191E+00 5.7028E+00 3.6292E+00 2.2628E+00 - 4.4668E+00 4.0447E+00 4.2323E+00 2.6089E+00 1.6368E+00 - 5.0119E+00 2.9234E+00 3.1000E+00 1.8738E+00 1.2117E+00 - 5.6234E+00 2.1185E+00 2.2436E+00 1.3055E+00 9.0063E-01 - 6.3096E+00 1.5256E+00 1.5576E+00 9.7940E-01 6.7866E-01 - 7.0795E+00 1.0931E+00 1.1355E+00 7.1849E-01 4.6411E-01 - 7.9433E+00 8.2209E-01 8.2311E-01 5.0033E-01 3.1672E-01 - 8.9125E+00 6.0651E-01 5.6446E-01 3.6118E-01 2.4019E-01 - 1.0000E+01 4.2019E-01 4.1108E-01 2.5101E-01 1.6836E-01 - 1.1220E+01 3.0602E-01 2.9199E-01 1.7445E-01 1.1896E-01 - 1.2589E+01 2.1540E-01 2.1160E-01 1.1750E-01 8.2825E-02 - 1.4125E+01 1.5206E-01 1.4997E-01 8.2464E-02 6.0688E-02 - 1.5849E+01 1.1131E-01 1.0910E-01 5.9230E-02 4.1951E-02 - 1.7783E+01 7.9374E-02 7.9591E-02 4.0851E-02 2.9276E-02 - 1.9953E+01 5.7923E-02 5.5257E-02 2.8062E-02 2.1048E-02 - 2.2387E+01 4.2045E-02 3.8605E-02 2.0289E-02 1.4730E-02 - 2.5119E+01 3.0002E-02 2.7227E-02 1.3064E-02 1.0314E-02 - 2.8184E+01 2.1191E-02 1.8866E-02 9.1321E-03 7.3181E-03 - 3.1623E+01 1.5697E-02 1.4127E-02 6.5961E-03 5.0153E-03 - 3.5481E+01 1.1227E-02 1.0057E-02 4.5428E-03 3.4696E-03 - 3.9811E+01 8.0590E-03 7.1604E-03 3.1338E-03 2.3848E-03 - 4.4668E+01 5.7565E-03 5.0863E-03 2.1494E-03 1.6230E-03 - 5.0119E+01 4.1016E-03 3.5937E-03 1.4612E-03 1.1138E-03 - 5.6234E+01 2.9349E-03 2.5362E-03 9.8936E-04 7.6161E-04 - 6.3096E+01 2.0963E-03 1.7934E-03 6.7119E-04 5.1628E-04 - 7.0795E+01 1.4932E-03 1.2639E-03 4.5565E-04 3.4960E-04 - 7.9433E+01 1.0613E-03 8.9250E-04 3.0804E-04 2.3680E-04 - 8.9125E+01 7.5742E-04 6.3237E-04 2.0683E-04 1.6113E-04 - 1.0000E+02 5.3870E-04 4.4685E-04 1.3831E-04 1.0762E-04 - 1.1220E+02 3.8364E-04 3.1425E-04 9.2586E-05 7.2296E-05 - 1.2589E+02 2.7356E-04 2.2105E-04 6.1575E-05 4.8178E-05 - 1.4125E+02 1.9445E-04 1.5549E-04 4.1175E-05 3.2129E-05 - 1.5849E+02 1.3772E-04 1.0928E-04 2.7462E-05 2.1438E-05 - 1.7783E+02 9.7672E-05 7.6828E-05 1.8112E-05 1.4286E-05 - 1.9953E+02 6.9293E-05 5.3665E-05 1.2005E-05 9.4844E-06 - 2.2387E+02 4.8754E-05 3.7449E-05 7.9454E-06 6.1646E-06 - 2.5119E+02 3.4425E-05 2.6320E-05 5.2412E-06 4.0753E-06 - 2.8184E+02 2.4225E-05 1.8368E-05 3.4142E-06 2.7675E-06 - 3.1623E+02 1.7065E-05 1.2732E-05 2.2661E-06 1.8054E-06 - 3.5481E+02 1.1989E-05 8.8859E-06 1.4973E-06 1.1842E-06 - 3.9811E+02 8.4080E-06 6.2045E-06 9.9031E-07 7.7542E-07 - 4.4668E+02 5.9223E-06 4.3149E-06 6.5201E-07 5.1005E-07 - 5.0119E+02 4.1521E-06 3.0080E-06 4.2233E-07 3.3626E-07 - 5.6234E+02 2.8983E-06 2.0811E-06 2.7810E-07 2.2163E-07 - 6.3096E+02 2.0262E-06 1.4386E-06 1.8343E-07 1.4684E-07 - 7.0795E+02 1.4170E-06 9.9677E-07 1.2230E-07 9.7335E-08 - 7.9433E+02 9.9739E-07 6.9285E-07 8.1270E-08 6.3701E-08 - 8.9125E+02 6.9920E-07 4.7846E-07 5.2993E-08 4.1709E-08 - 1.0000E+03 4.8555E-07 3.2985E-07 3.4735E-08 2.7560E-08 - 1.1220E+03 3.3819E-07 2.2672E-07 2.2765E-08 1.8205E-08 - 1.2589E+03 2.3487E-07 1.5624E-07 1.5130E-08 1.1711E-08 - 1.4125E+03 1.6335E-07 1.0800E-07 9.9628E-09 7.6965E-09 - 1.5849E+03 1.1362E-07 7.4517E-08 6.4573E-09 5.2254E-09 - 1.7783E+03 7.8822E-08 5.1549E-08 4.4031E-09 3.4429E-09 - 1.9953E+03 5.5039E-08 3.5431E-08 2.9641E-09 2.2747E-09 - 2.2387E+03 3.8103E-08 2.4369E-08 1.9536E-09 1.4999E-09 - 2.5119E+03 2.6329E-08 1.6710E-08 1.3117E-09 9.9925E-10 - 2.8184E+03 1.8446E-08 1.1368E-08 8.8036E-10 6.6807E-10 - 3.1623E+03 1.2753E-08 7.8420E-09 5.7096E-10 4.4221E-10 - 3.5481E+03 8.7476E-09 5.3374E-09 3.8087E-10 2.8157E-10 - 3.9811E+03 5.9858E-09 3.6383E-09 2.5396E-10 1.9023E-10 - 4.4668E+03 4.1289E-09 2.4581E-09 1.6527E-10 1.3014E-10 - 5.0119E+03 2.8328E-09 1.6611E-09 1.0989E-10 8.3258E-11 - 5.6234E+03 1.9153E-09 1.1410E-09 7.5352E-11 5.4861E-11 - 6.3096E+03 1.3181E-09 7.7048E-10 4.9613E-11 3.7146E-11 - 7.0795E+03 8.9586E-10 5.2250E-10 3.2829E-11 2.3734E-11 - 7.9433E+03 6.0778E-10 3.5111E-10 2.1690E-11 1.4883E-11 - 8.9125E+03 4.1102E-10 2.3592E-10 1.4372E-11 1.0124E-11 - 1.0000E+04 2.7724E-10 1.5618E-10 9.7014E-12 6.8445E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4065E+04 5.4882E+04 2.7159E+04 2.4065E+04 - 1.1220E-01 4.4269E+04 4.5123E+04 2.2626E+04 1.9933E+04 - 1.2589E-01 3.6010E+04 3.6771E+04 1.8593E+04 1.6234E+04 - 1.4125E-01 2.9042E+04 2.9671E+04 1.5080E+04 1.3074E+04 - 1.5849E-01 2.3310E+04 2.3670E+04 1.2063E+04 1.0403E+04 - 1.7783E-01 1.8520E+04 1.8756E+04 9.6535E+03 8.2633E+03 - 1.9953E-01 1.4452E+04 1.4679E+04 7.7249E+03 6.5023E+03 - 2.2387E-01 1.1134E+04 1.1260E+04 6.0872E+03 5.0761E+03 - 2.5119E-01 8.5212E+03 8.6388E+03 4.7672E+03 3.9425E+03 - 2.8184E-01 6.3921E+03 6.5561E+03 3.7090E+03 2.9736E+03 - 3.1623E-01 4.7510E+03 4.8853E+03 2.8358E+03 2.2204E+03 - 3.5481E-01 3.5606E+03 3.6351E+03 2.1263E+03 1.6882E+03 - 3.9811E-01 2.6493E+03 2.6999E+03 1.6004E+03 1.2730E+03 - 4.4668E-01 1.9398E+03 1.9762E+03 1.1791E+03 9.2991E+02 - 5.0119E-01 1.4054E+03 1.4474E+03 8.6788E+02 6.7687E+02 - 5.6234E-01 1.0284E+03 1.0603E+03 6.5322E+02 5.0117E+02 - 6.3096E-01 7.6671E+02 7.8671E+02 4.8324E+02 3.6374E+02 - 7.0795E-01 5.6677E+02 5.8098E+02 3.6287E+02 2.6900E+02 - 7.9433E-01 4.1619E+02 4.3151E+02 2.6752E+02 1.9918E+02 - 8.9125E-01 3.0731E+02 3.1378E+02 1.9662E+02 1.4373E+02 - 1.0000E+00 2.2840E+02 2.2307E+02 1.4314E+02 1.0452E+02 - 1.1220E+00 1.6615E+02 1.6441E+02 1.0412E+02 7.7719E+01 - 1.2589E+00 1.2169E+02 1.2065E+02 7.5421E+01 5.6353E+01 - 1.4125E+00 8.9685E+01 8.9361E+01 5.7921E+01 4.0052E+01 - 1.5849E+00 6.6334E+01 6.6960E+01 4.2939E+01 2.9023E+01 - 1.7783E+00 4.8983E+01 4.9907E+01 3.1556E+01 2.2368E+01 - 1.9953E+00 3.5567E+01 3.6062E+01 2.2855E+01 1.6105E+01 - 2.2387E+00 2.5930E+01 2.6850E+01 1.6246E+01 1.1553E+01 - 2.5119E+00 1.8734E+01 1.9998E+01 1.1852E+01 8.3849E+00 - 2.8184E+00 1.4151E+01 1.4016E+01 8.8122E+00 6.0242E+00 - 3.1623E+00 1.0477E+01 1.0354E+01 6.5341E+00 4.5379E+00 - 3.5481E+00 7.4752E+00 7.6251E+00 4.9083E+00 3.3179E+00 - 3.9811E+00 5.4506E+00 5.5124E+00 3.5688E+00 2.4761E+00 - 4.4668E+00 4.0094E+00 4.0382E+00 2.4991E+00 1.8239E+00 - 5.0119E+00 2.9590E+00 2.9406E+00 1.8236E+00 1.2544E+00 - 5.6234E+00 2.1615E+00 2.1091E+00 1.2863E+00 9.1174E-01 - 6.3096E+00 1.5567E+00 1.4932E+00 9.1308E-01 6.5100E-01 - 7.0795E+00 1.1175E+00 1.0552E+00 6.6797E-01 4.7099E-01 - 7.9433E+00 8.0617E-01 7.5542E-01 4.9165E-01 3.6309E-01 - 8.9125E+00 5.8552E-01 5.6163E-01 3.3096E-01 2.5633E-01 - 1.0000E+01 4.2559E-01 4.0676E-01 2.3418E-01 1.7210E-01 - 1.1220E+01 3.0470E-01 2.8653E-01 1.6507E-01 1.2611E-01 - 1.2589E+01 2.1871E-01 2.0608E-01 1.1667E-01 8.9287E-02 - 1.4125E+01 1.5678E-01 1.4631E-01 8.3795E-02 6.1404E-02 - 1.5849E+01 1.1148E-01 1.0612E-01 6.1269E-02 4.3178E-02 - 1.7783E+01 8.0661E-02 7.6977E-02 4.1890E-02 3.0241E-02 - 1.9953E+01 5.9030E-02 5.3717E-02 2.9487E-02 2.1545E-02 - 2.2387E+01 4.4115E-02 3.8804E-02 2.0768E-02 1.5756E-02 - 2.5119E+01 3.0511E-02 2.8997E-02 1.4415E-02 1.0337E-02 - 2.8184E+01 2.1526E-02 2.0008E-02 9.4987E-03 6.5470E-03 - 3.1623E+01 1.5868E-02 1.4352E-02 6.8187E-03 5.2197E-03 - 3.5481E+01 1.1366E-02 1.0223E-02 4.7198E-03 3.6078E-03 - 3.9811E+01 8.1393E-03 7.2622E-03 3.2579E-03 2.4829E-03 - 4.4668E+01 5.8264E-03 5.1439E-03 2.2321E-03 1.6979E-03 - 5.0119E+01 4.1660E-03 3.6419E-03 1.5279E-03 1.1642E-03 - 5.6234E+01 2.9778E-03 2.5817E-03 1.0437E-03 8.0033E-04 - 6.3096E+01 2.1255E-03 1.8291E-03 7.0996E-04 5.5114E-04 - 7.0795E+01 1.5102E-03 1.2947E-03 4.7961E-04 3.7405E-04 - 7.9433E+01 1.0791E-03 9.1580E-04 3.2499E-04 2.5119E-04 - 8.9125E+01 7.7236E-04 6.4344E-04 2.2126E-04 1.7002E-04 - 1.0000E+02 5.4731E-04 4.5607E-04 1.4875E-04 1.1528E-04 - 1.1220E+02 3.8879E-04 3.2085E-04 9.9936E-05 7.7591E-05 - 1.2589E+02 2.7644E-04 2.2598E-04 6.6818E-05 5.2156E-05 - 1.4125E+02 1.9646E-04 1.5907E-04 4.4542E-05 3.5003E-05 - 1.5849E+02 1.3936E-04 1.1138E-04 2.9667E-05 2.3265E-05 - 1.7783E+02 9.8415E-05 7.7739E-05 1.9616E-05 1.5406E-05 - 1.9953E+02 6.9405E-05 5.4509E-05 1.3012E-05 1.0204E-05 - 2.2387E+02 4.9234E-05 3.8170E-05 8.6830E-06 6.8159E-06 - 2.5119E+02 3.4669E-05 2.6660E-05 5.7236E-06 4.4911E-06 - 2.8184E+02 2.4339E-05 1.8794E-05 3.7731E-06 2.9213E-06 - 3.1623E+02 1.7249E-05 1.3037E-05 2.4821E-06 1.9634E-06 - 3.5481E+02 1.2126E-05 9.0425E-06 1.6436E-06 1.2922E-06 - 3.9811E+02 8.5097E-06 6.2847E-06 1.0844E-06 8.4454E-07 - 4.4668E+02 5.9698E-06 4.3738E-06 7.0268E-07 5.5606E-07 - 5.0119E+02 4.1788E-06 3.0343E-06 4.6649E-07 3.6664E-07 - 5.6234E+02 2.9338E-06 2.1084E-06 3.0265E-07 2.4026E-07 - 6.3096E+02 2.0487E-06 1.4613E-06 2.0084E-07 1.5779E-07 - 7.0795E+02 1.4299E-06 1.0098E-06 1.3125E-07 1.0331E-07 - 7.9433E+02 1.0012E-06 7.0086E-07 8.5321E-08 6.8603E-08 - 8.9125E+02 6.9876E-07 4.8378E-07 5.5939E-08 4.4768E-08 - 1.0000E+03 4.8761E-07 3.3171E-07 3.7058E-08 2.8637E-08 - 1.1220E+03 3.3963E-07 2.2792E-07 2.4501E-08 1.8975E-08 - 1.2589E+03 2.3680E-07 1.5702E-07 1.6037E-08 1.2351E-08 - 1.4125E+03 1.6496E-07 1.0888E-07 1.0445E-08 8.0175E-09 - 1.5849E+03 1.1418E-07 7.5378E-08 6.8584E-09 5.3786E-09 - 1.7783E+03 7.8895E-08 5.2206E-08 4.6246E-09 3.6264E-09 - 1.9953E+03 5.5223E-08 3.5630E-08 3.0395E-09 2.3877E-09 - 2.2387E+03 3.8173E-08 2.4415E-08 2.0132E-09 1.5716E-09 - 2.5119E+03 2.6461E-08 1.6656E-08 1.3733E-09 1.0352E-09 - 2.8184E+03 1.8169E-08 1.1341E-08 9.0184E-10 6.6620E-10 - 3.1623E+03 1.2667E-08 7.8414E-09 5.8076E-10 4.4335E-10 - 3.5481E+03 8.7063E-09 5.3260E-09 3.8612E-10 2.9593E-10 - 3.9811E+03 5.9640E-09 3.6246E-09 2.6018E-10 2.0306E-10 - 4.4668E+03 4.0861E-09 2.4674E-09 1.7149E-10 1.3411E-10 - 5.0119E+03 2.8153E-09 1.6735E-09 1.1108E-10 8.7998E-11 - 5.6234E+03 1.9415E-09 1.1418E-09 7.1789E-11 5.6302E-11 - 6.3096E+03 1.3207E-09 7.7599E-10 4.8624E-11 3.6342E-11 - 7.0795E+03 8.9814E-10 5.2318E-10 3.3236E-11 2.3327E-11 - 7.9433E+03 6.1043E-10 3.5219E-10 2.2480E-11 1.4890E-11 - 8.9125E+03 4.1557E-10 2.3528E-10 1.4539E-11 1.0031E-11 - 1.0000E+04 2.8060E-10 1.5792E-10 9.1538E-12 6.8398E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3346E+04 5.3887E+04 2.5689E+04 2.4105E+04 - 1.1220E-01 4.3678E+04 4.4138E+04 2.1712E+04 1.9974E+04 - 1.2589E-01 3.5509E+04 3.5512E+04 1.7728E+04 1.6267E+04 - 1.4125E-01 2.8869E+04 2.8547E+04 1.4434E+04 1.3270E+04 - 1.5849E-01 2.3081E+04 2.2660E+04 1.1648E+04 1.0479E+04 - 1.7783E-01 1.8110E+04 1.7641E+04 9.1727E+03 8.2255E+03 - 1.9953E-01 1.4079E+04 1.3792E+04 7.1701E+03 6.5679E+03 - 2.2387E-01 1.0936E+04 1.0604E+04 5.6661E+03 5.0603E+03 - 2.5119E-01 8.2715E+03 8.0026E+03 4.4340E+03 3.8590E+03 - 2.8184E-01 6.1476E+03 6.0054E+03 3.3761E+03 2.9352E+03 - 3.1623E-01 4.6016E+03 4.4783E+03 2.5868E+03 2.2209E+03 - 3.5481E-01 3.4324E+03 3.3260E+03 1.9518E+03 1.6919E+03 - 3.9811E-01 2.5545E+03 2.4756E+03 1.4280E+03 1.2615E+03 - 4.4668E-01 1.8648E+03 1.8119E+03 1.0557E+03 9.3017E+02 - 5.0119E-01 1.3764E+03 1.3291E+03 7.6720E+02 6.7180E+02 - 5.6234E-01 1.0160E+03 9.7303E+02 5.6004E+02 4.9144E+02 - 6.3096E-01 7.3152E+02 7.0245E+02 4.1092E+02 3.6718E+02 - 7.0795E-01 5.4254E+02 5.2265E+02 3.0950E+02 2.7455E+02 - 7.9433E-01 4.0616E+02 3.7246E+02 2.3273E+02 1.9784E+02 - 8.9125E-01 2.9848E+02 2.6846E+02 1.6958E+02 1.3757E+02 - 1.0000E+00 2.1669E+02 2.0451E+02 1.2426E+02 1.0456E+02 - 1.1220E+00 1.6050E+02 1.5245E+02 8.9822E+01 7.4890E+01 - 1.2589E+00 1.2018E+02 1.1092E+02 6.5543E+01 5.6511E+01 - 1.4125E+00 8.8993E+01 8.0324E+01 4.7987E+01 4.2469E+01 - 1.5849E+00 6.5158E+01 5.9152E+01 3.5816E+01 3.1292E+01 - 1.7783E+00 4.8708E+01 4.4193E+01 2.7489E+01 2.3179E+01 - 1.9953E+00 3.5377E+01 3.3095E+01 2.0156E+01 1.6245E+01 - 2.2387E+00 2.6310E+01 2.4466E+01 1.5251E+01 1.1493E+01 - 2.5119E+00 1.9362E+01 1.7460E+01 1.0986E+01 8.8610E+00 - 2.8184E+00 1.3886E+01 1.2321E+01 7.5779E+00 6.6001E+00 - 3.1623E+00 1.0350E+01 9.4277E+00 5.7808E+00 4.8115E+00 - 3.5481E+00 7.4915E+00 6.7703E+00 4.3496E+00 3.4894E+00 - 3.9811E+00 5.4979E+00 5.0625E+00 3.1689E+00 2.5652E+00 - 4.4668E+00 4.0008E+00 3.7273E+00 2.3290E+00 1.8888E+00 - 5.0119E+00 2.9417E+00 2.6830E+00 1.6940E+00 1.3480E+00 - 5.6234E+00 2.1139E+00 1.9941E+00 1.2178E+00 9.2749E-01 - 6.3096E+00 1.5466E+00 1.4580E+00 8.8554E-01 6.6315E-01 - 7.0795E+00 1.1340E+00 1.0638E+00 6.1893E-01 4.8739E-01 - 7.9433E+00 7.9477E-01 7.5680E-01 4.3508E-01 3.6389E-01 - 8.9125E+00 5.8420E-01 5.4243E-01 3.1212E-01 2.6269E-01 - 1.0000E+01 4.2740E-01 3.9565E-01 2.3139E-01 1.7894E-01 - 1.1220E+01 3.0918E-01 2.8207E-01 1.6207E-01 1.2541E-01 - 1.2589E+01 2.2359E-01 1.9860E-01 1.1480E-01 8.4095E-02 - 1.4125E+01 1.5960E-01 1.4533E-01 8.0342E-02 5.8376E-02 - 1.5849E+01 1.1544E-01 1.0340E-01 5.6225E-02 4.1588E-02 - 1.7783E+01 8.1885E-02 7.4214E-02 4.0411E-02 3.0639E-02 - 1.9953E+01 5.6912E-02 5.1278E-02 2.7630E-02 2.0167E-02 - 2.2387E+01 4.1195E-02 3.6525E-02 1.9876E-02 1.3316E-02 - 2.5119E+01 2.9356E-02 2.6735E-02 1.3835E-02 9.8800E-03 - 2.8184E+01 2.0858E-02 1.8399E-02 9.2680E-03 6.8329E-03 - 3.1623E+01 1.5893E-02 1.4416E-02 6.8566E-03 5.2059E-03 - 3.5481E+01 1.1384E-02 1.0242E-02 4.7428E-03 3.6079E-03 - 3.9811E+01 8.1682E-03 7.2812E-03 3.2643E-03 2.4879E-03 - 4.4668E+01 5.8544E-03 5.1886E-03 2.2353E-03 1.7162E-03 - 5.0119E+01 4.1798E-03 3.6859E-03 1.5274E-03 1.1773E-03 - 5.6234E+01 2.9896E-03 2.6128E-03 1.0447E-03 8.0066E-04 - 6.3096E+01 2.1351E-03 1.8432E-03 7.1647E-04 5.5114E-04 - 7.0795E+01 1.5175E-03 1.2984E-03 4.8918E-04 3.7439E-04 - 7.9433E+01 1.0835E-03 9.2021E-04 3.2983E-04 2.5045E-04 - 8.9125E+01 7.7538E-04 6.5070E-04 2.2220E-04 1.7016E-04 - 1.0000E+02 5.4809E-04 4.5764E-04 1.4836E-04 1.1556E-04 - 1.1220E+02 3.8984E-04 3.2245E-04 9.9537E-05 7.7194E-05 - 1.2589E+02 2.7728E-04 2.2643E-04 6.7057E-05 5.1533E-05 - 1.4125E+02 1.9657E-04 1.5966E-04 4.4820E-05 3.4833E-05 - 1.5849E+02 1.3920E-04 1.1217E-04 2.9594E-05 2.3439E-05 - 1.7783E+02 9.8517E-05 7.8394E-05 1.9614E-05 1.5532E-05 - 1.9953E+02 6.9647E-05 5.4696E-05 1.3047E-05 1.0313E-05 - 2.2387E+02 4.9165E-05 3.8437E-05 8.6455E-06 6.8094E-06 - 2.5119E+02 3.4702E-05 2.7004E-05 5.6764E-06 4.4949E-06 - 2.8184E+02 2.4383E-05 1.8788E-05 3.7849E-06 2.9561E-06 - 3.1623E+02 1.7194E-05 1.3050E-05 2.4806E-06 1.9503E-06 - 3.5481E+02 1.2092E-05 9.0848E-06 1.6294E-06 1.2790E-06 - 3.9811E+02 8.5053E-06 6.3085E-06 1.0741E-06 8.4441E-07 - 4.4668E+02 5.9576E-06 4.3853E-06 6.9885E-07 5.5644E-07 - 5.0119E+02 4.1829E-06 3.0404E-06 4.5571E-07 3.6540E-07 - 5.6234E+02 2.9361E-06 2.1064E-06 3.0441E-07 2.3842E-07 - 6.3096E+02 2.0510E-06 1.4541E-06 2.0126E-07 1.5735E-07 - 7.0795E+02 1.4316E-06 1.0040E-06 1.3077E-07 1.0315E-07 - 7.9433E+02 1.0006E-06 6.9436E-07 8.5232E-08 6.7888E-08 - 8.9125E+02 6.9780E-07 4.7748E-07 5.5920E-08 4.4392E-08 - 1.0000E+03 4.8713E-07 3.3153E-07 3.6834E-08 2.9245E-08 - 1.1220E+03 3.3922E-07 2.2962E-07 2.4359E-08 1.9228E-08 - 1.2589E+03 2.3639E-07 1.5662E-07 1.5825E-08 1.2662E-08 - 1.4125E+03 1.6531E-07 1.0771E-07 1.0488E-08 8.3951E-09 - 1.5849E+03 1.1549E-07 7.4833E-08 6.9666E-09 5.4753E-09 - 1.7783E+03 7.9767E-08 5.1598E-08 4.5802E-09 3.5328E-09 - 1.9953E+03 5.5399E-08 3.5393E-08 2.9732E-09 2.4203E-09 - 2.2387E+03 3.8433E-08 2.4195E-08 2.0156E-09 1.6244E-09 - 2.5119E+03 2.6450E-08 1.6592E-08 1.3582E-09 1.0274E-09 - 2.8184E+03 1.8244E-08 1.1389E-08 9.1127E-10 6.9110E-10 - 3.1623E+03 1.2732E-08 7.8403E-09 5.9097E-10 4.5863E-10 - 3.5481E+03 8.7125E-09 5.3116E-09 3.9235E-10 3.0303E-10 - 3.9811E+03 6.0063E-09 3.6405E-09 2.6125E-10 1.9991E-10 - 4.4668E+03 4.1276E-09 2.4784E-09 1.7487E-10 1.3196E-10 - 5.0119E+03 2.8184E-09 1.6865E-09 1.1331E-10 8.5454E-11 - 5.6234E+03 1.9255E-09 1.1520E-09 7.4160E-11 5.5328E-11 - 6.3096E+03 1.3125E-09 7.7253E-10 5.1359E-11 3.5652E-11 - 7.0795E+03 8.9712E-10 5.1998E-10 3.2923E-11 2.3562E-11 - 7.9433E+03 6.1081E-10 3.4849E-10 2.1425E-11 1.5952E-11 - 8.9125E+03 4.1191E-10 2.3355E-10 1.4617E-11 1.0380E-11 - 1.0000E+04 2.7932E-10 1.5552E-10 9.7618E-12 6.9659E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.2742E+04 5.2202E+04 2.5016E+04 2.3852E+04 - 1.1220E-01 4.3234E+04 4.2514E+04 2.0734E+04 1.9653E+04 - 1.2589E-01 3.4758E+04 3.4222E+04 1.6794E+04 1.6000E+04 - 1.4125E-01 2.8077E+04 2.7665E+04 1.3616E+04 1.2990E+04 - 1.5849E-01 2.2512E+04 2.1988E+04 1.1066E+04 1.0456E+04 - 1.7783E-01 1.7688E+04 1.7081E+04 8.7668E+03 8.2161E+03 - 1.9953E-01 1.3724E+04 1.3186E+04 6.7544E+03 6.4106E+03 - 2.2387E-01 1.0570E+04 1.0070E+04 5.2299E+03 5.0128E+03 - 2.5119E-01 8.0235E+03 7.6258E+03 4.0814E+03 3.8705E+03 - 2.8184E-01 6.0654E+03 5.6471E+03 3.1241E+03 2.9075E+03 - 3.1623E-01 4.5440E+03 4.1761E+03 2.3352E+03 2.1915E+03 - 3.5481E-01 3.3619E+03 3.0864E+03 1.7197E+03 1.6604E+03 - 3.9811E-01 2.4671E+03 2.2789E+03 1.2980E+03 1.2509E+03 - 4.4668E-01 1.7972E+03 1.6703E+03 9.5283E+02 9.2395E+02 - 5.0119E-01 1.3340E+03 1.2058E+03 6.9777E+02 6.8660E+02 - 5.6234E-01 9.8168E+02 8.8351E+02 5.1925E+02 5.0838E+02 - 6.3096E-01 7.1997E+02 6.3147E+02 3.7649E+02 3.6547E+02 - 7.0795E-01 5.2744E+02 4.5669E+02 2.7057E+02 2.5825E+02 - 7.9433E-01 3.8512E+02 3.3439E+02 1.9516E+02 1.9486E+02 - 8.9125E-01 2.8454E+02 2.4169E+02 1.4549E+02 1.4847E+02 - 1.0000E+00 2.1203E+02 1.7606E+02 1.0564E+02 1.0703E+02 - 1.1220E+00 1.5886E+02 1.3092E+02 7.5939E+01 7.7838E+01 - 1.2589E+00 1.1707E+02 9.5656E+01 5.6905E+01 5.8714E+01 - 1.4125E+00 8.7494E+01 6.9961E+01 4.1871E+01 4.3928E+01 - 1.5849E+00 6.4662E+01 5.3513E+01 3.0135E+01 3.2022E+01 - 1.7783E+00 4.9004E+01 4.0167E+01 2.1969E+01 2.4298E+01 - 1.9953E+00 3.6640E+01 2.9096E+01 1.6643E+01 1.8015E+01 - 2.2387E+00 2.7130E+01 2.1520E+01 1.2651E+01 1.2478E+01 - 2.5119E+00 1.9581E+01 1.6271E+01 9.1819E+00 8.9093E+00 - 2.8184E+00 1.4127E+01 1.1659E+01 6.7293E+00 6.7781E+00 - 3.1623E+00 1.0514E+01 8.6080E+00 5.1984E+00 5.0063E+00 - 3.5481E+00 7.7605E+00 6.3034E+00 3.7281E+00 3.6690E+00 - 3.9811E+00 5.6551E+00 4.7148E+00 2.7201E+00 2.7018E+00 - 4.4668E+00 4.1446E+00 3.5011E+00 2.0190E+00 1.9503E+00 - 5.0119E+00 3.0361E+00 2.6114E+00 1.4499E+00 1.4179E+00 - 5.6234E+00 2.2409E+00 1.8930E+00 1.0738E+00 1.0152E+00 - 6.3096E+00 1.6433E+00 1.3542E+00 8.3110E-01 7.1216E-01 - 7.0795E+00 1.1633E+00 9.8323E-01 5.7921E-01 5.0325E-01 - 7.9433E+00 8.3190E-01 7.3058E-01 4.1123E-01 3.6448E-01 - 8.9125E+00 6.1576E-01 5.4634E-01 3.1408E-01 2.6507E-01 - 1.0000E+01 4.2607E-01 3.9044E-01 2.2371E-01 1.8022E-01 - 1.1220E+01 3.0239E-01 2.8031E-01 1.5668E-01 1.2937E-01 - 1.2589E+01 2.1939E-01 2.0619E-01 1.1058E-01 9.1185E-02 - 1.4125E+01 1.6031E-01 1.5065E-01 7.7898E-02 6.2988E-02 - 1.5849E+01 1.1676E-01 1.0668E-01 5.6068E-02 4.4239E-02 - 1.7783E+01 8.5657E-02 7.6088E-02 3.9185E-02 3.1326E-02 - 1.9953E+01 6.0914E-02 5.4837E-02 2.5938E-02 2.3342E-02 - 2.2387E+01 4.2931E-02 3.8678E-02 1.9125E-02 1.5456E-02 - 2.5119E+01 3.0492E-02 2.7582E-02 1.3388E-02 1.0384E-02 - 2.8184E+01 2.2231E-02 1.9899E-02 9.3375E-03 7.2642E-03 - 3.1623E+01 1.5859E-02 1.4358E-02 6.8485E-03 5.1965E-03 - 3.5481E+01 1.1365E-02 1.0224E-02 4.7180E-03 3.5950E-03 - 3.9811E+01 8.1278E-03 7.2582E-03 3.2484E-03 2.4833E-03 - 4.4668E+01 5.8156E-03 5.1542E-03 2.2320E-03 1.7094E-03 - 5.0119E+01 4.1687E-03 3.6640E-03 1.5310E-03 1.1772E-03 - 5.6234E+01 2.9806E-03 2.5953E-03 1.0449E-03 8.0641E-04 - 6.3096E+01 2.1230E-03 1.8297E-03 7.1021E-04 5.4912E-04 - 7.0795E+01 1.5092E-03 1.2902E-03 4.8488E-04 3.7440E-04 - 7.9433E+01 1.0776E-03 9.1226E-04 3.2774E-04 2.5161E-04 - 8.9125E+01 7.6770E-04 6.4574E-04 2.1846E-04 1.6867E-04 - 1.0000E+02 5.4832E-04 4.5708E-04 1.4806E-04 1.1520E-04 - 1.1220E+02 3.9063E-04 3.2190E-04 9.9405E-05 7.7806E-05 - 1.2589E+02 2.7768E-04 2.2636E-04 6.6765E-05 5.2031E-05 - 1.4125E+02 1.9631E-04 1.5896E-04 4.4739E-05 3.4696E-05 - 1.5849E+02 1.3863E-04 1.1158E-04 2.9854E-05 2.3437E-05 - 1.7783E+02 9.8500E-05 7.8324E-05 1.9833E-05 1.5550E-05 - 1.9953E+02 7.0007E-05 5.4889E-05 1.3075E-05 1.0182E-05 - 2.2387E+02 4.9554E-05 3.8324E-05 8.5775E-06 6.7987E-06 - 2.5119E+02 3.4869E-05 2.6763E-05 5.7312E-06 4.4917E-06 - 2.8184E+02 2.4540E-05 1.8533E-05 3.8580E-06 2.9278E-06 - 3.1623E+02 1.7188E-05 1.2981E-05 2.4959E-06 1.9518E-06 - 3.5481E+02 1.2064E-05 9.0660E-06 1.6271E-06 1.2792E-06 - 3.9811E+02 8.5222E-06 6.3229E-06 1.0648E-06 8.3850E-07 - 4.4668E+02 5.9605E-06 4.3878E-06 7.0172E-07 5.5746E-07 - 5.0119E+02 4.1619E-06 3.0348E-06 4.6117E-07 3.6905E-07 - 5.6234E+02 2.9198E-06 2.1047E-06 3.0185E-07 2.4150E-07 - 6.3096E+02 2.0346E-06 1.4564E-06 1.9669E-07 1.5831E-07 - 7.0795E+02 1.4271E-06 1.0089E-06 1.2928E-07 1.0332E-07 - 7.9433E+02 1.0015E-06 6.9600E-07 8.6006E-08 6.7573E-08 - 8.9125E+02 6.9780E-07 4.8130E-07 5.6091E-08 4.4499E-08 - 1.0000E+03 4.8666E-07 3.3278E-07 3.6491E-08 2.9058E-08 - 1.1220E+03 3.3849E-07 2.2942E-07 2.3994E-08 1.9034E-08 - 1.2589E+03 2.3548E-07 1.5917E-07 1.5953E-08 1.2489E-08 - 1.4125E+03 1.6361E-07 1.0859E-07 1.0622E-08 8.2744E-09 - 1.5849E+03 1.1394E-07 7.4264E-08 6.9134E-09 5.5401E-09 - 1.7783E+03 7.9051E-08 5.1576E-08 4.5046E-09 3.5524E-09 - 1.9953E+03 5.4994E-08 3.5554E-08 3.0425E-09 2.3521E-09 - 2.2387E+03 3.8166E-08 2.4452E-08 2.0492E-09 1.5460E-09 - 2.5119E+03 2.6584E-08 1.6711E-08 1.3646E-09 1.0079E-09 - 2.8184E+03 1.8319E-08 1.1400E-08 9.0019E-10 6.8072E-10 - 3.1623E+03 1.2678E-08 7.8897E-09 5.8602E-10 4.4044E-10 - 3.5481E+03 8.6935E-09 5.3767E-09 3.8693E-10 2.8485E-10 - 3.9811E+03 5.9640E-09 3.6480E-09 2.5063E-10 1.8893E-10 - 4.4668E+03 4.0883E-09 2.4706E-09 1.6502E-10 1.2834E-10 - 5.0119E+03 2.8214E-09 1.6820E-09 1.1458E-10 8.6078E-11 - 5.6234E+03 1.9219E-09 1.1453E-09 7.7611E-11 5.6371E-11 - 6.3096E+03 1.3135E-09 7.7162E-10 5.0818E-11 3.7402E-11 - 7.0795E+03 8.9596E-10 5.2384E-10 3.2510E-11 2.4409E-11 - 7.9433E+03 6.0914E-10 3.5308E-10 2.2013E-11 1.6423E-11 - 8.9125E+03 4.1436E-10 2.3724E-10 1.4552E-11 1.1081E-11 - 1.0000E+04 2.7778E-10 1.5979E-10 9.6592E-12 6.8721E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.2588E+04 5.1665E+04 2.4424E+04 2.3835E+04 - 1.1220E-01 4.2737E+04 4.2065E+04 2.0250E+04 1.9915E+04 - 1.2589E-01 3.4878E+04 3.3795E+04 1.6613E+04 1.6290E+04 - 1.4125E-01 2.8191E+04 2.7020E+04 1.3536E+04 1.3030E+04 - 1.5849E-01 2.2559E+04 2.1432E+04 1.0739E+04 1.0435E+04 - 1.7783E-01 1.7696E+04 1.6662E+04 8.4279E+03 8.2954E+03 - 1.9953E-01 1.3628E+04 1.2857E+04 6.6303E+03 6.4904E+03 - 2.2387E-01 1.0516E+04 9.8413E+03 5.1690E+03 5.0556E+03 - 2.5119E-01 7.9437E+03 7.4438E+03 4.0363E+03 3.8241E+03 - 2.8184E-01 5.9627E+03 5.5363E+03 3.0567E+03 2.8482E+03 - 3.1623E-01 4.4661E+03 4.0684E+03 2.2466E+03 2.1961E+03 - 3.5481E-01 3.3218E+03 3.0138E+03 1.6897E+03 1.6710E+03 - 3.9811E-01 2.4663E+03 2.2155E+03 1.2558E+03 1.2304E+03 - 4.4668E-01 1.8145E+03 1.5941E+03 9.2586E+02 9.1577E+02 - 5.0119E-01 1.3140E+03 1.1617E+03 6.8411E+02 6.8710E+02 - 5.6234E-01 9.8097E+02 8.3925E+02 4.9745E+02 5.1211E+02 - 6.3096E-01 7.2512E+02 5.9874E+02 3.5927E+02 3.8049E+02 - 7.0795E-01 5.1412E+02 4.4293E+02 2.5396E+02 2.7499E+02 - 7.9433E-01 3.8417E+02 3.2414E+02 1.8256E+02 2.0235E+02 - 8.9125E-01 2.9761E+02 2.3740E+02 1.3638E+02 1.5367E+02 - 1.0000E+00 2.1409E+02 1.7027E+02 9.6231E+01 1.0956E+02 - 1.1220E+00 1.5579E+02 1.2447E+02 7.0560E+01 8.1527E+01 - 1.2589E+00 1.1582E+02 9.2100E+01 5.1666E+01 5.9186E+01 - 1.4125E+00 8.5106E+01 6.9760E+01 3.7303E+01 4.3920E+01 - 1.5849E+00 6.2888E+01 5.1261E+01 2.7111E+01 3.2503E+01 - 1.7783E+00 4.7251E+01 3.6440E+01 2.0530E+01 2.3796E+01 - 1.9953E+00 3.5649E+01 2.7239E+01 1.5510E+01 1.7658E+01 - 2.2387E+00 2.6601E+01 2.0314E+01 1.1362E+01 1.2960E+01 - 2.5119E+00 1.9226E+01 1.5189E+01 8.9358E+00 9.8998E+00 - 2.8184E+00 1.4068E+01 1.1294E+01 6.5680E+00 7.3483E+00 - 3.1623E+00 1.0344E+01 8.1976E+00 4.8364E+00 5.2514E+00 - 3.5481E+00 7.7334E+00 6.1994E+00 3.5623E+00 3.8683E+00 - 3.9811E+00 5.6864E+00 4.5600E+00 2.5117E+00 2.7669E+00 - 4.4668E+00 4.1502E+00 3.3232E+00 1.8748E+00 1.9596E+00 - 5.0119E+00 2.9634E+00 2.4469E+00 1.3837E+00 1.4146E+00 - 5.6234E+00 2.1585E+00 1.8594E+00 9.7917E-01 1.0246E+00 - 6.3096E+00 1.6358E+00 1.3655E+00 7.4786E-01 7.4689E-01 - 7.0795E+00 1.1301E+00 9.8023E-01 5.7233E-01 5.2414E-01 - 7.9433E+00 8.2552E-01 6.9892E-01 3.9848E-01 3.6205E-01 - 8.9125E+00 6.2484E-01 5.1609E-01 2.7777E-01 2.5700E-01 - 1.0000E+01 4.3352E-01 3.7457E-01 2.0981E-01 1.8296E-01 - 1.1220E+01 3.1437E-01 2.6378E-01 1.5698E-01 1.2858E-01 - 1.2589E+01 2.2832E-01 1.9005E-01 1.0875E-01 8.9251E-02 - 1.4125E+01 1.6314E-01 1.4210E-01 7.7336E-02 6.3331E-02 - 1.5849E+01 1.1635E-01 1.0375E-01 5.7088E-02 4.5824E-02 - 1.7783E+01 8.5798E-02 7.4407E-02 3.9571E-02 3.0997E-02 - 1.9953E+01 6.1614E-02 5.4517E-02 2.6953E-02 2.1279E-02 - 2.2387E+01 4.3046E-02 4.0723E-02 1.9454E-02 1.4852E-02 - 2.5119E+01 3.0512E-02 2.7801E-02 1.3119E-02 1.0854E-02 - 2.8184E+01 2.1962E-02 1.9730E-02 8.8420E-03 7.3865E-03 - 3.1623E+01 1.5843E-02 1.4414E-02 6.8487E-03 5.1991E-03 - 3.5481E+01 1.1376E-02 1.0231E-02 4.7279E-03 3.5908E-03 - 3.9811E+01 8.1419E-03 7.2739E-03 3.2657E-03 2.4695E-03 - 4.4668E+01 5.8224E-03 5.1669E-03 2.2363E-03 1.7141E-03 - 5.0119E+01 4.1714E-03 3.6666E-03 1.5260E-03 1.1717E-03 - 5.6234E+01 2.9877E-03 2.6010E-03 1.0402E-03 7.9918E-04 - 6.3096E+01 2.1372E-03 1.8331E-03 7.1007E-04 5.5050E-04 - 7.0795E+01 1.5221E-03 1.2965E-03 4.8478E-04 3.7448E-04 - 7.9433E+01 1.0817E-03 9.1636E-04 3.2728E-04 2.5544E-04 - 8.9125E+01 7.7156E-04 6.4786E-04 2.2324E-04 1.7359E-04 - 1.0000E+02 5.4891E-04 4.5663E-04 1.4831E-04 1.1583E-04 - 1.1220E+02 3.8935E-04 3.2148E-04 9.9560E-05 7.8069E-05 - 1.2589E+02 2.7674E-04 2.2635E-04 6.6343E-05 5.2239E-05 - 1.4125E+02 1.9658E-04 1.5894E-04 4.4204E-05 3.4860E-05 - 1.5849E+02 1.3869E-04 1.1131E-04 2.9687E-05 2.3171E-05 - 1.7783E+02 9.8366E-05 7.7946E-05 1.9822E-05 1.5333E-05 - 1.9953E+02 6.9738E-05 5.4634E-05 1.3081E-05 1.0216E-05 - 2.2387E+02 4.9211E-05 3.8283E-05 8.5598E-06 6.8158E-06 - 2.5119E+02 3.4605E-05 2.6692E-05 5.6873E-06 4.5327E-06 - 2.8184E+02 2.4444E-05 1.8691E-05 3.7700E-06 2.9910E-06 - 3.1623E+02 1.7242E-05 1.3038E-05 2.4753E-06 1.9715E-06 - 3.5481E+02 1.2084E-05 9.0805E-06 1.6218E-06 1.3010E-06 - 3.9811E+02 8.4670E-06 6.3057E-06 1.0673E-06 8.4465E-07 - 4.4668E+02 5.9538E-06 4.3703E-06 7.0714E-07 5.5386E-07 - 5.0119E+02 4.1818E-06 3.0211E-06 4.6154E-07 3.6373E-07 - 5.6234E+02 2.9264E-06 2.1000E-06 3.0401E-07 2.4180E-07 - 6.3096E+02 2.0408E-06 1.4536E-06 1.9742E-07 1.5849E-07 - 7.0795E+02 1.4266E-06 1.0092E-06 1.2896E-07 1.0375E-07 - 7.9433E+02 1.0029E-06 6.9630E-07 8.5561E-08 6.8758E-08 - 8.9125E+02 7.0128E-07 4.7866E-07 5.6502E-08 4.5038E-08 - 1.0000E+03 4.8700E-07 3.3155E-07 3.6899E-08 2.9390E-08 - 1.1220E+03 3.3984E-07 2.2929E-07 2.4120E-08 1.9195E-08 - 1.2589E+03 2.3649E-07 1.5813E-07 1.5569E-08 1.2529E-08 - 1.4125E+03 1.6428E-07 1.0831E-07 1.0333E-08 8.0383E-09 - 1.5849E+03 1.1443E-07 7.4267E-08 6.8695E-09 5.3773E-09 - 1.7783E+03 7.9069E-08 5.1627E-08 4.5316E-09 3.5897E-09 - 1.9953E+03 5.5194E-08 3.5631E-08 3.0484E-09 2.3763E-09 - 2.2387E+03 3.8454E-08 2.4481E-08 2.0048E-09 1.5918E-09 - 2.5119E+03 2.6538E-08 1.6820E-08 1.3129E-09 1.0547E-09 - 2.8184E+03 1.8291E-08 1.1490E-08 8.9156E-10 6.8338E-10 - 3.1623E+03 1.2747E-08 7.8909E-09 5.9016E-10 4.6074E-10 - 3.5481E+03 8.7490E-09 5.3825E-09 3.9553E-10 3.0645E-10 - 3.9811E+03 6.0158E-09 3.6613E-09 2.6319E-10 2.0210E-10 - 4.4668E+03 4.1058E-09 2.4873E-09 1.6829E-10 1.3139E-10 - 5.0119E+03 2.8079E-09 1.6849E-09 1.0935E-10 8.3308E-11 - 5.6234E+03 1.9231E-09 1.1484E-09 7.3645E-11 5.5825E-11 - 6.3096E+03 1.3092E-09 7.7216E-10 4.9288E-11 3.7626E-11 - 7.0795E+03 8.9419E-10 5.2001E-10 3.2126E-11 2.3788E-11 - 7.9433E+03 6.0973E-10 3.5193E-10 2.1719E-11 1.5304E-11 - 8.9125E+03 4.1038E-10 2.3640E-10 1.4904E-11 1.0205E-11 - 1.0000E+04 2.7655E-10 1.5889E-10 9.9296E-12 6.6600E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3103E+04 5.2241E+04 2.4804E+04 2.3982E+04 - 1.1220E-01 4.3214E+04 4.2393E+04 2.0725E+04 1.9981E+04 - 1.2589E-01 3.5035E+04 3.4036E+04 1.6968E+04 1.6294E+04 - 1.4125E-01 2.8283E+04 2.7307E+04 1.3650E+04 1.3109E+04 - 1.5849E-01 2.2706E+04 2.1660E+04 1.0986E+04 1.0560E+04 - 1.7783E-01 1.7848E+04 1.6938E+04 8.6928E+03 8.3986E+03 - 1.9953E-01 1.3924E+04 1.3145E+04 6.7526E+03 6.5934E+03 - 2.2387E-01 1.0780E+04 1.0071E+04 5.2664E+03 5.2067E+03 - 2.5119E-01 8.2093E+03 7.6473E+03 4.0997E+03 3.9938E+03 - 2.8184E-01 6.2099E+03 5.7526E+03 3.1468E+03 2.9979E+03 - 3.1623E-01 4.6255E+03 4.3181E+03 2.3503E+03 2.2853E+03 - 3.5481E-01 3.3941E+03 3.2106E+03 1.7332E+03 1.7171E+03 - 3.9811E-01 2.5017E+03 2.3244E+03 1.2987E+03 1.2709E+03 - 4.4668E-01 1.8430E+03 1.6818E+03 9.7787E+02 9.5347E+02 - 5.0119E-01 1.3655E+03 1.2181E+03 7.1834E+02 7.1501E+02 - 5.6234E-01 1.0159E+03 8.8510E+02 5.1822E+02 5.2644E+02 - 6.3096E-01 7.3555E+02 6.4531E+02 3.6047E+02 3.9130E+02 - 7.0795E-01 5.4447E+02 4.6834E+02 2.6287E+02 2.8679E+02 - 7.9433E-01 4.0726E+02 3.4168E+02 1.9324E+02 2.0693E+02 - 8.9125E-01 2.9286E+02 2.5206E+02 1.3919E+02 1.5154E+02 - 1.0000E+00 2.1766E+02 1.7949E+02 1.0664E+02 1.1094E+02 - 1.1220E+00 1.6154E+02 1.3061E+02 7.8679E+01 8.3253E+01 - 1.2589E+00 1.1972E+02 9.6056E+01 5.7722E+01 6.1134E+01 - 1.4125E+00 8.8794E+01 7.0326E+01 4.1551E+01 4.4949E+01 - 1.5849E+00 6.5387E+01 5.3083E+01 3.0609E+01 3.3571E+01 - 1.7783E+00 4.8728E+01 3.9100E+01 2.2208E+01 2.5312E+01 - 1.9953E+00 3.6419E+01 2.8598E+01 1.6074E+01 1.8550E+01 - 2.2387E+00 2.6709E+01 2.1215E+01 1.2282E+01 1.3627E+01 - 2.5119E+00 1.9950E+01 1.5275E+01 9.2838E+00 9.6863E+00 - 2.8184E+00 1.5117E+01 1.1514E+01 6.7706E+00 6.8735E+00 - 3.1623E+00 1.0636E+01 8.4848E+00 4.8545E+00 5.2751E+00 - 3.5481E+00 7.7703E+00 6.2745E+00 3.5939E+00 3.8165E+00 - 3.9811E+00 5.6490E+00 4.6352E+00 2.6003E+00 2.7263E+00 - 4.4668E+00 4.1127E+00 3.4463E+00 1.9248E+00 1.9168E+00 - 5.0119E+00 2.9945E+00 2.5320E+00 1.4332E+00 1.3969E+00 - 5.6234E+00 2.1758E+00 1.8603E+00 1.0684E+00 1.0199E+00 - 6.3096E+00 1.5702E+00 1.3479E+00 7.9500E-01 7.2943E-01 - 7.0795E+00 1.0969E+00 1.0002E+00 5.8443E-01 4.9271E-01 - 7.9433E+00 7.9696E-01 7.1988E-01 4.1537E-01 3.2224E-01 - 8.9125E+00 5.9818E-01 4.9102E-01 2.9351E-01 2.3555E-01 - 1.0000E+01 4.3340E-01 3.7838E-01 2.1480E-01 1.8372E-01 - 1.1220E+01 3.0572E-01 2.7425E-01 1.6009E-01 1.3540E-01 - 1.2589E+01 2.2217E-01 2.0015E-01 1.1497E-01 9.4306E-02 - 1.4125E+01 1.6109E-01 1.4656E-01 8.1162E-02 6.4507E-02 - 1.5849E+01 1.1582E-01 1.0674E-01 5.8336E-02 4.3396E-02 - 1.7783E+01 8.6126E-02 7.7472E-02 3.9869E-02 3.0459E-02 - 1.9953E+01 6.4171E-02 5.5720E-02 2.6190E-02 2.2288E-02 - 2.2387E+01 4.4899E-02 4.0379E-02 1.8810E-02 1.4788E-02 - 2.5119E+01 3.1866E-02 2.8849E-02 1.4038E-02 1.0669E-02 - 2.8184E+01 2.3234E-02 2.0616E-02 1.0715E-02 7.8215E-03 - 3.1623E+01 1.5813E-02 1.4344E-02 6.8103E-03 5.1846E-03 - 3.5481E+01 1.1324E-02 1.0179E-02 4.7115E-03 3.5768E-03 - 3.9811E+01 8.1173E-03 7.2307E-03 3.2470E-03 2.4665E-03 - 4.4668E+01 5.8050E-03 5.1239E-03 2.2295E-03 1.6972E-03 - 5.0119E+01 4.1424E-03 3.6285E-03 1.5263E-03 1.1625E-03 - 5.6234E+01 2.9574E-03 2.5830E-03 1.0409E-03 8.0026E-04 - 6.3096E+01 2.1202E-03 1.8290E-03 7.0998E-04 5.5018E-04 - 7.0795E+01 1.5162E-03 1.2929E-03 4.8083E-04 3.7431E-04 - 7.9433E+01 1.0779E-03 9.1227E-04 3.2377E-04 2.5170E-04 - 8.9125E+01 7.6302E-04 6.3889E-04 2.2042E-04 1.6822E-04 - 1.0000E+02 5.4773E-04 4.5473E-04 1.4826E-04 1.1513E-04 - 1.1220E+02 3.8967E-04 3.2104E-04 9.9614E-05 7.7343E-05 - 1.2589E+02 2.7631E-04 2.2582E-04 6.6500E-05 5.1817E-05 - 1.4125E+02 1.9589E-04 1.5844E-04 4.4585E-05 3.4648E-05 - 1.5849E+02 1.3881E-04 1.1129E-04 2.9698E-05 2.3067E-05 - 1.7783E+02 9.8279E-05 7.8115E-05 1.9804E-05 1.5359E-05 - 1.9953E+02 6.9657E-05 5.4472E-05 1.3104E-05 1.0116E-05 - 2.2387E+02 4.9089E-05 3.8100E-05 8.6417E-06 6.6829E-06 - 2.5119E+02 3.4718E-05 2.6716E-05 5.7535E-06 4.4469E-06 - 2.8184E+02 2.4389E-05 1.8614E-05 3.7436E-06 2.9184E-06 - 3.1623E+02 1.7147E-05 1.2978E-05 2.4714E-06 1.9544E-06 - 3.5481E+02 1.2055E-05 9.0293E-06 1.6263E-06 1.2851E-06 - 3.9811E+02 8.4551E-06 6.2629E-06 1.0760E-06 8.4481E-07 - 4.4668E+02 5.9515E-06 4.3365E-06 7.0594E-07 5.4958E-07 - 5.0119E+02 4.1632E-06 3.0047E-06 4.6024E-07 3.5977E-07 - 5.6234E+02 2.9174E-06 2.1043E-06 3.0347E-07 2.3737E-07 - 6.3096E+02 2.0397E-06 1.4576E-06 1.9847E-07 1.5725E-07 - 7.0795E+02 1.4290E-06 1.0070E-06 1.2902E-07 1.0432E-07 - 7.9433E+02 9.9859E-07 6.9622E-07 8.4773E-08 6.7630E-08 - 8.9125E+02 6.9647E-07 4.8110E-07 5.6302E-08 4.3877E-08 - 1.0000E+03 4.8623E-07 3.3082E-07 3.6792E-08 2.8958E-08 - 1.1220E+03 3.3765E-07 2.2818E-07 2.4677E-08 1.8959E-08 - 1.2589E+03 2.3659E-07 1.5740E-07 1.6134E-08 1.2573E-08 - 1.4125E+03 1.6504E-07 1.0816E-07 1.0452E-08 8.2896E-09 - 1.5849E+03 1.1460E-07 7.4577E-08 6.9388E-09 5.4532E-09 - 1.7783E+03 7.9504E-08 5.1344E-08 4.4537E-09 3.5846E-09 - 1.9953E+03 5.5030E-08 3.5279E-08 2.9919E-09 2.3776E-09 - 2.2387E+03 3.8299E-08 2.4270E-08 2.0056E-09 1.5475E-09 - 2.5119E+03 2.6516E-08 1.6686E-08 1.3292E-09 1.0414E-09 - 2.8184E+03 1.8243E-08 1.1388E-08 8.9348E-10 7.0544E-10 - 3.1623E+03 1.2725E-08 7.8655E-09 5.8860E-10 4.5174E-10 - 3.5481E+03 8.7226E-09 5.3417E-09 3.9120E-10 2.9960E-10 - 3.9811E+03 5.9691E-09 3.6343E-09 2.5231E-10 1.9956E-10 - 4.4668E+03 4.1011E-09 2.4781E-09 1.6153E-10 1.2801E-10 - 5.0119E+03 2.8202E-09 1.6924E-09 1.0674E-10 8.4723E-11 - 5.6234E+03 1.9285E-09 1.1400E-09 7.1736E-11 5.6759E-11 - 6.3096E+03 1.3174E-09 7.6498E-10 5.0890E-11 3.6652E-11 - 7.0795E+03 8.9620E-10 5.1824E-10 3.3989E-11 2.3858E-11 - 7.9433E+03 6.0854E-10 3.5051E-10 2.2004E-11 1.5707E-11 - 8.9125E+03 4.1116E-10 2.3530E-10 1.4157E-11 1.0303E-11 - 1.0000E+04 2.7871E-10 1.5800E-10 9.0739E-12 6.6085E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.3107E+04 5.3425E+04 2.5431E+04 2.4010E+04 - 1.1220E-01 4.3507E+04 4.3678E+04 2.1308E+04 1.9958E+04 - 1.2589E-01 3.5613E+04 3.5299E+04 1.7611E+04 1.6556E+04 - 1.4125E-01 2.8915E+04 2.8297E+04 1.4283E+04 1.3471E+04 - 1.5849E-01 2.3167E+04 2.2496E+04 1.1471E+04 1.0657E+04 - 1.7783E-01 1.8366E+04 1.7756E+04 9.1353E+03 8.3947E+03 - 1.9953E-01 1.4266E+04 1.3839E+04 7.2046E+03 6.6606E+03 - 2.2387E-01 1.0852E+04 1.0672E+04 5.6283E+03 5.1175E+03 - 2.5119E-01 8.3374E+03 8.1304E+03 4.4136E+03 3.9537E+03 - 2.8184E-01 6.3770E+03 6.0858E+03 3.4509E+03 3.0577E+03 - 3.1623E-01 4.7986E+03 4.4942E+03 2.6240E+03 2.3103E+03 - 3.5481E-01 3.5757E+03 3.3401E+03 1.9488E+03 1.7333E+03 - 3.9811E-01 2.6517E+03 2.4985E+03 1.4510E+03 1.2969E+03 - 4.4668E-01 1.9550E+03 1.8139E+03 1.0846E+03 9.7876E+02 - 5.0119E-01 1.4139E+03 1.2885E+03 7.9975E+02 7.1554E+02 - 5.6234E-01 1.0347E+03 9.4071E+02 5.6501E+02 5.2487E+02 - 6.3096E-01 7.6846E+02 6.9015E+02 4.1964E+02 3.8488E+02 - 7.0795E-01 5.6549E+02 5.0968E+02 3.1343E+02 2.7420E+02 - 7.9433E-01 4.1143E+02 3.7897E+02 2.2450E+02 2.0510E+02 - 8.9125E-01 3.0211E+02 2.7228E+02 1.5912E+02 1.4884E+02 - 1.0000E+00 2.2614E+02 1.9620E+02 1.1449E+02 1.1308E+02 - 1.1220E+00 1.6635E+02 1.4357E+02 8.4643E+01 8.2394E+01 - 1.2589E+00 1.2355E+02 1.0757E+02 6.4734E+01 6.0090E+01 - 1.4125E+00 9.2481E+01 7.9220E+01 4.6194E+01 4.4507E+01 - 1.5849E+00 6.7147E+01 5.7689E+01 3.3358E+01 3.3998E+01 - 1.7783E+00 4.9205E+01 4.1969E+01 2.5816E+01 2.5760E+01 - 1.9953E+00 3.7305E+01 3.0256E+01 1.9216E+01 1.8237E+01 - 2.2387E+00 2.7131E+01 2.2849E+01 1.3220E+01 1.3366E+01 - 2.5119E+00 1.9603E+01 1.6948E+01 9.4042E+00 1.0093E+01 - 2.8184E+00 1.4581E+01 1.2515E+01 7.4666E+00 7.0751E+00 - 3.1623E+00 1.0737E+01 8.9843E+00 5.6049E+00 5.1080E+00 - 3.5481E+00 7.8510E+00 6.7225E+00 4.1065E+00 3.6645E+00 - 3.9811E+00 5.7142E+00 4.8969E+00 2.9594E+00 2.6401E+00 - 4.4668E+00 4.1292E+00 3.5847E+00 2.1630E+00 1.9599E+00 - 5.0119E+00 3.0364E+00 2.6271E+00 1.6119E+00 1.4270E+00 - 5.6234E+00 2.2212E+00 1.8890E+00 1.1638E+00 1.0302E+00 - 6.3096E+00 1.6132E+00 1.4133E+00 8.5420E-01 7.1837E-01 - 7.0795E+00 1.1601E+00 1.0069E+00 6.2896E-01 4.9429E-01 - 7.9433E+00 8.5327E-01 7.4574E-01 4.6007E-01 3.4594E-01 - 8.9125E+00 6.3647E-01 5.6938E-01 3.1990E-01 2.6955E-01 - 1.0000E+01 4.3119E-01 3.9422E-01 2.1767E-01 1.8285E-01 - 1.1220E+01 3.0990E-01 2.8661E-01 1.6178E-01 1.2595E-01 - 1.2589E+01 2.2744E-01 2.0337E-01 1.1228E-01 8.9373E-02 - 1.4125E+01 1.6505E-01 1.4870E-01 7.8394E-02 6.0906E-02 - 1.5849E+01 1.1678E-01 1.1065E-01 5.7418E-02 4.2551E-02 - 1.7783E+01 8.2958E-02 7.9276E-02 4.1389E-02 3.1364E-02 - 1.9953E+01 5.9200E-02 5.6003E-02 2.8346E-02 2.1930E-02 - 2.2387E+01 4.1698E-02 3.9422E-02 1.9802E-02 1.6121E-02 - 2.5119E+01 3.0607E-02 2.7678E-02 1.4246E-02 1.1328E-02 - 2.8184E+01 2.2733E-02 2.0333E-02 9.8265E-03 7.4247E-03 - 3.1623E+01 1.5884E-02 1.4383E-02 6.8290E-03 5.1928E-03 - 3.5481E+01 1.1374E-02 1.0225E-02 4.6990E-03 3.5994E-03 - 3.9811E+01 8.1197E-03 7.2663E-03 3.2281E-03 2.4738E-03 - 4.4668E+01 5.8205E-03 5.1585E-03 2.2231E-03 1.7047E-03 - 5.0119E+01 4.1633E-03 3.6594E-03 1.5294E-03 1.1701E-03 - 5.6234E+01 2.9723E-03 2.5867E-03 1.0440E-03 8.0098E-04 - 6.3096E+01 2.1181E-03 1.8321E-03 7.1088E-04 5.4326E-04 - 7.0795E+01 1.5145E-03 1.2983E-03 4.8136E-04 3.7083E-04 - 7.9433E+01 1.0820E-03 9.1745E-04 3.2358E-04 2.5368E-04 - 8.9125E+01 7.6932E-04 6.4895E-04 2.1872E-04 1.6986E-04 - 1.0000E+02 5.4716E-04 4.5579E-04 1.4833E-04 1.1458E-04 - 1.1220E+02 3.8851E-04 3.2085E-04 9.9447E-05 7.6962E-05 - 1.2589E+02 2.7627E-04 2.2545E-04 6.6534E-05 5.1835E-05 - 1.4125E+02 1.9657E-04 1.5809E-04 4.4575E-05 3.4908E-05 - 1.5849E+02 1.3918E-04 1.1111E-04 2.9596E-05 2.3242E-05 - 1.7783E+02 9.8289E-05 7.8322E-05 1.9553E-05 1.5549E-05 - 1.9953E+02 6.9488E-05 5.4719E-05 1.3050E-05 1.0326E-05 - 2.2387E+02 4.8987E-05 3.8044E-05 8.6541E-06 6.8031E-06 - 2.5119E+02 3.4583E-05 2.6530E-05 5.6465E-06 4.4488E-06 - 2.8184E+02 2.4462E-05 1.8576E-05 3.7403E-06 2.9522E-06 - 3.1623E+02 1.7164E-05 1.2959E-05 2.4792E-06 1.9373E-06 - 3.5481E+02 1.2047E-05 8.9998E-06 1.6254E-06 1.2773E-06 - 3.9811E+02 8.4480E-06 6.2458E-06 1.0606E-06 8.4417E-07 - 4.4668E+02 5.9352E-06 4.3387E-06 7.0099E-07 5.5187E-07 - 5.0119E+02 4.1639E-06 3.0117E-06 4.6046E-07 3.6422E-07 - 5.6234E+02 2.9209E-06 2.0991E-06 3.0402E-07 2.3887E-07 - 6.3096E+02 2.0364E-06 1.4502E-06 1.9787E-07 1.5507E-07 - 7.0795E+02 1.4241E-06 1.0012E-06 1.2857E-07 1.0141E-07 - 7.9433E+02 9.9938E-07 6.9460E-07 8.5231E-08 6.6966E-08 - 8.9125E+02 6.9580E-07 4.7908E-07 5.5897E-08 4.4469E-08 - 1.0000E+03 4.8567E-07 3.3120E-07 3.6479E-08 2.9259E-08 - 1.1220E+03 3.3887E-07 2.2900E-07 2.3694E-08 1.8947E-08 - 1.2589E+03 2.3507E-07 1.5737E-07 1.5558E-08 1.2754E-08 - 1.4125E+03 1.6356E-07 1.0792E-07 1.0491E-08 8.7091E-09 - 1.5849E+03 1.1348E-07 7.4505E-08 7.0762E-09 5.6879E-09 - 1.7783E+03 7.8966E-08 5.1391E-08 4.5414E-09 3.6492E-09 - 1.9953E+03 5.5326E-08 3.5469E-08 3.0055E-09 2.3277E-09 - 2.2387E+03 3.8421E-08 2.4507E-08 2.0305E-09 1.5394E-09 - 2.5119E+03 2.6551E-08 1.6670E-08 1.3240E-09 1.0537E-09 - 2.8184E+03 1.8390E-08 1.1370E-08 8.6038E-10 6.9905E-10 - 3.1623E+03 1.2728E-08 7.8639E-09 5.7889E-10 4.4546E-10 - 3.5481E+03 8.6989E-09 5.3285E-09 3.8704E-10 2.9419E-10 - 3.9811E+03 5.9676E-09 3.6387E-09 2.5952E-10 1.9715E-10 - 4.4668E+03 4.0957E-09 2.4669E-09 1.7444E-10 1.2854E-10 - 5.0119E+03 2.8036E-09 1.6616E-09 1.1297E-10 8.6875E-11 - 5.6234E+03 1.9195E-09 1.1237E-09 7.3127E-11 5.6073E-11 - 6.3096E+03 1.3163E-09 7.6473E-10 4.8284E-11 3.5519E-11 - 7.0795E+03 8.9620E-10 5.2106E-10 3.1640E-11 2.3983E-11 - 7.9433E+03 6.0792E-10 3.5261E-10 2.1377E-11 1.6235E-11 - 8.9125E+03 4.0841E-10 2.3398E-10 1.4443E-11 1.0673E-11 - 1.0000E+04 2.7733E-10 1.5667E-10 9.5986E-12 7.1411E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4148E+04 5.4543E+04 2.6115E+04 2.3968E+04 - 1.1220E-01 4.4278E+04 4.4928E+04 2.2101E+04 1.9986E+04 - 1.2589E-01 3.6162E+04 3.6528E+04 1.8375E+04 1.6245E+04 - 1.4125E-01 2.9526E+04 2.9423E+04 1.5106E+04 1.3236E+04 - 1.5849E-01 2.3624E+04 2.3496E+04 1.2093E+04 1.0607E+04 - 1.7783E-01 1.8621E+04 1.8504E+04 9.6583E+03 8.3746E+03 - 1.9953E-01 1.4642E+04 1.4421E+04 7.7662E+03 6.6282E+03 - 2.2387E-01 1.1219E+04 1.1152E+04 6.0205E+03 5.1740E+03 - 2.5119E-01 8.5362E+03 8.5095E+03 4.6818E+03 3.9310E+03 - 2.8184E-01 6.4821E+03 6.4177E+03 3.6475E+03 3.0032E+03 - 3.1623E-01 4.8490E+03 4.8348E+03 2.7502E+03 2.3113E+03 - 3.5481E-01 3.6312E+03 3.5714E+03 2.0771E+03 1.7355E+03 - 3.9811E-01 2.6892E+03 2.6261E+03 1.5650E+03 1.2977E+03 - 4.4668E-01 2.0023E+03 1.9646E+03 1.1672E+03 9.7043E+02 - 5.0119E-01 1.4676E+03 1.4501E+03 8.6436E+02 7.0780E+02 - 5.6234E-01 1.0599E+03 1.0413E+03 6.2729E+02 5.2085E+02 - 6.3096E-01 7.8759E+02 7.6043E+02 4.5849E+02 3.7345E+02 - 7.0795E-01 5.7672E+02 5.5870E+02 3.4116E+02 2.7000E+02 - 7.9433E-01 4.2226E+02 4.0528E+02 2.5648E+02 2.0604E+02 - 8.9125E-01 3.1331E+02 2.9464E+02 1.8726E+02 1.4349E+02 - 1.0000E+00 2.2922E+02 2.1894E+02 1.3244E+02 1.0822E+02 - 1.1220E+00 1.6877E+02 1.6184E+02 9.5583E+01 8.3057E+01 - 1.2589E+00 1.2533E+02 1.1728E+02 7.2266E+01 6.1938E+01 - 1.4125E+00 9.2547E+01 8.6004E+01 5.3564E+01 4.4265E+01 - 1.5849E+00 6.6570E+01 6.3164E+01 3.8629E+01 3.1945E+01 - 1.7783E+00 4.9625E+01 4.7349E+01 2.8290E+01 2.3599E+01 - 1.9953E+00 3.6962E+01 3.4796E+01 2.0413E+01 1.7631E+01 - 2.2387E+00 2.7001E+01 2.4743E+01 1.5058E+01 1.2790E+01 - 2.5119E+00 2.0623E+01 1.8608E+01 1.1068E+01 9.5576E+00 - 2.8184E+00 1.4853E+01 1.3485E+01 8.0539E+00 7.1522E+00 - 3.1623E+00 1.0499E+01 9.6965E+00 6.0850E+00 4.8700E+00 - 3.5481E+00 7.6786E+00 7.0211E+00 4.4918E+00 3.4511E+00 - 3.9811E+00 5.6901E+00 5.1206E+00 3.2438E+00 2.4862E+00 - 4.4668E+00 4.1638E+00 3.7561E+00 2.3782E+00 1.8405E+00 - 5.0119E+00 3.0138E+00 2.7246E+00 1.6972E+00 1.3291E+00 - 5.6234E+00 2.1256E+00 2.0069E+00 1.1233E+00 8.9773E-01 - 6.3096E+00 1.5087E+00 1.4998E+00 8.2765E-01 6.4667E-01 - 7.0795E+00 1.0902E+00 1.1011E+00 6.2460E-01 4.8254E-01 - 7.9433E+00 7.9922E-01 7.9135E-01 4.5060E-01 3.4355E-01 - 8.9125E+00 5.7651E-01 5.4145E-01 3.2367E-01 2.5703E-01 - 1.0000E+01 4.2487E-01 4.0273E-01 2.2954E-01 1.7971E-01 - 1.1220E+01 3.0668E-01 2.9162E-01 1.6592E-01 1.2484E-01 - 1.2589E+01 2.2189E-01 2.0330E-01 1.1745E-01 9.0117E-02 - 1.4125E+01 1.6033E-01 1.4377E-01 8.1005E-02 6.4356E-02 - 1.5849E+01 1.1791E-01 1.0725E-01 5.7885E-02 4.6168E-02 - 1.7783E+01 8.4601E-02 7.7641E-02 4.0956E-02 3.2172E-02 - 1.9953E+01 6.0369E-02 5.4057E-02 2.7475E-02 2.2956E-02 - 2.2387E+01 4.3605E-02 3.7758E-02 1.9137E-02 1.5806E-02 - 2.5119E+01 3.0255E-02 2.8098E-02 1.3116E-02 1.1120E-02 - 2.8184E+01 2.1919E-02 1.9506E-02 9.0681E-03 7.6057E-03 - 3.1623E+01 1.5819E-02 1.4326E-02 6.8098E-03 5.1589E-03 - 3.5481E+01 1.1321E-02 1.0158E-02 4.6993E-03 3.5752E-03 - 3.9811E+01 8.1213E-03 7.2200E-03 3.2379E-03 2.4710E-03 - 4.4668E+01 5.8205E-03 5.1378E-03 2.2237E-03 1.7031E-03 - 5.0119E+01 4.1526E-03 3.6396E-03 1.5150E-03 1.1698E-03 - 5.6234E+01 2.9625E-03 2.5838E-03 1.0345E-03 7.9682E-04 - 6.3096E+01 2.1209E-03 1.8315E-03 7.0726E-04 5.4178E-04 - 7.0795E+01 1.5170E-03 1.2933E-03 4.8394E-04 3.7284E-04 - 7.9433E+01 1.0798E-03 9.0811E-04 3.2710E-04 2.5341E-04 - 8.9125E+01 7.7280E-04 6.4235E-04 2.1896E-04 1.6994E-04 - 1.0000E+02 5.4636E-04 4.5598E-04 1.4794E-04 1.1503E-04 - 1.1220E+02 3.8861E-04 3.2098E-04 9.9356E-05 7.7487E-05 - 1.2589E+02 2.7623E-04 2.2565E-04 6.6210E-05 5.1697E-05 - 1.4125E+02 1.9634E-04 1.5811E-04 4.4114E-05 3.4636E-05 - 1.5849E+02 1.3886E-04 1.1105E-04 2.9301E-05 2.3134E-05 - 1.7783E+02 9.8076E-05 7.7855E-05 1.9435E-05 1.5304E-05 - 1.9953E+02 6.9403E-05 5.4543E-05 1.3059E-05 1.0199E-05 - 2.2387E+02 4.9074E-05 3.8290E-05 8.7866E-06 6.8281E-06 - 2.5119E+02 3.4432E-05 2.6677E-05 5.7408E-06 4.4609E-06 - 2.8184E+02 2.4244E-05 1.8526E-05 3.7251E-06 2.9262E-06 - 3.1623E+02 1.7130E-05 1.2940E-05 2.4707E-06 1.9524E-06 - 3.5481E+02 1.2061E-05 9.0110E-06 1.6307E-06 1.2922E-06 - 3.9811E+02 8.4708E-06 6.3012E-06 1.0705E-06 8.4605E-07 - 4.4668E+02 5.9597E-06 4.3624E-06 7.0488E-07 5.5385E-07 - 5.0119E+02 4.1615E-06 3.0144E-06 4.6337E-07 3.6156E-07 - 5.6234E+02 2.9236E-06 2.0920E-06 3.0463E-07 2.3912E-07 - 6.3096E+02 2.0448E-06 1.4515E-06 1.9721E-07 1.5550E-07 - 7.0795E+02 1.4275E-06 1.0040E-06 1.3134E-07 1.0180E-07 - 7.9433E+02 9.9641E-07 6.9201E-07 8.6880E-08 6.7285E-08 - 8.9125E+02 6.9742E-07 4.7779E-07 5.5555E-08 4.4380E-08 - 1.0000E+03 4.8522E-07 3.3055E-07 3.6314E-08 2.9196E-08 - 1.1220E+03 3.3730E-07 2.2848E-07 2.3318E-08 1.9133E-08 - 1.2589E+03 2.3560E-07 1.5848E-07 1.5546E-08 1.2681E-08 - 1.4125E+03 1.6339E-07 1.0927E-07 1.0491E-08 8.5000E-09 - 1.5849E+03 1.1378E-07 7.5248E-08 6.9488E-09 5.6820E-09 - 1.7783E+03 7.9210E-08 5.1813E-08 4.6290E-09 3.7065E-09 - 1.9953E+03 5.5054E-08 3.5424E-08 3.1176E-09 2.3875E-09 - 2.2387E+03 3.8268E-08 2.4162E-08 2.0234E-09 1.5981E-09 - 2.5119E+03 2.6487E-08 1.6624E-08 1.3665E-09 1.0395E-09 - 2.8184E+03 1.8162E-08 1.1426E-08 9.1837E-10 6.8281E-10 - 3.1623E+03 1.2664E-08 7.8475E-09 5.7661E-10 4.5041E-10 - 3.5481E+03 8.6951E-09 5.3274E-09 3.8512E-10 2.9507E-10 - 3.9811E+03 5.9908E-09 3.6284E-09 2.5362E-10 1.9606E-10 - 4.4668E+03 4.1149E-09 2.4626E-09 1.6633E-10 1.2683E-10 - 5.0119E+03 2.8341E-09 1.6804E-09 1.0920E-10 8.2021E-11 - 5.6234E+03 1.9451E-09 1.1394E-09 7.2623E-11 5.5117E-11 - 6.3096E+03 1.3063E-09 7.7029E-10 4.9076E-11 3.6460E-11 - 7.0795E+03 8.8962E-10 5.1946E-10 3.2700E-11 2.4411E-11 - 7.9433E+03 6.0799E-10 3.4884E-10 2.1633E-11 1.5271E-11 - 8.9125E+03 4.1218E-10 2.3340E-10 1.4026E-11 9.9887E-12 - 1.0000E+04 2.7891E-10 1.5555E-10 9.1471E-12 6.7965E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4179E+04 5.5870E+04 2.7258E+04 2.4180E+04 - 1.1220E-01 4.4863E+04 4.5614E+04 2.2717E+04 2.0000E+04 - 1.2589E-01 3.6809E+04 3.7206E+04 1.8842E+04 1.6325E+04 - 1.4125E-01 2.9599E+04 3.0133E+04 1.5576E+04 1.3111E+04 - 1.5849E-01 2.3691E+04 2.4219E+04 1.2627E+04 1.0483E+04 - 1.7783E-01 1.8826E+04 1.9190E+04 1.0068E+04 8.3461E+03 - 1.9953E-01 1.4607E+04 1.4976E+04 8.0249E+03 6.5967E+03 - 2.2387E-01 1.1190E+04 1.1616E+04 6.3962E+03 5.0936E+03 - 2.5119E-01 8.6562E+03 8.9321E+03 4.9854E+03 3.9698E+03 - 2.8184E-01 6.6016E+03 6.7001E+03 3.7987E+03 3.0509E+03 - 3.1623E-01 4.8903E+03 5.0073E+03 2.9234E+03 2.2771E+03 - 3.5481E-01 3.6599E+03 3.7397E+03 2.2564E+03 1.7417E+03 - 3.9811E-01 2.7271E+03 2.7732E+03 1.7017E+03 1.3017E+03 - 4.4668E-01 1.9960E+03 2.0647E+03 1.2700E+03 9.6848E+02 - 5.0119E-01 1.4646E+03 1.5199E+03 9.3831E+02 7.0632E+02 - 5.6234E-01 1.0839E+03 1.1237E+03 6.8704E+02 5.0628E+02 - 6.3096E-01 7.8407E+02 8.2458E+02 5.1430E+02 3.7565E+02 - 7.0795E-01 5.6386E+02 5.9684E+02 3.8265E+02 2.8001E+02 - 7.9433E-01 4.1675E+02 4.4693E+02 2.7611E+02 2.0775E+02 - 8.9125E-01 3.0589E+02 3.3368E+02 2.0772E+02 1.4683E+02 - 1.0000E+00 2.2728E+02 2.3383E+02 1.4766E+02 1.0551E+02 - 1.1220E+00 1.6786E+02 1.7191E+02 1.0973E+02 7.6856E+01 - 1.2589E+00 1.2564E+02 1.2509E+02 8.2527E+01 5.6851E+01 - 1.4125E+00 9.2170E+01 9.1452E+01 5.9147E+01 4.1533E+01 - 1.5849E+00 6.6291E+01 6.8375E+01 4.3682E+01 2.9850E+01 - 1.7783E+00 4.7743E+01 5.0252E+01 3.1407E+01 2.2606E+01 - 1.9953E+00 3.5843E+01 3.6488E+01 2.2343E+01 1.7363E+01 - 2.2387E+00 2.7140E+01 2.7070E+01 1.6717E+01 1.2502E+01 - 2.5119E+00 1.9570E+01 1.9987E+01 1.2479E+01 9.0401E+00 - 2.8184E+00 1.4392E+01 1.4252E+01 9.1702E+00 6.7359E+00 - 3.1623E+00 1.0507E+01 1.0459E+01 6.7649E+00 4.6552E+00 - 3.5481E+00 7.7648E+00 7.7000E+00 4.7672E+00 3.4508E+00 - 3.9811E+00 5.7411E+00 5.6158E+00 3.3708E+00 2.5817E+00 - 4.4668E+00 4.1381E+00 4.1423E+00 2.4766E+00 1.8492E+00 - 5.0119E+00 2.9839E+00 2.9299E+00 1.8110E+00 1.3359E+00 - 5.6234E+00 2.1805E+00 2.0772E+00 1.3076E+00 9.5936E-01 - 6.3096E+00 1.5695E+00 1.5091E+00 9.3275E-01 7.0099E-01 - 7.0795E+00 1.1226E+00 1.0827E+00 6.6301E-01 5.0385E-01 - 7.9433E+00 8.5927E-01 7.9699E-01 4.7090E-01 3.4223E-01 - 8.9125E+00 6.4742E-01 5.9544E-01 3.3235E-01 2.4132E-01 - 1.0000E+01 4.2968E-01 4.2452E-01 2.3929E-01 1.7810E-01 - 1.1220E+01 3.0891E-01 2.9926E-01 1.7109E-01 1.2482E-01 - 1.2589E+01 2.2271E-01 2.1034E-01 1.2116E-01 8.9858E-02 - 1.4125E+01 1.6250E-01 1.5084E-01 8.3788E-02 6.3888E-02 - 1.5849E+01 1.1889E-01 1.1029E-01 5.7251E-02 4.4248E-02 - 1.7783E+01 8.4621E-02 7.9463E-02 4.0064E-02 3.1270E-02 - 1.9953E+01 5.9277E-02 5.5866E-02 2.8998E-02 2.1740E-02 - 2.2387E+01 4.3122E-02 4.0652E-02 2.0470E-02 1.5117E-02 - 2.5119E+01 3.1354E-02 2.9458E-02 1.3828E-02 1.0542E-02 - 2.8184E+01 2.2167E-02 2.0561E-02 9.4985E-03 7.7344E-03 - 3.1623E+01 1.5872E-02 1.4351E-02 6.8066E-03 5.1939E-03 - 3.5481E+01 1.1400E-02 1.0213E-02 4.6989E-03 3.5917E-03 - 3.9811E+01 8.1531E-03 7.2675E-03 3.2428E-03 2.4653E-03 - 4.4668E+01 5.8148E-03 5.1627E-03 2.2219E-03 1.6960E-03 - 5.0119E+01 4.1529E-03 3.6569E-03 1.5138E-03 1.1703E-03 - 5.6234E+01 2.9711E-03 2.5842E-03 1.0338E-03 8.0136E-04 - 6.3096E+01 2.1317E-03 1.8324E-03 7.0256E-04 5.4894E-04 - 7.0795E+01 1.5179E-03 1.2937E-03 4.8078E-04 3.7345E-04 - 7.9433E+01 1.0793E-03 9.1572E-04 3.2940E-04 2.5212E-04 - 8.9125E+01 7.7105E-04 6.4868E-04 2.2257E-04 1.7043E-04 - 1.0000E+02 5.4695E-04 4.5557E-04 1.4734E-04 1.1496E-04 - 1.1220E+02 3.8914E-04 3.2115E-04 9.8958E-05 7.7338E-05 - 1.2589E+02 2.7601E-04 2.2635E-04 6.6531E-05 5.2068E-05 - 1.4125E+02 1.9567E-04 1.5889E-04 4.4402E-05 3.4914E-05 - 1.5849E+02 1.3914E-04 1.1139E-04 2.9565E-05 2.3151E-05 - 1.7783E+02 9.8620E-05 7.8197E-05 1.9615E-05 1.5364E-05 - 1.9953E+02 6.9512E-05 5.4795E-05 1.3068E-05 1.0204E-05 - 2.2387E+02 4.9144E-05 3.8214E-05 8.5453E-06 6.8356E-06 - 2.5119E+02 3.4723E-05 2.6669E-05 5.6691E-06 4.5531E-06 - 2.8184E+02 2.4418E-05 1.8668E-05 3.7834E-06 2.9726E-06 - 3.1623E+02 1.7203E-05 1.2980E-05 2.4653E-06 1.9559E-06 - 3.5481E+02 1.2093E-05 9.0501E-06 1.6259E-06 1.2866E-06 - 3.9811E+02 8.4796E-06 6.3083E-06 1.0789E-06 8.5081E-07 - 4.4668E+02 5.9610E-06 4.3696E-06 7.1004E-07 5.5252E-07 - 5.0119E+02 4.1799E-06 3.0287E-06 4.6245E-07 3.6180E-07 - 5.6234E+02 2.9326E-06 2.1005E-06 2.9912E-07 2.4045E-07 - 6.3096E+02 2.0503E-06 1.4599E-06 1.9558E-07 1.5607E-07 - 7.0795E+02 1.4305E-06 1.0122E-06 1.3006E-07 1.0210E-07 - 7.9433E+02 1.0004E-06 6.9864E-07 8.6343E-08 6.7657E-08 - 8.9125E+02 6.9922E-07 4.8082E-07 5.7026E-08 4.4892E-08 - 1.0000E+03 4.8735E-07 3.3037E-07 3.7217E-08 2.9447E-08 - 1.1220E+03 3.3797E-07 2.2824E-07 2.4377E-08 1.9197E-08 - 1.2589E+03 2.3538E-07 1.5793E-07 1.5766E-08 1.2757E-08 - 1.4125E+03 1.6430E-07 1.0928E-07 1.0281E-08 8.4116E-09 - 1.5849E+03 1.1403E-07 7.5270E-08 6.7558E-09 5.5233E-09 - 1.7783E+03 7.9447E-08 5.1605E-08 4.5757E-09 3.6585E-09 - 1.9953E+03 5.5501E-08 3.5496E-08 3.0165E-09 2.4458E-09 - 2.2387E+03 3.8368E-08 2.4544E-08 1.9990E-09 1.5759E-09 - 2.5119E+03 2.6457E-08 1.6765E-08 1.3404E-09 1.0394E-09 - 2.8184E+03 1.8224E-08 1.1302E-08 8.8134E-10 6.8227E-10 - 3.1623E+03 1.2664E-08 7.8272E-09 5.8317E-10 4.4118E-10 - 3.5481E+03 8.6961E-09 5.3432E-09 3.9651E-10 2.9729E-10 - 3.9811E+03 5.9689E-09 3.6102E-09 2.6260E-10 1.9778E-10 - 4.4668E+03 4.0856E-09 2.4478E-09 1.6895E-10 1.2982E-10 - 5.0119E+03 2.8226E-09 1.6675E-09 1.1278E-10 8.8413E-11 - 5.6234E+03 1.9302E-09 1.1236E-09 7.6539E-11 5.7514E-11 - 6.3096E+03 1.3158E-09 7.6688E-10 4.9281E-11 3.5629E-11 - 7.0795E+03 8.9188E-10 5.1762E-10 3.2217E-11 2.3636E-11 - 7.9433E+03 6.0596E-10 3.4677E-10 2.1906E-11 1.5447E-11 - 8.9125E+03 4.0938E-10 2.3282E-10 1.4524E-11 1.0045E-11 - 1.0000E+04 2.7440E-10 1.5547E-10 9.4047E-12 6.7638E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4669E+04 5.6608E+04 2.8037E+04 2.3939E+04 - 1.1220E-01 4.4668E+04 4.6748E+04 2.3714E+04 2.0000E+04 - 1.2589E-01 3.6726E+04 3.8523E+04 1.9513E+04 1.6295E+04 - 1.4125E-01 2.9986E+04 3.1021E+04 1.6024E+04 1.3048E+04 - 1.5849E-01 2.3874E+04 2.4891E+04 1.3160E+04 1.0435E+04 - 1.7783E-01 1.8893E+04 1.9790E+04 1.0567E+04 8.3598E+03 - 1.9953E-01 1.4824E+04 1.5350E+04 8.4277E+03 6.5823E+03 - 2.2387E-01 1.1532E+04 1.1990E+04 6.6687E+03 5.0666E+03 - 2.5119E-01 8.7722E+03 9.1722E+03 5.2371E+03 3.8854E+03 - 2.8184E-01 6.5528E+03 6.9541E+03 4.0847E+03 2.9467E+03 - 3.1623E-01 4.9280E+03 5.2866E+03 3.0928E+03 2.2485E+03 - 3.5481E-01 3.6713E+03 3.9445E+03 2.3532E+03 1.7244E+03 - 3.9811E-01 2.7362E+03 2.9101E+03 1.8136E+03 1.2813E+03 - 4.4668E-01 2.0297E+03 2.1669E+03 1.3544E+03 9.3234E+02 - 5.0119E-01 1.4667E+03 1.5974E+03 1.0011E+03 6.9297E+02 - 5.6234E-01 1.0746E+03 1.1679E+03 7.3430E+02 5.1637E+02 - 6.3096E-01 7.9110E+02 8.6972E+02 5.4076E+02 3.7624E+02 - 7.0795E-01 5.8568E+02 6.2645E+02 4.0765E+02 2.7604E+02 - 7.9433E-01 4.2854E+02 4.5507E+02 3.0755E+02 1.9723E+02 - 8.9125E-01 3.1036E+02 3.3963E+02 2.3116E+02 1.3998E+02 - 1.0000E+00 2.2972E+02 2.4657E+02 1.5987E+02 1.0362E+02 - 1.1220E+00 1.6819E+02 1.8326E+02 1.1705E+02 7.6609E+01 - 1.2589E+00 1.2330E+02 1.3379E+02 8.5834E+01 5.5445E+01 - 1.4125E+00 9.0955E+01 9.7321E+01 6.3834E+01 3.9688E+01 - 1.5849E+00 6.6141E+01 7.2468E+01 4.7947E+01 2.8959E+01 - 1.7783E+00 4.9054E+01 5.2744E+01 3.5415E+01 2.2541E+01 - 1.9953E+00 3.6554E+01 3.8226E+01 2.6399E+01 1.6246E+01 - 2.2387E+00 2.6835E+01 2.8039E+01 1.8894E+01 1.1515E+01 - 2.5119E+00 1.9350E+01 2.0566E+01 1.3452E+01 8.4209E+00 - 2.8184E+00 1.4217E+01 1.5133E+01 9.7424E+00 6.2872E+00 - 3.1623E+00 1.0488E+01 1.1036E+01 7.0182E+00 4.5492E+00 - 3.5481E+00 7.5316E+00 8.1012E+00 5.0604E+00 3.3127E+00 - 3.9811E+00 5.4844E+00 5.8720E+00 3.8481E+00 2.4049E+00 - 4.4668E+00 4.0166E+00 4.2302E+00 2.7308E+00 1.7283E+00 - 5.0119E+00 2.9665E+00 3.0644E+00 1.8872E+00 1.2104E+00 - 5.6234E+00 2.2388E+00 2.2708E+00 1.3682E+00 8.8398E-01 - 6.3096E+00 1.5938E+00 1.6575E+00 9.9241E-01 6.5227E-01 - 7.0795E+00 1.1153E+00 1.1706E+00 7.0091E-01 4.7595E-01 - 7.9433E+00 8.2331E-01 8.2768E-01 4.8928E-01 3.3318E-01 - 8.9125E+00 5.9796E-01 5.9532E-01 3.5711E-01 2.2324E-01 - 1.0000E+01 4.1949E-01 4.1895E-01 2.4995E-01 1.6241E-01 - 1.1220E+01 3.0121E-01 3.0149E-01 1.7372E-01 1.1895E-01 - 1.2589E+01 2.1826E-01 2.1974E-01 1.2224E-01 8.4886E-02 - 1.4125E+01 1.5658E-01 1.5688E-01 8.7585E-02 5.9450E-02 - 1.5849E+01 1.1517E-01 1.0994E-01 6.2353E-02 4.1395E-02 - 1.7783E+01 8.4570E-02 7.7304E-02 4.3461E-02 2.9749E-02 - 1.9953E+01 5.9397E-02 5.5429E-02 2.9606E-02 2.0877E-02 - 2.2387E+01 4.3344E-02 3.9931E-02 2.0571E-02 1.4153E-02 - 2.5119E+01 3.1700E-02 2.8305E-02 1.3532E-02 1.0597E-02 - 2.8184E+01 2.3192E-02 2.0662E-02 9.0339E-03 7.6728E-03 - 3.1623E+01 1.5823E-02 1.4325E-02 6.7789E-03 5.1737E-03 - 3.5481E+01 1.1308E-02 1.0183E-02 4.6935E-03 3.5735E-03 - 3.9811E+01 8.0991E-03 7.2179E-03 3.2403E-03 2.4681E-03 - 4.4668E+01 5.8170E-03 5.1306E-03 2.2247E-03 1.7059E-03 - 5.0119E+01 4.1718E-03 3.6467E-03 1.5152E-03 1.1696E-03 - 5.6234E+01 2.9815E-03 2.5812E-03 1.0353E-03 8.0189E-04 - 6.3096E+01 2.1214E-03 1.8257E-03 7.1075E-04 5.4533E-04 - 7.0795E+01 1.5117E-03 1.2928E-03 4.8414E-04 3.7206E-04 - 7.9433E+01 1.0808E-03 9.0901E-04 3.2449E-04 2.5256E-04 - 8.9125E+01 7.6914E-04 6.4379E-04 2.1996E-04 1.7017E-04 - 1.0000E+02 5.4736E-04 4.5516E-04 1.4798E-04 1.1527E-04 - 1.1220E+02 3.8804E-04 3.2077E-04 9.8946E-05 7.7477E-05 - 1.2589E+02 2.7570E-04 2.2569E-04 6.6292E-05 5.1761E-05 - 1.4125E+02 1.9573E-04 1.5820E-04 4.4289E-05 3.4538E-05 - 1.5849E+02 1.3878E-04 1.1085E-04 2.9629E-05 2.3010E-05 - 1.7783E+02 9.8164E-05 7.7407E-05 1.9832E-05 1.5288E-05 - 1.9953E+02 6.9632E-05 5.4143E-05 1.3153E-05 1.0193E-05 - 2.2387E+02 4.9198E-05 3.7951E-05 8.6566E-06 6.7264E-06 - 2.5119E+02 3.4486E-05 2.6660E-05 5.6853E-06 4.4519E-06 - 2.8184E+02 2.4295E-05 1.8636E-05 3.7253E-06 2.9873E-06 - 3.1623E+02 1.7147E-05 1.2964E-05 2.4686E-06 1.9530E-06 - 3.5481E+02 1.2068E-05 9.0431E-06 1.6258E-06 1.2826E-06 - 3.9811E+02 8.4918E-06 6.2768E-06 1.0718E-06 8.4383E-07 - 4.4668E+02 5.9495E-06 4.3431E-06 7.0419E-07 5.5551E-07 - 5.0119E+02 4.1768E-06 3.0045E-06 4.5994E-07 3.6541E-07 - 5.6234E+02 2.9299E-06 2.0877E-06 3.0017E-07 2.3815E-07 - 6.3096E+02 2.0352E-06 1.4509E-06 1.9626E-07 1.5540E-07 - 7.0795E+02 1.4208E-06 1.0061E-06 1.2838E-07 1.0121E-07 - 7.9433E+02 9.9696E-07 6.9573E-07 8.4068E-08 6.7694E-08 - 8.9125E+02 6.9406E-07 4.8207E-07 5.5904E-08 4.4115E-08 - 1.0000E+03 4.8357E-07 3.3036E-07 3.6565E-08 2.8474E-08 - 1.1220E+03 3.3646E-07 2.2800E-07 2.4122E-08 1.8850E-08 - 1.2589E+03 2.3440E-07 1.5734E-07 1.5786E-08 1.2650E-08 - 1.4125E+03 1.6323E-07 1.0821E-07 1.0203E-08 8.4698E-09 - 1.5849E+03 1.1419E-07 7.5254E-08 6.7815E-09 5.4874E-09 - 1.7783E+03 7.9384E-08 5.1454E-08 4.5157E-09 3.6330E-09 - 1.9953E+03 5.5161E-08 3.5250E-08 3.0498E-09 2.4426E-09 - 2.2387E+03 3.7971E-08 2.4450E-08 2.0210E-09 1.5765E-09 - 2.5119E+03 2.6243E-08 1.6782E-08 1.3314E-09 1.0422E-09 - 2.8184E+03 1.8195E-08 1.1408E-08 8.7135E-10 6.9533E-10 - 3.1623E+03 1.2690E-08 7.8112E-09 5.8104E-10 4.4566E-10 - 3.5481E+03 8.6760E-09 5.3129E-09 3.8173E-10 2.9260E-10 - 3.9811E+03 5.9295E-09 3.6088E-09 2.5790E-10 1.9435E-10 - 4.4668E+03 4.0662E-09 2.4696E-09 1.7324E-10 1.3062E-10 - 5.0119E+03 2.8121E-09 1.6968E-09 1.1171E-10 8.6135E-11 - 5.6234E+03 1.9267E-09 1.1503E-09 7.1945E-11 5.5084E-11 - 6.3096E+03 1.3155E-09 7.7124E-10 4.9778E-11 3.7407E-11 - 7.0795E+03 8.9510E-10 5.1995E-10 3.2722E-11 2.4557E-11 - 7.9433E+03 6.0618E-10 3.5086E-10 2.1608E-11 1.6275E-11 - 8.9125E+03 4.1045E-10 2.3530E-10 1.4175E-11 1.0653E-11 - 1.0000E+04 2.7784E-10 1.5700E-10 9.4345E-12 6.9823E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4597E+04 5.7436E+04 2.8411E+04 2.3637E+04 - 1.1220E-01 4.4642E+04 4.7096E+04 2.3751E+04 1.9596E+04 - 1.2589E-01 3.6603E+04 3.8437E+04 1.9554E+04 1.6209E+04 - 1.4125E-01 2.9753E+04 3.1125E+04 1.6151E+04 1.3018E+04 - 1.5849E-01 2.3941E+04 2.5056E+04 1.3228E+04 1.0395E+04 - 1.7783E-01 1.8927E+04 2.0093E+04 1.0697E+04 8.3032E+03 - 1.9953E-01 1.4847E+04 1.5705E+04 8.5212E+03 6.5017E+03 - 2.2387E-01 1.1483E+04 1.2133E+04 6.7336E+03 5.0960E+03 - 2.5119E-01 8.6780E+03 9.3270E+03 5.3454E+03 3.9642E+03 - 2.8184E-01 6.5789E+03 7.0757E+03 4.1119E+03 2.9979E+03 - 3.1623E-01 4.9771E+03 5.3619E+03 3.1525E+03 2.2020E+03 - 3.5481E-01 3.7106E+03 4.0238E+03 2.4541E+03 1.6550E+03 - 3.9811E-01 2.7202E+03 2.9818E+03 1.8315E+03 1.2401E+03 - 4.4668E-01 1.9978E+03 2.2011E+03 1.3768E+03 9.0319E+02 - 5.0119E-01 1.4638E+03 1.6419E+03 1.0531E+03 6.6874E+02 - 5.6234E-01 1.0663E+03 1.2173E+03 7.7510E+02 4.9834E+02 - 6.3096E-01 7.8831E+02 8.8356E+02 5.5957E+02 3.6951E+02 - 7.0795E-01 5.7911E+02 6.4086E+02 4.1642E+02 2.6700E+02 - 7.9433E-01 4.2604E+02 4.7588E+02 3.0950E+02 1.9215E+02 - 8.9125E-01 3.0534E+02 3.5774E+02 2.3249E+02 1.4116E+02 - 1.0000E+00 2.2685E+02 2.5776E+02 1.6912E+02 1.0088E+02 - 1.1220E+00 1.6550E+02 1.8699E+02 1.2359E+02 7.2501E+01 - 1.2589E+00 1.2277E+02 1.3510E+02 9.1997E+01 5.3321E+01 - 1.4125E+00 9.0542E+01 9.8520E+01 6.6940E+01 4.0212E+01 - 1.5849E+00 6.5159E+01 7.3726E+01 4.8916E+01 2.9571E+01 - 1.7783E+00 4.8513E+01 5.3344E+01 3.5889E+01 2.1347E+01 - 1.9953E+00 3.6315E+01 3.9243E+01 2.5540E+01 1.4892E+01 - 2.2387E+00 2.6407E+01 3.0089E+01 1.8392E+01 1.0438E+01 - 2.5119E+00 1.8915E+01 2.1607E+01 1.3906E+01 7.8515E+00 - 2.8184E+00 1.4095E+01 1.5318E+01 1.0121E+01 5.9324E+00 - 3.1623E+00 1.0099E+01 1.1142E+01 7.2278E+00 4.3518E+00 - 3.5481E+00 7.4227E+00 8.0545E+00 5.0971E+00 3.2212E+00 - 3.9811E+00 5.5459E+00 5.9781E+00 3.7679E+00 2.2441E+00 - 4.4668E+00 4.1118E+00 4.3673E+00 2.7538E+00 1.6394E+00 - 5.0119E+00 2.9129E+00 3.1014E+00 2.0405E+00 1.1904E+00 - 5.6234E+00 2.0221E+00 2.2219E+00 1.4581E+00 8.5574E-01 - 6.3096E+00 1.4503E+00 1.5902E+00 9.4685E-01 6.3019E-01 - 7.0795E+00 1.0917E+00 1.1423E+00 6.6705E-01 4.4628E-01 - 7.9433E+00 8.1887E-01 8.2302E-01 4.8475E-01 3.3614E-01 - 8.9125E+00 6.0091E-01 5.9640E-01 3.6648E-01 2.6035E-01 - 1.0000E+01 4.1624E-01 4.1962E-01 2.4992E-01 1.6755E-01 - 1.1220E+01 3.0305E-01 3.0411E-01 1.7036E-01 1.1992E-01 - 1.2589E+01 2.1887E-01 2.2157E-01 1.2081E-01 8.4455E-02 - 1.4125E+01 1.5599E-01 1.5397E-01 8.5426E-02 5.9766E-02 - 1.5849E+01 1.1095E-01 1.0855E-01 6.1198E-02 4.2226E-02 - 1.7783E+01 7.8711E-02 7.5231E-02 4.3331E-02 2.9579E-02 - 1.9953E+01 5.7682E-02 5.4678E-02 2.8946E-02 2.0465E-02 - 2.2387E+01 4.2026E-02 3.8711E-02 2.0001E-02 1.4416E-02 - 2.5119E+01 2.9602E-02 2.6340E-02 1.3988E-02 9.9608E-03 - 2.8184E+01 2.0838E-02 1.9247E-02 9.8660E-03 7.0869E-03 - 3.1623E+01 1.5901E-02 1.4428E-02 6.8357E-03 5.1777E-03 - 3.5481E+01 1.1383E-02 1.0275E-02 4.7257E-03 3.5887E-03 - 3.9811E+01 8.1527E-03 7.2907E-03 3.2581E-03 2.4716E-03 - 4.4668E+01 5.8212E-03 5.1613E-03 2.2310E-03 1.7080E-03 - 5.0119E+01 4.1616E-03 3.6645E-03 1.5247E-03 1.1796E-03 - 5.6234E+01 2.9892E-03 2.6004E-03 1.0428E-03 8.0353E-04 - 6.3096E+01 2.1310E-03 1.8409E-03 7.0999E-04 5.5025E-04 - 7.0795E+01 1.5250E-03 1.2994E-03 4.8232E-04 3.7214E-04 - 7.9433E+01 1.0891E-03 9.1884E-04 3.2609E-04 2.5205E-04 - 8.9125E+01 7.7196E-04 6.4856E-04 2.1795E-04 1.7269E-04 - 1.0000E+02 5.4653E-04 4.5501E-04 1.4838E-04 1.1561E-04 - 1.1220E+02 3.8856E-04 3.2121E-04 1.0010E-04 7.7688E-05 - 1.2589E+02 2.7674E-04 2.2613E-04 6.6855E-05 5.2093E-05 - 1.4125E+02 1.9655E-04 1.5907E-04 4.4410E-05 3.4803E-05 - 1.5849E+02 1.3925E-04 1.1162E-04 2.9717E-05 2.3149E-05 - 1.7783E+02 9.8277E-05 7.8090E-05 1.9773E-05 1.5406E-05 - 1.9953E+02 6.9313E-05 5.4471E-05 1.3072E-05 1.0214E-05 - 2.2387E+02 4.9136E-05 3.7997E-05 8.7212E-06 6.8666E-06 - 2.5119E+02 3.4676E-05 2.6701E-05 5.7043E-06 4.5961E-06 - 2.8184E+02 2.4469E-05 1.8703E-05 3.7657E-06 2.9984E-06 - 3.1623E+02 1.7185E-05 1.2948E-05 2.4611E-06 1.9483E-06 - 3.5481E+02 1.2092E-05 9.0382E-06 1.6212E-06 1.2893E-06 - 3.9811E+02 8.4993E-06 6.2740E-06 1.0744E-06 8.5545E-07 - 4.4668E+02 5.9530E-06 4.3320E-06 7.0157E-07 5.5556E-07 - 5.0119E+02 4.1592E-06 3.0144E-06 4.5738E-07 3.6622E-07 - 5.6234E+02 2.9171E-06 2.1006E-06 3.0137E-07 2.4231E-07 - 6.3096E+02 2.0419E-06 1.4504E-06 1.9685E-07 1.5913E-07 - 7.0795E+02 1.4291E-06 1.0026E-06 1.2874E-07 1.0407E-07 - 7.9433E+02 9.9530E-07 6.9349E-07 8.5489E-08 6.8254E-08 - 8.9125E+02 6.9448E-07 4.8096E-07 5.5932E-08 4.4283E-08 - 1.0000E+03 4.8714E-07 3.3163E-07 3.6646E-08 2.8914E-08 - 1.1220E+03 3.3771E-07 2.2786E-07 2.4387E-08 1.9154E-08 - 1.2589E+03 2.3585E-07 1.5729E-07 1.5884E-08 1.2578E-08 - 1.4125E+03 1.6461E-07 1.0886E-07 1.0517E-08 8.1999E-09 - 1.5849E+03 1.1412E-07 7.4884E-08 7.0356E-09 5.3824E-09 - 1.7783E+03 7.9469E-08 5.1513E-08 4.5895E-09 3.6093E-09 - 1.9953E+03 5.5085E-08 3.5283E-08 3.0162E-09 2.3974E-09 - 2.2387E+03 3.8095E-08 2.4228E-08 2.0521E-09 1.5951E-09 - 2.5119E+03 2.6613E-08 1.6533E-08 1.3604E-09 1.0341E-09 - 2.8184E+03 1.8477E-08 1.1334E-08 8.9656E-10 6.8343E-10 - 3.1623E+03 1.2643E-08 7.8020E-09 5.8770E-10 4.5698E-10 - 3.5481E+03 8.6593E-09 5.2956E-09 3.8992E-10 3.0100E-10 - 3.9811E+03 5.9346E-09 3.6071E-09 2.5768E-10 1.9366E-10 - 4.4668E+03 4.0956E-09 2.4627E-09 1.7014E-10 1.2835E-10 - 5.0119E+03 2.8272E-09 1.6847E-09 1.1476E-10 8.5236E-11 - 5.6234E+03 1.9272E-09 1.1340E-09 7.6525E-11 5.7637E-11 - 6.3096E+03 1.3070E-09 7.6510E-10 4.9788E-11 3.7378E-11 - 7.0795E+03 8.9369E-10 5.1796E-10 3.2274E-11 2.4411E-11 - 7.9433E+03 6.0940E-10 3.5115E-10 2.0688E-11 1.5752E-11 - 8.9125E+03 4.1457E-10 2.3467E-10 1.3818E-11 1.0443E-11 - 1.0000E+04 2.7867E-10 1.5671E-10 9.4788E-12 6.7202E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4770E+04 5.7171E+04 2.8439E+04 2.4045E+04 - 1.1220E-01 4.5071E+04 4.6704E+04 2.3896E+04 1.9736E+04 - 1.2589E-01 3.6727E+04 3.8223E+04 1.9789E+04 1.6115E+04 - 1.4125E-01 2.9680E+04 3.1282E+04 1.6106E+04 1.3091E+04 - 1.5849E-01 2.3970E+04 2.5142E+04 1.3083E+04 1.0537E+04 - 1.7783E-01 1.9068E+04 1.9893E+04 1.0591E+04 8.3324E+03 - 1.9953E-01 1.4876E+04 1.5634E+04 8.5490E+03 6.4804E+03 - 2.2387E-01 1.1361E+04 1.2179E+04 6.8157E+03 5.0090E+03 - 2.5119E-01 8.5891E+03 9.3221E+03 5.3587E+03 3.8751E+03 - 2.8184E-01 6.5336E+03 7.0456E+03 4.1492E+03 2.9853E+03 - 3.1623E-01 4.9505E+03 5.3066E+03 3.1698E+03 2.2451E+03 - 3.5481E-01 3.6993E+03 3.9753E+03 2.4278E+03 1.7085E+03 - 3.9811E-01 2.7649E+03 2.9493E+03 1.8331E+03 1.2938E+03 - 4.4668E-01 2.0250E+03 2.1949E+03 1.3680E+03 9.4749E+02 - 5.0119E-01 1.4979E+03 1.6589E+03 1.0262E+03 6.9927E+02 - 5.6234E-01 1.0994E+03 1.2339E+03 7.5226E+02 5.0294E+02 - 6.3096E-01 7.9346E+02 8.9270E+02 5.5347E+02 3.6100E+02 - 7.0795E-01 5.7628E+02 6.4787E+02 4.1542E+02 2.6333E+02 - 7.9433E-01 4.2715E+02 4.7061E+02 3.0716E+02 1.9297E+02 - 8.9125E-01 3.1470E+02 3.4689E+02 2.2636E+02 1.4222E+02 - 1.0000E+00 2.2960E+02 2.5904E+02 1.6607E+02 1.0165E+02 - 1.1220E+00 1.6762E+02 1.9096E+02 1.2140E+02 7.3707E+01 - 1.2589E+00 1.2153E+02 1.3832E+02 8.9645E+01 5.3393E+01 - 1.4125E+00 8.9592E+01 1.0073E+02 6.5286E+01 3.8881E+01 - 1.5849E+00 6.6665E+01 7.3200E+01 4.7886E+01 2.8454E+01 - 1.7783E+00 4.7684E+01 5.3321E+01 3.4718E+01 2.1800E+01 - 1.9953E+00 3.4853E+01 3.9879E+01 2.5411E+01 1.5434E+01 - 2.2387E+00 2.6446E+01 2.9133E+01 1.8650E+01 1.1055E+01 - 2.5119E+00 1.9294E+01 2.1154E+01 1.3816E+01 8.3539E+00 - 2.8184E+00 1.3719E+01 1.5008E+01 1.0303E+01 6.1510E+00 - 3.1623E+00 1.0112E+01 1.1242E+01 7.3493E+00 4.2769E+00 - 3.5481E+00 7.4786E+00 8.1608E+00 5.3028E+00 3.0898E+00 - 3.9811E+00 5.5368E+00 5.8591E+00 3.7066E+00 2.2435E+00 - 4.4668E+00 3.9525E+00 4.2973E+00 2.6848E+00 1.6426E+00 - 5.0119E+00 2.8138E+00 3.1326E+00 1.9643E+00 1.1568E+00 - 5.6234E+00 2.0260E+00 2.2455E+00 1.3958E+00 8.0244E-01 - 6.3096E+00 1.4856E+00 1.5676E+00 1.0271E+00 5.8628E-01 - 7.0795E+00 1.0751E+00 1.0995E+00 7.3683E-01 4.2922E-01 - 7.9433E+00 7.7529E-01 8.2494E-01 5.0639E-01 3.0790E-01 - 8.9125E+00 5.7254E-01 6.1112E-01 3.7355E-01 2.2756E-01 - 1.0000E+01 4.2197E-01 4.1901E-01 2.5286E-01 1.6445E-01 - 1.1220E+01 3.0212E-01 3.0170E-01 1.7452E-01 1.1781E-01 - 1.2589E+01 2.1300E-01 2.1383E-01 1.2636E-01 8.4457E-02 - 1.4125E+01 1.5629E-01 1.5083E-01 8.9171E-02 6.0230E-02 - 1.5849E+01 1.1459E-01 1.0774E-01 6.1017E-02 4.1407E-02 - 1.7783E+01 8.1359E-02 7.7849E-02 4.1633E-02 2.8921E-02 - 1.9953E+01 5.8198E-02 5.7161E-02 2.8459E-02 2.2028E-02 - 2.2387E+01 4.1319E-02 3.9947E-02 2.0604E-02 1.5657E-02 - 2.5119E+01 2.8783E-02 2.8969E-02 1.3888E-02 1.0414E-02 - 2.8184E+01 2.0210E-02 2.0785E-02 1.0049E-02 7.0181E-03 - 3.1623E+01 1.5875E-02 1.4372E-02 6.8616E-03 5.1819E-03 - 3.5481E+01 1.1373E-02 1.0227E-02 4.7175E-03 3.5975E-03 - 3.9811E+01 8.1327E-03 7.2714E-03 3.2496E-03 2.4757E-03 - 4.4668E+01 5.8038E-03 5.1578E-03 2.2384E-03 1.7021E-03 - 5.0119E+01 4.1568E-03 3.6586E-03 1.5304E-03 1.1712E-03 - 5.6234E+01 2.9818E-03 2.5968E-03 1.0403E-03 7.9960E-04 - 6.3096E+01 2.1292E-03 1.8377E-03 7.0892E-04 5.4973E-04 - 7.0795E+01 1.5177E-03 1.2973E-03 4.8107E-04 3.7355E-04 - 7.9433E+01 1.0841E-03 9.1559E-04 3.2774E-04 2.5258E-04 - 8.9125E+01 7.6998E-04 6.4705E-04 2.2047E-04 1.7015E-04 - 1.0000E+02 5.4674E-04 4.5506E-04 1.4782E-04 1.1491E-04 - 1.1220E+02 3.8806E-04 3.1991E-04 9.9219E-05 7.7481E-05 - 1.2589E+02 2.7575E-04 2.2592E-04 6.6619E-05 5.2051E-05 - 1.4125E+02 1.9607E-04 1.5861E-04 4.4265E-05 3.4794E-05 - 1.5849E+02 1.3903E-04 1.1075E-04 2.9334E-05 2.3196E-05 - 1.7783E+02 9.8380E-05 7.7741E-05 1.9587E-05 1.5441E-05 - 1.9953E+02 6.9516E-05 5.4391E-05 1.2892E-05 1.0387E-05 - 2.2387E+02 4.9025E-05 3.8107E-05 8.4913E-06 6.7786E-06 - 2.5119E+02 3.4460E-05 2.6711E-05 5.6782E-06 4.3684E-06 - 2.8184E+02 2.4220E-05 1.8758E-05 3.7900E-06 2.8963E-06 - 3.1623E+02 1.7197E-05 1.2980E-05 2.4989E-06 1.9538E-06 - 3.5481E+02 1.2079E-05 9.0091E-06 1.6314E-06 1.2796E-06 - 3.9811E+02 8.4853E-06 6.2693E-06 1.0585E-06 8.4369E-07 - 4.4668E+02 5.9684E-06 4.3571E-06 6.9809E-07 5.5642E-07 - 5.0119E+02 4.1860E-06 3.0205E-06 4.6341E-07 3.6730E-07 - 5.6234E+02 2.9284E-06 2.0985E-06 3.0225E-07 2.4002E-07 - 6.3096E+02 2.0457E-06 1.4521E-06 1.9827E-07 1.5733E-07 - 7.0795E+02 1.4242E-06 1.0054E-06 1.2922E-07 1.0336E-07 - 7.9433E+02 9.9429E-07 6.9721E-07 8.5114E-08 6.7757E-08 - 8.9125E+02 6.9670E-07 4.8047E-07 5.5231E-08 4.4389E-08 - 1.0000E+03 4.8600E-07 3.3259E-07 3.6739E-08 2.9010E-08 - 1.1220E+03 3.3969E-07 2.2938E-07 2.4557E-08 1.9248E-08 - 1.2589E+03 2.3627E-07 1.5763E-07 1.6050E-08 1.2615E-08 - 1.4125E+03 1.6401E-07 1.0853E-07 1.0288E-08 8.1303E-09 - 1.5849E+03 1.1357E-07 7.4623E-08 6.8036E-09 5.4579E-09 - 1.7783E+03 7.8966E-08 5.1689E-08 4.6580E-09 3.6315E-09 - 1.9953E+03 5.5089E-08 3.5422E-08 3.0347E-09 2.3742E-09 - 2.2387E+03 3.8164E-08 2.4283E-08 1.9957E-09 1.6034E-09 - 2.5119E+03 2.6462E-08 1.6623E-08 1.3176E-09 1.0507E-09 - 2.8184E+03 1.8444E-08 1.1417E-08 8.5334E-10 6.7699E-10 - 3.1623E+03 1.2723E-08 7.8583E-09 5.8651E-10 4.5138E-10 - 3.5481E+03 8.6925E-09 5.3418E-09 3.9656E-10 2.9863E-10 - 3.9811E+03 5.9708E-09 3.6267E-09 2.6292E-10 1.9908E-10 - 4.4668E+03 4.0980E-09 2.4467E-09 1.7309E-10 1.3082E-10 - 5.0119E+03 2.7923E-09 1.6670E-09 1.1481E-10 8.2380E-11 - 5.6234E+03 1.9078E-09 1.1315E-09 7.4069E-11 5.4604E-11 - 6.3096E+03 1.3161E-09 7.6569E-10 5.0745E-11 3.7417E-11 - 7.0795E+03 8.8967E-10 5.1862E-10 3.3214E-11 2.4647E-11 - 7.9433E+03 6.0314E-10 3.4912E-10 2.1764E-11 1.5940E-11 - 8.9125E+03 4.1096E-10 2.3659E-10 1.4239E-11 1.0438E-11 - 1.0000E+04 2.7851E-10 1.5760E-10 9.0244E-12 7.0251E-12 -average flux in [cosZ =-0.10 -- 0.00, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4330E+04 5.6544E+04 2.7597E+04 2.4067E+04 - 1.1220E-01 4.4554E+04 4.6191E+04 2.3090E+04 2.0026E+04 - 1.2589E-01 3.6296E+04 3.7576E+04 1.9015E+04 1.6109E+04 - 1.4125E-01 2.9629E+04 3.0437E+04 1.5687E+04 1.3117E+04 - 1.5849E-01 2.3754E+04 2.4544E+04 1.2746E+04 1.0547E+04 - 1.7783E-01 1.8750E+04 1.9562E+04 1.0298E+04 8.2870E+03 - 1.9953E-01 1.4615E+04 1.5267E+04 8.2309E+03 6.4904E+03 - 2.2387E-01 1.1302E+04 1.1774E+04 6.4912E+03 4.9824E+03 - 2.5119E-01 8.6662E+03 8.9985E+03 5.1146E+03 3.8747E+03 - 2.8184E-01 6.4910E+03 6.8068E+03 3.9838E+03 3.0203E+03 - 3.1623E-01 4.8948E+03 5.1561E+03 3.0668E+03 2.2669E+03 - 3.5481E-01 3.6995E+03 3.8860E+03 2.3510E+03 1.6489E+03 - 3.9811E-01 2.7617E+03 2.8964E+03 1.7744E+03 1.2215E+03 - 4.4668E-01 2.0271E+03 2.1445E+03 1.3305E+03 9.0327E+02 - 5.0119E-01 1.4587E+03 1.5915E+03 9.7126E+02 6.7801E+02 - 5.6234E-01 1.0561E+03 1.1516E+03 6.9887E+02 5.0540E+02 - 6.3096E-01 7.7473E+02 8.3578E+02 5.2344E+02 3.6089E+02 - 7.0795E-01 5.6849E+02 6.2733E+02 3.8530E+02 2.6040E+02 - 7.9433E-01 4.1914E+02 4.6185E+02 2.8546E+02 1.9214E+02 - 8.9125E-01 3.0387E+02 3.3648E+02 2.1807E+02 1.4161E+02 - 1.0000E+00 2.2744E+02 2.4462E+02 1.6006E+02 1.0448E+02 - 1.1220E+00 1.6782E+02 1.8143E+02 1.1684E+02 7.6418E+01 - 1.2589E+00 1.2283E+02 1.3332E+02 8.3601E+01 5.3307E+01 - 1.4125E+00 9.0894E+01 9.7496E+01 6.1257E+01 3.7797E+01 - 1.5849E+00 6.5823E+01 7.2361E+01 4.6123E+01 2.8063E+01 - 1.7783E+00 4.6661E+01 5.2726E+01 3.3928E+01 2.1117E+01 - 1.9953E+00 3.5006E+01 3.8290E+01 2.5272E+01 1.5364E+01 - 2.2387E+00 2.6256E+01 2.8011E+01 1.7548E+01 1.1300E+01 - 2.5119E+00 1.8999E+01 2.0503E+01 1.2408E+01 8.0955E+00 - 2.8184E+00 1.3869E+01 1.5333E+01 9.7829E+00 5.8572E+00 - 3.1623E+00 1.0040E+01 1.0956E+01 6.9728E+00 4.3929E+00 - 3.5481E+00 7.4672E+00 7.8992E+00 5.0640E+00 3.2089E+00 - 3.9811E+00 5.4102E+00 5.7378E+00 3.6959E+00 2.2560E+00 - 4.4668E+00 3.9045E+00 4.2716E+00 2.7229E+00 1.6276E+00 - 5.0119E+00 2.9425E+00 3.1393E+00 1.9003E+00 1.1937E+00 - 5.6234E+00 2.1736E+00 2.1684E+00 1.3435E+00 8.8003E-01 - 6.3096E+00 1.5722E+00 1.5236E+00 9.5512E-01 6.4718E-01 - 7.0795E+00 1.1241E+00 1.1546E+00 7.0443E-01 4.7359E-01 - 7.9433E+00 8.1521E-01 8.2112E-01 5.0388E-01 3.3912E-01 - 8.9125E+00 5.8356E-01 5.7168E-01 3.4110E-01 2.3551E-01 - 1.0000E+01 4.1373E-01 4.1840E-01 2.4651E-01 1.6465E-01 - 1.1220E+01 3.0291E-01 2.9928E-01 1.7591E-01 1.2002E-01 - 1.2589E+01 2.1763E-01 2.1098E-01 1.2309E-01 8.7084E-02 - 1.4125E+01 1.5416E-01 1.5239E-01 8.6261E-02 6.0294E-02 - 1.5849E+01 1.1082E-01 1.1059E-01 6.1046E-02 4.0207E-02 - 1.7783E+01 7.7775E-02 7.9282E-02 4.3120E-02 2.9136E-02 - 1.9953E+01 5.7706E-02 5.5475E-02 2.9798E-02 2.1875E-02 - 2.2387E+01 4.4003E-02 3.8799E-02 2.0225E-02 1.5178E-02 - 2.5119E+01 2.9871E-02 2.7275E-02 1.3516E-02 1.0468E-02 - 2.8184E+01 2.1146E-02 1.9535E-02 9.0081E-03 7.1266E-03 - 3.1623E+01 1.5838E-02 1.4340E-02 6.8318E-03 5.1947E-03 - 3.5481E+01 1.1364E-02 1.0203E-02 4.7069E-03 3.5962E-03 - 3.9811E+01 8.1685E-03 7.2713E-03 3.2515E-03 2.4923E-03 - 4.4668E+01 5.8363E-03 5.1681E-03 2.2294E-03 1.7124E-03 - 5.0119E+01 4.1583E-03 3.6568E-03 1.5234E-03 1.1773E-03 - 5.6234E+01 2.9590E-03 2.5886E-03 1.0414E-03 8.0816E-04 - 6.3096E+01 2.1179E-03 1.8305E-03 7.0711E-04 5.4687E-04 - 7.0795E+01 1.5125E-03 1.3000E-03 4.8084E-04 3.7445E-04 - 7.9433E+01 1.0807E-03 9.1951E-04 3.2735E-04 2.5555E-04 - 8.9125E+01 7.7344E-04 6.4465E-04 2.2113E-04 1.7138E-04 - 1.0000E+02 5.4724E-04 4.5631E-04 1.4797E-04 1.1499E-04 - 1.1220E+02 3.8900E-04 3.2129E-04 9.9372E-05 7.7348E-05 - 1.2589E+02 2.7604E-04 2.2615E-04 6.6671E-05 5.2375E-05 - 1.4125E+02 1.9600E-04 1.5930E-04 4.4442E-05 3.5032E-05 - 1.5849E+02 1.3873E-04 1.1164E-04 2.9623E-05 2.3192E-05 - 1.7783E+02 9.8230E-05 7.7970E-05 1.9769E-05 1.5362E-05 - 1.9953E+02 6.9617E-05 5.4485E-05 1.3093E-05 1.0189E-05 - 2.2387E+02 4.9138E-05 3.8024E-05 8.6957E-06 6.7704E-06 - 2.5119E+02 3.4800E-05 2.6535E-05 5.7182E-06 4.4028E-06 - 2.8184E+02 2.4420E-05 1.8508E-05 3.7682E-06 2.8894E-06 - 3.1623E+02 1.7159E-05 1.3001E-05 2.4722E-06 1.9449E-06 - 3.5481E+02 1.2045E-05 9.0090E-06 1.6214E-06 1.2737E-06 - 3.9811E+02 8.4664E-06 6.2404E-06 1.0712E-06 8.4541E-07 - 4.4668E+02 5.9263E-06 4.3506E-06 7.0846E-07 5.5600E-07 - 5.0119E+02 4.1425E-06 3.0304E-06 4.6176E-07 3.6669E-07 - 5.6234E+02 2.9214E-06 2.1048E-06 3.0460E-07 2.3888E-07 - 6.3096E+02 2.0370E-06 1.4560E-06 1.9925E-07 1.5728E-07 - 7.0795E+02 1.4228E-06 1.0030E-06 1.2983E-07 1.0477E-07 - 7.9433E+02 9.9654E-07 6.9211E-07 8.5608E-08 6.8016E-08 - 8.9125E+02 6.9605E-07 4.7900E-07 5.5892E-08 4.4013E-08 - 1.0000E+03 4.8601E-07 3.3232E-07 3.6587E-08 2.9221E-08 - 1.1220E+03 3.3879E-07 2.2889E-07 2.4297E-08 1.9095E-08 - 1.2589E+03 2.3550E-07 1.5737E-07 1.6150E-08 1.2541E-08 - 1.4125E+03 1.6282E-07 1.0781E-07 1.0549E-08 8.3454E-09 - 1.5849E+03 1.1403E-07 7.4540E-08 6.8376E-09 5.3581E-09 - 1.7783E+03 7.9645E-08 5.1546E-08 4.5730E-09 3.4154E-09 - 1.9953E+03 5.4939E-08 3.5310E-08 3.0004E-09 2.3809E-09 - 2.2387E+03 3.8307E-08 2.4245E-08 1.9813E-09 1.5660E-09 - 2.5119E+03 2.6423E-08 1.6693E-08 1.3417E-09 1.0334E-09 - 2.8184E+03 1.8172E-08 1.1428E-08 8.8816E-10 6.9273E-10 - 3.1623E+03 1.2659E-08 7.8583E-09 5.8858E-10 4.5008E-10 - 3.5481E+03 8.7134E-09 5.3202E-09 3.9402E-10 2.9377E-10 - 3.9811E+03 5.9780E-09 3.6209E-09 2.6212E-10 1.9636E-10 - 4.4668E+03 4.0935E-09 2.4823E-09 1.7491E-10 1.2920E-10 - 5.0119E+03 2.8220E-09 1.6861E-09 1.1523E-10 8.2322E-11 - 5.6234E+03 1.9395E-09 1.1380E-09 7.6629E-11 5.3338E-11 - 6.3096E+03 1.3170E-09 7.7150E-10 5.1135E-11 3.5827E-11 - 7.0795E+03 8.8949E-10 5.1805E-10 3.3349E-11 2.3640E-11 - 7.9433E+03 6.0263E-10 3.5022E-10 2.1508E-11 1.5250E-11 - 8.9125E+03 4.0962E-10 2.3765E-10 1.4272E-11 1.0397E-11 - 1.0000E+04 2.7840E-10 1.5868E-10 9.3768E-12 7.0621E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2005E+04 3.2810E+04 1.6325E+04 1.4111E+04 - 1.1220E-01 2.6733E+04 2.7475E+04 1.3816E+04 1.1951E+04 - 1.2589E-01 2.2255E+04 2.2763E+04 1.1594E+04 9.9700E+03 - 1.4125E-01 1.8348E+04 1.8752E+04 9.6636E+03 8.1733E+03 - 1.5849E-01 1.4928E+04 1.5221E+04 7.9672E+03 6.6697E+03 - 1.7783E-01 1.2063E+04 1.2208E+04 6.4986E+03 5.3364E+03 - 1.9953E-01 9.6607E+03 9.7329E+03 5.2475E+03 4.2546E+03 - 2.2387E-01 7.5924E+03 7.6880E+03 4.2159E+03 3.3958E+03 - 2.5119E-01 5.8868E+03 6.0320E+03 3.3402E+03 2.6491E+03 - 2.8184E-01 4.5293E+03 4.6835E+03 2.6323E+03 2.0561E+03 - 3.1623E-01 3.4500E+03 3.5795E+03 2.0698E+03 1.6102E+03 - 3.5481E-01 2.6177E+03 2.7081E+03 1.5950E+03 1.2331E+03 - 3.9811E-01 1.9956E+03 2.0495E+03 1.2071E+03 9.2796E+02 - 4.4668E-01 1.5005E+03 1.5493E+03 9.1515E+02 7.0260E+02 - 5.0119E-01 1.1188E+03 1.1609E+03 6.9997E+02 5.2970E+02 - 5.6234E-01 8.4389E+02 8.6516E+02 5.3241E+02 3.9379E+02 - 6.3096E-01 6.3373E+02 6.5174E+02 4.0327E+02 2.9880E+02 - 7.0795E-01 4.6800E+02 4.8446E+02 3.0695E+02 2.2054E+02 - 7.9433E-01 3.4957E+02 3.6013E+02 2.2655E+02 1.6164E+02 - 8.9125E-01 2.6119E+02 2.6928E+02 1.6856E+02 1.2062E+02 - 1.0000E+00 1.9688E+02 2.0061E+02 1.2522E+02 9.0862E+01 - 1.1220E+00 1.4657E+02 1.4875E+02 9.3161E+01 6.7803E+01 - 1.2589E+00 1.0976E+02 1.1056E+02 6.9004E+01 5.0772E+01 - 1.4125E+00 8.2382E+01 8.2241E+01 5.1078E+01 3.7197E+01 - 1.5849E+00 6.0925E+01 6.0387E+01 3.7709E+01 2.7583E+01 - 1.7783E+00 4.5064E+01 4.5079E+01 2.7718E+01 2.0620E+01 - 1.9953E+00 3.3789E+01 3.3345E+01 2.0390E+01 1.4966E+01 - 2.2387E+00 2.4878E+01 2.4091E+01 1.4944E+01 1.1104E+01 - 2.5119E+00 1.8194E+01 1.7888E+01 1.0901E+01 8.2108E+00 - 2.8184E+00 1.3327E+01 1.3138E+01 7.9756E+00 5.8743E+00 - 3.1623E+00 9.8737E+00 9.5118E+00 5.7592E+00 4.2031E+00 - 3.5481E+00 7.2471E+00 6.9282E+00 4.1624E+00 3.0614E+00 - 3.9811E+00 5.2394E+00 5.0549E+00 3.0118E+00 2.2228E+00 - 4.4668E+00 3.8059E+00 3.6314E+00 2.1583E+00 1.5728E+00 - 5.0119E+00 2.7641E+00 2.6077E+00 1.5275E+00 1.1304E+00 - 5.6234E+00 2.0027E+00 1.8926E+00 1.0980E+00 8.0802E-01 - 6.3096E+00 1.4516E+00 1.3766E+00 7.7715E-01 5.6898E-01 - 7.0795E+00 1.0466E+00 9.9833E-01 5.3896E-01 3.9852E-01 - 7.9433E+00 7.5750E-01 7.0822E-01 3.7776E-01 2.8147E-01 - 8.9125E+00 5.5090E-01 4.9004E-01 2.6384E-01 2.0124E-01 - 1.0000E+01 3.8661E-01 3.5392E-01 1.8826E-01 1.3835E-01 - 1.1220E+01 2.7529E-01 2.5514E-01 1.3083E-01 9.5821E-02 - 1.2589E+01 1.9825E-01 1.8027E-01 8.9857E-02 6.5444E-02 - 1.4125E+01 1.4108E-01 1.2605E-01 6.2070E-02 4.6247E-02 - 1.5849E+01 1.0164E-01 8.9373E-02 4.2255E-02 3.3380E-02 - 1.7783E+01 7.3163E-02 6.3961E-02 2.8957E-02 2.2158E-02 - 1.9953E+01 5.2029E-02 4.6097E-02 1.9732E-02 1.4937E-02 - 2.2387E+01 3.7717E-02 3.2863E-02 1.3350E-02 1.0521E-02 - 2.5119E+01 2.7037E-02 2.3235E-02 8.9604E-03 7.0684E-03 - 2.8184E+01 1.8818E-02 1.6572E-02 6.0216E-03 4.8189E-03 - 3.1623E+01 1.3554E-02 1.1544E-02 4.3232E-03 3.2744E-03 - 3.5481E+01 9.6773E-03 8.1799E-03 2.9220E-03 2.2243E-03 - 3.9811E+01 6.9148E-03 5.7980E-03 1.9730E-03 1.5050E-03 - 4.4668E+01 4.9270E-03 4.1084E-03 1.3277E-03 1.0156E-03 - 5.0119E+01 3.5118E-03 2.9043E-03 8.9081E-04 6.8391E-04 - 5.6234E+01 2.5102E-03 2.0518E-03 5.9855E-04 4.5864E-04 - 6.3096E+01 1.7891E-03 1.4406E-03 3.9644E-04 3.0746E-04 - 7.0795E+01 1.2732E-03 1.0141E-03 2.6294E-04 2.0589E-04 - 7.9433E+01 9.0668E-04 7.1778E-04 1.7684E-04 1.3789E-04 - 8.9125E+01 6.4580E-04 5.0293E-04 1.1754E-04 9.2230E-05 - 1.0000E+02 4.5683E-04 3.5657E-04 7.8536E-05 6.1515E-05 - 1.1220E+02 3.2378E-04 2.5090E-04 5.2402E-05 4.0840E-05 - 1.2589E+02 2.2945E-04 1.7627E-04 3.4675E-05 2.7172E-05 - 1.4125E+02 1.6285E-04 1.2385E-04 2.2812E-05 1.8222E-05 - 1.5849E+02 1.1494E-04 8.7001E-05 1.4969E-05 1.2142E-05 - 1.7783E+02 8.0947E-05 6.0890E-05 9.9220E-06 7.9997E-06 - 1.9953E+02 5.7302E-05 4.2300E-05 6.6032E-06 5.3097E-06 - 2.2387E+02 4.0414E-05 2.9564E-05 4.3262E-06 3.4840E-06 - 2.5119E+02 2.8370E-05 2.0619E-05 2.8639E-06 2.3184E-06 - 2.8184E+02 1.9928E-05 1.4426E-05 1.9014E-06 1.5272E-06 - 3.1623E+02 1.4063E-05 1.0104E-05 1.2671E-06 1.0086E-06 - 3.5481E+02 9.8797E-06 7.0011E-06 8.3799E-07 6.6882E-07 - 3.9811E+02 6.9369E-06 4.8705E-06 5.5315E-07 4.4449E-07 - 4.4668E+02 4.8618E-06 3.3797E-06 3.6504E-07 2.9769E-07 - 5.0119E+02 3.4062E-06 2.3571E-06 2.4268E-07 1.9801E-07 - 5.6234E+02 2.3878E-06 1.6355E-06 1.6257E-07 1.2903E-07 - 6.3096E+02 1.6604E-06 1.1326E-06 1.0953E-07 8.5253E-08 - 7.0795E+02 1.1581E-06 7.8302E-07 7.2831E-08 5.7119E-08 - 7.9433E+02 8.1102E-07 5.4326E-07 4.8033E-08 3.8487E-08 - 8.9125E+02 5.6678E-07 3.7586E-07 3.2301E-08 2.5410E-08 - 1.0000E+03 3.9511E-07 2.5931E-07 2.1242E-08 1.6870E-08 - 1.1220E+03 2.7480E-07 1.7862E-07 1.4056E-08 1.1363E-08 - 1.2589E+03 1.9034E-07 1.2313E-07 9.3680E-09 7.7024E-09 - 1.4125E+03 1.3178E-07 8.4161E-08 6.3258E-09 5.0962E-09 - 1.5849E+03 9.2086E-08 5.7475E-08 4.2340E-09 3.4684E-09 - 1.7783E+03 6.3963E-08 3.9584E-08 2.8842E-09 2.2678E-09 - 1.9953E+03 4.4105E-08 2.7390E-08 1.9098E-09 1.5418E-09 - 2.2387E+03 3.0521E-08 1.8775E-08 1.2474E-09 1.0281E-09 - 2.5119E+03 2.0981E-08 1.2878E-08 8.3791E-10 6.5267E-10 - 2.8184E+03 1.4354E-08 8.7666E-09 5.8400E-10 4.3191E-10 - 3.1623E+03 9.9890E-09 6.0091E-09 3.9029E-10 2.9586E-10 - 3.5481E+03 6.7469E-09 4.0351E-09 2.6357E-10 1.9134E-10 - 3.9811E+03 4.6163E-09 2.7145E-09 1.7307E-10 1.2622E-10 - 4.4668E+03 3.1466E-09 1.8291E-09 1.0995E-10 8.6404E-11 - 5.0119E+03 2.1428E-09 1.2465E-09 7.3207E-11 5.5330E-11 - 5.6234E+03 1.4508E-09 8.3898E-10 4.7683E-11 3.4252E-11 - 6.3096E+03 9.8196E-10 5.6978E-10 3.2593E-11 2.4422E-11 - 7.0795E+03 6.6325E-10 3.8075E-10 2.1902E-11 1.6692E-11 - 7.9433E+03 4.4527E-10 2.5150E-10 1.4989E-11 1.1011E-11 - 8.9125E+03 3.0151E-10 1.6799E-10 9.7560E-12 7.0984E-12 - 1.0000E+04 2.0323E-10 1.1141E-10 6.0439E-12 4.4701E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1744E+04 3.1933E+04 1.5819E+04 1.4105E+04 - 1.1220E-01 2.6409E+04 2.6667E+04 1.3375E+04 1.1942E+04 - 1.2589E-01 2.2013E+04 2.2019E+04 1.1242E+04 9.9688E+03 - 1.4125E-01 1.8115E+04 1.8009E+04 9.3257E+03 8.2008E+03 - 1.5849E-01 1.4681E+04 1.4732E+04 7.5823E+03 6.6596E+03 - 1.7783E-01 1.1875E+04 1.1859E+04 6.1700E+03 5.3299E+03 - 1.9953E-01 9.5092E+03 9.3625E+03 5.0131E+03 4.2499E+03 - 2.2387E-01 7.4733E+03 7.3370E+03 3.9980E+03 3.3882E+03 - 2.5119E-01 5.7955E+03 5.7207E+03 3.1563E+03 2.6690E+03 - 2.8184E-01 4.4837E+03 4.4199E+03 2.4613E+03 2.0828E+03 - 3.1623E-01 3.4344E+03 3.3971E+03 1.9018E+03 1.6033E+03 - 3.5481E-01 2.5797E+03 2.5891E+03 1.4745E+03 1.2301E+03 - 3.9811E-01 1.9692E+03 1.9466E+03 1.1272E+03 9.4058E+02 - 4.4668E-01 1.5002E+03 1.4643E+03 8.5963E+02 7.0951E+02 - 5.0119E-01 1.1235E+03 1.0931E+03 6.5803E+02 5.2568E+02 - 5.6234E-01 8.4815E+02 8.0863E+02 4.9449E+02 3.9659E+02 - 6.3096E-01 6.2849E+02 6.0491E+02 3.6991E+02 2.9733E+02 - 7.0795E-01 4.6701E+02 4.5395E+02 2.7681E+02 2.2188E+02 - 7.9433E-01 3.5350E+02 3.3873E+02 2.0446E+02 1.6566E+02 - 8.9125E-01 2.6310E+02 2.4974E+02 1.5501E+02 1.2335E+02 - 1.0000E+00 1.9635E+02 1.8757E+02 1.1426E+02 9.2413E+01 - 1.1220E+00 1.4547E+02 1.4167E+02 8.5495E+01 6.8277E+01 - 1.2589E+00 1.0899E+02 1.0500E+02 6.3596E+01 5.1054E+01 - 1.4125E+00 8.2095E+01 7.7264E+01 4.7136E+01 3.8324E+01 - 1.5849E+00 6.1327E+01 5.7140E+01 3.4690E+01 2.8754E+01 - 1.7783E+00 4.5294E+01 4.2737E+01 2.5762E+01 2.0924E+01 - 1.9953E+00 3.3366E+01 3.2271E+01 1.9274E+01 1.5416E+01 - 2.2387E+00 2.4883E+01 2.4012E+01 1.4311E+01 1.1423E+01 - 2.5119E+00 1.8512E+01 1.7537E+01 1.0631E+01 8.2699E+00 - 2.8184E+00 1.3306E+01 1.2830E+01 7.8447E+00 5.9440E+00 - 3.1623E+00 9.7974E+00 9.1942E+00 5.5610E+00 4.3285E+00 - 3.5481E+00 7.1921E+00 6.6931E+00 4.0185E+00 3.1356E+00 - 3.9811E+00 5.2461E+00 4.8598E+00 2.8945E+00 2.2484E+00 - 4.4668E+00 3.8190E+00 3.5116E+00 2.0960E+00 1.6023E+00 - 5.0119E+00 2.7354E+00 2.5353E+00 1.4916E+00 1.1324E+00 - 5.6234E+00 1.9647E+00 1.8666E+00 1.0674E+00 7.9209E-01 - 6.3096E+00 1.4286E+00 1.3650E+00 7.4548E-01 5.6333E-01 - 7.0795E+00 1.0465E+00 9.5488E-01 5.2449E-01 4.0256E-01 - 7.9433E+00 7.5993E-01 6.8809E-01 3.8033E-01 2.8238E-01 - 8.9125E+00 5.4312E-01 4.9195E-01 2.7261E-01 1.9590E-01 - 1.0000E+01 3.8843E-01 3.5712E-01 1.8698E-01 1.3756E-01 - 1.1220E+01 2.7799E-01 2.5324E-01 1.2697E-01 9.5994E-02 - 1.2589E+01 1.9951E-01 1.8289E-01 8.8404E-02 6.7655E-02 - 1.4125E+01 1.4375E-01 1.2801E-01 6.1005E-02 4.6111E-02 - 1.5849E+01 1.0191E-01 8.9439E-02 4.1821E-02 3.1974E-02 - 1.7783E+01 7.2553E-02 6.3987E-02 2.9460E-02 2.1953E-02 - 1.9953E+01 5.1930E-02 4.4992E-02 2.0202E-02 1.4606E-02 - 2.2387E+01 3.6827E-02 3.1706E-02 1.3843E-02 1.0004E-02 - 2.5119E+01 2.6334E-02 2.2943E-02 9.7459E-03 7.0295E-03 - 2.8184E+01 1.8865E-02 1.6651E-02 6.5572E-03 4.8196E-03 - 3.1623E+01 1.3562E-02 1.1575E-02 4.3337E-03 3.2960E-03 - 3.5481E+01 9.6977E-03 8.1840E-03 2.9339E-03 2.2208E-03 - 3.9811E+01 6.9470E-03 5.7865E-03 1.9764E-03 1.4993E-03 - 4.4668E+01 4.9445E-03 4.0939E-03 1.3341E-03 1.0208E-03 - 5.0119E+01 3.5207E-03 2.9041E-03 8.9622E-04 6.9425E-04 - 5.6234E+01 2.5194E-03 2.0533E-03 6.0017E-04 4.5984E-04 - 6.3096E+01 1.7928E-03 1.4501E-03 4.0242E-04 3.0555E-04 - 7.0795E+01 1.2770E-03 1.0202E-03 2.6589E-04 2.0725E-04 - 7.9433E+01 9.0593E-04 7.1610E-04 1.7562E-04 1.3773E-04 - 8.9125E+01 6.4454E-04 5.0671E-04 1.1710E-04 9.1205E-05 - 1.0000E+02 4.5919E-04 3.5859E-04 7.8907E-05 6.1359E-05 - 1.1220E+02 3.2539E-04 2.5197E-04 5.2472E-05 4.1454E-05 - 1.2589E+02 2.3006E-04 1.7665E-04 3.4695E-05 2.7608E-05 - 1.4125E+02 1.6286E-04 1.2386E-04 2.3088E-05 1.8077E-05 - 1.5849E+02 1.1511E-04 8.6958E-05 1.5333E-05 1.2043E-05 - 1.7783E+02 8.1315E-05 6.0969E-05 1.0044E-05 8.0749E-06 - 1.9953E+02 5.7367E-05 4.2760E-05 6.6035E-06 5.3116E-06 - 2.2387E+02 4.0284E-05 2.9888E-05 4.3436E-06 3.4902E-06 - 2.5119E+02 2.8346E-05 2.0880E-05 2.8817E-06 2.3349E-06 - 2.8184E+02 1.9925E-05 1.4584E-05 1.9451E-06 1.5572E-06 - 3.1623E+02 1.4092E-05 1.0132E-05 1.2660E-06 1.0141E-06 - 3.5481E+02 9.9122E-06 7.0313E-06 8.3227E-07 6.6980E-07 - 3.9811E+02 6.9482E-06 4.8831E-06 5.4723E-07 4.3721E-07 - 4.4668E+02 4.8611E-06 3.3995E-06 3.6448E-07 2.9112E-07 - 5.0119E+02 3.4051E-06 2.3599E-06 2.4249E-07 1.9264E-07 - 5.6234E+02 2.3886E-06 1.6397E-06 1.6261E-07 1.2917E-07 - 6.3096E+02 1.6705E-06 1.1322E-06 1.0792E-07 8.6087E-08 - 7.0795E+02 1.1653E-06 7.8589E-07 7.2758E-08 5.7603E-08 - 7.9433E+02 8.1384E-07 5.4568E-07 4.8975E-08 3.8439E-08 - 8.9125E+02 5.6570E-07 3.7538E-07 3.2855E-08 2.5306E-08 - 1.0000E+03 3.9471E-07 2.5860E-07 2.1367E-08 1.6885E-08 - 1.1220E+03 2.7405E-07 1.7734E-07 1.4228E-08 1.1284E-08 - 1.2589E+03 1.9121E-07 1.2267E-07 9.5800E-09 7.6972E-09 - 1.4125E+03 1.3348E-07 8.4709E-08 6.4393E-09 5.2508E-09 - 1.5849E+03 9.2748E-08 5.8249E-08 4.1918E-09 3.3968E-09 - 1.7783E+03 6.3899E-08 4.0188E-08 2.7980E-09 2.1729E-09 - 1.9953E+03 4.4046E-08 2.7462E-08 1.9204E-09 1.4571E-09 - 2.2387E+03 3.0314E-08 1.8760E-08 1.3033E-09 9.7936E-10 - 2.5119E+03 2.0955E-08 1.2790E-08 8.8430E-10 6.4670E-10 - 2.8184E+03 1.4462E-08 8.7517E-09 5.7978E-10 4.2664E-10 - 3.1623E+03 9.9909E-09 6.0264E-09 3.8435E-10 2.9068E-10 - 3.5481E+03 6.7760E-09 4.0544E-09 2.4954E-10 1.9505E-10 - 3.9811E+03 4.6430E-09 2.7585E-09 1.6718E-10 1.2909E-10 - 4.4668E+03 3.1600E-09 1.8635E-09 1.1553E-10 8.6290E-11 - 5.0119E+03 2.1360E-09 1.2571E-09 7.5284E-11 5.7059E-11 - 5.6234E+03 1.4436E-09 8.4340E-10 4.7683E-11 3.7632E-11 - 6.3096E+03 9.7767E-10 5.7025E-10 3.2573E-11 2.3714E-11 - 7.0795E+03 6.6203E-10 3.8117E-10 2.0738E-11 1.5939E-11 - 7.9433E+03 4.4900E-10 2.5209E-10 1.3857E-11 1.0114E-11 - 8.9125E+03 3.0080E-10 1.6905E-10 9.9321E-12 6.6315E-12 - 1.0000E+04 2.0103E-10 1.1225E-10 6.3940E-12 4.6122E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1355E+04 3.1002E+04 1.5025E+04 1.4157E+04 - 1.1220E-01 2.6054E+04 2.5790E+04 1.2722E+04 1.1965E+04 - 1.2589E-01 2.1542E+04 2.1234E+04 1.0616E+04 9.9322E+03 - 1.4125E-01 1.7813E+04 1.7352E+04 8.7216E+03 8.0987E+03 - 1.5849E-01 1.4528E+04 1.4052E+04 7.1476E+03 6.5947E+03 - 1.7783E-01 1.1624E+04 1.1268E+04 5.7861E+03 5.3199E+03 - 1.9953E-01 9.2589E+03 8.9223E+03 4.6419E+03 4.2249E+03 - 2.2387E-01 7.2729E+03 6.9996E+03 3.6729E+03 3.3605E+03 - 2.5119E-01 5.6112E+03 5.4096E+03 2.8876E+03 2.6576E+03 - 2.8184E-01 4.3298E+03 4.1353E+03 2.2755E+03 2.0816E+03 - 3.1623E-01 3.3329E+03 3.1684E+03 1.7550E+03 1.6033E+03 - 3.5481E-01 2.5370E+03 2.3978E+03 1.3217E+03 1.2193E+03 - 3.9811E-01 1.9195E+03 1.8101E+03 1.0135E+03 9.2285E+02 - 4.4668E-01 1.4483E+03 1.3600E+03 7.7950E+02 7.0216E+02 - 5.0119E-01 1.0920E+03 1.0173E+03 5.7913E+02 5.3114E+02 - 5.6234E-01 8.2642E+02 7.6118E+02 4.3613E+02 4.0113E+02 - 6.3096E-01 6.1707E+02 5.6151E+02 3.2900E+02 3.0605E+02 - 7.0795E-01 4.6217E+02 4.1804E+02 2.4418E+02 2.3015E+02 - 7.9433E-01 3.4769E+02 3.1389E+02 1.8075E+02 1.7190E+02 - 8.9125E-01 2.6077E+02 2.3189E+02 1.3694E+02 1.2954E+02 - 1.0000E+00 1.9540E+02 1.7275E+02 1.0135E+02 9.4262E+01 - 1.1220E+00 1.4594E+02 1.2839E+02 7.5691E+01 7.0959E+01 - 1.2589E+00 1.0834E+02 9.6741E+01 5.6822E+01 5.3208E+01 - 1.4125E+00 8.0456E+01 7.2828E+01 4.2313E+01 3.9368E+01 - 1.5849E+00 6.0393E+01 5.4065E+01 3.1915E+01 2.9128E+01 - 1.7783E+00 4.5834E+01 4.0564E+01 2.3699E+01 2.1412E+01 - 1.9953E+00 3.3714E+01 3.0185E+01 1.7182E+01 1.5248E+01 - 2.2387E+00 2.4095E+01 2.2245E+01 1.2842E+01 1.1247E+01 - 2.5119E+00 1.7767E+01 1.6529E+01 9.5840E+00 8.5236E+00 - 2.8184E+00 1.3235E+01 1.2421E+01 6.9771E+00 6.1879E+00 - 3.1623E+00 9.9010E+00 8.9021E+00 5.2301E+00 4.4050E+00 - 3.5481E+00 7.2618E+00 6.5320E+00 3.8152E+00 3.1598E+00 - 3.9811E+00 5.2671E+00 4.7885E+00 2.8062E+00 2.2770E+00 - 4.4668E+00 3.8421E+00 3.4681E+00 2.0265E+00 1.6211E+00 - 5.0119E+00 2.7785E+00 2.5356E+00 1.4576E+00 1.1613E+00 - 5.6234E+00 2.0259E+00 1.8502E+00 1.0374E+00 8.1908E-01 - 6.3096E+00 1.4747E+00 1.3199E+00 7.2915E-01 5.8947E-01 - 7.0795E+00 1.0645E+00 9.3781E-01 5.2485E-01 4.1197E-01 - 7.9433E+00 7.6928E-01 6.9119E-01 3.7188E-01 2.8639E-01 - 8.9125E+00 5.4327E-01 4.9981E-01 2.6314E-01 1.9883E-01 - 1.0000E+01 3.8543E-01 3.4832E-01 1.8314E-01 1.3716E-01 - 1.1220E+01 2.7594E-01 2.4912E-01 1.2665E-01 9.4532E-02 - 1.2589E+01 1.9565E-01 1.8041E-01 8.6475E-02 6.5403E-02 - 1.4125E+01 1.4050E-01 1.2724E-01 6.0508E-02 4.5201E-02 - 1.5849E+01 1.0164E-01 8.9218E-02 4.3387E-02 3.1890E-02 - 1.7783E+01 7.1422E-02 6.3531E-02 2.9306E-02 2.2587E-02 - 1.9953E+01 5.0772E-02 4.4808E-02 1.9949E-02 1.5241E-02 - 2.2387E+01 3.7033E-02 3.1309E-02 1.3852E-02 9.9038E-03 - 2.5119E+01 2.6201E-02 2.2147E-02 9.1693E-03 6.7804E-03 - 2.8184E+01 1.8522E-02 1.6040E-02 6.2682E-03 4.9942E-03 - 3.1623E+01 1.3608E-02 1.1604E-02 4.3095E-03 3.3101E-03 - 3.5481E+01 9.7209E-03 8.2032E-03 2.9246E-03 2.2300E-03 - 3.9811E+01 6.9224E-03 5.7867E-03 1.9684E-03 1.5067E-03 - 4.4668E+01 4.9492E-03 4.1008E-03 1.3270E-03 1.0189E-03 - 5.0119E+01 3.5383E-03 2.9101E-03 8.9418E-04 6.8726E-04 - 5.6234E+01 2.5133E-03 2.0594E-03 6.0050E-04 4.6461E-04 - 6.3096E+01 1.7891E-03 1.4495E-03 3.9954E-04 3.1304E-04 - 7.0795E+01 1.2739E-03 1.0233E-03 2.6687E-04 2.0876E-04 - 7.9433E+01 9.0596E-04 7.2087E-04 1.7923E-04 1.3890E-04 - 8.9125E+01 6.4832E-04 5.0489E-04 1.1864E-04 9.2911E-05 - 1.0000E+02 4.5684E-04 3.5752E-04 7.8756E-05 6.1365E-05 - 1.1220E+02 3.2397E-04 2.5192E-04 5.2452E-05 4.0982E-05 - 1.2589E+02 2.3015E-04 1.7642E-04 3.4703E-05 2.7213E-05 - 1.4125E+02 1.6322E-04 1.2386E-04 2.3019E-05 1.8136E-05 - 1.5849E+02 1.1505E-04 8.7040E-05 1.5347E-05 1.2037E-05 - 1.7783E+02 8.1416E-05 6.0781E-05 1.0070E-05 7.9376E-06 - 1.9953E+02 5.7635E-05 4.2623E-05 6.5863E-06 5.2588E-06 - 2.2387E+02 4.0369E-05 2.9882E-05 4.3528E-06 3.5095E-06 - 2.5119E+02 2.8476E-05 2.0701E-05 2.8763E-06 2.3267E-06 - 2.8184E+02 1.9994E-05 1.4471E-05 1.9283E-06 1.5298E-06 - 3.1623E+02 1.4098E-05 1.0123E-05 1.2790E-06 1.0064E-06 - 3.5481E+02 9.9138E-06 7.0363E-06 8.4515E-07 6.7081E-07 - 3.9811E+02 6.9353E-06 4.8897E-06 5.5783E-07 4.4573E-07 - 4.4668E+02 4.8489E-06 3.4042E-06 3.6435E-07 2.9723E-07 - 5.0119E+02 3.3961E-06 2.3616E-06 2.4187E-07 1.9697E-07 - 5.6234E+02 2.3789E-06 1.6407E-06 1.6310E-07 1.3202E-07 - 6.3096E+02 1.6648E-06 1.1366E-06 1.0813E-07 8.7743E-08 - 7.0795E+02 1.1650E-06 7.8552E-07 7.2303E-08 5.8608E-08 - 7.9433E+02 8.1123E-07 5.4222E-07 4.8703E-08 3.9313E-08 - 8.9125E+02 5.6414E-07 3.7349E-07 3.2104E-08 2.5584E-08 - 1.0000E+03 3.9646E-07 2.5877E-07 2.1689E-08 1.7101E-08 - 1.1220E+03 2.7486E-07 1.7786E-07 1.4367E-08 1.1848E-08 - 1.2589E+03 1.9141E-07 1.2272E-07 9.5609E-09 7.8026E-09 - 1.4125E+03 1.3295E-07 8.4028E-08 6.3578E-09 5.0585E-09 - 1.5849E+03 9.1396E-08 5.7817E-08 4.1978E-09 3.3368E-09 - 1.7783E+03 6.3145E-08 4.0059E-08 2.8870E-09 2.2509E-09 - 1.9953E+03 4.3910E-08 2.7538E-08 1.9968E-09 1.5196E-09 - 2.2387E+03 3.0266E-08 1.8793E-08 1.2937E-09 1.0071E-09 - 2.5119E+03 2.1049E-08 1.2950E-08 8.4162E-10 6.7053E-10 - 2.8184E+03 1.4551E-08 8.8484E-09 5.8926E-10 4.5088E-10 - 3.1623E+03 9.9480E-09 6.0163E-09 3.8417E-10 2.9330E-10 - 3.5481E+03 6.7219E-09 4.0369E-09 2.4902E-10 1.9582E-10 - 3.9811E+03 4.6012E-09 2.7429E-09 1.6861E-10 1.2561E-10 - 4.4668E+03 3.1598E-09 1.8607E-09 1.1141E-10 8.4817E-11 - 5.0119E+03 2.1380E-09 1.2618E-09 7.2431E-11 5.7775E-11 - 5.6234E+03 1.4508E-09 8.5155E-10 4.9592E-11 3.6274E-11 - 6.3096E+03 9.8413E-10 5.6458E-10 3.3021E-11 2.4488E-11 - 7.0795E+03 6.6316E-10 3.7730E-10 2.1549E-11 1.5976E-11 - 7.9433E+03 4.4579E-10 2.5238E-10 1.4385E-11 1.0418E-11 - 8.9125E+03 3.0059E-10 1.6977E-10 1.0028E-11 6.7534E-12 - 1.0000E+04 2.0240E-10 1.1324E-10 6.5105E-12 4.3466E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0998E+04 3.0473E+04 1.4619E+04 1.4039E+04 - 1.1220E-01 2.5680E+04 2.5200E+04 1.2343E+04 1.1782E+04 - 1.2589E-01 2.1230E+04 2.0759E+04 1.0383E+04 9.8079E+03 - 1.4125E-01 1.7537E+04 1.6985E+04 8.5108E+03 8.0549E+03 - 1.5849E-01 1.4251E+04 1.3716E+04 6.8646E+03 6.5475E+03 - 1.7783E-01 1.1450E+04 1.0929E+04 5.5549E+03 5.2878E+03 - 1.9953E-01 9.1006E+03 8.6581E+03 4.4601E+03 4.1916E+03 - 2.2387E-01 7.1519E+03 6.7446E+03 3.5545E+03 3.3390E+03 - 2.5119E-01 5.5803E+03 5.1991E+03 2.7943E+03 2.6442E+03 - 2.8184E-01 4.2989E+03 3.9971E+03 2.1591E+03 2.0613E+03 - 3.1623E-01 3.2642E+03 3.0353E+03 1.6601E+03 1.5931E+03 - 3.5481E-01 2.4773E+03 2.3070E+03 1.2643E+03 1.2260E+03 - 3.9811E-01 1.8843E+03 1.7429E+03 9.5426E+02 9.3002E+02 - 4.4668E-01 1.4243E+03 1.3045E+03 7.2374E+02 6.9842E+02 - 5.0119E-01 1.0735E+03 9.7984E+02 5.5108E+02 5.2661E+02 - 5.6234E-01 8.0855E+02 7.2660E+02 4.1557E+02 4.0220E+02 - 6.3096E-01 6.0133E+02 5.3155E+02 3.1307E+02 3.0596E+02 - 7.0795E-01 4.5021E+02 4.0106E+02 2.3115E+02 2.2607E+02 - 7.9433E-01 3.3883E+02 3.0425E+02 1.6938E+02 1.7021E+02 - 8.9125E-01 2.5369E+02 2.2417E+02 1.2657E+02 1.2781E+02 - 1.0000E+00 1.9120E+02 1.6610E+02 9.5048E+01 9.3427E+01 - 1.1220E+00 1.4420E+02 1.2302E+02 7.1668E+01 7.0713E+01 - 1.2589E+00 1.0798E+02 9.2711E+01 5.3381E+01 5.2839E+01 - 1.4125E+00 8.0786E+01 6.9701E+01 4.0459E+01 3.9239E+01 - 1.5849E+00 6.0711E+01 5.1799E+01 3.0382E+01 2.8888E+01 - 1.7783E+00 4.5480E+01 3.8833E+01 2.2332E+01 2.1444E+01 - 1.9953E+00 3.3599E+01 2.9014E+01 1.6793E+01 1.5903E+01 - 2.2387E+00 2.4423E+01 2.1843E+01 1.2566E+01 1.1559E+01 - 2.5119E+00 1.8048E+01 1.6354E+01 9.3310E+00 8.5484E+00 - 2.8184E+00 1.3433E+01 1.1850E+01 6.8093E+00 6.0997E+00 - 3.1623E+00 9.9676E+00 8.5747E+00 5.0372E+00 4.4210E+00 - 3.5481E+00 7.2743E+00 6.2748E+00 3.6658E+00 3.2314E+00 - 3.9811E+00 5.2537E+00 4.6004E+00 2.6629E+00 2.2896E+00 - 4.4668E+00 3.8127E+00 3.3655E+00 1.9725E+00 1.6058E+00 - 5.0119E+00 2.7588E+00 2.4893E+00 1.4414E+00 1.1366E+00 - 5.6234E+00 1.9958E+00 1.8068E+00 1.0160E+00 8.2438E-01 - 6.3096E+00 1.4540E+00 1.3049E+00 7.0933E-01 5.9697E-01 - 7.0795E+00 1.0591E+00 9.3727E-01 5.0456E-01 4.1704E-01 - 7.9433E+00 7.4644E-01 6.7618E-01 3.5940E-01 2.7888E-01 - 8.9125E+00 5.4076E-01 4.9727E-01 2.4879E-01 1.9343E-01 - 1.0000E+01 3.8725E-01 3.4763E-01 1.7866E-01 1.3699E-01 - 1.1220E+01 2.7374E-01 2.4631E-01 1.2593E-01 9.5843E-02 - 1.2589E+01 1.9674E-01 1.7673E-01 8.8280E-02 6.7093E-02 - 1.4125E+01 1.4101E-01 1.2775E-01 6.1022E-02 4.5616E-02 - 1.5849E+01 1.0071E-01 9.1054E-02 4.1666E-02 3.1485E-02 - 1.7783E+01 7.2392E-02 6.4468E-02 2.8705E-02 2.1698E-02 - 1.9953E+01 5.2088E-02 4.5266E-02 1.9313E-02 1.4655E-02 - 2.2387E+01 3.7000E-02 3.2089E-02 1.3205E-02 1.0073E-02 - 2.5119E+01 2.6648E-02 2.2437E-02 9.3058E-03 7.0025E-03 - 2.8184E+01 1.8663E-02 1.5790E-02 6.0037E-03 4.6898E-03 - 3.1623E+01 1.3584E-02 1.1569E-02 4.3093E-03 3.2966E-03 - 3.5481E+01 9.7068E-03 8.1939E-03 2.9194E-03 2.2229E-03 - 3.9811E+01 6.9391E-03 5.8021E-03 1.9782E-03 1.5026E-03 - 4.4668E+01 4.9473E-03 4.0992E-03 1.3248E-03 1.0247E-03 - 5.0119E+01 3.5283E-03 2.9072E-03 8.8243E-04 6.9049E-04 - 5.6234E+01 2.5145E-03 2.0609E-03 5.9400E-04 4.6311E-04 - 6.3096E+01 1.7938E-03 1.4566E-03 4.0007E-04 3.1105E-04 - 7.0795E+01 1.2790E-03 1.0232E-03 2.7069E-04 2.0967E-04 - 7.9433E+01 9.0713E-04 7.2046E-04 1.8107E-04 1.3964E-04 - 8.9125E+01 6.4722E-04 5.0890E-04 1.1899E-04 9.2593E-05 - 1.0000E+02 4.5718E-04 3.5718E-04 7.8914E-05 6.1504E-05 - 1.1220E+02 3.2384E-04 2.5127E-04 5.2278E-05 4.0832E-05 - 1.2589E+02 2.2977E-04 1.7648E-04 3.4677E-05 2.7125E-05 - 1.4125E+02 1.6266E-04 1.2375E-04 2.2961E-05 1.8000E-05 - 1.5849E+02 1.1501E-04 8.7046E-05 1.5058E-05 1.1915E-05 - 1.7783E+02 8.1260E-05 6.1060E-05 9.8369E-06 7.8744E-06 - 1.9953E+02 5.7198E-05 4.2629E-05 6.5458E-06 5.2821E-06 - 2.2387E+02 4.0518E-05 2.9719E-05 4.3775E-06 3.4968E-06 - 2.5119E+02 2.8511E-05 2.0823E-05 2.9522E-06 2.2993E-06 - 2.8184E+02 1.9903E-05 1.4561E-05 1.9850E-06 1.5500E-06 - 3.1623E+02 1.4088E-05 1.0107E-05 1.2607E-06 1.0086E-06 - 3.5481E+02 9.9112E-06 7.0549E-06 8.3321E-07 6.7029E-07 - 3.9811E+02 6.9418E-06 4.9058E-06 5.5024E-07 4.4664E-07 - 4.4668E+02 4.8498E-06 3.4027E-06 3.6293E-07 2.9634E-07 - 5.0119E+02 3.3877E-06 2.3630E-06 2.4159E-07 1.9532E-07 - 5.6234E+02 2.3837E-06 1.6341E-06 1.6368E-07 1.3167E-07 - 6.3096E+02 1.6653E-06 1.1338E-06 1.0846E-07 8.7851E-08 - 7.0795E+02 1.1610E-06 7.8533E-07 7.2476E-08 5.8617E-08 - 7.9433E+02 8.1277E-07 5.4304E-07 4.8585E-08 3.9419E-08 - 8.9125E+02 5.6387E-07 3.7326E-07 3.2429E-08 2.6027E-08 - 1.0000E+03 3.9334E-07 2.5870E-07 2.1171E-08 1.7038E-08 - 1.1220E+03 2.7385E-07 1.7863E-07 1.4156E-08 1.1251E-08 - 1.2589E+03 1.8977E-07 1.2231E-07 9.3734E-09 7.5311E-09 - 1.4125E+03 1.3181E-07 8.4051E-08 6.1643E-09 5.0774E-09 - 1.5849E+03 9.1204E-08 5.8019E-08 4.2594E-09 3.4101E-09 - 1.7783E+03 6.2762E-08 3.9947E-08 2.8657E-09 2.2219E-09 - 1.9953E+03 4.3750E-08 2.7238E-08 1.9236E-09 1.5227E-09 - 2.2387E+03 3.0340E-08 1.8674E-08 1.2528E-09 1.0091E-09 - 2.5119E+03 2.0989E-08 1.2807E-08 8.4139E-10 6.6834E-10 - 2.8184E+03 1.4448E-08 8.7279E-09 5.9400E-10 4.3189E-10 - 3.1623E+03 9.9874E-09 5.9975E-09 3.9089E-10 2.8629E-10 - 3.5481E+03 6.7574E-09 4.0439E-09 2.6159E-10 1.8584E-10 - 3.9811E+03 4.6033E-09 2.7258E-09 1.7169E-10 1.2493E-10 - 4.4668E+03 3.1441E-09 1.8371E-09 1.1452E-10 8.6177E-11 - 5.0119E+03 2.1454E-09 1.2450E-09 7.6169E-11 5.7118E-11 - 5.6234E+03 1.4490E-09 8.3746E-10 5.1206E-11 3.6707E-11 - 6.3096E+03 9.7644E-10 5.6653E-10 3.3865E-11 2.4239E-11 - 7.0795E+03 6.5609E-10 3.7987E-10 2.1936E-11 1.6338E-11 - 7.9433E+03 4.4329E-10 2.5491E-10 1.5077E-11 1.0574E-11 - 8.9125E+03 2.9938E-10 1.6859E-10 9.7407E-12 6.6963E-12 - 1.0000E+04 2.0137E-10 1.1250E-10 6.2558E-12 4.5674E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0921E+04 3.0350E+04 1.4603E+04 1.3985E+04 - 1.1220E-01 2.5704E+04 2.5223E+04 1.2305E+04 1.1788E+04 - 1.2589E-01 2.1308E+04 2.0738E+04 1.0326E+04 9.8405E+03 - 1.4125E-01 1.7630E+04 1.6967E+04 8.5061E+03 8.0939E+03 - 1.5849E-01 1.4330E+04 1.3770E+04 6.9954E+03 6.5888E+03 - 1.7783E-01 1.1484E+04 1.1025E+04 5.6306E+03 5.3287E+03 - 1.9953E-01 9.1357E+03 8.7113E+03 4.4709E+03 4.2546E+03 - 2.2387E-01 7.2028E+03 6.8275E+03 3.5467E+03 3.3574E+03 - 2.5119E-01 5.5984E+03 5.2879E+03 2.8113E+03 2.6432E+03 - 2.8184E-01 4.3142E+03 4.0579E+03 2.2273E+03 2.0714E+03 - 3.1623E-01 3.3049E+03 3.1021E+03 1.7154E+03 1.5997E+03 - 3.5481E-01 2.5011E+03 2.3550E+03 1.3015E+03 1.2270E+03 - 3.9811E-01 1.8913E+03 1.7654E+03 9.8648E+02 9.2443E+02 - 4.4668E-01 1.4453E+03 1.3298E+03 7.5677E+02 7.0500E+02 - 5.0119E-01 1.0928E+03 9.9543E+02 5.7352E+02 5.4560E+02 - 5.6234E-01 8.2619E+02 7.3745E+02 4.2792E+02 4.1026E+02 - 6.3096E-01 6.1930E+02 5.5141E+02 3.2038E+02 2.9803E+02 - 7.0795E-01 4.5621E+02 4.0860E+02 2.3812E+02 2.2243E+02 - 7.9433E-01 3.4338E+02 3.0517E+02 1.8188E+02 1.7235E+02 - 8.9125E-01 2.5744E+02 2.3179E+02 1.3612E+02 1.2910E+02 - 1.0000E+00 1.9155E+02 1.7047E+02 9.7793E+01 9.3294E+01 - 1.1220E+00 1.4380E+02 1.2717E+02 7.3233E+01 7.0058E+01 - 1.2589E+00 1.0787E+02 9.4737E+01 5.4704E+01 5.3017E+01 - 1.4125E+00 8.0354E+01 7.0463E+01 4.0817E+01 3.9358E+01 - 1.5849E+00 5.9806E+01 5.2399E+01 3.0674E+01 2.9005E+01 - 1.7783E+00 4.4920E+01 3.8816E+01 2.3157E+01 2.1321E+01 - 1.9953E+00 3.3442E+01 2.9139E+01 1.7216E+01 1.5661E+01 - 2.2387E+00 2.5030E+01 2.2051E+01 1.2622E+01 1.1789E+01 - 2.5119E+00 1.8440E+01 1.6071E+01 9.3518E+00 8.4735E+00 - 2.8184E+00 1.3443E+01 1.1732E+01 6.9534E+00 5.8963E+00 - 3.1623E+00 9.8242E+00 8.6935E+00 5.0494E+00 4.4217E+00 - 3.5481E+00 7.2134E+00 6.4281E+00 3.7287E+00 3.2049E+00 - 3.9811E+00 5.2618E+00 4.7411E+00 2.7282E+00 2.2682E+00 - 4.4668E+00 3.8466E+00 3.4377E+00 1.9744E+00 1.6082E+00 - 5.0119E+00 2.7741E+00 2.5153E+00 1.4156E+00 1.1501E+00 - 5.6234E+00 1.9965E+00 1.8162E+00 1.0125E+00 8.2409E-01 - 6.3096E+00 1.4414E+00 1.3104E+00 7.2927E-01 5.7956E-01 - 7.0795E+00 1.0401E+00 9.5026E-01 5.1826E-01 4.1324E-01 - 7.9433E+00 7.5550E-01 6.7387E-01 3.7064E-01 2.9300E-01 - 8.9125E+00 5.4220E-01 4.8223E-01 2.5366E-01 1.9999E-01 - 1.0000E+01 3.8497E-01 3.4930E-01 1.7981E-01 1.3904E-01 - 1.1220E+01 2.7776E-01 2.5145E-01 1.2751E-01 9.6348E-02 - 1.2589E+01 1.9784E-01 1.8018E-01 8.9669E-02 6.7260E-02 - 1.4125E+01 1.4144E-01 1.2548E-01 6.2695E-02 4.7689E-02 - 1.5849E+01 1.0101E-01 8.9823E-02 4.2990E-02 3.2849E-02 - 1.7783E+01 7.1599E-02 6.5189E-02 2.9375E-02 2.2048E-02 - 1.9953E+01 5.1193E-02 4.6205E-02 1.9871E-02 1.5353E-02 - 2.2387E+01 3.6787E-02 3.3131E-02 1.3437E-02 1.0526E-02 - 2.5119E+01 2.6013E-02 2.2964E-02 9.3206E-03 6.7809E-03 - 2.8184E+01 1.8869E-02 1.6057E-02 6.2895E-03 4.4287E-03 - 3.1623E+01 1.3538E-02 1.1559E-02 4.3160E-03 3.2678E-03 - 3.5481E+01 9.6837E-03 8.1709E-03 2.9234E-03 2.2263E-03 - 3.9811E+01 6.9307E-03 5.7712E-03 1.9644E-03 1.4989E-03 - 4.4668E+01 4.9354E-03 4.0863E-03 1.3236E-03 1.0129E-03 - 5.0119E+01 3.5162E-03 2.8922E-03 8.8681E-04 6.8352E-04 - 5.6234E+01 2.5143E-03 2.0460E-03 5.9448E-04 4.5864E-04 - 6.3096E+01 1.7883E-03 1.4481E-03 3.9800E-04 3.1096E-04 - 7.0795E+01 1.2736E-03 1.0214E-03 2.6460E-04 2.0927E-04 - 7.9433E+01 9.0626E-04 7.1821E-04 1.7752E-04 1.3886E-04 - 8.9125E+01 6.4155E-04 5.0841E-04 1.1917E-04 9.2900E-05 - 1.0000E+02 4.5791E-04 3.5769E-04 7.8528E-05 6.1555E-05 - 1.1220E+02 3.2446E-04 2.5158E-04 5.1889E-05 4.1090E-05 - 1.2589E+02 2.2972E-04 1.7716E-04 3.4549E-05 2.7036E-05 - 1.4125E+02 1.6271E-04 1.2383E-04 2.2861E-05 1.7904E-05 - 1.5849E+02 1.1509E-04 8.6577E-05 1.4955E-05 1.1915E-05 - 1.7783E+02 8.1101E-05 6.0869E-05 9.9140E-06 7.8537E-06 - 1.9953E+02 5.7319E-05 4.2644E-05 6.5531E-06 5.2343E-06 - 2.2387E+02 4.0494E-05 2.9763E-05 4.3259E-06 3.5191E-06 - 2.5119E+02 2.8351E-05 2.0654E-05 2.8693E-06 2.3240E-06 - 2.8184E+02 2.0018E-05 1.4374E-05 1.8803E-06 1.5377E-06 - 3.1623E+02 1.4042E-05 1.0120E-05 1.2641E-06 1.0161E-06 - 3.5481E+02 9.8840E-06 7.0054E-06 8.3191E-07 6.6705E-07 - 3.9811E+02 6.9219E-06 4.8663E-06 5.4446E-07 4.3963E-07 - 4.4668E+02 4.8279E-06 3.4003E-06 3.6513E-07 2.9388E-07 - 5.0119E+02 3.3896E-06 2.3512E-06 2.4686E-07 1.9598E-07 - 5.6234E+02 2.3780E-06 1.6251E-06 1.6433E-07 1.2896E-07 - 6.3096E+02 1.6615E-06 1.1299E-06 1.0853E-07 8.6238E-08 - 7.0795E+02 1.1620E-06 7.8168E-07 7.2673E-08 5.7599E-08 - 7.9433E+02 8.0672E-07 5.4114E-07 4.8647E-08 3.8429E-08 - 8.9125E+02 5.6166E-07 3.7558E-07 3.2537E-08 2.5309E-08 - 1.0000E+03 3.9422E-07 2.5843E-07 2.1651E-08 1.7112E-08 - 1.1220E+03 2.7425E-07 1.7804E-07 1.4112E-08 1.1131E-08 - 1.2589E+03 1.9188E-07 1.2265E-07 9.5983E-09 7.2269E-09 - 1.4125E+03 1.3290E-07 8.4334E-08 6.5115E-09 4.8891E-09 - 1.5849E+03 9.1463E-08 5.8241E-08 4.3781E-09 3.2706E-09 - 1.7783E+03 6.2941E-08 4.0180E-08 2.8008E-09 2.2393E-09 - 1.9953E+03 4.3806E-08 2.7449E-08 1.8486E-09 1.5159E-09 - 2.2387E+03 3.0505E-08 1.8781E-08 1.2751E-09 1.0101E-09 - 2.5119E+03 2.0927E-08 1.2854E-08 8.7128E-10 6.4458E-10 - 2.8184E+03 1.4226E-08 8.7684E-09 5.7476E-10 4.3126E-10 - 3.1623E+03 9.9329E-09 5.9961E-09 3.8600E-10 2.9079E-10 - 3.5481E+03 6.7305E-09 4.0356E-09 2.5314E-10 1.9833E-10 - 3.9811E+03 4.5946E-09 2.7253E-09 1.6937E-10 1.2977E-10 - 4.4668E+03 3.1259E-09 1.8341E-09 1.1554E-10 8.4295E-11 - 5.0119E+03 2.1351E-09 1.2301E-09 8.0523E-11 5.7789E-11 - 5.6234E+03 1.4523E-09 8.3104E-10 5.1357E-11 3.9457E-11 - 6.3096E+03 9.7937E-10 5.6253E-10 3.3234E-11 2.3277E-11 - 7.0795E+03 6.6247E-10 3.7676E-10 2.1980E-11 1.5855E-11 - 7.9433E+03 4.4631E-10 2.5322E-10 1.4946E-11 1.1188E-11 - 8.9125E+03 2.9878E-10 1.6973E-10 9.5315E-12 6.2786E-12 - 1.0000E+04 1.9958E-10 1.1279E-10 5.8201E-12 4.0226E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1149E+04 3.1032E+04 1.5130E+04 1.4034E+04 - 1.1220E-01 2.6008E+04 2.5891E+04 1.2910E+04 1.1832E+04 - 1.2589E-01 2.1563E+04 2.1428E+04 1.0815E+04 9.8259E+03 - 1.4125E-01 1.7836E+04 1.7530E+04 8.8320E+03 8.0936E+03 - 1.5849E-01 1.4585E+04 1.4229E+04 7.2267E+03 6.6131E+03 - 1.7783E-01 1.1741E+04 1.1488E+04 5.8913E+03 5.3028E+03 - 1.9953E-01 9.3263E+03 9.1369E+03 4.7473E+03 4.2187E+03 - 2.2387E-01 7.3244E+03 7.1489E+03 3.8070E+03 3.3801E+03 - 2.5119E-01 5.6910E+03 5.5171E+03 3.0100E+03 2.6913E+03 - 2.8184E-01 4.4009E+03 4.2470E+03 2.3533E+03 2.1008E+03 - 3.1623E-01 3.4017E+03 3.2398E+03 1.8257E+03 1.6200E+03 - 3.5481E-01 2.6010E+03 2.4493E+03 1.4009E+03 1.2486E+03 - 3.9811E-01 1.9615E+03 1.8556E+03 1.0659E+03 9.4863E+02 - 4.4668E-01 1.4758E+03 1.4045E+03 8.1116E+02 7.1290E+02 - 5.0119E-01 1.1207E+03 1.0558E+03 6.1934E+02 5.3837E+02 - 5.6234E-01 8.4492E+02 7.8647E+02 4.6717E+02 4.0351E+02 - 6.3096E-01 6.3060E+02 5.8562E+02 3.4928E+02 3.0546E+02 - 7.0795E-01 4.7238E+02 4.3279E+02 2.6067E+02 2.3163E+02 - 7.9433E-01 3.5142E+02 3.1973E+02 1.9310E+02 1.7180E+02 - 8.9125E-01 2.6143E+02 2.4144E+02 1.4187E+02 1.2952E+02 - 1.0000E+00 1.9647E+02 1.8089E+02 1.0666E+02 9.5540E+01 - 1.1220E+00 1.4769E+02 1.3500E+02 7.9037E+01 7.0728E+01 - 1.2589E+00 1.1056E+02 9.9923E+01 5.9184E+01 5.2577E+01 - 1.4125E+00 8.1951E+01 7.3664E+01 4.3938E+01 3.8891E+01 - 1.5849E+00 6.0983E+01 5.5151E+01 3.2865E+01 2.8891E+01 - 1.7783E+00 4.5960E+01 4.1120E+01 2.4441E+01 2.1221E+01 - 1.9953E+00 3.3906E+01 3.0306E+01 1.8239E+01 1.5819E+01 - 2.2387E+00 2.4851E+01 2.2411E+01 1.3608E+01 1.1524E+01 - 2.5119E+00 1.8415E+01 1.6474E+01 9.9466E+00 8.0540E+00 - 2.8184E+00 1.3579E+01 1.2178E+01 7.2356E+00 5.9185E+00 - 3.1623E+00 9.8786E+00 9.0380E+00 5.2553E+00 4.4540E+00 - 3.5481E+00 7.1761E+00 6.6122E+00 3.8714E+00 3.1621E+00 - 3.9811E+00 5.2239E+00 4.7996E+00 2.8301E+00 2.2577E+00 - 4.4668E+00 3.8341E+00 3.4984E+00 2.0440E+00 1.6228E+00 - 5.0119E+00 2.7859E+00 2.5414E+00 1.4328E+00 1.1444E+00 - 5.6234E+00 1.9842E+00 1.8371E+00 1.0102E+00 7.9400E-01 - 6.3096E+00 1.4306E+00 1.3096E+00 7.3069E-01 5.6400E-01 - 7.0795E+00 1.0457E+00 9.3599E-01 5.2103E-01 3.9853E-01 - 7.9433E+00 7.4954E-01 6.7536E-01 3.6865E-01 2.7915E-01 - 8.9125E+00 5.2323E-01 4.8252E-01 2.5925E-01 1.9746E-01 - 1.0000E+01 3.8772E-01 3.5204E-01 1.8409E-01 1.3792E-01 - 1.1220E+01 2.7647E-01 2.5288E-01 1.2912E-01 9.5403E-02 - 1.2589E+01 1.9766E-01 1.7950E-01 8.9313E-02 6.6639E-02 - 1.4125E+01 1.4237E-01 1.2885E-01 6.2474E-02 4.6399E-02 - 1.5849E+01 1.0047E-01 9.2183E-02 4.2617E-02 3.1587E-02 - 1.7783E+01 7.1886E-02 6.5056E-02 2.8767E-02 2.1723E-02 - 1.9953E+01 5.1920E-02 4.5750E-02 1.9936E-02 1.4946E-02 - 2.2387E+01 3.7058E-02 3.2925E-02 1.3763E-02 1.0006E-02 - 2.5119E+01 2.7103E-02 2.3766E-02 9.3100E-03 6.6858E-03 - 2.8184E+01 1.9643E-02 1.6901E-02 6.1802E-03 4.7693E-03 - 3.1623E+01 1.3532E-02 1.1522E-02 4.3008E-03 3.2598E-03 - 3.5481E+01 9.6668E-03 8.1560E-03 2.9091E-03 2.2148E-03 - 3.9811E+01 6.9036E-03 5.7785E-03 1.9657E-03 1.4956E-03 - 4.4668E+01 4.9279E-03 4.0882E-03 1.3206E-03 1.0136E-03 - 5.0119E+01 3.5177E-03 2.8902E-03 8.8632E-04 6.8416E-04 - 5.6234E+01 2.5130E-03 2.0350E-03 5.9312E-04 4.5936E-04 - 6.3096E+01 1.7839E-03 1.4450E-03 3.9590E-04 3.0774E-04 - 7.0795E+01 1.2719E-03 1.0237E-03 2.6388E-04 2.0457E-04 - 7.9433E+01 9.0408E-04 7.2033E-04 1.7721E-04 1.3663E-04 - 8.9125E+01 6.4057E-04 5.0848E-04 1.1764E-04 9.3003E-05 - 1.0000E+02 4.5779E-04 3.5673E-04 7.7977E-05 6.1512E-05 - 1.1220E+02 3.2420E-04 2.5099E-04 5.1296E-05 4.0732E-05 - 1.2589E+02 2.2975E-04 1.7573E-04 3.3981E-05 2.7116E-05 - 1.4125E+02 1.6298E-04 1.2324E-04 2.2573E-05 1.8008E-05 - 1.5849E+02 1.1486E-04 8.6844E-05 1.4944E-05 1.1887E-05 - 1.7783E+02 8.1045E-05 6.0842E-05 1.0056E-05 7.8502E-06 - 1.9953E+02 5.7374E-05 4.2361E-05 6.6710E-06 5.1881E-06 - 2.2387E+02 4.0254E-05 2.9551E-05 4.3476E-06 3.4536E-06 - 2.5119E+02 2.8368E-05 2.0640E-05 2.9012E-06 2.2987E-06 - 2.8184E+02 2.0020E-05 1.4424E-05 1.9428E-06 1.5518E-06 - 3.1623E+02 1.4048E-05 1.0049E-05 1.2586E-06 1.0107E-06 - 3.5481E+02 9.8620E-06 7.0023E-06 8.2617E-07 6.6718E-07 - 3.9811E+02 6.9266E-06 4.8738E-06 5.4965E-07 4.4166E-07 - 4.4668E+02 4.8510E-06 3.3882E-06 3.6619E-07 2.9277E-07 - 5.0119E+02 3.3775E-06 2.3536E-06 2.4340E-07 1.9145E-07 - 5.6234E+02 2.3807E-06 1.6314E-06 1.6059E-07 1.2921E-07 - 6.3096E+02 1.6632E-06 1.1267E-06 1.0771E-07 8.6609E-08 - 7.0795E+02 1.1614E-06 7.7834E-07 7.1202E-08 5.8176E-08 - 7.9433E+02 8.0855E-07 5.3826E-07 4.7704E-08 3.8270E-08 - 8.9125E+02 5.6181E-07 3.7083E-07 3.1472E-08 2.5247E-08 - 1.0000E+03 3.9404E-07 2.5755E-07 2.0946E-08 1.7223E-08 - 1.1220E+03 2.7369E-07 1.7733E-07 1.4077E-08 1.1626E-08 - 1.2589E+03 1.8967E-07 1.2150E-07 9.4632E-09 7.7942E-09 - 1.4125E+03 1.3149E-07 8.4159E-08 6.3948E-09 5.0555E-09 - 1.5849E+03 9.1384E-08 5.8296E-08 4.4014E-09 3.3274E-09 - 1.7783E+03 6.3170E-08 4.0101E-08 2.9440E-09 2.2288E-09 - 1.9953E+03 4.3842E-08 2.7435E-08 1.9107E-09 1.4944E-09 - 2.2387E+03 3.0224E-08 1.8794E-08 1.2667E-09 1.0044E-09 - 2.5119E+03 2.0891E-08 1.2870E-08 8.5336E-10 6.6950E-10 - 2.8184E+03 1.4361E-08 8.7915E-09 5.8294E-10 4.5309E-10 - 3.1623E+03 9.9337E-09 5.9814E-09 3.8216E-10 2.8865E-10 - 3.5481E+03 6.7158E-09 4.0069E-09 2.5645E-10 1.9142E-10 - 3.9811E+03 4.5713E-09 2.7071E-09 1.6640E-10 1.2764E-10 - 4.4668E+03 3.1314E-09 1.8338E-09 1.1227E-10 8.1396E-11 - 5.0119E+03 2.1396E-09 1.2405E-09 7.7061E-11 5.5359E-11 - 5.6234E+03 1.4519E-09 8.3347E-10 4.8096E-11 3.8443E-11 - 6.3096E+03 9.7148E-10 5.6157E-10 3.3479E-11 2.4102E-11 - 7.0795E+03 6.5869E-10 3.7644E-10 2.1889E-11 1.5444E-11 - 7.9433E+03 4.4513E-10 2.5221E-10 1.4175E-11 9.9705E-12 - 8.9125E+03 2.9887E-10 1.6817E-10 9.1786E-12 6.6854E-12 - 1.0000E+04 2.0068E-10 1.1040E-10 6.0070E-12 4.7136E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1424E+04 3.1815E+04 1.5578E+04 1.3959E+04 - 1.1220E-01 2.6245E+04 2.6570E+04 1.3258E+04 1.1810E+04 - 1.2589E-01 2.1838E+04 2.2016E+04 1.1093E+04 9.8416E+03 - 1.4125E-01 1.8118E+04 1.8120E+04 9.2175E+03 8.0759E+03 - 1.5849E-01 1.4821E+04 1.4804E+04 7.6175E+03 6.6094E+03 - 1.7783E-01 1.1948E+04 1.1890E+04 6.2099E+03 5.3636E+03 - 1.9953E-01 9.5388E+03 9.4682E+03 5.0297E+03 4.2872E+03 - 2.2387E-01 7.5114E+03 7.4483E+03 4.0314E+03 3.4083E+03 - 2.5119E-01 5.8497E+03 5.7853E+03 3.1922E+03 2.6689E+03 - 2.8184E-01 4.5174E+03 4.4724E+03 2.5139E+03 2.0684E+03 - 3.1623E-01 3.4483E+03 3.4270E+03 1.9530E+03 1.6188E+03 - 3.5481E-01 2.6257E+03 2.6047E+03 1.4983E+03 1.2415E+03 - 3.9811E-01 2.0134E+03 1.9536E+03 1.1465E+03 9.4250E+02 - 4.4668E-01 1.5118E+03 1.4750E+03 8.7267E+02 7.1866E+02 - 5.0119E-01 1.1233E+03 1.1055E+03 6.6102E+02 5.4061E+02 - 5.6234E-01 8.4925E+02 8.2721E+02 4.9374E+02 4.0643E+02 - 6.3096E-01 6.3473E+02 6.2214E+02 3.6360E+02 3.0692E+02 - 7.0795E-01 4.7405E+02 4.5941E+02 2.7250E+02 2.3085E+02 - 7.9433E-01 3.5185E+02 3.4117E+02 2.0726E+02 1.7118E+02 - 8.9125E-01 2.6067E+02 2.5708E+02 1.5702E+02 1.2443E+02 - 1.0000E+00 1.9692E+02 1.8979E+02 1.1536E+02 9.3483E+01 - 1.1220E+00 1.4764E+02 1.4111E+02 8.5349E+01 6.9689E+01 - 1.2589E+00 1.1094E+02 1.0484E+02 6.3781E+01 5.1221E+01 - 1.4125E+00 8.2851E+01 7.7664E+01 4.7549E+01 3.7692E+01 - 1.5849E+00 6.1573E+01 5.7408E+01 3.5569E+01 2.7995E+01 - 1.7783E+00 4.5272E+01 4.2955E+01 2.6347E+01 2.1033E+01 - 1.9953E+00 3.3882E+01 3.2025E+01 1.9316E+01 1.5516E+01 - 2.2387E+00 2.5326E+01 2.3615E+01 1.4282E+01 1.1251E+01 - 2.5119E+00 1.8438E+01 1.7515E+01 1.0579E+01 8.3191E+00 - 2.8184E+00 1.3345E+01 1.2749E+01 7.7556E+00 6.0221E+00 - 3.1623E+00 9.8282E+00 9.1795E+00 5.5326E+00 4.2680E+00 - 3.5481E+00 7.1449E+00 6.7046E+00 3.9966E+00 3.0979E+00 - 3.9811E+00 5.2386E+00 4.8670E+00 2.8872E+00 2.2506E+00 - 4.4668E+00 3.8147E+00 3.5327E+00 2.0730E+00 1.6054E+00 - 5.0119E+00 2.7383E+00 2.5641E+00 1.4914E+00 1.1282E+00 - 5.6234E+00 1.9870E+00 1.8466E+00 1.0814E+00 7.9960E-01 - 6.3096E+00 1.4328E+00 1.3248E+00 7.5014E-01 5.7094E-01 - 7.0795E+00 1.0410E+00 9.6479E-01 5.1930E-01 4.0350E-01 - 7.9433E+00 7.4626E-01 6.9961E-01 3.7824E-01 2.8375E-01 - 8.9125E+00 5.2348E-01 4.9555E-01 2.7144E-01 1.9154E-01 - 1.0000E+01 3.8364E-01 3.4560E-01 1.8645E-01 1.3786E-01 - 1.1220E+01 2.7504E-01 2.4655E-01 1.2851E-01 9.4590E-02 - 1.2589E+01 1.9657E-01 1.7876E-01 8.8893E-02 6.5913E-02 - 1.4125E+01 1.4058E-01 1.2811E-01 6.1353E-02 4.6477E-02 - 1.5849E+01 1.0162E-01 9.0748E-02 4.2084E-02 3.2215E-02 - 1.7783E+01 7.2796E-02 6.4659E-02 2.8912E-02 2.1576E-02 - 1.9953E+01 5.2049E-02 4.4929E-02 2.0078E-02 1.4494E-02 - 2.2387E+01 3.6722E-02 3.1305E-02 1.3834E-02 1.0114E-02 - 2.5119E+01 2.6499E-02 2.1910E-02 9.6009E-03 6.9493E-03 - 2.8184E+01 1.8986E-02 1.5824E-02 6.3872E-03 4.7285E-03 - 3.1623E+01 1.3523E-02 1.1514E-02 4.3032E-03 3.2621E-03 - 3.5481E+01 9.6561E-03 8.1407E-03 2.8984E-03 2.2181E-03 - 3.9811E+01 6.9045E-03 5.7583E-03 1.9577E-03 1.5005E-03 - 4.4668E+01 4.9283E-03 4.0810E-03 1.3208E-03 1.0084E-03 - 5.0119E+01 3.5056E-03 2.8950E-03 8.8021E-04 6.8569E-04 - 5.6234E+01 2.4908E-03 2.0517E-03 5.8872E-04 4.6260E-04 - 6.3096E+01 1.7775E-03 1.4428E-03 3.9563E-04 3.0850E-04 - 7.0795E+01 1.2728E-03 1.0165E-03 2.6707E-04 2.0546E-04 - 7.9433E+01 9.0361E-04 7.1625E-04 1.7853E-04 1.3623E-04 - 8.9125E+01 6.3890E-04 5.0217E-04 1.1981E-04 9.0928E-05 - 1.0000E+02 4.5641E-04 3.5548E-04 7.8246E-05 6.0962E-05 - 1.1220E+02 3.2397E-04 2.4967E-04 5.1915E-05 4.0624E-05 - 1.2589E+02 2.2919E-04 1.7563E-04 3.4268E-05 2.6961E-05 - 1.4125E+02 1.6244E-04 1.2365E-04 2.2442E-05 1.8036E-05 - 1.5849E+02 1.1467E-04 8.6279E-05 1.4769E-05 1.1981E-05 - 1.7783E+02 8.0637E-05 6.0071E-05 9.8574E-06 7.9204E-06 - 1.9953E+02 5.6970E-05 4.2244E-05 6.5769E-06 5.2705E-06 - 2.2387E+02 4.0220E-05 2.9665E-05 4.3941E-06 3.4866E-06 - 2.5119E+02 2.8295E-05 2.0701E-05 2.9126E-06 2.2917E-06 - 2.8184E+02 1.9941E-05 1.4310E-05 1.9236E-06 1.4839E-06 - 3.1623E+02 1.4063E-05 1.0075E-05 1.2469E-06 1.0118E-06 - 3.5481E+02 9.8725E-06 7.0127E-06 8.2947E-07 6.6722E-07 - 3.9811E+02 6.9087E-06 4.8623E-06 5.5078E-07 4.4298E-07 - 4.4668E+02 4.8223E-06 3.3716E-06 3.6301E-07 2.9219E-07 - 5.0119E+02 3.3894E-06 2.3361E-06 2.3941E-07 1.9560E-07 - 5.6234E+02 2.3823E-06 1.6231E-06 1.6136E-07 1.2896E-07 - 6.3096E+02 1.6663E-06 1.1286E-06 1.0777E-07 8.5167E-08 - 7.0795E+02 1.1597E-06 7.7918E-07 7.1133E-08 5.7199E-08 - 7.9433E+02 8.0902E-07 5.3630E-07 4.7600E-08 3.8740E-08 - 8.9125E+02 5.6286E-07 3.7144E-07 3.1907E-08 2.5118E-08 - 1.0000E+03 3.9198E-07 2.5654E-07 2.1171E-08 1.6840E-08 - 1.1220E+03 2.7251E-07 1.7672E-07 1.3915E-08 1.1098E-08 - 1.2589E+03 1.9001E-07 1.2226E-07 9.2827E-09 7.3404E-09 - 1.4125E+03 1.3200E-07 8.4431E-08 6.2148E-09 4.9483E-09 - 1.5849E+03 9.1512E-08 5.7653E-08 4.1499E-09 3.3512E-09 - 1.7783E+03 6.3218E-08 3.9401E-08 2.8699E-09 2.3156E-09 - 1.9953E+03 4.3702E-08 2.7178E-08 1.9289E-09 1.5178E-09 - 2.2387E+03 3.0160E-08 1.8757E-08 1.2835E-09 9.8309E-10 - 2.5119E+03 2.0667E-08 1.2686E-08 8.5865E-10 6.6897E-10 - 2.8184E+03 1.4160E-08 8.6002E-09 5.7515E-10 4.4063E-10 - 3.1623E+03 9.8973E-09 5.9587E-09 3.7629E-10 2.8969E-10 - 3.5481E+03 6.7109E-09 4.0226E-09 2.5354E-10 1.9623E-10 - 3.9811E+03 4.5975E-09 2.7092E-09 1.6960E-10 1.2504E-10 - 4.4668E+03 3.1193E-09 1.8371E-09 1.1324E-10 8.3940E-11 - 5.0119E+03 2.1219E-09 1.2449E-09 7.4126E-11 5.5817E-11 - 5.6234E+03 1.4375E-09 8.3057E-10 4.8121E-11 3.5328E-11 - 6.3096E+03 9.6753E-10 5.6281E-10 3.3173E-11 2.4392E-11 - 7.0795E+03 6.5501E-10 3.7754E-10 2.1295E-11 1.5822E-11 - 7.9433E+03 4.4392E-10 2.5337E-10 1.3887E-11 1.0006E-11 - 8.9125E+03 2.9513E-10 1.6538E-10 9.2339E-12 6.6547E-12 - 1.0000E+04 1.9596E-10 1.0968E-10 6.1259E-12 4.5205E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1347E+04 3.2316E+04 1.5937E+04 1.4062E+04 - 1.1220E-01 2.6298E+04 2.7013E+04 1.3626E+04 1.1941E+04 - 1.2589E-01 2.2012E+04 2.2382E+04 1.1468E+04 9.8743E+03 - 1.4125E-01 1.8248E+04 1.8465E+04 9.4694E+03 8.0834E+03 - 1.5849E-01 1.4986E+04 1.5070E+04 7.8199E+03 6.6091E+03 - 1.7783E-01 1.2083E+04 1.2146E+04 6.4543E+03 5.3237E+03 - 1.9953E-01 9.5871E+03 9.7074E+03 5.2416E+03 4.2753E+03 - 2.2387E-01 7.5286E+03 7.6743E+03 4.2009E+03 3.4343E+03 - 2.5119E-01 5.8773E+03 5.9991E+03 3.3068E+03 2.6965E+03 - 2.8184E-01 4.5543E+03 4.6300E+03 2.5922E+03 2.0712E+03 - 3.1623E-01 3.5058E+03 3.5467E+03 2.0363E+03 1.5884E+03 - 3.5481E-01 2.6598E+03 2.6962E+03 1.5704E+03 1.2236E+03 - 3.9811E-01 2.0102E+03 2.0401E+03 1.2112E+03 9.3845E+02 - 4.4668E-01 1.5303E+03 1.5367E+03 9.2521E+02 7.0935E+02 - 5.0119E-01 1.1469E+03 1.1555E+03 6.9354E+02 5.3874E+02 - 5.6234E-01 8.5413E+02 8.6916E+02 5.2944E+02 4.0762E+02 - 6.3096E-01 6.4152E+02 6.4579E+02 4.0457E+02 3.0530E+02 - 7.0795E-01 4.7470E+02 4.7919E+02 2.9765E+02 2.2613E+02 - 7.9433E-01 3.5560E+02 3.5657E+02 2.1772E+02 1.6572E+02 - 8.9125E-01 2.6619E+02 2.7125E+02 1.6292E+02 1.2530E+02 - 1.0000E+00 1.9812E+02 1.9909E+02 1.2244E+02 9.2878E+01 - 1.1220E+00 1.4684E+02 1.4684E+02 9.0876E+01 6.7770E+01 - 1.2589E+00 1.0961E+02 1.0893E+02 6.7334E+01 5.0138E+01 - 1.4125E+00 8.2617E+01 8.1211E+01 5.0440E+01 3.7787E+01 - 1.5849E+00 6.1319E+01 6.0580E+01 3.6909E+01 2.8562E+01 - 1.7783E+00 4.5661E+01 4.5053E+01 2.7041E+01 2.0687E+01 - 1.9953E+00 3.3733E+01 3.3002E+01 2.0506E+01 1.5052E+01 - 2.2387E+00 2.4645E+01 2.3902E+01 1.5092E+01 1.1343E+01 - 2.5119E+00 1.8317E+01 1.7545E+01 1.0754E+01 8.1188E+00 - 2.8184E+00 1.3239E+01 1.2930E+01 7.6918E+00 5.8252E+00 - 3.1623E+00 9.8495E+00 9.5352E+00 5.6761E+00 4.2669E+00 - 3.5481E+00 7.2166E+00 6.8988E+00 4.1263E+00 3.0522E+00 - 3.9811E+00 5.2102E+00 4.9738E+00 2.9190E+00 2.1968E+00 - 4.4668E+00 3.7385E+00 3.5877E+00 2.0928E+00 1.5619E+00 - 5.0119E+00 2.7148E+00 2.5598E+00 1.5111E+00 1.0972E+00 - 5.6234E+00 1.9720E+00 1.8444E+00 1.0637E+00 7.9630E-01 - 6.3096E+00 1.4429E+00 1.3417E+00 7.5584E-01 5.6321E-01 - 7.0795E+00 1.0329E+00 9.6966E-01 5.3315E-01 3.8851E-01 - 7.9433E+00 7.4646E-01 6.7933E-01 3.7503E-01 2.8053E-01 - 8.9125E+00 5.4428E-01 4.8640E-01 2.5914E-01 2.0334E-01 - 1.0000E+01 3.8371E-01 3.5591E-01 1.8386E-01 1.3679E-01 - 1.1220E+01 2.7636E-01 2.5501E-01 1.2832E-01 9.5199E-02 - 1.2589E+01 2.0008E-01 1.7951E-01 8.9467E-02 6.8549E-02 - 1.4125E+01 1.4202E-01 1.2762E-01 6.1478E-02 4.7754E-02 - 1.5849E+01 1.0194E-01 9.1883E-02 4.2782E-02 3.2403E-02 - 1.7783E+01 7.3402E-02 6.4800E-02 2.9595E-02 2.1783E-02 - 1.9953E+01 5.2235E-02 4.6218E-02 2.0710E-02 1.4643E-02 - 2.2387E+01 3.7279E-02 3.3441E-02 1.4092E-02 1.0135E-02 - 2.5119E+01 2.6804E-02 2.3731E-02 9.5468E-03 7.0918E-03 - 2.8184E+01 1.9093E-02 1.6609E-02 6.6338E-03 4.8532E-03 - 3.1623E+01 1.3550E-02 1.1493E-02 4.2874E-03 3.2711E-03 - 3.5481E+01 9.6751E-03 8.1381E-03 2.9006E-03 2.2210E-03 - 3.9811E+01 6.8866E-03 5.7717E-03 1.9593E-03 1.5042E-03 - 4.4668E+01 4.9083E-03 4.0834E-03 1.3188E-03 1.0108E-03 - 5.0119E+01 3.5096E-03 2.8873E-03 8.8387E-04 6.7944E-04 - 5.6234E+01 2.4991E-03 2.0379E-03 5.9023E-04 4.5702E-04 - 6.3096E+01 1.7784E-03 1.4408E-03 3.9603E-04 3.0700E-04 - 7.0795E+01 1.2673E-03 1.0182E-03 2.6701E-04 2.0540E-04 - 7.9433E+01 9.0383E-04 7.1608E-04 1.7557E-04 1.3709E-04 - 8.9125E+01 6.3984E-04 5.0233E-04 1.1561E-04 9.1572E-05 - 1.0000E+02 4.5520E-04 3.5469E-04 7.8237E-05 6.1349E-05 - 1.1220E+02 3.2331E-04 2.5008E-04 5.2075E-05 4.0741E-05 - 1.2589E+02 2.2867E-04 1.7581E-04 3.4538E-05 2.7071E-05 - 1.4125E+02 1.6215E-04 1.2295E-04 2.2855E-05 1.7770E-05 - 1.5849E+02 1.1467E-04 8.6202E-05 1.5035E-05 1.1690E-05 - 1.7783E+02 8.0802E-05 6.0483E-05 9.8866E-06 7.8180E-06 - 1.9953E+02 5.7009E-05 4.2376E-05 6.4758E-06 5.2277E-06 - 2.2387E+02 4.0244E-05 2.9495E-05 4.2990E-06 3.4901E-06 - 2.5119E+02 2.8236E-05 2.0537E-05 2.8410E-06 2.3222E-06 - 2.8184E+02 1.9648E-05 1.4321E-05 1.8669E-06 1.5351E-06 - 3.1623E+02 1.3969E-05 1.0031E-05 1.2492E-06 1.0146E-06 - 3.5481E+02 9.7956E-06 6.9835E-06 8.3400E-07 6.7291E-07 - 3.9811E+02 6.8582E-06 4.8614E-06 5.4937E-07 4.4703E-07 - 4.4668E+02 4.8242E-06 3.3802E-06 3.6052E-07 2.9540E-07 - 5.0119E+02 3.3799E-06 2.3435E-06 2.4310E-07 1.9467E-07 - 5.6234E+02 2.3653E-06 1.6242E-06 1.6160E-07 1.3012E-07 - 6.3096E+02 1.6584E-06 1.1259E-06 1.0799E-07 8.6651E-08 - 7.0795E+02 1.1562E-06 7.7874E-07 7.1868E-08 5.7399E-08 - 7.9433E+02 8.0645E-07 5.3744E-07 4.8320E-08 3.8312E-08 - 8.9125E+02 5.6120E-07 3.7227E-07 3.2057E-08 2.5501E-08 - 1.0000E+03 3.9334E-07 2.5648E-07 2.1408E-08 1.7047E-08 - 1.1220E+03 2.7366E-07 1.7638E-07 1.4313E-08 1.1304E-08 - 1.2589E+03 1.8995E-07 1.2195E-07 9.4678E-09 7.5351E-09 - 1.4125E+03 1.3181E-07 8.3734E-08 6.2679E-09 5.0131E-09 - 1.5849E+03 9.1160E-08 5.7428E-08 4.2069E-09 3.3182E-09 - 1.7783E+03 6.2787E-08 3.9482E-08 2.7790E-09 2.2734E-09 - 1.9953E+03 4.3716E-08 2.7114E-08 1.8582E-09 1.4975E-09 - 2.2387E+03 2.9944E-08 1.8621E-08 1.2555E-09 9.9394E-10 - 2.5119E+03 2.0693E-08 1.2720E-08 8.4961E-10 6.4879E-10 - 2.8184E+03 1.4272E-08 8.6880E-09 5.6751E-10 4.2475E-10 - 3.1623E+03 9.8625E-09 5.9333E-09 3.8212E-10 2.8605E-10 - 3.5481E+03 6.6769E-09 3.9899E-09 2.4918E-10 1.9822E-10 - 3.9811E+03 4.5661E-09 2.7140E-09 1.6402E-10 1.2909E-10 - 4.4668E+03 3.0848E-09 1.8404E-09 1.1109E-10 8.2153E-11 - 5.0119E+03 2.1116E-09 1.2387E-09 7.2605E-11 5.4861E-11 - 5.6234E+03 1.4347E-09 8.3359E-10 4.7539E-11 3.6163E-11 - 6.3096E+03 9.7333E-10 5.6185E-10 3.2180E-11 2.4183E-11 - 7.0795E+03 6.5566E-10 3.7473E-10 2.1636E-11 1.5610E-11 - 7.9433E+03 4.3967E-10 2.4866E-10 1.4271E-11 1.0289E-11 - 8.9125E+03 2.9669E-10 1.6564E-10 9.3987E-12 6.8017E-12 - 1.0000E+04 1.9947E-10 1.1137E-10 6.4076E-12 4.2208E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.1622E+04 3.2660E+04 1.6153E+04 1.3914E+04 - 1.1220E-01 2.6457E+04 2.7267E+04 1.3877E+04 1.1788E+04 - 1.2589E-01 2.2002E+04 2.2635E+04 1.1788E+04 9.8176E+03 - 1.4125E-01 1.8278E+04 1.8748E+04 9.8025E+03 8.0764E+03 - 1.5849E-01 1.5051E+04 1.5323E+04 8.0146E+03 6.5811E+03 - 1.7783E-01 1.2138E+04 1.2431E+04 6.5833E+03 5.3433E+03 - 1.9953E-01 9.6371E+03 1.0008E+04 5.3737E+03 4.2624E+03 - 2.2387E-01 7.5953E+03 7.9147E+03 4.3099E+03 3.3568E+03 - 2.5119E-01 5.9501E+03 6.1739E+03 3.4421E+03 2.6568E+03 - 2.8184E-01 4.5978E+03 4.7821E+03 2.7245E+03 2.0797E+03 - 3.1623E-01 3.5021E+03 3.6756E+03 2.1252E+03 1.6197E+03 - 3.5481E-01 2.6574E+03 2.7973E+03 1.6503E+03 1.2244E+03 - 3.9811E-01 2.0130E+03 2.1201E+03 1.2729E+03 9.1631E+02 - 4.4668E-01 1.5141E+03 1.6061E+03 9.6281E+02 6.8764E+02 - 5.0119E-01 1.1323E+03 1.2134E+03 7.3587E+02 5.1717E+02 - 5.6234E-01 8.4562E+02 9.0734E+02 5.5876E+02 3.9157E+02 - 6.3096E-01 6.3172E+02 6.8037E+02 4.1667E+02 2.9642E+02 - 7.0795E-01 4.7614E+02 5.0684E+02 3.1315E+02 2.2162E+02 - 7.9433E-01 3.5524E+02 3.7363E+02 2.3271E+02 1.6110E+02 - 8.9125E-01 2.6502E+02 2.7259E+02 1.7189E+02 1.1878E+02 - 1.0000E+00 1.9608E+02 2.0611E+02 1.2989E+02 8.9683E+01 - 1.1220E+00 1.4530E+02 1.5313E+02 9.6186E+01 6.6045E+01 - 1.2589E+00 1.0937E+02 1.1360E+02 7.0662E+01 4.9036E+01 - 1.4125E+00 8.1335E+01 8.4590E+01 5.2357E+01 3.6253E+01 - 1.5849E+00 6.0345E+01 6.2809E+01 3.8671E+01 2.6817E+01 - 1.7783E+00 4.5003E+01 4.5759E+01 2.8603E+01 1.9703E+01 - 1.9953E+00 3.3192E+01 3.3439E+01 2.1157E+01 1.4547E+01 - 2.2387E+00 2.4899E+01 2.4682E+01 1.5494E+01 1.0877E+01 - 2.5119E+00 1.8176E+01 1.8113E+01 1.1221E+01 7.8555E+00 - 2.8184E+00 1.3412E+01 1.3522E+01 8.0222E+00 5.6680E+00 - 3.1623E+00 9.7583E+00 9.6450E+00 5.8662E+00 4.1683E+00 - 3.5481E+00 7.0967E+00 6.9368E+00 4.2491E+00 2.9671E+00 - 3.9811E+00 5.2462E+00 4.9963E+00 3.0141E+00 2.1470E+00 - 4.4668E+00 3.8097E+00 3.6116E+00 2.1503E+00 1.5301E+00 - 5.0119E+00 2.7653E+00 2.5908E+00 1.5569E+00 1.0669E+00 - 5.6234E+00 1.9835E+00 1.8858E+00 1.0948E+00 7.8235E-01 - 6.3096E+00 1.4171E+00 1.3776E+00 7.7059E-01 5.7495E-01 - 7.0795E+00 1.0321E+00 9.9503E-01 5.3975E-01 3.9579E-01 - 7.9433E+00 7.2965E-01 7.0545E-01 3.8195E-01 2.7357E-01 - 8.9125E+00 5.2452E-01 4.9526E-01 2.6782E-01 1.9119E-01 - 1.0000E+01 3.8294E-01 3.5666E-01 1.8717E-01 1.3822E-01 - 1.1220E+01 2.7589E-01 2.5336E-01 1.2841E-01 9.4679E-02 - 1.2589E+01 1.9625E-01 1.8235E-01 8.8911E-02 6.5166E-02 - 1.4125E+01 1.3911E-01 1.3041E-01 6.3729E-02 4.5817E-02 - 1.5849E+01 1.0188E-01 9.2067E-02 4.4648E-02 3.1773E-02 - 1.7783E+01 7.2706E-02 6.6301E-02 2.9524E-02 2.1458E-02 - 1.9953E+01 5.2064E-02 4.7046E-02 1.9844E-02 1.4660E-02 - 2.2387E+01 3.7389E-02 3.2992E-02 1.3715E-02 1.0209E-02 - 2.5119E+01 2.6728E-02 2.3204E-02 9.1012E-03 7.1718E-03 - 2.8184E+01 1.9379E-02 1.6122E-02 6.2879E-03 4.8321E-03 - 3.1623E+01 1.3562E-02 1.1551E-02 4.3080E-03 3.2642E-03 - 3.5481E+01 9.7017E-03 8.1805E-03 2.9169E-03 2.2099E-03 - 3.9811E+01 6.9139E-03 5.7866E-03 1.9609E-03 1.5109E-03 - 4.4668E+01 4.9355E-03 4.0861E-03 1.3134E-03 1.0235E-03 - 5.0119E+01 3.5414E-03 2.8973E-03 8.8535E-04 6.8673E-04 - 5.6234E+01 2.5168E-03 2.0442E-03 5.9269E-04 4.5581E-04 - 6.3096E+01 1.7871E-03 1.4431E-03 3.9924E-04 3.0710E-04 - 7.0795E+01 1.2723E-03 1.0180E-03 2.6635E-04 2.0797E-04 - 7.9433E+01 9.0616E-04 7.1565E-04 1.7660E-04 1.3914E-04 - 8.9125E+01 6.4384E-04 5.0501E-04 1.1921E-04 9.2973E-05 - 1.0000E+02 4.5711E-04 3.5664E-04 7.8450E-05 6.1397E-05 - 1.1220E+02 3.2359E-04 2.5120E-04 5.1802E-05 4.0719E-05 - 1.2589E+02 2.2898E-04 1.7606E-04 3.4278E-05 2.7042E-05 - 1.4125E+02 1.6231E-04 1.2351E-04 2.2870E-05 1.8019E-05 - 1.5849E+02 1.1500E-04 8.6733E-05 1.5154E-05 1.1978E-05 - 1.7783E+02 8.1106E-05 6.0805E-05 9.9641E-06 7.9643E-06 - 1.9953E+02 5.7069E-05 4.2438E-05 6.5378E-06 5.1598E-06 - 2.2387E+02 4.0169E-05 2.9524E-05 4.3086E-06 3.4160E-06 - 2.5119E+02 2.8361E-05 2.0599E-05 2.8464E-06 2.2941E-06 - 2.8184E+02 1.9940E-05 1.4409E-05 1.8893E-06 1.4769E-06 - 3.1623E+02 1.4018E-05 1.0051E-05 1.2673E-06 1.0001E-06 - 3.5481E+02 9.8498E-06 6.9616E-06 8.4278E-07 6.6565E-07 - 3.9811E+02 6.9204E-06 4.8376E-06 5.5217E-07 4.4408E-07 - 4.4668E+02 4.8478E-06 3.3802E-06 3.6709E-07 2.9189E-07 - 5.0119E+02 3.3885E-06 2.3375E-06 2.4412E-07 1.9190E-07 - 5.6234E+02 2.3702E-06 1.6271E-06 1.6073E-07 1.2984E-07 - 6.3096E+02 1.6497E-06 1.1320E-06 1.0703E-07 8.6496E-08 - 7.0795E+02 1.1566E-06 7.8417E-07 7.1556E-08 5.7271E-08 - 7.9433E+02 8.0838E-07 5.3971E-07 4.7297E-08 3.8584E-08 - 8.9125E+02 5.6245E-07 3.7112E-07 3.1498E-08 2.5820E-08 - 1.0000E+03 3.9134E-07 2.5740E-07 2.0946E-08 1.7026E-08 - 1.1220E+03 2.7212E-07 1.7738E-07 1.3997E-08 1.1260E-08 - 1.2589E+03 1.8977E-07 1.2136E-07 9.3873E-09 7.4962E-09 - 1.4125E+03 1.3136E-07 8.3294E-08 6.4564E-09 5.0042E-09 - 1.5849E+03 9.1156E-08 5.7641E-08 4.2783E-09 3.3122E-09 - 1.7783E+03 6.3150E-08 3.9720E-08 2.8279E-09 2.1950E-09 - 1.9953E+03 4.3893E-08 2.7139E-08 1.9235E-09 1.4640E-09 - 2.2387E+03 3.0327E-08 1.8603E-08 1.3339E-09 9.7287E-10 - 2.5119E+03 2.0684E-08 1.2660E-08 8.7074E-10 6.3526E-10 - 2.8184E+03 1.4237E-08 8.5535E-09 5.7363E-10 4.3597E-10 - 3.1623E+03 9.8931E-09 5.9510E-09 3.7824E-10 2.8779E-10 - 3.5481E+03 6.6970E-09 4.0005E-09 2.5347E-10 1.8929E-10 - 3.9811E+03 4.5978E-09 2.7079E-09 1.6879E-10 1.2635E-10 - 4.4668E+03 3.1219E-09 1.8263E-09 1.1345E-10 8.5464E-11 - 5.0119E+03 2.1125E-09 1.2454E-09 7.8073E-11 5.5604E-11 - 5.6234E+03 1.4440E-09 8.4651E-10 5.0331E-11 3.5724E-11 - 6.3096E+03 9.7004E-10 5.6200E-10 3.2001E-11 2.3948E-11 - 7.0795E+03 6.5448E-10 3.7651E-10 2.1740E-11 1.5754E-11 - 7.9433E+03 4.4058E-10 2.5211E-10 1.4361E-11 1.0687E-11 - 8.9125E+03 2.9712E-10 1.6817E-10 9.2672E-12 6.9699E-12 - 1.0000E+04 1.9969E-10 1.1142E-10 5.9741E-12 4.5818E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2070E+04 3.3344E+04 1.6670E+04 1.4051E+04 - 1.1220E-01 2.6805E+04 2.7808E+04 1.4313E+04 1.1830E+04 - 1.2589E-01 2.2354E+04 2.3191E+04 1.2069E+04 9.8482E+03 - 1.4125E-01 1.8535E+04 1.9165E+04 1.0018E+04 8.0779E+03 - 1.5849E-01 1.5215E+04 1.5708E+04 8.3345E+03 6.5157E+03 - 1.7783E-01 1.2257E+04 1.2774E+04 6.8544E+03 5.2552E+03 - 1.9953E-01 9.7284E+03 1.0229E+04 5.5219E+03 4.2413E+03 - 2.2387E-01 7.6479E+03 8.0641E+03 4.4635E+03 3.3975E+03 - 2.5119E-01 5.9467E+03 6.2898E+03 3.5463E+03 2.6620E+03 - 2.8184E-01 4.6282E+03 4.8872E+03 2.8041E+03 2.0356E+03 - 3.1623E-01 3.5693E+03 3.7578E+03 2.1984E+03 1.5761E+03 - 3.5481E-01 2.7019E+03 2.8761E+03 1.7030E+03 1.2089E+03 - 3.9811E-01 2.0387E+03 2.1881E+03 1.3233E+03 9.1494E+02 - 4.4668E-01 1.5335E+03 1.6559E+03 1.0105E+03 6.9526E+02 - 5.0119E-01 1.1475E+03 1.2479E+03 7.5495E+02 5.2050E+02 - 5.6234E-01 8.5901E+02 9.2593E+02 5.6865E+02 3.8875E+02 - 6.3096E-01 6.4760E+02 6.8556E+02 4.2535E+02 2.9251E+02 - 7.0795E-01 4.7560E+02 5.0760E+02 3.2076E+02 2.1812E+02 - 7.9433E-01 3.5056E+02 3.8022E+02 2.4337E+02 1.6136E+02 - 8.9125E-01 2.6259E+02 2.8295E+02 1.8071E+02 1.1958E+02 - 1.0000E+00 1.9599E+02 2.1057E+02 1.3315E+02 8.8919E+01 - 1.1220E+00 1.4584E+02 1.5751E+02 9.9048E+01 6.5975E+01 - 1.2589E+00 1.0894E+02 1.1641E+02 7.2506E+01 4.8870E+01 - 1.4125E+00 8.2278E+01 8.5576E+01 5.3447E+01 3.6175E+01 - 1.5849E+00 6.1269E+01 6.3833E+01 3.9995E+01 2.6755E+01 - 1.7783E+00 4.4786E+01 4.6470E+01 2.9644E+01 1.9624E+01 - 1.9953E+00 3.3169E+01 3.3921E+01 2.1361E+01 1.4387E+01 - 2.2387E+00 2.4786E+01 2.5433E+01 1.5737E+01 1.0340E+01 - 2.5119E+00 1.8260E+01 1.8295E+01 1.1516E+01 7.5950E+00 - 2.8184E+00 1.3472E+01 1.3241E+01 8.1785E+00 5.7137E+00 - 3.1623E+00 9.7105E+00 9.6878E+00 5.9461E+00 4.1706E+00 - 3.5481E+00 7.1711E+00 7.0111E+00 4.2714E+00 2.9905E+00 - 3.9811E+00 5.2178E+00 5.0636E+00 3.0833E+00 2.1483E+00 - 4.4668E+00 3.7851E+00 3.6321E+00 2.1840E+00 1.5526E+00 - 5.0119E+00 2.7443E+00 2.6226E+00 1.5511E+00 1.1110E+00 - 5.6234E+00 1.9915E+00 1.9126E+00 1.1037E+00 7.8727E-01 - 6.3096E+00 1.4377E+00 1.3760E+00 7.6017E-01 5.6154E-01 - 7.0795E+00 1.0425E+00 9.7228E-01 5.3553E-01 4.0407E-01 - 7.9433E+00 7.5344E-01 6.8271E-01 3.8242E-01 2.8283E-01 - 8.9125E+00 5.4342E-01 4.8353E-01 2.6527E-01 1.9339E-01 - 1.0000E+01 3.8547E-01 3.5663E-01 1.8572E-01 1.3641E-01 - 1.1220E+01 2.7745E-01 2.5250E-01 1.2928E-01 9.5101E-02 - 1.2589E+01 1.9882E-01 1.7768E-01 8.9595E-02 6.6809E-02 - 1.4125E+01 1.4267E-01 1.2520E-01 6.0681E-02 4.7303E-02 - 1.5849E+01 1.0171E-01 9.0409E-02 4.2399E-02 3.2719E-02 - 1.7783E+01 7.3519E-02 6.4758E-02 2.8741E-02 2.2366E-02 - 1.9953E+01 5.1419E-02 4.6363E-02 1.9815E-02 1.5497E-02 - 2.2387E+01 3.6606E-02 3.2485E-02 1.3428E-02 1.0355E-02 - 2.5119E+01 2.6763E-02 2.2622E-02 8.9086E-03 6.7011E-03 - 2.8184E+01 1.9041E-02 1.6518E-02 6.2207E-03 4.4856E-03 - 3.1623E+01 1.3559E-02 1.1508E-02 4.3027E-03 3.2654E-03 - 3.5481E+01 9.6990E-03 8.1709E-03 2.8976E-03 2.2128E-03 - 3.9811E+01 6.9176E-03 5.7889E-03 1.9543E-03 1.5058E-03 - 4.4668E+01 4.9198E-03 4.0965E-03 1.3192E-03 1.0225E-03 - 5.0119E+01 3.5152E-03 2.8976E-03 8.8913E-04 6.8614E-04 - 5.6234E+01 2.5125E-03 2.0442E-03 5.9478E-04 4.5946E-04 - 6.3096E+01 1.7877E-03 1.4379E-03 3.9775E-04 3.0622E-04 - 7.0795E+01 1.2707E-03 1.0130E-03 2.6594E-04 2.0362E-04 - 7.9433E+01 8.9980E-04 7.1885E-04 1.7698E-04 1.3640E-04 - 8.9125E+01 6.3765E-04 5.0802E-04 1.1818E-04 9.1577E-05 - 1.0000E+02 4.5677E-04 3.5688E-04 7.8991E-05 6.1109E-05 - 1.1220E+02 3.2403E-04 2.5108E-04 5.2148E-05 4.0616E-05 - 1.2589E+02 2.2974E-04 1.7626E-04 3.4487E-05 2.6897E-05 - 1.4125E+02 1.6232E-04 1.2404E-04 2.2983E-05 1.7972E-05 - 1.5849E+02 1.1493E-04 8.6852E-05 1.5179E-05 1.1963E-05 - 1.7783E+02 8.1097E-05 6.0596E-05 9.9803E-06 7.9064E-06 - 1.9953E+02 5.7220E-05 4.2353E-05 6.6182E-06 5.2472E-06 - 2.2387E+02 4.0290E-05 2.9443E-05 4.3295E-06 3.4114E-06 - 2.5119E+02 2.8157E-05 2.0656E-05 2.8400E-06 2.2722E-06 - 2.8184E+02 1.9783E-05 1.4603E-05 1.9140E-06 1.5192E-06 - 3.1623E+02 1.4071E-05 1.0072E-05 1.2644E-06 9.9652E-07 - 3.5481E+02 9.8839E-06 7.0052E-06 8.3842E-07 6.6671E-07 - 3.9811E+02 6.9312E-06 4.8536E-06 5.5461E-07 4.4109E-07 - 4.4668E+02 4.8445E-06 3.3713E-06 3.6703E-07 2.9408E-07 - 5.0119E+02 3.3825E-06 2.3516E-06 2.4017E-07 1.9584E-07 - 5.6234E+02 2.3679E-06 1.6251E-06 1.6214E-07 1.3069E-07 - 6.3096E+02 1.6518E-06 1.1215E-06 1.0699E-07 8.5868E-08 - 7.0795E+02 1.1517E-06 7.7739E-07 7.0572E-08 5.7103E-08 - 7.9433E+02 8.0457E-07 5.3954E-07 4.6806E-08 3.7741E-08 - 8.9125E+02 5.6043E-07 3.7284E-07 3.1001E-08 2.5090E-08 - 1.0000E+03 3.9285E-07 2.5730E-07 2.1186E-08 1.6463E-08 - 1.1220E+03 2.7354E-07 1.7688E-07 1.4224E-08 1.0935E-08 - 1.2589E+03 1.9070E-07 1.2168E-07 9.6510E-09 7.4740E-09 - 1.4125E+03 1.3199E-07 8.3433E-08 6.4465E-09 5.0152E-09 - 1.5849E+03 9.1208E-08 5.7911E-08 4.1824E-09 3.3937E-09 - 1.7783E+03 6.3125E-08 3.9725E-08 2.8119E-09 2.3061E-09 - 1.9953E+03 4.3645E-08 2.6975E-08 1.9085E-09 1.4925E-09 - 2.2387E+03 3.0031E-08 1.8580E-08 1.2020E-09 9.9199E-10 - 2.5119E+03 2.0612E-08 1.2674E-08 8.1771E-10 6.6170E-10 - 2.8184E+03 1.4130E-08 8.6336E-09 5.8589E-10 4.4242E-10 - 3.1623E+03 9.9511E-09 5.9961E-09 3.8231E-10 2.9278E-10 - 3.5481E+03 6.7240E-09 4.0349E-09 2.5376E-10 1.8685E-10 - 3.9811E+03 4.5983E-09 2.7109E-09 1.6824E-10 1.2198E-10 - 4.4668E+03 3.1278E-09 1.8272E-09 1.1180E-10 8.2145E-11 - 5.0119E+03 2.1202E-09 1.2363E-09 7.7022E-11 5.3054E-11 - 5.6234E+03 1.4311E-09 8.2916E-10 5.2293E-11 3.5375E-11 - 6.3096E+03 9.6803E-10 5.6083E-10 3.3614E-11 2.4855E-11 - 7.0795E+03 6.6123E-10 3.7464E-10 2.0949E-11 1.6298E-11 - 7.9433E+03 4.4369E-10 2.5115E-10 1.4466E-11 1.0857E-11 - 8.9125E+03 2.9710E-10 1.6788E-10 9.9266E-12 6.8745E-12 - 1.0000E+04 1.9856E-10 1.1112E-10 6.1579E-12 4.1905E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2328E+04 3.3543E+04 1.6792E+04 1.4041E+04 - 1.1220E-01 2.7041E+04 2.8010E+04 1.4408E+04 1.1854E+04 - 1.2589E-01 2.2511E+04 2.3333E+04 1.2175E+04 9.8036E+03 - 1.4125E-01 1.8543E+04 1.9329E+04 1.0096E+04 8.0021E+03 - 1.5849E-01 1.5087E+04 1.5754E+04 8.2954E+03 6.5332E+03 - 1.7783E-01 1.2160E+04 1.2737E+04 6.7751E+03 5.3177E+03 - 1.9953E-01 9.7044E+03 1.0179E+04 5.5621E+03 4.2424E+03 - 2.2387E-01 7.6387E+03 8.0183E+03 4.5060E+03 3.3469E+03 - 2.5119E-01 5.9747E+03 6.3159E+03 3.5788E+03 2.6222E+03 - 2.8184E-01 4.6114E+03 4.8958E+03 2.8299E+03 2.0516E+03 - 3.1623E-01 3.4848E+03 3.7551E+03 2.2059E+03 1.5827E+03 - 3.5481E-01 2.6497E+03 2.8725E+03 1.6893E+03 1.2015E+03 - 3.9811E-01 2.0318E+03 2.1768E+03 1.2926E+03 9.0605E+02 - 4.4668E-01 1.5326E+03 1.6368E+03 1.0039E+03 6.8719E+02 - 5.0119E-01 1.1389E+03 1.2353E+03 7.5664E+02 5.1708E+02 - 5.6234E-01 8.4770E+02 9.2491E+02 5.6134E+02 3.8544E+02 - 6.3096E-01 6.3475E+02 6.8452E+02 4.2679E+02 2.8535E+02 - 7.0795E-01 4.7520E+02 5.1838E+02 3.2085E+02 2.1070E+02 - 7.9433E-01 3.5147E+02 3.8663E+02 2.3953E+02 1.5779E+02 - 8.9125E-01 2.6087E+02 2.8605E+02 1.7960E+02 1.1704E+02 - 1.0000E+00 1.9596E+02 2.1104E+02 1.3289E+02 8.7464E+01 - 1.1220E+00 1.4615E+02 1.5751E+02 9.8755E+01 6.5543E+01 - 1.2589E+00 1.0862E+02 1.1610E+02 7.3330E+01 4.8750E+01 - 1.4125E+00 8.0702E+01 8.4874E+01 5.3480E+01 3.5742E+01 - 1.5849E+00 6.0165E+01 6.2510E+01 3.9844E+01 2.6768E+01 - 1.7783E+00 4.4274E+01 4.6673E+01 3.0031E+01 1.9648E+01 - 1.9953E+00 3.2764E+01 3.4240E+01 2.1656E+01 1.4384E+01 - 2.2387E+00 2.4308E+01 2.5067E+01 1.5833E+01 1.0657E+01 - 2.5119E+00 1.7947E+01 1.8883E+01 1.1590E+01 7.7026E+00 - 2.8184E+00 1.3311E+01 1.3970E+01 8.2978E+00 5.6761E+00 - 3.1623E+00 9.7819E+00 9.8597E+00 6.0316E+00 4.1704E+00 - 3.5481E+00 7.1305E+00 7.1314E+00 4.3615E+00 2.9452E+00 - 3.9811E+00 5.2052E+00 5.1172E+00 3.1333E+00 2.0845E+00 - 4.4668E+00 3.7990E+00 3.6945E+00 2.2038E+00 1.5285E+00 - 5.0119E+00 2.7626E+00 2.6935E+00 1.5752E+00 1.1050E+00 - 5.6234E+00 1.9792E+00 1.9428E+00 1.1311E+00 7.9532E-01 - 6.3096E+00 1.4310E+00 1.4088E+00 7.9471E-01 5.7279E-01 - 7.0795E+00 1.0420E+00 9.8266E-01 5.6747E-01 3.9665E-01 - 7.9433E+00 7.4315E-01 6.9380E-01 3.8731E-01 2.7725E-01 - 8.9125E+00 5.3711E-01 4.9265E-01 2.6379E-01 1.9916E-01 - 1.0000E+01 3.8284E-01 3.5750E-01 1.8583E-01 1.3781E-01 - 1.1220E+01 2.7434E-01 2.5304E-01 1.2765E-01 9.5500E-02 - 1.2589E+01 1.9567E-01 1.7980E-01 8.7443E-02 6.5600E-02 - 1.4125E+01 1.4029E-01 1.2902E-01 5.9957E-02 4.5930E-02 - 1.5849E+01 1.0093E-01 9.2262E-02 4.2036E-02 3.2743E-02 - 1.7783E+01 7.1731E-02 6.4630E-02 2.9270E-02 2.2323E-02 - 1.9953E+01 5.1336E-02 4.5245E-02 2.0123E-02 1.5228E-02 - 2.2387E+01 3.6198E-02 3.0828E-02 1.3848E-02 1.0453E-02 - 2.5119E+01 2.5934E-02 2.1725E-02 9.1206E-03 7.1132E-03 - 2.8184E+01 1.9027E-02 1.5623E-02 6.1474E-03 4.9390E-03 - 3.1623E+01 1.3586E-02 1.1597E-02 4.3082E-03 3.2882E-03 - 3.5481E+01 9.6953E-03 8.1917E-03 2.9153E-03 2.2350E-03 - 3.9811E+01 6.9391E-03 5.8009E-03 1.9798E-03 1.5138E-03 - 4.4668E+01 4.9496E-03 4.1196E-03 1.3331E-03 1.0188E-03 - 5.0119E+01 3.5181E-03 2.9097E-03 8.9547E-04 6.8131E-04 - 5.6234E+01 2.5171E-03 2.0463E-03 5.9753E-04 4.5957E-04 - 6.3096E+01 1.8006E-03 1.4418E-03 3.9946E-04 3.0823E-04 - 7.0795E+01 1.2745E-03 1.0236E-03 2.6783E-04 2.0507E-04 - 7.9433E+01 9.0184E-04 7.2379E-04 1.7832E-04 1.3798E-04 - 8.9125E+01 6.4210E-04 5.0698E-04 1.2004E-04 9.2556E-05 - 1.0000E+02 4.5539E-04 3.5710E-04 7.8458E-05 6.1664E-05 - 1.1220E+02 3.2347E-04 2.5132E-04 5.2043E-05 4.0710E-05 - 1.2589E+02 2.2974E-04 1.7591E-04 3.4689E-05 2.7020E-05 - 1.4125E+02 1.6274E-04 1.2344E-04 2.2901E-05 1.8109E-05 - 1.5849E+02 1.1514E-04 8.6852E-05 1.5054E-05 1.1853E-05 - 1.7783E+02 8.1088E-05 6.0749E-05 9.8844E-06 7.7353E-06 - 1.9953E+02 5.7154E-05 4.2596E-05 6.5151E-06 5.0878E-06 - 2.2387E+02 4.0279E-05 2.9738E-05 4.3945E-06 3.3966E-06 - 2.5119E+02 2.8383E-05 2.0667E-05 2.9111E-06 2.2503E-06 - 2.8184E+02 1.9896E-05 1.4472E-05 1.8964E-06 1.5022E-06 - 3.1623E+02 1.4039E-05 1.0059E-05 1.2604E-06 1.0166E-06 - 3.5481E+02 9.8630E-06 6.9867E-06 8.2796E-07 6.7710E-07 - 3.9811E+02 6.9248E-06 4.8677E-06 5.5276E-07 4.4729E-07 - 4.4668E+02 4.8434E-06 3.3882E-06 3.6606E-07 2.9604E-07 - 5.0119E+02 3.3852E-06 2.3551E-06 2.3933E-07 1.9978E-07 - 5.6234E+02 2.3714E-06 1.6295E-06 1.6107E-07 1.3006E-07 - 6.3096E+02 1.6527E-06 1.1284E-06 1.1029E-07 8.5887E-08 - 7.0795E+02 1.1568E-06 7.8097E-07 7.2346E-08 5.6954E-08 - 7.9433E+02 8.1242E-07 5.3950E-07 4.7596E-08 3.7955E-08 - 8.9125E+02 5.6863E-07 3.7361E-07 3.1436E-08 2.5613E-08 - 1.0000E+03 3.9433E-07 2.5817E-07 2.1170E-08 1.6954E-08 - 1.1220E+03 2.7262E-07 1.7826E-07 1.4428E-08 1.1476E-08 - 1.2589E+03 1.8975E-07 1.2267E-07 9.5551E-09 7.5428E-09 - 1.4125E+03 1.3224E-07 8.4221E-08 6.4204E-09 4.8322E-09 - 1.5849E+03 9.0880E-08 5.7947E-08 4.3691E-09 3.3260E-09 - 1.7783E+03 6.2536E-08 3.9869E-08 2.9220E-09 2.2430E-09 - 1.9953E+03 4.3946E-08 2.7183E-08 1.9027E-09 1.4700E-09 - 2.2387E+03 3.0221E-08 1.8672E-08 1.3019E-09 9.9616E-10 - 2.5119E+03 2.0824E-08 1.2747E-08 8.7975E-10 6.5466E-10 - 2.8184E+03 1.4315E-08 8.6903E-09 5.7772E-10 4.3242E-10 - 3.1623E+03 9.9021E-09 5.9779E-09 3.8995E-10 2.9269E-10 - 3.5481E+03 6.6984E-09 4.0085E-09 2.5134E-10 1.9685E-10 - 3.9811E+03 4.5918E-09 2.7172E-09 1.6624E-10 1.2937E-10 - 4.4668E+03 3.1465E-09 1.8317E-09 1.1020E-10 8.4198E-11 - 5.0119E+03 2.1457E-09 1.2383E-09 7.2329E-11 5.5600E-11 - 5.6234E+03 1.4331E-09 8.3068E-10 4.9201E-11 3.6923E-11 - 6.3096E+03 9.7261E-10 5.6060E-10 3.1905E-11 2.4412E-11 - 7.0795E+03 6.5693E-10 3.7718E-10 2.1319E-11 1.5897E-11 - 7.9433E+03 4.4263E-10 2.5239E-10 1.4298E-11 1.0152E-11 - 8.9125E+03 2.9756E-10 1.6805E-10 9.1273E-12 6.9823E-12 - 1.0000E+04 2.0000E-10 1.1221E-10 6.2323E-12 4.3955E-12 -average flux in [cosZ =-0.20 -- -0.10, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2284E+04 3.3263E+04 1.6781E+04 1.4051E+04 - 1.1220E-01 2.6904E+04 2.7700E+04 1.4299E+04 1.1837E+04 - 1.2589E-01 2.2335E+04 2.3063E+04 1.2015E+04 9.8088E+03 - 1.4125E-01 1.8445E+04 1.9048E+04 9.9681E+03 8.0696E+03 - 1.5849E-01 1.5064E+04 1.5560E+04 8.2297E+03 6.5693E+03 - 1.7783E-01 1.2089E+04 1.2642E+04 6.7217E+03 5.2658E+03 - 1.9953E-01 9.6385E+03 1.0064E+04 5.4474E+03 4.2375E+03 - 2.2387E-01 7.6234E+03 7.9348E+03 4.3885E+03 3.3875E+03 - 2.5119E-01 5.9466E+03 6.1797E+03 3.4985E+03 2.6531E+03 - 2.8184E-01 4.5849E+03 4.7835E+03 2.7630E+03 2.0513E+03 - 3.1623E-01 3.4926E+03 3.7060E+03 2.1533E+03 1.5816E+03 - 3.5481E-01 2.6770E+03 2.8221E+03 1.6756E+03 1.2103E+03 - 3.9811E-01 2.0380E+03 2.1351E+03 1.2809E+03 9.2263E+02 - 4.4668E-01 1.5163E+03 1.6060E+03 9.6902E+02 7.0370E+02 - 5.0119E-01 1.1295E+03 1.2048E+03 7.4252E+02 5.2807E+02 - 5.6234E-01 8.4249E+02 9.0830E+02 5.6815E+02 3.9284E+02 - 6.3096E-01 6.2850E+02 6.8400E+02 4.2200E+02 2.9180E+02 - 7.0795E-01 4.7374E+02 5.0751E+02 3.1196E+02 2.1883E+02 - 7.9433E-01 3.5069E+02 3.7144E+02 2.3490E+02 1.6249E+02 - 8.9125E-01 2.6152E+02 2.7252E+02 1.7711E+02 1.2087E+02 - 1.0000E+00 1.9516E+02 2.0488E+02 1.3010E+02 8.8751E+01 - 1.1220E+00 1.4531E+02 1.5317E+02 9.6074E+01 6.5233E+01 - 1.2589E+00 1.0834E+02 1.1425E+02 7.1443E+01 4.8532E+01 - 1.4125E+00 8.1335E+01 8.4208E+01 5.3011E+01 3.6199E+01 - 1.5849E+00 6.0352E+01 6.1615E+01 3.8644E+01 2.6602E+01 - 1.7783E+00 4.3961E+01 4.5726E+01 2.8609E+01 1.9651E+01 - 1.9953E+00 3.2965E+01 3.3591E+01 2.1276E+01 1.4517E+01 - 2.2387E+00 2.4611E+01 2.4882E+01 1.5228E+01 1.0649E+01 - 2.5119E+00 1.7936E+01 1.8247E+01 1.1080E+01 7.9557E+00 - 2.8184E+00 1.3375E+01 1.3385E+01 8.2156E+00 5.7428E+00 - 3.1623E+00 9.7830E+00 9.8464E+00 5.9284E+00 4.1114E+00 - 3.5481E+00 7.0893E+00 7.0765E+00 4.2724E+00 2.9688E+00 - 3.9811E+00 5.1381E+00 5.0917E+00 3.0347E+00 2.1661E+00 - 4.4668E+00 3.7787E+00 3.6703E+00 2.1822E+00 1.5778E+00 - 5.0119E+00 2.7444E+00 2.6443E+00 1.5890E+00 1.1268E+00 - 5.6234E+00 1.9714E+00 1.9294E+00 1.1007E+00 7.8344E-01 - 6.3096E+00 1.4433E+00 1.3789E+00 7.5908E-01 5.6453E-01 - 7.0795E+00 1.0447E+00 9.6775E-01 5.4747E-01 4.0203E-01 - 7.9433E+00 7.5052E-01 7.0186E-01 3.9406E-01 2.7338E-01 - 8.9125E+00 5.4767E-01 5.1231E-01 2.7935E-01 1.8456E-01 - 1.0000E+01 3.8953E-01 3.6070E-01 1.8809E-01 1.3530E-01 - 1.1220E+01 2.8018E-01 2.5516E-01 1.3228E-01 9.3826E-02 - 1.2589E+01 2.0044E-01 1.8106E-01 9.1371E-02 6.6171E-02 - 1.4125E+01 1.4265E-01 1.2927E-01 6.2398E-02 4.6906E-02 - 1.5849E+01 1.0195E-01 9.2164E-02 4.2432E-02 3.2082E-02 - 1.7783E+01 7.3454E-02 6.6504E-02 2.9686E-02 2.1761E-02 - 1.9953E+01 5.2629E-02 4.7201E-02 2.0393E-02 1.5618E-02 - 2.2387E+01 3.8142E-02 3.2424E-02 1.4215E-02 1.1001E-02 - 2.5119E+01 2.7443E-02 2.2813E-02 9.4519E-03 7.1691E-03 - 2.8184E+01 1.9457E-02 1.6368E-02 6.1755E-03 4.7709E-03 - 3.1623E+01 1.3606E-02 1.1594E-02 4.3339E-03 3.2910E-03 - 3.5481E+01 9.7221E-03 8.2370E-03 2.9259E-03 2.2231E-03 - 3.9811E+01 6.9477E-03 5.8263E-03 1.9686E-03 1.5111E-03 - 4.4668E+01 4.9391E-03 4.1180E-03 1.3292E-03 1.0258E-03 - 5.0119E+01 3.5113E-03 2.9136E-03 9.0025E-04 6.9080E-04 - 5.6234E+01 2.5201E-03 2.0574E-03 6.0027E-04 4.6451E-04 - 6.3096E+01 1.8045E-03 1.4498E-03 3.9859E-04 3.1117E-04 - 7.0795E+01 1.2801E-03 1.0258E-03 2.6651E-04 2.0777E-04 - 7.9433E+01 9.1233E-04 7.2695E-04 1.7814E-04 1.3962E-04 - 8.9125E+01 6.4826E-04 5.1343E-04 1.1887E-04 9.3294E-05 - 1.0000E+02 4.5738E-04 3.5731E-04 7.8284E-05 6.1620E-05 - 1.1220E+02 3.2450E-04 2.5107E-04 5.2072E-05 4.0850E-05 - 1.2589E+02 2.3002E-04 1.7609E-04 3.4547E-05 2.7066E-05 - 1.4125E+02 1.6272E-04 1.2357E-04 2.2963E-05 1.7885E-05 - 1.5849E+02 1.1486E-04 8.6500E-05 1.5197E-05 1.1930E-05 - 1.7783E+02 8.1145E-05 6.0811E-05 9.9663E-06 7.8896E-06 - 1.9953E+02 5.7161E-05 4.2419E-05 6.5237E-06 5.1784E-06 - 2.2387E+02 4.0393E-05 2.9462E-05 4.3897E-06 3.4144E-06 - 2.5119E+02 2.8453E-05 2.0530E-05 2.8749E-06 2.2773E-06 - 2.8184E+02 1.9905E-05 1.4318E-05 1.8940E-06 1.5402E-06 - 3.1623E+02 1.4055E-05 1.0070E-05 1.2668E-06 1.0178E-06 - 3.5481E+02 9.8321E-06 7.0180E-06 8.2519E-07 6.7166E-07 - 3.9811E+02 6.9061E-06 4.8911E-06 5.4894E-07 4.4340E-07 - 4.4668E+02 4.8536E-06 3.4110E-06 3.6704E-07 2.9643E-07 - 5.0119E+02 3.3962E-06 2.3638E-06 2.4332E-07 1.9749E-07 - 5.6234E+02 2.3763E-06 1.6347E-06 1.6034E-07 1.3097E-07 - 6.3096E+02 1.6616E-06 1.1314E-06 1.0755E-07 8.6122E-08 - 7.0795E+02 1.1584E-06 7.8295E-07 7.2281E-08 5.7117E-08 - 7.9433E+02 8.0993E-07 5.4293E-07 4.7592E-08 3.8644E-08 - 8.9125E+02 5.6679E-07 3.7599E-07 3.1451E-08 2.6130E-08 - 1.0000E+03 3.9203E-07 2.5835E-07 2.0949E-08 1.7367E-08 - 1.1220E+03 2.7246E-07 1.7819E-07 1.4052E-08 1.1582E-08 - 1.2589E+03 1.8954E-07 1.2296E-07 9.3193E-09 7.5977E-09 - 1.4125E+03 1.3161E-07 8.4653E-08 6.2055E-09 4.9319E-09 - 1.5849E+03 9.1534E-08 5.8562E-08 4.1729E-09 3.3071E-09 - 1.7783E+03 6.3311E-08 4.0051E-08 2.7827E-09 2.2114E-09 - 1.9953E+03 4.4078E-08 2.7369E-08 1.9244E-09 1.4688E-09 - 2.2387E+03 3.0250E-08 1.8755E-08 1.2765E-09 9.8801E-10 - 2.5119E+03 2.0732E-08 1.2707E-08 8.3194E-10 6.6932E-10 - 2.8184E+03 1.4299E-08 8.6767E-09 5.4832E-10 4.3654E-10 - 3.1623E+03 9.9206E-09 5.9881E-09 3.8831E-10 2.8256E-10 - 3.5481E+03 6.7132E-09 4.0295E-09 2.5601E-10 1.9318E-10 - 3.9811E+03 4.5947E-09 2.7258E-09 1.7260E-10 1.3017E-10 - 4.4668E+03 3.1209E-09 1.8418E-09 1.1473E-10 8.5756E-11 - 5.0119E+03 2.1205E-09 1.2422E-09 7.7248E-11 5.6563E-11 - 5.6234E+03 1.4412E-09 8.4004E-10 4.8942E-11 3.6017E-11 - 6.3096E+03 9.8478E-10 5.5916E-10 3.2716E-11 2.3778E-11 - 7.0795E+03 6.6206E-10 3.7710E-10 2.2252E-11 1.5888E-11 - 7.9433E+03 4.4410E-10 2.5201E-10 1.4562E-11 1.0365E-11 - 8.9125E+03 2.9885E-10 1.6811E-10 9.5332E-12 6.5588E-12 - 1.0000E+04 2.0009E-10 1.1257E-10 6.0305E-12 4.3424E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2984E+04 2.3513E+04 1.1779E+04 1.0147E+04 - 1.1220E-01 1.9455E+04 1.9902E+04 1.0173E+04 8.6436E+03 - 1.2589E-01 1.6324E+04 1.6762E+04 8.6472E+03 7.2497E+03 - 1.4125E-01 1.3604E+04 1.3950E+04 7.2735E+03 6.0477E+03 - 1.5849E-01 1.1297E+04 1.1534E+04 6.0497E+03 4.9712E+03 - 1.7783E-01 9.2547E+03 9.4360E+03 4.9948E+03 4.0375E+03 - 1.9953E-01 7.4488E+03 7.6503E+03 4.0929E+03 3.2716E+03 - 2.2387E-01 5.9901E+03 6.1576E+03 3.3248E+03 2.6338E+03 - 2.5119E-01 4.7541E+03 4.8803E+03 2.6749E+03 2.1104E+03 - 2.8184E-01 3.7081E+03 3.8262E+03 2.1402E+03 1.6669E+03 - 3.1623E-01 2.8813E+03 2.9716E+03 1.6920E+03 1.3104E+03 - 3.5481E-01 2.2366E+03 2.3045E+03 1.3194E+03 1.0180E+03 - 3.9811E-01 1.7288E+03 1.7739E+03 1.0294E+03 7.8344E+02 - 4.4668E-01 1.3167E+03 1.3543E+03 7.8932E+02 6.0429E+02 - 5.0119E-01 9.9814E+02 1.0306E+03 6.0414E+02 4.5895E+02 - 5.6234E-01 7.5553E+02 7.8013E+02 4.6297E+02 3.4990E+02 - 6.3096E-01 5.7554E+02 5.9027E+02 3.5362E+02 2.6518E+02 - 7.0795E-01 4.3454E+02 4.4455E+02 2.6866E+02 1.9707E+02 - 7.9433E-01 3.2477E+02 3.3186E+02 2.0026E+02 1.4705E+02 - 8.9125E-01 2.4329E+02 2.4779E+02 1.5137E+02 1.1212E+02 - 1.0000E+00 1.8276E+02 1.8570E+02 1.1200E+02 8.4168E+01 - 1.1220E+00 1.3836E+02 1.3859E+02 8.4096E+01 6.2784E+01 - 1.2589E+00 1.0469E+02 1.0400E+02 6.2280E+01 4.6597E+01 - 1.4125E+00 7.7603E+01 7.7661E+01 4.6231E+01 3.4361E+01 - 1.5849E+00 5.7229E+01 5.6978E+01 3.4215E+01 2.5207E+01 - 1.7783E+00 4.2475E+01 4.1918E+01 2.5103E+01 1.8536E+01 - 1.9953E+00 3.1820E+01 3.1002E+01 1.8372E+01 1.3658E+01 - 2.2387E+00 2.3652E+01 2.2571E+01 1.3294E+01 1.0053E+01 - 2.5119E+00 1.7392E+01 1.6596E+01 9.6616E+00 7.2944E+00 - 2.8184E+00 1.2838E+01 1.2030E+01 7.0457E+00 5.1648E+00 - 3.1623E+00 9.3046E+00 8.7643E+00 5.0182E+00 3.7366E+00 - 3.5481E+00 6.7562E+00 6.3486E+00 3.5907E+00 2.6810E+00 - 3.9811E+00 4.9031E+00 4.5544E+00 2.5800E+00 1.8913E+00 - 4.4668E+00 3.5378E+00 3.2561E+00 1.8250E+00 1.3286E+00 - 5.0119E+00 2.5485E+00 2.3408E+00 1.2781E+00 9.4998E-01 - 5.6234E+00 1.8374E+00 1.6859E+00 8.7757E-01 6.5733E-01 - 6.3096E+00 1.3344E+00 1.2009E+00 6.1549E-01 4.4896E-01 - 7.0795E+00 9.5849E-01 8.6498E-01 4.3226E-01 3.1940E-01 - 7.9433E+00 6.7938E-01 6.2599E-01 2.9827E-01 2.2472E-01 - 8.9125E+00 4.8687E-01 4.4059E-01 2.0511E-01 1.5087E-01 - 1.0000E+01 3.5610E-01 3.0986E-01 1.4116E-01 1.0734E-01 - 1.1220E+01 2.5428E-01 2.2068E-01 9.8519E-02 7.3190E-02 - 1.2589E+01 1.8199E-01 1.5694E-01 6.6807E-02 4.9411E-02 - 1.4125E+01 1.3029E-01 1.0995E-01 4.5538E-02 3.4094E-02 - 1.5849E+01 9.2481E-02 7.8672E-02 3.1021E-02 2.3128E-02 - 1.7783E+01 6.5686E-02 5.5412E-02 2.1292E-02 1.5414E-02 - 1.9953E+01 4.6621E-02 3.8853E-02 1.4807E-02 1.0835E-02 - 2.2387E+01 3.3497E-02 2.8124E-02 9.5976E-03 7.2784E-03 - 2.5119E+01 2.4167E-02 2.0058E-02 6.2991E-03 4.7352E-03 - 2.8184E+01 1.7000E-02 1.4248E-02 4.3495E-03 3.3532E-03 - 3.1623E+01 1.2089E-02 9.8294E-03 2.8961E-03 2.2208E-03 - 3.5481E+01 8.6280E-03 6.9549E-03 1.9425E-03 1.4867E-03 - 3.9811E+01 6.1478E-03 4.9154E-03 1.3044E-03 9.9694E-04 - 4.4668E+01 4.3841E-03 3.4718E-03 8.7048E-04 6.6957E-04 - 5.0119E+01 3.1174E-03 2.4596E-03 5.8236E-04 4.4726E-04 - 5.6234E+01 2.2209E-03 1.7368E-03 3.8767E-04 2.9986E-04 - 6.3096E+01 1.5841E-03 1.2214E-03 2.5828E-04 2.0035E-04 - 7.0795E+01 1.1267E-03 8.6069E-04 1.6925E-04 1.3287E-04 - 7.9433E+01 7.9774E-04 6.0692E-04 1.1221E-04 9.0582E-05 - 8.9125E+01 5.6304E-04 4.2627E-04 7.4956E-05 5.9696E-05 - 1.0000E+02 4.0072E-04 2.9943E-04 4.9374E-05 3.9113E-05 - 1.1220E+02 2.8348E-04 2.1128E-04 3.2759E-05 2.6294E-05 - 1.2589E+02 1.9988E-04 1.4840E-04 2.1518E-05 1.7439E-05 - 1.4125E+02 1.4127E-04 1.0359E-04 1.4270E-05 1.1306E-05 - 1.5849E+02 9.9876E-05 7.2714E-05 9.5705E-06 7.4648E-06 - 1.7783E+02 7.0095E-05 5.0876E-05 6.3475E-06 5.0457E-06 - 1.9953E+02 4.9236E-05 3.5350E-05 4.1777E-06 3.3130E-06 - 2.2387E+02 3.4694E-05 2.4486E-05 2.7294E-06 2.1956E-06 - 2.5119E+02 2.4311E-05 1.7048E-05 1.8562E-06 1.4869E-06 - 2.8184E+02 1.7054E-05 1.1838E-05 1.2617E-06 1.0212E-06 - 3.1623E+02 1.1959E-05 8.3055E-06 8.3779E-07 6.7238E-07 - 3.5481E+02 8.3468E-06 5.7673E-06 5.5297E-07 4.5037E-07 - 3.9811E+02 5.8453E-06 4.0173E-06 3.6984E-07 3.0240E-07 - 4.4668E+02 4.0944E-06 2.7810E-06 2.4714E-07 2.0212E-07 - 5.0119E+02 2.8619E-06 1.9269E-06 1.6627E-07 1.3384E-07 - 5.6234E+02 2.0052E-06 1.3376E-06 1.1197E-07 8.9275E-08 - 6.3096E+02 1.4002E-06 9.2346E-07 7.5012E-08 5.9410E-08 - 7.0795E+02 9.7359E-07 6.4050E-07 5.0169E-08 3.9803E-08 - 7.9433E+02 6.7626E-07 4.4200E-07 3.3089E-08 2.7324E-08 - 8.9125E+02 4.7383E-07 3.0411E-07 2.2415E-08 1.8483E-08 - 1.0000E+03 3.2910E-07 2.0961E-07 1.5293E-08 1.1974E-08 - 1.1220E+03 2.2596E-07 1.4406E-07 1.0189E-08 7.9428E-09 - 1.2589E+03 1.5691E-07 9.8903E-08 6.8372E-09 5.3073E-09 - 1.4125E+03 1.0865E-07 6.7853E-08 4.6571E-09 3.4781E-09 - 1.5849E+03 7.4705E-08 4.6305E-08 3.1446E-09 2.3293E-09 - 1.7783E+03 5.1785E-08 3.1568E-08 2.1012E-09 1.5254E-09 - 1.9953E+03 3.5591E-08 2.1668E-08 1.4045E-09 1.0417E-09 - 2.2387E+03 2.4356E-08 1.4829E-08 9.4926E-10 7.1337E-10 - 2.5119E+03 1.6776E-08 1.0158E-08 6.0771E-10 4.6471E-10 - 2.8184E+03 1.1393E-08 6.8581E-09 3.9405E-10 3.1197E-10 - 3.1623E+03 7.8367E-09 4.6606E-09 2.7844E-10 2.0535E-10 - 3.5481E+03 5.2274E-09 3.1013E-09 1.8389E-10 1.3601E-10 - 3.9811E+03 3.5398E-09 2.0976E-09 1.2374E-10 9.2356E-11 - 4.4668E+03 2.3871E-09 1.4070E-09 8.0474E-11 6.1426E-11 - 5.0119E+03 1.6220E-09 9.3542E-10 5.1864E-11 4.0087E-11 - 5.6234E+03 1.0997E-09 6.3120E-10 3.3384E-11 2.6092E-11 - 6.3096E+03 7.3316E-10 4.1882E-10 2.4080E-11 1.7600E-11 - 7.0795E+03 4.9069E-10 2.7727E-10 1.5976E-11 1.1558E-11 - 7.9433E+03 3.2684E-10 1.8442E-10 1.0927E-11 7.3413E-12 - 8.9125E+03 2.1767E-10 1.2287E-10 7.1764E-12 4.6984E-12 - 1.0000E+04 1.4654E-10 8.1888E-11 4.4772E-12 3.2342E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2848E+04 2.3157E+04 1.1491E+04 1.0138E+04 - 1.1220E-01 1.9278E+04 1.9523E+04 9.8616E+03 8.6431E+03 - 1.2589E-01 1.6274E+04 1.6336E+04 8.3585E+03 7.2793E+03 - 1.4125E-01 1.3599E+04 1.3625E+04 7.0072E+03 6.0512E+03 - 1.5849E-01 1.1222E+04 1.1225E+04 5.8714E+03 4.9956E+03 - 1.7783E-01 9.1837E+03 9.1987E+03 4.8424E+03 4.1134E+03 - 1.9953E-01 7.4237E+03 7.4435E+03 3.9420E+03 3.3397E+03 - 2.2387E-01 5.9636E+03 5.9399E+03 3.2114E+03 2.6758E+03 - 2.5119E-01 4.7032E+03 4.7085E+03 2.5798E+03 2.1276E+03 - 2.8184E-01 3.6691E+03 3.7092E+03 2.0521E+03 1.6725E+03 - 3.1623E-01 2.8668E+03 2.8959E+03 1.6248E+03 1.3167E+03 - 3.5481E-01 2.2164E+03 2.2228E+03 1.2663E+03 1.0332E+03 - 3.9811E-01 1.7000E+03 1.6988E+03 9.7713E+02 7.9734E+02 - 4.4668E-01 1.3049E+03 1.3011E+03 7.5715E+02 6.0729E+02 - 5.0119E-01 9.9633E+02 9.9011E+02 5.8359E+02 4.6297E+02 - 5.6234E-01 7.5334E+02 7.5331E+02 4.4386E+02 3.5465E+02 - 6.3096E-01 5.7040E+02 5.7227E+02 3.3480E+02 2.6570E+02 - 7.0795E-01 4.3300E+02 4.2948E+02 2.5207E+02 1.9838E+02 - 7.9433E-01 3.2860E+02 3.2229E+02 1.9171E+02 1.5023E+02 - 8.9125E-01 2.4758E+02 2.4414E+02 1.4341E+02 1.1299E+02 - 1.0000E+00 1.8389E+02 1.8150E+02 1.0733E+02 8.4678E+01 - 1.1220E+00 1.3858E+02 1.3587E+02 8.0863E+01 6.3476E+01 - 1.2589E+00 1.0365E+02 1.0109E+02 6.1120E+01 4.8017E+01 - 1.4125E+00 7.7851E+01 7.4897E+01 4.4596E+01 3.5728E+01 - 1.5849E+00 5.8347E+01 5.5356E+01 3.2656E+01 2.6241E+01 - 1.7783E+00 4.3319E+01 4.1368E+01 2.4550E+01 1.9065E+01 - 1.9953E+00 3.2080E+01 3.0508E+01 1.7700E+01 1.3670E+01 - 2.2387E+00 2.3598E+01 2.2451E+01 1.2962E+01 1.0019E+01 - 2.5119E+00 1.7302E+01 1.6554E+01 9.5239E+00 7.3400E+00 - 2.8184E+00 1.2671E+01 1.1899E+01 6.7222E+00 5.2880E+00 - 3.1623E+00 9.2870E+00 8.6829E+00 4.9045E+00 3.7714E+00 - 3.5481E+00 6.7642E+00 6.2535E+00 3.5251E+00 2.6715E+00 - 3.9811E+00 4.8979E+00 4.4944E+00 2.4782E+00 1.8956E+00 - 4.4668E+00 3.5385E+00 3.2561E+00 1.7697E+00 1.3365E+00 - 5.0119E+00 2.5767E+00 2.3537E+00 1.2475E+00 9.5225E-01 - 5.6234E+00 1.8512E+00 1.6918E+00 8.6723E-01 6.6071E-01 - 6.3096E+00 1.3224E+00 1.1958E+00 6.0972E-01 4.7011E-01 - 7.0795E+00 9.4549E-01 8.4594E-01 4.3480E-01 3.2536E-01 - 7.9433E+00 6.7913E-01 6.0578E-01 3.0095E-01 2.1960E-01 - 8.9125E+00 4.9140E-01 4.3176E-01 1.9923E-01 1.5290E-01 - 1.0000E+01 3.5357E-01 3.0759E-01 1.4295E-01 1.0670E-01 - 1.1220E+01 2.5382E-01 2.1917E-01 9.6813E-02 7.3137E-02 - 1.2589E+01 1.8120E-01 1.5556E-01 6.6120E-02 4.9303E-02 - 1.4125E+01 1.2858E-01 1.1134E-01 4.6220E-02 3.3732E-02 - 1.5849E+01 9.1164E-02 7.9000E-02 3.1297E-02 2.2990E-02 - 1.7783E+01 6.4429E-02 5.5246E-02 2.0806E-02 1.6011E-02 - 1.9953E+01 4.6127E-02 3.9272E-02 1.4235E-02 1.0700E-02 - 2.2387E+01 3.3490E-02 2.8173E-02 9.8740E-03 7.0629E-03 - 2.5119E+01 2.4293E-02 2.0076E-02 6.2668E-03 4.7743E-03 - 2.8184E+01 1.7104E-02 1.4144E-02 4.1349E-03 3.3821E-03 - 3.1623E+01 1.2154E-02 9.8779E-03 2.9039E-03 2.2199E-03 - 3.5481E+01 8.6629E-03 6.9824E-03 1.9435E-03 1.4938E-03 - 3.9811E+01 6.1704E-03 4.9199E-03 1.2956E-03 9.9380E-04 - 4.4668E+01 4.3998E-03 3.4803E-03 8.6070E-04 6.7141E-04 - 5.0119E+01 3.1287E-03 2.4568E-03 5.7398E-04 4.4752E-04 - 5.6234E+01 2.2249E-03 1.7354E-03 3.8416E-04 2.9783E-04 - 6.3096E+01 1.5822E-03 1.2266E-03 2.5398E-04 2.0094E-04 - 7.0795E+01 1.1269E-03 8.6642E-04 1.6979E-04 1.3227E-04 - 7.9433E+01 8.0143E-04 6.1326E-04 1.1403E-04 8.7009E-05 - 8.9125E+01 5.6817E-04 4.3082E-04 7.4802E-05 5.8641E-05 - 1.0000E+02 4.0111E-04 3.0070E-04 4.9660E-05 3.9338E-05 - 1.1220E+02 2.8317E-04 2.1144E-04 3.2808E-05 2.6179E-05 - 1.2589E+02 2.0044E-04 1.4874E-04 2.1639E-05 1.7281E-05 - 1.4125E+02 1.4153E-04 1.0408E-04 1.4328E-05 1.1466E-05 - 1.5849E+02 9.9448E-05 7.2660E-05 9.4827E-06 7.7073E-06 - 1.7783E+02 7.0052E-05 5.0519E-05 6.2648E-06 5.0605E-06 - 1.9953E+02 4.9326E-05 3.5234E-05 4.1796E-06 3.3670E-06 - 2.2387E+02 3.4715E-05 2.4629E-05 2.7605E-06 2.2358E-06 - 2.5119E+02 2.4434E-05 1.7115E-05 1.8383E-06 1.5077E-06 - 2.8184E+02 1.7084E-05 1.1977E-05 1.2501E-06 1.0097E-06 - 3.1623E+02 1.1937E-05 8.3028E-06 8.2595E-07 6.6570E-07 - 3.5481E+02 8.3788E-06 5.7740E-06 5.4781E-07 4.4299E-07 - 3.9811E+02 5.8807E-06 4.0019E-06 3.6762E-07 2.9614E-07 - 4.4668E+02 4.1051E-06 2.7623E-06 2.4501E-07 2.0027E-07 - 5.0119E+02 2.8614E-06 1.9228E-06 1.6296E-07 1.3487E-07 - 5.6234E+02 2.0013E-06 1.3343E-06 1.1208E-07 9.0698E-08 - 6.3096E+02 1.3961E-06 9.2011E-07 7.6240E-08 5.9827E-08 - 7.0795E+02 9.7348E-07 6.3670E-07 5.1055E-08 3.9746E-08 - 7.9433E+02 6.7946E-07 4.4074E-07 3.4324E-08 2.7121E-08 - 8.9125E+02 4.7283E-07 3.0325E-07 2.3033E-08 1.8079E-08 - 1.0000E+03 3.2933E-07 2.1016E-07 1.5403E-08 1.1803E-08 - 1.1220E+03 2.2688E-07 1.4406E-07 1.0239E-08 7.9890E-09 - 1.2589E+03 1.5634E-07 9.8622E-08 6.7062E-09 5.3450E-09 - 1.4125E+03 1.0875E-07 6.7743E-08 4.6281E-09 3.6113E-09 - 1.5849E+03 7.5082E-08 4.6123E-08 3.1871E-09 2.4266E-09 - 1.7783E+03 5.2032E-08 3.1543E-08 2.0865E-09 1.6086E-09 - 1.9953E+03 3.5566E-08 2.1733E-08 1.3962E-09 1.0523E-09 - 2.2387E+03 2.4249E-08 1.4813E-08 9.1202E-10 6.9835E-10 - 2.5119E+03 1.6662E-08 1.0073E-08 6.2624E-10 4.4697E-10 - 2.8184E+03 1.1401E-08 6.7716E-09 4.2992E-10 3.0435E-10 - 3.1623E+03 7.8638E-09 4.6498E-09 2.8286E-10 2.1304E-10 - 3.5481E+03 5.2279E-09 3.0891E-09 1.8320E-10 1.3880E-10 - 3.9811E+03 3.5533E-09 2.0860E-09 1.2333E-10 9.0688E-11 - 4.4668E+03 2.4122E-09 1.4115E-09 7.9430E-11 5.7489E-11 - 5.0119E+03 1.6175E-09 9.4324E-10 5.1782E-11 3.7435E-11 - 5.6234E+03 1.0961E-09 6.2194E-10 3.6454E-11 2.5936E-11 - 6.3096E+03 7.3590E-10 4.2172E-10 2.3466E-11 1.6494E-11 - 7.0795E+03 4.9116E-10 2.8220E-10 1.4755E-11 1.1179E-11 - 7.9433E+03 3.3012E-10 1.8660E-10 9.4940E-12 7.3024E-12 - 8.9125E+03 2.2350E-10 1.2275E-10 6.4710E-12 4.6944E-12 - 1.0000E+04 1.4979E-10 8.0535E-11 4.5862E-12 3.1760E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2551E+04 2.2496E+04 1.1051E+04 1.0174E+04 - 1.1220E-01 1.9042E+04 1.8995E+04 9.4172E+03 8.6983E+03 - 1.2589E-01 1.5956E+04 1.5876E+04 8.0109E+03 7.3207E+03 - 1.4125E-01 1.3363E+04 1.3219E+04 6.7098E+03 6.0616E+03 - 1.5849E-01 1.1096E+04 1.0908E+04 5.5438E+03 4.9960E+03 - 1.7783E-01 9.0559E+03 8.9050E+03 4.5671E+03 4.0828E+03 - 1.9953E-01 7.3082E+03 7.1966E+03 3.7201E+03 3.3298E+03 - 2.2387E-01 5.8595E+03 5.7099E+03 3.0256E+03 2.6874E+03 - 2.5119E-01 4.6260E+03 4.4947E+03 2.4414E+03 2.1376E+03 - 2.8184E-01 3.6228E+03 3.5267E+03 1.9287E+03 1.6832E+03 - 3.1623E-01 2.8275E+03 2.7571E+03 1.5282E+03 1.3222E+03 - 3.5481E-01 2.1939E+03 2.1258E+03 1.2023E+03 1.0243E+03 - 3.9811E-01 1.6964E+03 1.6289E+03 9.3236E+02 7.9062E+02 - 4.4668E-01 1.3020E+03 1.2503E+03 7.1513E+02 6.1521E+02 - 5.0119E-01 9.9492E+02 9.5267E+02 5.4599E+02 4.7377E+02 - 5.6234E-01 7.5613E+02 7.2235E+02 4.1689E+02 3.5812E+02 - 6.3096E-01 5.7662E+02 5.4732E+02 3.1622E+02 2.7272E+02 - 7.0795E-01 4.3579E+02 4.0827E+02 2.3965E+02 2.0842E+02 - 7.9433E-01 3.2623E+02 3.0470E+02 1.8138E+02 1.5694E+02 - 8.9125E-01 2.4588E+02 2.3012E+02 1.3397E+02 1.1672E+02 - 1.0000E+00 1.8401E+02 1.7306E+02 1.0117E+02 8.5632E+01 - 1.1220E+00 1.3738E+02 1.2956E+02 7.6439E+01 6.3676E+01 - 1.2589E+00 1.0385E+02 9.8043E+01 5.7617E+01 4.7435E+01 - 1.4125E+00 7.8248E+01 7.3546E+01 4.2965E+01 3.5082E+01 - 1.5849E+00 5.8255E+01 5.4514E+01 3.1683E+01 2.6066E+01 - 1.7783E+00 4.3302E+01 4.0165E+01 2.3561E+01 1.9193E+01 - 1.9953E+00 3.1879E+01 2.9567E+01 1.7337E+01 1.3947E+01 - 2.2387E+00 2.3359E+01 2.1641E+01 1.2465E+01 9.9243E+00 - 2.5119E+00 1.7252E+01 1.6013E+01 8.9935E+00 7.2031E+00 - 2.8184E+00 1.2751E+01 1.1679E+01 6.5022E+00 5.3158E+00 - 3.1623E+00 9.2371E+00 8.5466E+00 4.8765E+00 3.7501E+00 - 3.5481E+00 6.7203E+00 6.2157E+00 3.5109E+00 2.6665E+00 - 3.9811E+00 4.8481E+00 4.5082E+00 2.4874E+00 1.8866E+00 - 4.4668E+00 3.5205E+00 3.2317E+00 1.7500E+00 1.3453E+00 - 5.0119E+00 2.5586E+00 2.3251E+00 1.2286E+00 9.6046E-01 - 5.6234E+00 1.8543E+00 1.6782E+00 8.5908E-01 6.6608E-01 - 6.3096E+00 1.3290E+00 1.2059E+00 6.1333E-01 4.6918E-01 - 7.0795E+00 9.5254E-01 8.4415E-01 4.3984E-01 3.2813E-01 - 7.9433E+00 6.8706E-01 6.0145E-01 3.0018E-01 2.2426E-01 - 8.9125E+00 4.9119E-01 4.4077E-01 2.0515E-01 1.5618E-01 - 1.0000E+01 3.5121E-01 3.0886E-01 1.4238E-01 1.0544E-01 - 1.1220E+01 2.5061E-01 2.1805E-01 9.7186E-02 7.2567E-02 - 1.2589E+01 1.8036E-01 1.5516E-01 6.5586E-02 4.9572E-02 - 1.4125E+01 1.2919E-01 1.0983E-01 4.5499E-02 3.3237E-02 - 1.5849E+01 9.2304E-02 7.8328E-02 3.1001E-02 2.3085E-02 - 1.7783E+01 6.5217E-02 5.5827E-02 2.0915E-02 1.6092E-02 - 1.9953E+01 4.6615E-02 3.9321E-02 1.4346E-02 1.0859E-02 - 2.2387E+01 3.3903E-02 2.7400E-02 9.5026E-03 6.9241E-03 - 2.5119E+01 2.4029E-02 1.9632E-02 6.2921E-03 4.7827E-03 - 2.8184E+01 1.6665E-02 1.4022E-02 4.4380E-03 3.2786E-03 - 3.1623E+01 1.2167E-02 9.8828E-03 2.9077E-03 2.2336E-03 - 3.5481E+01 8.6798E-03 6.9803E-03 1.9388E-03 1.5014E-03 - 3.9811E+01 6.1748E-03 4.9264E-03 1.2967E-03 1.0041E-03 - 4.4668E+01 4.3941E-03 3.4824E-03 8.7100E-04 6.7133E-04 - 5.0119E+01 3.1372E-03 2.4606E-03 5.8053E-04 4.4715E-04 - 5.6234E+01 2.2291E-03 1.7436E-03 3.8872E-04 2.9850E-04 - 6.3096E+01 1.5879E-03 1.2386E-03 2.5537E-04 1.9942E-04 - 7.0795E+01 1.1309E-03 8.6829E-04 1.6831E-04 1.3386E-04 - 7.9433E+01 7.9666E-04 6.0993E-04 1.1346E-04 8.9747E-05 - 8.9125E+01 5.6322E-04 4.3247E-04 7.5861E-05 5.8977E-05 - 1.0000E+02 4.0103E-04 3.0212E-04 4.9470E-05 3.8970E-05 - 1.1220E+02 2.8370E-04 2.1262E-04 3.2810E-05 2.6052E-05 - 1.2589E+02 2.0087E-04 1.4917E-04 2.1791E-05 1.7302E-05 - 1.4125E+02 1.4150E-04 1.0451E-04 1.4535E-05 1.1434E-05 - 1.5849E+02 9.9526E-05 7.2977E-05 9.5857E-06 7.6444E-06 - 1.7783E+02 7.0350E-05 5.0801E-05 6.3249E-06 5.1055E-06 - 1.9953E+02 4.9536E-05 3.5469E-05 4.2367E-06 3.4331E-06 - 2.2387E+02 3.4787E-05 2.4860E-05 2.7953E-06 2.2816E-06 - 2.5119E+02 2.4530E-05 1.7390E-05 1.8304E-06 1.5086E-06 - 2.8184E+02 1.7185E-05 1.2033E-05 1.2686E-06 9.8705E-07 - 3.1623E+02 1.1999E-05 8.3226E-06 8.3127E-07 6.6961E-07 - 3.5481E+02 8.4087E-06 5.7762E-06 5.5175E-07 4.4798E-07 - 3.9811E+02 5.8814E-06 4.0166E-06 3.6646E-07 2.9973E-07 - 4.4668E+02 4.1144E-06 2.7915E-06 2.4767E-07 1.9980E-07 - 5.0119E+02 2.8681E-06 1.9244E-06 1.6568E-07 1.3241E-07 - 5.6234E+02 2.0152E-06 1.3321E-06 1.1160E-07 9.0427E-08 - 6.3096E+02 1.3993E-06 9.2477E-07 7.3987E-08 6.0474E-08 - 7.0795E+02 9.7087E-07 6.3956E-07 5.0234E-08 3.9725E-08 - 7.9433E+02 6.7749E-07 4.4248E-07 3.4240E-08 2.7013E-08 - 8.9125E+02 4.7037E-07 3.0513E-07 2.2540E-08 1.8796E-08 - 1.0000E+03 3.2746E-07 2.1027E-07 1.4777E-08 1.1985E-08 - 1.1220E+03 2.2687E-07 1.4391E-07 1.0047E-08 7.8660E-09 - 1.2589E+03 1.5670E-07 9.8378E-08 6.8955E-09 5.2904E-09 - 1.4125E+03 1.0798E-07 6.7351E-08 4.5727E-09 3.6695E-09 - 1.5849E+03 7.4213E-08 4.6049E-08 3.0401E-09 2.4971E-09 - 1.7783E+03 5.1030E-08 3.1294E-08 2.0627E-09 1.6266E-09 - 1.9953E+03 3.5384E-08 2.1690E-08 1.3824E-09 1.0553E-09 - 2.2387E+03 2.4250E-08 1.4697E-08 9.0048E-10 7.2738E-10 - 2.5119E+03 1.6671E-08 9.8881E-09 6.2770E-10 4.8913E-10 - 2.8184E+03 1.1397E-08 6.7497E-09 4.2791E-10 3.2565E-10 - 3.1623E+03 7.8542E-09 4.6869E-09 2.7154E-10 2.0515E-10 - 3.5481E+03 5.2578E-09 3.1059E-09 1.8329E-10 1.3370E-10 - 3.9811E+03 3.5687E-09 2.1096E-09 1.2025E-10 8.7299E-11 - 4.4668E+03 2.4179E-09 1.4327E-09 7.9991E-11 6.0855E-11 - 5.0119E+03 1.6365E-09 9.5066E-10 5.4690E-11 4.0858E-11 - 5.6234E+03 1.1132E-09 6.2863E-10 3.5430E-11 2.5422E-11 - 6.3096E+03 7.3839E-10 4.1956E-10 2.3460E-11 1.7125E-11 - 7.0795E+03 4.9430E-10 2.8143E-10 1.5042E-11 1.1316E-11 - 7.9433E+03 3.3009E-10 1.8836E-10 1.0071E-11 7.5638E-12 - 8.9125E+03 2.1942E-10 1.2234E-10 6.4858E-12 4.8060E-12 - 1.0000E+04 1.4614E-10 8.0351E-11 4.3363E-12 3.2460E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2130E+04 2.1846E+04 1.0668E+04 1.0092E+04 - 1.1220E-01 1.8722E+04 1.8432E+04 9.0948E+03 8.6089E+03 - 1.2589E-01 1.5700E+04 1.5450E+04 7.6844E+03 7.2414E+03 - 1.4125E-01 1.3184E+04 1.2801E+04 6.4339E+03 6.0222E+03 - 1.5849E-01 1.0897E+04 1.0538E+04 5.3245E+03 4.9488E+03 - 1.7783E-01 8.8609E+03 8.5813E+03 4.3629E+03 4.0230E+03 - 1.9953E-01 7.2185E+03 6.8950E+03 3.5324E+03 3.2824E+03 - 2.2387E-01 5.7750E+03 5.5244E+03 2.8514E+03 2.6320E+03 - 2.5119E-01 4.5288E+03 4.3508E+03 2.2993E+03 2.1188E+03 - 2.8184E-01 3.5614E+03 3.3768E+03 1.8333E+03 1.6936E+03 - 3.1623E-01 2.7887E+03 2.6268E+03 1.4307E+03 1.3099E+03 - 3.5481E-01 2.1538E+03 2.0344E+03 1.1169E+03 1.0117E+03 - 3.9811E-01 1.6577E+03 1.5516E+03 8.7592E+02 7.9051E+02 - 4.4668E-01 1.2727E+03 1.1806E+03 6.7480E+02 6.1237E+02 - 5.0119E-01 9.7450E+02 9.0584E+02 5.1394E+02 4.6776E+02 - 5.6234E-01 7.4167E+02 6.8813E+02 3.9069E+02 3.5669E+02 - 6.3096E-01 5.6397E+02 5.1726E+02 2.9708E+02 2.6806E+02 - 7.0795E-01 4.2657E+02 3.9180E+02 2.2451E+02 2.0370E+02 - 7.9433E-01 3.1956E+02 2.9848E+02 1.6821E+02 1.5543E+02 - 8.9125E-01 2.4256E+02 2.2340E+02 1.2643E+02 1.1625E+02 - 1.0000E+00 1.8188E+02 1.6807E+02 9.7293E+01 8.5651E+01 - 1.1220E+00 1.3657E+02 1.2573E+02 7.2963E+01 6.3806E+01 - 1.2589E+00 1.0217E+02 9.4567E+01 5.4697E+01 4.7577E+01 - 1.4125E+00 7.5831E+01 7.0886E+01 4.1067E+01 3.5244E+01 - 1.5849E+00 5.6875E+01 5.2792E+01 3.0732E+01 2.5942E+01 - 1.7783E+00 4.2636E+01 3.9181E+01 2.2875E+01 1.9178E+01 - 1.9953E+00 3.1738E+01 2.8799E+01 1.6797E+01 1.3952E+01 - 2.2387E+00 2.3312E+01 2.1296E+01 1.2417E+01 1.0177E+01 - 2.5119E+00 1.7161E+01 1.5727E+01 9.0595E+00 7.3422E+00 - 2.8184E+00 1.2647E+01 1.1708E+01 6.4326E+00 5.3133E+00 - 3.1623E+00 9.2401E+00 8.4176E+00 4.7813E+00 3.8071E+00 - 3.5481E+00 6.7633E+00 6.1289E+00 3.4542E+00 2.7143E+00 - 3.9811E+00 4.9138E+00 4.4585E+00 2.4452E+00 1.9368E+00 - 4.4668E+00 3.5347E+00 3.2218E+00 1.7431E+00 1.3406E+00 - 5.0119E+00 2.5566E+00 2.3203E+00 1.2496E+00 9.2235E-01 - 5.6234E+00 1.8402E+00 1.6598E+00 8.7365E-01 6.5153E-01 - 6.3096E+00 1.3227E+00 1.1856E+00 6.1333E-01 4.5538E-01 - 7.0795E+00 9.4667E-01 8.5202E-01 4.3226E-01 3.1748E-01 - 7.9433E+00 6.8103E-01 6.2499E-01 3.0546E-01 2.1901E-01 - 8.9125E+00 4.9002E-01 4.4040E-01 2.0738E-01 1.5163E-01 - 1.0000E+01 3.4503E-01 3.0585E-01 1.4038E-01 1.0435E-01 - 1.1220E+01 2.4854E-01 2.1826E-01 9.9009E-02 7.2244E-02 - 1.2589E+01 1.7813E-01 1.5508E-01 6.7526E-02 4.9343E-02 - 1.4125E+01 1.2786E-01 1.0976E-01 4.5363E-02 3.3887E-02 - 1.5849E+01 9.1499E-02 7.8081E-02 3.1306E-02 2.2573E-02 - 1.7783E+01 6.5039E-02 5.5588E-02 2.0849E-02 1.4970E-02 - 1.9953E+01 4.6493E-02 3.9387E-02 1.4136E-02 1.0462E-02 - 2.2387E+01 3.3440E-02 2.7805E-02 9.3336E-03 7.0835E-03 - 2.5119E+01 2.3757E-02 1.9365E-02 6.3777E-03 4.6610E-03 - 2.8184E+01 1.7215E-02 1.3605E-02 4.4075E-03 3.2760E-03 - 3.1623E+01 1.2082E-02 9.8061E-03 2.8906E-03 2.1958E-03 - 3.5481E+01 8.6321E-03 6.9472E-03 1.9337E-03 1.4775E-03 - 3.9811E+01 6.1629E-03 4.9102E-03 1.2959E-03 9.9269E-04 - 4.4668E+01 4.3877E-03 3.4638E-03 8.6504E-04 6.6667E-04 - 5.0119E+01 3.1122E-03 2.4533E-03 5.7561E-04 4.4322E-04 - 5.6234E+01 2.2206E-03 1.7363E-03 3.8517E-04 2.9480E-04 - 6.3096E+01 1.5773E-03 1.2278E-03 2.5581E-04 1.9827E-04 - 7.0795E+01 1.1203E-03 8.6214E-04 1.6949E-04 1.3482E-04 - 7.9433E+01 8.0036E-04 6.0270E-04 1.1269E-04 8.8982E-05 - 8.9125E+01 5.6733E-04 4.2604E-04 7.4276E-05 5.8029E-05 - 1.0000E+02 3.9961E-04 3.0040E-04 4.9450E-05 3.8674E-05 - 1.1220E+02 2.8311E-04 2.1094E-04 3.2889E-05 2.5770E-05 - 1.2589E+02 2.0029E-04 1.4775E-04 2.1717E-05 1.7124E-05 - 1.4125E+02 1.4102E-04 1.0377E-04 1.4405E-05 1.1441E-05 - 1.5849E+02 9.9726E-05 7.2562E-05 9.5313E-06 7.5487E-06 - 1.7783E+02 7.0242E-05 5.0699E-05 6.3352E-06 5.0989E-06 - 1.9953E+02 4.9145E-05 3.5363E-05 4.2439E-06 3.4028E-06 - 2.2387E+02 3.4728E-05 2.4589E-05 2.8390E-06 2.2284E-06 - 2.5119E+02 2.4382E-05 1.7252E-05 1.8644E-06 1.4870E-06 - 2.8184E+02 1.6946E-05 1.1982E-05 1.2204E-06 9.7154E-07 - 3.1623E+02 1.1965E-05 8.2852E-06 8.2881E-07 6.5922E-07 - 3.5481E+02 8.3797E-06 5.7461E-06 5.5158E-07 4.3762E-07 - 3.9811E+02 5.8608E-06 3.9941E-06 3.6924E-07 2.9101E-07 - 4.4668E+02 4.1008E-06 2.7648E-06 2.4806E-07 1.9591E-07 - 5.0119E+02 2.8694E-06 1.9128E-06 1.6439E-07 1.3252E-07 - 5.6234E+02 2.0116E-06 1.3358E-06 1.1050E-07 8.8591E-08 - 6.3096E+02 1.3944E-06 9.2273E-07 7.4164E-08 6.0265E-08 - 7.0795E+02 9.7027E-07 6.3526E-07 4.9412E-08 4.0658E-08 - 7.9433E+02 6.7830E-07 4.3883E-07 3.3967E-08 2.6878E-08 - 8.9125E+02 4.7312E-07 3.0346E-07 2.2452E-08 1.7664E-08 - 1.0000E+03 3.2979E-07 2.0914E-07 1.5224E-08 1.1810E-08 - 1.1220E+03 2.2763E-07 1.4355E-07 1.0358E-08 7.8064E-09 - 1.2589E+03 1.5779E-07 9.8627E-08 6.9418E-09 5.4353E-09 - 1.4125E+03 1.0839E-07 6.7892E-08 4.6817E-09 3.7364E-09 - 1.5849E+03 7.4537E-08 4.6338E-08 3.1673E-09 2.3637E-09 - 1.7783E+03 5.1458E-08 3.1436E-08 2.1189E-09 1.5077E-09 - 1.9953E+03 3.5315E-08 2.1599E-08 1.3953E-09 9.8152E-10 - 2.2387E+03 2.4191E-08 1.4653E-08 9.2192E-10 6.6072E-10 - 2.5119E+03 1.6660E-08 9.9632E-09 6.2176E-10 4.8462E-10 - 2.8184E+03 1.1306E-08 6.7683E-09 4.0730E-10 3.1917E-10 - 3.1623E+03 7.8744E-09 4.6329E-09 2.7806E-10 2.0132E-10 - 3.5481E+03 5.2403E-09 3.0888E-09 1.8716E-10 1.3348E-10 - 3.9811E+03 3.5352E-09 2.0693E-09 1.1958E-10 9.0336E-11 - 4.4668E+03 2.4044E-09 1.3872E-09 8.0597E-11 6.1938E-11 - 5.0119E+03 1.6365E-09 9.3223E-10 5.6921E-11 3.7673E-11 - 5.6234E+03 1.1047E-09 6.3232E-10 3.8605E-11 2.4790E-11 - 6.3096E+03 7.3617E-10 4.1626E-10 2.3383E-11 1.6920E-11 - 7.0795E+03 4.9351E-10 2.7726E-10 1.5613E-11 1.1007E-11 - 7.9433E+03 3.3214E-10 1.8457E-10 1.0796E-11 7.2897E-12 - 8.9125E+03 2.2103E-10 1.2324E-10 6.9385E-12 4.7276E-12 - 1.0000E+04 1.4660E-10 8.1358E-11 4.5899E-12 3.0224E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2022E+04 2.1730E+04 1.0629E+04 1.0010E+04 - 1.1220E-01 1.8620E+04 1.8235E+04 9.0945E+03 8.5233E+03 - 1.2589E-01 1.5670E+04 1.5277E+04 7.6434E+03 7.1524E+03 - 1.4125E-01 1.3099E+04 1.2752E+04 6.3800E+03 5.9854E+03 - 1.5849E-01 1.0826E+04 1.0449E+04 5.3015E+03 4.9362E+03 - 1.7783E-01 8.8276E+03 8.5169E+03 4.3641E+03 4.0305E+03 - 1.9953E-01 7.1804E+03 6.8940E+03 3.5719E+03 3.2694E+03 - 2.2387E-01 5.7695E+03 5.4912E+03 2.9024E+03 2.6348E+03 - 2.5119E-01 4.5339E+03 4.3549E+03 2.3322E+03 2.1111E+03 - 2.8184E-01 3.5592E+03 3.4288E+03 1.8510E+03 1.6652E+03 - 3.1623E-01 2.7826E+03 2.6641E+03 1.4486E+03 1.3108E+03 - 3.5481E-01 2.1541E+03 2.0620E+03 1.1293E+03 1.0192E+03 - 3.9811E-01 1.6693E+03 1.5857E+03 8.8846E+02 7.8707E+02 - 4.4668E-01 1.2860E+03 1.2029E+03 6.8322E+02 6.0636E+02 - 5.0119E-01 9.8189E+02 9.1522E+02 5.2239E+02 4.6575E+02 - 5.6234E-01 7.4633E+02 6.9691E+02 4.0036E+02 3.5340E+02 - 6.3096E-01 5.6412E+02 5.2852E+02 3.0282E+02 2.6468E+02 - 7.0795E-01 4.2822E+02 3.9683E+02 2.3027E+02 2.0361E+02 - 7.9433E-01 3.2482E+02 2.9828E+02 1.7585E+02 1.5482E+02 - 8.9125E-01 2.4259E+02 2.2863E+02 1.3176E+02 1.1493E+02 - 1.0000E+00 1.8389E+02 1.6912E+02 9.8598E+01 8.6231E+01 - 1.1220E+00 1.3797E+02 1.2675E+02 7.3937E+01 6.3936E+01 - 1.2589E+00 1.0350E+02 9.4779E+01 5.5328E+01 4.7513E+01 - 1.4125E+00 7.7803E+01 7.1510E+01 4.1248E+01 3.5393E+01 - 1.5849E+00 5.7731E+01 5.3583E+01 3.0475E+01 2.6454E+01 - 1.7783E+00 4.2909E+01 3.9957E+01 2.2987E+01 1.9248E+01 - 1.9953E+00 3.2014E+01 2.9591E+01 1.7245E+01 1.3780E+01 - 2.2387E+00 2.3706E+01 2.1616E+01 1.2463E+01 1.0021E+01 - 2.5119E+00 1.7248E+01 1.5725E+01 9.0831E+00 7.2958E+00 - 2.8184E+00 1.2405E+01 1.1472E+01 6.6545E+00 5.1950E+00 - 3.1623E+00 9.2510E+00 8.5252E+00 4.7722E+00 3.7523E+00 - 3.5481E+00 6.7395E+00 6.1951E+00 3.4325E+00 2.6962E+00 - 3.9811E+00 4.9064E+00 4.4708E+00 2.4683E+00 1.9144E+00 - 4.4668E+00 3.5498E+00 3.2024E+00 1.7496E+00 1.3338E+00 - 5.0119E+00 2.5414E+00 2.2966E+00 1.2283E+00 9.3694E-01 - 5.6234E+00 1.8363E+00 1.6542E+00 8.7018E-01 6.6445E-01 - 6.3096E+00 1.3149E+00 1.1848E+00 6.1175E-01 4.5520E-01 - 7.0795E+00 9.4982E-01 8.5311E-01 4.2591E-01 3.1638E-01 - 7.9433E+00 6.9650E-01 6.1638E-01 2.9465E-01 2.2568E-01 - 8.9125E+00 4.9374E-01 4.3968E-01 2.0668E-01 1.5218E-01 - 1.0000E+01 3.4607E-01 3.0725E-01 1.4174E-01 1.0361E-01 - 1.1220E+01 2.4697E-01 2.1641E-01 9.7344E-02 7.2796E-02 - 1.2589E+01 1.7777E-01 1.5356E-01 6.6033E-02 4.9865E-02 - 1.4125E+01 1.2757E-01 1.0927E-01 4.5360E-02 3.3523E-02 - 1.5849E+01 9.1233E-02 7.7839E-02 3.0657E-02 2.2707E-02 - 1.7783E+01 6.5749E-02 5.5286E-02 2.0726E-02 1.5391E-02 - 1.9953E+01 4.6717E-02 3.9377E-02 1.4120E-02 1.0743E-02 - 2.2387E+01 3.2602E-02 2.8355E-02 9.6789E-03 7.2260E-03 - 2.5119E+01 2.3215E-02 1.9865E-02 6.3789E-03 4.8326E-03 - 2.8184E+01 1.7166E-02 1.4018E-02 4.4657E-03 3.2811E-03 - 3.1623E+01 1.2109E-02 9.8178E-03 2.8954E-03 2.2005E-03 - 3.5481E+01 8.6422E-03 6.9629E-03 1.9345E-03 1.4846E-03 - 3.9811E+01 6.1367E-03 4.9110E-03 1.2914E-03 1.0044E-03 - 4.4668E+01 4.3660E-03 3.4727E-03 8.5799E-04 6.7236E-04 - 5.0119E+01 3.1253E-03 2.4542E-03 5.7148E-04 4.5059E-04 - 5.6234E+01 2.2337E-03 1.7317E-03 3.8127E-04 3.0074E-04 - 6.3096E+01 1.5845E-03 1.2266E-03 2.5170E-04 2.0002E-04 - 7.0795E+01 1.1265E-03 8.6805E-04 1.6855E-04 1.3271E-04 - 7.9433E+01 7.9878E-04 6.1100E-04 1.1272E-04 8.9228E-05 - 8.9125E+01 5.6436E-04 4.2879E-04 7.4944E-05 5.9434E-05 - 1.0000E+02 4.0028E-04 3.0037E-04 4.9211E-05 3.8704E-05 - 1.1220E+02 2.8391E-04 2.1117E-04 3.2580E-05 2.5981E-05 - 1.2589E+02 2.0061E-04 1.4815E-04 2.1539E-05 1.7202E-05 - 1.4125E+02 1.4129E-04 1.0366E-04 1.4388E-05 1.1409E-05 - 1.5849E+02 9.9655E-05 7.2517E-05 9.5803E-06 7.6453E-06 - 1.7783E+02 6.9937E-05 5.0543E-05 6.3729E-06 5.0852E-06 - 1.9953E+02 4.9235E-05 3.5391E-05 4.2356E-06 3.3473E-06 - 2.2387E+02 3.4712E-05 2.4660E-05 2.8130E-06 2.1683E-06 - 2.5119E+02 2.4246E-05 1.7088E-05 1.8499E-06 1.4336E-06 - 2.8184E+02 1.6918E-05 1.1985E-05 1.2159E-06 9.7343E-07 - 3.1623E+02 1.1910E-05 8.2973E-06 8.2173E-07 6.6609E-07 - 3.5481E+02 8.3615E-06 5.7478E-06 5.5328E-07 4.4398E-07 - 3.9811E+02 5.8633E-06 3.9865E-06 3.7014E-07 2.9992E-07 - 4.4668E+02 4.0835E-06 2.7770E-06 2.4844E-07 2.0375E-07 - 5.0119E+02 2.8723E-06 1.9308E-06 1.6634E-07 1.3258E-07 - 5.6234E+02 2.0034E-06 1.3350E-06 1.0892E-07 8.9355E-08 - 6.3096E+02 1.3888E-06 9.2156E-07 7.3497E-08 5.9047E-08 - 7.0795E+02 9.7008E-07 6.3547E-07 4.9820E-08 3.9860E-08 - 7.9433E+02 6.7443E-07 4.4027E-07 3.3746E-08 2.7091E-08 - 8.9125E+02 4.6975E-07 3.0339E-07 2.2034E-08 1.8005E-08 - 1.0000E+03 3.2691E-07 2.0829E-07 1.5302E-08 1.2192E-08 - 1.1220E+03 2.2630E-07 1.4243E-07 1.0345E-08 8.0286E-09 - 1.2589E+03 1.5609E-07 9.7780E-08 6.9629E-09 5.1094E-09 - 1.4125E+03 1.0762E-07 6.7177E-08 4.6641E-09 3.5151E-09 - 1.5849E+03 7.4681E-08 4.6306E-08 3.0873E-09 2.4746E-09 - 1.7783E+03 5.1649E-08 3.1601E-08 2.0551E-09 1.6130E-09 - 1.9953E+03 3.5212E-08 2.1703E-08 1.3706E-09 1.0747E-09 - 2.2387E+03 2.4252E-08 1.4733E-08 9.0088E-10 6.5966E-10 - 2.5119E+03 1.6650E-08 9.9478E-09 6.2009E-10 4.3426E-10 - 2.8184E+03 1.1306E-08 6.6755E-09 4.2643E-10 3.1292E-10 - 3.1623E+03 7.8041E-09 4.6151E-09 2.8356E-10 2.0062E-10 - 3.5481E+03 5.2439E-09 3.0703E-09 1.8392E-10 1.3515E-10 - 3.9811E+03 3.5462E-09 2.0727E-09 1.1983E-10 9.1543E-11 - 4.4668E+03 2.3870E-09 1.3878E-09 7.9650E-11 6.1299E-11 - 5.0119E+03 1.6214E-09 9.2496E-10 5.1746E-11 3.8070E-11 - 5.6234E+03 1.0878E-09 6.2624E-10 3.5174E-11 2.4416E-11 - 6.3096E+03 7.2868E-10 4.1601E-10 2.3360E-11 1.7797E-11 - 7.0795E+03 4.9149E-10 2.7495E-10 1.5297E-11 1.1589E-11 - 7.9433E+03 3.3005E-10 1.8390E-10 1.0169E-11 7.2698E-12 - 8.9125E+03 2.1917E-10 1.2163E-10 6.8448E-12 4.7260E-12 - 1.0000E+04 1.4646E-10 8.0675E-11 4.4590E-12 3.0483E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2017E+04 2.2147E+04 1.0806E+04 9.9787E+03 - 1.1220E-01 1.8789E+04 1.8652E+04 9.2785E+03 8.5232E+03 - 1.2589E-01 1.5827E+04 1.5665E+04 7.9017E+03 7.1395E+03 - 1.4125E-01 1.3227E+04 1.3081E+04 6.6111E+03 5.9412E+03 - 1.5849E-01 1.0978E+04 1.0820E+04 5.4687E+03 4.9245E+03 - 1.7783E-01 9.0005E+03 8.8547E+03 4.5272E+03 4.0548E+03 - 1.9953E-01 7.3071E+03 7.1273E+03 3.7256E+03 3.2952E+03 - 2.2387E-01 5.8328E+03 5.6990E+03 3.0289E+03 2.6384E+03 - 2.5119E-01 4.6143E+03 4.5171E+03 2.4405E+03 2.1199E+03 - 2.8184E-01 3.6242E+03 3.5401E+03 1.9452E+03 1.6803E+03 - 3.1623E-01 2.8247E+03 2.7580E+03 1.5280E+03 1.3243E+03 - 3.5481E-01 2.1881E+03 2.1429E+03 1.1937E+03 1.0232E+03 - 3.9811E-01 1.6942E+03 1.6488E+03 9.2765E+02 7.8465E+02 - 4.4668E-01 1.3026E+03 1.2505E+03 7.1422E+02 6.0916E+02 - 5.0119E-01 9.8738E+02 9.5037E+02 5.5342E+02 4.6487E+02 - 5.6234E-01 7.5128E+02 7.2179E+02 4.2509E+02 3.5734E+02 - 6.3096E-01 5.6916E+02 5.5072E+02 3.2161E+02 2.7230E+02 - 7.0795E-01 4.2703E+02 4.1557E+02 2.4325E+02 2.0286E+02 - 7.9433E-01 3.2557E+02 3.1035E+02 1.8152E+02 1.5071E+02 - 8.9125E-01 2.4559E+02 2.3354E+02 1.3749E+02 1.1518E+02 - 1.0000E+00 1.8382E+02 1.7485E+02 1.0405E+02 8.6233E+01 - 1.1220E+00 1.3938E+02 1.3087E+02 7.8005E+01 6.3655E+01 - 1.2589E+00 1.0473E+02 9.7720E+01 5.8267E+01 4.7545E+01 - 1.4125E+00 7.7717E+01 7.3154E+01 4.3326E+01 3.4808E+01 - 1.5849E+00 5.7607E+01 5.4918E+01 3.2271E+01 2.5537E+01 - 1.7783E+00 4.2524E+01 4.0519E+01 2.3877E+01 1.8902E+01 - 1.9953E+00 3.1451E+01 2.9568E+01 1.7504E+01 1.3736E+01 - 2.2387E+00 2.3491E+01 2.1980E+01 1.2673E+01 9.9754E+00 - 2.5119E+00 1.7493E+01 1.6040E+01 9.1428E+00 7.2698E+00 - 2.8184E+00 1.2668E+01 1.1635E+01 6.8083E+00 5.3585E+00 - 3.1623E+00 9.1919E+00 8.5279E+00 4.8909E+00 3.8072E+00 - 3.5481E+00 6.7572E+00 6.2012E+00 3.4578E+00 2.6878E+00 - 3.9811E+00 4.9016E+00 4.4892E+00 2.4884E+00 1.9025E+00 - 4.4668E+00 3.5274E+00 3.2372E+00 1.7692E+00 1.3238E+00 - 5.0119E+00 2.5650E+00 2.3241E+00 1.2431E+00 9.2400E-01 - 5.6234E+00 1.8585E+00 1.6582E+00 8.7243E-01 6.5700E-01 - 6.3096E+00 1.3285E+00 1.1992E+00 6.1869E-01 4.5978E-01 - 7.0795E+00 9.5497E-01 8.7228E-01 4.2734E-01 3.1821E-01 - 7.9433E+00 6.8428E-01 6.2097E-01 2.9167E-01 2.1891E-01 - 8.9125E+00 4.8633E-01 4.3695E-01 2.0924E-01 1.5422E-01 - 1.0000E+01 3.5184E-01 3.0995E-01 1.4272E-01 1.0496E-01 - 1.1220E+01 2.5152E-01 2.1979E-01 9.7866E-02 7.1078E-02 - 1.2589E+01 1.7832E-01 1.5558E-01 6.6818E-02 4.8947E-02 - 1.4125E+01 1.2788E-01 1.1025E-01 4.5389E-02 3.3817E-02 - 1.5849E+01 9.1896E-02 7.7516E-02 3.1549E-02 2.3847E-02 - 1.7783E+01 6.5294E-02 5.4958E-02 2.1501E-02 1.6346E-02 - 1.9953E+01 4.6544E-02 3.9006E-02 1.3948E-02 1.0788E-02 - 2.2387E+01 3.3211E-02 2.7628E-02 9.4467E-03 7.0450E-03 - 2.5119E+01 2.3553E-02 1.9999E-02 6.4663E-03 4.8143E-03 - 2.8184E+01 1.7145E-02 1.4515E-02 4.2221E-03 3.3027E-03 - 3.1623E+01 1.2135E-02 9.8418E-03 2.8814E-03 2.2082E-03 - 3.5481E+01 8.6580E-03 6.9654E-03 1.9255E-03 1.4825E-03 - 3.9811E+01 6.1664E-03 4.9244E-03 1.2825E-03 9.9767E-04 - 4.4668E+01 4.3897E-03 3.4722E-03 8.5705E-04 6.6971E-04 - 5.0119E+01 3.1285E-03 2.4563E-03 5.7728E-04 4.4678E-04 - 5.6234E+01 2.2104E-03 1.7356E-03 3.8532E-04 2.9694E-04 - 6.3096E+01 1.5710E-03 1.2273E-03 2.5708E-04 1.9947E-04 - 7.0795E+01 1.1182E-03 8.7046E-04 1.6930E-04 1.3555E-04 - 7.9433E+01 7.9744E-04 6.1016E-04 1.1197E-04 9.0230E-05 - 8.9125E+01 5.6764E-04 4.2926E-04 7.4583E-05 6.0125E-05 - 1.0000E+02 4.0068E-04 3.0053E-04 4.8892E-05 3.8940E-05 - 1.1220E+02 2.8285E-04 2.1113E-04 3.2757E-05 2.5929E-05 - 1.2589E+02 1.9969E-04 1.4807E-04 2.1615E-05 1.7134E-05 - 1.4125E+02 1.4078E-04 1.0373E-04 1.4382E-05 1.1482E-05 - 1.5849E+02 9.9399E-05 7.2760E-05 9.5382E-06 7.6496E-06 - 1.7783E+02 7.0138E-05 5.0687E-05 6.2554E-06 5.0343E-06 - 1.9953E+02 4.9066E-05 3.5164E-05 4.1510E-06 3.2920E-06 - 2.2387E+02 3.4606E-05 2.4485E-05 2.7606E-06 2.2027E-06 - 2.5119E+02 2.4385E-05 1.7084E-05 1.8286E-06 1.5414E-06 - 2.8184E+02 1.6994E-05 1.1892E-05 1.2255E-06 1.0123E-06 - 3.1623E+02 1.1906E-05 8.3030E-06 8.2517E-07 6.6204E-07 - 3.5481E+02 8.3304E-06 5.7698E-06 5.5558E-07 4.4805E-07 - 3.9811E+02 5.8275E-06 3.9918E-06 3.6475E-07 3.0000E-07 - 4.4668E+02 4.0703E-06 2.7604E-06 2.4274E-07 1.9938E-07 - 5.0119E+02 2.8540E-06 1.9249E-06 1.6525E-07 1.3551E-07 - 5.6234E+02 2.0023E-06 1.3350E-06 1.1138E-07 8.7647E-08 - 6.3096E+02 1.3951E-06 9.2351E-07 7.5285E-08 5.9838E-08 - 7.0795E+02 9.6691E-07 6.3523E-07 5.0533E-08 4.1193E-08 - 7.9433E+02 6.7285E-07 4.3446E-07 3.3539E-08 2.7699E-08 - 8.9125E+02 4.6930E-07 2.9921E-07 2.2489E-08 1.8456E-08 - 1.0000E+03 3.2596E-07 2.0740E-07 1.4729E-08 1.2104E-08 - 1.1220E+03 2.2536E-07 1.4262E-07 9.9491E-09 7.9652E-09 - 1.2589E+03 1.5587E-07 9.7565E-08 6.7296E-09 5.2858E-09 - 1.4125E+03 1.0756E-07 6.6924E-08 4.4296E-09 3.6714E-09 - 1.5849E+03 7.4084E-08 4.6102E-08 2.8938E-09 2.4152E-09 - 1.7783E+03 5.0783E-08 3.1608E-08 2.0253E-09 1.4947E-09 - 1.9953E+03 3.5262E-08 2.1544E-08 1.3605E-09 1.0216E-09 - 2.2387E+03 2.4305E-08 1.4695E-08 8.9351E-10 6.8731E-10 - 2.5119E+03 1.6595E-08 9.9033E-09 5.8711E-10 4.4696E-10 - 2.8184E+03 1.1294E-08 6.7695E-09 3.8962E-10 2.8837E-10 - 3.1623E+03 7.8177E-09 4.6328E-09 2.6985E-10 2.0576E-10 - 3.5481E+03 5.2444E-09 3.0758E-09 1.8527E-10 1.3050E-10 - 3.9811E+03 3.5499E-09 2.0596E-09 1.2262E-10 8.7655E-11 - 4.4668E+03 2.3915E-09 1.3792E-09 7.8439E-11 5.9647E-11 - 5.0119E+03 1.6235E-09 9.1984E-10 5.2587E-11 3.8672E-11 - 5.6234E+03 1.0838E-09 6.1791E-10 3.5204E-11 2.5197E-11 - 6.3096E+03 7.2604E-10 4.1449E-10 2.2850E-11 1.5891E-11 - 7.0795E+03 4.8824E-10 2.7358E-10 1.5127E-11 1.0767E-11 - 7.9433E+03 3.2900E-10 1.8330E-10 9.9776E-12 7.1501E-12 - 8.9125E+03 2.1753E-10 1.2275E-10 6.6076E-12 4.8628E-12 - 1.0000E+04 1.4423E-10 8.2001E-11 4.2578E-12 3.1363E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.1648E+04 2.1707E+04 1.0557E+04 9.7349E+03 - 1.1220E-01 1.8382E+04 1.8395E+04 9.1137E+03 8.3771E+03 - 1.2589E-01 1.5486E+04 1.5530E+04 7.7601E+03 7.0820E+03 - 1.4125E-01 1.2959E+04 1.3015E+04 6.5386E+03 5.9165E+03 - 1.5849E-01 1.0833E+04 1.0807E+04 5.4727E+03 4.8789E+03 - 1.7783E-01 8.9329E+03 8.8674E+03 4.5567E+03 3.9891E+03 - 1.9953E-01 7.2647E+03 7.1771E+03 3.7516E+03 3.2450E+03 - 2.2387E-01 5.8310E+03 5.7578E+03 3.0547E+03 2.6510E+03 - 2.5119E-01 4.6121E+03 4.5826E+03 2.4829E+03 2.1303E+03 - 2.8184E-01 3.6351E+03 3.6041E+03 1.9801E+03 1.6787E+03 - 3.1623E-01 2.8364E+03 2.8152E+03 1.5522E+03 1.3181E+03 - 3.5481E-01 2.2005E+03 2.1822E+03 1.2200E+03 1.0256E+03 - 3.9811E-01 1.7058E+03 1.6807E+03 9.6107E+02 7.9010E+02 - 4.4668E-01 1.3035E+03 1.2834E+03 7.4266E+02 5.9755E+02 - 5.0119E-01 9.9490E+02 9.7767E+02 5.6770E+02 4.5989E+02 - 5.6234E-01 7.5469E+02 7.4195E+02 4.3550E+02 3.5595E+02 - 6.3096E-01 5.6536E+02 5.5597E+02 3.3063E+02 2.7076E+02 - 7.0795E-01 4.2423E+02 4.2089E+02 2.4750E+02 2.0233E+02 - 7.9433E-01 3.2162E+02 3.1896E+02 1.8794E+02 1.5095E+02 - 8.9125E-01 2.4500E+02 2.3839E+02 1.4324E+02 1.1514E+02 - 1.0000E+00 1.8421E+02 1.7806E+02 1.0573E+02 8.4439E+01 - 1.1220E+00 1.3825E+02 1.3338E+02 7.9635E+01 6.3109E+01 - 1.2589E+00 1.0394E+02 1.0016E+02 5.9244E+01 4.7047E+01 - 1.4125E+00 7.7825E+01 7.5019E+01 4.3660E+01 3.4682E+01 - 1.5849E+00 5.8282E+01 5.5103E+01 3.2628E+01 2.5842E+01 - 1.7783E+00 4.3333E+01 4.0833E+01 2.4218E+01 1.9053E+01 - 1.9953E+00 3.2024E+01 3.0258E+01 1.7782E+01 1.3950E+01 - 2.2387E+00 2.3772E+01 2.2309E+01 1.2952E+01 1.0091E+01 - 2.5119E+00 1.7492E+01 1.6171E+01 9.3625E+00 7.1579E+00 - 2.8184E+00 1.2769E+01 1.1776E+01 6.7240E+00 5.1445E+00 - 3.1623E+00 9.2997E+00 8.5561E+00 4.8631E+00 3.7956E+00 - 3.5481E+00 6.7354E+00 6.1606E+00 3.4379E+00 2.6670E+00 - 3.9811E+00 4.8755E+00 4.5167E+00 2.4505E+00 1.8837E+00 - 4.4668E+00 3.5326E+00 3.2269E+00 1.7646E+00 1.3443E+00 - 5.0119E+00 2.5623E+00 2.3187E+00 1.2531E+00 9.4583E-01 - 5.6234E+00 1.8477E+00 1.6915E+00 8.7683E-01 6.5290E-01 - 6.3096E+00 1.3086E+00 1.2155E+00 6.2236E-01 4.5704E-01 - 7.0795E+00 9.3847E-01 8.6186E-01 4.3555E-01 3.1632E-01 - 7.9433E+00 6.8263E-01 6.0306E-01 2.9600E-01 2.1753E-01 - 8.9125E+00 4.8871E-01 4.3072E-01 2.0125E-01 1.5293E-01 - 1.0000E+01 3.5056E-01 3.0893E-01 1.3971E-01 1.0614E-01 - 1.1220E+01 2.5200E-01 2.1968E-01 9.6725E-02 7.1856E-02 - 1.2589E+01 1.8129E-01 1.5585E-01 6.6709E-02 4.9601E-02 - 1.4125E+01 1.2840E-01 1.0985E-01 4.5001E-02 3.4701E-02 - 1.5849E+01 9.1465E-02 7.6661E-02 3.0626E-02 2.3080E-02 - 1.7783E+01 6.5363E-02 5.3885E-02 2.0454E-02 1.5148E-02 - 1.9953E+01 4.6199E-02 3.8895E-02 1.3664E-02 1.0315E-02 - 2.2387E+01 3.2814E-02 2.7602E-02 9.4713E-03 6.8447E-03 - 2.5119E+01 2.3372E-02 1.9288E-02 6.3939E-03 4.8062E-03 - 2.8184E+01 1.6627E-02 1.3993E-02 4.3226E-03 3.2979E-03 - 3.1623E+01 1.2118E-02 9.8144E-03 2.8887E-03 2.2005E-03 - 3.5481E+01 8.6632E-03 6.9512E-03 1.9329E-03 1.4847E-03 - 3.9811E+01 6.1649E-03 4.9232E-03 1.2836E-03 9.9910E-04 - 4.4668E+01 4.3788E-03 3.4870E-03 8.5544E-04 6.6960E-04 - 5.0119E+01 3.1258E-03 2.4579E-03 5.7189E-04 4.4588E-04 - 5.6234E+01 2.2178E-03 1.7274E-03 3.8480E-04 2.9608E-04 - 6.3096E+01 1.5745E-03 1.2167E-03 2.5552E-04 1.9799E-04 - 7.0795E+01 1.1225E-03 8.6009E-04 1.6949E-04 1.3189E-04 - 7.9433E+01 7.9609E-04 6.0849E-04 1.1203E-04 8.7194E-05 - 8.9125E+01 5.6689E-04 4.2817E-04 7.4012E-05 5.8154E-05 - 1.0000E+02 3.9841E-04 2.9962E-04 4.9466E-05 3.8468E-05 - 1.1220E+02 2.8164E-04 2.1032E-04 3.2885E-05 2.5676E-05 - 1.2589E+02 1.9913E-04 1.4782E-04 2.1750E-05 1.7295E-05 - 1.4125E+02 1.4042E-04 1.0332E-04 1.4294E-05 1.1461E-05 - 1.5849E+02 9.9220E-05 7.2228E-05 9.4494E-06 7.6548E-06 - 1.7783E+02 6.9977E-05 5.0482E-05 6.2928E-06 5.0982E-06 - 1.9953E+02 4.9225E-05 3.5122E-05 4.1741E-06 3.3625E-06 - 2.2387E+02 3.4528E-05 2.4609E-05 2.7976E-06 2.2084E-06 - 2.5119E+02 2.4062E-05 1.7186E-05 1.8608E-06 1.5106E-06 - 2.8184E+02 1.6860E-05 1.1926E-05 1.2338E-06 1.0158E-06 - 3.1623E+02 1.1926E-05 8.2794E-06 8.2216E-07 6.6926E-07 - 3.5481E+02 8.3597E-06 5.7443E-06 5.5058E-07 4.4533E-07 - 3.9811E+02 5.8320E-06 3.9895E-06 3.6400E-07 2.9752E-07 - 4.4668E+02 4.0750E-06 2.7679E-06 2.4531E-07 2.0228E-07 - 5.0119E+02 2.8562E-06 1.9142E-06 1.6402E-07 1.3476E-07 - 5.6234E+02 1.9897E-06 1.3282E-06 1.1058E-07 8.8821E-08 - 6.3096E+02 1.3807E-06 9.1448E-07 7.6128E-08 5.9131E-08 - 7.0795E+02 9.6238E-07 6.3117E-07 5.0314E-08 3.9262E-08 - 7.9433E+02 6.7201E-07 4.3842E-07 3.2793E-08 2.6271E-08 - 8.9125E+02 4.6918E-07 2.9952E-07 2.2259E-08 1.7953E-08 - 1.0000E+03 3.2694E-07 2.0751E-07 1.4951E-08 1.2021E-08 - 1.1220E+03 2.2687E-07 1.4279E-07 1.0045E-08 7.8946E-09 - 1.2589E+03 1.5669E-07 9.7649E-08 6.8707E-09 5.3046E-09 - 1.4125E+03 1.0755E-07 6.6527E-08 4.5666E-09 3.5276E-09 - 1.5849E+03 7.4019E-08 4.5708E-08 3.0292E-09 2.2602E-09 - 1.7783E+03 5.1190E-08 3.1643E-08 2.0092E-09 1.5037E-09 - 1.9953E+03 3.5283E-08 2.1335E-08 1.3601E-09 1.0341E-09 - 2.2387E+03 2.4056E-08 1.4594E-08 9.0416E-10 6.9125E-10 - 2.5119E+03 1.6466E-08 9.9757E-09 5.9418E-10 4.7232E-10 - 2.8184E+03 1.1229E-08 6.7412E-09 4.1569E-10 3.0223E-10 - 3.1623E+03 7.7938E-09 4.6018E-09 2.6934E-10 2.0124E-10 - 3.5481E+03 5.2006E-09 3.0587E-09 1.7495E-10 1.3079E-10 - 3.9811E+03 3.5198E-09 2.0649E-09 1.1448E-10 8.5696E-11 - 4.4668E+03 2.3718E-09 1.3825E-09 7.6249E-11 5.9183E-11 - 5.0119E+03 1.5869E-09 9.2925E-10 5.5482E-11 3.8940E-11 - 5.6234E+03 1.0755E-09 6.1748E-10 3.6953E-11 2.6760E-11 - 6.3096E+03 7.2353E-10 4.1507E-10 2.3149E-11 1.6237E-11 - 7.0795E+03 4.8616E-10 2.7717E-10 1.5104E-11 1.0770E-11 - 7.9433E+03 3.2703E-10 1.8087E-10 1.0063E-11 7.1130E-12 - 8.9125E+03 2.1795E-10 1.2002E-10 6.9362E-12 4.6584E-12 - 1.0000E+04 1.4649E-10 8.0519E-11 4.4735E-12 3.1928E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.9796E+04 2.0059E+04 9.6573E+03 9.0702E+03 - 1.1220E-01 1.6965E+04 1.7135E+04 8.3532E+03 7.8310E+03 - 1.2589E-01 1.4403E+04 1.4567E+04 7.1677E+03 6.5806E+03 - 1.4125E-01 1.2160E+04 1.2224E+04 6.0544E+03 5.5137E+03 - 1.5849E-01 1.0148E+04 1.0162E+04 5.1087E+03 4.5952E+03 - 1.7783E-01 8.3631E+03 8.4400E+03 4.2888E+03 3.7819E+03 - 1.9953E-01 6.8348E+03 6.8836E+03 3.5471E+03 3.1080E+03 - 2.2387E-01 5.5183E+03 5.5102E+03 2.9201E+03 2.5106E+03 - 2.5119E-01 4.4211E+03 4.3973E+03 2.3787E+03 2.0067E+03 - 2.8184E-01 3.5064E+03 3.5073E+03 1.9130E+03 1.5991E+03 - 3.1623E-01 2.7721E+03 2.7612E+03 1.5211E+03 1.2628E+03 - 3.5481E-01 2.1771E+03 2.1331E+03 1.1999E+03 9.7987E+02 - 3.9811E-01 1.6776E+03 1.6560E+03 9.3690E+02 7.5116E+02 - 4.4668E-01 1.2883E+03 1.2771E+03 7.3408E+02 5.8156E+02 - 5.0119E-01 9.9089E+02 9.7524E+02 5.6785E+02 4.5392E+02 - 5.6234E-01 7.4599E+02 7.4264E+02 4.3625E+02 3.4817E+02 - 6.3096E-01 5.6563E+02 5.5999E+02 3.3835E+02 2.6007E+02 - 7.0795E-01 4.3272E+02 4.2229E+02 2.5235E+02 1.9711E+02 - 7.9433E-01 3.2515E+02 3.1857E+02 1.9045E+02 1.5052E+02 - 8.9125E-01 2.4640E+02 2.4028E+02 1.4595E+02 1.1410E+02 - 1.0000E+00 1.8433E+02 1.8153E+02 1.0873E+02 8.4421E+01 - 1.1220E+00 1.3837E+02 1.3586E+02 8.0910E+01 6.2061E+01 - 1.2589E+00 1.0425E+02 1.0135E+02 6.0331E+01 4.6354E+01 - 1.4125E+00 7.8131E+01 7.5921E+01 4.4669E+01 3.4236E+01 - 1.5849E+00 5.8072E+01 5.6558E+01 3.3467E+01 2.5300E+01 - 1.7783E+00 4.3022E+01 4.1514E+01 2.4827E+01 1.8970E+01 - 1.9953E+00 3.1718E+01 3.0625E+01 1.8103E+01 1.3818E+01 - 2.2387E+00 2.3177E+01 2.2259E+01 1.3167E+01 1.0140E+01 - 2.5119E+00 1.6976E+01 1.6241E+01 9.5999E+00 7.3216E+00 - 2.8184E+00 1.2670E+01 1.2088E+01 7.0194E+00 5.1631E+00 - 3.1623E+00 9.3026E+00 8.6481E+00 4.9158E+00 3.7341E+00 - 3.5481E+00 6.7454E+00 6.2108E+00 3.5081E+00 2.6768E+00 - 3.9811E+00 4.8401E+00 4.4711E+00 2.4976E+00 1.8930E+00 - 4.4668E+00 3.5382E+00 3.2063E+00 1.7685E+00 1.3196E+00 - 5.0119E+00 2.5521E+00 2.3125E+00 1.2366E+00 9.1562E-01 - 5.6234E+00 1.8342E+00 1.6648E+00 8.6883E-01 6.4594E-01 - 6.3096E+00 1.3423E+00 1.1874E+00 6.1297E-01 4.6173E-01 - 7.0795E+00 9.6502E-01 8.4572E-01 4.2791E-01 3.2225E-01 - 7.9433E+00 6.8245E-01 6.0092E-01 2.9964E-01 2.2123E-01 - 8.9125E+00 4.8068E-01 4.2690E-01 2.0405E-01 1.5405E-01 - 1.0000E+01 3.4842E-01 3.0587E-01 1.3936E-01 1.0537E-01 - 1.1220E+01 2.5028E-01 2.1885E-01 9.5059E-02 7.2982E-02 - 1.2589E+01 1.7786E-01 1.5543E-01 6.5996E-02 4.9827E-02 - 1.4125E+01 1.2728E-01 1.0950E-01 4.5372E-02 3.3896E-02 - 1.5849E+01 9.0715E-02 7.8099E-02 3.0692E-02 2.3129E-02 - 1.7783E+01 6.4423E-02 5.5080E-02 2.0591E-02 1.5377E-02 - 1.9953E+01 4.6007E-02 3.8943E-02 1.4000E-02 1.0492E-02 - 2.2387E+01 3.2542E-02 2.7733E-02 9.3334E-03 7.3534E-03 - 2.5119E+01 2.3241E-02 1.9304E-02 6.3287E-03 4.8684E-03 - 2.8184E+01 1.6769E-02 1.3602E-02 4.2763E-03 3.2354E-03 - 3.1623E+01 1.2091E-02 9.8021E-03 2.8793E-03 2.2052E-03 - 3.5481E+01 8.6274E-03 6.9213E-03 1.9276E-03 1.4834E-03 - 3.9811E+01 6.1540E-03 4.8872E-03 1.2891E-03 9.9352E-04 - 4.4668E+01 4.3713E-03 3.4625E-03 8.6498E-04 6.6122E-04 - 5.0119E+01 3.1138E-03 2.4576E-03 5.7835E-04 4.4452E-04 - 5.6234E+01 2.2186E-03 1.7286E-03 3.8026E-04 2.9763E-04 - 6.3096E+01 1.5683E-03 1.2182E-03 2.5445E-04 1.9454E-04 - 7.0795E+01 1.1092E-03 8.5940E-04 1.6992E-04 1.2879E-04 - 7.9433E+01 7.9253E-04 6.0446E-04 1.1223E-04 8.5423E-05 - 8.9125E+01 5.6127E-04 4.2711E-04 7.4030E-05 5.8283E-05 - 1.0000E+02 3.9837E-04 2.9954E-04 4.9365E-05 3.8897E-05 - 1.1220E+02 2.8160E-04 2.1048E-04 3.2438E-05 2.6083E-05 - 1.2589E+02 1.9970E-04 1.4742E-04 2.1544E-05 1.7484E-05 - 1.4125E+02 1.4147E-04 1.0281E-04 1.4442E-05 1.1545E-05 - 1.5849E+02 9.9623E-05 7.2147E-05 9.4607E-06 7.5998E-06 - 1.7783E+02 6.9968E-05 5.0610E-05 6.2616E-06 5.0019E-06 - 1.9953E+02 4.8988E-05 3.5097E-05 4.1811E-06 3.3738E-06 - 2.2387E+02 3.4382E-05 2.4428E-05 2.7267E-06 2.3048E-06 - 2.5119E+02 2.4120E-05 1.7092E-05 1.8054E-06 1.5580E-06 - 2.8184E+02 1.6905E-05 1.1884E-05 1.2280E-06 1.0007E-06 - 3.1623E+02 1.1888E-05 8.2396E-06 8.2162E-07 6.6769E-07 - 3.5481E+02 8.3163E-06 5.7269E-06 5.5151E-07 4.4355E-07 - 3.9811E+02 5.8211E-06 3.9798E-06 3.7410E-07 2.9476E-07 - 4.4668E+02 4.0711E-06 2.7671E-06 2.4672E-07 1.9831E-07 - 5.0119E+02 2.8537E-06 1.9198E-06 1.6489E-07 1.3308E-07 - 5.6234E+02 1.9930E-06 1.3238E-06 1.1039E-07 8.7688E-08 - 6.3096E+02 1.3903E-06 9.1324E-07 7.4365E-08 5.7516E-08 - 7.0795E+02 9.7007E-07 6.3278E-07 4.9926E-08 3.9369E-08 - 7.9433E+02 6.7053E-07 4.3732E-07 3.3032E-08 2.7009E-08 - 8.9125E+02 4.6752E-07 3.0077E-07 2.1501E-08 1.8110E-08 - 1.0000E+03 3.2543E-07 2.0842E-07 1.4711E-08 1.2066E-08 - 1.1220E+03 2.2400E-07 1.4287E-07 1.0202E-08 7.8069E-09 - 1.2589E+03 1.5534E-07 9.8465E-08 6.7154E-09 5.3025E-09 - 1.4125E+03 1.0776E-07 6.7206E-08 4.3719E-09 3.6207E-09 - 1.5849E+03 7.4097E-08 4.5822E-08 3.0548E-09 2.4181E-09 - 1.7783E+03 5.1183E-08 3.1187E-08 2.0521E-09 1.5324E-09 - 1.9953E+03 3.5091E-08 2.1359E-08 1.3651E-09 1.0117E-09 - 2.2387E+03 2.3997E-08 1.4538E-08 9.1307E-10 6.6659E-10 - 2.5119E+03 1.6498E-08 9.8917E-09 6.1711E-10 4.3865E-10 - 2.8184E+03 1.1326E-08 6.8016E-09 4.1555E-10 2.9198E-10 - 3.1623E+03 7.7811E-09 4.5982E-09 2.7270E-10 2.1280E-10 - 3.5481E+03 5.1597E-09 3.0651E-09 1.7791E-10 1.3808E-10 - 3.9811E+03 3.4804E-09 2.0752E-09 1.1925E-10 9.2232E-11 - 4.4668E+03 2.3727E-09 1.3932E-09 8.1459E-11 6.1373E-11 - 5.0119E+03 1.6137E-09 9.3740E-10 5.1164E-11 3.8835E-11 - 5.6234E+03 1.0865E-09 6.2156E-10 3.3631E-11 2.5256E-11 - 6.3096E+03 7.2469E-10 4.0853E-10 2.3603E-11 1.7347E-11 - 7.0795E+03 4.8714E-10 2.7389E-10 1.6085E-11 1.1065E-11 - 7.9433E+03 3.2605E-10 1.8090E-10 1.0356E-11 7.1824E-12 - 8.9125E+03 2.1811E-10 1.2023E-10 6.6236E-12 4.8424E-12 - 1.0000E+04 1.4685E-10 8.0339E-11 4.2258E-12 3.0430E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8577E+04 1.9134E+04 9.2001E+03 8.5553E+03 - 1.1220E-01 1.5918E+04 1.6311E+04 8.0326E+03 7.3317E+03 - 1.2589E-01 1.3541E+04 1.3916E+04 6.8687E+03 6.1813E+03 - 1.4125E-01 1.1494E+04 1.1791E+04 5.8621E+03 5.1745E+03 - 1.5849E-01 9.6326E+03 9.8344E+03 4.9777E+03 4.3499E+03 - 1.7783E-01 8.0286E+03 8.1301E+03 4.1635E+03 3.5875E+03 - 1.9953E-01 6.6188E+03 6.6592E+03 3.4731E+03 2.9201E+03 - 2.2387E-01 5.3344E+03 5.4197E+03 2.8741E+03 2.3902E+03 - 2.5119E-01 4.2767E+03 4.3635E+03 2.3351E+03 1.9224E+03 - 2.8184E-01 3.4109E+03 3.4799E+03 1.9027E+03 1.5317E+03 - 3.1623E-01 2.6778E+03 2.7542E+03 1.5331E+03 1.2095E+03 - 3.5481E-01 2.0839E+03 2.1461E+03 1.2123E+03 9.5274E+02 - 3.9811E-01 1.6198E+03 1.6590E+03 9.5211E+02 7.4614E+02 - 4.4668E-01 1.2713E+03 1.2994E+03 7.4722E+02 5.7624E+02 - 5.0119E-01 9.7918E+02 9.9817E+02 5.8083E+02 4.4297E+02 - 5.6234E-01 7.4516E+02 7.5215E+02 4.4706E+02 3.3803E+02 - 6.3096E-01 5.6604E+02 5.7697E+02 3.4576E+02 2.5797E+02 - 7.0795E-01 4.2902E+02 4.3607E+02 2.6235E+02 1.9736E+02 - 7.9433E-01 3.2729E+02 3.2685E+02 1.9715E+02 1.4953E+02 - 8.9125E-01 2.4696E+02 2.4868E+02 1.4959E+02 1.0995E+02 - 1.0000E+00 1.8312E+02 1.8472E+02 1.1161E+02 8.3234E+01 - 1.1220E+00 1.3819E+02 1.3863E+02 8.3431E+01 6.1881E+01 - 1.2589E+00 1.0307E+02 1.0377E+02 6.2261E+01 4.5873E+01 - 1.4125E+00 7.7194E+01 7.6928E+01 4.5579E+01 3.4313E+01 - 1.5849E+00 5.8244E+01 5.7353E+01 3.3651E+01 2.5411E+01 - 1.7783E+00 4.3289E+01 4.2093E+01 2.4995E+01 1.8505E+01 - 1.9953E+00 3.1890E+01 3.0637E+01 1.8257E+01 1.3399E+01 - 2.2387E+00 2.3671E+01 2.2558E+01 1.3254E+01 9.8765E+00 - 2.5119E+00 1.7337E+01 1.6416E+01 9.7447E+00 7.2387E+00 - 2.8184E+00 1.2552E+01 1.1943E+01 7.0959E+00 5.2005E+00 - 3.1623E+00 9.2894E+00 8.7621E+00 5.0043E+00 3.7307E+00 - 3.5481E+00 6.7600E+00 6.3514E+00 3.5503E+00 2.6624E+00 - 3.9811E+00 4.8789E+00 4.5415E+00 2.5190E+00 1.8849E+00 - 4.4668E+00 3.5522E+00 3.2538E+00 1.7912E+00 1.3438E+00 - 5.0119E+00 2.5910E+00 2.3497E+00 1.2556E+00 9.5920E-01 - 5.6234E+00 1.8630E+00 1.6883E+00 8.6847E-01 6.8039E-01 - 6.3096E+00 1.3293E+00 1.1922E+00 6.1014E-01 4.6690E-01 - 7.0795E+00 9.5100E-01 8.5119E-01 4.2242E-01 3.1811E-01 - 7.9433E+00 6.8268E-01 6.1318E-01 2.9761E-01 2.1650E-01 - 8.9125E+00 4.9924E-01 4.3380E-01 2.0951E-01 1.4679E-01 - 1.0000E+01 3.5059E-01 3.0808E-01 1.4090E-01 1.0610E-01 - 1.1220E+01 2.5048E-01 2.1820E-01 9.7189E-02 7.2761E-02 - 1.2589E+01 1.8010E-01 1.5564E-01 6.6509E-02 4.9390E-02 - 1.4125E+01 1.2887E-01 1.0920E-01 4.5593E-02 3.3408E-02 - 1.5849E+01 9.2218E-02 7.7137E-02 3.1283E-02 2.3252E-02 - 1.7783E+01 6.5823E-02 5.5085E-02 2.0679E-02 1.5737E-02 - 1.9953E+01 4.7182E-02 3.8854E-02 1.3721E-02 1.0466E-02 - 2.2387E+01 3.3353E-02 2.7636E-02 9.4625E-03 7.0950E-03 - 2.5119E+01 2.3511E-02 1.9766E-02 6.5198E-03 4.9037E-03 - 2.8184E+01 1.7001E-02 1.4057E-02 4.3989E-03 3.3099E-03 - 3.1623E+01 1.2097E-02 9.8245E-03 2.8813E-03 2.2045E-03 - 3.5481E+01 8.6194E-03 6.9565E-03 1.9254E-03 1.4851E-03 - 3.9811E+01 6.1425E-03 4.9341E-03 1.2874E-03 1.0011E-03 - 4.4668E+01 4.3903E-03 3.4881E-03 8.5814E-04 6.7495E-04 - 5.0119E+01 3.1271E-03 2.4495E-03 5.7298E-04 4.4703E-04 - 5.6234E+01 2.2140E-03 1.7226E-03 3.8197E-04 2.9574E-04 - 6.3096E+01 1.5763E-03 1.2143E-03 2.5619E-04 1.9702E-04 - 7.0795E+01 1.1164E-03 8.5701E-04 1.6888E-04 1.3136E-04 - 7.9433E+01 7.8628E-04 6.0488E-04 1.1127E-04 8.7060E-05 - 8.9125E+01 5.5877E-04 4.2809E-04 7.3812E-05 5.7595E-05 - 1.0000E+02 4.0004E-04 2.9933E-04 4.9367E-05 3.8786E-05 - 1.1220E+02 2.8234E-04 2.1016E-04 3.2758E-05 2.5541E-05 - 1.2589E+02 1.9922E-04 1.4735E-04 2.1598E-05 1.7062E-05 - 1.4125E+02 1.4073E-04 1.0334E-04 1.4330E-05 1.1443E-05 - 1.5849E+02 9.9063E-05 7.2190E-05 9.5226E-06 7.5765E-06 - 1.7783E+02 7.0005E-05 5.0531E-05 6.2963E-06 4.9507E-06 - 1.9953E+02 4.9378E-05 3.5257E-05 4.1431E-06 3.3251E-06 - 2.2387E+02 3.4497E-05 2.4593E-05 2.8178E-06 2.2527E-06 - 2.5119E+02 2.4095E-05 1.7115E-05 1.8881E-06 1.4840E-06 - 2.8184E+02 1.6995E-05 1.1876E-05 1.2498E-06 1.0143E-06 - 3.1623E+02 1.1907E-05 8.2668E-06 8.2247E-07 6.6033E-07 - 3.5481E+02 8.3236E-06 5.7281E-06 5.5138E-07 4.4340E-07 - 3.9811E+02 5.8123E-06 3.9685E-06 3.6682E-07 2.9652E-07 - 4.4668E+02 4.0554E-06 2.7588E-06 2.4190E-07 1.9796E-07 - 5.0119E+02 2.8290E-06 1.9139E-06 1.6151E-07 1.3586E-07 - 5.6234E+02 1.9930E-06 1.3281E-06 1.0943E-07 8.9378E-08 - 6.3096E+02 1.3865E-06 9.1473E-07 7.3780E-08 5.9163E-08 - 7.0795E+02 9.6213E-07 6.2894E-07 5.0851E-08 3.9430E-08 - 7.9433E+02 6.7099E-07 4.3498E-07 3.3756E-08 2.5774E-08 - 8.9125E+02 4.6788E-07 3.0053E-07 2.1577E-08 1.7464E-08 - 1.0000E+03 3.2480E-07 2.0688E-07 1.4997E-08 1.1921E-08 - 1.1220E+03 2.2454E-07 1.4272E-07 1.0329E-08 7.8976E-09 - 1.2589E+03 1.5534E-07 9.8273E-08 6.9708E-09 5.2997E-09 - 1.4125E+03 1.0708E-07 6.6819E-08 4.5939E-09 3.5815E-09 - 1.5849E+03 7.4361E-08 4.6366E-08 2.9988E-09 2.4805E-09 - 1.7783E+03 5.1678E-08 3.1550E-08 2.0279E-09 1.6294E-09 - 1.9953E+03 3.5390E-08 2.1399E-08 1.3905E-09 1.0551E-09 - 2.2387E+03 2.3993E-08 1.4684E-08 9.0273E-10 7.2461E-10 - 2.5119E+03 1.6480E-08 9.9818E-09 5.6851E-10 4.8437E-10 - 2.8184E+03 1.1289E-08 6.7602E-09 4.0471E-10 3.0081E-10 - 3.1623E+03 7.8423E-09 4.6007E-09 2.7291E-10 1.9035E-10 - 3.5481E+03 5.2188E-09 3.0794E-09 1.8174E-10 1.2717E-10 - 3.9811E+03 3.5067E-09 2.0704E-09 1.2248E-10 8.7973E-11 - 4.4668E+03 2.3807E-09 1.3961E-09 8.0794E-11 5.8130E-11 - 5.0119E+03 1.6144E-09 9.3476E-10 5.2776E-11 3.9144E-11 - 5.6234E+03 1.0884E-09 6.2197E-10 3.7034E-11 2.6154E-11 - 6.3096E+03 7.2828E-10 4.1369E-10 2.2381E-11 1.7271E-11 - 7.0795E+03 4.9237E-10 2.7728E-10 1.4350E-11 1.0888E-11 - 7.9433E+03 3.2654E-10 1.8383E-10 9.7007E-12 6.6338E-12 - 8.9125E+03 2.1534E-10 1.2059E-10 6.0210E-12 4.4686E-12 - 1.0000E+04 1.4322E-10 7.9513E-11 4.1283E-12 3.1144E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.0013E+04 2.0780E+04 1.0126E+04 8.9844E+03 - 1.1220E-01 1.7092E+04 1.7729E+04 8.8241E+03 7.7198E+03 - 1.2589E-01 1.4576E+04 1.5073E+04 7.5781E+03 6.5373E+03 - 1.4125E-01 1.2327E+04 1.2700E+04 6.4263E+03 5.4651E+03 - 1.5849E-01 1.0340E+04 1.0628E+04 5.4223E+03 4.5550E+03 - 1.7783E-01 8.5710E+03 8.8153E+03 4.5629E+03 3.7500E+03 - 1.9953E-01 6.9432E+03 7.2037E+03 3.7932E+03 3.0644E+03 - 2.2387E-01 5.5976E+03 5.8328E+03 3.1037E+03 2.4854E+03 - 2.5119E-01 4.4725E+03 4.6763E+03 2.5263E+03 1.9952E+03 - 2.8184E-01 3.5362E+03 3.6932E+03 2.0538E+03 1.5857E+03 - 3.1623E-01 2.7863E+03 2.8886E+03 1.6413E+03 1.2504E+03 - 3.5481E-01 2.1694E+03 2.2659E+03 1.2988E+03 9.8094E+02 - 3.9811E-01 1.6797E+03 1.7698E+03 1.0220E+03 7.6031E+02 - 4.4668E-01 1.2900E+03 1.3591E+03 7.9180E+02 5.8521E+02 - 5.0119E-01 9.8884E+02 1.0395E+03 6.0977E+02 4.4769E+02 - 5.6234E-01 7.5700E+02 7.9265E+02 4.6903E+02 3.4197E+02 - 6.3096E-01 5.7132E+02 5.9874E+02 3.6025E+02 2.6206E+02 - 7.0795E-01 4.3112E+02 4.5249E+02 2.7074E+02 1.9849E+02 - 7.9433E-01 3.2448E+02 3.3887E+02 2.0462E+02 1.4649E+02 - 8.9125E-01 2.3970E+02 2.5218E+02 1.5674E+02 1.0829E+02 - 1.0000E+00 1.8294E+02 1.8956E+02 1.1534E+02 8.2972E+01 - 1.1220E+00 1.3761E+02 1.4140E+02 8.4519E+01 6.2093E+01 - 1.2589E+00 1.0318E+02 1.0537E+02 6.2611E+01 4.6361E+01 - 1.4125E+00 7.7548E+01 7.7657E+01 4.6906E+01 3.3812E+01 - 1.5849E+00 5.7906E+01 5.6833E+01 3.4809E+01 2.4828E+01 - 1.7783E+00 4.2822E+01 4.2052E+01 2.5782E+01 1.8188E+01 - 1.9953E+00 3.1432E+01 3.1118E+01 1.8729E+01 1.3213E+01 - 2.2387E+00 2.3298E+01 2.2728E+01 1.3307E+01 9.7324E+00 - 2.5119E+00 1.7444E+01 1.6672E+01 9.6560E+00 7.1719E+00 - 2.8184E+00 1.2642E+01 1.2078E+01 6.9153E+00 5.2307E+00 - 3.1623E+00 9.3021E+00 8.7389E+00 5.0750E+00 3.7603E+00 - 3.5481E+00 6.8067E+00 6.3406E+00 3.5698E+00 2.6650E+00 - 3.9811E+00 4.9099E+00 4.5669E+00 2.5449E+00 1.8807E+00 - 4.4668E+00 3.5524E+00 3.2805E+00 1.7938E+00 1.3357E+00 - 5.0119E+00 2.5606E+00 2.3572E+00 1.2409E+00 9.5221E-01 - 5.6234E+00 1.8342E+00 1.6909E+00 8.8331E-01 6.6636E-01 - 6.3096E+00 1.3352E+00 1.2200E+00 6.2571E-01 4.6437E-01 - 7.0795E+00 9.5934E-01 8.6492E-01 4.3769E-01 3.1873E-01 - 7.9433E+00 6.8858E-01 6.1388E-01 3.0305E-01 2.2347E-01 - 8.9125E+00 4.9332E-01 4.3668E-01 2.0568E-01 1.6005E-01 - 1.0000E+01 3.5535E-01 3.1082E-01 1.4137E-01 1.0602E-01 - 1.1220E+01 2.5383E-01 2.2173E-01 9.6588E-02 7.3221E-02 - 1.2589E+01 1.8358E-01 1.5664E-01 6.6241E-02 5.0540E-02 - 1.4125E+01 1.3172E-01 1.1095E-01 4.5232E-02 3.4162E-02 - 1.5849E+01 9.2381E-02 7.8771E-02 3.0962E-02 2.3341E-02 - 1.7783E+01 6.5212E-02 5.5680E-02 2.1083E-02 1.5946E-02 - 1.9953E+01 4.7320E-02 4.0041E-02 1.4441E-02 1.0748E-02 - 2.2387E+01 3.4470E-02 2.8001E-02 9.7982E-03 7.4279E-03 - 2.5119E+01 2.4459E-02 1.9654E-02 6.6538E-03 5.0634E-03 - 2.8184E+01 1.7503E-02 1.4003E-02 4.5131E-03 3.3593E-03 - 3.1623E+01 1.2134E-02 9.7809E-03 2.8912E-03 2.2201E-03 - 3.5481E+01 8.6395E-03 6.9364E-03 1.9399E-03 1.4937E-03 - 3.9811E+01 6.1501E-03 4.9074E-03 1.2905E-03 9.9814E-04 - 4.4668E+01 4.3876E-03 3.4696E-03 8.6056E-04 6.6698E-04 - 5.0119E+01 3.1164E-03 2.4458E-03 5.7661E-04 4.4376E-04 - 5.6234E+01 2.2207E-03 1.7240E-03 3.8584E-04 2.9666E-04 - 6.3096E+01 1.5821E-03 1.2211E-03 2.5407E-04 1.9987E-04 - 7.0795E+01 1.1266E-03 8.6290E-04 1.6733E-04 1.3025E-04 - 7.9433E+01 7.9555E-04 6.0691E-04 1.1253E-04 8.7857E-05 - 8.9125E+01 5.6076E-04 4.2440E-04 7.5917E-05 6.0238E-05 - 1.0000E+02 3.9884E-04 3.0060E-04 4.9543E-05 3.9142E-05 - 1.1220E+02 2.8222E-04 2.1093E-04 3.2791E-05 2.6056E-05 - 1.2589E+02 1.9983E-04 1.4733E-04 2.1810E-05 1.7167E-05 - 1.4125E+02 1.4133E-04 1.0319E-04 1.4341E-05 1.1401E-05 - 1.5849E+02 9.9403E-05 7.2467E-05 9.4992E-06 7.6780E-06 - 1.7783E+02 7.0142E-05 5.0771E-05 6.3358E-06 5.1093E-06 - 1.9953E+02 4.9488E-05 3.5239E-05 4.1620E-06 3.4185E-06 - 2.2387E+02 3.4738E-05 2.4570E-05 2.7705E-06 2.2671E-06 - 2.5119E+02 2.4402E-05 1.7222E-05 1.8473E-06 1.4872E-06 - 2.8184E+02 1.7145E-05 1.1912E-05 1.2134E-06 9.8946E-07 - 3.1623E+02 1.1942E-05 8.2502E-06 8.1473E-07 6.6168E-07 - 3.5481E+02 8.3395E-06 5.7247E-06 5.4865E-07 4.4513E-07 - 3.9811E+02 5.8259E-06 3.9854E-06 3.6682E-07 2.9839E-07 - 4.4668E+02 4.0856E-06 2.7687E-06 2.4425E-07 1.9946E-07 - 5.0119E+02 2.8622E-06 1.9195E-06 1.6203E-07 1.3255E-07 - 5.6234E+02 1.9913E-06 1.3237E-06 1.1118E-07 8.7148E-08 - 6.3096E+02 1.3884E-06 9.1597E-07 7.4328E-08 5.9011E-08 - 7.0795E+02 9.6907E-07 6.3710E-07 5.0116E-08 3.9865E-08 - 7.9433E+02 6.7554E-07 4.3606E-07 3.3812E-08 2.6503E-08 - 8.9125E+02 4.7195E-07 2.9969E-07 2.2313E-08 1.7823E-08 - 1.0000E+03 3.2650E-07 2.0803E-07 1.4808E-08 1.2239E-08 - 1.1220E+03 2.2594E-07 1.4303E-07 1.0102E-08 8.1256E-09 - 1.2589E+03 1.5625E-07 9.7800E-08 6.8544E-09 5.3948E-09 - 1.4125E+03 1.0714E-07 6.7201E-08 4.7306E-09 3.5018E-09 - 1.5849E+03 7.3567E-08 4.6019E-08 3.1254E-09 2.2754E-09 - 1.7783E+03 5.1093E-08 3.1245E-08 1.9863E-09 1.5679E-09 - 1.9953E+03 3.5245E-08 2.1352E-08 1.3900E-09 1.0516E-09 - 2.2387E+03 2.4160E-08 1.4594E-08 9.3688E-10 6.9650E-10 - 2.5119E+03 1.6531E-08 9.9461E-09 6.1942E-10 4.7760E-10 - 2.8184E+03 1.1257E-08 6.7094E-09 4.1392E-10 3.0225E-10 - 3.1623E+03 7.8232E-09 4.6175E-09 2.7121E-10 2.0391E-10 - 3.5481E+03 5.2307E-09 3.0947E-09 1.7728E-10 1.3710E-10 - 3.9811E+03 3.5205E-09 2.0961E-09 1.1759E-10 8.9259E-11 - 4.4668E+03 2.3755E-09 1.4108E-09 7.8445E-11 5.7249E-11 - 5.0119E+03 1.5960E-09 9.4269E-10 5.3107E-11 3.8661E-11 - 5.6234E+03 1.0710E-09 6.2304E-10 3.4764E-11 2.6709E-11 - 6.3096E+03 7.3170E-10 4.1933E-10 2.1925E-11 1.6033E-11 - 7.0795E+03 4.8977E-10 2.7953E-10 1.5761E-11 1.0243E-11 - 7.9433E+03 3.2484E-10 1.8394E-10 1.0472E-11 6.9837E-12 - 8.9125E+03 2.1879E-10 1.2165E-10 6.5772E-12 4.9668E-12 - 1.0000E+04 1.4676E-10 7.9941E-11 4.4527E-12 3.1219E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2073E+04 2.2859E+04 1.1461E+04 9.8179E+03 - 1.1220E-01 1.8771E+04 1.9509E+04 9.8933E+03 8.4000E+03 - 1.2589E-01 1.5901E+04 1.6516E+04 8.4612E+03 7.0731E+03 - 1.4125E-01 1.3333E+04 1.3855E+04 7.1649E+03 5.9135E+03 - 1.5849E-01 1.1104E+04 1.1512E+04 5.9867E+03 4.8890E+03 - 1.7783E-01 9.0991E+03 9.4950E+03 4.9744E+03 4.0027E+03 - 1.9953E-01 7.3612E+03 7.7306E+03 4.0901E+03 3.2467E+03 - 2.2387E-01 5.9236E+03 6.2034E+03 3.3521E+03 2.5921E+03 - 2.5119E-01 4.7080E+03 4.9093E+03 2.7257E+03 2.0793E+03 - 2.8184E-01 3.7172E+03 3.8562E+03 2.1837E+03 1.6559E+03 - 3.1623E-01 2.9032E+03 3.0199E+03 1.7349E+03 1.2903E+03 - 3.5481E-01 2.2527E+03 2.3361E+03 1.3618E+03 1.0038E+03 - 3.9811E-01 1.7326E+03 1.7947E+03 1.0561E+03 7.7251E+02 - 4.4668E-01 1.3170E+03 1.3758E+03 8.1520E+02 5.8383E+02 - 5.0119E-01 9.9643E+02 1.0484E+03 6.2565E+02 4.4617E+02 - 5.6234E-01 7.5609E+02 7.9568E+02 4.7673E+02 3.4556E+02 - 6.3096E-01 5.7560E+02 6.0274E+02 3.6345E+02 2.6206E+02 - 7.0795E-01 4.3005E+02 4.5208E+02 2.7149E+02 1.9283E+02 - 7.9433E-01 3.2105E+02 3.3528E+02 2.0445E+02 1.4594E+02 - 8.9125E-01 2.4322E+02 2.4751E+02 1.5401E+02 1.1183E+02 - 1.0000E+00 1.8323E+02 1.8860E+02 1.1541E+02 8.2248E+01 - 1.1220E+00 1.3755E+02 1.4131E+02 8.6052E+01 6.0764E+01 - 1.2589E+00 1.0336E+02 1.0481E+02 6.2751E+01 4.5566E+01 - 1.4125E+00 7.7329E+01 7.7473E+01 4.6377E+01 3.3883E+01 - 1.5849E+00 5.8357E+01 5.7305E+01 3.4714E+01 2.4919E+01 - 1.7783E+00 4.3431E+01 4.2763E+01 2.5435E+01 1.8223E+01 - 1.9953E+00 3.2025E+01 3.1254E+01 1.8644E+01 1.3406E+01 - 2.2387E+00 2.3566E+01 2.2525E+01 1.3453E+01 9.9566E+00 - 2.5119E+00 1.7404E+01 1.6557E+01 9.6668E+00 7.2941E+00 - 2.8184E+00 1.2822E+01 1.2027E+01 7.0049E+00 5.0955E+00 - 3.1623E+00 9.3260E+00 8.7177E+00 4.9747E+00 3.7356E+00 - 3.5481E+00 6.7855E+00 6.2782E+00 3.5911E+00 2.6604E+00 - 3.9811E+00 4.9010E+00 4.5889E+00 2.5373E+00 1.8817E+00 - 4.4668E+00 3.5329E+00 3.3035E+00 1.7842E+00 1.3211E+00 - 5.0119E+00 2.5691E+00 2.3738E+00 1.2770E+00 9.2367E-01 - 5.6234E+00 1.8567E+00 1.6981E+00 8.9615E-01 6.6052E-01 - 6.3096E+00 1.3275E+00 1.2079E+00 6.2478E-01 4.7634E-01 - 7.0795E+00 9.5983E-01 8.6581E-01 4.3539E-01 3.2683E-01 - 7.9433E+00 6.9223E-01 6.0742E-01 3.0071E-01 2.1992E-01 - 8.9125E+00 4.9064E-01 4.3981E-01 2.0330E-01 1.5480E-01 - 1.0000E+01 3.5707E-01 3.0743E-01 1.4163E-01 1.0594E-01 - 1.1220E+01 2.5551E-01 2.1965E-01 9.7634E-02 7.2338E-02 - 1.2589E+01 1.8107E-01 1.5647E-01 6.6730E-02 4.9976E-02 - 1.4125E+01 1.2969E-01 1.0978E-01 4.5238E-02 3.4525E-02 - 1.5849E+01 9.1626E-02 7.7223E-02 3.0913E-02 2.2839E-02 - 1.7783E+01 6.4952E-02 5.5020E-02 2.0927E-02 1.5456E-02 - 1.9953E+01 4.6721E-02 3.9316E-02 1.4120E-02 1.0691E-02 - 2.2387E+01 3.3121E-02 2.7662E-02 9.3756E-03 7.4021E-03 - 2.5119E+01 2.3599E-02 1.9572E-02 6.3043E-03 4.9662E-03 - 2.8184E+01 1.6852E-02 1.3674E-02 4.2963E-03 3.3695E-03 - 3.1623E+01 1.2107E-02 9.8227E-03 2.9045E-03 2.2285E-03 - 3.5481E+01 8.6186E-03 6.9562E-03 1.9509E-03 1.4856E-03 - 3.9811E+01 6.1553E-03 4.9302E-03 1.3039E-03 9.9373E-04 - 4.4668E+01 4.3935E-03 3.4893E-03 8.6720E-04 6.6682E-04 - 5.0119E+01 3.1309E-03 2.4635E-03 5.7579E-04 4.4844E-04 - 5.6234E+01 2.2316E-03 1.7336E-03 3.8028E-04 2.9750E-04 - 6.3096E+01 1.5871E-03 1.2208E-03 2.5384E-04 1.9652E-04 - 7.0795E+01 1.1236E-03 8.6066E-04 1.7050E-04 1.3073E-04 - 7.9433E+01 7.9586E-04 6.1046E-04 1.1129E-04 8.7857E-05 - 8.9125E+01 5.6539E-04 4.2944E-04 7.3446E-05 5.9061E-05 - 1.0000E+02 3.9877E-04 3.0034E-04 4.9445E-05 3.8762E-05 - 1.1220E+02 2.8188E-04 2.1027E-04 3.2860E-05 2.5757E-05 - 1.2589E+02 1.9951E-04 1.4756E-04 2.1690E-05 1.7316E-05 - 1.4125E+02 1.4074E-04 1.0349E-04 1.4438E-05 1.1482E-05 - 1.5849E+02 9.9534E-05 7.2150E-05 9.5381E-06 7.6062E-06 - 1.7783E+02 7.0189E-05 5.0403E-05 6.2461E-06 4.9824E-06 - 1.9953E+02 4.9289E-05 3.5282E-05 4.1383E-06 3.3016E-06 - 2.2387E+02 3.4588E-05 2.4634E-05 2.7583E-06 2.2342E-06 - 2.5119E+02 2.4227E-05 1.7225E-05 1.8711E-06 1.5098E-06 - 2.8184E+02 1.6961E-05 1.1968E-05 1.2433E-06 1.0010E-06 - 3.1623E+02 1.1911E-05 8.2965E-06 8.3635E-07 6.7553E-07 - 3.5481E+02 8.3356E-06 5.7485E-06 5.5535E-07 4.5031E-07 - 3.9811E+02 5.8407E-06 4.0034E-06 3.6777E-07 3.0451E-07 - 4.4668E+02 4.1110E-06 2.7805E-06 2.4496E-07 2.0041E-07 - 5.0119E+02 2.8662E-06 1.9324E-06 1.6627E-07 1.3276E-07 - 5.6234E+02 1.9976E-06 1.3343E-06 1.1215E-07 8.9098E-08 - 6.3096E+02 1.3872E-06 9.2026E-07 7.3831E-08 5.9881E-08 - 7.0795E+02 9.7004E-07 6.3488E-07 4.8894E-08 3.9166E-08 - 7.9433E+02 6.7328E-07 4.3821E-07 3.3130E-08 2.6187E-08 - 8.9125E+02 4.6740E-07 3.0350E-07 2.2172E-08 1.8132E-08 - 1.0000E+03 3.2561E-07 2.0936E-07 1.5232E-08 1.2235E-08 - 1.1220E+03 2.2574E-07 1.4401E-07 1.0267E-08 8.2007E-09 - 1.2589E+03 1.5677E-07 9.8927E-08 6.9511E-09 5.2874E-09 - 1.4125E+03 1.0835E-07 6.7417E-08 4.6813E-09 3.4756E-09 - 1.5849E+03 7.4579E-08 4.6230E-08 3.0253E-09 2.3256E-09 - 1.7783E+03 5.1207E-08 3.1611E-08 2.0194E-09 1.5546E-09 - 1.9953E+03 3.5098E-08 2.1675E-08 1.3932E-09 1.0266E-09 - 2.2387E+03 2.4105E-08 1.4732E-08 9.1441E-10 6.6924E-10 - 2.5119E+03 1.6601E-08 9.9159E-09 6.0800E-10 4.4445E-10 - 2.8184E+03 1.1381E-08 6.6884E-09 4.0481E-10 3.0655E-10 - 3.1623E+03 7.8194E-09 4.6433E-09 2.7388E-10 2.1019E-10 - 3.5481E+03 5.2353E-09 3.1032E-09 1.8369E-10 1.3790E-10 - 3.9811E+03 3.5488E-09 2.0731E-09 1.1968E-10 9.2136E-11 - 4.4668E+03 2.4037E-09 1.3948E-09 8.0831E-11 6.0367E-11 - 5.0119E+03 1.6186E-09 9.3092E-10 5.2826E-11 3.9865E-11 - 5.6234E+03 1.0836E-09 6.1478E-10 3.4909E-11 2.5117E-11 - 6.3096E+03 7.3162E-10 4.1870E-10 2.2713E-11 1.6724E-11 - 7.0795E+03 4.9056E-10 2.7904E-10 1.5430E-11 1.1330E-11 - 7.9433E+03 3.2770E-10 1.8550E-10 1.0267E-11 7.3848E-12 - 8.9125E+03 2.1732E-10 1.2373E-10 6.9525E-12 4.7045E-12 - 1.0000E+04 1.4453E-10 8.1397E-11 4.7077E-12 3.2817E-12 -average flux in [cosZ =-0.30 -- -0.20, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.2910E+04 2.3571E+04 1.1918E+04 1.0006E+04 - 1.1220E-01 1.9498E+04 2.0024E+04 1.0245E+04 8.5550E+03 - 1.2589E-01 1.6436E+04 1.6779E+04 8.7172E+03 7.1996E+03 - 1.4125E-01 1.3736E+04 1.4020E+04 7.3331E+03 5.9839E+03 - 1.5849E-01 1.1337E+04 1.1688E+04 6.1386E+03 4.9187E+03 - 1.7783E-01 9.2758E+03 9.5943E+03 5.0925E+03 3.9996E+03 - 1.9953E-01 7.4903E+03 7.7804E+03 4.1752E+03 3.2637E+03 - 2.2387E-01 5.9864E+03 6.2305E+03 3.4033E+03 2.6376E+03 - 2.5119E-01 4.7274E+03 4.9388E+03 2.7520E+03 2.0932E+03 - 2.8184E-01 3.6999E+03 3.8597E+03 2.2027E+03 1.6565E+03 - 3.1623E-01 2.8844E+03 3.0138E+03 1.7348E+03 1.3104E+03 - 3.5481E-01 2.2406E+03 2.3534E+03 1.3575E+03 1.0201E+03 - 3.9811E-01 1.7320E+03 1.8149E+03 1.0576E+03 7.8086E+02 - 4.4668E-01 1.3170E+03 1.3930E+03 8.1701E+02 6.0108E+02 - 5.0119E-01 9.9725E+02 1.0549E+03 6.2670E+02 4.6036E+02 - 5.6234E-01 7.5682E+02 7.9228E+02 4.7894E+02 3.4432E+02 - 6.3096E-01 5.7504E+02 5.9618E+02 3.6025E+02 2.6099E+02 - 7.0795E-01 4.3477E+02 4.4936E+02 2.6854E+02 1.9660E+02 - 7.9433E-01 3.2723E+02 3.4215E+02 2.0341E+02 1.4601E+02 - 8.9125E-01 2.4647E+02 2.5469E+02 1.5270E+02 1.1033E+02 - 1.0000E+00 1.8415E+02 1.8851E+02 1.1429E+02 8.2746E+01 - 1.1220E+00 1.3716E+02 1.4033E+02 8.5395E+01 6.1581E+01 - 1.2589E+00 1.0296E+02 1.0472E+02 6.3457E+01 4.6107E+01 - 1.4125E+00 7.7709E+01 7.7723E+01 4.7039E+01 3.4205E+01 - 1.5849E+00 5.7595E+01 5.7041E+01 3.4544E+01 2.4855E+01 - 1.7783E+00 4.2683E+01 4.2146E+01 2.5311E+01 1.8309E+01 - 1.9953E+00 3.1862E+01 3.1192E+01 1.8618E+01 1.3526E+01 - 2.2387E+00 2.3267E+01 2.2879E+01 1.3466E+01 9.9745E+00 - 2.5119E+00 1.7060E+01 1.6584E+01 9.6777E+00 7.1926E+00 - 2.8184E+00 1.2612E+01 1.1950E+01 7.0268E+00 5.0409E+00 - 3.1623E+00 9.2329E+00 8.7591E+00 5.0477E+00 3.7418E+00 - 3.5481E+00 6.6944E+00 6.3079E+00 3.5620E+00 2.6813E+00 - 3.9811E+00 4.8732E+00 4.5467E+00 2.5208E+00 1.8838E+00 - 4.4668E+00 3.5448E+00 3.2819E+00 1.7920E+00 1.3353E+00 - 5.0119E+00 2.5643E+00 2.3512E+00 1.2574E+00 9.4457E-01 - 5.6234E+00 1.8472E+00 1.6925E+00 8.8092E-01 6.7005E-01 - 6.3096E+00 1.3472E+00 1.2249E+00 6.2133E-01 4.6769E-01 - 7.0795E+00 9.6659E-01 8.6168E-01 4.2793E-01 3.2638E-01 - 7.9433E+00 6.9132E-01 6.0893E-01 2.9346E-01 2.2570E-01 - 8.9125E+00 4.8920E-01 4.3463E-01 2.0183E-01 1.5334E-01 - 1.0000E+01 3.4871E-01 3.0532E-01 1.4062E-01 1.0533E-01 - 1.1220E+01 2.5197E-01 2.1597E-01 9.6090E-02 7.2136E-02 - 1.2589E+01 1.7882E-01 1.5380E-01 6.5616E-02 4.9682E-02 - 1.4125E+01 1.2760E-01 1.0947E-01 4.5539E-02 3.4258E-02 - 1.5849E+01 9.1603E-02 7.7008E-02 3.0852E-02 2.3374E-02 - 1.7783E+01 6.5512E-02 5.4127E-02 2.0591E-02 1.5953E-02 - 1.9953E+01 4.6705E-02 3.8706E-02 1.4063E-02 1.0709E-02 - 2.2387E+01 3.2931E-02 2.7686E-02 9.9154E-03 7.0492E-03 - 2.5119E+01 2.3673E-02 1.9345E-02 6.6373E-03 4.7084E-03 - 2.8184E+01 1.6771E-02 1.3694E-02 4.3543E-03 3.1921E-03 - 3.1623E+01 1.2108E-02 9.8375E-03 2.9038E-03 2.2251E-03 - 3.5481E+01 8.6392E-03 6.9549E-03 1.9382E-03 1.4907E-03 - 3.9811E+01 6.1685E-03 4.9209E-03 1.2878E-03 9.9176E-04 - 4.4668E+01 4.3889E-03 3.4709E-03 8.6131E-04 6.6156E-04 - 5.0119E+01 3.1241E-03 2.4426E-03 5.7776E-04 4.4441E-04 - 5.6234E+01 2.2196E-03 1.7314E-03 3.8495E-04 2.9711E-04 - 6.3096E+01 1.5768E-03 1.2250E-03 2.5519E-04 1.9855E-04 - 7.0795E+01 1.1226E-03 8.6211E-04 1.7043E-04 1.3343E-04 - 7.9433E+01 7.9422E-04 6.0741E-04 1.1398E-04 8.9071E-05 - 8.9125E+01 5.6310E-04 4.2640E-04 7.5523E-05 5.8761E-05 - 1.0000E+02 3.9985E-04 3.0064E-04 4.9550E-05 3.9126E-05 - 1.1220E+02 2.8290E-04 2.1080E-04 3.2924E-05 2.6117E-05 - 1.2589E+02 2.0040E-04 1.4769E-04 2.1661E-05 1.7343E-05 - 1.4125E+02 1.4166E-04 1.0333E-04 1.4293E-05 1.1422E-05 - 1.5849E+02 9.9799E-05 7.1879E-05 9.4463E-06 7.6049E-06 - 1.7783E+02 7.0129E-05 5.0294E-05 6.2390E-06 5.0644E-06 - 1.9953E+02 4.9213E-05 3.5161E-05 4.1319E-06 3.3832E-06 - 2.2387E+02 3.4466E-05 2.4473E-05 2.7953E-06 2.2769E-06 - 2.5119E+02 2.4177E-05 1.7169E-05 1.8742E-06 1.5084E-06 - 2.8184E+02 1.6971E-05 1.1970E-05 1.2161E-06 9.7993E-07 - 3.1623E+02 1.1966E-05 8.2986E-06 8.2841E-07 6.6190E-07 - 3.5481E+02 8.3524E-06 5.7547E-06 5.5605E-07 4.4364E-07 - 3.9811E+02 5.8418E-06 3.9960E-06 3.6912E-07 2.9775E-07 - 4.4668E+02 4.0919E-06 2.7747E-06 2.4667E-07 2.0024E-07 - 5.0119E+02 2.8680E-06 1.9192E-06 1.6601E-07 1.3230E-07 - 5.6234E+02 2.0011E-06 1.3241E-06 1.1116E-07 8.9636E-08 - 6.3096E+02 1.3888E-06 9.1965E-07 7.4563E-08 5.9986E-08 - 7.0795E+02 9.6755E-07 6.3818E-07 4.9848E-08 3.9693E-08 - 7.9433E+02 6.7607E-07 4.4057E-07 3.3008E-08 2.5898E-08 - 8.9125E+02 4.6979E-07 3.0255E-07 2.2279E-08 1.7684E-08 - 1.0000E+03 3.2648E-07 2.0916E-07 1.5078E-08 1.2294E-08 - 1.1220E+03 2.2580E-07 1.4332E-07 9.9577E-09 8.2049E-09 - 1.2589E+03 1.5657E-07 9.8426E-08 6.6484E-09 5.4482E-09 - 1.4125E+03 1.0769E-07 6.7668E-08 4.4390E-09 3.5343E-09 - 1.5849E+03 7.4218E-08 4.6320E-08 2.9294E-09 2.3201E-09 - 1.7783E+03 5.1285E-08 3.1802E-08 1.9339E-09 1.5235E-09 - 1.9953E+03 3.5345E-08 2.1655E-08 1.3585E-09 1.0659E-09 - 2.2387E+03 2.4203E-08 1.4737E-08 8.8790E-10 6.8474E-10 - 2.5119E+03 1.6514E-08 1.0030E-08 5.9775E-10 4.5116E-10 - 2.8184E+03 1.1339E-08 6.6885E-09 4.1434E-10 3.1582E-10 - 3.1623E+03 7.8716E-09 4.6459E-09 2.6909E-10 2.0803E-10 - 3.5481E+03 5.2572E-09 3.0911E-09 1.8121E-10 1.3927E-10 - 3.9811E+03 3.5797E-09 2.0779E-09 1.2318E-10 9.4372E-11 - 4.4668E+03 2.4117E-09 1.3896E-09 8.2655E-11 5.9841E-11 - 5.0119E+03 1.6222E-09 9.3552E-10 5.4248E-11 3.7332E-11 - 5.6234E+03 1.0887E-09 6.2528E-10 3.6756E-11 2.5876E-11 - 6.3096E+03 7.3149E-10 4.1968E-10 2.3198E-11 1.6872E-11 - 7.0795E+03 4.9026E-10 2.8137E-10 1.4920E-11 1.0944E-11 - 7.9433E+03 3.2677E-10 1.8549E-10 9.7275E-12 7.2642E-12 - 8.9125E+03 2.1724E-10 1.2242E-10 6.1769E-12 4.7025E-12 - 1.0000E+04 1.4627E-10 8.0158E-11 4.2077E-12 3.0125E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8184E+04 1.8584E+04 9.3539E+03 8.1085E+03 - 1.1220E-01 1.5586E+04 1.5942E+04 8.1140E+03 6.9669E+03 - 1.2589E-01 1.3293E+04 1.3613E+04 6.9511E+03 5.9069E+03 - 1.4125E-01 1.1291E+04 1.1520E+04 5.9196E+03 4.9911E+03 - 1.5849E-01 9.5183E+03 9.6625E+03 4.9948E+03 4.1812E+03 - 1.7783E-01 7.8901E+03 8.0659E+03 4.1885E+03 3.4504E+03 - 1.9953E-01 6.4697E+03 6.5991E+03 3.4901E+03 2.8229E+03 - 2.2387E-01 5.2463E+03 5.3379E+03 2.8821E+03 2.3025E+03 - 2.5119E-01 4.1952E+03 4.3041E+03 2.3470E+03 1.8602E+03 - 2.8184E-01 3.3202E+03 3.4104E+03 1.8961E+03 1.4824E+03 - 3.1623E-01 2.6143E+03 2.6878E+03 1.5146E+03 1.1752E+03 - 3.5481E-01 2.0510E+03 2.1105E+03 1.1969E+03 9.2907E+02 - 3.9811E-01 1.5977E+03 1.6330E+03 9.3997E+02 7.2066E+02 - 4.4668E-01 1.2312E+03 1.2497E+03 7.2975E+02 5.5384E+02 - 5.0119E-01 9.4477E+02 9.5993E+02 5.6037E+02 4.2292E+02 - 5.6234E-01 7.2278E+02 7.3193E+02 4.2900E+02 3.2046E+02 - 6.3096E-01 5.5061E+02 5.5185E+02 3.2832E+02 2.4599E+02 - 7.0795E-01 4.1682E+02 4.1714E+02 2.4862E+02 1.8752E+02 - 7.9433E-01 3.1353E+02 3.1458E+02 1.8437E+02 1.4150E+02 - 8.9125E-01 2.3355E+02 2.3484E+02 1.4003E+02 1.0615E+02 - 1.0000E+00 1.7533E+02 1.7632E+02 1.0339E+02 7.8736E+01 - 1.1220E+00 1.3177E+02 1.3214E+02 7.6236E+01 5.8992E+01 - 1.2589E+00 9.9858E+01 9.8020E+01 5.6539E+01 4.3476E+01 - 1.4125E+00 7.4926E+01 7.2530E+01 4.1936E+01 3.2119E+01 - 1.5849E+00 5.5959E+01 5.3454E+01 3.0575E+01 2.3919E+01 - 1.7783E+00 4.1473E+01 3.9423E+01 2.2442E+01 1.7102E+01 - 1.9953E+00 3.0558E+01 2.9433E+01 1.6373E+01 1.2215E+01 - 2.2387E+00 2.2466E+01 2.1455E+01 1.1637E+01 8.8744E+00 - 2.5119E+00 1.6477E+01 1.5268E+01 8.4709E+00 6.3952E+00 - 2.8184E+00 1.2122E+01 1.1088E+01 6.0725E+00 4.6252E+00 - 3.1623E+00 8.7458E+00 8.0935E+00 4.2893E+00 3.2681E+00 - 3.5481E+00 6.3991E+00 5.8267E+00 3.0745E+00 2.3240E+00 - 3.9811E+00 4.6602E+00 4.1771E+00 2.1710E+00 1.6339E+00 - 4.4668E+00 3.3570E+00 3.0020E+00 1.5198E+00 1.1213E+00 - 5.0119E+00 2.4125E+00 2.1330E+00 1.0706E+00 7.8507E-01 - 5.6234E+00 1.7330E+00 1.5115E+00 7.3405E-01 5.4505E-01 - 6.3096E+00 1.2400E+00 1.0873E+00 5.0464E-01 3.7842E-01 - 7.0795E+00 8.8847E-01 7.7519E-01 3.4405E-01 2.5958E-01 - 7.9433E+00 6.3410E-01 5.4076E-01 2.3855E-01 1.7742E-01 - 8.9125E+00 4.4974E-01 3.8263E-01 1.6699E-01 1.2487E-01 - 1.0000E+01 3.2708E-01 2.7405E-01 1.1293E-01 8.5078E-02 - 1.1220E+01 2.3437E-01 1.9450E-01 7.6058E-02 5.7437E-02 - 1.2589E+01 1.6686E-01 1.3863E-01 5.1433E-02 3.8920E-02 - 1.4125E+01 1.1910E-01 9.8167E-02 3.5181E-02 2.6746E-02 - 1.5849E+01 8.5442E-02 6.9241E-02 2.4009E-02 1.7854E-02 - 1.7783E+01 5.9833E-02 4.9104E-02 1.5882E-02 1.2190E-02 - 1.9953E+01 4.2813E-02 3.5188E-02 1.0717E-02 8.2095E-03 - 2.2387E+01 3.0807E-02 2.4599E-02 7.2811E-03 5.1930E-03 - 2.5119E+01 2.2162E-02 1.7292E-02 4.7280E-03 3.5270E-03 - 2.8184E+01 1.6050E-02 1.2696E-02 3.2572E-03 2.5587E-03 - 3.1623E+01 1.1152E-02 8.7792E-03 2.1188E-03 1.6434E-03 - 3.5481E+01 7.9611E-03 6.2076E-03 1.4159E-03 1.0980E-03 - 3.9811E+01 5.6756E-03 4.3815E-03 9.4853E-04 7.2579E-04 - 4.4668E+01 4.0304E-03 3.0860E-03 6.3374E-04 4.8394E-04 - 5.0119E+01 2.8687E-03 2.1759E-03 4.2047E-04 3.2218E-04 - 5.6234E+01 2.0321E-03 1.5416E-03 2.7892E-04 2.1479E-04 - 6.3096E+01 1.4381E-03 1.0871E-03 1.8459E-04 1.4193E-04 - 7.0795E+01 1.0178E-03 7.6079E-04 1.2219E-04 9.4190E-05 - 7.9433E+01 7.1732E-04 5.3475E-04 8.1594E-05 6.3351E-05 - 8.9125E+01 5.0908E-04 3.7815E-04 5.4044E-05 4.2744E-05 - 1.0000E+02 3.6114E-04 2.6454E-04 3.5586E-05 2.8642E-05 - 1.1220E+02 2.5539E-04 1.8522E-04 2.3517E-05 1.9023E-05 - 1.2589E+02 1.8013E-04 1.2982E-04 1.5839E-05 1.2713E-05 - 1.4125E+02 1.2673E-04 9.0366E-05 1.0604E-05 8.4282E-06 - 1.5849E+02 8.8927E-05 6.3056E-05 7.0539E-06 5.5722E-06 - 1.7783E+02 6.2392E-05 4.4155E-05 4.7155E-06 3.8048E-06 - 1.9953E+02 4.3544E-05 3.0821E-05 3.1105E-06 2.5207E-06 - 2.2387E+02 3.0683E-05 2.1398E-05 2.0286E-06 1.6833E-06 - 2.5119E+02 2.1723E-05 1.4866E-05 1.3979E-06 1.1342E-06 - 2.8184E+02 1.5194E-05 1.0360E-05 9.6288E-07 7.5973E-07 - 3.1623E+02 1.0544E-05 7.1810E-06 6.3235E-07 5.1076E-07 - 3.5481E+02 7.3547E-06 4.9644E-06 4.2326E-07 3.3970E-07 - 3.9811E+02 5.1344E-06 3.4276E-06 2.8544E-07 2.2908E-07 - 4.4668E+02 3.5923E-06 2.3641E-06 1.8958E-07 1.5616E-07 - 5.0119E+02 2.5004E-06 1.6347E-06 1.2726E-07 1.0494E-07 - 5.6234E+02 1.7488E-06 1.1338E-06 8.5721E-08 6.9200E-08 - 6.3096E+02 1.2137E-06 7.8459E-07 5.7851E-08 4.5742E-08 - 7.0795E+02 8.4296E-07 5.4192E-07 3.8476E-08 3.0919E-08 - 7.9433E+02 5.8792E-07 3.7360E-07 2.6353E-08 2.0958E-08 - 8.9125E+02 4.0572E-07 2.5663E-07 1.7551E-08 1.4195E-08 - 1.0000E+03 2.8155E-07 1.7738E-07 1.2024E-08 9.4016E-09 - 1.1220E+03 1.9437E-07 1.2092E-07 8.1041E-09 6.3134E-09 - 1.2589E+03 1.3447E-07 8.2069E-08 5.4318E-09 4.1135E-09 - 1.4125E+03 9.2110E-08 5.5944E-08 3.7280E-09 2.7323E-09 - 1.5849E+03 6.2904E-08 3.8586E-08 2.4055E-09 1.9060E-09 - 1.7783E+03 4.3278E-08 2.6556E-08 1.5972E-09 1.2536E-09 - 1.9953E+03 2.9711E-08 1.7943E-08 1.0959E-09 7.8705E-10 - 2.2387E+03 2.0124E-08 1.2094E-08 7.3627E-10 5.2612E-10 - 2.5119E+03 1.3698E-08 8.2634E-09 4.8329E-10 3.4431E-10 - 2.8184E+03 9.3530E-09 5.6091E-09 3.1679E-10 2.4483E-10 - 3.1623E+03 6.4313E-09 3.7547E-09 2.0758E-10 1.6253E-10 - 3.5481E+03 4.2576E-09 2.4836E-09 1.3885E-10 1.0400E-10 - 3.9811E+03 2.8676E-09 1.6756E-09 9.5749E-11 6.4748E-11 - 4.4668E+03 1.9135E-09 1.1183E-09 6.4983E-11 4.3258E-11 - 5.0119E+03 1.3011E-09 7.4288E-10 4.2486E-11 3.0536E-11 - 5.6234E+03 8.7889E-10 4.9497E-10 2.6561E-11 2.0212E-11 - 6.3096E+03 5.7480E-10 3.3069E-10 1.7597E-11 1.2896E-11 - 7.0795E+03 3.8535E-10 2.1833E-10 1.1987E-11 8.3494E-12 - 7.9433E+03 2.5535E-10 1.4429E-10 7.6105E-12 5.7361E-12 - 8.9125E+03 1.6835E-10 9.6805E-11 5.3016E-12 3.6170E-12 - 1.0000E+04 1.1266E-10 6.4158E-11 3.4951E-12 2.2527E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8479E+04 1.8779E+04 9.3572E+03 8.2752E+03 - 1.1220E-01 1.5795E+04 1.6074E+04 8.1692E+03 7.0923E+03 - 1.2589E-01 1.3528E+04 1.3636E+04 7.0113E+03 6.0074E+03 - 1.4125E-01 1.1480E+04 1.1567E+04 5.9418E+03 5.0851E+03 - 1.5849E-01 9.6077E+03 9.7089E+03 5.0070E+03 4.2228E+03 - 1.7783E-01 7.9391E+03 8.0392E+03 4.1881E+03 3.4787E+03 - 1.9953E-01 6.4865E+03 6.5713E+03 3.4754E+03 2.8703E+03 - 2.2387E-01 5.2537E+03 5.2937E+03 2.8517E+03 2.3317E+03 - 2.5119E-01 4.1968E+03 4.2271E+03 2.3165E+03 1.8781E+03 - 2.8184E-01 3.3362E+03 3.3732E+03 1.8599E+03 1.4953E+03 - 3.1623E-01 2.6235E+03 2.6641E+03 1.4805E+03 1.1827E+03 - 3.5481E-01 2.0510E+03 2.0743E+03 1.1641E+03 9.2782E+02 - 3.9811E-01 1.6033E+03 1.6009E+03 9.1217E+02 7.2450E+02 - 4.4668E-01 1.2295E+03 1.2327E+03 7.0774E+02 5.6613E+02 - 5.0119E-01 9.3915E+02 9.4408E+02 5.4588E+02 4.3255E+02 - 5.6234E-01 7.2208E+02 7.1722E+02 4.1916E+02 3.2771E+02 - 6.3096E-01 5.5079E+02 5.4621E+02 3.1879E+02 2.4819E+02 - 7.0795E-01 4.1754E+02 4.1199E+02 2.4204E+02 1.8740E+02 - 7.9433E-01 3.1537E+02 3.1193E+02 1.8055E+02 1.4371E+02 - 8.9125E-01 2.3635E+02 2.3364E+02 1.3533E+02 1.0669E+02 - 1.0000E+00 1.7660E+02 1.7338E+02 1.0263E+02 7.8739E+01 - 1.1220E+00 1.3318E+02 1.2964E+02 7.5978E+01 5.9066E+01 - 1.2589E+00 1.0037E+02 9.6709E+01 5.6051E+01 4.4088E+01 - 1.4125E+00 7.5277E+01 7.1739E+01 4.1579E+01 3.2114E+01 - 1.5849E+00 5.5954E+01 5.3303E+01 3.0975E+01 2.3496E+01 - 1.7783E+00 4.1326E+01 3.9203E+01 2.2826E+01 1.7313E+01 - 1.9953E+00 3.0563E+01 2.9242E+01 1.6527E+01 1.2626E+01 - 2.2387E+00 2.2540E+01 2.1629E+01 1.1867E+01 9.0487E+00 - 2.5119E+00 1.6625E+01 1.5517E+01 8.3999E+00 6.4368E+00 - 2.8184E+00 1.2060E+01 1.1070E+01 5.9519E+00 4.6943E+00 - 3.1623E+00 8.8064E+00 8.0410E+00 4.3491E+00 3.2995E+00 - 3.5481E+00 6.4219E+00 5.8120E+00 3.0543E+00 2.3155E+00 - 3.9811E+00 4.6037E+00 4.1704E+00 2.1379E+00 1.6345E+00 - 4.4668E+00 3.3157E+00 3.0082E+00 1.5012E+00 1.1502E+00 - 5.0119E+00 2.4269E+00 2.1372E+00 1.0411E+00 7.9282E-01 - 5.6234E+00 1.7373E+00 1.5188E+00 7.2310E-01 5.4999E-01 - 6.3096E+00 1.2389E+00 1.0919E+00 5.0161E-01 3.8648E-01 - 7.0795E+00 8.9457E-01 7.7968E-01 3.5377E-01 2.6374E-01 - 7.9433E+00 6.4818E-01 5.5073E-01 2.4397E-01 1.7880E-01 - 8.9125E+00 4.6448E-01 3.9259E-01 1.6270E-01 1.2542E-01 - 1.0000E+01 3.2550E-01 2.7570E-01 1.1232E-01 8.4376E-02 - 1.1220E+01 2.3341E-01 1.9419E-01 7.6610E-02 5.8112E-02 - 1.2589E+01 1.6531E-01 1.3782E-01 5.1427E-02 3.9122E-02 - 1.4125E+01 1.1822E-01 9.7115E-02 3.4486E-02 2.6328E-02 - 1.5849E+01 8.4842E-02 6.9463E-02 2.3755E-02 1.8097E-02 - 1.7783E+01 6.0409E-02 4.9394E-02 1.5894E-02 1.1907E-02 - 1.9953E+01 4.3153E-02 3.4810E-02 1.0665E-02 7.9232E-03 - 2.2387E+01 3.0589E-02 2.4737E-02 7.0668E-03 5.3219E-03 - 2.5119E+01 2.1634E-02 1.7463E-02 4.6307E-03 3.5937E-03 - 2.8184E+01 1.5162E-02 1.2535E-02 3.1087E-03 2.3465E-03 - 3.1623E+01 1.1139E-02 8.7768E-03 2.1270E-03 1.6400E-03 - 3.5481E+01 7.9365E-03 6.2040E-03 1.4191E-03 1.0966E-03 - 3.9811E+01 5.6540E-03 4.3843E-03 9.5179E-04 7.2766E-04 - 4.4668E+01 4.0287E-03 3.0856E-03 6.3341E-04 4.8494E-04 - 5.0119E+01 2.8638E-03 2.1742E-03 4.1958E-04 3.2356E-04 - 5.6234E+01 2.0229E-03 1.5394E-03 2.7800E-04 2.1534E-04 - 6.3096E+01 1.4313E-03 1.0835E-03 1.8502E-04 1.4515E-04 - 7.0795E+01 1.0143E-03 7.6312E-04 1.2393E-04 9.7550E-05 - 7.9433E+01 7.1886E-04 5.4023E-04 8.1873E-05 6.5261E-05 - 8.9125E+01 5.0616E-04 3.7897E-04 5.4660E-05 4.3215E-05 - 1.0000E+02 3.6074E-04 2.6502E-04 3.6177E-05 2.8385E-05 - 1.1220E+02 2.5474E-04 1.8570E-04 2.4042E-05 1.9079E-05 - 1.2589E+02 1.8006E-04 1.2984E-04 1.5822E-05 1.2676E-05 - 1.4125E+02 1.2643E-04 9.0381E-05 1.0414E-05 8.4257E-06 - 1.5849E+02 8.8547E-05 6.3062E-05 6.9778E-06 5.7304E-06 - 1.7783E+02 6.2404E-05 4.4069E-05 4.7512E-06 3.7926E-06 - 1.9953E+02 4.3770E-05 3.0695E-05 3.2162E-06 2.5009E-06 - 2.2387E+02 3.0506E-05 2.1350E-05 2.0740E-06 1.7042E-06 - 2.5119E+02 2.1388E-05 1.4888E-05 1.3807E-06 1.1265E-06 - 2.8184E+02 1.4968E-05 1.0283E-05 9.5671E-07 7.5900E-07 - 3.1623E+02 1.0563E-05 7.1746E-06 6.2165E-07 5.1167E-07 - 3.5481E+02 7.3813E-06 4.9615E-06 4.2142E-07 3.4205E-07 - 3.9811E+02 5.1318E-06 3.4372E-06 2.8177E-07 2.2955E-07 - 4.4668E+02 3.5924E-06 2.3808E-06 1.8971E-07 1.5550E-07 - 5.0119E+02 2.5184E-06 1.6415E-06 1.2721E-07 1.0456E-07 - 5.6234E+02 1.7496E-06 1.1373E-06 8.6232E-08 6.8831E-08 - 6.3096E+02 1.2117E-06 7.8542E-07 5.7423E-08 4.5929E-08 - 7.0795E+02 8.4733E-07 5.4225E-07 3.8742E-08 3.1286E-08 - 7.9433E+02 5.8627E-07 3.7362E-07 2.6076E-08 2.1495E-08 - 8.9125E+02 4.0421E-07 2.5720E-07 1.7419E-08 1.4060E-08 - 1.0000E+03 2.8056E-07 1.7759E-07 1.1898E-08 9.4845E-09 - 1.1220E+03 1.9327E-07 1.2069E-07 8.1197E-09 6.5050E-09 - 1.2589E+03 1.3343E-07 8.2719E-08 5.5470E-09 4.4007E-09 - 1.4125E+03 9.1608E-08 5.6537E-08 3.6508E-09 2.7970E-09 - 1.5849E+03 6.3053E-08 3.8081E-08 2.3615E-09 1.7429E-09 - 1.7783E+03 4.3059E-08 2.5943E-08 1.6215E-09 1.2494E-09 - 1.9953E+03 2.9494E-08 1.7810E-08 1.0689E-09 8.4647E-10 - 2.2387E+03 2.0082E-08 1.2086E-08 7.2420E-10 5.5818E-10 - 2.5119E+03 1.3617E-08 8.1502E-09 4.8670E-10 3.4085E-10 - 2.8184E+03 9.2379E-09 5.4827E-09 3.0865E-10 2.1991E-10 - 3.1623E+03 6.4294E-09 3.7758E-09 2.1513E-10 1.6050E-10 - 3.5481E+03 4.2806E-09 2.4913E-09 1.4319E-10 1.0609E-10 - 3.9811E+03 2.8878E-09 1.6877E-09 9.3981E-11 6.7043E-11 - 4.4668E+03 1.9419E-09 1.1356E-09 6.3623E-11 4.3599E-11 - 5.0119E+03 1.2918E-09 7.6362E-10 4.0762E-11 3.0024E-11 - 5.6234E+03 8.6316E-10 5.1241E-10 2.7583E-11 1.9022E-11 - 6.3096E+03 5.8452E-10 3.3196E-10 1.7586E-11 1.2274E-11 - 7.0795E+03 3.8828E-10 2.1921E-10 1.1664E-11 8.2017E-12 - 7.9433E+03 2.5895E-10 1.4530E-10 8.0550E-12 5.4920E-12 - 8.9125E+03 1.7291E-10 9.6769E-11 4.5761E-12 3.3322E-12 - 1.0000E+04 1.1403E-10 6.1909E-11 2.9682E-12 2.1570E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8500E+04 1.8467E+04 9.1100E+03 8.2834E+03 - 1.1220E-01 1.5845E+04 1.5790E+04 7.8878E+03 7.1123E+03 - 1.2589E-01 1.3457E+04 1.3376E+04 6.7613E+03 6.0653E+03 - 1.4125E-01 1.1421E+04 1.1287E+04 5.7302E+03 5.0721E+03 - 1.5849E-01 9.5776E+03 9.3991E+03 4.8205E+03 4.2255E+03 - 1.7783E-01 7.9397E+03 7.7526E+03 4.0161E+03 3.5237E+03 - 1.9953E-01 6.4761E+03 6.3664E+03 3.3166E+03 2.8972E+03 - 2.2387E-01 5.2365E+03 5.1607E+03 2.7305E+03 2.3523E+03 - 2.5119E-01 4.2050E+03 4.1266E+03 2.2049E+03 1.8943E+03 - 2.8184E-01 3.3233E+03 3.2810E+03 1.7770E+03 1.5161E+03 - 3.1623E-01 2.6110E+03 2.5804E+03 1.4279E+03 1.1919E+03 - 3.5481E-01 2.0435E+03 2.0060E+03 1.1284E+03 9.3470E+02 - 3.9811E-01 1.5918E+03 1.5547E+03 8.7833E+02 7.3234E+02 - 4.4668E-01 1.2281E+03 1.1948E+03 6.7698E+02 5.6099E+02 - 5.0119E-01 9.3832E+02 9.1372E+02 5.2234E+02 4.3215E+02 - 5.6234E-01 7.1371E+02 6.9583E+02 4.0207E+02 3.3202E+02 - 6.3096E-01 5.4518E+02 5.2922E+02 3.0763E+02 2.5209E+02 - 7.0795E-01 4.1529E+02 3.9819E+02 2.3508E+02 1.8996E+02 - 7.9433E-01 3.1413E+02 3.0164E+02 1.7738E+02 1.4274E+02 - 8.9125E-01 2.3685E+02 2.2719E+02 1.3239E+02 1.0544E+02 - 1.0000E+00 1.7680E+02 1.7056E+02 9.8871E+01 7.9078E+01 - 1.1220E+00 1.3324E+02 1.2794E+02 7.3821E+01 5.8400E+01 - 1.2589E+00 1.0014E+02 9.5013E+01 5.5016E+01 4.3405E+01 - 1.4125E+00 7.4846E+01 7.0435E+01 4.0849E+01 3.2221E+01 - 1.5849E+00 5.5523E+01 5.2574E+01 2.9978E+01 2.3599E+01 - 1.7783E+00 4.1242E+01 3.8953E+01 2.1765E+01 1.7003E+01 - 1.9953E+00 3.0515E+01 2.8310E+01 1.6142E+01 1.2321E+01 - 2.2387E+00 2.2329E+01 2.0846E+01 1.1772E+01 9.0961E+00 - 2.5119E+00 1.6272E+01 1.5139E+01 8.4958E+00 6.4467E+00 - 2.8184E+00 1.1818E+01 1.0857E+01 6.0434E+00 4.5214E+00 - 3.1623E+00 8.8523E+00 7.9645E+00 4.2754E+00 3.2813E+00 - 3.5481E+00 6.3973E+00 5.7684E+00 3.0324E+00 2.3211E+00 - 3.9811E+00 4.6103E+00 4.1334E+00 2.1545E+00 1.6362E+00 - 4.4668E+00 3.3299E+00 2.9481E+00 1.5006E+00 1.1422E+00 - 5.0119E+00 2.3904E+00 2.1262E+00 1.0434E+00 7.9962E-01 - 5.6234E+00 1.7252E+00 1.5221E+00 7.2960E-01 5.6151E-01 - 6.3096E+00 1.2377E+00 1.0961E+00 5.0587E-01 3.8819E-01 - 7.0795E+00 8.8956E-01 7.9313E-01 3.5433E-01 2.6189E-01 - 7.9433E+00 6.4433E-01 5.5853E-01 2.4051E-01 1.8201E-01 - 8.9125E+00 4.6066E-01 3.9384E-01 1.6248E-01 1.2764E-01 - 1.0000E+01 3.2831E-01 2.7673E-01 1.1270E-01 8.3504E-02 - 1.1220E+01 2.3489E-01 1.9557E-01 7.7188E-02 5.6462E-02 - 1.2589E+01 1.6737E-01 1.3962E-01 5.2409E-02 3.8461E-02 - 1.4125E+01 1.1863E-01 9.9361E-02 3.5379E-02 2.6308E-02 - 1.5849E+01 8.4912E-02 6.9997E-02 2.3595E-02 1.7757E-02 - 1.7783E+01 6.1005E-02 4.9675E-02 1.5804E-02 1.1746E-02 - 1.9953E+01 4.3847E-02 3.5472E-02 1.0508E-02 7.9011E-03 - 2.2387E+01 3.1095E-02 2.5122E-02 6.9427E-03 5.3489E-03 - 2.5119E+01 2.1871E-02 1.7668E-02 4.8653E-03 3.7395E-03 - 2.8184E+01 1.5450E-02 1.2478E-02 3.3253E-03 2.4830E-03 - 3.1623E+01 1.1140E-02 8.7989E-03 2.1388E-03 1.6324E-03 - 3.5481E+01 7.9512E-03 6.2000E-03 1.4275E-03 1.0948E-03 - 3.9811E+01 5.6683E-03 4.3837E-03 9.4536E-04 7.3151E-04 - 4.4668E+01 4.0315E-03 3.1079E-03 6.2650E-04 4.8918E-04 - 5.0119E+01 2.8680E-03 2.1970E-03 4.1474E-04 3.2707E-04 - 5.6234E+01 2.0375E-03 1.5480E-03 2.7605E-04 2.1999E-04 - 6.3096E+01 1.4534E-03 1.0885E-03 1.8571E-04 1.4676E-04 - 7.0795E+01 1.0275E-03 7.6705E-04 1.2366E-04 9.7275E-05 - 7.9433E+01 7.2343E-04 5.3899E-04 8.1057E-05 6.4348E-05 - 8.9125E+01 5.1637E-04 3.7837E-04 5.3343E-05 4.2413E-05 - 1.0000E+02 3.6046E-04 2.6485E-04 3.5671E-05 2.8289E-05 - 1.1220E+02 2.5354E-04 1.8581E-04 2.3891E-05 1.8801E-05 - 1.2589E+02 1.7882E-04 1.3038E-04 1.5800E-05 1.2652E-05 - 1.4125E+02 1.2637E-04 9.0567E-05 1.0426E-05 8.4566E-06 - 1.5849E+02 8.9122E-05 6.2920E-05 6.9276E-06 5.6033E-06 - 1.7783E+02 6.2489E-05 4.3987E-05 4.6372E-06 3.7818E-06 - 1.9953E+02 4.3817E-05 3.0635E-05 3.0886E-06 2.5625E-06 - 2.2387E+02 3.0605E-05 2.1227E-05 2.0605E-06 1.6762E-06 - 2.5119E+02 2.1413E-05 1.4836E-05 1.3665E-06 1.1267E-06 - 2.8184E+02 1.5037E-05 1.0315E-05 9.5186E-07 7.7903E-07 - 3.1623E+02 1.0507E-05 7.1409E-06 6.2581E-07 5.0910E-07 - 3.5481E+02 7.3411E-06 4.9566E-06 4.2262E-07 3.4074E-07 - 3.9811E+02 5.1233E-06 3.4203E-06 2.8663E-07 2.2663E-07 - 4.4668E+02 3.5823E-06 2.3723E-06 1.8988E-07 1.5271E-07 - 5.0119E+02 2.4996E-06 1.6418E-06 1.2828E-07 1.0245E-07 - 5.6234E+02 1.7419E-06 1.1291E-06 8.6182E-08 6.9025E-08 - 6.3096E+02 1.2077E-06 7.7825E-07 5.7652E-08 4.6013E-08 - 7.0795E+02 8.3727E-07 5.3906E-07 4.0172E-08 3.0767E-08 - 7.9433E+02 5.8229E-07 3.7238E-07 2.6834E-08 2.1184E-08 - 8.9125E+02 4.0206E-07 2.5619E-07 1.7487E-08 1.4058E-08 - 1.0000E+03 2.7895E-07 1.7778E-07 1.1796E-08 9.0628E-09 - 1.1220E+03 1.9272E-07 1.2023E-07 7.9553E-09 6.2178E-09 - 1.2589E+03 1.3280E-07 8.1642E-08 5.3365E-09 4.2804E-09 - 1.4125E+03 9.1175E-08 5.5878E-08 3.5641E-09 2.8271E-09 - 1.5849E+03 6.2902E-08 3.8125E-08 2.3011E-09 1.7977E-09 - 1.7783E+03 4.3259E-08 2.6107E-08 1.5085E-09 1.2466E-09 - 1.9953E+03 2.9734E-08 1.7863E-08 1.0620E-09 8.4704E-10 - 2.2387E+03 2.0125E-08 1.2048E-08 7.0776E-10 5.3747E-10 - 2.5119E+03 1.3652E-08 8.1265E-09 4.6733E-10 3.4133E-10 - 2.8184E+03 9.3214E-09 5.4718E-09 3.2330E-10 2.3895E-10 - 3.1623E+03 6.4582E-09 3.7844E-09 2.1831E-10 1.5730E-10 - 3.5481E+03 4.2645E-09 2.4967E-09 1.4244E-10 1.0216E-10 - 3.9811E+03 2.8687E-09 1.6746E-09 9.2107E-11 6.6494E-11 - 4.4668E+03 1.9307E-09 1.1204E-09 6.0447E-11 4.4859E-11 - 5.0119E+03 1.2967E-09 7.5435E-10 4.2295E-11 3.0043E-11 - 5.6234E+03 8.6376E-10 4.9595E-10 2.7716E-11 1.9514E-11 - 6.3096E+03 5.7839E-10 3.3023E-10 1.8029E-11 1.2873E-11 - 7.0795E+03 3.8507E-10 2.1755E-10 1.1926E-11 8.6124E-12 - 7.9433E+03 2.5610E-10 1.4374E-10 7.9694E-12 5.7404E-12 - 8.9125E+03 1.7151E-10 9.5507E-11 5.2170E-12 3.8130E-12 - 1.0000E+04 1.1461E-10 6.3077E-11 3.1985E-12 2.2768E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.8087E+04 1.7839E+04 8.7651E+03 8.1666E+03 - 1.1220E-01 1.5457E+04 1.5256E+04 7.5692E+03 7.0351E+03 - 1.2589E-01 1.3161E+04 1.2902E+04 6.4636E+03 6.0055E+03 - 1.4125E-01 1.1149E+04 1.0886E+04 5.4728E+03 5.0616E+03 - 1.5849E-01 9.3647E+03 9.1159E+03 4.5949E+03 4.2191E+03 - 1.7783E-01 7.7787E+03 7.5444E+03 3.8420E+03 3.4926E+03 - 1.9953E-01 6.3793E+03 6.1721E+03 3.1913E+03 2.8627E+03 - 2.2387E-01 5.1554E+03 4.9814E+03 2.6140E+03 2.3316E+03 - 2.5119E-01 4.1302E+03 3.9902E+03 2.1127E+03 1.8842E+03 - 2.8184E-01 3.2718E+03 3.1633E+03 1.7072E+03 1.5040E+03 - 3.1623E-01 2.5720E+03 2.4827E+03 1.3665E+03 1.1953E+03 - 3.5481E-01 2.0163E+03 1.9450E+03 1.0833E+03 9.4314E+02 - 3.9811E-01 1.5606E+03 1.5137E+03 8.5047E+02 7.3147E+02 - 4.4668E-01 1.2048E+03 1.1693E+03 6.5344E+02 5.6600E+02 - 5.0119E-01 9.3461E+02 8.9943E+02 5.0123E+02 4.3581E+02 - 5.6234E-01 7.1753E+02 6.8672E+02 3.8431E+02 3.3445E+02 - 6.3096E-01 5.4575E+02 5.2435E+02 2.9719E+02 2.5571E+02 - 7.0795E-01 4.1570E+02 3.9630E+02 2.2718E+02 1.9187E+02 - 7.9433E-01 3.1244E+02 2.9743E+02 1.7060E+02 1.4329E+02 - 8.9125E-01 2.3284E+02 2.2154E+02 1.2895E+02 1.0614E+02 - 1.0000E+00 1.7556E+02 1.6648E+02 9.6570E+01 7.9346E+01 - 1.1220E+00 1.3242E+02 1.2552E+02 7.2372E+01 5.8894E+01 - 1.2589E+00 9.8886E+01 9.3524E+01 5.3463E+01 4.3825E+01 - 1.4125E+00 7.4034E+01 6.9000E+01 3.9574E+01 3.2078E+01 - 1.5849E+00 5.5040E+01 5.1811E+01 2.9256E+01 2.3233E+01 - 1.7783E+00 4.0865E+01 3.8003E+01 2.1282E+01 1.7060E+01 - 1.9953E+00 3.0113E+01 2.7738E+01 1.5581E+01 1.2371E+01 - 2.2387E+00 2.2136E+01 2.0554E+01 1.1535E+01 8.8371E+00 - 2.5119E+00 1.6221E+01 1.5034E+01 8.4930E+00 6.4663E+00 - 2.8184E+00 1.1752E+01 1.1047E+01 6.1585E+00 4.6779E+00 - 3.1623E+00 8.7310E+00 7.9365E+00 4.2462E+00 3.2439E+00 - 3.5481E+00 6.2950E+00 5.6812E+00 3.0088E+00 2.2874E+00 - 3.9811E+00 4.5624E+00 4.0681E+00 2.1385E+00 1.6053E+00 - 4.4668E+00 3.3004E+00 2.9486E+00 1.5024E+00 1.1214E+00 - 5.0119E+00 2.3775E+00 2.1111E+00 1.0382E+00 7.8016E-01 - 5.6234E+00 1.7169E+00 1.4996E+00 7.2961E-01 5.4609E-01 - 6.3096E+00 1.2357E+00 1.0688E+00 5.1161E-01 3.7869E-01 - 7.0795E+00 8.7795E-01 7.6558E-01 3.4765E-01 2.5964E-01 - 7.9433E+00 6.2794E-01 5.4841E-01 2.3889E-01 1.7903E-01 - 8.9125E+00 4.5167E-01 3.9192E-01 1.5826E-01 1.2242E-01 - 1.0000E+01 3.2688E-01 2.7864E-01 1.1094E-01 8.3650E-02 - 1.1220E+01 2.3461E-01 1.9525E-01 7.5391E-02 5.7065E-02 - 1.2589E+01 1.6766E-01 1.3813E-01 5.1909E-02 3.8660E-02 - 1.4125E+01 1.1892E-01 9.8457E-02 3.5430E-02 2.6343E-02 - 1.5849E+01 8.4553E-02 6.9678E-02 2.3514E-02 1.7888E-02 - 1.7783E+01 6.0456E-02 4.9229E-02 1.5429E-02 1.1999E-02 - 1.9953E+01 4.2808E-02 3.4764E-02 1.0396E-02 8.1431E-03 - 2.2387E+01 3.0553E-02 2.4517E-02 7.1470E-03 5.5959E-03 - 2.5119E+01 2.2010E-02 1.7642E-02 4.8047E-03 3.8729E-03 - 2.8184E+01 1.5548E-02 1.2600E-02 3.1197E-03 2.3633E-03 - 3.1623E+01 1.1147E-02 8.7630E-03 2.1220E-03 1.6364E-03 - 3.5481E+01 7.9422E-03 6.1996E-03 1.4190E-03 1.0921E-03 - 3.9811E+01 5.6566E-03 4.3732E-03 9.4486E-04 7.2795E-04 - 4.4668E+01 4.0150E-03 3.0924E-03 6.2482E-04 4.8564E-04 - 5.0119E+01 2.8564E-03 2.1844E-03 4.1548E-04 3.2435E-04 - 5.6234E+01 2.0259E-03 1.5376E-03 2.7756E-04 2.1509E-04 - 6.3096E+01 1.4434E-03 1.0864E-03 1.8280E-04 1.4251E-04 - 7.0795E+01 1.0261E-03 7.6646E-04 1.2203E-04 9.6325E-05 - 7.9433E+01 7.2135E-04 5.3496E-04 8.0650E-05 6.4752E-05 - 8.9125E+01 5.0704E-04 3.7386E-04 5.3033E-05 4.2984E-05 - 1.0000E+02 3.5953E-04 2.6429E-04 3.5527E-05 2.8386E-05 - 1.1220E+02 2.5331E-04 1.8493E-04 2.3624E-05 1.8752E-05 - 1.2589E+02 1.7938E-04 1.2953E-04 1.5871E-05 1.2577E-05 - 1.4125E+02 1.2644E-04 9.0389E-05 1.0540E-05 8.5638E-06 - 1.5849E+02 8.8637E-05 6.3047E-05 6.9635E-06 5.7378E-06 - 1.7783E+02 6.2198E-05 4.4129E-05 4.6315E-06 3.8693E-06 - 1.9953E+02 4.3625E-05 3.0686E-05 3.0717E-06 2.5651E-06 - 2.2387E+02 3.0650E-05 2.1351E-05 2.0361E-06 1.7070E-06 - 2.5119E+02 2.1419E-05 1.4848E-05 1.4045E-06 1.1068E-06 - 2.8184E+02 1.5015E-05 1.0219E-05 9.6005E-07 7.3916E-07 - 3.1623E+02 1.0488E-05 7.1209E-06 6.2515E-07 5.0459E-07 - 3.5481E+02 7.3090E-06 4.9534E-06 4.1899E-07 3.3962E-07 - 3.9811E+02 5.0979E-06 3.4439E-06 2.8098E-07 2.2928E-07 - 4.4668E+02 3.5736E-06 2.3943E-06 1.8997E-07 1.5488E-07 - 5.0119E+02 2.4870E-06 1.6518E-06 1.2828E-07 1.0483E-07 - 5.6234E+02 1.7377E-06 1.1334E-06 8.6375E-08 6.9072E-08 - 6.3096E+02 1.2124E-06 7.7923E-07 5.7403E-08 4.6119E-08 - 7.0795E+02 8.4165E-07 5.3976E-07 3.9028E-08 3.1229E-08 - 7.9433E+02 5.8300E-07 3.7571E-07 2.5738E-08 2.1667E-08 - 8.9125E+02 4.0369E-07 2.5841E-07 1.7310E-08 1.4301E-08 - 1.0000E+03 2.8056E-07 1.7759E-07 1.1762E-08 9.3594E-09 - 1.1220E+03 1.9279E-07 1.2100E-07 8.1360E-09 6.2206E-09 - 1.2589E+03 1.3403E-07 8.2742E-08 5.4177E-09 4.0661E-09 - 1.4125E+03 9.1823E-08 5.6864E-08 3.5172E-09 2.8220E-09 - 1.5849E+03 6.2188E-08 3.8548E-08 2.4223E-09 1.8559E-09 - 1.7783E+03 4.2909E-08 2.5924E-08 1.5934E-09 1.2182E-09 - 1.9953E+03 2.9574E-08 1.7761E-08 1.0698E-09 8.1410E-10 - 2.2387E+03 2.0256E-08 1.2083E-08 7.3450E-10 5.3382E-10 - 2.5119E+03 1.3774E-08 8.2108E-09 4.9373E-10 3.6182E-10 - 2.8184E+03 9.2499E-09 5.5086E-09 3.3404E-10 2.3582E-10 - 3.1623E+03 6.4068E-09 3.7547E-09 2.1197E-10 1.4863E-10 - 3.5481E+03 4.2542E-09 2.4635E-09 1.4005E-10 1.0019E-10 - 3.9811E+03 2.8499E-09 1.6478E-09 9.4396E-11 6.9757E-11 - 4.4668E+03 1.9234E-09 1.1134E-09 6.2012E-11 4.6002E-11 - 5.0119E+03 1.2969E-09 7.5058E-10 4.2198E-11 2.9929E-11 - 5.6234E+03 8.5893E-10 4.9975E-10 2.8538E-11 1.8844E-11 - 6.3096E+03 5.7671E-10 3.2755E-10 1.7837E-11 1.2524E-11 - 7.0795E+03 3.8569E-10 2.1497E-10 1.1658E-11 8.1713E-12 - 7.9433E+03 2.5913E-10 1.4334E-10 7.6254E-12 5.4109E-12 - 8.9125E+03 1.7191E-10 9.5678E-11 4.9743E-12 3.6311E-12 - 1.0000E+04 1.1372E-10 6.3941E-11 3.1936E-12 2.4133E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.7338E+04 1.7242E+04 8.3269E+03 7.9998E+03 - 1.1220E-01 1.4919E+04 1.4783E+04 7.2522E+03 6.8880E+03 - 1.2589E-01 1.2814E+04 1.2583E+04 6.2291E+03 5.8265E+03 - 1.4125E-01 1.0892E+04 1.0602E+04 5.2797E+03 4.9004E+03 - 1.5849E-01 9.1518E+03 8.8994E+03 4.4374E+03 4.1228E+03 - 1.7783E-01 7.5754E+03 7.4096E+03 3.7166E+03 3.4111E+03 - 1.9953E-01 6.2319E+03 6.0634E+03 3.0947E+03 2.8114E+03 - 2.2387E-01 5.0916E+03 4.9166E+03 2.5611E+03 2.2990E+03 - 2.5119E-01 4.0755E+03 3.9428E+03 2.0929E+03 1.8655E+03 - 2.8184E-01 3.2489E+03 3.1444E+03 1.6812E+03 1.4909E+03 - 3.1623E-01 2.5698E+03 2.4815E+03 1.3409E+03 1.1758E+03 - 3.5481E-01 2.0093E+03 1.9440E+03 1.0614E+03 9.2322E+02 - 3.9811E-01 1.5682E+03 1.5146E+03 8.3329E+02 7.1860E+02 - 4.4668E-01 1.2148E+03 1.1677E+03 6.5146E+02 5.6138E+02 - 5.0119E-01 9.3096E+02 8.9335E+02 5.0523E+02 4.3054E+02 - 5.6234E-01 7.1271E+02 6.8446E+02 3.8865E+02 3.2978E+02 - 6.3096E-01 5.4447E+02 5.2327E+02 2.9799E+02 2.5318E+02 - 7.0795E-01 4.1488E+02 3.9679E+02 2.2456E+02 1.9000E+02 - 7.9433E-01 3.1377E+02 2.9801E+02 1.7094E+02 1.4245E+02 - 8.9125E-01 2.3410E+02 2.2234E+02 1.3133E+02 1.0521E+02 - 1.0000E+00 1.7563E+02 1.6785E+02 9.7815E+01 7.9789E+01 - 1.1220E+00 1.3271E+02 1.2566E+02 7.2507E+01 5.9382E+01 - 1.2589E+00 9.8973E+01 9.3840E+01 5.4221E+01 4.3891E+01 - 1.4125E+00 7.4299E+01 6.9710E+01 4.0225E+01 3.2168E+01 - 1.5849E+00 5.5739E+01 5.1847E+01 2.9582E+01 2.3584E+01 - 1.7783E+00 4.0727E+01 3.8472E+01 2.1765E+01 1.7053E+01 - 1.9953E+00 3.0094E+01 2.8144E+01 1.5868E+01 1.2424E+01 - 2.2387E+00 2.2333E+01 2.0591E+01 1.1600E+01 8.9596E+00 - 2.5119E+00 1.6260E+01 1.5079E+01 8.3263E+00 6.3793E+00 - 2.8184E+00 1.1787E+01 1.0990E+01 5.9391E+00 4.6685E+00 - 3.1623E+00 8.7014E+00 7.9561E+00 4.2630E+00 3.2820E+00 - 3.5481E+00 6.3477E+00 5.7300E+00 3.0171E+00 2.3031E+00 - 3.9811E+00 4.5903E+00 4.1421E+00 2.1462E+00 1.6073E+00 - 4.4668E+00 3.3126E+00 2.9838E+00 1.5021E+00 1.1267E+00 - 5.0119E+00 2.3865E+00 2.1334E+00 1.0471E+00 7.8914E-01 - 5.6234E+00 1.7075E+00 1.5135E+00 7.3528E-01 5.4161E-01 - 6.3096E+00 1.2304E+00 1.0732E+00 5.1263E-01 3.7773E-01 - 7.0795E+00 8.8455E-01 7.7310E-01 3.5235E-01 2.6544E-01 - 7.9433E+00 6.3263E-01 5.5437E-01 2.4288E-01 1.7569E-01 - 8.9125E+00 4.5494E-01 3.8942E-01 1.7001E-01 1.1880E-01 - 1.0000E+01 3.2410E-01 2.7484E-01 1.1243E-01 8.3264E-02 - 1.1220E+01 2.3151E-01 1.9533E-01 7.6597E-02 5.6169E-02 - 1.2589E+01 1.6375E-01 1.3822E-01 5.1948E-02 3.8108E-02 - 1.4125E+01 1.1658E-01 9.7556E-02 3.4858E-02 2.5700E-02 - 1.5849E+01 8.3912E-02 6.8944E-02 2.2902E-02 1.7259E-02 - 1.7783E+01 5.9935E-02 4.8884E-02 1.5606E-02 1.1890E-02 - 1.9953E+01 4.3569E-02 3.4930E-02 1.0812E-02 7.9337E-03 - 2.2387E+01 3.1149E-02 2.4776E-02 7.2137E-03 5.4890E-03 - 2.5119E+01 2.1726E-02 1.7422E-02 4.6789E-03 3.7124E-03 - 2.8184E+01 1.5352E-02 1.2321E-02 3.1012E-03 2.4012E-03 - 3.1623E+01 1.1152E-02 8.7608E-03 2.1309E-03 1.6303E-03 - 3.5481E+01 7.9368E-03 6.1914E-03 1.4198E-03 1.0961E-03 - 3.9811E+01 5.6417E-03 4.3763E-03 9.4341E-04 7.3398E-04 - 4.4668E+01 4.0177E-03 3.0900E-03 6.2894E-04 4.8778E-04 - 5.0119E+01 2.8514E-03 2.1779E-03 4.1451E-04 3.2484E-04 - 5.6234E+01 2.0296E-03 1.5386E-03 2.7523E-04 2.1619E-04 - 6.3096E+01 1.4401E-03 1.0827E-03 1.8473E-04 1.4411E-04 - 7.0795E+01 1.0209E-03 7.6254E-04 1.2234E-04 9.6573E-05 - 7.9433E+01 7.2846E-04 5.3738E-04 8.0654E-05 6.3906E-05 - 8.9125E+01 5.1675E-04 3.7587E-04 5.3692E-05 4.2852E-05 - 1.0000E+02 3.6007E-04 2.6503E-04 3.5964E-05 2.8621E-05 - 1.1220E+02 2.5387E-04 1.8542E-04 2.3675E-05 1.8854E-05 - 1.2589E+02 1.7910E-04 1.2939E-04 1.5712E-05 1.2445E-05 - 1.4125E+02 1.2629E-04 9.0722E-05 1.0488E-05 8.2871E-06 - 1.5849E+02 8.8616E-05 6.3479E-05 6.9893E-06 5.5510E-06 - 1.7783E+02 6.2564E-05 4.4122E-05 4.7026E-06 3.7338E-06 - 1.9953E+02 4.3819E-05 3.0726E-05 3.1347E-06 2.4587E-06 - 2.2387E+02 3.0738E-05 2.1427E-05 2.1024E-06 1.6612E-06 - 2.5119E+02 2.1560E-05 1.4912E-05 1.4100E-06 1.0797E-06 - 2.8184E+02 1.4986E-05 1.0354E-05 9.5636E-07 7.1935E-07 - 3.1623E+02 1.0510E-05 7.1640E-06 6.3228E-07 5.0771E-07 - 3.5481E+02 7.3545E-06 4.9508E-06 4.2262E-07 3.4122E-07 - 3.9811E+02 5.1469E-06 3.4236E-06 2.8191E-07 2.2363E-07 - 4.4668E+02 3.5812E-06 2.3750E-06 1.8714E-07 1.4918E-07 - 5.0119E+02 2.4828E-06 1.6306E-06 1.2707E-07 1.0179E-07 - 5.6234E+02 1.7385E-06 1.1346E-06 8.6066E-08 6.7503E-08 - 6.3096E+02 1.2082E-06 7.8491E-07 5.8089E-08 4.5958E-08 - 7.0795E+02 8.3741E-07 5.3984E-07 3.9218E-08 3.1720E-08 - 7.9433E+02 5.8063E-07 3.7097E-07 2.6644E-08 2.1132E-08 - 8.9125E+02 4.0201E-07 2.5444E-07 1.7607E-08 1.4179E-08 - 1.0000E+03 2.7966E-07 1.7633E-07 1.1764E-08 9.3480E-09 - 1.1220E+03 1.9259E-07 1.2011E-07 8.0005E-09 6.2456E-09 - 1.2589E+03 1.3229E-07 8.1773E-08 5.2723E-09 4.1505E-09 - 1.4125E+03 9.1627E-08 5.6056E-08 3.5056E-09 2.6984E-09 - 1.5849E+03 6.3971E-08 3.8300E-08 2.4360E-09 1.8153E-09 - 1.7783E+03 4.3785E-08 2.6150E-08 1.6318E-09 1.2444E-09 - 1.9953E+03 2.9631E-08 1.7653E-08 1.0732E-09 7.7584E-10 - 2.2387E+03 2.0065E-08 1.2044E-08 7.0463E-10 5.2850E-10 - 2.5119E+03 1.3749E-08 8.2320E-09 4.5359E-10 3.5527E-10 - 2.8184E+03 9.3914E-09 5.5041E-09 3.1369E-10 2.3432E-10 - 3.1623E+03 6.4330E-09 3.7614E-09 2.1679E-10 1.5601E-10 - 3.5481E+03 4.2484E-09 2.4719E-09 1.4439E-10 1.0487E-10 - 3.9811E+03 2.8549E-09 1.6517E-09 9.4970E-11 6.8162E-11 - 4.4668E+03 1.9144E-09 1.1107E-09 6.2920E-11 4.4503E-11 - 5.0119E+03 1.2882E-09 7.4064E-10 4.2160E-11 3.2691E-11 - 5.6234E+03 8.6212E-10 4.8771E-10 2.8867E-11 2.0678E-11 - 6.3096E+03 5.7611E-10 3.2757E-10 1.8077E-11 1.2367E-11 - 7.0795E+03 3.8040E-10 2.1672E-10 1.1579E-11 8.1434E-12 - 7.9433E+03 2.5444E-10 1.4359E-10 7.6136E-12 5.2238E-12 - 8.9125E+03 1.6981E-10 9.5904E-11 5.2173E-12 3.4916E-12 - 1.0000E+04 1.1087E-10 6.3210E-11 3.3783E-12 2.3166E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6867E+04 1.6934E+04 8.1402E+03 7.7424E+03 - 1.1220E-01 1.4511E+04 1.4503E+04 7.1230E+03 6.7068E+03 - 1.2589E-01 1.2427E+04 1.2381E+04 6.0998E+03 5.7212E+03 - 1.4125E-01 1.0591E+04 1.0556E+04 5.1804E+03 4.8185E+03 - 1.5849E-01 8.9360E+03 8.8810E+03 4.4033E+03 4.0438E+03 - 1.7783E-01 7.4614E+03 7.3709E+03 3.7174E+03 3.3669E+03 - 1.9953E-01 6.1698E+03 6.0508E+03 3.0978E+03 2.7896E+03 - 2.2387E-01 5.0216E+03 4.9179E+03 2.5525E+03 2.2739E+03 - 2.5119E-01 4.0514E+03 3.9622E+03 2.0849E+03 1.8350E+03 - 2.8184E-01 3.2492E+03 3.1627E+03 1.6985E+03 1.4706E+03 - 3.1623E-01 2.5503E+03 2.5064E+03 1.3693E+03 1.1685E+03 - 3.5481E-01 2.0003E+03 1.9720E+03 1.0847E+03 9.2124E+02 - 3.9811E-01 1.5719E+03 1.5337E+03 8.5561E+02 7.2452E+02 - 4.4668E-01 1.2184E+03 1.1903E+03 6.7119E+02 5.6076E+02 - 5.0119E-01 9.3098E+02 9.1380E+02 5.1901E+02 4.2866E+02 - 5.6234E-01 7.0986E+02 6.9556E+02 4.0140E+02 3.2889E+02 - 6.3096E-01 5.4444E+02 5.3000E+02 3.0535E+02 2.5090E+02 - 7.0795E-01 4.1254E+02 4.0094E+02 2.2944E+02 1.9028E+02 - 7.9433E-01 3.1052E+02 3.0197E+02 1.7507E+02 1.4347E+02 - 8.9125E-01 2.3466E+02 2.2729E+02 1.3260E+02 1.0712E+02 - 1.0000E+00 1.7538E+02 1.7070E+02 9.9106E+01 7.9347E+01 - 1.1220E+00 1.3227E+02 1.2688E+02 7.3393E+01 5.8681E+01 - 1.2589E+00 9.9913E+01 9.4022E+01 5.4760E+01 4.3415E+01 - 1.4125E+00 7.4075E+01 7.0180E+01 4.0528E+01 3.2018E+01 - 1.5849E+00 5.5480E+01 5.1841E+01 2.9809E+01 2.3404E+01 - 1.7783E+00 4.0957E+01 3.8539E+01 2.1746E+01 1.7089E+01 - 1.9953E+00 3.0192E+01 2.8464E+01 1.5764E+01 1.2259E+01 - 2.2387E+00 2.2420E+01 2.0508E+01 1.1344E+01 8.8724E+00 - 2.5119E+00 1.6447E+01 1.4947E+01 8.1161E+00 6.4727E+00 - 2.8184E+00 1.2101E+01 1.0973E+01 5.9202E+00 4.5803E+00 - 3.1623E+00 8.7741E+00 7.9383E+00 4.2674E+00 3.2445E+00 - 3.5481E+00 6.3576E+00 5.7582E+00 3.0239E+00 2.3108E+00 - 3.9811E+00 4.5552E+00 4.1047E+00 2.1411E+00 1.6257E+00 - 4.4668E+00 3.2964E+00 2.9343E+00 1.4941E+00 1.1287E+00 - 5.0119E+00 2.4000E+00 2.1099E+00 1.0334E+00 7.8770E-01 - 5.6234E+00 1.7208E+00 1.5107E+00 7.2357E-01 5.4714E-01 - 6.3096E+00 1.2297E+00 1.0823E+00 5.0664E-01 3.7567E-01 - 7.0795E+00 8.8768E-01 7.6409E-01 3.5195E-01 2.5996E-01 - 7.9433E+00 6.4015E-01 5.4972E-01 2.4049E-01 1.7863E-01 - 8.9125E+00 4.5483E-01 3.9184E-01 1.6644E-01 1.2084E-01 - 1.0000E+01 3.2526E-01 2.7445E-01 1.1241E-01 8.3190E-02 - 1.1220E+01 2.3358E-01 1.9452E-01 7.5978E-02 5.6199E-02 - 1.2589E+01 1.6710E-01 1.3784E-01 5.0753E-02 3.9152E-02 - 1.4125E+01 1.1833E-01 9.7967E-02 3.4473E-02 2.6650E-02 - 1.5849E+01 8.4316E-02 6.9385E-02 2.3548E-02 1.7587E-02 - 1.7783E+01 6.0923E-02 4.8469E-02 1.5567E-02 1.1980E-02 - 1.9953E+01 4.3309E-02 3.3958E-02 1.0452E-02 7.8868E-03 - 2.2387E+01 3.0339E-02 2.4004E-02 7.1455E-03 5.1983E-03 - 2.5119E+01 2.1538E-02 1.7059E-02 4.8353E-03 3.5242E-03 - 2.8184E+01 1.5620E-02 1.2398E-02 3.2093E-03 2.4646E-03 - 3.1623E+01 1.1105E-02 8.7473E-03 2.1179E-03 1.6358E-03 - 3.5481E+01 7.9220E-03 6.1894E-03 1.4061E-03 1.0879E-03 - 3.9811E+01 5.6462E-03 4.3642E-03 9.3584E-04 7.2523E-04 - 4.4668E+01 4.0217E-03 3.0761E-03 6.2477E-04 4.8595E-04 - 5.0119E+01 2.8545E-03 2.1672E-03 4.1685E-04 3.2274E-04 - 5.6234E+01 2.0212E-03 1.5336E-03 2.7568E-04 2.1639E-04 - 6.3096E+01 1.4319E-03 1.0800E-03 1.8106E-04 1.4501E-04 - 7.0795E+01 1.0197E-03 7.5961E-04 1.1913E-04 9.6346E-05 - 7.9433E+01 7.2545E-04 5.3225E-04 8.0438E-05 6.3597E-05 - 8.9125E+01 5.1236E-04 3.7491E-04 5.3607E-05 4.2646E-05 - 1.0000E+02 3.5916E-04 2.6365E-04 3.5584E-05 2.8266E-05 - 1.1220E+02 2.5398E-04 1.8449E-04 2.3727E-05 1.9065E-05 - 1.2589E+02 1.7903E-04 1.2946E-04 1.5587E-05 1.2769E-05 - 1.4125E+02 1.2608E-04 9.0477E-05 1.0422E-05 8.5753E-06 - 1.5849E+02 8.8533E-05 6.3229E-05 6.9904E-06 5.7167E-06 - 1.7783E+02 6.2029E-05 4.3943E-05 4.6347E-06 3.7790E-06 - 1.9953E+02 4.3405E-05 3.0411E-05 3.1402E-06 2.5034E-06 - 2.2387E+02 3.0412E-05 2.1242E-05 2.1009E-06 1.6742E-06 - 2.5119E+02 2.1223E-05 1.4885E-05 1.3810E-06 1.1110E-06 - 2.8184E+02 1.4805E-05 1.0289E-05 9.4749E-07 7.5106E-07 - 3.1623E+02 1.0484E-05 7.1208E-06 6.2668E-07 5.0769E-07 - 3.5481E+02 7.2979E-06 4.9381E-06 4.1698E-07 3.4390E-07 - 3.9811E+02 5.0964E-06 3.4262E-06 2.8118E-07 2.2724E-07 - 4.4668E+02 3.5836E-06 2.3636E-06 1.9124E-07 1.5121E-07 - 5.0119E+02 2.5087E-06 1.6345E-06 1.3043E-07 1.0322E-07 - 5.6234E+02 1.7487E-06 1.1338E-06 8.5544E-08 6.9327E-08 - 6.3096E+02 1.2087E-06 7.8270E-07 5.7121E-08 4.5893E-08 - 7.0795E+02 8.4016E-07 5.3939E-07 3.8271E-08 3.2037E-08 - 7.9433E+02 5.8327E-07 3.7194E-07 2.6065E-08 2.1495E-08 - 8.9125E+02 4.0385E-07 2.5504E-07 1.7774E-08 1.4098E-08 - 1.0000E+03 2.8035E-07 1.7680E-07 1.1922E-08 9.2705E-09 - 1.1220E+03 1.9379E-07 1.1999E-07 8.0668E-09 6.1275E-09 - 1.2589E+03 1.3319E-07 8.2098E-08 5.3517E-09 3.9886E-09 - 1.4125E+03 9.0807E-08 5.6080E-08 3.4793E-09 2.6185E-09 - 1.5849E+03 6.2315E-08 3.7989E-08 2.3608E-09 1.7654E-09 - 1.7783E+03 4.3315E-08 2.5723E-08 1.5756E-09 1.2044E-09 - 1.9953E+03 2.9443E-08 1.7592E-08 1.0372E-09 8.0063E-10 - 2.2387E+03 1.9994E-08 1.2049E-08 7.3601E-10 5.0769E-10 - 2.5119E+03 1.3718E-08 8.0725E-09 4.8262E-10 3.3181E-10 - 2.8184E+03 9.3248E-09 5.4135E-09 3.1077E-10 2.1703E-10 - 3.1623E+03 6.3975E-09 3.7460E-09 2.0888E-10 1.5593E-10 - 3.5481E+03 4.2075E-09 2.4529E-09 1.4183E-10 1.0273E-10 - 3.9811E+03 2.8384E-09 1.6404E-09 9.0402E-11 6.5858E-11 - 4.4668E+03 1.9116E-09 1.1054E-09 5.9253E-11 4.2908E-11 - 5.0119E+03 1.2778E-09 7.3241E-10 3.9617E-11 2.9826E-11 - 5.6234E+03 8.5615E-10 4.8367E-10 2.5405E-11 1.9112E-11 - 6.3096E+03 5.7090E-10 3.2648E-10 1.6969E-11 1.2563E-11 - 7.0795E+03 3.8293E-10 2.1690E-10 1.1187E-11 8.1248E-12 - 7.9433E+03 2.5458E-10 1.4228E-10 7.0684E-12 5.3315E-12 - 8.9125E+03 1.6759E-10 9.4506E-11 4.4374E-12 3.2659E-12 - 1.0000E+04 1.1246E-10 6.3355E-11 3.2187E-12 2.0182E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.5347E+04 1.5484E+04 7.4357E+03 7.1684E+03 - 1.1220E-01 1.3305E+04 1.3340E+04 6.4643E+03 6.1519E+03 - 1.2589E-01 1.1430E+04 1.1418E+04 5.5710E+03 5.2705E+03 - 1.4125E-01 9.7741E+03 9.7597E+03 4.7842E+03 4.4583E+03 - 1.5849E-01 8.3185E+03 8.2835E+03 4.0626E+03 3.7607E+03 - 1.7783E-01 6.9810E+03 6.9097E+03 3.4271E+03 3.1561E+03 - 1.9953E-01 5.8113E+03 5.6924E+03 2.8735E+03 2.6151E+03 - 2.2387E-01 4.7505E+03 4.6516E+03 2.3966E+03 2.1464E+03 - 2.5119E-01 3.8399E+03 3.7513E+03 1.9714E+03 1.7513E+03 - 2.8184E-01 3.1060E+03 3.0096E+03 1.6153E+03 1.4089E+03 - 3.1623E-01 2.4565E+03 2.4063E+03 1.3117E+03 1.1242E+03 - 3.5481E-01 1.9348E+03 1.9117E+03 1.0437E+03 8.9109E+02 - 3.9811E-01 1.5319E+03 1.5008E+03 8.3121E+02 6.9845E+02 - 4.4668E-01 1.1922E+03 1.1608E+03 6.5028E+02 5.4818E+02 - 5.0119E-01 9.2193E+02 9.0174E+02 5.0461E+02 4.2693E+02 - 5.6234E-01 7.0737E+02 6.9899E+02 3.9605E+02 3.2796E+02 - 6.3096E-01 5.3964E+02 5.3447E+02 3.0475E+02 2.4750E+02 - 7.0795E-01 4.1265E+02 4.0188E+02 2.3021E+02 1.8744E+02 - 7.9433E-01 3.1125E+02 3.0333E+02 1.7793E+02 1.4081E+02 - 8.9125E-01 2.3493E+02 2.3007E+02 1.3428E+02 1.0423E+02 - 1.0000E+00 1.7695E+02 1.7131E+02 9.9395E+01 7.9346E+01 - 1.1220E+00 1.3269E+02 1.2843E+02 7.4282E+01 5.8536E+01 - 1.2589E+00 9.9363E+01 9.5221E+01 5.5119E+01 4.3148E+01 - 1.4125E+00 7.4029E+01 7.0329E+01 4.0654E+01 3.2303E+01 - 1.5849E+00 5.5499E+01 5.2187E+01 2.9884E+01 2.3857E+01 - 1.7783E+00 4.1283E+01 3.8723E+01 2.2013E+01 1.7111E+01 - 1.9953E+00 3.0411E+01 2.8534E+01 1.6034E+01 1.2436E+01 - 2.2387E+00 2.2539E+01 2.0777E+01 1.1614E+01 9.1611E+00 - 2.5119E+00 1.6486E+01 1.5124E+01 8.4232E+00 6.4963E+00 - 2.8184E+00 1.1915E+01 1.0990E+01 5.9897E+00 4.5502E+00 - 3.1623E+00 8.6880E+00 7.9087E+00 4.2818E+00 3.2696E+00 - 3.5481E+00 6.2988E+00 5.7466E+00 3.0169E+00 2.2736E+00 - 3.9811E+00 4.5457E+00 4.1361E+00 2.1081E+00 1.5984E+00 - 4.4668E+00 3.2782E+00 2.9633E+00 1.4866E+00 1.1303E+00 - 5.0119E+00 2.3716E+00 2.1138E+00 1.0458E+00 7.9071E-01 - 5.6234E+00 1.7256E+00 1.5157E+00 7.1948E-01 5.4995E-01 - 6.3096E+00 1.2269E+00 1.0766E+00 4.9698E-01 3.7513E-01 - 7.0795E+00 8.7392E-01 7.5586E-01 3.4533E-01 2.5567E-01 - 7.9433E+00 6.3585E-01 5.4774E-01 2.4048E-01 1.7494E-01 - 8.9125E+00 4.5955E-01 3.8949E-01 1.6127E-01 1.2266E-01 - 1.0000E+01 3.2465E-01 2.7498E-01 1.1094E-01 8.2841E-02 - 1.1220E+01 2.3399E-01 1.9440E-01 7.5679E-02 5.5441E-02 - 1.2589E+01 1.6741E-01 1.3842E-01 5.1289E-02 3.8371E-02 - 1.4125E+01 1.1817E-01 9.7753E-02 3.4740E-02 2.6011E-02 - 1.5849E+01 8.3982E-02 6.9779E-02 2.3546E-02 1.7450E-02 - 1.7783E+01 6.0458E-02 4.9300E-02 1.5668E-02 1.2040E-02 - 1.9953E+01 4.3570E-02 3.4298E-02 1.0542E-02 8.0743E-03 - 2.2387E+01 3.1123E-02 2.4248E-02 7.0719E-03 5.5346E-03 - 2.5119E+01 2.1910E-02 1.7135E-02 4.7858E-03 3.6676E-03 - 2.8184E+01 1.5517E-02 1.2088E-02 3.1571E-03 2.4221E-03 - 3.1623E+01 1.1107E-02 8.7254E-03 2.1125E-03 1.6392E-03 - 3.5481E+01 7.9154E-03 6.1649E-03 1.4134E-03 1.0940E-03 - 3.9811E+01 5.6493E-03 4.3533E-03 9.4087E-04 7.2915E-04 - 4.4668E+01 4.0155E-03 3.0698E-03 6.2411E-04 4.8282E-04 - 5.0119E+01 2.8515E-03 2.1703E-03 4.1506E-04 3.2361E-04 - 5.6234E+01 2.0244E-03 1.5320E-03 2.7608E-04 2.1814E-04 - 6.3096E+01 1.4387E-03 1.0807E-03 1.8222E-04 1.4451E-04 - 7.0795E+01 1.0190E-03 7.5959E-04 1.1936E-04 9.5562E-05 - 7.9433E+01 7.2053E-04 5.3263E-04 7.9263E-05 6.4047E-05 - 8.9125E+01 5.0769E-04 3.7410E-04 5.3465E-05 4.2689E-05 - 1.0000E+02 3.5926E-04 2.6318E-04 3.5392E-05 2.8015E-05 - 1.1220E+02 2.5363E-04 1.8379E-04 2.3497E-05 1.8874E-05 - 1.2589E+02 1.7866E-04 1.2845E-04 1.5545E-05 1.2611E-05 - 1.4125E+02 1.2557E-04 8.9983E-05 1.0366E-05 8.3550E-06 - 1.5849E+02 8.8251E-05 6.2741E-05 6.9172E-06 5.6429E-06 - 1.7783E+02 6.2218E-05 4.3538E-05 4.5769E-06 3.7759E-06 - 1.9953E+02 4.3589E-05 3.0418E-05 3.0546E-06 2.4504E-06 - 2.2387E+02 3.0488E-05 2.1143E-05 2.0433E-06 1.6136E-06 - 2.5119E+02 2.1498E-05 1.4644E-05 1.3885E-06 1.1035E-06 - 2.8184E+02 1.4971E-05 1.0219E-05 9.7288E-07 7.6536E-07 - 3.1623E+02 1.0484E-05 7.1201E-06 6.2417E-07 5.0140E-07 - 3.5481E+02 7.3311E-06 4.9266E-06 4.1940E-07 3.4100E-07 - 3.9811E+02 5.1024E-06 3.4031E-06 2.7852E-07 2.2839E-07 - 4.4668E+02 3.5601E-06 2.3533E-06 1.8612E-07 1.5315E-07 - 5.0119E+02 2.4889E-06 1.6375E-06 1.2804E-07 1.0275E-07 - 5.6234E+02 1.7401E-06 1.1337E-06 8.6277E-08 6.9180E-08 - 6.3096E+02 1.2094E-06 7.8027E-07 5.7700E-08 4.6339E-08 - 7.0795E+02 8.4088E-07 5.3807E-07 3.8723E-08 3.0822E-08 - 7.9433E+02 5.8306E-07 3.6973E-07 2.6059E-08 2.0585E-08 - 8.9125E+02 4.0232E-07 2.5606E-07 1.7644E-08 1.3951E-08 - 1.0000E+03 2.7955E-07 1.7668E-07 1.2061E-08 9.4010E-09 - 1.1220E+03 1.9240E-07 1.2031E-07 8.1800E-09 6.0873E-09 - 1.2589E+03 1.3315E-07 8.2507E-08 5.5029E-09 4.1476E-09 - 1.4125E+03 9.1685E-08 5.6154E-08 3.5887E-09 2.7643E-09 - 1.5849E+03 6.2888E-08 3.8106E-08 2.3230E-09 1.8267E-09 - 1.7783E+03 4.3039E-08 2.5915E-08 1.5639E-09 1.2232E-09 - 1.9953E+03 2.9628E-08 1.7634E-08 1.0657E-09 8.5435E-10 - 2.2387E+03 2.0126E-08 1.1898E-08 7.1805E-10 5.3986E-10 - 2.5119E+03 1.3616E-08 8.0923E-09 4.6547E-10 3.4290E-10 - 2.8184E+03 9.2784E-09 5.4824E-09 3.0751E-10 2.4097E-10 - 3.1623E+03 6.3455E-09 3.7203E-09 2.1254E-10 1.5821E-10 - 3.5481E+03 4.2135E-09 2.4676E-09 1.4090E-10 1.0592E-10 - 3.9811E+03 2.8474E-09 1.6411E-09 9.0255E-11 7.0398E-11 - 4.4668E+03 1.9142E-09 1.0858E-09 6.2783E-11 4.5748E-11 - 5.0119E+03 1.2951E-09 7.2586E-10 4.4041E-11 3.0247E-11 - 5.6234E+03 8.6640E-10 4.7903E-10 2.7474E-11 2.0430E-11 - 6.3096E+03 5.7106E-10 3.2358E-10 1.7299E-11 1.2734E-11 - 7.0795E+03 3.8086E-10 2.1354E-10 1.0889E-11 8.3940E-12 - 7.9433E+03 2.5228E-10 1.4167E-10 7.7343E-12 4.9596E-12 - 8.9125E+03 1.6787E-10 9.2972E-11 5.4499E-12 3.2116E-12 - 1.0000E+04 1.1241E-10 6.1403E-11 3.4342E-12 2.3856E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2100E+04 1.2342E+04 5.7727E+03 5.7276E+03 - 1.1220E-01 1.0517E+04 1.0681E+04 5.0714E+03 4.9818E+03 - 1.2589E-01 9.0787E+03 9.2042E+03 4.3914E+03 4.2815E+03 - 1.4125E-01 7.8083E+03 7.8661E+03 3.8014E+03 3.6549E+03 - 1.5849E-01 6.6489E+03 6.6873E+03 3.2661E+03 3.0926E+03 - 1.7783E-01 5.6267E+03 5.6424E+03 2.7692E+03 2.6097E+03 - 1.9953E-01 4.7286E+03 4.7026E+03 2.3460E+03 2.1791E+03 - 2.2387E-01 3.8982E+03 3.8856E+03 1.9679E+03 1.7864E+03 - 2.5119E-01 3.1925E+03 3.1875E+03 1.6299E+03 1.4633E+03 - 2.8184E-01 2.6086E+03 2.5887E+03 1.3388E+03 1.2046E+03 - 3.1623E-01 2.1106E+03 2.0816E+03 1.0940E+03 9.7410E+02 - 3.5481E-01 1.6858E+03 1.6592E+03 8.8871E+02 7.7554E+02 - 3.9811E-01 1.3418E+03 1.3252E+03 7.1511E+02 6.1641E+02 - 4.4668E-01 1.0689E+03 1.0479E+03 5.7521E+02 4.8821E+02 - 5.0119E-01 8.3816E+02 8.2083E+02 4.5749E+02 3.8010E+02 - 5.6234E-01 6.4843E+02 6.3812E+02 3.5683E+02 2.9684E+02 - 6.3096E-01 5.0030E+02 4.9047E+02 2.7674E+02 2.3093E+02 - 7.0795E-01 3.8744E+02 3.7769E+02 2.1397E+02 1.7653E+02 - 7.9433E-01 2.9991E+02 2.8862E+02 1.6511E+02 1.3429E+02 - 8.9125E-01 2.2862E+02 2.2308E+02 1.2552E+02 1.0197E+02 - 1.0000E+00 1.7277E+02 1.6808E+02 9.6404E+01 7.6558E+01 - 1.1220E+00 1.3065E+02 1.2681E+02 7.2203E+01 5.7135E+01 - 1.2589E+00 9.8718E+01 9.4586E+01 5.3964E+01 4.2687E+01 - 1.4125E+00 7.4048E+01 7.0221E+01 4.0160E+01 3.1943E+01 - 1.5849E+00 5.4762E+01 5.2470E+01 2.9662E+01 2.3580E+01 - 1.7783E+00 4.0979E+01 3.8980E+01 2.1688E+01 1.7067E+01 - 1.9953E+00 3.0202E+01 2.8814E+01 1.6058E+01 1.2322E+01 - 2.2387E+00 2.2169E+01 2.1128E+01 1.1704E+01 8.9982E+00 - 2.5119E+00 1.6370E+01 1.5285E+01 8.3487E+00 6.4321E+00 - 2.8184E+00 1.2007E+01 1.1112E+01 6.0675E+00 4.5626E+00 - 3.1623E+00 8.7492E+00 7.9736E+00 4.2930E+00 3.2574E+00 - 3.5481E+00 6.3586E+00 5.7701E+00 3.0013E+00 2.2891E+00 - 3.9811E+00 4.6013E+00 4.1363E+00 2.1412E+00 1.6082E+00 - 4.4668E+00 3.3305E+00 2.9498E+00 1.5096E+00 1.1277E+00 - 5.0119E+00 2.3978E+00 2.1133E+00 1.0370E+00 7.9685E-01 - 5.6234E+00 1.7258E+00 1.5001E+00 7.1899E-01 5.5468E-01 - 6.3096E+00 1.2388E+00 1.0782E+00 5.0544E-01 3.8170E-01 - 7.0795E+00 8.9185E-01 7.7700E-01 3.4592E-01 2.5932E-01 - 7.9433E+00 6.4001E-01 5.5082E-01 2.3892E-01 1.7652E-01 - 8.9125E+00 4.5788E-01 3.9991E-01 1.6873E-01 1.2216E-01 - 1.0000E+01 3.2579E-01 2.7672E-01 1.1206E-01 8.3845E-02 - 1.1220E+01 2.3107E-01 1.9502E-01 7.6245E-02 5.7229E-02 - 1.2589E+01 1.6465E-01 1.3989E-01 5.1840E-02 3.8412E-02 - 1.4125E+01 1.1850E-01 9.8227E-02 3.4514E-02 2.6114E-02 - 1.5849E+01 8.4472E-02 6.8955E-02 2.3349E-02 1.7665E-02 - 1.7783E+01 6.0798E-02 4.9521E-02 1.5775E-02 1.1650E-02 - 1.9953E+01 4.4156E-02 3.5174E-02 1.0325E-02 7.8990E-03 - 2.2387E+01 3.1434E-02 2.5155E-02 6.9996E-03 5.3719E-03 - 2.5119E+01 2.1943E-02 1.7651E-02 4.5486E-03 3.6780E-03 - 2.8184E+01 1.5441E-02 1.2197E-02 3.0824E-03 2.4347E-03 - 3.1623E+01 1.1086E-02 8.7367E-03 2.1097E-03 1.6248E-03 - 3.5481E+01 7.9229E-03 6.1566E-03 1.4077E-03 1.0800E-03 - 3.9811E+01 5.6564E-03 4.3480E-03 9.3471E-04 7.2498E-04 - 4.4668E+01 4.0060E-03 3.0801E-03 6.2645E-04 4.8422E-04 - 5.0119E+01 2.8490E-03 2.1780E-03 4.1560E-04 3.2020E-04 - 5.6234E+01 2.0143E-03 1.5340E-03 2.7273E-04 2.1526E-04 - 6.3096E+01 1.4247E-03 1.0775E-03 1.8240E-04 1.4496E-04 - 7.0795E+01 1.0151E-03 7.5483E-04 1.1947E-04 9.7362E-05 - 7.9433E+01 7.1407E-04 5.2821E-04 7.9357E-05 6.4879E-05 - 8.9125E+01 5.0651E-04 3.7054E-04 5.3693E-05 4.2739E-05 - 1.0000E+02 3.5929E-04 2.6283E-04 3.5264E-05 2.8534E-05 - 1.1220E+02 2.5285E-04 1.8396E-04 2.3414E-05 1.9117E-05 - 1.2589E+02 1.7773E-04 1.2873E-04 1.5361E-05 1.2564E-05 - 1.4125E+02 1.2493E-04 9.0021E-05 1.0377E-05 8.4287E-06 - 1.5849E+02 8.8103E-05 6.2868E-05 7.0332E-06 5.5915E-06 - 1.7783E+02 6.1947E-05 4.3637E-05 4.6976E-06 3.7129E-06 - 1.9953E+02 4.3403E-05 3.0320E-05 3.1673E-06 2.5038E-06 - 2.2387E+02 3.0524E-05 2.1281E-05 2.0895E-06 1.6693E-06 - 2.5119E+02 2.1381E-05 1.4759E-05 1.3839E-06 1.0900E-06 - 2.8184E+02 1.4956E-05 1.0224E-05 9.4325E-07 7.2857E-07 - 3.1623E+02 1.0473E-05 7.1232E-06 6.1586E-07 5.0169E-07 - 3.5481E+02 7.3177E-06 4.9220E-06 4.1893E-07 3.3303E-07 - 3.9811E+02 5.1028E-06 3.4014E-06 2.8145E-07 2.2161E-07 - 4.4668E+02 3.5555E-06 2.3588E-06 1.8965E-07 1.4993E-07 - 5.0119E+02 2.4881E-06 1.6326E-06 1.2827E-07 1.0125E-07 - 5.6234E+02 1.7384E-06 1.1346E-06 8.5223E-08 6.7968E-08 - 6.3096E+02 1.2049E-06 7.7868E-07 5.7092E-08 4.5886E-08 - 7.0795E+02 8.3664E-07 5.3469E-07 3.9215E-08 3.0934E-08 - 7.9433E+02 5.7956E-07 3.7126E-07 2.5944E-08 2.1041E-08 - 8.9125E+02 4.0329E-07 2.5502E-07 1.6949E-08 1.3769E-08 - 1.0000E+03 2.7994E-07 1.7581E-07 1.1921E-08 9.1482E-09 - 1.1220E+03 1.9246E-07 1.2005E-07 8.1458E-09 6.0613E-09 - 1.2589E+03 1.3295E-07 8.1487E-08 5.4291E-09 4.0984E-09 - 1.4125E+03 9.1235E-08 5.5639E-08 3.6340E-09 2.7718E-09 - 1.5849E+03 6.2620E-08 3.8096E-08 2.3602E-09 1.8064E-09 - 1.7783E+03 4.3120E-08 2.6025E-08 1.5412E-09 1.1929E-09 - 1.9953E+03 2.9309E-08 1.7606E-08 1.0707E-09 8.1289E-10 - 2.2387E+03 2.0068E-08 1.1837E-08 7.2991E-10 5.5116E-10 - 2.5119E+03 1.3626E-08 8.0387E-09 4.9399E-10 3.6552E-10 - 2.8184E+03 9.1840E-09 5.4354E-09 3.3736E-10 2.4911E-10 - 3.1623E+03 6.3606E-09 3.7526E-09 2.0918E-10 1.5513E-10 - 3.5481E+03 4.2170E-09 2.4837E-09 1.3446E-10 9.7657E-11 - 3.9811E+03 2.8533E-09 1.6683E-09 9.0653E-11 6.7549E-11 - 4.4668E+03 1.9254E-09 1.1163E-09 6.2130E-11 4.6143E-11 - 5.0119E+03 1.2810E-09 7.3611E-10 4.1746E-11 2.9635E-11 - 5.6234E+03 8.5077E-10 4.8617E-10 2.6631E-11 1.9143E-11 - 6.3096E+03 5.7174E-10 3.2296E-10 1.6877E-11 1.2861E-11 - 7.0795E+03 3.8173E-10 2.1337E-10 1.0739E-11 8.2511E-12 - 7.9433E+03 2.5009E-10 1.4266E-10 7.3669E-12 5.3711E-12 - 8.9125E+03 1.6668E-10 9.4565E-11 5.1972E-12 3.6030E-12 - 1.0000E+04 1.1162E-10 6.1852E-11 3.3131E-12 2.1481E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.9424E+03 1.0197E+04 4.8425E+03 4.6325E+03 - 1.1220E-01 8.7132E+03 8.9027E+03 4.2854E+03 4.0658E+03 - 1.2589E-01 7.6113E+03 7.7507E+03 3.7445E+03 3.5288E+03 - 1.4125E-01 6.5981E+03 6.7538E+03 3.2644E+03 3.0383E+03 - 1.5849E-01 5.6498E+03 5.8060E+03 2.8288E+03 2.6056E+03 - 1.7783E-01 4.7988E+03 4.9168E+03 2.4242E+03 2.1942E+03 - 1.9953E-01 4.0519E+03 4.1389E+03 2.0663E+03 1.8470E+03 - 2.2387E-01 3.3772E+03 3.4568E+03 1.7582E+03 1.5475E+03 - 2.5119E-01 2.8051E+03 2.8589E+03 1.4731E+03 1.2825E+03 - 2.8184E-01 2.3232E+03 2.3346E+03 1.2173E+03 1.0506E+03 - 3.1623E-01 1.8833E+03 1.8945E+03 9.9310E+02 8.4846E+02 - 3.5481E-01 1.5110E+03 1.5374E+03 8.0556E+02 6.8691E+02 - 3.9811E-01 1.2185E+03 1.2353E+03 6.5576E+02 5.5689E+02 - 4.4668E-01 9.7903E+02 9.8386E+02 5.3134E+02 4.4325E+02 - 5.0119E-01 7.7509E+02 7.7694E+02 4.2873E+02 3.4635E+02 - 5.6234E-01 6.0694E+02 6.0560E+02 3.3916E+02 2.7303E+02 - 6.3096E-01 4.7600E+02 4.7300E+02 2.6395E+02 2.1735E+02 - 7.0795E-01 3.7417E+02 3.6888E+02 2.0613E+02 1.7044E+02 - 7.9433E-01 2.8737E+02 2.8523E+02 1.6037E+02 1.2898E+02 - 8.9125E-01 2.2163E+02 2.1762E+02 1.2364E+02 9.6666E+01 - 1.0000E+00 1.6884E+02 1.6572E+02 9.4735E+01 7.4416E+01 - 1.1220E+00 1.2788E+02 1.2540E+02 7.1695E+01 5.5742E+01 - 1.2589E+00 9.6788E+01 9.3808E+01 5.4111E+01 4.1896E+01 - 1.4125E+00 7.3039E+01 7.0010E+01 4.0371E+01 3.1177E+01 - 1.5849E+00 5.5265E+01 5.1983E+01 2.9572E+01 2.2875E+01 - 1.7783E+00 4.1232E+01 3.8382E+01 2.2043E+01 1.6799E+01 - 1.9953E+00 3.0253E+01 2.8348E+01 1.5987E+01 1.2270E+01 - 2.2387E+00 2.2246E+01 2.0784E+01 1.1556E+01 8.6738E+00 - 2.5119E+00 1.6392E+01 1.5032E+01 8.5659E+00 6.2263E+00 - 2.8184E+00 1.1914E+01 1.0815E+01 6.0563E+00 4.5258E+00 - 3.1623E+00 8.7055E+00 7.9928E+00 4.2950E+00 3.2759E+00 - 3.5481E+00 6.3185E+00 5.8041E+00 3.0241E+00 2.3018E+00 - 3.9811E+00 4.6159E+00 4.2057E+00 2.1163E+00 1.6056E+00 - 4.4668E+00 3.3269E+00 2.9831E+00 1.5225E+00 1.1298E+00 - 5.0119E+00 2.3740E+00 2.1394E+00 1.0662E+00 7.9106E-01 - 5.6234E+00 1.7317E+00 1.5088E+00 7.3821E-01 5.4902E-01 - 6.3096E+00 1.2467E+00 1.0711E+00 5.1207E-01 3.8167E-01 - 7.0795E+00 8.8588E-01 7.8265E-01 3.4744E-01 2.6514E-01 - 7.9433E+00 6.3311E-01 5.6100E-01 2.4075E-01 1.8270E-01 - 8.9125E+00 4.4904E-01 3.9523E-01 1.6389E-01 1.2299E-01 - 1.0000E+01 3.2473E-01 2.7918E-01 1.1129E-01 8.4987E-02 - 1.1220E+01 2.3273E-01 1.9587E-01 7.6594E-02 5.7119E-02 - 1.2589E+01 1.6622E-01 1.3792E-01 5.1919E-02 3.8219E-02 - 1.4125E+01 1.1766E-01 9.7979E-02 3.4701E-02 2.6740E-02 - 1.5849E+01 8.5145E-02 6.9288E-02 2.2995E-02 1.8152E-02 - 1.7783E+01 6.0844E-02 4.9068E-02 1.5811E-02 1.1849E-02 - 1.9953E+01 4.3357E-02 3.4722E-02 1.0632E-02 7.9819E-03 - 2.2387E+01 3.1244E-02 2.4191E-02 7.1104E-03 5.4336E-03 - 2.5119E+01 2.2276E-02 1.7233E-02 4.9602E-03 3.5612E-03 - 2.8184E+01 1.5804E-02 1.2539E-02 3.3270E-03 2.3743E-03 - 3.1623E+01 1.1153E-02 8.7441E-03 2.1179E-03 1.6274E-03 - 3.5481E+01 7.9383E-03 6.1915E-03 1.4195E-03 1.0892E-03 - 3.9811E+01 5.6472E-03 4.3869E-03 9.4720E-04 7.3704E-04 - 4.4668E+01 4.0166E-03 3.0927E-03 6.2785E-04 4.9339E-04 - 5.0119E+01 2.8518E-03 2.1794E-03 4.1800E-04 3.2497E-04 - 5.6234E+01 2.0270E-03 1.5366E-03 2.7485E-04 2.1485E-04 - 6.3096E+01 1.4405E-03 1.0799E-03 1.8388E-04 1.4183E-04 - 7.0795E+01 1.0169E-03 7.6139E-04 1.2139E-04 9.5296E-05 - 7.9433E+01 7.2063E-04 5.3494E-04 8.0394E-05 6.4691E-05 - 8.9125E+01 5.1005E-04 3.7310E-04 5.3455E-05 4.2465E-05 - 1.0000E+02 3.5993E-04 2.6339E-04 3.5456E-05 2.8447E-05 - 1.1220E+02 2.5380E-04 1.8458E-04 2.3677E-05 1.8883E-05 - 1.2589E+02 1.7909E-04 1.2954E-04 1.5728E-05 1.2434E-05 - 1.4125E+02 1.2617E-04 9.0610E-05 1.0400E-05 8.3147E-06 - 1.5849E+02 8.8646E-05 6.2960E-05 6.9296E-06 5.6658E-06 - 1.7783E+02 6.1922E-05 4.3808E-05 4.6696E-06 3.8101E-06 - 1.9953E+02 4.3473E-05 3.0678E-05 3.1090E-06 2.5504E-06 - 2.2387E+02 3.0500E-05 2.1315E-05 2.0999E-06 1.6716E-06 - 2.5119E+02 2.1381E-05 1.4827E-05 1.4086E-06 1.1064E-06 - 2.8184E+02 1.4907E-05 1.0322E-05 9.1303E-07 7.4685E-07 - 3.1623E+02 1.0477E-05 7.1621E-06 6.1664E-07 5.0439E-07 - 3.5481E+02 7.3532E-06 4.9454E-06 4.1482E-07 3.3967E-07 - 3.9811E+02 5.1250E-06 3.4308E-06 2.8192E-07 2.3013E-07 - 4.4668E+02 3.5599E-06 2.3835E-06 1.8728E-07 1.5245E-07 - 5.0119E+02 2.4799E-06 1.6447E-06 1.2296E-07 9.9476E-08 - 5.6234E+02 1.7305E-06 1.1364E-06 8.5744E-08 6.7465E-08 - 6.3096E+02 1.2049E-06 7.8147E-07 5.8133E-08 4.5787E-08 - 7.0795E+02 8.3880E-07 5.3725E-07 3.8440E-08 3.1268E-08 - 7.9433E+02 5.8274E-07 3.7073E-07 2.6122E-08 2.0815E-08 - 8.9125E+02 4.0361E-07 2.5533E-07 1.7468E-08 1.3909E-08 - 1.0000E+03 2.8064E-07 1.7615E-07 1.1617E-08 9.4599E-09 - 1.1220E+03 1.9327E-07 1.1973E-07 7.8330E-09 6.3878E-09 - 1.2589E+03 1.3362E-07 8.1761E-08 5.4248E-09 4.1710E-09 - 1.4125E+03 9.1615E-08 5.5748E-08 3.6161E-09 2.7330E-09 - 1.5849E+03 6.2820E-08 3.8310E-08 2.3577E-09 1.9171E-09 - 1.7783E+03 4.3146E-08 2.6043E-08 1.5932E-09 1.2644E-09 - 1.9953E+03 2.9286E-08 1.7894E-08 1.0606E-09 8.0626E-10 - 2.2387E+03 1.9886E-08 1.1998E-08 6.8873E-10 5.5849E-10 - 2.5119E+03 1.3535E-08 8.0352E-09 4.6391E-10 3.5945E-10 - 2.8184E+03 9.2123E-09 5.4876E-09 3.0915E-10 2.2072E-10 - 3.1623E+03 6.3765E-09 3.7670E-09 2.1656E-10 1.5246E-10 - 3.5481E+03 4.2316E-09 2.4653E-09 1.4427E-10 1.0356E-10 - 3.9811E+03 2.8600E-09 1.6493E-09 9.2132E-11 6.9083E-11 - 4.4668E+03 1.9076E-09 1.0961E-09 5.8346E-11 4.4067E-11 - 5.0119E+03 1.2831E-09 7.2479E-10 3.9055E-11 2.7370E-11 - 5.6234E+03 8.7037E-10 4.7765E-10 2.6634E-11 1.8495E-11 - 6.3096E+03 5.7370E-10 3.2230E-10 1.7465E-11 1.2990E-11 - 7.0795E+03 3.7891E-10 2.1214E-10 1.1507E-11 8.1215E-12 - 7.9433E+03 2.5376E-10 1.4047E-10 7.4469E-12 5.2307E-12 - 8.9125E+03 1.7037E-10 9.2953E-11 4.7826E-12 3.6280E-12 - 1.0000E+04 1.1198E-10 6.0716E-11 3.2384E-12 2.2610E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1071E+04 1.1453E+04 5.4973E+03 5.1584E+03 - 1.1220E-01 9.7243E+03 1.0050E+04 4.8700E+03 4.5118E+03 - 1.2589E-01 8.4647E+03 8.7809E+03 4.2806E+03 3.9214E+03 - 1.4125E-01 7.2977E+03 7.6051E+03 3.6942E+03 3.3636E+03 - 1.5849E-01 6.2580E+03 6.4830E+03 3.1909E+03 2.8625E+03 - 1.7783E-01 5.3338E+03 5.4946E+03 2.7460E+03 2.4135E+03 - 1.9953E-01 4.5030E+03 4.6423E+03 2.3338E+03 2.0223E+03 - 2.2387E-01 3.7445E+03 3.8468E+03 1.9779E+03 1.6829E+03 - 2.5119E-01 3.0896E+03 3.1490E+03 1.6537E+03 1.3955E+03 - 2.8184E-01 2.5240E+03 2.5838E+03 1.3651E+03 1.1351E+03 - 3.1623E-01 2.0425E+03 2.0939E+03 1.1129E+03 9.1472E+02 - 3.5481E-01 1.6488E+03 1.6824E+03 9.0814E+02 7.4656E+02 - 3.9811E-01 1.3277E+03 1.3468E+03 7.3744E+02 5.9332E+02 - 4.4668E-01 1.0486E+03 1.0675E+03 5.8891E+02 4.7083E+02 - 5.0119E-01 8.2027E+02 8.3902E+02 4.7050E+02 3.7270E+02 - 5.6234E-01 6.4803E+02 6.5037E+02 3.6880E+02 2.8921E+02 - 6.3096E-01 5.0256E+02 5.0202E+02 2.8624E+02 2.2420E+02 - 7.0795E-01 3.8802E+02 3.8667E+02 2.2260E+02 1.7116E+02 - 7.9433E-01 2.9787E+02 2.9593E+02 1.7016E+02 1.3047E+02 - 8.9125E-01 2.2481E+02 2.2415E+02 1.3036E+02 9.9147E+01 - 1.0000E+00 1.7161E+02 1.7037E+02 9.8814E+01 7.6093E+01 - 1.1220E+00 1.2981E+02 1.2852E+02 7.4337E+01 5.7214E+01 - 1.2589E+00 9.7685E+01 9.6492E+01 5.5437E+01 4.2871E+01 - 1.4125E+00 7.3356E+01 7.1750E+01 4.0796E+01 3.1771E+01 - 1.5849E+00 5.5118E+01 5.3090E+01 2.9971E+01 2.3245E+01 - 1.7783E+00 4.1243E+01 3.9173E+01 2.2177E+01 1.7022E+01 - 1.9953E+00 3.0671E+01 2.8936E+01 1.6414E+01 1.2500E+01 - 2.2387E+00 2.2525E+01 2.1233E+01 1.1943E+01 8.9255E+00 - 2.5119E+00 1.6294E+01 1.5290E+01 8.5133E+00 6.3636E+00 - 2.8184E+00 1.1947E+01 1.1020E+01 6.0922E+00 4.5969E+00 - 3.1623E+00 8.6859E+00 7.9753E+00 4.3213E+00 3.2781E+00 - 3.5481E+00 6.3062E+00 5.7734E+00 3.0552E+00 2.3162E+00 - 3.9811E+00 4.5881E+00 4.1487E+00 2.1620E+00 1.6069E+00 - 4.4668E+00 3.3090E+00 2.9660E+00 1.5158E+00 1.1128E+00 - 5.0119E+00 2.3973E+00 2.1342E+00 1.0675E+00 7.8706E-01 - 5.6234E+00 1.7312E+00 1.5235E+00 7.4093E-01 5.5343E-01 - 6.3096E+00 1.2365E+00 1.0912E+00 5.0345E-01 3.8658E-01 - 7.0795E+00 8.8392E-01 7.7986E-01 3.4359E-01 2.6616E-01 - 7.9433E+00 6.3881E-01 5.5441E-01 2.3815E-01 1.7853E-01 - 8.9125E+00 4.5367E-01 3.9036E-01 1.6607E-01 1.2085E-01 - 1.0000E+01 3.2541E-01 2.7372E-01 1.1072E-01 8.3739E-02 - 1.1220E+01 2.3405E-01 1.9411E-01 7.4910E-02 5.6574E-02 - 1.2589E+01 1.6571E-01 1.3831E-01 5.0910E-02 3.9207E-02 - 1.4125E+01 1.1711E-01 9.7805E-02 3.4488E-02 2.6581E-02 - 1.5849E+01 8.4064E-02 6.8578E-02 2.3130E-02 1.7931E-02 - 1.7783E+01 6.0562E-02 4.9361E-02 1.5755E-02 1.1990E-02 - 1.9953E+01 4.2721E-02 3.5532E-02 1.0784E-02 7.8373E-03 - 2.2387E+01 3.0039E-02 2.4967E-02 7.3541E-03 5.3514E-03 - 2.5119E+01 2.1522E-02 1.7349E-02 5.0002E-03 3.6743E-03 - 2.8184E+01 1.5583E-02 1.2157E-02 3.3226E-03 2.3599E-03 - 3.1623E+01 1.1183E-02 8.7715E-03 2.1239E-03 1.6296E-03 - 3.5481E+01 7.9735E-03 6.2140E-03 1.4231E-03 1.0907E-03 - 3.9811E+01 5.6740E-03 4.3821E-03 9.5176E-04 7.2840E-04 - 4.4668E+01 4.0272E-03 3.0884E-03 6.2900E-04 4.8839E-04 - 5.0119E+01 2.8627E-03 2.1850E-03 4.1374E-04 3.2461E-04 - 5.6234E+01 2.0368E-03 1.5461E-03 2.7690E-04 2.1787E-04 - 6.3096E+01 1.4446E-03 1.0917E-03 1.8290E-04 1.4657E-04 - 7.0795E+01 1.0247E-03 7.6715E-04 1.2072E-04 9.7380E-05 - 7.9433E+01 7.2528E-04 5.3961E-04 8.0221E-05 6.3199E-05 - 8.9125E+01 5.1313E-04 3.7953E-04 5.4258E-05 4.2038E-05 - 1.0000E+02 3.6060E-04 2.6390E-04 3.5393E-05 2.8364E-05 - 1.1220E+02 2.5360E-04 1.8416E-04 2.3521E-05 1.8915E-05 - 1.2589E+02 1.7842E-04 1.2931E-04 1.5659E-05 1.2528E-05 - 1.4125E+02 1.2617E-04 9.0331E-05 1.0499E-05 8.3039E-06 - 1.5849E+02 8.8643E-05 6.2827E-05 7.0161E-06 5.5384E-06 - 1.7783E+02 6.2042E-05 4.4031E-05 4.6511E-06 3.7275E-06 - 1.9953E+02 4.3429E-05 3.0660E-05 3.1304E-06 2.4748E-06 - 2.2387E+02 3.0520E-05 2.1281E-05 2.0954E-06 1.6545E-06 - 2.5119E+02 2.1422E-05 1.4806E-05 1.3767E-06 1.1183E-06 - 2.8184E+02 1.4924E-05 1.0241E-05 9.3899E-07 7.5602E-07 - 3.1623E+02 1.0528E-05 7.1494E-06 6.2623E-07 5.0151E-07 - 3.5481E+02 7.3686E-06 4.9566E-06 4.1825E-07 3.3711E-07 - 3.9811E+02 5.1163E-06 3.4366E-06 2.7955E-07 2.2677E-07 - 4.4668E+02 3.5593E-06 2.3670E-06 1.8943E-07 1.5174E-07 - 5.0119E+02 2.4851E-06 1.6384E-06 1.2557E-07 1.0252E-07 - 5.6234E+02 1.7374E-06 1.1370E-06 8.5220E-08 6.9506E-08 - 6.3096E+02 1.2045E-06 7.8580E-07 5.7407E-08 4.6469E-08 - 7.0795E+02 8.3603E-07 5.4043E-07 3.8487E-08 3.0357E-08 - 7.9433E+02 5.8176E-07 3.6999E-07 2.5721E-08 2.0385E-08 - 8.9125E+02 4.0380E-07 2.5490E-07 1.7336E-08 1.3457E-08 - 1.0000E+03 2.8050E-07 1.7624E-07 1.1417E-08 9.2417E-09 - 1.1220E+03 1.9257E-07 1.2001E-07 7.7133E-09 6.0259E-09 - 1.2589E+03 1.3299E-07 8.2350E-08 5.3453E-09 4.0864E-09 - 1.4125E+03 9.2218E-08 5.6250E-08 3.4830E-09 2.8861E-09 - 1.5849E+03 6.3065E-08 3.8202E-08 2.3036E-09 1.8247E-09 - 1.7783E+03 4.2542E-08 2.5975E-08 1.5950E-09 1.2118E-09 - 1.9953E+03 2.9429E-08 1.7558E-08 1.0712E-09 8.1423E-10 - 2.2387E+03 2.0219E-08 1.1860E-08 7.0591E-10 5.4472E-10 - 2.5119E+03 1.3736E-08 8.1195E-09 4.7338E-10 3.4644E-10 - 2.8184E+03 9.2877E-09 5.5124E-09 3.0035E-10 2.2135E-10 - 3.1623E+03 6.4046E-09 3.7617E-09 2.0025E-10 1.5879E-10 - 3.5481E+03 4.2469E-09 2.4642E-09 1.3447E-10 1.0268E-10 - 3.9811E+03 2.8627E-09 1.6604E-09 9.2869E-11 6.2368E-11 - 4.4668E+03 1.9139E-09 1.1139E-09 6.2841E-11 4.3317E-11 - 5.0119E+03 1.2876E-09 7.3463E-10 4.1658E-11 2.9775E-11 - 5.6234E+03 8.6585E-10 4.8257E-10 2.7078E-11 1.9913E-11 - 6.3096E+03 5.7368E-10 3.2537E-10 1.7394E-11 1.3434E-11 - 7.0795E+03 3.7933E-10 2.1327E-10 1.1512E-11 9.1887E-12 - 7.9433E+03 2.5429E-10 1.4269E-10 7.9538E-12 5.9166E-12 - 8.9125E+03 1.6913E-10 9.4517E-11 4.8019E-12 3.6538E-12 - 1.0000E+04 1.1093E-10 6.2160E-11 3.2160E-12 2.3911E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.4106E+04 1.4598E+04 7.1041E+03 6.4728E+03 - 1.1220E-01 1.2210E+04 1.2673E+04 6.2412E+03 5.6454E+03 - 1.2589E-01 1.0587E+04 1.0934E+04 5.4138E+03 4.8748E+03 - 1.4125E-01 9.1209E+03 9.3952E+03 4.6563E+03 4.1473E+03 - 1.5849E-01 7.7680E+03 8.0210E+03 4.0095E+03 3.4825E+03 - 1.7783E-01 6.5500E+03 6.7619E+03 3.4116E+03 2.9121E+03 - 1.9953E-01 5.4516E+03 5.5984E+03 2.8524E+03 2.4198E+03 - 2.2387E-01 4.4745E+03 4.5894E+03 2.3968E+03 2.0008E+03 - 2.5119E-01 3.6557E+03 3.7385E+03 1.9929E+03 1.6347E+03 - 2.8184E-01 2.9492E+03 3.0314E+03 1.6076E+03 1.3147E+03 - 3.1623E-01 2.3615E+03 2.4256E+03 1.3133E+03 1.0524E+03 - 3.5481E-01 1.8817E+03 1.9163E+03 1.0642E+03 8.4967E+02 - 3.9811E-01 1.4785E+03 1.5113E+03 8.4296E+02 6.6924E+02 - 4.4668E-01 1.1578E+03 1.1860E+03 6.6387E+02 5.2016E+02 - 5.0119E-01 9.0598E+02 9.2097E+02 5.2140E+02 4.0703E+02 - 5.6234E-01 6.9564E+02 7.0850E+02 4.0867E+02 3.0957E+02 - 6.3096E-01 5.3130E+02 5.3793E+02 3.1514E+02 2.3680E+02 - 7.0795E-01 4.0623E+02 4.1244E+02 2.4083E+02 1.8168E+02 - 7.9433E-01 3.0767E+02 3.1258E+02 1.8237E+02 1.3969E+02 - 8.9125E-01 2.3345E+02 2.3228E+02 1.3620E+02 1.0523E+02 - 1.0000E+00 1.7671E+02 1.7523E+02 1.0295E+02 7.7687E+01 - 1.1220E+00 1.3179E+02 1.3168E+02 7.6516E+01 5.7785E+01 - 1.2589E+00 9.9148E+01 9.8326E+01 5.6052E+01 4.3133E+01 - 1.4125E+00 7.4586E+01 7.2684E+01 4.1600E+01 3.1611E+01 - 1.5849E+00 5.5564E+01 5.3815E+01 3.0843E+01 2.3046E+01 - 1.7783E+00 4.1321E+01 3.9639E+01 2.2646E+01 1.6686E+01 - 1.9953E+00 3.0236E+01 2.9091E+01 1.6628E+01 1.2190E+01 - 2.2387E+00 2.1986E+01 2.1133E+01 1.2101E+01 9.0863E+00 - 2.5119E+00 1.6206E+01 1.5550E+01 8.7794E+00 6.5723E+00 - 2.8184E+00 1.2025E+01 1.1252E+01 6.2788E+00 4.6464E+00 - 3.1623E+00 8.7281E+00 8.0083E+00 4.3146E+00 3.2647E+00 - 3.5481E+00 6.3696E+00 5.7538E+00 3.0544E+00 2.3005E+00 - 3.9811E+00 4.5945E+00 4.1430E+00 2.1430E+00 1.6205E+00 - 4.4668E+00 3.3344E+00 2.9766E+00 1.5080E+00 1.1532E+00 - 5.0119E+00 2.4154E+00 2.1084E+00 1.0503E+00 7.9949E-01 - 5.6234E+00 1.7314E+00 1.5272E+00 7.3716E-01 5.5524E-01 - 6.3096E+00 1.2397E+00 1.0915E+00 5.2149E-01 3.8601E-01 - 7.0795E+00 8.8620E-01 7.7352E-01 3.5288E-01 2.6560E-01 - 7.9433E+00 6.4131E-01 5.5009E-01 2.3836E-01 1.8331E-01 - 8.9125E+00 4.6019E-01 3.8300E-01 1.6407E-01 1.2668E-01 - 1.0000E+01 3.2563E-01 2.7526E-01 1.1228E-01 8.4312E-02 - 1.1220E+01 2.3158E-01 1.9653E-01 7.6604E-02 5.7701E-02 - 1.2589E+01 1.6549E-01 1.4004E-01 5.2178E-02 3.9738E-02 - 1.4125E+01 1.1858E-01 9.9105E-02 3.5016E-02 2.6864E-02 - 1.5849E+01 8.5183E-02 6.9554E-02 2.3453E-02 1.7752E-02 - 1.7783E+01 6.0597E-02 4.9140E-02 1.5862E-02 1.1933E-02 - 1.9953E+01 4.2630E-02 3.4289E-02 1.0774E-02 8.0828E-03 - 2.2387E+01 3.0545E-02 2.4166E-02 7.2532E-03 5.1690E-03 - 2.5119E+01 2.1984E-02 1.7514E-02 4.7370E-03 3.4209E-03 - 2.8184E+01 1.5610E-02 1.2436E-02 3.1544E-03 2.2737E-03 - 3.1623E+01 1.1168E-02 8.7756E-03 2.1253E-03 1.6450E-03 - 3.5481E+01 7.9729E-03 6.2101E-03 1.4175E-03 1.0953E-03 - 3.9811E+01 5.6751E-03 4.3859E-03 9.4597E-04 7.3172E-04 - 4.4668E+01 4.0406E-03 3.1105E-03 6.2901E-04 4.8977E-04 - 5.0119E+01 2.8722E-03 2.1933E-03 4.1618E-04 3.2447E-04 - 5.6234E+01 2.0376E-03 1.5407E-03 2.7692E-04 2.1692E-04 - 6.3096E+01 1.4433E-03 1.0849E-03 1.8677E-04 1.4385E-04 - 7.0795E+01 1.0218E-03 7.6686E-04 1.2428E-04 9.5674E-05 - 7.9433E+01 7.2485E-04 5.4197E-04 8.1652E-05 6.5056E-05 - 8.9125E+01 5.1136E-04 3.7859E-04 5.4048E-05 4.3186E-05 - 1.0000E+02 3.6121E-04 2.6489E-04 3.5456E-05 2.8316E-05 - 1.1220E+02 2.5495E-04 1.8557E-04 2.3611E-05 1.8867E-05 - 1.2589E+02 1.7963E-04 1.2950E-04 1.5711E-05 1.2723E-05 - 1.4125E+02 1.2631E-04 9.0251E-05 1.0445E-05 8.5101E-06 - 1.5849E+02 8.8918E-05 6.2875E-05 6.9411E-06 5.6368E-06 - 1.7783E+02 6.2237E-05 4.3881E-05 4.5894E-06 3.7545E-06 - 1.9953E+02 4.3664E-05 3.0566E-05 3.0967E-06 2.5022E-06 - 2.2387E+02 3.0930E-05 2.1453E-05 2.0850E-06 1.6788E-06 - 2.5119E+02 2.1605E-05 1.4923E-05 1.4363E-06 1.1192E-06 - 2.8184E+02 1.4913E-05 1.0260E-05 9.5548E-07 7.5767E-07 - 3.1623E+02 1.0508E-05 7.1356E-06 6.1871E-07 5.0262E-07 - 3.5481E+02 7.3495E-06 4.9471E-06 4.1647E-07 3.3732E-07 - 3.9811E+02 5.1152E-06 3.4403E-06 2.8298E-07 2.2668E-07 - 4.4668E+02 3.5810E-06 2.3891E-06 1.9164E-07 1.5045E-07 - 5.0119E+02 2.5126E-06 1.6508E-06 1.2556E-07 1.0344E-07 - 5.6234E+02 1.7431E-06 1.1359E-06 8.4806E-08 6.9315E-08 - 6.3096E+02 1.2119E-06 7.8132E-07 5.6240E-08 4.6584E-08 - 7.0795E+02 8.4123E-07 5.3834E-07 3.7676E-08 3.1488E-08 - 7.9433E+02 5.8540E-07 3.7141E-07 2.5470E-08 2.0737E-08 - 8.9125E+02 4.0438E-07 2.5717E-07 1.7271E-08 1.4096E-08 - 1.0000E+03 2.8095E-07 1.7664E-07 1.1988E-08 9.2677E-09 - 1.1220E+03 1.9417E-07 1.2007E-07 8.0936E-09 6.0741E-09 - 1.2589E+03 1.3345E-07 8.2178E-08 5.4751E-09 4.0090E-09 - 1.4125E+03 9.1492E-08 5.6364E-08 3.5910E-09 2.7983E-09 - 1.5849E+03 6.2904E-08 3.9008E-08 2.4451E-09 1.7931E-09 - 1.7783E+03 4.3117E-08 2.6436E-08 1.6531E-09 1.1890E-09 - 1.9953E+03 2.9534E-08 1.7630E-08 1.0756E-09 8.1894E-10 - 2.2387E+03 2.0191E-08 1.2006E-08 7.1634E-10 5.4550E-10 - 2.5119E+03 1.3562E-08 8.1354E-09 4.7850E-10 3.6995E-10 - 2.8184E+03 9.2184E-09 5.4730E-09 3.2666E-10 2.3167E-10 - 3.1623E+03 6.4281E-09 3.7944E-09 2.1622E-10 1.5309E-10 - 3.5481E+03 4.2529E-09 2.4928E-09 1.4228E-10 1.1017E-10 - 3.9811E+03 2.8458E-09 1.6543E-09 9.7789E-11 7.5799E-11 - 4.4668E+03 1.9223E-09 1.1010E-09 6.3091E-11 4.6912E-11 - 5.0119E+03 1.3050E-09 7.3311E-10 4.1568E-11 2.9223E-11 - 5.6234E+03 8.6450E-10 4.9198E-10 2.7644E-11 1.8385E-11 - 6.3096E+03 5.7213E-10 3.2587E-10 1.8070E-11 1.2875E-11 - 7.0795E+03 3.8425E-10 2.1652E-10 1.1031E-11 8.3619E-12 - 7.9433E+03 2.5682E-10 1.4298E-10 6.7111E-12 5.6000E-12 - 8.9125E+03 1.7011E-10 9.4758E-11 4.7728E-12 3.5930E-12 - 1.0000E+04 1.1279E-10 6.1976E-11 3.4576E-12 2.2937E-12 -average flux in [cosZ =-0.40 -- -0.30, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.6667E+04 1.7240E+04 8.4601E+03 7.5647E+03 - 1.1220E-01 1.4414E+04 1.4862E+04 7.4057E+03 6.5089E+03 - 1.2589E-01 1.2395E+04 1.2725E+04 6.3991E+03 5.5606E+03 - 1.4125E-01 1.0574E+04 1.0890E+04 5.4787E+03 4.7241E+03 - 1.5849E-01 8.9375E+03 9.1725E+03 4.6715E+03 3.9419E+03 - 1.7783E-01 7.4609E+03 7.6263E+03 3.9546E+03 3.2755E+03 - 1.9953E-01 6.1392E+03 6.2889E+03 3.3125E+03 2.7136E+03 - 2.2387E-01 5.0236E+03 5.1142E+03 2.7334E+03 2.2185E+03 - 2.5119E-01 4.0559E+03 4.1239E+03 2.2374E+03 1.7954E+03 - 2.8184E-01 3.2198E+03 3.3057E+03 1.8154E+03 1.4397E+03 - 3.1623E-01 2.5478E+03 2.6182E+03 1.4501E+03 1.1433E+03 - 3.5481E-01 2.0142E+03 2.0626E+03 1.1584E+03 8.9788E+02 - 3.9811E-01 1.5774E+03 1.6089E+03 9.1440E+02 7.0215E+02 - 4.4668E-01 1.2154E+03 1.2430E+03 7.1690E+02 5.5074E+02 - 5.0119E-01 9.2971E+02 9.6081E+02 5.5968E+02 4.2397E+02 - 5.6234E-01 7.0820E+02 7.3885E+02 4.3085E+02 3.2101E+02 - 6.3096E-01 5.4158E+02 5.5566E+02 3.2922E+02 2.4663E+02 - 7.0795E-01 4.1368E+02 4.2046E+02 2.4960E+02 1.8554E+02 - 7.9433E-01 3.1590E+02 3.1666E+02 1.8589E+02 1.3936E+02 - 8.9125E-01 2.3681E+02 2.3576E+02 1.3799E+02 1.0436E+02 - 1.0000E+00 1.7753E+02 1.7716E+02 1.0436E+02 7.8136E+01 - 1.1220E+00 1.3282E+02 1.3151E+02 7.7467E+01 5.8004E+01 - 1.2589E+00 9.9233E+01 9.7300E+01 5.7119E+01 4.3206E+01 - 1.4125E+00 7.4034E+01 7.2188E+01 4.1203E+01 3.1983E+01 - 1.5849E+00 5.5241E+01 5.3495E+01 3.0139E+01 2.3223E+01 - 1.7783E+00 4.1476E+01 3.9387E+01 2.2555E+01 1.6971E+01 - 1.9953E+00 3.0784E+01 2.9107E+01 1.6407E+01 1.2290E+01 - 2.2387E+00 2.2514E+01 2.1138E+01 1.1836E+01 8.8219E+00 - 2.5119E+00 1.6436E+01 1.5214E+01 8.5159E+00 6.4250E+00 - 2.8184E+00 1.1838E+01 1.1069E+01 6.0639E+00 4.6518E+00 - 3.1623E+00 8.7334E+00 8.0108E+00 4.3496E+00 3.2767E+00 - 3.5481E+00 6.3445E+00 5.7825E+00 3.0795E+00 2.3125E+00 - 3.9811E+00 4.5903E+00 4.1514E+00 2.1609E+00 1.6350E+00 - 4.4668E+00 3.3411E+00 2.9883E+00 1.5132E+00 1.1519E+00 - 5.0119E+00 2.3984E+00 2.1564E+00 1.0409E+00 8.0654E-01 - 5.6234E+00 1.7333E+00 1.5221E+00 7.2838E-01 5.5587E-01 - 6.3096E+00 1.2617E+00 1.0881E+00 5.0486E-01 3.8858E-01 - 7.0795E+00 8.9559E-01 7.8403E-01 3.4312E-01 2.7019E-01 - 7.9433E+00 6.4095E-01 5.5660E-01 2.3878E-01 1.8218E-01 - 8.9125E+00 4.6551E-01 3.9264E-01 1.6727E-01 1.2527E-01 - 1.0000E+01 3.3072E-01 2.7908E-01 1.1151E-01 8.5164E-02 - 1.1220E+01 2.3505E-01 1.9873E-01 7.6239E-02 5.7741E-02 - 1.2589E+01 1.6735E-01 1.4049E-01 5.1918E-02 3.9377E-02 - 1.4125E+01 1.1887E-01 9.8532E-02 3.4937E-02 2.6880E-02 - 1.5849E+01 8.5456E-02 7.0229E-02 2.3570E-02 1.7701E-02 - 1.7783E+01 6.1289E-02 5.0128E-02 1.5858E-02 1.1890E-02 - 1.9953E+01 4.3351E-02 3.5800E-02 1.0789E-02 8.1767E-03 - 2.2387E+01 3.1062E-02 2.5615E-02 7.2989E-03 5.6053E-03 - 2.5119E+01 2.2236E-02 1.7700E-02 4.9694E-03 3.6562E-03 - 2.8184E+01 1.5866E-02 1.2381E-02 3.2825E-03 2.5011E-03 - 3.1623E+01 1.1136E-02 8.7496E-03 2.1276E-03 1.6385E-03 - 3.5481E+01 7.9504E-03 6.1751E-03 1.4195E-03 1.0901E-03 - 3.9811E+01 5.6662E-03 4.3791E-03 9.4462E-04 7.2711E-04 - 4.4668E+01 4.0280E-03 3.1014E-03 6.2412E-04 4.8888E-04 - 5.0119E+01 2.8663E-03 2.1834E-03 4.1143E-04 3.2541E-04 - 5.6234E+01 2.0296E-03 1.5389E-03 2.7443E-04 2.1782E-04 - 6.3096E+01 1.4370E-03 1.0852E-03 1.8613E-04 1.4552E-04 - 7.0795E+01 1.0188E-03 7.6252E-04 1.2282E-04 9.7023E-05 - 7.9433E+01 7.2147E-04 5.3396E-04 8.0025E-05 6.3728E-05 - 8.9125E+01 5.1078E-04 3.7311E-04 5.3492E-05 4.2611E-05 - 1.0000E+02 3.6123E-04 2.6405E-04 3.5865E-05 2.8791E-05 - 1.1220E+02 2.5525E-04 1.8566E-04 2.3822E-05 1.9113E-05 - 1.2589E+02 1.7992E-04 1.3017E-04 1.5838E-05 1.2648E-05 - 1.4125E+02 1.2675E-04 9.0535E-05 1.0562E-05 8.5197E-06 - 1.5849E+02 8.9304E-05 6.2965E-05 7.0042E-06 5.7371E-06 - 1.7783E+02 6.2339E-05 4.4047E-05 4.6177E-06 3.8090E-06 - 1.9953E+02 4.3638E-05 3.0668E-05 3.0809E-06 2.5880E-06 - 2.2387E+02 3.0690E-05 2.1276E-05 2.1015E-06 1.7545E-06 - 2.5119E+02 2.1485E-05 1.4792E-05 1.4251E-06 1.1609E-06 - 2.8184E+02 1.4969E-05 1.0278E-05 9.3992E-07 7.5634E-07 - 3.1623E+02 1.0537E-05 7.1457E-06 6.2475E-07 5.0081E-07 - 3.5481E+02 7.3537E-06 4.9503E-06 4.2102E-07 3.3678E-07 - 3.9811E+02 5.1348E-06 3.4396E-06 2.7786E-07 2.2821E-07 - 4.4668E+02 3.5990E-06 2.3794E-06 1.8589E-07 1.5331E-07 - 5.0119E+02 2.5096E-06 1.6400E-06 1.2551E-07 1.0466E-07 - 5.6234E+02 1.7485E-06 1.1391E-06 8.5568E-08 6.9561E-08 - 6.3096E+02 1.2131E-06 7.8630E-07 5.7925E-08 4.6859E-08 - 7.0795E+02 8.4522E-07 5.4102E-07 3.9152E-08 3.1735E-08 - 7.9433E+02 5.8544E-07 3.7078E-07 2.6402E-08 2.1450E-08 - 8.9125E+02 4.0583E-07 2.5587E-07 1.7766E-08 1.4293E-08 - 1.0000E+03 2.8219E-07 1.7648E-07 1.2021E-08 9.3615E-09 - 1.1220E+03 1.9437E-07 1.2026E-07 7.9886E-09 6.2319E-09 - 1.2589E+03 1.3472E-07 8.2506E-08 5.3939E-09 4.1342E-09 - 1.4125E+03 9.2194E-08 5.6104E-08 3.5511E-09 2.7864E-09 - 1.5849E+03 6.2752E-08 3.8414E-08 2.2967E-09 1.8424E-09 - 1.7783E+03 4.3064E-08 2.6532E-08 1.5228E-09 1.2016E-09 - 1.9953E+03 2.9634E-08 1.7770E-08 1.0902E-09 8.4477E-10 - 2.2387E+03 2.0271E-08 1.2078E-08 6.9459E-10 5.5549E-10 - 2.5119E+03 1.3857E-08 8.1794E-09 4.8189E-10 3.5545E-10 - 2.8184E+03 9.4291E-09 5.5075E-09 3.3616E-10 2.3919E-10 - 3.1623E+03 6.4233E-09 3.7892E-09 2.0838E-10 1.6337E-10 - 3.5481E+03 4.2432E-09 2.4831E-09 1.4059E-10 1.0830E-10 - 3.9811E+03 2.8663E-09 1.6537E-09 9.4510E-11 6.5161E-11 - 4.4668E+03 1.9218E-09 1.1094E-09 6.0549E-11 4.1642E-11 - 5.0119E+03 1.2817E-09 7.4587E-10 4.0981E-11 2.9879E-11 - 5.6234E+03 8.5952E-10 4.9335E-10 2.8129E-11 2.1033E-11 - 6.3096E+03 5.7706E-10 3.2685E-10 1.7110E-11 1.2714E-11 - 7.0795E+03 3.8609E-10 2.1862E-10 1.1508E-11 8.2244E-12 - 7.9433E+03 2.5624E-10 1.4582E-10 8.0079E-12 5.4546E-12 - 8.9125E+03 1.6996E-10 9.5007E-11 5.0881E-12 3.3085E-12 - 1.0000E+04 1.1301E-10 6.1573E-11 3.3042E-12 2.2882E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1651E+04 1.2012E+04 5.8018E+03 5.4665E+03 - 1.1220E-01 1.0207E+04 1.0529E+04 5.1401E+03 4.7932E+03 - 1.2589E-01 8.9370E+03 9.1855E+03 4.4906E+03 4.1257E+03 - 1.4125E-01 7.7568E+03 7.9524E+03 3.9024E+03 3.5108E+03 - 1.5849E-01 6.6462E+03 6.8421E+03 3.3722E+03 2.9910E+03 - 1.7783E-01 5.6494E+03 5.7901E+03 2.8867E+03 2.5444E+03 - 1.9953E-01 4.7548E+03 4.8526E+03 2.4571E+03 2.1473E+03 - 2.2387E-01 3.9771E+03 4.0409E+03 2.0680E+03 1.7833E+03 - 2.5119E-01 3.2737E+03 3.3186E+03 1.7237E+03 1.4633E+03 - 2.8184E-01 2.6641E+03 2.7022E+03 1.4291E+03 1.1889E+03 - 3.1623E-01 2.1511E+03 2.1797E+03 1.1638E+03 9.5850E+02 - 3.5481E-01 1.7227E+03 1.7461E+03 9.4119E+02 7.7028E+02 - 3.9811E-01 1.3705E+03 1.3890E+03 7.5396E+02 6.1320E+02 - 4.4668E-01 1.0862E+03 1.0902E+03 5.9486E+02 4.8293E+02 - 5.0119E-01 8.4985E+02 8.4862E+02 4.7066E+02 3.7683E+02 - 5.6234E-01 6.5758E+02 6.5794E+02 3.6674E+02 2.9013E+02 - 6.3096E-01 5.0732E+02 5.0752E+02 2.8201E+02 2.2388E+02 - 7.0795E-01 3.8843E+02 3.8530E+02 2.1695E+02 1.7150E+02 - 7.9433E-01 2.9609E+02 2.9088E+02 1.6609E+02 1.2885E+02 - 8.9125E-01 2.2343E+02 2.2045E+02 1.2509E+02 9.6281E+01 - 1.0000E+00 1.6920E+02 1.6560E+02 9.4184E+01 7.2172E+01 - 1.1220E+00 1.2767E+02 1.2362E+02 6.9761E+01 5.3882E+01 - 1.2589E+00 9.5478E+01 9.1660E+01 5.1032E+01 4.0362E+01 - 1.4125E+00 7.1464E+01 6.8556E+01 3.7866E+01 2.9691E+01 - 1.5849E+00 5.3467E+01 5.0781E+01 2.7878E+01 2.1492E+01 - 1.7783E+00 3.9788E+01 3.6959E+01 2.0147E+01 1.5513E+01 - 1.9953E+00 2.9382E+01 2.7023E+01 1.4412E+01 1.1267E+01 - 2.2387E+00 2.1463E+01 1.9926E+01 1.0517E+01 8.2589E+00 - 2.5119E+00 1.5786E+01 1.4501E+01 7.6441E+00 5.8626E+00 - 2.8184E+00 1.1605E+01 1.0362E+01 5.4836E+00 4.1226E+00 - 3.1623E+00 8.2950E+00 7.4482E+00 3.7675E+00 2.8506E+00 - 3.5481E+00 6.0471E+00 5.3775E+00 2.6351E+00 1.9946E+00 - 3.9811E+00 4.3729E+00 3.8535E+00 1.8735E+00 1.4097E+00 - 4.4668E+00 3.1536E+00 2.7492E+00 1.3191E+00 9.8331E-01 - 5.0119E+00 2.2791E+00 1.9716E+00 9.1184E-01 6.7034E-01 - 5.6234E+00 1.6445E+00 1.4200E+00 6.2072E-01 4.5248E-01 - 6.3096E+00 1.1809E+00 1.0101E+00 4.2897E-01 3.1543E-01 - 7.0795E+00 8.4001E-01 7.0480E-01 2.9044E-01 2.2001E-01 - 7.9433E+00 6.0266E-01 4.9395E-01 1.9593E-01 1.4967E-01 - 8.9125E+00 4.3174E-01 3.5268E-01 1.3331E-01 1.0073E-01 - 1.0000E+01 3.0523E-01 2.5317E-01 9.1636E-02 6.9138E-02 - 1.1220E+01 2.1793E-01 1.7977E-01 6.1890E-02 4.6363E-02 - 1.2589E+01 1.5612E-01 1.2778E-01 4.1422E-02 3.1356E-02 - 1.4125E+01 1.1155E-01 8.9592E-02 2.7411E-02 2.1718E-02 - 1.5849E+01 7.9972E-02 6.3654E-02 1.8095E-02 1.4448E-02 - 1.7783E+01 5.7234E-02 4.5291E-02 1.2277E-02 9.4158E-03 - 1.9953E+01 4.1001E-02 3.1772E-02 8.3197E-03 6.3342E-03 - 2.2387E+01 2.9122E-02 2.2745E-02 5.5550E-03 4.2402E-03 - 2.5119E+01 2.0297E-02 1.6138E-02 3.8387E-03 2.8022E-03 - 2.8184E+01 1.4576E-02 1.1207E-02 2.5093E-03 1.8297E-03 - 3.1623E+01 1.0439E-02 8.0220E-03 1.6643E-03 1.2928E-03 - 3.5481E+01 7.4239E-03 5.6821E-03 1.1060E-03 8.6161E-04 - 3.9811E+01 5.2869E-03 4.0139E-03 7.2973E-04 5.7319E-04 - 4.4668E+01 3.7490E-03 2.8092E-03 4.8439E-04 3.8154E-04 - 5.0119E+01 2.6473E-03 1.9736E-03 3.2329E-04 2.5437E-04 - 5.6234E+01 1.8820E-03 1.3967E-03 2.1515E-04 1.6881E-04 - 6.3096E+01 1.3380E-03 9.8553E-04 1.4249E-04 1.1168E-04 - 7.0795E+01 9.4468E-04 6.9282E-04 9.4570E-05 7.4907E-05 - 7.9433E+01 6.6713E-04 4.8208E-04 6.3536E-05 5.0322E-05 - 8.9125E+01 4.7268E-04 3.3906E-04 4.1272E-05 3.3618E-05 - 1.0000E+02 3.2973E-04 2.3735E-04 2.7919E-05 2.2217E-05 - 1.1220E+02 2.3151E-04 1.6531E-04 1.8557E-05 1.5099E-05 - 1.2589E+02 1.6310E-04 1.1539E-04 1.2534E-05 1.0060E-05 - 1.4125E+02 1.1461E-04 8.0923E-05 8.4289E-06 6.6452E-06 - 1.5849E+02 8.0398E-05 5.6307E-05 5.6444E-06 4.4570E-06 - 1.7783E+02 5.6397E-05 3.9126E-05 3.7610E-06 3.0089E-06 - 1.9953E+02 3.9414E-05 2.7301E-05 2.5188E-06 2.0113E-06 - 2.2387E+02 2.7597E-05 1.8853E-05 1.6831E-06 1.3505E-06 - 2.5119E+02 1.9442E-05 1.2974E-05 1.1196E-06 9.0580E-07 - 2.8184E+02 1.3549E-05 9.0111E-06 7.5978E-07 6.2629E-07 - 3.1623E+02 9.4300E-06 6.3402E-06 5.0929E-07 4.1388E-07 - 3.5481E+02 6.5779E-06 4.3786E-06 3.3913E-07 2.8022E-07 - 3.9811E+02 4.5949E-06 3.0145E-06 2.2997E-07 1.8599E-07 - 4.4668E+02 3.1916E-06 2.0811E-06 1.5887E-07 1.2431E-07 - 5.0119E+02 2.2218E-06 1.4386E-06 1.0496E-07 8.4165E-08 - 5.6234E+02 1.5483E-06 9.9708E-07 7.0693E-08 5.6410E-08 - 6.3096E+02 1.0753E-06 6.8432E-07 4.8019E-08 3.7830E-08 - 7.0795E+02 7.4507E-07 4.6942E-07 3.2142E-08 2.5640E-08 - 7.9433E+02 5.1423E-07 3.2347E-07 2.1696E-08 1.7294E-08 - 8.9125E+02 3.5582E-07 2.2284E-07 1.4872E-08 1.1779E-08 - 1.0000E+03 2.4834E-07 1.5299E-07 9.9847E-09 7.5556E-09 - 1.1220E+03 1.6945E-07 1.0362E-07 6.5383E-09 4.9989E-09 - 1.2589E+03 1.1550E-07 7.0765E-08 4.3974E-09 3.4380E-09 - 1.4125E+03 7.9210E-08 4.8565E-08 2.9927E-09 2.3202E-09 - 1.5849E+03 5.4578E-08 3.3049E-08 1.9858E-09 1.5920E-09 - 1.7783E+03 3.7112E-08 2.2555E-08 1.2627E-09 1.0442E-09 - 1.9953E+03 2.5171E-08 1.5163E-08 8.6604E-10 6.9198E-10 - 2.2387E+03 1.7144E-08 1.0161E-08 6.0444E-10 4.7243E-10 - 2.5119E+03 1.1749E-08 6.9413E-09 3.7816E-10 2.9777E-10 - 2.8184E+03 8.0000E-09 4.6244E-09 2.4639E-10 1.8899E-10 - 3.1623E+03 5.4250E-09 3.1599E-09 1.7102E-10 1.2530E-10 - 3.5481E+03 3.5353E-09 2.0810E-09 1.0878E-10 8.6264E-11 - 3.9811E+03 2.3719E-09 1.3757E-09 7.1899E-11 5.7587E-11 - 4.4668E+03 1.6098E-09 9.2526E-10 4.8688E-11 3.5482E-11 - 5.0119E+03 1.0729E-09 6.2272E-10 3.3026E-11 2.3640E-11 - 5.6234E+03 7.1176E-10 4.0849E-10 2.1122E-11 1.6473E-11 - 6.3096E+03 4.7627E-10 2.6462E-10 1.4694E-11 1.0702E-11 - 7.0795E+03 3.1940E-10 1.7662E-10 9.6350E-12 6.9887E-12 - 7.9433E+03 2.1051E-10 1.1890E-10 6.1823E-12 4.3490E-12 - 8.9125E+03 1.3735E-10 7.7019E-11 4.0104E-12 2.8420E-12 - 1.0000E+04 9.0373E-11 5.0874E-11 2.5118E-12 2.1866E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3108E+04 1.3351E+04 6.4776E+03 6.0920E+03 - 1.1220E-01 1.1448E+04 1.1666E+04 5.7399E+03 5.3151E+03 - 1.2589E-01 9.9579E+03 1.0143E+04 5.0073E+03 4.5855E+03 - 1.4125E-01 8.6239E+03 8.7259E+03 4.3341E+03 3.9143E+03 - 1.5849E-01 7.3902E+03 7.4553E+03 3.7328E+03 3.3227E+03 - 1.7783E-01 6.2535E+03 6.3108E+03 3.1640E+03 2.8045E+03 - 1.9953E-01 5.2263E+03 5.2605E+03 2.6707E+03 2.3258E+03 - 2.2387E-01 4.3309E+03 4.3269E+03 2.2373E+03 1.9163E+03 - 2.5119E-01 3.5441E+03 3.5419E+03 1.8522E+03 1.5833E+03 - 2.8184E-01 2.8637E+03 2.8820E+03 1.5177E+03 1.2898E+03 - 3.1623E-01 2.3044E+03 2.3253E+03 1.2345E+03 1.0337E+03 - 3.5481E-01 1.8382E+03 1.8403E+03 9.9651E+02 8.2243E+02 - 3.9811E-01 1.4452E+03 1.4415E+03 7.9474E+02 6.4984E+02 - 4.4668E-01 1.1359E+03 1.1306E+03 6.2159E+02 5.0883E+02 - 5.0119E-01 8.8412E+02 8.7904E+02 4.8400E+02 3.9339E+02 - 5.6234E-01 6.7734E+02 6.7329E+02 3.7756E+02 3.0220E+02 - 6.3096E-01 5.1893E+02 5.1132E+02 2.9111E+02 2.3065E+02 - 7.0795E-01 3.9724E+02 3.8866E+02 2.2393E+02 1.7548E+02 - 7.9433E-01 3.0297E+02 2.9493E+02 1.7083E+02 1.3219E+02 - 8.9125E-01 2.2758E+02 2.2285E+02 1.2720E+02 9.8715E+01 - 1.0000E+00 1.7150E+02 1.6655E+02 9.4827E+01 7.3422E+01 - 1.1220E+00 1.2860E+02 1.2336E+02 6.9971E+01 5.4386E+01 - 1.2589E+00 9.5927E+01 9.1637E+01 5.1307E+01 4.0062E+01 - 1.4125E+00 7.2234E+01 6.8003E+01 3.7825E+01 2.9268E+01 - 1.5849E+00 5.3813E+01 5.0184E+01 2.7468E+01 2.1305E+01 - 1.7783E+00 3.9567E+01 3.6984E+01 2.0122E+01 1.5569E+01 - 1.9953E+00 2.9126E+01 2.7309E+01 1.4796E+01 1.1234E+01 - 2.2387E+00 2.1412E+01 1.9884E+01 1.0619E+01 8.0237E+00 - 2.5119E+00 1.5709E+01 1.4339E+01 7.5865E+00 5.8142E+00 - 2.8184E+00 1.1458E+01 1.0475E+01 5.3544E+00 4.1992E+00 - 3.1623E+00 8.3326E+00 7.4629E+00 3.7584E+00 2.8727E+00 - 3.5481E+00 6.0793E+00 5.3526E+00 2.6566E+00 2.0156E+00 - 3.9811E+00 4.3906E+00 3.8662E+00 1.8559E+00 1.4032E+00 - 4.4668E+00 3.1618E+00 2.7863E+00 1.3068E+00 9.7103E-01 - 5.0119E+00 2.2716E+00 1.9843E+00 9.0163E-01 6.8095E-01 - 5.6234E+00 1.6187E+00 1.4207E+00 6.2024E-01 4.6590E-01 - 6.3096E+00 1.1565E+00 1.0051E+00 4.3106E-01 3.1619E-01 - 7.0795E+00 8.3386E-01 7.0644E-01 2.9499E-01 2.2264E-01 - 7.9433E+00 6.0171E-01 5.0528E-01 2.0486E-01 1.5116E-01 - 8.9125E+00 4.3487E-01 3.6214E-01 1.4406E-01 1.0161E-01 - 1.0000E+01 3.0741E-01 2.5673E-01 9.1947E-02 6.8681E-02 - 1.1220E+01 2.1893E-01 1.8024E-01 6.2124E-02 4.6465E-02 - 1.2589E+01 1.5661E-01 1.2705E-01 4.2145E-02 3.1364E-02 - 1.4125E+01 1.1192E-01 9.0458E-02 2.8224E-02 2.1064E-02 - 1.5849E+01 7.9893E-02 6.3591E-02 1.9231E-02 1.4264E-02 - 1.7783E+01 5.6630E-02 4.5484E-02 1.2638E-02 9.5498E-03 - 1.9953E+01 4.0725E-02 3.2075E-02 8.3998E-03 6.1370E-03 - 2.2387E+01 2.9312E-02 2.2582E-02 5.7484E-03 4.1212E-03 - 2.5119E+01 2.0886E-02 1.6133E-02 3.8210E-03 2.8751E-03 - 2.8184E+01 1.4882E-02 1.1240E-02 2.5162E-03 1.9455E-03 - 3.1623E+01 1.0441E-02 7.9772E-03 1.6550E-03 1.2803E-03 - 3.5481E+01 7.4179E-03 5.6533E-03 1.1027E-03 8.5102E-04 - 3.9811E+01 5.2741E-03 4.0001E-03 7.3505E-04 5.6510E-04 - 4.4668E+01 3.7449E-03 2.8185E-03 4.8937E-04 3.7746E-04 - 5.0119E+01 2.6516E-03 1.9861E-03 3.2214E-04 2.5578E-04 - 5.6234E+01 1.8805E-03 1.4031E-03 2.1589E-04 1.7206E-04 - 6.3096E+01 1.3309E-03 9.9514E-04 1.4274E-04 1.1387E-04 - 7.0795E+01 9.3841E-04 6.9319E-04 9.4660E-05 7.5739E-05 - 7.9433E+01 6.6363E-04 4.8415E-04 6.3610E-05 5.2025E-05 - 8.9125E+01 4.7119E-04 3.4034E-04 4.2759E-05 3.4724E-05 - 1.0000E+02 3.3022E-04 2.3762E-04 2.8009E-05 2.2396E-05 - 1.1220E+02 2.3261E-04 1.6561E-04 1.8622E-05 1.4897E-05 - 1.2589E+02 1.6329E-04 1.1545E-04 1.2557E-05 9.9179E-06 - 1.4125E+02 1.1450E-04 8.0906E-05 8.3176E-06 6.6910E-06 - 1.5849E+02 8.0740E-05 5.6550E-05 5.4868E-06 4.4920E-06 - 1.7783E+02 5.6763E-05 3.9283E-05 3.7109E-06 2.9831E-06 - 1.9953E+02 3.9681E-05 2.7203E-05 2.5257E-06 1.9849E-06 - 2.2387E+02 2.7760E-05 1.8854E-05 1.6561E-06 1.3624E-06 - 2.5119E+02 1.9335E-05 1.3028E-05 1.1276E-06 9.2422E-07 - 2.8184E+02 1.3479E-05 9.1111E-06 7.5233E-07 6.0968E-07 - 3.1623E+02 9.4499E-06 6.3118E-06 5.0804E-07 4.1177E-07 - 3.5481E+02 6.5833E-06 4.3804E-06 3.4572E-07 2.7737E-07 - 3.9811E+02 4.5822E-06 3.0267E-06 2.3026E-07 1.8750E-07 - 4.4668E+02 3.1916E-06 2.0891E-06 1.5415E-07 1.2708E-07 - 5.0119E+02 2.2283E-06 1.4361E-06 1.0620E-07 8.4123E-08 - 5.6234E+02 1.5547E-06 9.9037E-07 7.1159E-08 5.5032E-08 - 6.3096E+02 1.0755E-06 6.8104E-07 4.8632E-08 3.7380E-08 - 7.0795E+02 7.3946E-07 4.7088E-07 3.2352E-08 2.5461E-08 - 7.9433E+02 5.1187E-07 3.2261E-07 2.1294E-08 1.6635E-08 - 8.9125E+02 3.5543E-07 2.2186E-07 1.4305E-08 1.1439E-08 - 1.0000E+03 2.4761E-07 1.5255E-07 9.7273E-09 7.6260E-09 - 1.1220E+03 1.6898E-07 1.0395E-07 6.4976E-09 4.9874E-09 - 1.2589E+03 1.1546E-07 7.0825E-08 4.4698E-09 3.2768E-09 - 1.4125E+03 7.9100E-08 4.8175E-08 2.9375E-09 2.1776E-09 - 1.5849E+03 5.4452E-08 3.2858E-08 1.9171E-09 1.4503E-09 - 1.7783E+03 3.6972E-08 2.2361E-08 1.3131E-09 9.8702E-10 - 1.9953E+03 2.5242E-08 1.5080E-08 8.8404E-10 6.6479E-10 - 2.2387E+03 1.7160E-08 1.0174E-08 5.9747E-10 4.3379E-10 - 2.5119E+03 1.1614E-08 6.8452E-09 3.9001E-10 2.8754E-10 - 2.8184E+03 7.8535E-09 4.6704E-09 2.4873E-10 1.8942E-10 - 3.1623E+03 5.4116E-09 3.1872E-09 1.6843E-10 1.3079E-10 - 3.5481E+03 3.5714E-09 2.0837E-09 1.0648E-10 8.7863E-11 - 3.9811E+03 2.4110E-09 1.3703E-09 6.8547E-11 5.7346E-11 - 4.4668E+03 1.5896E-09 9.0119E-10 4.7602E-11 3.6922E-11 - 5.0119E+03 1.0578E-09 6.0043E-10 3.3250E-11 2.4747E-11 - 5.6234E+03 7.0286E-10 4.1070E-10 2.1061E-11 1.4914E-11 - 6.3096E+03 4.7342E-10 2.7139E-10 1.3888E-11 9.5884E-12 - 7.0795E+03 3.1391E-10 1.7812E-10 9.0733E-12 6.7404E-12 - 7.9433E+03 2.0794E-10 1.1590E-10 6.1086E-12 4.5381E-12 - 8.9125E+03 1.3882E-10 7.6693E-11 4.0994E-12 2.9157E-12 - 1.0000E+04 9.0408E-11 5.0289E-11 2.7110E-12 1.7863E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.3458E+04 1.3563E+04 6.5684E+03 6.2437E+03 - 1.1220E-01 1.1716E+04 1.1849E+04 5.7779E+03 5.4460E+03 - 1.2589E-01 1.0165E+04 1.0298E+04 5.0494E+03 4.7091E+03 - 1.4125E-01 8.7953E+03 8.8530E+03 4.3825E+03 4.0354E+03 - 1.5849E-01 7.5411E+03 7.4951E+03 3.7517E+03 3.4136E+03 - 1.7783E-01 6.3814E+03 6.3459E+03 3.1678E+03 2.8631E+03 - 1.9953E-01 5.3325E+03 5.3065E+03 2.6669E+03 2.3954E+03 - 2.2387E-01 4.3973E+03 4.3729E+03 2.2303E+03 1.9793E+03 - 2.5119E-01 3.5857E+03 3.5698E+03 1.8436E+03 1.6198E+03 - 2.8184E-01 2.9011E+03 2.8762E+03 1.5188E+03 1.3090E+03 - 3.1623E-01 2.3264E+03 2.3059E+03 1.2302E+03 1.0433E+03 - 3.5481E-01 1.8496E+03 1.8324E+03 9.7725E+02 8.3239E+02 - 3.9811E-01 1.4569E+03 1.4373E+03 7.7874E+02 6.6105E+02 - 4.4668E-01 1.1373E+03 1.1251E+03 6.1513E+02 5.1646E+02 - 5.0119E-01 8.8184E+02 8.7673E+02 4.8193E+02 3.9694E+02 - 5.6234E-01 6.7993E+02 6.6973E+02 3.7422E+02 3.0379E+02 - 6.3096E-01 5.2032E+02 5.1049E+02 2.8700E+02 2.3395E+02 - 7.0795E-01 3.9651E+02 3.8970E+02 2.2048E+02 1.7713E+02 - 7.9433E-01 3.0000E+02 2.9444E+02 1.6614E+02 1.3291E+02 - 8.9125E-01 2.2745E+02 2.2149E+02 1.2342E+02 9.9401E+01 - 1.0000E+00 1.7061E+02 1.6637E+02 9.3734E+01 7.4080E+01 - 1.1220E+00 1.2830E+02 1.2394E+02 6.8997E+01 5.4843E+01 - 1.2589E+00 9.6070E+01 9.1542E+01 5.0552E+01 4.0168E+01 - 1.4125E+00 7.1790E+01 6.7634E+01 3.7289E+01 2.9103E+01 - 1.5849E+00 5.3565E+01 4.9673E+01 2.7504E+01 2.1327E+01 - 1.7783E+00 3.9525E+01 3.6535E+01 2.0074E+01 1.5712E+01 - 1.9953E+00 2.8956E+01 2.6699E+01 1.4431E+01 1.1415E+01 - 2.2387E+00 2.1353E+01 1.9547E+01 1.0301E+01 8.1225E+00 - 2.5119E+00 1.5639E+01 1.4216E+01 7.4018E+00 5.7042E+00 - 2.8184E+00 1.1384E+01 1.0274E+01 5.3474E+00 4.0901E+00 - 3.1623E+00 8.3093E+00 7.4103E+00 3.7739E+00 2.8737E+00 - 3.5481E+00 6.0375E+00 5.3412E+00 2.6412E+00 2.0024E+00 - 3.9811E+00 4.3125E+00 3.8360E+00 1.8452E+00 1.4027E+00 - 4.4668E+00 3.1286E+00 2.7348E+00 1.2938E+00 9.7462E-01 - 5.0119E+00 2.2797E+00 1.9674E+00 8.9046E-01 6.7313E-01 - 5.6234E+00 1.6281E+00 1.4018E+00 6.1536E-01 4.6107E-01 - 6.3096E+00 1.1717E+00 9.9371E-01 4.3126E-01 3.1292E-01 - 7.0795E+00 8.4199E-01 7.0694E-01 2.9657E-01 2.1482E-01 - 7.9433E+00 6.0236E-01 5.0336E-01 1.9968E-01 1.5082E-01 - 8.9125E+00 4.3128E-01 3.6096E-01 1.3753E-01 1.0212E-01 - 1.0000E+01 3.0638E-01 2.5251E-01 9.1665E-02 6.7669E-02 - 1.1220E+01 2.1637E-01 1.7803E-01 6.2762E-02 4.6131E-02 - 1.2589E+01 1.5512E-01 1.2593E-01 4.1782E-02 3.1069E-02 - 1.4125E+01 1.1129E-01 8.9968E-02 2.7593E-02 2.0935E-02 - 1.5849E+01 7.8635E-02 6.3133E-02 1.8687E-02 1.4084E-02 - 1.7783E+01 5.6360E-02 4.4801E-02 1.2359E-02 9.3950E-03 - 1.9953E+01 4.0399E-02 3.2066E-02 8.3648E-03 6.3246E-03 - 2.2387E+01 2.8821E-02 2.2765E-02 5.7206E-03 4.2721E-03 - 2.5119E+01 2.0465E-02 1.6137E-02 3.7657E-03 2.9383E-03 - 2.8184E+01 1.4640E-02 1.1207E-02 2.4919E-03 1.9519E-03 - 3.1623E+01 1.0436E-02 7.9962E-03 1.6606E-03 1.2826E-03 - 3.5481E+01 7.4023E-03 5.6441E-03 1.1081E-03 8.5519E-04 - 3.9811E+01 5.2571E-03 3.9860E-03 7.3222E-04 5.6713E-04 - 4.4668E+01 3.7262E-03 2.8142E-03 4.8822E-04 3.8008E-04 - 5.0119E+01 2.6452E-03 1.9803E-03 3.2841E-04 2.5639E-04 - 5.6234E+01 1.8726E-03 1.3961E-03 2.1660E-04 1.7158E-04 - 6.3096E+01 1.3172E-03 9.7915E-04 1.4251E-04 1.1259E-04 - 7.0795E+01 9.3022E-04 6.8763E-04 9.5969E-05 7.3657E-05 - 7.9433E+01 6.6156E-04 4.8488E-04 6.4253E-05 4.9086E-05 - 8.9125E+01 4.7045E-04 3.3933E-04 4.2751E-05 3.2876E-05 - 1.0000E+02 3.3063E-04 2.3798E-04 2.7730E-05 2.2304E-05 - 1.1220E+02 2.3211E-04 1.6634E-04 1.8342E-05 1.4833E-05 - 1.2589E+02 1.6321E-04 1.1581E-04 1.2387E-05 9.9985E-06 - 1.4125E+02 1.1419E-04 8.0755E-05 8.3608E-06 6.7501E-06 - 1.5849E+02 8.0087E-05 5.6370E-05 5.4937E-06 4.5583E-06 - 1.7783E+02 5.6586E-05 3.9544E-05 3.6717E-06 3.0082E-06 - 1.9953E+02 3.9844E-05 2.7444E-05 2.4406E-06 2.0299E-06 - 2.2387E+02 2.7721E-05 1.9016E-05 1.6073E-06 1.3583E-06 - 2.5119E+02 1.9342E-05 1.3210E-05 1.1077E-06 9.1446E-07 - 2.8184E+02 1.3510E-05 9.1266E-06 7.7085E-07 6.1057E-07 - 3.1623E+02 9.4419E-06 6.3127E-06 5.0884E-07 4.0424E-07 - 3.5481E+02 6.5752E-06 4.3525E-06 3.3993E-07 2.7368E-07 - 3.9811E+02 4.5781E-06 3.0172E-06 2.2817E-07 1.8447E-07 - 4.4668E+02 3.2060E-06 2.0958E-06 1.5580E-07 1.2361E-07 - 5.0119E+02 2.2366E-06 1.4398E-06 1.0602E-07 8.2215E-08 - 5.6234E+02 1.5564E-06 9.9895E-07 7.2353E-08 5.6419E-08 - 6.3096E+02 1.0778E-06 6.8822E-07 4.7701E-08 3.8175E-08 - 7.0795E+02 7.4422E-07 4.7389E-07 3.1271E-08 2.5492E-08 - 7.9433E+02 5.1198E-07 3.2540E-07 2.1330E-08 1.7205E-08 - 8.9125E+02 3.5381E-07 2.2244E-07 1.4624E-08 1.1538E-08 - 1.0000E+03 2.4509E-07 1.5357E-07 9.8687E-09 7.5035E-09 - 1.1220E+03 1.6875E-07 1.0426E-07 6.4549E-09 5.0168E-09 - 1.2589E+03 1.1650E-07 7.0845E-08 4.3300E-09 3.4844E-09 - 1.4125E+03 7.9651E-08 4.8368E-08 2.9834E-09 2.2834E-09 - 1.5849E+03 5.4537E-08 3.2509E-08 1.9443E-09 1.5102E-09 - 1.7783E+03 3.7352E-08 2.2327E-08 1.3191E-09 1.0074E-09 - 1.9953E+03 2.5266E-08 1.5245E-08 9.3005E-10 6.4559E-10 - 2.2387E+03 1.7120E-08 1.0218E-08 6.0901E-10 4.2952E-10 - 2.5119E+03 1.1628E-08 6.9332E-09 3.8894E-10 2.8533E-10 - 2.8184E+03 7.9254E-09 4.6090E-09 2.6436E-10 1.9429E-10 - 3.1623E+03 5.4622E-09 3.1463E-09 1.6959E-10 1.2789E-10 - 3.5481E+03 3.5610E-09 2.0751E-09 1.0984E-10 8.5989E-11 - 3.9811E+03 2.3717E-09 1.3901E-09 7.0839E-11 5.8514E-11 - 4.4668E+03 1.5992E-09 9.2230E-10 4.8345E-11 3.7643E-11 - 5.0119E+03 1.0640E-09 6.1006E-10 3.3161E-11 2.3698E-11 - 5.6234E+03 7.0453E-10 4.0030E-10 1.9672E-11 1.5136E-11 - 6.3096E+03 4.7251E-10 2.6516E-10 1.4744E-11 1.0128E-11 - 7.0795E+03 3.1468E-10 1.7554E-10 9.5167E-12 6.4781E-12 - 7.9433E+03 2.0683E-10 1.1639E-10 6.0602E-12 4.3905E-12 - 8.9125E+03 1.3720E-10 7.6470E-11 3.9843E-12 2.9472E-12 - 1.0000E+04 9.1231E-11 4.9233E-11 2.5927E-12 1.9775E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2854E+04 1.2834E+04 6.1381E+03 6.0877E+03 - 1.1220E-01 1.1306E+04 1.1194E+04 5.4194E+03 5.2926E+03 - 1.2589E-01 9.8292E+03 9.6893E+03 4.7113E+03 4.5936E+03 - 1.4125E-01 8.4709E+03 8.3468E+03 4.0803E+03 3.9262E+03 - 1.5849E-01 7.2467E+03 7.1600E+03 3.5012E+03 3.3209E+03 - 1.7783E-01 6.1072E+03 6.0290E+03 2.9718E+03 2.8016E+03 - 1.9953E-01 5.1214E+03 5.0147E+03 2.5203E+03 2.3414E+03 - 2.2387E-01 4.2498E+03 4.1509E+03 2.1153E+03 1.9417E+03 - 2.5119E-01 3.4766E+03 3.3957E+03 1.7467E+03 1.5811E+03 - 2.8184E-01 2.8254E+03 2.7552E+03 1.4368E+03 1.2813E+03 - 3.1623E-01 2.2699E+03 2.2196E+03 1.1706E+03 1.0400E+03 - 3.5481E-01 1.8053E+03 1.7635E+03 9.4162E+02 8.2621E+02 - 3.9811E-01 1.4330E+03 1.3930E+03 7.5531E+02 6.4996E+02 - 4.4668E-01 1.1240E+03 1.0947E+03 5.9645E+02 5.0399E+02 - 5.0119E-01 8.7497E+02 8.5142E+02 4.6528E+02 3.9102E+02 - 5.6234E-01 6.7615E+02 6.5808E+02 3.6591E+02 3.0481E+02 - 6.3096E-01 5.1903E+02 5.0290E+02 2.8226E+02 2.3441E+02 - 7.0795E-01 3.9610E+02 3.8069E+02 2.1404E+02 1.7705E+02 - 7.9433E-01 3.0123E+02 2.8696E+02 1.6127E+02 1.3136E+02 - 8.9125E-01 2.2706E+02 2.1686E+02 1.2206E+02 9.9432E+01 - 1.0000E+00 1.7056E+02 1.6359E+02 9.1656E+01 7.4564E+01 - 1.1220E+00 1.2895E+02 1.2247E+02 6.8744E+01 5.4701E+01 - 1.2589E+00 9.6074E+01 9.1308E+01 5.0883E+01 4.0055E+01 - 1.4125E+00 7.1411E+01 6.7748E+01 3.7021E+01 2.9513E+01 - 1.5849E+00 5.3575E+01 4.9950E+01 2.7310E+01 2.1554E+01 - 1.7783E+00 3.9738E+01 3.6908E+01 2.0021E+01 1.5600E+01 - 1.9953E+00 2.9176E+01 2.7110E+01 1.4592E+01 1.1258E+01 - 2.2387E+00 2.1398E+01 1.9699E+01 1.0410E+01 8.1075E+00 - 2.5119E+00 1.5566E+01 1.4232E+01 7.3767E+00 5.8948E+00 - 2.8184E+00 1.1381E+01 1.0232E+01 5.2971E+00 4.1571E+00 - 3.1623E+00 8.3022E+00 7.4281E+00 3.7573E+00 2.8478E+00 - 3.5481E+00 6.0085E+00 5.3349E+00 2.6612E+00 2.0119E+00 - 3.9811E+00 4.3696E+00 3.8368E+00 1.8685E+00 1.4160E+00 - 4.4668E+00 3.1589E+00 2.7600E+00 1.2895E+00 9.7796E-01 - 5.0119E+00 2.2838E+00 1.9630E+00 8.8917E-01 6.6217E-01 - 5.6234E+00 1.6326E+00 1.4013E+00 6.1691E-01 4.6115E-01 - 6.3096E+00 1.1657E+00 9.9698E-01 4.2531E-01 3.2460E-01 - 7.0795E+00 8.4047E-01 7.1110E-01 2.9481E-01 2.2216E-01 - 7.9433E+00 5.9904E-01 5.0748E-01 1.9967E-01 1.5300E-01 - 8.9125E+00 4.3422E-01 3.6073E-01 1.3305E-01 1.0321E-01 - 1.0000E+01 3.0684E-01 2.5193E-01 9.2312E-02 6.9393E-02 - 1.1220E+01 2.1834E-01 1.7901E-01 6.2137E-02 4.6893E-02 - 1.2589E+01 1.5574E-01 1.2593E-01 4.1729E-02 3.1187E-02 - 1.4125E+01 1.1142E-01 8.8505E-02 2.8087E-02 2.1084E-02 - 1.5849E+01 7.9526E-02 6.2993E-02 1.9154E-02 1.4010E-02 - 1.7783E+01 5.6093E-02 4.4123E-02 1.2568E-02 9.3940E-03 - 1.9953E+01 4.0381E-02 3.1527E-02 8.1802E-03 6.3715E-03 - 2.2387E+01 2.8536E-02 2.2427E-02 5.5108E-03 4.1436E-03 - 2.5119E+01 2.0113E-02 1.6053E-02 3.6380E-03 2.7106E-03 - 2.8184E+01 1.4455E-02 1.1513E-02 2.3968E-03 1.8524E-03 - 3.1623E+01 1.0398E-02 7.9589E-03 1.6623E-03 1.2746E-03 - 3.5481E+01 7.4029E-03 5.6286E-03 1.1057E-03 8.5641E-04 - 3.9811E+01 5.2541E-03 3.9765E-03 7.3347E-04 5.6671E-04 - 4.4668E+01 3.7302E-03 2.8025E-03 4.8385E-04 3.7673E-04 - 5.0119E+01 2.6407E-03 1.9754E-03 3.2292E-04 2.5093E-04 - 5.6234E+01 1.8736E-03 1.3943E-03 2.1419E-04 1.6834E-04 - 6.3096E+01 1.3271E-03 9.8251E-04 1.4050E-04 1.1299E-04 - 7.0795E+01 9.3710E-04 6.8908E-04 9.1867E-05 7.5745E-05 - 7.9433E+01 6.6418E-04 4.8389E-04 6.1658E-05 4.9930E-05 - 8.9125E+01 4.6918E-04 3.4111E-04 4.1763E-05 3.3848E-05 - 1.0000E+02 3.2931E-04 2.3747E-04 2.7851E-05 2.2416E-05 - 1.1220E+02 2.3147E-04 1.6608E-04 1.8599E-05 1.4803E-05 - 1.2589E+02 1.6311E-04 1.1614E-04 1.2453E-05 1.0008E-05 - 1.4125E+02 1.1436E-04 8.0624E-05 8.2744E-06 6.7396E-06 - 1.5849E+02 8.0199E-05 5.6337E-05 5.5668E-06 4.5404E-06 - 1.7783E+02 5.6266E-05 3.9393E-05 3.8152E-06 2.9621E-06 - 1.9953E+02 3.9526E-05 2.7261E-05 2.5440E-06 1.9748E-06 - 2.2387E+02 2.7661E-05 1.8993E-05 1.6833E-06 1.3568E-06 - 2.5119E+02 1.9243E-05 1.3104E-05 1.1157E-06 9.1864E-07 - 2.8184E+02 1.3468E-05 9.0539E-06 7.5113E-07 5.9748E-07 - 3.1623E+02 9.4452E-06 6.3325E-06 5.0772E-07 4.1046E-07 - 3.5481E+02 6.5806E-06 4.3693E-06 3.4380E-07 2.7559E-07 - 3.9811E+02 4.5891E-06 3.0166E-06 2.3020E-07 1.8480E-07 - 4.4668E+02 3.2022E-06 2.0870E-06 1.5553E-07 1.2147E-07 - 5.0119E+02 2.2329E-06 1.4451E-06 1.0496E-07 8.3080E-08 - 5.6234E+02 1.5516E-06 9.9994E-07 7.0840E-08 5.6568E-08 - 6.3096E+02 1.0731E-06 6.8708E-07 4.7067E-08 3.7305E-08 - 7.0795E+02 7.4420E-07 4.7079E-07 3.2024E-08 2.4678E-08 - 7.9433E+02 5.1300E-07 3.2276E-07 2.2104E-08 1.6895E-08 - 8.9125E+02 3.5464E-07 2.2228E-07 1.4655E-08 1.1504E-08 - 1.0000E+03 2.4721E-07 1.5368E-07 9.6079E-09 7.7721E-09 - 1.1220E+03 1.6939E-07 1.0475E-07 6.3462E-09 5.0866E-09 - 1.2589E+03 1.1652E-07 7.1007E-08 4.4382E-09 3.4506E-09 - 1.4125E+03 8.0240E-08 4.8308E-08 2.9604E-09 2.2837E-09 - 1.5849E+03 5.4687E-08 3.2904E-08 1.9599E-09 1.5101E-09 - 1.7783E+03 3.7105E-08 2.2340E-08 1.2655E-09 9.8827E-10 - 1.9953E+03 2.5219E-08 1.5190E-08 8.6600E-10 6.4919E-10 - 2.2387E+03 1.7089E-08 1.0262E-08 5.9416E-10 4.1019E-10 - 2.5119E+03 1.1562E-08 6.8357E-09 4.1450E-10 2.7831E-10 - 2.8184E+03 7.8625E-09 4.6289E-09 2.7048E-10 1.8869E-10 - 3.1623E+03 5.4162E-09 3.1776E-09 1.6964E-10 1.2956E-10 - 3.5481E+03 3.5533E-09 2.0878E-09 1.1568E-10 8.0505E-11 - 3.9811E+03 2.3826E-09 1.3879E-09 7.6972E-11 5.4682E-11 - 4.4668E+03 1.5977E-09 9.2557E-10 5.2041E-11 3.4625E-11 - 5.0119E+03 1.0763E-09 6.1510E-10 3.3514E-11 2.4034E-11 - 5.6234E+03 7.2266E-10 4.0532E-10 2.1769E-11 1.5691E-11 - 6.3096E+03 4.7269E-10 2.6645E-10 1.4310E-11 9.5624E-12 - 7.0795E+03 3.1371E-10 1.7778E-10 9.5158E-12 6.1732E-12 - 7.9433E+03 2.0613E-10 1.1944E-10 6.0835E-12 4.0764E-12 - 8.9125E+03 1.3444E-10 7.7754E-11 4.2373E-12 2.6610E-12 - 1.0000E+04 8.8395E-11 4.9296E-11 2.8299E-12 1.5802E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.2038E+04 1.2035E+04 5.6906E+03 5.6764E+03 - 1.1220E-01 1.0552E+04 1.0502E+04 5.0334E+03 4.9757E+03 - 1.2589E-01 9.1688E+03 9.1384E+03 4.4098E+03 4.3255E+03 - 1.4125E-01 7.9445E+03 7.8906E+03 3.8234E+03 3.7045E+03 - 1.5849E-01 6.8201E+03 6.7293E+03 3.2794E+03 3.1507E+03 - 1.7783E-01 5.7832E+03 5.7181E+03 2.7888E+03 2.6768E+03 - 1.9953E-01 4.8637E+03 4.7869E+03 2.3706E+03 2.2364E+03 - 2.2387E-01 4.0538E+03 3.9615E+03 1.9980E+03 1.8426E+03 - 2.5119E-01 3.3335E+03 3.2546E+03 1.6547E+03 1.5199E+03 - 2.8184E-01 2.7036E+03 2.6373E+03 1.3602E+03 1.2434E+03 - 3.1623E-01 2.1806E+03 2.1322E+03 1.1177E+03 1.0048E+03 - 3.5481E-01 1.7530E+03 1.7141E+03 9.1077E+02 7.9767E+02 - 3.9811E-01 1.4010E+03 1.3548E+03 7.2759E+02 6.3253E+02 - 4.4668E-01 1.1065E+03 1.0649E+03 5.7896E+02 4.9760E+02 - 5.0119E-01 8.6197E+02 8.3073E+02 4.5549E+02 3.8583E+02 - 5.6234E-01 6.7001E+02 6.4292E+02 3.5475E+02 2.9996E+02 - 6.3096E-01 5.1734E+02 4.9575E+02 2.7595E+02 2.3212E+02 - 7.0795E-01 3.9259E+02 3.7975E+02 2.1012E+02 1.7432E+02 - 7.9433E-01 2.9605E+02 2.8738E+02 1.5901E+02 1.3065E+02 - 8.9125E-01 2.2638E+02 2.1789E+02 1.2222E+02 9.9226E+01 - 1.0000E+00 1.7124E+02 1.6328E+02 9.1254E+01 7.4060E+01 - 1.1220E+00 1.2823E+02 1.2213E+02 6.8374E+01 5.4819E+01 - 1.2589E+00 9.5725E+01 9.1769E+01 5.0903E+01 4.0312E+01 - 1.4125E+00 7.1580E+01 6.8099E+01 3.7420E+01 2.9332E+01 - 1.5849E+00 5.3599E+01 4.9670E+01 2.7404E+01 2.1415E+01 - 1.7783E+00 3.9829E+01 3.6565E+01 2.0060E+01 1.5711E+01 - 1.9953E+00 2.9088E+01 2.7078E+01 1.4473E+01 1.1406E+01 - 2.2387E+00 2.1361E+01 1.9753E+01 1.0441E+01 8.1322E+00 - 2.5119E+00 1.5684E+01 1.4308E+01 7.4464E+00 5.7206E+00 - 2.8184E+00 1.1359E+01 1.0364E+01 5.3169E+00 4.0135E+00 - 3.1623E+00 8.2755E+00 7.4074E+00 3.7303E+00 2.8661E+00 - 3.5481E+00 6.0057E+00 5.3554E+00 2.6113E+00 2.0120E+00 - 3.9811E+00 4.3600E+00 3.8730E+00 1.8386E+00 1.3974E+00 - 4.4668E+00 3.1391E+00 2.7689E+00 1.2857E+00 9.6974E-01 - 5.0119E+00 2.2563E+00 1.9642E+00 8.9439E-01 6.7416E-01 - 5.6234E+00 1.6311E+00 1.3920E+00 6.2273E-01 4.6138E-01 - 6.3096E+00 1.1631E+00 9.8918E-01 4.2294E-01 3.2207E-01 - 7.0795E+00 8.3052E-01 7.0327E-01 2.8739E-01 2.1982E-01 - 7.9433E+00 5.9970E-01 4.9645E-01 1.9868E-01 1.4867E-01 - 8.9125E+00 4.2837E-01 3.5170E-01 1.3459E-01 1.0114E-01 - 1.0000E+01 3.0734E-01 2.5364E-01 9.0183E-02 6.7944E-02 - 1.1220E+01 2.1999E-01 1.8095E-01 6.1123E-02 4.6393E-02 - 1.2589E+01 1.5660E-01 1.2746E-01 4.1595E-02 3.1734E-02 - 1.4125E+01 1.1175E-01 9.0054E-02 2.8034E-02 2.1393E-02 - 1.5849E+01 7.9925E-02 6.4209E-02 1.8900E-02 1.4428E-02 - 1.7783E+01 5.6915E-02 4.5043E-02 1.2637E-02 9.5733E-03 - 1.9953E+01 4.0145E-02 3.1342E-02 8.2411E-03 6.3778E-03 - 2.2387E+01 2.8523E-02 2.1970E-02 5.5410E-03 4.3228E-03 - 2.5119E+01 2.0403E-02 1.5842E-02 3.6104E-03 3.0186E-03 - 2.8184E+01 1.4642E-02 1.1382E-02 2.4163E-03 1.9272E-03 - 3.1623E+01 1.0424E-02 7.9934E-03 1.6563E-03 1.2771E-03 - 3.5481E+01 7.4148E-03 5.6536E-03 1.0996E-03 8.5815E-04 - 3.9811E+01 5.2443E-03 3.9834E-03 7.3927E-04 5.7276E-04 - 4.4668E+01 3.7141E-03 2.8081E-03 4.9401E-04 3.8226E-04 - 5.0119E+01 2.6350E-03 1.9756E-03 3.2696E-04 2.5440E-04 - 5.6234E+01 1.8714E-03 1.3830E-03 2.1546E-04 1.6999E-04 - 6.3096E+01 1.3262E-03 9.7307E-04 1.4364E-04 1.1178E-04 - 7.0795E+01 9.3700E-04 6.8518E-04 9.4716E-05 7.3733E-05 - 7.9433E+01 6.6238E-04 4.8358E-04 6.1930E-05 4.9871E-05 - 8.9125E+01 4.6566E-04 3.3865E-04 4.2147E-05 3.3823E-05 - 1.0000E+02 3.2953E-04 2.3652E-04 2.7810E-05 2.2389E-05 - 1.1220E+02 2.3163E-04 1.6518E-04 1.8419E-05 1.5048E-05 - 1.2589E+02 1.6267E-04 1.1510E-04 1.2450E-05 1.0029E-05 - 1.4125E+02 1.1475E-04 8.0626E-05 8.3343E-06 6.6679E-06 - 1.5849E+02 8.0566E-05 5.6276E-05 5.5887E-06 4.4818E-06 - 1.7783E+02 5.6198E-05 3.8995E-05 3.7630E-06 3.0513E-06 - 1.9953E+02 3.9325E-05 2.6995E-05 2.5188E-06 2.0669E-06 - 2.2387E+02 2.7626E-05 1.8729E-05 1.6679E-06 1.3721E-06 - 2.5119E+02 1.9271E-05 1.3045E-05 1.1055E-06 9.4025E-07 - 2.8184E+02 1.3495E-05 9.0337E-06 7.5947E-07 6.2360E-07 - 3.1623E+02 9.4375E-06 6.3249E-06 5.0698E-07 4.0707E-07 - 3.5481E+02 6.5779E-06 4.3576E-06 3.4158E-07 2.7668E-07 - 3.9811E+02 4.5795E-06 3.0248E-06 2.3273E-07 1.8625E-07 - 4.4668E+02 3.1954E-06 2.0880E-06 1.5734E-07 1.2642E-07 - 5.0119E+02 2.2282E-06 1.4394E-06 1.0432E-07 8.5625E-08 - 5.6234E+02 1.5554E-06 9.9368E-07 7.0665E-08 5.6451E-08 - 6.3096E+02 1.0754E-06 6.8153E-07 4.7689E-08 3.8295E-08 - 7.0795E+02 7.4205E-07 4.6944E-07 3.2235E-08 2.5791E-08 - 7.9433E+02 5.1273E-07 3.2443E-07 2.1946E-08 1.6813E-08 - 8.9125E+02 3.5403E-07 2.2275E-07 1.4696E-08 1.1248E-08 - 1.0000E+03 2.4697E-07 1.5300E-07 1.0180E-08 7.4845E-09 - 1.1220E+03 1.6927E-07 1.0387E-07 6.6882E-09 5.0509E-09 - 1.2589E+03 1.1613E-07 7.1306E-08 4.3684E-09 3.4679E-09 - 1.4125E+03 7.9789E-08 4.8333E-08 2.8939E-09 2.3475E-09 - 1.5849E+03 5.4585E-08 3.2799E-08 2.0217E-09 1.5706E-09 - 1.7783E+03 3.7034E-08 2.2282E-08 1.3980E-09 1.0082E-09 - 1.9953E+03 2.5172E-08 1.5006E-08 8.5909E-10 6.4682E-10 - 2.2387E+03 1.7101E-08 1.0173E-08 5.9410E-10 4.2450E-10 - 2.5119E+03 1.1641E-08 6.8920E-09 3.9470E-10 2.9821E-10 - 2.8184E+03 7.9249E-09 4.6123E-09 2.3742E-10 2.0769E-10 - 3.1623E+03 5.3890E-09 3.1759E-09 1.7370E-10 1.2431E-10 - 3.5481E+03 3.5229E-09 2.0585E-09 1.1548E-10 8.1522E-11 - 3.9811E+03 2.3687E-09 1.3646E-09 7.3290E-11 5.4467E-11 - 4.4668E+03 1.5845E-09 9.1450E-10 4.6448E-11 3.7235E-11 - 5.0119E+03 1.0563E-09 5.9989E-10 3.0266E-11 2.3857E-11 - 5.6234E+03 7.0593E-10 3.9824E-10 2.0100E-11 1.3612E-11 - 6.3096E+03 4.7320E-10 2.6584E-10 1.3281E-11 1.0499E-11 - 7.0795E+03 3.1256E-10 1.7500E-10 8.6826E-12 6.8165E-12 - 7.9433E+03 2.0844E-10 1.1410E-10 6.0112E-12 4.2730E-12 - 8.9125E+03 1.3726E-10 7.5576E-11 3.9356E-12 2.8748E-12 - 1.0000E+04 9.0293E-11 4.9919E-11 2.6130E-12 1.9763E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1941E+04 1.2018E+04 5.7175E+03 5.6284E+03 - 1.1220E-01 1.0451E+04 1.0502E+04 5.1093E+03 4.9224E+03 - 1.2589E-01 9.1134E+03 9.1471E+03 4.4596E+03 4.2945E+03 - 1.4125E-01 7.9124E+03 7.9008E+03 3.8293E+03 3.6932E+03 - 1.5849E-01 6.7843E+03 6.7735E+03 3.2966E+03 3.1270E+03 - 1.7783E-01 5.7417E+03 5.7195E+03 2.8178E+03 2.6252E+03 - 1.9953E-01 4.8412E+03 4.7993E+03 2.3844E+03 2.1912E+03 - 2.2387E-01 4.0441E+03 3.9956E+03 2.0213E+03 1.8325E+03 - 2.5119E-01 3.3187E+03 3.2861E+03 1.6922E+03 1.5131E+03 - 2.8184E-01 2.7063E+03 2.6787E+03 1.3865E+03 1.2394E+03 - 3.1623E-01 2.1988E+03 2.1548E+03 1.1314E+03 9.9730E+02 - 3.5481E-01 1.7601E+03 1.7294E+03 9.1425E+02 7.9179E+02 - 3.9811E-01 1.3920E+03 1.3774E+03 7.2990E+02 6.3327E+02 - 4.4668E-01 1.0970E+03 1.0767E+03 5.8221E+02 4.9746E+02 - 5.0119E-01 8.5651E+02 8.3687E+02 4.5695E+02 3.8183E+02 - 5.6234E-01 6.6056E+02 6.4675E+02 3.5411E+02 2.9744E+02 - 6.3096E-01 5.1400E+02 4.9841E+02 2.7866E+02 2.3016E+02 - 7.0795E-01 3.9513E+02 3.8355E+02 2.1404E+02 1.7391E+02 - 7.9433E-01 2.9815E+02 2.9272E+02 1.6186E+02 1.3083E+02 - 8.9125E-01 2.2672E+02 2.2059E+02 1.2101E+02 9.8298E+01 - 1.0000E+00 1.7147E+02 1.6429E+02 9.1802E+01 7.3601E+01 - 1.1220E+00 1.2849E+02 1.2268E+02 6.8393E+01 5.5005E+01 - 1.2589E+00 9.5604E+01 9.1453E+01 5.0763E+01 3.9969E+01 - 1.4125E+00 7.1493E+01 6.7639E+01 3.7514E+01 2.9013E+01 - 1.5849E+00 5.3412E+01 4.9572E+01 2.7625E+01 2.1234E+01 - 1.7783E+00 3.9470E+01 3.6319E+01 2.0155E+01 1.5508E+01 - 1.9953E+00 2.9061E+01 2.6978E+01 1.4563E+01 1.1132E+01 - 2.2387E+00 2.1329E+01 1.9759E+01 1.0566E+01 7.9337E+00 - 2.5119E+00 1.5582E+01 1.4221E+01 7.5625E+00 5.7839E+00 - 2.8184E+00 1.1450E+01 1.0246E+01 5.3660E+00 4.0349E+00 - 3.1623E+00 8.2938E+00 7.3673E+00 3.7651E+00 2.8687E+00 - 3.5481E+00 5.9686E+00 5.3018E+00 2.6191E+00 1.9903E+00 - 3.9811E+00 4.3393E+00 3.8220E+00 1.8372E+00 1.3954E+00 - 4.4668E+00 3.1396E+00 2.7543E+00 1.2935E+00 9.7540E-01 - 5.0119E+00 2.2470E+00 1.9546E+00 8.9196E-01 6.6457E-01 - 5.6234E+00 1.6177E+00 1.3970E+00 6.0852E-01 4.6168E-01 - 6.3096E+00 1.1697E+00 1.0025E+00 4.1484E-01 3.2490E-01 - 7.0795E+00 8.4237E-01 7.0867E-01 2.8153E-01 2.2140E-01 - 7.9433E+00 6.0383E-01 5.0006E-01 1.9633E-01 1.4828E-01 - 8.9125E+00 4.3162E-01 3.5608E-01 1.3713E-01 9.9726E-02 - 1.0000E+01 3.0791E-01 2.5398E-01 9.2492E-02 6.8559E-02 - 1.1220E+01 2.1948E-01 1.7865E-01 6.2407E-02 4.6346E-02 - 1.2589E+01 1.5677E-01 1.2620E-01 4.1954E-02 3.1241E-02 - 1.4125E+01 1.1070E-01 8.9727E-02 2.8331E-02 2.1178E-02 - 1.5849E+01 7.9254E-02 6.3249E-02 1.9057E-02 1.4163E-02 - 1.7783E+01 5.7081E-02 4.4601E-02 1.2256E-02 9.5867E-03 - 1.9953E+01 4.0377E-02 3.1615E-02 8.1472E-03 6.3550E-03 - 2.2387E+01 2.8394E-02 2.2655E-02 5.4575E-03 4.0567E-03 - 2.5119E+01 2.0485E-02 1.5828E-02 3.6983E-03 2.8356E-03 - 2.8184E+01 1.4555E-02 1.1155E-02 2.4836E-03 2.0451E-03 - 3.1623E+01 1.0429E-02 7.9740E-03 1.6503E-03 1.2742E-03 - 3.5481E+01 7.3824E-03 5.6386E-03 1.1020E-03 8.5029E-04 - 3.9811E+01 5.2544E-03 3.9824E-03 7.3213E-04 5.6552E-04 - 4.4668E+01 3.7503E-03 2.8186E-03 4.8491E-04 3.7541E-04 - 5.0119E+01 2.6594E-03 1.9799E-03 3.2185E-04 2.4961E-04 - 5.6234E+01 1.8826E-03 1.3881E-03 2.1120E-04 1.6680E-04 - 6.3096E+01 1.3297E-03 9.7289E-04 1.3985E-04 1.1257E-04 - 7.0795E+01 9.3706E-04 6.8304E-04 9.5092E-05 7.6647E-05 - 7.9433E+01 6.6335E-04 4.8132E-04 6.3753E-05 5.0075E-05 - 8.9125E+01 4.6733E-04 3.3889E-04 4.1693E-05 3.2590E-05 - 1.0000E+02 3.2960E-04 2.3582E-04 2.7916E-05 2.2498E-05 - 1.1220E+02 2.3175E-04 1.6462E-04 1.8568E-05 1.5040E-05 - 1.2589E+02 1.6298E-04 1.1579E-04 1.2457E-05 1.0036E-05 - 1.4125E+02 1.1479E-04 8.0943E-05 8.1726E-06 6.6465E-06 - 1.5849E+02 8.0583E-05 5.6238E-05 5.4837E-06 4.5363E-06 - 1.7783E+02 5.6350E-05 3.9058E-05 3.7448E-06 3.0681E-06 - 1.9953E+02 3.9359E-05 2.7315E-05 2.4867E-06 2.0490E-06 - 2.2387E+02 2.7547E-05 1.8967E-05 1.6961E-06 1.3851E-06 - 2.5119E+02 1.9360E-05 1.3160E-05 1.1590E-06 9.1197E-07 - 2.8184E+02 1.3610E-05 9.0878E-06 7.5944E-07 6.1321E-07 - 3.1623E+02 9.4345E-06 6.2886E-06 5.1673E-07 4.1516E-07 - 3.5481E+02 6.5720E-06 4.3499E-06 3.4352E-07 2.7623E-07 - 3.9811E+02 4.5724E-06 3.0207E-06 2.3013E-07 1.8629E-07 - 4.4668E+02 3.1715E-06 2.0950E-06 1.5457E-07 1.2371E-07 - 5.0119E+02 2.2113E-06 1.4377E-06 1.0313E-07 8.2996E-08 - 5.6234E+02 1.5447E-06 9.9363E-07 6.9093E-08 5.6947E-08 - 6.3096E+02 1.0680E-06 6.7835E-07 4.7046E-08 3.7741E-08 - 7.0795E+02 7.4060E-07 4.6734E-07 3.2275E-08 2.4655E-08 - 7.9433E+02 5.1293E-07 3.2307E-07 2.2129E-08 1.6448E-08 - 8.9125E+02 3.5570E-07 2.2261E-07 1.4890E-08 1.1547E-08 - 1.0000E+03 2.4544E-07 1.5350E-07 9.7437E-09 7.5027E-09 - 1.1220E+03 1.6750E-07 1.0408E-07 6.5470E-09 4.8986E-09 - 1.2589E+03 1.1520E-07 7.0714E-08 4.3815E-09 3.3409E-09 - 1.4125E+03 7.8947E-08 4.8270E-08 2.8709E-09 2.2405E-09 - 1.5849E+03 5.4481E-08 3.2895E-08 1.9423E-09 1.5062E-09 - 1.7783E+03 3.7474E-08 2.2194E-08 1.3353E-09 9.7453E-10 - 1.9953E+03 2.4957E-08 1.4957E-08 8.3953E-10 6.5499E-10 - 2.2387E+03 1.6951E-08 1.0029E-08 5.6094E-10 4.3144E-10 - 2.5119E+03 1.1544E-08 6.7522E-09 3.9528E-10 2.7013E-10 - 2.8184E+03 7.7691E-09 4.5318E-09 2.6439E-10 1.8635E-10 - 3.1623E+03 5.3635E-09 3.1225E-09 1.7632E-10 1.3053E-10 - 3.5481E+03 3.5282E-09 2.0318E-09 1.1480E-10 8.4855E-11 - 3.9811E+03 2.3536E-09 1.3577E-09 7.4259E-11 5.4513E-11 - 4.4668E+03 1.5598E-09 8.9756E-10 4.7995E-11 3.8101E-11 - 5.0119E+03 1.0473E-09 5.9117E-10 3.2013E-11 2.5957E-11 - 5.6234E+03 7.1150E-10 4.0272E-10 2.0513E-11 1.5993E-11 - 6.3096E+03 4.6862E-10 2.6540E-10 1.3745E-11 9.8682E-12 - 7.0795E+03 3.1053E-10 1.7365E-10 9.9387E-12 6.2282E-12 - 7.9433E+03 2.0535E-10 1.1422E-10 6.5136E-12 4.3308E-12 - 8.9125E+03 1.3787E-10 7.4888E-11 3.9511E-12 2.9474E-12 - 1.0000E+04 9.3162E-11 4.9206E-11 2.6831E-12 1.8972E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0688E+04 1.0730E+04 5.1010E+03 5.0654E+03 - 1.1220E-01 9.3655E+03 9.4222E+03 4.4837E+03 4.4135E+03 - 1.2589E-01 8.1573E+03 8.2020E+03 3.9258E+03 3.8318E+03 - 1.4125E-01 7.0914E+03 7.1039E+03 3.4457E+03 3.2997E+03 - 1.5849E-01 6.1257E+03 6.1039E+03 2.9676E+03 2.8319E+03 - 1.7783E-01 5.2033E+03 5.1931E+03 2.5277E+03 2.3944E+03 - 1.9953E-01 4.3835E+03 4.3638E+03 2.1526E+03 1.9984E+03 - 2.2387E-01 3.6599E+03 3.6227E+03 1.8054E+03 1.6744E+03 - 2.5119E-01 3.0334E+03 2.9953E+03 1.5187E+03 1.3842E+03 - 2.8184E-01 2.4891E+03 2.4533E+03 1.2639E+03 1.1369E+03 - 3.1623E-01 2.0128E+03 1.9800E+03 1.0320E+03 9.1760E+02 - 3.5481E-01 1.6292E+03 1.5906E+03 8.3920E+02 7.3603E+02 - 3.9811E-01 1.3014E+03 1.2749E+03 6.8091E+02 5.9013E+02 - 4.4668E-01 1.0298E+03 1.0097E+03 5.4413E+02 4.6284E+02 - 5.0119E-01 8.1392E+02 7.9526E+02 4.2978E+02 3.6353E+02 - 5.6234E-01 6.3291E+02 6.2291E+02 3.4118E+02 2.8441E+02 - 6.3096E-01 4.9253E+02 4.8248E+02 2.6696E+02 2.1885E+02 - 7.0795E-01 3.8326E+02 3.7166E+02 2.0550E+02 1.6702E+02 - 7.9433E-01 2.9237E+02 2.8378E+02 1.5717E+02 1.2671E+02 - 8.9125E-01 2.2199E+02 2.1486E+02 1.1883E+02 9.5954E+01 - 1.0000E+00 1.6690E+02 1.6220E+02 8.9993E+01 7.1731E+01 - 1.1220E+00 1.2548E+02 1.2160E+02 6.7556E+01 5.3378E+01 - 1.2589E+00 9.4471E+01 9.0581E+01 5.0165E+01 3.9512E+01 - 1.4125E+00 7.1294E+01 6.7006E+01 3.6987E+01 2.9102E+01 - 1.5849E+00 5.3129E+01 4.9450E+01 2.7101E+01 2.1445E+01 - 1.7783E+00 3.9339E+01 3.6464E+01 1.9604E+01 1.5461E+01 - 1.9953E+00 2.9339E+01 2.6910E+01 1.4332E+01 1.1129E+01 - 2.2387E+00 2.1397E+01 1.9489E+01 1.0425E+01 7.9701E+00 - 2.5119E+00 1.5575E+01 1.4005E+01 7.3990E+00 5.7234E+00 - 2.8184E+00 1.1398E+01 1.0177E+01 5.3231E+00 4.0564E+00 - 3.1623E+00 8.3010E+00 7.4520E+00 3.7648E+00 2.8587E+00 - 3.5481E+00 6.0173E+00 5.3411E+00 2.6454E+00 2.0118E+00 - 3.9811E+00 4.3161E+00 3.8203E+00 1.8437E+00 1.4005E+00 - 4.4668E+00 3.1166E+00 2.7501E+00 1.2844E+00 9.6642E-01 - 5.0119E+00 2.2588E+00 1.9607E+00 8.9704E-01 6.7189E-01 - 5.6234E+00 1.6326E+00 1.3923E+00 6.2507E-01 4.6117E-01 - 6.3096E+00 1.1759E+00 9.8576E-01 4.2740E-01 3.1693E-01 - 7.0795E+00 8.4546E-01 6.9937E-01 2.9145E-01 2.1800E-01 - 7.9433E+00 6.0402E-01 5.0109E-01 2.0116E-01 1.4452E-01 - 8.9125E+00 4.3210E-01 3.5753E-01 1.3669E-01 9.6520E-02 - 1.0000E+01 3.0967E-01 2.5477E-01 9.1909E-02 6.6995E-02 - 1.1220E+01 2.1909E-01 1.8144E-01 6.2380E-02 4.5956E-02 - 1.2589E+01 1.5584E-01 1.2840E-01 4.2216E-02 3.1433E-02 - 1.4125E+01 1.1250E-01 9.0373E-02 2.8029E-02 2.1118E-02 - 1.5849E+01 8.0555E-02 6.3915E-02 1.8933E-02 1.4214E-02 - 1.7783E+01 5.7159E-02 4.5480E-02 1.2653E-02 9.5849E-03 - 1.9953E+01 4.0587E-02 3.2521E-02 8.3270E-03 6.3361E-03 - 2.2387E+01 2.8683E-02 2.2963E-02 5.4732E-03 4.1731E-03 - 2.5119E+01 2.0602E-02 1.6246E-02 3.6798E-03 2.8621E-03 - 2.8184E+01 1.4964E-02 1.1695E-02 2.4833E-03 1.9778E-03 - 3.1623E+01 1.0369E-02 7.9612E-03 1.6518E-03 1.2716E-03 - 3.5481E+01 7.3728E-03 5.6087E-03 1.1020E-03 8.4582E-04 - 3.9811E+01 5.2472E-03 3.9645E-03 7.3378E-04 5.6104E-04 - 4.4668E+01 3.7284E-03 2.8064E-03 4.8627E-04 3.7819E-04 - 5.0119E+01 2.6440E-03 1.9820E-03 3.2599E-04 2.4993E-04 - 5.6234E+01 1.8739E-03 1.3910E-03 2.1642E-04 1.6641E-04 - 6.3096E+01 1.3261E-03 9.8031E-04 1.4297E-04 1.1238E-04 - 7.0795E+01 9.4065E-04 6.8952E-04 9.4102E-05 7.3541E-05 - 7.9433E+01 6.6829E-04 4.8179E-04 6.2304E-05 4.8664E-05 - 8.9125E+01 4.6686E-04 3.3720E-04 4.1815E-05 3.3768E-05 - 1.0000E+02 3.2918E-04 2.3672E-04 2.7543E-05 2.2309E-05 - 1.1220E+02 2.3196E-04 1.6579E-04 1.8637E-05 1.4992E-05 - 1.2589E+02 1.6319E-04 1.1625E-04 1.2367E-05 9.9541E-06 - 1.4125E+02 1.1464E-04 8.0775E-05 8.1579E-06 6.7400E-06 - 1.5849E+02 8.0640E-05 5.6328E-05 5.5395E-06 4.5554E-06 - 1.7783E+02 5.6703E-05 3.9169E-05 3.7551E-06 3.0563E-06 - 1.9953E+02 3.9616E-05 2.7259E-05 2.5034E-06 2.0231E-06 - 2.2387E+02 2.7706E-05 1.8904E-05 1.6691E-06 1.3747E-06 - 2.5119E+02 1.9402E-05 1.3145E-05 1.1201E-06 9.3619E-07 - 2.8184E+02 1.3521E-05 9.1304E-06 7.6961E-07 6.1536E-07 - 3.1623E+02 9.4313E-06 6.2757E-06 5.0825E-07 4.1460E-07 - 3.5481E+02 6.5781E-06 4.3374E-06 3.3785E-07 2.7641E-07 - 3.9811E+02 4.5885E-06 3.0186E-06 2.2773E-07 1.8216E-07 - 4.4668E+02 3.1840E-06 2.0846E-06 1.5292E-07 1.2248E-07 - 5.0119E+02 2.2132E-06 1.4364E-06 1.0449E-07 8.4576E-08 - 5.6234E+02 1.5461E-06 9.9708E-07 6.9563E-08 5.7105E-08 - 6.3096E+02 1.0739E-06 6.8282E-07 4.7237E-08 3.7400E-08 - 7.0795E+02 7.4558E-07 4.7047E-07 3.1859E-08 2.5263E-08 - 7.9433E+02 5.1527E-07 3.2189E-07 2.1084E-08 1.7319E-08 - 8.9125E+02 3.5619E-07 2.2056E-07 1.4678E-08 1.1630E-08 - 1.0000E+03 2.4579E-07 1.5164E-07 9.7442E-09 7.7005E-09 - 1.1220E+03 1.6862E-07 1.0351E-07 6.5111E-09 5.1311E-09 - 1.2589E+03 1.1569E-07 7.0750E-08 4.4531E-09 3.4422E-09 - 1.4125E+03 7.8476E-08 4.8581E-08 3.0880E-09 2.3058E-09 - 1.5849E+03 5.4031E-08 3.2996E-08 2.0359E-09 1.4917E-09 - 1.7783E+03 3.7222E-08 2.2371E-08 1.3122E-09 1.0001E-09 - 1.9953E+03 2.5059E-08 1.5107E-08 8.6916E-10 6.8514E-10 - 2.2387E+03 1.6946E-08 1.0159E-08 5.9352E-10 4.3715E-10 - 2.5119E+03 1.1480E-08 6.8333E-09 4.1645E-10 2.9311E-10 - 2.8184E+03 7.7541E-09 4.5825E-09 2.8259E-10 1.9068E-10 - 3.1623E+03 5.3962E-09 3.1377E-09 1.7283E-10 1.2533E-10 - 3.5481E+03 3.5383E-09 2.0361E-09 1.1296E-10 8.4240E-11 - 3.9811E+03 2.3816E-09 1.3730E-09 7.1852E-11 5.5617E-11 - 4.4668E+03 1.5939E-09 9.1000E-10 4.8238E-11 3.5452E-11 - 5.0119E+03 1.0549E-09 6.0938E-10 3.1951E-11 2.3123E-11 - 5.6234E+03 7.0133E-10 4.0421E-10 2.0534E-11 1.6368E-11 - 6.3096E+03 4.6761E-10 2.6484E-10 1.4063E-11 1.0640E-11 - 7.0795E+03 3.0939E-10 1.7480E-10 9.4954E-12 6.5082E-12 - 7.9433E+03 2.0576E-10 1.1615E-10 6.3185E-12 4.2120E-12 - 8.9125E+03 1.3609E-10 7.5782E-11 4.1573E-12 2.8741E-12 - 1.0000E+04 9.0677E-11 4.9799E-11 2.5345E-12 1.6879E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.5216E+03 7.6001E+03 3.5781E+03 3.6314E+03 - 1.1220E-01 6.6130E+03 6.6530E+03 3.1650E+03 3.1792E+03 - 1.2589E-01 5.7939E+03 5.8648E+03 2.7895E+03 2.7720E+03 - 1.4125E-01 5.0616E+03 5.1160E+03 2.4314E+03 2.4001E+03 - 1.5849E-01 4.3760E+03 4.3841E+03 2.0934E+03 2.0587E+03 - 1.7783E-01 3.7333E+03 3.7382E+03 1.8131E+03 1.7490E+03 - 1.9953E-01 3.1685E+03 3.1489E+03 1.5540E+03 1.4778E+03 - 2.2387E-01 2.6657E+03 2.6399E+03 1.3113E+03 1.2358E+03 - 2.5119E-01 2.2259E+03 2.2021E+03 1.1068E+03 1.0343E+03 - 2.8184E-01 1.8455E+03 1.8225E+03 9.2432E+02 8.5494E+02 - 3.1623E-01 1.5166E+03 1.5045E+03 7.6591E+02 6.9795E+02 - 3.5481E-01 1.2404E+03 1.2264E+03 6.3150E+02 5.7211E+02 - 3.9811E-01 1.0025E+03 9.9097E+02 5.1676E+02 4.6618E+02 - 4.4668E-01 8.0732E+02 7.9842E+02 4.1758E+02 3.7528E+02 - 5.0119E-01 6.5494E+02 6.4111E+02 3.3590E+02 2.9701E+02 - 5.6234E-01 5.2546E+02 5.0972E+02 2.6716E+02 2.3352E+02 - 6.3096E-01 4.1286E+02 4.0239E+02 2.1304E+02 1.8415E+02 - 7.0795E-01 3.2440E+02 3.1571E+02 1.6922E+02 1.4454E+02 - 7.9433E-01 2.5495E+02 2.4566E+02 1.3144E+02 1.1118E+02 - 8.9125E-01 1.9766E+02 1.8962E+02 1.0222E+02 8.4373E+01 - 1.0000E+00 1.5160E+02 1.4602E+02 7.8561E+01 6.4842E+01 - 1.1220E+00 1.1687E+02 1.1091E+02 5.9621E+01 4.9323E+01 - 1.2589E+00 8.9073E+01 8.4133E+01 4.5438E+01 3.7189E+01 - 1.4125E+00 6.7478E+01 6.3586E+01 3.4331E+01 2.7968E+01 - 1.5849E+00 5.1013E+01 4.7814E+01 2.5535E+01 2.0472E+01 - 1.7783E+00 3.8292E+01 3.5489E+01 1.8886E+01 1.4772E+01 - 1.9953E+00 2.8360E+01 2.6217E+01 1.3845E+01 1.0740E+01 - 2.2387E+00 2.0957E+01 1.9419E+01 1.0135E+01 7.8986E+00 - 2.5119E+00 1.5405E+01 1.4115E+01 7.4167E+00 5.7839E+00 - 2.8184E+00 1.1409E+01 1.0113E+01 5.2983E+00 4.0181E+00 - 3.1623E+00 8.1865E+00 7.4144E+00 3.7146E+00 2.8293E+00 - 3.5481E+00 5.9372E+00 5.3329E+00 2.6267E+00 1.9872E+00 - 3.9811E+00 4.3457E+00 3.8157E+00 1.8286E+00 1.3714E+00 - 4.4668E+00 3.1578E+00 2.7529E+00 1.2634E+00 9.6025E-01 - 5.0119E+00 2.2635E+00 1.9622E+00 8.9353E-01 6.6931E-01 - 5.6234E+00 1.6298E+00 1.3966E+00 6.2355E-01 4.6413E-01 - 6.3096E+00 1.1822E+00 9.9929E-01 4.2463E-01 3.2178E-01 - 7.0795E+00 8.5657E-01 7.0956E-01 2.9072E-01 2.1537E-01 - 7.9433E+00 6.0497E-01 5.0352E-01 1.9955E-01 1.4620E-01 - 8.9125E+00 4.2350E-01 3.5858E-01 1.3488E-01 9.9921E-02 - 1.0000E+01 3.0570E-01 2.5029E-01 9.0979E-02 6.8540E-02 - 1.1220E+01 2.1776E-01 1.7824E-01 6.1037E-02 4.6412E-02 - 1.2589E+01 1.5414E-01 1.2500E-01 4.1125E-02 3.1274E-02 - 1.4125E+01 1.0974E-01 8.7290E-02 2.7569E-02 2.0599E-02 - 1.5849E+01 7.8404E-02 6.2947E-02 1.8484E-02 1.3822E-02 - 1.7783E+01 5.5788E-02 4.4771E-02 1.2348E-02 9.2336E-03 - 1.9953E+01 3.9282E-02 3.1120E-02 8.1412E-03 6.1708E-03 - 2.2387E+01 2.7971E-02 2.2136E-02 5.4789E-03 4.2217E-03 - 2.5119E+01 2.0301E-02 1.5953E-02 3.7066E-03 2.8016E-03 - 2.8184E+01 1.4382E-02 1.1248E-02 2.5197E-03 1.8878E-03 - 3.1623E+01 1.0411E-02 8.0121E-03 1.6554E-03 1.2785E-03 - 3.5481E+01 7.3965E-03 5.6512E-03 1.0960E-03 8.4740E-04 - 3.9811E+01 5.2690E-03 3.9802E-03 7.2721E-04 5.6114E-04 - 4.4668E+01 3.7436E-03 2.8086E-03 4.8094E-04 3.7247E-04 - 5.0119E+01 2.6540E-03 1.9731E-03 3.1948E-04 2.5167E-04 - 5.6234E+01 1.8818E-03 1.3930E-03 2.1205E-04 1.6812E-04 - 6.3096E+01 1.3293E-03 9.8593E-04 1.4248E-04 1.1124E-04 - 7.0795E+01 9.3777E-04 6.9106E-04 9.4127E-05 7.4112E-05 - 7.9433E+01 6.6136E-04 4.8435E-04 6.1226E-05 4.9990E-05 - 8.9125E+01 4.6555E-04 3.3799E-04 4.0138E-05 3.3391E-05 - 1.0000E+02 3.2994E-04 2.3632E-04 2.7984E-05 2.2242E-05 - 1.1220E+02 2.3148E-04 1.6544E-04 1.8747E-05 1.4941E-05 - 1.2589E+02 1.6302E-04 1.1525E-04 1.2439E-05 1.0031E-05 - 1.4125E+02 1.1467E-04 8.0428E-05 8.2954E-06 6.7069E-06 - 1.5849E+02 8.0303E-05 5.6139E-05 5.5343E-06 4.5225E-06 - 1.7783E+02 5.6452E-05 3.9158E-05 3.7080E-06 3.0005E-06 - 1.9953E+02 3.9345E-05 2.7254E-05 2.4919E-06 2.0077E-06 - 2.2387E+02 2.7395E-05 1.9104E-05 1.6821E-06 1.3137E-06 - 2.5119E+02 1.9274E-05 1.3231E-05 1.1357E-06 9.0314E-07 - 2.8184E+02 1.3488E-05 9.0972E-06 7.6017E-07 6.1109E-07 - 3.1623E+02 9.4255E-06 6.2803E-06 4.9898E-07 4.0906E-07 - 3.5481E+02 6.5620E-06 4.3426E-06 3.3487E-07 2.7529E-07 - 3.9811E+02 4.5878E-06 3.0130E-06 2.3386E-07 1.8211E-07 - 4.4668E+02 3.1891E-06 2.0908E-06 1.5268E-07 1.2078E-07 - 5.0119E+02 2.2179E-06 1.4477E-06 1.0078E-07 8.3431E-08 - 5.6234E+02 1.5534E-06 9.9525E-07 7.0641E-08 5.6705E-08 - 6.3096E+02 1.0693E-06 6.8004E-07 4.7380E-08 3.7565E-08 - 7.0795E+02 7.3956E-07 4.6684E-07 3.2026E-08 2.5177E-08 - 7.9433E+02 5.1259E-07 3.2146E-07 2.1466E-08 1.7284E-08 - 8.9125E+02 3.5451E-07 2.2259E-07 1.3992E-08 1.1211E-08 - 1.0000E+03 2.4648E-07 1.5224E-07 9.6307E-09 7.6457E-09 - 1.1220E+03 1.6841E-07 1.0353E-07 6.5497E-09 5.2142E-09 - 1.2589E+03 1.1543E-07 7.0980E-08 4.4826E-09 3.4378E-09 - 1.4125E+03 7.8762E-08 4.8383E-08 3.0378E-09 2.1520E-09 - 1.5849E+03 5.3863E-08 3.2536E-08 1.9980E-09 1.3830E-09 - 1.7783E+03 3.6768E-08 2.2114E-08 1.3143E-09 9.5030E-10 - 1.9953E+03 2.5147E-08 1.4945E-08 9.1117E-10 6.4851E-10 - 2.2387E+03 1.7211E-08 1.0092E-08 6.0861E-10 4.1996E-10 - 2.5119E+03 1.1597E-08 6.8024E-09 3.9337E-10 2.7516E-10 - 2.8184E+03 7.7932E-09 4.5705E-09 2.7014E-10 1.8442E-10 - 3.1623E+03 5.3633E-09 3.1383E-09 1.7061E-10 1.2217E-10 - 3.5481E+03 3.5075E-09 2.0642E-09 1.0834E-10 8.1099E-11 - 3.9811E+03 2.3759E-09 1.3711E-09 7.3213E-11 5.3248E-11 - 4.4668E+03 1.5826E-09 9.0611E-10 4.7505E-11 3.4950E-11 - 5.0119E+03 1.0448E-09 6.0523E-10 3.0855E-11 2.4803E-11 - 5.6234E+03 6.9977E-10 3.9949E-10 2.1181E-11 1.5888E-11 - 6.3096E+03 4.6780E-10 2.6198E-10 1.4216E-11 9.7894E-12 - 7.0795E+03 3.0801E-10 1.7303E-10 9.2383E-12 6.5831E-12 - 7.9433E+03 2.0303E-10 1.1338E-10 5.7855E-12 4.0376E-12 - 8.9125E+03 1.3609E-10 7.4770E-11 3.4968E-12 2.4806E-12 - 1.0000E+04 8.9442E-11 4.9256E-11 2.2586E-12 1.7619E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.0636E+03 6.1721E+03 2.9237E+03 2.9304E+03 - 1.1220E-01 5.3657E+03 5.4868E+03 2.6144E+03 2.5922E+03 - 1.2589E-01 4.7287E+03 4.8442E+03 2.3274E+03 2.2606E+03 - 1.4125E-01 4.1663E+03 4.2564E+03 2.0414E+03 1.9684E+03 - 1.5849E-01 3.6543E+03 3.7223E+03 1.7753E+03 1.7016E+03 - 1.7783E-01 3.1422E+03 3.2030E+03 1.5509E+03 1.4585E+03 - 1.9953E-01 2.7033E+03 2.7433E+03 1.3445E+03 1.2478E+03 - 2.2387E-01 2.3057E+03 2.3205E+03 1.1481E+03 1.0611E+03 - 2.5119E-01 1.9333E+03 1.9452E+03 9.6508E+02 8.9574E+02 - 2.8184E-01 1.6144E+03 1.6200E+03 8.1552E+02 7.4344E+02 - 3.1623E-01 1.3347E+03 1.3393E+03 6.8942E+02 6.1441E+02 - 3.5481E-01 1.0923E+03 1.1048E+03 5.6722E+02 5.0449E+02 - 3.9811E-01 8.9862E+02 9.0068E+02 4.6599E+02 4.0920E+02 - 4.4668E-01 7.3660E+02 7.2930E+02 3.8439E+02 3.3186E+02 - 5.0119E-01 5.9478E+02 5.9083E+02 3.1238E+02 2.6590E+02 - 5.6234E-01 4.7657E+02 4.7168E+02 2.4919E+02 2.1247E+02 - 6.3096E-01 3.8035E+02 3.7249E+02 1.9778E+02 1.6763E+02 - 7.0795E-01 3.0230E+02 2.9412E+02 1.5729E+02 1.3223E+02 - 7.9433E-01 2.3909E+02 2.3215E+02 1.2372E+02 1.0510E+02 - 8.9125E-01 1.8642E+02 1.8128E+02 9.7797E+01 8.0877E+01 - 1.0000E+00 1.4469E+02 1.3970E+02 7.4954E+01 6.1835E+01 - 1.1220E+00 1.1209E+02 1.0745E+02 5.7305E+01 4.7292E+01 - 1.2589E+00 8.6048E+01 8.2222E+01 4.3570E+01 3.5601E+01 - 1.4125E+00 6.5260E+01 6.2290E+01 3.2872E+01 2.6777E+01 - 1.5849E+00 4.9642E+01 4.6821E+01 2.4765E+01 1.9546E+01 - 1.7783E+00 3.7307E+01 3.4851E+01 1.8422E+01 1.4319E+01 - 1.9953E+00 2.7720E+01 2.5704E+01 1.3490E+01 1.0832E+01 - 2.2387E+00 2.0375E+01 1.8870E+01 9.9073E+00 7.8503E+00 - 2.5119E+00 1.5041E+01 1.3900E+01 7.3154E+00 5.6217E+00 - 2.8184E+00 1.1223E+01 1.0291E+01 5.2171E+00 4.0177E+00 - 3.1623E+00 8.2031E+00 7.3640E+00 3.6881E+00 2.8410E+00 - 3.5481E+00 5.9831E+00 5.3108E+00 2.5885E+00 1.9870E+00 - 3.9811E+00 4.3350E+00 3.8165E+00 1.8046E+00 1.3838E+00 - 4.4668E+00 3.1477E+00 2.7316E+00 1.2639E+00 9.6599E-01 - 5.0119E+00 2.2650E+00 1.9565E+00 8.8954E-01 6.6938E-01 - 5.6234E+00 1.6130E+00 1.4106E+00 6.1543E-01 4.6085E-01 - 6.3096E+00 1.1651E+00 9.9742E-01 4.2498E-01 3.1504E-01 - 7.0795E+00 8.4014E-01 7.0464E-01 2.9666E-01 2.1497E-01 - 7.9433E+00 6.0415E-01 5.0820E-01 1.9977E-01 1.4688E-01 - 8.9125E+00 4.3194E-01 3.6115E-01 1.3146E-01 9.9742E-02 - 1.0000E+01 3.1030E-01 2.5560E-01 9.1572E-02 6.8826E-02 - 1.1220E+01 2.2166E-01 1.8107E-01 6.1066E-02 4.6494E-02 - 1.2589E+01 1.5762E-01 1.2816E-01 4.1803E-02 3.0792E-02 - 1.4125E+01 1.1191E-01 9.0978E-02 2.8204E-02 2.0811E-02 - 1.5849E+01 7.9185E-02 6.3930E-02 1.8762E-02 1.4172E-02 - 1.7783E+01 5.6268E-02 4.5034E-02 1.2642E-02 9.4701E-03 - 1.9953E+01 4.0081E-02 3.2087E-02 8.2780E-03 6.4222E-03 - 2.2387E+01 2.8905E-02 2.2721E-02 5.4989E-03 4.3139E-03 - 2.5119E+01 2.0915E-02 1.5813E-02 3.7700E-03 2.8480E-03 - 2.8184E+01 1.4752E-02 1.1082E-02 2.4257E-03 1.8865E-03 - 3.1623E+01 1.0393E-02 7.9811E-03 1.6524E-03 1.2748E-03 - 3.5481E+01 7.3861E-03 5.6258E-03 1.1010E-03 8.4543E-04 - 3.9811E+01 5.2439E-03 3.9742E-03 7.3589E-04 5.6703E-04 - 4.4668E+01 3.7179E-03 2.8050E-03 4.8512E-04 3.8137E-04 - 5.0119E+01 2.6373E-03 1.9734E-03 3.2210E-04 2.5584E-04 - 5.6234E+01 1.8691E-03 1.3858E-03 2.1536E-04 1.7039E-04 - 6.3096E+01 1.3228E-03 9.8265E-04 1.4294E-04 1.1259E-04 - 7.0795E+01 9.3404E-04 6.9071E-04 9.4146E-05 7.4517E-05 - 7.9433E+01 6.5656E-04 4.8082E-04 6.2078E-05 4.8749E-05 - 8.9125E+01 4.6146E-04 3.3657E-04 4.2411E-05 3.2426E-05 - 1.0000E+02 3.2839E-04 2.3586E-04 2.7839E-05 2.2284E-05 - 1.1220E+02 2.3082E-04 1.6476E-04 1.8392E-05 1.4699E-05 - 1.2589E+02 1.6238E-04 1.1512E-04 1.2281E-05 9.9617E-06 - 1.4125E+02 1.1402E-04 8.0158E-05 8.1336E-06 6.7383E-06 - 1.5849E+02 7.9902E-05 5.6081E-05 5.4846E-06 4.4911E-06 - 1.7783E+02 5.6046E-05 3.8966E-05 3.6911E-06 2.9495E-06 - 1.9953E+02 3.9274E-05 2.7063E-05 2.4591E-06 1.9593E-06 - 2.2387E+02 2.7533E-05 1.8819E-05 1.6559E-06 1.3195E-06 - 2.5119E+02 1.9422E-05 1.3069E-05 1.1212E-06 8.7074E-07 - 2.8184E+02 1.3542E-05 8.9900E-06 7.9410E-07 5.7170E-07 - 3.1623E+02 9.4095E-06 6.2853E-06 5.0423E-07 4.0609E-07 - 3.5481E+02 6.5653E-06 4.3525E-06 3.3983E-07 2.7583E-07 - 3.9811E+02 4.5907E-06 3.0090E-06 2.3182E-07 1.8926E-07 - 4.4668E+02 3.2064E-06 2.0755E-06 1.5898E-07 1.2659E-07 - 5.0119E+02 2.2308E-06 1.4414E-06 1.0898E-07 8.6516E-08 - 5.6234E+02 1.5488E-06 1.0002E-06 7.2566E-08 5.6484E-08 - 6.3096E+02 1.0701E-06 6.8406E-07 4.7874E-08 3.6313E-08 - 7.0795E+02 7.4501E-07 4.7240E-07 3.2617E-08 2.4551E-08 - 7.9433E+02 5.1769E-07 3.2567E-07 2.2319E-08 1.6590E-08 - 8.9125E+02 3.5669E-07 2.2484E-07 1.4590E-08 1.1135E-08 - 1.0000E+03 2.4637E-07 1.5268E-07 9.6546E-09 7.4015E-09 - 1.1220E+03 1.6857E-07 1.0329E-07 6.5583E-09 4.9896E-09 - 1.2589E+03 1.1524E-07 7.0693E-08 4.5346E-09 3.2909E-09 - 1.4125E+03 7.8954E-08 4.7219E-08 2.9694E-09 2.2163E-09 - 1.5849E+03 5.4127E-08 3.1925E-08 1.9951E-09 1.5592E-09 - 1.7783E+03 3.7001E-08 2.1995E-08 1.4094E-09 1.0716E-09 - 1.9953E+03 2.5317E-08 1.5013E-08 8.9433E-10 6.4608E-10 - 2.2387E+03 1.7062E-08 1.0067E-08 6.0122E-10 4.4000E-10 - 2.5119E+03 1.1483E-08 6.7687E-09 3.9075E-10 2.9656E-10 - 2.8184E+03 7.7333E-09 4.6047E-09 2.4612E-10 1.9076E-10 - 3.1623E+03 5.3692E-09 3.1058E-09 1.6974E-10 1.1865E-10 - 3.5481E+03 3.5499E-09 2.0268E-09 1.1016E-10 7.7175E-11 - 3.9811E+03 2.3664E-09 1.3561E-09 7.2792E-11 5.4089E-11 - 4.4668E+03 1.5782E-09 9.0456E-10 4.9838E-11 3.5700E-11 - 5.0119E+03 1.0482E-09 6.0199E-10 3.4243E-11 2.1663E-11 - 5.6234E+03 7.0661E-10 3.9325E-10 2.2293E-11 1.4807E-11 - 6.3096E+03 4.7205E-10 2.6144E-10 1.4524E-11 1.0251E-11 - 7.0795E+03 3.1390E-10 1.7517E-10 9.8720E-12 7.0657E-12 - 7.9433E+03 2.0748E-10 1.1487E-10 6.3491E-12 4.6323E-12 - 8.9125E+03 1.3627E-10 7.4713E-11 4.0327E-12 2.6650E-12 - 1.0000E+04 8.8231E-11 4.8488E-11 2.7232E-12 1.7193E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.2331E+03 6.5072E+03 3.1217E+03 3.0051E+03 - 1.1220E-01 5.6132E+03 5.8241E+03 2.8086E+03 2.6881E+03 - 1.2589E-01 4.9925E+03 5.1586E+03 2.4952E+03 2.3792E+03 - 1.4125E-01 4.4199E+03 4.5484E+03 2.2129E+03 2.0765E+03 - 1.5849E-01 3.8903E+03 4.0012E+03 1.9433E+03 1.8013E+03 - 1.7783E-01 3.3769E+03 3.4796E+03 1.6970E+03 1.5601E+03 - 1.9953E-01 2.9191E+03 2.9838E+03 1.4799E+03 1.3340E+03 - 2.2387E-01 2.4796E+03 2.5317E+03 1.2640E+03 1.1436E+03 - 2.5119E-01 2.0927E+03 2.1266E+03 1.0745E+03 9.6160E+02 - 2.8184E-01 1.7530E+03 1.7655E+03 9.0634E+02 7.9807E+02 - 3.1623E-01 1.4598E+03 1.4734E+03 7.5422E+02 6.6290E+02 - 3.5481E-01 1.2075E+03 1.2211E+03 6.2898E+02 5.4606E+02 - 3.9811E-01 9.8135E+02 9.9712E+02 5.1849E+02 4.4545E+02 - 4.4668E-01 7.9774E+02 8.1077E+02 4.2106E+02 3.6169E+02 - 5.0119E-01 6.4977E+02 6.4823E+02 3.4106E+02 2.8861E+02 - 5.6234E-01 5.2036E+02 5.1708E+02 2.7370E+02 2.2712E+02 - 6.3096E-01 4.1083E+02 4.1019E+02 2.1794E+02 1.8122E+02 - 7.0795E-01 3.2435E+02 3.1897E+02 1.7252E+02 1.4262E+02 - 7.9433E-01 2.5318E+02 2.4932E+02 1.3392E+02 1.1283E+02 - 8.9125E-01 1.9640E+02 1.9313E+02 1.0427E+02 8.7377E+01 - 1.0000E+00 1.5211E+02 1.4828E+02 8.0538E+01 6.5025E+01 - 1.1220E+00 1.1737E+02 1.1283E+02 6.1700E+01 4.9174E+01 - 1.2589E+00 8.9345E+01 8.5191E+01 4.6759E+01 3.7264E+01 - 1.4125E+00 6.7470E+01 6.4244E+01 3.4909E+01 2.7810E+01 - 1.5849E+00 5.0707E+01 4.8145E+01 2.5984E+01 2.0452E+01 - 1.7783E+00 3.8176E+01 3.5828E+01 1.9176E+01 1.5002E+01 - 1.9953E+00 2.8527E+01 2.6453E+01 1.4266E+01 1.0941E+01 - 2.2387E+00 2.1115E+01 1.9158E+01 1.0292E+01 7.8898E+00 - 2.5119E+00 1.5495E+01 1.4065E+01 7.3026E+00 5.5844E+00 - 2.8184E+00 1.1231E+01 1.0322E+01 5.2003E+00 4.0076E+00 - 3.1623E+00 8.3173E+00 7.4643E+00 3.7667E+00 2.8747E+00 - 3.5481E+00 6.0657E+00 5.3916E+00 2.6600E+00 2.0088E+00 - 3.9811E+00 4.3661E+00 3.8660E+00 1.8531E+00 1.4005E+00 - 4.4668E+00 3.1658E+00 2.7855E+00 1.2955E+00 9.8264E-01 - 5.0119E+00 2.2897E+00 1.9867E+00 8.9941E-01 6.7251E-01 - 5.6234E+00 1.6478E+00 1.4120E+00 6.2350E-01 4.6934E-01 - 6.3096E+00 1.1857E+00 1.0065E+00 4.2666E-01 3.2670E-01 - 7.0795E+00 8.5008E-01 7.1510E-01 2.9262E-01 2.2132E-01 - 7.9433E+00 6.0931E-01 5.0723E-01 1.9852E-01 1.5110E-01 - 8.9125E+00 4.3289E-01 3.5997E-01 1.3193E-01 1.0257E-01 - 1.0000E+01 3.0999E-01 2.5517E-01 9.1008E-02 6.8685E-02 - 1.1220E+01 2.2061E-01 1.8062E-01 6.1547E-02 4.6125E-02 - 1.2589E+01 1.5651E-01 1.2729E-01 4.1812E-02 3.1479E-02 - 1.4125E+01 1.1132E-01 9.0030E-02 2.8241E-02 2.0919E-02 - 1.5849E+01 7.9526E-02 6.3822E-02 1.8835E-02 1.3947E-02 - 1.7783E+01 5.7039E-02 4.5110E-02 1.2531E-02 9.6624E-03 - 1.9953E+01 4.0352E-02 3.2372E-02 8.4050E-03 6.3571E-03 - 2.2387E+01 2.8853E-02 2.2903E-02 5.6588E-03 4.0889E-03 - 2.5119E+01 2.0875E-02 1.6165E-02 3.8495E-03 2.7890E-03 - 2.8184E+01 1.4776E-02 1.1480E-02 2.5618E-03 1.8522E-03 - 3.1623E+01 1.0429E-02 7.9668E-03 1.6493E-03 1.2887E-03 - 3.5481E+01 7.3809E-03 5.6463E-03 1.0969E-03 8.5795E-04 - 3.9811E+01 5.2504E-03 3.9925E-03 7.3196E-04 5.7127E-04 - 4.4668E+01 3.7335E-03 2.8093E-03 4.8928E-04 3.7897E-04 - 5.0119E+01 2.6523E-03 1.9838E-03 3.2383E-04 2.5231E-04 - 5.6234E+01 1.8812E-03 1.3934E-03 2.1217E-04 1.6984E-04 - 6.3096E+01 1.3254E-03 9.7810E-04 1.4106E-04 1.1543E-04 - 7.0795E+01 9.3383E-04 6.8514E-04 9.4274E-05 7.5773E-05 - 7.9433E+01 6.6161E-04 4.7965E-04 6.2432E-05 4.9770E-05 - 8.9125E+01 4.7170E-04 3.3767E-04 4.1698E-05 3.2934E-05 - 1.0000E+02 3.2869E-04 2.3689E-04 2.7823E-05 2.2112E-05 - 1.1220E+02 2.3159E-04 1.6606E-04 1.8382E-05 1.4966E-05 - 1.2589E+02 1.6349E-04 1.1583E-04 1.2451E-05 1.0076E-05 - 1.4125E+02 1.1477E-04 8.0968E-05 8.3384E-06 6.6607E-06 - 1.5849E+02 8.0399E-05 5.6177E-05 5.5518E-06 4.4615E-06 - 1.7783E+02 5.6256E-05 3.9070E-05 3.7130E-06 3.0582E-06 - 1.9953E+02 3.9373E-05 2.7318E-05 2.5160E-06 2.0593E-06 - 2.2387E+02 2.7538E-05 1.8893E-05 1.6794E-06 1.3777E-06 - 2.5119E+02 1.9280E-05 1.3107E-05 1.1208E-06 9.1620E-07 - 2.8184E+02 1.3490E-05 9.1209E-06 7.5648E-07 6.1922E-07 - 3.1623E+02 9.4561E-06 6.3351E-06 5.1081E-07 4.1499E-07 - 3.5481E+02 6.5984E-06 4.3583E-06 3.4286E-07 2.7811E-07 - 3.9811E+02 4.5880E-06 3.0037E-06 2.3006E-07 1.8337E-07 - 4.4668E+02 3.1785E-06 2.0731E-06 1.5543E-07 1.2313E-07 - 5.0119E+02 2.2191E-06 1.4268E-06 1.0665E-07 8.5070E-08 - 5.6234E+02 1.5430E-06 9.9644E-07 7.0711E-08 5.6558E-08 - 6.3096E+02 1.0720E-06 6.8545E-07 4.7419E-08 3.8190E-08 - 7.0795E+02 7.4359E-07 4.7082E-07 3.2370E-08 2.5018E-08 - 7.9433E+02 5.1356E-07 3.2353E-07 2.2118E-08 1.6368E-08 - 8.9125E+02 3.5456E-07 2.2092E-07 1.4743E-08 1.1211E-08 - 1.0000E+03 2.4487E-07 1.5212E-07 9.9846E-09 7.6836E-09 - 1.1220E+03 1.6798E-07 1.0416E-07 6.5812E-09 5.2431E-09 - 1.2589E+03 1.1579E-07 7.1345E-08 4.3191E-09 3.5566E-09 - 1.4125E+03 7.9056E-08 4.8060E-08 2.8141E-09 2.3011E-09 - 1.5849E+03 5.4188E-08 3.2396E-08 1.9036E-09 1.5012E-09 - 1.7783E+03 3.7015E-08 2.2088E-08 1.3149E-09 9.6047E-10 - 1.9953E+03 2.5224E-08 1.5055E-08 9.1540E-10 6.5182E-10 - 2.2387E+03 1.7097E-08 1.0077E-08 6.0676E-10 4.4742E-10 - 2.5119E+03 1.1507E-08 6.8069E-09 4.0040E-10 3.0356E-10 - 2.8184E+03 7.8967E-09 4.5528E-09 2.5895E-10 1.9812E-10 - 3.1623E+03 5.4076E-09 3.1193E-09 1.6452E-10 1.2905E-10 - 3.5481E+03 3.5530E-09 2.0448E-09 1.1016E-10 8.6717E-11 - 3.9811E+03 2.3802E-09 1.3716E-09 7.6025E-11 5.8179E-11 - 4.4668E+03 1.5917E-09 9.1285E-10 5.0802E-11 3.7748E-11 - 5.0119E+03 1.0615E-09 6.1598E-10 3.2046E-11 2.3652E-11 - 5.6234E+03 7.0534E-10 4.0517E-10 2.0218E-11 1.5628E-11 - 6.3096E+03 4.6853E-10 2.6508E-10 1.3892E-11 9.9016E-12 - 7.0795E+03 3.1149E-10 1.7435E-10 9.8464E-12 6.5094E-12 - 7.9433E+03 2.0748E-10 1.1495E-10 6.3976E-12 4.2194E-12 - 8.9125E+03 1.3687E-10 7.5999E-11 4.0575E-12 2.6427E-12 - 1.0000E+04 9.0344E-11 4.9070E-11 2.6054E-12 1.7578E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.7973E+03 8.0718E+03 3.9038E+03 3.7037E+03 - 1.1220E-01 6.9416E+03 7.1985E+03 3.4967E+03 3.2730E+03 - 1.2589E-01 6.1261E+03 6.3677E+03 3.1134E+03 2.8835E+03 - 1.4125E-01 5.3851E+03 5.5731E+03 2.7094E+03 2.5143E+03 - 1.5849E-01 4.6936E+03 4.8439E+03 2.3503E+03 2.1680E+03 - 1.7783E-01 4.0614E+03 4.1841E+03 2.0521E+03 1.8539E+03 - 1.9953E-01 3.4720E+03 3.5702E+03 1.7751E+03 1.5823E+03 - 2.2387E-01 2.9363E+03 3.0013E+03 1.5163E+03 1.3470E+03 - 2.5119E-01 2.4703E+03 2.5083E+03 1.2753E+03 1.1277E+03 - 2.8184E-01 2.0546E+03 2.0822E+03 1.0716E+03 9.2711E+02 - 3.1623E-01 1.6862E+03 1.7155E+03 8.9138E+02 7.6185E+02 - 3.5481E-01 1.3785E+03 1.4022E+03 7.2895E+02 6.2242E+02 - 3.9811E-01 1.1162E+03 1.1304E+03 5.9694E+02 5.0385E+02 - 4.4668E-01 8.9912E+02 9.0393E+02 4.8314E+02 4.0240E+02 - 5.0119E-01 7.2151E+02 7.1952E+02 3.8438E+02 3.2038E+02 - 5.6234E-01 5.7327E+02 5.6861E+02 3.0529E+02 2.5454E+02 - 6.3096E-01 4.5081E+02 4.4633E+02 2.4161E+02 1.9784E+02 - 7.0795E-01 3.5061E+02 3.4400E+02 1.9196E+02 1.5367E+02 - 7.9433E-01 2.7155E+02 2.6566E+02 1.4803E+02 1.1831E+02 - 8.9125E-01 2.0873E+02 2.0426E+02 1.1293E+02 9.0740E+01 - 1.0000E+00 1.6045E+02 1.5633E+02 8.6641E+01 6.8674E+01 - 1.1220E+00 1.2211E+02 1.1867E+02 6.5522E+01 5.1353E+01 - 1.2589E+00 9.1917E+01 8.9787E+01 4.8840E+01 3.8477E+01 - 1.4125E+00 6.9405E+01 6.6986E+01 3.6461E+01 2.8517E+01 - 1.5849E+00 5.2150E+01 4.9626E+01 2.6970E+01 2.0839E+01 - 1.7783E+00 3.9063E+01 3.6646E+01 1.9618E+01 1.5164E+01 - 1.9953E+00 2.8852E+01 2.6790E+01 1.4299E+01 1.0997E+01 - 2.2387E+00 2.1340E+01 1.9596E+01 1.0407E+01 7.9462E+00 - 2.5119E+00 1.5724E+01 1.4377E+01 7.4763E+00 5.6558E+00 - 2.8184E+00 1.1437E+01 1.0421E+01 5.3163E+00 4.0414E+00 - 3.1623E+00 8.3363E+00 7.4531E+00 3.7340E+00 2.8797E+00 - 3.5481E+00 6.0180E+00 5.3579E+00 2.6242E+00 2.0311E+00 - 3.9811E+00 4.3470E+00 3.8448E+00 1.8514E+00 1.4171E+00 - 4.4668E+00 3.1467E+00 2.7592E+00 1.2751E+00 9.7475E-01 - 5.0119E+00 2.2647E+00 1.9740E+00 8.9038E-01 6.7738E-01 - 5.6234E+00 1.6212E+00 1.4000E+00 6.2547E-01 4.7151E-01 - 6.3096E+00 1.1629E+00 1.0055E+00 4.2316E-01 3.2191E-01 - 7.0795E+00 8.2782E-01 7.1193E-01 2.8644E-01 2.1641E-01 - 7.9433E+00 5.8863E-01 4.9669E-01 1.9468E-01 1.4800E-01 - 8.9125E+00 4.2547E-01 3.5267E-01 1.3682E-01 1.0326E-01 - 1.0000E+01 3.0562E-01 2.5296E-01 9.0656E-02 6.9427E-02 - 1.1220E+01 2.1722E-01 1.7865E-01 6.1307E-02 4.6056E-02 - 1.2589E+01 1.5574E-01 1.2632E-01 4.1657E-02 3.1439E-02 - 1.4125E+01 1.1110E-01 9.0163E-02 2.8088E-02 2.1092E-02 - 1.5849E+01 7.8842E-02 6.3156E-02 1.8674E-02 1.3868E-02 - 1.7783E+01 5.6099E-02 4.4613E-02 1.2658E-02 9.2780E-03 - 1.9953E+01 3.9363E-02 3.1648E-02 8.4908E-03 6.3500E-03 - 2.2387E+01 2.8296E-02 2.2394E-02 5.6576E-03 4.2426E-03 - 2.5119E+01 2.0093E-02 1.5696E-02 3.6777E-03 2.9231E-03 - 2.8184E+01 1.4418E-02 1.1264E-02 2.3228E-03 1.9065E-03 - 3.1623E+01 1.0417E-02 7.9938E-03 1.6505E-03 1.2793E-03 - 3.5481E+01 7.4237E-03 5.6444E-03 1.0966E-03 8.5391E-04 - 3.9811E+01 5.2741E-03 3.9879E-03 7.3153E-04 5.6556E-04 - 4.4668E+01 3.7406E-03 2.8176E-03 4.8627E-04 3.7791E-04 - 5.0119E+01 2.6637E-03 1.9888E-03 3.2311E-04 2.5207E-04 - 5.6234E+01 1.8831E-03 1.3993E-03 2.1380E-04 1.6851E-04 - 6.3096E+01 1.3307E-03 9.8246E-04 1.4079E-04 1.1458E-04 - 7.0795E+01 9.4122E-04 6.9157E-04 9.4240E-05 7.6813E-05 - 7.9433E+01 6.6490E-04 4.8496E-04 6.3276E-05 4.9453E-05 - 8.9125E+01 4.6609E-04 3.3917E-04 4.1815E-05 3.2464E-05 - 1.0000E+02 3.2873E-04 2.3652E-04 2.7495E-05 2.2303E-05 - 1.1220E+02 2.3100E-04 1.6552E-04 1.8445E-05 1.4932E-05 - 1.2589E+02 1.6259E-04 1.1622E-04 1.2306E-05 1.0004E-05 - 1.4125E+02 1.1458E-04 8.0628E-05 8.1272E-06 6.6912E-06 - 1.5849E+02 8.0440E-05 5.5883E-05 5.4316E-06 4.4282E-06 - 1.7783E+02 5.6703E-05 3.8982E-05 3.6986E-06 2.9992E-06 - 1.9953E+02 3.9622E-05 2.7170E-05 2.4846E-06 2.0611E-06 - 2.2387E+02 2.7614E-05 1.8866E-05 1.6835E-06 1.4008E-06 - 2.5119E+02 1.9446E-05 1.3095E-05 1.1430E-06 9.1568E-07 - 2.8184E+02 1.3503E-05 9.0651E-06 7.4197E-07 6.1558E-07 - 3.1623E+02 9.4450E-06 6.3138E-06 5.1094E-07 4.1026E-07 - 3.5481E+02 6.5923E-06 4.3770E-06 3.4713E-07 2.7766E-07 - 3.9811E+02 4.6006E-06 3.0326E-06 2.3451E-07 1.8489E-07 - 4.4668E+02 3.2009E-06 2.0854E-06 1.5667E-07 1.2455E-07 - 5.0119E+02 2.2352E-06 1.4446E-06 1.0524E-07 8.3838E-08 - 5.6234E+02 1.5529E-06 1.0026E-06 7.0938E-08 5.5163E-08 - 6.3096E+02 1.0762E-06 6.8397E-07 4.8282E-08 3.7278E-08 - 7.0795E+02 7.4502E-07 4.6916E-07 3.2950E-08 2.4782E-08 - 7.9433E+02 5.1109E-07 3.2233E-07 2.1489E-08 1.6637E-08 - 8.9125E+02 3.5121E-07 2.2105E-07 1.4250E-08 1.1401E-08 - 1.0000E+03 2.4518E-07 1.5283E-07 9.8005E-09 7.6844E-09 - 1.1220E+03 1.6804E-07 1.0396E-07 6.6123E-09 5.0524E-09 - 1.2589E+03 1.1521E-07 7.1170E-08 4.5309E-09 3.4533E-09 - 1.4125E+03 7.8960E-08 4.8634E-08 2.9429E-09 2.3949E-09 - 1.5849E+03 5.4074E-08 3.2891E-08 1.9092E-09 1.5807E-09 - 1.7783E+03 3.6902E-08 2.2138E-08 1.3638E-09 9.6941E-10 - 1.9953E+03 2.5093E-08 1.5096E-08 8.7863E-10 6.2489E-10 - 2.2387E+03 1.7034E-08 1.0126E-08 5.8690E-10 4.3485E-10 - 2.5119E+03 1.1476E-08 6.8595E-09 4.0197E-10 2.8123E-10 - 2.8184E+03 7.7577E-09 4.6380E-09 2.5914E-10 1.9062E-10 - 3.1623E+03 5.3949E-09 3.1552E-09 1.7813E-10 1.3297E-10 - 3.5481E+03 3.5368E-09 2.0559E-09 1.1457E-10 8.5958E-11 - 3.9811E+03 2.3563E-09 1.3714E-09 7.4385E-11 5.3718E-11 - 4.4668E+03 1.5816E-09 9.1449E-10 4.8876E-11 3.7681E-11 - 5.0119E+03 1.0578E-09 6.0456E-10 3.2016E-11 2.5875E-11 - 5.6234E+03 7.0129E-10 4.0396E-10 2.1515E-11 1.5481E-11 - 6.3096E+03 4.7030E-10 2.6657E-10 1.4179E-11 1.0642E-11 - 7.0795E+03 3.1314E-10 1.7746E-10 9.0356E-12 6.2360E-12 - 7.9433E+03 2.0789E-10 1.1661E-10 5.9968E-12 3.9609E-12 - 8.9125E+03 1.3788E-10 7.5424E-11 3.8084E-12 2.9007E-12 - 1.0000E+04 9.1513E-11 4.9365E-11 2.4207E-12 1.8053E-12 -average flux in [cosZ =-0.50 -- -0.40, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.5964E+03 9.9808E+03 4.7818E+03 4.5129E+03 - 1.1220E-01 8.4708E+03 8.8048E+03 4.2779E+03 3.9598E+03 - 1.2589E-01 7.4764E+03 7.7181E+03 3.7875E+03 3.4791E+03 - 1.4125E-01 6.5191E+03 6.7182E+03 3.2897E+03 3.0206E+03 - 1.5849E-01 5.6439E+03 5.7836E+03 2.8297E+03 2.5744E+03 - 1.7783E-01 4.8319E+03 4.9400E+03 2.4505E+03 2.2017E+03 - 1.9953E-01 4.0845E+03 4.1946E+03 2.1056E+03 1.8606E+03 - 2.2387E-01 3.4368E+03 3.5140E+03 1.7785E+03 1.5487E+03 - 2.5119E-01 2.8528E+03 2.9130E+03 1.4945E+03 1.2866E+03 - 2.8184E-01 2.3503E+03 2.3837E+03 1.2417E+03 1.0670E+03 - 3.1623E-01 1.9264E+03 1.9330E+03 1.0245E+03 8.7242E+02 - 3.5481E-01 1.5553E+03 1.5745E+03 8.3517E+02 7.0209E+02 - 3.9811E-01 1.2483E+03 1.2681E+03 6.6744E+02 5.5941E+02 - 4.4668E-01 9.9834E+02 1.0024E+03 5.3440E+02 4.4041E+02 - 5.0119E-01 7.9421E+02 7.8853E+02 4.3208E+02 3.4835E+02 - 5.6234E-01 6.2337E+02 6.1441E+02 3.4049E+02 2.7549E+02 - 6.3096E-01 4.8308E+02 4.7303E+02 2.6126E+02 2.1340E+02 - 7.0795E-01 3.7253E+02 3.6788E+02 2.0384E+02 1.6161E+02 - 7.9433E-01 2.8303E+02 2.8147E+02 1.5867E+02 1.2412E+02 - 8.9125E-01 2.1563E+02 2.1313E+02 1.2067E+02 9.5202E+01 - 1.0000E+00 1.6605E+02 1.6212E+02 8.9779E+01 7.0848E+01 - 1.1220E+00 1.2580E+02 1.2121E+02 6.7604E+01 5.3020E+01 - 1.2589E+00 9.4108E+01 9.0828E+01 5.0206E+01 3.9630E+01 - 1.4125E+00 7.0594E+01 6.7701E+01 3.6933E+01 2.8973E+01 - 1.5849E+00 5.3345E+01 4.9707E+01 2.7202E+01 2.0973E+01 - 1.7783E+00 3.9606E+01 3.6661E+01 1.9851E+01 1.5291E+01 - 1.9953E+00 2.8969E+01 2.6941E+01 1.4402E+01 1.1060E+01 - 2.2387E+00 2.1155E+01 1.9542E+01 1.0487E+01 7.9353E+00 - 2.5119E+00 1.5442E+01 1.4370E+01 7.5444E+00 5.7094E+00 - 2.8184E+00 1.1262E+01 1.0391E+01 5.3659E+00 4.0555E+00 - 3.1623E+00 8.2700E+00 7.4394E+00 3.7460E+00 2.8469E+00 - 3.5481E+00 6.0202E+00 5.3362E+00 2.6531E+00 2.0041E+00 - 3.9811E+00 4.3380E+00 3.8286E+00 1.8437E+00 1.4121E+00 - 4.4668E+00 3.1294E+00 2.7582E+00 1.2780E+00 9.8069E-01 - 5.0119E+00 2.2868E+00 1.9722E+00 8.8390E-01 6.8382E-01 - 5.6234E+00 1.6458E+00 1.4120E+00 6.0482E-01 4.7633E-01 - 6.3096E+00 1.1728E+00 1.0005E+00 4.1654E-01 3.2487E-01 - 7.0795E+00 8.3319E-01 7.0452E-01 2.9055E-01 2.1888E-01 - 7.9433E+00 5.9747E-01 4.9941E-01 2.0090E-01 1.4895E-01 - 8.9125E+00 4.2702E-01 3.5026E-01 1.3553E-01 9.7856E-02 - 1.0000E+01 3.0631E-01 2.5268E-01 9.0738E-02 6.8696E-02 - 1.1220E+01 2.1911E-01 1.7932E-01 6.1456E-02 4.6347E-02 - 1.2589E+01 1.5760E-01 1.2712E-01 4.1492E-02 3.1156E-02 - 1.4125E+01 1.1128E-01 8.9866E-02 2.8107E-02 2.1153E-02 - 1.5849E+01 7.8836E-02 6.3472E-02 1.8983E-02 1.4321E-02 - 1.7783E+01 5.6559E-02 4.5224E-02 1.2523E-02 9.5806E-03 - 1.9953E+01 4.0556E-02 3.1979E-02 8.2988E-03 6.3145E-03 - 2.2387E+01 2.9043E-02 2.2553E-02 5.4808E-03 4.1997E-03 - 2.5119E+01 2.0952E-02 1.5899E-02 3.6583E-03 2.8014E-03 - 2.8184E+01 1.4871E-02 1.1216E-02 2.4363E-03 1.9381E-03 - 3.1623E+01 1.0422E-02 7.9938E-03 1.6598E-03 1.2692E-03 - 3.5481E+01 7.4106E-03 5.6472E-03 1.1038E-03 8.5325E-04 - 3.9811E+01 5.2489E-03 3.9883E-03 7.3184E-04 5.7163E-04 - 4.4668E+01 3.7251E-03 2.8130E-03 4.8604E-04 3.7946E-04 - 5.0119E+01 2.6482E-03 1.9895E-03 3.2143E-04 2.5601E-04 - 5.6234E+01 1.8829E-03 1.4052E-03 2.1437E-04 1.6971E-04 - 6.3096E+01 1.3313E-03 9.9025E-04 1.4364E-04 1.1198E-04 - 7.0795E+01 9.4402E-04 6.9333E-04 9.4932E-05 7.3774E-05 - 7.9433E+01 6.6634E-04 4.8040E-04 6.2772E-05 4.9732E-05 - 8.9125E+01 4.6922E-04 3.3566E-04 4.2194E-05 3.4244E-05 - 1.0000E+02 3.2940E-04 2.3675E-04 2.7858E-05 2.2546E-05 - 1.1220E+02 2.3157E-04 1.6543E-04 1.8251E-05 1.4945E-05 - 1.2589E+02 1.6296E-04 1.1562E-04 1.2267E-05 1.0040E-05 - 1.4125E+02 1.1414E-04 8.0522E-05 8.2190E-06 6.6596E-06 - 1.5849E+02 8.0013E-05 5.6038E-05 5.4943E-06 4.4713E-06 - 1.7783E+02 5.6464E-05 3.8927E-05 3.6307E-06 2.9614E-06 - 1.9953E+02 3.9355E-05 2.6887E-05 2.4815E-06 1.9322E-06 - 2.2387E+02 2.7459E-05 1.8629E-05 1.7034E-06 1.3142E-06 - 2.5119E+02 1.9320E-05 1.3020E-05 1.1255E-06 9.2988E-07 - 2.8184E+02 1.3416E-05 9.0699E-06 7.6621E-07 6.2533E-07 - 3.1623E+02 9.4340E-06 6.3208E-06 5.1348E-07 4.1673E-07 - 3.5481E+02 6.5845E-06 4.3635E-06 3.4052E-07 2.8162E-07 - 3.9811E+02 4.5871E-06 3.0098E-06 2.2796E-07 1.8604E-07 - 4.4668E+02 3.1821E-06 2.0921E-06 1.5708E-07 1.2627E-07 - 5.0119E+02 2.2205E-06 1.4448E-06 1.0686E-07 8.2766E-08 - 5.6234E+02 1.5500E-06 9.9550E-07 7.1435E-08 5.6427E-08 - 6.3096E+02 1.0708E-06 6.8572E-07 4.8980E-08 3.8022E-08 - 7.0795E+02 7.4522E-07 4.7070E-07 3.2915E-08 2.5466E-08 - 7.9433E+02 5.1684E-07 3.2268E-07 2.1505E-08 1.7096E-08 - 8.9125E+02 3.5498E-07 2.2004E-07 1.4735E-08 1.1537E-08 - 1.0000E+03 2.4689E-07 1.5201E-07 1.0071E-08 7.6271E-09 - 1.1220E+03 1.6989E-07 1.0439E-07 6.6377E-09 5.1749E-09 - 1.2589E+03 1.1616E-07 7.1078E-08 4.4863E-09 3.3819E-09 - 1.4125E+03 7.9143E-08 4.8385E-08 2.9874E-09 2.2123E-09 - 1.5849E+03 5.4284E-08 3.2918E-08 1.9870E-09 1.4654E-09 - 1.7783E+03 3.7318E-08 2.2083E-08 1.3000E-09 1.0197E-09 - 1.9953E+03 2.5355E-08 1.5078E-08 8.7736E-10 6.9338E-10 - 2.2387E+03 1.7221E-08 1.0142E-08 6.0816E-10 4.4178E-10 - 2.5119E+03 1.1683E-08 6.8821E-09 4.0846E-10 2.7167E-10 - 2.8184E+03 7.8051E-09 4.5818E-09 2.6255E-10 1.8001E-10 - 3.1623E+03 5.3950E-09 3.1566E-09 1.6929E-10 1.3154E-10 - 3.5481E+03 3.5555E-09 2.0740E-09 1.1009E-10 8.8672E-11 - 3.9811E+03 2.3842E-09 1.3888E-09 7.6051E-11 5.2122E-11 - 4.4668E+03 1.5942E-09 9.2136E-10 5.2156E-11 3.1966E-11 - 5.0119E+03 1.0551E-09 6.0814E-10 3.2882E-11 2.3001E-11 - 5.6234E+03 6.9518E-10 4.0127E-10 2.1010E-11 1.5445E-11 - 6.3096E+03 4.7062E-10 2.6940E-10 1.4059E-11 1.0366E-11 - 7.0795E+03 3.1235E-10 1.7865E-10 9.1143E-12 6.7562E-12 - 7.9433E+03 2.0787E-10 1.1730E-10 6.0204E-12 4.1584E-12 - 8.9125E+03 1.3783E-10 7.7548E-11 3.8103E-12 2.7579E-12 - 1.0000E+04 8.9903E-11 4.9994E-11 2.5348E-12 1.8842E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.7876E+03 5.9544E+03 2.8876E+03 2.7935E+03 - 1.1220E-01 5.1885E+03 5.3734E+03 2.5846E+03 2.5041E+03 - 1.2589E-01 4.6529E+03 4.7973E+03 2.3050E+03 2.2370E+03 - 1.4125E-01 4.1663E+03 4.2424E+03 2.0578E+03 1.9644E+03 - 1.5849E-01 3.6643E+03 3.7376E+03 1.8176E+03 1.6939E+03 - 1.7783E-01 3.1755E+03 3.2615E+03 1.5858E+03 1.4636E+03 - 1.9953E-01 2.7432E+03 2.8115E+03 1.3805E+03 1.2558E+03 - 2.2387E-01 2.3493E+03 2.4001E+03 1.1763E+03 1.0718E+03 - 2.5119E-01 1.9879E+03 2.0162E+03 1.0034E+03 9.0765E+02 - 2.8184E-01 1.6768E+03 1.6852E+03 8.5917E+02 7.6088E+02 - 3.1623E-01 1.3945E+03 1.4075E+03 7.1129E+02 6.3141E+02 - 3.5481E-01 1.1474E+03 1.1584E+03 5.8572E+02 5.1876E+02 - 3.9811E-01 9.4396E+02 9.5095E+02 4.8690E+02 4.2260E+02 - 4.4668E-01 7.6822E+02 7.7226E+02 3.9606E+02 3.4110E+02 - 5.0119E-01 6.1838E+02 6.1644E+02 3.1857E+02 2.7342E+02 - 5.6234E-01 4.9597E+02 4.9023E+02 2.5560E+02 2.1669E+02 - 6.3096E-01 3.9537E+02 3.8760E+02 2.0258E+02 1.7134E+02 - 7.0795E-01 3.1286E+02 3.0562E+02 1.5800E+02 1.3364E+02 - 7.9433E-01 2.4545E+02 2.3919E+02 1.2310E+02 1.0302E+02 - 8.9125E-01 1.8997E+02 1.8368E+02 9.5991E+01 7.9343E+01 - 1.0000E+00 1.4507E+02 1.4042E+02 7.4126E+01 5.9963E+01 - 1.1220E+00 1.1118E+02 1.0695E+02 5.6499E+01 4.5449E+01 - 1.2589E+00 8.4937E+01 8.0668E+01 4.2347E+01 3.4159E+01 - 1.4125E+00 6.4605E+01 6.0898E+01 3.1408E+01 2.5383E+01 - 1.5849E+00 4.8516E+01 4.5595E+01 2.3116E+01 1.8714E+01 - 1.7783E+00 3.6212E+01 3.3488E+01 1.7119E+01 1.3522E+01 - 1.9953E+00 2.6965E+01 2.4733E+01 1.2631E+01 9.8052E+00 - 2.2387E+00 2.0055E+01 1.8230E+01 9.1501E+00 7.1223E+00 - 2.5119E+00 1.4693E+01 1.3220E+01 6.5615E+00 5.0585E+00 - 2.8184E+00 1.0704E+01 9.5992E+00 4.6839E+00 3.5883E+00 - 3.1623E+00 7.8759E+00 6.9798E+00 3.2561E+00 2.5196E+00 - 3.5481E+00 5.7435E+00 4.9895E+00 2.2973E+00 1.7593E+00 - 3.9811E+00 4.1755E+00 3.5639E+00 1.6004E+00 1.2179E+00 - 4.4668E+00 2.9996E+00 2.5459E+00 1.0991E+00 8.4196E-01 - 5.0119E+00 2.1537E+00 1.8059E+00 7.5115E-01 5.8045E-01 - 5.6234E+00 1.5638E+00 1.2933E+00 5.2540E-01 3.9481E-01 - 6.3096E+00 1.1267E+00 9.2848E-01 3.5916E-01 2.7351E-01 - 7.0795E+00 8.0053E-01 6.5314E-01 2.4794E-01 1.8952E-01 - 7.9433E+00 5.6993E-01 4.6645E-01 1.7191E-01 1.2855E-01 - 8.9125E+00 4.0898E-01 3.3759E-01 1.1541E-01 8.4397E-02 - 1.0000E+01 2.9145E-01 2.3634E-01 7.7334E-02 5.7392E-02 - 1.1220E+01 2.0753E-01 1.6576E-01 5.2007E-02 3.9467E-02 - 1.2589E+01 1.4849E-01 1.1624E-01 3.4458E-02 2.6260E-02 - 1.4125E+01 1.0581E-01 8.2560E-02 2.2815E-02 1.7152E-02 - 1.5849E+01 7.5157E-02 5.9057E-02 1.5461E-02 1.1520E-02 - 1.7783E+01 5.3653E-02 4.1716E-02 1.0322E-02 7.7491E-03 - 1.9953E+01 3.8374E-02 2.9672E-02 6.8528E-03 5.1684E-03 - 2.2387E+01 2.7270E-02 2.1201E-02 4.6187E-03 3.3301E-03 - 2.5119E+01 1.9298E-02 1.4848E-02 3.0258E-03 2.2065E-03 - 2.8184E+01 1.3804E-02 1.0459E-02 1.9881E-03 1.5858E-03 - 3.1623E+01 9.8147E-03 7.3816E-03 1.3456E-03 1.0236E-03 - 3.5481E+01 6.9564E-03 5.2222E-03 8.9060E-04 6.8782E-04 - 3.9811E+01 4.9402E-03 3.6702E-03 5.9616E-04 4.6116E-04 - 4.4668E+01 3.5116E-03 2.5898E-03 3.9654E-04 3.0872E-04 - 5.0119E+01 2.4802E-03 1.8247E-03 2.6145E-04 2.0851E-04 - 5.6234E+01 1.7499E-03 1.2838E-03 1.7301E-04 1.4021E-04 - 6.3096E+01 1.2359E-03 9.0089E-04 1.1475E-04 9.3435E-05 - 7.0795E+01 8.7765E-04 6.2953E-04 7.6605E-05 6.3608E-05 - 7.9433E+01 6.1678E-04 4.4183E-04 5.1099E-05 4.2595E-05 - 8.9125E+01 4.3216E-04 3.0936E-04 3.4393E-05 2.8121E-05 - 1.0000E+02 3.0502E-04 2.1638E-04 2.2921E-05 1.8359E-05 - 1.1220E+02 2.1489E-04 1.5086E-04 1.5280E-05 1.2282E-05 - 1.2589E+02 1.5119E-04 1.0521E-04 1.0230E-05 8.2311E-06 - 1.4125E+02 1.0534E-04 7.3186E-05 6.7831E-06 5.5536E-06 - 1.5849E+02 7.3589E-05 5.1124E-05 4.5883E-06 3.7578E-06 - 1.7783E+02 5.1658E-05 3.5682E-05 3.0842E-06 2.4819E-06 - 1.9953E+02 3.6192E-05 2.4561E-05 2.0361E-06 1.6666E-06 - 2.2387E+02 2.5256E-05 1.7027E-05 1.3843E-06 1.1301E-06 - 2.5119E+02 1.7583E-05 1.1912E-05 9.3236E-07 7.5963E-07 - 2.8184E+02 1.2260E-05 8.1705E-06 6.2383E-07 5.1570E-07 - 3.1623E+02 8.5959E-06 5.6676E-06 4.2694E-07 3.5068E-07 - 3.5481E+02 5.9918E-06 3.9285E-06 2.8879E-07 2.3696E-07 - 3.9811E+02 4.1770E-06 2.7078E-06 1.9670E-07 1.5880E-07 - 4.4668E+02 2.8989E-06 1.8646E-06 1.3468E-07 1.0702E-07 - 5.0119E+02 2.0096E-06 1.2870E-06 9.0342E-08 7.1773E-08 - 5.6234E+02 1.3993E-06 8.9174E-07 6.0906E-08 4.7499E-08 - 6.3096E+02 9.6718E-07 6.1000E-07 4.1741E-08 3.2229E-08 - 7.0795E+02 6.7116E-07 4.1882E-07 2.7787E-08 2.1995E-08 - 7.9433E+02 4.6136E-07 2.8837E-07 1.8612E-08 1.4971E-08 - 8.9125E+02 3.1538E-07 1.9615E-07 1.2612E-08 9.8225E-09 - 1.0000E+03 2.1884E-07 1.3536E-07 8.2868E-09 6.4021E-09 - 1.1220E+03 1.4997E-07 9.1808E-08 5.5221E-09 4.3594E-09 - 1.2589E+03 1.0280E-07 6.2723E-08 3.6630E-09 2.8882E-09 - 1.4125E+03 6.9848E-08 4.2331E-08 2.4699E-09 1.8400E-09 - 1.5849E+03 4.7417E-08 2.8602E-08 1.6295E-09 1.2011E-09 - 1.7783E+03 3.2289E-08 1.9200E-08 1.0975E-09 8.1517E-10 - 1.9953E+03 2.1932E-08 1.2910E-08 7.6926E-10 5.4411E-10 - 2.2387E+03 1.4816E-08 8.6248E-09 4.9676E-10 3.5793E-10 - 2.5119E+03 1.0074E-08 5.8302E-09 3.2748E-10 2.3018E-10 - 2.8184E+03 6.7351E-09 3.8924E-09 2.2404E-10 1.4594E-10 - 3.1623E+03 4.6117E-09 2.6682E-09 1.4794E-10 1.0447E-10 - 3.5481E+03 3.0210E-09 1.7347E-09 9.6195E-11 7.0766E-11 - 3.9811E+03 2.0151E-09 1.1558E-09 6.4288E-11 4.6224E-11 - 4.4668E+03 1.3531E-09 7.6867E-10 4.2738E-11 3.0838E-11 - 5.0119E+03 9.0429E-10 5.0688E-10 2.8694E-11 2.0924E-11 - 5.6234E+03 6.0381E-10 3.3754E-10 1.8083E-11 1.3763E-11 - 6.3096E+03 3.9958E-10 2.2395E-10 1.1520E-11 8.3683E-12 - 7.0795E+03 2.6421E-10 1.4433E-10 7.6435E-12 5.7271E-12 - 7.9433E+03 1.7317E-10 9.5764E-11 5.3862E-12 3.5188E-12 - 8.9125E+03 1.1458E-10 6.3922E-11 3.4510E-12 2.3501E-12 - 1.0000E+04 7.5998E-11 4.1830E-11 2.2442E-12 1.5471E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.3856E+03 6.5285E+03 3.1292E+03 3.0578E+03 - 1.1220E-01 5.7110E+03 5.8250E+03 2.8409E+03 2.7396E+03 - 1.2589E-01 5.0950E+03 5.1644E+03 2.5098E+03 2.4214E+03 - 1.4125E-01 4.5027E+03 4.5854E+03 2.2084E+03 2.1067E+03 - 1.5849E-01 3.9504E+03 4.0247E+03 1.9475E+03 1.8291E+03 - 1.7783E-01 3.4424E+03 3.5002E+03 1.7099E+03 1.5811E+03 - 1.9953E-01 2.9691E+03 3.0048E+03 1.4863E+03 1.3513E+03 - 2.2387E-01 2.5327E+03 2.5595E+03 1.2639E+03 1.1523E+03 - 2.5119E-01 2.1338E+03 2.1615E+03 1.0624E+03 9.7155E+02 - 2.8184E-01 1.7695E+03 1.7947E+03 8.9412E+02 8.0678E+02 - 3.1623E-01 1.4648E+03 1.4740E+03 7.4584E+02 6.6465E+02 - 3.5481E-01 1.2138E+03 1.2100E+03 6.2049E+02 5.4331E+02 - 3.9811E-01 9.9100E+02 9.9287E+02 5.1105E+02 4.4313E+02 - 4.4668E-01 7.9927E+02 8.0229E+02 4.1446E+02 3.5766E+02 - 5.0119E-01 6.4576E+02 6.3694E+02 3.3318E+02 2.8347E+02 - 5.6234E-01 5.1657E+02 5.0899E+02 2.6366E+02 2.2336E+02 - 6.3096E-01 4.0619E+02 4.0260E+02 2.0811E+02 1.7754E+02 - 7.0795E-01 3.1964E+02 3.1199E+02 1.6331E+02 1.3948E+02 - 7.9433E-01 2.4863E+02 2.4068E+02 1.2697E+02 1.0601E+02 - 8.9125E-01 1.9187E+02 1.8716E+02 9.8877E+01 8.0181E+01 - 1.0000E+00 1.4813E+02 1.4408E+02 7.5662E+01 6.1874E+01 - 1.1220E+00 1.1348E+02 1.0917E+02 5.7291E+01 4.6176E+01 - 1.2589E+00 8.6813E+01 8.2277E+01 4.3175E+01 3.4614E+01 - 1.4125E+00 6.5890E+01 6.1452E+01 3.2163E+01 2.5872E+01 - 1.5849E+00 4.9758E+01 4.6076E+01 2.3747E+01 1.8984E+01 - 1.7783E+00 3.7005E+01 3.3998E+01 1.7524E+01 1.3622E+01 - 1.9953E+00 2.7299E+01 2.4909E+01 1.2588E+01 9.7799E+00 - 2.2387E+00 2.0157E+01 1.8326E+01 9.0391E+00 7.0171E+00 - 2.5119E+00 1.4814E+01 1.3298E+01 6.6049E+00 5.0079E+00 - 2.8184E+00 1.0830E+01 9.6717E+00 4.6972E+00 3.5879E+00 - 3.1623E+00 7.8775E+00 6.9652E+00 3.2815E+00 2.5231E+00 - 3.5481E+00 5.7323E+00 5.0079E+00 2.2967E+00 1.7559E+00 - 3.9811E+00 4.1712E+00 3.5760E+00 1.5998E+00 1.2135E+00 - 4.4668E+00 3.0205E+00 2.5449E+00 1.1062E+00 8.4069E-01 - 5.0119E+00 2.1529E+00 1.8203E+00 7.6558E-01 5.8094E-01 - 5.6234E+00 1.5568E+00 1.3081E+00 5.2765E-01 3.9750E-01 - 6.3096E+00 1.1329E+00 9.2896E-01 3.6918E-01 2.6940E-01 - 7.0795E+00 7.9642E-01 6.5872E-01 2.5240E-01 1.8636E-01 - 7.9433E+00 5.6990E-01 4.7028E-01 1.6858E-01 1.2824E-01 - 8.9125E+00 4.1242E-01 3.3063E-01 1.1604E-01 8.6485E-02 - 1.0000E+01 2.9064E-01 2.3597E-01 7.6747E-02 5.7703E-02 - 1.1220E+01 2.0761E-01 1.6642E-01 5.0840E-02 3.8895E-02 - 1.2589E+01 1.4855E-01 1.1724E-01 3.4409E-02 2.6196E-02 - 1.4125E+01 1.0581E-01 8.3503E-02 2.3007E-02 1.7541E-02 - 1.5849E+01 7.5133E-02 5.8696E-02 1.5329E-02 1.1850E-02 - 1.7783E+01 5.3398E-02 4.1426E-02 1.0259E-02 7.7302E-03 - 1.9953E+01 3.8353E-02 2.9401E-02 6.7072E-03 5.0802E-03 - 2.2387E+01 2.7069E-02 2.0609E-02 4.4283E-03 3.5053E-03 - 2.5119E+01 1.9207E-02 1.4670E-02 3.0629E-03 2.2687E-03 - 2.8184E+01 1.3737E-02 1.0500E-02 2.0477E-03 1.4812E-03 - 3.1623E+01 9.8321E-03 7.3684E-03 1.3541E-03 1.0494E-03 - 3.5481E+01 6.9926E-03 5.2171E-03 9.0106E-04 7.0588E-04 - 3.9811E+01 4.9506E-03 3.6876E-03 5.9325E-04 4.6931E-04 - 4.4668E+01 3.5050E-03 2.6098E-03 3.9257E-04 3.1019E-04 - 5.0119E+01 2.4839E-03 1.8379E-03 2.6179E-04 2.0577E-04 - 5.6234E+01 1.7552E-03 1.2816E-03 1.7495E-04 1.3699E-04 - 6.3096E+01 1.2384E-03 9.0072E-04 1.1616E-04 9.2168E-05 - 7.0795E+01 8.7728E-04 6.3333E-04 7.6980E-05 6.2330E-05 - 7.9433E+01 6.1928E-04 4.4316E-04 5.1379E-05 4.2655E-05 - 8.9125E+01 4.3324E-04 3.0966E-04 3.4326E-05 2.7468E-05 - 1.0000E+02 3.0465E-04 2.1562E-04 2.3060E-05 1.8620E-05 - 1.1220E+02 2.1350E-04 1.5008E-04 1.5237E-05 1.2453E-05 - 1.2589E+02 1.4923E-04 1.0469E-04 1.0292E-05 8.2946E-06 - 1.4125E+02 1.0483E-04 7.2851E-05 6.9335E-06 5.5111E-06 - 1.5849E+02 7.3820E-05 5.0791E-05 4.5622E-06 3.6487E-06 - 1.7783E+02 5.1624E-05 3.5317E-05 3.0706E-06 2.4940E-06 - 1.9953E+02 3.5979E-05 2.4444E-05 2.1446E-06 1.7253E-06 - 2.2387E+02 2.5112E-05 1.6882E-05 1.4877E-06 1.1364E-06 - 2.5119E+02 1.7539E-05 1.1649E-05 9.9079E-07 7.4860E-07 - 2.8184E+02 1.2302E-05 8.0470E-06 6.4401E-07 5.0903E-07 - 3.1623E+02 8.5877E-06 5.6742E-06 4.2710E-07 3.4563E-07 - 3.5481E+02 5.9634E-06 3.9302E-06 2.8823E-07 2.3378E-07 - 3.9811E+02 4.1440E-06 2.7105E-06 1.9552E-07 1.5778E-07 - 4.4668E+02 2.8902E-06 1.8744E-06 1.3281E-07 1.0718E-07 - 5.0119E+02 2.0200E-06 1.2944E-06 9.0333E-08 7.2447E-08 - 5.6234E+02 1.3975E-06 8.8894E-07 6.0776E-08 4.7677E-08 - 6.3096E+02 9.5929E-07 6.0917E-07 4.0528E-08 3.2146E-08 - 7.0795E+02 6.6482E-07 4.1982E-07 2.6488E-08 2.1585E-08 - 7.9433E+02 4.6263E-07 2.8645E-07 1.7496E-08 1.4381E-08 - 8.9125E+02 3.1739E-07 1.9559E-07 1.2136E-08 9.6500E-09 - 1.0000E+03 2.1765E-07 1.3499E-07 8.3247E-09 6.5726E-09 - 1.1220E+03 1.4820E-07 9.1374E-08 5.6208E-09 4.3588E-09 - 1.2589E+03 1.0155E-07 6.1788E-08 3.7132E-09 2.8572E-09 - 1.4125E+03 6.9650E-08 4.1845E-08 2.5306E-09 1.9194E-09 - 1.5849E+03 4.7657E-08 2.8271E-08 1.6859E-09 1.2096E-09 - 1.7783E+03 3.2543E-08 1.9059E-08 1.0961E-09 8.2610E-10 - 1.9953E+03 2.1822E-08 1.3055E-08 7.1528E-10 5.7183E-10 - 2.2387E+03 1.4674E-08 8.7648E-09 4.7477E-10 3.5391E-10 - 2.5119E+03 9.9358E-09 5.8448E-09 3.2672E-10 2.3220E-10 - 2.8184E+03 6.6920E-09 3.9172E-09 2.0981E-10 1.5986E-10 - 3.1623E+03 4.6384E-09 2.6928E-09 1.4693E-10 1.0543E-10 - 3.5481E+03 3.0306E-09 1.7399E-09 9.9080E-11 6.5051E-11 - 3.9811E+03 2.0172E-09 1.1562E-09 6.2313E-11 4.5126E-11 - 4.4668E+03 1.3462E-09 7.6879E-10 4.0369E-11 3.1046E-11 - 5.0119E+03 8.9681E-10 5.1313E-10 2.6979E-11 1.9637E-11 - 5.6234E+03 5.9278E-10 3.4280E-10 1.7061E-11 1.1340E-11 - 6.3096E+03 3.9142E-10 2.2364E-10 1.1988E-11 8.2238E-12 - 7.0795E+03 2.5849E-10 1.4770E-10 8.0575E-12 5.5651E-12 - 7.9433E+03 1.7430E-10 9.7579E-11 5.3037E-12 3.5458E-12 - 8.9125E+03 1.1527E-10 6.4335E-11 3.4437E-12 2.3483E-12 - 1.0000E+04 7.5517E-11 4.1304E-11 2.3921E-12 1.4719E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.4543E+03 6.6284E+03 3.1571E+03 3.1161E+03 - 1.1220E-01 5.7826E+03 5.8991E+03 2.8263E+03 2.7801E+03 - 1.2589E-01 5.1488E+03 5.2294E+03 2.5182E+03 2.4582E+03 - 1.4125E-01 4.5459E+03 4.6166E+03 2.2292E+03 2.1577E+03 - 1.5849E-01 3.9791E+03 4.0337E+03 1.9524E+03 1.8758E+03 - 1.7783E-01 3.4644E+03 3.4939E+03 1.6981E+03 1.6159E+03 - 1.9953E-01 2.9942E+03 2.9971E+03 1.4666E+03 1.3778E+03 - 2.2387E-01 2.5438E+03 2.5468E+03 1.2593E+03 1.1640E+03 - 2.5119E-01 2.1407E+03 2.1424E+03 1.0710E+03 9.8093E+02 - 2.8184E-01 1.7861E+03 1.7879E+03 8.9807E+02 8.2260E+02 - 3.1623E-01 1.4780E+03 1.4908E+03 7.4807E+02 6.7593E+02 - 3.5481E-01 1.2216E+03 1.2225E+03 6.1696E+02 5.4657E+02 - 3.9811E-01 9.9945E+02 9.8943E+02 5.0327E+02 4.4363E+02 - 4.4668E-01 8.0320E+02 8.0091E+02 4.0655E+02 3.5990E+02 - 5.0119E-01 6.4821E+02 6.4368E+02 3.2930E+02 2.8787E+02 - 5.6234E-01 5.1813E+02 5.0869E+02 2.6565E+02 2.2817E+02 - 6.3096E-01 4.0870E+02 3.9708E+02 2.1082E+02 1.7867E+02 - 7.0795E-01 3.2021E+02 3.1046E+02 1.6494E+02 1.3713E+02 - 7.9433E-01 2.4826E+02 2.4041E+02 1.2688E+02 1.0494E+02 - 8.9125E-01 1.9340E+02 1.8473E+02 9.7838E+01 8.1291E+01 - 1.0000E+00 1.4888E+02 1.4184E+02 7.5168E+01 6.1594E+01 - 1.1220E+00 1.1409E+02 1.0781E+02 5.7446E+01 4.6051E+01 - 1.2589E+00 8.6756E+01 8.1235E+01 4.2793E+01 3.4655E+01 - 1.4125E+00 6.5302E+01 6.1261E+01 3.1741E+01 2.5733E+01 - 1.5849E+00 4.8695E+01 4.5901E+01 2.3783E+01 1.8774E+01 - 1.7783E+00 3.6316E+01 3.3928E+01 1.7460E+01 1.3580E+01 - 1.9953E+00 2.7140E+01 2.4857E+01 1.2702E+01 9.7530E+00 - 2.2387E+00 2.0081E+01 1.8177E+01 9.2491E+00 6.9367E+00 - 2.5119E+00 1.4680E+01 1.3297E+01 6.6516E+00 4.9464E+00 - 2.8184E+00 1.0855E+01 9.5320E+00 4.7845E+00 3.5206E+00 - 3.1623E+00 7.8651E+00 6.9352E+00 3.3089E+00 2.5017E+00 - 3.5481E+00 5.6909E+00 5.0011E+00 2.2994E+00 1.7480E+00 - 3.9811E+00 4.1354E+00 3.5758E+00 1.6127E+00 1.2013E+00 - 4.4668E+00 2.9931E+00 2.5613E+00 1.1341E+00 8.3049E-01 - 5.0119E+00 2.1460E+00 1.8434E+00 7.7778E-01 5.8006E-01 - 5.6234E+00 1.5550E+00 1.3126E+00 5.2632E-01 3.9307E-01 - 6.3096E+00 1.1251E+00 9.2910E-01 3.5849E-01 2.6749E-01 - 7.0795E+00 8.0896E-01 6.4998E-01 2.4683E-01 1.8639E-01 - 7.9433E+00 5.7374E-01 4.6538E-01 1.6898E-01 1.2587E-01 - 8.9125E+00 4.0990E-01 3.3481E-01 1.1369E-01 8.4498E-02 - 1.0000E+01 2.9337E-01 2.3410E-01 7.6471E-02 5.6960E-02 - 1.1220E+01 2.0826E-01 1.6495E-01 5.2004E-02 3.8258E-02 - 1.2589E+01 1.4781E-01 1.1721E-01 3.4404E-02 2.5822E-02 - 1.4125E+01 1.0586E-01 8.2959E-02 2.2651E-02 1.7604E-02 - 1.5849E+01 7.5372E-02 5.8431E-02 1.5495E-02 1.1641E-02 - 1.7783E+01 5.3392E-02 4.1223E-02 1.0443E-02 7.7694E-03 - 1.9953E+01 3.8205E-02 2.9605E-02 6.7404E-03 5.3879E-03 - 2.2387E+01 2.7219E-02 2.0996E-02 4.4621E-03 3.4376E-03 - 2.5119E+01 1.9298E-02 1.4863E-02 2.9744E-03 2.1542E-03 - 2.8184E+01 1.3680E-02 1.0614E-02 1.9729E-03 1.4739E-03 - 3.1623E+01 9.8102E-03 7.3779E-03 1.3303E-03 1.0455E-03 - 3.5481E+01 6.9552E-03 5.2148E-03 8.7945E-04 6.9375E-04 - 3.9811E+01 4.9219E-03 3.6659E-03 5.8559E-04 4.6692E-04 - 4.4668E+01 3.4926E-03 2.5850E-03 3.9715E-04 3.1504E-04 - 5.0119E+01 2.4789E-03 1.8217E-03 2.6569E-04 2.0714E-04 - 5.6234E+01 1.7532E-03 1.2830E-03 1.7755E-04 1.3975E-04 - 6.3096E+01 1.2372E-03 9.0262E-04 1.1701E-04 9.3996E-05 - 7.0795E+01 8.6914E-04 6.3229E-04 7.8253E-05 6.1546E-05 - 7.9433E+01 6.1352E-04 4.3972E-04 5.1762E-05 4.0968E-05 - 8.9125E+01 4.3143E-04 3.0956E-04 3.4946E-05 2.7796E-05 - 1.0000E+02 3.0388E-04 2.1637E-04 2.3071E-05 1.8677E-05 - 1.1220E+02 2.1380E-04 1.5113E-04 1.5383E-05 1.2551E-05 - 1.2589E+02 1.5081E-04 1.0517E-04 1.0373E-05 8.4060E-06 - 1.4125E+02 1.0504E-04 7.3078E-05 6.9180E-06 5.5498E-06 - 1.5849E+02 7.3603E-05 5.0827E-05 4.6736E-06 3.6915E-06 - 1.7783E+02 5.1805E-05 3.5455E-05 3.1838E-06 2.5332E-06 - 1.9953E+02 3.6286E-05 2.4418E-05 2.1321E-06 1.7024E-06 - 2.2387E+02 2.5214E-05 1.7009E-05 1.4251E-06 1.1635E-06 - 2.5119E+02 1.7574E-05 1.1812E-05 9.7207E-07 7.8911E-07 - 2.8184E+02 1.2346E-05 8.1545E-06 6.3795E-07 5.3258E-07 - 3.1623E+02 8.5948E-06 5.6872E-06 4.2540E-07 3.4887E-07 - 3.5481E+02 5.9750E-06 3.9225E-06 2.8722E-07 2.3324E-07 - 3.9811E+02 4.1534E-06 2.7088E-06 1.9875E-07 1.5518E-07 - 4.4668E+02 2.8909E-06 1.8662E-06 1.3718E-07 1.0440E-07 - 5.0119E+02 2.0143E-06 1.2927E-06 9.0500E-08 7.0657E-08 - 5.6234E+02 1.4035E-06 8.9137E-07 6.0928E-08 4.7346E-08 - 6.3096E+02 9.6417E-07 6.1125E-07 4.1210E-08 3.1863E-08 - 7.0795E+02 6.6816E-07 4.1944E-07 2.7209E-08 2.1106E-08 - 7.9433E+02 4.6385E-07 2.8666E-07 1.8596E-08 1.4076E-08 - 8.9125E+02 3.1623E-07 1.9505E-07 1.2468E-08 9.6816E-09 - 1.0000E+03 2.1865E-07 1.3431E-07 8.1472E-09 6.3675E-09 - 1.1220E+03 1.4925E-07 9.1004E-08 5.4500E-09 4.1928E-09 - 1.2589E+03 1.0215E-07 6.2101E-08 3.8296E-09 2.8838E-09 - 1.4125E+03 6.9760E-08 4.2139E-08 2.5608E-09 1.9400E-09 - 1.5849E+03 4.7568E-08 2.8391E-08 1.7084E-09 1.2047E-09 - 1.7783E+03 3.2290E-08 1.9174E-08 1.1596E-09 7.9920E-10 - 1.9953E+03 2.1896E-08 1.2942E-08 7.4848E-10 5.5884E-10 - 2.2387E+03 1.4641E-08 8.6438E-09 4.8829E-10 3.9059E-10 - 2.5119E+03 9.8243E-09 5.7334E-09 3.3775E-10 2.5422E-10 - 2.8184E+03 6.6789E-09 3.8891E-09 2.1418E-10 1.5773E-10 - 3.1623E+03 4.5932E-09 2.7146E-09 1.4257E-10 1.0490E-10 - 3.5481E+03 2.9985E-09 1.7581E-09 9.6532E-11 6.7099E-11 - 3.9811E+03 2.0225E-09 1.1540E-09 6.3561E-11 4.3894E-11 - 4.4668E+03 1.3425E-09 7.7600E-10 4.0699E-11 2.9451E-11 - 5.0119E+03 8.8973E-10 5.1395E-10 2.6292E-11 2.1058E-11 - 5.6234E+03 6.0272E-10 3.3489E-10 1.7480E-11 1.4375E-11 - 6.3096E+03 3.9782E-10 2.2387E-10 1.1154E-11 8.0440E-12 - 7.0795E+03 2.6277E-10 1.4416E-10 7.3231E-12 5.4327E-12 - 7.9433E+03 1.7322E-10 9.5061E-11 5.0279E-12 3.6477E-12 - 8.9125E+03 1.1518E-10 6.3178E-11 3.1680E-12 2.4430E-12 - 1.0000E+04 7.7003E-11 4.1377E-11 2.1052E-12 1.5738E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.4511E+03 6.5467E+03 3.0928E+03 3.1350E+03 - 1.1220E-01 5.7701E+03 5.8321E+03 2.7903E+03 2.7901E+03 - 1.2589E-01 5.1156E+03 5.1442E+03 2.4899E+03 2.4436E+03 - 1.4125E-01 4.5101E+03 4.5318E+03 2.2062E+03 2.1364E+03 - 1.5849E-01 3.9484E+03 3.9862E+03 1.9220E+03 1.8570E+03 - 1.7783E-01 3.4314E+03 3.4568E+03 1.6611E+03 1.5992E+03 - 1.9953E-01 2.9637E+03 2.9703E+03 1.4305E+03 1.3756E+03 - 2.2387E-01 2.5353E+03 2.5276E+03 1.2192E+03 1.1658E+03 - 2.5119E-01 2.1344E+03 2.1299E+03 1.0376E+03 9.7933E+02 - 2.8184E-01 1.7771E+03 1.7759E+03 8.7590E+02 8.2256E+02 - 3.1623E-01 1.4716E+03 1.4641E+03 7.3479E+02 6.7832E+02 - 3.5481E-01 1.2210E+03 1.2020E+03 6.1137E+02 5.5044E+02 - 3.9811E-01 1.0004E+03 9.7883E+02 4.9720E+02 4.4397E+02 - 4.4668E-01 8.0183E+02 7.9135E+02 4.0399E+02 3.5849E+02 - 5.0119E-01 6.4209E+02 6.3532E+02 3.2741E+02 2.8712E+02 - 5.6234E-01 5.1273E+02 5.0200E+02 2.5944E+02 2.2672E+02 - 6.3096E-01 4.0845E+02 3.9335E+02 2.0540E+02 1.7814E+02 - 7.0795E-01 3.2105E+02 3.0914E+02 1.6168E+02 1.3809E+02 - 7.9433E-01 2.4804E+02 2.4145E+02 1.2612E+02 1.0648E+02 - 8.9125E-01 1.9113E+02 1.8608E+02 9.8241E+01 8.1193E+01 - 1.0000E+00 1.4805E+02 1.4249E+02 7.4981E+01 6.2021E+01 - 1.1220E+00 1.1447E+02 1.0822E+02 5.6828E+01 4.6798E+01 - 1.2589E+00 8.6884E+01 8.1143E+01 4.2905E+01 3.4845E+01 - 1.4125E+00 6.5617E+01 6.1273E+01 3.2157E+01 2.5504E+01 - 1.5849E+00 4.9660E+01 4.6332E+01 2.3814E+01 1.8675E+01 - 1.7783E+00 3.7043E+01 3.4211E+01 1.7368E+01 1.3795E+01 - 1.9953E+00 2.7530E+01 2.4915E+01 1.2683E+01 1.0052E+01 - 2.2387E+00 2.0283E+01 1.8197E+01 9.2339E+00 7.2438E+00 - 2.5119E+00 1.4741E+01 1.3310E+01 6.6003E+00 5.1123E+00 - 2.8184E+00 1.0811E+01 9.6974E+00 4.6732E+00 3.5717E+00 - 3.1623E+00 7.8973E+00 6.9690E+00 3.3079E+00 2.5168E+00 - 3.5481E+00 5.7558E+00 5.0103E+00 2.3378E+00 1.7828E+00 - 3.9811E+00 4.1671E+00 3.6001E+00 1.6285E+00 1.2341E+00 - 4.4668E+00 3.0078E+00 2.5810E+00 1.1258E+00 8.4890E-01 - 5.0119E+00 2.1691E+00 1.8458E+00 7.6797E-01 5.8769E-01 - 5.6234E+00 1.5630E+00 1.3196E+00 5.3722E-01 4.0088E-01 - 6.3096E+00 1.1243E+00 9.4160E-01 3.6786E-01 2.7422E-01 - 7.0795E+00 8.0165E-01 6.6565E-01 2.4797E-01 1.8608E-01 - 7.9433E+00 5.7702E-01 4.7258E-01 1.6671E-01 1.2608E-01 - 8.9125E+00 4.1781E-01 3.3280E-01 1.1210E-01 8.4873E-02 - 1.0000E+01 2.9345E-01 2.3582E-01 7.6876E-02 5.6910E-02 - 1.1220E+01 2.0893E-01 1.6614E-01 5.1737E-02 3.8563E-02 - 1.2589E+01 1.4815E-01 1.1855E-01 3.4737E-02 2.6094E-02 - 1.4125E+01 1.0615E-01 8.3959E-02 2.2943E-02 1.7715E-02 - 1.5849E+01 7.5991E-02 5.8953E-02 1.5419E-02 1.2006E-02 - 1.7783E+01 5.3988E-02 4.1881E-02 1.0446E-02 7.9045E-03 - 1.9953E+01 3.8085E-02 2.9825E-02 6.8344E-03 5.1780E-03 - 2.2387E+01 2.6781E-02 2.0706E-02 4.5581E-03 3.4857E-03 - 2.5119E+01 1.9144E-02 1.4511E-02 3.0995E-03 2.2379E-03 - 2.8184E+01 1.3643E-02 1.0467E-02 2.0605E-03 1.4648E-03 - 3.1623E+01 9.8123E-03 7.3904E-03 1.3448E-03 1.0447E-03 - 3.5481E+01 6.9562E-03 5.2101E-03 8.9114E-04 7.0034E-04 - 3.9811E+01 4.9485E-03 3.6704E-03 5.9013E-04 4.5999E-04 - 4.4668E+01 3.5216E-03 2.5931E-03 3.9389E-04 3.0585E-04 - 5.0119E+01 2.4836E-03 1.8261E-03 2.6278E-04 2.0473E-04 - 5.6234E+01 1.7543E-03 1.2849E-03 1.7280E-04 1.3892E-04 - 6.3096E+01 1.2405E-03 9.0367E-04 1.1580E-04 9.2356E-05 - 7.0795E+01 8.7447E-04 6.3587E-04 7.7867E-05 6.0869E-05 - 7.9433E+01 6.1363E-04 4.4600E-04 5.2484E-05 4.1268E-05 - 8.9125E+01 4.3359E-04 3.0994E-04 3.5054E-05 2.7983E-05 - 1.0000E+02 3.0631E-04 2.1561E-04 2.2944E-05 1.8582E-05 - 1.1220E+02 2.1449E-04 1.5055E-04 1.5220E-05 1.2452E-05 - 1.2589E+02 1.4989E-04 1.0514E-04 1.0221E-05 8.2879E-06 - 1.4125E+02 1.0528E-04 7.3357E-05 6.8225E-06 5.6316E-06 - 1.5849E+02 7.3920E-05 5.0727E-05 4.6571E-06 3.7433E-06 - 1.7783E+02 5.1751E-05 3.5132E-05 3.1512E-06 2.5070E-06 - 1.9953E+02 3.6023E-05 2.4535E-05 2.1004E-06 1.7129E-06 - 2.2387E+02 2.5076E-05 1.7160E-05 1.3964E-06 1.1540E-06 - 2.5119E+02 1.7660E-05 1.1806E-05 9.0851E-07 7.7148E-07 - 2.8184E+02 1.2352E-05 8.1641E-06 6.5184E-07 5.0105E-07 - 3.1623E+02 8.5747E-06 5.6664E-06 4.4082E-07 3.4643E-07 - 3.5481E+02 5.9350E-06 3.9113E-06 2.9309E-07 2.3487E-07 - 3.9811E+02 4.1459E-06 2.6941E-06 1.9657E-07 1.5627E-07 - 4.4668E+02 2.8904E-06 1.8584E-06 1.3415E-07 1.0491E-07 - 5.0119E+02 2.0061E-06 1.2841E-06 8.9828E-08 7.1156E-08 - 5.6234E+02 1.3991E-06 8.8811E-07 6.0697E-08 4.7777E-08 - 6.3096E+02 9.6516E-07 6.1022E-07 4.0806E-08 3.1805E-08 - 7.0795E+02 6.6904E-07 4.1872E-07 2.7263E-08 2.1049E-08 - 7.9433E+02 4.6265E-07 2.8714E-07 1.7965E-08 1.4262E-08 - 8.9125E+02 3.1764E-07 1.9646E-07 1.2191E-08 9.6427E-09 - 1.0000E+03 2.1999E-07 1.3490E-07 8.0716E-09 6.4050E-09 - 1.1220E+03 1.5003E-07 9.1306E-08 5.3779E-09 4.2029E-09 - 1.2589E+03 1.0195E-07 6.2277E-08 3.6309E-09 2.8358E-09 - 1.4125E+03 6.9123E-08 4.2092E-08 2.4696E-09 1.9778E-09 - 1.5849E+03 4.6974E-08 2.8458E-08 1.6690E-09 1.3239E-09 - 1.7783E+03 3.2126E-08 1.9318E-08 1.0951E-09 8.4156E-10 - 1.9953E+03 2.1867E-08 1.2931E-08 7.2000E-10 5.4077E-10 - 2.2387E+03 1.4757E-08 8.7188E-09 4.8462E-10 3.6375E-10 - 2.5119E+03 9.9655E-09 5.8148E-09 3.2161E-10 2.4147E-10 - 2.8184E+03 6.7367E-09 3.8187E-09 2.1855E-10 1.5914E-10 - 3.1623E+03 4.6289E-09 2.6852E-09 1.4086E-10 1.1505E-10 - 3.5481E+03 3.0127E-09 1.7438E-09 9.5878E-11 7.2869E-11 - 3.9811E+03 2.0204E-09 1.1526E-09 6.4752E-11 4.4368E-11 - 4.4668E+03 1.3561E-09 7.6884E-10 4.1727E-11 2.8467E-11 - 5.0119E+03 8.9647E-10 5.0523E-10 2.7303E-11 1.9637E-11 - 5.6234E+03 5.8512E-10 3.2821E-10 1.6999E-11 1.3086E-11 - 6.3096E+03 3.9286E-10 2.2021E-10 1.1775E-11 8.0684E-12 - 7.0795E+03 2.6226E-10 1.4781E-10 7.7677E-12 5.3794E-12 - 7.9433E+03 1.7396E-10 9.8584E-11 5.2127E-12 3.1576E-12 - 8.9125E+03 1.1400E-10 6.4919E-11 3.3392E-12 2.0633E-12 - 1.0000E+04 7.4936E-11 4.1785E-11 2.0314E-12 1.5936E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.4534E+03 6.5340E+03 3.1159E+03 3.1673E+03 - 1.1220E-01 5.8004E+03 5.8488E+03 2.8056E+03 2.8187E+03 - 1.2589E-01 5.1646E+03 5.1929E+03 2.4934E+03 2.4793E+03 - 1.4125E-01 4.5736E+03 4.5756E+03 2.2003E+03 2.1603E+03 - 1.5849E-01 4.0082E+03 4.0054E+03 1.9269E+03 1.8838E+03 - 1.7783E-01 3.4725E+03 3.4792E+03 1.6797E+03 1.6314E+03 - 1.9953E-01 2.9902E+03 2.9882E+03 1.4561E+03 1.3879E+03 - 2.2387E-01 2.5571E+03 2.5265E+03 1.2414E+03 1.1729E+03 - 2.5119E-01 2.1556E+03 2.1203E+03 1.0488E+03 9.8779E+02 - 2.8184E-01 1.7980E+03 1.7795E+03 8.8843E+02 8.2105E+02 - 3.1623E-01 1.4942E+03 1.4773E+03 7.4996E+02 6.8141E+02 - 3.5481E-01 1.2318E+03 1.2154E+03 6.2084E+02 5.5777E+02 - 3.9811E-01 1.0108E+03 9.9274E+02 5.0635E+02 4.4824E+02 - 4.4668E-01 8.1767E+02 7.9727E+02 4.1086E+02 3.6219E+02 - 5.0119E-01 6.5488E+02 6.3636E+02 3.3091E+02 2.8843E+02 - 5.6234E-01 5.2120E+02 5.0816E+02 2.6541E+02 2.2816E+02 - 6.3096E-01 4.1214E+02 4.0386E+02 2.1080E+02 1.7970E+02 - 7.0795E-01 3.2246E+02 3.1474E+02 1.6386E+02 1.4019E+02 - 7.9433E-01 2.5203E+02 2.4190E+02 1.2677E+02 1.0802E+02 - 8.9125E-01 1.9585E+02 1.8580E+02 9.7520E+01 8.1767E+01 - 1.0000E+00 1.4916E+02 1.4326E+02 7.5395E+01 6.1895E+01 - 1.1220E+00 1.1387E+02 1.0867E+02 5.7840E+01 4.6383E+01 - 1.2589E+00 8.7030E+01 8.1999E+01 4.3379E+01 3.4572E+01 - 1.4125E+00 6.5606E+01 6.1653E+01 3.2128E+01 2.5473E+01 - 1.5849E+00 4.9286E+01 4.5999E+01 2.3650E+01 1.8890E+01 - 1.7783E+00 3.6867E+01 3.3968E+01 1.7234E+01 1.3850E+01 - 1.9953E+00 2.7322E+01 2.4973E+01 1.2526E+01 9.8497E+00 - 2.2387E+00 2.0244E+01 1.8204E+01 9.0510E+00 7.0780E+00 - 2.5119E+00 1.4769E+01 1.3108E+01 6.5947E+00 5.1226E+00 - 2.8184E+00 1.0793E+01 9.5344E+00 4.6942E+00 3.5289E+00 - 3.1623E+00 7.9023E+00 6.9459E+00 3.2916E+00 2.4862E+00 - 3.5481E+00 5.7131E+00 4.9663E+00 2.3083E+00 1.7450E+00 - 3.9811E+00 4.1247E+00 3.5653E+00 1.6107E+00 1.2272E+00 - 4.4668E+00 2.9797E+00 2.5776E+00 1.1116E+00 8.5054E-01 - 5.0119E+00 2.1493E+00 1.8455E+00 7.6079E-01 5.8221E-01 - 5.6234E+00 1.5407E+00 1.3142E+00 5.2286E-01 3.9658E-01 - 6.3096E+00 1.1049E+00 9.2443E-01 3.6332E-01 2.7105E-01 - 7.0795E+00 7.9007E-01 6.5063E-01 2.4842E-01 1.8250E-01 - 7.9433E+00 5.6881E-01 4.6396E-01 1.6802E-01 1.2218E-01 - 8.9125E+00 4.0881E-01 3.2934E-01 1.1156E-01 8.3205E-02 - 1.0000E+01 2.9332E-01 2.3517E-01 7.6283E-02 5.7560E-02 - 1.1220E+01 2.0860E-01 1.6613E-01 5.0717E-02 3.8951E-02 - 1.2589E+01 1.4907E-01 1.1776E-01 3.4142E-02 2.6178E-02 - 1.4125E+01 1.0648E-01 8.3834E-02 2.3280E-02 1.7283E-02 - 1.5849E+01 7.5125E-02 5.9494E-02 1.5459E-02 1.1712E-02 - 1.7783E+01 5.3665E-02 4.2188E-02 1.0342E-02 8.0117E-03 - 1.9953E+01 3.8598E-02 2.9794E-02 6.8957E-03 5.2883E-03 - 2.2387E+01 2.7409E-02 2.1064E-02 4.5284E-03 3.4410E-03 - 2.5119E+01 1.9404E-02 1.4847E-02 3.0289E-03 2.2927E-03 - 2.8184E+01 1.3813E-02 1.0445E-02 2.0343E-03 1.5440E-03 - 3.1623E+01 9.7954E-03 7.3850E-03 1.3344E-03 1.0368E-03 - 3.5481E+01 6.9529E-03 5.2156E-03 8.8181E-04 6.9237E-04 - 3.9811E+01 4.9441E-03 3.6657E-03 5.8809E-04 4.6514E-04 - 4.4668E+01 3.5060E-03 2.5882E-03 3.9294E-04 3.0970E-04 - 5.0119E+01 2.4742E-03 1.8236E-03 2.6002E-04 2.0421E-04 - 5.6234E+01 1.7497E-03 1.2696E-03 1.7088E-04 1.3635E-04 - 6.3096E+01 1.2381E-03 8.8873E-04 1.1654E-04 9.2424E-05 - 7.0795E+01 8.7238E-04 6.2648E-04 7.7707E-05 6.1264E-05 - 7.9433E+01 6.1326E-04 4.3837E-04 5.0540E-05 4.0353E-05 - 8.9125E+01 4.3100E-04 3.0618E-04 3.3958E-05 2.7430E-05 - 1.0000E+02 3.0415E-04 2.1571E-04 2.2987E-05 1.8514E-05 - 1.1220E+02 2.1340E-04 1.5003E-04 1.5161E-05 1.2392E-05 - 1.2589E+02 1.4980E-04 1.0506E-04 1.0234E-05 8.3726E-06 - 1.4125E+02 1.0512E-04 7.3252E-05 6.9987E-06 5.6757E-06 - 1.5849E+02 7.3636E-05 5.0785E-05 4.6769E-06 3.8059E-06 - 1.7783E+02 5.1434E-05 3.5326E-05 3.1366E-06 2.5471E-06 - 1.9953E+02 3.6143E-05 2.4482E-05 2.0449E-06 1.7155E-06 - 2.2387E+02 2.5372E-05 1.6990E-05 1.3600E-06 1.1490E-06 - 2.5119E+02 1.7714E-05 1.1805E-05 9.3939E-07 7.6397E-07 - 2.8184E+02 1.2248E-05 8.1138E-06 6.5566E-07 5.1106E-07 - 3.1623E+02 8.5704E-06 5.6585E-06 4.2858E-07 3.4492E-07 - 3.5481E+02 5.9410E-06 3.9276E-06 2.8871E-07 2.3460E-07 - 3.9811E+02 4.1472E-06 2.7115E-06 1.9813E-07 1.5692E-07 - 4.4668E+02 2.8938E-06 1.8677E-06 1.3380E-07 1.0583E-07 - 5.0119E+02 2.0071E-06 1.2879E-06 8.9141E-08 7.1063E-08 - 5.6234E+02 1.3984E-06 8.8567E-07 6.1164E-08 4.8143E-08 - 6.3096E+02 9.6463E-07 6.0925E-07 4.1119E-08 3.2386E-08 - 7.0795E+02 6.6547E-07 4.1762E-07 2.7448E-08 2.1174E-08 - 7.9433E+02 4.6040E-07 2.8685E-07 1.8151E-08 1.4133E-08 - 8.9125E+02 3.1560E-07 1.9522E-07 1.2067E-08 9.9127E-09 - 1.0000E+03 2.1805E-07 1.3336E-07 8.2598E-09 6.4796E-09 - 1.1220E+03 1.4915E-07 9.0397E-08 5.4467E-09 4.3397E-09 - 1.2589E+03 1.0177E-07 6.1835E-08 3.7700E-09 2.8474E-09 - 1.4125E+03 6.9302E-08 4.2390E-08 2.4327E-09 1.8710E-09 - 1.5849E+03 4.7451E-08 2.8381E-08 1.5828E-09 1.2507E-09 - 1.7783E+03 3.2223E-08 1.9072E-08 1.0936E-09 7.8308E-10 - 1.9953E+03 2.1818E-08 1.3015E-08 7.4186E-10 5.4649E-10 - 2.2387E+03 1.4802E-08 8.6660E-09 4.8755E-10 3.4088E-10 - 2.5119E+03 1.0053E-08 5.8007E-09 3.0608E-10 2.4235E-10 - 2.8184E+03 6.7379E-09 3.8778E-09 1.9784E-10 1.7592E-10 - 3.1623E+03 4.6664E-09 2.6844E-09 1.4172E-10 1.0419E-10 - 3.5481E+03 3.0080E-09 1.7373E-09 9.1225E-11 6.8238E-11 - 3.9811E+03 1.9983E-09 1.1574E-09 6.1796E-11 4.5830E-11 - 4.4668E+03 1.3434E-09 7.6566E-10 4.2905E-11 3.1373E-11 - 5.0119E+03 8.9177E-10 5.1409E-10 2.7455E-11 1.9020E-11 - 5.6234E+03 5.8598E-10 3.3497E-10 1.7445E-11 1.2421E-11 - 6.3096E+03 3.9194E-10 2.2342E-10 1.1810E-11 8.4889E-12 - 7.0795E+03 2.5884E-10 1.4812E-10 7.6878E-12 5.8659E-12 - 7.9433E+03 1.6872E-10 9.5549E-11 4.8167E-12 3.4550E-12 - 8.9125E+03 1.1333E-10 6.2048E-11 3.2672E-12 2.2044E-12 - 1.0000E+04 7.5859E-11 4.0694E-11 2.2374E-12 1.5452E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.1887E+03 7.3010E+03 3.4752E+03 3.4622E+03 - 1.1220E-01 6.4053E+03 6.5100E+03 3.1169E+03 3.0798E+03 - 1.2589E-01 5.7059E+03 5.7870E+03 2.7586E+03 2.7146E+03 - 1.4125E-01 5.0445E+03 5.0930E+03 2.4417E+03 2.3692E+03 - 1.5849E-01 4.4112E+03 4.4543E+03 2.1486E+03 2.0537E+03 - 1.7783E-01 3.8349E+03 3.8600E+03 1.8635E+03 1.7742E+03 - 1.9953E-01 3.3018E+03 3.2972E+03 1.6105E+03 1.5124E+03 - 2.2387E-01 2.8052E+03 2.8025E+03 1.3834E+03 1.2818E+03 - 2.5119E-01 2.3600E+03 2.3500E+03 1.1720E+03 1.0765E+03 - 2.8184E-01 1.9642E+03 1.9545E+03 9.8339E+02 8.8803E+02 - 3.1623E-01 1.6277E+03 1.6228E+03 8.1619E+02 7.3033E+02 - 3.5481E-01 1.3355E+03 1.3253E+03 6.7293E+02 5.9655E+02 - 3.9811E-01 1.0781E+03 1.0746E+03 5.4934E+02 4.8645E+02 - 4.4668E-01 8.6861E+02 8.6568E+02 4.4278E+02 3.9163E+02 - 5.0119E-01 7.0300E+02 6.9048E+02 3.5567E+02 3.0931E+02 - 5.6234E-01 5.5276E+02 5.4403E+02 2.8321E+02 2.4277E+02 - 6.3096E-01 4.3291E+02 4.2461E+02 2.2383E+02 1.8862E+02 - 7.0795E-01 3.4054E+02 3.2927E+02 1.7563E+02 1.4627E+02 - 7.9433E-01 2.6398E+02 2.5323E+02 1.3616E+02 1.1227E+02 - 8.9125E-01 2.0333E+02 1.9375E+02 1.0385E+02 8.4685E+01 - 1.0000E+00 1.5518E+02 1.4836E+02 7.8891E+01 6.4068E+01 - 1.1220E+00 1.1859E+02 1.1284E+02 5.9410E+01 4.7863E+01 - 1.2589E+00 8.9240E+01 8.4614E+01 4.4232E+01 3.5685E+01 - 1.4125E+00 6.6838E+01 6.3009E+01 3.2876E+01 2.6159E+01 - 1.5849E+00 5.0484E+01 4.6733E+01 2.4331E+01 1.9144E+01 - 1.7783E+00 3.7739E+01 3.4437E+01 1.8044E+01 1.3861E+01 - 1.9953E+00 2.7647E+01 2.5412E+01 1.3192E+01 9.9794E+00 - 2.2387E+00 2.0358E+01 1.8663E+01 9.3512E+00 7.1494E+00 - 2.5119E+00 1.4960E+01 1.3483E+01 6.6537E+00 5.0123E+00 - 2.8184E+00 1.0948E+01 9.6903E+00 4.7357E+00 3.5591E+00 - 3.1623E+00 7.9612E+00 6.9779E+00 3.2950E+00 2.5332E+00 - 3.5481E+00 5.7625E+00 5.0071E+00 2.3233E+00 1.7639E+00 - 3.9811E+00 4.1751E+00 3.5949E+00 1.6211E+00 1.2147E+00 - 4.4668E+00 3.0167E+00 2.5733E+00 1.1186E+00 8.5219E-01 - 5.0119E+00 2.1526E+00 1.8316E+00 7.6789E-01 5.9047E-01 - 5.6234E+00 1.5436E+00 1.3035E+00 5.3033E-01 4.0117E-01 - 6.3096E+00 1.1234E+00 9.2750E-01 3.6448E-01 2.7220E-01 - 7.0795E+00 8.0918E-01 6.5684E-01 2.4957E-01 1.8434E-01 - 7.9433E+00 5.7477E-01 4.6938E-01 1.6610E-01 1.2555E-01 - 8.9125E+00 4.1348E-01 3.3758E-01 1.0977E-01 8.5343E-02 - 1.0000E+01 2.9138E-01 2.3555E-01 7.6467E-02 5.7416E-02 - 1.1220E+01 2.0747E-01 1.6634E-01 5.1486E-02 3.8521E-02 - 1.2589E+01 1.4786E-01 1.1792E-01 3.4289E-02 2.6013E-02 - 1.4125E+01 1.0603E-01 8.3273E-02 2.3245E-02 1.7683E-02 - 1.5849E+01 7.6436E-02 5.8969E-02 1.5555E-02 1.1689E-02 - 1.7783E+01 5.4626E-02 4.1671E-02 1.0298E-02 7.6360E-03 - 1.9953E+01 3.8350E-02 2.9293E-02 6.9307E-03 5.1994E-03 - 2.2387E+01 2.7107E-02 2.0465E-02 4.5212E-03 3.4871E-03 - 2.5119E+01 1.9444E-02 1.4478E-02 3.0698E-03 2.3782E-03 - 2.8184E+01 1.3934E-02 1.0424E-02 2.0381E-03 1.5045E-03 - 3.1623E+01 9.8276E-03 7.3747E-03 1.3323E-03 1.0407E-03 - 3.5481E+01 6.9856E-03 5.2120E-03 8.9435E-04 6.9363E-04 - 3.9811E+01 4.9635E-03 3.6798E-03 5.9719E-04 4.6300E-04 - 4.4668E+01 3.5062E-03 2.5833E-03 3.9515E-04 3.1083E-04 - 5.0119E+01 2.4844E-03 1.8164E-03 2.6308E-04 2.0769E-04 - 5.6234E+01 1.7623E-03 1.2750E-03 1.7212E-04 1.3853E-04 - 6.3096E+01 1.2419E-03 8.9464E-04 1.1492E-04 9.1013E-05 - 7.0795E+01 8.7114E-04 6.2785E-04 7.7459E-05 6.0175E-05 - 7.9433E+01 6.1062E-04 4.4143E-04 5.1220E-05 4.0878E-05 - 8.9125E+01 4.3075E-04 3.1048E-04 3.4394E-05 2.7058E-05 - 1.0000E+02 3.0496E-04 2.1513E-04 2.3088E-05 1.8696E-05 - 1.1220E+02 2.1378E-04 1.5015E-04 1.5288E-05 1.2565E-05 - 1.2589E+02 1.4966E-04 1.0509E-04 1.0280E-05 8.3737E-06 - 1.4125E+02 1.0498E-04 7.3045E-05 6.8775E-06 5.5447E-06 - 1.5849E+02 7.3681E-05 5.0737E-05 4.5905E-06 3.7239E-06 - 1.7783E+02 5.1570E-05 3.5131E-05 3.0770E-06 2.4973E-06 - 1.9953E+02 3.6095E-05 2.4455E-05 2.1083E-06 1.6485E-06 - 2.2387E+02 2.5170E-05 1.7083E-05 1.4464E-06 1.1343E-06 - 2.5119E+02 1.7420E-05 1.1800E-05 9.4666E-07 7.9058E-07 - 2.8184E+02 1.2230E-05 8.1492E-06 6.0972E-07 5.2195E-07 - 3.1623E+02 8.5959E-06 5.6836E-06 4.2898E-07 3.4801E-07 - 3.5481E+02 5.9502E-06 3.9016E-06 2.9228E-07 2.3342E-07 - 3.9811E+02 4.1363E-06 2.6916E-06 1.9492E-07 1.5646E-07 - 4.4668E+02 2.8891E-06 1.8642E-06 1.3273E-07 1.0547E-07 - 5.0119E+02 2.0061E-06 1.2806E-06 9.1894E-08 7.2081E-08 - 5.6234E+02 1.3952E-06 8.8479E-07 6.1068E-08 4.7793E-08 - 6.3096E+02 9.6030E-07 6.0668E-07 4.0975E-08 3.1756E-08 - 7.0795E+02 6.6138E-07 4.1726E-07 2.7701E-08 2.1619E-08 - 7.9433E+02 4.5896E-07 2.8661E-07 1.8537E-08 1.4669E-08 - 8.9125E+02 3.1757E-07 1.9602E-07 1.2260E-08 9.4520E-09 - 1.0000E+03 2.1949E-07 1.3388E-07 8.2590E-09 6.3347E-09 - 1.1220E+03 1.4938E-07 9.0329E-08 5.5717E-09 4.2807E-09 - 1.2589E+03 1.0256E-07 6.1255E-08 3.7339E-09 2.8295E-09 - 1.4125E+03 6.9794E-08 4.1909E-08 2.4475E-09 1.9103E-09 - 1.5849E+03 4.7351E-08 2.8683E-08 1.6507E-09 1.2336E-09 - 1.7783E+03 3.2283E-08 1.9296E-08 1.0267E-09 8.0446E-10 - 1.9953E+03 2.1931E-08 1.3006E-08 7.1908E-10 5.5358E-10 - 2.2387E+03 1.4799E-08 8.7306E-09 5.1077E-10 3.8182E-10 - 2.5119E+03 9.8960E-09 5.8162E-09 3.3836E-10 2.6260E-10 - 2.8184E+03 6.6442E-09 3.9298E-09 2.2507E-10 1.6904E-10 - 3.1623E+03 4.6118E-09 2.6690E-09 1.4393E-10 1.0499E-10 - 3.5481E+03 3.0132E-09 1.7214E-09 9.3704E-11 6.8176E-11 - 3.9811E+03 2.0243E-09 1.1492E-09 6.3290E-11 4.2155E-11 - 4.4668E+03 1.3434E-09 7.6351E-10 4.0420E-11 2.9335E-11 - 5.0119E+03 8.8873E-10 5.0337E-10 2.6003E-11 2.1002E-11 - 5.6234E+03 5.8431E-10 3.3315E-10 1.7022E-11 1.3845E-11 - 6.3096E+03 3.9115E-10 2.2397E-10 1.1901E-11 8.6616E-12 - 7.0795E+03 2.5731E-10 1.4770E-10 7.8104E-12 5.6771E-12 - 7.9433E+03 1.7383E-10 9.6988E-11 4.8064E-12 3.2249E-12 - 8.9125E+03 1.1624E-10 6.2745E-11 2.8169E-12 1.8209E-12 - 1.0000E+04 7.4484E-11 3.9588E-11 1.7262E-12 1.4512E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 6.7453E+03 6.8291E+03 3.2378E+03 3.2824E+03 - 1.1220E-01 6.0052E+03 6.0567E+03 2.8900E+03 2.9158E+03 - 1.2589E-01 5.3299E+03 5.3489E+03 2.5661E+03 2.5572E+03 - 1.4125E-01 4.7003E+03 4.7221E+03 2.2544E+03 2.2349E+03 - 1.5849E-01 4.1060E+03 4.1301E+03 1.9778E+03 1.9237E+03 - 1.7783E-01 3.5554E+03 3.5584E+03 1.7178E+03 1.6485E+03 - 1.9953E-01 3.0534E+03 3.0413E+03 1.4789E+03 1.4180E+03 - 2.2387E-01 2.5895E+03 2.5781E+03 1.2630E+03 1.1953E+03 - 2.5119E-01 2.1756E+03 2.1643E+03 1.0711E+03 9.9721E+02 - 2.8184E-01 1.8195E+03 1.7985E+03 9.0368E+02 8.2950E+02 - 3.1623E-01 1.5074E+03 1.4861E+03 7.4850E+02 6.8002E+02 - 3.5481E-01 1.2365E+03 1.2186E+03 6.1492E+02 5.5485E+02 - 3.9811E-01 1.0055E+03 9.9077E+02 5.0670E+02 4.4826E+02 - 4.4668E-01 8.0702E+02 8.0128E+02 4.1137E+02 3.6466E+02 - 5.0119E-01 6.4492E+02 6.4227E+02 3.3077E+02 2.9121E+02 - 5.6234E-01 5.1770E+02 5.0618E+02 2.6349E+02 2.2732E+02 - 6.3096E-01 4.0926E+02 3.9518E+02 2.0679E+02 1.7879E+02 - 7.0795E-01 3.2081E+02 3.1074E+02 1.6345E+02 1.3879E+02 - 7.9433E-01 2.4974E+02 2.4408E+02 1.2765E+02 1.0684E+02 - 8.9125E-01 1.9333E+02 1.8691E+02 9.8665E+01 8.0976E+01 - 1.0000E+00 1.4850E+02 1.4325E+02 7.4760E+01 6.1370E+01 - 1.1220E+00 1.1350E+02 1.0871E+02 5.6902E+01 4.5930E+01 - 1.2589E+00 8.7191E+01 8.2055E+01 4.3024E+01 3.4326E+01 - 1.4125E+00 6.6112E+01 6.1668E+01 3.1955E+01 2.5682E+01 - 1.5849E+00 4.9550E+01 4.6031E+01 2.3496E+01 1.8833E+01 - 1.7783E+00 3.7099E+01 3.4085E+01 1.7284E+01 1.3621E+01 - 1.9953E+00 2.7446E+01 2.4934E+01 1.2655E+01 9.9844E+00 - 2.2387E+00 2.0236E+01 1.8134E+01 9.0970E+00 7.1343E+00 - 2.5119E+00 1.4959E+01 1.3132E+01 6.5493E+00 4.9793E+00 - 2.8184E+00 1.0942E+01 9.6011E+00 4.6574E+00 3.5417E+00 - 3.1623E+00 7.8915E+00 6.9697E+00 3.2824E+00 2.5089E+00 - 3.5481E+00 5.6805E+00 5.0133E+00 2.3214E+00 1.7719E+00 - 3.9811E+00 4.1227E+00 3.6082E+00 1.6155E+00 1.2337E+00 - 4.4668E+00 3.0177E+00 2.5919E+00 1.1190E+00 8.5917E-01 - 5.0119E+00 2.1957E+00 1.8299E+00 7.7305E-01 5.8848E-01 - 5.6234E+00 1.5681E+00 1.2923E+00 5.3174E-01 3.9817E-01 - 6.3096E+00 1.1139E+00 9.2746E-01 3.6673E-01 2.7303E-01 - 7.0795E+00 8.0440E-01 6.6240E-01 2.5299E-01 1.8450E-01 - 7.9433E+00 5.7695E-01 4.7256E-01 1.7267E-01 1.2495E-01 - 8.9125E+00 4.1284E-01 3.3712E-01 1.1481E-01 8.5421E-02 - 1.0000E+01 2.9330E-01 2.3695E-01 7.6794E-02 5.8161E-02 - 1.1220E+01 2.0937E-01 1.6853E-01 5.1117E-02 3.8680E-02 - 1.2589E+01 1.4924E-01 1.1870E-01 3.4521E-02 2.6178E-02 - 1.4125E+01 1.0596E-01 8.3772E-02 2.3421E-02 1.7499E-02 - 1.5849E+01 7.5342E-02 5.9357E-02 1.5550E-02 1.1506E-02 - 1.7783E+01 5.3345E-02 4.2030E-02 1.0438E-02 7.6476E-03 - 1.9953E+01 3.8116E-02 2.9680E-02 6.9122E-03 5.0794E-03 - 2.2387E+01 2.7625E-02 2.0908E-02 4.5426E-03 3.3447E-03 - 2.5119E+01 1.9533E-02 1.4812E-02 3.0318E-03 2.2557E-03 - 2.8184E+01 1.3934E-02 1.0520E-02 2.0870E-03 1.5295E-03 - 3.1623E+01 9.8560E-03 7.4254E-03 1.3346E-03 1.0391E-03 - 3.5481E+01 7.0040E-03 5.2340E-03 8.8141E-04 6.9957E-04 - 3.9811E+01 4.9705E-03 3.6782E-03 5.8966E-04 4.6344E-04 - 4.4668E+01 3.5106E-03 2.5847E-03 3.9670E-04 3.1026E-04 - 5.0119E+01 2.4815E-03 1.8226E-03 2.6397E-04 2.0896E-04 - 5.6234E+01 1.7657E-03 1.2854E-03 1.7374E-04 1.3914E-04 - 6.3096E+01 1.2446E-03 9.0519E-04 1.1505E-04 9.2947E-05 - 7.0795E+01 8.7653E-04 6.3224E-04 7.6823E-05 6.1782E-05 - 7.9433E+01 6.1885E-04 4.4333E-04 5.0725E-05 4.1088E-05 - 8.9125E+01 4.3524E-04 3.1202E-04 3.4259E-05 2.7800E-05 - 1.0000E+02 3.0525E-04 2.1660E-04 2.2782E-05 1.8724E-05 - 1.1220E+02 2.1424E-04 1.5097E-04 1.5245E-05 1.2413E-05 - 1.2589E+02 1.5019E-04 1.0500E-04 1.0255E-05 8.2194E-06 - 1.4125E+02 1.0542E-04 7.3042E-05 6.9806E-06 5.5031E-06 - 1.5849E+02 7.3862E-05 5.0481E-05 4.6211E-06 3.7112E-06 - 1.7783E+02 5.1631E-05 3.5087E-05 3.0329E-06 2.5145E-06 - 1.9953E+02 3.6061E-05 2.4540E-05 2.0162E-06 1.6897E-06 - 2.2387E+02 2.5152E-05 1.6992E-05 1.3611E-06 1.1198E-06 - 2.5119E+02 1.7512E-05 1.1765E-05 9.0921E-07 7.5359E-07 - 2.8184E+02 1.2242E-05 8.1810E-06 6.2479E-07 5.1867E-07 - 3.1623E+02 8.6080E-06 5.6815E-06 4.2716E-07 3.5271E-07 - 3.5481E+02 5.9797E-06 3.9387E-06 2.8578E-07 2.3648E-07 - 3.9811E+02 4.1574E-06 2.7083E-06 1.9545E-07 1.5650E-07 - 4.4668E+02 2.8968E-06 1.8486E-06 1.3544E-07 1.0739E-07 - 5.0119E+02 2.0034E-06 1.2827E-06 9.0808E-08 7.3404E-08 - 5.6234E+02 1.4050E-06 8.9407E-07 5.9296E-08 4.8060E-08 - 6.3096E+02 9.6498E-07 6.1045E-07 3.9716E-08 3.2156E-08 - 7.0795E+02 6.6778E-07 4.1731E-07 2.7185E-08 2.1570E-08 - 7.9433E+02 4.6009E-07 2.8554E-07 1.8708E-08 1.4540E-08 - 8.9125E+02 3.1508E-07 1.9497E-07 1.2391E-08 9.6468E-09 - 1.0000E+03 2.1803E-07 1.3445E-07 8.2172E-09 6.5489E-09 - 1.1220E+03 1.5048E-07 9.1781E-08 5.6155E-09 4.1406E-09 - 1.2589E+03 1.0285E-07 6.2410E-08 3.8671E-09 2.7639E-09 - 1.4125E+03 6.9680E-08 4.1957E-08 2.5603E-09 2.0021E-09 - 1.5849E+03 4.7364E-08 2.8548E-08 1.6593E-09 1.3825E-09 - 1.7783E+03 3.2053E-08 1.9134E-08 1.0998E-09 8.7171E-10 - 1.9953E+03 2.1862E-08 1.2910E-08 7.5226E-10 5.4322E-10 - 2.2387E+03 1.4750E-08 8.7430E-09 4.8225E-10 3.8162E-10 - 2.5119E+03 9.9076E-09 5.8988E-09 3.1344E-10 2.5676E-10 - 2.8184E+03 6.6734E-09 3.9288E-09 2.0420E-10 1.5446E-10 - 3.1623E+03 4.6331E-09 2.6522E-09 1.4062E-10 1.0350E-10 - 3.5481E+03 3.0236E-09 1.7170E-09 9.5384E-11 6.9914E-11 - 3.9811E+03 2.0244E-09 1.1397E-09 6.3058E-11 4.3373E-11 - 4.4668E+03 1.3420E-09 7.6764E-10 4.1303E-11 2.9281E-11 - 5.0119E+03 8.8821E-10 5.1223E-10 2.6443E-11 2.0910E-11 - 5.6234E+03 5.9219E-10 3.3314E-10 1.7717E-11 1.3386E-11 - 6.3096E+03 3.9150E-10 2.1885E-10 1.1730E-11 8.6392E-12 - 7.0795E+03 2.5929E-10 1.4353E-10 7.4118E-12 5.6151E-12 - 7.9433E+03 1.7139E-10 9.3967E-11 5.0641E-12 3.3661E-12 - 8.9125E+03 1.1221E-10 6.2443E-11 3.3874E-12 2.2137E-12 - 1.0000E+04 7.4862E-11 4.2223E-11 2.2134E-12 1.4927E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.9792E+03 5.0260E+03 2.3377E+03 2.4386E+03 - 1.1220E-01 4.4115E+03 4.4520E+03 2.1019E+03 2.1499E+03 - 1.2589E-01 3.9173E+03 3.9221E+03 1.8587E+03 1.8919E+03 - 1.4125E-01 3.4581E+03 3.4473E+03 1.6330E+03 1.6541E+03 - 1.5849E-01 3.0143E+03 2.9923E+03 1.4263E+03 1.4336E+03 - 1.7783E-01 2.6122E+03 2.5731E+03 1.2350E+03 1.2320E+03 - 1.9953E-01 2.2368E+03 2.2121E+03 1.0588E+03 1.0422E+03 - 2.2387E-01 1.9008E+03 1.8794E+03 9.0971E+02 8.8125E+02 - 2.5119E-01 1.6050E+03 1.5825E+03 7.7955E+02 7.4333E+02 - 2.8184E-01 1.3423E+03 1.3286E+03 6.5364E+02 6.2046E+02 - 3.1623E-01 1.1177E+03 1.1043E+03 5.4123E+02 5.1276E+02 - 3.5481E-01 9.2653E+02 9.1009E+02 4.5106E+02 4.2174E+02 - 3.9811E-01 7.5805E+02 7.4525E+02 3.7204E+02 3.4574E+02 - 4.4668E-01 6.1688E+02 6.0255E+02 3.0705E+02 2.8136E+02 - 5.0119E-01 5.0558E+02 4.8945E+02 2.4851E+02 2.2803E+02 - 5.6234E-01 4.0689E+02 3.9541E+02 2.0010E+02 1.8340E+02 - 6.3096E-01 3.2348E+02 3.1562E+02 1.6052E+02 1.4428E+02 - 7.0795E-01 2.5979E+02 2.5107E+02 1.2542E+02 1.1202E+02 - 7.9433E-01 2.0444E+02 1.9656E+02 9.8852E+01 8.8240E+01 - 8.9125E-01 1.5999E+02 1.5447E+02 7.8344E+01 6.8633E+01 - 1.0000E+00 1.2641E+02 1.2105E+02 6.1148E+01 5.2362E+01 - 1.1220E+00 9.7899E+01 9.3783E+01 4.7008E+01 4.0076E+01 - 1.2589E+00 7.5456E+01 7.1985E+01 3.6120E+01 3.0523E+01 - 1.4125E+00 5.8303E+01 5.5140E+01 2.7463E+01 2.3016E+01 - 1.5849E+00 4.4743E+01 4.1752E+01 2.0828E+01 1.7122E+01 - 1.7783E+00 3.3922E+01 3.1291E+01 1.5522E+01 1.2501E+01 - 1.9953E+00 2.5586E+01 2.3230E+01 1.1494E+01 9.1948E+00 - 2.2387E+00 1.9255E+01 1.7163E+01 8.3921E+00 6.8499E+00 - 2.5119E+00 1.4171E+01 1.2742E+01 6.0417E+00 4.9490E+00 - 2.8184E+00 1.0390E+01 9.3267E+00 4.3608E+00 3.4332E+00 - 3.1623E+00 7.6669E+00 6.7639E+00 3.1470E+00 2.4381E+00 - 3.5481E+00 5.6384E+00 4.9134E+00 2.2317E+00 1.7132E+00 - 3.9811E+00 4.1031E+00 3.5393E+00 1.5752E+00 1.2118E+00 - 4.4668E+00 2.9749E+00 2.5368E+00 1.0992E+00 8.4726E-01 - 5.0119E+00 2.1394E+00 1.8113E+00 7.5797E-01 5.7990E-01 - 5.6234E+00 1.5417E+00 1.2963E+00 5.1628E-01 3.9620E-01 - 6.3096E+00 1.1140E+00 9.2939E-01 3.5599E-01 2.7397E-01 - 7.0795E+00 7.9445E-01 6.5731E-01 2.4615E-01 1.8440E-01 - 7.9433E+00 5.7654E-01 4.6705E-01 1.7273E-01 1.2524E-01 - 8.9125E+00 4.0860E-01 3.3298E-01 1.1520E-01 8.5749E-02 - 1.0000E+01 2.9254E-01 2.3674E-01 7.6423E-02 5.7797E-02 - 1.1220E+01 2.0876E-01 1.6686E-01 5.1868E-02 3.8740E-02 - 1.2589E+01 1.4910E-01 1.1633E-01 3.4768E-02 2.5726E-02 - 1.4125E+01 1.0654E-01 8.2847E-02 2.3343E-02 1.7192E-02 - 1.5849E+01 7.6006E-02 5.9496E-02 1.5598E-02 1.1772E-02 - 1.7783E+01 5.3755E-02 4.2018E-02 1.0338E-02 7.9645E-03 - 1.9953E+01 3.8170E-02 2.9693E-02 6.8729E-03 5.2921E-03 - 2.2387E+01 2.7290E-02 2.0950E-02 4.6191E-03 3.4598E-03 - 2.5119E+01 1.9678E-02 1.4862E-02 3.0964E-03 2.3473E-03 - 2.8184E+01 1.3952E-02 1.0410E-02 1.9781E-03 1.5788E-03 - 3.1623E+01 9.8568E-03 7.4033E-03 1.3488E-03 1.0515E-03 - 3.5481E+01 6.9870E-03 5.2248E-03 8.8944E-04 6.9843E-04 - 3.9811E+01 4.9596E-03 3.6929E-03 5.9285E-04 4.6608E-04 - 4.4668E+01 3.5152E-03 2.5868E-03 3.9727E-04 3.1181E-04 - 5.0119E+01 2.4832E-03 1.8163E-03 2.6370E-04 2.0789E-04 - 5.6234E+01 1.7630E-03 1.2767E-03 1.7274E-04 1.3769E-04 - 6.3096E+01 1.2439E-03 8.9568E-04 1.1513E-04 9.1857E-05 - 7.0795E+01 8.7466E-04 6.3212E-04 7.7258E-05 6.1403E-05 - 7.9433E+01 6.1808E-04 4.4255E-04 5.1837E-05 4.1459E-05 - 8.9125E+01 4.3516E-04 3.0713E-04 3.4444E-05 2.7922E-05 - 1.0000E+02 3.0564E-04 2.1533E-04 2.2854E-05 1.8392E-05 - 1.1220E+02 2.1429E-04 1.5046E-04 1.5355E-05 1.2241E-05 - 1.2589E+02 1.5028E-04 1.0523E-04 1.0292E-05 8.2183E-06 - 1.4125E+02 1.0538E-04 7.3197E-05 6.7694E-06 5.4331E-06 - 1.5849E+02 7.3661E-05 5.0984E-05 4.5505E-06 3.6644E-06 - 1.7783E+02 5.1672E-05 3.5489E-05 3.0798E-06 2.5589E-06 - 1.9953E+02 3.6154E-05 2.4494E-05 2.0704E-06 1.7145E-06 - 2.2387E+02 2.5371E-05 1.7002E-05 1.4097E-06 1.1517E-06 - 2.5119E+02 1.7727E-05 1.1790E-05 9.4792E-07 7.7460E-07 - 2.8184E+02 1.2359E-05 8.1651E-06 6.3383E-07 5.2055E-07 - 3.1623E+02 8.5784E-06 5.6775E-06 4.3184E-07 3.4190E-07 - 3.5481E+02 5.9661E-06 3.9094E-06 2.8976E-07 2.3198E-07 - 3.9811E+02 4.1548E-06 2.7017E-06 1.9528E-07 1.5455E-07 - 4.4668E+02 2.8776E-06 1.8547E-06 1.3359E-07 1.0494E-07 - 5.0119E+02 2.0014E-06 1.2846E-06 8.8174E-08 7.1036E-08 - 5.6234E+02 1.3928E-06 8.9535E-07 5.9765E-08 4.7410E-08 - 6.3096E+02 9.5961E-07 6.1275E-07 4.0819E-08 3.1265E-08 - 7.0795E+02 6.6276E-07 4.2078E-07 2.6891E-08 2.1098E-08 - 7.9433E+02 4.5767E-07 2.8735E-07 1.8203E-08 1.4107E-08 - 8.9125E+02 3.1673E-07 1.9510E-07 1.2511E-08 9.1721E-09 - 1.0000E+03 2.2047E-07 1.3501E-07 8.2699E-09 6.3563E-09 - 1.1220E+03 1.4970E-07 9.1336E-08 5.4753E-09 4.2195E-09 - 1.2589E+03 1.0219E-07 6.2375E-08 3.7417E-09 2.9325E-09 - 1.4125E+03 6.9418E-08 4.2087E-08 2.4705E-09 1.9070E-09 - 1.5849E+03 4.7431E-08 2.8417E-08 1.5900E-09 1.2410E-09 - 1.7783E+03 3.2400E-08 1.9139E-08 1.1037E-09 8.4213E-10 - 1.9953E+03 2.2087E-08 1.2878E-08 7.5903E-10 5.6586E-10 - 2.2387E+03 1.4932E-08 8.6691E-09 4.9944E-10 3.7341E-10 - 2.5119E+03 1.0042E-08 5.7738E-09 3.4556E-10 2.4751E-10 - 2.8184E+03 6.7529E-09 3.9241E-09 2.2122E-10 1.5692E-10 - 3.1623E+03 4.6526E-09 2.6864E-09 1.3936E-10 1.0544E-10 - 3.5481E+03 3.0315E-09 1.7318E-09 9.2769E-11 7.0289E-11 - 3.9811E+03 2.0269E-09 1.1459E-09 6.0985E-11 4.3572E-11 - 4.4668E+03 1.3327E-09 7.6778E-10 4.2308E-11 3.0193E-11 - 5.0119E+03 8.9025E-10 5.1193E-10 2.8410E-11 2.2030E-11 - 5.6234E+03 5.9156E-10 3.3658E-10 1.7942E-11 1.3640E-11 - 6.3096E+03 3.9155E-10 2.2138E-10 1.2186E-11 8.1733E-12 - 7.0795E+03 2.5908E-10 1.4303E-10 7.6463E-12 5.0805E-12 - 7.9433E+03 1.7134E-10 9.4880E-11 4.7668E-12 3.4947E-12 - 8.9125E+03 1.1350E-10 6.2689E-11 2.9273E-12 2.2746E-12 - 1.0000E+04 7.4495E-11 4.0138E-11 2.0210E-12 1.4025E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3402E+03 4.4046E+03 2.0843E+03 2.1403E+03 - 1.1220E-01 3.8683E+03 3.9384E+03 1.8733E+03 1.9148E+03 - 1.2589E-01 3.4321E+03 3.5056E+03 1.6702E+03 1.6804E+03 - 1.4125E-01 3.0371E+03 3.0941E+03 1.4724E+03 1.4564E+03 - 1.5849E-01 2.6819E+03 2.6987E+03 1.2842E+03 1.2784E+03 - 1.7783E-01 2.3359E+03 2.3328E+03 1.1105E+03 1.1061E+03 - 1.9953E-01 2.0138E+03 2.0078E+03 9.6583E+02 9.4549E+02 - 2.2387E-01 1.7241E+03 1.7103E+03 8.3184E+02 8.0067E+02 - 2.5119E-01 1.4593E+03 1.4430E+03 7.1237E+02 6.8005E+02 - 2.8184E-01 1.2259E+03 1.2107E+03 6.0651E+02 5.7386E+02 - 3.1623E-01 1.0274E+03 1.0164E+03 5.0790E+02 4.7488E+02 - 3.5481E-01 8.5569E+02 8.4649E+02 4.2141E+02 3.8931E+02 - 3.9811E-01 7.0304E+02 6.9734E+02 3.4711E+02 3.1947E+02 - 4.4668E-01 5.7567E+02 5.7128E+02 2.8303E+02 2.6316E+02 - 5.0119E-01 4.7061E+02 4.6454E+02 2.3166E+02 2.1371E+02 - 5.6234E-01 3.7880E+02 3.7420E+02 1.9022E+02 1.6989E+02 - 6.3096E-01 3.0496E+02 3.0026E+02 1.5205E+02 1.3432E+02 - 7.0795E-01 2.4477E+02 2.3747E+02 1.2034E+02 1.0680E+02 - 7.9433E-01 1.9313E+02 1.8586E+02 9.5635E+01 8.2652E+01 - 8.9125E-01 1.5315E+02 1.4724E+02 7.4864E+01 6.3943E+01 - 1.0000E+00 1.2148E+02 1.1578E+02 5.7826E+01 5.0065E+01 - 1.1220E+00 9.4538E+01 9.0103E+01 4.5204E+01 3.8504E+01 - 1.2589E+00 7.3301E+01 7.0093E+01 3.4827E+01 2.9154E+01 - 1.4125E+00 5.6618E+01 5.3307E+01 2.6358E+01 2.2175E+01 - 1.5849E+00 4.3065E+01 4.0309E+01 1.9945E+01 1.6880E+01 - 1.7783E+00 3.2924E+01 3.0604E+01 1.5085E+01 1.2378E+01 - 1.9953E+00 2.5083E+01 2.2866E+01 1.1265E+01 8.9794E+00 - 2.2387E+00 1.8713E+01 1.6855E+01 8.3529E+00 6.5599E+00 - 2.5119E+00 1.3800E+01 1.2441E+01 6.0038E+00 4.8379E+00 - 2.8184E+00 1.0265E+01 9.1052E+00 4.2961E+00 3.4642E+00 - 3.1623E+00 7.6357E+00 6.7509E+00 3.1093E+00 2.4343E+00 - 3.5481E+00 5.6024E+00 4.8979E+00 2.2118E+00 1.7058E+00 - 3.9811E+00 4.0775E+00 3.5317E+00 1.5518E+00 1.2036E+00 - 4.4668E+00 2.9695E+00 2.5307E+00 1.0927E+00 8.4157E-01 - 5.0119E+00 2.1544E+00 1.8160E+00 7.6397E-01 5.7701E-01 - 5.6234E+00 1.5624E+00 1.2987E+00 5.2490E-01 3.9911E-01 - 6.3096E+00 1.1272E+00 9.2662E-01 3.5924E-01 2.7150E-01 - 7.0795E+00 8.0415E-01 6.6130E-01 2.4791E-01 1.8179E-01 - 7.9433E+00 5.6646E-01 4.6779E-01 1.7041E-01 1.2289E-01 - 8.9125E+00 4.0575E-01 3.3537E-01 1.1604E-01 8.5152E-02 - 1.0000E+01 2.9014E-01 2.3564E-01 7.6113E-02 5.7567E-02 - 1.1220E+01 2.0684E-01 1.6682E-01 5.0944E-02 3.8454E-02 - 1.2589E+01 1.4858E-01 1.1747E-01 3.4531E-02 2.6085E-02 - 1.4125E+01 1.0614E-01 8.2808E-02 2.3144E-02 1.7687E-02 - 1.5849E+01 7.5528E-02 5.9269E-02 1.5546E-02 1.1601E-02 - 1.7783E+01 5.4180E-02 4.1988E-02 1.0272E-02 7.6610E-03 - 1.9953E+01 3.8584E-02 2.9538E-02 6.8426E-03 5.2619E-03 - 2.2387E+01 2.7156E-02 2.0849E-02 4.6049E-03 3.5474E-03 - 2.5119E+01 1.9277E-02 1.4735E-02 3.0159E-03 2.3575E-03 - 2.8184E+01 1.3845E-02 1.0359E-02 1.9886E-03 1.4938E-03 - 3.1623E+01 9.8440E-03 7.3878E-03 1.3499E-03 1.0451E-03 - 3.5481E+01 6.9976E-03 5.2066E-03 8.9142E-04 6.9509E-04 - 3.9811E+01 4.9515E-03 3.6959E-03 5.9123E-04 4.6505E-04 - 4.4668E+01 3.5064E-03 2.6148E-03 3.9454E-04 3.1311E-04 - 5.0119E+01 2.4896E-03 1.8326E-03 2.6004E-04 2.0587E-04 - 5.6234E+01 1.7643E-03 1.2805E-03 1.7033E-04 1.3705E-04 - 6.3096E+01 1.2421E-03 9.0152E-04 1.1386E-04 9.2458E-05 - 7.0795E+01 8.7600E-04 6.3471E-04 7.7143E-05 6.1939E-05 - 7.9433E+01 6.2028E-04 4.4049E-04 5.1541E-05 4.1577E-05 - 8.9125E+01 4.3482E-04 3.0854E-04 3.4260E-05 2.7646E-05 - 1.0000E+02 3.0540E-04 2.1628E-04 2.2837E-05 1.8266E-05 - 1.1220E+02 2.1446E-04 1.5078E-04 1.5341E-05 1.2239E-05 - 1.2589E+02 1.5058E-04 1.0503E-04 1.0186E-05 8.2717E-06 - 1.4125E+02 1.0568E-04 7.3341E-05 6.8475E-06 5.6215E-06 - 1.5849E+02 7.4081E-05 5.1163E-05 4.5963E-06 3.7806E-06 - 1.7783E+02 5.1580E-05 3.5711E-05 3.0746E-06 2.5494E-06 - 1.9953E+02 3.6069E-05 2.4595E-05 2.1179E-06 1.7119E-06 - 2.2387E+02 2.5334E-05 1.6866E-05 1.4222E-06 1.1275E-06 - 2.5119E+02 1.7657E-05 1.1652E-05 9.5202E-07 7.5924E-07 - 2.8184E+02 1.2336E-05 8.1683E-06 6.3517E-07 5.0761E-07 - 3.1623E+02 8.5802E-06 5.6789E-06 4.2532E-07 3.4465E-07 - 3.5481E+02 5.9556E-06 3.9185E-06 2.8838E-07 2.3791E-07 - 3.9811E+02 4.1578E-06 2.7093E-06 1.9497E-07 1.5875E-07 - 4.4668E+02 2.8977E-06 1.8699E-06 1.3145E-07 1.0602E-07 - 5.0119E+02 2.0184E-06 1.2957E-06 8.8515E-08 7.2102E-08 - 5.6234E+02 1.3982E-06 8.9089E-07 6.0053E-08 4.7878E-08 - 6.3096E+02 9.6276E-07 6.1128E-07 4.0501E-08 3.2076E-08 - 7.0795E+02 6.6718E-07 4.1625E-07 2.6443E-08 2.1315E-08 - 7.9433E+02 4.6181E-07 2.8267E-07 1.7527E-08 1.3807E-08 - 8.9125E+02 3.1807E-07 1.9431E-07 1.2223E-08 9.0845E-09 - 1.0000E+03 2.1997E-07 1.3392E-07 8.3111E-09 6.1860E-09 - 1.1220E+03 1.5018E-07 9.1018E-08 5.6795E-09 4.1266E-09 - 1.2589E+03 1.0202E-07 6.2110E-08 3.7183E-09 2.7687E-09 - 1.4125E+03 6.9577E-08 4.2056E-08 2.4866E-09 1.8247E-09 - 1.5849E+03 4.7655E-08 2.8172E-08 1.6547E-09 1.2663E-09 - 1.7783E+03 3.2357E-08 1.9158E-08 1.1053E-09 8.8962E-10 - 1.9953E+03 2.1793E-08 1.3004E-08 7.0392E-10 5.4160E-10 - 2.2387E+03 1.4821E-08 8.7558E-09 4.9122E-10 3.6573E-10 - 2.5119E+03 9.9776E-09 5.8504E-09 3.2697E-10 2.2970E-10 - 2.8184E+03 6.6836E-09 3.9233E-09 2.1109E-10 1.4729E-10 - 3.1623E+03 4.6354E-09 2.6600E-09 1.4364E-10 1.0738E-10 - 3.5481E+03 3.0044E-09 1.7223E-09 9.7511E-11 7.0182E-11 - 3.9811E+03 1.9893E-09 1.1605E-09 6.1788E-11 4.8308E-11 - 4.4668E+03 1.3401E-09 7.7353E-10 3.8988E-11 3.0021E-11 - 5.0119E+03 8.8473E-10 5.0374E-10 2.7093E-11 1.8266E-11 - 5.6234E+03 5.8312E-10 3.3001E-10 1.8740E-11 1.3180E-11 - 6.3096E+03 3.9187E-10 2.2212E-10 1.1988E-11 8.2943E-12 - 7.0795E+03 2.6227E-10 1.4654E-10 7.3818E-12 5.4007E-12 - 7.9433E+03 1.7381E-10 9.6101E-11 4.9009E-12 3.5154E-12 - 8.9125E+03 1.1567E-10 6.2111E-11 3.5378E-12 2.3718E-12 - 1.0000E+04 7.5565E-11 4.1048E-11 2.2126E-12 1.3597E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3435E+03 4.5002E+03 2.1359E+03 2.1288E+03 - 1.1220E-01 3.9413E+03 4.0383E+03 1.9338E+03 1.9184E+03 - 1.2589E-01 3.5544E+03 3.5932E+03 1.7354E+03 1.7070E+03 - 1.4125E-01 3.1604E+03 3.1878E+03 1.5405E+03 1.5016E+03 - 1.5849E-01 2.7912E+03 2.8333E+03 1.3693E+03 1.3045E+03 - 1.7783E-01 2.4460E+03 2.4806E+03 1.2088E+03 1.1290E+03 - 1.9953E-01 2.1183E+03 2.1550E+03 1.0497E+03 9.8360E+02 - 2.2387E-01 1.8225E+03 1.8527E+03 9.0581E+02 8.3844E+02 - 2.5119E-01 1.5454E+03 1.5737E+03 7.7453E+02 7.1286E+02 - 2.8184E-01 1.3081E+03 1.3273E+03 6.5843E+02 6.0867E+02 - 3.1623E-01 1.1058E+03 1.1071E+03 5.5528E+02 5.0971E+02 - 3.5481E-01 9.1928E+02 9.1740E+02 4.6045E+02 4.2228E+02 - 3.9811E-01 7.6333E+02 7.5704E+02 3.8163E+02 3.4544E+02 - 4.4668E-01 6.2600E+02 6.2159E+02 3.1403E+02 2.7964E+02 - 5.0119E-01 5.0518E+02 5.0287E+02 2.5625E+02 2.2684E+02 - 5.6234E-01 4.0892E+02 4.0534E+02 2.0573E+02 1.8183E+02 - 6.3096E-01 3.3238E+02 3.2742E+02 1.6459E+02 1.4376E+02 - 7.0795E-01 2.6701E+02 2.5895E+02 1.3187E+02 1.1447E+02 - 7.9433E-01 2.1048E+02 2.0538E+02 1.0284E+02 9.0295E+01 - 8.9125E-01 1.6496E+02 1.6205E+02 8.1257E+01 6.9561E+01 - 1.0000E+00 1.2937E+02 1.2417E+02 6.3490E+01 5.3906E+01 - 1.1220E+00 1.0083E+02 9.6178E+01 4.9012E+01 4.1325E+01 - 1.2589E+00 7.8442E+01 7.3983E+01 3.7613E+01 3.1038E+01 - 1.4125E+00 6.0363E+01 5.6576E+01 2.8296E+01 2.3076E+01 - 1.5849E+00 4.5713E+01 4.2947E+01 2.1090E+01 1.7345E+01 - 1.7783E+00 3.4310E+01 3.2276E+01 1.5614E+01 1.2957E+01 - 1.9953E+00 2.5852E+01 2.3823E+01 1.1602E+01 9.4642E+00 - 2.2387E+00 1.9329E+01 1.7468E+01 8.6106E+00 6.7351E+00 - 2.5119E+00 1.4243E+01 1.2778E+01 6.2280E+00 4.7998E+00 - 2.8184E+00 1.0486E+01 9.2509E+00 4.4551E+00 3.4175E+00 - 3.1623E+00 7.7213E+00 6.8190E+00 3.1859E+00 2.4557E+00 - 3.5481E+00 5.6592E+00 4.9355E+00 2.2570E+00 1.7415E+00 - 3.9811E+00 4.1326E+00 3.5410E+00 1.5762E+00 1.2269E+00 - 4.4668E+00 2.9869E+00 2.5392E+00 1.1024E+00 8.5324E-01 - 5.0119E+00 2.1578E+00 1.8162E+00 7.7191E-01 5.8794E-01 - 5.6234E+00 1.5628E+00 1.2946E+00 5.2745E-01 4.0116E-01 - 6.3096E+00 1.1272E+00 9.2399E-01 3.6103E-01 2.7598E-01 - 7.0795E+00 8.0478E-01 6.6452E-01 2.4638E-01 1.8884E-01 - 7.9433E+00 5.7620E-01 4.7462E-01 1.6578E-01 1.2468E-01 - 8.9125E+00 4.1681E-01 3.3451E-01 1.1169E-01 8.3944E-02 - 1.0000E+01 2.9372E-01 2.3671E-01 7.6712E-02 5.6826E-02 - 1.1220E+01 2.1045E-01 1.6825E-01 5.1638E-02 3.8322E-02 - 1.2589E+01 1.4930E-01 1.1847E-01 3.4292E-02 2.6275E-02 - 1.4125E+01 1.0652E-01 8.3486E-02 2.3246E-02 1.7753E-02 - 1.5849E+01 7.6224E-02 5.9760E-02 1.5788E-02 1.1736E-02 - 1.7783E+01 5.4164E-02 4.2532E-02 1.0584E-02 7.6945E-03 - 1.9953E+01 3.8852E-02 3.0203E-02 6.8884E-03 5.3503E-03 - 2.2387E+01 2.7816E-02 2.1218E-02 4.6094E-03 3.7519E-03 - 2.5119E+01 1.9676E-02 1.4964E-02 3.0814E-03 2.4646E-03 - 2.8184E+01 1.3794E-02 1.0517E-02 1.9518E-03 1.5325E-03 - 3.1623E+01 9.7879E-03 7.3832E-03 1.3285E-03 1.0475E-03 - 3.5481E+01 6.9453E-03 5.2125E-03 8.8489E-04 6.9635E-04 - 3.9811E+01 4.9301E-03 3.6855E-03 5.9375E-04 4.6421E-04 - 4.4668E+01 3.5006E-03 2.5916E-03 3.9516E-04 3.1212E-04 - 5.0119E+01 2.4789E-03 1.8310E-03 2.6081E-04 2.0729E-04 - 5.6234E+01 1.7555E-03 1.2867E-03 1.7346E-04 1.3695E-04 - 6.3096E+01 1.2441E-03 8.9594E-04 1.1439E-04 9.0605E-05 - 7.0795E+01 8.7546E-04 6.2959E-04 7.6588E-05 6.1099E-05 - 7.9433E+01 6.1069E-04 4.4233E-04 5.2045E-05 4.1530E-05 - 8.9125E+01 4.2953E-04 3.0936E-04 3.4708E-05 2.7757E-05 - 1.0000E+02 3.0436E-04 2.1714E-04 2.3123E-05 1.8468E-05 - 1.1220E+02 2.1395E-04 1.5091E-04 1.5336E-05 1.2349E-05 - 1.2589E+02 1.5033E-04 1.0519E-04 1.0074E-05 8.2385E-06 - 1.4125E+02 1.0537E-04 7.3231E-05 6.8126E-06 5.5248E-06 - 1.5849E+02 7.3631E-05 5.0717E-05 4.7713E-06 3.7785E-06 - 1.7783E+02 5.1583E-05 3.5199E-05 3.2258E-06 2.5482E-06 - 1.9953E+02 3.6167E-05 2.4618E-05 2.1194E-06 1.6862E-06 - 2.2387E+02 2.5357E-05 1.7165E-05 1.3716E-06 1.1071E-06 - 2.5119E+02 1.7642E-05 1.1801E-05 9.2051E-07 7.6235E-07 - 2.8184E+02 1.2341E-05 8.1233E-06 6.5197E-07 5.2014E-07 - 3.1623E+02 8.6255E-06 5.6681E-06 4.3129E-07 3.5366E-07 - 3.5481E+02 5.9710E-06 3.8999E-06 2.9312E-07 2.3595E-07 - 3.9811E+02 4.1608E-06 2.7005E-06 1.9955E-07 1.5606E-07 - 4.4668E+02 2.8937E-06 1.8754E-06 1.3467E-07 1.0323E-07 - 5.0119E+02 2.0014E-06 1.2849E-06 8.9784E-08 7.0858E-08 - 5.6234E+02 1.3961E-06 8.8555E-07 6.0815E-08 4.8413E-08 - 6.3096E+02 9.6378E-07 6.0574E-07 4.0783E-08 3.1873E-08 - 7.0795E+02 6.6348E-07 4.1690E-07 2.6735E-08 2.1365E-08 - 7.9433E+02 4.5641E-07 2.8580E-07 1.7667E-08 1.4071E-08 - 8.9125E+02 3.1579E-07 1.9652E-07 1.2083E-08 9.3867E-09 - 1.0000E+03 2.1816E-07 1.3454E-07 8.2954E-09 6.6232E-09 - 1.1220E+03 1.4872E-07 9.0600E-08 5.6219E-09 4.3494E-09 - 1.2589E+03 1.0174E-07 6.1942E-08 3.8904E-09 2.8796E-09 - 1.4125E+03 6.9540E-08 4.2173E-08 2.6092E-09 1.8837E-09 - 1.5849E+03 4.7644E-08 2.8639E-08 1.7626E-09 1.2399E-09 - 1.7783E+03 3.2237E-08 1.9218E-08 1.0968E-09 7.8077E-10 - 1.9953E+03 2.2009E-08 1.3015E-08 7.2120E-10 5.2487E-10 - 2.2387E+03 1.4940E-08 8.7637E-09 4.6719E-10 3.7104E-10 - 2.5119E+03 9.9448E-09 5.8444E-09 3.0632E-10 2.4381E-10 - 2.8184E+03 6.7074E-09 3.9352E-09 2.2223E-10 1.5376E-10 - 3.1623E+03 4.6505E-09 2.6666E-09 1.4014E-10 1.0421E-10 - 3.5481E+03 2.9909E-09 1.7249E-09 8.9302E-11 6.7811E-11 - 3.9811E+03 1.9910E-09 1.1493E-09 5.8996E-11 4.6971E-11 - 4.4668E+03 1.3286E-09 7.6567E-10 4.1928E-11 3.4182E-11 - 5.0119E+03 8.8904E-10 5.1232E-10 2.8645E-11 1.8917E-11 - 5.6234E+03 5.9512E-10 3.3612E-10 1.8062E-11 1.1712E-11 - 6.3096E+03 3.9216E-10 2.1974E-10 1.1445E-11 8.5803E-12 - 7.0795E+03 2.5867E-10 1.4617E-10 7.2838E-12 5.9042E-12 - 7.9433E+03 1.7219E-10 9.5865E-11 4.8901E-12 3.5736E-12 - 8.9125E+03 1.1465E-10 6.3195E-11 3.2110E-12 2.2305E-12 - 1.0000E+04 7.5668E-11 4.2035E-11 1.9430E-12 1.4854E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.6428E+03 4.7636E+03 2.2851E+03 2.2294E+03 - 1.1220E-01 4.1792E+03 4.2996E+03 2.0718E+03 2.0248E+03 - 1.2589E-01 3.7622E+03 3.8507E+03 1.8812E+03 1.8002E+03 - 1.4125E-01 3.3660E+03 3.4439E+03 1.6680E+03 1.5944E+03 - 1.5849E-01 2.9773E+03 3.0459E+03 1.4610E+03 1.4066E+03 - 1.7783E-01 2.6222E+03 2.6618E+03 1.2911E+03 1.2192E+03 - 1.9953E-01 2.2708E+03 2.3118E+03 1.1298E+03 1.0497E+03 - 2.2387E-01 1.9520E+03 1.9917E+03 9.7808E+02 8.9823E+02 - 2.5119E-01 1.6713E+03 1.6951E+03 8.3696E+02 7.6800E+02 - 2.8184E-01 1.4188E+03 1.4350E+03 7.0852E+02 6.4651E+02 - 3.1623E-01 1.1986E+03 1.1998E+03 5.9747E+02 5.3466E+02 - 3.5481E-01 9.9321E+02 9.8839E+02 5.0054E+02 4.4142E+02 - 3.9811E-01 8.1329E+02 8.1657E+02 4.1421E+02 3.6211E+02 - 4.4668E-01 6.7103E+02 6.7279E+02 3.4232E+02 2.9929E+02 - 5.0119E-01 5.4898E+02 5.4552E+02 2.7834E+02 2.4300E+02 - 5.6234E-01 4.3874E+02 4.3469E+02 2.2239E+02 1.9398E+02 - 6.3096E-01 3.4928E+02 3.4716E+02 1.7812E+02 1.5353E+02 - 7.0795E-01 2.7838E+02 2.7611E+02 1.4040E+02 1.2043E+02 - 7.9433E-01 2.1983E+02 2.1619E+02 1.1008E+02 9.4448E+01 - 8.9125E-01 1.7411E+02 1.6908E+02 8.6752E+01 7.3575E+01 - 1.0000E+00 1.3599E+02 1.3042E+02 6.6840E+01 5.6102E+01 - 1.1220E+00 1.0591E+02 1.0054E+02 5.1455E+01 4.2648E+01 - 1.2589E+00 8.1282E+01 7.6682E+01 3.8703E+01 3.2025E+01 - 1.4125E+00 6.1738E+01 5.8380E+01 2.9255E+01 2.3958E+01 - 1.5849E+00 4.6743E+01 4.3916E+01 2.2013E+01 1.7824E+01 - 1.7783E+00 3.5184E+01 3.2519E+01 1.6189E+01 1.3160E+01 - 1.9953E+00 2.6389E+01 2.4122E+01 1.1882E+01 9.5861E+00 - 2.2387E+00 1.9646E+01 1.7985E+01 8.6845E+00 6.9291E+00 - 2.5119E+00 1.4515E+01 1.3160E+01 6.3139E+00 4.9324E+00 - 2.8184E+00 1.0573E+01 9.4500E+00 4.6037E+00 3.4960E+00 - 3.1623E+00 7.7996E+00 6.9241E+00 3.2546E+00 2.4815E+00 - 3.5481E+00 5.7182E+00 4.9693E+00 2.2805E+00 1.7424E+00 - 3.9811E+00 4.1564E+00 3.5875E+00 1.5969E+00 1.2182E+00 - 4.4668E+00 3.0204E+00 2.5655E+00 1.1271E+00 8.4379E-01 - 5.0119E+00 2.1763E+00 1.8388E+00 7.7895E-01 5.8328E-01 - 5.6234E+00 1.5736E+00 1.3171E+00 5.2531E-01 4.0527E-01 - 6.3096E+00 1.1367E+00 9.3143E-01 3.5972E-01 2.7921E-01 - 7.0795E+00 8.0849E-01 6.6172E-01 2.4607E-01 1.8731E-01 - 7.9433E+00 5.8341E-01 4.6903E-01 1.6593E-01 1.2595E-01 - 8.9125E+00 4.1756E-01 3.3610E-01 1.1441E-01 8.6561E-02 - 1.0000E+01 2.9322E-01 2.3565E-01 7.7381E-02 5.6918E-02 - 1.1220E+01 2.0868E-01 1.6600E-01 5.1888E-02 3.8978E-02 - 1.2589E+01 1.4941E-01 1.1803E-01 3.4076E-02 2.6249E-02 - 1.4125E+01 1.0742E-01 8.2995E-02 2.2941E-02 1.7032E-02 - 1.5849E+01 7.6565E-02 5.8880E-02 1.5482E-02 1.1237E-02 - 1.7783E+01 5.4303E-02 4.2291E-02 1.0411E-02 7.6402E-03 - 1.9953E+01 3.8666E-02 2.9961E-02 7.0363E-03 5.2652E-03 - 2.2387E+01 2.7661E-02 2.1223E-02 4.6583E-03 3.5125E-03 - 2.5119E+01 1.9607E-02 1.5174E-02 3.0748E-03 2.3228E-03 - 2.8184E+01 1.3801E-02 1.0777E-02 2.0121E-03 1.5532E-03 - 3.1623E+01 9.8089E-03 7.4105E-03 1.3369E-03 1.0384E-03 - 3.5481E+01 6.9796E-03 5.2193E-03 8.8640E-04 6.9155E-04 - 3.9811E+01 4.9532E-03 3.6808E-03 5.9300E-04 4.6341E-04 - 4.4668E+01 3.5100E-03 2.6011E-03 3.9878E-04 3.1164E-04 - 5.0119E+01 2.4804E-03 1.8293E-03 2.6580E-04 2.0680E-04 - 5.6234E+01 1.7610E-03 1.2871E-03 1.7657E-04 1.3777E-04 - 6.3096E+01 1.2450E-03 8.9863E-04 1.1656E-04 9.1818E-05 - 7.0795E+01 8.7345E-04 6.2637E-04 7.7144E-05 6.1924E-05 - 7.9433E+01 6.1436E-04 4.4018E-04 5.2293E-05 4.2471E-05 - 8.9125E+01 4.3456E-04 3.0802E-04 3.5304E-05 2.8115E-05 - 1.0000E+02 3.0575E-04 2.1601E-04 2.3146E-05 1.8528E-05 - 1.1220E+02 2.1438E-04 1.5095E-04 1.5463E-05 1.2512E-05 - 1.2589E+02 1.5093E-04 1.0531E-04 1.0326E-05 8.3180E-06 - 1.4125E+02 1.0566E-04 7.3068E-05 6.8814E-06 5.5427E-06 - 1.5849E+02 7.3794E-05 5.0983E-05 4.5614E-06 3.7397E-06 - 1.7783E+02 5.1696E-05 3.5519E-05 3.0954E-06 2.4771E-06 - 1.9953E+02 3.6243E-05 2.4562E-05 2.1397E-06 1.6380E-06 - 2.2387E+02 2.5407E-05 1.7132E-05 1.4558E-06 1.1221E-06 - 2.5119E+02 1.7653E-05 1.1955E-05 9.7852E-07 7.4748E-07 - 2.8184E+02 1.2326E-05 8.2468E-06 6.3793E-07 4.9546E-07 - 3.1623E+02 8.5816E-06 5.6457E-06 4.3991E-07 3.4676E-07 - 3.5481E+02 5.9749E-06 3.9096E-06 2.9742E-07 2.3410E-07 - 3.9811E+02 4.1658E-06 2.7128E-06 2.0215E-07 1.5672E-07 - 4.4668E+02 2.8897E-06 1.8726E-06 1.3463E-07 1.0387E-07 - 5.0119E+02 2.0027E-06 1.2834E-06 9.1077E-08 7.0147E-08 - 5.6234E+02 1.3987E-06 8.9131E-07 6.0648E-08 4.7903E-08 - 6.3096E+02 9.6542E-07 6.1125E-07 4.0040E-08 3.2270E-08 - 7.0795E+02 6.6606E-07 4.2086E-07 2.6988E-08 2.1985E-08 - 7.9433E+02 4.6148E-07 2.8793E-07 1.8243E-08 1.4573E-08 - 8.9125E+02 3.1890E-07 1.9637E-07 1.2575E-08 9.7340E-09 - 1.0000E+03 2.1840E-07 1.3415E-07 8.5642E-09 6.4585E-09 - 1.1220E+03 1.4937E-07 9.1099E-08 5.6039E-09 4.2589E-09 - 1.2589E+03 1.0189E-07 6.2050E-08 3.6688E-09 2.7526E-09 - 1.4125E+03 6.9296E-08 4.1646E-08 2.4650E-09 1.8242E-09 - 1.5849E+03 4.7446E-08 2.8443E-08 1.6720E-09 1.2834E-09 - 1.7783E+03 3.2531E-08 1.9377E-08 1.1328E-09 7.9947E-10 - 1.9953E+03 2.1993E-08 1.2914E-08 7.3973E-10 5.3733E-10 - 2.2387E+03 1.4836E-08 8.6320E-09 4.7743E-10 3.6462E-10 - 2.5119E+03 1.0018E-08 5.8797E-09 3.1862E-10 2.4700E-10 - 2.8184E+03 6.7365E-09 3.9261E-09 2.1309E-10 1.6623E-10 - 3.1623E+03 4.6212E-09 2.6850E-09 1.4296E-10 1.0247E-10 - 3.5481E+03 3.0282E-09 1.7436E-09 9.6474E-11 6.5086E-11 - 3.9811E+03 2.0330E-09 1.1552E-09 6.4239E-11 4.3979E-11 - 4.4668E+03 1.3504E-09 7.6301E-10 4.1008E-11 2.9180E-11 - 5.0119E+03 8.9507E-10 5.0718E-10 2.5235E-11 1.9683E-11 - 5.6234E+03 5.9209E-10 3.4229E-10 1.7787E-11 1.2606E-11 - 6.3096E+03 3.9510E-10 2.2117E-10 1.1945E-11 8.3318E-12 - 7.0795E+03 2.6194E-10 1.4491E-10 7.7657E-12 5.7298E-12 - 7.9433E+03 1.7356E-10 9.5855E-11 5.1936E-12 3.5725E-12 - 8.9125E+03 1.1359E-10 6.3319E-11 3.3602E-12 2.3086E-12 - 1.0000E+04 7.5058E-11 4.1122E-11 1.9922E-12 1.5154E-12 -average flux in [cosZ =-0.60 -- -0.50, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.1029E+03 5.2563E+03 2.5323E+03 2.4640E+03 - 1.1220E-01 4.6123E+03 4.7250E+03 2.2916E+03 2.2052E+03 - 1.2589E-01 4.1424E+03 4.2460E+03 2.0579E+03 1.9686E+03 - 1.4125E-01 3.6919E+03 3.7729E+03 1.8239E+03 1.7357E+03 - 1.5849E-01 3.2752E+03 3.3412E+03 1.6107E+03 1.5191E+03 - 1.7783E-01 2.8608E+03 2.9161E+03 1.4222E+03 1.3117E+03 - 1.9953E-01 2.4704E+03 2.5180E+03 1.2427E+03 1.1378E+03 - 2.2387E-01 2.1161E+03 2.1614E+03 1.0666E+03 9.8131E+02 - 2.5119E-01 1.8063E+03 1.8368E+03 9.0417E+02 8.2476E+02 - 2.8184E-01 1.5262E+03 1.5432E+03 7.6965E+02 6.9044E+02 - 3.1623E-01 1.2824E+03 1.2925E+03 6.4771E+02 5.7662E+02 - 3.5481E-01 1.0632E+03 1.0685E+03 5.3624E+02 4.7635E+02 - 3.9811E-01 8.6612E+02 8.7283E+02 4.4106E+02 3.8957E+02 - 4.4668E-01 7.0871E+02 7.0975E+02 3.6251E+02 3.1609E+02 - 5.0119E-01 5.7552E+02 5.7523E+02 2.9616E+02 2.5423E+02 - 5.6234E-01 4.6060E+02 4.6292E+02 2.3887E+02 2.0317E+02 - 6.3096E-01 3.6821E+02 3.6702E+02 1.9111E+02 1.6171E+02 - 7.0795E-01 2.9278E+02 2.8969E+02 1.4888E+02 1.2717E+02 - 7.9433E-01 2.2873E+02 2.2496E+02 1.1424E+02 9.8275E+01 - 8.9125E-01 1.7832E+02 1.7413E+02 8.9781E+01 7.6103E+01 - 1.0000E+00 1.4075E+02 1.3555E+02 7.0759E+01 5.7856E+01 - 1.1220E+00 1.0831E+02 1.0393E+02 5.4211E+01 4.3757E+01 - 1.2589E+00 8.2857E+01 7.8784E+01 4.0764E+01 3.3061E+01 - 1.4125E+00 6.2941E+01 5.9288E+01 3.0421E+01 2.4624E+01 - 1.5849E+00 4.7928E+01 4.4371E+01 2.2752E+01 1.8125E+01 - 1.7783E+00 3.6146E+01 3.2934E+01 1.6892E+01 1.3453E+01 - 1.9953E+00 2.6871E+01 2.4460E+01 1.2512E+01 9.7992E+00 - 2.2387E+00 1.9945E+01 1.8084E+01 8.9418E+00 7.0227E+00 - 2.5119E+00 1.4727E+01 1.3239E+01 6.3543E+00 5.0443E+00 - 2.8184E+00 1.0722E+01 9.6428E+00 4.5310E+00 3.5966E+00 - 3.1623E+00 7.8615E+00 6.8849E+00 3.2629E+00 2.5399E+00 - 3.5481E+00 5.6994E+00 4.9748E+00 2.2582E+00 1.7768E+00 - 3.9811E+00 4.1174E+00 3.5784E+00 1.5651E+00 1.2345E+00 - 4.4668E+00 2.9802E+00 2.5573E+00 1.0919E+00 8.4887E-01 - 5.0119E+00 2.1521E+00 1.8296E+00 7.6863E-01 5.7515E-01 - 5.6234E+00 1.5442E+00 1.3019E+00 5.3106E-01 3.9951E-01 - 6.3096E+00 1.1102E+00 9.3160E-01 3.5940E-01 2.7667E-01 - 7.0795E+00 8.0516E-01 6.6716E-01 2.4227E-01 1.8782E-01 - 7.9433E+00 5.7872E-01 4.7355E-01 1.6403E-01 1.2478E-01 - 8.9125E+00 4.0816E-01 3.3408E-01 1.1384E-01 8.2756E-02 - 1.0000E+01 2.9149E-01 2.3606E-01 7.6754E-02 5.7894E-02 - 1.1220E+01 2.0810E-01 1.6750E-01 5.2141E-02 3.8413E-02 - 1.2589E+01 1.4897E-01 1.1876E-01 3.4979E-02 2.5589E-02 - 1.4125E+01 1.0651E-01 8.3704E-02 2.3274E-02 1.7515E-02 - 1.5849E+01 7.6085E-02 5.8854E-02 1.5147E-02 1.1771E-02 - 1.7783E+01 5.4047E-02 4.1577E-02 9.8785E-03 7.9170E-03 - 1.9953E+01 3.8605E-02 2.9992E-02 6.8062E-03 5.3326E-03 - 2.2387E+01 2.7407E-02 2.1048E-02 4.4316E-03 3.6655E-03 - 2.5119E+01 1.9662E-02 1.4930E-02 2.9986E-03 2.3509E-03 - 2.8184E+01 1.3979E-02 1.0600E-02 2.0330E-03 1.5162E-03 - 3.1623E+01 9.8252E-03 7.4120E-03 1.3448E-03 1.0410E-03 - 3.5481E+01 6.9832E-03 5.2293E-03 8.9709E-04 6.9873E-04 - 3.9811E+01 4.9571E-03 3.6856E-03 5.9405E-04 4.7104E-04 - 4.4668E+01 3.5114E-03 2.6033E-03 3.9290E-04 3.1507E-04 - 5.0119E+01 2.4873E-03 1.8369E-03 2.6359E-04 2.1006E-04 - 5.6234E+01 1.7662E-03 1.2913E-03 1.7433E-04 1.3784E-04 - 6.3096E+01 1.2463E-03 9.0386E-04 1.1594E-04 9.1732E-05 - 7.0795E+01 8.7867E-04 6.3008E-04 7.7687E-05 6.2518E-05 - 7.9433E+01 6.1767E-04 4.4331E-04 5.2657E-05 4.0599E-05 - 8.9125E+01 4.3436E-04 3.0921E-04 3.5782E-05 2.7106E-05 - 1.0000E+02 3.0514E-04 2.1698E-04 2.3207E-05 1.8479E-05 - 1.1220E+02 2.1409E-04 1.5125E-04 1.5485E-05 1.2501E-05 - 1.2589E+02 1.5043E-04 1.0511E-04 1.0347E-05 8.3993E-06 - 1.4125E+02 1.0544E-04 7.3195E-05 6.9397E-06 5.5246E-06 - 1.5849E+02 7.3616E-05 5.0940E-05 4.6580E-06 3.7337E-06 - 1.7783E+02 5.1756E-05 3.5448E-05 3.0967E-06 2.5143E-06 - 1.9953E+02 3.6255E-05 2.4606E-05 2.0838E-06 1.7078E-06 - 2.2387E+02 2.5216E-05 1.7001E-05 1.4194E-06 1.1410E-06 - 2.5119E+02 1.7637E-05 1.1765E-05 9.5688E-07 7.5298E-07 - 2.8184E+02 1.2360E-05 8.2396E-06 6.3123E-07 5.2037E-07 - 3.1623E+02 8.6001E-06 5.6883E-06 4.2664E-07 3.5180E-07 - 3.5481E+02 5.9964E-06 3.9067E-06 2.8971E-07 2.3777E-07 - 3.9811E+02 4.1730E-06 2.7223E-06 1.9657E-07 1.5984E-07 - 4.4668E+02 2.8960E-06 1.8728E-06 1.3430E-07 1.0625E-07 - 5.0119E+02 2.0100E-06 1.2895E-06 9.1295E-08 7.1037E-08 - 5.6234E+02 1.3999E-06 8.9346E-07 6.0175E-08 4.9033E-08 - 6.3096E+02 9.7196E-07 6.1194E-07 4.0679E-08 3.2665E-08 - 7.0795E+02 6.6964E-07 4.2200E-07 2.7876E-08 2.1879E-08 - 7.9433E+02 4.5640E-07 2.8795E-07 1.8364E-08 1.4846E-08 - 8.9125E+02 3.1482E-07 1.9466E-07 1.2211E-08 9.5795E-09 - 1.0000E+03 2.1936E-07 1.3398E-07 8.3276E-09 6.3939E-09 - 1.1220E+03 1.4914E-07 9.0970E-08 5.4493E-09 4.4125E-09 - 1.2589E+03 1.0181E-07 6.1949E-08 3.5783E-09 2.8880E-09 - 1.4125E+03 6.9565E-08 4.2091E-08 2.4102E-09 1.9110E-09 - 1.5849E+03 4.7529E-08 2.8728E-08 1.5933E-09 1.2624E-09 - 1.7783E+03 3.2414E-08 1.9330E-08 1.0594E-09 8.2059E-10 - 1.9953E+03 2.1956E-08 1.2831E-08 7.3440E-10 5.1611E-10 - 2.2387E+03 1.4739E-08 8.6438E-09 4.9489E-10 3.5571E-10 - 2.5119E+03 9.9296E-09 5.7861E-09 3.2510E-10 2.3929E-10 - 2.8184E+03 6.7033E-09 3.8822E-09 2.0950E-10 1.5990E-10 - 3.1623E+03 4.6004E-09 2.6788E-09 1.3926E-10 1.1024E-10 - 3.5481E+03 2.9985E-09 1.7335E-09 9.1799E-11 7.1595E-11 - 3.9811E+03 2.0147E-09 1.1705E-09 6.2897E-11 4.8676E-11 - 4.4668E+03 1.3533E-09 7.8589E-10 4.3105E-11 3.1410E-11 - 5.0119E+03 8.9734E-10 5.1623E-10 2.8201E-11 2.0345E-11 - 5.6234E+03 5.9989E-10 3.3776E-10 1.9123E-11 1.1848E-11 - 6.3096E+03 3.9643E-10 2.2332E-10 1.1744E-11 8.1330E-12 - 7.0795E+03 2.6358E-10 1.4657E-10 7.8923E-12 5.5027E-12 - 7.9433E+03 1.7241E-10 9.6802E-11 5.0260E-12 3.6207E-12 - 8.9125E+03 1.1332E-10 6.3105E-11 3.4106E-12 2.3019E-12 - 1.0000E+04 7.5640E-11 4.0710E-11 2.2444E-12 1.4374E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5269E+03 3.6269E+03 1.7284E+03 1.7445E+03 - 1.1220E-01 3.2122E+03 3.2932E+03 1.5668E+03 1.5740E+03 - 1.2589E-01 2.9035E+03 2.9612E+03 1.4199E+03 1.4145E+03 - 1.4125E-01 2.6096E+03 2.6469E+03 1.2741E+03 1.2690E+03 - 1.5849E-01 2.3299E+03 2.3506E+03 1.1367E+03 1.1143E+03 - 1.7783E-01 2.0501E+03 2.0819E+03 9.9478E+02 9.5920E+02 - 1.9953E-01 1.7876E+03 1.8166E+03 8.6189E+02 8.3944E+02 - 2.2387E-01 1.5545E+03 1.5602E+03 7.5068E+02 7.2465E+02 - 2.5119E-01 1.3361E+03 1.3358E+03 6.4784E+02 6.1311E+02 - 2.8184E-01 1.1368E+03 1.1319E+03 5.5466E+02 5.1621E+02 - 3.1623E-01 9.5948E+02 9.5016E+02 4.7215E+02 4.3527E+02 - 3.5481E-01 7.9943E+02 7.9456E+02 3.9476E+02 3.6223E+02 - 3.9811E-01 6.6320E+02 6.6037E+02 3.2725E+02 2.9951E+02 - 4.4668E-01 5.5218E+02 5.4363E+02 2.6826E+02 2.4489E+02 - 5.0119E-01 4.5265E+02 4.4570E+02 2.1851E+02 1.9722E+02 - 5.6234E-01 3.6852E+02 3.6085E+02 1.7748E+02 1.5973E+02 - 6.3096E-01 2.9824E+02 2.8906E+02 1.4264E+02 1.2869E+02 - 7.0795E-01 2.3940E+02 2.3156E+02 1.1389E+02 1.0209E+02 - 7.9433E-01 1.9137E+02 1.8396E+02 8.9701E+01 8.0103E+01 - 8.9125E-01 1.5230E+02 1.4538E+02 7.0275E+01 6.1820E+01 - 1.0000E+00 1.1802E+02 1.1267E+02 5.4782E+01 4.7420E+01 - 1.1220E+00 9.1846E+01 8.6979E+01 4.2272E+01 3.6160E+01 - 1.2589E+00 7.1308E+01 6.7475E+01 3.2349E+01 2.7258E+01 - 1.4125E+00 5.5051E+01 5.1794E+01 2.4519E+01 2.0442E+01 - 1.5849E+00 4.1867E+01 3.9161E+01 1.8477E+01 1.5308E+01 - 1.7783E+00 3.1865E+01 2.9324E+01 1.3664E+01 1.1426E+01 - 1.9953E+00 2.4191E+01 2.1901E+01 1.0087E+01 8.3065E+00 - 2.2387E+00 1.8114E+01 1.6378E+01 7.4607E+00 5.9476E+00 - 2.5119E+00 1.3486E+01 1.2054E+01 5.4345E+00 4.2972E+00 - 2.8184E+00 9.9931E+00 8.7484E+00 3.9030E+00 3.0768E+00 - 3.1623E+00 7.3452E+00 6.3878E+00 2.7595E+00 2.1711E+00 - 3.5481E+00 5.3885E+00 4.6224E+00 1.9571E+00 1.5237E+00 - 3.9811E+00 3.9375E+00 3.3316E+00 1.3855E+00 1.0556E+00 - 4.4668E+00 2.8573E+00 2.4034E+00 9.7315E-01 7.3455E-01 - 5.0119E+00 2.0495E+00 1.7131E+00 6.7243E-01 5.1128E-01 - 5.6234E+00 1.4812E+00 1.2245E+00 4.6329E-01 3.5036E-01 - 6.3096E+00 1.0719E+00 8.7544E-01 3.2012E-01 2.3582E-01 - 7.0795E+00 7.5989E-01 6.1962E-01 2.1543E-01 1.5860E-01 - 7.9433E+00 5.4388E-01 4.3989E-01 1.4454E-01 1.0773E-01 - 8.9125E+00 3.9367E-01 3.1324E-01 9.6494E-02 7.3416E-02 - 1.0000E+01 2.7973E-01 2.2171E-01 6.5685E-02 4.9390E-02 - 1.1220E+01 1.9904E-01 1.5624E-01 4.3499E-02 3.2834E-02 - 1.2589E+01 1.4194E-01 1.1036E-01 2.8620E-02 2.2091E-02 - 1.4125E+01 1.0100E-01 7.9021E-02 1.9408E-02 1.4918E-02 - 1.5849E+01 7.2119E-02 5.6017E-02 1.3025E-02 9.8790E-03 - 1.7783E+01 5.1109E-02 3.9025E-02 8.6440E-03 6.5733E-03 - 1.9953E+01 3.6155E-02 2.7170E-02 5.7192E-03 4.4288E-03 - 2.2387E+01 2.5699E-02 1.9341E-02 3.8253E-03 2.8791E-03 - 2.5119E+01 1.8304E-02 1.3778E-02 2.4592E-03 1.9493E-03 - 2.8184E+01 1.2975E-02 9.6324E-03 1.6271E-03 1.3708E-03 - 3.1623E+01 9.3195E-03 6.9176E-03 1.1309E-03 8.8133E-04 - 3.5481E+01 6.6106E-03 4.8801E-03 7.4604E-04 5.8183E-04 - 3.9811E+01 4.6804E-03 3.4248E-03 4.9620E-04 3.9142E-04 - 4.4668E+01 3.3124E-03 2.4099E-03 3.3075E-04 2.6542E-04 - 5.0119E+01 2.3497E-03 1.7045E-03 2.2122E-04 1.7786E-04 - 5.6234E+01 1.6561E-03 1.2005E-03 1.4643E-04 1.2011E-04 - 6.3096E+01 1.1686E-03 8.3366E-04 9.6721E-05 8.0553E-05 - 7.0795E+01 8.1811E-04 5.8199E-04 6.4087E-05 5.3771E-05 - 7.9433E+01 5.6912E-04 4.0950E-04 4.2772E-05 3.6672E-05 - 8.9125E+01 4.0125E-04 2.8557E-04 2.8536E-05 2.3924E-05 - 1.0000E+02 2.8622E-04 1.9950E-04 1.9520E-05 1.5861E-05 - 1.1220E+02 2.0087E-04 1.3865E-04 1.3170E-05 1.0681E-05 - 1.2589E+02 1.4015E-04 9.6546E-05 9.0605E-06 7.0763E-06 - 1.4125E+02 9.8079E-05 6.7195E-05 6.0338E-06 4.7631E-06 - 1.5849E+02 6.8661E-05 4.6718E-05 3.9462E-06 3.2506E-06 - 1.7783E+02 4.7972E-05 3.2562E-05 2.7031E-06 2.1315E-06 - 1.9953E+02 3.3611E-05 2.2620E-05 1.8443E-06 1.4597E-06 - 2.2387E+02 2.3321E-05 1.5631E-05 1.2165E-06 1.0086E-06 - 2.5119E+02 1.6275E-05 1.0787E-05 8.2344E-07 6.7524E-07 - 2.8184E+02 1.1397E-05 7.4703E-06 5.6109E-07 4.4986E-07 - 3.1623E+02 7.9654E-06 5.1786E-06 3.7383E-07 3.0195E-07 - 3.5481E+02 5.5189E-06 3.5798E-06 2.5278E-07 2.0305E-07 - 3.9811E+02 3.8183E-06 2.4727E-06 1.7221E-07 1.3655E-07 - 4.4668E+02 2.6557E-06 1.6948E-06 1.1654E-07 9.3921E-08 - 5.0119E+02 1.8430E-06 1.1648E-06 8.0133E-08 6.2989E-08 - 5.6234E+02 1.2832E-06 8.0249E-07 5.3441E-08 4.1591E-08 - 6.3096E+02 8.8103E-07 5.4824E-07 3.5730E-08 2.7990E-08 - 7.0795E+02 6.0664E-07 3.7711E-07 2.3765E-08 1.8562E-08 - 7.9433E+02 4.1902E-07 2.5884E-07 1.6218E-08 1.2152E-08 - 8.9125E+02 2.8865E-07 1.7655E-07 1.1108E-08 8.0600E-09 - 1.0000E+03 1.9875E-07 1.2162E-07 7.3583E-09 5.4095E-09 - 1.1220E+03 1.3498E-07 8.1700E-08 4.8384E-09 3.5168E-09 - 1.2589E+03 9.2044E-08 5.5746E-08 3.3359E-09 2.4689E-09 - 1.4125E+03 6.2981E-08 3.8183E-08 2.1639E-09 1.7563E-09 - 1.5849E+03 4.2492E-08 2.5738E-08 1.4421E-09 1.1507E-09 - 1.7783E+03 2.8583E-08 1.7425E-08 9.9931E-10 7.4406E-10 - 1.9953E+03 1.9346E-08 1.1613E-08 6.8350E-10 4.8975E-10 - 2.2387E+03 1.2908E-08 7.6996E-09 4.4001E-10 3.3391E-10 - 2.5119E+03 8.7030E-09 5.1685E-09 2.7257E-10 2.2148E-10 - 2.8184E+03 5.9085E-09 3.4315E-09 1.7792E-10 1.4036E-10 - 3.1623E+03 4.0496E-09 2.3355E-09 1.2301E-10 9.0899E-11 - 3.5481E+03 2.6363E-09 1.5225E-09 8.2107E-11 5.8324E-11 - 3.9811E+03 1.7544E-09 1.0083E-09 5.4141E-11 3.6722E-11 - 4.4668E+03 1.1543E-09 6.7067E-10 3.5550E-11 2.3433E-11 - 5.0119E+03 7.6936E-10 4.3254E-10 2.2757E-11 1.4868E-11 - 5.6234E+03 5.1808E-10 2.8420E-10 1.5650E-11 1.0354E-11 - 6.3096E+03 3.4162E-10 1.9343E-10 1.0422E-11 6.8710E-12 - 7.0795E+03 2.2287E-10 1.2710E-10 6.5744E-12 4.5490E-12 - 7.9433E+03 1.4560E-10 8.3930E-11 4.1755E-12 3.0566E-12 - 8.9125E+03 9.7062E-11 5.4669E-11 2.8759E-12 1.9114E-12 - 1.0000E+04 6.3872E-11 3.5523E-11 1.8264E-12 1.2727E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.4384E+03 3.5015E+03 1.6755E+03 1.7013E+03 - 1.1220E-01 3.1240E+03 3.1739E+03 1.5107E+03 1.5427E+03 - 1.2589E-01 2.8307E+03 2.8712E+03 1.3670E+03 1.3813E+03 - 1.4125E-01 2.5422E+03 2.5635E+03 1.2236E+03 1.2248E+03 - 1.5849E-01 2.2501E+03 2.2753E+03 1.0894E+03 1.0838E+03 - 1.7783E-01 1.9825E+03 2.0227E+03 9.6567E+02 9.3934E+02 - 1.9953E-01 1.7363E+03 1.7683E+03 8.4192E+02 8.1202E+02 - 2.2387E-01 1.4995E+03 1.5178E+03 7.2929E+02 7.0609E+02 - 2.5119E-01 1.2865E+03 1.2901E+03 6.2811E+02 6.0255E+02 - 2.8184E-01 1.0963E+03 1.0962E+03 5.3646E+02 5.0732E+02 - 3.1623E-01 9.2750E+02 9.2250E+02 4.5100E+02 4.2069E+02 - 3.5481E-01 7.7875E+02 7.7321E+02 3.7807E+02 3.5190E+02 - 3.9811E-01 6.4782E+02 6.4162E+02 3.1627E+02 2.9325E+02 - 4.4668E-01 5.3134E+02 5.2730E+02 2.5928E+02 2.3840E+02 - 5.0119E-01 4.3252E+02 4.3341E+02 2.1179E+02 1.9378E+02 - 5.6234E-01 3.5567E+02 3.4963E+02 1.7183E+02 1.5562E+02 - 6.3096E-01 2.8790E+02 2.7968E+02 1.3738E+02 1.2361E+02 - 7.0795E-01 2.2974E+02 2.2531E+02 1.1035E+02 9.8717E+01 - 7.9433E-01 1.8417E+02 1.7955E+02 8.7368E+01 7.7056E+01 - 8.9125E-01 1.4567E+02 1.4045E+02 6.8402E+01 5.9582E+01 - 1.0000E+00 1.1455E+02 1.0951E+02 5.3671E+01 4.6056E+01 - 1.1220E+00 8.9741E+01 8.5636E+01 4.1602E+01 3.5114E+01 - 1.2589E+00 6.9950E+01 6.5840E+01 3.1796E+01 2.6525E+01 - 1.4125E+00 5.4024E+01 5.0052E+01 2.4056E+01 2.0071E+01 - 1.5849E+00 4.1434E+01 3.7947E+01 1.8306E+01 1.4942E+01 - 1.7783E+00 3.1595E+01 2.8650E+01 1.3675E+01 1.1020E+01 - 1.9953E+00 2.4068E+01 2.1507E+01 9.9845E+00 8.1389E+00 - 2.2387E+00 1.8019E+01 1.6166E+01 7.3377E+00 5.9767E+00 - 2.5119E+00 1.3305E+01 1.1987E+01 5.3660E+00 4.2475E+00 - 2.8184E+00 9.8666E+00 8.7339E+00 3.9059E+00 3.0106E+00 - 3.1623E+00 7.2913E+00 6.3346E+00 2.7578E+00 2.1517E+00 - 3.5481E+00 5.3723E+00 4.5802E+00 1.9463E+00 1.5086E+00 - 3.9811E+00 3.9138E+00 3.3109E+00 1.3716E+00 1.0528E+00 - 4.4668E+00 2.8533E+00 2.4017E+00 9.6558E-01 7.3270E-01 - 5.0119E+00 2.0629E+00 1.7292E+00 6.6397E-01 5.0679E-01 - 5.6234E+00 1.4883E+00 1.2283E+00 4.5532E-01 3.4905E-01 - 6.3096E+00 1.0728E+00 8.7006E-01 3.1399E-01 2.3705E-01 - 7.0795E+00 7.6051E-01 6.1762E-01 2.1282E-01 1.5919E-01 - 7.9433E+00 5.4211E-01 4.3898E-01 1.4483E-01 1.0876E-01 - 8.9125E+00 3.9098E-01 3.1565E-01 9.7896E-02 7.4026E-02 - 1.0000E+01 2.8090E-01 2.2203E-01 6.5443E-02 4.9319E-02 - 1.1220E+01 2.0057E-01 1.5616E-01 4.4188E-02 3.3475E-02 - 1.2589E+01 1.4212E-01 1.0989E-01 2.9613E-02 2.1866E-02 - 1.4125E+01 1.0101E-01 7.7637E-02 1.9410E-02 1.4243E-02 - 1.5849E+01 7.2019E-02 5.4851E-02 1.2966E-02 9.8366E-03 - 1.7783E+01 5.1075E-02 3.9087E-02 8.8299E-03 6.5823E-03 - 1.9953E+01 3.6509E-02 2.7337E-02 5.7662E-03 4.3234E-03 - 2.2387E+01 2.6018E-02 1.9212E-02 3.8444E-03 2.9629E-03 - 2.5119E+01 1.8463E-02 1.3630E-02 2.4922E-03 1.9674E-03 - 2.8184E+01 1.3050E-02 9.6008E-03 1.5968E-03 1.2913E-03 - 3.1623E+01 9.3237E-03 6.9396E-03 1.1307E-03 8.8329E-04 - 3.5481E+01 6.6200E-03 4.8606E-03 7.4902E-04 5.8586E-04 - 3.9811E+01 4.6760E-03 3.4270E-03 5.0183E-04 3.9195E-04 - 4.4668E+01 3.3039E-03 2.4146E-03 3.3219E-04 2.6102E-04 - 5.0119E+01 2.3409E-03 1.6978E-03 2.2189E-04 1.7535E-04 - 5.6234E+01 1.6527E-03 1.1955E-03 1.4866E-04 1.1805E-04 - 6.3096E+01 1.1679E-03 8.3348E-04 9.7416E-05 7.8858E-05 - 7.0795E+01 8.2095E-04 5.8250E-04 6.5741E-05 5.2814E-05 - 7.9433E+01 5.7565E-04 4.1120E-04 4.4768E-05 3.4671E-05 - 8.9125E+01 4.0477E-04 2.8917E-04 2.9554E-05 2.3735E-05 - 1.0000E+02 2.8474E-04 1.9960E-04 1.9587E-05 1.5846E-05 - 1.1220E+02 1.9948E-04 1.3882E-04 1.3040E-05 1.0733E-05 - 1.2589E+02 1.4006E-04 9.6618E-05 8.6710E-06 7.2425E-06 - 1.4125E+02 9.7994E-05 6.7231E-05 5.8503E-06 4.7959E-06 - 1.5849E+02 6.8287E-05 4.6786E-05 4.0163E-06 3.1612E-06 - 1.7783E+02 4.7861E-05 3.2611E-05 2.7429E-06 2.1492E-06 - 1.9953E+02 3.3566E-05 2.2404E-05 1.8505E-06 1.4658E-06 - 2.2387E+02 2.3427E-05 1.5452E-05 1.2317E-06 1.0108E-06 - 2.5119E+02 1.6423E-05 1.0785E-05 8.4018E-07 6.6783E-07 - 2.8184E+02 1.1490E-05 7.4825E-06 5.6179E-07 4.5559E-07 - 3.1623E+02 7.9737E-06 5.2166E-06 3.7985E-07 3.0242E-07 - 3.5481E+02 5.5179E-06 3.5837E-06 2.5518E-07 2.0434E-07 - 3.9811E+02 3.8179E-06 2.4815E-06 1.7232E-07 1.3807E-07 - 4.4668E+02 2.6452E-06 1.7149E-06 1.1450E-07 9.3465E-08 - 5.0119E+02 1.8306E-06 1.1764E-06 7.4134E-08 6.3980E-08 - 5.6234E+02 1.2862E-06 8.1291E-07 5.2798E-08 4.2394E-08 - 6.3096E+02 8.8266E-07 5.5656E-07 3.5298E-08 2.7551E-08 - 7.0795E+02 6.0767E-07 3.7990E-07 2.3669E-08 1.8197E-08 - 7.9433E+02 4.1735E-07 2.5907E-07 1.6065E-08 1.2478E-08 - 8.9125E+02 2.8783E-07 1.7545E-07 1.1266E-08 8.5653E-09 - 1.0000E+03 1.9938E-07 1.2203E-07 7.3683E-09 5.7066E-09 - 1.1220E+03 1.3456E-07 8.2789E-08 4.7363E-09 3.6867E-09 - 1.2589E+03 9.1500E-08 5.5773E-08 3.2430E-09 2.5147E-09 - 1.4125E+03 6.2321E-08 3.7574E-08 2.1421E-09 1.6411E-09 - 1.5849E+03 4.2656E-08 2.5341E-08 1.4072E-09 1.0548E-09 - 1.7783E+03 2.8757E-08 1.7199E-08 9.1932E-10 7.2568E-10 - 1.9953E+03 1.9452E-08 1.1551E-08 6.2337E-10 4.8581E-10 - 2.2387E+03 1.3074E-08 7.6925E-09 4.2839E-10 3.2009E-10 - 2.5119E+03 8.7599E-09 5.1669E-09 2.7794E-10 2.0879E-10 - 2.8184E+03 5.9072E-09 3.4661E-09 1.8093E-10 1.3670E-10 - 3.1623E+03 4.0476E-09 2.3612E-09 1.2164E-10 9.6225E-11 - 3.5481E+03 2.6167E-09 1.5303E-09 8.0635E-11 6.4520E-11 - 3.9811E+03 1.7542E-09 1.0110E-09 5.3743E-11 3.8839E-11 - 4.4668E+03 1.1650E-09 6.6196E-10 3.5508E-11 2.3739E-11 - 5.0119E+03 7.7419E-10 4.4709E-10 2.4437E-11 1.5887E-11 - 5.6234E+03 5.1421E-10 2.9652E-10 1.6679E-11 1.0696E-11 - 6.3096E+03 3.4043E-10 1.9146E-10 1.0747E-11 7.2573E-12 - 7.0795E+03 2.2265E-10 1.2587E-10 6.9004E-12 4.8698E-12 - 7.9433E+03 1.4682E-10 8.2659E-11 4.3237E-12 3.0420E-12 - 8.9125E+03 9.7048E-11 5.4417E-11 2.7393E-12 2.1509E-12 - 1.0000E+04 6.4096E-11 3.5052E-11 1.8942E-12 1.5310E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.3012E+03 3.3601E+03 1.5961E+03 1.6169E+03 - 1.1220E-01 2.9852E+03 3.0592E+03 1.4618E+03 1.4626E+03 - 1.2589E-01 2.6976E+03 2.7520E+03 1.3157E+03 1.3207E+03 - 1.4125E-01 2.4222E+03 2.4671E+03 1.1743E+03 1.1773E+03 - 1.5849E-01 2.1469E+03 2.1933E+03 1.0395E+03 1.0333E+03 - 1.7783E-01 1.9014E+03 1.9253E+03 9.1867E+02 9.0423E+02 - 1.9953E-01 1.6645E+03 1.6723E+03 8.0895E+02 7.7713E+02 - 2.2387E-01 1.4317E+03 1.4473E+03 6.9371E+02 6.6523E+02 - 2.5119E-01 1.2305E+03 1.2430E+03 5.9465E+02 5.7072E+02 - 2.8184E-01 1.0521E+03 1.0506E+03 5.1048E+02 4.8387E+02 - 3.1623E-01 8.9166E+02 8.7976E+02 4.2874E+02 4.0859E+02 - 3.5481E-01 7.4238E+02 7.3329E+02 3.5869E+02 3.3804E+02 - 3.9811E-01 6.1304E+02 6.1071E+02 3.0086E+02 2.7802E+02 - 4.4668E-01 5.0909E+02 5.0471E+02 2.4908E+02 2.2669E+02 - 5.0119E-01 4.1993E+02 4.1166E+02 2.0276E+02 1.8311E+02 - 5.6234E-01 3.4190E+02 3.3489E+02 1.6340E+02 1.4984E+02 - 6.3096E-01 2.7737E+02 2.7051E+02 1.3133E+02 1.1904E+02 - 7.0795E-01 2.2359E+02 2.1586E+02 1.0567E+02 9.3143E+01 - 7.9433E-01 1.7696E+02 1.7075E+02 8.4623E+01 7.4223E+01 - 8.9125E-01 1.3961E+02 1.3552E+02 6.6321E+01 5.8233E+01 - 1.0000E+00 1.1115E+02 1.0630E+02 5.1519E+01 4.4437E+01 - 1.1220E+00 8.7199E+01 8.2930E+01 3.9938E+01 3.4049E+01 - 1.2589E+00 6.8089E+01 6.4181E+01 3.0781E+01 2.6065E+01 - 1.4125E+00 5.2578E+01 4.9446E+01 2.3432E+01 1.9681E+01 - 1.5849E+00 4.0538E+01 3.7453E+01 1.7624E+01 1.4798E+01 - 1.7783E+00 3.0881E+01 2.8257E+01 1.3158E+01 1.0894E+01 - 1.9953E+00 2.3460E+01 2.0998E+01 9.7399E+00 7.9541E+00 - 2.2387E+00 1.7703E+01 1.5636E+01 7.0973E+00 5.8675E+00 - 2.5119E+00 1.3159E+01 1.1626E+01 5.2055E+00 4.2859E+00 - 2.8184E+00 9.7727E+00 8.5815E+00 3.7585E+00 3.0276E+00 - 3.1623E+00 7.2076E+00 6.2714E+00 2.7091E+00 2.1503E+00 - 3.5481E+00 5.2839E+00 4.5597E+00 1.9328E+00 1.5101E+00 - 3.9811E+00 3.8797E+00 3.2978E+00 1.3593E+00 1.0519E+00 - 4.4668E+00 2.8218E+00 2.3742E+00 9.5793E-01 7.2659E-01 - 5.0119E+00 2.0350E+00 1.6988E+00 6.6170E-01 4.9838E-01 - 5.6234E+00 1.4697E+00 1.2132E+00 4.5197E-01 3.4288E-01 - 6.3096E+00 1.0632E+00 8.7358E-01 3.0891E-01 2.3667E-01 - 7.0795E+00 7.6875E-01 6.2934E-01 2.1430E-01 1.5918E-01 - 7.9433E+00 5.4639E-01 4.4196E-01 1.4653E-01 1.0894E-01 - 8.9125E+00 3.8370E-01 3.0942E-01 9.8733E-02 7.2820E-02 - 1.0000E+01 2.7940E-01 2.2167E-01 6.4985E-02 4.8368E-02 - 1.1220E+01 1.9976E-01 1.5618E-01 4.3729E-02 3.2828E-02 - 1.2589E+01 1.4275E-01 1.1090E-01 2.9346E-02 2.2253E-02 - 1.4125E+01 1.0132E-01 7.8256E-02 1.9643E-02 1.4983E-02 - 1.5849E+01 7.1937E-02 5.5157E-02 1.2950E-02 9.9585E-03 - 1.7783E+01 5.1545E-02 3.8920E-02 8.6146E-03 6.4842E-03 - 1.9953E+01 3.6566E-02 2.7162E-02 5.7519E-03 4.2390E-03 - 2.2387E+01 2.5662E-02 1.9492E-02 3.8830E-03 2.9097E-03 - 2.5119E+01 1.8456E-02 1.4031E-02 2.5606E-03 1.9370E-03 - 2.8184E+01 1.3292E-02 9.8484E-03 1.6529E-03 1.2637E-03 - 3.1623E+01 9.3248E-03 6.9185E-03 1.1241E-03 8.8725E-04 - 3.5481E+01 6.6294E-03 4.8747E-03 7.4588E-04 5.9501E-04 - 3.9811E+01 4.6936E-03 3.4359E-03 4.9817E-04 3.9355E-04 - 4.4668E+01 3.3144E-03 2.4164E-03 3.3478E-04 2.6002E-04 - 5.0119E+01 2.3421E-03 1.7041E-03 2.2342E-04 1.7426E-04 - 5.6234E+01 1.6500E-03 1.1957E-03 1.4608E-04 1.1714E-04 - 6.3096E+01 1.1647E-03 8.3841E-04 9.7729E-05 7.8766E-05 - 7.0795E+01 8.2083E-04 5.8662E-04 6.6205E-05 5.2565E-05 - 7.9433E+01 5.7700E-04 4.0936E-04 4.4241E-05 3.5197E-05 - 8.9125E+01 4.0737E-04 2.8886E-04 2.8766E-05 2.4311E-05 - 1.0000E+02 2.8644E-04 2.0000E-04 1.9535E-05 1.5884E-05 - 1.1220E+02 2.0017E-04 1.3924E-04 1.3044E-05 1.0699E-05 - 1.2589E+02 1.4012E-04 9.7068E-05 8.8482E-06 7.2640E-06 - 1.4125E+02 9.7965E-05 6.7719E-05 5.9387E-06 4.8400E-06 - 1.5849E+02 6.8359E-05 4.7030E-05 3.9438E-06 3.2131E-06 - 1.7783E+02 4.8077E-05 3.2679E-05 2.6633E-06 2.1908E-06 - 1.9953E+02 3.3726E-05 2.2660E-05 1.8629E-06 1.4857E-06 - 2.2387E+02 2.3450E-05 1.5666E-05 1.2437E-06 1.0063E-06 - 2.5119E+02 1.6244E-05 1.0814E-05 8.1184E-07 6.7344E-07 - 2.8184E+02 1.1338E-05 7.4836E-06 5.6358E-07 4.5650E-07 - 3.1623E+02 7.9409E-06 5.1700E-06 3.8541E-07 3.0361E-07 - 3.5481E+02 5.5235E-06 3.5526E-06 2.6040E-07 2.0431E-07 - 3.9811E+02 3.8263E-06 2.4562E-06 1.7270E-07 1.3490E-07 - 4.4668E+02 2.6473E-06 1.7016E-06 1.1347E-07 9.0426E-08 - 5.0119E+02 1.8470E-06 1.1723E-06 7.6612E-08 6.2484E-08 - 5.6234E+02 1.2834E-06 8.0822E-07 5.2647E-08 4.1196E-08 - 6.3096E+02 8.8275E-07 5.4893E-07 3.5588E-08 2.6923E-08 - 7.0795E+02 6.0634E-07 3.7493E-07 2.4508E-08 1.8227E-08 - 7.9433E+02 4.1897E-07 2.5768E-07 1.6376E-08 1.2687E-08 - 8.9125E+02 2.8935E-07 1.7570E-07 1.1076E-08 8.7196E-09 - 1.0000E+03 1.9912E-07 1.2028E-07 7.3408E-09 5.6342E-09 - 1.1220E+03 1.3472E-07 8.1170E-08 4.7669E-09 3.5897E-09 - 1.2589E+03 9.2328E-08 5.4861E-08 3.0950E-09 2.4633E-09 - 1.4125E+03 6.2489E-08 3.7290E-08 2.0454E-09 1.7022E-09 - 1.5849E+03 4.2171E-08 2.5379E-08 1.4273E-09 1.0697E-09 - 1.7783E+03 2.8453E-08 1.7129E-08 1.0000E-09 7.1419E-10 - 1.9953E+03 1.9320E-08 1.1482E-08 6.7408E-10 4.7687E-10 - 2.2387E+03 1.2995E-08 7.6509E-09 4.4297E-10 3.1668E-10 - 2.5119E+03 8.7657E-09 5.1504E-09 2.7558E-10 2.1099E-10 - 2.8184E+03 5.9307E-09 3.4448E-09 1.9489E-10 1.2927E-10 - 3.1623E+03 4.0663E-09 2.3386E-09 1.2501E-10 8.9080E-11 - 3.5481E+03 2.6283E-09 1.5171E-09 8.1219E-11 6.0032E-11 - 3.9811E+03 1.7431E-09 1.0123E-09 5.4439E-11 3.9467E-11 - 4.4668E+03 1.1664E-09 6.7304E-10 3.5646E-11 2.5050E-11 - 5.0119E+03 7.7284E-10 4.4430E-10 2.3621E-11 1.5699E-11 - 5.6234E+03 5.0773E-10 2.9076E-10 1.5559E-11 1.1169E-11 - 6.3096E+03 3.4040E-10 1.9164E-10 1.0013E-11 6.9793E-12 - 7.0795E+03 2.2534E-10 1.2624E-10 6.2868E-12 4.8385E-12 - 7.9433E+03 1.4835E-10 8.1538E-11 4.3876E-12 2.9261E-12 - 8.9125E+03 9.7096E-11 5.3871E-11 2.8013E-12 1.9587E-12 - 1.0000E+04 6.4521E-11 3.6095E-11 1.7926E-12 1.3065E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.3332E+03 3.3609E+03 1.6099E+03 1.6672E+03 - 1.1220E-01 3.0199E+03 3.0366E+03 1.4628E+03 1.4906E+03 - 1.2589E-01 2.7254E+03 2.7491E+03 1.3154E+03 1.3267E+03 - 1.4125E-01 2.4362E+03 2.4573E+03 1.1699E+03 1.1810E+03 - 1.5849E-01 2.1619E+03 2.1738E+03 1.0397E+03 1.0403E+03 - 1.7783E-01 1.9026E+03 1.9153E+03 9.1960E+02 9.0406E+02 - 1.9953E-01 1.6608E+03 1.6692E+03 8.0566E+02 7.7999E+02 - 2.2387E-01 1.4350E+03 1.4299E+03 6.8913E+02 6.7147E+02 - 2.5119E-01 1.2290E+03 1.2221E+03 5.9006E+02 5.6974E+02 - 2.8184E-01 1.0420E+03 1.0457E+03 5.0566E+02 4.7957E+02 - 3.1623E-01 8.7862E+02 8.8145E+02 4.2090E+02 4.0007E+02 - 3.5481E-01 7.3705E+02 7.2851E+02 3.5199E+02 3.3267E+02 - 3.9811E-01 6.1341E+02 5.9975E+02 2.9358E+02 2.7559E+02 - 4.4668E-01 5.0612E+02 4.9932E+02 2.4067E+02 2.2559E+02 - 5.0119E-01 4.1315E+02 4.1035E+02 1.9959E+02 1.8428E+02 - 5.6234E-01 3.3503E+02 3.3271E+02 1.6411E+02 1.4733E+02 - 6.3096E-01 2.7212E+02 2.6821E+02 1.3160E+02 1.1615E+02 - 7.0795E-01 2.2076E+02 2.1439E+02 1.0536E+02 9.3083E+01 - 7.9433E-01 1.7706E+02 1.7140E+02 8.3529E+01 7.3065E+01 - 8.9125E-01 1.4009E+02 1.3527E+02 6.5378E+01 5.7499E+01 - 1.0000E+00 1.1052E+02 1.0552E+02 5.0913E+01 4.4400E+01 - 1.1220E+00 8.6817E+01 8.2379E+01 3.9448E+01 3.3922E+01 - 1.2589E+00 6.7715E+01 6.3476E+01 3.0183E+01 2.5726E+01 - 1.4125E+00 5.2672E+01 4.8639E+01 2.3065E+01 1.9435E+01 - 1.5849E+00 4.0549E+01 3.7187E+01 1.7402E+01 1.4632E+01 - 1.7783E+00 3.0741E+01 2.8207E+01 1.3056E+01 1.0868E+01 - 1.9953E+00 2.3108E+01 2.1234E+01 9.7827E+00 7.9600E+00 - 2.2387E+00 1.7458E+01 1.5709E+01 7.1464E+00 5.8147E+00 - 2.5119E+00 1.3157E+01 1.1615E+01 5.1423E+00 4.1864E+00 - 2.8184E+00 9.8230E+00 8.6192E+00 3.7340E+00 3.0169E+00 - 3.1623E+00 7.2334E+00 6.2924E+00 2.7091E+00 2.1147E+00 - 3.5481E+00 5.3155E+00 4.5703E+00 1.9295E+00 1.5003E+00 - 3.9811E+00 3.8789E+00 3.3111E+00 1.3599E+00 1.0510E+00 - 4.4668E+00 2.8181E+00 2.3787E+00 9.4864E-01 7.2373E-01 - 5.0119E+00 2.0375E+00 1.7124E+00 6.5633E-01 4.9722E-01 - 5.6234E+00 1.4754E+00 1.2237E+00 4.5709E-01 3.4966E-01 - 6.3096E+00 1.0719E+00 8.7975E-01 3.1176E-01 2.4057E-01 - 7.0795E+00 7.6583E-01 6.3196E-01 2.0901E-01 1.5992E-01 - 7.9433E+00 5.4286E-01 4.4771E-01 1.4034E-01 1.0846E-01 - 8.9125E+00 3.9076E-01 3.0902E-01 9.5548E-02 7.2446E-02 - 1.0000E+01 2.7988E-01 2.2133E-01 6.5936E-02 4.8903E-02 - 1.1220E+01 1.9969E-01 1.5735E-01 4.4061E-02 3.2804E-02 - 1.2589E+01 1.4255E-01 1.1132E-01 2.9317E-02 2.2095E-02 - 1.4125E+01 1.0182E-01 7.8980E-02 1.9481E-02 1.4545E-02 - 1.5849E+01 7.2358E-02 5.5772E-02 1.2883E-02 9.7776E-03 - 1.7783E+01 5.1219E-02 3.9423E-02 8.6173E-03 6.5819E-03 - 1.9953E+01 3.6659E-02 2.7665E-02 5.7502E-03 4.2775E-03 - 2.2387E+01 2.5843E-02 1.9446E-02 3.9039E-03 2.8513E-03 - 2.5119E+01 1.8006E-02 1.3823E-02 2.5057E-03 1.9663E-03 - 2.8184E+01 1.2863E-02 9.8788E-03 1.6551E-03 1.3142E-03 - 3.1623E+01 9.3273E-03 6.9303E-03 1.1269E-03 8.8260E-04 - 3.5481E+01 6.6126E-03 4.9006E-03 7.5463E-04 5.8899E-04 - 3.9811E+01 4.6845E-03 3.4522E-03 5.0166E-04 3.9131E-04 - 4.4668E+01 3.3173E-03 2.4226E-03 3.3244E-04 2.6060E-04 - 5.0119E+01 2.3397E-03 1.7016E-03 2.2086E-04 1.7426E-04 - 5.6234E+01 1.6462E-03 1.1886E-03 1.4687E-04 1.1703E-04 - 6.3096E+01 1.1601E-03 8.3415E-04 9.9152E-05 7.7587E-05 - 7.0795E+01 8.2093E-04 5.8424E-04 6.6388E-05 5.1741E-05 - 7.9433E+01 5.8016E-04 4.1062E-04 4.4870E-05 3.4918E-05 - 8.9125E+01 4.0713E-04 2.8830E-04 3.0410E-05 2.3662E-05 - 1.0000E+02 2.8560E-04 1.9948E-04 1.9768E-05 1.5924E-05 - 1.1220E+02 2.0049E-04 1.3972E-04 1.3233E-05 1.0755E-05 - 1.2589E+02 1.4024E-04 9.7210E-05 8.8377E-06 7.2227E-06 - 1.4125E+02 9.8182E-05 6.7492E-05 5.9406E-06 4.7561E-06 - 1.5849E+02 6.8676E-05 4.6804E-05 3.9663E-06 3.1884E-06 - 1.7783E+02 4.7975E-05 3.2479E-05 2.6831E-06 2.2432E-06 - 1.9953E+02 3.3343E-05 2.2514E-05 1.8463E-06 1.5188E-06 - 2.2387E+02 2.3418E-05 1.5637E-05 1.2574E-06 1.0267E-06 - 2.5119E+02 1.6458E-05 1.1028E-05 8.3235E-07 6.8457E-07 - 2.8184E+02 1.1460E-05 7.5604E-06 5.5445E-07 4.3724E-07 - 3.1623E+02 7.9676E-06 5.1991E-06 3.7956E-07 3.0114E-07 - 3.5481E+02 5.5305E-06 3.5833E-06 2.5962E-07 2.0794E-07 - 3.9811E+02 3.8397E-06 2.4722E-06 1.7533E-07 1.3983E-07 - 4.4668E+02 2.6696E-06 1.6981E-06 1.1684E-07 9.2682E-08 - 5.0119E+02 1.8607E-06 1.1686E-06 7.8862E-08 6.2358E-08 - 5.6234E+02 1.2868E-06 8.0847E-07 5.3155E-08 4.2951E-08 - 6.3096E+02 8.7828E-07 5.5107E-07 3.5917E-08 2.8402E-08 - 7.0795E+02 6.0694E-07 3.7812E-07 2.3746E-08 1.8905E-08 - 7.9433E+02 4.1991E-07 2.5929E-07 1.5866E-08 1.3124E-08 - 8.9125E+02 2.8724E-07 1.7645E-07 1.0634E-08 8.6149E-09 - 1.0000E+03 1.9862E-07 1.2116E-07 7.2151E-09 5.6644E-09 - 1.1220E+03 1.3413E-07 8.1022E-08 4.9020E-09 3.7690E-09 - 1.2589E+03 9.0921E-08 5.5031E-08 3.2892E-09 2.5289E-09 - 1.4125E+03 6.2007E-08 3.7154E-08 2.2465E-09 1.6644E-09 - 1.5849E+03 4.2178E-08 2.4923E-08 1.4847E-09 1.0239E-09 - 1.7783E+03 2.8711E-08 1.6860E-08 9.7082E-10 6.6191E-10 - 1.9953E+03 1.9451E-08 1.1481E-08 6.4414E-10 4.8277E-10 - 2.2387E+03 1.2998E-08 7.6246E-09 4.2547E-10 3.1395E-10 - 2.5119E+03 8.6639E-09 5.0615E-09 2.8122E-10 2.0824E-10 - 2.8184E+03 5.7933E-09 3.3681E-09 1.8320E-10 1.3064E-10 - 3.1623E+03 4.0347E-09 2.3084E-09 1.1874E-10 8.5379E-11 - 3.5481E+03 2.6424E-09 1.5044E-09 7.7276E-11 5.6522E-11 - 3.9811E+03 1.7545E-09 1.0023E-09 5.0770E-11 4.0201E-11 - 4.4668E+03 1.1756E-09 6.6156E-10 3.3402E-11 2.3492E-11 - 5.0119E+03 7.8557E-10 4.3799E-10 2.2078E-11 1.4831E-11 - 5.6234E+03 5.0805E-10 2.8880E-10 1.5050E-11 1.1002E-11 - 6.3096E+03 3.3839E-10 1.9161E-10 1.0379E-11 6.9428E-12 - 7.0795E+03 2.2507E-10 1.2723E-10 6.3852E-12 4.2232E-12 - 7.9433E+03 1.4744E-10 8.3403E-11 4.1873E-12 2.9271E-12 - 8.9125E+03 9.6556E-11 5.3841E-11 2.8062E-12 1.9557E-12 - 1.0000E+04 6.4083E-11 3.5331E-11 1.9617E-12 1.3903E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6602E+03 3.7167E+03 1.7678E+03 1.8112E+03 - 1.1220E-01 3.3155E+03 3.3527E+03 1.6097E+03 1.6213E+03 - 1.2589E-01 2.9864E+03 3.0116E+03 1.4516E+03 1.4370E+03 - 1.4125E-01 2.6521E+03 2.7017E+03 1.2919E+03 1.2868E+03 - 1.5849E-01 2.3456E+03 2.3815E+03 1.1428E+03 1.1297E+03 - 1.7783E-01 2.0772E+03 2.0781E+03 1.0058E+03 9.7645E+02 - 1.9953E-01 1.8076E+03 1.8142E+03 8.7148E+02 8.4580E+02 - 2.2387E-01 1.5503E+03 1.5591E+03 7.5907E+02 7.2202E+02 - 2.5119E-01 1.3274E+03 1.3259E+03 6.5146E+02 6.1247E+02 - 2.8184E-01 1.1316E+03 1.1194E+03 5.4482E+02 5.1976E+02 - 3.1623E-01 9.5225E+02 9.3989E+02 4.6235E+02 4.3386E+02 - 3.5481E-01 7.9032E+02 7.8581E+02 3.8780E+02 3.5714E+02 - 3.9811E-01 6.5320E+02 6.5160E+02 3.1913E+02 2.9607E+02 - 4.4668E-01 5.3779E+02 5.3587E+02 2.6315E+02 2.4293E+02 - 5.0119E-01 4.4155E+02 4.3696E+02 2.1556E+02 1.9487E+02 - 5.6234E-01 3.6153E+02 3.5372E+02 1.7301E+02 1.5553E+02 - 6.3096E-01 2.9226E+02 2.8271E+02 1.3843E+02 1.2372E+02 - 7.0795E-01 2.3209E+02 2.2499E+02 1.1183E+02 9.7997E+01 - 7.9433E-01 1.8409E+02 1.7981E+02 8.9067E+01 7.6546E+01 - 8.9125E-01 1.4708E+02 1.4194E+02 6.8912E+01 5.9239E+01 - 1.0000E+00 1.1542E+02 1.1076E+02 5.3497E+01 4.6339E+01 - 1.1220E+00 8.9748E+01 8.5745E+01 4.1325E+01 3.5618E+01 - 1.2589E+00 7.0102E+01 6.6498E+01 3.1906E+01 2.7105E+01 - 1.4125E+00 5.4340E+01 5.0732E+01 2.4481E+01 2.0387E+01 - 1.5849E+00 4.1316E+01 3.8294E+01 1.8320E+01 1.5170E+01 - 1.7783E+00 3.1388E+01 2.9002E+01 1.3576E+01 1.1096E+01 - 1.9953E+00 2.3838E+01 2.1588E+01 1.0019E+01 8.0803E+00 - 2.2387E+00 1.7844E+01 1.5893E+01 7.3017E+00 5.9168E+00 - 2.5119E+00 1.3216E+01 1.1833E+01 5.3380E+00 4.3302E+00 - 2.8184E+00 9.7900E+00 8.7012E+00 3.8944E+00 3.0954E+00 - 3.1623E+00 7.2649E+00 6.3019E+00 2.7556E+00 2.1487E+00 - 3.5481E+00 5.3451E+00 4.5881E+00 1.9527E+00 1.5201E+00 - 3.9811E+00 3.8880E+00 3.3233E+00 1.3738E+00 1.0585E+00 - 4.4668E+00 2.8140E+00 2.3915E+00 9.4882E-01 7.2659E-01 - 5.0119E+00 2.0355E+00 1.7087E+00 6.5628E-01 5.0125E-01 - 5.6234E+00 1.4658E+00 1.2210E+00 4.5498E-01 3.4449E-01 - 6.3096E+00 1.0542E+00 8.6553E-01 3.1178E-01 2.3562E-01 - 7.0795E+00 7.5490E-01 6.1177E-01 2.1226E-01 1.5867E-01 - 7.9433E+00 5.4369E-01 4.3896E-01 1.4442E-01 1.0707E-01 - 8.9125E+00 3.9039E-01 3.1038E-01 9.6872E-02 7.2972E-02 - 1.0000E+01 2.8023E-01 2.2165E-01 6.5428E-02 4.8205E-02 - 1.1220E+01 2.0018E-01 1.5728E-01 4.4337E-02 3.2194E-02 - 1.2589E+01 1.4255E-01 1.1091E-01 2.9433E-02 2.2327E-02 - 1.4125E+01 1.0113E-01 7.8536E-02 1.9450E-02 1.5130E-02 - 1.5849E+01 7.1944E-02 5.6085E-02 1.2950E-02 9.9110E-03 - 1.7783E+01 5.1535E-02 3.9703E-02 8.5640E-03 6.6290E-03 - 1.9953E+01 3.6768E-02 2.7861E-02 5.7237E-03 4.4113E-03 - 2.2387E+01 2.6486E-02 1.9677E-02 3.8100E-03 2.9173E-03 - 2.5119E+01 1.8761E-02 1.3730E-02 2.6150E-03 2.0103E-03 - 2.8184E+01 1.3096E-02 9.8099E-03 1.7144E-03 1.3972E-03 - 3.1623E+01 9.3349E-03 6.9355E-03 1.1301E-03 8.7412E-04 - 3.5481E+01 6.6148E-03 4.8870E-03 7.4768E-04 5.8584E-04 - 3.9811E+01 4.6833E-03 3.4492E-03 4.9786E-04 3.9156E-04 - 4.4668E+01 3.3009E-03 2.4175E-03 3.3005E-04 2.5894E-04 - 5.0119E+01 2.3409E-03 1.6902E-03 2.2059E-04 1.7278E-04 - 5.6234E+01 1.6527E-03 1.1879E-03 1.4701E-04 1.1811E-04 - 6.3096E+01 1.1656E-03 8.3423E-04 9.7537E-05 7.8501E-05 - 7.0795E+01 8.2066E-04 5.8489E-04 6.4424E-05 5.1487E-05 - 7.9433E+01 5.7742E-04 4.0932E-04 4.4019E-05 3.4802E-05 - 8.9125E+01 4.0583E-04 2.8284E-04 2.9606E-05 2.3531E-05 - 1.0000E+02 2.8545E-04 1.9955E-04 1.9347E-05 1.5874E-05 - 1.1220E+02 1.9967E-04 1.3856E-04 1.3064E-05 1.0799E-05 - 1.2589E+02 1.4008E-04 9.6520E-05 8.9550E-06 7.2385E-06 - 1.4125E+02 9.8308E-05 6.7118E-05 6.0023E-06 4.8470E-06 - 1.5849E+02 6.8749E-05 4.6879E-05 4.0202E-06 3.2172E-06 - 1.7783E+02 4.8058E-05 3.2759E-05 2.7292E-06 2.2117E-06 - 1.9953E+02 3.3560E-05 2.2594E-05 1.8151E-06 1.5395E-06 - 2.2387E+02 2.3410E-05 1.5644E-05 1.2285E-06 9.9937E-07 - 2.5119E+02 1.6285E-05 1.0862E-05 8.2823E-07 6.5268E-07 - 2.8184E+02 1.1305E-05 7.5437E-06 5.5220E-07 4.4925E-07 - 3.1623E+02 7.9180E-06 5.1978E-06 3.8046E-07 3.0207E-07 - 3.5481E+02 5.5250E-06 3.5829E-06 2.5304E-07 2.0008E-07 - 3.9811E+02 3.8500E-06 2.4563E-06 1.7343E-07 1.3564E-07 - 4.4668E+02 2.6513E-06 1.6857E-06 1.2026E-07 9.1717E-08 - 5.0119E+02 1.8362E-06 1.1673E-06 7.9081E-08 6.1560E-08 - 5.6234E+02 1.2794E-06 8.0641E-07 5.2316E-08 4.1187E-08 - 6.3096E+02 8.8053E-07 5.5104E-07 3.5523E-08 2.7500E-08 - 7.0795E+02 6.0817E-07 3.7818E-07 2.3879E-08 1.8567E-08 - 7.9433E+02 4.1643E-07 2.5885E-07 1.6005E-08 1.2698E-08 - 8.9125E+02 2.8710E-07 1.7585E-07 1.0802E-08 8.6095E-09 - 1.0000E+03 1.9823E-07 1.1979E-07 7.2176E-09 5.6441E-09 - 1.1220E+03 1.3492E-07 8.0733E-08 4.9591E-09 3.7009E-09 - 1.2589E+03 9.2334E-08 5.5148E-08 3.1823E-09 2.4475E-09 - 1.4125E+03 6.2291E-08 3.7621E-08 2.0414E-09 1.5943E-09 - 1.5849E+03 4.2065E-08 2.5557E-08 1.4312E-09 1.0508E-09 - 1.7783E+03 2.8461E-08 1.7026E-08 9.4529E-10 6.9809E-10 - 1.9953E+03 1.9339E-08 1.1411E-08 6.1393E-10 4.4019E-10 - 2.2387E+03 1.3009E-08 7.7131E-09 4.4141E-10 2.9517E-10 - 2.5119E+03 8.6896E-09 5.1496E-09 2.9480E-10 2.0977E-10 - 2.8184E+03 5.8498E-09 3.4294E-09 1.9170E-10 1.3674E-10 - 3.1623E+03 4.0480E-09 2.3602E-09 1.1816E-10 8.9039E-11 - 3.5481E+03 2.6149E-09 1.5142E-09 8.1180E-11 5.9198E-11 - 3.9811E+03 1.7538E-09 1.0027E-09 5.3493E-11 4.0696E-11 - 4.4668E+03 1.1703E-09 6.6207E-10 3.3661E-11 2.6973E-11 - 5.0119E+03 7.7188E-10 4.3514E-10 2.2931E-11 1.6379E-11 - 5.6234E+03 5.0843E-10 2.8262E-10 1.4345E-11 1.0639E-11 - 6.3096E+03 3.3657E-10 1.8787E-10 9.9494E-12 7.3153E-12 - 7.0795E+03 2.2176E-10 1.2545E-10 6.4355E-12 4.6816E-12 - 7.9433E+03 1.4715E-10 8.2632E-11 3.9702E-12 2.8105E-12 - 8.9125E+03 9.8014E-11 5.4832E-11 2.7295E-12 1.8781E-12 - 1.0000E+04 6.4633E-11 3.5567E-11 1.8613E-12 1.3331E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.1649E+03 4.2414E+03 2.0310E+03 2.0525E+03 - 1.1220E-01 3.7708E+03 3.8500E+03 1.8335E+03 1.8480E+03 - 1.2589E-01 3.3876E+03 3.4591E+03 1.6297E+03 1.6561E+03 - 1.4125E-01 3.0501E+03 3.0699E+03 1.4673E+03 1.4601E+03 - 1.5849E-01 2.7134E+03 2.7186E+03 1.3067E+03 1.2826E+03 - 1.7783E-01 2.3743E+03 2.3833E+03 1.1466E+03 1.1182E+03 - 1.9953E-01 2.0576E+03 2.0583E+03 9.9544E+02 9.5648E+02 - 2.2387E-01 1.7847E+03 1.7718E+03 8.5588E+02 8.1912E+02 - 2.5119E-01 1.5284E+03 1.5199E+03 7.3675E+02 6.9785E+02 - 2.8184E-01 1.2838E+03 1.2843E+03 6.2233E+02 5.8733E+02 - 3.1623E-01 1.0733E+03 1.0710E+03 5.2254E+02 4.9108E+02 - 3.5481E-01 8.9288E+02 8.8852E+02 4.4146E+02 4.0469E+02 - 3.9811E-01 7.3957E+02 7.3182E+02 3.6560E+02 3.2798E+02 - 4.4668E-01 6.0590E+02 6.0033E+02 2.9804E+02 2.6558E+02 - 5.0119E-01 4.9398E+02 4.8853E+02 2.4109E+02 2.1575E+02 - 5.6234E-01 4.0083E+02 3.9458E+02 1.9233E+02 1.7205E+02 - 6.3096E-01 3.2174E+02 3.1494E+02 1.5524E+02 1.3778E+02 - 7.0795E-01 2.5613E+02 2.4906E+02 1.2398E+02 1.0930E+02 - 7.9433E-01 2.0192E+02 1.9520E+02 9.6132E+01 8.4455E+01 - 8.9125E-01 1.5859E+02 1.5302E+02 7.5442E+01 6.5507E+01 - 1.0000E+00 1.2403E+02 1.1921E+02 5.8774E+01 5.0466E+01 - 1.1220E+00 9.6170E+01 9.1942E+01 4.4917E+01 3.8029E+01 - 1.2589E+00 7.4517E+01 7.0055E+01 3.4193E+01 2.8527E+01 - 1.4125E+00 5.7127E+01 5.3276E+01 2.5934E+01 2.1361E+01 - 1.5849E+00 4.3509E+01 4.0321E+01 1.9341E+01 1.5817E+01 - 1.7783E+00 3.3038E+01 3.0237E+01 1.4242E+01 1.1572E+01 - 1.9953E+00 2.4996E+01 2.2410E+01 1.0506E+01 8.4261E+00 - 2.2387E+00 1.8728E+01 1.6572E+01 7.6388E+00 6.1335E+00 - 2.5119E+00 1.3740E+01 1.2211E+01 5.4593E+00 4.3970E+00 - 2.8184E+00 1.0104E+01 8.9013E+00 3.9121E+00 3.1043E+00 - 3.1623E+00 7.4187E+00 6.4419E+00 2.8142E+00 2.1763E+00 - 3.5481E+00 5.4493E+00 4.6632E+00 1.9934E+00 1.5325E+00 - 3.9811E+00 3.9718E+00 3.3559E+00 1.3918E+00 1.0726E+00 - 4.4668E+00 2.8652E+00 2.4094E+00 9.7038E-01 7.4607E-01 - 5.0119E+00 2.0564E+00 1.7337E+00 6.7087E-01 5.1155E-01 - 5.6234E+00 1.4844E+00 1.2363E+00 4.5857E-01 3.4953E-01 - 6.3096E+00 1.0680E+00 8.7942E-01 3.1554E-01 2.3692E-01 - 7.0795E+00 7.6581E-01 6.2481E-01 2.1406E-01 1.6031E-01 - 7.9433E+00 5.5579E-01 4.3977E-01 1.4345E-01 1.0803E-01 - 8.9125E+00 3.9594E-01 3.0829E-01 9.7134E-02 7.3070E-02 - 1.0000E+01 2.7896E-01 2.2170E-01 6.5612E-02 4.9560E-02 - 1.1220E+01 1.9945E-01 1.5651E-01 4.4208E-02 3.3172E-02 - 1.2589E+01 1.4267E-01 1.1036E-01 2.9443E-02 2.2190E-02 - 1.4125E+01 1.0191E-01 7.8549E-02 1.9539E-02 1.4871E-02 - 1.5849E+01 7.2574E-02 5.6135E-02 1.2967E-02 9.9130E-03 - 1.7783E+01 5.1739E-02 3.9357E-02 8.4783E-03 6.6863E-03 - 1.9953E+01 3.6602E-02 2.7505E-02 5.7175E-03 4.4359E-03 - 2.2387E+01 2.5968E-02 1.9320E-02 3.8889E-03 2.9613E-03 - 2.5119E+01 1.8535E-02 1.3699E-02 2.5745E-03 1.9834E-03 - 2.8184E+01 1.3104E-02 9.7976E-03 1.7943E-03 1.3053E-03 - 3.1623E+01 9.3539E-03 6.9426E-03 1.1245E-03 8.7438E-04 - 3.5481E+01 6.6337E-03 4.8958E-03 7.4730E-04 5.8698E-04 - 3.9811E+01 4.6842E-03 3.4421E-03 4.9756E-04 3.9173E-04 - 4.4668E+01 3.3072E-03 2.4161E-03 3.2997E-04 2.5985E-04 - 5.0119E+01 2.3400E-03 1.6920E-03 2.2036E-04 1.7441E-04 - 5.6234E+01 1.6477E-03 1.1889E-03 1.4713E-04 1.1648E-04 - 6.3096E+01 1.1603E-03 8.4190E-04 9.9112E-05 7.7072E-05 - 7.0795E+01 8.1951E-04 5.8979E-04 6.6474E-05 5.1929E-05 - 7.9433E+01 5.7534E-04 4.1133E-04 4.4182E-05 3.5042E-05 - 8.9125E+01 4.0375E-04 2.8600E-04 2.9614E-05 2.3796E-05 - 1.0000E+02 2.8543E-04 1.9966E-04 1.9393E-05 1.5879E-05 - 1.1220E+02 2.0058E-04 1.3945E-04 1.3123E-05 1.0709E-05 - 1.2589E+02 1.4020E-04 9.7383E-05 8.8749E-06 7.2164E-06 - 1.4125E+02 9.7738E-05 6.7875E-05 5.9795E-06 4.7328E-06 - 1.5849E+02 6.8291E-05 4.6953E-05 4.0133E-06 3.2692E-06 - 1.7783E+02 4.8031E-05 3.2356E-05 2.7165E-06 2.2396E-06 - 1.9953E+02 3.3628E-05 2.2510E-05 1.8390E-06 1.4417E-06 - 2.2387E+02 2.3366E-05 1.5648E-05 1.2371E-06 9.5768E-07 - 2.5119E+02 1.6242E-05 1.0772E-05 8.3485E-07 6.5336E-07 - 2.8184E+02 1.1365E-05 7.4157E-06 5.6969E-07 4.4750E-07 - 3.1623E+02 7.9429E-06 5.1867E-06 3.9147E-07 3.0441E-07 - 3.5481E+02 5.5132E-06 3.5797E-06 2.6651E-07 2.1042E-07 - 3.9811E+02 3.8268E-06 2.4771E-06 1.7696E-07 1.4140E-07 - 4.4668E+02 2.6607E-06 1.7080E-06 1.1840E-07 9.2098E-08 - 5.0119E+02 1.8470E-06 1.1691E-06 7.8713E-08 6.1036E-08 - 5.6234E+02 1.2870E-06 8.0529E-07 5.2950E-08 4.1384E-08 - 6.3096E+02 8.8477E-07 5.4977E-07 3.4765E-08 2.7688E-08 - 7.0795E+02 6.0698E-07 3.7678E-07 2.3577E-08 1.8635E-08 - 7.9433E+02 4.1688E-07 2.5850E-07 1.6042E-08 1.2964E-08 - 8.9125E+02 2.8623E-07 1.7742E-07 1.0776E-08 8.4844E-09 - 1.0000E+03 1.9747E-07 1.2058E-07 7.1351E-09 5.5067E-09 - 1.1220E+03 1.3480E-07 8.1269E-08 4.7177E-09 3.8158E-09 - 1.2589E+03 9.1676E-08 5.5437E-08 3.2283E-09 2.6164E-09 - 1.4125E+03 6.1974E-08 3.7146E-08 2.1482E-09 1.7266E-09 - 1.5849E+03 4.2142E-08 2.5337E-08 1.4397E-09 1.0708E-09 - 1.7783E+03 2.8568E-08 1.7242E-08 9.4331E-10 7.3459E-10 - 1.9953E+03 1.9313E-08 1.1366E-08 6.4145E-10 4.9691E-10 - 2.2387E+03 1.3097E-08 7.6598E-09 4.5154E-10 3.0237E-10 - 2.5119E+03 8.7418E-09 5.1721E-09 3.1717E-10 2.0372E-10 - 2.8184E+03 5.8407E-09 3.4194E-09 1.9595E-10 1.3272E-10 - 3.1623E+03 4.0284E-09 2.3308E-09 1.1769E-10 8.6960E-11 - 3.5481E+03 2.6061E-09 1.5102E-09 7.6788E-11 5.6589E-11 - 3.9811E+03 1.7402E-09 9.9550E-10 5.1454E-11 3.8706E-11 - 4.4668E+03 1.1661E-09 6.5379E-10 3.3411E-11 2.5636E-11 - 5.0119E+03 7.8058E-10 4.2857E-10 2.3970E-11 1.7871E-11 - 5.6234E+03 5.1457E-10 2.8438E-10 1.6857E-11 1.1569E-11 - 6.3096E+03 3.3863E-10 1.8881E-10 9.9897E-12 7.2962E-12 - 7.0795E+03 2.2516E-10 1.2452E-10 5.9967E-12 4.1821E-12 - 7.9433E+03 1.4827E-10 8.2200E-11 3.9976E-12 2.7329E-12 - 8.9125E+03 9.7257E-11 5.3764E-11 2.8408E-12 2.0075E-12 - 1.0000E+04 6.3267E-11 3.5325E-11 1.9227E-12 1.3174E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.2139E+03 4.2376E+03 2.0249E+03 2.0757E+03 - 1.1220E-01 3.7984E+03 3.8191E+03 1.8246E+03 1.8643E+03 - 1.2589E-01 3.3967E+03 3.4179E+03 1.6333E+03 1.6466E+03 - 1.4125E-01 3.0346E+03 3.0328E+03 1.4412E+03 1.4528E+03 - 1.5849E-01 2.6976E+03 2.6728E+03 1.2726E+03 1.2680E+03 - 1.7783E-01 2.3481E+03 2.3279E+03 1.1270E+03 1.0900E+03 - 1.9953E-01 2.0336E+03 2.0159E+03 9.7633E+02 9.4476E+02 - 2.2387E-01 1.7565E+03 1.7326E+03 8.3240E+02 8.1330E+02 - 2.5119E-01 1.4885E+03 1.4716E+03 7.1362E+02 6.8799E+02 - 2.8184E-01 1.2492E+03 1.2450E+03 6.0348E+02 5.7411E+02 - 3.1623E-01 1.0458E+03 1.0445E+03 5.0129E+02 4.7618E+02 - 3.5481E-01 8.7038E+02 8.6613E+02 4.2021E+02 3.9393E+02 - 3.9811E-01 7.1904E+02 7.1544E+02 3.5119E+02 3.2242E+02 - 4.4668E-01 5.8933E+02 5.8615E+02 2.8782E+02 2.6211E+02 - 5.0119E-01 4.8141E+02 4.7305E+02 2.3313E+02 2.1107E+02 - 5.6234E-01 3.9087E+02 3.7975E+02 1.8683E+02 1.6917E+02 - 6.3096E-01 3.1220E+02 3.0469E+02 1.5079E+02 1.3406E+02 - 7.0795E-01 2.4735E+02 2.4018E+02 1.2047E+02 1.0477E+02 - 7.9433E-01 1.9729E+02 1.8871E+02 9.4474E+01 8.2331E+01 - 8.9125E-01 1.5543E+02 1.4821E+02 7.3014E+01 6.3938E+01 - 1.0000E+00 1.2191E+02 1.1572E+02 5.6801E+01 4.9130E+01 - 1.1220E+00 9.5096E+01 8.9868E+01 4.3842E+01 3.7422E+01 - 1.2589E+00 7.3127E+01 6.8801E+01 3.3497E+01 2.8055E+01 - 1.4125E+00 5.6027E+01 5.2401E+01 2.5031E+01 2.1053E+01 - 1.5849E+00 4.2772E+01 3.9745E+01 1.8788E+01 1.5695E+01 - 1.7783E+00 3.2478E+01 2.9627E+01 1.4065E+01 1.1493E+01 - 1.9953E+00 2.4530E+01 2.2130E+01 1.0369E+01 8.3520E+00 - 2.2387E+00 1.8294E+01 1.6485E+01 7.6247E+00 5.9975E+00 - 2.5119E+00 1.3476E+01 1.2190E+01 5.5346E+00 4.2337E+00 - 2.8184E+00 1.0006E+01 8.8839E+00 3.9500E+00 3.0109E+00 - 3.1623E+00 7.4009E+00 6.4003E+00 2.8028E+00 2.1542E+00 - 3.5481E+00 5.4098E+00 4.6271E+00 1.9698E+00 1.5272E+00 - 3.9811E+00 3.9147E+00 3.3481E+00 1.3835E+00 1.0681E+00 - 4.4668E+00 2.8379E+00 2.4071E+00 9.5994E-01 7.3517E-01 - 5.0119E+00 2.0554E+00 1.7245E+00 6.6569E-01 5.0790E-01 - 5.6234E+00 1.4830E+00 1.2309E+00 4.5739E-01 3.4355E-01 - 6.3096E+00 1.0659E+00 8.7242E-01 3.0995E-01 2.3493E-01 - 7.0795E+00 7.6077E-01 6.1650E-01 2.1299E-01 1.6085E-01 - 7.9433E+00 5.4291E-01 4.4024E-01 1.4569E-01 1.0746E-01 - 8.9125E+00 3.8663E-01 3.1058E-01 9.6088E-02 7.4133E-02 - 1.0000E+01 2.7850E-01 2.2137E-01 6.4505E-02 4.8896E-02 - 1.1220E+01 1.9901E-01 1.5603E-01 4.3578E-02 3.2709E-02 - 1.2589E+01 1.4240E-01 1.1057E-01 2.9224E-02 2.2062E-02 - 1.4125E+01 1.0176E-01 7.8406E-02 1.9775E-02 1.4655E-02 - 1.5849E+01 7.2194E-02 5.4906E-02 1.3077E-02 9.6778E-03 - 1.7783E+01 5.1163E-02 3.9043E-02 8.6355E-03 6.5093E-03 - 1.9953E+01 3.6630E-02 2.8051E-02 5.6971E-03 4.3726E-03 - 2.2387E+01 2.6198E-02 1.9739E-02 3.7948E-03 2.8696E-03 - 2.5119E+01 1.8651E-02 1.3995E-02 2.5590E-03 1.9345E-03 - 2.8184E+01 1.3145E-02 9.8829E-03 1.7215E-03 1.2845E-03 - 3.1623E+01 9.3247E-03 6.9403E-03 1.1205E-03 8.7984E-04 - 3.5481E+01 6.6324E-03 4.8982E-03 7.4927E-04 5.8729E-04 - 3.9811E+01 4.6929E-03 3.4475E-03 4.9991E-04 3.8908E-04 - 4.4668E+01 3.3139E-03 2.4197E-03 3.3266E-04 2.5920E-04 - 5.0119E+01 2.3403E-03 1.7019E-03 2.1908E-04 1.7544E-04 - 5.6234E+01 1.6553E-03 1.1980E-03 1.4576E-04 1.1577E-04 - 6.3096E+01 1.1721E-03 8.3839E-04 9.8535E-05 7.7200E-05 - 7.0795E+01 8.2368E-04 5.8456E-04 6.5514E-05 5.3186E-05 - 7.9433E+01 5.7698E-04 4.0949E-04 4.3156E-05 3.5664E-05 - 8.9125E+01 4.0516E-04 2.8453E-04 2.9332E-05 2.3150E-05 - 1.0000E+02 2.8589E-04 1.9892E-04 1.9495E-05 1.5790E-05 - 1.1220E+02 1.9958E-04 1.3890E-04 1.3092E-05 1.0654E-05 - 1.2589E+02 1.3899E-04 9.6652E-05 8.9121E-06 7.2720E-06 - 1.4125E+02 9.7735E-05 6.7101E-05 5.9483E-06 4.8852E-06 - 1.5849E+02 6.8535E-05 4.6673E-05 3.9377E-06 3.2390E-06 - 1.7783E+02 4.8018E-05 3.2383E-05 2.6732E-06 2.1992E-06 - 1.9953E+02 3.3630E-05 2.2534E-05 1.8214E-06 1.4911E-06 - 2.2387E+02 2.3511E-05 1.5645E-05 1.2411E-06 1.0109E-06 - 2.5119E+02 1.6360E-05 1.0787E-05 8.5616E-07 6.8168E-07 - 2.8184E+02 1.1277E-05 7.4482E-06 5.4943E-07 4.4628E-07 - 3.1623E+02 7.9651E-06 5.1721E-06 3.7993E-07 3.0534E-07 - 3.5481E+02 5.5012E-06 3.5868E-06 2.5434E-07 2.0456E-07 - 3.9811E+02 3.8131E-06 2.4822E-06 1.6846E-07 1.3722E-07 - 4.4668E+02 2.6539E-06 1.7039E-06 1.1783E-07 9.0222E-08 - 5.0119E+02 1.8437E-06 1.1628E-06 7.9599E-08 5.9997E-08 - 5.6234E+02 1.2785E-06 8.0392E-07 5.2849E-08 4.1164E-08 - 6.3096E+02 8.7592E-07 5.5144E-07 3.5333E-08 2.8278E-08 - 7.0795E+02 6.0435E-07 3.7678E-07 2.4405E-08 1.8913E-08 - 7.9433E+02 4.1720E-07 2.5797E-07 1.6297E-08 1.2391E-08 - 8.9125E+02 2.8827E-07 1.7704E-07 1.0408E-08 8.0034E-09 - 1.0000E+03 1.9815E-07 1.2164E-07 7.1556E-09 5.4920E-09 - 1.1220E+03 1.3422E-07 8.1621E-08 4.8419E-09 3.6791E-09 - 1.2589E+03 9.2330E-08 5.5503E-08 3.1213E-09 2.4161E-09 - 1.4125E+03 6.3069E-08 3.7730E-08 2.0731E-09 1.6619E-09 - 1.5849E+03 4.2710E-08 2.4933E-08 1.4883E-09 1.1366E-09 - 1.7783E+03 2.8886E-08 1.6658E-08 9.8321E-10 7.8557E-10 - 1.9953E+03 1.9444E-08 1.1437E-08 5.9971E-10 4.9054E-10 - 2.2387E+03 1.3080E-08 7.7069E-09 4.0444E-10 3.1428E-10 - 2.5119E+03 8.7436E-09 5.1551E-09 2.9893E-10 2.0959E-10 - 2.8184E+03 5.9268E-09 3.4144E-09 1.9586E-10 1.4645E-10 - 3.1623E+03 4.0647E-09 2.3140E-09 1.2055E-10 9.0165E-11 - 3.5481E+03 2.6216E-09 1.4933E-09 7.9039E-11 6.1999E-11 - 3.9811E+03 1.7437E-09 9.8968E-10 5.2902E-11 4.1459E-11 - 4.4668E+03 1.1644E-09 6.5415E-10 3.5702E-11 2.5269E-11 - 5.0119E+03 7.7056E-10 4.3477E-10 2.2273E-11 1.6645E-11 - 5.6234E+03 5.0968E-10 2.8621E-10 1.5244E-11 1.1353E-11 - 6.3096E+03 3.4273E-10 1.9216E-10 1.0179E-11 7.1941E-12 - 7.0795E+03 2.2549E-10 1.2775E-10 6.3812E-12 4.5728E-12 - 7.9433E+03 1.4756E-10 8.2264E-11 3.8813E-12 2.8907E-12 - 8.9125E+03 9.6986E-11 5.3612E-11 2.6998E-12 1.8420E-12 - 1.0000E+04 6.3528E-11 3.5482E-11 1.8170E-12 1.0871E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6631E+03 3.6816E+03 1.7280E+03 1.8232E+03 - 1.1220E-01 3.2919E+03 3.2914E+03 1.5532E+03 1.6291E+03 - 1.2589E-01 2.9581E+03 2.9067E+03 1.3959E+03 1.4365E+03 - 1.4125E-01 2.6205E+03 2.5906E+03 1.2321E+03 1.2651E+03 - 1.5849E-01 2.3037E+03 2.3037E+03 1.0762E+03 1.1012E+03 - 1.7783E-01 2.0023E+03 2.0082E+03 9.4076E+02 9.5706E+02 - 1.9953E-01 1.7382E+03 1.7114E+03 8.1077E+02 8.2527E+02 - 2.2387E-01 1.4873E+03 1.4578E+03 6.9805E+02 6.9469E+02 - 2.5119E-01 1.2593E+03 1.2447E+03 6.0065E+02 5.8900E+02 - 2.8184E-01 1.0672E+03 1.0527E+03 5.0393E+02 4.9699E+02 - 3.1623E-01 8.9801E+02 8.8032E+02 4.2376E+02 4.1256E+02 - 3.5481E-01 7.4914E+02 7.2805E+02 3.5695E+02 3.4229E+02 - 3.9811E-01 6.1901E+02 6.0151E+02 2.9482E+02 2.8092E+02 - 4.4668E-01 5.0682E+02 4.9387E+02 2.4203E+02 2.2863E+02 - 5.0119E-01 4.1543E+02 4.0124E+02 1.9851E+02 1.8480E+02 - 5.6234E-01 3.3829E+02 3.2509E+02 1.6157E+02 1.4742E+02 - 6.3096E-01 2.7321E+02 2.6169E+02 1.2921E+02 1.1653E+02 - 7.0795E-01 2.1873E+02 2.1020E+02 1.0288E+02 9.2571E+01 - 7.9433E-01 1.7328E+02 1.6672E+02 8.1367E+01 7.3062E+01 - 8.9125E-01 1.3769E+02 1.3173E+02 6.4046E+01 5.7116E+01 - 1.0000E+00 1.0944E+02 1.0395E+02 5.0163E+01 4.3831E+01 - 1.1220E+00 8.5603E+01 8.0980E+01 3.8956E+01 3.3626E+01 - 1.2589E+00 6.7165E+01 6.2585E+01 2.9901E+01 2.5733E+01 - 1.4125E+00 5.2190E+01 4.8321E+01 2.3063E+01 1.9602E+01 - 1.5849E+00 4.0181E+01 3.6933E+01 1.7364E+01 1.4531E+01 - 1.7783E+00 3.0619E+01 2.8089E+01 1.2846E+01 1.0764E+01 - 1.9953E+00 2.2976E+01 2.1144E+01 9.5922E+00 8.0064E+00 - 2.2387E+00 1.7363E+01 1.5707E+01 7.1303E+00 5.8460E+00 - 2.5119E+00 1.3104E+01 1.1684E+01 5.2336E+00 4.2578E+00 - 2.8184E+00 9.8173E+00 8.5743E+00 3.7692E+00 3.0297E+00 - 3.1623E+00 7.2139E+00 6.2678E+00 2.6915E+00 2.1326E+00 - 3.5481E+00 5.2730E+00 4.5476E+00 1.8943E+00 1.4986E+00 - 3.9811E+00 3.8693E+00 3.3010E+00 1.3235E+00 1.0478E+00 - 4.4668E+00 2.8318E+00 2.3752E+00 9.3131E-01 7.3320E-01 - 5.0119E+00 2.0481E+00 1.6999E+00 6.5031E-01 5.0476E-01 - 5.6234E+00 1.4822E+00 1.2247E+00 4.5281E-01 3.4364E-01 - 6.3096E+00 1.0654E+00 8.7863E-01 3.1172E-01 2.3661E-01 - 7.0795E+00 7.6277E-01 6.2231E-01 2.1407E-01 1.6213E-01 - 7.9433E+00 5.5030E-01 4.4269E-01 1.4066E-01 1.0809E-01 - 8.9125E+00 3.9596E-01 3.1499E-01 9.3920E-02 7.2358E-02 - 1.0000E+01 2.8073E-01 2.2256E-01 6.5234E-02 5.0164E-02 - 1.1220E+01 1.9888E-01 1.5762E-01 4.3874E-02 3.2903E-02 - 1.2589E+01 1.4218E-01 1.1109E-01 2.8855E-02 2.1943E-02 - 1.4125E+01 1.0197E-01 7.8554E-02 1.9167E-02 1.4828E-02 - 1.5849E+01 7.2761E-02 5.6115E-02 1.3017E-02 9.9387E-03 - 1.7783E+01 5.1433E-02 3.9914E-02 8.7267E-03 6.7361E-03 - 1.9953E+01 3.6804E-02 2.7958E-02 5.8988E-03 4.3907E-03 - 2.2387E+01 2.6322E-02 1.9637E-02 3.8747E-03 2.9368E-03 - 2.5119E+01 1.8564E-02 1.4092E-02 2.5092E-03 1.9688E-03 - 2.8184E+01 1.3059E-02 1.0053E-02 1.6748E-03 1.2346E-03 - 3.1623E+01 9.3645E-03 6.9104E-03 1.1315E-03 8.8047E-04 - 3.5481E+01 6.6446E-03 4.8774E-03 7.4966E-04 5.8825E-04 - 3.9811E+01 4.7072E-03 3.4398E-03 4.9421E-04 3.8860E-04 - 4.4668E+01 3.3245E-03 2.4199E-03 3.2889E-04 2.6009E-04 - 5.0119E+01 2.3416E-03 1.6991E-03 2.2005E-04 1.7554E-04 - 5.6234E+01 1.6557E-03 1.1967E-03 1.4730E-04 1.1766E-04 - 6.3096E+01 1.1710E-03 8.4209E-04 9.7974E-05 7.7692E-05 - 7.0795E+01 8.2395E-04 5.8936E-04 6.4840E-05 5.1648E-05 - 7.9433E+01 5.7807E-04 4.1085E-04 4.3411E-05 3.4583E-05 - 8.9125E+01 4.0763E-04 2.8501E-04 3.0002E-05 2.3728E-05 - 1.0000E+02 2.8557E-04 1.9977E-04 1.9451E-05 1.6044E-05 - 1.1220E+02 2.0051E-04 1.3911E-04 1.3100E-05 1.0705E-05 - 1.2589E+02 1.4027E-04 9.6700E-05 8.7884E-06 7.1613E-06 - 1.4125E+02 9.7909E-05 6.7282E-05 5.9017E-06 4.7851E-06 - 1.5849E+02 6.8569E-05 4.6630E-05 4.0139E-06 3.2501E-06 - 1.7783E+02 4.8013E-05 3.2268E-05 2.6917E-06 2.2006E-06 - 1.9953E+02 3.3525E-05 2.2383E-05 1.7546E-06 1.4568E-06 - 2.2387E+02 2.3376E-05 1.5542E-05 1.2007E-06 9.6728E-07 - 2.5119E+02 1.6393E-05 1.0815E-05 8.1809E-07 6.8406E-07 - 2.8184E+02 1.1414E-05 7.5304E-06 5.6119E-07 4.6925E-07 - 3.1623E+02 7.9334E-06 5.1693E-06 3.7535E-07 3.1052E-07 - 3.5481E+02 5.5178E-06 3.5830E-06 2.5500E-07 2.0756E-07 - 3.9811E+02 3.8357E-06 2.4821E-06 1.7172E-07 1.3921E-07 - 4.4668E+02 2.6522E-06 1.7130E-06 1.1458E-07 9.4013E-08 - 5.0119E+02 1.8486E-06 1.1799E-06 7.7833E-08 6.3099E-08 - 5.6234E+02 1.2820E-06 8.1317E-07 5.3815E-08 4.1633E-08 - 6.3096E+02 8.7844E-07 5.5376E-07 3.6009E-08 2.8290E-08 - 7.0795E+02 6.0797E-07 3.7777E-07 2.3820E-08 1.9182E-08 - 7.9433E+02 4.1819E-07 2.5769E-07 1.5991E-08 1.2851E-08 - 8.9125E+02 2.8553E-07 1.7727E-07 1.0751E-08 8.3630E-09 - 1.0000E+03 1.9772E-07 1.2231E-07 7.3708E-09 5.4168E-09 - 1.1220E+03 1.3459E-07 8.1603E-08 4.9379E-09 3.8153E-09 - 1.2589E+03 9.2588E-08 5.5075E-08 3.0851E-09 2.5781E-09 - 1.4125E+03 6.2695E-08 3.7699E-08 2.0760E-09 1.7146E-09 - 1.5849E+03 4.2491E-08 2.5484E-08 1.3876E-09 1.1501E-09 - 1.7783E+03 2.8680E-08 1.6944E-08 9.0944E-10 7.2784E-10 - 1.9953E+03 1.9306E-08 1.1433E-08 6.0419E-10 4.7206E-10 - 2.2387E+03 1.2933E-08 7.7285E-09 4.3755E-10 3.3315E-10 - 2.5119E+03 8.6738E-09 5.1583E-09 2.8981E-10 2.1546E-10 - 2.8184E+03 5.8899E-09 3.4232E-09 1.8423E-10 1.3933E-10 - 3.1623E+03 4.0374E-09 2.3395E-09 1.2293E-10 9.4757E-11 - 3.5481E+03 2.6261E-09 1.5007E-09 8.1905E-11 5.9787E-11 - 3.9811E+03 1.7445E-09 9.9929E-10 5.1999E-11 3.8745E-11 - 4.4668E+03 1.1625E-09 6.6435E-10 3.5385E-11 2.5602E-11 - 5.0119E+03 7.7337E-10 4.3774E-10 2.2716E-11 1.6557E-11 - 5.6234E+03 5.1094E-10 2.8779E-10 1.3778E-11 1.1609E-11 - 6.3096E+03 3.3960E-10 1.8889E-10 9.6366E-12 6.9308E-12 - 7.0795E+03 2.2541E-10 1.2301E-10 6.5805E-12 4.5739E-12 - 7.9433E+03 1.4887E-10 8.0651E-11 4.3474E-12 2.9254E-12 - 8.9125E+03 9.6978E-11 5.2596E-11 3.0232E-12 1.8951E-12 - 1.0000E+04 6.3428E-11 3.4377E-11 1.8873E-12 1.2946E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5874E+03 3.6063E+03 1.6778E+03 1.7516E+03 - 1.1220E-01 3.2253E+03 3.2201E+03 1.5292E+03 1.5756E+03 - 1.2589E-01 2.8648E+03 2.8727E+03 1.3635E+03 1.4038E+03 - 1.4125E-01 2.5513E+03 2.5537E+03 1.1949E+03 1.2437E+03 - 1.5849E-01 2.2514E+03 2.2323E+03 1.0546E+03 1.0817E+03 - 1.7783E-01 1.9712E+03 1.9428E+03 9.2448E+02 9.2811E+02 - 1.9953E-01 1.7138E+03 1.6868E+03 8.0361E+02 8.0513E+02 - 2.2387E-01 1.4679E+03 1.4470E+03 6.8930E+02 6.8789E+02 - 2.5119E-01 1.2454E+03 1.2320E+03 5.8380E+02 5.7707E+02 - 2.8184E-01 1.0482E+03 1.0340E+03 4.9625E+02 4.8332E+02 - 3.1623E-01 8.7574E+02 8.6023E+02 4.2072E+02 4.0287E+02 - 3.5481E-01 7.3195E+02 7.1744E+02 3.5117E+02 3.3603E+02 - 3.9811E-01 6.0655E+02 5.9215E+02 2.8964E+02 2.7724E+02 - 4.4668E-01 5.0043E+02 4.8489E+02 2.3976E+02 2.2614E+02 - 5.0119E-01 4.0909E+02 3.9760E+02 1.9565E+02 1.8311E+02 - 5.6234E-01 3.3217E+02 3.2044E+02 1.5691E+02 1.4598E+02 - 6.3096E-01 2.6886E+02 2.5914E+02 1.2610E+02 1.1536E+02 - 7.0795E-01 2.1631E+02 2.0832E+02 1.0104E+02 9.2394E+01 - 7.9433E-01 1.7287E+02 1.6610E+02 8.0115E+01 7.3373E+01 - 8.9125E-01 1.3713E+02 1.3221E+02 6.2482E+01 5.7521E+01 - 1.0000E+00 1.0899E+02 1.0312E+02 4.9498E+01 4.4160E+01 - 1.1220E+00 8.5149E+01 8.0311E+01 3.8751E+01 3.3747E+01 - 1.2589E+00 6.6636E+01 6.2101E+01 2.9808E+01 2.5577E+01 - 1.4125E+00 5.1593E+01 4.7719E+01 2.2808E+01 1.9243E+01 - 1.5849E+00 3.9781E+01 3.6597E+01 1.7339E+01 1.4464E+01 - 1.7783E+00 3.0476E+01 2.7741E+01 1.2805E+01 1.0704E+01 - 1.9953E+00 2.2922E+01 2.0887E+01 9.4245E+00 7.9689E+00 - 2.2387E+00 1.7270E+01 1.5609E+01 7.0595E+00 5.7294E+00 - 2.5119E+00 1.2982E+01 1.1467E+01 5.2696E+00 4.0595E+00 - 2.8184E+00 9.6131E+00 8.4829E+00 3.8476E+00 2.9452E+00 - 3.1623E+00 7.1489E+00 6.2472E+00 2.6904E+00 2.1053E+00 - 3.5481E+00 5.2964E+00 4.5451E+00 1.8954E+00 1.4824E+00 - 3.9811E+00 3.8737E+00 3.2882E+00 1.3423E+00 1.0420E+00 - 4.4668E+00 2.8259E+00 2.3643E+00 9.4975E-01 7.2555E-01 - 5.0119E+00 2.0410E+00 1.7058E+00 6.5967E-01 4.9929E-01 - 5.6234E+00 1.4712E+00 1.2164E+00 4.5701E-01 3.4506E-01 - 6.3096E+00 1.0708E+00 8.6429E-01 3.1214E-01 2.3489E-01 - 7.0795E+00 7.7058E-01 6.1894E-01 2.1036E-01 1.5524E-01 - 7.9433E+00 5.4794E-01 4.4053E-01 1.4405E-01 1.0609E-01 - 8.9125E+00 3.9192E-01 3.1103E-01 9.7161E-02 7.3294E-02 - 1.0000E+01 2.8018E-01 2.2116E-01 6.4635E-02 4.8456E-02 - 1.1220E+01 1.9960E-01 1.5631E-01 4.3909E-02 3.2458E-02 - 1.2589E+01 1.4193E-01 1.1092E-01 2.9754E-02 2.1938E-02 - 1.4125E+01 1.0067E-01 7.8132E-02 1.9735E-02 1.4855E-02 - 1.5849E+01 7.1945E-02 5.4788E-02 1.3039E-02 9.9861E-03 - 1.7783E+01 5.1578E-02 3.8850E-02 8.5752E-03 6.6510E-03 - 1.9953E+01 3.6577E-02 2.7644E-02 5.7309E-03 4.4147E-03 - 2.2387E+01 2.6044E-02 1.9403E-02 3.9379E-03 2.9374E-03 - 2.5119E+01 1.8319E-02 1.3570E-02 2.6128E-03 1.9676E-03 - 2.8184E+01 1.2898E-02 9.7003E-03 1.6121E-03 1.3297E-03 - 3.1623E+01 9.3434E-03 6.9367E-03 1.1278E-03 8.8645E-04 - 3.5481E+01 6.6435E-03 4.8765E-03 7.5220E-04 5.9057E-04 - 3.9811E+01 4.7070E-03 3.4271E-03 4.9219E-04 3.9605E-04 - 4.4668E+01 3.3192E-03 2.4203E-03 3.2663E-04 2.6369E-04 - 5.0119E+01 2.3447E-03 1.7100E-03 2.1824E-04 1.7532E-04 - 5.6234E+01 1.6532E-03 1.1979E-03 1.4624E-04 1.1697E-04 - 6.3096E+01 1.1623E-03 8.3765E-04 9.9205E-05 7.8289E-05 - 7.0795E+01 8.2064E-04 5.8388E-04 6.5894E-05 5.2335E-05 - 7.9433E+01 5.7747E-04 4.0751E-04 4.4018E-05 3.5497E-05 - 8.9125E+01 4.0497E-04 2.8536E-04 2.9168E-05 2.4876E-05 - 1.0000E+02 2.8442E-04 1.9951E-04 1.9618E-05 1.6018E-05 - 1.1220E+02 2.0015E-04 1.3885E-04 1.3182E-05 1.0771E-05 - 1.2589E+02 1.4000E-04 9.6414E-05 8.9146E-06 7.1533E-06 - 1.4125E+02 9.7428E-05 6.6922E-05 5.9646E-06 4.7159E-06 - 1.5849E+02 6.8274E-05 4.6736E-05 3.9952E-06 3.1418E-06 - 1.7783E+02 4.8046E-05 3.2590E-05 2.6617E-06 2.1741E-06 - 1.9953E+02 3.3514E-05 2.2609E-05 1.8016E-06 1.4547E-06 - 2.2387E+02 2.3298E-05 1.5586E-05 1.2677E-06 9.8476E-07 - 2.5119E+02 1.6244E-05 1.0680E-05 8.6202E-07 6.6539E-07 - 2.8184E+02 1.1325E-05 7.4084E-06 5.5224E-07 4.4374E-07 - 3.1623E+02 7.9337E-06 5.1844E-06 3.7833E-07 3.0172E-07 - 3.5481E+02 5.5002E-06 3.5640E-06 2.5633E-07 2.0092E-07 - 3.9811E+02 3.8221E-06 2.4598E-06 1.7322E-07 1.3533E-07 - 4.4668E+02 2.6499E-06 1.6960E-06 1.1656E-07 9.3198E-08 - 5.0119E+02 1.8324E-06 1.1711E-06 7.8832E-08 6.1810E-08 - 5.6234E+02 1.2825E-06 8.1061E-07 5.2612E-08 4.1350E-08 - 6.3096E+02 8.8241E-07 5.5466E-07 3.5025E-08 2.7705E-08 - 7.0795E+02 6.1008E-07 3.8215E-07 2.3733E-08 1.8259E-08 - 7.9433E+02 4.1903E-07 2.6016E-07 1.6085E-08 1.2143E-08 - 8.9125E+02 2.8646E-07 1.7601E-07 1.1167E-08 8.5151E-09 - 1.0000E+03 1.9776E-07 1.2087E-07 7.3778E-09 5.5241E-09 - 1.1220E+03 1.3349E-07 8.1004E-08 4.7421E-09 3.7630E-09 - 1.2589E+03 9.0635E-08 5.4871E-08 3.3366E-09 2.5404E-09 - 1.4125E+03 6.1745E-08 3.7131E-08 2.2109E-09 1.5774E-09 - 1.5849E+03 4.2401E-08 2.5229E-08 1.4933E-09 1.0596E-09 - 1.7783E+03 2.8950E-08 1.7295E-08 9.7181E-10 7.6799E-10 - 1.9953E+03 1.9522E-08 1.1395E-08 6.2568E-10 4.8806E-10 - 2.2387E+03 1.3172E-08 7.5853E-09 4.3791E-10 3.1605E-10 - 2.5119E+03 8.7456E-09 5.0948E-09 2.8559E-10 2.1412E-10 - 2.8184E+03 5.8395E-09 3.3845E-09 1.8390E-10 1.3796E-10 - 3.1623E+03 4.0450E-09 2.3467E-09 1.1979E-10 8.8134E-11 - 3.5481E+03 2.6167E-09 1.5130E-09 7.9379E-11 5.8414E-11 - 3.9811E+03 1.7483E-09 1.0108E-09 5.3426E-11 3.6549E-11 - 4.4668E+03 1.1648E-09 6.7580E-10 3.6552E-11 2.2977E-11 - 5.0119E+03 7.7162E-10 4.4262E-10 2.5391E-11 1.7135E-11 - 5.6234E+03 5.1782E-10 2.9296E-10 1.6753E-11 1.1068E-11 - 6.3096E+03 3.3562E-10 1.9119E-10 1.0002E-11 7.3930E-12 - 7.0795E+03 2.2026E-10 1.2448E-10 6.3364E-12 5.1096E-12 - 7.9433E+03 1.4658E-10 8.0404E-11 4.1275E-12 2.9197E-12 - 8.9125E+03 9.6895E-11 5.2548E-11 2.7262E-12 1.5497E-12 - 1.0000E+04 6.4378E-11 3.4946E-11 1.8750E-12 1.1921E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6462E+03 3.7153E+03 1.7683E+03 1.7942E+03 - 1.1220E-01 3.3007E+03 3.3518E+03 1.5857E+03 1.6010E+03 - 1.2589E-01 2.9726E+03 2.9886E+03 1.4215E+03 1.4337E+03 - 1.4125E-01 2.6616E+03 2.6613E+03 1.2826E+03 1.2752E+03 - 1.5849E-01 2.3698E+03 2.3618E+03 1.1338E+03 1.1154E+03 - 1.7783E-01 2.0766E+03 2.0651E+03 9.8742E+02 9.7513E+02 - 1.9953E-01 1.8005E+03 1.7930E+03 8.7051E+02 8.4766E+02 - 2.2387E-01 1.5490E+03 1.5492E+03 7.4641E+02 7.2149E+02 - 2.5119E-01 1.3198E+03 1.3215E+03 6.3210E+02 6.1154E+02 - 2.8184E-01 1.1181E+03 1.1176E+03 5.3956E+02 5.2104E+02 - 3.1623E-01 9.4154E+02 9.3708E+02 4.5596E+02 4.3517E+02 - 3.5481E-01 7.8741E+02 7.7791E+02 3.8394E+02 3.5997E+02 - 3.9811E-01 6.5041E+02 6.4260E+02 3.1801E+02 2.9505E+02 - 4.4668E-01 5.3609E+02 5.2710E+02 2.5710E+02 2.4067E+02 - 5.0119E-01 4.4087E+02 4.3255E+02 2.0874E+02 1.9686E+02 - 5.6234E-01 3.5606E+02 3.5124E+02 1.7175E+02 1.5630E+02 - 6.3096E-01 2.8671E+02 2.8037E+02 1.3861E+02 1.2367E+02 - 7.0795E-01 2.3223E+02 2.2425E+02 1.1020E+02 9.7599E+01 - 7.9433E-01 1.8536E+02 1.7746E+02 8.6502E+01 7.7028E+01 - 8.9125E-01 1.4651E+02 1.3829E+02 6.7949E+01 6.0945E+01 - 1.0000E+00 1.1500E+02 1.0954E+02 5.3640E+01 4.6199E+01 - 1.1220E+00 8.9858E+01 8.5535E+01 4.1110E+01 3.5270E+01 - 1.2589E+00 6.9673E+01 6.5657E+01 3.1526E+01 2.6713E+01 - 1.4125E+00 5.3629E+01 5.0093E+01 2.3879E+01 1.9869E+01 - 1.5849E+00 4.1268E+01 3.8074E+01 1.7993E+01 1.4928E+01 - 1.7783E+00 3.1503E+01 2.8855E+01 1.3583E+01 1.1105E+01 - 1.9953E+00 2.3727E+01 2.1583E+01 9.9976E+00 8.1331E+00 - 2.2387E+00 1.7935E+01 1.6084E+01 7.2942E+00 5.9803E+00 - 2.5119E+00 1.3289E+01 1.1941E+01 5.3442E+00 4.2954E+00 - 2.8184E+00 9.7793E+00 8.6997E+00 3.8730E+00 3.0355E+00 - 3.1623E+00 7.3015E+00 6.3364E+00 2.7570E+00 2.1584E+00 - 3.5481E+00 5.3447E+00 4.6078E+00 1.9577E+00 1.5033E+00 - 3.9811E+00 3.8878E+00 3.3335E+00 1.3834E+00 1.0525E+00 - 4.4668E+00 2.8262E+00 2.3972E+00 9.6618E-01 7.2482E-01 - 5.0119E+00 2.0581E+00 1.7055E+00 6.6993E-01 5.0054E-01 - 5.6234E+00 1.4822E+00 1.2122E+00 4.5772E-01 3.4550E-01 - 6.3096E+00 1.0590E+00 8.6935E-01 3.0769E-01 2.3314E-01 - 7.0795E+00 7.5878E-01 6.1608E-01 2.1097E-01 1.6297E-01 - 7.9433E+00 5.4501E-01 4.3608E-01 1.4192E-01 1.1013E-01 - 8.9125E+00 3.9471E-01 3.0862E-01 9.4159E-02 7.2192E-02 - 1.0000E+01 2.8037E-01 2.2123E-01 6.6538E-02 4.8745E-02 - 1.1220E+01 1.9910E-01 1.5647E-01 4.4766E-02 3.3271E-02 - 1.2589E+01 1.4249E-01 1.1135E-01 2.9459E-02 2.2298E-02 - 1.4125E+01 1.0134E-01 7.8825E-02 1.9635E-02 1.4670E-02 - 1.5849E+01 7.2259E-02 5.5699E-02 1.3206E-02 9.8803E-03 - 1.7783E+01 5.1680E-02 3.9144E-02 8.7184E-03 6.7127E-03 - 1.9953E+01 3.6817E-02 2.7534E-02 5.5364E-03 4.5492E-03 - 2.2387E+01 2.6080E-02 1.9486E-02 3.7058E-03 3.0638E-03 - 2.5119E+01 1.8549E-02 1.3735E-02 2.5345E-03 2.0250E-03 - 2.8184E+01 1.3202E-02 9.9267E-03 1.6310E-03 1.3337E-03 - 3.1623E+01 9.3571E-03 6.9512E-03 1.1211E-03 8.8259E-04 - 3.5481E+01 6.6274E-03 4.9003E-03 7.4820E-04 5.9097E-04 - 3.9811E+01 4.6943E-03 3.4524E-03 5.0045E-04 3.9143E-04 - 4.4668E+01 3.3174E-03 2.4301E-03 3.3291E-04 2.6200E-04 - 5.0119E+01 2.3536E-03 1.7069E-03 2.2148E-04 1.7713E-04 - 5.6234E+01 1.6646E-03 1.1978E-03 1.4859E-04 1.1729E-04 - 6.3096E+01 1.1685E-03 8.3814E-04 9.8334E-05 7.7777E-05 - 7.0795E+01 8.2146E-04 5.8666E-04 6.3971E-05 5.3131E-05 - 7.9433E+01 5.8007E-04 4.1358E-04 4.2562E-05 3.5828E-05 - 8.9125E+01 4.1241E-04 2.8835E-04 2.9453E-05 2.4046E-05 - 1.0000E+02 2.8601E-04 2.0004E-04 1.9716E-05 1.5891E-05 - 1.1220E+02 1.9982E-04 1.3930E-04 1.3212E-05 1.0639E-05 - 1.2589E+02 1.4089E-04 9.6994E-05 8.8853E-06 7.2379E-06 - 1.4125E+02 9.8777E-05 6.7383E-05 6.0219E-06 4.8566E-06 - 1.5849E+02 6.8853E-05 4.6812E-05 4.0801E-06 3.2942E-06 - 1.7783E+02 4.8424E-05 3.2604E-05 2.6821E-06 2.1876E-06 - 1.9953E+02 3.3819E-05 2.2665E-05 1.7966E-06 1.4612E-06 - 2.2387E+02 2.3568E-05 1.5648E-05 1.2194E-06 1.0052E-06 - 2.5119E+02 1.6577E-05 1.0868E-05 8.1504E-07 6.7531E-07 - 2.8184E+02 1.1504E-05 7.5179E-06 5.6637E-07 4.4900E-07 - 3.1623E+02 7.9274E-06 5.1960E-06 3.7489E-07 3.0362E-07 - 3.5481E+02 5.4928E-06 3.5856E-06 2.5435E-07 2.0822E-07 - 3.9811E+02 3.8147E-06 2.4747E-06 1.7375E-07 1.3840E-07 - 4.4668E+02 2.6431E-06 1.7037E-06 1.1680E-07 9.0879E-08 - 5.0119E+02 1.8240E-06 1.1725E-06 7.9563E-08 6.1318E-08 - 5.6234E+02 1.2799E-06 8.0409E-07 5.3486E-08 4.0870E-08 - 6.3096E+02 8.8028E-07 5.4741E-07 3.6053E-08 2.7894E-08 - 7.0795E+02 6.0525E-07 3.7388E-07 2.4093E-08 1.8924E-08 - 7.9433E+02 4.1741E-07 2.5697E-07 1.5977E-08 1.2593E-08 - 8.9125E+02 2.8671E-07 1.7682E-07 1.0671E-08 8.2953E-09 - 1.0000E+03 1.9852E-07 1.2121E-07 7.2506E-09 5.4620E-09 - 1.1220E+03 1.3466E-07 8.1372E-08 4.9250E-09 3.7355E-09 - 1.2589E+03 9.1728E-08 5.5341E-08 3.2865E-09 2.4447E-09 - 1.4125E+03 6.2314E-08 3.7144E-08 2.1894E-09 1.5558E-09 - 1.5849E+03 4.2322E-08 2.5010E-08 1.4588E-09 1.0886E-09 - 1.7783E+03 2.9102E-08 1.6825E-08 9.7951E-10 7.3537E-10 - 1.9953E+03 1.9595E-08 1.1363E-08 6.4908E-10 4.9263E-10 - 2.2387E+03 1.3089E-08 7.6638E-09 4.0838E-10 3.0404E-10 - 2.5119E+03 8.8058E-09 5.1730E-09 2.5757E-10 1.9513E-10 - 2.8184E+03 5.9062E-09 3.4476E-09 1.7711E-10 1.2790E-10 - 3.1623E+03 4.0427E-09 2.3387E-09 1.3011E-10 8.8286E-11 - 3.5481E+03 2.6254E-09 1.5096E-09 8.6326E-11 5.8905E-11 - 3.9811E+03 1.7523E-09 1.0146E-09 5.7404E-11 3.6810E-11 - 4.4668E+03 1.1767E-09 6.6801E-10 3.6463E-11 2.5294E-11 - 5.0119E+03 7.8884E-10 4.3607E-10 2.3292E-11 1.5982E-11 - 5.6234E+03 5.1876E-10 2.8755E-10 1.5086E-11 9.3639E-12 - 6.3096E+03 3.4221E-10 1.9195E-10 9.3925E-12 7.1329E-12 - 7.0795E+03 2.2607E-10 1.2592E-10 5.9871E-12 4.8865E-12 - 7.9433E+03 1.4867E-10 8.2799E-11 4.0547E-12 3.2619E-12 - 8.9125E+03 9.6967E-11 5.3883E-11 2.9186E-12 2.0090E-12 - 1.0000E+04 6.4150E-11 3.5135E-11 1.7494E-12 1.1785E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5824E+03 3.6455E+03 1.7395E+03 1.7793E+03 - 1.1220E-01 3.2582E+03 3.2997E+03 1.5831E+03 1.5979E+03 - 1.2589E-01 2.9455E+03 2.9574E+03 1.4231E+03 1.4253E+03 - 1.4125E-01 2.6352E+03 2.6617E+03 1.2700E+03 1.2631E+03 - 1.5849E-01 2.3556E+03 2.3698E+03 1.1355E+03 1.1122E+03 - 1.7783E-01 2.0902E+03 2.0887E+03 1.0051E+03 9.6908E+02 - 1.9953E-01 1.8234E+03 1.8191E+03 8.7454E+02 8.4531E+02 - 2.2387E-01 1.5717E+03 1.5635E+03 7.5611E+02 7.3300E+02 - 2.5119E-01 1.3436E+03 1.3397E+03 6.4602E+02 6.2391E+02 - 2.8184E-01 1.1385E+03 1.1355E+03 5.5073E+02 5.2394E+02 - 3.1623E-01 9.5408E+02 9.5317E+02 4.6883E+02 4.3896E+02 - 3.5481E-01 7.9991E+02 7.9600E+02 3.9215E+02 3.6163E+02 - 3.9811E-01 6.6795E+02 6.5971E+02 3.2297E+02 2.9436E+02 - 4.4668E-01 5.5286E+02 5.4107E+02 2.6558E+02 2.4479E+02 - 5.0119E-01 4.5375E+02 4.3967E+02 2.1717E+02 2.0156E+02 - 5.6234E-01 3.6758E+02 3.5757E+02 1.7622E+02 1.6043E+02 - 6.3096E-01 2.9469E+02 2.8952E+02 1.4317E+02 1.2626E+02 - 7.0795E-01 2.3597E+02 2.2982E+02 1.1319E+02 1.0037E+02 - 7.9433E-01 1.8806E+02 1.8079E+02 8.8972E+01 7.9453E+01 - 8.9125E-01 1.4973E+02 1.4188E+02 6.9508E+01 6.1466E+01 - 1.0000E+00 1.1776E+02 1.1184E+02 5.4440E+01 4.7048E+01 - 1.1220E+00 9.2142E+01 8.6789E+01 4.2039E+01 3.5904E+01 - 1.2589E+00 7.1427E+01 6.6841E+01 3.2172E+01 2.7245E+01 - 1.4125E+00 5.4949E+01 5.1180E+01 2.4593E+01 2.0369E+01 - 1.5849E+00 4.2247E+01 3.8761E+01 1.8595E+01 1.5175E+01 - 1.7783E+00 3.2096E+01 2.9247E+01 1.3890E+01 1.1126E+01 - 1.9953E+00 2.4175E+01 2.1906E+01 1.0202E+01 8.2042E+00 - 2.2387E+00 1.7997E+01 1.6335E+01 7.5595E+00 5.9663E+00 - 2.5119E+00 1.3402E+01 1.2060E+01 5.5602E+00 4.2682E+00 - 2.8184E+00 1.0017E+01 8.8282E+00 3.9635E+00 3.0931E+00 - 3.1623E+00 7.3153E+00 6.3488E+00 2.7678E+00 2.1793E+00 - 3.5481E+00 5.3425E+00 4.6011E+00 1.9591E+00 1.5231E+00 - 3.9811E+00 3.9146E+00 3.3373E+00 1.3875E+00 1.0636E+00 - 4.4668E+00 2.8585E+00 2.4041E+00 9.5740E-01 7.3707E-01 - 5.0119E+00 2.0624E+00 1.7242E+00 6.5897E-01 5.1320E-01 - 5.6234E+00 1.4782E+00 1.2297E+00 4.6093E-01 3.5859E-01 - 6.3096E+00 1.0578E+00 8.7735E-01 3.1848E-01 2.4196E-01 - 7.0795E+00 7.6827E-01 6.2479E-01 2.1561E-01 1.6135E-01 - 7.9433E+00 5.5463E-01 4.4549E-01 1.4302E-01 1.0621E-01 - 8.9125E+00 3.9821E-01 3.1175E-01 9.5851E-02 7.1634E-02 - 1.0000E+01 2.7962E-01 2.2142E-01 6.5392E-02 4.9232E-02 - 1.1220E+01 1.9998E-01 1.5618E-01 4.3542E-02 3.3285E-02 - 1.2589E+01 1.4256E-01 1.1066E-01 2.9207E-02 2.2411E-02 - 1.4125E+01 1.0161E-01 7.8379E-02 1.9665E-02 1.4828E-02 - 1.5849E+01 7.2787E-02 5.5440E-02 1.3052E-02 9.8681E-03 - 1.7783E+01 5.2126E-02 3.9690E-02 8.4250E-03 6.7592E-03 - 1.9953E+01 3.6567E-02 2.7855E-02 5.6899E-03 4.4930E-03 - 2.2387E+01 2.5756E-02 1.9596E-02 3.9057E-03 2.9994E-03 - 2.5119E+01 1.8388E-02 1.3948E-02 2.5867E-03 2.0211E-03 - 2.8184E+01 1.3165E-02 9.7687E-03 1.6626E-03 1.3358E-03 - 3.1623E+01 9.3753E-03 6.9189E-03 1.1242E-03 8.7967E-04 - 3.5481E+01 6.6146E-03 4.8781E-03 7.4761E-04 5.8763E-04 - 3.9811E+01 4.6790E-03 3.4348E-03 5.0054E-04 3.8777E-04 - 4.4668E+01 3.3074E-03 2.4191E-03 3.3163E-04 2.5900E-04 - 5.0119E+01 2.3287E-03 1.7053E-03 2.1790E-04 1.7680E-04 - 5.6234E+01 1.6552E-03 1.1963E-03 1.4493E-04 1.1843E-04 - 6.3096E+01 1.1749E-03 8.3510E-04 9.8245E-05 7.8623E-05 - 7.0795E+01 8.2561E-04 5.8559E-04 6.6884E-05 5.2679E-05 - 7.9433E+01 5.7991E-04 4.1012E-04 4.4267E-05 3.4977E-05 - 8.9125E+01 4.0662E-04 2.8719E-04 2.9356E-05 2.2778E-05 - 1.0000E+02 2.8537E-04 1.9892E-04 1.9609E-05 1.5788E-05 - 1.1220E+02 2.0036E-04 1.3821E-04 1.3072E-05 1.0630E-05 - 1.2589E+02 1.4092E-04 9.6300E-05 8.7562E-06 7.1948E-06 - 1.4125E+02 9.8190E-05 6.6983E-05 5.9969E-06 4.8144E-06 - 1.5849E+02 6.8525E-05 4.6738E-05 4.0118E-06 3.2150E-06 - 1.7783E+02 4.7762E-05 3.2480E-05 2.7271E-06 2.1725E-06 - 1.9953E+02 3.3544E-05 2.2568E-05 1.8372E-06 1.4543E-06 - 2.2387E+02 2.3590E-05 1.5658E-05 1.2218E-06 9.9889E-07 - 2.5119E+02 1.6356E-05 1.0739E-05 8.2823E-07 6.6874E-07 - 2.8184E+02 1.1328E-05 7.4624E-06 5.5438E-07 4.3478E-07 - 3.1623E+02 7.9613E-06 5.1951E-06 3.7997E-07 3.0283E-07 - 3.5481E+02 5.5327E-06 3.5698E-06 2.5195E-07 2.0547E-07 - 3.9811E+02 3.8244E-06 2.4565E-06 1.7027E-07 1.3478E-07 - 4.4668E+02 2.6549E-06 1.6940E-06 1.1417E-07 9.3061E-08 - 5.0119E+02 1.8511E-06 1.1731E-06 7.7903E-08 6.3316E-08 - 5.6234E+02 1.2819E-06 8.1128E-07 5.3425E-08 4.2030E-08 - 6.3096E+02 8.8066E-07 5.5431E-07 3.5347E-08 2.8391E-08 - 7.0795E+02 6.0681E-07 3.8001E-07 2.3885E-08 1.8711E-08 - 7.9433E+02 4.1569E-07 2.5980E-07 1.6132E-08 1.2564E-08 - 8.9125E+02 2.8619E-07 1.7704E-07 1.0421E-08 8.7189E-09 - 1.0000E+03 1.9872E-07 1.2168E-07 7.1152E-09 5.4269E-09 - 1.1220E+03 1.3458E-07 8.2067E-08 4.9319E-09 3.6437E-09 - 1.2589E+03 9.1073E-08 5.5506E-08 3.3031E-09 2.5208E-09 - 1.4125E+03 6.2011E-08 3.7431E-08 2.2400E-09 1.6713E-09 - 1.5849E+03 4.2585E-08 2.5305E-08 1.5065E-09 1.0689E-09 - 1.7783E+03 2.8794E-08 1.6882E-08 1.0213E-09 7.2626E-10 - 1.9953E+03 1.9311E-08 1.1446E-08 6.6225E-10 4.8904E-10 - 2.2387E+03 1.3042E-08 7.6242E-09 4.3876E-10 3.0911E-10 - 2.5119E+03 8.7786E-09 5.0677E-09 2.9874E-10 2.0200E-10 - 2.8184E+03 5.8603E-09 3.3584E-09 1.9601E-10 1.4449E-10 - 3.1623E+03 4.0421E-09 2.3477E-09 1.2098E-10 9.5342E-11 - 3.5481E+03 2.6302E-09 1.5254E-09 8.2980E-11 5.8301E-11 - 3.9811E+03 1.7578E-09 1.0149E-09 5.3909E-11 3.5794E-11 - 4.4668E+03 1.1739E-09 6.5900E-10 3.4377E-11 2.4611E-11 - 5.0119E+03 7.8168E-10 4.3606E-10 2.3031E-11 1.6985E-11 - 5.6234E+03 5.1234E-10 2.8500E-10 1.5082E-11 9.9500E-12 - 6.3096E+03 3.3854E-10 1.9147E-10 9.7530E-12 7.2271E-12 - 7.0795E+03 2.2290E-10 1.2511E-10 6.4846E-12 4.6920E-12 - 7.9433E+03 1.4658E-10 8.1069E-11 4.2346E-12 2.7718E-12 - 8.9125E+03 9.6264E-11 5.4140E-11 2.6893E-12 1.8464E-12 - 1.0000E+04 6.4418E-11 3.5564E-11 1.9144E-12 1.2802E-12 -average flux in [cosZ =-0.70 -- -0.60, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.5344E+03 3.6188E+03 1.7324E+03 1.7336E+03 - 1.1220E-01 3.2345E+03 3.2759E+03 1.5689E+03 1.5791E+03 - 1.2589E-01 2.9038E+03 2.9453E+03 1.4080E+03 1.4066E+03 - 1.4125E-01 2.5896E+03 2.6513E+03 1.2620E+03 1.2480E+03 - 1.5849E-01 2.3113E+03 2.3593E+03 1.1254E+03 1.1058E+03 - 1.7783E-01 2.0461E+03 2.0718E+03 9.9022E+02 9.6430E+02 - 1.9953E-01 1.7907E+03 1.8041E+03 8.5945E+02 8.3285E+02 - 2.2387E-01 1.5539E+03 1.5558E+03 7.4305E+02 7.1852E+02 - 2.5119E-01 1.3338E+03 1.3334E+03 6.4231E+02 6.1589E+02 - 2.8184E-01 1.1367E+03 1.1346E+03 5.4887E+02 5.2312E+02 - 3.1623E-01 9.5094E+02 9.5563E+02 4.6323E+02 4.3749E+02 - 3.5481E-01 7.9583E+02 7.9857E+02 3.8444E+02 3.6408E+02 - 3.9811E-01 6.6496E+02 6.6139E+02 3.2036E+02 2.9701E+02 - 4.4668E-01 5.4762E+02 5.4166E+02 2.6717E+02 2.4144E+02 - 5.0119E-01 4.4726E+02 4.3927E+02 2.1533E+02 1.9816E+02 - 5.6234E-01 3.6484E+02 3.5728E+02 1.7389E+02 1.5955E+02 - 6.3096E-01 2.9532E+02 2.8785E+02 1.4150E+02 1.2704E+02 - 7.0795E-01 2.3632E+02 2.2945E+02 1.1364E+02 1.0028E+02 - 7.9433E-01 1.8861E+02 1.8163E+02 9.0287E+01 7.7554E+01 - 8.9125E-01 1.4885E+02 1.4348E+02 7.0363E+01 6.0548E+01 - 1.0000E+00 1.1659E+02 1.1213E+02 5.4274E+01 4.7516E+01 - 1.1220E+00 9.0953E+01 8.7007E+01 4.2079E+01 3.5821E+01 - 1.2589E+00 7.0948E+01 6.6849E+01 3.2450E+01 2.7122E+01 - 1.4125E+00 5.5241E+01 5.0946E+01 2.4550E+01 2.0355E+01 - 1.5849E+00 4.2096E+01 3.8808E+01 1.8401E+01 1.5277E+01 - 1.7783E+00 3.1919E+01 2.9349E+01 1.3636E+01 1.1262E+01 - 1.9953E+00 2.3985E+01 2.1870E+01 1.0148E+01 8.1788E+00 - 2.2387E+00 1.7910E+01 1.6276E+01 7.5091E+00 5.9412E+00 - 2.5119E+00 1.3496E+01 1.2041E+01 5.4800E+00 4.2674E+00 - 2.8184E+00 9.9761E+00 8.8262E+00 3.9264E+00 3.0165E+00 - 3.1623E+00 7.3331E+00 6.4193E+00 2.8006E+00 2.1621E+00 - 3.5481E+00 5.3744E+00 4.6495E+00 1.9675E+00 1.5274E+00 - 3.9811E+00 3.9122E+00 3.3489E+00 1.3776E+00 1.0598E+00 - 4.4668E+00 2.8411E+00 2.4202E+00 9.6579E-01 7.2688E-01 - 5.0119E+00 2.0641E+00 1.7249E+00 6.6561E-01 5.0342E-01 - 5.6234E+00 1.4916E+00 1.2272E+00 4.5646E-01 3.5296E-01 - 6.3096E+00 1.0724E+00 8.7228E-01 3.1268E-01 2.3875E-01 - 7.0795E+00 7.6814E-01 6.2030E-01 2.1260E-01 1.6104E-01 - 7.9433E+00 5.5039E-01 4.4200E-01 1.4352E-01 1.1094E-01 - 8.9125E+00 3.9445E-01 3.1230E-01 9.7142E-02 7.3459E-02 - 1.0000E+01 2.8040E-01 2.2173E-01 6.5295E-02 4.9477E-02 - 1.1220E+01 1.9943E-01 1.5751E-01 4.3595E-02 3.2822E-02 - 1.2589E+01 1.4230E-01 1.1066E-01 2.9423E-02 2.1772E-02 - 1.4125E+01 1.0066E-01 7.7500E-02 1.9393E-02 1.4718E-02 - 1.5849E+01 7.1849E-02 5.5076E-02 1.2997E-02 1.0061E-02 - 1.7783E+01 5.1733E-02 3.9598E-02 8.6371E-03 6.8291E-03 - 1.9953E+01 3.7042E-02 2.7833E-02 5.7110E-03 4.4040E-03 - 2.2387E+01 2.6212E-02 1.9513E-02 3.9397E-03 2.9107E-03 - 2.5119E+01 1.8349E-02 1.3812E-02 2.6545E-03 2.0173E-03 - 2.8184E+01 1.3217E-02 9.9365E-03 1.7640E-03 1.3514E-03 - 3.1623E+01 9.3539E-03 6.9228E-03 1.1297E-03 8.8539E-04 - 3.5481E+01 6.6185E-03 4.8758E-03 7.5285E-04 5.8701E-04 - 3.9811E+01 4.6856E-03 3.4400E-03 4.9942E-04 3.9384E-04 - 4.4668E+01 3.3090E-03 2.4111E-03 3.3107E-04 2.6180E-04 - 5.0119E+01 2.3426E-03 1.6947E-03 2.2032E-04 1.7150E-04 - 5.6234E+01 1.6542E-03 1.1926E-03 1.4755E-04 1.1509E-04 - 6.3096E+01 1.1683E-03 8.3867E-04 9.8771E-05 7.6881E-05 - 7.0795E+01 8.2666E-04 5.8689E-04 6.5335E-05 5.0993E-05 - 7.9433E+01 5.7984E-04 4.0985E-04 4.3926E-05 3.4323E-05 - 8.9125E+01 4.0599E-04 2.8706E-04 2.9754E-05 2.3728E-05 - 1.0000E+02 2.8594E-04 1.9986E-04 1.9708E-05 1.6109E-05 - 1.1220E+02 2.0037E-04 1.3940E-04 1.3151E-05 1.0805E-05 - 1.2589E+02 1.4026E-04 9.7052E-05 8.6875E-06 7.2312E-06 - 1.4125E+02 9.8328E-05 6.7786E-05 5.9477E-06 4.7930E-06 - 1.5849E+02 6.8845E-05 4.7053E-05 4.0469E-06 3.2329E-06 - 1.7783E+02 4.8240E-05 3.2552E-05 2.7217E-06 2.2187E-06 - 1.9953E+02 3.3636E-05 2.2622E-05 1.8562E-06 1.4995E-06 - 2.2387E+02 2.3354E-05 1.5614E-05 1.2753E-06 9.7213E-07 - 2.5119E+02 1.6357E-05 1.0789E-05 8.4936E-07 6.7259E-07 - 2.8184E+02 1.1437E-05 7.4859E-06 5.4812E-07 4.7567E-07 - 3.1623E+02 7.9755E-06 5.2093E-06 3.7751E-07 3.0477E-07 - 3.5481E+02 5.5192E-06 3.5915E-06 2.5408E-07 2.0991E-07 - 3.9811E+02 3.8279E-06 2.4769E-06 1.7219E-07 1.3902E-07 - 4.4668E+02 2.6552E-06 1.6953E-06 1.1665E-07 9.4338E-08 - 5.0119E+02 1.8556E-06 1.1661E-06 7.8643E-08 6.3327E-08 - 5.6234E+02 1.2892E-06 8.1273E-07 5.2776E-08 4.1996E-08 - 6.3096E+02 8.8262E-07 5.5654E-07 3.5338E-08 2.8119E-08 - 7.0795E+02 6.0674E-07 3.8178E-07 2.3191E-08 1.8721E-08 - 7.9433E+02 4.1606E-07 2.5940E-07 1.5580E-08 1.2950E-08 - 8.9125E+02 2.8595E-07 1.7600E-07 1.0714E-08 8.2769E-09 - 1.0000E+03 1.9867E-07 1.2050E-07 7.0046E-09 5.4625E-09 - 1.1220E+03 1.3489E-07 8.1383E-08 4.9007E-09 3.6963E-09 - 1.2589E+03 9.1895E-08 5.5788E-08 3.2568E-09 2.4993E-09 - 1.4125E+03 6.2724E-08 3.7849E-08 2.1325E-09 1.7116E-09 - 1.5849E+03 4.2535E-08 2.5423E-08 1.4430E-09 1.1302E-09 - 1.7783E+03 2.8874E-08 1.7129E-08 9.4930E-10 7.1590E-10 - 1.9953E+03 1.9538E-08 1.1546E-08 6.1197E-10 4.8821E-10 - 2.2387E+03 1.3096E-08 7.7902E-09 4.0025E-10 3.2450E-10 - 2.5119E+03 8.8237E-09 5.1237E-09 2.7584E-10 2.0725E-10 - 2.8184E+03 5.9299E-09 3.3843E-09 1.8641E-10 1.2801E-10 - 3.1623E+03 4.0257E-09 2.3543E-09 1.2649E-10 9.0303E-11 - 3.5481E+03 2.6016E-09 1.5245E-09 8.3146E-11 5.9664E-11 - 3.9811E+03 1.7404E-09 1.0016E-09 5.6025E-11 3.9332E-11 - 4.4668E+03 1.1735E-09 6.7254E-10 3.5631E-11 2.5573E-11 - 5.0119E+03 7.7120E-10 4.4818E-10 2.2086E-11 1.6359E-11 - 5.6234E+03 5.0337E-10 2.9498E-10 1.4172E-11 1.1711E-11 - 6.3096E+03 3.3958E-10 1.9466E-10 9.8003E-12 7.1187E-12 - 7.0795E+03 2.2503E-10 1.2682E-10 6.5503E-12 4.4078E-12 - 7.9433E+03 1.4940E-10 8.1908E-11 4.3117E-12 2.8940E-12 - 8.9125E+03 9.8575E-11 5.4229E-11 2.7770E-12 1.8062E-12 - 1.0000E+04 6.4259E-11 3.5624E-11 1.7875E-12 1.1691E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0421E+03 3.0557E+03 1.4610E+03 1.5099E+03 - 1.1220E-01 2.7546E+03 2.7779E+03 1.3304E+03 1.3652E+03 - 1.2589E-01 2.5034E+03 2.5098E+03 1.2064E+03 1.2252E+03 - 1.4125E-01 2.2699E+03 2.2641E+03 1.0862E+03 1.0996E+03 - 1.5849E-01 2.0169E+03 2.0238E+03 9.5641E+02 9.6745E+02 - 1.7783E-01 1.7803E+03 1.7923E+03 8.3032E+02 8.4503E+02 - 1.9953E-01 1.5658E+03 1.5565E+03 7.2182E+02 7.3750E+02 - 2.2387E-01 1.3560E+03 1.3413E+03 6.3209E+02 6.3050E+02 - 2.5119E-01 1.1625E+03 1.1533E+03 5.4627E+02 5.2989E+02 - 2.8184E-01 9.9557E+02 9.8332E+02 4.6483E+02 4.4930E+02 - 3.1623E-01 8.3914E+02 8.3060E+02 3.9351E+02 3.8220E+02 - 3.5481E-01 7.0040E+02 6.9082E+02 3.2921E+02 3.1707E+02 - 3.9811E-01 5.8419E+02 5.7208E+02 2.7678E+02 2.5977E+02 - 4.4668E-01 4.8185E+02 4.7371E+02 2.2781E+02 2.1178E+02 - 5.0119E-01 3.9451E+02 3.8680E+02 1.8353E+02 1.7210E+02 - 5.6234E-01 3.2250E+02 3.1236E+02 1.4898E+02 1.3814E+02 - 6.3096E-01 2.6033E+02 2.5139E+02 1.1960E+02 1.0961E+02 - 7.0795E-01 2.1035E+02 2.0258E+02 9.5321E+01 8.7062E+01 - 7.9433E-01 1.6928E+02 1.6041E+02 7.5173E+01 6.8799E+01 - 8.9125E-01 1.3447E+02 1.2667E+02 5.9165E+01 5.3315E+01 - 1.0000E+00 1.0652E+02 1.0053E+02 4.6792E+01 4.0991E+01 - 1.1220E+00 8.3376E+01 7.8549E+01 3.5961E+01 3.1520E+01 - 1.2589E+00 6.4704E+01 6.0844E+01 2.7632E+01 2.3879E+01 - 1.4125E+00 4.9938E+01 4.6609E+01 2.1167E+01 1.7952E+01 - 1.5849E+00 3.8499E+01 3.5366E+01 1.5939E+01 1.3348E+01 - 1.7783E+00 2.9708E+01 2.6763E+01 1.1816E+01 9.8141E+00 - 1.9953E+00 2.2580E+01 2.0145E+01 8.7952E+00 7.2137E+00 - 2.2387E+00 1.6936E+01 1.5069E+01 6.4415E+00 5.2528E+00 - 2.5119E+00 1.2683E+01 1.1134E+01 4.6393E+00 3.7931E+00 - 2.8184E+00 9.4152E+00 8.2299E+00 3.3795E+00 2.7035E+00 - 3.1623E+00 6.9465E+00 5.9789E+00 2.4153E+00 1.9147E+00 - 3.5481E+00 5.1293E+00 4.3663E+00 1.7041E+00 1.3385E+00 - 3.9811E+00 3.7485E+00 3.1684E+00 1.2105E+00 9.3159E-01 - 4.4668E+00 2.7207E+00 2.2905E+00 8.4874E-01 6.4892E-01 - 5.0119E+00 1.9844E+00 1.6439E+00 5.7989E-01 4.4913E-01 - 5.6234E+00 1.4423E+00 1.1664E+00 3.9778E-01 3.0942E-01 - 6.3096E+00 1.0391E+00 8.2585E-01 2.6967E-01 2.0993E-01 - 7.0795E+00 7.4237E-01 5.8747E-01 1.8148E-01 1.4077E-01 - 7.9433E+00 5.3366E-01 4.2347E-01 1.2730E-01 9.4361E-02 - 8.9125E+00 3.7921E-01 2.9717E-01 8.6644E-02 6.5110E-02 - 1.0000E+01 2.7155E-01 2.1169E-01 5.7168E-02 4.3926E-02 - 1.1220E+01 1.9299E-01 1.5042E-01 3.7600E-02 2.9284E-02 - 1.2589E+01 1.3841E-01 1.0593E-01 2.5171E-02 1.9656E-02 - 1.4125E+01 9.9319E-02 7.4226E-02 1.7028E-02 1.3231E-02 - 1.5849E+01 7.0011E-02 5.2933E-02 1.1387E-02 8.6877E-03 - 1.7783E+01 4.9669E-02 3.7921E-02 7.7259E-03 5.6840E-03 - 1.9953E+01 3.5860E-02 2.6969E-02 5.0712E-03 3.8988E-03 - 2.2387E+01 2.5507E-02 1.8868E-02 3.2421E-03 2.5504E-03 - 2.5119E+01 1.7994E-02 1.3266E-02 2.1682E-03 1.6840E-03 - 2.8184E+01 1.2720E-02 9.3452E-03 1.4469E-03 1.1696E-03 - 3.1623E+01 8.9821E-03 6.5905E-03 9.7126E-04 7.6487E-04 - 3.5481E+01 6.3573E-03 4.6451E-03 6.5131E-04 5.1003E-04 - 3.9811E+01 4.4978E-03 3.2664E-03 4.3496E-04 3.4167E-04 - 4.4668E+01 3.1839E-03 2.2924E-03 2.9072E-04 2.2724E-04 - 5.0119E+01 2.2428E-03 1.6080E-03 1.9078E-04 1.5411E-04 - 5.6234E+01 1.5817E-03 1.1285E-03 1.2585E-04 1.0305E-04 - 6.3096E+01 1.1191E-03 7.9412E-04 8.5832E-05 6.7687E-05 - 7.0795E+01 7.8469E-04 5.5499E-04 5.7811E-05 4.5562E-05 - 7.9433E+01 5.4947E-04 3.8597E-04 3.8097E-05 3.1628E-05 - 8.9125E+01 3.8661E-04 2.6655E-04 2.6305E-05 2.1886E-05 - 1.0000E+02 2.7018E-04 1.8637E-04 1.7455E-05 1.4273E-05 - 1.1220E+02 1.8967E-04 1.2961E-04 1.1672E-05 9.5633E-06 - 1.2589E+02 1.3305E-04 9.0297E-05 7.7760E-06 6.4502E-06 - 1.4125E+02 9.3080E-05 6.2862E-05 5.3281E-06 4.3064E-06 - 1.5849E+02 6.5167E-05 4.3856E-05 3.5677E-06 2.8854E-06 - 1.7783E+02 4.5393E-05 3.0503E-05 2.4032E-06 1.9574E-06 - 1.9953E+02 3.1511E-05 2.1111E-05 1.6646E-06 1.2991E-06 - 2.2387E+02 2.2020E-05 1.4516E-05 1.1027E-06 8.8774E-07 - 2.5119E+02 1.5352E-05 9.9921E-06 7.5066E-07 6.3368E-07 - 2.8184E+02 1.0694E-05 6.9130E-06 5.1149E-07 4.3307E-07 - 3.1623E+02 7.4762E-06 4.8217E-06 3.4440E-07 2.7532E-07 - 3.5481E+02 5.1767E-06 3.3123E-06 2.3600E-07 1.8536E-07 - 3.9811E+02 3.5825E-06 2.2759E-06 1.5658E-07 1.2307E-07 - 4.4668E+02 2.4843E-06 1.5734E-06 1.0267E-07 8.4313E-08 - 5.0119E+02 1.7151E-06 1.0764E-06 6.8155E-08 5.9152E-08 - 5.6234E+02 1.1920E-06 7.4528E-07 4.7132E-08 3.8219E-08 - 6.3096E+02 8.1868E-07 5.0935E-07 3.2131E-08 2.4850E-08 - 7.0795E+02 5.6383E-07 3.4920E-07 2.1418E-08 1.6467E-08 - 7.9433E+02 3.8509E-07 2.3612E-07 1.3918E-08 1.0683E-08 - 8.9125E+02 2.6412E-07 1.6012E-07 9.4903E-09 7.1260E-09 - 1.0000E+03 1.8207E-07 1.1058E-07 6.3700E-09 5.0482E-09 - 1.1220E+03 1.2296E-07 7.4290E-08 4.2494E-09 3.4511E-09 - 1.2589E+03 8.3487E-08 5.0098E-08 2.9770E-09 2.2710E-09 - 1.4125E+03 5.6576E-08 3.3843E-08 1.9778E-09 1.4986E-09 - 1.5849E+03 3.8458E-08 2.2591E-08 1.2335E-09 9.8741E-10 - 1.7783E+03 2.6240E-08 1.5288E-08 7.9753E-10 6.4927E-10 - 1.9953E+03 1.7397E-08 1.0204E-08 5.9333E-10 4.2362E-10 - 2.2387E+03 1.1662E-08 6.7721E-09 3.8586E-10 2.8098E-10 - 2.5119E+03 7.9688E-09 4.5591E-09 2.3274E-10 1.8778E-10 - 2.8184E+03 5.2617E-09 3.1065E-09 1.6157E-10 1.2524E-10 - 3.1623E+03 3.6069E-09 2.0841E-09 1.0835E-10 8.0522E-11 - 3.5481E+03 2.3530E-09 1.3368E-09 7.2089E-11 5.3001E-11 - 3.9811E+03 1.5698E-09 8.7806E-10 4.6983E-11 3.1749E-11 - 4.4668E+03 1.0425E-09 5.8396E-10 2.9065E-11 2.0455E-11 - 5.0119E+03 6.9300E-10 3.9308E-10 1.9261E-11 1.3432E-11 - 5.6234E+03 4.5367E-10 2.6725E-10 1.4384E-11 8.1793E-12 - 6.3096E+03 2.9558E-10 1.6946E-10 8.9880E-12 6.3086E-12 - 7.0795E+03 1.9481E-10 1.1001E-10 5.6511E-12 3.5916E-12 - 7.9433E+03 1.3029E-10 7.1639E-11 3.3207E-12 2.3098E-12 - 8.9125E+03 8.6756E-11 4.6974E-11 2.2155E-12 1.6296E-12 - 1.0000E+04 5.7084E-11 3.1692E-11 1.5676E-12 1.0124E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.7733E+03 2.7750E+03 1.3152E+03 1.3890E+03 - 1.1220E-01 2.5373E+03 2.5154E+03 1.1969E+03 1.2649E+03 - 1.2589E-01 2.2943E+03 2.2883E+03 1.0853E+03 1.1322E+03 - 1.4125E-01 2.0483E+03 2.0591E+03 9.7613E+02 1.0007E+03 - 1.5849E-01 1.8430E+03 1.8333E+03 8.5543E+02 8.7818E+02 - 1.7783E-01 1.6428E+03 1.6134E+03 7.5655E+02 7.7285E+02 - 1.9953E-01 1.4335E+03 1.4122E+03 6.7182E+02 6.7632E+02 - 2.2387E-01 1.2367E+03 1.2277E+03 5.8419E+02 5.7404E+02 - 2.5119E-01 1.0619E+03 1.0507E+03 4.9955E+02 4.9117E+02 - 2.8184E-01 9.0586E+02 8.9127E+02 4.2488E+02 4.2154E+02 - 3.1623E-01 7.6864E+02 7.5210E+02 3.5859E+02 3.4940E+02 - 3.5481E-01 6.4441E+02 6.3228E+02 2.9733E+02 2.8913E+02 - 3.9811E-01 5.3181E+02 5.2377E+02 2.5149E+02 2.4035E+02 - 4.4668E-01 4.4289E+02 4.3113E+02 2.0846E+02 1.9649E+02 - 5.0119E-01 3.6641E+02 3.5519E+02 1.6916E+02 1.5759E+02 - 5.6234E-01 2.9740E+02 2.8827E+02 1.3858E+02 1.2777E+02 - 6.3096E-01 2.4068E+02 2.3177E+02 1.1113E+02 1.0315E+02 - 7.0795E-01 1.9488E+02 1.8682E+02 8.8526E+01 8.1749E+01 - 7.9433E-01 1.5749E+02 1.4998E+02 7.0169E+01 6.4603E+01 - 8.9125E-01 1.2515E+02 1.1972E+02 5.5627E+01 5.0171E+01 - 1.0000E+00 9.8782E+01 9.4149E+01 4.3296E+01 3.8615E+01 - 1.1220E+00 7.7695E+01 7.3608E+01 3.3680E+01 2.9383E+01 - 1.2589E+00 6.0818E+01 5.7129E+01 2.5950E+01 2.2279E+01 - 1.4125E+00 4.7788E+01 4.4023E+01 1.9685E+01 1.6865E+01 - 1.5849E+00 3.7119E+01 3.3824E+01 1.4752E+01 1.2698E+01 - 1.7783E+00 2.8405E+01 2.5756E+01 1.1189E+01 9.4298E+00 - 1.9953E+00 2.1527E+01 1.9381E+01 8.4114E+00 6.9054E+00 - 2.2387E+00 1.6262E+01 1.4467E+01 6.1656E+00 5.0492E+00 - 2.5119E+00 1.2233E+01 1.0797E+01 4.5399E+00 3.6787E+00 - 2.8184E+00 9.1186E+00 7.9355E+00 3.2272E+00 2.6597E+00 - 3.1623E+00 6.7808E+00 5.8660E+00 2.3254E+00 1.8626E+00 - 3.5481E+00 5.0122E+00 4.2800E+00 1.6595E+00 1.3100E+00 - 3.9811E+00 3.6935E+00 3.0802E+00 1.1785E+00 9.2310E-01 - 4.4668E+00 2.7043E+00 2.2288E+00 8.2924E-01 6.4555E-01 - 5.0119E+00 1.9636E+00 1.6055E+00 5.7582E-01 4.4224E-01 - 5.6234E+00 1.4244E+00 1.1524E+00 3.9853E-01 2.9743E-01 - 6.3096E+00 1.0336E+00 8.2239E-01 2.7424E-01 1.9991E-01 - 7.0795E+00 7.4264E-01 5.8770E-01 1.8760E-01 1.3795E-01 - 7.9433E+00 5.3565E-01 4.2038E-01 1.2780E-01 9.6488E-02 - 8.9125E+00 3.8161E-01 2.9936E-01 8.5665E-02 6.4466E-02 - 1.0000E+01 2.7196E-01 2.1208E-01 5.6648E-02 4.2500E-02 - 1.1220E+01 1.9380E-01 1.5050E-01 3.7600E-02 2.8245E-02 - 1.2589E+01 1.3871E-01 1.0613E-01 2.5584E-02 1.9092E-02 - 1.4125E+01 9.8554E-02 7.4850E-02 1.7268E-02 1.2902E-02 - 1.5849E+01 6.9740E-02 5.3144E-02 1.1219E-02 8.6032E-03 - 1.7783E+01 4.9855E-02 3.7802E-02 7.5342E-03 5.7857E-03 - 1.9953E+01 3.5589E-02 2.6599E-02 4.9965E-03 3.8762E-03 - 2.2387E+01 2.5271E-02 1.8739E-02 3.2839E-03 2.5742E-03 - 2.5119E+01 1.7849E-02 1.3196E-02 2.1917E-03 1.7063E-03 - 2.8184E+01 1.2765E-02 9.2483E-03 1.4441E-03 1.1509E-03 - 3.1623E+01 8.9623E-03 6.5806E-03 9.6870E-04 7.7124E-04 - 3.5481E+01 6.3571E-03 4.6289E-03 6.4466E-04 5.0694E-04 - 3.9811E+01 4.4980E-03 3.2550E-03 4.3064E-04 3.3551E-04 - 4.4668E+01 3.1640E-03 2.2779E-03 2.8829E-04 2.2935E-04 - 5.0119E+01 2.2289E-03 1.5975E-03 1.9531E-04 1.5334E-04 - 5.6234E+01 1.5789E-03 1.1301E-03 1.3000E-04 1.0006E-04 - 6.3096E+01 1.1112E-03 7.9020E-04 8.5346E-05 6.7518E-05 - 7.0795E+01 7.8119E-04 5.4999E-04 5.6667E-05 4.5277E-05 - 7.9433E+01 5.5127E-04 3.8531E-04 3.8033E-05 3.0432E-05 - 8.9125E+01 3.8609E-04 2.6842E-04 2.5478E-05 2.0707E-05 - 1.0000E+02 2.6993E-04 1.8764E-04 1.7087E-05 1.4144E-05 - 1.1220E+02 1.8938E-04 1.3002E-04 1.1541E-05 9.5508E-06 - 1.2589E+02 1.3266E-04 9.0251E-05 7.7995E-06 6.4528E-06 - 1.4125E+02 9.2758E-05 6.2871E-05 5.3625E-06 4.3203E-06 - 1.5849E+02 6.4904E-05 4.3552E-05 3.6094E-06 2.9193E-06 - 1.7783E+02 4.5181E-05 3.0224E-05 2.3852E-06 2.0056E-06 - 1.9953E+02 3.1409E-05 2.0932E-05 1.6172E-06 1.3840E-06 - 2.2387E+02 2.1961E-05 1.4558E-05 1.0789E-06 9.1663E-07 - 2.5119E+02 1.5380E-05 1.0060E-05 7.3757E-07 6.0270E-07 - 2.8184E+02 1.0718E-05 6.9592E-06 5.0004E-07 4.3517E-07 - 3.1623E+02 7.4259E-06 4.8125E-06 3.3800E-07 2.7602E-07 - 3.5481E+02 5.1427E-06 3.3179E-06 2.2975E-07 1.8415E-07 - 3.9811E+02 3.5774E-06 2.2868E-06 1.5238E-07 1.2602E-07 - 4.4668E+02 2.4713E-06 1.5734E-06 1.0398E-07 8.6354E-08 - 5.0119E+02 1.7113E-06 1.0844E-06 7.1385E-08 5.6465E-08 - 5.6234E+02 1.1909E-06 7.4902E-07 4.7553E-08 3.7191E-08 - 6.3096E+02 8.1177E-07 5.0959E-07 3.2224E-08 2.4117E-08 - 7.0795E+02 5.5939E-07 3.4980E-07 2.1326E-08 1.6121E-08 - 7.9433E+02 3.8477E-07 2.3659E-07 1.4310E-08 1.0962E-08 - 8.9125E+02 2.6340E-07 1.5947E-07 9.5221E-09 7.2716E-09 - 1.0000E+03 1.8234E-07 1.1078E-07 6.5269E-09 4.8714E-09 - 1.1220E+03 1.2338E-07 7.3194E-08 4.5178E-09 3.2123E-09 - 1.2589E+03 8.3948E-08 4.9778E-08 2.8470E-09 2.2078E-09 - 1.4125E+03 5.6552E-08 3.3978E-08 1.9046E-09 1.4418E-09 - 1.5849E+03 3.8156E-08 2.2710E-08 1.2925E-09 8.8257E-10 - 1.7783E+03 2.5861E-08 1.5222E-08 8.4262E-10 5.9045E-10 - 1.9953E+03 1.7500E-08 1.0275E-08 5.7977E-10 4.1389E-10 - 2.2387E+03 1.1787E-08 6.9298E-09 3.7693E-10 2.5837E-10 - 2.5119E+03 7.8508E-09 4.6235E-09 2.6163E-10 1.7745E-10 - 2.8184E+03 5.2898E-09 3.0702E-09 1.7323E-10 1.0555E-10 - 3.1623E+03 3.5883E-09 2.0659E-09 1.0858E-10 7.6892E-11 - 3.5481E+03 2.3026E-09 1.3213E-09 7.0600E-11 4.8521E-11 - 3.9811E+03 1.5301E-09 8.8362E-10 4.3964E-11 3.2770E-11 - 4.4668E+03 1.0220E-09 5.8416E-10 2.9116E-11 2.2454E-11 - 5.0119E+03 6.8106E-10 3.8773E-10 2.0595E-11 1.5691E-11 - 5.6234E+03 4.4350E-10 2.6048E-10 1.3378E-11 1.0217E-11 - 6.3096E+03 2.9968E-10 1.6984E-10 8.2477E-12 5.5779E-12 - 7.0795E+03 1.9915E-10 1.1220E-10 5.3433E-12 3.7829E-12 - 7.9433E+03 1.3133E-10 7.3217E-11 3.6226E-12 2.7441E-12 - 8.9125E+03 8.5522E-11 4.7169E-11 2.4507E-12 1.7397E-12 - 1.0000E+04 5.6218E-11 3.1449E-11 1.5522E-12 1.1314E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.5957E+03 2.6070E+03 1.2291E+03 1.3169E+03 - 1.1220E-01 2.3609E+03 2.3610E+03 1.1214E+03 1.1914E+03 - 1.2589E-01 2.1338E+03 2.1426E+03 1.0031E+03 1.0597E+03 - 1.4125E-01 1.9168E+03 1.9245E+03 8.9564E+02 9.3988E+02 - 1.5849E-01 1.7120E+03 1.7059E+03 8.0316E+02 8.2717E+02 - 1.7783E-01 1.5112E+03 1.5048E+03 7.0583E+02 7.2095E+02 - 1.9953E-01 1.3218E+03 1.3170E+03 6.1470E+02 6.3279E+02 - 2.2387E-01 1.1513E+03 1.1396E+03 5.3742E+02 5.4670E+02 - 2.5119E-01 9.9177E+02 9.7460E+02 4.6320E+02 4.6130E+02 - 2.8184E-01 8.4667E+02 8.2952E+02 3.9231E+02 3.8610E+02 - 3.1623E-01 7.1712E+02 7.0199E+02 3.3011E+02 3.2297E+02 - 3.5481E-01 6.0427E+02 5.8864E+02 2.7791E+02 2.6940E+02 - 3.9811E-01 5.0605E+02 4.8929E+02 2.3159E+02 2.2357E+02 - 4.4668E-01 4.1561E+02 4.0603E+02 1.9115E+02 1.8396E+02 - 5.0119E-01 3.4116E+02 3.3431E+02 1.5714E+02 1.4858E+02 - 5.6234E-01 2.8169E+02 2.7240E+02 1.2721E+02 1.1938E+02 - 6.3096E-01 2.2844E+02 2.2134E+02 1.0300E+02 9.6707E+01 - 7.0795E-01 1.8399E+02 1.7743E+02 8.2892E+01 7.6805E+01 - 7.9433E-01 1.4873E+02 1.4157E+02 6.6017E+01 6.0778E+01 - 8.9125E-01 1.2015E+02 1.1247E+02 5.2448E+01 4.8288E+01 - 1.0000E+00 9.4749E+01 8.9542E+01 4.0933E+01 3.6645E+01 - 1.1220E+00 7.4886E+01 7.0065E+01 3.1544E+01 2.8586E+01 - 1.2589E+00 5.8534E+01 5.4471E+01 2.4396E+01 2.1662E+01 - 1.4125E+00 4.5406E+01 4.2243E+01 1.8871E+01 1.6091E+01 - 1.5849E+00 3.5336E+01 3.2523E+01 1.4335E+01 1.2093E+01 - 1.7783E+00 2.7232E+01 2.4836E+01 1.0645E+01 9.0418E+00 - 1.9953E+00 2.0814E+01 1.8740E+01 7.9368E+00 6.6779E+00 - 2.2387E+00 1.5867E+01 1.4029E+01 5.9294E+00 4.9662E+00 - 2.5119E+00 1.1931E+01 1.0378E+01 4.3368E+00 3.6110E+00 - 2.8184E+00 8.8889E+00 7.7309E+00 3.2081E+00 2.5812E+00 - 3.1623E+00 6.6754E+00 5.7446E+00 2.3094E+00 1.8340E+00 - 3.5481E+00 4.9622E+00 4.1996E+00 1.6361E+00 1.2949E+00 - 3.9811E+00 3.6554E+00 3.0618E+00 1.1610E+00 9.0342E-01 - 4.4668E+00 2.6814E+00 2.2189E+00 8.1813E-01 6.3138E-01 - 5.0119E+00 1.9529E+00 1.6104E+00 5.7029E-01 4.3904E-01 - 5.6234E+00 1.4172E+00 1.1544E+00 3.9525E-01 2.9998E-01 - 6.3096E+00 1.0237E+00 8.2054E-01 2.7368E-01 2.0518E-01 - 7.0795E+00 7.3419E-01 5.8374E-01 1.8659E-01 1.4176E-01 - 7.9433E+00 5.3116E-01 4.1886E-01 1.2333E-01 9.6893E-02 - 8.9125E+00 3.8411E-01 2.9984E-01 8.3072E-02 6.5494E-02 - 1.0000E+01 2.7070E-01 2.1010E-01 5.6266E-02 4.3023E-02 - 1.1220E+01 1.9293E-01 1.4887E-01 3.7985E-02 2.8663E-02 - 1.2589E+01 1.3807E-01 1.0585E-01 2.5559E-02 1.9384E-02 - 1.4125E+01 9.8811E-02 7.4693E-02 1.6915E-02 1.3075E-02 - 1.5849E+01 6.9876E-02 5.2755E-02 1.1283E-02 8.5185E-03 - 1.7783E+01 4.9702E-02 3.7389E-02 7.6226E-03 5.6790E-03 - 1.9953E+01 3.5312E-02 2.6439E-02 5.0621E-03 3.7994E-03 - 2.2387E+01 2.5011E-02 1.8897E-02 3.3810E-03 2.5534E-03 - 2.5119E+01 1.7660E-02 1.3247E-02 2.2440E-03 1.8002E-03 - 2.8184E+01 1.2400E-02 9.2135E-03 1.5104E-03 1.1523E-03 - 3.1623E+01 8.9749E-03 6.5674E-03 9.7973E-04 7.6903E-04 - 3.5481E+01 6.3650E-03 4.6157E-03 6.5467E-04 5.0875E-04 - 3.9811E+01 4.5042E-03 3.2684E-03 4.2960E-04 3.4183E-04 - 4.4668E+01 3.1770E-03 2.3009E-03 2.8584E-04 2.2673E-04 - 5.0119E+01 2.2433E-03 1.6136E-03 1.9060E-04 1.4999E-04 - 5.6234E+01 1.5800E-03 1.1342E-03 1.2667E-04 1.0245E-04 - 6.3096E+01 1.1102E-03 7.9183E-04 8.5826E-05 6.9935E-05 - 7.0795E+01 7.7987E-04 5.5005E-04 5.8757E-05 4.5933E-05 - 7.9433E+01 5.4833E-04 3.8509E-04 3.9173E-05 3.0620E-05 - 8.9125E+01 3.8411E-04 2.6776E-04 2.5184E-05 2.0916E-05 - 1.0000E+02 2.7009E-04 1.8750E-04 1.7248E-05 1.4209E-05 - 1.1220E+02 1.8913E-04 1.3050E-04 1.1619E-05 9.3889E-06 - 1.2589E+02 1.3260E-04 9.0910E-05 7.9697E-06 6.3393E-06 - 1.4125E+02 9.2848E-05 6.2958E-05 5.3594E-06 4.3168E-06 - 1.5849E+02 6.4975E-05 4.3563E-05 3.5620E-06 2.9062E-06 - 1.7783E+02 4.5427E-05 3.0198E-05 2.4204E-06 1.9882E-06 - 1.9953E+02 3.1734E-05 2.0966E-05 1.6333E-06 1.3522E-06 - 2.2387E+02 2.2129E-05 1.4507E-05 1.1338E-06 8.9418E-07 - 2.5119E+02 1.5408E-05 1.0054E-05 7.6458E-07 5.8370E-07 - 2.8184E+02 1.0628E-05 6.9707E-06 4.9717E-07 4.0481E-07 - 3.1623E+02 7.4414E-06 4.8160E-06 3.4493E-07 2.7023E-07 - 3.5481E+02 5.1490E-06 3.3276E-06 2.3379E-07 1.8160E-07 - 3.9811E+02 3.5669E-06 2.2938E-06 1.5942E-07 1.2408E-07 - 4.4668E+02 2.4679E-06 1.5653E-06 1.0686E-07 8.4059E-08 - 5.0119E+02 1.7148E-06 1.0782E-06 7.0674E-08 5.7461E-08 - 5.6234E+02 1.1894E-06 7.4895E-07 4.6995E-08 3.7281E-08 - 6.3096E+02 8.1517E-07 5.1142E-07 3.1919E-08 2.5187E-08 - 7.0795E+02 5.6056E-07 3.4953E-07 2.2044E-08 1.7071E-08 - 7.9433E+02 3.8378E-07 2.3836E-07 1.4315E-08 1.1492E-08 - 8.9125E+02 2.6403E-07 1.6176E-07 9.5427E-09 7.6897E-09 - 1.0000E+03 1.8241E-07 1.1067E-07 6.4767E-09 5.0330E-09 - 1.1220E+03 1.2274E-07 7.4224E-08 4.1969E-09 3.3548E-09 - 1.2589E+03 8.3110E-08 4.9424E-08 2.9109E-09 2.2642E-09 - 1.4125E+03 5.6127E-08 3.3448E-08 1.9543E-09 1.4743E-09 - 1.5849E+03 3.7778E-08 2.3011E-08 1.2429E-09 9.6939E-10 - 1.7783E+03 2.5761E-08 1.5263E-08 8.4313E-10 6.5166E-10 - 1.9953E+03 1.7282E-08 1.0254E-08 5.6638E-10 4.2563E-10 - 2.2387E+03 1.1503E-08 6.8448E-09 3.8219E-10 2.7948E-10 - 2.5119E+03 7.7243E-09 4.5209E-09 2.4719E-10 1.8677E-10 - 2.8184E+03 5.1995E-09 3.0596E-09 1.5975E-10 1.2293E-10 - 3.1623E+03 3.6043E-09 2.0932E-09 1.0932E-10 7.7212E-11 - 3.5481E+03 2.3382E-09 1.3524E-09 6.6772E-11 4.9668E-11 - 3.9811E+03 1.5528E-09 8.9721E-10 4.3892E-11 3.3268E-11 - 4.4668E+03 1.0327E-09 5.8960E-10 2.8384E-11 2.1607E-11 - 5.0119E+03 6.9091E-10 3.8896E-10 1.8436E-11 1.3192E-11 - 5.6234E+03 4.5853E-10 2.5666E-10 1.2142E-11 8.9674E-12 - 6.3096E+03 3.0104E-10 1.6741E-10 8.2140E-12 6.0792E-12 - 7.0795E+03 1.9927E-10 1.1139E-10 5.9527E-12 3.8182E-12 - 7.9433E+03 1.2945E-10 7.3603E-11 3.7684E-12 2.4532E-12 - 8.9125E+03 8.5065E-11 4.7963E-11 2.3334E-12 1.6464E-12 - 1.0000E+04 5.7445E-11 3.0662E-11 1.4339E-12 9.3257E-13 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.6174E+03 2.6043E+03 1.2285E+03 1.3159E+03 - 1.1220E-01 2.3885E+03 2.3771E+03 1.1302E+03 1.1932E+03 - 1.2589E-01 2.1566E+03 2.1426E+03 1.0244E+03 1.0696E+03 - 1.4125E-01 1.9403E+03 1.9141E+03 9.0377E+02 9.4689E+02 - 1.5849E-01 1.7279E+03 1.7023E+03 8.0433E+02 8.2742E+02 - 1.7783E-01 1.5236E+03 1.5046E+03 7.1012E+02 7.2917E+02 - 1.9953E-01 1.3311E+03 1.3174E+03 6.2025E+02 6.3345E+02 - 2.2387E-01 1.1603E+03 1.1317E+03 5.3658E+02 5.4068E+02 - 2.5119E-01 1.0000E+03 9.7487E+02 4.5962E+02 4.6048E+02 - 2.8184E-01 8.4741E+02 8.3060E+02 3.9120E+02 3.9060E+02 - 3.1623E-01 7.1398E+02 6.9830E+02 3.3153E+02 3.2905E+02 - 3.5481E-01 6.0006E+02 5.8418E+02 2.7685E+02 2.7328E+02 - 3.9811E-01 5.0203E+02 4.8358E+02 2.2821E+02 2.2520E+02 - 4.4668E-01 4.1721E+02 4.0294E+02 1.8947E+02 1.8584E+02 - 5.0119E-01 3.4247E+02 3.3265E+02 1.5716E+02 1.4915E+02 - 5.6234E-01 2.8037E+02 2.7058E+02 1.2626E+02 1.1896E+02 - 6.3096E-01 2.2793E+02 2.1867E+02 1.0122E+02 9.6565E+01 - 7.0795E-01 1.8398E+02 1.7858E+02 8.2340E+01 7.6628E+01 - 7.9433E-01 1.4815E+02 1.4388E+02 6.5387E+01 5.9449E+01 - 8.9125E-01 1.1893E+02 1.1237E+02 5.1552E+01 4.6444E+01 - 1.0000E+00 9.4812E+01 8.8659E+01 4.0844E+01 3.6612E+01 - 1.1220E+00 7.4544E+01 7.0313E+01 3.1707E+01 2.8614E+01 - 1.2589E+00 5.8346E+01 5.5155E+01 2.4641E+01 2.1910E+01 - 1.4125E+00 4.5502E+01 4.2360E+01 1.8827E+01 1.6397E+01 - 1.5849E+00 3.5376E+01 3.2786E+01 1.4411E+01 1.2206E+01 - 1.7783E+00 2.7366E+01 2.5166E+01 1.0873E+01 9.0660E+00 - 1.9953E+00 2.0706E+01 1.8899E+01 7.9796E+00 6.7870E+00 - 2.2387E+00 1.5636E+01 1.4120E+01 5.9404E+00 5.0088E+00 - 2.5119E+00 1.1856E+01 1.0521E+01 4.3784E+00 3.5700E+00 - 2.8184E+00 9.0261E+00 7.8166E+00 3.1125E+00 2.5789E+00 - 3.1623E+00 6.7003E+00 5.7544E+00 2.2758E+00 1.8461E+00 - 3.5481E+00 4.9436E+00 4.2026E+00 1.6510E+00 1.3048E+00 - 3.9811E+00 3.6342E+00 3.0511E+00 1.1760E+00 9.1403E-01 - 4.4668E+00 2.6692E+00 2.2242E+00 8.2089E-01 6.3851E-01 - 5.0119E+00 1.9453E+00 1.6212E+00 5.6282E-01 4.3942E-01 - 5.6234E+00 1.4169E+00 1.1688E+00 3.8488E-01 3.0094E-01 - 6.3096E+00 1.0231E+00 8.3059E-01 2.6509E-01 2.0610E-01 - 7.0795E+00 7.3601E-01 5.8852E-01 1.8128E-01 1.4190E-01 - 7.9433E+00 5.2751E-01 4.2058E-01 1.2331E-01 9.6351E-02 - 8.9125E+00 3.8081E-01 3.0405E-01 8.3353E-02 6.3121E-02 - 1.0000E+01 2.7029E-01 2.1080E-01 5.6344E-02 4.2825E-02 - 1.1220E+01 1.9228E-01 1.4918E-01 3.8154E-02 2.8991E-02 - 1.2589E+01 1.3744E-01 1.0553E-01 2.5619E-02 1.9331E-02 - 1.4125E+01 9.7918E-02 7.4655E-02 1.6753E-02 1.2906E-02 - 1.5849E+01 6.9626E-02 5.2960E-02 1.0920E-02 8.7221E-03 - 1.7783E+01 4.9591E-02 3.7590E-02 7.3395E-03 5.7726E-03 - 1.9953E+01 3.4876E-02 2.6595E-02 4.8548E-03 3.7965E-03 - 2.2387E+01 2.4644E-02 1.8811E-02 3.1356E-03 2.6385E-03 - 2.5119E+01 1.7680E-02 1.3177E-02 2.2180E-03 1.7614E-03 - 2.8184E+01 1.2684E-02 9.2953E-03 1.5193E-03 1.1700E-03 - 3.1623E+01 8.9439E-03 6.5558E-03 9.6729E-04 7.6260E-04 - 3.5481E+01 6.3460E-03 4.6098E-03 6.4391E-04 5.0652E-04 - 3.9811E+01 4.4960E-03 3.2411E-03 4.2706E-04 3.3770E-04 - 4.4668E+01 3.1670E-03 2.2879E-03 2.8402E-04 2.2960E-04 - 5.0119E+01 2.2336E-03 1.6073E-03 1.8875E-04 1.5455E-04 - 5.6234E+01 1.5738E-03 1.1248E-03 1.2727E-04 1.0224E-04 - 6.3096E+01 1.1037E-03 7.8742E-04 8.6127E-05 6.9662E-05 - 7.0795E+01 7.7347E-04 5.4959E-04 5.7283E-05 4.7361E-05 - 7.9433E+01 5.4304E-04 3.8247E-04 3.8606E-05 3.0906E-05 - 8.9125E+01 3.8188E-04 2.6400E-04 2.5716E-05 2.0533E-05 - 1.0000E+02 2.7023E-04 1.8747E-04 1.7044E-05 1.3990E-05 - 1.1220E+02 1.8945E-04 1.3093E-04 1.1481E-05 9.4326E-06 - 1.2589E+02 1.3287E-04 9.0724E-05 7.8400E-06 6.3931E-06 - 1.4125E+02 9.3347E-05 6.3013E-05 5.3195E-06 4.3145E-06 - 1.5849E+02 6.4959E-05 4.3660E-05 3.6026E-06 2.8807E-06 - 1.7783E+02 4.5358E-05 3.0189E-05 2.3813E-06 1.9650E-06 - 1.9953E+02 3.1713E-05 2.1115E-05 1.6429E-06 1.3155E-06 - 2.2387E+02 2.1998E-05 1.4635E-05 1.1095E-06 8.7182E-07 - 2.5119E+02 1.5324E-05 1.0023E-05 7.2925E-07 5.9782E-07 - 2.8184E+02 1.0685E-05 6.9370E-06 5.0589E-07 3.9253E-07 - 3.1623E+02 7.4632E-06 4.8328E-06 3.4485E-07 2.6929E-07 - 3.5481E+02 5.1719E-06 3.3275E-06 2.3224E-07 1.8260E-07 - 3.9811E+02 3.5834E-06 2.2839E-06 1.5915E-07 1.2287E-07 - 4.4668E+02 2.4801E-06 1.5673E-06 1.0527E-07 8.3198E-08 - 5.0119E+02 1.7245E-06 1.0825E-06 7.1647E-08 5.6578E-08 - 5.6234E+02 1.1971E-06 7.4893E-07 4.8349E-08 3.8172E-08 - 6.3096E+02 8.1867E-07 5.0992E-07 3.2404E-08 2.5343E-08 - 7.0795E+02 5.5934E-07 3.4778E-07 2.1870E-08 1.6570E-08 - 7.9433E+02 3.8435E-07 2.3655E-07 1.4832E-08 1.1591E-08 - 8.9125E+02 2.6483E-07 1.6081E-07 1.0122E-08 7.3612E-09 - 1.0000E+03 1.8195E-07 1.1157E-07 6.5020E-09 4.8118E-09 - 1.1220E+03 1.2356E-07 7.4550E-08 4.3056E-09 3.3789E-09 - 1.2589E+03 8.3985E-08 5.0698E-08 2.9596E-09 2.1906E-09 - 1.4125E+03 5.6840E-08 3.4279E-08 1.9607E-09 1.4440E-09 - 1.5849E+03 3.8610E-08 2.2549E-08 1.2909E-09 9.9066E-10 - 1.7783E+03 2.5901E-08 1.5261E-08 8.5001E-10 6.2555E-10 - 1.9953E+03 1.7527E-08 1.0268E-08 5.6750E-10 4.1523E-10 - 2.2387E+03 1.1836E-08 6.9007E-09 3.6528E-10 2.6196E-10 - 2.5119E+03 7.9148E-09 4.6239E-09 2.3729E-10 1.7832E-10 - 2.8184E+03 5.2475E-09 3.1151E-09 1.6235E-10 1.1744E-10 - 3.1623E+03 3.5923E-09 2.1060E-09 1.0503E-10 7.8824E-11 - 3.5481E+03 2.3284E-09 1.3470E-09 6.6804E-11 4.6526E-11 - 3.9811E+03 1.5567E-09 8.8563E-10 4.4558E-11 3.0479E-11 - 4.4668E+03 1.0293E-09 5.9027E-10 3.2773E-11 2.0972E-11 - 5.0119E+03 6.7859E-10 3.8287E-10 2.2102E-11 1.3873E-11 - 5.6234E+03 4.4993E-10 2.5465E-10 1.4208E-11 9.8192E-12 - 6.3096E+03 2.9817E-10 1.6946E-10 8.8288E-12 6.2676E-12 - 7.0795E+03 1.9757E-10 1.0916E-10 5.3910E-12 4.3152E-12 - 7.9433E+03 1.2978E-10 7.1505E-11 3.8199E-12 2.8282E-12 - 8.9125E+03 8.4285E-11 4.6928E-11 2.5932E-12 1.6649E-12 - 1.0000E+04 5.5648E-11 3.0445E-11 1.5387E-12 1.0861E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 2.8295E+03 2.8337E+03 1.3436E+03 1.4255E+03 - 1.1220E-01 2.5714E+03 2.5839E+03 1.2207E+03 1.2876E+03 - 1.2589E-01 2.3347E+03 2.3388E+03 1.1006E+03 1.1434E+03 - 1.4125E-01 2.0998E+03 2.0867E+03 9.8017E+02 1.0135E+03 - 1.5849E-01 1.8638E+03 1.8531E+03 8.6935E+02 8.9528E+02 - 1.7783E-01 1.6438E+03 1.6400E+03 7.6490E+02 7.8131E+02 - 1.9953E-01 1.4379E+03 1.4222E+03 6.6152E+02 6.7891E+02 - 2.2387E-01 1.2516E+03 1.2171E+03 5.7397E+02 5.8087E+02 - 2.5119E-01 1.0683E+03 1.0423E+03 4.9632E+02 4.9137E+02 - 2.8184E-01 9.0399E+02 8.8920E+02 4.2198E+02 4.1606E+02 - 3.1623E-01 7.6017E+02 7.4813E+02 3.5734E+02 3.4670E+02 - 3.5481E-01 6.3866E+02 6.2570E+02 2.9877E+02 2.8591E+02 - 3.9811E-01 5.3607E+02 5.2178E+02 2.4805E+02 2.3601E+02 - 4.4668E-01 4.4461E+02 4.3083E+02 2.0598E+02 1.9523E+02 - 5.0119E-01 3.6345E+02 3.5466E+02 1.6694E+02 1.6036E+02 - 5.6234E-01 2.9639E+02 2.8880E+02 1.3583E+02 1.2898E+02 - 6.3096E-01 2.4275E+02 2.3182E+02 1.1070E+02 1.0319E+02 - 7.0795E-01 1.9764E+02 1.8684E+02 8.8154E+01 8.1820E+01 - 7.9433E-01 1.5672E+02 1.5037E+02 6.9667E+01 6.3419E+01 - 8.9125E-01 1.2406E+02 1.1904E+02 5.5039E+01 4.9107E+01 - 1.0000E+00 9.8999E+01 9.3964E+01 4.3203E+01 3.8222E+01 - 1.1220E+00 7.8184E+01 7.3004E+01 3.3511E+01 2.9318E+01 - 1.2589E+00 6.0915E+01 5.6655E+01 2.5732E+01 2.2273E+01 - 1.4125E+00 4.7172E+01 4.3834E+01 1.9493E+01 1.6998E+01 - 1.5849E+00 3.6440E+01 3.3448E+01 1.4816E+01 1.2712E+01 - 1.7783E+00 2.8133E+01 2.5264E+01 1.1215E+01 9.3463E+00 - 1.9953E+00 2.1412E+01 1.9082E+01 8.3157E+00 6.8855E+00 - 2.2387E+00 1.6175E+01 1.4392E+01 6.1251E+00 5.0534E+00 - 2.5119E+00 1.2141E+01 1.0721E+01 4.5407E+00 3.6466E+00 - 2.8184E+00 9.1626E+00 7.9886E+00 3.2597E+00 2.6458E+00 - 3.1623E+00 6.8086E+00 5.8701E+00 2.3347E+00 1.8660E+00 - 3.5481E+00 5.0275E+00 4.2959E+00 1.6571E+00 1.3209E+00 - 3.9811E+00 3.6907E+00 3.1188E+00 1.1707E+00 9.3251E-01 - 4.4668E+00 2.6999E+00 2.2536E+00 8.2355E-01 6.4577E-01 - 5.0119E+00 1.9647E+00 1.6213E+00 5.7542E-01 4.3882E-01 - 5.6234E+00 1.4181E+00 1.1650E+00 3.9795E-01 3.0370E-01 - 6.3096E+00 1.0279E+00 8.3656E-01 2.7339E-01 2.1110E-01 - 7.0795E+00 7.4555E-01 5.9538E-01 1.8868E-01 1.4314E-01 - 7.9433E+00 5.4150E-01 4.2949E-01 1.2824E-01 9.6677E-02 - 8.9125E+00 3.8703E-01 3.0440E-01 8.6717E-02 6.4533E-02 - 1.0000E+01 2.7052E-01 2.1211E-01 5.6547E-02 4.3393E-02 - 1.1220E+01 1.9187E-01 1.4985E-01 3.7770E-02 2.9067E-02 - 1.2589E+01 1.3747E-01 1.0560E-01 2.5580E-02 1.9358E-02 - 1.4125E+01 9.8448E-02 7.4274E-02 1.7216E-02 1.2901E-02 - 1.5849E+01 7.0159E-02 5.2199E-02 1.1371E-02 8.6232E-03 - 1.7783E+01 4.9727E-02 3.6964E-02 7.5573E-03 5.7544E-03 - 1.9953E+01 3.5319E-02 2.6343E-02 4.9920E-03 3.8905E-03 - 2.2387E+01 2.5478E-02 1.8712E-02 3.2538E-03 2.5633E-03 - 2.5119E+01 1.7713E-02 1.3208E-02 2.0830E-03 1.6476E-03 - 2.8184E+01 1.2518E-02 9.4134E-03 1.4481E-03 1.1776E-03 - 3.1623E+01 8.9547E-03 6.5648E-03 9.7259E-04 7.6544E-04 - 3.5481E+01 6.3350E-03 4.6212E-03 6.4363E-04 5.1224E-04 - 3.9811E+01 4.4775E-03 3.2416E-03 4.3030E-04 3.4090E-04 - 4.4668E+01 3.1623E-03 2.2808E-03 2.8645E-04 2.2808E-04 - 5.0119E+01 2.2315E-03 1.5991E-03 1.9140E-04 1.5397E-04 - 5.6234E+01 1.5769E-03 1.1119E-03 1.2703E-04 1.0230E-04 - 6.3096E+01 1.1110E-03 7.8191E-04 8.3877E-05 6.7449E-05 - 7.0795E+01 7.8075E-04 5.5219E-04 5.6193E-05 4.5150E-05 - 7.9433E+01 5.4856E-04 3.8513E-04 3.7708E-05 3.0526E-05 - 8.9125E+01 3.8488E-04 2.6644E-04 2.5170E-05 2.0687E-05 - 1.0000E+02 2.7003E-04 1.8725E-04 1.7469E-05 1.3974E-05 - 1.1220E+02 1.8898E-04 1.2982E-04 1.1702E-05 9.3692E-06 - 1.2589E+02 1.3191E-04 9.0703E-05 7.8604E-06 6.2727E-06 - 1.4125E+02 9.2362E-05 6.3295E-05 5.2958E-06 4.2685E-06 - 1.5849E+02 6.4592E-05 4.3897E-05 3.5339E-06 2.9358E-06 - 1.7783E+02 4.4940E-05 3.0507E-05 2.3666E-06 1.9747E-06 - 1.9953E+02 3.1472E-05 2.1007E-05 1.6310E-06 1.3429E-06 - 2.2387E+02 2.1997E-05 1.4389E-05 1.1293E-06 8.9937E-07 - 2.5119E+02 1.5218E-05 9.9034E-06 7.5669E-07 5.9702E-07 - 2.8184E+02 1.0625E-05 6.8746E-06 4.9176E-07 4.0143E-07 - 3.1623E+02 7.4509E-06 4.8104E-06 3.3638E-07 2.6816E-07 - 3.5481E+02 5.1284E-06 3.3192E-06 2.2581E-07 1.8197E-07 - 3.9811E+02 3.5585E-06 2.2866E-06 1.5205E-07 1.2061E-07 - 4.4668E+02 2.4754E-06 1.5643E-06 1.0102E-07 8.1049E-08 - 5.0119E+02 1.7058E-06 1.0782E-06 6.9299E-08 5.5911E-08 - 5.6234E+02 1.1870E-06 7.4270E-07 4.8320E-08 3.6917E-08 - 6.3096E+02 8.1502E-07 5.0921E-07 3.2538E-08 2.5559E-08 - 7.0795E+02 5.5982E-07 3.4898E-07 2.1524E-08 1.6899E-08 - 7.9433E+02 3.8506E-07 2.3660E-07 1.4715E-08 1.0961E-08 - 8.9125E+02 2.6244E-07 1.6089E-07 9.6976E-09 7.5041E-09 - 1.0000E+03 1.8111E-07 1.1071E-07 6.3911E-09 4.8488E-09 - 1.1220E+03 1.2314E-07 7.3940E-08 4.2950E-09 3.2212E-09 - 1.2589E+03 8.3325E-08 4.9866E-08 2.8802E-09 2.1489E-09 - 1.4125E+03 5.6400E-08 3.3938E-08 1.9484E-09 1.4021E-09 - 1.5849E+03 3.8172E-08 2.2867E-08 1.2925E-09 9.1713E-10 - 1.7783E+03 2.5763E-08 1.5376E-08 8.5273E-10 6.0691E-10 - 1.9953E+03 1.7415E-08 1.0281E-08 5.4914E-10 3.9033E-10 - 2.2387E+03 1.1661E-08 6.9006E-09 3.6945E-10 2.6465E-10 - 2.5119E+03 7.8863E-09 4.6182E-09 2.5168E-10 1.7684E-10 - 2.8184E+03 5.2954E-09 3.0717E-09 1.6813E-10 1.1336E-10 - 3.1623E+03 3.6115E-09 2.0990E-09 1.1109E-10 8.1366E-11 - 3.5481E+03 2.3480E-09 1.3713E-09 6.9284E-11 5.2888E-11 - 3.9811E+03 1.5527E-09 8.9247E-10 4.5824E-11 3.4053E-11 - 4.4668E+03 1.0284E-09 5.8942E-10 3.3711E-11 2.4697E-11 - 5.0119E+03 6.8614E-10 3.9103E-10 2.1573E-11 1.5710E-11 - 5.6234E+03 4.5340E-10 2.5468E-10 1.3167E-11 8.2967E-12 - 6.3096E+03 2.9829E-10 1.6841E-10 8.2808E-12 6.0540E-12 - 7.0795E+03 1.9682E-10 1.1216E-10 5.6488E-12 4.1744E-12 - 7.9433E+03 1.2948E-10 7.2642E-11 3.9262E-12 2.7939E-12 - 8.9125E+03 8.4499E-11 4.7368E-11 2.4466E-12 1.9129E-12 - 1.0000E+04 5.6199E-11 3.0930E-11 1.5347E-12 1.3495E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.0889E+03 3.0842E+03 1.4680E+03 1.5368E+03 - 1.1220E-01 2.7986E+03 2.8075E+03 1.3229E+03 1.3782E+03 - 1.2589E-01 2.5403E+03 2.5229E+03 1.2000E+03 1.2285E+03 - 1.4125E-01 2.2716E+03 2.2551E+03 1.0738E+03 1.0977E+03 - 1.5849E-01 2.0227E+03 2.0120E+03 9.4783E+02 9.6707E+02 - 1.7783E-01 1.7959E+03 1.7724E+03 8.3612E+02 8.4518E+02 - 1.9953E-01 1.5639E+03 1.5432E+03 7.2875E+02 7.2818E+02 - 2.2387E-01 1.3497E+03 1.3340E+03 6.2897E+02 6.2077E+02 - 2.5119E-01 1.1530E+03 1.1408E+03 5.3993E+02 5.2868E+02 - 2.8184E-01 9.7996E+02 9.6805E+02 4.5715E+02 4.4840E+02 - 3.1623E-01 8.2705E+02 8.1514E+02 3.8754E+02 3.7621E+02 - 3.5481E-01 6.9303E+02 6.8055E+02 3.2628E+02 3.0783E+02 - 3.9811E-01 5.7399E+02 5.6261E+02 2.6875E+02 2.5393E+02 - 4.4668E-01 4.7464E+02 4.6467E+02 2.1817E+02 2.0866E+02 - 5.0119E-01 3.8903E+02 3.8235E+02 1.7844E+02 1.6792E+02 - 5.6234E-01 3.1577E+02 3.0853E+02 1.4567E+02 1.3482E+02 - 6.3096E-01 2.5689E+02 2.4899E+02 1.1750E+02 1.0824E+02 - 7.0795E-01 2.0800E+02 1.9804E+02 9.4078E+01 8.6552E+01 - 7.9433E-01 1.6695E+02 1.5830E+02 7.3916E+01 6.7796E+01 - 8.9125E-01 1.3250E+02 1.2678E+02 5.8043E+01 5.2011E+01 - 1.0000E+00 1.0404E+02 9.8371E+01 4.5728E+01 4.0307E+01 - 1.1220E+00 8.1228E+01 7.6345E+01 3.5286E+01 3.0898E+01 - 1.2589E+00 6.3480E+01 5.9428E+01 2.7259E+01 2.3565E+01 - 1.4125E+00 4.9519E+01 4.6022E+01 2.0481E+01 1.7511E+01 - 1.5849E+00 3.7983E+01 3.4922E+01 1.5404E+01 1.2979E+01 - 1.7783E+00 2.9028E+01 2.6233E+01 1.1773E+01 9.6607E+00 - 1.9953E+00 2.2247E+01 1.9741E+01 8.7972E+00 6.9941E+00 - 2.2387E+00 1.6760E+01 1.4725E+01 6.4369E+00 5.1046E+00 - 2.5119E+00 1.2414E+01 1.0934E+01 4.6529E+00 3.7659E+00 - 2.8184E+00 9.1690E+00 8.1358E+00 3.2878E+00 2.6823E+00 - 3.1623E+00 6.8869E+00 5.9362E+00 2.3929E+00 1.9099E+00 - 3.5481E+00 5.0847E+00 4.3179E+00 1.7018E+00 1.3248E+00 - 3.9811E+00 3.7173E+00 3.1294E+00 1.2026E+00 9.1653E-01 - 4.4668E+00 2.7167E+00 2.2621E+00 8.5014E-01 6.4304E-01 - 5.0119E+00 1.9717E+00 1.6281E+00 5.8555E-01 4.4838E-01 - 5.6234E+00 1.4227E+00 1.1635E+00 4.0225E-01 3.0247E-01 - 6.3096E+00 1.0254E+00 8.2996E-01 2.7779E-01 2.0626E-01 - 7.0795E+00 7.3793E-01 5.9401E-01 1.8823E-01 1.3983E-01 - 7.9433E+00 5.2842E-01 4.2174E-01 1.2620E-01 9.5765E-02 - 8.9125E+00 3.7886E-01 2.9785E-01 8.3051E-02 6.5214E-02 - 1.0000E+01 2.6962E-01 2.1197E-01 5.7046E-02 4.3481E-02 - 1.1220E+01 1.9306E-01 1.5004E-01 3.8239E-02 2.9332E-02 - 1.2589E+01 1.3828E-01 1.0590E-01 2.5555E-02 1.9222E-02 - 1.4125E+01 9.7827E-02 7.4600E-02 1.7008E-02 1.3040E-02 - 1.5849E+01 6.9346E-02 5.2309E-02 1.1204E-02 8.5000E-03 - 1.7783E+01 4.9511E-02 3.6889E-02 7.4413E-03 5.6578E-03 - 1.9953E+01 3.5058E-02 2.6339E-02 5.0461E-03 3.7961E-03 - 2.2387E+01 2.4764E-02 1.8737E-02 3.3843E-03 2.4935E-03 - 2.5119E+01 1.7821E-02 1.3050E-02 2.1990E-03 1.7026E-03 - 2.8184E+01 1.2765E-02 9.0659E-03 1.4234E-03 1.1536E-03 - 3.1623E+01 8.9979E-03 6.6164E-03 9.7461E-04 7.6788E-04 - 3.5481E+01 6.3713E-03 4.6468E-03 6.4591E-04 5.1072E-04 - 3.9811E+01 4.4983E-03 3.2638E-03 4.2634E-04 3.4263E-04 - 4.4668E+01 3.1861E-03 2.2999E-03 2.8533E-04 2.3207E-04 - 5.0119E+01 2.2543E-03 1.6114E-03 1.9111E-04 1.5599E-04 - 5.6234E+01 1.5866E-03 1.1327E-03 1.2752E-04 1.0414E-04 - 6.3096E+01 1.1112E-03 7.9018E-04 8.6288E-05 6.9701E-05 - 7.0795E+01 7.8607E-04 5.5268E-04 5.7681E-05 4.6753E-05 - 7.9433E+01 5.5583E-04 3.9026E-04 3.8300E-05 3.2144E-05 - 8.9125E+01 3.8860E-04 2.7219E-04 2.5803E-05 2.1494E-05 - 1.0000E+02 2.7008E-04 1.8798E-04 1.7654E-05 1.4139E-05 - 1.1220E+02 1.8918E-04 1.3028E-04 1.1848E-05 9.6387E-06 - 1.2589E+02 1.3301E-04 9.0706E-05 7.8609E-06 6.4702E-06 - 1.4125E+02 9.2978E-05 6.3241E-05 5.2029E-06 4.3277E-06 - 1.5849E+02 6.4884E-05 4.3711E-05 3.5932E-06 2.8871E-06 - 1.7783E+02 4.5393E-05 3.0225E-05 2.4406E-06 1.9391E-06 - 1.9953E+02 3.1512E-05 2.1110E-05 1.6064E-06 1.3255E-06 - 2.2387E+02 2.1883E-05 1.4601E-05 1.0753E-06 8.7208E-07 - 2.5119E+02 1.5312E-05 1.0070E-05 7.2358E-07 5.8025E-07 - 2.8184E+02 1.0751E-05 6.9471E-06 5.0971E-07 4.1105E-07 - 3.1623E+02 7.4337E-06 4.8434E-06 3.4592E-07 2.7463E-07 - 3.5481E+02 5.1581E-06 3.3228E-06 2.3391E-07 1.8324E-07 - 3.9811E+02 3.5813E-06 2.2827E-06 1.5731E-07 1.2299E-07 - 4.4668E+02 2.4711E-06 1.5715E-06 1.0759E-07 8.2748E-08 - 5.0119E+02 1.7150E-06 1.0817E-06 7.2904E-08 5.6551E-08 - 5.6234E+02 1.1999E-06 7.4822E-07 4.7127E-08 3.7483E-08 - 6.3096E+02 8.2066E-07 5.0668E-07 3.1774E-08 2.5499E-08 - 7.0795E+02 5.6265E-07 3.4703E-07 2.1920E-08 1.6893E-08 - 7.9433E+02 3.8450E-07 2.3759E-07 1.4598E-08 1.0885E-08 - 8.9125E+02 2.6279E-07 1.6116E-07 9.6113E-09 7.2937E-09 - 1.0000E+03 1.8220E-07 1.1071E-07 6.3343E-09 4.9806E-09 - 1.1220E+03 1.2262E-07 7.4336E-08 4.1299E-09 3.3399E-09 - 1.2589E+03 8.2984E-08 5.0140E-08 2.8898E-09 2.2660E-09 - 1.4125E+03 5.6388E-08 3.3696E-08 1.8814E-09 1.5309E-09 - 1.5849E+03 3.8340E-08 2.2815E-08 1.1809E-09 9.8547E-10 - 1.7783E+03 2.5922E-08 1.5191E-08 8.3973E-10 6.3109E-10 - 1.9953E+03 1.7592E-08 1.0319E-08 5.7608E-10 4.0786E-10 - 2.2387E+03 1.1821E-08 6.9476E-09 3.7675E-10 2.6892E-10 - 2.5119E+03 7.8987E-09 4.5768E-09 2.3712E-10 1.8203E-10 - 2.8184E+03 5.2723E-09 3.0512E-09 1.5361E-10 1.3072E-10 - 3.1623E+03 3.6438E-09 2.0766E-09 1.0835E-10 8.0969E-11 - 3.5481E+03 2.3688E-09 1.3418E-09 7.1811E-11 5.3004E-11 - 3.9811E+03 1.5445E-09 8.9177E-10 4.7180E-11 3.6231E-11 - 4.4668E+03 1.0231E-09 5.8620E-10 3.0616E-11 2.4593E-11 - 5.0119E+03 6.9188E-10 3.8159E-10 1.9002E-11 1.3268E-11 - 5.6234E+03 4.5258E-10 2.5109E-10 1.1526E-11 8.8093E-12 - 6.3096E+03 2.9795E-10 1.6800E-10 8.9883E-12 6.4110E-12 - 7.0795E+03 1.9860E-10 1.0870E-10 5.7630E-12 3.9234E-12 - 7.9433E+03 1.3102E-10 6.9947E-11 3.5406E-12 2.3950E-12 - 8.9125E+03 8.5497E-11 4.6887E-11 2.2070E-12 1.6339E-12 - 1.0000E+04 5.6767E-11 3.1225E-11 1.5008E-12 1.0931E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2067E+03 3.2120E+03 1.5212E+03 1.6105E+03 - 1.1220E-01 2.9119E+03 2.9053E+03 1.3788E+03 1.4428E+03 - 1.2589E-01 2.6285E+03 2.6297E+03 1.2431E+03 1.2901E+03 - 1.4125E-01 2.3615E+03 2.3597E+03 1.1155E+03 1.1483E+03 - 1.5849E-01 2.0928E+03 2.0841E+03 9.8025E+02 1.0069E+03 - 1.7783E-01 1.8486E+03 1.8181E+03 8.5803E+02 8.7486E+02 - 1.9953E-01 1.6109E+03 1.5772E+03 7.4716E+02 7.5261E+02 - 2.2387E-01 1.3799E+03 1.3673E+03 6.4673E+02 6.4287E+02 - 2.5119E-01 1.1796E+03 1.1699E+03 5.5662E+02 5.4366E+02 - 2.8184E-01 1.0004E+03 9.8781E+02 4.6980E+02 4.5624E+02 - 3.1623E-01 8.3970E+02 8.3299E+02 3.8974E+02 3.8279E+02 - 3.5481E-01 7.0523E+02 6.9246E+02 3.2717E+02 3.1825E+02 - 3.9811E-01 5.8648E+02 5.6962E+02 2.7364E+02 2.6104E+02 - 4.4668E-01 4.8354E+02 4.7232E+02 2.2626E+02 2.1278E+02 - 5.0119E-01 3.9779E+02 3.8883E+02 1.8397E+02 1.7106E+02 - 5.6234E-01 3.2390E+02 3.1334E+02 1.4718E+02 1.3708E+02 - 6.3096E-01 2.6244E+02 2.5042E+02 1.1830E+02 1.0977E+02 - 7.0795E-01 2.0996E+02 2.0238E+02 9.5796E+01 8.5397E+01 - 7.9433E-01 1.6699E+02 1.6226E+02 7.5946E+01 6.7126E+01 - 8.9125E-01 1.3307E+02 1.2796E+02 5.8883E+01 5.2530E+01 - 1.0000E+00 1.0510E+02 9.9893E+01 4.6149E+01 4.0854E+01 - 1.1220E+00 8.2351E+01 7.7733E+01 3.5782E+01 3.1267E+01 - 1.2589E+00 6.4415E+01 6.0194E+01 2.7520E+01 2.3859E+01 - 1.4125E+00 4.9969E+01 4.6110E+01 2.1156E+01 1.7943E+01 - 1.5849E+00 3.8535E+01 3.4836E+01 1.5894E+01 1.3357E+01 - 1.7783E+00 2.9436E+01 2.6559E+01 1.1779E+01 9.8479E+00 - 1.9953E+00 2.2354E+01 2.0116E+01 8.7022E+00 7.1532E+00 - 2.2387E+00 1.6906E+01 1.4936E+01 6.3597E+00 5.1815E+00 - 2.5119E+00 1.2492E+01 1.1099E+01 4.6431E+00 3.7763E+00 - 2.8184E+00 9.2410E+00 8.2373E+00 3.3382E+00 2.6966E+00 - 3.1623E+00 6.8761E+00 5.9508E+00 2.4059E+00 1.8928E+00 - 3.5481E+00 5.0709E+00 4.3190E+00 1.7158E+00 1.3401E+00 - 3.9811E+00 3.7232E+00 3.1281E+00 1.2004E+00 9.3590E-01 - 4.4668E+00 2.7168E+00 2.2563E+00 8.3254E-01 6.4486E-01 - 5.0119E+00 1.9797E+00 1.6155E+00 5.7867E-01 4.4206E-01 - 5.6234E+00 1.4287E+00 1.1472E+00 3.9368E-01 3.0591E-01 - 6.3096E+00 1.0206E+00 8.1880E-01 2.6569E-01 2.0843E-01 - 7.0795E+00 7.3695E-01 5.8200E-01 1.8234E-01 1.4145E-01 - 7.9433E+00 5.2764E-01 4.1305E-01 1.2293E-01 9.4292E-02 - 8.9125E+00 3.8123E-01 2.9518E-01 8.2517E-02 6.2730E-02 - 1.0000E+01 2.6992E-01 2.1024E-01 5.6547E-02 4.2645E-02 - 1.1220E+01 1.9064E-01 1.4854E-01 3.8079E-02 2.8932E-02 - 1.2589E+01 1.3649E-01 1.0512E-01 2.5179E-02 1.9398E-02 - 1.4125E+01 9.7878E-02 7.4424E-02 1.7026E-02 1.2878E-02 - 1.5849E+01 6.9511E-02 5.2960E-02 1.1181E-02 8.4734E-03 - 1.7783E+01 4.9179E-02 3.7533E-02 7.2309E-03 5.8292E-03 - 1.9953E+01 3.5179E-02 2.6267E-02 4.8399E-03 3.9166E-03 - 2.2387E+01 2.5104E-02 1.8521E-02 3.2498E-03 2.5461E-03 - 2.5119E+01 1.7614E-02 1.3133E-02 2.1552E-03 1.6497E-03 - 2.8184E+01 1.2461E-02 9.2956E-03 1.4285E-03 1.0443E-03 - 3.1623E+01 8.9844E-03 6.5660E-03 9.6926E-04 7.6408E-04 - 3.5481E+01 6.3374E-03 4.6198E-03 6.4140E-04 5.1006E-04 - 3.9811E+01 4.4699E-03 3.2609E-03 4.2562E-04 3.4000E-04 - 4.4668E+01 3.1680E-03 2.2890E-03 2.8515E-04 2.2755E-04 - 5.0119E+01 2.2409E-03 1.5951E-03 1.8832E-04 1.5051E-04 - 5.6234E+01 1.5753E-03 1.1205E-03 1.2627E-04 9.9756E-05 - 6.3096E+01 1.1097E-03 7.9014E-04 8.4648E-05 6.6736E-05 - 7.0795E+01 7.8204E-04 5.5322E-04 5.6607E-05 4.4544E-05 - 7.9433E+01 5.5142E-04 3.8583E-04 3.8694E-05 3.0423E-05 - 8.9125E+01 3.8638E-04 2.7012E-04 2.6153E-05 2.0510E-05 - 1.0000E+02 2.7001E-04 1.8686E-04 1.7236E-05 1.4037E-05 - 1.1220E+02 1.8849E-04 1.3019E-04 1.1637E-05 9.3694E-06 - 1.2589E+02 1.3188E-04 9.0855E-05 7.8461E-06 6.3543E-06 - 1.4125E+02 9.2350E-05 6.3145E-05 5.1918E-06 4.3714E-06 - 1.5849E+02 6.4545E-05 4.3735E-05 3.4744E-06 2.9235E-06 - 1.7783E+02 4.5445E-05 3.0340E-05 2.4047E-06 1.9597E-06 - 1.9953E+02 3.1793E-05 2.0921E-05 1.6889E-06 1.3166E-06 - 2.2387E+02 2.2173E-05 1.4482E-05 1.1188E-06 8.9295E-07 - 2.5119E+02 1.5399E-05 1.0069E-05 7.3159E-07 6.0291E-07 - 2.8184E+02 1.0620E-05 7.0249E-06 5.0359E-07 4.0225E-07 - 3.1623E+02 7.4315E-06 4.7965E-06 3.4018E-07 2.7061E-07 - 3.5481E+02 5.1490E-06 3.3119E-06 2.3123E-07 1.8667E-07 - 3.9811E+02 3.5934E-06 2.2863E-06 1.5531E-07 1.2478E-07 - 4.4668E+02 2.4994E-06 1.5736E-06 1.0600E-07 8.2498E-08 - 5.0119E+02 1.7185E-06 1.0887E-06 7.1196E-08 5.6513E-08 - 5.6234E+02 1.1931E-06 7.4768E-07 4.7302E-08 3.6681E-08 - 6.3096E+02 8.1392E-07 5.0903E-07 3.1741E-08 2.5035E-08 - 7.0795E+02 5.6005E-07 3.4579E-07 2.1864E-08 1.6855E-08 - 7.9433E+02 3.8823E-07 2.3573E-07 1.4456E-08 1.1289E-08 - 8.9125E+02 2.6549E-07 1.6071E-07 9.1623E-09 7.6511E-09 - 1.0000E+03 1.8114E-07 1.0987E-07 6.2775E-09 4.9217E-09 - 1.1220E+03 1.2228E-07 7.3878E-08 4.1067E-09 3.3417E-09 - 1.2589E+03 8.3248E-08 5.0011E-08 2.7958E-09 2.2486E-09 - 1.4125E+03 5.6467E-08 3.3762E-08 1.9042E-09 1.5612E-09 - 1.5849E+03 3.8626E-08 2.2752E-08 1.3593E-09 9.9973E-10 - 1.7783E+03 2.6255E-08 1.5306E-08 9.1929E-10 5.8983E-10 - 1.9953E+03 1.7566E-08 1.0164E-08 5.7040E-10 4.2182E-10 - 2.2387E+03 1.1780E-08 6.8811E-09 3.7516E-10 2.9023E-10 - 2.5119E+03 7.8290E-09 4.6457E-09 2.5849E-10 1.8251E-10 - 2.8184E+03 5.2342E-09 3.0453E-09 1.7339E-10 1.2166E-10 - 3.1623E+03 3.6220E-09 2.0953E-09 1.0357E-10 7.7369E-11 - 3.5481E+03 2.3394E-09 1.3692E-09 6.9453E-11 5.1997E-11 - 3.9811E+03 1.5664E-09 9.0461E-10 4.7261E-11 3.5938E-11 - 4.4668E+03 1.0527E-09 5.8726E-10 3.2048E-11 2.3338E-11 - 5.0119E+03 6.9113E-10 3.8291E-10 2.0962E-11 1.4193E-11 - 5.6234E+03 4.5195E-10 2.5508E-10 1.4339E-11 1.0440E-11 - 6.3096E+03 2.9945E-10 1.6802E-10 8.5395E-12 6.1430E-12 - 7.0795E+03 1.9492E-10 1.0994E-10 5.4777E-12 3.9483E-12 - 7.9433E+03 1.2899E-10 7.3037E-11 3.6027E-12 2.6313E-12 - 8.9125E+03 8.5937E-11 4.7500E-11 2.1754E-12 1.8178E-12 - 1.0000E+04 5.6007E-11 3.0389E-11 1.4393E-12 1.2343E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2304E+03 3.2081E+03 1.4965E+03 1.6171E+03 - 1.1220E-01 2.9302E+03 2.8876E+03 1.3740E+03 1.4607E+03 - 1.2589E-01 2.6312E+03 2.6050E+03 1.2382E+03 1.2925E+03 - 1.4125E-01 2.3456E+03 2.3236E+03 1.0972E+03 1.1395E+03 - 1.5849E-01 2.0778E+03 2.0417E+03 9.6033E+02 9.9941E+02 - 1.7783E-01 1.8272E+03 1.7863E+03 8.3645E+02 8.6395E+02 - 1.9953E-01 1.5875E+03 1.5478E+03 7.2598E+02 7.4703E+02 - 2.2387E-01 1.3663E+03 1.3308E+03 6.2668E+02 6.3688E+02 - 2.5119E-01 1.1629E+03 1.1414E+03 5.3654E+02 5.4053E+02 - 2.8184E-01 9.8493E+02 9.6330E+02 4.5556E+02 4.5256E+02 - 3.1623E-01 8.2647E+02 8.0849E+02 3.8421E+02 3.7454E+02 - 3.5481E-01 6.8882E+02 6.7673E+02 3.2342E+02 3.1408E+02 - 3.9811E-01 5.7196E+02 5.5649E+02 2.6927E+02 2.5677E+02 - 4.4668E-01 4.7381E+02 4.5909E+02 2.1778E+02 2.0624E+02 - 5.0119E-01 3.8732E+02 3.7770E+02 1.7482E+02 1.6845E+02 - 5.6234E-01 3.1388E+02 3.0391E+02 1.4244E+02 1.3613E+02 - 6.3096E-01 2.5492E+02 2.4369E+02 1.1600E+02 1.0767E+02 - 7.0795E-01 2.0526E+02 1.9627E+02 9.2650E+01 8.4856E+01 - 7.9433E-01 1.6424E+02 1.5576E+02 7.3453E+01 6.5721E+01 - 8.9125E-01 1.3127E+02 1.2306E+02 5.7401E+01 5.1098E+01 - 1.0000E+00 1.0336E+02 9.7228E+01 4.4719E+01 4.0113E+01 - 1.1220E+00 8.1011E+01 7.6034E+01 3.4772E+01 3.0683E+01 - 1.2589E+00 6.3228E+01 5.9034E+01 2.6820E+01 2.2979E+01 - 1.4125E+00 4.9266E+01 4.5551E+01 2.0463E+01 1.7291E+01 - 1.5849E+00 3.7769E+01 3.4818E+01 1.5439E+01 1.3131E+01 - 1.7783E+00 2.8765E+01 2.6270E+01 1.1539E+01 9.7631E+00 - 1.9953E+00 2.1985E+01 1.9619E+01 8.5754E+00 7.1445E+00 - 2.2387E+00 1.6648E+01 1.4745E+01 6.3805E+00 5.2373E+00 - 2.5119E+00 1.2413E+01 1.0897E+01 4.5976E+00 3.7685E+00 - 2.8184E+00 9.2767E+00 8.0458E+00 3.2911E+00 2.6310E+00 - 3.1623E+00 6.8657E+00 5.9150E+00 2.3903E+00 1.8718E+00 - 3.5481E+00 5.0732E+00 4.3127E+00 1.6963E+00 1.3249E+00 - 3.9811E+00 3.7256E+00 3.1329E+00 1.1922E+00 9.2391E-01 - 4.4668E+00 2.7185E+00 2.2575E+00 8.2552E-01 6.3960E-01 - 5.0119E+00 1.9796E+00 1.6128E+00 5.7590E-01 4.4315E-01 - 5.6234E+00 1.4321E+00 1.1612E+00 4.0215E-01 3.0685E-01 - 6.3096E+00 1.0290E+00 8.3025E-01 2.7223E-01 2.0673E-01 - 7.0795E+00 7.3079E-01 5.9105E-01 1.8505E-01 1.3837E-01 - 7.9433E+00 5.2720E-01 4.1779E-01 1.2461E-01 9.3978E-02 - 8.9125E+00 3.8038E-01 2.9430E-01 8.2404E-02 6.3665E-02 - 1.0000E+01 2.7164E-01 2.0993E-01 5.6634E-02 4.2933E-02 - 1.1220E+01 1.9275E-01 1.4971E-01 3.8037E-02 2.8700E-02 - 1.2589E+01 1.3624E-01 1.0597E-01 2.5336E-02 1.9605E-02 - 1.4125E+01 9.6929E-02 7.4429E-02 1.6758E-02 1.2898E-02 - 1.5849E+01 6.8810E-02 5.2751E-02 1.1107E-02 8.4522E-03 - 1.7783E+01 4.8686E-02 3.7537E-02 7.5071E-03 5.5405E-03 - 1.9953E+01 3.4946E-02 2.6471E-02 4.9570E-03 3.7513E-03 - 2.2387E+01 2.5099E-02 1.8514E-02 3.2080E-03 2.6090E-03 - 2.5119E+01 1.7796E-02 1.2999E-02 2.1529E-03 1.7028E-03 - 2.8184E+01 1.2533E-02 9.3181E-03 1.4510E-03 1.1479E-03 - 3.1623E+01 8.9572E-03 6.5516E-03 9.6502E-04 7.6426E-04 - 3.5481E+01 6.3511E-03 4.6268E-03 6.4276E-04 5.0947E-04 - 3.9811E+01 4.4902E-03 3.2615E-03 4.3096E-04 3.3978E-04 - 4.4668E+01 3.1762E-03 2.2891E-03 2.8783E-04 2.2952E-04 - 5.0119E+01 2.2429E-03 1.6106E-03 1.9137E-04 1.5289E-04 - 5.6234E+01 1.5784E-03 1.1297E-03 1.2677E-04 1.0210E-04 - 6.3096E+01 1.1119E-03 7.8957E-04 8.5595E-05 6.9008E-05 - 7.0795E+01 7.8178E-04 5.5100E-04 5.8816E-05 4.5648E-05 - 7.9433E+01 5.4736E-04 3.8456E-04 3.9974E-05 3.0905E-05 - 8.9125E+01 3.8372E-04 2.6840E-04 2.5957E-05 2.1043E-05 - 1.0000E+02 2.6997E-04 1.8673E-04 1.7501E-05 1.3935E-05 - 1.1220E+02 1.8935E-04 1.2984E-04 1.1777E-05 9.4600E-06 - 1.2589E+02 1.3279E-04 9.0298E-05 7.9110E-06 6.4270E-06 - 1.4125E+02 9.2734E-05 6.2887E-05 5.3539E-06 4.3580E-06 - 1.5849E+02 6.4825E-05 4.3863E-05 3.5756E-06 2.9715E-06 - 1.7783E+02 4.5415E-05 3.0424E-05 2.4359E-06 1.9542E-06 - 1.9953E+02 3.1488E-05 2.1086E-05 1.6411E-06 1.2979E-06 - 2.2387E+02 2.1945E-05 1.4566E-05 1.1108E-06 8.8205E-07 - 2.5119E+02 1.5337E-05 1.0065E-05 7.3335E-07 6.1658E-07 - 2.8184E+02 1.0635E-05 6.9893E-06 5.0923E-07 4.2266E-07 - 3.1623E+02 7.4494E-06 4.8325E-06 3.4237E-07 2.7411E-07 - 3.5481E+02 5.1587E-06 3.3175E-06 2.2617E-07 1.8415E-07 - 3.9811E+02 3.5800E-06 2.2853E-06 1.5146E-07 1.2280E-07 - 4.4668E+02 2.4828E-06 1.5799E-06 1.0273E-07 8.2715E-08 - 5.0119E+02 1.7151E-06 1.0966E-06 6.9858E-08 5.6123E-08 - 5.6234E+02 1.1962E-06 7.4830E-07 4.7872E-08 3.6380E-08 - 6.3096E+02 8.1528E-07 5.0839E-07 3.2360E-08 2.5098E-08 - 7.0795E+02 5.5838E-07 3.4557E-07 2.1576E-08 1.6997E-08 - 7.9433E+02 3.8533E-07 2.3764E-07 1.4183E-08 1.1057E-08 - 8.9125E+02 2.6464E-07 1.6293E-07 9.5862E-09 7.7281E-09 - 1.0000E+03 1.8188E-07 1.1118E-07 6.7377E-09 5.0328E-09 - 1.1220E+03 1.2289E-07 7.5159E-08 4.4935E-09 3.2106E-09 - 1.2589E+03 8.3369E-08 5.0757E-08 2.9251E-09 2.1027E-09 - 1.4125E+03 5.6524E-08 3.3891E-08 1.9387E-09 1.3384E-09 - 1.5849E+03 3.8050E-08 2.2678E-08 1.2710E-09 9.4046E-10 - 1.7783E+03 2.5717E-08 1.5261E-08 8.0381E-10 6.7004E-10 - 1.9953E+03 1.7383E-08 1.0221E-08 5.5886E-10 4.1069E-10 - 2.2387E+03 1.1780E-08 6.9658E-09 3.5449E-10 2.8741E-10 - 2.5119E+03 7.8624E-09 4.6043E-09 2.3858E-10 1.8773E-10 - 2.8184E+03 5.2158E-09 3.0084E-09 1.7371E-10 1.2016E-10 - 3.1623E+03 3.6229E-09 2.0941E-09 1.0966E-10 7.9255E-11 - 3.5481E+03 2.3315E-09 1.3319E-09 6.9585E-11 5.0540E-11 - 3.9811E+03 1.5480E-09 8.7954E-10 4.4758E-11 3.2064E-11 - 4.4668E+03 1.0126E-09 5.8734E-10 2.8033E-11 2.0836E-11 - 5.0119E+03 6.6908E-10 3.9139E-10 1.8139E-11 1.3472E-11 - 5.6234E+03 4.5138E-10 2.5324E-10 1.3049E-11 8.8149E-12 - 6.3096E+03 3.0085E-10 1.6606E-10 8.9640E-12 6.6220E-12 - 7.0795E+03 1.9810E-10 1.0924E-10 5.8520E-12 4.1148E-12 - 7.9433E+03 1.3257E-10 7.1590E-11 3.7143E-12 2.6116E-12 - 8.9125E+03 8.6850E-11 4.6383E-11 2.4243E-12 1.6449E-12 - 1.0000E+04 5.7020E-11 3.0551E-11 1.4941E-12 1.1472E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.8114E+03 3.8323E+03 1.7886E+03 1.9040E+03 - 1.1220E-01 3.4663E+03 3.4428E+03 1.6265E+03 1.6999E+03 - 1.2589E-01 3.1189E+03 3.0916E+03 1.4603E+03 1.5224E+03 - 1.4125E-01 2.7761E+03 2.7386E+03 1.2951E+03 1.3454E+03 - 1.5849E-01 2.4570E+03 2.4188E+03 1.1420E+03 1.1734E+03 - 1.7783E-01 2.1532E+03 2.1179E+03 9.9969E+02 1.0121E+03 - 1.9953E-01 1.8676E+03 1.8344E+03 8.6546E+02 8.7177E+02 - 2.2387E-01 1.6069E+03 1.5804E+03 7.4463E+02 7.4792E+02 - 2.5119E-01 1.3653E+03 1.3351E+03 6.3887E+02 6.3058E+02 - 2.8184E-01 1.1500E+03 1.1157E+03 5.3907E+02 5.2939E+02 - 3.1623E-01 9.6824E+02 9.3359E+02 4.4712E+02 4.4426E+02 - 3.5481E-01 8.0614E+02 7.7843E+02 3.7184E+02 3.6325E+02 - 3.9811E-01 6.5912E+02 6.4407E+02 3.0849E+02 2.9484E+02 - 4.4668E-01 5.4279E+02 5.2653E+02 2.5331E+02 2.3954E+02 - 5.0119E-01 4.4238E+02 4.2620E+02 2.0563E+02 1.8920E+02 - 5.6234E-01 3.5526E+02 3.4449E+02 1.6472E+02 1.5138E+02 - 6.3096E-01 2.8656E+02 2.7674E+02 1.3069E+02 1.2253E+02 - 7.0795E-01 2.2844E+02 2.2044E+02 1.0505E+02 9.5469E+01 - 7.9433E-01 1.8044E+02 1.7364E+02 8.2725E+01 7.3536E+01 - 8.9125E-01 1.4337E+02 1.3525E+02 6.3928E+01 5.6803E+01 - 1.0000E+00 1.1261E+02 1.0591E+02 4.9522E+01 4.3643E+01 - 1.1220E+00 8.7696E+01 8.1842E+01 3.8383E+01 3.3264E+01 - 1.2589E+00 6.7947E+01 6.3208E+01 2.9454E+01 2.4905E+01 - 1.4125E+00 5.2461E+01 4.8236E+01 2.2040E+01 1.8586E+01 - 1.5849E+00 4.0239E+01 3.6308E+01 1.6422E+01 1.3957E+01 - 1.7783E+00 3.0557E+01 2.7488E+01 1.2250E+01 1.0345E+01 - 1.9953E+00 2.3031E+01 2.0688E+01 9.0919E+00 7.4697E+00 - 2.2387E+00 1.7351E+01 1.5340E+01 6.6618E+00 5.3755E+00 - 2.5119E+00 1.2981E+01 1.1240E+01 4.8827E+00 3.8300E+00 - 2.8184E+00 9.6347E+00 8.2096E+00 3.5443E+00 2.7163E+00 - 3.1623E+00 7.0626E+00 5.9994E+00 2.4384E+00 1.9318E+00 - 3.5481E+00 5.1553E+00 4.3645E+00 1.7315E+00 1.3616E+00 - 3.9811E+00 3.7634E+00 3.1610E+00 1.2142E+00 9.4124E-01 - 4.4668E+00 2.7391E+00 2.2702E+00 8.4523E-01 6.5309E-01 - 5.0119E+00 1.9820E+00 1.6338E+00 5.8245E-01 4.5004E-01 - 5.6234E+00 1.4353E+00 1.1625E+00 4.0012E-01 3.0584E-01 - 6.3096E+00 1.0416E+00 8.3450E-01 2.7062E-01 2.0930E-01 - 7.0795E+00 7.5153E-01 5.9472E-01 1.8286E-01 1.4239E-01 - 7.9433E+00 5.3514E-01 4.1952E-01 1.2349E-01 9.3387E-02 - 8.9125E+00 3.7789E-01 3.0111E-01 8.4142E-02 6.4182E-02 - 1.0000E+01 2.6966E-01 2.1070E-01 5.6570E-02 4.2707E-02 - 1.1220E+01 1.9309E-01 1.4935E-01 3.8150E-02 2.8259E-02 - 1.2589E+01 1.3742E-01 1.0645E-01 2.5708E-02 1.9228E-02 - 1.4125E+01 9.8254E-02 7.5498E-02 1.7012E-02 1.3058E-02 - 1.5849E+01 7.0464E-02 5.3122E-02 1.1552E-02 8.6879E-03 - 1.7783E+01 4.9563E-02 3.7646E-02 7.6195E-03 5.6788E-03 - 1.9953E+01 3.5268E-02 2.6861E-02 4.9747E-03 3.8189E-03 - 2.2387E+01 2.5225E-02 1.8879E-02 3.3134E-03 2.5797E-03 - 2.5119E+01 1.7807E-02 1.3262E-02 2.1315E-03 1.6957E-03 - 2.8184E+01 1.2729E-02 9.3606E-03 1.4307E-03 1.1470E-03 - 3.1623E+01 8.9725E-03 6.5840E-03 9.7932E-04 7.6282E-04 - 3.5481E+01 6.3451E-03 4.6410E-03 6.5188E-04 5.1236E-04 - 3.9811E+01 4.4973E-03 3.2614E-03 4.3226E-04 3.4354E-04 - 4.4668E+01 3.1856E-03 2.2882E-03 2.8676E-04 2.2809E-04 - 5.0119E+01 2.2486E-03 1.6035E-03 1.9184E-04 1.5000E-04 - 5.6234E+01 1.5823E-03 1.1293E-03 1.2791E-04 1.0170E-04 - 6.3096E+01 1.1124E-03 7.9345E-04 8.5695E-05 6.9574E-05 - 7.0795E+01 7.8153E-04 5.5091E-04 5.6425E-05 4.6301E-05 - 7.9433E+01 5.5130E-04 3.8439E-04 3.8606E-05 3.0900E-05 - 8.9125E+01 3.8867E-04 2.6774E-04 2.6353E-05 2.1216E-05 - 1.0000E+02 2.7040E-04 1.8749E-04 1.7307E-05 1.4054E-05 - 1.1220E+02 1.8970E-04 1.3023E-04 1.1577E-05 9.4615E-06 - 1.2589E+02 1.3326E-04 9.0781E-05 7.7800E-06 6.4227E-06 - 1.4125E+02 9.3471E-05 6.3354E-05 5.2575E-06 4.3287E-06 - 1.5849E+02 6.5045E-05 4.3920E-05 3.5780E-06 2.9086E-06 - 1.7783E+02 4.5292E-05 3.0476E-05 2.4325E-06 1.9206E-06 - 1.9953E+02 3.1522E-05 2.1285E-05 1.6666E-06 1.2817E-06 - 2.2387E+02 2.1865E-05 1.4650E-05 1.1161E-06 9.0354E-07 - 2.5119E+02 1.5234E-05 1.0152E-05 7.5247E-07 6.0861E-07 - 2.8184E+02 1.0651E-05 7.0764E-06 5.1306E-07 4.0087E-07 - 3.1623E+02 7.4401E-06 4.8155E-06 3.3789E-07 2.7549E-07 - 3.5481E+02 5.1693E-06 3.3234E-06 2.2719E-07 1.8352E-07 - 3.9811E+02 3.5812E-06 2.2892E-06 1.5452E-07 1.2012E-07 - 4.4668E+02 2.4712E-06 1.5749E-06 1.0321E-07 8.3657E-08 - 5.0119E+02 1.7144E-06 1.0874E-06 6.9662E-08 5.7602E-08 - 5.6234E+02 1.1955E-06 7.4431E-07 4.8522E-08 3.8440E-08 - 6.3096E+02 8.1719E-07 5.0400E-07 3.2207E-08 2.5483E-08 - 7.0795E+02 5.6007E-07 3.4763E-07 2.1550E-08 1.6843E-08 - 7.9433E+02 3.8466E-07 2.3971E-07 1.4719E-08 1.1264E-08 - 8.9125E+02 2.6310E-07 1.6164E-07 9.5312E-09 7.5363E-09 - 1.0000E+03 1.8239E-07 1.1022E-07 6.3604E-09 4.9628E-09 - 1.1220E+03 1.2289E-07 7.4542E-08 4.3761E-09 3.3698E-09 - 1.2589E+03 8.3667E-08 5.0601E-08 2.9397E-09 2.2093E-09 - 1.4125E+03 5.7090E-08 3.4206E-08 1.9231E-09 1.4498E-09 - 1.5849E+03 3.8263E-08 2.3086E-08 1.3379E-09 9.5031E-10 - 1.7783E+03 2.5884E-08 1.5371E-08 8.7354E-10 6.2774E-10 - 1.9953E+03 1.7554E-08 1.0226E-08 5.6445E-10 4.0899E-10 - 2.2387E+03 1.1786E-08 6.8273E-09 3.7618E-10 2.6300E-10 - 2.5119E+03 7.8848E-09 4.5324E-09 2.4215E-10 1.7808E-10 - 2.8184E+03 5.3071E-09 3.0463E-09 1.5976E-10 1.2572E-10 - 3.1623E+03 3.6166E-09 2.0792E-09 1.0995E-10 8.1947E-11 - 3.5481E+03 2.3397E-09 1.3378E-09 7.6502E-11 5.3000E-11 - 3.9811E+03 1.5522E-09 8.8902E-10 4.8843E-11 3.4385E-11 - 4.4668E+03 1.0338E-09 5.9374E-10 3.1046E-11 2.2166E-11 - 5.0119E+03 6.8917E-10 3.9493E-10 2.0566E-11 1.4822E-11 - 5.6234E+03 4.4844E-10 2.6230E-10 1.2470E-11 9.9323E-12 - 6.3096E+03 2.9848E-10 1.6929E-10 8.7925E-12 6.1042E-12 - 7.0795E+03 1.9716E-10 1.1051E-10 5.5920E-12 4.0766E-12 - 7.9433E+03 1.3139E-10 7.3147E-11 3.7781E-12 2.4763E-12 - 8.9125E+03 8.6790E-11 4.7651E-11 2.4217E-12 1.6601E-12 - 1.0000E+04 5.5978E-11 3.0697E-11 1.4514E-12 1.0801E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.9955E+03 4.0282E+03 1.9191E+03 1.9794E+03 - 1.1220E-01 3.6357E+03 3.6486E+03 1.7386E+03 1.7880E+03 - 1.2589E-01 3.2806E+03 3.2966E+03 1.5675E+03 1.6012E+03 - 1.4125E-01 2.9516E+03 2.9571E+03 1.4066E+03 1.4190E+03 - 1.5849E-01 2.6345E+03 2.6107E+03 1.2468E+03 1.2386E+03 - 1.7783E-01 2.3148E+03 2.2985E+03 1.0830E+03 1.0794E+03 - 1.9953E-01 2.0150E+03 2.0018E+03 9.4130E+02 9.3403E+02 - 2.2387E-01 1.7458E+03 1.7270E+03 8.1458E+02 8.0380E+02 - 2.5119E-01 1.4863E+03 1.4718E+03 6.9784E+02 6.8544E+02 - 2.8184E-01 1.2491E+03 1.2398E+03 5.9232E+02 5.7248E+02 - 3.1623E-01 1.0529E+03 1.0435E+03 4.9722E+02 4.7357E+02 - 3.5481E-01 8.7759E+02 8.6450E+02 4.1196E+02 3.9045E+02 - 3.9811E-01 7.2841E+02 7.0726E+02 3.3896E+02 3.2214E+02 - 4.4668E-01 5.9509E+02 5.7758E+02 2.8102E+02 2.5936E+02 - 5.0119E-01 4.8051E+02 4.7074E+02 2.2896E+02 2.0855E+02 - 5.6234E-01 3.9067E+02 3.8144E+02 1.8212E+02 1.6758E+02 - 6.3096E-01 3.1521E+02 3.0384E+02 1.4489E+02 1.3059E+02 - 7.0795E-01 2.4977E+02 2.3967E+02 1.1544E+02 1.0306E+02 - 7.9433E-01 1.9738E+02 1.8869E+02 9.0168E+01 8.0527E+01 - 8.9125E-01 1.5464E+02 1.4673E+02 6.9555E+01 6.1623E+01 - 1.0000E+00 1.2019E+02 1.1377E+02 5.3668E+01 4.7044E+01 - 1.1220E+00 9.3513E+01 8.7452E+01 4.0996E+01 3.5852E+01 - 1.2589E+00 7.2270E+01 6.6979E+01 3.1490E+01 2.6390E+01 - 1.4125E+00 5.5544E+01 5.1059E+01 2.3913E+01 1.9651E+01 - 1.5849E+00 4.2101E+01 3.8561E+01 1.7677E+01 1.4535E+01 - 1.7783E+00 3.1967E+01 2.9025E+01 1.3017E+01 1.0579E+01 - 1.9953E+00 2.4046E+01 2.1597E+01 9.5803E+00 7.6345E+00 - 2.2387E+00 1.7896E+01 1.5747E+01 7.0126E+00 5.5613E+00 - 2.5119E+00 1.3328E+01 1.1482E+01 5.0169E+00 4.0253E+00 - 2.8184E+00 9.8351E+00 8.3948E+00 3.5900E+00 2.8253E+00 - 3.1623E+00 7.1728E+00 6.1060E+00 2.5301E+00 1.9527E+00 - 3.5481E+00 5.2188E+00 4.4069E+00 1.7660E+00 1.3638E+00 - 3.9811E+00 3.7869E+00 3.1629E+00 1.2417E+00 9.4864E-01 - 4.4668E+00 2.7448E+00 2.2718E+00 8.6138E-01 6.4334E-01 - 5.0119E+00 1.9906E+00 1.6313E+00 5.8171E-01 4.3878E-01 - 5.6234E+00 1.4430E+00 1.1628E+00 3.9345E-01 3.0712E-01 - 6.3096E+00 1.0287E+00 8.2757E-01 2.7017E-01 2.1170E-01 - 7.0795E+00 7.3055E-01 5.8823E-01 1.8319E-01 1.4450E-01 - 7.9433E+00 5.2465E-01 4.1695E-01 1.2414E-01 9.6887E-02 - 8.9125E+00 3.7874E-01 2.9573E-01 8.5342E-02 6.4578E-02 - 1.0000E+01 2.7048E-01 2.0977E-01 5.7075E-02 4.2818E-02 - 1.1220E+01 1.9253E-01 1.4775E-01 3.8017E-02 2.8852E-02 - 1.2589E+01 1.3745E-01 1.0440E-01 2.5236E-02 1.9459E-02 - 1.4125E+01 9.7714E-02 7.4134E-02 1.6781E-02 1.2889E-02 - 1.5849E+01 6.9444E-02 5.2639E-02 1.1384E-02 8.6324E-03 - 1.7783E+01 4.9057E-02 3.7163E-02 7.5739E-03 5.8292E-03 - 1.9953E+01 3.4966E-02 2.6360E-02 4.9303E-03 3.9486E-03 - 2.2387E+01 2.5033E-02 1.8682E-02 3.2899E-03 2.5914E-03 - 2.5119E+01 1.7528E-02 1.3165E-02 2.0903E-03 1.6774E-03 - 2.8184E+01 1.2504E-02 9.1246E-03 1.4376E-03 1.1166E-03 - 3.1623E+01 8.9596E-03 6.5621E-03 9.7593E-04 7.6253E-04 - 3.5481E+01 6.3442E-03 4.6253E-03 6.5219E-04 5.1017E-04 - 3.9811E+01 4.4810E-03 3.2544E-03 4.3551E-04 3.4160E-04 - 4.4668E+01 3.1596E-03 2.2962E-03 2.8966E-04 2.2945E-04 - 5.0119E+01 2.2300E-03 1.6098E-03 1.9144E-04 1.5424E-04 - 5.6234E+01 1.5765E-03 1.1267E-03 1.2755E-04 1.0336E-04 - 6.3096E+01 1.1178E-03 7.9067E-04 8.5241E-05 6.9524E-05 - 7.0795E+01 7.8392E-04 5.5024E-04 5.7046E-05 4.6527E-05 - 7.9433E+01 5.4659E-04 3.8273E-04 3.9369E-05 3.1764E-05 - 8.9125E+01 3.8503E-04 2.6783E-04 2.5847E-05 2.1126E-05 - 1.0000E+02 2.7103E-04 1.8831E-04 1.7354E-05 1.3893E-05 - 1.1220E+02 1.9006E-04 1.3118E-04 1.1769E-05 9.4548E-06 - 1.2589E+02 1.3311E-04 9.0999E-05 7.9187E-06 6.4182E-06 - 1.4125E+02 9.2619E-05 6.3032E-05 5.3456E-06 4.3197E-06 - 1.5849E+02 6.4412E-05 4.3968E-05 3.6106E-06 2.8751E-06 - 1.7783E+02 4.5295E-05 3.0479E-05 2.4096E-06 1.9033E-06 - 1.9953E+02 3.1700E-05 2.0972E-05 1.6162E-06 1.2998E-06 - 2.2387E+02 2.2079E-05 1.4430E-05 1.0804E-06 9.0062E-07 - 2.5119E+02 1.5334E-05 1.0024E-05 7.2368E-07 5.9785E-07 - 2.8184E+02 1.0689E-05 7.0190E-06 4.9629E-07 4.1026E-07 - 3.1623E+02 7.4719E-06 4.8199E-06 3.4423E-07 2.7586E-07 - 3.5481E+02 5.1659E-06 3.3101E-06 2.2718E-07 1.8550E-07 - 3.9811E+02 3.5915E-06 2.2837E-06 1.5378E-07 1.2203E-07 - 4.4668E+02 2.4967E-06 1.5654E-06 1.0457E-07 8.3004E-08 - 5.0119E+02 1.7263E-06 1.0823E-06 7.0769E-08 5.8027E-08 - 5.6234E+02 1.1961E-06 7.4933E-07 4.8174E-08 3.8085E-08 - 6.3096E+02 8.2012E-07 5.0955E-07 3.1360E-08 2.5498E-08 - 7.0795E+02 5.6475E-07 3.4934E-07 2.0799E-08 1.6768E-08 - 7.9433E+02 3.8857E-07 2.3809E-07 1.4383E-08 1.1016E-08 - 8.9125E+02 2.6621E-07 1.6145E-07 9.8455E-09 7.6611E-09 - 1.0000E+03 1.8188E-07 1.1009E-07 6.1480E-09 5.1921E-09 - 1.1220E+03 1.2278E-07 7.4406E-08 4.1121E-09 3.5074E-09 - 1.2589E+03 8.3053E-08 5.0195E-08 2.8982E-09 2.2563E-09 - 1.4125E+03 5.6356E-08 3.3734E-08 1.9699E-09 1.4386E-09 - 1.5849E+03 3.8493E-08 2.2643E-08 1.3150E-09 1.0176E-09 - 1.7783E+03 2.6120E-08 1.5240E-08 8.8030E-10 6.6096E-10 - 1.9953E+03 1.7556E-08 1.0253E-08 5.7729E-10 4.0821E-10 - 2.2387E+03 1.1844E-08 6.7829E-09 3.6474E-10 2.9119E-10 - 2.5119E+03 7.8974E-09 4.5775E-09 2.3899E-10 1.9608E-10 - 2.8184E+03 5.2007E-09 3.0822E-09 1.6555E-10 1.1952E-10 - 3.1623E+03 3.6244E-09 2.1008E-09 1.0993E-10 7.6779E-11 - 3.5481E+03 2.3475E-09 1.3457E-09 7.4028E-11 5.1715E-11 - 3.9811E+03 1.5678E-09 8.9244E-10 5.0161E-11 3.5307E-11 - 4.4668E+03 1.0265E-09 5.9049E-10 3.1475E-11 2.2315E-11 - 5.0119E+03 6.7928E-10 3.8756E-10 1.9945E-11 1.3328E-11 - 5.6234E+03 4.5394E-10 2.5462E-10 1.3502E-11 9.1169E-12 - 6.3096E+03 2.9570E-10 1.6836E-10 8.5593E-12 6.0047E-12 - 7.0795E+03 1.9411E-10 1.1048E-10 5.8895E-12 3.7324E-12 - 7.9433E+03 1.3041E-10 7.1275E-11 3.8975E-12 2.4934E-12 - 8.9125E+03 8.6639E-11 4.6026E-11 2.4152E-12 1.6757E-12 - 1.0000E+04 5.7530E-11 3.0358E-11 1.5570E-12 1.1106E-12 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.4866E+03 3.5209E+03 1.6817E+03 1.7427E+03 - 1.1220E-01 3.1734E+03 3.2060E+03 1.5398E+03 1.5683E+03 - 1.2589E-01 2.8743E+03 2.8853E+03 1.3867E+03 1.3972E+03 - 1.4125E-01 2.5822E+03 2.6009E+03 1.2261E+03 1.2499E+03 - 1.5849E-01 2.3071E+03 2.3156E+03 1.0825E+03 1.1053E+03 - 1.7783E-01 2.0435E+03 2.0284E+03 9.5554E+02 9.6314E+02 - 1.9953E-01 1.7759E+03 1.7679E+03 8.4017E+02 8.3842E+02 - 2.2387E-01 1.5423E+03 1.5300E+03 7.3092E+02 7.1584E+02 - 2.5119E-01 1.3227E+03 1.3085E+03 6.2320E+02 6.0176E+02 - 2.8184E-01 1.1190E+03 1.1060E+03 5.2967E+02 5.1066E+02 - 3.1623E-01 9.4507E+02 9.3188E+02 4.4801E+02 4.2306E+02 - 3.5481E-01 7.9183E+02 7.7829E+02 3.7296E+02 3.4936E+02 - 3.9811E-01 6.5721E+02 6.4366E+02 3.0846E+02 2.9155E+02 - 4.4668E-01 5.4233E+02 5.2836E+02 2.5155E+02 2.3671E+02 - 5.0119E-01 4.4146E+02 4.3074E+02 2.0527E+02 1.9089E+02 - 5.6234E-01 3.5803E+02 3.4948E+02 1.6769E+02 1.5308E+02 - 6.3096E-01 2.9074E+02 2.7986E+02 1.3425E+02 1.2078E+02 - 7.0795E-01 2.3230E+02 2.2031E+02 1.0705E+02 9.4868E+01 - 7.9433E-01 1.8332E+02 1.7477E+02 8.3963E+01 7.4749E+01 - 8.9125E-01 1.4465E+02 1.3924E+02 6.5779E+01 5.8522E+01 - 1.0000E+00 1.1459E+02 1.0817E+02 5.0785E+01 4.4280E+01 - 1.1220E+00 8.9771E+01 8.3906E+01 3.8786E+01 3.3839E+01 - 1.2589E+00 6.9422E+01 6.4635E+01 2.9481E+01 2.5434E+01 - 1.4125E+00 5.3740E+01 4.9206E+01 2.2432E+01 1.9149E+01 - 1.5849E+00 4.0896E+01 3.7241E+01 1.6923E+01 1.4266E+01 - 1.7783E+00 3.0954E+01 2.7983E+01 1.2588E+01 1.0397E+01 - 1.9953E+00 2.3355E+01 2.0942E+01 9.2999E+00 7.6560E+00 - 2.2387E+00 1.7446E+01 1.5374E+01 6.8238E+00 5.5300E+00 - 2.5119E+00 1.2982E+01 1.1313E+01 4.9264E+00 3.8715E+00 - 2.8184E+00 9.5905E+00 8.3858E+00 3.4887E+00 2.7551E+00 - 3.1623E+00 7.0505E+00 6.0725E+00 2.4675E+00 1.9480E+00 - 3.5481E+00 5.2071E+00 4.4188E+00 1.7391E+00 1.3665E+00 - 3.9811E+00 3.8061E+00 3.1867E+00 1.2182E+00 9.4836E-01 - 4.4668E+00 2.7402E+00 2.2828E+00 8.4784E-01 6.4721E-01 - 5.0119E+00 1.9921E+00 1.6357E+00 5.8622E-01 4.4672E-01 - 5.6234E+00 1.4387E+00 1.1735E+00 4.0505E-01 3.0656E-01 - 6.3096E+00 1.0343E+00 8.3177E-01 2.7681E-01 2.0663E-01 - 7.0795E+00 7.4243E-01 5.9410E-01 1.8802E-01 1.4114E-01 - 7.9433E+00 5.3081E-01 4.2338E-01 1.2755E-01 9.8056E-02 - 8.9125E+00 3.7709E-01 2.9858E-01 8.3450E-02 6.6726E-02 - 1.0000E+01 2.6951E-01 2.1036E-01 5.6155E-02 4.3202E-02 - 1.1220E+01 1.9183E-01 1.4880E-01 3.7939E-02 2.8624E-02 - 1.2589E+01 1.3709E-01 1.0479E-01 2.5399E-02 1.8994E-02 - 1.4125E+01 9.7379E-02 7.3836E-02 1.6607E-02 1.2805E-02 - 1.5849E+01 6.9098E-02 5.2394E-02 1.1109E-02 8.4601E-03 - 1.7783E+01 4.9397E-02 3.7627E-02 7.6486E-03 5.6515E-03 - 1.9953E+01 3.5078E-02 2.6661E-02 5.0495E-03 3.7456E-03 - 2.2387E+01 2.4932E-02 1.8652E-02 3.2136E-03 2.5244E-03 - 2.5119E+01 1.7565E-02 1.2976E-02 2.1233E-03 1.6968E-03 - 2.8184E+01 1.2482E-02 9.1375E-03 1.4293E-03 1.1255E-03 - 3.1623E+01 8.9875E-03 6.5502E-03 9.7075E-04 7.6290E-04 - 3.5481E+01 6.3533E-03 4.6353E-03 6.4758E-04 5.1292E-04 - 3.9811E+01 4.4917E-03 3.2676E-03 4.3302E-04 3.4559E-04 - 4.4668E+01 3.1743E-03 2.2908E-03 2.8938E-04 2.2947E-04 - 5.0119E+01 2.2389E-03 1.6137E-03 1.9138E-04 1.5178E-04 - 5.6234E+01 1.5721E-03 1.1323E-03 1.2780E-04 1.0182E-04 - 6.3096E+01 1.1097E-03 7.9045E-04 8.5480E-05 6.9520E-05 - 7.0795E+01 7.7979E-04 5.5030E-04 5.7527E-05 4.6412E-05 - 7.9433E+01 5.4772E-04 3.8287E-04 3.8560E-05 3.0962E-05 - 8.9125E+01 3.8528E-04 2.6871E-04 2.6359E-05 2.1103E-05 - 1.0000E+02 2.7050E-04 1.8769E-04 1.7086E-05 1.4035E-05 - 1.1220E+02 1.8924E-04 1.3070E-04 1.1555E-05 9.5246E-06 - 1.2589E+02 1.3253E-04 9.0756E-05 7.8775E-06 6.4154E-06 - 1.4125E+02 9.2906E-05 6.3176E-05 5.3073E-06 4.3023E-06 - 1.5849E+02 6.5083E-05 4.3780E-05 3.6049E-06 2.9040E-06 - 1.7783E+02 4.5540E-05 3.0205E-05 2.4520E-06 1.9381E-06 - 1.9953E+02 3.1664E-05 2.0830E-05 1.6854E-06 1.2881E-06 - 2.2387E+02 2.2047E-05 1.4356E-05 1.1242E-06 8.7936E-07 - 2.5119E+02 1.5312E-05 1.0029E-05 7.4987E-07 6.2433E-07 - 2.8184E+02 1.0678E-05 6.9162E-06 5.2311E-07 4.2954E-07 - 3.1623E+02 7.4666E-06 4.8667E-06 3.4689E-07 2.7852E-07 - 3.5481E+02 5.1512E-06 3.3371E-06 2.3356E-07 1.8480E-07 - 3.9811E+02 3.5786E-06 2.2965E-06 1.5557E-07 1.2351E-07 - 4.4668E+02 2.4860E-06 1.5885E-06 1.0391E-07 8.1972E-08 - 5.0119E+02 1.7265E-06 1.0939E-06 6.7976E-08 5.5228E-08 - 5.6234E+02 1.2003E-06 7.4728E-07 4.7409E-08 3.7973E-08 - 6.3096E+02 8.1520E-07 5.0900E-07 3.1992E-08 2.5481E-08 - 7.0795E+02 5.5652E-07 3.4811E-07 2.1728E-08 1.6598E-08 - 7.9433E+02 3.8361E-07 2.3796E-07 1.4626E-08 1.0756E-08 - 8.9125E+02 2.6509E-07 1.6285E-07 9.8889E-09 7.1332E-09 - 1.0000E+03 1.8331E-07 1.0987E-07 6.5396E-09 4.9042E-09 - 1.1220E+03 1.2360E-07 7.4187E-08 4.3482E-09 3.2640E-09 - 1.2589E+03 8.3910E-08 5.0423E-08 2.9131E-09 2.1236E-09 - 1.4125E+03 5.6772E-08 3.3694E-08 2.0006E-09 1.4759E-09 - 1.5849E+03 3.8269E-08 2.2959E-08 1.3316E-09 9.9611E-10 - 1.7783E+03 2.5903E-08 1.5493E-08 8.3334E-10 6.6799E-10 - 1.9953E+03 1.7504E-08 1.0199E-08 5.5771E-10 4.0181E-10 - 2.2387E+03 1.1780E-08 6.8549E-09 3.6510E-10 2.6310E-10 - 2.5119E+03 7.9084E-09 4.5983E-09 2.4929E-10 1.7759E-10 - 2.8184E+03 5.2817E-09 3.0562E-09 1.5959E-10 1.1211E-10 - 3.1623E+03 3.6245E-09 2.1147E-09 1.0505E-10 7.7796E-11 - 3.5481E+03 2.3620E-09 1.3624E-09 7.1569E-11 4.9821E-11 - 3.9811E+03 1.5574E-09 8.8466E-10 4.6893E-11 3.3696E-11 - 4.4668E+03 1.0281E-09 5.8491E-10 3.1427E-11 1.9956E-11 - 5.0119E+03 6.8449E-10 3.8557E-10 2.0759E-11 1.3466E-11 - 5.6234E+03 4.5694E-10 2.5600E-10 1.3950E-11 8.6845E-12 - 6.3096E+03 2.9788E-10 1.6575E-10 8.9477E-12 6.2969E-12 - 7.0795E+03 1.9780E-10 1.1152E-10 6.1021E-12 3.8825E-12 - 7.9433E+03 1.3076E-10 7.3559E-11 3.9395E-12 2.5475E-12 - 8.9125E+03 8.5659E-11 4.7078E-11 2.3974E-12 1.6318E-12 - 1.0000E+04 5.6507E-11 3.0685E-11 1.4122E-12 9.6926E-13 -average flux in [cosZ =-0.80 -- -0.70, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2274E+03 3.2569E+03 1.5695E+03 1.6079E+03 - 1.1220E-01 2.9494E+03 2.9734E+03 1.4243E+03 1.4467E+03 - 1.2589E-01 2.6691E+03 2.7005E+03 1.2802E+03 1.2993E+03 - 1.4125E-01 2.4008E+03 2.4273E+03 1.1430E+03 1.1619E+03 - 1.5849E-01 2.1498E+03 2.1526E+03 1.0177E+03 1.0176E+03 - 1.7783E-01 1.8961E+03 1.8955E+03 9.0084E+02 8.8807E+02 - 1.9953E-01 1.6680E+03 1.6488E+03 7.8087E+02 7.6775E+02 - 2.2387E-01 1.4449E+03 1.4222E+03 6.7616E+02 6.6226E+02 - 2.5119E-01 1.2364E+03 1.2167E+03 5.8568E+02 5.6866E+02 - 2.8184E-01 1.0532E+03 1.0306E+03 4.9402E+02 4.8103E+02 - 3.1623E-01 8.8468E+02 8.7209E+02 4.1420E+02 4.0276E+02 - 3.5481E-01 7.4126E+02 7.2963E+02 3.4890E+02 3.3319E+02 - 3.9811E-01 6.1484E+02 6.0443E+02 2.8976E+02 2.7477E+02 - 4.4668E-01 5.0621E+02 4.9643E+02 2.3735E+02 2.2542E+02 - 5.0119E-01 4.1614E+02 4.0630E+02 1.9459E+02 1.8181E+02 - 5.6234E-01 3.3986E+02 3.3022E+02 1.5941E+02 1.4543E+02 - 6.3096E-01 2.7468E+02 2.6443E+02 1.2681E+02 1.1545E+02 - 7.0795E-01 2.1875E+02 2.1213E+02 9.9782E+01 9.0180E+01 - 7.9433E-01 1.7412E+02 1.6984E+02 8.0029E+01 7.0184E+01 - 8.9125E-01 1.3858E+02 1.3245E+02 6.3261E+01 5.4814E+01 - 1.0000E+00 1.0904E+02 1.0360E+02 4.8500E+01 4.2509E+01 - 1.1220E+00 8.5443E+01 8.0438E+01 3.7286E+01 3.2146E+01 - 1.2589E+00 6.6880E+01 6.2360E+01 2.8615E+01 2.4455E+01 - 1.4125E+00 5.2057E+01 4.8140E+01 2.1635E+01 1.8370E+01 - 1.5849E+00 3.9759E+01 3.6140E+01 1.6182E+01 1.3594E+01 - 1.7783E+00 3.0191E+01 2.7171E+01 1.2051E+01 9.9535E+00 - 1.9953E+00 2.2763E+01 2.0445E+01 8.9755E+00 7.2310E+00 - 2.2387E+00 1.7060E+01 1.5263E+01 6.5912E+00 5.2622E+00 - 2.5119E+00 1.2793E+01 1.1276E+01 4.7735E+00 3.7571E+00 - 2.8184E+00 9.4542E+00 8.2131E+00 3.4533E+00 2.6725E+00 - 3.1623E+00 7.0311E+00 6.0229E+00 2.4653E+00 1.9259E+00 - 3.5481E+00 5.1462E+00 4.3949E+00 1.7371E+00 1.3486E+00 - 3.9811E+00 3.7662E+00 3.1732E+00 1.2134E+00 9.4280E-01 - 4.4668E+00 2.7440E+00 2.2749E+00 8.5275E-01 6.5822E-01 - 5.0119E+00 1.9906E+00 1.6237E+00 5.9669E-01 4.5360E-01 - 5.6234E+00 1.4410E+00 1.1629E+00 4.0864E-01 3.0937E-01 - 6.3096E+00 1.0353E+00 8.3846E-01 2.7368E-01 2.1087E-01 - 7.0795E+00 7.4884E-01 5.8924E-01 1.8638E-01 1.4240E-01 - 7.9433E+00 5.3511E-01 4.1975E-01 1.2815E-01 9.6491E-02 - 8.9125E+00 3.8277E-01 3.0225E-01 8.7152E-02 6.2907E-02 - 1.0000E+01 2.7269E-01 2.1145E-01 5.7149E-02 4.2535E-02 - 1.1220E+01 1.9446E-01 1.4984E-01 3.7859E-02 2.8752E-02 - 1.2589E+01 1.3886E-01 1.0622E-01 2.5479E-02 1.9525E-02 - 1.4125E+01 9.8712E-02 7.5554E-02 1.7186E-02 1.3087E-02 - 1.5849E+01 7.0000E-02 5.3955E-02 1.1337E-02 8.6539E-03 - 1.7783E+01 4.9543E-02 3.8095E-02 7.4410E-03 5.7615E-03 - 1.9953E+01 3.5343E-02 2.7019E-02 4.9979E-03 3.8755E-03 - 2.2387E+01 2.5140E-02 1.9079E-02 3.3704E-03 2.5887E-03 - 2.5119E+01 1.7917E-02 1.3435E-02 2.2565E-03 1.6825E-03 - 2.8184E+01 1.2925E-02 9.5079E-03 1.4538E-03 1.0865E-03 - 3.1623E+01 8.9484E-03 6.5842E-03 9.6778E-04 7.6035E-04 - 3.5481E+01 6.3686E-03 4.6394E-03 6.4335E-04 5.1118E-04 - 3.9811E+01 4.5020E-03 3.2431E-03 4.2822E-04 3.3954E-04 - 4.4668E+01 3.1694E-03 2.2851E-03 2.8278E-04 2.2487E-04 - 5.0119E+01 2.2403E-03 1.6044E-03 1.9149E-04 1.5099E-04 - 5.6234E+01 1.5841E-03 1.1248E-03 1.2756E-04 1.0115E-04 - 6.3096E+01 1.1148E-03 7.9064E-04 8.5078E-05 6.7634E-05 - 7.0795E+01 7.8024E-04 5.4946E-04 5.7217E-05 4.6278E-05 - 7.9433E+01 5.5078E-04 3.8472E-04 3.8569E-05 3.0910E-05 - 8.9125E+01 3.8639E-04 2.7172E-04 2.5908E-05 2.0775E-05 - 1.0000E+02 2.6968E-04 1.8713E-04 1.7130E-05 1.4104E-05 - 1.1220E+02 1.8904E-04 1.2998E-04 1.1482E-05 9.6372E-06 - 1.2589E+02 1.3247E-04 9.0220E-05 7.7471E-06 6.4615E-06 - 1.4125E+02 9.2855E-05 6.2941E-05 5.2826E-06 4.2006E-06 - 1.5849E+02 6.5130E-05 4.3717E-05 3.5907E-06 2.8624E-06 - 1.7783E+02 4.5384E-05 3.0138E-05 2.3902E-06 1.9678E-06 - 1.9953E+02 3.1653E-05 2.0951E-05 1.6524E-06 1.2985E-06 - 2.2387E+02 2.2056E-05 1.4553E-05 1.1180E-06 8.7297E-07 - 2.5119E+02 1.5264E-05 1.0070E-05 7.2923E-07 6.0142E-07 - 2.8184E+02 1.0659E-05 6.9200E-06 4.7869E-07 4.1372E-07 - 3.1623E+02 7.4728E-06 4.8417E-06 3.4046E-07 2.7693E-07 - 3.5481E+02 5.1494E-06 3.3129E-06 2.3094E-07 1.8713E-07 - 3.9811E+02 3.5773E-06 2.2868E-06 1.5398E-07 1.2257E-07 - 4.4668E+02 2.4911E-06 1.5815E-06 1.0352E-07 8.3886E-08 - 5.0119E+02 1.7174E-06 1.0920E-06 7.2388E-08 5.6492E-08 - 5.6234E+02 1.1911E-06 7.4856E-07 4.9371E-08 3.6457E-08 - 6.3096E+02 8.1932E-07 5.0814E-07 3.2615E-08 2.4696E-08 - 7.0795E+02 5.6125E-07 3.4713E-07 2.1626E-08 1.6499E-08 - 7.9433E+02 3.8522E-07 2.3673E-07 1.4329E-08 1.1245E-08 - 8.9125E+02 2.6428E-07 1.6108E-07 9.5015E-09 7.6446E-09 - 1.0000E+03 1.8138E-07 1.1039E-07 6.4918E-09 4.9610E-09 - 1.1220E+03 1.2253E-07 7.4069E-08 4.2577E-09 3.2404E-09 - 1.2589E+03 8.4167E-08 4.9806E-08 2.8902E-09 2.1598E-09 - 1.4125E+03 5.7292E-08 3.3829E-08 1.9596E-09 1.4398E-09 - 1.5849E+03 3.8304E-08 2.2820E-08 1.2234E-09 9.4763E-10 - 1.7783E+03 2.5644E-08 1.5321E-08 7.7936E-10 6.1807E-10 - 1.9953E+03 1.7335E-08 1.0243E-08 5.7633E-10 4.2238E-10 - 2.2387E+03 1.1607E-08 6.8001E-09 3.8808E-10 2.7611E-10 - 2.5119E+03 7.8734E-09 4.5387E-09 2.5121E-10 1.8875E-10 - 2.8184E+03 5.2549E-09 3.0350E-09 1.7026E-10 1.3071E-10 - 3.1623E+03 3.5953E-09 2.0697E-09 1.0523E-10 8.0938E-11 - 3.5481E+03 2.3364E-09 1.3319E-09 7.0013E-11 5.4031E-11 - 3.9811E+03 1.5581E-09 8.8039E-10 4.6704E-11 3.6092E-11 - 4.4668E+03 1.0369E-09 5.8607E-10 2.8051E-11 2.1450E-11 - 5.0119E+03 6.7998E-10 3.8780E-10 1.8624E-11 1.3141E-11 - 5.6234E+03 4.4868E-10 2.5315E-10 1.2535E-11 1.0066E-11 - 6.3096E+03 2.9849E-10 1.6913E-10 8.2989E-12 6.1227E-12 - 7.0795E+03 1.9574E-10 1.0963E-10 5.4878E-12 3.9780E-12 - 7.9433E+03 1.2844E-10 7.0321E-11 3.7491E-12 2.7701E-12 - 8.9125E+03 8.5096E-11 4.5556E-11 2.5749E-12 1.6606E-12 - 1.0000E+04 5.7344E-11 2.9449E-11 1.5573E-12 9.9383E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6900E+03 3.7026E+03 1.7570E+03 1.8370E+03 - 1.1220E-01 3.3720E+03 3.3763E+03 1.5899E+03 1.6590E+03 - 1.2589E-01 3.0481E+03 3.0423E+03 1.4308E+03 1.4884E+03 - 1.4125E-01 2.7411E+03 2.7306E+03 1.2825E+03 1.3111E+03 - 1.5849E-01 2.4470E+03 2.4347E+03 1.1419E+03 1.1459E+03 - 1.7783E-01 2.1521E+03 2.1507E+03 1.0035E+03 1.0036E+03 - 1.9953E-01 1.8857E+03 1.8750E+03 8.7250E+02 8.7172E+02 - 2.2387E-01 1.6367E+03 1.6144E+03 7.5443E+02 7.4586E+02 - 2.5119E-01 1.3955E+03 1.3723E+03 6.4266E+02 6.2706E+02 - 2.8184E-01 1.1826E+03 1.1588E+03 5.4294E+02 5.2738E+02 - 3.1623E-01 9.9401E+02 9.7074E+02 4.5612E+02 4.4150E+02 - 3.5481E-01 8.2107E+02 8.0840E+02 3.7867E+02 3.6247E+02 - 3.9811E-01 6.7900E+02 6.6626E+02 3.1209E+02 2.9501E+02 - 4.4668E-01 5.6277E+02 5.4434E+02 2.5576E+02 2.3890E+02 - 5.0119E-01 4.5681E+02 4.4397E+02 2.0870E+02 1.9082E+02 - 5.6234E-01 3.6739E+02 3.5903E+02 1.6947E+02 1.5103E+02 - 6.3096E-01 2.9550E+02 2.8773E+02 1.3426E+02 1.1983E+02 - 7.0795E-01 2.3431E+02 2.2782E+02 1.0505E+02 9.3065E+01 - 7.9433E-01 1.8480E+02 1.7813E+02 8.2310E+01 7.2124E+01 - 8.9125E-01 1.4652E+02 1.3824E+02 6.3621E+01 5.5962E+01 - 1.0000E+00 1.1476E+02 1.0730E+02 4.8934E+01 4.2651E+01 - 1.1220E+00 8.8614E+01 8.2868E+01 3.7608E+01 3.2097E+01 - 1.2589E+00 6.8301E+01 6.3162E+01 2.8611E+01 2.3960E+01 - 1.4125E+00 5.2573E+01 4.7793E+01 2.1390E+01 1.7857E+01 - 1.5849E+00 4.0145E+01 3.6129E+01 1.6004E+01 1.3191E+01 - 1.7783E+00 3.0409E+01 2.7186E+01 1.1860E+01 9.6755E+00 - 1.9953E+00 2.2903E+01 2.0296E+01 8.6408E+00 7.0389E+00 - 2.2387E+00 1.7058E+01 1.5011E+01 6.2375E+00 4.9919E+00 - 2.5119E+00 1.2697E+01 1.0925E+01 4.4811E+00 3.5254E+00 - 2.8184E+00 9.2785E+00 7.9810E+00 3.2125E+00 2.5401E+00 - 3.1623E+00 6.8780E+00 5.8148E+00 2.2652E+00 1.7723E+00 - 3.5481E+00 5.0242E+00 4.2013E+00 1.5962E+00 1.2319E+00 - 3.9811E+00 3.6730E+00 3.0392E+00 1.1185E+00 8.6401E-01 - 4.4668E+00 2.6787E+00 2.1735E+00 7.6433E-01 5.9859E-01 - 5.0119E+00 1.9189E+00 1.5557E+00 5.1862E-01 4.0320E-01 - 5.6234E+00 1.3704E+00 1.1158E+00 3.5722E-01 2.6876E-01 - 6.3096E+00 9.8425E-01 7.9010E-01 2.4728E-01 1.8003E-01 - 7.0795E+00 7.1072E-01 5.5967E-01 1.6600E-01 1.2130E-01 - 7.9433E+00 5.0985E-01 3.9621E-01 1.1302E-01 8.3112E-02 - 8.9125E+00 3.6348E-01 2.8191E-01 7.6111E-02 5.8245E-02 - 1.0000E+01 2.6288E-01 2.0294E-01 5.0240E-02 3.8630E-02 - 1.1220E+01 1.8702E-01 1.4376E-01 3.3426E-02 2.5638E-02 - 1.2589E+01 1.3328E-01 1.0124E-01 2.2351E-02 1.7189E-02 - 1.4125E+01 9.4725E-02 7.1131E-02 1.5108E-02 1.1525E-02 - 1.5849E+01 6.7384E-02 5.0554E-02 1.0207E-02 7.5511E-03 - 1.7783E+01 4.8146E-02 3.5609E-02 6.7503E-03 5.0419E-03 - 1.9953E+01 3.4129E-02 2.5410E-02 4.4624E-03 3.4613E-03 - 2.2387E+01 2.4256E-02 1.7953E-02 2.8632E-03 2.2536E-03 - 2.5119E+01 1.7149E-02 1.2723E-02 1.8389E-03 1.4856E-03 - 2.8184E+01 1.2177E-02 9.0802E-03 1.2853E-03 1.0331E-03 - 3.1623E+01 8.6449E-03 6.2813E-03 8.5424E-04 6.7217E-04 - 3.5481E+01 6.1150E-03 4.4255E-03 5.7101E-04 4.5275E-04 - 3.9811E+01 4.3416E-03 3.1011E-03 3.8009E-04 3.0249E-04 - 4.4668E+01 3.0695E-03 2.1805E-03 2.5377E-04 2.0253E-04 - 5.0119E+01 2.1622E-03 1.5342E-03 1.7108E-04 1.3749E-04 - 5.6234E+01 1.5201E-03 1.0724E-03 1.1696E-04 9.2252E-05 - 6.3096E+01 1.0640E-03 7.5245E-04 7.8247E-05 6.1879E-05 - 7.0795E+01 7.5090E-04 5.2597E-04 5.1168E-05 4.2092E-05 - 7.9433E+01 5.2701E-04 3.6427E-04 3.4007E-05 2.8694E-05 - 8.9125E+01 3.6813E-04 2.5261E-04 2.2853E-05 1.8677E-05 - 1.0000E+02 2.5944E-04 1.7826E-04 1.5618E-05 1.2775E-05 - 1.1220E+02 1.8107E-04 1.2398E-04 1.0468E-05 8.6751E-06 - 1.2589E+02 1.2682E-04 8.6218E-05 7.0514E-06 5.7991E-06 - 1.4125E+02 8.8677E-05 5.9780E-05 4.8342E-06 3.9297E-06 - 1.5849E+02 6.1670E-05 4.1386E-05 3.2481E-06 2.7053E-06 - 1.7783E+02 4.3170E-05 2.8763E-05 2.1888E-06 1.8423E-06 - 1.9953E+02 3.0206E-05 1.9896E-05 1.4545E-06 1.2036E-06 - 2.2387E+02 2.1084E-05 1.3759E-05 9.9442E-07 7.9712E-07 - 2.5119E+02 1.4546E-05 9.5676E-06 6.7257E-07 5.3419E-07 - 2.8184E+02 1.0179E-05 6.5569E-06 4.5087E-07 3.6013E-07 - 3.1623E+02 7.0532E-06 4.5632E-06 3.1124E-07 2.4815E-07 - 3.5481E+02 4.8943E-06 3.1201E-06 2.1271E-07 1.6833E-07 - 3.9811E+02 3.3970E-06 2.1481E-06 1.4355E-07 1.1243E-07 - 4.4668E+02 2.3424E-06 1.4761E-06 9.7831E-08 7.4434E-08 - 5.0119E+02 1.6136E-06 1.0127E-06 6.7143E-08 5.1063E-08 - 5.6234E+02 1.1223E-06 6.9808E-07 4.3960E-08 3.3207E-08 - 6.3096E+02 7.6564E-07 4.7417E-07 2.9814E-08 2.2624E-08 - 7.0795E+02 5.2515E-07 3.2321E-07 1.9960E-08 1.5551E-08 - 7.9433E+02 3.5917E-07 2.2058E-07 1.3732E-08 1.0509E-08 - 8.9125E+02 2.4784E-07 1.4955E-07 9.2019E-09 6.9676E-09 - 1.0000E+03 1.7177E-07 1.0291E-07 6.0698E-09 4.3353E-09 - 1.1220E+03 1.1555E-07 6.9061E-08 4.0581E-09 2.9945E-09 - 1.2589E+03 7.7780E-08 4.6407E-08 2.6712E-09 2.0708E-09 - 1.4125E+03 5.2463E-08 3.0933E-08 1.8324E-09 1.3193E-09 - 1.5849E+03 3.5548E-08 2.0955E-08 1.2401E-09 8.4790E-10 - 1.7783E+03 2.3977E-08 1.4210E-08 7.6506E-10 5.2477E-10 - 1.9953E+03 1.6120E-08 9.4546E-09 4.9759E-10 3.6426E-10 - 2.2387E+03 1.0829E-08 6.2979E-09 3.1647E-10 2.6313E-10 - 2.5119E+03 7.1994E-09 4.1850E-09 2.0064E-10 1.7710E-10 - 2.8184E+03 4.7772E-09 2.8049E-09 1.2766E-10 1.1527E-10 - 3.1623E+03 3.2867E-09 1.8893E-09 9.8575E-11 7.1238E-11 - 3.5481E+03 2.1199E-09 1.2089E-09 6.7602E-11 4.5252E-11 - 3.9811E+03 1.3996E-09 8.0629E-10 4.2514E-11 2.8515E-11 - 4.4668E+03 9.2483E-10 5.3082E-10 2.7397E-11 1.8428E-11 - 5.0119E+03 6.2419E-10 3.4684E-10 1.8509E-11 1.2509E-11 - 5.6234E+03 4.1189E-10 2.3263E-10 1.2257E-11 7.2833E-12 - 6.3096E+03 2.6957E-10 1.5293E-10 7.9319E-12 5.4117E-12 - 7.0795E+03 1.7875E-10 9.8455E-11 4.9648E-12 3.6059E-12 - 7.9433E+03 1.1729E-10 6.4119E-11 3.2918E-12 2.3654E-12 - 8.9125E+03 7.6596E-11 4.1898E-11 2.1264E-12 1.5315E-12 - 1.0000E+04 5.0245E-11 2.7226E-11 1.4064E-12 9.7822E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2608E+03 3.2256E+03 1.5249E+03 1.6298E+03 - 1.1220E-01 2.9627E+03 2.9366E+03 1.3879E+03 1.4703E+03 - 1.2589E-01 2.6867E+03 2.6751E+03 1.2541E+03 1.3214E+03 - 1.4125E-01 2.4263E+03 2.4064E+03 1.1209E+03 1.1803E+03 - 1.5849E-01 2.1605E+03 2.1328E+03 9.9346E+02 1.0352E+03 - 1.7783E-01 1.9061E+03 1.8725E+03 8.7601E+02 8.9858E+02 - 1.9953E-01 1.6679E+03 1.6393E+03 7.6297E+02 7.7301E+02 - 2.2387E-01 1.4412E+03 1.4152E+03 6.5938E+02 6.6674E+02 - 2.5119E-01 1.2313E+03 1.2060E+03 5.6281E+02 5.6567E+02 - 2.8184E-01 1.0439E+03 1.0223E+03 4.7625E+02 4.7148E+02 - 3.1623E-01 8.8092E+02 8.5758E+02 4.0076E+02 3.9659E+02 - 3.5481E-01 7.3661E+02 7.1023E+02 3.3296E+02 3.2800E+02 - 3.9811E-01 6.1321E+02 5.8600E+02 2.7437E+02 2.6646E+02 - 4.4668E-01 5.0332E+02 4.8247E+02 2.2708E+02 2.1460E+02 - 5.0119E-01 4.0976E+02 3.9510E+02 1.8447E+02 1.7308E+02 - 5.6234E-01 3.3232E+02 3.1972E+02 1.4751E+02 1.3917E+02 - 6.3096E-01 2.6636E+02 2.5607E+02 1.1794E+02 1.1007E+02 - 7.0795E-01 2.1355E+02 2.0448E+02 9.3850E+01 8.6256E+01 - 7.9433E-01 1.7113E+02 1.6065E+02 7.4623E+01 6.7044E+01 - 8.9125E-01 1.3537E+02 1.2641E+02 5.8303E+01 5.2008E+01 - 1.0000E+00 1.0645E+02 1.0001E+02 4.4680E+01 3.9439E+01 - 1.1220E+00 8.3158E+01 7.7043E+01 3.4623E+01 2.9792E+01 - 1.2589E+00 6.4587E+01 5.9143E+01 2.6287E+01 2.2717E+01 - 1.4125E+00 4.9747E+01 4.5505E+01 1.9867E+01 1.6994E+01 - 1.5849E+00 3.8403E+01 3.4621E+01 1.4966E+01 1.2625E+01 - 1.7783E+00 2.9303E+01 2.6024E+01 1.1002E+01 9.1816E+00 - 1.9953E+00 2.1920E+01 1.9372E+01 8.1589E+00 6.6096E+00 - 2.2387E+00 1.6402E+01 1.4423E+01 6.0597E+00 4.7918E+00 - 2.5119E+00 1.2300E+01 1.0616E+01 4.3840E+00 3.4518E+00 - 2.8184E+00 9.1291E+00 7.8284E+00 3.0667E+00 2.4749E+00 - 3.1623E+00 6.7803E+00 5.7392E+00 2.2189E+00 1.7427E+00 - 3.5481E+00 4.9702E+00 4.1593E+00 1.5687E+00 1.2192E+00 - 3.9811E+00 3.6477E+00 3.0014E+00 1.0975E+00 8.5233E-01 - 4.4668E+00 2.6542E+00 2.1676E+00 7.5803E-01 5.8943E-01 - 5.0119E+00 1.9200E+00 1.5594E+00 5.2016E-01 3.9692E-01 - 5.6234E+00 1.3808E+00 1.1055E+00 3.5818E-01 2.7060E-01 - 6.3096E+00 9.9237E-01 7.8786E-01 2.4438E-01 1.8290E-01 - 7.0795E+00 7.2179E-01 5.6572E-01 1.6550E-01 1.2385E-01 - 7.9433E+00 5.2159E-01 4.0371E-01 1.1234E-01 8.5487E-02 - 8.9125E+00 3.6874E-01 2.8783E-01 7.6377E-02 5.7310E-02 - 1.0000E+01 2.6395E-01 2.0330E-01 5.0452E-02 3.7541E-02 - 1.1220E+01 1.8787E-01 1.4367E-01 3.3833E-02 2.5202E-02 - 1.2589E+01 1.3307E-01 1.0172E-01 2.2477E-02 1.7134E-02 - 1.4125E+01 9.4913E-02 7.2070E-02 1.4860E-02 1.1433E-02 - 1.5849E+01 6.7955E-02 5.1154E-02 9.8128E-03 7.5290E-03 - 1.7783E+01 4.7996E-02 3.6417E-02 6.5540E-03 5.0449E-03 - 1.9953E+01 3.4131E-02 2.5695E-02 4.4970E-03 3.3862E-03 - 2.2387E+01 2.4466E-02 1.7947E-02 2.9865E-03 2.2782E-03 - 2.5119E+01 1.7079E-02 1.2684E-02 1.9303E-03 1.5239E-03 - 2.8184E+01 1.2109E-02 8.9176E-03 1.2808E-03 1.0070E-03 - 3.1623E+01 8.6852E-03 6.2954E-03 8.6238E-04 6.7247E-04 - 3.5481E+01 6.1247E-03 4.4311E-03 5.6698E-04 4.5019E-04 - 3.9811E+01 4.3156E-03 3.1055E-03 3.7809E-04 3.0185E-04 - 4.4668E+01 3.0517E-03 2.1771E-03 2.5480E-04 2.0371E-04 - 5.0119E+01 2.1502E-03 1.5317E-03 1.6912E-04 1.3529E-04 - 5.6234E+01 1.5143E-03 1.0759E-03 1.1310E-04 9.0465E-05 - 6.3096E+01 1.0658E-03 7.5119E-04 7.6265E-05 6.0623E-05 - 7.0795E+01 7.4883E-04 5.2519E-04 5.1069E-05 4.1111E-05 - 7.9433E+01 5.2938E-04 3.6749E-04 3.4895E-05 2.7968E-05 - 8.9125E+01 3.6970E-04 2.5715E-04 2.3127E-05 1.8560E-05 - 1.0000E+02 2.5802E-04 1.7804E-04 1.5779E-05 1.2750E-05 - 1.1220E+02 1.8121E-04 1.2388E-04 1.0643E-05 8.6429E-06 - 1.2589E+02 1.2675E-04 8.6142E-05 7.1266E-06 5.9278E-06 - 1.4125E+02 8.8203E-05 5.9594E-05 4.7147E-06 3.9871E-06 - 1.5849E+02 6.1994E-05 4.1331E-05 3.1736E-06 2.5727E-06 - 1.7783E+02 4.3101E-05 2.8834E-05 2.1876E-06 1.7289E-06 - 1.9953E+02 2.9968E-05 1.9961E-05 1.5073E-06 1.1939E-06 - 2.2387E+02 2.0992E-05 1.3688E-05 1.0216E-06 7.9600E-07 - 2.5119E+02 1.4654E-05 9.4827E-06 6.6507E-07 5.3816E-07 - 2.8184E+02 1.0216E-05 6.5371E-06 4.5792E-07 3.7181E-07 - 3.1623E+02 7.0748E-06 4.5354E-06 3.1593E-07 2.5174E-07 - 3.5481E+02 4.8987E-06 3.1142E-06 2.1591E-07 1.6600E-07 - 3.9811E+02 3.3953E-06 2.1475E-06 1.4437E-07 1.0959E-07 - 4.4668E+02 2.3480E-06 1.4800E-06 9.3948E-08 7.4433E-08 - 5.0119E+02 1.6151E-06 1.0163E-06 6.3085E-08 5.1331E-08 - 5.6234E+02 1.1246E-06 6.9739E-07 4.4116E-08 3.4249E-08 - 6.3096E+02 7.6662E-07 4.7443E-07 2.9299E-08 2.2967E-08 - 7.0795E+02 5.2285E-07 3.2332E-07 1.9288E-08 1.5064E-08 - 7.9433E+02 3.6102E-07 2.1985E-07 1.3009E-08 9.9491E-09 - 8.9125E+02 2.4845E-07 1.5081E-07 8.6003E-09 6.8446E-09 - 1.0000E+03 1.6952E-07 1.0300E-07 5.8897E-09 4.5037E-09 - 1.1220E+03 1.1466E-07 6.8948E-08 3.9186E-09 2.9840E-09 - 1.2589E+03 7.8088E-08 4.6455E-08 2.5957E-09 2.0349E-09 - 1.4125E+03 5.2807E-08 3.1159E-08 1.7394E-09 1.2778E-09 - 1.5849E+03 3.5655E-08 2.0839E-08 1.1801E-09 8.4696E-10 - 1.7783E+03 2.3967E-08 1.3969E-08 7.7979E-10 5.1593E-10 - 1.9953E+03 1.5927E-08 9.4339E-09 5.2538E-10 3.7966E-10 - 2.2387E+03 1.0715E-08 6.3472E-09 3.4588E-10 2.3948E-10 - 2.5119E+03 7.2094E-09 4.2120E-09 2.2425E-10 1.5322E-10 - 2.8184E+03 4.8168E-09 2.7716E-09 1.5245E-10 1.0942E-10 - 3.1623E+03 3.2979E-09 1.9048E-09 9.1205E-11 7.2961E-11 - 3.5481E+03 2.1333E-09 1.2059E-09 5.7865E-11 4.8193E-11 - 3.9811E+03 1.4206E-09 8.0094E-10 4.0704E-11 3.0806E-11 - 4.4668E+03 9.3399E-10 5.4197E-10 2.7522E-11 1.8893E-11 - 5.0119E+03 6.2598E-10 3.5762E-10 1.8033E-11 1.3077E-11 - 5.6234E+03 4.1758E-10 2.3158E-10 1.2103E-11 8.9070E-12 - 6.3096E+03 2.7357E-10 1.5495E-10 8.0758E-12 6.0115E-12 - 7.0795E+03 1.8053E-10 1.0218E-10 5.5777E-12 3.5982E-12 - 7.9433E+03 1.1825E-10 6.6612E-11 3.6740E-12 2.1138E-12 - 8.9125E+03 7.8117E-11 4.2102E-11 2.3604E-12 1.3819E-12 - 1.0000E+04 5.1042E-11 2.7205E-11 1.3857E-12 1.0052E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.2347E+03 3.2129E+03 1.5177E+03 1.6252E+03 - 1.1220E-01 2.9597E+03 2.9368E+03 1.3815E+03 1.4730E+03 - 1.2589E-01 2.6906E+03 2.6518E+03 1.2506E+03 1.3095E+03 - 1.4125E-01 2.4121E+03 2.3763E+03 1.1124E+03 1.1613E+03 - 1.5849E-01 2.1367E+03 2.1121E+03 9.8447E+02 1.0227E+03 - 1.7783E-01 1.8800E+03 1.8640E+03 8.6771E+02 8.9044E+02 - 1.9953E-01 1.6566E+03 1.6246E+03 7.5322E+02 7.6674E+02 - 2.2387E-01 1.4308E+03 1.3965E+03 6.4973E+02 6.6213E+02 - 2.5119E-01 1.2182E+03 1.1928E+03 5.5546E+02 5.6284E+02 - 2.8184E-01 1.0410E+03 1.0093E+03 4.7242E+02 4.6651E+02 - 3.1623E-01 8.7410E+02 8.4725E+02 3.9818E+02 3.8987E+02 - 3.5481E-01 7.2586E+02 7.0434E+02 3.3040E+02 3.2684E+02 - 3.9811E-01 6.0155E+02 5.8057E+02 2.7200E+02 2.6604E+02 - 4.4668E-01 4.9454E+02 4.7795E+02 2.2270E+02 2.1265E+02 - 5.0119E-01 4.0549E+02 3.9203E+02 1.8093E+02 1.7152E+02 - 5.6234E-01 3.2782E+02 3.1756E+02 1.4541E+02 1.3711E+02 - 6.3096E-01 2.6615E+02 2.5334E+02 1.1517E+02 1.0902E+02 - 7.0795E-01 2.1280E+02 2.0202E+02 9.2674E+01 8.5887E+01 - 7.9433E-01 1.6782E+02 1.6061E+02 7.3629E+01 6.7290E+01 - 8.9125E-01 1.3343E+02 1.2677E+02 5.7450E+01 5.1615E+01 - 1.0000E+00 1.0440E+02 9.8356E+01 4.4068E+01 3.9084E+01 - 1.1220E+00 8.1846E+01 7.6112E+01 3.3808E+01 2.9828E+01 - 1.2589E+00 6.3864E+01 5.8515E+01 2.6007E+01 2.2316E+01 - 1.4125E+00 4.9294E+01 4.5021E+01 1.9596E+01 1.6592E+01 - 1.5849E+00 3.7748E+01 3.4335E+01 1.4526E+01 1.2305E+01 - 1.7783E+00 2.8848E+01 2.5850E+01 1.0811E+01 9.1811E+00 - 1.9953E+00 2.1556E+01 1.9471E+01 8.0121E+00 6.7265E+00 - 2.2387E+00 1.6147E+01 1.4569E+01 5.8896E+00 4.8526E+00 - 2.5119E+00 1.2321E+01 1.0738E+01 4.2294E+00 3.5676E+00 - 2.8184E+00 9.2352E+00 7.8004E+00 3.0450E+00 2.5342E+00 - 3.1623E+00 6.7542E+00 5.6962E+00 2.1656E+00 1.7356E+00 - 3.5481E+00 4.9708E+00 4.1427E+00 1.5402E+00 1.2179E+00 - 3.9811E+00 3.6284E+00 2.9931E+00 1.0885E+00 8.4642E-01 - 4.4668E+00 2.6344E+00 2.1610E+00 7.5107E-01 5.8759E-01 - 5.0119E+00 1.9064E+00 1.5555E+00 5.1938E-01 3.9610E-01 - 5.6234E+00 1.3848E+00 1.1036E+00 3.5150E-01 2.7108E-01 - 6.3096E+00 1.0058E+00 7.9254E-01 2.4120E-01 1.8909E-01 - 7.0795E+00 7.2621E-01 5.6917E-01 1.6790E-01 1.2598E-01 - 7.9433E+00 5.2253E-01 4.0237E-01 1.1305E-01 8.2608E-02 - 8.9125E+00 3.7349E-01 2.8771E-01 7.3457E-02 5.6791E-02 - 1.0000E+01 2.6476E-01 2.0117E-01 5.0654E-02 3.7961E-02 - 1.1220E+01 1.8718E-01 1.4252E-01 3.4373E-02 2.5473E-02 - 1.2589E+01 1.3306E-01 1.0184E-01 2.2720E-02 1.6922E-02 - 1.4125E+01 9.5637E-02 7.2089E-02 1.4929E-02 1.1181E-02 - 1.5849E+01 6.7818E-02 5.0793E-02 9.7358E-03 7.4816E-03 - 1.7783E+01 4.7922E-02 3.5784E-02 6.5661E-03 5.0255E-03 - 1.9953E+01 3.4203E-02 2.5307E-02 4.4195E-03 3.4239E-03 - 2.2387E+01 2.4251E-02 1.7959E-02 2.8234E-03 2.3573E-03 - 2.5119E+01 1.7049E-02 1.2685E-02 1.8994E-03 1.5905E-03 - 2.8184E+01 1.2271E-02 8.8923E-03 1.2689E-03 1.0482E-03 - 3.1623E+01 8.6445E-03 6.2850E-03 8.5530E-04 6.7058E-04 - 3.5481E+01 6.1126E-03 4.4099E-03 5.6745E-04 4.5070E-04 - 3.9811E+01 4.3087E-03 3.1023E-03 3.8080E-04 3.0437E-04 - 4.4668E+01 3.0369E-03 2.1819E-03 2.5586E-04 2.0421E-04 - 5.0119E+01 2.1410E-03 1.5251E-03 1.6849E-04 1.3762E-04 - 5.6234E+01 1.5099E-03 1.0672E-03 1.1455E-04 9.0975E-05 - 6.3096E+01 1.0693E-03 7.4546E-04 7.7777E-05 6.0627E-05 - 7.0795E+01 7.4957E-04 5.1755E-04 5.0494E-05 4.1528E-05 - 7.9433E+01 5.2591E-04 3.6319E-04 3.3148E-05 2.7728E-05 - 8.9125E+01 3.6950E-04 2.5329E-04 2.2392E-05 1.8918E-05 - 1.0000E+02 2.5786E-04 1.7786E-04 1.5611E-05 1.2625E-05 - 1.1220E+02 1.8128E-04 1.2363E-04 1.0606E-05 8.5538E-06 - 1.2589E+02 1.2667E-04 8.5537E-05 7.0927E-06 5.8433E-06 - 1.4125E+02 8.8439E-05 5.9758E-05 4.7177E-06 3.9378E-06 - 1.5849E+02 6.1772E-05 4.1736E-05 3.2446E-06 2.5805E-06 - 1.7783E+02 4.3306E-05 2.8624E-05 2.2472E-06 1.7694E-06 - 1.9953E+02 3.0153E-05 1.9865E-05 1.4892E-06 1.1976E-06 - 2.2387E+02 2.0970E-05 1.3845E-05 1.0132E-06 7.9927E-07 - 2.5119E+02 1.4671E-05 9.5568E-06 6.9819E-07 5.4762E-07 - 2.8184E+02 1.0255E-05 6.5484E-06 4.7570E-07 3.7824E-07 - 3.1623E+02 7.0721E-06 4.5451E-06 3.1082E-07 2.5028E-07 - 3.5481E+02 4.9098E-06 3.1280E-06 2.0999E-07 1.6882E-07 - 3.9811E+02 3.3985E-06 2.1496E-06 1.4192E-07 1.1257E-07 - 4.4668E+02 2.3399E-06 1.4673E-06 9.6070E-08 7.3537E-08 - 5.0119E+02 1.6156E-06 1.0054E-06 6.5643E-08 5.2009E-08 - 5.6234E+02 1.1211E-06 6.9617E-07 4.5277E-08 3.5189E-08 - 6.3096E+02 7.6727E-07 4.7437E-07 3.0280E-08 2.3486E-08 - 7.0795E+02 5.2782E-07 3.2592E-07 1.9899E-08 1.5839E-08 - 7.9433E+02 3.6187E-07 2.2235E-07 1.2613E-08 1.0473E-08 - 8.9125E+02 2.4663E-07 1.5030E-07 8.6027E-09 6.9990E-09 - 1.0000E+03 1.6921E-07 1.0298E-07 6.1316E-09 4.5171E-09 - 1.1220E+03 1.1466E-07 6.9360E-08 3.9733E-09 2.8933E-09 - 1.2589E+03 7.7687E-08 4.6702E-08 2.6455E-09 1.8951E-09 - 1.4125E+03 5.2448E-08 3.1215E-08 1.7352E-09 1.3776E-09 - 1.5849E+03 3.6025E-08 2.0893E-08 1.1127E-09 8.9585E-10 - 1.7783E+03 2.4165E-08 1.3917E-08 7.2815E-10 5.2878E-10 - 1.9953E+03 1.6109E-08 9.3771E-09 5.0953E-10 3.7409E-10 - 2.2387E+03 1.0838E-08 6.1918E-09 3.4934E-10 2.5484E-10 - 2.5119E+03 7.2293E-09 4.1583E-09 2.2319E-10 1.7400E-10 - 2.8184E+03 4.8252E-09 2.7754E-09 1.4778E-10 1.2095E-10 - 3.1623E+03 3.3177E-09 1.9003E-09 9.9175E-11 7.3756E-11 - 3.5481E+03 2.1299E-09 1.2240E-09 6.0264E-11 4.6567E-11 - 3.9811E+03 1.4103E-09 7.9976E-10 3.8228E-11 2.9923E-11 - 4.4668E+03 9.3867E-10 5.3768E-10 2.5937E-11 1.8170E-11 - 5.0119E+03 6.1962E-10 3.5476E-10 1.7981E-11 1.1274E-11 - 5.6234E+03 4.0464E-10 2.3213E-10 1.1547E-11 7.3244E-12 - 6.3096E+03 2.6774E-10 1.5189E-10 7.9883E-12 5.5560E-12 - 7.0795E+03 1.7558E-10 9.9204E-11 5.2430E-12 3.6607E-12 - 7.9433E+03 1.1566E-10 6.4902E-11 3.2396E-12 2.3286E-12 - 8.9125E+03 7.7923E-11 4.2322E-11 2.1453E-12 1.3861E-12 - 1.0000E+04 5.2342E-11 2.8146E-11 1.2567E-12 9.0078E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.3975E+03 3.3894E+03 1.5985E+03 1.7015E+03 - 1.1220E-01 3.0957E+03 3.0974E+03 1.4525E+03 1.5363E+03 - 1.2589E-01 2.8095E+03 2.7948E+03 1.3056E+03 1.3835E+03 - 1.4125E-01 2.5311E+03 2.4999E+03 1.1688E+03 1.2235E+03 - 1.5849E-01 2.2534E+03 2.2261E+03 1.0440E+03 1.0713E+03 - 1.7783E-01 1.9894E+03 1.9622E+03 9.1463E+02 9.3270E+02 - 1.9953E-01 1.7382E+03 1.7133E+03 7.9206E+02 8.0921E+02 - 2.2387E-01 1.5029E+03 1.4773E+03 6.8671E+02 6.9039E+02 - 2.5119E-01 1.2819E+03 1.2583E+03 5.8799E+02 5.8247E+02 - 2.8184E-01 1.0811E+03 1.0632E+03 4.9654E+02 4.9038E+02 - 3.1623E-01 9.1260E+02 8.8768E+02 4.1542E+02 4.0752E+02 - 3.5481E-01 7.6474E+02 7.3679E+02 3.4825E+02 3.3522E+02 - 3.9811E-01 6.3017E+02 6.0723E+02 2.8894E+02 2.7362E+02 - 4.4668E-01 5.1594E+02 4.9501E+02 2.3390E+02 2.2094E+02 - 5.0119E-01 4.2035E+02 4.0280E+02 1.8738E+02 1.7683E+02 - 5.6234E-01 3.4050E+02 3.2585E+02 1.5126E+02 1.4033E+02 - 6.3096E-01 2.7319E+02 2.6158E+02 1.2125E+02 1.1180E+02 - 7.0795E-01 2.1879E+02 2.0811E+02 9.5499E+01 8.7440E+01 - 7.9433E-01 1.7523E+02 1.6482E+02 7.4594E+01 6.7457E+01 - 8.9125E-01 1.3645E+02 1.3033E+02 5.8796E+01 5.2348E+01 - 1.0000E+00 1.0687E+02 1.0112E+02 4.5543E+01 4.0032E+01 - 1.1220E+00 8.3389E+01 7.7910E+01 3.4773E+01 3.0350E+01 - 1.2589E+00 6.5238E+01 5.9858E+01 2.6482E+01 2.2812E+01 - 1.4125E+00 5.0133E+01 4.5737E+01 2.0015E+01 1.7084E+01 - 1.5849E+00 3.8229E+01 3.4808E+01 1.4943E+01 1.2583E+01 - 1.7783E+00 2.9146E+01 2.6168E+01 1.1102E+01 9.2893E+00 - 1.9953E+00 2.1993E+01 1.9585E+01 8.1673E+00 6.7245E+00 - 2.2387E+00 1.6519E+01 1.4526E+01 5.9293E+00 4.8305E+00 - 2.5119E+00 1.2350E+01 1.0738E+01 4.2900E+00 3.5331E+00 - 2.8184E+00 9.1621E+00 7.9142E+00 3.1091E+00 2.5483E+00 - 3.1623E+00 6.7799E+00 5.7007E+00 2.2170E+00 1.7357E+00 - 3.5481E+00 4.9729E+00 4.1377E+00 1.5672E+00 1.2181E+00 - 3.9811E+00 3.6355E+00 3.0014E+00 1.0882E+00 8.3930E-01 - 4.4668E+00 2.6509E+00 2.1695E+00 7.4206E-01 5.8590E-01 - 5.0119E+00 1.9189E+00 1.5531E+00 5.0614E-01 4.0319E-01 - 5.6234E+00 1.3890E+00 1.1102E+00 3.5136E-01 2.6996E-01 - 6.3096E+00 1.0018E+00 7.9202E-01 2.4417E-01 1.8495E-01 - 7.0795E+00 7.1364E-01 5.6618E-01 1.6753E-01 1.2634E-01 - 7.9433E+00 5.0973E-01 4.0304E-01 1.1441E-01 8.3863E-02 - 8.9125E+00 3.6707E-01 2.8363E-01 7.8424E-02 5.6949E-02 - 1.0000E+01 2.6338E-01 2.0233E-01 5.0131E-02 3.8231E-02 - 1.1220E+01 1.8717E-01 1.4267E-01 3.3633E-02 2.5100E-02 - 1.2589E+01 1.3294E-01 1.0094E-01 2.2594E-02 1.7033E-02 - 1.4125E+01 9.5128E-02 7.1674E-02 1.4874E-02 1.1350E-02 - 1.5849E+01 6.7564E-02 5.0747E-02 9.8752E-03 7.4829E-03 - 1.7783E+01 4.7936E-02 3.6229E-02 6.6685E-03 5.0063E-03 - 1.9953E+01 3.4253E-02 2.5486E-02 4.3604E-03 3.3439E-03 - 2.2387E+01 2.4437E-02 1.8019E-02 2.8958E-03 2.2902E-03 - 2.5119E+01 1.7541E-02 1.2605E-02 1.9608E-03 1.5959E-03 - 2.8184E+01 1.2380E-02 8.7931E-03 1.2662E-03 1.0275E-03 - 3.1623E+01 8.6508E-03 6.2886E-03 8.5841E-04 6.7544E-04 - 3.5481E+01 6.1025E-03 4.4251E-03 5.7308E-04 4.5413E-04 - 3.9811E+01 4.3062E-03 3.1100E-03 3.8194E-04 3.0273E-04 - 4.4668E+01 3.0310E-03 2.1873E-03 2.5462E-04 2.0293E-04 - 5.0119E+01 2.1383E-03 1.5308E-03 1.6795E-04 1.3766E-04 - 5.6234E+01 1.5159E-03 1.0707E-03 1.1326E-04 9.2605E-05 - 6.3096E+01 1.0641E-03 7.5129E-04 7.5500E-05 6.2276E-05 - 7.0795E+01 7.4968E-04 5.2605E-04 5.0513E-05 4.1490E-05 - 7.9433E+01 5.2478E-04 3.6680E-04 3.4493E-05 2.8263E-05 - 8.9125E+01 3.6777E-04 2.5353E-04 2.3154E-05 1.8782E-05 - 1.0000E+02 2.5934E-04 1.7811E-04 1.5588E-05 1.2839E-05 - 1.1220E+02 1.8157E-04 1.2411E-04 1.0460E-05 8.6635E-06 - 1.2589E+02 1.2683E-04 8.6305E-05 7.1336E-06 5.8627E-06 - 1.4125E+02 8.8749E-05 5.9716E-05 4.8799E-06 3.9183E-06 - 1.5849E+02 6.2039E-05 4.1248E-05 3.2986E-06 2.6126E-06 - 1.7783E+02 4.3165E-05 2.8748E-05 2.2159E-06 1.7660E-06 - 1.9953E+02 3.0030E-05 1.9925E-05 1.4509E-06 1.2077E-06 - 2.2387E+02 2.1036E-05 1.3858E-05 9.7774E-07 7.9267E-07 - 2.5119E+02 1.4644E-05 9.5414E-06 6.8466E-07 5.4385E-07 - 2.8184E+02 1.0157E-05 6.5375E-06 4.6192E-07 3.7262E-07 - 3.1623E+02 7.0570E-06 4.5455E-06 3.1227E-07 2.5274E-07 - 3.5481E+02 4.8732E-06 3.1208E-06 2.0861E-07 1.7065E-07 - 3.9811E+02 3.3829E-06 2.1422E-06 1.4286E-07 1.1342E-07 - 4.4668E+02 2.3449E-06 1.4691E-06 9.5965E-08 7.5657E-08 - 5.0119E+02 1.6141E-06 1.0134E-06 6.4317E-08 5.0782E-08 - 5.6234E+02 1.1239E-06 7.0036E-07 4.3398E-08 3.4434E-08 - 6.3096E+02 7.6575E-07 4.7677E-07 2.9737E-08 2.2586E-08 - 7.0795E+02 5.2432E-07 3.2272E-07 1.9962E-08 1.5046E-08 - 7.9433E+02 3.6219E-07 2.1998E-07 1.2728E-08 1.0209E-08 - 8.9125E+02 2.4799E-07 1.4963E-07 8.6628E-09 6.9231E-09 - 1.0000E+03 1.6984E-07 1.0116E-07 5.9215E-09 4.5531E-09 - 1.1220E+03 1.1471E-07 6.8319E-08 3.9449E-09 2.9395E-09 - 1.2589E+03 7.7698E-08 4.6695E-08 2.5947E-09 1.9726E-09 - 1.4125E+03 5.2321E-08 3.1525E-08 1.7702E-09 1.3306E-09 - 1.5849E+03 3.5361E-08 2.1032E-08 1.1463E-09 8.2909E-10 - 1.7783E+03 2.3795E-08 1.3906E-08 7.7355E-10 5.3276E-10 - 1.9953E+03 1.5972E-08 9.4122E-09 5.1966E-10 3.9139E-10 - 2.2387E+03 1.0752E-08 6.2766E-09 3.6376E-10 2.5265E-10 - 2.5119E+03 7.1742E-09 4.1981E-09 2.4240E-10 1.6190E-10 - 2.8184E+03 4.8004E-09 2.8327E-09 1.5611E-10 1.0688E-10 - 3.1623E+03 3.3043E-09 1.9089E-09 9.9330E-11 7.2358E-11 - 3.5481E+03 2.1301E-09 1.2221E-09 6.7194E-11 4.7814E-11 - 3.9811E+03 1.4206E-09 8.0448E-10 4.4378E-11 3.0974E-11 - 4.4668E+03 9.3552E-10 5.2675E-10 2.7932E-11 2.1390E-11 - 5.0119E+03 6.2147E-10 3.4719E-10 1.9226E-11 1.3571E-11 - 5.6234E+03 4.0513E-10 2.2694E-10 1.3139E-11 7.5933E-12 - 6.3096E+03 2.7212E-10 1.5162E-10 7.9010E-12 5.2927E-12 - 7.0795E+03 1.7825E-10 9.9579E-11 5.0367E-12 3.9424E-12 - 7.9433E+03 1.1694E-10 6.5863E-11 3.5784E-12 2.6464E-12 - 8.9125E+03 7.7041E-11 4.1982E-11 2.2887E-12 1.5858E-12 - 1.0000E+04 5.0613E-11 2.7623E-11 1.4084E-12 1.0346E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.6710E+03 3.6625E+03 1.7367E+03 1.8356E+03 - 1.1220E-01 3.3430E+03 3.3429E+03 1.5850E+03 1.6550E+03 - 1.2589E-01 3.0457E+03 3.0153E+03 1.4288E+03 1.4776E+03 - 1.4125E-01 2.7494E+03 2.6982E+03 1.2767E+03 1.3127E+03 - 1.5849E-01 2.4419E+03 2.4084E+03 1.1259E+03 1.1503E+03 - 1.7783E-01 2.1516E+03 2.1253E+03 9.8681E+02 9.9869E+02 - 1.9953E-01 1.8769E+03 1.8517E+03 8.6429E+02 8.6515E+02 - 2.2387E-01 1.6161E+03 1.5919E+03 7.4413E+02 7.5037E+02 - 2.5119E-01 1.3849E+03 1.3571E+03 6.3332E+02 6.3564E+02 - 2.8184E-01 1.1762E+03 1.1441E+03 5.3513E+02 5.3000E+02 - 3.1623E-01 9.8423E+02 9.5479E+02 4.4845E+02 4.4096E+02 - 3.5481E-01 8.1671E+02 7.9101E+02 3.7134E+02 3.6119E+02 - 3.9811E-01 6.7097E+02 6.4955E+02 3.0418E+02 2.9273E+02 - 4.4668E-01 5.5124E+02 5.3034E+02 2.4910E+02 2.3571E+02 - 5.0119E-01 4.4958E+02 4.3195E+02 2.0173E+02 1.8885E+02 - 5.6234E-01 3.6260E+02 3.4860E+02 1.6158E+02 1.5015E+02 - 6.3096E-01 2.8933E+02 2.7603E+02 1.2911E+02 1.1825E+02 - 7.0795E-01 2.2933E+02 2.1769E+02 1.0214E+02 9.2467E+01 - 7.9433E-01 1.8190E+02 1.7276E+02 7.9993E+01 7.1542E+01 - 8.9125E-01 1.4383E+02 1.3571E+02 6.2058E+01 5.4823E+01 - 1.0000E+00 1.1259E+02 1.0501E+02 4.7814E+01 4.1758E+01 - 1.1220E+00 8.7093E+01 8.0954E+01 3.6356E+01 3.1607E+01 - 1.2589E+00 6.7266E+01 6.2077E+01 2.7611E+01 2.3777E+01 - 1.4125E+00 5.1799E+01 4.7512E+01 2.0947E+01 1.7735E+01 - 1.5849E+00 3.9487E+01 3.5559E+01 1.5638E+01 1.2956E+01 - 1.7783E+00 2.9806E+01 2.6535E+01 1.1538E+01 9.4501E+00 - 1.9953E+00 2.2432E+01 1.9906E+01 8.4703E+00 6.9403E+00 - 2.2387E+00 1.6951E+01 1.4763E+01 6.1379E+00 4.9579E+00 - 2.5119E+00 1.2644E+01 1.0871E+01 4.4818E+00 3.4934E+00 - 2.8184E+00 9.2894E+00 7.9645E+00 3.1601E+00 2.5070E+00 - 3.1623E+00 6.8358E+00 5.7691E+00 2.2437E+00 1.7640E+00 - 3.5481E+00 5.0260E+00 4.1894E+00 1.5793E+00 1.2174E+00 - 3.9811E+00 3.6629E+00 3.0300E+00 1.1032E+00 8.4676E-01 - 4.4668E+00 2.6503E+00 2.1632E+00 7.7026E-01 5.8564E-01 - 5.0119E+00 1.9216E+00 1.5446E+00 5.3136E-01 4.0021E-01 - 5.6234E+00 1.3949E+00 1.1083E+00 3.5768E-01 2.7229E-01 - 6.3096E+00 1.0059E+00 7.8762E-01 2.4420E-01 1.8644E-01 - 7.0795E+00 7.1874E-01 5.6012E-01 1.6680E-01 1.2720E-01 - 7.9433E+00 5.1480E-01 3.9777E-01 1.1153E-01 8.4910E-02 - 8.9125E+00 3.6875E-01 2.8256E-01 7.4711E-02 5.6390E-02 - 1.0000E+01 2.6283E-01 2.0240E-01 4.9510E-02 3.7890E-02 - 1.1220E+01 1.8758E-01 1.4319E-01 3.3415E-02 2.5331E-02 - 1.2589E+01 1.3351E-01 1.0138E-01 2.2641E-02 1.6762E-02 - 1.4125E+01 9.4188E-02 7.2146E-02 1.5283E-02 1.1246E-02 - 1.5849E+01 6.7173E-02 5.0947E-02 9.8760E-03 7.6809E-03 - 1.7783E+01 4.8112E-02 3.6036E-02 6.5822E-03 5.1792E-03 - 1.9953E+01 3.4036E-02 2.5583E-02 4.5572E-03 3.4250E-03 - 2.2387E+01 2.4175E-02 1.8176E-02 2.9870E-03 2.2854E-03 - 2.5119E+01 1.7387E-02 1.2742E-02 1.9282E-03 1.4836E-03 - 2.8184E+01 1.2340E-02 8.7990E-03 1.2212E-03 9.6920E-04 - 3.1623E+01 8.6774E-03 6.2828E-03 8.5121E-04 6.7783E-04 - 3.5481E+01 6.1228E-03 4.4193E-03 5.6337E-04 4.5166E-04 - 3.9811E+01 4.3180E-03 3.1036E-03 3.7670E-04 3.0288E-04 - 4.4668E+01 3.0583E-03 2.1747E-03 2.5200E-04 2.0447E-04 - 5.0119E+01 2.1537E-03 1.5241E-03 1.6988E-04 1.3757E-04 - 5.6234E+01 1.5190E-03 1.0722E-03 1.1289E-04 9.3442E-05 - 6.3096E+01 1.0634E-03 7.4924E-04 7.4823E-05 6.1670E-05 - 7.0795E+01 7.4341E-04 5.2099E-04 5.1390E-05 4.0645E-05 - 7.9433E+01 5.2512E-04 3.6567E-04 3.4573E-05 2.8777E-05 - 8.9125E+01 3.6782E-04 2.5489E-04 2.3927E-05 1.8818E-05 - 1.0000E+02 2.5846E-04 1.7783E-04 1.5729E-05 1.2448E-05 - 1.1220E+02 1.8087E-04 1.2357E-04 1.0559E-05 8.6222E-06 - 1.2589E+02 1.2683E-04 8.5998E-05 7.0531E-06 5.7907E-06 - 1.4125E+02 8.8784E-05 5.9717E-05 4.7588E-06 3.7991E-06 - 1.5849E+02 6.1986E-05 4.1310E-05 3.2269E-06 2.6145E-06 - 1.7783E+02 4.3050E-05 2.8544E-05 2.1798E-06 1.8157E-06 - 1.9953E+02 3.0177E-05 1.9865E-05 1.4826E-06 1.2168E-06 - 2.2387E+02 2.1054E-05 1.3835E-05 9.9444E-07 7.9398E-07 - 2.5119E+02 1.4391E-05 9.5925E-06 6.7607E-07 5.4325E-07 - 2.8184E+02 1.0087E-05 6.5624E-06 4.6500E-07 3.7634E-07 - 3.1623E+02 7.1081E-06 4.5348E-06 3.1345E-07 2.5232E-07 - 3.5481E+02 4.8932E-06 3.1123E-06 2.0946E-07 1.7043E-07 - 3.9811E+02 3.3759E-06 2.1417E-06 1.4031E-07 1.1290E-07 - 4.4668E+02 2.3308E-06 1.4819E-06 9.6136E-08 7.7440E-08 - 5.0119E+02 1.6198E-06 1.0210E-06 6.5644E-08 5.1240E-08 - 5.6234E+02 1.1203E-06 7.0025E-07 4.3843E-08 3.3726E-08 - 6.3096E+02 7.6221E-07 4.7522E-07 2.9563E-08 2.2608E-08 - 7.0795E+02 5.2411E-07 3.2676E-07 2.0045E-08 1.5127E-08 - 7.9433E+02 3.6090E-07 2.2285E-07 1.3500E-08 1.0058E-08 - 8.9125E+02 2.4704E-07 1.5122E-07 8.8213E-09 6.6560E-09 - 1.0000E+03 1.7068E-07 1.0237E-07 5.8696E-09 4.5757E-09 - 1.1220E+03 1.1502E-07 6.8671E-08 3.9053E-09 2.9374E-09 - 1.2589E+03 7.7579E-08 4.6747E-08 2.6368E-09 1.8920E-09 - 1.4125E+03 5.2325E-08 3.1468E-08 1.7012E-09 1.2681E-09 - 1.5849E+03 3.5532E-08 2.0891E-08 1.1336E-09 8.3185E-10 - 1.7783E+03 2.3594E-08 1.3906E-08 7.4646E-10 5.5217E-10 - 1.9953E+03 1.5968E-08 9.3457E-09 4.9276E-10 3.6772E-10 - 2.2387E+03 1.0693E-08 6.2223E-09 3.4881E-10 2.4389E-10 - 2.5119E+03 7.1635E-09 4.1924E-09 2.3534E-10 1.6250E-10 - 2.8184E+03 4.7774E-09 2.8660E-09 1.4924E-10 1.1471E-10 - 3.1623E+03 3.3080E-09 1.8884E-09 1.0418E-10 7.3465E-11 - 3.5481E+03 2.1363E-09 1.2110E-09 6.8844E-11 4.7411E-11 - 3.9811E+03 1.4050E-09 8.0723E-10 4.2039E-11 3.1609E-11 - 4.4668E+03 9.3625E-10 5.2720E-10 2.7027E-11 1.9040E-11 - 5.0119E+03 6.2273E-10 3.4615E-10 1.6997E-11 1.1680E-11 - 5.6234E+03 4.1014E-10 2.2896E-10 1.0932E-11 7.4585E-12 - 6.3096E+03 2.7006E-10 1.5283E-10 7.6919E-12 5.3730E-12 - 7.0795E+03 1.7911E-10 9.9385E-11 4.7001E-12 3.7050E-12 - 7.9433E+03 1.1697E-10 6.5289E-11 3.3034E-12 2.2310E-12 - 8.9125E+03 7.6884E-11 4.2887E-11 2.1697E-12 1.5781E-12 - 1.0000E+04 5.1007E-11 2.7334E-11 1.4113E-12 1.1806E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.8429E+03 3.8357E+03 1.8134E+03 1.9002E+03 - 1.1220E-01 3.4988E+03 3.4880E+03 1.6622E+03 1.7237E+03 - 1.2589E-01 3.1710E+03 3.1463E+03 1.4943E+03 1.5444E+03 - 1.4125E-01 2.8414E+03 2.8267E+03 1.3329E+03 1.3733E+03 - 1.5849E-01 2.5390E+03 2.5163E+03 1.1781E+03 1.2054E+03 - 1.7783E-01 2.2394E+03 2.2106E+03 1.0242E+03 1.0425E+03 - 1.9953E-01 1.9506E+03 1.9173E+03 8.9227E+02 9.0168E+02 - 2.2387E-01 1.6848E+03 1.6474E+03 7.7630E+02 7.7385E+02 - 2.5119E-01 1.4374E+03 1.4055E+03 6.6206E+02 6.5571E+02 - 2.8184E-01 1.2113E+03 1.1903E+03 5.5732E+02 5.5039E+02 - 3.1623E-01 1.0167E+03 9.9404E+02 4.6897E+02 4.5658E+02 - 3.5481E-01 8.4785E+02 8.2594E+02 3.8888E+02 3.7328E+02 - 3.9811E-01 6.9840E+02 6.7963E+02 3.1693E+02 3.0335E+02 - 4.4668E-01 5.7231E+02 5.5281E+02 2.5818E+02 2.4332E+02 - 5.0119E-01 4.6594E+02 4.4773E+02 2.0835E+02 1.9310E+02 - 5.6234E-01 3.7415E+02 3.6024E+02 1.6697E+02 1.5341E+02 - 6.3096E-01 2.9794E+02 2.8660E+02 1.3366E+02 1.2146E+02 - 7.0795E-01 2.3726E+02 2.2677E+02 1.0578E+02 9.5384E+01 - 7.9433E-01 1.8899E+02 1.7859E+02 8.2865E+01 7.4374E+01 - 8.9125E-01 1.4808E+02 1.3850E+02 6.3694E+01 5.6767E+01 - 1.0000E+00 1.1466E+02 1.0732E+02 4.9143E+01 4.2545E+01 - 1.1220E+00 8.9358E+01 8.3146E+01 3.7579E+01 3.2224E+01 - 1.2589E+00 6.9130E+01 6.3233E+01 2.8354E+01 2.4138E+01 - 1.4125E+00 5.2782E+01 4.7737E+01 2.1247E+01 1.7820E+01 - 1.5849E+00 4.0357E+01 3.6130E+01 1.5846E+01 1.3069E+01 - 1.7783E+00 3.0625E+01 2.7088E+01 1.1735E+01 9.6379E+00 - 1.9953E+00 2.3027E+01 2.0316E+01 8.6363E+00 6.9783E+00 - 2.2387E+00 1.7151E+01 1.4989E+01 6.2798E+00 5.0241E+00 - 2.5119E+00 1.2795E+01 1.0957E+01 4.4725E+00 3.5921E+00 - 2.8184E+00 9.4096E+00 8.0237E+00 3.1643E+00 2.5344E+00 - 3.1623E+00 6.9048E+00 5.8162E+00 2.2668E+00 1.7708E+00 - 3.5481E+00 5.0866E+00 4.1928E+00 1.5902E+00 1.2270E+00 - 3.9811E+00 3.6956E+00 3.0329E+00 1.1121E+00 8.4789E-01 - 4.4668E+00 2.6853E+00 2.1821E+00 7.7295E-01 5.8733E-01 - 5.0119E+00 1.9469E+00 1.5546E+00 5.2765E-01 4.0162E-01 - 5.6234E+00 1.3921E+00 1.1150E+00 3.5968E-01 2.7589E-01 - 6.3096E+00 9.9593E-01 7.9404E-01 2.5003E-01 1.8906E-01 - 7.0795E+00 7.1671E-01 5.6605E-01 1.6890E-01 1.2420E-01 - 7.9433E+00 5.1382E-01 4.0482E-01 1.1260E-01 8.2256E-02 - 8.9125E+00 3.6829E-01 2.8278E-01 7.6368E-02 5.5720E-02 - 1.0000E+01 2.6450E-01 2.0227E-01 5.0550E-02 3.7934E-02 - 1.1220E+01 1.8798E-01 1.4390E-01 3.3620E-02 2.5464E-02 - 1.2589E+01 1.3417E-01 1.0188E-01 2.2435E-02 1.7072E-02 - 1.4125E+01 9.5801E-02 7.2118E-02 1.4973E-02 1.1371E-02 - 1.5849E+01 6.7877E-02 5.0917E-02 1.0014E-02 7.6094E-03 - 1.7783E+01 4.7823E-02 3.5621E-02 6.5148E-03 5.0878E-03 - 1.9953E+01 3.3900E-02 2.5059E-02 4.3220E-03 3.3863E-03 - 2.2387E+01 2.4152E-02 1.7710E-02 2.9376E-03 2.2327E-03 - 2.5119E+01 1.7300E-02 1.2635E-02 2.0216E-03 1.4972E-03 - 2.8184E+01 1.2405E-02 8.8903E-03 1.3008E-03 9.9695E-04 - 3.1623E+01 8.6764E-03 6.2971E-03 8.6022E-04 6.7014E-04 - 3.5481E+01 6.1196E-03 4.4263E-03 5.7390E-04 4.5013E-04 - 3.9811E+01 4.3113E-03 3.1163E-03 3.7805E-04 3.0259E-04 - 4.4668E+01 3.0542E-03 2.1819E-03 2.5122E-04 2.0390E-04 - 5.0119E+01 2.1544E-03 1.5282E-03 1.6830E-04 1.3632E-04 - 5.6234E+01 1.5128E-03 1.0741E-03 1.1403E-04 9.1663E-05 - 6.3096E+01 1.0620E-03 7.5490E-04 7.6840E-05 6.2045E-05 - 7.0795E+01 7.4410E-04 5.2529E-04 5.1442E-05 4.1135E-05 - 7.9433E+01 5.2424E-04 3.6681E-04 3.4579E-05 2.7479E-05 - 8.9125E+01 3.6818E-04 2.5503E-04 2.3469E-05 1.8766E-05 - 1.0000E+02 2.5836E-04 1.7830E-04 1.5799E-05 1.2798E-05 - 1.1220E+02 1.8032E-04 1.2400E-04 1.0575E-05 8.5385E-06 - 1.2589E+02 1.2643E-04 8.5676E-05 7.0573E-06 5.7377E-06 - 1.4125E+02 8.8458E-05 5.9137E-05 4.8019E-06 3.8592E-06 - 1.5849E+02 6.1716E-05 4.1509E-05 3.2408E-06 2.6119E-06 - 1.7783E+02 4.3275E-05 2.9014E-05 2.2156E-06 1.7420E-06 - 1.9953E+02 3.0092E-05 2.0029E-05 1.5483E-06 1.1877E-06 - 2.2387E+02 2.0680E-05 1.3762E-05 1.0101E-06 7.8088E-07 - 2.5119E+02 1.4457E-05 9.4574E-06 6.8213E-07 5.2960E-07 - 2.8184E+02 1.0103E-05 6.5572E-06 4.6347E-07 3.6163E-07 - 3.1623E+02 7.0597E-06 4.5532E-06 3.1737E-07 2.4681E-07 - 3.5481E+02 4.8815E-06 3.1266E-06 2.1717E-07 1.6482E-07 - 3.9811E+02 3.3862E-06 2.1475E-06 1.4671E-07 1.1526E-07 - 4.4668E+02 2.3409E-06 1.4698E-06 9.8421E-08 7.7150E-08 - 5.0119E+02 1.6076E-06 1.0135E-06 6.7033E-08 5.1040E-08 - 5.6234E+02 1.1263E-06 6.9808E-07 4.3978E-08 3.4655E-08 - 6.3096E+02 7.7058E-07 4.7392E-07 2.8950E-08 2.3048E-08 - 7.0795E+02 5.2434E-07 3.2482E-07 1.9581E-08 1.5231E-08 - 7.9433E+02 3.5880E-07 2.2185E-07 1.3752E-08 1.0364E-08 - 8.9125E+02 2.4736E-07 1.5000E-07 9.1936E-09 6.8315E-09 - 1.0000E+03 1.6936E-07 1.0190E-07 6.0466E-09 4.5279E-09 - 1.1220E+03 1.1376E-07 6.8390E-08 4.0270E-09 3.0532E-09 - 1.2589E+03 7.7202E-08 4.6549E-08 2.6543E-09 2.0484E-09 - 1.4125E+03 5.2271E-08 3.1179E-08 1.7002E-09 1.3173E-09 - 1.5849E+03 3.5231E-08 2.0772E-08 1.1290E-09 8.5078E-10 - 1.7783E+03 2.3622E-08 1.3931E-08 7.5190E-10 5.7287E-10 - 1.9953E+03 1.6003E-08 9.4168E-09 5.1921E-10 3.8006E-10 - 2.2387E+03 1.0689E-08 6.3238E-09 3.4839E-10 2.4428E-10 - 2.5119E+03 7.1559E-09 4.1351E-09 2.2739E-10 1.5140E-10 - 2.8184E+03 4.7573E-09 2.7366E-09 1.5392E-10 9.9957E-11 - 3.1623E+03 3.2899E-09 1.9117E-09 1.0040E-10 7.0997E-11 - 3.5481E+03 2.1357E-09 1.2309E-09 6.3550E-11 4.9638E-11 - 3.9811E+03 1.4182E-09 8.1625E-10 3.9587E-11 3.0888E-11 - 4.4668E+03 9.4285E-10 5.3700E-10 2.6813E-11 2.0014E-11 - 5.0119E+03 6.2416E-10 3.5311E-10 1.7236E-11 1.2277E-11 - 5.6234E+03 4.0875E-10 2.3209E-10 1.2103E-11 8.1035E-12 - 6.3096E+03 2.7135E-10 1.5182E-10 7.7562E-12 5.2327E-12 - 7.0795E+03 1.7841E-10 1.0028E-10 5.2419E-12 3.6499E-12 - 7.9433E+03 1.1655E-10 6.6282E-11 3.1657E-12 2.6613E-12 - 8.9125E+03 7.6957E-11 4.2550E-11 2.0563E-12 2.0021E-12 - 1.0000E+04 5.0725E-11 2.7764E-11 1.5555E-12 1.0992E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 3.9299E+03 3.9391E+03 1.8445E+03 1.9706E+03 - 1.1220E-01 3.5773E+03 3.5965E+03 1.6757E+03 1.7715E+03 - 1.2589E-01 3.2477E+03 3.2461E+03 1.5102E+03 1.5758E+03 - 1.4125E-01 2.9155E+03 2.8944E+03 1.3518E+03 1.3931E+03 - 1.5849E-01 2.5887E+03 2.5722E+03 1.1985E+03 1.2185E+03 - 1.7783E-01 2.2890E+03 2.2614E+03 1.0505E+03 1.0570E+03 - 1.9953E-01 1.9899E+03 1.9645E+03 9.1250E+02 9.1820E+02 - 2.2387E-01 1.7103E+03 1.6880E+03 7.9203E+02 7.8733E+02 - 2.5119E-01 1.4537E+03 1.4340E+03 6.6975E+02 6.6480E+02 - 2.8184E-01 1.2236E+03 1.2082E+03 5.5823E+02 5.5440E+02 - 3.1623E-01 1.0278E+03 1.0075E+03 4.7368E+02 4.5855E+02 - 3.5481E-01 8.5731E+02 8.3459E+02 3.9160E+02 3.7472E+02 - 3.9811E-01 7.0575E+02 6.8862E+02 3.2162E+02 3.0594E+02 - 4.4668E-01 5.7427E+02 5.6237E+02 2.6476E+02 2.4924E+02 - 5.0119E-01 4.6727E+02 4.5221E+02 2.1267E+02 1.9826E+02 - 5.6234E-01 3.7843E+02 3.6011E+02 1.6759E+02 1.5784E+02 - 6.3096E-01 3.0262E+02 2.8837E+02 1.3249E+02 1.2323E+02 - 7.0795E-01 2.3900E+02 2.3041E+02 1.0554E+02 9.4979E+01 - 7.9433E-01 1.8828E+02 1.8025E+02 8.2730E+01 7.4311E+01 - 8.9125E-01 1.4867E+02 1.4059E+02 6.4170E+01 5.7657E+01 - 1.0000E+00 1.1552E+02 1.0808E+02 4.9392E+01 4.3165E+01 - 1.1220E+00 8.9709E+01 8.3212E+01 3.7709E+01 3.2508E+01 - 1.2589E+00 6.9683E+01 6.4013E+01 2.8755E+01 2.4573E+01 - 1.4125E+00 5.3380E+01 4.8510E+01 2.1531E+01 1.8190E+01 - 1.5849E+00 4.0467E+01 3.6376E+01 1.5997E+01 1.3177E+01 - 1.7783E+00 3.0504E+01 2.7251E+01 1.1761E+01 9.6169E+00 - 1.9953E+00 2.2935E+01 2.0373E+01 8.6030E+00 6.9211E+00 - 2.2387E+00 1.7131E+01 1.5115E+01 6.2291E+00 4.9303E+00 - 2.5119E+00 1.2673E+01 1.1039E+01 4.4513E+00 3.5283E+00 - 2.8184E+00 9.3617E+00 7.9491E+00 3.1511E+00 2.5072E+00 - 3.1623E+00 6.9236E+00 5.8423E+00 2.2670E+00 1.7575E+00 - 3.5481E+00 5.0840E+00 4.2349E+00 1.6016E+00 1.2326E+00 - 3.9811E+00 3.6935E+00 3.0574E+00 1.1181E+00 8.5086E-01 - 4.4668E+00 2.6764E+00 2.1918E+00 7.7204E-01 5.8723E-01 - 5.0119E+00 1.9402E+00 1.5648E+00 5.2490E-01 4.0236E-01 - 5.6234E+00 1.3983E+00 1.1217E+00 3.5693E-01 2.7431E-01 - 6.3096E+00 1.0075E+00 8.0299E-01 2.4694E-01 1.8860E-01 - 7.0795E+00 7.1795E-01 5.6685E-01 1.6928E-01 1.2406E-01 - 7.9433E+00 5.1455E-01 4.0067E-01 1.1277E-01 8.2068E-02 - 8.9125E+00 3.6909E-01 2.8575E-01 7.4186E-02 5.7149E-02 - 1.0000E+01 2.6365E-01 2.0140E-01 5.0161E-02 3.8219E-02 - 1.1220E+01 1.8762E-01 1.4272E-01 3.3549E-02 2.5452E-02 - 1.2589E+01 1.3362E-01 1.0101E-01 2.2206E-02 1.6897E-02 - 1.4125E+01 9.5752E-02 7.1429E-02 1.4691E-02 1.1312E-02 - 1.5849E+01 6.7934E-02 5.1124E-02 9.8947E-03 7.6871E-03 - 1.7783E+01 4.8069E-02 3.6072E-02 6.5792E-03 5.1263E-03 - 1.9953E+01 3.4472E-02 2.5268E-02 4.2154E-03 3.2912E-03 - 2.2387E+01 2.4350E-02 1.7936E-02 2.8611E-03 2.2141E-03 - 2.5119E+01 1.7099E-02 1.2672E-02 1.9770E-03 1.4830E-03 - 2.8184E+01 1.2145E-02 8.9803E-03 1.2711E-03 1.0122E-03 - 3.1623E+01 8.6531E-03 6.3043E-03 8.5337E-04 6.7688E-04 - 3.5481E+01 6.1278E-03 4.4416E-03 5.6933E-04 4.5028E-04 - 3.9811E+01 4.3153E-03 3.0961E-03 3.8112E-04 3.0293E-04 - 4.4668E+01 3.0410E-03 2.1744E-03 2.5669E-04 2.0489E-04 - 5.0119E+01 2.1415E-03 1.5284E-03 1.7312E-04 1.3668E-04 - 5.6234E+01 1.5028E-03 1.0719E-03 1.1481E-04 9.0894E-05 - 6.3096E+01 1.0631E-03 7.5307E-04 7.7000E-05 6.1498E-05 - 7.0795E+01 7.5101E-04 5.2632E-04 5.1403E-05 4.2338E-05 - 7.9433E+01 5.2346E-04 3.6577E-04 3.4166E-05 2.8527E-05 - 8.9125E+01 3.6772E-04 2.5272E-04 2.2386E-05 1.9272E-05 - 1.0000E+02 2.5817E-04 1.7752E-04 1.5510E-05 1.2606E-05 - 1.1220E+02 1.8076E-04 1.2349E-04 1.0518E-05 8.6774E-06 - 1.2589E+02 1.2630E-04 8.5829E-05 7.0828E-06 5.8886E-06 - 1.4125E+02 8.8364E-05 5.9584E-05 4.8034E-06 3.9303E-06 - 1.5849E+02 6.1663E-05 4.1329E-05 3.2118E-06 2.6545E-06 - 1.7783E+02 4.2827E-05 2.8804E-05 2.1778E-06 1.7584E-06 - 1.9953E+02 2.9849E-05 1.9957E-05 1.4784E-06 1.1661E-06 - 2.2387E+02 2.0791E-05 1.3747E-05 1.0012E-06 8.0649E-07 - 2.5119E+02 1.4427E-05 9.4611E-06 6.9228E-07 5.4664E-07 - 2.8184E+02 9.9680E-06 6.4525E-06 4.7595E-07 3.7838E-07 - 3.1623E+02 7.0625E-06 4.5268E-06 3.1219E-07 2.5025E-07 - 3.5481E+02 4.8983E-06 3.1266E-06 2.0982E-07 1.7089E-07 - 3.9811E+02 3.3955E-06 2.1624E-06 1.4359E-07 1.1158E-07 - 4.4668E+02 2.3276E-06 1.4866E-06 9.6969E-08 7.3655E-08 - 5.0119E+02 1.6077E-06 1.0201E-06 6.4501E-08 5.0786E-08 - 5.6234E+02 1.1236E-06 7.0142E-07 4.4657E-08 3.3911E-08 - 6.3096E+02 7.7064E-07 4.7867E-07 3.0106E-08 2.2601E-08 - 7.0795E+02 5.2646E-07 3.2653E-07 1.9753E-08 1.4926E-08 - 7.9433E+02 3.6058E-07 2.2200E-07 1.3365E-08 1.0085E-08 - 8.9125E+02 2.4783E-07 1.5183E-07 8.6233E-09 6.7247E-09 - 1.0000E+03 1.6948E-07 1.0308E-07 5.7695E-09 4.4814E-09 - 1.1220E+03 1.1487E-07 6.8925E-08 3.8785E-09 3.0809E-09 - 1.2589E+03 7.8180E-08 4.6678E-08 2.5638E-09 2.0370E-09 - 1.4125E+03 5.2888E-08 3.1398E-08 1.7636E-09 1.3267E-09 - 1.5849E+03 3.5699E-08 2.0894E-08 1.1503E-09 8.6915E-10 - 1.7783E+03 2.3619E-08 1.4051E-08 7.4048E-10 6.1970E-10 - 1.9953E+03 1.6035E-08 9.4826E-09 4.9210E-10 3.8602E-10 - 2.2387E+03 1.0802E-08 6.2850E-09 3.1693E-10 2.3690E-10 - 2.5119E+03 7.2092E-09 4.2269E-09 2.1766E-10 1.5562E-10 - 2.8184E+03 4.7052E-09 2.8399E-09 1.4377E-10 1.0777E-10 - 3.1623E+03 3.2639E-09 1.8817E-09 9.5021E-11 7.3728E-11 - 3.5481E+03 2.1154E-09 1.2019E-09 6.6438E-11 4.7426E-11 - 3.9811E+03 1.4093E-09 8.0870E-10 4.3136E-11 3.1925E-11 - 4.4668E+03 9.2805E-10 5.3386E-10 2.6397E-11 2.1838E-11 - 5.0119E+03 6.1997E-10 3.4396E-10 1.7466E-11 1.2634E-11 - 5.6234E+03 4.0842E-10 2.2718E-10 1.2101E-11 7.8420E-12 - 6.3096E+03 2.6989E-10 1.5050E-10 7.8403E-12 5.8103E-12 - 7.0795E+03 1.7882E-10 9.9324E-11 5.0703E-12 3.9668E-12 - 7.9433E+03 1.1759E-10 6.6455E-11 3.3906E-12 2.3770E-12 - 8.9125E+03 7.6937E-11 4.2690E-11 2.1796E-12 1.4630E-12 - 1.0000E+04 5.1070E-11 2.6758E-11 1.4939E-12 9.7221E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.8899E+03 4.8529E+03 2.3016E+03 2.4009E+03 - 1.1220E-01 4.4454E+03 4.4039E+03 2.0743E+03 2.1504E+03 - 1.2589E-01 4.0113E+03 3.9617E+03 1.8636E+03 1.9202E+03 - 1.4125E-01 3.5820E+03 3.5191E+03 1.6591E+03 1.6968E+03 - 1.5849E-01 3.1518E+03 3.1124E+03 1.4610E+03 1.4821E+03 - 1.7783E-01 2.7527E+03 2.7143E+03 1.2734E+03 1.2755E+03 - 1.9953E-01 2.3906E+03 2.3495E+03 1.0998E+03 1.0916E+03 - 2.2387E-01 2.0541E+03 2.0132E+03 9.4061E+02 9.2773E+02 - 2.5119E-01 1.7420E+03 1.6969E+03 7.9683E+02 7.7321E+02 - 2.8184E-01 1.4549E+03 1.4221E+03 6.7410E+02 6.4259E+02 - 3.1623E-01 1.2137E+03 1.1793E+03 5.6473E+02 5.2808E+02 - 3.5481E-01 1.0051E+03 9.7052E+02 4.6181E+02 4.3287E+02 - 3.9811E-01 8.2154E+02 7.9688E+02 3.7710E+02 3.5482E+02 - 4.4668E-01 6.6259E+02 6.4244E+02 3.0567E+02 2.8546E+02 - 5.0119E-01 5.3089E+02 5.1475E+02 2.4393E+02 2.2532E+02 - 5.6234E-01 4.2574E+02 4.1075E+02 1.9387E+02 1.7591E+02 - 6.3096E-01 3.3921E+02 3.2073E+02 1.5240E+02 1.3607E+02 - 7.0795E-01 2.6568E+02 2.4960E+02 1.1900E+02 1.0506E+02 - 7.9433E-01 2.0560E+02 1.9511E+02 9.2353E+01 8.0955E+01 - 8.9125E-01 1.5972E+02 1.5164E+02 7.0269E+01 6.0648E+01 - 1.0000E+00 1.2406E+02 1.1594E+02 5.4203E+01 4.5684E+01 - 1.1220E+00 9.5507E+01 8.8176E+01 4.1004E+01 3.4333E+01 - 1.2589E+00 7.2889E+01 6.6785E+01 3.0764E+01 2.5619E+01 - 1.4125E+00 5.5313E+01 5.0420E+01 2.2948E+01 1.8821E+01 - 1.5849E+00 4.1954E+01 3.7719E+01 1.6965E+01 1.3801E+01 - 1.7783E+00 3.1733E+01 2.8003E+01 1.2344E+01 9.9448E+00 - 1.9953E+00 2.3640E+01 2.0707E+01 8.9343E+00 7.0467E+00 - 2.2387E+00 1.7585E+01 1.5243E+01 6.3907E+00 5.1066E+00 - 2.5119E+00 1.3008E+01 1.1018E+01 4.5777E+00 3.6582E+00 - 2.8184E+00 9.5076E+00 8.0781E+00 3.3060E+00 2.5698E+00 - 3.1623E+00 6.9797E+00 5.9115E+00 2.3291E+00 1.7889E+00 - 3.5481E+00 5.0828E+00 4.2659E+00 1.6222E+00 1.2396E+00 - 3.9811E+00 3.6981E+00 3.0581E+00 1.1161E+00 8.5854E-01 - 4.4668E+00 2.6822E+00 2.1844E+00 7.7138E-01 5.8852E-01 - 5.0119E+00 1.9429E+00 1.5568E+00 5.3473E-01 4.0123E-01 - 5.6234E+00 1.4012E+00 1.1103E+00 3.6690E-01 2.7247E-01 - 6.3096E+00 9.9962E-01 7.9027E-01 2.4548E-01 1.8769E-01 - 7.0795E+00 7.1699E-01 5.6251E-01 1.6555E-01 1.2629E-01 - 7.9433E+00 5.1585E-01 4.0209E-01 1.1156E-01 8.3087E-02 - 8.9125E+00 3.6584E-01 2.8652E-01 7.2620E-02 5.5959E-02 - 1.0000E+01 2.6265E-01 2.0232E-01 4.9695E-02 3.7721E-02 - 1.1220E+01 1.8764E-01 1.4324E-01 3.3643E-02 2.5062E-02 - 1.2589E+01 1.3395E-01 1.0112E-01 2.2598E-02 1.7176E-02 - 1.4125E+01 9.5411E-02 7.1490E-02 1.5220E-02 1.1635E-02 - 1.5849E+01 6.7510E-02 5.0555E-02 1.0017E-02 7.4512E-03 - 1.7783E+01 4.8231E-02 3.5963E-02 6.4084E-03 4.9614E-03 - 1.9953E+01 3.4420E-02 2.5619E-02 4.2965E-03 3.4452E-03 - 2.2387E+01 2.4574E-02 1.7912E-02 2.9473E-03 2.2163E-03 - 2.5119E+01 1.7298E-02 1.2627E-02 1.9340E-03 1.4996E-03 - 2.8184E+01 1.2184E-02 8.9741E-03 1.2807E-03 1.0118E-03 - 3.1623E+01 8.6357E-03 6.3158E-03 8.6042E-04 6.6486E-04 - 3.5481E+01 6.1133E-03 4.4346E-03 5.6873E-04 4.4515E-04 - 3.9811E+01 4.3175E-03 3.1035E-03 3.7741E-04 3.0155E-04 - 4.4668E+01 3.0457E-03 2.1844E-03 2.5539E-04 2.0533E-04 - 5.0119E+01 2.1517E-03 1.5330E-03 1.6967E-04 1.3947E-04 - 5.6234E+01 1.5125E-03 1.0719E-03 1.1302E-04 9.2462E-05 - 6.3096E+01 1.0650E-03 7.5078E-04 7.5925E-05 6.0660E-05 - 7.0795E+01 7.5284E-04 5.2291E-04 5.1129E-05 4.1148E-05 - 7.9433E+01 5.3022E-04 3.6583E-04 3.4584E-05 2.8192E-05 - 8.9125E+01 3.7193E-04 2.5519E-04 2.3820E-05 1.8873E-05 - 1.0000E+02 2.5807E-04 1.7822E-04 1.5714E-05 1.2682E-05 - 1.1220E+02 1.8024E-04 1.2336E-04 1.0481E-05 8.6794E-06 - 1.2589E+02 1.2625E-04 8.5443E-05 7.0213E-06 5.8102E-06 - 1.4125E+02 8.8364E-05 5.9471E-05 4.6457E-06 3.8717E-06 - 1.5849E+02 6.1916E-05 4.1418E-05 3.1569E-06 2.6257E-06 - 1.7783E+02 4.3235E-05 2.8752E-05 2.1962E-06 1.7800E-06 - 1.9953E+02 3.0093E-05 1.9924E-05 1.4816E-06 1.1897E-06 - 2.2387E+02 2.0816E-05 1.3706E-05 9.9601E-07 8.2389E-07 - 2.5119E+02 1.4436E-05 9.3966E-06 6.8784E-07 5.4950E-07 - 2.8184E+02 1.0092E-05 6.4195E-06 4.7684E-07 3.6397E-07 - 3.1623E+02 7.0784E-06 4.5306E-06 3.1316E-07 2.4615E-07 - 3.5481E+02 4.8686E-06 3.1274E-06 2.1333E-07 1.6689E-07 - 3.9811E+02 3.3721E-06 2.1573E-06 1.4492E-07 1.1342E-07 - 4.4668E+02 2.3430E-06 1.4770E-06 9.8245E-08 7.5798E-08 - 5.0119E+02 1.6185E-06 1.0110E-06 6.6266E-08 5.2091E-08 - 5.6234E+02 1.1214E-06 6.9922E-07 4.4683E-08 3.4250E-08 - 6.3096E+02 7.6937E-07 4.7574E-07 3.0353E-08 2.2832E-08 - 7.0795E+02 5.2680E-07 3.2261E-07 2.0282E-08 1.5265E-08 - 7.9433E+02 3.5905E-07 2.1870E-07 1.3498E-08 1.0221E-08 - 8.9125E+02 2.4772E-07 1.4947E-07 8.9864E-09 6.7404E-09 - 1.0000E+03 1.6986E-07 1.0208E-07 6.0478E-09 4.5157E-09 - 1.1220E+03 1.1371E-07 6.8479E-08 4.0510E-09 3.0616E-09 - 1.2589E+03 7.7488E-08 4.6458E-08 2.5927E-09 1.9861E-09 - 1.4125E+03 5.2238E-08 3.1068E-08 1.7473E-09 1.2642E-09 - 1.5849E+03 3.5647E-08 2.0773E-08 1.1100E-09 8.5373E-10 - 1.7783E+03 2.4062E-08 1.3960E-08 7.4169E-10 6.1545E-10 - 1.9953E+03 1.6051E-08 9.2779E-09 4.9715E-10 3.9441E-10 - 2.2387E+03 1.0711E-08 6.2358E-09 3.3998E-10 2.4740E-10 - 2.5119E+03 7.2134E-09 4.2065E-09 2.2295E-10 1.5615E-10 - 2.8184E+03 4.8404E-09 2.7703E-09 1.4170E-10 1.0735E-10 - 3.1623E+03 3.3013E-09 1.9241E-09 9.9635E-11 6.7685E-11 - 3.5481E+03 2.1120E-09 1.2448E-09 7.1152E-11 4.5295E-11 - 3.9811E+03 1.4144E-09 8.0978E-10 4.5522E-11 3.1776E-11 - 4.4668E+03 9.5316E-10 5.3125E-10 2.9120E-11 2.0094E-11 - 5.0119E+03 6.2902E-10 3.5214E-10 1.8488E-11 1.3252E-11 - 5.6234E+03 4.1271E-10 2.2838E-10 1.1425E-11 9.5654E-12 - 6.3096E+03 2.7285E-10 1.5159E-10 7.4201E-12 6.0068E-12 - 7.0795E+03 1.7982E-10 9.8848E-11 5.0907E-12 3.8086E-12 - 7.9433E+03 1.1679E-10 6.5271E-11 3.3719E-12 2.4093E-12 - 8.9125E+03 7.5796E-11 4.3055E-11 1.9307E-12 1.4417E-12 - 1.0000E+04 5.0462E-11 2.7367E-11 1.3489E-12 1.0754E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.5190E+03 7.5536E+03 3.6194E+03 3.6019E+03 - 1.1220E-01 6.7899E+03 6.8210E+03 3.2594E+03 3.2502E+03 - 1.2589E-01 6.0739E+03 6.0949E+03 2.9159E+03 2.8733E+03 - 1.4125E-01 5.4105E+03 5.4004E+03 2.5858E+03 2.4957E+03 - 1.5849E-01 4.7774E+03 4.7536E+03 2.2672E+03 2.1694E+03 - 1.7783E-01 4.1511E+03 4.1269E+03 1.9782E+03 1.8635E+03 - 1.9953E-01 3.5598E+03 3.5376E+03 1.6962E+03 1.5753E+03 - 2.2387E-01 3.0297E+03 2.9877E+03 1.4363E+03 1.3346E+03 - 2.5119E-01 2.5419E+03 2.4952E+03 1.2056E+03 1.1136E+03 - 2.8184E-01 2.1018E+03 2.0627E+03 1.0064E+03 9.0902E+02 - 3.1623E-01 1.7183E+03 1.6947E+03 8.2900E+02 7.3502E+02 - 3.5481E-01 1.3948E+03 1.3708E+03 6.7210E+02 5.9282E+02 - 3.9811E-01 1.1220E+03 1.0969E+03 5.4135E+02 4.7138E+02 - 4.4668E-01 8.9470E+02 8.7321E+02 4.3324E+02 3.7088E+02 - 5.0119E-01 7.0674E+02 6.8319E+02 3.4138E+02 2.9040E+02 - 5.6234E-01 5.5171E+02 5.3106E+02 2.6548E+02 2.2529E+02 - 6.3096E-01 4.2699E+02 4.1114E+02 2.0345E+02 1.7255E+02 - 7.0795E-01 3.2946E+02 3.1452E+02 1.5631E+02 1.2932E+02 - 7.9433E-01 2.5357E+02 2.3903E+02 1.1922E+02 9.6261E+01 - 8.9125E-01 1.9231E+02 1.8100E+02 8.9246E+01 7.2658E+01 - 1.0000E+00 1.4407E+02 1.3559E+02 6.6593E+01 5.3850E+01 - 1.1220E+00 1.0829E+02 1.0149E+02 4.9136E+01 3.9535E+01 - 1.2589E+00 8.1972E+01 7.5346E+01 3.6072E+01 2.8725E+01 - 1.4125E+00 6.1422E+01 5.5889E+01 2.6360E+01 2.0739E+01 - 1.5849E+00 4.5651E+01 4.1306E+01 1.9173E+01 1.4866E+01 - 1.7783E+00 3.4025E+01 3.0202E+01 1.3876E+01 1.0658E+01 - 1.9953E+00 2.5233E+01 2.1976E+01 9.9667E+00 7.6754E+00 - 2.2387E+00 1.8338E+01 1.5995E+01 7.0188E+00 5.4279E+00 - 2.5119E+00 1.3386E+01 1.1632E+01 4.9034E+00 3.8080E+00 - 2.8184E+00 9.8266E+00 8.3739E+00 3.4970E+00 2.6486E+00 - 3.1623E+00 7.1089E+00 5.9860E+00 2.3989E+00 1.8304E+00 - 3.5481E+00 5.1802E+00 4.2977E+00 1.6539E+00 1.2682E+00 - 3.9811E+00 3.7553E+00 3.0683E+00 1.1395E+00 8.7160E-01 - 4.4668E+00 2.6986E+00 2.1943E+00 7.7554E-01 5.9314E-01 - 5.0119E+00 1.9428E+00 1.5698E+00 5.2867E-01 4.0540E-01 - 5.6234E+00 1.4005E+00 1.1163E+00 3.5906E-01 2.7493E-01 - 6.3096E+00 1.0104E+00 7.9622E-01 2.4634E-01 1.8803E-01 - 7.0795E+00 7.2945E-01 5.7340E-01 1.6813E-01 1.2786E-01 - 7.9433E+00 5.1486E-01 4.0474E-01 1.1150E-01 8.4195E-02 - 8.9125E+00 3.6184E-01 2.8689E-01 7.1995E-02 5.6275E-02 - 1.0000E+01 2.6467E-01 2.0257E-01 5.0106E-02 3.8110E-02 - 1.1220E+01 1.8889E-01 1.4301E-01 3.3650E-02 2.5484E-02 - 1.2589E+01 1.3405E-01 1.0119E-01 2.2290E-02 1.6668E-02 - 1.4125E+01 9.5214E-02 7.1357E-02 1.4633E-02 1.1194E-02 - 1.5849E+01 6.7958E-02 5.0305E-02 9.5061E-03 7.7473E-03 - 1.7783E+01 4.7985E-02 3.5788E-02 6.4405E-03 5.1602E-03 - 1.9953E+01 3.3899E-02 2.5631E-02 4.3176E-03 3.3386E-03 - 2.2387E+01 2.4136E-02 1.8065E-02 2.8819E-03 2.2306E-03 - 2.5119E+01 1.7136E-02 1.2527E-02 1.8672E-03 1.5118E-03 - 2.8184E+01 1.2293E-02 8.8436E-03 1.2592E-03 1.0439E-03 - 3.1623E+01 8.6534E-03 6.2940E-03 8.4959E-04 6.7232E-04 - 3.5481E+01 6.1089E-03 4.4094E-03 5.7096E-04 4.5023E-04 - 3.9811E+01 4.3100E-03 3.1018E-03 3.8585E-04 3.0491E-04 - 4.4668E+01 3.0455E-03 2.1883E-03 2.5316E-04 2.0281E-04 - 5.0119E+01 2.1401E-03 1.5329E-03 1.6719E-04 1.3423E-04 - 5.6234E+01 1.5082E-03 1.0777E-03 1.1346E-04 9.1264E-05 - 6.3096E+01 1.0672E-03 7.5245E-04 7.6278E-05 6.1695E-05 - 7.0795E+01 7.4749E-04 5.2263E-04 5.1553E-05 4.1353E-05 - 7.9433E+01 5.2279E-04 3.6531E-04 3.5346E-05 2.7876E-05 - 8.9125E+01 3.6600E-04 2.5631E-04 2.3607E-05 1.8707E-05 - 1.0000E+02 2.5787E-04 1.7807E-04 1.5864E-05 1.2720E-05 - 1.1220E+02 1.8068E-04 1.2347E-04 1.0579E-05 8.5198E-06 - 1.2589E+02 1.2631E-04 8.5541E-05 7.1428E-06 5.8241E-06 - 1.4125E+02 8.8252E-05 5.9296E-05 4.8436E-06 3.9869E-06 - 1.5849E+02 6.1735E-05 4.1187E-05 3.2308E-06 2.6681E-06 - 1.7783E+02 4.3203E-05 2.8644E-05 2.2184E-06 1.7137E-06 - 1.9953E+02 3.0113E-05 1.9844E-05 1.5281E-06 1.1578E-06 - 2.2387E+02 2.0995E-05 1.3630E-05 1.0296E-06 7.9403E-07 - 2.5119E+02 1.4631E-05 9.5235E-06 7.0941E-07 5.3231E-07 - 2.8184E+02 1.0080E-05 6.6401E-06 4.7331E-07 3.7224E-07 - 3.1623E+02 7.0430E-06 4.5434E-06 3.1052E-07 2.4627E-07 - 3.5481E+02 4.8630E-06 3.1294E-06 2.1038E-07 1.6313E-07 - 3.9811E+02 3.3809E-06 2.1455E-06 1.4429E-07 1.1265E-07 - 4.4668E+02 2.3502E-06 1.4715E-06 9.7868E-08 7.5714E-08 - 5.0119E+02 1.6235E-06 1.0124E-06 6.4604E-08 5.1598E-08 - 5.6234E+02 1.1220E-06 6.9386E-07 4.3747E-08 3.4213E-08 - 6.3096E+02 7.7079E-07 4.7042E-07 2.9522E-08 2.2663E-08 - 7.0795E+02 5.2902E-07 3.2446E-07 2.0015E-08 1.4973E-08 - 7.9433E+02 3.6127E-07 2.2182E-07 1.3053E-08 9.8007E-09 - 8.9125E+02 2.4590E-07 1.5047E-07 8.5912E-09 6.7924E-09 - 1.0000E+03 1.6980E-07 1.0267E-07 5.8461E-09 4.8230E-09 - 1.1220E+03 1.1365E-07 6.8838E-08 3.8707E-09 3.0582E-09 - 1.2589E+03 7.7251E-08 4.6384E-08 2.6204E-09 1.9674E-09 - 1.4125E+03 5.2778E-08 3.1555E-08 1.7826E-09 1.2979E-09 - 1.5849E+03 3.5638E-08 2.1044E-08 1.1854E-09 9.3983E-10 - 1.7783E+03 2.4161E-08 1.3996E-08 7.7248E-10 6.4268E-10 - 1.9953E+03 1.6099E-08 9.5200E-09 5.0162E-10 3.8101E-10 - 2.2387E+03 1.0757E-08 6.2491E-09 3.2689E-10 2.5486E-10 - 2.5119E+03 7.2796E-09 4.1063E-09 2.3075E-10 1.7412E-10 - 2.8184E+03 4.8869E-09 2.7589E-09 1.5104E-10 1.1102E-10 - 3.1623E+03 3.3458E-09 1.9122E-09 9.9473E-11 7.1347E-11 - 3.5481E+03 2.1437E-09 1.2277E-09 6.4427E-11 4.7877E-11 - 3.9811E+03 1.4044E-09 8.0814E-10 4.1074E-11 3.2490E-11 - 4.4668E+03 9.2726E-10 5.3828E-10 2.7287E-11 2.0495E-11 - 5.0119E+03 6.1725E-10 3.4957E-10 1.7562E-11 1.2567E-11 - 5.6234E+03 4.1750E-10 2.2887E-10 1.1015E-11 8.6349E-12 - 6.3096E+03 2.7000E-10 1.4921E-10 7.5031E-12 5.7082E-12 - 7.0795E+03 1.7748E-10 9.7792E-11 5.1422E-12 3.6366E-12 - 7.9433E+03 1.1801E-10 6.5769E-11 3.6479E-12 2.3292E-12 - 8.9125E+03 7.7341E-11 4.3809E-11 2.2718E-12 1.4900E-12 - 1.0000E+04 5.1255E-11 2.7685E-11 1.2841E-12 9.8050E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 7.2921E+03 7.3444E+03 3.5543E+03 3.4837E+03 - 1.1220E-01 6.6308E+03 6.6203E+03 3.2109E+03 3.1539E+03 - 1.2589E-01 5.9623E+03 5.9561E+03 2.8781E+03 2.8108E+03 - 1.4125E-01 5.3101E+03 5.3244E+03 2.5421E+03 2.4580E+03 - 1.5849E-01 4.6981E+03 4.6827E+03 2.2322E+03 2.1368E+03 - 1.7783E-01 4.0971E+03 4.0811E+03 1.9467E+03 1.8490E+03 - 1.9953E-01 3.5233E+03 3.5114E+03 1.6779E+03 1.5725E+03 - 2.2387E-01 3.0021E+03 2.9825E+03 1.4385E+03 1.3213E+03 - 2.5119E-01 2.5177E+03 2.4910E+03 1.2094E+03 1.1016E+03 - 2.8184E-01 2.0823E+03 2.0496E+03 1.0061E+03 9.0636E+02 - 3.1623E-01 1.7164E+03 1.6896E+03 8.2901E+02 7.3559E+02 - 3.5481E-01 1.3995E+03 1.3777E+03 6.7300E+02 5.9520E+02 - 3.9811E-01 1.1276E+03 1.1032E+03 5.4156E+02 4.7201E+02 - 4.4668E-01 8.9943E+02 8.7633E+02 4.3217E+02 3.7267E+02 - 5.0119E-01 7.0949E+02 6.8694E+02 3.4248E+02 2.9127E+02 - 5.6234E-01 5.5614E+02 5.3610E+02 2.6859E+02 2.2578E+02 - 6.3096E-01 4.3237E+02 4.1574E+02 2.0738E+02 1.7413E+02 - 7.0795E-01 3.3118E+02 3.1623E+02 1.5912E+02 1.3233E+02 - 7.9433E-01 2.5284E+02 2.4116E+02 1.2071E+02 9.9056E+01 - 8.9125E-01 1.9316E+02 1.8350E+02 9.1170E+01 7.3149E+01 - 1.0000E+00 1.4656E+02 1.3789E+02 6.7339E+01 5.4085E+01 - 1.1220E+00 1.1051E+02 1.0304E+02 4.9857E+01 3.9740E+01 - 1.2589E+00 8.3087E+01 7.6500E+01 3.6576E+01 2.9047E+01 - 1.4125E+00 6.2151E+01 5.6286E+01 2.6606E+01 2.1020E+01 - 1.5849E+00 4.6065E+01 4.1441E+01 1.9182E+01 1.5251E+01 - 1.7783E+00 3.4111E+01 3.0506E+01 1.3777E+01 1.0874E+01 - 1.9953E+00 2.5290E+01 2.2218E+01 9.8748E+00 7.7219E+00 - 2.2387E+00 1.8615E+01 1.6017E+01 6.9428E+00 5.4515E+00 - 2.5119E+00 1.3454E+01 1.1553E+01 4.9280E+00 3.7837E+00 - 2.8184E+00 9.7175E+00 8.3439E+00 3.4822E+00 2.6162E+00 - 3.1623E+00 7.1386E+00 6.0261E+00 2.4091E+00 1.8257E+00 - 3.5481E+00 5.1884E+00 4.3039E+00 1.6659E+00 1.2706E+00 - 3.9811E+00 3.7558E+00 3.0699E+00 1.1455E+00 8.7372E-01 - 4.4668E+00 2.7202E+00 2.1959E+00 7.8662E-01 6.0082E-01 - 5.0119E+00 1.9615E+00 1.5650E+00 5.3453E-01 4.1818E-01 - 5.6234E+00 1.4072E+00 1.1118E+00 3.6154E-01 2.8012E-01 - 6.3096E+00 1.0092E+00 7.9399E-01 2.4519E-01 1.8787E-01 - 7.0795E+00 7.1747E-01 5.6643E-01 1.6881E-01 1.2840E-01 - 7.9433E+00 5.1483E-01 4.0132E-01 1.1360E-01 8.4241E-02 - 8.9125E+00 3.7050E-01 2.8191E-01 7.6029E-02 5.6364E-02 - 1.0000E+01 2.6410E-01 2.0119E-01 5.0857E-02 3.7950E-02 - 1.1220E+01 1.8711E-01 1.4286E-01 3.3232E-02 2.5869E-02 - 1.2589E+01 1.3343E-01 1.0076E-01 2.2204E-02 1.7179E-02 - 1.4125E+01 9.4690E-02 7.1087E-02 1.5102E-02 1.1271E-02 - 1.5849E+01 6.7371E-02 5.0692E-02 9.9542E-03 7.5996E-03 - 1.7783E+01 4.7990E-02 3.5887E-02 6.4891E-03 5.0560E-03 - 1.9953E+01 3.4204E-02 2.5159E-02 4.2734E-03 3.2541E-03 - 2.2387E+01 2.4407E-02 1.7701E-02 2.9000E-03 2.1562E-03 - 2.5119E+01 1.7260E-02 1.2682E-02 1.9769E-03 1.4524E-03 - 2.8184E+01 1.2149E-02 8.8894E-03 1.2835E-03 1.0043E-03 - 3.1623E+01 8.6533E-03 6.2666E-03 8.4820E-04 6.6319E-04 - 3.5481E+01 6.1235E-03 4.4039E-03 5.6706E-04 4.4330E-04 - 3.9811E+01 4.3286E-03 3.0968E-03 3.8422E-04 3.0476E-04 - 4.4668E+01 3.0527E-03 2.1828E-03 2.5615E-04 2.0774E-04 - 5.0119E+01 2.1489E-03 1.5313E-03 1.7118E-04 1.3639E-04 - 5.6234E+01 1.5183E-03 1.0716E-03 1.1361E-04 9.1216E-05 - 6.3096E+01 1.0685E-03 7.4734E-04 7.5745E-05 6.2633E-05 - 7.0795E+01 7.5543E-04 5.2347E-04 5.0854E-05 4.2343E-05 - 7.9433E+01 5.2984E-04 3.6662E-04 3.4828E-05 2.8322E-05 - 8.9125E+01 3.6873E-04 2.5470E-04 2.3391E-05 1.9188E-05 - 1.0000E+02 2.5839E-04 1.7798E-04 1.5648E-05 1.2660E-05 - 1.1220E+02 1.8056E-04 1.2316E-04 1.0644E-05 8.4268E-06 - 1.2589E+02 1.2596E-04 8.5678E-05 7.1543E-06 5.6980E-06 - 1.4125E+02 8.8042E-05 5.9459E-05 4.8131E-06 3.8801E-06 - 1.5849E+02 6.1540E-05 4.1010E-05 3.2550E-06 2.6032E-06 - 1.7783E+02 4.3208E-05 2.8511E-05 2.1466E-06 1.7404E-06 - 1.9953E+02 3.0184E-05 1.9803E-05 1.4232E-06 1.2320E-06 - 2.2387E+02 2.0991E-05 1.3634E-05 9.8590E-07 8.5015E-07 - 2.5119E+02 1.4605E-05 9.5112E-06 6.9794E-07 5.6637E-07 - 2.8184E+02 1.0160E-05 6.6098E-06 4.7404E-07 3.7948E-07 - 3.1623E+02 7.0683E-06 4.5542E-06 3.1533E-07 2.5406E-07 - 3.5481E+02 4.8827E-06 3.1282E-06 2.1302E-07 1.7075E-07 - 3.9811E+02 3.3888E-06 2.1380E-06 1.4516E-07 1.1318E-07 - 4.4668E+02 2.3433E-06 1.4698E-06 1.0015E-07 7.7323E-08 - 5.0119E+02 1.6152E-06 1.0110E-06 6.5582E-08 5.1616E-08 - 5.6234E+02 1.1206E-06 6.9524E-07 4.3951E-08 3.4227E-08 - 6.3096E+02 7.6562E-07 4.7196E-07 2.9310E-08 2.3025E-08 - 7.0795E+02 5.2757E-07 3.2139E-07 1.9812E-08 1.5165E-08 - 7.9433E+02 3.6082E-07 2.1805E-07 1.3089E-08 1.0105E-08 - 8.9125E+02 2.4543E-07 1.4940E-07 8.5822E-09 6.9451E-09 - 1.0000E+03 1.6897E-07 1.0247E-07 6.1308E-09 4.6094E-09 - 1.1220E+03 1.1377E-07 6.8873E-08 4.1062E-09 3.1370E-09 - 1.2589E+03 7.7312E-08 4.6382E-08 2.7661E-09 2.0766E-09 - 1.4125E+03 5.2280E-08 3.0806E-08 1.8514E-09 1.2655E-09 - 1.5849E+03 3.5199E-08 2.0689E-08 1.1916E-09 7.7270E-10 - 1.7783E+03 2.3750E-08 1.3806E-08 7.5139E-10 5.2758E-10 - 1.9953E+03 1.6292E-08 9.4591E-09 5.0450E-10 3.7752E-10 - 2.2387E+03 1.0826E-08 6.2333E-09 3.2719E-10 2.5325E-10 - 2.5119E+03 7.2190E-09 4.1501E-09 2.1212E-10 1.6340E-10 - 2.8184E+03 4.7864E-09 2.7747E-09 1.4338E-10 9.8265E-11 - 3.1623E+03 3.2803E-09 1.8929E-09 9.2654E-11 7.2348E-11 - 3.5481E+03 2.1278E-09 1.2086E-09 6.1190E-11 4.8576E-11 - 3.9811E+03 1.4175E-09 8.0577E-10 4.1249E-11 3.1624E-11 - 4.4668E+03 9.3033E-10 5.4281E-10 2.8924E-11 2.2433E-11 - 5.0119E+03 6.1851E-10 3.5493E-10 1.7978E-11 1.3902E-11 - 5.6234E+03 4.1417E-10 2.3198E-10 1.1550E-11 8.7487E-12 - 6.3096E+03 2.7012E-10 1.5484E-10 7.5618E-12 5.8500E-12 - 7.0795E+03 1.7874E-10 1.0253E-10 5.0315E-12 3.6268E-12 - 7.9433E+03 1.1681E-10 6.7539E-11 3.4569E-12 2.2329E-12 - 8.9125E+03 7.7477E-11 4.3806E-11 2.1094E-12 1.5007E-12 - 1.0000E+04 5.1685E-11 2.8649E-11 1.4217E-12 1.0103E-12 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 5.4128E+03 5.4658E+03 2.6104E+03 2.6362E+03 - 1.1220E-01 4.9242E+03 4.9819E+03 2.3657E+03 2.3767E+03 - 1.2589E-01 4.4689E+03 4.4898E+03 2.1193E+03 2.1311E+03 - 1.4125E-01 4.0181E+03 4.0165E+03 1.8959E+03 1.8784E+03 - 1.5849E-01 3.5701E+03 3.5515E+03 1.6795E+03 1.6412E+03 - 1.7783E-01 3.1350E+03 3.1039E+03 1.4711E+03 1.4295E+03 - 1.9953E-01 2.7219E+03 2.6938E+03 1.2739E+03 1.2319E+03 - 2.2387E-01 2.3292E+03 2.3058E+03 1.0959E+03 1.0430E+03 - 2.5119E-01 1.9717E+03 1.9518E+03 9.3129E+02 8.7388E+02 - 2.8184E-01 1.6535E+03 1.6299E+03 7.8006E+02 7.2346E+02 - 3.1623E-01 1.3703E+03 1.3455E+03 6.5130E+02 5.9760E+02 - 3.5481E-01 1.1242E+03 1.1073E+03 5.3707E+02 4.8945E+02 - 3.9811E-01 9.1898E+02 9.0383E+02 4.3609E+02 3.9283E+02 - 4.4668E-01 7.4690E+02 7.2611E+02 3.5102E+02 3.1050E+02 - 5.0119E-01 5.9542E+02 5.7852E+02 2.7956E+02 2.4699E+02 - 5.6234E-01 4.7336E+02 4.5705E+02 2.2077E+02 1.9464E+02 - 6.3096E-01 3.7340E+02 3.5893E+02 1.7471E+02 1.5130E+02 - 7.0795E-01 2.9191E+02 2.8142E+02 1.3538E+02 1.1696E+02 - 7.9433E-01 2.2758E+02 2.1672E+02 1.0452E+02 8.7676E+01 - 8.9125E-01 1.7565E+02 1.6410E+02 8.0253E+01 6.5514E+01 - 1.0000E+00 1.3418E+02 1.2573E+02 5.9548E+01 4.9877E+01 - 1.1220E+00 1.0271E+02 9.5395E+01 4.5021E+01 3.7212E+01 - 1.2589E+00 7.7982E+01 7.1905E+01 3.3430E+01 2.7348E+01 - 1.4125E+00 5.9013E+01 5.3761E+01 2.4538E+01 1.9986E+01 - 1.5849E+00 4.4307E+01 3.9722E+01 1.8056E+01 1.4432E+01 - 1.7783E+00 3.3018E+01 2.9408E+01 1.3177E+01 1.0457E+01 - 1.9953E+00 2.4549E+01 2.1548E+01 9.3978E+00 7.4753E+00 - 2.2387E+00 1.8092E+01 1.5636E+01 6.7127E+00 5.3089E+00 - 2.5119E+00 1.3364E+01 1.1427E+01 4.8296E+00 3.7717E+00 - 2.8184E+00 9.8669E+00 8.2733E+00 3.4008E+00 2.6184E+00 - 3.1623E+00 7.1531E+00 5.9946E+00 2.3761E+00 1.8351E+00 - 3.5481E+00 5.1762E+00 4.2915E+00 1.6624E+00 1.2592E+00 - 3.9811E+00 3.7571E+00 3.0850E+00 1.1433E+00 8.5951E-01 - 4.4668E+00 2.7239E+00 2.2297E+00 7.8219E-01 5.8920E-01 - 5.0119E+00 1.9641E+00 1.5933E+00 5.3871E-01 4.0458E-01 - 5.6234E+00 1.4132E+00 1.1272E+00 3.6634E-01 2.7908E-01 - 6.3096E+00 1.0174E+00 8.0405E-01 2.4612E-01 1.9065E-01 - 7.0795E+00 7.3331E-01 5.7652E-01 1.6822E-01 1.2882E-01 - 7.9433E+00 5.2108E-01 4.1123E-01 1.1410E-01 8.5978E-02 - 8.9125E+00 3.7283E-01 2.9056E-01 7.6925E-02 5.7151E-02 - 1.0000E+01 2.6296E-01 2.0129E-01 5.0644E-02 3.8142E-02 - 1.1220E+01 1.8786E-01 1.4235E-01 3.3682E-02 2.5529E-02 - 1.2589E+01 1.3445E-01 1.0074E-01 2.2331E-02 1.6707E-02 - 1.4125E+01 9.5748E-02 7.0943E-02 1.4911E-02 1.1223E-02 - 1.5849E+01 6.7695E-02 5.0391E-02 9.8171E-03 7.8108E-03 - 1.7783E+01 4.8013E-02 3.5601E-02 6.3544E-03 5.0129E-03 - 1.9953E+01 3.4451E-02 2.5219E-02 4.3055E-03 3.2838E-03 - 2.2387E+01 2.4483E-02 1.7953E-02 2.9009E-03 2.3354E-03 - 2.5119E+01 1.7231E-02 1.2631E-02 1.9598E-03 1.4852E-03 - 2.8184E+01 1.2174E-02 8.7848E-03 1.2783E-03 9.7758E-04 - 3.1623E+01 8.6798E-03 6.2778E-03 8.5608E-04 6.7374E-04 - 3.5481E+01 6.1232E-03 4.4291E-03 5.6844E-04 4.5251E-04 - 3.9811E+01 4.3123E-03 3.1140E-03 3.7947E-04 3.0316E-04 - 4.4668E+01 3.0373E-03 2.1775E-03 2.5465E-04 2.0068E-04 - 5.0119E+01 2.1501E-03 1.5178E-03 1.7188E-04 1.3429E-04 - 5.6234E+01 1.5172E-03 1.0660E-03 1.1538E-04 9.0958E-05 - 6.3096E+01 1.0649E-03 7.5035E-04 7.6417E-05 6.2127E-05 - 7.0795E+01 7.5112E-04 5.2182E-04 5.1150E-05 4.2576E-05 - 7.9433E+01 5.2815E-04 3.6499E-04 3.4729E-05 2.8147E-05 - 8.9125E+01 3.6725E-04 2.5470E-04 2.2919E-05 1.8763E-05 - 1.0000E+02 2.5800E-04 1.7788E-04 1.5624E-05 1.2693E-05 - 1.1220E+02 1.8043E-04 1.2419E-04 1.0557E-05 8.6188E-06 - 1.2589E+02 1.2589E-04 8.6480E-05 7.0978E-06 5.8557E-06 - 1.4125E+02 8.8314E-05 5.9841E-05 4.7530E-06 3.9157E-06 - 1.5849E+02 6.1898E-05 4.1197E-05 3.2154E-06 2.6537E-06 - 1.7783E+02 4.3555E-05 2.8698E-05 2.2173E-06 1.7431E-06 - 1.9953E+02 3.0415E-05 1.9955E-05 1.4920E-06 1.1725E-06 - 2.2387E+02 2.1043E-05 1.3659E-05 9.7808E-07 8.2480E-07 - 2.5119E+02 1.4589E-05 9.4164E-06 6.4800E-07 5.4240E-07 - 2.8184E+02 1.0170E-05 6.5224E-06 4.4401E-07 3.4871E-07 - 3.1623E+02 7.0730E-06 4.5496E-06 3.0838E-07 2.4909E-07 - 3.5481E+02 4.8744E-06 3.1194E-06 2.0724E-07 1.6664E-07 - 3.9811E+02 3.3811E-06 2.1490E-06 1.3968E-07 1.1035E-07 - 4.4668E+02 2.3450E-06 1.4762E-06 9.6836E-08 7.5511E-08 - 5.0119E+02 1.6233E-06 1.0113E-06 6.6295E-08 5.0873E-08 - 5.6234E+02 1.1214E-06 6.9790E-07 4.3848E-08 3.3711E-08 - 6.3096E+02 7.6513E-07 4.6954E-07 2.9993E-08 2.2220E-08 - 7.0795E+02 5.2673E-07 3.1933E-07 1.9266E-08 1.5250E-08 - 7.9433E+02 3.6000E-07 2.2063E-07 1.3017E-08 1.0134E-08 - 8.9125E+02 2.4616E-07 1.5065E-07 9.2700E-09 6.8131E-09 - 1.0000E+03 1.7042E-07 1.0312E-07 6.0754E-09 4.3902E-09 - 1.1220E+03 1.1433E-07 6.7969E-08 4.1539E-09 2.8803E-09 - 1.2589E+03 7.7152E-08 4.5951E-08 2.6363E-09 1.9351E-09 - 1.4125E+03 5.2428E-08 3.1437E-08 1.8038E-09 1.2950E-09 - 1.5849E+03 3.5478E-08 2.1102E-08 1.2792E-09 8.3813E-10 - 1.7783E+03 2.3845E-08 1.4047E-08 7.6263E-10 5.6627E-10 - 1.9953E+03 1.6056E-08 9.4767E-09 5.2033E-10 3.7751E-10 - 2.2387E+03 1.0727E-08 6.3688E-09 3.5318E-10 2.3921E-10 - 2.5119E+03 7.1498E-09 4.1731E-09 2.2875E-10 1.7003E-10 - 2.8184E+03 4.8268E-09 2.7822E-09 1.4409E-10 1.2024E-10 - 3.1623E+03 3.3059E-09 1.9075E-09 1.0064E-10 7.0875E-11 - 3.5481E+03 2.1335E-09 1.2258E-09 6.5545E-11 4.6237E-11 - 3.9811E+03 1.4245E-09 8.1010E-10 4.2436E-11 3.1485E-11 - 4.4668E+03 9.3623E-10 5.2913E-10 2.7301E-11 2.0380E-11 - 5.0119E+03 6.1562E-10 3.4513E-10 1.8687E-11 1.4073E-11 - 5.6234E+03 4.0518E-10 2.3005E-10 1.1424E-11 8.0292E-12 - 6.3096E+03 2.6953E-10 1.5001E-10 7.5755E-12 5.4581E-12 - 7.0795E+03 1.7718E-10 1.0121E-10 5.5215E-12 3.5238E-12 - 7.9433E+03 1.1806E-10 6.6069E-11 3.5571E-12 2.3801E-12 - 8.9125E+03 7.8113E-11 4.2499E-11 1.9797E-12 1.5392E-12 - 1.0000E+04 5.0508E-11 2.7634E-11 1.2789E-12 9.6148E-13 -average flux in [cosZ =-0.90 -- -0.80, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 4.3695E+03 4.3761E+03 2.0985E+03 2.1403E+03 - 1.1220E-01 3.9754E+03 3.9804E+03 1.8976E+03 1.9413E+03 - 1.2589E-01 3.5974E+03 3.6052E+03 1.7074E+03 1.7432E+03 - 1.4125E-01 3.2377E+03 3.2484E+03 1.5324E+03 1.5438E+03 - 1.5849E-01 2.8839E+03 2.8824E+03 1.3654E+03 1.3400E+03 - 1.7783E-01 2.5422E+03 2.5253E+03 1.1968E+03 1.1634E+03 - 1.9953E-01 2.2121E+03 2.1925E+03 1.0316E+03 1.0029E+03 - 2.2387E-01 1.9074E+03 1.8804E+03 8.8278E+02 8.5716E+02 - 2.5119E-01 1.6213E+03 1.5962E+03 7.5181E+02 7.2784E+02 - 2.8184E-01 1.3698E+03 1.3546E+03 6.3649E+02 6.0528E+02 - 3.1623E-01 1.1463E+03 1.1336E+03 5.3222E+02 5.0328E+02 - 3.5481E-01 9.4745E+02 9.2712E+02 4.3850E+02 4.1369E+02 - 3.9811E-01 7.7799E+02 7.5832E+02 3.6041E+02 3.3562E+02 - 4.4668E-01 6.3459E+02 6.1845E+02 2.9301E+02 2.7217E+02 - 5.0119E-01 5.1307E+02 5.0113E+02 2.3552E+02 2.1594E+02 - 5.6234E-01 4.0988E+02 4.0133E+02 1.8833E+02 1.6883E+02 - 6.3096E-01 3.2720E+02 3.1420E+02 1.4947E+02 1.3237E+02 - 7.0795E-01 2.6095E+02 2.4666E+02 1.1736E+02 1.0368E+02 - 7.9433E-01 2.0498E+02 1.9390E+02 9.0973E+01 8.0238E+01 - 8.9125E-01 1.5945E+02 1.5000E+02 7.0140E+01 6.0839E+01 - 1.0000E+00 1.2322E+02 1.1599E+02 5.3711E+01 4.5803E+01 - 1.1220E+00 9.5054E+01 8.8586E+01 4.0639E+01 3.4055E+01 - 1.2589E+00 7.3176E+01 6.7335E+01 3.0643E+01 2.5623E+01 - 1.4125E+00 5.5517E+01 5.0657E+01 2.2781E+01 1.9010E+01 - 1.5849E+00 4.1797E+01 3.7820E+01 1.6800E+01 1.3803E+01 - 1.7783E+00 3.1500E+01 2.8296E+01 1.2440E+01 9.9640E+00 - 1.9953E+00 2.3721E+01 2.0927E+01 9.0741E+00 7.2035E+00 - 2.2387E+00 1.7644E+01 1.5407E+01 6.6057E+00 5.1517E+00 - 2.5119E+00 1.2985E+01 1.1288E+01 4.6652E+00 3.6887E+00 - 2.8184E+00 9.5557E+00 8.1492E+00 3.2488E+00 2.6131E+00 - 3.1623E+00 7.0227E+00 5.8758E+00 2.3155E+00 1.7880E+00 - 3.5481E+00 5.1242E+00 4.2530E+00 1.6226E+00 1.2318E+00 - 3.9811E+00 3.7251E+00 3.0676E+00 1.1256E+00 8.5652E-01 - 4.4668E+00 2.6937E+00 2.1924E+00 7.7548E-01 5.9319E-01 - 5.0119E+00 1.9416E+00 1.5666E+00 5.3162E-01 4.0111E-01 - 5.6234E+00 1.3976E+00 1.1092E+00 3.6589E-01 2.7230E-01 - 6.3096E+00 9.9347E-01 7.9273E-01 2.4993E-01 1.8831E-01 - 7.0795E+00 7.1937E-01 5.6404E-01 1.6682E-01 1.2685E-01 - 7.9433E+00 5.1668E-01 3.9976E-01 1.1119E-01 8.2326E-02 - 8.9125E+00 3.6439E-01 2.8349E-01 7.5107E-02 5.5017E-02 - 1.0000E+01 2.6342E-01 2.0186E-01 5.0003E-02 3.8154E-02 - 1.1220E+01 1.8790E-01 1.4191E-01 3.3335E-02 2.5443E-02 - 1.2589E+01 1.3345E-01 1.0021E-01 2.2177E-02 1.6830E-02 - 1.4125E+01 9.4610E-02 7.1362E-02 1.4721E-02 1.1183E-02 - 1.5849E+01 6.6929E-02 5.0559E-02 9.7179E-03 7.6146E-03 - 1.7783E+01 4.7206E-02 3.5956E-02 6.5482E-03 5.0529E-03 - 1.9953E+01 3.3671E-02 2.5410E-02 4.4230E-03 3.2860E-03 - 2.2387E+01 2.4178E-02 1.7772E-02 2.8121E-03 2.1937E-03 - 2.5119E+01 1.7217E-02 1.2424E-02 1.8712E-03 1.4717E-03 - 2.8184E+01 1.2204E-02 8.6753E-03 1.2121E-03 1.0129E-03 - 3.1623E+01 8.6579E-03 6.2952E-03 8.5059E-04 6.7778E-04 - 3.5481E+01 6.1155E-03 4.4042E-03 5.7193E-04 4.5531E-04 - 3.9811E+01 4.3133E-03 3.1025E-03 3.8169E-04 3.0019E-04 - 4.4668E+01 3.0565E-03 2.1830E-03 2.5286E-04 2.0195E-04 - 5.0119E+01 2.1571E-03 1.5345E-03 1.7114E-04 1.3802E-04 - 5.6234E+01 1.5098E-03 1.0769E-03 1.1491E-04 9.2284E-05 - 6.3096E+01 1.0593E-03 7.5311E-04 7.7498E-05 6.1497E-05 - 7.0795E+01 7.4821E-04 5.2573E-04 5.1717E-05 4.1238E-05 - 7.9433E+01 5.2980E-04 3.6853E-04 3.4228E-05 2.8073E-05 - 8.9125E+01 3.7235E-04 2.5697E-04 2.2817E-05 1.8701E-05 - 1.0000E+02 2.5828E-04 1.7769E-04 1.5605E-05 1.2717E-05 - 1.1220E+02 1.8114E-04 1.2299E-04 1.0442E-05 8.4748E-06 - 1.2589E+02 1.2692E-04 8.5162E-05 7.0351E-06 5.7724E-06 - 1.4125E+02 8.8870E-05 5.9189E-05 4.7574E-06 3.9196E-06 - 1.5849E+02 6.2246E-05 4.1490E-05 3.2767E-06 2.6580E-06 - 1.7783E+02 4.3173E-05 2.8985E-05 2.2662E-06 1.7904E-06 - 1.9953E+02 3.0126E-05 1.9965E-05 1.5260E-06 1.1933E-06 - 2.2387E+02 2.0992E-05 1.3809E-05 1.0012E-06 8.1321E-07 - 2.5119E+02 1.4537E-05 9.4945E-06 6.8295E-07 5.5448E-07 - 2.8184E+02 1.0130E-05 6.5354E-06 4.6133E-07 3.4319E-07 - 3.1623E+02 7.0486E-06 4.5776E-06 3.0897E-07 2.5117E-07 - 3.5481E+02 4.8706E-06 3.1290E-06 2.1174E-07 1.6979E-07 - 3.9811E+02 3.3818E-06 2.1487E-06 1.4158E-07 1.1303E-07 - 4.4668E+02 2.3453E-06 1.4840E-06 9.4501E-08 7.6870E-08 - 5.0119E+02 1.6192E-06 1.0154E-06 6.3422E-08 5.2181E-08 - 5.6234E+02 1.1219E-06 6.9672E-07 4.3641E-08 3.4574E-08 - 6.3096E+02 7.6703E-07 4.7403E-07 2.8693E-08 2.3141E-08 - 7.0795E+02 5.2553E-07 3.2307E-07 1.9096E-08 1.5187E-08 - 7.9433E+02 3.6027E-07 2.1970E-07 1.3142E-08 9.9112E-09 - 8.9125E+02 2.4603E-07 1.4990E-07 8.7032E-09 6.6398E-09 - 1.0000E+03 1.6955E-07 1.0194E-07 5.8061E-09 4.4437E-09 - 1.1220E+03 1.1448E-07 6.8484E-08 3.9932E-09 2.9386E-09 - 1.2589E+03 7.7751E-08 4.6751E-08 2.7605E-09 1.9911E-09 - 1.4125E+03 5.2969E-08 3.1614E-08 1.8076E-09 1.2590E-09 - 1.5849E+03 3.5836E-08 2.1240E-08 1.1473E-09 8.4710E-10 - 1.7783E+03 2.3901E-08 1.4141E-08 7.3099E-10 5.8023E-10 - 1.9953E+03 1.6066E-08 9.4906E-09 4.7651E-10 3.8834E-10 - 2.2387E+03 1.0728E-08 6.2917E-09 3.1492E-10 2.6111E-10 - 2.5119E+03 7.0681E-09 4.1265E-09 2.2634E-10 1.7192E-10 - 2.8184E+03 4.6634E-09 2.8172E-09 1.5137E-10 1.0316E-10 - 3.1623E+03 3.3011E-09 1.9136E-09 9.8986E-11 6.9588E-11 - 3.5481E+03 2.1250E-09 1.2268E-09 6.5164E-11 4.5165E-11 - 3.9811E+03 1.4050E-09 8.0914E-10 4.2557E-11 3.0843E-11 - 4.4668E+03 9.4092E-10 5.3571E-10 2.7974E-11 1.9613E-11 - 5.0119E+03 6.2311E-10 3.5362E-10 1.8398E-11 1.1485E-11 - 5.6234E+03 4.1009E-10 2.3512E-10 1.2449E-11 8.3699E-12 - 6.3096E+03 2.6975E-10 1.5090E-10 7.7955E-12 5.7972E-12 - 7.0795E+03 1.7906E-10 9.7149E-11 5.1230E-12 3.6091E-12 - 7.9433E+03 1.1727E-10 6.4158E-11 3.3875E-12 2.2917E-12 - 8.9125E+03 7.6854E-11 4.2386E-11 2.0083E-12 1.6641E-12 - 1.0000E+04 5.0197E-11 2.7866E-11 1.2361E-12 1.1262E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 0 -- 30] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.6166E+03 9.6747E+03 4.7776E+03 4.4154E+03 - 1.1220E-01 8.6519E+03 8.7230E+03 4.2962E+03 3.9393E+03 - 1.2589E-01 7.7305E+03 7.7941E+03 3.8223E+03 3.4730E+03 - 1.4125E-01 6.8412E+03 6.8698E+03 3.3465E+03 3.0260E+03 - 1.5849E-01 5.9925E+03 5.9977E+03 2.9025E+03 2.6137E+03 - 1.7783E-01 5.1785E+03 5.1740E+03 2.5106E+03 2.2307E+03 - 1.9953E-01 4.3945E+03 4.3822E+03 2.1429E+03 1.8749E+03 - 2.2387E-01 3.6770E+03 3.6524E+03 1.7953E+03 1.5567E+03 - 2.5119E-01 3.0300E+03 3.0086E+03 1.4921E+03 1.2765E+03 - 2.8184E-01 2.4668E+03 2.4585E+03 1.2272E+03 1.0373E+03 - 3.1623E-01 2.0011E+03 1.9803E+03 9.9053E+02 8.2989E+02 - 3.5481E-01 1.6018E+03 1.5781E+03 7.8785E+02 6.5353E+02 - 3.9811E-01 1.2665E+03 1.2462E+03 6.2324E+02 5.1477E+02 - 4.4668E-01 9.9030E+02 9.7011E+02 4.8911E+02 4.0267E+02 - 5.0119E-01 7.6823E+02 7.4666E+02 3.7876E+02 3.0719E+02 - 5.6234E-01 5.9138E+02 5.7058E+02 2.8910E+02 2.3327E+02 - 6.3096E-01 4.5207E+02 4.3601E+02 2.1930E+02 1.7767E+02 - 7.0795E-01 3.4398E+02 3.3091E+02 1.6538E+02 1.3260E+02 - 7.9433E-01 2.6163E+02 2.4775E+02 1.2326E+02 9.7525E+01 - 8.9125E-01 1.9688E+02 1.8511E+02 9.0589E+01 7.1645E+01 - 1.0000E+00 1.4726E+02 1.3713E+02 6.6606E+01 5.2241E+01 - 1.1220E+00 1.1011E+02 1.0228E+02 4.8841E+01 3.8122E+01 - 1.2589E+00 8.2384E+01 7.5747E+01 3.5447E+01 2.7576E+01 - 1.4125E+00 6.1552E+01 5.5369E+01 2.5530E+01 1.9909E+01 - 1.5849E+00 4.5631E+01 4.0349E+01 1.8295E+01 1.4280E+01 - 1.7783E+00 3.3664E+01 2.9440E+01 1.2930E+01 1.0116E+01 - 1.9953E+00 2.4817E+01 2.1437E+01 9.1428E+00 7.1806E+00 - 2.2387E+00 1.8021E+01 1.5549E+01 6.3993E+00 5.0008E+00 - 2.5119E+00 1.3150E+01 1.1248E+01 4.4907E+00 3.4439E+00 - 2.8184E+00 9.7084E+00 8.1192E+00 3.1361E+00 2.4163E+00 - 3.1623E+00 7.0006E+00 5.7692E+00 2.1968E+00 1.6713E+00 - 3.5481E+00 5.0512E+00 4.1313E+00 1.5075E+00 1.1634E+00 - 3.9811E+00 3.6437E+00 2.9543E+00 1.0277E+00 7.9288E-01 - 4.4668E+00 2.6285E+00 2.1241E+00 7.0965E-01 5.2977E-01 - 5.0119E+00 1.8948E+00 1.5176E+00 4.7978E-01 3.5678E-01 - 5.6234E+00 1.3622E+00 1.0717E+00 3.1925E-01 2.4379E-01 - 6.3096E+00 9.7528E-01 7.6691E-01 2.1490E-01 1.6393E-01 - 7.0795E+00 6.9866E-01 5.4804E-01 1.4664E-01 1.0992E-01 - 7.9433E+00 5.0412E-01 3.8642E-01 1.0078E-01 7.5365E-02 - 8.9125E+00 3.6495E-01 2.7485E-01 6.6949E-02 5.1114E-02 - 1.0000E+01 2.5677E-01 1.9463E-01 4.4290E-02 3.3773E-02 - 1.1220E+01 1.8310E-01 1.3785E-01 2.9557E-02 2.2551E-02 - 1.2589E+01 1.3111E-01 9.8055E-02 1.9711E-02 1.4920E-02 - 1.4125E+01 9.2441E-02 6.9887E-02 1.3163E-02 9.8043E-03 - 1.5849E+01 6.5377E-02 4.9246E-02 8.9531E-03 6.7061E-03 - 1.7783E+01 4.6879E-02 3.4538E-02 5.9635E-03 4.5471E-03 - 1.9953E+01 3.3494E-02 2.4139E-02 3.9173E-03 3.0158E-03 - 2.2387E+01 2.3808E-02 1.7047E-02 2.6169E-03 1.9837E-03 - 2.5119E+01 1.6910E-02 1.2058E-02 1.7204E-03 1.2986E-03 - 2.8184E+01 1.1951E-02 8.4602E-03 1.1059E-03 8.5170E-04 - 3.1623E+01 8.4192E-03 6.0333E-03 7.5946E-04 6.0257E-04 - 3.5481E+01 5.9350E-03 4.2371E-03 5.1293E-04 4.0369E-04 - 3.9811E+01 4.1821E-03 2.9875E-03 3.4411E-04 2.7092E-04 - 4.4668E+01 2.9532E-03 2.1012E-03 2.2643E-04 1.8134E-04 - 5.0119E+01 2.0778E-03 1.4656E-03 1.5169E-04 1.2361E-04 - 5.6234E+01 1.4581E-03 1.0236E-03 1.0356E-04 8.2602E-05 - 6.3096E+01 1.0279E-03 7.1623E-04 6.9847E-05 5.4165E-05 - 7.0795E+01 7.2684E-04 4.9996E-04 4.7598E-05 3.6924E-05 - 7.9433E+01 5.1022E-04 3.5063E-04 3.1522E-05 2.5508E-05 - 8.9125E+01 3.5507E-04 2.4666E-04 2.0804E-05 1.7715E-05 - 1.0000E+02 2.4963E-04 1.6977E-04 1.4329E-05 1.1702E-05 - 1.1220E+02 1.7458E-04 1.1772E-04 9.5518E-06 7.8399E-06 - 1.2589E+02 1.2213E-04 8.2069E-05 6.4846E-06 5.3767E-06 - 1.4125E+02 8.5136E-05 5.7100E-05 4.3892E-06 3.6721E-06 - 1.5849E+02 5.9070E-05 3.9496E-05 2.9056E-06 2.4666E-06 - 1.7783E+02 4.1382E-05 2.7386E-05 2.0174E-06 1.6616E-06 - 1.9953E+02 2.8960E-05 1.8833E-05 1.4162E-06 1.1052E-06 - 2.2387E+02 1.9992E-05 1.2994E-05 9.4373E-07 7.4897E-07 - 2.5119E+02 1.3946E-05 9.0304E-06 6.2138E-07 5.2566E-07 - 2.8184E+02 9.7504E-06 6.1824E-06 4.3523E-07 3.5154E-07 - 3.1623E+02 6.7479E-06 4.3318E-06 2.9107E-07 2.3581E-07 - 3.5481E+02 4.6632E-06 2.9779E-06 1.9857E-07 1.5618E-07 - 3.9811E+02 3.2257E-06 2.0439E-06 1.3660E-07 1.0462E-07 - 4.4668E+02 2.2356E-06 1.4022E-06 8.9282E-08 7.0401E-08 - 5.0119E+02 1.5424E-06 9.5568E-07 5.8489E-08 4.5080E-08 - 5.6234E+02 1.0679E-06 6.5902E-07 4.0535E-08 3.0305E-08 - 6.3096E+02 7.3035E-07 4.5117E-07 2.7311E-08 2.0558E-08 - 7.0795E+02 5.0045E-07 3.0818E-07 1.8276E-08 1.3978E-08 - 7.9433E+02 3.4140E-07 2.0876E-07 1.2400E-08 9.3951E-09 - 8.9125E+02 2.3177E-07 1.4272E-07 8.1718E-09 6.1111E-09 - 1.0000E+03 1.6098E-07 9.6521E-08 5.3338E-09 4.1633E-09 - 1.1220E+03 1.0830E-07 6.4440E-08 3.6735E-09 2.7307E-09 - 1.2589E+03 7.3034E-08 4.3812E-08 2.4153E-09 1.8504E-09 - 1.4125E+03 4.8471E-08 2.8985E-08 1.6164E-09 1.1933E-09 - 1.5849E+03 3.2688E-08 1.9333E-08 1.1137E-09 7.8100E-10 - 1.7783E+03 2.2220E-08 1.3119E-08 7.3286E-10 5.4863E-10 - 1.9953E+03 1.5059E-08 8.7850E-09 4.8481E-10 3.4025E-10 - 2.2387E+03 1.0141E-08 5.8522E-09 3.2272E-10 2.3178E-10 - 2.5119E+03 6.7382E-09 3.9205E-09 2.0193E-10 1.6322E-10 - 2.8184E+03 4.5281E-09 2.6607E-09 1.3497E-10 1.0180E-10 - 3.1623E+03 3.0825E-09 1.7797E-09 9.3239E-11 7.1459E-11 - 3.5481E+03 1.9968E-09 1.1436E-09 6.1326E-11 4.2429E-11 - 3.9811E+03 1.3190E-09 7.6407E-10 3.7406E-11 2.7440E-11 - 4.4668E+03 8.6893E-10 5.0372E-10 2.4966E-11 2.0002E-11 - 5.0119E+03 5.7187E-10 3.2748E-10 1.7038E-11 1.3299E-11 - 5.6234E+03 3.7983E-10 2.1590E-10 1.0440E-11 8.7007E-12 - 6.3096E+03 2.5138E-10 1.4100E-10 6.7971E-12 5.4282E-12 - 7.0795E+03 1.6622E-10 9.1391E-11 4.6697E-12 3.2446E-12 - 7.9433E+03 1.0949E-10 6.1449E-11 3.0408E-12 2.0416E-12 - 8.9125E+03 7.0738E-11 3.8881E-11 1.7890E-12 1.4320E-12 - 1.0000E+04 4.6089E-11 2.3942E-11 1.2878E-12 9.7060E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 30 -- 60] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.4353E+03 9.5084E+03 4.6945E+03 4.3637E+03 - 1.1220E-01 8.5166E+03 8.5528E+03 4.2326E+03 3.8919E+03 - 1.2589E-01 7.6428E+03 7.6454E+03 3.7613E+03 3.4299E+03 - 1.4125E-01 6.7573E+03 6.7572E+03 3.2952E+03 2.9825E+03 - 1.5849E-01 5.8988E+03 5.8964E+03 2.8574E+03 2.5600E+03 - 1.7783E-01 5.0862E+03 5.0783E+03 2.4576E+03 2.1869E+03 - 1.9953E-01 4.3160E+03 4.2989E+03 2.0943E+03 1.8473E+03 - 2.2387E-01 3.6109E+03 3.5920E+03 1.7627E+03 1.5373E+03 - 2.5119E-01 2.9828E+03 2.9625E+03 1.4591E+03 1.2631E+03 - 2.8184E-01 2.4318E+03 2.4191E+03 1.1990E+03 1.0232E+03 - 3.1623E-01 1.9651E+03 1.9486E+03 9.7203E+02 8.1869E+02 - 3.5481E-01 1.5723E+03 1.5502E+03 7.7389E+02 6.5090E+02 - 3.9811E-01 1.2451E+03 1.2242E+03 6.1193E+02 5.1093E+02 - 4.4668E-01 9.7631E+02 9.5515E+02 4.7692E+02 3.9571E+02 - 5.0119E-01 7.5937E+02 7.3546E+02 3.6896E+02 3.0415E+02 - 5.6234E-01 5.8785E+02 5.6513E+02 2.8426E+02 2.3067E+02 - 6.3096E-01 4.4899E+02 4.3323E+02 2.1629E+02 1.7318E+02 - 7.0795E-01 3.4027E+02 3.2620E+02 1.6249E+02 1.3029E+02 - 7.9433E-01 2.5791E+02 2.4397E+02 1.2006E+02 9.7707E+01 - 8.9125E-01 1.9522E+02 1.8306E+02 8.8677E+01 7.1407E+01 - 1.0000E+00 1.4609E+02 1.3638E+02 6.5630E+01 5.2111E+01 - 1.1220E+00 1.1001E+02 1.0099E+02 4.7865E+01 3.8066E+01 - 1.2589E+00 8.2334E+01 7.4323E+01 3.4853E+01 2.7481E+01 - 1.4125E+00 6.1012E+01 5.4721E+01 2.5072E+01 1.9691E+01 - 1.5849E+00 4.5012E+01 4.0100E+01 1.7956E+01 1.4041E+01 - 1.7783E+00 3.3146E+01 2.9431E+01 1.2846E+01 9.9859E+00 - 1.9953E+00 2.4501E+01 2.1469E+01 9.0934E+00 7.0792E+00 - 2.2387E+00 1.8008E+01 1.5530E+01 6.4063E+00 4.9517E+00 - 2.5119E+00 1.3195E+01 1.1173E+01 4.4920E+00 3.4386E+00 - 2.8184E+00 9.5585E+00 7.9717E+00 3.1591E+00 2.4229E+00 - 3.1623E+00 6.9433E+00 5.7592E+00 2.2006E+00 1.6491E+00 - 3.5481E+00 5.0173E+00 4.1114E+00 1.5186E+00 1.1403E+00 - 3.9811E+00 3.6361E+00 2.9420E+00 1.0355E+00 7.8643E-01 - 4.4668E+00 2.6164E+00 2.1036E+00 7.0125E-01 5.2837E-01 - 5.0119E+00 1.8854E+00 1.4982E+00 4.7090E-01 3.6051E-01 - 5.6234E+00 1.3639E+00 1.0629E+00 3.2096E-01 2.4789E-01 - 6.3096E+00 9.7077E-01 7.5865E-01 2.1815E-01 1.6692E-01 - 7.0795E+00 6.8957E-01 5.4245E-01 1.4716E-01 1.1154E-01 - 7.9433E+00 4.9737E-01 3.8116E-01 9.9178E-02 7.4857E-02 - 8.9125E+00 3.5997E-01 2.7048E-01 6.6722E-02 4.9031E-02 - 1.0000E+01 2.5723E-01 1.9434E-01 4.4060E-02 3.3227E-02 - 1.1220E+01 1.8248E-01 1.3719E-01 2.9336E-02 2.2231E-02 - 1.2589E+01 1.2882E-01 9.6641E-02 1.9672E-02 1.4881E-02 - 1.4125E+01 9.1812E-02 6.8399E-02 1.3225E-02 9.8268E-03 - 1.5849E+01 6.5654E-02 4.8937E-02 8.9207E-03 6.6398E-03 - 1.7783E+01 4.6685E-02 3.4484E-02 5.8968E-03 4.5453E-03 - 1.9953E+01 3.3362E-02 2.4199E-02 3.8251E-03 3.0378E-03 - 2.2387E+01 2.3738E-02 1.7161E-02 2.5149E-03 1.9990E-03 - 2.5119E+01 1.6608E-02 1.2239E-02 1.7118E-03 1.3968E-03 - 2.8184E+01 1.1655E-02 8.5926E-03 1.1553E-03 9.2922E-04 - 3.1623E+01 8.3869E-03 6.0421E-03 7.5961E-04 6.0011E-04 - 3.5481E+01 5.9246E-03 4.2487E-03 5.1230E-04 4.0437E-04 - 3.9811E+01 4.1893E-03 2.9809E-03 3.3837E-04 2.7488E-04 - 4.4668E+01 2.9585E-03 2.0865E-03 2.2227E-04 1.8495E-04 - 5.0119E+01 2.0736E-03 1.4640E-03 1.4923E-04 1.2362E-04 - 5.6234E+01 1.4570E-03 1.0287E-03 1.0183E-04 8.3176E-05 - 6.3096E+01 1.0264E-03 7.1404E-04 6.9704E-05 5.6103E-05 - 7.0795E+01 7.2077E-04 4.9976E-04 4.6314E-05 3.7805E-05 - 7.9433E+01 5.0405E-04 3.5178E-04 3.0800E-05 2.5465E-05 - 8.9125E+01 3.5528E-04 2.4393E-04 2.1050E-05 1.7302E-05 - 1.0000E+02 2.4923E-04 1.7013E-04 1.4467E-05 1.1667E-05 - 1.1220E+02 1.7413E-04 1.1821E-04 9.7394E-06 7.8508E-06 - 1.2589E+02 1.2173E-04 8.2702E-05 6.6013E-06 5.3240E-06 - 1.4125E+02 8.5378E-05 5.7437E-05 4.4991E-06 3.6684E-06 - 1.5849E+02 5.9648E-05 3.9710E-05 3.0311E-06 2.5236E-06 - 1.7783E+02 4.1431E-05 2.7595E-05 2.0085E-06 1.6879E-06 - 1.9953E+02 2.8852E-05 1.9061E-05 1.3780E-06 1.0989E-06 - 2.2387E+02 2.0177E-05 1.3093E-05 9.1869E-07 7.1757E-07 - 2.5119E+02 1.4124E-05 9.0041E-06 6.1317E-07 4.7745E-07 - 2.8184E+02 9.7688E-06 6.2198E-06 4.2076E-07 3.3089E-07 - 3.1623E+02 6.7684E-06 4.3382E-06 2.9692E-07 2.3394E-07 - 3.5481E+02 4.6851E-06 2.9664E-06 1.9987E-07 1.5943E-07 - 3.9811E+02 3.2295E-06 2.0414E-06 1.2899E-07 1.0761E-07 - 4.4668E+02 2.2388E-06 1.4072E-06 8.8004E-08 7.0069E-08 - 5.0119E+02 1.5467E-06 9.6453E-07 6.0926E-08 4.6983E-08 - 5.6234E+02 1.0720E-06 6.6713E-07 4.0348E-08 3.2042E-08 - 6.3096E+02 7.3128E-07 4.5130E-07 2.7103E-08 2.1244E-08 - 7.0795E+02 4.9794E-07 3.0771E-07 1.8368E-08 1.4287E-08 - 7.9433E+02 3.3904E-07 2.0900E-07 1.2275E-08 9.3326E-09 - 8.9125E+02 2.3314E-07 1.4088E-07 8.2957E-09 6.1466E-09 - 1.0000E+03 1.6048E-07 9.6052E-08 5.4518E-09 4.2704E-09 - 1.1220E+03 1.0756E-07 6.4988E-08 3.5649E-09 2.7161E-09 - 1.2589E+03 7.2375E-08 4.3442E-08 2.3388E-09 1.7453E-09 - 1.4125E+03 4.9264E-08 2.8935E-08 1.6183E-09 1.2332E-09 - 1.5849E+03 3.3431E-08 1.9446E-08 1.1470E-09 8.7685E-10 - 1.7783E+03 2.2531E-08 1.2956E-08 7.0821E-10 5.5506E-10 - 1.9953E+03 1.5067E-08 8.7038E-09 4.4940E-10 3.5466E-10 - 2.2387E+03 1.0097E-08 5.7992E-09 3.0792E-10 2.3488E-10 - 2.5119E+03 6.7113E-09 3.8511E-09 2.0457E-10 1.5777E-10 - 2.8184E+03 4.4552E-09 2.5726E-09 1.3295E-10 1.0393E-10 - 3.1623E+03 3.0636E-09 1.7698E-09 8.9568E-11 6.5592E-11 - 3.5481E+03 1.9829E-09 1.1284E-09 5.7151E-11 4.7756E-11 - 3.9811E+03 1.3042E-09 7.4249E-10 3.8146E-11 2.9052E-11 - 4.4668E+03 8.5211E-10 4.8562E-10 2.6934E-11 1.7107E-11 - 5.0119E+03 5.6470E-10 3.1559E-10 1.6784E-11 1.1956E-11 - 5.6234E+03 3.7922E-10 2.0715E-10 9.8192E-12 8.2509E-12 - 6.3096E+03 2.5015E-10 1.3975E-10 6.6800E-12 5.0789E-12 - 7.0795E+03 1.6399E-10 9.3489E-11 4.7507E-12 3.1606E-12 - 7.9433E+03 1.0763E-10 6.0387E-11 3.2846E-12 2.0657E-12 - 8.9125E+03 7.0149E-11 3.9150E-11 2.1292E-12 1.3810E-12 - 1.0000E+04 4.6516E-11 2.5350E-11 1.5132E-12 9.8576E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 60 -- 90] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 9.7849E+03 9.9059E+03 4.8743E+03 4.5052E+03 - 1.1220E-01 8.8217E+03 8.8873E+03 4.3736E+03 4.0174E+03 - 1.2589E-01 7.8630E+03 7.9094E+03 3.8821E+03 3.5276E+03 - 1.4125E-01 6.9644E+03 6.9916E+03 3.4306E+03 3.0799E+03 - 1.5849E-01 6.0877E+03 6.0856E+03 2.9807E+03 2.6550E+03 - 1.7783E-01 5.2273E+03 5.2141E+03 2.5521E+03 2.2492E+03 - 1.9953E-01 4.4398E+03 4.4261E+03 2.1672E+03 1.8838E+03 - 2.2387E-01 3.7212E+03 3.7063E+03 1.8201E+03 1.5664E+03 - 2.5119E-01 3.0697E+03 3.0509E+03 1.5093E+03 1.2886E+03 - 2.8184E-01 2.5084E+03 2.4842E+03 1.2329E+03 1.0469E+03 - 3.1623E-01 2.0187E+03 1.9950E+03 9.9488E+02 8.4290E+02 - 3.5481E-01 1.6083E+03 1.5808E+03 7.9542E+02 6.6852E+02 - 3.9811E-01 1.2707E+03 1.2455E+03 6.2890E+02 5.2060E+02 - 4.4668E-01 9.9203E+02 9.7059E+02 4.9008E+02 4.0020E+02 - 5.0119E-01 7.7361E+02 7.4777E+02 3.7689E+02 3.0514E+02 - 5.6234E-01 5.9796E+02 5.7267E+02 2.8850E+02 2.3234E+02 - 6.3096E-01 4.5578E+02 4.3602E+02 2.1874E+02 1.7663E+02 - 7.0795E-01 3.4433E+02 3.3143E+02 1.6384E+02 1.3239E+02 - 7.9433E-01 2.5828E+02 2.4965E+02 1.2228E+02 9.7599E+01 - 8.9125E-01 1.9548E+02 1.8581E+02 9.1201E+01 7.1320E+01 - 1.0000E+00 1.4729E+02 1.3668E+02 6.6100E+01 5.2129E+01 - 1.1220E+00 1.1042E+02 1.0144E+02 4.8250E+01 3.8219E+01 - 1.2589E+00 8.2446E+01 7.4940E+01 3.5299E+01 2.7737E+01 - 1.4125E+00 6.1455E+01 5.4669E+01 2.5315E+01 1.9877E+01 - 1.5849E+00 4.5789E+01 4.0162E+01 1.8006E+01 1.4163E+01 - 1.7783E+00 3.3829E+01 2.9492E+01 1.2851E+01 9.9597E+00 - 1.9953E+00 2.4868E+01 2.1410E+01 9.1727E+00 7.0343E+00 - 2.2387E+00 1.8098E+01 1.5528E+01 6.4867E+00 4.9798E+00 - 2.5119E+00 1.3210E+01 1.1112E+01 4.5007E+00 3.4687E+00 - 2.8184E+00 9.6537E+00 8.0420E+00 3.1421E+00 2.3646E+00 - 3.1623E+00 6.9607E+00 5.7751E+00 2.1816E+00 1.6530E+00 - 3.5481E+00 5.0526E+00 4.1311E+00 1.4922E+00 1.1301E+00 - 3.9811E+00 3.6627E+00 2.9515E+00 1.0207E+00 7.8182E-01 - 4.4668E+00 2.6444E+00 2.1167E+00 7.0161E-01 5.4121E-01 - 5.0119E+00 1.8978E+00 1.5134E+00 4.7539E-01 3.6543E-01 - 5.6234E+00 1.3668E+00 1.0738E+00 3.2178E-01 2.4661E-01 - 6.3096E+00 9.8491E-01 7.6368E-01 2.1596E-01 1.6376E-01 - 7.0795E+00 6.9937E-01 5.4331E-01 1.4597E-01 1.1113E-01 - 7.9433E+00 4.9896E-01 3.8588E-01 9.8883E-02 7.4326E-02 - 8.9125E+00 3.5887E-01 2.7421E-01 6.5687E-02 4.9832E-02 - 1.0000E+01 2.5649E-01 1.9578E-01 4.4077E-02 3.4304E-02 - 1.1220E+01 1.8360E-01 1.3866E-01 2.9556E-02 2.2848E-02 - 1.2589E+01 1.3129E-01 9.8339E-02 1.9630E-02 1.4937E-02 - 1.4125E+01 9.3229E-02 6.9317E-02 1.3010E-02 9.8772E-03 - 1.5849E+01 6.5943E-02 4.9391E-02 8.6885E-03 6.6635E-03 - 1.7783E+01 4.6974E-02 3.5149E-02 5.7918E-03 4.4896E-03 - 1.9953E+01 3.3469E-02 2.4614E-02 3.9615E-03 2.9475E-03 - 2.2387E+01 2.3621E-02 1.7217E-02 2.6444E-03 1.9538E-03 - 2.5119E+01 1.6776E-02 1.2210E-02 1.7281E-03 1.3208E-03 - 2.8184E+01 1.2066E-02 8.5984E-03 1.1389E-03 8.9895E-04 - 3.1623E+01 8.4133E-03 6.0731E-03 7.6121E-04 6.0277E-04 - 3.5481E+01 5.9404E-03 4.2654E-03 5.1253E-04 4.0105E-04 - 3.9811E+01 4.1928E-03 2.9901E-03 3.4134E-04 2.6898E-04 - 4.4668E+01 2.9647E-03 2.0992E-03 2.3028E-04 1.8255E-04 - 5.0119E+01 2.0898E-03 1.4709E-03 1.5178E-04 1.2321E-04 - 5.6234E+01 1.4600E-03 1.0327E-03 1.0343E-04 8.1956E-05 - 6.3096E+01 1.0247E-03 7.2628E-04 6.9476E-05 5.5786E-05 - 7.0795E+01 7.2430E-04 5.0793E-04 4.6043E-05 3.7105E-05 - 7.9433E+01 5.0817E-04 3.5181E-04 3.1345E-05 2.5376E-05 - 8.9125E+01 3.5589E-04 2.4474E-04 2.1115E-05 1.8028E-05 - 1.0000E+02 2.4830E-04 1.7010E-04 1.4146E-05 1.1806E-05 - 1.1220E+02 1.7389E-04 1.1848E-04 9.4508E-06 7.9807E-06 - 1.2589E+02 1.2125E-04 8.2556E-05 6.4129E-06 5.3524E-06 - 1.4125E+02 8.4948E-05 5.7253E-05 4.4079E-06 3.6387E-06 - 1.5849E+02 5.9368E-05 3.9672E-05 3.0037E-06 2.4146E-06 - 1.7783E+02 4.1410E-05 2.7475E-05 2.0199E-06 1.5987E-06 - 1.9953E+02 2.8977E-05 1.8938E-05 1.3454E-06 1.0844E-06 - 2.2387E+02 2.0175E-05 1.3101E-05 9.1237E-07 7.4943E-07 - 2.5119E+02 1.3988E-05 9.0499E-06 6.3365E-07 5.0395E-07 - 2.8184E+02 9.6224E-06 6.2813E-06 4.3225E-07 3.3942E-07 - 3.1623E+02 6.7307E-06 4.3438E-06 2.9001E-07 2.2914E-07 - 3.5481E+02 4.6470E-06 2.9660E-06 1.9676E-07 1.5776E-07 - 3.9811E+02 3.2210E-06 2.0297E-06 1.3343E-07 1.0676E-07 - 4.4668E+02 2.2337E-06 1.3921E-06 9.2306E-08 7.0128E-08 - 5.0119E+02 1.5414E-06 9.6121E-07 6.2584E-08 4.6194E-08 - 5.6234E+02 1.0686E-06 6.6031E-07 4.2316E-08 3.1340E-08 - 6.3096E+02 7.2780E-07 4.4791E-07 2.8228E-08 2.1162E-08 - 7.0795E+02 4.9571E-07 3.0635E-07 1.8253E-08 1.3951E-08 - 7.9433E+02 3.4118E-07 2.0855E-07 1.2070E-08 9.3347E-09 - 8.9125E+02 2.3293E-07 1.3999E-07 8.3261E-09 6.1169E-09 - 1.0000E+03 1.5912E-07 9.5770E-08 5.4776E-09 3.9876E-09 - 1.1220E+03 1.0631E-07 6.4364E-08 3.5110E-09 2.7240E-09 - 1.2589E+03 7.2314E-08 4.3605E-08 2.3236E-09 1.9380E-09 - 1.4125E+03 4.8969E-08 2.9339E-08 1.6115E-09 1.2557E-09 - 1.5849E+03 3.2934E-08 1.9659E-08 1.0905E-09 7.8434E-10 - 1.7783E+03 2.2340E-08 1.3379E-08 6.7924E-10 5.2554E-10 - 1.9953E+03 1.5044E-08 8.7540E-09 4.5785E-10 3.5663E-10 - 2.2387E+03 1.0134E-08 5.8257E-09 3.0342E-10 2.3807E-10 - 2.5119E+03 6.7077E-09 3.8765E-09 1.9827E-10 1.3924E-10 - 2.8184E+03 4.4591E-09 2.5773E-09 1.3122E-10 8.7676E-11 - 3.1623E+03 3.0660E-09 1.7498E-09 8.9636E-11 6.6994E-11 - 3.5481E+03 1.9726E-09 1.1252E-09 6.1159E-11 4.4384E-11 - 3.9811E+03 1.3057E-09 7.4416E-10 3.4896E-11 2.7581E-11 - 4.4668E+03 8.6343E-10 4.9204E-10 2.2677E-11 1.8419E-11 - 5.0119E+03 5.7216E-10 3.2545E-10 1.6125E-11 1.1302E-11 - 5.6234E+03 3.8044E-10 2.1062E-10 1.1592E-11 6.9920E-12 - 6.3096E+03 2.4940E-10 1.3830E-10 7.0713E-12 4.9751E-12 - 7.0795E+03 1.6280E-10 9.1727E-11 4.6068E-12 3.6304E-12 - 7.9433E+03 1.0764E-10 5.9068E-11 3.1554E-12 2.3523E-12 - 8.9125E+03 7.0848E-11 3.8686E-11 2.2956E-12 1.5970E-12 - 1.0000E+04 4.6430E-11 2.5390E-11 1.4510E-12 1.2212E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 90 -- 120] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0043E+04 1.0102E+04 5.0043E+03 4.5999E+03 - 1.1220E-01 9.0209E+03 9.1020E+03 4.4879E+03 4.0923E+03 - 1.2589E-01 8.0398E+03 8.1154E+03 3.9813E+03 3.6063E+03 - 1.4125E-01 7.0976E+03 7.1455E+03 3.5069E+03 3.1306E+03 - 1.5849E-01 6.2046E+03 6.2115E+03 3.0532E+03 2.6866E+03 - 1.7783E-01 5.3529E+03 5.3374E+03 2.6170E+03 2.2871E+03 - 1.9953E-01 4.5239E+03 4.5219E+03 2.2142E+03 1.9184E+03 - 2.2387E-01 3.7752E+03 3.7736E+03 1.8613E+03 1.5901E+03 - 2.5119E-01 3.1245E+03 3.1051E+03 1.5418E+03 1.3076E+03 - 2.8184E-01 2.5428E+03 2.5136E+03 1.2565E+03 1.0568E+03 - 3.1623E-01 2.0517E+03 2.0186E+03 1.0117E+03 8.4597E+02 - 3.5481E-01 1.6314E+03 1.6056E+03 8.0664E+02 6.7363E+02 - 3.9811E-01 1.2843E+03 1.2585E+03 6.3459E+02 5.2472E+02 - 4.4668E-01 1.0073E+03 9.8562E+02 4.9491E+02 4.0503E+02 - 5.0119E-01 7.7951E+02 7.5942E+02 3.8545E+02 3.1137E+02 - 5.6234E-01 5.9897E+02 5.7618E+02 2.9282E+02 2.3631E+02 - 6.3096E-01 4.5634E+02 4.3839E+02 2.1992E+02 1.7767E+02 - 7.0795E-01 3.4714E+02 3.3128E+02 1.6599E+02 1.3192E+02 - 7.9433E-01 2.6330E+02 2.4859E+02 1.2401E+02 9.7380E+01 - 8.9125E-01 1.9731E+02 1.8620E+02 9.1191E+01 7.1679E+01 - 1.0000E+00 1.4831E+02 1.3775E+02 6.6522E+01 5.2675E+01 - 1.1220E+00 1.1072E+02 1.0176E+02 4.8498E+01 3.8509E+01 - 1.2589E+00 8.2374E+01 7.5153E+01 3.5262E+01 2.7592E+01 - 1.4125E+00 6.1596E+01 5.5336E+01 2.5383E+01 1.9759E+01 - 1.5849E+00 4.5744E+01 4.0372E+01 1.8028E+01 1.4114E+01 - 1.7783E+00 3.3547E+01 2.9346E+01 1.2790E+01 9.9524E+00 - 1.9953E+00 2.4612E+01 2.1411E+01 9.1158E+00 7.0858E+00 - 2.2387E+00 1.7965E+01 1.5572E+01 6.4762E+00 4.9769E+00 - 2.5119E+00 1.3087E+01 1.1152E+01 4.5373E+00 3.5011E+00 - 2.8184E+00 9.5359E+00 7.9799E+00 3.1393E+00 2.4595E+00 - 3.1623E+00 6.9561E+00 5.7439E+00 2.1897E+00 1.6642E+00 - 3.5481E+00 5.0076E+00 4.1070E+00 1.5128E+00 1.1440E+00 - 3.9811E+00 3.6428E+00 2.9529E+00 1.0332E+00 7.7409E-01 - 4.4668E+00 2.6458E+00 2.1145E+00 6.9930E-01 5.2827E-01 - 5.0119E+00 1.8933E+00 1.5002E+00 4.7923E-01 3.6568E-01 - 5.6234E+00 1.3533E+00 1.0638E+00 3.2550E-01 2.4845E-01 - 6.3096E+00 9.7177E-01 7.6454E-01 2.2038E-01 1.6346E-01 - 7.0795E+00 6.9598E-01 5.4985E-01 1.4816E-01 1.1011E-01 - 7.9433E+00 4.9741E-01 3.8586E-01 9.9147E-02 7.5406E-02 - 8.9125E+00 3.5850E-01 2.7343E-01 6.5654E-02 4.9254E-02 - 1.0000E+01 2.5694E-01 1.9440E-01 4.4621E-02 3.3537E-02 - 1.1220E+01 1.8266E-01 1.3705E-01 2.9445E-02 2.2455E-02 - 1.2589E+01 1.2947E-01 9.6863E-02 1.9229E-02 1.4814E-02 - 1.4125E+01 9.2140E-02 6.8763E-02 1.2869E-02 9.9974E-03 - 1.5849E+01 6.5585E-02 4.8695E-02 8.7156E-03 6.7370E-03 - 1.7783E+01 4.6830E-02 3.4574E-02 5.6522E-03 4.4091E-03 - 1.9953E+01 3.3140E-02 2.4307E-02 3.7566E-03 2.9906E-03 - 2.2387E+01 2.3319E-02 1.7027E-02 2.5712E-03 2.0045E-03 - 2.5119E+01 1.6572E-02 1.2004E-02 1.6938E-03 1.3659E-03 - 2.8184E+01 1.1825E-02 8.4252E-03 1.1182E-03 9.0247E-04 - 3.1623E+01 8.3538E-03 5.9992E-03 7.6441E-04 5.9511E-04 - 3.5481E+01 5.9078E-03 4.2073E-03 5.0717E-04 4.0252E-04 - 3.9811E+01 4.1778E-03 2.9601E-03 3.4157E-04 2.7298E-04 - 4.4668E+01 2.9416E-03 2.0891E-03 2.2868E-04 1.8375E-04 - 5.0119E+01 2.0651E-03 1.4695E-03 1.4998E-04 1.2354E-04 - 5.6234E+01 1.4543E-03 1.0270E-03 1.0039E-04 8.3481E-05 - 6.3096E+01 1.0210E-03 7.1722E-04 6.7058E-05 5.6803E-05 - 7.0795E+01 7.1505E-04 5.0235E-04 4.5361E-05 3.7972E-05 - 7.9433E+01 5.0401E-04 3.4767E-04 3.1482E-05 2.4933E-05 - 8.9125E+01 3.5794E-04 2.4242E-04 2.1319E-05 1.6652E-05 - 1.0000E+02 2.4910E-04 1.6950E-04 1.4329E-05 1.1426E-05 - 1.1220E+02 1.7374E-04 1.1754E-04 9.7649E-06 7.7521E-06 - 1.2589E+02 1.2144E-04 8.2108E-05 6.5708E-06 5.3935E-06 - 1.4125E+02 8.5106E-05 5.6909E-05 4.4132E-06 3.6529E-06 - 1.5849E+02 5.9200E-05 3.9551E-05 2.9546E-06 2.4458E-06 - 1.7783E+02 4.1176E-05 2.7282E-05 2.0177E-06 1.6391E-06 - 1.9953E+02 2.8764E-05 1.8931E-05 1.4139E-06 1.0877E-06 - 2.2387E+02 2.0055E-05 1.3077E-05 9.4502E-07 7.4280E-07 - 2.5119E+02 1.4047E-05 8.9110E-06 6.2158E-07 5.0172E-07 - 2.8184E+02 9.7124E-06 6.1683E-06 4.0985E-07 3.4169E-07 - 3.1623E+02 6.7343E-06 4.3100E-06 2.8589E-07 2.3567E-07 - 3.5481E+02 4.6591E-06 2.9686E-06 1.9376E-07 1.5945E-07 - 3.9811E+02 3.2077E-06 2.0410E-06 1.2843E-07 1.0862E-07 - 4.4668E+02 2.2186E-06 1.3928E-06 8.7137E-08 7.3884E-08 - 5.0119E+02 1.5387E-06 9.5254E-07 5.9273E-08 4.9197E-08 - 5.6234E+02 1.0603E-06 6.6264E-07 4.0567E-08 3.1814E-08 - 6.3096E+02 7.2216E-07 4.4891E-07 2.7397E-08 2.2003E-08 - 7.0795E+02 4.9446E-07 3.0526E-07 1.8236E-08 1.4900E-08 - 7.9433E+02 3.3912E-07 2.0790E-07 1.1934E-08 9.2497E-09 - 8.9125E+02 2.3273E-07 1.4007E-07 7.8624E-09 6.1400E-09 - 1.0000E+03 1.5942E-07 9.5612E-08 5.2945E-09 4.4163E-09 - 1.1220E+03 1.0656E-07 6.3677E-08 3.6826E-09 2.8691E-09 - 1.2589E+03 7.2138E-08 4.2939E-08 2.4153E-09 1.9070E-09 - 1.4125E+03 4.8766E-08 2.9232E-08 1.5797E-09 1.2208E-09 - 1.5849E+03 3.2572E-08 1.9680E-08 1.0585E-09 7.0643E-10 - 1.7783E+03 2.1874E-08 1.3131E-08 7.0106E-10 4.9239E-10 - 1.9953E+03 1.4941E-08 8.6470E-09 4.7320E-10 3.7140E-10 - 2.2387E+03 1.0039E-08 5.8683E-09 3.0454E-10 2.3973E-10 - 2.5119E+03 6.6642E-09 3.9006E-09 1.9804E-10 1.6285E-10 - 2.8184E+03 4.4125E-09 2.5409E-09 1.4072E-10 1.0044E-10 - 3.1623E+03 3.0521E-09 1.7404E-09 8.5474E-11 6.4218E-11 - 3.5481E+03 1.9873E-09 1.1222E-09 5.9495E-11 4.2369E-11 - 3.9811E+03 1.3037E-09 7.4068E-10 3.9623E-11 2.7028E-11 - 4.4668E+03 8.5997E-10 4.8273E-10 2.5214E-11 1.8701E-11 - 5.0119E+03 5.7786E-10 3.1841E-10 1.5714E-11 1.2754E-11 - 5.6234E+03 3.8225E-10 2.0965E-10 1.0734E-11 7.3643E-12 - 6.3096E+03 2.4941E-10 1.4088E-10 7.1897E-12 4.6661E-12 - 7.0795E+03 1.6571E-10 9.2417E-11 4.6249E-12 3.3476E-12 - 7.9433E+03 1.0817E-10 6.0025E-11 2.8813E-12 2.2258E-12 - 8.9125E+03 6.9826E-11 3.9022E-11 1.8826E-12 1.3863E-12 - 1.0000E+04 4.6833E-11 2.5787E-11 1.2966E-12 8.7272E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 120 -- 150] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0141E+04 1.0249E+04 5.0438E+03 4.6569E+03 - 1.1220E-01 9.1486E+03 9.2194E+03 4.5453E+03 4.1298E+03 - 1.2589E-01 8.1721E+03 8.2474E+03 4.0352E+03 3.6356E+03 - 1.4125E-01 7.2239E+03 7.2836E+03 3.5406E+03 3.1668E+03 - 1.5849E-01 6.3070E+03 6.3118E+03 3.0871E+03 2.7304E+03 - 1.7783E-01 5.4075E+03 5.4014E+03 2.6491E+03 2.3183E+03 - 1.9953E-01 4.5846E+03 4.5644E+03 2.2410E+03 1.9407E+03 - 2.2387E-01 3.8476E+03 3.8056E+03 1.8851E+03 1.6169E+03 - 2.5119E-01 3.1609E+03 3.1404E+03 1.5581E+03 1.3299E+03 - 2.8184E-01 2.5679E+03 2.5519E+03 1.2700E+03 1.0746E+03 - 3.1623E-01 2.0733E+03 2.0454E+03 1.0300E+03 8.5895E+02 - 3.5481E-01 1.6502E+03 1.6224E+03 8.2266E+02 6.8099E+02 - 3.9811E-01 1.3015E+03 1.2787E+03 6.4889E+02 5.3173E+02 - 4.4668E-01 1.0147E+03 9.9557E+02 5.0460E+02 4.1028E+02 - 5.0119E-01 7.8420E+02 7.6619E+02 3.8621E+02 3.1523E+02 - 5.6234E-01 6.0479E+02 5.8470E+02 2.9457E+02 2.4030E+02 - 6.3096E-01 4.6152E+02 4.4426E+02 2.2433E+02 1.7997E+02 - 7.0795E-01 3.5080E+02 3.3468E+02 1.6763E+02 1.3289E+02 - 7.9433E-01 2.6488E+02 2.5061E+02 1.2322E+02 9.8127E+01 - 8.9125E-01 1.9859E+02 1.8638E+02 9.1361E+01 7.2163E+01 - 1.0000E+00 1.4871E+02 1.3838E+02 6.7249E+01 5.2380E+01 - 1.1220E+00 1.1112E+02 1.0239E+02 4.8657E+01 3.8230E+01 - 1.2589E+00 8.2501E+01 7.5305E+01 3.5239E+01 2.7712E+01 - 1.4125E+00 6.1299E+01 5.5147E+01 2.5387E+01 1.9651E+01 - 1.5849E+00 4.5563E+01 4.0305E+01 1.8315E+01 1.4082E+01 - 1.7783E+00 3.3771E+01 2.9378E+01 1.2999E+01 1.0075E+01 - 1.9953E+00 2.4853E+01 2.1398E+01 9.0914E+00 6.9983E+00 - 2.2387E+00 1.8108E+01 1.5452E+01 6.4084E+00 4.9052E+00 - 2.5119E+00 1.3210E+01 1.1110E+01 4.4326E+00 3.4887E+00 - 2.8184E+00 9.6698E+00 8.0026E+00 3.0900E+00 2.4496E+00 - 3.1623E+00 6.9934E+00 5.7733E+00 2.1654E+00 1.6707E+00 - 3.5481E+00 5.0610E+00 4.1268E+00 1.4925E+00 1.1494E+00 - 3.9811E+00 3.6521E+00 2.9498E+00 1.0273E+00 7.8179E-01 - 4.4668E+00 2.6380E+00 2.1151E+00 7.0327E-01 5.2614E-01 - 5.0119E+00 1.8921E+00 1.5031E+00 4.7814E-01 3.6029E-01 - 5.6234E+00 1.3563E+00 1.0699E+00 3.2370E-01 2.4857E-01 - 6.3096E+00 9.7796E-01 7.6941E-01 2.1921E-01 1.6578E-01 - 7.0795E+00 6.9886E-01 5.4648E-01 1.4801E-01 1.1126E-01 - 7.9433E+00 4.9861E-01 3.8751E-01 9.9968E-02 7.4899E-02 - 8.9125E+00 3.6195E-01 2.7355E-01 6.4735E-02 5.0592E-02 - 1.0000E+01 2.5790E-01 1.9361E-01 4.3707E-02 3.3713E-02 - 1.1220E+01 1.8295E-01 1.3692E-01 2.9433E-02 2.2321E-02 - 1.2589E+01 1.2980E-01 9.7046E-02 1.9528E-02 1.4869E-02 - 1.4125E+01 9.2164E-02 6.9099E-02 1.3148E-02 1.0061E-02 - 1.5849E+01 6.5613E-02 4.8849E-02 8.7880E-03 6.7237E-03 - 1.7783E+01 4.6797E-02 3.4746E-02 5.7498E-03 4.4546E-03 - 1.9953E+01 3.3070E-02 2.4556E-02 3.8157E-03 3.0171E-03 - 2.2387E+01 2.3520E-02 1.7276E-02 2.5724E-03 1.9567E-03 - 2.5119E+01 1.6645E-02 1.2050E-02 1.7208E-03 1.3162E-03 - 2.8184E+01 1.1737E-02 8.4791E-03 1.1310E-03 8.7700E-04 - 3.1623E+01 8.3651E-03 6.0318E-03 7.5532E-04 5.9543E-04 - 3.5481E+01 5.8970E-03 4.2273E-03 5.0484E-04 3.9693E-04 - 3.9811E+01 4.1739E-03 2.9765E-03 3.3764E-04 2.6911E-04 - 4.4668E+01 2.9536E-03 2.0946E-03 2.2515E-04 1.8511E-04 - 5.0119E+01 2.0760E-03 1.4679E-03 1.5017E-04 1.2228E-04 - 5.6234E+01 1.4569E-03 1.0244E-03 1.0024E-04 8.1708E-05 - 6.3096E+01 1.0250E-03 7.1491E-04 6.7621E-05 5.5392E-05 - 7.0795E+01 7.2169E-04 4.9902E-04 4.6395E-05 3.6612E-05 - 7.9433E+01 5.0387E-04 3.4892E-04 3.1696E-05 2.4270E-05 - 8.9125E+01 3.5244E-04 2.4300E-04 2.1052E-05 1.7038E-05 - 1.0000E+02 2.4884E-04 1.6946E-04 1.4020E-05 1.1710E-05 - 1.1220E+02 1.7339E-04 1.1755E-04 9.4855E-06 7.8408E-06 - 1.2589E+02 1.2151E-04 8.1795E-05 6.3929E-06 5.3030E-06 - 1.4125E+02 8.4617E-05 5.6763E-05 4.3955E-06 3.5842E-06 - 1.5849E+02 5.8994E-05 3.9337E-05 3.0650E-06 2.4448E-06 - 1.7783E+02 4.1264E-05 2.7278E-05 2.0276E-06 1.6482E-06 - 1.9953E+02 2.8713E-05 1.8858E-05 1.3277E-06 1.0870E-06 - 2.2387E+02 2.0091E-05 1.3093E-05 9.3564E-07 7.3183E-07 - 2.5119E+02 1.3957E-05 9.0321E-06 6.3293E-07 5.0247E-07 - 2.8184E+02 9.6195E-06 6.2052E-06 4.1037E-07 3.3922E-07 - 3.1623E+02 6.7204E-06 4.2999E-06 2.8664E-07 2.3603E-07 - 3.5481E+02 4.6462E-06 2.9610E-06 1.9241E-07 1.5321E-07 - 3.9811E+02 3.2200E-06 2.0367E-06 1.3213E-07 1.0311E-07 - 4.4668E+02 2.2174E-06 1.3929E-06 8.8752E-08 6.9918E-08 - 5.0119E+02 1.5268E-06 9.5460E-07 6.2095E-08 4.7197E-08 - 5.6234E+02 1.0663E-06 6.5774E-07 4.0467E-08 3.1526E-08 - 6.3096E+02 7.2958E-07 4.4703E-07 2.6695E-08 2.2000E-08 - 7.0795E+02 4.9719E-07 3.0454E-07 1.8036E-08 1.4212E-08 - 7.9433E+02 3.4024E-07 2.0697E-07 1.1939E-08 9.2143E-09 - 8.9125E+02 2.3423E-07 1.3964E-07 8.0621E-09 6.3184E-09 - 1.0000E+03 1.6035E-07 9.5210E-08 5.5527E-09 4.0765E-09 - 1.1220E+03 1.0702E-07 6.4221E-08 3.5932E-09 2.6271E-09 - 1.2589E+03 7.2538E-08 4.3671E-08 2.3807E-09 1.7966E-09 - 1.4125E+03 4.8920E-08 2.9174E-08 1.5134E-09 1.2364E-09 - 1.5849E+03 3.2734E-08 1.9425E-08 1.0244E-09 7.5411E-10 - 1.7783E+03 2.1934E-08 1.2953E-08 7.0252E-10 4.9161E-10 - 1.9953E+03 1.4909E-08 8.7281E-09 4.6027E-10 3.4210E-10 - 2.2387E+03 9.9637E-09 5.7981E-09 3.0281E-10 2.2221E-10 - 2.5119E+03 6.6712E-09 3.8472E-09 2.0078E-10 1.5358E-10 - 2.8184E+03 4.4835E-09 2.6068E-09 1.3706E-10 9.2461E-11 - 3.1623E+03 3.0325E-09 1.7649E-09 8.6911E-11 6.6901E-11 - 3.5481E+03 1.9550E-09 1.1297E-09 5.6012E-11 4.4798E-11 - 3.9811E+03 1.2983E-09 7.4789E-10 3.8752E-11 2.7605E-11 - 4.4668E+03 8.5692E-10 4.9758E-10 2.5741E-11 1.9115E-11 - 5.0119E+03 5.7093E-10 3.2353E-10 1.6384E-11 1.3861E-11 - 5.6234E+03 3.8365E-10 2.0987E-10 1.1223E-11 9.0446E-12 - 6.3096E+03 2.4874E-10 1.3930E-10 7.0021E-12 5.2407E-12 - 7.0795E+03 1.6229E-10 9.0499E-11 4.7260E-12 3.1867E-12 - 7.9433E+03 1.0642E-10 5.9382E-11 3.3772E-12 2.0273E-12 - 8.9125E+03 7.0704E-11 3.9308E-11 2.0590E-12 1.4256E-12 - 1.0000E+04 4.6340E-11 2.5586E-11 1.2713E-12 1.0862E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 150 -- 180] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0168E+04 1.0317E+04 5.0841E+03 4.6608E+03 - 1.1220E-01 9.1429E+03 9.2824E+03 4.5738E+03 4.1493E+03 - 1.2589E-01 8.1717E+03 8.2730E+03 4.0681E+03 3.6405E+03 - 1.4125E-01 7.2384E+03 7.2981E+03 3.5591E+03 3.1798E+03 - 1.5849E-01 6.3281E+03 6.3470E+03 3.0916E+03 2.7491E+03 - 1.7783E-01 5.4462E+03 5.4402E+03 2.6611E+03 2.3406E+03 - 1.9953E-01 4.6046E+03 4.6017E+03 2.2582E+03 1.9670E+03 - 2.2387E-01 3.8463E+03 3.8317E+03 1.8924E+03 1.6299E+03 - 2.5119E-01 3.1765E+03 3.1556E+03 1.5666E+03 1.3323E+03 - 2.8184E-01 2.5887E+03 2.5693E+03 1.2814E+03 1.0761E+03 - 3.1623E-01 2.0830E+03 2.0571E+03 1.0380E+03 8.6256E+02 - 3.5481E-01 1.6537E+03 1.6299E+03 8.2689E+02 6.8186E+02 - 3.9811E-01 1.3065E+03 1.2828E+03 6.4850E+02 5.2967E+02 - 4.4668E-01 1.0209E+03 9.9836E+02 5.0578E+02 4.0915E+02 - 5.0119E-01 7.8883E+02 7.6610E+02 3.9168E+02 3.1267E+02 - 5.6234E-01 6.0537E+02 5.8656E+02 2.9683E+02 2.3707E+02 - 6.3096E-01 4.6108E+02 4.4394E+02 2.2344E+02 1.7909E+02 - 7.0795E-01 3.4941E+02 3.3389E+02 1.6779E+02 1.3344E+02 - 7.9433E-01 2.6360E+02 2.5104E+02 1.2454E+02 9.8024E+01 - 8.9125E-01 1.9890E+02 1.8631E+02 9.0633E+01 7.1865E+01 - 1.0000E+00 1.4835E+02 1.3798E+02 6.6776E+01 5.2351E+01 - 1.1220E+00 1.1086E+02 1.0217E+02 4.8703E+01 3.7910E+01 - 1.2589E+00 8.2528E+01 7.5530E+01 3.5230E+01 2.7454E+01 - 1.4125E+00 6.1572E+01 5.5498E+01 2.5490E+01 1.9711E+01 - 1.5849E+00 4.5770E+01 4.0572E+01 1.8334E+01 1.4081E+01 - 1.7783E+00 3.3579E+01 2.9636E+01 1.2922E+01 1.0064E+01 - 1.9953E+00 2.4723E+01 2.1514E+01 9.0946E+00 7.0627E+00 - 2.2387E+00 1.8157E+01 1.5574E+01 6.4382E+00 4.9269E+00 - 2.5119E+00 1.3219E+01 1.1229E+01 4.5510E+00 3.4645E+00 - 2.8184E+00 9.5921E+00 8.0197E+00 3.1723E+00 2.4192E+00 - 3.1623E+00 6.9799E+00 5.7363E+00 2.1780E+00 1.6397E+00 - 3.5481E+00 5.0683E+00 4.1345E+00 1.5092E+00 1.1352E+00 - 3.9811E+00 3.6612E+00 2.9511E+00 1.0292E+00 7.7766E-01 - 4.4668E+00 2.6361E+00 2.1139E+00 7.0093E-01 5.3140E-01 - 5.0119E+00 1.9047E+00 1.5179E+00 4.8032E-01 3.6346E-01 - 5.6234E+00 1.3719E+00 1.0803E+00 3.2376E-01 2.4620E-01 - 6.3096E+00 9.8274E-01 7.7314E-01 2.1580E-01 1.6480E-01 - 7.0795E+00 7.0148E-01 5.4785E-01 1.4508E-01 1.1067E-01 - 7.9433E+00 5.0125E-01 3.8331E-01 9.9171E-02 7.5470E-02 - 8.9125E+00 3.5690E-01 2.7393E-01 6.6722E-02 5.0525E-02 - 1.0000E+01 2.5666E-01 1.9390E-01 4.4332E-02 3.3515E-02 - 1.1220E+01 1.8232E-01 1.3762E-01 2.9544E-02 2.2327E-02 - 1.2589E+01 1.3030E-01 9.7457E-02 1.9599E-02 1.4884E-02 - 1.4125E+01 9.3051E-02 6.9324E-02 1.2979E-02 1.0111E-02 - 1.5849E+01 6.6041E-02 4.9199E-02 8.7323E-03 6.7952E-03 - 1.7783E+01 4.7319E-02 3.4449E-02 5.8495E-03 4.4816E-03 - 1.9953E+01 3.3800E-02 2.4564E-02 3.8487E-03 2.9859E-03 - 2.2387E+01 2.3870E-02 1.7633E-02 2.5624E-03 2.0236E-03 - 2.5119E+01 1.6623E-02 1.2377E-02 1.7268E-03 1.3298E-03 - 2.8184E+01 1.1710E-02 8.5459E-03 1.1898E-03 9.0258E-04 - 3.1623E+01 8.3666E-03 6.0176E-03 7.5170E-04 6.0121E-04 - 3.5481E+01 5.9252E-03 4.2454E-03 5.0273E-04 4.0031E-04 - 3.9811E+01 4.1812E-03 2.9862E-03 3.3403E-04 2.6900E-04 - 4.4668E+01 2.9403E-03 2.0905E-03 2.2377E-04 1.8192E-04 - 5.0119E+01 2.0730E-03 1.4619E-03 1.4887E-04 1.2153E-04 - 5.6234E+01 1.4595E-03 1.0212E-03 1.0023E-04 8.1968E-05 - 6.3096E+01 1.0236E-03 7.1367E-04 6.8581E-05 5.5821E-05 - 7.0795E+01 7.1935E-04 4.9827E-04 4.6310E-05 3.7145E-05 - 7.9433E+01 5.0384E-04 3.4905E-04 3.0818E-05 2.5342E-05 - 8.9125E+01 3.5489E-04 2.4421E-04 2.0529E-05 1.7024E-05 - 1.0000E+02 2.4782E-04 1.7008E-04 1.4276E-05 1.1523E-05 - 1.1220E+02 1.7317E-04 1.1769E-04 9.5931E-06 7.7399E-06 - 1.2589E+02 1.2154E-04 8.1977E-05 6.4641E-06 5.2669E-06 - 1.4125E+02 8.4965E-05 5.6501E-05 4.4239E-06 3.5603E-06 - 1.5849E+02 5.9216E-05 3.9163E-05 2.9512E-06 2.3813E-06 - 1.7783E+02 4.1365E-05 2.7329E-05 2.0272E-06 1.6124E-06 - 1.9953E+02 2.8804E-05 1.8905E-05 1.3958E-06 1.0742E-06 - 2.2387E+02 2.0097E-05 1.3100E-05 9.2632E-07 7.2444E-07 - 2.5119E+02 1.3990E-05 9.0134E-06 6.0409E-07 4.9934E-07 - 2.8184E+02 9.7000E-06 6.2051E-06 4.1313E-07 3.2401E-07 - 3.1623E+02 6.7657E-06 4.3271E-06 2.8622E-07 2.2573E-07 - 3.5481E+02 4.6541E-06 2.9602E-06 1.9934E-07 1.5064E-07 - 3.9811E+02 3.2315E-06 2.0270E-06 1.3373E-07 1.0308E-07 - 4.4668E+02 2.2369E-06 1.3961E-06 8.8838E-08 7.0210E-08 - 5.0119E+02 1.5378E-06 9.5819E-07 6.0972E-08 4.6638E-08 - 5.6234E+02 1.0641E-06 6.5906E-07 4.0960E-08 3.1283E-08 - 6.3096E+02 7.2566E-07 4.4892E-07 2.6650E-08 2.1278E-08 - 7.0795E+02 4.9662E-07 3.0565E-07 1.8141E-08 1.3795E-08 - 7.9433E+02 3.3775E-07 2.0571E-07 1.2459E-08 8.7848E-09 - 8.9125E+02 2.3105E-07 1.3991E-07 8.0635E-09 5.9511E-09 - 1.0000E+03 1.5918E-07 9.5609E-08 5.2029E-09 4.1398E-09 - 1.1220E+03 1.0560E-07 6.3965E-08 3.4933E-09 2.8285E-09 - 1.2589E+03 7.2376E-08 4.2814E-08 2.3692E-09 1.8772E-09 - 1.4125E+03 4.9227E-08 2.8864E-08 1.5394E-09 1.2379E-09 - 1.5849E+03 3.2824E-08 1.9488E-08 1.0020E-09 8.0081E-10 - 1.7783E+03 2.2091E-08 1.2888E-08 7.0454E-10 4.8009E-10 - 1.9953E+03 1.4897E-08 8.6412E-09 4.7758E-10 3.1530E-10 - 2.2387E+03 9.9574E-09 5.7868E-09 2.9472E-10 2.2012E-10 - 2.5119E+03 6.5712E-09 3.8011E-09 1.9781E-10 1.5204E-10 - 2.8184E+03 4.3603E-09 2.5214E-09 1.3659E-10 1.0174E-10 - 3.1623E+03 3.0409E-09 1.7363E-09 8.9481E-11 6.3142E-11 - 3.5481E+03 1.9696E-09 1.1270E-09 6.0322E-11 4.1953E-11 - 3.9811E+03 1.3008E-09 7.3582E-10 4.1519E-11 2.7737E-11 - 4.4668E+03 8.6127E-10 4.8885E-10 2.8266E-11 1.7534E-11 - 5.0119E+03 5.7161E-10 3.2196E-10 1.6475E-11 1.1812E-11 - 5.6234E+03 3.7685E-10 2.1107E-10 1.0376E-11 8.9279E-12 - 6.3096E+03 2.4628E-10 1.4076E-10 6.9959E-12 5.0687E-12 - 7.0795E+03 1.6164E-10 9.1956E-11 4.5947E-12 3.4145E-12 - 7.9433E+03 1.0738E-10 5.8616E-11 3.1392E-12 2.0005E-12 - 8.9125E+03 7.0466E-11 3.8086E-11 2.0947E-12 1.2417E-12 - 1.0000E+04 4.6438E-11 2.5474E-11 1.3003E-12 8.3081E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 180 -- 210] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0416E+04 1.0504E+04 5.2217E+03 4.7573E+03 - 1.1220E-01 9.3929E+03 9.4516E+03 4.6777E+03 4.2444E+03 - 1.2589E-01 8.4063E+03 8.4000E+03 4.1362E+03 3.7397E+03 - 1.4125E-01 7.4152E+03 7.4088E+03 3.6317E+03 3.2513E+03 - 1.5849E-01 6.4577E+03 6.4574E+03 3.1553E+03 2.7901E+03 - 1.7783E-01 5.5381E+03 5.5363E+03 2.7183E+03 2.3680E+03 - 1.9953E-01 4.6759E+03 4.6831E+03 2.3094E+03 1.9879E+03 - 2.2387E-01 3.9067E+03 3.8955E+03 1.9290E+03 1.6470E+03 - 2.5119E-01 3.2211E+03 3.1930E+03 1.5930E+03 1.3525E+03 - 2.8184E-01 2.6231E+03 2.5934E+03 1.3049E+03 1.0914E+03 - 3.1623E-01 2.1048E+03 2.0800E+03 1.0534E+03 8.7011E+02 - 3.5481E-01 1.6708E+03 1.6466E+03 8.3612E+02 6.9031E+02 - 3.9811E-01 1.3215E+03 1.2927E+03 6.5867E+02 5.3951E+02 - 4.4668E-01 1.0271E+03 1.0056E+03 5.0953E+02 4.1713E+02 - 5.0119E-01 7.9046E+02 7.7677E+02 3.9139E+02 3.1889E+02 - 5.6234E-01 6.0758E+02 5.9123E+02 3.0126E+02 2.3966E+02 - 6.3096E-01 4.6502E+02 4.4672E+02 2.2763E+02 1.7838E+02 - 7.0795E-01 3.5378E+02 3.3727E+02 1.6936E+02 1.3196E+02 - 7.9433E-01 2.6581E+02 2.5037E+02 1.2504E+02 9.7935E+01 - 8.9125E-01 1.9914E+02 1.8637E+02 9.2254E+01 7.2651E+01 - 1.0000E+00 1.4918E+02 1.3866E+02 6.7481E+01 5.3140E+01 - 1.1220E+00 1.1107E+02 1.0231E+02 4.9243E+01 3.8274E+01 - 1.2589E+00 8.2423E+01 7.5470E+01 3.5646E+01 2.7479E+01 - 1.4125E+00 6.1509E+01 5.5340E+01 2.5595E+01 1.9834E+01 - 1.5849E+00 4.5788E+01 4.0381E+01 1.8334E+01 1.4196E+01 - 1.7783E+00 3.3562E+01 2.9670E+01 1.3044E+01 1.0082E+01 - 1.9953E+00 2.4558E+01 2.1605E+01 9.1797E+00 7.1229E+00 - 2.2387E+00 1.8038E+01 1.5472E+01 6.4783E+00 4.9448E+00 - 2.5119E+00 1.3179E+01 1.1103E+01 4.5550E+00 3.4542E+00 - 2.8184E+00 9.6302E+00 7.9735E+00 3.1420E+00 2.4115E+00 - 3.1623E+00 6.9852E+00 5.7486E+00 2.1799E+00 1.6715E+00 - 3.5481E+00 5.0590E+00 4.1035E+00 1.4908E+00 1.1393E+00 - 3.9811E+00 3.6436E+00 2.9414E+00 1.0209E+00 7.7957E-01 - 4.4668E+00 2.6072E+00 2.0953E+00 6.9814E-01 5.3116E-01 - 5.0119E+00 1.8838E+00 1.4931E+00 4.7667E-01 3.5926E-01 - 5.6234E+00 1.3657E+00 1.0588E+00 3.2541E-01 2.4196E-01 - 6.3096E+00 9.7494E-01 7.5164E-01 2.2099E-01 1.6462E-01 - 7.0795E+00 6.9737E-01 5.3693E-01 1.4829E-01 1.1232E-01 - 7.9433E+00 5.0394E-01 3.8363E-01 1.0046E-01 7.7076E-02 - 8.9125E+00 3.5880E-01 2.7139E-01 6.7490E-02 5.1187E-02 - 1.0000E+01 2.5513E-01 1.9347E-01 4.4511E-02 3.3257E-02 - 1.1220E+01 1.8265E-01 1.3722E-01 2.9460E-02 2.2201E-02 - 1.2589E+01 1.3012E-01 9.6854E-02 1.9639E-02 1.5030E-02 - 1.4125E+01 9.1900E-02 6.8456E-02 1.3057E-02 1.0069E-02 - 1.5849E+01 6.5309E-02 4.7986E-02 8.7875E-03 6.6652E-03 - 1.7783E+01 4.6399E-02 3.3839E-02 5.8921E-03 4.4709E-03 - 1.9953E+01 3.2982E-02 2.4048E-02 3.8680E-03 3.0252E-03 - 2.2387E+01 2.3548E-02 1.7007E-02 2.5624E-03 1.9873E-03 - 2.5119E+01 1.6650E-02 1.2065E-02 1.7201E-03 1.3150E-03 - 2.8184E+01 1.1670E-02 8.4847E-03 1.1605E-03 9.1753E-04 - 3.1623E+01 8.3649E-03 6.0362E-03 7.6552E-04 5.9871E-04 - 3.5481E+01 5.9086E-03 4.2397E-03 5.1159E-04 3.9634E-04 - 3.9811E+01 4.1939E-03 2.9783E-03 3.4074E-04 2.6778E-04 - 4.4668E+01 2.9515E-03 2.0905E-03 2.2755E-04 1.7965E-04 - 5.0119E+01 2.0676E-03 1.4725E-03 1.5249E-04 1.2232E-04 - 5.6234E+01 1.4578E-03 1.0277E-03 1.0275E-04 8.4447E-05 - 6.3096E+01 1.0278E-03 7.1507E-04 6.8903E-05 5.6525E-05 - 7.0795E+01 7.2136E-04 5.0174E-04 4.5768E-05 3.7503E-05 - 7.9433E+01 5.0559E-04 3.5186E-04 3.0478E-05 2.5802E-05 - 8.9125E+01 3.5488E-04 2.4463E-04 2.0333E-05 1.7464E-05 - 1.0000E+02 2.4856E-04 1.6977E-04 1.4122E-05 1.1681E-05 - 1.1220E+02 1.7314E-04 1.1817E-04 9.6661E-06 7.8659E-06 - 1.2589E+02 1.2133E-04 8.2200E-05 6.5390E-06 5.2872E-06 - 1.4125E+02 8.4771E-05 5.7060E-05 4.4003E-06 3.4991E-06 - 1.5849E+02 5.9121E-05 3.9602E-05 2.9665E-06 2.4087E-06 - 1.7783E+02 4.1357E-05 2.7483E-05 2.0383E-06 1.6228E-06 - 1.9953E+02 2.8809E-05 1.9063E-05 1.3911E-06 1.0817E-06 - 2.2387E+02 2.0013E-05 1.3179E-05 9.2208E-07 7.3532E-07 - 2.5119E+02 1.3927E-05 9.1247E-06 6.2514E-07 4.9824E-07 - 2.8184E+02 9.7562E-06 6.2350E-06 4.3202E-07 3.3893E-07 - 3.1623E+02 6.7603E-06 4.2876E-06 2.8701E-07 2.3127E-07 - 3.5481E+02 4.6570E-06 2.9425E-06 1.9785E-07 1.5433E-07 - 3.9811E+02 3.2150E-06 2.0365E-06 1.3379E-07 1.0020E-07 - 4.4668E+02 2.2232E-06 1.3928E-06 8.9817E-08 6.7423E-08 - 5.0119E+02 1.5308E-06 9.5651E-07 6.1674E-08 4.7268E-08 - 5.6234E+02 1.0547E-06 6.5865E-07 4.0296E-08 3.0710E-08 - 6.3096E+02 7.1944E-07 4.4747E-07 2.7808E-08 2.0328E-08 - 7.0795E+02 4.9362E-07 3.0311E-07 1.9017E-08 1.3747E-08 - 7.9433E+02 3.3864E-07 2.0796E-07 1.2109E-08 9.2662E-09 - 8.9125E+02 2.3271E-07 1.4316E-07 8.1234E-09 6.2089E-09 - 1.0000E+03 1.5967E-07 9.6120E-08 5.3328E-09 4.1091E-09 - 1.1220E+03 1.0574E-07 6.4052E-08 3.5526E-09 2.7899E-09 - 1.2589E+03 7.1653E-08 4.3537E-08 2.3817E-09 1.7179E-09 - 1.4125E+03 4.8812E-08 2.9613E-08 1.5511E-09 1.1720E-09 - 1.5849E+03 3.2648E-08 1.9887E-08 1.0424E-09 8.0151E-10 - 1.7783E+03 2.2133E-08 1.3142E-08 6.7199E-10 5.3175E-10 - 1.9953E+03 1.4912E-08 8.7280E-09 4.5968E-10 3.3713E-10 - 2.2387E+03 9.9658E-09 5.8049E-09 3.1037E-10 2.2415E-10 - 2.5119E+03 6.6438E-09 3.8878E-09 2.0197E-10 1.5882E-10 - 2.8184E+03 4.3766E-09 2.6017E-09 1.3939E-10 9.7840E-11 - 3.1623E+03 3.0154E-09 1.7713E-09 8.5322E-11 6.5473E-11 - 3.5481E+03 1.9559E-09 1.1318E-09 5.4117E-11 4.5849E-11 - 3.9811E+03 1.2953E-09 7.3453E-10 3.7195E-11 2.9369E-11 - 4.4668E+03 8.5999E-10 4.8069E-10 2.6742E-11 1.7956E-11 - 5.0119E+03 5.6468E-10 3.2271E-10 1.7569E-11 1.2153E-11 - 5.6234E+03 3.7261E-10 2.1522E-10 1.0535E-11 8.2096E-12 - 6.3096E+03 2.4612E-10 1.3719E-10 7.0761E-12 5.0187E-12 - 7.0795E+03 1.6107E-10 8.9902E-11 4.7359E-12 3.4009E-12 - 7.9433E+03 1.0701E-10 5.9943E-11 3.1109E-12 2.1414E-12 - 8.9125E+03 7.0468E-11 3.9224E-11 1.9907E-12 1.3521E-12 - 1.0000E+04 4.6548E-11 2.5407E-11 1.2730E-12 9.1364E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 210 -- 240] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1267E+04 1.1368E+04 5.6544E+03 5.0933E+03 - 1.1220E-01 1.0077E+04 1.0180E+04 5.0582E+03 4.5280E+03 - 1.2589E-01 8.9703E+03 9.0290E+03 4.4732E+03 3.9699E+03 - 1.4125E-01 7.9295E+03 7.9386E+03 3.9138E+03 3.4439E+03 - 1.5849E-01 6.9025E+03 6.8811E+03 3.3917E+03 2.9617E+03 - 1.7783E-01 5.8998E+03 5.8869E+03 2.9165E+03 2.5058E+03 - 1.9953E-01 4.9742E+03 4.9651E+03 2.4715E+03 2.0927E+03 - 2.2387E-01 4.1377E+03 4.1358E+03 2.0539E+03 1.7314E+03 - 2.5119E-01 3.3817E+03 3.3858E+03 1.6938E+03 1.4168E+03 - 2.8184E-01 2.7342E+03 2.7268E+03 1.3782E+03 1.1409E+03 - 3.1623E-01 2.1939E+03 2.1786E+03 1.1036E+03 9.0766E+02 - 3.5481E-01 1.7390E+03 1.7197E+03 8.7824E+02 7.0926E+02 - 3.9811E-01 1.3610E+03 1.3440E+03 6.8738E+02 5.5077E+02 - 4.4668E-01 1.0595E+03 1.0410E+03 5.3123E+02 4.2657E+02 - 5.0119E-01 8.1514E+02 7.9584E+02 4.0938E+02 3.2409E+02 - 5.6234E-01 6.2173E+02 6.0028E+02 3.0911E+02 2.4516E+02 - 6.3096E-01 4.7165E+02 4.5197E+02 2.3034E+02 1.8433E+02 - 7.0795E-01 3.5522E+02 3.4033E+02 1.7204E+02 1.3751E+02 - 7.9433E-01 2.6819E+02 2.5311E+02 1.2793E+02 1.0036E+02 - 8.9125E-01 2.0116E+02 1.8812E+02 9.3996E+01 7.2682E+01 - 1.0000E+00 1.5036E+02 1.4053E+02 6.8722E+01 5.2893E+01 - 1.1220E+00 1.1194E+02 1.0355E+02 4.9728E+01 3.8487E+01 - 1.2589E+00 8.3225E+01 7.5758E+01 3.6130E+01 2.7999E+01 - 1.4125E+00 6.1705E+01 5.5622E+01 2.5886E+01 2.0137E+01 - 1.5849E+00 4.5516E+01 4.0650E+01 1.8334E+01 1.4304E+01 - 1.7783E+00 3.3579E+01 2.9595E+01 1.3028E+01 1.0028E+01 - 1.9953E+00 2.4706E+01 2.1551E+01 9.2839E+00 7.0284E+00 - 2.2387E+00 1.8026E+01 1.5433E+01 6.5857E+00 4.9388E+00 - 2.5119E+00 1.3199E+01 1.1132E+01 4.6151E+00 3.4548E+00 - 2.8184E+00 9.6944E+00 8.0667E+00 3.1540E+00 2.3915E+00 - 3.1623E+00 7.0095E+00 5.7645E+00 2.1732E+00 1.6581E+00 - 3.5481E+00 5.0679E+00 4.1367E+00 1.5036E+00 1.1541E+00 - 3.9811E+00 3.6508E+00 2.9580E+00 1.0289E+00 7.9245E-01 - 4.4668E+00 2.6393E+00 2.1109E+00 6.9997E-01 5.3393E-01 - 5.0119E+00 1.8963E+00 1.5146E+00 4.7337E-01 3.6045E-01 - 5.6234E+00 1.3645E+00 1.0678E+00 3.2052E-01 2.4523E-01 - 6.3096E+00 9.8681E-01 7.5940E-01 2.2049E-01 1.6581E-01 - 7.0795E+00 7.0500E-01 5.4027E-01 1.4853E-01 1.1272E-01 - 7.9433E+00 5.0062E-01 3.8069E-01 9.9076E-02 7.5710E-02 - 8.9125E+00 3.6224E-01 2.7159E-01 6.4700E-02 5.0938E-02 - 1.0000E+01 2.5659E-01 1.9313E-01 4.4461E-02 3.3122E-02 - 1.1220E+01 1.8241E-01 1.3687E-01 2.9599E-02 2.2450E-02 - 1.2589E+01 1.3062E-01 9.6734E-02 1.9680E-02 1.5144E-02 - 1.4125E+01 9.3249E-02 6.8632E-02 1.3245E-02 1.0087E-02 - 1.5849E+01 6.5703E-02 4.8501E-02 8.5312E-03 6.6513E-03 - 1.7783E+01 4.6435E-02 3.4437E-02 5.7134E-03 4.4561E-03 - 1.9953E+01 3.3123E-02 2.4591E-02 3.9861E-03 3.0447E-03 - 2.2387E+01 2.3647E-02 1.7491E-02 2.6310E-03 2.0412E-03 - 2.5119E+01 1.6823E-02 1.2395E-02 1.7278E-03 1.4072E-03 - 2.8184E+01 1.1685E-02 8.7047E-03 1.1822E-03 9.4204E-04 - 3.1623E+01 8.3772E-03 6.0361E-03 7.6301E-04 5.9591E-04 - 3.5481E+01 5.9099E-03 4.2458E-03 5.0969E-04 3.9834E-04 - 3.9811E+01 4.1813E-03 2.9828E-03 3.4173E-04 2.6665E-04 - 4.4668E+01 2.9401E-03 2.0880E-03 2.2661E-04 1.8064E-04 - 5.0119E+01 2.0674E-03 1.4562E-03 1.4981E-04 1.2360E-04 - 5.6234E+01 1.4587E-03 1.0235E-03 1.0118E-04 8.2500E-05 - 6.3096E+01 1.0246E-03 7.1722E-04 6.9194E-05 5.5403E-05 - 7.0795E+01 7.1674E-04 5.0201E-04 4.6092E-05 3.7454E-05 - 7.9433E+01 5.0353E-04 3.5088E-04 3.0428E-05 2.5676E-05 - 8.9125E+01 3.5325E-04 2.4333E-04 2.0260E-05 1.7450E-05 - 1.0000E+02 2.4828E-04 1.6986E-04 1.4292E-05 1.1608E-05 - 1.1220E+02 1.7326E-04 1.1825E-04 9.6752E-06 7.8967E-06 - 1.2589E+02 1.2105E-04 8.2060E-05 6.4980E-06 5.3366E-06 - 1.4125E+02 8.4519E-05 5.6981E-05 4.3861E-06 3.5083E-06 - 1.5849E+02 5.8961E-05 3.9407E-05 2.9840E-06 2.3886E-06 - 1.7783E+02 4.1183E-05 2.7552E-05 2.0040E-06 1.6428E-06 - 1.9953E+02 2.8801E-05 1.9062E-05 1.3620E-06 1.1212E-06 - 2.2387E+02 1.9906E-05 1.2905E-05 9.3304E-07 7.5912E-07 - 2.5119E+02 1.3815E-05 8.9713E-06 6.0375E-07 4.9830E-07 - 2.8184E+02 9.6201E-06 6.2252E-06 4.2346E-07 3.3569E-07 - 3.1623E+02 6.7360E-06 4.3138E-06 2.9251E-07 2.2673E-07 - 3.5481E+02 4.6608E-06 2.9652E-06 1.9827E-07 1.5160E-07 - 3.9811E+02 3.2264E-06 2.0338E-06 1.3150E-07 1.0053E-07 - 4.4668E+02 2.2298E-06 1.3978E-06 8.8015E-08 6.7639E-08 - 5.0119E+02 1.5322E-06 9.6745E-07 5.9792E-08 4.4887E-08 - 5.6234E+02 1.0662E-06 6.6174E-07 4.0356E-08 3.1336E-08 - 6.3096E+02 7.2649E-07 4.4793E-07 2.6845E-08 2.1644E-08 - 7.0795E+02 4.9857E-07 3.0401E-07 1.8474E-08 1.4226E-08 - 7.9433E+02 3.4158E-07 2.0680E-07 1.2599E-08 9.1416E-09 - 8.9125E+02 2.3323E-07 1.4057E-07 8.5999E-09 5.9997E-09 - 1.0000E+03 1.5990E-07 9.6343E-08 5.5547E-09 4.0745E-09 - 1.1220E+03 1.0645E-07 6.4257E-08 3.6301E-09 2.6589E-09 - 1.2589E+03 7.1964E-08 4.3372E-08 2.4216E-09 1.7209E-09 - 1.4125E+03 4.8962E-08 2.9259E-08 1.5054E-09 1.2289E-09 - 1.5849E+03 3.3338E-08 1.9494E-08 1.0105E-09 8.0108E-10 - 1.7783E+03 2.2232E-08 1.3118E-08 6.6352E-10 5.0964E-10 - 1.9953E+03 1.4827E-08 8.7912E-09 4.4675E-10 3.4112E-10 - 2.2387E+03 9.9102E-09 5.9199E-09 3.1717E-10 2.2179E-10 - 2.5119E+03 6.6120E-09 3.9335E-09 2.1450E-10 1.5139E-10 - 2.8184E+03 4.3942E-09 2.5740E-09 1.3574E-10 9.8338E-11 - 3.1623E+03 3.0164E-09 1.7592E-09 9.1198E-11 6.5933E-11 - 3.5481E+03 1.9422E-09 1.1273E-09 5.9777E-11 4.5906E-11 - 3.9811E+03 1.2935E-09 7.4698E-10 3.5569E-11 2.9079E-11 - 4.4668E+03 8.6071E-10 4.9365E-10 2.3793E-11 1.8219E-11 - 5.0119E+03 5.7442E-10 3.2279E-10 1.5359E-11 1.1315E-11 - 5.6234E+03 3.7612E-10 2.0901E-10 1.0889E-11 7.8162E-12 - 6.3096E+03 2.4722E-10 1.3723E-10 7.3407E-12 5.3280E-12 - 7.0795E+03 1.6288E-10 8.8531E-11 4.7814E-12 3.4960E-12 - 7.9433E+03 1.0611E-10 5.8561E-11 2.8438E-12 2.2503E-12 - 8.9125E+03 6.9429E-11 3.8932E-11 2.1002E-12 1.5081E-12 - 1.0000E+04 4.6415E-11 2.4424E-11 1.2583E-12 1.0178E-12 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 240 -- 270] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1966E+04 1.2024E+04 6.0521E+03 5.3384E+03 - 1.1220E-01 1.0690E+04 1.0769E+04 5.3958E+03 4.7328E+03 - 1.2589E-01 9.4844E+03 9.5553E+03 4.7795E+03 4.1524E+03 - 1.4125E-01 8.3280E+03 8.3839E+03 4.1844E+03 3.6136E+03 - 1.5849E-01 7.2286E+03 7.2612E+03 3.5991E+03 3.0989E+03 - 1.7783E-01 6.1816E+03 6.1790E+03 3.0796E+03 2.6107E+03 - 1.9953E-01 5.1972E+03 5.1938E+03 2.5990E+03 2.1815E+03 - 2.2387E-01 4.3046E+03 4.3065E+03 2.1577E+03 1.8003E+03 - 2.5119E-01 3.5129E+03 3.5077E+03 1.7735E+03 1.4562E+03 - 2.8184E-01 2.8320E+03 2.8203E+03 1.4384E+03 1.1722E+03 - 3.1623E-01 2.2558E+03 2.2474E+03 1.1500E+03 9.3406E+02 - 3.5481E-01 1.7773E+03 1.7723E+03 9.0947E+02 7.3025E+02 - 3.9811E-01 1.3916E+03 1.3766E+03 7.0920E+02 5.6572E+02 - 4.4668E-01 1.0799E+03 1.0591E+03 5.4690E+02 4.3390E+02 - 5.0119E-01 8.2595E+02 8.0861E+02 4.1828E+02 3.2973E+02 - 5.6234E-01 6.2755E+02 6.1116E+02 3.1516E+02 2.4809E+02 - 6.3096E-01 4.7556E+02 4.6105E+02 2.3733E+02 1.8553E+02 - 7.0795E-01 3.5810E+02 3.4591E+02 1.7674E+02 1.3814E+02 - 7.9433E-01 2.6851E+02 2.5674E+02 1.2932E+02 1.0110E+02 - 8.9125E-01 2.0156E+02 1.8975E+02 9.4074E+01 7.3047E+01 - 1.0000E+00 1.5009E+02 1.3978E+02 6.8848E+01 5.3411E+01 - 1.1220E+00 1.1153E+02 1.0330E+02 4.9875E+01 3.8895E+01 - 1.2589E+00 8.3158E+01 7.5895E+01 3.5939E+01 2.8029E+01 - 1.4125E+00 6.1840E+01 5.5572E+01 2.5918E+01 1.9948E+01 - 1.5849E+00 4.5834E+01 4.0688E+01 1.8420E+01 1.4317E+01 - 1.7783E+00 3.3663E+01 2.9635E+01 1.2996E+01 1.0209E+01 - 1.9953E+00 2.4664E+01 2.1451E+01 9.2369E+00 7.1477E+00 - 2.2387E+00 1.8105E+01 1.5537E+01 6.5200E+00 5.0108E+00 - 2.5119E+00 1.3225E+01 1.1217E+01 4.5801E+00 3.4575E+00 - 2.8184E+00 9.6533E+00 8.1074E+00 3.1542E+00 2.3911E+00 - 3.1623E+00 6.9839E+00 5.7736E+00 2.1871E+00 1.6688E+00 - 3.5481E+00 5.0495E+00 4.1329E+00 1.5100E+00 1.1418E+00 - 3.9811E+00 3.6506E+00 2.9726E+00 1.0336E+00 7.7656E-01 - 4.4668E+00 2.6350E+00 2.1200E+00 7.0805E-01 5.3168E-01 - 5.0119E+00 1.8992E+00 1.5102E+00 4.7996E-01 3.6455E-01 - 5.6234E+00 1.3695E+00 1.0750E+00 3.2511E-01 2.4719E-01 - 6.3096E+00 9.8519E-01 7.7014E-01 2.2065E-01 1.6726E-01 - 7.0795E+00 7.0394E-01 5.5172E-01 1.4493E-01 1.1449E-01 - 7.9433E+00 4.9984E-01 3.9450E-01 9.5973E-02 7.5113E-02 - 8.9125E+00 3.6067E-01 2.7897E-01 6.5011E-02 5.0083E-02 - 1.0000E+01 2.5897E-01 1.9570E-01 4.4073E-02 3.3812E-02 - 1.1220E+01 1.8354E-01 1.3804E-01 2.9499E-02 2.2565E-02 - 1.2589E+01 1.3041E-01 9.8034E-02 1.9860E-02 1.4869E-02 - 1.4125E+01 9.3514E-02 6.9605E-02 1.3236E-02 1.0067E-02 - 1.5849E+01 6.6620E-02 4.9531E-02 8.6951E-03 6.7416E-03 - 1.7783E+01 4.7526E-02 3.5225E-02 5.8278E-03 4.4749E-03 - 1.9953E+01 3.3607E-02 2.4487E-02 3.9166E-03 2.9878E-03 - 2.2387E+01 2.3604E-02 1.7300E-02 2.6883E-03 2.0029E-03 - 2.5119E+01 1.6708E-02 1.2268E-02 1.7523E-03 1.3415E-03 - 2.8184E+01 1.1761E-02 8.5396E-03 1.1539E-03 8.7729E-04 - 3.1623E+01 8.3678E-03 6.0455E-03 7.5678E-04 6.0268E-04 - 3.5481E+01 5.9191E-03 4.2404E-03 5.1022E-04 4.0321E-04 - 3.9811E+01 4.1888E-03 2.9722E-03 3.4203E-04 2.6972E-04 - 4.4668E+01 2.9561E-03 2.0958E-03 2.2600E-04 1.8002E-04 - 5.0119E+01 2.0793E-03 1.4811E-03 1.5152E-04 1.2139E-04 - 5.6234E+01 1.4602E-03 1.0370E-03 1.0223E-04 8.2958E-05 - 6.3096E+01 1.0290E-03 7.2359E-04 6.9435E-05 5.5939E-05 - 7.0795E+01 7.2173E-04 5.0338E-04 4.6500E-05 3.7497E-05 - 7.9433E+01 5.0566E-04 3.5302E-04 3.0883E-05 2.5774E-05 - 8.9125E+01 3.5383E-04 2.4737E-04 2.1173E-05 1.7875E-05 - 1.0000E+02 2.4888E-04 1.7009E-04 1.4228E-05 1.1588E-05 - 1.1220E+02 1.7407E-04 1.1799E-04 9.7497E-06 7.8448E-06 - 1.2589E+02 1.2151E-04 8.2092E-05 6.5166E-06 5.4007E-06 - 1.4125E+02 8.4840E-05 5.7191E-05 4.4397E-06 3.6946E-06 - 1.5849E+02 5.9385E-05 3.9486E-05 3.0298E-06 2.4730E-06 - 1.7783E+02 4.1368E-05 2.7267E-05 2.0109E-06 1.6878E-06 - 1.9953E+02 2.8692E-05 1.8896E-05 1.3529E-06 1.1098E-06 - 2.2387E+02 2.0073E-05 1.3086E-05 9.1291E-07 7.1417E-07 - 2.5119E+02 1.4050E-05 9.0765E-06 6.2686E-07 4.9302E-07 - 2.8184E+02 9.6894E-06 6.2769E-06 4.2538E-07 3.5032E-07 - 3.1623E+02 6.7576E-06 4.2955E-06 2.8626E-07 2.3382E-07 - 3.5481E+02 4.6546E-06 2.9506E-06 1.9448E-07 1.5708E-07 - 3.9811E+02 3.2248E-06 2.0409E-06 1.2901E-07 1.0460E-07 - 4.4668E+02 2.2333E-06 1.4053E-06 8.8031E-08 7.0147E-08 - 5.0119E+02 1.5367E-06 9.6023E-07 6.1115E-08 4.6381E-08 - 5.6234E+02 1.0675E-06 6.6211E-07 4.1283E-08 3.1474E-08 - 6.3096E+02 7.2717E-07 4.4887E-07 2.7267E-08 2.1464E-08 - 7.0795E+02 5.0200E-07 3.0573E-07 1.8598E-08 1.4380E-08 - 7.9433E+02 3.4306E-07 2.0789E-07 1.2341E-08 9.6465E-09 - 8.9125E+02 2.3245E-07 1.4065E-07 8.1245E-09 6.0898E-09 - 1.0000E+03 1.5935E-07 9.6428E-08 5.3293E-09 4.1568E-09 - 1.1220E+03 1.0743E-07 6.4469E-08 3.6704E-09 2.7665E-09 - 1.2589E+03 7.2864E-08 4.2815E-08 2.3794E-09 1.8635E-09 - 1.4125E+03 4.8936E-08 2.8589E-08 1.5403E-09 1.1906E-09 - 1.5849E+03 3.2872E-08 1.9406E-08 1.0424E-09 7.3394E-10 - 1.7783E+03 2.2070E-08 1.3058E-08 7.0706E-10 5.2457E-10 - 1.9953E+03 1.5018E-08 8.7358E-09 4.8613E-10 3.3275E-10 - 2.2387E+03 1.0081E-08 5.8379E-09 3.2133E-10 2.2849E-10 - 2.5119E+03 6.7043E-09 3.9180E-09 2.1097E-10 1.5287E-10 - 2.8184E+03 4.4901E-09 2.5632E-09 1.4466E-10 9.4290E-11 - 3.1623E+03 3.0382E-09 1.7595E-09 8.9996E-11 6.7681E-11 - 3.5481E+03 1.9459E-09 1.1270E-09 6.1691E-11 4.3870E-11 - 3.9811E+03 1.2960E-09 7.4130E-10 4.0652E-11 2.7878E-11 - 4.4668E+03 8.6310E-10 4.9585E-10 2.5166E-11 1.6465E-11 - 5.0119E+03 5.6706E-10 3.2542E-10 1.6651E-11 1.0171E-11 - 5.6234E+03 3.7716E-10 2.1124E-10 1.0493E-11 7.7304E-12 - 6.3096E+03 2.4888E-10 1.3931E-10 7.1040E-12 5.3152E-12 - 7.0795E+03 1.6409E-10 9.1564E-11 4.7898E-12 3.5096E-12 - 7.9433E+03 1.0688E-10 5.9699E-11 2.8139E-12 2.0961E-12 - 8.9125E+03 6.9985E-11 3.9171E-11 1.8834E-12 1.4102E-12 - 1.0000E+04 4.6030E-11 2.5009E-11 1.3028E-12 9.7625E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 270 -- 300] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1907E+04 1.2043E+04 6.0380E+03 5.3315E+03 - 1.1220E-01 1.0630E+04 1.0780E+04 5.4020E+03 4.7420E+03 - 1.2589E-01 9.4528E+03 9.5475E+03 4.7733E+03 4.1525E+03 - 1.4125E-01 8.3200E+03 8.3822E+03 4.1566E+03 3.6032E+03 - 1.5849E-01 7.2220E+03 7.2505E+03 3.5941E+03 3.0813E+03 - 1.7783E-01 6.1669E+03 6.1744E+03 3.0843E+03 2.5976E+03 - 1.9953E-01 5.1760E+03 5.1895E+03 2.6019E+03 2.1712E+03 - 2.2387E-01 4.2996E+03 4.2892E+03 2.1635E+03 1.7950E+03 - 2.5119E-01 3.5208E+03 3.4910E+03 1.7796E+03 1.4662E+03 - 2.8184E-01 2.8424E+03 2.8193E+03 1.4401E+03 1.1802E+03 - 3.1623E-01 2.2693E+03 2.2530E+03 1.1537E+03 9.3684E+02 - 3.5481E-01 1.7885E+03 1.7750E+03 9.1032E+02 7.3497E+02 - 3.9811E-01 1.3948E+03 1.3746E+03 7.0837E+02 5.6619E+02 - 4.4668E-01 1.0756E+03 1.0606E+03 5.4520E+02 4.3499E+02 - 5.0119E-01 8.2519E+02 8.1177E+02 4.1819E+02 3.3240E+02 - 5.6234E-01 6.3074E+02 6.1359E+02 3.1581E+02 2.4829E+02 - 6.3096E-01 4.7720E+02 4.6160E+02 2.3594E+02 1.8538E+02 - 7.0795E-01 3.5981E+02 3.4522E+02 1.7496E+02 1.3814E+02 - 7.9433E-01 2.6969E+02 2.5698E+02 1.2902E+02 1.0149E+02 - 8.9125E-01 2.0113E+02 1.9016E+02 9.4451E+01 7.4127E+01 - 1.0000E+00 1.5056E+02 1.4010E+02 6.8991E+01 5.3438E+01 - 1.1220E+00 1.1176E+02 1.0313E+02 4.9762E+01 3.8847E+01 - 1.2589E+00 8.2942E+01 7.5982E+01 3.5875E+01 2.7943E+01 - 1.4125E+00 6.1699E+01 5.5607E+01 2.5731E+01 1.9898E+01 - 1.5849E+00 4.5781E+01 4.0655E+01 1.8381E+01 1.4270E+01 - 1.7783E+00 3.3668E+01 2.9595E+01 1.3073E+01 1.0167E+01 - 1.9953E+00 2.4704E+01 2.1404E+01 9.2220E+00 7.1049E+00 - 2.2387E+00 1.8092E+01 1.5519E+01 6.4935E+00 4.9419E+00 - 2.5119E+00 1.3236E+01 1.1155E+01 4.5193E+00 3.4507E+00 - 2.8184E+00 9.6427E+00 8.0757E+00 3.1660E+00 2.3831E+00 - 3.1623E+00 6.9927E+00 5.7637E+00 2.2017E+00 1.6709E+00 - 3.5481E+00 5.0509E+00 4.1426E+00 1.4999E+00 1.1535E+00 - 3.9811E+00 3.6561E+00 2.9602E+00 1.0206E+00 7.8754E-01 - 4.4668E+00 2.6362E+00 2.1176E+00 7.0063E-01 5.3288E-01 - 5.0119E+00 1.9011E+00 1.5102E+00 4.8118E-01 3.6450E-01 - 5.6234E+00 1.3699E+00 1.0734E+00 3.2299E-01 2.4754E-01 - 6.3096E+00 9.8456E-01 7.6478E-01 2.1677E-01 1.6652E-01 - 7.0795E+00 7.0529E-01 5.4400E-01 1.4934E-01 1.1395E-01 - 7.9433E+00 5.0139E-01 3.9006E-01 9.9436E-02 7.6786E-02 - 8.9125E+00 3.5714E-01 2.7552E-01 6.7210E-02 4.8721E-02 - 1.0000E+01 2.5545E-01 1.9303E-01 4.4850E-02 3.3664E-02 - 1.1220E+01 1.8291E-01 1.3730E-01 2.9968E-02 2.2741E-02 - 1.2589E+01 1.3052E-01 9.7212E-02 2.0118E-02 1.5228E-02 - 1.4125E+01 9.2744E-02 6.8965E-02 1.3362E-02 1.0285E-02 - 1.5849E+01 6.6203E-02 4.8837E-02 8.5619E-03 6.8178E-03 - 1.7783E+01 4.6856E-02 3.4472E-02 5.5998E-03 4.5010E-03 - 1.9953E+01 3.3336E-02 2.4191E-02 3.7974E-03 3.0389E-03 - 2.2387E+01 2.3901E-02 1.6955E-02 2.5882E-03 2.0535E-03 - 2.5119E+01 1.6717E-02 1.1979E-02 1.7010E-03 1.3863E-03 - 2.8184E+01 1.1827E-02 8.5273E-03 1.1193E-03 8.7929E-04 - 3.1623E+01 8.3985E-03 6.0573E-03 7.6426E-04 5.9933E-04 - 3.5481E+01 5.9166E-03 4.2460E-03 5.0571E-04 4.0143E-04 - 3.9811E+01 4.1748E-03 2.9897E-03 3.3708E-04 2.7183E-04 - 4.4668E+01 2.9611E-03 2.1014E-03 2.2655E-04 1.8353E-04 - 5.0119E+01 2.0818E-03 1.4760E-03 1.5206E-04 1.2200E-04 - 5.6234E+01 1.4628E-03 1.0292E-03 1.0217E-04 8.2547E-05 - 6.3096E+01 1.0351E-03 7.1505E-04 6.9384E-05 5.5640E-05 - 7.0795E+01 7.2494E-04 4.9942E-04 4.7094E-05 3.7527E-05 - 7.9433E+01 5.0858E-04 3.4865E-04 3.0614E-05 2.5843E-05 - 8.9125E+01 3.5675E-04 2.4386E-04 2.1314E-05 1.7885E-05 - 1.0000E+02 2.4880E-04 1.7059E-04 1.4418E-05 1.1657E-05 - 1.1220E+02 1.7389E-04 1.1859E-04 9.7558E-06 7.9002E-06 - 1.2589E+02 1.2155E-04 8.2354E-05 6.4809E-06 5.3656E-06 - 1.4125E+02 8.5128E-05 5.7040E-05 4.3232E-06 3.6143E-06 - 1.5849E+02 5.9444E-05 3.9441E-05 3.0086E-06 2.4688E-06 - 1.7783E+02 4.1376E-05 2.7430E-05 2.0311E-06 1.6417E-06 - 1.9953E+02 2.8766E-05 1.9081E-05 1.3636E-06 1.0995E-06 - 2.2387E+02 2.0065E-05 1.3139E-05 9.1752E-07 7.6783E-07 - 2.5119E+02 1.3941E-05 9.0673E-06 6.1200E-07 4.9784E-07 - 2.8184E+02 9.6819E-06 6.2330E-06 4.2070E-07 3.3331E-07 - 3.1623E+02 6.7768E-06 4.3308E-06 2.9102E-07 2.3316E-07 - 3.5481E+02 4.6903E-06 2.9745E-06 1.9895E-07 1.6027E-07 - 3.9811E+02 3.2269E-06 2.0409E-06 1.3285E-07 1.0732E-07 - 4.4668E+02 2.2169E-06 1.3967E-06 9.0903E-08 6.9486E-08 - 5.0119E+02 1.5347E-06 9.5763E-07 6.2692E-08 4.5822E-08 - 5.6234E+02 1.0624E-06 6.6289E-07 4.0853E-08 3.1976E-08 - 6.3096E+02 7.2698E-07 4.4801E-07 2.7239E-08 2.1814E-08 - 7.0795E+02 5.0062E-07 3.0587E-07 1.8763E-08 1.4413E-08 - 7.9433E+02 3.4495E-07 2.0922E-07 1.2851E-08 9.4429E-09 - 8.9125E+02 2.3428E-07 1.4016E-07 8.3925E-09 6.2409E-09 - 1.0000E+03 1.6089E-07 9.6433E-08 5.7645E-09 4.0458E-09 - 1.1220E+03 1.0804E-07 6.4942E-08 3.8113E-09 2.8001E-09 - 1.2589E+03 7.3157E-08 4.3692E-08 2.4239E-09 1.8383E-09 - 1.4125E+03 4.8812E-08 2.8907E-08 1.5732E-09 1.1546E-09 - 1.5849E+03 3.2751E-08 1.9270E-08 1.0673E-09 7.6905E-10 - 1.7783E+03 2.2230E-08 1.2970E-08 7.7396E-10 5.2396E-10 - 1.9953E+03 1.4966E-08 8.6956E-09 4.9961E-10 3.4691E-10 - 2.2387E+03 1.0049E-08 5.8060E-09 3.0611E-10 2.3719E-10 - 2.5119E+03 6.7237E-09 3.8716E-09 2.0855E-10 1.6270E-10 - 2.8184E+03 4.4176E-09 2.5770E-09 1.4164E-10 1.0256E-10 - 3.1623E+03 3.0087E-09 1.7686E-09 8.8859E-11 6.8149E-11 - 3.5481E+03 1.9441E-09 1.1334E-09 5.5993E-11 4.4816E-11 - 3.9811E+03 1.3186E-09 7.5002E-10 3.8458E-11 2.9324E-11 - 4.4668E+03 8.6717E-10 4.9199E-10 2.7405E-11 1.9606E-11 - 5.0119E+03 5.6949E-10 3.2257E-10 1.6419E-11 1.2010E-11 - 5.6234E+03 3.7706E-10 2.1645E-10 9.4364E-12 7.4005E-12 - 6.3096E+03 2.5001E-10 1.4015E-10 7.1538E-12 4.9279E-12 - 7.0795E+03 1.6653E-10 9.2157E-11 5.1508E-12 3.2975E-12 - 7.9433E+03 1.0937E-10 5.9842E-11 3.5730E-12 2.2236E-12 - 8.9125E+03 7.0584E-11 3.9525E-11 2.0070E-12 1.5859E-12 - 1.0000E+04 4.6548E-11 2.6404E-11 1.2403E-12 9.3220E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 300 -- 330] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.1231E+04 1.1376E+04 5.6782E+03 5.0704E+03 - 1.1220E-01 1.0077E+04 1.0184E+04 5.0868E+03 4.5117E+03 - 1.2589E-01 8.9797E+03 9.0663E+03 4.5003E+03 3.9768E+03 - 1.4125E-01 7.9271E+03 7.9669E+03 3.9452E+03 3.4642E+03 - 1.5849E-01 6.9115E+03 6.8966E+03 3.4163E+03 2.9717E+03 - 1.7783E-01 5.9264E+03 5.9038E+03 2.9269E+03 2.5159E+03 - 1.9953E-01 4.9908E+03 4.9684E+03 2.4850E+03 2.0995E+03 - 2.2387E-01 4.1546E+03 4.1261E+03 2.0699E+03 1.7378E+03 - 2.5119E-01 3.4043E+03 3.3857E+03 1.6996E+03 1.4221E+03 - 2.8184E-01 2.7514E+03 2.7420E+03 1.3877E+03 1.1445E+03 - 3.1623E-01 2.2098E+03 2.1869E+03 1.1136E+03 9.1089E+02 - 3.5481E-01 1.7531E+03 1.7248E+03 8.8059E+02 7.1524E+02 - 3.9811E-01 1.3705E+03 1.3492E+03 6.9256E+02 5.5768E+02 - 4.4668E-01 1.0632E+03 1.0437E+03 5.3756E+02 4.2891E+02 - 5.0119E-01 8.1694E+02 7.9944E+02 4.0868E+02 3.2561E+02 - 5.6234E-01 6.2336E+02 6.0671E+02 3.1060E+02 2.4643E+02 - 6.3096E-01 4.7533E+02 4.5692E+02 2.3517E+02 1.8348E+02 - 7.0795E-01 3.5934E+02 3.4273E+02 1.7498E+02 1.3646E+02 - 7.9433E-01 2.6991E+02 2.5617E+02 1.2881E+02 1.0089E+02 - 8.9125E-01 2.0233E+02 1.9038E+02 9.3744E+01 7.3710E+01 - 1.0000E+00 1.5019E+02 1.4006E+02 6.8786E+01 5.3419E+01 - 1.1220E+00 1.1177E+02 1.0339E+02 5.0039E+01 3.8794E+01 - 1.2589E+00 8.3470E+01 7.6135E+01 3.6196E+01 2.7800E+01 - 1.4125E+00 6.2065E+01 5.5424E+01 2.5936E+01 1.9739E+01 - 1.5849E+00 4.5508E+01 4.0238E+01 1.8397E+01 1.4170E+01 - 1.7783E+00 3.3617E+01 2.9450E+01 1.3047E+01 1.0095E+01 - 1.9953E+00 2.4696E+01 2.1447E+01 9.1336E+00 7.0700E+00 - 2.2387E+00 1.8121E+01 1.5495E+01 6.5095E+00 4.9162E+00 - 2.5119E+00 1.3233E+01 1.1184E+01 4.5698E+00 3.4721E+00 - 2.8184E+00 9.5557E+00 7.9958E+00 3.1195E+00 2.4318E+00 - 3.1623E+00 6.9525E+00 5.7485E+00 2.1847E+00 1.6811E+00 - 3.5481E+00 5.0439E+00 4.1341E+00 1.5114E+00 1.1465E+00 - 3.9811E+00 3.6458E+00 2.9696E+00 1.0215E+00 7.8614E-01 - 4.4668E+00 2.6387E+00 2.1143E+00 6.9604E-01 5.3551E-01 - 5.0119E+00 1.8964E+00 1.5044E+00 4.7536E-01 3.6294E-01 - 5.6234E+00 1.3621E+00 1.0802E+00 3.2134E-01 2.4682E-01 - 6.3096E+00 9.8117E-01 7.6595E-01 2.1747E-01 1.6718E-01 - 7.0795E+00 7.0386E-01 5.3536E-01 1.4538E-01 1.1252E-01 - 7.9433E+00 5.0355E-01 3.8018E-01 9.8187E-02 7.4507E-02 - 8.9125E+00 3.5955E-01 2.7204E-01 6.6107E-02 4.9763E-02 - 1.0000E+01 2.5777E-01 1.9433E-01 4.4874E-02 3.3565E-02 - 1.1220E+01 1.8322E-01 1.3703E-01 2.9811E-02 2.2597E-02 - 1.2589E+01 1.3015E-01 9.7263E-02 1.9727E-02 1.4970E-02 - 1.4125E+01 9.2794E-02 6.9203E-02 1.3192E-02 9.8607E-03 - 1.5849E+01 6.5851E-02 4.8912E-02 8.9219E-03 6.6942E-03 - 1.7783E+01 4.6701E-02 3.4645E-02 5.7800E-03 4.4728E-03 - 1.9953E+01 3.3368E-02 2.4596E-02 3.8051E-03 2.9894E-03 - 2.2387E+01 2.3755E-02 1.7367E-02 2.6066E-03 2.0136E-03 - 2.5119E+01 1.6788E-02 1.2273E-02 1.6992E-03 1.3187E-03 - 2.8184E+01 1.1900E-02 8.6909E-03 1.1357E-03 8.8662E-04 - 3.1623E+01 8.4090E-03 6.0311E-03 7.6487E-04 5.9714E-04 - 3.5481E+01 5.9301E-03 4.2317E-03 5.1193E-04 3.9957E-04 - 3.9811E+01 4.1829E-03 2.9900E-03 3.4385E-04 2.6590E-04 - 4.4668E+01 2.9549E-03 2.0933E-03 2.2970E-04 1.8114E-04 - 5.0119E+01 2.0804E-03 1.4691E-03 1.5162E-04 1.2143E-04 - 5.6234E+01 1.4571E-03 1.0357E-03 1.0122E-04 8.2492E-05 - 6.3096E+01 1.0233E-03 7.1927E-04 6.8398E-05 5.7431E-05 - 7.0795E+01 7.2364E-04 4.9842E-04 4.6141E-05 3.8841E-05 - 7.9433E+01 5.0800E-04 3.4866E-04 3.0958E-05 2.6431E-05 - 8.9125E+01 3.5576E-04 2.4501E-04 2.0768E-05 1.7070E-05 - 1.0000E+02 2.4913E-04 1.7080E-04 1.4152E-05 1.1632E-05 - 1.1220E+02 1.7420E-04 1.1837E-04 9.4491E-06 7.8977E-06 - 1.2589E+02 1.2214E-04 8.2242E-05 6.5552E-06 5.3566E-06 - 1.4125E+02 8.5019E-05 5.7069E-05 4.5340E-06 3.5995E-06 - 1.5849E+02 5.9439E-05 3.9473E-05 3.0148E-06 2.4746E-06 - 1.7783E+02 4.1729E-05 2.7406E-05 2.0332E-06 1.6764E-06 - 1.9953E+02 2.8952E-05 1.8989E-05 1.3710E-06 1.1285E-06 - 2.2387E+02 2.0076E-05 1.3085E-05 9.1987E-07 7.6856E-07 - 2.5119E+02 1.3909E-05 9.0521E-06 6.2222E-07 5.1787E-07 - 2.8184E+02 9.5877E-06 6.2696E-06 4.2551E-07 3.3783E-07 - 3.1623E+02 6.7605E-06 4.3437E-06 2.8906E-07 2.3394E-07 - 3.5481E+02 4.6659E-06 2.9724E-06 1.8924E-07 1.6045E-07 - 3.9811E+02 3.2302E-06 2.0474E-06 1.2845E-07 1.0689E-07 - 4.4668E+02 2.2325E-06 1.3998E-06 9.0076E-08 6.9643E-08 - 5.0119E+02 1.5395E-06 9.6134E-07 6.2591E-08 4.6451E-08 - 5.6234E+02 1.0707E-06 6.6251E-07 4.1020E-08 3.1640E-08 - 6.3096E+02 7.3070E-07 4.4764E-07 2.8096E-08 2.1093E-08 - 7.0795E+02 5.0214E-07 3.0563E-07 1.9521E-08 1.3581E-08 - 7.9433E+02 3.4336E-07 2.0860E-07 1.3027E-08 8.9820E-09 - 8.9125E+02 2.3405E-07 1.4247E-07 8.4420E-09 6.1067E-09 - 1.0000E+03 1.6159E-07 9.5785E-08 5.4227E-09 4.2775E-09 - 1.1220E+03 1.0790E-07 6.4444E-08 3.7699E-09 2.9426E-09 - 1.2589E+03 7.2987E-08 4.4057E-08 2.5812E-09 1.9094E-09 - 1.4125E+03 4.8872E-08 2.9455E-08 1.6729E-09 1.2562E-09 - 1.5849E+03 3.2863E-08 1.9570E-08 1.0837E-09 8.4582E-10 - 1.7783E+03 2.2294E-08 1.3111E-08 6.9922E-10 5.6377E-10 - 1.9953E+03 1.4971E-08 8.8441E-09 4.8272E-10 3.6229E-10 - 2.2387E+03 9.9766E-09 5.8877E-09 3.4581E-10 2.2139E-10 - 2.5119E+03 6.5754E-09 3.8920E-09 2.2408E-10 1.4162E-10 - 2.8184E+03 4.4423E-09 2.5710E-09 1.3466E-10 9.5520E-11 - 3.1623E+03 3.0775E-09 1.7865E-09 9.4386E-11 5.9008E-11 - 3.5481E+03 1.9970E-09 1.1416E-09 5.8792E-11 4.0403E-11 - 3.9811E+03 1.3173E-09 7.4434E-10 3.6570E-11 2.8678E-11 - 4.4668E+03 8.7132E-10 5.0136E-10 2.5269E-11 1.8902E-11 - 5.0119E+03 5.7946E-10 3.3593E-10 1.6638E-11 1.1803E-11 - 5.6234E+03 3.7563E-10 2.2026E-10 1.1993E-11 8.2144E-12 - 6.3096E+03 2.4889E-10 1.4466E-10 7.2249E-12 5.1474E-12 - 7.0795E+03 1.6591E-10 9.4595E-11 4.6798E-12 2.9012E-12 - 7.9433E+03 1.1085E-10 6.1102E-11 2.9917E-12 2.0635E-12 - 8.9125E+03 7.2121E-11 3.9384E-11 1.9992E-12 1.5266E-12 - 1.0000E+04 4.6685E-11 2.4459E-11 1.3282E-12 8.3752E-13 -average flux in [cosZ =-1.00 -- -0.90, phi_Az = 330 -- 360] - Enu(GeV) NuMu NuMubar NuE NuEbar (m^2 sec sr GeV)^-1 - 1.0000E-01 1.0304E+04 1.0426E+04 5.1337E+03 4.7157E+03 - 1.1220E-01 9.2870E+03 9.3720E+03 4.6287E+03 4.1993E+03 - 1.2589E-01 8.3042E+03 8.3668E+03 4.1159E+03 3.6990E+03 - 1.4125E-01 7.3515E+03 7.3759E+03 3.6177E+03 3.2251E+03 - 1.5849E-01 6.4098E+03 6.4179E+03 3.1375E+03 2.7723E+03 - 1.7783E-01 5.5037E+03 5.5104E+03 2.7043E+03 2.3510E+03 - 1.9953E-01 4.6674E+03 4.6589E+03 2.3107E+03 1.9800E+03 - 2.2387E-01 3.9042E+03 3.8805E+03 1.9314E+03 1.6474E+03 - 2.5119E-01 3.2169E+03 3.1948E+03 1.5963E+03 1.3516E+03 - 2.8184E-01 2.6127E+03 2.5963E+03 1.3065E+03 1.0909E+03 - 3.1623E-01 2.0970E+03 2.0856E+03 1.0505E+03 8.7374E+02 - 3.5481E-01 1.6638E+03 1.6536E+03 8.3707E+02 6.9517E+02 - 3.9811E-01 1.3129E+03 1.2959E+03 6.5844E+02 5.4287E+02 - 4.4668E-01 1.0299E+03 1.0060E+03 5.1244E+02 4.1454E+02 - 5.0119E-01 7.9356E+02 7.7428E+02 3.9421E+02 3.1767E+02 - 5.6234E-01 6.0722E+02 5.9193E+02 2.9962E+02 2.4208E+02 - 6.3096E-01 4.6546E+02 4.4829E+02 2.2765E+02 1.8229E+02 - 7.0795E-01 3.5292E+02 3.3824E+02 1.6961E+02 1.3536E+02 - 7.9433E-01 2.6633E+02 2.5297E+02 1.2515E+02 9.9008E+01 - 8.9125E-01 2.0041E+02 1.8727E+02 9.2571E+01 7.2415E+01 - 1.0000E+00 1.4896E+02 1.3917E+02 6.8015E+01 5.3050E+01 - 1.1220E+00 1.1150E+02 1.0287E+02 4.9231E+01 3.8426E+01 - 1.2589E+00 8.3430E+01 7.5510E+01 3.5702E+01 2.7734E+01 - 1.4125E+00 6.2014E+01 5.5742E+01 2.5774E+01 1.9970E+01 - 1.5849E+00 4.5751E+01 4.0807E+01 1.8350E+01 1.4240E+01 - 1.7783E+00 3.3545E+01 2.9651E+01 1.3165E+01 1.0073E+01 - 1.9953E+00 2.4643E+01 2.1449E+01 9.3366E+00 7.1344E+00 - 2.2387E+00 1.8114E+01 1.5473E+01 6.5115E+00 5.0517E+00 - 2.5119E+00 1.3215E+01 1.1275E+01 4.5411E+00 3.5447E+00 - 2.8184E+00 9.5577E+00 8.1091E+00 3.1953E+00 2.4454E+00 - 3.1623E+00 7.0140E+00 5.8087E+00 2.2075E+00 1.6781E+00 - 3.5481E+00 5.0895E+00 4.1643E+00 1.5137E+00 1.1530E+00 - 3.9811E+00 3.6579E+00 2.9930E+00 1.0412E+00 7.8563E-01 - 4.4668E+00 2.6463E+00 2.1399E+00 7.1601E-01 5.3212E-01 - 5.0119E+00 1.9057E+00 1.5087E+00 4.8275E-01 3.6294E-01 - 5.6234E+00 1.3707E+00 1.0684E+00 3.2263E-01 2.4773E-01 - 6.3096E+00 9.8689E-01 7.7213E-01 2.1957E-01 1.6733E-01 - 7.0795E+00 7.0298E-01 5.5530E-01 1.4884E-01 1.1156E-01 - 7.9433E+00 5.0170E-01 3.9341E-01 9.9054E-02 7.5468E-02 - 8.9125E+00 3.5696E-01 2.8002E-01 6.7599E-02 5.0998E-02 - 1.0000E+01 2.5706E-01 1.9457E-01 4.4557E-02 3.3510E-02 - 1.1220E+01 1.8308E-01 1.3692E-01 2.9353E-02 2.2550E-02 - 1.2589E+01 1.2991E-01 9.7709E-02 1.9574E-02 1.4871E-02 - 1.4125E+01 9.2761E-02 6.9060E-02 1.2972E-02 1.0217E-02 - 1.5849E+01 6.6180E-02 4.8853E-02 8.7905E-03 6.7517E-03 - 1.7783E+01 4.6890E-02 3.4733E-02 5.8833E-03 4.3014E-03 - 1.9953E+01 3.3181E-02 2.4464E-02 3.8992E-03 2.9133E-03 - 2.2387E+01 2.3769E-02 1.7183E-02 2.5408E-03 1.9555E-03 - 2.5119E+01 1.7002E-02 1.2202E-02 1.6891E-03 1.3136E-03 - 2.8184E+01 1.1983E-02 8.6098E-03 1.1329E-03 8.9338E-04 - 3.1623E+01 8.4122E-03 6.0512E-03 7.5546E-04 6.0543E-04 - 3.5481E+01 5.9490E-03 4.2633E-03 5.0716E-04 4.0238E-04 - 3.9811E+01 4.1918E-03 2.9915E-03 3.3780E-04 2.7055E-04 - 4.4668E+01 2.9669E-03 2.1027E-03 2.2830E-04 1.8302E-04 - 5.0119E+01 2.0853E-03 1.4790E-03 1.5270E-04 1.2370E-04 - 5.6234E+01 1.4558E-03 1.0286E-03 1.0368E-04 8.4099E-05 - 6.3096E+01 1.0271E-03 7.2037E-04 7.0582E-05 5.7248E-05 - 7.0795E+01 7.2232E-04 5.0754E-04 4.6858E-05 3.8220E-05 - 7.9433E+01 5.0697E-04 3.5027E-04 3.1153E-05 2.4871E-05 - 8.9125E+01 3.5595E-04 2.4290E-04 2.1076E-05 1.7035E-05 - 1.0000E+02 2.5007E-04 1.7095E-04 1.4422E-05 1.1536E-05 - 1.1220E+02 1.7475E-04 1.1896E-04 9.7314E-06 7.8837E-06 - 1.2589E+02 1.2218E-04 8.2886E-05 6.6415E-06 5.3917E-06 - 1.4125E+02 8.5282E-05 5.7547E-05 4.4831E-06 3.6367E-06 - 1.5849E+02 5.9509E-05 3.9881E-05 3.0637E-06 2.4285E-06 - 1.7783E+02 4.1434E-05 2.7635E-05 2.0613E-06 1.6177E-06 - 1.9953E+02 2.8821E-05 1.9182E-05 1.3897E-06 1.0867E-06 - 2.2387E+02 2.0155E-05 1.3223E-05 9.3777E-07 7.4813E-07 - 2.5119E+02 1.3994E-05 9.1582E-06 6.3373E-07 5.0521E-07 - 2.8184E+02 9.7367E-06 6.3819E-06 4.3137E-07 3.4434E-07 - 3.1623E+02 6.7824E-06 4.3444E-06 2.9262E-07 2.3492E-07 - 3.5481E+02 4.6857E-06 2.9829E-06 1.9752E-07 1.5589E-07 - 3.9811E+02 3.2511E-06 2.0484E-06 1.3043E-07 1.0227E-07 - 4.4668E+02 2.2282E-06 1.4083E-06 9.0101E-08 6.7932E-08 - 5.0119E+02 1.5312E-06 9.6953E-07 6.1780E-08 4.5957E-08 - 5.6234E+02 1.0709E-06 6.6430E-07 4.1249E-08 3.1230E-08 - 6.3096E+02 7.3148E-07 4.5054E-07 2.7688E-08 2.1009E-08 - 7.0795E+02 5.0008E-07 3.0694E-07 1.8091E-08 1.4372E-08 - 7.9433E+02 3.4300E-07 2.0778E-07 1.2065E-08 9.4741E-09 - 8.9125E+02 2.3314E-07 1.4101E-07 8.5521E-09 6.1447E-09 - 1.0000E+03 1.6033E-07 9.6682E-08 5.5947E-09 4.1376E-09 - 1.1220E+03 1.0805E-07 6.5051E-08 3.7967E-09 2.7389E-09 - 1.2589E+03 7.3064E-08 4.4039E-08 2.5313E-09 1.7401E-09 - 1.4125E+03 4.9320E-08 2.9621E-08 1.6548E-09 1.0941E-09 - 1.5849E+03 3.3300E-08 1.9887E-08 1.0634E-09 7.5856E-10 - 1.7783E+03 2.2428E-08 1.3275E-08 6.5305E-10 5.0609E-10 - 1.9953E+03 1.5113E-08 8.8211E-09 4.5156E-10 3.5471E-10 - 2.2387E+03 1.0110E-08 5.8324E-09 3.0154E-10 2.4652E-10 - 2.5119E+03 6.6563E-09 3.8447E-09 2.1405E-10 1.4190E-10 - 2.8184E+03 4.4350E-09 2.5973E-09 1.3476E-10 9.3486E-11 - 3.1623E+03 3.0710E-09 1.7702E-09 9.0390E-11 7.1611E-11 - 3.5481E+03 1.9888E-09 1.1344E-09 6.2613E-11 4.8411E-11 - 3.9811E+03 1.3168E-09 7.5266E-10 3.9292E-11 3.0221E-11 - 4.4668E+03 8.7095E-10 4.9618E-10 2.4428E-11 1.7730E-11 - 5.0119E+03 5.7400E-10 3.2745E-10 1.6205E-11 1.1605E-11 - 5.6234E+03 3.7795E-10 2.1876E-10 9.9980E-12 7.2329E-12 - 6.3096E+03 2.4842E-10 1.4233E-10 6.9873E-12 4.9385E-12 - 7.0795E+03 1.6314E-10 9.2423E-11 4.6868E-12 3.3645E-12 - 7.9433E+03 1.0923E-10 5.9505E-11 3.1184E-12 2.2974E-12 - 8.9125E+03 7.1489E-11 3.8686E-11 1.9816E-12 1.6876E-12 - 1.0000E+04 4.5560E-11 2.6066E-11 1.1588E-12 1.0499E-12 diff --git a/pisa_examples/resources/osc/PREM_10layer.dat b/pisa_examples/resources/osc/PREM_10layer.dat deleted file mode 100644 index 905ae7309..000000000 --- a/pisa_examples/resources/osc/PREM_10layer.dat +++ /dev/null @@ -1,12 +0,0 @@ -0. 12.980 -1221.5 12.980 -3480.0 11.239 -5701.0 4.997 -5771.0 3.984 -5971.0 3.850 -6151.0 3.490 -6346.6 3.370 -6356.0 2.900 -6368.0 2.600 -6371.0 1.020 - diff --git a/pisa_examples/resources/osc/PREM_12layer.dat b/pisa_examples/resources/osc/PREM_12layer.dat deleted file mode 100644 index bf8005f43..000000000 --- a/pisa_examples/resources/osc/PREM_12layer.dat +++ /dev/null @@ -1,13 +0,0 @@ -0.00 13.0 -1221.50 13.0 -1974.33 11.948163 -2727.17 11.341572 -3480.00 10.462371 -4220.33 5.381883 -4960.67 5.007959 -5701.00 4.603493 -5971.00 3.9 -6346.60 3.4 -6356.00 2.900000 -6368.00 2.600000 -6371.00 1.020000 diff --git a/pisa_examples/resources/osc/PREM_4layer.dat b/pisa_examples/resources/osc/PREM_4layer.dat deleted file mode 100644 index 35887fba0..000000000 --- a/pisa_examples/resources/osc/PREM_4layer.dat +++ /dev/null @@ -1,5 +0,0 @@ -0. 13.0 -1220.0 13.0 -3480.0 11.3 -5701.0 5.0 -6371.0 3.3 diff --git a/pisa_examples/resources/osc/PREM_59layer.dat b/pisa_examples/resources/osc/PREM_59layer.dat deleted file mode 100644 index 0753d5568..000000000 --- a/pisa_examples/resources/osc/PREM_59layer.dat +++ /dev/null @@ -1,60 +0,0 @@ -0.0 13.088500 -100.0 13.087956 -200.0 13.083601 -300.0 13.074891 -400.0 13.061827 -500.0 13.044407 -600.0 13.022633 -700.0 12.996504 -800.0 12.966020 -900.0 12.931181 -1000.0 12.891987 -1100.0 12.848439 -1200.0 12.800535 -1221.5 12.769308 -1400.0 12.119166 -1500.0 12.040013 -1600.0 11.978818 -1700.0 11.913841 -1800.0 11.844952 -1900.0 11.772024 -2000.0 11.694929 -2100.0 11.613537 -2200.0 11.527721 -2300.0 11.437353 -2400.0 11.342303 -2500.0 11.242445 -2600.0 11.137649 -2700.0 11.027788 -2800.0 10.912733 -2900.0 10.792356 -3000.0 10.666529 -3100.0 10.535122 -3200.0 10.398009 -3300.0 10.255061 -3400.0 10.106150 -3480.0 9.966925 -3600.0 5.536414 -3630.0 5.498957 -3800.0 5.449133 -4000.0 5.357086 -4200.0 5.257316 -4400.0 5.156720 -4600.0 5.054725 -4800.0 4.950760 -5000.0 4.844253 -5200.0 4.734632 -5400.0 4.621326 -5600.0 4.503762 -5701.0 4.412141 -5771.0 3.983971 -5871.0 3.912802 -5971.0 3.786765 -6061.0 3.516391 -6151.0 3.462647 -6221.0 3.363294 -6291.0 3.370902 -6346.6 3.377727 -6356.0 2.900000 -6368.0 2.600000 -6371.0 1.020000 diff --git a/pisa_examples/resources/osc/nuSQuIDS_PREM.dat b/pisa_examples/resources/osc/nuSQuIDS_PREM.dat deleted file mode 100644 index b976fe504..000000000 --- a/pisa_examples/resources/osc/nuSQuIDS_PREM.dat +++ /dev/null @@ -1,201 +0,0 @@ -0.000000000000000000e+00 1.308849999999999802e+01 4.656000000000000139e-01 -5.000000000000000104e-03 1.308827904750000037e+01 4.656000000000000139e-01 -1.000000000000000021e-02 1.308761619000000032e+01 4.656000000000000139e-01 -1.499999999999999944e-02 1.308651142749999785e+01 4.656000000000000139e-01 -2.000000000000000042e-02 1.308496475999999831e+01 4.656000000000000139e-01 -2.500000000000000139e-02 1.308297618749999813e+01 4.656000000000000139e-01 -2.999999999999999889e-02 1.308054570999999910e+01 4.656000000000000139e-01 -3.500000000000000333e-02 1.307767332749999767e+01 4.656000000000000139e-01 -4.000000000000000083e-02 1.307435903999999915e+01 4.656000000000000139e-01 -4.499999999999999833e-02 1.307060284749999823e+01 4.656000000000000139e-01 -5.000000000000000278e-02 1.306640474999999846e+01 4.656000000000000139e-01 -5.500000000000000028e-02 1.306176474749999805e+01 4.656000000000000139e-01 -5.999999999999999778e-02 1.305668284000000057e+01 4.656000000000000139e-01 -6.500000000000000222e-02 1.305115902750000068e+01 4.656000000000000139e-01 -7.000000000000000666e-02 1.304519330999999838e+01 4.656000000000000139e-01 -7.499999999999999722e-02 1.303878568749999900e+01 4.656000000000000139e-01 -8.000000000000000167e-02 1.303193615999999899e+01 4.656000000000000139e-01 -8.500000000000000611e-02 1.302464472749999835e+01 4.656000000000000139e-01 -8.999999999999999667e-02 1.301691139000000064e+01 4.656000000000000139e-01 -9.500000000000000111e-02 1.300873614750000051e+01 4.656000000000000139e-01 -1.000000000000000056e-01 1.300011899999999798e+01 4.656000000000000139e-01 -1.049999999999999961e-01 1.299105994749999837e+01 4.656000000000000139e-01 -1.100000000000000006e-01 1.298155898999999813e+01 4.656000000000000139e-01 -1.150000000000000050e-01 1.297161612749999904e+01 4.656000000000000139e-01 -1.199999999999999956e-01 1.296123135999999931e+01 4.656000000000000139e-01 -1.250000000000000000e-01 1.295040468749999896e+01 4.656000000000000139e-01 -1.300000000000000044e-01 1.293913610999999797e+01 4.656000000000000139e-01 -1.350000000000000089e-01 1.292742562749999813e+01 4.656000000000000139e-01 -1.400000000000000133e-01 1.291527323999999766e+01 4.656000000000000139e-01 -1.449999999999999900e-01 1.290267894749999833e+01 4.656000000000000139e-01 -1.499999999999999944e-01 1.288964274999999837e+01 4.656000000000000139e-01 -1.549999999999999989e-01 1.287616464749999778e+01 4.656000000000000139e-01 -1.600000000000000033e-01 1.286224463999999834e+01 4.656000000000000139e-01 -1.650000000000000078e-01 1.284788272749999827e+01 4.656000000000000139e-01 -1.700000000000000122e-01 1.283307890999999756e+01 4.656000000000000139e-01 -1.750000000000000167e-01 1.281783318749999800e+01 4.656000000000000139e-01 -1.799999999999999933e-01 1.280214555999999781e+01 4.656000000000000139e-01 -1.849999999999999978e-01 1.278601602750000055e+01 4.656000000000000139e-01 -1.900000000000000022e-01 1.276944458999999910e+01 4.656000000000000139e-01 -1.950000000000000067e-01 1.215555970599999824e+01 4.656000000000000139e-01 -2.000000000000000111e-01 1.213881199999999794e+01 4.656000000000000139e-01 -2.050000000000000155e-01 1.212171632399999766e+01 4.656000000000000139e-01 -2.099999999999999922e-01 1.210426853200000075e+01 4.656000000000000139e-01 -2.149999999999999967e-01 1.208646447799999812e+01 4.656000000000000139e-01 -2.200000000000000011e-01 1.206830001600000024e+01 4.656000000000000139e-01 -2.250000000000000056e-01 1.204977099999999801e+01 4.656000000000000139e-01 -2.300000000000000100e-01 1.203087328400000011e+01 4.656000000000000139e-01 -2.350000000000000144e-01 1.201160272199999746e+01 4.656000000000000139e-01 -2.399999999999999911e-01 1.199195516800000050e+01 4.656000000000000139e-01 -2.449999999999999956e-01 1.197192647600000015e+01 4.656000000000000139e-01 -2.500000000000000000e-01 1.195151249999999798e+01 4.656000000000000139e-01 -2.550000000000000044e-01 1.193070909399999913e+01 4.656000000000000139e-01 -2.600000000000000089e-01 1.190951211199999804e+01 4.656000000000000139e-01 -2.650000000000000133e-01 1.188791740799999808e+01 4.656000000000000139e-01 -2.700000000000000178e-01 1.186592083599999903e+01 4.656000000000000139e-01 -2.750000000000000222e-01 1.184351824999999891e+01 4.656000000000000139e-01 -2.800000000000000266e-01 1.182070550399999931e+01 4.656000000000000139e-01 -2.850000000000000311e-01 1.179747845200000000e+01 4.656000000000000139e-01 -2.899999999999999800e-01 1.177383294799999902e+01 4.656000000000000139e-01 -2.949999999999999845e-01 1.174976484599999793e+01 4.656000000000000139e-01 -2.999999999999999889e-01 1.172527000000000008e+01 4.656000000000000139e-01 -3.049999999999999933e-01 1.170034426399999994e+01 4.656000000000000139e-01 -3.099999999999999978e-01 1.167498349199999907e+01 4.656000000000000139e-01 -3.150000000000000022e-01 1.164918353800000084e+01 4.656000000000000139e-01 -3.200000000000000067e-01 1.162294025599999969e+01 4.656000000000000139e-01 -3.250000000000000111e-01 1.159624949999999899e+01 4.656000000000000139e-01 -3.300000000000000155e-01 1.156910712400000030e+01 4.656000000000000139e-01 -3.350000000000000200e-01 1.154150898199999808e+01 4.656000000000000139e-01 -3.400000000000000244e-01 1.151345092800000103e+01 4.656000000000000139e-01 -3.450000000000000289e-01 1.148492881600000004e+01 4.656000000000000139e-01 -3.500000000000000333e-01 1.145593850000000025e+01 4.656000000000000139e-01 -3.549999999999999822e-01 1.142647583399999967e+01 4.656000000000000139e-01 -3.599999999999999867e-01 1.139653667199999987e+01 4.656000000000000139e-01 -3.649999999999999911e-01 1.136611686799999887e+01 4.656000000000000139e-01 -3.699999999999999956e-01 1.133521227600000003e+01 4.656000000000000139e-01 -3.750000000000000000e-01 1.130381874999999958e+01 4.656000000000000139e-01 -3.800000000000000044e-01 1.127193214399999732e+01 4.656000000000000139e-01 -3.850000000000000089e-01 1.123954831200000015e+01 4.656000000000000139e-01 -3.900000000000000133e-01 1.120666310800000076e+01 4.656000000000000139e-01 -3.950000000000000178e-01 1.117327238600000072e+01 4.656000000000000139e-01 -4.000000000000000222e-01 1.113937199999999983e+01 4.656000000000000139e-01 -4.050000000000000266e-01 1.110495780399999788e+01 4.656000000000000139e-01 -4.100000000000000311e-01 1.107002565199999999e+01 4.656000000000000139e-01 -4.150000000000000355e-01 1.103457139800000064e+01 4.656000000000000139e-01 -4.199999999999999845e-01 1.099859089599999784e+01 4.656000000000000139e-01 -4.249999999999999889e-01 1.096208000000000027e+01 4.656000000000000139e-01 -4.299999999999999933e-01 1.092503456400000061e+01 4.656000000000000139e-01 -4.349999999999999978e-01 1.088745044199999867e+01 4.656000000000000139e-01 -4.400000000000000022e-01 1.084932348799999779e+01 4.656000000000000139e-01 -4.450000000000000067e-01 1.081064955599999955e+01 4.656000000000000139e-01 -4.500000000000000111e-01 1.077142450000000018e+01 4.656000000000000139e-01 -4.550000000000000155e-01 1.073164417399999770e+01 4.656000000000000139e-01 -4.600000000000000200e-01 1.069130443199999725e+01 4.656000000000000139e-01 -4.650000000000000244e-01 1.065040112800000038e+01 4.656000000000000139e-01 -4.700000000000000289e-01 1.060893011599999980e+01 4.656000000000000139e-01 -4.750000000000000333e-01 1.056688724999999884e+01 4.656000000000000139e-01 -4.799999999999999822e-01 1.052426838399999909e+01 4.656000000000000139e-01 -4.849999999999999867e-01 1.048106937200000033e+01 4.656000000000000139e-01 -4.899999999999999911e-01 1.043728606799999881e+01 4.656000000000000139e-01 -4.949999999999999956e-01 1.039291432599999965e+01 4.656000000000000139e-01 -5.000000000000000000e-01 1.034794999999999909e+01 4.656000000000000139e-01 -5.050000000000000044e-01 1.030238894400000049e+01 4.656000000000000139e-01 -5.100000000000000089e-01 1.025622701200000009e+01 4.656000000000000139e-01 -5.150000000000000133e-01 1.020946005799999767e+01 4.656000000000000139e-01 -5.200000000000000178e-01 1.016208393600000015e+01 4.656000000000000139e-01 -5.250000000000000222e-01 1.011409450000000021e+01 4.656000000000000139e-01 -5.300000000000000266e-01 1.006548760399999765e+01 4.656000000000000139e-01 -5.350000000000000311e-01 1.001625910199999758e+01 4.656000000000000139e-01 -5.400000000000000355e-01 9.966404847999999816e+00 4.656000000000000139e-01 -5.450000000000000400e-01 9.915920695999997037e+00 4.656000000000000139e-01 -5.500000000000000444e-01 5.554404287499999704e+00 4.956999999999999740e-01 -5.550000000000000488e-01 5.538461504787499656e+00 4.956999999999999740e-01 -5.600000000000000533e-01 5.522538668799999328e+00 4.956999999999999740e-01 -5.650000000000000577e-01 5.506633469012498949e+00 4.956999999999999740e-01 -5.700000000000000622e-01 5.490743594899998747e+00 4.956999999999999740e-01 -5.750000000000000666e-01 5.474866735937498952e+00 4.956999999999999740e-01 -5.799999999999999600e-01 5.459000581599998903e+00 4.956999999999999740e-01 -5.849999999999999645e-01 5.443142821362499717e+00 4.956999999999999740e-01 -5.899999999999999689e-01 5.427291144699998959e+00 4.956999999999999740e-01 -5.949999999999999734e-01 5.411443241087500411e+00 4.956999999999999740e-01 -5.999999999999999778e-01 5.395596799999999860e+00 4.956999999999999740e-01 -6.049999999999999822e-01 5.379749510912500199e+00 4.956999999999999740e-01 -6.099999999999999867e-01 5.363899063299999881e+00 4.956999999999999740e-01 -6.149999999999999911e-01 5.348043146637500023e+00 4.956999999999999740e-01 -6.199999999999999956e-01 5.332179450399999965e+00 4.956999999999999740e-01 -6.250000000000000000e-01 5.316305664062499936e+00 4.956999999999999740e-01 -6.300000000000000044e-01 5.300419477100000165e+00 4.956999999999999740e-01 -6.350000000000000089e-01 5.284518578987499993e+00 4.956999999999999740e-01 -6.400000000000000133e-01 5.268600659199999647e+00 4.956999999999999740e-01 -6.450000000000000178e-01 5.252663407212500246e+00 4.956999999999999740e-01 -6.500000000000000222e-01 5.236704512500000241e+00 4.956999999999999740e-01 -6.550000000000000266e-01 5.220721664537499862e+00 4.956999999999999740e-01 -6.600000000000000311e-01 5.204712552800000225e+00 4.956999999999999740e-01 -6.650000000000000355e-01 5.188674866762499782e+00 4.956999999999999740e-01 -6.700000000000000400e-01 5.172606295899998763e+00 4.956999999999999740e-01 -6.750000000000000444e-01 5.156504529687500060e+00 4.956999999999999740e-01 -6.800000000000000488e-01 5.140367257600000350e+00 4.956999999999999740e-01 -6.850000000000000533e-01 5.124192169112498974e+00 4.956999999999999740e-01 -6.900000000000000577e-01 5.107976953699998823e+00 4.956999999999999740e-01 -6.950000000000000622e-01 5.091719300837499240e+00 4.956999999999999740e-01 -7.000000000000000666e-01 5.075416899999999565e+00 4.956999999999999740e-01 -7.049999999999999600e-01 5.059067440662500914e+00 4.956999999999999740e-01 -7.099999999999999645e-01 5.042668612299999964e+00 4.956999999999999740e-01 -7.149999999999999689e-01 5.026218104387499608e+00 4.956999999999999740e-01 -7.199999999999999734e-01 5.009713606400000074e+00 4.956999999999999740e-01 -7.249999999999999778e-01 4.993152807812499816e+00 4.956999999999999740e-01 -7.299999999999999822e-01 4.976533398100000838e+00 4.956999999999999740e-01 -7.349999999999999867e-01 4.959853066737499816e+00 4.956999999999999740e-01 -7.399999999999999911e-01 4.943109503199998755e+00 4.956999999999999740e-01 -7.449999999999999956e-01 4.926300396962498773e+00 4.956999999999999740e-01 -7.500000000000000000e-01 4.909423437500000098e+00 4.956999999999999740e-01 -7.550000000000000044e-01 4.892476314287500294e+00 4.956999999999999740e-01 -7.600000000000000089e-01 4.875456716799999590e+00 4.956999999999999740e-01 -7.650000000000000133e-01 4.858362334512499103e+00 4.956999999999999740e-01 -7.700000000000000178e-01 4.841190856899999950e+00 4.956999999999999740e-01 -7.750000000000000222e-01 4.823939973437498807e+00 4.956999999999999740e-01 -7.800000000000000266e-01 4.806607373599999455e+00 4.956999999999999740e-01 -7.850000000000000311e-01 4.789190746862499459e+00 4.956999999999999740e-01 -7.900000000000000355e-01 4.771687782699999936e+00 4.956999999999999740e-01 -7.950000000000000400e-01 4.754096170587500225e+00 4.956999999999999740e-01 -8.000000000000000444e-01 4.736413599999998780e+00 4.956999999999999740e-01 -8.050000000000000488e-01 4.718637760412498494e+00 4.956999999999999740e-01 -8.100000000000000533e-01 4.700766341299999596e+00 4.956999999999999740e-01 -8.150000000000000577e-01 4.682797032137498761e+00 4.956999999999999740e-01 -8.200000000000000622e-01 4.664727522400000659e+00 4.956999999999999740e-01 -8.250000000000000666e-01 4.646555501562500190e+00 4.956999999999999740e-01 -8.300000000000000711e-01 4.628278659099998471e+00 4.956999999999999740e-01 -8.349999999999999645e-01 4.609894684487501060e+00 4.956999999999999740e-01 -8.399999999999999689e-01 4.591401267200000191e+00 4.956999999999999740e-01 -8.449999999999999734e-01 4.572796096712498759e+00 4.956999999999999740e-01 -8.499999999999999778e-01 4.554076862499999656e+00 4.956999999999999740e-01 -8.549999999999999822e-01 4.535241254037499559e+00 4.956999999999999740e-01 -8.599999999999999867e-01 4.516286960799998695e+00 4.956999999999999740e-01 -8.649999999999999911e-01 4.497211672262499960e+00 4.956999999999999740e-01 -8.699999999999999956e-01 4.478013077900000027e+00 4.956999999999999740e-01 -8.750000000000000000e-01 4.458688867187500016e+00 4.956999999999999740e-01 -8.800000000000000044e-01 4.439236729599999265e+00 4.956999999999999740e-01 -8.850000000000000089e-01 4.419654354612499780e+00 4.956999999999999740e-01 -8.900000000000000133e-01 4.399939431700000014e+00 4.956999999999999740e-01 -8.950000000000000178e-01 3.991877999999999815e+00 4.956999999999999740e-01 -9.000000000000000222e-01 3.984460000000000335e+00 4.956999999999999740e-01 -9.050000000000000266e-01 3.977041999999999966e+00 4.956999999999999740e-01 -9.100000000000000311e-01 3.942281999999999176e+00 4.956999999999999740e-01 -9.150000000000000355e-01 3.902132999999998741e+00 4.956999999999999740e-01 -9.200000000000000400e-01 3.861983999999999195e+00 4.956999999999999740e-01 -9.250000000000000444e-01 3.821834999999998761e+00 4.956999999999999740e-01 -9.300000000000000488e-01 3.781685999999999215e+00 4.956999999999999740e-01 -9.350000000000000533e-01 3.741536999999999225e+00 4.956999999999999740e-01 -9.400000000000000577e-01 3.532669999999999533e+00 4.956999999999999740e-01 -9.450000000000000622e-01 3.513647499999999813e+00 4.956999999999999740e-01 -9.500000000000000666e-01 3.494624999999999648e+00 4.956999999999999740e-01 -9.550000000000000711e-01 3.475602499999999484e+00 4.956999999999999740e-01 -9.599999999999999645e-01 3.456580000000000208e+00 4.956999999999999740e-01 -9.649999999999999689e-01 3.437557500000000044e+00 4.956999999999999740e-01 -9.699999999999999734e-01 3.362627999999999506e+00 4.956999999999999740e-01 -9.749999999999999778e-01 3.366089999999999804e+00 4.956999999999999740e-01 -9.799999999999999822e-01 3.369551999999999659e+00 4.956999999999999740e-01 -9.849999999999999867e-01 3.373013999999999513e+00 4.956999999999999740e-01 -9.899999999999999911e-01 3.376475999999999811e+00 4.956999999999999740e-01 -9.949999999999999956e-01 3.379938000000000109e+00 4.956999999999999740e-01 -1.000000000000000000e+00 1.020000000000000018e+00 4.956999999999999740e-01 diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 4a30854c0..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index f168e19e5..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 4349be8cf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 813d4ccd5..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index c25247725..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 760bb460e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/convert_from_mass_eigenstate_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index b8bd2293c..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index 45cd6fedf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 557213994..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 89d039817..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 109badb61..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 18260525e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_decay_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 97e919348..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 24a3ed9d6..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 091f672f8..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 404e1fe01..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 13198d54a..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 3b965adff..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_mat_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 7e050a8e3..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index fc2f9954c..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 6c8d0af42..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index cf31bb03b..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 923f2dac7..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 06b518a71..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_H_vac_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 24380d9b9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index 5659edc5e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 3e575fdb2..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index c2b3cde15..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 85587a406..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 91f001ff2..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 0c1a250f1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 6124203bf..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 3d8b726ef..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 4bd61acab..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index 018dde717..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 1bcbf8640..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_dms_numerical_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 641defa15..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index f66ee764a..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 8dc61275c..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index b169110d2..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 19168f0ee..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 1cd3d60d1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 2636e0e93..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 30dd46978..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index f3e588359..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 65b3fec04..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 77e85f734..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 225c7a4d9..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 22158002c..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 7dbf261ef..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index 316f9e79f..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index 97895d5b0..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index c63295c96..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 826ff6e10..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 61bd5bd2a..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index cd277781f..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 212e3e800..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index d199ba81b..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index ad6ea7a48..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 4a4260394..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index a4171be77..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 1f05c1325..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 2f426b993..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 5dc400e7d..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/get_transition_matrix_massbasis_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f4.pkl deleted file mode 100644 index d0c293bfe..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f8.pkl deleted file mode 100644 index a55ed216e..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index af586c967..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 9ffce0e43..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 311e31b9a..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f8.pkl deleted file mode 100644 index ef41664b5..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f4.pkl deleted file mode 100644 index e7e47a441..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f8.pkl deleted file mode 100644 index 1e5a96d6f..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 83e76b500..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index e93d45e07..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 204ea35fe..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 57a0186af..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/product_hostfunc__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f4.pkl deleted file mode 100644 index 17d499466..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f8.pkl deleted file mode 100644 index 41e3c1352..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_io__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f4.pkl deleted file mode 100644 index 44b7b7781..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f8.pkl deleted file mode 100644 index 6480a09b1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_lri_std_mat__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f4.pkl deleted file mode 100644 index 3ac86ae37..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f8.pkl deleted file mode 100644 index 8c636e7d6..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_w_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f4.pkl deleted file mode 100644 index c7ef3d3ec..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f8.pkl deleted file mode 100644 index 4891f6dec..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_core_wo_constrain_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f4.pkl deleted file mode 100644 index 886dbb953..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f8.pkl deleted file mode 100644 index 4fe6978ae..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_mass_of_earth_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f4.pkl deleted file mode 100644 index 3f7b43452..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f8.pkl deleted file mode 100644 index 4e1f85ed4..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_E1TeV__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f4.pkl deleted file mode 100644 index 44b7b7781..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f8.pkl deleted file mode 100644 index 6480a09b1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f4.pkl deleted file mode 100644 index 6b2892d78..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f8.pkl deleted file mode 100644 index 9270b1de0..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_blearth__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f4.pkl deleted file mode 100644 index 3dbf0bed0..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f8.pkl deleted file mode 100644 index 4aea8e530..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_no_nubar__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f4.pkl deleted file mode 100644 index 4b2b80a76..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f8.pkl deleted file mode 100644 index 00e15049d..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f4.pkl deleted file mode 100644 index 44b7b7781..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f8.pkl deleted file mode 100644 index 6480a09b1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_decay_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f4.pkl deleted file mode 100644 index 44b7b7781..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f8.pkl deleted file mode 100644 index 6480a09b1..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_std_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f4.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f4.pkl deleted file mode 100644 index 74d043718..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f4.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f8.pkl b/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f8.pkl deleted file mode 100644 index 884bf2b1b..000000000 Binary files a/pisa_examples/resources/osc/numba_osc_tests_data/propagate_scalar__nufit32_vac_nsi_no__f8.pkl and /dev/null differ diff --git a/pisa_examples/resources/osc/osc_NSI.cfg b/pisa_examples/resources/osc/osc_NSI.cfg deleted file mode 100644 index 4169728b7..000000000 --- a/pisa_examples/resources/osc/osc_NSI.cfg +++ /dev/null @@ -1,8 +0,0 @@ -[nsi] - -eps_ee = 0. -eps_emu = 0. -eps_etau = 0. -eps_mumu = 0. -eps_mutau = 0. -eps_tautau = 0. diff --git a/pisa_examples/resources/pid/vlvnt_pid_energy_param.json b/pisa_examples/resources/pid/vlvnt_pid_energy_param.json deleted file mode 100644 index 4f8d5da33..000000000 --- a/pisa_examples/resources/pid/vlvnt_pid_energy_param.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "numu_cc + numubar_cc": { - "track": "lambda E: 0.9*(1 - np.exp(-0.2*(E + 0.6)))", - "cascade": "lambda E: 1.0 - 0.9*(1 - np.exp(-0.2*(E + 0.6)))" - }, - "nue_cc + nuebar_cc": { - "track": "lambda E: np.full_like(E, fill_value=0.15)", - "cascade": "lambda E: np.full_like(E, fill_value=1.0 - 0.15)" - }, - "nutau_cc + nutaubar_cc": { - "track": "lambda E: np.full_like(E, fill_value=0.25)", - "cascade": "lambda E: np.full_like(E, fill_value=1.0 - 0.25)" - }, - "nuall_nc + nuallbar_nc": { - "track": "lambda E: np.full_like(E, fill_value=0.15)", - "cascade": "lambda E: np.full_like(E, fill_value=1.0 - 0.15)" - } -} diff --git a/pisa_examples/resources/priors/README.md b/pisa_examples/resources/priors/README.md deleted file mode 100644 index 071c6b8a1..000000000 --- a/pisa_examples/resources/priors/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Non-Standard Priors - -Typically, we include priors on the nuisance parameters in our fits by adding a penalty term according to a gaussian with a width of some 1 sigma uncertainty on the parameter. In the case of non-standard priors, we instead spline a penalty surface and then just evaluate this at the parameter value. - -Here, we only currently use non-standard priors on the atmospheric oscillations mixing angle, θ23, taken from the [Nu-Fit](http://www.nu-fit.org/) global fits. The naming convention of these files is as follows: - -1. All files should start with `nufit`, since in the future there may be a want to take prior surfaces from other global fits, and this will aid in distinguishing these. -2. The version is then listed. This is done without the decimal point and prefixed with a `v`. So version 2.0 is `v20`. -3. Exactly which penalty surface has been splined is then written here. This will be explained after the generic naming convention. -4. The variable that the penalty surface is for is then written next. All of these should say `theta23`. -5. Lastly, the file ends with either `spline` or `splines`. The plural or singular is important here since it tells us if there are different choices in here. For example, we often have a different penalty depending on which ordering hypothesis is being tested, but not always. - -These should all be `json` files since they are python dictionary objects that will be loaded in to the `Prior` class (see the PISA core objects for the source code). - -For the case of θ23 splines, there are three treatments that have been applied in calculating the penalty surfaces. Since & θ23 is heavily degenerate with the ordering itself it may be desirable to remove any prior information on the ordering that is brought along with the & θ23 prior. Therefore, the three treatments are: - -1. `standard` - This refers to just splining the penalty surfaces as given by directly by Nu-Fit. So there is a separate surface for each of the ordering hypotheses and there exists some Δχ2 between the respective minima. -2. `shifted` - Again we still have a separate surface for each of the ordering hypotheses, but the disfavoured one has had the Δχ2 between the respective minima subtracted from all of the knots in the spline. -3. `minimised` - Since one could believe that a separate penalty surface depending on ordering hypothesis could still be carrying some form of prior information on the ordering, this instead constructs a single spline as the minimum of both of the standard splines across θ23. Note this is a single spline and this fact is reflected in the filename. - -All of these spline surfaces can be re-calculated with the `make_nufit_theta23_spline_priors.py` for any future iterations of Nu-Fit (with the caveat that they do not change their standard data release format). Simply download the `.txt.gz` file they provide with all of their Δχ2 surfaces and point this script to them. It is designed to intelligently calculate an appropriate name based on the one in the file. - -Also of note are the following two points: - -* The provided data from Nu-Fit are the Δχ2 surfaces, but since the base metric in PISA is the likelihood, these are divided by 2 and the spline is taken of the negative of the data. If one requests some form of χ2 as the minimisation metric, the appropriate factors will be applied to turn it back in to the correct form. -* In the case of Nu-Fit 2.1 there are two versions of all of the splines labelled `LEM` and `LID`. This is due to the way NOvA released their data for this global fit. Please see the Nu-Fit website and the appropriate NOvA [paper](https://arxiv.org/abs/1601.05022) for more details. \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv20minimisedtheta23spline.json b/pisa_examples/resources/priors/nufitv20minimisedtheta23spline.json deleted file mode 100644 index 0034fbc73..000000000 --- a/pisa_examples/resources/priors/nufitv20minimisedtheta23spline.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "theta23": { - "coeffs": [ - -66.28315, - -63.508167239279445, - -59.4909634529314, - -54.41885735864298, - -50.78428272716664, - -47.30479190412995, - -43.97994849494945, - -40.8031726616054, - -37.7767029537664, - -34.89669008848113, - -32.16077653050961, - -29.567809284934057, - -27.114702428639127, - -24.800123797712352, - -22.61666578488931, - -20.57892123495728, - -18.585930162964214, - -16.747342507884337, - -15.018443972398005, - -13.415287333005184, - -11.931742521837624, - -10.55413699620965, - -9.293634991527723, - -8.134554955431868, - -7.078367501845456, - -6.120832592530349, - -5.2508164069689185, - -4.478718989586475, - -3.783651473827573, - -3.1765813826620195, - -2.640616620208915, - -2.1768472031069557, - -1.7847090527086458, - -1.4492241532470977, - -1.1743503439210472, - -0.9570229047926275, - -0.7803514351561798, - -0.6533106662271331, - -0.5655104229020644, - -0.5090372192751236, - -0.48334299161881916, - -0.4842795271005855, - -0.5040664252031184, - -0.5438734621761565, - -0.5892280415931317, - -0.6468707394582153, - -0.710720849602568, - -0.7736706215027124, - -0.8350216189127391, - -0.8947665018331142, - -0.9418379253157235, - -1.0063403780400009, - -0.9679950577311652, - -0.9189518041788977, - -0.859228374474341, - -0.7878345027529704, - -0.7069928228079354, - -0.6203276929766046, - -0.527156407399741, - -0.4311260506836312, - -0.33760526057043344, - -0.24512889550020248, - -0.16413968732445156, - -0.08954279129420405, - -0.03513992825635812, - -0.004135538721873105, - 0.005650591921755924, - -0.018503383314909746, - -0.08083839755507355, - -0.18201488478224126, - -0.3349434684989299, - -0.5385118921433059, - -0.801228780681947, - -1.1290152991090694, - -1.5240738366217295, - -1.9954994857966704, - -2.542546335730152, - -3.1755758728996124, - -3.8986603414576213, - -4.715018785219014, - -5.626297396113559, - -6.641593800403789, - -7.763688450844121, - -8.996581856449993, - -10.34192235478934, - -11.805724881314399, - -13.394237355408604, - -14.973531605562085, - -16.710560671736285, - -18.56321853126182, - -20.5484539244782, - -22.665608711367966, - -24.91837780714683, - -27.30911162238883, - -29.84046762118355, - -32.51462627528018, - -35.33374692186527, - -38.30089290386336, - -42.467118171766685, - -45.7993532290556, - -48.115175, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv20shiftedtheta23splines.json b/pisa_examples/resources/priors/nufitv20shiftedtheta23splines.json deleted file mode 100644 index f9d57dfc9..000000000 --- a/pisa_examples/resources/priors/nufitv20shiftedtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -66.78147415000001, - -63.95384663374347, - -59.85852557096607, - -54.68891118127808, - -50.981081281007285, - -47.42737958382641, - -44.0306212522786, - -40.78774885876208, - -37.69540480823846, - -34.75395556728191, - -31.957320919667424, - -29.30163294532331, - -26.789796526574396, - -24.418130406121687, - -22.183278055235498, - -20.07710330455949, - -18.10233822003392, - -16.258895125320677, - -14.531290363409916, - -12.927788915237638, - -11.44433601917147, - -10.066705986990161, - -8.806210517567072, - -7.647128738352304, - -6.590941749787847, - -5.633406716393031, - -4.763390563945294, - -3.991293137724061, - -3.296225624324851, - -2.6891555325292154, - -2.1531907702444006, - -1.6894213530974218, - -1.2972832027113959, - -0.9617983032456108, - -0.6869244939242459, - -0.46959705478134467, - -0.2929255851980248, - -0.16588481607133704, - -0.07808457348236746, - -0.02161136711325473, - 0.00408285032605814, - 0.003146352917451149, - -0.016640687084864735, - -0.05644719511219808, - -0.10180374652816764, - -0.15943909133102876, - -0.2233166232475664, - -0.2861641157105579, - -0.34789665878386705, - -0.40621800069591174, - -0.45860143117875635, - -0.5032789176792993, - -0.5389335496554623, - -0.564952974071586, - -0.58102308157203, - -0.5885214787922957, - -0.5847163026376001, - -0.5732131241986788, - -0.5596015265092078, - -0.5350542118567962, - -0.5131343641031569, - -0.49417238195688745, - -0.4752417130497335, - -0.46504776486961225, - -0.4598808256957812, - -0.4697203524580686, - -0.48665253663560987, - -0.515154717693868, - -0.5745844819542696, - -0.6664395701877134, - -0.8010081731217161, - -0.9848856179303731, - -1.2195393958814387, - -1.5146210893701222, - -1.8732027872063222, - -2.2998621078893846, - -2.799635500016471, - -3.380378825313766, - -4.044777193756942, - -4.7948614909416305, - -5.639329437222027, - -6.581766837338092, - -7.624767115371361, - -8.771655793853615, - -10.028704406608806, - -11.398646868034579, - -12.885149899608592, - -14.491946989813627, - -16.22155932168043, - -18.076217725847496, - -20.060913376595856, - -22.178213820151264, - -24.430943598753117, - -26.821688029615768, - -29.353041161445006, - -32.027200590028976, - -34.84632102735235, - -37.813467065840214, - -41.979692313681596, - -45.31192738313699, - -47.62774915, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -66.28315, - -63.508167238837764, - -59.49096345380634, - -54.418857357346894, - -50.78428273198367, - -47.304791886301416, - -43.97994856093319, - -40.80317241733628, - -37.77670385828225, - -34.89668673823097, - -32.160788942709196, - -29.56776328811073, - -27.114872923688726, - -24.79949167997948, - -22.619009927335785, - -20.570226275946528, - -18.64640108433211, - -16.84855879838223, - -15.173582432899412, - -13.617457008597126, - -12.17592702238118, - -10.846941304205146, - -9.622600090385738, - -8.504011036428489, - -7.486163585122075, - -6.561384562504333, - -5.729050828576934, - -4.981321795005138, - -4.318744969356664, - -3.7308698686133006, - -3.2196346102421582, - -2.776065177536169, - -2.39230624441598, - -2.072347943075156, - -1.803626736985194, - -1.5850332515632164, - -1.4128673941708518, - -1.27442272015659, - -1.1736465584856395, - -1.1002880327313185, - -1.0529527962940697, - -1.0268927165424289, - -1.0134255645702168, - -1.0154523635113184, - -1.0219561291431931, - -1.0318793948834213, - -1.0434252015440848, - -1.0516997770560068, - -1.0548463743704855, - -1.0480344934721826, - -1.0322317448829565, - -1.0058011726731961, - -0.9681395740710618, - -0.9189130654874622, - -0.8592387602344821, - -0.7878317179330094, - -0.7069935696377283, - -0.6203274926622617, - -0.527156461136148, - -0.4311260362660743, - -0.3376052644392803, - -0.24512889446186484, - -0.16413968760316847, - -0.08954279121937754, - -0.03513992827644943, - -0.004135538716479008, - 0.005650591920312677, - -0.018503383314542935, - -0.08083839755509391, - -0.18201488478252847, - -0.33494346849775725, - -0.5385118921477225, - -0.8012287806654016, - -1.1290152991710372, - -1.5240738363896047, - -1.9954994866663345, - -2.5425463324713236, - -3.17557588511342, - -3.8986602956727783, - -4.715018956881292, - -5.626296752371345, - -6.641596214945023, - -7.7636793925918015, - -8.996615845817173, - -10.341794789521465, - -11.806203747796514, - -13.392439349569628, - -15.104056857771845, - -16.94426110976811, - -18.91609368232303, - -21.02267267190895, - -23.2653120895484, - -25.64813517827671, - -28.172637331513567, - -30.84240176217865, - -33.65943679160072, - -36.62595825833456, - -39.74388736468166, - -44.11945150373315, - -47.61399704763819, - -50.0394, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv20standardtheta23splines.json b/pisa_examples/resources/priors/nufitv20standardtheta23splines.json deleted file mode 100644 index 17ad2b3f4..000000000 --- a/pisa_examples/resources/priors/nufitv20standardtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -67.26890000000002, - -64.44127248374346, - -60.34595142096609, - -55.176337031278074, - -51.4685071310073, - -47.9148054338264, - -44.51804710227861, - -41.275174708762094, - -38.182830658238444, - -35.24138141728191, - -32.44474676966742, - -29.78905879532331, - -27.2772223765744, - -24.90555625612169, - -22.6707039052355, - -20.56452915455949, - -18.589764070033926, - -16.746320975320682, - -15.018716213409917, - -13.415214765237632, - -11.931761869171474, - -10.554131836990157, - -9.293636367567073, - -8.134554588352305, - -7.0783675997878435, - -6.120832566393034, - -5.250816413945294, - -4.47871898772406, - -3.7836514743248517, - -3.176581382529215, - -2.6406166202444017, - -2.176847203097421, - -1.7847090527113958, - -1.4492241532456105, - -1.174350343924246, - -0.957022904781345, - -0.7803514351980249, - -0.6533106660713369, - -0.5655104234823672, - -0.509037217113255, - -0.48334299967394184, - -0.48427949708254864, - -0.5040665370848652, - -0.5438730451121978, - -0.5892295965281676, - -0.6468649413310289, - -0.7107424732475665, - -0.7735899657105577, - -0.8353225087838669, - -0.8936438506959119, - -0.9460272811787562, - -0.9907047676792995, - -1.0263593996554623, - -1.0523788240715855, - -1.0684489315720302, - -1.0759473287922952, - -1.0721421526376003, - -1.0606389741986784, - -1.047027376509208, - -1.0224800618567962, - -1.0005602141031569, - -0.9815982319568879, - -0.9626675630497332, - -0.9524736148696122, - -0.9473066756957811, - -0.9571462024580685, - -0.97407838663561, - -1.002580567693868, - -1.0620103319542697, - -1.1538654201877132, - -1.2884340231217166, - -1.4723114679303726, - -1.706965245881438, - -2.0020469393701226, - -2.3606286372063217, - -2.7872879578893848, - -3.287061350016472, - -3.8678046753137663, - -4.532203043756943, - -5.282287340941629, - -6.12675528722203, - -7.06919268733809, - -8.11219296537136, - -9.259081643853614, - -10.516130256608804, - -11.88607271803458, - -13.37257574960859, - -14.979372839813623, - -16.708985171680435, - -18.563643575847493, - -20.548339226595864, - -22.66563967015127, - -24.918369448753104, - -27.309113879615786, - -29.840467011444986, - -32.514626440029005, - -35.33374687735235, - -38.30089291584021, - -42.46711816368159, - -45.799353233136976, - -48.115175, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -66.28315, - -63.508167238837764, - -59.49096345380634, - -54.418857357346894, - -50.78428273198367, - -47.304791886301416, - -43.97994856093319, - -40.80317241733628, - -37.77670385828225, - -34.89668673823097, - -32.160788942709196, - -29.56776328811073, - -27.114872923688726, - -24.79949167997948, - -22.619009927335785, - -20.570226275946528, - -18.64640108433211, - -16.84855879838223, - -15.173582432899412, - -13.617457008597126, - -12.17592702238118, - -10.846941304205146, - -9.622600090385738, - -8.504011036428489, - -7.486163585122075, - -6.561384562504333, - -5.729050828576934, - -4.981321795005138, - -4.318744969356664, - -3.7308698686133006, - -3.2196346102421582, - -2.776065177536169, - -2.39230624441598, - -2.072347943075156, - -1.803626736985194, - -1.5850332515632164, - -1.4128673941708518, - -1.27442272015659, - -1.1736465584856395, - -1.1002880327313185, - -1.0529527962940697, - -1.0268927165424289, - -1.0134255645702168, - -1.0154523635113184, - -1.0219561291431931, - -1.0318793948834213, - -1.0434252015440848, - -1.0516997770560068, - -1.0548463743704855, - -1.0480344934721826, - -1.0322317448829565, - -1.0058011726731961, - -0.9681395740710618, - -0.9189130654874622, - -0.8592387602344821, - -0.7878317179330094, - -0.7069935696377283, - -0.6203274926622617, - -0.527156461136148, - -0.4311260362660743, - -0.3376052644392803, - -0.24512889446186484, - -0.16413968760316847, - -0.08954279121937754, - -0.03513992827644943, - -0.004135538716479008, - 0.005650591920312677, - -0.018503383314542935, - -0.08083839755509391, - -0.18201488478252847, - -0.33494346849775725, - -0.5385118921477225, - -0.8012287806654016, - -1.1290152991710372, - -1.5240738363896047, - -1.9954994866663345, - -2.5425463324713236, - -3.17557588511342, - -3.8986602956727783, - -4.715018956881292, - -5.626296752371345, - -6.641596214945023, - -7.7636793925918015, - -8.996615845817173, - -10.341794789521465, - -11.806203747796514, - -13.392439349569628, - -15.104056857771845, - -16.94426110976811, - -18.91609368232303, - -21.02267267190895, - -23.2653120895484, - -25.64813517827671, - -28.172637331513567, - -30.84240176217865, - -33.65943679160072, - -36.62595825833456, - -39.74388736468166, - -44.11945150373315, - -47.61399704763819, - -50.0394, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LEMminimisedtheta23spline.json b/pisa_examples/resources/priors/nufitv21LEMminimisedtheta23spline.json deleted file mode 100644 index 8014f41df..000000000 --- a/pisa_examples/resources/priors/nufitv21LEMminimisedtheta23spline.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "theta23": { - "coeffs": [ - -87.60365, - -83.89629228150434, - -78.52904145135217, - -71.74534561171481, - -66.87973282216686, - -62.21912043941955, - -57.77199626661826, - -53.47894814081791, - -49.457825282768106, - -45.58845455004746, - -41.9171401504312, - -38.43362679089714, - -35.13839702818127, - -32.02622516426251, - -29.0958409839403, - -26.332188820790726, - -23.743915344555138, - -21.324179772936702, - -19.070874041923464, - -16.96834626383339, - -15.023709826236558, - -13.23004864927087, - -11.57861524662795, - -10.06186554509271, - -8.684452326924848, - -7.433584589912335, - -6.302652033779131, - -5.292989773980707, - -4.3956702788748965, - -3.5997991327515115, - -2.904999577037708, - -2.305771220251161, - -1.7869535017990654, - -1.3523993000954775, - -0.9959732584909918, - -0.7016428325679016, - -0.46826032014140845, - -0.29759877828690195, - -0.16821218882801203, - -0.09185565286059189, - -0.042826766427093155, - -0.02909750936721572, - -0.03693140553897483, - -0.07036382311045827, - -0.11163303255969306, - -0.16705197632840774, - -0.22741846080136557, - -0.2846130168061095, - -0.341560147821318, - -0.390403168250677, - -0.4317236009423217, - -0.4610577283665897, - -0.47857802135530986, - -0.4823794284519795, - -0.4730527378608295, - -0.44975574577928706, - -0.4136802058114298, - -0.36676469785790666, - -0.315562316120471, - -0.2541332504736885, - -0.1916345577746157, - -0.13501641538136208, - -0.07746734379025538, - -0.03518979135539052, - -0.004204177465164022, - 0.004411515917896459, - -0.013464106727708501, - -0.060511184575385166, - -0.1477114950446937, - -0.2826138121405786, - -0.46867765634487746, - -0.7128568581614815, - -1.0265609738068082, - -1.4158340194958283, - -1.8850764790982446, - -2.44303264679809, - -3.0945005924895703, - -3.8504152377418066, - -4.714850750429284, - -5.691392835191025, - -6.790280832129366, - -8.013392417861713, - -9.369313800098816, - -10.864124306242916, - -12.50204902477537, - -14.287952049386542, - -16.227028194485232, - -18.32397476848948, - -20.583134537227384, - -23.00815454106501, - -25.60303395800858, - -28.372872415289333, - -31.320427815113124, - -34.44858701293543, - -37.76082455697797, - -41.25941608775542, - -44.95329743399322, - -48.8497251972039, - -54.20636989488332, - -58.705113903405106, - -61.68445, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LEMshiftedtheta23splines.json b/pisa_examples/resources/priors/nufitv21LEMshiftedtheta23splines.json deleted file mode 100644 index fd7d5ca90..000000000 --- a/pisa_examples/resources/priors/nufitv21LEMshiftedtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -87.60365, - -83.89629228150434, - -78.52904145135217, - -71.74534561171481, - -66.87973282216686, - -62.21912043941955, - -57.77199626661826, - -53.47894814081791, - -49.457825282768106, - -45.58845455004746, - -41.9171401504312, - -38.43362679089714, - -35.13839702818127, - -32.02622516426251, - -29.0958409839403, - -26.332188820790726, - -23.743915344555138, - -21.324179772936702, - -19.070874041923464, - -16.96834626383339, - -15.023709826236558, - -13.23004864927087, - -11.57861524662795, - -10.06186554509271, - -8.684452326924848, - -7.433584589912335, - -6.302652033779131, - -5.292989773980707, - -4.3956702788748965, - -3.5997991327515115, - -2.904999577037708, - -2.305771220251161, - -1.7869535017990654, - -1.3523993000954775, - -0.9959732584909918, - -0.7016428325679016, - -0.46826032014140845, - -0.29759877828690195, - -0.16821218882801203, - -0.09185565286059189, - -0.042826766427093155, - -0.02909750936721572, - -0.03693140553897483, - -0.07036382311045827, - -0.11163303255969306, - -0.16705197632840774, - -0.22741846080136557, - -0.2846130168061095, - -0.341560147821318, - -0.390403168250677, - -0.4317236009423217, - -0.4610577283665897, - -0.47857802135530986, - -0.4823794284519795, - -0.4730527378608295, - -0.44975574577928706, - -0.4136802058114298, - -0.36676469785790666, - -0.315562316120471, - -0.2541332504736885, - -0.1916345577746157, - -0.13501641538136208, - -0.07746734379025538, - -0.03518979135539052, - -0.004204177465164022, - 0.004411515917896459, - -0.013464106727708501, - -0.060511184575385166, - -0.1477114950446937, - -0.2826138121405786, - -0.46867765634487746, - -0.7128568581614815, - -1.0265609738068082, - -1.4158340194958283, - -1.8850764790982446, - -2.44303264679809, - -3.0945005924895703, - -3.8504152377418066, - -4.714850750429284, - -5.691392835191025, - -6.790280832129366, - -8.013392417861713, - -9.369313800098816, - -10.864124306242916, - -12.50204902477537, - -14.287952049386542, - -16.227028194485232, - -18.32397476848948, - -20.583134537227384, - -23.00815454106501, - -25.60303395800858, - -28.372872415289333, - -31.320427815113124, - -34.44858701293543, - -37.76082455697797, - -41.25941608775542, - -44.95329743399322, - -48.8497251972039, - -54.20636989488332, - -58.705113903405106, - -61.68445, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -87.16170905, - -83.51555400929504, - -78.22214897556272, - -71.5678956625982, - -66.74980376174157, - -62.22236284691796, - -57.793523036798554, - -53.65970563881501, - -49.66971097252021, - -45.88886548648372, - -42.294997380146086, - -38.89159573823766, - -35.67055333034059, - -32.63306340181059, - -29.77262569622717, - -27.0871472624429, - -24.57194594398613, - -22.223510501735962, - -20.03653002885372, - -18.00256454207407, - -16.12146517541555, - -14.387185198973569, - -12.796407857846836, - -11.342071972113155, - -10.019764595527825, - -8.824002340189189, - -7.746877308552995, - -6.784448960114711, - -5.929565707291867, - -5.171470172083882, - -4.511614527954653, - -3.940536247977503, - -3.4520837806888722, - -3.036379712129239, - -2.693050534494996, - -2.4132386387377736, - -2.184677267500767, - -2.012058916105728, - -1.8762524561294835, - -1.7807913375140334, - -1.7120307117356302, - -1.672369390318329, - -1.6454061419732469, - -1.6387785974148612, - -1.6344573997566638, - -1.6362655787949514, - -1.6373753675093057, - -1.6355285953897292, - -1.6214783046494303, - -1.5982273752684333, - -1.562208960880686, - -1.5114365893241695, - -1.4464231353993444, - -1.3646845630065898, - -1.269533784012085, - -1.1602422527360912, - -1.0404298750954268, - -0.9101682915816793, - -0.7746385947006464, - -0.6319653572074904, - -0.4935788470293419, - -0.3655511986754503, - -0.24485944368875834, - -0.13793104081998525, - -0.06230360825529211, - -0.007856896672551404, - 0.005753373798116752, - -0.015175809379655484, - -0.091756427915729, - -0.2193242634139105, - -0.4093290734108286, - -0.6686905967682231, - -1.0020498735744376, - -1.4211860831422038, - -1.930461626491736, - -2.5297271098767156, - -3.235334193124243, - -4.050195918911731, - -4.982146552953477, - -6.032953710151852, - -7.211778508250873, - -8.52304678803708, - -9.973674032562798, - -11.569600873647582, - -13.3159412029933, - -15.21433529876276, - -17.27411301300568, - -19.49697701737843, - -21.889100242667645, - -24.45353892184348, - -27.193035230554404, - -30.113003147484033, - -33.21645086446509, - -36.5062076292926, - -39.9863010767891, - -43.658650394669834, - -47.52144871132182, - -51.60429124955297, - -57.24947967899678, - -61.8565549426547, - -65.00390904999999, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LEMstandardtheta23splines.json b/pisa_examples/resources/priors/nufitv21LEMstandardtheta23splines.json deleted file mode 100644 index 8c7296e58..000000000 --- a/pisa_examples/resources/priors/nufitv21LEMstandardtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -87.60365, - -83.89629228150434, - -78.52904145135217, - -71.74534561171481, - -66.87973282216686, - -62.21912043941955, - -57.77199626661826, - -53.47894814081791, - -49.457825282768106, - -45.58845455004746, - -41.9171401504312, - -38.43362679089714, - -35.13839702818127, - -32.02622516426251, - -29.0958409839403, - -26.332188820790726, - -23.743915344555138, - -21.324179772936702, - -19.070874041923464, - -16.96834626383339, - -15.023709826236558, - -13.23004864927087, - -11.57861524662795, - -10.06186554509271, - -8.684452326924848, - -7.433584589912335, - -6.302652033779131, - -5.292989773980707, - -4.3956702788748965, - -3.5997991327515115, - -2.904999577037708, - -2.305771220251161, - -1.7869535017990654, - -1.3523993000954775, - -0.9959732584909918, - -0.7016428325679016, - -0.46826032014140845, - -0.29759877828690195, - -0.16821218882801203, - -0.09185565286059189, - -0.042826766427093155, - -0.02909750936721572, - -0.03693140553897483, - -0.07036382311045827, - -0.11163303255969306, - -0.16705197632840774, - -0.22741846080136557, - -0.2846130168061095, - -0.341560147821318, - -0.390403168250677, - -0.4317236009423217, - -0.4610577283665897, - -0.47857802135530986, - -0.4823794284519795, - -0.4730527378608295, - -0.44975574577928706, - -0.4136802058114298, - -0.36676469785790666, - -0.315562316120471, - -0.2541332504736885, - -0.1916345577746157, - -0.13501641538136208, - -0.07746734379025538, - -0.03518979135539052, - -0.004204177465164022, - 0.004411515917896459, - -0.013464106727708501, - -0.060511184575385166, - -0.1477114950446937, - -0.2826138121405786, - -0.46867765634487746, - -0.7128568581614815, - -1.0265609738068082, - -1.4158340194958283, - -1.8850764790982446, - -2.44303264679809, - -3.0945005924895703, - -3.8504152377418066, - -4.714850750429284, - -5.691392835191025, - -6.790280832129366, - -8.013392417861713, - -9.369313800098816, - -10.864124306242916, - -12.50204902477537, - -14.287952049386542, - -16.227028194485232, - -18.32397476848948, - -20.583134537227384, - -23.00815454106501, - -25.60303395800858, - -28.372872415289333, - -31.320427815113124, - -34.44858701293543, - -37.76082455697797, - -41.25941608775542, - -44.95329743399322, - -48.8497251972039, - -54.20636989488332, - -58.705113903405106, - -61.68445, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -87.64655000000002, - -84.000394959295, - -78.70698992556275, - -72.05273661259817, - -67.23464471174155, - -62.707203796917966, - -58.27836398679853, - -54.14454658881504, - -50.154551922520184, - -46.37370643648372, - -42.77983833014609, - -39.37643668823767, - -36.15539428034059, - -33.11790435181059, - -30.257466646227165, - -27.571988212442903, - -25.056786893986132, - -22.70835145173596, - -20.521370978853714, - -18.487405492074068, - -16.606306125415557, - -14.872026148973562, - -13.281248807846833, - -11.826912922113156, - -10.504605545527824, - -9.308843290189191, - -8.23171825855299, - -7.269289910114715, - -6.414406657291864, - -5.656311122083881, - -4.996455477954655, - -4.4253771979775, - -3.936924730688873, - -3.521220662129239, - -3.177891484494995, - -2.8980795887377737, - -2.669518217500767, - -2.496899866105728, - -2.361093406129483, - -2.2656322875140336, - -2.19687166173563, - -2.157210340318329, - -2.130247091973246, - -2.1236195474148616, - -2.119298349756663, - -2.121106528794952, - -2.122216317509306, - -2.12036954538973, - -2.106319254649429, - -2.083068325268433, - -2.0470499108806863, - -1.9962775393241696, - -1.9312640853993441, - -1.8495255130065893, - -1.7543747340120857, - -1.6450832027360904, - -1.5252708250954266, - -1.3950092415816788, - -1.2594795447006462, - -1.1168063072074905, - -0.9784197970293416, - -0.8503921486754508, - -0.729700393688758, - -0.6227719908199855, - -0.5471445582552918, - -0.4926978466725515, - -0.4790875762018832, - -0.5000167593796556, - -0.5765973779157287, - -0.7041652134139106, - -0.8941700234108286, - -1.1535315467682228, - -1.486890823574438, - -1.9060270331422038, - -2.415302576491736, - -3.014568059876716, - -3.7201751431242442, - -4.535036868911731, - -5.466987502953476, - -6.5177946601518535, - -7.696619458250871, - -9.007887738037077, - -10.458514982562802, - -12.05444182364758, - -13.800782152993303, - -15.699176248762765, - -17.758953963005677, - -19.981817967378436, - -22.37394119266764, - -24.938379871843498, - -27.677876180554385, - -30.597844097484032, - -33.701291814465094, - -36.991048579292595, - -40.47114202678909, - -44.14349134466983, - -48.006289661321816, - -52.089132199552964, - -57.73432062899681, - -62.341395892654674, - -65.48875, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LIDminimisedtheta23spline.json b/pisa_examples/resources/priors/nufitv21LIDminimisedtheta23spline.json deleted file mode 100644 index 96702d604..000000000 --- a/pisa_examples/resources/priors/nufitv21LIDminimisedtheta23spline.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "theta23": { - "coeffs": [ - -84.97270000000002, - -81.35981167703066, - -76.11563950682104, - -69.5257366836752, - -64.75429691743362, - -60.27328014190766, - -55.89468818037188, - -51.803016795931306, - -47.85825545795177, - -44.12092304724776, - -40.57024724077381, - -37.20892520356583, - -34.031897289376076, - -31.036152291271137, - -28.21747483096241, - -25.565470387657168, - -23.097408153729695, - -20.7473001695785, - -18.532985044207816, - -16.477412483975574, - -14.578258288285385, - -12.827521251321151, - -11.216410850681205, - -9.748215728212537, - -8.407254158653013, - -7.196287794778534, - -6.104620651154004, - -5.126820094336869, - -4.265553104778303, - -3.500741569894502, - -2.8425780897464454, - -2.27140126014185, - -1.7858447017336234, - -1.3818702040866495, - -1.0486289918801412, - -0.7886985271742462, - -0.5856656124074092, - -0.4370272365428138, - -0.34118252666401166, - -0.2847817694842759, - -0.2688863263102242, - -0.2762478401855198, - -0.3177108001514487, - -0.3704954003860868, - -0.4429667762672745, - -0.5260525263235505, - -0.6081918432008987, - -0.6950127070234013, - -0.7801228241435907, - -0.8555884772323555, - -0.9257882368619248, - -0.9770229430408395, - -1.0474018752400784, - -0.9941105602052549, - -0.9292872936127322, - -0.8495338718239408, - -0.7604559520400481, - -0.662145733011228, - -0.5548148022563215, - -0.4442187211122721, - -0.3385636221133872, - -0.23767697251238626, - -0.14685179097703274, - -0.07055570578161932, - -0.020115649133838637, - 0.006807362686864405, - -0.007085196764105565, - -0.05385052210269513, - -0.15555802158996654, - -0.306010085794147, - -0.5224309985869712, - -0.8032401940962902, - -1.1625074866483283, - -1.6042358296828634, - -2.131003581686671, - -2.7563429919374407, - -3.485703663453292, - -4.321725651418736, - -5.271407648739352, - -6.344296918330936, - -7.545069420226557, - -8.879981176679843, - -10.35351072175011, - -11.964528339053915, - -13.74630181165936, - -15.530179332571528, - -17.506820440959526, - -19.630859296823065, - -21.920454284667727, - -24.375654900265076, - -27.00182701608255, - -29.803087869061564, - -32.77938770711358, - -35.937823605317675, - -39.281869735715865, - -42.81113017566584, - -46.534182417290445, - -50.43393453273446, - -55.92894866944879, - -60.334983477545755, - -63.3835, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LIDshiftedtheta23splines.json b/pisa_examples/resources/priors/nufitv21LIDshiftedtheta23splines.json deleted file mode 100644 index c8125e879..000000000 --- a/pisa_examples/resources/priors/nufitv21LIDshiftedtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -85.85258980000002, - -82.1853828098359, - -76.87225470205733, - -70.16676681924177, - -65.35719956356023, - -60.765477968431014, - -56.309228995070136, - -52.13788235313196, - -48.15204845945365, - -44.33301196410836, - -40.719496879169164, - -37.28517656087997, - -34.0394787776301, - -30.97635036295947, - -28.09464871812681, - -25.384338600657028, - -22.842987085403244, - -20.46965356522569, - -18.261527083326705, - -16.20430516292643, - -14.305590634426059, - -12.554736372682934, - -10.943657232835204, - -9.475453772322188, - -8.134494427151148, - -6.923527469753165, - -5.831860484524834, - -4.854059885428192, - -3.992792907156982, - -3.227981369259268, - -2.569817889916112, - -1.9986410600965407, - -1.5130845017456673, - -1.1091100040836641, - -0.7758687918800727, - -0.5159383271774906, - -0.3129054123945289, - -0.16426703659099742, - -0.0684223264844786, - -0.012021570153127534, - 0.003873876181921667, - -0.0034876494726953297, - -0.04495056553674577, - -0.09773532942004891, - -0.17020609519135205, - -0.2532941201858788, - -0.3354249531368629, - -0.42227746083735895, - -0.5072695328767964, - -0.5831756103484188, - -0.6517319066768777, - -0.7091001899450203, - -0.7565845352472655, - -0.7887638699987292, - -0.8084917512195949, - -0.8150773014337116, - -0.8110744312378723, - -0.7923557555955903, - -0.7686634237534804, - -0.7412304712287145, - -0.7092664889859053, - -0.6777121355065224, - -0.6468074590331768, - -0.6291996694718015, - -0.6069354087351686, - -0.5984921828486253, - -0.6125814259005332, - -0.6604506949667374, - -0.7554223412741093, - -0.8943921283728972, - -1.089152750518906, - -1.3523342936968572, - -1.6799462230817408, - -2.085108801987162, - -2.574470233761409, - -3.1550309601605258, - -3.8292187097837154, - -4.607409471279728, - -5.494880495064628, - -6.499033430436617, - -7.624042684363854, - -8.87705039999551, - -10.260172489321285, - -11.782965536617494, - -13.448965661486945, - -15.264043302260623, - -17.232274378907544, - -19.358580669550545, - -21.647564194677628, - -24.102929742496162, - -26.72905735996939, - -29.530330221416943, - -32.50662681801703, - -35.665063591411716, - -39.00910948544679, - -42.53836998924833, - -46.26142221362063, - -50.161174333721895, - -55.65618846878222, - -60.06222327788225, - -63.1107398, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -84.97270000000002, - -81.35981167713962, - -76.1156395066052, - -69.52573668399494, - -64.75429691624537, - -60.27328014630555, - -55.89468816409524, - -51.80301685618676, - -47.858255234829, - -44.120923873675615, - -40.5702441789763, - -37.20893654989959, - -34.03185523225998, - -31.036308219838826, - -28.216896586190735, - -25.567615229407473, - -23.089450699972147, - -20.776829000359367, - -18.6254899846808, - -16.63123903978625, - -14.788501169139751, - -13.092622776814624, - -11.533603745450897, - -10.112141995057806, - -8.821980215475463, - -7.6579483096339125, - -6.613167201827209, - -5.6849648517184095, - -4.855869011633138, - -4.130011739548741, - -3.49928728767198, - -2.9575904754496607, - -2.499322695551345, - -2.110299706261969, - -1.794876029446803, - -1.5386633432448145, - -1.3381259654074007, - -1.1937066827488263, - -1.0818867253356077, - -1.016551564578337, - -0.9731633690616855, - -0.9613576596286174, - -0.9618937472614063, - -0.9787159312728386, - -1.006199129718837, - -1.0322951023999878, - -1.060872431160431, - -1.0870112054956595, - -1.1032293358578666, - -1.1079307878606703, - -1.101632385530548, - -1.081030193140678, - -1.0458469861388568, - -0.994527359919055, - -0.9291755505028332, - -0.8495638344303124, - -0.7604479167029616, - -0.6621478882456375, - -0.5548142240922651, - -0.4442188762345366, - -0.3385635804874522, - -0.23767698368413345, - -0.14685178797824164, - -0.07055570658670984, - -0.020115648917624032, - 0.00680736262865242, - -0.007085196747920813, - -0.05385052210909785, - -0.1555580215805569, - -0.3060100858254543, - -0.5224309984708295, - -0.8032401945308343, - -1.1625074850212225, - -1.6042358357767137, - -2.1310035588598533, - -2.756343077459174, - -3.485703342984156, - -4.3217268525092445, - -5.271403146315442, - -6.34431379938398, - -7.545006115424409, - -8.880218619637255, - -10.35261994457479, - -11.967870810804085, - -13.733757203166975, - -15.653855049950954, - -17.734397797871885, - -19.97853469177327, - -22.391591893226114, - -24.97687873900151, - -27.7389698597437, - -30.679448378294655, - -33.80380730020462, - -37.11467385292394, - -40.614851436248216, - -44.30937444326014, - -48.19210420648569, - -52.29865306713169, - -57.938299959114296, - -62.62563858440416, - -65.75025, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv21LIDstandardtheta23splines.json b/pisa_examples/resources/priors/nufitv21LIDstandardtheta23splines.json deleted file mode 100644 index eaf7f6c24..000000000 --- a/pisa_examples/resources/priors/nufitv21LIDstandardtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -86.12535000000003, - -82.45814300983582, - -77.14501490205733, - -70.4395270192418, - -65.62995976356022, - -61.03823816843103, - -56.58198919507014, - -52.41064255313196, - -48.42480865945364, - -44.60577216410838, - -40.992257079169164, - -37.557936760879976, - -34.31223897763011, - -31.24911056295947, - -28.367408918126806, - -25.65709880065703, - -23.11574728540324, - -20.7424137652257, - -18.53428728332671, - -16.47706536292643, - -14.578350834426052, - -12.827496572682938, - -11.216417432835199, - -9.748213972322192, - -8.407254627151147, - -7.196287669753164, - -6.104620684524835, - -5.126820085428191, - -4.265553107156983, - -3.5007415692592683, - -2.842578089916112, - -2.2714012600965403, - -1.7858447017456673, - -1.3818702040836637, - -1.048628991880073, - -0.7886985271774906, - -0.585665612394529, - -0.4370272365909973, - -0.34118252648447867, - -0.28478177015312756, - -0.26888632381807837, - -0.27624784947269526, - -0.3177107655367458, - -0.3704955294200487, - -0.4429662951913522, - -0.5260543201858789, - -0.6081851531368625, - -0.6950376608373596, - -0.7800297328767957, - -0.8559358103484191, - -0.9244921066768774, - -0.9818603899450208, - -1.0293447352472653, - -1.061524069998729, - -1.081251951219595, - -1.0878375014337114, - -1.0838346312378726, - -1.06511595559559, - -1.0414236237534806, - -1.0139906712287148, - -0.9820266889859052, - -0.9504723355065227, - -0.9195676590331764, - -0.9019598694718018, - -0.8796956087351685, - -0.871252382848625, - -0.8853416259005336, - -0.9332108949667371, - -1.0281825412741092, - -1.1671523283728973, - -1.3619129505189056, - -1.6250944936968574, - -1.9527064230817408, - -2.3578690019871624, - -2.8472304337614087, - -3.4277911601605267, - -4.101978909783713, - -4.880169671279728, - -5.767640695064629, - -6.771793630436619, - -7.896802884363852, - -9.149810599995511, - -10.532932689321283, - -12.055725736617495, - -13.721725861486942, - -15.536803502260629, - -17.50503457890754, - -19.63134086955054, - -21.920324394677635, - -24.37568994249616, - -27.001817559969393, - -29.80309042141695, - -32.77938701801701, - -35.937823791411724, - -39.28186968544679, - -42.81113018924833, - -46.53418241362063, - -50.43393453372191, - -55.92894866878219, - -60.334983477882254, - -63.3835, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -84.97270000000002, - -81.35981167713962, - -76.1156395066052, - -69.52573668399494, - -64.75429691624537, - -60.27328014630555, - -55.89468816409524, - -51.80301685618676, - -47.858255234829, - -44.120923873675615, - -40.5702441789763, - -37.20893654989959, - -34.03185523225998, - -31.036308219838826, - -28.216896586190735, - -25.567615229407473, - -23.089450699972147, - -20.776829000359367, - -18.6254899846808, - -16.63123903978625, - -14.788501169139751, - -13.092622776814624, - -11.533603745450897, - -10.112141995057806, - -8.821980215475463, - -7.6579483096339125, - -6.613167201827209, - -5.6849648517184095, - -4.855869011633138, - -4.130011739548741, - -3.49928728767198, - -2.9575904754496607, - -2.499322695551345, - -2.110299706261969, - -1.794876029446803, - -1.5386633432448145, - -1.3381259654074007, - -1.1937066827488263, - -1.0818867253356077, - -1.016551564578337, - -0.9731633690616855, - -0.9613576596286174, - -0.9618937472614063, - -0.9787159312728386, - -1.006199129718837, - -1.0322951023999878, - -1.060872431160431, - -1.0870112054956595, - -1.1032293358578666, - -1.1079307878606703, - -1.101632385530548, - -1.081030193140678, - -1.0458469861388568, - -0.994527359919055, - -0.9291755505028332, - -0.8495638344303124, - -0.7604479167029616, - -0.6621478882456375, - -0.5548142240922651, - -0.4442188762345366, - -0.3385635804874522, - -0.23767698368413345, - -0.14685178797824164, - -0.07055570658670984, - -0.020115648917624032, - 0.00680736262865242, - -0.007085196747920813, - -0.05385052210909785, - -0.1555580215805569, - -0.3060100858254543, - -0.5224309984708295, - -0.8032401945308343, - -1.1625074850212225, - -1.6042358357767137, - -2.1310035588598533, - -2.756343077459174, - -3.485703342984156, - -4.3217268525092445, - -5.271403146315442, - -6.34431379938398, - -7.545006115424409, - -8.880218619637255, - -10.35261994457479, - -11.967870810804085, - -13.733757203166975, - -15.653855049950954, - -17.734397797871885, - -19.97853469177327, - -22.391591893226114, - -24.97687873900151, - -27.7389698597437, - -30.679448378294655, - -33.80380730020462, - -37.11467385292394, - -40.614851436248216, - -44.30937444326014, - -48.19210420648569, - -52.29865306713169, - -57.938299959114296, - -62.62563858440416, - -65.75025, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv22minimisedtheta23spline.json b/pisa_examples/resources/priors/nufitv22minimisedtheta23spline.json deleted file mode 100644 index f3b44b61a..000000000 --- a/pisa_examples/resources/priors/nufitv22minimisedtheta23spline.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "theta23": { - "coeffs": [ - -106.54965000000001, - -102.0746549292262, - -95.48074599463969, - -87.15965451226602, - -81.1791814468175, - -75.43704470066173, - -69.94158242315075, - -64.68723380621023, - -59.66820124902408, - -54.88913309184412, - -50.34590473498682, - -46.03153621805688, - -41.94175235208799, - -38.076955033529785, - -34.43617696841478, - -31.011675484877312, - -27.800197677187516, - -24.80710679767284, - -22.01093619187162, - -19.413801215088558, - -17.013319482367464, - -14.803708217480187, - -12.782182754148533, - -10.935358693378245, - -9.25677122244387, - -7.747846838373127, - -6.403302646494288, - -5.209595380179959, - -4.157572391771409, - -3.2472768982908398, - -2.4706971794495, - -1.8107950023503285, - -1.2725051959123626, - -0.8369614816359977, - -0.5028536249053952, - -0.25972307276354856, - -0.09915424271823227, - -0.012869701166338388, - 0.00980222701329075, - -0.02631663458457005, - -0.10750159466606592, - -0.23644538110757393, - -0.3843193178224523, - -0.567762053929977, - -0.7557596411083571, - -0.962621314564002, - -1.1613848137008735, - -1.3572841307009513, - -1.5431763489815147, - -1.708302421131811, - -1.8497121855164909, - -1.9663430106930022, - -2.054389526809233, - -2.1126888162430606, - -2.1398596700918158, - -2.142530621100171, - -2.08897069934613, - -2.001101672931732, - -1.750454922354531, - -1.5360251012836172, - -1.303636868117958, - -1.083289789227666, - -0.8608602884516962, - -0.6733124076257139, - -0.5023945363335898, - -0.37785809085882, - -0.2903835008741756, - -0.26877324493854565, - -0.30422924038487115, - -0.4109986665615828, - -0.6075598794398553, - -0.8908244696772504, - -1.2734362617838773, - -1.7752390611824296, - -2.3773668291100942, - -3.140805518244765, - -3.989780643983242, - -5.01114729238583, - -6.1694984091311476, - -7.493348720920549, - -8.97809363061648, - -10.632277321766233, - -12.467215661608027, - -14.480025816788277, - -16.686288424793897, - -19.08315615607852, - -21.703306356251083, - -24.410840080637314, - -27.344623208263588, - -30.479752491343746, - -33.82809461696847, - -37.39571577203206, - -41.182025900719765, - -45.1904849402116, - -49.428410212313736, - -53.89352693152268, - -58.58873882278122, - -63.52312141527524, - -70.4286190248849, - -75.93901387546723, - -79.7534, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv22shiftedtheta23splines.json b/pisa_examples/resources/priors/nufitv22shiftedtheta23splines.json deleted file mode 100644 index 6a78def77..000000000 --- a/pisa_examples/resources/priors/nufitv22shiftedtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -106.54965000000001, - -102.0746549292262, - -95.48074599463969, - -87.15965451226602, - -81.1791814468175, - -75.43704470066173, - -69.94158242315075, - -64.68723380621023, - -59.66820124902408, - -54.88913309184412, - -50.34590473498682, - -46.03153621805688, - -41.94175235208799, - -38.076955033529785, - -34.43617696841478, - -31.011675484877312, - -27.800197677187516, - -24.80710679767284, - -22.01093619187162, - -19.413801215088558, - -17.013319482367464, - -14.803708217480187, - -12.782182754148533, - -10.935358693378245, - -9.25677122244387, - -7.747846838373127, - -6.403302646494288, - -5.209595380179959, - -4.157572391771409, - -3.2472768982908398, - -2.4706971794495, - -1.8107950023503285, - -1.2725051959123628, - -0.8369614816359972, - -0.5028536249053963, - -0.25972307276354495, - -0.09915424271824587, - -0.012869701166287752, - 0.009802227013102146, - -0.02631663458386741, - -0.10750159466868396, - -0.23644538109781763, - -0.3843193178588155, - -0.5677620537944253, - -0.755759641613733, - -0.9626213126795287, - -1.1613848207288644, - -1.3572841044866764, - -1.5431764467749851, - -1.7083020562542883, - -1.8497135471164918, - -1.966337928898143, - -2.0544084960471403, - -2.112617997558267, - -2.1401241003458176, - -2.141543114811649, - -2.0926590670543135, - -1.9873234129079347, - -1.855183777544436, - -1.7079625395124676, - -1.5525318240205537, - -1.3846628404273287, - -1.235111211444003, - -1.0828800127085076, - -0.9652475673704246, - -0.8729929527956942, - -0.8211783438597822, - -0.8213011136862312, - -0.8754866824783665, - -1.0025665348472514, - -1.207752424109162, - -1.4931016664082162, - -1.8759143971991168, - -2.362357201654999, - -2.957897482277402, - -3.681515284699644, - -4.526906572004467, - -5.511447579706939, - -6.642350855025991, - -7.920615111529476, - -9.363972643936453, - -10.960504458521022, - -12.74894263911335, - -14.698241757661904, - -16.83807566186753, - -19.169329745346893, - -21.691544888247577, - -24.414011659438305, - -27.343767768751487, - -30.479983275171165, - -33.82803234016934, - -37.39573258153098, - -41.18202136241447, - -45.190486165804124, - -49.42840988124779, - -53.89352702097531, - -58.58873879861232, - -63.523121421778235, - -70.42861902049498, - -75.93901387768328, - -79.7534, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -107.22347210000001, - -102.7284183787606, - -96.2096235397003, - -87.95298270481562, - -82.02038879215746, - -76.33609470290567, - -70.88662812550412, - -65.67679262573823, - -60.70671330537052, - -55.97085331646348, - -51.470805621562654, - -47.195556926688774, - -43.15449545061249, - -39.332792530226826, - -35.73226038432831, - -32.34335613913688, - -29.18152469593079, - -26.21239516862057, - -23.456412499098906, - -20.89450667264149, - -18.524664872060928, - -16.342745199972324, - -14.344380317388433, - -12.52695472395288, - -10.873752639177601, - -9.388661787311069, - -8.063530866825321, - -6.889082396625608, - -5.853219559421109, - -4.950699502032099, - -4.180612129195223, - -3.52740499094421, - -2.9852720937778625, - -2.550210031537033, - -2.209917874914219, - -1.951322135569423, - -1.7752366619567699, - -1.662723225996301, - -1.6039027396861936, - -1.6039547481531526, - -1.6364186468005606, - -1.7090383807682241, - -1.7995250131818723, - -1.911101808007705, - -2.0226129297227415, - -2.1427690844680476, - -2.2457769475442264, - -2.3381799234054044, - -2.410691008400629, - -2.4600712853088273, - -2.4745797022943066, - -2.459416516287392, - -2.410490091306553, - -2.3284182933289217, - -2.2133034086777226, - -2.0647660929500535, - -1.8856844403737754, - -1.7027095495407603, - -1.4775728720757668, - -1.2562994868893267, - -1.0257474517780871, - -0.8049076263209308, - -0.5826103753352216, - -0.39502699403784136, - -0.2241186538117343, - -0.09957964905819193, - -0.012105746399918257, - 0.009504694155288219, - -0.025951350887907038, - -0.13272076374233863, - -0.3292819801855269, - -0.6125465695219788, - -0.9951583616564464, - -1.4969611618503076, - -2.099088926557033, - -2.862527627823722, - -3.7115027080850282, - -4.732869526930218, - -5.891220004776001, - -7.215072711912257, - -8.699808639301972, - -10.354026019790888, - -12.188837978007228, - -14.202122335751898, - -16.406605295472037, - -18.810153337871036, - -21.405222042107933, - -24.206946145909725, - -27.22198370423789, - -30.444329809458168, - -33.8866581119524, - -37.554595432006636, - -41.436807018528796, - -45.553173170210144, - -49.898089561500626, - -54.474037160043736, - -59.2905164333468, - -64.33858975084505, - -71.41475722926016, - -77.04964890354682, - -80.94842209999999, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/priors/nufitv22standardtheta23splines.json b/pisa_examples/resources/priors/nufitv22standardtheta23splines.json deleted file mode 100644 index 0df61c598..000000000 --- a/pisa_examples/resources/priors/nufitv22standardtheta23splines.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "theta23_nh": { - "coeffs": [ - -106.54965000000001, - -102.0746549292262, - -95.48074599463969, - -87.15965451226602, - -81.1791814468175, - -75.43704470066173, - -69.94158242315075, - -64.68723380621023, - -59.66820124902408, - -54.88913309184412, - -50.34590473498682, - -46.03153621805688, - -41.94175235208799, - -38.076955033529785, - -34.43617696841478, - -31.011675484877312, - -27.800197677187516, - -24.80710679767284, - -22.01093619187162, - -19.413801215088558, - -17.013319482367464, - -14.803708217480187, - -12.782182754148533, - -10.935358693378245, - -9.25677122244387, - -7.747846838373127, - -6.403302646494288, - -5.209595380179959, - -4.157572391771409, - -3.2472768982908398, - -2.4706971794495, - -1.8107950023503285, - -1.2725051959123628, - -0.8369614816359972, - -0.5028536249053963, - -0.25972307276354495, - -0.09915424271824587, - -0.012869701166287752, - 0.009802227013102146, - -0.02631663458386741, - -0.10750159466868396, - -0.23644538109781763, - -0.3843193178588155, - -0.5677620537944253, - -0.755759641613733, - -0.9626213126795287, - -1.1613848207288644, - -1.3572841044866764, - -1.5431764467749851, - -1.7083020562542883, - -1.8497135471164918, - -1.966337928898143, - -2.0544084960471403, - -2.112617997558267, - -2.1401241003458176, - -2.141543114811649, - -2.0926590670543135, - -1.9873234129079347, - -1.855183777544436, - -1.7079625395124676, - -1.5525318240205537, - -1.3846628404273287, - -1.235111211444003, - -1.0828800127085076, - -0.9652475673704246, - -0.8729929527956942, - -0.8211783438597822, - -0.8213011136862312, - -0.8754866824783665, - -1.0025665348472514, - -1.207752424109162, - -1.4931016664082162, - -1.8759143971991168, - -2.362357201654999, - -2.957897482277402, - -3.681515284699644, - -4.526906572004467, - -5.511447579706939, - -6.642350855025991, - -7.920615111529476, - -9.363972643936453, - -10.960504458521022, - -12.74894263911335, - -14.698241757661904, - -16.83807566186753, - -19.169329745346893, - -21.691544888247577, - -24.414011659438305, - -27.343767768751487, - -30.479983275171165, - -33.82803234016934, - -37.39573258153098, - -41.18202136241447, - -45.190486165804124, - -49.42840988124779, - -53.89352702097531, - -58.58873879861232, - -63.523121421778235, - -70.42861902049498, - -75.93901387768328, - -79.7534, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - }, - "theta23_ih": { - "coeffs": [ - -107.50175, - -103.00669627876064, - -96.48790143970028, - -88.23126060481566, - -82.29866669215747, - -76.61437260290566, - -71.16490602550412, - -65.95507052573822, - -60.98499120537053, - -56.249131216463475, - -51.74908352156269, - -47.47383482668875, - -43.432773350612486, - -39.61107043022682, - -36.010538284328305, - -32.62163403913688, - -29.459802595930803, - -26.490673068620566, - -23.734690399098902, - -21.172784572641493, - -18.802942772060923, - -16.621023099972327, - -14.622658217388432, - -12.805232623952886, - -11.152030539177602, - -9.666939687311066, - -8.341808766825324, - -7.167360296625608, - -6.131497459421108, - -5.228977402032099, - -4.458890029195223, - -3.805682890944211, - -3.263549993777863, - -2.828487931537033, - -2.4881957749142187, - -2.2296000355694234, - -2.053514561956769, - -1.9410011259963011, - -1.8821806396861926, - -1.8822326481531535, - -1.9146965468005608, - -1.9873162807682236, - -2.077802913181872, - -2.189379708007705, - -2.300890829722742, - -2.421046984468047, - -2.524054847544226, - -2.6164578234054052, - -2.6889689084006285, - -2.7383491853088273, - -2.752857602294306, - -2.7376944162873924, - -2.688767991306552, - -2.606696193328922, - -2.4915813086777225, - -2.3430439929500535, - -2.163962340373775, - -1.9809874495407607, - -1.7558507720757666, - -1.5345773868893267, - -1.304025351778087, - -1.0831855263209307, - -0.8608882753352215, - -0.6733048940378416, - -0.5023965538117342, - -0.37785754905819213, - -0.2903836463999183, - -0.26877320584471187, - -0.3042292508879069, - -0.4109986637423388, - -0.6075598801855269, - -0.890824469521979, - -1.2734362616564456, - -1.775239061850309, - -2.377366826557032, - -3.1408055278237224, - -3.9897806080850287, - -5.011147426930217, - -6.169497904775999, - -7.49335061191226, - -8.978086539301971, - -10.632303919790893, - -12.467115878007228, - -14.480400235751906, - -16.684883195472032, - -19.088431237871035, - -21.683499942107932, - -24.485224045909725, - -27.500261604237892, - -30.72260770945816, - -34.164936011952406, - -37.83287333200663, - -41.71508491852879, - -45.83145107021014, - -50.176367461500625, - -54.752315060043756, - -59.56879433334676, - -64.61686765084508, - -71.69303512926017, - -77.3279268035468, - -81.2267, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "knots": [ - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5235987755982988, - 0.5350708071951542, - 0.5407527743903904, - 0.5464005641379722, - 0.5520154938738002, - 0.5575988266995366, - 0.5631517749295388, - 0.5686755033625053, - 0.5741711323040704, - 0.5796397403637042, - 0.5850823670467623, - 0.590500015160318, - 0.595893653049473, - 0.6012642166791283, - 0.6066126115746932, - 0.6119397146338674, - 0.6172463758204582, - 0.6225334197501333, - 0.6278016471770861, - 0.6330518363897495, - 0.638284744522957, - 0.6435011087932844, - 0.6487016476637117, - 0.6538870619432138, - 0.6590580358264089, - 0.6642152378779667, - 0.6693593219660918, - 0.6744909281490511, - 0.6796106835184006, - 0.684719203002283, - 0.6898170901319185, - 0.6949049377741745, - 0.699983328832896, - 0.7050528369214929, - 0.7101140270091053, - 0.7151674560425204, - 0.7202136735458755, - 0.7252532222000543, - 0.7302866384035749, - 0.7353144528166684, - 0.7403371908901507, - 0.7453553733806189, - 0.7503695168534232, - 0.7553801341748091, - 0.7603877349945632, - 0.7653928262204539, - 0.7703959124857098, - 0.775397496610753, - 0.7803980800603648, - 0.7853981633974484, - 0.7903982467345319, - 0.7953988301841435, - 0.8004004143091868, - 0.8054035005744429, - 0.8104085918003334, - 0.8154161926200876, - 0.8204268099414735, - 0.8254409534142778, - 0.830459135904746, - 0.8354818739782283, - 0.8405096883913217, - 0.8455431045948424, - 0.8505826532490209, - 0.8556288707523761, - 0.8606822997857912, - 0.8657434898734035, - 0.8708129979620005, - 0.8758913890207222, - 0.8809792366629781, - 0.8860771237926137, - 0.8911856432764962, - 0.8963053986458455, - 0.901437004828805, - 0.90658108891693, - 0.9117382909684877, - 0.9169092648516828, - 0.9220946791311849, - 0.9272952180016123, - 0.9325115822719395, - 0.9377444904051472, - 0.9429946796178105, - 0.9482629070447633, - 0.9535499509744386, - 0.9588566121610292, - 0.9641837152202035, - 0.9695321101157683, - 0.9749026737454237, - 0.9802963116345785, - 0.9857139597481341, - 0.9911565864311923, - 0.9966251944908262, - 1.002120823432391, - 1.0076445518653578, - 1.01319750009536, - 1.0187808329210963, - 1.0243957626569244, - 1.0300435524045062, - 1.0357255195997424, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976, - 1.0471975511965976 - ], - "kind": "spline", - "units": "radian", - "deg": 3 - } -} \ No newline at end of file diff --git a/pisa_examples/resources/reco/vlvnt_reco_param.json b/pisa_examples/resources/reco/vlvnt_reco_param.json deleted file mode 100644 index 456ee813b..000000000 --- a/pisa_examples/resources/reco/vlvnt_reco_param.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "nuall_cc+nuallbar_cc": { - "coszen": [ - { - "dist": "norm", - "fraction": "lambda E: np.ones_like(E)", - "kwargs": { - "loc": "lambda E: np.zeros_like(E)", - "scale": "lambda E: 0.3/np.sqrt(E) + 0.05" - } - } - ], - "energy": [ - { - "dist": "gumbel_r", - "fraction": "lambda E: np.ones_like(E)", - "kwargs": { - "loc": "lambda E: np.zeros_like(E)", - "scale": "lambda E: (0.4/np.sqrt(E) + 0.1)*E" - } - } - ] - }, - "nuall_nc+nuallbar_nc": { - "coszen": [ - { - "dist": "norm", - "fraction": "lambda E: np.ones_like(E)", - "kwargs": { - "loc": "lambda E: np.zeros_like(E)", - "scale": "lambda E: 0.3/np.sqrt(E) + 0.05" - } - } - ], - "energy": [ - { - "dist": "gumbel_r", - "fraction": "lambda E: np.ones_like(E)", - "kwargs": { - "loc": "lambda E: -0.6*E", - "scale": "lambda E: (0.4/np.sqrt(E) + 0.1)*E" - } - } - ] - } -} diff --git a/pisa_examples/resources/settings/README.md b/pisa_examples/resources/settings/README.md deleted file mode 100644 index 25322f0f8..000000000 --- a/pisa_examples/resources/settings/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# $PISA/pisa/resources/settings - -## Directory listing - -| File/directory | Description -| -------------- | ----------- -| `binning/` | Binning specifications -| `discr_sys/` | Config files usable with `pisa/sripts/fit_discr_sys_nd.py` script -| `logging/` | Settings to configure PISA's logging -| `minimizer/` | Minmizer settings -| `osc/` | Standard oscillation parameters e.g. Nu-Fit and a standard Earth model -| `pipeline/` | Example pipeline configurations \ No newline at end of file diff --git a/pisa_examples/resources/settings/binning/IceCube_3y_oscillations.cfg b/pisa_examples/resources/settings/binning/IceCube_3y_oscillations.cfg deleted file mode 100644 index 1ff0f16c6..000000000 --- a/pisa_examples/resources/settings/binning/IceCube_3y_oscillations.cfg +++ /dev/null @@ -1,19 +0,0 @@ -#------------------------------------------------------------------------------ -# Binning definitions, linked back to from stage definitions -#------------------------------------------------------------------------------ - -dragon.order = reco_energy, reco_coszen, pid -dragon.reco_energy = {'num_bins':8, 'is_log':True, 'bin_edges':[5.62341325, 7.49894209, 10.0, 13.33521432, 17.7827941, 23.71373706, 31.6227766, 42.16965034, 56.23413252] * units.GeV, 'tex': r'E_{\rm reco}'} -dragon.reco_coszen = {'num_bins':8, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos{\theta}_{\rm reco}'} -dragon.pid = {'bin_edges': [-3.0, 2.0,1000], 'tex':r'{\rm PID}'} - -# special PID format from datarelease -dragon_datarelease.order = reco_energy, reco_coszen, pid -dragon_datarelease.reco_energy = {'num_bins':8, 'is_log':True, 'bin_edges':[5.62341325, 7.49894209, 10.0, 13.33521432, 17.7827941, 23.71373706, 31.6227766, 42.16965034, 56.23413252] * units.GeV, 'tex': r'E_{\rm reco}'} -dragon_datarelease.reco_coszen = {'num_bins':8, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos{\theta}_{\rm reco}'} -dragon_datarelease.pid = {'bin_edges': [-0.5, 0.5, 1.5], 'tex':r'{\rm PID}'} - - -true_allsky_fine.order = true_energy, true_coszen -true_allsky_fine.true_energy = {'num_bins':200, 'is_log':True, 'domain':[1,1000] * units.GeV, 'tex': r'E_{\rm true}'} -true_allsky_fine.true_coszen = {'num_bins':200, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos\,\theta_{Z,{\rm true}}'} diff --git a/pisa_examples/resources/settings/binning/example.cfg b/pisa_examples/resources/settings/binning/example.cfg deleted file mode 100644 index 15f709839..000000000 --- a/pisa_examples/resources/settings/binning/example.cfg +++ /dev/null @@ -1,71 +0,0 @@ -true_allsky.order = true_coszen, true_energy -true_allsky.true_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_allsky.true_coszen = {'num_bins': 40, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - -true_allsky_fine.order = true_coszen, true_energy -true_allsky_fine.true_energy = {'num_bins': 400, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_allsky_fine.true_coszen = {'num_bins': 400, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - -true_allsky_coarse.order = true_coszen, true_energy -true_allsky_coarse.true_energy = {'num_bins': 10, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_allsky_coarse.true_coszen = {'num_bins': 10, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - -true_upgoing.order = true_coszen, true_energy -true_upgoing.true_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_upgoing.true_coszen = {'num_bins': 20, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - -true_upgoing_fine.order = true_coszen, true_energy -true_upgoing_fine.true_energy = {'num_bins': 400, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_upgoing_fine.true_coszen = {'num_bins': 200, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - -true_upgoing_coarse.order = true_coszen, true_energy -true_upgoing_coarse.true_energy = {'num_bins': 10, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm true}'} -true_upgoing_coarse.true_coszen = {'num_bins': 5, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm true}}'} - - -reco_allsky.order = reco_coszen, reco_energy, pid -reco_allsky.reco_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_allsky.reco_coszen = {'num_bins': 40, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} -reco_allsky.pid = {'bin_edges': [-np.inf, 0.55, np.inf], 'tex': r'{\rm PID}', 'bin_names': ['cascade', 'track']} - -reco_allsky_nopid.order = reco_coszen, reco_energy -reco_allsky_nopid.reco_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_allsky_nopid.reco_coszen = {'num_bins': 40, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} - -reco_allsky_coarse.order = reco_coszen, reco_energy, pid -reco_allsky_coarse.reco_energy = {'num_bins': 10, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_allsky_coarse.reco_coszen = {'num_bins': 10, 'is_lin': True, 'domain': [-1, 1], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} -reco_allsky_coarse.pid = {'bin_edges': [-np.inf, 0.55, np.inf], 'tex': r'{\rm PID}', 'bin_names': ['cascade', 'track']} - -reco_upgoing.order = reco_coszen, reco_energy, pid -reco_upgoing.reco_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_upgoing.reco_coszen = {'num_bins': 20, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} -reco_upgoing.pid = {'bin_edges': [-np.inf, 0.55, np.inf], 'tex': r'{\rm PID}', 'bin_names': ['cascade', 'track']} - -reco_upgoing_nopid.order = reco_coszen, reco_energy -reco_upgoing_nopid.reco_energy = {'num_bins': 40, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_upgoing_nopid.reco_coszen = {'num_bins': 20, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} - -reco_upgoing_coarse.order = reco_coszen, reco_energy, pid -reco_upgoing_coarse.reco_energy = {'num_bins': 10, 'is_log': True, 'domain': [1, 80] * units.GeV, 'tex': r'E_{\rm reco}'} -reco_upgoing_coarse.reco_coszen = {'num_bins': 5, 'is_lin': True, 'domain': [-1, 0], 'tex': r'\cos\,\theta_{Z,{\rm reco}}'} -reco_upgoing_coarse.pid = {'bin_edges': [-np.inf, 0.55, np.inf], 'tex': r'{\rm PID}', 'bin_names': ['cascade', 'track']} - -# DeepCore binning in reconstructed observables -# In this toy example, the PID bining is: pid < 0 -> cascade, pid > 0 -> track -reco_binning.order = reco_energy, reco_coszen, pid -reco_binning.reco_energy = {'num_bins':10, 'is_log':True, 'domain':[5.,100.], 'tex':r'E_{\rm reco}'} -reco_binning.reco_coszen = {'num_bins':10, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos{\theta}_{\rm reco}'} -reco_binning.pid = {'bin_edges': [-1000.,0.,1000.], 'tex':r'{\rm PID}', 'bin_names':['cascades','tracks']} - -# Binning for calculating on a grid -# For example, may choose to compute flux and/or oscillation probabilities on a grid, rather than individually -# for every event. This is much faster, and if the grid is well chosen has a negligible impact on accuracy. -calc_grid.order = true_energy, true_coszen -calc_grid.true_energy = {'num_bins':200, 'is_log':True, 'domain':[1., 1000] * units.GeV, 'tex':r'E_{\rm true}'} -calc_grid.true_coszen = {'num_bins':200, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos\,\theta_{z,{\rm true}}'} - -# Coarse grid to do quick calculations in unit tests -calc_grid_coarse.order = true_energy, true_coszen -calc_grid_coarse.true_energy = {'num_bins':50, 'is_log':True, 'domain':[1., 1000] * units.GeV, 'tex':r'E_{\rm true}'} -calc_grid_coarse.true_coszen = {'num_bins':50, 'is_lin':True, 'domain':[-1,1], 'tex':r'\cos\,\theta_{z,{\rm true}}'} diff --git a/pisa_examples/resources/settings/discr_sys/example_discr_sys.cfg b/pisa_examples/resources/settings/discr_sys/example_discr_sys.cfg deleted file mode 100644 index 6423abb18..000000000 --- a/pisa_examples/resources/settings/discr_sys/example_discr_sys.cfg +++ /dev/null @@ -1,180 +0,0 @@ -# Simulations: -# * 1x6xx (neutrinos); including relative DOM efficiency (RDE) -# GENIE set descriptions: https://wiki.icecube.wisc.edu/index.php/Low_Energy_GENIE_Simulation -# Processing: -# * DRAGON "5digit" -# Additional notes: -# * Includes livetime and resolution+pid modifications if desired - - -# Configuration for discrete systematics sets n=dimensional fit -# add the nominal set (the one you want to parameterize for as [nominal_set:A,B,C,...] -# add sys sets as section [sys_set:A,B,C,...] -# with A, B, C etc corresponding to the set's sys settings, sin the same order as sys_list! - -[general] - -# regular expression for combining maps in distribution maker outputs -# cf. `Map.combine_re` -combine_regex = [r"nue.*_cc", r"numu.*_cc", r"nutau.*_cc", r".*_nc"] - -# names of systematic parameters -sys_list = dom_eff, hole_ice, hole_ice_fwd, spiciness, rde, bulk_scatter, bulk_abs -units = dimensionless, dimensionless, dimensionless, dimensionless, dimensionless, dimensionless, dimensionless - -# paths for convenience -path = /data/icecube/sim/ic86/pisa/dima/dragon_l5b/make_events_file_output_all_with_common_variables -path2 = /data/icecube/sim/ic86/pisa/dima/dragon_l5b/make_events_file_output_all_Dima_validation_sets -path3 = /data/icecube/sim/ic86/pisa/spicehd/dragon_l5b -livetime = 5 * units.common_year -energy_improvement = 0.1 -coszen_improvement = 0.1 -pid_improvement = 1.0 - - -[apply_to_all_sets] - -pipeline_cfg = settings/pipeline/nutau_mc_baseline.cfg - -remove [discr_sys.pi_hyperplanes] = - -# remove since not all systematics-set PISA events files have fields needed for genie -# systematics stage -remove [xsec.genie_sys] = -set [data.simple_data_loader] data_dict = { - 'true_energy': 'true_energy', - 'true_coszen': 'true_coszen', - 'reco_energy': 'reco_energy', - 'reco_coszen': 'reco_coszen', - 'pid': 'pid', - 'weighted_aeff': 'weighted_aeff', - 'dunkman_L5': 'dunkman_L5', - } - -# since we removed two sections, need to redefine the `stage.service`s -set [pipeline] order = data.simple_data_loader, reco.resolutions, flux.pi_honda_ip, flux.pi_barr_simple, osc.pi_prob3, aeff.pi_aeff, utils.pi_hist - -# set reco.resolutions params -set [reco.resolutions] param.energy_improvement = ${general:energy_improvement} -set [reco.resolutions] param.coszen_improvement = ${general:coszen_improvement} -set [reco.resolutions] param.pid_improvement = ${general:pid_improvement} - -# set livetime -set [aeff.pi_aeff] param.livetime = ${general:livetime} - - -# called "nominal" set, but treated same as the other systematics sets -[nominal_set : 1.00 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126001-126003,146001-146003,166001-166003__proc_v5digit__unjoined_with_fluxes_GENIE_Barr.hdf5 - -[sys_set : 0.88 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126011-126013,146011-146013,166011-166013__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.94 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126031-126033,146031-146033,166031-166033__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.97 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126041-126043,146041-146043,166041-166043__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.03 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126051-126053,146051-146053,166051-166053__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.06 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126061-126063,146061-146063,166061-166063__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.12 , 25 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126081-126083,146081-146083,166081-166083__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 15 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126101-126103,146101-146103,166101-166103__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 20 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126111-126113,146111-146113,166111-166113__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 30 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126121-126123,146121-146123,166121-166123__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 35 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126131-126133,146131-146133,166131-166133__proc_v5digit__unjoined_with_fluxes.hdf5 - - -[sys_set : 1.00 , 30 , 2.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126201-126203,146201-146203,166201-166203__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 30 , -5.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126211-126213,146211-146213,166211-166213__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 30 , -3.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126221-126223,146221-146223,166221-166223__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 30 , 1.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126231-126233,146231-146233,166231-166233__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 30 , -1.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126241-126243,146241-146243,166241-166243__proc_v5digit__unjoined_with_fluxes.hdf5 - -# off-grid points - -[sys_set : 1.05 , 30 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126301-126303,146301-146303,166301-166303__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.93 , 20 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126311-126313,146311-146313,166311-166313__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.95 , 30 , -1.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126321-126323,146321-146323,166321-166323__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.03 , 25 , -2.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126331-126333,146331-146333,166331-166333__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.98 , 35 , 1.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126341-126343,146341-146343,166341-166343__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 20 , -3.0 , 0.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path2}/events__deepcore__IC86__runs_126351-126353,146351-146353,166351-166353__proc_v5digit__unjoined_with_fluxes.hdf5 - - -# -# -- SpiceHD sets; dom_eff, hole_ice and hole_ice_fwd parameters from fits to Dima -- # -# - -[sys_set : 0.96 , 16 , -1.3 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_125331-125333,145331-145333,165331-165333__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.94 , 24 , -1.0 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_125341-125343,145341-145343,165341-165343__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 14 , -3.6 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path3}/events__deepcore__IC86__runs_125441-125443,145441-145443,165441-165443__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.97 , 24 , -1.7 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path3}/events__deepcore__IC86__runs_125451-125453,145451-145453,165451-165453__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.99 , 14 , -2.4 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path3}/events__deepcore__IC86__runs_125481-125483,145481-145483,165481-165483__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 0.97 , 18 , -1.0 , 1.0 , 1.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path3}/events__deepcore__IC86__runs_125491-125493,145491-145493,165491-165493__proc_v5digit__unjoined_with_fluxes.hdf5 - - -# -# -- No-RDE sets for fitting bulk ice scattering & absorption -# - -# Nominaal no-RDE set -[sys_set : 1.00 , 25 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126401-126403,146401-146403,166401-166403__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 25 , 0.0 , 0.0 , 0.0 , -7.0 , -7.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126811-126813,146811-146813,166811-166813__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 25 , 0.0 , 0.0 , 0.0 , 0.0 , +10.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126821-126823,146821-146823,166821-166823__proc_v5digit__unjoined_with_fluxes.hdf5 - -[sys_set : 1.00 , 25 , 0.0 , 0.0 , 0.0 , +10.0 , 0.0] -set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_126831-126833,146831-146833,166831-166833__proc_v5digit__unjoined_with_fluxes.hdf5 - - -# -- Unused sets -- # - -#set [data.simple_data_loader] events_file = ${general:path}/events__deepcore__IC86__runs_125701-125703,145701-145703,165701-165703__proc_v5digit__unjoined_with_fluxes.hdf5 diff --git a/pisa_examples/resources/settings/fit/example_basinhopping_lbfgsb.cfg b/pisa_examples/resources/settings/fit/example_basinhopping_lbfgsb.cfg deleted file mode 100644 index e56d342f2..000000000 --- a/pisa_examples/resources/settings/fit/example_basinhopping_lbfgsb.cfg +++ /dev/null @@ -1,39 +0,0 @@ -#------------------------------------------------------------------------------ -# Fit method: scan/minimize/pull or any combination ('+') thereof -#------------------------------------------------------------------------------ - -[fit] -method = minimize - -[fit.params] -# can put comma-separated list of parameter names, or '*' which will serve -# as wildcard for all unspecified parameters -minimize = * - -# should be possible to specify fit settings independent of any -# hypothesis parameter selections -#------------------------------------------------------------------------------ -# Scan: supply specifications for values to probe for each param to scan -# (either range + nvalues (int) or just values) -#------------------------------------------------------------------------------ - -[scan] - -#------------------------------------------------------------------------------ -# Minimization: supply path to cfg for local and/or global minimizer -#------------------------------------------------------------------------------ - -[minimize] -global = settings/minimizer/basinhopping_niter100_T1e0_stepsize5e-1_interval50.cfg -local = settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.cfg - -#------------------------------------------------------------------------------ -# Pull method: supply specifications for values to probe for each param -# (either range + nvalues (int) or just values) -#------------------------------------------------------------------------------ - -[pull] - - - - diff --git a/pisa_examples/resources/settings/logging/logging.json b/pisa_examples/resources/settings/logging/logging.json deleted file mode 100644 index 02f0348ec..000000000 --- a/pisa_examples/resources/settings/logging/logging.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version" : 1, - "formatters": { - "simple": { - "format": "[%(levelname)8s] %(message)s" - }, - "time": { - "format": "%(asctime)s : %(message)s" - }, - "profile": { - "format": "[ PROFILE] %(message)s" - } - }, - "handlers": { - "console": { - "class": "logging.StreamHandler", - "formatter": "simple", - "stream": "ext://sys.stdout" - }, - "console_time": { - "class": "logging.StreamHandler", - "formatter": "time", - "stream": "ext://sys.stdout" - } - }, - "loggers": { - "profile": { - "handlers": [ "console" ], - "level": "WARN", - "propagate": false - }, - "physics": { - "handlers": [ "console" ], - "level": "DEBUG", - "propagate": false - } - }, - "root": { - "handlers": [ "console" ], - "level": "WARN" - } -} diff --git a/pisa_examples/resources/settings/minimizer/basinhopping_niter100_T1e0_stepsize5e-1_interval50.cfg b/pisa_examples/resources/settings/minimizer/basinhopping_niter100_T1e0_stepsize5e-1_interval50.cfg deleted file mode 100644 index 9930f62f2..000000000 --- a/pisa_examples/resources/settings/minimizer/basinhopping_niter100_T1e0_stepsize5e-1_interval50.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[method] -name = basinhopping - -[options] -niter = 100 -T = 1.0 -stepsize = 0.5 -interval = 50 -disp = False diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter200.cfg b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter200.cfg deleted file mode 100644 index 5eeaa3b0c..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter200.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[method] -name = L-BFGS-B - -[options] -maxiter = 200 -# print convergence messages -disp = 0 -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-11 -# gradient tolerance: if gradient_i > gtol for all i, exit -gtol = 1e-5 -# step size to use in numerically evaluating gradient -eps = 1e-8 diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.cfg b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.cfg deleted file mode 100644 index 232850fe4..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[method] -name = L-BFGS-B - -[options] -maxiter = 500 -# print convergence messages -disp = 0 -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-11 -# gradient tolerance: if gradient_i > gtol for all i, exit -gtol = 1e-5 -# step size to use in numerically evaluating gradient -eps = 1e-8 diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.json b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.json deleted file mode 100644 index 7102b8b19..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-11_gtol1e-5_eps1e-8_maxiter500.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "method": { - "value": "L-BFGS-B", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 2e-11, - "gtol" : 1e-5, - "eps" : 1e-8, - "maxiter": 500 - }, - "desc": { - "ftol" : "The iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol", - "gtol" : "Gradient tolerance: if gradient_i > gtol for all i, exit", - "eps" : "Step size to use in numerically evaluating gradien", - "maxiter": "Maximum number of iterations" - } - } -} diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.cfg b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.cfg deleted file mode 100644 index 1b8c1c56b..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[method] -name = L-BFGS-B - -[options] -maxiter = 200 -# print convergence messages -disp = 0 -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-5 -# gradient tolerance: if gradient_i > gtol for all i, exit -gtol = 1e-5 -# step size to use in numerically evaluating gradient -eps = 1e-4 diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.json b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.json deleted file mode 100644 index 1addb99ba..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "method": { - "value": "L-BFGS-B", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 2e-5, - "gtol" : 1e-5, - "eps" : 1e-4, - "maxiter": 200 - }, - "desc": { - "ftol" : "The iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol", - "gtol" : "Gradient tolerance: if gradient_i > gtol for all i, exit", - "eps" : "Step size to use in numerically evaluating gradien", - "maxiter": "Maximum number of iterations" - } - } -} diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.cfg b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.cfg deleted file mode 100644 index 5f720cdf9..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[method] -name = L-BFGS-B - -[options] -maxiter = 200 -# print convergence messages -disp = 0 -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-7 -# gradient tolerance: if gradient_i > gtol for all i, exit -gtol = 1e-5 -# step size to use in numerically evaluating gradient -eps = 1e-4 diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.json b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.json deleted file mode 100644 index 6eccfb332..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-7_gtol1e-5_eps1e-4_maxiter200.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "method": { - "value": "L-BFGS-B", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 2e-7, - "gtol" : 1e-5, - "eps" : 1e-4, - "maxiter": 200 - }, - "desc": { - "ftol" : "The iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol", - "gtol" : "Gradient tolerance: if gradient_i > gtol for all i, exit", - "eps" : "Step size to use in numerically evaluating gradien", - "maxiter": "Maximum number of iterations" - } - } -} diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.cfg b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.cfg deleted file mode 100644 index 4c6e231ef..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[method] -name = L-BFGS-B - -[options] -maxiter = 200 -# print convergence messages -disp = 0 -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-9 -# gradient tolerance: if gradient_i > gtol for all i, exit -gtol = 1e-5 -# step size to use in numerically evaluating gradient -eps = 1e-7 diff --git a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.json b/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.json deleted file mode 100644 index 333b2fc8e..000000000 --- a/pisa_examples/resources/settings/minimizer/l-bfgs-b_ftol2e-9_gtol1e-5_eps1e-7_maxiter200.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "method": { - "value": "L-BFGS-B", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 2e-9, - "gtol" : 1e-5, - "eps" : 1e-7, - "maxiter": 200 - }, - "desc": { - "ftol" : "The iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol", - "gtol" : "Gradient tolerance: if gradient_i > gtol for all i, exit", - "eps" : "Step size to use in numerically evaluating gradien", - "maxiter": "Maximum number of iterations" - } - } -} diff --git a/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.cfg b/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.cfg deleted file mode 100644 index 58ed3f3fe..000000000 --- a/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[method] -name = SLSQP - -[options] -maxiter = 1000 -# print convergence messages -disp = False -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 1e-6 -# step size to use in numerically evaluating gradient -eps = 1e-4 diff --git a/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.json b/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.json deleted file mode 100644 index fecacb84b..000000000 --- a/pisa_examples/resources/settings/minimizer/slsqp_ftol1e-6_eps1e-4_maxiter1000.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "method": { - "value": "SLSQP", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 1.0e-6, - "eps" : 1.0e-4, - "maxiter": 1000 - }, - "desc": { - "ftol" : "Precision goal for the value of f in the stopping criterion", - "eps" : "Step size used for numerical approximation of the jacobian.", - "maxiter": "Maximum number of iteration" - } - } -} diff --git a/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.cfg b/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.cfg deleted file mode 100644 index 54b80fe89..000000000 --- a/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[method] -name = SLSQP - -[options] -maxiter = 1000 -# print convergence messages -disp = False -# iteration stops when (f^k - f^{k+1}) / max{|f^k|, |f^{k+1}|, 1} <= ftol -ftol = 2e-11 -# step size to use in numerically evaluating gradient -eps = 1e-8 diff --git a/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.json b/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.json deleted file mode 100644 index a6a871e38..000000000 --- a/pisa_examples/resources/settings/minimizer/slsqp_ftol2e-11_eps1e-8_maxiter1000.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "method": { - "value": "SLSQP", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options":{ - "value": { - "ftol" : 2e-11, - "eps" : 1e-8, - "maxiter": 1000 - }, - "desc": { - "ftol" : "Precision goal for the value of f in the stopping criterion", - "eps" : "Step size used for numerical approximation of the jacobian.", - "maxiter": "Maximum number of iteration" - } - } -} diff --git a/pisa_examples/resources/settings/osc/README.md b/pisa_examples/resources/settings/osc/README.md deleted file mode 100644 index 3468e6d4d..000000000 --- a/pisa_examples/resources/settings/osc/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Oscillations Parameter Settings - -This directory contains standard settings for the neutrino mixing parameters and parameters that affect the calculation of oscillations. - -Typically we have used [Nu-Fit](http://www.nu-fit.org/) to define our fiducial model, and so you should find those here. -The naming convention adopted is that we neglect the decimal point, so nufitv20 here is Nu-Fit v2.0 on the website. -In these files, the priors included on θ23 are the "shifted" ones, as to be consistent with what was done in the LoI V2. -For an explanation of the different θ23 priors please check the `README.md` file in that directory. - -An important note on the atmospheric mass splitting values included in the files: -We always use Δm231 regardless of ordering, whereas Nu-Fit report Δm23l (that is an ell instead of a one), which is always the bigger of the two mass splittings. -Thus, in order to have the correct value in our configuration files we must add Δm221 to the inverted ordering Δm231 value from Nu-Fit. -That is, the _absolute_ value will decrease. - -## Directory listing - -| File/directory | Description -| -------------- | ----------- -| `earth.cfg` | Standard values for the electron densities in the Earth, a standard choice for the propagation height (assumed injection height in the atmosphere of neutrinos when calculating their baseline), and detector depth (appropriate for IceCube) -| `nufitv20.cfg` | Fiducial model from [Nu-Fit v2.0](http://www.nu-fit.org/?q=node/92) -| `nufitv22.cfg` | Fiducial model from [Nu-Fit v2.2](http://www.nu-fit.org/?q=node/123) \ No newline at end of file diff --git a/pisa_examples/resources/settings/osc/earth.cfg b/pisa_examples/resources/settings/osc/earth.cfg deleted file mode 100644 index a276ceca8..000000000 --- a/pisa_examples/resources/settings/osc/earth.cfg +++ /dev/null @@ -1,8 +0,0 @@ -# electron densities -YeI = 0.4656 -YeM = 0.4957 -YeO = 0.4656 - -# height -detector_depth = 2. units.km -prop_height = 20. units.km diff --git a/pisa_examples/resources/settings/osc/nsi_null.cfg b/pisa_examples/resources/settings/osc/nsi_null.cfg deleted file mode 100644 index c446ceaa0..000000000 --- a/pisa_examples/resources/settings/osc/nsi_null.cfg +++ /dev/null @@ -1,6 +0,0 @@ -eps_ee = 0. -eps_emu = 0. -eps_etau = 0. -eps_mumu = 0. -eps_mutau = 0. -eps_tautau = 0. diff --git a/pisa_examples/resources/settings/osc/nufitv20.cfg b/pisa_examples/resources/settings/osc/nufitv20.cfg deleted file mode 100644 index 9586db315..000000000 --- a/pisa_examples/resources/settings/osc/nufitv20.cfg +++ /dev/null @@ -1,37 +0,0 @@ -# Atmospheric mixing parameters found in NuFIT v2.0 -# http://www.nu-fit.org/?q=node/92 -theta12 = 33.48 units.deg - -theta13_nh = 8.5 +/- 0.205 units.deg -theta13_nh.range = [7.85, 9.1] * units.deg - -theta13_ih = 8.51 +/- 0.205 units.deg -theta13_ih.range = [7.87, 9.11] * units.deg - -theta23_nh = 42.3 units.deg -theta23_nh.range = [31, 59] * units.deg -theta23_nh.prior = spline -theta23_nh.prior.data = priors/nufitv20shiftedtheta23splines.json - -theta23_ih = 49.5 units.deg -theta23_ih.range = [31, 59] * units.deg -theta23_ih.prior = spline -theta23_ih.prior.data = priors/nufitv20shiftedtheta23splines.json - -deltacp_nh = 306 units.deg -deltacp_nh.range = [0,360] * units.deg - -deltacp_ih = 254 units.deg -deltacp_ih.range = [0,360] * units.deg - -deltam21 = 7.5e-5 units.eV**2 - -deltam31_nh = 2.457e-3 units.eV**2 -deltam31_nh_gauss = 2.457e-3 +/- 0.047e-3 units.eV**2 -deltam31_nh.3s_range = [2.317e-3, 2.607e-3] * units.eV**2 -deltam31_nh.range = [1e-3, 7e-3] * units.eV**2 - -deltam31_ih = -2.374e-3 units.eV**2 -deltam31_ih_gauss = -2.374e-3 +/- 0.0475e-3 units.eV**2 -deltam31_ih.3s_range = [-2.515e-3, -2.232e-3] * units.eV**2 -deltam31_ih.range = [-7e-3, -1e-3] * units.eV**2 diff --git a/pisa_examples/resources/settings/osc/nufitv22.cfg b/pisa_examples/resources/settings/osc/nufitv22.cfg deleted file mode 100644 index 672dbea14..000000000 --- a/pisa_examples/resources/settings/osc/nufitv22.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# Atmospheric mixing parameters found in NuFIT v2.2 -# http://www.nu-fit.org/?q=node/123 - -theta12 = 33.72 units.deg - -theta13_nh = 8.46 +/- 0.145 units.deg -theta13_nh.range = [8.0, 8.89] * units.deg - -theta13_ih = 8.48 +/- 0.15 units.deg -theta13_ih.range = [8.03, 8.92] * units.deg - -theta23_nh = 41.5 units.deg -theta23_nh.range = [31, 59] * units.deg -theta23_nh.prior = spline -theta23_nh.prior.data = priors/nufitv22shiftedtheta23splines.json - -theta23_ih = 49.9 units.deg -theta23_ih.range = [31, 59] * units.deg -theta23_ih.prior = spline -theta23_ih.prior.data = priors/nufitv22shiftedtheta23splines.json - -deltacp_nh = 289 units.deg -deltacp_nh.range = [0,360] * units.deg - -deltacp_ih = 269 units.deg -deltacp_ih.range = [0,360] * units.deg - -deltam21 = 7.49e-5 units.eV**2 - -deltam31_nh = 2.526e-3 units.eV**2 -deltam31_nh_gauss = 2.526e-3 +/- 0.038e-3 units.eV**2 -deltam31_nh.3s_range = [2.413e-3, 2.645e-3] * units.eV**2 -deltam31_nh.range = [1e-3, 7e-3] * units.eV**2 - -deltam31_ih = -2.443e-3 units.eV**2 -deltam31_ih_gauss = -2.443e-3 +/- 0.0375e-3 units.eV**2 -deltam31_ih.3s_range = [-2.559e-3, -2.331e-3] * units.eV**2 -deltam31_ih.range = [-7e-3, -1e-3] * units.eV**2 diff --git a/pisa_examples/resources/settings/osc/nufitv31.cfg b/pisa_examples/resources/settings/osc/nufitv31.cfg deleted file mode 100644 index c7709262c..000000000 --- a/pisa_examples/resources/settings/osc/nufitv31.cfg +++ /dev/null @@ -1,32 +0,0 @@ -[osc] -# best fit values from NuFitv3.1 -theta12 = 33.63 units.deg - -theta13_nh = 8.52 +/- 0.15 units.deg -theta13_nh.3s_range = [8.07, 8.98] * units.deg - -theta13_ih = 8.55 +/- 0.14 units.deg -theta13_ih.3s_range = [8.11, 8.98] * units.deg - -theta23_nh = 48.7 units.deg -theta23_nh.range = [30, 60] * units.deg -theta23_nh.3s_range = [39.3, 52.4] * units.deg - -theta23_ih = 49.1 units.deg -theta23_ih.range = [30, 60] * units.deg -theta23_ih.3s_range = [40.3, 52.4] * units.deg - -deltacp = 0 units.deg -deltacp.range = [0,360] * units.deg - -deltam21 = 7.40e-5 units.eV**2 - -deltam31_nh = 0.002515 units.eV**2 -deltam31_nh_gauss = 0.002515 +/- 0.000035 * units.eV**2 -deltam31_nh.range = [0.001, +0.007] * units.eV**2 -deltam31_nh.3s_range = [0.002408, 0.002621] * units.eV**2 - -deltam31_ih = -0.002409 units.eV**2 -deltam31_ih_gauss = -0.002409 +/- 0.0000345 units.eV**2 -deltam31_ih.3s_range = [-0.002515, -0.002305] * units.eV**2 -deltam31_ih.range = [-0.007, -0.001] * units.eV**2 diff --git a/pisa_examples/resources/settings/osc/nufitv40.cfg b/pisa_examples/resources/settings/osc/nufitv40.cfg deleted file mode 100644 index 56011d25b..000000000 --- a/pisa_examples/resources/settings/osc/nufitv40.cfg +++ /dev/null @@ -1,42 +0,0 @@ -# Best fit values from NuFitv4.0 (with SK atmospheric data) -# Note that asymmetric Gaussian 1 sigma not currently implemented, so 1 sigma uncertainty not exact here - -theta12 = 33.82 units.deg -theta12.3s_range = [31.61, 36.27] * units.deg - -theta13_nh = 8.61 +/- 0.13 units.deg -theta13_nh.3s_range = [8.22, 8.98] * units.deg - -theta13_ih = 8.65 +/- 0.13 units.deg -theta13_ih.3s_range = [8.27, 9.03] * units.deg - -theta23_nh = 49.7 units.deg -theta23_nh.range = [30, 60] * units.deg -theta23_nh.3s_range = [40.9, 52.2] * units.deg - -theta23_ih = 49.7 units.deg -theta23_ih.range = [30, 60] * units.deg -theta23_ih.3s_range = [41.2, 52.1] * units.deg - -deltacp_nh = 217 units.deg -deltacp_nh.3s_range = [135,366] * units.deg -deltacp_nh.range = [0,360] * units.deg - -deltacp_ih = 280 units.deg -deltacp_ih.3s_range = [196,351] * units.deg -deltacp_ih.range = [0,360] * units.deg - -deltam21 = 7.39e-5 units.eV**2 -deltam21.3s_range = [6.79e-5, 8.01e-5] * units.eV**2 - -# NuFit dm3l = dm31 for the normal ordering, so can directly use the NuFit value -deltam31_nh = 0.002525 units.eV**2 -deltam31_nh_gauss = 0.002525 +/- 0.000033 * units.eV**2 -deltam31_nh.range = [0.001, +0.007] * units.eV**2 -deltam31_nh.3s_range = [0.002431, 0.002622] * units.eV**2 - -# NuFit dm3l = dm32 for the inverted ordering (and is thus negative), so must convert using: dm31 = dm32 + dm21 -deltam31_ih = -0.002438 units.eV**2 -deltam31_ih_gauss = -0.002438 +/- 0.0000344 units.eV**2 -deltam31_ih.3s_range = [-0.002538, -0.002333] * units.eV**2 -deltam31_ih.range = [-0.007, -0.001] * units.eV**2 \ No newline at end of file diff --git a/pisa_examples/resources/settings/osc/nufitv52.cfg b/pisa_examples/resources/settings/osc/nufitv52.cfg deleted file mode 100644 index bf13c2bd3..000000000 --- a/pisa_examples/resources/settings/osc/nufitv52.cfg +++ /dev/null @@ -1,44 +0,0 @@ -# Best fit values from NuFitv5.2 (with SK atmospheric data) -# Note that asymmetric Gaussian 1 sigma not currently implemented, so 1 sigma uncertainty not exact here - -theta12 = 33.41 units.deg -theta12.3s_range = [31.31, 35.74] * units.deg - -theta13_nh = 8.58 +/- 0.11 units.deg -theta13_nh.3s_range = [8.23, 8.91] * units.deg - -theta13_ih = 8.57 +/- 0.11 units.deg -theta13_ih.3s_range = [8.23, 8.94] * units.deg - -theta23_nh = 42.2 units.deg -theta23_nh.3s_range = [39.7, 51.0] * units.deg -theta23_nh.range = [30.0, 60.0] * units.deg - -theta23_ih = 49.0 units.deg -theta23_ih.3s_range = [39.9, 51.5] * units.deg -theta23_ih.range = [30.0, 60.0] * units.deg - -deltacp_nh = 232 units.deg -deltacp_nh_gauss = 232 +/- 36 units.deg -deltacp_nh.3s_range = [144,350] * units.deg -deltacp_nh.range = [0,360] * units.deg - -deltacp_ih = 276 units.deg -deltacp_ih_gauss = 276 +/- 29 units.deg -deltacp_ih.3s_range = [194,344] * units.deg -deltacp_ih.range = [0,360] * units.deg - -deltam21 = 7.41e-5 units.eV**2 -deltam21.3s_range = [6.82e-5, 8.03e-5] * units.eV**2 - -# NuFit dm3l = dm31 for the normal ordering, so can directly use the NuFit value -deltam31_nh = 0.002507 units.eV**2 -deltam31_nh_gauss = 0.002507 +/- 0.000027 * units.eV**2 -deltam31_nh.range = [0.001, 0.007] * units.eV**2 -deltam31_nh.3s_range = [0.002427, 0.002590] * units.eV**2 - -# NuFit dm3l = dm32 for the inverted ordering (and is thus negative), so must convert using: dm31 = dm32 + dm21 -deltam31_ih = -0.002412 units.eV**2 -deltam31_ih_gauss = -0.002412 +/- 0.000028 * units.eV**2 -deltam31_ih.3s_range = [-0.002496, -0.002332] * units.eV**2 -deltam31_ih.range = [-0.007, -0.001] * units.eV**2 diff --git a/pisa_examples/resources/settings/osc/nufitv52_wo_SK.cfg b/pisa_examples/resources/settings/osc/nufitv52_wo_SK.cfg deleted file mode 100644 index 0634d5380..000000000 --- a/pisa_examples/resources/settings/osc/nufitv52_wo_SK.cfg +++ /dev/null @@ -1,42 +0,0 @@ -# Best fit values from NuFitv5.2 (without SK atmospheric data) -# Note that asymmetric Gaussian 1 sigma not currently implemented, so 1 sigma uncertainty not exact here - -theta12 = 33.41 units.deg -theta12.3s_range = [31.31, 35.74] * units.deg - -theta13_nh = 8.54 +/- 0.11 units.deg -theta13_nh.3s_range = [8.19, 8.89] * units.deg - -theta13_ih = 8.57 +/- 0.11 units.deg -theta13_ih.3s_range = [8.23, 8.90] * units.deg - -theta23_nh = 49.1 units.deg -theta23_nh.3s_range = [39.6, 51.9] * units.deg -theta23_nh.range = [38.0, 52.0] * units.deg - -theta23_ih = 49.5 units.deg -theta23_ih.3s_range = [39.9, 52.1] * units.deg -theta23_ih.range = [38.0, 52.0] * units.deg - -deltacp_nh = 197 units.deg -deltacp_nh.3s_range = [108,404] * units.deg -deltacp_nh.range = [0,360] * units.deg - -deltacp_ih = 286 units.deg -deltacp_ih.3s_range = [192,360] * units.deg -deltacp_ih.range = [0,360] * units.deg - -deltam21 = 7.41e-5 units.eV**2 -deltam21.3s_range = [6.82e-5, 8.03e-5] * units.eV**2 - -# NuFit dm3l = dm31 for the normal ordering, so can directly use the NuFit value -deltam31_nh = 0.002511 units.eV**2 -deltam31_nh_gauss = 0.002511 +/- 0.0000281 * units.eV**2 -deltam31_nh.range = [0.001, 0.007] * units.eV**2 -deltam31_nh.3s_range = [0.002428, 0.002597] * units.eV**2 - -# NuFit dm3l = dm32 for the inverted ordering (and is thus negative), so must convert using: dm31 = dm32 + dm21 -deltam31_ih = -0.002424 units.eV**2 -deltam31_ih_gauss = -0.002424 +/- 0.0000288 * units.eV**2 -deltam31_ih.3s_range = [-0.002507, -0.002334] * units.eV**2 -deltam31_ih.range = [-0.007, -0.001] * units.eV**2 \ No newline at end of file diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg deleted file mode 100644 index f1c44a704..000000000 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg +++ /dev/null @@ -1,27 +0,0 @@ -#include settings/binning/IceCube_3y_oscillations.cfg as binning - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be excecuted one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.csv_data_hist - -name = data - -output_binning = dragon_datarelease -output_key = weights - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -[data.csv_data_hist] - -events_file = events/IceCube_3y_oscillations/data.csv.bz2 - -calc_mode = events -apply_mode = dragon_datarelease \ No newline at end of file diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_muons.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_muons.cfg deleted file mode 100644 index 576c9ad54..000000000 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_muons.cfg +++ /dev/null @@ -1,34 +0,0 @@ -#include settings/binning/IceCube_3y_oscillations.cfg as binning - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be excecuted one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.csv_icc_hist - -name = muons - -output_binning = dragon_datarelease -output_key = weights, errors - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -[data.csv_icc_hist] - -calc_mode = dragon_datarelease -apply_mode = dragon_datarelease - -events_file = events/IceCube_3y_oscillations/muons.csv.bz2 - -error_method = fixed - -param.atm_muon_scale = 1.0 -param.atm_muon_scale.fixed = False -param.atm_muon_scale.range = [0.0, 5.0] * units.dimensionless -param.atm_muon_scale.prior = uniform diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg deleted file mode 100644 index d322df618..000000000 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg +++ /dev/null @@ -1,205 +0,0 @@ -#include settings/binning/IceCube_3y_oscillations.cfg as binning -#include settings/osc/nufitv20.cfg as osc -#include settings/osc/earth.cfg as earth - -# These first few lines import other config files that will be useful here... - - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be excecuted one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.csv_loader, flux.honda_ip, flux.barr_simple, osc.prob3, aeff.aeff, utils.hist, discr_sys.hypersurfaces - -# Select the params denoted by param.. -# This feature allows a whole subset of parameters to be selected, -# in this case normal hierarchy values for oscillation parameters -param_selections = nh - -name = neutrinos - -output_binning = dragon_datarelease -output_key = weights, errors - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -[data.csv_loader] - -calc_mode = events -apply_mode = events - -output_names = nue_cc, numu_cc, nutau_cc, nue_nc, numu_nc, nutau_nc, nuebar_cc, numubar_cc, nutaubar_cc, nuebar_nc, numubar_nc, nutaubar_nc - -events_file = events/IceCube_3y_oscillations/neutrino_mc.csv.bz2 - -[flux.honda_ip] - -calc_mode = true_allsky_fine -apply_mode = events - -param.flux_table = flux/honda-2015-spl-solmin-aa.d - -[flux.barr_simple] - -calc_mode = true_allsky_fine -apply_mode = events - -# * nu/nubar ratio -param.nu_nubar_ratio = 1.0 +/- 0.1 -param.nu_nubar_ratio.fixed = True -param.nu_nubar_ratio.range = nominal + [-3., +3.] * sigma - -# * nu_e/nu_mu ratio -param.nue_numu_ratio = 1.0 +/- 0.05 -param.nue_numu_ratio.fixed = False -param.nue_numu_ratio.range = nominal + [-0.5, +0.5] - -# Barr flux up/horizontal -param.Barr_uphor_ratio = 0.0 +/- 1.0 -param.Barr_uphor_ratio.fixed = False -param.Barr_uphor_ratio.range = nominal + [-3.0, +3.0] - -# Barr flux nu/nubar -param.Barr_nu_nubar_ratio = 0.0 +/- 1.0 -param.Barr_nu_nubar_ratio.fixed = False -param.Barr_nu_nubar_ratio.range = nominal + [-3.0, +3.0] - -# Spectral index -param.delta_index = 0.0 +/- 0.1 -param.delta_index.fixed = False -param.delta_index.range = nominal + [-5, +5] * sigma - -[osc.prob3] - -calc_mode = true_allsky_fine -apply_mode = events - -# Preliminary Reference Earth Model -param.earth_model = osc/PREM_12layer.dat -# electron densities -param.YeI = ${earth:YeI} -param.YeM = ${earth:YeM} -param.YeO = ${earth:YeO} -# height -param.detector_depth = ${earth:detector_depth} -param.prop_height = ${earth:prop_height} -# solar angle -param.theta12 = ${osc:theta12} -param.theta12.fixed = True -# reactor angle -param.nh.theta13 = ${osc:theta13_nh} -param.nh.theta13.fixed = False -param.nh.theta13.range = ${osc:theta13_nh.range} -param.ih.theta13 = ${osc:theta13_ih} -param.ih.theta13.fixed = False -param.ih.theta13.range = ${osc:theta13_ih.range} -# atmospheric angle -param.nh.theta23 = ${osc:theta23_nh} -param.nh.theta23.fixed = False -param.nh.theta23.range = ${osc:theta23_nh.range} -param.nh.theta23.prior = uniform -param.ih.theta23 = ${osc:theta23_ih} -param.ih.theta23.fixed = False -param.ih.theta23.range = ${osc:theta23_ih.range} -param.ih.theta23.prior = uniform -# dirac phase -param.nh.deltacp = 0.0 * units.degree -param.nh.deltacp.fixed = True -param.nh.deltacp.range = ${osc:deltacp_nh.range} -param.nh.deltacp.prior = uniform -param.ih.deltacp = 0.0 * units.degree -param.ih.deltacp.fixed = True -# solar mass splitting -param.deltam21 = ${osc:deltam21} -param.deltam21.fixed = True -# atmospheric mass splitting -param.nh.deltam31 = ${osc:deltam31_nh} -param.nh.deltam31.fixed = False -param.nh.deltam31.prior = uniform -param.nh.deltam31.range = [0.001, +0.007] * units.eV**2 -param.ih.deltam31 = ${osc:deltam31_ih} -param.ih.deltam31.fixed = False -param.ih.deltam31.prior = uniform -param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 - - -[aeff.aeff] - -calc_mode = events -apply_mode = events - -param.livetime = 2.5 * units.common_year - -# overall norm -param.aeff_scale = 1.0 -param.aeff_scale.fixed = False -param.aeff_scale.prior = uniform -param.aeff_scale.range = [0.,3.] * units.dimensionless - -# CC tau neutrino norm -param.nutau_cc_norm = 1.0 -param.nutau_cc_norm.fixed = True -param.nutau_cc_norm.range = [0.2, 2.0] * units.dimensionless -param.nutau_cc_norm.prior = uniform - -# CC+NC nutau norm -param.nutau_norm = 1.0 -param.nutau_norm.fixed = False -param.nutau_norm.range = [-1.0, 8.5] * units.dimensionless -param.nutau_norm.prior = uniform - -# NC norm -param.nu_nc_norm = 1.0 +/- 0.2 -param.nu_nc_norm.fixed = False -param.nu_nc_norm.range = nominal + [-.5,+.5] - -[utils.hist] - -calc_mode = events -apply_mode = dragon_datarelease - -error_method = sumw2 - - -[discr_sys.hypersurfaces] - -calc_mode = ${utils.hist:apply_mode} -apply_mode = ${utils.hist:apply_mode} - -error_method = sumw2 - -links = {'nue_cc+nuebar_cc':['nue_cc', 'nuebar_cc'], 'numu_cc+numubar_cc':['numu_cc', 'numubar_cc'], 'nutau_cc+nutaubar_cc':['nutau_cc', 'nutaubar_cc'], 'nu_nc+nubar_nc':['nue_nc', 'numu_nc', 'nutau_nc', 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']} - -fit_results_file = events/IceCube_3y_oscillations/hyperplanes_*.csv.bz2 - -# DOM efficiency -param.opt_eff_overall = 1.0 +/- 0.1 -param.opt_eff_overall.fixed = False -param.opt_eff_overall.range = [0.8, 1.2] * units.dimensionless - -# hole ice scattering -param.opt_eff_lateral = 25 +/- 10 -param.opt_eff_lateral.fixed = False -param.opt_eff_lateral.range = [5, 50] * units.dimensionless - -# hole ice forward -param.opt_eff_headon = 0.0 -param.opt_eff_headon.fixed = False -param.opt_eff_headon.range = [-5.0, 2.0] * units.dimensionless -param.opt_eff_headon.prior = uniform - -# bulk_scatter -param.ice_scattering = 0.0 +/- 10.0 -param.ice_scattering.fixed = False -param.ice_scattering.range = [-15, 15] * units.dimensionless - -# bulk_abs -param.ice_absorption = 0.0 +/- 10.0 -param.ice_absorption.fixed = False -param.ice_absorption.range = [-15, 15] * units.dimensionless diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg deleted file mode 100644 index 70e37857f..000000000 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg +++ /dev/null @@ -1,270 +0,0 @@ -#include settings/binning/IceCube_3y_oscillations.cfg as binning -#include settings/osc/nufitv20.cfg as osc -#include settings/osc/earth.cfg as earth - -# These first few lines import other config files that will be useful here... - - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be excecuted one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.csv_loader, flux.daemon_flux, osc.prob3, aeff.aeff, utils.hist, discr_sys.hypersurfaces - -# Select the params denoted by param.. -# This feature allows a whole subset of parameters to be selected, -# in this case normal hierarchy values for oscillation parameters -param_selections = nh - -name = neutrinos - -output_binning = dragon_datarelease -output_key = weights, errors - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -[data.csv_loader] - -calc_mode = events -apply_mode = events - -output_names = nue_cc, numu_cc, nutau_cc, nue_nc, numu_nc, nutau_nc, nuebar_cc, numubar_cc, nutaubar_cc, nuebar_nc, numubar_nc, nutaubar_nc - -events_file = events/IceCube_3y_oscillations/neutrino_mc.csv.bz2 - -[flux.daemon_flux] - -calc_mode = events -apply_mode = events - -param.daemon_K_158G = 0.0 +/- 1.0 -param.daemon_K_158G.fixed = False -param.daemon_K_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_K_2P = 0.0 +/- 1.0 -param.daemon_K_2P.fixed = False -param.daemon_K_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_K_31G = 0.0 +/- 1.0 -param.daemon_K_31G.fixed = False -param.daemon_K_31G.range = nominal + [-3., +3.] * sigma - -param.daemon_antiK_158G = 0.0 +/- 1.0 -param.daemon_antiK_158G.fixed = False -param.daemon_antiK_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_antiK_2P = 0.0 +/- 1.0 -param.daemon_antiK_2P.fixed = False -param.daemon_antiK_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_antiK_31G = 0.0 +/- 1.0 -param.daemon_antiK_31G.fixed = False -param.daemon_antiK_31G.range = nominal + [-3., +3.] * sigma - -param.daemon_n_158G = 0.0 +/- 1.0 -param.daemon_n_158G.fixed = False -param.daemon_n_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_n_2P = 0.0 +/- 1.0 -param.daemon_n_2P.fixed = False -param.daemon_n_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_p_158G = 0.0 +/- 1.0 -param.daemon_p_158G.fixed = False -param.daemon_p_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_p_2P = 0.0 +/- 1.0 -param.daemon_p_2P.fixed = False -param.daemon_p_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_pi_158G = 0.0 +/- 1.0 -param.daemon_pi_158G.fixed = False -param.daemon_pi_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_pi_20T = 0.0 +/- 1.0 -param.daemon_pi_20T.fixed = False -param.daemon_pi_20T.range = nominal + [-3., +3.] * sigma - -param.daemon_pi_2P = 0.0 +/- 1.0 -param.daemon_pi_2P.fixed = False -param.daemon_pi_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_pi_31G = 0.0 +/- 1.0 -param.daemon_pi_31G.fixed = False -param.daemon_pi_31G.range = nominal + [-3., +3.] * sigma - -param.daemon_antipi_158G = 0.0 +/- 1.0 -param.daemon_antipi_158G.fixed = False -param.daemon_antipi_158G.range = nominal + [-3., +3.] * sigma - -param.daemon_antipi_20T = 0.0 +/- 1.0 -param.daemon_antipi_20T.fixed = False -param.daemon_antipi_20T.range = nominal + [-3., +3.] * sigma - -param.daemon_antipi_2P = 0.0 +/- 1.0 -param.daemon_antipi_2P.fixed = False -param.daemon_antipi_2P.range = nominal + [-3., +3.] * sigma - -param.daemon_antipi_31G = 0.0 +/- 1.0 -param.daemon_antipi_31G.fixed = False -param.daemon_antipi_31G.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_1 = 0.0 +/- 1.0 -param.daemon_GSF_1.fixed = False -param.daemon_GSF_1.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_2 = 0.0 +/- 1.0 -param.daemon_GSF_2.fixed = False -param.daemon_GSF_2.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_3 = 0.0 +/- 1.0 -param.daemon_GSF_3.fixed = False -param.daemon_GSF_3.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_4 = 0.0 +/- 1.0 -param.daemon_GSF_4.fixed = False -param.daemon_GSF_4.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_5 = 0.0 +/- 1.0 -param.daemon_GSF_5.fixed = False -param.daemon_GSF_5.range = nominal + [-3., +3.] * sigma - -param.daemon_GSF_6 = 0.0 +/- 1.0 -param.daemon_GSF_6.fixed = False -param.daemon_GSF_6.range = nominal + [-3., +3.] * sigma - - -[osc.prob3] - -calc_mode = true_allsky_fine -apply_mode = events - -# Preliminary Reference Earth Model -param.earth_model = osc/PREM_12layer.dat -# electron densities -param.YeI = ${earth:YeI} -param.YeM = ${earth:YeM} -param.YeO = ${earth:YeO} -# height -param.detector_depth = ${earth:detector_depth} -param.prop_height = ${earth:prop_height} -# solar angle -param.theta12 = ${osc:theta12} -param.theta12.fixed = True -# reactor angle -param.nh.theta13 = ${osc:theta13_nh} -param.nh.theta13.fixed = False -param.nh.theta13.range = ${osc:theta13_nh.range} -param.ih.theta13 = ${osc:theta13_ih} -param.ih.theta13.fixed = False -param.ih.theta13.range = ${osc:theta13_ih.range} -# atmospheric angle -param.nh.theta23 = ${osc:theta23_nh} -param.nh.theta23.fixed = False -param.nh.theta23.range = ${osc:theta23_nh.range} -param.nh.theta23.prior = uniform -param.ih.theta23 = ${osc:theta23_ih} -param.ih.theta23.fixed = False -param.ih.theta23.range = ${osc:theta23_ih.range} -param.ih.theta23.prior = uniform -# dirac phase -param.nh.deltacp = 0.0 * units.degree -param.nh.deltacp.fixed = True -param.nh.deltacp.range = ${osc:deltacp_nh.range} -param.nh.deltacp.prior = uniform -param.ih.deltacp = 0.0 * units.degree -param.ih.deltacp.fixed = True -# solar mass splitting -param.deltam21 = ${osc:deltam21} -param.deltam21.fixed = True -# atmospheric mass splitting -param.nh.deltam31 = ${osc:deltam31_nh} -param.nh.deltam31.fixed = False -param.nh.deltam31.prior = uniform -param.nh.deltam31.range = [0.001, +0.007] * units.eV**2 -param.ih.deltam31 = ${osc:deltam31_ih} -param.ih.deltam31.fixed = False -param.ih.deltam31.prior = uniform -param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 - - -[aeff.aeff] - -calc_mode = events -apply_mode = events - -param.livetime = 2.5 * units.common_year - -# overall norm -param.aeff_scale = 1.0 -param.aeff_scale.fixed = False -param.aeff_scale.prior = uniform -param.aeff_scale.range = [0.,3.] * units.dimensionless - -# CC tau neutrino norm -param.nutau_cc_norm = 1.0 -param.nutau_cc_norm.fixed = True -param.nutau_cc_norm.range = [0.2, 2.0] * units.dimensionless -param.nutau_cc_norm.prior = uniform - -# CC+NC nutau norm -param.nutau_norm = 1.0 -param.nutau_norm.fixed = False -param.nutau_norm.range = [-1.0, 8.5] * units.dimensionless -param.nutau_norm.prior = uniform - -# NC norm -param.nu_nc_norm = 1.0 +/- 0.2 -param.nu_nc_norm.fixed = False -param.nu_nc_norm.range = nominal + [-.5,+.5] - -[utils.hist] - -calc_mode = events -apply_mode = dragon_datarelease - -error_method = sumw2 - - -[discr_sys.hypersurfaces] - -calc_mode = ${utils.hist:apply_mode} -apply_mode = ${utils.hist:apply_mode} - -error_method = sumw2 - -links = {'nue_cc+nuebar_cc':['nue_cc', 'nuebar_cc'], 'numu_cc+numubar_cc':['numu_cc', 'numubar_cc'], 'nutau_cc+nutaubar_cc':['nutau_cc', 'nutaubar_cc'], 'nu_nc+nubar_nc':['nue_nc', 'numu_nc', 'nutau_nc', 'nuebar_nc', 'numubar_nc', 'nutaubar_nc']} - -fit_results_file = events/IceCube_3y_oscillations/hyperplanes_*.csv.bz2 - -# DOM efficiency -param.opt_eff_overall = 1.0 +/- 0.1 -param.opt_eff_overall.fixed = False -param.opt_eff_overall.range = [0.8, 1.2] * units.dimensionless - -# hole ice scattering -param.opt_eff_lateral = 25 +/- 10 -param.opt_eff_lateral.fixed = False -param.opt_eff_lateral.range = [5, 50] * units.dimensionless - -# hole ice forward -param.opt_eff_headon = 0.0 -param.opt_eff_headon.fixed = False -param.opt_eff_headon.range = [-5.0, 2.0] * units.dimensionless -param.opt_eff_headon.prior = uniform - -# bulk_scatter -param.ice_scattering = 0.0 +/- 10.0 -param.ice_scattering.fixed = False -param.ice_scattering.range = [-15, 15] * units.dimensionless - -# bulk_abs -param.ice_absorption = 0.0 +/- 10.0 -param.ice_absorption.fixed = False -param.ice_absorption.range = [-15, 15] * units.dimensionless diff --git a/pisa_examples/resources/settings/pipeline/README.md b/pisa_examples/resources/settings/pipeline/README.md deleted file mode 100644 index d1d9f6357..000000000 --- a/pisa_examples/resources/settings/pipeline/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Pipeline Settings - -This directory contains example pipeline configuration files for most of the stages and the services that implement each stage in PISA. - - -## Directory listing - -| File/directory | Description -| --------------------------- | ----------- -| `example.cfg` | simplest MC pipeline with no smoothing -| `example_aeffsmooth.cfg` | "staged approach"; upgoing-only events with stages `flux`, `osc`, and `aeff`; smoothing is used in the `aeff` stage -| `example_cake.cfg` | simplest `hist`-based ("staged-approach") pipeline with no smoothing -| `example_cfx.cfg` | MC-reweighting unfolding pipeline that uses the `roounfold` service and includes treatment of discrete systematics -| `example_dummy.cfg` | Demonstrates a simple pipeline using just the flux/dummy and osc/dummy file -| `example_gen_lvl.cfg` | simple MC-reweighting pipeline that processes generator-level events -| `example_mceq.cfg` | Use of MCEq for flux -| `example_muon_sample.cfg` | MC-reweighting pipeline for muons -| `example_cake_nusquids.cfg` | Use NuQuids for neutrino oscillations -| `example_param.cfg` | "staged approach" with smoothing provided by parameterization services for effective areas, reco, and PID (here PID is a separate stage) -| `example_pid_stage.cfg` | simple "staged-approach" but with PID as a separate stage from reco (note that this has been shown to be less accurate than including PID within reco) -| `example_vacuum.cfg` | simple "staged approach" but oscillations set to those in vacuum (as opposed to oscillations through Earth, as calculated elsewhere) -| `example_vbwkde.cfg` | "staged approach" with smoothing of reco resolutions (including PID) via bandwidth KDE (VBWKDE, also known as adaptive KDE) -| `example_xsec.cfg` | "staged approach" but replacing the `aeff` stage with `xsec`; no reco or PID stages are used diff --git a/pisa_examples/resources/settings/pipeline/example.cfg b/pisa_examples/resources/settings/pipeline/example.cfg deleted file mode 100644 index d2a747dac..000000000 --- a/pisa_examples/resources/settings/pipeline/example.cfg +++ /dev/null @@ -1,258 +0,0 @@ -#include settings/binning/example.cfg as binning -#include settings/osc/nufitv20.cfg as osc -#include settings/osc/earth.cfg as earth - -# These first few lines import other config files that will be useful here... - - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be executed one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.simple_data_loader, flux.barr_simple, osc.prob3, aeff.aeff, utils.hist - -# Select the params denoted by param.. -# This feature allows a whole subset of parameters to be selected, -# in this case normal hierarchy values for oscillation parameters -param_selections = nh, earth - -name = neutrinos - -output_binning = reco_binning -output_key = weights, errors - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -# This stage is used to load events -# The events used here are toy events, stored as HDF5 files - -[data.simple_data_loader] - -# 'specs' tell the stages what format the data should be in, normally events or -# histograms (which are specified via a binning definition). PISA is designed -# such that stages should be able to accept either binned or event-wise data and -# perform either binned or event-wise calculations, although some stages may -# only support specific configurations. -# The particular options to each stage are: -# 1) calc_mode : the data representation that is by default selected before -# the stages `compute_function` is executed -# 2) apply_mode : the data representation that is by default selected before -# the stages `apply_function` is executed - -calc_mode = events -apply_mode = events - -# Define the categories of events to be produced by this pipeline -# Here we use distinct categories for each flavor, particle vs antiparticle, -# and CC vs NC interaction -output_names = nue_cc, numu_cc, nutau_cc, nuebar_cc, numubar_cc, nutaubar_cc, nue_nc, numu_nc, nutau_nc, nuebar_nc, numubar_nc, nutaubar_nc - -# The file containing the input events -events_file = events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5 - -# Any cuts that should be applied to the events -mc_cuts = (pid >= -3) - -# Map input file variables to PISA event variables -data_dict = { - 'true_energy': 'true_energy', - 'true_coszen': 'true_coszen', - 'reco_energy': 'reco_energy', - 'reco_coszen': 'reco_coszen', - 'pid': 'pid', - 'weighted_aeff': 'weighted_aeff', - 'nu_flux_nominal': ['nominal_nue_flux', 'nominal_numu_flux'], - 'nubar_flux_nominal': ['nominal_nuebar_flux', 'nominal_numubar_flux'] - } - - -#------------------------------------------------------------------------------ -# 'flux' stage parameters -#------------------------------------------------------------------------------ - -# This stage computes weight modifications for events according -# to the flux systematics. -# Right now the implementation is a parameterisation of the -# Barr 2006 paper, plus handling for the spectral index. - -[flux.barr_simple] - -calc_mode = events -apply_mode = events - -# nu/nubar ratio -param.nu_nubar_ratio = 1.0 +/- 0.1 -param.nu_nubar_ratio.fixed = True -param.nu_nubar_ratio.range = nominal + [-3., +3.] * sigma - -# nu_e/nu_mu ratio -param.nue_numu_ratio = 1.0 +/- 0.05 -param.nue_numu_ratio.fixed = True -param.nue_numu_ratio.range = nominal + [-0.5, +0.5] - -# Barr flux up/horizontal -param.Barr_uphor_ratio = 0.0 +/- 1.0 -param.Barr_uphor_ratio.fixed = True -param.Barr_uphor_ratio.range = nominal + [-3.0, +3.0] - -# Barr flux nu/nubar -param.Barr_nu_nubar_ratio = 0.0 +/- 1.0 -param.Barr_nu_nubar_ratio.fixed = True -param.Barr_nu_nubar_ratio.range = nominal + [-3.0, +3.0] - -# Spectral index -param.delta_index = 0.0 +/- 0.1 -param.delta_index.fixed = False -param.delta_index.range = nominal + [-5, +5] * sigma - - -#------------------------------------------------------------------------------ -# 'oscillation' stage parameters -#------------------------------------------------------------------------------ - -# The oscillations stage uses prob3 to calculate oscillation probabilities -# for the events according to the values of the mass splitting, mixing angles, -# etc provided. -# Note that the oscillation probabilities here are computed on a grid and assigned -# to the individual events (it is also possible just to compute exactly for -# each event, but this might be slower depending on sample size) - -[osc.prob3] - -# Here our input and output will be events, but we perform the oscillation -# probability calculation on a grid for speed -calc_mode = calc_grid -apply_mode = events - -# Preliminary Reference Earth Model -param.earth_model = osc/PREM_12layer.dat - -# electron densities -param.earth.YeI = ${earth:YeI} -param.earth.YeM = ${earth:YeM} -param.earth.YeO = ${earth:YeO} - -param.lead.YeI = 0.398 -param.lead.YeM = 0.398 -param.lead.YeO = 0.398 - -# depth of detector below Earth surface and -# neutrino production height in the atmosphere -# (e.g., for vertically downgoing, -# baseline = depth + height) -param.detector_depth = ${earth:detector_depth} -param.prop_height = ${earth:prop_height} - -# solar angle -param.theta12 = ${osc:theta12} -param.theta12.fixed = True - -# reactor angle -param.nh.theta13 = ${osc:theta13_nh} -param.nh.theta13.fixed = True -param.nh.theta13.range = ${osc:theta13_nh.range} - -param.ih.theta13 = ${osc:theta13_ih} -param.ih.theta13.fixed = True -param.ih.theta13.range = ${osc:theta13_ih.range} - -# atmospheric angle -param.nh.theta23 = ${osc:theta23_nh} -param.nh.theta23.fixed = False -param.nh.theta23.range = [0, 90] * units.degree -param.nh.theta23.prior = uniform - -param.ih.theta23 = ${osc:theta23_ih} -param.ih.theta23.fixed = False -param.ih.theta23.range = [0, 90] * units.degree -param.ih.theta23.prior = uniform - -# dirac phase -param.nh.deltacp = 0.0 * units.deg -param.nh.deltacp.fixed = True -param.nh.deltacp.range = ${osc:deltacp_nh.range} -param.nh.deltacp.prior = uniform - -param.ih.deltacp = 0.0 * units.deg -param.ih.deltacp.fixed = True -param.ih.deltacp.range = ${osc:deltacp_ih.range} -param.ih.deltacp.prior = uniform - -# solar mass splitting -param.deltam21 = ${osc:deltam21} -param.deltam21.fixed = True - -# atmospheric mass splitting -param.nh.deltam31 = ${osc:deltam31_nh} -param.nh.deltam31.fixed = True -param.nh.deltam31.prior = uniform -param.nh.deltam31.range = [0.001, +0.007] * units.eV**2 - -param.ih.deltam31 = ${osc:deltam31_ih} -param.ih.deltam31.fixed = True -param.ih.deltam31.prior = uniform -param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 - - -#------------------------------------------------------------------------------ -# 'effective area' stage parameters -#------------------------------------------------------------------------------ - -# This stage is responsible for handling a host of normalisations of the -# events/histograms (the stage name is a bit misleading) -# We provide the livetime for our data (or template which matches it) -# The parameter aeff_scale is the overall normalisation for all events, -# and should be free in a shape-only analysis - -[aeff.aeff] - -calc_mode = events -apply_mode = events - -# Detector livetime this template should be weighted to represent -param.livetime = 2.5 * units.common_year - -# Overall normalisation of this pipeline -param.aeff_scale = 1.0 -param.aeff_scale.fixed = False -param.aeff_scale.prior = uniform -param.aeff_scale.range = [0.,3.] * units.dimensionless - -# CC tau neutrino norm -param.nutau_cc_norm = 1.0 -param.nutau_cc_norm.fixed = True -param.nutau_cc_norm.range = [0.2, 2.0] * units.dimensionless -param.nutau_cc_norm.prior = uniform - -# CC+NC nutau norm -param.nutau_norm = 1.0 -param.nutau_norm.fixed = True -param.nutau_norm.range = [-1.0, 8.5] * units.dimensionless -param.nutau_norm.prior = uniform - -# NC norm -param.nu_nc_norm = 1.0 +/- 0.2 -param.nu_nc_norm.fixed = True -param.nu_nc_norm.range = nominal + [-.5,+.5] - - -#------------------------------------------------------------------------------ -# 'histogramming' stage parameters -#------------------------------------------------------------------------------ - -# This just creates histograms (maps in PISA jargon) from the events - -[utils.hist] - -calc_mode = events -apply_mode = reco_binning - -# Specify if and how to assign uncertainties to the output maps, -# here sum of weights-squared -error_method = sumw2 diff --git a/pisa_examples/resources/settings/pipeline/fast_example.cfg b/pisa_examples/resources/settings/pipeline/fast_example.cfg deleted file mode 100644 index bb01b9553..000000000 --- a/pisa_examples/resources/settings/pipeline/fast_example.cfg +++ /dev/null @@ -1,258 +0,0 @@ -#include settings/binning/example.cfg as binning -#include settings/osc/nufitv20.cfg as osc -#include settings/osc/earth.cfg as earth - -# These first few lines import other config files that will be useful here... - - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be executed one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... -order = data.simple_data_loader, flux.barr_simple, osc.prob3, aeff.aeff, utils.hist - -# Select the params denoted by param.. -# This feature allows a whole subset of parameters to be selected, -# in this case normal hierarchy values for oscillation parameters -param_selections = nh, earth - -name = neutrinos - -output_binning = reco_binning -output_key = weights, errors - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -# This stage is used to load events -# The events used here are toy events, stored as HDF5 files - -[data.simple_data_loader] - -# 'specs' tell the stages what format the data should be in, normally events or -# histograms (which are specified via a binning definition). PISA is designed -# such that stages should be able to accept either binned or event-wise data and -# perform either binned or event-wise calculations, although some stages may -# only support specific configurations. -# The particular options to each stage are: -# 1) calc_mode : the data representation that is by default selected before -# the stages `compute_function` is executed -# 2) apply_mode : the data representation that is by default selected before -# the stages `apply_function` is executed - -calc_mode = events -apply_mode = events - -# Define the categories of events to be produced by this pipeline -# Here we use distinct categories for each flavor, particle vs antiparticle, -# and CC vs NC interaction -output_names = nue_cc, numu_cc, nutau_cc, nuebar_cc, numubar_cc, nutaubar_cc, nue_nc, numu_nc, nutau_nc, nuebar_nc, numubar_nc, nutaubar_nc - -# The file containing the input events -events_file = events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5 - -# Any cuts that should be applied to the events -mc_cuts = (pid >= -3) - -# Map input file variables to PISA event variables -data_dict = { - 'true_energy': 'true_energy', - 'true_coszen': 'true_coszen', - 'reco_energy': 'reco_energy', - 'reco_coszen': 'reco_coszen', - 'pid': 'pid', - 'weighted_aeff': 'weighted_aeff', - 'nu_flux_nominal': ['nominal_nue_flux', 'nominal_numu_flux'], - 'nubar_flux_nominal': ['nominal_nuebar_flux', 'nominal_numubar_flux'] - } - - -#------------------------------------------------------------------------------ -# 'flux' stage parameters -#------------------------------------------------------------------------------ - -# This stage computes weight modifications for events according -# to the flux systematics. -# Right now the implementation is a parameterisation of the -# Barr 2006 paper, plus handling for the spectral index. - -[flux.barr_simple] - -calc_mode = events -apply_mode = events - -# nu/nubar ratio -param.nu_nubar_ratio = 1.0 +/- 0.1 -param.nu_nubar_ratio.fixed = True -param.nu_nubar_ratio.range = nominal + [-3., +3.] * sigma - -# nu_e/nu_mu ratio -param.nue_numu_ratio = 1.0 +/- 0.05 -param.nue_numu_ratio.fixed = True -param.nue_numu_ratio.range = nominal + [-0.5, +0.5] - -# Barr flux up/horizontal -param.Barr_uphor_ratio = 0.0 +/- 1.0 -param.Barr_uphor_ratio.fixed = True -param.Barr_uphor_ratio.range = nominal + [-3.0, +3.0] - -# Barr flux nu/nubar -param.Barr_nu_nubar_ratio = 0.0 +/- 1.0 -param.Barr_nu_nubar_ratio.fixed = True -param.Barr_nu_nubar_ratio.range = nominal + [-3.0, +3.0] - -# Spectral index -param.delta_index = 0.0 +/- 0.1 -param.delta_index.fixed = False -param.delta_index.range = nominal + [-5, +5] * sigma - - -#------------------------------------------------------------------------------ -# 'oscillation' stage parameters -#------------------------------------------------------------------------------ - -# The oscillations stage uses prob3 to calculate oscillation probabilities -# for the events according to the values of the mass splitting, mixing angles, -# etc provided. -# Note that the oscillation probabilities here are computed on a grid and assigned -# to the individual events (it is also possible just to compute exactly for -# each event, but this might be slower depending on sample size) - -[osc.prob3] - -# Here our input and output will be events, but we perform the oscillation -# probability calculation on a grid for speed -calc_mode = calc_grid_coarse -apply_mode = events - -# Preliminary Reference Earth Model -param.earth_model = osc/PREM_12layer.dat - -# electron densities -param.earth.YeI = ${earth:YeI} -param.earth.YeM = ${earth:YeM} -param.earth.YeO = ${earth:YeO} - -param.lead.YeI = 0.398 -param.lead.YeM = 0.398 -param.lead.YeO = 0.398 - -# depth of detector below Earth surface and -# neutrino production height in the atmosphere -# (e.g., for vertically downgoing, -# baseline = depth + height) -param.detector_depth = ${earth:detector_depth} -param.prop_height = ${earth:prop_height} - -# solar angle -param.theta12 = ${osc:theta12} -param.theta12.fixed = True - -# reactor angle -param.nh.theta13 = ${osc:theta13_nh} -param.nh.theta13.fixed = True -param.nh.theta13.range = ${osc:theta13_nh.range} - -param.ih.theta13 = ${osc:theta13_ih} -param.ih.theta13.fixed = True -param.ih.theta13.range = ${osc:theta13_ih.range} - -# atmospheric angle -param.nh.theta23 = ${osc:theta23_nh} -param.nh.theta23.fixed = False -param.nh.theta23.range = [0, 90] * units.degree -param.nh.theta23.prior = uniform - -param.ih.theta23 = ${osc:theta23_ih} -param.ih.theta23.fixed = False -param.ih.theta23.range = [0, 90] * units.degree -param.ih.theta23.prior = uniform - -# dirac phase -param.nh.deltacp = 0.0 * units.deg -param.nh.deltacp.fixed = True -param.nh.deltacp.range = ${osc:deltacp_nh.range} -param.nh.deltacp.prior = uniform - -param.ih.deltacp = 0.0 * units.deg -param.ih.deltacp.fixed = True -param.ih.deltacp.range = ${osc:deltacp_ih.range} -param.ih.deltacp.prior = uniform - -# solar mass splitting -param.deltam21 = ${osc:deltam21} -param.deltam21.fixed = True - -# atmospheric mass splitting -param.nh.deltam31 = ${osc:deltam31_nh} -param.nh.deltam31.fixed = True -param.nh.deltam31.prior = uniform -param.nh.deltam31.range = [0.001, +0.007] * units.eV**2 - -param.ih.deltam31 = ${osc:deltam31_ih} -param.ih.deltam31.fixed = True -param.ih.deltam31.prior = uniform -param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 - - -#------------------------------------------------------------------------------ -# 'effective area' stage parameters -#------------------------------------------------------------------------------ - -# This stage is responsible for handling a host of normalisations of the -# events/histograms (the stage name is a bit misleading) -# We provide the livetime for our data (or template which matches it) -# The parameter aeff_scale is the overall normalisation for all events, -# and should be free in a shape-only analysis - -[aeff.aeff] - -calc_mode = events -apply_mode = events - -# Detector livetime this template should be weighted to represent -param.livetime = 2.5 * units.common_year - -# Overall normalisation of this pipeline -param.aeff_scale = 1.0 -param.aeff_scale.fixed = False -param.aeff_scale.prior = uniform -param.aeff_scale.range = [0.,3.] * units.dimensionless - -# CC tau neutrino norm -param.nutau_cc_norm = 1.0 -param.nutau_cc_norm.fixed = True -param.nutau_cc_norm.range = [0.2, 2.0] * units.dimensionless -param.nutau_cc_norm.prior = uniform - -# CC+NC nutau norm -param.nutau_norm = 1.0 -param.nutau_norm.fixed = True -param.nutau_norm.range = [-1.0, 8.5] * units.dimensionless -param.nutau_norm.prior = uniform - -# NC norm -param.nu_nc_norm = 1.0 +/- 0.2 -param.nu_nc_norm.fixed = True -param.nu_nc_norm.range = nominal + [-.5,+.5] - - -#------------------------------------------------------------------------------ -# 'histogramming' stage parameters -#------------------------------------------------------------------------------ - -# This just creates histograms (maps in PISA jargon) from the events - -[utils.hist] - -calc_mode = events -apply_mode = reco_binning - -# Specify if and how to assign uncertainties to the output maps, -# here sum of weights-squared -error_method = sumw2 diff --git a/pisa_examples/resources/settings/pipeline/osc_example.cfg b/pisa_examples/resources/settings/pipeline/osc_example.cfg deleted file mode 100644 index 945caed7b..000000000 --- a/pisa_examples/resources/settings/pipeline/osc_example.cfg +++ /dev/null @@ -1,153 +0,0 @@ -#include settings/binning/example.cfg as binning -#include settings/osc/nufitv20.cfg as osc -#include settings/osc/earth.cfg as earth - -# These first few lines import other config files that will be useful here... - - -#------------------------------------------------------------------------------ -# Settings directly affecting or handled by the pipeline -#------------------------------------------------------------------------------ - -[pipeline] - -# Define order of stages to be excecuted one after another, and specify the -# service to use for each of them as stage1:serviceA, stage2:serviceB, ... - -name = neutrinos - -order = data.toy_event_generator, flux.barr_simple, osc.prob3 - -# Select the params denoted by param.. -# This feature allows a whole subset of parameters to be selected, -# in this case normal hierarchy values for oscillation parameters -param_selections = nh - -# if maps should be created as the output of the stage -output_binning = calc_grid -output_key = weights - - -#------------------------------------------------------------------------------ -# 'data' stage parameters -#------------------------------------------------------------------------------ - -# This stage is used to generate toy events -[data.toy_event_generator] - -calc_mode = calc_grid -apply_mode = calc_grid - -output_names = nue_cc, numu_cc, nutau_cc, nue_nc, numu_nc, nutau_nc, nuebar_cc, numubar_cc, nutaubar_cc, nuebar_nc, numubar_nc, nutaubar_nc - -param.n_events = 1e4 -param.seed = 0 -param.random = False - -[flux.barr_simple] - -calc_mode = calc_grid -apply_mode = events - -# nu/nubar ratio -param.nu_nubar_ratio = 1.0 +/- 0.1 -param.nu_nubar_ratio.fixed = True -param.nu_nubar_ratio.range = nominal + [-3., +3.] * sigma - -# nu_e/nu_mu ratio -param.nue_numu_ratio = 1.0 +/- 0.05 -param.nue_numu_ratio.fixed = True -param.nue_numu_ratio.range = nominal + [-0.5, +0.5] - -# Barr flux up/horizontal -param.Barr_uphor_ratio = 0.0 +/- 1.0 -param.Barr_uphor_ratio.fixed = True -param.Barr_uphor_ratio.range = nominal + [-3.0, +3.0] - -# Barr flux nu/nubar -param.Barr_nu_nubar_ratio = 0.0 +/- 1.0 -param.Barr_nu_nubar_ratio.fixed = True -param.Barr_nu_nubar_ratio.range = nominal + [-3.0, +3.0] - -# Spectral index -param.delta_index = 0.0 +/- 0.1 -param.delta_index.fixed = False -param.delta_index.range = nominal + [-5, +5] * sigma - - -#------------------------------------------------------------------------------ -# 'oscillation' stage parameters -#------------------------------------------------------------------------------ - -# The oscillations stage uses prob3 to calculate oscillation probabilities -# for the events according to the values of the mass splitting, mixing angles, -# etc provided. -# Note that the oscillation probabilities here are computed on a grid and assigned -# to the individual events (it is also possible just to compute exactly for -# each event, but this might be slower depending on sample size) - -[osc.prob3] - -# Here our input and output will be events, but we perform the ocillation -# probability calculation on a grid for speed -calc_mode = calc_grid -apply_mode = calc_grid - -# Preliminary Reference Earth Model -param.earth_model = osc/PREM_12layer.dat - -# electron densities -param.YeI = ${earth:YeI} -param.YeM = ${earth:YeM} -param.YeO = ${earth:YeO} - -# depth of detector below Earth surface and -# neutrino production height in the atmosphere -# (e.g., for vertically downgoing, -# baseline = depth + height) -param.detector_depth = ${earth:detector_depth} -param.prop_height = ${earth:prop_height} - -# solar angle -param.theta12 = ${osc:theta12} -param.theta12.fixed = True - -# reactor angle -param.nh.theta13 = ${osc:theta13_nh} -param.nh.theta13.fixed = True -param.nh.theta13.range = ${osc:theta13_nh.range} -param.ih.theta13 = ${osc:theta13_ih} -param.ih.theta13.fixed = True -param.ih.theta13.range = ${osc:theta13_ih.range} - -# atmospheric angle -param.nh.theta23 = 42. * units.degree -param.nh.theta23.fixed = False -param.nh.theta23.range = [0.,90.] * units.degree -param.nh.theta23.prior = uniform -param.ih.theta23 = 42. * units.degree -param.ih.theta23.fixed = False -param.ih.theta23.range = [0.,90.] * units.degree -param.ih.theta23.prior = uniform - -# dirac phase -param.nh.deltacp = 0.0 * units.degree -param.nh.deltacp.fixed = True -param.nh.deltacp.range = ${osc:deltacp_nh.range} -param.nh.deltacp.prior = uniform -param.ih.deltacp = 0.0 * units.degree -param.ih.deltacp.fixed = True - -# solar mass splitting -param.deltam21 = ${osc:deltam21} -param.deltam21.fixed = True - -# atmospheric mass splitting -param.nh.deltam31 = ${osc:deltam31_nh} -param.nh.deltam31.fixed = True -param.nh.deltam31.prior = uniform -param.nh.deltam31.range = [0.001, +0.007] * units.eV**2 -param.ih.deltam31 = ${osc:deltam31_ih} -param.ih.deltam31.fixed = True -param.ih.deltam31.prior = uniform -param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 diff --git a/pisa_examples/test_daemonflux_stage.ipynb b/pisa_examples/test_daemonflux_stage.ipynb deleted file mode 100644 index 39f602ebb..000000000 --- a/pisa_examples/test_daemonflux_stage.ipynb +++ /dev/null @@ -1,1205 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "2de8885d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<< PISA is running in double precision (FP64) mode; numba is running on CPU (single core) >>\n" - ] - } - ], - "source": [ - "%matplotlib inline\n", - "import sys, os\n", - "from copy import deepcopy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import matplotlib\n", - "\n", - "from pisa.core.distribution_maker import DistributionMaker\n", - "from pisa.core.map import Map\n", - "\n", - "from uncertainties import unumpy" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e4b95472", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ WARNING] /tmp/ipykernel_25740/3777615979.py:1: DeprecationWarning: Importing display from IPython.core.display is deprecated since IPython 7.14, please import from IPython display\n", - " from IPython.core.display import display, HTML\n", - "\n" - ] - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.core.display import display, HTML\n", - "display(HTML(\"\"))" - ] - }, - { - "cell_type": "markdown", - "id": "9b3560b9", - "metadata": {}, - "source": [ - "# Create two pipelines - one with Honda flux, one with deamonflux" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "acc19403", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
pipeline number name detector name output_binning output_key profile
0neutrinos "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
1 muons "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
" - ], - "text/plain": [ - " pipeline number | name | detector name | output_binning | output_key | profile\n", - "-------------------+-----------+-----------------+---------------------------------------------+-----------------------+-----------\n", - " 0 | neutrinos | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |\n", - " 1 | muons | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_daemon = DistributionMaker([\"settings/pipeline/IceCube_3y_neutrinos_daemon.cfg\", \"settings/pipeline/IceCube_3y_muons.cfg\"])\n", - "model_daemon.profile = True\n", - "model_daemon" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "7a38c44b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
pipeline number name detector name output_binning output_key profile
0neutrinos "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
1 muons "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) ('weights', 'errors') True
" - ], - "text/plain": [ - " pipeline number | name | detector name | output_binning | output_key | profile\n", - "-------------------+-----------+-----------------+---------------------------------------------+-----------------------+-----------\n", - " 0 | neutrinos | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |\n", - " 1 | muons | | \"dragon_datarelease\": | ('weights', 'errors') | True\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | |" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_honda = DistributionMaker([\"settings/pipeline/IceCube_3y_neutrinos.cfg\", \"settings/pipeline/IceCube_3y_muons.cfg\"])\n", - "model_honda.profile = True\n", - "model_honda" - ] - }, - { - "cell_type": "markdown", - "id": "09041bc1", - "metadata": {}, - "source": [ - "See that we have different parameters for different fluxes..." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "040511d3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
name value nominal_value range prior units is_fixed
daemon_K_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_K_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_K_31G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antiK_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antiK_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antiK_31G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_n_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_n_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_p_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_p_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_pi_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_pi_20T 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_pi_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_pi_31G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antipi_158G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antipi_20T 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antipi_2P 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_antipi_31G 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_1 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_2 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_3 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_4 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_5 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
daemon_GSF_6 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
theta13 8.5 8.5 [7.85, 9.1] +/- 0.205 degree False
theta23 42.3 42.3 [31, 59] uniform degree False
deltam310.002457 0.002457 [0.001, 0.007] uniform electron_volt ** 2 False
aeff_scale 1 1 [0.0, 3.0] uniform dimensionless False
nutau_norm 1 1 [-1.0, 8.5] uniform dimensionless False
nu_nc_norm 1 1 [0.5, 1.5] +/- 0.2 dimensionless False
opt_eff_overall 1 1 [0.8, 1.2] +/- 0.1 dimensionless False
opt_eff_lateral 25 25 [5, 50] +/- 10.0 dimensionless False
opt_eff_headon 0 0 [-5.0, 2.0] uniform dimensionless False
ice_scattering 0 0 [-15, 15] +/- 10.0 dimensionless False
ice_absorption 0 0 [-15, 15] +/- 10.0 dimensionless False
atm_muon_scale 1 1 [0.0, 5.0] uniform dimensionless False
" - ], - "text/plain": [ - " name | value | nominal_value | range | prior | units | is_fixed\n", - "--------------------+----------+-----------------+----------------+-----------+--------------------+------------\n", - " daemon_K_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_K_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_K_31G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antiK_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antiK_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antiK_31G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_n_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_n_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_p_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_p_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_pi_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_pi_20T | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_pi_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_pi_31G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antipi_158G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antipi_20T | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antipi_2P | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_antipi_31G | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_1 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_2 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_3 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_4 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_5 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " daemon_GSF_6 | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " theta13 | 8.5 | 8.5 | [7.85, 9.1] | +/- 0.205 | degree | False\n", - " theta23 | 42.3 | 42.3 | [31, 59] | uniform | degree | False\n", - " deltam31 | 0.002457 | 0.002457 | [0.001, 0.007] | uniform | electron_volt ** 2 | False\n", - " aeff_scale | 1 | 1 | [0.0, 3.0] | uniform | dimensionless | False\n", - " nutau_norm | 1 | 1 | [-1.0, 8.5] | uniform | dimensionless | False\n", - " nu_nc_norm | 1 | 1 | [0.5, 1.5] | +/- 0.2 | dimensionless | False\n", - " opt_eff_overall | 1 | 1 | [0.8, 1.2] | +/- 0.1 | dimensionless | False\n", - " opt_eff_lateral | 25 | 25 | [5, 50] | +/- 10.0 | dimensionless | False\n", - " opt_eff_headon | 0 | 0 | [-5.0, 2.0] | uniform | dimensionless | False\n", - " ice_scattering | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " ice_absorption | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " atm_muon_scale | 1 | 1 | [0.0, 5.0] | uniform | dimensionless | False" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_daemon.params.free" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "85e3f26e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
name value nominal_value range prior units is_fixed
nue_numu_ratio 1 1 [0.5, 1.5] +/- 0.05 dimensionless False
Barr_uphor_ratio 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
Barr_nu_nubar_ratio 0 0 [-3.0, 3.0] +/- 1.0 dimensionless False
delta_index 0 0 [-0.5, 0.5] +/- 0.1 dimensionless False
theta13 8.5 8.5 [7.85, 9.1] +/- 0.205 degree False
theta23 42.3 42.3 [31, 59] uniform degree False
deltam310.002457 0.002457 [0.001, 0.007] uniform electron_volt ** 2 False
aeff_scale 1 1 [0.0, 3.0] uniform dimensionless False
nutau_norm 1 1 [-1.0, 8.5] uniform dimensionless False
nu_nc_norm 1 1 [0.5, 1.5] +/- 0.2 dimensionless False
opt_eff_overall 1 1 [0.8, 1.2] +/- 0.1 dimensionless False
opt_eff_lateral 25 25 [5, 50] +/- 10.0 dimensionless False
opt_eff_headon 0 0 [-5.0, 2.0] uniform dimensionless False
ice_scattering 0 0 [-15, 15] +/- 10.0 dimensionless False
ice_absorption 0 0 [-15, 15] +/- 10.0 dimensionless False
atm_muon_scale 1 1 [0.0, 5.0] uniform dimensionless False
" - ], - "text/plain": [ - " name | value | nominal_value | range | prior | units | is_fixed\n", - "---------------------+----------+-----------------+----------------+-----------+--------------------+------------\n", - " nue_numu_ratio | 1 | 1 | [0.5, 1.5] | +/- 0.05 | dimensionless | False\n", - " Barr_uphor_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " Barr_nu_nubar_ratio | 0 | 0 | [-3.0, 3.0] | +/- 1.0 | dimensionless | False\n", - " delta_index | 0 | 0 | [-0.5, 0.5] | +/- 0.1 | dimensionless | False\n", - " theta13 | 8.5 | 8.5 | [7.85, 9.1] | +/- 0.205 | degree | False\n", - " theta23 | 42.3 | 42.3 | [31, 59] | uniform | degree | False\n", - " deltam31 | 0.002457 | 0.002457 | [0.001, 0.007] | uniform | electron_volt ** 2 | False\n", - " aeff_scale | 1 | 1 | [0.0, 3.0] | uniform | dimensionless | False\n", - " nutau_norm | 1 | 1 | [-1.0, 8.5] | uniform | dimensionless | False\n", - " nu_nc_norm | 1 | 1 | [0.5, 1.5] | +/- 0.2 | dimensionless | False\n", - " opt_eff_overall | 1 | 1 | [0.8, 1.2] | +/- 0.1 | dimensionless | False\n", - " opt_eff_lateral | 25 | 25 | [5, 50] | +/- 10.0 | dimensionless | False\n", - " opt_eff_headon | 0 | 0 | [-5.0, 2.0] | uniform | dimensionless | False\n", - " ice_scattering | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " ice_absorption | 0 | 0 | [-15, 15] | +/- 10.0 | dimensionless | False\n", - " atm_muon_scale | 1 | 1 | [0.0, 5.0] | uniform | dimensionless | False" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_honda.params.free" - ] - }, - { - "cell_type": "markdown", - "id": "882b5bc5", - "metadata": {}, - "source": [ - "also check pipelines..." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d7ac5492", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 daemon_flux events events True True False 2 24
2 prob3 "true_allsky_fine":\n", - "200 (true_energy) x 200 (true_coszen) events True True True 9 3
3 aeff events events False False True 2 3
4 hist events "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
5hypersurfaces "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | daemon_flux | events | events | True | True | False | 2 | 24\n", - " 2 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 3 | aeff | events | events | False | False | True | 2 | 3\n", - " 4 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 5 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_daemon.pipelines[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "0d1bd29f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip "true_allsky_fine":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 0
2 barr_simple "true_allsky_fine":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 4
3 prob3 "true_allsky_fine":\n", - "200 (true_energy) x 200 (true_coszen) events True True True 9 3
4 aeff events events False False True 2 3
5 hist events "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) "dragon_datarelease":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | \"true_allsky_fine\": | events | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | events | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_honda.pipelines[0]" - ] - }, - { - "cell_type": "markdown", - "id": "5cddad4c", - "metadata": {}, - "source": [ - "# Get neutrino maps and compare" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "24244287", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ WARNING] /mnt/ceph1-npx/user/mliubarska/osc/pisa_osc/pisa/stages/flux/daemon_flux.py:173: NumbaWarning: \n", - "Compilation is falling back to object mode WITHOUT looplifting enabled because Function \"make_2d_flux_map\" failed type inference due to: non-precise type pyobject\n", - "During: typing of argument at /mnt/ceph1-npx/user/mliubarska/osc/pisa_osc/pisa/stages/flux/daemon_flux.py (188)\n", - "\n", - "File \"../pisa/stages/flux/daemon_flux.py\", line 188:\n", - "def make_2d_flux_map(flux_obj,\n", - " \n", - "\n", - " for index in range(len(icangles)):\n", - " ^\n", - "\n", - " @jit(forceobj=True)\n", - "\n" - ] - } - ], - "source": [ - "maps_daemon = model_daemon.pipelines[0].get_outputs()\n", - "maps_honda = model_honda.pipelines[0].get_outputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "b9a0a499", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['nue_cc',\n", - " 'numu_cc',\n", - " 'nutau_cc',\n", - " 'nue_nc',\n", - " 'numu_nc',\n", - " 'nutau_nc',\n", - " 'nuebar_cc',\n", - " 'numubar_cc',\n", - " 'nutaubar_cc',\n", - " 'nuebar_nc',\n", - " 'numubar_nc',\n", - " 'nutaubar_nc']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "maps_daemon.names" - ] - }, - { - "cell_type": "markdown", - "id": "1cebc63c", - "metadata": {}, - "source": [ - "first check maps by neutrino types" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "6f82f6de", - "metadata": {}, - "outputs": [], - "source": [ - "def plt_maps(maps, title=None):\n", - " fig, axes = plt.subplots(3,4, figsize=(24,10))\n", - " plt.suptitle(title)\n", - " plt.subplots_adjust(hspace=0.5)\n", - " axes = axes.flatten()\n", - "\n", - " for m, ax in zip(maps, axes):\n", - " m.plot(ax=ax)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "7cdf891a", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAB5AAAAOoCAYAAAAXvGhmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXgUVaL+8bc6CUkghJhEsrArYhBEBEVWAVFUFHFBcUHhKv501FEEAZc7wnB1GB0FVEaZcb2joIyXcWdUVOKooICAImYQkX0VQoAEsnXX74+QHmOSTnf6dFLd/f349POYqurTp8PJeavqVJ2ybNu2BQAAAAAAAAAAAACIeq7GrgAAAAAAAAAAAAAAwBkYQAYAAAAAAAAAAAAASGIAGQAAAAAAAAAAAABwDAPIAAAAAAAAAAAAAABJDCADAAAAAAAAAAAAAI5hABkAAAAAAAAAAAAAIIkBZAAAAAAAAAAAAADAMQwgAwAAAAAAAAAAAAAkMYAMAAAAAAAAAAAAADiGAWQAAAAAQEht3rxZlmXppZdearTPfuyxx2pc/9hjj8myLG3evLlhK6bQ/F42b96siy66SKmpqbIsS+PHj2/U3z8AAAAAIPzENnYFAAAAAACRLSsrS8uWLdOJJ57Y2FWJeHfffbe++uorvfDCC8rMzFRWVpZs227sagEAAAAAwggDyAAAAACAkIqPj1fv3r0buxpR4bvvvlOvXr106aWXepc1xt3VAAAAAIDwxRTWAAAAAIBqxo4dq/bt21dbPm3aNFmWVWXZ66+/rrPOOkstWrRQ06ZNdcIJJ+jGG2/0rq9pCuXKctatW6drrrlGLVq0UEZGhm688UYdPHiwSvkFBQW66aablJqaqqSkJF100UX66aefZFmWpk2bZvJre73wwgs67bTTlJCQoNTUVF122WXKy8urss3YsWOVlJSkH3/8UcOGDVNSUpLatGmjiRMnqqSkpMq2O3fu1FVXXaXmzZurRYsWGjVqlHbv3l3tc1euXKmrr75a7du3V2Jiotq3b69rrrlGW7Zs8Vnf3NxcWZalH3/8Uf/85z9lWZbPqbn9/fd97bXXZFmW5syZU2W7qVOnKiYmRosXL/ZZLwAAAABA+GEAGQAAAABQb8uWLdOoUaN0wgkn6LXXXtN7772nBx98UOXl5X69/4orrlCnTp20cOFC3XvvvZo/f77uvvtu73qPx6Phw4dr/vz5mjJlit544w2dddZZuuCCCwKqp8fjUXl5ebWXx+Optu2MGTN00003qUuXLvrHP/6hJ554Qt9++6369OmjDRs2VNm2rKxMl1xyiYYMGaK33npLN954o2bNmqVHHnnEu83Ro0d17rnn6sMPP9SMGTP0+uuvKzMzU6NGjar22Zs3b9bJJ5+s2bNn64MPPtAjjzyiXbt26cwzz9S+fftq/X49evTQsmXLlJmZqX79+mnZsmVatmyZsrKyAvo9/drVV1+tW2+9VRMnTtTKlSslSZ988okeeugh3X///TrvvPOCKh8AAAAA4DxMYQ0AAAAAqLelS5fKtm3NnTtXLVq08C4fO3asX++/6aabNGnSJEnSueeeqx9//FEvvPCCnn/+eVmWpffff1+ff/65nnnmGd16662SpPPOO09NmjTRfffd53c9p0yZoilTptS5XUFBgf7nf/5Hw4YN0/z5873LBw0apJNOOknTpk3TvHnzvMtLS0v1+9//XldeeaUkaciQIVq5cqXmz5+vBx98UJL0v//7v8rLy9Nbb72lSy65RJI0dOhQHT16VM8++2yVzx85cqRGjhzp/dntduviiy9WRkaG5s+frzvvvLPGeicnJ6t3796Kj49XSkqK0SnDZ8+era+++kpXXXWV3nvvPV177bUaMGBAyO7+BgAAAAA0Lu5ABgAAAADU25lnnilJuuqqq/T3v/9dO3bsCOj9lQOqlbp166bi4mLt3btXkvTpp596y/+la665JqDPueuuu7RixYpqr7vuuqvKdsuWLdPRo0erDYC3adNG55xzjj7++OMqyy3L0vDhw6t9h19OOb1kyRI1b9682ne99tprq9WzsLBQU6ZMUceOHRUbG6vY2FglJSWpqKio2hTaDSU+Pl5///vftX//fvXo0UO2bevVV19VTExMo9QHAAAAABBaDCADAAAAAOrt7LPP1ptvvqny8nLdcMMNat26tbp27apXX33Vr/enpaVV+Tk+Pl5SxbTPkrR//37FxsYqNTW1ynYZGRkB1bN169Y644wzqr1at25dZbv9+/dLUo1TP2dnZ3vXV2ratKkSEhKqfYfi4uIqZdZU38zMzGrLrr32Ws2ZM0fjxo3TBx98oOXLl2vFihU6/vjjvb+TxtCxY0cNGDBAxcXFuu6664KeGhsAAAAA4FwMIAMAAAAAqklISFBJSUm15TU9h3fEiBH6+OOPdfDgQeXm5qp169a69tprtWzZsqDrkZaWpvLycuXn51dZvnv37qDLru3zJGnXrl3V1u3cuVPp6en1KnPPnj3Vlv/6Oxw8eFDvvvuuJk+erHvvvVdDhgzRmWeeqVNPPbXa9w9WIP++kvTcc8/pvffeU69evTRnzhx99dVXRusDAAAAAHAOBpABAAAAANW0b99ee/furTLwWVpaqg8++KDW98THx2vgwIF65JFHJEmrV68Ouh4DBw6UJC1YsKDK8tdeey3osmvSp08fJSYm6pVXXqmyfPv27frkk080ZMiQgMscPHiwDh8+rLfffrvK8l8+Y1mqmA7btm3vXdiVnnvuObnd7oA/15dA/n3Xrl2rO++8UzfccIM+++wzdevWTaNGjdKBAweM1gkAAAAA4AyxjV0BAAAAAIDzjBo1Sg8++KCuvvpqTZo0ScXFxXryySerDWQ++OCD2r59u4YMGaLWrVuroKBATzzxhOLi4ryDv8G44IIL1K9fP02cOFGHDh1Sz549tWzZMv3tb3+TJLlcZq+LTklJ0e9+9zvdf//9uuGGG3TNNddo//79+v3vf6+EhARNnTo14DJvuOEGzZo1SzfccIMefvhhnXTSSVq0aFG1wdrk5GSdffbZ+tOf/qT09HS1b99en376qZ5//nmlpKQY+oYV/P33LSoq0lVXXaUOHTro6aefVpMmTfT3v/9dPXr00H/913/pzTffNFovAAAAAEDj4w5kAAAAAEA1HTp00FtvvaWCggKNHDlSkyZN0pVXXqkbbrihynZnnXWWdu/erSlTpmjo0KH6f//v/ykxMVGffPKJunTpEnQ9XC6X3nnnHV199dX64x//qBEjRuizzz7z3iFsemBVku677z4999xz+uabb3TppZfqjjvuUJcuXbR06VKddNJJAZfXtGlTffLJJzr33HN17733auTIkdq+fXuNd1HPnz9fgwcP1uTJk3X55Zdr5cqVWrx4sVq0aGHiq3n5++976623auvWrXr99dfVrFkzSdIJJ5yg5557Tm+99ZZmz55ttF4AAAAAgMZn2bZtN3YlAAAAAAAIxPz583Xdddfpiy++UN++fRu7OgAAAAAARAwGkAEAAAAAjvbqq69qx44dOvXUU+VyufTll1/qT3/6k04//XR9+umnjV09AAAAAAAiCs9ABgAAAAA4WvPmzfXaa6/poYceUlFRkbKysjR27Fg99NBDjV01AAAAAAAiDncgAwAAAAAAAAAAAAAkSa7GrgAAAAAAAAAAAAAAwBkYQAYAAAAAAAAAAAAASGIAGQAAAAAAAAAAAABwDAPIAAAAAAAAAAAAAABJDCADAAAAAAAAAAAAAI5hABkAAAAAAAAAAAAAIIkBZAAAAAAAAAAAAADAMQwgAwAAAAAAAAAAAAAkMYAMAAAAAAAAAAAAADiGAWQAAAAAAAAAAAAAgCQGkAEAAAAAAAAAAAAAxzCADAAAAAAAAAAAAACQxAAyAAAAAAAAAAAAAOAYBpABAAAAAAAAAAAAAJIYQAYAAAAAAAAAAAAAHMMAMgAAAAAAAAAAAABAEgPIAAAAAAAAAAAAAIBjGEAGAAAAAAAAAAAAAEhiABkAAAAAAAAAAAAAcAwDyAAAAAAAAAAAAAAASQwgAwAAAAAAAAAAAACOYQAZAAAAAAAAAAAAACCJAWQAAAAAAAAAAAAAwDEMIAMAAAAAAAAAAAAAJDGADAAAAAAAAAAAAAA4hgFkAAAAAAAAAAAAAIAkBpABAAAAAAAAAAAAAMcwgAwAAAAAAAAAAAAAkMQAMgAAAAAAAAAAAADgGAaQAQAAAAAAAAAAAACSGEAGAAAAAAAAAAAAABzDADIAAAAAAAAAAAAAQBIDyAAAAAAAAAAAAACAYxhABgAAAAAAAAAAAABIYgAZAAAAAAAAAAAAAHAMA8gAAAAAAAAAAAAAAEkMIAMAAAAAAAAAAAAAjmEAGQAAAAAAAAAAAAAgiQFkAAAAAAAAAAAAAMAxDCADAAAAAAAAAAAAACQxgAwAAAAAAAAAAAAAOIYBZAAAAAAAAAAAAACAJAaQAQAAAAAAAAAAAADHMIAMAAAAAAAAAAAAAJDEADIAAAAAAAAAAAAA4BgGkAEAAAAAAAAAAAAAkhhABgAAAAAAAAAAAAAcwwAyAAAAAAAAAAAAAEASA8gAAAAAAAAAAAAAgGMYQAYAAAAAAAAAAAAASGIAGQAAAAAAAAAAAABwDAPIAAAAAAAAAAAAAABJDCADAAAAAAAAAAAAAI5hABkAAAAAAAAAAAAAIIkBZAAAAAAAAAAAAADAMQwgAwAAAAAAAAAAAAAkMYAMAAAAAAAAAAAAADiGAWQAAAAAAAAAAAAAgCQGkBHmpkyZogsvvNDnNrfccouuvfbaBqoRUIG2CSAa0ffBiWiXAKIRfR+cirYJIBrR98GpaJvwhQHkCLZ792799re/1QknnKD4+Hi1adNGw4cP18cff1yv7fwxduxYWZYly7IUFxenE044Qffcc4+KioqqbHPppZfW+p6MjAydd955euGFF+TxeHx+3po1a3Taaaf53GbGjBl69tlnA/4ulZ5++ml16NBBCQkJ6tmzpz777LN6l4UKtM0KwbTNf/3rXxo+fLiys7NlWZbefPPNepUDoOHQ91UINpclstkk2mWFYNsluQyEF3/6NJP9nlR33/frfq+m9zit7yOPzaNtVuBYGYgOlX3JH//4xyrL33zzTVmWVWVZY/d9wfR7ErkcbmibVZHL0YsB5Ai1efNm9ezZU5988okeffRRrV27Vu+//74GDx6s22+/PeDtAnHBBRdo165d+umnn/TQQw/p6aef1j333OPXezZv3qx//vOfGjx4sO666y5dfPHFKi8vr/V933zzjbp37+6z7NTUVDVr1qw+X0ULFizQ+PHj9cADD2j16tUaMGCALrzwQm3durVe5YG2+UvBtM2ioiKddtppmjNnTr3eD6Bh0ff9RzB9n0Q2m0S7/I9g2yW5DIQPf/q0UPR7UmT1feSxebTN/+BYGYgeCQkJeuSRR3TgwIFat3FK31fffk8il8MRbfM/yOUoZsORLrjgAvuGG27w/vzxxx/bqampdllZmV/vv/DCC+1WrVrZhYWF1dYdOHAg4O38NWbMGHvEiBFVlo0bN87OzMysdZua3mPbFd9Zkv3ss8/W+Fm7du2yJdnz5s2zBwwYYCcmJto9e/a016xZ491m06ZNtiR78+bNtm3b9oYNG2xJ9rvvvmufc845dmJiot2pUyf7yy+/rPEzevXqZd96661VluXk5Nj33nuvr19DRKNtOqNt/pIk+4033qhzOwD1R9/nnL6PbP4P2qVz2uUvkctAaDVE32e637Ptuvu+mtY7ue8jj6ujbTqjbf4SmQyEVrD93pgxY+yLL77YzsnJsSdNmuRd/sYbb9i/HLZwQt9X337PtgPv+zhODh5t0zlt85fI5fDDHcgO1apVK+3YscP78+DBg1VSUqIvvviizvfm5+fr/fff1+23317jlSEpKSkBbResxMRElZWVBfy+c845R6eddpr+8Y9/1Lh+9erVkqTZs2frD3/4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gQMHKjc3t8b3TJo0STt27NBbb71V57SZlo/nOTp1yk0AAELFdCb7680336zy87333qtJkybpscce06233lptvQkMIAMAHCMu1lJcTO0Hp3FupssEAKAhkMkAADiHr1yuzOTly5crKyvLu7y2O512796tmTNnqmfPnjrttNO0ZcsWSVJ5ebkkacuWLUpMTFTbtm0lSXv27KlWRn5+viR5twEAIFqYzORgzZgxQ4899phWrVoVkvIZQAYAOIYrxpLLx8lqlzhZDQBAQyCTAQBwDl+5XJnJWVlZat26dZ1l/fjjj/J4PPr666/Vvn37auvbt2+vzMxMbdq0SZK0du3aatts2rRJcXFxSklJ8f9LAAAQAUxmsim+ZgsJBgPIAADHqHO6TLvh6gIAQDQjkwEAcA6f02UGmMldu3bVrFmzqi1/6KGHtH//fs2aNUvt2rVTQkKC2rRpo7y8PO3cuVPZ2dmSpGXLlmn//v0666yzAv0aAACEPZOZHKxJkyZJknr27BmS8hlABgA4RkycpVgfdzvFuAK7mmrnzp269NJLtXHjRh04cEC2bdf4zImOHTtq48aN1d7fpEkTlZSUVFs+cuRIvfPOOyotLVVsbKz69++v9957T02bNg2ofgAAOJXpTAYAAPXnK5cDzeSUlBSNHz++2vI5c+Zo//79VdbNnTtXF110kU455RRNmDBBRUVFeuKJJ+RyufTiiy8G9LkAAEQCk5lcafr06Tp48KAOHDggSdq4caMmTpwoSbrvvvu0fv16XXjhhRo6dKi6desml8ul9957T19++aXi4+M1d+7c+n2ZOjCADABwDJfLkstH0LrswEL4p59+0ooVK9SiRQt16tRJ69ev97n9s88+W+Xnmp5Pcd555+mjjz5Snz59dNVVV2nx4sVatGiRevbsqby8vIDqBwCAU5nOZAAAUH++cjmUmTxs2DC9/PLLuvPOOzV16lRJFdNyvvLKK+rcuXPIPhcAAKcKRSZPnz5dbrfb+/P27ds1c+ZMSdJll12mVq1aKSkpSW+99ZYWLlwoSYqLi1OvXr30+uuvq2XLlvX63LowgAwAcAxXTMWr1vUBlte3b1+53W65XC6tX79eOTk5PrcfN26cz/UbNmzQRx99pJycHC1dulSSNH78eA0dOlSLFy/W22+/rUsuuSTAWgIA4DymMxkAANSfr1w2lck//vhj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ASBCGczkXbt2KT09XTfffLMef/xx/fd//7dSU1M1d+5cnXvuud7tFi1apNGjR8vtdmvatGmaNGmS8vPzNWTIEOXl5Zn+hhGHTAaACBVFx8lhO4X1hAkTdP311+uMM85Qnz599Ne//lVbt27VrbfeKqni+Q87duzQ3/72N0nS7Nmz1b59e3Xp0kWlpaV65ZVXtHDhQi1caO65fQCA4FguS5aPab98rUPjIpcBILKYzuTHH39cf/nLX7RlyxaVlpbK5XKpZcuW+tOf/qTRo0dX2XbevHn67W9/qwMHKqZMzMrK0vz58zVo0KBq5Y4cOVLvvPOOSktLFRsbq/79++u9995T06aG50gMI2QyAEQeX7kcaCaPHz9e48ePr7Js+vTpSkpKqnJ38S233CLLsrRu3Tq1bt1akjRixAj1799fY8eO1VdffRXQ50YjMhkAIo/JTHa6sB1AHjVqlPbv36/p06dr165d6tq1qxYtWqR27dpJqriabuvWrd7tS0tLdc8992jHjh1KTExUly5d9N5772nYsGGN9RUAAL/WxCU18fEcDre551/DLHIZACKM4UyeNWuWioqKdPnll6t3797aunWr/vrXv+r666/Xnj17NHHiREn/udspOTlZ06ZNU1FRkZ588kkNGTJE3333nTp37uwt87zzztNHH32kPn366KqrrtLixYu1aNEi9ezZM6rvjCKTASAC+cplQ8fJzZo1U0lJiSSpuLhY27dvV+fOnb2Dx5LUr18/paWlafXq1UY+M9KRyQAQgRogk50ibAeQJem2227TbbfdVuO6l156qcrPkydP1uTJkxugVgCA+rKsOu52siLrKq5IQy4DQOQwnckffPCBunTpUmXZpEmT1KpVKz388MPeAWR/73basGGDPvroI+Xk5Gjp0qWSKu6oGjp0qBYvXqy3335bl1xySUB1jCRkMgBEFl+5XJnJu3btqrI8OTlZycnJtZZZXl6u8vJybdq0Sb///e+1d+9eXXvttZKkJUuWSJK6detW7X0dOnTQypUrVVBQoJSUlPp8nahCJgNAZPEnkyNFWD4DGQAQoXjeIgAAzmA4k389eCxJmZmZSk5OVmFhoaT/3O2Uk5NT591Os2bNkiTvwHOlRx99VJI0Z86cgOoHAICj+ZHJvXr1Ups2bbyvui6k6tatmxITE3XKKadowYIFuvrqqzVv3jxJ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kwEARvjKZTLZL2QyAMCIKMpkIwPIb731loliAADRjukyjSCXAQBBI5ONIJMBAEZE0XSZoUImAwCMiKJMNvJt2rVrZ6IYAEC0q2uqjwibBiRUyGUAQNDIZCPIZACAEb5ymUz2C5kMADAiijLZ729z+PBh3XPPPcrJyVF6erpOPPFEDRs2TA8//LD+/e9/h7KOtXr66afVoUMHJSQkqGfPnvrss898bv/pp5+qZ8+eSkhI0AknnKC5c+c2UE0BAH6pnALE1wuSyGUAQIiRyX4jkwEAIUcm+4VMBgCEXBRlst/f5oYbbtD//d//acyYMfrjH/+ou+66S5988onmz5+vLl26aMSIEdqxY0co61rFggULNH78eD3wwANavXq1BgwYoAsvvFBbt26tcftNmzZp2LBhGjBggFavXq37779fd955pxYuXNhgdQYA1MEV859pQGp8xTR2DR2DXAYAhBSZ7DcyGQAQcj5zmUyuRCYDAEIuijLZ7ymsP/zwQ33xxRfq3r27d9kDDzygd955R7GxsXr44YfVq1cvff755+rQoUMo6lrFzJkzddNNN2ncuHGSpNmzZ+uDDz7QM888oxkzZlTbfu7cuWrbtq1mz54tSercubNWrlypxx57TFdccUXI6wsA8APTZfqNXAYAhBSZ7DcyGQAQclE0XWYwyGQAQMhFUSb7/W0yMjJUVFRU47q2bdvqL3/5i26//XbdddddxipXm9LSUn399dcaOnRoleVDhw7V0qVLa3zPsmXLqm1//vnna+XKlSorK6vxPSUlJTp06FCVFwAghCoD2NcLkshlchkAQoxM9huZTCYDQMgZzOTHH39cnTp1Unx8vCzLUkxMjLKysvTKK69U23bevHlKTU2VZVmyLEvZ2dnKzc019KXMI5PJZAAIuSg6Tvb729x111268cYb9c0339S6zXXXXadPPvnESMV82bdvn9xutzIyMqosz8jI0O7du2t8z+7du2vcvry8XPv27avxPTNmzFCLFi28rzZt2pj5AgCAGtl+/IcK5DK5DAChRCb7j0wmkwEg1Exm8qxZs/Tzzz/r8ssv1+zZszV+/HgVFhbq+uuv1+OPP+7dbtGiRRo9erTcbremTZumSZMmKT8/X0OGDFFeXp7pr2gEmUwmA0CoRdNxckADyFdccYV69uypCy64QHPnzpXH45FlWd5tXn31VaWnp4ekojX55WdLkm3b1ZbVtX1Nyyvdd999OnjwoPe1bdu2IGtc1aFeZxgtr+VtpxgrKyWz1FhZkrTj302NlVX4l5qv0quv2LXLjJbXLzOj7o0cLiHRbayswkNxxsqSpMNFfs+875c4gxcFtWl/2FxhkpJTSoyVFZNqrKiQsuWp84UK5LLZXC46/zxjZUlSr4ezjJXV+VRzGSpJyz8321flPbjZWFnJS78yVpYk3dm19vYXLrYWmv0O83+MN1bWz8eZbZvx4843VlZShybGypKkwk1m941Lnn7DaHmhQCb7j0w2m8nr15ndcf1mu7l+T5J2HDFXVprZqum0luaO47qcVvNARX3t7ZxstLxIEH+03FhZtsvs/oLlMXvy80hzc7l8NMlsxrtjw+NOIZOZ/MEHH+jAgQN69dVXddddd+nxxx/Xhg0b5HK59PDDD3u3u+WWW2RZltatW6epU6fq0Ucf1ccffyyPx6OxY8ca/oZmkMnmz1/vTGtmrKzYC3sZK0uS4jq0MFaW+6C5c3CSVPLIU0bLi/X/SaR1SmmSaaysxhIT4+xBuqJCc/9eBfkJxsqSpHYnmJulILVVsbGyJKksPjyeHxxNx8kBteQ//OEPuuyyy/TYY49p4sSJOnr0qLp27aqWLVvq0KFDKi4u1ksvvRSiqv5Henq6YmJiql2ttXfv3mpXaVXKzMyscfvY2FilpaXV+J74+HjFx1c/omuxaZOSk4L/w93/6GfKD7qU/3jnf80dfByXFivJXAdw5uAYHdpnZiAx69aOsvcfMFKWJLnOuUwmhziX7dkiU31deYBh2K99iRKTgv/wn4vNHXzGucwGeozhsYD9Br/rrkMxysgyd0Zpy0/JahJv5iTQofwmksETVG47NIFe15VakXYVV7DI5QrNS1xqXhLciZ+Sv8xTzROC1c+Pb3nUvIW5v5Ne/ZsbK6t9zyJJNU/rVh9NJ40wVtYPTROkI+bq9vT35gY4SwI8n9Cpha3EpOD7rGSz12FpSOtSSWayL73IkuKTjJQlSYcemGesrP3bEiSZO8FcVuLSfoPn4k6a3Fr2qq+NlGUXmR3c9pZLJgeETK4wsP8exTcLru+9/qSjQb3/17qmtDdantwG/+ZizA6ELft5m8483swezes/NVHf3nuNlCVJS79saXQQubw4sP2sA+2bKjbB3CCICS6Dx8pJyebyXaqsm7n6FeQn6EiWmQPSZjuKdbSZuR2k5PyjKjd0ZXlZjNkL3n/JVy4HmsldunSptiwzM1PJyckqLCyUJBUXF2v79u3q3LmzWrdu7d2uX79+SktL0+rVqwP6zIZEJlfIdmUo2RX88VDp8+aOlefdud9QSRWGjEiUZOa4+7isErkPmTu3nnTXINkbvjRW3qEOJxora+9RsxeVF5YEtm/UoW2R4psFlzEphi/CO2z4kOr4RHMZmmD4FOyS75spMdFcW2/VsdBYWTvXN1O5wQu73OWhuUjMZCY7XcB7NmeeeaYWLFig0tJSrVq1Sj/88IMOHTqk9PR0nXPOOWrZsmUo6llFkyZN1LNnTy1evFiXXXaZd/nixYs1YkTNJzH79Omjd955p8qyDz/8UGeccYbi4gyfmQMA1IvHdstj1z5o7mtdtCKXAQChQCYHjkwGAISKr1w2kclbt25VQUGBsrIqZlJasmSJJKlbt27Vtu3QoYNWrlypgoICpaSkBP3ZoUAmAwBCJdSZ7CT1vjSuSZMm6t27t3r37m2yPn6bMGGCrr/+ep1xxhnq06eP/vrXv2rr1q269dZbJVVM37Fjxw797W9/kyTdeuutmjNnjiZMmKCbb75Zy5Yt0/PPP69XX321UeoPAKjOtm3Zdu1TfVRO3YTqyGUAgElkcv2RyQAA03zlcmUm79q1q8ry5ORkJSf7d+f/wIEDJUmPPvqopIoBZUk1DrSmplY8amDz5s3q3r27X+U3FjIZAGCaP5kcKUI3t0qIjRo1Svv379f06dO1a9cude3aVYsWLVK7du0kVew0Ve7sSBVXxy1atEh33323/vznPys7O1tPPvmkrrjiisb6CgCAX2G6zPBFLgNAZCGTwxeZDACRx5/pMnv1qvp82YEDByo3N7fOsgcMGKDNmzdr5MiRGj16dJV1vp7V63KFx/OjGxOZDACRhyms63D06FHZtq2mTSueo7Blyxa98cYb6ty5s84//3yjFfTltttu02233VbjupqeZTFw4ECtWrUqxLUCANSXxy6Xx679ORy+1kUzchkAYBqZXD9kMgAgFHzlcuXy5cuXe6egluTX3ceDBw/W559/rvPOO0+vv/66d3nbtm0lSXv27Kn2nvz8/CrbOBWZDAAIBX8yOVLU61KxESNGeKfWKCgo0FlnnaXHH39cl156qZ555hmjFQQARA/bj/9QHbkMADCNTK4fMhkAEAr+ZHJWVpZat27tfdU1gDx48GDl5uZq0KBB+vDDD6utk6S1a9dWe9+mTZsUFxfn2OcfVyKTAQChEE3HyfUaQF61apUGDBggSfq///s/ZWRkaMuWLfrb3/6mJ5980mgFAQDRw7Y9db5QHbkMADCNTK4fMhkAEAqmM3nIkCHKzc1V//79tWTJkmrrExIS1KZNG+Xl5Wnnzp3e5cuWLdP+/fvVo0ePoL5PQyCTAQChEE3HyfWawvrIkSNq3ry5JOnDDz/U5ZdfLpfLpd69e2vLli1GKwgAiB4eueWR2+d6VEcuAwBMI5Prh0wGAISCr1wONJOHDx+uTz75ROnp6RozZoyee+65KuvHjRsnSZo7d64uuuginXLKKZowYYKKior0xBNPyOVy6cUXX6zfF2lAZDIAIBRMZrLT1esO5I4dO+rNN9/Utm3b9MEHH2jo0KGSpL179/r1fA0AAGpi23adL1RHLgMATCOT64dMBgCEgslM/uyzzyRJ+/bt080331ztVWnYsGF6+eWX5XK5NHXqVD366KNKTU3V4sWL1blzZ6PfLxTIZABAKETTcXK9BpAffPBB3XPPPWrfvr3OOuss9enTR1LF1Vynn3660QoCAKKHLU+dL1RHLgMATCOT64dMBgCEgslMLigo8PvE9+jRo5Wfn+9dt3PnTp1zzjkmv1rIkMkAgFCIpuPkek1hPXLkSPXv31+7du3Saaed5l0+ZMgQXXbZZcYqBwCILh7bLY/tY7pMH+uiGbkMADCNTK4fMhkAEAq+cplMrhmZDAAIhWjK5HoNIEtSZmamMjMzqyzr1atX0BUCAEQvW5Kt2qf6iKxJQMwilwEAJpHJ9UcmAwBM85XLZHLtyGQAgGnRlMn1HkAuKCjQ888/r7y8PFmWpc6dO+umm25SixYtTNYPABBNbI9s28dUH77WRTlyGQBgFJlcb2QyAMA4X7lMJteKTAYAGBdFmVyvZyCvXLlSJ554ombNmqX8/Hzt27dPs2bN0oknnqhVq1aZriMAIEp45K7zherIZQCAaWRy/ZDJAIBQIJMDRyYDAEIhmjK5Xncg33333brkkkv07LPPKja2oojy8nKNGzdO48eP17/+9S+jlQQARAfbtmXbPqbL9LEumpHLAADTyOT6IZMBAKHgK5fJ5JqRyQCAUIimTK7XAPLKlSurhK8kxcbGavLkyTrjjDOMVQ4AEF1seWSr9qk+fK2LZuQyAMA0Mrl+yGQAQCj4ymUyuWZkMgAgFKIpk+s1hXVycrK2bt1abfm2bdvUvHnzoCsFAIhOHttd5wvVkcsAANPI5PohkwEAoUAmB45MBgCEQjRlcr0GkEeNGqWbbrpJCxYs0LZt27R9+3a99tprGjdunK655hrTdQQARAmPXfcL1ZHLAADTyOT6IZMBAKFAJgeOTAYAhEI0ZXK9prB+7LHHZFmWbrjhBpWXl0uS4uLi9Jvf/EZ//OMfjVYQABA93LYlt235XI/qyGUAgGlkcv2QyQCAUPCVy2RyzchkAEAoRFMm12sAuUmTJnriiSc0Y8YMbdy4UbZtq2PHjmratKnp+gEAoki5x1K5p/ag9bUumpHLAADTyOT6IZMBAKHgK5fJ5JqRyQCAUIimTK7XAPKMGTOUkZGhG2+8Uaeeeqp3+QsvvKCff/5ZU6ZMMVZBAED08NiS28dUH5E2DYgp5DIAwDQyuX7IZABAKPjKZTK5ZmQyACAUoimT6/UM5L/85S/KycmptrxLly6aO3du0JUCAEQnj23V+UJ15DIAwDQyuX7IZABAKJDJgSOTAQChEE2ZXK87kHfv3q2srKxqy48//njt2rUr6EoBAKJTmcdSmY+pPnyti2bkMgDANDK5fshkAEAo+MplMrlmZDIAIBSiKZPrdQdymzZt9MUXX1Rb/sUXXyg7OzvoSkWLtMkDjJY3fEy9rgeo0YH95cbKkqQVS9zGyto190djZUmS55M3jJbXJ6Od0fIaw/EJ5uZaMN1p+ppKsT7SDH7XrGRz7VyS2p1wyFhZyamlxsoKJY8fL1RHLgcv/pbrjJbXcUS9drEaxOavmxkt78if3jJWVqcjxcbKkqTbTjlitLzGcKjMbHkfb29irKx9zcyGcvLD5v4O09qYbUtx8WYTaMOj242WFwpkcv2QycF7eUOi0fK+K9hstDzFmOtH5Ta7j97n+DbGyrryBLN169t7r9HyIoHH4LFy4SGD7VJm6yZJKanmcrmoVYKxsiTpUKrZPidUyOTAkclmNLnJ3D76dU+mGStLkj5+66ixsg7sijdWliQVPpFrtLzkTRuNldUysbmxshpLQYnZ8pqbjVH9fNRcjhabPd2swacUmS3QoOyTnVu3X4qmTK7XiOO4ceM0fvx4lZWV6ZxzzpEkffzxx5o8ebImTpxotIJOZG/cKrtp8L3K7vk7JcUEX6Fj1i6zld3GTG+XmW221zxlrLkd8rjrRxkrS5LySvZLB8yF8Oubmkoy8/srLgxsIL9jslvNmgc/+P/vglilxZs5KWx6wHf3EbMHsvsN7nDs2W32wHPb5mRjZSXkl6qpzJ0EKi8xPKJxjEe+p/rwKLKu4jIl2nNZtqfiFQT3O+8oNivJUIWko0t3ql03M2XFZpkd8I0f2sVoeQXduhjrXRZslFRgqDBJH3xn7ndXFuBYdBNXxStYxW6pwOA5/JNalOvb/WYucDg11a2fm5oL+pZlzdTi0XFGyrK35Mlcikr2/gKDpUmunv3MlXXoiKTnjJVXiUyun2jP5Du6HFXzIP/4Wu4rlAyeOyp99VOZPMe48zNz+8EtWprdpz5u6vnqbais/S3TdP/p5uo37es4ndHL3CByadERfR3A9med+bPimwXXsIrMXmevzKbmykqOc/YD977fF6NWbQqNlLVjW5KUaqQoSdLBzU10xNDIQXmxuRs7fs1XLpPJNYv2TLa3fy87KfgLLn5+6DMDtalQsLuJ+g0xd4zWcZK5C6dUaPbiY+vUTkbL298mW/KY2aN5al2cJHP/DiWFgfVB3dNsNU0KLre+zbdUZHA3qlmc2UHkb35K1E+Gyupx4lGVGRyV3HtUatvaTHvfvNXs+ardGwzuHIVQNGVyvfZsJk+erPz8fN12220qLa04o5WQkKApU6bovvvuM1pBAED0YLrM+iGXAQCmkcn1QyYDAEIhmqbLNIVMBgCEQjRlcr0GkC3L0iOPPKLf/e53ysvLU2Jiok466STFx5ud6gEAEF1sW/L4uAjRdvaF9Y2GXAYAmEYm1w+ZDAAIBV+5TCbXjEwGAIRCNGVyUPPXJSUl6cwzz1TXrl0JXwBA0Dy2VecLtSOXAQCmhCKTd+7cqV69eiktLU0ul0uWZWnQoEE1bjtv3jylpqbKsixZlqXs7Gzl5ubWuO3IkSMVHx8vy7IUFxenwYMH68iRxn0GOpkMADCJ4+T6I5MBACZFUyabeQAaAAAGVE4B4usFAABCLxSZ/NNPP2nFihVyu93q1Kn258ItWrRIo0ePltvt1rRp0zRp0iTl5+dryJAhysvLq7Lteeedp4ULF6pnz56aNWuWhg4dqtzcXPXs2TPg+gEA4FQcJwMA4AwmM3n27Nnei6Z//XruuedC9A38V68prAEACAVPHdNl+loHAADMCUUm9+3bV263Wy6XS+vXr1dOTk6N291yyy2yLEvr1q1T69atJUkjRoxQ//79NXbsWH311VeSpA0bNuijjz5STk6Oli5dKkkaP368hg4dqsWLF+vtt9/WJZdcEnhFAQBwGF+5zHEyAAANJxSZPHToUF155ZVVll188cX1K8wgBpABAI7htitevtYDAIDQC0Umu1x1T4BVXFys7du3q3Pnzt7BY0nq16+f0tLStHr1au+yWbNmSZImTpxYpYxHH31Up59+uubMmcMAMgAgIvjKZY6TAQBoOKHI5K5du2rcuHH1r1SIMIAMAHCMco+lch9TffhaBwAAzPE3k3ft2lVleXJyspKTk+v9uUuWLJEkdevWrdq6Dh06aOXKlSooKFBKSop3MPnXg8Tdu3eXZVn64Ycf6l0PAACcxFcuc5wMAEDDiaZM5hnIAADH8NiW3D5eHjuyQhgAAKfyN5N79eqlNm3aeF/B3vG7detWSVLLli2rrUtNTZUkbd68WZJUUFBQ67axsbEqLCwMqi4AADiFr1zmOBkAgIYTikyeNWuW99nH6enpevrppw3Xun4YQAYAOEblMyR8vQIxe/Zsb/j++vXcc89V2XbevHlKTU31rs/OzlZubq65LwcAQBjxN5OXL1+ubdu2eV9vv/22kc+3rNoPvP2ZChsAgEhi8jgZAADUnz+ZvGvXLm3fvt37OnToUI1lZWRkqHv37poyZYqeeuop/dd//ZcOHz6s22+/XQ8//HADfquaMYU1AMAxyjyWynxM9eFrnS9Dhw7VlVdeWWXZxRdf7P3/RYsWafTo0UpOTta0adNUVFSkJ598UkOGDNF3332nzp071+tzAQAIV/5mclZWVpVnFQerbdu2kqQ9e/ZUW5efn19lm5SUFEnSvn37lJ6eXmXb8vJyJSUlGasXAACNyVcu1/c4GQAABM6fTO7Vq1eV5QMHDqzxRqVrrrlG11xzTZVlU6dO1YknnqiHHnpIDzzwgJlK1xMDyAAAx6i4Uqv2g9/6XlndtWtXjRs3rtb1t9xyiyzL0rp167wnwUeMGKH+/ftr7Nix+uqrr+r3wQAAhKlQZXJdBg8eLElau3ZttXWbNm1SXFycd+C4R48e+vLLL/XWW2/ppptu8m737bffyrZtderUKTSVBACggfnKZe5ABgCg4fiTycuXL1dWVpZ3eXJyst/lt2vXTieffLK+//575efnex/l1BiY+wsA4Bimp7D2R3FxsbZv366cnJwqd1D169dPaWlpWr16tfkPBQDA4RojkyUpISFBbdq0UV5ennbu3OldvmzZMu3fv189evTwLpswYYIkaebMmVXKmDx5siTpjjvuCE0lAQBoYExhDQCAM/iTyZUzdVW+AhlAliTbriiosR/fxB3IAADHKLWlWI/v9VLFcyR+KTk52WcQz5o1y3tyOS0tTdOnT9dtt90mSVqyZIkkqVu3btXe16FDB61cuVIFBQXeu50AAIgG/mZyoKZPn66DBw/qwIEDkqSNGzdq4sSJkqT77rtP6enpmjt3ri666CKdcsopmjBhgoqKivTEE0/I5XLpxRdf9JZ14okn6txzz9VHH32kfv366aqrrtLixYv1wQcfKCcnR5dcckn9KgkAgMP4yuX6ZjIAAAhcqDN506ZNWr9+vRITExv9fDQDyAAAx7DruHr62MVXfj9HIiMjQ927d9cFF1ygVq1aadWqVZo3b55uv/12HThwQA888IC2bt0qSWrZsmW191dOEbJ582Z17969Xt8JAIBw5G8mB2r69Olyu93en7dv3+69yOuyyy5T//79NWzYML388su68847NXXqVEkVV3C/8sor6ty5c5XyFi9erCuuuELvvPOOli5dqpiYGA0cOFCLFi2qXwUBAHAgX7lc30wGAACBM5nJ7du3V2Zmpvr166c2bdpo1apVWrBggTwej6ZNmxZ0XYPFADIAwDHcdsXL13rJ/+dIXHPNNbrmmmuqLJs6dapOPPFEPfTQQ3rggQe8yy2r9uc8NvZ0IQAANDR/MzlQ5eXlfm03evRojR492q9tFy5cWL/KAAAQJnzlcn0zGQAABM5kJufk5Ohf//qXvvrqK0kV56czMzM1Y8YMjRkzJsiaBo8BZACAY5R6pBhf02UeW1f5HIn6aNeunU4++WR9//33ys/PV9u2bSVJe/bsqbZtfn6+JHm3AQAgWvibyQAAIPR85TKZDABAwzGZye+//37wFQohBpABAI7hqWO6TF/rAmEfm0/E5XJp8ODBkqS1a9dW227Tpk2Ki4tr9OdNAADQ0BoqkwEAQN185TKZDABAw4mmTA7LOTkPHDig66+/Xi1atFCLFi10/fXXq6CgwOd7xo4d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AAAAHMUEMgAAAAAAAAAAAABAEhPIAAAAAAAAAAAAAICjmEAGAAAAAAAAAAAAAEhiAhlh4K677tKkSZO87jNjxgz99Kc/DVKLgDr0TQCRprlxjzEPbYW+CYSPBx54QAkJCZ7lgQceaOsmORLHIsFH3/QNfRMIH4x7vmHcCz76pm/om2gOE8hhavr06bIsS7/73e/qrX/99ddlWVa9dXv37tUvf/lL9e7dW7GxserWrZsuuOACvf/++349t2VZiomJUe/evXX77bervLzcs/3HP/6x18ekp6frnHPO0XPPPSe32+31+davX68hQ4Z43WfevHl6+umnW/V6JGnhwoXq1auX4uLiNHz4cH300UetrhXp6Jv1+dM3P/zwQ11wwQXKzMyUZVl6/fXXW1UHQGCF0rjnz5gnNT/u+ZvHEplsEn3zv/ztm2QyEDzXX3+91q9f71muv/76FtfwdUwzOfY1N+4d28fU2MdxcvDRN53RN8lkIHhCddyTgns8EoxMlsjl76NvOqdvksuhjQnkMBYXF6cHH3xQxcXFTe6zfft2DR8+XB988IEeeughbdy4Ue+8847GjRunm266qdXPfe6556qgoEDffvutfvvb32rhwoW6/fbbfXrM9u3b9c9//lPjxo3TzJkzdf7556umpqbJx23YsEFDhw71Wjs5OVkdOnRozUvRq6++qltuuUX33HOP1q1bpzPPPFOTJk3Szp07W1UP9M3v86dvlpeXa8iQIXriiSda9XgAwRNK415rxzyp+XHPnzFPIpMDgb5Zx9++SSYDwZOcnKw+ffp4luTk5BY93tcxLRBjXzgdi5DJDdE3ndE3yWQgeEJ53JOCdzwS6HFPIpd/iL7pnL5JLoc4G4507rnn2ldddZXn5/fff99OTk62q6urfXr8tGnT7PPPP9/u16+ffccdd3jWL1261P7+P/ukSZPsLl262GVlZQ1qFBcXt6rt06ZNs6dMmVJv3bXXXmt37ty5ye2NrbPtutctyX766acbfa6CggJbkr1kyRL7zDPPtOPj4+3hw4fb69ev9+yTl5dnS7K3b99u27Ztb9261ZZkv/XWW/ZZZ51lx8fH23379rU//fTTRp9jxIgR9vXXX19vXb9+/exf/epX3n4NYYu+WccJffP7JNlLly5tdj8ALRdJ415rxzzbbn7cMzHmkcn10Ted0ze/j0wGAsvfsc/XMc302NfcuNfYPk4+FiGTG6JvOqNvfh+ZDARWqI57th2845FgjXvkcn30Tef0ze8jl0MPn0B2qC5dumj37t2en8eNG6fKykr95z//8blGVFSUHnjgAT3++OPKz89vsL2oqEjvvPOObrrppkavIklKSmpV2xsTHx+v6urqFj/urLPO0pAhQ/T3v/+90e3r1q2TJD366KN64IEHtGbNGnXs2FGXX365Z5/169crKSlJPXr0kFR3ZY1lWfrDH/6g//mf/9GGDRvUvXt3/epXv2pQv6qqSp9//rkmTJhQb/2ECRP0ySeftPj1hAP6Zp227psAgodxr/kxT2p+3PN3zCOTG6JvOqNvAgguf8Y+X8e0YI19oXosQiY3jr7Z9n0TQHCF07gnBeZ4JBjjHrncEH3TGX0ToY8JZIfq0qVLvZN4lmUpLi5O3333XYvqXHTRRRo6dKjmzJnTYNs333wj27bVr18/v9vrzapVq/Tyyy9r/PjxrXp8v379tH379ka3rV+/XnFxcXr99dc1evRo9e/fX/fff7+++uor7d27V1LdwPb9e/lv2LBBnTp10quvvqpx48bpxBNP1I9//ONGf7cHDhxQbW2t0tPT661PT0/31I809M3/asu+CSB4GPfqeBvzpObHPX/HPDK5IfpmnbbumwCCy5+xz9cxLRhjXygfi5DJjaNv1uE4GYgc4TLuSYE7HgnGuEcuN0TfrNPWfROhL7qtG4DG/fAqmfXr16u4uFhnnHFGi2s9+OCDOuuss3TbbbfVW2/btqS6AdS0t956SwkJCaqpqVF1dbWmTJmixx9/vFW1bNtuso3r16/XT37yE2VmZnrWHbvi59iXxP/wy+A3bNigCy64QMcff7xn3bfffqs+ffo02YYfPr+3NoU7+uZ/OaFvAgg8xr06zWVfc+OeqTGPTP4v+mYdp/RNAMHhz9jn65gWqLEv3I5FyOT66Jt1nNA3AQRHKI97UnCOR4I57pHL/0XfrOOUvonQxSeQHapLly4qKytTaWmp3G63br31Vl155ZXKzMzUqaee6rkK5LPPPtPUqVO91vrRj36kiRMn6u677663/sQTT5RlWcrNzTXe/nHjxmn9+vXasmWLKioq9Pe//11paWmtqpWbm6tevXo1um39+vUNvuh97dq16ty5szIyMiQ1/DL4DRs2aOTIkfUes27duka/MD41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AACCwFsuk8kAAARPADL5vvvu08GDB1VcXCxJ2rZtm2677TZJ0uzZs5WamqpFixbpvPPOU//+/TVr1iyVl5frsccek8vl0uLFiz21TjjhBJ199tn617/+pVGjRuknP/mJli9frnfffVf9+vXThRde6PtLbdWrAQAgEI5dreVtu6QRI0bUWz1mzJh6t6T+ocGDBys3N9fz8+WXX64lS5ZIknbu3ClJSktLa/C45ORkSdL27ds1dOhQX14BAADhwcdMBgAAQeAtl8lkAACCJwCZfN9996m2ttbzc35+vucTxBdddJFGjx6tyZMn68UXX9TNN9+sOXPmSKr7ruWXXnpJWVlZ9eotX75cl1xyid5880198sknioqK0pgxY7Rs2bIWtYsJZACAc7isZr5vsS6EV61apYyMDM9qb58+lqRnn31WW7duVV5env7yl7/olVde0aFDh/TWW2959rG83GLExXdKAQAijY+ZDAAAgsBbLpPJAAAETwAyuaamxqf9srOzlZ2d7dO+r732Wqva8n1MIAMAnCM6qm7xtl11V1d9//uKmzNy5EiNHDlSkjRnzhwNGDBAb7/9tnJzc9W9e3dJ0r59+xo8rqioSJI8+wAAEDF8zGQAABAE3nKZTAYAIHgiKJP5SBUAwDlcruYXA0477TRJ0ieffKJx48ZJkjZu3Nhgv7y8PMXExPD9xwCAyBOkTAYAAD4gkwEAcIYIyuTwejUAgNAWpJPV//73vyVJZ5xxhuLi4tStWzfl5uZqz549nn1WrlypwsJCDRs2zMhzAgAQUphABgDAOchkAACcIYIymVtYAwAcw3JFyYpq+lYflqtltwHJyspShw4ddOaZZ6pnz57Kz8/Xq6++ql27dunUU09VVlaWJGnRokU677zz1L9/f82aNUvl5eV67LHH5HK5tHjxYr9eEwAAoch0JgMAgNbzlstkMgAAwRNJmcwEMgDAOZq7UquFV3GNHDlSr732mtauXSvbtmVZlhITE3X99dfrySef9Ow3efJkvfjii7r55ps1Z84cSXXfs/zSSy95JpkBAIgohjMZAAD4wVsuk8kAAARPBGWysQnkvXv3avXq1bIsS6eeeqrS09NNlQYARAqXVbd4294Czz33nJ577jmf9s3OzlZ2dnaL6jsZuQwA8IvhTI5kZDIAwG/ecplM9hmZDADwWwRlspHp8Jdfflmj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/04iHX2TvglEIsY+xj4nol/SL4FIxNjH2OdU9E36JhBpGPcY95yKvknfhG3zHchhbO3ataqtrVVKSooSEhI8y3XXXRfUdmzfvl2ZmZmen7/55hvZtq2TTjqp3n6pqameNt51112SpPLycs2fP1/PPfecJk6cqN69e2v69OnKzs7WU089JUm6+uqrtX37duXk5HhqPffcc7r44ot13HHH1XuOLl26qLKyUnv37g3Qq4Uv6Jv0TSASMfYx9jkR/ZJ+CUQixj7GPqeib9I3gUjDuMe451T0TfompOi2bgAC5/PPP9dll12m+++/v976H/7h19bWKioqKmDtOHLkiOLi4hqstyyr3s+rVq2S2+3WlVdeqcrKSknSl19+qYqKCp1zzjn19q2qqtLJJ58sSerXr5/OOOMMPffccxo3bpy2bdumjz76SO+9916D54yPj5ckn79IHoFB36RvApGIsY+xz4nol/RLIBIx9jH2ORV9k74JRBrGPcY9p6Jv0jch8QnkMLZu3TqNHj1affr0qbekpKRo+/btGjJkiK677jqdfPLJqqys1OLFizVixAgNHjxYv/71rz11nn76aQ0aNEhDhgzRr371K8/6Bx98UAMHDtSgQYO0ZMmSJtuRmpqq4uJiz899+vSRZVn66quv6u3Xu3dv9enTxzMQSZLb7ZYkvf3221q/fr1n+fLLL/W3v/3Ns98111yj1157TaWlpVq8eLF69Oih8ePHN2hLUVGRJOn444/39deIAKBv0jeBSMTYx9jnRPRL+iUQiRj7GPucir5J3wQiDeMe455T0Tfpm5D4DuQwtW3bNluS/dFHHzW6PS8vz46KirI3bNhg27Ztb9682b700kvtmpoau7a21j7//PPtTz75xN6wYYM9cOBAu6SkxLZt2y4sLLRt27ZXr15tDxs2zD5y5IhdWFho9+7d2969e3ejz/X73//eHjJkSL11EyZMsLt06dLoF72PGTPGnjlzpm3btl1aWmrHxsbaL7zwgtfXe+jQITshIcF+8skn7a5du9r33ntvo/s988wzdteuXb3WQmDRN+mbQCRi7GPscyL6Jf0SiESMfYx9TkXfpG8CkYZxj3HPqeib9E3U4RbWYerzzz+XJKWnpze4J31aWpokqW/fvho8eLAk6f3339fKlSs1fPhwSVJZWZm2bdumoqIiTZ06VZ06dZIkJScn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yy+/7BQUFDgNDQ0hPf7II490+vTp0+aVIWVlZZ2+X6i+fwWM4zjOOeec4/Tq1avd+7T1GMdpes2SnHvuuafN5yopKXEkOY888ogzadIkJysryxkzZoyzYsWK5vusWbPGkeSsXbvWcRzH+fzzzx1Jzn/+8x/nkEMOcbKyspwhQ4Y47777bpvPMXbsWOe8885rcduwYcOcK6+80u3XkNDom97om98lrt4CIirccW/mzJnOMccc4wwbNsy57LLLmm///pWr1uPerud2G/usxj3HIZdjgb7pnb75XeQyEDnRGvcch+MRMrlz6JtNvNA3v4tMBiKL45HIHI90Zdwjl1uib3qnb34XuRx/+ASyR/Xp00ebNm1q/nnq1Kmqq6vTW2+91eFjS0tL9fzzz+uCCy5o88qQ/Pz8Tt0vXFlZWWpoaOj04w455BCNGjVK//znP9vcv3z5cknSrbfeqhtuuEFLly5VTk6OTj755Ob7rFixQvn5+RowYICkpitqfD6fbr75Zv3v//6vPvjgA/Xv319XXnllq/r19fV6//33NW3atBa3T5s2TW+//XanX0+ioG/Gvm8CiK5wxr1dUlJSdMMNN+j222/Xxo0bW+2P1rgndW3s62jck8jlWKBveqNvAoieaIx7EscjZHLn0TebxLpvAogujkciczzS2XGPXG6NvumNvon4xwSyR/Xp06fFwOTz+ZSZmamvv/66w8d+8cUXchxHw4YNM7lfOBYvXqxHH31Uhx56aJceP2zYMK1du7bNfStWrFBmZqaeeuopTZw4UXvttZeuv/56ffrpp9qyZYukpgONUaNGNT/mgw8+UF5enh5//HFNnTpVP/jBD/SjH/2ozd/rtm3b1NjYqKKioha3FxUVNddPRvTNJrHsmwCiK5xx77uOP/54jR49Wtdee22rfdEY96Twxj63cU8il2OBvtkk1n0TQPREY9yTOB4hkzuPvvktjpWB5MHxSBPr45HOjnvkcmv0zSax7puIf6mxbgDa9v2rZFasWKGysjJNmDChw8c6jiOpaWC0uF9n/ec//1F2drYCgYAaGho0ffp03X777V2q5ThOu+1bsWKFfvKTn6h3797Nt+262icYDDbf5/sHHscee6x233335tu+/PJLDR48uN02fP/53dqUDOibTbzQNwFERzjj3vfdeOONOuSQQ3TJJZe0uD1S455kN/Z1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YSOTTZDJAAATSXSyOlLIZACAiSTK5JBfTVVVlS699FINGzZMhYWF2nPPPXXUUUfp+uuv16effhrJNrbrzjvv1KBBg5SZmakxY8bojTfecL3/a6+9pjFjxigzM1N77LGHFi5cGKWWAgBCsmsJELcNkshlAECEkckhI5MBABFHJoeETAYARFwSZXLIE8hnnnmm/vGPf2jmzJn63e9+p1mzZumVV17Ro48+qhEjRmj69OnatGlTJNvawuOPP67Zs2frmmuu0fLlyzVp0iQdeeSRWr9+fZv3X7NmjY466ihNmjRJy5cv19VXX60LL7xQTzzxRNTaDADogM/37VVcbW6+WLfQM8hlAEBEkckhI5MBABHnmstk8i5kMgAg4pIok0OeDn/xxRf11ltvafTo0c23XXPNNXr66aeVmpqq66+/XmPHjtWbb76pQYMGRaKtLcyfP18//elPdc4550iSbr31Vr3wwgu66667NG/evFb3X7hwofr3769bb71VkjR8+HAtXbpUN910k0488cSItxcAEAKWywwZuQwAiCgyOWRkMgAg4pJoucxwkMkAgIhLokwO+dUUFRWpurq6zX39+/fX3XffrQsuuECzZs0ya1x76uvr9f7772vatGktbp82bZrefvvtNh/zzjvvtLr/4YcfrqVLl6qhoaHNx9TV1amysrLFBgCIIH9qxxskkcvkMgBEGJkcMjKZTAaAiCOTQ0Imk8kAEHFJlMkhTyDPmjVLZ599tj744IN273PaaafplVdeMWmYm23btqmxsVFFRUUtbi8qKtKWLVvafMyWLVvavH8gENC2bdvafMy8efOUl5fXvPXr18/mBQAA2uYLYYMkcplcBoAII5NDRiaTyQAQcWRySMhkMhkAIi6JMrlTE8gnnniixowZoyOOOEILFy5UMBiU7ztrej/22GMqLCyMSEPb4vveeuKO47S6raP7t3X7LldddZUqKiqatw0bNoTZ4pZWr8k2rffvdWlmtRqCZqUkSXvkBsxqTR3Q9hV3XTVkfLlpvfLCLNN68S4lYNuZ0usaTevVZdldFWT9WnfmZJjVquluNz5EkuM4HW5oQi7b5vKir7ea1ZIk/5gpZrWcr7ab1ZKkgbcdbFpv3XG3mtX6fyOKOr5TJzy+OgEyea1ttnxV0s2s1o6qdLNakpSbV29Wq7zULkMlacTotk/YdVVqmvGb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6Wqufffd17SBAIDkwRLWXUMuAwCsWWey16+stkImAwAigePkziOTAQCREEomjx07Vv369WvejjvuuJDrT548WZL0+9//PiLt74wuLWF90kknaeLEiSopKdGoUaOabz/00EN1/PHHmzUOAJBcWMK6a8hlAIC1UDO5pKSkxe25ubkhf6pn15XVxcXFXW+ox5DJAIBIYAnrziOTAQCREEomL168uMVxbqjHyJMmTdLatWt10kkn6fTTTw+/sWHq0gSy1HS1eK9evVrcNnbs2LAbBABIXo4TlOO0v/yW275kRy4DACyFmsnfz5rJkydr0aJFIT2Hl66stkQmAwCsueUyx8ntI5MBANZCyeTi4mL17du3U3WnTp2qN998U4cddpj+/ve/h91OC12eQC4vL9d9992nlStXyufzafjw4frpT3+qvLw8y/YBAJKI4wRdl9/iwLh95DIAwFKomZwoV1ZbIpMBANbccpnj5PaRyQAAa5HI5KlTp2rRokWaMmWKXnzxxXCaZ6pL34G8dOlS7bnnnrrllltUWlqqbdu26ZZbbtGee+6pZcuWWbcRAJAknBD+Q2vkMgDAWqiZvOvK6l1bKBPIXryy2gqZDACIBI6TO49MBgBEgnUmH3rooVq0aJEmTpyoV199NQIt7roufQL5oosu0nHHHad77rlHqalNJQKBgM455xzNnj1br7/+umkjAQDJwVFQjlyWy3TZl8zIZQCAtUhlslevrLZCJgMAIsEtlzlObhuZDACIBMtMPvbYY/XKK6+osLBQM2fO1L333tti/znnnNPldlro0gTy0qVLW4SvJKWmpuryyy/X/vvvb9Y4AEByCTqNrstluu1LZuQyAMBaJDLZy1dWWyGTAQCR4JbLHCe3jUwGAESCZSa/8cYbkqRt27bp3HPPbbU/LieQc3NztX79eg0bNqzF7Rs2bFBOTo5JwwAAycdxHDlO+0t9uO1LZuQyAMCadSZ7/cpqK2QyACAS3HKZ4+S2kckAgEiwzOTy8nKDFkVOlyaQZ8yYoZ/+9Ke66aabNGHCBPl8Pr355pu67LLLdMopp1i3EQCQJFjCumvIZQCANetM9vqV1VbIZABAJLCEdeeRyQCASEimTO7SBPJNN90kn8+nM888U4FAQJKUlpamX/ziF/rd735n2kAAQPJoCPrUEPS57kdr5DIAwJp1Jnv9ymorZDIA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/rjzySefOP/973+df/zjH85RRx3l/Otf/wqp9pNPPun4fD5n7dq1rfadc845zujRo1vctt9++zl33nlneC8IYaNv0jeBZMTYx9jnRfRL+iWQjBj7GPu8ir5J3wSSDeMe455X0Tfpm3AcJpAT2KpVqxxJzuLFi2PajieeeMIpLCxscdvhhx/u9O3b19mxY0ebjwkGgy3+/4033ugMGjTIyczMdPbZZx/n73//u+M4jtPQ0OAUFRU5c+bMafH46upqJycnx7n99ttb3D5nzhxn0qRJFi8LYaBv0jeBZMTYx9jnRfRL+iWQjBj7GPu8ir5J3wSSDeMe455X0Tfpm2ACOaE9+uijTmpqqlNbWxvTdsyaNcs54ogjmn/etm2b4/P5nHnz5oX0+KuvvtoZNmyY8/zzzzurV692HnjgAScjI8NZtGiR4ziOc9lllzkDBw5sMTA++OCDTkZGhlNaWtqi1rPPPutkZGTE/HeS7Oib9E0gGTH2MfZ5Ef2SfgkkI8Y+xj6vom/SN4Fkw7jHuOdV9E36JhyH70BOYMuWLVNjY6N69Oih7Ozs5u3cc8+NajvWrl2r3r17N//8xRdfyHEcDR06tMX9CgsLm9t4xRVXSJKqq6s1f/583X///Tr88MO1xx576KyzztLpp5+uu+++W5J09tlna+3atVq0aFFzrfvvv18nnHCCdttttxbP0adPH9XV1WnLli0RerUIBX2TvgkkI8Y+xj4vol/SL4FkxNjH2OdV9E36JpBsGPcY97yKvknfhJQa6wYgct5//339+Mc/1vXXX9/i9u//4Tc2NiolJSVi7aipqVFmZmar230+X4ufFy9erGAwqNNOO011dXWSpE8++US1tbU67LDDWty3vr5e++67ryRp2LBhmjBhgu6//35NnTpVq1ev1htvvKEXX3yx1XNmZWVJUshfJI/IoG/SN4FkxNjH2OdF9Ev6JZCMGPsY+7yKvknfBJIN4x7jnlfRN+mbkPgEcgJbvny5Jk6cqMGDB7fYevToobVr12rUqFE699xzte+++6qurk4PPPCAxo4dq3322Ue//vWvm+vcc8892nvvvTVq1ChdeeWVzbffeOONGjlypPbee2898sgj7bajsLBQZWVlzT8PHjxYPp9Pn376aYv77bHHHho8eHDzQCRJwWBQkvTMM89oxYoVzdsnn3yif/zjH833++lPf6onnnhClZWVeuCBBzRgwAAdeuihrdpSWloqSdp9991D/TUiAuib9E0gGTH2MfZ5Ef2SfgkkI8Y+xj6vom/SN4Fkw7jHuOdV9E36JiS+AzlBrV692pHkvPHGG23uX7NmjZOSkuJ88MEHjuM4zscff+ycdNJJTiAQcBobG51jjjnGefvtt50PPvjAGTlypFNeXu44juNs377dcRzHWbJkibPffvs5NTU1zvbt25099tjD2bRpU5vP9Yc//MEZNWpUi9umTZvm9OnTp80vep88ebIza9Ysx3Ecp7Ky0snIyHAeeugh19dbVVXlZGdnO3fddZfTt29f57rrrmvzfvfee6/Tt29f11qILPomfRNIRox9jH1eRL+kXwLJiLGPsc+r6Jv0TSDZMO4x7nkVfZO+iSYsYZ2g3n//fUlSUVFRqzXpe/bsKUkaMmSI9tlnH0nSyy+/rHfeeUdjxoyRJO3YsUOrV69WaWmpZsyYoby8PElSQUGBJOnNN9/UiSeeqMzMTGVmZurQQw/VkiVLNH369FZtOfzww3XVVVeprKyseYmHO++8UwcddJD2339/zZkzR/vss4/8fr+WLFmiTz/9tLkdOTk5uvTSS3XRRRcpGAxq4sSJqqys1Ntvv63s7GzNnDlTkpSdna0ZM2bo6quvVkVFhc4666w2fy9vvPGGpk2b1uXfK8JH3zyrzd8LfRNIbIx9Z7X5e2Hsiy365Vlt/l7ol0BiY+w7q83fC2Nf7NE3z2rz90LfBBIX495Zbf5eGPdij755Vpu/F/pm8mECOUEtW7ZMUtNA9l1paWmqqqqSJHXr1q35dsdx9LOf/azF8gqSdNttt4X0fI7jtFp3f5e9995b+++/v/72t7/p5z//uSRpzz331PLly3XDDTfoqquu0saNG5WRkaG99tpLl156qc4///zmx//mN79Rz549NW/ePH355ZfKz8/Xfvvtp6uvvrrF8/z0pz/Vfffdp2nTpql///6t2lFbW6snn3xSL7zwQkivCZFB36RvAsmIsY+xz4vol/RLIBkx9jH2eRV9k74JJBvGPcY9r6Jv0jfxjeh/6BlesGbNGmfMmDHNP3/44YfOXnvt5ZSWljqO4zgbNmxwtm3b5nz44YftLrMwZswYp7a21iktLXX23HNPZ/Pmze0+3zPPPOMMHz7caWxsjOCrcrdgwQLnsMMOi9nzIzT0TQDJiLEPXkS/BJCMGPvgVfRNAMmGcQ9eRd9EsuATyJAkjRw5UldccYWmTJmiYDConJwc/fWvf9XIkSM1a9YsHXTQQUpNTdWRRx6pefPmaf/999ePf/xjjRkzRj6fT9ddd52Ki4vbrX/UUUfp888/16ZNm9SvX78ovrJvpaWl6fbbb4/Jc6Pr6JsAkhFjH7yIfgkgGTH2wavomwCSDeMevIq+iUTlcxzHiXUjAAAAAAAAAAAAAACx5491AwAAAAAAAAAAAAAA3sAEMgAAAAAAAAAAAABAEhPIAAAAAAAAAAAAAIBvMIEMAAAAAAAAAAAAAJDEBDIAAAAAAAAAAAAA4BtMIAMAAAAAAAAAAAAAJDGBDAAAAAAAAAAAAAD4BhPIAAAAAAAAAAAAAABJTCADAAAAAAAAAAAAAL7BBDIAAAAAAAAAAAAAQBITyAAAAAAAAAAAAACAb/x/Kyf6qPIinZkAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt_maps(maps_honda, 'using Honda flux')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "96e9e80f", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAB5YAAAOoCAYAAAAaohghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxU1f3/8fed7BBCDBGSsAvFsIgIiqwCIqgoIi7ggkIrKq2tIiigtoUvPxWlrohK3VvFpRYFrSiiEpVNpKwiIsoSkE2WsASyzv39kWYkJrmZyZxJ7iSvp495PMy9dz45CSfnPfeeu1i2bdsCAAAAAAAAAAAAAKAcnupuAAAAAAAAAAAAAADA3ZhYBgAAAAAAAAAAAAA4YmIZAAAAAAAAAAAAAOCIiWUAAAAAAAAAAAAAgCMmlgEAAAAAAAAAAAAAjphYBgAAAAAAAAAAAAA4YmIZAAAAAAAAAAAAAOCIiWUAAAAAAAAAAAAAgCMmlgEAAAAAAAAAAAAAjphYBgAAAAAEbdu2bbIsS6+88kp1N8UnIyNDlmUpIyOjupviCtu2bdMll1yipKQkWZalsWPHuvLfDQAAAADgTpHV3QAAAAAAQPhLTU3VsmXL1KpVq+puCspx55136quvvtJLL72klJQUpaamyrbt6m4WAAAAACBMMLEMAAAAAAhaTEyMunXrVt3NgINvvvlGXbt21eWXX+5btm3btmprDwAAAAAgvHArbAAAAACopUaNGqUWLVqUWj5lyhRZllVi2dtvv61zzz1X9evXV506dXTaaafpd7/7nW99WbdULq6zYcMGXXvttapfv74aNWqk3/3udzp8+HCJ+llZWbrpppuUlJSk+Ph4XXLJJdqyZYssy9KUKVMq/Fm+++47XXTRRapTp46Sk5M1ZswYHT16tNR2Cxcu1JAhQ9SkSRPFxsaqdevWuvXWW7V///5S227evFnXXXedGjZsqJiYGLVt21ZPP/10iW2Kb7f9+uuva+LEiUpNTVV8fLwGDx6svXv36ujRo7rllluUnJys5ORk/fa3v9WxY8dK1MjJydE999yjli1bKjo6Wo0bN9Ztt92mrKysEtu1aNFCl156qT766CN17txZcXFxSk9P10svveT4uylu4w8//KAPP/xQlmXJsqxyJ5X97RdvvvmmLMvSzJkzS2w3efJkRUREaOHChY7tAgAAAACEF65YBgAAAAA4WrZsmYYPH67hw4drypQpio2N1fbt2/XZZ5/59f4rr7xSw4cP10033aT169frnnvukSTfhKjX69XgwYO1cuVKTZkyRZ07d9ayZct00UUX+VV/79696tOnj6KiovTMM8+oUaNGmj17tv74xz+W2vbHH39U9+7dNXr0aNWvX1/btm3TY489pl69emn9+vWKioqSJH377bfq0aOHmjVrpkcffVQpKSlasGCBbr/9du3fv1+TJ08uUffee+9Vv3799Morr2jbtm266667dO211yoyMlJnnnmm3njjDa1evVr33nuv6tWrpxkzZkiSbNvW5Zdfrk8//VT33HOPevfurXXr1mny5MlatmyZli1bppiYGN/3Wbt2rcaPH69JkyapUaNGeuGFF3TTTTepdevWOu+888r8/RT/PocOHapWrVrpkUcekVR0+/Ldu3f79TsuyzXXXKPPP/9c48ePV7du3XT22Wfrs88+0/333697771XAwYMqHRtAAAAAID7MLEMAAAAAHC0dOlS2batWbNmqX79+r7lo0aN8uv9N910k+6++25J0gUXXKAffvhBL730kl588UVZlqWPPvpIixcv1rPPPqsxY8ZIkgYMGKDo6GjfJLSTxx9/XD///LNWr16tM888U5J08cUXa+DAgcrMzCyxbXF9qWhSt0ePHurbt6+aN2+uDz/8UJdddpkkady4capXr54WL16shIQEX5tyc3P10EMP6fbbb9cpp5ziq9WxY0e9/PLLvq+/++47PfHEE7r99tv1t7/9zff+ZcuWafbs2b6J5Y8//lgLFizQ9OnTfb+jAQMGqGnTpho+fLj++c9/6uabb/bV3b9/v5YsWaJmzZpJks477zx9+umnev3118udWE5ISFC3bt0UExOjxMREo7csf+KJJ/TVV19p2LBh+uCDD3Tdddepd+/efl1lDgAAAAAIL9wKGwAAAADg6JxzzpEkDRs2TP/617/0008/BfT+4snaYh07dlROTo727dsnSfr888999U927bXX+lV/0aJFat++vW9Sudh1111Xatt9+/ZpzJgxatq0qSIjIxUVFaXmzZtLkjZu3Cip6NbUn376qYYOHao6deqooKDA9xo0aJBycnK0fPnyEnUvvfTSEl+3bdtWknTJJZeUWn7w4EHf7bCLr/r+9ST91Vdfrbp16+rTTz8t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GLyq6vHHH5ckjR8/vsTy6dOnS5Jmzpxp7HsBAFCtnHKZ/WQAAKqOH5nctWtXNW3a1Pfy94TnefPmybIs3X///RVu++c//1mLFy/W1KlT9ac//Un/+te/lJGRIUm64447Kv3j+YMrlgEA7lHRsyh4dhQAAFXDBZkcEREhr9crj8ej9u3b691331WrVq1861evXi1JpXbSO3XqJMuy9P3334e8jQAAVAmnXGY/GQCAquNHJq9YsUKpqam+xf5crfzvf/9bx48fV6dOnfzaviy9evVScnKy9u7dW6n3+8vYxPKePXv09ddfy7IsnXPOOWrUqJGp0gCA2oJnLBtDLgMAguJnJlf2Fl9OOnTooA4dOqhbt26SpP/85z9asmSJ2rVrp+3btyslJUWSlJWVJUlq2LBhqRqRkZE6duxYUO0whUwGAASNZywbQSYDAILmRyanpqaqSZMmAZUtvkr5r3/9a1DNs2075I/JMPLJ4/XXX1evXr30wQcf6L333lPv3r315ptvmigNAKhNPFbFrwC0bt3a99yLsl4vvPCC43YxMTGh+ClDjlwGAATNz0yu7C2+nMydO1dz587VpEmTNGnSJC1evFh33XWX8vLyNGbMmKDrVyUyGQBghMH95NqKTAYAGBGCTD5y5IjWrVununXraujQoZVu2hdffKEDBw6E/MQpI1csP/zww/r66691yimnSJIOHTqkvn376pprrjFRHgBQW0RGSJEO0RRZEFC55557Tlu2bCm1/JZbbpFlWbrxxhtLLH/++edLfB3sFVfVhVwGAATNz0yuzC2+KmPatGl65JFHtGrVKt+yxMRESdL+/fuVnJxcYvuCggLFx8eHpC2BIJMBAEY45XKA+8m1FZkMADAiBJn8l7/8RbZt64orrihzfZs2bbR582YtXrxYPXv2lCQlJSWpU6dOOvfcc5WcnKwlS5Zo3rx5kqSnn366Uu3wl5Erlr1eb4md9vj4eHm9XhOla7Qn1tczWm9XSqKxWtZvWhirJUn2gUPGakX+9wtjtSSpu+GzNwY3zzdarzpE5RUaq5W91+yj3Avy3XuLp8QGOUbr5dWPMlbrSFKssVohZfiK5fPPP1+jR48u8crOzpZt2+rRo4eio6NLbP/rbYcNG2byp6sy5HLgnttm9napp876vbFaHXuZ/bfbvM5svR13fWms1plZPxurJUl3dnHH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8cdlWZYsy1JycrKeeeYZ37pADmC7FbkMADDN30zu2rWrmjZt6nsFe4VwcZ41bNiw1LriW4Bt27ZNknz5XNa2kZGROnbsWFBtqQwyGQAQCqHYT67pyGQAQCiYzOQWLVqoW7duGj9+vJ544gndeOONSk9Pl9fr1ZQpU3zbtWnTRpZlacmSJb5lf//73xUTE6Nbb71Vt912m6ZPn67TTjtNubm5euCBB0z9uGWq1K2whw8frptuukmPPPKIevToIcuytHjxYt19992lHjQNAIC/vHbRy2m9VHR11MkSEhLKfFZFo0aN1KlTJ1100UVq3LixVq1apdmzZ+u2227ToUOHdN999/l9ALtTp06V+6GqALkMADDN30wO5tlRTizLKnedP7fUri5kMgAgFJxy2SmvazMyGQAQCiYzOT09XV988YXvMYyWZSklJUXTpk3TyJEjf6nrLboS+uRbcCckJGjlypUaMmSInn32Wdm2rfj4eD388MO64447AmtIgCo1sfzII4/IsizdeOONKigokCRFRUXp97//vR566CGjDQQA1B6FtqVCu/wDycXrunbtWmJ5nz59lJGRUWr7a6+9ttQO4+TJk9WqVSvdf//9uu+++3zLw/UAtkQuAwDM8zeTg3121K81a9ZMkrR3795S6w4ePFhim+Lbgu3fv1/Jycklti0oKFB8fLyxdvmLTAYAhIJTLjvldW1GJgMAQsFkJn/00Ud+bffDDz+UubxDhw768ccfA/qeJlRqYjk6OlpPPvmkpk2bph9//FG2bat169aqU6eO6fYBAGqRAq+lAm/5AVy8Lpiro5o3b67TTz9d3377rQ4ePBjQAWy3IpcBAKb5m8mm9evXT5K0fv36Uuu2bt2qqKgo34Ry586dtXz5cs2bN0833XSTb7t169bJtm21adMmJG10QiYDAELBKZdDlcnhjkwGAIQCmVzJZyxPmzZNL730kurUqaMzzjhDHTt2VJ06dfTSSy/p4YcfNt1GAEAt4bWlQodX8e1Eiq+OKn4FetvN4tuGeDyegA5guxW5DAAwzd9MNi02NlZNmzbVxo0btWvXLt/yZcuW6cCBA+rcubNv2bhx4yRJjz32WIkaEyZMkCT98Y9/DE0jHZDJAIBQcMplboVdNjIZABAKZHIlJ5b//ve/Kz09vdTy9u3ba9asWUE3CgBQO3ltq8JXsLZu3apN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9Xrtpk2b2g888IC9a9euSo9Dhw4FrR1Hjhyxk5KS7GXLllUs27x5s926dWs7IyPDfuWVV+wvv/zS/vzzz+1//vOf9qhRo+w33njDp9oLFy60Lcuyt2zZUmXduHHj7D59+lRadsopp9hPPPGEf28IfqNv0jeBSMTYx9jnRvRL+iUQiRj7GPvcir5J3wQiDeMe455b0Tfpm6gZE8sN2Ndff21LslesWBHSdrz66qt2SkpKpWUjRoyw27Ztax8+fLja53i93kr/f//999udOnWy4+Pj7V69etn/+Mc/bNu27ZKSErtVq1b29OnTKz2/oKDAbtq0qf3oo49WWj59+nT7zDPPNPG24Af6Jn0TiESMfYx9bkS/pF8CkYixj7HPreib9E0g0jDuMe65FX2TvomaMbHcgL344ot2dHS0XVhYGNJ2TJgwwT733HMrft63b59tWZY9c+ZMn55/99132xkZGfY777xjb9682Z43b54dFxdnZ2dn27Zt27fffrvdsWPHSgPm888/b8fFxdm5ubmVai1atMiOi4sL+e8k0tE36ZtAJGLsY+xzI/ol/RKIRIx9jH1uRd+kbwKRhnGPcc+t6Jv0TdSM71huwFavXq2ysjK1aNFCCQkJFY/rr78+qO3YsmWL0tPTK37+9ttvZdu2TjrppErbpaSkVLRxypQpkqSCggLNnj1bzz33nEaMGKHOnTtr7NixysrK0lNPPSVJuvbaa7VlyxZlZ2dX1Hruued08cUXq3nz5pVeo02bNioqKtLu3bsD9G7hC/omfROIRIx9jH1uRL+kXwKRiLGPsc+t6Jv0TSDSMO4x7rkVfZO+iZpFh7oBCJzPPvtMv/jFL3TvvfdWWv7TAaGsrExRUVEBa8fRo0cVHx9fZbllWZV+XrFihbxer66++moVFRVJkr788ksVFhbqnHPOqbRtcXGxTj75ZElSRkaGzjjjDD333HMaOnSoNm/erI8++kjvvfdeldds1KiRJPn8BfYIDPomfROIRIx9jH1uRL+kXwKRiLGPsc+t6Jv0TSDSMO4x7rkVfZO+iZpxxXIDtmbNGg0aNEhdunSp9GjRooW2bNmi3r176/rrr9fJJ5+soqIizZs3T/369VOvXr30+9//vqLO008/rZ49e6p379668847K5bff//96tGjh3r27KkFCxbU2I6UlBQdOHCg4ucuXbrIsix99dVXlbbr3LmzunTpUjFASZLX65Ukvf3221q7dm3F48svv9Q///nPiu2uu+46vfrqq8rPz9e8efPUoUMHDRs2rEpbcnNzJUktW7b09deIAKBv0jeBSMTYx9jnRvRL+iUQiRj7GPvcir5J3wQiDeMe455b0Tfpm3AQurtwI5A2b95sS7I/+uijatfn5OTYUVFR9rp162zbtu0NGzbYl156qV1aWmqXlZXZ559/vr1s2TJ73bp1do8ePey8vDzbtm17//79tm3b9sqVK+1TTjnFPnr0qL1//367c+fO9vfff1/ta/3lL3+xe/fuXWnZ8OHD7TZt2lT7BfODBw+2J0yYYNu2befn59txcXH23/72N8f3e+jQITshIcF+8skn7bZt29p/+MMfqt3umWeesdu2betYC4FF36RvApGIsY+xz43ol/RLIBIx9jH2uRV9k74JRBrGPcY9t6Jv0jfhjFthN1CfffaZJKlVq1ZV7nmfmpoqSeratat69eolSXr//fe1fPly9e3bV5J0+PBhbd68Wbm5ubr88svVrFkzSVJycrIkaenSpbrkkksUHx+v+Ph4DRs2TCtXrtTo0aOrtGXEiBG66667dODAgYpbRTzxxBMaOHCgTj31VE2fPl29evWSx+PRypUr9dVXX1W0o2nTprrtttt06623yuv1atCgQcrPz9eyZcuUkJCgMWPGSJISEhJ0+eWX6+6779bBgwc1duzYan8vH330kYYPH17v3yv8R98cW+3vhb4JNGyMfWOr/b0w9oUW/XJstb8X+iXQsDH2ja3298LYF3r0zbHV/l7om0DDxbg3ttrfC+Ne6NE3x1b7e6Fv4hgmlhuo1atXSyof4I4XExOjQ4cOSZIaN25csdy2bf3617+udJsGSZozZ45Pr2fbdpX7+h/Ts2dPnXrqqfr73/+u8ePHS5JOOOEErVmzRvfdd5/uuusu7dixQ3FxcerWrZtuu+023XjjjRXP/+Mf/6jU1FTNnDlT3333nZKSknTKKafo7rvvrvQ61113nZ599lkNHz5c7du3r9KOwsJCLVy4UO+++65P7wmBQd+kbwKRiLGPsc+N6Jf0SyASMfYx9rkVfZO+CUQaxj3GPbeib9I3UYvgXyQNN8jJybH79u1b8fP69evtbt262bm5ubZt2/b27dvtffv22evXr6/xdg19+/a1CwsL7dzcXPuEE06wd+7cWePrvf3223ZmZqZdVlYWwHfl7LHHHrPPOeeckL0+fEPfBBCJGPvgRvRLAJGIsQ9uRd8EEGkY9+BW9E1EOq5YhiSpR48emjJlioYMGSKv16umTZvq5ZdfVo8ePTRhwgQNHDhQ0dHRGjlypGbOnKlTTz1Vv/jFL9S3b19ZlqU//OEPSktLq7H+qFGjtGnTJn3//fdq165dEN/Z/8TExOjRRx8NyWuj/uibACIRYx/ciH4JIBIx9sGt6JsAIg3jHtyKvolIY9m2bYe6EQAAAAAAAAAAAAAA9/KEugEAAAAAAAAAAAAAAHdjYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZQAAAAAAAAAAAACAIyaWAQAAAAAAAAAAAACOmFgGAAAAAAAAAAAAADhiYhkAAAAAAAAAAAAA4IiJZYS9KVOmaOTIkY7bjB8/XldddVWQWgSUo28CiDS1jXuMeQgV+ibQcNx3331KSEioeNx3332hbpIrsS8SfPRN39A3gYaDcc83jHvBR9/0DX0T9cXEcgM1duxYWZalP//5z5WWv/7667Isq9Ky3bt36+abb1bnzp0VFxendu3a6YILLtD777/v12tblqWYmBh17txZt912mwoKCirW//znP3d8TqtWrXTOOefoueeek9frdXy9tWvXqnfv3o7bzJw5U08//XS93o8kPfHEE+rUqZPi4+PVt29fffTRR/WuFenom5X50zc//PBDXXDBBUpPT5dlWXr99dfrVQdAYIXTuOfPmCfVPu75m8cSmWwSffN//O2bZDIQPDfccIPWrl1b8bjhhhvqXMPXMc3k2FfbuHdsG1NjH/vJwUffdEffJJOB4AnXcU8K7v5IMDJZIpePR990T98klxsmJpYbsPj4eN1///06cOBAjdts2bJFffv21QcffKBZs2Zp/fr1eueddzR06FDddNNN9X7tc889V7t27dJ3332nP/3pT3riiSd02223+fScLVu26N///reGDh2qCRMm6Pzzz1dpaWmNz1u3bp369OnjWDs5OVlNmjSpz1vRK6+8ookTJ2rq1Klas2aNzjzzTI0cOVLbtm2rVz3QN4/nT98sKChQ79699dhjj9Xr+QCCJ5zGvfqOeVLt454/Y55EJgcCfbOcv32TTAaCJzk5WV26dKl4JCcn1+n5vo5pgRj7GtK+CJlcFX3THX2TTAaCJ5zHPSl4+yOBHvckcvmn6Jvu6ZvkcgNlw5XOPfdc+5prrqn4+f3337eTk5PtkpISn54/ZswY+/zzz7czMjLs22+/vWL5woUL7eP/2UeOHGm3adPGPnz4cJUaBw4cqFfbx4wZY48ePbrSsnHjxtmtW7eucX11y2y7/H1Lsp9++ulqX2vXrl22JHvBggX2mWeeaTdq1Mju27evvXbt2optcnJybEn2li1bbNu27U2bNtmS7Lfeess+++yz7UaNGtldu3a1P/nkk2pfo1+/fvYNN9xQaVlGRoZ95513Ov0aGiz6Zjk39M3jSbIXLlxY63YA6i6Sxr36jnm2Xfu4Z2LMI5Mro2+6p28ej0wGAsvfsc/XMc302FfbuFfdNm7eFyGTq6JvuqNvHo9MBgIrXMc92w7e/kiwxj1yuTL6pnv65vHI5YaDK5Zdqk2bNvr+++8rfh46dKiKior08ccf+1wjKipK9913nx599FHt2LGjyvrc3Fy98847uummm6o96yQpKaleba9Oo0aNVFJSUufnnX322erdu7dee+21atevWbNGkvTwww/rvvvu06pVq9S0aVNdccUVFdusXbtWSUlJ6tChg6TyM3Esy9KDDz6oe+65R+vWrVP79u115513VqlfXFyszz77TMOHD6+0fPjw4Vq2bFmd309DQN8sF+q+CSB4GPdqH/Ok2sc9f8c8Mrkq+qY7+iaA4PJn7PN1TAvW2Beu+yJkcvXom6HvmwCCqyGNe1Jg9keCMe6Ry1XRN93RN9FwMbHsUm3atKl0cM+yLMXHx+uHH36oU52LLrpIffr00bRp06qs+/bbb2XbtjIyMvxur5MVK1boxRdf1LBhw+r1/IyMDG3ZsqXadWvXrlV8fLxef/11DRo0SN26ddO9996rr776Srt375ZUPuAd/10B69atU7NmzfTKK69o6NChOvHEE/Xzn/+82t/tvn37VFZWplatWlVa3qpVq4r6kYa++T+h7JsAgodxr5zTmCfVPu75O+aRyVXRN8uFum8CCC5/xj5fx7RgjH3hvC9CJlePvlmO/WQgcjSUcU8K3P5IMMY9crkq+ma5UPdNNFzRoW4AqvfTs2rWrl2rAwcO6Iwzzqhzrfvvv19nn322Jk+eXGm5bduSygdW09566y0lJCSotLRUJSUlGj16tB599NF61bJtu8Y2rl27VpdddpnS09Mrlh07Q+jYl9P/9Evo161bpwsuuEAtW7asWPbdd9+pS5cuNbbhp6/v1KaGjr75P27omwACj3GvXG3ZV9u4Z2rMI5P/h75Zzi19E0Bw+DP2+TqmBWrsa2j7ImRyZfTNcm7omwCCI5zHPSk4+yPBHPfI5f+hb5ZzS99Ew8MVyy7Vpk0bHT58WPn5+fJ6vbr11lt19dVXKz09XaeddlrFWSOffvqpLr/8csdaZ511lkaMGKG777670vITTzxRlmVp48aNxts/dOhQrV27Vl9//bUKCwv12muvKTU1tV61Nm7cqE6dOlW7bu3atVW+YH716tVq3bq10tLSJFX9Evp169ZpwIABlZ6zZs2aar+oPiUlRVFRUVXO7tq7d2+Vs8AiBX3zf0LZNwEET03jXqNGjdSnTx+ddNJJatasmfr06aOrrrrKsVY4j3tOY55U+7jn75hHJldF3ywX6r4JILic9ke+/vprjRo1Sn379tWQIUO0b9++Ss/1dUwL1NjXUPZFyOTq0TfLsZ8MRA5/jhGGetyTgrM/Eoxxj1yuir5ZLtR9Ew0XE8su1aZNG0nSjh07NGXKFO3atUuPPfaYvF6vfvjhB7Vu3VqS9MUXX6hHjx611vvzn/+sN998s9L3KiQnJ2vEiBF6/PHHVVBQUOU5eXl59W5/kyZN1KVLF3Xo0EExMTH1rvPBBx9o/fr1uuSSS6qsO3LkiL799luVlZVVLPN6vXr00Uc1duxYWZal/Px8bdmypeLMmoMHD2rr1q06+eSTK9WqbiCVpNjYWPXt21eLFy+utHzx4sX1uhqoIaBvlgt13wQQPDWNe82bN9fatWv10EMP6YorrtDatWv14osv1lovHMc9pzFPqn3cO3TokN9jHplcFX3THX0TQHDVNPYVFRXppptu0l//+ld99tlnuvTSS/XMM89Ueq6vY1qgxr6Gsi9CJlePvhn6vgkguPw5RhjqcU8K/P5IsMY9crkq+qY7+iYaLiaWXerY4Dd58mS9+uqrev/995WYmKhvv/220q0F1q9f79PkXc+ePXX11VdXuWXCE088obKyMvXr10+vvvqqNm3apI0bN2rOnDlVzj4JtKKiIu3evVvff/+9Vq9erfvuu0+jR4/W+eefr2uuuabK9uvWrVNUVJTmzZunFStW6JtvvtFll12mgoKCiqttjm3TvXv3Sj8ffwuHrVu36sCBAzUOgJMmTdIzzzyj5557Ths3btStt96qbdu26YYbbjD/SwgD9E339M3Dhw9r7dq1Wrt2rSQpJydHa9eu1bZt28z+AoAIV9O4d8wXX3xR8bfsC7ePe3Ud86Taxz0TY55EJv8UfdM9fZNMBoKnprHv9ddf15dffqnzzz9fffr00eOPP17tgThfx7RwHfvYTw4d+qY7+iaZDASPv8cIGffMjHsSufxT9E339E1yuYGy4Uper9eOi4uzMzMz7e3bt1cs/8c//mFPnDix4uezzjrL/uabb6o8f8yYMfbo0aMrLduyZYsdFxdn//SffefOnfZNN91kd+jQwY6NjbXbtGljX3jhhfaSJUsqtpk3b16V59Wkuteubf2YMWNsSbYkOzo62m7ZsqX9s5/9zH7uuefssrKyaus8+eSTdvfu3e2///3vdtu2be3GjRvbV1xxhb1v376KbR599FG7R48eFT/PmTPH7t69e6U6CxcutJOSkhzf0+OPP17x+znllFPs//73v47bN2T0Tff0zSVLllS07fjHmDFjav4lAKizmsa9Y8aMGWO///77NT4/nMa9+ox5tl37uGcqj22bTD4efdM9fZNMBoKnprFv6tSp9osvvuhTDV/GNF+2MznuVbeNm/dFbJtM/in6pjv6JpkMBI+/xwht29y4Z9vu2x8JZibbNrl8PPqme/omudwwWbb947eMIyxMmzZNe/bs0dy5c/XJJ5/onHPO0cGDB+XxBPbi8+nTpys7O1vZ2dkBfR2EL/omgEg1cuRI/eUvf/HpLg0mMO7BV/RNAJHkscce06pVq/T8889LKr8CpWfPngF9TcY9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7txZU6dONVEaABBJjp3x5fSog4ceekg//PCDLr74Yj388MOaOHGiDh8+rF/+8pd68MEHK7ZbtGiRsrKyVFZWpunTp+v2229Xbm6uhg0bpo0bzV1FEizkMgDAbz5m8q5du7Rjx46KR36+b3dI2bZtm7777jslJyfrrLPO8uk5v/rVrypunZ2enq6FCxfW++0FC5kMADDC4H5ypCKTAQBGkMlmJpb//e9/KykpqeLn5s2b69///reJ0gCASGL4+xzfffddHThwQC+99JImTJigBx98UJs2bZLH46l0ddT48eNlWZY2bNigadOmadasWXr//ffl9Xo1duxYw28y8MhlAIDffMzkfv36qV27dhUPX7+v6c4775QkXX311bVu27FjRw0cOFBTp07VnDlzdOmll2rv3r26+OKL9fe//73+7zEIyGQAgBF8x7LfyGQAgBFksplbYZeVlenw4cNKSCj/zrb8/HyVlJj9XjMAQATwRJc/nNbXQffu3assa926tRITE3X48GFJUmFhoXbs2KHMzEy1bdu2YruBAweqRYsWWrNmTZ1e0w3IZQCA33zM5BUrVigtLa1icWJiok/l33jjDVmWpT/96U+1bnvPPffonnvuqfj55ptv1tKlS3XmmWdqwoQJuuyyy3x6zVAgkwEARjjlch33kyMVmQwAMIJMNjOxfPPNN2vgwIG6/PLLJUmvvPKKbr31VhOlAQCRpLYzuwyc9bVt2zbl5eVVHARfsmSJJKlXr15Vtu3UqZNWrVqlvLy8Smc2ux25DADwm4+ZnJaWVunELF/885//1JEjR9SnTx+fJ6J/atCgQUpJSdGePXvq9fxgIZMBAEY45XKEXB3lLzIZAGAEmWxmYvn666/X6aefruzsbEnSiy++WO1VYgAAOLIsyXIIYOt/3+d4vMTERJ8PTA8ePFiSNGvWLEnlE82SlJqaWmXb5ORkSdKWLVvUp08fn+q7AbkMAPCbj5lcH8euUv79739f7xqSZNu2LD/aEQxkMgDACKdcdnkWugWZDAAwgkw2M7EsSUeOHFGLFi101VVXKTc3Vzt27KjzmesAgAjn4203+/XrV2nx4MGDK3YOnZx55pnasmWLLr30UmVlZVVa53Rg2hOGZ5uRywAAvxj+eopj8vPz9fnnn6tJkya66KKL6tk46cMPP9T+/fsr3YbbrchkAIDfuO2mEWQy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u9ZGfwAA8cxpyc2WTnBDErkMALCETA4amQwAsCYEmVxbWytjTJPbyJEj6/ebNm2aioqK6u/bsWOHjj/+eFuvLCzIZACANRwn21kKe+nSpRo6dKj69eundu3ayRgjj8ejpUuX2mgeABAvEhLrNqf70SJyGQAQNDLZCjIZAGCFUy6TyQEhkwEAVpDJdiaW//GPf9hoBgAQ71h20wpyGQAQNDLZCjIZAGAFy24GjUwGAFhBJtuZWO7Zs6eNZgAA8c7ySewdO3boZz/7mTZs2KDi4mIZYzR69GgtXry40b5PP/20/t//+38qLi6WVPe9Uc8884zGjBnTqud0A3IZABA0JpatIJMBAFZwEjtoZDIAwAoyOfDvWN67d6+uvfZa9e/fX9nZ2TrkkEM0adIk3Xbbbfriiy9C2cdmPfjgg+rdu7dSU1OVn5+v999/33H/d999V/n5+UpNTVWfPn20YMGCMPUUABCQA0uJOG2t8M0332jZsmXy+Xzq169fs/u9+uqrmjZtmnw+n+bMmaNZs2apqKhI48aN07p164J9VSFBLgMAQspyJscyMhkAEHJkckDIZABAyJHJgU8sn3/++frb3/6m6dOn6w9/+INmzpypt99+W88884wGDhyoKVOmaPv27aHsawPPP/+8rrzySt10001auXKlRo0apYkTJ2rLli1N7r9x40ZNmjRJo0aN0sqVK3XjjTfqiiuu0Isvvhi2PgMAWuDxfH/VV5Obp1XNjRgxQj6fTyUlJY7LXl1yySXyeDxau3atbr75Zt15551666235Pf7NWPGjCBfVGiQywCAkLKcybGMTAYAhJxjLpPJB5DJAICQI5MDXwr7jTfe0Icffqgjjjii/rabbrpJL7/8shITE3XbbbepoKBAH3zwgXr37h2KvjYwb948XXjhhbroooskSffee69ef/11PfTQQ5o7d26j/RcsWKAePXro3nvvlSQNGDBAy5cv11133aXTTz895P0FAATA8rKbXm/L+1dWVmrbtm0aMGCAunXrVn/7scceq06dOmnlypWtes5wIZcBACHFUtgBI5MBACHHspsBIZMBACFHJgf+ieXc3FxVVFQ0eV+PHj308MMP6/LLL9fMmTOtda451dXV+vTTTzV+/PgGt48fP14fffRRk49ZsmRJo/0nTJig5cuXq6ampsnHVFVVqaysrMEGAAghb2LLm2XvvPOOJGnw4MGN7uvdu7dqampUUlJi/XmDRS6TywAQUhHI5GhFJpPJABByZHJAyGQyGQBCjkwOfGJ55syZuuCCC7R69epm9zn33HP19ttvW+mYkz179sjn8yk3N7fB7bm5udq1a1eTj9m1a1eT+9fW1mrPnj1NPmbu3LnKzMys37p3727nBQAAmuYJYJO0c+dObdu2rX4L5sDpwBJUOTk5je7r2LGjJGnTpk1tbj9UyGVyGQBCKsBMBplMJgNAGJDJASGTyWQACDkyuXUTy6effrry8/N14oknasGCBfL7/fL8YM3wZ599VtnZ2SHpaFM8P1qv3BjT6LaW9m/q9gNuuOEGlZaW1m9bt24NsscNbfw602p7/9icYK0tn7H7F9Az3WetreFda621JUn9jy222l5Zx1Sr7UW7pCp7//aSlGy5vao0e1cRefzGWluSVNk+2Vpb+9snWWsrlIwxLW6SVFBQoO7du9dvp5xyStDP7ZQfgSypHW7kst1cXlJaaK0tSfKOOMFaW2b7t9bakqRDHyqw2t4Xx99rra3LB3ax1pYkPbfB3nujiNnkt9rctzvbWWursNDue55OnSqttVW+116GStKhA4usthcNAs1kkMm2M/nDXXZzL+l2u59K69TP3rjcMc/use1PBqRZa+uVB+z2rfKppj+dF022b0232l7X7uXW2vr7Urvnl/Kz7Y7xJdX22urTxd77BUkq2hMd53DI5MCQyfbPX//+dXu/q8+L7WZLjb/KWlvzRtj9lGG79KY/Yd5WeaP3W2trV0+7mREJWXvs/T4kqXKz3fN+pSPtvmewKb3U4nF3pt0MLc9KsdpeqJDJrfiOZUm6/fbbdeqpp+quu+7SNddco/3792vQoEHKyclRWVmZKisr9cQTT4Soq9/Lzs5WQkJCo6u7du/e3eiqrgM6d+7c5P6JiYnq1KlTk49JSUlRSkrjYj57eInapQf/rnh47r6g2/ihnh16WWvL+/Vya21Jkul7lLW29lRu0c962Xvj8MfVqRo5oemr/trinfc6q7CrnfDwVbZugr/mmGSZtOBPpJaV2BvEszpWWr9QJ0X2Buh9FUna17qhsFn+LXaDI7HWb23iO72kSuWZ9iZYaqrtTnQc4JdPfjV/8cCB+5YuXaq8vLz62zMyMtr8nD169JAkfftt45OYRUVFDfZxG3K5zsGpNeoQ5N9Kr8WfyGZVewYcIk/3vJZ3DMD2Gz6QtMFKW5L05t/tnoybseQomU9et9NYty66LMtOU5K0OjVdW5teCa/Vyve17iRI52P2K6md+y5VPbm/vX//t7cmqKra3gF4x3Z+tc+107/Tels8gy3pznezdLDF9+6719qb/DFVoTlwDTSTUYdMrnN0TrYyMoK7gCVpx5fSdnsX/+6/91VrbUnSG096JEvvGvx+SbJ3kr3U4gn76S/Z/e5RT9fO0j6L70H2te6cQMFhZUpND+73s2ZzqspK7V241K59rXLz7GTLcT3sTmBkJUvju9rLF5sTy1+UeNQrz14t7SpJ0r4KOxdiV1tqpylOuUwmN0Qm1/nzaXvUISP495zZlUlq5RRCswpTffIbe/WanWLvXM2Kwo361UBrzenfW1OlDHuD38uLcyQ7pxiUu7ZUFR3snfutqW7dv2mXM/cruX1wx8pfrTtIyRbPD1dXJahyv71jW2+C0XcFdibw26+zew7nu+4drLXVe8131tqSpHZ77R7HhwqZ3IZUOOqoo/T888+rurpaK1as0JdffqmysjJlZ2fr+OOPb3IpUduSk5OVn5+vN998U6eeemr97W+++aamTJnS5GOGDx+ul19+ucFtb7zxhoYNG6akpOj4JB8AxDpj/DKm+RN1B+7Ly8tTt27drDzn2LFjJUlr1qxpdN/GjRuVlJSkrKwsK88VCuQyACAUAs1kfI9MBgCEilMuk8mNkckAgFAhk4O43Cg5OVnHHHOMjjnmGJv9CdjVV1+t8847T8OGDdPw4cP15z//WVu2bNGll14qqW4ZkO3bt+vJJ5+UJF166aWaP3++rr76al188cVasmSJHnvsMT377LMR6T8AoDHz3/+c7rctNTVV3bt317p167Rjxw516VK3FO+SJUtUWFioo48+2vpzhgK5DACwKRKZHCvIZACAbU65TCY3j0wGANhGJttaxyICpk6dqsLCQt16663auXOnBg0apFdffVU9e/aUJO3cuVNbtmyp379379569dVXddVVV+mBBx5Qly5ddN999+n000+P1EsAAPyI3/gdl0Xyt+Gqr1tvvVWlpaUqLq5bUnHDhg265pprJNUdxGVnZ2vBggU66aSTdNhhh+nqq69WRUWF/vSnP8nr9WrhwoVtezFxhlwGgNgSikxGeJDJABB7nHKZTHYvMhkAYg+Z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HQUAtEpirb/FDe5DLgNA7LGdybfccouKiop0+eWX6+mnn9bVV1+tL774Qh07dtSCBQtUXV0dolcSX8hkAIhNHCdHHzIZAGITx8lROrFcXV2tM888U7/61a8Cfsydd96pefPmaf78+Vq2bJk6d+6sE044QXv37g1hTwEArcFS2NGJXAaA2GM7k5999llJ0h//+McGt59zzjny+/1auHChtb7HMzIZAGITx8nRh0wGgNjEcXKULoV9yy23SJKeeOKJgPY3xujee+/VTTfdpNNOO02S9Je//EW5ubl65plndMkllzT5uKqqKlVVVdX/XFpaKkmq2Ls/iN5/b2+t3asNyvbXWGtrb429tiRpn9/el5bvtds1pZXZ+fc8oKLc3pWi+8rr+mZaWELhwP2VFXZey/5aK81IkvbV2D3A2Zti99+ryuex1lbFXruvtXb/PottJVhrS5JqK+v61lJttlZN9X7J4U+optbuvz/siHQuV1kY+/Yl2r3Kf2+qvbDat9fioCxp/z57454k1e5PttZWjbH7Wmur7L3Vra0KbNw7cL+tMbx2v923675Ke7VZu7+q5Z1a057F5nyV9t57SlJNtb1MlqSamkqLbQX2frHV7QaYyTt37mxwe0ZGhjIyMhrtv337drVv316pqakNbv/pT3+q+fPn6/333292/EfgIp3J1TYyudxuLScl2W2vrMzi8d5eu+cE9ra317fySrt922f5WKm1x8o2ctlXaflToT577RmLx7WSVJtg98SL32+vf7WVdl+rsfjvEOj7xbZwymWOk90p0pm819L56ySvvffVSRaPRSRpb42948e0crvHNvvK7B4/7C+393deY7drqtnfumNlG3MrFZaPk/fvs/v5y5p99rLFb/l8VW2Vvb/pWovzUZLkt/tnGLJcDiSTY/442USxhQsXmszMzBb327Bhg5FkVqxY0eD2U045xZx//vnNPu7mm282ktjYIr5t3brVsca3bt0a8T6yxefWUm0Gqri42Hi93oCe0+v1muLiYivPC7vIZbZ42MhkNrdukcjkprbRo0c32W5SUpLp1KlTo9tXrlxpJJnx48db6T/qkMls8bKRy2xu3GxlsjGB5zLHye5FJrPFy0Yms7l1c8OxcqwdJ0flJ5Zba9euXZKk3NzcBrfn5uZq8+bNzT7uhhtu0NVXX13/s9/vV1FRkTp16iSPx+4VkpJUVlam7t27a+vWrU1eveB20dx/t/bdGKO9e/eqS5cujvt16dJFW7duVYcOHajNH4nmvkvu7X+gtRmorKwsFRYWqry8vMV909PTA/5+IrgTuRx69N0+MtmOaO6/W/seyUz2+/3yehte3e/0u3H6mwjF3wtaRiaHHn0PDXI5ePTdPtuZLAWeyxwnRz8yOfToe2iQycGj76ERqWPleDhOds3E8pw5c+qXCGnOsmXLNGzYsDY/x4//EYwxjv8wKSkpSklJaXBbON6kNfex+GgRzf13Y98zMzNb3Mfr9apbt24h74sbfz+Biua+S+7sfyC12RpZWVkcCLsIufw9N/79BYq+20Um2xPN/Xdj36Mhk1NSUrR/f+Nl7w6cKM3Ozrb6fLGETP6eG//+AkXf7SOX7aDvdtnOZIljZTchk7/nxr+/QNF3+8hkO+i7fW4/Vo7W42TXTCz/+te/1llnneW4T69evdrUdufOnSXVXfmVl5dXf/vu3bsbXQUGAADIZQCAXd26ddMXX3yhysrKBt8f9dZbb0mSRo0aFamuuR6ZDACAO5DJAACbovU42TUTy9nZ2SGbfe/du7c6d+6sN998U0OHDpUkVVdX691339Udd9wRkucEACCakcsAAJvOPvts3XzzzZo9e7b+9Kc/1d/+7LPPyuv16he/+EUEe+duZDIAAO5AJgMAbIrW42Rvy7u4z5YtW7Rq1Spt2bJFPp9Pq1at0qpVqxqsbd6/f38tWrRIUt0SIldeeaVuv/12LVq0SP/5z380Y8YMtWvXTuecc06kXkYjKSkpuvnmmxstXxItorn/0dz3cIjm3080912K/v4jPpDL7kPfY1e0/36iuf/R3Hc3+O1vf6uOHTvq/vvv1/nnn6958+ZpwIAB2rNnjy655BIlJydHuosxgUx2H/oe26L5d0TfgdAik92Hvse2aP4d0ff4Fa3HyR5jjIl0J1prxowZ+stf/tLo9nfeeUdjxoyRVBfGCxcu1IwZMyTVfR/FLbfcoocffljFxcU6+uij9cADD2jQoEFh7DkAALGHXAYABGLXrl068cQTtWbNGvn9fqWmpuriiy/WfffdF+muxQwyGQAAdyCTAQCBiMbj5KicWAYAAAAAAAAAAAAAhE9ULoUNAAAAAAAAAAAAAAgfJpYBAAAAAAAAAAAAAI6YWAYAAAAAAAAAAAAAOGJiGQAAAAAAAAAAAADgiIllF6itrdX//M//qHfv3kpLS1OfPn106623yu/3R7prjbz33nuaPHmyunTpIo/Ho5deeqnRPuvWrdMpp5yizMxMdejQQcccc4y2bNkS/s7+yEMPPaTBgwcrIyNDGRkZGj58uP79739LkmpqajR79mwdfvjhat++vbp06aLzzz9fO3bsiHCvI4vaDA9qE3CPaBr3pOgd+xj3Wi+aajNa61KiNgE3iaZxT4resY9xr/WiqTajtS4lahNwG8a+8GDsa51oqkspemuTusSPMbHsAnfccYcWLFig+fPna926dbrzzjv1xz/+Uffff3+ku9ZIRUWFhgwZovnz5zd5/4YNGzRy5Ej1799fixcv1urVq/Wb3/xGqampYe5pY926ddMf/vAHLV++XMuXL9fxxx+vKVOmaO3atdq3b59WrFih3/zmN1qxYoX+/ve/68svv9Qpp5wS6W5HFLUZHtQm4B7RNO5J0Tv2Me61XjTVZrTWpURtAm4STeOeFL1jH+Ne60VTbUZrXUrUJuA2jH3hwdjXOtFUl1L01iZ1iUYMIu6kk04yF1xwQYPbTjvtNDNt2rQI9SgwksyiRYsa3DZ16lTX9/uHDjroIPPoo482ed/SpUuNJLN58+Yw98o9qM3IoTaByIjWcc+Y6B/7GPecRWttRntdGkNtApESreOeMdE/9jHuOYvW2oz2ujSG2gQiibEvchj7mhetdWlM9NcmdRnf+MSyC4wcOVJvvfWWvvzyS0nS6tWr9cEHH2jSpEkR7lnr+P1+vfLKK+rXr58mTJignJwcHX300U0u6RBpPp9Pzz33nCoqKjR8+PAm9yktLZXH41FWVlZ4O+ci1Gb4UZtAZMXKuCdFz9jHuBeYWKnNaKlLidoEIi1Wxj0pesY+xr3AxEptRktdStQm4AaMfeHH2NeyWKlLKXpqk7qEJD6x7AZ+v99cf/31xuPxmMTEROPxeMztt98e6W61SD+6qmbnzp1GkmnXrp2ZN2+eWblypZk7d67xeDxm8eLFkevoD3z22Wemffv2JiEhwWRmZppXXnmlyf32799v8vPzzbnnnhvmHroLtRk+1CbgDtE67hkTfWMf417rRGttRltdGkNtAm4RreOeMdE39jHutU601ma01aUx1CbgJox94cPYF7horUtjoq82qUv8EBPLLvDss8+abt26mWeffdZ89tln5sknnzQdO3Y0TzzxRKS75ujHg9/27duNJHP22Wc32G/y5MnmrLPOCnPvmlZVVWW++uors2zZMnP99deb7Oxss3bt2gb7VFdXmylTppihQ4ea0tLSCPXUHajN8KE2AXeI1nHPmOgb+xj3WidaazPa6tIYahNwi2gd94yJvrGPca91orU2o60ujaE2ATdh7Asfxr7ARWtdGhN9tUld4oeYWHaBbt26mfnz5ze47Xe/+5059NBDI9SjwPx48KuqqjKJiYnmd7/7XYP9rrvuOjNixIgw9y4w48aNM7/85S/rf66urjY/+9nPzODBg82ePXsi2DN3oDYjh9oEIiNaxz1jon/sY9xzFq21Ge11aQy1CURKtI57xkT/2Me45yxaazPa69IYahOIJMa+yGHsa1601qUx0V+b1GV8SwzdItsI1L59++T1Nvy664SEBPn9/gj1qG2Sk5N11FFHaf369Q1u//LLL9WzZ88I9cqZMUZVVVWSpJqaGv385z/XV199pXfeeUedOnWKcO8ij9qMHGoTiIxYGfek6Bv7GPecxUptRltdStQmECmxMu5J0Tf2Me45i5XajLa6lKhNIJIY+yKHsa95sVKXUvTVJnUZ35hYdoHJkyfrtttuU48ePTRw4ECtXLlS8+bN0wUXXBDprjVSXl6ur7/+uv7njRs3atWqVerYsaN69OihWbNmaerUqTruuOM0duxYvfbaa3r55Ze1ePHiyHX6v2688UZNnDhR3bt31969e/Xcc89p8eLFeu2111RbW6szzjhDK1as0L/+9S/5fD7t2rVLktSxY0clJydHuPeRQW2GB7UJuEc0jXtS9I59jHutF021Ga11KVGbgJtE07gnRe/Yx7jXetFUm9FalxK1CbgNY194MPa1TjTVpRS9tUldopHIfVgaB5SVlZmZM2eaHj16mNTUVNOnTx9z0003maqqqkh3rZF33nnHSGq0TZ8+vX6fxx57zPTt29ekpqaaIUOGmJdeeilyHf6BCy64wPTs2dMkJyebgw8+2IwbN8688cYbxhhjNm7c2OTrkmTeeeedyHY8gqjN8KA2AfeIpnHPmOgd+xj3Wi+aajNa69IYahNwk2ga94yJ3rGPca/1oqk2o7UujaE2Abdh7AsPxr7Wiaa6NCZ6a5O6xI95jDEm8GloAAAAAAAAAAAAAEC88ba8CwAAAAAA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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt_maps(maps_daemon, 'using daemon flux')" - ] - }, - { - "cell_type": "markdown", - "id": "6d0ceecb", - "metadata": {}, - "source": [ - "now look at combined maps" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "9882f371", - "metadata": {}, - "outputs": [], - "source": [ - "map_tot_daemon = model_daemon.get_outputs(return_sum=True)\n", - "map_tot_honda = model_honda.get_outputs(return_sum=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "dc7ebb45", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.02, 'Honda flux')" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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rXb8sC1btkjxkpOTK6wzZ86cSttgb28vnjp1qspVkVNTU8XWrVtXGqN169bihQsXarSycnVq8rOoyWdT1Tm7ublV2d5bt26J9vb2IgCxbdu2Yk5OToXvER4eLsV86aWX6nC2RI0Le4CISGtt27ZFYmIi1q9fj4EDB8LOzg4mJiZwdHTEiBEjsG3bNhw9elSRu78etWbNGvzyyy8YPnw4bG1tYW5ujg4dOmDOnDmIj49Hr169qjzezc0NcXFxeOONN+Dh4QEzMzNYW1uje/fuWLx4MRISEuDl5aX4edTGmjVr8O2332LAgAGwsrKChYUFOnbsiLfeegvx8fGVtlcURfy///f/kJGRAZVKhW3btkl3fj1q0qRJCA4OBgB8/vnn2Ldvn2LnQ1QfBFFsYotYEBEREVWDPUBERERkcJgAERERkcFhAkREREQGhwkQERERGRwmQERERGRwmAARERGRwWECRERERAaHCRAREREZHCZAREREZHCYABEREZHBYQJEREREBocJEBERERkcJkBERERkcJgAERERkcFhAkQNbv78+Rg7dmxDN6Nab775JkaOHFllnVmzZuG5556rpxaRIeL1QqQbTIAIBw8ehCAIVW4HDhyoNs68efPw5JNP1vr9ExIS4O3tXevjpk2bJrXPxMQE7dq1w4IFC5Cfny+r83CbHj3G0dERw4YNw1dffQW1Wl1tO7t3715lnbCwMHzxxRe1PpdyGzZsgLu7O8zNzeHj44Njx47VORYpg9dL47hejh49irFjx8LFxQWCIOCnn36qUxwyXEyACAMHDkRaWpq02dnZ4e2335aVDRs2rNo4p06dgq+vb63fPzExsU5f6AAwYsQIpKWl4e+//8aHH36IDRs2YMGCBTU6JiUlBQcOHEBAQADmzp2LMWPGoKSkRKt22traonnz5nU5FYSHh2PevHl45513EB8fj/79+2PkyJFITU2tUzxSBq+XxnG95Ofno3v37li/fn2djieCSPSQGzduiADEiIgIjX3nzp0TR44cKbZo0UJ0dHQUQ0JCxMLCQrGoqEg0MTERAUibr6+vdNySJUvELl26iM2aNRMdHBzEl19+WSwqKhJFURRTU1NFAOLVq1dr3dapU6eK48ePl5XNmDFDdHJyqrRORceIoigePnxYBCB+8cUXFb5XWlqaCEDcsWOH2L9/f9HCwkL08fER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+EfncR82p6MtAFvF4qsP7wOSFQsPGBtDrWB41aAxcDZtq1j86Dvp8G1Volh8ANh8thkcnQsUi1+UX7vYGa4tYGyq+180/zxmqfOYD+vknaVo/P5tihSN391O2fgAUKwW0NtBufiJmSboNFC5RPdAQgugn5Fi8VFgBHylXHiqnF72AJmamsLHxweRkZGy8sjISPTt27fKY3///XdcvXoV06dPr/Z9RFFEQkICnJ2dtWovERFRQ+NdYHJ62QMEACEhIQgODkavXr3g5+eHzz//HKmpqXj55ZcBlA1N3bx5E998843suM2bN6N3797o0qWLRswlS5agT58+ePzxx5Gbm4u1a9ciISEBn376ab2cExERkVL4MFQ5vU2AJk+ejMzMTCxduhRpaWno0qULIiIipLu60tLSNNYEysnJwe7du7FmzZoKY2ZnZ+Oll15Ceno6rK2t0aNHDxw9ehS+vr6Knw8RERHVH71NgABg9uzZmD17doX7tm7dqlFmbW2NgoLK5yasWrUKq1at0lXziIiIGg1tV3NuaitB63UCRERERDXDh6HKNbHTISIiIqoee4CIiIgMgLZr+XAdICIiItI7HAKTYwJERERkAMpug697L05Tuw2+iZ0OERERUfXYA0RERGQAOAQmxwSIiIjIAAjQch0gNK1J0E0snyMiIiKqHnuAiIiIDACHwOSYABERERkArgMk18TyOSIiIqLqsQeIiIjIAAgq7dby4RAYERER6R0Ogck1sXyOiIiIqHrsASIiIjIAvAtMromdDhEREVVEEEStt7rYsGEDHBwcoFKpIAgCTE1NMWTIEFmdHTt2wNbWFoIgQBAEuLi4IDo6usJ4EydOhJmZGQRBgImJCQICAlBQUFDrdrEHiIiIyACotJwEXZdjX331VWzYsAGtW7fGO++8g5YtWyIxMRHXr1+X6kRERCAoKAhWVlYIDQ1Ffn4+1q5diyFDhuD8+fPo1KmTVHfYsGGIioqCn58fJk2ahMjISERERMDHxwdJSUm1ahsTICIiItK506dPY8OGDejcuTPOnz9fab1Zs2ZBEARcuHABrq6uAIDx48ejX79+mDZtGk6cOAEAuHLlCqKiouDp6YmYmBgAwLx58xAYGIjIyEjs27cP48aNq3H7OARGRERkAMrvAtNmq4033ngDALBp06ZK6zx48AA3btyAp6enlPwAgL+/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10NN9XrhtcJrheqG6wARERGRweE6QERERGRwmAARERGRwWECRERERAaHCRAREREZHCZAREREZHCYABEREZHBYQJEREREBocJEBERERkcJkDUJGVmZsLBwQEpKSkN1oaJEydi5cqVDfb+RDXBa4UMFRMg0qkBAwZAEASN7fnnn6/XdoSFhWHs2LFo27atVJaeno65c+eiQ4cOMDc3h6OjI/r164eNGzeioKCgRnHHjh2LoUOHVrgvNjYWgiAgLi4OAPD+++9j2bJlyM3N1fp8qOnhtcJrhRpYQz+Lg5oOtVottmjRQvzPf/4jpqWlybZ79+7VWzsKCgpEGxsbMSYmRir766+/RCcnJ9HT01MMDw8XL168KJ49e1b84YcfxFGjRol79+6tUew9e/aIgiCIKSkpGvtmzJghent7y8p69uwpbtiwQbsToiaH1wqvFWp4TIBIZy5duiQCEE+ePNmg7di9e7dob28vKxs+fLjo6uoq5uXlVXiMWq2W/ffy5ctFd3d30dzcXOzWrZv4/fffi6IoisXFxaKjo6MYGhoqOz4/P19s0aKFuG7dOll5aGio2L9/f12cFjUhvFZ4rVDD4xAY6cyZM2dgbGyMbt26NWg7jh49il69ekmvMzMz8euvv+LVV19F8+bNKzxGEATpv999911s2bIFn332GS5cuIDXX38dQUFB+P3332FsbIwXXngBW7duhfjQc4S///57FBUVaQxf+Pr64uTJkygsLNTxWZI+47XCa4UaHhMg0pm4uDiUlpbCzs4OlpaW0jZz5sx6bUdKSgpcXFyk11evXoUoiujYsaOsnr29vdTGN998EwCQn5+PlStX4quvvsLw4cPRrl07TJs2DUFBQdi0aRMA4MUXX0RKSgqio6OlWF999RWefvpptGzZUvYejz32GAoLC5Genq7Q2ZI+4rXCa4UannFDN4CajjNnzuCZZ57BsmXLZOWPftGVlpbCyMhIsXbcv38f5ubmGuUP/+UKACdPnoRarcbzzz8v/dV58eJFPHjwAMOGDZPVLSoqQo8ePQAAnp6e6Nu3L7766isEBATgr7/+wrFjx/Drr79qvKeFhQUA1HjiKBkGXiu8VqjhsQeIdCY+Ph79+vVDhw4dZJudnR1SUlLQvXt3zJw5Ez169EBhYSG2bNkCX19fdOvWDe+//74U54svvkDXrl3RvXt3vPXWW1L58uXL0aVLF3Tt2hU7duyotB329va4e/eu9LpDhw4QBAF//vmnrF67du3QoUMH6YsXANRqNQDgl19+QUJCgrRdvHgRP/zwg1Rv+vTp2L17N3Jzc7Flyxa0adMGQ4YM0WhLVlYWAKBVq1Y1/RjJAPBa4bVCjUDDTkGipuKvv/4SAYjHjh2rcH9ycrJoZGQkJiYmiqIoihcuXBAnTpwolpSUiKWlpeKYMWPEmJgYMTExUezSpYuYnZ0tiqIoZmZmiqIoiqdOnRJ79uwp3r9/X8zMzBTbtWsn3rx5s8L3+vjjj8Xu3bvLygIDA8XHHnuswomdAwcOFOfOnSuKoijm5uaKZmZm4jfffFPl+d67d0+0tLQUP/vsM9HV1VVcsmRJhfW+/PJL0dXVtcpYZFh4rfBaocaBQ2CkE2fOnAEAODo6aozhOzg4AAA8PDykSZ+HDx9GbGwsfHx8AAB5eXn466+/kJWVhcmTJ8Pa2hoAYGtrCwA4fvw4JkyYAHNzc5ibm2PIkCE4deoUxo8fr9GW4cOHY9GiRbh79640pLBhwwb4+/ujV69eCA0NRbdu3aBSqXDq1Cn8+eefUjtatGiBBQsW4PXXX4darUa/fv2Qm5uLmJgYWFpaYurUqQAAS0tLTJ48GW+//TZycnIwbdq0Cj+XY8eOITAwsM6fKzU9vFamVfi58Fqh+sYEiHSifEEzDw8PWbmJiQnu3bsHAGjWrJlULooiXnrpJVl3PgCsXbu2Ru8niqLGPIVyXbt2Ra9evfDdd99h1qxZAID27dsjPj4eH330ERYtWoQbN27AzMwMXl5eWLBgAWbPni0d/8EHH8DBwQFhYWH4+++/YWNjg549e+Ltt9+Wvc/06dOxefNmBAYGonXr1hrtePDgAfbs2YNDhw7V6JzIMPBa4bVCjUTDdkCRoUhOThZ9fHyk1+fOnRO9vLzErKwsURRF8fr162JGRoZ47ty5Srv1fXx8xAcPHohZWVli+/btxVu3blX6fr/88ovYqVMnsbS0VMGzqtr69evFYcOGNdj7k37itUJUP9gDRA2iS5cuePPNNzFo0CCo1Wq0aNECu3btQpcuXTB37lz4+/vD2NgYI0eORFhYGHr16oVnnnkGPj4+EAQBS5YsgbOzc6XxR40ahStXruDmzZtwc3OrxzP7HxMTE6xbt65B3puaDl4rRMoQRPGhFaqIiIiIDABvgyciIiKDwwSIiIiIDA4TICIiIjI4TICIiIjI4DABIiIiIoPDBIiIiIgMDhMgIiIiMjhMgIiIiMjgMAEiIiIig8MEiIiIiAwOEyAiIiIyOEyAiIiIyOD8f9OBHC96AhfqAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "map_tot_honda.plot()\n", - "plt.suptitle('Honda flux', fontsize=20, y=1.02)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "c55c1b50", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.02, 'daemon flux')" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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05gAERkoCwsLvPzyywCAkydP4ssvv9QqU1BQgClTpiAvL6/MOK1btwYAXLx4EUeOHNE6np2djRdeeEFr4vPDunXrJt9qHxYWhjlz5pRb98TERGzevLncMmpyc3PDs88+CwDYu3cv1qxZo1UmLy8Pr7zyinzL/1tvvVWjdVRD3759ARQvQVDa53///n288sorFcbZuHEjtmzZAqA4ESpZAqBHjx746KOPAAARERFYsmSJnmpOpIJaXIOIiHT06KMwnn/+ebF7925x4sQJsXnzZvkRGOU9CuPYsWPyscaNG4vQ0FBx4MABcfToUbFixQrRunVr+dETZcUQQoibN28qnknWo0cPsWrVKhEVFSViY2NFeHi4+Prrr8WgQYOEiYmJGD16tFaMyiz2J0TlF/QrqcucOXO0jl2/fl3xKIxXXnlF7Nu3T8TExIiNGzeKzp07V/pRGBXV9+EFAqtLHwsh3rlzR9jY2AgAwtLSUsybN08cOXJEHD16VPzrX/8SLVu2FJaWlsLHx6fMhRATExPlGI8//rjWKtyPrgZ95syZareZSE1MgIgM3NmzZ4WLi4vicRcPby+//HKFvxjnzZtX5vkAxIwZMyqMIUTxL8eHk63ytpdfflnr/JpMgITQ78NQy1NXEiAhhPjpp5/kVbAf3SwtLcVPP/1U5krQhYWFok+fPgKAMDMzEzExMaW+x8PPA+vYsaPIycmpZquJ1MMhMCID1759e5w7dw6zZs1C69atYWFhAUdHR/Tv3x8//vhjqcM7j/rkk0/wxx9/ICAgAI0bN4a5uTnc3d0xatQo7Nu3D1999VWl6tKsWTMcPXoU27dvx/jx4+Hp6YmGDRvCzMwMTZo0Qa9evTBjxgwcOHCg3Lk3NcXHxwcXLlxAaGgoevToATs7O5ibm8PNzQ2jRo3Czp07sW3bNlhaWtZ2VfXmueeeQ1RUFJ599lk0adIE5ubm8PDwwIQJExATE1Pu3VtffPEFDh06BACYO3euvML1o1q2bImlS5cCAE6fPo0PPvhA/w0h0pEkBGepERERkXFhDxAREREZHSZAREREZHSYABEREZHRYQJERERERocJEBERERkdJkBERERkdJgAERERkdFhAkRERERGhwkQERERGR0mQERERGR0mAARERGR0WECREREREaHCRAREREZHSZAREREZHSYAFGtmzFjBoYPH17b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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "map_tot_daemon.plot()\n", - "plt.suptitle('daemon flux', fontsize=20, y=1.02)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f9753f7d", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# ratio daemon/honda\n", - "(map_tot_daemon/map_tot_honda).plot(cmap='coolwarm', clabel='daemonflux / Honda')" - ] - }, - { - "cell_type": "markdown", - "id": "72a536ab", - "metadata": {}, - "source": [ - "# check we get a change when pulling each of parameters by 1 sigma" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "1349e6d8", - "metadata": {}, - "outputs": [], - "source": [ - "def plot_modif_to_map(model):\n", - "\n", - " model.reset_free()\n", - " nominal = model.get_outputs(return_sum=True)\n", - " for i, p in enumerate(model.params.free):\n", - " if p.prior.kind == 'uniform': continue\n", - " # reset all free parameters to put them back to nominal values\n", - " model.reset_free()\n", - "\n", - " # shift one parameter\n", - " p.value = p.nominal_value + p.prior.stddev\n", - " sys = model.get_outputs(return_sum=True)\n", - "\n", - " ((nominal[0] - sys[0])/nominal[0]).plot(cmap='coolwarm', clabel=\"rel. difference\")\n", - " plt.suptitle(p.name+r'$+1\\sigma$', fontsize=20, y=1.02)\n", - " return" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "2cfeeb04", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ WARNING] /mnt/ceph1-npx/user/mliubarska/osc/pisa_osc/pisa/core/map.py:708: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`). Consider using `matplotlib.pyplot.close()`.\n", - " fig = plt.figure(**fig_kw)\n", - "\n" - ] - }, - { - "data": { - "image/png": "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cjKOHz+OPn366PCdaTidO3dGcnIywsLC4O3tjaZNm6Jp06Zo27YtZsyYgcTERHz++edP/DNLVBeCKBrQpltEREREVC8c6SMiIiIyAkz6iIiIiIwAkz4iIiIiI8AtW4ioUcjPz0dKSkq92rZv3x6mpqYGfX4iIn1j0kdEjcJvv/2G/v3716ttSkoKWrVqZdDnJyLSN07vEhERERkBbtlCREREZAQ40kdERERkBJj0ERERERkBJn1ERERERoBJHxEREZERYNJHREREZASY9NET99Zbb2HkyJFPuhs1Cg8Px7BhwzTWCQ4Oxvjx4xuoR2SM+Hkhovpi0kfYv38/BEHQePz44481xgkNDcXzzz9f5/MnJSXB19e3zu1effVVqX+mpqZo06YN3n77beTn56vUqdynx9s4Oztj8ODB+Pzzz6FUKmvsZ9euXTXWWbZsGTZs2FDna6mwZs0atG7dGubm5lAoFDh27Fi9Y5F+8PPSOD4vR48exciRI+Hm5gZBEPDtt9/WKw6RMWHSRwgICEB6erp0ODg44N1331UpGzx4cI1xfvvtN/To0aPO5z9//ny9fogBwNChQ5Geno6///4bS5YswZo1a/D222/Xqs3169fx448/on///pgzZw5GjBiB0tJSrfppb28PS0vL+lwKdu3ahdDQUERGRuLcuXPo168fhg0bhtTU1HrFI/3g56VxfF7y8/PRtWtXrF69ul7tiYySSFTJrVu3RADivn371F77448/xGHDhonW1tais7OzGBYWJhYVFYnFxcWiqampCEA6evToIbVbvHix6OPjIzZt2lR0cnISQ0JCxOLiYlEURTE1NVUEIF69erXOfZ08ebI4atQolbJp06aJLi4u1dapqo0oiuLhw4dFAOKGDRuqPFd6eroIQNy+fbvYr18/0cLCQlQoFGJSUpJUJyUlRQQgXr9+XRRFUbxy5YoIQPzf//4nDhgwQLSwsBDbtWsnnjx5sspz9OjRQwwJCVEp8/b2FufPn6/pbaAniJ+XJ/d5qQyAuGfPnhrrERk7jvSRinPnzgEAFAqFWnnv3r3RrVs3nD17Frt27cKOHTsQFRUFExMTHD9+HED5lE56ejoOHDgAABBFEWVlZYiLi8Off/6JzZs3Y/fu3fjss8+k+tbW1mjTpo1O+m9hYYGSkpI6txswYAC6du2Kb775psrXK96X6Oho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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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mRX+YpoxYwbGjBmDzp07o0ePHvjss8+QkpKC0NBQ438IZDCeL7V7vty/fx+XL1+WXicnJyMxMREuLi5o1qyZET8BorqNI3IkOX36NNzc3NC0aVONcicnJ3z33Xc4cuQI/P39pQu5N23aJNVZsGABtm3bhqZNm+KDDz4AAPzrX//CuHHjMGbMGDz55JNIS0vD8OHDpf+Yz5w5Az8/PyiVSinOxo0bZb8mbM+ePfD09ETz5s0xaNAgHDx4EJ988gm+++47WFhYaNU/c+YMWrVqhXnz5uHFF19EQEAALC0tcfToUTg4OJR7LKWvbWxspDinT5+Gs7MzmjdvXm6/RowYgaioKHzwwQfo2LEjDh06hN27d0t39VHdwvOlds+X+Ph4BAQESKN4M2bMQEBAAObOnWvkT4CobhNEURRruxNEpebNm4e4uDjExcXVdleI6jyeL0TEqVWqU/bu3Yvly5fXdjeITALPFyLiiBwRERGRieI1ckREREQmiokcERERkYliIkdERERkopjIEREREZkoJnJEREREJoqJHBEREZGJYiJHREREZKKYyBERERGZKCZyRERERCaKiRwRERGRiWIiR0RERGSimMgRERERmSiTTeQOHTqEoUOHokmTJhAEAd9++22lbX799VcEBgbC2toaLVu2xOrVq7Xq7NixA23atIFSqUSbNm2wc+dOGXpPREREZDiTTeTy8vLQoUMHrFixokr1k5OT8cwzz6B37944ffo03nvvPUyZMgU7duyQ6hw7dgwjRozAmDFjcObMGYwZMwbDhw/H77//LtdhEBEREelNEEVRrO1OGEoQBOzcuRPPPfdchXXCwsKwa9cunD9/XioLDQ3FmTNncOzYMQDAiBEjkJOTg59++kmqM2jQIDRs2BCxsbGy9Z+IiIhIHw1quwM15dixYwgODtYoGzhwINatW4eHDx/C0tISx44dw/Tp07XqREVFVRhXpVJBpVJJr9VqNe7du4dGjRpBEASjHgORqRBFEbm5uWjSpAkUiooH/tVqNW7cuAEHBweeL2SWqnquGCorKwv37983OI69vT2cnZ0N7xAZjdkkchkZGXB3d9coc3d3R1FREe7cuQNPT88K62RkZFQYNzIyEvPnz5elz0Sm7vr16/Dy8qrw/Rs3bsDb27sGe0RUN1V2rhgiKysLLRu6IhPFBsdSKBS4e/cuk7k6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5cvllvv7++PKlStV2ld4eDjCw8Or0z0AQFxcXLXb7N27F5s3b0ZGRobW8ia//PJLteMBTOSIiIiIZDd27Fhs3rwZCoUCVlZWBt2pWhZvdiAiIjIDxlpHjvTz5ZdfYtCgQSguLkZ+fj4ePHigsemLI3JERERmwJSukauPiouLte7ENQajfVcyMjLw/fff44cffsDNmzeNFZaIiIjI5D3++OP47LPPjB7XKCNyX375JebOnYv+/ftDrVZjxowZ+OCDDzBy5EhjhCciIiJDGfrge06tGqRFixbYunUrTpw4gdatW2ssowIAO3bs0CuuURK5xYsX4+TJk2jYsCEAIDMzE0FBQUzkiIiI6goDp1Zr8q7V+uiXX36BhYUFrl27Jj3myxiMksip1WrY29tLr+3t7bVuqyUiIqLaY+jTGWrqyQ711cOHD2WJa5RE7tVXX0XPnj3x4osvAih5DMWYMWOMEZqIiIio3rh//z4OHz4sPaPVUEZJ5MLCwtC/f38cOXIEALBq1SoEBgYaIzQREREZAe9arV137txBz549cenSJQDAwYMHERQUhA4dOsDT0xN79uzRK65RvivvvfceHnvsMUydOhVTp05Fy5YtERERYYzQREREZAwC/rnhQa+ttg/AtPXv3x9paWn49NNPNcqHDBmCQ4cO6R3XKIncTz/9BGdnZ+l1w4YN8dNPPxkjNBEREZHJO3v2LJYvX4533nlHo7xv377Iz8/XO65RplaLi4tx//596YaHnJwc2S7qIyIiouoToYBowPiNIW2pJFfy9fXVKr97965BcY2SyE2ePBm9evXCiBEjAADbtm3D9OnTjRGaiIiIjMDQx2zxEV2GcXJywooVKxAUFAQAUChKEuMFCxagUaNGesc1SiI3fvx4dO/eHXFxcQBKFghu27atMUITERERmbzFixcjNDRUyo+mTp2KlJQU3Lt3D5s3b9Y7rtHGSR88eIBGjRph8uTJ8PT0RGpqqrFCExERkYFK71o1ZCP9hYSE4JtvvkFBQQGUSiXOnTsHR0dHbN++Ha+++qrecY0yIjdv3jycOnUKFy5cwOjRo5Gfn4+RI0dKy5EQERFR7eKCwLXnwYMH6NChA9asWYMrV64YNbZR0utvv/0W3333Hezs7AAATZs2RW5urjFCExEREZk0W1tbXL58WZbYRknklEolAED4/wshs7KypK+J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EEFBQWjZsiUuXLiAL774Avn5+Rg3bpzOde1K5eXlITAwUKs8MDCw3KnkqtIrkfvwww8hCALGjh2LoqIiACUPhn377bfxv//9T+/OEBERESUlJWHQoEHYsmULNm/eDGtra0yePBmffPKJRj21Wg1A8/oyR0dHxMfHY9iwYVi1ahVEUYS9vT0WL16sdefotGnTUFBQgIULFyIsLAyCIKBFixbYtWuXxk0c7du3x9dff42zZ89CFEUIggAXFxdERERg9uzZVTomGxsbTJo0CU8++aQ0bZuTk4NJkybBxsZGn48JgJ6JnJWVFZYvX47IyEhcuXIFoijC19cXtra2eneEiIiI5GMqT3YAStaqTUxMrLTe5cuXyy339/fHlStXqrSv8PBwhIeH66yzYcOGShcirsynn36KcePGwcXFRUrksrKyAEBjGri69ErkIiMj4e7ujjfffBPt2rWTytevX4/bt29rzWsTERFR7RJh2PSofvdUUqk33ngDQ4cOxbRp03D+/HmIogh/f398+OGHcHNz0zuuXolcTEwMvvzyS63ytm3bYuTIkUzkiIiIiB7h6uqKL774wqgx9UrkMjIyNBYDLNW4ceNyH2lBREREtcuUplap6vRafsTb2xu//fabVvlvv/1W7vPNiIiIqHaV3rVqyEZ1j14jcqVPcHj48CH69u0LoGShvlmzZhm0qB0RERERVZ1eidysWbNw7949vPPOO9IietbW1ggLC6vybbhERERUczi1Wj/plcgJgoDFixfj/fffx/nz52FjY4PHH38cSqXS2P0jIiIiIxABqA1sT3WPXolcKXt7e3Tp0sVYfSEiIiKZcESubnrsscdw7949ZGZm6tXeoESOiIiIiPTn7u4OhUKve08BMJEjIiIyC6byrFVzc/ToUYPaM5EjIiIyA5xarZ+YyBERERHJIDAwsMp1ExIS9NoHEzkiIiIzwKnVmvf333/Lvg8mckRERGZALZZshrSn6tH3TtTq0P82CSIiIiKqlgMHDmDhwoW4d+8eAECtNmR1P47IERERmQVOrdauS5cuoVu3btIoXa9evRAUFAQ/Pz84OjoiPj5er7gckSMiIjIDpXetGrKR/gYNGgSFQoETJ05olL/xxhs4e/as3nE5IkdEREQks6tXryI2NlbriVi9evWCSqXSOy4TOSIiIjMgiiWbIe1Jf2q1Gg0bNtQq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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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aIGjR49i79694tZgKSkpGmvK1a9fH3v37kV0dDRatGiB//73v/jyyy81nhZp3749tm7dig0bNqB58+bYuHEjtm3bhrZt21bYeREREUmBy49UvKIPO0yePLnyH3Yo1K9fP7z22msYO3YsMjIy0LZtW1haWiItLQ1LlizBuHHjjN3PYr377rtae5YVKu6hi86dOyMuTvf9U2+88QbeeOMNY3SPiIiIzFiVfNgBKMgwly5dCgDYvn073NzccPbsWezYsQOzZ8+usESOiIiIyoZTqxWvyj7s8PjxY9jZ2QEoeBjgtddeg1wuR7t27XDz5k29OkJERETSYSJX8arsww4+Pj748ccf8eqrr+LAgQPiU553796Fvb29UTtIREREZMqkfNhBr0Ru9uzZGDx4MN5//328+OKLCA4OBlAwOhcYGGjUDhIREZHhuCBwxbt9+zY8PT0BAK+//rq4k1RxCuuVl16J3BtvvIGOHTsiJSUFAQEBYvmLL76osa4bERERVQ2cWq14Xl5euHDhAvz8/Erd9alwt6ny0nsdOXd3d7i7u2uUtWnTRt9wRERERNVKREQEGjZsKP5dCnonchkZGVi/fj0uXboEmUyGJk2aYOTIkXBwcDBm/4iIiMgIOCJX8SZNmlTs341Jr0QuNjYWPXv2hLW1Ndq0aQNBELB06VIsWLAABw8eRMuWLY3dTyIiIjIAE7mKt3379jLX1XcNW70Suffffx99+/bF2rVrUaNGQYi8vDyMGjUKkydPxtGjR/XqDBEREUlDgIEPOzCRK7c333yzzHUr9B652NhYjSQOAGrUqIFp06ahVatWenWEiIiIqDopulf7L7/8gs8//xz9+/cXHwzdtWsXfvjhB0yZMkXvz9ArkbO3t0dSUhJ8fX01ym/duiUuFExERERVhxoyqA0YVTOkrbnq0KGD+PeePXvio48+wieffCKWvfHGG2jcuDEWLlyoc9cHXeT6NBowYABGjhyJbdu24datW7h9+za2bt2KUaNGYdCgQXp1hIiIiKRTeI+cIQfpLzs7G0FBQVrlQUFBePLkid5x9RqR+/zzzyGTyTBs2DDk5eUBKNgYdty4cfjss8/07gwRERFRdWRtbY333nsPHTt2hKOjIwAgKysL7733HqytrfWOq1ciZ2VlhWXLliE8PBzXr1+HIAjw8fFBzZo19e4IERERSYc7O1Su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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAn0AAAH3CAYAAADOsOnuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACGS0lEQVR4nO3dd1gU1/oH8O8u0quANEEsqChYEBuWiA1LNCbXxJaoiZUUY4lXNCZGE5UYE4VoVDRGjf1GY7sxKhqxxIqKRiyxoCiCBenSd35/8GMu68ICuzvAZr+f55lHdvacd8/sMuzrOXPOyARBEEBERERE/2jy6m4AEREREUmPSR8RERGRAWDSR0RERGQAmPQRERERGQAmfUREREQGgEkfERERkQFg0kdERERkAJj0ERERERkAJn1EREREBoBJHxEREZEBYNJHREREZACY9FGNsn79eshkMshkMty7d6+6m0MGir+HRPRPxKSPiKiSoqKixKRw7ty5ass+fvwYvr6+Yvn3338fgiBo3YYnT57gv//9L+bMmYN+/frB0dFRfI133323wnGK65S3BQYGqo2Tl5eHtWvXom/fvnB1dYWpqSmsrKzQtGlTjBkzBmfOnKnU8SkUCuzevRvvv/8+WrVqBWdnZ5iYmMDGxgYNGzbEoEGD8PXXX+Pvv/+uVFxd09XnQFQValV3A4iIqsL69evx3nvvAQDi4uJQv359yV8zMTERPXr0wI0bNwAAkydPRlhYmE5iOzs76ySOLjx48ACvvvoq/vrrL6X9eXl5+Pvvv/H3339j3bp1mDp1Kr777jvIZDK18fbv349PPvlEfN9Kys/PR0ZGBuLi4rB3717MmjUL3bp1w8KFC9GpUyedHldF1KTPgag8TPqIiF7y7rvvat1L8/DhQ/To0QO3bt0CAEyfPh2LFy/WQetUeXh4oFmzZjh06JDGMd5//3188MEHZT5vaWlZ6v6CggKlhK9ly5aYNm0amjZtioyMDJw8eRLfffcdsrKysHTpUri6uuLf//53ma+zaNEizJo1S+wN7dy5MwYOHAg/Pz84ODggJycHjx8/xp9//onffvsNN2/exLFjx/Dll1/iwIEDGh+/LujicyCSEpM+IiIdu3//Prp37464uDgAwOzZszF//nydvsacOXPQrl07tGvXDs7Ozrh37x4aNGigcTwnJyf4+vpWut6ePXvEhC8gIAAnTpyAkZGR+Hzv3r3x2muvISAgAPn5+QgNDcXUqVNRq5bq18/PP/+MmTNnAgAcHR2xefNmBAUFlfq6//rXv/Dtt99i3759mDVrVqXbXay4B9jT01Oj6zd1/TkQSYlJHxGRDt25cwc9evRAfHw8AGDu3Ln44osvdP468+bN03lMTfz555/iz7NmzVJK+Ir5+/tjwIAB2LVrF1JSUnDjxg2VBDMhIQHBwcEAinoVjx8/jmbNmql9bZlMhtdeew1BQUHYt2+fDo6m8mrK50BUEZzIQVUqJSUFM2fOhLe3N8zNzeHk5IRevXrhl19+qVD9q1evYv78+ejTpw/c3d3Fi8UbN26M0aNHV+pi8XPnzmH8+PFo0qQJrKysYGlpCW9vb3z44YfikFxp5s6dK16oDQDp6emYO3cuWrRoASsrKzg7O6N///44deqUUr0nT57gs88+g4+PDywtLeHg4IBBgwbh0qVL5bY1Ly8PK1asQPfu3VGnTh2YmJjAxcUF/fv3x6ZNm6BQKCrc3pycHCxevBht2rSBtbU1rK2t0b59eyxfvhwFBQUVeesqTdvPTZtjKJ50UXw9HwA0aNBAZaJCVFSU+Lyms3f//vtvdOvWTUz4QkNDJUn4apK8vDzx54YNG5ZZrlGjRuLPubm5Ks8vWbIE2dnZAID58+eXm/CVZGZmhrfeeqvC5Wuy3NxcrFu3Dq+//jo8PDxgYWFR7iSbyk6SIQMmEFWR2NhYwdXVVQBQ6jZmzBhh3bp14uO4uDil+kePHi2zbslt5syZatuRn58vvP/++2pjGBsbC6tXry61/hdffCGWi4+PF5o0aVJqDCMjI+E///mPIAiCcPnyZaFu3bqlljM1NRWOHDlSZnvv3bsnNGvWTG17u3TpIiQnJ5fb3qSkJKFVq1Zlxhk4cKBQWFio9v2rLF18btocQ0Vf/+jRo2Iddb+HL8f84osvBEEQhGvXrgkuLi7i/iVLlujqLayQuLg48bVHjx5d4XovH0dlhYeHizH27t1bZrk33nhDACDIZDIhLS1N6TmFQiE4OjoKAAQrKyshPT1do7Zooviz9vT01Ek8TT8HQRCEq1evlvn3pKxNJpMJGRkZOmk7/fMx6aMqkZqaKri7u4t/qIYOHSrs379fiI6OFrZs2SK0bdtWACC0a9euzC/byMhIwdLSUhgyZIiwatUqISoqSrh48aJw4MAB4bvvvhM8PT3Fuj/99FOZbRk1apRYrl+/fsKmTZuEc+fOCefPnxfWrFkj+Pj4qP0SK5mAdOjQQbCwsBBmzZolHDt2TDh//rywdOlSwcbGRgAgWFtbC3fv3hU8PDwEe3t7YcGCBcLJkyeFs2fPCvPmzRNMTEwEAEK9evWE3NxcldfKyMgQGjZsKL7e66+/Luzdu1eIjo4WfvnlF6Fbt27icwEBAUJBQYHa9nbq1EkwMTERPv74YyEyMlK4cOGCsGXLFqWkctWqVZX/gNXQxeemzTFkZmYKf/31lzB//nzx+YMHDwp//fWX0paZmSnWqWzSd+XKFcHJyUn8El62bJlO38OK0Dbpa968udCkSRPBzMxMsLKyEry8vIRRo0YJf/zxh9r6T548EX/fO3fuXOrv4MWLF8Xf9eHDh6s8/9dffymdk1WppiR9cXFxgrOzs1j3tddeE3bs2CFcuHBB+P3334UhQ4YoJXt9+/YVBg0aJIwdO1Yn7SbDwKSPqsS0adPEP1YLFy5UeT4vL08ICgpS+qP28pft06dPhZSUlDJfIzc3V+jdu7f4B7y0L58dO3aI8desWVNqnOzsbKFHjx4CAKF+/fpCfn6+0vMlExBTU1PhzJkzKjF+++03sUydOnUER0dH4fbt2yrlfvjhB7Hcr7/+qvL89OnTxec/++wzlecVCoXw9ttvi2VWrFihUqZke42NjZV6tIolJyeLXzgtW7Ys9X3RlC4+N10cQ3mJXGXKlkz6Xn/9dcHBwUFM+MrqIZaatkmfuu31118XUlNTy4zx66+/Cubm5gIAwc/PT9iwYYNw+vRpITIyUpg7d65gbW0tABBat24tJCYmqtTfvHmz+FqzZ8/W5PA1VhOSPoVCIXTu3FmsFxERUWq54cOHi2V++eUXnbSXDAuTPpJcTk6OULt2bfHLuKzhwwcPHgjGxsYV/mIuTUxMjFg/Ojpa5Xl/f38BgPDGG2+ojXPt2jUxTmRkpNJzJROQkJCQMmOU7MEqq/fsxYsXgpmZmQBAmDp1qtJzOTk5gp2dndgLU1oyJAiCkJaWJiYdzZs3V3m+ZHunTZtWZntnzpwpllP3BS+F8j43XRyDVElfyW3lypUVOl4paJr0WVhYCMOGDRPWrFkjnDhxQrh06ZJw6NAhYfbs2eLvFQChW7duQl5eXplxYmNjhbFjxwoymUzlfXF2dhaWLFmi1JtaUskh4rCwMLXtvXr1qkovbWm9tRVVE5K+bdu2iXU++eSTMsudO3dOLPfhhx/qpL1kWDiRgyR34cIFpKSkAABGjx4Nubz0Xzt3d/cyl2coTW5uLuLj43Ht2jVcvXoVV69eVbrTweXLl5XKJyQk4MKFCwCAIUOGqI3drFkzODo6AgBOnz5dZrlhw4aV+VzLli0BFM0wLOv1zM3N0bhxYwDA3bt3lZ67cOECUlNTARStG1farEgAsLGxEeNfu3YNiYmJZbbp7bffLvM5f39/8efipUakUNnP7WU14RhKKrnQ8N69e5UmNuiDhIQEbN26FePGjUOXLl3QunVr9O7dG/Pnz0dsbCz8/PwAAMeOHcPKlStLjZGfn48tW7Zg3759pd5t5PHjx9i6davSZJmSMjIyxJ+trKzUtrdVq1Zo0aJFqdv58+creNQ1y/LlywEADg4Oau/w0rp1a/HvZ0JCQlU0jf5hmPSR5Equ0t+uXTu1Zdu3b6/2+aysLISGhqJVq1awtLSEp6cnfHx8xD/6xV9QAPDs2TOlutHR0eLPw4cPL3dGXHH9pKSkMtvTpEmTMp+zs7MDULTeWO3atcstV/KLDyia8VqsQ4cOZdZ/+fmS9V7m7e1d5nP29vbizy+3RVvafG4vq65jKMv777+P5s2bAwB+//13DB8+XLJZ0FIo/v0rjbOzM3bs2AETExMAwLJly1TKZGVloVevXliwYAGSk5MxY8YMXL9+Hbm5uUhLS8OhQ4fQpUsXnD9/HgMHDkR4eLhKDGtra6V4uqbuPC+e1X3//n215davX6/zdgFFf19OnjwJABgxYoTapNfY2FhM+sr6zzOROvytIckV9/IBRQvAqqPulkb37t1DixYt8Omnn+LKlSsoLCxUG6t4+YdiT548qUBrVb148aLM5ywsLMp8rviPsroyJcu9fDzPnz8Xfy7vVk8uLi6l1ntZRdpbWlu0oe3n9rLqOAZ16tSpg8OHD8PLywsA8Ouvv2L06NFql9HRJw0bNkTv3r0BALdv38ajR4+Unv/iiy9w/PhxAMDatWuxaNEieHt7i/fJ7d27N44ePYru3btDEARMmzYNV65cUYrh4OAg/vz06VO17SkoKIBQdGkSBEHQ+yVxit87AOWOdCQnJ4v/ofDw8JC0XfTPxMWZSXIlh3vKu+dmaUNDxUaOHIm4uDjxf+fDhg1Ds2bNUKdOHZiamgIoukl78TDoy7FKJgGbN28Wh1/Lo66Xrqpo875VN20/N33g6uqKP/74A127dsX9+/exZcsWmJmZ4ccffyz3s9MHzZs3x2+//QagaFjRzc0NQNFntW7dOgBFvd6jR48utX6tWrXw1VdfoUuXLlAoFFi3bh2WLl0qPt+qVSvx54sXL+q8/S/fE7ikPXv24LPPPoObmxsOHjxYZjl3d3edtwtQ7pkv+T6UpuTwdXmjJkSlYdJHkis55Pb48WO1Q6Jl9cbduHFDHAKZNWsWFixYUGq5kr2KLyvZmyCTyTS65VRVKvm+JSUlqX3fHj9+XGq96qaLz01feHh44MiRI3jllVfw6NEj/PTTT7CwsCh1SFTflJWIP378WOxZLjlEX5qS11veuHFD6TkfHx84ODggOTkZJ06cQFZWVpn3+tWEunO9+LIPY2PjavmbULyQN1D0nwd1ihNvmUyGHj16SNou+mfi8C5JrkWLFuLP5V1oXdbzsbGx4s/qJk+UvG7vZSW/lPThhuglv4DOnj2rtuy5c+dKrVfddPG56UpV9Lg1atQIR44cES9jWL58OWbMmCH560rt2rVr4s/FvXwAlO6fW951jPn5+aXWA4o+m1GjRgEouhZTquvnaqKSlwGUdqeSYmlpadi8eTMAoE+fPuUmiESlYdJHkvP39xeHSDdu3Fhmr0FCQkKZyVjJLxR119itWrWqzOe8vLzEC+63bdum9D/smsjf31+8yH7Dhg1lXqOWkZGB//znPwCKhuFq0peBLj43XTEzMxN/Vvflqi1vb29ERkaKPa6LFy9WOyOzprt79y4iIyMBFF3fV7duXfE5e3t72NjYACia5a4u8Tt27Jj4c4MGDVSenzZtGszNzQEAn376KW7fvq2T9td0Ja9zVvefn5kzZ4o94iEhIZK3i/6ZmPSR5ExNTcUZcjExMVi8eLFKmYKCAowfP77M5S6KlzUBihKg0qxcuRK7d+9W25bPPvsMQNG9W//1r3+pvWg8NzcXK1asQE5OjtqYUjE1NcW4ceMAFPWYlXZjd0EQ8NFHH4kzXj/66KMqbWN5dPW56ULJZPjOnTuSvlbLli1x8OBBMSGaN28evvnmG0lfUxP79u1Tm6g9fvwYb775pthL9+GHHyo9L5fL8eqrrwIAHj16pHb4vmSiMmDAAJUy7u7u+OGHHwAU3c+6a9euZS7x8nJsfdalSxfx54ULF5b6n+LvvvtO/I/RqFGjEBgYWFXNo38YXtNHVWLOnDn4z3/+g4cPHyIkJAQxMTEYNWoUnJyc8Pfff2PJkiU4f/482rVrV+oQr5+fH3x9fXH16lWsXLkSqampePvtt+Hq6ooHDx5g06ZN2LFjBzp37ow///yzzHYMHz4cBw8exIYNG3DhwgU0b94cEydORLdu3VCnTh1kZWXhzp07OHHiBH799Vc8f/5cHHaqDnPmzMGvv/6Ku3fv4quvvsLVq1cxZswYuLm5IS4uDsuXLxe/GAMCAjBhwoRqa2tpdPW56aotZmZmyMnJweeff45atWqhfv364ozfunXrij1NutC2bVvs378fffr0QVZWFkJCQmBhYaGzxPzkyZNKvWEll7q5ffu2yhDpu+++qxJj0qRJyM/Px+DBgxEQEID69evD3Nwcz549Q1RUFFatWoXk5GQARcnJy0kfUPQ7umfPHrx48QJz587FhQsXMHr0aDRs2BA5OTk4c+YMwsLCxJ71nj17ljlL9b333kNCQgLmzJmDpKQkdO/eHa+88gpee+01tGzZEg4ODhAEAU+ePMHly5exa9cupUsbdPn5VZS2n8OAAQPQuHFj3Lp1C4cOHUK/fv0wadIkuLq64u7du1izZo04AtKlSxdERERIdixkAKp6NWgyXFevXlW6If3L23vvvaf2TgiXLl0S7+xR2taiRQvh0aNH4uOybiBfUFAgzJgxQzAyMir39lOWlpbCixcvlOqXvDuEOqNHj67QSv/F98/t1q1bqc/HxcUJ3t7eatvZuXNnITk5udT6FW1vybtMlHabM03p4nPT1THMmDGjzHaULF/Ze++qc+TIEfGuKzKZTPjxxx/Vlq+o4t+vim6lKXnXGHXb4MGD1d5KLzIyUnB0dCw3To8ePYTnz5+Xe2x79+4VGjduXOFj69y5s3Dy5EmN3kdt78ihi8/hypUrSnc/Kevv48t/i4gqi8O7VGV8fHwQGxuLGTNmoHHjxjA1NYWjoyO6d++OLVu24KefflJbv3Xr1oiJiUFwcDA8PT1hbGwMe3t7tG/fHt9++y3OnTtXoevZjIyMsGjRIly7dg2ffPIJ/Pz8ULt2bRgZGcHa2ho+Pj54++23sWHDBiQmJlZL70FJ9evXx+XLl7F8+XJ069YNDg4OMDY2hrOzM/r27YuNGzfi+PHjNWrWbkm6+tx04euvv8aaNWvQtWtX2Nvbl3mXE13q0aMHfv31V5iYmEAQBEyYMEG8IL+6bdiwAfPmzUPfvn3RpEkT2Nvbo1atWrCzs0OLFi0wceJEnDp1Cjt27FC7iHOvXr1w48YNLFq0CIGBgahTpw6MjY1hbm6OBg0aYMiQIdi9ezcOHz5coSWQBg4ciOvXr+PXX3/FhAkT0KJFC9SpUwe1atWCtbU1PD090b9/f8ydOxexsbE4efIkOnfurMN3pmq1aNECsbGxmDZtGry9vWFhYQELCws0btwYEyZMQHR0NH766adq/1tE+k8mCHq4KBYRERERVQp7+oiIiIgMAJM+IiIiIgPApI+IiIjIAHDJFiIqU1ZWFuLi4jSq27RpUxgbG+u4RfqP7ykRVRcmfURUpvPnz6N79+4a1Y2Li0P9+vV126B/AL6nRFRdOLxLREREZAC4ZAsRERGRAWBPHxEREZEBYNJHREREZACY9BEREREZACZ9RERERAaASR8RERGRAWDSR9Xuk08+wcCBA6u7GeUKCQlBv3791JaZOHEiRowYUUUtIkPE84WINMWkj3DgwAHIZDK12++//15unClTpuD111+v9OvHxMSgdevWla737rvviu0zNjZGw4YNMX36dGRlZSmVKdmml+s4Ozujd+/e+Omnn6BQKMptZ6tWrdSWCQ0NxZo1ayp9LMVWrFiBBg0awMzMDP7+/jhx4oTGsUgaPF9qxvly/PhxDBw4EG5ubpDJZNi9e7dGcYgMCZM+Qrdu3ZCYmChuDg4O+PTTT5X29e7du9w458+fR/v27Sv9+pcvX9boSwwA+vbti8TERNy9exfz58/HihUrMH369ArVuXfvHn7//Xd0794dkydPxoABA1BQUKBVO+3t7WFpaanJoWD79u2YMmUKZs+ejUuXLqFr167o168f4uPjNYpH0uD5UjPOl6ysLLRq1QrLly/XqD6RQRKISnj48KEAQNi/f7/Kc3/99ZfQr18/wdraWnB2dhamTZsm5ObmCnl5eYKxsbEAQNzat28v1ps3b57g6+srWFhYCE5OTkJwcLCQl5cnCIIgxMfHCwCE27dvV7qto0ePFgYNGqS0b9y4cYKLi0uZZUqrIwiCcOTIEQGAsGbNmlJfKzExUQAgbN68Wejatatgbm4u+Pv7CzExMWKZuLg4AYBw7949QRAE4datWwIA4b///a/Qo0cPwdzcXGjSpIlw5syZUl+jffv2QnBwsNI+b29vYebMmereBqpGPF+q73wpCYCwa9eucssRGTr29JGSS5cuAQD8/f1V9nfq1Alt2rTBxYsXsX37dmzduhWLFi2CkZERTp48CaBoSCcxMREHDx4EAAiCgMLCQkRERODatWtYv349duzYgR9//FEsb21tjYYNG+qk/ebm5sjPz690vR49eqBVq1b49ddfS32++H0JCwvDwoULER0dDWtrawwbNkwsExMTAzs7O3h6egIo6umQyWT47rvv8Nlnn+Hy5cuoV68eZs6cqRI/Ly8PFy5cQFBQkNL+oKAgnDp1qtLHQ1WD50v1nC9EpJla1d0AqlkuXryIunXrwsnJSWn/+PHjMXLkSMyfPx8A4OXlhfHjx+O///0vPv/8czx69AgODg4q1/DIZDLMmzdPfOzp6YnevXvjxo0bAP533Y9MJtO67efOncOWLVvQs2dPjep7e3vjypUrpT4XExMDMzMz7N69G25ubgCABQsWoHPnzkhKSoKLiwsuX76sdPyXL1+Gra0ttm/fjjp16gAAXn/9daxcuVIl/rNnz1BYWAhnZ2el/c7OzkhKStLoeEh6PF+q53whIs0w6SMlFy9eRJs2bZT23bhxAxcuXMCmTZuU9puYmCA3NxdA0f/sS7to+/79+1i8eDGioqKQkJCA/Px85OTkIDQ0FIDmF6UX++9//wsrKysUFBQgPz8fgwYNwrJlyzSKJQhCmV+mMTExGDJkiPgFBkC8Fqn4gvaXL1y/fPkyBg4cKH6BAcDdu3fh5eVVZhtefn11baLqx/Oles8XIqocDu+SkosXL6oMVcXGxsLY2BhNmjRR2n/t2jW0aNECQOkz9Z49e4b27dvj2bNnWLJkCU6ePInTp0/DyMhI/OLS9kuse/fuiImJwc2bN5GTk4Nff/1Vpdeloq5fv44GDRqU+lxp7bx48SJcXFzg6uoKQPXC9cuXLyMgIECpzqVLl0o9XkdHRxgZGan06j158kSl949qDp4v1XO+EJFmmPSRKDk5GQ8ePFDpubC2tkZhYaHStT/x8fHYsWOHuMbWX3/9hZYtWyrV279/PwoKCrB161YEBQXBx8cHx48fR15eHlq3bo2MjAzExcVp9Ufd0tISXl5e8PT0hLGxscZx/vjjD/z1118YPHiwynMvXrzA7du3UVhYKO5TKBRYtmyZuKRFeno67t27J36Rp6Wl4f79+/Dz81OKVdaXtomJCfz9/REZGam0PzIyEp06ddL4uEg6PF+q73whIs1weJdEFy5cAACVL7EOHTrA3t4eM2fOxKRJk3Dv3j1MmjQJb731lrj4qkKhwJUrV/Do0SNYWlrC1tYW9vb2SE9Px969e9G8eXPs27cPoaGhqFu3LurUqYMTJ07AyMgIvr6+VXqcubm5SEpKQmFhIR4/fowDBw4gNDQUAwYMwKhRo1TKX758GUZGRli3bh1eeeUV2NnZ4dNPP0VWVhY+/fRTpTI+Pj5Kj0v25ty/fx8pKSllfolNmzYNI0eORNu2bREQEIDVq1cjPj4ewcHBun8TSGs8X6r3fMnMzMTt27fFx3FxcYiJiYG9vT3q1aunw3eA6J+DPX0kunTpEpycnFC3bl2l/ba2ttizZw9OnjwJX19f8SL1DRs2iGXmz5+P7du3o27duvjyyy8BAK+++irGjh2LkSNHokuXLkhISMCQIUPEP+KXL1+Gt7c3TE1NxTjr16+X/Bq2AwcOwNXVFfXr10ffvn1x9OhRfP/999izZw+MjIxUyl++fBlNmjTB3LlzMXjwYPj5+cHY2BinTp2CtbV1qcdS/Njc3FyMc+nSJdjZ2aF+/fqltmvo0KEICwvDl19+idatW+P48ePYv3+/OLuRahaeL9V7vkRHR8PPz0/sHZw2bRr8/PwwZ84cHb8DRP8cMkEQhOpuBFGxuXPnIioqClFRUdXdFKIaj+cLEVUGh3epRjl48CDCw8OruxlEeoHnCxFVBnv6iIiIiAwAr+kjIiIiMgBM+oiIiIgMAJM+IiIiIgPApI+IiIjIADDpIyIiIjIATPqIiIiIDACTPiIiIiIDwKSPiIiIyAAw6SMiIiIyAEz6iIiIiAwAkz4iIiIiA8Ckj4iIiMgA6G3Sd/z4cQwcOBBubm6QyWTYvXt3uXWOHTsGf39/mJmZoWHDhli1apVKmZ07d6J58+YwNTVF8+bNsWvXLglaT0RERFS19Dbpy8rKQqtWrbB8+fIKlY+Li0P//v3RtWtXXLp0CZ9++ik+/vhj7Ny5Uyxz+vRpDB06FCNHjsTly5cxcuRIDBkyBGfPnpXqMIiIiIiqhEwQBKG6G6EtmUyGXbt24fXXXy+zTEhICPbu3Yvr16+L+4KDg3H58mWcPn0aADB06FCkp6fj999/F8v07dsXtWvXxtatWyVrPxEREZHUalV3A6rK6dOnERQUpLSvT58+WLt2LfLz82FsbIzTp09j6tSpKmXCwsLKjJubm4vc3FzxsUKhwPPnz+Hg4ACZTKbTYyDSF4IgICMjA25ubpDLyx5QUCgUePToEaytrXm+kEGq6LmirdTUVGRmZmodx8rKCnZ2dto3iKqFwSR9SUlJcHZ2Vtrn7OyMgoICPHv2DK6urmWWSUpKKjNuaGgo5s2bJ0mbifTdgwcP4O7uXubzjx49goeHRxW2iKhmKu9c0UZqaioa1nZECgq1jiWXy5GcnMzET08ZTNIHQKUnoXhku+T+0sqo64GYNWsWpk2bJj5OS0tDvXr18EvDZrAwMtJFs5XYuFvpPObLLOwtJY1v30SaP2zFLJo3kzR+gaunpPFzLR0ljQ8AT02lTbQyMzPR85W2sLa2Vluu+PmoAa/Aylj3f47M7Cx0HrMkq7pOksY3r19P0vhwkLb9AFBgYy9pfKOsNEnjZzo3kTR+RmYW/HoOKPdc0UZmZiZSUIgNZg1hocWl/C+gwOicu8jMzGTSp6cMJulzcXFR6bF78uQJatWqBQcHB7VlXu79K8nU1BSmpqYq+y2MjGApQdJnVUv6j8xCgi/fkqzNTCSNb2lhJmn8AktpE4kcK2mTbgDINpPuC6ak8oZsi5+3Mq4lSdJnbmKs85glSf27bC7x7zIszaWND+nPFyPkSRpfZiX9f7SB8s8VXbCAHBYyLb6X9H4GAOnt7N3KCggIQGRkpNK+Q4cOoW3btjA2NlZbplOnTlXWTiIiIinIaskg12KT1eJ1t/pOb3v6MjMzcfv2bfFxXFwcYmJiYG9vj3r16mHWrFlISEjAzz//DKBopu7y5csxbdo0jB8/HqdPn8batWuVZuVOnjwZr7zyChYtWoRBgwZhz549OHz4ME6ePFnlx0dERKRLMmM5ZDLN+3pk+r/Yh8HT256+6Oho+Pn5wc/PDwAwbdo0+Pn5Yc6cOQCAxMRExMfHi+UbNGiA/fv3IyoqCq1bt8ZXX32F77//HoMHDxbLdOrUCdu2bcO6devQsmVLrF+/Htu3b0eHDh2q9uCIiIh0TG6kXU+f3Ig9ffpOb3v6AgMDoW6JwfXr16vs69atGy5evKg27ptvvok333xT2+YRERER1Sh6m/QRERFRxcmMZZDJNe+tkynY06fvmPQREREZAHktGeRaJH1yJn16T2+v6SMiIiKiimNPHxERkQHg8C4x6SMiIjIAciPtZuDKC5n06TsO7xIREREZAPb0ERERGQCZkQwyLXr6ZGBPn75j0kdERGQAtB7eZdKn9zi8S0RERGQA2NNHRERkAGRyLWfvCuzp03dM+oiIiAyAzEgOmZHmA3wylH3rU9IPTPqIiIgMAK/pI17TR0RERGQA2NNHRERkAGQy3pHD0DHpIyIiMgAyI2g1vCvjJX16j8O7RERERAaAPX1EREQGQOs7cnDJFr3HpI+IiMgAyORyyORaLNmiRV2qGfgJEhERERkA9vQREREZAK3vyKFFXaoZmPQREREZAK0XZ+Y1fXqPw7tEREREBoA9fURERAaAw7vEpI+IiMgAyGRazt6VcXBQ3zHpIyIiMgDs6SOm7UREREQGgD19REREBkDr2bsK9vTpOyZ9REREBoDDu8ThXSIiIiIDwKSPiIjIABTfe1ebraokJSXBz88PRkZGkMlkMDc3x8cff1zh+rGxsfDy8oJcLodMJoO1tTUWL15catlvvvkG1tbWkMlkkMvl8PLyQmxsrEq5Ll26wNnZWWyTl5dXqfECAwMhk8lK3aobh3eJiIgMgD4N7/r4+CAlJQXDhw+Hv78/Vq9ejWXLlqGwsBA//PCD2rrp6enw9/dHQUEBgoODUa9ePYSHh2PGjBkwMTHB5MmTxbLh4eEICQmBi4sLZs+ejfj4eERERMDf3x9PnjyBjY2NWPbPP/+ElZUVvL29ce3atXKPYf78+XB2dhYfGxkZafBO6BaTPiIiIqox5s2bh+fPn+Ojjz7CsmXLAADTpk2Dg4MDVq1ahaVLl8LExKTM+hMmTEBubi4iIiIwYcIEAMCUKVNgZ2eH2bNnKyV9s2fPhqmpKeLi4mBmZgYAaNWqFYKDgzFx4kRs3bpVLJufn49atYrSpor02r355pto2rRp5d8ACXF4l4iIyAAU9/Rps1WF4kTr5eHYESNGQKFQYN26dWrrR0ZGwsTEREz4AMDMzAzdunVDVlYWoqOjAQDR0dHIyspCYGCgmPABwMSJE2FsbIxDhw4pxS1O+PQZkz4iIiIDoKukLzExEQ8fPhS39PR0nbYzISEBlpaWSokYAPTq1QsAcOLECbX1U1NT4eTkpLI/ICAAQFFSCAAHDx5U2l+Sk5MTUlNTK932kpo3by5eJ9ioUSOcPn1aq3i6oP9pKxEREVWZ9u3bKz3u1q0boqKidBY/NzdX6Vq6Yp6engCAp0+fqq2vUChgbW2tst/NzQ0A8OjRI6V/69atq1LW2toaCQkJlWv4//P29oaJiQm6dOkCKysrREZG4uDBg+jSpQvOnj2Ltm3bahRXF/S6p2/FihVo0KABzMzM4O/vrzb7f/fdd0udSePj4yOWWb9+fallcnJyquJwiIiIJFPUW6fN7N2inr5z587hwYMH4rZ3794yXzMsLKzMmawvb9u3b/9fW9VcM1eR6+kqU1/Xs2pXrVqFQ4cOYc6cOZg2bRp+//13rF27FgqFAuPGjdPpa1WW3vb0bd++HVOmTMGKFSvQuXNnREREoF+/frh27Rrq1aunUj48PBxff/21+LigoACtWrXCW2+9pVTOxsYGN2/eVNr3chczERGRvpHJtbsjh6ywqK6rqyvc3d0rVCcwMBCjRo2qUNniHjBTU1NkZ2erPH///n0AgKOjo9o4crm81CHn4p49V1dXAP/r+Xv48KFK2YyMDMh1uETNe++9h+DgYNy+fVtnMTWht0nfkiVLMHbsWDFrDgsLw8GDB7Fy5UqEhoaqlLe1tYWtra34ePfu3UhJScF7772nVE4mk8HFxUXaxhMREVWx6liypXXr1tiwYUOl6ri7u+PGjRvIyclR6nQ5cuQIAKBr165q69vZ2eHJkycq+8+cOQMA6NOnj/jvZ599Ju4v6enTp7Czs6tUuyuiutfq08vh3by8PFy4cAFBQUFK+4OCgnDq1KkKxVi7di169eolXiNQLDMzE56ennB3d8eAAQNw6dIltXFyc3ORnp6utBEREZFmhg8fDgAICQlR2r9161bI5XKVzpqXBQUFIS8vD2vXrhX35eTkICoqCpaWlmjTpg2Aop5FS0tLHD16FHl5eWLZH3/8EXl5eWJyqAvFMRs3bqyzmJrQy56+Z8+eobCwUGnRQwBwdnZGUlJSufUTExPx+++/Y8uWLUr7vb29sX79erRo0QLp6ekIDw9H586dcfny5TI/qNDQUMybN0/zgyEiIqoC2t5Vo6ruyDFnzhyEh4dj2bJlSElJQevWrbFmzRo8e/YM77//vtIafU2aNMGtW7dw8uRJdO7cGQAQERGBXbt2YeLEibh48SI8PT0RFhaG3NxcLFq0SOm15s+fj6lTp6J+/fqYMmUK7t+/j4iICJiammLVqlVKZcPDwxEfHy8+Tk5OxieffAIAGDduHJo1awYAMDc3R48ePeDv7w8rKyscPnwYhw8fhlwux08//STJe1ZRepn0FXu5m1QQhAp1na5fvx52dnZ4/fXXlfZ37NgRHTt2FB937twZbdq0wbJly/D999+XGmvWrFmYNm2a+Dg9PR0eHh6VOIrKSXuQAVsP1VlJuvQiOQsWDpaSxU++Hg+HZqrXXepK1tVYWPr6lF9QQ7UexaHArYFk8c0ynyLHqo5k8QHAKec+nph5ll9Qz2WnZMG8tnS/yxkPHsPaw7n8ghrKvnsP5g3rSxYfzx4DjtK1HwBqpSejwMZBsviFlnYwykqVLL510nVkuDSTLH5V0qc7csTGxqJv377YvHkzNm7cCDMzM0yaNEnlu1ihUAAo+v4vZmNjg+joaAwaNAgrV66EIAiwsrLCokWLlBZmBooWbc7JycGCBQsQEhICmUyGBg0aYO/evSoziL/44gukpaWJj1NTU7FkyRIAgIeHh5j0OTk5ITIyEvv37wdQdCeOZs2aYfPmzWjdurVu3iAN6WXS5+joCCMjI5VevSdPnqj0/r1MEAT89NNPGDlypNoVvYGii0HbtWuHW7dulVnG1NQUpqamKvtfPMgBZLq/5Yp5XVOkxEk7hOza2hmKAoVk8e2buKEwN6/8ghqy8HBFwZPye3w1VateA9R6Ll38QjtHmKcnShYfAJ44t4Q5XkgWv0BWudhZyVmQSbDwqbmdObKeZug8bjHbeo7IfpYqWXwzBxu8uHNXsvi1LMyBRGl/16SW+eCxpPGzk6X9e5uRly9pfH3l4uKCmJiYcsuVNTHC19cXd+7cqdBrzZw5EzNnziy3XEXX7SuecFIT6eU1fSYmJvD39xcXWCwWGRmJTp06qa177Ngx3L59G2PHji33dQRBQExMjDjTh4iISF/pyx05SDp62dMHFN2Hb+TIkWjbti0CAgKwevVqxMfHIzg4GEDRsGtCQgJ+/vlnpXpr165Fhw4d4OvrqxJz3rx56NixIxo3boz09HR8//33iImJKffmzkRERDWdvlzTR9LR26Rv6NChSE5OxpdffonExET4+vpi//794mzcxMREpQsuASAtLQ07d+5EeHh4qTFTU1MxYcIEJCUlwdbWFn5+fjh+/LjK6uNERERE+kZvkz4A+OCDD/DBBx+U+tz69etV9tna2uLFi7KvNVq6dCmWLl2qq+YRERHVGPo0kYOkoddJHxEREVUMh3eJnyARERGRAWBPHxERkSGQyYo2beqTXmPSR0REZABkMi2v6WPSp/eY9BERERkAXtNH/ASJiIiIDAB7+oiIiAwAl2whJn1EREQGgMO7xE+QiIiIyACwp4+IiMgAyOTaDdHK2E2k95j0ERERGQBe00fM24mIiIgMAHv6iIiIDIFcXrRpU5/0GpM+IiIiAyCTybS6qwbvyKH/mLYTERERGQD29BERERkArtNHTPqIiIgMAGfvEpM+IiIiQyDTciIHF+rTe/wEiYiIiAwAe/qIiIgMgZbDu+Dwrt5j0kdERGQAZDI5ZFoM0WpTl2oGfoJEREREBoA9fURERIZALtNuiJbDu3qPSR8REZEB4Dp9xE+QiIiIyACwp4+IiMgAcHFmYtJHRERkCGQy7RZYljHp03cc3iUiIiIyAOzpIyIiMgAc3iUmfURERIZAruW9dzl7V+8x6SMiIjIAMpkMMi2uy9OmLtUMTNuJiIiIDAB7+oiIiAyBTMvhXd57V+8x6SMiIjIAnMhBTNuJiIiIDIBeJ30rVqxAgwYNYGZmBn9/f5w4caLMslFRUeJFrCW3GzduKJXbuXMnmjdvDlNTUzRv3hy7du2S+jCIiIikJ5Nrv5Fe09tPcPv27ZgyZQpmz56NS5cuoWvXrujXrx/i4+PV1rt58yYSExPFrXHjxuJzp0+fxtChQzFy5EhcvnwZI0eOxJAhQ3D27FmpD4eIiEhacpn2G+k1vU36lixZgrFjx2LcuHFo1qwZwsLC4OHhgZUrV6qt5+TkBBcXF3EzMjISnwsLC0Pv3r0xa9YseHt7Y9asWejZsyfCwsIkPhoiIiIiaell0peXl4cLFy4gKChIaX9QUBBOnTqltq6fnx9cXV3Rs2dPHD16VOm506dPq8Ts06eP2pi5ublIT09X2oiIiGoamUyu9Ub6TS8/wWfPnqGwsBDOzs5K+52dnZGUlFRqHVdXV6xevRo7d+7Er7/+iqZNm6Jnz544fvy4WCYpKalSMQEgNDQUtra24ubh4aHFkREREUmEw7sGTy+TvmIvrw4uCEKZK4Y3bdoU48ePR5s2bRAQEIAVK1bg1VdfxbfffqtxTACYNWsW0tLSxO3BgwcaHk3FZCfkShofABJjHksa//nfjySN/+JBoqTxC+LjJI1vlPpM0vgA4PT4iuSvURNkp2ZLGj8tXtrPKidZ2pGDghfSvj9VwcrDufxCWjB3sJE0PlFV0st1+hwdHWFkZKTSA/fkyROVnjp1OnbsiE2bNomPXVxcKh3T1NQUpqamKvuFfAGCTKhwWyrKztdK5zFfZlPXBvnZ+ZLFr92gDvLSX0gW365ZQ0Ch+/e+WK3atYG0FMniw8kVRtmZ0sUHkGfnDIfUO5LFN87MqlT59IeZKJQblV+wkmzcrfDiuXS/aw6NHJGXIV18cwcb5EsY38LdRbLYxYTCQmnjFxTCsq6TZPGN7e1gJ1l0wDI7F9geKeEr/I9MLodMi8WZtalLNYNefoImJibw9/dHZKTyiRIZGYlOnTpVOM6lS5fg6uoqPg4ICFCJeejQoUrFJCIiqpFkMu030mt62dMHANOmTcPIkSPRtm1bBAQEYPXq1YiPj0dwcDCAomHXhIQE/PzzzwCKZubWr18fPj4+yMvLw6ZNm7Bz507s3LlTjDl58mS88sorWLRoEQYNGoQ9e/bg8OHDOHnyZLUcIxERkc7IZdrdho3X9Ok9vU36hg4diuTkZHz55ZdITEyEr68v9u/fD09PTwBAYmKi0pp9eXl5mD59OhISEmBubg4fHx/89ttv6N+/v1imU6dO2LZtGz777DN8/vnnaNSoEbZv344OHTpU+fERERER6ZLeJn0A8MEHH+CDDz4o9bn169crPZ4xYwZmzJhRbsw333wTb775pi6aR0REVHNoO0TL4V29p9dJHxEREVUMJ3IQP0EiIiIiA8CePiIiIkMgkxdt2tQnvcakj4iIyBDItLyrBq/p03tM24mIiIgMAHv6iIiIDIBMJodMiyFabepSzcCkj4iIyBDItRze5eLMeo9pOxEREZEBYE8fERGRIeDsXYPHpI+IiMgQ8I4cBo9JHxERkSGQy4s2beqTXuMnSERERGQA2NNHRERkCHhNn8Fj0kdERGQIuGSLwWPaTkRERGQA2NNHRERkCGQyLYd32dOn79jTR0REZAiKl2zRZqsiSUlJ8PPzg5GREWQyGczNzfHxxx9XuH5sbCy8vLwgl8shk8lgbW2NxYsXl1r2m2++gbW1NWQyGeRyOby8vBAbG6tUZtOmTWjRogXMzMzEcvb29vjuu+9KjRkVFQU3NzfIZDLIZDI4ODhg8+bNFX8DJMKePiIiIqpRfHx8kJKSguHDh8Pf3x+rV6/GsmXLUFhYiB9++EFt3fT0dPj7+6OgoADBwcGoV68ewsPDMWPGDJiYmGDy5Mli2fDwcISEhMDFxQWzZ89GfHw8IiIi4O/vjydPnsDGxgYAEBYWhrt376Jv377o2rUrUlNTERERgenTp+PmzZtYvXq1GPP69evo2bMnjI2N8e9//xuWlpZYsmQJ3nnnHdjb26Nfv37SvGkVIBMEQai2V/8HSk9Ph62tLf5j1AgWMiOdx7fztdJ5zJfZ1LWRNH7tBnUkjW/XrKGk8WvVri1pfDi5ShsfQJ6ds6Tx0zOz4BE4GGlpaeIfzVLL/f/5sq+hDyzluj9fbNylPV8cGjlKGt/cQdpz0cLdRdL4ACAUFkobv0Da+Mb2dpLGT8/OhetHi8o9V7Tx8OFDeHh44PH272BjYa5xnPQX2XAe+gkePHgAd3d3HbZQ2bx58zB37lx89NFHWLZsmbjfwcEBqampyM7OhomJSZn1hw0bhu3btyMiIgITJkwAAOTk5MDOzg61atVCZmamWNbKygoFBQVITU2FmZkZACAiIgLBwcEYNmwYtm7dCqCo59DHx0fpdfLy8mBra4uCggLk5+eL+9u3b4/z58/j5MmT6Ny5M4Ciz6BevXpwd3dHfHy8lu+Q5ji8S0REZAj0ZHi3ONF6eTh2xIgRUCgUWLdundr6kZGRMDExERM+ADAzM0O3bt2QlZWF6OhoAEB0dDSysrIQGBgoJnwAMHHiRBgbG+PQoUPivpcTPgAwMTGBh4cHCgoKlPbHxMTAwcFBTPgAwN3dHU2bNsWDBw+Qk5NT3lsgGSZ9REREVGGJiYl4+PChuKWnp+s0fkJCAiwtLZUSMQDo1asXAODEiRNq66empsLJyUllf0BAAICipBAADh48qLS/JCcnJ6Smpqp9nZycHNy7dw/m5v/rPX3+/Dny8/PRsKHqiFOLFi0AAMeOHVMbV0q8po+IiMgQ6Ghx5vbt2yvt7tatG6KiorRomLLc3NxSh7o9PT0BAE+fPlVbX6FQwNraWmW/m5sbAODRo0dK/9atW1elrLW1NRISEtS+Tq9evZCfn4/p06eL++7duwcAsLe3Vynv7Fx0Wc39+/fVxpUSe/qIiIgMgUz+v/vvarL9f9J37tw5PHjwQNz27t1b5kuGhYWJM1jL27Zv3/6/pqoZSlb3nCb1KxLvZaNHj8aff/4Jf39/LFy4sFKvL6/Gexizp4+IiMgQaHtd3v/XdXV1rfBEjsDAQIwaNapCZdu2bQsAMDU1RXZ2tsrzxT1kjo7qJ1DJ5fJSh5yLe/ZcXYsmyxX3/D18+FClbEZGRpnJ2ZgxY/Dzzz/D29sb586dU3qufv36AIDk5GSVeo8fPwYAeHh4qG2/lJj0ERERkSRat26NDRs2VKqOu7s7bty4gZycHKXr+o4cOQIA6Nq1q9r6dnZ2ePLkicr+M2fOAAD69Okj/vvZZ5+J+0t6+vQp7OzsVPaPGTMG69atQ+PGjREbG6uSGNrb28PY2BhxcXEqda9evQqgaDi8unB4l4iIyBAUX9OnzVYFhg8fDgAICQlR2r9161bI5XK89957ausHBQUhLy8Pa9euFffl5OQgKioKlpaWaNOmDYCinkVLS0scPXoUeXl5Ytkff/wReXl5YnJYbNy4cVi3bh0aNmyIa9euldkT6Ofnh2fPnuHs2bPivkePHuHGjRvw8PBQmaBSldjTR0REZAh0NLwrtTlz5iA8PBzLli1DSkoKWrdujTVr1uDZs2d4//33ldboa9KkCW7duqW0Jl5ERAR27dqFiRMn4uLFi/D09ERYWBhyc3OxaNEipdeaP38+pk6divr162PKlCm4f/8+IiIiYGpqilWrVonlpk2bhrVr18Lc3BwzZszA+vXrleIMGTJEnHyyfv16+Pr6IjAwEFOmTIG5uTmWLFkCQRCUYlYHJn1ERERUo8TGxqJv377YvHkzNm7cCDMzM0yaNAnff/+9UjmFQgEAKHmfCRsbG0RHR2PQoEFYuXIlBEGAlZUVFi1apHQ3DgCYMmUKcnJysGDBAoSEhEAmk6FBgwbYu3ev0gzi4skq2dnZCA4OVmmvt7c3unTpAgBo1qwZIiMj8c477+Drr78GANSuXRubNm1C//79dfDuaI5JHxERkSEonoWrTf0q4uLigpiYmHLL3b59u9T9vr6+uHPnToVea+bMmZg5c6ZGr1OWHj16iBNHahImfURERAZAkMkgaDFEq01dqhk4kYOIiIjIALCnj4iIyBDIZFrekYM9ffqOSR8REZEh0NFt2Eh/8RMkIiIiMgDs6SMiIjIAnMhBet3Tt2LFCjRo0ABmZmbw9/fHiRMnyiz766+/onfv3qhTpw5sbGwQEBCAgwcPKpVZv359qTeBzsnJkfpQiIiIpKUnd+Qg6ejtJ7h9+3ZMmTIFs2fPxqVLl9C1a1f069cP8fHxpZY/fvw4evfujf379+PChQvo3r07Bg4ciEuXLimVs7GxQWJiotJWnbdMISIi0oniO3Jos5Fe09vh3SVLlmDs2LEYN24cACAsLAwHDx7EypUrERoaqlI+LCxM6fHChQuxZ88e7Nu3D35+fuJ+mUwGFxcXSdtOREREVNX0sqcvLy8PFy5cQFBQkNL+oKAgnDp1qkIxFAoFMjIyYG9vr7Q/MzMTnp6ecHd3x4ABA1R6Al+Wm5uL9PR0pY2IiKjGKb4jhzYbVbnU1FSdxdLLT/DZs2coLCyEs7Oz0n5nZ2ckJSVVKMZ3332HrKwsDBkyRNzn7e2N9evXY+/evdi6dSvMzMzQuXNn3Lp1q8w4oaGhsLW1FTcPDw/NDoqIiEhCxRM5tNmoahQUFKBnz54wMjJC7dq1ERUVBQDo2rUr3n33XY3j6mXSV0z20i+gIAgq+0qzdetWzJ07F9u3b4eTk5O4v2PHjnjnnXfQqlUrdO3aFf/5z3/QpEkTLFu2rMxYs2bNQlpamrg9ePBA8wOqgNSrmZLGB4D0BGl7K1PinkoaP/X6XUnjF6SkSBofTxKljQ/AJPWx5K9RE6Q/lPZ8Sb7zTNL42cnSnosvHlbsP8nakBkZSRu/lrTx85+nShqfqDRBQUE4fvw4Jk6cqLS/bdu22Llzp8Zx9fKaPkdHRxgZGan06j158kSl9+9l27dvx9ixY/HLL7+gV69easvK5XK0a9dObU+fqakpTE1NVfbLjGUVSkAry6qhOQrzFTqPW5KtuzUUBYWSxbdvWAdCoXTxrTyckZ8m3ZelqZMjFC+yJIsva9BYstjFFObWMMrLliy+UX7lZrwL+QIEuaDzdli7W0CRL93vmq2HHfKyciWLb+Fgjfws6VYPMHeqjbyUNMniA4Cpgx1kcum+aoxs7SSLDQAyG1tJ48tfSHcequDizHrjxIkTWLhwIf79739j5cqV4v7evXsjPDxc47h6+QmamJjA398fkZGRSvsjIyPRqVOnMutt3boV7777LrZs2YJXX3213NcRBAExMTFwdXXVus1ERETVSZDJtd6oahQUFJSazxQUFEAQNP8Psl729AHAtGnTMHLkSLRt2xYBAQFYvXo14uPjERwcDKBo2DUhIQE///wzgKKEb9SoUQgPD0fHjh3FXkJzc3PY2hb9T27evHno2LEjGjdujPT0dHz//feIiYnBDz/8UD0HSURERAbHwsICmzZtQufOnZX2L126FDY2NhrH1dukb+jQoUhOTsaXX36JxMRE+Pr6Yv/+/fD09AQAJCYmKq3ZFxERgYKCAnz44Yf48MMPxf2jR4/G+vXrARTNkJkwYQKSkpJga2sLPz8/HD9+HO3bt6/SYyMiItI5bdfa40SOKjNt2jTMnz8f9+7dAwB8++23CA4Oxs2bN0tdlq6i9DbpA4APPvgAH3zwQanPFSdyxYpnvqizdOlSLF26VActIyIiqlkEaDdEK+jnFWF66auvvoKZmRkWL14MAPjtt99gbW2NhQsXYubMmRrH1eukj4iIiOifaPbs2Zg9e7ZOYzLpIyIiMgQc3tUbGzZsQEFBAcaOHau0f+3atTA2NsaoUaM0isu+WiIiIkMgk/1v2RaNNiZ9VeXDDz/EtWvXVPbfvHmzzMvaKoJJHxERkQHgHTn0R1ZWFgYOHKiyf8CAAcjK0nydWCZ9RERERDWITCbD33//rbL/+vXrWt34gUkfERGRIdBqaFfLu3lQpbi7u2PGjBlKS8/dv38fISEhqFu3rsZxOZGDiIjIAAiQQYDmvUTa1KXK+fXXXxEQEABPT0/Y2dkBANLS0mBsbIyDBw9qHJdpOxEREVEN0rZtWyQkJODtt9+Gu7s7GjVqhHHjxiElJQUdOnTQOC57+oiIiAyAtvfP5b13q5aTkxM2bdqk05hM+oiIiAyBttflMemrUgcPHsTGjRuRlJQEhUKh9Nwff/yhUUwmfUREREQ1yKhRo7Bx40bI5XKYmJhoNWO3JKbtREREBoDr9OmPLVu2oG/fvigsLER2djZevHihtGmKPX1EREQGgNf06Y/CwkKEhIToPK7OPsGkpCTs27cP//3vf/H48WNdhSUiIiIyKI0bN8bq1at1HlcnPX1btmzBnDlz0KtXLygUCkybNg1ffvklhg0bpovwREREpC2ZTLv753J4t8o0aNAA27Ztw7lz59CsWTOYmJgoPb9z506N4uok6Vu0aBHOnz+P2rVrAwBSUlIQGBjIpI+IiKim0HJ4l7N3q84ff/wBIyMj3L9/H/fv39dZXJ0kfQqFAlZWVuJjKysrlenFREREVH14Rw79kZ+fL0lcnSR977zzDjp16oTBgwcDKLp9yMiRI3URmoiIiMggZWZm4sSJE+jevTvMzMy0jqeTpC8kJAS9evXCyZMnAQArV66Ev7+/LkITERGRDnD2rv549uwZOnXqhFu3bgEAjh49isDAQLRq1Qqurq44cOCARnF18gl++umnaNSoESZPnozJkyejYcOGmD17ti5CExERkS7I8L/JHBpt1X0AhqNXr15ISEjADz/8oLR/wIABOH78uMZxdZL0/f7777CzsxMf165dG7///rsuQhMREREZlKtXryI8PBwffPCB0v4ePXogOztb47g6Gd4tLCxEZmamOJkjPT1dsosQiYiIqPIEyCFo0dejTV2qnMLCQnh5eansT05O1iquTpK+SZMmoXPnzhg6dCgAYPv27Zg6daouQhMREZEOaHsrNd6GrerY2tpi+fLlCAwMBADI5UUJ9/z58+Hg4KBxXJ0kfePHj0fHjh0RFRUFoGixZh8fH12EJiIiIjIoixYtQnBwsJhLTZ48GfHx8Xj+/Dk2btyocVyd9dW+ePECDg4OmDRpElxdXfHw4UNdhSYiIiItFc/e1WajqjFx4kT8+uuvyMnJgampKa5duwYbGxvs2LED77zzjsZxddLTN3fuXFy8eBE3btzAiBEjkJ2djWHDholLuBAREVH14uLM+uHFixdo1aoV1qxZgzt37ug0tk7S9t27d2PPnj2wtLQEANStWxcZGRm6CE1ERERkMCwsLHD79m1JYusk6TM1NQUAyP7/Is/U1FTxZyIiIqp+HN7VH15eXli6dKnO4+pkePf999/H0KFD8ezZM8yfPx/bt29HSEiILkITERGRDnD2rv6oX78+9u3bB3d3d/j4+IhL4hXbuXOnRnF1kvS9/fbb6NChA44cOQJBELBt2zbO3iUiIqpBeE2f/oiKioKRkREeP36Mx48f6yyu1kmfQqFAu3btEBMTg2bNmumiTUREREQGS6obXGg9QC+Xy9G+fXvExsbqoj1EREQkAV7Tp38yMzPx+++/IycnRyfxdDK8e+7cOfj5+aFJkyawsLCAIAiQyWQ4d+6cLsITERGRlji8qz+ePXuGTp064datWwCAo0ePIjAwEK1atYKrqysOHDigUVydJH179uzRRRgiIiIig9erVy8kJCTghx9+wIcffiju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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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YCJHBufKlSvi18Xdh5S/X1VRMjIyEBISgqZNm8La2hre3t5o1KgRGjdujMaNG8PPz0+s+/TpU5W2ERER4teDBg0qdrVafvukpKQi+6Npl3sHBwcAeVtBVK1atdh66enpKuVXr14Vv27VqlWR7V9/v2C712m6V8rR0VH8+vW+6EqXn9vryuscijJu3Dg0bNgQQN7WHIMGDZJs9W9xYmNj8e677yInJwdyuRzff/+9ztt2eHl5YeLEibhy5Qq6du1aaB1N11H+auF79+5prLd161ad+lmYpKQknD17FgAwePBgjfe7mZmZiYlcUX9sEukDH9FFBid/NA7IGyHQRNMvnbt376Jz584lHml5fQf6x48fl6jd616+fFnke1ZWVkW+l//LQFOdgvVeX6jw/Plz8evifhm7ubkV2u51JelvYX3Rha4/t9eVxzloUq1aNfz666948803cfv2bfz4448YPnw4tm/fXqYJQVxcHIKCgpCcnAxTU1Ps2rVLXAxTEuPGjcP48ePF1xYWFnByctL4R0hFV/AxZsWN9j979kxMwL28vCTtFxk3JnJkcApOmxWchiqu7uuGDh2KuLg48a/8gQMHokGDBqhWrRrkcjkAQKlUilOQr8cq+It9586d4tRncSrCLzJdvm/lTdefmyFwd3fHb7/9hvbt2+PevXv47rvvYGFhgY0bNxb7s9OHhw8fomvXrnj48CFkMhk2b96Md999t1Qx8p/soI2Co+6vO3DgAD7//HN4eHjg2LFjRdbz9PTU6rM1KTg63bRpU411L126JH6tywpmouIwkSODU3C669GjRxqnI4saNbtx44Y4RTJ79myVneYLKjj69zonJyfxa5lMpvUvrbJS8PuWlJSk8fv26NGjQtuVN3383AyFl5cXTp48iTfffBMPHz7E5s2bYWVlhbCwMEk/9+nTp+jWrZt4j2VYWBiGDRsm6We+TtO1lH9Lg5mZWZlfc/kbMwN5ybYmhw4dApD3/4bOnTtL2i8ybpy4J4PTuHFj8euCf/UWpqj3Y2Njxa81LTAoeB/c6wreh3X8+HGN/agICv7S+/PPPzXWvXjxYqHtyps+fm76UhYjY2+88QZOnjwp3kKwatUqzJw5U7LPy9+f8dq1awDy9uKbMGGCZJ9naAo+8UShUBRZLzU1FTt37gQAdO/evdikj0gXTOTI4Pj7+4vTk9u3by9y6iwhIaHIBKvgzeOa7llbu3Ztke/VqVNHvCl99+7dKn+tV0T+/v7iQoht27YVec9Xeno6vv/+ewBAw4YNK9QvIX383PTFwsJC/FrTL3Vd+fj44MSJE+LI6LJlyzSultTWy5cv8fbbbyMqKgoAMGfOHAQHB+v9cwxZwXtyNf2xMGvWLHFUmN9DkhoTOTI4crlcXLkWHR2NZcuWqdXJycnBqFGjity6IX+LDiAvqSnMmjVr8NNPP2nsy+effw4g71md7733Hp48eVJkXYVCgdWrVyMrK0tjTKnI5XKMHDkSQN7I1vz589XqCIKATz/9VFzp+emnn5ZpH4ujr5+bPhRMcHV99mhxmjRpgmPHjsHOzg5A3tYeS5cu1Vv87OxsvPvuu/jjjz8AAJMnT1Z5cgXladeunfj14sWLC/0j8quvvhL/kBg2bJjKM2qJpMB75MggzZ07F99//z0ePHiA4OBgREdHY9iwYXBxccHff/+N5cuX49KlS2jZsmWh06t+fn7w9fXF1atXsWbNGqSkpGDIkCFwd3fH/fv3sWPHDuzduxdt27YVf7kVZtCgQTh27Bi2bduGyMhINGzYEGPGjEGHDh1QrVo1ZGRk4M6dOzhz5gx+/PFHPH/+vMzvNypo7ty5+PHHH/HPP//gP//5D65evYpPPvkEHh4eiIuLw6pVq8SHvQcGBmL06NHl1tfC6Ovnpq++WFhYICsrC1988QWqVKmCmjVriitLq1evDktLS719XosWLXD48GF0794dGRkZCA4OhpWVlV6S7UGDBomj1507d8aIESM0bjtjbm6u8R7Liuzs2bO4ffu2+Lrg9jS3b99W27bko48+Er/u1asX6tati1u3buH48ePo2bMnJk6cCHd3d/zzzz/YsGGD+H1s164d1q1bJ+m5EAHgI7rIcF29elXloeKvHx9//LHGHfUvX74sPiGisKNx48bCw4cPi33kUE5OjjBz5kzB1NS0yFj5h7W1tfDy5UuV9gWfMqDJ8OHDS7SjfYcOHQQAQocOHQp9Py4uTvDx8dHYz7Zt2wrPnj0rtH1J+1twl//CHoGlLX383PR1DjNnziyyHwXrl+bJDpoebSUIgnDy5Enx6R0ymUzYuHGjxvolUdy/29ePov4NluY8tKXrkx3yr6OSHq/766+/xCefaPp/z+vXOZFUOLVKBqtRo0aIjY3FzJkzUbduXcjlcjg7O6NTp0747rvvsHnzZo3tmzVrhujoaIwdOxbe3t4wMzODo6MjAgIC8OWXX+LixYsluj/M1NQUS5YswbVr1zB9+nT4+fmhatWqMDU1ha2tLRo1aoQhQ4Zg27ZtSExM1OsojTZq1qyJmJgYrFq1Ch06dICTkxPMzMzg6uqKHj16YPv27Th9+nSFWq1akL5+bvrw3//+Fxs2bED79u3h6OhY5NMy9Klz58748ccfYW5uDkEQMHr0aPHGepJe48aNERsbi2nTpsHHxwdWVlawsrJC3bp1MXr0aERERGDz5s3lfp2T8ZAJggFuskREREREXOxAREREZKiYyBEREREZKCZyRERERAaK248QUZnJyMgo8cPuX1e/fn2YmZnpuUeGj99TIuPGRI6IysylS5fQqVMnrdrGxcWhZs2a+u1QJcDvKZFx49QqERERkYHi9iNEREREBoojckREREQGiokcERERkYFiIkdERERkoJjIERERERkoJnJEREREBoqJHJW76dOno3fv3uXdjWIFBwejZ8+eGuuMGTMGgwcPLqMekTHi9UJEBTGRIxw9ehQymUzjceTIkWLjTJkyBe+8806pPz86OhrNmjUrdbuPPvpI7J+ZmRlq166NGTNmICMjQ6VOwT693sbV1RXdunXD5s2boVQqi+1n06ZNNdYJCQnBhg0bSn0u+VavXo1atWrBwsIC/v7+OHPmjNaxSBq8XirG9XL69Gn07t0bHh4ekMlk+Omnn7SKQ2TomMgROnTogMTERPFwcnLCZ599plLWrVu3YuNcunQJAQEBpf78mJgYrX4xAUCPHj2QmJiIf/75BwsXLsTq1asxY8aMErW5e/cujhw5gk6dOmHy5Mno1asXcnJydOqno6MjrK2ttTkV7NmzB1OmTMGcOXNw+fJltG/fHj179kR8fLxW8UgavF4qxvWSkZGBpk2bYtWqVVq1J6o0BKICHjx4IAAQDh8+rPbelStXhJ49ewq2traCq6urMG3aNEGhUAjZ2dmCmZmZAEA8AgICxHbz588XfH19BSsrK8HFxUUYO3askJ2dLQiCIMTHxwsAhNu3b5e6r8OHDxf69u2rUjZy5EjBzc2tyDqFtREEQTh58qQAQNiwYUOhn5WYmCgAEHbu3Cm0b99esLS0FPz9/YXo6GixTlxcnABAuHv3riAIgnDr1i0BgPDL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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACDIUlEQVR4nO3deVxUVf8H8M8dhGEHBVkURI0MFRcEFzRzx+VxaXVNW9x73O0RCTMtlUcthTCVzNTU1NIsK3PJJCU1BcQUl9QQFEFc2EQBYe7vD37ch3FgWGYuMMzn/Xrdl86Zc7733IELX86591xBFEURRERERGRwFDXdASIiIiKqGiZyRERERAaKiRwRERGRgWIiR0RERGSgmMgRERERGSgmckREREQGiokcERERkYFiIkdERERkoJjIERERERkoJnJEREREBoqJHBEREZGBYiJHBmfz5s0QBAGCIODGjRs13R0yUvw+JKLagIkcEZEMIiMjpURv0aJFWuveuXMH3t7eUv2pU6dCFEWd9p+VlYWdO3di7ty56NGjBzw9PWFnZwczMzM4OTmhZ8+eWLFiBe7fv19urLS0NPz0009YuHAhBg4cCEdHR6mvb775ZqX7plKp8P3332Pq1Klo164dnJ2dYWZmBltbWzRv3hzDhg3Df//7X/z9999VOHL90fdxE8mhXk13gIiotti8eTPeeustAEBCQgKaNm0q+z5TUlLQu3dvXL58GQAwc+ZMhIaG6hz39OnTGDVqVKnv3b17F7///jt+//13rFy5Etu2bUP//v3LjOXs7Kxzf4rt378fc+fOlY63pCdPniA7OxsJCQnYt28fgoKC0KNHDyxbtgxdu3bVWx8qSp/HTSQXJnJERFXw5ptv6jwqc+vWLfTu3RtXr14FALz77rtYuXKlHnpXxN3dHb169YKvry/c3d3h6uoKlUqFW7duYffu3fjuu+9w7949DB06FGfOnEHbtm0rFLNly5Y4dOhQpfuzfPlyBAUFSaON3bp1w5AhQ+Dj4wMHBwfk5ubizp07+OOPP/Dzzz/jypUr+P333/Hhhx/iwIEDld6fPuly3ERyYiJHRFQDEhMT0atXLyQkJAAAgoODsWTJEr3F79WrF5KSksp8f/jw4fj+++/x0ksvIT8/H4sXL8aePXtKrbtw4UJ07NgRHTt2hLOzM27cuIFmzZpVqj9fffUV5s+fDwBwdHTE9u3bERAQUGrdl19+GR9//DF+/PFHBAUFVWo/JRWPsHp4eFTpOkZ9HDeR3JjIERFVs+vXr6N3795SorVo0SJ88MEHet2HiYlJuXVefPFFeHl54fLlyzh27FiZ9RYvXqxTX5KTkzFlyhQAgJWVFY4dO4aWLVtqbSMIAoYOHYqAgAD8+OOPOu2/qnQ9bqLqwJsdqNZJT0/H/Pnz4eXlBQsLCzg5OaFv37749ttvK9T+woULWLJkCfr37w83NzcolUpYW1vj2WefxRtvvIFTp05VuC+nT5/GxIkT0aJFC1hbW8PKygpeXl7497//LU2HlWbRokXSRdFA0YXnixYtQps2bWBtbQ1nZ2cMGjQIJ06cUGuXlpaGBQsWoHXr1rCysoKDgwOGDRuGs2fPltvX/Px8rF27Fr169ULDhg1hZmYGFxcXDBo0CNu2bYNKpapwf3Nzc7Fy5Up06NABNjY2sLGxQadOnbBmzRoUFBRU5KOrNF2/brocQ/GNCcXXxwFAs2bNpHjFW2RkpPR+Ve9a/fvvv9GjRw8piQsJCdF7ElcZVlZWAIo+L7msWrUKjx8/BgAsWbKk3CSuJHNzc7z22mtyda1a5eXlYdOmTXjxxRfh7u4OS0tLje+xp7fK/LwiIyUS1SLx8fGiq6urCKDU7e233xY3bdokvU5ISFBrf/To0TLbltzmz5+vtR9PnjwRp06dqjWGqamp+Pnnn5fa/oMPPpDqJSUliS1atCg1homJifjNN9+IoiiK586dExs3blxqPaVSKR45cqTM/t64cUNs2bKl1v4+//zz4v3798vtb2pqqtiuXbsy4wwZMkQsLCzU+vlVlj6+brocQ0X3f/ToUamNtu/Dp2N+8MEHoiiK4sWLF0UXFxepfNWqVfr6CKvk4sWLoomJiQhA9PPzq3C7hIQE6RjeeOMNrXVVKpXo6OgoAhCtra3FrKwsHXtdccVfIw8PD73Eq8xxP+3ChQtl/hwoaxMEQczOztZL36nu4ogc1RqZmZno378/UlJSAAAjRozA/v37ER0dja+//hp+fn748ssvsXbt2jJjFBQUwMrKCsOHD8f69esRGRmJ2NhYHDhwAJ988gk8PDwAAP/973+xadOmMuOMHz8e69atAwAMHDgQ27Ztw+nTp3HmzBls2LABrVu3xpMnTzBp0qRyp31ee+013Lp1C0FBQfj9999x5swZrF69Gra2tigsLMT48eORkJCAwYMH4/Hjx1i6dCmioqLw559/YvHixTAzM0NeXh7eeust5Ofna8R/+PAhevfujUuXLgEomi7bt28foqOj8e2336JHjx4AgKioKAwePBiFhYVa+/vyyy/j0qVLmDFjBg4fPoyYmBh8/fXX0ijKjz/+iA0bNmiNUVn6+rpV9Rg6duyI8+fPq12jdvDgQZw/f15t69ixY5WP8fz58+jZsydSU1MhCALCw8Mxe/bsKserqkePHuHq1atYtWoVevXqJX0/zJw5U5b9xcfH4969ewCA7t27w8bGRpb91GY3btxAnz59pOVUhg4dit27dyMmJga//PILhg8frlZ/wIABGDZsGN5++21YW1vXRJfJkNR0JklUbM6cOdJfosuWLdN4Pz8/XwwICFD7i/XpkZC7d++K6enpZe4jLy9P7Nevn/RXekFBgUad3bt3S/E3bNhQapzHjx+LvXv3FgGITZs2FZ88eaL2fsnRIaVSKZ46dUojxs8//yzVadiwoejo6Cheu3ZNo95nn30m1fvuu+803n/33Xel9xcsWKDxvkqlEseMGSPVWbt2rUadkv01NTVVG3kqdv/+fdHZ2VkEILZt27bUz6Wq9PF108cxlDfKVpm6JUfkXnzxRdHBwUEaZSlrJFcuJfta2vbuu++KKpWqwvEqMzK1fft2qW5wcLCOR1I5tWFETqVSid26dZPaRURElFpv1KhRUp1vv/1WL/0l48AROaoViq8dAYC2bdsiMDBQo46pqSk2btwIU1PTMuM4OjrC3t6+zPfNzMyk5R0SExMRFxenUSckJAQA8NJLL2HChAmlxjE3N8eaNWsAFP21XfLaqafNmjULnTt31igfNGiQNNJ09+5dLFmyBM8884xGvbfeegvm5uYAgOPHj6u9l5eXhy+++AIA0KpVq1IXnhUEAWvXroWDgwMASP0uy/Tp09GzZ0+N8gYNGkjXkP3111/IzMzUGqcy9PF1K6kmjkGb77//Xlp4d+3atZg4cWK17Lc87du3x6lTp7By5Urp2kJ9Kx6NA4CGDRtqrRsfH48LFy6UuuXk5MjSP7l98803+OOPPwAAc+fOxaRJk0qtV3J0VtvPE6KnMZGjWiEmJgbp6ekAgDfeeAMKRenfmm5ubmUuWVCavLw8JCUl4eLFi9IvBLHEivnnzp1Tq5+cnIyYmBgA0JjueFrLli3h6OgIADh58mSZ9UaOHFnme8XrdgmCUOb+LCws8OyzzwIA/vnnH7X3YmJikJGRAaBoXbOy7lS0tbWV4l+8eFGavi7NmDFjynzP19dX+n/xshlyqOzX7Wm14RhKKpkk7du3r9Qpcjm9+OKL0vTw6dOnsWPHDrz00kuIi4vDmDFj8NNPP8m27+zsbOn/5U0TtmvXDm3atCl1O3PmjGx9lFPxH04ODg5an/DRvn176edecnJydXSN6ggmclQrnD9/Xvp/edchderUSev7OTk5CAkJQbt27WBlZQUPDw+0bt1a+oXg4+Mj1S05WgAA0dHR0v9HjRpV7h1lxe1TU1PL7E+LFi3KfK94FMrR0RH169cvt17JX4pA0Z2exUob9Sup5Psl2z3Ny8urzPcaNGgg/f/pvuhKl6/b02rqGMoydepUtGrVCgDwyy+/YNSoUbLd/Vsae3t7eHt7w9vbGx07dsTIkSPx3Xff4auvvsI///yDYcOGYfPmzbLsu+Q1cXKMqmk7P4tHXxMTE7XWk+vYU1NTERUVBQAYPXq01kTW1NRUSuTK+kOWqDT8bqFaoXg0DgCcnJy01tX22JwbN26gTZs2eO+99/DXX3+Ve2F/8ZIIxdLS0irQW02PHj0q8z1LS8sy3yv+ga2tTsl6Tx/PgwcPpP+X9zghFxeXUts9rSL9La0vutD16/a0mjgGbRo2bIhff/0Vnp6eAIDvvvsOb7zxhtYlYarD2LFj8dprr0GlUmHatGlq56G+FE/pA0WXEGhTUFAAURSlrSaXZdGHkmvzlTeTcP/+fSm5d3d3l7VfVLdwQWCqFUpOm5V3rY6o5WHiY8eORUJCgvTX+MiRI9GyZUs0bNgQSqUSQNEDu4unIJ+OVfIX+/bt2yv0yCIAWkfTqosun1tN0/XrZghcXV3x22+/oXv37khMTMTXX38Nc3NzfPHFF7Jdn1YRw4YNwzfffIOcnBz88ssvGD16tF7jt2vXTvp/bGysXmMD6qP5T/vhhx+wYMECNGrUCAcPHiyznpubm977BaiPfJf8HEpTcupYl7ujyfgwkaNaoeR01507d7ROR5Y1anb58mVpGiMoKAhLly4ttZ62UYeSoweCIMDb21trv2tayc8tNTVV6+d2586dUtvVNH183QyFu7s7jhw5ghdeeAG3b9/Gl19+CUtLS4SHh9dYn0regJCYmKj3+K1bt4aDgwPu37+P48ePIycnR1qEWB+0naPFl0qYmprWyLlc8hFprq6uWuv+/PPPAIp+7vTu3VvWflHdwqlVqhXatGkj/b+8i5rLej8+Pl76v7YbDEpeB/e0ktdhGcLDsUv+cvrzzz+11j19+nSp7WqaPr5u+lIdI2PPPPMMjhw5Il1CsGbNGsybN0/2/Zal5IX1cqxZJggCxo0bB6DomkS5rkerjUpOnefl5ZVZLzMzE9u3bwcA9O/fv9ykj6gkJnJUK/j6+krTk1u3bi1z6iw5ObnMBKvkxeParllbv359me95enpKF6Xv3LlT60PHawNfX1/pRogtW7aUec1XdnY2vvnmGwBFy5TUpl8U+vi66UvxMi+A9l+8uvLy8sLhw4elkdGVK1dqvaNRTiUffVfyDyp9mjNnDiwsLAAA7733Hq5duybLfmqbktf7avtDZP78+dKIc2lLLxFpw0SOagWlUindYRYXFyetGVZSQUEBJk6cWObSDcVLdABFSU1p1q1bh++//15rXxYsWACg6NmTL7/8stYLtPPy8rB27VpZn1OpjVKplNa6i4+PL/Uh36IoYtq0adKdntOmTavWPpZHX183fSiZ4F6/fl3WfbVt2xYHDx6Era0tgKIHtK9YsUJv8Tdv3lzu9+Xq1auxf/9+AEDTpk3x/PPP623/Jbm5ueGzzz4DUPTc4e7du1dorTRDn04v+XkuW7as1D9QP/nkE+mPlHHjxpW6/iGRNrxGjmqNhQsX4ptvvsGtW7cQGBiIuLg4jBs3Dk5OTvj777+xatUqnDlzBh07dix1etXHxwfe3t64cOEC1q1bh4yMDIwZMwaurq64efMmtm3bht27d6Nbt27SAp2lGTVqFA4ePIgtW7YgJiYGrVq1wuTJk9GjRw80bNgQOTk5uH79Oo4fP47vvvsODx48kKaOasLChQvx3Xff4Z9//sFHH32ECxcu4O2330ajRo2QkJCANWvWSL80/f39y1yQtKbo6+umr76Ym5sjNzcX77//PurVq4emTZtKd7o2btxYGlnSBz8/P+zfvx/9+/dHTk4OAgMDYWlpqZdke9GiRZg7dy5eeeUVPP/883jmmWdgbW2N7OxsnD9/Htu3b5c+TzMzM2zYsAH16pX+KyEqKkptFK3k8i/Xrl3TmC598803NWK89dZbSE5OxsKFC5GamopevXrhhRdewNChQ9G2bVs4ODhAFEWkpaXh3Llz2Lt3r9rlAPr83CtK1+MePHgwnn32WVy9ehWHDh3CwIEDMX36dLi6uuKff/7Bhg0bpBmG559/HhEREbIdC9VhNfE4CaKyXLhwQe2h4k9vb731ltZHI509e1asX79+me3btGkj3r59W+Nh5k8rKCgQ582bJz1QXNtmZWUlPnr0SK19ycdFafPGG29U6BFCPXr0EAGIPXr0KPX9hIQE0cvLS2s/u3XrJt6/f7/U9hXtb8nHTpX2CKyq0sfXTV/HMG/evDL7UbJ+ZR7RVdb3WbEjR46I5ubm0iO8vvjiC631K8LDw6Pc710Aopubm3jo0CGtsYq/Tyu6abNv3z7x2WefrXCsbt26iVFRUVX6DHR9RJc+jvuvv/6SHs+m7efa0z9DiCqKU6tUq7Ru3Rrx8fGYN28enn32WSiVSjg6OqJXr174+uuv8eWXX2pt3759e8TFxWHKlCnw8PCAqakpGjRogE6dOuHjjz/G6dOnK3R9mImJCZYvX46LFy9i7ty58PHxQf369WFiYgIbGxu0bt0aY8aMwZYtW5CSklIjowUlNW3aFOfOncOaNWvQo0cPODg4wNTUFM7OzhgwYAC2bt2KY8eO1aq7VUvS19dNH/773/9iw4YN6N69Oxo0aFDm0zL0qXfv3vjuu+9gZmYGURQxadIk6eL3qjpy5AjWr1+PESNGoG3btnB2dka9evVgbW2NZ555Bq+88go2bdqEK1euoF+/fno6kvINGTIEly5dwnfffYdJkyahTZs2aNiwIerVqwcbGxt4eHhg0KBBWLRoEeLj4xEVFYVu3bpVW//0rU2bNoiPj8ecOXPg5eUFS0tLWFpa4tlnn8WkSZMQHR2NL7/8ssZ/hpDhEkTRABdkIiIiIiLe7EBERERkqJjIERERERkoJnJEREREBorLjxCRTnJycpCQkFClts899xxMTU313CPDx8+UiCqKiRwR6eTMmTPo1atXldomJCSgadOm+u1QHcDPlIgqilOrRERERAaKy48QERERGSiOyBEREREZKCZyRERERAaKiRwRERGRgWIiR0RERGSgmMgRERERGSgmclTj5s6diyFDhtR0N8oVGBiIgQMHaq0zefJkjB49upp6RMaI5wsRlcREjnDgwAEIgqB1++WXX8qNM2vWLLz44ouV3n9cXBzat29f6XZvvvmm1D9TU1M0b94c7777LnJyctTqlOzT022cnZ3Rr18/fPnll1CpVOX2s127dlrrhISEYMOGDZU+lmJr165Fs2bNYG5uDl9fXxw/frzKsUgePF9qx/ly7NgxDBkyBI0aNYIgCPj++++rFIfI0DGRI/To0QMpKSnS5uDggPfee0+trF+/fuXGOXPmDDp16lTp/Z87d65Kv5gAYMCAAUhJScE///yDJUuWYO3atXj33Xcr1ObGjRv45Zdf0KtXL8ycORODBw9GQUGBTv1s0KABrKysqnIo2LVrF2bNmoXg4GCcPXsW3bt3x8CBA5GUlFSleCQPni+143zJyclBu3btsGbNmiq1J6ozRKISbt26JQIQ9+/fr/He+fPnxYEDB4o2Njais7OzOGfOHDEvL0/Mz88XTU1NRQDS1qlTJ6nd4sWLRW9vb9HS0lJ0cnISp0yZIubn54uiKIpJSUkiAPHatWuV7usbb7whDhs2TK1swoQJoouLS5l1SmsjiqJ45MgREYC4YcOGUveVkpIiAhC3b98udu/eXbSwsBB9fX3FuLg4qU5CQoIIQLxx44YoiqJ49epVEYD4008/ib179xYtLCzEFi1aiKdOnSp1H506dRKnTJmiVubl5SXOnz9f28dANYjnS82dLyUBEPfu3VtuPaK6iCNypObs2bMAAF9fX43yrl27okOHDoiNjcWuXbuwY8cOLF++HCYmJoiKigJQNJ2SkpKCgwcPAgBEUURhYSEiIiJw8eJFbN68Gbt378YXX3wh1bexsUHz5s310n8LCws8efKk0u169+6Ndu3a4bvvviv1/eLPJTQ0FMuWLUN0dDRsbGwwcuRIqU5cXBzs7e3h4eEBoGhEQhAEfPLJJ1iwYAHOnTuHJk2aYP78+Rrx8/PzERMTg4CAALXygIAAnDhxotLHQ9WD50vNnC9E9D/1aroDVLvExsaicePGcHJyUiufOHEixo4diyVLlgAAPD09MXHiRPz00094//33cfv2bTg4OGhcEyMIAhYvXiy99vDwQL9+/XD58mUA/7uORhAEnft++vRpfP311+jTp0+V2nt5eeGvv/4q9b24uDiYm5vj+++/R6NGjQAAS5cuRbdu3ZCamgoXFxecO3dO7fjPnTsHOzs77Nq1Cw0bNgQAvPjii1i3bp1G/Hv37qGwsBDOzs5q5c7OzkhNTa3S8ZD8eL7UzPlCRP/DRI7UxMbGokOHDmplly9fRkxMDLZt26ZWbmZmhry8PABFf4GXdmFzYmIiVq5cicjISCQnJ+PJkyfIzc1FSEgIgKpfuF3sp59+grW1NQoKCvDkyRMMGzYM4eHhVYolimKZvyDj4uIwfPhw6ZcSAOnanuKLvp++uPvcuXMYMmSI9EsJAP755x94enqW2Yen96+tT1TzeL7U7PlCRLzZgZ4SGxurMU0UHx8PU1NTtGjRQq384sWLaNOmDYDS71C7d+8eOnXqhHv37mHVqlWIiorCyZMnYWJiIv0y0vUXU69evRAXF4crV64gNzcX3333ncboSEVdunQJzZo1K/W90voZGxsLFxcXuLq6AtC8uPvcuXPw9/dXa3P27NlSj9fR0REmJiYao29paWkao3RUe/B8qZnzhYj+h4kcSe7fv4+bN29qjDDY2NigsLBQ7VqapKQk7N69W1oD6vz582jbtq1au/3796OgoAA7duxAQEAAWrdujWPHjiE/Px/t27dHdnY2EhISdPpBbWVlBU9PT3h4eMDU1LTKcX777TecP38er7zyisZ7jx49wrVr11BYWCiVqVQqhIeHS8szZGVl4caNG9Iv58zMTCQmJsLHx0ctVlm/iM3MzODr64vDhw+rlR8+fBhdu3at8nGRfHi+1Nz5QkT/w6lVksTExACAxi+mzp07o0GDBpg/fz6mT5+OGzduYPr06XjttdekBT9VKhX++usv3L59G1ZWVrCzs0ODBg2QlZWFffv2oVWrVvjxxx8REhKCxo0bo2HDhjh+/DhMTEzg7e1drceZl5eH1NRUFBYW4s6dOzhw4ABCQkIwePBgjBs3TqP+uXPnYGJigk2bNuGFF16Avb093nvvPeTk5OC9995Tq9O6dWu11yVHXRITE5Genl7mL6Y5c+Zg7Nix8PPzg7+/Pz7//HMkJSVhypQp+v8QSGc8X2r2fHn48CGuXbsmvU5ISEBcXBwaNGiAJk2a6PETIKrdOCJHkrNnz8LJyQmNGzdWK7ezs8MPP/yAqKgoeHt7Sxdyb9myRaqzZMkS7Nq1C40bN8aHH34IAPjXv/6F8ePHY+zYsXj++eeRnJyM4cOHSz+Yz507By8vLyiVSinO5s2bZb8m7MCBA3B1dUXTpk0xYMAAHD16FJ9++il++OEHmJiYaNQ/d+4cWrRogUWLFuGVV16Bj48PTE1NceLECdjY2JR6LMWvLSwspDhnz56Fvb09mjZtWmq/RowYgdDQUHz44Ydo3749jh07hv3790t39VHtwvOlZs+X6Oho+Pj4SKN4c+bMgY+PDxYuXKjnT4CodhNEURRruhNExRYtWoTIyEhERkbWdFeIaj2eL0TEqVWqVQ4ePIiwsLCa7gaRQeD5QkQckSMiIiIyULxGjoiIiMhAMZEjIiIiMlBM5IiIiIgMFBM5IiIiIgPFRI6IiIjIQDGRIyIiIjJQTOSIiIiIDBQTOSIiIiIDxUSOiIiIyEAxkSMiIiIyUEzkiIiIiAwUEzkiIiIiA2WwidyxY8cwZMgQNGrUCIIg4Pvvvy+3ze+//w5fX1+Ym5ujefPmWL9+vUadPXv2oFWrVlAqlWjVqhX27t0rQ++JiIiIdGewiVxOTg7atWuHNWvWVKh+QkICBg0ahO7du+Ps2bN47733MGPGDOzZs0eqc/LkSYwYMQJjx47FuXPnMHbsWAwfPhx//vmnXIdBREREVGWCKIpiTXdCV4IgYO/evXjxxRfLrBMYGIh9+/bh0qVLUtmUKVNw7tw5nDx5EgAwYsQIZGVl4ZdffpHqDBgwAPXr18eOHTtk6z8RERFRVdSr6Q5Ul5MnTyIgIECtrH///ti4cSOePHkCU1NTnDx5ErNnz9aoExoaWmbcvLw85OXlSa9VKhUePHgABwcHCIKg12MgMhSiKCI7OxuNGjWCQlH2wL9KpcLt27dhY2PD84WMUkXPFV1lZGTg4cOHOsextraGvb297h0ivTGaRC41NRXOzs5qZc7OzigoKMC9e/fg6upaZp3U1NQy44aEhGDx4sWy9JnI0N28eRNubm5lvn/79m24u7tXY4+IaqfyzhVdZGRkoHl9R6SjUOdYCoUC9+/fZzJXixhNIgdA4y/+4lnlkuWl1dE2UhAUFIQ5c+ZIrzMzM9GkSRP8a+IJmJpZ66Pbap7kF+g95tN8ujSVNf4zTeQdeXnO4Z6s8ZulHJM1/qOjR2SNDwBJJ/6WNX5OQSEGnz4LGxsbrfWK3395RgxMlfo/X5o/66j3mCW5ucr7I7Rpw0eyxvfCRVnjA4D1xShZ46f9Lu81zMnRt2SNn1NYiFcux5d7ruji4cOHSEchtpg3h6UOl8Y/ggpv5P6Dhw8fMpGrRYwmkXNxcdEYWUtLS0O9evXg4OCgtc7To3QlKZVKKJVKjXJTM2uYKuU4MZ/IEFOduaWtrPEtreRN5Kxt8sqvpAPbLEtZ45sozWSNDwDW9arn1C9vurT4fVOlNcxkOF/k/l62sJL3c7Sylje+DaxkjQ8ANpbmssZ/bGYqa3wrExNZ4xerjksLLKGApaDD8Rj8FfV1k8HetVpZ/v7+OHz4sFrZoUOH4OfnB1NTU611unbtWm39JCIikoNQT4BCh02ox+tYayODHZF7+PAhrl27Jr1OSEhAXFwcGjRogCZNmiAoKAjJycn46quvABTdobpmzRrMmTMHEydOxMmTJ7Fx40a1u1FnzpyJF154AcuXL8ewYcPwww8/4Ndff0VUlLxTA0RERHITTBUQhKqP3wiGv8hFnWSwI3LR0dHw8fGBj48PAGDOnDnw8fHBwoULAQApKSlISkqS6jdr1gz79+9HZGQk2rdvj48++giffvopXnnlFalO165dsXPnTmzatAlt27bF5s2bsWvXLnTu3Ll6D46IiEjPFCa6jcgpTDgiVxsZ7Ihcz549oW0JvM2bN2uU9ejRA7GxsVrjvvrqq3j11Vd17R4RERGR7Aw2kSMiIqKKE0wFCIqqj6oJKo7I1UZM5IiIiIyAop4AhQ6JnIKJXK1ksNfIERERERk7jsgREREZAU6t1k1M5IiIiIyAwkS3O08VhUzkaiNOrRIREREZKI7IERERGQHBRICgw4icAI7I1UZM5IiIiIyAzlOrTORqJU6tEhERERkojsgREREZAUGh412rIkfkaiMmckREREZAMFFAMKn6RJyAsh+LSTWHiRwREZER4DVydROvkSMiIiIyUByRIyIiMgKCwCc71EVM5IiIiIyAYAKdplYFXiJXK3FqlYiIiMhAcUSOiIjICOj8ZAcuP1IrMZEjIiIyAoJCAUGhw/IjOrQl+fCrQkRERLVKamoqfHx8YGJiAkEQYGFhgRkzZlS4fXx8PDw9PaFQKCAIAmxsbLBy5cpS665YsQI2NjYQBAEKhQKenp6Ij4/XqPf888/D2dlZ6pOnp2eVj0+fmMgREREZgeInO+iyVZfWrVvj3LlzGDlyJD755BN4eHggPDwc//73v8ttm5WVBV9fX9y4cQNTpkxBSEgIrK2tMW/ePISFhanVDQsLQ2BgIKytrRESEoIpU6YgISEBvr6+yMrKUqv7xx9/4NGjR/Dy8tLrseqKU6tERERGQOcFgavpGrnFixfjwYMHmDZtGsLDwwEAc+bMgYODA9avX4/Vq1fDzMyszPaTJk1CXl4eIiIiMGnSJADArFmzYG9vj+DgYMycOVOqGxwcDKVSiYSEBJibmwMA2rVrhylTpmDy5MnYsWOHVPfJkyeoV68obRKE2nO9IEfkiIiIqNYoTp6engodPXo0VCoVNm3apLX94cOHYWZmJiVxAGBubo4ePXogJycH0dHRAIDo6Gjk5OSgZ8+eUhIHAJMnT4apqSkOHTqkFrc4iattmMgREREZAX1NraakpODWrVvS9vQUpK6Sk5NhZWWlllwBQN++fQEAx48f19o+IyMDTk5OGuX+/v4AihI9ADh48KBaeUlOTk7IyMiodN9rQu1ML4mIiEivBEHHu1aForadOnVSK+/RowciIyN16ZqavLw82NraapR7eHgAAO7evau1vUqlgo2NjUZ5o0aNAAC3b99W+7dx48YadW1sbJCcnFy5jtcQjsgREREZAX2NyJ0+fRo3b96Utn379pW5z9DQ0KJHg1Vg27Vr1//6quUatIpcn1aZ9rXpereq4IgcERERVZirqyvc3NwqVLdnz54YN25cher6+fkBAJRKJR4/fqzxfmJiIgDA0dFRaxyFQlHqdG/xCJyrqyuA/43Q3bp1S6NudnY2FAaybh4TOSIiIiOg812rqsq3bd++PbZs2VKpNm5ubrh8+TJyc3PVrpM7cuQIAKB79+5a29vb2yMtLU2j/NSpUwCA/v37S/8uWLBAKi/p7t27sLe3r1S/a4phpJtERESkE0NZR27UqFEAgMDAQLXyHTt2QKFQ4K233tLaPiAgAPn5+di4caNUlpubi8jISFhZWaFDhw4AikYArayscPToUeTn50t1v/jiC+Tn50sJX23HETkiIiKqNRYuXIiwsDCEh4cjPT0d7du3x4YNG3Dv3j1MnTpVbQ25Fi1a4OrVq4iKikK3bt0AABEREdi7dy8mT56M2NhYeHh4IDQ0FHl5eVi+fLnavpYsWYLZs2ejadOmmDVrFhITExEREQGlUon169er1Q0LC0NSUpL0+v79+5g7dy4AYMKECWjZsqVcH4lWTOSIiIiMgCE9azU+Ph4DBgzA9u3bsXXrVpibm2P69On49NNP1eqpVCoAgCiKUpmtrS2io6MxbNgwrFu3DqIowtraGsuXL1dbDBgoWig4NzcXS5cuRWBgIARBQLNmzbBv3z6NO2c/+OADZGZmSq8zMjKwatUqAIC7uzsTOSIiIpKPrtOj1fmILhcXF8TFxZVb79q1a6WWe3t74/r16xXa1/z58zF//vxy69XWdeV4jRwRERGRgeKIHBERkREwpBE5qjgmckREREaAiVzdxKlVIiIiIgNl0Inc2rVr0axZM5ibm8PX11frg3TffPPNUh8J0rp1a6nO5s2bS62Tm5tbHYdDREQkm6IROYUOG0fkaiODTeR27dqFWbNmITg4GGfPnkX37t0xcOBAtTVeSgoLC0NKSoq03bx5Ew0aNMBrr72mVs/W1latXkpKitrK0kRERIZIUAjS0x2qsjGRq50MNpFbtWoVxo8fLy3CFxoaCnd3d6xbt67U+nZ2dnBxcZG26OhopKena6wQLQiCWj0XF5fqOBwiIiJZGcqTHahyDDKRy8/PR0xMDAICAtTKAwICcOLEiQrF2LhxI/r27QsPDw+18ocPH8LDwwNubm4YPHgwzp49qzVOXl4esrKy1DYiIiKi6mCQidy9e/dQWFgIZ2dntXJnZ2ekpqaW2z4lJQW//PILJkyYoFbu5eWFzZs3Y9++fdixYwfMzc3RrVs3XL16tcxYISEhsLOzkzZ3d/eqHRQREZGMdLs+TrenQpB8DPqrIgjqw7yiKGqUlWbz5s2wt7fHiy++qFbepUsXvP7662jXrh26d++Ob775Bi1atEB4eHiZsYKCgpCZmSltN2/erNKxVJSp0lTW+AAQHfWPrPGvJorlV9LBpbsNZY1/vXEvWeNb9ZP/Qc0e3b1k30dtcO3yXVnj37xdIGv8f9IsZY1/EW1kjQ8A2d49ZI3v3KerrPHdOzeRNX514tRq3WSQ68g5OjrCxMREY/QtLS1NY5TuaaIo4ssvv8TYsWPVHrxbGoVCgY4dO2odkVMqlVAqlRrlNvWtYWZurTV+VTg66T/m09zd5L25w6dptqzxvZ7EAY/ki28ZX7Hp+6q6c/SkrPEB4NYZef/gyC8srFR9ewcrKGU4X9q1sdF7zJJc7J8AeCJbfE+7FNliA0CTG5GyxgeAx6dO4rGM8RN/vyBjdCD5aJqs8R+JlTtXiJ5mkCNyZmZm8PX1xeHDh9XKDx8+jK5dtf919vvvv+PatWsYP358ufsRRRFxcXFwdXXVqb9EREQ1jSNydZNBjsgBwJw5czB27Fj4+fnB398fn3/+OZKSkjBlyhQARVOeycnJ+Oqrr9Tabdy4EZ07d4a3t7dGzMWLF6NLly549tlnkZWVhU8//RRxcXH47LPPquWYiIiI5KLrdW68Rq52MthEbsSIEbh//z4+/PBDpKSkwNvbG/v375fuQk1JSdFYUy4zMxN79uxBWFhYqTEzMjIwadIkpKamws7ODj4+Pjh27Bg6deok+/EQERERVZbBJnIA8M477+Cdd94p9b3NmzdrlNnZ2eHRo7Ivnlq9ejVWr16tr+4RERHVGnzWat1k0IkcERERVQynVusmflWIiIiIDBRH5IiIiIyBIBRturSnWoeJHBERkREQBB2vkWMiVysxkSMiIjICvEaubuJXhYiIiMhAcUSOiIjICHD5kbqJiRwREZER4NRq3cSvChEREZGB4ogcERGRERAUuk2PChz6qZWYyBERERkBXiNXNzG/JiIiIjJQHJEjIiIyBgpF0aZLe6p1mMgREREZAUEQdHo6A5/sUDsxvSYiIiIyUByRIyIiMgJcR65uYiJHRERkBHjXat3ERI6IiMgYCDre7MCF5GolflWIiIiIDBRH5IiIiIyBjlOr4NRqrcREjoiIyAgIggKCDtOjurQl+fCrQkRERGSgOCJHRERkDBSCbtOjnFqtlZjIERERGQGuI1c38atCREREZKA4IkdERGQEuCBw3cREjoiIyBgIgm6L+gpM5GojTq0SERERGSiOyBERERkBTq3WTRyRIyIiMgYKhe5bNUlNTYWPjw9MTEwgCAIsLCwwY8aMCrePj4+Hp6cnFAoFBEGAjY0NVq5cWWrdFStWwMbGBoIgQKFQwNPTE/Hx8Wp1tm3bhjZt2sDc3Fyq16BBA3zyySc6Hac+cESOiIjICAiCAEGH69x0aVtZrVu3Rnp6OkaNGgVfX198/vnnCA8PR2FhIT777DOtbbOysuDr64uCggJMmTIFTZo0QVhYGObNmwczMzPMnDlTqhsWFobAwEC4uLggODgYSUlJiIiIgK+vL9LS0mBrawsACA0NxT///IMBAwage/fuyMjIQEREBN59911cuXIFn3/+uayfhzZM5IiIiKjWWLx4MR48eIBp06YhPDwcADBnzhw4ODhg/fr1WL16NczMzMpsP2nSJOTl5SEiIgKTJk0CAMyaNQv29vYIDg5WS+SCg4OhVCqRkJAAc3NzAEC7du0wZcoUTJ48GTt27AAAbNmyBa1bt1bbz/vvvw87Ozts2rSpRhM5Tq0SEREZA0HHadVqetZqcfL09FTo6NGjoVKpsGnTJq3tDx8+DDMzMymJAwBzc3P06NEDOTk5iI6OBgBER0cjJycHPXv2lJI4AJg8eTJMTU1x6NAhqezpJA4AzMzM4O7ujoKCgsofpB4xkSMiIjICxTc76LIBQEpKCm7duiVtWVlZeu1ncnIyrKys1JIrAOjbty8A4Pjx41rbZ2RkwMnJSaPc398fQFGiBwAHDx5UKy/JyckJGRkZWveTm5uLGzduwMLCQms9uXFqlYiIiCqsU6dOaq979OiByMhIvcXPy8uTrk0rycPDAwBw9+5dre1VKhVsbGw0yhs1agQAuH37ttq/jRs31qhrY2OD5ORkrfvp27cvnjx5gnfffVdrPbkZ9Ijc2rVr0axZM5ibm8PX11drlh4ZGSld6Flyu3z5slq9PXv2oFWrVlAqlWjVqhX27t0r92EQERHJT1DovgE4ffo0bt68KW379u0rc5ehoaGl/u4tbdu1a9f/uqrlxoqK3HRRmfZVuYnjjTfewB9//AFfX18sW7as0u31yWBH5Hbt2oVZs2Zh7dq16NatGyIiIjBw4EBcvHgRTZo0KbPdlStX1DL9hg0bSv8/efIkRowYgY8++ggvvfQS9u7di+HDhyMqKgqdO3eW9XiIiIhkpRCKNl3aA3B1dYWbm1uFmvTs2RPjxo2rUF0/Pz8AgFKpxOPHjzXeT0xMBAA4Ojpq76ZCUep0b/EInKurK4D/jdDdunVLo252djYUZSy38vbbb+Orr76Cl5cXTp8+rbUv1cFgE7lVq1Zh/PjxmDBhAoCirP/gwYNYt24dQkJCymzn5OQEe3v7Ut8LDQ1Fv379EBQUBAAICgrC77//jtDQUOniSyIiIqqY9u3bY8uWLZVq4+bmhsuXLyM3N1ftOrkjR44AALp37661vb29PdLS0jTKT506BQDo37+/9O+CBQuk8pLu3r1baq7w9ttvY9OmTXj22WcRHx9fZrJXnWq+B1WQn5+PmJgYBAQEqJUHBATgxIkTWtv6+PjA1dUVffr0wdGjR9XeO3nypEbM/v37a42Zl5eHrKwstY2IiKi2EQSFzlt1GDVqFAAgMDBQrXzHjh1QKBR46623tLYPCAhAfn4+Nm7cKJXl5uYiMjISVlZW6NChA4CiEUArKyscPXoU+fn5Ut0vvvgC+fn5UsJXbMKECdi0aROaN2+Oixcv1ookDjDQEbl79+6hsLAQzs7OauXOzs5ITU0ttY2rqys+//xz+Pr6Ii8vD1u3bkWfPn0QGRmJF154AUDRStKViQkAISEhWLx4sY5HREREJDM9Ta3KbeHChQgLC0N4eDjS09PRvn17bNiwAffu3cPUqVPV1pBr0aIFrl69iqioKHTr1g0AEBERgb1792Ly5MmIjY2Fh4cHQkNDkZeXh+XLl6vta8mSJZg9ezaaNm2KWbNmITExEREREVAqlVi/fr1Ub86cOdi4cSMsLCwwb948bN68WS3O8OHDS71BozoYZCJX7OkLFEVRLPOixeeeew7PPfec9Nrf3x83b97Exx9/LCVylY0JFE2/zpkzR3qdlZUFd3f3Sh1HZdxLewhHJ2vZ4gPAzVu5cHczL79iFZ29YQOfptmyxb9s2h5eT+Jki/+odVdYxmsf+dWFcy9/3Dl6Urb4AODW0R23ztyUdR+1wbnz2WjXRvPuNX1JzTCFi/0T2eJfy3SFp12KbPGTmvZEkxuRssUHAIsu/nh8Sr7vZ48e3kj8/YJs8Rv3ckLyUc1pOpJXfHw8BgwYgO3bt2Pr1q0wNzfH9OnT8emnn6rVU6lUAIp+VxeztbVFdHQ0hg0bhnXr1kEURVhbW2P58uVqiwEDRQsF5+bmYunSpQgMDIQgCGjWrBn27dunlpgV39Dx+PFjTJkyRaO/Xl5eeP755/V2/JVhkImco6MjTExMNEbK0tLSNEbUtOnSpQu2bdsmvXZxcal0TKVSCaVSqVHe0NkaSgv9/wJxcCh7NWt9edZNBaBQtvit6ifJFhsAGqXGyhq/MPoE5PvVDaSeviRj9CK3Tmu/rV5X+arKff80amQFc0srvffDy0OEnN/Lrjby/UECAM2eXAI0r/nWG+t/5D1XACDr5J+yxr956rqs8e/8eR+CqXwjUYIoyPktqr4vhQKCDtOBurStLBcXF8TFxZVb79q1a6WWe3t74/r1in1vzJ8/H/Pnz6/SfmqD2jHBW0lmZmbw9fWVFvUrdvjwYXTt2rXCcc6ePSvdvQIUjdI9HfPQoUOViklERFQrCYLuG9U6BjkiBxTNV48dOxZ+fn7w9/fH559/jqSkJGnIMygoCMnJyfjqq68AFN2R2rRpU7Ru3Rr5+fnYtm0b9uzZgz179kgxZ86ciRdeeAHLly/HsGHD8MMPP+DXX39FVFRUjRwjERGR3iiEokdt6dKeah2DTeRGjBiB+/fv48MPP0RKSgq8vb2xf/9+aeXnlJQUJCX9bwovPz8f7777LpKTk2FhYYHWrVvj559/xqBBg6Q6Xbt2xc6dO7FgwQK8//77eOaZZ7Br1y6uIUdERES1ksEmcgDwzjvv4J133in1vafvKJk3bx7mzZtXbsxXX30Vr776qj66R0REVHvoOj3KqdVayaATOSIiIqoYQ7rZgSqOXxUiIiIiA8UROSIiImNQ4sH3VW5PtQ4TOSIiImMg6PhkB14jVysxvSYiIiIyUByRIyIiMgK6Pvhel7YkHyZyRERExkCh49QqFwSulZheExERERkojsgREREZA961WicxkSMiIjIGfLJDncREjoiIyBgoFEWbLu2p1uFXhYiIiMhAcUSOiIjIGPAauTqJiRwREZEx4PIjdRLTayIiIiIDxRE5IiIiYyAIOk6tckSuNmIiR0REZAy4/EidxKlVIiIiIgPFETkiIiJjwHXk6iQmckRERMaAU6t1EtNrIiIiIgPFETkiIiJjwAWB6yQmckRERMZA0PEaOSZytRITOSIiImPAa+TqJKbXRERERAaKI3JERETGgNfI1UlM5IiIiIwBp1brJKbXRERERAaKI3JERETGgE92qJOYyBERERkBURAg6jA9qktbkg/TayIiIiIDxRE5IiIiYyAIOt61yhG52oiJHBERkTHg8iN1Er8qRERERAaKI3JERERGgDc71E0GPSK3du1aNGvWDObm5vD19cXx48fLrPvdd9+hX79+aNiwIWxtbeHv74+DBw+q1dm8eTMEQdDYcnNz5T4UIiIieRVPreqyUa1jsF+VXbt2YdasWQgODsbZs2fRvXt3DBw4EElJSaXWP3bsGPr164f9+/cjJiYGvXr1wpAhQ3D27Fm1era2tkhJSVHbzM3Nq+OQiIiI5FP8ZAddNqp1DHZqddWqVRg/fjwmTJgAAAgNDcXBgwexbt06hISEaNQPDQ1Ve71s2TL88MMP+PHHH+Hj4yOVC4IAFxcXWftOREREpA8GOSKXn5+PmJgYBAQEqJUHBATgxIkTFYqhUqmQnZ2NBg0aqJU/fPgQHh4ecHNzw+DBgzVG7J6Wl5eHrKwstY2IiKjWKX6ygy4b6UVGRobeYhnkV+XevXsoLCyEs7OzWrmzszNSU1MrFOOTTz5BTk4Ohg8fLpV5eXlh8+bN2LdvH3bs2AFzc3N069YNV69eLTNOSEgI7OzspM3d3b1qB0VERCSj4psddNmo6goKCtCnTx+YmJigfv36iIyMBAB0794db775ZpXjGmQiV0x46ptKFEWNstLs2LEDixYtwq5du+Dk5CSVd+nSBa+//jratWuH7t2745tvvkGLFi0QHh5eZqygoCBkZmZK282bN6t+QBVw/36+rPEB4Ooteb8tLqY3kTX+bZcOssY38esqa3yXTi1ljQ8Abp0ay76P2uByory/eFKybWSNn2Aq7/fCw+bynisAYOvfWdb47l2ekTW+c2cHWeNT6VJTU+Hj4wMTExMIggALCwvMmDGjwu3j4+Ph6ekJhUIBQRBgY2ODlStXllp3xYoVsLGxgSAIUCgU8PT0RHx8vFqdP//8E40aNYKpqal0I6SlpSVee+21Ct8QGRAQgGPHjmHy5Mlq5X5+ftizZ0+Fj+1pBnmNnKOjI0xMTDRG39LS0jRG6Z62a9cujB8/Ht9++y369u2rta5CoUDHjh21jsgplUoolUqNcltbU5hbmmqNXxWuDeXPvVu5pMsav0nhdSBPvvi2N2LlCw7gUWyMrPFTY67JGh8Akk/ckTV+gaqwUvVdGwqwsNJ/0uVWX947zhtZ3JU1vuv987LGN7kUA5WsewDSY+PLr6SD1L9uyRs/6p6s8UVRlDW+GgNaELh169ZIT0/HqFGj4Ovri88//xzh4eEoLCzEZ599prVtVlYWfH19UVBQgClTpqBJkyYICwvDvHnzYGZmhpkzZ0p1w8LCEBgYCBcXFwQHByMpKQkRERHw9fVFWloabG1tAQD379+HhYUFxo4di5YtW+Lx48fYvXs3du/ejb/++gtXrlwp95iOHz+OZcuW4T//+Q/WrVsnlffr1w9hYWFV/KQMNJEzMzODr68vDh8+jJdeekkqP3z4MIYNG1Zmux07duDtt9/Gjh078K9//avc/YiiiLi4OLRp00Yv/SYiIqopoqCAqEMypkvbyli8eDEePHiAadOmSTNic+bMgYODA9avX4/Vq1fDzMyszPaTJk1CXl4eIiIiMGnSJADArFmzYG9vj+DgYLVELjg4GEqlEgkJCdIKFe3atcOUKVMwefJk7NixAwAwaNAgDBo0SG0/CxcuRJMmTfD3338jKytLSvrKUlBQgK5dNWd0CgoKdEroDXZqdc6cOfjiiy/w5Zdf4tKlS5g9ezaSkpIwZcoUAEVTnuPGjZPq79ixA+PGjcMnn3yCLl26IDU1FampqcjMzJTqLF68GAcPHsQ///yDuLg4jB8/HnFxcVJMIiIikldx8vT0VOjo0aOhUqmwadMmre0PHz4MMzMzKYkDAHNzc/To0QM5OTmIjo4GAERHRyMnJwc9e/ZUW2Zs8uTJMDU1xaFDh8rtq729PQBoTSyLWVpaYtu2bRrlq1evLjcJ1MZgE7kRI0YgNDQUH374Idq3b49jx45h//798PDwAACkpKSorSkXERGBgoIC/Pvf/4arq6u0lczMMzIyMGnSJLRs2RIBAQFITk7GsWPH0KlTp2o/PiIiIr0ykHXkkpOTYWVlpbGGa/HlUNoW/weKfpeXvP69mL+/P4CiRA+A9FCA4vKSnJycSr2zVKVSITc3FwkJCZg5cybOnz8Pf3//Cq03O2fOHKxfvx4DBw4EAHz88cfw8vJCZGQkgoKCym1fFoOcWi32zjvv4J133in1vc2bN6u9Lr47RJvVq1dj9erVeugZERFR7SJCx6nV/x/7SUlJUSu3tbXVaUTpaXl5eaXGKx6ouXtX+7WpKpUKNjaaNyI1atQIAHD79m21fxs31rz5y8bGBsnJyRrlgwYNUnsqVLdu3RAVFaW1P8U++ugjmJubSyONP//8M2xsbLBs2TLMnz+/QjFKY7AjckRERFT9OnXqBHd3d2kbOnRomXVDQ0NLffRladuuXbukdtpWoKjI6hSVaV+ReMVWrFiBLVu2YNmyZejcuTP++OMPtG3btsLtg4ODkZGRAVEUIYoisrKydBqNAwx8RI6IiIgqSNfp0f9ve/r0abi6ukrF2kbjevbsqXa9ujZ+fn4AilaDePz4scb7iYmJAIpWrtBGoVCUujh/8Qhccd+LR+hu3dK88zk7OxuKUhZAbtu2rZS4BQUFYeDAgThw4AB27NiBUaNGae3Xli1bUFBQgPHjx6uVb9y4EaamphX+nJ7GRI6IiMgYCIKOy48UJXKurq5wc3OrUJP27dtjy5YtldqNm5sbLl++jNzcXLVrz44cOQKgaAFdbezt7ZGWlqZRfurUKQBA//79pX8XLFgglZd09+5d6UYGbfr164cDBw7g1KlT5SZy//73vzXWkAOAK1euYO3atVVO5Di1SkREZAQM5ckOxQlRYGCgWvmOHTugUCjw1ltvaW0fEBCA/Px8bNy4USrLzc1FZGQkrKys0KFD0ULYfn5+sLKywtGjR5Gf/7/F9r/44gvk5+dLCZ8233//PQCgY8eO5dbNycnBkCFDNMoHDx6MnJycctuXhSNyREREVGssXLgQYWFhCA8PR3p6Otq3b48NGzbg3r17mDp1qtpSHy1atMDVq1cRFRWFbt26AShapWLv3r2YPHkyYmNj4eHhgdDQUOTl5WH58uVq+1qyZAlmz56Npk2bYtasWUhMTERERASUSiXWr18v1evRowfu3r2LXr16oUWLFrhz5w5++OEHXLx4EW5ubnj99dfLPS5BEPD333+jZ8+eauWXLl2q1HV6T2MiR0REZAwM6MkO8fHxGDBgALZv346tW7fC3Nwc06dPx6effqpWT6UqejZJyQV1bW1tER0djWHDhmHdunUQRRHW1tZYvny52pJjQNFCwbm5uVi6dCkCAwMhCAKaNWuGffv2qV3798ILL2Dt2rVYv369tE8rKyu88sorpa4NVxo3NzfMmzcPAwYMQJMmRY+qTExMRGBgYKl3zlYUEzkiIiIjIEKAiKqP/OjStrJcXFwQFxdXbr1r10p/pKG3tzeuX79eoX3Nnz+/3OU/PvroI3z00UcVileW7777Dv7+/vDw8JCuv8vMzISpqanakiaVxWvkiIiIiGTm5+eH5ORkjBkzBm5ubnjmmWcwYcIEpKeno3PnzlWOyxE5IiIiI2Aoz1qty5ycnCo8FVtRTOSIiIiMgQFdI1dXHTx4EFu3bkVqaqp0rV2x3377rUoxmcgRERERyWzcuHHYunUrFAoFzMzMdLpTtSSm10REREbAUNaRq6u+/vprDBgwAIWFhXj8+DEePXqktlUVR+SIiIiMAK+Rq1mFhYUaixzrg96+Kqmpqfjxxx/x008/4c6dO/oKS0RERGTwnn32WXz++ed6j6uXEbmvv/4aCxcuRN++faFSqTBnzhx8+OGHGDlypD7CExERka4EQXpeapXbU5U1a9YMO3fuxOnTp9GyZUu1J1QAwJ49e6oUVy+J3PLly3HmzBnUr18fAJCeno6ePXsykSMiIqotdJxa5V2ruvntt99gYmKCxMREJCYm6i2uXhI5lUoFa2tr6bW1tbXGbbVERERUcwzpyQ510ZMnT2SJq5dE7vXXX0fXrl3xyiuvACh6DMXYsWP1EZqIiIioznj48CGOHz+OXr16wdzcXOd4eknkAgMD0bdvX0RFRQEA1q1bB19fX32EJiIiIj3gXas16969e+jatSuuXr0KADh69Ch69uyJdu3awdXVFQcOHKhSXL18Vd577z0888wzmDlzJmbOnInmzZsjODhYH6GJiIhIHwT874aHKm01fQCGrW/fvkhOTsZnn32mVj548GAcO3asynH1ksj98ssvsLe3l17Xr18fv/zyiz5CExERERm8CxcuICwsDO+8845aee/evfH48eMqx9XL1GphYSEePnwo3fCQlZUl20V9REREVHkiFBB1GL/RpS0V5Uqenp4a5ffv39cprl4SuenTp6Nbt24YMWIEAGDXrl2YPXu2PkITERGRHuj6mC0+oks3dnZ2WLNmDXr27AkAUCiKEuMlS5bAwcGhynH1kshNnDgRXbp0QWRkJICiBYJbt26tj9BEREREBm/58uWYMmWKlB/NnDkTSUlJePDgAbZu3VrluHobJ3306BEcHBwwffp0uLq64tatW/oKTURERDoqvmtVl42qbvLkyfjuu++Qm5sLpVKJixcvwtbWFrt378brr79e5bh6GZFbtGgRYmNjcfnyZYwePRqPHz/GyJEjpeVIiIiIqGZxQeCa8+jRI7Rr1w4bNmzA9evX9RpbL+n1999/jx9++AFWVlYAgMaNGyM7O1sfoYmIiIgMmqWlJa5duyZLbL0kckqlEgAg/P+FkBkZGdL/iYiIqOZxarVmeXp6YvXq1XqPq5ep1alTp2LEiBG4d+8elixZgl27diEwMFAfoYmIiEgPeNdqzWratCl+/PFHuLm5oXXr1mrPqAeAPXv2VCmuXhK5MWPGoHPnzjhy5AhEUcTOnTt51yoREVEtwmvkalZkZCRMTExw584d3LlzR29xdU7kVCoVOnbsiLi4OLRs2VIffSIiIiKqU+R6UILOE94KhQKdOnVCfHy8PvpDREREMuA1crXDw4cP8csvvyA3N1cv8fQytXr69Gn4+PigRYsWsLS0hCiKEAQBp0+f1kd4IiIi0hGnVmvWvXv30LVrV1y9ehUAcPToUfTs2RPt2rWDq6srDhw4UKW4eknkfvjhB32EISIiIqqT+vbti+Tk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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACC1klEQVR4nO3deVxUVf8H8M8dhGEHAVkURY3MBRfEDZdHTUUtlxZzTc1cIM21Egwz9VF51FIMc8lMTU0tzbRyIxOX1BQUS1JTQ1EEVzZRhmXu7w9+3BgHhmXmAsN83q/XfcmcOed7zwWu8+Wce+4VRFEUQURERERGR1HZHSAiIiKi8mEiR0RERGSkmMgRERERGSkmckRERERGiokcERERkZFiIkdERERkpJjIERERERkpJnJERERERoqJHBEREZGRYiJHREREZKSYyBEREREZKSZyZLI2btwIQRAgCAJu3LhR2d0hIiIqMyZyREQGcu/ePfz000+YM2cO+vbtCxcXF+mPhbfeeqvUcQralLR169atxFjZ2dlYv349+vTpAw8PDyiVStja2uKFF17A22+/jdOnT5e6X2q1Gj/88APeeecdtGzZEm5ubrCwsIC9vT0aNmyIgQMH4n//+x/+/vvvUseUg6F+DkTGoEZld4CIqLpwc3Or7C5ouHXrFl5++WX8+eefGuXZ2dn4+++/8ffff2PDhg2YPn06Pv30UwiCUGysffv24b333sPly5e13svJyUFGRgbi4+Oxd+9ezJo1C127dsWiRYvQsWNHgx9XSaraz4FITkzkiIhkULduXTRp0gSHDh0qd4x33nkHEydOLPZ9GxubYt/Lzc3VSOJatGiBGTNm4IUXXkBGRgZOnDiBTz/9FJmZmVi+fDk8PDzwwQcfFBlr8eLFmDVrFkRRBAB06tQJ/fv3h6+vL5ydnZGVlYW7d+/it99+w88//4wrV67g6NGjmD9/Pg4cOFDu4zcEQ/wciKoyJnJERAYyZ84ctG3bFm3btoWbmxtu3LiBBg0alDueq6srfHx8ytV2z549UhLn7++P48ePw8zMTHq/V69eGDBgAPz9/ZGTk4OwsDBMnz4dNWpofix8/fXXCAkJAQC4uLhg69atCAgIKHKfr732Gj755BP8+OOPmDVrVrn6DeRfvzpmzBh4eXmV6/pVQ/8ciKoyJnJERAYyb968yu6C5LfffpO+njVrlkYSV8DPzw/9+vXD7t27kZKSgsuXL2skjomJiQgKCgKQP/p37NgxNGnSROd+BUHAgAEDEBAQgB9//NFAR1M2VennQCQ3LnagaislJQUhISFo3LgxrKys4Orqip49e+K7774rVfuLFy9iwYIF6N27Nzw9PaWLxJ9//nmMHj26TBeJnzlzBuPHj0ejRo1ga2sLGxsbNG7cGJMmTcLVq1eLbTd37lzpIm0ASE9Px9y5c9G8eXPY2trCzc0NL730Ek6ePKnR7t69e5g9ezaaNWsGGxsbODs7Y+DAgTh//nyJfc3OzsaqVavQvXt31KpVCxYWFnB3d8dLL72ELVu2QK1Wl7q/WVlZWLp0KVq3bg07OzvY2dmhXbt2WLlyJXJzc0vzrSuTyt5/VZKdnS193bBhw2LrPffcc9LXKpVK471ly5bh6dOnAIAFCxaUmMQVZmlpiTfeeKPU9asylUqFDRs24JVXXkHdunVhbW1d4kKUsvz/QKQXkagaiouLEz08PEQARW5vv/22uGHDBul1fHy8RvsjR44U27bwFhISorMfOTk54jvvvKMzhrm5ufjFF18U2f7jjz+W6iUkJIiNGjUqMoaZmZn47bffiqIoihcuXBDr1KlTZD2lUikePny42P7euHFDbNKkic7+du7cWXz48GGJ/U1OThZbtmxZbJz+/fuLeXl5Or9/ZVXZ+39WfHy8tL/Ro0eXul1Bm48//rjc+16xYoUUZ+/evcXWe/XVV0UAoiAIYlpamlSuVqtFFxcXEYBoa2srpqenl7svZVVwbnp5eRkkXnl/DqIoihcvXiz2vCtuEwRBzMjIMEjfiUrCRI6qndTUVNHT01P6T3XIkCHivn37xOjoaPGbb74R27RpIwIQ27ZtW2wiFxkZKdrY2IiDBw8W16xZI0ZFRYnnzp0TDxw4IH766aeil5eX1Parr74qti+jRo2S6vXt21fcsmWLeObMGfHs2bPiunXrxGbNmun8sC2cmLRv3160trYWZ82aJR49elQ8e/asuHz5ctHe3l4EINrZ2Yn//POPWLduXdHJyUlcuHCheOLECfH3338X582bJ1pYWIgAxHr16okqlUprXxkZGWLDhg2l/b3yyivi3r17xejoaPG7774Tu3btKr3n7+8v5ubm6uxvx44dRQsLC3HKlCliZGSkGBMTI37zzTcaieKaNWvK/gPWobL3/yx9E7mmTZuKjRo1Ei0tLUVbW1vR29tbHDVqlPjrr7+WGOPevXvS70anTp2K/HmdO3dO+r0YNmyYxnt//vmnxu9uRaoqiVx8fLzo5uYmtR0wYIC4c+dOMSYmRty/f784ePBgjQSuT58+4sCBA8WxY8capN9EpcFEjqqdGTNmSP+xLlq0SOv97OxsMSAgQOM/4GcTufv374spKSnF7kOlUom9evWSPmyK+pDcuXOnFH/dunVFxnn69Kn44osvigDE+vXrizk5ORrvF05MlEqlePr0aa0YP//8s1SnVq1aoouLi3jt2jWtep9//rlU7/vvv9d6//3335fenz17ttb7arVaHDFihFRn1apVWnUK99fc3Fw8cuSIVp2HDx9KH44tWrQo8vtSXpW9/2fpm8jp2l555RUxNTVVZ5zvv/9etLKyEgGIvr6+4qZNm8RTp06JkZGR4ty5c0U7OzsRgNiqVSsxKSlJo+3WrVulfYWGhpbn8MutKiRyarVa7NSpk9Ru7dq1RdYbNmyYVOe7774zSH+JyoKJHFUrWVlZYs2aNaUP6eKmzm7duiWam5sXm8iVRmxsrNQ+Ojpa630/Pz8RgPjqq6/qjPPXX39JcSIjIzXeK5yYBAcHFxuj8AhhcaNMT548ES0tLUUA4vTp0zXey8rKEh0dHaVRoKISU1EUxbS0NNHZ2Vmq96zC/Z0xY0ax/Q0JCZHqlZSMlEVl7/9Z5U3krK2txaFDh4rr1q0Tjx8/Lp4/f148dOiQGBoaKn3/AYhdu3YVs7OzdcaKi4sTx44dKwqCoJUMurm5icuWLRMfP36s1a7w1Gx4eLjOfVy8eFH8888/i9yKil2SqpDIbd++XWrz3nvvFVvvzJkzUr1JkyYZpL9EZcHFDlStxMTEICUlBQAwevRoKBRF/4p7enoWewuFoqhUKiQkJOCvv/7CxYsXcfHiRemeWgBw4cIFjfqJiYmIiYkBAAwePFhn7CZNmsDFxQUAcOrUqWLrDR06tNj3WrRoASB/xWBx+7OyssLzzz8PAPjnn3803ouJiUFqaioA4K233ipyhSMA2NvbS/H/+usvJCUlFdunESNGFPuen5+f9HV8fHyx9fRR2fvXR2JiIrZt24Zx48ahc+fOaNWqFXr16oUFCxYgLi4Ovr6+AICjR49i9erVxcbJycnBN998gx9//FHj97XA3bt3sW3bNkRFRWm9l5GRIX1ta2urs78tW7ZE8+bNi9zOnj1byqOuWlauXAkAcHZ2xty5c4ut16pVK+n/mcTExIroGpEGJnJUrRS+g33btm111m3Xrp3O9zMzMxEWFoaWLVvCxsYGXl5eaNasmfQBVfBhCgAPHjzQaBsdHS19PWzYsBJXuBW0T05OLrY/jRo1KvY9R0dHAPn3+apZs2aJ9Qp/SAP5K3QLtG/fvtj2z75fuN2zGjduXOx7Tk5O0tfP9sVQKnv/+ij4ORXFzc0NO3fuhIWFBQAgIiKiyHqZmZno2bMnFi5ciIcPH2LmzJm4dOkSVCoV0tLScOjQIXTu3Blnz55F//79sWLFCo32dnZ2GrEMTdf5MGbMGADAzZs3ddbbuHGjwfsF5J+HJ06cAAAMHz5cZyJrbm4uJXLF/eFIJCf+1lG1UjAaB+TfTFUXXY/xuXHjBpo3b44PP/wQf/zxB/Ly8nTGKrhFQ4F79+6Vorfanjx5Uux71tbWxb5X8AGiq07hes8ez6NHj6SvS3q8kbu7e5HtnlWa/hbVF0Op7P3LqWHDhujVqxcA4Nq1a7hz545WnY8//hjHjh0DAKxfvx6LFy9G48aNpWej9urVC0eOHEH37t0hiiJmzJiBP/74Q2rv7OwsfX3//n2d/cnNzYWYf6kORFHExx9/bIjDrDQF3zcAJY7cP3z4ULqVTd26dWXtF1FReENgqlYKTx/pem7ks3WfNXLkSMTHx0ujA0OHDkWTJk1Qq1YtKJVKAPkPEC+Ygnw2VuHkYOvWrdLUZ0l0jaZVFH2+b1RxmjZtip9//hlA/pRe7dq1pfdEUcSGDRsA5I/kjh49usgYNWrUwH//+1907twZarUaGzZswPLlywHkT5cWOHfunMH7/+zzXwvbs2cPZs+ejdq1a+PgwYPF1vP09DR4vwDNkebC34eiFJ46LmkWgEgOTOSoWik8ZXb37l2d05HFjZpdvnxZmlaZNWsWFi5cWGS9wqN/zyo8miEIQrkfs1RRCn/fkpOTdX7f7t69W2Q7qli6Euq7d+9Ko6WFLwEoSuHrBS9fvix93axZMzg7O+Phw4c4fvw4MjMzdT7btax0nRMFlyaYm5tXyrmTkJAgfe3h4aGzbkEyLQgCXnzxRVn7RVQUTq1StdK8eXPp65Iusi7u/bi4OOlrXQsMCl8H96zCH57G8LDuwh+Wv//+u866Z86cKbIdVay//vpL+rrwaBwAjeellvQEi5ycnCLbCYKAUaNGAci/jlCu69GqosJPL3n2aReFpaWlYevWrQCA3r17l5j0EcmBiRxVK35+ftL05ObNm4sdtUhMTCw2wSr8wafrmrU1a9YU+563tzeaNm0KANi+fbvGX/hVkZ+fn3SB/aZNm4q9biwjIwPffvstgPypPX5wVY5//vkHkZGRAPKvl6tTp47G+05OTrC3tweQvxJaVzJ39OhR6etnHyw/Y8YMWFlZAQA+/PBDXLt2zSD9r+oKX1+r6w+2kJAQaWQ+ODhY9n4RFYWJHFUrSqVSWvEWGxuLpUuXatXJzc3F+PHjNZ5FWVjBLTqA/KSmKKtXr8YPP/ygsy+zZ88GkP+8z9dee03nBeMqlQqrVq1CVlaWzphyUSqVGDduHID8EcmiHjouiiLeffddaYXtu+++W6F9NBU//vijzsTr7t27GDRokDSSNmnSJK06CoUCL7/8MgDgzp07Oi8PKJyA9OvXT+N9T09PfP755wDyn/PbpUuXIm9VUlRcY9a5c2fp60WLFhX5B+Gnn34q/TE3atQodOvWraK6R6SB18hRtTNnzhx8++23uH37NoKDgxEbG4tRo0bB1dUVf//9N5YtW4azZ8+ibdu2RU6v+vr6wsfHBxcvXsTq1auRmpqKESNGwMPDA7du3cKWLVuwc+dOdOrUCb/99lux/Rg2bBgOHjyITZs2ISYmBk2bNkVgYCC6du2KWrVqITMzE9evX8fx48fx/fff49GjR9JUVmWYM2cOvv/+e/zzzz/473//i4sXL+Ltt99G7dq1ER8fj5UrV0of4v7+/pgwYUKl9bWqOnHihMaoVeHb0ly7dk1revKtt97SijF58mTk5OTg9ddfh7+/P+rXrw8rKys8ePAAUVFRWLNmDR4+fAggP+EoKpED8n+ee/bswZMnTzB37lzExMRg9OjRaNiwIbKysnD69GmEh4dLo8U9evQocoXmmDFjkJiYiDlz5iA5ORndu3fHf/7zHwwYMAAtWrSAs7MzRFHEvXv3cOHCBezevVtj+r1gRK8i6ftz6NevH55//nlcvXoVhw4dQt++fTF58mR4eHjgn3/+wbp166QR/c6dO2Pt2rWyHQtRiSr+HsRE8rt48aLo7u5e7OONxowZI909HkU82eH8+fPSEyKK2po3by7euXNHel3cw81zc3PFmTNnimZmZiU+csnGxkZ88uSJRvvCTyrQZfTo0aW6E37B81K7du1a5Pvx8fFi48aNdfazU6dO4sOHD4tsX9r+HjlyRKpX1GO0yquy91/wcyjtVpTCT+nQtb3++us6HyMnivnPDC548L2u7cUXXxQfPXqkM9bevXvF559/vtTH1qlTJ/HEiRPl+j7q+2QHQ/wc/vjjD42naBT3/8iz5yxRReOIHFVLzZo1Q1xcHBYvXozdu3cjISEBdnZ2aN68OcaPH49hw4bpvHi7VatWiI2NRVhYGPbv3487d+7Azs4O3t7eGDx4MCZNmgRLS8sS+2FmZobFixdj7Nix+OKLL/Drr7/ixo0bSE9Ph7W1NerVq4dWrVohICAAr776aqWMXhRWv359XLhwAevWrcN3332HixcvIj09HU5OTvD19cWIESMwfPhw3vhURps2bcLRo0dx6tQp/PPPP3jw4AHS09Nha2uLunXromPHjhg9ejT8/f1LjNWzZ09cvnwZ69evx/79+xEXF4fU1FTUqFED7u7uaNu2LYYPH44BAwaUeNuZ/v3746WXXsLevXtx4MABnDp1CsnJyUhJSYGVlRWcnJzQrFkztGvXDm+88YZ0jaixat68OeLi4rBkyRLs27dPGrmsU6cOunfvjgkTJmis+CWqLIIo8qZQRERERMaIf1YTERERGSkmckRERERGiokcERERkZHiYgciqhIyMzMRHx9frrYvvPACzM3NjXLfRET6YCJHRFXC2bNn0b1793K1jY+PR/369Y1y30RE+uDUKhEREZGR4u1HiIiIiIwUR+SIiIiIjBQTOSIiIiIjxUSOiIiIyEgxkSMiIiIyUkzkiIiIiIwUEzmqdO+99x769+9f2d0oUXBwMPr27auzTmBgIIYPH15BPSJTxPOFiApjIkc4cOAABEHQue3fv7/EONOmTcMrr7xS5v3HxsaiVatWZW731ltvSf0zNzdHw4YN8f777yMzM1OjTuE+PdvGzc0NvXr1wldffQW1Wl1iP1u2bKmzTlhYGNatW1fmYymwatUqNGjQAJaWlvDz88Px48fLHYvkwfOlapwvx44dQ//+/VG7dm0IgoAffvihXHGIjB0TOULXrl2RlJQkbc7Ozvjwww81ynr16lVinLNnz6Jdu3Zl3v+FCxfK9cEEAH369EFSUhL++ecf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kCFD8PDhQ8yfPx9JSUnw8fHBvn37pBsGJiUladxTLjs7G++//z4SExNhZWWFZs2a4eeff8ZLL70k1enYsSO2b9+O2bNn46OPPsJzzz2HHTt2oH379hV+fEREREQlMdpEDgAmTpyIiRMnFvnexo0bNV7PnDkTM2fOLDHmoEGDMGiQvBfPEhERVTgjmlql0jPqRI6IiIhKx5gWO1Dp8adCREREZKQ4IkdERGQKCj34vtztqcphIkdERGQKBD2fzsBr5KokptdERERERoojckRERCZAEBTSg+/L256qHiZyREREpkDfB9/zhsBVEtNrIiIiIiPFETkiIiJTwFWr1RITOSIiIlPAJztUS0zkiIiITIFCkb/p056qHP5UiIiIiIwUR+SIiIhMAa+Rq5aYyBEREZkC3n6kWmJ6TURERGSkOCJHRERkCgRBz6lVjshVRUzkiIiITAFvP1ItcWqViIiIyEhxRI6IiMgU8D5y1RITOSIiIlPAqdVqiek1ERERkZHiiBwREZEp4A2BqyUmckRERKZA0PMaOSZyVRITOSIiIlPAa+SqJabXREREREaKI3JERESmgNfIVUtM5IiIiEwBp1arJabXREREREaKI3JERESmgE92qJaYyBEREZkAURAg6jE9qk9bkg/TayIiIiIjxRE5IiIiUyAIeq5a5YhcVcREjoiIyBTw9iPVEn8qREREREaKI3JEREQmgIsdqiejHpFbtWoVGjRoAEtLS/j5+eH48ePF1v3+++/Rq1cv1KpVC/b29vD398fBgwc16mzcuBGCIGhtWVlZch8KERGRvAqmVvXZqMox2p/Kjh07MG3aNISGhuL8+fPo0qUL+vbti4SEhCLrHzt2DL169cK+ffsQExOD7t27o3///jh//rxGPXt7eyQlJWlslpaWFXFIRERE8il4soM+G1U5Rju1umzZMowdOxbjxo0DAISHh+PgwYNYvXo1wsLCtOqHh4drvF60aBH27NmDH3/8Eb6+vlK5IAhwd3eXte9EREREhmCUI3LZ2dmIiYlBQECARnlAQABOnjxZqhhqtRoZGRlwcnLSKH/8+DG8vLzg6emJfv36aY3YPUulUiE9PV1jIyIiqnIKnuygz0YGkZqaarBYRvlTefDgAfLy8uDm5qZR7ubmhuTk5FLF+PTTT5GZmYnBgwdLZY0bN8bGjRuxd+9ebNu2DZaW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y5Ytw6BBg/Dhhx9CoVAgLCxM5u9K8Ti1SkREZAJEdf6mT/uKEhcXhz59+mDr1q3YvHkzLC0tMXnyZHz22Wca9dTq/E4VXuBob2+P6OhoDBw4EKtXr4YoirC1tcXixYs1bgYM5N8oOCsrCwsXLkRwcDAEQUCDBg2wd+9ejWv/3nzzTZiZmeG9997DV199hby8PNSoUQONGjXCpk2bNG5/VtGYyBEREVGV4u7uXqrrzq5du1ZkuY+PD65fv16qfYWEhCAkJKTEesOGDau0pzfowkSOiIjIBIgQNUauytOeqh4mckRERCZAVANqI5lapdLjYgciIiIiI8UROSIiIhMginpOrVbU/UeoTJjIERERmQC1mL/p056qHk6tEhERERkpjsgRERGZAFEtQtRjWE2ftiQfJnJEREQmQN/HbPESuaqJU6tERERERoojckRERCZArRah1mN6VJ+2JB8mckRERCaAtx+pnpjIERERmQBRrd/TGfhkh6qJ18gRERERGSmOyBEREZkAtShCrcf0qD5tST5M5IiIiEwAr5Grnji1SkRERGSkOCJHRERkAnj7keqJiRwREZEJ4JMdqidOrRIREREZKY7IERERmQBRFPV68D0XO1RNTOSIiIhMgKjn7UeYyFVNnFolIiIiMlIckSMiIjIBolrPqVWuWq2SmMgRERGZACZy1RMTOSIiIhOgFvM3fdpT1cNr5IiIiIiMFEfkiIiITACnVqsnJnJEREQmQBRFvW4hwtuPVE2cWiUiIiIyUkaZyKWkpGDkyJFwcHCAg4MDRo4cidTUVJ1tBEEoclu6dKlUp1u3blrvDx06VOajISIikp9anf/g+/JvlX0EVBSjnFodPnw4bt++jQMHDgAAJkyYgJEjR+LHH38stk1SUpLG6/3792Ps2LF4/fXXNcrHjx+P+fPnS6+trKwM2HMiIqLKwanV6snoErlLly7hwIEDOH36NNq3bw8AWLduHfz9/XHlyhW88MILRbZzd3fXeL1nzx50794dDRs21Ci3trbWqktERERUFRnd1OqpU6fg4OAgJXEA0KFDBzg4OODkyZOlinH37l38/PPPGDt2rNZ7W7duhYuLC5o1a4b3338fGRkZOmOpVCqkp6drbERERFVNwapVfTaqeoxuRC45ORmurq5a5a6urkhOTi5VjE2bNsHOzg6vvfaaRvmIESPQoEED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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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q9XYuHGjzvZHjhyBlZWVlMQBgLW1Nbp06YLMzExERUUBAKKiopCZmYmuXbtqJFfjxo2DpaUlDh8+bPCx3L17V/r6jTfeQEpKCu7evVvkpi+9Erk333wTCQkJiIqKwsGDB6XyHj16YPny5Xp3hoiIiORhKtfIJSYmwtbWVmvkqmfPngCAEydO6GyflpZW5MMJCgadjhw5AgDSShsF5YW5uroiLS1Nq3z//v3StXEODg4IDQ3V2RcvLy/pejsvLy+dm770XkfO3d0d7u6aj74JCJB/lXAiIiKqOElJSRqvHRwcjHpZlUqlKjJewfJiDx480NlerVZL1/EXVrt2bQDAvXv3NP6tU6eOVl17e3skJiZKr+3s7ODj44O+fftKN0N8++23WLRoEe7evYvNmzcX2Zfw8HC88MIL0tdy0DuRS0tLw4YNG3DlyhUIgoCmTZti1KhRcHSU9zmgREREVHbGutnh+UGbLl26IDIyssg24eHhGk9L0mXHjh0YPHgwAO3nnhem673S1Hn+vdLEa926Na5cuaJRtnTpUri4uGDLli2IiIgo8tq3wtfjFf7amPRK5KKiotC7d2/Y2NggICAAoihi+fLlWLRoEQ4fPow2beR7oDgRERGVnbESubNnz2qshaZrNK5r164YOXJkqeK3bdsWQP4zzLOysrTeL1gVw8VF9/OoFQoFMjIytMoLRuAK+l4wQlfU9WmPHz+GQqH76rPq1aujS5cuOHjwIH777Tf0799fq86uXbt0xihM3zVs9Urkpk6dildeeQXr169HtWr5IXJzczF69GhMmTIFx48f16szREREJA8Rht2wUJDIeXh4wNPTs1RtWrduXey0Y3E8PT1x9epVZGdna4xyHT16FACkdWyL4+TkJD1NobAzZ84AAHr37i39O3v2bKm8sAcPHsDJyanEvoqiCACwsLAo8v233nqrxBjPxyorvW52iIqKQnBwsJTEAUC1atUwc+ZM6W4QIiIiorIaOnQoACA4OFijfPv27VAoFHjvvfd0tg8KCkJOTg42bNgglWVnZyMyMhK2trbSrGHbtm1ha2uLY8eOIScnR6r79ddfIycnR0r4ivP06VMcP34cgiCgR48eRdY5efKktIWEhKBatWoYNmwYfvjhB/zwww8YNmwYLC0tERISonNfuug1Iufg4ICEhAT4+PholN+5c6fICwyJiIioYqkhQG3A1Kohbctizpw5WLFiBVauXInU1FS0bt0a69evR0pKCj744AONNeQaN26M69ev4+TJk+jUqRMAICIiAnv27MG4ceMQExMDb29vhIeHQ6VSYfHixRr7WrBgAaZOnYp69ephypQpuH37NiIiIqBUKrF27Vqpnr+/P549e4auXbuiQYMGuHr1KrZu3YqsrCyMGjWq2HXtCvoE/G8E8D//+Y9U9uabb6Jx48ZYvHgxwsLC9Pq89ErkBg8ejFGjRuHzzz9Hx44dIQgCTp48iY8//ljKpImIiKjyMKUnO8TFxaFPnz7Ytm0btmzZAmtra0ycOFHrMaBqtTq/b4WmJR0cHBAVFYWBAwdizZo1EEURdnZ2WLx4sdYNB1OmTEF2djYWLlyI4OBgCIKA+vXrY9++fRrX/rVs2RI//PADLl26BFEUIQgCatasidDQUMyaNatUx5SZmQl/f3+tcn9//yKvCSwtvRK5zz//HIIgYOTIkcjNzQWQ/2DYDz74AP/3f/+nd2eIiIiI3N3dERsbW2K9GzduFFnu6+uLmzdvlmpfISEhJU5tbty4scSFiEtiY2ODCRMm4MUXX5Suv8vIyMCECRNgY2Ojd1y9EjkrKyusWLECYWFhuHnzJkRRRMOGDVG9enW9O0JERETyMfTpDOX1ZIeq6quvvsKoUaNQs2ZNKZErWHS48PV8ZaVXIhcWFgY3Nze8//77aNGihVT+zTff4MGDB1oXKBIREVHFEmHY9Kh+91RSgffeew8DBgzAlClTcOXKFYiiCF9fX3z++edFPomitPRK5CIiIvDdd99plTdv3hxDhgxhIkdERET0HBcXF2zdutWoMfVK5JKTkzUWAyxQq1YtrUd3EBERUcXj1GrVpNc6cl5eXvjvf/+rVf7f//5XWimZiIiIKo+Cu1YN2ajy0WtEruAJDs+ePUP37t0B5K+4PHPmTEyfPt2oHSQiIiKioumVyM2cOROPHj3Chx9+KK2GbG1tjeDg4FKvp0JERETlh1OrVZNeiZwgCFi8eDE+/fRTXLlyBTY2NmjUqBGUSqWx+0dERERGIAJQG9ieKh+9ErkCdnZ2aNeunbH6QkRERDLhiFzl9MILL+DRo0dITU3Vq71BiRwRERER6c/NzQ0KhV73ngJgIkdERGQWTOlZq+bk1KlTBrVnIkdERGQGOLVaNTGRIyIiIpKBv79/qetGR0frtQ8mckRERGaAU6vl759//pF9H0zkiIiIzIBazN8MaU9lo++dqGWh/20SRERERFQmR48excKFC/Ho0SMAgFptyOp+HJEjIiIyC5xarVjXr19H+/btpVG6Tp06oWvXrvDx8YGDgwOioqL0issROSIiIjNQcNeqIRvpr0+fPlAoFDh79qxG+XvvvYdLly7pHZcjckREREQyu3XrFrZv3671RKxOnTpBpVLpHZeJHBERkRkQxfzNkPakP7VajRo1amiVx8fHQxD0H+3k1CoREZEZUEMweCP91apVC/Pnz5deKxQK5ObmYvbs2ahdu7becTkiR0REZAb4ZIeK9fXXX+PVV19FrVq1AADDhg3DgwcPkJubiyNHjugd1yRH5FJTUzFixAg4OjrC0dERI0aMQFpaWrH1nz17huDgYLRo0QK2traoXbs2Ro4ciXv37mnU69q1KwRB0NiGDBki89EQERFRVffKK68gNjYWzZo1g6urK3JyctCuXTtER0eje/fuesc1yRG5YcOG4e7duzh48CAAYOzYsRgxYgR+/vnnIus/ffoUMTEx+PTTT9GqVSukpqZiypQpeOWVV7Ru9x0zZozG0KeNjY18B0JERFROeI1cxXn69Cnq1KmDHTt24I8//jBqbJNL5K5cuYKDBw/izJkzaN++PQBg/fr1CAwMxLVr19CkSROtNo6OjlrDlitXrkRAQAASEhJQt25dqbx69epwd3eX9yCIiIjKGdeRqzjVq1dHeno6FArjT4Sa3NTq6dOn4ejoKCVxANChQwc4Ojri1KlTpY6Tnp4OQRDg5OSkUb5t2za4uLigefPmmDFjBh4/fqwzjkqlQkZGhsZGREREVFibNm3w6aefGj2uyY3IJScnw9XVVavc1dUVycnJpYqRnZ2NkJAQDBs2DA4ODlL58OHDUb9+fbi7u+PSpUuYNWsWLly4oPMixLCwMMybN6/sB0JERFSO+KzVipWTk4Po6GhUr14d3t7eqF69usb70dHResWtNCNyc+fO1brR4Pmt4Hq2otZbEUWxVOuwPHv2DEOGDIFarcbq1as13hszZgx69uwJX19fDBkyBLt27cJvv/2GmJiYYuPNmjUL6enp0nbnzp0yHnnZPLj6QNb4APDw2l1Z42devSFrfEX8FVnjN045KWt8X48UWeMDQJfOLrLvozJIuZYka/y0y/L+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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIPklEQVR4nO3deVxUVf8H8M8dhAFZRWRREBdSFFwQRdF8pFTUcqkncystc8E09x7BMNMel0cthTCX1NTU0NIsS3PJJDU1BcUSl9RQFCFEWRRlEOb+/uDHjXFgGGYBhvm8X6/7kjlzzveeO3Dlyzn3niuIoiiCiIiIiEyOrLo7QERERES6YSJHREREZKKYyBERERGZKCZyRERERCaKiRwRERGRiWIiR0RERGSimMgRERERmSgmckREREQmiokcERERkYliIkdERERkopjIEREREZkoJnJEBrJp0yYIggBBEHDjxo3q7g4REZkBJnJERDXU2bNnsWjRIvTr1w9eXl6Qy+Wws7NDixYt8Oabb+LYsWMVxoiLi5P+wHh6s7GxgZeXF/r374/169cjPz+/Co5KXUZGBn744QfMnTsX/fr1g4uLi9THN998s1r6RGQq6lR3B4iISF2PHj1w9OhRtfKCggJcvXoVV69exebNmzFy5EisX78eVlZWld5Hfn4+bt++jdu3b2Pv3r346KOPsGfPHrRo0cIQh6A1Nze3Kt0fUW3CRI6IqAZKTU0FADRs2BCvvvoqunfvjsaNG6OoqAgnT57Exx9/jNTUVGzZsgWFhYX48ssvK4z59ttvY+LEidLrR48eITExEVFRUbh06RKuXLmCvn37IikpCTY2NkY7Nk28vLzQqlUrHDx4sFr2T2RqOLVKRFQD+fr6YseOHUhJSUFUVBReeeUVdOrUCV26dMH06dORmJgojZzFxsZqNc3q6uoKf39/aQsKCsL48eORkJCAoKAgAEBycjI2bNhQqb6WXB/apEmTSh8nAMydOxfff/890tPTkZKSgrVr1+oUh8gcMZEjIqqBfvjhBwwZMgQWFhZlvu/i4oKPP/5Yer1z506d92VjY4OFCxdKr3/88UedY+li/vz56N+/P6dYiXTARI5IS1lZWYiIiICvry9sbGzg6uqKXr164euvv9aq/YULF7BgwQL06dMHnp6e0oXrzzzzDN544w2cOnVK676cPn0a48aNQ4sWLWBnZwdbW1v4+vpi0qRJuHr1arnt5s2bJ11EDgC5ubmYN28e2rRpAzs7O7i5ueGFF17AiRMnVNplZGRgzpw58PPzg62tLerXr49Bgwbh3LlzFfa1oKAAq1atwnPPPYcGDRrAysoK7u7ueOGFF7B161YolUqt+5ufn49ly5ahQ4cOsLe3h729PYKCgrBy5UoUFhZq89FVytP7z87OxgcffAA/Pz/Y2dnB2dkZISEh2LZtm8H3rY2QkBDp6+vXr+sVq0uXLtLXN2/e1CtWdVMoFNi4cSNeeukleHl5oW7duuXe8FGyVeb8I6pRRCKqUFJSkujh4SECKHN76623xI0bN0qvk5OTVdofOXKk3Lalt4iICI39ePLkifj2229rjGFpaSl+9tlnZbb/4IMPpHopKSliixYtyoxhYWEhfvXVV6IoiuL58+fFRo0alVlPLpeLhw8fLre/N27cEFu1aqWxv88++6x47969Cvubnp4utmvXrtw4AwYMEIuKijR+fpVVev9//fWX2Lx583L3P3jwYPHJkycG3X9F7t27p3L8ZSn9s/fBBx+UG+vx48dSPV9f30r1o+Rn39vbu1LtypOcnCz15Y033qhU2wsXLpT7c13eJgiC+ODBA4P0naiqcUSOqAI5OTno06cP0tLSAABDhw7Fvn37EB8fjy+//BIdO3bE559/jlWrVpUbo7CwELa2thgyZAjWrFmDuLg4nD17Fvv378fHH38Mb29vAMD//vc/bNy4sdw4Y8aMwerVqwEA/fr1w9atW3H69GmcOXMG69atg5+fH548eYLx48fj+++/13hcr776Km7fvo3Zs2fjl19+wZkzZ7BixQo4ODigqKgIY8aMQXJyMvr374/Hjx9j4cKFOH78OH777TfMnz8fVlZWUCgUGD16NAoKCtTiP3z4EM8//zwuXboEAHjppZewZ88exMfH4+uvv0aPHj0AAMePH0f//v1RVFSksb///ve/cenSJUyZMgWHDh1CQkICvvzyS7Rq1QoA8P3332PdunUaY+hj6NChSE5OxoQJE/DTTz/hzJkz2LBhg3Sd2s6dOzFjxgyj7b8sv/zyi/S1r6+vXrF+//136euGDRvqFau63LhxAz179sSff/4JABg4cCB27tyJhIQE/PjjjxgyZIhK/b59+2LQoEF46623YGdnVx1dJtJfdWeSRDXdjBkzpL/cFy1apPZ+QUGBGBoaqvIX/tMjcnfv3hWzsrLK3YdCoRB79+4tjWoUFhaq1dm5c6cUf926dWXGefz4sfj888+LAMQmTZqojRCVHmGSy+XiqVOn1GLs3btXqtOgQQPRxcVFvHbtmlq9Tz/9VKr3zTffqL3/7rvvSu/PmTNH7X2lUim+9tprUp1Vq1ap1SndX0tLS/HIkSNqde7duye6ubmJAMS2bduW+bnoqvT+AYhffvmlWp3c3FxppFAmk4m///67QftQnqKiIjEoKEjq25kzZ8qsp+2I3KBBg6R6H374YaX6UhNG5JRKpditWzep3dq1a8usN3z4cKnO119/bZD+ElUnJnJEGuTn54v16tWTkoTypu5u3bolWlpalpvIaSMxMVFqHx8fr/Z+YGCgCEB8+eWXNca5ePGiFOfQoUMq75VOTMLDw8uN4e3tLdVbs2ZNmXUePXokWltbiwDE6dOnq7yXn58vOjk5iQDE1q1bl5mYiqIo5uTkiPXr15fqPa10f2fMmFFufyMiIqR62dnZ5darrNL779+/f7n1fvvtN6nexIkTDbZ/TT766CNpn5p+JjQlco8ePRJPnDghDhgwQKrj4OAgZmRkVKovNSGR2759u9Rm5syZ5dY7ffq0VG/SpEkG6S9RdeLUKpEGCQkJyMrKAgC88cYbkMnKPmU8PT0RGhqqdVyFQoGUlBRcvHgRFy5cwIULFyCKovT++fPnVeqnpqYiISEBANSmh57WqlUruLi4AABOnjxZbr1hw4aV+17btm0BAIIglLs/GxsbPPPMMwCAv/76S+W9hIQEZGdnAwDefPPNcu+8dHBwkOJfvHhRmr4uy2uvvVbue4GBgdLXycnJ5dbTx+jRo8t9LygoCH5+fgCAn376ySj7L+2XX35BREQEgOIlRUqm2ysyf/58lQv869ati65du0rT8A4ODti1axcaNGhgtL4by8qVKwEA9evXx7x588qt1759e+k8Llmrj8iUMZEj0uCPP/6Qvu7UqZPGuiXrcJUnLy8PixcvRrt27WBrawtvb2/4+fmhTZs2aNOmDQICAqS6mZmZKm3j4+Olr4cPH17hHXgl7dPT08vtj6bV+52cnAAUL3FRr169Cus9ePBApfzChQvS1507dy63/dPvl273NE3XgDk7O0tfP90XQ9H2+3/16tUyrxk0lKSkJLz88ssoLCyEXC7HV199pfeyHV5eXpg8eTL++OMP9OrVq8w6mn7eSpLcmzdvaqy3adMmvfpZnvT0dBw/fhwAMGLECI3Xu1laWkqJXHl/mBGZEj7ZgUiDktE4oHjkQxNNv0xv3LiB559/XuvRosePH6u8zsjI0Krd0x49elTue3Xr1i33vZJfcJrqlK739I0K9+/fl76uKMlwd3cvs93TtOlvWX0xFG2//6IoIisryyhroiUnJyM0NBRZWVmwsLBAbGysdNOINp5+soO1tTXq16+vMVk3BaUfZVbRyPi9e/ekpWq8vLyM2i+iqsBEjkiD0tOdJWuJaVP3aSNHjkRycrI0ejFs2DC0atUKDRo0gFwuBwAolUppCvLpWKWTk23btklTnxWpCb+g9fncapLqPo47d+6gV69euHPnDgRBwOeff46XX365UjFKnuygi9Kj00/77rvvMGfOHDRs2BAHDhwot56np6dO+65I6ZHcdu3aaax75swZ6euKRlmJTAETOSINSk/Z/f333xqnI8sbNbt8+bI07TN79myVFfRLKz3697T69etLXwuCoPMv46pS+nNLT0/X+Ln9/fffZbaraf7++2+NIzgl339BEAyeQGdmZqJ3797StYgxMTEYNWqUQfdREU0/cyVT/5aWltXys5mSkiJ97eHhobHu3r17ARR/n55//nmj9ouoKvACASIN2rRpI31d+i/5spT3flJSkvS1phsMSl8H97TS18+ZwsPES/8y/+233zTWPX36dJntahptv//PPPMMrKysDLbfknUML168CKB4rcFJkyYZLH5tUPrpIAqFotx6OTk50lM4+vTpU2HSR2QKmMgRaRAYGCiNrmzZsqXc6bPU1NRyE6zSj47SdM3amjVryn3Px8cHrVu3BgBs375dZQSiJgoMDJRuhNi8eXO51609ePAAX331FQCgdevWNfoX6+bNm8t9Lz4+XpreK+9mAV08evQIL774Is6ePQsAiIyMRHh4uMHi1xalr1/U9AdRRESENPLNz5FqCyZyRBrI5XLpjrzExEQsW7ZMrU5hYSHGjRtX7p2KJUt0AOUnA6tXr8a3336rsS9z5swBUPy80X//+9+4e/duuXUVCgVWrVqF/Px8jTGNRS6XY+zYsQCKRyTnz5+vVkcURbzzzjvSHbbvvPNOlfaxsvbs2SMlnaU9fPgQ48ePB1B800VYWJhB9ldQ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MYYNGyYtR0JERETVq/Sivrq2J908evQI7dq1w7p167Se8tWWQdLrb7/9Ft999x1sbW0BFD/u4sGDB4YITURERGTS6tatW+71fPoySCInl8sB/POYi+zsbJ0eeUFERETGwanV6uXj44MVK1YYPK5BplbffvttDB06FJmZmViwYAF27NihtpAfERERVR9Tumu1NmrSpAm+//57eHp6ws/PT+UZ9QCwa9cuneIaJJF77bXX0LlzZxw+fBiiKGL79u28a5WIiKgG4TVy1SsuLg4WFhb4+++/8ffffxssrt6JnFKpRKdOnZCYmIhWrVoZok9EREREtYqxHpSg94S3TCZDUFAQkpKSDNEfIiIiMgJeI1czPHz4ED/++CPy8/MNEs8gU6unT59GQEAAWrRogbp160IURQiCgNOnTxsiPBEREemJU6vVKzMzE127dsXVq1cBAEeOHEFISAjatWsHDw8P7N+/X6e4BknkvvvuO0OEISIiIqqVevXqhdTUVHz66aeYNGmSVN6/f3+97mY1yDipt7d3mRsRERHVDCL0nFo13MOgzNKFCxcQHR2NiRMnqpQ///zzePz4sc5xtf6uPHjwAO+++y58fX3h4uKC5s2b44UXXsDChQtx+fJlnTtARERExlcytarPRrorKiqCj4+PWvm9e/f0iqt1Ijdq1Cjs3LkTb7zxBv73v/9h6tSp+Pnnn/Hll1/Cz88PgwYNQmpqql6dqaxVq1ahadOmsLa2RmBgII4dO6ax/i+//ILAwEBYW1ujWbNmWLNmjVqdXbt2oXXr1pDL5WjdujV2795trO4TERGRmXB0dMTKlSul1zJZcQq2YMEC1K9fX+e4WidyBw8exLfffovZs2dj7NixmDJlCiwtLfH9998jOTkZ7u7uCAoKQnJyss6dqYwdO3Zg2rRpiIyMxLlz59C9e3f069cPKSkpZdZPTk7GCy+8gO7du+PcuXN47733MGXKFJUF+E6ePImhQ4di5MiROH/+PEaOHIkhQ4bgt99+q5JjIiIiMpbiBYH1mV7liJw+lixZgl27dknr7E6dOhX169fHH3/8gaioKJ3jap3Iubm5IS8vr8z3GjdujLVr12LSpEmYOnWqzp2pjOXLl2PMmDEYO3YsWrVqhaioKHh5eWH16tVl1l+zZg0aN26MqKgotGrVCmPHjsVbb72Fjz76SKoTFRWF3r17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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACKVElEQVR4nO3deVxUVf8H8M8MwrCDgCyK4oKKgiuKWyamopZmq2vaYgq5bwmG+WipPGgphKnk/pihZVlW5pJJamqKiiYuuaAoQm4sijAIc39/8OPGOMOwzFxgmM/79bovmTPnfO+5A1e+nHPvuTJBEAQQERERkdGRV3cHiIiIiKhymMgRERERGSkmckRERERGiokcERERkZFiIkdERERkpJjIERERERkpJnJERERERoqJHBEREZGRYiJHREREZKSYyBEREREZKSZyREREREaKiRyRFhs3boRMJoNMJsP169eruztUQ/DngohqGiZyREQ1wKlTp7B48WIMHDgQDRs2hEKhgK2tLVq0aIG33noLhw4dqlC8lJQUzJo1C61atYKNjQ2cnJwQEBCATz75BI8fP1are/36dTFB1WerSnfu3MFPP/2EefPmYeDAgXBxcRH78dZbb1VpX4iqU53q7gARkanr1asXDh48qFGen5+Py5cv4/Lly9i0aRNGjx6NtWvXwsLCQme8n3/+GaNGjUJWVpZY9vjxY5w4cQInTpzA2rVrsWvXLjRt2tTgx1JV3NzcqrsLRDUCEzkionJ66623JBntSU1NBQDUr18fr7/+Onr27IlGjRqhsLAQR48exaefforU1FRs3rwZBQUF+Oqrr0qNdebMGQwdOhSPHz+Gra0t5syZg969eyM3Nxdbt27FmjVrcOnSJbzwwgs4ceIEbG1t0aBBA/z111+lxuzfvz9u376N+vXrY8+ePQY/fn01bNgQrVq1wt69e6u7K0RVTyAiDRs2bBAACACE5OTk6u4O1XIvvPCCsG3bNqGgoEDr+3fv3hVatGgh/kwePHiw1FiBgYECAKFOnTrCkSNHNN5fsmSJGGfBggXl6p+Xl5cAQPDy8ipX/bIUn1/6xJs3b57w448/Cunp6YIgCEJycrJ4XG+++aZB+klkDHiNHBFRNfvpp58wdOhQmJmZaX3fxcUFn376qfh6+/btWuudOHEC8fHxAICxY8eiW7duGnVmzpyJVq1a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UBYLCwt07twZly5dUiv/+++/4eXlVU29MhxBEKBUKgH8+4vp8uXLOHDgAJydnau5d8bLFM8XnitEtR8TOSM2ePBgLFq0CI0aNYKvry9Onz6NZcuW4Z133qnurunt0aNHuHLlivg6OTkZiYmJcHJyQqNGjfD+++9j2LBhePbZZ9G7d2/s3r0bP/74I+Lj46uv05XwwQcfYODAgWjYsCEePnyIrVu3Ij4+Hrt370ZBQQFee+01nDp1Cj/99BMKCwuRnp4OoOhuPQsLi2ruvXGprecLzxWeK2TiqntulyovOztbmDp1qtCoUSPB0tJSaNq0qRAeHi4olcrq7preDhw4IADQ2N58802xzrp16wRvb2/B0tJSaNeunfD9999XX4cr6Z133hG8vLwECwsLoV69ekKfPn2EvXv3CoIgCMnJyVo/AwDCgQMHqrfjRqi2ni88V3iukGnjOnJERERERorryBEREREZKSZyREREREaKiRwRERGRkWIiR0RERGSkmMgRERERGSkmckRERERGiokcERERkZFiIkdERERkpJjIUa10//59uLq64vr169XWh9deew3Lli2rtv0TlQfPFSLjxkSODOrZZ5+FTCbT2EaNGlWl/YiIiMDgwYPRuHFjsSw9PR1Tp06Ft7c3LC0t4ebmhmeeeQarV6/G48ePyxV38ODB6Nu3r9b3jh49CplMhlOnTgEA5s2bh0WLFiE7O1vv46Hah+cKzxUig6juZ4RR7aFSqQQ7Ozvhk08+EdLS0tS2hw8fVlk/Hj9+LDg6OgpHjhwRy65evSq4u7sLPj4+wrZt24Tz588LZ8+eFbZv3y48//zzwg8//FCu2Dt27BBkMplw/fp1jffeffddoX379mplHTt2FFauXKnfAVGtw3OF5wqRoTCRI4O5dOmSAEA4fvx4tfbj22+/FVxcXNTK+vfvL3h6egqPHj3S2kalUql9HRkZKTRp0kSwtLQU2rZtK3zzzTeCIAjCkydPBDc3N2H+/Plq7XNycgQ7OzshJiZGrXz+/PlCz549DXFYVIvwXOG5QmQonFolgzl58iTq1KmDtm3bVms/Dh48iE6dOomv79+/j71792LixImwsbHR2kYmk4lfz507Fxs2bMCqVauQlJSE6dOn44033sDvv/+OOnXqYMyYMdi4cSMEQRDbfPPNN8jPz9eYFgsICMDx48ehVCoNfJRkzHiu8FwhMhQmcmQwp06dQmFhIZydnWFraytu48aNq9J+XL9+HfXr1xdfX7lyBYIgoGXLlmr1XFxcxD6GhoYCAHJycrBs2TKsX78e/fv3R9OmTfHWW2/hjTfeQGxsLADgnXfewfXr1xEfHy/GWr9+PV555RXUrVtXbR8NGjSAUqlEenq6REdLxojnCs8VIkOpU90doNrj5MmTeP3117Fo0SK18qf/wy4sLISZmZlk/cjNzYWlpaVGecmRBAA4fvw4VCoVRo0aJY4CnD9/Hnl5eejXr59a3fz8fHTo0AEA4OPjg+7du2P9+vXo3bs3rl69ikOHDmHv3r0a+7SysgKAcl8gTqaB5wrPFSJD4YgcGczp06fxzDPPwNvbW21zdnbG9evX0a5dO4wbNw4dOnSAUqnEhg0bEBAQgLZt22LevHlinDVr1qBNmzZo164dwsLCxPLIyEj4+fmhTZs22LJlS6n9cHFxQUZGhvja29sbMpkMFy9eVKvXtGlTeHt7i79AAEClUgEAfv75ZyQmJorb+fPnsX37drHe2LFj8e233yI7OxsbNmyAl5cX+vTpo9GXBw8eAADq1atX3o+RTADPFZ4rRAZTvZfoUW1x9epVAYBw6NAhre8nJycLZmZmwpkzZwRBEISkpCThtddeEwoKCoTCwkJh0KBBwpEjR4QzZ84Ifn5+QmZmpiAIgnD//n1BEAThxIkTQseOHYXc3Fzh/v37QtOmTYXU1FSt+1q6dKnQrl07tbKgoCChQYMGWi/g7tWrlzB16lRBEAQhOztbUCgUwv/+9z+dx/vw4UPB1tZWWLVqleDp6SksWLBAa721a9cKnp6eOmORaeG5wnOFyJA4tUoGcfLkSQCAm5ubxjUurq6uAIAWLVqIF3fv378fR48ehb+/PwDg0aNHuHr1Kh48eIBhw4bBwcEBAODk5AQAOHz4MF599VVYWlrC0tISffr0wYkTJzBkyBCNvvTv3x9z5sxBRkaGOFW1cuVK9OjRA506dcL8+fPRtm1byOVynDhxAhcvXhT7YWdnh1mzZmH69OlQqVR45plnkJ2djSNHjsDW1hZvvvkmAMDW1hbDhg3DBx98gKysLLz11ltaP5dDhw4hKCio0p8r1T48V97S+rnwXCGqHCZyZBDFC3u2aNFCrdzc3BwPHz4EAFhbW4vlgiBg/PjxatNEAPDZZ5+Va3+CIGhcx1OsTZs26NSpE77++msEBwcDAJo1a4bTp09j8eLFmDNnDm7dugWFQoHWrVtj1qxZmDBhgtj+448/hqurKyIiInDt2jU4OjqiY8eO+OCDD9T2M3bsWKxbtw5BQUFo1KiRRj/y8vKwY8cO7Nmzp1zHRKaB5wrPFSKDqt4BQTIVycnJgr+/v/j6r7/+Elq3bi08ePBAEARBuHnzpnDv3j3hr7/+KnW6yN/fX8jLyxMePHggNGvWTLh9+3ap+/v555+FVq1aCYWFhRIelW4rVqwQ+vXrV237J+PEc4WIKoIjclQt/Pz8EBoaisDAQKhUKtjZ2WHr1q3w8/PD1KlT0aNHD9SpUwcDBw5EREQEOnXqhNdffx3+/v6QyWRYsGABPDw8So3//PPP4/Lly0hNTUXDhg2r8Mj+ZW5ujpiYmGrZN9UePFeISBeZIJRYqZGIiIiIjAaXHyEiIiIyUkzkiIiIiIwUEzkiIiIiI8VEjoiIiMhIMZEjIiIiMlJM5IiIiIiMFBM5IiIiIiPFRI6IiIjISDGRIyIiIjJSTOSIiIiIjBQTOSIiIiIjxUSOiIiIyEj9H8EjOEX0aSRiAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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Z++6uLggMjKyzHr37t0rsdzHxwf3798v177mzJmDOXPmaLSf0nTr1k1cOFKdMOkjIiIyADK5HDItbheiTVuqHvgJEhERERkAjvQREREZAK2fyKFFW6oemPQREREZAK1vzlyJ1/SRNDi9S0RERGQAONJHRERkADi9S0z6iIiIDIBMpuXqXRknB/Udkz4iIiIDwJE+YtpOREREZAA40kdERGQAtF69q+BIn75j0kdERGQAOL1LnN4lIiIiMgAc6SMiIjIAfPYuMekjIiIyAJzeJabtRERERAaAI31EREQGgCN9xKSPiIjIADDpI07vEhERERkAvU761qxZg3r16sHMzAx+fn44ffp0qXXfeecdyGQylc3b21uss3nz5hLrZGdnV8bhEBERSaZwpE+uxcaRPn2nt0nf7t27MW3aNMydOxdXrlxB586d0adPH8TExJRYf+XKlYiPjxe32NhY2Nvb46233lKqZ2Njo1QvPj4eZmZmlXFIREREkpHJZeJTOTTZmPTpP71N+pYvX45x48Zh/PjxaNKkCYKDg+Hh4YG1a9eWWN/W1hYuLi7iFh4ejuTkZLz77rtK9WQymVI9FxeXyjgcIiIiSRVd06fNRvpNL5O+3NxcREREIDAwUKk8MDAQZ8+eLVeMjRs3okePHvD09FQqz8jIgKenJ9zd3dGvXz9cuXJFbZycnBykpaUpbURERETVjV4mfc+ePUNBQQGcnZ2Vyp2dnZGQkFBm+/j4ePzxxx8YP368UrmXlxc2b96MgwcPYufOnTAzM0PHjh1x9+7dUmMtXboUtra24ubh4aHZQREREUlIu+v5tHuaB1UPev0JymTKQ82CIKiUlWTz5s2ws7PD66+/rlTevn17jBw5Ei1atEDnzp3x3//+F40aNcKqVatKjRUUFITU1FRxi42N1ehYysveukDS+ABgYyXtEH4tRxNJ4zvUspA0/j/3UiWN/9ctafsPAFdtukm+j+rAROKbUpmbSXuu2FhL+yM6PlH6nydXH9lLGj+q/puSxrfu1FHS+JWJ07ukl/fpc3R0hJGRkcqoXmJiosro38sEQcCPP/6IUaNGwcREffIhl8vRpk0btSN9pqamMDU1VSk3kgswkgtq42viaar0H9nf96VdrfwsMUPS+FKztDJF3KNMyeJ3bGuJuFRpE78GDsn42166X2YZJukVqp+bDxjl674f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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHd0lEQVR4nO3deVxUVf8H8M8MwoCsArIoiBgSuCu44JK44ZJmq2ta5oLlhtojGOajPSqPWoppKpqpqaFlmba5ZJKamuIuLqmhKEK4sIkwCHN/f/DjPowzDMvMBYb5vF+v+5I5c873nstw5cs5954rEwRBABEREREZHXl1d4CIiIiIKoeJHBEREZGRYiJHREREZKSYyBEREREZKSZyREREREaKiRwRERGRkWIiR0RERGSkmMgRERERGSkmckRERERGiokcERERkZFiIkdERERkpJjIkVHZtGkTZDIZZDIZbt26Vd3dIRNVVT+H/HknorIwkSMiMjFnzpzBokWL0L9/f3h6ekKhUMDGxga+vr54++23ceTIkQrFS0pKwvvvvw9/f39YW1vD0dERHTp0wMcff4wnT55o1L9165aYoOqzVZW0tDT8+OOPmDt3Lvr37w9nZ2exD2+//XaV9YNImzrV3QEioppg06ZNGDNmDAAgMTERjRs3rt4OSaR79+44fPiwRnl+fj6uX7+O69evY/PmzRg1ahQ+//xzWFhY6Iz3008/YeTIkcjMzBTLnjx5glOnTuHUqVP4/PPP8fPPP6NJkyYGP5aq4urqWt1dICoVEzkiogp6++23q2QkRor9JCcnAwAaNGiAN954A926dUOjRo1QWFiI48eP45NPPkFycjK2bNmCgoICfPXVV6XGOn/+PIYMGYInT57AxsYGs2fPRo8ePZCbm4vt27dj/fr1uHbtGl588UWcOnUKNjY2AICGDRvi4sWLpcbt27cv7t27hwYNGmDfvn0GPX59eXp6wt/fH/v376/urhABYCJHRGRS/Pz8sGjRIrz22mswMzNTe69Tp04YNWoUunTpgr/++guxsbF499130a1bN62xwsLC8OTJE9SpUwf79+9HUFCQ+F7Pnj3RtGlTzJo1C1evXsWyZcswd+5cAIC5uTlatGhRah/Nzc3LVa+8ikdbvby8KnWt4dy5c9G+fXu0b98erq6uuHXrFry9vfXuF5Eh8Bo5IiIT8uOP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7gDAj9tL/+PEEAqePq5QfYWdBSzrGP6/o3qNnQweUy2+X2NJ41s8J23Cne3TvuxKerqgag3kSxf/jwt1AAnP+P3b/5AsNgAUPM2RND7VHMXPWDW0GpPIOTs7w9nZucx6QUFByMzMxMmTJ9GhQwcAwJ9//onMzEx07ty51HbFSdz169dx6NAhODmV/R98QkICnj59Cnd39/IfCBERUQ3Eu1ZrpxoztVpe/v7+6NevH8aPH48TJ07gxIkTGD9+PAYOHKh2x6qfnx927doFACgoKMDrr7+O+Ph4bNu2DYWFhUhNTUVqairy84v+VLx58yY++ugjxMfH49atW/j555/xxhtvoG3btujSpUu1HCsREZGh8MkOtVONGZGriG3btmHq1KkICQkBULTI3qpVq9TqXLt2DZmZRddO3L17F3v27AEAtGnTRq3eoUOHEBwcDAsLCxw8eBArVqzA48eP4enpiRdffBH//ve/YSbBFCkREVFV4ohc7WSUiZyjoyO2bt2qs45Q4ieucePGaq+18fT0NPgifURERERSMspEjoiIiCqGz1qtnZjIERERmQCuI1c7Gd3NDkRERERUhCNyREREJoA3O9ROTOSIiIhMgACZXg++16ctSYdTq0RERERGiiNyREREJkAFPW92MFhPyJCYyBEREZkAXiNXO3FqlYiIiMhIcUSOiIjIBHBErnZiIkdERGQCVIIMKj2ezqBPW5IOEzkiIiITwBG52onXyBEREREZKY7IERERmQCOyNVOTOSIiIhMgCDot44cE7maiVOrREREREaKI3JEREQmQBBkEPS481SftiQdJnJEREQmgNfI1U6cWiUiIiIyUhyRIyIiMgEqPW920KctSYeJHBERkQng1GrtxKlVIiIiIiPFETkiIiITwBG52omJHBERkQngNXK1E6dWiYiITEDxiJw+W1VJTU1F27ZtYWZmBplMBisrK0ydOrXc7RMSEuDj4wO5XA6ZTAZbW1ssXbpUa90lS5bA1tYWMpkMcrkcPj4+SEhIUKsTHBwMmUxW6laRvhkaR+SIiIioRmnevDnS09MxfPhwBAQEYN26dVi5ciUKCwvx2Wef6WyblZWFgIAAFBQUYOLEiWjUqBFWrFiBWbNmwcLCAtOmTRPrrlixAuHh4XBzc0NkZCSSkpIQExODgIAApKWlwc7ODgCwdOlSnD9/XmNfkydP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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAH3CAYAAAA/u7JjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/HUlEQVR4nO3deVxUVf8H8M8M27AjIIuCuIuCIuKGS2oqarn0lLmmZe65hj4qWaY9JQ9PpRjmmltpSrmkpplkknsKCCouqaEggiuC7Mvc3x/8mBgHBpiZCwzzeb9e9yWcOec75wJXvpxz7rkSQRAEEBEREZHekdZ0B4iIiIhIM0zkiIiIiPQUEzkiIiIiPcVEjoiIiEhPMZEjIiIi0lNM5IiIiIj0FBM5IiIiIj3FRI6IiIhITzGRIyIiItJTTOSIiIiI9BQTOSIiIiI9xUSOqAJbt26FRCKBRCLBnTt3aro7RERECkzkiMjgyeVy/PTTT5g+fTp8fHzg7OwMU1NT2NjYoGnTphg2bBj++9//4q+//qowVlZWFjZs2IBXX30Vbm5ukMlksLKyQtOmTeHv749p06Zh165dSElJKbN9ZGSk4g+Hyhxbt27V2dfh4cOH+Pnnn7FkyRIMGjQIjo6Oivd55513dPY+2tCHPhJVJ+Oa7gARUU06fPgw5s2bh+vXr6u8VlBQgOfPnyMhIQEHDhxAUFAQevXqheXLl6Nbt24q9c+fP4+RI0eqjNzm5eUhISEBCQkJOHfuHNavXw9nZ2ekpqaKdVoacXZ2rukuVEgf+khUnZjIEZHBCgkJQVBQEARBAAB0794dQ4YMga+vLxwcHJCbm4sHDx7g9OnTOHToEG7cuIE//vgDn3zyCY4cOaIU69atW+jfvz8yMjIAAEOHDsXw4cPRsmVLmJqa4vHjx4iLi0NERASOHz9eqf5Nnz4d7733nto6bm5uGpx5xdzd3dG6dWscPXpUlPi6oA99JBIbEzkiMkjffvstFi1aBABwdHTEjh07EBAQUGbd119/HV988QUOHjyIoKCgMussXrxYkcRt3rwZEyZMUKnTv39/zJ8/H48ePcIPP/xQYR+dnJzg7e1d2VPS2pIlS9CpUyd06tQJzs7OuHPnDpo0aaKz+Fu3bsWECRPg4eGh8XpTsftIpG+YyBGRwUlOTsa0adMAAJaWljhx4gRat26tto1EIsHQoUMREBCAgwcPKr1WVFSEn3/+GQDQsWPHMpO40urXr48ZM2ZocQbiWLZsWU13oUL60Eei6sSbHcjgpaWlYdGiRfD09IS5uTmcnJzQr18//Pjjj5Vqf+XKFXz66acYMGAA3NzcYGZmBisrK7Ro0QJvv/02zp07V+m+nD9/HpMnT0bLli1hZWUFS0tLeHp6YsaMGbh582a57ZYuXapY8A0AGRkZWLp0Kdq2bQsrKys4OzvjlVdewZkzZ5TaPXz4EB9++CG8vLxgaWkJBwcHDBs2DBcvXqywr/n5+VizZg369OmD+vXrw9TUFC4uLnjllVewfft2yOXySvc3NzcXn3/+OTp06ABra2tYW1ujc+fOWL16NQoLCyvzpauSFStWICcnBwDw6aefVpjElSaTyfDmm28qlT169AjZ2dkAgObNm+uuoySqvLw8bNmyBa+99hrc3d1hYWFR4c0lVbmeiaqFQGTA4uPjBVdXVwFAmce7774rbNmyRfF5QkKCUvvjx4+X27b0sWjRIrX9KCgoEKZPn642homJibBhw4Yy23/88ceKeomJiULLli3LjGFkZCT88MMPgiAIQlxcnNCwYcMy65mZmQnHjh0rt7937twRWrdurba/PXr0EJ48eVJhf1NTUwUfH59y4wwZMkQoKipS+/WrCrlcLjg6OgoABCsrKyEjI0PrmE+ePFH018fHR6tYpX+mPv74Y637po2EhARFX95++22t45VcSx4eHlrHKqFpH69cuVLudVLeIZFIhOfPn+us70S6wBE5Mljp6ekYMGCAYhuIkSNH4vDhw4iKisL333+Pjh07YvPmzVizZk25MQoLC2FpaYkRI0Zg3bp1iIyMRExMDI4cOYIvv/wSHh4eAID//ve/2LJlS7lxJk6ciLVr1wIABg0ahO3bt+P8+fO4cOECNm7cCC8vLxQUFGDKlCkq03ovevPNN3Hv3j0EBQXhjz/+wIULF7By5UrY2NigqKgIEydOREJCAgYPHoycnBx89tlnOHXqFP78808sW7YMpqamyMvLw4QJE5Cfn68SPzMzEy+//DKuXbsGAHjttddw4MABREVF4ccff0SvXr0AAKdOncLgwYNRVFSktr+vv/46rl27htmzZyMiIgLR0dH4/vvvFaNkBw8exMaNG9XGqIr4+Hg8fvwYANCzZ09YW1trHdPe3l7xvY6Li0NISIjaEUmqWXfu3EHfvn0V28kMHToUu3fvRnR0NH755ReMGDFCqf7AgQMxbNgwvPvuu7CysqqJLhOVr6YzSaKaEhgYqPhLe/ny5Sqv5+fnCwEBAUp/kb84Ivfo0SMhLS2t3PfIy8sT+vfvrxiFKCwsVKmze/duRfyNGzeWGScnJ0d4+eWXBQBC48aNhYKCAqXXS49wmZmZCefOnVOJcejQIUWd+vXrC46OjsKtW7dU6n399deKenv37lV5ff78+YrXP/zwQ5XX5XK5MHbsWEWdNWvWqNQp3V8TExPh+PHjKnWePHkiODs7CwCEdu3alfl10cSOHTsU77148WKdxf3iiy+UflY8PDyEmTNnCjt27Cjz61ye0iNy06dPFy5fvlzu8eDBA531vyx1cUROLpcL3bt3V7RZv359mfVGjx6tqPPjjz/qrL9EusZEjgxSbm6uUK9ePUWSUN7UXVJSkmBiYlJuIlcZsbGxivZRUVEqr/v5+QkAhH/9619q41y9elURJyIiQum10onRwoULy43h4eGhqLdu3boy62RnZwsymUwAILz//vtKr+Xm5gp2dnYCAKFNmzZlJqaCIAjp6emCg4ODot6LSvc3MDCw3P4uWrRIUe/Zs2fl1quKVatWKWKGhoaqrXvlypVyk6jMzEylukVFRcK7775b7rScs7OzMHLkSOHAgQOCXC4v9z0rO12Paph6rYuJ3K5duxT1582bV2698+fPK+rNmDFDZ/0l0jVOrZJBio6ORlpaGgDg7bffhlRa9qXg5uZW7pYUZcnLy0NiYiKuXr2KK1eu4MqVK4o9yoDiabfSkpOTER0dDQAq0zkvat26NRwdHQEAZ8+eLbfeqFGjyn2tXbt2AIrvwCzv/czNzdGiRQsAwN9//630WnR0NJ49ewYAeOedd2BkZFRmDBsbG0X8q1evlvsUAwAYO3Zsua/5+fkpPk5ISCi3XlU8f/5c8XFF02Q+Pj5o27ZtmceFCxeU6kqlUmzatAm//PIL+vfvr/Iz9eDBA4SHh2Po0KHo3Lkzbt++rZPzoapZvXo1AMDBwQFLly4tt1779u0V38Pk5OTq6BqRRpjIkUG6fPmy4uNOnTqprdu5c2e1r2dlZSE4OBg+Pj6wtLSEh4cHvLy8FL/wfX19FXVL1maViIqKUnw8evToCu+YK2mv7okALVu2LPc1Ozs7AMX7ptWrV6/CeqWTHqD4Dt0SXbp0Kbf9i6+XbvciT0/Pcl+zt7dXfPxiXzRVek1cVlaWTmKWNnDgQBw9ehSPHz/GwYMH8fHHH2Pw4MGwtbVV1ImKikLPnj3VJrgA8PHHH0Monjkp81CXiNQUdT+/Jduy3L17t9oeO1ZaamoqTp06BQAYM2aM2kTexMREkciV94ceUW3An04ySCWjcUDxpqvqqHsk0J07d9C2bVt88MEHuHTpUoUL+0u2vCjx8OHDSvRWVclWF2WxsLAo97WSX0jq6pSu9+L5PH36VPFxRY9KcnFxKbPdiyrT37L6oikHBwfFx48ePVJbt7CwUClx+vjjjyv9PvXq1cPgwYOxdOlSHDx4EA8ePMDmzZsVCXRKSgo++ugjzU6CNHLixAnFxxWNtD958kSx9Y27u7uo/SLSBjcEJoNUerqzZC+zytR90bhx45CQkKAYbRg1ahRat26N+vXrw8zMDEDxA9lLpiBfjFU6OdmxY4di6rMi6kbTqos2X7ea5OPjo/g4Jiam2t7XzMwMEyZMQIMGDTBw4EAAwN69e7Fhw4Y6NeJTerT7Rfv378eHH36IBg0a4Ndffy23nliPHSs9Mlz656AspafOKxq1J6pJTOTIIJWesnvw4IHa6cjyRs2uX7+umKYJCgrCZ599Vma90qN/Lyo9OiSRSKr1cUyaKP11S01NVft1e/DgQZntapqXlxccHBzw5MkTnDx5EllZWbC0tKy29x8wYADc3d2RlJSEtLQ0PHnyBPXr16+29xebup/hkqUEJiYmNfKznpiYqPjY1dVVbd1Dhw4BKL4uX375ZVH7RaSNuvNnIFEVtG3bVvHxi4vWX1Te6/Hx8YqP1d1gUHod3ItKr5/Thwd/l/7l++eff6qte/78+TLb1TSJRILx48cDKF53J9Z6LHUaNGig+LgujcbVdqX39svLyyu3Xnp6Onbs2AGgOPGuKOkjqkn8H4QMkp+fn2J68rvvvit3GjA5ObncBKv0o6PUrVlbt25dua81b94cbdq0AQDs2rVLacSgNvLz81PcCLFt27Zy1609f/5c8VD4Nm3a1LpfhIGBgTA3NwcAfPDBB7h161a1vXd2djauXr0KoPju3to0WlnXlV4Pq+4PrEWLFilG0hcuXCh6v4i0wUSODFLJeiUAiI2Nxeeff65Sp7CwEJMnTy7z6QYAFFt0AMVJTVnWrl2Ln376SW1fPvzwQwDFzxt9/fXX1S7Az8vLw5o1a5Cbm6s2pljMzMwwadIkAMUjkmU9wFwQBMycOVNxh+3MmTOrtY+V4ebmhq+//hpA8XNpe/bsicjIyArblTdNnpmZiS5duuDnn39W+0QHuVyOWbNmKe7AHTp0aIVrDUl3evToofh4+fLlZf4B9+WXXyr++Bo/fjx69+5dXd0j0gjXyJHBWrJkCX744Qfcu3cPCxcuRGxsLMaPHw8nJyf89ddfWLFiBS5cuIBOnTqVOb3q6+sLb29vXLlyBWvXrsWzZ88wduxYuLq6IikpCdu3b8fu3bvRvXt3nD59utx+jB49Gr/++iu2bduG6OhotGnTBlOnTkWvXr1Qv359ZGVl4fbt2zh58iT27t2Lp0+fKqYGa8KSJUuwd+9e/P333/jPf/6DK1eu4N1330WDBg2QkJCA1atXK5Iif39/TJkypcb6qs6ECROQnJyMJUuWIDU1FX369MFLL72EoUOHol27dnBwcIAgCHj48CHi4uKwb98+penikhG9EufPn8eQIUPQsGFDvPbaa/D394eHhwesra3x7NkzXLx4EZs3b1bcDGBra4v//Oc/1XrOFTl16pTS6GTp7XJu3bqlMg39zjvvVFPP/qFNHwcPHowWLVrg5s2bOHr0KAYNGoRZs2bB1dUVf//9NzZu3KgYge/RowfWr18v6rkQ6UQ1b0BMVKtcuXJFcHFxKXfn/AkTJih2o0cZT3a4ePGi4gkRZR1t27YV7t+/X+FO/IWFhcKCBQsEIyOjCnfzt7S0FLKzs5Xal35Sgjpvv/12pXbW79WrlwBA6NWrV5mvJyQkCJ6enmr72b17d+HJkydltq9sf0s/5aCsx3jpwoEDB4QWLVpU+mkK3bt3F06dOqUUIycnR+3P0YtHixYtynzKx4vnLPaTG15U8vNR2aOqdPFkB237eOnSJcVTR9Rd9y9eY0S1FadWyaB5eXkhPj4eCxYsQIsWLWBmZgZHR0f06dMH33//PTZv3qy2ffv27REbG4tp06bBw8MDJiYmsLe3R+fOnfHFF1/g/PnzlVofZmRkhJCQEFy9ehXz5s2Dr68v6tWrByMjI1hbW8PLywtjx47Ftm3bkJKSojIaVN0aN26MuLg4rF69Gr169YKDgwNMTEzg7OyMgQMH4rvvvsOJEyf0Yv3XkCFDcO3aNezduxdTpkxB27ZtUb9+fRgbG8Pa2hoeHh545ZVXsHTpUsTHx+PUqVPo3r27UgyZTIbk5GScPn0ay5Ytw6BBg9C0aVNYWlrCyMgINjY28PT0xMiRI/H999/jypUrSk+toOrTtm1bxMfHIzAwEJ6enrCwsICFhQVatGiBKVOmICoqCps3b67xa4yosiSCUEs3eyIiIiIitTgiR0RERKSnmMgRERER6SkmckRERER6ituPEJFeycrKQkJCgkZtW7VqBRMTEx33qObxa0JkuJjIEZFeuXDhAvr06aNR24SEBDRu3Fi3HaoF+DUhMlycWiUiIiLSU9x+hIiIiEhPcUSOiIiISE8xkSMiIiLSU0zkiIiIiPQUEzkiIiIiPcVEjoiIiEhPMZGjGjdv3jwMGTKkprtRoYULF2LQoEFq60ydOhVjxoypph6RIeL1QkSlMZEjHDlyBBKJRO3xyy+/VBhn7ty5eO2116r8/rGxsWjfvn2V273zzjuK/pmYmKBp06aYP38+srKylOqU7tOLbZydndG/f39s3rwZcrm8wn76+PiorRMcHIyNGzdW+VxKrFmzBk2aNIFMJoOfnx9OnjypcSwSB6+X2nG9nDhxAkOGDEGDBg0gkUjw008/aRSHSN8xkSP06tULKSkpisPBwQEffPCBUln//v0rjHPhwgV07ty5yu8fFxen0S8mABg4cCBSUlLw999/49NPP8WaNWswf/78SrW5c+cOfvnlF/Tp0wdz5szB4MGDUVhYqFU/7e3tYWlpqcmpIDw8HHPnzsXixYtx8eJF9OzZE4MGDUJiYqJG8UgcvF5qx/WSlZUFHx8frF69WqP2RHWGQFTKvXv3BADC4cOHVV67fPmyMGjQIMHa2lpwdnYWAgMDhby8PCE/P18wMTERACiOzp07K9otW7ZM8Pb2FiwsLAQnJydh2rRpQn5+viAIgpCYmCgAEG7dulXlvr799tvCsGHDlMomTZokuLi4lFunrDaCIAjHjh0TAAgbN24s871SUlIEAMKOHTuEnj17Cubm5oKfn58QGxurqJOQkCAAEO7cuSMIgiDcvHlTACD8/PPPwssvvyyYm5sLLVu2FM6dO1fme3Tu3FmYNm2aUpmnp6ewaNEidV8GqkG8XmrueikNgLBv374K6xHVRRyRIyUXL14EAPj5+amUd+vWDR06dEBMTAzCw8Oxc+dOhISEwMjICKdOnQJQPJ2SkpKCX3/9FQAgCAKKioqwfv16XL16FVu3bsXu3bvxzTffKOpbW1ujadOmOum/ubk5CgoKqtzu5Zdfho+PD/bu3Vvm6yVfl9DQUCxfvhxRUVGwtrbGqFGjFHViY2NhZ2cHDw8PAMUjEhKJBF9++SU+/PBDxMXFoVGjRli0aJFK/Pz8fERHRyMgIECpPCAgAGfOnKny+VD14PVSM9cLEf3DuKY7QLVLTEwMGjZsCCcnJ6XyyZMnY9y4cfj0008BAM2bN8fkyZPx888/46OPPsL9+/fh4OCgsiZGIpFg2bJlis89PDzQv39/XL9+HcA/62gkEonWfT9//jy+//579O3bV6P2np6euHTpUpmvxcbGQiaT4aeffkKDBg0AAJ999hm6d++O1NRUuLi4IC4uTun84+LiYGtri/DwcNSvXx8A8Nprr2Ht2rUq8R8/foyioiI4OzsrlTs7OyM1NVWj8yHx8XqpmeuFiP7BRI6UxMTEoEOHDkpl169fR3R0NLZv365Ubmpqiry8PADFf4GXtbD57t27+PzzzxEZGYnk5GQUFBQgNzcXwcHBADRfuF3i559/hpWVFQoLC1FQUIBhw4YhLCxMo1iCIJT7CzI2NhYjRoxQ/FICoFjbU7Lo+8XF3XFxcRgyZIjilxIA/P3332jevHm5fXjx/dX1iWoer5eavV6IiDc70AtiYmJUponi4+NhYmKCli1bKpVfvXoVbdu2BVD2HWqPHz9G586d8fjxY6xYsQKnTp3C2bNnYWRkpPhlpO0vpj59+iA2NhY3btxAbm4u9u7dqzI6UlnXrl1DkyZNynytrH7GxMTAxcUFrq6uAFQXd8fFxcHf31+pzcWLF8s8X0dHRxgZGamMvj18+FBllI5qD14vNXO9ENE/mMiRwpMnT5CUlKQywmBtbY2ioiKltTSJiYnYvXu3Yg+oy5cvo127dkrtDh8+jMLCQuzcuRMBAQHw8vLCiRMnkJ+fj/bt2+P58+dISEjQ6j9qS0tLNG/eHB4eHjAxMdE4zu+//47Lly/jjTfeUHktOzsbt27dQlFRkaJMLpcjLCxMsT1DRkYG7ty5o/jlnJ6ejrt378LX11cpVnm/iE1NTeHn54eIiAil8oiICHTr1k3j8yLx8HqpueuFiP7BqVVSiI6OBgCVX0xdunSBvb09Fi1ahFmzZuHOnTuYNWsW3nzzTcWGn3K5HJcuXcL9+/dhaWkJW1tb2NvbIyMjAwcOHECbNm1w8OBBBAcHo2HDhqhfvz5OnjwJIyMjeHt7V+t55uXlITU1FUVFRXjw4AGOHDmC4OBgDB48GOPHj1epHxcXByMjI2zZsgUvvfQS7Ozs8MEHHyArKwsffPCBUh0vLy+lz0uPuty9exdpaWnl/mIKDAzEuHHj0LFjR/j7+2PDhg1ITEzEtGnTdP9FIK3xeqnZ6yUzMxO3bt1SfJ6QkIDY2FjY29ujUaNGOvwKENVuHJEjhYsXL8LJyQkNGzZUKre1tcX+/ftx6tQpeHt7KxZyb9u2TVHn008/RXh4OBo2bIhPPvkEAPDqq69i4sSJGDduHHr06IHk5GSMGDFC8R9zXFwcPD09YWZmpoizdetW0deEHTlyBK6urmjcuDEGDhyI48eP46uvvsL+/fthZGSkUj8uLg4tW7bE0qVL8cYbb8DX1xcmJiY4c+YMrK2tyzyXks/Nzc0VcS5evAg7Ozs0bty4zH6NHDkSoaGh+OSTT9C+fXucOHEChw8fVtzVR7ULr5eavV6ioqLg6+urGMULDAyEr68vlixZouOvAFHtJhEEQajpThCVWLp0KSIjIxEZGVnTXSGq9Xi9EBGnVqlW+fXXX7Fq1aqa7gaRXuD1QkQckSMiIiLSU1wjR0RERKSnmMgRERER6SkmckRERER6iokcERERkZ5iIkdERESkp5jIEREREekpJnJEREREeoqJHBEREZGeYiJHREREpKeYyBERERHpKSZyRERERHqKiRwRERGRntLbRO7EiRMYMmQIGjRoAIlEgp9++qnCNn/88Qf8/Pwgk8nQtGlTrFu3TqXOnj170KZNG5iZmaFNmzbYt2+fCL0nIiIi0p7eJnJZWVnw8fHB6tWrK1U/ISEBr7zyCnr27ImLFy/igw8+wOzZs7Fnzx5FnbNnz2LkyJEYN24c4uLiMG7cOIwYMQJ//vmnWKdBREREpDGJIAhCTXdCWxKJBPv27cNrr71Wbp2FCxfiwIEDuHbtmqJs2rRpiIuLw9mzZwEAI0eOREZGBn755RdFnYEDB6JevXrYuXOnaP0nIiIi0oRxTXegupw9exYBAQFKZQMGDMCmTZtQUFAAExMTnD17Fu+//75KndDQ0HLj5uXlIS8vT/G5XC7H06dP4eDgAIlEotNzINIXgiDg+fPnaNCgAaTS8gf+5XI57t+/D2tra14vZJAqe61o69mzZ8jMzNQ6jpWVFezs7LTvEOmMwSRyqampcHZ2VipzdnZGYWEhHj9+DFdX13LrpKamlhs3ODgYy5YtE6XPRPouKSkJbm5u5b5+//59uLu7V2OPiGqniq4VbTx79gxN6zkiDUVax5JKpXjy5AmTuVrEYBI5ACp/8ZfMKpcuL6uOupGCoKAgBAYGKj5PT09Ho0aNsLtFG1gYGemi29XOpa1zxZW04ODVRNT4sjatRY1f4CDOf7Ylcq3qixofALJNbESNn5mZiW4v9YK1tbXaeiWv/9qrEyyNdf/fUb3GjjqPWZplQydR45s3byZqfLmzuD/LAFBoZilqfKP8bFHji+15Vg5a/WtKhdeKNjIzM5GGImyTNYWFFkvjsyHH27l/IzMzk4lcLWIwiZyLi4vKyNrDhw9hbGwMBwcHtXVeHKUrzczMDGZmZirlFkZGsNTTRM7KxETU+DYyU1HjyyzMRY1fYGUhanwTKytR4wOAkan47wGo/mFU3uuWxsawEiGRszYV92fZSuSfZXMLmajx5Zbi/iwDQKFM5EQur+I6+qA6lhZYQAoLiRa/l/R+RX3dpLd3rVaVv78/IiIilMqOHj2Kjh07wuT/E5fy6nTr1q3a+klERCQGibEEUi0OiTHXsdZGejsil5mZiVu3bik+T0hIQGxsLOzt7dGoUSMEBQUhOTkZ3377LYDiO1RXr16NwMBATJ48GWfPnsWmTZuU7kadM2cOXnrpJYSEhGDYsGHYv38/fvvtN5w6daraz4+IiEiXJCZSSCSaj99I9H+TizpJb0fkoqKi4OvrC19fXwBAYGAgfH19sWTJEgBASkoKEhMTFfWbNGmCw4cPIzIyEu3bt8d//vMffPXVV3jjjTcUdbp164Zdu3Zhy5YtaNeuHbZu3Yrw8HB06dKlek+OiIhIx6RG2o3ISY04Ilcb6e2IXO/evaFuC7ytW7eqlPXq1QsxMTFq4w4fPhzDhw/XtntEREREotPbRI6IiIgqT2IigUSq+aiaRM4RudqIiRwREZEBkBpLINUikZMykauV9HaNHBEREZGh44gcERGRAeDUat3ERI6IiMgASI20u/NUWsRErjbi1CoRERGRnuKIHBERkQGQGEkg0WJETgKOyNVGTOSIiIgMgNZTq0zkaiVOrRIRERHpKY7IERERGQCJVMu7VgWOyNVGTOSIiIgMgMRIComR5hNxEpT/WEyqOUzkiIiIDADXyNVNXCNHREREpKc4IkdERGQAJBI+2aEuYiJHRERkACRG0GpqVcIlcrUSp1aJiIiI9BRH5IiIiAyA1k924PYjtRITOSIiIgMgkUohkWqx/YgWbUk8/K4QERER6SmOyBERERkArZ/soEVbEg8TOSIiIgOg9YbAXCNXK3FqlYiIiEhPcUSOiIjIAHBqtW5iIkdERGQAJBIt71qVcBKvNmIiR0REZAA4Ilc3Mb0mIiIi0lMckSMiIjIAWt+1KueIXG3ERI6IiMgAcGq1buLUKhEREZGe4ogcERGRAeCzVusmJnJEREQGgFOrdRPTayIiIiI9xRE5IiIiA8ARubqJI3JEREQGoCSR0+aoLqmpqfD19YWRkREkEgnMzc0xe/bsSrePj49H8+bNIZVKIZFIYG1tjc8//1yl3pIlS9CsWTPIZDJIJBJIJOWfY3Z2Nvr06QNjY2NIJBKYmZlh+PDhGp2fLjGRIyIiolrFy8sLcXFxGDVqFL788kt4eHggLCwMM2bMqLBtRkYG/Pz8cOfOHUybNg3BwcGwsrLCggULsGrVKqW6u3btQlJSEpycnGBhYaE2bocOHRAZGYkBAwZg5cqV6NChA/bs2YOAgACtzlVbep3IrVmzBk2aNIFMJoOfnx9OnjxZbt133nlHkW2XPry8vBR1tm7dWmad3Nzc6jgdIiIi0RSPqkm1OKpnRG7ZsmV4+vQpZsyYgR07diAwMBDXr1+Hvb091q1bh/z8fLXtp0yZgry8PKxZswZr1qzBokWLkJCQADMzMyxevFip7tWrV5Gfn4/ExEQ0a9as3Jj79+/HjRs3EBAQgEOHDmHu3Lk4e/YsPD09ERERgdu3b+vk3DWht4lceHg45s6di8WLF+PixYvo2bMnBg0ahMTExDLrr1q1CikpKYojKSkJ9vb2ePPNN5Xq2djYKNVLSUmBTCarjlMiIiISjUQqUTzdQZOjuhK5nTt3AoDKVOiYMWMgl8uxZcsWte0jIiJgamqKKVOmKMpkMhl69eqFrKwsREVFKcqNjSt3q8Dq1avL7NP7778PAFixYkWl4ohBbxO5FStWYOLEiZg0aRJat26N0NBQuLu7Y+3atWXWt7W1hYuLi+KIiopCWloaJkyYoFRPIpEo1XNxcamO0yEiIhKVvqyRS05OhqWlpcogSr9+/QBA7ewbADx79gxOTk4q5f7+/gCKE72q+uuvvyCRSNCuXTul8tdeew0AcPHixSrH1BW9TOTy8/MRHR2tMi8dEBCAM2fOVCrGpk2b0K9fP3h4eCiVZ2ZmwsPDA25ubhg8eHCF35y8vDxkZGQoHURERHVVSkoK7t27pzh0/XsvLy+vzJmwkt/Xjx49UtteLpfD2tpapbxBgwYAgPv371e5T5mZmTAxMVEpL0kY09LSqhxTV/QykXv8+DGKiorg7OysVO7s7IzU1NQK26ekpOCXX37BpEmTlMo9PT2xdetWHDhwADt37oRMJkP37t1x8+bNcmMFBwfD1tZWcbi7u2t2UkRERCLSbn3cP0+F6Ny5M9zd3RXH0KFDy33P0NDQMteel3WEh4f/01c1d4+qe01X7atKjJiVpdf7yL34hRMEoVJfzK1bt8LOzk4xJFqia9eu6Nq1q+Lz7t27o0OHDggLC8NXX31VZqygoCAEBgYqPs/IyND7ZC4lLgWuPq6ixX906W/Ub9dUtPi5V65A5u0tWnyTR0koqC/e99g88wFyrJwrrqgFi/wMZJvaiPoetcHTvx/Bvml90eJnJj2Albt436ucv27CvGUL0eJLUxMhd2kkWnwAMM7NRKHMSrT4RWaWMMrLEi1+XaKrfeTOnz8PV9d/fkfY2JT/f0nv3r0xfvz4SsXv2LEjAMDMzAw5OTkqr9+9excA4OjoqDaOVCotc5SwZCSudN8ry8rKqsxRt4cPHwIA7OzsqhxTV/QykXN0dISRkZHK6NvDhw9VRuleJAgCNm/ejHHjxsHU1FRtXalUik6dOqkdkTMzM4OZmZlKeebNbMglRmrja8Khg63OY76oga+bqPEdfFuLGt+oeStR4z939RQ1fpqZ+Osyr6c1BLLFi5+dWbWplsK8IhQW6f4vWmfvhjqPWZp1I3ETblMXZwjZ4iUpEmsbSB8lixa/+E2kUP8/rXYK7iRALmL8nFT103jays5TfwdmbeTq6go3t8r9nmjfvj22bdtWpfhubm64fv06cnNzlaZYjx07BgDo2bOn2vZ2dnaKBKu0c+fOAQAGDBhQpf4AQKtWrZCYmIhLly4prZM7cOAAAMDX17fKMXVFL6dWTU1N4efnp7JgMSIiAt26dVPb9o8//sCtW7cwceLECt9HEATExsZqlL0TERHVJvpys8Po0aMBAAsXLlQq37lzJ6RSqcpNii8KCAhAfn4+Nm3apCjLzc1FZGQkLC0t0aFDhyr3qWT/uhf7VHK3aumZueqmlyNyQPEXbdy4cejYsSP8/f2xYcMGJCYmYtq0aQCKpzyTk5Px7bffKrXbtGkTunTpAu8ypt6WLVuGrl27okWLFsjIyMBXX32F2NhYfP3119VyTkRERGIpvc5N0/bVYcmSJVi1ahXCwsKQlpaG9u3bY+PGjXj8+DGmT5+uNJvWsmVL3Lx5E6dOnUL37t0BAOvXr8e+ffswdepUxMTEwMPDA6GhocjLy0NISIjSe50+fRp79+4FULx+HgDmzZsHAPDx8VFMCw8bNgytWrXCkSNHMHjwYPTv3x8//PADrl27hv79+6vdg05sepvIjRw5Ek+ePMEnn3yClJQUeHt74/Dhw4q7WlJSUlT2lEtPT8eePXtUdnYu8ezZM0yZMgWpqamwtbWFr68vTpw4gc6dO4t+PkRERFQsPj4eAwcOxI4dO/Ddd99BJpNh1qxZKuvV5fLiiXVBEBRlNjY2iIqKwrBhw7B27VoIggArKyuEhIRgzpw5Su23bNmiNHIH/DPK1qxZM6X1fTExMXjllVdw5MgRHDp0CCYmJnjjjTewe/dunZ57VUmE0mdPWsvIyICtrS1+MGoGC66RKxPXyKlXbWvkRJSdmYHRfeyRnp6udiF0yfUS2aMzrCq5MWdV1IU1cmKSWFfDDS8ScUdxCu4kiBpf7DVyz/Py0XxleIXXijbu3bsHd3d3xE8cAmtT1S00Kut5fgG8Nh1EUlJSpdfIkfj0dkSOiIiIKk9fplapavhdISIiItJTHJEjIiIyBBJJ8aFNe6p1mMgREREZAIlEyw2BmcjVSkzkiIiIDADXyNVN/K4QERER6SmOyBERERkAXT1rlWoXJnJEREQGgFOrdRO/K0RERER6iiNyREREBkAi1W56VOSHdJCGmMgREREZAK6Rq5uYXxMRERHpKY7IERERGQKptPjQpj3VOkzkiIiIDIBEItHq6Qx8skPtxPSaiIiISE9xRI6IiMgAcB+5uomJHBERkQHgXat1ExM5IiIiQyDR8mYHbiRXK/G7QkRERKSnOCJHRERkCLScWgWnVmslJnJEREQGQCKRQqLF9Kg2bUk8/K4QERER6SmOyBERERkCqUS76VFOrdZKTOSIiIgMAPeRq5v4XSEiIiLSUxyRIyIiMgDcELhuYiJHRERkCCQS7Tb1lTCRq404tUpERESkpzgiR0REZAA4tVo3MZEjIiIyBFItn7XKu1ZrJSZyREREBkAikUCixTo3bdqSeJheExEREekpjsgREREZAomWU6t81mqtxESOiIjIAPBmh7qJ6TURERGRntLrRG7NmjVo0qQJZDIZ/Pz8cPLkyXLrRkZGKhZ6lj6uX7+uVG/Pnj1o06YNzMzM0KZNG+zbt0/s0yAiIhKfRKr9QbWO3n5XwsPDMXfuXCxevBgXL15Ez549MWjQICQmJqptd+PGDaSkpCiOFi1aKF47e/YsRo4ciXHjxiEuLg7jxo3DiBEj8Oeff4p9OkREROKSSrQ/qNbR20RuxYoVmDhxIiZNmoTWrVsjNDQU7u7uWLt2rdp2Tk5OcHFxURxGRkaK10JDQ9G/f38EBQXB09MTQUFB6Nu3L0JDQ0U+GyIiIqKq08tELj8/H9HR0QgICFAqDwgIwJkzZ9S29fX1haurK/r27Yvjx48rvXb27FmVmAMGDFAbMy8vDxkZGUoHERFRbSORSLU+qPbRy+/K48ePUVRUBGdnZ6VyZ2dnpKamltnG1dUVGzZswJ49e7B37160atUKffv2xYkTJxR1UlNTqxQTAIKDg2Fra6s43N3dtTgzIiIikXBqtU7Sy0SuxIu7TAuCUO7O061atcLkyZPRoUMH+Pv7Y82aNXj11VfxxRdfaBwTAIKCgpCenq44kpKSNDybynkSky5qfAC4f/GeqPGfXLwmavyiWzdEjW+dcr3iSlqol1f+Hw664lkvWfT3qA0eXBH3PJ8nPhA1fn6quPGF59UwgyDIRQ1v0riJqPHNXeqLGp9IW3q5j5yjoyOMjIxURsoePnyoMqKmTteuXbF9+3bF5y4uLlWOaWZmBjMzM5Vyk3omMJUaldFCOw27Vf78NFXfq5Go8a3atBQ1fmELH4j5q+Ohg6eI0YHELFcgW9S3wJVEmajxc7Kr9jdiUW4RCkX438i9a1PdBy3FpoWHqPGNG4kbP9ujrajxAaDA2FzU+PnG5kAb8eLnSi3FCw4g8/lzYGW4qO9RQiKVQqLFhsDatCXx6OV3xdTUFH5+foiIiFAqj4iIQLdu3Sod5+LFi3B1dVV87u/vrxLz6NGjVYpJRERUK0kk2h9U6+hlIgcAgYGB+Oabb7B582Zcu3YN77//PhITEzFt2jQAxVOe48ePV9QPDQ3FTz/9hJs3byI+Ph5BQUHYs2cPZs6cqagzZ84cHD16FCEhIbh+/TpCQkLw22+/Ye7cudV9ekRERLollRQ/okvjo/oSudTUVPj6+sLIyAgSiQTm5uaYPXt2pdvHx8ejefPmkEqlkEgksLa2xueff65Sb8mSJWjWrBlkMplif9mybN++HW3btlXUk0qlsLe3x5dffqnxOeqKXk6tAsDIkSPx5MkTfPLJJ0hJSYG3tzcOHz4MD4/iqYiUlBSlPeXy8/Mxf/58JCcnw9zcHF5eXjh06BBeeeUVRZ1u3bph165d+PDDD/HRRx+hWbNmCA8PR5cuXar9/IiIiAyVl5cX0tLSMHr0aPj5+WHDhg0ICwtDUVERvv76a7VtMzIy4Ofnh8LCQkybNg2NGjXCqlWrsGDBApiammLOnDmKurt27UJSUhJcXFzw5MkTZGeXva4lNDQUf//9NwYOHIiePXvi2bNnWL9+PebPn48bN25gw4YNOj3/qpAIgiDU2LvXQRkZGbC1tcU+R09Yco1cmapjjZyYqmWNnMjEXyOXgYUj7JCeng4bG5ty65VcL8c6+sHSWPfXC9fIqVdn1siJqDrWyHXwbVvhtaKNe/fuwd3dHSlrg2Bjrvm1n5GTC9fpwUhKSoKbm5sOe6hs2bJlWLp0KWbOnImwsDBFuYODA549e4acnByYmpqW237UqFEIDw/H+vXrMWXKFABAbm4u7OzsYGxsjMzMTEXdwsJCGBsXj2m1a9cOly9fRllpUXx8PLy8vJTK8vPzYWtri8LCQhQUFGh1ztrQ26lVIiIiqrySmx20OarDzp07AUBlKnTMmDGQy+XYsmWL2vYREREwNTVVJHEAIJPJ0KtXL2RlZSEqKkpRXpLEVeTFJA4oXq/v7u6OwsLCSsUQCxM5IiIiqrSUlBTcu3dPceh6I/zk5GRYWlpCJlMePezXrx8AqH2uOgA8e/YMTk5OKuX+/v4AoHJTo6Zyc3Nx584dmJuLOypcEb1dI0dERERVoO2D7/+/befOnZWKe/XqhcjISC06piwvL6/MaeaSNfCPHj1S214ul8Pa2lqlvEGDBgCA+/fv66CXxYllQUEB5s+fr5N4muKIHBERkSGQaPlUh/+/o/P8+fNISkpSHAcOHCj3LUNDQxV3g1Z0hIf/s5+euo341b2mq/YVefvtt3H69Gn4+flh+fLlWsfTBkfkiIiIqNJcXV0rfbND7969lbYCU6djx44Aijfaz8nJUXn97t27AIofCqCOVCotc7q3ZCSu9P6xmnj33Xfx7bffwtPTE+fPn9cqli4wkSMiIjIA2j74XpO27du3x7Zt26rUxs3NDdevX0dubq7SOrljx44BAHr27Km2vZ2dHR4+fKhSfu7cOQDAgAEDqtSf0t59911s2bIFLVq0QHx8PKS14GkXNd8DIiIiEp8206olRzUYPXo0AGDhwoVK5Tt37oRUKsWECRPUtg8ICEB+fj42bdqkKMvNzUVkZCQsLS3RoUMHjfo1adIkbNmyBU2bNsXVq1drRRIHcESOiIiIapElS5Zg1apVCAsLQ1paGtq3b4+NGzfi8ePHmD59utIeci1btsTNmzdx6tQpdO/eHQCwfv167Nu3D1OnTkVMTAw8PDwQGhqKvLw8hISEKL3X6dOnsXfvXgDFd+MCwLx58wAAPj4+imnhwMBAbNq0Cebm5liwYAG2bt2qFGfEiBGi7QNYESZyREREhkBHd61Wh/j4eAwcOBA7duzAd999B5lMhlmzZuGrr75SqieXywFAaRNfGxsbREVFYdiwYVi7di0EQYCVlRVCQkKUnuoAAFu2bFEauQOAFStWAACaNWumSORKbujIyclRPAq0NE9PT/To0UPLs9YMEzkiIiJDoO2D73Vwt2dlubi4IDY2tsJ6t27dKrPc29sbt2/frrD9N998g2+++Ubj96kNmMgREREZAqm0+NCmPdU6/K4QERER6SmOyBERERkCPVojR5XHRI6IiMgQaLuFSDVtP0JVw/SaiIiISE9xRI6IiMgQSCRaTq1yRK42YiJHRERkCPRo+xGqPE6tEhEREekpjsgREREZAu4jVycxkSMiIjIEnFqtk5heExEREekpjsgREREZAm4IXCcxkSMiIjIEEi3XyDGRq5WYyBERERkCrpGrk5heExEREekpjsgREREZAq6Rq5OYyBERERkCTq3WSUyviYiIiPQUR+SIiIgMAZ/sUCcxkSMiIjIAgkQCQYvpUW3akniYXhMRERHpKY7IERERGQKJRMu7VjkiVxsxkSMiIjIE3H6kTuJ3hYiIiEhPcUSOiIjIAPBmh7pJr0fk1qxZgyZNmkAmk8HPzw8nT54st+7evXvRv39/1K9fHzY2NvD398evv/6qVGfr1q2QSCQqR25urtinQkREJK6SqVVtDqp19Pa7Eh4ejrlz52Lx4sW4ePEievbsiUGDBiExMbHM+idOnED//v1x+PBhREdHo0+fPhgyZAguXryoVM/GxgYpKSlKh0wmq45TIiIiEk/Jkx20OajW0dup1RUrVmDixImYNGkSACA0NBS//vor1q5di+DgYJX6oaGhSp8vX74c+/fvx8GDB+Hr66sol0gkcHFxEbXvRERERLqglyNy+fn5iI6ORkBAgFJ5QEAAzpw5U6kYcrkcz58/h729vVJ5ZmYmPDw84ObmhsGDB6uM2L0oLy8PGRkZSgcREVGtU/JkB20O0olnz57pLJZeflceP36MoqIiODs7K5U7OzsjNTW1UjG+/PJLZGVlYcSIEYoyT09PbN26FQcOHMDOnTshk8nQvXt33Lx5s9w4wcHBsLW1VRzu7u6anRQREZGISm520OYgzRUWFqJv374wMjJCvXr1EBkZCQDo2bMn3nnnHY3j6mUiV0Lywg+VIAgqZWXZuXMnli5divDwcDg5OSnKu3btirfeegs+Pj7o2bMnfvjhB7Rs2RJhYWHlxgoKCkJ6erriSEpK0vyEKiH5zANR4wPAo/iy1xnqSubVv0SNb3wzTtT4Tk+uixq/kWWKqPEBwLuRYdzAk3Tub1HjZ9y8K2r8wkRx41vcvSxqfAAwKcwRNb6pyPFl8ixR45PhCAgIwIkTJzB16lSl8o4dO2LPnj0ax9XLNXKOjo4wMjJSGX17+PChyijdi8LDwzFx4kT8+OOP6Nevn9q6UqkUnTp1UjsiZ2ZmBjMzM5VySzdzWBoZqY2vifqt6us8psp7tGsqanyZp6eo8bObthc1fqKsFVAkXvxzf4v/Pb4Snw4gX7T4+blVW2JgWd8CVia6/+/I2aeJzmOWZtHMQ9T4QgtvMX/UkOrSXsToxW4/dxPzRw2Xbov7a+xy7ENR4+fnifjFeRE3BK5RJ0+exPLly/Hvf/8ba9euVZT3798fq1at0jiuXn5XTE1N4efnh4iICKXyiIgIdOvWrdx2O3fuxDvvvIPvv/8er776aoXvIwgCYmNj4erqqnWfiYiIapIgkWp9kOYKCwvLzFEKCwshCILGcfVyRA4AAgMDMW7cOHTs2BH+/v7YsGEDEhMTMW3aNADFU57Jycn49ttvARQncePHj8eqVavQtWtXxWieubk5bG1tAQDLli1D165d0aJFC2RkZOCrr75CbGwsvv7665o5SSIiIqoTLCwssH37dnTv3l2pfOXKlbCxsdE4rt4mciNHjsSTJ0/wySefICUlBd7e3jh8+DA8PIqnOlJSUpT2lFu/fj0KCwsxY8YMzJgxQ1H+9ttvY+vWrQCK7yKZMmUKUlNTYWtrC19fX5w4cQKdO3eu1nMjIiLSOW33guPNDloJDAzEp59+ijt37gAAvvjiC0ybNg03btwoc9u0ytLbRA4A3nvvPbz33ntlvlaSnJUouTtEnZUrV2LlypU66BkREVHtIkC76VFBP1dj1Rr/+c9/IJPJ8PnnnwMADh06BGtrayxfvhyLFi3SOK5eJ3JERERE+mLx4sVYvHixTmMykSMiIjIEnFqtUdu2bUNhYSEmTpyoVL5p0yaYmJhg/PjxGsXlOCkREZEhkEj+2YJEo4OJnDZmzJiBq1evqpTfuHGj3GVilcFEjoiIyADwyQ41KysrC0OGDFEpHzx4MLKyNN94mokcERERkcgkEgn++kv1yUbXrl2r1FOpysNEjoiIyBBoNa2q5VMhCG5ubliwYIHS1mh3797FwoUL0bBhQ43j8mYHIiIiAyBAAgGaj/xo05aAvXv3wt/fHx4eHrCzswMApKenw8TEBL/++qvGcZleExERUa2SmpoKX19fGBkZQSKRwNzcHLNnz650+/j4eDRv3hxSqRQSiQTW1taK/dtKW7JkCZo1awaZTAaJRFLpKc7//e9/ivo3btyoVJuOHTsiOTkZY8eOhZubG5o1a4ZJkyYhLS0NXbp0qfS5vYgjckRERAZA2+elVuezVr28vJCWlobRo0fDz88PGzZsQFhYGIqKiip8bGZGRgb8/PxQWFiIadOmoVGjRli1ahUWLFgAU1NTzJkzR1F3165dSEpKgouLC548eYLs7OwK+5aamorFixdDKpVCLpdX6bycnJywffv2KrWpCBM5IiIiQ6DtOrdqSuSWLVuGp0+fYubMmQgLCwNQ/HgrBwcHrFu3DitXroSpqWm57adMmYK8vDysX78eU6ZMAQDMnTsXdnZ2WLx4sVIid/XqVRgbF6dC7dq1w+XLlyvsX0BAAExMTODn54dTp05V6dx+/fVXfPfdd0hNTVVJAn///fcqxSrBqVUiIiKqNXbu3AkAKlOhY8aMgVwux5YtW9S2j4iIgKmpqSKJAwCZTIZevXohKysLUVFRivKSJK6yVq9ejcuXL2Pjxo0wMjKqUtvx48dj4MCB2LlzJ06fPo1z584pHZpiIkdERGQAdLWPXEpKCu7du6c4MjIydNrP5ORkWFpaQiaTKZX369cPAHDy5Em17Z89ewYnJyeVcn9/fwDFiZ4mnj59isDAQHTq1Aljx46tcvvvv/8eAwcORFFREXJycpCdna10aIpTq0RERAZAV2vkOnfurFTeq1cvREZGatM1JXl5ebCxsVEp9/DwAAA8evRIbXu5XA5ra2uV8gYNGgAA7t+/r1G/AgICIAgCjhw5olH7oqIiLFy4UKO26uhsRC41NRUHDx7Ezz//jAcPHugqLBEREdUi58+fR1JSkuI4cOBAuXVDQ0MVd3dWdISHhyvaqbt7tDJ3lmrb/kVbtmxBdHQ0PvvsM9jb21e5PQC0aNECGzZs0KitOjoZkfv++++xZMkS9OvXD3K5HIGBgfjkk08watQoXYQnIiIibUkk2j0v9f/burq6ws3NrVJNevfuXemHwXfs2BEAYGZmhpycHJXX7969CwBwdHRUG0cqlZY53VsyEufq6lqp/pQ2ffp0uLm5YeTIkYp+5ObmAiieara2tlaM+JWnSZMm2LVrF86fP4/WrVur3LCxZ8+eKvcL0FEiFxISggsXLqBevXoAgLS0NPTu3ZuJHBERUW2h5dSqJnettm/fHtu2batSGzc3N1y/fh25ublK6+SOHTsGAOjZs6fa9nZ2dnj48KFKeckNBQMGDKhSf4Di6d579+6hcePGKq/16dMHMpmszOSztN9//x1GRka4e/euIhnUBZ0kcnK5HFZWVorPraysqry3ChEREYlHX57sMHr0aHz88cdYuHAhVq1apSjfuXMnpFIpJkyYoLZ9QEAAdu3ahU2bNmHixIkAikfPIiMjYWlpiQ4dOlS5TytXrlQpW716NW7fvo2goCB4enpWGKOgoKDK71sZOknk3nrrLXTr1g1vvPEGgOLHUIwbN04XoYmIiMiALFmyBKtWrUJYWBjS0tLQvn17bNy4EY8fP8b06dOVpiRbtmyJmzdv4tSpU+jevTsAYP369di3bx+mTp2KmJgYeHh4IDQ0FHl5eQgJCVF6r9OnT2Pv3r0AiqdIAWDevHkAAB8fH8W08Ny5c1X6+dNPP+H27dt4++230apVq0qfX2ZmJk6ePKkYydOWThK5hQsXol+/foqN8dauXQs/Pz9dhCYiIiId0KcnO8THx2PgwIHYsWMHvvvuO8hkMsyaNQtfffWVUr2S2T9BEBRlNjY2iIqKwrBhw7B27VoIggArKyuEhIQobQYMFN/EsGnTJqWyFStWAACaNWtW6fV9lfH48WN069YNN2/eBAAcP34cvXv3ho+PD1xdXTW+G1YnidwHH3yABQsWKJK3tLQ0LF68GJ999pkuwhMREZG2JNDyZged9aRCLi4uiI2NrbDerVu3yiz39vbG7du3K2z/zTff4Jtvvqlq9wCgyluu9OvXD8nJyfj6668xY8YMRfngwYPLnLqtLJ2k17/88gvs7OwUn9erVw+//PKLLkITERER6b0rV65g1apVeO+995TKX3755QpvlFBHJyNyRUVFyMzMVNzwkJGRIdqiPiIiIqo6AVIIWozfaNOWinOl5s2bq5Q/efJEq7g6SeRmzZqF7t27Y+TIkQCA8PBwvP/++7oITURERDpQ+jFbmrYnzdna2mL16tXo3bs3gOL97gDg008/hYODg8ZxdZLITZ48GV27dlXMF3///ffw8vLSRWgiIiIivRcSEoJp06Yp8qM5c+YgMTERT58+xXfffadxXJ2Nk2ZnZ8PBwQGzZs2Cq6sr7t27p6vQREREpKWSu1a1OUhzU6dOxd69e5GbmwszMzNcvXoVNjY22L17N9566y2N4+pkRG7p0qWIiYnB9evXMWbMGOTk5GDUqFGK7UiIiIioZunLhsB1UXZ2Nnx8fLBx48ZK3U1bFTpJr3/66Sfs378flpaWAICGDRvi+fPnughNREREpNcsLCzK3SpFWzpJ5MzMzAAAkv9fCPns2TPFx0RERFTzOLVas5o3b67VfnHl0cnU6vTp0zFy5Eg8fvwYn376KcLDw7Fw4UJdhCYiIiId4F2rNatx48Y4ePAg3Nzc4OXlpfSMegDYs2ePRnF1ksiNHTsWXbp0wbFjxyAIAnbt2sW7VomIiGoRrpGrWZGRkTAyMsKDBw/w4MEDncXVOpGTy+Xo1KkTYmNj0bp1a130iYiIiKhOEetBCVpPeEulUnTu3Bnx8fG66A8RERGJgGvkaofMzEz88ssvyM3N1Uk8nUytnj9/Hr6+vmjZsiUsLCwgCAIkEgnOnz+vi/BERESkJU6t1qzHjx+jW7duuHnzJgDg+PHj6N27N3x8fODq6oojR45oFFcnidz+/ft1EYaIiIioTurXrx+Sk5Px9ddfY8aMGYrywYMHa3U3q07GST08PMo8iIiIqHYQoOXUqu4eBmWQrly5glWrVuG9995TKn/55ZeRk5OjcdxKf1eeP3+O+fPnw9PTE46OjmjWrBleeeUVfPbZZ7h+/brGHSAiIiLxlUytanOQ5oqKitC8eXOV8idPnmgVt9KJ3Pjx47F79268/fbb+O9//4s5c+bg999/x/fffw8vLy8MGzYMycnJWnWmqtasWYMmTZpAJpPBz88PJ0+eVFv/jz/+gJ+fH2QyGZo2bYp169ap1NmzZw/atGkDMzMztGnTBvv27ROr+0RERGQgbG1tsXr1asXnUmlxCvbpp5/CwcFB47iVTuSOHj2Kn376CUFBQZg0aRJmz54NExMTHDx4EAkJCXBxcUHnzp2RkJCgcWeqIjw8HHPnzsXixYtx8eJF9OzZE4MGDUJiYmKZ9RMSEvDKK6+gZ8+euHjxIj744APMnj1baQO+s2fPYuTIkRg3bhzi4uIwbtw4jBgxAn/++We1nBMREZFYijcE1mZ6lSNy2ggJCcGePXsU++zOmTMHDg4OuHz5MkJDQzWOW+lEztnZGVlZWWW+1qhRI6xfvx4zZszAnDlzNO5MVaxYsQITJ07EpEmT0Lp1a4SGhsLd3R1r164ts/66devQqFEjhIaGonXr1pg0aRLeffddfPHFF4o6oaGh6N+/P4KCguDp6YmgoCD07dtXqy8wERFRbcCp1Zo1depU7N69G7m5uTAzM8PVq1dhY2OD3bt346233tI4bqUTuTlz5uDdd99FXFxcuXXGjh2L33//XePOVFZ+fj6io6MREBCgVB4QEIAzZ86U2ebs2bMq9QcMGICoqCjFJn3l1SkvJgDk5eUhIyND6SAiIiLy8/PDw4cPAQBhYWF49dVXcfv2beTm5iIvLw8JCQl44403tHqPKiVyb7zxBvz8/DBw4ECsW7cOcrkcklJDrTt37oSjo6NWHaqMx48fo6ioCM7Ozkrlzs7OSE1NLbNNampqmfULCwvx+PFjtXXKiwkAwcHBsLW1VRzu7u6anBIREZGoSp61qs1BVRMTE6NI5GbPno3bt2/r/D2qtI/c8uXL8a9//QtffPEF5s2bh5ycHHh7e8PJyQkZGRnIzc3F1q1bdd7J8khe+KEq2Yi4KvVfLK9qzKCgIAQGBio+z8jIEDWZe3TjEeq3qi9afAB4dOlv1G/XVLT4udevQ+bpKVp8i79jkd20vWjxG+XeQKKslWjxuzZ9hHN/i/s99vayxZX4dFHfozZ4EJcAZ58mosXPvn0XFs3E22pJcvMKhBbeosV3SY1Fqkt70eIDQDPre7j93E20+O2aFeLSbZ1siVqmtu2dcDn2oWjxq5MgSCAIWmwIrEVbQ2ViYoKpU6dixIgRAIAdO3bA1dW1zLqzZs3S6D2q/NPfqVMnhIeHIz8/HzExMfjrr7+QkZEBR0dHvPzyy3ByctKoI1Xh6OgIIyMjlZGyhw8fqoyolXBxcSmzvrGxseJukfLqlBcTAMzMzGBmZqZSbmQshZGx7vfccfVpqPOYL7Jvq3p7tC4Zt2wjavznDcR95u8luQ+gmyerlOn6PZl4wf/f2VP3RY1fkJddpfpGpsYwMtH9L+P6bRvrPGZpll7i/qzlNvURNf496zaAXNS3wJWH5f//qQsXYrMBiPMMSwC4dFrc7bUKCzJFja9M273guI9cVc2bNw//+9//FEu0goODy61bbYlcCVNTU3Tt2hVdu3bVNITGTE1N4efnh4iICPzrX/9SlEdERGDYsGFltvH398fBgweVyo4ePYqOHTvCxMREUSciIgLvv/++Up1u3bqJcBZERERUlwUHByM4OBipqalwdXXF0aNH0aqVbmd0xBuPFllgYCDGjRuHjh07wt/fHxs2bEBiYiKmTZsGoHjKMzk5Gd9++y0AYNq0aVi9ejUCAwMxefJknD17Fps2bcLOnTsVMefMmYOXXnoJISEhGDZsGPbv34/ffvsNp06dqpFzJCIi0hU+a7X6+fn54ZdffoGLiwtCQ0PRs2dPyGS6nXXRaJw0JycH2dn/TJ3cvXsXoaGh+PXXX3XWsYqMHDkSoaGh+OSTT9C+fXucOHEChw8fVjwaLCUlRWlPuSZNmuDw4cOIjIxE+/bt8Z///AdfffWV0t0i3bp1w65du7Blyxa0a9cOW7duRXh4OLp06VJt50VERCQGbj9S/Urf7DB37tyav9mhxLBhw/D6669j2rRpePbsGbp06QITExM8fvwYK1aswPTp03XdzzK99957Ks8sK1HWTRe9evVCTEyM2pjDhw/H8OHDddE9IiIiMmC18mYHoDjDXLlyJQBg9+7dcHZ2xsWLF7Fnzx4sWbKk2hI5IiIiqhxOrVa/WnuzQ3Z2NqytrQEU3wzw+uuvQyqVomvXrrh7965GHSEiIiLxMJGrfrX2ZofmzZvjp59+wr/+9S/8+uuvirs8Hz58CBsbG512kIiIiEifiXmzg0aJ3JIlSzBmzBi8//776Nu3L/z9/QEUj875+vrqtINERESkPW4IXP3u3bsHN7fiDbHfeOMNxZOkylJSr6o0SuSGDx+OHj16ICUlBT4+/2xY2bdvX6V93YiIiKh24NRq9XN3d8eVK1fg5eVV4VOfSp42VVUa7yPn4uICFxcXpbLOnTtrGo6IiIioTgkNDUWzZs0UH4tB40Tu2bNn2LRpE65duwaJRILWrVtj4sSJsLW11WX/iIiISAc4Ilf95syZU+bHuqRRIhcVFYUBAwbA3NwcnTt3hiAIWLlyJZYvX46jR4+iQ4cOuu4nERERaYGJXPXbvXt3petquoetRonc+++/j6FDh2Ljxo0wNi4OUVhYiEmTJmHu3Lk4ceKERp0hIiIicQjQ8mYHJnJV9uabb1a6brWukYuKilJK4gDA2NgYCxYsQMeOHTXqCBEREVFdUvpZ7T///DO++OILjBgxQnFj6L59+/Djjz9i3rx5Gr+HRomcjY0NEhMT4enpqVSelJSk2CiYiIiIag85JJBrMaqmTVtD1b17d8XHAwYMwIcffoiPP/5YUTZ8+HC0bNkSISEhap/6oI5Uk0YjR47ExIkTER4ejqSkJNy7dw+7du3CpEmTMHr0aI06QkREROIpWSOnzUGay8rKgp+fn0q5n58fcnJyNI6r0YjcF198AYlEgvHjx6OwsBBA8YNhp0+fjv/+978ad4aIiIioLjI3N8fMmTPRo0cP2NnZAQAyMjIwc+ZMmJubaxxXo0TO1NQUq1atQnBwMG7fvg1BENC8eXNYWFho3BEiIiISD5/sULO+/vprTJw4Efb29opE7tmzZwCATZs2aRxXo0QuODgYzs7OePfdd9G2bVtF+ebNm/Ho0SMsXLhQ4w4RERGR7gnQ7s5Tze6ppBITJkzAkCFDMHfuXFy7dg2CIMDb2xtffPEFnJycNI6r0Rq59evXq9zoAABeXl5Yt26dxp0hIiIiSk1Nha+vL4yMjCCRSGBubo7Zs2dXun18fDyaN28OqVQKiUQCa2trfP755yr1lixZgmbNmkEmk0EikUAiUZ/o7tu3D25uboq4xsbG8Pb2rnS/HB0dsX37dkRHRyMmJgbffvutVkkcoOGIXGpqKlxdXVXK69evj5SUFK06RERERLqnT1OrXl5eSEtLw+jRo+Hn54cNGzYgLCwMRUVF+Prrr9W2zcjIgJ+fHwoLCzFt2jQ0atQIq1atwoIFC2Bqaqr0hIVdu3YhKSkJLi4uePLkCbKzs8uNu2LFCsybNw8ODg6YN28e3NzccO3aNVy4cEFn560JjRI5d3d3nD59Gk2aNFEqP336NBo0aKCTjhEREZHu6MuTHZYtW4anT59i5syZCAsLAwAEBgbCwcEB69atw8qVK2Fqalpu+ylTpiAvLw/r16/HlClTAABz586FnZ0dFi9erJTIXb16VbEnbrt27XD58uUyYz5+/Bj//ve/4eTkhJSUFEilGk1oikKjnpQ8wWHLli24e/cu7t69i82bN+P999/H5MmTdd1HIiIiMhA7d+4EAJWp0DFjxkAul2PLli1q20dERMDU1FSRxAGATCZDr169kJWVhaioKEV56QcbqBMUFAS5XI4PPvigViVxgIaJ3IIFCzBx4kS89957aNq0KZo2bYpZs2Zh9uzZCAoK0nUfiYiISEslU6vaHNUhOTkZlpaWkMlkSuX9+vUDAJw8eVJt+2fPnpW57szf3x9AcaJXVX/88QeA4seR2tjYQCKRQCqVwsPDAzExMVWOp0saTa1KJBKEhITgo48+wrVr12Bubo4WLVrAzMxM1/0jIiIiHRAAyLVsD0BlLbyNjQ1sbGy0iKwsLy+vzHgeHh4AgEePHqltL5fLy3zKVMnSr/v371e5T0+fPgUA/Pvf/0anTp0wcuRIREdHY+fOnejatSvu378PR0fHKsfVBa3GB62srNCpUyd4e3sziSMiIqrFdDUi17lzZ7i7uyuOoUOHlvueoaGhirtBKzrCw8MV7dTdPVrRnaW6aP+ikgfae3p64s8//0RgYCB27NiBRYsWoaCgQKtnpTZr1gz16tXTuL1GI3JERERkmM6fP6+0c4W60bjevXtj/PjxlYrbsWNHAICZmVmZj6y6e/cuAFQ48iWVSpGRkaFSXjISV9auGxWxsrLC06dPMWTIEKXyBQsWIDg4GNHR0VWOWcLZ2VmrdXdM5IiIiAyAru5adXV1hZubW6XatG/fHtu2bavS+7i5ueH69evIzc1VWid37NgxAEDPnj3Vtrezs8PDhw9Vys+dOweg+OH1VeXp6YnExMRyX9cmETtz5ozGbQEtp1aJiIhIP+jLzQ6jR48GAJWnRO3cuRNSqRQTJkxQ2z4gIAD5+flKj73Kzc1FZGQkLC0t0aFDhyr3qWTLkgMHDiiVBwcHAwC6d+9e5Zi6whE5IiIiqjWWLFmCVatWISwsDGlpaWjfvj02btyIx48fY/r06Up7yLVs2RI3b97EqVOnFMnU+vXrsW/fPkydOhUxMTHw8PBAaGgo8vLyEBISovRep0+fxt69ewH8cxNHyXo3Hx8fxbTwK6+8grZt2+Ly5cvo2LEjRowYgZiYGPzwww8wNzcv86kRAODn51fp89Z0epaJHBERkQHQlw2BgeJHbA0cOBA7duzAd999B5lMhlmzZuGrr75SqieXF9+HW3IzAlC8Zi8qKgrDhg3D2rVrIQgCrKysEBISorQZMABs2bJF5YH1K1asAFB8E0Lp9X0lMY8dO4bo6GhIpVK0adMGhw4dgpWVVZnn8ffff2v+RagkJnJEREQGQC4UH9q0ry4uLi6IjY2tsN6tW7fKLPf29sbt27crbP/NN9/gm2++qVSfTE1N8csvv1Sqbom0tLQq1dcE18gRERERVZNjx47hs88+U+xNVzKqqCmOyBERERkAfZparYtu3ryJLl26KEbpunfvjt69e8PT01MxHawJjsgREREZAH25a7WuGjhwIKRSKc6fP69UPmHCBFy5ckXjuByRIyIiIhLZnTt3sHPnTnTq1EmpvHv37sjLy9M4LhM5IiIiAyAIxYc27Ulzcrm8zEdxJSQkaPTYsBKcWiUiIjIAcki0Pkhz9evXxyeffKL4XCqVorCwEB9++CEaNGigcVyOyBERERkAbde5cY2cdr755hu89tprqF+/PgBgzJgxePToEQoLCxEREaFxXL0ckUtLS8O4ceNga2sLW1tbjBs3Ds+ePSu3fkFBARYuXIi2bdvC0tISDRo0wPjx4xUP0C3Ru3dvSCQSpWPUqFEinw0RERHVdUOHDkVsbCzatGkDJycn5Ofno1OnToiOjsbLL7+scVy9HJEbM2YM7t27hyNHjgAApkyZgnHjxuHgwYNl1s/OzkZMTAw++ugj+Pj4IC0tDXPnzsXQoUNVbvedPHmy0tCnubm5eCdCRERUTbhGruZkZ2ejYcOG2LVrF/744w+dxta7RO7atWs4cuQIzp07hy5dugAANm7cCH9/f9y4cQOtWrVSaWNra6sybBkWFobOnTsjMTERjRo1UpRbWFjAxcVF3JMgIiKqZtxHruZYWFggPT0dUqnuJ0L1bmr17NmzsLW1VSRxANC1a1fY2trizJkzlY6Tnp4OiUQCOzs7pfIdO3bA0dERXl5emD9/Pp4/f642Tl5eHjIyMpQOIiIiotI6dOiAjz76SOdx9W5ELjU1FU5OTirlTk5OSE1NrVSM3NxcLFq0CGPGjIGNjY2ifOzYsWjSpAlcXFxw5coVBAUFIS4uTu0ixODgYCxbtqzqJ0JERFSN9OlZq3VRfn4+oqOjYWFhAQ8PD1hYWCi9Hh0drVHcWjMit3TpUpUbDV48StazlbXfiiAIldqHpaCgAKNGjYJcLseaNWuUXps8eTL69esHb29vjBo1Crt378Zvv/2GmJiYcuMFBQUhPT1dcSQlJVXxzKsmJS5Z1PgA8PRy2Q8h1pXCv66KGt/6/jVR47eTxoka39MtV9T4AODfQ/Nb3fXJo8t3RI2fFS/uz5rsb3F/1tyei3stAoC30wNR43dqb1FxJS206+4pavxqpe1THXjXqlaSkpJgZ2cHMzMzpKam4u+//1Y6NFVrRuRmzpxZ4R2ijRs3xqVLl/Dggep/DI8ePYKzs7Pa9gUFBRgxYgQSEhLw+++/K43GlaVDhw4wMTHBzZs30aFDhzLrmJmZwczMTKVcYgRIjXT/Q+/SrqHOY76onncLUeNL2/pBu0cEq/fUubWI0YEbec1Fjf/nVRMARaK+x8VziaLGL6jiLuWmVmYwMzXReT/sW3voPGZpZm28RI2f3chb1Ph3ZZ6AyKMs0YmOosa/fEX98hdtxfweK2r8woIcUeNT7VHyjFVdqzWJnKOjIxwdK77g/f39kZ6ejvPnz6Nz584AgD///BPp6eno1q1bue1KkribN2/i+PHjcHBwqPC94uPjUVBQAFdX18qfCBERUS3Eu1brploztVpZrVu3xsCBAzF58mScO3cO586dw+TJkzF48GClO1Y9PT2xb98+AEBhYSGGDx+OqKgo7NixA0VFRUhNTUVqairy8/MBALdv38Ynn3yCqKgo3LlzB4cPH8abb74JX19fdO/evUbOlYiISFf4ZIe6qdaMyFXFjh07MHv2bAQEBAAo3mRv9erVSnVu3LiB9PR0AMC9e/dw4MABAED79u2V6h0/fhy9e/eGqakpjh07hlWrViEzMxPu7u549dVX8fHHH8PIyEj8kyIiIhIRR+TqJr1M5Ozt7bF9+3a1dYRSP3GNGzdW+rws7u7uOt+kj4iIiEhMepnIERERUdXwWat1ExM5IiIiA8B95OomvbvZgYiIiIiKcUSOiIjIAPBmh7qJiRwREZEBECDR6sH32rQl8XBqlYiIiEhPcUSOiIjIAMih5c0OOusJ6RITOSIiIgPANXJ1E6dWiYiIiPQUR+SIiIgMAEfk6iYmckRERAZALkgg1+LpDNq0JfEwkSMiIjIAHJGrm7hGjoiIiEhPcUSOiIjIAHBErm5iIkdERGQABEG7feSYyNVOnFolIiIi0lMckSMiIjIAgiCBoMWdp9q0JfEwkSMiIjIAXCNXN3FqlYiIiEhPcUSOiIjIAMi1vNlBm7YkHiZyREREBoBTq3UTp1aJiIiI9BRH5IiIiAwAR+TqJiZyREREBoBr5OomJnJEREQGgCNydRPXyBEREVGtkpqaCl9fXxgZGUEikcDc3ByzZ8+udPv4+Hg0b94cUqkUEokE1tbW+Pzzz1XqLVmyBM2aNYNMJoNEIoFEUv6mx8eOHUPTpk1hbGwMiUQCExMT+Pn54ebNmxqdo65wRI6IiMgAyOXFhzbtq4uXlxfS0tIwevRo+Pn5YcOGDQgLC0NRURG+/vprtW0zMjLg5+eHwsJCTJs2DY0aNcKqVauwYMECmJqaYs6cOYq6u3btQlJSElxcXPDkyRNkZ2eXGfPatWvo378/jIyMMGHCBLRu3Rp//PEHDhw4AB8fH2RkZMDYuGZSKo7IERERGYCSqVVtjuqwbNkyPH36FDNmzMCOHTsQGBiI69evw97eHuvWrUN+fr7a9lOmTEFeXh7WrFmDNWvWYNGiRUhISICZmRkWL16sVPfq1avIz89HYmIimjVrVm7M//73vxAEAcuXL8fGjRsRGBiI/fv3IyAgADk5Ofjxxx91cu6aYCJHREREtcbOnTsBQGUqdMyYMZDL5diyZYva9hERETA1NcWUKVMUZTKZDL169UJWVhaioqIU5ZUdRTM1NQUAODs7K5Xb29sDAKytrSsVRwxM5IiIiAyArkbkUlJScO/ePcWRkZGh034mJyfD0tISMplMqbxfv34AgJMnT6pt/+zZMzg5OamU+/v7AyhO9Krqo48+gpGREWbPno39+/cjNTUVYWFh+PHHH+Hs7IzBgwdXOaaucI0cERGRAZBDy+1H/v/fzp07K5X36tULkZGRmgd+QV5eHmxsbFTKPTw8AACPHj1S214ul5c5QtagQQMAwP3796vcp0aNGiEqKgo9e/bEa6+9pih3c3NDfHx8lePpEkfkiIiIqNLOnz+PpKQkxXHgwIFy64aGhiruBq3oCA8PV7RTd/eoutd01f5FCQkJ6NGjBwoKCvDee+8hLCwMo0aNwv3799G0aVPk5uZWOaaucESOiIjIAAiCAEGLOxZK2rq6usLNza1SbXr37o3x48dXqm7Hjh0BAGZmZsjJyVF5/e7duwAAR0dHtXGkUmmZ070lI3Gurq6V6k9po0ePRlZWFi5evIj27dsDAGbOnIlOnTph3rx5mDVrFjZu3FjluLrARI6IiMgA1MSGwO3bt8e2bduq1MbNzQ3Xr19Hbm6u0jq5Y8eOAQB69uyptr2dnR0ePnyoUn7u3DkAwIABA6rUHwC4desWjI2NFUlciTFjxmDevHmIjY2tckxd4dQqERER1RqjR48GACxcuFCpfOfOnZBKpZgwYYLa9gEBAcjPz8emTZsUZbm5uYiMjISlpSU6dOhQ5T7Z29ujsLBQ6Y5XANi6dSsAwN3dvcoxdUUvE7m0tDSMGzcOtra2sLW1xbhx4/Ds2TO1bd555x2V+fiuXbsq1cnLy8OsWbPg6OgIS0tLDB06FPfu3RPxTIiIiKqHIP9nU2BNDqGaNgResmQJ7O3tERYWhvHjx2PFihVo3bo1Hj9+jKlTpyq2AgGAli1bQiKR4PTp04qy9evXw8zMDFOnTsWMGTPwv//9D02bNkVeXh4+++wzpfc6ffo05s2bh3nz5iElJQUAFJ9/++23Sn0CgO7du2PKlClYsWIFhg8fjg8++ABSqRTBwcFifknU0sup1TFjxuDevXs4cuQIgOLN/8aNG4eDBw+qbTdw4ECl/WdK/zAAwNy5c3Hw4EHs2rULDg4OmDdvHgYPHozo6GgYGRnp/kSIiIiqiT49azU+Ph4DBw7Ejh078N1330Emk2HWrFn46quvlOrJ//9xE6XX/tnY2CAqKgrDhg3D2rVrIQgCrKysEBISovRUBwDYsmWL0sgdAKxYsQIA0KxZM8X6vrfeegtGRkaYN28eNm/ejKKiIhgbG6Nly5bYtm0bWrVqpfOvQWXpXSJ37do1HDlyBOfOnUOXLl0AABs3boS/vz9u3Lih9otpZmYGFxeXMl9LT0/Hpk2b8N133yn2qtm+fTvc3d3x22+/aTSnTkREVFvIBS23H6nGRM7FxaVS685u3bpVZrm3tzdu375dYftvvvkG33zzTaX6NHr0aMW0b22id1OrZ8+eha2trSKJA4CuXbvC1tYWZ86cUds2MjISTk5OaNmyJSZPnqy0GDI6OhoFBQUICAhQlDVo0ADe3t5q4+bl5SEjI0PpICIiIqoOepfIpaamlrljs5OTE1JTU8ttN2jQIOzYsQO///47vvzyS1y4cAEvv/wy8vLyFHFNTU1Rr149pXbOzs5q4wYHByvW6tna2tbogkciIqLy6MuzVqlqak0it3Tp0go3Cyy5W6SszfwEQVC7yd/IkSPx6quvwtvbG0OGDMEvv/yCv/76C4cOHVLbr4riBgUFIT09XXEkJSVV8ow1k3opWdT4AJB25aao8eWXo0WNb//gmqjxW5mVPZSvK13aFIgaHwB8uzYS/T1qg6fX7ooaP++quDu6WyReETW+R+51UeMDgF+jx6LGb+st7jMuO7zcXtT41UmQC1ofVPvUmjVyM2fOxKhRo9TWady4MS5duoQHDx6ovPbo0SOVh9mq4+rqCg8PD9y8WZy0uLi4ID8/H2lpaUqjcg8fPkS3bt3KjWNmZgYzMzOV8oLsQuQb6f6HvoFvQxTmivuLvr6fp6i3Jxm18QEK80WL/8it6reWV8X17Gaixj93RQpA3P8w4y8mQ2ok3t9xVY1dmFuAgiLdn3P9dk0hLyzSedwS5m3aAIWFosXPbdQGUhGvlb8tfcT+UcPZ2w6ixr9y5Zmo8S+fiBM1viCvpltBqc6qNYmco6Njhbs1A8UPvU1PT8f58+cVz3v7888/kZ6erjbhetGTJ0+QlJSk2OHZz88PJiYmiIiIwIgRIwAUPxj4ypUr+N///qfBGREREdUe+nSzA1VerZlarazWrVtj4MCBmDx5Ms6dO4dz585h8uTJGDx4sNIdq56enti3bx8AIDMzE/Pnz8fZs2dx584dREZGYsiQIXB0dMS//vUvAICtrS0mTpyIefPm4dixY7h48SLeeusttG3bVnEXKxERkb7iGrm6qdaMyFXFjh07MHv2bMUdpkOHDsXq1auV6ty4cQPp6ekAACMjI1y+fBnffvstnj17BldXV/Tp0wfh4eGwtv5nfcXKlSthbGyMESNGICcnB3379sXWrVu5hxwRERHVSnqZyNnb22P79u1q65TeHNDc3By//vprhXFlMhnCwsIQFhamdR+JiIhqE7lcgFyL+VFt2pJ49DKRIyIioqrRpyc7UOXp3Ro5IiIiIirGETkiIiIDwBG5uomJHBERkQGQCwLkWmRj2rQl8TCRIyIiMgCCXLu93kXcJ560wDVyRERERHqKI3JEREQGQICgtDWXJu2p9mEiR0REZAAEOaDNo105tVo7cWqViIiISE9xRI6IiMgACIKWU6u8a7VWYiJHRERkAORC8aFNe6p9OLVKREREpKc4IkdERGQABLkAQYthNW3akniYyBERERkAPqKrbuLUKhEREZGe4ogcERGRAZDLBci1mB7Vpi2Jh4kcERGRAeD2I3UTEzkiIiIDIMi1ezoDn+xQO3GNHBEREZGe4ogcERGRAZALAuRaTI9q05bEw0SOiIjIAHCNXN3EqVUiIiIiPcUROSIiIgPA7UfqJiZyREREBoBPdqibOLVKREREpKc4IkdERGQABEHQ6sH3vNmhdmIiR0REZAAELbcfYSJXO3FqlYiIiEhPcUSOiIjIAAhyLadWeddqrcREjoiIyAAwkaubmMgREREZALlQfGjTnmofrpEjIiIi0lMckSMiIjIAnFqtm5jIERERGQBBELTaQoTbj9ROnFolIiKiWiU1NRW+vr4wMjKCRCKBubk5Zs+eXen28fHxaN68OaRSKSQSCaytrfH5558r1bl37x769+8POzs7xfvIZDIMGjQIz549U4mZnZ2NPn36wNjYGBKJBGZmZhg+fLi2p6o1vUzk0tLSMG7cONja2sLW1hbjxo0r84temkQiKfMo/Y3t3bu3yuujRo0S+WyIiIjEJ5cXP/he86P6+url5YW4uDiMGjUKX375JTw8PBAWFoYZM2ZU2DYjIwN+fn64c+cOpk2bhuDgYFhZWWHBggVYtWqVot6FCxdw7NgxNGvWDIsWLcIXX3wBf39/HDlyBE2bNoX8hRPu0KEDIiMjMWDAAKxcuRIdOnTAnj17EBAQoPPzrwq9TOTGjBmD2NhYHDlyBEeOHEFsbCzGjRuntk1KSorSsXnzZkgkErzxxhtK9SZPnqxUb/369WKeChERUbUomVrV5qgOy5Ytw9OnTzFjxgzs2LEDgYGBuH79Ouzt7bFu3Trk5+erbT9lyhTk5eVhzZo1WLNmDRYtWoSEhASYmZlh8eLFinrdu3dHamoqoqOj8dlnn2HevHk4fvw4Xn31VaSlpWHdunWKuvv378eNGzcQEBCAQ4cOYe7cuTh79iw8PT0RERGB27dvi/b1qIjeJXLXrl3DkSNH8M0338Df3x/+/v7YuHEjfv75Z9y4caPcdi4uLkrH/v370adPHzRt2lSpnoWFhVI9W1tbsU+JiIiI/t/OnTsBQGUqdMyYMZDL5diyZYva9hERETA1NcWUKVMUZTKZDL169UJWVhaioqIAAE5OTnByclJpP2DAAADF+UaJ1atXl9mn999/HwCwYsWKSp2bGPQukTt79ixsbW3RpUsXRVnXrl1ha2uLM2fOVCrGgwcPcOjQIUycOFHltR07dsDR0RFeXl6YP38+nj9/rjZWXl4eMjIylA4iIqLapuSuVW2O6pCcnAxLS0vIZDKl8n79+gEATp48qbb9s2fPykzQ/P39ARQneurs2bMHANCrVy9F2V9//QWJRIJ27dop1X3ttdcAABcvXlQbU0x6d9dqampqmd8gJycnpKamVirGtm3bYG1tjddff12pfOzYsWjSpAlcXFxw5coVBAUFIS4uTu03PTg4GMuWLavaSRAREVUzXW0/kpKSolRuY2MDGxsbrfpWWl5eXpnxPDw8AACPHj1S214ul8Pa2lqlvEGDBgCA+/fvl9t29+7d+OOPP+Dq6qp0I0NmZiZMTExU6pfkI2lpaWr7JKZaMyK3dOnScm9IKDlKhkMlEolKe0EQyiwvy+bNmzF27FiVbH/y5Mno168fvL29MWrUKOzevRu//fYbYmJiyo0VFBSE9PR0xZGUlFSFs666+xeTRY0PAI+ir4sav+hqnKjx698r//ulC54W4q6F6Oot/opiL9+Gor9HbfDo0t+ixs+5elXU+LJEceM3zRL3WgQA/2ZPRI3v7W0navy2L/mIGl8fde7cGe7u7opj6NCh5dYNDQ2t8Hd7yREeHq5op+73eWV+12vS/tSpUxg1ahRMTEwqHPXTpE9iqTUjcjNnzqzwDtHGjRvj0qVLePDggcprjx49grOzc4Xvc/LkSdy4cUPpB6Y8HTp0gImJCW7evIkOHTqUWcfMzAxmZmYq5UUFchTJdf+NdfVxRWFeoc7jlubS1UvUIXSTNm0BeZFo8R+7d4BUEC/+5axWosUGgKjrEkhE/hPr3DFxk/WC/Mwq1TcyNYKxqe7/O6rv11rnMUszcXcHBPES73z3VpDKC0SLf8+2LWTIEy0+ANx9Xh9NXcQ7h9/O5sPCUnWkRFf+/CVKtNjVTQ4Bci1uWJCjuO358+fh6uqqKFc3Gte7d2+MHz++UvE7duwIoPj3ak5Ojsrrd+/eBQA4OjqqjSOVSstc5lQyEle67yVOnz6NPn36QCKR4PTp02jWrJnS61ZWVmWOuj18+BAAYGdnp7ZPYqo1iZyjo2OF3xygeI47PT0d58+fR+fOnQEAf/75J9LT09GtW7cK22/atAl+fn7w8an4r6z4+HgUFBSU+U0nIiLSJ7qaWnV1dYWbm1ul2rRv3x7btm2r0vu4ubnh+vXryM3NVZo5O3bsGACgZ8+eatvb2dkpEqzSzp07B+CfmxlKnD59Gr1794YgCPjjjz/QqVMnlbatWrVCYmIiLl26pLRO7sCBAwAAX1/fSp6d7tWaqdXKat26NQYOHIjJkyfj3LlzOHfuHCZPnozBgwejVat/Rko8PT2xb98+pbYZGRn48ccfMWnSJJW4t2/fxieffIKoqCjcuXMHhw8fxptvvglfX190795d9PMiIiISk75sPzJ69GgAwMKFC5XKd+7cCalUigkTJqhtHxAQgPz8fGzatElRlpubi8jISFhaWirNsJ09e1aRxP3222/l/r4v2b/uxT6V3K0aGBhYybPTvVozIlcVO3bswOzZsxWb8A0dOlRxa3CJGzduID09Xals165dEARB8UNSmqmpKY4dO4ZVq1YhMzMT7u7uePXVV/Hxxx/DyMhIvJMhIiIihSVLlmDVqlUICwtDWloa2rdvj40bN+Lx48eYPn06TE1NFXVbtmyJmzdv4tSpU4okbP369di3bx+mTp2KmJgYeHh4IDQ0FHl5eQgJCVG0jY+Px0svvYTCwkJMnz4dt27dwq1btxSv+/j4KEbnhg0bhlatWuHIkSMYPHgw+vfvjx9++AHXrl1D//79VaZiq5NeJnL29vbYvn272jpl/eUwZcoUpX1lSnN3d8cff/yhk/4RERHVNsL/P6FBm/bVJT4+HgMHDsSOHTvw3XffQSaTYdasWfjqq6+U6pU8faH073wbGxtERUVh2LBhWLt2LQRBgJWVFUJCQjBnzhxFvYiICBQWFq85X7t2rUofevXqhcjISMXnMTExeOWVV3DkyBEcOnQIJiYmeOONN7B7925dnnqV6WUiR0RERFWjqzVy1cHFxQWxsbEV1is9glaat7d3hU9bmDt3LubOnVvpPllYWCgldrWF3q2RIyIiIqJiHJEjIiIyANresFBdNztQ1TCRIyIiMgCCXA5Brvm+h9q0JfFwapWIiIhIT3FEjoiIyADItbxrVZu2JB4mckRERAaAa+TqJk6tEhEREekpjsgREREZAH3aR44qj4kcERGRAWAiVzcxkSMiIjIAcsghFzTfQkQObj9SG3GNHBEREZGe4ogcERGRARDk2k2PajGYRyJiIkdERGQAuEaubuLUKhEREZGe4ogcERGRAeCGwHUTEzkiIiIDIJfLIdfiwffatCXxcGqViIiISE9xRI6IiMgA8GaHuomJHBERkQEQBDkELfYQ0aYtiYdTq0RERER6iiNyREREBoBTq3UTEzkiIiJDoGUiByZytRITOSIiIgMgF+SQa7HOTZu2JB6ukSMiIiLSUxyRIyIiMgBcI1c3MZEjIiIyAIIgh6DF0xm4/UjtxKlVIiIiIj3FETkiIiIDwKnVuomJHBERkQHgkx3qJk6tEhEREekpjsgREREZALkckGsxParFfRIkIiZyREREBkCQa3nXKjO5WolTq0RERER6iiNyREREBoB3rdZNejki99lnn6Fbt26wsLCAnZ1dpdoIgoClS5eiQYMGMDc3R+/evREfH69UJy8vD7NmzYKjoyMsLS0xdOhQ3Lt3T4QzICIiql4ld61qc1Dto5eJXH5+Pt58801Mnz690m3+97//YcWKFVi9ejUuXLgAFxcX9O/fH8+fP1fUmTt3Lvbt24ddu3bh1KlTyMzMxODBg1FUVCTGaRAREVWbkhE5bQ6qffRyanXZsmUAgK1bt1aqviAICA0NxeLFi/H6668DALZt2wZnZ2d8//33mDp1KtLT07Fp0yZ899136NevHwBg+/btcHd3x2+//YYBAwaIci5EREREmtLLRK6qEhISkJqaioCAAEWZmZkZevXqhTNnzmDq1KmIjo5GQUGBUp0GDRrA29sbZ86cKTeRy8vLQ15enuLz9PR0AEC2SKN4mQUFosQtLSMnr+JKWjDJyhE1/vPMTFHjZ2dliBo/N1sianwAKMgX92tUmJ8FoPiPKHVKXs8sKBSlH2Zi/yxn54oaPz8zS9T4mdLnFVfSUnammajx83LyRY1fWCDu96CwMBtAxdeKTt4r/7lWd54WFYr7tSDNGEQil5qaCgBwdnZWKnd2dsbdu3cVdUxNTVGvXj2VOiXtyxIcHKwYISxt+M2r2na7bNcvixO3tB9/E/89yCA8f/4ctra2al8HgB67fxenAzuPihOXSMcqula0YWVlBalUiqhjI7SOJZVKYWVlpYNeka7UmkRu6dKlZSZEpV24cAEdO3bU+D0kEuWRDkEQVMpeVFGdoKAgBAYGKj6Xy+V4+vQpHBwcKoytSxkZGXB3d0dSUhJsbGyq7X2rG89TPwiCgOfPn6NBgwZq6zVo0ABJSUmwtraututF37+2VWEo56rP51nZa0UbdnZ2ePLkCTJ1MFthZWVV6ZsMqXrUmkRu5syZGDVqlNo6jRs31ii2i4sLgOJRN1dXV0X5w4cPFaN0Li4uyM/PR1pamtKo3MOHD9GtW7dyY5uZmcHMTHnqoCZ/yG1sbPTuPzJN8Dxrv8qMLkilUri5uVVDb1Tp89e2qgzlXPX1PMUaiSvNzs6OCVgdVWsSOUdHRzg6OooSu0mTJnBxcUFERAR8fX0BFN/5+scffyAkJAQA4OfnBxMTE0RERGDEiOLh55SUFFy5cgX/+9//ROkXERERkTZqTSJXFYmJiXj69CkSExNRVFSE2NhYAEDz5s0Vc/eenp4IDg7Gv/71L0gkEsydOxfLly9HixYt0KJFCyxfvhwWFhYYM2YMgOK/iCZOnIh58+bBwcEB9vb2mD9/Ptq2bau4i5WIiIioNtHLRG7JkiXYtm2b4vOSUbbjx4+jd+/eAIAbN24o7iAFgAULFiAnJwfvvfce0tLS0KVLFxw9ehTW1taKOitXroSxsTFGjBiBnJwc9O3bF1u3boWRkVH1nJgWzMzM8PHHH6tM89Y1PE/SliF9bQ3lXA3lPInKIhGq455nIiIiItI5vXyyAxERERExkSMiIiLSW0zkiIiIiPQUEzkiIiIiPcVEjoiIiEhPMZHTY4WFhfjwww/RpEkTmJubo2nTpvjkk08g1+KhyLXFiRMnMGTIEDRo0AASiQQ//fSTSp1r165h6NChsLW1hbW1Nbp27YrExMTq76wW1q5di3bt2il2pPf398cvv/wCACgoKMDChQvRtm1bWFpaokGDBhg/fjzu379fw73WT3X1euG1wmuFDBsTOT0WEhKCdevWYfXq1bh27Rr+97//4fPPP0dYWFhNd01rWVlZ8PHxwerVq8t8/fbt2+jRowc8PT0RGRmJuLg4fPTRR5DJZNXcU+24ubnhv//9L6KiohAVFYWXX34Zw4YNQ3x8PLKzsxETE4OPPvoIMTEx2Lt3L/766y8MHTq0prutl+rq9cJrhdcKGTbuI6fHBg8eDGdnZ2zatElR9sYbb8DCwgLfffddDfZMtyQSCfbt24fXXntNUTZq1CiYmJjUqfMsYW9vj88//xwTJ05Uee3ChQvo3Lkz7t69i0aNGtVA7/SXIVwvvFb+wWuFDAVH5PRYjx49cOzYMfz1118AgLi4OJw6dQqvvPJKDfdMXHK5HIcOHULLli0xYMAAODk5oUuXLmVOKemToqIi7Nq1C1lZWfD39y+zTnp6OiQSCR9+rQFDvF54rfBaIQMgkN6Sy+XCokWLBIlEIhgbGwsSiURYvnx5TXdL5wAI+/btU3yekpIiABAsLCyEFStWCBcvXhSCg4MFiUQiREZG1lxHNXTp0iXB0tJSMDIyEmxtbYVDhw6VWS8nJ0fw8/MTxo4dW809rBsM4XrhtVKM1woZEiZyemznzp2Cm5ubsHPnTuHSpUvCt99+K9jb2wtbt26t6a7p1Iu/nJKTkwUAwujRo5XqDRkyRBg1alQ19057eXl5ws2bN4ULFy4IixYtEhwdHYX4+HilOvn5+cKwYcMEX19fIT09vYZ6qt8M4XrhtcJrhQyPcc2NBZK2/v3vf2PRokUYNWoUAKBt27a4e/cugoOD8fbbb9dw78Tj6OgIY2NjtGnTRqm8devWOHXqVA31SnOmpqZo3rw5AKBjx464cOECVq1ahfXr1wMoviNvxIgRSEhIwO+//w4bG5ua7K7eMsTrhdcKrxWq+5jI6bHs7GxIpcrLHI2MjPR+O4WKmJqaolOnTrhx44ZS+V9//QUPD48a6pXuCIKAvLw8AP/8Yrp58yaOHz8OBweHGu6d/jLE64XXClHdx0ROjw0ZMgSfffYZGjVqBC8vL1y8eBErVqzAu+++W9Nd01pmZiZu3bql+DwhIQGxsbGwt7dHo0aN8O9//xsjR47ESy+9hD59+uDIkSM4ePAgIiMja67TGvjggw8waNAguLu74/nz59i1axciIyNx5MgRFBYWYvjw4YiJicHPP/+MoqIipKamAii+W8/U1LSGe69f6ur1wmuF1woZuJqe2yXNZWRkCHPmzBEaNWokyGQyoWnTpsLixYuFvLy8mu6a1o4fPy4AUDnefvttRZ1NmzYJzZs3F2QymeDj4yP89NNPNddhDb377ruCh4eHYGpqKtSvX1/o27evcPToUUEQBCEhIaHMrwEA4fjx4zXbcT1UV68XXiu8VsiwcR85IiIiIj3FfeSIiIiI9BQTOSIiIiI9xUSOiIiISE8xkSMiIiLSU0zkiIiIiPQUEzkiIiIiPcVEjoiIiEhPMZEjIiIi0lNM5KhOevLkCZycnHDnzp0a68Pw4cOxYsWKGnt/osrgtUKk35jIkU699NJLkEgkKsfYsWOrtR/BwcEYMmQIGjdurChLTU3FnDlz0Lx5c8hkMjg7O6NHjx5Yt24dsrOzKxV3yJAh6NevX5mvnT17FhKJBDExMQCAJUuW4LPPPkNGRobW50N1D68VXitEOlHTzwijukMulwvW1tbCF198IaSkpCgdz58/r7Z+ZGdnC3Z2dsKZM2cUZbdv3xZcXFwET09PITw8XLh69apw6dIlYffu3cIrr7wi7N+/v1Kx9+3bJ0gkEuHOnTsqr02aNElo3769UlmHDh2ENWvWaHdCVOfwWuG1QqQrTORIZ27cuCEAEM6fP1+j/dizZ4/g6OioVDZgwADBzc1NyMzMLLONXC5X+jgkJERo0qSJIJPJhHbt2gk//vijIAiCUFBQIDg7OwtLly5Vap+VlSVYW1sLYWFhSuVLly4VevbsqYvTojqE1wqvFSJd4dQq6Ux0dDSMjY3Rrl27Gu3HiRMn0LFjR8XnT548wdGjRzFjxgxYWlqW2UYikSg+/vDDD7FlyxasXbsW8fHxeP/99/HWW2/hjz/+gLGxMcaPH4+tW7dCEARFmx9//BH5+fkq02KdO3fG+fPnkZeXp+OzJH3Ga4XXCpGuMJEjnYmJiUFRUREcHBxgZWWlOCZPnlyt/bhz5w4aNGig+PzWrVsQBAGtWrVSqufo6Kjo48KFCwEAWVlZWLFiBTZv3owBAwagadOmeOedd/DWW29h/fr1AIB3330Xd+7cQWRkpCLW5s2b8frrr6NevXpK79GwYUPk5eUhNTVVpLMlfcRrhdcKka4Y13QHqO6Ijo7Gm2++ic8++0yp/MX/sIuKimBkZCRaP3JyciCTyVTKS48kAMD58+chl8sxduxYxSjA1atXkZubi/79+yvVzc/Ph6+vLwDA09MT3bp1w+bNm9GnTx/cvn0bJ0+exNGjR1Xe09zcHAAqvUCcDAOvFV4rRLrCETnSmYsXL6JHjx5o3ry50uHg4IA7d+7Ax8cHkydPhq+vL/Ly8rBlyxZ07twZ7dq1w5IlSxRxNm7ciLZt28LHxweLFi1SlIeEhMDb2xtt27bFjh07yu2Ho6Mj0tLSFJ83b94cEokE169fV6rXtGlTNG/eXPELBADkcjkA4NChQ4iNjVUcV69exe7duxX1Jk6ciD179iAjIwNbtmyBh4cH+vbtq9KXp0+fAgDq169f2S8jGQBeK7xWiHSmZpfoUV1x+/ZtAYBw8uTJMl9PSEgQjIyMhLi4OEEQBCE+Pl4YPny4UFhYKBQVFQmDBw8Wzpw5I8TFxQne3t7Cs2fPBEEQhCdPngiCIAgXLlwQOnToIOTk5AhPnjwRmjZtKiQnJ5f5Xp9//rng4+OjVBYQECA0bNiwzAXcvXr1EubMmSMIgiBkZGQIZmZmwrfffqv2fJ8/fy5YWVkJa9euFdzc3IRly5aVWe+bb74R3Nzc1MYiw8JrhdcKkS5xapV0Ijo6GgDg7OysssbFyckJANCyZUvF4u5jx47h7Nmz8PPzAwBkZmbi9u3bePr0KUaOHAlbW1sAgL29PQDg1KlTeOONNyCTySCTydC3b19cuHABw4YNU+nLgAEDEBQUhLS0NMVU1Zo1a9C9e3d07NgRS5cuRbt27SCVSnHhwgVcv35d0Q9ra2vMnz8f77//PuRyOXr06IGMjAycOXMGVlZWePvttwEAVlZWGDlyJD744AOkp6fjnXfeKfPrcvLkSQQEBGj8daW6h9fKO2V+XXitEGmGiRzpRMnGni1btlQqNzExwfPnzwEAFhYWinJBEDBlyhSlaSIA+Oqrryr1foIgqKzjKdG2bVt07NgRP/zwA6ZOnQoAaNasGS5evIjly5cjKCgI9+7dg5mZGdq0aYP58+fjvffeU7T/z3/+AycnJwQHB+Pvv/+GnZ0dOnTogA8++EDpfSZOnIhNmzYhICAAjRo1UulHbm4u9u3bh19//bVS50SGgdcKrxUinarZAUEyFAkJCYKfn5/i88uXLwtt2rQRnj59KgiCICQlJQmPHz8WLl++XO50kZ+fn5Cbmys8ffpUaNasmXD//v1y3+/QoUNC69athaKiIhHPSr3Vq1cL/fv3r7H3J/3Ea4WIqoIjclQjvL29sXDhQvTu3RtyuRzW1tbYtWsXvL29MWfOHHTv3h3GxsYYNGgQgoOD0bFjR7z55pvw8/ODRCLBsmXL4OrqWm78V155BTdv3kRycjLc3d2r8cz+YWJigrCwsBp5b6o7eK0QkToSQSi1UyMRERER6Q1uP0JERESkp5jIEREREekpJnJEREREeoqJHBEREZGeYiJHREREpKeYyBERERHpKSZyRERERHqKiRwRERGRnmIiR0RERKSnmMgRERER6SkmckRERER6iokcERERkZ76P+g2YDIp1lu0AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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yFhx2JSUXLx4UWUIKD4+HqampmjatKlS+bVr19C6dWsA6meWPX78GB06dMDjx4+xbNkynDx5EqdPn4aJiYn4C0jbX0Y9evRAXFwcbt68idzcXPz4448qvSBldf36dTRs2FDte+raefHiRbi4uMDV1RWA6g3aly9fhr+/v9I+ly5dUnu+jo6OMDExUellS0tLU+mNo+qD10vVXC9Exo7JG4mePHmC+/fvq/QkWFtbo6CgQOnemMTEROzatUtco+nPP/9EmzZtlPbbv38/8vPzsX37dgQGBqJly5Y4fvw48vLy0LZtWzx79gwJCQla/edsaWkJLy8veHp6wtTUtMJxfvvtN/z555945513VN578eIFbt++jYKCArFMoVBg5cqV4lIKWVlZuHv3rvgLOTMzE/fu3YOvr69SLE2/fM3MzODn54fo6Gil8ujoaHTu3LnC50X6w+ul6q4XImPHYVMSXbhwAQBUfhl17NgR9vb2mD17NqZNm4a7d+9i2rRpePfdd8VFOBUKBa5cuYIHDx7A0tIStra2sLe3R1ZWFvbt24cWLVrg559/xuLFi1GvXj3UrVsXJ06cgImJCVq1alWp5ymXy5GamoqCggI8fPgQBw8exOLFizFgwAC89957KvUvX74MExMTbNq0Ca+//jrs7OzwySefIDs7G5988olSnZYtWyq9Lt67cu/ePaSnp2v8ZRQaGooxY8agffv28Pf3x7p165CYmIjg4GDdfwikNV4vVXu9PH/+HLdv3xZfJyQkIC4uDvb29qhfv74OPwGi6oc9byS6dOkSnJycUK9ePaVyW1tb7N27FydPnkSrVq3Em7G/++47sc6CBQuwc+dO1KtXD1988QUA4B//+AcmTJiAMWPGoGvXrkhOTsbQoUPF/4wvX74Mb29vyGQyMc7mzZv1fo/XwYMH4erqigYNGqBv3744duwYvv76a+zduxcmJiYq9S9fvoymTZti3rx5eOedd+Dr6wtTU1OcOnUK1tbWas+l6LWFhYUY59KlS7Czs0ODBg3UtmvYsGFYsWIFvvjiC7Rt2xbHjx/H/v37xdl4VL3weqna6yU2Nha+vr5ib11oaCh8fX0xd+5cHX8CRNWPRBAEoaobQVRk3rx5iImJQUxMTFU3haja4/VCZJw4bErVyqFDhxAZGVnVzSAyCLxeiIwTe96IiIiIDAjveSMiIiIy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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+ZqwaNEiPHnyBFOmTEF4eDgAYNasWXBycsKGDRvw+eefw9zcvNzyEydOREFBASIiIjBx4kQAwIwZM+Dg4IB58+apBIfz5s2DXC7H7du3YWFhAQBo3749goODERQUhMjISADAgQMHcP36dQQGBuLQoUNSnd7e3oiOjsatW7fQrFkzlXa88847aNmyZbntLCwsREREBJycnHDt2jUp3cHBAevWrcPixYuxYMGCqrx1esNhZSIiIiNQV4aVlQHZs8PAI0eOhEKhwNatWyssHx0dDXNzcykwBAALCwv06NEDubm5iI2NBQDExsYiNzcXPXv2lAJDAAgKCoKZmZlKb+DatWs1tmnmzJkAgNWrV1f1NrFlyxYoFAqMHDlSJV35Gsr34XlgcEhERES1RlJSEqytrVUCNgDo06cPAODkyZMVls/IyICzs7NaepcuXQCUBo8AcPToUZX0spydnZGRkSE9/vPPPyEIAtq1a6eSb/DgwQCACxcuqNXRunVraR5js2bNcPr0aZXnT506pXJfSlZWVrCyssL9+/cruk2D4rAyERGREdDXVjbJyckq6XZ2dipz83RVUFCgsT5PT08AwKNHjyosr1AoYGtrq5besGFDAMCDBw9U/m3UqJFaXltbWyQlJUmPc3JyYGZmppZPGYSmp6dLaa1atYK5uTleffVV2NjYIDo6GkePHsWrr76K33//HR07dlS5jyZNmqjVa2lpiaysrArv05DYc0hERGQEFPjfdjbVuv5bT+fOneHh4SFdb731VrmvGRoaWu7K3WevqKgoqVx5K3sre6465bWpryqvt2HDBhw7dgwLFizArFmz8MMPP0hDyOPHj1crK5NpDsX00a7qYs8hERERae3s2bNwc3OTHlfUa9izZ0+MGTNGq3qVPWpyuRx5eXlqz9+9excAUL9+/QrrkclkGnvdlD2FyrYrexI1Dd9mZ2erBG02NjYqvYNKqampAEoXkVRk7NixCA4Oxs2bN6W0Bg0aAAD++usv+Pj4qOTPy8urcNGNoTE4JCIiMgKiKELUYVxZWdbNzQ3u7u5alenQoQO2b99epddxd3fHtWvXkJ+frzLv8Pjx4wCA7t27V1jewcFBCtrKOnPmDACgb9++0r/z58+X0st69OiRSsDXsmVLJCYm4tKlSyrzDg8ePAgA8PX11ereyvYGvvbaa9i9ezeOHz+u0vua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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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fIO33npL48/QKJGzt7dHRkYG/Pz8VMpv3LhR6YNqiYiIqGEpIEChxaiaNm2N1aMbDA8YMADvvvsu3n//fWXZ8OHD0bp1a0RGRlb71IfqaPRkh5EjR2LChAmIjY3FjRs3cPPmTezYsQMTJ05U7shMRERE+sNQnuzQWBUUFCAoKEitPCgoqNJny9aWRiNyH330EQRBwLhx45Sb6ZmZmWHatGn473//q3FniIiIiBojKysrzJgxA08//TQcHR0BAHl5eZgxYwasrKw0jqtRImdubo5Vq1YhIiICV69ehSiK8PX1hbW1tcYdISIiIukY0pMdGqNPP/0UEyZMgJOTkzKRu3//PgCoPBe2rjRK5CIiIuDm5oY33ngDHTp0UJZ/8cUX+Pvvv9UedEtEREQNS4R2K081W1NJFcaPH4+hQ4ciLCwM58+fhyiK8Pf3x0cffQRXV1eN42qUyK1fvx5fffWVWnn79u0xatQoJnJEREREj3FxccG2bdt0GlOjRC47OxseHh5q5U888QSysrK07hQRERHpFqdWGyeNVq16e3vj8OHDauWHDx+Gp6en1p0iIiIi3eKq1cZJoxG5iic4lJSU4NlnnwUA7N+/H3PnztVqUzsiIiIiqj2NErm5c+fi3r17mD59OoqLiwEAlpaWmDdvHhYsWKDTDhIREZH2OLXaOGmUyAmCgMjISLz33ns4f/48rKys0KpVK1hYWOi6f0RERKQDIgCFlu1J/2iUyFWwtbXFU089pau+EBERkUQ4IqefWrZsiXv37iEnJ0ej9lolckRERESkOTc3N8hkGq09BcBEjoiIyChou/KUq1alceTIEa3aM5EjIiIyApxabZyYyBERERFJICgoqNZ1T548qdFnMJEjIiIyApxarX9//vmn5J/BRI6IiMgIKMTyQ5v2VDearkStC82XSRARERFRnezfvx8ffvgh7t27BwBQKLTZ3Y8jckREREaBU6sN6/Lly+jWrZtylK5nz57o3bs3/Pz8YG9vj+TkZI3ickSOiIjICFSsWtXmIM0NHDgQMpkMx48fVykfP348zp49q3FcjsgRERERSezatWuIiYlReyJWz549IZfLNY7LRI6IiMgIiGL5oU170pxCoUCTJk3UytPT0yEImo92cmqViIjICCggaH2Q5p544gksXbpU+Vomk6G0tBTvvvsuPD09NY7LETkiIiIjwCc7NKzPP/8czz//PJ544gkAwJgxY/D333+jtLQUCQkJGsc1yBG5nJwcjB07Fg4ODnBwcMDYsWNx//79KuuXlJRg3rx56NChA2xsbODp6Ylx48bh1q1bKvV69+4NQRBUjlGjRkl8NkRERNTYPffcc0hNTUW7du3g6uqK4uJiPPXUUzh58iSeffZZjeMa5IjcmDFjcPPmTcTHxwMAJk+ejLFjx+KHH36otP7Dhw+RkpKC9957DwEBAcjJyUFYWBiee+45teW+kyZNUhn6tLKyku5EiIiI6gnvkWs4Dx8+xJNPPokdO3bgwIEDOo1tcInc+fPnER8fj2PHjqFbt24AgA0bNiA4OBgXL15EmzZt1No4ODioDVtGR0eja9euyMjIQNOmTZXl1tbWcHd3l/YkiIiI6hn3kWs41tbWyM3NhUym+4lQg5taPXr0KBwcHJRJHAB0794dDg4OOHLkSK3j5ObmQhAEODo6qpRv374dLi4uaN++Pd5++208ePCg2jhyuRx5eXkqBxEREdGjOnfujPfee0/ncQ1uRC47Oxuurq5q5a6ursjOzq5VjKKiIsyfPx9jxoyBvb29svyVV15B8+bN4e7ujrNnz2LBggU4ffp0tTchRkREYMmSJXU/ESIionrEZ602rOLiYpw8eRLW1tbw8fGBtbW1yvsnT57UKK7ejMgtXrxYbaHB40fF/WyV7bciimKt9mEpKSnBqFGjoFAosGbNGpX3Jk2ahH79+sHf3x+jRo3Czp078csvvyAlJaXKeAsWLEBubq7yuHHjRh3PvI4UZdLGB2AifyhpfIuH9ySNb1lc/SiqtlqYpUsav51XgaTxASAw0Enyz9ALFpbShvfykja+k4Ok8R2bqf9RrGt27naSxrdykvY+ZvmDYknj1yttn+rAVatauXHjBhwdHWFhYYHs7Gz8+eefKoem9GZEbsaMGTWuEG3WrBnOnDmDv/76S+29v//+G25ubtW2LykpwYgRI5Ceno5ff/1VZTSuMp07d4aZmRkuX76Mzp07V1rHwsICFhYWauWiuSVEc93/ElGYmOk85uPKzKT9hzHP1kPS+A8ER0njX86R9pffsdQSAEWSfkbKwfOSxi8tzq9bA3tHwEaC/+/KygDb6q9zreT8DYum3pKFV+Tnw8xJfQNRXSlIv4EmLaW9Hh/ezoGFnXQJ9cO7BbB2sq65or4qKW3oHlA9qXjGqq7pTSLn4uICFxeXGusFBwcjNzcXx48fR9euXQEAv//+O3Jzc9GjR48q21UkcZcvX8Zvv/0GZ2fnGj8rLS0NJSUl8PCQ9h86IiIiqXHVauOkN1OrtdW2bVsMHDgQkyZNwrFjx3Ds2DFMmjQJQ4YMUVmx6ufnh7i4OABAaWkphg8fjuTkZGzfvh1lZWXIzs5GdnY2iovLh82vXr2KpUuXIjk5GdeuXcPevXvx8ssvIzAwED179myQcyUiItIVQ3qyQ3Z2NgIDA2FiYgJBEGBlZYVZs2bVun1aWhp8fX0hk8kgCALs7OywfPlytXo9e/aEtbW1sp6ZmRnatm2Lw4cPq9V9+PAh+vTpA1NTUwiCAAsLCwwfPlyr89QFvRmRq4vt27dj1qxZCA0NBVC+yd7q1atV6ly8eBG5ubkAgJs3b+L7778HAHTq1Eml3m+//YbevXvD3Nwc+/fvx6pVq5Cfnw9vb2/861//wvvvvw8TExPpT4qIiEhChjQi1759e+Tk5GD06NEICgrCZ599hujoaJSVleHTTz+ttm1eXh6CgoJQWlqKqVOnomnTpli1ahXmzp0Lc3NzzJ49W6Vu7969ERQUBGdnZxw7dgzffPMNnnnmGVy4cAGtWrVS1u3cuTMuXryIwYMHo3///oiNjcWuXbsQGhqKffv2Sfa9qIlBJnJOTk7Ytm1btXXER/6Pa9asmcrrynh7e+t8kz4iIiKqmyVLluDevXuYMWMGoqOjAQDh4eFwdnbGunXrsHLlSpibm1fZfvLkyZDL5Vi/fj0mT54MAAgLC4OjoyMWLlyoksj98ccfau3btWuH999/H8uWLcOmTZsAALt378bFixcRGhqKPXv2KGO2bdsWCQkJuHr1Klq2bKmz70FdGNzUKhEREdWdNitWtX1Oa13ExMQAgNpU6JgxY6BQKJTJVVUSEhJgbm6uTOIAwNLSEiEhISgoKFB7otPjmjVrBgAwM/tncWHFrN/jfZozZw4AYMWKFdXGlBITOSIiIiNQsY+cNgcAZGVl4ebNm8pD1xvhZ2ZmwsbGBpaWqqud+/XrBwA4dOhQte3v379f6X6zwcHBAFDp3rBFRUW4d+8eYmJiMGPGDJiZmak8rvPSpUsQBAEdO3ZUaff8888DAE6dOlXziUnEIKdWiYiIqGFU7BhRISQkBImJiTqLL5fLK90ezMfHB0D5dmPVUSgUsLNT37/Q09MTAHDr1i2V8jNnziAgIED52sbGBseOHVN5XGd+fr7KCF2FioRRqq1FaoMjckREREagYrGDNgcAHD9+HDdu3FAeFYsJKxMVFVXjZv8VR2xsrLJddRv812bz/7q0b926NbZs2YI1a9Zg3LhxKC4uRvfu3ZGamlrj59SlT1LhiBwREZERECFo9eD7irYeHh7wquVTTXr37o1x48bVqm6XLl0AlG+0X1hYqPb+9evXAaDGPWdlMlml070VI3GP7w1raWmp7OO0adMwY8YMdO3aFa+//roymbO1ta101O327dsAoPbc9vrERI6IiIgk0alTJ2zZsqVObby8vHDhwgUUFRWp3Ce3f/9+AECvXr2qbe/o6KhMsB517NgxAMCAAQOqbf/UU0/BxMQEmZmZyrI2bdogIyMDZ86cUblPrmI0MjAwsIazkg6nVomIiIyAAloudqinfo4ePRoAMG/ePJXymJgYyGQyjB8/vtr2oaGhKC4uxsaNG5VlRUVFSExMhI2NTZWP3Kywf/9+lJWVqYzcvfnmm5X2qWK1anh4eA1nJR2OyBERERkBQ9kQeNGiRVi1ahWio6ORk5ODTp06YcOGDbhz5w6mTZumsodc69atcfnyZSQlJSmfwrR+/XrExcVhypQpSElJgY+PD6KioiCXyxEZGalsu3PnTkyePBkDBgyAv78/TExMcPToUezZsweCIGDt2rXKusOGDUObNm0QHx+PIUOGoH///vj6669x/vx59O/fv8H2kAOYyBEREZGeSUtLw8CBA7F9+3Zs3boVlpaWmDlzJj755BOVegpF+Tjho5v+29vbIzk5GcOGDcPatWshiiJsbW0RGRmpshmwn58fHB0dsXPnTuzYsQMAYGpqijZt2uCLL75At27dVD4rJSUFgwcPRnx8PPbs2QMzMzO89NJL2Llzp1TfhlphIkdERGQEDGVEDgDc3d1rtWr0ypUrlZb7+/vj6tWr1bb19/fHn3/+Wes+WVtb63SbFV1hIkdERGQEFKIAhRZPZ9CmLUmHiRwREZERMKQROao9rlolIiIiMlAckSMiIjICHJFrnJjIERERGQHxkQffa9qe9A+nVomIiIgMFEfkiIiIjIAoChC1WHmqTVuSDhM5IiIiI8B75BonTq0SERERGSiOyBERERkBhZaLHbRpS9JhIkdE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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1WBwRkREZAtqYSkNMgzDYCIiIiILwp4zIiIiWyAIRg5rsuespjA4IyIisgVcSsNqcFiTiIiIyIKw54yIiMgWcJ0zq8HgjIiIyBZwWNNqMAwmIiIisiDsOSMiIrIFXITWajA4IyIisgWCkXPOGJzVGAZnREREtoBzzqwGw2AiIiIiC8KeMyIiIlvAOWdWg8EZERGRLeCwptVgGExERERkQdhzRkREZAu4Q4DVYHBGRERkA0RBgGjE0KQxZal6GAYTERERWRD2nBEREdkCQTDyaU32nNUUBmdERES2gEtpWA2+00REREQWhD1nRERENoAPBFgPq+45W7FiBQIDA6FUKhEaGop9+/ZVmPfbb79Fz549Ub9+fbi6uiIsLAy//fabRp7169dDEASto6ioyNyXQkREZF7lw5rGHFQjrPad3rJlC6ZNm4Z58+bh2LFj6Ny5M/r06YPLly/rzL9371707NkTv/zyC5KTk9G1a1f069cPx44d08jn6uqKzMxMjUOpVNbEJREREZlP+Q4BxhxUI6x2WHPJkiUYNWoURo8eDQCIiYnBb7/9hpUrVyIqKkorf0xMjMb3H374Ib7//nv8+OOPCAkJkdIFQYCPj49Z205ERERUEavsOSsuLkZycjIiIiI00iMiInDgwIEq1aFWq3Hnzh14eHhopN+9excBAQHw9/dH3759tXrWHqZSqZCfn69xEBERWZzyHQKMOaopKysLISEhsLOzgyAIcHBwwJQpU6pUNi0tDUFBQZDJZBAEAS4uLli8eLHOvB9//DFcXFwgCAJkMhmCgoKQlpZW7fYaKzc31yT1WGVwlp2djdLSUnh7e2uke3t7Iysrq0p1fPrppygoKMDAgQOltGbNmmH9+vX44YcfEB8fD6VSiU6dOuHs2bMV1hMVFQU3NzfpaNCggWEXRUREZEblDwQYc1RXy5YtkZqaisGDB+PTTz9FQEAA4uLiMHHiRL3l8vPzERoaiosXL2LcuHGIioqCs7MzZs6cidjYWI28sbGxmDVrFpydnREVFYVx48YhPT0doaGhNdJhUlJSgu7du8POzg5169ZFQkICAKBz58544403DKrTKoOzcsJDvyiiKGql6RIfH48FCxZgy5Yt8PLyktKffvppvPbaa2jdujU6d+6Mf//732jatCni4uIqrGvOnDnIy8uTjitXrhh+QVVQKpp/zF80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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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8vJCZmYmsrOz1coPHToEAOjQoUORXXV2dlYlWIWdOnUKANCtWze1/xaUF/bw4UO15KxBgwYQRREXLlxQq/frr78CAAICAorsT0XGRI6IiMgcFLzZwZCtFAYPHgwAmDZtmlr5li1bIJPJ8O677xbZNiQkBDk5OVizZo2qLDs7G9HR0bCzs0OLFi0AAC1btoSdnR0OHz6stpzJ999/j5ycHFWiB0C1dt2L/Sl4WnXKlCmlOr+KgokcERGROZDJDN9KYdasWXBxcUFERASGDx+OhQsXomHDhnj06BHGjBkDa2trAED9+vUhCAKOHz+uarty5UrY2NhgzJgxmDBhAr7++mvUrVsXCoUCX331ldpxvvzySygUCtSuXRtff/01JkyYgLFjx8LGxgYrVqxQ1evTpw8aNGiAyMhI9OrVC4sXL0b79u1x+fJldO3aFfXq1TPgi1t+eI8cERERSSIhIQHdu3fH5s2bsXHjRsjlckyaNAlLlixR1VEqlQAAURRVZY6OjoiNjUWfPn2wfPlyiKIIe3t7zJ8/H5MnT1Y7RmhoKLKzs/HVV19h2rRpEAQBderUwa+//qox7RsXF4eePXsiMjISe/fuhZWVFfr164ft27dL+FWQFhM5IiIic6DH2xk02peSh4cH4uPji61z/fp1reX+/v46v21h+vTpmD59eon1bG1ti3zC1lQxkSMiIjIHRlp+hCoW3iNHREREZKI4IkdERGQOBMHAqVWOyFVETOSIiIjMgR5LiGi0pwqHU6tEREREJoojckREROZAj7XgNNpThcNEjoiIyBxwarVSYnpNREREZKI4IkdERGQOymFBYJIeEzkiIiJzIBh4jxwTuQqJiRwREZE54D1ylRLTayIiIiITxRE5IiIic8B75ColJnJERETmgFOrlRLTayIiIiITxRE5IiIic8A3O1RKTOSIiIjMgCgIEA2YHjWkLUmH6TURERGRieKIHBERkTkQBAOfWuWIXEXERI6IiMgccPmRSonfFSIiIiITxRE5IiIiM8CHHSonkx6RW7ZsGerUqQO5XI7AwEAcO3asyLo///wzunbtiurVq8PR0RFt27bF/v371eqsW7cOgiBobNnZ2VKfChERkbQKplYN2ajCMdnvyrZt2xAaGoqZM2fi3Llz6NChA3r06IHbt29rrX/06FF07doV+/btw9mzZ9GxY0f07t0b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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_modif_to_map(model_daemon)" - ] - }, - { - "cell_type": "markdown", - "id": "f00eb2de", - "metadata": {}, - "source": [ - "# check penalty term calculation w/ covariance" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "b4d8f213", - "metadata": {}, - "outputs": [], - "source": [ - "def test_penalty(model, metric):\n", - " model.reset_free()\n", - " nominal = model.get_outputs(return_sum=True)\n", - " for i, p in enumerate(model.params.free):\n", - " if p.prior.kind == 'uniform': continue\n", - " # reset all free parameters to put them back to nominal values\n", - " model.reset_free()\n", - "\n", - " # shift one parameter\n", - " p.value = p.nominal_value + p.prior.stddev\n", - " # have to run compute method for chi2 to get updated\n", - " sys = model.get_outputs(return_sum=True)\n", - "\n", - " penalty = model.params.priors_penalty(metric=metric)\n", - " print('pulling '+p.name+r' by +1 sigma -> prior penalty =', penalty)\n", - " return" - ] - }, - { - "cell_type": "markdown", - "id": "e75a3ef8", - "metadata": {}, - "source": [ - "if the covariance term wasn't added, the chi2 prior penalty would be 1 (1 sigma pull for 1 parameter) or -0.5 for llh" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "e6ea496d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pulling daemon_K_158G by +1 sigma -> prior penalty = 20.669470253089415\n", - "pulling daemon_K_2P by +1 sigma -> prior penalty = 814.8682652834151\n", - "pulling daemon_K_31G by +1 sigma -> prior penalty = 4.782145410066016\n", - "pulling daemon_antiK_158G by +1 sigma -> prior penalty = 5.167670432052521\n", - "pulling daemon_antiK_2P by +1 sigma -> prior penalty = 1031.8517781662042\n", - "pulling daemon_antiK_31G by +1 sigma -> prior penalty = 1.3990423733149342\n", - "pulling daemon_n_158G by +1 sigma -> prior penalty = 14.836491989253512\n", - "pulling daemon_n_2P by +1 sigma -> prior penalty = 25.899890686262935\n", - "pulling daemon_p_158G by +1 sigma -> prior penalty = 4.462573122251503\n", - "pulling daemon_p_2P by +1 sigma -> prior penalty = 5.483267988092043\n", - "pulling daemon_pi_158G by +1 sigma -> prior penalty = 11.911597541052451\n", - "pulling daemon_pi_20T by +1 sigma -> prior penalty = 502.47445811371983\n", - "pulling daemon_pi_2P by +1 sigma -> prior penalty = 6.576411765989332\n", - "pulling daemon_pi_31G by +1 sigma -> prior penalty = 4.444786009326371\n", - "pulling daemon_antipi_158G by +1 sigma -> prior penalty = 12.221933008589437\n", - "pulling daemon_antipi_20T by +1 sigma -> prior penalty = 775.6952824784432\n", - "pulling daemon_antipi_2P by +1 sigma -> prior penalty = 29.310435339319096\n", - "pulling daemon_antipi_31G by +1 sigma -> prior penalty = 4.631939860229627\n", - "pulling daemon_GSF_1 by +1 sigma -> prior penalty = 16.40918622779627\n", - "pulling daemon_GSF_2 by +1 sigma -> prior penalty = 2.015149291427183\n", - "pulling daemon_GSF_3 by +1 sigma -> prior penalty = 2.25374883811226\n", - "pulling daemon_GSF_4 by +1 sigma -> prior penalty = 1.1634572364445153\n", - "pulling daemon_GSF_5 by +1 sigma -> prior penalty = 6.304930670288135\n", - "pulling daemon_GSF_6 by +1 sigma -> prior penalty = 2.9661331479273016\n", - "pulling theta13 by +1 sigma -> prior penalty = 1.0000000000000009\n", - "pulling nu_nc_norm by +1 sigma -> prior penalty = 0.9999999999999993\n", - "pulling opt_eff_overall by +1 sigma -> prior penalty = 1.0000000000000016\n", - "pulling opt_eff_lateral by +1 sigma -> prior penalty = 1.0\n", - "pulling ice_scattering by +1 sigma -> prior penalty = 1.0\n", - "pulling ice_absorption by +1 sigma -> prior penalty = 1.0\n" - ] - } - ], - "source": [ - "test_penalty(model_daemon, metric='mod_chi2')" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "72785451", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pulling daemon_K_158G by +1 sigma -> prior penalty = -10.334735126544707\n", - "pulling daemon_K_2P by +1 sigma -> prior penalty = -407.43413264170755\n", - "pulling daemon_K_31G by +1 sigma -> prior penalty = -2.391072705033008\n", - "pulling daemon_antiK_158G by +1 sigma -> prior penalty = -2.5838352160262605\n", - "pulling daemon_antiK_2P by +1 sigma -> prior penalty = -515.9258890831021\n", - "pulling daemon_antiK_31G by +1 sigma -> prior penalty = -0.6995211866574671\n", - "pulling daemon_n_158G by +1 sigma -> prior penalty = -7.418245994626756\n", - "pulling daemon_n_2P by +1 sigma -> prior penalty = -12.949945343131468\n", - "pulling daemon_p_158G by +1 sigma -> prior penalty = -2.2312865611257515\n", - "pulling daemon_p_2P by +1 sigma -> prior penalty = -2.7416339940460217\n", - "pulling daemon_pi_158G by +1 sigma -> prior penalty = -5.955798770526226\n", - "pulling daemon_pi_20T by +1 sigma -> prior penalty = -251.23722905685992\n", - "pulling daemon_pi_2P by +1 sigma -> prior penalty = -3.288205882994666\n", - "pulling daemon_pi_31G by +1 sigma -> prior penalty = -2.2223930046631857\n", - "pulling daemon_antipi_158G by +1 sigma -> prior penalty = -6.110966504294718\n", - "pulling daemon_antipi_20T by +1 sigma -> prior penalty = -387.8476412392216\n", - "pulling daemon_antipi_2P by +1 sigma -> prior penalty = -14.655217669659548\n", - "pulling daemon_antipi_31G by +1 sigma -> prior penalty = -2.3159699301148136\n", - "pulling daemon_GSF_1 by +1 sigma -> prior penalty = -8.204593113898135\n", - "pulling daemon_GSF_2 by +1 sigma -> prior penalty = -1.0075746457135915\n", - "pulling daemon_GSF_3 by +1 sigma -> prior penalty = -1.12687441905613\n", - "pulling daemon_GSF_4 by +1 sigma -> prior penalty = -0.5817286182222576\n", - "pulling daemon_GSF_5 by +1 sigma -> prior penalty = -3.1524653351440675\n", - "pulling daemon_GSF_6 by +1 sigma -> prior penalty = -1.4830665739636508\n", - "pulling theta13 by +1 sigma -> prior penalty = -0.5000000000000004\n", - "pulling nu_nc_norm by +1 sigma -> prior penalty = -0.49999999999999967\n", - "pulling opt_eff_overall by +1 sigma -> prior penalty = -0.5000000000000008\n", - "pulling opt_eff_lateral by +1 sigma -> prior penalty = -0.5\n", - "pulling ice_scattering by +1 sigma -> prior penalty = -0.5\n", - "pulling ice_absorption by +1 sigma -> prior penalty = -0.5\n" - ] - } - ], - "source": [ - "test_penalty(model_daemon, metric='llh')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6d141b70", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "octopisa", - "language": "python", - "name": "octopisa" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/pisa_tests/README.md b/pisa_tests/README.md deleted file mode 100644 index dfda294d1..000000000 --- a/pisa_tests/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# tests - -PISA validation and unit tests - - -## Directory Listing - -| File/directory | Description -| --------------------------------------- | ----------- -| `__init__.py` | Make this directory behave as a Python module -| `test_changes_with_combined_pidreco.py` | python script for testing how merging `reco` and `pid` in to a single stage affected the distributions. This is compared to PISA 2 reference files as well as some from OscFit. -| `test_command_lines.sh` | Bash (shell) script to run all PISA unit tests -| `test_consistency_with_oscfit.py` | script for testing how consistent the MC re-weighting treatment in PISA is with OscFit. -| `test_consistency_with_pisa2.py` | Python script for testing the consistency of current PISA 3 services with reference files produced by PISA 2. -| `test_example_pipelines.py` | Python script for testing that the pipelines contained in `$PISA/pisa/resources/settings/pipeline/` are all functional. \ No newline at end of file diff --git a/pisa_tests/__init__.py b/pisa_tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pisa_tests/likelihoods_1D_test.py b/pisa_tests/likelihoods_1D_test.py deleted file mode 100755 index b230e76fd..000000000 --- a/pisa_tests/likelihoods_1D_test.py +++ /dev/null @@ -1,904 +0,0 @@ -#!/usr/bin/env python -''' -Test script to compare the performances of -the generalized poisson llh with the other -miminization metrics available in pisa - -''' -from __future__ import absolute_import, print_function, division - -__author__ = "Etienne Bourbeau (etienne.bourbeau@icecube.wisc.edu)" - - -# -# Standard python imports -# -import os -import pickle -from collections import OrderedDict -import copy -import numpy as np - -# -# Font stuff -# -import matplotlib as mpl -mpl.use('agg') -from matplotlib import rcParams -FONTSIZE=20 -rcParams['font.family'] = 'serif' -rcParams['font.size'] = 20 -mpl.rc('text', usetex=True) -#mpl.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"] - - - -# -# pisa tools and objects -# -from pisa.core.binning import OneDimBinning, MultiDimBinning -from pisa.core.map import Map, MapSet -from pisa.core.distribution_maker import DistributionMaker -from pisa.utils.config_parser import parse_pipeline_config -from pisa.core.param import Param, ParamSet -from pisa.analysis.analysis import Analysis - -# debug tools -from pisa.utils.log import logging -from pisa.utils.profiler import line_profile -from pisa.utils.log import set_verbosity, Levels -#set_verbosity(Levels.TRACE) - -################################################################################## - -STANDARD_CONFIG = os.environ['PISA'] + \ - '/pisa/stages/data/super_simple_pipeline.cfg' -TRUE_MU = 20. -TRUE_SIGMA = 3.1 -NBINS = 31 - -# -# Define formatting properties for all metrics -# -import seaborn as sns -COLORS = sns.color_palette("muted", 8) - -LIKELIHOOD_FORMATTING = OrderedDict() -LIKELIHOOD_FORMATTING['llh'] = {'label':r'Poisson llh', - 'marker':'s', - 'color': COLORS[0]} - -LIKELIHOOD_FORMATTING['mcllh_eff'] = {'label':r'Effective llh', - 'color': COLORS[1]} - -LIKELIHOOD_FORMATTING['mcllh_mean'] = {'label':r'Mean llh', - 'color': COLORS[2], - 'linestyle': '--'} - -LIKELIHOOD_FORMATTING['generalized_poisson_llh'] = {'label':r'Generalized llh', - 'color': COLORS[7]} - -LIKELIHOOD_FORMATTING['mod_chi2'] = {'label':r'Mod. $\chi^{2}$', - 'color': COLORS[3]} -################################################################################ - - -class ToyMCllhParam: - ''' - Class defining the parameters of the Toy MC - ''' - - def __init__(self): - - self.n_data = 0. # Number of data points to bin - self.signal_fraction = 1. # fraction of those points that will constitute the signal - self.true_mu = TRUE_MU # True mean of the signal - self.true_sigma = TRUE_SIGMA # True width of the signal - self.nbackground_low = 0. # lowest value the background can take - self.nbackground_high = 40. # highest value the background can take - self.stats_factor = 1. # Statistical factor for the MC - - - # - # Binning - # - self.binning = None - - @property - def nsig(self): - ''' - number of data points that are part of the signal - ''' - return int(self.n_data*self.signal_fraction) - - @property - def nbkg(self): - ''' - number of data points that are part of the background - ''' - return self.n_data-self.nsig - - @property - def nbins(self): - ''' - number of bins in the binning - ''' - assert self.binning is not None, 'ERROR: specify a binning first' - return self.binning.tot_num_bins - - -def create_pseudo_data(toymc_params, seed=None): - ''' - Create pseudo data consisting of a gaussian peak - on top of a uniform background - ''' - if seed is not None: - np.random.seed(seed) - - binning = toymc_params.binning - - # - # Gaussian signal peak - # - signal = np.random.normal( - loc=toymc_params.mu, scale=toymc_params.sigma, size=toymc_params.nsig) - - # - # Uniform background - # - background = np.random.uniform( - high=toymc_params.nbackground_high, low=toymc_params.nbackground_low, size=toymc_params.nbkg) - total_data = np.concatenate([signal, background]) - counts_data, _ = np.histogram(total_data, bins=binning.bin_edges[0].magnitude) - - # Convert data histogram into a pisa map - data_map = Map(name='total', binning=binning, hist=counts_data) - - # Set the errors as the sqrt of the counts - data_map.set_errors(error_hist=np.sqrt(counts_data)) - - data_as_mapset = MapSet([data_map]) - - return data_as_mapset - - -def create_mc_template(toymc_params, config_file=None, seed=None, keep_same_weight=True): - ''' - Create MC template out of a pisa pipeline - ''' - if seed is not None: - np.random.seed(seed) - - Config = parse_pipeline_config(config_file) - - # Change binning - Config[('data','pi_simple_signal')]['output_specs'] = toymc_params.binning - Config[('likelihood','pi_generalized_llh_params')]['output_specs'] = toymc_params.binning - - # If keep_same_weight is True, turn off the mean adjust and pseudo weight of pi_generalized_llh - if keep_same_weight: - Config[('likelihood','pi_generalized_llh_params')]['with_mean_adjust'] = False - Config[('likelihood','pi_generalized_llh_params')]['with_pseudo_weight'] = False - else: - Config[('likelihood','pi_generalized_llh_params')]['with_mean_adjust'] = True - Config[('likelihood','pi_generalized_llh_params')]['with_pseudo_weight'] = True - - new_n_events_data = Param( - name='n_events_data', value=toymc_params.n_data, prior=None, range=None, is_fixed=True) - new_sig_frac = Param(name='signal_fraction', value=toymc_params.signal_fraction, - prior=None, range=None, is_fixed=True) - new_stats_factor = Param( - name='stats_factor', value=toymc_params.stats_factor, prior=None, range=None, is_fixed=True) - - # These should match the values of the config file, but we override them just in case we need to change these later - new_mu = Param(name='mu', value=toymc_params.mu, - prior=None, range=[0, 100], is_fixed=False) - new_sigma = Param(name='sigma', value=toymc_params.sigma, - prior=None, range=None, is_fixed=True) - Config[('data', 'pi_simple_signal')]['params'].update(p=ParamSet( - [new_n_events_data, new_sig_frac, new_stats_factor, new_mu, new_sigma])) - - MCtemplate = DistributionMaker(Config) - - return MCtemplate - - -################################################################################## - -def run_llh_scans(metrics=[], mc_params=None, config_file=None, data_mapset=None, mc_seed=None, results=None): - ''' - Perform Likelihood scans fover a range of injected mu values - - metrics: list of strings (names of the likelihood to run) - - mc_template: DistributionMaker - - data: MapSet - - ''' - - assert isinstance(results, (dict, OrderedDict) - ), 'ERROR: results must be a dict' - - assert 'toymc_params' in results.keys(), 'ERROR: missing toymc_params' - - - for metric in metrics: - if metric not in results.keys(): - results[metric] = OrderedDict() - results[metric]['llh_scan'] = OrderedDict() - - # - # Create the mc template - # - mc_template = create_mc_template(mc_params, config_file=config_file, seed=mc_seed) - - # - # Collect the llh value at the Truth - # - for metric in metrics: - print(metric) - - mc_template.params['mu'].value = toymc_params.true_mu - - new_MC = mc_template.get_outputs(return_sum=True, force_standard_output=False) - - if metric == 'generalized_poisson_llh': - llhval = data_mapset.maps[0].metric_total(new_MC, metric=metric, metric_kwargs={ - 'empty_bins': mc_template.empty_bin_indices}) - logging.trace('empty_bins: ', mc_template.empty_bin_indices) - - else: - new_MC = new_MC['old_sum'] - llhval = data_mapset.metric_total(new_MC, metric=metric) - - results[metric]['llh_scan']['llh_at_truth'] = llhval - - results[metric]['llh_scan']['tested_mu'] = np.linspace(10., 30., 50) - results[metric]['llh_scan']['scan_values'] = [] - - # - # Scan llh values around the true signal peak value - # - for tested_mu in results[metric]['llh_scan']['tested_mu']: - - # - # Recompute the MC template with a new value of the mu parameter - # - mc_template.params['mu'].value = tested_mu - new_MC = mc_template.get_outputs(return_sum=True, force_standard_output=False) - - if metric == 'generalized_poisson_llh': - llhval = data_mapset.maps[0].metric_total(new_MC, metric=metric, metric_kwargs={ - 'empty_bins': mc_template.empty_bin_indices}) - else: - new_MC = new_MC['old_sum'] - llhval = data_mapset.metric_total(new_MC, metric=metric) - - - results[metric]['llh_scan']['scan_values'].append(llhval) - - - return results - - -def plot_llh_scans(metrics=[], results=None, interactive=False, output_pdf=None, prefix='', save_individual_fig=False): - ''' - Plot Likelihood scans - ''' - - fig, ax = plt.subplots(figsize=(7, 7)) - n = 0 - for llh_name in metrics: - - llhvals = results[llh_name]['llh_scan']['scan_values'] - tested_mu = results[llh_name]['llh_scan']['tested_mu'] - - if 'chi2' in llh_name: - TS = llhvals-np.amin(llhvals) - else: - TS = -2*(llhvals-np.amax(llhvals)) - - ax.plot(tested_mu, TS, **LIKELIHOOD_FORMATTING[llh_name]) - n += 1 - ax.set_xlabel(r'injected $\mu$') - ax.set_ylabel(r'Test Statistic(-2$\ln[L_{\mu}/L_{o}]$ or $\chi^{2}$)') - ax.set_ylim([-10., 500]) - ax.plot([15.,25.],[0.,0.],'k') - ax.set_title('MC factor = {}'.format(results['toymc_params'].stats_factor)) - #ax.set_title('Likelihood scans over mu') - ax.legend() - fig.tight_layout() - - if interactive: - plt.show() - - if save_individual_fig: - plt.savefig(prefix+'plot_llh_scan.png') - - if output_pdf is None: - return fig - else: - output_pdf.savefig(fig) - plt.close('all') - del fig - return 1 - - -################################################################################################### -#@line_profile -def run_coverage_test(n_trials=100, - toymc_params=None, - mc_seed = None, - config_file=None, - metrics=None, - results=None, - output_stem='coverage_test'): - ''' - Perform Coverage and bias tests - - We create n_trials pseudo-dataset, Fit them - with each metric at various levels of statistics. - and save the resulting llh values and fitted - parameters into a file - - n_trials: int (number of pseudo-experiment to run) - - toymc_params: ToyMC_LLh object (describe the parameters - of the experiment like signal_fraction and - stats_factor) - - - mc_infinite_Stats: DistributionMaker - (MC template made with an ideal level - of stats representing "infinite MC" precision) - - ''' - import time - - assert isinstance(results, (dict, OrderedDict)), 'ERROR: results must be a dict' - assert isinstance(metrics, list), 'ERROR: must specify metrics as a list' - assert 'toymc_params' in results.keys(), 'ERROR: missing toymc_params' - - - results['toymc_params'] = toymc_params - for metric in metrics: - if metric not in results.keys(): - results[metric] = OrderedDict() - results[metric]['coverage'] = [] - - # - # minimizer settings to pass into the pisa analysis class - # - minimizer_settings = {"method": {"value": "l-bfgs-b", # "SLSQP", - "desc": "The string to pass to scipy.optimize.minimize so it knows what to use" - }, - "options": {"value": {"disp": 0, - "ftol": 1.0e-6, - "eps": 1.0e-6, - "maxiter": 100 - }, - "desc": {"disp": "Set to True to print convergence messages", - "ftol": "Precision goal for the value of f in the stopping criterion", - "eps": "Step size used for numerical approximation of the jacobian.", - "maxiter": "Maximum number of iteration" - } - } - } - - - # - # Create the mc template - # - mc_template = create_mc_template(toymc_params, config_file=config_file, seed=mc_seed) - - # - # Create a pseudo-infinite statistics template - # - infinite_toymc_params = copy.deepcopy(toymc_params) - infinite_toymc_params.stats_factor = 100. - mc_template_pseudo_infinite = create_mc_template(infinite_toymc_params, config_file=config_file, seed=mc_seed) - - # - # Start pseudo trials - # - for metric in metrics_to_test: - filename = output_stem+'_pseudo_exp_llh_%s.pckl' % metric - if os.path.isfile(filename): - results[metric]['coverage'] = pickle.load(open(filename,'rb')) - - else: - - logging.debug('minimizing: ', metric) - to = time.time() - - trial_i = 0 - failed_fits = 0 - while trial_i < n_trials and failed_fits<2*n_trials: - - experiment_result = {} - - # - # Create a pseudo-dataset - # - data_trial = create_pseudo_data(toymc_params=toymc_params, seed=None) - - # - # Compute the truth llh value of this pseudo experiment - # truth - if the truth comes from infinite stats MC - # - if metric == 'generalized_poisson_llh': - mc = mc_template_pseudo_infinite.get_outputs(return_sum=False, force_standard_output=False)[0] - - llhval_true = data_trial.maps[0].metric_total(mc, - metric=metric, - metric_kwargs={ - 'empty_bins': mc_template_pseudo_infinite.empty_bin_indices}) - else: - mc = mc_template_pseudo_infinite.get_outputs(return_sum=True) - llhval_true = data_trial.metric_total(mc, metric=metric) - - experiment_result['llh_infinite_stats'] = llhval_true - - # - # truth if the truth comes from low stats MC - # - if metric == 'generalized_poisson_llh': - mc = mc_template.get_outputs(return_sum=False, - force_standard_output=False)[0] - - llhval = data_trial.maps[0].metric_total(mc, - metric=metric, - metric_kwargs={ - 'empty_bins': mc_template.empty_bin_indices}) - else: - mc = mc_template.get_outputs(return_sum=True) - llhval = data_trial.metric_total(mc, - metric=metric) - - experiment_result['llh_lowstats'] = llhval - - # # - # # minimized llh (high stats) - # # - # logging.debug('\nhigh stats fit:\n') - # ana = Analysis() - # result_pseudo_truth, _ = ana.fit_hypo(data_trial, - # mc_infinite_stats, - # metric=metric, - # minimizer_settings=minimizer_settings, - # hypo_param_selections=None, - # check_octant=False, - # fit_octants_separately=False, - # ) - # #except: - # # logging.trace('Failed Fit') - # # failed_fits += 1 - # # continue - # experiment_result['infinite_stats_opt'] = {'metric_val': result_pseudo_truth['metric_val'], - # 'best_fit_param': result_pseudo_truth['params']['mu']} - - # - # minimized llh (low stats) - # - logging.debug('\nlow stats fit:\n') - ana = Analysis() - - try: - result_lowstats, _ = ana.fit_hypo(data_trial, - mc_template, - metric=metric, - minimizer_settings=minimizer_settings, - hypo_param_selections=None, - check_octant=False, - fit_octants_separately=False, - ) - except: - logging.debug('Failed Fit') - failed_fits += 1 - continue - - experiment_result['lowstats_opt'] = {'metric_val': result_lowstats['metric_val'], - 'best_fit_param': result_lowstats['params']['mu']} - - results[metric]['coverage'].append(experiment_result) - trial_i += 1 - - if trial_i==0: - raise Exception('ERROR: no fit managed to converge after {} attempst'.format(failed_fits)) - - t1 = time.time() - logging.debug("Time for ", n_trials, " minimizations: ", t1-to, " s") - logging.debug("Saving to file...") - pickle.dump(results[metric]['coverage'], open(filename, 'wb')) - logging.debug("Saved.") - - return results - - -def plot_coverage_test(output_pdf=None, - results=None, - metrics=None, - stats_factor=None, - output_stem=None, - n_trials=None, - prefix='', - save_individual_fig=False, - outname='test_coverage.pdf'): - ''' - plot the results of the coverage test - ''' - from utils.plotting.standard_modules import Figure - - assert isinstance(metrics, list), 'ERROR: must specify metrics as a list' - from scipy.stats import chi2 - - - if output_pdf is None: - output_pdf = PdfPages(outname) - - coverage_fig = Figure(figsize=(7, 7)) - - # - # produce an example chi2 distribution with d.o.f =1 - # - # This will help us compare ts distribution directly - sample_chi2_distrib = np.random.chisquare(size=n_trials, df=1) - - for llh_name in metrics: - - logging.trace('plotting %s'%llh_name) - - container_ts_truth_high = [] - container_ts_truth_low = [] - container_ts_lowstat = [] - container_ts_highstat = [] - llh_bias = [] - param_bias = [] - - val_truth = TRUE_MU - container_val_lowstat = [] - container_val_highstat = [] - - # Retrieve data from the coverage test - indata = results[llh_name]['coverage'] - - if len(indata) < 1: - print('No successful fits for metric: {}.skipping') - - for pseudo_exp in indata: - - val_low = pseudo_exp['lowstats_opt']['best_fit_param'].value.m - llh_optimized_low = pseudo_exp['lowstats_opt']['metric_val'] - llh_truth_low = pseudo_exp['llh_lowstats'] - llh_truth_high = pseudo_exp['llh_infinite_stats'] - - # - # check that all elements of the comparison are finite - # - good_trial = np.isfinite(val_low) - good_trial *= np.isfinite(llh_optimized_low) - good_trial *= np.isfinite(llh_truth_low) - good_trial *= np.isfinite(llh_truth_high) - - if good_trial: - - container_val_lowstat.append(val_low) - container_ts_truth_high.append(llh_truth_high) - container_ts_truth_low.append(llh_truth_low) - - ts_low = -2*(llh_optimized_low-llh_truth_low) - - # We take the absolute value here because we want to know how far - # we are from the truth, and we can optimize to llh values above and below the truth - container_ts_lowstat.append(np.abs(ts_low)) - - param_bias.append((val_low-val_truth)/val_truth) - - else: - continue - - # - # First plot: TS distribution - # - fig_ts_distrib = Figure(figsize=(7,7), title=LIKELIHOOD_FORMATTING[llh_name]['label']) - ts_binning = np.linspace(0, 25, 31) - c,ts_edges = np.histogram(sample_chi2_distrib, bins=ts_binning) - ts_x = ts_edges[:-1]+0.5*(ts_edges[1:]-ts_edges[:-1]) - fig_ts_distrib.get_ax().errorbar(ts_x, c, yerr=np.sqrt(c), drawstyle='steps-mid', - linewidth=2., color='k', label=r'$\chi^{2}_{dof=1}$') - - fig_ts_distrib.get_ax().set_title('TS Distribution - {} x MC vs. data'.format(stats_factor)) - cmc, _ = np.histogram(container_ts_lowstat, bins=ts_binning) - _, chi2_bins, _ = fig_ts_distrib.get_ax().errorbar(ts_x, cmc, yerr=np.sqrt(cmc), drawstyle='steps-mid', - linewidth=2., color='b', label='TS distribution') - - fig_ts_distrib.get_ax().set_xlabel(r'$\left |-2(LLH_{opt}-LLH_{truth}) \right |$ (Low statistics case)') - fig_ts_distrib.get_ax().legend() - if save_individual_fig: - plt.savefig(prefix+llh_name+'plot_TS_distribution.png') - - # - # Second plot: Bias distribution (absolute) - # - fig_bias = Figure(figsize=(7,7), title=LIKELIHOOD_FORMATTING[llh_name]['label']) - fig_bias.get_ax().axvline(x=20, linewidth=2, - color='k', ls='--', label=r'Truth ($\mu = 20$') - fig_bias.get_ax().hist(container_val_lowstat, bins=20, histtype='step', - linewidth=2., color='b', label=r'Best-fit $\mu_{opt}$') - - fig_bias.get_ax().set_xlabel(r'value') - fig_bias.get_ax().set_title('Fitted Parameter Value - {} x MC vs. data'.format(stats_factor)) - if save_individual_fig: - plt.savefig(prefix+llh_name+'plot_bias_abs.png') - - # - # Third plot: Bias distribution (relative) - # - fig_pull = Figure(figsize=(7,7), title=LIKELIHOOD_FORMATTING[llh_name]['label']) - fig_pull.get_ax().set_title('Parameter Bias in low stats') - fig_pull.get_ax().hist(param_bias, bins=20) - fig_pull.get_ax().set_xlabel(r'$\left( \frac{\mu_{opt}-\mu_{true}}{\mu_{true}}\right)$') - fig_pull.get_ax().axvline(x=0., linewidth=2, color='k', ls='--') - if save_individual_fig: - plt.savefig(prefix+llh_name+'plot_bias_rel.png') - - # - # Coverage test - # - coverage_y = [] - coverage_x = np.linspace(0.0, 1.0, 101) - - for percent_coverage in coverage_x: - chi2_ts_value = chi2.ppf(percent_coverage, df=1) - actual_coverage = sum(np.array(container_ts_lowstat) <= chi2_ts_value) - - if len(container_ts_lowstat)>0: - actual_coverage/=float(len(container_ts_lowstat)) - else: - actual_coverage=0. - coverage_y.append(actual_coverage) - - coverage_fig.get_ax().plot(coverage_x, coverage_y, **LIKELIHOOD_FORMATTING[llh_name]) - - coverage_fig.get_ax().set_xlabel('Expected Wilks coverage') - coverage_fig.get_ax().set_ylabel('Actual Coverage (low statistics') - coverage_fig.get_ax().legend() - - if output_pdf is not None: - output_pdf.savefig(coverage_fig.fig) - - if save_individual_fig: - plt.figure(coverage_fig.fig.number) - plt.savefig(prefix+'plot_coverage.png') - - -def plot_data_and_mc(data_map=None, - config_file=STANDARD_CONFIG, - toymc_params=None, - interactive=False, - mc_seed=None, - output_pdf=None): - ''' - plot the data, and the mc sets overlaid on top - ''' - # =============================================================== - # - # Generate MC template using a pisa pipeline - # - # We first need to override the parameter values contained in the config file - # before instantiating the pipeline - print('Create the first template') - mc_template = create_mc_template(toymc_params, config_file=config_file, seed=mc_seed) - mc_map = sum(mc_template.get_outputs(return_sum=True, force_standard_output=False)['old_sum']) #old_sum = map without pseudo weights - mc_generalized_map = sum(mc_template.get_outputs(return_sum=True, force_standard_output=False)['weights']) #weights = map with pseudo-weight - mc_params = mc_template.params - - - # ================================================================= - # - # Produce a pseudo-infinite MC statistics template - # Create a MC set with 10000 times more stats than data. will be used as the truth - # - print('creating the infinite template') - infinite_toymc_params = copy.deepcopy(toymc_params) - infinite_toymc_params.stats_factor = 1000. - mc_template_pseudo_infinite = create_mc_template(infinite_toymc_params, config_file=config_file, seed=mc_seed) - mc_map_pseudo_infinite = sum(mc_template_pseudo_infinite.get_outputs(return_sum=True, force_standard_output=False)['old_sum']) - - X = toymc_params.binning.midpoints[0].magnitude - - fig, ax = plt.subplots(figsize=(7, 7)) - ax.errorbar(X, data_map.nominal_values, yerr=np.sqrt(data_map.nominal_values), - label='data', fmt='-o', drawstyle='steps-mid', color='k') - ax.set_xlabel('Arbitrary variable') - ax.set_ylabel('Frequency (A.U.)') - - ax.text(0.65, 0.91, r'$\mu_{true}$ = '+'{}'.format(TRUE_MU), - fontsize=20, transform=ax.transAxes) - ax.text(0.65, 0.85, r'$\sigma_{true}$ = ' + - '{}'.format(TRUE_SIGMA), fontsize=20, transform=ax.transAxes) - ax.text(0.65, 0.79, r'$N_{signal}$ = '+'{}'.format(toymc_params.nsig), - fontsize=20, transform=ax.transAxes) - ax.text(0.65, 0.73, r'$N_{bkg}$ = '+'{}'.format(toymc_params.nbkg), - fontsize=20, transform=ax.transAxes) - ax.legend(loc='upper left') - - if interactive: - plt.show() - if output_pdf is not None: - output_pdf.savefig(fig) - - # - # Update the same plot with the low stats MC - # - ax.plot(X, mc_map.nominal_values, '-g', label='MC', drawstyle='steps-mid', zorder=10) - ax.text(0.65, 0.67, r'$\mu_{MC}$ = '+'{}'.format( - mc_params['mu'].value.m), color='g', fontsize=20, transform=ax.transAxes) - ax.text(0.65, 0.61, r'$\sigma_{MC}$ = '+'{}'.format( - mc_params['sigma'].value.m), color='g', fontsize=20, transform=ax.transAxes) - ax.legend(loc='upper left') - - ax.set_title('MC factor = {}'.format(mc_params['stats_factor'].value.m)) - if interactive: - plt.show() - if output_pdf is not None: - output_pdf.savefig(fig) - - # - # Update the same plot with the low stats MC modified for the generalized Poisson - # - ax.plot(X, mc_generalized_map.nominal_values, ':b', label='MC - Generalized', drawstyle='steps-mid', zorder=10) - ax.legend(loc='upper left') - if interactive: - plt.show() - if output_pdf is not None: - output_pdf.savefig(fig) - - # - # Update with the pseudo-infinite MC set - # - ax.plot(X, mc_map_pseudo_infinite.nominal_values, - '-r', label='MC (large statistics)', drawstyle='steps-mid', zorder=10) - ax.legend(loc='upper left') - - if interactive: - plt.show() - if output_pdf is not None: - output_pdf.savefig(fig) - - -################################################################################## -if __name__ == '__main__': - - import argparse - - parser = argparse.ArgumentParser( - '1D Toy Monte Carlo to test various likelihoods / chi2 metrics') - - parser.add_argument( - '-nd', '--ndata', help='total number of data points', type=int, default=200) - parser.add_argument('-sf', '--signal-fraction', - help='fraction of the data in the signal dataset', type=float, default=1.) - parser.add_argument('-s', '--stats-factor', - help='Defines how much MC weights to produce w.r.t data', type=float, default=1.) - parser.add_argument( - '-nt', '--ntrials', help='number of pseudo experiments in the bias study', type=int, default=200) - - parser.add_argument( - '--make-llh-scan', help='if chosen, will run the likelihood scan for all llh', action='store_true') - parser.add_argument('--run-coverage-test', - help='if chosen, run the pseudo-trials needed to perform coverage and bias tests', action='store_true') - parser.add_argument( - '-o', '--output', help='output stem files with plots', default='ToyMC_LLh') - - parser.add_argument( - '--interactive', help='use interactive plots', action='store_true') - - args = parser.parse_args() - - # - # Plotting tools - # - import matplotlib as mpl - if not args.interactive: - mpl.use('agg') - import matplotlib.pyplot as plt - from matplotlib.backends.backend_pdf import PdfPages - import seaborn as sns - output_pdf = PdfPages(args.output+'.pdf') - - # - # Check some stuff - # - assert args.signal_fraction <= 1., 'ERROR: signal fraction ust be smaller or equal to 1' - - # ================================================================ - # - # Parameters of the data - # - toymc_params = ToyMCllhParam() - # Number of data points to bin - toymc_params.n_data = args.ndata - # fraction of those points that will constitute the signal - toymc_params.signal_fraction = args.signal_fraction - toymc_params.mu = TRUE_MU # True mean of the signal - toymc_params.sigma = TRUE_SIGMA # True width of the signal - toymc_params.nbackground_low = 0. # lowest value the background can take - toymc_params.nbackground_high = 40. # highest value the background can take - toymc_params.binning = MultiDimBinning( OneDimBinning(name='stuff', bin_edges=np.linspace( - toymc_params.nbackground_low, toymc_params.nbackground_high, NBINS))) - # Statistical factor for the MC - toymc_params.stats_factor = args.stats_factor - toymc_params.infinite_stats = 1000. - - - metrics_to_test = ['llh', 'mcllh_eff','mod_chi2', - 'mcllh_mean', 'generalized_poisson_llh'] - - results = OrderedDict() - results['toymc_params'] = toymc_params - for metric in metrics_to_test: - results[metric] = OrderedDict() - - # ============================================================== - # - # Generate a toy data set - # - data_as_mapset = create_pseudo_data(toymc_params=toymc_params, seed=564525) - - - - # ================================================================= - # - # Plot the three graphs - # - plot_data_and_mc(data_map=data_as_mapset.maps[0], - config_file=STANDARD_CONFIG, - toymc_params=toymc_params, - mc_seed=564525, - interactive=args.interactive, - output_pdf=output_pdf) - - # ================================================================== - # - # Perform llh scans - # - if args.make_llh_scan: - - results = run_llh_scans(metrics=metrics_to_test, - mc_params=toymc_params, - config_file=STANDARD_CONFIG, - data_mapset=data_as_mapset, - mc_seed=564525, - results=results) - - plot_llh_scans(metrics=metrics_to_test, results=results, - save_individual_fig=True, - prefix=args.output, - interactive=args.interactive, output_pdf=output_pdf) - - # ================================================================== - # - # Perform bias and coverage test - # - if args.run_coverage_test: - - results = run_coverage_test(n_trials=args.ntrials, - toymc_params=toymc_params, - config_file=STANDARD_CONFIG, - metrics=metrics_to_test, - results=results, - output_stem=args.output, - ) - - plot_coverage_test(output_pdf=output_pdf, - metrics=metrics_to_test, - results=results, - stats_factor=toymc_params.stats_factor, - output_stem=args.output, - save_individual_fig=True, - prefix=args.output, - n_trials=args.ntrials) - - output_pdf.close() diff --git a/pisa_tests/run_unit_tests.py b/pisa_tests/run_unit_tests.py deleted file mode 100755 index 8e72b971c..000000000 --- a/pisa_tests/run_unit_tests.py +++ /dev/null @@ -1,471 +0,0 @@ -#!/usr/bin/env python - - -""" -Find and run PISA unit test functions -""" - -from __future__ import absolute_import - -from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser -from importlib import import_module -from os import walk -from os.path import dirname, isfile, join, relpath -import platform -import socket -import sys - -import cpuinfo -import numpy as np - -import pisa -from pisa.utils.fileio import expand, nsort_key_func -from pisa.utils.log import Levels, logging, set_verbosity - -pycuda, nbcuda = None, None # pylint: disable=invalid-name -if pisa.TARGET == "cuda": - try: - import pycuda - except Exception: - pass - - # See TODO below - # try: - # from numba import cuda as nbcuda - # except Exception: - # pass - - -__all__ = ["PISA_PATH", "run_unit_tests", "find_unit_tests", "find_unit_tests_in_file"] - -__author__ = "J.L. Lanfranchi" - -__license__ = """Copyright (c) 2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - -# TODO: add timing for imports & unit test; faster => more used, more useful - -PISA_PATH = expand(dirname(pisa.__file__), absolute=True, resolve_symlinks=True) - -# TODO: get optional & required automatically (e.g., from setup.py?) -OPTIONAL_MODULES = ( - "pandas", - "emcee", - "pycuda", - "pycuda.driver", - "ROOT", - "libPyROOT", - "MCEq", - "nuSQUIDSpy", - "nuSQuIDS", - "LeptonWeighter", - "photospline" -) -"""Okay if imports or test_* functions fail due to these not being import-able""" - -REQUIRED_MODULES = ( - "pisa", - # It is important that setuptools comes *before* pip! If pip is imported before - # setuptools, it will trigger an assertion error when the version of setuptools is - # >= 60.0.0. This bug is mentioned in https://github.com/pypa/setuptools/issues/3089 - "setuptools", - "pip", - "numpy", - "decorator", - "kde", - "h5py", - "iminuit", - "line_profiler", - "matplotlib", - "numba", - "numpy", - "pint", - "scipy", - "simplejson", - "tables", - "uncertainties", - "llvmlite", - "cpuinfo", - "sympy", - "cython", -) - -PFX = "[T] " -"""Prefix each line output by this script to clearly delineate output from this -script vs. output from test functions being run""" - - -def run_unit_tests( - path=PISA_PATH, allow_missing=OPTIONAL_MODULES, verbosity=Levels.WARN -): - """Run all tests found at `path` (or recursively below if `path` is a - directory). - - Each module is imported and each test function is run initially with - `set_verbosity(verbosity)`, but if an exception is caught, the module is - re-imported or the test function is re-run with - `set_verbosity(Levels.TRACE)`, then the traceback from the (original) - exception emitted is displayed. - - Parameters - ---------- - path : str - Path to file or directory - - allow_missing : None or sequence of str - - verbosity : int in pisa.utils.log.Levels - - Raises - ------ - Exception - If any import or test fails not in `allow_missing` - - """ - set_verbosity(verbosity) - logging.info("%sPlatform information:", PFX) - logging.info("%s HOSTNAME = %s", PFX, socket.gethostname()) - logging.info("%s FQDN = %s", PFX, socket.getfqdn()) - logging.info("%s OS = %s %s", PFX, platform.system(), platform.release()) - for key, val in cpuinfo.get_cpu_info().items(): - logging.info("%s %s = %s", PFX, key, val) - logging.info(PFX) - logging.info("%sModule versions:", PFX) - for module_name in REQUIRED_MODULES + OPTIONAL_MODULES: - try: - module = import_module(module_name) - except ImportError: - if module_name in REQUIRED_MODULES: - raise - ver = "optional module not installed or not import-able" - else: - if hasattr(module, "__version__"): - ver = module.__version__ - else: - ver = "?" - logging.info("%s %s : %s", PFX, module_name, ver) - logging.info(PFX) - - path = expand(path, absolute=True, resolve_symlinks=True) - if allow_missing is None: - allow_missing = [] - elif isinstance(allow_missing, str): - allow_missing = [allow_missing] - - tests = find_unit_tests(path) - - module_pypaths_succeeded = [] - module_pypaths_failed = [] - module_pypaths_failed_ignored = [] - test_pypaths_succeeded = [] - test_pypaths_failed = [] - test_pypaths_failed_ignored = [] - - for rel_file_path, test_func_names in tests.items(): - pypath = ["pisa"] + rel_file_path[:-3].split("/") - parent_pypath = ".".join(pypath[:-1]) - module_name = pypath[-1].replace(".", "_") - module_pypath = f"{parent_pypath}.{module_name}" - - try: - set_verbosity(verbosity) - logging.info(PFX + f"importing {module_pypath}") - - set_verbosity(Levels.WARN) - module = import_module(module_pypath, package=parent_pypath) - - except Exception as err: - if ( - isinstance(err, ImportError) - and hasattr(err, "name") - and err.name in allow_missing # pylint: disable=no-member - ): - err_name = err.name # pylint: disable=no-member - module_pypaths_failed_ignored.append(module_pypath) - logging.warning( - f"{PFX}module {err_name} failed to import wile importing" - f" {module_pypath}, but ok to ignore" - ) - continue - - module_pypaths_failed.append(module_pypath) - - set_verbosity(verbosity) - msg = f"<< FAILURE IMPORTING : {module_pypath} >>" - logging.error(PFX + "=" * len(msg)) - logging.error(PFX + msg) - logging.error(PFX + "=" * len(msg)) - - # Reproduce the failure with full output - set_verbosity(Levels.TRACE) - try: - import_module(module_name, package=parent_pypath) - except Exception: - pass - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error(PFX + "#" * len(msg)) - - continue - - else: - module_pypaths_succeeded.append(module_pypath) - - for test_func_name in test_func_names: - test_pypath = f"{module_pypath}.{test_func_name}" - try: - set_verbosity(verbosity) - logging.debug(PFX + f"getattr({module}, {test_func_name})") - - set_verbosity(Levels.WARN) - test_func = getattr(module, test_func_name) - - # Run the test function - set_verbosity(verbosity) - logging.info(PFX + f"{test_pypath}()") - - set_verbosity(Levels.WARN) - test_func() - - except Exception as err: - if ( - isinstance(err, ImportError) - and hasattr(err, "name") - and err.name in allow_missing # pylint: disable=no-member - ): - err_name = err.name # pylint: disable=no-member - test_pypaths_failed_ignored.append(module_pypath) - logging.warning( - PFX - + f"{test_pypath} failed because module {err_name} failed to" - + f" load, but ok to ignore" - ) - - continue - - test_pypaths_failed.append(test_pypath) - set_verbosity(verbosity) - msg = f"<< FAILURE RUNNING : {test_pypath} >>" - logging.error(PFX + "=" * len(msg)) - logging.error(PFX + msg) - logging.error(PFX + "=" * len(msg)) - - # Reproduce the error with full output - - set_verbosity(Levels.TRACE) - try: - test_func = getattr(module, test_func_name) - with np.printoptions( - precision=np.finfo(pisa.FTYPE).precision + 2, - floatmode="fixed", - sign=" ", - linewidth=200, - ): - test_func() - except Exception: - pass - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error(PFX + "#" * len(msg)) - - else: - test_pypaths_succeeded.append(test_pypath) - - finally: - # remove references to the test function, e.g. to remove refs - # to pycuda / numba.cuda contexts so these can be closed - try: - del test_func - except NameError: - pass - - # NOTE: Until we get all GPU code into Numba, need to unload pycuda - # and/or numba.cuda contexts before a module requiring the other one is - # to be imported. - # NOTE: the following causes a traceback to be emitted at the very end - # of the script, regardless of the exception catching here. - if ( - pisa.TARGET == "cuda" - and pycuda is not None - and hasattr(pycuda, "autoinit") - and hasattr(pycuda.autoinit, "context") - ): - try: - pycuda.autoinit.context.detach() - except Exception: - pass - - # Attempt to unload the imported module - # TODO: pipeline, etc. fail as isinstance(service, (Stage, PiStage)) is False - #if module_pypath in sys.modules and module_pypath != "pisa": - # del sys.modules[module_pypath] - #del module - - # TODO: crashes program; subseqeunt calls in same shell crash(!?!?) - # if pisa.TARGET == 'cuda' and nbcuda is not None: - # try: - # nbcuda.close() - # except Exception: - # pass - - # Summarize results - - n_import_successes = len(module_pypaths_succeeded) - n_import_failures = len(module_pypaths_failed) - n_import_failures_ignored = len(module_pypaths_failed_ignored) - n_test_successes = len(test_pypaths_succeeded) - n_test_failures = len(test_pypaths_failed) - n_test_failures_ignored = len(test_pypaths_failed_ignored) - - set_verbosity(verbosity) - logging.info( - PFX + f"<< IMPORT TESTS : {n_import_successes} imported," - f" {n_import_failures} failed," - f" {n_import_failures_ignored} failed to import but ok to ignore >>" - ) - logging.info( - PFX + f"<< UNIT TESTS : {n_test_successes} succeeded," - f" {n_test_failures} failed," - f" {n_test_failures_ignored} failed but ok to ignore >>" - ) - - # Exit with error if any failures (import or unit test) - - if module_pypaths_failed or test_pypaths_failed: - msgs = [] - if module_pypaths_failed: - msgs.append( - f"{n_import_failures} module(s) failed to import:\n " - + ", ".join(module_pypaths_failed) - ) - if test_pypaths_failed: - msgs.append( - f"{n_test_failures} unit test(s) failed:\n " - + ", ".join(test_pypaths_failed) - ) - - # Note the extra newlines before the exception to make it stand out; - # and newlines after the exception are due to the pycuda error message - # that is emitted when we call pycuda.autoinit.context.detach() - sys.stdout.flush() - sys.stderr.write("\n\n\n") - raise Exception("\n".join(msgs) + "\n\n\n") - - -def find_unit_tests(path): - """Find .py file(s) and any tests to run within them, starting at `path` - (which can be a single file or a directory, which is recursively searched - for .py files) - - Parameters - ---------- - path : str - Path to a file or directory - - Returns - ------- - tests : dict - Each key is the path to the .py file relative to PISA_PATH and each - value is a list of the "test_*" function names within that file (empty - if no such functions are found) - - """ - path = expand(path, absolute=True, resolve_symlinks=True) - - tests = {} - if isfile(path): - filerelpath = relpath(path, start=PISA_PATH) - tests[filerelpath] = find_unit_tests_in_file(path) - return tests - - for dirpath, dirs, files in walk(path, followlinks=True): - files.sort(key=nsort_key_func) - dirs.sort(key=nsort_key_func) - - for filename in files: - if not filename.endswith(".py"): - continue - filepath = join(dirpath, filename) - filerelpath = relpath(filepath, start=PISA_PATH) - tests[filerelpath] = find_unit_tests_in_file(filepath) - - return tests - - -def find_unit_tests_in_file(filepath): - """Find test functions defined by "def test_*" within a file at `filepath` - - Parameters - ---------- - filepath : str - Path to python file - - Returns - ------- - tests : list of str - - """ - filepath = expand(filepath, absolute=True, resolve_symlinks=True) - assert isfile(filepath), str(filepath) - tests = [] - with open(filepath, "r") as f: - for line in f.readlines(): - tokens = line.split() - if tokens and tokens[0] == "def" and tokens[1].startswith("test_"): - funcname = tokens[1].split("(")[0].strip() - tests.append(funcname) - return tests - - -def main(description=__doc__): - """Script interface to `run_unit_tests` function""" - parser = ArgumentParser( - description=description, formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - "path", - nargs="?", - default=PISA_PATH, - help="""Specify a specific path to a file or directory in which to find - and run unit tests""", - ) - parser.add_argument( - "--allow-missing", - nargs="+", - default=list(OPTIONAL_MODULES), - help="""Allow ImportError (or subclasses) for these modules""", - ) - parser.add_argument( - "-v", action="count", default=Levels.WARN, help="set verbosity level" - ) - kwargs = vars(parser.parse_args()) - kwargs["verbosity"] = kwargs.pop("v") - try: - run_unit_tests(**kwargs) - except Exception as e: - if hasattr(e, 'message'): - msg = e.message - else: - msg = str(e) - logging.error("\n"+msg) - sys.exit(1) - -if __name__ == "__main__": - main() diff --git a/pisa_tests/test_Detectors_class.py b/pisa_tests/test_Detectors_class.py deleted file mode 100644 index 1a9cac076..000000000 --- a/pisa_tests/test_Detectors_class.py +++ /dev/null @@ -1,160 +0,0 @@ -#! /usr/bin/env python - -""" -Tests the Detectors class -""" - - -from __future__ import absolute_import - -from argparse import ArgumentParser -import glob - -from pisa.core.pipeline import Pipeline -from pisa.core.detectors import Detectors -from pisa.utils.log import Levels, logging, set_verbosity -from pisa.utils.resources import find_resource -from pisa.analysis.analysis import update_param_values_detector - - -__all__ = ["test_Detectors", "parse_args", "main"] - -__author__ = "J. Weldert" - -__license__ = """Copyright (c) 2014-2022, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -def test_Detectors(verbosity=Levels.WARN): - """Run a combination of two DeepCore detectors.""" - p1_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") - p1_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") - p1_nu.detector_name, p1_mu.detector_name = 'detector1', 'detector1' - - p2_nu = Pipeline("settings/pipeline/IceCube_3y_neutrinos.cfg") - p2_mu = Pipeline("settings/pipeline/IceCube_3y_muons.cfg") - p2_nu.detector_name, p2_mu.detector_name = 'detector2', 'detector2' - - # Initializing - try: - set_verbosity(Levels.INFO) - logging.info(f'Initializing Detectors') - - set_verbosity(Levels.WARN) - model = Detectors([p1_nu, p1_mu, p2_nu, p2_mu], shared_params=['deltam31', 'theta13', 'theta23', 'nue_numu_ratio', 'Barr_uphor_ratio', 'Barr_nu_nubar_ratio', 'delta_index', 'nutau_norm', 'nu_nc_norm', 'opt_eff_overall', 'opt_eff_lateral', 'opt_eff_headon', 'ice_scattering', 'ice_absorption', 'atm_muon_scale']) - - except Exception as err: - msg = f"<< Error when initializing the Detectors >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error("#" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully initialized Detectors >>") - - finally: - set_verbosity(verbosity) - - # Get outputs - try: - set_verbosity(Levels.INFO) - logging.info(f'Running Detectors (takes a bit)') - - set_verbosity(Levels.WARN) - model.get_outputs() - - except Exception as err: - msg = f"<< Error when running the Detectors >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error("#" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully ran Detectors >>") - - finally: - set_verbosity(verbosity) - - # Change parameters - set_verbosity(Levels.INFO) - logging.info(f'Change parameters') - - set_verbosity(Levels.WARN) - model.reset_free() - model.params.opt_eff_lateral.value = 20 # shared parameter - model.params.aeff_scale.value = 2 # only changes value for detector1 - update_param_values_detector(model, model.params) - - o0 = model.distribution_makers[0].params.opt_eff_lateral.value.magnitude - o1 = model.distribution_makers[1].params.opt_eff_lateral.value.magnitude - a0 = model.distribution_makers[0].params.aeff_scale.value.magnitude - a1 = model.distribution_makers[1].params.aeff_scale.value.magnitude - - if not o0 == 20 or not o1 == 20: - msg = f"<< Error when changing shared parameter >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - elif not a0 == 2 or not a1 == 1: - msg = f"<< Error when changing non-shared parameter >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - else: - set_verbosity(verbosity) - logging.info("<< Successfully changed parameters >>") - - - -def parse_args(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - "-v", action="count", default=Levels.WARN, help="set verbosity level" - ) - args = parser.parse_args() - return args - - -def main(): - """Script interface to test_Detectors""" - args = parse_args() - kwargs = vars(args) - kwargs["verbosity"] = kwargs.pop("v") - test_Detectors(**kwargs) - logging.info(f'Detectors class test done') - - -if __name__ == "__main__": - main() diff --git a/pisa_tests/test_changes_with_combined_pidreco.py b/pisa_tests/test_changes_with_combined_pidreco.py deleted file mode 100755 index cf366cc76..000000000 --- a/pisa_tests/test_changes_with_combined_pidreco.py +++ /dev/null @@ -1,489 +0,0 @@ -#! /usr/bin/env python - -""" -Run a set of tests on the PISA 3 pipeline to check the effect of combining Reco -and PID in to a single stage. Output is tested against both the standard PISA -and a full event-by-event treatment from OscFit in various configurations. -""" - - -from __future__ import absolute_import, division - -from argparse import ArgumentParser -from copy import deepcopy -import os -import numpy as np - -from pisa import ureg, Q_ -from pisa.core.pipeline import Pipeline -from pisa.utils.config_parser import parse_pipeline_config -from pisa.utils.fileio import from_file -from pisa.utils.log import logging, set_verbosity -from pisa.utils.resources import find_resource -from pisa.utils.tests import print_event_rates, plot_comparisons - - -__all__ = ['FMT', - 'compare_pisa_self', 'compare_5stage', 'compare_4stage', - 'do_comparisons', 'oversample_config', - 'main'] - -__author__ = 'S. Wren' - -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -FMT = 'png' - - -def compare_pisa_self(config1, config2, testname1, testname2, outdir): - """Compare baseline output of PISA 3 with a different version of itself""" - logging.debug('>> Comparing %s with %s (both PISA)'%(testname1,testname2)) - - pipeline1 = Pipeline(config1) - outputs1 = pipeline1.get_outputs() - pipeline2 = Pipeline(config2) - outputs2 = pipeline2.get_outputs() - - if '5-stage' in testname1: - cake1_trck_map = outputs1.combine_wildcard('*_trck') - cake1_cscd_map = outputs1.combine_wildcard('*_cscd') - cake1_trck_map_to_plot = {} - cake1_trck_map_to_plot['ebins'] = \ - cake1_trck_map.binning['reco_energy'].bin_edges.magnitude - cake1_trck_map_to_plot['czbins'] = \ - cake1_trck_map.binning['reco_coszen'].bin_edges.magnitude - cake1_trck_map_to_plot['map'] = cake1_trck_map.hist - cake1_trck_events = np.sum(cake1_trck_map_to_plot['map']) - cake1_cscd_map_to_plot = {} - cake1_cscd_map_to_plot['ebins'] = \ - cake1_cscd_map.binning['reco_energy'].bin_edges.magnitude - cake1_cscd_map_to_plot['czbins'] = \ - cake1_cscd_map.binning['reco_coszen'].bin_edges.magnitude - cake1_cscd_map_to_plot['map'] = cake1_cscd_map.hist - cake1_cscd_events = np.sum(cake1_cscd_map_to_plot['map']) - elif '4-stage' in testname1: - cake1_both_map = outputs1.combine_wildcard('*') - cake1_trck_map_to_plot = {} - cake1_trck_map_to_plot['ebins'] = \ - cake1_both_map.binning['reco_energy'].bin_edges.magnitude - cake1_trck_map_to_plot['czbins'] = \ - cake1_both_map.binning['reco_coszen'].bin_edges.magnitude - cake1_trck_map_to_plot['map'] = \ - cake1_both_map.split( - dim='pid', - bin='trck' - ).hist - cake1_trck_events = np.sum(cake1_trck_map_to_plot['map']) - cake1_cscd_map_to_plot = {} - cake1_cscd_map_to_plot['ebins'] = \ - cake1_both_map.binning['reco_energy'].bin_edges.magnitude - cake1_cscd_map_to_plot['czbins'] = \ - cake1_both_map.binning['reco_coszen'].bin_edges.magnitude - cake1_cscd_map_to_plot['map'] = \ - cake1_both_map.split( - dim='pid', - bin='cscd' - ).hist - cake1_cscd_events = np.sum(cake1_cscd_map_to_plot['map']) - else: - raise ValueError("Should be comparing 4-stage or 5-stage PISAs.") - - if '5-stage' in testname2: - cake2_trck_map = outputs2.combine_wildcard('*_trck') - cake2_cscd_map = outputs2.combine_wildcard('*_cscd') - cake2_trck_map_to_plot = {} - cake2_trck_map_to_plot['ebins'] = \ - cake2_trck_map.binning['reco_energy'].bin_edges.magnitude - cake2_trck_map_to_plot['czbins'] = \ - cake2_trck_map.binning['reco_coszen'].bin_edges.magnitude - cake2_trck_map_to_plot['map'] = cake2_trck_map.hist - cake2_trck_events = np.sum(cake2_trck_map_to_plot['map']) - cake2_cscd_map_to_plot = {} - cake2_cscd_map_to_plot['ebins'] = \ - cake2_cscd_map.binning['reco_energy'].bin_edges.magnitude - cake2_cscd_map_to_plot['czbins'] = \ - cake2_cscd_map.binning['reco_coszen'].bin_edges.magnitude - cake2_cscd_map_to_plot['map'] = cake2_cscd_map.hist - cake2_cscd_events = np.sum(cake2_cscd_map_to_plot['map']) - elif '4-stage' in testname2: - cake2_both_map = outputs2.combine_wildcard('*') - cake2_trck_map_to_plot = {} - cake2_trck_map_to_plot['ebins'] = \ - cake2_both_map.binning['reco_energy'].bin_edges.magnitude - cake2_trck_map_to_plot['czbins'] = \ - cake2_both_map.binning['reco_coszen'].bin_edges.magnitude - cake2_trck_map_to_plot['map'] = \ - cake2_both_map.split( - dim='pid', - bin='trck' - ).hist - cake2_trck_events = np.sum(cake2_trck_map_to_plot['map']) - cake2_cscd_map_to_plot = {} - cake2_cscd_map_to_plot['ebins'] = \ - cake2_both_map.binning['reco_energy'].bin_edges.magnitude - cake2_cscd_map_to_plot['czbins'] = \ - cake2_both_map.binning['reco_coszen'].bin_edges.magnitude - cake2_cscd_map_to_plot['map'] = \ - cake2_both_map.split( - dim='pid', - bin='cscd' - ).hist - cake2_cscd_events = np.sum(cake2_cscd_map_to_plot['map']) - else: - raise ValueError("Should be comparing 4-stage or 5-stage PISAs.") - - max_diff_ratio, max_diff = plot_comparisons( - ref_map=cake1_trck_map_to_plot, - new_map=cake2_trck_map_to_plot, - ref_abv=testname1, - new_abv=testname2, - outdir=outdir, - subdir='recopidcombinedchecks', - stagename=None, - servicename='recopid', - name='trck', - texname=r'\rm{trck}', - shorttitles=True, - ftype=FMT - ) - - max_diff_ratio, max_diff = plot_comparisons( - ref_map=cake1_cscd_map_to_plot, - new_map=cake2_cscd_map_to_plot, - ref_abv=testname1, - new_abv=testname2, - outdir=outdir, - subdir='recopidcombinedchecks', - stagename=None, - servicename='recopid', - name='cscd', - texname=r'\rm{cscd}', - shorttitles=True, - ftype=FMT - ) - - print_event_rates( - testname1=testname1, - testname2=testname2, - kind='trck', - map1_events=cake1_trck_events, - map2_events=cake2_trck_events - ) - print_event_rates( - testname1=testname1, - testname2=testname2, - kind='cscd', - map1_events=cake1_cscd_events, - map2_events=cake2_cscd_events - ) - - print_event_rates( - testname1=testname1, - testname2=testname2, - kind='all', - map1_events=cake1_trck_events+cake1_cscd_events, - map2_events=cake2_trck_events+cake2_cscd_events - ) - - return pipeline2 - - -def compare_5stage(config, testname, outdir, oscfitfile): - """Compare 5 stage output of PISA 3 with OscFit.""" - logging.debug('>> Working on baseline comparisons between both fitters.') - logging.debug('>>> Doing %s test.'%testname) - baseline_comparisons = from_file(oscfitfile) - ref_abv='OscFit' - - pipeline = Pipeline(config) - outputs = pipeline.get_outputs() - - total_pisa_events = 0.0 - total_oscfit_events = 0.0 - - for nukey in baseline_comparisons.keys(): - - baseline_map_to_plot = baseline_comparisons[nukey] - oscfit_events = np.sum(baseline_map_to_plot['map']) - - cake_map = outputs.combine_wildcard('*_%s'%nukey) - if nukey == 'trck': - texname = r'\rm{trck}' - elif nukey == 'cscd': - texname = r'\rm{cscd}' - cake_map_to_plot = {} - cake_map_to_plot['ebins'] = \ - cake_map.binning['reco_energy'].bin_edges.magnitude - cake_map_to_plot['czbins'] = \ - cake_map.binning['reco_coszen'].bin_edges.magnitude - cake_map_to_plot['map'] = cake_map.hist - pisa_events = np.sum(cake_map_to_plot['map']) - - max_diff_ratio, max_diff = plot_comparisons( - ref_map=baseline_map_to_plot, - new_map=cake_map_to_plot, - ref_abv=ref_abv, - new_abv=testname, - outdir=outdir, - subdir='recopidcombinedchecks', - stagename=None, - servicename='baseline', - name=nukey, - texname=texname, - shorttitles=True, - ftype=FMT - ) - - print_event_rates( - testname1=testname, - testname2='OscFit', - kind=nukey, - map1_events=pisa_events, - map2_events=oscfit_events - ) - - total_pisa_events += pisa_events - total_oscfit_events += oscfit_events - - print_event_rates( - testname1=testname, - testname2='OscFit', - kind='all', - map1_events=total_pisa_events, - map2_events=total_oscfit_events - ) - - return pipeline - - -def compare_4stage(config, testname, outdir, oscfitfile): - """ - Compare 4 stage output of PISA 3 with OscFit. - """ - logging.debug('>> Working on baseline comparisons between both fitters.') - logging.debug('>>> Doing %s test.'%testname) - baseline_comparisons = from_file(oscfitfile) - ref_abv='OscFit' - - pipeline = Pipeline(config) - outputs = pipeline.get_outputs() - - total_pisa_events = 0.0 - total_oscfit_events = 0.0 - - for nukey in baseline_comparisons.keys(): - - baseline_map_to_plot = baseline_comparisons[nukey] - oscfit_events = np.sum(baseline_map_to_plot['map']) - - cake_map = outputs.combine_wildcard('*') - cake_map_to_plot = {} - cake_map_to_plot['ebins'] = \ - cake_map.binning['reco_energy'].bin_edges.magnitude - cake_map_to_plot['czbins'] = \ - cake_map.binning['reco_coszen'].bin_edges.magnitude - if nukey == 'trck': - texname = r'\rm{trck}' - cake_map_to_plot['map'] = \ - cake_map.split( - dim='pid', - bin='trck' - ).hist - elif nukey == 'cscd': - texname = r'\rm{cscd}' - cake_map_to_plot['map'] = \ - cake_map.split( - dim='pid', - bin='cscd' - ).hist - pisa_events = np.sum(cake_map_to_plot['map']) - - max_diff_ratio, max_diff = plot_comparisons( - ref_map=baseline_map_to_plot, - new_map=cake_map_to_plot, - ref_abv=ref_abv, - new_abv=testname, - outdir=outdir, - subdir='recopidcombinedchecks', - stagename=None, - servicename='baseline', - name=nukey, - texname=texname, - shorttitles=True, - ftype=FMT - ) - - print_event_rates( - testname1=testname, - testname2='OscFit', - kind=nukey, - map1_events=pisa_events, - map2_events=oscfit_events - ) - - total_pisa_events += pisa_events - total_oscfit_events += oscfit_events - - print_event_rates( - testname1=testname, - testname2='OscFit', - kind='all', - map1_events=total_pisa_events, - map2_events=total_oscfit_events - ) - - return pipeline - - -def do_comparisons(config1, config2, oscfitfile, - testname1, testname2, outdir): - pisa_recopid_pipeline = compare_pisa_self( - config1=config1, - config2=config2, - testname1=testname1, - testname2=testname2, - outdir=outdir - ) - pisa_standard_pipeline = compare_5stage( - config=config1, - testname=testname1, - outdir=outdir, - oscfitfile=oscfitfile - ) - pisa_recopid_pipeline = compare_4stage( - config=config2, - testname=testname2, - outdir=outdir, - oscfitfile=oscfitfile - ) - - -def oversample_config(base_config, oversample): - for stage in base_config.keys(): - for obj in base_config[stage].keys(): - if 'binning' in obj: - if 'true' in base_config[stage][obj].names[0]: - base_config[stage][obj] = \ - base_config[stage][obj].oversample(oversample) - return base_config - - -def main(): - parser = ArgumentParser(description=__doc__) - parser.add_argument('--oversampling', action='store_true', default=False, - help='''Run oversampling tests i.e. use a finer binning - through the truth stages in addition to the standard - tests. You must flag this if you want it.''') - parser.add_argument('--weighting', type=str, default=None, - help='''Name of the weighting field to use in the - comparisons. This must correspond to a field in the - events files being used.''') - parser.add_argument('--outdir', metavar='DIR', type=str, required=True, - help='''Store all output plots to this directory. If - they don't exist, the script will make them, including - all subdirectories.''') - parser.add_argument('-v', action='count', default=None, - help='set verbosity level') - args = parser.parse_args() - set_verbosity(args.v) - - known_weights = [None, 'weighted_aeff'] - - if args.weighting not in known_weights: - logging.warning( - '''%s weighting field not known to be in events file. - Tests may not work in this case!'''%args.weighting - ) - - # Want these for all tests - pisa_standard_settings = os.path.join( - 'tests', 'settings', 'recopid_full_pipeline_5stage_test.cfg' - ) - pisa_standard_config = parse_pipeline_config(pisa_standard_settings) - pisa_recopid_settings = os.path.join( - 'tests', 'settings', 'recopid_full_pipeline_4stage_test.cfg' - ) - pisa_recopid_config = parse_pipeline_config(pisa_recopid_settings) - - # Add weighting to pipeline according to user input - # Need to add it to both reco and PID for standard config - reco_k = [k for k in pisa_standard_config.keys() \ - if k[0] == 'reco'][0] - standard_reco_params = \ - pisa_standard_config[reco_k]['params'].params - standard_reco_params.reco_weights_name.value = args.weighting - pid_k = [k for k in pisa_standard_config.keys() \ - if k[0] == 'pid'][0] - standard_pid_params = \ - pisa_standard_config[pid_k]['params'].params - standard_pid_params.pid_weights_name.value = args.weighting - # Just needs adding to reco for joined recopid config - recopid_k = [k for k in pisa_recopid_config.keys() \ - if k[0] == 'reco'][0] - recopid_reco_params = \ - pisa_recopid_config[recopid_k]['params'].params - recopid_reco_params.reco_weights_name.value = args.weighting - - # Load OscFit file for comparisons - oscfitfile = os.path.join( - 'tests', 'data', 'oscfit', 'OscFit1X600Baseline.json' - ) - - # Rename in this instance now so it's clearer in logs and filenames - if args.weighting == None: - args.weighting = 'unweighted' - - logging.info("<<<< %s reco/pid Transformations >>>>"%args.weighting) - # Perform baseline tests - logging.info("<< No oversampling >>") - do_comparisons( - config1=deepcopy(pisa_standard_config), - config2=deepcopy(pisa_recopid_config), - oscfitfile=oscfitfile, - testname1='5-stage-%s'%args.weighting, - testname2='4-stage-%s'%args.weighting, - outdir=args.outdir - ) - - # Perform oversampled tests - if args.oversampling: - oversamples = [5,10,20,50] - for oversample in oversamples: - pisa_standard_oversampled_config = oversample_config( - base_config=deepcopy(pisa_standard_config), - oversample=oversample - ) - pisa_recopid_oversampled_config = oversample_config( - base_config=deepcopy(pisa_recopid_config), - oversample=oversample - ) - logging.info("<< Oversampling by %i >>"%(oversample)) - do_comparisons( - config1=deepcopy(pisa_standard_oversampled_config), - config2=deepcopy(pisa_recopid_oversampled_config), - oscfitfile=oscfitfile, - testname1='5-stage-%s-Oversampled%i'%(args.weighting, - oversample), - testname2='4-stage-%s-Oversampled%i'%(args.weighting, - oversample), - outdir=args.outdir - ) - -main.__doc__ = __doc__ - - -if __name__ == '__main__': - main() diff --git a/pisa_tests/test_command_lines.sh b/pisa_tests/test_command_lines.sh deleted file mode 100755 index 2019228fd..000000000 --- a/pisa_tests/test_command_lines.sh +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash - -# -# author: J.L. Lanfranchi -# -# Copyright (c) 2014-2017, The IceCube Collaboration -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License -# - - -BASEDIR=$(dirname "$0") -PISA=$BASEDIR/.. -TMP=/tmp/pisa_tests -export PISA_RESOURCES=${TMP}/pisa_resources:$PISA_RESOURCES -mkdir -p $TMP -mkdir -p $PISA_RESOURCES -echo "PISA=$PISA" - - -echo "==============================================================================" -echo "Generating toy MC for use with test scripts" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/scripts/make_toy_events.py --outdir ${PISA_RESOURCES}/events \ - --num-events 1e5 \ - --energy-range 1 80 \ - --spectral-index 1 \ - --coszen-range -1 1 -echo "------------------------------------------------------------------------------" -echo "Finished creating toy MC events to be used with unit tests" -echo "------------------------------------------------------------------------------" -echo "" -echo "" - - -echo "==============================================================================" -echo "Running test_example_pipelines.py" -echo "==============================================================================" -python $BASEDIR/test_example_pipelines.py -v -echo "------------------------------------------------------------------------------" -echo "Finished Running test_example_pipelines.py" -echo "------------------------------------------------------------------------------" -echo "" -echo "" - -echo "==============================================================================" -echo "Running test_kde_stage.py" -echo "==============================================================================" -python $BASEDIR/test_kde_stage.py -v -echo "------------------------------------------------------------------------------" -echo "Finished Running test_kde_stage.py" -echo "------------------------------------------------------------------------------" -echo "" -echo "" - - -# TODO: all files except setup.py and __init__.py that are listed below should -# have a command-line test defined further down in this script (i.e., these are -# scripts that require specific command-line arguments) -for f in `find $PISA/pisa -name "*.py"` -do - BN=$(basename "$f") - #if [[ "$BN" == test_* ]];then continue;fi - if [[ "$f" == *pisa/scripts/* ]];then continue;fi - if [ "$BN" == "__init__.py" ];then continue;fi - if [ "$BN" == "setup.py" ];then continue;fi - if [ "$BN" == pipeline.py ];then continue;fi - if [ "$BN" == distribution_maker.py ];then continue;fi - if [ "$BN" == genie.py ];then continue;fi - - echo "==============================================================================" - echo "Running python $BN at abs path" - echo " `realpath $f`" - echo "==============================================================================" - python $f || FAILURE=true - echo "------------------------------------------------------------------------------" - echo "Finished running python $BN" - echo "------------------------------------------------------------------------------" - echo "" - echo "" - sleep 1 -done - - -# -# Test CPU vs GPU, both FP64 and FP32 and CPU FP32 vs CPU FP64 -# - -OUTDIR_CPU64_NH_PIPELINE=$TMP/cpu64nh_pipeline -echo "==============================================================================" -echo "Running pipeline.py with example.cfg, with CPU & fp64 selected." -echo "Storing results to" -echo " $OUTDIR_CPU64_NH_PIPELINE" -echo "==============================================================================" -PISA_FTYPE=float64 python $PISA/pisa/core/pipeline.py \ - -p settings/pipeline/example.cfg \ - --select "nh" \ - --outdir $OUTDIR_CPU64_NH_PIPELINE \ - --png -v - -OUTDIR_CPU32_NH_PIPELINE=$TMP/cpu32nh_pipeline -echo "==============================================================================" -echo "Running pipeline.py with example.cfg, with CPU & fp32 selected." -echo "Storing results to" -echo " $OUTDIR_CPU32_NH_PIPELINE" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/core/pipeline.py \ - -p settings/pipeline/example.cfg \ - -a stage.aeff param.aeff_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - -a stage.reco param.reco_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - --select "nh" \ - --outdir $OUTDIR_CPU32_NH_PIPELINE \ - --png -v - -OUTDIR_GPU64_NH_PIPELINE=$TMP/gpu64nh_pipeline -echo "==============================================================================" -echo "Running pipeline.py with example.cfg, with GPU & fp64 selected." -echo "Storing results to" -echo " $OUTDIR_GPU64_NH_PIPELINE" -echo "==============================================================================" -PISA_FTYPE=float64 python $PISA/pisa/core/pipeline.py \ - -p settings/pipeline/example.cfg \ - -a stage.aeff param.aeff_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - -a stage.reco param.reco_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - --select "nh" \ - --outdir $OUTDIR_GPU64_NH_PIPELINE \ - --png -v - -OUTDIR_GPU32_NH_PIPELINE=$TMP/gpu32nh_pipeline -echo "==============================================================================" -echo "Running pipeline.py with example.cfg, with GPU & fp32 selected." -echo "Storing results to" -echo " $OUTDIR_GPU32_NH_PIPELINE" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/core/pipeline.py \ - -p settings/pipeline/example.cfg \ - -a stage.aeff param.aeff_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - -a stage.reco param.reco_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - --select "nh" \ - --outdir $OUTDIR_GPU32_NH_PIPELINE \ - --png -v - -OUTDIR=$TMP/compare_cpu64nh_pipeline_gpu64nh_pipeline -echo "==============================================================================" -echo "Running compare.py, CPU vs. GPU pipeline settings, FP64." -echo "Storing results to" -echo " $OUTDIR" -echo "==============================================================================" -PISA_FTYPE=float64 python $PISA/pisa/scripts/compare.py \ - --ref $OUTDIR_CPU64_NH_PIPELINE/*.json* \ - --ref-label 'cpu64nh' \ - --test $OUTDIR_GPU64_NH_PIPELINE/*.json* \ - --test-label 'gpu64nh' \ - --outdir $OUTDIR \ - --png -v - -OUTDIR=$TMP/compare_cpu32nh_pipeline_gpu32nh_pipeline -echo "==============================================================================" -echo "Running compare.py, CPU vs. GPU pipeline settings, FP32." -echo "Storing results to" -echo " $OUTDIR" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/scripts/compare.py \ - --ref $OUTDIR_CPU32_NH_PIPELINE/*.json* \ - --ref-label 'cpu32nh' \ - --test $OUTDIR_GPU32_NH_PIPELINE/*.json* \ - --test-label 'gpu32nh' \ - --outdir $OUTDIR \ - --png -v - -OUTDIR=$TMP/compare_cpu32nh_pipeline_cpu64nh_pipeline -echo "==============================================================================" -echo "Running compare.py, CPU32NH vs. CPU64NH" -echo "Storing results to" -echo " $OUTDIR" -echo "==============================================================================" -PISA_FTYPE=float64 python $PISA/pisa/scripts/compare.py \ - --ref $OUTDIR_CPU64_NH_PIPELINE/*.json* \ - --ref-label 'cpu64nh' \ - --test $OUTDIR_CPU32_NH_PIPELINE/*.json* \ - --test-label 'cpu32nh' \ - --outdir $OUTDIR \ - --png -v - - -# -# Test hierarchy NH vs IH -# - -OUTDIR_CPU64_IH_PIPELINE=$TMP/cpu64ih_pipeline -echo "==============================================================================" -echo "Running pipeline.py with example.cfg, with ih selected." -echo "Storing results to" -echo " $OUTDIR_CPU64_IH_PIPELINE" -echo "==============================================================================" -PISA_FTYPE=float64 python $PISA/pisa/core/pipeline.py \ - -p settings/pipeline/example.cfg \ - -a stage.aeff param.aeff_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - -a stage.reco param.reco_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ - --select "ih" \ - --outdir $OUTDIR_CPU64_IH_PIPELINE \ - --png -v - -OUTDIR=$TMP/compare_cpu64nh_pipeline_to_cpu64ih_pipeline -echo "==============================================================================" -echo "Running compare.py, nh vs. ih MapSets produced above with plots." -echo "Storing results to" -echo " $OUTDIR" -echo "==============================================================================" -python $PISA/pisa/scripts/compare.py \ - --ref $OUTDIR_CPU64_IH_PIPELINE/*.json* \ - --ref-label 'cpu64ih' \ - --test $OUTDIR_CPU64_NH_PIPELINE/*.json* \ - --test-label 'cpu64nh' \ - --outdir $OUTDIR \ - --png -v - - -# -# Test that DistributionMaker has same result as pipeline -# - -# TODO: removed since -a option doesn't work for distmaker -#OUTDIR_CPU64_NH_DISTMAKER=$TMP/cpu64nh_distmaker -#echo "==============================================================================" -#echo "Running distribution_maker.py with example.cfg, with nh selected." -#echo "Storing results to" -#echo " $OUTDIR_CPU64_NH_DISTMAKER" -#echo "==============================================================================" -#PISA_FTYPE=float64 python $PISA/pisa/core/distribution_maker.py \ -# -p settings/pipeline/example.cfg \ -# -a stage.aeff param.aeff_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ -# -a stage.reco param.reco_events=events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e5evts_set0__unjoined.hdf5 \ -# --select "nh" \ -# --outdir $OUTDIR_CPU64_NH_DISTMAKER \ -# --png -v -# -#OUTDIR=$TMP/compare_cpu64nh_distmaker_to_cpu64nh_pipeline -#echo "==============================================================================" -#echo "Running compare.py, fp64/cpu distmaker vs. fp64/cpu pipeline-produced MapSets." -#echo "Storing results to" -#echo " $OUTDIR" -#echo "==============================================================================" -#python $PISA/pisa/scripts/compare.py \ -# --ref $OUTDIR_CPU64_NH_PIPELINE/*.json* \ -# --ref-label 'cpu64nh_pipeline' \ -# --test $OUTDIR_CPU64_NH_DISTMAKER/*.json* \ -# --test-label 'cpu64nh_distmaker' \ -# --outdir $OUTDIR \ -# --png -v - - -# Call script to run hypothesis testing (runs minimizer with a pipeline) -$BASEDIR/test_hypo_testing.sh diff --git a/pisa_tests/test_covariance.py b/pisa_tests/test_covariance.py deleted file mode 100644 index 3ffb670fa..000000000 --- a/pisa_tests/test_covariance.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python - -from pisa.utils.log import Levels, logging, set_verbosity -from pisa.utils.resources import find_resource -from pisa.core.pipeline import Pipeline - -from argparse import ArgumentParser - -import numpy as np - -eps = 1e-10 - -""" -Runs a set of tests on an example PISA pipeline to ensure - 1. correlated priors can be added - 2. internal conversions between correlated and uncorrelated priors are accurate - 3. stddev in the uncorrelated basis' priors are accurate - 4. the LLHs in the uncorrelated basis are consistent with the expectation from the correlated basis -""" - -__author__ = 'Ben Smithers' - - - -def test_covariance(verbosity=Levels.WARN): - """ - Run one of the example pipelines, applying a covariance matrix to two of the parameters - """ - from pisa.utils.log import Levels, logging, set_verbosity - from pisa.utils.resources import find_resource - from pisa.core.pipeline import Pipeline - - set_verbosity(verbosity) - - settings = find_resource("settings/pipeline/IceCube_3y_neutrinos.cfg") - - ex_cov = { - "opt_eff_lateral":{ - "opt_eff_lateral":1.0, - "opt_eff_headon":0.2 - }, - "opt_eff_headon":{ - "opt_eff_lateral":0.2, - "opt_eff_headon":1.0 - } - } - - dim = len(ex_cov.keys()) - cov = np.zeros((dim,dim)) - for k_i, key in enumerate(ex_cov.keys()): - for k_j, subkey in enumerate(ex_cov[key].keys()): - cov[k_i][k_j] = ex_cov[key][subkey] - - - evals, evecs = np.linalg.eig(cov) - reverse = np.linalg.inv(evecs) - - pipe = Pipeline(settings) - - old_params = [pipe.params[parname] for parname in ex_cov.keys()] - means = [0.0 for i in range(dim)] - for i, param in enumerate(old_params): - if param.prior.kind == "gaussian": - means[i] = param.prior.mean - elif param.prior.kind=="uniform": - means[i] = (param.range[1] + param.range[0])*0.5 - else: - raise NotImplementedError() - - pipe.add_covariance(ex_cov) - - def vs_from_xs(xs): - return np.matmul(xs-means,evecs) - - def xs_from_vs(vs): - xs = np.matmul(vs, reverse) + means - return xs - - pipe.params.randomize_free() - - # check the Xs are what they should be and the vs are what they should be - - vs = np.array([ pipe.params["opt_eff_lateral_rotated"].value.m, pipe.params["opt_eff_headon_rotated"].value.m ]) - xs = np.array([ pipe.params["opt_eff_lateral"].value.m, pipe.params["opt_eff_headon"].value.m ]) - - get_xs = xs_from_vs(vs) - for i_x, value in enumerate(get_xs): - assert abs(value-xs[i_x])>") - - -def parse_args(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - "-v", action="count", default=Levels.WARN, help="set verbosity level" - ) - args = parser.parse_args() - return args - - -def main(): - args = parse_args() - kwargs = vars(args) - kwargs["verbosity"] = kwargs.pop("v") - test_covariance(**kwargs) - -if __name__=="__main__": - main() \ No newline at end of file diff --git a/pisa_tests/test_example_pipelines.py b/pisa_tests/test_example_pipelines.py deleted file mode 100755 index 63a50af03..000000000 --- a/pisa_tests/test_example_pipelines.py +++ /dev/null @@ -1,135 +0,0 @@ -#! /usr/bin/env python - -""" -Look in the PISA installation's pipeline settings directory for any example -pipeline configs (*example*.cfg) and run all of them to ensure that their -functionality remains intact. Note that this only tests that they run but does -not test that the generated outputs are necessarily correct (this is up to the -user). -""" - - -from __future__ import absolute_import - -from argparse import ArgumentParser -import glob - -from pisa.core.pipeline import Pipeline -from pisa.utils.log import Levels, logging, set_verbosity -from pisa.utils.resources import find_resource - - -__all__ = ["test_example_pipelines", "parse_args", "main"] - -__author__ = "S. Wren, J.L. Lanfranchi" - -__license__ = """Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -def test_example_pipelines(path="settings/pipeline", verbosity=Levels.WARN): - """Run pipelines from any "*.cfg" config files found at `path`.""" - path = find_resource(path) - settings_files = glob.glob(path + "/*.cfg") - - failures = [] - successes = [] - - for settings_file in settings_files: - try: - # NOTE: Force output of info on which settings file is being - # instantiated and run, as warnings emitted by individual stages - # are not as useful if we don't know which pipeline config is being - # run - - set_verbosity(Levels.INFO) - logging.info(f'Instantiating Pipeline with "{settings_file}" ...') - - set_verbosity(Levels.WARN) - pipeline = Pipeline(settings_file) - - set_verbosity(Levels.INFO) - logging.info(f'Running Pipeline instantiated from "{settings_file}" ...') - - set_verbosity(Levels.WARN) - pipeline.get_outputs() - - except Exception as err: - failures.append(settings_file) - - msg = f"<< FAILURE IN PIPELINE : {settings_file} >>" - set_verbosity(verbosity) - logging.error("=" * len(msg)) - logging.error(msg) - logging.error("=" * len(msg)) - - # Reproduce the error with full output - - set_verbosity(Levels.TRACE) - try: - pipeline = Pipeline(settings_file) - pipeline.get_outputs() - except Exception: - pass - - set_verbosity(Levels.TRACE) - logging.exception(err) - - set_verbosity(verbosity) - logging.error("#" * len(msg)) - - else: - successes.append(settings_file) - - finally: - set_verbosity(verbosity) - - # Summarize results - - set_verbosity(verbosity) - logging.info( - "<< EXAMPLE PIPELINES : " - f"{len(successes)} succeeded and {len(failures)} failed >>" - ) - - # Exit with error if any failures - - if failures: - raise Exception( - f"{len(failures)} example pipeline(s) failed:\n " - + ", ".join(f'"{f}"' for f in failures) - ) - - -def parse_args(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument("--path", default="settings/pipeline") - parser.add_argument( - "-v", action="count", default=Levels.WARN, help="set verbosity level" - ) - args = parser.parse_args() - return args - - -def main(): - """Script interface to test_example_pipelines""" - args = parse_args() - kwargs = vars(args) - kwargs["verbosity"] = kwargs.pop("v") - test_example_pipelines(**kwargs) - - -if __name__ == "__main__": - main() diff --git a/pisa_tests/test_hypo_testing.sh b/pisa_tests/test_hypo_testing.sh deleted file mode 100755 index 44e00c064..000000000 --- a/pisa_tests/test_hypo_testing.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# -# author: J.L. Lanfranchi -# -# Copyright (c) 2014-2020, The IceCube Collaboration -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License -# - - -BASEDIR=$(dirname "$0") -PISA=$BASEDIR/.. -TMP=/tmp/pisa_tests -export PISA_RESOURCES=${TMP}/pisa_resources:$PISA_RESOURCES -mkdir -p $TMP -mkdir -p $PISA_RESOURCES -echo "PISA=$PISA" - - -echo "==============================================================================" -echo "Generating toy MC for use with test scripts" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/scripts/make_toy_events.py --outdir ${PISA_RESOURCES}/events \ - --num-events 1e5 \ - --energy-range 1 80 \ - --spectral-index 1 \ - --coszen-range -1 1 -echo "------------------------------------------------------------------------------" -echo "Finished creating toy MC events to be used with unit tests" -echo "------------------------------------------------------------------------------" -echo "" -echo "" - - -# TODO: following fails unless we can use larger data set size! -OUTDIR=$TMP/hypo_testing_test -echo "==============================================================================" -echo "Running hypo_testing.py, basic NMO Asimov analysis (not necessarily accurate)" -echo "Storing results to" -echo " $OUTDIR" -echo "==============================================================================" -PISA_FTYPE=float32 python $PISA/pisa/scripts/analysis.py discrete_hypo \ - --h0-pipeline settings/pipeline/example.cfg \ - --h0-param-selections="ih" \ - --h1-param-selections="nh" \ - --data-param-selections="nh" \ - --data-is-mc \ - --min-settings settings/minimizer/l-bfgs-b_ftol2e-5_gtol1e-5_eps1e-4_maxiter200.json \ - --metric=chi2 \ - --logdir $OUTDIR \ - --pprint -v --allow-dirty diff --git a/pisa_tests/test_kde_stage.py b/pisa_tests/test_kde_stage.py deleted file mode 100644 index 7bdb2ecd2..000000000 --- a/pisa_tests/test_kde_stage.py +++ /dev/null @@ -1,368 +0,0 @@ -""" -Module to test KDE bootstrapping. This could not be built into the KDE stage's script -itself, because the import of a class named `kde` directly in the main scope overshadows -the `kde` module and causes an import error. -""" - -import numpy as np -from copy import deepcopy -from argparse import ArgumentParser -from pisa.utils.log import logging, set_verbosity, Levels -from pisa.core.distribution_maker import DistributionMaker -from pisa.utils.config_parser import parse_pipeline_config -from collections import OrderedDict - -from pisa.core.binning import MultiDimBinning, OneDimBinning -from pisa.core.param import Param, ParamSet -from pisa.core.prior import Prior -from pisa import ureg - - -__all__ = ["test_kde_bootstrapping", "test_kde_stash"] - -__author__ = "A. Trettin" - -__license__ = """Copyright (c) 2014-2022, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.""" - - -PARAM_DEFAULTS = {"prior": None, "range": None, "is_fixed": True} -"""Defaults for stage parameters.""" - -TEST_BINNING = MultiDimBinning( - [ - OneDimBinning( - name="true_energy", - is_log=True, - num_bins=15, - domain=[10, 100] * ureg.GeV, - tex=r"E_{\rm true}", - ), - OneDimBinning( - name="true_coszen", - is_log=False, - num_bins=16, - domain=[-1, 0] * ureg.dimensionless, - tex=r"\cos(\theta_z)", - ), - ] -) -"""Binning to use for test pipeline.""" - - -class TEST_CONFIGS(object): - """Default configurations for stages in a minimal test pipeline.""" - - pipe_cfg = OrderedDict( - pipeline={ - "name": "muons", - "output_binning": TEST_BINNING, - "output_key": ("weights"), - "detector_name": None, - } - ) - event_generator_cfg = { - "calc_mode": "events", - "apply_mode": "events", - "output_names": ["muon"], - "params": ParamSet( - [ - Param(name="n_events", value=1e3, **PARAM_DEFAULTS), - Param(name="seed", value=0, **PARAM_DEFAULTS), - Param(name="random", value=False, **PARAM_DEFAULTS), - ] - ), - } - aeff_cfg = { - "calc_mode": "events", - "apply_mode": "events", - "params": ParamSet( - [ - Param(name="livetime", value=12345 * ureg["seconds"], **PARAM_DEFAULTS), - Param(name="weight_scale", value=1.0, **PARAM_DEFAULTS), - ] - ), - } - set_variance_cfg = { - "calc_mode": TEST_BINNING, - "apply_mode": TEST_BINNING, - "divide_total_mc": True, - # expected number of unweighted MC events including events that fall outside of - # the analysis binning - "expected_total_mc": 1000, - "variance_scale": 0.1, - } - fix_error_cfg = { - "calc_mode": TEST_BINNING, - "apply_mode": TEST_BINNING, - } - kde_cfg = { - "calc_mode": "events", - "apply_mode": TEST_BINNING, - "bootstrap": False, - "bootstrap_seed": 0, - "bootstrap_niter": 6, - "linearize_log_dims": True, - "stash_hists": False, - "coszen_name": "true_coszen", - "stack_pid": False, - "oversample": 1, - } - - -def test_kde_bootstrapping(verbosity=Levels.WARN): - """Unit test for the kde stage.""" - - set_verbosity(verbosity) - - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - - # get map, but without the linearization - test_cfg[("utils", "kde")]["linearize_log_dims"] = False - dmaker = DistributionMaker([test_cfg]) - map_baseline_no_linearization = dmaker.get_outputs(return_sum=True)[0] - - # get a baseline (with linearization, which we will use from here on out) - test_cfg[("utils", "kde")]["linearize_log_dims"] = True - dmaker = DistributionMaker([test_cfg]) - map_baseline = dmaker.get_outputs(return_sum=True)[0] - logging.debug(f"Baseline KDE'd map:\n{map_baseline}") - - # assert that linearization make a difference at all - total_no_lin = np.sum(map_baseline_no_linearization.nominal_values) - total_with_lin = np.sum(map_baseline.nominal_values) - assert not (total_no_lin == total_with_lin) - # but also that the difference isn't huge (< 5% difference in total bin count) - # --> This will fail if one forgets to *not* take the log when linearization - # is turned off, for example. In that case, most bins will be empty, because - # the binning would be lin while the KDE would be log. - assert np.abs(total_no_lin / total_with_lin - 1.0) < 0.05 - # Make sure that different seeds produce different maps, and that the same seed will - # produce the same map. - # We enable bootstrapping now, without re-loading everything, to save time. - dmaker.pipelines[0].output_key = ("weights", "errors") - dmaker.pipelines[0].stages[-1].bootstrap = True - - map_seed0 = dmaker.get_outputs(return_sum=True)[0] - dmaker.pipelines[0].stages[-1].bootstrap_seed = 1 - map_seed1 = dmaker.get_outputs(return_sum=True)[0] - - logging.debug(f"Map with seed 0 is:\n{map_seed0}") - logging.debug(f"Map with seed 1 is:\n{map_seed1}") - - assert not map_seed0 == map_seed1 - - dmaker.pipelines[0].stages[-1].bootstrap_seed = 0 - map_seed0_reprod = dmaker.get_outputs(return_sum=True)[0] - - assert map_seed0 == map_seed0_reprod - - logging.info("<< PASS : kde_bootstrapping >>") - - -def test_kde_stash(verbosity=Levels.WARN): - """Unit test for the hist stashing feature. - - Hist stashing can greatly speed up fits as long as the only free parameters - are in stages that work on the output histograms, rather than the individual - events. In particular, it should be strictly equivalent to either scale all weights - by a factor and then running the KDE, or to first calculate the KDE and then scale - all the bin counts by the same factor. This test ensures that the order of - operation really doesn't matter. - - This should apply also to the errors, independent of whether the bootstrapping - method or the utils.set_variance stage was used to produce them. - """ - - import pytest - from numpy.testing import assert_array_equal, assert_allclose - - set_verbosity(verbosity) - - def assert_correct_scaling(pipeline_cfg, fixed_errors=False): - """Run the pipeline and assert that scaling by a factor of two is correct.""" - dmaker = DistributionMaker([pipeline_cfg]) - out = dmaker.get_outputs(return_sum="true")[0] - dmaker.pipelines[0].params.weight_scale = 2.0 - out2 = dmaker.get_outputs(return_sum="true")[0] - if fixed_errors: - # this is special: We expect that the nominal counts are multiplied, but - # that hte errors stay fixed (applies to set_variance errors) - assert_array_equal(out.nominal_values * 2.0, out2.nominal_values) - assert_array_equal(out.std_devs, out2.std_devs) - else: - assert out * 2.0 == out2 - - ## KDE without errors - - # First aeff, then KDE - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - assert_correct_scaling(test_cfg) - - # First KDE, then aeff, with stashing - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - # turn on stashing - test_cfg[("utils", "kde")]["stash_hists"] = True - # Change aeff calculation to binned mode (i.e. multiply bin counts) - test_cfg[("aeff", "weight")]["calc_mode"] = TEST_BINNING - test_cfg[("aeff", "weight")]["apply_mode"] = TEST_BINNING - assert_correct_scaling(test_cfg) - - ## KDE with bootstrap errors - - # First aeff, then KDE with bootstrap - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - # turn OFF stashing - test_cfg[("utils", "kde")]["stash_hists"] = False - # turn on bootstrapping - test_cfg[("utils", "kde")]["bootstrap"] = True - # return the errors - test_cfg["pipeline"]["output_key"] = ("weights", "errors") - assert_correct_scaling(test_cfg) - - # First KDE with stashed hists and bootstrap, then aeff - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - # turn on stashing - test_cfg[("utils", "kde")]["stash_hists"] = True - # turn on bootstrapping - test_cfg[("utils", "kde")]["bootstrap"] = True - # return the errors - test_cfg["pipeline"]["output_key"] = ("weights", "errors") - # need to change mode to binned - test_cfg[("aeff", "weight")]["calc_mode"] = TEST_BINNING - test_cfg[("aeff", "weight")]["apply_mode"] = TEST_BINNING - assert_correct_scaling(test_cfg) - - ## KDE with errors calculated using set_variance stage - - # first aeff, then KDE and set_variance - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - test_cfg[("utils", "set_variance")] = deepcopy(TEST_CONFIGS.set_variance_cfg) - # turn on stashing - test_cfg[("utils", "kde")]["stash_hists"] = False - # turn OFF bootstrapping - test_cfg[("utils", "kde")]["bootstrap"] = False - # return the errors - test_cfg["pipeline"]["output_key"] = ("weights", "errors") - # The set_variance stage only calculates errors the first time that the pipeline - # is evaluated, these errors are stored and re-instated on any sub-sequent - # evaluations. We expect therefore that only the nominal values scale. - assert_correct_scaling(test_cfg, fixed_errors=True) - - # first KDE and set_variance, then aeff - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - # It is still important that the `set_variance` stage is *last*. - test_cfg[("utils", "set_variance")] = deepcopy(TEST_CONFIGS.set_variance_cfg) - # turn on stashing - test_cfg[("utils", "kde")]["stash_hists"] = True - # turn OFF bootstrapping - test_cfg[("utils", "kde")]["bootstrap"] = False - # return the errors - test_cfg["pipeline"]["output_key"] = ("weights", "errors") - # need to change mode to binned - test_cfg[("aeff", "weight")]["calc_mode"] = TEST_BINNING - test_cfg[("aeff", "weight")]["apply_mode"] = TEST_BINNING - # We ensure that the behavior is the same as it has been when we were not stashing - # the histograms and used set_variance. - assert_correct_scaling(test_cfg, fixed_errors=True) - - # Using the wrong order (not putting set_variance last) - test_cfg = deepcopy(TEST_CONFIGS.pipe_cfg) - test_cfg[("data", "toy_event_generator")] = deepcopy( - TEST_CONFIGS.event_generator_cfg - ) - test_cfg[("utils", "kde")] = deepcopy(TEST_CONFIGS.kde_cfg) - # If set_variance is not the last stage, this breaks. The reason is a slightly - # silly design of set_variance. It should have been constructed such that the - # total normalization is always divided out, but it wasn't. The way it is - # constructed now, it is basically tuned by the scaling factor to work for the - # given livetime and breaks immediately when that changes. - test_cfg[("utils", "set_variance")] = deepcopy(TEST_CONFIGS.set_variance_cfg) - test_cfg[("aeff", "weight")] = deepcopy(TEST_CONFIGS.aeff_cfg) - # turn on stashing - test_cfg[("utils", "kde")]["stash_hists"] = True - # turn OFF bootstrapping - test_cfg[("utils", "kde")]["bootstrap"] = False - # return the errors - test_cfg["pipeline"]["output_key"] = ("weights", "errors") - # need to change mode to binned - test_cfg[("aeff", "weight")]["calc_mode"] = TEST_BINNING - test_cfg[("aeff", "weight")]["apply_mode"] = TEST_BINNING - # With the wrong order, this will fail. - # FIXME: If someone changes the behavior of set_variance in the future to be - # more robust, they are welcome to change this unit test. - with pytest.raises(AssertionError): - assert_correct_scaling(test_cfg, fixed_errors=True) - - logging.info("<< PASS : kde_stash >>") - - -def parse_args(description=__doc__): - """Parse command line arguments""" - parser = ArgumentParser(description=description) - parser.add_argument( - "-v", action="count", default=Levels.WARN, help="set verbosity level" - ) - args = parser.parse_args() - return args - - -def main(): - """Script interface to test_kde_bootstrapping""" - - args = parse_args() - kwargs = vars(args) - kwargs["verbosity"] = kwargs.pop("v") - - test_kde_bootstrapping(**kwargs) - test_kde_stash(**kwargs) - - -if __name__ == "__main__": - main() diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 000000000..d36723e6a --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,789 @@ + + + + + + Python Module Index — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ p +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ p
+ pisa +
    + pisa.analysis +
    + pisa.analysis.analysis +
    + pisa.core +
    + pisa.core.bin_indexing +
    + pisa.core.binning +
    + pisa.core.container +
    + pisa.core.detectors +
    + pisa.core.distribution_maker +
    + pisa.core.events +
    + pisa.core.events_pi +
    + pisa.core.map +
    + pisa.core.param +
    + pisa.core.pipeline +
    + pisa.core.prior +
    + pisa.core.stage +
    + pisa.core.translation +
    + pisa.scripts +
    + pisa.scripts.add_flux_to_events_file +
    + pisa.scripts.compare +
    + pisa.scripts.convert_config_format +
    + pisa.scripts.fit_hypersurfaces +
    + pisa.scripts.make_events_file +
    + pisa.scripts.make_nufit_theta23_spline_priors +
    + pisa.scripts.test_flux_weights +
    + pisa.stages +
    + pisa.stages.absorption +
    + pisa.stages.absorption.earth_absorption +
    + pisa.stages.aeff +
    + pisa.stages.aeff.aeff +
    + pisa.stages.aeff.weight +
    + pisa.stages.aeff.weight_hnl +
    + pisa.stages.background +
    + pisa.stages.background.atm_muons +
    + pisa.stages.data +
    + pisa.stages.data.csv_data_hist +
    + pisa.stages.data.csv_icc_hist +
    + pisa.stages.data.csv_loader +
    + pisa.stages.data.freedom_hdf5_loader +
    + pisa.stages.data.grid +
    + pisa.stages.data.meows_loader +
    + pisa.stages.data.simple_data_loader +
    + pisa.stages.data.simple_signal +
    + pisa.stages.data.sqlite_loader +
    + pisa.stages.data.toy_event_generator +
    + pisa.stages.discr_sys +
    + pisa.stages.discr_sys.hypersurfaces +
    + pisa.stages.discr_sys.ultrasurfaces +
    + pisa.stages.flux +
    + pisa.stages.flux.astrophysical +
    + pisa.stages.flux.barr_simple +
    + pisa.stages.flux.daemon_flux +
    + pisa.stages.flux.hillasg +
    + pisa.stages.flux.honda_ip +
    + pisa.stages.flux.mceq_barr +
    + pisa.stages.flux.mceq_barr_red +
    + pisa.stages.likelihood +
    + pisa.stages.likelihood.generalized_llh_params +
    + pisa.stages.osc +
    + pisa.stages.osc.decay_params +
    + pisa.stages.osc.decoherence +
    + pisa.stages.osc.globes +
    + pisa.stages.osc.layers +
    + pisa.stages.osc.lri_params +
    + pisa.stages.osc.nsi_params +
    + pisa.stages.osc.osc_params +
    + pisa.stages.osc.prob3 +
    + pisa.stages.osc.prob3numba +
    + pisa.stages.osc.prob3numba.numba_osc_hostfuncs +
    + pisa.stages.osc.prob3numba.numba_osc_kernels +
    + pisa.stages.osc.prob3numba.numba_osc_tests +
    + pisa.stages.osc.prob3numba.test_numba +
    + pisa.stages.osc.scaling_params +
    + pisa.stages.osc.two_nu_osc +
    + pisa.stages.pid +
    + pisa.stages.pid.shift_scale_pid +
    + pisa.stages.reco +
    + pisa.stages.reco.resolutions +
    + pisa.stages.reco.simple_param +
    + pisa.stages.utils +
    + pisa.stages.utils.add_indices +
    + pisa.stages.utils.adhoc_sys +
    + pisa.stages.utils.bootstrap +
    + pisa.stages.utils.fix_error +
    + pisa.stages.utils.hist +
    + pisa.stages.utils.kde +
    + pisa.stages.utils.kfold +
    + pisa.stages.utils.resample +
    + pisa.stages.utils.set_variance +
    + pisa.stages.xsec +
    + pisa.stages.xsec.dis_sys +
    + pisa.stages.xsec.genie_sys +
    + pisa.stages.xsec.nutau_xsec +
    + pisa.utils +
    + pisa.utils.barlow +
    + pisa.utils.barr_parameterization +
    + pisa.utils.callable +
    + pisa.utils.comparisons +
    + pisa.utils.config_parser +
    + pisa.utils.cross_sections +
    + pisa.utils.data_proc_params +
    + pisa.utils.fileio +
    + pisa.utils.fisher_matrix +
    + pisa.utils.flavInt +
    + pisa.utils.flux_weights +
    + pisa.utils.format +
    + pisa.utils.gaussians +
    + pisa.utils.hash +
    + pisa.utils.hdf +
    + pisa.utils.hdfchain +
    + pisa.utils.hypersurface +
    + pisa.utils.hypersurface.hyper_interpolator +
    + pisa.utils.hypersurface.hypersurface +
    + pisa.utils.hypersurface.hypersurface_plotting +
    + pisa.utils.jsons +
    + pisa.utils.kde_hist +
    + pisa.utils.likelihood_functions +
    + pisa.utils.llh_defs +
    + pisa.utils.llh_server +
    + pisa.utils.log +
    + pisa.utils.matrix +
    + pisa.utils.mcSimRunSettings +
    + pisa.utils.numba_tools +
    + pisa.utils.plotter +
    + pisa.utils.profiler +
    + pisa.utils.pull_method +
    + pisa.utils.random_numbers +
    + pisa.utils.resources +
    + pisa.utils.spline +
    + pisa.utils.spline_smooth +
    + pisa.utils.stats +
    + pisa.utils.tests +
    + pisa.utils.vbwkde +
    + pisa.utils.vectorizer +
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/pylintrc b/pylintrc deleted file mode 100644 index a63f49701..000000000 --- a/pylintrc +++ /dev/null @@ -1,382 +0,0 @@ -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Pickle collected data for later comparisons. -persistent=no - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Use multiple processes to speed up Pylint. -jobs=4 - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=yes - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code -extension-pkg-whitelist= - -# Allow optimization of some AST trees. This will activate a peephole AST -# optimizer, which will apply various small optimizations. For instance, it can -# be used to obtain the result of joining multiple strings with the addition -# operator. Joining a lot of strings can lead to a maximum recursion error in -# Pylint and this flag can prevent that. It has one side effect, the resulting -# AST will be different than the one from reality. -optimize-ast=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED -confidence= - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time. See also the "--disable" option for examples. -enable=import-star-module-level,old-octal-literal,oct-method,print-statement,unpacking-in-except,parameter-unpacking,backtick,old-raise-syntax,old-ne-operator,long-suffix,dict-view-method,dict-iter-method,metaclass-assignment,next-method-called,raising-string,indexing-exception,raw_input-builtin,long-builtin,file-builtin,execfile-builtin,coerce-builtin,cmp-builtin,buffer-builtin,basestring-builtin,apply-builtin,filter-builtin-not-iterating,using-cmp-argument,useless-suppression,range-builtin-not-iterating,suppressed-message,no-absolute-import,old-division,cmp-method,reload-builtin,zip-builtin-not-iterating,intern-builtin,unichr-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,input-builtin,round-builtin,hex-method,nonzero-method,map-builtin-not-iterating - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -#disable=all -#import-star-module-level,old-octal-literal,oct-method,print-statement,unpacking-in-except,parameter-unpacking,backtick,old-raise-syntax,old-ne-operator,long-suffix,dict-view-method,dict-iter-method,metaclass-assignment,next-method-called,raising-string,indexing-exception,raw_input-builtin,long-builtin,file-builtin,execfile-builtin,coerce-builtin,cmp-builtin,buffer-builtin,basestring-builtin,apply-builtin,filter-builtin-not-iterating,using-cmp-argument,useless-suppression,range-builtin-not-iterating,suppressed-message,no-absolute-import,old-division,cmp-method,reload-builtin,zip-builtin-not-iterating,intern-builtin,unichr-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,input-builtin,round-builtin,hex-method,nonzero-method,map-builtin-not-iterating -disable=basestring-builtin,file-builtin,reduce-builtin,len-as-condition,C0330 -# Note that C0330 is ignored due to hanging indent from Black being considered invalid: https://github.com/ambv/black/issues/48 - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html. You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=colorized - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details -#msg-template= - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=88 - -# Regexp for a line that is allowed to be longer than the limit. -#ignore-long-lines=^\s*(# )??$ -ignore-long-lines=?$ - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma,dict-separator - -# Maximum number of lines in a module -max-module-lines=2500 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format=LF - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=no - -# Ignore imports when computing similarities. -ignore-imports=no - - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules=numpy,scipy,scipy.stats,matplotlib,matplotlib.cm,uncertainties.unumpy - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). This supports can work -# with qualified names. -ignored-classes=pisa.core.param.ParamSet,pisa.core.param.ParamSelector - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the name of dummy variables (i.e. expectedly -# not used). -dummy-variables-rgx=_$|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_,_cb - - -[SPELLING] - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[BASIC] - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,input - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Include a hint for the correct naming format with invalid-name -include-naming-hint=yes - -# Regular expression matching correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}|test_[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for function names -function-name-hint=[a-z_][a-z0-9_]{2,30}|test_[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct variable names -variable-rgx=([a-z_][a-z0-9_]{2,30})|[a-zWXYZ]|ax$ - -# Naming hint for variable names -variable-name-hint=([a-z_][a-z0-9_]{2,30})|[a-zWXYZ]|ax$ - -# Regular expression matching correct constant names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Naming hint for constant names -const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression matching correct attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for attribute names -attr-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct argument names -argument-rgx=([a-z_][a-z0-9_]{0,30})$ - -# Naming hint for argument names -argument-name-hint=([a-z_][a-z0-9_]{0,30})$ - -# Regular expression matching correct class attribute names -class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Naming hint for class attribute names -class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Regular expression matching correct inline iteration names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Naming hint for inline iteration names -inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ - -# Regular expression matching correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Naming hint for class names -class-name-hint=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression matching correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Naming hint for module names -module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression matching correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for method names -method-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - - -[ELIF] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - - -[LOGGING] - -# Logging modules to check that the string format arguments are in logging -# function parameter format -logging-modules=logging - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO,NOTE - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=20 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.* - -# Maximum number of locals for function / method body -max-locals=50 - -# Maximum number of return / yield for function / method body -max-returns=10 - -# Maximum number of branch for function / method body -max-branches=50 - -# Maximum number of statements in function / method body -max-statements=150 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=20 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=1 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=50 - -# Maximum number of boolean expressions in a if statement -max-bool-expr=5 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions= diff --git a/readmes/aeff.html b/readmes/aeff.html new file mode 100644 index 000000000..5b9c55135 --- /dev/null +++ b/readmes/aeff.html @@ -0,0 +1,109 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Effective Area

+

The purpose of this stage is the conversion of the incoming neutrino flux at the detector into an event count. This includes the interaction of the neutrinos, as well as the triggering and event selection criteria (filters), so that the resulting flux is at _analysis level_.

+

The total event __counts__ in each bin is simply calculated as the product of

+

![Events](images/events.png)

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/core.html b/readmes/core.html new file mode 100644 index 000000000..af05187e9 --- /dev/null +++ b/readmes/core.html @@ -0,0 +1,112 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# pisa.core

+

Module containing all core PISA objects

+

## Summary of Core PISA Objects

+

This is a summary of the hierarchy of the objects instantiated by the pisa.core +classes. Indentation indicates that the object lives in the class above.

+

At the top level is Analysis, which is where the actual ‘fitting’ or ‘scanning’ etc +happens.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/cross_sections.html b/readmes/cross_sections.html new file mode 100644 index 000000000..f603a70dc --- /dev/null +++ b/readmes/cross_sections.html @@ -0,0 +1,156 @@ + + + + + + + } — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Cross Sections

+

Cross sections used to generate Monte Carlo simulations are stored in $PISA/pisa.utils/cross_sections/cross_sections.json. New cross sections can be added to this file and existing cross sections can be loaded, plotted, and worked with via the class $PISA/utils/crossSections.py:CrossSections.

+

## cross_sections.json format +```python +{

+
+
+
“<cross section version>”: {

“energy”: [e0, e1, …, eN], +“nue”: {

+
+

“cc”: [xs(e0), xs(e1), …, xs(eN)], +“nc”: […]

+
+

}, +“nue_bar”: { … }, +“numu”: { … }, +“numu_bar”: { … }, +“nutau”: { … }, +“nutau_bar”: { … },

+
+
+

}, +“<cross section version>”: {

+
+

+
+
+
+

}

+

## CrossSections class +Subclasses flavInt.FlavIntData but adds the energies at which cross sections are defined.

+

## Examples of working with cross sections +```python +import pisa.utils.crossSections as crossSections

+

# Load GENIE 2.6.4 cross sections from the default file in PISA +xs = crossSections.CrossSections(ver=’genie_2.6.4’)

+

# Plot (cross section/energy) as a function of energy to verify they are what +# you expect +xs.plot()

+

# Equivalent methods for getting the energy samples; input is flexible +energy_vals = xs.get(‘e’) +energy_vals = xs.get(‘E’) +energy_vals = xs.get(‘energy’)

+

# Retrieve values for cross sections at the above-returned energies… +xs_vals_nuecc = xs.get(‘nuecc’) +xs_vals_nuecc = xs.get(‘nue cc’) +xs_vals_nuecc = xs.get(‘nuecc’)

+

# Retrieve both CC and NC cross sections as a dictionary +xs_vals_nue = xs.get(‘nue’) +```

+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/data.html b/readmes/data.html new file mode 100644 index 000000000..aafcdf328 --- /dev/null +++ b/readmes/data.html @@ -0,0 +1,123 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: data

+

This folder contains various stages designed to either load existing data, or create fake data events via some Toy Mont Carlo generators

+

## Services

+

Several services are available, though only simple_data_loader is used an regularly maintained in the context of oscillation analyses:

+

### simple_data_loader

+

This is the main service used by all oscNext oscillation analyses. Loads pisa-compatible hdf5 files containing harvested variables from the event selection i3 files.

+

### toy_event_generator

+

This service creates a set of toy MC neutrino events, based on an arbitrary choice of flux. This fake data is binned using the same convention as the normal oscillation analysis (ie, events are binned in energy, coszen and PID)

+

### simple

+

This service creates a simple, 1D dataset consisting of a gaussian signal on top of a uniform background. Useful to make simple checks on minimization and likelihood implementations. super_simple_pipeline.cfg provides an example pipeline that ca be used to run this service

+

### csv_data_hist

+

Loading data from iceCube datareleases

+

### csv_icc_hist

+

Loading muons from iceCube datareleases

+

### csv_loader

+

Loading MC from iceCube datareleases

+

### grid

+

Description missing

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/devel_guide.html b/readmes/devel_guide.html new file mode 100644 index 000000000..776d1456c --- /dev/null +++ b/readmes/devel_guide.html @@ -0,0 +1,110 @@ + + + + + + + Developer’s Guide — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Developer’s Guide

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/discr_sys.html b/readmes/discr_sys.html new file mode 100644 index 000000000..1ae84fe31 --- /dev/null +++ b/readmes/discr_sys.html @@ -0,0 +1,157 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Discrete Systematics

+

These stages apply parameterized systematics to the templates.

+

## Services

+

### Hypersurfaces

+

#### fits

+

This service applies the results obtained from fits to discrete samples.

+

The fitting parameters are at the moment extracted by an external +script, that saves them in a json file, see below.

+

Any parameterized systematic needs to be added to the [stage:sys] section of the pipeline config. +There the associated nuisance parameters (can be N different ones), e.g. hole_ice are specified together with a parameter hole_ice_file pointing to the .json file with the fit info.

+

#### generating the fit values

+

To generate the fit file, the script $PISA/pisa/scripts/fit_discrerte_sys.py (command-line alias pisa-fit_discrete_sys) can be executed together with a special configuration file.

+

This config file specifies the discrete datasets for the fits, here an example:

+

`ini +[dom_eff] +nominal = 1.0 +degree = 1 +force_through_nominal = True +smooth = gauss +# discrete sets for param values +runs = [1.0, 0.88, 0.94, 0.97, 1.03, 1.06, 1.12] +`

+

That means the systematic dom_eff is parametrized from 7 discrete datasets, with the nominal point being at dom_eff=1.0, parametrized with a linear fit that is forced through the nominal point, and gaussian smoothing is applied.

+

All 7 datasets must be specified in a separate section.

+

At the moment different fits are generated for cscd and trck maps only (they are added together for the fit). +Systematics listed under sys_list are considered in the fit. +This will generate N different .json for N systematics. +All the info from the fit, including the fit function itself is stored in that file. +Plotting is also available via `-p/–plot’ and is HIGHLY recomended to inspect the fit results.

+

### Ultrasurfaces

+

This is the novel treatment of detector systematics via likelihood-free inference. It assigns gradients to _every event_ to allow event-by-event re-weighting as a function of detector uncertainties in a way that is fully decoupled from flux and oscillation effects.

+

Once ready, the results are stored in a .feather file containing all events of the nominal MC set and their associated gradients.

+

### Preparation

+

The scripts producing the gradients are located in $FRIDGE_DIR/analysis/oscnext_ultrasurfaces. To produce the gradient feather file, we first need to convert PISA HDF5 files to .feather using the pisa_to_feather.py script. We need to pass the input file, the output file, and a flag setting the sample (variable names) to be used (either –verification-sample, –flercnn-sample, –flercnn-hnl-sample, –upgrade-sample, or no additional flag for the Retro sample).

+

` +python pisa_to_feather.py -i /path/to/pisa_hdf5/oscnext_genie_0151.hdf5 -o /path/to/pisa_hdf5/oscnext_genie_0151.feather {"--verification-sample", "--flercnn-sample", ""} +` +After converting all files and setting the appropriate paths in $FRIDGE_DIR/analysis/oscnext_ultrasurfaces/datasets/data_loading.py, we produce gradients in two steps.

+

First: Calculate event-wise probabilities with (assuming we cd’d into $FRIDGE_DIR/analysis/oscnext_ultrasurfaces/knn)

+

(Note here that this needs to be run with an earlier version of sklearn, due to deprecation of some used functions, e.g. use: scikit-learn = 1.1.2)

+

` +python calculate_knn_probs.py --data-sample {"verification", "flercnn", "flercnn_hnl", "retro"} --root-dir /path/to/pisa_feather/ --outfile /path/to/ultrasurface_fits/genie_all_bulkice_pm10pc_knn_200pc.feather --neighbors-per-class 200 --datasets 0000 0001 0002 0003 0004 0100 0101 0102 0103 0104 0105 0106 0107 0109 0151 0500 0501 0502 0503 0504 0505 0506 0507 --jobs 24 +`

+

Second: Calculate the gradients that best fit the probabilities with:

+

` +python calculate_grads.py --input /path/to/ultrasurface_fits/genie_all_bulkice_pm10pc_knn_200pc.feather --output /path/to/ultrasurface_grads_vs/genie_all_bulkice_pm10pc_knn_200pc_poly2.feather --include-systematics dom_eff hole_ice_p0 hole_ice_p1 bulk_ice_abs bulk_ice_scatter --poly-features 2 --jobs 24 +`

+

### Usage

+

The gradients are stored in a .feather file containing all events of the nominal MC set and their associated gradients. The Ultrasurface PISA stage needs to be pointed to the location of this file. In the unblinding version of this analysis, the file is

+

` +/path/to/ultrasurface_grads_vs/genie_all_bulkice_pm10pc_knn_200pc_poly2.feather +`

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/flavor_interaction_types.html b/readmes/flavor_interaction_types.html new file mode 100644 index 000000000..3b0b960d1 --- /dev/null +++ b/readmes/flavor_interaction_types.html @@ -0,0 +1,233 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Flavor and interaction types

+

*NuFlav*, *IntType*, *NuFlavInt*, and *NuFlavIntGroup* are objects designed to easily work with neutrino flavors, interaction types, and combinations thereof. Source code: pisa/utils/flavInt.py

+

*FlavIntData* and *CombinedFlavIntData* are container objects for data particular to neutrino flavors+interaction types. The former stores one datum for each flavor/interaction type combination, whereas the latter allows one to store a single data set for each grouping of flavor/interaction types. Source code: pisa/utils/flavInt.py

+

*Events* subclasses FlavIntData but also contains standard metatadata pertinent to events. Source code: pisa/core/events.py

+

## Examples using flavor/interaction type objects

+

```python +import numpy as np +from pisa.utils import flavInt

+

# Create a flavor +numu = flavInt.NuFlav(14) # from code +numu = flavInt.NuFlav(‘nu_mu’) # from str +numubar = -numu # flip parity

+

# Interaction type +cc = flavInt.IntType(‘Cc’) # permissive +nc = flavInt.IntType(2) # from code

+

# A NuflavInt combines flavor and interaction type +numubarcc = flavInt.NuFlavInt(‘numu_bar_cc’) +numucc = flavInt.NuFlavInt(numu, cc) +numubarcc = -numucc

+

numubarcc.flav # -> ‘numubar’ +numubarcc.int_type # -> ‘cc’ +numubar.particle # -> False +numubarcc.cc # -> True

+

# TeX string (nice for plots!) +numubarcc.tex # -> r’{{barnu_mu} , {rm CC}}’

+

# NuFlavIntGroup +nkg = flavInt.NuFlavIntGroup(‘numucc,numubarcc’) +nkg = numucc + numubarcc # works! +nkg.flavints # -> (numu_cc, numubar_cc) +nkg.particles # -> (numu_cc,) +nkg -= numucc # remove a flavInt +nkg.flavints # -> (numubar_cc,)

+

# No intType spec=BOTH intTypes +nkg = flavInt.NuFlavIntGroup(‘numu’) +nkg.flavints # -> (numu_cc, numu_nc) +nkg.cc_flavints # -> (numu_cc,)

+

# Loop over all particle CC flavInts +for fi in flavInt.NuFlavIntGroup(‘nuallcc’):

+
+

print(fi)

+
+

# String, TeX +nkg = flavInt.NuFlavIntGroup(‘nuallcc’) +print(nkg) # -> ‘nuall_cc’ +nkg.tex # -> r’{nu_{rm all}} , {rm CC}’

+

```

+

## Examples of using FlavIntData container object

+

```python +import numpy as np +from pisa.utils.flavInt import *

+

# Old way to instantiate an empty flav/int-type nested dict +import itertools +oldfidat = {} +flavs = [‘nue’, ‘numu’, ‘nutau’] +int_types = [‘cc’, ‘nc’] +for baseflav, int_type in itertools.product(flavs, int_types):

+
+
+
for mID in [‘’, ‘_bar’]:

flav = baseflav + mID +if not flav in oldfidat:

+
+

oldfidat[flav] = {}

+
+

oldfidat[flav][int_type] = None

+
+
+
+

# New way to instantiate, using a FlavIntData object +fidat = flavInt.FlavIntData()

+

# Old way to iterate over the old nested dicts +for baseflav, int_type in itertools.product(flavs, int_types):

+
+
+
for mID in [‘’, ‘_bar’]:

flav = baseflav + mID +oldfidat[flav][int_type] = {‘map’: np.arange(0,100)} +m = oldfidat[flav][int_type][‘map’]

+
+
+
+

# New way to iterate through a FlavIntData object +for flavint in ALL_NUFLAVINTS:

+
+

# Store data to flavint node +fidat[flavint] = {‘map’: np.arange(0,100)}

+

# Retrieve flavint node, then get the ‘map’ data +m1 = fidat[flavint][‘map’]

+

# Retrieve the ‘map’ data in one call (syntax works for all +# nested dicts, where each subsequent arg is interpreted +# as a key to a further-nested dict) +m2 = fidat[flavint][‘map’] +assert np.alltrue(m1 == m2)

+
+

# But if you really like nested dictionaries, you can still access a +# FlavIntData object as if it where a nested dict of +# [flavor][interaction type]: +fidat[‘nue_bar’][‘cc’][‘map’]

+

# But you can access the element directly, and you can use the full string, and +# you don’t have to use lower-case, ‘_’ infix between ‘numu’ and ‘bar’, or know +# the exact structure of data container being used! +fidat[’ numu bar CC’][‘map’]

+

# Get the entire branch starting at ‘numu’ +# (i.e., includes both interaction types) +fidat[‘numu’] # -> {‘cc’: …, ‘nc’: …}

+

# Save data to a bzip2-compressed JSON file +fidat.save(‘data.json.bz2’)

+

# Save it to a HDF5 file (recognizes ‘h5’, ‘hdf’, and ‘hdf5’ extensions) +fidat.save(‘data.hdf5’)

+

# Load, instantiate new object +fidat2 = flavInt.FlavIntData(‘data.json’)

+

# Comparisons: intelligently recurses through the +# structure and any nested sub-structures +# (lists, dicts) when “==” is used +print(fidat == fidat2) # -> True

+

# There is a function for doing this in pisa.utils.comparisons that works +# with (almost) any nested object, including FlavIntData objects:: +from pisa.utils.comparisons import recursiveEquality +print(recursiveEquality(fidat, fidat2)) # -> True +```

+

## Examples of using Events container object

+

```python +from pisa.core.events import Events

+

ev = Events(‘events/events__vlvnt__toy_1_to_80GeV_spidx1.0_cz-1_to_1_1e2evts_set0__unjoined__with_fluxes_honda-2015-spl-solmin-aa.hdf5’)

+

print(ev.metadata) +` +Result: +```python +OrderedDict([('detector', ''), ('geom', ''), ('runs', []), ('proc_ver', ''), ('cuts', []), ('flavints_joined', [])]) +`

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/flux.html b/readmes/flux.html new file mode 100644 index 000000000..7e4a65ba7 --- /dev/null +++ b/readmes/flux.html @@ -0,0 +1,129 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Flux

+

The purpose of this stage is to get the expected flux produced in the atmosphere for different particles at different energies and angles. +It is therefore possible to reweight a dataset using the effective area to investigate uncertainties from using different flux models. +The neutrino files come from several different measurements made at different positions on the earth and currently can only use azimuth-averaged data. +The ability to load azimuth-dependent data has been implemented, but it is not immediately obvious how one should treat these at the energy range relevant for IceCube studies.

+

## Services

+

Only one service is currently supported in PISA for dealing with atmospheric neutrino flux tables: honda.

+

### honda

+

This service implements the atmospheric neutrino tables produced by the Honda group. +Details of the supported files can be found in the Notes section of the docstrings in the file. +Both 2D and 3D files can currently be loaded, but interpolation is only supported with the 2D files. +Currently there are two interpolation choices:

+
    +
  • ‘bisplrep’ - A simple b-spline representation. This is quick.

  • +
  • ‘integral-preserving’ - A slower, but more accurate choice.

  • +
+

The details of these interpolation methods can be found in the Notes section of the docstrings in the file. +For some more information on the second of these choices, and why it is a more accurate choice than the first, please see the following link:

+

[NuFlux on the IceCube wiki](https://wiki.icecube.wisc.edu/index.php/NuFlux)

+

Since this is a link on the IceCube wiki, you will need the access permissions for this page.

+

### daemonflux

+

Implementation of DAEMONFLUX based on [https://arxiv.org/abs/2303.00022]. +For the example use see jupyter notebook pisa_examples/test_daemonflux_stage.ipynb, as well as an example config file at pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg.

+

Important: [daemonflux](https://github.com/mceq-project/daemonflux) pyhon package is required dependency for this stage.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/general_conventions.html b/readmes/general_conventions.html new file mode 100644 index 000000000..022548a42 --- /dev/null +++ b/readmes/general_conventions.html @@ -0,0 +1,201 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Coding conventions +* General Python conventions should be followed

+
+
    +
  • [PEP8](https://www.python.org/dev/peps/pep-0008/)

  • +
  • Run [pylint](https://www.pylint.org/) to see how egregious your code is (and make it less so) before submitting a pull request (no hard requirement on making it pass 100%, but at least you’ll learn how to make it cleaner in the future). Also, static analysis of code (i.e., running pylint) can find bugs you miss in other ways. (Note that there are some nice GUI interfaces for pylint, including e.g. [Spyder IDE](https://github.com/spyder-ide/spyder).)

  • +
  • Call functions and methods using full keyword names. E.g.:<br>`my_function(x=1, y=2, z=’blahblah’)`

  • +
  • Avoid positional arguments wherever possible and reasonable (both for Python methods/functions and for command-line interfaces)

  • +
  • Always give the user double-dash (–three-word-arg) command-line keyword options. Separate words in the option with single-dashes, not underscores. Optionally provide single-dash/single-letter options (-a) in addition to the double-sash keyword options.

  • +
  • To use matplotlib on a headless server, you can specify at the command line the environment variable MPLBACKEND=agg or =pdf, etc.

  • +
+
+

# Naming conventions +* Stage/service naming: see [creating a service](creating_a_service). (Note that the all-lower-case class naming scheme for services is one of the few exceptions we make to the general Python conventions above.) +* Use the following syntax to refer to neutrino signatures *flavour*_*interaction*_*pid* where:

+
+
    +
  • flavour is one of nue, nuebar, numu, numubar, nutau, nutaubar

  • +
  • interaction is one of cc, nc

  • +
  • pid is one of trck, cscd

  • +
+

Omit suffixed fields as necessary to refer to a more general signature for the same flavour, e.g. nue refers to all interactions/pids involving electron neutrinos. To refer to multiple signatures separate each signature with a + symbol, e.g. nue_cc+nuebar_cc

+
+

# Documentation conventions

+

Documentation comes in two forms: *docstrings* and *standalone files* (either markdown .md files or reStricturedText .rst files). Docstrings are the most important for physics and framework developers to consider, and can (and should) be quite far-ranging in their scope. Standalone files are reserved for guides (install guide, developer’s guide, user’s guide, quick-start, etc.) and one README.md file within each directory to document the directory’s raison d’être, or what is common to all of the things contained in the directory.

+ +

Refer to those links for how to format docstrings / Markdown to produce a desired result.

+

## Docstrings

+

Docstrings can document nearly everything within a Python file. The various types of docstrings are: +* module: beneath the authorship, at the top of the .py file

+
+
    +
  • Why did you create this file (module)? What purpose does it serve? Are there issues that the user should be aware of? Good and bad situations for using the class(es) and function(s) contained? Anything that doesn’t fit into the more usage-oriented docstrings below should go here.

  • +
+
+
    +
  • function: beneath the function declaration line +* What the function does, args to the function, notes

  • +
  • class: beneath the class declaration line +* Purpose of the class, instantiation args for the class, notes to go into more detail, references, …

  • +
  • method: beneath the method declaration line +* Purpose of the method, args to the method, notes

  • +
  • attribute: beneath the definition of a variable (in any scope in the file) +* What purpose it serves. Note that if you add an attribute docstring, the attribute is included in the documentation, while if you do not add such a docstring, the attribute does not appear in the documentation.

  • +
+

Examples of the above can be seen and are discussed further in the [tutorial for creating a service](creating_a_service).

+

Docstrings should be formatted according to the NumPy/SciPy convention. +* [PEP257: General Python docstring conventions](https://www.python.org/dev/peps/pep-0257/) +* [NumPy/SciPy documentation style guide](https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt) +* [Example NumPy docstrings in code](http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_numpy.html) +* [Recommonmark translates markdown into reST](http://recommonmark.readthedocs.io/en/latest/auto_structify.html) +* Since all documentation will be run through Sphinx using the Napoleon and Recommonmark extensions, the final arbiter on whether a docstring is formatted correctly is the output generated using these. Good information for making nice docstrings can be found in both [Napoleon](http://sphinxcontrib-napoleon.readthedocs.io/)

+

## Standalone files

+

### Guides

+

These are high-level documents addressing one (or multiple) of the three audiences: users, physics developers, and framework developers.

+
    +
  • Install guide

  • +
  • Quick-start guide

  • +
  • User guide

  • +
  • Physics developer guide

  • +
  • Framework developer guide

  • +
+

### README.md files

+

There is (or should be) one README.md file per directory in PISA. This should state the raison d’être of the directory, or what is common to all of the “things” contained in the directory. Those that live in stage directories (e.g. $PISA/pisa/stages/pid/README.md) are more critical than the others, so are discussed further below.

+

#### Stage README.md files

+
    +
  • Try to avoid saying anything here that’s already (or should be) said in the docstrings within each individual service. Anything like this is only going to get out of sync with the actual implementations, since it’s repeating what’s already in the docstrings for the individual services. This violates probably the most important [principle of software development](https://en.wikipedia.org/wiki/Don’t_repeat_yourself).

  • +
  • So just make that as high-level as possible. For example, for $PISA/pisa/stages/pid/README.md, guidance would be: +* What is particle ID? I.e., what is the physics it represents, what is the process we generally use to do PID, and what systematics are pertinent to PID? +* What general categories to the contained service(s) fall into? +* What are the major difference between services that would lead a user to pick one vs. another? +* A table of what systematics are implemented by each service would be useful at this level

  • +
+

# Testing +If you add a feature: *add a test that proves it works*. If you find a bug: *add a test that it’s fixed*. Not only does a test ensure that the functionality continues to work / bug continues to be squashed, through future iterations of the code, but it also is another way of communicating the assumptions that went into the code that might not be obvious from the code itself.

+

## Low-level testing: Unit tests +Write simple functions named test_<FUNCNAME> or test_<CLASSNAME> within your modules. These get called automatically from [pytest](http://pytest.org/). Pytest picks up exceptions that occur, so sprinkle assert statements liberally in your test_* functions, and you should test both things you expect to succeed and test things that you expect to fail (wrap the latter in try:/except:/else: blocks, where the assert occurs in the else: clause).

+

We chose [pytest](http://pytest.org/): We’d rather have more unit tests written because they’re dead-easy to write than to use the full-featured (and built-in) framework that comes with Python.

+

Expect pytest to eventually be configured to run with [doctest](https://pytest.org/latest/doctest.html) functionality enabled, so it’s also acceptable to put simple tests in docstrings, Markdown documentation files, or reST documentation files. (Just these won’t be exercised until we get pytest fully configured to do look for these tests.)

+

Finally, until we get pytest configured, the test_* functions are called in the __main__ section of many of the pisa/core modules (e.g., map.py, binning.py, transform.py, param.py). For now, these must be invoked by calling python <filename>.

+

### How to test a service +Look at the pisa.core.pipeline.stage_test() function to implement tests for your service. It can run a stage in isolation (either with maps you supply or with dummy numpy.ones() maps) or will run a pipeline from beginning up until the stage you’re testing. To keep tests synchronized with the code they are testing, it is recommended that configurations be generated within the test code rather than read from an external file. This is not a hard-and-fast rule, but usually results in better long-term outcomes.

+

## High-level testing +Here we will supply whatever basic configuration files and example data is necessary to fully test all high-level functionality. Outputs should be able to be compared against known-outputs, either exactly (for deterministic processes or pseudo-random processes) or as a ratio with a know result (in the case of a “new” physics implementation).

+

There should be both quick tests that just show an analysis can make it through from beginning to end (and produce a known output), as well as more thorough tests that check the correctness of a result.

+

For comparing non-deterministic results, plotting is essential for understanding differences. Difference plots, ratio plots, fractional-difference plots, side-by-side plots, overlays, correlations, …

+

# Physical Quantities

+

## Units

+

All physical quantities with units should have units attached. Parameters with units specified also require that their prior specifications adhere to those same units.

+

This is essential so that, transparently, the user can input units are most comprehensible while computations can be carried out in whatever units have been defined for computation. Furthermore, it is made explicit in the user’s configuration files what units were chosen for input and the code for performing computation makes it explicit what units it uses as well.

+

## Uncertainties

+

Likewise, measured quantities with uncertainties should have these specified as well. Since there is a performance penalty for computing with uncertainties, this is a feature that can be enabled or disabled according to the task the user is working on. Certain parts of PISA (e.g., the convolutional likelihood metric) will only work if errors are propagated through the analysis.

+

## Further documentation +For more information on using units and uncertainties, see the [Units and uncertainties](units_and_uncertainties) page.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/glossary.html b/readmes/glossary.html new file mode 100644 index 000000000..2ddeae818 --- /dev/null +++ b/readmes/glossary.html @@ -0,0 +1,126 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# PISA Terminology

+
    +
  • DistributionMaker: A collection of one or more pipelines; this produces the events distributions we see (in the case of data) or that we expect to see (in the case of Monte Carlo). The output of a DistributionMaker is a sequence of MapSets, one produced per pipeline in the DistributionMaker.

  • +
  • Map: N-dimensional histogram, most often in energy and cosine of the zenith angle (coszen)–but the number of dimensions and the binning in each are completely configurable in PISA). Note that the binning of a map is accessed via map.binning.

  • +
  • MapSet: Container or set of Map, with convenience methods for working with the contained maps.

  • +
  • Pipeline: A single sequence of stages and the services implementing them for processing a single data type. E.g.: +* There might be defined a pipeline for processing neutrinos and a separate pipeline for processing muons. +* For neutrino mass ordering measurements, the set of pipelines to produce “template” distributions might include one neutrino pipeline for normal ordering and one neutrino pipeline for inverted ordering, in addition to a single pipeline for muons.

    +
    +
      +
    • If parameters to produce the “data” distribution used to match templates to differ from the nominal values for the template pipelines, a separate set of the aforementioned pipelines can be defined to produce the “data” distribution.

    • +
    +
    +
  • +
  • Pipeline settings: The collection of all parameters required (and no more) to instantiate all stages (and which service to use for each) in a single pipeline.

  • +
  • Quantity: A number or array with units attached. See (units_and_uncertainties).

  • +
  • Resource: A file with settings, simulated events, parameterizations, metadata, etc. that is used by one of the services, the template maker, the minimizer, …. Example resources are found in $PISA/pisa_examples/resources directory, where a subdirectory exists for each stage (and several directories exist for resources used for other purposes). Set (in your command shell) the environment variable PISA_RESOURCES to your personal PISA resources directory location to access your own resources.

  • +
  • Reweighted Monte Carlo (MC) analysis: Each stage of the analysis simulates the effects of physics and detector systematics by directly modifying the MC events’ characteristics (e.g., their importance weights and reconstructed properties). After applying all such effects, only in the last step are the MC events histogrammed. Contrast with parameterized-MC analysis (defined above), where it is histograms that are modified throughout the analysis to reflect the effects of physics and detector systematics.

  • +
  • Service: A particular implementation of a stage is called a *service*. For example, the effective areas stage (aeff) has services mc and slice_smooth. Each service is a python .py file that lives inside its stage’s directory. E.g., the effective area mc service is at $PISA/pisa/stages/aeff/mc.py.

  • +
  • Stage: Each stage represents a critical part of the process by which we can eventually detect neutrinos. For example, atmospheric neutrinos that pass through the earth will oscillate partially into different flavors prior to reaching the IceCube/PINGU detector. This part of the process is called the oscillations stage. There are currently defined the stages flux (for neutrino flux), osc (neutrino oscillations), aeff (detector effective area), reco (reconstruction resolutions), and pid (particle identification; e.g., tracks vs. cascades). Stages are directories in the $PISA/pisa/stages directory.

  • +
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/install.html b/readmes/install.html new file mode 100644 index 000000000..4c4c6748d --- /dev/null +++ b/readmes/install.html @@ -0,0 +1,568 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

## Installation Guide

+

### Instruction to install PISA on your local machine

+
    +
  1. Install the essential dependencies

    +
      +
    1. Anaconda (https://www.anaconda.com/) +```bash +wget -nc https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh

      +

      bash Anaconda3-2023.07-2-Linux-x86_64.sh +```

      +
    2. +
    3. pip (Python package installer) +`bash +conda install pip +`

    4. +
    5. git +`bash +sudo apt install git +`

    6. +
    +

    Other required libraries (listed below) will be installed automatically during the setup (listed in setup.py).

    +
      +
    • fast-histogram >= 0.10

    • +
    • h5py

    • +
    • iminuit >= 2

    • +
    • line_profiler

    • +
    • llvmlite

    • +
    • matplotlib >= 3.0

    • +
    • nlopt

    • +
    • numba >= 0.53

    • +
    • numpy >=1.17, < 1.23

    • +
    • pandas

    • +
    • pint <=0.19

    • +
    • py-cpuinfo

    • +
    • pyarrow

    • +
    • scikit-learn <= 1.1.2

    • +
    • scipy >= 1.6

    • +
    • simplejson == 3.18.4

    • +
    • sympy

    • +
    • tables

    • +
    • tabulate

    • +
    • tqdm

    • +
    • uncertainties

    • +
    • kiwisolver >= 1.3.1

    • +
    • cycler >= 0.10

    • +
    • packaging >= 20.0

    • +
    • fonttools >= 4.22.0

    • +
    • python-dateutil >= 2.7

    • +
    • pillow >= 8

    • +
    • contourpy >= 1.0.1

    • +
    • pyparsing >= 2.3.1

    • +
    • threadpoolctl >= 2.0.0

    • +
    • joblib >= 1.0.0

    • +
    • numexpr

    • +
    • pytz >= 2020.1

    • +
    • tzdata >= 2022.1

    • +
    • mpmath >= 0.19

    • +
    • blosc2 >= 2.3.0

    • +
    • future

    • +
    • ndindex >= 1.4

    • +
    • msgpack

    • +
    • six >= 1.5

    • +
    +
  2. +
  3. Create conda environment/ virtual environment for the installation of PISA. Assume that the name of the environment is pisa_env you can choose your preferred version of python >= 3.10

  4. +
+

`bash +conda create -n pisa_env python=3.10 +`

+
    +
  1. Activate the newly created environment (You can see the name of your environment in the bash shell after the activation)

  2. +
+

`bash +conda activate pisa_env +`

+
    +
  1. Clone the PISA repository from github (https://github.com/icecube/pisa.git)

  2. +
+

`bash +git clone https://github.com/icecube/pisa.git +`

+
    +
  1. Install PISA with the following command

  2. +
+

`bash +pip install -e pisa +`

+

Arguments:

+
    +
  • `pisa ` directory of source code

  • +
  • -e (editable) Installs from source located at $PISA (Installed directory - pisa) and allows for changes to the source code within to be immediately propagated to your Python installation.

  • +
  • -vvv Be maximally verbose during the install. You’ll see lots of messages, including warnings that are irrelevant, but if your installation fails, it’s easiest to debug if you use -vvv

  • +
  • [develop] Specify optional dependency groups. You can omit any or all of these if your system does not support them or if you do not need them.

  • +
+

### Test your installation by running a simple script:

+
    +
  • Activate your python environment (pisa_env)

    +

    `bash +conda activate pisa_env +`

    +
  • +
  • Start python interpretator in terminal

    +

    `bash +python +`

    +
  • +
  • Import Pipline modelue and matplotlib.pyplot

    +

    `python +from pisa.core import Pipeline +import matplotlib.pyplot as plt +` +` +<< PISA is running in single precision (FP32) mode; numba is running on CPU (single core) >> +`

    +
  • +
  • Load an example pipeline

    +

    `python +template_maker = Pipeline("settings/pipeline/osc_example.cfg") +`

    +
  • +
  • Run the pipeline

    +

    `python +template_maker.run() +`

    +
  • +
  • Get the oscillation probabilities as a map

    +

    `python +outputs = template_maker.data.get_mapset('prob_mu') +`

    +
  • +
  • Plot the oscillogram

    +

    `python +fig, axes = plt.subplots(figsize=(18, 5), ncols=3) +outputs['nue_cc'].plot(ax=axes[0], cmap='RdYlBu_r', vmin=0, vmax=1); +outputs['numu_cc'].plot(ax=axes[1], cmap='RdYlBu_r', vmin=0, vmax=1); +outputs['nutau_cc'].plot(ax=axes[2], cmap='RdYlBu_r', vmin=0, vmax=1); +`

    +
  • +
+

### Instructions to install PISA on Madison working group servers cobalts (current guide from August 2023):

+

Assuming you already are in the directory where you want to store fridge/pisa source files and the python virtualenv and build pisa. You also need access to github through your account.

+

#### Clone into the fridge and pisa (ideally your own fork):

+

``` +git clone git@github.com:icecube/wg-oscillations-fridge.git ./fridge

+

git clone git@github.com:USERNAME/pisa.git ./pisa +```

+

#### Load cvmfs environment:

+

` +unset OS_ARCH; eval `/cvmfs/icecube.opensciencegrid.org/py3-v4.2.1/setup.sh` +`

+

which python should now point to /cvmfs/icecube.opensciencegrid.org/py3-v4.2.1/RHEL_7_x86_64/bin/python

+

Note: It’s not tested whether this works with a cvmfs version newer than py3-v4.2.1.

+

#### Create virtual environment:

+

` +python -m venv ./YOUR_PISA_PY3_VENV +`

+

#### Start the virtual environment and install pisa from source:

+

` +source ./YOUR_PISA_PY3_VENV/bin/activate +`

+

(should now show that you are in the environment)

+

` +pip install -e pisa +`

+

#### Modify your environment by adding lines to ./YOUR_PISA_PY3_VENV/bin/activate

+

Every time you want to use pisa now, you need to activate your virtual environment by running source ./YOUR_PISA_PY3_VENV/bin/activate. In order to set some useful environment variables you might want to add the following lines (or more if needed) to the end of the ./YOUR_PISA_PY3_VENV/bin/activate script:

+

``` +# PISA source +export PISA=”/data/user/USERNAME/PATH_TO_PISA”

+

# set some custom environment variables and load fridge +export PISA_RESOURCES=”/data/user/USERNAME/PATH_TO_FRIDGE/analysis/common” +export PISA_RESOURCES=$PISA_RESOURCES:”/data/user/USERNAME/PATH_TO_FRIDGE/analysis”

+

source “/data/user/USERNAME/PATH_TO_FRIDGE/setup_fridge.sh”

+

# Add this project to the python path +export PYTHONPATH=$FRIDGE_DIR:$PYTHONPATH

+

# Madison +export PISA_RESOURCES=/data/ana/LE:$PISA_RESOURCES +export PISA_RESOURCES=/data/ana/BSM/HNL/:$PISA_RESOURCES

+

export PISA_RESOURCES=$FRIDGE_DIR:$FRIDGE_DIR/analysis:$FRIDGE_DIR/analysis/YOUR_ANALYSIS/settings:$FRIDGE_DIR/analysis/YOUR_ANALYSIS/analysis:$FRIDGE_DIR/analysis/common:$PISA_RESOURCES

+

export PISA_CACHE=~/cache/ +export PISA_FTYPE=fp64 +export HDF5_USE_FILE_LOCKING=’FALSE’ +```

+

#### Install any additional packages that you might want

+

pip install PACKAGE (for example jupyter)

+

### Quickstart (old guide)

+

_Note that terminal commands below are intended for the bash shell. You’ll have to translate if you use a different shell._

+
    +
  1. +
    Obtain a github user ID if you don’t have one already<br>

    https://github.com +* Sign up for Github education pack for many features for free, too<br>

    +
    +
    +
    +
    +
  2. +
+
    +
  1. +
    Fork PISA on github so you have your own copy to work from<br>

    https://github.com/IceCubeOpenSource/pisa#fork-destination-box

    +
    +
    +
  2. +
+
    +
  1. +
    _(optional)_ Set up shared-key ssh access to github so you don’t have to enter passwords<br>

    https://help.github.com/articles/connecting-to-github-with-ssh

    +
    +
    +
  2. +
+
    +
  1. +
    In your terminal, define a directory for PISA sourcecode to live in. For example:<br>

    export PISA=”~/src/pisa” +* Add this line to your ~/.bashrc file so you can refer to the $PISA variable without doing this everytime.

    +
    +
    +
  2. +
+
    +
  1. +
    Create the directory<br>

    mkdir -p $PISA

    +
    +
    +
  2. +
+
    +
  1. +
    Clone the PISA repo to your local computer (at command line)
      +
    • If you set up shared-key auth above<br>

    • +
    +

    git clone git@github.com:<YOUR GITHUB USER ID HERE>/pisa.git $PISA +* Otherwise<br> +git clone https://github.com/<YOUR GITHUB USER ID HERE>/pisa.git $PISA

    +
    +
    +
  2. +
+
    +
  1. +
    Install the *Python 3.7 / 64 bit* Anaconda or Miniconda python distribution for either Mac or Linux (as your user, _not_ as root), if you don’t have it already
    +
    +
    +
  2. +
+

1. Create a new conda environment, ideally with a python version compatible with the python requirements below (cf. conda’s getting started guide). +1. Active your new conda environment. +1. Install PISA including optional packages and development tools (develop), if desired<br>

+
+

pip install -e $PISA[develop] -vvv

+
+

1. Run a quick test: generate templates in the staged mode<br> +$PISA/pisa/core/pipeline.py –pipeline settings/pipeline/example.cfg –outdir /tmp/pipeline_output –intermediate –pdf -v

+

See [github.com/IceCubeOpenSource/pisa/wiki/installation_specific_examples](https://github.com/IceCubeOpenSource/pisa/wiki/installation_specific_examples) for users’ recipes for installing PISA under various circumstances. +Please add notes there and/or add your own recipe if your encounter a unique installation issue. +Also, for instructions on running PISA on Open Science Grid (OSG) nodes, see [github.com/IceCubeOpenSource/pisa/wiki/Running-PISA-on-GRID-nodes-with-access-to-CVMFS](https://github.com/jllanfranchi/pisa/wiki/Running-PISA-on-GRID-nodes-with-access-to-CVMFS)

+

The following sections delve into deeper detail on installing PISA.

+

### Python Distributions

+

Obtaining Python and Python packages, and handling interdependencies in those packages tends to be easiest if you use a Python distribution, such as [Anaconda](https://www.continuum.io/downloads) or [Canopy](https://www.enthought.com/products/canopy). +Although the selection of maintained packages is smaller than if you use the pip command to obtain packages from the Python Package Index (PyPi), you can still use pip with these distributions.

+

The other advantage to these distributions is that they easily install without system administrative privileges (and install in a user directory) and come with the non-Python binary libraries upon which many Python modules rely, making them ideal for setup on e.g. clusters.

+
    +
  • Note: Make sure that your PATH variable points to e.g. <anaconda_install_dr>/bin and not your system Python directory. To check this, type: echo $PATH; to udpate it, add export PATH=<anaconda_install_dir>/bin:$PATH to your .bashrc file.

  • +
  • Python 3.7.x can also be found from the Python website [python.org/downloads](https://www.python.org/downloads/) or pre-packaged for almost any OS.

  • +
+

### Required Dependencies

+

To install PISA, you’ll need to have the following non-python requirements. +Note that these are not installed automatically, and you must install them yourself prior to installing PISA. +Also note that Python, HDF5, and pip support come pre-packaged or as conda-installable packages in the Anaconda Python distribution. +* [python](http://www.python.org) — version 3.x

+
+
    +
  • Anaconda: built in

  • +
+
+
    +
  • [pip](https://pip.pypa.io) version >= 1.8 required +* Anaconda:<br>

    +
    +

    conda install pip

    +
    +
  • +
  • [git](https://git-scm.com) +* In Ubuntu,<br>

    +
    +

    sudo apt install git

    +
    +
  • +
  • [hdf5](http://www.hdfgroup.org/HDF5) — install with –enable-cxx option +* In Ubuntu,<br>

    +
    +

    sudo apt install libhdf5-10

    +
    +
  • +
  • [llvm](http://llvm.org) Compiler needed by Numba. This is automatically installed in Anaconda alongside numba. +* Anaconda<br>

    +
    +

    conda install numba=0.45.1

    +
    +
  • +
+

Required Python modules that are installed automatically when you use the pip command detailed later: +* [decorator](https://pypi.python.org/pypi/decorator) +* [h5py](http://www.h5py.org) +* [iminuit](): Python interface to the MINUIT2 C++ package, used for proper covariance matrices during minimization +* [kde](https://github.com/IceCubeOpenSource/kde)

+
+
    +
  • You can install the kde module manually if it fails to install automatically: +* Including CUDA support:<br>

    +
    +

    pip install git+https://github.com/icecubeopensource/kde.git#egg=kde[cuda]

    +
    +
      +
    • Without CUDA support:<br> +pip install git+https://github.com/icecubeopensource/kde.git#egg=kde

    • +
    +
  • +
+
+ +

### Optional Dependencies

+

Optional dependencies. Some of these must be installed manually prior to installing PISA, and some will be installed automatically by pip, and this seems to vary from system to system. Therefore you can first try to run the installation, and just install whatever pip says it needed, or just use apt, pip, and/or conda to install the below before running the PISA installation.

+
    +
  • [LeptonWeighter](https://github.com/icecube/leptonweighter) Required for the data.licloader_weighter service.

  • +
  • [MCEq](http://github.com/afedynitch/MCEq) Required for flux.mceq service.

  • +
  • [daemonflux](https://github.com/mceq-project/daemonflux) Recuired for flux.daemon_flux service.

  • +
  • [nuSQuiDS](https://github.com/arguelles/nuSQuIDS) Required for osc.nusquids service.

  • +
  • [pandas](https://pandas.pydata.org/) Required for datarelease (csv) stages.

  • +
  • [OpenMP](http://www.openmp.org) Intra-process parallelization to accelerate code on on multi-core/multi-CPU computers. +* Available from your compiler: gcc supports OpenMP 4.0 and Clang >= 3.8.0 supports OpenMP 3.1. Either version of OpenMP should work, but Clang has yet to be tested for its OpenMP support.

  • +
  • [Photospline](https://github.com/icecube/photospline) Required for the flux.airs service.

  • +
  • [Pylint](http://www.pylint.org): Static code checker and style analyzer for Python code. Note that our (more or less enforced) coding conventions are codified in the pylintrc file in PISA, which will automatically be found and used by Pylint when running on code within a PISA package.<br> +* Installed alongside PISA if you specify option [‘develop’] to pip

  • +
  • [recommonmark](http://recommonmark.readthedocs.io/en/latest/) Translator to allow markdown docs/docstrings to be used; plugin for Sphinx. (Required to compile PISA’s documentation.) +* Installed alongside PISA if you specify option [‘develop’] to pip

  • +
  • [ROOT >= 6.12.04 with PyROOT](https://root.cern.ch) Necessary for xsec.genie, unfold.roounfold and absorption.pi_earth_absorption services, and to read ROOT cross section files in the crossSections utils module. Due to a bug in ROOT’s python support (documented here https://github.com/IceCubeOpenSource/pisa/issues/430), you need at least version 6.12.04 of ROOT.

  • +
  • [Sphinx](http://www.sphinx-doc.org/en/stable/) version >= 1.3 +* Installed alongside PISA if you specify option [‘develop’] to pip

  • +
  • [versioneer](https://github.com/warner/python-versioneer) Automatically get versions from git and make these embeddable and usable in code. Note that the install process is unique since it first places versioneer.py in the PISA root directory, and then updates source files within the repository to provide static and dynamic version info. +* Installed alongside PISA if you specify option [‘develop’] to pip

  • +
  • [black](https://github.com/ambv/black) Format your Python code, _automatically_, with typically very nice results! +* Note this only works in Python3

  • +
+

### Obtain PISA sourcecode

+

#### Develop PISA: Fork then clone

+

If you wish to modify PISA and contribute your code changes back to the PISA project (highly recommended!), fork IceCubeOpenSource/pisa from Github. +(How to work with the `cake` branch of PISA will be detailed below.)

+

Forking creates your own version of PISA within your Github account. +You can freely create your own branch, modify the code, and then add and commit changes to that branch within your fork of PISA. +When you want to share your changes with IceCubeOpenSource/pisa, you can then submit a pull request to IceCubeOpenSource/pisa which can be merged by the PISA administrator (after the code is reviewed and tested, of course).

+
    +
  • Navigate to the [PISA github page](https://github.com/IceCubeOpenSource/pisa) and fork the repository by clicking on the ![fork](images/ForkButton.png) button.

  • +
  • Clone the repository into the $PISA directory via one of the following commands (<github username> is your Github username): +* either SSH access to repo:<br>

  • +
+

`git clone git@github.com:<github username>/pisa.git $PISA +`

+
+
    +
  • or HTTPS access to repo:<br>

  • +
+
+

git clone https://github.com/<github username>/pisa.git $PISA

+

#### Using but not developing PISA: Just clone

+

If you just wish to pull changes from github (and not submit any changes back), you can just clone the sourcecode without creating a fork of the project.

+
    +
  • Clone the repository into the $PISA directory via one of the following commands: +* either SSH access to repo:<br>

  • +
+
+
git clone git@github.com:IceCubeOpenSource/pisa.git $PISA
    +
  • or HTTPS access to repo:<br>

  • +
+
+
+

git clone https://github.com/IceCubeOpenSource/pisa.git $PISA

+

### Ensure a clean install using virtualenv or conda env

+

It is absolutely discouraged to install PISA as a root (privileged) user. +PISA is not vetted for security vulnerabilities, so should always be installed and run as a regular (unprivileged) user.

+

It is suggested (but not required) that you install PISA within a virtual environment (or in a conda env if you’re using Anaconda or Miniconda Python distributions). +This minimizes cross-contamination by PISA of a system-wide (or other) Python installation with conflicting required package versions, guarantees that you can install PISA as an unprivileged user, guarantees that PISA’s dependencies are met, and allows for multiple versions of PISA to be installed simultaneously (each in a different virtualenv / conda env).

+

Note that it is also discouraged, but you _can_ install PISA as an unprivileged user using your system-wide Python install with the –user option to pip. +This is not quite as clean as a virtual environment, and the issue with coflicting package dependency versions remains.

+

### Install PISA

+

`bash +pip install -e $PISA[develop] -vvv +` +Explanation: +* First, note that this is *not run as administrator*. It is discouraged to do so (and has not been tested this way). +* -e $PISA (or equivalently, –editable $PISA): Installs from source located at $PISA and allows for changes to the source code within to be immediately propagated to your Python installation. +Within the Python library tree, all files under pisa are links to your source code, so changes within your source are seen directly by the Python installation. Note that major changes to your source code (file names or directory structure changing) will require re-installation, though, for the links to be updated (see below for the command for re-installing). +* [develop] Specify optional dependency groups. You can omit any or all of these if your system does not support them or if you do not need them. +* -vvv Be maximally verbose during the install. You’ll see lots of messages, including warnings that are irrelevant, but if your installation fails, it’s easiest to debug if you use -vvv. +* If a specific compiler is set by the CC environment variable (export CC=<path>), it will be used; otherwise, the cc command will be run on the system for compiling C-code.

+

__Notes:__ +* You can work with your installation using the usual git commands (pull, push, etc.). However, these *won’t recompile* any of the extension (i.e. pyx, _C/C++_) libraries. See below for how to reinstall PISA when you need these to recompile.

+

### Reinstall PISA

+

Sometimes a change within PISA requires re-installation (particularly if a compiled module changes, the below forces re-compilation).

+

`bash +pip install -e $PISA[develop] --force-reinstall -vvv +`

+

Note that if files change names or locations, though, the above can still not be enough. +In this case, the old files have to be removed manually (along with any associated .pyc files, as Python will use these even if the .py files have been removed).

+

### Compile the documentation

+

To compile a new version of the documentation to html (pdf and other formats are available by replacing html with pdf, etc.): +`bash +cd $PISA && sphinx-apidoc -f -o docs/source pisa +`

+

In case code structure has changed, rebuild the apidoc by executing +`bash +cd $PISA/docs && make html +`

+

### Test PISA

+

#### Unit Tests

+

Throughout the codebase there are test_*.py files and test_* functions within various *.py files that represent unit tests. +Unit tests are designed to ensure that the basic mechanisms of objects’ functionality work.

+

These are all run, plus additional tests (takes about 15-20 minutes on a laptop) with the command +`bash +$PISA/pisa_tests/test_command_lines.sh +`

+

### Run a basic analysis

+

To make sure that an analysis can be run, try running an Asimov analysis of neutrino mass ordering (NMO) with the following (this takes about one minute on a laptop; note, though, that the result is not terribly accurate due to the use of coarse binning and low Monte Carlo statistics): +```bash +export PISA_FTYPE=fp64 +$PISA/pisa/analysis/hypo_testing.py –logdir /tmp/nmo_test analysis

+
+

–h0-pipeline settings/pipeline/example.cfg –h0-param-selections=”ih” –h1-param-selections=”nh” –data-param-selections=”nh” –data-is-mc –min-method slsqp –metric=chi2 –pprint -v

+
+

```

+

The above command sets the null hypothesis (h0) to be the inverted hierarchy (ih) and the hypothesis to be tested (h1) to the normal hierarchy (nh). +Meanwhile, the Asimov dataset is derived from the normal hierarchy.

+

The significance for distinguishing NH from IH in this case (with the crude but fast settings specified) is shown by typing the follwoing command (which should output something close to 4.3): +`bash +hypo_testing_postprocess.py --asimov --detector "pingu_v39" --dir /tmp/nmo_test/hypo* +`

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/osc.html b/readmes/osc.html new file mode 100644 index 000000000..32704df01 --- /dev/null +++ b/readmes/osc.html @@ -0,0 +1,122 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Oscillations

+

The purpose of this stage is to modify the modelled atmospheric neutrino flux by applying the appropriate oscillation probability in each energy and zenith bin through the earth, for each flavour. +At the end of the stage, the oscillated neutrino flux for each flavour is given.

+

### prob3

+

This service calculates the neutrino oscillation probabilities based on the original Prob3 code, which at its core, relies on a 3-flavour analytic solution to the neutrino oscillation propagation over constant matter density. +For a realistic earth model, small enough constant density layers are chosen to accuratly describe the matter density through the earth. +The Prob3 code, initially written by the Super-Kamiokande collaboration in C/C++, is publicly available here: http://www.phy.duke.edu/~raw22/public/Prob3++/

+

We use a custom re-implementation in python/numba.

+

To use this service, one must set values for all of the 3-flavour oscillation parameters: theta12, theta13, theta23, deltam21, deltam31 and deltacp. +One can set hierarchy-dependent versions in the settings file by adding .nh before the name in the params (see theta23 in the example pipeline settings file for more details).

+

The other advantage of Prob3 is that it can fully take in to account matter effects in a very quick way. +It is fed a model of the density of the Earth via the earth_model parameter which contains a discretised model of the Earth density. +The two columns in the file are the radii of the boundaries and then densities in the sections. +PISA has the 4, 10, 12 and 59 layer versions of the PReliminary Earth reference Model (PREM), the source of which can be found here:

+

http://www.sciencedirect.com/science/article/pii/0031920181900467

+

One also has control over 3 values of the electron fraction: YeI, YeM and YeO, which are the values in the inner core, mantle and outer core respectively. +Finally, in PISA one can set the detector depth (since the standard Prob3 has the detector at the surface) and the height above the Earth’s surface from which to begin propagation of the neutrinos.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/pid.html b/readmes/pid.html new file mode 100644 index 000000000..dba122824 --- /dev/null +++ b/readmes/pid.html @@ -0,0 +1,107 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Particle ID

+

The purpose of this stage is to change the event classification, classifying the reconstructed events the track and cascade channels.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/pisa.html b/readmes/pisa.html new file mode 100644 index 000000000..708d874b1 --- /dev/null +++ b/readmes/pisa.html @@ -0,0 +1,129 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

## About PISA

+

PISA implements a modular architecture wherein users can combine one or more analysis pipelines into distribution makers to make “data” and—separately—template distributions. +Within each pipeline, users can choose among several implementations for each of the stages they choose to include.

+

Finally, multiple types of analysis can be performed using the generated distributions to ultimately characterize the ability of the detector to make a measurement.

+

### Analysis types

+

PISA implements both what we call *parameterized-Monte Carlo (MC) stages* and *reweighted-MC stages*. +In the former, distributions (and not individual event weights) are modified to reflect the effects of each analysis stage. +In the latter, the individual events’ weights and properties (such as reconstructed energy) are modified directly to reflect the effects of the detector, and only in the end are the events histogrammed to characterize their distribution.

+

See the analysis guide for more explanaton of the difference between the two.

+

### How an analysis is structured

+

All of the analyses possible utilize a “data” distribution. +This can come from an actual measurement or by injecting a set of assumed-true values for the various parameters into the analysis pipeline(s) and producing what is called *Asimov data*—the expected distribution given those parameter values—or *pseudo data*, which is Asimov data but with random (Poisson) fluctuations applied. +A minimizer attempts to match the “data” distribution with a template by varying the parameters used to generate the template. +The “closeness” of match between the generated template and the “data” distribution is measured by a criterion such as chi-squared or log likelihood.

+

An important question is the significance of the experiment to measure one or more of the above parameters (the measured parameters). +To do this, the measured parameters are fixed successively to a range of values and, at each value, the matching process above is repeated with all other parameters—the nuissance parameters—allowed to vary. +This shows sensitivity of the criterion to the measured parameters, and hence the ability for the experiment to measure those parameters. +Put another way: The more the closeness creiterion varies with a change in the measurement parameters (after the nuissance parameters have done their best to try to make the templates all look like the data), the better able the experiment is to distinguish between values of the measured parameters.

+

### An example parameterized-MC analysis pipeline

+

![Parameterized-MC analysis pipeline](images/PINGUSimulationChain.png)

+

The original drawing is [here](https://docs.google.com/drawings/edit?id=1RxQj8rPndwFygxw3BUf4bx5B35GAMk0Gsos_BiJIN34).

+

### More information about analysis

+

An excellent (and far more detailed) description of the analysis process is maintained by Elim Cheung with particular application to IceCube/DeepCore atmospheric neutrino measurements [here](http://umdgrb.umd.edu/~elims/Fitter/Basics). +She wrote her own fitter to perform these tasks. You can evaluate her ezFit analysis software as an alternative to (or as a complementary tool for comparing results with) PISA [here](http://code.icecube.wisc.edu/projects/icecube/browser/IceCube/sandbox/elims/ezfit).

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/pisa_index.html b/readmes/pisa_index.html new file mode 100644 index 000000000..e8c49e6ab --- /dev/null +++ b/readmes/pisa_index.html @@ -0,0 +1,110 @@ + + + + + + + General Introduction — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

General Introduction

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/readme.html b/readmes/readme.html new file mode 100644 index 000000000..91827a012 --- /dev/null +++ b/readmes/readme.html @@ -0,0 +1,166 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

<img src=”images/pisa4_logo_transparent.png” width=”250”>

+

[![Unit Tests](https://img.shields.io/github/actions/workflow/status/icecube/pisa/.github/workflows/pythonpackage.yml?label=unit%20tests)](https://github.com/icecube/pisa/actions/workflows/pythonpackage.yml) +[![Pull Requests](https://img.shields.io/github/issues-pr/icecube/pisa)](https://github.com/icecube/pisa/pulls) +![Repo Stars](https://img.shields.io/github/stars/icecube/pisa?style=social)

+

[Introduction](pisa/README.md) | +[Installation](INSTALL.md) | +[Documentation](https://icecube.github.io/pisa/) | +[Terminology](pisa/glossary.md) | +[License](LICENSE) | +[Contributors](CONTRIBUTORS.md) | +[Others’ work](EXTERNAL_ATTRIBUTION.md)

+

PISA is a software written to analyze the results (or expected results) of an experiment based on Monte Carlo simulation.

+

In particular, PISA was written by and for the IceCube Collaboration for analyses employing the [IceCube Neutrino Observatory](https://icecube.wisc.edu/), including the [DeepCore](https://arxiv.org/abs/1109.6096) and the planned [Upgrade]([https://arxiv.org/abs/2307.15295](https://arxiv.org/pdf/1908.09441.pdf)) low-energy in-fill arrays.

+

> [!NOTE] +> However, any experiment can make use of PISA for analyzing expected and actual results.

+

PISA was originally developed to cope with low-statistics Monte Carlo (MC) by using parameterizations of the MC and operate on histograms of the data rather than directly reweighting the MC. However, PISA’s methods apply equally well to high-MC situations, and PISA also performs traditional reweighted-MC analysis as well.

+

If you use PISA, please cite our publication ([e-Print available here](https://arxiv.org/abs/1803.05390)): +` +Computational Techniques for the Analysis of Small Signals +in High-Statistics Neutrino Oscillation Experiments +IceCube Collaboration - M.G. Aartsen et al. +Mar 14, 2018 +Published in: Nucl.Instrum.Meth.A 977 (2020) 164332 +`

+

# Quick start

+

## Installation

+

`shell +git clone git@github.com:icecube/pisa.git +cd pisa +pip install -e . +`

+

For detailed installation instructions and common issues see [Installation](INSTALL.md)

+

## Minimal Example

+

Producing some oscillograms

+

`python +from pisa.core import Pipeline +import matplotlib.pyplot as plt +`

+
+

<< PISA is running in single precision (FP32) mode; numba is running on CPU (single core) >>

+
+

Instantiate a Pipeline or multiple pipelines in a DistributionMaker using PISA config files

+

`python +template_maker = Pipeline("settings/pipeline/osc_example.cfg") +`

+

Run the pipleine with nominal settings

+

`python +template_maker.run() +`

+

Get the oscillation probabilities <img src=”https://render.githubusercontent.com/render/math?math=P_{nu_mutonu_mu}”>

+

`python +outputs = template_maker.data.get_mapset('prob_mu') +`

+

Plot some results

+

`python +fig, axes = plt.subplots(figsize=(18, 5), ncols=3) +outputs['nue_cc'].plot(ax=axes[0], cmap='RdYlBu_r', vmin=0, vmax=1); +outputs['numu_cc'].plot(ax=axes[1], cmap='RdYlBu_r', vmin=0, vmax=1); +outputs['nutau_cc'].plot(ax=axes[2], cmap='RdYlBu_r', vmin=0, vmax=1); +`

+

![png](README_files/README_10_0.png)

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/reco.html b/readmes/reco.html new file mode 100644 index 000000000..22efd3f4f --- /dev/null +++ b/readmes/reco.html @@ -0,0 +1,107 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Stage: Reconstruction

+

The purpose of this stage is to apply an assumed detector resolution to the incoming flux to convert the events’ “true” energies and directions into the “reconstructed” ones.

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/stages_index.html b/readmes/stages_index.html new file mode 100644 index 000000000..b8dcd931e --- /dev/null +++ b/readmes/stages_index.html @@ -0,0 +1,118 @@ + + + + + + + Stages — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Stages

+

Description of the different PISA stages and their physics.

+

There are stages appropriate for the “staged-approach” analysis technique (note that pid is deprecated)

+
+
+

Stages that can be used for the MC-reweighting style of analysis

+
+
+

Finally, the following stages can be used for unfolding analysis (essentially the reverse of the above analyses, which can both be classified as forward-folding):

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/stats.html b/readmes/stats.html new file mode 100644 index 000000000..0d1319d0f --- /dev/null +++ b/readmes/stats.html @@ -0,0 +1,149 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Statistics functions

+

The stats.py file contains a collection of function to calculate statistical measures from PISA MapSets

+

## Log-Likelihoods

+

These all assume that our data is poisson distributed with the usual definition of its pdf as: +`math +P(k,\lambda) = \frac{\lambda^k e^{-\lambda}}{\Gamma(k+1)} +` +![poisson_pdf](images/poisson_pdf.png) +<!— +P(k,lambda) = frac{lambda^k e^{-lambda}}{Gamma(k+1)} +—>

+

Note that k-factorial was replaced by the gamma function to generalize it to non-integer values (used in Asimov calculations)

+

The logarithem of the actual likelihood is used for numerical reasons, which also means the total likelihood becomes a sum instead of a product, just sayin’…

+

### llh

+

The log-likelihood calculates the total of the bin-by bin log-likelihood given two maps representing k (= observed values) and lambda (= expected values).

+

### conv_llh

+

This likelihood takes into account any uncertainties on the expected values (from e.g. finite MC statistics). This is achieved by smearing out the simple poisson pdf with a nromal distribution n centered at 0. The width of this normal distribution is the uncertainty on the expected values.

+

![conv_poisson_pdf](images/conv_poisson_pdf.png) +<!— +(p*n)(k,lambda, sigma) = int{p(k,lambda-x)n(x,sigma)dx} +—>

+

The integral is calculated as a discrete sum with N steps.

+

### barlow_llh

+

This likelihood takes into account the finite MC statistics uncertainties on the expected values as described in [this paper](https://inspirehep.net/record/35053/).

+

## Chi-Square Values

+

These are the Chi-Squared values expressing the compatibility of two MapSets. In the limit of large nummbers this should give the same result as -2*llh.

+

### chi2

+

This calculates the total chi2 values over all bins.

+

![chi2](images/chi2.png) +<!— +chi^2 = sum_{bins}frac{(N_{exp}-N_{data})^2}{sqrt{N_{exp}}^2} +—>

+

### mod_chi2

+

The modified Chi-Squared expression is increasing the denominator term. The denominator can be understood as a Variance with N ` corresponding to the usual poisson variance and any additional error added as `sigma^2.

+

![mod_chi2](images/mod_chi2.png) +<!— +chi^2 = sum_{bins}frac{(N_{exp}-N_{data})^2}{sigma^2 + N_{exp}} +—>

+

## Prior Penalties

+

Parameters with a non-uniform prior are added to the final llh or chi2 value. but done in priors.py. This is mentionned here just for the sake of completenes.

+

![prior](images/prior.png) +<!— +sum_{priors}frac{(p-hat{p})^2}{sigma^2} +—>

+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/units_and_uncertainties.html b/readmes/units_and_uncertainties.html new file mode 100644 index 000000000..d33bac88d --- /dev/null +++ b/readmes/units_and_uncertainties.html @@ -0,0 +1,249 @@ + + + + + + + <no title> — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

# Units and Uncertainties

+

## Units

+

Units were introduced for parameters and binnings in PISA Cake using the [Pint package](https://pint.readthedocs.io/). The package is fully numpy and uncertainties compatible.

+

Note the terminology used: +* *Unit* has no attached value(s). Type: pint.unit._Unit +* *Quantity* is a number (or array) with units attached to them. Type: pint.quantity._Quantity +* *Magnitude* is the value of a quantity sans units. Type: float, int, numpy.ndarray, etc.

+

### Pint’s quirks +One quirk is that pint has lazy imports, so until you actually instantiate a unit registry, doing things like +`python +isinstance(x, pint.unit._Unit) +isinstance(x, pint.quantity._Quantity) +` +will fail (pint.unit and pint.quantity effectively don’t exist) until you first do +`python +ureg = pint.UnitRegistry() +` +Therefore, and to assure that we alsways use the same instance, the “standard” way of importing pint in PISA is the following line: +`python +from pisa import ureg, Q_ +`

+

### Basic attributes of Pint quantities

+
    +
  • To access the units of a quantity: +`python +>>> q = 10.2 * ureg.meter +>>> q.units +<Unit('meter')> +>>> units_2 = q.u +<Unit('meter')> +`

  • +
  • To access the magnitude of a Pint quantity: +`python +>>> q = 12.4 * ureg.foot +>>> q.magnitude +12.4 +>>> q.m +12.4 +`

  • +
+

## Uncertainties

+

Support for the handling of errors is available from the python [uncertainties package](https://pythonhosted.org/uncertainties/). This interoperates well with units, too. Note that there is a performance penalty for using uncertainties, so hooks are provided to enable or disable this feature at the user’s discretion.

+

### Basic attributes of numbers with uncertainties

+
    +
  • Nominal value: +`python +>>> x = ufloat(10.0, 0.3) +>>> x.nominal_value +10.0 +>>> x.n +10.0 +`

  • +
  • Standard deviation: +`python +>>> x = ufloat(-12.3, 0.6) +>>> x.std_dev +0.6 +>>> x.s +0.6 +`

  • +
+

Pint and uncertainties interoperate well. So a quantity can have uncertainty. All of the above attributes work for numbers that are wrapped with both features. See examples below.

+

## Examples

+

More examples of how to use the above packages are given below.

+
    +
  • For ordinary numbers (floats): +```python +>>> from uncertainties import ufloat +>>> from pisa import ureg, Q_

    +
    >>> q = ufloat(1.3, 0.2) * ureg.meter
    +
    +
    +
    >>> q.m # magnitude
    +1.3+/-0.2
    +>>> q.u # unit
    +<Unit('meter')>
    +>>> q.n # nominal value
    +1.3
    +>>> q.s # standard deviation
    +0.2
    +
    +
    +
    >>> q.to('foot') # conversion
    +<Quantity(4.3+/-0.7, 'foot')>
    +>>> q.dimensionality
    +<UnitsContainer({'[length]': 1.0})>
    +```
    +
    +
    +
  • +
  • For numpy arrays: +`python +>>> from uncertainties import unumpy as unp +>>> a = unp.uarray([1., 2., 3.], [1., 1.41, 1.73]) # with list of values, and list of errors, or alternatively: +>>> a = np.array([ufloat(1.,1.),ufloat(2.,1.41), ufloat( 3.,1.73)]) +>>> a *= ureg.seconds +<Quantity([1.0+/-1.0 2.0+/-1.41 3.0+/-1.73], 'second')> +>>> a.u +<Unit('second')> +>>> a.m +array([1.0+/-1.0, 2.0+/-1.41, 3.0+/-1.73], dtype=object) +>>> unp.nominal_values((a) +array([ 1.,  2.,  3.]) +>>> unp.std_devs(a) +array([ 1.  ,  1.41,  1.73]) +`

  • +
  • Check if units are compatible +* Explicitly check if dimensionality is equal for two units, quantities, or a combination thereof:

    +
    +

    `python +>>> units0 = ureg.meter +>>> units1 = ureg.yard +>>> units2 = ureg.kg +>>> quant0 = 1 * units0 +>>> quant1 = 1 * units1 +>>> quant0.dimensionality == quant1.dimensionality +True +>>> quant0.dimensionality == units1.dimensionality +True +>>> units1.dimensionality == units2.dimensionality +False +`

    +
    +
      +
    • Implicitly check if one quantity is convertible to a different unit (whether a raw units object, the units attached to another quantity, or a string that Pint can convert into units): +`python +>>> q0 = ureg.meter * 10 +>>> q1 = ureg.yard * 2 +>>> u0 = ureg.cm +>>> u1 = ureg.second +>>> # Convert q0 from meters to the units of q1 (yards) +>>> q0.to(q1) +<Quantity(10.9361329834, 'yard')> +>>> q0.to(u0) +<Quantity(1000.0, 'centimeter')> +>>> q0.to('mile') +<Quantity(0.00621371192237, 'mile')> +>>> q0.to(u1) +DimensionalityError: Cannot convert from 'meter' ([length]) to 'second' ([time]) +`

    • +
    +
  • +
  • The [pisa.core.Map](https://github.com/jllanfranchi/pisa/blob/cake/pisa/core/map.py) object integrates uncertainties, which are turned off by default but can be enabled with either the set_poisson_errors() or set_errors(…) methods. Once enabled, all subsequent operations on the Map will propagate errors (to first order).

  • +
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/readmes/utils_index.html b/readmes/utils_index.html new file mode 100644 index 000000000..4013b2af9 --- /dev/null +++ b/readmes/utils_index.html @@ -0,0 +1,114 @@ + + + + + + + Utils — PISA 4.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Utils

+

Collection of utils

+
+
    +
  • }
  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 000000000..8e4799158 --- /dev/null +++ b/search.html @@ -0,0 +1,124 @@ + + + + + + Search — PISA 4.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2021, The IceCube/PINGU Collaboration.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..974b794f6 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"Config File Structure": [[23, "config-file-structure"]], "Config file syntax": [[5, "config-file-syntax"]], "Contents": [[0, "contents"]], "Developer\u2019s Guide": [[30, "developer-s-guide"]], "General Introduction": [[40, "general-introduction"]], "Index": [[0, "index"]], "Inputs": [[4, "id16"]], "Module contents": [[2, "module-pisa"], [3, "module-pisa.analysis"], [4, "module-pisa.core"], [5, "module-pisa.scripts"], [6, "module-pisa.stages"], [7, "module-pisa.stages.absorption"], [8, "module-pisa.stages.aeff"], [9, "module-pisa.stages.background"], [10, "module-contents"], [11, "module-pisa.stages.data"], [12, "module-pisa.stages.discr_sys"], [13, "module-pisa.stages.flux"], [14, "module-pisa.stages.likelihood"], [15, "module-pisa.stages.osc"], [16, "module-contents"], [17, "module-pisa.stages.osc.prob3numba"], [18, "module-pisa.stages.pid"], [19, "module-pisa.stages.reco"], [20, "module-contents"], [21, "module-pisa.stages.utils"], [22, "module-pisa.stages.xsec"], [23, "module-pisa.utils"], [24, "module-pisa.utils.hypersurface"], [25, "module-pisa.utils.llh_defs"]], "N.B.": [[23, "n-b"]], "Notes on whitespace": [[5, "notes-on-whitespace"]], "Param definitions": [[23, "param-definitions"]], "Param selector": [[23, "param-selector"]], "Returns:": [[4, "returns"]], "Stages": [[43, "stages"]], "Submodules": [[3, "submodules"], [4, "submodules"], [5, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"], [10, "submodules"], [11, "submodules"], [12, "submodules"], [13, "submodules"], [14, "submodules"], [15, "submodules"], [16, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [21, "submodules"], [22, "submodules"], [23, "submodules"], [24, "submodules"], [25, "submodules"]], "Subpackages": [[2, "subpackages"], [6, "subpackages"], [15, "subpackages"], [23, "subpackages"]], "Syntax for modifying the specified \u201cpipeline_cfg\u201d": [[5, "syntax-for-modifying-the-specified-pipeline-cfg"]], "ToDo:": [[23, "todo"]], "Utils": [[46, "utils"]], "Welcome to PISA\u2019s documentation!": [[0, "welcome-to-pisa-s-documentation"]], "inputs:": [[4, "inputs"], [23, "inputs"]], "pisa": [[1, "pisa"]], "pisa package": [[2, "pisa-package"]], "pisa.analysis package": [[3, "pisa-analysis-package"]], "pisa.analysis.analysis module": [[3, "module-pisa.analysis.analysis"]], "pisa.core package": [[4, "pisa-core-package"]], "pisa.core.bin_indexing module": [[4, "module-pisa.core.bin_indexing"]], "pisa.core.binning module": [[4, "module-pisa.core.binning"]], "pisa.core.container module": [[4, "module-pisa.core.container"]], "pisa.core.detectors module": [[4, "module-pisa.core.detectors"]], "pisa.core.distribution_maker module": [[4, "module-pisa.core.distribution_maker"]], "pisa.core.events module": [[4, "module-pisa.core.events"]], "pisa.core.events_pi module": [[4, "module-pisa.core.events_pi"]], "pisa.core.map module": [[4, "module-pisa.core.map"]], "pisa.core.param module": [[4, "module-pisa.core.param"]], "pisa.core.pipeline module": [[4, "module-pisa.core.pipeline"]], "pisa.core.prior module": [[4, "module-pisa.core.prior"]], "pisa.core.stage module": [[4, "module-pisa.core.stage"]], "pisa.core.translation module": [[4, "module-pisa.core.translation"]], "pisa.scripts package": [[5, "pisa-scripts-package"]], "pisa.scripts.add_flux_to_events_file module": [[5, "module-pisa.scripts.add_flux_to_events_file"]], "pisa.scripts.compare module": [[5, "module-pisa.scripts.compare"]], "pisa.scripts.convert_config_format module": [[5, "module-pisa.scripts.convert_config_format"]], "pisa.scripts.create_barr_sys_tables_mceq module": [[5, "pisa-scripts-create-barr-sys-tables-mceq-module"]], "pisa.scripts.fit_hypersurfaces module": [[5, "module-pisa.scripts.fit_hypersurfaces"]], "pisa.scripts.make_events_file module": [[5, "module-pisa.scripts.make_events_file"]], "pisa.scripts.make_nufit_theta23_spline_priors module": [[5, "module-pisa.scripts.make_nufit_theta23_spline_priors"]], "pisa.scripts.test_flux_weights module": [[5, "module-pisa.scripts.test_flux_weights"]], "pisa.stages package": [[6, "pisa-stages-package"]], "pisa.stages.absorption package": [[7, "pisa-stages-absorption-package"]], "pisa.stages.absorption.earth_absorption module": [[7, "module-pisa.stages.absorption.earth_absorption"]], "pisa.stages.aeff package": [[8, "pisa-stages-aeff-package"]], "pisa.stages.aeff.aeff module": [[8, "module-pisa.stages.aeff.aeff"]], "pisa.stages.aeff.weight module": [[8, "module-pisa.stages.aeff.weight"]], "pisa.stages.aeff.weight_hnl module": [[8, "module-pisa.stages.aeff.weight_hnl"]], "pisa.stages.background package": [[9, "pisa-stages-background-package"]], "pisa.stages.background.atm_muons module": [[9, "module-pisa.stages.background.atm_muons"]], "pisa.stages.combine package": [[10, "pisa-stages-combine-package"]], "pisa.stages.combine.nutau module": [[10, "pisa-stages-combine-nutau-module"]], "pisa.stages.data package": [[11, "pisa-stages-data-package"]], "pisa.stages.data.csv_data_hist module": [[11, "module-pisa.stages.data.csv_data_hist"]], "pisa.stages.data.csv_icc_hist module": [[11, "module-pisa.stages.data.csv_icc_hist"]], "pisa.stages.data.csv_loader module": [[11, "module-pisa.stages.data.csv_loader"]], "pisa.stages.data.freedom_hdf5_loader module": [[11, "module-pisa.stages.data.freedom_hdf5_loader"]], "pisa.stages.data.grid module": [[11, "module-pisa.stages.data.grid"]], "pisa.stages.data.licloader_weighter module": [[11, "pisa-stages-data-licloader-weighter-module"]], "pisa.stages.data.meows_loader module": [[11, "module-pisa.stages.data.meows_loader"]], "pisa.stages.data.simple_data_loader module": [[11, "module-pisa.stages.data.simple_data_loader"]], "pisa.stages.data.simple_signal module": [[11, "module-pisa.stages.data.simple_signal"]], "pisa.stages.data.sqlite_loader module": [[11, "module-pisa.stages.data.sqlite_loader"]], "pisa.stages.data.toy_event_generator module": [[11, "module-pisa.stages.data.toy_event_generator"]], "pisa.stages.discr_sys package": [[12, "pisa-stages-discr-sys-package"]], "pisa.stages.discr_sys.hypersurfaces module": [[12, "module-pisa.stages.discr_sys.hypersurfaces"]], "pisa.stages.discr_sys.ultrasurfaces module": [[12, "module-pisa.stages.discr_sys.ultrasurfaces"]], "pisa.stages.flux package": [[13, "pisa-stages-flux-package"]], "pisa.stages.flux.airs module": [[13, "pisa-stages-flux-airs-module"]], "pisa.stages.flux.astrophysical module": [[13, "module-pisa.stages.flux.astrophysical"]], "pisa.stages.flux.barr_simple module": [[13, "module-pisa.stages.flux.barr_simple"]], "pisa.stages.flux.daemon_flux module": [[13, "module-pisa.stages.flux.daemon_flux"]], "pisa.stages.flux.hillasg module": [[13, "module-pisa.stages.flux.hillasg"]], "pisa.stages.flux.honda_ip module": [[13, "module-pisa.stages.flux.honda_ip"]], "pisa.stages.flux.mceq_barr module": [[13, "module-pisa.stages.flux.mceq_barr"]], "pisa.stages.flux.mceq_barr_red module": [[13, "module-pisa.stages.flux.mceq_barr_red"]], "pisa.stages.likelihood package": [[14, "pisa-stages-likelihood-package"]], "pisa.stages.likelihood.generalized_llh_params module": [[14, "module-pisa.stages.likelihood.generalized_llh_params"]], "pisa.stages.osc package": [[15, "pisa-stages-osc-package"]], "pisa.stages.osc.decay_params module": [[15, "module-pisa.stages.osc.decay_params"]], "pisa.stages.osc.decoherence module": [[15, "module-pisa.stages.osc.decoherence"]], "pisa.stages.osc.globes module": [[15, "module-pisa.stages.osc.globes"]], "pisa.stages.osc.layers module": [[15, "module-pisa.stages.osc.layers"]], "pisa.stages.osc.lri_params module": [[15, "module-pisa.stages.osc.lri_params"]], "pisa.stages.osc.nsi_params module": [[15, "module-pisa.stages.osc.nsi_params"]], "pisa.stages.osc.nusquids module": [[15, "pisa-stages-osc-nusquids-module"]], "pisa.stages.osc.nusquids package": [[16, "pisa-stages-osc-nusquids-package"]], "pisa.stages.osc.nusquids.nusquids_osc module": [[16, "pisa-stages-osc-nusquids-nusquids-osc-module"]], "pisa.stages.osc.osc_params module": [[15, "module-pisa.stages.osc.osc_params"]], "pisa.stages.osc.prob3 module": [[15, "module-pisa.stages.osc.prob3"]], "pisa.stages.osc.prob3numba package": [[17, "pisa-stages-osc-prob3numba-package"]], "pisa.stages.osc.prob3numba.numba_osc_hostfuncs module": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_hostfuncs"]], "pisa.stages.osc.prob3numba.numba_osc_kernels module": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_kernels"]], "pisa.stages.osc.prob3numba.numba_osc_tests module": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_tests"]], "pisa.stages.osc.prob3numba.test_numba module": [[17, "module-pisa.stages.osc.prob3numba.test_numba"]], "pisa.stages.osc.scaling_params module": [[15, "module-pisa.stages.osc.scaling_params"]], "pisa.stages.osc.two_nu_osc module": [[15, "module-pisa.stages.osc.two_nu_osc"]], "pisa.stages.pid package": [[18, "pisa-stages-pid-package"]], "pisa.stages.pid.shift_scale_pid module": [[18, "module-pisa.stages.pid.shift_scale_pid"]], "pisa.stages.reco package": [[19, "pisa-stages-reco-package"]], "pisa.stages.reco.resolutions module": [[19, "module-pisa.stages.reco.resolutions"]], "pisa.stages.reco.simple_param module": [[19, "module-pisa.stages.reco.simple_param"]], "pisa.stages.unfold package": [[20, "pisa-stages-unfold-package"]], "pisa.stages.unfold.roounfold module": [[20, "pisa-stages-unfold-roounfold-module"]], "pisa.stages.utils package": [[21, "pisa-stages-utils-package"]], "pisa.stages.utils.add_indices module": [[21, "module-pisa.stages.utils.add_indices"]], "pisa.stages.utils.adhoc_sys module": [[21, "module-pisa.stages.utils.adhoc_sys"]], "pisa.stages.utils.bootstrap module": [[21, "module-pisa.stages.utils.bootstrap"]], "pisa.stages.utils.fix_error module": [[21, "module-pisa.stages.utils.fix_error"]], "pisa.stages.utils.hist module": [[21, "module-pisa.stages.utils.hist"]], "pisa.stages.utils.kde module": [[21, "module-pisa.stages.utils.kde"]], "pisa.stages.utils.kfold module": [[21, "module-pisa.stages.utils.kfold"]], "pisa.stages.utils.resample module": [[21, "module-pisa.stages.utils.resample"]], "pisa.stages.utils.set_variance module": [[21, "module-pisa.stages.utils.set_variance"]], "pisa.stages.xsec package": [[22, "pisa-stages-xsec-package"]], "pisa.stages.xsec.dis_sys module": [[22, "module-pisa.stages.xsec.dis_sys"]], "pisa.stages.xsec.genie_sys module": [[22, "module-pisa.stages.xsec.genie_sys"]], "pisa.stages.xsec.nutau_xsec module": [[22, "module-pisa.stages.xsec.nutau_xsec"]], "pisa.utils package": [[23, "pisa-utils-package"]], "pisa.utils.barlow module": [[23, "module-pisa.utils.barlow"]], "pisa.utils.barr_parameterization module": [[23, "module-pisa.utils.barr_parameterization"]], "pisa.utils.callable module": [[23, "module-pisa.utils.callable"]], "pisa.utils.comparisons module": [[23, "module-pisa.utils.comparisons"]], "pisa.utils.config_parser module": [[23, "module-pisa.utils.config_parser"]], "pisa.utils.cross_sections module": [[23, "module-pisa.utils.cross_sections"]], "pisa.utils.data_proc_params module": [[23, "module-pisa.utils.data_proc_params"]], "pisa.utils.fileio module": [[23, "module-pisa.utils.fileio"]], "pisa.utils.fisher_matrix module": [[23, "module-pisa.utils.fisher_matrix"]], "pisa.utils.flavInt module": [[23, "module-pisa.utils.flavInt"]], "pisa.utils.flux_weights module": [[23, "module-pisa.utils.flux_weights"]], "pisa.utils.format module": [[23, "module-pisa.utils.format"]], "pisa.utils.gaussians module": [[23, "module-pisa.utils.gaussians"]], "pisa.utils.hash module": [[23, "module-pisa.utils.hash"]], "pisa.utils.hdf module": [[23, "module-pisa.utils.hdf"]], "pisa.utils.hdfchain module": [[23, "module-pisa.utils.hdfchain"]], "pisa.utils.hypersurface package": [[24, "pisa-utils-hypersurface-package"]], "pisa.utils.hypersurface.hyper_interpolator module": [[24, "module-pisa.utils.hypersurface.hyper_interpolator"]], "pisa.utils.hypersurface.hypersurface module": [[24, "module-pisa.utils.hypersurface.hypersurface"]], "pisa.utils.hypersurface.hypersurface_plotting module": [[24, "module-pisa.utils.hypersurface.hypersurface_plotting"]], "pisa.utils.jsons module": [[23, "module-pisa.utils.jsons"]], "pisa.utils.kde_hist module": [[23, "module-pisa.utils.kde_hist"]], "pisa.utils.likelihood_functions module": [[23, "module-pisa.utils.likelihood_functions"]], "pisa.utils.llh_client module": [[23, "pisa-utils-llh-client-module"]], "pisa.utils.llh_defs package": [[25, "pisa-utils-llh-defs-package"]], "pisa.utils.llh_defs.poisson module": [[25, "pisa-utils-llh-defs-poisson-module"]], "pisa.utils.llh_defs.poisson_gamma_mixtures module": [[25, "pisa-utils-llh-defs-poisson-gamma-mixtures-module"]], "pisa.utils.llh_server module": [[23, "module-pisa.utils.llh_server"]], "pisa.utils.log module": [[23, "module-pisa.utils.log"]], "pisa.utils.matrix module": [[23, "module-pisa.utils.matrix"]], "pisa.utils.mcSimRunSettings module": [[23, "module-pisa.utils.mcSimRunSettings"]], "pisa.utils.numba_tools module": [[23, "module-pisa.utils.numba_tools"]], "pisa.utils.plotter module": [[23, "module-pisa.utils.plotter"]], "pisa.utils.profiler module": [[23, "module-pisa.utils.profiler"]], "pisa.utils.pull_method module": [[23, "module-pisa.utils.pull_method"]], "pisa.utils.random_numbers module": [[23, "module-pisa.utils.random_numbers"]], "pisa.utils.resources module": [[23, "module-pisa.utils.resources"]], "pisa.utils.spline module": [[23, "module-pisa.utils.spline"]], "pisa.utils.spline_smooth module": [[23, "module-pisa.utils.spline_smooth"]], "pisa.utils.stats module": [[23, "module-pisa.utils.stats"]], "pisa.utils.tests module": [[23, "module-pisa.utils.tests"]], "pisa.utils.vbwkde module": [[23, "module-pisa.utils.vbwkde"]], "pisa.utils.vectorizer module": [[23, "module-pisa.utils.vectorizer"]], "returns:": [[23, "returns"]], "}": [[28, "id5"]], "\u201capply_to_all_sets\u201d section": [[5, "apply-to-all-sets-section"]], "\u201cgeneral\u201d section": [[5, "general-section"]], "\u201cnominal_set\u201d and \u201csys_set\u201d sections": [[5, "nominal-set-and-sys-set-sections"]]}, "docnames": ["index", "modules", "pisa", "pisa.analysis", "pisa.core", "pisa.scripts", "pisa.stages", "pisa.stages.absorption", "pisa.stages.aeff", "pisa.stages.background", "pisa.stages.combine", "pisa.stages.data", "pisa.stages.discr_sys", "pisa.stages.flux", "pisa.stages.likelihood", "pisa.stages.osc", "pisa.stages.osc.nusquids", "pisa.stages.osc.prob3numba", "pisa.stages.pid", "pisa.stages.reco", "pisa.stages.unfold", "pisa.stages.utils", "pisa.stages.xsec", "pisa.utils", "pisa.utils.hypersurface", "pisa.utils.llh_defs", "readmes/aeff", "readmes/core", "readmes/cross_sections", "readmes/data", "readmes/devel_guide", "readmes/discr_sys", "readmes/flavor_interaction_types", "readmes/flux", "readmes/general_conventions", "readmes/glossary", "readmes/install", "readmes/osc", "readmes/pid", "readmes/pisa", "readmes/pisa_index", "readmes/readme", "readmes/reco", "readmes/stages_index", "readmes/stats", "readmes/units_and_uncertainties", "readmes/utils_index"], "envversion": {"sphinx": 61, "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, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["index.rst", "modules.rst", "pisa.rst", "pisa.analysis.rst", "pisa.core.rst", "pisa.scripts.rst", "pisa.stages.rst", "pisa.stages.absorption.rst", "pisa.stages.aeff.rst", "pisa.stages.background.rst", "pisa.stages.combine.rst", "pisa.stages.data.rst", "pisa.stages.discr_sys.rst", "pisa.stages.flux.rst", "pisa.stages.likelihood.rst", "pisa.stages.osc.rst", "pisa.stages.osc.nusquids.rst", "pisa.stages.osc.prob3numba.rst", "pisa.stages.pid.rst", "pisa.stages.reco.rst", "pisa.stages.unfold.rst", "pisa.stages.utils.rst", "pisa.stages.xsec.rst", "pisa.utils.rst", "pisa.utils.hypersurface.rst", "pisa.utils.llh_defs.rst", "readmes/aeff.md", "readmes/core.md", "readmes/cross_sections.md", "readmes/data.md", "readmes/devel_guide.rst", "readmes/discr_sys.md", "readmes/flavor_interaction_types.md", "readmes/flux.md", "readmes/general_conventions.md", "readmes/glossary.md", "readmes/install.md", "readmes/osc.md", "readmes/pid.md", "readmes/pisa.md", "readmes/pisa_index.rst", "readmes/readme.md", "readmes/reco.md", "readmes/stages_index.rst", "readmes/stats.md", "readmes/units_and_uncertainties.md", "readmes/utils_index.rst"], "indexentries": {"add (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.ADD", false]], "add_aeff_weight() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.add_aeff_weight", false]], "add_container() (pisa.core.container.containerset method)": [[4, "pisa.core.container.ContainerSet.add_container", false]], "add_covariance() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.add_covariance", false]], "add_covariance() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.add_covariance", false]], "add_covariance() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.add_covariance", false]], "add_fluxes_to_file() (in module pisa.scripts.add_flux_to_events_file)": [[5, "pisa.scripts.add_flux_to_events_file.add_fluxes_to_file", false]], "add_indices (class in pisa.stages.utils.add_indices)": [[21, "pisa.stages.utils.add_indices.add_indices", false]], "add_leg() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.add_leg", false]], "add_opp() (pisa.utils.callable.funct method)": [[23, "pisa.utils.callable.Funct.add_opp", false]], "add_reco() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.add_reco", false]], "add_section() (pisa.utils.config_parser.pisaconfigparser method)": [[23, "pisa.utils.config_parser.PISAConfigParser.add_section", false]], "add_stamp() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.add_stamp", false]], "add_truth() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.add_truth", false]], "addprior() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.addPrior", false]], "adhoc_sys (class in pisa.stages.utils.adhoc_sys)": [[21, "pisa.stages.utils.adhoc_sys.adhoc_sys", false]], "aeff (class in pisa.stages.aeff.aeff)": [[8, "pisa.stages.aeff.aeff.aeff", false]], "all_keys (pisa.core.container.container property)": [[4, "pisa.core.container.Container.all_keys", false]], "all_metrics (in module pisa.utils.stats)": [[23, "pisa.utils.stats.ALL_METRICS", false]], "allclose() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.allclose", false]], "allclose() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.allclose", false]], "allclose() (pisa.utils.flavint.flavintdata method)": [[23, "pisa.utils.flavInt.FlavIntData.allclose", false]], "allclose() (pisa.utils.flavint.flavintdatagroup method)": [[23, "pisa.utils.flavInt.FlavIntDataGroup.allclose", false]], "allclose_kw (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.ALLCLOSE_KW", false]], "alpha1 (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.alpha1", false]], "alpha2 (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.alpha2", false]], "analysis (class in pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.Analysis", false]], "antipart_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.ANTIPART_CODE", false]], "antiparticle (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.antiparticle", false]], "antiparticle (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.antiparticle", false]], "antiparticles (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.antiparticles", false]], "antipion_production() (pisa.stages.flux.mceq_barr.mceq_barr method)": [[13, "pisa.stages.flux.mceq_barr.mceq_barr.antipion_production", false]], "antipion_production() (pisa.stages.flux.mceq_barr_red.mceq_barr_red method)": [[13, "pisa.stages.flux.mceq_barr_red.mceq_barr_red.antipion_production", false]], "apply() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.apply", false]], "apply() (pisa.stages.utils.kde.kde method)": [[21, "pisa.stages.utils.kde.kde.apply", false]], "apply() (pisa.stages.utils.resample.resample method)": [[21, "pisa.stages.utils.resample.resample.apply", false]], "apply_all_section_name (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.APPLY_ALL_SECTION_NAME", false]], "apply_cut() (pisa.core.events_pi.eventspi method)": [[4, "pisa.core.events_pi.EventsPi.apply_cut", false]], "apply_cuts() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.apply_cuts", false]], "apply_cuts() (pisa.utils.data_proc_params.dataprocparams method)": [[23, "pisa.utils.data_proc_params.DataProcParams.apply_cuts", false]], "apply_cuts_to_events() (pisa.stages.data.simple_data_loader.simple_data_loader method)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader.apply_cuts_to_events", false]], "apply_floor() (in module pisa.stages.utils.set_variance)": [[21, "pisa.stages.utils.set_variance.apply_floor", false]], "apply_function() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.apply_function", false]], "apply_function() (pisa.stages.absorption.earth_absorption.earth_absorption method)": [[7, "pisa.stages.absorption.earth_absorption.earth_absorption.apply_function", false]], "apply_function() (pisa.stages.aeff.aeff.aeff method)": [[8, "pisa.stages.aeff.aeff.aeff.apply_function", false]], "apply_function() (pisa.stages.aeff.weight.weight method)": [[8, "pisa.stages.aeff.weight.weight.apply_function", false]], "apply_function() (pisa.stages.aeff.weight_hnl.weight_hnl method)": [[8, "pisa.stages.aeff.weight_hnl.weight_hnl.apply_function", false]], "apply_function() (pisa.stages.background.atm_muons.atm_muons method)": [[9, "pisa.stages.background.atm_muons.atm_muons.apply_function", false]], "apply_function() (pisa.stages.data.csv_icc_hist.csv_icc_hist method)": [[11, "pisa.stages.data.csv_icc_hist.csv_icc_hist.apply_function", false]], "apply_function() (pisa.stages.data.csv_loader.csv_loader method)": [[11, "pisa.stages.data.csv_loader.csv_loader.apply_function", false]], "apply_function() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.apply_function", false]], "apply_function() (pisa.stages.data.grid.grid method)": [[11, "pisa.stages.data.grid.grid.apply_function", false]], "apply_function() (pisa.stages.data.meows_loader.meows_loader method)": [[11, "pisa.stages.data.meows_loader.meows_loader.apply_function", false]], "apply_function() (pisa.stages.data.simple_data_loader.simple_data_loader method)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader.apply_function", false]], "apply_function() (pisa.stages.data.simple_signal.simple_signal method)": [[11, "pisa.stages.data.simple_signal.simple_signal.apply_function", false]], "apply_function() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.apply_function", false]], "apply_function() (pisa.stages.data.toy_event_generator.toy_event_generator method)": [[11, "pisa.stages.data.toy_event_generator.toy_event_generator.apply_function", false]], "apply_function() (pisa.stages.discr_sys.hypersurfaces.hypersurfaces method)": [[12, "pisa.stages.discr_sys.hypersurfaces.hypersurfaces.apply_function", false]], "apply_function() (pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces method)": [[12, "pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces.apply_function", false]], "apply_function() (pisa.stages.flux.astrophysical.astrophysical method)": [[13, "pisa.stages.flux.astrophysical.astrophysical.apply_function", false]], "apply_function() (pisa.stages.likelihood.generalized_llh_params.generalized_llh_params method)": [[14, "pisa.stages.likelihood.generalized_llh_params.generalized_llh_params.apply_function", false]], "apply_function() (pisa.stages.osc.decoherence.decoherence method)": [[15, "pisa.stages.osc.decoherence.decoherence.apply_function", false]], "apply_function() (pisa.stages.osc.globes.globes method)": [[15, "pisa.stages.osc.globes.globes.apply_function", false]], "apply_function() (pisa.stages.osc.prob3.prob3 method)": [[15, "pisa.stages.osc.prob3.prob3.apply_function", false]], "apply_function() (pisa.stages.osc.two_nu_osc.two_nu_osc method)": [[15, "pisa.stages.osc.two_nu_osc.two_nu_osc.apply_function", false]], "apply_function() (pisa.stages.pid.shift_scale_pid.shift_scale_pid method)": [[18, "pisa.stages.pid.shift_scale_pid.shift_scale_pid.apply_function", false]], "apply_function() (pisa.stages.utils.adhoc_sys.adhoc_sys method)": [[21, "pisa.stages.utils.adhoc_sys.adhoc_sys.apply_function", false]], "apply_function() (pisa.stages.utils.bootstrap.bootstrap method)": [[21, "pisa.stages.utils.bootstrap.bootstrap.apply_function", false]], "apply_function() (pisa.stages.utils.fix_error.fix_error method)": [[21, "pisa.stages.utils.fix_error.fix_error.apply_function", false]], "apply_function() (pisa.stages.utils.hist.hist method)": [[21, "pisa.stages.utils.hist.hist.apply_function", false]], "apply_function() (pisa.stages.utils.kfold.kfold method)": [[21, "pisa.stages.utils.kfold.kfold.apply_function", false]], "apply_function() (pisa.stages.utils.set_variance.set_variance method)": [[21, "pisa.stages.utils.set_variance.set_variance.apply_function", false]], "apply_function() (pisa.stages.xsec.dis_sys.dis_sys method)": [[22, "pisa.stages.xsec.dis_sys.dis_sys.apply_function", false]], "apply_function() (pisa.stages.xsec.genie_sys.genie_sys method)": [[22, "pisa.stages.xsec.genie_sys.genie_sys.apply_function", false]], "apply_function() (pisa.stages.xsec.nutau_xsec.nutau_xsec method)": [[22, "pisa.stages.xsec.nutau_xsec.nutau_xsec.apply_function", false]], "apply_genie_sys() (in module pisa.stages.xsec.genie_sys)": [[22, "pisa.stages.xsec.genie_sys.apply_genie_sys", false]], "apply_sys_loop() (in module pisa.stages.flux.astrophysical)": [[13, "pisa.stages.flux.astrophysical.apply_sys_loop", false]], "apply_sys_loop() (in module pisa.stages.flux.mceq_barr_red)": [[13, "pisa.stages.flux.mceq_barr_red.apply_sys_loop", false]], "apply_to_maps() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.apply_to_maps", false]], "applycut() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.applyCut", false]], "applycut() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.applyCut", false]], "arb (pisa.stages.utils.resample.resamplemode attribute)": [[21, "pisa.stages.utils.resample.ResampleMode.ARB", false]], "are_discrete (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.are_discrete", false]], "are_fixed (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.are_fixed", false]], "arg_str_seq_none() (in module pisa.utils.format)": [[23, "pisa.utils.format.arg_str_seq_none", false]], "arg_to_tuple() (in module pisa.utils.format)": [[23, "pisa.utils.format.arg_to_tuple", false]], "array() (in module pisa)": [[2, "pisa.array", false]], "array_representations (pisa.core.container.container attribute)": [[4, "pisa.core.container.Container.array_representations", false]], "array_to_binned() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.array_to_binned", false]], "ary2str() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.ary2str", false]], "as_integer_ratio() (pisa.float32 method)": [[2, "pisa.float32.as_integer_ratio", false]], "as_integer_ratio() (pisa.float64 method)": [[2, "pisa.float64.as_integer_ratio", false]], "assemble_interpolated_fits() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.assemble_interpolated_fits", false]], "assert_array_fits() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.assert_array_fits", false]], "assert_compat() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.assert_compat", false]], "assert_compat() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.assert_compat", false]], "assert_compat() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.assert_compat", false]], "assign() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.assign", false]], "astrophysical (class in pisa.stages.flux.astrophysical)": [[13, "pisa.stages.flux.astrophysical.astrophysical", false]], "atm_muons (class in pisa.stages.background.atm_muons)": [[9, "pisa.stages.background.atm_muons.atm_muons", false]], "auto_populate_test_case() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.auto_populate_test_case", false]], "auto_translate() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.auto_translate", false]], "bar_code (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.bar_code", false]], "barlow_llh() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.barlow_llh", false]], "barlow_llh() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.barlow_llh", false]], "barlowllh() (in module pisa.utils.likelihood_functions)": [[23, "pisa.utils.likelihood_functions.barlowLLH", false]], "barnobarfract() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.barnobarfract", false]], "barnobarfract() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.barnobarfract", false]], "barr_simple (class in pisa.stages.flux.barr_simple)": [[13, "pisa.stages.flux.barr_simple.barr_simple", false]], "barsep (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.BarSep", false]], "basename (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.basename", false]], "basename() (in module pisa.core.binning)": [[4, "pisa.core.binning.basename", false]], "basename_binning (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.basename_binning", false]], "basename_binning (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.basename_binning", false]], "basenames (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.basenames", false]], "baseplot() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.baseplot", false]], "baseplot2() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.baseplot2", false]], "basicanalysis (class in pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.BasicAnalysis", false]], "bestfit_plots (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.bestfit_plots", false]], "bin_edges (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.bin_edges", false]], "bin_edges (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.bin_edges", false]], "bin_names (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.bin_names", false]], "bin_prefix_to_power_of_1024 (in module pisa.utils.format)": [[23, "pisa.utils.format.BIN_PREFIX_TO_POWER_OF_1024", false]], "bin_volumes() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.bin_volumes", false]], "bin_widths (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.bin_widths", false]], "binned_to_array() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.binned_to_array", false]], "binning (pisa.core.map.map property)": [[4, "pisa.core.map.Map.binning", false]], "binning (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator property)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.binning", false]], "bit_count() (pisa.int16 method)": [[2, "pisa.int16.bit_count", false]], "bit_count() (pisa.int32 method)": [[2, "pisa.int32.bit_count", false]], "bit_count() (pisa.int64 method)": [[2, "pisa.int64.bit_count", false]], "bit_count() (pisa.int8 method)": [[2, "pisa.int8.bit_count", false]], "bit_count() (pisa.uint16 method)": [[2, "pisa.uint16.bit_count", false]], "bit_count() (pisa.uint32 method)": [[2, "pisa.uint32.bit_count", false]], "bit_count() (pisa.uint64 method)": [[2, "pisa.uint64.bit_count", false]], "bit_count() (pisa.uint8 method)": [[2, "pisa.uint8.bit_count", false]], "bootstrap (class in pisa.stages.utils.bootstrap)": [[21, "pisa.stages.utils.bootstrap.bootstrap", false]], "broadcast() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.broadcast", false]], "broadcaster() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.broadcaster", false]], "cache_dir (in module pisa)": [[2, "pisa.CACHE_DIR", false]], "calc_decoherence_probs() (in module pisa.stages.osc.decoherence)": [[15, "pisa.stages.osc.decoherence.calc_decoherence_probs", false]], "calc_prob_e_mu() (pisa.stages.osc.globes.globes method)": [[15, "pisa.stages.osc.globes.globes.calc_prob_e_mu", false]], "calc_prob_nonsterile() (pisa.stages.osc.globes.globes method)": [[15, "pisa.stages.osc.globes.globes.calc_prob_nonsterile", false]], "calc_probs() (pisa.stages.osc.decoherence.decoherence method)": [[15, "pisa.stages.osc.decoherence.decoherence.calc_probs", false]], "calc_probs() (pisa.stages.osc.prob3.prob3 method)": [[15, "pisa.stages.osc.prob3.prob3.calc_probs", false]], "calc_rho36() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.calc_rho36", false]], "calc_uncertainties() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.calc_uncertainties", false]], "calclayers() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.calcLayers", false]], "calcpathlength() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.calcPathLength", false]], "calculate_2d_flux_weights() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.calculate_2d_flux_weights", false]], "calculate_3d_flux_weights() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.calculate_3d_flux_weights", false]], "calculate_survivalprob() (in module pisa.stages.absorption.earth_absorption)": [[7, "pisa.stages.absorption.earth_absorption.calculate_survivalprob", false]], "calculate_xsections() (pisa.stages.absorption.earth_absorption.earth_absorption method)": [[7, "pisa.stages.absorption.earth_absorption.earth_absorption.calculate_xsections", false]], "calculatecovariance() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.calculateCovariance", false]], "callable (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.callable", false]], "cc (pisa.utils.flavint.inttype property)": [[23, "pisa.utils.flavInt.IntType.cc", false]], "cc (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.cc", false]], "cc_code (pisa.utils.flavint.inttype attribute)": [[23, "pisa.utils.flavInt.IntType.CC_CODE", false]], "cc_flavints (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.cc_flavints", false]], "cc_flavs (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.cc_flavs", false]], "check() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.check", false]], "check_agreement() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.check_agreement", false]], "checkconsistency() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.checkConsistency", false]], "chi2() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.chi2", false]], "chi2() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.chi2", false]], "chi2() (pisa.core.prior.prior method)": [[4, "pisa.core.prior.Prior.chi2", false]], "chi2_metrics (in module pisa.utils.stats)": [[23, "pisa.utils.stats.CHI2_METRICS", false]], "chi2_per_map() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.chi2_per_map", false]], "chi2_total() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.chi2_total", false]], "clear() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.clear", false]], "clear_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.clear_matrix", false]], "cmsq_to_msq (in module pisa.scripts.make_events_file)": [[5, "pisa.scripts.make_events_file.CMSQ_TO_MSQ", false]], "code (pisa.utils.flavint.inttype property)": [[23, "pisa.utils.flavInt.IntType.code", false]], "code (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.code", false]], "col() (pisa.utils.hdfchain.hdftableproxy method)": [[23, "pisa.utils.hdfchain.HDFTableProxy.col", false]], "col_iter() (pisa.utils.hdfchain.hdftableproxy method)": [[23, "pisa.utils.hdfchain.HDFTableProxy.col_iter", false]], "collate_with_names() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.collate_with_names", false]], "combine_re() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.combine_re", false]], "combine_regex_option (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.COMBINE_REGEX_OPTION", false]], "combine_wildcard() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.combine_wildcard", false]], "combinedspline (class in pisa.utils.spline)": [[23, "pisa.utils.spline.CombinedSpline", false]], "compare() (in module pisa.scripts.compare)": [[5, "pisa.scripts.compare.compare", false]], "compare() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.compare", false]], "compare() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.compare", false]], "compare_numeric() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.compare_numeric", false]], "complex128 (class in pisa)": [[2, "pisa.complex128", false]], "complex256 (class in pisa)": [[2, "pisa.complex256", false]], "complex64 (class in pisa)": [[2, "pisa.complex64", false]], "compute() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.compute", false]], "compute_function() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.compute_function", false]], "compute_function() (pisa.stages.absorption.earth_absorption.earth_absorption method)": [[7, "pisa.stages.absorption.earth_absorption.earth_absorption.compute_function", false]], "compute_function() (pisa.stages.discr_sys.hypersurfaces.hypersurfaces method)": [[12, "pisa.stages.discr_sys.hypersurfaces.hypersurfaces.compute_function", false]], "compute_function() (pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces method)": [[12, "pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces.compute_function", false]], "compute_function() (pisa.stages.flux.astrophysical.astrophysical method)": [[13, "pisa.stages.flux.astrophysical.astrophysical.compute_function", false]], "compute_function() (pisa.stages.flux.barr_simple.barr_simple method)": [[13, "pisa.stages.flux.barr_simple.barr_simple.compute_function", false]], "compute_function() (pisa.stages.flux.daemon_flux.daemon_flux method)": [[13, "pisa.stages.flux.daemon_flux.daemon_flux.compute_function", false]], "compute_function() (pisa.stages.flux.hillasg.hillasg method)": [[13, "pisa.stages.flux.hillasg.hillasg.compute_function", false]], "compute_function() (pisa.stages.flux.honda_ip.honda_ip method)": [[13, "pisa.stages.flux.honda_ip.honda_ip.compute_function", false]], "compute_function() (pisa.stages.flux.mceq_barr.mceq_barr method)": [[13, "pisa.stages.flux.mceq_barr.mceq_barr.compute_function", false]], "compute_function() (pisa.stages.flux.mceq_barr_red.mceq_barr_red method)": [[13, "pisa.stages.flux.mceq_barr_red.mceq_barr_red.compute_function", false]], "compute_function() (pisa.stages.osc.decoherence.decoherence method)": [[15, "pisa.stages.osc.decoherence.decoherence.compute_function", false]], "compute_function() (pisa.stages.osc.globes.globes method)": [[15, "pisa.stages.osc.globes.globes.compute_function", false]], "compute_function() (pisa.stages.osc.prob3.prob3 method)": [[15, "pisa.stages.osc.prob3.prob3.compute_function", false]], "compute_function() (pisa.stages.pid.shift_scale_pid.shift_scale_pid method)": [[18, "pisa.stages.pid.shift_scale_pid.shift_scale_pid.compute_function", false]], "compute_function() (pisa.stages.utils.fix_error.fix_error method)": [[21, "pisa.stages.utils.fix_error.fix_error.compute_function", false]], "compute_function() (pisa.stages.utils.set_variance.set_variance method)": [[21, "pisa.stages.utils.set_variance.set_variance.compute_function", false]], "compute_function() (pisa.stages.xsec.nutau_xsec.nutau_xsec method)": [[22, "pisa.stages.xsec.nutau_xsec.nutau_xsec.compute_function", false]], "compute_integrated_maps() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.compute_integrated_maps", false]], "compute_maps() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.compute_maps", false]], "computeminlengthtolayers() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.computeMinLengthToLayers", false]], "config (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.config", false]], "conjugate() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.conjugate", false]], "conjugate_transpose() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.conjugate_transpose", false]], "consistency_checks() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.consistency_checks", false]], "consistency_checks() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.consistency_checks", false]], "container (class in pisa.core.container)": [[4, "pisa.core.container.Container", false]], "containerset (class in pisa.core.container)": [[4, "pisa.core.container.ContainerSet", false]], "continuous (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.continuous", false]], "conv_llh() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.conv_llh", false]], "conv_llh() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.conv_llh", false]], "conv_poisson() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.conv_poisson", false]], "coord (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.coord", false]], "copy() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.copy", false]], "copy_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.copy_matrix", false]], "core_density_scale (pisa.stages.osc.scaling_params.core_scaling_w_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_w_constrain.core_density_scale", false]], "core_density_scale (pisa.stages.osc.scaling_params.core_scaling_wo_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain.core_density_scale", false]], "core_scaling_w_constrain (class in pisa.stages.osc.scaling_params)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_w_constrain", false]], "core_scaling_wo_constrain (class in pisa.stages.osc.scaling_params)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain", false]], "correct_chi2() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.correct_chi2", false]], "correct_chi2() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.correct_chi2", false]], "cos (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.COS", false]], "cos (pisa.utils.callable.trigops property)": [[23, "pisa.utils.callable.TrigOps.cos", false]], "cos() (in module pisa.utils.callable)": [[23, "pisa.utils.callable.cos", false]], "count (pisa.analysis.analysis.counter property)": [[3, "pisa.analysis.analysis.Counter.count", false]], "counter (class in pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.Counter", false]], "create_hypersurfaces() (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.create_hypersurfaces", false]], "crosssections (class in pisa.utils.cross_sections)": [[23, "pisa.utils.cross_sections.CrossSections", false]], "csv_data_hist (class in pisa.stages.data.csv_data_hist)": [[11, "pisa.stages.data.csv_data_hist.csv_data_hist", false]], "csv_icc_hist (class in pisa.stages.data.csv_icc_hist)": [[11, "pisa.stages.data.csv_icc_hist.csv_icc_hist", false]], "csv_loader (class in pisa.stages.data.csv_loader)": [[11, "pisa.stages.data.csv_loader.csv_loader", false]], "ctype (in module pisa)": [[2, "pisa.CTYPE", false]], "ctype (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.ctype", false]], "cuda() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.cuda", false]], "cuda_copy() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.cuda_copy", false]], "current_bin (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.current_bin", false]], "cut_bool_idx() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.cut_bool_idx", false]], "cx (in module pisa.stages.osc.prob3numba.numba_osc_hostfuncs)": [[17, "pisa.stages.osc.prob3numba.numba_osc_hostfuncs.CX", false]], "daemon_flux (class in pisa.stages.flux.daemon_flux)": [[13, "pisa.stages.flux.daemon_flux.daemon_flux", false]], "data (class in pisa.core.events)": [[4, "pisa.core.events.Data", false]], "data_eq() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.data_eq", false]], "data_eq() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.data_eq", false]], "data_histogram (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.data_histogram", false]], "dataprocparams (class in pisa.utils.data_proc_params)": [[23, "pisa.utils.data_proc_params.DataProcParams", false]], "debug (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.DEBUG", false]], "debug_mode (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.debug_mode", false]], "decay_alpha3 (pisa.stages.osc.decay_params.decayparams attribute)": [[15, "pisa.stages.osc.decay_params.DecayParams.decay_alpha3", false]], "decay_alpha3 (pisa.stages.osc.decay_params.decayparams property)": [[15, "id0", false]], "decay_matrix (pisa.stages.osc.decay_params.decayparams attribute)": [[15, "pisa.stages.osc.decay_params.DecayParams.decay_matrix", false]], "decay_matrix (pisa.stages.osc.decay_params.decayparams property)": [[15, "id1", false]], "decayparams (class in pisa.stages.osc.decay_params)": [[15, "pisa.stages.osc.decay_params.DecayParams", false]], "decoherence (class in pisa.stages.osc.decoherence)": [[15, "pisa.stages.osc.decoherence.decoherence", false]], "decoherenceparams (class in pisa.stages.osc.decoherence)": [[15, "pisa.stages.osc.decoherence.DecoherenceParams", false]], "default() (pisa.utils.jsons.numpyencoder method)": [[23, "pisa.utils.jsons.NumpyEncoder.default", false]], "default_map_tex() (in module pisa.utils.format)": [[23, "pisa.utils.format.default_map_tex", false]], "default_translation_mode (pisa.core.container.container attribute)": [[4, "pisa.core.container.Container.default_translation_mode", false]], "deltacp (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.deltacp", false]], "deltacp (pisa.stages.osc.osc_params.oscparams property)": [[15, "id6", false]], "deltansi (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.deltansi", false]], "density (pisa.stages.osc.layers.layers attribute)": [[15, "pisa.stages.osc.layers.Layers.density", false]], "density (pisa.stages.osc.layers.layers property)": [[15, "id2", false]], "density_scale (pisa.stages.osc.scaling_params.mass_scaling property)": [[15, "pisa.stages.osc.scaling_params.Mass_scaling.density_scale", false]], "depends_names (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.depends_names", false]], "dependson (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.dependson", false]], "derivedparam (class in pisa.core.param)": [[4, "pisa.core.param.DerivedParam", false]], "detectors (class in pisa.core.detectors)": [[4, "pisa.core.detectors.Detectors", false]], "detmcsimrunssettings (class in pisa.utils.mcsimrunsettings)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings", false]], "digitize() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.digitize", false]], "dimensionality (pisa.core.param.param property)": [[4, "pisa.core.param.Param.dimensionality", false]], "dimensions (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.dimensions", false]], "dims (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.dims", false]], "dis_sys (class in pisa.stages.xsec.dis_sys)": [[22, "pisa.stages.xsec.dis_sys.dis_sys", false]], "discrete (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.discrete", false]], "distance (pisa.stages.osc.layers.layers attribute)": [[15, "pisa.stages.osc.layers.Layers.distance", false]], "distance (pisa.stages.osc.layers.layers property)": [[15, "id3", false]], "distribution_makers (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.distribution_makers", false]], "distributionmaker (class in pisa.core.distribution_maker)": [[4, "pisa.core.distribution_maker.DistributionMaker", false]], "dm_matrix (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.dm_matrix", false]], "dm_matrix (pisa.stages.osc.osc_params.oscparams property)": [[15, "id7", false]], "do_1d_2d_bartol_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_1d_2d_bartol_test", false]], "do_1d_2d_honda_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_1d_2d_honda_test", false]], "do_1d_3d_honda_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_1d_3d_honda_test", false]], "do_2d_2d_bartol_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_2d_2d_bartol_test", false]], "do_2d_2d_comparisons() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_2d_2d_comparisons", false]], "do_2d_2d_honda_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_2d_2d_honda_test", false]], "do_2d_3d_honda_test() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.do_2d_3d_honda_test", false]], "domain (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.domain", false]], "domains (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.domains", false]], "down (pisa.stages.utils.resample.resamplemode attribute)": [[21, "pisa.stages.utils.resample.ResampleMode.DOWN", false]], "downsample() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.downsample", false]], "downsample() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.downsample", false]], "downsample() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.downsample", false]], "downsample() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.downsample", false]], "dump() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.dump", false]], "dumps() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.dumps", false]], "earth_absorption (class in pisa.stages.absorption.earth_absorption)": [[7, "pisa.stages.absorption.earth_absorption.earth_absorption", false]], "edge_magnitudes (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.edge_magnitudes", false]], "edges_hash (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.edges_hash", false]], "edges_hash (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.edges_hash", false]], "empty() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.empty", false]], "empty_bin_indices (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.empty_bin_indices", false]], "empty_bin_indices (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.empty_bin_indices", false]], "engfmt() (in module pisa.utils.format)": [[23, "pisa.utils.format.engfmt", false]], "eps_ee (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_ee", false]], "eps_ee (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_ee", false]], "eps_emu (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_emu", false]], "eps_emu (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_emu", false]], "eps_etau (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_etau", false]], "eps_etau (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_etau", false]], "eps_matrix (pisa.stages.osc.nsi_params.nsiparams attribute)": [[15, "pisa.stages.osc.nsi_params.NSIParams.eps_matrix", false]], "eps_matrix (pisa.stages.osc.nsi_params.stdnsiparams attribute)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_matrix", false]], "eps_matrix (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "id5", false]], "eps_matrix (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_matrix", false]], "eps_matrix_analytical (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_matrix_analytical", false]], "eps_mumu (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_mumu", false]], "eps_mumu (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_mumu", false]], "eps_mutau (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_mutau", false]], "eps_mutau (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_mutau", false]], "eps_prime (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_prime", false]], "eps_scale (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_scale", false]], "eps_tautau (pisa.stages.osc.nsi_params.stdnsiparams property)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams.eps_tautau", false]], "eps_tautau (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.eps_tautau", false]], "epsilon (in module pisa)": [[2, "pisa.EPSILON", false]], "equality_prec (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.EQUALITY_PREC", false]], "equality_sigfigs (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.EQUALITY_SIGFIGS", false]], "error (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.ERROR", false]], "error_method (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.error_method", false]], "evaluate() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.evaluate", false]], "evaluate() (pisa.utils.hypersurface.hypersurface.hypersurfaceparam method)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.evaluate", false]], "evaluate_flux_map() (in module pisa.stages.flux.daemon_flux)": [[13, "pisa.stages.flux.daemon_flux.evaluate_flux_map", false]], "events (class in pisa.core.events)": [[4, "pisa.core.events.Events", false]], "eventspi (class in pisa.core.events_pi)": [[4, "pisa.core.events_pi.EventsPi", false]], "execute_func() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.execute_func", false]], "expand() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.expand", false]], "expected_params (pisa.core.stage.stage attribute)": [[4, "pisa.core.stage.Stage.expected_params", false]], "extcalclayers() (in module pisa.stages.osc.layers)": [[15, "pisa.stages.osc.layers.extCalcLayers", false]], "extend() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.extend", false]], "extract_vals() (in module pisa.scripts.make_nufit_theta23_spline_priors)": [[5, "pisa.scripts.make_nufit_theta23_spline_priors.extract_vals", false]], "fast_hash_filesize_bytes (in module pisa.utils.hash)": [[23, "pisa.utils.hash.FAST_HASH_FILESIZE_BYTES", false]], "fast_hash_ndarray_elements (in module pisa.utils.hash)": [[23, "pisa.utils.hash.FAST_HASH_NDARRAY_ELEMENTS", false]], "fast_hash_str_chars (in module pisa.utils.hash)": [[23, "pisa.utils.hash.FAST_HASH_STR_CHARS", false]], "fatal (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.FATAL", false]], "fbwkde() (in module pisa.utils.vbwkde)": [[23, "pisa.utils.vbwkde.fbwkde", false]], "file_str() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.file_str", false]], "fill_variable_dict() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader static method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.fill_variable_dict", false]], "find_files() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.find_files", false]], "find_index() (in module pisa.core.translation)": [[4, "pisa.core.translation.find_index", false]], "find_index_unsafe() (in module pisa.core.translation)": [[4, "pisa.core.translation.find_index_unsafe", false]], "find_map() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.find_map", false]], "find_path() (in module pisa.utils.resources)": [[23, "pisa.utils.resources.find_path", false]], "find_resource() (in module pisa.utils.resources)": [[23, "pisa.utils.resources.find_resource", false]], "find_valid_representation() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.find_valid_representation", false]], "finite_binning (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.finite_binning", false]], "finite_binning (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.finite_binning", false]], "fint_re (pisa.utils.flavint.nuflavint attribute)": [[23, "pisa.utils.flavInt.NuFlavInt.FINT_RE", false]], "fint_ssep (pisa.utils.flavint.nuflavint attribute)": [[23, "pisa.utils.flavInt.NuFlavInt.FINT_SSEP", false]], "fint_texsep (pisa.utils.flavint.nuflavint attribute)": [[23, "pisa.utils.flavInt.NuFlavInt.FINT_TEXSEP", false]], "fishermatrix (class in pisa.utils.fisher_matrix)": [[23, "pisa.utils.fisher_matrix.FisherMatrix", false]], "fit() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fit", false]], "fit_coefft_labels (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fit_coefft_labels", false]], "fit_coeffts (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fit_coeffts", false]], "fit_hypersurfaces() (in module pisa.utils.hypersurface.hypersurface)": [[24, "pisa.utils.hypersurface.hypersurface.fit_hypersurfaces", false]], "fit_hypo() (pisa.analysis.analysis.analysis method)": [[3, "pisa.analysis.analysis.Analysis.fit_hypo", false]], "fit_maps (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fit_maps", false]], "fit_param_values (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fit_param_values", false]], "fit_recursively() (pisa.analysis.analysis.basicanalysis method)": [[3, "pisa.analysis.analysis.BasicAnalysis.fit_recursively", false]], "fix() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.fix", false]], "fix_error (class in pisa.stages.utils.fix_error)": [[21, "pisa.stages.utils.fix_error.fix_error", false]], "fix_oppo_flux() (in module pisa.core.events_pi)": [[4, "pisa.core.events_pi.fix_oppo_flux", false]], "fixed (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.fixed", false]], "flav (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.flav", false]], "flav_bar_str_mapping (in module pisa.stages.absorption.earth_absorption)": [[7, "pisa.stages.absorption.earth_absorption.FLAV_BAR_STR_MAPPING", false]], "flav_re (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.FLAV_RE", false]], "flav_re (pisa.utils.flavint.nuflavintgroup attribute)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.FLAV_RE", false]], "flavint_groups (pisa.core.events.events property)": [[4, "pisa.core.events.Events.flavint_groups", false]], "flavint_groups (pisa.utils.flavint.flavintdatagroup property)": [[23, "pisa.utils.flavInt.FlavIntDataGroup.flavint_groups", false]], "flavint_re (pisa.utils.flavint.nuflavintgroup attribute)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.FLAVINT_RE", false]], "flavintdata (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.FlavIntData", false]], "flavintdatagroup (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.FlavIntDataGroup", false]], "flavintgroupsfromstring() (in module pisa.utils.flavint)": [[23, "pisa.utils.flavInt.flavintGroupsFromString", false]], "flavints (pisa.utils.flavint.flavintdata property)": [[23, "pisa.utils.flavInt.FlavIntData.flavints", false]], "flavints (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.flavints", false]], "flavints_present (pisa.core.events.events property)": [[4, "pisa.core.events.Events.flavints_present", false]], "flavs (pisa.utils.flavint.flavintdata property)": [[23, "pisa.utils.flavInt.FlavIntData.flavs", false]], "flavs (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.flavs", false]], "float32 (class in pisa)": [[2, "pisa.float32", false]], "float64 (class in pisa)": [[2, "pisa.float64", false]], "fluctuate() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.fluctuate", false]], "fluctuate() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.fluctuate", false]], "fluctuate() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.fluctuate", false]], "fork_servers() (in module pisa.utils.llh_server)": [[23, "pisa.utils.llh_server.fork_servers", false]], "format_num() (in module pisa.utils.format)": [[23, "pisa.utils.format.format_num", false]], "free (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.free", false]], "freedom_hdf5_loader (class in pisa.stages.data.freedom_hdf5_loader)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader", false]], "from_cfg() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.from_cfg", false]], "from_file() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.from_file", false]], "from_hdf() (in module pisa.utils.hdf)": [[23, "pisa.utils.hdf.from_hdf", false]], "from_json() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.from_json", false]], "from_json() (pisa.core.binning.multidimbinning class method)": [[4, "pisa.core.binning.MultiDimBinning.from_json", false]], "from_json() (pisa.core.binning.onedimbinning class method)": [[4, "pisa.core.binning.OneDimBinning.from_json", false]], "from_json() (pisa.core.map.map class method)": [[4, "pisa.core.map.Map.from_json", false]], "from_json() (pisa.core.map.mapset class method)": [[4, "pisa.core.map.MapSet.from_json", false]], "from_json() (pisa.core.param.param class method)": [[4, "pisa.core.param.Param.from_json", false]], "from_json() (pisa.core.param.paramset class method)": [[4, "pisa.core.param.ParamSet.from_json", false]], "from_json() (pisa.utils.callable.funct class method)": [[23, "pisa.utils.callable.Funct.from_json", false]], "from_json() (pisa.utils.callable.ops class method)": [[23, "pisa.utils.callable.OPS.from_json", false]], "from_json() (pisa.utils.callable.var class method)": [[23, "pisa.utils.callable.Var.from_json", false]], "from_pickle() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.from_pickle", false]], "from_state() (pisa.core.param.derivedparam class method)": [[4, "pisa.core.param.DerivedParam.from_state", false]], "from_state() (pisa.utils.callable.funct class method)": [[23, "pisa.utils.callable.Funct.from_state", false]], "from_state() (pisa.utils.callable.ops class method)": [[23, "pisa.utils.callable.OPS.from_state", false]], "from_state() (pisa.utils.callable.var class method)": [[23, "pisa.utils.callable.Var.from_state", false]], "from_state() (pisa.utils.hypersurface.hypersurface.hypersurface class method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.from_state", false]], "from_state() (pisa.utils.hypersurface.hypersurface.hypersurfaceparam class method)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.from_state", false]], "fromfile() (pisa.utils.fisher_matrix.fishermatrix class method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.fromFile", false]], "fromkeys() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.fromkeys", false]], "frompapafile() (pisa.utils.fisher_matrix.fishermatrix class method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.fromPaPAFile", false]], "fronebius_nearest_psd() (in module pisa.utils.matrix)": [[23, "pisa.utils.matrix.fronebius_nearest_psd", false]], "fsort() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.fsort", false]], "ftype (in module pisa)": [[2, "pisa.FTYPE", false]], "ftype (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.ftype", false]], "ftype_prec (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.FTYPE_PREC", false]], "full() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.full", false]], "full_comparison (pisa.core.map.map property)": [[4, "pisa.core.map.Map.full_comparison", false]], "full_hash (pisa.core.stage.stage attribute)": [[4, "pisa.core.stage.Stage.full_hash", false]], "funct (class in pisa.utils.callable)": [[23, "pisa.utils.callable.Funct", false]], "fx (in module pisa.stages.osc.prob3numba.numba_osc_hostfuncs)": [[17, "pisa.stages.osc.prob3numba.numba_osc_hostfuncs.FX", false]], "gaussians() (in module pisa.utils.gaussians)": [[23, "pisa.utils.gaussians.gaussians", false]], "gen_mat_pot_matrix_complex (pisa.stages.osc.prob3.prob3 attribute)": [[15, "pisa.stages.osc.prob3.prob3.gen_mat_pot_matrix_complex", false]], "general_section_name (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.GENERAL_SECTION_NAME", false]], "generalized_llh_params (class in pisa.stages.likelihood.generalized_llh_params)": [[14, "pisa.stages.likelihood.generalized_llh_params.generalized_llh_params", false]], "generalized_poisson_llh() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.generalized_poisson_llh", false]], "generalized_poisson_llh() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.generalized_poisson_llh", false]], "genie_sys (class in pisa.stages.xsec.genie_sys)": [[22, "pisa.stages.xsec.genie_sys.genie_sys", false]], "get() (pisa.core.param.paramselector method)": [[4, "pisa.core.param.ParamSelector.get", false]], "get_bar_ssep() (in module pisa.utils.flavint)": [[23, "pisa.utils.flavInt.get_bar_ssep", false]], "get_data() (pisa.utils.data_proc_params.dataprocparams method)": [[23, "pisa.utils.data_proc_params.DataProcParams.get_data", false]], "get_energy_range() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_energy_range", false]], "get_energy_range() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_energy_range", false]], "get_fit_coefft() (pisa.utils.hypersurface.hypersurface.hypersurfaceparam method)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.get_fit_coefft", false]], "get_fit_coefft_idx() (pisa.utils.hypersurface.hypersurface.hypersurfaceparam method)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.get_fit_coefft_idx", false]], "get_flavints() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_flavints", false]], "get_flavints() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_flavints", false]], "get_flavs() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_flavs", false]], "get_flavs() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_flavs", false]], "get_hist() (in module pisa.utils.kde_hist)": [[23, "pisa.utils.kde_hist.get_hist", false]], "get_hist() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.get_hist", false]], "get_hypersurface() (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator method)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.get_hypersurface", false]], "get_incomplete_job_idx() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.get_incomplete_job_idx", false]], "get_integrated_map() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.get_integrated_map", false]], "get_integrated_map() (pisa.utils.spline.spline method)": [[23, "pisa.utils.spline.Spline.get_integrated_map", false]], "get_llh() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.get_llh", false]], "get_llh_barlow_bin() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.get_llh_barlow_bin", false]], "get_llh_poisson() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.get_llh_poisson", false]], "get_map() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.get_map", false]], "get_map() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.get_map", false]], "get_map() (pisa.utils.spline.spline method)": [[23, "pisa.utils.spline.Spline.get_map", false]], "get_mapset() (pisa.core.container.containerset method)": [[4, "pisa.core.container.ContainerSet.get_mapset", false]], "get_nominal_mask() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.get_nominal_mask", false]], "get_num_gen() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_num_gen", false]], "get_num_gen() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_num_gen", false]], "get_on_axis_mask() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.get_on_axis_mask", false]], "get_outputs() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.get_outputs", false]], "get_outputs() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.get_outputs", false]], "get_outputs() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.get_outputs", false]], "get_pid_and_interaction_type() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.get_pid_and_interaction_type", false]], "get_plot() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.get_plot", false]], "get_prior_bounds() (in module pisa.core.prior)": [[4, "pisa.core.prior.get_prior_bounds", false]], "get_random_state() (in module pisa.utils.random_numbers)": [[23, "pisa.utils.random_numbers.get_random_state", false]], "get_single_plots() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.get_single_plots", false]], "get_spectral_index() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_spectral_index", false]], "get_spectral_index() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_spectral_index", false]], "get_spline() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.get_spline", false]], "get_transition_matrix() (in module pisa.stages.osc.prob3numba.numba_osc_kernels)": [[17, "pisa.stages.osc.prob3numba.numba_osc_kernels.get_transition_matrix", false]], "get_valid_filename() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.get_valid_filename", false]], "get_version() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.get_version", false]], "get_xs_ratio_integral() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.get_xs_ratio_integral", false]], "get_xs_ratio_value() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.get_xs_ratio_value", false]], "get_xs_value() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.get_xs_value", false]], "get_xsec() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_xsec", false]], "get_xsec() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_xsec", false]], "get_xsec_version() (pisa.utils.mcsimrunsettings.detmcsimrunssettings method)": [[23, "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings.get_xsec_version", false]], "get_xsec_version() (pisa.utils.mcsimrunsettings.mcsimrunsettings method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.get_xsec_version", false]], "getbestfit() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getBestFit", false]], "getcorrelation() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getCorrelation", false]], "getcovariance() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getCovariance", false]], "geterrorellipse() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getErrorEllipse", false]], "getlabel() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getLabel", false]], "getnode() (pisa.utils.hdfchain.hdfchain method)": [[23, "pisa.utils.hdfchain.HDFChain.getNode", false]], "getparameterindex() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getParameterIndex", false]], "getprior() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getPrior", false]], "getpriordict() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getPriorDict", false]], "getsigma() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getSigma", false]], "getsigmanopriors() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getSigmaNoPriors", false]], "getsigmastatistical() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getSigmaStatistical", false]], "getsigmasystematic() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getSigmaSystematic", false]], "getvariance() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.getVariance", false]], "globes (class in pisa.stages.osc.globes)": [[15, "pisa.stages.osc.globes.globes", false]], "gradient() (pisa.utils.hypersurface.hypersurface.hypersurfaceparam method)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.gradient", false]], "grid (class in pisa.stages.data.grid)": [[11, "pisa.stages.data.grid.grid", false]], "group_flavs_by_int_type() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.group_flavs_by_int_type", false]], "has_derived (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.has_derived", false]], "hash (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.hash", false]], "hash (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.hash", false]], "hash (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.hash", false]], "hash (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.hash", false]], "hash (pisa.core.events.data property)": [[4, "pisa.core.events.Data.hash", false]], "hash (pisa.core.events.events property)": [[4, "pisa.core.events.Events.hash", false]], "hash (pisa.core.map.map property)": [[4, "pisa.core.map.Map.hash", false]], "hash (pisa.core.map.mapset property)": [[4, "pisa.core.map.MapSet.hash", false]], "hash (pisa.core.param.param property)": [[4, "pisa.core.param.Param.hash", false]], "hash (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.hash", false]], "hash (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.hash", false]], "hash (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.hash", false]], "hash (pisa.utils.config_parser.pisaconfigparser property)": [[23, "pisa.utils.config_parser.PISAConfigParser.hash", false]], "hash (pisa.utils.spline.spline property)": [[23, "pisa.utils.spline.Spline.hash", false]], "hash2hex() (in module pisa.utils.format)": [[23, "pisa.utils.format.hash2hex", false]], "hash_file() (in module pisa.utils.hash)": [[23, "pisa.utils.hash.hash_file", false]], "hash_maps() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.hash_maps", false]], "hash_obj() (in module pisa.utils.hash)": [[23, "pisa.utils.hash.hash_obj", false]], "hash_sigfigs (in module pisa)": [[2, "pisa.HASH_SIGFIGS", false]], "hashable_state (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.hashable_state", false]], "hashable_state (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.hashable_state", false]], "hashable_state (pisa.core.map.map property)": [[4, "pisa.core.map.Map.hashable_state", false]], "hashes (pisa.core.map.mapset property)": [[4, "pisa.core.map.MapSet.hashes", false]], "hdfchain (class in pisa.utils.hdfchain)": [[23, "pisa.utils.hdfchain.HDFChain", false]], "hdftableproxy (class in pisa.utils.hdfchain)": [[23, "pisa.utils.hdfchain.HDFTableProxy", false]], "hillasg (class in pisa.stages.flux.hillasg)": [[13, "pisa.stages.flux.hillasg.hillasg", false]], "hist (class in pisa.stages.utils.hist)": [[21, "pisa.stages.utils.hist.hist", false]], "hist (pisa.core.map.map property)": [[4, "pisa.core.map.Map.hist", false]], "histogram() (in module pisa.core.translation)": [[4, "pisa.core.translation.histogram", false]], "histogram() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.histogram", false]], "histogram() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.histogram", false]], "histogram_set() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.histogram_set", false]], "honda_ip (class in pisa.stages.flux.honda_ip)": [[13, "pisa.stages.flux.honda_ip.honda_ip", false]], "hr_range_formatter() (in module pisa.utils.format)": [[23, "pisa.utils.format.hr_range_formatter", false]], "hrbool2bool() (in module pisa.utils.format)": [[23, "pisa.utils.format.hrbool2bool", false]], "hrlist2list() (in module pisa.utils.format)": [[23, "pisa.utils.format.hrlist2list", false]], "hrlol2lol() (in module pisa.utils.format)": [[23, "pisa.utils.format.hrlol2lol", false]], "hypersurface (class in pisa.utils.hypersurface.hypersurface)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface", false]], "hypersurfaceinterpolator (class in pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator", false]], "hypersurfaceparam (class in pisa.utils.hypersurface.hypersurface)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam", false]], "hypersurfaces (class in pisa.stages.discr_sys.hypersurfaces)": [[12, "pisa.stages.discr_sys.hypersurfaces.hypersurfaces", false]], "id_dupes() (pisa.utils.flavint.flavintdata method)": [[23, "pisa.utils.flavInt.FlavIntData.id_dupes", false]], "ignore (pisa.utils.flavint.inttype attribute)": [[23, "pisa.utils.flavInt.IntType.IGNORE", false]], "ignore (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.IGNORE", false]], "ignore (pisa.utils.flavint.nuflavintgroup attribute)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.IGNORE", false]], "imul() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.imul", false]], "imul_and_scale() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.imul_and_scale", false]], "inbounds_criteria (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.inbounds_criteria", false]], "inbounds_criteria (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.inbounds_criteria", false]], "include_as_re (pisa.utils.config_parser.pisaconfigparser attribute)": [[23, "pisa.utils.config_parser.PISAConfigParser.INCLUDE_AS_RE", false]], "include_attrs_for_hashes() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.include_attrs_for_hashes", false]], "include_re (pisa.utils.config_parser.pisaconfigparser attribute)": [[23, "pisa.utils.config_parser.PISAConfigParser.INCLUDE_RE", false]], "index() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.index", false]], "index() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.index", false]], "index() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.index", false]], "index() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.index", false]], "index() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.index", false]], "index2coord() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.index2coord", false]], "indexer() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.indexer", false]], "info (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.INFO", false]], "init_fig() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.init_fig", false]], "init_params() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.init_params", false]], "initialize_weights() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.initialize_weights", false]], "initialized (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.initialized", false]], "innermantle_density_scale (pisa.stages.osc.scaling_params.core_scaling_wo_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain.innermantle_density_scale", false]], "insert() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.insert", false]], "insert() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.insert", false]], "insert_bootstrap_after_data_loader() (in module pisa.stages.utils.bootstrap)": [[21, "pisa.stages.utils.bootstrap.insert_bootstrap_after_data_loader", false]], "int0 (in module pisa)": [[2, "pisa.int0", false]], "int16 (class in pisa)": [[2, "pisa.int16", false]], "int2hex() (in module pisa.utils.format)": [[23, "pisa.utils.format.int2hex", false]], "int32 (class in pisa)": [[2, "pisa.int32", false]], "int64 (class in pisa)": [[2, "pisa.int64", false]], "int8 (class in pisa)": [[2, "pisa.int8", false]], "int_type (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.int_type", false]], "interpolation_param_names (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator property)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.interpolation_param_names", false]], "interpret() (pisa.utils.flavint.nuflavintgroup static method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.interpret", false]], "interpret_data() (pisa.utils.data_proc_params.dataprocparams method)": [[23, "pisa.utils.data_proc_params.DataProcParams.interpret_data", false]], "interpret_param_subfields() (in module pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.interpret_param_subfields", false]], "interpret_quantity() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.interpret_quantity", false]], "inttype (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.IntType", false]], "is_bin_spacing_lin_uniform() (pisa.core.binning.onedimbinning static method)": [[4, "pisa.core.binning.OneDimBinning.is_bin_spacing_lin_uniform", false]], "is_bin_spacing_log_uniform() (pisa.core.binning.onedimbinning static method)": [[4, "pisa.core.binning.OneDimBinning.is_bin_spacing_log_uniform", false]], "is_binning() (in module pisa.core.binning)": [[4, "pisa.core.binning.is_binning", false]], "is_binning_ok() (pisa.core.binning.onedimbinning static method)": [[4, "pisa.core.binning.OneDimBinning.is_binning_ok", false]], "is_compat() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.is_compat", false]], "is_compat() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.is_compat", false]], "is_descending() (pisa.stages.osc.scaling_params.core_scaling_w_constrain method)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_w_constrain.is_descending", false]], "is_integer() (pisa.float32 method)": [[2, "pisa.float32.is_integer", false]], "is_integer() (pisa.float64 method)": [[2, "pisa.float64.is_integer", false]], "is_irregular (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.is_irregular", false]], "is_irregular (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.is_irregular", false]], "is_lin (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.is_lin", false]], "is_lin (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.is_lin", false]], "is_log (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.is_log", false]], "is_log (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.is_log", false]], "is_map (pisa.core.container.container property)": [[4, "pisa.core.container.Container.is_map", false]], "is_map (pisa.core.container.containerset property)": [[4, "pisa.core.container.ContainerSet.is_map", false]], "is_map (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.is_map", false]], "is_nominal (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.is_nominal", false]], "is_positive() (pisa.stages.osc.scaling_params.core_scaling_w_constrain method)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_w_constrain.is_positive", false]], "is_psd() (in module pisa.utils.matrix)": [[23, "pisa.utils.matrix.is_psd", false]], "is_tex() (in module pisa.utils.format)": [[23, "pisa.utils.format.is_tex", false]], "isbarenumeric() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.isbarenumeric", false]], "isj_bandwidth() (in module pisa.utils.vbwkde)": [[23, "pisa.utils.vbwkde.isj_bandwidth", false]], "isscalar() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.isscalar", false]], "issubset() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.issubset", false]], "issuperset() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.issuperset", false]], "isunitless() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.isunitless", false]], "isvalidname() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.isvalidname", false]], "it_re (pisa.utils.flavint.inttype attribute)": [[23, "pisa.utils.flavInt.IntType.IT_RE", false]], "it_re (pisa.utils.flavint.nuflavintgroup attribute)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.IT_RE", false]], "item() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.item", false]], "items() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.items", false]], "iterbins() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.iterbins", false]], "iterbins() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.iterbins", false]], "iterbins() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.iterbins", false]], "itercoords() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.itercoords", false]], "itercoords() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.itercoords", false]], "iterdims() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.iterdims", false]], "iteredgetuples() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.iteredgetuples", false]], "iteredgetuples() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.iteredgetuples", false]], "ito() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.ito", false]], "ito() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.ito", false]], "ito() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.ito", false]], "itruediv() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.itruediv", false]], "itype (in module pisa)": [[2, "pisa.ITYPE", false]], "ix (in module pisa.stages.osc.prob3numba.numba_osc_hostfuncs)": [[17, "pisa.stages.osc.prob3numba.numba_osc_hostfuncs.IX", false]], "joined_string (pisa.core.events.events property)": [[4, "pisa.core.events.Events.joined_string", false]], "json_array_numpy() (pisa.utils.jsons.numpydecoder method)": [[23, "pisa.utils.jsons.NumpyDecoder.json_array_numpy", false]], "json_string() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.json_string", false]], "kde (class in pisa.stages.utils.kde)": [[21, "pisa.stages.utils.kde.kde", false]], "kde_histogramdd() (in module pisa.utils.kde_hist)": [[23, "pisa.utils.kde_hist.kde_histogramdd", false]], "keep_inbounds() (pisa.core.events_pi.eventspi method)": [[4, "pisa.core.events_pi.EventsPi.keep_inbounds", false]], "keepinbounds() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.keepInbounds", false]], "keepinbounds() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.keepInbounds", false]], "keys (pisa.core.container.container property)": [[4, "pisa.core.container.Container.keys", false]], "keys() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.keys", false]], "kfold (class in pisa.stages.utils.kfold)": [[21, "pisa.stages.utils.kfold.kfold", false]], "label (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.label", false]], "layers (class in pisa.stages.osc.layers)": [[15, "pisa.stages.osc.layers.Layers", false]], "levels (class in pisa.utils.log)": [[23, "pisa.utils.log.Levels", false]], "likelihoods (class in pisa.utils.barlow)": [[23, "pisa.utils.barlow.Likelihoods", false]], "line_profile() (in module pisa.utils.profiler)": [[23, "pisa.utils.profiler.line_profile", false]], "link_containers() (pisa.core.container.containerset method)": [[4, "pisa.core.container.ContainerSet.link_containers", false]], "list2hrlist() (in module pisa.utils.format)": [[23, "pisa.utils.format.list2hrlist", false]], "llh() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.llh", false]], "llh() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.llh", false]], "llh() (pisa.core.prior.prior method)": [[4, "pisa.core.prior.Prior.llh", false]], "llh_metrics (in module pisa.utils.stats)": [[23, "pisa.utils.stats.LLH_METRICS", false]], "llh_per_map() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.llh_per_map", false]], "llh_total() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.llh_total", false]], "load() (pisa.utils.cross_sections.crosssections static method)": [[23, "pisa.utils.cross_sections.CrossSections.load", false]], "load_2d_bartol_table() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.load_2d_bartol_table", false]], "load_2d_honda_table() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.load_2d_honda_table", false]], "load_2d_table() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.load_2d_table", false]], "load_3d_honda_table() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.load_3d_honda_table", false]], "load_3d_table() (in module pisa.utils.flux_weights)": [[23, "pisa.utils.flux_weights.load_3d_table", false]], "load_and_modify_pipeline_cfg() (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.load_and_modify_pipeline_cfg", false]], "load_events() (pisa.stages.data.simple_data_loader.simple_data_loader method)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader.load_events", false]], "load_events_file() (pisa.core.events_pi.eventspi method)": [[4, "pisa.core.events_pi.EventsPi.load_events_file", false]], "load_hdf5_file() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.load_hdf5_file", false]], "load_hypersurfaces() (in module pisa.utils.hypersurface.hypersurface)": [[24, "pisa.utils.hypersurface.hypersurface.load_hypersurfaces", false]], "load_interpolated_hypersurfaces() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.load_interpolated_hypersurfaces", false]], "load_root_file() (pisa.utils.cross_sections.crosssections static method)": [[23, "pisa.utils.cross_sections.CrossSections.load_root_file", false]], "loads() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.loads", false]], "location (pisa.utils.config_parser.mutablemultifileiterator property)": [[23, "pisa.utils.config_parser.MutableMultiFileIterator.location", false]], "log() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.log", false]], "log() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.log", false]], "log10() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.log10", false]], "log10() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.log10", false]], "log_poisson() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.log_poisson", false]], "log_smear() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.log_smear", false]], "logplot() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.logplot", false]], "lookup() (in module pisa.core.translation)": [[4, "pisa.core.translation.lookup", false]], "lookup_indices() (in module pisa.core.bin_indexing)": [[4, "pisa.core.bin_indexing.lookup_indices", false]], "lriparams (class in pisa.stages.osc.lri_params)": [[15, "pisa.stages.osc.lri_params.LRIParams", false]], "m (pisa.core.param.param property)": [[4, "pisa.core.param.Param.m", false]], "m_as() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.m_as", false]], "magnitude (pisa.core.param.param property)": [[4, "pisa.core.param.Param.magnitude", false]], "main() (in module pisa.core.detectors)": [[4, "pisa.core.detectors.main", false]], "main() (in module pisa.core.distribution_maker)": [[4, "pisa.core.distribution_maker.main", false]], "main() (in module pisa.core.events_pi)": [[4, "pisa.core.events_pi.main", false]], "main() (in module pisa.core.pipeline)": [[4, "pisa.core.pipeline.main", false]], "main() (in module pisa.scripts.add_flux_to_events_file)": [[5, "pisa.scripts.add_flux_to_events_file.main", false]], "main() (in module pisa.scripts.compare)": [[5, "pisa.scripts.compare.main", false]], "main() (in module pisa.scripts.convert_config_format)": [[5, "pisa.scripts.convert_config_format.main", false]], "main() (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.main", false]], "main() (in module pisa.scripts.make_events_file)": [[5, "pisa.scripts.make_events_file.main", false]], "main() (in module pisa.scripts.make_nufit_theta23_spline_priors)": [[5, "pisa.scripts.make_nufit_theta23_spline_priors.main", false]], "main() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.main", false]], "main() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.main", false]], "main() (in module pisa.stages.osc.prob3numba.test_numba)": [[17, "pisa.stages.osc.prob3numba.test_numba.main", false]], "main() (in module pisa.utils.llh_server)": [[23, "pisa.utils.llh_server.main", false]], "make_2d_flux_map() (in module pisa.stages.flux.daemon_flux)": [[13, "pisa.stages.flux.daemon_flux.make_2d_flux_map", false]], "make_delta_map() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.make_delta_map", false]], "make_prior_dict() (in module pisa.scripts.make_nufit_theta23_spline_priors)": [[5, "pisa.scripts.make_nufit_theta23_spline_priors.make_prior_dict", false]], "make_ratio_map() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.make_ratio_map", false]], "make_valid_python_name() (in module pisa.utils.format)": [[23, "pisa.utils.format.make_valid_python_name", false]], "makeeventsfile() (in module pisa.scripts.make_events_file)": [[5, "pisa.scripts.make_events_file.makeEventsFile", false]], "manual_test_crosssections() (in module pisa.utils.cross_sections)": [[23, "pisa.utils.cross_sections.manual_test_CrossSections", false]], "map (class in pisa.core.map)": [[4, "pisa.core.map.Map", false]], "maperror_logmsg() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.maperror_logmsg", false]], "mapset (class in pisa.core.map)": [[4, "pisa.core.map.MapSet", false]], "mark_changed() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.mark_changed", false]], "mark_changed() (pisa.core.container.virtualcontainer method)": [[4, "pisa.core.container.VirtualContainer.mark_changed", false]], "mark_valid() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.mark_valid", false]], "mark_valid() (pisa.core.container.virtualcontainer method)": [[4, "pisa.core.container.VirtualContainer.mark_valid", false]], "mask (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.mask", false]], "mask_hash (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.mask_hash", false]], "mass_scaling (class in pisa.stages.osc.scaling_params)": [[15, "pisa.stages.osc.scaling_params.Mass_scaling", false]], "mat_dot_mat_subscr (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.MAT_DOT_MAT_SUBSCR", false]], "matrix_dot_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.matrix_dot_matrix", false]], "matrix_dot_vector() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.matrix_dot_vector", false]], "max_layers (pisa.stages.osc.layers.layers attribute)": [[15, "pisa.stages.osc.layers.Layers.max_layers", false]], "mc_histograms (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.mc_histograms", false]], "mceq_barr (class in pisa.stages.flux.mceq_barr)": [[13, "pisa.stages.flux.mceq_barr.mceq_barr", false]], "mceq_barr_red (class in pisa.stages.flux.mceq_barr_red)": [[13, "pisa.stages.flux.mceq_barr_red.mceq_barr_red", false]], "mcllh_eff() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.mcllh_eff", false]], "mcllh_eff() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.mcllh_eff", false]], "mcllh_mean() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.mcllh_mean", false]], "mcllh_mean() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.mcllh_mean", false]], "mcsimrunsettings (class in pisa.utils.mcsimrunsettings)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings", false]], "meows_loader (class in pisa.stages.data.meows_loader)": [[11, "pisa.stages.data.meows_loader.meows_loader", false]], "meshgrid() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.meshgrid", false]], "meta_eq() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.meta_eq", false]], "meta_eq() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.meta_eq", false]], "metric_per_map() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.metric_per_map", false]], "metric_total() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.metric_total", false]], "metric_total() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.metric_total", false]], "middlemantle_density_scale (pisa.stages.osc.scaling_params.core_scaling_wo_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain.middlemantle_density_scale", false]], "midpoints (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.midpoints", false]], "midpoints (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.midpoints", false]], "minimizers_using_constraints (in module pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.MINIMIZERS_USING_CONSTRAINTS", false]], "minimizers_using_symm_grad (in module pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.MINIMIZERS_USING_SYMM_GRAD", false]], "mix_matrix (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.mix_matrix", false]], "mix_matrix (pisa.stages.osc.osc_params.oscparams property)": [[15, "id8", false]], "mix_matrix_complex (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.mix_matrix_complex", false]], "mix_matrix_complex (pisa.stages.osc.osc_params.oscparams property)": [[15, "id9", false]], "mix_matrix_reparam (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.mix_matrix_reparam", false]], "mix_matrix_reparam (pisa.stages.osc.osc_params.oscparams property)": [[15, "id10", false]], "mix_matrix_reparam_complex (pisa.stages.osc.osc_params.oscparams attribute)": [[15, "pisa.stages.osc.osc_params.OscParams.mix_matrix_reparam_complex", false]], "mix_matrix_reparam_complex (pisa.stages.osc.osc_params.oscparams property)": [[15, "id11", false]], "mkdir() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.mkdir", false]], "mod_chi2() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.mod_chi2", false]], "mod_chi2() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.mod_chi2", false]], "module": [[2, "module-pisa", false], [3, "module-pisa.analysis", false], [3, "module-pisa.analysis.analysis", false], [4, "module-pisa.core", false], [4, "module-pisa.core.bin_indexing", false], [4, "module-pisa.core.binning", false], [4, "module-pisa.core.container", false], [4, "module-pisa.core.detectors", false], [4, "module-pisa.core.distribution_maker", false], [4, "module-pisa.core.events", false], [4, "module-pisa.core.events_pi", false], [4, "module-pisa.core.map", false], [4, "module-pisa.core.param", false], [4, "module-pisa.core.pipeline", false], [4, "module-pisa.core.prior", false], [4, "module-pisa.core.stage", false], [4, "module-pisa.core.translation", false], [5, "module-pisa.scripts", false], [5, "module-pisa.scripts.add_flux_to_events_file", false], [5, "module-pisa.scripts.compare", false], [5, "module-pisa.scripts.convert_config_format", false], [5, "module-pisa.scripts.fit_hypersurfaces", false], [5, "module-pisa.scripts.make_events_file", false], [5, "module-pisa.scripts.make_nufit_theta23_spline_priors", false], [5, "module-pisa.scripts.test_flux_weights", false], [6, "module-pisa.stages", false], [7, "module-pisa.stages.absorption", false], [7, "module-pisa.stages.absorption.earth_absorption", false], [8, "module-pisa.stages.aeff", false], [8, "module-pisa.stages.aeff.aeff", false], [8, "module-pisa.stages.aeff.weight", false], [8, "module-pisa.stages.aeff.weight_hnl", false], [9, "module-pisa.stages.background", false], [9, "module-pisa.stages.background.atm_muons", false], [11, "module-pisa.stages.data", false], [11, "module-pisa.stages.data.csv_data_hist", false], [11, "module-pisa.stages.data.csv_icc_hist", false], [11, "module-pisa.stages.data.csv_loader", false], [11, "module-pisa.stages.data.freedom_hdf5_loader", false], [11, "module-pisa.stages.data.grid", false], [11, "module-pisa.stages.data.meows_loader", false], [11, "module-pisa.stages.data.simple_data_loader", false], [11, "module-pisa.stages.data.simple_signal", false], [11, "module-pisa.stages.data.sqlite_loader", false], [11, "module-pisa.stages.data.toy_event_generator", false], [12, "module-pisa.stages.discr_sys", false], [12, "module-pisa.stages.discr_sys.hypersurfaces", false], [12, "module-pisa.stages.discr_sys.ultrasurfaces", false], [13, "module-pisa.stages.flux", false], [13, "module-pisa.stages.flux.astrophysical", false], [13, "module-pisa.stages.flux.barr_simple", false], [13, "module-pisa.stages.flux.daemon_flux", false], [13, "module-pisa.stages.flux.hillasg", false], [13, "module-pisa.stages.flux.honda_ip", false], [13, "module-pisa.stages.flux.mceq_barr", false], [13, "module-pisa.stages.flux.mceq_barr_red", false], [14, "module-pisa.stages.likelihood", false], [14, "module-pisa.stages.likelihood.generalized_llh_params", false], [15, "module-pisa.stages.osc", false], [15, "module-pisa.stages.osc.decay_params", false], [15, "module-pisa.stages.osc.decoherence", false], [15, "module-pisa.stages.osc.globes", false], [15, "module-pisa.stages.osc.layers", false], [15, "module-pisa.stages.osc.lri_params", false], [15, "module-pisa.stages.osc.nsi_params", false], [15, "module-pisa.stages.osc.osc_params", false], [15, "module-pisa.stages.osc.prob3", false], [15, "module-pisa.stages.osc.scaling_params", false], [15, "module-pisa.stages.osc.two_nu_osc", false], [17, "module-pisa.stages.osc.prob3numba", false], [17, "module-pisa.stages.osc.prob3numba.numba_osc_hostfuncs", false], [17, "module-pisa.stages.osc.prob3numba.numba_osc_kernels", false], [17, "module-pisa.stages.osc.prob3numba.numba_osc_tests", false], [17, "module-pisa.stages.osc.prob3numba.test_numba", false], [18, "module-pisa.stages.pid", false], [18, "module-pisa.stages.pid.shift_scale_pid", false], [19, "module-pisa.stages.reco", false], [19, "module-pisa.stages.reco.resolutions", false], [19, "module-pisa.stages.reco.simple_param", false], [21, "module-pisa.stages.utils", false], [21, "module-pisa.stages.utils.add_indices", false], [21, "module-pisa.stages.utils.adhoc_sys", false], [21, "module-pisa.stages.utils.bootstrap", false], [21, "module-pisa.stages.utils.fix_error", false], [21, "module-pisa.stages.utils.hist", false], [21, "module-pisa.stages.utils.kde", false], [21, "module-pisa.stages.utils.kfold", false], [21, "module-pisa.stages.utils.resample", false], [21, "module-pisa.stages.utils.set_variance", false], [22, "module-pisa.stages.xsec", false], [22, "module-pisa.stages.xsec.dis_sys", false], [22, "module-pisa.stages.xsec.genie_sys", false], [22, "module-pisa.stages.xsec.nutau_xsec", false], [23, "module-pisa.utils", false], [23, "module-pisa.utils.barlow", false], [23, "module-pisa.utils.barr_parameterization", false], [23, "module-pisa.utils.callable", false], [23, "module-pisa.utils.comparisons", false], [23, "module-pisa.utils.config_parser", false], [23, "module-pisa.utils.cross_sections", false], [23, "module-pisa.utils.data_proc_params", false], [23, "module-pisa.utils.fileio", false], [23, "module-pisa.utils.fisher_matrix", false], [23, "module-pisa.utils.flavInt", false], [23, "module-pisa.utils.flux_weights", false], [23, "module-pisa.utils.format", false], [23, "module-pisa.utils.gaussians", false], [23, "module-pisa.utils.hash", false], [23, "module-pisa.utils.hdf", false], [23, "module-pisa.utils.hdfchain", false], [23, "module-pisa.utils.jsons", false], [23, "module-pisa.utils.kde_hist", false], [23, "module-pisa.utils.likelihood_functions", false], [23, "module-pisa.utils.llh_server", false], [23, "module-pisa.utils.log", false], [23, "module-pisa.utils.matrix", false], [23, "module-pisa.utils.mcSimRunSettings", false], [23, "module-pisa.utils.numba_tools", false], [23, "module-pisa.utils.plotter", false], [23, "module-pisa.utils.profiler", false], [23, "module-pisa.utils.pull_method", false], [23, "module-pisa.utils.random_numbers", false], [23, "module-pisa.utils.resources", false], [23, "module-pisa.utils.spline", false], [23, "module-pisa.utils.spline_smooth", false], [23, "module-pisa.utils.stats", false], [23, "module-pisa.utils.tests", false], [23, "module-pisa.utils.vbwkde", false], [23, "module-pisa.utils.vectorizer", false], [24, "module-pisa.utils.hypersurface", false], [24, "module-pisa.utils.hypersurface.hyper_interpolator", false], [24, "module-pisa.utils.hypersurface.hypersurface", false], [24, "module-pisa.utils.hypersurface.hypersurface_plotting", false], [25, "module-pisa.utils.llh_defs", false]], "move_to_end() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.move_to_end", false]], "mul (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.MUL", false]], "mul() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.mul", false]], "multidimbinning (class in pisa.core.binning)": [[4, "pisa.core.binning.MultiDimBinning", false]], "muons (pisa.core.events.data property)": [[4, "pisa.core.events.Data.muons", false]], "mutablemultifileiterator (class in pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.MutableMultiFileIterator", false]], "myjit() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.myjit", false]], "n_layers (pisa.stages.osc.layers.layers attribute)": [[15, "pisa.stages.osc.layers.Layers.n_layers", false]], "n_layers (pisa.stages.osc.layers.layers property)": [[15, "id4", false]], "name (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.name", false]], "name (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.name", false]], "name (pisa.core.map.map property)": [[4, "pisa.core.map.Map.name", false]], "name (pisa.core.map.mapset property)": [[4, "pisa.core.map.MapSet.name", false]], "name (pisa.utils.callable.var property)": [[23, "pisa.utils.callable.Var.name", false]], "name (pisa.utils.spline.spline property)": [[23, "pisa.utils.spline.Spline.name", false]], "name_val_dict (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.name_val_dict", false]], "namedtuple() (in module pisa)": [[2, "pisa.namedtuple", false]], "names (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.names", false]], "names (pisa.core.container.containerset property)": [[4, "pisa.core.container.ContainerSet.names", false]], "names (pisa.core.events.data property)": [[4, "pisa.core.events.Data.names", false]], "names (pisa.core.map.mapset property)": [[4, "pisa.core.map.MapSet.names", false]], "names (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.names", false]], "nc (pisa.utils.flavint.inttype property)": [[23, "pisa.utils.flavInt.IntType.nc", false]], "nc (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.nc", false]], "nc_code (pisa.utils.flavint.inttype attribute)": [[23, "pisa.utils.flavInt.IntType.NC_CODE", false]], "nc_flavints (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.nc_flavints", false]], "nc_flavs (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.nc_flavs", false]], "neutrinos (pisa.core.events.data property)": [[4, "pisa.core.events.Data.neutrinos", false]], "new_from_root() (pisa.utils.cross_sections.crosssections class method)": [[23, "pisa.utils.cross_sections.CrossSections.new_from_root", false]], "next_color() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.next_color", false]], "nofit_hypo() (pisa.analysis.analysis.analysis method)": [[3, "pisa.analysis.analysis.Analysis.nofit_hypo", false]], "noise (pisa.core.events.data property)": [[4, "pisa.core.events.Data.noise", false]], "nominal_value (pisa.core.param.param property)": [[4, "pisa.core.param.Param.nominal_value", false]], "nominal_values (pisa.core.map.map property)": [[4, "pisa.core.map.Map.nominal_values", false]], "nominal_values (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.nominal_values", false]], "nominal_values (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.nominal_values", false]], "nominal_values_hash (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.nominal_values_hash", false]], "norm_conv_poisson() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.norm_conv_poisson", false]], "normalize_values (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.normalize_values", false]], "normalize_values (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.normalize_values", false]], "normalize_values (pisa.core.map.map property)": [[4, "pisa.core.map.Map.normalize_values", false]], "normalized_state (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.normalized_state", false]], "normalized_state (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.normalized_state", false]], "normquant() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.normQuant", false]], "nsi_type (pisa.stages.osc.prob3.prob3 attribute)": [[15, "pisa.stages.osc.prob3.prob3.nsi_type", false]], "nsiparams (class in pisa.stages.osc.nsi_params)": [[15, "pisa.stages.osc.nsi_params.NSIParams", false]], "nsort() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.nsort", false]], "nsort_key_func() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.nsort_key_func", false]], "nue_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUE_CODE", false]], "nuebar_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUEBAR_CODE", false]], "nuflav (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.NuFlav", false]], "nuflavint (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.NuFlavInt", false]], "nuflavintgroup (class in pisa.utils.flavint)": [[23, "pisa.utils.flavInt.NuFlavIntGroup", false]], "num_bins (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.num_bins", false]], "num_bins (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.num_bins", false]], "num_dims (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.num_dims", false]], "num_dims (pisa.core.container.container property)": [[4, "pisa.core.container.Container.num_dims", false]], "num_entries (pisa.core.map.map property)": [[4, "pisa.core.map.Map.num_entries", false]], "num_events_per_bin (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.num_events_per_bin", false]], "num_events_per_bin (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.num_events_per_bin", false]], "num_fit_coeffts (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.num_fit_coeffts", false]], "num_fit_sets (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.num_fit_sets", false]], "num_interp_params (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator property)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.num_interp_params", false]], "numba_jit() (in module pisa)": [[2, "pisa.numba_jit", false]], "number_re (in module pisa.utils.format)": [[23, "pisa.utils.format.NUMBER_RE", false]], "number_restr (in module pisa.utils.format)": [[23, "pisa.utils.format.NUMBER_RESTR", false]], "numpydecoder (class in pisa.utils.jsons)": [[23, "pisa.utils.jsons.NumpyDecoder", false]], "numpyencoder (class in pisa.utils.jsons)": [[23, "pisa.utils.jsons.NumpyEncoder", false]], "numu_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUMU_CODE", false]], "numubar_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUMUBAR_CODE", false]], "nutau_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUTAU_CODE", false]], "nutau_xsec (class in pisa.stages.xsec.nutau_xsec)": [[22, "pisa.stages.xsec.nutau_xsec.nutau_xsec", false]], "nutaubar_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.NUTAUBAR_CODE", false]], "omp_num_threads (in module pisa)": [[2, "pisa.OMP_NUM_THREADS", false]], "onedimbinning (class in pisa.core.binning)": [[4, "pisa.core.binning.OneDimBinning", false]], "ones() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.ones", false]], "open_resource() (in module pisa.utils.resources)": [[23, "pisa.utils.resources.open_resource", false]], "ops (class in pisa.utils.callable)": [[23, "pisa.utils.callable.OPS", false]], "optionxform() (pisa.utils.config_parser.pisaconfigparser method)": [[23, "pisa.utils.config_parser.PISAConfigParser.optionxform", false]], "order() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.order", false]], "order_of_mag_to_si_prefix (in module pisa.utils.format)": [[23, "pisa.utils.format.ORDER_OF_MAG_TO_SI_PREFIX", false]], "order_str() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.order_str", false]], "ordereddict (class in pisa)": [[2, "pisa.OrderedDict", false]], "osc_probs_layers_kernel() (in module pisa.stages.osc.prob3numba.numba_osc_kernels)": [[17, "pisa.stages.osc.prob3numba.numba_osc_kernels.osc_probs_layers_kernel", false]], "oscparams (class in pisa.stages.osc.osc_params)": [[15, "pisa.stages.osc.osc_params.OscParams", false]], "oversample() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.oversample", false]], "oversample() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.oversample", false]], "param (class in pisa.core.param)": [[4, "pisa.core.param.Param", false]], "param_names (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator property)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.param_names", false]], "param_names (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.param_names", false]], "param_selections (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.param_selections", false]], "param_selections (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.param_selections", false]], "param_selections (pisa.core.param.paramselector property)": [[4, "pisa.core.param.ParamSelector.param_selections", false]], "param_selections (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.param_selections", false]], "param_selections (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.param_selections", false]], "params (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.params", false]], "params (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.params", false]], "params (pisa.core.param.paramselector property)": [[4, "pisa.core.param.ParamSelector.params", false]], "params (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.params", false]], "params (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.params", false]], "paramselector (class in pisa.core.param)": [[4, "pisa.core.param.ParamSelector", false]], "paramset (class in pisa.core.param)": [[4, "pisa.core.param.ParamSet", false]], "parse_args() (in module pisa.core.detectors)": [[4, "pisa.core.detectors.parse_args", false]], "parse_args() (in module pisa.core.distribution_maker)": [[4, "pisa.core.distribution_maker.parse_args", false]], "parse_args() (in module pisa.core.pipeline)": [[4, "pisa.core.pipeline.parse_args", false]], "parse_args() (in module pisa.scripts.compare)": [[5, "pisa.scripts.compare.parse_args", false]], "parse_args() (in module pisa.scripts.convert_config_format)": [[5, "pisa.scripts.convert_config_format.parse_args", false]], "parse_args() (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.parse_args", false]], "parse_args() (in module pisa.scripts.make_events_file)": [[5, "pisa.scripts.make_events_file.parse_args", false]], "parse_fit_config() (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.parse_fit_config", false]], "parse_param() (in module pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.parse_param", false]], "parse_pipeline_config() (in module pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.parse_pipeline_config", false]], "parse_quantity() (in module pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.parse_quantity", false]], "parse_string_literal() (in module pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.parse_string_literal", false]], "part_code (pisa.utils.flavint.nuflav attribute)": [[23, "pisa.utils.flavInt.NuFlav.PART_CODE", false]], "particle (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.particle", false]], "particle (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.particle", false]], "particles (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.particles", false]], "phi12 (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.phi12", false]], "phi13 (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.phi13", false]], "phi23 (pisa.stages.osc.nsi_params.vacuumlikensiparams property)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams.phi23", false]], "pidx() (pisa.utils.flavint.nuflav method)": [[23, "pisa.utils.flavInt.NuFlav.pidx", false]], "pidx() (pisa.utils.flavint.nuflavint method)": [[23, "pisa.utils.flavInt.NuFlavInt.pidx", false]], "pipeline (class in pisa.core.pipeline)": [[4, "pisa.core.pipeline.Pipeline", false]], "pipeline_cfg_from_states() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.pipeline_cfg_from_states", false]], "pipelines (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.pipelines", false]], "pisa": [[2, "module-pisa", false]], "pisa.analysis": [[3, "module-pisa.analysis", false]], "pisa.analysis.analysis": [[3, "module-pisa.analysis.analysis", false]], "pisa.core": [[4, "module-pisa.core", false]], "pisa.core.bin_indexing": [[4, "module-pisa.core.bin_indexing", false]], "pisa.core.binning": [[4, "module-pisa.core.binning", false]], "pisa.core.container": [[4, "module-pisa.core.container", false]], "pisa.core.detectors": [[4, "module-pisa.core.detectors", false]], "pisa.core.distribution_maker": [[4, "module-pisa.core.distribution_maker", false]], "pisa.core.events": [[4, "module-pisa.core.events", false]], "pisa.core.events_pi": [[4, "module-pisa.core.events_pi", false]], "pisa.core.map": [[4, "module-pisa.core.map", false]], "pisa.core.param": [[4, "module-pisa.core.param", false]], "pisa.core.pipeline": [[4, "module-pisa.core.pipeline", false]], "pisa.core.prior": [[4, "module-pisa.core.prior", false]], "pisa.core.stage": [[4, "module-pisa.core.stage", false]], "pisa.core.translation": [[4, "module-pisa.core.translation", false]], "pisa.scripts": [[5, "module-pisa.scripts", false]], "pisa.scripts.add_flux_to_events_file": [[5, "module-pisa.scripts.add_flux_to_events_file", false]], "pisa.scripts.compare": [[5, "module-pisa.scripts.compare", false]], "pisa.scripts.convert_config_format": [[5, "module-pisa.scripts.convert_config_format", false]], "pisa.scripts.fit_hypersurfaces": [[5, "module-pisa.scripts.fit_hypersurfaces", false]], "pisa.scripts.make_events_file": [[5, "module-pisa.scripts.make_events_file", false]], "pisa.scripts.make_nufit_theta23_spline_priors": [[5, "module-pisa.scripts.make_nufit_theta23_spline_priors", false]], "pisa.scripts.test_flux_weights": [[5, "module-pisa.scripts.test_flux_weights", false]], "pisa.stages": [[6, "module-pisa.stages", false]], "pisa.stages.absorption": [[7, "module-pisa.stages.absorption", false]], "pisa.stages.absorption.earth_absorption": [[7, "module-pisa.stages.absorption.earth_absorption", false]], "pisa.stages.aeff": [[8, "module-pisa.stages.aeff", false]], "pisa.stages.aeff.aeff": [[8, "module-pisa.stages.aeff.aeff", false]], "pisa.stages.aeff.weight": [[8, "module-pisa.stages.aeff.weight", false]], "pisa.stages.aeff.weight_hnl": [[8, "module-pisa.stages.aeff.weight_hnl", false]], "pisa.stages.background": [[9, "module-pisa.stages.background", false]], "pisa.stages.background.atm_muons": [[9, "module-pisa.stages.background.atm_muons", false]], "pisa.stages.data": [[11, "module-pisa.stages.data", false]], "pisa.stages.data.csv_data_hist": [[11, "module-pisa.stages.data.csv_data_hist", false]], "pisa.stages.data.csv_icc_hist": [[11, "module-pisa.stages.data.csv_icc_hist", false]], "pisa.stages.data.csv_loader": [[11, "module-pisa.stages.data.csv_loader", false]], "pisa.stages.data.freedom_hdf5_loader": [[11, "module-pisa.stages.data.freedom_hdf5_loader", false]], "pisa.stages.data.grid": [[11, "module-pisa.stages.data.grid", false]], "pisa.stages.data.meows_loader": [[11, "module-pisa.stages.data.meows_loader", false]], "pisa.stages.data.simple_data_loader": [[11, "module-pisa.stages.data.simple_data_loader", false]], "pisa.stages.data.simple_signal": [[11, "module-pisa.stages.data.simple_signal", false]], "pisa.stages.data.sqlite_loader": [[11, "module-pisa.stages.data.sqlite_loader", false]], "pisa.stages.data.toy_event_generator": [[11, "module-pisa.stages.data.toy_event_generator", false]], "pisa.stages.discr_sys": [[12, "module-pisa.stages.discr_sys", false]], "pisa.stages.discr_sys.hypersurfaces": [[12, "module-pisa.stages.discr_sys.hypersurfaces", false]], "pisa.stages.discr_sys.ultrasurfaces": [[12, "module-pisa.stages.discr_sys.ultrasurfaces", false]], "pisa.stages.flux": [[13, "module-pisa.stages.flux", false]], "pisa.stages.flux.astrophysical": [[13, "module-pisa.stages.flux.astrophysical", false]], "pisa.stages.flux.barr_simple": [[13, "module-pisa.stages.flux.barr_simple", false]], "pisa.stages.flux.daemon_flux": [[13, "module-pisa.stages.flux.daemon_flux", false]], "pisa.stages.flux.hillasg": [[13, "module-pisa.stages.flux.hillasg", false]], "pisa.stages.flux.honda_ip": [[13, "module-pisa.stages.flux.honda_ip", false]], "pisa.stages.flux.mceq_barr": [[13, "module-pisa.stages.flux.mceq_barr", false]], "pisa.stages.flux.mceq_barr_red": [[13, "module-pisa.stages.flux.mceq_barr_red", false]], "pisa.stages.likelihood": [[14, "module-pisa.stages.likelihood", false]], "pisa.stages.likelihood.generalized_llh_params": [[14, "module-pisa.stages.likelihood.generalized_llh_params", false]], "pisa.stages.osc": [[15, "module-pisa.stages.osc", false]], "pisa.stages.osc.decay_params": [[15, "module-pisa.stages.osc.decay_params", false]], "pisa.stages.osc.decoherence": [[15, "module-pisa.stages.osc.decoherence", false]], "pisa.stages.osc.globes": [[15, "module-pisa.stages.osc.globes", false]], "pisa.stages.osc.layers": [[15, "module-pisa.stages.osc.layers", false]], "pisa.stages.osc.lri_params": [[15, "module-pisa.stages.osc.lri_params", false]], "pisa.stages.osc.nsi_params": [[15, "module-pisa.stages.osc.nsi_params", false]], "pisa.stages.osc.osc_params": [[15, "module-pisa.stages.osc.osc_params", false]], "pisa.stages.osc.prob3": [[15, "module-pisa.stages.osc.prob3", false]], "pisa.stages.osc.prob3numba": [[17, "module-pisa.stages.osc.prob3numba", false]], "pisa.stages.osc.prob3numba.numba_osc_hostfuncs": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_hostfuncs", false]], "pisa.stages.osc.prob3numba.numba_osc_kernels": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_kernels", false]], "pisa.stages.osc.prob3numba.numba_osc_tests": [[17, "module-pisa.stages.osc.prob3numba.numba_osc_tests", false]], "pisa.stages.osc.prob3numba.test_numba": [[17, "module-pisa.stages.osc.prob3numba.test_numba", false]], "pisa.stages.osc.scaling_params": [[15, "module-pisa.stages.osc.scaling_params", false]], "pisa.stages.osc.two_nu_osc": [[15, "module-pisa.stages.osc.two_nu_osc", false]], "pisa.stages.pid": [[18, "module-pisa.stages.pid", false]], "pisa.stages.pid.shift_scale_pid": [[18, "module-pisa.stages.pid.shift_scale_pid", false]], "pisa.stages.reco": [[19, "module-pisa.stages.reco", false]], "pisa.stages.reco.resolutions": [[19, "module-pisa.stages.reco.resolutions", false]], "pisa.stages.reco.simple_param": [[19, "module-pisa.stages.reco.simple_param", false]], "pisa.stages.utils": [[21, "module-pisa.stages.utils", false]], "pisa.stages.utils.add_indices": [[21, "module-pisa.stages.utils.add_indices", false]], "pisa.stages.utils.adhoc_sys": [[21, "module-pisa.stages.utils.adhoc_sys", false]], "pisa.stages.utils.bootstrap": [[21, "module-pisa.stages.utils.bootstrap", false]], "pisa.stages.utils.fix_error": [[21, "module-pisa.stages.utils.fix_error", false]], "pisa.stages.utils.hist": [[21, "module-pisa.stages.utils.hist", false]], "pisa.stages.utils.kde": [[21, "module-pisa.stages.utils.kde", false]], "pisa.stages.utils.kfold": [[21, "module-pisa.stages.utils.kfold", false]], "pisa.stages.utils.resample": [[21, "module-pisa.stages.utils.resample", false]], "pisa.stages.utils.set_variance": [[21, "module-pisa.stages.utils.set_variance", false]], "pisa.stages.xsec": [[22, "module-pisa.stages.xsec", false]], "pisa.stages.xsec.dis_sys": [[22, "module-pisa.stages.xsec.dis_sys", false]], "pisa.stages.xsec.genie_sys": [[22, "module-pisa.stages.xsec.genie_sys", false]], "pisa.stages.xsec.nutau_xsec": [[22, "module-pisa.stages.xsec.nutau_xsec", false]], "pisa.utils": [[23, "module-pisa.utils", false]], "pisa.utils.barlow": [[23, "module-pisa.utils.barlow", false]], "pisa.utils.barr_parameterization": [[23, "module-pisa.utils.barr_parameterization", false]], "pisa.utils.callable": [[23, "module-pisa.utils.callable", false]], "pisa.utils.comparisons": [[23, "module-pisa.utils.comparisons", false]], "pisa.utils.config_parser": [[23, "module-pisa.utils.config_parser", false]], "pisa.utils.cross_sections": [[23, "module-pisa.utils.cross_sections", false]], "pisa.utils.data_proc_params": [[23, "module-pisa.utils.data_proc_params", false]], "pisa.utils.fileio": [[23, "module-pisa.utils.fileio", false]], "pisa.utils.fisher_matrix": [[23, "module-pisa.utils.fisher_matrix", false]], "pisa.utils.flavint": [[23, "module-pisa.utils.flavInt", false]], "pisa.utils.flux_weights": [[23, "module-pisa.utils.flux_weights", false]], "pisa.utils.format": [[23, "module-pisa.utils.format", false]], "pisa.utils.gaussians": [[23, "module-pisa.utils.gaussians", false]], "pisa.utils.hash": [[23, "module-pisa.utils.hash", false]], "pisa.utils.hdf": [[23, "module-pisa.utils.hdf", false]], "pisa.utils.hdfchain": [[23, "module-pisa.utils.hdfchain", false]], "pisa.utils.hypersurface": [[24, "module-pisa.utils.hypersurface", false]], "pisa.utils.hypersurface.hyper_interpolator": [[24, "module-pisa.utils.hypersurface.hyper_interpolator", false]], "pisa.utils.hypersurface.hypersurface": [[24, "module-pisa.utils.hypersurface.hypersurface", false]], "pisa.utils.hypersurface.hypersurface_plotting": [[24, "module-pisa.utils.hypersurface.hypersurface_plotting", false]], "pisa.utils.jsons": [[23, "module-pisa.utils.jsons", false]], "pisa.utils.kde_hist": [[23, "module-pisa.utils.kde_hist", false]], "pisa.utils.likelihood_functions": [[23, "module-pisa.utils.likelihood_functions", false]], "pisa.utils.llh_defs": [[25, "module-pisa.utils.llh_defs", false]], "pisa.utils.llh_server": [[23, "module-pisa.utils.llh_server", false]], "pisa.utils.log": [[23, "module-pisa.utils.log", false]], "pisa.utils.matrix": [[23, "module-pisa.utils.matrix", false]], "pisa.utils.mcsimrunsettings": [[23, "module-pisa.utils.mcSimRunSettings", false]], "pisa.utils.numba_tools": [[23, "module-pisa.utils.numba_tools", false]], "pisa.utils.plotter": [[23, "module-pisa.utils.plotter", false]], "pisa.utils.profiler": [[23, "module-pisa.utils.profiler", false]], "pisa.utils.pull_method": [[23, "module-pisa.utils.pull_method", false]], "pisa.utils.random_numbers": [[23, "module-pisa.utils.random_numbers", false]], "pisa.utils.resources": [[23, "module-pisa.utils.resources", false]], "pisa.utils.spline": [[23, "module-pisa.utils.spline", false]], "pisa.utils.spline_smooth": [[23, "module-pisa.utils.spline_smooth", false]], "pisa.utils.stats": [[23, "module-pisa.utils.stats", false]], "pisa.utils.tests": [[23, "module-pisa.utils.tests", false]], "pisa.utils.vbwkde": [[23, "module-pisa.utils.vbwkde", false]], "pisa.utils.vectorizer": [[23, "module-pisa.utils.vectorizer", false]], "pisa2_map_to_pisa3_map() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.pisa2_map_to_pisa3_map", false]], "pisa_num_threads (in module pisa)": [[2, "pisa.PISA_NUM_THREADS", false]], "pisaconfigparser (class in pisa.utils.config_parser)": [[23, "pisa.utils.config_parser.PISAConfigParser", false]], "plot() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.plot", false]], "plot() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.plot", false]], "plot() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.plot", false]], "plot_1d_all() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_all", false]], "plot_1d_array() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_array", false]], "plot_1d_cmp() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_cmp", false]], "plot_1d_projection() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_projection", false]], "plot_1d_ratio() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_ratio", false]], "plot_1d_single() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_single", false]], "plot_1d_slices() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.plot_1d_slices", false]], "plot_1d_slices_array() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_slices_array", false]], "plot_1d_stack() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_1d_stack", false]], "plot_2d_array() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_2d_array", false]], "plot_2d_map() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_2d_map", false]], "plot_2d_single() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_2d_single", false]], "plot_array() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_array", false]], "plot_bin_fits() (in module pisa.utils.hypersurface.hypersurface_plotting)": [[24, "pisa.utils.hypersurface.hypersurface_plotting.plot_bin_fits", false]], "plot_bin_fits_2d() (in module pisa.utils.hypersurface.hypersurface_plotting)": [[24, "pisa.utils.hypersurface.hypersurface_plotting.plot_bin_fits_2d", false]], "plot_cmp() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.plot_cmp", false]], "plot_comparisons() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.plot_comparisons", false]], "plot_fits_in_bin() (pisa.utils.hypersurface.hyper_interpolator.hypersurfaceinterpolator method)": [[24, "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator.plot_fits_in_bin", false]], "plot_map_comparisons() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.plot_map_comparisons", false]], "plot_xsec() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.plot_xsec", false]], "plotter (class in pisa.utils.plotter)": [[23, "pisa.utils.plotter.Plotter", false]], "poisson_gamma() (in module pisa.utils.likelihood_functions)": [[23, "pisa.utils.likelihood_functions.poisson_gamma", false]], "poissonllh() (in module pisa.utils.likelihood_functions)": [[23, "pisa.utils.likelihood_functions.poissonLLH", false]], "pop() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.pop", false]], "pop() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.pop", false]], "popitem() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.popitem", false]], "populate_global_namespace() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.populate_global_namespace", false]], "potential_matrix_emu (pisa.stages.osc.lri_params.lriparams property)": [[15, "pisa.stages.osc.lri_params.LRIParams.potential_matrix_emu", false]], "potential_matrix_etau (pisa.stages.osc.lri_params.lriparams property)": [[15, "pisa.stages.osc.lri_params.LRIParams.potential_matrix_etau", false]], "potential_matrix_mutau (pisa.stages.osc.lri_params.lriparams property)": [[15, "pisa.stages.osc.lri_params.LRIParams.potential_matrix_mutau", false]], "pow (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.POW", false]], "pow() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.pow", false]], "power_of_1024_to_bin_prefix (in module pisa.utils.format)": [[23, "pisa.utils.format.POWER_OF_1024_TO_BIN_PREFIX", false]], "powerlawintegral() (in module pisa.scripts.make_events_file)": [[5, "pisa.scripts.make_events_file.powerLawIntegral", false]], "prepare_interpolated_fit() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.prepare_interpolated_fit", false]], "print_agreement() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.print_agreement", false]], "print_event_rates() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.print_event_rates", false]], "printresults() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.printResults", false]], "printresultssorted() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.printResultsSorted", false]], "prior (class in pisa.core.prior)": [[4, "pisa.core.prior.Prior", false]], "prior (pisa.core.param.param property)": [[4, "pisa.core.param.Param.prior", false]], "prior_chi2 (pisa.core.param.param property)": [[4, "pisa.core.param.Param.prior_chi2", false]], "prior_llh (pisa.core.param.param property)": [[4, "pisa.core.param.Param.prior_llh", false]], "prior_penalty() (pisa.core.param.derivedparam method)": [[4, "pisa.core.param.DerivedParam.prior_penalty", false]], "prior_penalty() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.prior_penalty", false]], "priors (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.priors", false]], "priors_chi2 (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.priors_chi2", false]], "priors_llh (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.priors_llh", false]], "priors_penalties() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.priors_penalties", false]], "priors_penalty() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.priors_penalty", false]], "prob3 (class in pisa.stages.osc.prob3)": [[15, "pisa.stages.osc.prob3.prob3", false]], "prob3_codes (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.prob3_codes", false]], "profile (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.profile", false]], "profile (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.profile", false]], "profile (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.profile", false]], "profile() (in module pisa.utils.profiler)": [[23, "pisa.utils.profiler.profile", false]], "project() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.project", false]], "project() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.project", false]], "project_1d() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.project_1d", false]], "q_ (in module pisa)": [[2, "pisa.Q_", false]], "query_database() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.query_database", false]], "randomize() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.randomize", false]], "randomize_free() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.randomize_free", false]], "randomize_free_params() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.randomize_free_params", false]], "randomize_free_params() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.randomize_free_params", false]], "range (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.range", false]], "range (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.range", false]], "range (pisa.core.param.param property)": [[4, "pisa.core.param.Param.range", false]], "ranges (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.ranges", false]], "re_weight_hnl() (in module pisa.stages.aeff.weight_hnl)": [[8, "pisa.stages.aeff.weight_hnl.re_weight_hnl", false]], "read() (pisa.utils.config_parser.pisaconfigparser method)": [[23, "pisa.utils.config_parser.PISAConfigParser.read", false]], "read() (pisa.utils.hdfchain.hdftableproxy method)": [[23, "pisa.utils.hdfchain.HDFTableProxy.read", false]], "read_iter() (pisa.utils.hdfchain.hdftableproxy method)": [[23, "pisa.utils.hdfchain.HDFTableProxy.read_iter", false]], "rebin() (in module pisa.core.map)": [[4, "pisa.core.map.rebin", false]], "rebin() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.rebin", false]], "rebin() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.rebin", false]], "receive_obj() (in module pisa.utils.llh_server)": [[23, "pisa.utils.llh_server.receive_obj", false]], "record_event_properties() (pisa.stages.data.simple_data_loader.simple_data_loader method)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader.record_event_properties", false]], "recursiveallclose() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.recursiveAllclose", false]], "recursiveequality() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.recursiveEquality", false]], "reducetohist() (in module pisa.core.map)": [[4, "pisa.core.map.reduceToHist", false]], "rehash() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.rehash", false]], "remove() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.remove", false]], "remove() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.remove", false]], "remove_option_re (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.REMOVE_OPTION_RE", false]], "removeallpriors() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.removeAllPriors", false]], "removeparameter() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.removeParameter", false]], "renameparameter() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.renameParameter", false]], "reorder_dimensions() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.reorder_dimensions", false]], "reorder_dimensions() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.reorder_dimensions", false]], "reorder_dimensions() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.reorder_dimensions", false]], "reparam_mix_matrix (pisa.stages.osc.prob3.prob3 attribute)": [[15, "pisa.stages.osc.prob3.prob3.reparam_mix_matrix", false]], "replace() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.replace", false]], "replace_where_counts_gt() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.replace_where_counts_gt", false]], "report() (pisa.utils.hypersurface.hypersurface.hypersurface method)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.report", false]], "report_profile() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.report_profile", false]], "report_profile() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.report_profile", false]], "representation (pisa.core.container.container property)": [[4, "pisa.core.container.Container.representation", false]], "representation (pisa.core.container.containerset property)": [[4, "pisa.core.container.ContainerSet.representation", false]], "representation (pisa.core.container.virtualcontainer property)": [[4, "pisa.core.container.VirtualContainer.representation", false]], "representation_keys (pisa.core.container.container property)": [[4, "pisa.core.container.Container.representation_keys", false]], "representations (pisa.core.container.container property)": [[4, "pisa.core.container.Container.representations", false]], "resample (class in pisa.stages.utils.resample)": [[21, "pisa.stages.utils.resample.resample", false]], "resample() (in module pisa.core.translation)": [[4, "pisa.core.translation.resample", false]], "resample() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.resample", false]], "resamplemode (class in pisa.stages.utils.resample)": [[21, "pisa.stages.utils.resample.ResampleMode", false]], "reset() (pisa.analysis.analysis.counter method)": [[3, "pisa.analysis.analysis.Counter.reset", false]], "reset() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.reset", false]], "reset() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.reset", false]], "reset() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.reset", false]], "reset_all() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.reset_all", false]], "reset_all() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.reset_all", false]], "reset_all() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.reset_all", false]], "reset_colors() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.reset_colors", false]], "reset_free() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.reset_free", false]], "reset_free() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.reset_free", false]], "reset_free() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.reset_free", false]], "resolutions (class in pisa.stages.reco.resolutions)": [[19, "pisa.stages.reco.resolutions.resolutions", false]], "retrieve_expression() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.retrieve_expression", false]], "retrieve_node_data() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.retrieve_node_data", false]], "return_mapset() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.return_mapset", false]], "round2int() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.round2int", false]], "run() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.run", false]], "run() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.run", false]], "run() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.run", false]], "run() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.run", false]], "run_interpolated_fit() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.run_interpolated_fit", false]], "run_test_case() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.run_test_case", false]], "save() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.save", false]], "save() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.save", false]], "save() (pisa.utils.flavint.flavintdata method)": [[23, "pisa.utils.flavInt.FlavIntData.save", false]], "save() (pisa.utils.flavint.flavintdatagroup method)": [[23, "pisa.utils.flavInt.FlavIntDataGroup.save", false]], "savefile() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.saveFile", false]], "scale_map() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.scale_map", false]], "scale_maps() (pisa.utils.spline.combinedspline method)": [[23, "pisa.utils.spline.CombinedSpline.scale_maps", false]], "scaling() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.scaling", false]], "scaling_array (pisa.stages.osc.scaling_params.core_scaling_w_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_w_constrain.scaling_array", false]], "scaling_factor_array (pisa.stages.osc.scaling_params.core_scaling_wo_constrain property)": [[15, "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain.scaling_factor_array", false]], "scan() (pisa.analysis.analysis.analysis method)": [[3, "pisa.analysis.analysis.Analysis.scan", false]], "sectcre (pisa.utils.config_parser.pisaconfigparser attribute)": [[23, "pisa.utils.config_parser.PISAConfigParser.SECTCRE", false]], "select_params() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.select_params", false]], "select_params() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.select_params", false]], "select_params() (pisa.core.param.paramselector method)": [[4, "pisa.core.param.ParamSelector.select_params", false]], "select_params() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.select_params", false]], "select_params() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.select_params", false]], "send_obj() (in module pisa.utils.llh_server)": [[23, "pisa.utils.llh_server.send_obj", false]], "sep_three_tens() (in module pisa.utils.format)": [[23, "pisa.utils.format.sep_three_tens", false]], "serializable_state (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.serializable_state", false]], "serializable_state (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.serializable_state", false]], "serializable_state (pisa.core.map.map property)": [[4, "pisa.core.map.Map.serializable_state", false]], "serializable_state (pisa.core.map.mapset property)": [[4, "pisa.core.map.MapSet.serializable_state", false]], "serializable_state (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.serializable_state", false]], "serializable_state (pisa.core.param.param property)": [[4, "pisa.core.param.Param.serializable_state", false]], "serializable_state (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.serializable_state", false]], "serializable_state (pisa.core.prior.prior property)": [[4, "pisa.core.prior.Prior.serializable_state", false]], "serializable_state (pisa.utils.callable.funct property)": [[23, "pisa.utils.callable.Funct.serializable_state", false]], "serializable_state (pisa.utils.callable.ops property)": [[23, "pisa.utils.callable.OPS.serializable_state", false]], "serializable_state (pisa.utils.callable.var property)": [[23, "pisa.utils.callable.Var.serializable_state", false]], "serializable_state (pisa.utils.hypersurface.hypersurface.hypersurface property)": [[24, "pisa.utils.hypersurface.hypersurface.Hypersurface.serializable_state", false]], "serializable_state (pisa.utils.hypersurface.hypersurface.hypersurfaceparam property)": [[24, "pisa.utils.hypersurface.hypersurface.HypersurfaceParam.serializable_state", false]], "serialize_pipeline_cfg() (in module pisa.utils.hypersurface.hyper_interpolator)": [[24, "pisa.utils.hypersurface.hyper_interpolator.serialize_pipeline_cfg", false]], "serve() (in module pisa.utils.llh_server)": [[23, "pisa.utils.llh_server.serve", false]], "service_name (pisa.core.stage.stage attribute)": [[4, "pisa.core.stage.Stage.service_name", false]], "set() (pisa.utils.config_parser.pisaconfigparser method)": [[23, "pisa.utils.config_parser.PISAConfigParser.set", false]], "set_aux_data() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.set_aux_data", false]], "set_aux_data() (pisa.core.container.virtualcontainer method)": [[4, "pisa.core.container.VirtualContainer.set_aux_data", false]], "set_bar_ssep() (in module pisa.utils.flavint)": [[23, "pisa.utils.flavInt.set_bar_ssep", false]], "set_constant() (in module pisa.stages.utils.set_variance)": [[21, "pisa.stages.utils.set_variance.set_constant", false]], "set_data() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.set_data", false]], "set_errors() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.set_errors", false]], "set_free_params() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.set_free_params", false]], "set_free_params() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.set_free_params", false]], "set_mc() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.set_mc", false]], "set_minimizer_defaults() (in module pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.set_minimizer_defaults", false]], "set_nominal_by_current_values() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.set_nominal_by_current_values", false]], "set_nominal_by_current_values() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.set_nominal_by_current_values", false]], "set_nominal_by_current_values() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.set_nominal_by_current_values", false]], "set_nominal_to_current_value() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.set_nominal_to_current_value", false]], "set_option_re (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.SET_OPTION_RE", false]], "set_poisson_errors() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.set_poisson_errors", false]], "set_poisson_errors() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.set_poisson_errors", false]], "set_unweighted() (pisa.utils.barlow.likelihoods method)": [[23, "pisa.utils.barlow.Likelihoods.set_unweighted", false]], "set_values() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.set_values", false]], "set_variance (class in pisa.stages.utils.set_variance)": [[21, "pisa.stages.utils.set_variance.set_variance", false]], "set_verbosity() (in module pisa.utils.log)": [[23, "pisa.utils.log.set_verbosity", false]], "set_version() (pisa.utils.cross_sections.crosssections method)": [[23, "pisa.utils.cross_sections.CrossSections.set_version", false]], "setdefault() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.setdefault", false]], "setelecfrac() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.setElecFrac", false]], "setlabel() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.setLabel", false]], "setprior() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.setPrior", false]], "setup() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.setup", false]], "setup() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.setup", false]], "setup() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.setup", false]], "setup() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.setup", false]], "setup_function() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.setup_function", false]], "setup_function() (pisa.stages.absorption.earth_absorption.earth_absorption method)": [[7, "pisa.stages.absorption.earth_absorption.earth_absorption.setup_function", false]], "setup_function() (pisa.stages.background.atm_muons.atm_muons method)": [[9, "pisa.stages.background.atm_muons.atm_muons.setup_function", false]], "setup_function() (pisa.stages.data.csv_data_hist.csv_data_hist method)": [[11, "pisa.stages.data.csv_data_hist.csv_data_hist.setup_function", false]], "setup_function() (pisa.stages.data.csv_icc_hist.csv_icc_hist method)": [[11, "pisa.stages.data.csv_icc_hist.csv_icc_hist.setup_function", false]], "setup_function() (pisa.stages.data.csv_loader.csv_loader method)": [[11, "pisa.stages.data.csv_loader.csv_loader.setup_function", false]], "setup_function() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.setup_function", false]], "setup_function() (pisa.stages.data.grid.grid method)": [[11, "pisa.stages.data.grid.grid.setup_function", false]], "setup_function() (pisa.stages.data.meows_loader.meows_loader method)": [[11, "pisa.stages.data.meows_loader.meows_loader.setup_function", false]], "setup_function() (pisa.stages.data.simple_data_loader.simple_data_loader method)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader.setup_function", false]], "setup_function() (pisa.stages.data.simple_signal.simple_signal method)": [[11, "pisa.stages.data.simple_signal.simple_signal.setup_function", false]], "setup_function() (pisa.stages.data.sqlite_loader.sqlite_loader method)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader.setup_function", false]], "setup_function() (pisa.stages.data.toy_event_generator.toy_event_generator method)": [[11, "pisa.stages.data.toy_event_generator.toy_event_generator.setup_function", false]], "setup_function() (pisa.stages.discr_sys.hypersurfaces.hypersurfaces method)": [[12, "pisa.stages.discr_sys.hypersurfaces.hypersurfaces.setup_function", false]], "setup_function() (pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces method)": [[12, "pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces.setup_function", false]], "setup_function() (pisa.stages.flux.astrophysical.astrophysical method)": [[13, "pisa.stages.flux.astrophysical.astrophysical.setup_function", false]], "setup_function() (pisa.stages.flux.barr_simple.barr_simple method)": [[13, "pisa.stages.flux.barr_simple.barr_simple.setup_function", false]], "setup_function() (pisa.stages.flux.daemon_flux.daemon_flux method)": [[13, "pisa.stages.flux.daemon_flux.daemon_flux.setup_function", false]], "setup_function() (pisa.stages.flux.hillasg.hillasg method)": [[13, "pisa.stages.flux.hillasg.hillasg.setup_function", false]], "setup_function() (pisa.stages.flux.honda_ip.honda_ip method)": [[13, "pisa.stages.flux.honda_ip.honda_ip.setup_function", false]], "setup_function() (pisa.stages.flux.mceq_barr.mceq_barr method)": [[13, "pisa.stages.flux.mceq_barr.mceq_barr.setup_function", false]], "setup_function() (pisa.stages.flux.mceq_barr_red.mceq_barr_red method)": [[13, "pisa.stages.flux.mceq_barr_red.mceq_barr_red.setup_function", false]], "setup_function() (pisa.stages.likelihood.generalized_llh_params.generalized_llh_params method)": [[14, "pisa.stages.likelihood.generalized_llh_params.generalized_llh_params.setup_function", false]], "setup_function() (pisa.stages.osc.decoherence.decoherence method)": [[15, "pisa.stages.osc.decoherence.decoherence.setup_function", false]], "setup_function() (pisa.stages.osc.globes.globes method)": [[15, "pisa.stages.osc.globes.globes.setup_function", false]], "setup_function() (pisa.stages.osc.prob3.prob3 method)": [[15, "pisa.stages.osc.prob3.prob3.setup_function", false]], "setup_function() (pisa.stages.pid.shift_scale_pid.shift_scale_pid method)": [[18, "pisa.stages.pid.shift_scale_pid.shift_scale_pid.setup_function", false]], "setup_function() (pisa.stages.reco.resolutions.resolutions method)": [[19, "pisa.stages.reco.resolutions.resolutions.setup_function", false]], "setup_function() (pisa.stages.reco.simple_param.simple_param method)": [[19, "pisa.stages.reco.simple_param.simple_param.setup_function", false]], "setup_function() (pisa.stages.utils.add_indices.add_indices method)": [[21, "pisa.stages.utils.add_indices.add_indices.setup_function", false]], "setup_function() (pisa.stages.utils.adhoc_sys.adhoc_sys method)": [[21, "pisa.stages.utils.adhoc_sys.adhoc_sys.setup_function", false]], "setup_function() (pisa.stages.utils.bootstrap.bootstrap method)": [[21, "pisa.stages.utils.bootstrap.bootstrap.setup_function", false]], "setup_function() (pisa.stages.utils.fix_error.fix_error method)": [[21, "pisa.stages.utils.fix_error.fix_error.setup_function", false]], "setup_function() (pisa.stages.utils.hist.hist method)": [[21, "pisa.stages.utils.hist.hist.setup_function", false]], "setup_function() (pisa.stages.utils.kde.kde method)": [[21, "pisa.stages.utils.kde.kde.setup_function", false]], "setup_function() (pisa.stages.utils.kfold.kfold method)": [[21, "pisa.stages.utils.kfold.kfold.setup_function", false]], "setup_function() (pisa.stages.utils.resample.resample method)": [[21, "pisa.stages.utils.resample.resample.setup_function", false]], "setup_function() (pisa.stages.utils.set_variance.set_variance method)": [[21, "pisa.stages.utils.set_variance.set_variance.setup_function", false]], "setup_function() (pisa.stages.xsec.dis_sys.dis_sys method)": [[22, "pisa.stages.xsec.dis_sys.dis_sys.setup_function", false]], "setup_function() (pisa.stages.xsec.genie_sys.genie_sys method)": [[22, "pisa.stages.xsec.genie_sys.genie_sys.setup_function", false]], "setup_function() (pisa.stages.xsec.nutau_xsec.nutau_xsec method)": [[22, "pisa.stages.xsec.nutau_xsec.nutau_xsec.setup_function", false]], "shape (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.shape", false]], "shape (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.shape", false]], "shape (pisa.core.container.container property)": [[4, "pisa.core.container.Container.shape", false]], "shape (pisa.core.container.virtualcontainer property)": [[4, "pisa.core.container.VirtualContainer.shape", false]], "shape (pisa.core.map.map property)": [[4, "pisa.core.map.Map.shape", false]], "shape (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.shape", false]], "shared_param_ind_list (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.shared_param_ind_list", false]], "shift_scale_pid (class in pisa.stages.pid.shift_scale_pid)": [[18, "pisa.stages.pid.shift_scale_pid.shift_scale_pid", false]], "si_prefix_to_order_of_mag (in module pisa.utils.format)": [[23, "pisa.utils.format.SI_PREFIX_TO_ORDER_OF_MAG", false]], "signed_sqrt_mod_chi2() (in module pisa.utils.stats)": [[23, "pisa.utils.stats.signed_sqrt_mod_chi2", false]], "signed_sqrt_mod_chi2() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.signed_sqrt_mod_chi2", false]], "simple_data_loader (class in pisa.stages.data.simple_data_loader)": [[11, "pisa.stages.data.simple_data_loader.simple_data_loader", false]], "simple_param (class in pisa.stages.reco.simple_param)": [[19, "pisa.stages.reco.simple_param.simple_param", false]], "simple_pid_parameterization() (in module pisa.stages.reco.simple_param)": [[19, "pisa.stages.reco.simple_param.simple_pid_parameterization", false]], "simple_reco_coszen_parameterization() (in module pisa.stages.reco.simple_param)": [[19, "pisa.stages.reco.simple_param.simple_reco_coszen_parameterization", false]], "simple_reco_energy_parameterization() (in module pisa.stages.reco.simple_param)": [[19, "pisa.stages.reco.simple_param.simple_reco_energy_parameterization", false]], "simple_signal (class in pisa.stages.data.simple_signal)": [[11, "pisa.stages.data.simple_signal.simple_signal", false]], "simple_str() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.simple_str", false]], "simple_tex() (pisa.utils.flavint.nuflavintgroup method)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.simple_tex", false]], "sin (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.SIN", false]], "sin (pisa.utils.callable.trigops property)": [[23, "pisa.utils.callable.TrigOps.sin", false]], "sin() (in module pisa.utils.callable)": [[23, "pisa.utils.callable.sin", false]], "sin12 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.sin12", false]], "sin13 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.sin13", false]], "sin14 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.sin14", false]], "sin23 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.sin23", false]], "size (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.size", false]], "size (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.size", false]], "size (pisa.core.container.container property)": [[4, "pisa.core.container.Container.size", false]], "size (pisa.core.container.virtualcontainer property)": [[4, "pisa.core.container.VirtualContainer.size", false]], "size (pisa.core.map.map property)": [[4, "pisa.core.map.Map.size", false]], "slice() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.slice", false]], "slice() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.slice", false]], "slices_array() (pisa.utils.plotter.plotter method)": [[23, "pisa.utils.plotter.Plotter.slices_array", false]], "small_pos (in module pisa.utils.stats)": [[23, "pisa.utils.stats.SMALL_POS", false]], "sortbyparam() (pisa.utils.fisher_matrix.fishermatrix method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.sortByParam", false]], "source_code_hash (pisa.core.detectors.detectors property)": [[4, "pisa.core.detectors.Detectors.source_code_hash", false]], "source_code_hash (pisa.core.distribution_maker.distributionmaker property)": [[4, "pisa.core.distribution_maker.DistributionMaker.source_code_hash", false]], "source_code_hash (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.source_code_hash", false]], "source_code_hash (pisa.core.stage.stage property)": [[4, "pisa.core.stage.Stage.source_code_hash", false]], "spectral_index_scale() (in module pisa.stages.flux.astrophysical)": [[13, "pisa.stages.flux.astrophysical.spectral_index_scale", false]], "spectral_index_scale() (in module pisa.stages.flux.mceq_barr_red)": [[13, "pisa.stages.flux.mceq_barr_red.spectral_index_scale", false]], "spline (class in pisa.utils.spline)": [[23, "pisa.utils.spline.Spline", false]], "spline (pisa.utils.spline.spline property)": [[23, "pisa.utils.spline.Spline.spline", false]], "spline_smooth() (in module pisa.utils.spline_smooth)": [[23, "pisa.utils.spline_smooth.spline_smooth", false]], "split() (in module pisa.utils.format)": [[23, "pisa.utils.format.split", false]], "split() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.split", false]], "split_nu_events_by_flavor_and_interaction() (in module pisa.core.events_pi)": [[4, "pisa.core.events_pi.split_nu_events_by_flavor_and_interaction", false]], "sqlite_loader (class in pisa.stages.data.sqlite_loader)": [[11, "pisa.stages.data.sqlite_loader.sqlite_loader", false]], "sqrt() (in module pisa.utils.vectorizer)": [[23, "pisa.utils.vectorizer.sqrt", false]], "sqrt() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.sqrt", false]], "sqrt() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.sqrt", false]], "squeeze() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.squeeze", false]], "squeeze() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.squeeze", false]], "squeeze() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.squeeze", false]], "stability_test() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.stability_test", false]], "stage (class in pisa.core.stage)": [[4, "pisa.core.stage.Stage", false]], "stage_name (pisa.core.stage.stage attribute)": [[4, "pisa.core.stage.Stage.stage_name", false]], "stage_names (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.stage_names", false]], "stages (pisa.core.pipeline.pipeline property)": [[4, "pisa.core.pipeline.Pipeline.stages", false]], "state (pisa.core.param.derivedparam property)": [[4, "pisa.core.param.DerivedParam.state", false]], "state (pisa.core.param.param property)": [[4, "pisa.core.param.Param.state", false]], "state (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.state", false]], "state (pisa.core.prior.prior property)": [[4, "pisa.core.prior.Prior.state", false]], "state (pisa.utils.callable.funct property)": [[23, "pisa.utils.callable.Funct.state", false]], "state (pisa.utils.callable.ops property)": [[23, "pisa.utils.callable.OPS.state", false]], "state (pisa.utils.callable.var property)": [[23, "pisa.utils.callable.Var.state", false]], "std_devs (pisa.core.map.map property)": [[4, "pisa.core.map.Map.std_devs", false]], "stdnsiparams (class in pisa.stages.osc.nsi_params)": [[15, "pisa.stages.osc.nsi_params.StdNSIParams", false]], "strip_outer_dollars() (in module pisa.utils.format)": [[23, "pisa.utils.format.strip_outer_dollars", false]], "strip_outer_parens() (in module pisa.utils.format)": [[23, "pisa.utils.format.strip_outer_parens", false]], "subselect() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.subselect", false]], "sum() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.sum", false]], "sum() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.sum", false]], "switch_to_file() (pisa.utils.config_parser.mutablemultifileiterator method)": [[23, "pisa.utils.config_parser.MutableMultiFileIterator.switch_to_file", false]], "sys_func_list_option (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.SYS_FUNC_LIST_OPTION", false]], "sys_list_option (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.SYS_LIST_OPTION", false]], "sys_set_option (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.SYS_SET_OPTION", false]], "tableaccessor (class in pisa.utils.hdfchain)": [[23, "pisa.utils.hdfchain.TableAccessor", false]], "tabulate() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.tabulate", false]], "tabulate() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.tabulate", false]], "tabulate() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.tabulate", false]], "tabulate() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.tabulate", false]], "take_average() (in module pisa.scripts.test_flux_weights)": [[5, "pisa.scripts.test_flux_weights.take_average", false]], "tan (pisa.utils.callable.ops attribute)": [[23, "pisa.utils.callable.OPS.TAN", false]], "tan (pisa.utils.callable.trigops property)": [[23, "pisa.utils.callable.TrigOps.tan", false]], "tan() (in module pisa.utils.callable)": [[23, "pisa.utils.callable.tan", false]], "test_bootstrap() (in module pisa.stages.utils.bootstrap)": [[21, "pisa.stages.utils.bootstrap.test_bootstrap", false]], "test_clear_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_clear_matrix", false]], "test_conjugate() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_conjugate", false]], "test_conjugate_transpose() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_conjugate_transpose", false]], "test_container() (in module pisa.core.container)": [[4, "pisa.core.container.test_container", false]], "test_container_set() (in module pisa.core.container)": [[4, "pisa.core.container.test_container_set", false]], "test_copy_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_copy_matrix", false]], "test_detectors() (in module pisa.core.detectors)": [[4, "pisa.core.detectors.test_Detectors", false]], "test_distributionmaker() (in module pisa.core.distribution_maker)": [[4, "pisa.core.distribution_maker.test_DistributionMaker", false]], "test_events() (in module pisa.core.events)": [[4, "pisa.core.events.test_Events", false]], "test_fbwkde() (in module pisa.utils.vbwkde)": [[23, "pisa.utils.vbwkde.test_fbwkde", false]], "test_find_index() (in module pisa.core.translation)": [[4, "pisa.core.translation.test_find_index", false]], "test_format_num() (in module pisa.utils.format)": [[23, "pisa.utils.format.test_format_num", false]], "test_gaussians() (in module pisa.utils.gaussians)": [[23, "pisa.utils.gaussians.test_gaussians", false]], "test_get_random_state() (in module pisa.utils.random_numbers)": [[23, "pisa.utils.random_numbers.test_get_random_state", false]], "test_hash_file() (in module pisa.utils.hash)": [[23, "pisa.utils.hash.test_hash_file", false]], "test_hash_obj() (in module pisa.utils.hash)": [[23, "pisa.utils.hash.test_hash_obj", false]], "test_hdf() (in module pisa.utils.hdf)": [[23, "pisa.utils.hdf.test_hdf", false]], "test_histogram() (in module pisa.core.translation)": [[4, "pisa.core.translation.test_histogram", false]], "test_hr_range_formatter() (in module pisa.utils.format)": [[23, "pisa.utils.format.test_hr_range_formatter", false]], "test_isscalar() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.test_isscalar", false]], "test_isunitless() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.test_isunitless", false]], "test_kde_histogramdd() (in module pisa.utils.kde_hist)": [[23, "pisa.utils.kde_hist.test_kde_histogramdd", false]], "test_line_profile() (in module pisa.utils.profiler)": [[23, "pisa.utils.profiler.test_line_profile", false]], "test_list2hrlist() (in module pisa.utils.format)": [[23, "pisa.utils.format.test_list2hrlist", false]], "test_lookup_indices() (in module pisa.core.bin_indexing)": [[4, "pisa.core.bin_indexing.test_lookup_indices", false]], "test_map() (in module pisa.core.map)": [[4, "pisa.core.map.test_Map", false]], "test_mapset() (in module pisa.core.map)": [[4, "pisa.core.map.test_MapSet", false]], "test_matrix_dot_matrix() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_matrix_dot_matrix", false]], "test_matrix_dot_vector() (in module pisa.utils.numba_tools)": [[23, "pisa.utils.numba_tools.test_matrix_dot_vector", false]], "test_multidimbinning() (in module pisa.core.binning)": [[4, "pisa.core.binning.test_MultiDimBinning", false]], "test_normquant() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.test_normQuant", false]], "test_onedimbinning() (in module pisa.core.binning)": [[4, "pisa.core.binning.test_OneDimBinning", false]], "test_param() (in module pisa.core.param)": [[4, "pisa.core.param.test_Param", false]], "test_paramselector() (in module pisa.core.param)": [[4, "pisa.core.param.test_ParamSelector", false]], "test_paramset() (in module pisa.core.param)": [[4, "pisa.core.param.test_ParamSet", false]], "test_pipeline() (in module pisa.core.pipeline)": [[4, "pisa.core.pipeline.test_Pipeline", false]], "test_prior() (in module pisa.core.prior)": [[4, "pisa.core.prior.test_Prior", false]], "test_prob3numba() (in module pisa.stages.osc.prob3numba.numba_osc_tests)": [[17, "pisa.stages.osc.prob3numba.numba_osc_tests.test_prob3numba", false]], "test_profile() (in module pisa.utils.profiler)": [[23, "pisa.utils.profiler.test_profile", false]], "test_recursiveequality() (in module pisa.utils.comparisons)": [[23, "pisa.utils.comparisons.test_recursiveEquality", false]], "test_resample() (in module pisa.stages.utils.resample)": [[21, "pisa.stages.utils.resample.test_resample", false]], "test_timediff() (in module pisa.utils.format)": [[23, "pisa.utils.format.test_timediff", false]], "test_timestamp() (in module pisa.utils.format)": [[23, "pisa.utils.format.test_timestamp", false]], "test_to_json_from_json() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.test_to_json_from_json", false]], "test_vbwkde() (in module pisa.utils.vbwkde)": [[23, "pisa.utils.vbwkde.test_vbwkde", false]], "tex (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.tex", false]], "tex (pisa.core.map.map property)": [[4, "pisa.core.map.Map.tex", false]], "tex (pisa.core.param.param property)": [[4, "pisa.core.param.Param.tex", false]], "tex (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.tex", false]], "tex (pisa.utils.flavint.inttype property)": [[23, "pisa.utils.flavInt.IntType.tex", false]], "tex (pisa.utils.flavint.nuflav property)": [[23, "pisa.utils.flavInt.NuFlav.tex", false]], "tex (pisa.utils.flavint.nuflavint property)": [[23, "pisa.utils.flavInt.NuFlavInt.tex", false]], "tex (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.tex", false]], "tex (pisa.utils.spline.spline property)": [[23, "pisa.utils.spline.Spline.tex", false]], "tex_dollars() (in module pisa.utils.format)": [[23, "pisa.utils.format.tex_dollars", false]], "tex_join() (in module pisa.utils.format)": [[23, "pisa.utils.format.tex_join", false]], "text2tex() (in module pisa.utils.format)": [[23, "pisa.utils.format.text2tex", false]], "theta12 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.theta12", false]], "theta13 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.theta13", false]], "theta14 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.theta14", false]], "theta23 (pisa.stages.osc.osc_params.oscparams property)": [[15, "pisa.stages.osc.osc_params.OscParams.theta23", false]], "timediff() (in module pisa.utils.format)": [[23, "pisa.utils.format.timediff", false]], "timestamp() (in module pisa.utils.format)": [[23, "pisa.utils.format.timestamp", false]], "to() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.to", false]], "to() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.to", false]], "to() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.to", false]], "to_file() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.to_file", false]], "to_hdf() (in module pisa.utils.hdf)": [[23, "pisa.utils.hdf.to_hdf", false]], "to_json() (in module pisa.utils.jsons)": [[23, "pisa.utils.jsons.to_json", false]], "to_json() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.to_json", false]], "to_json() (pisa.core.binning.onedimbinning method)": [[4, "pisa.core.binning.OneDimBinning.to_json", false]], "to_json() (pisa.core.map.map method)": [[4, "pisa.core.map.Map.to_json", false]], "to_json() (pisa.core.map.mapset method)": [[4, "pisa.core.map.MapSet.to_json", false]], "to_json() (pisa.core.param.derivedparam method)": [[4, "pisa.core.param.DerivedParam.to_json", false]], "to_json() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.to_json", false]], "to_json() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.to_json", false]], "to_json() (pisa.utils.callable.funct method)": [[23, "pisa.utils.callable.Funct.to_json", false]], "to_json() (pisa.utils.callable.ops method)": [[23, "pisa.utils.callable.OPS.to_json", false]], "to_json() (pisa.utils.callable.var method)": [[23, "pisa.utils.callable.Var.to_json", false]], "to_pickle() (in module pisa.utils.fileio)": [[23, "pisa.utils.fileio.to_pickle", false]], "tokens (pisa.utils.flavint.nuflavint attribute)": [[23, "pisa.utils.flavInt.NuFlavInt.TOKENS", false]], "tokens (pisa.utils.flavint.nuflavintgroup attribute)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.TOKENS", false]], "tot_num_bins (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.tot_num_bins", false]], "toy_event_generator (class in pisa.stages.data.toy_event_generator)": [[11, "pisa.stages.data.toy_event_generator.toy_event_generator", false]], "trace (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.TRACE", false]], "transform_groups() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.transform_groups", false]], "transform_groups() (pisa.utils.flavint.flavintdatagroup method)": [[23, "pisa.utils.flavInt.FlavIntDataGroup.transform_groups", false]], "translate() (pisa.core.container.container method)": [[4, "pisa.core.container.Container.translate", false]], "translate_source_dict() (pisa.utils.mcsimrunsettings.mcsimrunsettings static method)": [[23, "pisa.utils.mcSimRunSettings.MCSimRunSettings.translate_source_dict", false]], "translateprior() (pisa.utils.fisher_matrix.fishermatrix static method)": [[23, "pisa.utils.fisher_matrix.FisherMatrix.translatePrior", false]], "translation_modes (pisa.core.container.container attribute)": [[4, "pisa.core.container.Container.translation_modes", false]], "trigops (class in pisa.utils.callable)": [[23, "pisa.utils.callable.TrigOps", false]], "two_nu_osc (class in pisa.stages.osc.two_nu_osc)": [[15, "pisa.stages.osc.two_nu_osc.two_nu_osc", false]], "type_error() (in module pisa.core.map)": [[4, "pisa.core.map.type_error", false]], "u (pisa.core.param.param property)": [[4, "pisa.core.param.Param.u", false]], "uint0 (in module pisa)": [[2, "pisa.uint0", false]], "uint16 (class in pisa)": [[2, "pisa.uint16", false]], "uint32 (class in pisa)": [[2, "pisa.uint32", false]], "uint64 (class in pisa)": [[2, "pisa.uint64", false]], "uint8 (class in pisa)": [[2, "pisa.uint8", false]], "ultrasurfaces (class in pisa.stages.discr_sys.ultrasurfaces)": [[12, "pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces", false]], "unfix() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.unfix", false]], "unique_flavs_tex (pisa.utils.flavint.nuflavintgroup property)": [[23, "pisa.utils.flavInt.NuFlavIntGroup.unique_flavs_tex", false]], "units (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.units", false]], "units (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.units", false]], "units (pisa.core.param.param property)": [[4, "pisa.core.param.Param.units", false]], "units_option (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.UNITS_OPTION", false]], "units_specifier (in module pisa.scripts.fit_hypersurfaces)": [[5, "pisa.scripts.fit_hypersurfaces.UNITS_SPECIFIER", false]], "units_str (pisa.core.prior.prior property)": [[4, "pisa.core.prior.Prior.units_str", false]], "unlink() (pisa.core.container.virtualcontainer method)": [[4, "pisa.core.container.VirtualContainer.unlink", false]], "unlink_containers() (pisa.core.container.containerset method)": [[4, "pisa.core.container.ContainerSet.unlink_containers", false]], "unpack_file_data() (pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader method)": [[11, "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader.unpack_file_data", false]], "unroll_binning() (pisa.core.container.container static method)": [[4, "pisa.core.container.Container.unroll_binning", false]], "unweighted_histograms (pisa.utils.barlow.likelihoods attribute)": [[23, "pisa.utils.barlow.Likelihoods.unweighted_histograms", false]], "up (pisa.stages.utils.resample.resamplemode attribute)": [[21, "pisa.stages.utils.resample.ResampleMode.UP", false]], "update() (pisa.core.param.paramselector method)": [[4, "pisa.core.param.ParamSelector.update", false]], "update() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.update", false]], "update() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.update", false]], "update_existing() (pisa.core.param.paramset method)": [[4, "pisa.core.param.ParamSet.update_existing", false]], "update_hash() (pisa.core.events.data method)": [[4, "pisa.core.events.Data.update_hash", false]], "update_hash() (pisa.core.events.events method)": [[4, "pisa.core.events.Events.update_hash", false]], "update_params() (pisa.core.detectors.detectors method)": [[4, "pisa.core.detectors.Detectors.update_params", false]], "update_params() (pisa.core.distribution_maker.distributionmaker method)": [[4, "pisa.core.distribution_maker.DistributionMaker.update_params", false]], "update_params() (pisa.core.pipeline.pipeline method)": [[4, "pisa.core.pipeline.Pipeline.update_params", false]], "ureg (in module pisa)": [[2, "pisa.ureg", false]], "v_lri (pisa.stages.osc.lri_params.lriparams property)": [[15, "pisa.stages.osc.lri_params.LRIParams.v_lri", false]], "vacuumlikensiparams (class in pisa.stages.osc.nsi_params)": [[15, "pisa.stages.osc.nsi_params.VacuumLikeNSIParams", false]], "valid_nominal_values() (in module pisa.core.map)": [[4, "pisa.core.map.valid_nominal_values", false]], "validate() (pisa.utils.flavint.flavintdata method)": [[23, "pisa.utils.flavInt.FlavIntData.validate", false]], "validate() (pisa.utils.flavint.flavintdatagroup method)": [[23, "pisa.utils.flavInt.FlavIntDataGroup.validate", false]], "validate_cut_spec() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.validate_cut_spec", false]], "validate_map_objs() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.validate_map_objs", false]], "validate_maps() (in module pisa.utils.tests)": [[23, "pisa.utils.tests.validate_maps", false]], "validate_minimizer_settings() (in module pisa.analysis.analysis)": [[3, "pisa.analysis.analysis.validate_minimizer_settings", false]], "validate_params() (pisa.core.stage.stage method)": [[4, "pisa.core.stage.Stage.validate_params", false]], "validate_pid_spec() (pisa.utils.data_proc_params.dataprocparams static method)": [[23, "pisa.utils.data_proc_params.DataProcParams.validate_pid_spec", false]], "validate_spline() (pisa.utils.spline.combinedspline static method)": [[23, "pisa.utils.spline.CombinedSpline.validate_spline", false]], "validate_value() (pisa.core.param.derivedparam method)": [[4, "pisa.core.param.DerivedParam.validate_value", false]], "validate_value() (pisa.core.param.param method)": [[4, "pisa.core.param.Param.validate_value", false]], "validate_xsec() (pisa.utils.cross_sections.crosssections static method)": [[23, "pisa.utils.cross_sections.CrossSections.validate_xsec", false]], "value (pisa.core.param.param property)": [[4, "pisa.core.param.Param.value", false]], "values (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.values", false]], "values() (pisa.ordereddict method)": [[2, "pisa.OrderedDict.values", false]], "values_hash (pisa.core.param.paramset property)": [[4, "pisa.core.param.ParamSet.values_hash", false]], "var (class in pisa.utils.callable)": [[23, "pisa.utils.callable.Var", false]], "vbwkde() (in module pisa.utils.vbwkde)": [[23, "pisa.utils.vbwkde.vbwkde", false]], "virtualcontainer (class in pisa.core.container)": [[4, "pisa.core.container.VirtualContainer", false]], "warn (pisa.utils.log.levels attribute)": [[23, "pisa.utils.log.Levels.WARN", false]], "weight (class in pisa.stages.aeff.weight)": [[8, "pisa.stages.aeff.weight.weight", false]], "weight_density_to_yefrac() (pisa.stages.osc.layers.layers method)": [[15, "pisa.stages.osc.layers.Layers.weight_density_to_YeFrac", false]], "weight_hnl (class in pisa.stages.aeff.weight_hnl)": [[8, "pisa.stages.aeff.weight_hnl.weight_hnl", false]], "weighted_bin_volumes() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.weighted_bin_volumes", false]], "weighted_bin_widths (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.weighted_bin_widths", false]], "weighted_centers (pisa.core.binning.multidimbinning property)": [[4, "pisa.core.binning.MultiDimBinning.weighted_centers", false]], "weighted_centers (pisa.core.binning.onedimbinning property)": [[4, "pisa.core.binning.OneDimBinning.weighted_centers", false]], "xlategroupsstr() (in module pisa.utils.flavint)": [[23, "pisa.utils.flavInt.xlateGroupsStr", false]], "zeros() (pisa.core.binning.multidimbinning method)": [[4, "pisa.core.binning.MultiDimBinning.zeros", false]]}, "objects": {"": [[2, 0, 0, "-", "pisa"]], "pisa": [[2, 1, 1, "", "CACHE_DIR"], [2, 2, 1, "", "CTYPE"], [2, 1, 1, "", "EPSILON"], [2, 2, 1, "", "FTYPE"], [2, 1, 1, "", "HASH_SIGFIGS"], [2, 2, 1, "", "ITYPE"], [2, 1, 1, "", "OMP_NUM_THREADS"], [2, 3, 1, "", "OrderedDict"], [2, 1, 1, "", "PISA_NUM_THREADS"], [2, 2, 1, "", "Q_"], [3, 0, 0, "-", "analysis"], [2, 6, 1, "", "array"], [2, 3, 1, "", "complex128"], [2, 3, 1, "", "complex256"], [2, 3, 1, "", "complex64"], [4, 0, 0, "-", "core"], [2, 3, 1, "", "float32"], [2, 3, 1, "", "float64"], [2, 2, 1, "", "int0"], [2, 3, 1, "", "int16"], [2, 3, 1, "", "int32"], [2, 3, 1, "", "int64"], [2, 3, 1, "", "int8"], [2, 6, 1, "", "namedtuple"], [2, 6, 1, "", "numba_jit"], [5, 0, 0, "-", "scripts"], [6, 0, 0, "-", "stages"], [2, 2, 1, "", "uint0"], [2, 3, 1, "", "uint16"], [2, 3, 1, "", "uint32"], [2, 3, 1, "", "uint64"], [2, 3, 1, "", "uint8"], [2, 1, 1, "", "ureg"], [23, 0, 0, "-", "utils"]], "pisa.OrderedDict": [[2, 4, 1, "", "clear"], [2, 4, 1, "", "copy"], [2, 4, 1, "", "fromkeys"], [2, 4, 1, "", "items"], [2, 4, 1, "", "keys"], [2, 4, 1, "", "move_to_end"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "popitem"], [2, 4, 1, "", "setdefault"], [2, 4, 1, "", "update"], [2, 4, 1, "", "values"]], "pisa.analysis": [[3, 0, 0, "-", "analysis"]], "pisa.analysis.analysis": [[3, 3, 1, "", "Analysis"], [3, 3, 1, "", "BasicAnalysis"], [3, 3, 1, "", "Counter"], [3, 1, 1, "", "MINIMIZERS_USING_CONSTRAINTS"], [3, 1, 1, "", "MINIMIZERS_USING_SYMM_GRAD"], [3, 6, 1, "", "set_minimizer_defaults"], [3, 6, 1, "", "validate_minimizer_settings"]], "pisa.analysis.analysis.Analysis": [[3, 4, 1, "", "fit_hypo"], [3, 4, 1, "", "nofit_hypo"], [3, 4, 1, "", "scan"]], "pisa.analysis.analysis.BasicAnalysis": [[3, 4, 1, "", "fit_recursively"]], "pisa.analysis.analysis.Counter": [[3, 5, 1, "", "count"], [3, 4, 1, "", "reset"]], "pisa.core": [[4, 0, 0, "-", "bin_indexing"], [4, 0, 0, "-", "binning"], [4, 0, 0, "-", "container"], [4, 0, 0, "-", "detectors"], [4, 0, 0, "-", "distribution_maker"], [4, 0, 0, "-", "events"], [4, 0, 0, "-", "events_pi"], [4, 0, 0, "-", "map"], [4, 0, 0, "-", "param"], [4, 0, 0, "-", "pipeline"], [4, 0, 0, "-", "prior"], [4, 0, 0, "-", "stage"], [4, 0, 0, "-", "translation"]], "pisa.core.bin_indexing": [[4, 6, 1, "", "lookup_indices"], [4, 6, 1, "", "test_lookup_indices"]], "pisa.core.binning": [[4, 3, 1, "", "MultiDimBinning"], [4, 3, 1, "", "OneDimBinning"], [4, 6, 1, "", "basename"], [4, 6, 1, "", "is_binning"], [4, 6, 1, "", "test_MultiDimBinning"], [4, 6, 1, "", "test_OneDimBinning"]], "pisa.core.binning.MultiDimBinning": [[4, 4, 1, "", "assert_array_fits"], [4, 4, 1, "", "assert_compat"], [4, 5, 1, "", "basename_binning"], [4, 5, 1, "", "basenames"], [4, 5, 1, "", "bin_edges"], [4, 4, 1, "", "bin_volumes"], [4, 4, 1, "", "broadcast"], [4, 4, 1, "", "broadcaster"], [4, 5, 1, "", "coord"], [4, 5, 1, "", "dimensions"], [4, 5, 1, "", "dims"], [4, 5, 1, "", "domains"], [4, 4, 1, "", "downsample"], [4, 5, 1, "", "edges_hash"], [4, 4, 1, "", "empty"], [4, 5, 1, "", "finite_binning"], [4, 4, 1, "", "from_json"], [4, 4, 1, "", "full"], [4, 5, 1, "", "hash"], [4, 5, 1, "", "hashable_state"], [4, 5, 1, "", "inbounds_criteria"], [4, 4, 1, "", "index"], [4, 4, 1, "", "index2coord"], [4, 4, 1, "", "indexer"], [4, 4, 1, "", "is_compat"], [4, 5, 1, "", "is_irregular"], [4, 5, 1, "", "is_lin"], [4, 5, 1, "", "is_log"], [4, 4, 1, "", "iterbins"], [4, 4, 1, "", "itercoords"], [4, 4, 1, "", "iterdims"], [4, 4, 1, "", "iteredgetuples"], [4, 4, 1, "", "ito"], [4, 5, 1, "", "mask"], [4, 5, 1, "", "mask_hash"], [4, 4, 1, "", "meshgrid"], [4, 5, 1, "", "midpoints"], [4, 5, 1, "", "name"], [4, 5, 1, "", "names"], [4, 5, 1, "", "normalize_values"], [4, 5, 1, "", "normalized_state"], [4, 5, 1, "", "num_bins"], [4, 5, 1, "", "num_dims"], [4, 4, 1, "", "ones"], [4, 4, 1, "", "oversample"], [4, 4, 1, "", "remove"], [4, 4, 1, "", "reorder_dimensions"], [4, 5, 1, "", "serializable_state"], [4, 5, 1, "", "shape"], [4, 5, 1, "", "size"], [4, 4, 1, "", "slice"], [4, 4, 1, "", "squeeze"], [4, 4, 1, "", "to"], [4, 4, 1, "", "to_json"], [4, 5, 1, "", "tot_num_bins"], [4, 5, 1, "", "units"], [4, 4, 1, "", "weighted_bin_volumes"], [4, 5, 1, "", "weighted_centers"], [4, 4, 1, "", "zeros"]], "pisa.core.binning.OneDimBinning": [[4, 4, 1, "", "assert_compat"], [4, 5, 1, "", "basename"], [4, 5, 1, "", "basename_binning"], [4, 5, 1, "", "bin_edges"], [4, 5, 1, "", "bin_names"], [4, 5, 1, "", "bin_widths"], [4, 5, 1, "", "domain"], [4, 4, 1, "", "downsample"], [4, 5, 1, "", "edge_magnitudes"], [4, 5, 1, "", "edges_hash"], [4, 5, 1, "", "finite_binning"], [4, 4, 1, "", "from_json"], [4, 5, 1, "", "hash"], [4, 5, 1, "", "hashable_state"], [4, 5, 1, "", "inbounds_criteria"], [4, 4, 1, "", "index"], [4, 4, 1, "", "is_bin_spacing_lin_uniform"], [4, 4, 1, "", "is_bin_spacing_log_uniform"], [4, 4, 1, "", "is_binning_ok"], [4, 4, 1, "", "is_compat"], [4, 5, 1, "", "is_irregular"], [4, 5, 1, "", "is_lin"], [4, 5, 1, "", "is_log"], [4, 4, 1, "", "iterbins"], [4, 4, 1, "", "iteredgetuples"], [4, 4, 1, "", "ito"], [4, 5, 1, "", "label"], [4, 5, 1, "", "midpoints"], [4, 5, 1, "", "name"], [4, 5, 1, "", "normalize_values"], [4, 5, 1, "", "normalized_state"], [4, 5, 1, "", "num_bins"], [4, 4, 1, "", "oversample"], [4, 5, 1, "", "range"], [4, 4, 1, "", "rehash"], [4, 5, 1, "", "serializable_state"], [4, 5, 1, "", "shape"], [4, 5, 1, "", "size"], [4, 5, 1, "", "tex"], [4, 4, 1, "", "to"], [4, 4, 1, "", "to_json"], [4, 5, 1, "", "units"], [4, 5, 1, "", "weighted_bin_widths"], [4, 5, 1, "", "weighted_centers"]], "pisa.core.container": [[4, 3, 1, "", "Container"], [4, 3, 1, "", "ContainerSet"], [4, 3, 1, "", "VirtualContainer"], [4, 6, 1, "", "test_container"], [4, 6, 1, "", "test_container_set"]], "pisa.core.container.Container": [[4, 5, 1, "", "all_keys"], [4, 2, 1, "", "array_representations"], [4, 4, 1, "", "array_to_binned"], [4, 4, 1, "", "auto_translate"], [4, 4, 1, "", "binned_to_array"], [4, 2, 1, "", "default_translation_mode"], [4, 4, 1, "", "find_valid_representation"], [4, 4, 1, "", "get_hist"], [4, 4, 1, "", "get_map"], [4, 5, 1, "", "is_map"], [4, 5, 1, "", "keys"], [4, 4, 1, "", "mark_changed"], [4, 4, 1, "", "mark_valid"], [4, 5, 1, "", "num_dims"], [4, 5, 1, "", "representation"], [4, 5, 1, "", "representation_keys"], [4, 5, 1, "", "representations"], [4, 4, 1, "", "resample"], [4, 4, 1, "", "set_aux_data"], [4, 5, 1, "", "shape"], [4, 5, 1, "", "size"], [4, 4, 1, "", "translate"], [4, 2, 1, "", "translation_modes"], [4, 4, 1, "", "unroll_binning"]], "pisa.core.container.ContainerSet": [[4, 4, 1, "", "add_container"], [4, 4, 1, "", "get_mapset"], [4, 5, 1, "", "is_map"], [4, 4, 1, "", "link_containers"], [4, 5, 1, "", "names"], [4, 5, 1, "", "representation"], [4, 4, 1, "", "unlink_containers"]], "pisa.core.container.VirtualContainer": [[4, 4, 1, "", "mark_changed"], [4, 4, 1, "", "mark_valid"], [4, 5, 1, "", "representation"], [4, 4, 1, "", "set_aux_data"], [4, 5, 1, "", "shape"], [4, 5, 1, "", "size"], [4, 4, 1, "", "unlink"]], "pisa.core.detectors": [[4, 3, 1, "", "Detectors"], [4, 6, 1, "", "main"], [4, 6, 1, "", "parse_args"], [4, 6, 1, "", "test_Detectors"]], "pisa.core.detectors.Detectors": [[4, 5, 1, "", "distribution_makers"], [4, 5, 1, "", "empty_bin_indices"], [4, 4, 1, "", "get_outputs"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "init_params"], [4, 5, 1, "", "num_events_per_bin"], [4, 5, 1, "", "param_selections"], [4, 5, 1, "", "params"], [4, 5, 1, "", "profile"], [4, 4, 1, "", "randomize_free_params"], [4, 4, 1, "", "reset_all"], [4, 4, 1, "", "reset_free"], [4, 4, 1, "", "run"], [4, 4, 1, "", "select_params"], [4, 4, 1, "", "set_free_params"], [4, 4, 1, "", "set_nominal_by_current_values"], [4, 4, 1, "", "setup"], [4, 5, 1, "", "shared_param_ind_list"], [4, 5, 1, "", "source_code_hash"], [4, 4, 1, "", "tabulate"], [4, 4, 1, "", "update_params"]], "pisa.core.distribution_maker": [[4, 3, 1, "", "DistributionMaker"], [4, 6, 1, "", "main"], [4, 6, 1, "", "parse_args"], [4, 6, 1, "", "test_DistributionMaker"]], "pisa.core.distribution_maker.DistributionMaker": [[4, 4, 1, "", "add_covariance"], [4, 5, 1, "", "empty_bin_indices"], [4, 4, 1, "", "get_outputs"], [4, 5, 1, "", "hash"], [4, 5, 1, "", "num_events_per_bin"], [4, 5, 1, "", "param_selections"], [4, 5, 1, "", "params"], [4, 5, 1, "", "pipelines"], [4, 5, 1, "", "profile"], [4, 4, 1, "", "randomize_free_params"], [4, 4, 1, "", "reset_all"], [4, 4, 1, "", "reset_free"], [4, 4, 1, "", "run"], [4, 4, 1, "", "select_params"], [4, 4, 1, "", "set_free_params"], [4, 4, 1, "", "set_nominal_by_current_values"], [4, 4, 1, "", "setup"], [4, 5, 1, "", "source_code_hash"], [4, 4, 1, "", "tabulate"], [4, 4, 1, "", "update_params"]], "pisa.core.events": [[4, 3, 1, "", "Data"], [4, 3, 1, "", "Events"], [4, 6, 1, "", "test_Events"]], "pisa.core.events.Data": [[4, 4, 1, "", "applyCut"], [4, 4, 1, "", "data_eq"], [4, 4, 1, "", "digitize"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "histogram"], [4, 4, 1, "", "histogram_set"], [4, 4, 1, "", "keepInbounds"], [4, 4, 1, "", "meta_eq"], [4, 5, 1, "", "muons"], [4, 5, 1, "", "names"], [4, 5, 1, "", "neutrinos"], [4, 5, 1, "", "noise"], [4, 4, 1, "", "transform_groups"], [4, 4, 1, "", "update_hash"]], "pisa.core.events.Events": [[4, 4, 1, "", "applyCut"], [4, 4, 1, "", "data_eq"], [4, 5, 1, "", "flavint_groups"], [4, 5, 1, "", "flavints_present"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "histogram"], [4, 5, 1, "", "joined_string"], [4, 4, 1, "", "keepInbounds"], [4, 4, 1, "", "meta_eq"], [4, 4, 1, "", "save"], [4, 4, 1, "", "update_hash"]], "pisa.core.events_pi": [[4, 3, 1, "", "EventsPi"], [4, 6, 1, "", "fix_oppo_flux"], [4, 6, 1, "", "main"], [4, 6, 1, "", "split_nu_events_by_flavor_and_interaction"]], "pisa.core.events_pi.EventsPi": [[4, 4, 1, "", "apply_cut"], [4, 4, 1, "", "keep_inbounds"], [4, 4, 1, "", "load_events_file"]], "pisa.core.map": [[4, 3, 1, "", "Map"], [4, 3, 1, "", "MapSet"], [4, 6, 1, "", "rebin"], [4, 6, 1, "", "reduceToHist"], [4, 6, 1, "", "test_Map"], [4, 6, 1, "", "test_MapSet"], [4, 6, 1, "", "type_error"], [4, 6, 1, "", "valid_nominal_values"]], "pisa.core.map.Map": [[4, 4, 1, "", "allclose"], [4, 4, 1, "", "assert_compat"], [4, 4, 1, "", "barlow_llh"], [4, 5, 1, "", "binning"], [4, 4, 1, "", "chi2"], [4, 4, 1, "", "compare"], [4, 4, 1, "", "conv_llh"], [4, 4, 1, "", "correct_chi2"], [4, 4, 1, "", "downsample"], [4, 4, 1, "", "fluctuate"], [4, 4, 1, "", "from_json"], [4, 5, 1, "", "full_comparison"], [4, 4, 1, "", "generalized_poisson_llh"], [4, 5, 1, "", "hash"], [4, 5, 1, "", "hashable_state"], [4, 5, 1, "", "hist"], [4, 4, 1, "", "item"], [4, 4, 1, "", "iterbins"], [4, 4, 1, "", "itercoords"], [4, 4, 1, "", "llh"], [4, 4, 1, "", "log"], [4, 4, 1, "", "log10"], [4, 4, 1, "", "mcllh_eff"], [4, 4, 1, "", "mcllh_mean"], [4, 4, 1, "", "metric_total"], [4, 4, 1, "", "mod_chi2"], [4, 5, 1, "", "name"], [4, 5, 1, "", "nominal_values"], [4, 5, 1, "", "normalize_values"], [4, 5, 1, "", "num_entries"], [4, 4, 1, "", "plot"], [4, 4, 1, "", "project"], [4, 4, 1, "", "rebin"], [4, 4, 1, "", "reorder_dimensions"], [4, 4, 1, "", "round2int"], [4, 5, 1, "", "serializable_state"], [4, 4, 1, "", "set_errors"], [4, 4, 1, "", "set_poisson_errors"], [4, 5, 1, "", "shape"], [4, 4, 1, "", "signed_sqrt_mod_chi2"], [4, 5, 1, "", "size"], [4, 4, 1, "", "slice"], [4, 4, 1, "", "split"], [4, 4, 1, "", "sqrt"], [4, 4, 1, "", "squeeze"], [4, 5, 1, "", "std_devs"], [4, 4, 1, "", "sum"], [4, 5, 1, "", "tex"], [4, 4, 1, "", "to_json"]], "pisa.core.map.MapSet": [[4, 4, 1, "", "allclose"], [4, 4, 1, "", "apply_to_maps"], [4, 4, 1, "", "chi2_per_map"], [4, 4, 1, "", "chi2_total"], [4, 4, 1, "", "collate_with_names"], [4, 4, 1, "", "combine_re"], [4, 4, 1, "", "combine_wildcard"], [4, 4, 1, "", "compare"], [4, 4, 1, "", "downsample"], [4, 4, 1, "", "find_map"], [4, 4, 1, "", "fluctuate"], [4, 4, 1, "", "from_json"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "hash_maps"], [4, 5, 1, "", "hashes"], [4, 4, 1, "", "index"], [4, 4, 1, "", "llh_per_map"], [4, 4, 1, "", "llh_total"], [4, 4, 1, "", "log"], [4, 4, 1, "", "log10"], [4, 4, 1, "", "metric_per_map"], [4, 4, 1, "", "metric_total"], [4, 5, 1, "", "name"], [4, 5, 1, "", "names"], [4, 4, 1, "", "plot"], [4, 4, 1, "", "pop"], [4, 4, 1, "", "project"], [4, 4, 1, "", "rebin"], [4, 4, 1, "", "reorder_dimensions"], [4, 5, 1, "", "serializable_state"], [4, 4, 1, "", "set_poisson_errors"], [4, 4, 1, "", "sqrt"], [4, 4, 1, "", "squeeze"], [4, 4, 1, "", "sum"], [4, 4, 1, "", "to_json"]], "pisa.core.param": [[4, 3, 1, "", "DerivedParam"], [4, 3, 1, "", "Param"], [4, 3, 1, "", "ParamSelector"], [4, 3, 1, "", "ParamSet"], [4, 6, 1, "", "test_Param"], [4, 6, 1, "", "test_ParamSelector"], [4, 6, 1, "", "test_ParamSet"]], "pisa.core.param.DerivedParam": [[4, 5, 1, "", "callable"], [4, 5, 1, "", "depends_names"], [4, 5, 1, "", "dependson"], [4, 4, 1, "", "from_state"], [4, 4, 1, "", "prior_penalty"], [4, 5, 1, "", "range"], [4, 5, 1, "", "serializable_state"], [4, 5, 1, "", "state"], [4, 4, 1, "", "to_json"], [4, 4, 1, "", "validate_value"]], "pisa.core.param.Param": [[4, 5, 1, "", "dimensionality"], [4, 4, 1, "", "from_json"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "ito"], [4, 5, 1, "", "m"], [4, 4, 1, "", "m_as"], [4, 5, 1, "", "magnitude"], [4, 5, 1, "", "nominal_value"], [4, 5, 1, "", "prior"], [4, 5, 1, "", "prior_chi2"], [4, 5, 1, "", "prior_llh"], [4, 4, 1, "", "prior_penalty"], [4, 4, 1, "", "randomize"], [4, 5, 1, "", "range"], [4, 4, 1, "", "reset"], [4, 5, 1, "", "serializable_state"], [4, 4, 1, "", "set_nominal_to_current_value"], [4, 5, 1, "", "state"], [4, 5, 1, "", "tex"], [4, 4, 1, "", "to"], [4, 4, 1, "", "to_json"], [4, 5, 1, "", "u"], [4, 5, 1, "", "units"], [4, 4, 1, "", "validate_value"], [4, 5, 1, "", "value"]], "pisa.core.param.ParamSelector": [[4, 4, 1, "", "get"], [4, 5, 1, "", "param_selections"], [4, 5, 1, "", "params"], [4, 4, 1, "", "select_params"], [4, 4, 1, "", "update"]], "pisa.core.param.ParamSet": [[4, 4, 1, "", "add_covariance"], [4, 5, 1, "", "are_discrete"], [4, 5, 1, "", "are_fixed"], [4, 5, 1, "", "continuous"], [4, 5, 1, "", "discrete"], [4, 4, 1, "", "extend"], [4, 4, 1, "", "fix"], [4, 5, 1, "", "fixed"], [4, 5, 1, "", "free"], [4, 4, 1, "", "from_json"], [4, 5, 1, "", "has_derived"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "index"], [4, 4, 1, "", "insert"], [4, 5, 1, "", "is_nominal"], [4, 4, 1, "", "issubset"], [4, 4, 1, "", "issuperset"], [4, 5, 1, "", "name_val_dict"], [4, 5, 1, "", "names"], [4, 5, 1, "", "nominal_values"], [4, 5, 1, "", "nominal_values_hash"], [4, 5, 1, "", "priors"], [4, 5, 1, "", "priors_chi2"], [4, 5, 1, "", "priors_llh"], [4, 4, 1, "", "priors_penalties"], [4, 4, 1, "", "priors_penalty"], [4, 4, 1, "", "randomize_free"], [4, 5, 1, "", "ranges"], [4, 4, 1, "", "replace"], [4, 4, 1, "", "reset_all"], [4, 4, 1, "", "reset_free"], [4, 5, 1, "", "serializable_state"], [4, 4, 1, "", "set_nominal_by_current_values"], [4, 4, 1, "", "set_values"], [4, 5, 1, "", "state"], [4, 4, 1, "", "tabulate"], [4, 5, 1, "", "tex"], [4, 4, 1, "", "to_json"], [4, 4, 1, "", "unfix"], [4, 4, 1, "", "update"], [4, 4, 1, "", "update_existing"], [4, 5, 1, "", "values"], [4, 5, 1, "", "values_hash"]], "pisa.core.pipeline": [[4, 3, 1, "", "Pipeline"], [4, 6, 1, "", "main"], [4, 6, 1, "", "parse_args"], [4, 6, 1, "", "test_Pipeline"]], "pisa.core.pipeline.Pipeline": [[4, 4, 1, "", "add_covariance"], [4, 5, 1, "", "config"], [4, 4, 1, "", "get_outputs"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "index"], [4, 5, 1, "", "param_selections"], [4, 5, 1, "", "params"], [4, 5, 1, "", "profile"], [4, 4, 1, "", "report_profile"], [4, 4, 1, "", "run"], [4, 4, 1, "", "select_params"], [4, 4, 1, "", "setup"], [4, 5, 1, "", "source_code_hash"], [4, 5, 1, "", "stage_names"], [4, 5, 1, "", "stages"], [4, 4, 1, "", "tabulate"], [4, 4, 1, "", "update_params"]], "pisa.core.prior": [[4, 3, 1, "", "Prior"], [4, 6, 1, "", "get_prior_bounds"], [4, 6, 1, "", "test_Prior"]], "pisa.core.prior.Prior": [[4, 4, 1, "", "chi2"], [4, 4, 1, "", "llh"], [4, 5, 1, "", "serializable_state"], [4, 5, 1, "", "state"], [4, 5, 1, "", "units_str"]], "pisa.core.stage": [[4, 3, 1, "", "Stage"]], "pisa.core.stage.Stage": [[4, 4, 1, "", "apply"], [4, 4, 1, "", "apply_function"], [4, 4, 1, "", "compute"], [4, 4, 1, "", "compute_function"], [4, 5, 1, "", "debug_mode"], [4, 5, 1, "", "error_method"], [4, 2, 1, "", "expected_params"], [4, 2, 1, "", "full_hash"], [4, 5, 1, "", "hash"], [4, 4, 1, "", "include_attrs_for_hashes"], [4, 5, 1, "", "is_map"], [4, 5, 1, "", "param_selections"], [4, 5, 1, "", "params"], [4, 4, 1, "", "report_profile"], [4, 4, 1, "", "run"], [4, 4, 1, "", "select_params"], [4, 2, 1, "", "service_name"], [4, 4, 1, "", "setup"], [4, 4, 1, "", "setup_function"], [4, 5, 1, "", "source_code_hash"], [4, 2, 1, "", "stage_name"], [4, 4, 1, "", "validate_params"]], "pisa.core.translation": [[4, 6, 1, "", "find_index"], [4, 6, 1, "", "find_index_unsafe"], [4, 6, 1, "", "histogram"], [4, 6, 1, "", "lookup"], [4, 6, 1, "", "resample"], [4, 6, 1, "", "test_find_index"], [4, 6, 1, "", "test_histogram"]], "pisa.float32": [[2, 4, 1, "", "as_integer_ratio"], [2, 4, 1, "", "is_integer"]], "pisa.float64": [[2, 4, 1, "", "as_integer_ratio"], [2, 4, 1, "", "is_integer"]], "pisa.int16": [[2, 4, 1, "", "bit_count"]], "pisa.int32": [[2, 4, 1, "", "bit_count"]], "pisa.int64": [[2, 4, 1, "", "bit_count"]], "pisa.int8": [[2, 4, 1, "", "bit_count"]], "pisa.scripts": [[5, 0, 0, "-", "add_flux_to_events_file"], [5, 0, 0, "-", "compare"], [5, 0, 0, "-", "convert_config_format"], [5, 0, 0, "-", "fit_hypersurfaces"], [5, 0, 0, "-", "make_events_file"], [5, 0, 0, "-", "make_nufit_theta23_spline_priors"], [5, 0, 0, "-", "test_flux_weights"]], "pisa.scripts.add_flux_to_events_file": [[5, 6, 1, "", "add_fluxes_to_file"], [5, 6, 1, "", "main"]], "pisa.scripts.compare": [[5, 6, 1, "", "compare"], [5, 6, 1, "", "main"], [5, 6, 1, "", "parse_args"]], "pisa.scripts.convert_config_format": [[5, 6, 1, "", "main"], [5, 6, 1, "", "parse_args"]], "pisa.scripts.fit_hypersurfaces": [[5, 1, 1, "", "APPLY_ALL_SECTION_NAME"], [5, 1, 1, "", "COMBINE_REGEX_OPTION"], [5, 1, 1, "", "GENERAL_SECTION_NAME"], [5, 1, 1, "", "REMOVE_OPTION_RE"], [5, 1, 1, "", "SET_OPTION_RE"], [5, 1, 1, "", "SYS_FUNC_LIST_OPTION"], [5, 1, 1, "", "SYS_LIST_OPTION"], [5, 1, 1, "", "SYS_SET_OPTION"], [5, 1, 1, "", "UNITS_OPTION"], [5, 1, 1, "", "UNITS_SPECIFIER"], [5, 6, 1, "", "create_hypersurfaces"], [5, 6, 1, "", "load_and_modify_pipeline_cfg"], [5, 6, 1, "", "main"], [5, 6, 1, "", "parse_args"], [5, 6, 1, "", "parse_fit_config"]], "pisa.scripts.make_events_file": [[5, 1, 1, "", "CMSQ_TO_MSQ"], [5, 6, 1, "", "main"], [5, 6, 1, "", "makeEventsFile"], [5, 6, 1, "", "parse_args"], [5, 6, 1, "", "powerLawIntegral"]], "pisa.scripts.make_nufit_theta23_spline_priors": [[5, 6, 1, "", "extract_vals"], [5, 6, 1, "", "main"], [5, 6, 1, "", "make_prior_dict"]], "pisa.scripts.test_flux_weights": [[5, 6, 1, "", "do_1d_2d_bartol_test"], [5, 6, 1, "", "do_1d_2d_honda_test"], [5, 6, 1, "", "do_1d_3d_honda_test"], [5, 6, 1, "", "do_2d_2d_bartol_test"], [5, 6, 1, "", "do_2d_2d_comparisons"], [5, 6, 1, "", "do_2d_2d_honda_test"], [5, 6, 1, "", "do_2d_3d_honda_test"], [5, 6, 1, "", "logplot"], [5, 6, 1, "", "main"], [5, 6, 1, "", "plot_1d_slices"], [5, 6, 1, "", "take_average"]], "pisa.stages": [[7, 0, 0, "-", "absorption"], [8, 0, 0, "-", "aeff"], [9, 0, 0, "-", "background"], [11, 0, 0, "-", "data"], [12, 0, 0, "-", "discr_sys"], [13, 0, 0, "-", "flux"], [14, 0, 0, "-", "likelihood"], [15, 0, 0, "-", "osc"], [18, 0, 0, "-", "pid"], [19, 0, 0, "-", "reco"], [21, 0, 0, "-", "utils"], [22, 0, 0, "-", "xsec"]], "pisa.stages.absorption": [[7, 0, 0, "-", "earth_absorption"]], "pisa.stages.absorption.earth_absorption": [[7, 1, 1, "", "FLAV_BAR_STR_MAPPING"], [7, 6, 1, "", "calculate_survivalprob"], [7, 3, 1, "", "earth_absorption"]], "pisa.stages.absorption.earth_absorption.earth_absorption": [[7, 4, 1, "", "apply_function"], [7, 4, 1, "", "calculate_xsections"], [7, 4, 1, "", "compute_function"], [7, 4, 1, "", "setup_function"]], "pisa.stages.aeff": [[8, 0, 0, "-", "aeff"], [8, 0, 0, "-", "weight"], [8, 0, 0, "-", "weight_hnl"]], "pisa.stages.aeff.aeff": [[8, 3, 1, "", "aeff"]], "pisa.stages.aeff.aeff.aeff": [[8, 4, 1, "", "apply_function"]], "pisa.stages.aeff.weight": [[8, 3, 1, "", "weight"]], "pisa.stages.aeff.weight.weight": [[8, 4, 1, "", "apply_function"]], "pisa.stages.aeff.weight_hnl": [[8, 6, 1, "", "re_weight_hnl"], [8, 3, 1, "", "weight_hnl"]], "pisa.stages.aeff.weight_hnl.weight_hnl": [[8, 4, 1, "", "apply_function"]], "pisa.stages.background": [[9, 0, 0, "-", "atm_muons"]], "pisa.stages.background.atm_muons": [[9, 3, 1, "", "atm_muons"]], "pisa.stages.background.atm_muons.atm_muons": [[9, 4, 1, "", "apply_function"], [9, 4, 1, "", "setup_function"]], "pisa.stages.data": [[11, 0, 0, "-", "csv_data_hist"], [11, 0, 0, "-", "csv_icc_hist"], [11, 0, 0, "-", "csv_loader"], [11, 0, 0, "-", "freedom_hdf5_loader"], [11, 0, 0, "-", "grid"], [11, 0, 0, "-", "meows_loader"], [11, 0, 0, "-", "simple_data_loader"], [11, 0, 0, "-", "simple_signal"], [11, 0, 0, "-", "sqlite_loader"], [11, 0, 0, "-", "toy_event_generator"]], "pisa.stages.data.csv_data_hist": [[11, 3, 1, "", "csv_data_hist"]], "pisa.stages.data.csv_data_hist.csv_data_hist": [[11, 4, 1, "", "setup_function"]], "pisa.stages.data.csv_icc_hist": [[11, 3, 1, "", "csv_icc_hist"]], "pisa.stages.data.csv_icc_hist.csv_icc_hist": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.csv_loader": [[11, 3, 1, "", "csv_loader"]], "pisa.stages.data.csv_loader.csv_loader": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.freedom_hdf5_loader": [[11, 3, 1, "", "freedom_hdf5_loader"]], "pisa.stages.data.freedom_hdf5_loader.freedom_hdf5_loader": [[11, 4, 1, "", "apply_cuts"], [11, 4, 1, "", "apply_function"], [11, 4, 1, "", "calc_rho36"], [11, 4, 1, "", "calc_uncertainties"], [11, 4, 1, "", "fill_variable_dict"], [11, 4, 1, "", "load_hdf5_file"], [11, 4, 1, "", "setup_function"], [11, 4, 1, "", "unpack_file_data"]], "pisa.stages.data.grid": [[11, 3, 1, "", "grid"]], "pisa.stages.data.grid.grid": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.meows_loader": [[11, 3, 1, "", "meows_loader"]], "pisa.stages.data.meows_loader.meows_loader": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.simple_data_loader": [[11, 3, 1, "", "simple_data_loader"]], "pisa.stages.data.simple_data_loader.simple_data_loader": [[11, 4, 1, "", "apply_cuts_to_events"], [11, 4, 1, "", "apply_function"], [11, 4, 1, "", "load_events"], [11, 4, 1, "", "record_event_properties"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.simple_signal": [[11, 3, 1, "", "simple_signal"]], "pisa.stages.data.simple_signal.simple_signal": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.sqlite_loader": [[11, 3, 1, "", "sqlite_loader"]], "pisa.stages.data.sqlite_loader.sqlite_loader": [[11, 4, 1, "", "add_aeff_weight"], [11, 4, 1, "", "add_reco"], [11, 4, 1, "", "add_truth"], [11, 4, 1, "", "apply_function"], [11, 4, 1, "", "get_pid_and_interaction_type"], [11, 4, 1, "", "initialize_weights"], [11, 4, 1, "", "query_database"], [11, 4, 1, "", "setup_function"]], "pisa.stages.data.toy_event_generator": [[11, 3, 1, "", "toy_event_generator"]], "pisa.stages.data.toy_event_generator.toy_event_generator": [[11, 4, 1, "", "apply_function"], [11, 4, 1, "", "setup_function"]], "pisa.stages.discr_sys": [[12, 0, 0, "-", "hypersurfaces"], [12, 0, 0, "-", "ultrasurfaces"]], "pisa.stages.discr_sys.hypersurfaces": [[12, 3, 1, "", "hypersurfaces"]], "pisa.stages.discr_sys.hypersurfaces.hypersurfaces": [[12, 4, 1, "", "apply_function"], [12, 4, 1, "", "compute_function"], [12, 4, 1, "", "setup_function"]], "pisa.stages.discr_sys.ultrasurfaces": [[12, 3, 1, "", "ultrasurfaces"]], "pisa.stages.discr_sys.ultrasurfaces.ultrasurfaces": [[12, 4, 1, "", "apply_function"], [12, 4, 1, "", "compute_function"], [12, 4, 1, "", "setup_function"]], "pisa.stages.flux": [[13, 0, 0, "-", "astrophysical"], [13, 0, 0, "-", "barr_simple"], [13, 0, 0, "-", "daemon_flux"], [13, 0, 0, "-", "hillasg"], [13, 0, 0, "-", "honda_ip"], [13, 0, 0, "-", "mceq_barr"], [13, 0, 0, "-", "mceq_barr_red"]], "pisa.stages.flux.astrophysical": [[13, 6, 1, "", "apply_sys_loop"], [13, 3, 1, "", "astrophysical"], [13, 6, 1, "", "spectral_index_scale"]], "pisa.stages.flux.astrophysical.astrophysical": [[13, 4, 1, "", "apply_function"], [13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.barr_simple": [[13, 3, 1, "", "barr_simple"]], "pisa.stages.flux.barr_simple.barr_simple": [[13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.daemon_flux": [[13, 3, 1, "", "daemon_flux"], [13, 6, 1, "", "evaluate_flux_map"], [13, 6, 1, "", "make_2d_flux_map"]], "pisa.stages.flux.daemon_flux.daemon_flux": [[13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.hillasg": [[13, 3, 1, "", "hillasg"]], "pisa.stages.flux.hillasg.hillasg": [[13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.honda_ip": [[13, 3, 1, "", "honda_ip"]], "pisa.stages.flux.honda_ip.honda_ip": [[13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.mceq_barr": [[13, 3, 1, "", "mceq_barr"]], "pisa.stages.flux.mceq_barr.mceq_barr": [[13, 4, 1, "", "antipion_production"], [13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.flux.mceq_barr_red": [[13, 6, 1, "", "apply_sys_loop"], [13, 3, 1, "", "mceq_barr_red"], [13, 6, 1, "", "spectral_index_scale"]], "pisa.stages.flux.mceq_barr_red.mceq_barr_red": [[13, 4, 1, "", "antipion_production"], [13, 4, 1, "", "compute_function"], [13, 4, 1, "", "setup_function"]], "pisa.stages.likelihood": [[14, 0, 0, "-", "generalized_llh_params"]], "pisa.stages.likelihood.generalized_llh_params": [[14, 3, 1, "", "generalized_llh_params"]], "pisa.stages.likelihood.generalized_llh_params.generalized_llh_params": [[14, 4, 1, "", "apply_function"], [14, 4, 1, "", "setup_function"]], "pisa.stages.osc": [[15, 0, 0, "-", "decay_params"], [15, 0, 0, "-", "decoherence"], [15, 0, 0, "-", "globes"], [15, 0, 0, "-", "layers"], [15, 0, 0, "-", "lri_params"], [15, 0, 0, "-", "nsi_params"], [15, 0, 0, "-", "osc_params"], [15, 0, 0, "-", "prob3"], [17, 0, 0, "-", "prob3numba"], [15, 0, 0, "-", "scaling_params"], [15, 0, 0, "-", "two_nu_osc"]], "pisa.stages.osc.decay_params": [[15, 3, 1, "", "DecayParams"]], "pisa.stages.osc.decay_params.DecayParams": [[15, 5, 1, "id0", "decay_alpha3"], [15, 5, 1, "id1", "decay_matrix"]], "pisa.stages.osc.decoherence": [[15, 3, 1, "", "DecoherenceParams"], [15, 6, 1, "", "calc_decoherence_probs"], [15, 3, 1, "", "decoherence"]], "pisa.stages.osc.decoherence.decoherence": [[15, 4, 1, "", "apply_function"], [15, 4, 1, "", "calc_probs"], [15, 4, 1, "", "compute_function"], [15, 4, 1, "", "setup_function"]], "pisa.stages.osc.globes": [[15, 3, 1, "", "globes"]], "pisa.stages.osc.globes.globes": [[15, 4, 1, "", "apply_function"], [15, 4, 1, "", "calc_prob_e_mu"], [15, 4, 1, "", "calc_prob_nonsterile"], [15, 4, 1, "", "compute_function"], [15, 4, 1, "", "setup_function"]], "pisa.stages.osc.layers": [[15, 3, 1, "", "Layers"], [15, 6, 1, "", "extCalcLayers"]], "pisa.stages.osc.layers.Layers": [[15, 4, 1, "", "calcLayers"], [15, 4, 1, "", "calcPathLength"], [15, 4, 1, "", "computeMinLengthToLayers"], [15, 5, 1, "id2", "density"], [15, 5, 1, "id3", "distance"], [15, 2, 1, "", "max_layers"], [15, 5, 1, "id4", "n_layers"], [15, 4, 1, "", "scaling"], [15, 4, 1, "", "setElecFrac"], [15, 4, 1, "", "weight_density_to_YeFrac"]], "pisa.stages.osc.lri_params": [[15, 3, 1, "", "LRIParams"]], "pisa.stages.osc.lri_params.LRIParams": [[15, 5, 1, "", "potential_matrix_emu"], [15, 5, 1, "", "potential_matrix_etau"], [15, 5, 1, "", "potential_matrix_mutau"], [15, 5, 1, "", "v_lri"]], "pisa.stages.osc.nsi_params": [[15, 3, 1, "", "NSIParams"], [15, 3, 1, "", "StdNSIParams"], [15, 3, 1, "", "VacuumLikeNSIParams"]], "pisa.stages.osc.nsi_params.NSIParams": [[15, 2, 1, "", "eps_matrix"]], "pisa.stages.osc.nsi_params.StdNSIParams": [[15, 5, 1, "", "eps_ee"], [15, 5, 1, "", "eps_emu"], [15, 5, 1, "", "eps_etau"], [15, 5, 1, "id5", "eps_matrix"], [15, 5, 1, "", "eps_mumu"], [15, 5, 1, "", "eps_mutau"], [15, 5, 1, "", "eps_tautau"]], "pisa.stages.osc.nsi_params.VacuumLikeNSIParams": [[15, 5, 1, "", "alpha1"], [15, 5, 1, "", "alpha2"], [15, 5, 1, "", "deltansi"], [15, 5, 1, "", "eps_ee"], [15, 5, 1, "", "eps_emu"], [15, 5, 1, "", "eps_etau"], [15, 5, 1, "", "eps_matrix"], [15, 5, 1, "", "eps_matrix_analytical"], [15, 5, 1, "", "eps_mumu"], [15, 5, 1, "", "eps_mutau"], [15, 5, 1, "", "eps_prime"], [15, 5, 1, "", "eps_scale"], [15, 5, 1, "", "eps_tautau"], [15, 5, 1, "", "phi12"], [15, 5, 1, "", "phi13"], [15, 5, 1, "", "phi23"]], "pisa.stages.osc.osc_params": [[15, 3, 1, "", "OscParams"]], "pisa.stages.osc.osc_params.OscParams": [[15, 5, 1, "id6", "deltacp"], [15, 5, 1, "id7", "dm_matrix"], [15, 5, 1, "id8", "mix_matrix"], [15, 5, 1, "id9", "mix_matrix_complex"], [15, 5, 1, "id10", "mix_matrix_reparam"], [15, 5, 1, "id11", "mix_matrix_reparam_complex"], [15, 5, 1, "", "sin12"], [15, 5, 1, "", "sin13"], [15, 5, 1, "", "sin14"], [15, 5, 1, "", "sin23"], [15, 5, 1, "", "theta12"], [15, 5, 1, "", "theta13"], [15, 5, 1, "", "theta14"], [15, 5, 1, "", "theta23"]], "pisa.stages.osc.prob3": [[15, 3, 1, "", "prob3"]], "pisa.stages.osc.prob3.prob3": [[15, 4, 1, "", "apply_function"], [15, 4, 1, "", "calc_probs"], [15, 4, 1, "", "compute_function"], [15, 2, 1, "", "gen_mat_pot_matrix_complex"], [15, 2, 1, "", "nsi_type"], [15, 2, 1, "", "reparam_mix_matrix"], [15, 4, 1, "", "setup_function"]], "pisa.stages.osc.prob3numba": [[17, 0, 0, "-", "numba_osc_hostfuncs"], [17, 0, 0, "-", "numba_osc_kernels"], [17, 0, 0, "-", "numba_osc_tests"], [17, 0, 0, "-", "test_numba"]], "pisa.stages.osc.prob3numba.numba_osc_hostfuncs": [[17, 1, 1, "", "CX"], [17, 1, 1, "", "FX"], [17, 1, 1, "", "IX"]], "pisa.stages.osc.prob3numba.numba_osc_kernels": [[17, 6, 1, "", "get_transition_matrix"], [17, 6, 1, "", "osc_probs_layers_kernel"]], "pisa.stages.osc.prob3numba.numba_osc_tests": [[17, 1, 1, "", "MAT_DOT_MAT_SUBSCR"], [17, 6, 1, "", "ary2str"], [17, 6, 1, "", "auto_populate_test_case"], [17, 6, 1, "", "check"], [17, 6, 1, "", "compare_numeric"], [17, 6, 1, "", "execute_func"], [17, 6, 1, "", "main"], [17, 6, 1, "", "run_test_case"], [17, 6, 1, "", "stability_test"], [17, 6, 1, "", "test_prob3numba"]], "pisa.stages.osc.prob3numba.test_numba": [[17, 6, 1, "", "main"]], "pisa.stages.osc.scaling_params": [[15, 3, 1, "", "Core_scaling_w_constrain"], [15, 3, 1, "", "Core_scaling_wo_constrain"], [15, 3, 1, "", "Mass_scaling"]], "pisa.stages.osc.scaling_params.Core_scaling_w_constrain": [[15, 5, 1, "", "core_density_scale"], [15, 4, 1, "", "is_descending"], [15, 4, 1, "", "is_positive"], [15, 5, 1, "", "scaling_array"]], "pisa.stages.osc.scaling_params.Core_scaling_wo_constrain": [[15, 5, 1, "", "core_density_scale"], [15, 5, 1, "", "innermantle_density_scale"], [15, 5, 1, "", "middlemantle_density_scale"], [15, 5, 1, "", "scaling_factor_array"]], "pisa.stages.osc.scaling_params.Mass_scaling": [[15, 5, 1, "", "density_scale"]], "pisa.stages.osc.two_nu_osc": [[15, 3, 1, "", "two_nu_osc"]], "pisa.stages.osc.two_nu_osc.two_nu_osc": [[15, 4, 1, "", "apply_function"]], "pisa.stages.pid": [[18, 0, 0, "-", "shift_scale_pid"]], "pisa.stages.pid.shift_scale_pid": [[18, 3, 1, "", "shift_scale_pid"]], "pisa.stages.pid.shift_scale_pid.shift_scale_pid": [[18, 4, 1, "", "apply_function"], [18, 4, 1, "", "compute_function"], [18, 4, 1, "", "setup_function"]], "pisa.stages.reco": [[19, 0, 0, "-", "resolutions"], [19, 0, 0, "-", "simple_param"]], "pisa.stages.reco.resolutions": [[19, 3, 1, "", "resolutions"]], "pisa.stages.reco.resolutions.resolutions": [[19, 4, 1, "", "setup_function"]], "pisa.stages.reco.simple_param": [[19, 3, 1, "", "simple_param"], [19, 6, 1, "", "simple_pid_parameterization"], [19, 6, 1, "", "simple_reco_coszen_parameterization"], [19, 6, 1, "", "simple_reco_energy_parameterization"]], "pisa.stages.reco.simple_param.simple_param": [[19, 4, 1, "", "setup_function"]], "pisa.stages.utils": [[21, 0, 0, "-", "add_indices"], [21, 0, 0, "-", "adhoc_sys"], [21, 0, 0, "-", "bootstrap"], [21, 0, 0, "-", "fix_error"], [21, 0, 0, "-", "hist"], [21, 0, 0, "-", "kde"], [21, 0, 0, "-", "kfold"], [21, 0, 0, "-", "resample"], [21, 0, 0, "-", "set_variance"]], "pisa.stages.utils.add_indices": [[21, 3, 1, "", "add_indices"]], "pisa.stages.utils.add_indices.add_indices": [[21, 4, 1, "", "setup_function"]], "pisa.stages.utils.adhoc_sys": [[21, 3, 1, "", "adhoc_sys"]], "pisa.stages.utils.adhoc_sys.adhoc_sys": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.bootstrap": [[21, 3, 1, "", "bootstrap"], [21, 6, 1, "", "insert_bootstrap_after_data_loader"], [21, 6, 1, "", "test_bootstrap"]], "pisa.stages.utils.bootstrap.bootstrap": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.fix_error": [[21, 3, 1, "", "fix_error"]], "pisa.stages.utils.fix_error.fix_error": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "compute_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.hist": [[21, 3, 1, "", "hist"]], "pisa.stages.utils.hist.hist": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.kde": [[21, 3, 1, "", "kde"]], "pisa.stages.utils.kde.kde": [[21, 4, 1, "", "apply"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.kfold": [[21, 3, 1, "", "kfold"]], "pisa.stages.utils.kfold.kfold": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.resample": [[21, 3, 1, "", "ResampleMode"], [21, 3, 1, "", "resample"], [21, 6, 1, "", "test_resample"]], "pisa.stages.utils.resample.ResampleMode": [[21, 2, 1, "", "ARB"], [21, 2, 1, "", "DOWN"], [21, 2, 1, "", "UP"]], "pisa.stages.utils.resample.resample": [[21, 4, 1, "", "apply"], [21, 4, 1, "", "setup_function"]], "pisa.stages.utils.set_variance": [[21, 6, 1, "", "apply_floor"], [21, 6, 1, "", "set_constant"], [21, 3, 1, "", "set_variance"]], "pisa.stages.utils.set_variance.set_variance": [[21, 4, 1, "", "apply_function"], [21, 4, 1, "", "compute_function"], [21, 4, 1, "", "setup_function"]], "pisa.stages.xsec": [[22, 0, 0, "-", "dis_sys"], [22, 0, 0, "-", "genie_sys"], [22, 0, 0, "-", "nutau_xsec"]], "pisa.stages.xsec.dis_sys": [[22, 3, 1, "", "dis_sys"]], "pisa.stages.xsec.dis_sys.dis_sys": [[22, 4, 1, "", "apply_function"], [22, 4, 1, "", "setup_function"]], "pisa.stages.xsec.genie_sys": [[22, 6, 1, "", "apply_genie_sys"], [22, 3, 1, "", "genie_sys"]], "pisa.stages.xsec.genie_sys.genie_sys": [[22, 4, 1, "", "apply_function"], [22, 4, 1, "", "setup_function"]], "pisa.stages.xsec.nutau_xsec": [[22, 3, 1, "", "nutau_xsec"]], "pisa.stages.xsec.nutau_xsec.nutau_xsec": [[22, 4, 1, "", "apply_function"], [22, 4, 1, "", "compute_function"], [22, 4, 1, "", "setup_function"]], "pisa.uint16": [[2, 4, 1, "", "bit_count"]], "pisa.uint32": [[2, 4, 1, "", "bit_count"]], "pisa.uint64": [[2, 4, 1, "", "bit_count"]], "pisa.uint8": [[2, 4, 1, "", "bit_count"]], "pisa.utils": [[23, 0, 0, "-", "barlow"], [23, 0, 0, "-", "barr_parameterization"], [23, 0, 0, "-", "callable"], [23, 0, 0, "-", "comparisons"], [23, 0, 0, "-", "config_parser"], [23, 0, 0, "-", "cross_sections"], [23, 0, 0, "-", "data_proc_params"], [23, 0, 0, "-", "fileio"], [23, 0, 0, "-", "fisher_matrix"], [23, 0, 0, "-", "flavInt"], [23, 0, 0, "-", "flux_weights"], [23, 0, 0, "-", "format"], [23, 0, 0, "-", "gaussians"], [23, 0, 0, "-", "hash"], [23, 0, 0, "-", "hdf"], [23, 0, 0, "-", "hdfchain"], [24, 0, 0, "-", "hypersurface"], [23, 0, 0, "-", "jsons"], [23, 0, 0, "-", "kde_hist"], [23, 0, 0, "-", "likelihood_functions"], [25, 0, 0, "-", "llh_defs"], [23, 0, 0, "-", "llh_server"], [23, 0, 0, "-", "log"], [23, 0, 0, "-", "matrix"], [23, 0, 0, "-", "mcSimRunSettings"], [23, 0, 0, "-", "numba_tools"], [23, 0, 0, "-", "plotter"], [23, 0, 0, "-", "profiler"], [23, 0, 0, "-", "pull_method"], [23, 0, 0, "-", "random_numbers"], [23, 0, 0, "-", "resources"], [23, 0, 0, "-", "spline"], [23, 0, 0, "-", "spline_smooth"], [23, 0, 0, "-", "stats"], [23, 0, 0, "-", "tests"], [23, 0, 0, "-", "vbwkde"], [23, 0, 0, "-", "vectorizer"]], "pisa.utils.barlow": [[23, 3, 1, "", "Likelihoods"]], "pisa.utils.barlow.Likelihoods": [[23, 2, 1, "", "bestfit_plots"], [23, 2, 1, "", "current_bin"], [23, 2, 1, "", "data_histogram"], [23, 4, 1, "", "get_llh"], [23, 4, 1, "", "get_llh_barlow_bin"], [23, 4, 1, "", "get_llh_poisson"], [23, 4, 1, "", "get_plot"], [23, 4, 1, "", "get_single_plots"], [23, 2, 1, "", "mc_histograms"], [23, 4, 1, "", "reset"], [23, 4, 1, "", "set_data"], [23, 4, 1, "", "set_mc"], [23, 4, 1, "", "set_unweighted"], [23, 2, 1, "", "shape"], [23, 2, 1, "", "unweighted_histograms"]], "pisa.utils.callable": [[23, 3, 1, "", "Funct"], [23, 3, 1, "", "OPS"], [23, 3, 1, "", "TrigOps"], [23, 3, 1, "", "Var"], [23, 6, 1, "", "cos"], [23, 6, 1, "", "sin"], [23, 6, 1, "", "tan"]], "pisa.utils.callable.Funct": [[23, 4, 1, "", "add_opp"], [23, 4, 1, "", "from_json"], [23, 4, 1, "", "from_state"], [23, 5, 1, "", "serializable_state"], [23, 5, 1, "", "state"], [23, 4, 1, "", "to_json"]], "pisa.utils.callable.OPS": [[23, 2, 1, "", "ADD"], [23, 2, 1, "", "COS"], [23, 2, 1, "", "MUL"], [23, 2, 1, "", "POW"], [23, 2, 1, "", "SIN"], [23, 2, 1, "", "TAN"], [23, 4, 1, "", "from_json"], [23, 4, 1, "", "from_state"], [23, 5, 1, "", "serializable_state"], [23, 5, 1, "", "state"], [23, 4, 1, "", "to_json"]], "pisa.utils.callable.TrigOps": [[23, 5, 1, "", "cos"], [23, 5, 1, "", "sin"], [23, 5, 1, "", "tan"]], "pisa.utils.callable.Var": [[23, 4, 1, "", "from_json"], [23, 4, 1, "", "from_state"], [23, 5, 1, "", "name"], [23, 5, 1, "", "serializable_state"], [23, 5, 1, "", "state"], [23, 4, 1, "", "to_json"]], "pisa.utils.comparisons": [[23, 1, 1, "", "ALLCLOSE_KW"], [23, 1, 1, "", "EQUALITY_PREC"], [23, 1, 1, "", "EQUALITY_SIGFIGS"], [23, 1, 1, "", "FTYPE_PREC"], [23, 6, 1, "", "interpret_quantity"], [23, 6, 1, "", "isbarenumeric"], [23, 6, 1, "", "isscalar"], [23, 6, 1, "", "isunitless"], [23, 6, 1, "", "isvalidname"], [23, 6, 1, "", "normQuant"], [23, 6, 1, "", "recursiveAllclose"], [23, 6, 1, "", "recursiveEquality"], [23, 6, 1, "", "test_isscalar"], [23, 6, 1, "", "test_isunitless"], [23, 6, 1, "", "test_normQuant"], [23, 6, 1, "", "test_recursiveEquality"]], "pisa.utils.config_parser": [[23, 3, 1, "", "MutableMultiFileIterator"], [23, 3, 1, "", "PISAConfigParser"], [23, 6, 1, "", "interpret_param_subfields"], [23, 6, 1, "", "parse_param"], [23, 6, 1, "", "parse_pipeline_config"], [23, 6, 1, "", "parse_quantity"], [23, 6, 1, "", "parse_string_literal"]], "pisa.utils.config_parser.MutableMultiFileIterator": [[23, 5, 1, "", "location"], [23, 4, 1, "", "switch_to_file"]], "pisa.utils.config_parser.PISAConfigParser": [[23, 2, 1, "", "INCLUDE_AS_RE"], [23, 2, 1, "", "INCLUDE_RE"], [23, 2, 1, "", "SECTCRE"], [23, 4, 1, "", "add_section"], [23, 5, 1, "", "hash"], [23, 4, 1, "", "optionxform"], [23, 4, 1, "", "read"], [23, 4, 1, "", "set"]], "pisa.utils.cross_sections": [[23, 3, 1, "", "CrossSections"], [23, 6, 1, "", "manual_test_CrossSections"]], "pisa.utils.cross_sections.CrossSections": [[23, 4, 1, "", "get_version"], [23, 4, 1, "", "get_xs_ratio_integral"], [23, 4, 1, "", "get_xs_ratio_value"], [23, 4, 1, "", "get_xs_value"], [23, 4, 1, "", "load"], [23, 4, 1, "", "load_root_file"], [23, 4, 1, "", "new_from_root"], [23, 4, 1, "", "plot"], [23, 4, 1, "", "save"], [23, 4, 1, "", "set_version"], [23, 4, 1, "", "validate_xsec"]], "pisa.utils.data_proc_params": [[23, 3, 1, "", "DataProcParams"]], "pisa.utils.data_proc_params.DataProcParams": [[23, 4, 1, "", "apply_cuts"], [23, 4, 1, "", "cut_bool_idx"], [23, 4, 1, "", "get_data"], [23, 4, 1, "", "interpret_data"], [23, 4, 1, "", "populate_global_namespace"], [23, 4, 1, "", "retrieve_expression"], [23, 4, 1, "", "retrieve_node_data"], [23, 4, 1, "", "subselect"], [23, 4, 1, "", "validate_cut_spec"], [23, 4, 1, "", "validate_pid_spec"]], "pisa.utils.fileio": [[23, 6, 1, "", "expand"], [23, 6, 1, "", "find_files"], [23, 6, 1, "", "from_cfg"], [23, 6, 1, "", "from_file"], [23, 6, 1, "", "from_pickle"], [23, 6, 1, "", "fsort"], [23, 6, 1, "", "get_valid_filename"], [23, 6, 1, "", "mkdir"], [23, 6, 1, "", "nsort"], [23, 6, 1, "", "nsort_key_func"], [23, 6, 1, "", "to_file"], [23, 6, 1, "", "to_pickle"]], "pisa.utils.fisher_matrix": [[23, 3, 1, "", "FisherMatrix"]], "pisa.utils.fisher_matrix.FisherMatrix": [[23, 4, 1, "", "addPrior"], [23, 4, 1, "", "calculateCovariance"], [23, 4, 1, "", "checkConsistency"], [23, 4, 1, "", "fromFile"], [23, 4, 1, "", "fromPaPAFile"], [23, 4, 1, "", "getBestFit"], [23, 4, 1, "", "getCorrelation"], [23, 4, 1, "", "getCovariance"], [23, 4, 1, "", "getErrorEllipse"], [23, 4, 1, "", "getLabel"], [23, 4, 1, "", "getParameterIndex"], [23, 4, 1, "", "getPrior"], [23, 4, 1, "", "getPriorDict"], [23, 4, 1, "", "getSigma"], [23, 4, 1, "", "getSigmaNoPriors"], [23, 4, 1, "", "getSigmaStatistical"], [23, 4, 1, "", "getSigmaSystematic"], [23, 4, 1, "", "getVariance"], [23, 4, 1, "", "printResults"], [23, 4, 1, "", "printResultsSorted"], [23, 4, 1, "", "removeAllPriors"], [23, 4, 1, "", "removeParameter"], [23, 4, 1, "", "renameParameter"], [23, 4, 1, "", "saveFile"], [23, 4, 1, "", "setLabel"], [23, 4, 1, "", "setPrior"], [23, 4, 1, "", "sortByParam"], [23, 4, 1, "", "translatePrior"]], "pisa.utils.flavInt": [[23, 3, 1, "", "BarSep"], [23, 3, 1, "", "FlavIntData"], [23, 3, 1, "", "FlavIntDataGroup"], [23, 3, 1, "", "IntType"], [23, 3, 1, "", "NuFlav"], [23, 3, 1, "", "NuFlavInt"], [23, 3, 1, "", "NuFlavIntGroup"], [23, 6, 1, "", "flavintGroupsFromString"], [23, 6, 1, "", "get_bar_ssep"], [23, 6, 1, "", "set_bar_ssep"], [23, 6, 1, "", "xlateGroupsStr"]], "pisa.utils.flavInt.FlavIntData": [[23, 4, 1, "", "allclose"], [23, 5, 1, "", "flavints"], [23, 5, 1, "", "flavs"], [23, 4, 1, "", "id_dupes"], [23, 4, 1, "", "save"], [23, 4, 1, "", "validate"]], "pisa.utils.flavInt.FlavIntDataGroup": [[23, 4, 1, "", "allclose"], [23, 5, 1, "", "flavint_groups"], [23, 4, 1, "", "save"], [23, 4, 1, "", "transform_groups"], [23, 4, 1, "", "validate"]], "pisa.utils.flavInt.IntType": [[23, 2, 1, "", "CC_CODE"], [23, 2, 1, "", "IGNORE"], [23, 2, 1, "", "IT_RE"], [23, 2, 1, "", "NC_CODE"], [23, 5, 1, "", "cc"], [23, 5, 1, "", "code"], [23, 5, 1, "", "nc"], [23, 5, 1, "", "tex"]], "pisa.utils.flavInt.NuFlav": [[23, 2, 1, "", "ANTIPART_CODE"], [23, 2, 1, "", "FLAV_RE"], [23, 2, 1, "", "IGNORE"], [23, 2, 1, "", "NUEBAR_CODE"], [23, 2, 1, "", "NUE_CODE"], [23, 2, 1, "", "NUMUBAR_CODE"], [23, 2, 1, "", "NUMU_CODE"], [23, 2, 1, "", "NUTAUBAR_CODE"], [23, 2, 1, "", "NUTAU_CODE"], [23, 2, 1, "", "PART_CODE"], [23, 5, 1, "", "antiparticle"], [23, 5, 1, "", "bar_code"], [23, 5, 1, "", "code"], [23, 5, 1, "", "particle"], [23, 4, 1, "", "pidx"], [23, 5, 1, "", "prob3_codes"], [23, 5, 1, "", "tex"]], "pisa.utils.flavInt.NuFlavInt": [[23, 2, 1, "", "FINT_RE"], [23, 2, 1, "", "FINT_SSEP"], [23, 2, 1, "", "FINT_TEXSEP"], [23, 2, 1, "", "TOKENS"], [23, 5, 1, "", "antiparticle"], [23, 5, 1, "", "cc"], [23, 5, 1, "", "flav"], [23, 5, 1, "", "int_type"], [23, 5, 1, "", "nc"], [23, 5, 1, "", "particle"], [23, 4, 1, "", "pidx"], [23, 5, 1, "", "tex"]], "pisa.utils.flavInt.NuFlavIntGroup": [[23, 2, 1, "", "FLAVINT_RE"], [23, 2, 1, "", "FLAV_RE"], [23, 2, 1, "", "IGNORE"], [23, 2, 1, "", "IT_RE"], [23, 2, 1, "", "TOKENS"], [23, 5, 1, "", "antiparticles"], [23, 5, 1, "", "cc_flavints"], [23, 5, 1, "", "cc_flavs"], [23, 4, 1, "", "file_str"], [23, 5, 1, "", "flavints"], [23, 5, 1, "", "flavs"], [23, 4, 1, "", "group_flavs_by_int_type"], [23, 4, 1, "", "insert"], [23, 4, 1, "", "interpret"], [23, 5, 1, "", "nc_flavints"], [23, 5, 1, "", "nc_flavs"], [23, 5, 1, "", "particles"], [23, 4, 1, "", "remove"], [23, 4, 1, "", "simple_str"], [23, 4, 1, "", "simple_tex"], [23, 5, 1, "", "tex"], [23, 5, 1, "", "unique_flavs_tex"]], "pisa.utils.flux_weights": [[23, 6, 1, "", "calculate_2d_flux_weights"], [23, 6, 1, "", "calculate_3d_flux_weights"], [23, 6, 1, "", "load_2d_bartol_table"], [23, 6, 1, "", "load_2d_honda_table"], [23, 6, 1, "", "load_2d_table"], [23, 6, 1, "", "load_3d_honda_table"], [23, 6, 1, "", "load_3d_table"]], "pisa.utils.format": [[23, 1, 1, "", "BIN_PREFIX_TO_POWER_OF_1024"], [23, 1, 1, "", "NUMBER_RE"], [23, 1, 1, "", "NUMBER_RESTR"], [23, 1, 1, "", "ORDER_OF_MAG_TO_SI_PREFIX"], [23, 1, 1, "", "POWER_OF_1024_TO_BIN_PREFIX"], [23, 1, 1, "", "SI_PREFIX_TO_ORDER_OF_MAG"], [23, 6, 1, "", "arg_str_seq_none"], [23, 6, 1, "", "arg_to_tuple"], [23, 6, 1, "", "default_map_tex"], [23, 6, 1, "", "engfmt"], [23, 6, 1, "", "format_num"], [23, 6, 1, "", "hash2hex"], [23, 6, 1, "", "hr_range_formatter"], [23, 6, 1, "", "hrbool2bool"], [23, 6, 1, "", "hrlist2list"], [23, 6, 1, "", "hrlol2lol"], [23, 6, 1, "", "int2hex"], [23, 6, 1, "", "is_tex"], [23, 6, 1, "", "list2hrlist"], [23, 6, 1, "", "make_valid_python_name"], [23, 6, 1, "", "sep_three_tens"], [23, 6, 1, "", "split"], [23, 6, 1, "", "strip_outer_dollars"], [23, 6, 1, "", "strip_outer_parens"], [23, 6, 1, "", "test_format_num"], [23, 6, 1, "", "test_hr_range_formatter"], [23, 6, 1, "", "test_list2hrlist"], [23, 6, 1, "", "test_timediff"], [23, 6, 1, "", "test_timestamp"], [23, 6, 1, "", "tex_dollars"], [23, 6, 1, "", "tex_join"], [23, 6, 1, "", "text2tex"], [23, 6, 1, "", "timediff"], [23, 6, 1, "", "timestamp"]], "pisa.utils.gaussians": [[23, 6, 1, "", "gaussians"], [23, 6, 1, "", "test_gaussians"]], "pisa.utils.hash": [[23, 1, 1, "", "FAST_HASH_FILESIZE_BYTES"], [23, 1, 1, "", "FAST_HASH_NDARRAY_ELEMENTS"], [23, 1, 1, "", "FAST_HASH_STR_CHARS"], [23, 6, 1, "", "hash_file"], [23, 6, 1, "", "hash_obj"], [23, 6, 1, "", "test_hash_file"], [23, 6, 1, "", "test_hash_obj"]], "pisa.utils.hdf": [[23, 6, 1, "", "from_hdf"], [23, 6, 1, "", "test_hdf"], [23, 6, 1, "", "to_hdf"]], "pisa.utils.hdfchain": [[23, 3, 1, "", "HDFChain"], [23, 3, 1, "", "HDFTableProxy"], [23, 3, 1, "", "TableAccessor"]], "pisa.utils.hdfchain.HDFChain": [[23, 4, 1, "", "getNode"]], "pisa.utils.hdfchain.HDFTableProxy": [[23, 4, 1, "", "col"], [23, 4, 1, "", "col_iter"], [23, 4, 1, "", "read"], [23, 4, 1, "", "read_iter"]], "pisa.utils.hypersurface": [[24, 0, 0, "-", "hyper_interpolator"], [24, 0, 0, "-", "hypersurface"], [24, 0, 0, "-", "hypersurface_plotting"]], "pisa.utils.hypersurface.hyper_interpolator": [[24, 3, 1, "", "HypersurfaceInterpolator"], [24, 6, 1, "", "assemble_interpolated_fits"], [24, 6, 1, "", "get_incomplete_job_idx"], [24, 6, 1, "", "load_interpolated_hypersurfaces"], [24, 6, 1, "", "pipeline_cfg_from_states"], [24, 6, 1, "", "prepare_interpolated_fit"], [24, 6, 1, "", "run_interpolated_fit"], [24, 6, 1, "", "serialize_pipeline_cfg"]], "pisa.utils.hypersurface.hyper_interpolator.HypersurfaceInterpolator": [[24, 5, 1, "", "binning"], [24, 4, 1, "", "get_hypersurface"], [24, 5, 1, "", "interpolation_param_names"], [24, 5, 1, "", "num_interp_params"], [24, 5, 1, "", "param_names"], [24, 4, 1, "", "plot_fits_in_bin"]], "pisa.utils.hypersurface.hypersurface": [[24, 3, 1, "", "Hypersurface"], [24, 3, 1, "", "HypersurfaceParam"], [24, 6, 1, "", "fit_hypersurfaces"], [24, 6, 1, "", "load_hypersurfaces"]], "pisa.utils.hypersurface.hypersurface.Hypersurface": [[24, 4, 1, "", "evaluate"], [24, 4, 1, "", "fit"], [24, 5, 1, "", "fit_coefft_labels"], [24, 5, 1, "", "fit_coeffts"], [24, 5, 1, "", "fit_maps"], [24, 5, 1, "", "fit_param_values"], [24, 4, 1, "", "fluctuate"], [24, 4, 1, "", "from_state"], [24, 4, 1, "", "get_nominal_mask"], [24, 4, 1, "", "get_on_axis_mask"], [24, 5, 1, "", "initialized"], [24, 5, 1, "", "nominal_values"], [24, 5, 1, "", "num_fit_coeffts"], [24, 5, 1, "", "num_fit_sets"], [24, 5, 1, "", "param_names"], [24, 4, 1, "", "report"], [24, 5, 1, "", "serializable_state"]], "pisa.utils.hypersurface.hypersurface.HypersurfaceParam": [[24, 4, 1, "", "evaluate"], [24, 4, 1, "", "from_state"], [24, 4, 1, "", "get_fit_coefft"], [24, 4, 1, "", "get_fit_coefft_idx"], [24, 4, 1, "", "gradient"], [24, 5, 1, "", "serializable_state"]], "pisa.utils.hypersurface.hypersurface_plotting": [[24, 6, 1, "", "plot_bin_fits"], [24, 6, 1, "", "plot_bin_fits_2d"]], "pisa.utils.jsons": [[23, 3, 1, "", "NumpyDecoder"], [23, 3, 1, "", "NumpyEncoder"], [23, 6, 1, "", "dumps"], [23, 6, 1, "", "from_json"], [23, 6, 1, "", "json_string"], [23, 6, 1, "", "loads"], [23, 6, 1, "", "test_to_json_from_json"], [23, 6, 1, "", "to_json"]], "pisa.utils.jsons.NumpyDecoder": [[23, 4, 1, "", "json_array_numpy"]], "pisa.utils.jsons.NumpyEncoder": [[23, 4, 1, "", "default"]], "pisa.utils.kde_hist": [[23, 6, 1, "", "get_hist"], [23, 6, 1, "", "kde_histogramdd"], [23, 6, 1, "", "test_kde_histogramdd"]], "pisa.utils.likelihood_functions": [[23, 6, 1, "", "barlowLLH"], [23, 6, 1, "", "poissonLLH"], [23, 6, 1, "", "poisson_gamma"]], "pisa.utils.llh_server": [[23, 6, 1, "", "fork_servers"], [23, 6, 1, "", "main"], [23, 6, 1, "", "receive_obj"], [23, 6, 1, "", "send_obj"], [23, 6, 1, "", "serve"]], "pisa.utils.log": [[23, 3, 1, "", "Levels"], [23, 6, 1, "", "set_verbosity"]], "pisa.utils.log.Levels": [[23, 2, 1, "", "DEBUG"], [23, 2, 1, "", "ERROR"], [23, 2, 1, "", "FATAL"], [23, 2, 1, "", "INFO"], [23, 2, 1, "", "TRACE"], [23, 2, 1, "", "WARN"]], "pisa.utils.matrix": [[23, 6, 1, "", "fronebius_nearest_psd"], [23, 6, 1, "", "is_psd"]], "pisa.utils.mcSimRunSettings": [[23, 3, 1, "", "DetMCSimRunsSettings"], [23, 3, 1, "", "MCSimRunSettings"]], "pisa.utils.mcSimRunSettings.DetMCSimRunsSettings": [[23, 4, 1, "", "barnobarfract"], [23, 4, 1, "", "consistency_checks"], [23, 4, 1, "", "get_energy_range"], [23, 4, 1, "", "get_flavints"], [23, 4, 1, "", "get_flavs"], [23, 4, 1, "", "get_num_gen"], [23, 4, 1, "", "get_spectral_index"], [23, 4, 1, "", "get_xsec"], [23, 4, 1, "", "get_xsec_version"]], "pisa.utils.mcSimRunSettings.MCSimRunSettings": [[23, 4, 1, "", "barnobarfract"], [23, 4, 1, "", "consistency_checks"], [23, 4, 1, "", "get_energy_range"], [23, 4, 1, "", "get_flavints"], [23, 4, 1, "", "get_flavs"], [23, 4, 1, "", "get_num_gen"], [23, 4, 1, "", "get_spectral_index"], [23, 4, 1, "", "get_xsec"], [23, 4, 1, "", "get_xsec_version"], [23, 4, 1, "", "translate_source_dict"]], "pisa.utils.numba_tools": [[23, 6, 1, "", "clear_matrix"], [23, 6, 1, "", "conjugate"], [23, 6, 1, "", "conjugate_transpose"], [23, 6, 1, "", "copy_matrix"], [23, 2, 1, "", "ctype"], [23, 6, 1, "", "cuda"], [23, 6, 1, "", "cuda_copy"], [23, 2, 1, "", "ftype"], [23, 6, 1, "", "matrix_dot_matrix"], [23, 6, 1, "", "matrix_dot_vector"], [23, 6, 1, "", "myjit"], [23, 6, 1, "", "test_clear_matrix"], [23, 6, 1, "", "test_conjugate"], [23, 6, 1, "", "test_conjugate_transpose"], [23, 6, 1, "", "test_copy_matrix"], [23, 6, 1, "", "test_matrix_dot_matrix"], [23, 6, 1, "", "test_matrix_dot_vector"]], "pisa.utils.plotter": [[23, 3, 1, "", "Plotter"]], "pisa.utils.plotter.Plotter": [[23, 4, 1, "", "add_leg"], [23, 4, 1, "", "add_stamp"], [23, 4, 1, "", "dump"], [23, 4, 1, "", "init_fig"], [23, 4, 1, "", "next_color"], [23, 4, 1, "", "plot_1d_all"], [23, 4, 1, "", "plot_1d_array"], [23, 4, 1, "", "plot_1d_cmp"], [23, 4, 1, "", "plot_1d_projection"], [23, 4, 1, "", "plot_1d_ratio"], [23, 4, 1, "", "plot_1d_single"], [23, 4, 1, "", "plot_1d_slices_array"], [23, 4, 1, "", "plot_1d_stack"], [23, 4, 1, "", "plot_2d_array"], [23, 4, 1, "", "plot_2d_map"], [23, 4, 1, "", "plot_2d_single"], [23, 4, 1, "", "plot_array"], [23, 4, 1, "", "plot_xsec"], [23, 4, 1, "", "project_1d"], [23, 4, 1, "", "reset_colors"], [23, 4, 1, "", "slices_array"]], "pisa.utils.profiler": [[23, 6, 1, "", "line_profile"], [23, 6, 1, "", "profile"], [23, 6, 1, "", "test_line_profile"], [23, 6, 1, "", "test_profile"]], "pisa.utils.random_numbers": [[23, 6, 1, "", "get_random_state"], [23, 6, 1, "", "test_get_random_state"]], "pisa.utils.resources": [[23, 6, 1, "", "find_path"], [23, 6, 1, "", "find_resource"], [23, 6, 1, "", "open_resource"]], "pisa.utils.spline": [[23, 3, 1, "", "CombinedSpline"], [23, 3, 1, "", "Spline"]], "pisa.utils.spline.CombinedSpline": [[23, 4, 1, "", "compute_integrated_maps"], [23, 4, 1, "", "compute_maps"], [23, 4, 1, "", "get_integrated_map"], [23, 4, 1, "", "get_map"], [23, 4, 1, "", "get_spline"], [23, 4, 1, "", "reset"], [23, 4, 1, "", "return_mapset"], [23, 4, 1, "", "scale_map"], [23, 4, 1, "", "scale_maps"], [23, 4, 1, "", "validate_spline"]], "pisa.utils.spline.Spline": [[23, 4, 1, "", "get_integrated_map"], [23, 4, 1, "", "get_map"], [23, 5, 1, "", "hash"], [23, 5, 1, "", "name"], [23, 5, 1, "", "spline"], [23, 5, 1, "", "tex"]], "pisa.utils.spline_smooth": [[23, 6, 1, "", "spline_smooth"]], "pisa.utils.stats": [[23, 1, 1, "", "ALL_METRICS"], [23, 1, 1, "", "CHI2_METRICS"], [23, 1, 1, "", "LLH_METRICS"], [23, 1, 1, "", "SMALL_POS"], [23, 6, 1, "", "barlow_llh"], [23, 6, 1, "", "chi2"], [23, 6, 1, "", "conv_llh"], [23, 6, 1, "", "conv_poisson"], [23, 6, 1, "", "correct_chi2"], [23, 6, 1, "", "generalized_poisson_llh"], [23, 6, 1, "", "llh"], [23, 6, 1, "", "log_poisson"], [23, 6, 1, "", "log_smear"], [23, 6, 1, "", "maperror_logmsg"], [23, 6, 1, "", "mcllh_eff"], [23, 6, 1, "", "mcllh_mean"], [23, 6, 1, "", "mod_chi2"], [23, 6, 1, "", "norm_conv_poisson"], [23, 6, 1, "", "signed_sqrt_mod_chi2"]], "pisa.utils.tests": [[23, 6, 1, "", "baseplot"], [23, 6, 1, "", "baseplot2"], [23, 6, 1, "", "check_agreement"], [23, 6, 1, "", "make_delta_map"], [23, 6, 1, "", "make_ratio_map"], [23, 6, 1, "", "order"], [23, 6, 1, "", "order_str"], [23, 6, 1, "", "pisa2_map_to_pisa3_map"], [23, 6, 1, "", "plot_cmp"], [23, 6, 1, "", "plot_comparisons"], [23, 6, 1, "", "plot_map_comparisons"], [23, 6, 1, "", "print_agreement"], [23, 6, 1, "", "print_event_rates"], [23, 6, 1, "", "validate_map_objs"], [23, 6, 1, "", "validate_maps"]], "pisa.utils.vbwkde": [[23, 6, 1, "", "fbwkde"], [23, 6, 1, "", "isj_bandwidth"], [23, 6, 1, "", "test_fbwkde"], [23, 6, 1, "", "test_vbwkde"], [23, 6, 1, "", "vbwkde"]], "pisa.utils.vectorizer": [[23, 6, 1, "", "assign"], [23, 6, 1, "", "imul"], [23, 6, 1, "", "imul_and_scale"], [23, 6, 1, "", "itruediv"], [23, 6, 1, "", "mul"], [23, 6, 1, "", "pow"], [23, 6, 1, "", "replace_where_counts_gt"], [23, 6, 1, "", "sqrt"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "data", "Python data"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "class", "Python class"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:data", "2": "py:attribute", "3": "py:class", "4": "py:method", "5": "py:property", "6": "py:function"}, "terms": {"": [2, 3, 4, 5, 15, 17, 23, 24, 34, 35, 36, 37, 39, 41, 45], "0": [2, 3, 4, 5, 7, 11, 13, 15, 17, 19, 21, 22, 23, 24, 31, 32, 36, 41, 44, 45], "00": [4, 5, 13], "000": 23, "0000": 31, "0000000000000002e": 17, "00000000e": 13, "0000e": 4, "0001": [5, 31], "0002": 31, "00022": [13, 33], "0003": 31, "0004": 31, "0008": 34, "0010": 23, "001e3": 23, "0024": 23, "0031920181900467": 37, "00462506e": 13, "00493910e": 13, "00621371192237": 45, "00726730e": 13, "00927151e": 13, "00957009e": 13, "01": [3, 4, 13, 23], "0100": 31, "0101": 31, "0102": 31, "0103": 31, "0104": 31, "0105": 31, "01057288e": 13, "0106": 31, "0107": 31, "0109": 31, "01271407e": 13, "01323013e": 13, "01393946e": 13, "0151": 31, "01655104e": 13, "01862899e": 13, "01948197e": 13, "02": [13, 23], "02334021e": 13, "0257": 34, "02587771e": 13, "02664806e": 13, "02807322e": 13, "02808725e": 13, "02912203e": 13, "03": [13, 31], "030": 23, "03282813e": 13, "03466021e": 13, "03524752e": 13, "03760502e": 13, "04": [13, 36], "04064649e": 13, "04198979e": 13, "04240401e": 13, "04466067e": 13, "04722519e": 13, "04732245e": 13, "04738": 15, "04775697e": 13, "05": [13, 19, 23], "0500": 31, "0501": 31, "0502": 31, "05029181e": 13, "0503": 31, "0504": 31, "0505": 31, "0506": 31, "0507": 31, "05134247e": 13, "05206867e": 13, "05390": 41, "05411735e": 13, "05470967e": 13, "05693455e": 13, "06": 31, "06182294e": 13, "06361777e": 13, "06647809e": 13, "06673394e": 13, "06883789e": 13, "07": 36, "07166765e": 13, "07316213e": 13, "07455942e": 13, "07470524e": 13, "07529169e": 13, "07644607e": 13, "07662418e": 13, "08": [4, 8, 23], "08160363e": 13, "08275063e": 13, "08303146e": 13, "08528580e": 13, "08660611e": 13, "08752491e": 13, "08831": [14, 23], "0906": 23, "09163173e": 13, "09238348e": 13, "09441": 41, "09668060e": 13, "09729067e": 13, "09817606e": 13, "0_cz": [4, 32], "1": [2, 3, 4, 5, 7, 8, 11, 12, 13, 14, 15, 17, 21, 22, 23, 24, 31, 34, 36, 41, 44, 45], "10": [2, 3, 4, 5, 15, 17, 19, 21, 23, 36, 37, 45], "100": [2, 3, 4, 22, 23, 32, 34], "1000": [4, 23, 45], "10000": 23, "1007": 23, "1008": 22, "100e": 23, "1016": 23, "10175281e": 13, "10206088e": 13, "1024": 23, "10339029e": 13, "10418050e": 13, "10684849e": 13, "10727970e": 13, "10e6": 23, "11": [2, 23], "1109": 41, "11161583e": 13, "11178304e": 13, "11196773e": 13, "113": 23, "11711065e": 13, "11842520e": 13, "12": [2, 4, 5, 13, 23, 31, 36, 37, 45], "120": 17, "12155017e": 13, "1217": 23, "12175544e": 13, "1220184543019633": 4, "12227736e": 13, "1223": 23, "12316259e": 13, "12345": 12, "123456": [4, 11], "12493021e": 13, "12600724e": 13, "127": 2, "12746796e": 13, "128": 2, "1287": 4, "13": 23, "1309": 4, "131072": 23, "13136247e": 13, "13161884e": 13, "13268257e": 13, "13792129e": 13, "14": [17, 23, 32, 41], "14015130e": 13, "14046522e": 13, "14122015e": 13, "14223247e": 13, "14318425e": 13, "14544388e": 13, "14847155e": 13, "15": [11, 19, 23, 36], "15112343e": 13, "15295": 41, "15378330e": 13, "15499006e": 13, "15911962e": 13, "15997796e": 13, "16": [2, 7, 23], "16059848e": 13, "16107251e": 13, "16139055e": 13, "16250851e": 13, "164332": 41, "16448062e": 13, "16924187e": 13, "16958209e": 13, "16986641e": 13, "17": [4, 23, 36], "1702": 15, "17106760e": 13, "17317494e": 13, "17527712e": 13, "18": [23, 36, 41], "1803": 41, "18063724e": 13, "18071285e": 13, "18110892e": 13, "18282370": 23, "18424160e": 13, "18617372e": 13, "18846824e": 13, "18915378": 23, "18_446_744_073_709_551_615": 2, "19": [23, 36], "1902": [14, 23], "1908": 41, "19119669e": 13, "19165984e": 13, "19314994e": 13, "195": 23, "19717134e": 13, "1981": 15, "1982": 23, "1988": 23, "19896892e": 13, "1995": 23, "19997295e": 13, "1_to_1_1e2evts_set0__unjoined__with_fluxes_honda": [4, 32], "1d": [4, 5, 11, 15, 17, 21, 23, 24, 29], "1e": [2, 3, 11, 17, 23], "1e10": 23, "1e3": 23, "1e5": 23, "1f": 4, "1rxqj8rpndwfygxw3buf4bx5b35gamk0gsos_bijin34": 39, "1srbgiyx6kleyqdcvop6m0sintoavhsx6": 22, "1st": 15, "1unit": 23, "2": [2, 3, 4, 5, 7, 8, 13, 14, 15, 17, 19, 21, 23, 24, 28, 31, 32, 34, 36, 41, 44, 45], "20": [2, 3, 4, 7, 15, 23, 24, 36], "200": 31, "2000e": 4, "20026062e": 13, "2006": 13, "2007": 23, "200712": 23, "2010": 23, "2012": 17, "2013": 4, "20133111e": 13, "2015": [4, 5, 23, 32], "2017": 5, "2018": 41, "2019": 23, "2020": [36, 41], "2022": 36, "2023": [13, 15, 36], "20270833e": 13, "20296681e": 13, "20635132e": 13, "20827094e": 13, "20test": 41, "21": [5, 15, 23], "21151240e": 13, "21376434e": 13, "21385926e": 13, "21709029e": 13, "21716858e": 13, "21939808e": 13, "21947344e": 13, "22": [2, 5, 23, 36], "220446049250313e": 23, "22174078e": 13, "22511358e": 13, "22862820e": 13, "23": [2, 23, 36], "2303": [13, 33], "2307": 41, "23077980e": 13, "23201647e": 13, "23647224e": 13, "23818733e": 13, "23891306e": 13, "23968114e": 13, "24": [23, 31], "24129830e": 13, "24219100e": 13, "24233968e": 13, "24356081e": 13, "24553110e": 13, "24584471e": 13, "24793621e": 13, "25": [2, 4, 5, 8, 15, 21, 23], "250": 41, "250000": 23, "25271064e": 13, "25370799e": 13, "255": 2, "25851829e": 13, "25856248e": 13, "2589254117941673": 4, "25950646e": 13, "26": 4, "26312957e": 13, "26533176e": 13, "26553963e": 13, "27118400e": 13, "27316511e": 13, "27359668e": 13, "27363353e": 13, "27473213e": 13, "27628946e": 13, "27706330e": 13, "27821420e": 13, "28": 5, "282040606": 5, "28296980e": 13, "28411221e": 13, "28829225e": 13, "28877429e": 13, "28890361e": 13, "28989308e": 13, "2916": 23, "29467637e": 13, "29486487e": 13, "2957": 23, "297": 15, "29800121e": 13, "2984": 22, "2_": 15, "2_147_483_647": 2, "2_147_483_648": 2, "2d": [4, 5, 11, 15, 17, 23, 24, 33], "2e": 17, "2f": 4, "2sigma": 22, "3": [2, 3, 4, 13, 15, 17, 21, 23, 36, 37, 41, 45], "30": [3, 4], "300": 4, "300031920181900467": 15, "30085370e": 13, "30375315e": 13, "30398507e": 13, "30528939e": 13, "30680395e": 13, "30687023e": 13, "31": [15, 23], "31291459e": 13, "31435916e": 13, "31456781e": 13, "31595149e": 13, "31787973e": 13, "31898690e": 13, "31926620e": 13, "32": [2, 4, 15, 23], "32508729e": 13, "32666291e": 13, "32768": 23, "32_767": 2, "32_768": 2, "33": 2, "3303312": 23, "33121590e": 13, "33125118e": 13, "33290840e": 13, "33461802e": 13, "33737286e": 13, "33742387e": 13, "33785019e": 13, "33893840e": 13, "34": 23, "34059837e": 13, "34355829e": 13, "34823460e": 13, "34977233e": 13, "35004083e": 13, "35053": 44, "35302320e": 13, "356": 15, "35601511e": 13, "35791301e": 13, "35909533e": 13, "36219849e": 13, "36228676e": 13, "36363132e": 13, "36553498e": 13, "36858742e": 13, "37000629e": 13, "37440879e": 13, "37454909e": 13, "37491723e": 13, "37806863e": 13, "3795": 23, "38": 23, "38096772e": 13, "38110078e": 13, "38127630e": 13, "38344152": 4, "38766479e": 13, "388": 23, "38843844e": 13, "39162405e": 13, "39165644e": 13, "3917547535160330856": 4, "39197984e": 13, "39408283e": 13, "39673858e": 13, "39831747e": 13, "3d": [4, 15, 23, 33], "3x3": 15, "4": [2, 3, 4, 13, 15, 23, 28, 36, 37, 45], "40": [4, 23, 36], "40053055e": 13, "40304289e": 13, "40700809e": 13, "40865683e": 13, "41": [15, 45], "4123": 23, "41244871e": 13, "4125375446227544": 4, "41336030e": 13, "41351558e": 13, "41415712e": 13, "41776601e": 13, "41865996e": 13, "42": 3, "42005318e": 13, "42118571e": 13, "42532274e": 13, "42662102e": 13, "42823149e": 13, "42885": 23, "430": 36, "43046837e": 13, "43321923e": 13, "43654001e": 13, "43839743e": 13, "43909653e": 13, "43984795e": 13, "44292233e": 13, "44408728e": 13, "44650734e": 13, "44780916e": 13, "45": [3, 4, 36], "45088409e": 13, "45319752e": 13, "45913043e": 13, "45962763e": 13, "45991865e": 13, "46001639e": 13, "46132376e": 13, "46355035e": 13, "4655": 23, "46667087e": 13, "46945981e": 13, "47050406e": 13, "47345431e": 13, "47601918e": 13, "47734631e": 13, "48025368e": 13, "48026913e": 13, "48071983e": 13, "48193029e": 13, "48711546e": 13, "488": 23, "48881961e": 13, "4916": 3, "49209598e": 13, "49340937e": 13, "49399346e": 13, "4_294_967_295": 2, "5": [3, 4, 11, 13, 19, 23, 36, 41], "50": [22, 23], "500": 36, "5000x": 4, "50090328e": 13, "50097513e": 13, "500x": 4, "50494154e": 13, "50508296e": 13, "50784505e": 13, "50824714e": 13, "50863158e": 13, "51069356e": 13, "51192949e": 13, "51420574e": 13, "51481892e": 13, "51652705e": 13, "52": 2, "52179242e": 13, "52182505e": 13, "52447300e": 13, "52816614e": 13, "52886359e": 13, "53": [23, 36], "532515919999994": 4, "53593468e": 13, "53970928e": 13, "53985907e": 13, "54077391e": 13, "54080591e": 13, "54270599e": 13, "54303847e": 13, "54667263e": 13, "54798453e": 13, "54904456e": 13, "55017512e": 13, "55160607e": 13, "55715021e": 13, "55734477e": 13, "56340741e": 13, "56371628e": 13, "56454759e": 13, "56533078e": 13, "57105755e": 13, "57178372e": 13, "57360225e": 13, "57526333e": 13, "5777218104420236e": 4, "57905331e": 13, "58157646e": 13, "58211957e": 8, "58482375e": 13, "58635653e": 13, "58717408e": 13, "58751948e": 13, "59": [23, 37], "59013038e": 13, "59107078e": 13, "59320948e": 13, "59369353e": 13, "59913992e": 13, "59layer": 17, "6": [4, 8, 13, 23, 28, 36, 45], "60": [3, 4], "60106446e": 13, "60144909e": 13, "6021766339999998e": 4, "602176634e": 4, "60602884e": 13, "60673495e": 13, "60846948e": 13, "6096": 41, "61116110e": 13, "61590875e": 13, "61664172e": 13, "61692982e": 13, "620": 4, "621": 4, "622": 4, "62323788e": 13, "62338243e": 13, "62341632e": 13, "62723729e": 13, "62733201e": 13, "63089068e": 13, "63198120e": 13, "63537052e": 13, "63757866e": 13, "63843365e": 13, "64": [2, 23, 36], "64017485e": 13, "64290847e": 13, "64589411": 4, "64601150e": 13, "64755927e": 13, "64873371e": 13, "65186915e": 13, "65362441e": 13, "65701088e": 13, "65980440e": 13, "65_535": 2, "66127252e": 13, "66265452e": 13, "66713880e": 13, "66895601e": 13, "66900727e": 13, "67023439e": 13, "67210616e": 13, "67392478e": 13, "67667503e": 13, "68215306e": 13, "6827": 23, "68442976e": 13, "68446481e": 13, "68725952e": 13, "69091691e": 13, "69183451e": 13, "69222035e": 13, "69346971e": 13, "69522678e": 13, "69688063e": 13, "7": [2, 4, 13, 23, 31, 36, 45], "70": [4, 11], "70004698e": 13, "70722485e": 13, "70790980e": 13, "70798763e": 13, "70935387e": 13, "7121742559130813936": 4, "71353453e": 13, "71518937": 4, "71580899e": 13, "72156756e": 13, "72188479e": 13, "72281357e": 13, "72374471e": 13, "72442742e": 13, "72513730e": 13, "72693362e": 13, "73": 45, "73171713e": 13, "73447368e": 13, "73533492e": 13, "73972643e": 13, "74236629e": 13, "74712079e": 13, "74749630e": 13, "74777277e": 13, "74803016e": 13, "7496121991": 4, "75": 4, "754": 23, "75552832e": 13, "75585633e": 13, "75723614e": 13, "75853206e": 13, "75967497e": 13, "75982639e": 13, "76397728e": 13, "77192128e": 13, "77213578e": 13, "77259076e": 13, "77461515e": 13, "77706369e": 13, "77923865e": 13, "78033202e": 13, "78541416e": 13, "78677305e": 13, "78795401e": 13, "78856616e": 13, "79441575e": 13, "79453285e": 13, "79683839e": 13, "79829688e": 13, "8": [2, 4, 13, 23, 36], "80": [4, 23], "80132310e": 13, "80134292e": 13, "80514888e": 13, "8083989501": 4, "8095": 23, "81123917e": 13, "81208280e": 13, "81349780e": 13, "81711702e": 13, "81816229e": 13, "8192": 23, "82188534e": 13, "82354943e": 13, "82424133e": 13, "82815458e": 13, "82859884e": 13, "82971391e": 13, "83031168e": 13, "83046540e": 13, "83261985": 4, "83730362e": 13, "83877698e": 13, "84585864e": 13, "84728144e": 13, "84742658e": 13, "84969672e": 13, "85": 4, "85042632e": 13, "85511016e": 13, "85582523e": 13, "86252179e": 13, "86360972e": 13, "86440853e": 13, "86522116e": 13, "86668179e": 13, "86827104e": 13, "86943166e": 13, "87303154e": 13, "87685409e": 13, "88": [5, 23, 31], "88137699e": 13, "88169442e": 13, "88219040e": 13, "88309805e": 13, "89015972e": 13, "89039738e": 13, "89078709e": 13, "89914058e": 13, "9": [4, 13, 23], "90": [3, 4], "9000": 23, "90005": 23, "90105762e": 13, "90223": 23, "90306568e": 13, "90352688e": 13, "90792422e": 13, "90813657e": 13, "90939590e": 13, "91045332e": 13, "91320378e": 13, "91340729e": 13, "91674849e": 13, "91695588e": 13, "91910025e": 13, "92559664": 4, "92561357e": 13, "93": 23, "93044698e": 13, "93451965e": 13, "93613210e": 13, "9361329834": 45, "93672722e": 13, "93722633e": 13, "93961785e": 13, "94": 31, "94346693e": 13, "94400048e": 13, "94517777e": 13, "95": 23, "95166472e": 13, "95245558e": 13, "95396231e": 13, "95543624e": 13, "95761666e": 13, "95896201e": 13, "9607475": 23, "96148581e": 13, "96418495e": 13, "97": [4, 31], "97055780e": 13, "97129582e": 13, "97373038e": 13, "97633907e": 13, "977": 41, "97729965e": 13, "97967175e": 13, "98189752e": 13, "9847601": 23, "98503825e": 13, "98882786e": 13, "99": 23, "99176967e": 13, "99210913e": 13, "99306672e": 13, "99792458e": 8, "99802631e": 13, "99884423e": 13, "9_223_372_036_854_775_807": 2, "9_223_372_036_854_775_808": 2, "A": [2, 3, 4, 5, 11, 12, 13, 15, 19, 21, 22, 23, 24, 32, 33, 34, 35, 39, 41], "As": [2, 3, 23], "At": [27, 31, 37], "Be": [4, 23, 24, 36], "But": [4, 32], "By": 24, "For": [2, 3, 4, 5, 15, 17, 23, 24, 33, 34, 35, 36, 37, 41, 45], "If": [2, 3, 4, 5, 11, 12, 14, 15, 17, 19, 21, 23, 24, 34, 35, 36, 41], "In": [2, 3, 4, 11, 21, 23, 24, 31, 36, 39, 41, 44], "It": [3, 4, 13, 21, 22, 23, 24, 31, 33, 34, 36, 37], "NO": 23, "NOT": [4, 23], "No": [11, 23, 32], "Not": [4, 5, 13, 23, 24, 34], "OR": 23, "Of": 3, "On": [23, 24], "One": [4, 5, 23, 24, 37, 45], "Ones": 2, "Or": 23, "That": [3, 31], "The": [2, 3, 4, 5, 7, 8, 9, 11, 13, 14, 15, 18, 19, 21, 22, 23, 24, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 44, 45], "Then": [2, 3, 23], "There": [3, 4, 31, 32, 34, 35, 43], "These": [3, 4, 13, 19, 23, 24, 31, 34, 36, 44], "To": [3, 15, 23, 24, 31, 34, 36, 37, 39, 45], "Will": [3, 5, 15], "_": [4, 23, 32, 34, 36], "__": [23, 36], "__array__": 2, "__array_function__": 2, "__bar_ssep__": 23, "__counts__": 26, "__doc__": 2, "__eq__": 4, "__exclus": 23, "__init__": 4, "__license__": 23, "__main__": 34, "__note": 36, "__repr__": 23, "_actually_": 4, "_all_": 4, "_analysi": 26, "_antik": 13, "_any_": 4, "_asdict": 2, "_automatically_": 36, "_bar": 32, "_before_": 23, "_c": 36, "_can_": 36, "_cc": [5, 19, 23], "_cc_": 4, "_derive_nominal_transforms_hash": 4, "_derive_outputs_hash": 4, "_derive_transforms_hash": 4, "_everi": 31, "_fit_": 3, "_fit_nonsens": 3, "_fit_scipi": 3, "_h1": 23, "_k": 13, "_map": 4, "_minimizer_cal": 3, "_nc": 5, "_no_": 4, "_not_": [4, 23, 36], "_note": 36, "_o16": 23, "_only_": 4, "_pi": 13, "_plot": 23, "_plt": 23, "_pred": 11, "_quantiti": 45, "_regardless_": 4, "_replac": 2, "_rescaled_": 4, "_set_rescaled_free_param": 4, "_singleton_": 4, "_tot": 23, "_un_specifi": 4, "_unit": 45, "_xxxx": 3, "a_1": 23, "a_2": 23, "a_bcd__": 23, "a_broadcast": 4, "a_i": 23, "aa": [4, 5, 23, 32], "aartsen": 41, "ab": [4, 13, 23, 33, 41], "abc": 4, "abil": [23, 33, 39], "abl": [4, 5, 23, 24, 34, 39], "about": [4, 13, 23, 24, 36, 39], "abov": [3, 4, 5, 15, 21, 23, 27, 28, 34, 35, 36, 37, 39, 43, 45], "abramson": 23, "abrupt": 23, "absenc": 15, "absolut": [2, 4, 5, 23, 36], "absorpt": [2, 6, 36], "ac_kw": 17, "acceler": [15, 36], "accept": [3, 4, 5, 19, 23, 34], "access": [2, 4, 21, 23, 24, 32, 33, 35, 36, 45], "accident": 23, "accompani": 23, "accord": [3, 4, 13, 21, 23, 24, 34], "account": [4, 23, 36, 37, 44], "accpunt": 4, "accumul": 23, "accur": [21, 23, 33, 36], "accuraci": 23, "accuratli": 37, "achiev": [3, 23, 44], "across": [3, 4, 5, 23], "act": 4, "action": 41, "activ": [12, 36], "actual": [2, 3, 4, 21, 23, 24, 27, 34, 39, 41, 44, 45], "actual_valu": 23, "ad": [2, 3, 4, 5, 13, 21, 23, 24, 28, 31, 36, 37, 44], "adapt": [4, 23], "add": [2, 3, 4, 5, 11, 13, 23, 28, 34, 36], "add_aeff_weight": [6, 11], "add_contain": [2, 4], "add_covari": [2, 4], "add_flux_to_events_fil": [1, 2], "add_fluxes_to_fil": [2, 5], "add_indic": [2, 6], "add_leg": [2, 23], "add_opp": [2, 23], "add_reco": [6, 11], "add_sect": [2, 23], "add_stamp": [2, 23], "add_truth": [6, 11], "addit": [3, 4, 15, 21, 23, 24, 31, 34, 35, 36, 44], "addition": 4, "addprior": [2, 23], "address": [23, 34], "addsep": 23, "adher": 34, "adhoc_si": [2, 6], "adjac": 4, "adjust": [13, 14, 15], "administr": 36, "advantag": [36, 37], "aeff": [2, 4, 5, 6, 23, 35], "aeff_": 5, "aeff_cc": 5, "aeff_nc": 5, "aeff_scal": 8, "aeff_tot": 5, "afedynitch": 36, "affect": [2, 4], "affinescalarfunc": 23, "affix": 4, "aforement": [23, 35], "after": [3, 4, 21, 23, 24, 31, 35, 36, 39], "afterward": [4, 11], "again": 3, "against": [4, 5, 23, 34], "agg": 34, "aggreg": [4, 17], "agreement": 21, "ahead": 13, "air": [2, 6, 36], "aka": 4, "akin": 4, "al": 41, "alert": 23, "algorithm": [3, 23], "alia": [2, 23, 31], "align": 23, "all": [2, 3, 4, 5, 11, 12, 15, 17, 21, 22, 23, 24, 27, 29, 31, 32, 34, 35, 36, 37, 39, 44, 45], "all_": 23, "all_gen_events_fil": 23, "all_int_type_flav": 23, "all_kei": [2, 4], "all_metr": [2, 23], "all_nuflavint": 32, "allclos": [2, 4, 17, 23], "allclose_kw": [2, 23], "alloc": [2, 23], "allow": [2, 3, 4, 5, 15, 21, 23, 24, 31, 32, 36, 39], "allow_miss": 23, "allow_nan": 23, "alltru": 32, "almost": [24, 32, 36], "alon": 23, "along": [4, 5, 23, 36], "alongsid": [4, 36], "alpha": [14, 15, 21, 23], "alpha1": [6, 15], "alpha2": [6, 15], "alpha3": [15, 17], "alreadi": [3, 4, 5, 8, 9, 11, 15, 17, 23, 24, 34, 36], "also": [2, 3, 4, 5, 7, 11, 14, 15, 21, 23, 31, 32, 34, 36, 37, 41, 44], "alswai": 45, "altern": [4, 23, 39, 45], "alternate_fit": 3, "although": 36, "alwai": [2, 3, 4, 23, 24, 34, 36], "always_show_sign": 23, "amap": 23, "ambigu": 4, "ambv": 36, "amk": 15, "among": [3, 23, 39], "amongst": 3, "amount": 19, "amplitud": 17, "an": [2, 3, 4, 5, 8, 9, 13, 15, 21, 23, 24, 26, 29, 31, 32, 33, 34, 36, 39, 41, 42], "ana": [3, 36], "anaconda": 36, "anaconda3": 36, "anaconda_install_dir": 36, "anaconda_install_dr": 36, "analag": 4, "analog": [2, 24], "analys": [3, 23, 24, 29, 39, 41, 43], "analysi": [1, 2, 4, 5, 13, 21, 22, 23, 24, 27, 29, 31, 34, 35, 36, 39, 41, 43], "analyt": [15, 37], "analyz": [36, 41], "anamoli": 15, "anatoli": 13, "anderson": 15, "andrii": 15, "ang": 23, "angl": [3, 8, 15, 19, 23, 33, 35], "angular": 23, "ani": [2, 3, 4, 5, 11, 14, 19, 23, 24, 31, 32, 34, 36, 41, 44], "annal": 23, "annot": 23, "anoth": [4, 5, 15, 21, 23, 34, 39, 45], "answer": 23, "anti": 23, "antimeson": 13, "antineutrino": [17, 23], "antipart_cod": [2, 23], "antiparticl": [2, 23], "antipion_product": [6, 13], "antisymmetr": 15, "anymor": 23, "anyth": [4, 5, 23, 34], "anywher": 23, "api": [0, 2], "apidoc": 36, "apocalyps": 3, "appear": [4, 34], "append": [4, 11, 14, 21, 23], "appli": [2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 19, 21, 22, 23, 24, 31, 35, 37, 39, 41, 42], "applic": [4, 5, 39], "apply_all_section_nam": [2, 5], "apply_cut": [2, 4, 6, 11, 23], "apply_cuts_to_ev": [6, 11], "apply_floor": [6, 21], "apply_funct": [2, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 21, 22], "apply_genie_si": [6, 22], "apply_mod": [4, 21], "apply_sys_loop": [6, 13], "apply_to_all_set": 2, "apply_to_map": [2, 4], "apply_unc_weight": 21, "apply_weight": 4, "applycut": [2, 4], "approach": 43, "appropri": [4, 5, 12, 23, 24, 31, 37, 43], "approx": 15, "approx_exponenti": 12, "approxim": [4, 12, 19, 23], "aproxim": 15, "apt": 36, "ar": [2, 3, 4, 5, 8, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 43, 44, 45], "arang": 32, "arb": [6, 21], "arbit": 34, "arbitrari": [4, 23, 24, 29], "arbitrarili": [3, 4, 23, 24], "architectur": [36, 39], "archiv": [23, 36], "arctan": 23, "are_discret": [2, 4], "are_fix": [2, 4], "area": [5, 8, 23, 26, 33, 35], "aren": [3, 4, 17], "arg": [2, 4, 5, 11, 17, 23, 24, 32, 34], "arg_str_seq_non": [2, 23], "arg_to_tupl": [2, 23], "arg_tup": 23, "argnam": 23, "arguel": 36, "argument": [2, 3, 4, 5, 19, 23, 24, 34, 36], "aris": 23, "around": [13, 23], "arrai": [1, 2, 4, 5, 11, 13, 15, 17, 19, 21, 23, 24, 35, 41, 45], "array_lik": [2, 24], "array_represent": [2, 4], "array_to_bin": [2, 4], "arriv": [3, 23], "articl": [15, 36, 37], "arxiv": [4, 13, 15, 22, 23, 33, 41], "ary2str": [15, 17], "as_integer_ratio": [1, 2], "ascalar": 23, "aschneid": 23, "ascii": 23, "asimov": [3, 23, 36, 39, 44], "ask": 23, "aspect": 23, "asscalar": 4, "assembl": 24, "assemble_interpolated_fit": [23, 24], "assert": [4, 32, 34], "assert_array_fit": [2, 4], "assert_compat": [2, 4], "assertionerror": 17, "assign": [2, 4, 19, 23, 31], "associ": [23, 31, 36], "assos": 24, "assum": [3, 4, 8, 9, 13, 15, 23, 24, 31, 36, 39, 42, 44], "assumpt": [23, 34], "assur": 45, "ast": 23, "asterisk": 5, "astro_delta": 13, "astro_norm": 13, "astroflux_nomin": 13, "astrophys": [2, 6], "asymm": 5, "asymm_max": 5, "asymm_min": 5, "asymmetr": 5, "asymmetri": 5, "atm_muon": [2, 6], "atm_muon_scal": 9, "atmospher": [7, 9, 15, 17, 23, 33, 35, 37, 39], "atol": [17, 23], "atom": 4, "atrettin": 15, "attach": [4, 5, 15, 23, 34, 35, 45], "attach_unit": 4, "attempt": [23, 39], "atto": 23, "attr": [4, 23], "attribut": [4, 23, 24, 34, 45], "audienc": 34, "auglag": 3, "augment": 4, "august": [15, 36], "austin": 23, "auth": 36, "author": [15, 17], "authorship": 34, "auto": 4, "auto_populate_test_cas": [15, 17], "auto_structifi": 34, "auto_transl": [2, 4], "automat": [4, 5, 23, 34, 36], "auxillari": 4, "avail": [2, 3, 4, 9, 19, 22, 23, 24, 29, 31, 36, 37, 41, 45], "averag": [4, 5, 7, 14, 23, 33], "avoid": [4, 5, 23, 34], "awai": 23, "awar": [4, 34], "ax": [4, 5, 23, 24, 36, 41], "axi": [4, 5, 23, 24], "axis1": 23, "axis2": 23, "az": 23, "az_linear": 23, "azimuth": [23, 33], "azimuth_max": 23, "azimuth_min": 23, "b": [2, 3, 13, 24, 33], "b0": 4, "b1": 4, "b2": 4, "b64": 23, "back": [15, 17, 23, 36], "backend": 4, "background": [2, 6, 11, 15, 29], "backport": 23, "backslash": 4, "bad": [4, 34], "bad_color": 4, "badli": 13, "bandwidth": 23, "bar": [2, 4, 5, 19, 21, 23, 32], "bar_cod": [2, 23], "bare": [3, 4], "barlow": [1, 2, 4], "barlow_llh": [2, 4, 23, 44], "barlowllh": [2, 23], "barnobar": 23, "barnobarfract": [2, 23], "barnu_mu": 32, "barr": [13, 23], "barr_": 13, "barr_nu_nubar_ratio": 13, "barr_parameter": [1, 2], "barr_simpl": [2, 6], "barr_uphor_ratio": 13, "barr_var": 13, "barsep": [2, 23], "bartol_spline_dict": 5, "base": [2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 29, 33, 37, 41], "base64": 23, "baseflav": 32, "baselin": [15, 17], "basenam": [2, 4, 23], "basename_bin": [2, 4], "baseplot": [2, 23], "baseplot2": [2, 23], "bash": 36, "bashrc": 36, "basi": [4, 17], "basic": [4, 17, 23, 24, 34, 36, 39, 45], "basicanalysi": [2, 3], "bb": 5, "bcast": 4, "bcd": 23, "bear": 4, "becaus": [14, 15, 17, 23, 24, 34], "becom": [4, 23, 24, 44], "been": [8, 12, 15, 23, 24, 33, 34, 36], "beeston": 23, "befor": [2, 4, 5, 17, 21, 23, 24, 34, 36, 37], "begin": [2, 34, 37], "behav": [4, 21, 23], "behavior": [2, 4, 23], "behaviour": 23, "being": [3, 4, 5, 12, 22, 23, 24, 31, 32], "belong": [4, 21], "below": [3, 4, 5, 21, 22, 23, 24, 31, 34, 36, 45], "beneath": 34, "besid": [15, 23], "best": [2, 3, 4, 23, 24, 31, 39], "best_fit": 23, "best_fit_info": 3, "best_of": 3, "bestfit_plot": [2, 23], "beta": [14, 15], "better": [4, 21, 23, 34, 39], "between": [3, 4, 15, 21, 22, 23, 24, 32, 34, 39], "beyond": [3, 12, 22, 24], "bfg": [3, 24], "bgrej": 23, "bia": 18, "bigint_as_str": 23, "bin": [1, 2, 3, 5, 11, 14, 21, 23, 24, 26, 29, 34, 35, 36, 37, 44, 45], "bin_edg": [2, 4], "bin_idx": [4, 24], "bin_index": [1, 2], "bin_indic": 21, "bin_iter": 4, "bin_nam": [2, 4], "bin_prefix_to_power_of_1024": [2, 23], "bin_volum": [2, 4], "bin_width": [2, 4], "binari": [23, 36], "bining1": 23, "binlabel_color": 4, "binlabel_color_thresh": 4, "binlabel_format": 4, "binlabel_stripzero": 4, "binned_barlow_llh": 4, "binned_chi2": 4, "binned_conv_llh": 4, "binned_correct_chi2": 4, "binned_llh": 4, "binned_mod_chi2": 4, "binned_to_arrai": [2, 4], "binning1": 23, "binning_col": 4, "binpr": 23, "binwis": 4, "bisplrep": 33, "bit": [2, 23, 24, 36], "bit_count": [1, 2], "bjorken_i": 22, "bjrej": 23, "bla": 23, "black": [4, 36], "blackgriffin": 23, "blahblah": 34, "blank": 23, "bleed": 21, "blind": [3, 23], "blob": [23, 34, 45], "block": 34, "blog": 23, "blosc2": 36, "blot": 13, "bmap": 23, "bohm": 4, "bone": 3, "bool": [2, 3, 4, 5, 11, 12, 15, 17, 19, 21, 23, 24], "bool_idx": 23, "boolean": [4, 5, 23], "boolean_op": 23, "bootcamp": 21, "bootstrap": [2, 6, 23], "bootstrap_kd": 23, "bootstrap_nit": [21, 23], "bootstrap_se": 21, "bop": 13, "botev": 23, "both": [3, 4, 5, 17, 21, 23, 24, 28, 32, 33, 34, 39, 43, 45], "bound": [2, 3, 4, 12, 19, 23, 24], "boundari": [12, 15, 37], "boundscheck": 2, "box": 36, "br": [34, 36], "bracket": [5, 23], "branch": [15, 23, 32, 36], "break": 23, "broadcast": [2, 4, 17], "browser": 39, "bsic": 23, "bsm": 36, "bug": [2, 4, 34, 36], "build": [3, 36], "built": [4, 34, 36], "builtin": [2, 23], "bulk_ice_ab": 31, "bulk_ice_scatt": 31, "bunch": 24, "buri": 15, "button": 36, "bw": 23, "bw_method": [21, 23], "bw_unit": 23, "byte": [2, 23], "bz2": [5, 23, 32], "bzip": 23, "bzip2": 32, "c": [2, 8, 13, 23, 36, 37], "c16": 17, "ca": 29, "cach": [2, 4, 17, 23, 36], "cache_dir": [1, 2], "cake": [36, 45], "calc": [15, 21], "calc_decoherence_prob": [6, 15], "calc_mod": [4, 21], "calc_prob": [6, 15], "calc_prob_e_mu": [6, 15], "calc_prob_nonsteril": [6, 15], "calc_rho36": [6, 11], "calc_uncertainti": [6, 11], "calclay": [6, 15], "calcpathlength": [6, 15], "calcul": [4, 5, 7, 8, 13, 14, 15, 17, 21, 22, 23, 26, 31, 37, 44], "calculate_2d_flux_weight": [2, 23], "calculate_3d_flux_weight": [2, 23], "calculate_grad": 31, "calculate_knn_prob": 31, "calculate_survivalprob": [6, 7], "calculate_xsect": [6, 7], "calculatecovari": [2, 23], "call": [2, 3, 4, 5, 11, 19, 21, 23, 24, 32, 34, 35, 39], "callabl": [1, 2, 3, 4], "callback": 3, "calle": 2, "caller": [2, 23], "came": 23, "can": [2, 3, 4, 5, 8, 11, 12, 13, 14, 15, 19, 21, 23, 24, 28, 31, 32, 33, 34, 35, 36, 37, 39, 41, 43, 44, 45], "cannot": [3, 4, 23, 45], "canon": [2, 3], "canopi": 36, "canva": 23, "care": [4, 23], "carefulli": 23, "carlo": [4, 23, 28, 29, 35, 36, 39, 41], "carri": [3, 4, 34], "cascad": [4, 13, 19, 35, 38], "cascade_pid": 19, "case": [2, 3, 4, 11, 14, 15, 17, 19, 23, 24, 32, 34, 35, 36], "cast": 4, "categori": 34, "caus": [2, 4, 23], "cbar": 23, "cc": [2, 4, 5, 11, 22, 23, 28, 32, 34, 36], "cc_code": [2, 23], "cc_flav": [2, 23], "cc_flavint": [2, 23, 32], "cc_only_flav": 23, "cd": [31, 36, 41], "cdot": 23, "cdoubl": 2, "ceil": 23, "center": [4, 23, 44], "centimet": [5, 45], "centr": 5, "central": 2, "cern": 36, "certain": [23, 24, 34, 36], "cf": [4, 11, 15, 23, 36], "cfg": [5, 23, 24, 29, 33, 36, 41], "cfg_dict": 21, "cfloat": 2, "ch": 36, "chain": 23, "chang": [2, 4, 14, 15, 17, 19, 21, 23, 36, 38, 39], "channel": 38, "char": [2, 23], "charact": [2, 4, 5, 23], "character": [15, 39], "characteris": 5, "characterist": 35, "charecter": 15, "charg": 23, "chattopadhyai": 15, "check": [2, 3, 4, 5, 12, 15, 17, 21, 22, 23, 24, 29, 34, 36, 45], "check_agr": [2, 23], "check_circular": 23, "check_oct": 3, "check_ord": 3, "checkconsist": [2, 23], "checker": 36, "checkng": 4, "cheung": 39, "chi": [4, 23, 39, 44], "chi2": [2, 3, 4, 5, 23, 36, 44], "chi2_metr": [2, 23], "chi2_per_map": [2, 4], "chi2_tot": [2, 4], "choic": [22, 29, 33], "choleski": 23, "choos": [3, 4, 23, 24, 36, 39], "chose": 34, "chosen": [2, 4, 21, 23, 34, 37], "chunk": 21, "circular": 23, "circumst": [4, 36], "cite": 41, "cl": 23, "clabel": [4, 5, 23], "clabels": 4, "clang": 36, "clark": 23, "class": [2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 24, 27, 28, 31, 34], "classif": [19, 38], "classifi": [23, 38, 43], "classmethod": [4, 23, 24], "classnam": 34, "claus": 34, "clean": 36, "cleaner": 34, "clear": [1, 2, 23], "clear_matrix": [2, 23], "clear_matrix_guf": 23, "click": 36, "client": 23, "clip": 23, "clock": 23, "clone": [36, 41], "clongdoubl": 2, "clongfloat": 2, "close": [3, 17, 23, 36, 39], "closest": [12, 23], "cluster": [24, 36], "cm": [7, 17, 22, 23, 45], "cmap": [4, 5, 23, 36, 41], "cmsq_to_msq": [2, 5], "co": [2, 4, 15, 19, 23], "coars": [21, 36], "cobalt": 36, "cobyla": 3, "code": [2, 4, 14, 17, 23, 24, 32, 34, 36, 37, 39], "codebas": 36, "codifi": 36, "coeff": 4, "coeff_prior_sigma": 24, "coeffici": [11, 22, 23, 24], "coefft": 24, "coefft_idx": 24, "coflict": 36, "col": [2, 23], "col_it": [2, 23], "colect": 23, "collabor": [37, 41], "collate_by_nam": 4, "collate_with_nam": [2, 4], "collect": [3, 4, 21, 23, 24, 35, 44, 46], "colnam": 23, "colon": [4, 5, 23], "color": [4, 5, 23, 24], "colorbar": 4, "colorbar_kw": 4, "colormap": 4, "column": [2, 4, 7, 23, 37], "com": [3, 15, 22, 23, 33, 34, 36, 37, 39, 41, 45], "combin": [4, 5, 8, 13, 23, 24, 32, 39, 45], "combine_r": [2, 4, 24], "combine_regex": [5, 24], "combine_regex_opt": [2, 5], "combine_wildcard": [2, 4], "combinedflavintdata": 32, "combinedsplin": [2, 23], "come": [4, 15, 23, 33, 34, 36, 39], "comma": [5, 23], "command": [4, 5, 23, 31, 34, 35, 36], "comment": 23, "commit": 36, "common": [3, 5, 13, 23, 24, 34, 36, 41], "commonli": 23, "commun": 34, "compact": 23, "compar": [1, 2, 4, 17, 22, 23, 34, 39], "compare_numer": [15, 17], "comparison": [1, 2, 3, 4, 5, 17, 21, 32], "compars": 4, "compat": [2, 4, 12, 15, 21, 23, 29, 36, 44, 45], "compil": [2, 4, 5, 17, 23, 36], "compilerbas": 2, "complementari": 39, "complet": [5, 23, 24, 35], "completen": 44, "complex": [2, 3, 15, 17, 24], "complex128": [1, 2, 23], "complex256": [1, 2], "complex64": [1, 2], "complex_": 2, "complexflo": 2, "compos": [2, 23], "comprehens": 34, "compress": [5, 23, 32], "comput": [2, 3, 4, 5, 7, 8, 13, 14, 17, 18, 23, 34, 36, 41], "computation": 4, "compute_funct": [2, 4, 6, 7, 12, 13, 15, 18, 21, 22], "compute_integrated_map": [2, 23], "compute_map": [2, 23], "computeminlengthtolay": [6, 15], "concis": 4, "conda": 36, "condit": 3, "confer": 3, "confid": 4, "config": [2, 4, 21, 31, 33, 41], "config_pars": [1, 2, 4, 5], "configfil": 23, "configpars": [5, 23], "configur": [3, 4, 5, 21, 23, 24, 31, 34, 35], "conflevel": 23, "conflict": 36, "conjug": [2, 17, 23], "conjugate_guf": 23, "conjugate_transpos": [2, 23], "conjugate_transpose_guf": 23, "conjunct": [4, 23], "connect": 36, "conserv": 23, "consid": [2, 15, 22, 23, 31, 34], "consider": 17, "consist": [2, 3, 4, 11, 13, 23, 29], "consistency_check": [2, 23], "consol": 5, "constant": [12, 15, 22, 23, 37], "constrain": 3, "constrained_fit": 3, "constraint": [3, 15, 23], "construct": [4, 15, 17, 23], "constructor": 4, "contain": [1, 2, 3, 5, 7, 9, 11, 12, 13, 14, 15, 21, 22, 23, 24, 27, 29, 31, 32, 34, 35, 37, 44], "containerset": [2, 4, 11], "contamin": 36, "content": 1, "contents_or_obj": 23, "context": [23, 29], "contian": 5, "continu": [2, 4, 5, 12, 23, 24, 34], "continuum": 36, "contourpi": 36, "contrari": 23, "contrast": [4, 35], "contribut": [3, 13, 17, 23, 36], "contributor": 41, "control": [4, 9, 12, 13, 23, 37], "contsain": 24, "conv_llh": [2, 4, 23, 44], "conv_poisson": [2, 23], "conv_poisson_pdf": 44, "conveni": [2, 4, 23, 35], "convent": [4, 23, 29, 34, 36], "convers": [4, 5, 23, 26, 45], "convert": [2, 3, 4, 5, 17, 23, 31, 42, 45], "convert_config_format": [1, 2], "convolut": [4, 23, 34], "coord": [2, 4], "coord_iter": 4, "coordin": 4, "cope": 41, "copi": [1, 2, 4, 17, 23, 36], "copy_matrix": [2, 23], "copy_matrix_guf": 23, "copyright": 23, "core": [1, 2, 3, 5, 15, 23, 27, 32, 34, 36, 37, 41, 45], "core_density_scal": [6, 15], "core_scaling_w_constrain": [6, 15], "core_scaling_wo_constrain": [6, 15], "corespond": 3, "corner": 4, "correct": [4, 14, 17, 21, 22, 23, 34], "correct_chi2": [2, 4, 23], "correctli": [3, 21, 23, 34], "correl": [4, 13, 23, 34], "correspond": [2, 3, 4, 5, 14, 15, 17, 23, 24, 44], "corrspond": 23, "cosin": [15, 23, 35], "cost": 23, "coszen": [4, 9, 15, 19, 21, 23, 29, 35], "coszen_improv": 19, "coszen_limit": 15, "coszen_nam": [21, 23], "coszen_reflect": [21, 23], "coszenith": 23, "could": [3, 4, 23, 24], "count": [2, 3, 4, 8, 21, 23, 24, 26], "counter": [2, 3], "coupl": 15, "cours": [3, 36], "covari": [4, 23, 24, 36], "cover": [22, 24], "covmat": 4, "cp": [3, 15], "cpt": 15, "cpu": [2, 4, 23, 36, 41], "cpu_count": 23, "cpudispatch": 17, "cpuinfo": 36, "cpv": 15, "creat": [2, 3, 4, 5, 11, 13, 19, 21, 23, 24, 29, 32, 34, 36], "create_barr_sys_tables_mceq": [1, 2, 13], "create_hypersurfac": [2, 5], "creating_a_servic": 34, "creation": [2, 3], "credit": 23, "creiterion": 39, "criteria": [4, 23, 26], "criterion": 39, "critic": [23, 34, 35], "cross": [7, 15, 22, 23, 28, 36], "cross_sect": [1, 2, 22, 28], "crosssect": [2, 23, 28, 36], "crude": [23, 36], "cscd": [4, 23, 31, 34], "csingl": 2, "csm": 22, "csv": [11, 24, 36], "csv_data_hist": [2, 6, 29], "csv_icc_hist": [2, 6, 29], "csv_loader": [2, 6, 29], "ctype": [1, 2, 23], "cuda": [2, 17, 23, 36], "cuda_copi": [2, 23], "cudadispatch": 17, "current": [3, 4, 9, 15, 19, 23, 24, 33, 35, 36], "current_bin": [2, 23], "curv": [23, 24], "cust_cut": 5, "custom": [2, 3, 4, 23, 36, 37], "cut": [4, 5, 11, 23, 32], "cut_bool_idx": [2, 23], "cut_data": 4, "cut_field": 23, "cutoff": 23, "cuts_step_1": 23, "cuts_step_2": 23, "cvmf": 36, "cwd": 23, "cx": [15, 17], "cxx": 36, "cycler": 36, "cz": [15, 23], "cz_prior": 4, "czbin": [4, 23], "czbins2": 4, "czbins_nam": 23, "d": [2, 15, 17, 21, 23, 24, 31, 34], "daemon": 13, "daemon_antik_158g": 13, "daemon_antik_2p": 13, "daemon_antik_31g": 13, "daemon_antipi_158g": 13, "daemon_antipi_20t": 13, "daemon_antipi_2p": 13, "daemon_antipi_31g": 13, "daemon_flux": [2, 6, 36], "daemon_gsf_1": 13, "daemon_gsf_2": 13, "daemon_gsf_3": 13, "daemon_gsf_4": 13, "daemon_gsf_5": 13, "daemon_gsf_6": 13, "daemon_k_158g": 13, "daemon_k_2p": 13, "daemon_k_31g": 13, "daemon_n_158g": 13, "daemon_n_2p": 13, "daemon_p_158g": 13, "daemon_p_2p": 13, "daemon_pi_158g": 13, "daemon_pi_20t": 13, "daemon_pi_2p": 13, "daemon_pi_31g": 13, "daemonflux": [33, 36], "dan": 23, "dankraus": 23, "dash": [23, 34], "data": [2, 3, 4, 5, 6, 9, 13, 19, 21, 22, 23, 24, 29, 31, 32, 33, 34, 35, 36, 39, 41, 44], "data_arrai": 4, "data_dict": [5, 11, 23], "data_dist": 3, "data_eq": [2, 4], "data_fil": 5, "data_file_path": 5, "data_histogram": [2, 23], "data_load": 31, "data_mak": 3, "data_proc_param": [1, 2, 5], "data_spec": 4, "databas": 11, "dataprocparam": [2, 5, 23], "datareleas": [11, 24, 29, 36], "dataset": [4, 5, 14, 21, 23, 24, 29, 31, 33, 36], "datastructur": 23, "datatyp": [2, 23], "date": [15, 23], "dateutil": 36, "datstructur": 23, "datum": [23, 32], "dct": 23, "dct_data": 23, "de": 23, "dead": 34, "deal": [21, 23, 33], "debug": [2, 3, 4, 23, 36], "debug_mod": [2, 3, 4, 23], "decai": [8, 15, 17, 23], "decay_alpha3": [6, 15], "decay_flag": 17, "decay_matrix": [6, 15], "decay_param": [2, 6], "decayparam": [6, 15], "decid": 23, "decim": 23, "declar": [14, 34], "decod": 23, "decoh_param": 15, "decoher": [2, 6], "decoherenceparam": [6, 15], "decomposit": 23, "decor": [2, 23, 36], "decoupl": 31, "decreas": 21, "decstr": 23, "dedic": 5, "deduc": [2, 23], "deem": [3, 23], "deep": 4, "deepcopi": [4, 21, 23], "deepcor": [3, 5, 19, 23, 39, 41], "deeper": 36, "def": [2, 3], "default": [2, 3, 4, 5, 11, 17, 21, 22, 23, 24, 28, 45], "default_map_tex": [2, 23], "default_translation_mod": [2, 4], "defin": [2, 3, 4, 5, 11, 12, 13, 15, 19, 23, 24, 28, 34, 35, 36], "define_as_ref": 17, "definit": [2, 4, 13, 24, 34, 44], "deg": [3, 4, 23], "degre": [3, 23, 31], "delimit": 23, "delta": [5, 9, 13, 15], "delta_cp": 15, "delta_gamma_mu": 9, "delta_gamma_mu_fil": 9, "delta_gamma_mu_spline_kind": 9, "delta_gamma_mu_vari": 9, "delta_index": [3, 13], "deltacp": [6, 15, 37], "deltacp24": 3, "deltam21": [15, 37], "deltam31": [15, 23, 37], "deltam41": [3, 15], "deltamsq31": 15, "deltamsq32": 15, "deltansi": [6, 15], "delv": 36, "denomin": [2, 23, 44], "densiti": [6, 7, 15, 17, 23, 37], "density_in_lay": 17, "density_scal": [6, 15], "deocher": 15, "depend": [2, 3, 4, 13, 19, 23, 24, 33, 36, 37], "depends_nam": [2, 4], "dependson": [2, 4], "deprec": [3, 5, 23, 31, 43], "depth": [7, 15, 37], "dereiv": 4, "deriv": [2, 3, 4, 12, 21, 23, 24, 36], "derivedparam": [2, 4, 23], "descend": 23, "descendingli": 23, "describ": [3, 4, 5, 14, 15, 23, 37, 44], "descript": [3, 5, 17, 23, 29, 39, 43], "design": [4, 29, 32, 36], "desir": [2, 4, 19, 23, 24, 34, 36], "despit": 23, "dest_represent": 4, "destin": [4, 23, 36], "detail": [3, 4, 5, 11, 19, 23, 24, 33, 34, 36, 37, 39, 41], "detect": [5, 23, 35], "detection_length": 23, "detector": [1, 2, 3, 5, 7, 8, 15, 19, 21, 23, 26, 31, 32, 35, 36, 37, 39, 42], "detector_depth": [7, 15], "detedctor": 24, "deterin": 15, "determin": [2, 3, 9, 12, 13, 14, 23], "determinist": 34, "detmcsimrunsset": [2, 23], "dev": [23, 34], "develop": [15, 23, 34, 36, 41], "developp": 17, "deviat": [4, 13, 23, 45], "devic": 23, "di": 22, "diag": [15, 17], "diagon": 15, "dict": [2, 3, 4, 5, 11, 12, 17, 19, 21, 23, 24, 32], "dictat": 4, "dictionari": [2, 3, 4, 5, 11, 12, 21, 23, 24, 28, 32], "dictonari": 23, "did": [23, 34], "diff": [4, 5, 23], "diff_max": 5, "diff_min": 5, "differ": [2, 3, 4, 5, 15, 22, 23, 24, 31, 33, 34, 35, 36, 39, 43, 45], "differentait": 23, "difficulti": 4, "diffus": 23, "digest": 23, "digit": [2, 4, 23], "dim": [2, 4, 17], "dimens": [2, 4, 13, 15, 21, 23, 24, 35], "dimension": [2, 4, 23, 24, 35, 45], "dimensionalityerror": 45, "dimensionless": [4, 5, 8, 9, 13, 15, 19, 22, 23], "dimensiosn": 4, "dimes": 4, "dir": [23, 31, 36], "dir_sort": 23, "dirac": 15, "direct": [23, 24, 42], "directli": [2, 4, 21, 23, 24, 32, 35, 36, 39, 41], "directori": [2, 4, 5, 15, 23, 24, 34, 35, 36], "dirti": 23, "dis_csm": 22, "dis_si": [2, 6], "disabl": [2, 4, 11, 24, 34, 45], "disallow": [3, 23], "discourag": [4, 36], "discr": 5, "discr_si": [2, 5, 6], "discrep": 21, "discret": [2, 4, 5, 12, 23, 24, 31, 44, 45], "discretis": 37, "discuss": 34, "disk": [4, 5, 23, 24], "dispatch": [2, 23], "displai": [3, 23], "disregard": 21, "distanc": [6, 7, 8, 15, 17, 23, 24], "distance_in_lay": 17, "distance_max": 8, "distance_min": 8, "distinguish": [36, 39], "distort": 23, "distribut": [3, 4, 5, 14, 19, 23, 35, 36, 39, 44], "distribution_mak": [1, 2, 3], "distributionmak": [2, 3, 4, 5, 23, 35, 41], "ditribut": [4, 23], "divid": [2, 4, 5, 7, 15, 23, 24], "divide_total_mc": 21, "divis": [4, 23], "django": 23, "dm": [3, 17], "dm21": 15, "dm31": 15, "dm41": 15, "dm_matrix": [6, 15], "dnue": 13, "dnuebar": 13, "dnumu": 13, "dnumubar": 13, "do": [2, 3, 4, 5, 17, 23, 24, 32, 34, 36, 39, 45], "do_1d_2d_bartol_test": [2, 5], "do_1d_2d_honda_test": [2, 5], "do_1d_3d_honda_test": [2, 5], "do_2d_2d_bartol_test": [2, 5], "do_2d_2d_comparison": [2, 5], "do_2d_2d_honda_test": [2, 5], "do_2d_3d_honda_test": [2, 5], "doc": [4, 11, 23, 24, 34, 36, 39], "docstr": [2, 3, 4, 11, 23, 33, 34, 36], "doctest": 34, "document": [3, 23, 34, 36, 41], "documentatio": 19, "doe": [2, 4, 5, 9, 14, 23, 24, 34, 36], "doesn": [2, 4, 5, 23, 24, 34], "doi": 23, "dollar": 23, "dom_eff": [5, 31], "domain": [2, 4, 23], "don": [3, 4, 12, 23, 32, 34, 36, 45], "done": [2, 3, 4, 7, 14, 22, 23, 24, 39, 44], "dose": 3, "dot": [4, 17, 23], "doubl": [2, 4, 23, 24, 34], "doubli": 23, "down": [2, 4, 6, 19, 21, 23], "download": [5, 36], "downsampl": [2, 4, 11], "downstream": 24, "dpi": 4, "dragon": 4, "draw": [24, 39], "drawn": [4, 23], "drive": 22, "drop": [3, 23], "drop_fit_map": 24, "dt": 23, "dt_sec": 23, "dtype": [2, 23, 45], "due": [13, 17, 23, 31, 36], "duke": [17, 37], "dummi": 34, "dump": [2, 23], "dunkman_l5": 5, "dupe_flavintgroup": 23, "dupe_flavintgroups_data": 23, "duplic": [4, 23], "dure": [3, 14, 17, 23, 24, 36], "dx": [23, 44], "dynam": [23, 36], "dziewonski": 15, "e": [2, 3, 4, 5, 7, 11, 12, 13, 15, 17, 19, 23, 24, 28, 31, 32, 34, 35, 36, 41, 44], "e0": [5, 19, 28], "e1": [5, 28], "e_arrai": 15, "e_bar": 7, "e_prior": 4, "e_rang": 23, "each": [3, 4, 5, 11, 12, 13, 14, 15, 17, 21, 22, 23, 24, 26, 32, 34, 35, 36, 37, 39], "earlier": [8, 21, 31], "earth": [7, 15, 17, 33, 35, 37], "earth_absorpt": [2, 6], "earth_model": [7, 15, 37], "eas": 24, "easi": [17, 23, 34], "easier": [4, 23], "easiest": 36, "easili": [4, 19, 23, 32, 36], "ebin": [4, 23], "ebins2": 4, "ebins_nam": 23, "echo": 36, "edg": [4, 5, 23], "edge_magnitud": [2, 4], "edges_hash": [2, 4], "edges_iter": 4, "edit": [36, 39], "edu": [5, 15, 17, 23, 33, 37, 39, 41], "educ": 36, "effect": [2, 4, 5, 8, 15, 21, 23, 26, 31, 33, 35, 37, 39, 45], "effici": 23, "egg": [23, 36], "egregi": 34, "egrid": 13, "ehrhardt": 15, "ei": 23, "eigenst": 17, "eigenvalu": 15, "einsum": 17, "either": [2, 3, 4, 5, 9, 15, 23, 24, 29, 31, 34, 36, 45], "electron": [15, 17, 34, 37], "element": [2, 4, 15, 17, 23, 24, 32], "elemnt": 23, "elim": 39, "elimin": 23, "elisa": 15, "eller": 13, "ellips": 23, "ellipsi": 4, "ellohfin": 15, "elment": 4, "elohfink": 15, "els": [2, 14, 22, 23, 34], "elsewher": [5, 23], "embedd": 36, "emit": 5, "emploi": 41, "empti": [2, 4, 14, 17, 23, 24, 32], "empty_bin": [4, 23], "empty_bin_indic": [2, 4], "empty_lik": 2, "en": [3, 23, 28, 34, 36], "en_splin": 23, "enabl": [2, 23, 34, 36, 45], "encapsul": 23, "encod": [21, 23], "encompass": 23, "encount": [23, 36], "end": [2, 3, 4, 11, 23, 34, 36, 37, 39], "endpoint": [3, 23], "energi": [4, 7, 8, 11, 13, 15, 17, 19, 21, 22, 23, 28, 29, 33, 35, 37, 39, 41, 42], "energy___truth": 4, "energy_improv": 19, "energy_log_max": 23, "energy_log_min": 23, "energy_max": 23, "energy_min": 23, "energy_pivot": 13, "energy_v": 28, "energytruth": 4, "enforc": [3, 4, 23, 24, 36], "eng": 23, "engfmt": [2, 23], "engin": [2, 23], "enough": [2, 3, 17, 21, 23, 36, 37], "enpow": [5, 23], "ensur": [2, 4, 11, 23, 34, 36], "ensure_ascii": 23, "enter": [2, 36], "enthought": 36, "entir": [23, 24, 32], "entiti": [4, 5, 11, 23], "entri": [4, 11, 23], "enum": [21, 23], "enumer": [4, 21, 23], "env": 36, "environ": [2, 4, 23, 34, 35, 36], "environment": 15, "ep": 23, "eps_e": [6, 15], "eps_emu": [6, 15], "eps_emu_magn": 15, "eps_emu_phas": 15, "eps_etau": [6, 15], "eps_etau_magn": 15, "eps_etau_phas": 15, "eps_matrix": [6, 15], "eps_matrix_analyt": [6, 15], "eps_mumu": [6, 15], "eps_mutau": [6, 15], "eps_mutau_magn": 15, "eps_mutau_phas": 15, "eps_prim": [6, 15], "eps_scal": [6, 15], "eps_tautau": [6, 15], "epsilon": [1, 2, 11, 15], "eq": 23, "eqival": 4, "equal": [2, 4, 5, 14, 21, 23, 24, 41, 45], "equal_nan": 23, "equality_prec": [2, 23], "equality_sigfig": [2, 23], "equat": [2, 13, 15], "equidist": 4, "equival": [2, 4, 5, 7, 21, 23, 28, 36], "erron": 4, "error": [2, 4, 19, 21, 23, 34, 44, 45], "error_hist": 4, "error_method": [2, 4, 23], "error_model": 2, "error_on_miss": 4, "esim": 19, "essenti": [3, 23, 34, 36, 43], "estim": [11, 21, 23], "et": 41, "etc": [2, 3, 4, 5, 19, 23, 24, 27, 34, 35, 36, 45], "ev": [3, 15, 17, 32], "eval": [3, 36], "eval_bin": 23, "eval_spl": 23, "evalu": [3, 4, 5, 12, 13, 21, 23, 24, 39], "evaluate_at": 23, "evaluate_den": 23, "evaluate_flux_map": [6, 13], "evaulat": 5, "even": [3, 4, 5, 23, 36], "evenli": 4, "event": [1, 2, 5, 8, 11, 12, 13, 14, 15, 19, 21, 22, 23, 24, 26, 29, 31, 32, 35, 38, 39, 42], "event_": 31, "events__vlvnt__toy_1_to_80gev_spidx1": [4, 32], "events_fil": [4, 5, 11], "events_pi": [1, 2], "events_subsample_index": [4, 11], "eventspi": [2, 4], "eventu": [23, 34, 35], "everi": [2, 3, 4, 11, 14, 15, 23, 24, 36], "everyth": [4, 34], "everytim": 36, "evolutionari": 3, "evtrat": 23, "ex": 4, "exa": 23, "exact": [4, 23, 32], "exactli": [2, 4, 15, 23, 24, 34], "exampl": [2, 3, 4, 5, 19, 21, 23, 24, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 41, 45], "example_numpi": 34, "exccut": 23, "excecut": 4, "excel": 39, "except": [2, 4, 23, 34], "excess": 4, "exclud": [4, 23, 24], "exclus": [4, 13, 19, 23], "execut": [2, 15, 31, 36], "execute_func": [15, 17], "exercis": 34, "exist": [2, 4, 5, 23, 24, 28, 29, 35, 45], "existing_must_match": 4, "exp": [12, 15, 23, 44], "exp_path": 23, "exp_us": 23, "exp_var": 23, "expand": [2, 4, 5, 23], "expect": [2, 3, 4, 8, 11, 13, 14, 15, 19, 22, 23, 24, 28, 33, 34, 35, 39, 41, 44], "expect_sequ": 23, "expected_bin": 24, "expected_param": [2, 4], "expected_total_mc": 21, "expected_valu": [4, 23], "expens": [4, 23], "experi": [39, 41], "explain": 24, "explan": [3, 36], "explanaton": 39, "explcitli": 23, "explicit": [2, 4, 34], "explicitli": [5, 23, 45], "expon": [2, 23], "exponenti": [5, 8, 12, 24], "export": 36, "expos": 2, "exppostfix": 23, "expprefix": 23, "expr": [11, 23], "express": [2, 4, 5, 15, 23, 24, 44], "expresss": 23, "ext": [4, 23], "extcalclay": [6, 15], "extend": [2, 4, 12, 23], "extendedinterpol": 23, "extens": [23, 32, 34, 36], "extent": 23, "extern": [4, 21, 23, 31, 34], "external_attribut": 41, "external_priors_penalti": 3, "extra": [3, 4], "extract": [4, 5, 23, 31], "extract_field": 5, "extract_v": [2, 5], "extran": 23, "extrapol": [4, 12, 22, 24], "extrapolation_energy_threshold": 22, "extrapolation_typ": 22, "extrem": 24, "ezfit": 39, "f": [2, 5, 23, 36], "f1": 23, "f10": 23, "f8": 17, "f9": 23, "f_io": 5, "f_name": 11, "f_no": 5, "facil": 23, "factor": [4, 5, 15, 17, 18, 21, 23], "factori": [24, 44], "fail": [4, 17, 23, 34, 36, 45], "failur": 24, "fairli": 23, "fake": 29, "fall": [4, 21, 23, 34], "fals": [2, 3, 4, 5, 12, 13, 15, 17, 19, 21, 23, 24, 32, 36, 45], "far": [3, 4, 34, 39], "fasiha": 23, "fast": [4, 23, 34, 36], "fast_hash_filesize_byt": [2, 23], "fast_hash_ndarray_el": [2, 23], "fast_hash_str_char": [2, 23], "faster": 4, "fatal": [2, 23], "fbwkde": [2, 23], "fdb5cec2054e6f1c6ae35476045a0bbd": 23, "feather": [12, 31], "featur": [12, 31, 34, 36, 45], "fed": [14, 37], "fedynitch": 13, "few": 34, "fewer": 4, "fi": [4, 32], "fi_contain": 23, "fi_dat": 23, "fidat": 32, "fidat2": 32, "field": [2, 5, 11, 23, 34], "field1": 23, "field2": 23, "field_map": 23, "field_nam": 2, "fifo": 2, "fig": [4, 36, 41], "fig_kw": 4, "figsiz": [23, 36, 41], "figur": [2, 4, 11, 23], "file": [2, 3, 4, 7, 9, 11, 12, 13, 15, 21, 22, 24, 28, 29, 31, 32, 33, 34, 35, 36, 37, 41, 44], "file_i": 23, "file_label": 23, "file_sort": 23, "file_str": [2, 23], "file_typ": 23, "file_x": 23, "fileexchang": 23, "fileio": [1, 2, 4], "filenam": [4, 23, 34], "filepath": 23, "files_per_flavor": 11, "filesystem": 23, "fileystem": 23, "fill": [2, 3, 4, 14, 15, 23, 41], "fill_valu": 4, "fill_variable_dict": [6, 11], "filter": 26, "final": [5, 23, 34, 37, 39, 43, 44], "find": [3, 4, 5, 23, 34], "find_fil": [2, 23], "find_index": [2, 4], "find_index_unsaf": [2, 4], "find_map": [2, 4], "find_path": [2, 23], "find_resourc": [2, 23], "find_valid_represent": [2, 4], "fine": 23, "finer": 21, "finit": [2, 23, 44], "finite_bin": [2, 4], "fint_r": [2, 23], "fint_ssep": [2, 23], "fint_texsep": [2, 23], "first": [3, 4, 7, 11, 13, 23, 31, 33, 36, 45], "first_var": 23, "fisher": 23, "fisher_matrix": [1, 2], "fishermatrix": [2, 23], "fit": [2, 3, 4, 5, 12, 19, 21, 23, 24, 27, 31, 34], "fit_cfg": 5, "fit_coefft": [23, 24], "fit_coefft_label": [23, 24], "fit_directori": 24, "fit_discrerte_si": 31, "fit_discrete_si": 31, "fit_discrete_sys_nd": 12, "fit_hypersurfac": [1, 2, 23, 24], "fit_hypo": [2, 3], "fit_hypo_inn": 3, "fit_info": 3, "fit_map": [23, 24], "fit_octants_separ": 3, "fit_param_valu": [23, 24], "fit_recurs": [2, 3], "fit_result": 3, "fit_results_fil": 12, "fit_success": 24, "fitter": [3, 39], "five": 23, "fix": [2, 4, 21, 23, 24, 34, 39], "fix_error": [2, 6], "fix_grid_param": 3, "fix_intercept": 24, "fix_oppo_flux": [2, 4], "flag": [2, 3, 4, 11, 15, 23, 24, 31], "flat": [4, 11], "flat_hist": 4, "flatten": [4, 15, 23], "flav": [2, 4, 5, 7, 15, 23, 32], "flav_bar_str_map": [6, 7], "flav_or_flavint": 23, "flav_r": [2, 23], "flavint": [1, 2, 4, 5, 28, 32], "flavint_group": [2, 4, 23], "flavint_r": [2, 23], "flavintdata": [2, 4, 23, 28, 32], "flavintdatagroup": [2, 4, 23], "flavintgroup": 23, "flavintgroup0": 23, "flavintgroup1": 23, "flavintgroupsfromstr": [2, 23], "flavints_join": [4, 32], "flavints_pres": [2, 4], "flavintsep": 23, "flavitn_group": 23, "flavor": [3, 4, 5, 11, 13, 15, 17, 23, 32, 35], "flavour": [4, 15, 17, 23, 34, 37], "flavsep": 23, "flavtex": 5, "fle": 24, "flercnn": 31, "flercnn_hnl": 31, "flexibl": [3, 23, 28], "flip": 32, "float": [2, 3, 4, 5, 8, 11, 13, 15, 17, 18, 19, 22, 23, 24, 45], "float32": [1, 2], "float64": [1, 2, 23], "float_": 2, "fluctuat": [2, 4, 12, 23, 24, 39], "fluctuate_se": 12, "fluctuated_map": 4, "flux": [2, 4, 5, 6, 8, 9, 11, 23, 26, 29, 31, 33, 35, 36, 37, 42], "flux_dict": 5, "flux_fil": 23, "flux_map": 13, "flux_nam": 5, "flux_obj": 13, "flux_tabl": [5, 13], "flux_weight": [1, 2], "fmt": [4, 23], "fname": [4, 22, 23], "fnmatch": 4, "fold": [21, 43], "folder": 29, "follow": [2, 3, 4, 5, 9, 14, 15, 22, 23, 24, 33, 34, 36, 43, 45], "follwo": 36, "font": 22, "fonttool": 36, "foo": [2, 21, 23], "foot": [4, 45], "for_json": 23, "forbidden": 4, "forc": [2, 4, 13, 23, 31, 36], "force_cas": 23, "force_through_nomin": 31, "forceobj": 2, "fork": [15, 23, 36], "fork_serv": [2, 23], "forkbutton": 36, "form": [3, 4, 5, 12, 15, 17, 21, 23, 24, 34], "format": [1, 2, 4, 5, 11, 21, 24, 28, 34, 36], "format_num": [2, 23], "former": [23, 32, 39], "formul": [3, 4, 21, 23], "formula": 23, "forstandard": 17, "forth": 5, "fortran": 2, "forward": [23, 43], "found": [2, 3, 4, 5, 13, 15, 23, 24, 33, 34, 35, 36, 37], "fp": 23, "fp128": 23, "fp16": 23, "fp32": [23, 36, 41], "fp64": [23, 36], "fpath": 23, "fpname": 23, "frac": 44, "fract": 4, "fract_diff": 5, "fract_diff_max": 5, "fract_diff_min": 5, "fractdiff": 4, "fraction": [4, 5, 11, 15, 17, 19, 21, 23, 34, 37], "fraction_events_to_keep": [4, 11], "framework": 34, "free": [2, 3, 4, 15, 23, 24, 31, 36], "freedom": 11, "freedom_hdf5_load": [2, 6], "freeli": 36, "fridg": [5, 13, 36], "fridge_dir": [31, 36], "frobeniu": 23, "from": [2, 3, 4, 5, 7, 8, 11, 12, 13, 15, 21, 23, 24, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 41, 44, 45], "from_cfg": [2, 23], "from_dim": 4, "from_fil": [2, 23], "from_hdf": [2, 23], "from_json": [2, 4, 23, 24], "from_pickl": [2, 23], "from_stat": [2, 4, 23, 24], "fromfil": [2, 23], "fromkei": [1, 2], "fromnam": 23, "frompapafil": [2, 23], "fronebiu": 23, "fronebius_nearest_psd": [2, 23], "fsort": [2, 23], "ftol_ab": 3, "ftol_rel": 3, "ftype": [1, 2, 4, 23], "ftype_prec": [2, 23], "fucntion": 11, "fuction": 23, "fulfil": 3, "full": [2, 3, 4, 13, 23, 32, 34, 36], "full_comparison": [2, 4], "full_hash": [2, 4, 23], "full_lik": 2, "full_norm": 23, "fullfilepath": 23, "fullflav": 23, "fulli": [4, 13, 23, 31, 34, 37, 45], "fullnam": 23, "fun": 23, "func": [3, 17, 23], "func_kw": 17, "func_nam": 24, "funcnam": 34, "funct": [2, 4, 23], "function": [2, 3, 4, 5, 8, 11, 12, 14, 15, 17, 19, 22, 23, 24, 28, 31, 32, 34, 36, 44], "function_fil": 4, "funtion": 23, "further": [3, 4, 13, 23, 32, 34], "furthermor": 34, "futur": [23, 24, 34, 36], "fx": [15, 17], "g": [2, 3, 4, 5, 11, 13, 17, 19, 23, 24, 31, 34, 35, 36, 41, 44], "g_f": 15, "gaisser": [13, 23], "gamma": [5, 15, 23, 44], "gamma12": 15, "gamma13": 15, "gamma21": 15, "gamma23": 15, "gamma31": 15, "gamma32": 15, "garbag": 2, "gauss": [4, 31], "gaussian": [1, 2, 4, 11, 29, 31], "gcc": 36, "gen_mat_pot_matrix_complex": [6, 15], "gener": [2, 3, 4, 9, 11, 13, 14, 15, 19, 21, 23, 24, 28, 29, 31, 34, 36, 39, 44], "general_section_nam": [2, 5], "generalis": [15, 17], "generalized_llh_param": [2, 6], "generalized_poisson_llh": [2, 4, 23], "generator_radiu": 23, "generator_volum": 23, "generic_bin": 23, "geni": [11, 22, 23, 28, 36], "genie_2": [23, 28], "genie_all_bulkice_pm10pc_knn_200pc": 31, "genie_all_bulkice_pm10pc_knn_200pc_poly2": 31, "genie_ma_q": 22, "genie_ma_r": 22, "genie_param": 22, "genie_prescale_factor": 23, "genie_si": [2, 6], "geom": [4, 23, 32], "geometri": 23, "geomspac": 3, "get": [2, 3, 4, 5, 8, 12, 13, 23, 24, 28, 32, 33, 34, 36, 41], "get_bar_ssep": [2, 23], "get_data": [2, 23], "get_energy_rang": [2, 23], "get_fit_coefft": [23, 24], "get_fit_coefft_idx": [23, 24], "get_flav": [2, 23], "get_flavint": [2, 23], "get_hist": [2, 4, 23], "get_hypersurfac": [23, 24], "get_incomplete_job_idx": [23, 24], "get_integrated_map": [2, 23], "get_llh": [2, 23], "get_llh_barlow_bin": [2, 23], "get_llh_poisson": [2, 23], "get_map": [2, 4, 23], "get_mapset": [2, 4, 36, 41], "get_nominal_mask": [23, 24], "get_num_gen": [2, 23], "get_on_axis_mask": [23, 24], "get_output": [2, 4], "get_pid_and_interaction_typ": [6, 11], "get_plot": [2, 23], "get_prior_bound": [2, 4], "get_random_st": [2, 4, 23], "get_single_plot": [2, 23], "get_spectral_index": [2, 23], "get_splin": [2, 23], "get_transition_matrix": [15, 17], "get_valid_filenam": [2, 23], "get_vers": [2, 23], "get_xs_ratio_integr": [2, 23], "get_xs_ratio_valu": [2, 23], "get_xs_valu": [2, 23], "get_xsec": [2, 23], "get_xsec_vers": [2, 23], "getbestfit": [2, 23], "getcorrel": [2, 23], "getcovari": [2, 23], "geterrorellips": [2, 23], "getlabel": [2, 23], "getnod": [2, 23], "getparameterindex": [2, 23], "getprior": [2, 23], "getpriordict": [2, 23], "getsigma": [2, 23], "getsigmanoprior": [2, 23], "getsigmastatist": [2, 23], "getsigmasystemat": [2, 23], "getvari": [2, 23], "gev": [4, 8, 13, 15, 17, 22, 23], "gi": 23, "giga": 23, "gigaelectron_volt": [4, 8, 22, 23], "gigaelectronvolt": 23, "gist": 23, "git": [36, 41], "github": [3, 15, 22, 23, 33, 34, 36, 41, 45], "githubusercont": 41, "give": [4, 21, 23, 24, 34, 44], "given": [2, 3, 4, 7, 14, 15, 17, 18, 19, 21, 23, 24, 37, 39, 44, 45], "glob": [4, 5], "global": [2, 3, 4, 23], "globe": [2, 6], "globes_wrapp": 15, "glossari": 41, "go": [4, 11, 23, 34], "good": [23, 24, 34], "googl": [22, 39], "govern": 13, "gpu": 23, "gradient": [3, 12, 13, 23, 24, 31], "gradient_param": 13, "grain": 23, "gram": 17, "graph": 23, "greater": [4, 23], "greatli": [4, 21], "greco": 4, "grid": [2, 3, 4, 6, 23, 24, 29, 36], "grid_bin": 11, "grid_scan": 3, "grotowski": 23, "group": [4, 5, 23, 32, 33, 36], "group_flavs_by_int_typ": [2, 23], "guarante": [4, 36], "guess": [4, 23, 24], "gui": 34, "guid": [34, 36, 39], "guidanc": 34, "h": [2, 5, 23], "h0": 36, "h1": 36, "h2o": 23, "h3a": 23, "h5": [23, 32], "h5group": 23, "h5py": [23, 36], "h_decai": 17, "h_sfx": 23, "h_vac": 17, "ha": [2, 3, 4, 5, 8, 13, 15, 23, 24, 33, 35, 36, 37, 45], "half": [4, 19, 23], "hall": 23, "hamiltonian": [15, 17], "hand": 23, "handl": [4, 9, 11, 13, 15, 23, 24, 36, 45], "handler": 23, "happen": [24, 27], "hard": [17, 34], "hardlink": 23, "hardmax": 12, "hardwar": 23, "harvest": 29, "has_deriv": [2, 4], "hash": [1, 2, 4], "hash2hex": [2, 23], "hash_fil": [2, 23], "hash_map": [2, 4], "hash_obj": [2, 23], "hash_sigfig": [1, 2, 4], "hash_to": 23, "hash_val": 23, "hashable_st": [2, 4], "hat": 44, "have": [2, 3, 4, 5, 12, 13, 14, 15, 19, 21, 22, 23, 24, 32, 34, 36, 39, 45], "hbar": 8, "hdf": [1, 2, 32], "hdf5": [4, 5, 11, 23, 29, 31, 32, 36], "hdf5_use_file_lock": 36, "hdfchain": [1, 2], "hdfgroup": 36, "hdftableproxi": [2, 23], "hdfwriter": 5, "he": 4, "header": 23, "headless": 34, "healthi": 3, "heart": 23, "height": [7, 15, 19, 37], "help": [4, 5, 23, 24, 36], "helper": [23, 24], "hemispher": 23, "henc": [4, 5, 15, 21, 23, 24, 39], "her": 39, "here": [3, 4, 7, 22, 23, 24, 31, 34, 36, 37, 39, 41, 44], "hermitian": [15, 23], "hessian": 3, "hex": 23, "hexadecim": 23, "hexdigest": 23, "hg_taumod": 23, "hh": 23, "hi": [15, 23], "hidden": 23, "hide": 3, "hierarch": 23, "hierarchi": [23, 27, 36, 37], "high": [23, 34, 41], "higham": 23, "higher": [3, 4, 22], "highest": 23, "highli": [31, 36], "hilla": [13, 23], "hillasg": [2, 6], "him": 23, "hint": 3, "hist": [2, 4, 6, 23], "hist_val": 4, "histo": 23, "histogram": [2, 4, 5, 21, 23, 24, 35, 36, 39, 41], "histogram_set": [2, 4], "histogramdd": 4, "histogream": 23, "historgam": 23, "histori": 3, "hmat": 15, "hms_alwai": 23, "hnadl": 24, "hnl": [8, 31, 36], "hnl_decay_width": 8, "hoc": [2, 21], "hold": [2, 4, 15, 23, 24], "hole_ic": [5, 31], "hole_ice_fil": 31, "hole_ice_fwd": 5, "hole_ice_p0": 31, "hole_ice_p1": 31, "home": [2, 23], "honda": [13, 23, 33], "honda_ip": [2, 6], "honda_spline_dict": 5, "hook": 45, "hopefulli": [3, 23], "host": 17, "hour": 23, "how": [3, 4, 5, 11, 12, 13, 21, 23, 33, 34, 36, 39, 45], "howev": [2, 4, 23, 36, 41], "howto_docu": 34, "hr_range_formatt": [2, 23], "hrbool2bool": [2, 23], "hrlist": 23, "hrlist2list": [2, 23], "hrlol": 23, "hrlol2lol": [2, 23], "hrlst": 23, "hs_fit": 24, "hs_label": 24, "html": [4, 23, 34, 36], "http": [3, 4, 5, 13, 15, 17, 22, 23, 33, 34, 36, 37, 39, 41, 44, 45], "hu": 23, "human": 23, "human_sort": 23, "hvac": 15, "hydrogen": 23, "hyper": 4, "hyper_interpol": [2, 23], "hyperparamet": 23, "hyperplanes_": 24, "hypersurfac": [2, 5, 6, 23, 31], "hypersurface_fit_kw": 24, "hypersurface_plot": [2, 23], "hypersurfaceinterpol": [23, 24], "hypersurfaceparam": [23, 24], "hypersurfacesthat": 24, "hypo": [3, 36], "hypo_asimov_dist": 3, "hypo_mak": 3, "hypo_param_select": 3, "hypo_test": 36, "hypo_testing_postprocess": 36, "hypofitresult": 3, "hypothes": 3, "hypothesi": [3, 23, 36], "hypothet": 21, "i": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45], "i3": [4, 5, 23, 29], "i3eventhead": 23, "i3hdftableservic": 5, "i3hdfwrit": 11, "i3mctre": 23, "i4": 2, "i8": 17, "ic": 23, "ic86": 23, "icecub": [3, 5, 15, 23, 29, 33, 35, 36, 39, 41], "icecube_3y_neutrinos_daemon": 33, "icecubeopensourc": 36, "icu": 19, "id": [19, 22, 23, 34, 36, 38, 39], "id_dup": [2, 23], "ida": 13, "idea": 23, "ideal": [23, 36], "ident": [4, 15, 23], "identif": [23, 35], "identifi": [4, 21, 23, 24], "identifii": 19, "idx": 4, "ie": [14, 29], "iec": 23, "ieee": 23, "ieee_floating_point": 23, "iff": 4, "ignor": [2, 4, 5, 17, 21, 23, 24], "ignore_fail": 17, "ignore_nan": [23, 24], "ignorecas": 23, "ih": 36, "ij": [15, 17], "illeg": [4, 23], "imag": [2, 26, 36, 39, 41, 44], "imaginari": 15, "img": 41, "iminuit": [3, 36], "immedi": [33, 36], "immut": [4, 23], "impact": [15, 19, 21, 23, 24], "imperfect": 23, "implement": [4, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 29, 33, 34, 35, 37, 39], "impli": [4, 23], "implicitli": 45, "import": [4, 15, 21, 23, 28, 32, 33, 34, 35, 36, 39, 41, 45], "imposs": 5, "improv": [19, 23], "imul": [2, 23], "imul_and_scal": [2, 23], "inadvert": 23, "inbound": 4, "inbounds_criteria": [2, 4], "incas": 4, "inch": [4, 23], "incl": [4, 23], "includ": [3, 4, 5, 9, 11, 15, 22, 23, 24, 26, 31, 32, 34, 35, 36, 39, 41], "include_as_r": [2, 23], "include_attrs_for_hash": [2, 4], "include_empti": 24, "include_nutau_flux": 13, "include_physical_fract": 23, "include_r": [2, 23], "inclus": [4, 13, 23], "incom": [11, 21, 26, 42], "incompat": 4, "incorpor": 4, "increas": [4, 21, 44], "increment": 3, "ind": 23, "indec": 21, "indent": [23, 27], "indeped": 15, "independ": [5, 15, 23, 24], "index": [2, 3, 4, 9, 13, 19, 21, 23, 24, 33, 36], "index2coord": [2, 4], "indexd": 4, "indexerror": 2, "indic": [2, 3, 4, 11, 12, 14, 15, 21, 23, 24, 27], "individu": [3, 4, 14, 23, 24, 34, 39], "induc": 15, "inelast": 22, "ineq_constraint": 3, "inequ": 3, "inertia": 15, "inf": [2, 4, 23, 24], "inf_thresh": 23, "infer": [2, 31], "infil": 5, "infin": [2, 4, 23], "infinit": 23, "infix": 32, "inflection_point": 3, "infmatch": 4, "info": [2, 3, 4, 23, 24, 31, 36], "infodict": 23, "inform": [3, 4, 15, 19, 22, 23, 24, 33, 34, 39], "infstr": 23, "inherit": [4, 23], "ini": 31, "inidividu": 4, "init": 4, "init_fig": [2, 23], "init_param": [2, 4], "initi": [3, 11, 21, 23, 24, 37], "initial_fit_coefft": 24, "initial_intercept": 24, "initial_weight": 11, "initialis": [11, 23], "initialize_weight": [6, 11], "inject": 39, "inlin": [2, 23], "inner": [3, 15, 37], "innermantle_density_scal": [6, 15], "innermost": 4, "input": [2, 3, 5, 9, 11, 14, 15, 17, 19, 21, 24, 28, 31, 34], "input_bin": 23, "input_data": 4, "input_fil": 24, "input_nam": 9, "insan": 4, "insensit": [4, 23], "insert": [2, 4, 21, 23], "insert_bootstrap_after_data_load": [6, 21], "insid": [3, 12, 23, 24, 35], "inspect": [4, 31], "inspirehep": 44, "insplin": 23, "inst": 23, "instal": [5, 23, 34, 36, 41], "installation_specific_exampl": 36, "instanc": [3, 15, 19, 23, 24, 45], "instanti": [2, 3, 4, 5, 8, 9, 11, 15, 22, 23, 24, 27, 32, 34, 35, 41, 45], "instati": 23, "instead": [2, 3, 4, 23, 44], "instruct": [36, 41], "instrum": 41, "int": [2, 3, 4, 5, 11, 15, 17, 21, 23, 24, 32, 44, 45], "int0": [1, 2], "int16": [1, 2], "int2hex": [2, 23], "int32": [1, 2], "int64": [1, 2], "int8": [1, 2], "int_": 2, "int_as_string_bitcount": 23, "int_rho": 7, "int_typ": [2, 23, 32], "intanti": 4, "intc": 2, "integ": [2, 3, 4, 13, 17, 23, 44], "integr": [2, 23, 33, 44, 45], "intellig": [23, 32], "intend": [24, 36], "intenum": 23, "interact": [4, 5, 15, 17, 19, 22, 23, 24, 26, 32, 34], "interaction_prob": 5, "interaction_typ": [11, 23], "intercept": 24, "intercept_bound": 24, "intercept_sigma": 24, "interdepend": 36, "interest": [4, 23, 24], "interfac": [2, 3, 4, 17, 34, 36], "intergr": 23, "interior": 15, "intermedi": [3, 36], "intern": [3, 4, 23, 24], "interoper": 45, "interp1d": 9, "interp_map": 5, "interp_nutau_xsec_protocol2": 22, "interpol": [4, 5, 12, 22, 23, 24, 33], "interpolation_param_nam": [23, 24], "interpolation_param_spec": 24, "interpret": [2, 4, 5, 15, 23, 32, 36], "interpret_data": [2, 23], "interpret_param_subfield": [2, 23], "interpret_quant": [2, 23], "interv": 4, "interven": 23, "intial": 24, "intp": 2, "intptr_t": 2, "intra": 36, "introduc": [4, 21, 23, 45], "introduct": 41, "intsep": 23, "inttyp": [2, 23, 32], "invalid": [3, 4], "invari": 15, "invers": 4, "invert": [4, 23, 35, 36], "investig": 33, "invoc": 23, "invok": [4, 34], "involv": [23, 34], "io": [3, 23, 34, 36, 41, 45], "ioerror": 23, "ip": 13, "ip_check": 5, "ipynb": 33, "ir": 2, "irregular": 4, "irrelev": [4, 36], "irreproducibli": 23, "is_bin": [2, 4], "is_bin_spacing_lin_uniform": [2, 4], "is_bin_spacing_log_uniform": [2, 4], "is_binning_ok": [2, 4], "is_compat": [2, 4], "is_descend": [6, 15], "is_discret": 4, "is_fix": 4, "is_integ": [1, 2], "is_irregular": [2, 4], "is_lin": [2, 4, 23], "is_log": [2, 4, 23], "is_map": [2, 4], "is_nomin": [2, 4], "is_particl": 23, "is_posit": [6, 15], "is_psd": [2, 23], "is_tex": [2, 23], "isbarenumer": [2, 23], "isclos": 17, "isinst": 45, "isj": 23, "isj_bandwidth": [2, 23], "isn": [4, 23], "isol": [23, 34], "isoscalar": 7, "isr": 3, "isscalar": [2, 23], "issu": [3, 4, 23, 34, 36, 41], "issubset": [2, 4], "issuperset": [2, 4], "istelf": 4, "isunitless": [2, 23], "isvalidnam": [2, 23], "it_r": [2, 23], "item": [1, 2, 4, 23], "item_sort_kei": 23, "iter": [2, 3, 4, 5, 11, 14, 23, 32, 34], "iterable_as_arrai": 23, "iterbin": [2, 4], "itercoord": [2, 4], "iterdim": [2, 4], "iteredgetupl": [2, 4], "itertool": 32, "ito": [2, 4], "itruediv": [2, 23], "its": [2, 3, 4, 5, 15, 23, 35, 36, 37, 44], "itself": [3, 4, 23, 31, 34], "ityp": [1, 2], "ix": [15, 17], "j": [2, 4, 13, 17, 23], "jacobian": 3, "jhep06": 23, "jit": [2, 17, 23], "jllanfranchi": [36, 45], "job": [24, 31], "job_idx": 24, "joblib": 36, "join": [4, 5, 23], "joined_str": [2, 4], "jone": 23, "joul": 4, "json": [1, 2, 4, 5, 12, 21, 24, 28, 31, 32], "json_array_numpi": [2, 23], "json_str": [2, 23], "jsondecod": 23, "jsonencod": 23, "juan": [13, 22, 23], "juli": 5, "jumpahead": [4, 23], "jupyt": [33, 36], "just": [3, 4, 11, 12, 17, 23, 24, 34, 36, 44], "justin": 5, "k": [2, 4, 13, 21, 23, 44], "kamiokand": 37, "kaon": 13, "kb": 23, "kde": [2, 6, 23, 24, 36], "kde_hist": [1, 2], "kde_histogramdd": [2, 23], "keep": [3, 4, 19, 21, 23, 24, 34], "keep_criteria": [4, 23], "keep_inbound": [2, 4], "keep_map": 24, "keepdim": 4, "keepeventsinbin": 4, "keepinbound": [2, 4], "kei": [1, 2, 4, 11, 12, 17, 19, 22, 23, 24, 32, 36], "ken": 23, "kept": [4, 23], "kernel": 23, "kernel_bandwidth": 23, "key11": 23, "key12": 23, "key13": 23, "key21": 23, "keyerror": [2, 4], "keyword": [2, 3, 4, 5, 17, 23, 24, 34], "kfold": [2, 6], "kg": 45, "ki": 23, "kibi": 23, "kilomet": [7, 15], "kind": [4, 5, 9, 23], "kinda": 2, "kiwisolv": 36, "km": [15, 17], "knn": 31, "knot": 4, "know": [4, 12, 23, 32, 34], "known": [23, 34], "kraus": 23, "kroes": 23, "kwarg": [3, 4, 9, 11, 15, 17, 23, 24], "l": [2, 3, 8, 15, 23, 24], "l436": 23, "l7_pidclassifier_probtrack": 11, "la": 5, "label": [2, 4, 5, 17, 23, 24, 41], "lack": 2, "lagrangian": 15, "lambda": [3, 44], "lanfranchi": 5, "laptop": 36, "larg": [2, 21, 23, 44], "largelabel": 5, "larger": 23, "largest": 4, "last": [2, 4, 35], "later": [4, 13, 14, 21, 23, 24, 36], "latest": [3, 23, 34, 36], "latex": 23, "latter": [3, 4, 14, 23, 32, 34, 39], "law": [13, 23], "layer": [2, 6, 7, 17, 37], "layout": 2, "lazi": [3, 45], "lazili": 2, "le": 36, "le_mu": 15, "le_tau": 15, "lead": [23, 34], "leaf": 23, "learn": [21, 31, 34, 36], "least": [5, 23, 24, 34, 36], "leav": [2, 12, 15, 23], "lebigot": 23, "leff": [4, 23], "left": [11, 23], "left_delimit": 23, "leftout_param": 24, "leftout_surfac": 24, "legaci": 24, "legal": 4, "legend": 23, "legend_filenam": 5, "len": [3, 4, 15, 23], "len_arrai": 15, "length": [3, 4, 13, 15, 17, 23, 24, 45], "lenient": 4, "lenth": 23, "leptonweight": 36, "less": [4, 14, 15, 23, 24, 34, 36], "let": [3, 23], "letter": 34, "level": [2, 3, 4, 15, 23, 27, 34], "level_": 26, "liber": 34, "libhdf5": 36, "librari": [4, 23, 36], "licens": 41, "licloader_weight": [2, 6, 36], "lie": 24, "lifetim": 8, "lifo": 2, "lift": 23, "like": [2, 3, 4, 5, 15, 19, 23, 24, 32, 34, 39, 45], "likelihood": [2, 4, 6, 21, 23, 29, 31, 34, 39, 44], "likelihood_funct": [1, 2], "likewis": [5, 34], "limit": [2, 4, 5, 15, 23, 44], "line": [4, 5, 23, 31, 34, 36, 45], "line1": 23, "line2": 23, "line_profil": [2, 23, 36], "linear": [4, 5, 12, 22, 24, 31], "linear_fit": 22, "linear_fit_": 22, "linearize_log_dim": 21, "linearli": [4, 23], "linearsegmentedcolormap": [5, 23], "link": [4, 12, 22, 23, 33, 34, 36], "link_contain": [2, 4], "linkag": 3, "linspac": [4, 23], "linterp": 4, "linux": [2, 36], "list": [2, 3, 4, 5, 11, 12, 19, 23, 24, 31, 32, 36, 45], "list2hrlist": [2, 23], "literal_ev": 23, "literatur": 23, "liubarska": [13, 22], "live": [3, 23, 27, 34, 35, 36], "livetim": [4, 8], "ll": [23, 34, 36], "llh": [2, 3, 4, 23, 44], "llh_alpha": 14, "llh_beta": 14, "llh_client": [1, 2], "llh_def": [2, 23], "llh_metric": [2, 23], "llh_offset": 4, "llh_per_bin": 23, "llh_per_map": [2, 4], "llh_server": [1, 2], "llh_total": [2, 4], "llh_type": 23, "llh_upsamp": 4, "llh_val": 4, "llvm": [2, 36], "llvmlite": 36, "lmean": [4, 23], "lmu_tau": 15, "load": [2, 4, 5, 11, 12, 21, 23, 24, 28, 29, 32, 33, 36], "load_2d_bartol_t": [2, 23], "load_2d_honda_t": [2, 23], "load_2d_tabl": [2, 23], "load_3d_honda_t": [2, 23], "load_3d_tabl": [2, 23], "load_and_modify_pipeline_cfg": [2, 5], "load_ev": [6, 11], "load_events_fil": [2, 4], "load_hdf5_fil": [6, 11], "load_hypersurfac": [23, 24], "load_interpolated_hypersurfac": [23, 24], "load_root_fil": [2, 23], "loader": [11, 21], "loc": 23, "local": [2, 3, 23, 36], "local__": 23, "local_fit_kwarg": 3, "local_minuit": 3, "local_nonsense_minuit": 3, "local_optim": 3, "locat": [2, 4, 5, 15, 23, 31, 35, 36], "log": [1, 2, 3, 4, 5, 24, 39, 44], "log10": [2, 4], "log10_map": 4, "log_ev": 4, "log_map": 4, "log_poisson": [2, 23], "log_smear": [2, 23], "logarithem": 44, "logarithm": [4, 5, 21, 23], "logdir": 36, "logfil": 3, "logger": 23, "logic": 23, "logist": 19, "logplot": [2, 5], "logx": 23, "logz": [4, 5], "lohfink": 15, "lol": 23, "long": [2, 4, 5, 15, 17, 23, 34], "longcomplex": 2, "longer": [21, 23], "look": [4, 11, 23, 24, 34, 39], "lookup": [2, 4], "lookup_indic": [2, 4], "loop": [2, 3, 23, 32], "looplift": 2, "loss": 3, "lost": 23, "lot": [23, 36], "low": [14, 34, 36, 41], "lower": [4, 12, 23, 24, 32, 34], "lowermost": 4, "lri": 15, "lri_param": [2, 6], "lri_pot": 17, "lri_typ": 15, "lriparam": [6, 15], "lst": [15, 23], "m": [2, 3, 4, 5, 8, 15, 23, 32, 36, 41, 45], "m0": 4, "m1": [4, 32], "m2": 32, "m_a": [2, 4], "m_chi2": 23, "m_dimens": 4, "m_pull": [4, 23], "mac": 36, "maccq": 22, "maccr": 22, "machin": [2, 4, 23, 36], "made": [2, 5, 15, 23, 33, 34], "madison": 36, "magnitud": [2, 3, 4, 5, 23, 45], "mai": [3, 4, 11, 23, 36], "main": [2, 4, 5, 14, 15, 17, 23, 24, 29], "maintain": [4, 29, 36, 39], "major": [2, 34, 36], "make": [3, 4, 5, 11, 12, 21, 23, 24, 29, 34, 36, 39, 41], "make_2d_flux_map": [6, 13], "make_delta_map": [2, 23], "make_ev": 11, "make_events_fil": [1, 2], "make_nufit_theta23_spline_prior": [1, 2], "make_prior_dict": [2, 5], "make_ratio_map": [2, 23], "make_valid_python_nam": [2, 23], "makedir": 23, "makeeventsfil": [2, 5], "maker": [3, 4, 5, 23, 35, 39], "manag": 23, "mani": [2, 3, 4, 11, 13, 23, 34, 36], "manipul": 23, "manner": 23, "mantissa": 2, "mantl": [15, 37], "manual": [4, 21, 36], "manual_test_crosssect": [2, 23], "map": [1, 2, 3, 5, 7, 14, 17, 21, 23, 24, 31, 32, 34, 35, 36, 44, 45], "map1_ev": 23, "map2_ev": 23, "map_0_hypersurfac": 24, "map_0_kei": 24, "map_kw": 4, "map_n_hypersurfac": 24, "map_n_kei": 24, "map_nam": 4, "map_set": [4, 23], "map_set_ref": 4, "map_set_test": 4, "map_x": 4, "maperror_logmsg": [2, 23], "mapset": [2, 3, 4, 5, 23, 24, 35, 44], "mapset_nam": 4, "mar": 41, "margin": [3, 4, 23], "maria": [13, 22], "marialiubarska": 22, "mark": [4, 17, 23], "mark_chang": [2, 4], "mark_valid": [2, 4], "markdown": [34, 36], "marron": 23, "mask": [2, 4, 21, 23, 24], "mask_hash": [2, 4], "mass": [7, 8, 15, 17, 35, 36], "mass_scal": [6, 15], "master": [23, 34], "mat": 2, "mat_decai": 17, "mat_dot_mat_subscr": [15, 17], "mat_pot": 17, "match": [3, 4, 12, 17, 23, 24, 35, 39], "matech": 4, "math": [5, 23, 24, 41, 44], "mathemat": [4, 23], "mathwork": 23, "matlab": 23, "matlabcentr": 23, "matplotlib": [4, 5, 23, 24, 34, 36, 41], "matric": [17, 36], "matrix": [1, 2, 15, 17, 24], "matrix_dot_matrix": [2, 23], "matrix_dot_matrix_guf": 23, "matrix_dot_vector": [2, 23], "matrix_dot_vector_guf": 23, "matter": [4, 15, 17, 21, 37], "max": [4, 5, 23], "max_abs_diff": 4, "max_abs_fractdiff": 4, "max_at": 4, "max_at_str": 4, "max_lay": [6, 15], "maxdepth": 23, "maxev": 3, "maxim": [14, 23, 36], "maximum": [4, 8, 15, 17, 23, 24], "maximumm": 15, "maxtim": 3, "mayb": [15, 23], "mb": 36, "mc": [4, 5, 14, 19, 21, 23, 24, 29, 31, 35, 36, 39, 41, 43, 44], "mc_cut": 11, "mc_histogram": [2, 23], "mc_sim_run_set": [5, 23], "mc_uncertainti": 21, "mceq": [13, 33, 36], "mceq_barr": [2, 6], "mceq_barr_r": [2, 6], "mcllh_eff": [2, 4, 23], "mcllh_mean": [2, 4, 23], "mcneutrino": 23, "mcsimrunset": [1, 2, 5], "md": [34, 41], "md5": 23, "mdb": 4, "me": 23, "mead": 3, "mean": [4, 11, 13, 14, 19, 23, 24, 31, 44], "meaning": [3, 23], "meant": [4, 23], "meanwhil": 36, "measur": [13, 23, 33, 34, 35, 39, 44], "mebi": 23, "mechan": [23, 36], "median": 19, "mediat": 15, "medlabel": 5, "meet": [2, 4], "meff": 23, "meff_report_jllanfranchi_v05_2015": 5, "member": 23, "membership": 4, "memori": [2, 23], "mention": 44, "meow": 11, "meows_load": [2, 6], "mere": 23, "merg": [4, 12, 15, 24, 36], "mesh": 24, "meshgrid": [2, 4, 11], "meson": 13, "messag": [23, 36], "met": 36, "meta": 4, "meta_eq": [2, 4], "metadata": [4, 32, 35], "metatadata": 32, "metdata": 4, "meter": [4, 5, 8, 23, 45], "meth": 41, "methd": 23, "method": [2, 3, 4, 21, 23, 24, 28, 33, 34, 35, 36, 41, 45], "method_kwarg": 3, "metric": [3, 4, 23, 34, 36], "metric_kwarg": 4, "metric_per_map": [2, 4], "metric_tot": [2, 4], "mi": 23, "micro": 23, "mid": 32, "middl": 15, "middlemantle_density_scal": [6, 15], "midpoint": [2, 4, 11], "might": [4, 23, 34, 35, 36], "mile": 45, "milli": 23, "min": [4, 5, 23, 36], "min_bandwidth": 23, "miniconda": 36, "minim": [3, 4, 11, 14, 21, 23, 24, 29, 35, 36, 39, 41], "minimis": 3, "minimiza": 24, "minimizer_set": 3, "minimizers_using_constraint": [2, 3], "minimizers_using_symm_grad": [2, 3], "minimum": [2, 4, 8, 23, 24], "minimum_mc": 24, "minimum_weight": 24, "minuit2": 36, "minut": [23, 36], "miss": [4, 29, 34], "mix": [3, 8, 15, 17], "mix_matrix": [6, 15], "mix_matrix_complex": [6, 15], "mix_matrix_reparam": [6, 15], "mix_matrix_reparam_complex": [6, 15], "mix_nubar": 17, "mix_nubar_conj_transp": 17, "mixtur": 23, "mkdir": [2, 23, 36], "mlsl": 3, "mm": 23, "mment": 4, "mod_chi2": [2, 4, 21, 23, 44], "mode": [2, 4, 23, 24, 36, 41], "model": [2, 11, 15, 22, 23, 24, 33, 37], "modelu": 36, "modif": [4, 5, 13, 23], "modifi": [2, 3, 4, 9, 11, 14, 21, 23, 35, 36, 37, 39, 44], "modul": [0, 1, 27, 34, 36], "modular": 39, "modulo": 4, "mole": 17, "molecul": 23, "moment": [4, 15, 23, 31], "monoton": 4, "mont": [4, 23, 28, 29, 35, 36, 39, 41], "more": [2, 3, 4, 5, 19, 21, 22, 23, 24, 33, 34, 35, 36, 37, 39, 45], "most": [2, 4, 23, 34, 35], "move": 2, "move_to_end": [1, 2], "mplbackend": 34, "mpmath": 36, "msgpack": 36, "mthe": 23, "mu": [7, 11, 13, 15, 23], "mu_bar": 7, "mu_weights_col": 4, "much": [4, 23], "mul": [2, 23], "multi": [3, 4, 23, 36], "multidimbin": [2, 4, 11, 23, 24], "multipl": [4, 5, 19, 23, 24, 34, 36, 39, 41], "multipli": [8, 13, 17, 23], "multithread": 23, "multpli": 15, "muon": [2, 4, 9, 15, 17, 19, 21, 29, 35], "muongun": 9, "must": [3, 4, 5, 9, 11, 12, 13, 15, 19, 21, 22, 23, 24, 31, 34, 36, 37], "mutabl": 17, "mutablemultifileiter": [2, 23], "mutablesequ": [4, 23], "mutual": [4, 23], "my": 4, "my_funct": 34, "my_map": 4, "myfil": 23, "myjit": [2, 23], "n": [3, 4, 5, 8, 17, 24, 31, 35, 36, 44, 45], "n_": 44, "n_addl_it": 23, "n_coeff": 24, "n_col": 23, "n_datapoint": 23, "n_dct": 23, "n_e": 15, "n_event": [4, 11], "n_evt": 23, "n_file": 11, "n_layer": [6, 15], "n_mc_event": 14, "n_row": 23, "n_split": 21, "n_step": 24, "name": [2, 3, 4, 5, 9, 11, 12, 17, 21, 22, 23, 24, 31, 34, 36, 37], "name1": 4, "name2": 4, "name__dim": 4, "name_val_dict": [2, 4], "namedtupl": [1, 2, 4], "namedtuple_as_object": 23, "namespac": [4, 5, 23], "nan": [2, 4, 23, 24], "nanmatch": 4, "nanstr": 23, "napoleon": 34, "nativ": [2, 36], "natur": [4, 23], "navig": 36, "nc": [2, 4, 5, 11, 15, 23, 28, 32, 34, 36], "nc_code": [2, 23], "nc_flav": [2, 23], "nc_flavint": [2, 23], "nc_only_flav": 23, "ncode": 23, "ncol": [36, 41], "ncompar": 23, "nconvert": 5, "nd": [17, 23, 24], "ndarrai": [2, 4, 15, 17, 23, 45], "ndindex": 36, "ndmin": 2, "nearest": 23, "nearestspd": 23, "nearli": 34, "necessari": [4, 15, 23, 34, 36], "necessarili": 2, "nedbatcheld": 23, "need": [2, 3, 4, 5, 11, 14, 15, 21, 23, 24, 31, 33, 36], "needless": 24, "needn": [3, 4, 23], "neg": [3, 4, 23], "neighbor": 31, "neither": [2, 4, 5, 23], "nelder": 3, "ness": 23, "nest": [2, 3, 4, 23, 32], "net": 44, "neutral": [15, 23], "neutrino": [2, 4, 5, 7, 11, 13, 15, 17, 22, 23, 26, 29, 32, 33, 34, 35, 36, 37, 39, 41], "neutrino_decai": 15, "neutron": 7, "never": [2, 23], "new": [2, 4, 5, 23, 24, 28, 32, 34, 36], "new_abv": 23, "new_bin": 4, "new_from_root": [2, 23], "new_func": 23, "new_hist": 4, "new_hist_v": 4, "new_label": 23, "new_map": [4, 23], "new_minimizer_set": 3, "new_nb_func": 23, "new_param": 4, "new_sampl": 4, "new_sum": 14, "newer": 36, "newlabel": 23, "newli": [2, 36], "next": 23, "next_color": [2, 23], "nfile": 5, "ngen": 5, "ngen_": 5, "nh": [23, 36, 37], "nice": [32, 34, 36], "nj": 17, "njit": 17, "nkg": 32, "nlopt": [3, 36], "nlopt_": 3, "nlopt_algorithm": 3, "nlopt_auglag": 3, "nlopt_g_mlsl_ld": 3, "nlopt_gn_isr": 3, "nlopt_ln_cobyla": 3, "nlopt_ln_neldermead": 3, "nlopt_ln_praxi": 3, "nlopt_set": 3, "nmo": 36, "nmo_test": 36, "node": [2, 5, 11, 23, 32, 36], "nofit_hypo": [2, 3], "nois": [2, 4], "noise_weights_col": 4, "nomial": 23, "nomin": [3, 4, 9, 11, 12, 13, 23, 24, 31, 35, 41, 45], "nominal_dataset": 24, "nominal_map": 24, "nominal_param_valu": 24, "nominal_point": 12, "nominal_set": 2, "nominal_valu": [2, 4, 23, 24, 45], "nominal_values_hash": [2, 4], "non": [4, 15, 23, 24, 34, 36, 44], "none": [2, 3, 4, 5, 11, 12, 15, 17, 21, 23, 24, 32], "nonsens": 3, "nonzero": 4, "nopython": 2, "nor": [2, 4, 5, 23], "norm": [13, 23, 24], "norm_conv_poisson": [2, 23], "normal": [2, 4, 21, 23, 29, 35, 36, 44], "normalis": [8, 9, 19, 24], "normalize_valu": [2, 4], "normalized_st": [2, 4], "normed_obj": 23, "normquant": [2, 4, 23], "notat": 23, "note": [2, 3, 4, 9, 11, 12, 13, 14, 15, 17, 21, 22, 23, 24, 31, 33, 34, 35, 36, 41, 43, 44, 45], "notebook": 33, "notimplementederror": 4, "novel": 31, "now": [3, 4, 17, 19, 23, 34, 36], "np": [2, 3, 4, 17, 19, 23, 24, 32, 45], "nromal": 44, "nsee": 23, "nserver": 23, "nsi": 15, "nsi_param": [2, 6, 36], "nsi_reparameteris": 15, "nsi_typ": [6, 15], "nsigma": 23, "nsiparam": [6, 15], "nsort": [2, 23], "nsort_key_func": [2, 23], "nt": 24, "ntest": 17, "nthe": 23, "nu": [4, 11, 23], "nu_": 32, "nu_cod": 23, "nu_code_to_pdg_map": 23, "nu_e": 23, "nu_flux_nomin": 13, "nu_mu": 32, "nu_mu_cc": 23, "nu_mutonu_mu": 41, "nu_nc_norm": 8, "nu_nubar_ratio": 13, "nu_tau": 22, "nu_to_total_fract": 23, "nu_weights_col": 4, "nuall": [5, 23], "nuall_cc": 32, "nuall_nc": [4, 23], "nuallbar": 23, "nuallbar_nc": 4, "nuallcc": 32, "nubar": [4, 7, 11, 13, 15, 17, 23], "nucl": 41, "nucleon": [7, 17, 23], "nue": [4, 5, 13, 15, 19, 23, 28, 32, 34], "nue_bar": [23, 28, 32], "nue_cc": [4, 23, 24, 34, 36, 41], "nue_cc_nuebar_cc_map": 4, "nue_cod": [2, 23], "nue_nc": 23, "nue_numu_ratio": 13, "nuebar": [4, 13, 23, 34], "nuebar_cc": [4, 34], "nuebar_cod": [2, 23], "nuecc": [23, 28], "nuenc": 23, "nufit": 5, "nuflav": [2, 23, 32], "nuflavint": [2, 4, 23, 32], "nuflavintgroup": [2, 4, 23, 32], "nuflux": 33, "nuisanc": 31, "nuissanc": 39, "null": [23, 36], "num": [13, 23], "num_bin": [2, 4, 23], "num_dim": [2, 4], "num_entri": [2, 4], "num_events_per_bin": [2, 4], "num_events_per_fil": 23, "num_fit_coefft": [23, 24], "num_fit_set": [23, 24], "num_i3_fil": 23, "num_interp_param": [23, 24], "num_sampl": 4, "numba": [2, 15, 17, 23, 36, 37, 41], "numba_boundscheck": 2, "numba_jit": [1, 2], "numba_osc_hostfunc": [6, 15], "numba_osc_kernel": [6, 15], "numba_osc_test": [6, 15], "numba_tool": [1, 2], "number": [2, 3, 4, 5, 11, 14, 15, 17, 21, 23, 24, 35, 45], "number_r": [2, 23], "number_restr": [2, 23], "numer": [3, 4, 17, 19, 23, 44], "numexpr": 36, "nummber": 44, "nump": 4, "numpi": [2, 4, 15, 17, 23, 24, 32, 34, 36, 45], "numpydecod": [2, 23], "numpyencod": [2, 23], "numu": [5, 13, 15, 19, 23, 28, 32, 34], "numu_bar": [23, 28], "numu_bar_cc": 32, "numu_cc": [4, 19, 23, 32, 36, 41], "numu_cod": [2, 23], "numu_nc": 32, "numubar": [13, 23, 32, 34], "numubar_cc": [4, 23, 32], "numubar_cod": [2, 23], "numubarcc": [5, 23, 32], "numucc": [5, 23, 32], "numuflux": 13, "nusquid": [2, 6, 36], "nutau": [5, 15, 22, 23, 28, 32, 34], "nutau_bar": [23, 28], "nutau_cc": [4, 36, 41], "nutau_cc_norm": 8, "nutau_cod": [2, 23], "nutau_mc_baselin": 5, "nutau_nc": 19, "nutau_norm": 8, "nutau_xsec": [2, 6], "nutaubar": [23, 34], "nutaubar_cc": 4, "nutaubar_cod": [2, 23], "nvalu": 23, "o": [15, 23, 24, 31, 36], "o16": 7, "o_sfx": 23, "obj": [2, 4, 23], "object": [2, 3, 4, 5, 11, 15, 23, 24, 27, 32, 36, 45], "object_hook": 23, "object_pairs_hook": 23, "observ": [23, 44], "observatori": 41, "obtain": [4, 5, 19, 23, 31, 36], "obviou": [4, 33, 34], "occur": [23, 34], "octant": 3, "od": 2, "off": [4, 15, 23, 24, 45], "offset": 23, "often": [23, 35], "ok": 4, "old": [4, 5, 13, 32, 36], "old_bin": 4, "old_sampl": 4, "older": 24, "oldfidat": 32, "omit": [4, 23, 34, 36], "omp_num_thread": [1, 2], "onc": [3, 11, 14, 21, 24, 31, 45], "one": [2, 3, 4, 5, 7, 13, 14, 15, 17, 21, 23, 24, 32, 33, 34, 35, 36, 37, 39, 45], "one_weight": [5, 23], "onedimbin": [2, 4, 23], "ones": [2, 4, 15, 23, 31, 34, 42], "ones_lik": 2, "onli": [2, 3, 4, 5, 9, 15, 17, 21, 23, 24, 29, 31, 33, 34, 35, 36, 39], "only_point": 3, "onto": [4, 5], "op": [2, 23], "open": [22, 23, 36], "open_resourc": [2, 23], "openmp": [2, 36], "opensciencegrid": 36, "oper": [4, 23, 41, 45], "oppo": 4, "oppos": 23, "opposit": 4, "optim": [3, 4, 23, 24], "option": [2, 3, 4, 5, 7, 12, 17, 21, 23, 24, 34, 36], "optionstr": 23, "optionxform": [2, 23], "order": [2, 3, 4, 5, 12, 14, 21, 23, 24, 35, 36, 45], "order_of_mag_to_si_prefix": [2, 23], "order_str": [2, 23], "ordereddict": [1, 2, 3, 4, 5, 17, 21, 23, 24, 32], "ordinari": 45, "org": [4, 13, 22, 23, 33, 34, 36, 41, 45], "orient": [4, 34], "orig_bin": 4, "orig_map": 4, "origin": [2, 4, 15, 17, 21, 23, 37, 39, 41], "originali": 23, "os_arch": 36, "osc": [2, 4, 5, 6, 35, 36], "osc_exampl": [36, 41], "osc_param": [2, 6], "osc_prob": 17, "osc_probs_layers_kernel": [15, 17], "oscfit": [13, 23], "oscil": [3, 4, 7, 15, 17, 29, 31, 35, 36, 37, 41], "oscillogram": [36, 41], "oscnext": 29, "oscnext_genie_0151": 31, "oscnext_ultrasurfac": 31, "oscparam": [6, 15], "osg": 36, "other": [2, 3, 4, 5, 9, 15, 23, 24, 34, 35, 36, 37, 39, 41], "other_metr": 3, "otherwis": [2, 3, 4, 15, 21, 23, 36], "othewis": 24, "our": [23, 36, 41, 44], "out": [2, 3, 4, 5, 7, 11, 12, 13, 15, 21, 22, 23, 24, 34, 44], "outbuf": 23, "outcom": [14, 34], "outdir": [4, 5, 23, 36], "outer": [3, 4, 15, 37], "outfil": [3, 31], "outlin": 23, "outpub": 4, "output": [3, 4, 5, 11, 12, 15, 17, 21, 23, 24, 31, 34, 35, 36, 41], "output_bin": [4, 23], "output_data": 4, "output_dir": 24, "output_directori": 24, "output_field": 5, "output_fil": 24, "output_kei": [4, 23], "output_nam": 11, "outsid": [4, 12, 23, 24], "over": [3, 4, 5, 11, 15, 21, 23, 24, 32, 37, 44], "overal": [3, 8, 15, 24], "overflow": 4, "overflowerror": 2, "overhead": 23, "overlai": 34, "overlaid": 5, "overrid": [2, 4, 21, 23], "overridden": 23, "oversampl": [2, 4, 5, 21, 23], "oversmapl": 4, "overwrit": [5, 23], "overwritten": 23, "own": [3, 23, 35, 36, 39], "oxygen": 23, "p": [2, 4, 13, 23, 31, 36, 44], "p1": 23, "p2": 23, "p_": 41, "pablo": [13, 22, 23], "pack": 36, "packag": [0, 1, 33, 36, 45], "page": [33, 34, 36], "pain": [23, 24], "pair": [2, 4, 23, 24], "panda": 36, "paper": [13, 22, 23, 44], "par": 23, "par1": 23, "par2": 23, "parallel": 36, "param": [1, 2, 3, 5, 8, 9, 11, 12, 13, 15, 18, 19, 21, 22, 24, 31, 34, 36, 37], "param1": [4, 24], "param2": [4, 24], "param_0_nam": 24, "param_0_nom_v": 24, "param_0_sys_val_0": 24, "param_0_sys_val_m": 24, "param_0_value_in_dataset": 24, "param_kw": 24, "param_n_nam": 24, "param_n_nom_v": 24, "param_n_sys_val_0": 24, "param_n_sys_val_m": 24, "param_n_value_in_dataset": 24, "param_nam": [3, 23, 24], "param_select": [2, 4, 23], "param_set": 4, "param_upsamp": 4, "param_v": 4, "param_valu": 24, "paramet": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 31, 34, 35, 37, 39, 44, 45], "parameter": [12, 15, 19, 23, 31, 35, 39, 41], "parameter_nam": 12, "parameteris": [12, 13, 15, 19, 24], "parametr": 31, "parametris": 19, "paramn": 24, "paramselector": [2, 4], "paramset": [2, 3, 4, 8, 9, 12, 13, 15, 19, 22, 24], "parent": [4, 5], "parent_index": 4, "parenthes": 23, "pariti": 32, "pars": [4, 5, 21, 23, 24], "parse_arg": [2, 4, 5], "parse_const": 23, "parse_fit_config": [2, 5], "parse_float": 23, "parse_func": 23, "parse_int": 23, "parse_param": [2, 23], "parse_pipeline_config": [2, 4, 21, 23], "parse_quant": [2, 23], "parse_string_liter": [2, 23], "parser": 23, "part": [15, 23, 24, 34, 35], "part_cod": [2, 23], "partial": [23, 35], "particl": [2, 13, 19, 23, 32, 33, 34, 35, 38], "particle_kei": 19, "particular": [3, 4, 8, 21, 23, 24, 32, 35, 39, 41], "particularli": [23, 36], "partner": 15, "pass": [2, 3, 4, 11, 17, 23, 24, 31, 34, 35], "pass_if": 23, "password": 36, "past": 23, "path": [4, 5, 7, 9, 11, 12, 15, 21, 22, 23, 24, 31, 36], "path_to_fridg": 36, "path_to_pisa": 36, "pathspec": 23, "pattern": 5, "paus": 23, "payload": 23, "pckl": 22, "pcmesh": [4, 23], "pcolormesh": 4, "pcolormesh_kw": 4, "pdf": [4, 5, 22, 23, 34, 36, 41, 44], "pdg": 23, "peak": 11, "penal": 23, "penalti": [3, 4, 23, 34, 44, 45], "pend": 2, "pep": 34, "pep257": 34, "pep8": 34, "per": [3, 4, 7, 9, 11, 13, 14, 15, 17, 21, 23, 24, 31, 34, 35], "perfect": [4, 19, 23], "perfect_reco": 19, "perform": [2, 3, 4, 5, 18, 23, 24, 34, 39, 41, 45], "performend": 24, "period": [4, 23], "permiss": [23, 32, 33], "permut": 3, "peroid": 23, "persist": 4, "person": 35, "pertain": 4, "pertin": [32, 34], "phase": [3, 13, 15], "phi12": [6, 15], "phi13": [6, 15], "phi23": [6, 15], "philipp": 13, "photosplin": 36, "php": 33, "phy": [17, 37], "physic": [3, 4, 15, 19, 21, 23, 34, 35, 43], "physica": 23, "physical_events_fract": 23, "pi": [4, 7, 8, 11, 12, 13, 15, 21, 23, 36], "pi_earth_absorpt": 36, "pick": [23, 34], "pickl": [13, 22, 23], "pid": [2, 4, 5, 6, 11, 12, 19, 23, 29, 34, 35, 43], "pid_improv": 19, "pid_track_param": 19, "pidx": [2, 23], "piecewis": 24, "pii": [15, 37], "pillow": 36, "pilot": 23, "pingu": [3, 4, 5, 23, 35], "pingu_v39": 36, "pingusimulationchain": 39, "pint": [2, 4, 5, 23, 36, 45], "pion": 13, "pion_ratio": 13, "pip": [36, 41], "pipelin": [1, 2, 3, 5, 11, 15, 21, 23, 24, 29, 31, 33, 34, 35, 36, 37, 39, 41], "pipeline_cfg": [2, 24], "pipeline_cfg_from_st": [23, 24], "pipeline_cfg_path": 5, "pipeline_class": 2, "pipeline_output": 36, "piplein": 41, "piplelin": 24, "piplin": [4, 36], "pisa": [27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 41, 43, 44, 45], "pisa2_map": 23, "pisa2_map_to_pisa3_map": [2, 23], "pisa4_logo_transpar": 41, "pisa_cach": 36, "pisa_env": 36, "pisa_exampl": [5, 22, 23, 33, 35], "pisa_feath": 31, "pisa_ftyp": [4, 36], "pisa_hdf5": 31, "pisa_num_thread": [1, 2], "pisa_resourc": [23, 35, 36], "pisa_test": 36, "pisa_to_feath": 31, "pisaconfigpars": [2, 4, 5, 23], "pivot": 13, "pkg_resourc": 23, "place": [3, 4, 5, 11, 21, 24, 36], "placehold": 19, "plain": [2, 4], "plan": 41, "plane": 23, "planetari": 15, "plateau": 19, "platform": 2, "pleas": [17, 23, 33, 36, 41], "plot": [2, 4, 5, 13, 23, 24, 28, 31, 32, 34, 36, 41], "plot_1d_al": [2, 23], "plot_1d_arrai": [2, 23], "plot_1d_cmp": [2, 23], "plot_1d_project": [2, 23], "plot_1d_ratio": [2, 23], "plot_1d_singl": [2, 23], "plot_1d_slic": [2, 5], "plot_1d_slices_arrai": [2, 23], "plot_1d_stack": [2, 23], "plot_2d_arrai": [2, 23], "plot_2d_map": [2, 23], "plot_2d_singl": [2, 23], "plot_arrai": [2, 23], "plot_axi": 23, "plot_bin_fit": [23, 24], "plot_bin_fits_2d": [23, 24], "plot_cmp": [2, 23], "plot_comparison": [2, 23], "plot_fits_in_bin": [23, 24], "plot_hypersurface_fit": 5, "plot_label": 23, "plot_map_comparison": [2, 23], "plot_xsec": [2, 23], "plotter": [1, 2, 24], "plt": [36, 41], "plt_sfx": 23, "plu": [15, 24, 36], "plugin": 36, "pmn": [15, 17], "pname": 23, "png": [4, 5, 23, 26, 36, 39, 41, 44], "poggi": 23, "point": [2, 3, 4, 5, 11, 13, 21, 23, 24, 31, 36], "pointer": 2, "poisson": [2, 4, 14, 23, 39, 44], "poisson_gamma": [2, 23], "poisson_gamma_mixtur": [2, 23], "poisson_pdf": 44, "poissonllh": [2, 23], "poissson": 23, "pole": 23, "poli": 31, "polynomi": [12, 23], "pop": [1, 2, 4], "popcount": 2, "popitem": [1, 2], "popul": [3, 4, 14, 17, 23], "populate_global_namespac": [2, 23], "port": 23, "portion": 23, "posit": [2, 3, 4, 5, 15, 23, 33, 34], "possibl": [3, 4, 11, 15, 23, 33, 34, 39], "possibli": [4, 23], "post": [21, 23], "post_fix": 11, "poster": 23, "potenti": [15, 17, 23], "potential_matrix_emu": [6, 15], "potential_matrix_etau": [6, 15], "potential_matrix_mutau": [6, 15], "pow": [2, 23], "powel": 23, "power": [13, 19, 23], "power_of_1024_to_bin_prefix": [2, 23], "powerlawintegr": [2, 5], "powerord": 23, "pp": 15, "pprint": [3, 36], "pr": 41, "praxi": 3, "pre": [2, 4, 7, 12, 13, 14, 22, 24, 36], "precalcul": 13, "preced": 23, "preceed": 23, "precend": 23, "precis": [2, 4, 23, 36, 41], "predetermin": 21, "preent": 5, "prefer": [4, 23, 36], "prefix": [4, 23], "preliminari": [15, 23, 37], "prem": [7, 15, 17, 37], "prem_fil": 15, "prep": 21, "prepar": 31, "prepare_interpolated_fit": [23, 24], "prepend": 23, "prescal": 23, "prescrib": 23, "presenc": [11, 15], "present": [2, 4, 5, 11, 15, 17, 21, 23], "preserv": [2, 4, 15, 33], "pretti": 23, "prevent": [3, 4, 24], "previou": 23, "primari": 23, "princip": 24, "principl": [23, 34], "print": [4, 23, 32, 41], "print_agr": [2, 23], "print_event_r": [2, 23], "printresult": [2, 23], "printresultssort": [2, 23], "prior": [1, 2, 3, 5, 13, 23, 24, 34, 35, 36, 44], "prior_chi2": [2, 4], "prior_llh": [2, 4], "prior_penalti": [2, 4], "priors_chi2": [2, 4], "priors_llh": [2, 4], "priors_penalti": [2, 4], "privat": [5, 23], "privileg": 36, "prob3": [2, 6, 17, 23, 37], "prob3_cod": [2, 23], "prob3numba": [6, 15], "prob_": 15, "prob_mu": [15, 36, 41], "prob_tau": 15, "probabilist": 4, "probabl": [4, 5, 7, 15, 17, 23, 31, 34, 36, 37, 41], "problem": 23, "proc_ver": [4, 5, 23, 32], "procedur": 23, "process": [3, 4, 5, 23, 34, 35, 36, 39], "produc": [2, 3, 4, 5, 12, 15, 19, 21, 22, 23, 24, 31, 33, 34, 35, 39, 41], "product": [3, 4, 7, 13, 15, 17, 23, 26, 32, 36, 44], "profil": [1, 2, 3, 4, 36], "progenitor": 4, "progress": 3, "project": [2, 4, 5, 23, 33, 36, 39], "project_1d": [2, 23], "promot": 23, "prone": 23, "prop_height": [7, 15], "propag": [4, 12, 15, 23, 34, 36, 37, 45], "propagate_uncertainti": 12, "proper": [4, 8, 36], "properti": [3, 4, 11, 15, 23, 24, 35, 39], "propos": 23, "protocol": 2, "proton": 7, "prove": 34, "proven": [3, 4], "provid": [2, 3, 4, 14, 15, 19, 23, 24, 29, 34, 36, 45], "pseudo": [3, 4, 14, 34, 39], "psu": 5, "pu": 5, "public": [17, 24, 37, 41], "publicli": 37, "publish": 41, "pull": [5, 23, 24, 34, 36, 41], "pull_method": [1, 2], "pure": 12, "purpos": [4, 18, 23, 26, 33, 34, 35, 37, 38, 42], "push": 36, "put": [23, 34, 39], "py": [4, 5, 12, 13, 15, 17, 23, 28, 31, 32, 34, 35, 36, 44, 45], "py3": 36, "pyarrow": 36, "pyc": 36, "pydata": 36, "pyhon": 33, "pylint": [34, 36], "pylintrc": 36, "pyobject": 2, "pypa": 36, "pypars": 36, "pypi": 36, "pyplot": [4, 23, 36, 41], "pyroot": 36, "pytabl": 36, "pytest": 34, "python": [2, 4, 5, 23, 28, 31, 32, 34, 35, 36, 37, 41, 45], "python3": [15, 36], "pythonhost": [36, 45], "pythonpackag": 41, "pythonpath": 36, "pytz": 36, "pyx": 36, "q": 45, "q0": [23, 45], "q1": [23, 45], "q2": 23, "q2_norm": 23, "q3": 23, "q3_norm": 23, "q_": [1, 2, 45], "qauntiti": 23, "quad": 23, "quad_fit": 22, "quad_fit_": 22, "quadmesh": 4, "quadrant": 3, "quadrat": 22, "quadratur": 23, "quanitii": 21, "quant": 23, "quant0": 45, "quant1": 45, "quantiti": [2, 4, 5, 7, 8, 9, 11, 13, 14, 15, 19, 21, 22, 23, 24, 34, 35, 45], "quark": 15, "query_databas": [6, 11], "question": [23, 39], "quick": [33, 34, 36, 37, 41], "quickstart": 36, "quirk": 45, "quit": [23, 34, 36], "quot": 5, "quotat": 23, "r": [4, 23, 24, 32], "r_detector": 15, "r_i": 15, "rad": [15, 23], "radial": 15, "radian": 23, "radii": [15, 37], "radiu": 15, "rais": [2, 3, 4, 17, 23], "raison": 34, "rand": 23, "random": [2, 4, 11, 19, 21, 23, 34, 39], "random_numb": [1, 2, 4], "random_st": [4, 19, 23, 24], "randomize_fre": [2, 4], "randomize_free_param": [2, 4], "randomli": 24, "randomst": [4, 19, 23], "rang": [2, 3, 4, 11, 15, 17, 21, 22, 23, 24, 33, 34, 39], "rate": [4, 21, 23], "rather": [4, 15, 17, 23, 34, 41], "ratio": [2, 13, 23, 34], "raw": [4, 23, 24, 45], "raw22": [17, 37], "rawconfigpars": [5, 23], "rdylbu_r": [36, 41], "re": [3, 4, 5, 8, 11, 21, 23, 24, 31, 34, 36, 37], "re_weight_hnl": [6, 8], "reach": 35, "read": [2, 4, 5, 23, 24, 34, 36], "read_it": [2, 23], "readabl": 23, "reader": 23, "readi": 31, "readm": [34, 41], "readme_10_0": 41, "readme_fil": 41, "readthedoc": [3, 34, 36, 45], "real": [2, 15, 17, 19], "realist": 37, "realli": [13, 24, 32], "rearrang": 4, "reason": [2, 4, 21, 23, 34, 44], "reattach": 23, "rebin": [2, 4], "rebuild": 36, "recalcul": [17, 23], "receiv": 23, "receive_obj": [2, 23], "recip": 36, "reco": [2, 4, 5, 6, 11, 21, 35], "reco_coszen": [4, 5, 12, 19, 21, 23], "reco_coszen_param": 19, "reco_energi": [4, 5, 12, 19, 23], "reco_energy_param": 19, "reco_zenith": 23, "recogn": [4, 23, 32], "recomend": 31, "recommend": [2, 4, 23, 24, 34, 36], "recommonmark": [34, 36], "recompil": 36, "recomput": 4, "reconstruct": [4, 5, 11, 19, 35, 38, 39, 42], "record": [5, 23, 44], "record_event_properti": [6, 11], "recosntruct": 19, "recov": 24, "rectangular": 4, "rectilinear": 24, "recuir": 36, "recurs": [3, 4, 23, 32], "recursiveallclos": [2, 23], "recursiveequ": [2, 17, 23, 32], "redefin": [4, 5], "reduc": [4, 13, 24], "reducetohist": [2, 4], "redund": [4, 23], "ref": [4, 5, 17, 23], "ref_ab": 5, "ref_abv": 23, "ref_bin_idx": 24, "ref_label": [5, 23], "ref_map": 23, "ref_param": 5, "ref_param_select": 5, "ref_path": 17, "refactor": 23, "refer": [0, 2, 4, 5, 15, 19, 23, 24, 34, 36, 37], "referenc": [5, 23], "reflction": 23, "reflect": [4, 21, 23, 35, 39], "reflect_dim": 23, "reflect_fract": 23, "regardless": [4, 23], "regeistri": 2, "regex": [4, 5, 23, 24], "region": 13, "registri": [2, 23, 45], "regluar": 4, "regular": [2, 4, 5, 23, 24, 36], "regular_param": 4, "regulargridinterpol": 24, "regularli": 29, "rehash": [2, 4], "reinstal": 36, "reject": 23, "rel": [4, 11, 13, 15, 23], "relat": 2, "releas": 24, "relev": [4, 5, 23, 24, 33], "reli": [36, 37], "reliabl": [22, 23], "remain": [4, 5, 23, 24, 36], "remaining_ev": 4, "rememb": 2, "remov": [2, 4, 5, 23, 32, 36], "remove_option_r": [2, 5], "removeallprior": [2, 23], "removeparamet": [2, 23], "renam": [2, 4, 23], "renameparamet": [2, 23], "render": 41, "renorm": 21, "reorder": 4, "reorder_dimens": [2, 4], "reordr": 4, "reparam_mix_matrix": [6, 15], "reparameter": 15, "reparameteris": 15, "repeat": [23, 34, 39], "reperesent": 23, "repes": 19, "replac": [2, 4, 21, 23, 36, 44], "replace_where_counts_gt": [2, 23], "repo": [36, 41], "report": [3, 23, 24], "report_profil": [2, 4], "repositori": [5, 36], "repres": [4, 5, 11, 13, 15, 21, 23, 24, 34, 35, 36, 44], "represent": [2, 4, 15, 23, 33], "representation_kei": [2, 4], "reproduc": [4, 5, 19, 23], "request": [2, 12, 23, 24, 34, 36, 41], "requir": [2, 3, 4, 5, 12, 13, 19, 22, 23, 24, 33, 34, 35, 36], "required_metadata": [4, 11], "resampl": [2, 4, 6, 23], "resamplemod": [6, 21], "rescal": 4, "reserv": 34, "reset": [2, 3, 4, 11, 23], "reset_al": [2, 4], "reset_color": [2, 23], "reset_fre": [2, 3, 4], "reshap": 4, "resolut": [2, 6, 35, 42], "resolv": 23, "resolve_symlink": 23, "resourc": [1, 2, 4, 5, 22, 24, 33, 35], "resource2": 23, "resource_loc": 23, "resource_stream": 23, "respect": [3, 4, 15, 23, 37], "rest": [19, 23, 34], "restrict": 23, "restricturedtext": 34, "result": [2, 3, 4, 5, 7, 12, 19, 21, 23, 24, 26, 31, 32, 34, 36, 39, 41, 44], "ret_dict": 17, "retriev": [3, 4, 17, 23, 28, 32, 36], "retrieve_express": [2, 23], "retrieve_node_data": [2, 23], "retro": 31, "return": [2, 3, 5, 7, 8, 11, 12, 15, 17, 19, 21, 24, 28], "return_dist": 23, "return_field": 23, "return_mapset": [2, 23], "return_nod": 23, "return_output": 4, "return_sum": 4, "return_t": 23, "return_uncertainti": 24, "reus": 23, "revers": [23, 43], "revert": 4, "review": 36, "revisit": 4, "reweight": [33, 35, 39, 41, 43], "rhel_7_x86_64": 36, "rho": [15, 17], "rho_arrai": 15, "right": [4, 11, 17, 23], "right_delimit": 23, "rik": 23, "rise": 19, "risk": 12, "rm": [4, 32], "roger": 17, "root": [2, 4, 7, 23, 31, 36], "roounfold": 36, "rotat": [4, 19], "roughli": 23, "round": [2, 4, 23], "round2int": [2, 4], "routin": [3, 36], "row": 2, "rslt": 17, "rst": 34, "rtol": [17, 23], "rught": 19, "rule": [23, 34], "run": [2, 3, 4, 5, 11, 14, 17, 23, 24, 29, 31, 32, 34, 36, 41], "run_interpolated_fit": [23, 24], "run_set": [5, 23], "run_test_cas": [15, 17], "runner": 2, "rw": 23, "s_and_end": 23, "sai": [3, 23, 24, 34, 36], "said": 34, "sake": 44, "same": [2, 3, 4, 5, 7, 15, 23, 24, 29, 34, 44, 45], "sampl": [4, 8, 21, 23, 28, 31], "san": 45, "sandbox": [23, 39], "sanit": 23, "saniti": 5, "sash": 34, "satisfi": [2, 3], "savabl": [4, 24], "save": [2, 4, 5, 13, 23, 24, 31, 32], "save_mask": 21, "save_nam": 5, "savefig": 23, "savefil": [2, 23], "sayin": 44, "sbudir": 23, "scalar": [2, 3, 4, 7, 13, 15, 17, 23, 24], "scale": [4, 6, 8, 13, 15, 18, 19, 21, 22, 23], "scale_error": 21, "scale_fil": 21, "scale_map": [2, 23], "scaled_poisson": 4, "scales_as_log": 4, "scales_log": 24, "scaling_arrai": [6, 15], "scaling_factor_arrai": [6, 15], "scaling_param": [2, 6], "scan": [2, 3, 27], "scan_onc": 23, "scatter": 15, "sceptic": 3, "scheme": [3, 4, 13, 34], "schneider": 23, "schoenen": 23, "sci": 23, "sci_thresh": 23, "scienc": [15, 36, 37], "sciencedirect": [15, 37], "scientif": 23, "scikit": [21, 31, 36], "scipi": [3, 4, 9, 24, 34, 36], "scm": 36, "scope": [23, 34], "scott": [21, 23], "scrambl": 23, "script": [1, 2, 4, 12, 13, 17, 23, 31, 36], "sction": 23, "seaborn": 23, "search": [3, 23], "sebastian": 23, "sec_decim": 23, "second": [3, 4, 8, 12, 15, 23, 31, 33, 45], "sectcr": [2, 23], "section": [2, 7, 22, 23, 24, 28, 31, 33, 34, 36, 37], "section1": 23, "section2": 23, "section_nam": 23, "section_name2": 23, "secton": 23, "secur": 36, "see": [2, 3, 4, 5, 11, 17, 19, 21, 23, 24, 31, 33, 34, 35, 36, 37, 39, 41, 45], "seed": [4, 11, 21, 23], "seem": 36, "seen": [34, 36], "segfault": 2, "select": [3, 4, 5, 11, 21, 23, 26, 29, 36], "select_param": [2, 4], "select_split": 21, "selector": [2, 3, 4], "selector1": 23, "selector2": 23, "selector_param_set": 4, "self": [3, 4, 11], "semi": 23, "semicolon": [5, 23], "semidefinit": 23, "send": [4, 22, 23], "send_obj": [2, 23], "sens": [15, 23, 24], "sensibl": 23, "sensit": [23, 39], "sent": [4, 23], "sep": 23, "sep_three_ten": [2, 23], "separ": [3, 4, 5, 15, 17, 23, 31, 34, 35, 39], "sepcif": 23, "seq": [4, 23], "seq0": 3, "seq1": 3, "sequenc": [2, 3, 4, 5, 8, 15, 22, 23, 35], "sequenti": 23, "seri": 23, "serial": [4, 23, 24], "serializ": 23, "serializable_st": [2, 4, 23, 24], "serialize_pipeline_cfg": [23, 24], "seriial": 23, "serv": [2, 11, 23, 34], "server": [23, 34, 36], "servic": [4, 5, 7, 8, 9, 11, 12, 13, 15, 18, 19, 21, 22, 23, 29, 31, 33, 34, 35, 36, 37], "service_nam": [2, 4, 23], "servicea": 23, "serviceb": 23, "servicenam": 23, "set": [2, 3, 4, 5, 11, 12, 15, 17, 21, 23, 24, 29, 31, 32, 33, 35, 36, 37, 39, 41], "set_aux_data": [2, 4], "set_bar_ssep": [2, 23], "set_const": [6, 21], "set_data": [2, 23], "set_error": [2, 4, 45], "set_free_param": [2, 4], "set_livetime_from_data": 4, "set_mc": [2, 23], "set_minimizer_default": [2, 3], "set_nominal_by_current_valu": [2, 4], "set_nominal_to_current_valu": [2, 4], "set_option_r": [2, 5], "set_poisson_error": [2, 4, 45], "set_stat": 23, "set_unweight": [2, 23], "set_valu": [2, 4], "set_vari": [2, 6], "set_verbos": [2, 23], "set_vers": [2, 23], "setdefault": [1, 2], "setelecfrac": [6, 15], "setion": 23, "setlabel": [2, 23], "setprior": [2, 23], "setup": [2, 4, 5, 11, 13, 14, 18, 36], "setup_fridg": 36, "setup_funct": [2, 4, 6, 7, 9, 11, 12, 13, 14, 15, 18, 19, 21, 22], "setuptool": 36, "sever": [4, 23, 29, 33, 35, 39], "sh": 36, "shallow": 2, "shape": [2, 3, 4, 15, 23], "share": [4, 23, 36], "shared_param": 4, "shared_param_ind_list": [2, 4], "sharmistha": 15, "sharp": 23, "she": 39, "sheather": 23, "shell": [4, 5, 23, 35, 36, 41], "shield": 41, "shift": [13, 18, 19], "shift_scale_pid": [2, 6], "short": [2, 23], "shortcut": [2, 4], "shorttitl": 23, "should": [2, 3, 4, 5, 9, 12, 15, 23, 24, 33, 34, 36, 44], "show": [3, 5, 23, 34, 36, 39], "show_nomin": 24, "show_offaxi": 24, "show_onaxi": 24, "show_uncertainti": 24, "show_zero": 24, "shown": 36, "shuffl": 21, "si": 23, "si_prefix_to_order_of_mag": [2, 23], "side": [3, 23, 34], "sigfig": 23, "sigma": [11, 23, 24, 44], "sigma_i": 23, "sign": [2, 3, 4, 17, 23, 24, 36], "sign_alwai": 23, "signal": [11, 29, 41], "signatur": [2, 23, 34], "signature_or_funct": 2, "signed_sqrt_mod_chi2": [2, 4, 23], "signedinteg": 2, "signific": [2, 4, 23, 36, 39], "significand": 23, "significantli": 36, "silli": 3, "silverman": [21, 23], "sim_spectral_index": 23, "sim_weight": 5, "similar": [2, 4, 21, 23, 24], "similarli": [13, 23], "simpl": [3, 4, 5, 11, 19, 23, 29, 33, 34, 36, 44], "simple_data_load": [2, 5, 6, 21, 29], "simple_param": [2, 6], "simple_pid_parameter": [6, 19], "simple_reco_coszen_parameter": [6, 19], "simple_reco_energy_parameter": [6, 19], "simple_sign": [2, 6], "simple_str": [2, 23], "simple_tex": [2, 23], "simplejson": 36, "simpler": 23, "simplest": 23, "simpli": [4, 5, 12, 23, 26], "simplifi": [4, 5, 23], "simplist": 23, "simul": [3, 5, 23, 24, 28, 35, 41], "simultan": [4, 15, 24, 36], "sin": [2, 15, 23], "sin12": [6, 15], "sin13": [6, 15], "sin14": [6, 15], "sin23": [6, 15], "sinc": [4, 17, 23, 33, 34, 36, 37], "sine": 15, "sing": 23, "singl": [2, 3, 4, 5, 15, 17, 23, 24, 32, 34, 35, 36, 41], "singlecomplex": 2, "singlethread": 23, "singleton": [4, 23], "sinxi": 15, "sipr": 23, "site": 2, "situat": [34, 41], "six": 36, "size": [2, 4, 15, 21, 23, 24], "skew": 23, "skip": 23, "skip_success": 24, "skipkei": 23, "sklearn": 31, "sky": 23, "sl": 4, "slash": 23, "slice": [2, 4, 5, 23, 24], "slice_smooth": 35, "sliced_bin": 4, "slices_arrai": [2, 23], "slightli": [4, 23], "slope": 24, "slow": [2, 23], "slower": [4, 33], "slowli": 23, "slsqp": [3, 36], "small": [11, 14, 23, 24, 37, 41], "small_po": [2, 23], "smaller": [23, 36], "smaller_bin": 4, "smallest": 4, "smart": [4, 23], "smear": [19, 23, 44], "smooth": [4, 23, 31], "smooth_factor": 23, "smooth_kw": 24, "smooth_method": 24, "so": [2, 3, 4, 5, 13, 17, 23, 26, 34, 36, 45], "social": 41, "sock": 23, "socket": 23, "softwar": [34, 39, 41], "sole": 4, "solmax": 23, "solmin": [4, 32], "solut": [13, 37], "solv": 15, "some": [2, 3, 4, 11, 12, 14, 23, 24, 29, 31, 33, 34, 36, 41], "somebodi": 23, "someon": 4, "somesuch": 23, "someth": [4, 23, 24, 36], "sometim": [23, 36], "somewhat": 23, "somewher": 21, "soon": 22, "sorri": 11, "sort": [4, 23], "sort_kei": 23, "sortbyparam": [2, 23], "sorted_l": 23, "sought": [4, 23], "sourc": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 32, 36, 37], "source_code_hash": [2, 4], "sourcecod": 36, "south": 23, "space": [4, 12, 13, 15, 23, 24], "span": [4, 24], "spcifi": 23, "spec": [4, 5, 21, 23, 32], "specfi": 5, "speci": 24, "special": [2, 3, 4, 11, 21, 23, 24, 31], "specif": [3, 4, 5, 8, 11, 23, 24, 34, 36], "specifi": [2, 3, 4, 11, 15, 17, 22, 23, 24, 31, 34, 36], "specifii": 23, "spectral": [9, 13, 23], "spectral_index_scal": [6, 13], "spectrum": 23, "speed": [4, 21, 23], "spent": 23, "sphere": 15, "sphinx": [34, 36], "sphinxcontrib": 34, "spicfi": 4, "spl": [4, 23, 32], "splev": 4, "spline": [1, 2, 4, 5, 9, 13, 33], "spline_bin": 23, "spline_dict": [5, 23], "spline_smooth": [1, 2], "split": [2, 3, 4, 15, 17, 21, 23], "split_map": 4, "split_nu_events_by_flavor_and_interact": [2, 4], "splrep": 4, "sprinkl": [3, 34], "spyder": 34, "sqlite": 11, "sqlite_load": [2, 6], "sqrt": [2, 4, 5, 15, 23, 44], "sqrt_map": 4, "squar": [4, 5, 8, 15, 23, 39, 44], "squash": 34, "squeez": [2, 4], "src": [36, 41], "src_represent": 4, "sre_match": 23, "sre_pattern": 23, "ss": 23, "ssh": 36, "stabil": 17, "stability_test": [15, 17], "stabl": 36, "stack": [3, 11, 23], "stack_pid": [21, 23], "stackoverflow": 23, "stage": [1, 2, 3, 5, 23, 26, 28, 29, 31, 33, 34, 35, 36, 37, 38, 39, 42], "stage_dict": 23, "stage_id": 4, "stage_nam": [2, 4, 23], "stage_test": 34, "stagea": 23, "stageb": 23, "stagenam": 23, "stai": [3, 23], "stamp": 23, "stand": 23, "standalon": [23, 34], "standard": [3, 4, 5, 15, 17, 23, 32, 37, 45], "standin": 23, "star": 41, "start": [3, 5, 13, 23, 24, 32, 34, 36, 41], "stash": 21, "stash_hist": 21, "stat": [1, 2, 4, 44], "state": [2, 4, 19, 23, 24, 34], "state_dict": 24, "statement": [23, 34], "static": [4, 11, 23, 34, 36], "statist": [4, 11, 21, 23, 24, 36, 41, 44], "statu": 41, "std_dev": [2, 4, 23, 45], "std_karg": 21, "std_kwarg": [7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 21, 22], "stddev": 4, "stdnsiparam": [6, 15], "steep": 19, "steer": [9, 24], "step": [3, 11, 14, 23, 24, 31, 35, 44], "steril": [3, 15], "still": [2, 3, 14, 23, 32, 36], "stop": [3, 23], "stopval": 3, "storag": 23, "store": [2, 3, 4, 5, 7, 11, 12, 15, 21, 23, 24, 28, 31, 32, 36], "storehaug": 13, "str": [2, 3, 4, 5, 7, 9, 11, 12, 13, 15, 17, 21, 23, 24, 32], "straightforward": 23, "strategi": [3, 12, 14], "stream": 23, "strength": 15, "strict": [4, 23], "strike": 3, "string": [2, 3, 4, 5, 7, 11, 17, 19, 21, 22, 23, 24, 32, 45], "string_of_interest": 5, "stringifi": 4, "stringio": 23, "strip": [4, 23], "strip_outer_dollar": [2, 23], "strip_outer_paren": [2, 23], "structur": [2, 4, 21, 24, 32, 36, 39], "strval": 23, "studi": [19, 22, 33], "stuff": 23, "stuttard": 13, "style": [11, 13, 23, 34, 36, 41, 43], "sub": [2, 3, 4, 12, 23, 32], "subclass": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 18, 19, 21, 22, 23, 28, 32], "subclassedanalysi": 3, "subdir": 23, "subdirectori": 35, "subfield": 23, "submit": [34, 36], "submodul": [1, 2, 6], "subok": 2, "subpackag": 1, "subplot": [23, 36, 41], "subscript": 17, "subselect": [2, 23], "subsequ": [4, 32, 45], "subset": [3, 4], "subsidiari": 3, "substr": 23, "subtl": 4, "succe": 34, "success": [24, 39], "successfulli": 4, "sudo": 36, "suf": 4, "suffic": [4, 23], "suffix": [4, 23, 34], "suggest": [23, 36], "sum": [2, 4, 5, 14, 15, 21, 23, 24, 44], "sum_": [5, 44], "sum_map_nam": 4, "sum_map_tex_nam": 4, "sum_w": 23, "sum_w2": 23, "summari": [5, 27], "summary_stat": 5, "summer": 13, "super": 37, "super_simple_pipelin": 29, "superset": 4, "suppli": [4, 23, 34], "support": [2, 3, 5, 9, 12, 23, 24, 33, 36, 45], "suppos": [3, 23], "suppress": 23, "sure": [3, 4, 21, 23, 24, 36], "surfac": [5, 24, 37], "surround": [2, 23], "surviv": 7, "svn": 23, "swap": [3, 5], "switch": [3, 4, 23], "switch_to_fil": [2, 23], "sy": [5, 13, 24, 31], "symbol": [23, 34], "symlink": 23, "symm": [4, 23], "symmetr": [3, 4, 5, 17, 23], "symmetri": 15, "sympi": 36, "sync": 34, "synchron": [23, 34], "syntax": [2, 23, 32, 34], "sys_dataset": 24, "sys_func_list": 5, "sys_func_list_opt": [2, 5], "sys_list": [5, 31], "sys_list_opt": [2, 5], "sys_map": 24, "sys_param": 24, "sys_param_0_v": 24, "sys_param_n_v": 24, "sys_param_name_0": 24, "sys_param_name_n": 24, "sys_param_valu": 24, "sys_set": 2, "sys_set_1": 5, "sys_set_2": 5, "sys_set_opt": [2, 5], "system": [23, 36], "systema": 24, "systemat": [5, 9, 11, 12, 13, 21, 22, 23, 24, 31, 34, 35], "t": [2, 3, 4, 5, 12, 17, 23, 24, 32, 34, 36, 45], "t_data": 4, "t_repeat_yourself": 34, "t_star": 23, "tabl": [5, 13, 23, 33, 34, 36], "table_fil": 13, "table_nam": 5, "tableaccessor": [2, 23], "tabledict": 23, "tablefmt": 4, "tabul": [2, 4, 36], "tag": [4, 24], "tail": 23, "take": [3, 4, 5, 7, 15, 21, 23, 36, 37, 44], "take_averag": [2, 5], "taken": [3, 4, 17, 23, 24], "tan": [2, 23], "tangeant": 15, "target": [2, 7, 8, 23], "targetopt": 2, "task": [3, 23, 24, 34, 39], "tau": [7, 8, 13, 15, 17, 23], "tau_bar": 7, "tc": 17, "tc_name": 17, "tck": 4, "tech": 22, "technic": 3, "techniqu": [21, 41, 43], "templat": [4, 8, 23, 31, 35, 36, 39], "template_mak": [21, 36, 41], "temporari": 23, "tend": 36, "term": [3, 4, 15, 17, 23, 34, 44], "termin": 36, "terminologi": [35, 41, 45], "terribli": 36, "test": [1, 2, 3, 4, 5, 17, 21, 22, 24, 34, 36, 41], "test_": [34, 36], "test_ab": 5, "test_bootstrap": [6, 21], "test_cas": 17, "test_clear_matrix": [2, 23], "test_command_lin": 36, "test_conjug": [2, 23], "test_conjugate_transpos": [2, 23], "test_contain": [2, 4], "test_container_set": [2, 4], "test_copy_matrix": [2, 23], "test_daemonflux_stag": 33, "test_detector": [2, 4], "test_distributionmak": [2, 4], "test_ev": [2, 4], "test_fbwkd": [2, 23], "test_find_index": [2, 4], "test_flux_weight": [1, 2], "test_format_num": [2, 23], "test_gaussian": [2, 23], "test_get_random_st": [2, 23], "test_hash_fil": [2, 23], "test_hash_obj": [2, 23], "test_hdf": [2, 23], "test_histogram": [2, 4], "test_hr_range_formatt": [2, 23], "test_isscalar": [2, 23], "test_isunitless": [2, 23], "test_kde_histogramdd": [2, 23], "test_label": 5, "test_line_profil": [2, 23], "test_list2hrlist": [2, 23], "test_lookup_indic": [2, 4], "test_map": [2, 4], "test_mapset": [2, 4], "test_matrix_dot_matrix": [2, 23], "test_matrix_dot_vector": [2, 23], "test_multidimbin": [2, 4], "test_normqu": [2, 23], "test_numba": [6, 15], "test_onedimbin": [2, 4], "test_param": [2, 4], "test_param_select": 5, "test_paramselector": [2, 4], "test_paramset": [2, 4], "test_perf": 23, "test_pipelin": [2, 4], "test_prior": [2, 4], "test_prob3numba": [15, 17], "test_profil": [2, 23], "test_recursiveequ": [2, 23], "test_resampl": [6, 21], "test_timediff": [2, 23], "test_timestamp": [2, 23], "test_to_json_from_json": [2, 23], "test_uncertainti": 23, "test_vbwkd": [2, 23], "testnam": 23, "testname1": 23, "testname2": 23, "tex": [2, 4, 23, 32], "tex_dollar": [2, 23], "tex_join": [2, 23], "texnam": 23, "text": [4, 5, 23], "text2tex": [2, 23], "tgt": 23, "than": [2, 3, 4, 14, 15, 23, 24, 33, 34, 36, 41], "thehrh": 15, "thei": [4, 5, 17, 23, 24, 28, 31, 34, 36, 39], "them": [3, 4, 5, 11, 13, 15, 21, 23, 24, 31, 35, 36, 45], "themselv": [5, 13, 23, 24], "theorem": 23, "therefor": [4, 23, 33, 36, 45], "therefrom": 5, "therein": 23, "thereof": [3, 4, 23, 32, 45], "thereto": [3, 4, 9, 12, 23], "therewith": 23, "theta": [15, 23], "theta12": [6, 15, 37], "theta13": [6, 15, 37], "theta14": [6, 15], "theta23": [3, 5, 6, 15, 37], "theta24": [3, 15], "theta34": 15, "theta_": 15, "theta_z": 4, "thi": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 44, 45], "thick": 17, "thing": [4, 23, 24, 34, 45], "third": [15, 23], "thoma": 15, "thorough": [23, 34], "those": [4, 11, 12, 23, 24, 34, 36, 39], "though": [4, 24, 29, 36], "thousand": 23, "thousands_sep": 23, "thousandth": 23, "thousandths_sep": 23, "thousandthss": 23, "thread": 2, "threadpoolctl": 36, "three": [3, 5, 15, 23, 34], "threhshold": 23, "thresh_diff": 23, "thresh_ratio": 23, "threshold": [3, 4], "through": [2, 4, 7, 11, 15, 23, 24, 31, 32, 34, 35, 36, 37], "throughout": [4, 35, 36], "thrown": 23, "thse": 24, "thu": 13, "ti": [4, 23], "tight": 2, "tild": 23, "tilt": [13, 23], "time": [4, 8, 13, 14, 19, 21, 23, 36, 45], "timediff": [2, 23], "times10": 23, "timestamp": [2, 23], "timezon": 23, "titl": [4, 5, 23], "title_filenam": 5, "titles": 4, "tmp": 36, "to_base_unit": 23, "to_dim": 4, "to_fil": [2, 4, 23], "to_hdf": [2, 23], "to_json": [2, 4, 23, 24], "to_pickl": [2, 23], "todo": [13, 15, 22], "togeth": [4, 5, 12, 17, 23, 31], "toggl": 4, "toi": [11, 29], "token": [2, 23], "tol": 3, "toler": 23, "tom": 13, "tomography_typ": 15, "tonam": 23, "too": [23, 24, 36, 45], "tool": [3, 23, 24, 36, 39], "top": [23, 27, 29, 34], "tot_num_bin": [2, 4], "tot_sfx": 23, "total": [3, 4, 5, 21, 23, 24, 26, 44], "total_barlow_llh": 4, "total_chi2": 4, "total_conv_llh": 4, "total_correct_chi2": 4, "total_cscd_map": 4, "total_llh": 4, "total_mod_chi2": 4, "total_pid_map": 4, "total_trck_map": 4, "toy_event_gener": [2, 6, 29], "tprofil": 23, "tqdm": 36, "trace": [2, 23], "track": [4, 11, 15, 19, 23, 35, 38], "track_e_cut": 11, "track_pid": 19, "tradit": 41, "trafo": 15, "trail": 23, "trailing_zero": 23, "train": 21, "transform": [4, 15, 21, 23, 34], "transform_group": [2, 4, 23], "transformed_fidg": 23, "transit": [15, 17], "transition_matrix": 17, "translat": [1, 2, 23, 34, 36], "translate_source_dict": [2, 23], "translateprior": [2, 23], "translation_mod": [2, 4], "transpar": 34, "transpos": [17, 23], "travers": [7, 17, 23], "trck": [4, 23, 31, 34], "treat": [4, 23, 33], "treatment": [21, 23, 31], "tree": 36, "tri": 23, "trig": 23, "trigger": 26, "trigonometr": 15, "trigop": [2, 23], "triptych": 23, "trivial": 23, "true": [2, 3, 4, 5, 11, 12, 13, 15, 17, 19, 21, 23, 24, 31, 32, 39, 42, 45], "true_azimuth": 23, "true_coszen": [4, 5, 11, 12, 13, 19, 23], "true_e_bin": 4, "true_energi": [4, 5, 11, 12, 13, 19, 22, 23], "true_upgoing_coszen": 23, "true_upgoing_zen": 23, "true_zenith": 23, "trueenergi": 4, "truth": [11, 19], "truthi": 2, "try": [23, 34, 36, 39], "tunabl": 11, "tune": 19, "tupl": [2, 4, 23, 24], "tuple_as_arrai": 23, "turn": [23, 24, 45], "tutori": 34, "twice": 17, "two": [2, 3, 4, 5, 15, 23, 24, 31, 33, 34, 37, 39, 44, 45], "two_flavor": 15, "two_nu_osc": [2, 6], "txt": [15, 23, 34], "type": [2, 3, 4, 5, 8, 11, 15, 17, 19, 21, 23, 24, 32, 34, 35, 36, 39, 45], "type_error": [2, 4], "typeerror": [4, 23], "typei": 22, "typenam": 2, "typic": [2, 3, 4, 9, 17, 23, 24, 36], "tz": 23, "tzdata": 36, "u": [2, 3, 4, 15, 23, 45], "u0": 45, "u1": 45, "u_tau4_sq": 8, "uarrai": [4, 45], "ubuntu": 36, "ubyt": 2, "udpat": 36, "ufloat": 45, "uint": 2, "uint0": [1, 2], "uint16": [1, 2], "uint32": [1, 2], "uint64": [1, 2], "uint8": [1, 2], "uintc": 2, "uintp": 2, "uintptr_t": 2, "ultim": 39, "ultrasurfac": [2, 6, 31], "ultrasurface_fit": 31, "ultrasurface_grads_v": 31, "um": 23, "umd": 39, "umdgrb": 39, "un": [21, 23, 24], "unaffect": 23, "unalt": 23, "unambigu": 5, "unbin": 4, "unblind": 31, "uncertainti": [4, 11, 12, 13, 21, 22, 23, 24, 31, 33, 34, 36, 44, 45], "unchang": [2, 4], "uncorrel": [4, 13, 23], "undefin": 4, "under": [2, 3, 4, 11, 23, 31, 36], "underflow": 4, "undergo": [21, 23], "underground": 15, "underli": [4, 23], "underscor": [4, 23, 24, 34], "understand": [19, 23, 34], "understood": [17, 44], "unequ": 23, "unfix": [2, 4], "unfold": [36, 43], "unform": 4, "ungroup": 23, "unhandl": 4, "unicod": 23, "uniform": [4, 17, 23, 29, 44], "uniniti": 2, "unintuit": 23, "uniqu": [4, 23, 36], "unique_flavs_tex": [2, 23], "unique_id": [4, 23], "unit": [2, 4, 5, 8, 15, 17, 21, 23, 24, 34, 35, 36, 41, 45], "unitless": 23, "unitregistri": [2, 45], "units0": 45, "units1": 45, "units2": 45, "units_2": 45, "units_and_uncertainti": [34, 35], "units_list": 5, "units_opt": [2, 5], "units_specifi": [2, 5], "units_str": [2, 4], "unitscontain": 45, "unix": 4, "unless": [2, 4, 5, 17, 23], "unlik": [4, 23], "unlink": [2, 4], "unlink_contain": [2, 4], "unnecessari": [3, 5], "unp": 45, "unpack": [2, 11], "unpack_file_data": [6, 11], "unpickl": 23, "unprivileg": 36, "unread": 23, "unrecogn": 23, "unreli": 24, "unrol": 4, "unroll_bin": [2, 4], "unset": 36, "unsign": [2, 23], "unsignedinteg": 2, "unspecifi": [4, 5, 23], "until": [5, 23, 34, 45], "untouch": 11, "unumpi": [4, 45], "unweight": [4, 21, 23, 24], "unweighted_histogram": [2, 23], "unweighted_mc": 23, "up": [3, 4, 5, 6, 15, 21, 23, 34, 36], "upcast": 2, "updat": [1, 2, 3, 4, 23, 36], "update_exist": [2, 4], "update_hash": [2, 4], "update_param": [2, 4, 23], "upgo": 23, "upgrad": [11, 31, 41], "upon": [3, 4, 23, 36], "upper": [4, 12, 23, 24], "uppermost": 4, "upsampl": 4, "upstream": 9, "urandom": 23, "ureg": [1, 2, 3, 4, 23, 45], "us": [2, 3, 4, 5, 7, 9, 11, 12, 13, 15, 17, 19, 21, 23, 24, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 41, 43, 44, 45], "usabl": [2, 5, 23, 36], "usag": [23, 31, 34], "use_basenam": 4, "use_cuda": 23, "use_decim": 23, "use_deepcopi": 4, "use_honda_nominal_flux": 13, "user": [3, 4, 5, 11, 13, 19, 23, 24, 34, 36, 39, 45], "usernam": 36, "ushort": 2, "usual": [3, 23, 34, 36, 44], "utc": 23, "utf": 23, "util": [1, 2, 4, 5, 6, 17, 28, 32, 36, 39], "v": [2, 4, 11, 23, 34, 35, 36], "v36": 23, "v39": 4, "v4": 36, "v5": 23, "v_lri": [6, 15], "vacuum": [15, 17], "vacuumlikensiparam": [6, 15], "val": [4, 17, 21, 23], "val1_1": 24, "val1_2": 24, "val2_1": 24, "val2_2": 24, "valid": [2, 3, 4, 12, 23], "valid_metr": 3, "valid_nominal_valu": [2, 4], "valid_rang": 4, "validate_cut_spec": [2, 23], "validate_map": [2, 23], "validate_map_obj": [2, 23], "validate_minimizer_set": [2, 3], "validate_param": [2, 4], "validate_pid_spec": [2, 23], "validate_spl": 23, "validate_splin": [2, 23], "validate_valu": [2, 4], "validate_xsec": [2, 23], "valn_1": 24, "valn_2": 24, "valu": [1, 2, 3, 4, 5, 12, 13, 14, 15, 17, 18, 19, 21, 23, 24, 28, 31, 35, 37, 39, 44, 45], "value1": 23, "value3": 23, "valueerror": [2, 3, 4, 23], "values_hash": [2, 4], "var": [2, 23], "var_dict": 11, "varaibl": 23, "vardir": 23, "vari": [3, 13, 36, 39], "variabl": [2, 4, 9, 12, 13, 19, 21, 23, 24, 29, 31, 34, 35, 36], "variable_map": 4, "variable_nam": 21, "varianc": [21, 23, 44], "variance_floor": 21, "variance_scal": 21, "variat": [9, 13, 21, 23], "variou": [4, 8, 23, 29, 34, 36, 39], "varnam": 12, "vbw": 23, "vbwkde": [1, 2], "vector": [1, 2, 4, 13], "veff": 23, "venv": 36, "ver": [23, 28], "verbos": [4, 23, 36], "veri": [23, 36, 37], "verif": 31, "verifi": [23, 28], "verion": 23, "versa": 4, "version": [2, 4, 5, 15, 23, 24, 28, 31, 36, 37], "vet": 36, "via": [2, 3, 4, 5, 15, 17, 23, 28, 29, 31, 35, 36, 37], "vice": 4, "view": 2, "violat": [3, 15, 34], "virtual": [4, 36], "virtualcontain": [2, 4], "virtualenv": 36, "visual": 4, "vmax": [4, 23, 36, 41], "vmin": [4, 5, 36, 41], "vol": 23, "volum": 4, "vulner": 36, "vv": 23, "vvv": [23, 36], "w": [13, 23, 24], "wa": [4, 5, 12, 21, 23, 24, 41, 44], "wai": [2, 3, 4, 13, 15, 21, 23, 31, 32, 34, 36, 37, 39, 45], "walk": 23, "want": [3, 4, 23, 24, 36], "warn": [2, 4, 5, 22, 23, 36], "warner": 36, "water": 7, "we": [3, 4, 11, 12, 23, 24, 31, 34, 35, 37, 39, 45], "wealth": 3, "websit": 36, "weight": [2, 4, 5, 6, 9, 11, 12, 13, 14, 15, 21, 23, 24, 31, 35, 39], "weight_density_to_yefrac": [6, 15], "weight_hnl": [2, 6], "weight_lifetim": 8, "weight_scal": 8, "weighted_aeff": 5, "weighted_bin_volum": [2, 4], "weighted_bin_width": [2, 4], "weighted_cent": [2, 4], "weighted_chi2": 23, "weights_col": 4, "well": [3, 4, 5, 23, 24, 26, 33, 34, 41, 45], "wendel": 17, "went": 34, "were": [4, 23, 24, 34, 45], "wether": 4, "wg": 36, "wget": 36, "what": [3, 4, 11, 12, 22, 23, 24, 28, 34, 39], "whatev": [4, 23, 34, 36], "when": [2, 3, 4, 11, 12, 19, 23, 24, 32, 36], "where": [3, 4, 5, 11, 13, 14, 15, 17, 21, 23, 24, 27, 32, 34, 35, 36], "wherea": [4, 23, 32], "wherebi": 23, "wherein": 39, "wherev": [23, 34], "whether": [2, 3, 4, 5, 11, 15, 23, 34, 36, 45], "which": [2, 3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 21, 22, 23, 24, 27, 28, 35, 36, 37, 39, 43, 44, 45], "whichev": 4, "while": [2, 4, 15, 21, 23, 34], "white": [4, 15], "whitespac": [2, 4, 23], "whole": 3, "whose": [2, 4, 23, 24], "why": [23, 33, 34], "wide": 36, "width": [4, 8, 11, 41, 44], "wiki": [23, 33, 34, 36], "wikipedia": [23, 34], "wikispac": 5, "wilcard": 19, "wildcard": [4, 5], "willing": 23, "window": 23, "winsaf": 23, "wisc": [15, 23, 33, 39, 41], "wise": [23, 31], "wish": [4, 36], "within": [3, 4, 5, 19, 23, 34, 36, 39], "without": [4, 15, 17, 21, 23, 36], "won": [23, 34, 36], "word": [3, 34], "work": [4, 5, 23, 24, 28, 32, 34, 35, 36, 41, 45], "workflow": 41, "wors": 23, "woth": 24, "would": [3, 11, 15, 21, 23, 24, 34], "wrap": [15, 24, 34, 45], "wrapper": [4, 15, 17, 23, 24], "writ": 4, "write": [3, 5, 21, 23, 24, 34], "writer": 23, "written": [4, 5, 9, 22, 23, 24, 34, 37, 41], "wrong": 23, "wrote": 39, "www": [15, 17, 23, 34, 36, 37], "x": [2, 4, 5, 12, 23, 28, 34, 36, 44, 45], "x1": 4, "x2": 4, "x86_64": [2, 36], "x_rang": 23, "xintval": 5, "xlabel": 5, "xlabels": 4, "xlategroupsstr": [2, 23], "xlim": 24, "xn": 4, "xor": 23, "xs_vals_nu": 28, "xs_vals_nuecc": 28, "xsec": [2, 6, 23, 36], "xsec_fil": [7, 22], "xsec_vers": 23, "xsection": 7, "xtabbin": 5, "xtabval": 5, "xtext": 5, "xtol_ab": 3, "xtol_rel": 3, "xxx": 23, "xyz": 23, "y": [2, 4, 5, 23, 34], "yanez": [13, 22, 23], "yard": 45, "ya\u00f1ez": 13, "ye": [15, 23], "yei": [15, 37], "yem": [15, 37], "yeo": [15, 37], "yet": [4, 23, 36], "yi": 23, "yield": [4, 23], "yintval": 5, "ylabel": 5, "ylabels": 4, "ylim": 23, "yml": 41, "you": [2, 3, 4, 5, 12, 17, 23, 24, 28, 32, 33, 34, 36, 39, 41, 45], "your": [5, 23, 34, 35, 36], "your_analysi": 36, "your_pisa_py3_venv": 36, "yourself": 36, "ytabval": 5, "ytext": 5, "z": [4, 13, 15, 23, 34], "za": 23, "zdravko": 23, "zech": 4, "zen": 23, "zenith": [15, 19, 23, 35, 37], "zenith_max": 23, "zenith_min": 23, "zero": [2, 4, 14, 21, 23, 24], "zeros_lik": 2, "zi": [4, 23], "zip": 23, "\u00eatre": 34, "\u03bc": 23}, "titles": ["Welcome to PISA\u2019s documentation!", "pisa", "pisa package", "pisa.analysis package", "pisa.core package", "pisa.scripts package", "pisa.stages package", "pisa.stages.absorption package", "pisa.stages.aeff package", "pisa.stages.background package", "pisa.stages.combine package", "pisa.stages.data package", "pisa.stages.discr_sys package", "pisa.stages.flux package", "pisa.stages.likelihood package", "pisa.stages.osc package", "pisa.stages.osc.nusquids package", "pisa.stages.osc.prob3numba package", "pisa.stages.pid package", "pisa.stages.reco package", "pisa.stages.unfold package", "pisa.stages.utils package", "pisa.stages.xsec package", "pisa.utils package", "pisa.utils.hypersurface package", "pisa.utils.llh_defs package", "<no title>", "<no title>", "}", "<no title>", "Developer\u2019s Guide", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "General Introduction", "<no title>", "<no title>", "Stages", "<no title>", "<no title>", "Utils"], "titleterms": {"": [0, 30], "absorpt": 7, "add_flux_to_events_fil": 5, "add_indic": 21, "adhoc_si": 21, "aeff": 8, "air": 13, "analysi": 3, "apply_to_all_set": 5, "astrophys": 13, "atm_muon": 9, "b": 23, "background": 9, "barlow": 23, "barr_parameter": 23, "barr_simpl": 13, "bin": 4, "bin_index": 4, "bootstrap": 21, "callabl": 23, "combin": 10, "compar": 5, "comparison": 23, "config": [5, 23], "config_pars": 23, "contain": 4, "content": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "convert_config_format": 5, "core": 4, "create_barr_sys_tables_mceq": 5, "cross_sect": 23, "csv_data_hist": 11, "csv_icc_hist": 11, "csv_loader": 11, "daemon_flux": 13, "data": 11, "data_proc_param": 23, "decay_param": 15, "decoher": 15, "definit": 23, "detector": 4, "develop": 30, "dis_si": 22, "discr_si": 12, "distribution_mak": 4, "document": 0, "earth_absorpt": 7, "event": 4, "events_pi": 4, "file": [5, 23], "fileio": 23, "fisher_matrix": 23, "fit_hypersurfac": 5, "fix_error": 21, "flavint": 23, "flux": 13, "flux_weight": 23, "format": 23, "freedom_hdf5_load": 11, "gaussian": 23, "gener": [5, 40], "generalized_llh_param": 14, "genie_si": 22, "globe": 15, "grid": 11, "guid": 30, "hash": 23, "hdf": 23, "hdfchain": 23, "hillasg": 13, "hist": 21, "honda_ip": 13, "hyper_interpol": 24, "hypersurfac": [12, 24], "hypersurface_plot": 24, "index": 0, "input": [4, 23], "introduct": 40, "json": 23, "kde": 21, "kde_hist": 23, "kfold": 21, "layer": 15, "licloader_weight": 11, "likelihood": 14, "likelihood_funct": 23, "llh_client": 23, "llh_def": 25, "llh_server": 23, "log": 23, "lri_param": 15, "make_events_fil": 5, "make_nufit_theta23_spline_prior": 5, "map": 4, "matrix": 23, "mceq_barr": 13, "mceq_barr_r": 13, "mcsimrunset": 23, "meows_load": 11, "modifi": 5, "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "n": 23, "nominal_set": 5, "note": 5, "nsi_param": 15, "numba_osc_hostfunc": 17, "numba_osc_kernel": 17, "numba_osc_test": 17, "numba_tool": 23, "nusquid": [15, 16], "nusquids_osc": 16, "nutau": 10, "nutau_xsec": 22, "osc": [15, 16, 17], "osc_param": 15, "packag": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "param": [4, 23], "pid": 18, "pipelin": 4, "pipeline_cfg": 5, "pisa": [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], "plotter": 23, "poisson": 25, "poisson_gamma_mixtur": 25, "prior": 4, "prob3": 15, "prob3numba": 17, "profil": 23, "pull_method": 23, "random_numb": 23, "reco": 19, "resampl": 21, "resolut": 19, "resourc": 23, "return": [4, 23], "roounfold": 20, "scaling_param": 15, "script": 5, "section": 5, "selector": 23, "set_vari": 21, "shift_scale_pid": 18, "simple_data_load": 11, "simple_param": 19, "simple_sign": 11, "specifi": 5, "spline": 23, "spline_smooth": 23, "sqlite_load": 11, "stage": [4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 43], "stat": 23, "structur": 23, "submodul": [3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "subpackag": [2, 6, 15, 23], "syntax": 5, "sys_set": 5, "test": 23, "test_flux_weight": 5, "test_numba": 17, "todo": 23, "toy_event_gener": 11, "translat": 4, "two_nu_osc": 15, "ultrasurfac": 12, "unfold": 20, "util": [21, 23, 24, 25, 46], "vbwkde": 23, "vector": 23, "weight": 8, "weight_hnl": 8, "welcom": 0, "whitespac": 5, "xsec": 22}}) \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index fb6160bba..000000000 --- a/setup.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[versioneer] -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. -VCS = git -style = pep440 -versionfile_source = pisa/_version.py -versionfile_build = pisa/_version.py -tag_prefix = -parentdir_prefix = pisa-[versioneer] diff --git a/setup.py b/setup.py deleted file mode 100755 index 1249dc5b8..000000000 --- a/setup.py +++ /dev/null @@ -1,341 +0,0 @@ -#!/usr/bin/env python -# pylint: disable=line-too-long - -""" -Allows for PISA installation. Tested with `pip`. Use the environment variable -`CC` to pass a custom compiler to the instller. (GCC and Clang should both -work; OpenMP support--an optional dependency--is only available for recent -versions of the latter). - -Checkout the source code tree in the current directory via - - $ git clone https://github.com/icecubeopensource/pisa.git - -and install basic PISA package (in editable mode via -e flag) via - - $ pip install -e ./pisa - -or include optional dependencies by specifying them in brackets - - $ pip install -e ./pisa[develop] - -If you wish to upgrade PISA and/or its dependencies: - - $ pip install ./pisa[develop] --upgrade -""" - - -from __future__ import absolute_import - -from distutils.command.build import build -import os -import shutil -import subprocess -import tempfile - -from setuptools.command.build_ext import build_ext -from setuptools import setup, Extension, find_packages -import versioneer - - -__all__ = [ - 'SETUP_REQUIRES', - 'INSTALL_REQUIRES', - 'EXTRAS_REQUIRE', - 'OMP_TEST_PROGRAM', - 'setup_cc', - 'check_openmp', - 'CustomBuild', - 'CustomBuildExt', - 'do_setup', -] - -__author__ = 'S. Boeser, J.L. Lanfranchi, P. Eller, M. Hieronymus' - -__license__ = '''Copyright (c) 2014-2020, The IceCube Collaboration - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.''' - - -# TODO: address some/all of the following in the `setup()` method? -# * package_data -# * exclude_package_data : dict -# * include_package_data : bool; include everything in source control -# * eager_resources : list of str paths (using '/' notation relative to source root) unzip these together if any one is requested (for C -# extensions, etc.) - - -SETUP_REQUIRES = [ - 'pip>=1.8,<21.3', - 'setuptools>18.5,<60.0', # versioneer requires >18.5 - 'numpy>=1.17,<1.23', - 'cython~=0.29.0', # needed for the setup and for the install - 'scikit-learn<=1.1.2', -] - -INSTALL_REQUIRES = [ - 'decorator', - 'kde @ git+https://github.com/icecubeopensource/kde.git', - 'fast-histogram>=0.10', - 'nlopt', - 'h5py', - 'iminuit>=2', - 'line_profiler', - 'matplotlib>=3.0', # 1.5: inferno colormap; 2.0: 'C0' colorspec - 'numba>=0.53', # >=0.35: fastmath jit flag; >=0.38: issue #439; 0.44 segfaults - 'numpy>=1.17,<1.23', - 'pint<=0.19', # property pint.quantity._Quantity no longer exists in 0.20 - 'scipy>=1.6', - 'pandas', - 'simplejson==3.18.4', - 'tables', - 'tabulate', - 'uncertainties', - 'llvmlite', # 0.31 gave an error "Type of #4 arg mismatch: i1 != i32" in pisa/stages/osc/layers.py", line 91 - 'py-cpuinfo', - 'sympy', - 'cython~=0.29.0', # needed for the setup and for the install - 'scikit-learn<=1.1.2', - 'pyarrow', - 'tqdm', - 'daemonflux>=0.8.0', - 'packaging', -] - -EXTRAS_REQUIRE = { - 'develop': [ - 'pylint>=1.7', - 'recommonmark', - 'sphinx>=1.3', - 'sphinx_rtd_theme', - 'versioneer', - 'pytest', - ], - # TODO: get mceq install to work... this is non-trivial since that - # project isn't exactly cleanly instllable via pip already, plus it - # has "sub-projects" that won't get picked up by a simple single - # URL (e.g. the data). Plus it's huge (~1GB). - #'mceq': [ - # 'numba==0.38', - # 'progressbar', - # 'MCEq' - #] -} - - -# See http://openmp.org/wp/openmp-compilers/ -OMP_TEST_PROGRAM = \ -r""" -#include -#include -int main() { -#pragma omp parallel - printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads()); -}""" - - -def setup_cc(): - """Set env var CC=cc if it is undefined""" - if 'CC' not in os.environ or os.environ['CC'].strip() == '': - os.environ['CC'] = 'cc' - - -def check_openmp(): - """OpenMP is present if a test program can compile with -fopenmp flag (e.g. - some versions of Clang / gcc don't support OpenMP). - - Source: http://stackoverflow.com/questions/16549893 - - """ - openmp = False - setup_cc() - tmpfname = r'test.c' - tmpdir = tempfile.mkdtemp() - curdir = os.getcwd() - os.chdir(tmpdir) - cc = os.environ['CC'] - try: - with open(tmpfname, 'w', 0) as f: - f.write(OMP_TEST_PROGRAM) - with open(os.devnull, 'w') as fnull: - returncode = subprocess.call([cc, '-fopenmp', tmpfname], - stdout=fnull, stderr=fnull) - # Successful build (possibly with warnings) means we can use OpenMP - openmp = returncode == 0 - finally: - # Restore directory location and clean up - os.chdir(curdir) - shutil.rmtree(tmpdir) - return openmp - - -class CustomBuild(build): - """Define custom build order, so that the python interface module created - by SWIG is staged in build_py. - - """ - # different order: build_ext *before* build_py - sub_commands = [ - ('build_ext', build.has_ext_modules), - ('build_py', build.has_pure_modules), - ('build_clib', build.has_c_libraries), - ('build_scripts', build.has_scripts) - ] - - -class CustomBuildExt(build_ext): - """Replace default build_ext to allow for numpy install before setup.py - needs it to include its dir. - - Code copied from coldfix / http://stackoverflow.com/a/21621689 - - """ - def finalize_options(self): - # Applying fix from https://github.com/SciTools/cf-units/pull/153 - - # hanlde __builtins__ as dict and module - def _set_builtin(name, value): - if isinstance(__builtins__, dict): - __builtins__[name] = value - else: - setattr(__builtins__, name, value) - - build_ext.finalize_options(self) - _set_builtin('__NUMPY_SETUP__', False) - import numpy # pylint: disable=import-outside-toplevel - self.include_dirs.append(numpy.get_include()) - - -def do_setup(): - """Perform the setup process""" - #setup_cc() - #sys.stdout.write('Using compiler %s\n' %os.environ['CC']) - - #has_openmp = check_openmp() - #if not has_openmp: - # sys.stderr.write( - # 'WARNING: Could not compile test program with -fopenmp;' - # ' installing PISA without OpenMP support.\n' - # ) - - # Collect (build-able) external modules and package_data - ext_modules = [Extension('pisa.utils.llh_defs.poisson_gamma_mixtures', - sources = ['pisa/utils/llh_defs/poisson_gamma_mixtures.pyx', - 'pisa/utils/llh_defs/poisson_gamma.c']) - ] - # Include these things in source (and binary?) distributions - package_data = {} - - # Include documentation and license files wherever they may be - package_data[''] = ['*.md', '*.rst', 'LICENSE*'] - - package_data['pisa_examples'] = [ - 'resources/aeff/*.json*', - 'resources/cross_sections/*json*', - 'resources/cross_sections/*.pckl', - 'resources/discr_sys/*.json*', - - 'resources/events/*.hdf5', - 'resources/events/*.json*', - 'resources/events/IceCube_3y_oscillations/*.csv', - 'resources/events/IceCube_3y_oscillations/*.csv.bz2', - - 'resources/flux/*.d', - 'resources/osc/*.hdf5', - 'resources/osc/*.dat', - 'resources/osc/numba_osc_tests_data/*.pkl', - 'resources/pid/*.json*', - 'resources/priors/*.json*', - 'resources/priors/*.md', - 'resources/reco/*.json*', - - 'resources/settings/binning/*.cfg', - 'resources/settings/discrete_sys/*.cfg', - 'resources/settings/fit/*.cfg', - 'resources/settings/logging/logging.json', - 'resources/settings/mc/*.cfg', - 'resources/settings/minimizer/*.cfg', - 'resources/settings/osc/*.cfg', - 'resources/settings/osc/*.md', - 'resources/settings/pipeline/*.cfg', - 'resources/settings/pipeline/*.md', - - 'notebooks/*ipynb', - ] - - package_data['pisa_tests'] = [ - '*.py', - '*.sh' - ] - - cmdclasses = {'build': CustomBuild, 'build_ext': CustomBuildExt} - cmdclasses.update(versioneer.get_cmdclass()) - - # Now do the actual work - setup( - name='pisa', - version=versioneer.get_version(), - description='Tools for analyzing and drawing statistical conclusions from experimental data', - license='Apache 2.0', - author='The IceCube Collaboration', - author_email='analysis@icecube.wisc.edu', - url='http://github.com/icecubeopensource/pisa', - cmdclass=cmdclasses, - python_requires='>=3.6', # f-strings, kwarg/dict ordering require Py>=3.6 - setup_requires=SETUP_REQUIRES, - install_requires=INSTALL_REQUIRES, - extras_require=EXTRAS_REQUIRE, - dependency_links=[ - 'git+https://github.com/icecubeopensource/kde.git#egg=kde', - #'git+https://github.com/afedynitch/MCEq.git#egg=MCEq', - ], - packages=find_packages(), - ext_modules=ext_modules, - package_data=package_data, - # Cannot be compressed due to c, pyx, and cuda source files/headers - # that need to be compiled at run-time but are inaccessible in a zip - # (I think...) - zip_safe=False, - entry_points={ - 'console_scripts': [ - # Scripts in core dir - 'pisa-distribution_maker = pisa.core.distribution_maker:main', - 'pisa-pipeline = pisa.core.pipeline:main', - - # Scripts in scripts dir - 'pisa-add_flux_to_events_file = pisa.scripts.add_flux_to_events_file:main', - 'pisa-analysis = pisa.scripts.analysis:main', - 'pisa-postproc = pisa.scripts.analysis_postprocess:main', - 'pisa-compare = pisa.scripts.compare:main', - 'pisa-convert_config_format = pisa.scripts.convert_config_format:main', - 'pisa-fit_discrete_sys = pisa.scripts.fit_discrete_sys:main', - 'pisa-fit_discrete_sys_nd = pisa.scripts.fit_discrete_sys_nd:main', - 'pisa-make_asymmetry_plots = pisa.scripts.make_asymmetry_plots:main', - 'pisa-make_events_file = pisa.scripts.make_events_file:main', - 'pisa-make_nufit_theta23_spline_priors = pisa.scripts.make_nufit_theta23_spline_priors:main', - 'pisa-make_systematic_variation_plots = pisa.scripts.make_systematic_variation_plots:main', - 'pisa-make_toy_events = pisa.scripts.make_toy_events:main', - 'pisa-profile_scan = pisa.scripts.profile_scan:main', - 'pisa-scan_allsyst = pisa.scripts.scan_allsyst:main', - - # Scripts in pisa_tests dir - 'pisa-test_changes_with_combined_pidreco = pisa_tests.test_changes_with_combined_pidreco:main', - 'pisa-test_example_pipelines = pisa_tests.test_example_pipelines:main', - 'pisa-run_unit_tests = pisa_tests.run_unit_tests:run_unit_tests', - ] - } - ) - - -if __name__ == '__main__': - do_setup() diff --git a/versioneer.py b/versioneer.py deleted file mode 100644 index 7ed2a21d2..000000000 --- a/versioneer.py +++ /dev/null @@ -1,1774 +0,0 @@ - -# Version: 0.16 - -"""The Versioneer - like a rocketeer, but for versions. - -The Versioneer -============== - -* like a rocketeer, but for versions! -* https://github.com/warner/python-versioneer -* Brian Warner -* License: Public Domain -* Compatible With: python2.6, 2.7, 3.3, 3.4, 3.5, and pypy -* [![Latest Version] -(https://pypip.in/version/versioneer/badge.svg?style=flat) -](https://pypi.python.org/pypi/versioneer/) -* [![Build Status] -(https://travis-ci.org/warner/python-versioneer.png?branch=master) -](https://travis-ci.org/warner/python-versioneer) - -This is a tool for managing a recorded version number in distutils-based -python projects. The goal is to remove the tedious and error-prone "update -the embedded version string" step from your release process. Making a new -release should be as easy as recording a new tag in your version-control -system, and maybe making new tarballs. - - -## Quick Install - -* `pip install versioneer` to somewhere to your $PATH -* add a `[versioneer]` section to your setup.cfg (see below) -* run `versioneer install` in your source tree, commit the results - -## Version Identifiers - -Source trees come from a variety of places: - -* a version-control system checkout (mostly used by developers) -* a nightly tarball, produced by build automation -* a snapshot tarball, produced by a web-based VCS browser, like github's - "tarball from tag" feature -* a release tarball, produced by "setup.py sdist", distributed through PyPI - -Within each source tree, the version identifier (either a string or a number, -this tool is format-agnostic) can come from a variety of places: - -* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows - about recent "tags" and an absolute revision-id -* the name of the directory into which the tarball was unpacked -* an expanded VCS keyword ($Id$, etc) -* a `_version.py` created by some earlier build step - -For released software, the version identifier is closely related to a VCS -tag. Some projects use tag names that include more than just the version -string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool -needs to strip the tag prefix to extract the version identifier. For -unreleased software (between tags), the version identifier should provide -enough information to help developers recreate the same tree, while also -giving them an idea of roughly how old the tree is (after version 1.2, before -version 1.3). Many VCS systems can report a description that captures this, -for example `git describe --tags --dirty --always` reports things like -"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the -0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has -uncommitted changes. - -The version identifier is used for multiple purposes: - -* to allow the module to self-identify its version: `myproject.__version__` -* to choose a name and prefix for a 'setup.py sdist' tarball - -## Theory of Operation - -Versioneer works by adding a special `_version.py` file into your source -tree, where your `__init__.py` can import it. This `_version.py` knows how to -dynamically ask the VCS tool for version information at import time. - -`_version.py` also contains `$Revision$` markers, and the installation -process marks `_version.py` to have this marker rewritten with a tag name -during the `git archive` command. As a result, generated tarballs will -contain enough information to get the proper version. - -To allow `setup.py` to compute a version too, a `versioneer.py` is added to -the top level of your source tree, next to `setup.py` and the `setup.cfg` -that configures it. This overrides several distutils/setuptools commands to -compute the version when invoked, and changes `setup.py build` and `setup.py -sdist` to replace `_version.py` with a small static file that contains just -the generated version data. - -## Installation - -First, decide on values for the following configuration variables: - -* `VCS`: the version control system you use. Currently accepts "git". - -* `style`: the style of version string to be produced. See "Styles" below for - details. Defaults to "pep440", which looks like - `TAG[+DISTANCE.gSHORTHASH[.dirty]]`. - -* `versionfile_source`: - - A project-relative pathname into which the generated version strings should - be written. This is usually a `_version.py` next to your project's main - `__init__.py` file, so it can be imported at runtime. If your project uses - `src/myproject/__init__.py`, this should be `src/myproject/_version.py`. - This file should be checked in to your VCS as usual: the copy created below - by `setup.py setup_versioneer` will include code that parses expanded VCS - keywords in generated tarballs. The 'build' and 'sdist' commands will - replace it with a copy that has just the calculated version string. - - This must be set even if your project does not have any modules (and will - therefore never import `_version.py`), since "setup.py sdist" -based trees - still need somewhere to record the pre-calculated version strings. Anywhere - in the source tree should do. If there is a `__init__.py` next to your - `_version.py`, the `setup.py setup_versioneer` command (described below) - will append some `__version__`-setting assignments, if they aren't already - present. - -* `versionfile_build`: - - Like `versionfile_source`, but relative to the build directory instead of - the source directory. These will differ when your setup.py uses - 'package_dir='. If you have `package_dir={'myproject': 'src/myproject'}`, - then you will probably have `versionfile_build='myproject/_version.py'` and - `versionfile_source='src/myproject/_version.py'`. - - If this is set to None, then `setup.py build` will not attempt to rewrite - any `_version.py` in the built tree. If your project does not have any - libraries (e.g. if it only builds a script), then you should use - `versionfile_build = None`. To actually use the computed version string, - your `setup.py` will need to override `distutils.command.build_scripts` - with a subclass that explicitly inserts a copy of - `versioneer.get_version()` into your script file. See - `test/demoapp-script-only/setup.py` for an example. - -* `tag_prefix`: - - a string, like 'PROJECTNAME-', which appears at the start of all VCS tags. - If your tags look like 'myproject-1.2.0', then you should use - tag_prefix='myproject-'. If you use unprefixed tags like '1.2.0', this - should be an empty string, using either `tag_prefix=` or `tag_prefix=''`. - -* `parentdir_prefix`: - - a optional string, frequently the same as tag_prefix, which appears at the - start of all unpacked tarball filenames. If your tarball unpacks into - 'myproject-1.2.0', this should be 'myproject-'. To disable this feature, - just omit the field from your `setup.cfg`. - -This tool provides one script, named `versioneer`. That script has one mode, -"install", which writes a copy of `versioneer.py` into the current directory -and runs `versioneer.py setup` to finish the installation. - -To versioneer-enable your project: - -* 1: Modify your `setup.cfg`, adding a section named `[versioneer]` and - populating it with the configuration values you decided earlier (note that - the option names are not case-sensitive): - - ```` - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - ```` - -* 2: Run `versioneer install`. This will do the following: - - * copy `versioneer.py` into the top of your source tree - * create `_version.py` in the right place (`versionfile_source`) - * modify your `__init__.py` (if one exists next to `_version.py`) to define - `__version__` (by calling a function from `_version.py`) - * modify your `MANIFEST.in` to include both `versioneer.py` and the - generated `_version.py` in sdist tarballs - - `versioneer install` will complain about any problems it finds with your - `setup.py` or `setup.cfg`. Run it multiple times until you have fixed all - the problems. - -* 3: add a `import versioneer` to your setup.py, and add the following - arguments to the setup() call: - - version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), - -* 4: commit these changes to your VCS. To make sure you won't forget, - `versioneer install` will mark everything it touched for addition using - `git add`. Don't forget to add `setup.py` and `setup.cfg` too. - -## Post-Installation Usage - -Once established, all uses of your tree from a VCS checkout should get the -current version string. All generated tarballs should include an embedded -version string (so users who unpack them will not need a VCS tool installed). - -If you distribute your project through PyPI, then the release process should -boil down to two steps: - -* 1: git tag 1.0 -* 2: python setup.py register sdist upload - -If you distribute it through github (i.e. users use github to generate -tarballs with `git archive`), the process is: - -* 1: git tag 1.0 -* 2: git push; git push --tags - -Versioneer will report "0+untagged.NUMCOMMITS.gHASH" until your tree has at -least one tag in its history. - -## Version-String Flavors - -Code which uses Versioneer can learn about its version string at runtime by -importing `_version` from your main `__init__.py` file and running the -`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can -import the top-level `versioneer.py` and run `get_versions()`. - -Both functions return a dictionary with different flavors of version -information: - -* `['version']`: A condensed version string, rendered using the selected - style. This is the most commonly used value for the project's version - string. The default "pep440" style yields strings like `0.11`, - `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section - below for alternative styles. - -* `['full-revisionid']`: detailed revision identifier. For Git, this is the - full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". - -* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that - this is only accurate if run in a VCS checkout, otherwise it is likely to - be False or None - -* `['error']`: if the version string could not be computed, this will be set - to a string describing the problem, otherwise it will be None. It may be - useful to throw an exception in setup.py if this is set, to avoid e.g. - creating tarballs with a version string of "unknown". - -Some variants are more useful than others. Including `full-revisionid` in a -bug report should allow developers to reconstruct the exact code being tested -(or indicate the presence of local changes that should be shared with the -developers). `version` is suitable for display in an "about" box or a CLI -`--version` output: it can be easily compared against release notes and lists -of bugs fixed in various releases. - -The installer adds the following text to your `__init__.py` to place a basic -version in `YOURPROJECT.__version__`: - - from ._version import get_versions - __version__ = get_versions()['version'] - del get_versions - -## Styles - -The setup.cfg `style=` configuration controls how the VCS information is -rendered into a version string. - -The default style, "pep440", produces a PEP440-compliant string, equal to the -un-prefixed tag name for actual releases, and containing an additional "local -version" section with more detail for in-between builds. For Git, this is -TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags ---dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the -tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and -that this commit is two revisions ("+2") beyond the "0.11" tag. For released -software (exactly equal to a known tag), the identifier will only contain the -stripped tag, e.g. "0.11". - -Other styles are available. See details.md in the Versioneer source tree for -descriptions. - -## Debugging - -Versioneer tries to avoid fatal errors: if something goes wrong, it will tend -to return a version of "0+unknown". To investigate the problem, run `setup.py -version`, which will run the version-lookup code in a verbose mode, and will -display the full contents of `get_versions()` (including the `error` string, -which may help identify what went wrong). - -## Updating Versioneer - -To upgrade your project to a new release of Versioneer, do the following: - -* install the new Versioneer (`pip install -U versioneer` or equivalent) -* edit `setup.cfg`, if necessary, to include any new configuration settings - indicated by the release notes -* re-run `versioneer install` in your source tree, to replace - `SRC/_version.py` -* commit any changed files - -### Upgrading to 0.16 - -Nothing special. - -### Upgrading to 0.15 - -Starting with this version, Versioneer is configured with a `[versioneer]` -section in your `setup.cfg` file. Earlier versions required the `setup.py` to -set attributes on the `versioneer` module immediately after import. The new -version will refuse to run (raising an exception during import) until you -have provided the necessary `setup.cfg` section. - -In addition, the Versioneer package provides an executable named -`versioneer`, and the installation process is driven by running `versioneer -install`. In 0.14 and earlier, the executable was named -`versioneer-installer` and was run without an argument. - -### Upgrading to 0.14 - -0.14 changes the format of the version string. 0.13 and earlier used -hyphen-separated strings like "0.11-2-g1076c97-dirty". 0.14 and beyond use a -plus-separated "local version" section strings, with dot-separated -components, like "0.11+2.g1076c97". PEP440-strict tools did not like the old -format, but should be ok with the new one. - -### Upgrading from 0.11 to 0.12 - -Nothing special. - -### Upgrading from 0.10 to 0.11 - -You must add a `versioneer.VCS = "git"` to your `setup.py` before re-running -`setup.py setup_versioneer`. This will enable the use of additional -version-control systems (SVN, etc) in the future. - -## Future Directions - -This tool is designed to make it easily extended to other version-control -systems: all VCS-specific components are in separate directories like -src/git/ . The top-level `versioneer.py` script is assembled from these -components by running make-versioneer.py . In the future, make-versioneer.py -will take a VCS name as an argument, and will construct a version of -`versioneer.py` that is specific to the given VCS. It might also take the -configuration arguments that are currently provided manually during -installation by editing setup.py . Alternatively, it might go the other -direction and include code from all supported VCS systems, reducing the -number of intermediate scripts. - - -## License - -To make Versioneer easier to embed, all its code is dedicated to the public -domain. The `_version.py` that it creates is also in the public domain. -Specifically, both are released under the Creative Commons "Public Domain -Dedication" license (CC0-1.0), as described in -https://creativecommons.org/publicdomain/zero/1.0/ . - -""" - -from __future__ import print_function -try: - import configparser -except ImportError: - import ConfigParser as configparser -import errno -import json -import os -import re -import subprocess -import sys - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_root(): - """Get the project root directory. - - We require that all commands are run from the project root, i.e. the - directory that contains setup.py, setup.cfg, and versioneer.py . - """ - root = os.path.realpath(os.path.abspath(os.getcwd())) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - # allow 'python path/to/setup.py COMMAND' - root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") - raise VersioneerBadRootError(err) - try: - # Certain runtime workflows (setup.py install/develop in a setuptools - # tree) execute all dependencies in a single python process, so - # "versioneer" may be imported multiple times, and python's shared - # module-import table will cache the first one. So we can't use - # os.path.dirname(__file__), as that will find whichever - # versioneer.py was first imported, even in later projects. - me = os.path.realpath(os.path.abspath(__file__)) - if os.path.splitext(me)[0] != os.path.splitext(versioneer_py)[0]: - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(me), versioneer_py)) - except NameError: - pass - return root - - -def get_config_from_root(root): - """Read the project setup.cfg file to determine Versioneer config.""" - # This might raise EnvironmentError (if setup.cfg is missing), or - # configparser.NoSectionError (if it lacks a [versioneer] section), or - # configparser.NoOptionError (if it lacks "VCS="). See the docstring at - # the top of versioneer.py for instructions on writing your setup.cfg . - setup_cfg = os.path.join(root, "setup.cfg") - parser = configparser.SafeConfigParser() - with open(setup_cfg, "r") as f: - parser.readfp(f) - VCS = parser.get("versioneer", "VCS") # mandatory - - def get(parser, name): - if parser.has_option("versioneer", name): - return parser.get("versioneer", name) - return None - cfg = VersioneerConfig() - cfg.VCS = VCS - cfg.style = get(parser, "style") or "" - cfg.versionfile_source = get(parser, "versionfile_source") - cfg.versionfile_build = get(parser, "versionfile_build") - cfg.tag_prefix = get(parser, "tag_prefix") - if cfg.tag_prefix in ("''", '""'): - cfg.tag_prefix = "" - cfg.parentdir_prefix = get(parser, "parentdir_prefix") - cfg.verbose = get(parser, "verbose") - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - -# these dictionaries contain VCS-specific tools -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - return None - return stdout -LONG_VERSION_PY['git'] = ''' -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.16 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" - git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" - keywords = {"refnames": git_refnames, "full": git_full} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "%(STYLE)s" - cfg.tag_prefix = "%(TAG_PREFIX)s" - cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" - cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %%s" %% dispcmd) - print(e) - return None - else: - if verbose: - print("unable to find command, tried %%s" %% (commands,)) - return None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %%s (error)" %% dispcmd) - return None - return stdout - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes - both the project name and a version string. - """ - dirname = os.path.basename(root) - if not dirname.startswith(parentdir_prefix): - if verbose: - print("guessing rootdir is '%%s', but '%%s' doesn't start with " - "prefix '%%s'" %% (root, dirname, parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None} - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %%d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%%s', no digits" %% ",".join(refs-tags)) - if verbose: - print("likely tags: %%s" %% ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %%s" %% r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags"} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - if not os.path.exists(os.path.join(root, ".git")): - if verbose: - print("no .git in %%s" %% root) - raise NotThisMethod("no .git directory") - - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%%s*" %% tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%%s'" - %% describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%%s' doesn't start with prefix '%%s'" - print(fmt %% (full_tag, tag_prefix)) - pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" - %% (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%%d" %% pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%%d" %% pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"]} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%%s'" %% style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None} - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree"} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version"} -''' - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs-tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags"} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - if not os.path.exists(os.path.join(root, ".git")): - if verbose: - print("no .git in %s" % root) - raise NotThisMethod("no .git directory") - - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - return pieces - - -def do_vcs_install(manifest_in, versionfile_source, ipy): - """Git-specific installation logic for Versioneer. - - For Git, this means creating/changing .gitattributes to mark _version.py - for export-time keyword substitution. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - files = [manifest_in, versionfile_source] - if ipy: - files.append(ipy) - try: - me = __file__ - if me.endswith(".pyc") or me.endswith(".pyo"): - me = os.path.splitext(me)[0] + ".py" - versioneer_file = os.path.relpath(me) - except NameError: - versioneer_file = "versioneer.py" - files.append(versioneer_file) - present = False - try: - f = open(".gitattributes", "r") - for line in f.readlines(): - if line.strip().startswith(versionfile_source): - if "export-subst" in line.strip().split()[1:]: - present = True - f.close() - except EnvironmentError: - pass - if not present: - f = open(".gitattributes", "a+") - f.write("%s export-subst\n" % versionfile_source) - f.close() - files.append(".gitattributes") - run_command(GITS, ["add", "--"] + files) - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes - both the project name and a version string. - """ - dirname = os.path.basename(root) - if not dirname.startswith(parentdir_prefix): - if verbose: - print("guessing rootdir is '%s', but '%s' doesn't start with " - "prefix '%s'" % (root, dirname, parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None} - -SHORT_VERSION_PY = """ -# This file was generated by 'versioneer.py' (0.16) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json -import sys - -version_json = ''' -%s -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) -""" - - -def versions_from_file(filename): - """Try to determine the version from _version.py if present.""" - try: - with open(filename) as f: - contents = f.read() - except EnvironmentError: - raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) - if not mo: - raise NotThisMethod("no version_json in _version.py") - return json.loads(mo.group(1)) - - -def write_to_version_file(filename, versions): - """Write the given version number to the given _version.py file.""" - os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) - with open(filename, "w") as f: - f.write(SHORT_VERSION_PY % contents) - - print("set %s to '%s'" % (filename, versions["version"])) - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"]} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None} - - -class VersioneerBadRootError(Exception): - """The project root directory is unknown or missing key files.""" - - -def get_versions(verbose=False): - """Get the project version from whatever source is available. - - Returns dict with two keys: 'version' and 'full'. - """ - if "versioneer" in sys.modules: - # see the discussion in cmdclass.py:get_cmdclass() - del sys.modules["versioneer"] - - root = get_root() - cfg = get_config_from_root(root) - - assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" - handlers = HANDLERS.get(cfg.VCS) - assert handlers, "unrecognized VCS '%s'" % cfg.VCS - verbose = verbose or cfg.verbose - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" - assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" - - versionfile_abs = os.path.join(root, cfg.versionfile_source) - - # extract version from first of: _version.py, VCS command (e.g. 'git - # describe'), parentdir. This is meant to work for developers using a - # source checkout, for users of a tarball created by 'setup.py sdist', - # and for users of a tarball/zipball created by 'git archive' or github's - # download-from-tag feature or the equivalent in other VCSes. - - get_keywords_f = handlers.get("get_keywords") - from_keywords_f = handlers.get("keywords") - if get_keywords_f and from_keywords_f: - try: - keywords = get_keywords_f(versionfile_abs) - ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) - if verbose: - print("got version from expanded keyword %s" % ver) - return ver - except NotThisMethod: - pass - - try: - ver = versions_from_file(versionfile_abs) - if verbose: - print("got version from file %s %s" % (versionfile_abs, ver)) - return ver - except NotThisMethod: - pass - - from_vcs_f = handlers.get("pieces_from_vcs") - if from_vcs_f: - try: - pieces = from_vcs_f(cfg.tag_prefix, root, verbose) - ver = render(pieces, cfg.style) - if verbose: - print("got version from VCS %s" % ver) - return ver - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - if verbose: - print("got version from parentdir %s" % ver) - return ver - except NotThisMethod: - pass - - if verbose: - print("unable to compute version") - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version"} - - -def get_version(): - """Get the short version string for this project.""" - return get_versions()["version"] - - -def get_cmdclass(): - """Get the custom setuptools/distutils subclasses used by Versioneer.""" - if "versioneer" in sys.modules: - del sys.modules["versioneer"] - # this fixes the "python setup.py develop" case (also 'install' and - # 'easy_install .'), in which subdependencies of the main project are - # built (using setup.py bdist_egg) in the same python process. Assume - # a main project A and a dependency B, which use different versions - # of Versioneer. A's setup.py imports A's Versioneer, leaving it in - # sys.modules by the time B's setup.py is executed, causing B to run - # with the wrong versioneer. Setuptools wraps the sub-dep builds in a - # sandbox that restores sys.modules to it's pre-build state, so the - # parent is protected against the child's "import versioneer". By - # removing ourselves from sys.modules here, before the child build - # happens, we protect the child from the parent's versioneer too. - # Also see https://github.com/warner/python-versioneer/issues/52 - - cmds = {} - - # we add "version" to both distutils and setuptools - from distutils.core import Command - - class cmd_version(Command): - description = "report generated version string" - user_options = [] - boolean_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - vers = get_versions(verbose=True) - print("Version: %s" % vers["version"]) - print(" full-revisionid: %s" % vers.get("full-revisionid")) - print(" dirty: %s" % vers.get("dirty")) - if vers["error"]: - print(" error: %s" % vers["error"]) - cmds["version"] = cmd_version - - # we override "build_py" in both distutils and setuptools - # - # most invocation pathways end up running build_py: - # distutils/build -> build_py - # distutils/install -> distutils/build ->.. - # setuptools/bdist_wheel -> distutils/install ->.. - # setuptools/bdist_egg -> distutils/install_lib -> build_py - # setuptools/install -> bdist_egg ->.. - # setuptools/develop -> ? - - # we override different "build_py" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.build_py import build_py as _build_py - else: - from distutils.command.build_py import build_py as _build_py - - class cmd_build_py(_build_py): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_py.run(self) - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - cmds["build_py"] = cmd_build_py - - if "cx_Freeze" in sys.modules: # cx_freeze enabled? - from cx_Freeze.dist import build_exe as _build_exe - - class cmd_build_exe(_build_exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _build_exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - cmds["build_exe"] = cmd_build_exe - del cmds["build_py"] - - # we override different "sdist" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.sdist import sdist as _sdist - else: - from distutils.command.sdist import sdist as _sdist - - class cmd_sdist(_sdist): - def run(self): - versions = get_versions() - self._versioneer_generated_versions = versions - # unless we update this, the command will keep using the old - # version - self.distribution.metadata.version = versions["version"] - return _sdist.run(self) - - def make_release_tree(self, base_dir, files): - root = get_root() - cfg = get_config_from_root(root) - _sdist.make_release_tree(self, base_dir, files) - # now locate _version.py in the new base_dir directory - # (remembering that it may be a hardlink) and replace it with an - # updated value - target_versionfile = os.path.join(base_dir, cfg.versionfile_source) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) - cmds["sdist"] = cmd_sdist - - return cmds - - -CONFIG_ERROR = """ -setup.cfg is missing the necessary Versioneer configuration. You need -a section like: - - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - -You will also need to edit your setup.py to use the results: - - import versioneer - setup(version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), ...) - -Please read the docstring in ./versioneer.py for configuration instructions, -edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. -""" - -SAMPLE_CONFIG = """ -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -#VCS = git -#style = pep440 -#versionfile_source = -#versionfile_build = -#tag_prefix = -#parentdir_prefix = - -""" - -INIT_PY_SNIPPET = """ -from ._version import get_versions -__version__ = get_versions()['version'] -del get_versions -""" - - -def do_setup(): - """Main VCS-independent setup function for installing Versioneer.""" - root = get_root() - try: - cfg = get_config_from_root(root) - except (EnvironmentError, configparser.NoSectionError, - configparser.NoOptionError) as e: - if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) - with open(os.path.join(root, "setup.cfg"), "a") as f: - f.write(SAMPLE_CONFIG) - print(CONFIG_ERROR, file=sys.stderr) - return 1 - - print(" creating %s" % cfg.versionfile_source) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") - if os.path.exists(ipy): - try: - with open(ipy, "r") as f: - old = f.read() - except EnvironmentError: - old = "" - if INIT_PY_SNIPPET not in old: - print(" appending to %s" % ipy) - with open(ipy, "a") as f: - f.write(INIT_PY_SNIPPET) - else: - print(" %s unmodified" % ipy) - else: - print(" %s doesn't exist, ok" % ipy) - ipy = None - - # Make sure both the top-level "versioneer.py" and versionfile_source - # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so - # they'll be copied into source distributions. Pip won't be able to - # install the package without this. - manifest_in = os.path.join(root, "MANIFEST.in") - simple_includes = set() - try: - with open(manifest_in, "r") as f: - for line in f: - if line.startswith("include "): - for include in line.split()[1:]: - simple_includes.add(include) - except EnvironmentError: - pass - # That doesn't cover everything MANIFEST.in can do - # (http://docs.python.org/2/distutils/sourcedist.html#commands), so - # it might give some false negatives. Appending redundant 'include' - # lines is safe, though. - if "versioneer.py" not in simple_includes: - print(" appending 'versioneer.py' to MANIFEST.in") - with open(manifest_in, "a") as f: - f.write("include versioneer.py\n") - else: - print(" 'versioneer.py' already in MANIFEST.in") - if cfg.versionfile_source not in simple_includes: - print(" appending versionfile_source ('%s') to MANIFEST.in" % - cfg.versionfile_source) - with open(manifest_in, "a") as f: - f.write("include %s\n" % cfg.versionfile_source) - else: - print(" versionfile_source already in MANIFEST.in") - - # Make VCS-specific changes. For git, this means creating/changing - # .gitattributes to mark _version.py for export-time keyword - # substitution. - do_vcs_install(manifest_in, cfg.versionfile_source, ipy) - return 0 - - -def scan_setup_py(): - """Validate the contents of setup.py against Versioneer's expectations.""" - found = set() - setters = False - errors = 0 - with open("setup.py", "r") as f: - for line in f.readlines(): - if "import versioneer" in line: - found.add("import") - if "versioneer.get_cmdclass()" in line: - found.add("cmdclass") - if "versioneer.get_version()" in line: - found.add("get_version") - if "versioneer.VCS" in line: - setters = True - if "versioneer.versionfile_source" in line: - setters = True - if len(found) != 3: - print("") - print("Your setup.py appears to be missing some important items") - print("(but I might be wrong). Please make sure it has something") - print("roughly like the following:") - print("") - print(" import versioneer") - print(" setup( version=versioneer.get_version(),") - print(" cmdclass=versioneer.get_cmdclass(), ...)") - print("") - errors += 1 - if setters: - print("You should remove lines like 'versioneer.VCS = ' and") - print("'versioneer.versionfile_source = ' . This configuration") - print("now lives in setup.cfg, and should be removed from setup.py") - print("") - errors += 1 - return errors - -if __name__ == "__main__": - cmd = sys.argv[1] - if cmd == "setup": - errors = do_setup() - errors += scan_setup_py() - if errors: - sys.exit(1)